<?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>204884</bug_id>
          
          <creation_ts>2019-12-05 03:31:30 -0800</creation_ts>
          <short_desc>[Win] Use ComplexTextController instead of UniscribeController</short_desc>
          <delta_ts>2020-01-22 22:49:49 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</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>167566</blocked>
    
    <blocked>172565</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Fujii Hironori">fujii</reporter>
          <assigned_to name="Fujii Hironori">fujii</assigned_to>
          <cc>achristensen</cc>
    
    <cc>annulen</cc>
    
    <cc>bfulgham</cc>
    
    <cc>don.olmstead</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>pvollan</cc>
    
    <cc>ross.kirsling</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1595765</commentid>
    <comment_count>0</comment_count>
      <attachid>384895</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-12-05 03:31:30 -0800</bug_when>
    <thetext>Created attachment 384895
WIP patch

[Win] Use ComplexTextController instead of UniscribeController</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1597948</commentid>
    <comment_count>1</comment_count>
      <attachid>385483</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-12-12 00:28:50 -0800</bug_when>
    <thetext>Created attachment 385483
WIP patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1597959</commentid>
    <comment_count>2</comment_count>
      <attachid>385485</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-12-12 01:06:27 -0800</bug_when>
    <thetext>Created attachment 385485
WIP patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1598274</commentid>
    <comment_count>3</comment_count>
      <attachid>385582</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-12-12 23:11:26 -0800</bug_when>
    <thetext>Created attachment 385582
WIP patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1598291</commentid>
    <comment_count>4</comment_count>
      <attachid>385587</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-12-13 01:58:15 -0800</bug_when>
    <thetext>Created attachment 385587
WIP patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1598822</commentid>
    <comment_count>5</comment_count>
      <attachid>385746</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-12-16 02:46:22 -0800</bug_when>
    <thetext>Created attachment 385746
WIP patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1599345</commentid>
    <comment_count>6</comment_count>
      <attachid>385870</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-12-17 02:18:08 -0800</bug_when>
    <thetext>Created attachment 385870
WIP patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1599645</commentid>
    <comment_count>7</comment_count>
      <attachid>385932</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-12-17 17:59:53 -0800</bug_when>
    <thetext>Created attachment 385932
WIP patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1599706</commentid>
    <comment_count>8</comment_count>
      <attachid>385944</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-12-17 23:45:46 -0800</bug_when>
    <thetext>Created attachment 385944
WIP patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1600612</commentid>
    <comment_count>9</comment_count>
      <attachid>386175</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-12-19 20:04:30 -0800</bug_when>
    <thetext>Created attachment 386175
WIP patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1600621</commentid>
    <comment_count>10</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-12-19 20:50:21 -0800</bug_when>
    <thetext>I checked the seven failing tests in AppleWin EWS.

fast/text/arabic-zwj-and-zwnj.html
  The arabic text hasn&apos;t been shown properly with Times font even before this change.
  I will mark it as Failure.
fast/text/atsui-rtl-override-selection.html
  New bug. Filed an Bug 205486.
fast/text/emoji-with-joiner.html
  Emoji isn&apos;t supported. It was false negative. I will mark it as Failure.
fast/text/justify-ideograph-complex.html
  Needs rebaseline.
fast/text/selection-in-initial-advance-region.html
  New bug. Filed in Bug 205487.
fast/text/stale-TextLayout-from-first-line.html
  New bug. Filed in Bug 205485.
imported/blink/editing/selection/offset-from-point-complex-scripts.html
  New bug. Filed an Bug 205486.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1600636</commentid>
    <comment_count>11</comment_count>
      <attachid>386184</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-12-19 23:12:16 -0800</bug_when>
    <thetext>Created attachment 386184
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1603467</commentid>
    <comment_count>12</comment_count>
      <attachid>386944</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2020-01-07 00:05:30 -0800</bug_when>
    <thetext>Created attachment 386944
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1604009</commentid>
    <comment_count>13</comment_count>
      <attachid>387087</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2020-01-08 02:03:06 -0800</bug_when>
    <thetext>Created attachment 387087
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1604024</commentid>
    <comment_count>14</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2020-01-08 03:02:08 -0800</bug_when>
    <thetext>Can anyone review this patch? Does AppleWin developer object to this change?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1604097</commentid>
    <comment_count>15</comment_count>
      <attachid>387087</attachid>
    <who name="Per Arne Vollan">pvollan</who>
    <bug_when>2020-01-08 08:23:14 -0800</bug_when>
    <thetext>Comment on attachment 387087
Patch

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

&gt; Source/WebCore/platform/graphics/win/ComplexTextControllerUniscribe.cpp:41
&gt; +    HWndDC hdc;

Should this be initialized?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1604422</commentid>
    <comment_count>16</comment_count>
      <attachid>387087</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2020-01-08 17:46:16 -0800</bug_when>
    <thetext>Comment on attachment 387087
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/win/ComplexTextControllerUniscribe.cpp:41
&gt;&gt; +    HWndDC hdc;
&gt; 
&gt; Should this be initialized?

I don&apos;t think so. HWndDC has ctor.
And, I didn&apos;t change the code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1604425</commentid>
    <comment_count>17</comment_count>
      <attachid>387087</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2020-01-08 17:56:56 -0800</bug_when>
    <thetext>Comment on attachment 387087
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/win/ComplexTextControllerUniscribe.cpp:41
&gt;&gt;&gt; +    HWndDC hdc;
&gt;&gt; 
&gt;&gt; Should this be initialized?
&gt; 
&gt; I don&apos;t think so. HWndDC has ctor.
&gt; And, I didn&apos;t change the code.

hdc was 0 since the beginning.

https://trac.webkit.org/changeset/23128/webkit
https://trac.webkit.org/browser/webkit/branches/WindowsMerge/WebCore/platform/win/UniscribeController.cpp?rev=23128#L183</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1604536</commentid>
    <comment_count>18</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2020-01-08 23:53:26 -0800</bug_when>
    <thetext>I found another existing ComplexTextController bug. I&apos;m going to fix it in Bug 205990.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1604744</commentid>
    <comment_count>19</comment_count>
      <attachid>387087</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2020-01-09 11:31:40 -0800</bug_when>
    <thetext>Comment on attachment 387087
Patch

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

Looks good, though I wish we could get rid of all of the GDI-based code.

&gt;&gt;&gt;&gt; Source/WebCore/platform/graphics/win/ComplexTextControllerUniscribe.cpp:41
&gt;&gt;&gt;&gt; +    HWndDC hdc;
&gt;&gt;&gt; 
&gt;&gt;&gt; Should this be initialized?
&gt;&gt; 
&gt;&gt; I don&apos;t think so. HWndDC has ctor.
&gt;&gt; And, I didn&apos;t change the code.
&gt; 
&gt; hdc was 0 since the beginning.
&gt; 
&gt; https://trac.webkit.org/changeset/23128/webkit
&gt; https://trac.webkit.org/browser/webkit/branches/WindowsMerge/WebCore/platform/win/UniscribeController.cpp?rev=23128#L183

I sure wish we could just adopt DirectWrite, rather than creating a Uniscribe implementation. :-(

&gt; Source/WebCore/platform/graphics/win/ComplexTextControllerUniscribe.cpp:42
&gt; +    HFONT oldFont = 0;

nullptr?

&gt; Source/WebCore/platform/graphics/win/ComplexTextControllerUniscribe.cpp:56
&gt; +            hdc.setHWnd(0);

nullptr?

&gt; Source/WebCore/platform/graphics/win/ComplexTextControllerUniscribe.cpp:58
&gt; +            oldFont = (HFONT)SelectObject(hdc, hfont);

This should be a C++ cast, probably reinterpret_cast</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1604967</commentid>
    <comment_count>20</comment_count>
      <attachid>387087</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2020-01-09 18:01:28 -0800</bug_when>
    <thetext>Comment on attachment 387087
Patch

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

Thank you for the review. Will fix.

&gt;&gt;&gt;&gt;&gt; Source/WebCore/platform/graphics/win/ComplexTextControllerUniscribe.cpp:41
&gt;&gt;&gt;&gt;&gt; +    HWndDC hdc;
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; Should this be initialized?
&gt;&gt;&gt; 
&gt;&gt;&gt; I don&apos;t think so. HWndDC has ctor.
&gt;&gt;&gt; And, I didn&apos;t change the code.
&gt;&gt; 
&gt;&gt; hdc was 0 since the beginning.
&gt;&gt; 
&gt;&gt; https://trac.webkit.org/changeset/23128/webkit
&gt;&gt; https://trac.webkit.org/browser/webkit/branches/WindowsMerge/WebCore/platform/win/UniscribeController.cpp?rev=23128#L183
&gt; 
&gt; I sure wish we could just adopt DirectWrite, rather than creating a Uniscribe implementation. :-(

Yeah, WinCairo wants colorful emoji.
But, it&apos;s the easiest way to fix some complex text bugs at the moment to use ComplexTextController.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1604976</commentid>
    <comment_count>21</comment_count>
      <attachid>387303</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2020-01-09 18:28:19 -0800</bug_when>
    <thetext>Created attachment 387303
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1604992</commentid>
    <comment_count>22</comment_count>
      <attachid>387303</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2020-01-09 19:52:50 -0800</bug_when>
    <thetext>Comment on attachment 387303
Patch for landing

Clearing flags on attachment: 387303

Committed r254323: &lt;https://trac.webkit.org/changeset/254323&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1604993</commentid>
    <comment_count>23</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2020-01-09 19:52:55 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1604994</commentid>
    <comment_count>24</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-01-09 19:53:21 -0800</bug_when>
    <thetext>&lt;rdar://problem/58468325&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1605055</commentid>
    <comment_count>25</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2020-01-10 03:39:48 -0800</bug_when>
    <thetext>I found one more bug.
Bug 206058 – [Win] elements of Arabic texts are over-wrapping since r254323</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1606214</commentid>
    <comment_count>26</comment_count>
      <attachid>387303</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2020-01-13 19:44:19 -0800</bug_when>
    <thetext>Comment on attachment 387303
Patch for landing

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

This patch is surprisingly simple. I thought using Uniscribe was more complicated than this...

&gt; Source/WebCore/platform/graphics/win/ComplexTextControllerUniscribe.cpp:99
&gt; +        if (hr != E_OUTOFMEMORY) {
&gt; +            ASSERT(SUCCEEDED(hr));

This ASSERT seems bogus.

&gt; Source/WebCore/platform/graphics/win/ComplexTextControllerUniscribe.cpp:162
&gt; +            const float cLogicalScale = font-&gt;platformData().useGDI() ? 1 : 32;

I know you didn&apos;t write this originally, but I&apos;d appreciate a link to the docs where these numbers come from.

&gt; Source/WebCore/platform/graphics/win/ComplexTextControllerUniscribe.cpp:172
&gt; +            // Match AppKit&apos;s rules for the integer vs. non-integer rendering modes.
&gt; +            if (!font-&gt;platformData().isSystemFont()) {
&gt; +                advance = roundf(advance);
&gt; +                offsetX = roundf(offsetX);
&gt; +                offsetY = roundf(offsetY);
&gt; +            }

Is this really needed?

&gt; Source/WebCore/platform/graphics/win/ComplexTextControllerUniscribe.cpp:176
&gt; +            // FIXME: We need to take the GOFFSETS for combining glyphs and store them in the glyph buffer
&gt; +            // as well, so that when the time comes to draw those glyphs, we can apply the appropriate
&gt; +            // translation.

I&apos;m not sure this comment is still valid.

&gt; Source/WebCore/platform/graphics/win/ComplexTextControllerUniscribe.cpp:183
&gt; +        m_complexTextRuns.append(ComplexTextRun::create(baseAdvances, origins, glyphs, stringIndices, initialAdvance, *font, cp, stringLocation, stringLength, item.iCharPos, items[i+1].iCharPos, ltr));

Cocoa should be using this constructor, too, so that we can keep CoreText stuff out of ComplexTextController.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1606303</commentid>
    <comment_count>27</comment_count>
      <attachid>387303</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2020-01-14 01:26:58 -0800</bug_when>
    <thetext>Comment on attachment 387303
Patch for landing

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

&gt;&gt; Source/WebCore/platform/graphics/win/ComplexTextControllerUniscribe.cpp:99
&gt;&gt; +            ASSERT(SUCCEEDED(hr));
&gt; 
&gt; This ASSERT seems bogus.

According to the spec, ScriptItemize can return E_INVALIDARG.

ScriptItemize function | Microsoft Docs
https://docs.microsoft.com/en-us/windows/desktop/api/usp10/nf-usp10-scriptitemize

&gt; The function returns E_INVALIDARG if pwcInChars is set to NULL, cInChars is 0, pItems is set to NULL, or cMaxItems &lt; 2.

So, I added the assert ensuring the item buffer has enough size.

&gt;&gt; Source/WebCore/platform/graphics/win/ComplexTextControllerUniscribe.cpp:162
&gt;&gt; +            const float cLogicalScale = font-&gt;platformData().useGDI() ? 1 : 32;
&gt; 
&gt; I know you didn&apos;t write this originally, but I&apos;d appreciate a link to the docs where these numbers come from.

The code was added by r28867.
It draws texts using ExtTextOut with ETO_GLYPH_INDEX for useGDI code path.
  
But, r126666 removes drawGDIGlyphs, the most important part of useGDI code path.

I will remove remaining code for useGDI.

&gt;&gt; Source/WebCore/platform/graphics/win/ComplexTextControllerUniscribe.cpp:172
&gt;&gt; +            }
&gt; 
&gt; Is this really needed?

This code was added by r23128 and r23199.
I don&apos;t know why.
Should I remove the code?

&gt;&gt; Source/WebCore/platform/graphics/win/ComplexTextControllerUniscribe.cpp:176
&gt;&gt; +            // translation.
&gt; 
&gt; I&apos;m not sure this comment is still valid.

This comment was added by r23154.
r23199 seems fixed the issue. I will remove the comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1606369</commentid>
    <comment_count>28</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2020-01-14 07:09:39 -0800</bug_when>
    <thetext>(In reply to Myles C. Maxfield from comment #26)
&gt; 
&gt; This patch is surprisingly simple. I thought using Uniscribe was more
&gt; complicated than this...

Because I split a complicated part into Bug 205485 😅</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1607810</commentid>
    <comment_count>29</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2020-01-16 17:25:24 -0800</bug_when>
    <thetext>Committed r254729: &lt;https://trac.webkit.org/changeset/254729&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1607811</commentid>
    <comment_count>30</comment_count>
      <attachid>387303</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2020-01-16 17:26:49 -0800</bug_when>
    <thetext>Comment on attachment 387303
Patch for landing

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/win/ComplexTextControllerUniscribe.cpp:162
&gt;&gt;&gt; +            const float cLogicalScale = font-&gt;platformData().useGDI() ? 1 : 32;
&gt;&gt; 
&gt;&gt; I know you didn&apos;t write this originally, but I&apos;d appreciate a link to the docs where these numbers come from.
&gt; 
&gt; The code was added by r28867.
&gt; It draws texts using ExtTextOut with ETO_GLYPH_INDEX for useGDI code path.
&gt;   
&gt; But, r126666 removes drawGDIGlyphs, the most important part of useGDI code path.
&gt; 
&gt; I will remove remaining code for useGDI.

Filed Bug 206273.

&gt;&gt;&gt; Source/WebCore/platform/graphics/win/ComplexTextControllerUniscribe.cpp:176
&gt;&gt;&gt; +            // translation.
&gt;&gt; 
&gt;&gt; I&apos;m not sure this comment is still valid.
&gt; 
&gt; This comment was added by r23154.
&gt; r23199 seems fixed the issue. I will remove the comment.

Landed r254729.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>384895</attachid>
            <date>2019-12-05 03:31:30 -0800</date>
            <delta_ts>2019-12-12 00:28:50 -0800</delta_ts>
            <desc>WIP patch</desc>
            <filename>a.diff</filename>
            <type>text/plain</type>
            <size>48151</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luLmNtYWtlIGIvU291cmNlL1dl
YkNvcmUvUGxhdGZvcm1XaW4uY21ha2UKaW5kZXggZDFmZDRlYjEyZGQuLmRlODZmZDNhMDQxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbi5jbWFrZQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9QbGF0Zm9ybVdpbi5jbWFrZQpAQCAtNTEsNiArNTEsNyBAQCBsaXN0KEFQUEVORCBX
ZWJDb3JlX1NPVVJDRVMKIAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db2xvckRpcmVjdDJE
LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db21wbGV4VGV4dENvbnRyb2xsZXJEaXJl
Y3RXcml0ZS5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vQ29tcGxleFRleHRDb250cm9s
bGVyVW5pc2NyaWJlLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9ESUJQaXhlbERhdGEu
Y3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Zsb2F0UG9pbnREaXJlY3QyRC5jcHAKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRmxvYXRSZWN0RGlyZWN0MkQuY3BwCkBAIC02OSw3ICs3
MCw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9TaW1wbGVGb250RGF0YVdpbi5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vVHJh
bnNmb3JtYXRpb25NYXRyaXhEaXJlY3QyRC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
VHJhbnNmb3JtYXRpb25NYXRyaXhXaW4uY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1Vu
aXNjcmliZUNvbnRyb2xsZXIuY3BwCiAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL3dpbi9Eb3dubG9h
ZEJ1bmRsZVdpbi5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL3dpbi9OZXR3b3JrU3RhdGVOb3Rp
Zmllcldpbi5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwCmluZGV4IDg0NzI4NDllYWQwLi4xODcxOGRl
OTVkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29tcGxl
eFRleHRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwCkBAIC00MywzMyArNDMsNiBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLSNpZiBQTEFURk9STShXSU4pICYmICFVU0UoRElSRUNUMkQpCi0KLWNs
YXNzIFRleHRMYXlvdXQgewotfTsKLQotdm9pZCBUZXh0TGF5b3V0RGVsZXRlcjo6b3BlcmF0b3Io
KShUZXh0TGF5b3V0KikgY29uc3QKLXsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPFRleHRMYXlvdXQs
IFRleHRMYXlvdXREZWxldGVyPiBGb250Q2FzY2FkZTo6Y3JlYXRlTGF5b3V0KFJlbmRlclRleHQm
LCBmbG9hdCwgYm9vbCkgY29uc3QKLXsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotZmxvYXQg
Rm9udENhc2NhZGU6OndpZHRoKFRleHRMYXlvdXQmLCB1bnNpZ25lZCwgdW5zaWduZWQsIEhhc2hT
ZXQ8Y29uc3QgRm9udCo+KikKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1
cm4gMDsKLX0KLQotdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmNvbGxlY3RDb21wbGV4VGV4
dFJ1bnNGb3JDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQsIHVuc2lnbmVkLCBjb25z
dCBGb250KikKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotI2Vsc2UKLQogY2xh
c3MgVGV4dExheW91dCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CkBA
IC04OTMsNiArODY2LDQgQEAgQ29tcGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4dFJ1bjo6
Q29tcGxleFRleHRSdW4oY29uc3QgVmVjdG9yPEZsb2F0U2l6ZT4mIGEKIHsKIH0KIAotI2VuZGlm
Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcAppbmRleCA0MTI3NDdhY2Y4Yy4uM2YxMDRlYzBjN2Ig
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5j
cHAKQEAgLTQxLDEwICs0MSw2IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0cmluZ0hhc2gu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKLSNpZiBQTEFURk9STShX
SU4pICYmICFVU0UoRElSRUNUMkQpCi0jaW5jbHVkZSAiVW5pc2NyaWJlQ29udHJvbGxlci5oIgot
I2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIFdURjo6VW5p
Y29kZTsKQEAgLTM1MCwxNSArMzQ2LDYgQEAgZmxvYXQgRm9udENhc2NhZGU6OndpZHRoT2ZUZXh0
UmFuZ2UoY29uc3QgVGV4dFJ1biYgcnVuLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZAogCiAgICAg
YXV0byBjb2RlUGF0aFRvVXNlID0gY29kZVBhdGgocnVuKTsKICAgICBpZiAoY29kZVBhdGhUb1Vz
ZSA9PSBDb21wbGV4KSB7Ci0jaWYgUExBVEZPUk0oV0lOKSAmJiAhVVNFKERJUkVDVDJEKQotICAg
ICAgICBVbmlzY3JpYmVDb250cm9sbGVyIGl0KHRoaXMsIHJ1bik7Ci0gICAgICAgIGl0LmFkdmFu
Y2UoZnJvbSk7Ci0gICAgICAgIG9mZnNldEJlZm9yZVJhbmdlID0gaXQucnVuV2lkdGhTb0Zhcigp
OwotICAgICAgICBpdC5hZHZhbmNlKHRvKTsKLSAgICAgICAgb2Zmc2V0QWZ0ZXJSYW5nZSA9IGl0
LnJ1bldpZHRoU29GYXIoKTsKLSAgICAgICAgaXQuYWR2YW5jZSh0byk7Ci0gICAgICAgIHRvdGFs
V2lkdGggPSBpdC5ydW5XaWR0aFNvRmFyKCk7Ci0jZWxzZQogICAgICAgICBDb21wbGV4VGV4dENv
bnRyb2xsZXIgY29tcGxleEl0ZXJhdG9yKCp0aGlzLCBydW4sIGZhbHNlLCBmYWxsYmFja0ZvbnRz
KTsKICAgICAgICAgY29tcGxleEl0ZXJhdG9yLmFkdmFuY2UoZnJvbSwgbnVsbHB0ciwgSW5jbHVk
ZVBhcnRpYWxHbHlwaHMsIGZhbGxiYWNrRm9udHMpOwogICAgICAgICBvZmZzZXRCZWZvcmVSYW5n
ZSA9IGNvbXBsZXhJdGVyYXRvci5ydW5XaWR0aFNvRmFyKCk7CkBAIC0zNjYsNyArMzUzLDYgQEAg
ZmxvYXQgRm9udENhc2NhZGU6OndpZHRoT2ZUZXh0UmFuZ2UoY29uc3QgVGV4dFJ1biYgcnVuLCB1
bnNpZ25lZCBmcm9tLCB1bnNpZ25lZAogICAgICAgICBvZmZzZXRBZnRlclJhbmdlID0gY29tcGxl
eEl0ZXJhdG9yLnJ1bldpZHRoU29GYXIoKTsKICAgICAgICAgY29tcGxleEl0ZXJhdG9yLmFkdmFu
Y2UocnVuLmxlbmd0aCgpLCBudWxscHRyLCBJbmNsdWRlUGFydGlhbEdseXBocywgZmFsbGJhY2tG
b250cyk7CiAgICAgICAgIHRvdGFsV2lkdGggPSBjb21wbGV4SXRlcmF0b3IucnVuV2lkdGhTb0Zh
cigpOwotI2VuZGlmCiAgICAgfSBlbHNlIHsKICAgICAgICAgV2lkdGhJdGVyYXRvciBzaW1wbGVJ
dGVyYXRvcih0aGlzLCBydW4sIGZhbGxiYWNrRm9udHMpOwogICAgICAgICBzaW1wbGVJdGVyYXRv
ci5hZHZhbmNlKGZyb20sIG51bGxwdHIpOwpAQCAtMTM5Nyw3ICsxMzgzLDYgQEAgZmxvYXQgRm9u
dENhc2NhZGU6OmdldEdseXBoc0FuZEFkdmFuY2VzRm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVu
JiBydW4sIHVuc2lnbmUKICAgICByZXR1cm4gaW5pdGlhbEFkdmFuY2U7CiB9CiAKLSNpZiAhUExB
VEZPUk0oV0lOKSB8fCBVU0UoRElSRUNUMkQpCiBmbG9hdCBGb250Q2FzY2FkZTo6Z2V0R2x5cGhz
QW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIHVuc2lnbmVkIGZy
b20sIHVuc2lnbmVkIHRvLCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIEZvclRleHRFbXBoYXNp
c09yTm90IGZvclRleHRFbXBoYXNpcykgY29uc3QKIHsKICAgICBmbG9hdCBpbml0aWFsQWR2YW5j
ZTsKQEAgLTE0MjcsNyArMTQxMiw2IEBAIGZsb2F0IEZvbnRDYXNjYWRlOjpnZXRHbHlwaHNBbmRB
ZHZhbmNlc0ZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgdW5zaWduCiAKICAgICBy
ZXR1cm4gaW5pdGlhbEFkdmFuY2U7CiB9Ci0jZW5kaWYKIAogdm9pZCBGb250Q2FzY2FkZTo6ZHJh
d0VtcGhhc2lzTWFya3NGb3JTaW1wbGVUZXh0KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29u
c3QgVGV4dFJ1biYgcnVuLCBjb25zdCBBdG9tU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50
JiBwb2ludCwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8pIGNvbnN0CiB7CkBAIC0xNTQ1LDcg
KzE1MjksNiBAQCBmbG9hdCBGb250Q2FzY2FkZTo6ZmxvYXRXaWR0aEZvclNpbXBsZVRleHQoY29u
c3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IEZvbgogICAgIHJldHVybiBpdC5tX3J1bldp
ZHRoU29GYXI7CiB9CiAKLSNpZiAhUExBVEZPUk0oV0lOKSB8fCBVU0UoRElSRUNUMkQpCiBmbG9h
dCBGb250Q2FzY2FkZTo6ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1
biwgSGFzaFNldDxjb25zdCBGb250Kj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqIGds
eXBoT3ZlcmZsb3cpIGNvbnN0CiB7CiAgICAgQ29tcGxleFRleHRDb250cm9sbGVyIGNvbnRyb2xs
ZXIoKnRoaXMsIHJ1biwgdHJ1ZSwgZmFsbGJhY2tGb250cyk7CkBAIC0xNTU3LDcgKzE1NDAsNiBA
QCBmbG9hdCBGb250Q2FzY2FkZTo6ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRS
dW4mIHJ1biwgSGFzaFNldDxjb25zdCBGbwogICAgIH0KICAgICByZXR1cm4gY29udHJvbGxlci50
b3RhbFdpZHRoKCk7CiB9Ci0jZW5kaWYKIAogdm9pZCBGb250Q2FzY2FkZTo6YWRqdXN0U2VsZWN0
aW9uUmVjdEZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBMYXlvdXRSZWN0JiBzZWxl
Y3Rpb25SZWN0LCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bykgY29uc3QKIHsKQEAgLTE1Nzgs
NyArMTU2MCw2IEBAIHZvaWQgRm9udENhc2NhZGU6OmFkanVzdFNlbGVjdGlvblJlY3RGb3JTaW1w
bGVUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgTGF5b3V0UmVjCiAgICAgc2VsZWN0aW9uUmVjdC5z
ZXRXaWR0aChMYXlvdXRVbml0Ojpmcm9tRmxvYXRDZWlsKGFmdGVyV2lkdGggLSBiZWZvcmVXaWR0
aCkpOwogfQogCi0jaWYgIVBMQVRGT1JNKFdJTikgfHwgVVNFKERJUkVDVDJEKQogdm9pZCBGb250
Q2FzY2FkZTo6YWRqdXN0U2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4m
IHJ1biwgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQg
dG8pIGNvbnN0CiB7CiAgICAgQ29tcGxleFRleHRDb250cm9sbGVyIGNvbnRyb2xsZXIoKnRoaXMs
IHJ1bik7CkBAIC0xNTkzLDcgKzE1NzQsNiBAQCB2b2lkIEZvbnRDYXNjYWRlOjphZGp1c3RTZWxl
Y3Rpb25SZWN0Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBMYXlvdXRSZQogICAg
ICAgICBzZWxlY3Rpb25SZWN0Lm1vdmUoYmVmb3JlV2lkdGgsIDApOwogICAgIHNlbGVjdGlvblJl
Y3Quc2V0V2lkdGgoTGF5b3V0VW5pdDo6ZnJvbUZsb2F0Q2VpbChhZnRlcldpZHRoIC0gYmVmb3Jl
V2lkdGgpKTsKIH0KLSNlbmRpZgogCiBpbnQgRm9udENhc2NhZGU6Om9mZnNldEZvclBvc2l0aW9u
Rm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGZsb2F0IHgsIGJvb2wgaW5jbHVkZVBh
cnRpYWxHbHlwaHMpIGNvbnN0CiB7CkBAIC0xNjM4LDEzICsxNjE4LDExIEBAIGludCBGb250Q2Fz
Y2FkZTo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwg
ZmxvYXQgeCwgYm9vCiAgICAgcmV0dXJuIG9mZnNldDsKIH0KIAotI2lmICFQTEFURk9STShXSU4p
IHx8IFVTRShESVJFQ1QyRCkKIGludCBGb250Q2FzY2FkZTo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JD
b21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGZsb2F0IHgsIGJvb2wgaW5jbHVkZVBhcnRp
YWxHbHlwaHMpIGNvbnN0CiB7CiAgICAgQ29tcGxleFRleHRDb250cm9sbGVyIGNvbnRyb2xsZXIo
KnRoaXMsIHJ1bik7CiAgICAgcmV0dXJuIGNvbnRyb2xsZXIub2Zmc2V0Rm9yUG9zaXRpb24oeCwg
aW5jbHVkZVBhcnRpYWxHbHlwaHMpOwogfQotI2VuZGlmCiAKICNpZiAhUExBVEZPUk0oQ09DT0Ep
ICYmICFVU0UoSEFSRkJVWlopCiAvLyBGSVhNRTogVW5pZnkgdGhpcyB3aXRoIHRoZSBtYWNPUyBh
bmQgaU9TIGltcGxlbWVudGF0aW9uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRDYXNjYWRlLmgKaW5kZXggMmJjZGYxMDZlNmMuLjcyOTc4ZTkwYzRlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmgKQEAgLTI3OCwx
MSArMjc4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBp
ZiAodGV4dFJlbmRlcmluZ01vZGUgPT0gVGV4dFJlbmRlcmluZ01vZGU6Ok9wdGltaXplU3BlZWQp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0jaWYgUExBVEZPUk0oQ09DT0EpIHx8IFVTRShG
UkVFVFlQRSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0jZWxzZQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0jZW5kaWYKICAgICB9CiAKICAgICBib29sIGNvbXB1dGVFbmFibGVLZXJuaW5nKCkgY29u
c3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db21w
bGV4VGV4dENvbnRyb2xsZXJVbmlzY3JpYmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0NvbXBsZXhUZXh0Q29udHJvbGxlclVuaXNjcmliZS5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmMxMmVmZDBhMGFiCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbXBsZXhUZXh0Q29u
dHJvbGxlclVuaXNjcmliZS5jcHAKQEAgLTAsMCArMSwzMTQgQEAKKy8qCisqIENvcHlyaWdodCAo
QykgMjAxNy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworKiBhcmUgbWV0OgorKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJyBBTkQgQU5ZCisqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMKKyogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiQ29tcGxleFRleHRDb250cm9sbGVyLmgiCisKKyNpZiAhVVNFKERJUkVDVDJEKQorCisj
aW5jbHVkZSAiRm9udENhY2hlLmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKKyNpbmNsdWRl
ICJIV25kREMuaCIKKyNpbmNsdWRlIDx1c3AxMC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K3N0YXRpYyBib29sIHNoYXBlQnlVbmlzY3JpYmUoY29uc3QgVUNoYXIqIHN0ciwgaW50IGxlbiwg
U0NSSVBUX0lURU0gaXRlbSwgY29uc3QgRm9udCogZm9udERhdGEsCisgICAgVmVjdG9yPFdPUkQ+
JiBnbHlwaHMsIFZlY3RvcjxXT1JEPiYgY2x1c3RlcnMsCisgICAgVmVjdG9yPFNDUklQVF9WSVNB
VFRSPiYgdmlzdWFsQXR0cmlidXRlcykKK3sKKyAgICBIV25kREMgaGRjOworICAgIEhGT05UIG9s
ZEZvbnQgPSAwOworICAgIEhSRVNVTFQgc2hhcGVSZXN1bHQgPSBFX1BFTkRJTkc7CisgICAgaW50
IGdseXBoQ291bnQgPSAwOworCisgICAgaWYgKCFmb250RGF0YSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgZG8geworICAgICAgICBzaGFwZVJlc3VsdCA9IFNjcmlwdFNoYXBlKGhkYywg
Zm9udERhdGEtPnNjcmlwdENhY2hlKCksIHdjaGFyRnJvbShzdHIpLCBsZW4sIGdseXBocy5zaXpl
KCksICZpdGVtLmEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhzLmRh
dGEoKSwgY2x1c3RlcnMuZGF0YSgpLCB2aXN1YWxBdHRyaWJ1dGVzLmRhdGEoKSwgJmdseXBoQ291
bnQpOworICAgICAgICBpZiAoc2hhcGVSZXN1bHQgPT0gRV9QRU5ESU5HKSB7CisgICAgICAgICAg
ICAvLyBUaGUgc2NyaXB0IGNhY2hlIGlzbid0IHByaW1lZCB3aXRoIGVub3VnaCBpbmZvIHlldC4g
IFdlIG5lZWQgdG8gc2VsZWN0IG91ciBIRk9OVCBpbnRvCisgICAgICAgICAgICAvLyBhIERDIGFu
ZCBwYXNzIHRoZSBEQyBpbiB0byBTY3JpcHRTaGFwZS4KKyAgICAgICAgICAgIEFTU0VSVCghaGRj
KTsKKyAgICAgICAgICAgIGhkYy5zZXRIV25kKDApOworICAgICAgICAgICAgSEZPTlQgaGZvbnQg
PSBmb250RGF0YS0+cGxhdGZvcm1EYXRhKCkuaGZvbnQoKTsKKyAgICAgICAgICAgIG9sZEZvbnQg
PSAoSEZPTlQpU2VsZWN0T2JqZWN0KGhkYywgaGZvbnQpOworICAgICAgICB9IGVsc2UgaWYgKHNo
YXBlUmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpIHsKKyAgICAgICAgICAgIC8vIE5lZWQgdG8gcmVz
aXplIG91ciBidWZmZXJzLgorICAgICAgICAgICAgZ2x5cGhzLnJlc2l6ZShnbHlwaHMuc2l6ZSgp
ICogMik7CisgICAgICAgICAgICB2aXN1YWxBdHRyaWJ1dGVzLnJlc2l6ZShnbHlwaHMuc2l6ZSgp
KTsKKyAgICAgICAgfQorICAgIH0gd2hpbGUgKHNoYXBlUmVzdWx0ID09IEVfUEVORElORyB8fCBz
aGFwZVJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKKworICAgIGlmIChoZGMpCisgICAgICAgIFNl
bGVjdE9iamVjdChoZGMsIG9sZEZvbnQpOworCisgICAgaWYgKEZBSUxFRChzaGFwZVJlc3VsdCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGdseXBocy5zaHJpbmsoZ2x5cGhDb3VudCk7
CisgICAgdmlzdWFsQXR0cmlidXRlcy5zaHJpbmsoZ2x5cGhDb3VudCk7CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworY2xhc3MgVW5pc2NyaWJlQ29udHJvbGxlciB7CitwdWJsaWM6CisgICAgVW5p
c2NyaWJlQ29udHJvbGxlcihjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3QgVGV4dFJ1biYg
cnVuLCBWZWN0b3I8U0NSSVBUX0lURU0+JiBpdGVtcykKKyAgICAgICAgOiBtX2ZvbnQoZm9udCkK
KyAgICAgICAgLCBtX3J1bihydW4pCisgICAgICAgICwgbV9pdGVtcyhpdGVtcykKKyAgICAgICAg
LCBtX3BhZGRpbmcocnVuLmV4cGFuc2lvbigpKQorICAgIHsKKyAgICAgICAgaWYgKCFtX3BhZGRp
bmcpCisgICAgICAgICAgICBtX3BhZFBlclNwYWNlID0gMDsKKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICBmbG9hdCBudW1TcGFjZXMgPSAwOworICAgICAgICAgICAgZm9yIChpbnQgcyA9IDA7
IHMgPCBtX3J1bi5sZW5ndGgoKTsgcysrKSB7CisgICAgICAgICAgICAgICAgaWYgKEZvbnRDYXNj
YWRlOjp0cmVhdEFzU3BhY2UobV9ydW5bc10pKQorICAgICAgICAgICAgICAgICAgICBudW1TcGFj
ZXMrKzsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKG51bVNwYWNlcyA9PSAwKQor
ICAgICAgICAgICAgICAgIG1fcGFkUGVyU3BhY2UgPSAwOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIG1fcGFkUGVyU3BhY2UgPSBtX3BhZGRpbmcgLyBudW1TcGFjZXM7CisgICAg
ICAgIH0KKyAgICB9CisgICAgYm9vbCBzaGFwZUFuZFBsYWNlSXRlbShjb25zdCBVQ2hhciogY3As
IHVuc2lnbmVkIGksIGNvbnN0IEZvbnQqIGZvbnREYXRhLCBHbHlwaEJ1ZmZlciogZ2x5cGhCdWZm
ZXIpOworCitwcml2YXRlOgorICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBtX2ZvbnQ7CisgICAgY29u
c3QgVGV4dFJ1biYgbV9ydW47CisgICAgVmVjdG9yPFNDUklQVF9JVEVNPiYgbV9pdGVtczsKKyAg
ICBmbG9hdCBtX3BhZGRpbmc7CisgICAgZmxvYXQgbV9wYWRQZXJTcGFjZTsKK307CisKKworYm9v
bCBVbmlzY3JpYmVDb250cm9sbGVyOjpzaGFwZUFuZFBsYWNlSXRlbShjb25zdCBVQ2hhciogY3As
IHVuc2lnbmVkIGksIGNvbnN0IEZvbnQqIGZvbnREYXRhLCBHbHlwaEJ1ZmZlciogZ2x5cGhCdWZm
ZXIpCit7CisgICAgLy8gRGV0ZXJtaW5lIHRoZSBzdHJpbmcgZm9yIHRoaXMgaXRlbS4KKyAgICBj
b25zdCBVQ2hhciogc3RyID0gY3AgKyBtX2l0ZW1zW2ldLmlDaGFyUG9zOworICAgIGludCBsZW4g
PSBtX2l0ZW1zW2krMV0uaUNoYXJQb3MgLSBtX2l0ZW1zW2ldLmlDaGFyUG9zOworICAgIFNDUklQ
VF9JVEVNIGl0ZW0gPSBtX2l0ZW1zW2ldOworCisgICAgLy8gU2V0IHVwIGJ1ZmZlcnMgdG8gaG9s
ZCB0aGUgcmVzdWx0cyBvZiBzaGFwaW5nIHRoZSBpdGVtLgorICAgIFZlY3RvcjxXT1JEPiBnbHlw
aHM7CisgICAgVmVjdG9yPFdPUkQ+IGNsdXN0ZXJzOworICAgIFZlY3RvcjxTQ1JJUFRfVklTQVRU
Uj4gdmlzdWFsQXR0cmlidXRlczsKKyAgICBjbHVzdGVycy5yZXNpemUobGVuKTsKKyAgICAgCisg
ICAgLy8gU2hhcGUgdGhlIGl0ZW0uCisgICAgLy8gVGhlIHJlY29tbWVuZGVkIHNpemUgZm9yIHRo
ZSBnbHlwaCBidWZmZXIgaXMgMS41ICogdGhlIGNoYXJhY3RlciBsZW5ndGggKyAxNiBpbiB0aGUg
dW5pc2NyaWJlIGRvY3MuCisgICAgLy8gQXBwYXJlbnRseSB0aGlzIGlzIGEgZ29vZCBzaXplIHRv
IGF2b2lkIGhhdmluZyB0byBtYWtlIHJlcGVhdGVkIGNhbGxzIHRvIFNjcmlwdFNoYXBlLgorICAg
IGdseXBocy5yZXNpemUoMS41ICogbGVuICsgMTYpOworICAgIHZpc3VhbEF0dHJpYnV0ZXMucmVz
aXplKGdseXBocy5zaXplKCkpOworCisgICAgaWYgKCFzaGFwZUJ5VW5pc2NyaWJlKHN0ciwgbGVu
LCBpdGVtLCBmb250RGF0YSwgZ2x5cGhzLCBjbHVzdGVycywgdmlzdWFsQXR0cmlidXRlcykpCisg
ICAgICAgIHJldHVybiB0cnVlOworCisgICAgVmVjdG9yPE9wdGlvbmFsPHVuc2lnbmVkPj4gc3Ry
aW5nT2Zmc2V0cyhnbHlwaHMuc2l6ZSgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bGVuOyArK2kpIHsKKyAgICAgICAgaWYgKHN0cmluZ09mZnNldHNbY2x1c3RlcnNbaV1dKQorICAg
ICAgICAgICAgc3RyaW5nT2Zmc2V0c1tjbHVzdGVyc1tpXV0gPSBzdGQ6Om1pbigqc3RyaW5nT2Zm
c2V0c1tjbHVzdGVyc1tpXV0sIGkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzdHJpbmdP
ZmZzZXRzW2NsdXN0ZXJzW2ldXSA9IGk7CisgICAgfQorCisgICAgLy8gV2Ugbm93IGhhdmUgYSBj
b2xsZWN0aW9uIG9mIGdseXBocy4KKyAgICBWZWN0b3I8R09GRlNFVD4gb2Zmc2V0czsKKyAgICBW
ZWN0b3I8aW50PiBhZHZhbmNlczsKKyAgICBvZmZzZXRzLnJlc2l6ZShnbHlwaHMuc2l6ZSgpKTsK
KyAgICBhZHZhbmNlcy5yZXNpemUoZ2x5cGhzLnNpemUoKSk7CisgICAgSFJFU1VMVCBwbGFjZVJl
c3VsdCA9IFNjcmlwdFBsYWNlKDAsIGZvbnREYXRhLT5zY3JpcHRDYWNoZSgpLCBnbHlwaHMuZGF0
YSgpLCBnbHlwaHMuc2l6ZSgpLCB2aXN1YWxBdHRyaWJ1dGVzLmRhdGEoKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJml0ZW0uYSwgYWR2YW5jZXMuZGF0YSgpLCBvZmZz
ZXRzLmRhdGEoKSwgMCk7CisgICAgaWYgKHBsYWNlUmVzdWx0ID09IEVfUEVORElORykgeworICAg
ICAgICAvLyBUaGUgc2NyaXB0IGNhY2hlIGlzbid0IHByaW1lZCB3aXRoIGVub3VnaCBpbmZvIHll
dC4gIFdlIG5lZWQgdG8gc2VsZWN0IG91ciBIRk9OVCBpbnRvCisgICAgICAgIC8vIGEgREMgYW5k
IHBhc3MgdGhlIERDIGluIHRvIFNjcmlwdFBsYWNlLgorICAgICAgICBIV25kREMgaGRjKDApOwor
ICAgICAgICBIRk9OVCBoZm9udCA9IGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5oZm9udCgpOwor
ICAgICAgICBIRk9OVCBvbGRGb250ID0gKEhGT05UKVNlbGVjdE9iamVjdChoZGMsIGhmb250KTsK
KyAgICAgICAgcGxhY2VSZXN1bHQgPSBTY3JpcHRQbGFjZShoZGMsIGZvbnREYXRhLT5zY3JpcHRD
YWNoZSgpLCBnbHlwaHMuZGF0YSgpLCBnbHlwaHMuc2l6ZSgpLCB2aXN1YWxBdHRyaWJ1dGVzLmRh
dGEoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaXRlbS5hLCBhZHZhbmNl
cy5kYXRhKCksIG9mZnNldHMuZGF0YSgpLCAwKTsKKyAgICAgICAgU2VsZWN0T2JqZWN0KGhkYywg
b2xkRm9udCk7CisgICAgfQorICAgIAorICAgIGlmIChGQUlMRUQocGxhY2VSZXN1bHQpIHx8IGds
eXBocy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8gQ29udmVydCBh
bGwgY2hhcnMgdGhhdCBzaG91bGQgYmUgdHJlYXRlZCBhcyBzcGFjZXMgdG8gdXNlIHRoZSBzcGFj
ZSBnbHlwaC4KKyAgICAvLyBXZSBhbHNvIGNyZWF0ZSBhIG1hcCB0aGF0IGFsbG93cyB1cyB0byBx
dWlja2x5IGdvIGZyb20gc3BhY2UgZ2x5cGhzIGJhY2sgdG8gdGhlaXIgY29ycmVzcG9uZGluZyBj
aGFyYWN0ZXJzLgorICAgIFZlY3RvcjxpbnQ+IHNwYWNlQ2hhcmFjdGVycyhnbHlwaHMuc2l6ZSgp
KTsKKyAgICBzcGFjZUNoYXJhY3RlcnMuZmlsbCgtMSk7CisKKyAgICBjb25zdCBmbG9hdCBjTG9n
aWNhbFNjYWxlID0gZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLnVzZUdESSgpID8gMS4wZiA6IDMy
LjBmOworICAgIGZsb2F0IHNwYWNlV2lkdGggPSBmb250RGF0YS0+c3BhY2VXaWR0aCgpIC0gZm9u
dERhdGEtPnN5bnRoZXRpY0JvbGRPZmZzZXQoKTsKKyAgICB1bnNpZ25lZCBsb2dpY2FsU3BhY2VX
aWR0aCA9IHNwYWNlV2lkdGggKiBjTG9naWNhbFNjYWxlOworCisgICAgZm9yIChpbnQgayA9IDA7
IGsgPCBsZW47IGsrKykgeworICAgICAgICBVQ2hhciBjaCA9ICooc3RyICsgayk7CisgICAgICAg
IGJvb2wgdHJlYXRBc1NwYWNlID0gRm9udENhc2NhZGU6OnRyZWF0QXNTcGFjZShjaCk7CisgICAg
ICAgIGJvb2wgdHJlYXRBc1plcm9XaWR0aFNwYWNlID0gRm9udENhc2NhZGU6OnRyZWF0QXNaZXJv
V2lkdGhTcGFjZShjaCk7CisgICAgICAgIGlmICh0cmVhdEFzU3BhY2UgfHwgdHJlYXRBc1plcm9X
aWR0aFNwYWNlKSB7CisgICAgICAgICAgICAvLyBTdWJzdGl0dXRlIGluIHRoZSBzcGFjZSBnbHlw
aCBhdCB0aGUgYXBwcm9wcmlhdGUgcGxhY2UgaW4gdGhlIGdseXBocworICAgICAgICAgICAgLy8g
YXJyYXkuCisgICAgICAgICAgICBnbHlwaHNbY2x1c3RlcnNba11dID0gZm9udERhdGEtPnNwYWNl
R2x5cGgoKTsKKyAgICAgICAgICAgIGFkdmFuY2VzW2NsdXN0ZXJzW2tdXSA9IHRyZWF0QXNTcGFj
ZSA/IGxvZ2ljYWxTcGFjZVdpZHRoIDogMDsKKyAgICAgICAgICAgIGlmICh0cmVhdEFzU3BhY2Up
CisgICAgICAgICAgICAgICAgc3BhY2VDaGFyYWN0ZXJzW2NsdXN0ZXJzW2tdXSA9IGsgKyBpdGVt
LmlDaGFyUG9zOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gUG9wdWxhdGUgb3VyIGdseXBo
IGJ1ZmZlciB3aXRoIHRoaXMgaW5mb3JtYXRpb24uCisgICAgYm9vbCBoYXNFeHRyYVNwYWNpbmcg
PSBtX2ZvbnQubGV0dGVyU3BhY2luZygpIHx8IG1fZm9udC53b3JkU3BhY2luZygpIHx8IG1fcGFk
ZGluZzsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgZ2x5cGhzLnNpemUoKTsg
aysrKSB7CisgICAgICAgIEdseXBoIGdseXBoID0gZ2x5cGhzW2tdOworICAgICAgICBmbG9hdCBh
ZHZhbmNlID0gYWR2YW5jZXNba10gLyBjTG9naWNhbFNjYWxlOworICAgICAgICBmbG9hdCBvZmZz
ZXRYID0gb2Zmc2V0c1trXS5kdSAvIGNMb2dpY2FsU2NhbGU7CisgICAgICAgIGZsb2F0IG9mZnNl
dFkgPSBvZmZzZXRzW2tdLmR2IC8gY0xvZ2ljYWxTY2FsZTsKKworICAgICAgICAvLyBNYXRjaCBB
cHBLaXQncyBydWxlcyBmb3IgdGhlIGludGVnZXIgdnMuIG5vbi1pbnRlZ2VyIHJlbmRlcmluZyBt
b2Rlcy4KKyAgICAgICAgZmxvYXQgcm91bmRlZEFkdmFuY2UgPSByb3VuZGYoYWR2YW5jZSk7Cisg
ICAgICAgIGlmICghZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLmlzU3lzdGVtRm9udCgpKSB7Cisg
ICAgICAgICAgICBhZHZhbmNlID0gcm91bmRlZEFkdmFuY2U7CisgICAgICAgICAgICBvZmZzZXRY
ID0gcm91bmRmKG9mZnNldFgpOworICAgICAgICAgICAgb2Zmc2V0WSA9IHJvdW5kZihvZmZzZXRZ
KTsKKyAgICAgICAgfQorCisgICAgICAgIGFkdmFuY2UgKz0gZm9udERhdGEtPnN5bnRoZXRpY0Jv
bGRPZmZzZXQoKTsKKworICAgICAgICBpZiAoaGFzRXh0cmFTcGFjaW5nKSB7CisgICAgICAgICAg
ICAvLyBJZiB3ZSdyZSBhIGdseXBoIHdpdGggYW4gYWR2YW5jZSwgZ28gYWhlYWQgYW5kIGFkZCBp
biBsZXR0ZXItc3BhY2luZy4KKyAgICAgICAgICAgIC8vIFRoYXQgd2F5IHdlIHdlZWQgb3V0IHpl
cm8gd2lkdGggbHVya2Vycy4gIFRoaXMgYmVoYXZpb3IgbWF0Y2hlcyB0aGUgZmFzdCB0ZXh0IGNv
ZGUgcGF0aC4KKyAgICAgICAgICAgIGlmIChhZHZhbmNlICYmIG1fZm9udC5sZXR0ZXJTcGFjaW5n
KCkpCisgICAgICAgICAgICAgICAgYWR2YW5jZSArPSBtX2ZvbnQubGV0dGVyU3BhY2luZygpOwor
CisgICAgICAgICAgICAvLyBIYW5kbGUganVzdGlmaWNhdGlvbiBhbmQgd29yZC1zcGFjaW5nLgor
ICAgICAgICAgICAgaW50IGNoYXJhY3RlckluZGV4ID0gc3BhY2VDaGFyYWN0ZXJzW2tdOworICAg
ICAgICAgICAgLy8gY2hhcmFjdGVySW5kZXggaXMgbGVmdCBhdCB0aGUgaW5pdGlhbCB2YWx1ZSBv
ZiAtMSBmb3IgZ2x5cGhzIHRoYXQgZG8gbm90IG1hcCBiYWNrIHRvIHRyZWF0ZWQtYXMtc3BhY2Ug
Y2hhcmFjdGVycy4KKyAgICAgICAgICAgIGlmIChjaGFyYWN0ZXJJbmRleCAhPSAtMSkgeworICAg
ICAgICAgICAgICAgIC8vIEFjY291bnQgZm9yIHBhZGRpbmcuIFdlYkNvcmUgdXNlcyBzcGFjZSBw
YWRkaW5nIHRvIGp1c3RpZnkgdGV4dC4KKyAgICAgICAgICAgICAgICAvLyBXZSBkaXN0cmlidXRl
IHRoZSBzcGVjaWZpZWQgcGFkZGluZyBvdmVyIHRoZSBhdmFpbGFibGUgc3BhY2VzIGluIHRoZSBy
dW4uCisgICAgICAgICAgICAgICAgaWYgKG1fcGFkZGluZykgeworICAgICAgICAgICAgICAgICAg
ICAvLyBVc2UgbGVmdG92ZXIgcGFkZGluZyBpZiBub3QgZXZlbmx5IGRpdmlzaWJsZSBieSBudW1i
ZXIgb2Ygc3BhY2VzLgorICAgICAgICAgICAgICAgICAgICBpZiAobV9wYWRkaW5nIDwgbV9wYWRQ
ZXJTcGFjZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYWR2YW5jZSArPSBtX3BhZGRpbmc7
CisgICAgICAgICAgICAgICAgICAgICAgICBtX3BhZGRpbmcgPSAwOworICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgbV9wYWRkaW5nIC09IG1fcGFk
UGVyU3BhY2U7CisgICAgICAgICAgICAgICAgICAgICAgICBhZHZhbmNlICs9IG1fcGFkUGVyU3Bh
Y2U7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICAvLyBBY2NvdW50IGZvciB3b3JkLXNwYWNpbmcuCisgICAgICAgICAgICAgICAgaWYg
KGNoYXJhY3RlckluZGV4ID4gMCAmJiBtX2ZvbnQud29yZFNwYWNpbmcoKSkgeworICAgICAgICAg
ICAgICAgICAgICBVQ2hhciBjYW5kaWRhdGVTcGFjZTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KG1fcnVuLmlzOEJpdCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgY2FuZGlkYXRlU3BhY2Ug
PSAqKG1fcnVuLmRhdGE4KGNoYXJhY3RlckluZGV4IC0gMSkpOworICAgICAgICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGVTcGFjZSA9ICoobV9ydW4u
ZGF0YTE2KGNoYXJhY3RlckluZGV4IC0gMSkpOworCisgICAgICAgICAgICAgICAgICAgIGlmICgh
Rm9udENhc2NhZGU6OnRyZWF0QXNTcGFjZShjYW5kaWRhdGVTcGFjZSkpCisgICAgICAgICAgICAg
ICAgICAgICAgICBhZHZhbmNlICs9IG1fZm9udC53b3JkU3BhY2luZygpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1FOiBXZSBu
ZWVkIHRvIHRha2UgdGhlIEdPRkZTRVRTIGZvciBjb21iaW5pbmcgZ2x5cGhzIGFuZCBzdG9yZSB0
aGVtIGluIHRoZSBnbHlwaCBidWZmZXIKKyAgICAgICAgLy8gYXMgd2VsbCwgc28gdGhhdCB3aGVu
IHRoZSB0aW1lIGNvbWVzIHRvIGRyYXcgdGhvc2UgZ2x5cGhzLCB3ZSBjYW4gYXBwbHkgdGhlIGFw
cHJvcHJpYXRlCisgICAgICAgIC8vIHRyYW5zbGF0aW9uLgorICAgICAgICBpZiAoZ2x5cGhCdWZm
ZXIpIHsKKyAgICAgICAgICAgIEdseXBoQnVmZmVyQWR2YW5jZSBvcmlnaW4ob2Zmc2V0WCwgLW9m
ZnNldFkpOworICAgICAgICAgICAgaWYgKCFnbHlwaEJ1ZmZlci0+YWR2YW5jZXNDb3VudCgpKQor
ICAgICAgICAgICAgICAgIGdseXBoQnVmZmVyLT5zZXRJbml0aWFsQWR2YW5jZShvcmlnaW4pOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGdseXBoQnVmZmVyLT5leHBhbmRMYXN0
QWR2YW5jZShvcmlnaW4pOworICAgICAgICAgICAgR2x5cGhCdWZmZXJBZHZhbmNlIGdseXBoQWR2
YW5jZSgtb3JpZ2luLndpZHRoKCkgKyBhZHZhbmNlLCAtb3JpZ2luLmhlaWdodCgpKTsKKyAgICAg
ICAgICAgIGdseXBoQnVmZmVyLT5hZGQoZ2x5cGgsIGZvbnREYXRhLCBnbHlwaEFkdmFuY2UsIHN0
cmluZ09mZnNldHNba10udmFsdWVPcigwKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKwordm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmNvbGxlY3RDb21wbGV4
VGV4dFJ1bnNGb3JDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiBjcCwgdW5zaWduZWQgbGVuZ3RoLCB1
bnNpZ25lZCBzdHJpbmdMb2NhdGlvbiwgY29uc3QgRm9udCogZm9udCkKK3sKKyAgICBpZiAoIWZv
bnQpIHsKKyAgICAgICAgLy8gQ3JlYXRlIGEgcnVuIG9mIG1pc3NpbmcgZ2x5cGhzIGZyb20gdGhl
IHByaW1hcnkgZm9udC4KKyAgICAgICAgbV9jb21wbGV4VGV4dFJ1bnMuYXBwZW5kKENvbXBsZXhU
ZXh0UnVuOjpjcmVhdGUobV9mb250LnByaW1hcnlGb250KCksIGNwLCBzdHJpbmdMb2NhdGlvbiwg
bGVuZ3RoLCAwLCBsZW5ndGgsIG1fcnVuLmx0cigpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBWZWN0b3I8U0NSSVBUX0lURU0+IGl0ZW1zKDYpOworICAgIGludCBudW1JdGVtcyA9
IDA7CisgICAgZm9yICg7OykgeworICAgICAgICBTQ1JJUFRfQ09OVFJPTCBjb250cm9sIHsgfTsK
KyAgICAgICAgU0NSSVBUX1NUQVRFIHN0YXRlIHsgfTsKKyAgICAgICAgLy8gU2V0IHVwIHRoZSBj
b3JyZWN0IGRpcmVjdGlvbiBmb3IgdGhlIHJ1bi4KKyAgICAgICAgc3RhdGUudUJpZGlMZXZlbCA9
IG1fcnVuLnJ0bCgpOworICAgICAgICAvLyBMb2NrIHRoZSBjb3JyZWN0IGRpcmVjdGlvbmFsIG92
ZXJyaWRlLgorICAgICAgICBzdGF0ZS5mT3ZlcnJpZGVEaXJlY3Rpb24gPSBtX3J1bi5kaXJlY3Rp
b25hbE92ZXJyaWRlKCk7CisKKyAgICAgICAgLy8gU2NyaXB0SXRlbWl6ZSBtYXkgd3JpdGUgKGNN
YXhJdGVtcyArIDEpIFNDUklQVF9JVEVNKHMpLgorICAgICAgICBIUkVTVUxUIHJjID0gU2NyaXB0
SXRlbWl6ZSh3Y2hhckZyb20oY3ApLCBsZW5ndGgsIGl0ZW1zLnNpemUoKSAtIDEsICZjb250cm9s
LCAmc3RhdGUsIGl0ZW1zLmRhdGEoKSwgJm51bUl0ZW1zKTsKKyAgICAgICAgaWYgKHJjICE9IEVf
T1VUT0ZNRU1PUlkpIHsKKyAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmMpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGl0ZW1zLnJlc2l6ZShpdGVtcy5zaXpl
KCkgKiAyKTsKKyAgICB9CisgICAgaXRlbXMucmVzaXplKG51bUl0ZW1zICsgMSk7CisKKyAgICBm
b3IgKGludCBpID0gMDsgaSA8IG51bUl0ZW1zOyBpKyspIHsKKyAgICAgICAgR2x5cGhCdWZmZXIg
Z2x5cGhCdWZmZXI7CisgICAgICAgIGdseXBoQnVmZmVyLnNhdmVPZmZzZXRzSW5TdHJpbmcoKTsK
KworICAgICAgICBVbmlzY3JpYmVDb250cm9sbGVyIHVjKG1fZm9udCwgbV9ydW4sIGl0ZW1zKTsK
KworICAgICAgICBpZiAoIXVjLnNoYXBlQW5kUGxhY2VJdGVtKGNwLCBpLCBmb250LCAmZ2x5cGhC
dWZmZXIpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIFZlY3RvcjxHbHlwaD4gZ2x5
cGhzKGdseXBoQnVmZmVyLnNpemUoKSk7CisgICAgICAgIFZlY3RvcjxGbG9hdFBvaW50PiBvcmln
aW5zKGdseXBoQnVmZmVyLnNpemUoKSk7CisgICAgICAgIFZlY3RvcjxGbG9hdFNpemU+IGFkdmFu
Y2VzKGdseXBoQnVmZmVyLnNpemUoKSk7CisgICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4gc3RyaW5n
SW5kaWNlcyhnbHlwaEJ1ZmZlci5zaXplKCkpOworCisgICAgICAgIGZvciAoc2l6ZV90IGcgPSAw
OyBnIDwgZ2x5cGhCdWZmZXIuc2l6ZSgpOyBnKyspIHsKKyAgICAgICAgICAgIGdseXBoc1tnXSA9
IGdseXBoQnVmZmVyLmdseXBoQXQoZyk7CisgICAgICAgICAgICBvcmlnaW5zW2ddID0gRmxvYXRQ
b2ludCgwLCAwKTsKKyAgICAgICAgICAgIGFkdmFuY2VzW2ddID0gZ2x5cGhCdWZmZXIuYWR2YW5j
ZUF0KGcpOworICAgICAgICAgICAgc3RyaW5nSW5kaWNlc1tnXSA9IGl0ZW1zW2ldLmlDaGFyUG9z
ICsgZ2x5cGhCdWZmZXIub2Zmc2V0SW5TdHJpbmcoZyk7CisgICAgICAgIH0KKworICAgICAgICBt
X2NvbXBsZXhUZXh0UnVucy5hcHBlbmQoQ29tcGxleFRleHRSdW46OmNyZWF0ZShhZHZhbmNlcywg
b3JpZ2lucywgZ2x5cGhzLCBzdHJpbmdJbmRpY2VzLCBnbHlwaEJ1ZmZlci5pbml0aWFsQWR2YW5j
ZSgpLCAqZm9udCwgY3AsIHN0cmluZ0xvY2F0aW9uLCBsZW5ndGgsIGl0ZW1zW2ldLmlDaGFyUG9z
LCBpdGVtc1tpKzFdLmlDaGFyUG9zLCBtX3J1bi5sdHIoKSkpOworICAgIH0KK30KKworfQorCisj
ZW5kaWYgLy8gIVVTRShESVJFQ1QyRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9Gb250Q0dXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0ZvbnRDR1dpbi5jcHAKaW5kZXggMGVmNjU1ZDhkMDUuLjMzZjg1MmViNmU4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENH
V2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENH
V2luLmNwcApAQCAtMzQsNyArMzQsNiBAQAogI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCiAjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUg
IlVuaXNjcmliZUNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJXZWJDb3JlVGV4dFJlbmRlcmVyLmgi
CiAjaW5jbHVkZSA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KICNpbmNsdWRlIDx3dGYv
TWF0aEV4dHJhcy5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0ZvbnRDYXNjYWRlRGlyZWN0MkQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0ZvbnRDYXNjYWRlRGlyZWN0MkQuY3BwCmluZGV4IDkxMTEyZDk2NWM4Li5i
MmQzNDcxYjhhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0ZvbnRDYXNjYWRlRGlyZWN0MkQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9Gb250Q2FzY2FkZURpcmVjdDJELmNwcApAQCAtMzcsNyArMzcsNiBAQAog
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZURpcmVjdDJELmgiCiAjaW5j
bHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dERpcmVjdDJELmgiCi0j
aW5jbHVkZSAiVW5pc2NyaWJlQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIldlYkNvcmVUZXh0UmVu
ZGVyZXIuaCIKICNpbmNsdWRlIDxkMmQxLmg+CiAjaW5jbHVkZSA8ZHdyaXRlXzMuaD4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250V2luLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250V2luLmNwcAppbmRleCAx
Y2FhODAyMmUyNi4uNTJjYjg4ZjUzZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9Gb250V2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vRm9udFdpbi5jcHAKQEAgLTM1LDEwICszNSw2IEBACiAjaW5jbHVkZSAi
VGV4dFJ1bi5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKLSNpZiAhVVNFKERJUkVD
VDJEKQotI2luY2x1ZGUgIlVuaXNjcmliZUNvbnRyb2xsZXIuaCIKLSNlbmRpZgotCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGJvb2wgRm9udENhc2NhZGU6OmNhblJldHVybkZhbGxiYWNrRm9udHNG
b3JDb21wbGV4VGV4dCgpCkBAIC01MSw3MiArNDcsNCBAQCBib29sIEZvbnRDYXNjYWRlOjpjYW5F
eHBhbmRBcm91bmRJZGVvZ3JhcGhzSW5Db21wbGV4VGV4dCgpCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi0jaWYgIVVTRShESVJFQ1QyRCkKLQotdm9pZCBGb250Q2FzY2FkZTo6YWRqdXN0U2VsZWN0
aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgTGF5b3V0UmVjdCYgc2Vs
ZWN0aW9uUmVjdCwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8pIGNvbnN0Ci17Ci0gICAgVW5p
c2NyaWJlQ29udHJvbGxlciBpdCh0aGlzLCBydW4pOwotICAgIGl0LmFkdmFuY2UoZnJvbSk7Ci0g
ICAgZmxvYXQgYmVmb3JlV2lkdGggPSBpdC5ydW5XaWR0aFNvRmFyKCk7Ci0gICAgaXQuYWR2YW5j
ZSh0byk7Ci0gICAgZmxvYXQgYWZ0ZXJXaWR0aCA9IGl0LnJ1bldpZHRoU29GYXIoKTsKLQotICAg
IGlmIChydW4ucnRsKCkpIHsKLSAgICAgICAgaXQuYWR2YW5jZShydW4ubGVuZ3RoKCkpOwotICAg
ICAgICBzZWxlY3Rpb25SZWN0Lm1vdmUoaXQucnVuV2lkdGhTb0ZhcigpIC0gYWZ0ZXJXaWR0aCwg
MCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHNlbGVjdGlvblJlY3QubW92ZShiZWZvcmVXaWR0aCwg
MCk7Ci0gICAgc2VsZWN0aW9uUmVjdC5zZXRXaWR0aChhZnRlcldpZHRoIC0gYmVmb3JlV2lkdGgp
OwotfQotCi1mbG9hdCBGb250Q2FzY2FkZTo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21wbGV4
VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvLCBHbHlw
aEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIEZvclRleHRFbXBoYXNpc09yTm90IGZvclRleHRFbXBoYXNp
cykgY29uc3QKLXsKLSAgICBpZiAoZm9yVGV4dEVtcGhhc2lzKSB7Ci0gICAgICAgIC8vIEZJWE1F
OiBBZGQgZm9yVGV4dEVtcGhhc2lzIHBhcmVtZXRlciB0byBVbmlzY3JpYmVDb250cm9sbGVyIGFu
ZCB1c2UgaXQuCi0gICAgICAgIExPR19FUlJPUigiTm90IGltcGxlbWVudGVkIGZvciB0ZXh0IGVt
cGhhc2lzLiIpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBVbmlzY3JpYmVDb250
cm9sbGVyIGNvbnRyb2xsZXIodGhpcywgcnVuKTsKLSAgICBjb250cm9sbGVyLmFkdmFuY2UoZnJv
bSk7Ci0gICAgZmxvYXQgYmVmb3JlV2lkdGggPSBjb250cm9sbGVyLnJ1bldpZHRoU29GYXIoKTsK
LSAgICBjb250cm9sbGVyLmFkdmFuY2UodG8sICZnbHlwaEJ1ZmZlcik7Ci0KLSAgICBpZiAoZ2x5
cGhCdWZmZXIuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGZsb2F0IGFmdGVy
V2lkdGggPSBjb250cm9sbGVyLnJ1bldpZHRoU29GYXIoKTsKLQotICAgIGlmIChydW4ucnRsKCkp
IHsKLSAgICAgICAgY29udHJvbGxlci5hZHZhbmNlKHJ1bi5sZW5ndGgoKSk7Ci0gICAgICAgIHJl
dHVybiBjb250cm9sbGVyLnJ1bldpZHRoU29GYXIoKSAtIGFmdGVyV2lkdGg7Ci0gICAgfQotICAg
IHJldHVybiBiZWZvcmVXaWR0aDsKLX0KLQotZmxvYXQgRm9udENhc2NhZGU6OmZsb2F0V2lkdGhG
b3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBm
YWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93KSBjb25zdAotewotICAg
IFVuaXNjcmliZUNvbnRyb2xsZXIgY29udHJvbGxlcih0aGlzLCBydW4sIGZhbGxiYWNrRm9udHMp
OwotICAgIGNvbnRyb2xsZXIuYWR2YW5jZShydW4ubGVuZ3RoKCkpOwotICAgIGlmIChnbHlwaE92
ZXJmbG93KSB7Ci0gICAgICAgIGdseXBoT3ZlcmZsb3ctPnRvcCA9IHN0ZDo6bWF4PGludD4oZ2x5
cGhPdmVyZmxvdy0+dG9wLCBjZWlsZigtY29udHJvbGxlci5taW5HbHlwaEJvdW5kaW5nQm94WSgp
KSAtIChnbHlwaE92ZXJmbG93LT5jb21wdXRlQm91bmRzID8gMCA6IGZvbnRNZXRyaWNzKCkuYXNj
ZW50KCkpKTsKLSAgICAgICAgZ2x5cGhPdmVyZmxvdy0+Ym90dG9tID0gc3RkOjptYXg8aW50Pihn
bHlwaE92ZXJmbG93LT5ib3R0b20sIGNlaWxmKGNvbnRyb2xsZXIubWF4R2x5cGhCb3VuZGluZ0Jv
eFkoKSkgLSAoZ2x5cGhPdmVyZmxvdy0+Y29tcHV0ZUJvdW5kcyA/IDAgIDogZm9udE1ldHJpY3Mo
KS5kZXNjZW50KCkpKTsKLSAgICAgICAgZ2x5cGhPdmVyZmxvdy0+bGVmdCA9IHN0ZDo6bWF4PGlu
dD4oMCwgY2VpbGYoLWNvbnRyb2xsZXIubWluR2x5cGhCb3VuZGluZ0JveFgoKSkpOwotICAgICAg
ICBnbHlwaE92ZXJmbG93LT5yaWdodCA9IHN0ZDo6bWF4PGludD4oMCwgY2VpbGYoY29udHJvbGxl
ci5tYXhHbHlwaEJvdW5kaW5nQm94WCgpIC0gY29udHJvbGxlci5ydW5XaWR0aFNvRmFyKCkpKTsK
LSAgICB9Ci0gICAgcmV0dXJuIGNvbnRyb2xsZXIucnVuV2lkdGhTb0ZhcigpOwotfQotCi1pbnQg
Rm9udENhc2NhZGU6Om9mZnNldEZvclBvc2l0aW9uRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1
biYgcnVuLCBmbG9hdCB4RmxvYXQsIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0Ci17
Ci0gICAgLy8gRklYTUU6IFRoaXMgdHJ1bmNhdGlvbiBpcyBub3QgYSBwcm9ibGVtIGZvciBIVE1M
LCBidXQgb25seSBhZmZlY3RzIFNWRywgd2hpY2ggcGFzc2VzIGZsb2F0aW5nLXBvaW50IG51bWJl
cnMKLSAgICAvLyB0byBGb250Q2FzY2FkZTo6b2Zmc2V0Rm9yUG9zaXRpb24oKS4gQnVnIGh0dHA6
Ly93ZWJraXQub3JnL2IvNDA2NzMgdHJhY2tzIGZpeGluZyB0aGlzIHByb2JsZW0uCi0gICAgaW50
IHggPSBzdGF0aWNfY2FzdDxpbnQ+KHhGbG9hdCk7Ci0KLSAgICBVbmlzY3JpYmVDb250cm9sbGVy
IGNvbnRyb2xsZXIodGhpcywgcnVuKTsKLSAgICByZXR1cm4gY29udHJvbGxlci5vZmZzZXRGb3JQ
b3NpdGlvbih4LCBpbmNsdWRlUGFydGlhbEdseXBocyk7Ci19Ci0KLSNlbmRpZgotCiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vVW5pc2NyaWJlQ29u
dHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vVW5pc2Ny
aWJlQ29udHJvbGxlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3NGM0ODYw
ZmYxLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vVW5pc2NyaWJlQ29udHJvbGxlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0NTkgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJVbmlzY3JpYmVDb250cm9sbGVyLmgiCi0KLSNpbmNsdWRlICJGb250LmgiCi0jaW5j
bHVkZSAiRm9udENhc2NhZGUuaCIKLSNpbmNsdWRlICJIV25kREMuaCIKLSNpbmNsdWRlICJUZXh0
UnVuLmgiCi0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC93
aW4vV0NoYXJTdHJpbmdFeHRyYXMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotdXNpbmcgbmFt
ZXNwYWNlIFdURjo6VW5pY29kZTsKLQotLy8gRklYTUU6IFJlYXJjaGl0ZWN0IHRoaXMgdG8gYmUg
bW9yZSBsaWtlIFdpZHRoSXRlcmF0b3IgaW4gRm9udC5jcHAuICBIYXZlIGFuIGFkdmFuY2UoKSBt
ZXRob2QKLS8vIHRoYXQgZG9lcyBzdHVmZiBpbiB0aGF0IG1ldGhvZCBpbnN0ZWFkIG9mIGRvaW5n
IGV2ZXJ5dGhpbmcgaW4gdGhlIGNvbnN0cnVjdG9yLiAgSGF2ZSBhZHZhbmNlKCkKLS8vIHRha2Ug
dGhlIEdseXBoQnVmZmVyIGFzIGFuIGFyZyBzbyB0aGF0IHdlIGRvbid0IGhhdmUgdG8gcG9wdWxh
dGUgdGhlIGdseXBoIGJ1ZmZlciB3aGVuCi0vLyBtZWFzdXJpbmcuCi1VbmlzY3JpYmVDb250cm9s
bGVyOjpVbmlzY3JpYmVDb250cm9sbGVyKGNvbnN0IEZvbnRDYXNjYWRlKiBmb250LCBjb25zdCBU
ZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzKQotICAgIDog
bV9mb250KCpmb250KQotICAgICwgbV9ydW4ocnVuKQotICAgICwgbV9mYWxsYmFja0ZvbnRzKGZh
bGxiYWNrRm9udHMpCi0gICAgLCBtX21pbkdseXBoQm91bmRpbmdCb3hYKHN0ZDo6bnVtZXJpY19s
aW1pdHM8ZmxvYXQ+OjptYXgoKSkKLSAgICAsIG1fbWF4R2x5cGhCb3VuZGluZ0JveFgoc3RkOjpu
dW1lcmljX2xpbWl0czxmbG9hdD46Om1pbigpKQotICAgICwgbV9taW5HbHlwaEJvdW5kaW5nQm94
WShzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6bWF4KCkpCi0gICAgLCBtX21heEdseXBoQm91
bmRpbmdCb3hZKHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptaW4oKSkKLSAgICAsIG1fY3Vy
cmVudENoYXJhY3RlcigwKQotICAgICwgbV9lbmQocnVuLmxlbmd0aCgpKQotICAgICwgbV9ydW5X
aWR0aFNvRmFyKDApCi0gICAgLCBtX3BhZGRpbmcocnVuLmV4cGFuc2lvbigpKQotICAgICwgbV9j
b21wdXRpbmdPZmZzZXRQb3NpdGlvbihmYWxzZSkKLSAgICAsIG1faW5jbHVkZVBhcnRpYWxHbHlw
aHMoZmFsc2UpCi0gICAgLCBtX29mZnNldFgoMCkKLSAgICAsIG1fb2Zmc2V0UG9zaXRpb24oMCkK
LXsKLSAgICBpZiAoIW1fcGFkZGluZykKLSAgICAgICAgbV9wYWRQZXJTcGFjZSA9IDA7Ci0gICAg
ZWxzZSB7Ci0gICAgICAgIGZsb2F0IG51bVNwYWNlcyA9IDA7Ci0gICAgICAgIGZvciAoaW50IHMg
PSAwOyBzIDwgbV9ydW4ubGVuZ3RoKCk7IHMrKykgewotICAgICAgICAgICAgaWYgKEZvbnRDYXNj
YWRlOjp0cmVhdEFzU3BhY2UobV9ydW5bc10pKQotICAgICAgICAgICAgICAgIG51bVNwYWNlcysr
OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG51bVNwYWNlcyA9PSAwKQotICAgICAgICAgICAg
bV9wYWRQZXJTcGFjZSA9IDA7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fcGFkUGVyU3Bh
Y2UgPSBtX3BhZGRpbmcgLyBudW1TcGFjZXM7Ci0gICAgfQotCi0gICAgLy8gTnVsbCBvdXQgb3Vy
IHVuaXNjcmliZSBzdHJ1Y3RzCi0gICAgcmVzZXRDb250cm9sQW5kU3RhdGUoKTsKLX0KLQotaW50
IFVuaXNjcmliZUNvbnRyb2xsZXI6Om9mZnNldEZvclBvc2l0aW9uKGludCB4LCBib29sIGluY2x1
ZGVQYXJ0aWFsR2x5cGhzKQotewotICAgIG1fY29tcHV0aW5nT2Zmc2V0UG9zaXRpb24gPSB0cnVl
OwotICAgIG1faW5jbHVkZVBhcnRpYWxHbHlwaHMgPSBpbmNsdWRlUGFydGlhbEdseXBoczsKLSAg
ICBtX29mZnNldFggPSB4OwotICAgIG1fb2Zmc2V0UG9zaXRpb24gPSAwOwotICAgIGFkdmFuY2Uo
bV9ydW4ubGVuZ3RoKCkpOwotICAgIGlmIChtX2NvbXB1dGluZ09mZnNldFBvc2l0aW9uKSB7Ci0g
ICAgICAgIC8vIFRoZSBwb2ludCBpcyB0byB0aGUgbGVmdCBvciB0byB0aGUgcmlnaHQgb2YgdGhl
IGVudGlyZSBydW4uCi0gICAgICAgIGlmICgobV9vZmZzZXRYID49IG1fcnVuV2lkdGhTb0ZhciAm
JiBtX3J1bi5sdHIoKSkgfHwgKG1fb2Zmc2V0WCA8IDAgJiYgbV9ydW4ucnRsKCkpKQotICAgICAg
ICAgICAgbV9vZmZzZXRQb3NpdGlvbiA9IG1fZW5kOwotICAgIH0KLSAgICBtX2NvbXB1dGluZ09m
ZnNldFBvc2l0aW9uID0gZmFsc2U7Ci0gICAgcmV0dXJuIG1fb2Zmc2V0UG9zaXRpb247Ci19Ci0K
LXZvaWQgVW5pc2NyaWJlQ29udHJvbGxlcjo6YWR2YW5jZSh1bnNpZ25lZCBvZmZzZXQsIEdseXBo
QnVmZmVyKiBnbHlwaEJ1ZmZlcikKLXsKLSAgICAvLyBGSVhNRTogV2UgcmVhbGx5IHdhbnQgdG8g
YmUgdXNpbmcgYSBuZXdlciB2ZXJzaW9uIG9mIFVuaXNjcmliZSB0aGF0IHN1cHBvcnRzIHRoZSBu
ZXcgT3BlblR5cGUKLSAgICAvLyBmdW5jdGlvbnMuICBUaG9zZSBmdW5jdGlvbnMgd291bGQgYWxs
b3cgdXMgdG8gdHVybiBvZmYga2VybmluZyBhbmQgbGlnYXR1cmVzLiAgV2l0aG91dCBiZWluZyBh
YmxlCi0gICAgLy8gdG8gZG8gdGhhdCwgd2Ugd2lsbCBoYXZlIGJ1Z2d5IGxpbmUgYnJlYWtpbmcg
YW5kIG1ldHJpY3Mgd2hlbiBzaW1wbGUgYW5kIGNvbXBsZXggdGV4dCBhcmUgY2xvc2UKLSAgICAv
LyB0b2dldGhlciAodGhlIGNvbXBsZXggY29kZSBwYXRoIHdpbGwgbmFycm93IHRoZSB0ZXh0IGJl
Y2F1c2Ugb2Yga2VybmluZyBhbmQgbGlnYXR1cmVzIGFuZCB0aGVuCi0gICAgLy8gd2hlbiBiaWRp
IHByb2Nlc3Npbmcgc3BsaXRzIGludG8gbXVsdGlwbGUgcnVucywgdGhlIHNpbXBsZSBwb3J0aW9u
cyB3aWxsIGdldCB3aWRlciBhbmQgY2F1c2UgdXMgdG8KLSAgICAvLyBzcGlsbCBvZmYgdGhlIGVk
Z2Ugb2YgYSBsaW5lKS4KLSAgICBpZiAoc3RhdGljX2Nhc3Q8aW50PihvZmZzZXQpID4gbV9lbmQp
Ci0gICAgICAgIG9mZnNldCA9IG1fZW5kOwotCi0gICAgaW50IGxlbmd0aCA9IG9mZnNldCAtIG1f
Y3VycmVudENoYXJhY3RlcjsKLSAgICBpZiAobGVuZ3RoIDw9IDApCi0gICAgICAgIHJldHVybjsK
LQotICAgIFN0cmluZyBidWZmZXJGb3IxNkJpdERhdGE7Ci0KLSAgICAvLyBJdGVtaXplIHRoZSBz
dHJpbmcuCi0gICAgY29uc3QgVUNoYXIqIGNwID0gbnVsbHB0cjsKLSAgICBpZiAobV9ydW4uaXM4
Qml0KCkpIHsKLSAgICAgICAgLy8gVW5pc2NyaWJlIG9ubHkgZGVhbHMgd2l0aCAxNi1iaXQgY2hh
cmFjdGVycy4gTXVzdCBnZW5lcmF0ZSB0aGVtIG5vdy4KLSAgICAgICAgYnVmZmVyRm9yMTZCaXRE
YXRhID0gU3RyaW5nOjptYWtlMTZCaXRGcm9tOEJpdFNvdXJjZShtX3J1bi5kYXRhOChtX2N1cnJl
bnRDaGFyYWN0ZXIpLCBsZW5ndGgpOwotICAgICAgICBjcCA9IGJ1ZmZlckZvcjE2Qml0RGF0YS5j
aGFyYWN0ZXJzMTYoKTsKLSAgICB9IGVsc2UKLSAgICAgICAgY3AgPSBtX3J1bi5kYXRhMTYobV9j
dXJyZW50Q2hhcmFjdGVyKTsKLQotICAgIHVuc2lnbmVkIGJhc2VDaGFyYWN0ZXIgPSBtX2N1cnJl
bnRDaGFyYWN0ZXI7Ci0KLSAgICAvLyBXZSBicmVhayB1cCBpdGVtaXphdGlvbiBvZiB0aGUgc3Ry
aW5nIGJ5IGZvbnREYXRhIGFuZCAoaWYgbmVlZGVkKSB0aGUgdXNlIG9mIHNtYWxsIGNhcHMuCi0K
LSAgICAvLyBGSVhNRTogSXQncyBpbmNvbnNpc3RlbnQgdGhhdCB3ZSB1c2UgbG9naWNhbCBvcmRl
ciB3aGVuIGl0ZW1pemluZywgc2luY2UgdGhpcwotICAgIC8vIGRvZXMgbm90IG1hdGNoIG5vcm1h
bCBSVEwuCi0KLSAgICAvLyBGSVhNRTogVGhpcyBmdW5jdGlvbiBzaG91bGQgZGVjb2RlIHN1cnJv
Z2F0ZSBwYWlycy4gQ3VycmVudGx5IGl0IG1ha2VzIGxpdHRsZSBkaWZmZXJlbmNlIHRoYXQKLSAg
ICAvLyBpdCBkb2VzIG5vdCBiZWNhdXNlIHRoZSBmb250IGNhY2hlIG9uIFdpbmRvd3MgZG9lcyBu
b3Qgc3VwcG9ydCBub24tQk1QIGNoYXJhY3RlcnMuCi0gICAgVmVjdG9yPFVDaGFyLCAyNTY+IHNt
YWxsQ2Fwc0J1ZmZlcjsKLSAgICBpZiAobV9mb250LmlzU21hbGxDYXBzKCkpCi0gICAgICAgIHNt
YWxsQ2Fwc0J1ZmZlci5yZXNpemUobGVuZ3RoKTsKLQotICAgIHVuc2lnbmVkIGluZGV4T2ZGb250
VHJhbnNpdGlvbiA9IG1fcnVuLnJ0bCgpID8gbGVuZ3RoIC0gMSA6IDA7Ci0gICAgY29uc3QgVUNo
YXIqIGN1cnIgPSBtX3J1bi5ydGwoKSA/IGNwICsgbGVuZ3RoICAtIDEgOiBjcDsKLSAgICBjb25z
dCBVQ2hhciogZW5kID0gbV9ydW4ucnRsKCkgPyBjcCAtIDEgOiBjcCArIGxlbmd0aDsKLQotICAg
IGNvbnN0IEZvbnQqIGZvbnREYXRhOwotICAgIGNvbnN0IEZvbnQqIG5leHRGb250RGF0YSA9IG1f
Zm9udC5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoKmN1cnIsIGZhbHNlKS5mb250OwotCi0gICAgVUNo
YXIgbmV3QyA9IDA7Ci0KLSAgICBib29sIGlzU21hbGxDYXBzOwotICAgIGJvb2wgbmV4dElzU21h
bGxDYXBzID0gbV9mb250LmlzU21hbGxDYXBzKCkgJiYgIShVX0dFVF9HQ19NQVNLKCpjdXJyKSAm
IFVfR0NfTV9NQVNLKSAmJiAobmV3QyA9IHVfdG91cHBlcigqY3VycikpICE9ICpjdXJyOwotCi0g
ICAgaWYgKG5leHRJc1NtYWxsQ2FwcykKLSAgICAgICAgc21hbGxDYXBzQnVmZmVyW2N1cnIgLSBj
cF0gPSBuZXdDOwotCi0gICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgY3VyciA9IG1fcnVuLnJ0
bCgpID8gY3VyciAtIDEgOiBjdXJyICsgMTsKLSAgICAgICAgaWYgKGN1cnIgPT0gZW5kKQotICAg
ICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgZm9udERhdGEgPSBuZXh0Rm9udERhdGE7Ci0gICAg
ICAgIGlzU21hbGxDYXBzID0gbmV4dElzU21hbGxDYXBzOwotICAgICAgICBpbnQgaW5kZXggPSBj
dXJyIC0gY3A7Ci0gICAgICAgIFVDaGFyIGMgPSAqY3VycjsKLQotICAgICAgICBib29sIGZvcmNl
U21hbGxDYXBzID0gaXNTbWFsbENhcHMgJiYgKFVfR0VUX0dDX01BU0soYykgJiBVX0dDX01fTUFT
Syk7Ci0gICAgICAgIG5leHRGb250RGF0YSA9IG1fZm9udC5nbHlwaERhdGFGb3JDaGFyYWN0ZXIo
KmN1cnIsIGZhbHNlLCBmb3JjZVNtYWxsQ2FwcyA/IFNtYWxsQ2Fwc1ZhcmlhbnQgOiBBdXRvVmFy
aWFudCkuZm9udDsKLSAgICAgICAgaWYgKG1fZm9udC5pc1NtYWxsQ2FwcygpKSB7Ci0gICAgICAg
ICAgICBuZXh0SXNTbWFsbENhcHMgPSBmb3JjZVNtYWxsQ2FwcyB8fCAobmV3QyA9IHVfdG91cHBl
cihjKSkgIT0gYzsKLSAgICAgICAgICAgIGlmIChuZXh0SXNTbWFsbENhcHMpCi0gICAgICAgICAg
ICAgICAgc21hbGxDYXBzQnVmZmVyW2luZGV4XSA9IGZvcmNlU21hbGxDYXBzID8gYyA6IG5ld0M7
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobV9mYWxsYmFja0ZvbnRzICYmIGZvbnREYXRhICYm
IG5leHRGb250RGF0YSAhPSBmb250RGF0YSAmJiBmb250RGF0YSAhPSAmbV9mb250LnByaW1hcnlG
b250KCkpCi0gICAgICAgICAgICBtX2ZhbGxiYWNrRm9udHMtPmFkZChmb250RGF0YSk7Ci0KLSAg
ICAgICAgaWYgKG5leHRGb250RGF0YSAhPSBmb250RGF0YSB8fCBuZXh0SXNTbWFsbENhcHMgIT0g
aXNTbWFsbENhcHMpIHsKLSAgICAgICAgICAgIGludCBpdGVtU3RhcnQgPSBtX3J1bi5ydGwoKSA/
IGluZGV4ICsgMSA6IGluZGV4T2ZGb250VHJhbnNpdGlvbjsKLSAgICAgICAgICAgIGludCBpdGVt
TGVuZ3RoID0gbV9ydW4ucnRsKCkgPyBpbmRleE9mRm9udFRyYW5zaXRpb24gLSBpbmRleCA6IGlu
ZGV4IC0gaW5kZXhPZkZvbnRUcmFuc2l0aW9uOwotICAgICAgICAgICAgbV9jdXJyZW50Q2hhcmFj
dGVyID0gYmFzZUNoYXJhY3RlciArIGl0ZW1TdGFydDsKLSAgICAgICAgICAgIGl0ZW1pemVTaGFw
ZUFuZFBsYWNlKChpc1NtYWxsQ2FwcyA/IHNtYWxsQ2Fwc0J1ZmZlci5kYXRhKCkgOiBjcCkgKyBp
dGVtU3RhcnQsIGl0ZW1TdGFydCwgaXRlbUxlbmd0aCwgZm9udERhdGEsIGdseXBoQnVmZmVyKTsK
LSAgICAgICAgICAgIGluZGV4T2ZGb250VHJhbnNpdGlvbiA9IGluZGV4OwotICAgICAgICB9Ci0g
ICAgfQotICAgIAotICAgIGludCBpdGVtTGVuZ3RoID0gbV9ydW4ucnRsKCkgPyBpbmRleE9mRm9u
dFRyYW5zaXRpb24gKyAxIDogbGVuZ3RoIC0gaW5kZXhPZkZvbnRUcmFuc2l0aW9uOwotICAgIGlm
IChpdGVtTGVuZ3RoKSB7Ci0gICAgICAgIGlmIChtX2ZhbGxiYWNrRm9udHMgJiYgbmV4dEZvbnRE
YXRhICYmIG5leHRGb250RGF0YSAhPSAmbV9mb250LnByaW1hcnlGb250KCkpCi0gICAgICAgICAg
ICBtX2ZhbGxiYWNrRm9udHMtPmFkZChuZXh0Rm9udERhdGEpOwotCi0gICAgICAgIGludCBpdGVt
U3RhcnQgPSBtX3J1bi5ydGwoKSA/IDAgOiBpbmRleE9mRm9udFRyYW5zaXRpb247Ci0gICAgICAg
IG1fY3VycmVudENoYXJhY3RlciA9IGJhc2VDaGFyYWN0ZXIgKyBpdGVtU3RhcnQ7Ci0gICAgICAg
IGl0ZW1pemVTaGFwZUFuZFBsYWNlKChuZXh0SXNTbWFsbENhcHMgPyBzbWFsbENhcHNCdWZmZXIu
ZGF0YSgpIDogY3ApICsgaXRlbVN0YXJ0LCBpdGVtU3RhcnQsIGl0ZW1MZW5ndGgsIG5leHRGb250
RGF0YSwgZ2x5cGhCdWZmZXIpOwotICAgIH0KLQotICAgIG1fY3VycmVudENoYXJhY3RlciA9IGJh
c2VDaGFyYWN0ZXIgKyBsZW5ndGg7Ci19Ci0KLXZvaWQgVW5pc2NyaWJlQ29udHJvbGxlcjo6aXRl
bWl6ZVNoYXBlQW5kUGxhY2UoY29uc3QgVUNoYXIqIGNwLCB1bnNpZ25lZCBzdHJpbmdPZmZzZXQs
IHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgRm9udCogZm9udERhdGEsIEdseXBoQnVmZmVyKiBnbHlw
aEJ1ZmZlcikKLXsKLSAgICAvLyBTY3JpcHRJdGVtaXplIChpbiBXaW5kb3dzIFhQIHZlcnNpb25z
IHByaW9yIHRvIFNQMikgY2FuIG92ZXJmbG93IGJ5IDEuICBUaGlzIGlzIHdoeSB0aGVyZSBpcyBh
biBleHRyYSBlbXB0eSBpdGVtCi0gICAgLy8gaGFuZ2luZyBvdXQgYXQgdGhlIGVuZCBvZiB0aGUg
YXJyYXkKLSAgICBtX2l0ZW1zLnJlc2l6ZSg2KTsKLSAgICBpbnQgbnVtSXRlbXMgPSAwOwotICAg
IEhSRVNVTFQgcmMgPSBTX09LOwotICAgIHdoaWxlIChyYyA9IDo6U2NyaXB0SXRlbWl6ZSh3Y2hh
ckZyb20oY3ApLCBsZW5ndGgsIG1faXRlbXMuc2l6ZSgpIC0gMSwgJm1fY29udHJvbCwgJm1fc3Rh
dGUsIG1faXRlbXMuZGF0YSgpLCAmbnVtSXRlbXMpID09IEVfT1VUT0ZNRU1PUlkpIHsKLSAgICAg
ICAgbV9pdGVtcy5yZXNpemUobV9pdGVtcy5zaXplKCkgKiAyKTsKLSAgICAgICAgcmVzZXRDb250
cm9sQW5kU3RhdGUoKTsKLSAgICB9Ci0gICAgaWYgKEZBSUxFRChyYykpIHsKLSAgICAgICAgV1RG
TG9nQWx3YXlzKCJVbmlzY3JpYmVDb250cm9sbGVyOjppdGVtaXplU2hhcGVBbmRQbGFjZTogU2Ny
aXB0SXRlbWl6ZSBmYWlsZWQsIHJjPSVseCIsIHJjKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICBtX2l0ZW1zLnJlc2l6ZShudW1JdGVtcyArIDEpOwotCi0gICAgaWYgKG1fcnVuLnJ0bCgp
KSB7Ci0gICAgICAgIGZvciAoaW50IGkgPSBtX2l0ZW1zLnNpemUoKSAtIDI7IGkgPj0gMDsgaS0t
KSB7Ci0gICAgICAgICAgICBpZiAoIXNoYXBlQW5kUGxhY2VJdGVtKGNwLCBzdHJpbmdPZmZzZXQs
IGksIGZvbnREYXRhLCBnbHlwaEJ1ZmZlcikpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1f
aXRlbXMuc2l6ZSgpIC0gMTsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAoIXNoYXBlQW5kUGxhY2VJ
dGVtKGNwLCBzdHJpbmdPZmZzZXQsIGksIGZvbnREYXRhLCBnbHlwaEJ1ZmZlcikpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIFVuaXNjcmliZUNv
bnRyb2xsZXI6OnJlc2V0Q29udHJvbEFuZFN0YXRlKCkKLXsKLSAgICBtZW1zZXQoJm1fY29udHJv
bCwgMCwgc2l6ZW9mKFNDUklQVF9DT05UUk9MKSk7Ci0gICAgbWVtc2V0KCZtX3N0YXRlLCAwLCBz
aXplb2YoU0NSSVBUX1NUQVRFKSk7Ci0KLSAgICAvLyBTZXQgdXAgdGhlIGNvcnJlY3QgZGlyZWN0
aW9uIGZvciB0aGUgcnVuLgotICAgIG1fc3RhdGUudUJpZGlMZXZlbCA9IG1fcnVuLnJ0bCgpOwot
ICAgIAotICAgIC8vIExvY2sgdGhlIGNvcnJlY3QgZGlyZWN0aW9uYWwgb3ZlcnJpZGUuCi0gICAg
bV9zdGF0ZS5mT3ZlcnJpZGVEaXJlY3Rpb24gPSBtX3J1bi5kaXJlY3Rpb25hbE92ZXJyaWRlKCk7
Ci19Ci0KLWJvb2wgVW5pc2NyaWJlQ29udHJvbGxlcjo6c2hhcGVBbmRQbGFjZUl0ZW0oY29uc3Qg
VUNoYXIqIGNwLCB1bnNpZ25lZCBzdHJpbmdPZmZzZXQsIHVuc2lnbmVkIGksIGNvbnN0IEZvbnQq
IGZvbnREYXRhLCBHbHlwaEJ1ZmZlciogZ2x5cGhCdWZmZXIpCi17Ci0gICAgLy8gRGV0ZXJtaW5l
IHRoZSBzdHJpbmcgZm9yIHRoaXMgaXRlbS4KLSAgICBjb25zdCBVQ2hhciogc3RyID0gY3AgKyBt
X2l0ZW1zW2ldLmlDaGFyUG9zOwotICAgIGludCBsZW4gPSBtX2l0ZW1zW2krMV0uaUNoYXJQb3Mg
LSBtX2l0ZW1zW2ldLmlDaGFyUG9zOwotICAgIFNDUklQVF9JVEVNIGl0ZW0gPSBtX2l0ZW1zW2ld
OwotCi0gICAgLy8gU2V0IHVwIGJ1ZmZlcnMgdG8gaG9sZCB0aGUgcmVzdWx0cyBvZiBzaGFwaW5n
IHRoZSBpdGVtLgotICAgIFZlY3RvcjxXT1JEPiBnbHlwaHM7Ci0gICAgVmVjdG9yPFdPUkQ+IGNs
dXN0ZXJzOwotICAgIFZlY3RvcjxTQ1JJUFRfVklTQVRUUj4gdmlzdWFsQXR0cmlidXRlczsKLSAg
ICBjbHVzdGVycy5yZXNpemUobGVuKTsKLSAgICAgCi0gICAgLy8gU2hhcGUgdGhlIGl0ZW0uCi0g
ICAgLy8gVGhlIHJlY29tbWVuZGVkIHNpemUgZm9yIHRoZSBnbHlwaCBidWZmZXIgaXMgMS41ICog
dGhlIGNoYXJhY3RlciBsZW5ndGggKyAxNiBpbiB0aGUgdW5pc2NyaWJlIGRvY3MuCi0gICAgLy8g
QXBwYXJlbnRseSB0aGlzIGlzIGEgZ29vZCBzaXplIHRvIGF2b2lkIGhhdmluZyB0byBtYWtlIHJl
cGVhdGVkIGNhbGxzIHRvIFNjcmlwdFNoYXBlLgotICAgIGdseXBocy5yZXNpemUoMS41ICogbGVu
ICsgMTYpOwotICAgIHZpc3VhbEF0dHJpYnV0ZXMucmVzaXplKGdseXBocy5zaXplKCkpOwotCi0g
ICAgaWYgKCFzaGFwZShzdHIsIGxlbiwgaXRlbSwgZm9udERhdGEsIGdseXBocywgY2x1c3RlcnMs
IHZpc3VhbEF0dHJpYnV0ZXMpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIFZlY3RvcjxP
cHRpb25hbDx1bnNpZ25lZD4+IHN0cmluZ09mZnNldHMoZ2x5cGhzLnNpemUoKSk7Ci0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbjsgKytpKSB7Ci0gICAgICAgIGlmIChzdHJpbmdPZmZz
ZXRzW2NsdXN0ZXJzW2ldXSkKLSAgICAgICAgICAgIHN0cmluZ09mZnNldHNbY2x1c3RlcnNbaV1d
ID0gc3RkOjptaW4oKnN0cmluZ09mZnNldHNbY2x1c3RlcnNbaV1dLCBpKTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgc3RyaW5nT2Zmc2V0c1tjbHVzdGVyc1tpXV0gPSBpOwotICAgIH0KLQot
ICAgIC8vIFdlIG5vdyBoYXZlIGEgY29sbGVjdGlvbiBvZiBnbHlwaHMuCi0gICAgVmVjdG9yPEdP
RkZTRVQ+IG9mZnNldHM7Ci0gICAgVmVjdG9yPGludD4gYWR2YW5jZXM7Ci0gICAgb2Zmc2V0cy5y
ZXNpemUoZ2x5cGhzLnNpemUoKSk7Ci0gICAgYWR2YW5jZXMucmVzaXplKGdseXBocy5zaXplKCkp
OwotICAgIEhSRVNVTFQgcGxhY2VSZXN1bHQgPSBTY3JpcHRQbGFjZSgwLCBmb250RGF0YS0+c2Ny
aXB0Q2FjaGUoKSwgZ2x5cGhzLmRhdGEoKSwgZ2x5cGhzLnNpemUoKSwgdmlzdWFsQXR0cmlidXRl
cy5kYXRhKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpdGVtLmEs
IGFkdmFuY2VzLmRhdGEoKSwgb2Zmc2V0cy5kYXRhKCksIDApOwotICAgIGlmIChwbGFjZVJlc3Vs
dCA9PSBFX1BFTkRJTkcpIHsKLSAgICAgICAgLy8gVGhlIHNjcmlwdCBjYWNoZSBpc24ndCBwcmlt
ZWQgd2l0aCBlbm91Z2ggaW5mbyB5ZXQuICBXZSBuZWVkIHRvIHNlbGVjdCBvdXIgSEZPTlQgaW50
bwotICAgICAgICAvLyBhIERDIGFuZCBwYXNzIHRoZSBEQyBpbiB0byBTY3JpcHRQbGFjZS4KLSAg
ICAgICAgSFduZERDIGhkYygwKTsKLSAgICAgICAgSEZPTlQgaGZvbnQgPSBmb250RGF0YS0+cGxh
dGZvcm1EYXRhKCkuaGZvbnQoKTsKLSAgICAgICAgSEZPTlQgb2xkRm9udCA9IChIRk9OVClTZWxl
Y3RPYmplY3QoaGRjLCBoZm9udCk7Ci0gICAgICAgIHBsYWNlUmVzdWx0ID0gU2NyaXB0UGxhY2Uo
aGRjLCBmb250RGF0YS0+c2NyaXB0Q2FjaGUoKSwgZ2x5cGhzLmRhdGEoKSwgZ2x5cGhzLnNpemUo
KSwgdmlzdWFsQXR0cmlidXRlcy5kYXRhKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJml0ZW0uYSwgYWR2YW5jZXMuZGF0YSgpLCBvZmZzZXRzLmRhdGEoKSwgMCk7Ci0gICAg
ICAgIFNlbGVjdE9iamVjdChoZGMsIG9sZEZvbnQpOwotICAgIH0KLSAgICAKLSAgICBpZiAoRkFJ
TEVEKHBsYWNlUmVzdWx0KSB8fCBnbHlwaHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gdHJ1
ZTsKLQotICAgIC8vIENvbnZlcnQgYWxsIGNoYXJzIHRoYXQgc2hvdWxkIGJlIHRyZWF0ZWQgYXMg
c3BhY2VzIHRvIHVzZSB0aGUgc3BhY2UgZ2x5cGguCi0gICAgLy8gV2UgYWxzbyBjcmVhdGUgYSBt
YXAgdGhhdCBhbGxvd3MgdXMgdG8gcXVpY2tseSBnbyBmcm9tIHNwYWNlIGdseXBocyBiYWNrIHRv
IHRoZWlyIGNvcnJlc3BvbmRpbmcgY2hhcmFjdGVycy4KLSAgICBWZWN0b3I8aW50PiBzcGFjZUNo
YXJhY3RlcnMoZ2x5cGhzLnNpemUoKSk7Ci0gICAgc3BhY2VDaGFyYWN0ZXJzLmZpbGwoLTEpOwot
Ci0gICAgY29uc3QgZmxvYXQgY0xvZ2ljYWxTY2FsZSA9IGZvbnREYXRhLT5wbGF0Zm9ybURhdGEo
KS51c2VHREkoKSA/IDEuMGYgOiAzMi4wZjsKLSAgICBmbG9hdCBzcGFjZVdpZHRoID0gZm9udERh
dGEtPnNwYWNlV2lkdGgoKSAtIGZvbnREYXRhLT5zeW50aGV0aWNCb2xkT2Zmc2V0KCk7Ci0gICAg
dW5zaWduZWQgbG9naWNhbFNwYWNlV2lkdGggPSBzcGFjZVdpZHRoICogY0xvZ2ljYWxTY2FsZTsK
LQotICAgIGZvciAoaW50IGsgPSAwOyBrIDwgbGVuOyBrKyspIHsKLSAgICAgICAgVUNoYXIgY2gg
PSAqKHN0ciArIGspOwotICAgICAgICBib29sIHRyZWF0QXNTcGFjZSA9IEZvbnRDYXNjYWRlOjp0
cmVhdEFzU3BhY2UoY2gpOwotICAgICAgICBib29sIHRyZWF0QXNaZXJvV2lkdGhTcGFjZSA9IEZv
bnRDYXNjYWRlOjp0cmVhdEFzWmVyb1dpZHRoU3BhY2UoY2gpOwotICAgICAgICBpZiAodHJlYXRB
c1NwYWNlIHx8IHRyZWF0QXNaZXJvV2lkdGhTcGFjZSkgewotICAgICAgICAgICAgLy8gU3Vic3Rp
dHV0ZSBpbiB0aGUgc3BhY2UgZ2x5cGggYXQgdGhlIGFwcHJvcHJpYXRlIHBsYWNlIGluIHRoZSBn
bHlwaHMKLSAgICAgICAgICAgIC8vIGFycmF5LgotICAgICAgICAgICAgZ2x5cGhzW2NsdXN0ZXJz
W2tdXSA9IGZvbnREYXRhLT5zcGFjZUdseXBoKCk7Ci0gICAgICAgICAgICBhZHZhbmNlc1tjbHVz
dGVyc1trXV0gPSB0cmVhdEFzU3BhY2UgPyBsb2dpY2FsU3BhY2VXaWR0aCA6IDA7Ci0gICAgICAg
ICAgICBpZiAodHJlYXRBc1NwYWNlKQotICAgICAgICAgICAgICAgIHNwYWNlQ2hhcmFjdGVyc1tj
bHVzdGVyc1trXV0gPSBtX2N1cnJlbnRDaGFyYWN0ZXIgKyBrICsgaXRlbS5pQ2hhclBvczsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIC8vIFBvcHVsYXRlIG91ciBnbHlwaCBidWZmZXIgd2l0aCB0
aGlzIGluZm9ybWF0aW9uLgotICAgIGJvb2wgaGFzRXh0cmFTcGFjaW5nID0gbV9mb250LmxldHRl
clNwYWNpbmcoKSB8fCBtX2ZvbnQud29yZFNwYWNpbmcoKSB8fCBtX3BhZGRpbmc7Ci0gICAgCi0g
ICAgZmxvYXQgbGVmdEVkZ2UgPSBtX3J1bldpZHRoU29GYXI7Ci0KLSAgICBmb3IgKHVuc2lnbmVk
IGsgPSAwOyBrIDwgZ2x5cGhzLnNpemUoKTsgaysrKSB7Ci0gICAgICAgIEdseXBoIGdseXBoID0g
Z2x5cGhzW2tdOwotICAgICAgICBmbG9hdCBhZHZhbmNlID0gYWR2YW5jZXNba10gLyBjTG9naWNh
bFNjYWxlOwotICAgICAgICBmbG9hdCBvZmZzZXRYID0gb2Zmc2V0c1trXS5kdSAvIGNMb2dpY2Fs
U2NhbGU7Ci0gICAgICAgIGZsb2F0IG9mZnNldFkgPSBvZmZzZXRzW2tdLmR2IC8gY0xvZ2ljYWxT
Y2FsZTsKLQotICAgICAgICAvLyBNYXRjaCBBcHBLaXQncyBydWxlcyBmb3IgdGhlIGludGVnZXIg
dnMuIG5vbi1pbnRlZ2VyIHJlbmRlcmluZyBtb2Rlcy4KLSAgICAgICAgZmxvYXQgcm91bmRlZEFk
dmFuY2UgPSByb3VuZGYoYWR2YW5jZSk7Ci0gICAgICAgIGlmICghZm9udERhdGEtPnBsYXRmb3Jt
RGF0YSgpLmlzU3lzdGVtRm9udCgpKSB7Ci0gICAgICAgICAgICBhZHZhbmNlID0gcm91bmRlZEFk
dmFuY2U7Ci0gICAgICAgICAgICBvZmZzZXRYID0gcm91bmRmKG9mZnNldFgpOwotICAgICAgICAg
ICAgb2Zmc2V0WSA9IHJvdW5kZihvZmZzZXRZKTsKLSAgICAgICAgfQotCi0gICAgICAgIGFkdmFu
Y2UgKz0gZm9udERhdGEtPnN5bnRoZXRpY0JvbGRPZmZzZXQoKTsKLQotICAgICAgICBpZiAoaGFz
RXh0cmFTcGFjaW5nKSB7Ci0gICAgICAgICAgICAvLyBJZiB3ZSdyZSBhIGdseXBoIHdpdGggYW4g
YWR2YW5jZSwgZ28gYWhlYWQgYW5kIGFkZCBpbiBsZXR0ZXItc3BhY2luZy4KLSAgICAgICAgICAg
IC8vIFRoYXQgd2F5IHdlIHdlZWQgb3V0IHplcm8gd2lkdGggbHVya2Vycy4gIFRoaXMgYmVoYXZp
b3IgbWF0Y2hlcyB0aGUgZmFzdCB0ZXh0IGNvZGUgcGF0aC4KLSAgICAgICAgICAgIGlmIChhZHZh
bmNlICYmIG1fZm9udC5sZXR0ZXJTcGFjaW5nKCkpCi0gICAgICAgICAgICAgICAgYWR2YW5jZSAr
PSBtX2ZvbnQubGV0dGVyU3BhY2luZygpOwotCi0gICAgICAgICAgICAvLyBIYW5kbGUganVzdGlm
aWNhdGlvbiBhbmQgd29yZC1zcGFjaW5nLgotICAgICAgICAgICAgaW50IGNoYXJhY3RlckluZGV4
ID0gc3BhY2VDaGFyYWN0ZXJzW2tdOwotICAgICAgICAgICAgLy8gY2hhcmFjdGVySW5kZXggaXMg
bGVmdCBhdCB0aGUgaW5pdGlhbCB2YWx1ZSBvZiAtMSBmb3IgZ2x5cGhzIHRoYXQgZG8gbm90IG1h
cCBiYWNrIHRvIHRyZWF0ZWQtYXMtc3BhY2UgY2hhcmFjdGVycy4KLSAgICAgICAgICAgIGlmIChj
aGFyYWN0ZXJJbmRleCAhPSAtMSkgewotICAgICAgICAgICAgICAgIC8vIEFjY291bnQgZm9yIHBh
ZGRpbmcuIFdlYkNvcmUgdXNlcyBzcGFjZSBwYWRkaW5nIHRvIGp1c3RpZnkgdGV4dC4KLSAgICAg
ICAgICAgICAgICAvLyBXZSBkaXN0cmlidXRlIHRoZSBzcGVjaWZpZWQgcGFkZGluZyBvdmVyIHRo
ZSBhdmFpbGFibGUgc3BhY2VzIGluIHRoZSBydW4uCi0gICAgICAgICAgICAgICAgaWYgKG1fcGFk
ZGluZykgewotICAgICAgICAgICAgICAgICAgICAvLyBVc2UgbGVmdG92ZXIgcGFkZGluZyBpZiBu
b3QgZXZlbmx5IGRpdmlzaWJsZSBieSBudW1iZXIgb2Ygc3BhY2VzLgotICAgICAgICAgICAgICAg
ICAgICBpZiAobV9wYWRkaW5nIDwgbV9wYWRQZXJTcGFjZSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgYWR2YW5jZSArPSBtX3BhZGRpbmc7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX3Bh
ZGRpbmcgPSAwOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICAgICAgbV9wYWRkaW5nIC09IG1fcGFkUGVyU3BhY2U7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBhZHZhbmNlICs9IG1fcGFkUGVyU3BhY2U7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBBY2NvdW50IGZvciB3b3JkLXNw
YWNpbmcuCi0gICAgICAgICAgICAgICAgaWYgKGNoYXJhY3RlckluZGV4ID4gMCAmJiBtX2ZvbnQu
d29yZFNwYWNpbmcoKSkgewotICAgICAgICAgICAgICAgICAgICBVQ2hhciBjYW5kaWRhdGVTcGFj
ZTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fcnVuLmlzOEJpdCgpKQotICAgICAgICAgICAg
ICAgICAgICAgICAgY2FuZGlkYXRlU3BhY2UgPSAqKG1fcnVuLmRhdGE4KGNoYXJhY3RlckluZGV4
IC0gMSkpOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAg
ICBjYW5kaWRhdGVTcGFjZSA9ICoobV9ydW4uZGF0YTE2KGNoYXJhY3RlckluZGV4IC0gMSkpOwot
Ci0gICAgICAgICAgICAgICAgICAgIGlmICghRm9udENhc2NhZGU6OnRyZWF0QXNTcGFjZShjYW5k
aWRhdGVTcGFjZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBhZHZhbmNlICs9IG1fZm9udC53
b3JkU3BhY2luZygpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotCi0gICAgICAgIG1fcnVuV2lkdGhTb0ZhciArPSBhZHZhbmNlOwotCi0gICAgICAgIC8vIEZJ
WE1FOiBXZSBuZWVkIHRvIHRha2UgdGhlIEdPRkZTRVRTIGZvciBjb21iaW5pbmcgZ2x5cGhzIGFu
ZCBzdG9yZSB0aGVtIGluIHRoZSBnbHlwaCBidWZmZXIKLSAgICAgICAgLy8gYXMgd2VsbCwgc28g
dGhhdCB3aGVuIHRoZSB0aW1lIGNvbWVzIHRvIGRyYXcgdGhvc2UgZ2x5cGhzLCB3ZSBjYW4gYXBw
bHkgdGhlIGFwcHJvcHJpYXRlCi0gICAgICAgIC8vIHRyYW5zbGF0aW9uLgotICAgICAgICBpZiAo
Z2x5cGhCdWZmZXIpIHsKLSAgICAgICAgICAgIEdseXBoQnVmZmVyQWR2YW5jZSBvcmlnaW4ob2Zm
c2V0WCwgLW9mZnNldFkpOwotICAgICAgICAgICAgaWYgKCFnbHlwaEJ1ZmZlci0+YWR2YW5jZXND
b3VudCgpKQotICAgICAgICAgICAgICAgIGdseXBoQnVmZmVyLT5zZXRJbml0aWFsQWR2YW5jZShv
cmlnaW4pOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGdseXBoQnVmZmVyLT5l
eHBhbmRMYXN0QWR2YW5jZShvcmlnaW4pOwotICAgICAgICAgICAgR2x5cGhCdWZmZXJBZHZhbmNl
IGdseXBoQWR2YW5jZSgtb3JpZ2luLndpZHRoKCkgKyBhZHZhbmNlLCAtb3JpZ2luLmhlaWdodCgp
KTsKLSAgICAgICAgICAgIGdseXBoQnVmZmVyLT5hZGQoZ2x5cGgsIGZvbnREYXRhLCBnbHlwaEFk
dmFuY2UsIHN0cmluZ09mZnNldHNba10udmFsdWVPcigwKSArIHN0cmluZ09mZnNldCk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBGbG9hdFJlY3QgZ2x5cGhCb3VuZHMgPSBmb250RGF0YS0+Ym91bmRz
Rm9yR2x5cGgoZ2x5cGgpOwotICAgICAgICBnbHlwaEJvdW5kcy5tb3ZlKG1fZ2x5cGhPcmlnaW4u
eCgpLCBtX2dseXBoT3JpZ2luLnkoKSk7Ci0gICAgICAgIG1fbWluR2x5cGhCb3VuZGluZ0JveFgg
PSBzdGQ6Om1pbihtX21pbkdseXBoQm91bmRpbmdCb3hYLCBnbHlwaEJvdW5kcy54KCkpOwotICAg
ICAgICBtX21heEdseXBoQm91bmRpbmdCb3hYID0gc3RkOjptYXgobV9tYXhHbHlwaEJvdW5kaW5n
Qm94WCwgZ2x5cGhCb3VuZHMubWF4WCgpKTsKLSAgICAgICAgbV9taW5HbHlwaEJvdW5kaW5nQm94
WSA9IHN0ZDo6bWluKG1fbWluR2x5cGhCb3VuZGluZ0JveFksIGdseXBoQm91bmRzLnkoKSk7Ci0g
ICAgICAgIG1fbWF4R2x5cGhCb3VuZGluZ0JveFkgPSBzdGQ6Om1heChtX21heEdseXBoQm91bmRp
bmdCb3hZLCBnbHlwaEJvdW5kcy5tYXhZKCkpOwotICAgICAgICBtX2dseXBoT3JpZ2luLm1vdmUo
YWR2YW5jZSArIG9mZnNldFgsIC1vZmZzZXRZKTsKLQotICAgICAgICAvLyBNdXRhdGUgdGhlIGds
eXBoIGFycmF5IHRvIGNvbnRhaW4gb3VyIGFsdGVyZWQgYWR2YW5jZXMuCi0gICAgICAgIGlmICht
X2NvbXB1dGluZ09mZnNldFBvc2l0aW9uKQotICAgICAgICAgICAgYWR2YW5jZXNba10gPSBhZHZh
bmNlOwotICAgIH0KLQotICAgIHdoaWxlIChtX2NvbXB1dGluZ09mZnNldFBvc2l0aW9uICYmIG1f
b2Zmc2V0WCA+PSBsZWZ0RWRnZSAmJiBtX29mZnNldFggPCBtX3J1bldpZHRoU29GYXIpIHsKLSAg
ICAgICAgLy8gVGhlIHBvc2l0aW9uIGlzIHNvbWV3aGVyZSBpbnNpZGUgdGhpcyBydW4uCi0gICAg
ICAgIGludCB0cmFpbGluZyA9IDA7Ci0gICAgICAgIEhSRVNVTFQgcmMgPSA6OlNjcmlwdFh0b0NQ
KG1fb2Zmc2V0WCAtIGxlZnRFZGdlLCBjbHVzdGVycy5zaXplKCksIGdseXBocy5zaXplKCksIGNs
dXN0ZXJzLmRhdGEoKSwgdmlzdWFsQXR0cmlidXRlcy5kYXRhKCksCi0gICAgICAgICAgICAgICAg
ICAgIGFkdmFuY2VzLmRhdGEoKSwgJml0ZW0uYSwgJm1fb2Zmc2V0UG9zaXRpb24sICZ0cmFpbGlu
Zyk7Ci0gICAgICAgIGlmIChGQUlMRUQocmMpKSB7Ci0gICAgICAgICAgICBXVEZMb2dBbHdheXMo
IlVuaXNjcmliZUNvbnRyb2xsZXI6OnNoYXBlQW5kUGxhY2VJdGVtOiBTY3JpcHRYdG9DUCBmYWls
ZWQgcmM9JWx4IiwgcmMpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAg
ICAgICAgaWYgKHRyYWlsaW5nICYmIG1faW5jbHVkZVBhcnRpYWxHbHlwaHMgJiYgbV9vZmZzZXRQ
b3NpdGlvbiA8IGxlbiAtIDEpIHsKLSAgICAgICAgICAgIG1fb2Zmc2V0UG9zaXRpb24gKz0gbV9j
dXJyZW50Q2hhcmFjdGVyICsgbV9pdGVtc1tpXS5pQ2hhclBvczsKLSAgICAgICAgICAgIG1fb2Zm
c2V0WCArPSBtX3J1bi5ydGwoKSA/IC10cmFpbGluZyA6IHRyYWlsaW5nOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgbV9jb21wdXRpbmdPZmZzZXRQb3NpdGlvbiA9IGZhbHNlOwotICAg
ICAgICAgICAgbV9vZmZzZXRQb3NpdGlvbiArPSBtX2N1cnJlbnRDaGFyYWN0ZXIgKyBtX2l0ZW1z
W2ldLmlDaGFyUG9zOwotICAgICAgICAgICAgaWYgKHRyYWlsaW5nICYmIG1faW5jbHVkZVBhcnRp
YWxHbHlwaHMpCi0gICAgICAgICAgICAgICBtX29mZnNldFBvc2l0aW9uKys7Ci0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotYm9vbCBVbmlzY3JpYmVDb250cm9sbGVyOjpzaGFwZShjb25zdCBVQ2hhciogc3RyLCBpbnQg
bGVuLCBTQ1JJUFRfSVRFTSBpdGVtLCBjb25zdCBGb250KiBmb250RGF0YSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPFdPUkQ+JiBnbHlwaHMsIFZlY3RvcjxXT1JEPiYg
Y2x1c3RlcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxTQ1JJUFRf
VklTQVRUUj4mIHZpc3VhbEF0dHJpYnV0ZXMpCi17Ci0gICAgSFduZERDIGhkYzsKLSAgICBIRk9O
VCBvbGRGb250ID0gMDsKLSAgICBIUkVTVUxUIHNoYXBlUmVzdWx0ID0gRV9QRU5ESU5HOwotICAg
IGludCBnbHlwaENvdW50ID0gMDsKLQotICAgIGlmICghZm9udERhdGEpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIGRvIHsKLSAgICAgICAgc2hhcGVSZXN1bHQgPSBTY3JpcHRTaGFwZSho
ZGMsIGZvbnREYXRhLT5zY3JpcHRDYWNoZSgpLCB3Y2hhckZyb20oc3RyKSwgbGVuLCBnbHlwaHMu
c2l6ZSgpLCAmaXRlbS5hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBo
cy5kYXRhKCksIGNsdXN0ZXJzLmRhdGEoKSwgdmlzdWFsQXR0cmlidXRlcy5kYXRhKCksICZnbHlw
aENvdW50KTsKLSAgICAgICAgaWYgKHNoYXBlUmVzdWx0ID09IEVfUEVORElORykgewotICAgICAg
ICAgICAgLy8gVGhlIHNjcmlwdCBjYWNoZSBpc24ndCBwcmltZWQgd2l0aCBlbm91Z2ggaW5mbyB5
ZXQuICBXZSBuZWVkIHRvIHNlbGVjdCBvdXIgSEZPTlQgaW50bwotICAgICAgICAgICAgLy8gYSBE
QyBhbmQgcGFzcyB0aGUgREMgaW4gdG8gU2NyaXB0U2hhcGUuCi0gICAgICAgICAgICBBU1NFUlQo
IWhkYyk7Ci0gICAgICAgICAgICBoZGMuc2V0SFduZCgwKTsKLSAgICAgICAgICAgIEhGT05UIGhm
b250ID0gZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLmhmb250KCk7Ci0gICAgICAgICAgICBvbGRG
b250ID0gKEhGT05UKVNlbGVjdE9iamVjdChoZGMsIGhmb250KTsKLSAgICAgICAgfSBlbHNlIGlm
IChzaGFwZVJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKSB7Ci0gICAgICAgICAgICAvLyBOZWVkIHRv
IHJlc2l6ZSBvdXIgYnVmZmVycy4KLSAgICAgICAgICAgIGdseXBocy5yZXNpemUoZ2x5cGhzLnNp
emUoKSAqIDIpOwotICAgICAgICAgICAgdmlzdWFsQXR0cmlidXRlcy5yZXNpemUoZ2x5cGhzLnNp
emUoKSk7Ci0gICAgICAgIH0KLSAgICB9IHdoaWxlIChzaGFwZVJlc3VsdCA9PSBFX1BFTkRJTkcg
fHwgc2hhcGVSZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7Ci0KLSAgICBpZiAoaGRjKQotICAgICAg
ICBTZWxlY3RPYmplY3QoaGRjLCBvbGRGb250KTsKLQotICAgIGlmIChGQUlMRUQoc2hhcGVSZXN1
bHQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBnbHlwaHMuc2hyaW5rKGdseXBoQ291
bnQpOwotICAgIHZpc3VhbEF0dHJpYnV0ZXMuc2hyaW5rKGdseXBoQ291bnQpOwotCi0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9VbmlzY3JpYmVDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vVW5pc2NyaWJlQ29udHJvbGxlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBhNDYyNGM3OWEwOC4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1VuaXNjcmliZUNvbnRyb2xsZXIuaAorKysgL2Rldi9udWxs
CkBAIC0xLDkwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDks
IDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVm
IFVuaXNjcmliZUNvbnRyb2xsZXJfaAotI2RlZmluZSBVbmlzY3JpYmVDb250cm9sbGVyX2gKLQot
I2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCi0jaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKLSNpbmNs
dWRlIDx1c3AxMC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1jbGFzcyBVbmlzY3JpYmVDb250cm9sbGVyIHsKLXB1YmxpYzoKLSAgICBVbmlzY3Jp
YmVDb250cm9sbGVyKGNvbnN0IEZvbnRDYXNjYWRlKiwgY29uc3QgVGV4dFJ1biYsIEhhc2hTZXQ8
Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzID0gMCk7Ci0KLSAgICAvLyBBZHZhbmNlIGFuZCBt
ZWFzdXJlL3BsYWNlIHVwIHRvIHRoZSBzcGVjaWZpZWQgY2hhcmFjdGVyLgotICAgIHZvaWQgYWR2
YW5jZSh1bnNpZ25lZCB0bywgR2x5cGhCdWZmZXIqID0gMCk7Ci0KLSAgICAvLyBDb21wdXRlIHRo
ZSBjaGFyYWN0ZXIgb2Zmc2V0IGZvciBhIGdpdmVuIHggY29vcmRpbmF0ZS4KLSAgICBpbnQgb2Zm
c2V0Rm9yUG9zaXRpb24oaW50IHgsIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpOwotCi0gICAg
Ly8gUmV0dXJucyB0aGUgd2lkdGggb2YgZXZlcnl0aGluZyB3ZSd2ZSBjb25zdW1lZCBzbyBmYXIu
Ci0gICAgZmxvYXQgcnVuV2lkdGhTb0ZhcigpIGNvbnN0IHsgcmV0dXJuIG1fcnVuV2lkdGhTb0Zh
cjsgfQotCi0gICAgZmxvYXQgbWluR2x5cGhCb3VuZGluZ0JveFgoKSBjb25zdCB7IHJldHVybiBt
X21pbkdseXBoQm91bmRpbmdCb3hYOyB9Ci0gICAgZmxvYXQgbWF4R2x5cGhCb3VuZGluZ0JveFgo
KSBjb25zdCB7IHJldHVybiBtX21heEdseXBoQm91bmRpbmdCb3hYOyB9Ci0gICAgZmxvYXQgbWlu
R2x5cGhCb3VuZGluZ0JveFkoKSBjb25zdCB7IHJldHVybiBtX21pbkdseXBoQm91bmRpbmdCb3hZ
OyB9Ci0gICAgZmxvYXQgbWF4R2x5cGhCb3VuZGluZ0JveFkoKSBjb25zdCB7IHJldHVybiBtX21h
eEdseXBoQm91bmRpbmdCb3hZOyB9Ci0KLXByaXZhdGU6ICAgIAotICAgIHZvaWQgcmVzZXRDb250
cm9sQW5kU3RhdGUoKTsKLQotICAgIHZvaWQgaXRlbWl6ZVNoYXBlQW5kUGxhY2UoY29uc3QgVUNo
YXIqLCB1bnNpZ25lZCBzdHJpbmdPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgRm9udCos
IEdseXBoQnVmZmVyKik7Ci0gICAgYm9vbCBzaGFwZUFuZFBsYWNlSXRlbShjb25zdCBVQ2hhcios
IHVuc2lnbmVkIHN0cmluZ09mZnNldCwgdW5zaWduZWQgaW5kZXgsIGNvbnN0IEZvbnQqLCBHbHlw
aEJ1ZmZlciopOwotICAgIGJvb2wgc2hhcGUoY29uc3QgVUNoYXIqIHN0ciwgaW50IGxlbiwgU0NS
SVBUX0lURU0sIGNvbnN0IEZvbnQqLAotICAgICAgICAgICAgICAgVmVjdG9yPFdPUkQ+JiBnbHlw
aHMsIFZlY3RvcjxXT1JEPiYgY2x1c3RlcnMsCi0gICAgICAgICAgICAgICBWZWN0b3I8U0NSSVBU
X1ZJU0FUVFI+JiB2aXN1YWxBdHRyaWJ1dGVzKTsKLQotICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBt
X2ZvbnQ7Ci0gICAgY29uc3QgVGV4dFJ1biYgbV9ydW47Ci0gICAgSGFzaFNldDxjb25zdCBGb250
Kj4qIG1fZmFsbGJhY2tGb250czsKLSAgICBGbG9hdFBvaW50IG1fZ2x5cGhPcmlnaW47Ci0gICAg
ZmxvYXQgbV9taW5HbHlwaEJvdW5kaW5nQm94WDsKLSAgICBmbG9hdCBtX21heEdseXBoQm91bmRp
bmdCb3hYOwotICAgIGZsb2F0IG1fbWluR2x5cGhCb3VuZGluZ0JveFk7Ci0gICAgZmxvYXQgbV9t
YXhHbHlwaEJvdW5kaW5nQm94WTsKLQotICAgIFNDUklQVF9DT05UUk9MIG1fY29udHJvbDsKLSAg
ICBTQ1JJUFRfU1RBVEUgbV9zdGF0ZTsKLSAgICBWZWN0b3I8U0NSSVBUX0lURU0+IG1faXRlbXM7
Ci0gCi0gICAgdW5zaWduZWQgbV9jdXJyZW50Q2hhcmFjdGVyOwotICAgIGludCBtX2VuZDsKLQot
ICAgIGZsb2F0IG1fcnVuV2lkdGhTb0ZhcjsKLSAgICBmbG9hdCBtX3BhZGRpbmc7Ci0gICAgZmxv
YXQgbV9wYWRQZXJTcGFjZTsKLQotICAgIGJvb2wgbV9jb21wdXRpbmdPZmZzZXRQb3NpdGlvbjsK
LSAgICBib29sIG1faW5jbHVkZVBhcnRpYWxHbHlwaHM7Ci0gICAgZmxvYXQgbV9vZmZzZXRYOwot
ICAgIGludCBtX29mZnNldFBvc2l0aW9uOwotfTsKLQotfQotI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>385483</attachid>
            <date>2019-12-12 00:28:50 -0800</date>
            <delta_ts>2019-12-12 01:06:40 -0800</delta_ts>
            <desc>WIP patch</desc>
            <filename>a.diff</filename>
            <type>text/plain</type>
            <size>47497</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luLmNtYWtlIGIvU291cmNlL1dl
YkNvcmUvUGxhdGZvcm1XaW4uY21ha2UKaW5kZXggZDFmZDRlYjEyZGQuLmRlODZmZDNhMDQxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbi5jbWFrZQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9QbGF0Zm9ybVdpbi5jbWFrZQpAQCAtNTEsNiArNTEsNyBAQCBsaXN0KEFQUEVORCBX
ZWJDb3JlX1NPVVJDRVMKIAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db2xvckRpcmVjdDJE
LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db21wbGV4VGV4dENvbnRyb2xsZXJEaXJl
Y3RXcml0ZS5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vQ29tcGxleFRleHRDb250cm9s
bGVyVW5pc2NyaWJlLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9ESUJQaXhlbERhdGEu
Y3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Zsb2F0UG9pbnREaXJlY3QyRC5jcHAKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRmxvYXRSZWN0RGlyZWN0MkQuY3BwCkBAIC02OSw3ICs3
MCw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9TaW1wbGVGb250RGF0YVdpbi5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vVHJh
bnNmb3JtYXRpb25NYXRyaXhEaXJlY3QyRC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
VHJhbnNmb3JtYXRpb25NYXRyaXhXaW4uY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1Vu
aXNjcmliZUNvbnRyb2xsZXIuY3BwCiAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL3dpbi9Eb3dubG9h
ZEJ1bmRsZVdpbi5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL3dpbi9OZXR3b3JrU3RhdGVOb3Rp
Zmllcldpbi5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwCmluZGV4IDg0NzI4NDllYWQwLi4xODcxOGRl
OTVkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29tcGxl
eFRleHRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwCkBAIC00MywzMyArNDMsNiBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLSNpZiBQTEFURk9STShXSU4pICYmICFVU0UoRElSRUNUMkQpCi0KLWNs
YXNzIFRleHRMYXlvdXQgewotfTsKLQotdm9pZCBUZXh0TGF5b3V0RGVsZXRlcjo6b3BlcmF0b3Io
KShUZXh0TGF5b3V0KikgY29uc3QKLXsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPFRleHRMYXlvdXQs
IFRleHRMYXlvdXREZWxldGVyPiBGb250Q2FzY2FkZTo6Y3JlYXRlTGF5b3V0KFJlbmRlclRleHQm
LCBmbG9hdCwgYm9vbCkgY29uc3QKLXsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotZmxvYXQg
Rm9udENhc2NhZGU6OndpZHRoKFRleHRMYXlvdXQmLCB1bnNpZ25lZCwgdW5zaWduZWQsIEhhc2hT
ZXQ8Y29uc3QgRm9udCo+KikKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1
cm4gMDsKLX0KLQotdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmNvbGxlY3RDb21wbGV4VGV4
dFJ1bnNGb3JDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQsIHVuc2lnbmVkLCBjb25z
dCBGb250KikKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotI2Vsc2UKLQogY2xh
c3MgVGV4dExheW91dCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CkBA
IC04OTMsNiArODY2LDQgQEAgQ29tcGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4dFJ1bjo6
Q29tcGxleFRleHRSdW4oY29uc3QgVmVjdG9yPEZsb2F0U2l6ZT4mIGEKIHsKIH0KIAotI2VuZGlm
Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcAppbmRleCA0MTI3NDdhY2Y4Yy4uM2YxMDRlYzBjN2Ig
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5j
cHAKQEAgLTQxLDEwICs0MSw2IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0cmluZ0hhc2gu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKLSNpZiBQTEFURk9STShX
SU4pICYmICFVU0UoRElSRUNUMkQpCi0jaW5jbHVkZSAiVW5pc2NyaWJlQ29udHJvbGxlci5oIgot
I2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIFdURjo6VW5p
Y29kZTsKQEAgLTM1MCwxNSArMzQ2LDYgQEAgZmxvYXQgRm9udENhc2NhZGU6OndpZHRoT2ZUZXh0
UmFuZ2UoY29uc3QgVGV4dFJ1biYgcnVuLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZAogCiAgICAg
YXV0byBjb2RlUGF0aFRvVXNlID0gY29kZVBhdGgocnVuKTsKICAgICBpZiAoY29kZVBhdGhUb1Vz
ZSA9PSBDb21wbGV4KSB7Ci0jaWYgUExBVEZPUk0oV0lOKSAmJiAhVVNFKERJUkVDVDJEKQotICAg
ICAgICBVbmlzY3JpYmVDb250cm9sbGVyIGl0KHRoaXMsIHJ1bik7Ci0gICAgICAgIGl0LmFkdmFu
Y2UoZnJvbSk7Ci0gICAgICAgIG9mZnNldEJlZm9yZVJhbmdlID0gaXQucnVuV2lkdGhTb0Zhcigp
OwotICAgICAgICBpdC5hZHZhbmNlKHRvKTsKLSAgICAgICAgb2Zmc2V0QWZ0ZXJSYW5nZSA9IGl0
LnJ1bldpZHRoU29GYXIoKTsKLSAgICAgICAgaXQuYWR2YW5jZSh0byk7Ci0gICAgICAgIHRvdGFs
V2lkdGggPSBpdC5ydW5XaWR0aFNvRmFyKCk7Ci0jZWxzZQogICAgICAgICBDb21wbGV4VGV4dENv
bnRyb2xsZXIgY29tcGxleEl0ZXJhdG9yKCp0aGlzLCBydW4sIGZhbHNlLCBmYWxsYmFja0ZvbnRz
KTsKICAgICAgICAgY29tcGxleEl0ZXJhdG9yLmFkdmFuY2UoZnJvbSwgbnVsbHB0ciwgSW5jbHVk
ZVBhcnRpYWxHbHlwaHMsIGZhbGxiYWNrRm9udHMpOwogICAgICAgICBvZmZzZXRCZWZvcmVSYW5n
ZSA9IGNvbXBsZXhJdGVyYXRvci5ydW5XaWR0aFNvRmFyKCk7CkBAIC0zNjYsNyArMzUzLDYgQEAg
ZmxvYXQgRm9udENhc2NhZGU6OndpZHRoT2ZUZXh0UmFuZ2UoY29uc3QgVGV4dFJ1biYgcnVuLCB1
bnNpZ25lZCBmcm9tLCB1bnNpZ25lZAogICAgICAgICBvZmZzZXRBZnRlclJhbmdlID0gY29tcGxl
eEl0ZXJhdG9yLnJ1bldpZHRoU29GYXIoKTsKICAgICAgICAgY29tcGxleEl0ZXJhdG9yLmFkdmFu
Y2UocnVuLmxlbmd0aCgpLCBudWxscHRyLCBJbmNsdWRlUGFydGlhbEdseXBocywgZmFsbGJhY2tG
b250cyk7CiAgICAgICAgIHRvdGFsV2lkdGggPSBjb21wbGV4SXRlcmF0b3IucnVuV2lkdGhTb0Zh
cigpOwotI2VuZGlmCiAgICAgfSBlbHNlIHsKICAgICAgICAgV2lkdGhJdGVyYXRvciBzaW1wbGVJ
dGVyYXRvcih0aGlzLCBydW4sIGZhbGxiYWNrRm9udHMpOwogICAgICAgICBzaW1wbGVJdGVyYXRv
ci5hZHZhbmNlKGZyb20sIG51bGxwdHIpOwpAQCAtMTM5Nyw3ICsxMzgzLDYgQEAgZmxvYXQgRm9u
dENhc2NhZGU6OmdldEdseXBoc0FuZEFkdmFuY2VzRm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVu
JiBydW4sIHVuc2lnbmUKICAgICByZXR1cm4gaW5pdGlhbEFkdmFuY2U7CiB9CiAKLSNpZiAhUExB
VEZPUk0oV0lOKSB8fCBVU0UoRElSRUNUMkQpCiBmbG9hdCBGb250Q2FzY2FkZTo6Z2V0R2x5cGhz
QW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIHVuc2lnbmVkIGZy
b20sIHVuc2lnbmVkIHRvLCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIEZvclRleHRFbXBoYXNp
c09yTm90IGZvclRleHRFbXBoYXNpcykgY29uc3QKIHsKICAgICBmbG9hdCBpbml0aWFsQWR2YW5j
ZTsKQEAgLTE0MjcsNyArMTQxMiw2IEBAIGZsb2F0IEZvbnRDYXNjYWRlOjpnZXRHbHlwaHNBbmRB
ZHZhbmNlc0ZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgdW5zaWduCiAKICAgICBy
ZXR1cm4gaW5pdGlhbEFkdmFuY2U7CiB9Ci0jZW5kaWYKIAogdm9pZCBGb250Q2FzY2FkZTo6ZHJh
d0VtcGhhc2lzTWFya3NGb3JTaW1wbGVUZXh0KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29u
c3QgVGV4dFJ1biYgcnVuLCBjb25zdCBBdG9tU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50
JiBwb2ludCwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8pIGNvbnN0CiB7CkBAIC0xNTQ1LDcg
KzE1MjksNiBAQCBmbG9hdCBGb250Q2FzY2FkZTo6ZmxvYXRXaWR0aEZvclNpbXBsZVRleHQoY29u
c3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IEZvbgogICAgIHJldHVybiBpdC5tX3J1bldp
ZHRoU29GYXI7CiB9CiAKLSNpZiAhUExBVEZPUk0oV0lOKSB8fCBVU0UoRElSRUNUMkQpCiBmbG9h
dCBGb250Q2FzY2FkZTo6ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1
biwgSGFzaFNldDxjb25zdCBGb250Kj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqIGds
eXBoT3ZlcmZsb3cpIGNvbnN0CiB7CiAgICAgQ29tcGxleFRleHRDb250cm9sbGVyIGNvbnRyb2xs
ZXIoKnRoaXMsIHJ1biwgdHJ1ZSwgZmFsbGJhY2tGb250cyk7CkBAIC0xNTU3LDcgKzE1NDAsNiBA
QCBmbG9hdCBGb250Q2FzY2FkZTo6ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRS
dW4mIHJ1biwgSGFzaFNldDxjb25zdCBGbwogICAgIH0KICAgICByZXR1cm4gY29udHJvbGxlci50
b3RhbFdpZHRoKCk7CiB9Ci0jZW5kaWYKIAogdm9pZCBGb250Q2FzY2FkZTo6YWRqdXN0U2VsZWN0
aW9uUmVjdEZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBMYXlvdXRSZWN0JiBzZWxl
Y3Rpb25SZWN0LCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bykgY29uc3QKIHsKQEAgLTE1Nzgs
NyArMTU2MCw2IEBAIHZvaWQgRm9udENhc2NhZGU6OmFkanVzdFNlbGVjdGlvblJlY3RGb3JTaW1w
bGVUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgTGF5b3V0UmVjCiAgICAgc2VsZWN0aW9uUmVjdC5z
ZXRXaWR0aChMYXlvdXRVbml0Ojpmcm9tRmxvYXRDZWlsKGFmdGVyV2lkdGggLSBiZWZvcmVXaWR0
aCkpOwogfQogCi0jaWYgIVBMQVRGT1JNKFdJTikgfHwgVVNFKERJUkVDVDJEKQogdm9pZCBGb250
Q2FzY2FkZTo6YWRqdXN0U2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4m
IHJ1biwgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQg
dG8pIGNvbnN0CiB7CiAgICAgQ29tcGxleFRleHRDb250cm9sbGVyIGNvbnRyb2xsZXIoKnRoaXMs
IHJ1bik7CkBAIC0xNTkzLDcgKzE1NzQsNiBAQCB2b2lkIEZvbnRDYXNjYWRlOjphZGp1c3RTZWxl
Y3Rpb25SZWN0Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBMYXlvdXRSZQogICAg
ICAgICBzZWxlY3Rpb25SZWN0Lm1vdmUoYmVmb3JlV2lkdGgsIDApOwogICAgIHNlbGVjdGlvblJl
Y3Quc2V0V2lkdGgoTGF5b3V0VW5pdDo6ZnJvbUZsb2F0Q2VpbChhZnRlcldpZHRoIC0gYmVmb3Jl
V2lkdGgpKTsKIH0KLSNlbmRpZgogCiBpbnQgRm9udENhc2NhZGU6Om9mZnNldEZvclBvc2l0aW9u
Rm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGZsb2F0IHgsIGJvb2wgaW5jbHVkZVBh
cnRpYWxHbHlwaHMpIGNvbnN0CiB7CkBAIC0xNjM4LDEzICsxNjE4LDExIEBAIGludCBGb250Q2Fz
Y2FkZTo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwg
ZmxvYXQgeCwgYm9vCiAgICAgcmV0dXJuIG9mZnNldDsKIH0KIAotI2lmICFQTEFURk9STShXSU4p
IHx8IFVTRShESVJFQ1QyRCkKIGludCBGb250Q2FzY2FkZTo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JD
b21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGZsb2F0IHgsIGJvb2wgaW5jbHVkZVBhcnRp
YWxHbHlwaHMpIGNvbnN0CiB7CiAgICAgQ29tcGxleFRleHRDb250cm9sbGVyIGNvbnRyb2xsZXIo
KnRoaXMsIHJ1bik7CiAgICAgcmV0dXJuIGNvbnRyb2xsZXIub2Zmc2V0Rm9yUG9zaXRpb24oeCwg
aW5jbHVkZVBhcnRpYWxHbHlwaHMpOwogfQotI2VuZGlmCiAKICNpZiAhUExBVEZPUk0oQ09DT0Ep
ICYmICFVU0UoSEFSRkJVWlopCiAvLyBGSVhNRTogVW5pZnkgdGhpcyB3aXRoIHRoZSBtYWNPUyBh
bmQgaU9TIGltcGxlbWVudGF0aW9uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0NvbXBsZXhUZXh0Q29udHJvbGxlclVuaXNjcmliZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vQ29tcGxleFRleHRDb250cm9sbGVyVW5p
c2NyaWJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZjNiOWJj
ZTEyMWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vQ29tcGxleFRleHRDb250cm9sbGVyVW5pc2NyaWJlLmNwcApAQCAtMCwwICsxLDMxNCBA
QAorLyoKKyogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisqIGFyZSBtZXQ6CisqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorKiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworKiBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDb21wbGV4VGV4dENvbnRyb2xsZXIuaCIKKworI2lm
ICFVU0UoRElSRUNUMkQpCisKKyNpbmNsdWRlICJGb250Q2FjaGUuaCIKKyNpbmNsdWRlICJGb250
Q2FzY2FkZS5oIgorI2luY2x1ZGUgIkhXbmREQy5oIgorI2luY2x1ZGUgPHVzcDEwLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGJvb2wgc2hhcGVCeVVuaXNjcmliZShjb25zdCBV
Q2hhciogc3RyLCBpbnQgbGVuLCBTQ1JJUFRfSVRFTSBpdGVtLCBjb25zdCBGb250KiBmb250RGF0
YSwKKyAgICBWZWN0b3I8V09SRD4mIGdseXBocywgVmVjdG9yPFdPUkQ+JiBjbHVzdGVycywKKyAg
ICBWZWN0b3I8U0NSSVBUX1ZJU0FUVFI+JiB2aXN1YWxBdHRyaWJ1dGVzKQoreworICAgIEhXbmRE
QyBoZGM7CisgICAgSEZPTlQgb2xkRm9udCA9IDA7CisgICAgSFJFU1VMVCBzaGFwZVJlc3VsdCA9
IEVfUEVORElORzsKKyAgICBpbnQgZ2x5cGhDb3VudCA9IDA7CisKKyAgICBpZiAoIWZvbnREYXRh
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBkbyB7CisgICAgICAgIHNoYXBlUmVzdWx0
ID0gU2NyaXB0U2hhcGUoaGRjLCBmb250RGF0YS0+c2NyaXB0Q2FjaGUoKSwgd2NoYXJGcm9tKHN0
ciksIGxlbiwgZ2x5cGhzLnNpemUoKSwgJml0ZW0uYSwKKyAgICAgICAgICAgIGdseXBocy5kYXRh
KCksIGNsdXN0ZXJzLmRhdGEoKSwgdmlzdWFsQXR0cmlidXRlcy5kYXRhKCksICZnbHlwaENvdW50
KTsKKyAgICAgICAgaWYgKHNoYXBlUmVzdWx0ID09IEVfUEVORElORykgeworICAgICAgICAgICAg
Ly8gVGhlIHNjcmlwdCBjYWNoZSBpc24ndCBwcmltZWQgd2l0aCBlbm91Z2ggaW5mbyB5ZXQuIFdl
IG5lZWQgdG8gc2VsZWN0IG91ciBIRk9OVCBpbnRvCisgICAgICAgICAgICAvLyBhIERDIGFuZCBw
YXNzIHRoZSBEQyBpbiB0byBTY3JpcHRTaGFwZS4KKyAgICAgICAgICAgIEFTU0VSVCghaGRjKTsK
KyAgICAgICAgICAgIGhkYy5zZXRIV25kKDApOworICAgICAgICAgICAgSEZPTlQgaGZvbnQgPSBm
b250RGF0YS0+cGxhdGZvcm1EYXRhKCkuaGZvbnQoKTsKKyAgICAgICAgICAgIG9sZEZvbnQgPSAo
SEZPTlQpU2VsZWN0T2JqZWN0KGhkYywgaGZvbnQpOworICAgICAgICB9IGVsc2UgaWYgKHNoYXBl
UmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpIHsKKyAgICAgICAgICAgIC8vIE5lZWQgdG8gcmVzaXpl
IG91ciBidWZmZXJzLgorICAgICAgICAgICAgZ2x5cGhzLnJlc2l6ZShnbHlwaHMuc2l6ZSgpICog
Mik7CisgICAgICAgICAgICB2aXN1YWxBdHRyaWJ1dGVzLnJlc2l6ZShnbHlwaHMuc2l6ZSgpKTsK
KyAgICAgICAgfQorICAgIH0gd2hpbGUgKHNoYXBlUmVzdWx0ID09IEVfUEVORElORyB8fCBzaGFw
ZVJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKKworICAgIGlmIChoZGMpCisgICAgICAgIFNlbGVj
dE9iamVjdChoZGMsIG9sZEZvbnQpOworCisgICAgaWYgKEZBSUxFRChzaGFwZVJlc3VsdCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGdseXBocy5zaHJpbmsoZ2x5cGhDb3VudCk7Cisg
ICAgdmlzdWFsQXR0cmlidXRlcy5zaHJpbmsoZ2x5cGhDb3VudCk7CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworY2xhc3MgVW5pc2NyaWJlQ29udHJvbGxlciB7CitwdWJsaWM6CisgICAgVW5pc2Ny
aWJlQ29udHJvbGxlcihjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVu
LCBWZWN0b3I8U0NSSVBUX0lURU0+JiBpdGVtcykKKyAgICAgICAgOiBtX2ZvbnQoZm9udCkKKyAg
ICAgICAgLCBtX3J1bihydW4pCisgICAgICAgICwgbV9pdGVtcyhpdGVtcykKKyAgICAgICAgLCBt
X3BhZGRpbmcocnVuLmV4cGFuc2lvbigpKQorICAgIHsKKyAgICAgICAgaWYgKCFtX3BhZGRpbmcp
CisgICAgICAgICAgICBtX3BhZFBlclNwYWNlID0gMDsKKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICBmbG9hdCBudW1TcGFjZXMgPSAwOworICAgICAgICAgICAgZm9yIChpbnQgcyA9IDA7IHMg
PCBtX3J1bi5sZW5ndGgoKTsgcysrKSB7CisgICAgICAgICAgICAgICAgaWYgKEZvbnRDYXNjYWRl
Ojp0cmVhdEFzU3BhY2UobV9ydW5bc10pKQorICAgICAgICAgICAgICAgICAgICBudW1TcGFjZXMr
KzsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFudW1TcGFjZXMpCisgICAgICAg
ICAgICAgICAgbV9wYWRQZXJTcGFjZSA9IDA7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgbV9wYWRQZXJTcGFjZSA9IG1fcGFkZGluZyAvIG51bVNwYWNlczsKKyAgICAgICAgfQor
ICAgIH0KKyAgICBib29sIHNoYXBlQW5kUGxhY2VJdGVtKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQs
IGNvbnN0IEZvbnQqLCBHbHlwaEJ1ZmZlciopOworCitwcml2YXRlOgorICAgIGNvbnN0IEZvbnRD
YXNjYWRlJiBtX2ZvbnQ7CisgICAgY29uc3QgVGV4dFJ1biYgbV9ydW47CisgICAgVmVjdG9yPFND
UklQVF9JVEVNPiYgbV9pdGVtczsKKyAgICBmbG9hdCBtX3BhZGRpbmc7CisgICAgZmxvYXQgbV9w
YWRQZXJTcGFjZTsKK307CisKKworYm9vbCBVbmlzY3JpYmVDb250cm9sbGVyOjpzaGFwZUFuZFBs
YWNlSXRlbShjb25zdCBVQ2hhciogY3AsIHVuc2lnbmVkIGksIGNvbnN0IEZvbnQqIGZvbnREYXRh
LCBHbHlwaEJ1ZmZlciogZ2x5cGhCdWZmZXIpCit7CisgICAgLy8gRGV0ZXJtaW5lIHRoZSBzdHJp
bmcgZm9yIHRoaXMgaXRlbS4KKyAgICBjb25zdCBVQ2hhciogc3RyID0gY3AgKyBtX2l0ZW1zW2ld
LmlDaGFyUG9zOworICAgIGludCBsZW4gPSBtX2l0ZW1zW2krMV0uaUNoYXJQb3MgLSBtX2l0ZW1z
W2ldLmlDaGFyUG9zOworICAgIFNDUklQVF9JVEVNIGl0ZW0gPSBtX2l0ZW1zW2ldOworCisgICAg
Ly8gU2V0IHVwIGJ1ZmZlcnMgdG8gaG9sZCB0aGUgcmVzdWx0cyBvZiBzaGFwaW5nIHRoZSBpdGVt
LgorICAgIFZlY3RvcjxXT1JEPiBnbHlwaHM7CisgICAgVmVjdG9yPFdPUkQ+IGNsdXN0ZXJzOwor
ICAgIFZlY3RvcjxTQ1JJUFRfVklTQVRUUj4gdmlzdWFsQXR0cmlidXRlczsKKyAgICBjbHVzdGVy
cy5yZXNpemUobGVuKTsKKworICAgIC8vIFNoYXBlIHRoZSBpdGVtLgorICAgIC8vIFRoZSByZWNv
bW1lbmRlZCBzaXplIGZvciB0aGUgZ2x5cGggYnVmZmVyIGlzIDEuNSAqIHRoZSBjaGFyYWN0ZXIg
bGVuZ3RoICsgMTYgaW4gdGhlIHVuaXNjcmliZSBkb2NzLgorICAgIC8vIEFwcGFyZW50bHkgdGhp
cyBpcyBhIGdvb2Qgc2l6ZSB0byBhdm9pZCBoYXZpbmcgdG8gbWFrZSByZXBlYXRlZCBjYWxscyB0
byBTY3JpcHRTaGFwZS4KKyAgICBnbHlwaHMucmVzaXplKDEuNSAqIGxlbiArIDE2KTsKKyAgICB2
aXN1YWxBdHRyaWJ1dGVzLnJlc2l6ZShnbHlwaHMuc2l6ZSgpKTsKKworICAgIGlmICghc2hhcGVC
eVVuaXNjcmliZShzdHIsIGxlbiwgaXRlbSwgZm9udERhdGEsIGdseXBocywgY2x1c3RlcnMsIHZp
c3VhbEF0dHJpYnV0ZXMpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIFZlY3RvcjxPcHRp
b25hbDx1bnNpZ25lZD4+IHN0cmluZ09mZnNldHMoZ2x5cGhzLnNpemUoKSk7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGxlbjsgKytpKSB7CisgICAgICAgIGlmIChzdHJpbmdPZmZzZXRz
W2NsdXN0ZXJzW2ldXSkKKyAgICAgICAgICAgIHN0cmluZ09mZnNldHNbY2x1c3RlcnNbaV1dID0g
c3RkOjptaW4oKnN0cmluZ09mZnNldHNbY2x1c3RlcnNbaV1dLCBpKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgc3RyaW5nT2Zmc2V0c1tjbHVzdGVyc1tpXV0gPSBpOworICAgIH0KKworICAg
IC8vIFdlIG5vdyBoYXZlIGEgY29sbGVjdGlvbiBvZiBnbHlwaHMuCisgICAgVmVjdG9yPEdPRkZT
RVQ+IG9mZnNldHM7CisgICAgVmVjdG9yPGludD4gYWR2YW5jZXM7CisgICAgb2Zmc2V0cy5yZXNp
emUoZ2x5cGhzLnNpemUoKSk7CisgICAgYWR2YW5jZXMucmVzaXplKGdseXBocy5zaXplKCkpOwor
ICAgIEhSRVNVTFQgcGxhY2VSZXN1bHQgPSBTY3JpcHRQbGFjZSgwLCBmb250RGF0YS0+c2NyaXB0
Q2FjaGUoKSwgZ2x5cGhzLmRhdGEoKSwgZ2x5cGhzLnNpemUoKSwgdmlzdWFsQXR0cmlidXRlcy5k
YXRhKCksCisgICAgICAgICZpdGVtLmEsIGFkdmFuY2VzLmRhdGEoKSwgb2Zmc2V0cy5kYXRhKCks
IDApOworICAgIGlmIChwbGFjZVJlc3VsdCA9PSBFX1BFTkRJTkcpIHsKKyAgICAgICAgLy8gVGhl
IHNjcmlwdCBjYWNoZSBpc24ndCBwcmltZWQgd2l0aCBlbm91Z2ggaW5mbyB5ZXQuIFdlIG5lZWQg
dG8gc2VsZWN0IG91ciBIRk9OVCBpbnRvCisgICAgICAgIC8vIGEgREMgYW5kIHBhc3MgdGhlIERD
IGluIHRvIFNjcmlwdFBsYWNlLgorICAgICAgICBIV25kREMgaGRjKDApOworICAgICAgICBIRk9O
VCBoZm9udCA9IGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5oZm9udCgpOworICAgICAgICBIRk9O
VCBvbGRGb250ID0gKEhGT05UKVNlbGVjdE9iamVjdChoZGMsIGhmb250KTsKKyAgICAgICAgcGxh
Y2VSZXN1bHQgPSBTY3JpcHRQbGFjZShoZGMsIGZvbnREYXRhLT5zY3JpcHRDYWNoZSgpLCBnbHlw
aHMuZGF0YSgpLCBnbHlwaHMuc2l6ZSgpLCB2aXN1YWxBdHRyaWJ1dGVzLmRhdGEoKSwKKyAgICAg
ICAgICAgICZpdGVtLmEsIGFkdmFuY2VzLmRhdGEoKSwgb2Zmc2V0cy5kYXRhKCksIDApOworICAg
ICAgICBTZWxlY3RPYmplY3QoaGRjLCBvbGRGb250KTsKKyAgICB9CisgICAgCisgICAgaWYgKEZB
SUxFRChwbGFjZVJlc3VsdCkgfHwgZ2x5cGhzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisKKyAgICAvLyBDb252ZXJ0IGFsbCBjaGFycyB0aGF0IHNob3VsZCBiZSB0cmVhdGVkIGFz
IHNwYWNlcyB0byB1c2UgdGhlIHNwYWNlIGdseXBoLgorICAgIC8vIFdlIGFsc28gY3JlYXRlIGEg
bWFwIHRoYXQgYWxsb3dzIHVzIHRvIHF1aWNrbHkgZ28gZnJvbSBzcGFjZSBnbHlwaHMgYmFjayB0
byB0aGVpciBjb3JyZXNwb25kaW5nIGNoYXJhY3RlcnMuCisgICAgVmVjdG9yPGludD4gc3BhY2VD
aGFyYWN0ZXJzKGdseXBocy5zaXplKCkpOworICAgIHNwYWNlQ2hhcmFjdGVycy5maWxsKC0xKTsK
KworICAgIGNvbnN0IGZsb2F0IGNMb2dpY2FsU2NhbGUgPSBmb250RGF0YS0+cGxhdGZvcm1EYXRh
KCkudXNlR0RJKCkgPyAxLjBmIDogMzIuMGY7CisgICAgZmxvYXQgc3BhY2VXaWR0aCA9IGZvbnRE
YXRhLT5zcGFjZVdpZHRoKCkgLSBmb250RGF0YS0+c3ludGhldGljQm9sZE9mZnNldCgpOworICAg
IHVuc2lnbmVkIGxvZ2ljYWxTcGFjZVdpZHRoID0gc3BhY2VXaWR0aCAqIGNMb2dpY2FsU2NhbGU7
CisKKyAgICBmb3IgKGludCBrID0gMDsgayA8IGxlbjsgaysrKSB7CisgICAgICAgIFVDaGFyIGNo
ID0gKihzdHIgKyBrKTsKKyAgICAgICAgYm9vbCB0cmVhdEFzU3BhY2UgPSBGb250Q2FzY2FkZTo6
dHJlYXRBc1NwYWNlKGNoKTsKKyAgICAgICAgYm9vbCB0cmVhdEFzWmVyb1dpZHRoU3BhY2UgPSBG
b250Q2FzY2FkZTo6dHJlYXRBc1plcm9XaWR0aFNwYWNlKGNoKTsKKyAgICAgICAgaWYgKHRyZWF0
QXNTcGFjZSB8fCB0cmVhdEFzWmVyb1dpZHRoU3BhY2UpIHsKKyAgICAgICAgICAgIC8vIFN1YnN0
aXR1dGUgaW4gdGhlIHNwYWNlIGdseXBoIGF0IHRoZSBhcHByb3ByaWF0ZSBwbGFjZSBpbiB0aGUg
Z2x5cGhzCisgICAgICAgICAgICAvLyBhcnJheS4KKyAgICAgICAgICAgIGdseXBoc1tjbHVzdGVy
c1trXV0gPSBmb250RGF0YS0+c3BhY2VHbHlwaCgpOworICAgICAgICAgICAgYWR2YW5jZXNbY2x1
c3RlcnNba11dID0gdHJlYXRBc1NwYWNlID8gbG9naWNhbFNwYWNlV2lkdGggOiAwOworICAgICAg
ICAgICAgaWYgKHRyZWF0QXNTcGFjZSkKKyAgICAgICAgICAgICAgICBzcGFjZUNoYXJhY3RlcnNb
Y2x1c3RlcnNba11dID0gayArIGl0ZW0uaUNoYXJQb3M7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICAvLyBQb3B1bGF0ZSBvdXIgZ2x5cGggYnVmZmVyIHdpdGggdGhpcyBpbmZvcm1hdGlvbi4KKyAg
ICBib29sIGhhc0V4dHJhU3BhY2luZyA9IG1fZm9udC5sZXR0ZXJTcGFjaW5nKCkgfHwgbV9mb250
LndvcmRTcGFjaW5nKCkgfHwgbV9wYWRkaW5nOworICAgIAorICAgIGZvciAodW5zaWduZWQgayA9
IDA7IGsgPCBnbHlwaHMuc2l6ZSgpOyBrKyspIHsKKyAgICAgICAgR2x5cGggZ2x5cGggPSBnbHlw
aHNba107CisgICAgICAgIGZsb2F0IGFkdmFuY2UgPSBhZHZhbmNlc1trXSAvIGNMb2dpY2FsU2Nh
bGU7CisgICAgICAgIGZsb2F0IG9mZnNldFggPSBvZmZzZXRzW2tdLmR1IC8gY0xvZ2ljYWxTY2Fs
ZTsKKyAgICAgICAgZmxvYXQgb2Zmc2V0WSA9IG9mZnNldHNba10uZHYgLyBjTG9naWNhbFNjYWxl
OworCisgICAgICAgIC8vIE1hdGNoIEFwcEtpdCdzIHJ1bGVzIGZvciB0aGUgaW50ZWdlciB2cy4g
bm9uLWludGVnZXIgcmVuZGVyaW5nIG1vZGVzLgorICAgICAgICBmbG9hdCByb3VuZGVkQWR2YW5j
ZSA9IHJvdW5kZihhZHZhbmNlKTsKKyAgICAgICAgaWYgKCFmb250RGF0YS0+cGxhdGZvcm1EYXRh
KCkuaXNTeXN0ZW1Gb250KCkpIHsKKyAgICAgICAgICAgIGFkdmFuY2UgPSByb3VuZGVkQWR2YW5j
ZTsKKyAgICAgICAgICAgIG9mZnNldFggPSByb3VuZGYob2Zmc2V0WCk7CisgICAgICAgICAgICBv
ZmZzZXRZID0gcm91bmRmKG9mZnNldFkpOworICAgICAgICB9CisKKyAgICAgICAgYWR2YW5jZSAr
PSBmb250RGF0YS0+c3ludGhldGljQm9sZE9mZnNldCgpOworCisgICAgICAgIGlmIChoYXNFeHRy
YVNwYWNpbmcpIHsKKyAgICAgICAgICAgIC8vIElmIHdlJ3JlIGEgZ2x5cGggd2l0aCBhbiBhZHZh
bmNlLCBnbyBhaGVhZCBhbmQgYWRkIGluIGxldHRlci1zcGFjaW5nLgorICAgICAgICAgICAgLy8g
VGhhdCB3YXkgd2Ugd2VlZCBvdXQgemVybyB3aWR0aCBsdXJrZXJzLiBUaGlzIGJlaGF2aW9yIG1h
dGNoZXMgdGhlIGZhc3QgdGV4dCBjb2RlIHBhdGguCisgICAgICAgICAgICBpZiAoYWR2YW5jZSAm
JiBtX2ZvbnQubGV0dGVyU3BhY2luZygpKQorICAgICAgICAgICAgICAgIGFkdmFuY2UgKz0gbV9m
b250LmxldHRlclNwYWNpbmcoKTsKKworICAgICAgICAgICAgLy8gSGFuZGxlIGp1c3RpZmljYXRp
b24gYW5kIHdvcmQtc3BhY2luZy4KKyAgICAgICAgICAgIGludCBjaGFyYWN0ZXJJbmRleCA9IHNw
YWNlQ2hhcmFjdGVyc1trXTsKKyAgICAgICAgICAgIC8vIGNoYXJhY3RlckluZGV4IGlzIGxlZnQg
YXQgdGhlIGluaXRpYWwgdmFsdWUgb2YgLTEgZm9yIGdseXBocyB0aGF0IGRvIG5vdCBtYXAgYmFj
ayB0byB0cmVhdGVkLWFzLXNwYWNlIGNoYXJhY3RlcnMuCisgICAgICAgICAgICBpZiAoY2hhcmFj
dGVySW5kZXggIT0gLTEpIHsKKyAgICAgICAgICAgICAgICAvLyBBY2NvdW50IGZvciBwYWRkaW5n
LiBXZWJDb3JlIHVzZXMgc3BhY2UgcGFkZGluZyB0byBqdXN0aWZ5IHRleHQuCisgICAgICAgICAg
ICAgICAgLy8gV2UgZGlzdHJpYnV0ZSB0aGUgc3BlY2lmaWVkIHBhZGRpbmcgb3ZlciB0aGUgYXZh
aWxhYmxlIHNwYWNlcyBpbiB0aGUgcnVuLgorICAgICAgICAgICAgICAgIGlmIChtX3BhZGRpbmcp
IHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVXNlIGxlZnRvdmVyIHBhZGRpbmcgaWYgbm90IGV2
ZW5seSBkaXZpc2libGUgYnkgbnVtYmVyIG9mIHNwYWNlcy4KKyAgICAgICAgICAgICAgICAgICAg
aWYgKG1fcGFkZGluZyA8IG1fcGFkUGVyU3BhY2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGFkdmFuY2UgKz0gbV9wYWRkaW5nOworICAgICAgICAgICAgICAgICAgICAgICAgbV9wYWRkaW5n
ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG1fcGFkZGluZyAtPSBtX3BhZFBlclNwYWNlOworICAgICAgICAgICAgICAgICAgICAgICAg
YWR2YW5jZSArPSBtX3BhZFBlclNwYWNlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gQWNjb3VudCBmb3Igd29yZC1zcGFjaW5n
LgorICAgICAgICAgICAgICAgIGlmIChjaGFyYWN0ZXJJbmRleCA+IDAgJiYgbV9mb250LndvcmRT
cGFjaW5nKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgVUNoYXIgY2FuZGlkYXRlU3BhY2U7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChtX3J1bi5pczhCaXQoKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNhbmRpZGF0ZVNwYWNlID0gKihtX3J1bi5kYXRhOChjaGFyYWN0ZXJJbmRleCAtIDEp
KTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgY2Fu
ZGlkYXRlU3BhY2UgPSAqKG1fcnVuLmRhdGExNihjaGFyYWN0ZXJJbmRleCAtIDEpKTsKKworICAg
ICAgICAgICAgICAgICAgICBpZiAoIUZvbnRDYXNjYWRlOjp0cmVhdEFzU3BhY2UoY2FuZGlkYXRl
U3BhY2UpKQorICAgICAgICAgICAgICAgICAgICAgICAgYWR2YW5jZSArPSBtX2ZvbnQud29yZFNw
YWNpbmcoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICAvLyBGSVhNRTogV2UgbmVlZCB0byB0YWtlIHRoZSBHT0ZGU0VUUyBmb3IgY29tYmlu
aW5nIGdseXBocyBhbmQgc3RvcmUgdGhlbSBpbiB0aGUgZ2x5cGggYnVmZmVyCisgICAgICAgIC8v
IGFzIHdlbGwsIHNvIHRoYXQgd2hlbiB0aGUgdGltZSBjb21lcyB0byBkcmF3IHRob3NlIGdseXBo
cywgd2UgY2FuIGFwcGx5IHRoZSBhcHByb3ByaWF0ZQorICAgICAgICAvLyB0cmFuc2xhdGlvbi4K
KyAgICAgICAgaWYgKGdseXBoQnVmZmVyKSB7CisgICAgICAgICAgICBHbHlwaEJ1ZmZlckFkdmFu
Y2Ugb3JpZ2luKG9mZnNldFgsIC1vZmZzZXRZKTsKKyAgICAgICAgICAgIGlmICghZ2x5cGhCdWZm
ZXItPmFkdmFuY2VzQ291bnQoKSkKKyAgICAgICAgICAgICAgICBnbHlwaEJ1ZmZlci0+c2V0SW5p
dGlhbEFkdmFuY2Uob3JpZ2luKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBn
bHlwaEJ1ZmZlci0+ZXhwYW5kTGFzdEFkdmFuY2Uob3JpZ2luKTsKKyAgICAgICAgICAgIEdseXBo
QnVmZmVyQWR2YW5jZSBnbHlwaEFkdmFuY2UoLW9yaWdpbi53aWR0aCgpICsgYWR2YW5jZSwgLW9y
aWdpbi5oZWlnaHQoKSk7CisgICAgICAgICAgICBnbHlwaEJ1ZmZlci0+YWRkKGdseXBoLCBmb250
RGF0YSwgZ2x5cGhBZHZhbmNlLCBzdHJpbmdPZmZzZXRzW2tdLnZhbHVlT3IoMCkpOworICAgICAg
ICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQ29tcGxleFRleHRDb250
cm9sbGVyOjpjb2xsZWN0Q29tcGxleFRleHRSdW5zRm9yQ2hhcmFjdGVycyhjb25zdCBVQ2hhciog
Y3AsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgc3RyaW5nTG9jYXRpb24sIGNvbnN0IEZvbnQq
IGZvbnQpCit7CisgICAgaWYgKCFmb250KSB7CisgICAgICAgIC8vIENyZWF0ZSBhIHJ1biBvZiBt
aXNzaW5nIGdseXBocyBmcm9tIHRoZSBwcmltYXJ5IGZvbnQuCisgICAgICAgIG1fY29tcGxleFRl
eHRSdW5zLmFwcGVuZChDb21wbGV4VGV4dFJ1bjo6Y3JlYXRlKG1fZm9udC5wcmltYXJ5Rm9udCgp
LCBjcCwgc3RyaW5nTG9jYXRpb24sIGxlbmd0aCwgMCwgbGVuZ3RoLCBtX3J1bi5sdHIoKSkpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgVmVjdG9yPFNDUklQVF9JVEVNPiBpdGVtcyg2
KTsKKyAgICBpbnQgbnVtSXRlbXMgPSAwOworICAgIGZvciAoOzspIHsKKyAgICAgICAgU0NSSVBU
X0NPTlRST0wgY29udHJvbCB7IH07CisgICAgICAgIFNDUklQVF9TVEFURSBzdGF0ZSB7IH07Cisg
ICAgICAgIC8vIFNldCB1cCB0aGUgY29ycmVjdCBkaXJlY3Rpb24gZm9yIHRoZSBydW4uCisgICAg
ICAgIHN0YXRlLnVCaWRpTGV2ZWwgPSBtX3J1bi5ydGwoKTsKKyAgICAgICAgLy8gTG9jayB0aGUg
Y29ycmVjdCBkaXJlY3Rpb25hbCBvdmVycmlkZS4KKyAgICAgICAgc3RhdGUuZk92ZXJyaWRlRGly
ZWN0aW9uID0gbV9ydW4uZGlyZWN0aW9uYWxPdmVycmlkZSgpOworCisgICAgICAgIC8vIFNjcmlw
dEl0ZW1pemUgbWF5IHdyaXRlIChjTWF4SXRlbXMgKyAxKSBTQ1JJUFRfSVRFTS4KKyAgICAgICAg
SFJFU1VMVCByYyA9IFNjcmlwdEl0ZW1pemUod2NoYXJGcm9tKGNwKSwgbGVuZ3RoLCBpdGVtcy5z
aXplKCkgLSAxLCAmY29udHJvbCwgJnN0YXRlLCBpdGVtcy5kYXRhKCksICZudW1JdGVtcyk7Cisg
ICAgICAgIGlmIChyYyAhPSBFX09VVE9GTUVNT1JZKSB7CisgICAgICAgICAgICBBU1NFUlQoU1VD
Q0VFREVEKHJjKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpdGVt
cy5yZXNpemUoaXRlbXMuc2l6ZSgpICogMik7CisgICAgfQorICAgIGl0ZW1zLnJlc2l6ZShudW1J
dGVtcyArIDEpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1JdGVtczsgaSsrKSB7Cisg
ICAgICAgIEdseXBoQnVmZmVyIGdseXBoQnVmZmVyOworICAgICAgICBnbHlwaEJ1ZmZlci5zYXZl
T2Zmc2V0c0luU3RyaW5nKCk7CisKKyAgICAgICAgVW5pc2NyaWJlQ29udHJvbGxlciB1YyhtX2Zv
bnQsIG1fcnVuLCBpdGVtcyk7CisKKyAgICAgICAgaWYgKCF1Yy5zaGFwZUFuZFBsYWNlSXRlbShj
cCwgaSwgZm9udCwgJmdseXBoQnVmZmVyKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICBWZWN0b3I8R2x5cGg+IGdseXBocyhnbHlwaEJ1ZmZlci5zaXplKCkpOworICAgICAgICBWZWN0
b3I8RmxvYXRQb2ludD4gb3JpZ2lucyhnbHlwaEJ1ZmZlci5zaXplKCkpOworICAgICAgICBWZWN0
b3I8RmxvYXRTaXplPiBhZHZhbmNlcyhnbHlwaEJ1ZmZlci5zaXplKCkpOworICAgICAgICBWZWN0
b3I8dW5zaWduZWQ+IHN0cmluZ0luZGljZXMoZ2x5cGhCdWZmZXIuc2l6ZSgpKTsKKworICAgICAg
ICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IGdseXBoQnVmZmVyLnNpemUoKTsgaisrKSB7CisgICAg
ICAgICAgICBnbHlwaHNbal0gPSBnbHlwaEJ1ZmZlci5nbHlwaEF0KGopOworICAgICAgICAgICAg
b3JpZ2luc1tqXSA9IEZsb2F0UG9pbnQoMCwgMCk7CisgICAgICAgICAgICBhZHZhbmNlc1tqXSA9
IEZsb2F0U2l6ZShnbHlwaEJ1ZmZlci5hZHZhbmNlQXQoaikpOworICAgICAgICAgICAgc3RyaW5n
SW5kaWNlc1tqXSA9IGl0ZW1zW2ldLmlDaGFyUG9zICsgZ2x5cGhCdWZmZXIub2Zmc2V0SW5TdHJp
bmcoaik7CisgICAgICAgIH0KKworICAgICAgICBtX2NvbXBsZXhUZXh0UnVucy5hcHBlbmQoQ29t
cGxleFRleHRSdW46OmNyZWF0ZShhZHZhbmNlcywgb3JpZ2lucywgZ2x5cGhzLCBzdHJpbmdJbmRp
Y2VzLCBnbHlwaEJ1ZmZlci5pbml0aWFsQWR2YW5jZSgpLCAqZm9udCwgY3AsIHN0cmluZ0xvY2F0
aW9uLCBsZW5ndGgsIGl0ZW1zW2ldLmlDaGFyUG9zLCBpdGVtc1tpKzFdLmlDaGFyUG9zLCBtX3J1
bi5sdHIoKSkpOworICAgIH0KK30KKworfQorCisjZW5kaWYgLy8gIVVTRShESVJFQ1QyRCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q0dXaW4u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDR1dpbi5jcHAK
aW5kZXggMGVmNjU1ZDhkMDUuLjMzZjg1MmViNmU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENHV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENHV2luLmNwcApAQCAtMzQsNyArMzQsNiBAQAog
I2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAj
aW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIlVuaXNjcmliZUNvbnRyb2xsZXIuaCIKICNp
bmNsdWRlICJXZWJDb3JlVGV4dFJlbmRlcmVyLmgiCiAjaW5jbHVkZSA8cGFsL3NwaS9jZy9Db3Jl
R3JhcGhpY3NTUEkuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYXNjYWRlRGlyZWN0MkQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYXNjYWRlRGly
ZWN0MkQuY3BwCmluZGV4IDkxMTEyZDk2NWM4Li5iMmQzNDcxYjhhYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYXNjYWRlRGlyZWN0MkQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FzY2FkZURp
cmVjdDJELmNwcApAQCAtMzcsNyArMzcsNiBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dFBs
YXRmb3JtUHJpdmF0ZURpcmVjdDJELmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUg
IlBsYXRmb3JtQ29udGV4dERpcmVjdDJELmgiCi0jaW5jbHVkZSAiVW5pc2NyaWJlQ29udHJvbGxl
ci5oIgogI2luY2x1ZGUgIldlYkNvcmVUZXh0UmVuZGVyZXIuaCIKICNpbmNsdWRlIDxkMmQxLmg+
CiAjaW5jbHVkZSA8ZHdyaXRlXzMuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9Gb250V2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9Gb250V2luLmNwcAppbmRleCAxY2FhODAyMmUyNi4uNTJjYjg4ZjUzZDAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250V2luLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFdpbi5jcHAK
QEAgLTM1LDEwICszNSw2IEBACiAjaW5jbHVkZSAiVGV4dFJ1bi5oIgogI2luY2x1ZGUgPHd0Zi9N
YXRoRXh0cmFzLmg+CiAKLSNpZiAhVVNFKERJUkVDVDJEKQotI2luY2x1ZGUgIlVuaXNjcmliZUNv
bnRyb2xsZXIuaCIKLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGJvb2wgRm9udENh
c2NhZGU6OmNhblJldHVybkZhbGxiYWNrRm9udHNGb3JDb21wbGV4VGV4dCgpCkBAIC01MSw3MiAr
NDcsNCBAQCBib29sIEZvbnRDYXNjYWRlOjpjYW5FeHBhbmRBcm91bmRJZGVvZ3JhcGhzSW5Db21w
bGV4VGV4dCgpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi0jaWYgIVVTRShESVJFQ1QyRCkKLQot
dm9pZCBGb250Q2FzY2FkZTo6YWRqdXN0U2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0
IFRleHRSdW4mIHJ1biwgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgdW5zaWduZWQgZnJvbSwg
dW5zaWduZWQgdG8pIGNvbnN0Ci17Ci0gICAgVW5pc2NyaWJlQ29udHJvbGxlciBpdCh0aGlzLCBy
dW4pOwotICAgIGl0LmFkdmFuY2UoZnJvbSk7Ci0gICAgZmxvYXQgYmVmb3JlV2lkdGggPSBpdC5y
dW5XaWR0aFNvRmFyKCk7Ci0gICAgaXQuYWR2YW5jZSh0byk7Ci0gICAgZmxvYXQgYWZ0ZXJXaWR0
aCA9IGl0LnJ1bldpZHRoU29GYXIoKTsKLQotICAgIGlmIChydW4ucnRsKCkpIHsKLSAgICAgICAg
aXQuYWR2YW5jZShydW4ubGVuZ3RoKCkpOwotICAgICAgICBzZWxlY3Rpb25SZWN0Lm1vdmUoaXQu
cnVuV2lkdGhTb0ZhcigpIC0gYWZ0ZXJXaWR0aCwgMCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHNl
bGVjdGlvblJlY3QubW92ZShiZWZvcmVXaWR0aCwgMCk7Ci0gICAgc2VsZWN0aW9uUmVjdC5zZXRX
aWR0aChhZnRlcldpZHRoIC0gYmVmb3JlV2lkdGgpOwotfQotCi1mbG9hdCBGb250Q2FzY2FkZTo6
Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIHVu
c2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvLCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIEZvclRl
eHRFbXBoYXNpc09yTm90IGZvclRleHRFbXBoYXNpcykgY29uc3QKLXsKLSAgICBpZiAoZm9yVGV4
dEVtcGhhc2lzKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBBZGQgZm9yVGV4dEVtcGhhc2lzIHBhcmVt
ZXRlciB0byBVbmlzY3JpYmVDb250cm9sbGVyIGFuZCB1c2UgaXQuCi0gICAgICAgIExPR19FUlJP
UigiTm90IGltcGxlbWVudGVkIGZvciB0ZXh0IGVtcGhhc2lzLiIpOwotICAgICAgICByZXR1cm4g
MDsKLSAgICB9Ci0KLSAgICBVbmlzY3JpYmVDb250cm9sbGVyIGNvbnRyb2xsZXIodGhpcywgcnVu
KTsKLSAgICBjb250cm9sbGVyLmFkdmFuY2UoZnJvbSk7Ci0gICAgZmxvYXQgYmVmb3JlV2lkdGgg
PSBjb250cm9sbGVyLnJ1bldpZHRoU29GYXIoKTsKLSAgICBjb250cm9sbGVyLmFkdmFuY2UodG8s
ICZnbHlwaEJ1ZmZlcik7Ci0KLSAgICBpZiAoZ2x5cGhCdWZmZXIuaXNFbXB0eSgpKQotICAgICAg
ICByZXR1cm4gMDsKLQotICAgIGZsb2F0IGFmdGVyV2lkdGggPSBjb250cm9sbGVyLnJ1bldpZHRo
U29GYXIoKTsKLQotICAgIGlmIChydW4ucnRsKCkpIHsKLSAgICAgICAgY29udHJvbGxlci5hZHZh
bmNlKHJ1bi5sZW5ndGgoKSk7Ci0gICAgICAgIHJldHVybiBjb250cm9sbGVyLnJ1bldpZHRoU29G
YXIoKSAtIGFmdGVyV2lkdGg7Ci0gICAgfQotICAgIHJldHVybiBiZWZvcmVXaWR0aDsKLX0KLQot
ZmxvYXQgRm9udENhc2NhZGU6OmZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVu
JiBydW4sIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93
KiBnbHlwaE92ZXJmbG93KSBjb25zdAotewotICAgIFVuaXNjcmliZUNvbnRyb2xsZXIgY29udHJv
bGxlcih0aGlzLCBydW4sIGZhbGxiYWNrRm9udHMpOwotICAgIGNvbnRyb2xsZXIuYWR2YW5jZShy
dW4ubGVuZ3RoKCkpOwotICAgIGlmIChnbHlwaE92ZXJmbG93KSB7Ci0gICAgICAgIGdseXBoT3Zl
cmZsb3ctPnRvcCA9IHN0ZDo6bWF4PGludD4oZ2x5cGhPdmVyZmxvdy0+dG9wLCBjZWlsZigtY29u
dHJvbGxlci5taW5HbHlwaEJvdW5kaW5nQm94WSgpKSAtIChnbHlwaE92ZXJmbG93LT5jb21wdXRl
Qm91bmRzID8gMCA6IGZvbnRNZXRyaWNzKCkuYXNjZW50KCkpKTsKLSAgICAgICAgZ2x5cGhPdmVy
Zmxvdy0+Ym90dG9tID0gc3RkOjptYXg8aW50PihnbHlwaE92ZXJmbG93LT5ib3R0b20sIGNlaWxm
KGNvbnRyb2xsZXIubWF4R2x5cGhCb3VuZGluZ0JveFkoKSkgLSAoZ2x5cGhPdmVyZmxvdy0+Y29t
cHV0ZUJvdW5kcyA/IDAgIDogZm9udE1ldHJpY3MoKS5kZXNjZW50KCkpKTsKLSAgICAgICAgZ2x5
cGhPdmVyZmxvdy0+bGVmdCA9IHN0ZDo6bWF4PGludD4oMCwgY2VpbGYoLWNvbnRyb2xsZXIubWlu
R2x5cGhCb3VuZGluZ0JveFgoKSkpOwotICAgICAgICBnbHlwaE92ZXJmbG93LT5yaWdodCA9IHN0
ZDo6bWF4PGludD4oMCwgY2VpbGYoY29udHJvbGxlci5tYXhHbHlwaEJvdW5kaW5nQm94WCgpIC0g
Y29udHJvbGxlci5ydW5XaWR0aFNvRmFyKCkpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGNvbnRyb2xs
ZXIucnVuV2lkdGhTb0ZhcigpOwotfQotCi1pbnQgRm9udENhc2NhZGU6Om9mZnNldEZvclBvc2l0
aW9uRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBmbG9hdCB4RmxvYXQsIGJvb2wg
aW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IFRoaXMgdHJ1bmNh
dGlvbiBpcyBub3QgYSBwcm9ibGVtIGZvciBIVE1MLCBidXQgb25seSBhZmZlY3RzIFNWRywgd2hp
Y2ggcGFzc2VzIGZsb2F0aW5nLXBvaW50IG51bWJlcnMKLSAgICAvLyB0byBGb250Q2FzY2FkZTo6
b2Zmc2V0Rm9yUG9zaXRpb24oKS4gQnVnIGh0dHA6Ly93ZWJraXQub3JnL2IvNDA2NzMgdHJhY2tz
IGZpeGluZyB0aGlzIHByb2JsZW0uCi0gICAgaW50IHggPSBzdGF0aWNfY2FzdDxpbnQ+KHhGbG9h
dCk7Ci0KLSAgICBVbmlzY3JpYmVDb250cm9sbGVyIGNvbnRyb2xsZXIodGhpcywgcnVuKTsKLSAg
ICByZXR1cm4gY29udHJvbGxlci5vZmZzZXRGb3JQb3NpdGlvbih4LCBpbmNsdWRlUGFydGlhbEds
eXBocyk7Ci19Ci0KLSNlbmRpZgotCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vVW5pc2NyaWJlQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vVW5pc2NyaWJlQ29udHJvbGxlci5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3NGM0ODYwZmYxLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vVW5pc2NyaWJlQ29udHJvbGxlci5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSw0NTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
NywgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJVbmlzY3JpYmVDb250cm9sbGVy
LmgiCi0KLSNpbmNsdWRlICJGb250LmgiCi0jaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKLSNpbmNs
dWRlICJIV25kREMuaCIKLSNpbmNsdWRlICJUZXh0UnVuLmgiCi0jaW5jbHVkZSA8d3RmL01hdGhF
eHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC93aW4vV0NoYXJTdHJpbmdFeHRyYXMuaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotdXNpbmcgbmFtZXNwYWNlIFdURjo6VW5pY29kZTsKLQotLy8g
RklYTUU6IFJlYXJjaGl0ZWN0IHRoaXMgdG8gYmUgbW9yZSBsaWtlIFdpZHRoSXRlcmF0b3IgaW4g
Rm9udC5jcHAuICBIYXZlIGFuIGFkdmFuY2UoKSBtZXRob2QKLS8vIHRoYXQgZG9lcyBzdHVmZiBp
biB0aGF0IG1ldGhvZCBpbnN0ZWFkIG9mIGRvaW5nIGV2ZXJ5dGhpbmcgaW4gdGhlIGNvbnN0cnVj
dG9yLiAgSGF2ZSBhZHZhbmNlKCkKLS8vIHRha2UgdGhlIEdseXBoQnVmZmVyIGFzIGFuIGFyZyBz
byB0aGF0IHdlIGRvbid0IGhhdmUgdG8gcG9wdWxhdGUgdGhlIGdseXBoIGJ1ZmZlciB3aGVuCi0v
LyBtZWFzdXJpbmcuCi1VbmlzY3JpYmVDb250cm9sbGVyOjpVbmlzY3JpYmVDb250cm9sbGVyKGNv
bnN0IEZvbnRDYXNjYWRlKiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3Qg
Rm9udCo+KiBmYWxsYmFja0ZvbnRzKQotICAgIDogbV9mb250KCpmb250KQotICAgICwgbV9ydW4o
cnVuKQotICAgICwgbV9mYWxsYmFja0ZvbnRzKGZhbGxiYWNrRm9udHMpCi0gICAgLCBtX21pbkds
eXBoQm91bmRpbmdCb3hYKHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgoKSkKLSAgICAs
IG1fbWF4R2x5cGhCb3VuZGluZ0JveFgoc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46Om1pbigp
KQotICAgICwgbV9taW5HbHlwaEJvdW5kaW5nQm94WShzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0
Pjo6bWF4KCkpCi0gICAgLCBtX21heEdseXBoQm91bmRpbmdCb3hZKHN0ZDo6bnVtZXJpY19saW1p
dHM8ZmxvYXQ+OjptaW4oKSkKLSAgICAsIG1fY3VycmVudENoYXJhY3RlcigwKQotICAgICwgbV9l
bmQocnVuLmxlbmd0aCgpKQotICAgICwgbV9ydW5XaWR0aFNvRmFyKDApCi0gICAgLCBtX3BhZGRp
bmcocnVuLmV4cGFuc2lvbigpKQotICAgICwgbV9jb21wdXRpbmdPZmZzZXRQb3NpdGlvbihmYWxz
ZSkKLSAgICAsIG1faW5jbHVkZVBhcnRpYWxHbHlwaHMoZmFsc2UpCi0gICAgLCBtX29mZnNldFgo
MCkKLSAgICAsIG1fb2Zmc2V0UG9zaXRpb24oMCkKLXsKLSAgICBpZiAoIW1fcGFkZGluZykKLSAg
ICAgICAgbV9wYWRQZXJTcGFjZSA9IDA7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGZsb2F0IG51bVNw
YWNlcyA9IDA7Ci0gICAgICAgIGZvciAoaW50IHMgPSAwOyBzIDwgbV9ydW4ubGVuZ3RoKCk7IHMr
KykgewotICAgICAgICAgICAgaWYgKEZvbnRDYXNjYWRlOjp0cmVhdEFzU3BhY2UobV9ydW5bc10p
KQotICAgICAgICAgICAgICAgIG51bVNwYWNlcysrOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KG51bVNwYWNlcyA9PSAwKQotICAgICAgICAgICAgbV9wYWRQZXJTcGFjZSA9IDA7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIG1fcGFkUGVyU3BhY2UgPSBtX3BhZGRpbmcgLyBudW1TcGFjZXM7
Ci0gICAgfQotCi0gICAgLy8gTnVsbCBvdXQgb3VyIHVuaXNjcmliZSBzdHJ1Y3RzCi0gICAgcmVz
ZXRDb250cm9sQW5kU3RhdGUoKTsKLX0KLQotaW50IFVuaXNjcmliZUNvbnRyb2xsZXI6Om9mZnNl
dEZvclBvc2l0aW9uKGludCB4LCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKQotewotICAgIG1f
Y29tcHV0aW5nT2Zmc2V0UG9zaXRpb24gPSB0cnVlOwotICAgIG1faW5jbHVkZVBhcnRpYWxHbHlw
aHMgPSBpbmNsdWRlUGFydGlhbEdseXBoczsKLSAgICBtX29mZnNldFggPSB4OwotICAgIG1fb2Zm
c2V0UG9zaXRpb24gPSAwOwotICAgIGFkdmFuY2UobV9ydW4ubGVuZ3RoKCkpOwotICAgIGlmICht
X2NvbXB1dGluZ09mZnNldFBvc2l0aW9uKSB7Ci0gICAgICAgIC8vIFRoZSBwb2ludCBpcyB0byB0
aGUgbGVmdCBvciB0byB0aGUgcmlnaHQgb2YgdGhlIGVudGlyZSBydW4uCi0gICAgICAgIGlmICgo
bV9vZmZzZXRYID49IG1fcnVuV2lkdGhTb0ZhciAmJiBtX3J1bi5sdHIoKSkgfHwgKG1fb2Zmc2V0
WCA8IDAgJiYgbV9ydW4ucnRsKCkpKQotICAgICAgICAgICAgbV9vZmZzZXRQb3NpdGlvbiA9IG1f
ZW5kOwotICAgIH0KLSAgICBtX2NvbXB1dGluZ09mZnNldFBvc2l0aW9uID0gZmFsc2U7Ci0gICAg
cmV0dXJuIG1fb2Zmc2V0UG9zaXRpb247Ci19Ci0KLXZvaWQgVW5pc2NyaWJlQ29udHJvbGxlcjo6
YWR2YW5jZSh1bnNpZ25lZCBvZmZzZXQsIEdseXBoQnVmZmVyKiBnbHlwaEJ1ZmZlcikKLXsKLSAg
ICAvLyBGSVhNRTogV2UgcmVhbGx5IHdhbnQgdG8gYmUgdXNpbmcgYSBuZXdlciB2ZXJzaW9uIG9m
IFVuaXNjcmliZSB0aGF0IHN1cHBvcnRzIHRoZSBuZXcgT3BlblR5cGUKLSAgICAvLyBmdW5jdGlv
bnMuICBUaG9zZSBmdW5jdGlvbnMgd291bGQgYWxsb3cgdXMgdG8gdHVybiBvZmYga2VybmluZyBh
bmQgbGlnYXR1cmVzLiAgV2l0aG91dCBiZWluZyBhYmxlCi0gICAgLy8gdG8gZG8gdGhhdCwgd2Ug
d2lsbCBoYXZlIGJ1Z2d5IGxpbmUgYnJlYWtpbmcgYW5kIG1ldHJpY3Mgd2hlbiBzaW1wbGUgYW5k
IGNvbXBsZXggdGV4dCBhcmUgY2xvc2UKLSAgICAvLyB0b2dldGhlciAodGhlIGNvbXBsZXggY29k
ZSBwYXRoIHdpbGwgbmFycm93IHRoZSB0ZXh0IGJlY2F1c2Ugb2Yga2VybmluZyBhbmQgbGlnYXR1
cmVzIGFuZCB0aGVuCi0gICAgLy8gd2hlbiBiaWRpIHByb2Nlc3Npbmcgc3BsaXRzIGludG8gbXVs
dGlwbGUgcnVucywgdGhlIHNpbXBsZSBwb3J0aW9ucyB3aWxsIGdldCB3aWRlciBhbmQgY2F1c2Ug
dXMgdG8KLSAgICAvLyBzcGlsbCBvZmYgdGhlIGVkZ2Ugb2YgYSBsaW5lKS4KLSAgICBpZiAoc3Rh
dGljX2Nhc3Q8aW50PihvZmZzZXQpID4gbV9lbmQpCi0gICAgICAgIG9mZnNldCA9IG1fZW5kOwot
Ci0gICAgaW50IGxlbmd0aCA9IG9mZnNldCAtIG1fY3VycmVudENoYXJhY3RlcjsKLSAgICBpZiAo
bGVuZ3RoIDw9IDApCi0gICAgICAgIHJldHVybjsKLQotICAgIFN0cmluZyBidWZmZXJGb3IxNkJp
dERhdGE7Ci0KLSAgICAvLyBJdGVtaXplIHRoZSBzdHJpbmcuCi0gICAgY29uc3QgVUNoYXIqIGNw
ID0gbnVsbHB0cjsKLSAgICBpZiAobV9ydW4uaXM4Qml0KCkpIHsKLSAgICAgICAgLy8gVW5pc2Ny
aWJlIG9ubHkgZGVhbHMgd2l0aCAxNi1iaXQgY2hhcmFjdGVycy4gTXVzdCBnZW5lcmF0ZSB0aGVt
IG5vdy4KLSAgICAgICAgYnVmZmVyRm9yMTZCaXREYXRhID0gU3RyaW5nOjptYWtlMTZCaXRGcm9t
OEJpdFNvdXJjZShtX3J1bi5kYXRhOChtX2N1cnJlbnRDaGFyYWN0ZXIpLCBsZW5ndGgpOwotICAg
ICAgICBjcCA9IGJ1ZmZlckZvcjE2Qml0RGF0YS5jaGFyYWN0ZXJzMTYoKTsKLSAgICB9IGVsc2UK
LSAgICAgICAgY3AgPSBtX3J1bi5kYXRhMTYobV9jdXJyZW50Q2hhcmFjdGVyKTsKLQotICAgIHVu
c2lnbmVkIGJhc2VDaGFyYWN0ZXIgPSBtX2N1cnJlbnRDaGFyYWN0ZXI7Ci0KLSAgICAvLyBXZSBi
cmVhayB1cCBpdGVtaXphdGlvbiBvZiB0aGUgc3RyaW5nIGJ5IGZvbnREYXRhIGFuZCAoaWYgbmVl
ZGVkKSB0aGUgdXNlIG9mIHNtYWxsIGNhcHMuCi0KLSAgICAvLyBGSVhNRTogSXQncyBpbmNvbnNp
c3RlbnQgdGhhdCB3ZSB1c2UgbG9naWNhbCBvcmRlciB3aGVuIGl0ZW1pemluZywgc2luY2UgdGhp
cwotICAgIC8vIGRvZXMgbm90IG1hdGNoIG5vcm1hbCBSVEwuCi0KLSAgICAvLyBGSVhNRTogVGhp
cyBmdW5jdGlvbiBzaG91bGQgZGVjb2RlIHN1cnJvZ2F0ZSBwYWlycy4gQ3VycmVudGx5IGl0IG1h
a2VzIGxpdHRsZSBkaWZmZXJlbmNlIHRoYXQKLSAgICAvLyBpdCBkb2VzIG5vdCBiZWNhdXNlIHRo
ZSBmb250IGNhY2hlIG9uIFdpbmRvd3MgZG9lcyBub3Qgc3VwcG9ydCBub24tQk1QIGNoYXJhY3Rl
cnMuCi0gICAgVmVjdG9yPFVDaGFyLCAyNTY+IHNtYWxsQ2Fwc0J1ZmZlcjsKLSAgICBpZiAobV9m
b250LmlzU21hbGxDYXBzKCkpCi0gICAgICAgIHNtYWxsQ2Fwc0J1ZmZlci5yZXNpemUobGVuZ3Ro
KTsKLQotICAgIHVuc2lnbmVkIGluZGV4T2ZGb250VHJhbnNpdGlvbiA9IG1fcnVuLnJ0bCgpID8g
bGVuZ3RoIC0gMSA6IDA7Ci0gICAgY29uc3QgVUNoYXIqIGN1cnIgPSBtX3J1bi5ydGwoKSA/IGNw
ICsgbGVuZ3RoICAtIDEgOiBjcDsKLSAgICBjb25zdCBVQ2hhciogZW5kID0gbV9ydW4ucnRsKCkg
PyBjcCAtIDEgOiBjcCArIGxlbmd0aDsKLQotICAgIGNvbnN0IEZvbnQqIGZvbnREYXRhOwotICAg
IGNvbnN0IEZvbnQqIG5leHRGb250RGF0YSA9IG1fZm9udC5nbHlwaERhdGFGb3JDaGFyYWN0ZXIo
KmN1cnIsIGZhbHNlKS5mb250OwotCi0gICAgVUNoYXIgbmV3QyA9IDA7Ci0KLSAgICBib29sIGlz
U21hbGxDYXBzOwotICAgIGJvb2wgbmV4dElzU21hbGxDYXBzID0gbV9mb250LmlzU21hbGxDYXBz
KCkgJiYgIShVX0dFVF9HQ19NQVNLKCpjdXJyKSAmIFVfR0NfTV9NQVNLKSAmJiAobmV3QyA9IHVf
dG91cHBlcigqY3VycikpICE9ICpjdXJyOwotCi0gICAgaWYgKG5leHRJc1NtYWxsQ2FwcykKLSAg
ICAgICAgc21hbGxDYXBzQnVmZmVyW2N1cnIgLSBjcF0gPSBuZXdDOwotCi0gICAgd2hpbGUgKHRy
dWUpIHsKLSAgICAgICAgY3VyciA9IG1fcnVuLnJ0bCgpID8gY3VyciAtIDEgOiBjdXJyICsgMTsK
LSAgICAgICAgaWYgKGN1cnIgPT0gZW5kKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAg
Zm9udERhdGEgPSBuZXh0Rm9udERhdGE7Ci0gICAgICAgIGlzU21hbGxDYXBzID0gbmV4dElzU21h
bGxDYXBzOwotICAgICAgICBpbnQgaW5kZXggPSBjdXJyIC0gY3A7Ci0gICAgICAgIFVDaGFyIGMg
PSAqY3VycjsKLQotICAgICAgICBib29sIGZvcmNlU21hbGxDYXBzID0gaXNTbWFsbENhcHMgJiYg
KFVfR0VUX0dDX01BU0soYykgJiBVX0dDX01fTUFTSyk7Ci0gICAgICAgIG5leHRGb250RGF0YSA9
IG1fZm9udC5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoKmN1cnIsIGZhbHNlLCBmb3JjZVNtYWxsQ2Fw
cyA/IFNtYWxsQ2Fwc1ZhcmlhbnQgOiBBdXRvVmFyaWFudCkuZm9udDsKLSAgICAgICAgaWYgKG1f
Zm9udC5pc1NtYWxsQ2FwcygpKSB7Ci0gICAgICAgICAgICBuZXh0SXNTbWFsbENhcHMgPSBmb3Jj
ZVNtYWxsQ2FwcyB8fCAobmV3QyA9IHVfdG91cHBlcihjKSkgIT0gYzsKLSAgICAgICAgICAgIGlm
IChuZXh0SXNTbWFsbENhcHMpCi0gICAgICAgICAgICAgICAgc21hbGxDYXBzQnVmZmVyW2luZGV4
XSA9IGZvcmNlU21hbGxDYXBzID8gYyA6IG5ld0M7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
bV9mYWxsYmFja0ZvbnRzICYmIGZvbnREYXRhICYmIG5leHRGb250RGF0YSAhPSBmb250RGF0YSAm
JiBmb250RGF0YSAhPSAmbV9mb250LnByaW1hcnlGb250KCkpCi0gICAgICAgICAgICBtX2ZhbGxi
YWNrRm9udHMtPmFkZChmb250RGF0YSk7Ci0KLSAgICAgICAgaWYgKG5leHRGb250RGF0YSAhPSBm
b250RGF0YSB8fCBuZXh0SXNTbWFsbENhcHMgIT0gaXNTbWFsbENhcHMpIHsKLSAgICAgICAgICAg
IGludCBpdGVtU3RhcnQgPSBtX3J1bi5ydGwoKSA/IGluZGV4ICsgMSA6IGluZGV4T2ZGb250VHJh
bnNpdGlvbjsKLSAgICAgICAgICAgIGludCBpdGVtTGVuZ3RoID0gbV9ydW4ucnRsKCkgPyBpbmRl
eE9mRm9udFRyYW5zaXRpb24gLSBpbmRleCA6IGluZGV4IC0gaW5kZXhPZkZvbnRUcmFuc2l0aW9u
OwotICAgICAgICAgICAgbV9jdXJyZW50Q2hhcmFjdGVyID0gYmFzZUNoYXJhY3RlciArIGl0ZW1T
dGFydDsKLSAgICAgICAgICAgIGl0ZW1pemVTaGFwZUFuZFBsYWNlKChpc1NtYWxsQ2FwcyA/IHNt
YWxsQ2Fwc0J1ZmZlci5kYXRhKCkgOiBjcCkgKyBpdGVtU3RhcnQsIGl0ZW1TdGFydCwgaXRlbUxl
bmd0aCwgZm9udERhdGEsIGdseXBoQnVmZmVyKTsKLSAgICAgICAgICAgIGluZGV4T2ZGb250VHJh
bnNpdGlvbiA9IGluZGV4OwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIGludCBpdGVtTGVu
Z3RoID0gbV9ydW4ucnRsKCkgPyBpbmRleE9mRm9udFRyYW5zaXRpb24gKyAxIDogbGVuZ3RoIC0g
aW5kZXhPZkZvbnRUcmFuc2l0aW9uOwotICAgIGlmIChpdGVtTGVuZ3RoKSB7Ci0gICAgICAgIGlm
IChtX2ZhbGxiYWNrRm9udHMgJiYgbmV4dEZvbnREYXRhICYmIG5leHRGb250RGF0YSAhPSAmbV9m
b250LnByaW1hcnlGb250KCkpCi0gICAgICAgICAgICBtX2ZhbGxiYWNrRm9udHMtPmFkZChuZXh0
Rm9udERhdGEpOwotCi0gICAgICAgIGludCBpdGVtU3RhcnQgPSBtX3J1bi5ydGwoKSA/IDAgOiBp
bmRleE9mRm9udFRyYW5zaXRpb247Ci0gICAgICAgIG1fY3VycmVudENoYXJhY3RlciA9IGJhc2VD
aGFyYWN0ZXIgKyBpdGVtU3RhcnQ7Ci0gICAgICAgIGl0ZW1pemVTaGFwZUFuZFBsYWNlKChuZXh0
SXNTbWFsbENhcHMgPyBzbWFsbENhcHNCdWZmZXIuZGF0YSgpIDogY3ApICsgaXRlbVN0YXJ0LCBp
dGVtU3RhcnQsIGl0ZW1MZW5ndGgsIG5leHRGb250RGF0YSwgZ2x5cGhCdWZmZXIpOwotICAgIH0K
LQotICAgIG1fY3VycmVudENoYXJhY3RlciA9IGJhc2VDaGFyYWN0ZXIgKyBsZW5ndGg7Ci19Ci0K
LXZvaWQgVW5pc2NyaWJlQ29udHJvbGxlcjo6aXRlbWl6ZVNoYXBlQW5kUGxhY2UoY29uc3QgVUNo
YXIqIGNwLCB1bnNpZ25lZCBzdHJpbmdPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgRm9u
dCogZm9udERhdGEsIEdseXBoQnVmZmVyKiBnbHlwaEJ1ZmZlcikKLXsKLSAgICAvLyBTY3JpcHRJ
dGVtaXplIChpbiBXaW5kb3dzIFhQIHZlcnNpb25zIHByaW9yIHRvIFNQMikgY2FuIG92ZXJmbG93
IGJ5IDEuICBUaGlzIGlzIHdoeSB0aGVyZSBpcyBhbiBleHRyYSBlbXB0eSBpdGVtCi0gICAgLy8g
aGFuZ2luZyBvdXQgYXQgdGhlIGVuZCBvZiB0aGUgYXJyYXkKLSAgICBtX2l0ZW1zLnJlc2l6ZSg2
KTsKLSAgICBpbnQgbnVtSXRlbXMgPSAwOwotICAgIEhSRVNVTFQgcmMgPSBTX09LOwotICAgIHdo
aWxlIChyYyA9IDo6U2NyaXB0SXRlbWl6ZSh3Y2hhckZyb20oY3ApLCBsZW5ndGgsIG1faXRlbXMu
c2l6ZSgpIC0gMSwgJm1fY29udHJvbCwgJm1fc3RhdGUsIG1faXRlbXMuZGF0YSgpLCAmbnVtSXRl
bXMpID09IEVfT1VUT0ZNRU1PUlkpIHsKLSAgICAgICAgbV9pdGVtcy5yZXNpemUobV9pdGVtcy5z
aXplKCkgKiAyKTsKLSAgICAgICAgcmVzZXRDb250cm9sQW5kU3RhdGUoKTsKLSAgICB9Ci0gICAg
aWYgKEZBSUxFRChyYykpIHsKLSAgICAgICAgV1RGTG9nQWx3YXlzKCJVbmlzY3JpYmVDb250cm9s
bGVyOjppdGVtaXplU2hhcGVBbmRQbGFjZTogU2NyaXB0SXRlbWl6ZSBmYWlsZWQsIHJjPSVseCIs
IHJjKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtX2l0ZW1zLnJlc2l6ZShudW1JdGVt
cyArIDEpOwotCi0gICAgaWYgKG1fcnVuLnJ0bCgpKSB7Ci0gICAgICAgIGZvciAoaW50IGkgPSBt
X2l0ZW1zLnNpemUoKSAtIDI7IGkgPj0gMDsgaS0tKSB7Ci0gICAgICAgICAgICBpZiAoIXNoYXBl
QW5kUGxhY2VJdGVtKGNwLCBzdHJpbmdPZmZzZXQsIGksIGZvbnREYXRhLCBnbHlwaEJ1ZmZlcikp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1faXRlbXMuc2l6ZSgpIC0gMTsgaSsrKSB7Ci0g
ICAgICAgICAgICBpZiAoIXNoYXBlQW5kUGxhY2VJdGVtKGNwLCBzdHJpbmdPZmZzZXQsIGksIGZv
bnREYXRhLCBnbHlwaEJ1ZmZlcikpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0gICAgfQotfQotCi12b2lkIFVuaXNjcmliZUNvbnRyb2xsZXI6OnJlc2V0Q29udHJvbEFuZFN0
YXRlKCkKLXsKLSAgICBtZW1zZXQoJm1fY29udHJvbCwgMCwgc2l6ZW9mKFNDUklQVF9DT05UUk9M
KSk7Ci0gICAgbWVtc2V0KCZtX3N0YXRlLCAwLCBzaXplb2YoU0NSSVBUX1NUQVRFKSk7Ci0KLSAg
ICAvLyBTZXQgdXAgdGhlIGNvcnJlY3QgZGlyZWN0aW9uIGZvciB0aGUgcnVuLgotICAgIG1fc3Rh
dGUudUJpZGlMZXZlbCA9IG1fcnVuLnJ0bCgpOwotICAgIAotICAgIC8vIExvY2sgdGhlIGNvcnJl
Y3QgZGlyZWN0aW9uYWwgb3ZlcnJpZGUuCi0gICAgbV9zdGF0ZS5mT3ZlcnJpZGVEaXJlY3Rpb24g
PSBtX3J1bi5kaXJlY3Rpb25hbE92ZXJyaWRlKCk7Ci19Ci0KLWJvb2wgVW5pc2NyaWJlQ29udHJv
bGxlcjo6c2hhcGVBbmRQbGFjZUl0ZW0oY29uc3QgVUNoYXIqIGNwLCB1bnNpZ25lZCBzdHJpbmdP
ZmZzZXQsIHVuc2lnbmVkIGksIGNvbnN0IEZvbnQqIGZvbnREYXRhLCBHbHlwaEJ1ZmZlciogZ2x5
cGhCdWZmZXIpCi17Ci0gICAgLy8gRGV0ZXJtaW5lIHRoZSBzdHJpbmcgZm9yIHRoaXMgaXRlbS4K
LSAgICBjb25zdCBVQ2hhciogc3RyID0gY3AgKyBtX2l0ZW1zW2ldLmlDaGFyUG9zOwotICAgIGlu
dCBsZW4gPSBtX2l0ZW1zW2krMV0uaUNoYXJQb3MgLSBtX2l0ZW1zW2ldLmlDaGFyUG9zOwotICAg
IFNDUklQVF9JVEVNIGl0ZW0gPSBtX2l0ZW1zW2ldOwotCi0gICAgLy8gU2V0IHVwIGJ1ZmZlcnMg
dG8gaG9sZCB0aGUgcmVzdWx0cyBvZiBzaGFwaW5nIHRoZSBpdGVtLgotICAgIFZlY3RvcjxXT1JE
PiBnbHlwaHM7Ci0gICAgVmVjdG9yPFdPUkQ+IGNsdXN0ZXJzOwotICAgIFZlY3RvcjxTQ1JJUFRf
VklTQVRUUj4gdmlzdWFsQXR0cmlidXRlczsKLSAgICBjbHVzdGVycy5yZXNpemUobGVuKTsKLSAg
ICAgCi0gICAgLy8gU2hhcGUgdGhlIGl0ZW0uCi0gICAgLy8gVGhlIHJlY29tbWVuZGVkIHNpemUg
Zm9yIHRoZSBnbHlwaCBidWZmZXIgaXMgMS41ICogdGhlIGNoYXJhY3RlciBsZW5ndGggKyAxNiBp
biB0aGUgdW5pc2NyaWJlIGRvY3MuCi0gICAgLy8gQXBwYXJlbnRseSB0aGlzIGlzIGEgZ29vZCBz
aXplIHRvIGF2b2lkIGhhdmluZyB0byBtYWtlIHJlcGVhdGVkIGNhbGxzIHRvIFNjcmlwdFNoYXBl
LgotICAgIGdseXBocy5yZXNpemUoMS41ICogbGVuICsgMTYpOwotICAgIHZpc3VhbEF0dHJpYnV0
ZXMucmVzaXplKGdseXBocy5zaXplKCkpOwotCi0gICAgaWYgKCFzaGFwZShzdHIsIGxlbiwgaXRl
bSwgZm9udERhdGEsIGdseXBocywgY2x1c3RlcnMsIHZpc3VhbEF0dHJpYnV0ZXMpKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLQotICAgIFZlY3RvcjxPcHRpb25hbDx1bnNpZ25lZD4+IHN0cmluZ09m
ZnNldHMoZ2x5cGhzLnNpemUoKSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbjsg
KytpKSB7Ci0gICAgICAgIGlmIChzdHJpbmdPZmZzZXRzW2NsdXN0ZXJzW2ldXSkKLSAgICAgICAg
ICAgIHN0cmluZ09mZnNldHNbY2x1c3RlcnNbaV1dID0gc3RkOjptaW4oKnN0cmluZ09mZnNldHNb
Y2x1c3RlcnNbaV1dLCBpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3RyaW5nT2Zmc2V0
c1tjbHVzdGVyc1tpXV0gPSBpOwotICAgIH0KLQotICAgIC8vIFdlIG5vdyBoYXZlIGEgY29sbGVj
dGlvbiBvZiBnbHlwaHMuCi0gICAgVmVjdG9yPEdPRkZTRVQ+IG9mZnNldHM7Ci0gICAgVmVjdG9y
PGludD4gYWR2YW5jZXM7Ci0gICAgb2Zmc2V0cy5yZXNpemUoZ2x5cGhzLnNpemUoKSk7Ci0gICAg
YWR2YW5jZXMucmVzaXplKGdseXBocy5zaXplKCkpOwotICAgIEhSRVNVTFQgcGxhY2VSZXN1bHQg
PSBTY3JpcHRQbGFjZSgwLCBmb250RGF0YS0+c2NyaXB0Q2FjaGUoKSwgZ2x5cGhzLmRhdGEoKSwg
Z2x5cGhzLnNpemUoKSwgdmlzdWFsQXR0cmlidXRlcy5kYXRhKCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICZpdGVtLmEsIGFkdmFuY2VzLmRhdGEoKSwgb2Zmc2V0cy5k
YXRhKCksIDApOwotICAgIGlmIChwbGFjZVJlc3VsdCA9PSBFX1BFTkRJTkcpIHsKLSAgICAgICAg
Ly8gVGhlIHNjcmlwdCBjYWNoZSBpc24ndCBwcmltZWQgd2l0aCBlbm91Z2ggaW5mbyB5ZXQuICBX
ZSBuZWVkIHRvIHNlbGVjdCBvdXIgSEZPTlQgaW50bwotICAgICAgICAvLyBhIERDIGFuZCBwYXNz
IHRoZSBEQyBpbiB0byBTY3JpcHRQbGFjZS4KLSAgICAgICAgSFduZERDIGhkYygwKTsKLSAgICAg
ICAgSEZPTlQgaGZvbnQgPSBmb250RGF0YS0+cGxhdGZvcm1EYXRhKCkuaGZvbnQoKTsKLSAgICAg
ICAgSEZPTlQgb2xkRm9udCA9IChIRk9OVClTZWxlY3RPYmplY3QoaGRjLCBoZm9udCk7Ci0gICAg
ICAgIHBsYWNlUmVzdWx0ID0gU2NyaXB0UGxhY2UoaGRjLCBmb250RGF0YS0+c2NyaXB0Q2FjaGUo
KSwgZ2x5cGhzLmRhdGEoKSwgZ2x5cGhzLnNpemUoKSwgdmlzdWFsQXR0cmlidXRlcy5kYXRhKCks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJml0ZW0uYSwgYWR2YW5jZXMuZGF0
YSgpLCBvZmZzZXRzLmRhdGEoKSwgMCk7Ci0gICAgICAgIFNlbGVjdE9iamVjdChoZGMsIG9sZEZv
bnQpOwotICAgIH0KLSAgICAKLSAgICBpZiAoRkFJTEVEKHBsYWNlUmVzdWx0KSB8fCBnbHlwaHMu
aXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIENvbnZlcnQgYWxsIGNo
YXJzIHRoYXQgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgc3BhY2VzIHRvIHVzZSB0aGUgc3BhY2UgZ2x5
cGguCi0gICAgLy8gV2UgYWxzbyBjcmVhdGUgYSBtYXAgdGhhdCBhbGxvd3MgdXMgdG8gcXVpY2ts
eSBnbyBmcm9tIHNwYWNlIGdseXBocyBiYWNrIHRvIHRoZWlyIGNvcnJlc3BvbmRpbmcgY2hhcmFj
dGVycy4KLSAgICBWZWN0b3I8aW50PiBzcGFjZUNoYXJhY3RlcnMoZ2x5cGhzLnNpemUoKSk7Ci0g
ICAgc3BhY2VDaGFyYWN0ZXJzLmZpbGwoLTEpOwotCi0gICAgY29uc3QgZmxvYXQgY0xvZ2ljYWxT
Y2FsZSA9IGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS51c2VHREkoKSA/IDEuMGYgOiAzMi4wZjsK
LSAgICBmbG9hdCBzcGFjZVdpZHRoID0gZm9udERhdGEtPnNwYWNlV2lkdGgoKSAtIGZvbnREYXRh
LT5zeW50aGV0aWNCb2xkT2Zmc2V0KCk7Ci0gICAgdW5zaWduZWQgbG9naWNhbFNwYWNlV2lkdGgg
PSBzcGFjZVdpZHRoICogY0xvZ2ljYWxTY2FsZTsKLQotICAgIGZvciAoaW50IGsgPSAwOyBrIDwg
bGVuOyBrKyspIHsKLSAgICAgICAgVUNoYXIgY2ggPSAqKHN0ciArIGspOwotICAgICAgICBib29s
IHRyZWF0QXNTcGFjZSA9IEZvbnRDYXNjYWRlOjp0cmVhdEFzU3BhY2UoY2gpOwotICAgICAgICBi
b29sIHRyZWF0QXNaZXJvV2lkdGhTcGFjZSA9IEZvbnRDYXNjYWRlOjp0cmVhdEFzWmVyb1dpZHRo
U3BhY2UoY2gpOwotICAgICAgICBpZiAodHJlYXRBc1NwYWNlIHx8IHRyZWF0QXNaZXJvV2lkdGhT
cGFjZSkgewotICAgICAgICAgICAgLy8gU3Vic3RpdHV0ZSBpbiB0aGUgc3BhY2UgZ2x5cGggYXQg
dGhlIGFwcHJvcHJpYXRlIHBsYWNlIGluIHRoZSBnbHlwaHMKLSAgICAgICAgICAgIC8vIGFycmF5
LgotICAgICAgICAgICAgZ2x5cGhzW2NsdXN0ZXJzW2tdXSA9IGZvbnREYXRhLT5zcGFjZUdseXBo
KCk7Ci0gICAgICAgICAgICBhZHZhbmNlc1tjbHVzdGVyc1trXV0gPSB0cmVhdEFzU3BhY2UgPyBs
b2dpY2FsU3BhY2VXaWR0aCA6IDA7Ci0gICAgICAgICAgICBpZiAodHJlYXRBc1NwYWNlKQotICAg
ICAgICAgICAgICAgIHNwYWNlQ2hhcmFjdGVyc1tjbHVzdGVyc1trXV0gPSBtX2N1cnJlbnRDaGFy
YWN0ZXIgKyBrICsgaXRlbS5pQ2hhclBvczsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFBv
cHVsYXRlIG91ciBnbHlwaCBidWZmZXIgd2l0aCB0aGlzIGluZm9ybWF0aW9uLgotICAgIGJvb2wg
aGFzRXh0cmFTcGFjaW5nID0gbV9mb250LmxldHRlclNwYWNpbmcoKSB8fCBtX2ZvbnQud29yZFNw
YWNpbmcoKSB8fCBtX3BhZGRpbmc7Ci0gICAgCi0gICAgZmxvYXQgbGVmdEVkZ2UgPSBtX3J1bldp
ZHRoU29GYXI7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgZ2x5cGhzLnNpemUoKTsg
aysrKSB7Ci0gICAgICAgIEdseXBoIGdseXBoID0gZ2x5cGhzW2tdOwotICAgICAgICBmbG9hdCBh
ZHZhbmNlID0gYWR2YW5jZXNba10gLyBjTG9naWNhbFNjYWxlOwotICAgICAgICBmbG9hdCBvZmZz
ZXRYID0gb2Zmc2V0c1trXS5kdSAvIGNMb2dpY2FsU2NhbGU7Ci0gICAgICAgIGZsb2F0IG9mZnNl
dFkgPSBvZmZzZXRzW2tdLmR2IC8gY0xvZ2ljYWxTY2FsZTsKLQotICAgICAgICAvLyBNYXRjaCBB
cHBLaXQncyBydWxlcyBmb3IgdGhlIGludGVnZXIgdnMuIG5vbi1pbnRlZ2VyIHJlbmRlcmluZyBt
b2Rlcy4KLSAgICAgICAgZmxvYXQgcm91bmRlZEFkdmFuY2UgPSByb3VuZGYoYWR2YW5jZSk7Ci0g
ICAgICAgIGlmICghZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLmlzU3lzdGVtRm9udCgpKSB7Ci0g
ICAgICAgICAgICBhZHZhbmNlID0gcm91bmRlZEFkdmFuY2U7Ci0gICAgICAgICAgICBvZmZzZXRY
ID0gcm91bmRmKG9mZnNldFgpOwotICAgICAgICAgICAgb2Zmc2V0WSA9IHJvdW5kZihvZmZzZXRZ
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGFkdmFuY2UgKz0gZm9udERhdGEtPnN5bnRoZXRpY0Jv
bGRPZmZzZXQoKTsKLQotICAgICAgICBpZiAoaGFzRXh0cmFTcGFjaW5nKSB7Ci0gICAgICAgICAg
ICAvLyBJZiB3ZSdyZSBhIGdseXBoIHdpdGggYW4gYWR2YW5jZSwgZ28gYWhlYWQgYW5kIGFkZCBp
biBsZXR0ZXItc3BhY2luZy4KLSAgICAgICAgICAgIC8vIFRoYXQgd2F5IHdlIHdlZWQgb3V0IHpl
cm8gd2lkdGggbHVya2Vycy4gIFRoaXMgYmVoYXZpb3IgbWF0Y2hlcyB0aGUgZmFzdCB0ZXh0IGNv
ZGUgcGF0aC4KLSAgICAgICAgICAgIGlmIChhZHZhbmNlICYmIG1fZm9udC5sZXR0ZXJTcGFjaW5n
KCkpCi0gICAgICAgICAgICAgICAgYWR2YW5jZSArPSBtX2ZvbnQubGV0dGVyU3BhY2luZygpOwot
Ci0gICAgICAgICAgICAvLyBIYW5kbGUganVzdGlmaWNhdGlvbiBhbmQgd29yZC1zcGFjaW5nLgot
ICAgICAgICAgICAgaW50IGNoYXJhY3RlckluZGV4ID0gc3BhY2VDaGFyYWN0ZXJzW2tdOwotICAg
ICAgICAgICAgLy8gY2hhcmFjdGVySW5kZXggaXMgbGVmdCBhdCB0aGUgaW5pdGlhbCB2YWx1ZSBv
ZiAtMSBmb3IgZ2x5cGhzIHRoYXQgZG8gbm90IG1hcCBiYWNrIHRvIHRyZWF0ZWQtYXMtc3BhY2Ug
Y2hhcmFjdGVycy4KLSAgICAgICAgICAgIGlmIChjaGFyYWN0ZXJJbmRleCAhPSAtMSkgewotICAg
ICAgICAgICAgICAgIC8vIEFjY291bnQgZm9yIHBhZGRpbmcuIFdlYkNvcmUgdXNlcyBzcGFjZSBw
YWRkaW5nIHRvIGp1c3RpZnkgdGV4dC4KLSAgICAgICAgICAgICAgICAvLyBXZSBkaXN0cmlidXRl
IHRoZSBzcGVjaWZpZWQgcGFkZGluZyBvdmVyIHRoZSBhdmFpbGFibGUgc3BhY2VzIGluIHRoZSBy
dW4uCi0gICAgICAgICAgICAgICAgaWYgKG1fcGFkZGluZykgewotICAgICAgICAgICAgICAgICAg
ICAvLyBVc2UgbGVmdG92ZXIgcGFkZGluZyBpZiBub3QgZXZlbmx5IGRpdmlzaWJsZSBieSBudW1i
ZXIgb2Ygc3BhY2VzLgotICAgICAgICAgICAgICAgICAgICBpZiAobV9wYWRkaW5nIDwgbV9wYWRQ
ZXJTcGFjZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgYWR2YW5jZSArPSBtX3BhZGRpbmc7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX3BhZGRpbmcgPSAwOwotICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgbV9wYWRkaW5nIC09IG1fcGFk
UGVyU3BhY2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhZHZhbmNlICs9IG1fcGFkUGVyU3Bh
Y2U7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICAvLyBBY2NvdW50IGZvciB3b3JkLXNwYWNpbmcuCi0gICAgICAgICAgICAgICAgaWYg
KGNoYXJhY3RlckluZGV4ID4gMCAmJiBtX2ZvbnQud29yZFNwYWNpbmcoKSkgewotICAgICAgICAg
ICAgICAgICAgICBVQ2hhciBjYW5kaWRhdGVTcGFjZTsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KG1fcnVuLmlzOEJpdCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgY2FuZGlkYXRlU3BhY2Ug
PSAqKG1fcnVuLmRhdGE4KGNoYXJhY3RlckluZGV4IC0gMSkpOwotICAgICAgICAgICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGVTcGFjZSA9ICoobV9ydW4u
ZGF0YTE2KGNoYXJhY3RlckluZGV4IC0gMSkpOwotCi0gICAgICAgICAgICAgICAgICAgIGlmICgh
Rm9udENhc2NhZGU6OnRyZWF0QXNTcGFjZShjYW5kaWRhdGVTcGFjZSkpCi0gICAgICAgICAgICAg
ICAgICAgICAgICBhZHZhbmNlICs9IG1fZm9udC53b3JkU3BhY2luZygpOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIG1fcnVuV2lkdGhTb0Zh
ciArPSBhZHZhbmNlOwotCi0gICAgICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIHRha2UgdGhlIEdP
RkZTRVRTIGZvciBjb21iaW5pbmcgZ2x5cGhzIGFuZCBzdG9yZSB0aGVtIGluIHRoZSBnbHlwaCBi
dWZmZXIKLSAgICAgICAgLy8gYXMgd2VsbCwgc28gdGhhdCB3aGVuIHRoZSB0aW1lIGNvbWVzIHRv
IGRyYXcgdGhvc2UgZ2x5cGhzLCB3ZSBjYW4gYXBwbHkgdGhlIGFwcHJvcHJpYXRlCi0gICAgICAg
IC8vIHRyYW5zbGF0aW9uLgotICAgICAgICBpZiAoZ2x5cGhCdWZmZXIpIHsKLSAgICAgICAgICAg
IEdseXBoQnVmZmVyQWR2YW5jZSBvcmlnaW4ob2Zmc2V0WCwgLW9mZnNldFkpOwotICAgICAgICAg
ICAgaWYgKCFnbHlwaEJ1ZmZlci0+YWR2YW5jZXNDb3VudCgpKQotICAgICAgICAgICAgICAgIGds
eXBoQnVmZmVyLT5zZXRJbml0aWFsQWR2YW5jZShvcmlnaW4pOwotICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgIGdseXBoQnVmZmVyLT5leHBhbmRMYXN0QWR2YW5jZShvcmlnaW4pOwot
ICAgICAgICAgICAgR2x5cGhCdWZmZXJBZHZhbmNlIGdseXBoQWR2YW5jZSgtb3JpZ2luLndpZHRo
KCkgKyBhZHZhbmNlLCAtb3JpZ2luLmhlaWdodCgpKTsKLSAgICAgICAgICAgIGdseXBoQnVmZmVy
LT5hZGQoZ2x5cGgsIGZvbnREYXRhLCBnbHlwaEFkdmFuY2UsIHN0cmluZ09mZnNldHNba10udmFs
dWVPcigwKSArIHN0cmluZ09mZnNldCk7Ci0gICAgICAgIH0KLQotICAgICAgICBGbG9hdFJlY3Qg
Z2x5cGhCb3VuZHMgPSBmb250RGF0YS0+Ym91bmRzRm9yR2x5cGgoZ2x5cGgpOwotICAgICAgICBn
bHlwaEJvdW5kcy5tb3ZlKG1fZ2x5cGhPcmlnaW4ueCgpLCBtX2dseXBoT3JpZ2luLnkoKSk7Ci0g
ICAgICAgIG1fbWluR2x5cGhCb3VuZGluZ0JveFggPSBzdGQ6Om1pbihtX21pbkdseXBoQm91bmRp
bmdCb3hYLCBnbHlwaEJvdW5kcy54KCkpOwotICAgICAgICBtX21heEdseXBoQm91bmRpbmdCb3hY
ID0gc3RkOjptYXgobV9tYXhHbHlwaEJvdW5kaW5nQm94WCwgZ2x5cGhCb3VuZHMubWF4WCgpKTsK
LSAgICAgICAgbV9taW5HbHlwaEJvdW5kaW5nQm94WSA9IHN0ZDo6bWluKG1fbWluR2x5cGhCb3Vu
ZGluZ0JveFksIGdseXBoQm91bmRzLnkoKSk7Ci0gICAgICAgIG1fbWF4R2x5cGhCb3VuZGluZ0Jv
eFkgPSBzdGQ6Om1heChtX21heEdseXBoQm91bmRpbmdCb3hZLCBnbHlwaEJvdW5kcy5tYXhZKCkp
OwotICAgICAgICBtX2dseXBoT3JpZ2luLm1vdmUoYWR2YW5jZSArIG9mZnNldFgsIC1vZmZzZXRZ
KTsKLQotICAgICAgICAvLyBNdXRhdGUgdGhlIGdseXBoIGFycmF5IHRvIGNvbnRhaW4gb3VyIGFs
dGVyZWQgYWR2YW5jZXMuCi0gICAgICAgIGlmIChtX2NvbXB1dGluZ09mZnNldFBvc2l0aW9uKQot
ICAgICAgICAgICAgYWR2YW5jZXNba10gPSBhZHZhbmNlOwotICAgIH0KLQotICAgIHdoaWxlICht
X2NvbXB1dGluZ09mZnNldFBvc2l0aW9uICYmIG1fb2Zmc2V0WCA+PSBsZWZ0RWRnZSAmJiBtX29m
ZnNldFggPCBtX3J1bldpZHRoU29GYXIpIHsKLSAgICAgICAgLy8gVGhlIHBvc2l0aW9uIGlzIHNv
bWV3aGVyZSBpbnNpZGUgdGhpcyBydW4uCi0gICAgICAgIGludCB0cmFpbGluZyA9IDA7Ci0gICAg
ICAgIEhSRVNVTFQgcmMgPSA6OlNjcmlwdFh0b0NQKG1fb2Zmc2V0WCAtIGxlZnRFZGdlLCBjbHVz
dGVycy5zaXplKCksIGdseXBocy5zaXplKCksIGNsdXN0ZXJzLmRhdGEoKSwgdmlzdWFsQXR0cmli
dXRlcy5kYXRhKCksCi0gICAgICAgICAgICAgICAgICAgIGFkdmFuY2VzLmRhdGEoKSwgJml0ZW0u
YSwgJm1fb2Zmc2V0UG9zaXRpb24sICZ0cmFpbGluZyk7Ci0gICAgICAgIGlmIChGQUlMRUQocmMp
KSB7Ci0gICAgICAgICAgICBXVEZMb2dBbHdheXMoIlVuaXNjcmliZUNvbnRyb2xsZXI6OnNoYXBl
QW5kUGxhY2VJdGVtOiBTY3JpcHRYdG9DUCBmYWlsZWQgcmM9JWx4IiwgcmMpOwotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHRyYWlsaW5nICYmIG1faW5j
bHVkZVBhcnRpYWxHbHlwaHMgJiYgbV9vZmZzZXRQb3NpdGlvbiA8IGxlbiAtIDEpIHsKLSAgICAg
ICAgICAgIG1fb2Zmc2V0UG9zaXRpb24gKz0gbV9jdXJyZW50Q2hhcmFjdGVyICsgbV9pdGVtc1tp
XS5pQ2hhclBvczsKLSAgICAgICAgICAgIG1fb2Zmc2V0WCArPSBtX3J1bi5ydGwoKSA/IC10cmFp
bGluZyA6IHRyYWlsaW5nOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbV9jb21wdXRp
bmdPZmZzZXRQb3NpdGlvbiA9IGZhbHNlOwotICAgICAgICAgICAgbV9vZmZzZXRQb3NpdGlvbiAr
PSBtX2N1cnJlbnRDaGFyYWN0ZXIgKyBtX2l0ZW1zW2ldLmlDaGFyUG9zOwotICAgICAgICAgICAg
aWYgKHRyYWlsaW5nICYmIG1faW5jbHVkZVBhcnRpYWxHbHlwaHMpCi0gICAgICAgICAgICAgICBt
X29mZnNldFBvc2l0aW9uKys7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBVbmlzY3JpYmVDb250cm9sbGVy
OjpzaGFwZShjb25zdCBVQ2hhciogc3RyLCBpbnQgbGVuLCBTQ1JJUFRfSVRFTSBpdGVtLCBjb25z
dCBGb250KiBmb250RGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9y
PFdPUkQ+JiBnbHlwaHMsIFZlY3RvcjxXT1JEPiYgY2x1c3RlcnMsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFZlY3RvcjxTQ1JJUFRfVklTQVRUUj4mIHZpc3VhbEF0dHJpYnV0ZXMp
Ci17Ci0gICAgSFduZERDIGhkYzsKLSAgICBIRk9OVCBvbGRGb250ID0gMDsKLSAgICBIUkVTVUxU
IHNoYXBlUmVzdWx0ID0gRV9QRU5ESU5HOwotICAgIGludCBnbHlwaENvdW50ID0gMDsKLQotICAg
IGlmICghZm9udERhdGEpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGRvIHsKLSAgICAg
ICAgc2hhcGVSZXN1bHQgPSBTY3JpcHRTaGFwZShoZGMsIGZvbnREYXRhLT5zY3JpcHRDYWNoZSgp
LCB3Y2hhckZyb20oc3RyKSwgbGVuLCBnbHlwaHMuc2l6ZSgpLCAmaXRlbS5hLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBocy5kYXRhKCksIGNsdXN0ZXJzLmRhdGEoKSwg
dmlzdWFsQXR0cmlidXRlcy5kYXRhKCksICZnbHlwaENvdW50KTsKLSAgICAgICAgaWYgKHNoYXBl
UmVzdWx0ID09IEVfUEVORElORykgewotICAgICAgICAgICAgLy8gVGhlIHNjcmlwdCBjYWNoZSBp
c24ndCBwcmltZWQgd2l0aCBlbm91Z2ggaW5mbyB5ZXQuICBXZSBuZWVkIHRvIHNlbGVjdCBvdXIg
SEZPTlQgaW50bwotICAgICAgICAgICAgLy8gYSBEQyBhbmQgcGFzcyB0aGUgREMgaW4gdG8gU2Ny
aXB0U2hhcGUuCi0gICAgICAgICAgICBBU1NFUlQoIWhkYyk7Ci0gICAgICAgICAgICBoZGMuc2V0
SFduZCgwKTsKLSAgICAgICAgICAgIEhGT05UIGhmb250ID0gZm9udERhdGEtPnBsYXRmb3JtRGF0
YSgpLmhmb250KCk7Ci0gICAgICAgICAgICBvbGRGb250ID0gKEhGT05UKVNlbGVjdE9iamVjdCho
ZGMsIGhmb250KTsKLSAgICAgICAgfSBlbHNlIGlmIChzaGFwZVJlc3VsdCA9PSBFX09VVE9GTUVN
T1JZKSB7Ci0gICAgICAgICAgICAvLyBOZWVkIHRvIHJlc2l6ZSBvdXIgYnVmZmVycy4KLSAgICAg
ICAgICAgIGdseXBocy5yZXNpemUoZ2x5cGhzLnNpemUoKSAqIDIpOwotICAgICAgICAgICAgdmlz
dWFsQXR0cmlidXRlcy5yZXNpemUoZ2x5cGhzLnNpemUoKSk7Ci0gICAgICAgIH0KLSAgICB9IHdo
aWxlIChzaGFwZVJlc3VsdCA9PSBFX1BFTkRJTkcgfHwgc2hhcGVSZXN1bHQgPT0gRV9PVVRPRk1F
TU9SWSk7Ci0KLSAgICBpZiAoaGRjKQotICAgICAgICBTZWxlY3RPYmplY3QoaGRjLCBvbGRGb250
KTsKLQotICAgIGlmIChGQUlMRUQoc2hhcGVSZXN1bHQpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBnbHlwaHMuc2hyaW5rKGdseXBoQ291bnQpOwotICAgIHZpc3VhbEF0dHJpYnV0ZXMu
c2hyaW5rKGdseXBoQ291bnQpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLX0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9VbmlzY3JpYmVDb250cm9s
bGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vVW5pc2NyaWJlQ29u
dHJvbGxlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNDYyNGM3OWEwOC4uMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1VuaXNj
cmliZUNvbnRyb2xsZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDkwICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFVuaXNjcmliZUNvbnRyb2xsZXJfaAotI2Rl
ZmluZSBVbmlzY3JpYmVDb250cm9sbGVyX2gKLQotI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCi0j
aW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKLSNpbmNsdWRlIDx1c3AxMC5oPgotI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBVbmlzY3JpYmVDb250
cm9sbGVyIHsKLXB1YmxpYzoKLSAgICBVbmlzY3JpYmVDb250cm9sbGVyKGNvbnN0IEZvbnRDYXNj
YWRlKiwgY29uc3QgVGV4dFJ1biYsIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRz
ID0gMCk7Ci0KLSAgICAvLyBBZHZhbmNlIGFuZCBtZWFzdXJlL3BsYWNlIHVwIHRvIHRoZSBzcGVj
aWZpZWQgY2hhcmFjdGVyLgotICAgIHZvaWQgYWR2YW5jZSh1bnNpZ25lZCB0bywgR2x5cGhCdWZm
ZXIqID0gMCk7Ci0KLSAgICAvLyBDb21wdXRlIHRoZSBjaGFyYWN0ZXIgb2Zmc2V0IGZvciBhIGdp
dmVuIHggY29vcmRpbmF0ZS4KLSAgICBpbnQgb2Zmc2V0Rm9yUG9zaXRpb24oaW50IHgsIGJvb2wg
aW5jbHVkZVBhcnRpYWxHbHlwaHMpOwotCi0gICAgLy8gUmV0dXJucyB0aGUgd2lkdGggb2YgZXZl
cnl0aGluZyB3ZSd2ZSBjb25zdW1lZCBzbyBmYXIuCi0gICAgZmxvYXQgcnVuV2lkdGhTb0Zhcigp
IGNvbnN0IHsgcmV0dXJuIG1fcnVuV2lkdGhTb0ZhcjsgfQotCi0gICAgZmxvYXQgbWluR2x5cGhC
b3VuZGluZ0JveFgoKSBjb25zdCB7IHJldHVybiBtX21pbkdseXBoQm91bmRpbmdCb3hYOyB9Ci0g
ICAgZmxvYXQgbWF4R2x5cGhCb3VuZGluZ0JveFgoKSBjb25zdCB7IHJldHVybiBtX21heEdseXBo
Qm91bmRpbmdCb3hYOyB9Ci0gICAgZmxvYXQgbWluR2x5cGhCb3VuZGluZ0JveFkoKSBjb25zdCB7
IHJldHVybiBtX21pbkdseXBoQm91bmRpbmdCb3hZOyB9Ci0gICAgZmxvYXQgbWF4R2x5cGhCb3Vu
ZGluZ0JveFkoKSBjb25zdCB7IHJldHVybiBtX21heEdseXBoQm91bmRpbmdCb3hZOyB9Ci0KLXBy
aXZhdGU6ICAgIAotICAgIHZvaWQgcmVzZXRDb250cm9sQW5kU3RhdGUoKTsKLQotICAgIHZvaWQg
aXRlbWl6ZVNoYXBlQW5kUGxhY2UoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBzdHJpbmdPZmZzZXQs
IHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgRm9udCosIEdseXBoQnVmZmVyKik7Ci0gICAgYm9vbCBz
aGFwZUFuZFBsYWNlSXRlbShjb25zdCBVQ2hhciosIHVuc2lnbmVkIHN0cmluZ09mZnNldCwgdW5z
aWduZWQgaW5kZXgsIGNvbnN0IEZvbnQqLCBHbHlwaEJ1ZmZlciopOwotICAgIGJvb2wgc2hhcGUo
Y29uc3QgVUNoYXIqIHN0ciwgaW50IGxlbiwgU0NSSVBUX0lURU0sIGNvbnN0IEZvbnQqLAotICAg
ICAgICAgICAgICAgVmVjdG9yPFdPUkQ+JiBnbHlwaHMsIFZlY3RvcjxXT1JEPiYgY2x1c3RlcnMs
Ci0gICAgICAgICAgICAgICBWZWN0b3I8U0NSSVBUX1ZJU0FUVFI+JiB2aXN1YWxBdHRyaWJ1dGVz
KTsKLQotICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBtX2ZvbnQ7Ci0gICAgY29uc3QgVGV4dFJ1biYg
bV9ydW47Ci0gICAgSGFzaFNldDxjb25zdCBGb250Kj4qIG1fZmFsbGJhY2tGb250czsKLSAgICBG
bG9hdFBvaW50IG1fZ2x5cGhPcmlnaW47Ci0gICAgZmxvYXQgbV9taW5HbHlwaEJvdW5kaW5nQm94
WDsKLSAgICBmbG9hdCBtX21heEdseXBoQm91bmRpbmdCb3hYOwotICAgIGZsb2F0IG1fbWluR2x5
cGhCb3VuZGluZ0JveFk7Ci0gICAgZmxvYXQgbV9tYXhHbHlwaEJvdW5kaW5nQm94WTsKLQotICAg
IFNDUklQVF9DT05UUk9MIG1fY29udHJvbDsKLSAgICBTQ1JJUFRfU1RBVEUgbV9zdGF0ZTsKLSAg
ICBWZWN0b3I8U0NSSVBUX0lURU0+IG1faXRlbXM7Ci0gCi0gICAgdW5zaWduZWQgbV9jdXJyZW50
Q2hhcmFjdGVyOwotICAgIGludCBtX2VuZDsKLQotICAgIGZsb2F0IG1fcnVuV2lkdGhTb0ZhcjsK
LSAgICBmbG9hdCBtX3BhZGRpbmc7Ci0gICAgZmxvYXQgbV9wYWRQZXJTcGFjZTsKLQotICAgIGJv
b2wgbV9jb21wdXRpbmdPZmZzZXRQb3NpdGlvbjsKLSAgICBib29sIG1faW5jbHVkZVBhcnRpYWxH
bHlwaHM7Ci0gICAgZmxvYXQgbV9vZmZzZXRYOwotICAgIGludCBtX29mZnNldFBvc2l0aW9uOwot
fTsKLQotfQotI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>385485</attachid>
            <date>2019-12-12 01:06:27 -0800</date>
            <delta_ts>2019-12-12 23:11:26 -0800</delta_ts>
            <desc>WIP patch</desc>
            <filename>a.diff</filename>
            <type>text/plain</type>
            <size>47508</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luLmNtYWtlIGIvU291cmNlL1dl
YkNvcmUvUGxhdGZvcm1XaW4uY21ha2UKaW5kZXggZDFmZDRlYjEyZGQuLmRlODZmZDNhMDQxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbi5jbWFrZQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9QbGF0Zm9ybVdpbi5jbWFrZQpAQCAtNTEsNiArNTEsNyBAQCBsaXN0KEFQUEVORCBX
ZWJDb3JlX1NPVVJDRVMKIAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db2xvckRpcmVjdDJE
LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db21wbGV4VGV4dENvbnRyb2xsZXJEaXJl
Y3RXcml0ZS5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vQ29tcGxleFRleHRDb250cm9s
bGVyVW5pc2NyaWJlLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9ESUJQaXhlbERhdGEu
Y3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Zsb2F0UG9pbnREaXJlY3QyRC5jcHAKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRmxvYXRSZWN0RGlyZWN0MkQuY3BwCkBAIC02OSw3ICs3
MCw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9TaW1wbGVGb250RGF0YVdpbi5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vVHJh
bnNmb3JtYXRpb25NYXRyaXhEaXJlY3QyRC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
VHJhbnNmb3JtYXRpb25NYXRyaXhXaW4uY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1Vu
aXNjcmliZUNvbnRyb2xsZXIuY3BwCiAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL3dpbi9Eb3dubG9h
ZEJ1bmRsZVdpbi5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL3dpbi9OZXR3b3JrU3RhdGVOb3Rp
Zmllcldpbi5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwCmluZGV4IDg0NzI4NDllYWQwLi4xODcxOGRl
OTVkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29tcGxl
eFRleHRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwCkBAIC00MywzMyArNDMsNiBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLSNpZiBQTEFURk9STShXSU4pICYmICFVU0UoRElSRUNUMkQpCi0KLWNs
YXNzIFRleHRMYXlvdXQgewotfTsKLQotdm9pZCBUZXh0TGF5b3V0RGVsZXRlcjo6b3BlcmF0b3Io
KShUZXh0TGF5b3V0KikgY29uc3QKLXsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPFRleHRMYXlvdXQs
IFRleHRMYXlvdXREZWxldGVyPiBGb250Q2FzY2FkZTo6Y3JlYXRlTGF5b3V0KFJlbmRlclRleHQm
LCBmbG9hdCwgYm9vbCkgY29uc3QKLXsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotZmxvYXQg
Rm9udENhc2NhZGU6OndpZHRoKFRleHRMYXlvdXQmLCB1bnNpZ25lZCwgdW5zaWduZWQsIEhhc2hT
ZXQ8Y29uc3QgRm9udCo+KikKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1
cm4gMDsKLX0KLQotdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmNvbGxlY3RDb21wbGV4VGV4
dFJ1bnNGb3JDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQsIHVuc2lnbmVkLCBjb25z
dCBGb250KikKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotI2Vsc2UKLQogY2xh
c3MgVGV4dExheW91dCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CkBA
IC04OTMsNiArODY2LDQgQEAgQ29tcGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4dFJ1bjo6
Q29tcGxleFRleHRSdW4oY29uc3QgVmVjdG9yPEZsb2F0U2l6ZT4mIGEKIHsKIH0KIAotI2VuZGlm
Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcAppbmRleCA0MTI3NDdhY2Y4Yy4uM2YxMDRlYzBjN2Ig
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5j
cHAKQEAgLTQxLDEwICs0MSw2IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0cmluZ0hhc2gu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKLSNpZiBQTEFURk9STShX
SU4pICYmICFVU0UoRElSRUNUMkQpCi0jaW5jbHVkZSAiVW5pc2NyaWJlQ29udHJvbGxlci5oIgot
I2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIFdURjo6VW5p
Y29kZTsKQEAgLTM1MCwxNSArMzQ2LDYgQEAgZmxvYXQgRm9udENhc2NhZGU6OndpZHRoT2ZUZXh0
UmFuZ2UoY29uc3QgVGV4dFJ1biYgcnVuLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZAogCiAgICAg
YXV0byBjb2RlUGF0aFRvVXNlID0gY29kZVBhdGgocnVuKTsKICAgICBpZiAoY29kZVBhdGhUb1Vz
ZSA9PSBDb21wbGV4KSB7Ci0jaWYgUExBVEZPUk0oV0lOKSAmJiAhVVNFKERJUkVDVDJEKQotICAg
ICAgICBVbmlzY3JpYmVDb250cm9sbGVyIGl0KHRoaXMsIHJ1bik7Ci0gICAgICAgIGl0LmFkdmFu
Y2UoZnJvbSk7Ci0gICAgICAgIG9mZnNldEJlZm9yZVJhbmdlID0gaXQucnVuV2lkdGhTb0Zhcigp
OwotICAgICAgICBpdC5hZHZhbmNlKHRvKTsKLSAgICAgICAgb2Zmc2V0QWZ0ZXJSYW5nZSA9IGl0
LnJ1bldpZHRoU29GYXIoKTsKLSAgICAgICAgaXQuYWR2YW5jZSh0byk7Ci0gICAgICAgIHRvdGFs
V2lkdGggPSBpdC5ydW5XaWR0aFNvRmFyKCk7Ci0jZWxzZQogICAgICAgICBDb21wbGV4VGV4dENv
bnRyb2xsZXIgY29tcGxleEl0ZXJhdG9yKCp0aGlzLCBydW4sIGZhbHNlLCBmYWxsYmFja0ZvbnRz
KTsKICAgICAgICAgY29tcGxleEl0ZXJhdG9yLmFkdmFuY2UoZnJvbSwgbnVsbHB0ciwgSW5jbHVk
ZVBhcnRpYWxHbHlwaHMsIGZhbGxiYWNrRm9udHMpOwogICAgICAgICBvZmZzZXRCZWZvcmVSYW5n
ZSA9IGNvbXBsZXhJdGVyYXRvci5ydW5XaWR0aFNvRmFyKCk7CkBAIC0zNjYsNyArMzUzLDYgQEAg
ZmxvYXQgRm9udENhc2NhZGU6OndpZHRoT2ZUZXh0UmFuZ2UoY29uc3QgVGV4dFJ1biYgcnVuLCB1
bnNpZ25lZCBmcm9tLCB1bnNpZ25lZAogICAgICAgICBvZmZzZXRBZnRlclJhbmdlID0gY29tcGxl
eEl0ZXJhdG9yLnJ1bldpZHRoU29GYXIoKTsKICAgICAgICAgY29tcGxleEl0ZXJhdG9yLmFkdmFu
Y2UocnVuLmxlbmd0aCgpLCBudWxscHRyLCBJbmNsdWRlUGFydGlhbEdseXBocywgZmFsbGJhY2tG
b250cyk7CiAgICAgICAgIHRvdGFsV2lkdGggPSBjb21wbGV4SXRlcmF0b3IucnVuV2lkdGhTb0Zh
cigpOwotI2VuZGlmCiAgICAgfSBlbHNlIHsKICAgICAgICAgV2lkdGhJdGVyYXRvciBzaW1wbGVJ
dGVyYXRvcih0aGlzLCBydW4sIGZhbGxiYWNrRm9udHMpOwogICAgICAgICBzaW1wbGVJdGVyYXRv
ci5hZHZhbmNlKGZyb20sIG51bGxwdHIpOwpAQCAtMTM5Nyw3ICsxMzgzLDYgQEAgZmxvYXQgRm9u
dENhc2NhZGU6OmdldEdseXBoc0FuZEFkdmFuY2VzRm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVu
JiBydW4sIHVuc2lnbmUKICAgICByZXR1cm4gaW5pdGlhbEFkdmFuY2U7CiB9CiAKLSNpZiAhUExB
VEZPUk0oV0lOKSB8fCBVU0UoRElSRUNUMkQpCiBmbG9hdCBGb250Q2FzY2FkZTo6Z2V0R2x5cGhz
QW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIHVuc2lnbmVkIGZy
b20sIHVuc2lnbmVkIHRvLCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIEZvclRleHRFbXBoYXNp
c09yTm90IGZvclRleHRFbXBoYXNpcykgY29uc3QKIHsKICAgICBmbG9hdCBpbml0aWFsQWR2YW5j
ZTsKQEAgLTE0MjcsNyArMTQxMiw2IEBAIGZsb2F0IEZvbnRDYXNjYWRlOjpnZXRHbHlwaHNBbmRB
ZHZhbmNlc0ZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgdW5zaWduCiAKICAgICBy
ZXR1cm4gaW5pdGlhbEFkdmFuY2U7CiB9Ci0jZW5kaWYKIAogdm9pZCBGb250Q2FzY2FkZTo6ZHJh
d0VtcGhhc2lzTWFya3NGb3JTaW1wbGVUZXh0KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29u
c3QgVGV4dFJ1biYgcnVuLCBjb25zdCBBdG9tU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50
JiBwb2ludCwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8pIGNvbnN0CiB7CkBAIC0xNTQ1LDcg
KzE1MjksNiBAQCBmbG9hdCBGb250Q2FzY2FkZTo6ZmxvYXRXaWR0aEZvclNpbXBsZVRleHQoY29u
c3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IEZvbgogICAgIHJldHVybiBpdC5tX3J1bldp
ZHRoU29GYXI7CiB9CiAKLSNpZiAhUExBVEZPUk0oV0lOKSB8fCBVU0UoRElSRUNUMkQpCiBmbG9h
dCBGb250Q2FzY2FkZTo6ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1
biwgSGFzaFNldDxjb25zdCBGb250Kj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqIGds
eXBoT3ZlcmZsb3cpIGNvbnN0CiB7CiAgICAgQ29tcGxleFRleHRDb250cm9sbGVyIGNvbnRyb2xs
ZXIoKnRoaXMsIHJ1biwgdHJ1ZSwgZmFsbGJhY2tGb250cyk7CkBAIC0xNTU3LDcgKzE1NDAsNiBA
QCBmbG9hdCBGb250Q2FzY2FkZTo6ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRS
dW4mIHJ1biwgSGFzaFNldDxjb25zdCBGbwogICAgIH0KICAgICByZXR1cm4gY29udHJvbGxlci50
b3RhbFdpZHRoKCk7CiB9Ci0jZW5kaWYKIAogdm9pZCBGb250Q2FzY2FkZTo6YWRqdXN0U2VsZWN0
aW9uUmVjdEZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBMYXlvdXRSZWN0JiBzZWxl
Y3Rpb25SZWN0LCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bykgY29uc3QKIHsKQEAgLTE1Nzgs
NyArMTU2MCw2IEBAIHZvaWQgRm9udENhc2NhZGU6OmFkanVzdFNlbGVjdGlvblJlY3RGb3JTaW1w
bGVUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgTGF5b3V0UmVjCiAgICAgc2VsZWN0aW9uUmVjdC5z
ZXRXaWR0aChMYXlvdXRVbml0Ojpmcm9tRmxvYXRDZWlsKGFmdGVyV2lkdGggLSBiZWZvcmVXaWR0
aCkpOwogfQogCi0jaWYgIVBMQVRGT1JNKFdJTikgfHwgVVNFKERJUkVDVDJEKQogdm9pZCBGb250
Q2FzY2FkZTo6YWRqdXN0U2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4m
IHJ1biwgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQg
dG8pIGNvbnN0CiB7CiAgICAgQ29tcGxleFRleHRDb250cm9sbGVyIGNvbnRyb2xsZXIoKnRoaXMs
IHJ1bik7CkBAIC0xNTkzLDcgKzE1NzQsNiBAQCB2b2lkIEZvbnRDYXNjYWRlOjphZGp1c3RTZWxl
Y3Rpb25SZWN0Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBMYXlvdXRSZQogICAg
ICAgICBzZWxlY3Rpb25SZWN0Lm1vdmUoYmVmb3JlV2lkdGgsIDApOwogICAgIHNlbGVjdGlvblJl
Y3Quc2V0V2lkdGgoTGF5b3V0VW5pdDo6ZnJvbUZsb2F0Q2VpbChhZnRlcldpZHRoIC0gYmVmb3Jl
V2lkdGgpKTsKIH0KLSNlbmRpZgogCiBpbnQgRm9udENhc2NhZGU6Om9mZnNldEZvclBvc2l0aW9u
Rm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGZsb2F0IHgsIGJvb2wgaW5jbHVkZVBh
cnRpYWxHbHlwaHMpIGNvbnN0CiB7CkBAIC0xNjM4LDEzICsxNjE4LDExIEBAIGludCBGb250Q2Fz
Y2FkZTo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwg
ZmxvYXQgeCwgYm9vCiAgICAgcmV0dXJuIG9mZnNldDsKIH0KIAotI2lmICFQTEFURk9STShXSU4p
IHx8IFVTRShESVJFQ1QyRCkKIGludCBGb250Q2FzY2FkZTo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JD
b21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGZsb2F0IHgsIGJvb2wgaW5jbHVkZVBhcnRp
YWxHbHlwaHMpIGNvbnN0CiB7CiAgICAgQ29tcGxleFRleHRDb250cm9sbGVyIGNvbnRyb2xsZXIo
KnRoaXMsIHJ1bik7CiAgICAgcmV0dXJuIGNvbnRyb2xsZXIub2Zmc2V0Rm9yUG9zaXRpb24oeCwg
aW5jbHVkZVBhcnRpYWxHbHlwaHMpOwogfQotI2VuZGlmCiAKICNpZiAhUExBVEZPUk0oQ09DT0Ep
ICYmICFVU0UoSEFSRkJVWlopCiAvLyBGSVhNRTogVW5pZnkgdGhpcyB3aXRoIHRoZSBtYWNPUyBh
bmQgaU9TIGltcGxlbWVudGF0aW9uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0NvbXBsZXhUZXh0Q29udHJvbGxlclVuaXNjcmliZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vQ29tcGxleFRleHRDb250cm9sbGVyVW5p
c2NyaWJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNGZhZWYw
MGQ1MmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vQ29tcGxleFRleHRDb250cm9sbGVyVW5pc2NyaWJlLmNwcApAQCAtMCwwICsxLDMxNCBA
QAorLyoKKyogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisqIGFyZSBtZXQ6CisqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorKiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworKiBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDb21wbGV4VGV4dENvbnRyb2xsZXIuaCIKKworI2lm
ICFVU0UoRElSRUNUMkQpCisKKyNpbmNsdWRlICJGb250Q2FjaGUuaCIKKyNpbmNsdWRlICJGb250
Q2FzY2FkZS5oIgorI2luY2x1ZGUgIkhXbmREQy5oIgorI2luY2x1ZGUgPHVzcDEwLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGJvb2wgc2hhcGVCeVVuaXNjcmliZShjb25zdCBV
Q2hhciogc3RyLCBpbnQgbGVuLCBTQ1JJUFRfSVRFTSBpdGVtLCBjb25zdCBGb250KiBmb250RGF0
YSwKKyAgICBWZWN0b3I8V09SRD4mIGdseXBocywgVmVjdG9yPFdPUkQ+JiBjbHVzdGVycywKKyAg
ICBWZWN0b3I8U0NSSVBUX1ZJU0FUVFI+JiB2aXN1YWxBdHRyaWJ1dGVzKQoreworICAgIEhXbmRE
QyBoZGM7CisgICAgSEZPTlQgb2xkRm9udCA9IDA7CisgICAgSFJFU1VMVCBzaGFwZVJlc3VsdCA9
IEVfUEVORElORzsKKyAgICBpbnQgZ2x5cGhDb3VudCA9IDA7CisKKyAgICBpZiAoIWZvbnREYXRh
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBkbyB7CisgICAgICAgIHNoYXBlUmVzdWx0
ID0gU2NyaXB0U2hhcGUoaGRjLCBmb250RGF0YS0+c2NyaXB0Q2FjaGUoKSwgd2NoYXJGcm9tKHN0
ciksIGxlbiwgZ2x5cGhzLnNpemUoKSwgJml0ZW0uYSwKKyAgICAgICAgICAgIGdseXBocy5kYXRh
KCksIGNsdXN0ZXJzLmRhdGEoKSwgdmlzdWFsQXR0cmlidXRlcy5kYXRhKCksICZnbHlwaENvdW50
KTsKKyAgICAgICAgaWYgKHNoYXBlUmVzdWx0ID09IEVfUEVORElORykgeworICAgICAgICAgICAg
Ly8gVGhlIHNjcmlwdCBjYWNoZSBpc24ndCBwcmltZWQgd2l0aCBlbm91Z2ggaW5mbyB5ZXQuIFdl
IG5lZWQgdG8gc2VsZWN0IG91ciBIRk9OVCBpbnRvCisgICAgICAgICAgICAvLyBhIERDIGFuZCBw
YXNzIHRoZSBEQyBpbiB0byBTY3JpcHRTaGFwZS4KKyAgICAgICAgICAgIEFTU0VSVCghaGRjKTsK
KyAgICAgICAgICAgIGhkYy5zZXRIV25kKDApOworICAgICAgICAgICAgSEZPTlQgaGZvbnQgPSBm
b250RGF0YS0+cGxhdGZvcm1EYXRhKCkuaGZvbnQoKTsKKyAgICAgICAgICAgIG9sZEZvbnQgPSAo
SEZPTlQpU2VsZWN0T2JqZWN0KGhkYywgaGZvbnQpOworICAgICAgICB9IGVsc2UgaWYgKHNoYXBl
UmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpIHsKKyAgICAgICAgICAgIC8vIE5lZWQgdG8gcmVzaXpl
IG91ciBidWZmZXJzLgorICAgICAgICAgICAgZ2x5cGhzLnJlc2l6ZShnbHlwaHMuc2l6ZSgpICog
Mik7CisgICAgICAgICAgICB2aXN1YWxBdHRyaWJ1dGVzLnJlc2l6ZShnbHlwaHMuc2l6ZSgpKTsK
KyAgICAgICAgfQorICAgIH0gd2hpbGUgKHNoYXBlUmVzdWx0ID09IEVfUEVORElORyB8fCBzaGFw
ZVJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKKworICAgIGlmIChoZGMpCisgICAgICAgIFNlbGVj
dE9iamVjdChoZGMsIG9sZEZvbnQpOworCisgICAgaWYgKEZBSUxFRChzaGFwZVJlc3VsdCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGdseXBocy5zaHJpbmsoZ2x5cGhDb3VudCk7Cisg
ICAgdmlzdWFsQXR0cmlidXRlcy5zaHJpbmsoZ2x5cGhDb3VudCk7CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworY2xhc3MgVW5pc2NyaWJlQ29udHJvbGxlciB7CitwdWJsaWM6CisgICAgVW5pc2Ny
aWJlQ29udHJvbGxlcihjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVu
LCBWZWN0b3I8U0NSSVBUX0lURU0+JiBpdGVtcykKKyAgICAgICAgOiBtX2ZvbnQoZm9udCkKKyAg
ICAgICAgLCBtX3J1bihydW4pCisgICAgICAgICwgbV9pdGVtcyhpdGVtcykKKyAgICAgICAgLCBt
X3BhZGRpbmcocnVuLmV4cGFuc2lvbigpKQorICAgIHsKKyAgICAgICAgaWYgKCFtX3BhZGRpbmcp
CisgICAgICAgICAgICBtX3BhZFBlclNwYWNlID0gMDsKKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICBmbG9hdCBudW1TcGFjZXMgPSAwOworICAgICAgICAgICAgZm9yIChpbnQgcyA9IDA7IHMg
PCBtX3J1bi5sZW5ndGgoKTsgcysrKSB7CisgICAgICAgICAgICAgICAgaWYgKEZvbnRDYXNjYWRl
Ojp0cmVhdEFzU3BhY2UobV9ydW5bc10pKQorICAgICAgICAgICAgICAgICAgICBudW1TcGFjZXMr
KzsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFudW1TcGFjZXMpCisgICAgICAg
ICAgICAgICAgbV9wYWRQZXJTcGFjZSA9IDA7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgbV9wYWRQZXJTcGFjZSA9IG1fcGFkZGluZyAvIG51bVNwYWNlczsKKyAgICAgICAgfQor
ICAgIH0KKyAgICBib29sIHNoYXBlQW5kUGxhY2VJdGVtKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQs
IGNvbnN0IEZvbnQqLCBHbHlwaEJ1ZmZlciopOworCitwcml2YXRlOgorICAgIGNvbnN0IEZvbnRD
YXNjYWRlJiBtX2ZvbnQ7CisgICAgY29uc3QgVGV4dFJ1biYgbV9ydW47CisgICAgVmVjdG9yPFND
UklQVF9JVEVNPiYgbV9pdGVtczsKKyAgICBmbG9hdCBtX3BhZGRpbmc7CisgICAgZmxvYXQgbV9w
YWRQZXJTcGFjZTsKK307CisKKworYm9vbCBVbmlzY3JpYmVDb250cm9sbGVyOjpzaGFwZUFuZFBs
YWNlSXRlbShjb25zdCBVQ2hhciogY3AsIHVuc2lnbmVkIGksIGNvbnN0IEZvbnQqIGZvbnREYXRh
LCBHbHlwaEJ1ZmZlciogZ2x5cGhCdWZmZXIpCit7CisgICAgLy8gRGV0ZXJtaW5lIHRoZSBzdHJp
bmcgZm9yIHRoaXMgaXRlbS4KKyAgICBjb25zdCBVQ2hhciogc3RyID0gY3AgKyBtX2l0ZW1zW2ld
LmlDaGFyUG9zOworICAgIGludCBsZW4gPSBtX2l0ZW1zW2krMV0uaUNoYXJQb3MgLSBtX2l0ZW1z
W2ldLmlDaGFyUG9zOworICAgIFNDUklQVF9JVEVNIGl0ZW0gPSBtX2l0ZW1zW2ldOworCisgICAg
Ly8gU2V0IHVwIGJ1ZmZlcnMgdG8gaG9sZCB0aGUgcmVzdWx0cyBvZiBzaGFwaW5nIHRoZSBpdGVt
LgorICAgIFZlY3RvcjxXT1JEPiBnbHlwaHM7CisgICAgVmVjdG9yPFdPUkQ+IGNsdXN0ZXJzOwor
ICAgIFZlY3RvcjxTQ1JJUFRfVklTQVRUUj4gdmlzdWFsQXR0cmlidXRlczsKKyAgICBjbHVzdGVy
cy5yZXNpemUobGVuKTsKKworICAgIC8vIFNoYXBlIHRoZSBpdGVtLgorICAgIC8vIFRoZSByZWNv
bW1lbmRlZCBzaXplIGZvciB0aGUgZ2x5cGggYnVmZmVyIGlzIDEuNSAqIHRoZSBjaGFyYWN0ZXIg
bGVuZ3RoICsgMTYgaW4gdGhlIHVuaXNjcmliZSBkb2NzLgorICAgIC8vIEFwcGFyZW50bHkgdGhp
cyBpcyBhIGdvb2Qgc2l6ZSB0byBhdm9pZCBoYXZpbmcgdG8gbWFrZSByZXBlYXRlZCBjYWxscyB0
byBTY3JpcHRTaGFwZS4KKyAgICBnbHlwaHMucmVzaXplKDEuNSAqIGxlbiArIDE2KTsKKyAgICB2
aXN1YWxBdHRyaWJ1dGVzLnJlc2l6ZShnbHlwaHMuc2l6ZSgpKTsKKworICAgIGlmICghc2hhcGVC
eVVuaXNjcmliZShzdHIsIGxlbiwgaXRlbSwgZm9udERhdGEsIGdseXBocywgY2x1c3RlcnMsIHZp
c3VhbEF0dHJpYnV0ZXMpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIFZlY3RvcjxPcHRp
b25hbDx1bnNpZ25lZD4+IHN0cmluZ09mZnNldHMoZ2x5cGhzLnNpemUoKSk7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGxlbjsgKytpKSB7CisgICAgICAgIGlmIChzdHJpbmdPZmZzZXRz
W2NsdXN0ZXJzW2ldXSkKKyAgICAgICAgICAgIHN0cmluZ09mZnNldHNbY2x1c3RlcnNbaV1dID0g
c3RkOjptaW4oKnN0cmluZ09mZnNldHNbY2x1c3RlcnNbaV1dLCBpKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgc3RyaW5nT2Zmc2V0c1tjbHVzdGVyc1tpXV0gPSBpOworICAgIH0KKworICAg
IC8vIFdlIG5vdyBoYXZlIGEgY29sbGVjdGlvbiBvZiBnbHlwaHMuCisgICAgVmVjdG9yPEdPRkZT
RVQ+IG9mZnNldHM7CisgICAgVmVjdG9yPGludD4gYWR2YW5jZXM7CisgICAgb2Zmc2V0cy5yZXNp
emUoZ2x5cGhzLnNpemUoKSk7CisgICAgYWR2YW5jZXMucmVzaXplKGdseXBocy5zaXplKCkpOwor
ICAgIEhSRVNVTFQgcGxhY2VSZXN1bHQgPSBTY3JpcHRQbGFjZSgwLCBmb250RGF0YS0+c2NyaXB0
Q2FjaGUoKSwgZ2x5cGhzLmRhdGEoKSwgZ2x5cGhzLnNpemUoKSwgdmlzdWFsQXR0cmlidXRlcy5k
YXRhKCksCisgICAgICAgICZpdGVtLmEsIGFkdmFuY2VzLmRhdGEoKSwgb2Zmc2V0cy5kYXRhKCks
IDApOworICAgIGlmIChwbGFjZVJlc3VsdCA9PSBFX1BFTkRJTkcpIHsKKyAgICAgICAgLy8gVGhl
IHNjcmlwdCBjYWNoZSBpc24ndCBwcmltZWQgd2l0aCBlbm91Z2ggaW5mbyB5ZXQuIFdlIG5lZWQg
dG8gc2VsZWN0IG91ciBIRk9OVCBpbnRvCisgICAgICAgIC8vIGEgREMgYW5kIHBhc3MgdGhlIERD
IGluIHRvIFNjcmlwdFBsYWNlLgorICAgICAgICBIV25kREMgaGRjKDApOworICAgICAgICBIRk9O
VCBoZm9udCA9IGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5oZm9udCgpOworICAgICAgICBIRk9O
VCBvbGRGb250ID0gKEhGT05UKVNlbGVjdE9iamVjdChoZGMsIGhmb250KTsKKyAgICAgICAgcGxh
Y2VSZXN1bHQgPSBTY3JpcHRQbGFjZShoZGMsIGZvbnREYXRhLT5zY3JpcHRDYWNoZSgpLCBnbHlw
aHMuZGF0YSgpLCBnbHlwaHMuc2l6ZSgpLCB2aXN1YWxBdHRyaWJ1dGVzLmRhdGEoKSwKKyAgICAg
ICAgICAgICZpdGVtLmEsIGFkdmFuY2VzLmRhdGEoKSwgb2Zmc2V0cy5kYXRhKCksIDApOworICAg
ICAgICBTZWxlY3RPYmplY3QoaGRjLCBvbGRGb250KTsKKyAgICB9CisgICAgCisgICAgaWYgKEZB
SUxFRChwbGFjZVJlc3VsdCkgfHwgZ2x5cGhzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisKKyAgICAvLyBDb252ZXJ0IGFsbCBjaGFycyB0aGF0IHNob3VsZCBiZSB0cmVhdGVkIGFz
IHNwYWNlcyB0byB1c2UgdGhlIHNwYWNlIGdseXBoLgorICAgIC8vIFdlIGFsc28gY3JlYXRlIGEg
bWFwIHRoYXQgYWxsb3dzIHVzIHRvIHF1aWNrbHkgZ28gZnJvbSBzcGFjZSBnbHlwaHMgYmFjayB0
byB0aGVpciBjb3JyZXNwb25kaW5nIGNoYXJhY3RlcnMuCisgICAgVmVjdG9yPGludD4gc3BhY2VD
aGFyYWN0ZXJzKGdseXBocy5zaXplKCkpOworICAgIHNwYWNlQ2hhcmFjdGVycy5maWxsKC0xKTsK
KworICAgIGNvbnN0IGZsb2F0IGNMb2dpY2FsU2NhbGUgPSBmb250RGF0YS0+cGxhdGZvcm1EYXRh
KCkudXNlR0RJKCkgPyAxLjBmIDogMzIuMGY7CisgICAgZmxvYXQgc3BhY2VXaWR0aCA9IGZvbnRE
YXRhLT5zcGFjZVdpZHRoKCkgLSBmb250RGF0YS0+c3ludGhldGljQm9sZE9mZnNldCgpOworICAg
IHVuc2lnbmVkIGxvZ2ljYWxTcGFjZVdpZHRoID0gc3BhY2VXaWR0aCAqIGNMb2dpY2FsU2NhbGU7
CisKKyAgICBmb3IgKGludCBrID0gMDsgayA8IGxlbjsgaysrKSB7CisgICAgICAgIFVDaGFyIGNo
ID0gKihzdHIgKyBrKTsKKyAgICAgICAgYm9vbCB0cmVhdEFzU3BhY2UgPSBGb250Q2FzY2FkZTo6
dHJlYXRBc1NwYWNlKGNoKTsKKyAgICAgICAgYm9vbCB0cmVhdEFzWmVyb1dpZHRoU3BhY2UgPSBG
b250Q2FzY2FkZTo6dHJlYXRBc1plcm9XaWR0aFNwYWNlKGNoKTsKKyAgICAgICAgaWYgKHRyZWF0
QXNTcGFjZSB8fCB0cmVhdEFzWmVyb1dpZHRoU3BhY2UpIHsKKyAgICAgICAgICAgIC8vIFN1YnN0
aXR1dGUgaW4gdGhlIHNwYWNlIGdseXBoIGF0IHRoZSBhcHByb3ByaWF0ZSBwbGFjZSBpbiB0aGUg
Z2x5cGhzCisgICAgICAgICAgICAvLyBhcnJheS4KKyAgICAgICAgICAgIGdseXBoc1tjbHVzdGVy
c1trXV0gPSBmb250RGF0YS0+c3BhY2VHbHlwaCgpOworICAgICAgICAgICAgYWR2YW5jZXNbY2x1
c3RlcnNba11dID0gdHJlYXRBc1NwYWNlID8gbG9naWNhbFNwYWNlV2lkdGggOiAwOworICAgICAg
ICAgICAgaWYgKHRyZWF0QXNTcGFjZSkKKyAgICAgICAgICAgICAgICBzcGFjZUNoYXJhY3RlcnNb
Y2x1c3RlcnNba11dID0gayArIGl0ZW0uaUNoYXJQb3M7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICAvLyBQb3B1bGF0ZSBvdXIgZ2x5cGggYnVmZmVyIHdpdGggdGhpcyBpbmZvcm1hdGlvbi4KKyAg
ICBib29sIGhhc0V4dHJhU3BhY2luZyA9IG1fZm9udC5sZXR0ZXJTcGFjaW5nKCkgfHwgbV9mb250
LndvcmRTcGFjaW5nKCkgfHwgbV9wYWRkaW5nOworICAgIAorICAgIGZvciAodW5zaWduZWQgayA9
IDA7IGsgPCBnbHlwaHMuc2l6ZSgpOyBrKyspIHsKKyAgICAgICAgR2x5cGggZ2x5cGggPSBnbHlw
aHNba107CisgICAgICAgIGZsb2F0IGFkdmFuY2UgPSBhZHZhbmNlc1trXSAvIGNMb2dpY2FsU2Nh
bGU7CisgICAgICAgIGZsb2F0IG9mZnNldFggPSBvZmZzZXRzW2tdLmR1IC8gY0xvZ2ljYWxTY2Fs
ZTsKKyAgICAgICAgZmxvYXQgb2Zmc2V0WSA9IG9mZnNldHNba10uZHYgLyBjTG9naWNhbFNjYWxl
OworCisgICAgICAgIC8vIE1hdGNoIEFwcEtpdCdzIHJ1bGVzIGZvciB0aGUgaW50ZWdlciB2cy4g
bm9uLWludGVnZXIgcmVuZGVyaW5nIG1vZGVzLgorICAgICAgICBmbG9hdCByb3VuZGVkQWR2YW5j
ZSA9IHJvdW5kZihhZHZhbmNlKTsKKyAgICAgICAgaWYgKCFmb250RGF0YS0+cGxhdGZvcm1EYXRh
KCkuaXNTeXN0ZW1Gb250KCkpIHsKKyAgICAgICAgICAgIGFkdmFuY2UgPSByb3VuZGVkQWR2YW5j
ZTsKKyAgICAgICAgICAgIG9mZnNldFggPSByb3VuZGYob2Zmc2V0WCk7CisgICAgICAgICAgICBv
ZmZzZXRZID0gcm91bmRmKG9mZnNldFkpOworICAgICAgICB9CisKKyAgICAgICAgYWR2YW5jZSAr
PSBmb250RGF0YS0+c3ludGhldGljQm9sZE9mZnNldCgpOworCisgICAgICAgIGlmIChoYXNFeHRy
YVNwYWNpbmcpIHsKKyAgICAgICAgICAgIC8vIElmIHdlJ3JlIGEgZ2x5cGggd2l0aCBhbiBhZHZh
bmNlLCBnbyBhaGVhZCBhbmQgYWRkIGluIGxldHRlci1zcGFjaW5nLgorICAgICAgICAgICAgLy8g
VGhhdCB3YXkgd2Ugd2VlZCBvdXQgemVybyB3aWR0aCBsdXJrZXJzLiBUaGlzIGJlaGF2aW9yIG1h
dGNoZXMgdGhlIGZhc3QgdGV4dCBjb2RlIHBhdGguCisgICAgICAgICAgICBpZiAoYWR2YW5jZSAm
JiBtX2ZvbnQubGV0dGVyU3BhY2luZygpKQorICAgICAgICAgICAgICAgIGFkdmFuY2UgKz0gbV9m
b250LmxldHRlclNwYWNpbmcoKTsKKworICAgICAgICAgICAgLy8gSGFuZGxlIGp1c3RpZmljYXRp
b24gYW5kIHdvcmQtc3BhY2luZy4KKyAgICAgICAgICAgIGludCBjaGFyYWN0ZXJJbmRleCA9IHNw
YWNlQ2hhcmFjdGVyc1trXTsKKyAgICAgICAgICAgIC8vIGNoYXJhY3RlckluZGV4IGlzIGxlZnQg
YXQgdGhlIGluaXRpYWwgdmFsdWUgb2YgLTEgZm9yIGdseXBocyB0aGF0IGRvIG5vdCBtYXAgYmFj
ayB0byB0cmVhdGVkLWFzLXNwYWNlIGNoYXJhY3RlcnMuCisgICAgICAgICAgICBpZiAoY2hhcmFj
dGVySW5kZXggIT0gLTEpIHsKKyAgICAgICAgICAgICAgICAvLyBBY2NvdW50IGZvciBwYWRkaW5n
LiBXZWJDb3JlIHVzZXMgc3BhY2UgcGFkZGluZyB0byBqdXN0aWZ5IHRleHQuCisgICAgICAgICAg
ICAgICAgLy8gV2UgZGlzdHJpYnV0ZSB0aGUgc3BlY2lmaWVkIHBhZGRpbmcgb3ZlciB0aGUgYXZh
aWxhYmxlIHNwYWNlcyBpbiB0aGUgcnVuLgorICAgICAgICAgICAgICAgIGlmIChtX3BhZGRpbmcp
IHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVXNlIGxlZnRvdmVyIHBhZGRpbmcgaWYgbm90IGV2
ZW5seSBkaXZpc2libGUgYnkgbnVtYmVyIG9mIHNwYWNlcy4KKyAgICAgICAgICAgICAgICAgICAg
aWYgKG1fcGFkZGluZyA8IG1fcGFkUGVyU3BhY2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGFkdmFuY2UgKz0gbV9wYWRkaW5nOworICAgICAgICAgICAgICAgICAgICAgICAgbV9wYWRkaW5n
ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG1fcGFkZGluZyAtPSBtX3BhZFBlclNwYWNlOworICAgICAgICAgICAgICAgICAgICAgICAg
YWR2YW5jZSArPSBtX3BhZFBlclNwYWNlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gQWNjb3VudCBmb3Igd29yZC1zcGFjaW5n
LgorICAgICAgICAgICAgICAgIGlmIChjaGFyYWN0ZXJJbmRleCA+IDAgJiYgbV9mb250LndvcmRT
cGFjaW5nKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgVUNoYXIgY2FuZGlkYXRlU3BhY2U7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChtX3J1bi5pczhCaXQoKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNhbmRpZGF0ZVNwYWNlID0gKihtX3J1bi5kYXRhOChjaGFyYWN0ZXJJbmRleCAtIDEp
KTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgY2Fu
ZGlkYXRlU3BhY2UgPSAqKG1fcnVuLmRhdGExNihjaGFyYWN0ZXJJbmRleCAtIDEpKTsKKworICAg
ICAgICAgICAgICAgICAgICBpZiAoIUZvbnRDYXNjYWRlOjp0cmVhdEFzU3BhY2UoY2FuZGlkYXRl
U3BhY2UpKQorICAgICAgICAgICAgICAgICAgICAgICAgYWR2YW5jZSArPSBtX2ZvbnQud29yZFNw
YWNpbmcoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICAvLyBGSVhNRTogV2UgbmVlZCB0byB0YWtlIHRoZSBHT0ZGU0VUUyBmb3IgY29tYmlu
aW5nIGdseXBocyBhbmQgc3RvcmUgdGhlbSBpbiB0aGUgZ2x5cGggYnVmZmVyCisgICAgICAgIC8v
IGFzIHdlbGwsIHNvIHRoYXQgd2hlbiB0aGUgdGltZSBjb21lcyB0byBkcmF3IHRob3NlIGdseXBo
cywgd2UgY2FuIGFwcGx5IHRoZSBhcHByb3ByaWF0ZQorICAgICAgICAvLyB0cmFuc2xhdGlvbi4K
KyAgICAgICAgaWYgKGdseXBoQnVmZmVyKSB7CisgICAgICAgICAgICBHbHlwaEJ1ZmZlckFkdmFu
Y2Ugb3JpZ2luKG9mZnNldFgsIC1vZmZzZXRZKTsKKyAgICAgICAgICAgIGlmICghZ2x5cGhCdWZm
ZXItPmFkdmFuY2VzQ291bnQoKSkKKyAgICAgICAgICAgICAgICBnbHlwaEJ1ZmZlci0+c2V0SW5p
dGlhbEFkdmFuY2Uob3JpZ2luKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBn
bHlwaEJ1ZmZlci0+ZXhwYW5kTGFzdEFkdmFuY2Uob3JpZ2luKTsKKyAgICAgICAgICAgIEdseXBo
QnVmZmVyQWR2YW5jZSBnbHlwaEFkdmFuY2UoLW9yaWdpbi53aWR0aCgpICsgYWR2YW5jZSwgLW9y
aWdpbi5oZWlnaHQoKSk7CisgICAgICAgICAgICBnbHlwaEJ1ZmZlci0+YWRkKGdseXBoLCBmb250
RGF0YSwgZ2x5cGhBZHZhbmNlLCBzdHJpbmdPZmZzZXRzW2tdLnZhbHVlT3IoMCkpOworICAgICAg
ICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQ29tcGxleFRleHRDb250
cm9sbGVyOjpjb2xsZWN0Q29tcGxleFRleHRSdW5zRm9yQ2hhcmFjdGVycyhjb25zdCBVQ2hhciog
Y3AsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgc3RyaW5nTG9jYXRpb24sIGNvbnN0IEZvbnQq
IGZvbnQpCit7CisgICAgaWYgKCFmb250KSB7CisgICAgICAgIC8vIENyZWF0ZSBhIHJ1biBvZiBt
aXNzaW5nIGdseXBocyBmcm9tIHRoZSBwcmltYXJ5IGZvbnQuCisgICAgICAgIG1fY29tcGxleFRl
eHRSdW5zLmFwcGVuZChDb21wbGV4VGV4dFJ1bjo6Y3JlYXRlKG1fZm9udC5wcmltYXJ5Rm9udCgp
LCBjcCwgc3RyaW5nTG9jYXRpb24sIGxlbmd0aCwgMCwgbGVuZ3RoLCBtX3J1bi5sdHIoKSkpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgVmVjdG9yPFNDUklQVF9JVEVNPiBpdGVtcyg2
KTsKKyAgICBpbnQgbnVtSXRlbXMgPSAwOworICAgIGZvciAoOzspIHsKKyAgICAgICAgU0NSSVBU
X0NPTlRST0wgY29udHJvbCB7IH07CisgICAgICAgIFNDUklQVF9TVEFURSBzdGF0ZSB7IH07Cisg
ICAgICAgIC8vIFNldCB1cCB0aGUgY29ycmVjdCBkaXJlY3Rpb24gZm9yIHRoZSBydW4uCisgICAg
ICAgIHN0YXRlLnVCaWRpTGV2ZWwgPSBtX3J1bi5ydGwoKTsKKyAgICAgICAgLy8gTG9jayB0aGUg
Y29ycmVjdCBkaXJlY3Rpb25hbCBvdmVycmlkZS4KKyAgICAgICAgc3RhdGUuZk92ZXJyaWRlRGly
ZWN0aW9uID0gbV9ydW4uZGlyZWN0aW9uYWxPdmVycmlkZSgpOworCisgICAgICAgIC8vIFNjcmlw
dEl0ZW1pemUgbWF5IHdyaXRlIChjTWF4SXRlbXMgKyAxKSBTQ1JJUFRfSVRFTS4KKyAgICAgICAg
SFJFU1VMVCByYyA9IFNjcmlwdEl0ZW1pemUod2NoYXJGcm9tKGNwKSwgbGVuZ3RoLCBpdGVtcy5z
aXplKCkgLSAxLCAmY29udHJvbCwgJnN0YXRlLCBpdGVtcy5kYXRhKCksICZudW1JdGVtcyk7Cisg
ICAgICAgIGlmIChyYyAhPSBFX09VVE9GTUVNT1JZKSB7CisgICAgICAgICAgICBBU1NFUlQoU1VD
Q0VFREVEKHJjKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpdGVt
cy5yZXNpemUoaXRlbXMuc2l6ZSgpICogMik7CisgICAgfQorICAgIGl0ZW1zLnJlc2l6ZShudW1J
dGVtcyArIDEpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1JdGVtczsgaSsrKSB7Cisg
ICAgICAgIEdseXBoQnVmZmVyIGdseXBoQnVmZmVyOworICAgICAgICBnbHlwaEJ1ZmZlci5zYXZl
T2Zmc2V0c0luU3RyaW5nKCk7CisKKyAgICAgICAgVW5pc2NyaWJlQ29udHJvbGxlciB1YyhtX2Zv
bnQsIG1fcnVuLCBpdGVtcyk7CisKKyAgICAgICAgaWYgKCF1Yy5zaGFwZUFuZFBsYWNlSXRlbShj
cCwgaSwgZm9udCwgJmdseXBoQnVmZmVyKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICBWZWN0b3I8R2x5cGg+IGdseXBocyhnbHlwaEJ1ZmZlci5zaXplKCkpOworICAgICAgICBWZWN0
b3I8RmxvYXRQb2ludD4gb3JpZ2lucyhnbHlwaEJ1ZmZlci5zaXplKCkpOworICAgICAgICBWZWN0
b3I8RmxvYXRTaXplPiBhZHZhbmNlcyhnbHlwaEJ1ZmZlci5zaXplKCkpOworICAgICAgICBWZWN0
b3I8dW5zaWduZWQ+IHN0cmluZ0luZGljZXMoZ2x5cGhCdWZmZXIuc2l6ZSgpKTsKKworICAgICAg
ICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IGdseXBoQnVmZmVyLnNpemUoKTsgaisrKSB7CisgICAg
ICAgICAgICBnbHlwaHNbal0gPSBnbHlwaEJ1ZmZlci5nbHlwaEF0KGopOworICAgICAgICAgICAg
b3JpZ2luc1tqXSA9IEZsb2F0UG9pbnQoMCwgMCk7CisgICAgICAgICAgICBhZHZhbmNlc1tqXSA9
IEZsb2F0U2l6ZShnbHlwaEJ1ZmZlci5hZHZhbmNlQXQoaikpOworICAgICAgICAgICAgc3RyaW5n
SW5kaWNlc1tqXSA9IGl0ZW1zW2ldLmlDaGFyUG9zICsgZ2x5cGhCdWZmZXIub2Zmc2V0SW5TdHJp
bmcoaik7CisgICAgICAgIH0KKworICAgICAgICBtX2NvbXBsZXhUZXh0UnVucy5hcHBlbmQoQ29t
cGxleFRleHRSdW46OmNyZWF0ZShhZHZhbmNlcywgb3JpZ2lucywgZ2x5cGhzLCBzdHJpbmdJbmRp
Y2VzLCBGbG9hdFNpemUoZ2x5cGhCdWZmZXIuaW5pdGlhbEFkdmFuY2UoKSksICpmb250LCBjcCwg
c3RyaW5nTG9jYXRpb24sIGxlbmd0aCwgaXRlbXNbaV0uaUNoYXJQb3MsIGl0ZW1zW2krMV0uaUNo
YXJQb3MsIG1fcnVuLmx0cigpKSk7CisgICAgfQorfQorCit9CisKKyNlbmRpZiAvLyAhVVNFKERJ
UkVDVDJEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ZvbnRDR1dpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9u
dENHV2luLmNwcAppbmRleCAwZWY2NTVkOGQwNS4uMzNmODUyZWI2ZTggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q0dXaW4uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q0dXaW4uY3BwCkBAIC0zNCw3
ICszNCw2IEBACiAjaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiVW5pc2NyaWJlQ29udHJv
bGxlci5oIgogI2luY2x1ZGUgIldlYkNvcmVUZXh0UmVuZGVyZXIuaCIKICNpbmNsdWRlIDxwYWwv
c3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhc2Nh
ZGVEaXJlY3QyRC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9u
dENhc2NhZGVEaXJlY3QyRC5jcHAKaW5kZXggOTExMTJkOTY1YzguLmIyZDM0NzFiOGFjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhc2NhZGVE
aXJlY3QyRC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Zv
bnRDYXNjYWRlRGlyZWN0MkQuY3BwCkBAIC0zNyw3ICszNyw2IEBACiAjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlRGlyZWN0MkQuaCIKICNpbmNsdWRlICJJbnRSZWN0Lmgi
CiAjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuaCIKLSNpbmNsdWRlICJVbmlzY3Jp
YmVDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiV2ViQ29yZVRleHRSZW5kZXJlci5oIgogI2luY2x1
ZGUgPGQyZDEuaD4KICNpbmNsdWRlIDxkd3JpdGVfMy5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRXaW4uY3BwCmluZGV4IDFjYWE4MDIyZTI2Li41MmNi
ODhmNTNkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ZvbnRXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9G
b250V2luLmNwcApAQCAtMzUsMTAgKzM1LDYgQEAKICNpbmNsdWRlICJUZXh0UnVuLmgiCiAjaW5j
bHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAotI2lmICFVU0UoRElSRUNUMkQpCi0jaW5jbHVkZSAi
VW5pc2NyaWJlQ29udHJvbGxlci5oIgotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Ym9vbCBGb250Q2FzY2FkZTo6Y2FuUmV0dXJuRmFsbGJhY2tGb250c0ZvckNvbXBsZXhUZXh0KCkK
QEAgLTUxLDcyICs0Nyw0IEBAIGJvb2wgRm9udENhc2NhZGU6OmNhbkV4cGFuZEFyb3VuZElkZW9n
cmFwaHNJbkNvbXBsZXhUZXh0KCkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLSNpZiAhVVNFKERJ
UkVDVDJEKQotCi12b2lkIEZvbnRDYXNjYWRlOjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9yQ29tcGxl
eFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCB1bnNp
Z25lZCBmcm9tLCB1bnNpZ25lZCB0bykgY29uc3QKLXsKLSAgICBVbmlzY3JpYmVDb250cm9sbGVy
IGl0KHRoaXMsIHJ1bik7Ci0gICAgaXQuYWR2YW5jZShmcm9tKTsKLSAgICBmbG9hdCBiZWZvcmVX
aWR0aCA9IGl0LnJ1bldpZHRoU29GYXIoKTsKLSAgICBpdC5hZHZhbmNlKHRvKTsKLSAgICBmbG9h
dCBhZnRlcldpZHRoID0gaXQucnVuV2lkdGhTb0ZhcigpOwotCi0gICAgaWYgKHJ1bi5ydGwoKSkg
ewotICAgICAgICBpdC5hZHZhbmNlKHJ1bi5sZW5ndGgoKSk7Ci0gICAgICAgIHNlbGVjdGlvblJl
Y3QubW92ZShpdC5ydW5XaWR0aFNvRmFyKCkgLSBhZnRlcldpZHRoLCAwKTsKLSAgICB9IGVsc2UK
LSAgICAgICAgc2VsZWN0aW9uUmVjdC5tb3ZlKGJlZm9yZVdpZHRoLCAwKTsKLSAgICBzZWxlY3Rp
b25SZWN0LnNldFdpZHRoKGFmdGVyV2lkdGggLSBiZWZvcmVXaWR0aCk7Ci19Ci0KLWZsb2F0IEZv
bnRDYXNjYWRlOjpnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRS
dW4mIHJ1biwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8sIEdseXBoQnVmZmVyJiBnbHlwaEJ1
ZmZlciwgRm9yVGV4dEVtcGhhc2lzT3JOb3QgZm9yVGV4dEVtcGhhc2lzKSBjb25zdAotewotICAg
IGlmIChmb3JUZXh0RW1waGFzaXMpIHsKLSAgICAgICAgLy8gRklYTUU6IEFkZCBmb3JUZXh0RW1w
aGFzaXMgcGFyZW1ldGVyIHRvIFVuaXNjcmliZUNvbnRyb2xsZXIgYW5kIHVzZSBpdC4KLSAgICAg
ICAgTE9HX0VSUk9SKCJOb3QgaW1wbGVtZW50ZWQgZm9yIHRleHQgZW1waGFzaXMuIik7Ci0gICAg
ICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIFVuaXNjcmliZUNvbnRyb2xsZXIgY29udHJvbGxl
cih0aGlzLCBydW4pOwotICAgIGNvbnRyb2xsZXIuYWR2YW5jZShmcm9tKTsKLSAgICBmbG9hdCBi
ZWZvcmVXaWR0aCA9IGNvbnRyb2xsZXIucnVuV2lkdGhTb0ZhcigpOwotICAgIGNvbnRyb2xsZXIu
YWR2YW5jZSh0bywgJmdseXBoQnVmZmVyKTsKLQotICAgIGlmIChnbHlwaEJ1ZmZlci5pc0VtcHR5
KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgZmxvYXQgYWZ0ZXJXaWR0aCA9IGNvbnRyb2xs
ZXIucnVuV2lkdGhTb0ZhcigpOwotCi0gICAgaWYgKHJ1bi5ydGwoKSkgewotICAgICAgICBjb250
cm9sbGVyLmFkdmFuY2UocnVuLmxlbmd0aCgpKTsKLSAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXIu
cnVuV2lkdGhTb0ZhcigpIC0gYWZ0ZXJXaWR0aDsKLSAgICB9Ci0gICAgcmV0dXJuIGJlZm9yZVdp
ZHRoOwotfQotCi1mbG9hdCBGb250Q2FzY2FkZTo6ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KGNv
bnN0IFRleHRSdW4mIHJ1biwgSGFzaFNldDxjb25zdCBGb250Kj4qIGZhbGxiYWNrRm9udHMsIEds
eXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cpIGNvbnN0Ci17Ci0gICAgVW5pc2NyaWJlQ29udHJv
bGxlciBjb250cm9sbGVyKHRoaXMsIHJ1biwgZmFsbGJhY2tGb250cyk7Ci0gICAgY29udHJvbGxl
ci5hZHZhbmNlKHJ1bi5sZW5ndGgoKSk7Ci0gICAgaWYgKGdseXBoT3ZlcmZsb3cpIHsKLSAgICAg
ICAgZ2x5cGhPdmVyZmxvdy0+dG9wID0gc3RkOjptYXg8aW50PihnbHlwaE92ZXJmbG93LT50b3As
IGNlaWxmKC1jb250cm9sbGVyLm1pbkdseXBoQm91bmRpbmdCb3hZKCkpIC0gKGdseXBoT3ZlcmZs
b3ctPmNvbXB1dGVCb3VuZHMgPyAwIDogZm9udE1ldHJpY3MoKS5hc2NlbnQoKSkpOwotICAgICAg
ICBnbHlwaE92ZXJmbG93LT5ib3R0b20gPSBzdGQ6Om1heDxpbnQ+KGdseXBoT3ZlcmZsb3ctPmJv
dHRvbSwgY2VpbGYoY29udHJvbGxlci5tYXhHbHlwaEJvdW5kaW5nQm94WSgpKSAtIChnbHlwaE92
ZXJmbG93LT5jb21wdXRlQm91bmRzID8gMCAgOiBmb250TWV0cmljcygpLmRlc2NlbnQoKSkpOwot
ICAgICAgICBnbHlwaE92ZXJmbG93LT5sZWZ0ID0gc3RkOjptYXg8aW50PigwLCBjZWlsZigtY29u
dHJvbGxlci5taW5HbHlwaEJvdW5kaW5nQm94WCgpKSk7Ci0gICAgICAgIGdseXBoT3ZlcmZsb3ct
PnJpZ2h0ID0gc3RkOjptYXg8aW50PigwLCBjZWlsZihjb250cm9sbGVyLm1heEdseXBoQm91bmRp
bmdCb3hYKCkgLSBjb250cm9sbGVyLnJ1bldpZHRoU29GYXIoKSkpOwotICAgIH0KLSAgICByZXR1
cm4gY29udHJvbGxlci5ydW5XaWR0aFNvRmFyKCk7Ci19Ci0KLWludCBGb250Q2FzY2FkZTo6b2Zm
c2V0Rm9yUG9zaXRpb25Gb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGZsb2F0IHhG
bG9hdCwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3QKLXsKLSAgICAvLyBGSVhNRTog
VGhpcyB0cnVuY2F0aW9uIGlzIG5vdCBhIHByb2JsZW0gZm9yIEhUTUwsIGJ1dCBvbmx5IGFmZmVj
dHMgU1ZHLCB3aGljaCBwYXNzZXMgZmxvYXRpbmctcG9pbnQgbnVtYmVycwotICAgIC8vIHRvIEZv
bnRDYXNjYWRlOjpvZmZzZXRGb3JQb3NpdGlvbigpLiBCdWcgaHR0cDovL3dlYmtpdC5vcmcvYi80
MDY3MyB0cmFja3MgZml4aW5nIHRoaXMgcHJvYmxlbS4KLSAgICBpbnQgeCA9IHN0YXRpY19jYXN0
PGludD4oeEZsb2F0KTsKLQotICAgIFVuaXNjcmliZUNvbnRyb2xsZXIgY29udHJvbGxlcih0aGlz
LCBydW4pOwotICAgIHJldHVybiBjb250cm9sbGVyLm9mZnNldEZvclBvc2l0aW9uKHgsIGluY2x1
ZGVQYXJ0aWFsR2x5cGhzKTsKLX0KLQotI2VuZGlmCi0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9VbmlzY3JpYmVDb250cm9sbGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9VbmlzY3JpYmVDb250cm9sbGVyLmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDc0YzQ4NjBmZjEuLjAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9VbmlzY3JpYmVDb250
cm9sbGVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ1OSArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlVuaXNjcmli
ZUNvbnRyb2xsZXIuaCIKLQotI2luY2x1ZGUgIkZvbnQuaCIKLSNpbmNsdWRlICJGb250Q2FzY2Fk
ZS5oIgotI2luY2x1ZGUgIkhXbmREQy5oIgotI2luY2x1ZGUgIlRleHRSdW4uaCIKLSNpbmNsdWRl
IDx3dGYvTWF0aEV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L3dpbi9XQ2hhclN0cmluZ0V4
dHJhcy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci11c2luZyBuYW1lc3BhY2UgV1RGOjpVbmlj
b2RlOwotCi0vLyBGSVhNRTogUmVhcmNoaXRlY3QgdGhpcyB0byBiZSBtb3JlIGxpa2UgV2lkdGhJ
dGVyYXRvciBpbiBGb250LmNwcC4gIEhhdmUgYW4gYWR2YW5jZSgpIG1ldGhvZAotLy8gdGhhdCBk
b2VzIHN0dWZmIGluIHRoYXQgbWV0aG9kIGluc3RlYWQgb2YgZG9pbmcgZXZlcnl0aGluZyBpbiB0
aGUgY29uc3RydWN0b3IuICBIYXZlIGFkdmFuY2UoKQotLy8gdGFrZSB0aGUgR2x5cGhCdWZmZXIg
YXMgYW4gYXJnIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBwb3B1bGF0ZSB0aGUgZ2x5cGggYnVm
ZmVyIHdoZW4KLS8vIG1lYXN1cmluZy4KLVVuaXNjcmliZUNvbnRyb2xsZXI6OlVuaXNjcmliZUNv
bnRyb2xsZXIoY29uc3QgRm9udENhc2NhZGUqIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgSGFz
aFNldDxjb25zdCBGb250Kj4qIGZhbGxiYWNrRm9udHMpCi0gICAgOiBtX2ZvbnQoKmZvbnQpCi0g
ICAgLCBtX3J1bihydW4pCi0gICAgLCBtX2ZhbGxiYWNrRm9udHMoZmFsbGJhY2tGb250cykKLSAg
ICAsIG1fbWluR2x5cGhCb3VuZGluZ0JveFgoc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46Om1h
eCgpKQotICAgICwgbV9tYXhHbHlwaEJvdW5kaW5nQm94WChzdGQ6Om51bWVyaWNfbGltaXRzPGZs
b2F0Pjo6bWluKCkpCi0gICAgLCBtX21pbkdseXBoQm91bmRpbmdCb3hZKHN0ZDo6bnVtZXJpY19s
aW1pdHM8ZmxvYXQ+OjptYXgoKSkKLSAgICAsIG1fbWF4R2x5cGhCb3VuZGluZ0JveFkoc3RkOjpu
dW1lcmljX2xpbWl0czxmbG9hdD46Om1pbigpKQotICAgICwgbV9jdXJyZW50Q2hhcmFjdGVyKDAp
Ci0gICAgLCBtX2VuZChydW4ubGVuZ3RoKCkpCi0gICAgLCBtX3J1bldpZHRoU29GYXIoMCkKLSAg
ICAsIG1fcGFkZGluZyhydW4uZXhwYW5zaW9uKCkpCi0gICAgLCBtX2NvbXB1dGluZ09mZnNldFBv
c2l0aW9uKGZhbHNlKQotICAgICwgbV9pbmNsdWRlUGFydGlhbEdseXBocyhmYWxzZSkKLSAgICAs
IG1fb2Zmc2V0WCgwKQotICAgICwgbV9vZmZzZXRQb3NpdGlvbigwKQotewotICAgIGlmICghbV9w
YWRkaW5nKQotICAgICAgICBtX3BhZFBlclNwYWNlID0gMDsKLSAgICBlbHNlIHsKLSAgICAgICAg
ZmxvYXQgbnVtU3BhY2VzID0gMDsKLSAgICAgICAgZm9yIChpbnQgcyA9IDA7IHMgPCBtX3J1bi5s
ZW5ndGgoKTsgcysrKSB7Ci0gICAgICAgICAgICBpZiAoRm9udENhc2NhZGU6OnRyZWF0QXNTcGFj
ZShtX3J1bltzXSkpCi0gICAgICAgICAgICAgICAgbnVtU3BhY2VzKys7Ci0gICAgICAgIH0KLQot
ICAgICAgICBpZiAobnVtU3BhY2VzID09IDApCi0gICAgICAgICAgICBtX3BhZFBlclNwYWNlID0g
MDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9wYWRQZXJTcGFjZSA9IG1fcGFkZGluZyAv
IG51bVNwYWNlczsKLSAgICB9Ci0KLSAgICAvLyBOdWxsIG91dCBvdXIgdW5pc2NyaWJlIHN0cnVj
dHMKLSAgICByZXNldENvbnRyb2xBbmRTdGF0ZSgpOwotfQotCi1pbnQgVW5pc2NyaWJlQ29udHJv
bGxlcjo6b2Zmc2V0Rm9yUG9zaXRpb24oaW50IHgsIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMp
Ci17Ci0gICAgbV9jb21wdXRpbmdPZmZzZXRQb3NpdGlvbiA9IHRydWU7Ci0gICAgbV9pbmNsdWRl
UGFydGlhbEdseXBocyA9IGluY2x1ZGVQYXJ0aWFsR2x5cGhzOwotICAgIG1fb2Zmc2V0WCA9IHg7
Ci0gICAgbV9vZmZzZXRQb3NpdGlvbiA9IDA7Ci0gICAgYWR2YW5jZShtX3J1bi5sZW5ndGgoKSk7
Ci0gICAgaWYgKG1fY29tcHV0aW5nT2Zmc2V0UG9zaXRpb24pIHsKLSAgICAgICAgLy8gVGhlIHBv
aW50IGlzIHRvIHRoZSBsZWZ0IG9yIHRvIHRoZSByaWdodCBvZiB0aGUgZW50aXJlIHJ1bi4KLSAg
ICAgICAgaWYgKChtX29mZnNldFggPj0gbV9ydW5XaWR0aFNvRmFyICYmIG1fcnVuLmx0cigpKSB8
fCAobV9vZmZzZXRYIDwgMCAmJiBtX3J1bi5ydGwoKSkpCi0gICAgICAgICAgICBtX29mZnNldFBv
c2l0aW9uID0gbV9lbmQ7Ci0gICAgfQotICAgIG1fY29tcHV0aW5nT2Zmc2V0UG9zaXRpb24gPSBm
YWxzZTsKLSAgICByZXR1cm4gbV9vZmZzZXRQb3NpdGlvbjsKLX0KLQotdm9pZCBVbmlzY3JpYmVD
b250cm9sbGVyOjphZHZhbmNlKHVuc2lnbmVkIG9mZnNldCwgR2x5cGhCdWZmZXIqIGdseXBoQnVm
ZmVyKQotewotICAgIC8vIEZJWE1FOiBXZSByZWFsbHkgd2FudCB0byBiZSB1c2luZyBhIG5ld2Vy
IHZlcnNpb24gb2YgVW5pc2NyaWJlIHRoYXQgc3VwcG9ydHMgdGhlIG5ldyBPcGVuVHlwZQotICAg
IC8vIGZ1bmN0aW9ucy4gIFRob3NlIGZ1bmN0aW9ucyB3b3VsZCBhbGxvdyB1cyB0byB0dXJuIG9m
ZiBrZXJuaW5nIGFuZCBsaWdhdHVyZXMuICBXaXRob3V0IGJlaW5nIGFibGUKLSAgICAvLyB0byBk
byB0aGF0LCB3ZSB3aWxsIGhhdmUgYnVnZ3kgbGluZSBicmVha2luZyBhbmQgbWV0cmljcyB3aGVu
IHNpbXBsZSBhbmQgY29tcGxleCB0ZXh0IGFyZSBjbG9zZQotICAgIC8vIHRvZ2V0aGVyICh0aGUg
Y29tcGxleCBjb2RlIHBhdGggd2lsbCBuYXJyb3cgdGhlIHRleHQgYmVjYXVzZSBvZiBrZXJuaW5n
IGFuZCBsaWdhdHVyZXMgYW5kIHRoZW4KLSAgICAvLyB3aGVuIGJpZGkgcHJvY2Vzc2luZyBzcGxp
dHMgaW50byBtdWx0aXBsZSBydW5zLCB0aGUgc2ltcGxlIHBvcnRpb25zIHdpbGwgZ2V0IHdpZGVy
IGFuZCBjYXVzZSB1cyB0bwotICAgIC8vIHNwaWxsIG9mZiB0aGUgZWRnZSBvZiBhIGxpbmUpLgot
ICAgIGlmIChzdGF0aWNfY2FzdDxpbnQ+KG9mZnNldCkgPiBtX2VuZCkKLSAgICAgICAgb2Zmc2V0
ID0gbV9lbmQ7Ci0KLSAgICBpbnQgbGVuZ3RoID0gb2Zmc2V0IC0gbV9jdXJyZW50Q2hhcmFjdGVy
OwotICAgIGlmIChsZW5ndGggPD0gMCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU3RyaW5nIGJ1
ZmZlckZvcjE2Qml0RGF0YTsKLQotICAgIC8vIEl0ZW1pemUgdGhlIHN0cmluZy4KLSAgICBjb25z
dCBVQ2hhciogY3AgPSBudWxscHRyOwotICAgIGlmIChtX3J1bi5pczhCaXQoKSkgewotICAgICAg
ICAvLyBVbmlzY3JpYmUgb25seSBkZWFscyB3aXRoIDE2LWJpdCBjaGFyYWN0ZXJzLiBNdXN0IGdl
bmVyYXRlIHRoZW0gbm93LgotICAgICAgICBidWZmZXJGb3IxNkJpdERhdGEgPSBTdHJpbmc6Om1h
a2UxNkJpdEZyb204Qml0U291cmNlKG1fcnVuLmRhdGE4KG1fY3VycmVudENoYXJhY3RlciksIGxl
bmd0aCk7Ci0gICAgICAgIGNwID0gYnVmZmVyRm9yMTZCaXREYXRhLmNoYXJhY3RlcnMxNigpOwot
ICAgIH0gZWxzZQotICAgICAgICBjcCA9IG1fcnVuLmRhdGExNihtX2N1cnJlbnRDaGFyYWN0ZXIp
OwotCi0gICAgdW5zaWduZWQgYmFzZUNoYXJhY3RlciA9IG1fY3VycmVudENoYXJhY3RlcjsKLQot
ICAgIC8vIFdlIGJyZWFrIHVwIGl0ZW1pemF0aW9uIG9mIHRoZSBzdHJpbmcgYnkgZm9udERhdGEg
YW5kIChpZiBuZWVkZWQpIHRoZSB1c2Ugb2Ygc21hbGwgY2Fwcy4KLQotICAgIC8vIEZJWE1FOiBJ
dCdzIGluY29uc2lzdGVudCB0aGF0IHdlIHVzZSBsb2dpY2FsIG9yZGVyIHdoZW4gaXRlbWl6aW5n
LCBzaW5jZSB0aGlzCi0gICAgLy8gZG9lcyBub3QgbWF0Y2ggbm9ybWFsIFJUTC4KLQotICAgIC8v
IEZJWE1FOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBkZWNvZGUgc3Vycm9nYXRlIHBhaXJzLiBDdXJy
ZW50bHkgaXQgbWFrZXMgbGl0dGxlIGRpZmZlcmVuY2UgdGhhdAotICAgIC8vIGl0IGRvZXMgbm90
IGJlY2F1c2UgdGhlIGZvbnQgY2FjaGUgb24gV2luZG93cyBkb2VzIG5vdCBzdXBwb3J0IG5vbi1C
TVAgY2hhcmFjdGVycy4KLSAgICBWZWN0b3I8VUNoYXIsIDI1Nj4gc21hbGxDYXBzQnVmZmVyOwot
ICAgIGlmIChtX2ZvbnQuaXNTbWFsbENhcHMoKSkKLSAgICAgICAgc21hbGxDYXBzQnVmZmVyLnJl
c2l6ZShsZW5ndGgpOwotCi0gICAgdW5zaWduZWQgaW5kZXhPZkZvbnRUcmFuc2l0aW9uID0gbV9y
dW4ucnRsKCkgPyBsZW5ndGggLSAxIDogMDsKLSAgICBjb25zdCBVQ2hhciogY3VyciA9IG1fcnVu
LnJ0bCgpID8gY3AgKyBsZW5ndGggIC0gMSA6IGNwOwotICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBt
X3J1bi5ydGwoKSA/IGNwIC0gMSA6IGNwICsgbGVuZ3RoOwotCi0gICAgY29uc3QgRm9udCogZm9u
dERhdGE7Ci0gICAgY29uc3QgRm9udCogbmV4dEZvbnREYXRhID0gbV9mb250LmdseXBoRGF0YUZv
ckNoYXJhY3RlcigqY3VyciwgZmFsc2UpLmZvbnQ7Ci0KLSAgICBVQ2hhciBuZXdDID0gMDsKLQot
ICAgIGJvb2wgaXNTbWFsbENhcHM7Ci0gICAgYm9vbCBuZXh0SXNTbWFsbENhcHMgPSBtX2ZvbnQu
aXNTbWFsbENhcHMoKSAmJiAhKFVfR0VUX0dDX01BU0soKmN1cnIpICYgVV9HQ19NX01BU0spICYm
IChuZXdDID0gdV90b3VwcGVyKCpjdXJyKSkgIT0gKmN1cnI7Ci0KLSAgICBpZiAobmV4dElzU21h
bGxDYXBzKQotICAgICAgICBzbWFsbENhcHNCdWZmZXJbY3VyciAtIGNwXSA9IG5ld0M7Ci0KLSAg
ICB3aGlsZSAodHJ1ZSkgewotICAgICAgICBjdXJyID0gbV9ydW4ucnRsKCkgPyBjdXJyIC0gMSA6
IGN1cnIgKyAxOwotICAgICAgICBpZiAoY3VyciA9PSBlbmQpCi0gICAgICAgICAgICBicmVhazsK
LQotICAgICAgICBmb250RGF0YSA9IG5leHRGb250RGF0YTsKLSAgICAgICAgaXNTbWFsbENhcHMg
PSBuZXh0SXNTbWFsbENhcHM7Ci0gICAgICAgIGludCBpbmRleCA9IGN1cnIgLSBjcDsKLSAgICAg
ICAgVUNoYXIgYyA9ICpjdXJyOwotCi0gICAgICAgIGJvb2wgZm9yY2VTbWFsbENhcHMgPSBpc1Nt
YWxsQ2FwcyAmJiAoVV9HRVRfR0NfTUFTSyhjKSAmIFVfR0NfTV9NQVNLKTsKLSAgICAgICAgbmV4
dEZvbnREYXRhID0gbV9mb250LmdseXBoRGF0YUZvckNoYXJhY3RlcigqY3VyciwgZmFsc2UsIGZv
cmNlU21hbGxDYXBzID8gU21hbGxDYXBzVmFyaWFudCA6IEF1dG9WYXJpYW50KS5mb250OwotICAg
ICAgICBpZiAobV9mb250LmlzU21hbGxDYXBzKCkpIHsKLSAgICAgICAgICAgIG5leHRJc1NtYWxs
Q2FwcyA9IGZvcmNlU21hbGxDYXBzIHx8IChuZXdDID0gdV90b3VwcGVyKGMpKSAhPSBjOwotICAg
ICAgICAgICAgaWYgKG5leHRJc1NtYWxsQ2FwcykKLSAgICAgICAgICAgICAgICBzbWFsbENhcHNC
dWZmZXJbaW5kZXhdID0gZm9yY2VTbWFsbENhcHMgPyBjIDogbmV3QzsKLSAgICAgICAgfQotCi0g
ICAgICAgIGlmIChtX2ZhbGxiYWNrRm9udHMgJiYgZm9udERhdGEgJiYgbmV4dEZvbnREYXRhICE9
IGZvbnREYXRhICYmIGZvbnREYXRhICE9ICZtX2ZvbnQucHJpbWFyeUZvbnQoKSkKLSAgICAgICAg
ICAgIG1fZmFsbGJhY2tGb250cy0+YWRkKGZvbnREYXRhKTsKLQotICAgICAgICBpZiAobmV4dEZv
bnREYXRhICE9IGZvbnREYXRhIHx8IG5leHRJc1NtYWxsQ2FwcyAhPSBpc1NtYWxsQ2Fwcykgewot
ICAgICAgICAgICAgaW50IGl0ZW1TdGFydCA9IG1fcnVuLnJ0bCgpID8gaW5kZXggKyAxIDogaW5k
ZXhPZkZvbnRUcmFuc2l0aW9uOwotICAgICAgICAgICAgaW50IGl0ZW1MZW5ndGggPSBtX3J1bi5y
dGwoKSA/IGluZGV4T2ZGb250VHJhbnNpdGlvbiAtIGluZGV4IDogaW5kZXggLSBpbmRleE9mRm9u
dFRyYW5zaXRpb247Ci0gICAgICAgICAgICBtX2N1cnJlbnRDaGFyYWN0ZXIgPSBiYXNlQ2hhcmFj
dGVyICsgaXRlbVN0YXJ0OwotICAgICAgICAgICAgaXRlbWl6ZVNoYXBlQW5kUGxhY2UoKGlzU21h
bGxDYXBzID8gc21hbGxDYXBzQnVmZmVyLmRhdGEoKSA6IGNwKSArIGl0ZW1TdGFydCwgaXRlbVN0
YXJ0LCBpdGVtTGVuZ3RoLCBmb250RGF0YSwgZ2x5cGhCdWZmZXIpOwotICAgICAgICAgICAgaW5k
ZXhPZkZvbnRUcmFuc2l0aW9uID0gaW5kZXg7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAg
aW50IGl0ZW1MZW5ndGggPSBtX3J1bi5ydGwoKSA/IGluZGV4T2ZGb250VHJhbnNpdGlvbiArIDEg
OiBsZW5ndGggLSBpbmRleE9mRm9udFRyYW5zaXRpb247Ci0gICAgaWYgKGl0ZW1MZW5ndGgpIHsK
LSAgICAgICAgaWYgKG1fZmFsbGJhY2tGb250cyAmJiBuZXh0Rm9udERhdGEgJiYgbmV4dEZvbnRE
YXRhICE9ICZtX2ZvbnQucHJpbWFyeUZvbnQoKSkKLSAgICAgICAgICAgIG1fZmFsbGJhY2tGb250
cy0+YWRkKG5leHRGb250RGF0YSk7Ci0KLSAgICAgICAgaW50IGl0ZW1TdGFydCA9IG1fcnVuLnJ0
bCgpID8gMCA6IGluZGV4T2ZGb250VHJhbnNpdGlvbjsKLSAgICAgICAgbV9jdXJyZW50Q2hhcmFj
dGVyID0gYmFzZUNoYXJhY3RlciArIGl0ZW1TdGFydDsKLSAgICAgICAgaXRlbWl6ZVNoYXBlQW5k
UGxhY2UoKG5leHRJc1NtYWxsQ2FwcyA/IHNtYWxsQ2Fwc0J1ZmZlci5kYXRhKCkgOiBjcCkgKyBp
dGVtU3RhcnQsIGl0ZW1TdGFydCwgaXRlbUxlbmd0aCwgbmV4dEZvbnREYXRhLCBnbHlwaEJ1ZmZl
cik7Ci0gICAgfQotCi0gICAgbV9jdXJyZW50Q2hhcmFjdGVyID0gYmFzZUNoYXJhY3RlciArIGxl
bmd0aDsKLX0KLQotdm9pZCBVbmlzY3JpYmVDb250cm9sbGVyOjppdGVtaXplU2hhcGVBbmRQbGFj
ZShjb25zdCBVQ2hhciogY3AsIHVuc2lnbmVkIHN0cmluZ09mZnNldCwgdW5zaWduZWQgbGVuZ3Ro
LCBjb25zdCBGb250KiBmb250RGF0YSwgR2x5cGhCdWZmZXIqIGdseXBoQnVmZmVyKQotewotICAg
IC8vIFNjcmlwdEl0ZW1pemUgKGluIFdpbmRvd3MgWFAgdmVyc2lvbnMgcHJpb3IgdG8gU1AyKSBj
YW4gb3ZlcmZsb3cgYnkgMS4gIFRoaXMgaXMgd2h5IHRoZXJlIGlzIGFuIGV4dHJhIGVtcHR5IGl0
ZW0KLSAgICAvLyBoYW5naW5nIG91dCBhdCB0aGUgZW5kIG9mIHRoZSBhcnJheQotICAgIG1faXRl
bXMucmVzaXplKDYpOwotICAgIGludCBudW1JdGVtcyA9IDA7Ci0gICAgSFJFU1VMVCByYyA9IFNf
T0s7Ci0gICAgd2hpbGUgKHJjID0gOjpTY3JpcHRJdGVtaXplKHdjaGFyRnJvbShjcCksIGxlbmd0
aCwgbV9pdGVtcy5zaXplKCkgLSAxLCAmbV9jb250cm9sLCAmbV9zdGF0ZSwgbV9pdGVtcy5kYXRh
KCksICZudW1JdGVtcykgPT0gRV9PVVRPRk1FTU9SWSkgewotICAgICAgICBtX2l0ZW1zLnJlc2l6
ZShtX2l0ZW1zLnNpemUoKSAqIDIpOwotICAgICAgICByZXNldENvbnRyb2xBbmRTdGF0ZSgpOwot
ICAgIH0KLSAgICBpZiAoRkFJTEVEKHJjKSkgewotICAgICAgICBXVEZMb2dBbHdheXMoIlVuaXNj
cmliZUNvbnRyb2xsZXI6Oml0ZW1pemVTaGFwZUFuZFBsYWNlOiBTY3JpcHRJdGVtaXplIGZhaWxl
ZCwgcmM9JWx4IiwgcmMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1faXRlbXMucmVz
aXplKG51bUl0ZW1zICsgMSk7Ci0KLSAgICBpZiAobV9ydW4ucnRsKCkpIHsKLSAgICAgICAgZm9y
IChpbnQgaSA9IG1faXRlbXMuc2l6ZSgpIC0gMjsgaSA+PSAwOyBpLS0pIHsKLSAgICAgICAgICAg
IGlmICghc2hhcGVBbmRQbGFjZUl0ZW0oY3AsIHN0cmluZ09mZnNldCwgaSwgZm9udERhdGEsIGds
eXBoQnVmZmVyKSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9IGVs
c2UgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9pdGVtcy5zaXplKCkgLSAx
OyBpKyspIHsKLSAgICAgICAgICAgIGlmICghc2hhcGVBbmRQbGFjZUl0ZW0oY3AsIHN0cmluZ09m
ZnNldCwgaSwgZm9udERhdGEsIGdseXBoQnVmZmVyKSkKLSAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgVW5pc2NyaWJlQ29udHJvbGxlcjo6cmVzZXRD
b250cm9sQW5kU3RhdGUoKQotewotICAgIG1lbXNldCgmbV9jb250cm9sLCAwLCBzaXplb2YoU0NS
SVBUX0NPTlRST0wpKTsKLSAgICBtZW1zZXQoJm1fc3RhdGUsIDAsIHNpemVvZihTQ1JJUFRfU1RB
VEUpKTsKLQotICAgIC8vIFNldCB1cCB0aGUgY29ycmVjdCBkaXJlY3Rpb24gZm9yIHRoZSBydW4u
Ci0gICAgbV9zdGF0ZS51QmlkaUxldmVsID0gbV9ydW4ucnRsKCk7Ci0gICAgCi0gICAgLy8gTG9j
ayB0aGUgY29ycmVjdCBkaXJlY3Rpb25hbCBvdmVycmlkZS4KLSAgICBtX3N0YXRlLmZPdmVycmlk
ZURpcmVjdGlvbiA9IG1fcnVuLmRpcmVjdGlvbmFsT3ZlcnJpZGUoKTsKLX0KLQotYm9vbCBVbmlz
Y3JpYmVDb250cm9sbGVyOjpzaGFwZUFuZFBsYWNlSXRlbShjb25zdCBVQ2hhciogY3AsIHVuc2ln
bmVkIHN0cmluZ09mZnNldCwgdW5zaWduZWQgaSwgY29uc3QgRm9udCogZm9udERhdGEsIEdseXBo
QnVmZmVyKiBnbHlwaEJ1ZmZlcikKLXsKLSAgICAvLyBEZXRlcm1pbmUgdGhlIHN0cmluZyBmb3Ig
dGhpcyBpdGVtLgotICAgIGNvbnN0IFVDaGFyKiBzdHIgPSBjcCArIG1faXRlbXNbaV0uaUNoYXJQ
b3M7Ci0gICAgaW50IGxlbiA9IG1faXRlbXNbaSsxXS5pQ2hhclBvcyAtIG1faXRlbXNbaV0uaUNo
YXJQb3M7Ci0gICAgU0NSSVBUX0lURU0gaXRlbSA9IG1faXRlbXNbaV07Ci0KLSAgICAvLyBTZXQg
dXAgYnVmZmVycyB0byBob2xkIHRoZSByZXN1bHRzIG9mIHNoYXBpbmcgdGhlIGl0ZW0uCi0gICAg
VmVjdG9yPFdPUkQ+IGdseXBoczsKLSAgICBWZWN0b3I8V09SRD4gY2x1c3RlcnM7Ci0gICAgVmVj
dG9yPFNDUklQVF9WSVNBVFRSPiB2aXN1YWxBdHRyaWJ1dGVzOwotICAgIGNsdXN0ZXJzLnJlc2l6
ZShsZW4pOwotICAgICAKLSAgICAvLyBTaGFwZSB0aGUgaXRlbS4KLSAgICAvLyBUaGUgcmVjb21t
ZW5kZWQgc2l6ZSBmb3IgdGhlIGdseXBoIGJ1ZmZlciBpcyAxLjUgKiB0aGUgY2hhcmFjdGVyIGxl
bmd0aCArIDE2IGluIHRoZSB1bmlzY3JpYmUgZG9jcy4KLSAgICAvLyBBcHBhcmVudGx5IHRoaXMg
aXMgYSBnb29kIHNpemUgdG8gYXZvaWQgaGF2aW5nIHRvIG1ha2UgcmVwZWF0ZWQgY2FsbHMgdG8g
U2NyaXB0U2hhcGUuCi0gICAgZ2x5cGhzLnJlc2l6ZSgxLjUgKiBsZW4gKyAxNik7Ci0gICAgdmlz
dWFsQXR0cmlidXRlcy5yZXNpemUoZ2x5cGhzLnNpemUoKSk7Ci0KLSAgICBpZiAoIXNoYXBlKHN0
ciwgbGVuLCBpdGVtLCBmb250RGF0YSwgZ2x5cGhzLCBjbHVzdGVycywgdmlzdWFsQXR0cmlidXRl
cykpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgVmVjdG9yPE9wdGlvbmFsPHVuc2lnbmVk
Pj4gc3RyaW5nT2Zmc2V0cyhnbHlwaHMuc2l6ZSgpKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbGVuOyArK2kpIHsKLSAgICAgICAgaWYgKHN0cmluZ09mZnNldHNbY2x1c3RlcnNbaV1d
KQotICAgICAgICAgICAgc3RyaW5nT2Zmc2V0c1tjbHVzdGVyc1tpXV0gPSBzdGQ6Om1pbigqc3Ry
aW5nT2Zmc2V0c1tjbHVzdGVyc1tpXV0sIGkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBz
dHJpbmdPZmZzZXRzW2NsdXN0ZXJzW2ldXSA9IGk7Ci0gICAgfQotCi0gICAgLy8gV2Ugbm93IGhh
dmUgYSBjb2xsZWN0aW9uIG9mIGdseXBocy4KLSAgICBWZWN0b3I8R09GRlNFVD4gb2Zmc2V0czsK
LSAgICBWZWN0b3I8aW50PiBhZHZhbmNlczsKLSAgICBvZmZzZXRzLnJlc2l6ZShnbHlwaHMuc2l6
ZSgpKTsKLSAgICBhZHZhbmNlcy5yZXNpemUoZ2x5cGhzLnNpemUoKSk7Ci0gICAgSFJFU1VMVCBw
bGFjZVJlc3VsdCA9IFNjcmlwdFBsYWNlKDAsIGZvbnREYXRhLT5zY3JpcHRDYWNoZSgpLCBnbHlw
aHMuZGF0YSgpLCBnbHlwaHMuc2l6ZSgpLCB2aXN1YWxBdHRyaWJ1dGVzLmRhdGEoKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJml0ZW0uYSwgYWR2YW5jZXMuZGF0YSgp
LCBvZmZzZXRzLmRhdGEoKSwgMCk7Ci0gICAgaWYgKHBsYWNlUmVzdWx0ID09IEVfUEVORElORykg
ewotICAgICAgICAvLyBUaGUgc2NyaXB0IGNhY2hlIGlzbid0IHByaW1lZCB3aXRoIGVub3VnaCBp
bmZvIHlldC4gIFdlIG5lZWQgdG8gc2VsZWN0IG91ciBIRk9OVCBpbnRvCi0gICAgICAgIC8vIGEg
REMgYW5kIHBhc3MgdGhlIERDIGluIHRvIFNjcmlwdFBsYWNlLgotICAgICAgICBIV25kREMgaGRj
KDApOwotICAgICAgICBIRk9OVCBoZm9udCA9IGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5oZm9u
dCgpOwotICAgICAgICBIRk9OVCBvbGRGb250ID0gKEhGT05UKVNlbGVjdE9iamVjdChoZGMsIGhm
b250KTsKLSAgICAgICAgcGxhY2VSZXN1bHQgPSBTY3JpcHRQbGFjZShoZGMsIGZvbnREYXRhLT5z
Y3JpcHRDYWNoZSgpLCBnbHlwaHMuZGF0YSgpLCBnbHlwaHMuc2l6ZSgpLCB2aXN1YWxBdHRyaWJ1
dGVzLmRhdGEoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaXRlbS5hLCBh
ZHZhbmNlcy5kYXRhKCksIG9mZnNldHMuZGF0YSgpLCAwKTsKLSAgICAgICAgU2VsZWN0T2JqZWN0
KGhkYywgb2xkRm9udCk7Ci0gICAgfQotICAgIAotICAgIGlmIChGQUlMRUQocGxhY2VSZXN1bHQp
IHx8IGdseXBocy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gQ29u
dmVydCBhbGwgY2hhcnMgdGhhdCBzaG91bGQgYmUgdHJlYXRlZCBhcyBzcGFjZXMgdG8gdXNlIHRo
ZSBzcGFjZSBnbHlwaC4KLSAgICAvLyBXZSBhbHNvIGNyZWF0ZSBhIG1hcCB0aGF0IGFsbG93cyB1
cyB0byBxdWlja2x5IGdvIGZyb20gc3BhY2UgZ2x5cGhzIGJhY2sgdG8gdGhlaXIgY29ycmVzcG9u
ZGluZyBjaGFyYWN0ZXJzLgotICAgIFZlY3RvcjxpbnQ+IHNwYWNlQ2hhcmFjdGVycyhnbHlwaHMu
c2l6ZSgpKTsKLSAgICBzcGFjZUNoYXJhY3RlcnMuZmlsbCgtMSk7Ci0KLSAgICBjb25zdCBmbG9h
dCBjTG9naWNhbFNjYWxlID0gZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLnVzZUdESSgpID8gMS4w
ZiA6IDMyLjBmOwotICAgIGZsb2F0IHNwYWNlV2lkdGggPSBmb250RGF0YS0+c3BhY2VXaWR0aCgp
IC0gZm9udERhdGEtPnN5bnRoZXRpY0JvbGRPZmZzZXQoKTsKLSAgICB1bnNpZ25lZCBsb2dpY2Fs
U3BhY2VXaWR0aCA9IHNwYWNlV2lkdGggKiBjTG9naWNhbFNjYWxlOwotCi0gICAgZm9yIChpbnQg
ayA9IDA7IGsgPCBsZW47IGsrKykgewotICAgICAgICBVQ2hhciBjaCA9ICooc3RyICsgayk7Ci0g
ICAgICAgIGJvb2wgdHJlYXRBc1NwYWNlID0gRm9udENhc2NhZGU6OnRyZWF0QXNTcGFjZShjaCk7
Ci0gICAgICAgIGJvb2wgdHJlYXRBc1plcm9XaWR0aFNwYWNlID0gRm9udENhc2NhZGU6OnRyZWF0
QXNaZXJvV2lkdGhTcGFjZShjaCk7Ci0gICAgICAgIGlmICh0cmVhdEFzU3BhY2UgfHwgdHJlYXRB
c1plcm9XaWR0aFNwYWNlKSB7Ci0gICAgICAgICAgICAvLyBTdWJzdGl0dXRlIGluIHRoZSBzcGFj
ZSBnbHlwaCBhdCB0aGUgYXBwcm9wcmlhdGUgcGxhY2UgaW4gdGhlIGdseXBocwotICAgICAgICAg
ICAgLy8gYXJyYXkuCi0gICAgICAgICAgICBnbHlwaHNbY2x1c3RlcnNba11dID0gZm9udERhdGEt
PnNwYWNlR2x5cGgoKTsKLSAgICAgICAgICAgIGFkdmFuY2VzW2NsdXN0ZXJzW2tdXSA9IHRyZWF0
QXNTcGFjZSA/IGxvZ2ljYWxTcGFjZVdpZHRoIDogMDsKLSAgICAgICAgICAgIGlmICh0cmVhdEFz
U3BhY2UpCi0gICAgICAgICAgICAgICAgc3BhY2VDaGFyYWN0ZXJzW2NsdXN0ZXJzW2tdXSA9IG1f
Y3VycmVudENoYXJhY3RlciArIGsgKyBpdGVtLmlDaGFyUG9zOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgLy8gUG9wdWxhdGUgb3VyIGdseXBoIGJ1ZmZlciB3aXRoIHRoaXMgaW5mb3JtYXRpb24u
Ci0gICAgYm9vbCBoYXNFeHRyYVNwYWNpbmcgPSBtX2ZvbnQubGV0dGVyU3BhY2luZygpIHx8IG1f
Zm9udC53b3JkU3BhY2luZygpIHx8IG1fcGFkZGluZzsKLSAgICAKLSAgICBmbG9hdCBsZWZ0RWRn
ZSA9IG1fcnVuV2lkdGhTb0ZhcjsKLQotICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBnbHlw
aHMuc2l6ZSgpOyBrKyspIHsKLSAgICAgICAgR2x5cGggZ2x5cGggPSBnbHlwaHNba107Ci0gICAg
ICAgIGZsb2F0IGFkdmFuY2UgPSBhZHZhbmNlc1trXSAvIGNMb2dpY2FsU2NhbGU7Ci0gICAgICAg
IGZsb2F0IG9mZnNldFggPSBvZmZzZXRzW2tdLmR1IC8gY0xvZ2ljYWxTY2FsZTsKLSAgICAgICAg
ZmxvYXQgb2Zmc2V0WSA9IG9mZnNldHNba10uZHYgLyBjTG9naWNhbFNjYWxlOwotCi0gICAgICAg
IC8vIE1hdGNoIEFwcEtpdCdzIHJ1bGVzIGZvciB0aGUgaW50ZWdlciB2cy4gbm9uLWludGVnZXIg
cmVuZGVyaW5nIG1vZGVzLgotICAgICAgICBmbG9hdCByb3VuZGVkQWR2YW5jZSA9IHJvdW5kZihh
ZHZhbmNlKTsKLSAgICAgICAgaWYgKCFmb250RGF0YS0+cGxhdGZvcm1EYXRhKCkuaXNTeXN0ZW1G
b250KCkpIHsKLSAgICAgICAgICAgIGFkdmFuY2UgPSByb3VuZGVkQWR2YW5jZTsKLSAgICAgICAg
ICAgIG9mZnNldFggPSByb3VuZGYob2Zmc2V0WCk7Ci0gICAgICAgICAgICBvZmZzZXRZID0gcm91
bmRmKG9mZnNldFkpOwotICAgICAgICB9Ci0KLSAgICAgICAgYWR2YW5jZSArPSBmb250RGF0YS0+
c3ludGhldGljQm9sZE9mZnNldCgpOwotCi0gICAgICAgIGlmIChoYXNFeHRyYVNwYWNpbmcpIHsK
LSAgICAgICAgICAgIC8vIElmIHdlJ3JlIGEgZ2x5cGggd2l0aCBhbiBhZHZhbmNlLCBnbyBhaGVh
ZCBhbmQgYWRkIGluIGxldHRlci1zcGFjaW5nLgotICAgICAgICAgICAgLy8gVGhhdCB3YXkgd2Ug
d2VlZCBvdXQgemVybyB3aWR0aCBsdXJrZXJzLiAgVGhpcyBiZWhhdmlvciBtYXRjaGVzIHRoZSBm
YXN0IHRleHQgY29kZSBwYXRoLgotICAgICAgICAgICAgaWYgKGFkdmFuY2UgJiYgbV9mb250Lmxl
dHRlclNwYWNpbmcoKSkKLSAgICAgICAgICAgICAgICBhZHZhbmNlICs9IG1fZm9udC5sZXR0ZXJT
cGFjaW5nKCk7Ci0KLSAgICAgICAgICAgIC8vIEhhbmRsZSBqdXN0aWZpY2F0aW9uIGFuZCB3b3Jk
LXNwYWNpbmcuCi0gICAgICAgICAgICBpbnQgY2hhcmFjdGVySW5kZXggPSBzcGFjZUNoYXJhY3Rl
cnNba107Ci0gICAgICAgICAgICAvLyBjaGFyYWN0ZXJJbmRleCBpcyBsZWZ0IGF0IHRoZSBpbml0
aWFsIHZhbHVlIG9mIC0xIGZvciBnbHlwaHMgdGhhdCBkbyBub3QgbWFwIGJhY2sgdG8gdHJlYXRl
ZC1hcy1zcGFjZSBjaGFyYWN0ZXJzLgotICAgICAgICAgICAgaWYgKGNoYXJhY3RlckluZGV4ICE9
IC0xKSB7Ci0gICAgICAgICAgICAgICAgLy8gQWNjb3VudCBmb3IgcGFkZGluZy4gV2ViQ29yZSB1
c2VzIHNwYWNlIHBhZGRpbmcgdG8ganVzdGlmeSB0ZXh0LgotICAgICAgICAgICAgICAgIC8vIFdl
IGRpc3RyaWJ1dGUgdGhlIHNwZWNpZmllZCBwYWRkaW5nIG92ZXIgdGhlIGF2YWlsYWJsZSBzcGFj
ZXMgaW4gdGhlIHJ1bi4KLSAgICAgICAgICAgICAgICBpZiAobV9wYWRkaW5nKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIC8vIFVzZSBsZWZ0b3ZlciBwYWRkaW5nIGlmIG5vdCBldmVubHkgZGl2aXNp
YmxlIGJ5IG51bWJlciBvZiBzcGFjZXMuCi0gICAgICAgICAgICAgICAgICAgIGlmIChtX3BhZGRp
bmcgPCBtX3BhZFBlclNwYWNlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhZHZhbmNlICs9
IG1fcGFkZGluZzsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fcGFkZGluZyA9IDA7Ci0gICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX3BhZGRp
bmcgLT0gbV9wYWRQZXJTcGFjZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkdmFuY2UgKz0g
bV9wYWRQZXJTcGFjZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgIC8vIEFjY291bnQgZm9yIHdvcmQtc3BhY2luZy4KLSAgICAgICAg
ICAgICAgICBpZiAoY2hhcmFjdGVySW5kZXggPiAwICYmIG1fZm9udC53b3JkU3BhY2luZygpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIFVDaGFyIGNhbmRpZGF0ZVNwYWNlOwotICAgICAgICAgICAg
ICAgICAgICBpZiAobV9ydW4uaXM4Qml0KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBjYW5k
aWRhdGVTcGFjZSA9ICoobV9ydW4uZGF0YTgoY2hhcmFjdGVySW5kZXggLSAxKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZVNwYWNl
ID0gKihtX3J1bi5kYXRhMTYoY2hhcmFjdGVySW5kZXggLSAxKSk7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgaWYgKCFGb250Q2FzY2FkZTo6dHJlYXRBc1NwYWNlKGNhbmRpZGF0ZVNwYWNlKSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGFkdmFuY2UgKz0gbV9mb250LndvcmRTcGFjaW5nKCk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgbV9y
dW5XaWR0aFNvRmFyICs9IGFkdmFuY2U7Ci0KLSAgICAgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8g
dGFrZSB0aGUgR09GRlNFVFMgZm9yIGNvbWJpbmluZyBnbHlwaHMgYW5kIHN0b3JlIHRoZW0gaW4g
dGhlIGdseXBoIGJ1ZmZlcgotICAgICAgICAvLyBhcyB3ZWxsLCBzbyB0aGF0IHdoZW4gdGhlIHRp
bWUgY29tZXMgdG8gZHJhdyB0aG9zZSBnbHlwaHMsIHdlIGNhbiBhcHBseSB0aGUgYXBwcm9wcmlh
dGUKLSAgICAgICAgLy8gdHJhbnNsYXRpb24uCi0gICAgICAgIGlmIChnbHlwaEJ1ZmZlcikgewot
ICAgICAgICAgICAgR2x5cGhCdWZmZXJBZHZhbmNlIG9yaWdpbihvZmZzZXRYLCAtb2Zmc2V0WSk7
Ci0gICAgICAgICAgICBpZiAoIWdseXBoQnVmZmVyLT5hZHZhbmNlc0NvdW50KCkpCi0gICAgICAg
ICAgICAgICAgZ2x5cGhCdWZmZXItPnNldEluaXRpYWxBZHZhbmNlKG9yaWdpbik7Ci0gICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZ2x5cGhCdWZmZXItPmV4cGFuZExhc3RBZHZhbmNl
KG9yaWdpbik7Ci0gICAgICAgICAgICBHbHlwaEJ1ZmZlckFkdmFuY2UgZ2x5cGhBZHZhbmNlKC1v
cmlnaW4ud2lkdGgoKSArIGFkdmFuY2UsIC1vcmlnaW4uaGVpZ2h0KCkpOwotICAgICAgICAgICAg
Z2x5cGhCdWZmZXItPmFkZChnbHlwaCwgZm9udERhdGEsIGdseXBoQWR2YW5jZSwgc3RyaW5nT2Zm
c2V0c1trXS52YWx1ZU9yKDApICsgc3RyaW5nT2Zmc2V0KTsKLSAgICAgICAgfQotCi0gICAgICAg
IEZsb2F0UmVjdCBnbHlwaEJvdW5kcyA9IGZvbnREYXRhLT5ib3VuZHNGb3JHbHlwaChnbHlwaCk7
Ci0gICAgICAgIGdseXBoQm91bmRzLm1vdmUobV9nbHlwaE9yaWdpbi54KCksIG1fZ2x5cGhPcmln
aW4ueSgpKTsKLSAgICAgICAgbV9taW5HbHlwaEJvdW5kaW5nQm94WCA9IHN0ZDo6bWluKG1fbWlu
R2x5cGhCb3VuZGluZ0JveFgsIGdseXBoQm91bmRzLngoKSk7Ci0gICAgICAgIG1fbWF4R2x5cGhC
b3VuZGluZ0JveFggPSBzdGQ6Om1heChtX21heEdseXBoQm91bmRpbmdCb3hYLCBnbHlwaEJvdW5k
cy5tYXhYKCkpOwotICAgICAgICBtX21pbkdseXBoQm91bmRpbmdCb3hZID0gc3RkOjptaW4obV9t
aW5HbHlwaEJvdW5kaW5nQm94WSwgZ2x5cGhCb3VuZHMueSgpKTsKLSAgICAgICAgbV9tYXhHbHlw
aEJvdW5kaW5nQm94WSA9IHN0ZDo6bWF4KG1fbWF4R2x5cGhCb3VuZGluZ0JveFksIGdseXBoQm91
bmRzLm1heFkoKSk7Ci0gICAgICAgIG1fZ2x5cGhPcmlnaW4ubW92ZShhZHZhbmNlICsgb2Zmc2V0
WCwgLW9mZnNldFkpOwotCi0gICAgICAgIC8vIE11dGF0ZSB0aGUgZ2x5cGggYXJyYXkgdG8gY29u
dGFpbiBvdXIgYWx0ZXJlZCBhZHZhbmNlcy4KLSAgICAgICAgaWYgKG1fY29tcHV0aW5nT2Zmc2V0
UG9zaXRpb24pCi0gICAgICAgICAgICBhZHZhbmNlc1trXSA9IGFkdmFuY2U7Ci0gICAgfQotCi0g
ICAgd2hpbGUgKG1fY29tcHV0aW5nT2Zmc2V0UG9zaXRpb24gJiYgbV9vZmZzZXRYID49IGxlZnRF
ZGdlICYmIG1fb2Zmc2V0WCA8IG1fcnVuV2lkdGhTb0ZhcikgewotICAgICAgICAvLyBUaGUgcG9z
aXRpb24gaXMgc29tZXdoZXJlIGluc2lkZSB0aGlzIHJ1bi4KLSAgICAgICAgaW50IHRyYWlsaW5n
ID0gMDsKLSAgICAgICAgSFJFU1VMVCByYyA9IDo6U2NyaXB0WHRvQ1AobV9vZmZzZXRYIC0gbGVm
dEVkZ2UsIGNsdXN0ZXJzLnNpemUoKSwgZ2x5cGhzLnNpemUoKSwgY2x1c3RlcnMuZGF0YSgpLCB2
aXN1YWxBdHRyaWJ1dGVzLmRhdGEoKSwKLSAgICAgICAgICAgICAgICAgICAgYWR2YW5jZXMuZGF0
YSgpLCAmaXRlbS5hLCAmbV9vZmZzZXRQb3NpdGlvbiwgJnRyYWlsaW5nKTsKLSAgICAgICAgaWYg
KEZBSUxFRChyYykpIHsKLSAgICAgICAgICAgIFdURkxvZ0Fsd2F5cygiVW5pc2NyaWJlQ29udHJv
bGxlcjo6c2hhcGVBbmRQbGFjZUl0ZW06IFNjcmlwdFh0b0NQIGZhaWxlZCByYz0lbHgiLCByYyk7
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAodHJhaWxp
bmcgJiYgbV9pbmNsdWRlUGFydGlhbEdseXBocyAmJiBtX29mZnNldFBvc2l0aW9uIDwgbGVuIC0g
MSkgewotICAgICAgICAgICAgbV9vZmZzZXRQb3NpdGlvbiArPSBtX2N1cnJlbnRDaGFyYWN0ZXIg
KyBtX2l0ZW1zW2ldLmlDaGFyUG9zOwotICAgICAgICAgICAgbV9vZmZzZXRYICs9IG1fcnVuLnJ0
bCgpID8gLXRyYWlsaW5nIDogdHJhaWxpbmc7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBtX2NvbXB1dGluZ09mZnNldFBvc2l0aW9uID0gZmFsc2U7Ci0gICAgICAgICAgICBtX29mZnNl
dFBvc2l0aW9uICs9IG1fY3VycmVudENoYXJhY3RlciArIG1faXRlbXNbaV0uaUNoYXJQb3M7Ci0g
ICAgICAgICAgICBpZiAodHJhaWxpbmcgJiYgbV9pbmNsdWRlUGFydGlhbEdseXBocykKLSAgICAg
ICAgICAgICAgIG1fb2Zmc2V0UG9zaXRpb24rKzsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFVuaXNjcmli
ZUNvbnRyb2xsZXI6OnNoYXBlKGNvbnN0IFVDaGFyKiBzdHIsIGludCBsZW4sIFNDUklQVF9JVEVN
IGl0ZW0sIGNvbnN0IEZvbnQqIGZvbnREYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBWZWN0b3I8V09SRD4mIGdseXBocywgVmVjdG9yPFdPUkQ+JiBjbHVzdGVycywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPFNDUklQVF9WSVNBVFRSPiYgdmlzdWFs
QXR0cmlidXRlcykKLXsKLSAgICBIV25kREMgaGRjOwotICAgIEhGT05UIG9sZEZvbnQgPSAwOwot
ICAgIEhSRVNVTFQgc2hhcGVSZXN1bHQgPSBFX1BFTkRJTkc7Ci0gICAgaW50IGdseXBoQ291bnQg
PSAwOwotCi0gICAgaWYgKCFmb250RGF0YSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
ZG8gewotICAgICAgICBzaGFwZVJlc3VsdCA9IFNjcmlwdFNoYXBlKGhkYywgZm9udERhdGEtPnNj
cmlwdENhY2hlKCksIHdjaGFyRnJvbShzdHIpLCBsZW4sIGdseXBocy5zaXplKCksICZpdGVtLmEs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhzLmRhdGEoKSwgY2x1c3Rl
cnMuZGF0YSgpLCB2aXN1YWxBdHRyaWJ1dGVzLmRhdGEoKSwgJmdseXBoQ291bnQpOwotICAgICAg
ICBpZiAoc2hhcGVSZXN1bHQgPT0gRV9QRU5ESU5HKSB7Ci0gICAgICAgICAgICAvLyBUaGUgc2Ny
aXB0IGNhY2hlIGlzbid0IHByaW1lZCB3aXRoIGVub3VnaCBpbmZvIHlldC4gIFdlIG5lZWQgdG8g
c2VsZWN0IG91ciBIRk9OVCBpbnRvCi0gICAgICAgICAgICAvLyBhIERDIGFuZCBwYXNzIHRoZSBE
QyBpbiB0byBTY3JpcHRTaGFwZS4KLSAgICAgICAgICAgIEFTU0VSVCghaGRjKTsKLSAgICAgICAg
ICAgIGhkYy5zZXRIV25kKDApOwotICAgICAgICAgICAgSEZPTlQgaGZvbnQgPSBmb250RGF0YS0+
cGxhdGZvcm1EYXRhKCkuaGZvbnQoKTsKLSAgICAgICAgICAgIG9sZEZvbnQgPSAoSEZPTlQpU2Vs
ZWN0T2JqZWN0KGhkYywgaGZvbnQpOwotICAgICAgICB9IGVsc2UgaWYgKHNoYXBlUmVzdWx0ID09
IEVfT1VUT0ZNRU1PUlkpIHsKLSAgICAgICAgICAgIC8vIE5lZWQgdG8gcmVzaXplIG91ciBidWZm
ZXJzLgotICAgICAgICAgICAgZ2x5cGhzLnJlc2l6ZShnbHlwaHMuc2l6ZSgpICogMik7Ci0gICAg
ICAgICAgICB2aXN1YWxBdHRyaWJ1dGVzLnJlc2l6ZShnbHlwaHMuc2l6ZSgpKTsKLSAgICAgICAg
fQotICAgIH0gd2hpbGUgKHNoYXBlUmVzdWx0ID09IEVfUEVORElORyB8fCBzaGFwZVJlc3VsdCA9
PSBFX09VVE9GTUVNT1JZKTsKLQotICAgIGlmIChoZGMpCi0gICAgICAgIFNlbGVjdE9iamVjdCho
ZGMsIG9sZEZvbnQpOwotCi0gICAgaWYgKEZBSUxFRChzaGFwZVJlc3VsdCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIGdseXBocy5zaHJpbmsoZ2x5cGhDb3VudCk7Ci0gICAgdmlzdWFs
QXR0cmlidXRlcy5zaHJpbmsoZ2x5cGhDb3VudCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1VuaXNj
cmliZUNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9V
bmlzY3JpYmVDb250cm9sbGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0NjI0
Yzc5YTA4Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vVW5pc2NyaWJlQ29udHJvbGxlci5oCisrKyAvZGV2L251bGwKQEAgLTEsOTAgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgVW5pc2NyaWJlQ29udHJv
bGxlcl9oCi0jZGVmaW5lIFVuaXNjcmliZUNvbnRyb2xsZXJfaAotCi0jaW5jbHVkZSAiRm9udENh
c2NhZGUuaCIKLSNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgotI2luY2x1ZGUgPHVzcDEwLmg+Ci0j
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFVu
aXNjcmliZUNvbnRyb2xsZXIgewotcHVibGljOgotICAgIFVuaXNjcmliZUNvbnRyb2xsZXIoY29u
c3QgRm9udENhc2NhZGUqLCBjb25zdCBUZXh0UnVuJiwgSGFzaFNldDxjb25zdCBGb250Kj4qIGZh
bGxiYWNrRm9udHMgPSAwKTsKLQotICAgIC8vIEFkdmFuY2UgYW5kIG1lYXN1cmUvcGxhY2UgdXAg
dG8gdGhlIHNwZWNpZmllZCBjaGFyYWN0ZXIuCi0gICAgdm9pZCBhZHZhbmNlKHVuc2lnbmVkIHRv
LCBHbHlwaEJ1ZmZlciogPSAwKTsKLQotICAgIC8vIENvbXB1dGUgdGhlIGNoYXJhY3RlciBvZmZz
ZXQgZm9yIGEgZ2l2ZW4geCBjb29yZGluYXRlLgotICAgIGludCBvZmZzZXRGb3JQb3NpdGlvbihp
bnQgeCwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocyk7Ci0KLSAgICAvLyBSZXR1cm5zIHRoZSB3
aWR0aCBvZiBldmVyeXRoaW5nIHdlJ3ZlIGNvbnN1bWVkIHNvIGZhci4KLSAgICBmbG9hdCBydW5X
aWR0aFNvRmFyKCkgY29uc3QgeyByZXR1cm4gbV9ydW5XaWR0aFNvRmFyOyB9Ci0KLSAgICBmbG9h
dCBtaW5HbHlwaEJvdW5kaW5nQm94WCgpIGNvbnN0IHsgcmV0dXJuIG1fbWluR2x5cGhCb3VuZGlu
Z0JveFg7IH0KLSAgICBmbG9hdCBtYXhHbHlwaEJvdW5kaW5nQm94WCgpIGNvbnN0IHsgcmV0dXJu
IG1fbWF4R2x5cGhCb3VuZGluZ0JveFg7IH0KLSAgICBmbG9hdCBtaW5HbHlwaEJvdW5kaW5nQm94
WSgpIGNvbnN0IHsgcmV0dXJuIG1fbWluR2x5cGhCb3VuZGluZ0JveFk7IH0KLSAgICBmbG9hdCBt
YXhHbHlwaEJvdW5kaW5nQm94WSgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4R2x5cGhCb3VuZGluZ0Jv
eFk7IH0KLQotcHJpdmF0ZTogICAgCi0gICAgdm9pZCByZXNldENvbnRyb2xBbmRTdGF0ZSgpOwot
Ci0gICAgdm9pZCBpdGVtaXplU2hhcGVBbmRQbGFjZShjb25zdCBVQ2hhciosIHVuc2lnbmVkIHN0
cmluZ09mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBGb250KiwgR2x5cGhCdWZmZXIqKTsK
LSAgICBib29sIHNoYXBlQW5kUGxhY2VJdGVtKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQgc3RyaW5n
T2Zmc2V0LCB1bnNpZ25lZCBpbmRleCwgY29uc3QgRm9udCosIEdseXBoQnVmZmVyKik7Ci0gICAg
Ym9vbCBzaGFwZShjb25zdCBVQ2hhciogc3RyLCBpbnQgbGVuLCBTQ1JJUFRfSVRFTSwgY29uc3Qg
Rm9udCosCi0gICAgICAgICAgICAgICBWZWN0b3I8V09SRD4mIGdseXBocywgVmVjdG9yPFdPUkQ+
JiBjbHVzdGVycywKLSAgICAgICAgICAgICAgIFZlY3RvcjxTQ1JJUFRfVklTQVRUUj4mIHZpc3Vh
bEF0dHJpYnV0ZXMpOwotCi0gICAgY29uc3QgRm9udENhc2NhZGUmIG1fZm9udDsKLSAgICBjb25z
dCBUZXh0UnVuJiBtX3J1bjsKLSAgICBIYXNoU2V0PGNvbnN0IEZvbnQqPiogbV9mYWxsYmFja0Zv
bnRzOwotICAgIEZsb2F0UG9pbnQgbV9nbHlwaE9yaWdpbjsKLSAgICBmbG9hdCBtX21pbkdseXBo
Qm91bmRpbmdCb3hYOwotICAgIGZsb2F0IG1fbWF4R2x5cGhCb3VuZGluZ0JveFg7Ci0gICAgZmxv
YXQgbV9taW5HbHlwaEJvdW5kaW5nQm94WTsKLSAgICBmbG9hdCBtX21heEdseXBoQm91bmRpbmdC
b3hZOwotCi0gICAgU0NSSVBUX0NPTlRST0wgbV9jb250cm9sOwotICAgIFNDUklQVF9TVEFURSBt
X3N0YXRlOwotICAgIFZlY3RvcjxTQ1JJUFRfSVRFTT4gbV9pdGVtczsKLSAKLSAgICB1bnNpZ25l
ZCBtX2N1cnJlbnRDaGFyYWN0ZXI7Ci0gICAgaW50IG1fZW5kOwotCi0gICAgZmxvYXQgbV9ydW5X
aWR0aFNvRmFyOwotICAgIGZsb2F0IG1fcGFkZGluZzsKLSAgICBmbG9hdCBtX3BhZFBlclNwYWNl
OwotCi0gICAgYm9vbCBtX2NvbXB1dGluZ09mZnNldFBvc2l0aW9uOwotICAgIGJvb2wgbV9pbmNs
dWRlUGFydGlhbEdseXBoczsKLSAgICBmbG9hdCBtX29mZnNldFg7Ci0gICAgaW50IG1fb2Zmc2V0
UG9zaXRpb247Ci19OwotCi19Ci0jZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>385582</attachid>
            <date>2019-12-12 23:11:26 -0800</date>
            <delta_ts>2019-12-13 01:58:15 -0800</delta_ts>
            <desc>WIP patch</desc>
            <filename>complex2.diff</filename>
            <type>text/plain</type>
            <size>52392</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luLmNtYWtlIGIvU291cmNlL1dl
YkNvcmUvUGxhdGZvcm1XaW4uY21ha2UKaW5kZXggZDFmZDRlYjEyZGQuLmRlODZmZDNhMDQxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbi5jbWFrZQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9QbGF0Zm9ybVdpbi5jbWFrZQpAQCAtNTEsNiArNTEsNyBAQCBsaXN0KEFQUEVORCBX
ZWJDb3JlX1NPVVJDRVMKIAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db2xvckRpcmVjdDJE
LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db21wbGV4VGV4dENvbnRyb2xsZXJEaXJl
Y3RXcml0ZS5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vQ29tcGxleFRleHRDb250cm9s
bGVyVW5pc2NyaWJlLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9ESUJQaXhlbERhdGEu
Y3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Zsb2F0UG9pbnREaXJlY3QyRC5jcHAKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRmxvYXRSZWN0RGlyZWN0MkQuY3BwCkBAIC02OSw3ICs3
MCw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9TaW1wbGVGb250RGF0YVdpbi5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vVHJh
bnNmb3JtYXRpb25NYXRyaXhEaXJlY3QyRC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
VHJhbnNmb3JtYXRpb25NYXRyaXhXaW4uY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1Vu
aXNjcmliZUNvbnRyb2xsZXIuY3BwCiAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL3dpbi9Eb3dubG9h
ZEJ1bmRsZVdpbi5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL3dpbi9OZXR3b3JrU3RhdGVOb3Rp
Zmllcldpbi5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwCmluZGV4IDg0NzI4NDllYWQwLi4xODcxOGRl
OTVkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29tcGxl
eFRleHRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwCkBAIC00MywzMyArNDMsNiBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLSNpZiBQTEFURk9STShXSU4pICYmICFVU0UoRElSRUNUMkQpCi0KLWNs
YXNzIFRleHRMYXlvdXQgewotfTsKLQotdm9pZCBUZXh0TGF5b3V0RGVsZXRlcjo6b3BlcmF0b3Io
KShUZXh0TGF5b3V0KikgY29uc3QKLXsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPFRleHRMYXlvdXQs
IFRleHRMYXlvdXREZWxldGVyPiBGb250Q2FzY2FkZTo6Y3JlYXRlTGF5b3V0KFJlbmRlclRleHQm
LCBmbG9hdCwgYm9vbCkgY29uc3QKLXsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotZmxvYXQg
Rm9udENhc2NhZGU6OndpZHRoKFRleHRMYXlvdXQmLCB1bnNpZ25lZCwgdW5zaWduZWQsIEhhc2hT
ZXQ8Y29uc3QgRm9udCo+KikKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1
cm4gMDsKLX0KLQotdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmNvbGxlY3RDb21wbGV4VGV4
dFJ1bnNGb3JDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQsIHVuc2lnbmVkLCBjb25z
dCBGb250KikKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotI2Vsc2UKLQogY2xh
c3MgVGV4dExheW91dCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CkBA
IC04OTMsNiArODY2LDQgQEAgQ29tcGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4dFJ1bjo6
Q29tcGxleFRleHRSdW4oY29uc3QgVmVjdG9yPEZsb2F0U2l6ZT4mIGEKIHsKIH0KIAotI2VuZGlm
Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcAppbmRleCA0MTI3NDdhY2Y4Yy4uM2YxMDRlYzBjN2Ig
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5j
cHAKQEAgLTQxLDEwICs0MSw2IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0cmluZ0hhc2gu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKLSNpZiBQTEFURk9STShX
SU4pICYmICFVU0UoRElSRUNUMkQpCi0jaW5jbHVkZSAiVW5pc2NyaWJlQ29udHJvbGxlci5oIgot
I2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIFdURjo6VW5p
Y29kZTsKQEAgLTM1MCwxNSArMzQ2LDYgQEAgZmxvYXQgRm9udENhc2NhZGU6OndpZHRoT2ZUZXh0
UmFuZ2UoY29uc3QgVGV4dFJ1biYgcnVuLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZAogCiAgICAg
YXV0byBjb2RlUGF0aFRvVXNlID0gY29kZVBhdGgocnVuKTsKICAgICBpZiAoY29kZVBhdGhUb1Vz
ZSA9PSBDb21wbGV4KSB7Ci0jaWYgUExBVEZPUk0oV0lOKSAmJiAhVVNFKERJUkVDVDJEKQotICAg
ICAgICBVbmlzY3JpYmVDb250cm9sbGVyIGl0KHRoaXMsIHJ1bik7Ci0gICAgICAgIGl0LmFkdmFu
Y2UoZnJvbSk7Ci0gICAgICAgIG9mZnNldEJlZm9yZVJhbmdlID0gaXQucnVuV2lkdGhTb0Zhcigp
OwotICAgICAgICBpdC5hZHZhbmNlKHRvKTsKLSAgICAgICAgb2Zmc2V0QWZ0ZXJSYW5nZSA9IGl0
LnJ1bldpZHRoU29GYXIoKTsKLSAgICAgICAgaXQuYWR2YW5jZSh0byk7Ci0gICAgICAgIHRvdGFs
V2lkdGggPSBpdC5ydW5XaWR0aFNvRmFyKCk7Ci0jZWxzZQogICAgICAgICBDb21wbGV4VGV4dENv
bnRyb2xsZXIgY29tcGxleEl0ZXJhdG9yKCp0aGlzLCBydW4sIGZhbHNlLCBmYWxsYmFja0ZvbnRz
KTsKICAgICAgICAgY29tcGxleEl0ZXJhdG9yLmFkdmFuY2UoZnJvbSwgbnVsbHB0ciwgSW5jbHVk
ZVBhcnRpYWxHbHlwaHMsIGZhbGxiYWNrRm9udHMpOwogICAgICAgICBvZmZzZXRCZWZvcmVSYW5n
ZSA9IGNvbXBsZXhJdGVyYXRvci5ydW5XaWR0aFNvRmFyKCk7CkBAIC0zNjYsNyArMzUzLDYgQEAg
ZmxvYXQgRm9udENhc2NhZGU6OndpZHRoT2ZUZXh0UmFuZ2UoY29uc3QgVGV4dFJ1biYgcnVuLCB1
bnNpZ25lZCBmcm9tLCB1bnNpZ25lZAogICAgICAgICBvZmZzZXRBZnRlclJhbmdlID0gY29tcGxl
eEl0ZXJhdG9yLnJ1bldpZHRoU29GYXIoKTsKICAgICAgICAgY29tcGxleEl0ZXJhdG9yLmFkdmFu
Y2UocnVuLmxlbmd0aCgpLCBudWxscHRyLCBJbmNsdWRlUGFydGlhbEdseXBocywgZmFsbGJhY2tG
b250cyk7CiAgICAgICAgIHRvdGFsV2lkdGggPSBjb21wbGV4SXRlcmF0b3IucnVuV2lkdGhTb0Zh
cigpOwotI2VuZGlmCiAgICAgfSBlbHNlIHsKICAgICAgICAgV2lkdGhJdGVyYXRvciBzaW1wbGVJ
dGVyYXRvcih0aGlzLCBydW4sIGZhbGxiYWNrRm9udHMpOwogICAgICAgICBzaW1wbGVJdGVyYXRv
ci5hZHZhbmNlKGZyb20sIG51bGxwdHIpOwpAQCAtMTM5Nyw3ICsxMzgzLDYgQEAgZmxvYXQgRm9u
dENhc2NhZGU6OmdldEdseXBoc0FuZEFkdmFuY2VzRm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVu
JiBydW4sIHVuc2lnbmUKICAgICByZXR1cm4gaW5pdGlhbEFkdmFuY2U7CiB9CiAKLSNpZiAhUExB
VEZPUk0oV0lOKSB8fCBVU0UoRElSRUNUMkQpCiBmbG9hdCBGb250Q2FzY2FkZTo6Z2V0R2x5cGhz
QW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIHVuc2lnbmVkIGZy
b20sIHVuc2lnbmVkIHRvLCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIEZvclRleHRFbXBoYXNp
c09yTm90IGZvclRleHRFbXBoYXNpcykgY29uc3QKIHsKICAgICBmbG9hdCBpbml0aWFsQWR2YW5j
ZTsKQEAgLTE0MjcsNyArMTQxMiw2IEBAIGZsb2F0IEZvbnRDYXNjYWRlOjpnZXRHbHlwaHNBbmRB
ZHZhbmNlc0ZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgdW5zaWduCiAKICAgICBy
ZXR1cm4gaW5pdGlhbEFkdmFuY2U7CiB9Ci0jZW5kaWYKIAogdm9pZCBGb250Q2FzY2FkZTo6ZHJh
d0VtcGhhc2lzTWFya3NGb3JTaW1wbGVUZXh0KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29u
c3QgVGV4dFJ1biYgcnVuLCBjb25zdCBBdG9tU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50
JiBwb2ludCwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8pIGNvbnN0CiB7CkBAIC0xNTQ1LDcg
KzE1MjksNiBAQCBmbG9hdCBGb250Q2FzY2FkZTo6ZmxvYXRXaWR0aEZvclNpbXBsZVRleHQoY29u
c3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IEZvbgogICAgIHJldHVybiBpdC5tX3J1bldp
ZHRoU29GYXI7CiB9CiAKLSNpZiAhUExBVEZPUk0oV0lOKSB8fCBVU0UoRElSRUNUMkQpCiBmbG9h
dCBGb250Q2FzY2FkZTo6ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1
biwgSGFzaFNldDxjb25zdCBGb250Kj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqIGds
eXBoT3ZlcmZsb3cpIGNvbnN0CiB7CiAgICAgQ29tcGxleFRleHRDb250cm9sbGVyIGNvbnRyb2xs
ZXIoKnRoaXMsIHJ1biwgdHJ1ZSwgZmFsbGJhY2tGb250cyk7CkBAIC0xNTU3LDcgKzE1NDAsNiBA
QCBmbG9hdCBGb250Q2FzY2FkZTo6ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRS
dW4mIHJ1biwgSGFzaFNldDxjb25zdCBGbwogICAgIH0KICAgICByZXR1cm4gY29udHJvbGxlci50
b3RhbFdpZHRoKCk7CiB9Ci0jZW5kaWYKIAogdm9pZCBGb250Q2FzY2FkZTo6YWRqdXN0U2VsZWN0
aW9uUmVjdEZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBMYXlvdXRSZWN0JiBzZWxl
Y3Rpb25SZWN0LCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bykgY29uc3QKIHsKQEAgLTE1Nzgs
NyArMTU2MCw2IEBAIHZvaWQgRm9udENhc2NhZGU6OmFkanVzdFNlbGVjdGlvblJlY3RGb3JTaW1w
bGVUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgTGF5b3V0UmVjCiAgICAgc2VsZWN0aW9uUmVjdC5z
ZXRXaWR0aChMYXlvdXRVbml0Ojpmcm9tRmxvYXRDZWlsKGFmdGVyV2lkdGggLSBiZWZvcmVXaWR0
aCkpOwogfQogCi0jaWYgIVBMQVRGT1JNKFdJTikgfHwgVVNFKERJUkVDVDJEKQogdm9pZCBGb250
Q2FzY2FkZTo6YWRqdXN0U2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4m
IHJ1biwgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQg
dG8pIGNvbnN0CiB7CiAgICAgQ29tcGxleFRleHRDb250cm9sbGVyIGNvbnRyb2xsZXIoKnRoaXMs
IHJ1bik7CkBAIC0xNTkzLDcgKzE1NzQsNiBAQCB2b2lkIEZvbnRDYXNjYWRlOjphZGp1c3RTZWxl
Y3Rpb25SZWN0Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBMYXlvdXRSZQogICAg
ICAgICBzZWxlY3Rpb25SZWN0Lm1vdmUoYmVmb3JlV2lkdGgsIDApOwogICAgIHNlbGVjdGlvblJl
Y3Quc2V0V2lkdGgoTGF5b3V0VW5pdDo6ZnJvbUZsb2F0Q2VpbChhZnRlcldpZHRoIC0gYmVmb3Jl
V2lkdGgpKTsKIH0KLSNlbmRpZgogCiBpbnQgRm9udENhc2NhZGU6Om9mZnNldEZvclBvc2l0aW9u
Rm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGZsb2F0IHgsIGJvb2wgaW5jbHVkZVBh
cnRpYWxHbHlwaHMpIGNvbnN0CiB7CkBAIC0xNjM4LDEzICsxNjE4LDExIEBAIGludCBGb250Q2Fz
Y2FkZTo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwg
ZmxvYXQgeCwgYm9vCiAgICAgcmV0dXJuIG9mZnNldDsKIH0KIAotI2lmICFQTEFURk9STShXSU4p
IHx8IFVTRShESVJFQ1QyRCkKIGludCBGb250Q2FzY2FkZTo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JD
b21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGZsb2F0IHgsIGJvb2wgaW5jbHVkZVBhcnRp
YWxHbHlwaHMpIGNvbnN0CiB7CiAgICAgQ29tcGxleFRleHRDb250cm9sbGVyIGNvbnRyb2xsZXIo
KnRoaXMsIHJ1bik7CiAgICAgcmV0dXJuIGNvbnRyb2xsZXIub2Zmc2V0Rm9yUG9zaXRpb24oeCwg
aW5jbHVkZVBhcnRpYWxHbHlwaHMpOwogfQotI2VuZGlmCiAKICNpZiAhUExBVEZPUk0oQ09DT0Ep
ICYmICFVU0UoSEFSRkJVWlopCiAvLyBGSVhNRTogVW5pZnkgdGhpcyB3aXRoIHRoZSBtYWNPUyBh
bmQgaU9TIGltcGxlbWVudGF0aW9uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0NvbXBsZXhUZXh0Q29udHJvbGxlclVuaXNjcmliZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vQ29tcGxleFRleHRDb250cm9sbGVyVW5p
c2NyaWJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNzVjYzE0
YjY2MDMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vQ29tcGxleFRleHRDb250cm9sbGVyVW5pc2NyaWJlLmNwcApAQCAtMCwwICsxLDI0OCBA
QAorLyoKKyogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisqIGFyZSBtZXQ6CisqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorKiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworKiBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDb21wbGV4VGV4dENvbnRyb2xsZXIuaCIKKworI2lm
ICFVU0UoRElSRUNUMkQpCisKKyNpbmNsdWRlICJGb250Q2FjaGUuaCIKKyNpbmNsdWRlICJGb250
Q2FzY2FkZS5oIgorI2luY2x1ZGUgIkhXbmREQy5oIgorI2luY2x1ZGUgPHVzcDEwLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGJvb2wgc2hhcGVCeVVuaXNjcmliZShjb25zdCBV
Q2hhciogc3RyLCBpbnQgbGVuLCBTQ1JJUFRfSVRFTSBpdGVtLCBjb25zdCBGb250KiBmb250RGF0
YSwKKyAgICBWZWN0b3I8V09SRD4mIGdseXBocywgVmVjdG9yPFdPUkQ+JiBjbHVzdGVycywKKyAg
ICBWZWN0b3I8U0NSSVBUX1ZJU0FUVFI+JiB2aXN1YWxBdHRyaWJ1dGVzKQoreworICAgIEhXbmRE
QyBoZGM7CisgICAgSEZPTlQgb2xkRm9udCA9IDA7CisgICAgSFJFU1VMVCBzaGFwZVJlc3VsdCA9
IEVfUEVORElORzsKKyAgICBpbnQgZ2x5cGhDb3VudCA9IDA7CisKKyAgICBpZiAoIWZvbnREYXRh
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBkbyB7CisgICAgICAgIHNoYXBlUmVzdWx0
ID0gU2NyaXB0U2hhcGUoaGRjLCBmb250RGF0YS0+c2NyaXB0Q2FjaGUoKSwgd2NoYXJGcm9tKHN0
ciksIGxlbiwgZ2x5cGhzLnNpemUoKSwgJml0ZW0uYSwKKyAgICAgICAgICAgIGdseXBocy5kYXRh
KCksIGNsdXN0ZXJzLmRhdGEoKSwgdmlzdWFsQXR0cmlidXRlcy5kYXRhKCksICZnbHlwaENvdW50
KTsKKyAgICAgICAgaWYgKHNoYXBlUmVzdWx0ID09IEVfUEVORElORykgeworICAgICAgICAgICAg
Ly8gVGhlIHNjcmlwdCBjYWNoZSBpc24ndCBwcmltZWQgd2l0aCBlbm91Z2ggaW5mbyB5ZXQuIFdl
IG5lZWQgdG8gc2VsZWN0IG91ciBIRk9OVCBpbnRvCisgICAgICAgICAgICAvLyBhIERDIGFuZCBw
YXNzIHRoZSBEQyBpbiB0byBTY3JpcHRTaGFwZS4KKyAgICAgICAgICAgIEFTU0VSVCghaGRjKTsK
KyAgICAgICAgICAgIGhkYy5zZXRIV25kKDApOworICAgICAgICAgICAgSEZPTlQgaGZvbnQgPSBm
b250RGF0YS0+cGxhdGZvcm1EYXRhKCkuaGZvbnQoKTsKKyAgICAgICAgICAgIG9sZEZvbnQgPSAo
SEZPTlQpU2VsZWN0T2JqZWN0KGhkYywgaGZvbnQpOworICAgICAgICB9IGVsc2UgaWYgKHNoYXBl
UmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpIHsKKyAgICAgICAgICAgIC8vIE5lZWQgdG8gcmVzaXpl
IG91ciBidWZmZXJzLgorICAgICAgICAgICAgZ2x5cGhzLnJlc2l6ZShnbHlwaHMuc2l6ZSgpICog
Mik7CisgICAgICAgICAgICB2aXN1YWxBdHRyaWJ1dGVzLnJlc2l6ZShnbHlwaHMuc2l6ZSgpKTsK
KyAgICAgICAgfQorICAgIH0gd2hpbGUgKHNoYXBlUmVzdWx0ID09IEVfUEVORElORyB8fCBzaGFw
ZVJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKKworICAgIGlmIChoZGMpCisgICAgICAgIFNlbGVj
dE9iamVjdChoZGMsIG9sZEZvbnQpOworCisgICAgaWYgKEZBSUxFRChzaGFwZVJlc3VsdCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGdseXBocy5zaHJpbmsoZ2x5cGhDb3VudCk7Cisg
ICAgdmlzdWFsQXR0cmlidXRlcy5zaHJpbmsoZ2x5cGhDb3VudCk7CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworY2xhc3MgVW5pc2NyaWJlQ29udHJvbGxlciB7CitwdWJsaWM6CisgICAgVW5pc2Ny
aWJlQ29udHJvbGxlcihjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVu
LCBWZWN0b3I8U0NSSVBUX0lURU0+JiBpdGVtcykKKyAgICAgICAgOiBtX2ZvbnQoZm9udCkKKyAg
ICAgICAgLCBtX3J1bihydW4pCisgICAgICAgICwgbV9pdGVtcyhpdGVtcykgeyB9CisKKyAgICBi
b29sIHNoYXBlQW5kUGxhY2VJdGVtKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQsIGNvbnN0IEZvbnQq
LCBHbHlwaEJ1ZmZlciopOworCitwcml2YXRlOgorICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBtX2Zv
bnQ7CisgICAgY29uc3QgVGV4dFJ1biYgbV9ydW47CisgICAgVmVjdG9yPFNDUklQVF9JVEVNPiYg
bV9pdGVtczsKK307CisKKworYm9vbCBVbmlzY3JpYmVDb250cm9sbGVyOjpzaGFwZUFuZFBsYWNl
SXRlbShjb25zdCBVQ2hhciogY3AsIHVuc2lnbmVkIGksIGNvbnN0IEZvbnQqIGZvbnREYXRhLCBH
bHlwaEJ1ZmZlciogZ2x5cGhCdWZmZXIpCit7CisgICAgLy8gRGV0ZXJtaW5lIHRoZSBzdHJpbmcg
Zm9yIHRoaXMgaXRlbS4KKyAgICBjb25zdCBVQ2hhciogc3RyID0gY3AgKyBtX2l0ZW1zW2ldLmlD
aGFyUG9zOworICAgIGludCBsZW4gPSBtX2l0ZW1zW2krMV0uaUNoYXJQb3MgLSBtX2l0ZW1zW2ld
LmlDaGFyUG9zOworICAgIFNDUklQVF9JVEVNIGl0ZW0gPSBtX2l0ZW1zW2ldOworCisgICAgLy8g
U2V0IHVwIGJ1ZmZlcnMgdG8gaG9sZCB0aGUgcmVzdWx0cyBvZiBzaGFwaW5nIHRoZSBpdGVtLgor
ICAgIFZlY3RvcjxXT1JEPiBnbHlwaHM7CisgICAgVmVjdG9yPFdPUkQ+IGNsdXN0ZXJzOworICAg
IFZlY3RvcjxTQ1JJUFRfVklTQVRUUj4gdmlzdWFsQXR0cmlidXRlczsKKyAgICBjbHVzdGVycy5y
ZXNpemUobGVuKTsKKworICAgIC8vIFNoYXBlIHRoZSBpdGVtLgorICAgIC8vIFRoZSByZWNvbW1l
bmRlZCBzaXplIGZvciB0aGUgZ2x5cGggYnVmZmVyIGlzIDEuNSAqIHRoZSBjaGFyYWN0ZXIgbGVu
Z3RoICsgMTYgaW4gdGhlIHVuaXNjcmliZSBkb2NzLgorICAgIC8vIEFwcGFyZW50bHkgdGhpcyBp
cyBhIGdvb2Qgc2l6ZSB0byBhdm9pZCBoYXZpbmcgdG8gbWFrZSByZXBlYXRlZCBjYWxscyB0byBT
Y3JpcHRTaGFwZS4KKyAgICBnbHlwaHMucmVzaXplKDEuNSAqIGxlbiArIDE2KTsKKyAgICB2aXN1
YWxBdHRyaWJ1dGVzLnJlc2l6ZShnbHlwaHMuc2l6ZSgpKTsKKworICAgIGlmICghc2hhcGVCeVVu
aXNjcmliZShzdHIsIGxlbiwgaXRlbSwgZm9udERhdGEsIGdseXBocywgY2x1c3RlcnMsIHZpc3Vh
bEF0dHJpYnV0ZXMpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIFZlY3RvcjxPcHRpb25h
bDx1bnNpZ25lZD4+IHN0cmluZ09mZnNldHMoZ2x5cGhzLnNpemUoKSk7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGxlbjsgKytpKSB7CisgICAgICAgIGlmIChzdHJpbmdPZmZzZXRzW2Ns
dXN0ZXJzW2ldXSkKKyAgICAgICAgICAgIHN0cmluZ09mZnNldHNbY2x1c3RlcnNbaV1dID0gc3Rk
OjptaW4oKnN0cmluZ09mZnNldHNbY2x1c3RlcnNbaV1dLCBpKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgc3RyaW5nT2Zmc2V0c1tjbHVzdGVyc1tpXV0gPSBpOworICAgIH0KKworICAgIC8v
IFdlIG5vdyBoYXZlIGEgY29sbGVjdGlvbiBvZiBnbHlwaHMuCisgICAgVmVjdG9yPEdPRkZTRVQ+
IG9mZnNldHM7CisgICAgVmVjdG9yPGludD4gYWR2YW5jZXM7CisgICAgb2Zmc2V0cy5yZXNpemUo
Z2x5cGhzLnNpemUoKSk7CisgICAgYWR2YW5jZXMucmVzaXplKGdseXBocy5zaXplKCkpOworICAg
IEhSRVNVTFQgcGxhY2VSZXN1bHQgPSBTY3JpcHRQbGFjZSgwLCBmb250RGF0YS0+c2NyaXB0Q2Fj
aGUoKSwgZ2x5cGhzLmRhdGEoKSwgZ2x5cGhzLnNpemUoKSwgdmlzdWFsQXR0cmlidXRlcy5kYXRh
KCksCisgICAgICAgICZpdGVtLmEsIGFkdmFuY2VzLmRhdGEoKSwgb2Zmc2V0cy5kYXRhKCksIDAp
OworICAgIGlmIChwbGFjZVJlc3VsdCA9PSBFX1BFTkRJTkcpIHsKKyAgICAgICAgLy8gVGhlIHNj
cmlwdCBjYWNoZSBpc24ndCBwcmltZWQgd2l0aCBlbm91Z2ggaW5mbyB5ZXQuIFdlIG5lZWQgdG8g
c2VsZWN0IG91ciBIRk9OVCBpbnRvCisgICAgICAgIC8vIGEgREMgYW5kIHBhc3MgdGhlIERDIGlu
IHRvIFNjcmlwdFBsYWNlLgorICAgICAgICBIV25kREMgaGRjKDApOworICAgICAgICBIRk9OVCBo
Zm9udCA9IGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5oZm9udCgpOworICAgICAgICBIRk9OVCBv
bGRGb250ID0gKEhGT05UKVNlbGVjdE9iamVjdChoZGMsIGhmb250KTsKKyAgICAgICAgcGxhY2VS
ZXN1bHQgPSBTY3JpcHRQbGFjZShoZGMsIGZvbnREYXRhLT5zY3JpcHRDYWNoZSgpLCBnbHlwaHMu
ZGF0YSgpLCBnbHlwaHMuc2l6ZSgpLCB2aXN1YWxBdHRyaWJ1dGVzLmRhdGEoKSwKKyAgICAgICAg
ICAgICZpdGVtLmEsIGFkdmFuY2VzLmRhdGEoKSwgb2Zmc2V0cy5kYXRhKCksIDApOworICAgICAg
ICBTZWxlY3RPYmplY3QoaGRjLCBvbGRGb250KTsKKyAgICB9CisgICAgCisgICAgaWYgKEZBSUxF
RChwbGFjZVJlc3VsdCkgfHwgZ2x5cGhzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICBjb25zdCBmbG9hdCBjTG9naWNhbFNjYWxlID0gZm9udERhdGEtPnBsYXRmb3JtRGF0
YSgpLnVzZUdESSgpID8gMS4wZiA6IDMyLjBmOworICAgIGZsb2F0IHNwYWNlV2lkdGggPSBmb250
RGF0YS0+c3BhY2VXaWR0aCgpIC0gZm9udERhdGEtPnN5bnRoZXRpY0JvbGRPZmZzZXQoKTsKKyAg
ICB1bnNpZ25lZCBsb2dpY2FsU3BhY2VXaWR0aCA9IHNwYWNlV2lkdGggKiBjTG9naWNhbFNjYWxl
OworCisgICAgZm9yIChpbnQgayA9IDA7IGsgPCBsZW47IGsrKykgeworICAgICAgICBVQ2hhciBj
aCA9ICooc3RyICsgayk7CisgICAgICAgIGJvb2wgdHJlYXRBc1NwYWNlID0gRm9udENhc2NhZGU6
OnRyZWF0QXNTcGFjZShjaCk7CisgICAgICAgIGJvb2wgdHJlYXRBc1plcm9XaWR0aFNwYWNlID0g
Rm9udENhc2NhZGU6OnRyZWF0QXNaZXJvV2lkdGhTcGFjZShjaCk7CisgICAgICAgIGlmICh0cmVh
dEFzU3BhY2UgfHwgdHJlYXRBc1plcm9XaWR0aFNwYWNlKSB7CisgICAgICAgICAgICAvLyBTdWJz
dGl0dXRlIGluIHRoZSBzcGFjZSBnbHlwaCBhdCB0aGUgYXBwcm9wcmlhdGUgcGxhY2UgaW4gdGhl
IGdseXBocworICAgICAgICAgICAgLy8gYXJyYXkuCisgICAgICAgICAgICBnbHlwaHNbY2x1c3Rl
cnNba11dID0gZm9udERhdGEtPnNwYWNlR2x5cGgoKTsKKyAgICAgICAgICAgIGFkdmFuY2VzW2Ns
dXN0ZXJzW2tdXSA9IHRyZWF0QXNTcGFjZSA/IGxvZ2ljYWxTcGFjZVdpZHRoIDogMDsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBnbHlwaHMuc2l6ZSgp
OyBrKyspIHsKKyAgICAgICAgR2x5cGggZ2x5cGggPSBnbHlwaHNba107CisgICAgICAgIGZsb2F0
IGFkdmFuY2UgPSBhZHZhbmNlc1trXSAvIGNMb2dpY2FsU2NhbGU7CisgICAgICAgIGZsb2F0IG9m
ZnNldFggPSBvZmZzZXRzW2tdLmR1IC8gY0xvZ2ljYWxTY2FsZTsKKyAgICAgICAgZmxvYXQgb2Zm
c2V0WSA9IG9mZnNldHNba10uZHYgLyBjTG9naWNhbFNjYWxlOworCisgICAgICAgIC8vIE1hdGNo
IEFwcEtpdCdzIHJ1bGVzIGZvciB0aGUgaW50ZWdlciB2cy4gbm9uLWludGVnZXIgcmVuZGVyaW5n
IG1vZGVzLgorICAgICAgICBmbG9hdCByb3VuZGVkQWR2YW5jZSA9IHJvdW5kZihhZHZhbmNlKTsK
KyAgICAgICAgaWYgKCFmb250RGF0YS0+cGxhdGZvcm1EYXRhKCkuaXNTeXN0ZW1Gb250KCkpIHsK
KyAgICAgICAgICAgIGFkdmFuY2UgPSByb3VuZGVkQWR2YW5jZTsKKyAgICAgICAgICAgIG9mZnNl
dFggPSByb3VuZGYob2Zmc2V0WCk7CisgICAgICAgICAgICBvZmZzZXRZID0gcm91bmRmKG9mZnNl
dFkpOworICAgICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gdGFrZSB0aGUg
R09GRlNFVFMgZm9yIGNvbWJpbmluZyBnbHlwaHMgYW5kIHN0b3JlIHRoZW0gaW4gdGhlIGdseXBo
IGJ1ZmZlcgorICAgICAgICAvLyBhcyB3ZWxsLCBzbyB0aGF0IHdoZW4gdGhlIHRpbWUgY29tZXMg
dG8gZHJhdyB0aG9zZSBnbHlwaHMsIHdlIGNhbiBhcHBseSB0aGUgYXBwcm9wcmlhdGUKKyAgICAg
ICAgLy8gdHJhbnNsYXRpb24uCisgICAgICAgIGlmIChnbHlwaEJ1ZmZlcikgeworICAgICAgICAg
ICAgR2x5cGhCdWZmZXJBZHZhbmNlIG9yaWdpbihvZmZzZXRYLCAtb2Zmc2V0WSk7CisgICAgICAg
ICAgICBpZiAoIWdseXBoQnVmZmVyLT5hZHZhbmNlc0NvdW50KCkpCisgICAgICAgICAgICAgICAg
Z2x5cGhCdWZmZXItPnNldEluaXRpYWxBZHZhbmNlKG9yaWdpbik7CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgZ2x5cGhCdWZmZXItPmV4cGFuZExhc3RBZHZhbmNlKG9yaWdpbik7
CisgICAgICAgICAgICBHbHlwaEJ1ZmZlckFkdmFuY2UgZ2x5cGhBZHZhbmNlKC1vcmlnaW4ud2lk
dGgoKSArIGFkdmFuY2UsIC1vcmlnaW4uaGVpZ2h0KCkpOworICAgICAgICAgICAgZ2x5cGhCdWZm
ZXItPmFkZChnbHlwaCwgZm9udERhdGEsIGdseXBoQWR2YW5jZSwgc3RyaW5nT2Zmc2V0c1trXS52
YWx1ZU9yKDApKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit2
b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Y29sbGVjdENvbXBsZXhUZXh0UnVuc0ZvckNoYXJh
Y3RlcnMoY29uc3QgVUNoYXIqIGNwLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHN0cmluZ0xv
Y2F0aW9uLCBjb25zdCBGb250KiBmb250KQoreworICAgIGlmICghZm9udCkgeworICAgICAgICAv
LyBDcmVhdGUgYSBydW4gb2YgbWlzc2luZyBnbHlwaHMgZnJvbSB0aGUgcHJpbWFyeSBmb250Lgor
ICAgICAgICBtX2NvbXBsZXhUZXh0UnVucy5hcHBlbmQoQ29tcGxleFRleHRSdW46OmNyZWF0ZSht
X2ZvbnQucHJpbWFyeUZvbnQoKSwgY3AsIHN0cmluZ0xvY2F0aW9uLCBsZW5ndGgsIDAsIGxlbmd0
aCwgbV9ydW4ubHRyKCkpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFZlY3RvcjxT
Q1JJUFRfSVRFTT4gaXRlbXMoNik7CisgICAgaW50IG51bUl0ZW1zID0gMDsKKyAgICBmb3IgKDs7
KSB7CisgICAgICAgIFNDUklQVF9DT05UUk9MIGNvbnRyb2wgeyB9OworICAgICAgICBTQ1JJUFRf
U1RBVEUgc3RhdGUgeyB9OworICAgICAgICAvLyBTZXQgdXAgdGhlIGNvcnJlY3QgZGlyZWN0aW9u
IGZvciB0aGUgcnVuLgorICAgICAgICBzdGF0ZS51QmlkaUxldmVsID0gbV9ydW4ucnRsKCk7Cisg
ICAgICAgIC8vIExvY2sgdGhlIGNvcnJlY3QgZGlyZWN0aW9uYWwgb3ZlcnJpZGUuCisgICAgICAg
IHN0YXRlLmZPdmVycmlkZURpcmVjdGlvbiA9IG1fcnVuLmRpcmVjdGlvbmFsT3ZlcnJpZGUoKTsK
KworICAgICAgICAvLyBTY3JpcHRJdGVtaXplIG1heSB3cml0ZSAoY01heEl0ZW1zICsgMSkgU0NS
SVBUX0lURU0uCisgICAgICAgIEhSRVNVTFQgaHIgPSBTY3JpcHRJdGVtaXplKHdjaGFyRnJvbShj
cCksIGxlbmd0aCwgaXRlbXMuc2l6ZSgpIC0gMSwgJmNvbnRyb2wsICZzdGF0ZSwgaXRlbXMuZGF0
YSgpLCAmbnVtSXRlbXMpOworICAgICAgICBpZiAoaHIgIT0gRV9PVVRPRk1FTU9SWSkgeworICAg
ICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChocikpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgaXRlbXMucmVzaXplKGl0ZW1zLnNpemUoKSAqIDIpOworICAgIH0KKyAg
ICBpdGVtcy5yZXNpemUobnVtSXRlbXMgKyAxKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
bnVtSXRlbXM7IGkrKykgeworICAgICAgICBHbHlwaEJ1ZmZlciBnbHlwaEJ1ZmZlcjsKKyAgICAg
ICAgZ2x5cGhCdWZmZXIuc2F2ZU9mZnNldHNJblN0cmluZygpOworCisgICAgICAgIFVuaXNjcmli
ZUNvbnRyb2xsZXIgdWMobV9mb250LCBtX3J1biwgaXRlbXMpOworCisgICAgICAgIGlmICghdWMu
c2hhcGVBbmRQbGFjZUl0ZW0oY3AsIGksIGZvbnQsICZnbHlwaEJ1ZmZlcikpCisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgVmVjdG9yPEdseXBoPiBnbHlwaHMoZ2x5cGhCdWZmZXIuc2l6
ZSgpKTsKKyAgICAgICAgVmVjdG9yPEZsb2F0U2l6ZT4gYWR2YW5jZXMoZ2x5cGhCdWZmZXIuc2l6
ZSgpKTsKKyAgICAgICAgVmVjdG9yPHVuc2lnbmVkPiBzdHJpbmdJbmRpY2VzKGdseXBoQnVmZmVy
LnNpemUoKSk7CisKKyAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBnbHlwaEJ1ZmZlci5z
aXplKCk7IGorKykgeworICAgICAgICAgICAgZ2x5cGhzW2pdID0gZ2x5cGhCdWZmZXIuZ2x5cGhB
dChqKTsKKyAgICAgICAgICAgIGFkdmFuY2VzW2pdID0gRmxvYXRTaXplKGdseXBoQnVmZmVyLmFk
dmFuY2VBdChqKSk7CisgICAgICAgICAgICBzdHJpbmdJbmRpY2VzW2pdID0gaXRlbXNbaV0uaUNo
YXJQb3MgKyBnbHlwaEJ1ZmZlci5vZmZzZXRJblN0cmluZyhqKTsKKyAgICAgICAgfQorCisgICAg
ICAgIFZlY3RvcjxGbG9hdFBvaW50PiBvcmlnaW5zOworICAgICAgICBGbG9hdFNpemUgaW5pdGlh
bEFkdmFuY2UoZ2x5cGhCdWZmZXIuaW5pdGlhbEFkdmFuY2UoKSk7CisgICAgICAgIGJvb2wgbHRy
ID0gIWl0ZW1zW2ldLmEuZlJUTDsKKyAgICAgICAgbV9jb21wbGV4VGV4dFJ1bnMuYXBwZW5kKENv
bXBsZXhUZXh0UnVuOjpjcmVhdGUoYWR2YW5jZXMsIG9yaWdpbnMsIGdseXBocywgc3RyaW5nSW5k
aWNlcywgaW5pdGlhbEFkdmFuY2UsICpmb250LCBjcCwgc3RyaW5nTG9jYXRpb24sIGxlbmd0aCwg
aXRlbXNbaV0uaUNoYXJQb3MsIGl0ZW1zW2krMV0uaUNoYXJQb3MsIGx0cikpOworICAgIH0KK30K
KworfQorCisjZW5kaWYgLy8gIVVTRShESVJFQ1QyRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q0dXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDR1dpbi5jcHAKaW5kZXggMGVmNjU1ZDhkMDUuLjMz
Zjg1MmViNmU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vRm9udENHV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vRm9udENHV2luLmNwcApAQCAtMzQsNyArMzQsNiBAQAogI2luY2x1ZGUgIkdseXBoQnVmZmVy
LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgot
I2luY2x1ZGUgIlVuaXNjcmliZUNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJXZWJDb3JlVGV4dFJl
bmRlcmVyLmgiCiAjaW5jbHVkZSA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KICNpbmNs
dWRlIDx3dGYvTWF0aEV4dHJhcy5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYXNjYWRlRGlyZWN0MkQuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYXNjYWRlRGlyZWN0MkQuY3BwCmluZGV4IDkxMTEy
ZDk2NWM4Li5iMmQzNDcxYjhhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0ZvbnRDYXNjYWRlRGlyZWN0MkQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FzY2FkZURpcmVjdDJELmNwcApAQCAtMzcsNyAr
MzcsNiBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZURpcmVjdDJE
LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dERpcmVj
dDJELmgiCi0jaW5jbHVkZSAiVW5pc2NyaWJlQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIldlYkNv
cmVUZXh0UmVuZGVyZXIuaCIKICNpbmNsdWRlIDxkMmQxLmg+CiAjaW5jbHVkZSA8ZHdyaXRlXzMu
aD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250
V2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250V2luLmNw
cAppbmRleCAxY2FhODAyMmUyNi4uNTJjYjg4ZjUzZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250V2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFdpbi5jcHAKQEAgLTM1LDEwICszNSw2IEBACiAj
aW5jbHVkZSAiVGV4dFJ1bi5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKLSNpZiAh
VVNFKERJUkVDVDJEKQotI2luY2x1ZGUgIlVuaXNjcmliZUNvbnRyb2xsZXIuaCIKLSNlbmRpZgot
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGJvb2wgRm9udENhc2NhZGU6OmNhblJldHVybkZhbGxi
YWNrRm9udHNGb3JDb21wbGV4VGV4dCgpCkBAIC01MSw3MiArNDcsNCBAQCBib29sIEZvbnRDYXNj
YWRlOjpjYW5FeHBhbmRBcm91bmRJZGVvZ3JhcGhzSW5Db21wbGV4VGV4dCgpCiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCi0jaWYgIVVTRShESVJFQ1QyRCkKLQotdm9pZCBGb250Q2FzY2FkZTo6YWRq
dXN0U2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgTGF5b3V0
UmVjdCYgc2VsZWN0aW9uUmVjdCwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8pIGNvbnN0Ci17
Ci0gICAgVW5pc2NyaWJlQ29udHJvbGxlciBpdCh0aGlzLCBydW4pOwotICAgIGl0LmFkdmFuY2Uo
ZnJvbSk7Ci0gICAgZmxvYXQgYmVmb3JlV2lkdGggPSBpdC5ydW5XaWR0aFNvRmFyKCk7Ci0gICAg
aXQuYWR2YW5jZSh0byk7Ci0gICAgZmxvYXQgYWZ0ZXJXaWR0aCA9IGl0LnJ1bldpZHRoU29GYXIo
KTsKLQotICAgIGlmIChydW4ucnRsKCkpIHsKLSAgICAgICAgaXQuYWR2YW5jZShydW4ubGVuZ3Ro
KCkpOwotICAgICAgICBzZWxlY3Rpb25SZWN0Lm1vdmUoaXQucnVuV2lkdGhTb0ZhcigpIC0gYWZ0
ZXJXaWR0aCwgMCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHNlbGVjdGlvblJlY3QubW92ZShiZWZv
cmVXaWR0aCwgMCk7Ci0gICAgc2VsZWN0aW9uUmVjdC5zZXRXaWR0aChhZnRlcldpZHRoIC0gYmVm
b3JlV2lkdGgpOwotfQotCi1mbG9hdCBGb250Q2FzY2FkZTo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNG
b3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVk
IHRvLCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIEZvclRleHRFbXBoYXNpc09yTm90IGZvclRl
eHRFbXBoYXNpcykgY29uc3QKLXsKLSAgICBpZiAoZm9yVGV4dEVtcGhhc2lzKSB7Ci0gICAgICAg
IC8vIEZJWE1FOiBBZGQgZm9yVGV4dEVtcGhhc2lzIHBhcmVtZXRlciB0byBVbmlzY3JpYmVDb250
cm9sbGVyIGFuZCB1c2UgaXQuCi0gICAgICAgIExPR19FUlJPUigiTm90IGltcGxlbWVudGVkIGZv
ciB0ZXh0IGVtcGhhc2lzLiIpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBVbmlz
Y3JpYmVDb250cm9sbGVyIGNvbnRyb2xsZXIodGhpcywgcnVuKTsKLSAgICBjb250cm9sbGVyLmFk
dmFuY2UoZnJvbSk7Ci0gICAgZmxvYXQgYmVmb3JlV2lkdGggPSBjb250cm9sbGVyLnJ1bldpZHRo
U29GYXIoKTsKLSAgICBjb250cm9sbGVyLmFkdmFuY2UodG8sICZnbHlwaEJ1ZmZlcik7Ci0KLSAg
ICBpZiAoZ2x5cGhCdWZmZXIuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGZs
b2F0IGFmdGVyV2lkdGggPSBjb250cm9sbGVyLnJ1bldpZHRoU29GYXIoKTsKLQotICAgIGlmIChy
dW4ucnRsKCkpIHsKLSAgICAgICAgY29udHJvbGxlci5hZHZhbmNlKHJ1bi5sZW5ndGgoKSk7Ci0g
ICAgICAgIHJldHVybiBjb250cm9sbGVyLnJ1bldpZHRoU29GYXIoKSAtIGFmdGVyV2lkdGg7Ci0g
ICAgfQotICAgIHJldHVybiBiZWZvcmVXaWR0aDsKLX0KLQotZmxvYXQgRm9udENhc2NhZGU6OmZs
b2F0V2lkdGhGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3Qg
Rm9udCo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93KSBjb25z
dAotewotICAgIFVuaXNjcmliZUNvbnRyb2xsZXIgY29udHJvbGxlcih0aGlzLCBydW4sIGZhbGxi
YWNrRm9udHMpOwotICAgIGNvbnRyb2xsZXIuYWR2YW5jZShydW4ubGVuZ3RoKCkpOwotICAgIGlm
IChnbHlwaE92ZXJmbG93KSB7Ci0gICAgICAgIGdseXBoT3ZlcmZsb3ctPnRvcCA9IHN0ZDo6bWF4
PGludD4oZ2x5cGhPdmVyZmxvdy0+dG9wLCBjZWlsZigtY29udHJvbGxlci5taW5HbHlwaEJvdW5k
aW5nQm94WSgpKSAtIChnbHlwaE92ZXJmbG93LT5jb21wdXRlQm91bmRzID8gMCA6IGZvbnRNZXRy
aWNzKCkuYXNjZW50KCkpKTsKLSAgICAgICAgZ2x5cGhPdmVyZmxvdy0+Ym90dG9tID0gc3RkOjpt
YXg8aW50PihnbHlwaE92ZXJmbG93LT5ib3R0b20sIGNlaWxmKGNvbnRyb2xsZXIubWF4R2x5cGhC
b3VuZGluZ0JveFkoKSkgLSAoZ2x5cGhPdmVyZmxvdy0+Y29tcHV0ZUJvdW5kcyA/IDAgIDogZm9u
dE1ldHJpY3MoKS5kZXNjZW50KCkpKTsKLSAgICAgICAgZ2x5cGhPdmVyZmxvdy0+bGVmdCA9IHN0
ZDo6bWF4PGludD4oMCwgY2VpbGYoLWNvbnRyb2xsZXIubWluR2x5cGhCb3VuZGluZ0JveFgoKSkp
OwotICAgICAgICBnbHlwaE92ZXJmbG93LT5yaWdodCA9IHN0ZDo6bWF4PGludD4oMCwgY2VpbGYo
Y29udHJvbGxlci5tYXhHbHlwaEJvdW5kaW5nQm94WCgpIC0gY29udHJvbGxlci5ydW5XaWR0aFNv
RmFyKCkpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGNvbnRyb2xsZXIucnVuV2lkdGhTb0ZhcigpOwot
fQotCi1pbnQgRm9udENhc2NhZGU6Om9mZnNldEZvclBvc2l0aW9uRm9yQ29tcGxleFRleHQoY29u
c3QgVGV4dFJ1biYgcnVuLCBmbG9hdCB4RmxvYXQsIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMp
IGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IFRoaXMgdHJ1bmNhdGlvbiBpcyBub3QgYSBwcm9ibGVt
IGZvciBIVE1MLCBidXQgb25seSBhZmZlY3RzIFNWRywgd2hpY2ggcGFzc2VzIGZsb2F0aW5nLXBv
aW50IG51bWJlcnMKLSAgICAvLyB0byBGb250Q2FzY2FkZTo6b2Zmc2V0Rm9yUG9zaXRpb24oKS4g
QnVnIGh0dHA6Ly93ZWJraXQub3JnL2IvNDA2NzMgdHJhY2tzIGZpeGluZyB0aGlzIHByb2JsZW0u
Ci0gICAgaW50IHggPSBzdGF0aWNfY2FzdDxpbnQ+KHhGbG9hdCk7Ci0KLSAgICBVbmlzY3JpYmVD
b250cm9sbGVyIGNvbnRyb2xsZXIodGhpcywgcnVuKTsKLSAgICByZXR1cm4gY29udHJvbGxlci5v
ZmZzZXRGb3JQb3NpdGlvbih4LCBpbmNsdWRlUGFydGlhbEdseXBocyk7Ci19Ci0KLSNlbmRpZgot
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vVW5p
c2NyaWJlQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vVW5pc2NyaWJlQ29udHJvbGxlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDQ3NGM0ODYwZmYxLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vVW5pc2NyaWJlQ29udHJvbGxlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0
NTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJVbmlzY3JpYmVDb250cm9sbGVyLmgiCi0KLSNpbmNsdWRlICJGb250
LmgiCi0jaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKLSNpbmNsdWRlICJIV25kREMuaCIKLSNpbmNs
dWRlICJUZXh0UnVuLmgiCi0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC93aW4vV0NoYXJTdHJpbmdFeHRyYXMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
dXNpbmcgbmFtZXNwYWNlIFdURjo6VW5pY29kZTsKLQotLy8gRklYTUU6IFJlYXJjaGl0ZWN0IHRo
aXMgdG8gYmUgbW9yZSBsaWtlIFdpZHRoSXRlcmF0b3IgaW4gRm9udC5jcHAuICBIYXZlIGFuIGFk
dmFuY2UoKSBtZXRob2QKLS8vIHRoYXQgZG9lcyBzdHVmZiBpbiB0aGF0IG1ldGhvZCBpbnN0ZWFk
IG9mIGRvaW5nIGV2ZXJ5dGhpbmcgaW4gdGhlIGNvbnN0cnVjdG9yLiAgSGF2ZSBhZHZhbmNlKCkK
LS8vIHRha2UgdGhlIEdseXBoQnVmZmVyIGFzIGFuIGFyZyBzbyB0aGF0IHdlIGRvbid0IGhhdmUg
dG8gcG9wdWxhdGUgdGhlIGdseXBoIGJ1ZmZlciB3aGVuCi0vLyBtZWFzdXJpbmcuCi1VbmlzY3Jp
YmVDb250cm9sbGVyOjpVbmlzY3JpYmVDb250cm9sbGVyKGNvbnN0IEZvbnRDYXNjYWRlKiBmb250
LCBjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRz
KQotICAgIDogbV9mb250KCpmb250KQotICAgICwgbV9ydW4ocnVuKQotICAgICwgbV9mYWxsYmFj
a0ZvbnRzKGZhbGxiYWNrRm9udHMpCi0gICAgLCBtX21pbkdseXBoQm91bmRpbmdCb3hYKHN0ZDo6
bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgoKSkKLSAgICAsIG1fbWF4R2x5cGhCb3VuZGluZ0Jv
eFgoc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46Om1pbigpKQotICAgICwgbV9taW5HbHlwaEJv
dW5kaW5nQm94WShzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6bWF4KCkpCi0gICAgLCBtX21h
eEdseXBoQm91bmRpbmdCb3hZKHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptaW4oKSkKLSAg
ICAsIG1fY3VycmVudENoYXJhY3RlcigwKQotICAgICwgbV9lbmQocnVuLmxlbmd0aCgpKQotICAg
ICwgbV9ydW5XaWR0aFNvRmFyKDApCi0gICAgLCBtX3BhZGRpbmcocnVuLmV4cGFuc2lvbigpKQot
ICAgICwgbV9jb21wdXRpbmdPZmZzZXRQb3NpdGlvbihmYWxzZSkKLSAgICAsIG1faW5jbHVkZVBh
cnRpYWxHbHlwaHMoZmFsc2UpCi0gICAgLCBtX29mZnNldFgoMCkKLSAgICAsIG1fb2Zmc2V0UG9z
aXRpb24oMCkKLXsKLSAgICBpZiAoIW1fcGFkZGluZykKLSAgICAgICAgbV9wYWRQZXJTcGFjZSA9
IDA7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGZsb2F0IG51bVNwYWNlcyA9IDA7Ci0gICAgICAgIGZv
ciAoaW50IHMgPSAwOyBzIDwgbV9ydW4ubGVuZ3RoKCk7IHMrKykgewotICAgICAgICAgICAgaWYg
KEZvbnRDYXNjYWRlOjp0cmVhdEFzU3BhY2UobV9ydW5bc10pKQotICAgICAgICAgICAgICAgIG51
bVNwYWNlcysrOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG51bVNwYWNlcyA9PSAwKQotICAg
ICAgICAgICAgbV9wYWRQZXJTcGFjZSA9IDA7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1f
cGFkUGVyU3BhY2UgPSBtX3BhZGRpbmcgLyBudW1TcGFjZXM7Ci0gICAgfQotCi0gICAgLy8gTnVs
bCBvdXQgb3VyIHVuaXNjcmliZSBzdHJ1Y3RzCi0gICAgcmVzZXRDb250cm9sQW5kU3RhdGUoKTsK
LX0KLQotaW50IFVuaXNjcmliZUNvbnRyb2xsZXI6Om9mZnNldEZvclBvc2l0aW9uKGludCB4LCBi
b29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKQotewotICAgIG1fY29tcHV0aW5nT2Zmc2V0UG9zaXRp
b24gPSB0cnVlOwotICAgIG1faW5jbHVkZVBhcnRpYWxHbHlwaHMgPSBpbmNsdWRlUGFydGlhbEds
eXBoczsKLSAgICBtX29mZnNldFggPSB4OwotICAgIG1fb2Zmc2V0UG9zaXRpb24gPSAwOwotICAg
IGFkdmFuY2UobV9ydW4ubGVuZ3RoKCkpOwotICAgIGlmIChtX2NvbXB1dGluZ09mZnNldFBvc2l0
aW9uKSB7Ci0gICAgICAgIC8vIFRoZSBwb2ludCBpcyB0byB0aGUgbGVmdCBvciB0byB0aGUgcmln
aHQgb2YgdGhlIGVudGlyZSBydW4uCi0gICAgICAgIGlmICgobV9vZmZzZXRYID49IG1fcnVuV2lk
dGhTb0ZhciAmJiBtX3J1bi5sdHIoKSkgfHwgKG1fb2Zmc2V0WCA8IDAgJiYgbV9ydW4ucnRsKCkp
KQotICAgICAgICAgICAgbV9vZmZzZXRQb3NpdGlvbiA9IG1fZW5kOwotICAgIH0KLSAgICBtX2Nv
bXB1dGluZ09mZnNldFBvc2l0aW9uID0gZmFsc2U7Ci0gICAgcmV0dXJuIG1fb2Zmc2V0UG9zaXRp
b247Ci19Ci0KLXZvaWQgVW5pc2NyaWJlQ29udHJvbGxlcjo6YWR2YW5jZSh1bnNpZ25lZCBvZmZz
ZXQsIEdseXBoQnVmZmVyKiBnbHlwaEJ1ZmZlcikKLXsKLSAgICAvLyBGSVhNRTogV2UgcmVhbGx5
IHdhbnQgdG8gYmUgdXNpbmcgYSBuZXdlciB2ZXJzaW9uIG9mIFVuaXNjcmliZSB0aGF0IHN1cHBv
cnRzIHRoZSBuZXcgT3BlblR5cGUKLSAgICAvLyBmdW5jdGlvbnMuICBUaG9zZSBmdW5jdGlvbnMg
d291bGQgYWxsb3cgdXMgdG8gdHVybiBvZmYga2VybmluZyBhbmQgbGlnYXR1cmVzLiAgV2l0aG91
dCBiZWluZyBhYmxlCi0gICAgLy8gdG8gZG8gdGhhdCwgd2Ugd2lsbCBoYXZlIGJ1Z2d5IGxpbmUg
YnJlYWtpbmcgYW5kIG1ldHJpY3Mgd2hlbiBzaW1wbGUgYW5kIGNvbXBsZXggdGV4dCBhcmUgY2xv
c2UKLSAgICAvLyB0b2dldGhlciAodGhlIGNvbXBsZXggY29kZSBwYXRoIHdpbGwgbmFycm93IHRo
ZSB0ZXh0IGJlY2F1c2Ugb2Yga2VybmluZyBhbmQgbGlnYXR1cmVzIGFuZCB0aGVuCi0gICAgLy8g
d2hlbiBiaWRpIHByb2Nlc3Npbmcgc3BsaXRzIGludG8gbXVsdGlwbGUgcnVucywgdGhlIHNpbXBs
ZSBwb3J0aW9ucyB3aWxsIGdldCB3aWRlciBhbmQgY2F1c2UgdXMgdG8KLSAgICAvLyBzcGlsbCBv
ZmYgdGhlIGVkZ2Ugb2YgYSBsaW5lKS4KLSAgICBpZiAoc3RhdGljX2Nhc3Q8aW50PihvZmZzZXQp
ID4gbV9lbmQpCi0gICAgICAgIG9mZnNldCA9IG1fZW5kOwotCi0gICAgaW50IGxlbmd0aCA9IG9m
ZnNldCAtIG1fY3VycmVudENoYXJhY3RlcjsKLSAgICBpZiAobGVuZ3RoIDw9IDApCi0gICAgICAg
IHJldHVybjsKLQotICAgIFN0cmluZyBidWZmZXJGb3IxNkJpdERhdGE7Ci0KLSAgICAvLyBJdGVt
aXplIHRoZSBzdHJpbmcuCi0gICAgY29uc3QgVUNoYXIqIGNwID0gbnVsbHB0cjsKLSAgICBpZiAo
bV9ydW4uaXM4Qml0KCkpIHsKLSAgICAgICAgLy8gVW5pc2NyaWJlIG9ubHkgZGVhbHMgd2l0aCAx
Ni1iaXQgY2hhcmFjdGVycy4gTXVzdCBnZW5lcmF0ZSB0aGVtIG5vdy4KLSAgICAgICAgYnVmZmVy
Rm9yMTZCaXREYXRhID0gU3RyaW5nOjptYWtlMTZCaXRGcm9tOEJpdFNvdXJjZShtX3J1bi5kYXRh
OChtX2N1cnJlbnRDaGFyYWN0ZXIpLCBsZW5ndGgpOwotICAgICAgICBjcCA9IGJ1ZmZlckZvcjE2
Qml0RGF0YS5jaGFyYWN0ZXJzMTYoKTsKLSAgICB9IGVsc2UKLSAgICAgICAgY3AgPSBtX3J1bi5k
YXRhMTYobV9jdXJyZW50Q2hhcmFjdGVyKTsKLQotICAgIHVuc2lnbmVkIGJhc2VDaGFyYWN0ZXIg
PSBtX2N1cnJlbnRDaGFyYWN0ZXI7Ci0KLSAgICAvLyBXZSBicmVhayB1cCBpdGVtaXphdGlvbiBv
ZiB0aGUgc3RyaW5nIGJ5IGZvbnREYXRhIGFuZCAoaWYgbmVlZGVkKSB0aGUgdXNlIG9mIHNtYWxs
IGNhcHMuCi0KLSAgICAvLyBGSVhNRTogSXQncyBpbmNvbnNpc3RlbnQgdGhhdCB3ZSB1c2UgbG9n
aWNhbCBvcmRlciB3aGVuIGl0ZW1pemluZywgc2luY2UgdGhpcwotICAgIC8vIGRvZXMgbm90IG1h
dGNoIG5vcm1hbCBSVEwuCi0KLSAgICAvLyBGSVhNRTogVGhpcyBmdW5jdGlvbiBzaG91bGQgZGVj
b2RlIHN1cnJvZ2F0ZSBwYWlycy4gQ3VycmVudGx5IGl0IG1ha2VzIGxpdHRsZSBkaWZmZXJlbmNl
IHRoYXQKLSAgICAvLyBpdCBkb2VzIG5vdCBiZWNhdXNlIHRoZSBmb250IGNhY2hlIG9uIFdpbmRv
d3MgZG9lcyBub3Qgc3VwcG9ydCBub24tQk1QIGNoYXJhY3RlcnMuCi0gICAgVmVjdG9yPFVDaGFy
LCAyNTY+IHNtYWxsQ2Fwc0J1ZmZlcjsKLSAgICBpZiAobV9mb250LmlzU21hbGxDYXBzKCkpCi0g
ICAgICAgIHNtYWxsQ2Fwc0J1ZmZlci5yZXNpemUobGVuZ3RoKTsKLQotICAgIHVuc2lnbmVkIGlu
ZGV4T2ZGb250VHJhbnNpdGlvbiA9IG1fcnVuLnJ0bCgpID8gbGVuZ3RoIC0gMSA6IDA7Ci0gICAg
Y29uc3QgVUNoYXIqIGN1cnIgPSBtX3J1bi5ydGwoKSA/IGNwICsgbGVuZ3RoICAtIDEgOiBjcDsK
LSAgICBjb25zdCBVQ2hhciogZW5kID0gbV9ydW4ucnRsKCkgPyBjcCAtIDEgOiBjcCArIGxlbmd0
aDsKLQotICAgIGNvbnN0IEZvbnQqIGZvbnREYXRhOwotICAgIGNvbnN0IEZvbnQqIG5leHRGb250
RGF0YSA9IG1fZm9udC5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoKmN1cnIsIGZhbHNlKS5mb250Owot
Ci0gICAgVUNoYXIgbmV3QyA9IDA7Ci0KLSAgICBib29sIGlzU21hbGxDYXBzOwotICAgIGJvb2wg
bmV4dElzU21hbGxDYXBzID0gbV9mb250LmlzU21hbGxDYXBzKCkgJiYgIShVX0dFVF9HQ19NQVNL
KCpjdXJyKSAmIFVfR0NfTV9NQVNLKSAmJiAobmV3QyA9IHVfdG91cHBlcigqY3VycikpICE9ICpj
dXJyOwotCi0gICAgaWYgKG5leHRJc1NtYWxsQ2FwcykKLSAgICAgICAgc21hbGxDYXBzQnVmZmVy
W2N1cnIgLSBjcF0gPSBuZXdDOwotCi0gICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgY3VyciA9
IG1fcnVuLnJ0bCgpID8gY3VyciAtIDEgOiBjdXJyICsgMTsKLSAgICAgICAgaWYgKGN1cnIgPT0g
ZW5kKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgZm9udERhdGEgPSBuZXh0Rm9udERh
dGE7Ci0gICAgICAgIGlzU21hbGxDYXBzID0gbmV4dElzU21hbGxDYXBzOwotICAgICAgICBpbnQg
aW5kZXggPSBjdXJyIC0gY3A7Ci0gICAgICAgIFVDaGFyIGMgPSAqY3VycjsKLQotICAgICAgICBi
b29sIGZvcmNlU21hbGxDYXBzID0gaXNTbWFsbENhcHMgJiYgKFVfR0VUX0dDX01BU0soYykgJiBV
X0dDX01fTUFTSyk7Ci0gICAgICAgIG5leHRGb250RGF0YSA9IG1fZm9udC5nbHlwaERhdGFGb3JD
aGFyYWN0ZXIoKmN1cnIsIGZhbHNlLCBmb3JjZVNtYWxsQ2FwcyA/IFNtYWxsQ2Fwc1ZhcmlhbnQg
OiBBdXRvVmFyaWFudCkuZm9udDsKLSAgICAgICAgaWYgKG1fZm9udC5pc1NtYWxsQ2FwcygpKSB7
Ci0gICAgICAgICAgICBuZXh0SXNTbWFsbENhcHMgPSBmb3JjZVNtYWxsQ2FwcyB8fCAobmV3QyA9
IHVfdG91cHBlcihjKSkgIT0gYzsKLSAgICAgICAgICAgIGlmIChuZXh0SXNTbWFsbENhcHMpCi0g
ICAgICAgICAgICAgICAgc21hbGxDYXBzQnVmZmVyW2luZGV4XSA9IGZvcmNlU21hbGxDYXBzID8g
YyA6IG5ld0M7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobV9mYWxsYmFja0ZvbnRzICYmIGZv
bnREYXRhICYmIG5leHRGb250RGF0YSAhPSBmb250RGF0YSAmJiBmb250RGF0YSAhPSAmbV9mb250
LnByaW1hcnlGb250KCkpCi0gICAgICAgICAgICBtX2ZhbGxiYWNrRm9udHMtPmFkZChmb250RGF0
YSk7Ci0KLSAgICAgICAgaWYgKG5leHRGb250RGF0YSAhPSBmb250RGF0YSB8fCBuZXh0SXNTbWFs
bENhcHMgIT0gaXNTbWFsbENhcHMpIHsKLSAgICAgICAgICAgIGludCBpdGVtU3RhcnQgPSBtX3J1
bi5ydGwoKSA/IGluZGV4ICsgMSA6IGluZGV4T2ZGb250VHJhbnNpdGlvbjsKLSAgICAgICAgICAg
IGludCBpdGVtTGVuZ3RoID0gbV9ydW4ucnRsKCkgPyBpbmRleE9mRm9udFRyYW5zaXRpb24gLSBp
bmRleCA6IGluZGV4IC0gaW5kZXhPZkZvbnRUcmFuc2l0aW9uOwotICAgICAgICAgICAgbV9jdXJy
ZW50Q2hhcmFjdGVyID0gYmFzZUNoYXJhY3RlciArIGl0ZW1TdGFydDsKLSAgICAgICAgICAgIGl0
ZW1pemVTaGFwZUFuZFBsYWNlKChpc1NtYWxsQ2FwcyA/IHNtYWxsQ2Fwc0J1ZmZlci5kYXRhKCkg
OiBjcCkgKyBpdGVtU3RhcnQsIGl0ZW1TdGFydCwgaXRlbUxlbmd0aCwgZm9udERhdGEsIGdseXBo
QnVmZmVyKTsKLSAgICAgICAgICAgIGluZGV4T2ZGb250VHJhbnNpdGlvbiA9IGluZGV4OwotICAg
ICAgICB9Ci0gICAgfQotICAgIAotICAgIGludCBpdGVtTGVuZ3RoID0gbV9ydW4ucnRsKCkgPyBp
bmRleE9mRm9udFRyYW5zaXRpb24gKyAxIDogbGVuZ3RoIC0gaW5kZXhPZkZvbnRUcmFuc2l0aW9u
OwotICAgIGlmIChpdGVtTGVuZ3RoKSB7Ci0gICAgICAgIGlmIChtX2ZhbGxiYWNrRm9udHMgJiYg
bmV4dEZvbnREYXRhICYmIG5leHRGb250RGF0YSAhPSAmbV9mb250LnByaW1hcnlGb250KCkpCi0g
ICAgICAgICAgICBtX2ZhbGxiYWNrRm9udHMtPmFkZChuZXh0Rm9udERhdGEpOwotCi0gICAgICAg
IGludCBpdGVtU3RhcnQgPSBtX3J1bi5ydGwoKSA/IDAgOiBpbmRleE9mRm9udFRyYW5zaXRpb247
Ci0gICAgICAgIG1fY3VycmVudENoYXJhY3RlciA9IGJhc2VDaGFyYWN0ZXIgKyBpdGVtU3RhcnQ7
Ci0gICAgICAgIGl0ZW1pemVTaGFwZUFuZFBsYWNlKChuZXh0SXNTbWFsbENhcHMgPyBzbWFsbENh
cHNCdWZmZXIuZGF0YSgpIDogY3ApICsgaXRlbVN0YXJ0LCBpdGVtU3RhcnQsIGl0ZW1MZW5ndGgs
IG5leHRGb250RGF0YSwgZ2x5cGhCdWZmZXIpOwotICAgIH0KLQotICAgIG1fY3VycmVudENoYXJh
Y3RlciA9IGJhc2VDaGFyYWN0ZXIgKyBsZW5ndGg7Ci19Ci0KLXZvaWQgVW5pc2NyaWJlQ29udHJv
bGxlcjo6aXRlbWl6ZVNoYXBlQW5kUGxhY2UoY29uc3QgVUNoYXIqIGNwLCB1bnNpZ25lZCBzdHJp
bmdPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgRm9udCogZm9udERhdGEsIEdseXBoQnVm
ZmVyKiBnbHlwaEJ1ZmZlcikKLXsKLSAgICAvLyBTY3JpcHRJdGVtaXplIChpbiBXaW5kb3dzIFhQ
IHZlcnNpb25zIHByaW9yIHRvIFNQMikgY2FuIG92ZXJmbG93IGJ5IDEuICBUaGlzIGlzIHdoeSB0
aGVyZSBpcyBhbiBleHRyYSBlbXB0eSBpdGVtCi0gICAgLy8gaGFuZ2luZyBvdXQgYXQgdGhlIGVu
ZCBvZiB0aGUgYXJyYXkKLSAgICBtX2l0ZW1zLnJlc2l6ZSg2KTsKLSAgICBpbnQgbnVtSXRlbXMg
PSAwOwotICAgIEhSRVNVTFQgcmMgPSBTX09LOwotICAgIHdoaWxlIChyYyA9IDo6U2NyaXB0SXRl
bWl6ZSh3Y2hhckZyb20oY3ApLCBsZW5ndGgsIG1faXRlbXMuc2l6ZSgpIC0gMSwgJm1fY29udHJv
bCwgJm1fc3RhdGUsIG1faXRlbXMuZGF0YSgpLCAmbnVtSXRlbXMpID09IEVfT1VUT0ZNRU1PUlkp
IHsKLSAgICAgICAgbV9pdGVtcy5yZXNpemUobV9pdGVtcy5zaXplKCkgKiAyKTsKLSAgICAgICAg
cmVzZXRDb250cm9sQW5kU3RhdGUoKTsKLSAgICB9Ci0gICAgaWYgKEZBSUxFRChyYykpIHsKLSAg
ICAgICAgV1RGTG9nQWx3YXlzKCJVbmlzY3JpYmVDb250cm9sbGVyOjppdGVtaXplU2hhcGVBbmRQ
bGFjZTogU2NyaXB0SXRlbWl6ZSBmYWlsZWQsIHJjPSVseCIsIHJjKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICBtX2l0ZW1zLnJlc2l6ZShudW1JdGVtcyArIDEpOwotCi0gICAgaWYgKG1f
cnVuLnJ0bCgpKSB7Ci0gICAgICAgIGZvciAoaW50IGkgPSBtX2l0ZW1zLnNpemUoKSAtIDI7IGkg
Pj0gMDsgaS0tKSB7Ci0gICAgICAgICAgICBpZiAoIXNoYXBlQW5kUGxhY2VJdGVtKGNwLCBzdHJp
bmdPZmZzZXQsIGksIGZvbnREYXRhLCBnbHlwaEJ1ZmZlcikpCi0gICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG1faXRlbXMuc2l6ZSgpIC0gMTsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAoIXNoYXBl
QW5kUGxhY2VJdGVtKGNwLCBzdHJpbmdPZmZzZXQsIGksIGZvbnREYXRhLCBnbHlwaEJ1ZmZlcikp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIFVu
aXNjcmliZUNvbnRyb2xsZXI6OnJlc2V0Q29udHJvbEFuZFN0YXRlKCkKLXsKLSAgICBtZW1zZXQo
Jm1fY29udHJvbCwgMCwgc2l6ZW9mKFNDUklQVF9DT05UUk9MKSk7Ci0gICAgbWVtc2V0KCZtX3N0
YXRlLCAwLCBzaXplb2YoU0NSSVBUX1NUQVRFKSk7Ci0KLSAgICAvLyBTZXQgdXAgdGhlIGNvcnJl
Y3QgZGlyZWN0aW9uIGZvciB0aGUgcnVuLgotICAgIG1fc3RhdGUudUJpZGlMZXZlbCA9IG1fcnVu
LnJ0bCgpOwotICAgIAotICAgIC8vIExvY2sgdGhlIGNvcnJlY3QgZGlyZWN0aW9uYWwgb3ZlcnJp
ZGUuCi0gICAgbV9zdGF0ZS5mT3ZlcnJpZGVEaXJlY3Rpb24gPSBtX3J1bi5kaXJlY3Rpb25hbE92
ZXJyaWRlKCk7Ci19Ci0KLWJvb2wgVW5pc2NyaWJlQ29udHJvbGxlcjo6c2hhcGVBbmRQbGFjZUl0
ZW0oY29uc3QgVUNoYXIqIGNwLCB1bnNpZ25lZCBzdHJpbmdPZmZzZXQsIHVuc2lnbmVkIGksIGNv
bnN0IEZvbnQqIGZvbnREYXRhLCBHbHlwaEJ1ZmZlciogZ2x5cGhCdWZmZXIpCi17Ci0gICAgLy8g
RGV0ZXJtaW5lIHRoZSBzdHJpbmcgZm9yIHRoaXMgaXRlbS4KLSAgICBjb25zdCBVQ2hhciogc3Ry
ID0gY3AgKyBtX2l0ZW1zW2ldLmlDaGFyUG9zOwotICAgIGludCBsZW4gPSBtX2l0ZW1zW2krMV0u
aUNoYXJQb3MgLSBtX2l0ZW1zW2ldLmlDaGFyUG9zOwotICAgIFNDUklQVF9JVEVNIGl0ZW0gPSBt
X2l0ZW1zW2ldOwotCi0gICAgLy8gU2V0IHVwIGJ1ZmZlcnMgdG8gaG9sZCB0aGUgcmVzdWx0cyBv
ZiBzaGFwaW5nIHRoZSBpdGVtLgotICAgIFZlY3RvcjxXT1JEPiBnbHlwaHM7Ci0gICAgVmVjdG9y
PFdPUkQ+IGNsdXN0ZXJzOwotICAgIFZlY3RvcjxTQ1JJUFRfVklTQVRUUj4gdmlzdWFsQXR0cmli
dXRlczsKLSAgICBjbHVzdGVycy5yZXNpemUobGVuKTsKLSAgICAgCi0gICAgLy8gU2hhcGUgdGhl
IGl0ZW0uCi0gICAgLy8gVGhlIHJlY29tbWVuZGVkIHNpemUgZm9yIHRoZSBnbHlwaCBidWZmZXIg
aXMgMS41ICogdGhlIGNoYXJhY3RlciBsZW5ndGggKyAxNiBpbiB0aGUgdW5pc2NyaWJlIGRvY3Mu
Ci0gICAgLy8gQXBwYXJlbnRseSB0aGlzIGlzIGEgZ29vZCBzaXplIHRvIGF2b2lkIGhhdmluZyB0
byBtYWtlIHJlcGVhdGVkIGNhbGxzIHRvIFNjcmlwdFNoYXBlLgotICAgIGdseXBocy5yZXNpemUo
MS41ICogbGVuICsgMTYpOwotICAgIHZpc3VhbEF0dHJpYnV0ZXMucmVzaXplKGdseXBocy5zaXpl
KCkpOwotCi0gICAgaWYgKCFzaGFwZShzdHIsIGxlbiwgaXRlbSwgZm9udERhdGEsIGdseXBocywg
Y2x1c3RlcnMsIHZpc3VhbEF0dHJpYnV0ZXMpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAg
IFZlY3RvcjxPcHRpb25hbDx1bnNpZ25lZD4+IHN0cmluZ09mZnNldHMoZ2x5cGhzLnNpemUoKSk7
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbjsgKytpKSB7Ci0gICAgICAgIGlmIChz
dHJpbmdPZmZzZXRzW2NsdXN0ZXJzW2ldXSkKLSAgICAgICAgICAgIHN0cmluZ09mZnNldHNbY2x1
c3RlcnNbaV1dID0gc3RkOjptaW4oKnN0cmluZ09mZnNldHNbY2x1c3RlcnNbaV1dLCBpKTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgc3RyaW5nT2Zmc2V0c1tjbHVzdGVyc1tpXV0gPSBpOwot
ICAgIH0KLQotICAgIC8vIFdlIG5vdyBoYXZlIGEgY29sbGVjdGlvbiBvZiBnbHlwaHMuCi0gICAg
VmVjdG9yPEdPRkZTRVQ+IG9mZnNldHM7Ci0gICAgVmVjdG9yPGludD4gYWR2YW5jZXM7Ci0gICAg
b2Zmc2V0cy5yZXNpemUoZ2x5cGhzLnNpemUoKSk7Ci0gICAgYWR2YW5jZXMucmVzaXplKGdseXBo
cy5zaXplKCkpOwotICAgIEhSRVNVTFQgcGxhY2VSZXN1bHQgPSBTY3JpcHRQbGFjZSgwLCBmb250
RGF0YS0+c2NyaXB0Q2FjaGUoKSwgZ2x5cGhzLmRhdGEoKSwgZ2x5cGhzLnNpemUoKSwgdmlzdWFs
QXR0cmlidXRlcy5kYXRhKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICZpdGVtLmEsIGFkdmFuY2VzLmRhdGEoKSwgb2Zmc2V0cy5kYXRhKCksIDApOwotICAgIGlmIChw
bGFjZVJlc3VsdCA9PSBFX1BFTkRJTkcpIHsKLSAgICAgICAgLy8gVGhlIHNjcmlwdCBjYWNoZSBp
c24ndCBwcmltZWQgd2l0aCBlbm91Z2ggaW5mbyB5ZXQuICBXZSBuZWVkIHRvIHNlbGVjdCBvdXIg
SEZPTlQgaW50bwotICAgICAgICAvLyBhIERDIGFuZCBwYXNzIHRoZSBEQyBpbiB0byBTY3JpcHRQ
bGFjZS4KLSAgICAgICAgSFduZERDIGhkYygwKTsKLSAgICAgICAgSEZPTlQgaGZvbnQgPSBmb250
RGF0YS0+cGxhdGZvcm1EYXRhKCkuaGZvbnQoKTsKLSAgICAgICAgSEZPTlQgb2xkRm9udCA9IChI
Rk9OVClTZWxlY3RPYmplY3QoaGRjLCBoZm9udCk7Ci0gICAgICAgIHBsYWNlUmVzdWx0ID0gU2Ny
aXB0UGxhY2UoaGRjLCBmb250RGF0YS0+c2NyaXB0Q2FjaGUoKSwgZ2x5cGhzLmRhdGEoKSwgZ2x5
cGhzLnNpemUoKSwgdmlzdWFsQXR0cmlidXRlcy5kYXRhKCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJml0ZW0uYSwgYWR2YW5jZXMuZGF0YSgpLCBvZmZzZXRzLmRhdGEoKSwg
MCk7Ci0gICAgICAgIFNlbGVjdE9iamVjdChoZGMsIG9sZEZvbnQpOwotICAgIH0KLSAgICAKLSAg
ICBpZiAoRkFJTEVEKHBsYWNlUmVzdWx0KSB8fCBnbHlwaHMuaXNFbXB0eSgpKQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLQotICAgIC8vIENvbnZlcnQgYWxsIGNoYXJzIHRoYXQgc2hvdWxkIGJlIHRy
ZWF0ZWQgYXMgc3BhY2VzIHRvIHVzZSB0aGUgc3BhY2UgZ2x5cGguCi0gICAgLy8gV2UgYWxzbyBj
cmVhdGUgYSBtYXAgdGhhdCBhbGxvd3MgdXMgdG8gcXVpY2tseSBnbyBmcm9tIHNwYWNlIGdseXBo
cyBiYWNrIHRvIHRoZWlyIGNvcnJlc3BvbmRpbmcgY2hhcmFjdGVycy4KLSAgICBWZWN0b3I8aW50
PiBzcGFjZUNoYXJhY3RlcnMoZ2x5cGhzLnNpemUoKSk7Ci0gICAgc3BhY2VDaGFyYWN0ZXJzLmZp
bGwoLTEpOwotCi0gICAgY29uc3QgZmxvYXQgY0xvZ2ljYWxTY2FsZSA9IGZvbnREYXRhLT5wbGF0
Zm9ybURhdGEoKS51c2VHREkoKSA/IDEuMGYgOiAzMi4wZjsKLSAgICBmbG9hdCBzcGFjZVdpZHRo
ID0gZm9udERhdGEtPnNwYWNlV2lkdGgoKSAtIGZvbnREYXRhLT5zeW50aGV0aWNCb2xkT2Zmc2V0
KCk7Ci0gICAgdW5zaWduZWQgbG9naWNhbFNwYWNlV2lkdGggPSBzcGFjZVdpZHRoICogY0xvZ2lj
YWxTY2FsZTsKLQotICAgIGZvciAoaW50IGsgPSAwOyBrIDwgbGVuOyBrKyspIHsKLSAgICAgICAg
VUNoYXIgY2ggPSAqKHN0ciArIGspOwotICAgICAgICBib29sIHRyZWF0QXNTcGFjZSA9IEZvbnRD
YXNjYWRlOjp0cmVhdEFzU3BhY2UoY2gpOwotICAgICAgICBib29sIHRyZWF0QXNaZXJvV2lkdGhT
cGFjZSA9IEZvbnRDYXNjYWRlOjp0cmVhdEFzWmVyb1dpZHRoU3BhY2UoY2gpOwotICAgICAgICBp
ZiAodHJlYXRBc1NwYWNlIHx8IHRyZWF0QXNaZXJvV2lkdGhTcGFjZSkgewotICAgICAgICAgICAg
Ly8gU3Vic3RpdHV0ZSBpbiB0aGUgc3BhY2UgZ2x5cGggYXQgdGhlIGFwcHJvcHJpYXRlIHBsYWNl
IGluIHRoZSBnbHlwaHMKLSAgICAgICAgICAgIC8vIGFycmF5LgotICAgICAgICAgICAgZ2x5cGhz
W2NsdXN0ZXJzW2tdXSA9IGZvbnREYXRhLT5zcGFjZUdseXBoKCk7Ci0gICAgICAgICAgICBhZHZh
bmNlc1tjbHVzdGVyc1trXV0gPSB0cmVhdEFzU3BhY2UgPyBsb2dpY2FsU3BhY2VXaWR0aCA6IDA7
Ci0gICAgICAgICAgICBpZiAodHJlYXRBc1NwYWNlKQotICAgICAgICAgICAgICAgIHNwYWNlQ2hh
cmFjdGVyc1tjbHVzdGVyc1trXV0gPSBtX2N1cnJlbnRDaGFyYWN0ZXIgKyBrICsgaXRlbS5pQ2hh
clBvczsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFBvcHVsYXRlIG91ciBnbHlwaCBidWZm
ZXIgd2l0aCB0aGlzIGluZm9ybWF0aW9uLgotICAgIGJvb2wgaGFzRXh0cmFTcGFjaW5nID0gbV9m
b250LmxldHRlclNwYWNpbmcoKSB8fCBtX2ZvbnQud29yZFNwYWNpbmcoKSB8fCBtX3BhZGRpbmc7
Ci0gICAgCi0gICAgZmxvYXQgbGVmdEVkZ2UgPSBtX3J1bldpZHRoU29GYXI7Ci0KLSAgICBmb3Ig
KHVuc2lnbmVkIGsgPSAwOyBrIDwgZ2x5cGhzLnNpemUoKTsgaysrKSB7Ci0gICAgICAgIEdseXBo
IGdseXBoID0gZ2x5cGhzW2tdOwotICAgICAgICBmbG9hdCBhZHZhbmNlID0gYWR2YW5jZXNba10g
LyBjTG9naWNhbFNjYWxlOwotICAgICAgICBmbG9hdCBvZmZzZXRYID0gb2Zmc2V0c1trXS5kdSAv
IGNMb2dpY2FsU2NhbGU7Ci0gICAgICAgIGZsb2F0IG9mZnNldFkgPSBvZmZzZXRzW2tdLmR2IC8g
Y0xvZ2ljYWxTY2FsZTsKLQotICAgICAgICAvLyBNYXRjaCBBcHBLaXQncyBydWxlcyBmb3IgdGhl
IGludGVnZXIgdnMuIG5vbi1pbnRlZ2VyIHJlbmRlcmluZyBtb2Rlcy4KLSAgICAgICAgZmxvYXQg
cm91bmRlZEFkdmFuY2UgPSByb3VuZGYoYWR2YW5jZSk7Ci0gICAgICAgIGlmICghZm9udERhdGEt
PnBsYXRmb3JtRGF0YSgpLmlzU3lzdGVtRm9udCgpKSB7Ci0gICAgICAgICAgICBhZHZhbmNlID0g
cm91bmRlZEFkdmFuY2U7Ci0gICAgICAgICAgICBvZmZzZXRYID0gcm91bmRmKG9mZnNldFgpOwot
ICAgICAgICAgICAgb2Zmc2V0WSA9IHJvdW5kZihvZmZzZXRZKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGFkdmFuY2UgKz0gZm9udERhdGEtPnN5bnRoZXRpY0JvbGRPZmZzZXQoKTsKLQotICAgICAg
ICBpZiAoaGFzRXh0cmFTcGFjaW5nKSB7Ci0gICAgICAgICAgICAvLyBJZiB3ZSdyZSBhIGdseXBo
IHdpdGggYW4gYWR2YW5jZSwgZ28gYWhlYWQgYW5kIGFkZCBpbiBsZXR0ZXItc3BhY2luZy4KLSAg
ICAgICAgICAgIC8vIFRoYXQgd2F5IHdlIHdlZWQgb3V0IHplcm8gd2lkdGggbHVya2Vycy4gIFRo
aXMgYmVoYXZpb3IgbWF0Y2hlcyB0aGUgZmFzdCB0ZXh0IGNvZGUgcGF0aC4KLSAgICAgICAgICAg
IGlmIChhZHZhbmNlICYmIG1fZm9udC5sZXR0ZXJTcGFjaW5nKCkpCi0gICAgICAgICAgICAgICAg
YWR2YW5jZSArPSBtX2ZvbnQubGV0dGVyU3BhY2luZygpOwotCi0gICAgICAgICAgICAvLyBIYW5k
bGUganVzdGlmaWNhdGlvbiBhbmQgd29yZC1zcGFjaW5nLgotICAgICAgICAgICAgaW50IGNoYXJh
Y3RlckluZGV4ID0gc3BhY2VDaGFyYWN0ZXJzW2tdOwotICAgICAgICAgICAgLy8gY2hhcmFjdGVy
SW5kZXggaXMgbGVmdCBhdCB0aGUgaW5pdGlhbCB2YWx1ZSBvZiAtMSBmb3IgZ2x5cGhzIHRoYXQg
ZG8gbm90IG1hcCBiYWNrIHRvIHRyZWF0ZWQtYXMtc3BhY2UgY2hhcmFjdGVycy4KLSAgICAgICAg
ICAgIGlmIChjaGFyYWN0ZXJJbmRleCAhPSAtMSkgewotICAgICAgICAgICAgICAgIC8vIEFjY291
bnQgZm9yIHBhZGRpbmcuIFdlYkNvcmUgdXNlcyBzcGFjZSBwYWRkaW5nIHRvIGp1c3RpZnkgdGV4
dC4KLSAgICAgICAgICAgICAgICAvLyBXZSBkaXN0cmlidXRlIHRoZSBzcGVjaWZpZWQgcGFkZGlu
ZyBvdmVyIHRoZSBhdmFpbGFibGUgc3BhY2VzIGluIHRoZSBydW4uCi0gICAgICAgICAgICAgICAg
aWYgKG1fcGFkZGluZykgewotICAgICAgICAgICAgICAgICAgICAvLyBVc2UgbGVmdG92ZXIgcGFk
ZGluZyBpZiBub3QgZXZlbmx5IGRpdmlzaWJsZSBieSBudW1iZXIgb2Ygc3BhY2VzLgotICAgICAg
ICAgICAgICAgICAgICBpZiAobV9wYWRkaW5nIDwgbV9wYWRQZXJTcGFjZSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgYWR2YW5jZSArPSBtX3BhZGRpbmc7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBtX3BhZGRpbmcgPSAwOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICAgICAgbV9wYWRkaW5nIC09IG1fcGFkUGVyU3BhY2U7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBhZHZhbmNlICs9IG1fcGFkUGVyU3BhY2U7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBBY2NvdW50IGZv
ciB3b3JkLXNwYWNpbmcuCi0gICAgICAgICAgICAgICAgaWYgKGNoYXJhY3RlckluZGV4ID4gMCAm
JiBtX2ZvbnQud29yZFNwYWNpbmcoKSkgewotICAgICAgICAgICAgICAgICAgICBVQ2hhciBjYW5k
aWRhdGVTcGFjZTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fcnVuLmlzOEJpdCgpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgY2FuZGlkYXRlU3BhY2UgPSAqKG1fcnVuLmRhdGE4KGNoYXJh
Y3RlckluZGV4IC0gMSkpOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgICAgICAgICBjYW5kaWRhdGVTcGFjZSA9ICoobV9ydW4uZGF0YTE2KGNoYXJhY3RlckluZGV4
IC0gMSkpOwotCi0gICAgICAgICAgICAgICAgICAgIGlmICghRm9udENhc2NhZGU6OnRyZWF0QXNT
cGFjZShjYW5kaWRhdGVTcGFjZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBhZHZhbmNlICs9
IG1fZm9udC53b3JkU3BhY2luZygpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotCi0gICAgICAgIG1fcnVuV2lkdGhTb0ZhciArPSBhZHZhbmNlOwotCi0gICAg
ICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIHRha2UgdGhlIEdPRkZTRVRTIGZvciBjb21iaW5pbmcg
Z2x5cGhzIGFuZCBzdG9yZSB0aGVtIGluIHRoZSBnbHlwaCBidWZmZXIKLSAgICAgICAgLy8gYXMg
d2VsbCwgc28gdGhhdCB3aGVuIHRoZSB0aW1lIGNvbWVzIHRvIGRyYXcgdGhvc2UgZ2x5cGhzLCB3
ZSBjYW4gYXBwbHkgdGhlIGFwcHJvcHJpYXRlCi0gICAgICAgIC8vIHRyYW5zbGF0aW9uLgotICAg
ICAgICBpZiAoZ2x5cGhCdWZmZXIpIHsKLSAgICAgICAgICAgIEdseXBoQnVmZmVyQWR2YW5jZSBv
cmlnaW4ob2Zmc2V0WCwgLW9mZnNldFkpOwotICAgICAgICAgICAgaWYgKCFnbHlwaEJ1ZmZlci0+
YWR2YW5jZXNDb3VudCgpKQotICAgICAgICAgICAgICAgIGdseXBoQnVmZmVyLT5zZXRJbml0aWFs
QWR2YW5jZShvcmlnaW4pOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGdseXBo
QnVmZmVyLT5leHBhbmRMYXN0QWR2YW5jZShvcmlnaW4pOwotICAgICAgICAgICAgR2x5cGhCdWZm
ZXJBZHZhbmNlIGdseXBoQWR2YW5jZSgtb3JpZ2luLndpZHRoKCkgKyBhZHZhbmNlLCAtb3JpZ2lu
LmhlaWdodCgpKTsKLSAgICAgICAgICAgIGdseXBoQnVmZmVyLT5hZGQoZ2x5cGgsIGZvbnREYXRh
LCBnbHlwaEFkdmFuY2UsIHN0cmluZ09mZnNldHNba10udmFsdWVPcigwKSArIHN0cmluZ09mZnNl
dCk7Ci0gICAgICAgIH0KLQotICAgICAgICBGbG9hdFJlY3QgZ2x5cGhCb3VuZHMgPSBmb250RGF0
YS0+Ym91bmRzRm9yR2x5cGgoZ2x5cGgpOwotICAgICAgICBnbHlwaEJvdW5kcy5tb3ZlKG1fZ2x5
cGhPcmlnaW4ueCgpLCBtX2dseXBoT3JpZ2luLnkoKSk7Ci0gICAgICAgIG1fbWluR2x5cGhCb3Vu
ZGluZ0JveFggPSBzdGQ6Om1pbihtX21pbkdseXBoQm91bmRpbmdCb3hYLCBnbHlwaEJvdW5kcy54
KCkpOwotICAgICAgICBtX21heEdseXBoQm91bmRpbmdCb3hYID0gc3RkOjptYXgobV9tYXhHbHlw
aEJvdW5kaW5nQm94WCwgZ2x5cGhCb3VuZHMubWF4WCgpKTsKLSAgICAgICAgbV9taW5HbHlwaEJv
dW5kaW5nQm94WSA9IHN0ZDo6bWluKG1fbWluR2x5cGhCb3VuZGluZ0JveFksIGdseXBoQm91bmRz
LnkoKSk7Ci0gICAgICAgIG1fbWF4R2x5cGhCb3VuZGluZ0JveFkgPSBzdGQ6Om1heChtX21heEds
eXBoQm91bmRpbmdCb3hZLCBnbHlwaEJvdW5kcy5tYXhZKCkpOwotICAgICAgICBtX2dseXBoT3Jp
Z2luLm1vdmUoYWR2YW5jZSArIG9mZnNldFgsIC1vZmZzZXRZKTsKLQotICAgICAgICAvLyBNdXRh
dGUgdGhlIGdseXBoIGFycmF5IHRvIGNvbnRhaW4gb3VyIGFsdGVyZWQgYWR2YW5jZXMuCi0gICAg
ICAgIGlmIChtX2NvbXB1dGluZ09mZnNldFBvc2l0aW9uKQotICAgICAgICAgICAgYWR2YW5jZXNb
a10gPSBhZHZhbmNlOwotICAgIH0KLQotICAgIHdoaWxlIChtX2NvbXB1dGluZ09mZnNldFBvc2l0
aW9uICYmIG1fb2Zmc2V0WCA+PSBsZWZ0RWRnZSAmJiBtX29mZnNldFggPCBtX3J1bldpZHRoU29G
YXIpIHsKLSAgICAgICAgLy8gVGhlIHBvc2l0aW9uIGlzIHNvbWV3aGVyZSBpbnNpZGUgdGhpcyBy
dW4uCi0gICAgICAgIGludCB0cmFpbGluZyA9IDA7Ci0gICAgICAgIEhSRVNVTFQgcmMgPSA6OlNj
cmlwdFh0b0NQKG1fb2Zmc2V0WCAtIGxlZnRFZGdlLCBjbHVzdGVycy5zaXplKCksIGdseXBocy5z
aXplKCksIGNsdXN0ZXJzLmRhdGEoKSwgdmlzdWFsQXR0cmlidXRlcy5kYXRhKCksCi0gICAgICAg
ICAgICAgICAgICAgIGFkdmFuY2VzLmRhdGEoKSwgJml0ZW0uYSwgJm1fb2Zmc2V0UG9zaXRpb24s
ICZ0cmFpbGluZyk7Ci0gICAgICAgIGlmIChGQUlMRUQocmMpKSB7Ci0gICAgICAgICAgICBXVEZM
b2dBbHdheXMoIlVuaXNjcmliZUNvbnRyb2xsZXI6OnNoYXBlQW5kUGxhY2VJdGVtOiBTY3JpcHRY
dG9DUCBmYWlsZWQgcmM9JWx4IiwgcmMpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgIH0KLSAgICAgICAgaWYgKHRyYWlsaW5nICYmIG1faW5jbHVkZVBhcnRpYWxHbHlwaHMgJiYg
bV9vZmZzZXRQb3NpdGlvbiA8IGxlbiAtIDEpIHsKLSAgICAgICAgICAgIG1fb2Zmc2V0UG9zaXRp
b24gKz0gbV9jdXJyZW50Q2hhcmFjdGVyICsgbV9pdGVtc1tpXS5pQ2hhclBvczsKLSAgICAgICAg
ICAgIG1fb2Zmc2V0WCArPSBtX3J1bi5ydGwoKSA/IC10cmFpbGluZyA6IHRyYWlsaW5nOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgbV9jb21wdXRpbmdPZmZzZXRQb3NpdGlvbiA9IGZh
bHNlOwotICAgICAgICAgICAgbV9vZmZzZXRQb3NpdGlvbiArPSBtX2N1cnJlbnRDaGFyYWN0ZXIg
KyBtX2l0ZW1zW2ldLmlDaGFyUG9zOwotICAgICAgICAgICAgaWYgKHRyYWlsaW5nICYmIG1faW5j
bHVkZVBhcnRpYWxHbHlwaHMpCi0gICAgICAgICAgICAgICBtX29mZnNldFBvc2l0aW9uKys7Ci0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotYm9vbCBVbmlzY3JpYmVDb250cm9sbGVyOjpzaGFwZShjb25zdCBVQ2hhciog
c3RyLCBpbnQgbGVuLCBTQ1JJUFRfSVRFTSBpdGVtLCBjb25zdCBGb250KiBmb250RGF0YSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPFdPUkQ+JiBnbHlwaHMsIFZlY3Rv
cjxXT1JEPiYgY2x1c3RlcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3Rv
cjxTQ1JJUFRfVklTQVRUUj4mIHZpc3VhbEF0dHJpYnV0ZXMpCi17Ci0gICAgSFduZERDIGhkYzsK
LSAgICBIRk9OVCBvbGRGb250ID0gMDsKLSAgICBIUkVTVUxUIHNoYXBlUmVzdWx0ID0gRV9QRU5E
SU5HOwotICAgIGludCBnbHlwaENvdW50ID0gMDsKLQotICAgIGlmICghZm9udERhdGEpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIGRvIHsKLSAgICAgICAgc2hhcGVSZXN1bHQgPSBTY3Jp
cHRTaGFwZShoZGMsIGZvbnREYXRhLT5zY3JpcHRDYWNoZSgpLCB3Y2hhckZyb20oc3RyKSwgbGVu
LCBnbHlwaHMuc2l6ZSgpLCAmaXRlbS5hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdseXBocy5kYXRhKCksIGNsdXN0ZXJzLmRhdGEoKSwgdmlzdWFsQXR0cmlidXRlcy5kYXRh
KCksICZnbHlwaENvdW50KTsKLSAgICAgICAgaWYgKHNoYXBlUmVzdWx0ID09IEVfUEVORElORykg
ewotICAgICAgICAgICAgLy8gVGhlIHNjcmlwdCBjYWNoZSBpc24ndCBwcmltZWQgd2l0aCBlbm91
Z2ggaW5mbyB5ZXQuICBXZSBuZWVkIHRvIHNlbGVjdCBvdXIgSEZPTlQgaW50bwotICAgICAgICAg
ICAgLy8gYSBEQyBhbmQgcGFzcyB0aGUgREMgaW4gdG8gU2NyaXB0U2hhcGUuCi0gICAgICAgICAg
ICBBU1NFUlQoIWhkYyk7Ci0gICAgICAgICAgICBoZGMuc2V0SFduZCgwKTsKLSAgICAgICAgICAg
IEhGT05UIGhmb250ID0gZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLmhmb250KCk7Ci0gICAgICAg
ICAgICBvbGRGb250ID0gKEhGT05UKVNlbGVjdE9iamVjdChoZGMsIGhmb250KTsKLSAgICAgICAg
fSBlbHNlIGlmIChzaGFwZVJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKSB7Ci0gICAgICAgICAgICAv
LyBOZWVkIHRvIHJlc2l6ZSBvdXIgYnVmZmVycy4KLSAgICAgICAgICAgIGdseXBocy5yZXNpemUo
Z2x5cGhzLnNpemUoKSAqIDIpOwotICAgICAgICAgICAgdmlzdWFsQXR0cmlidXRlcy5yZXNpemUo
Z2x5cGhzLnNpemUoKSk7Ci0gICAgICAgIH0KLSAgICB9IHdoaWxlIChzaGFwZVJlc3VsdCA9PSBF
X1BFTkRJTkcgfHwgc2hhcGVSZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7Ci0KLSAgICBpZiAoaGRj
KQotICAgICAgICBTZWxlY3RPYmplY3QoaGRjLCBvbGRGb250KTsKLQotICAgIGlmIChGQUlMRUQo
c2hhcGVSZXN1bHQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBnbHlwaHMuc2hyaW5r
KGdseXBoQ291bnQpOwotICAgIHZpc3VhbEF0dHJpYnV0ZXMuc2hyaW5rKGdseXBoQ291bnQpOwot
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9VbmlzY3JpYmVDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vVW5pc2NyaWJlQ29udHJvbGxlci5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBhNDYyNGM3OWEwOC4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1VuaXNjcmliZUNvbnRyb2xsZXIuaAorKysg
L2Rldi9udWxsCkBAIC0xLDkwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIw
MDgsIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaWZuZGVmIFVuaXNjcmliZUNvbnRyb2xsZXJfaAotI2RlZmluZSBVbmlzY3JpYmVDb250cm9s
bGVyX2gKLQotI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCi0jaW5jbHVkZSAiR2x5cGhCdWZmZXIu
aCIKLSNpbmNsdWRlIDx1c3AxMC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1jbGFzcyBVbmlzY3JpYmVDb250cm9sbGVyIHsKLXB1YmxpYzoKLSAg
ICBVbmlzY3JpYmVDb250cm9sbGVyKGNvbnN0IEZvbnRDYXNjYWRlKiwgY29uc3QgVGV4dFJ1biYs
IEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzID0gMCk7Ci0KLSAgICAvLyBBZHZh
bmNlIGFuZCBtZWFzdXJlL3BsYWNlIHVwIHRvIHRoZSBzcGVjaWZpZWQgY2hhcmFjdGVyLgotICAg
IHZvaWQgYWR2YW5jZSh1bnNpZ25lZCB0bywgR2x5cGhCdWZmZXIqID0gMCk7Ci0KLSAgICAvLyBD
b21wdXRlIHRoZSBjaGFyYWN0ZXIgb2Zmc2V0IGZvciBhIGdpdmVuIHggY29vcmRpbmF0ZS4KLSAg
ICBpbnQgb2Zmc2V0Rm9yUG9zaXRpb24oaW50IHgsIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMp
OwotCi0gICAgLy8gUmV0dXJucyB0aGUgd2lkdGggb2YgZXZlcnl0aGluZyB3ZSd2ZSBjb25zdW1l
ZCBzbyBmYXIuCi0gICAgZmxvYXQgcnVuV2lkdGhTb0ZhcigpIGNvbnN0IHsgcmV0dXJuIG1fcnVu
V2lkdGhTb0ZhcjsgfQotCi0gICAgZmxvYXQgbWluR2x5cGhCb3VuZGluZ0JveFgoKSBjb25zdCB7
IHJldHVybiBtX21pbkdseXBoQm91bmRpbmdCb3hYOyB9Ci0gICAgZmxvYXQgbWF4R2x5cGhCb3Vu
ZGluZ0JveFgoKSBjb25zdCB7IHJldHVybiBtX21heEdseXBoQm91bmRpbmdCb3hYOyB9Ci0gICAg
ZmxvYXQgbWluR2x5cGhCb3VuZGluZ0JveFkoKSBjb25zdCB7IHJldHVybiBtX21pbkdseXBoQm91
bmRpbmdCb3hZOyB9Ci0gICAgZmxvYXQgbWF4R2x5cGhCb3VuZGluZ0JveFkoKSBjb25zdCB7IHJl
dHVybiBtX21heEdseXBoQm91bmRpbmdCb3hZOyB9Ci0KLXByaXZhdGU6ICAgIAotICAgIHZvaWQg
cmVzZXRDb250cm9sQW5kU3RhdGUoKTsKLQotICAgIHZvaWQgaXRlbWl6ZVNoYXBlQW5kUGxhY2Uo
Y29uc3QgVUNoYXIqLCB1bnNpZ25lZCBzdHJpbmdPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgY29u
c3QgRm9udCosIEdseXBoQnVmZmVyKik7Ci0gICAgYm9vbCBzaGFwZUFuZFBsYWNlSXRlbShjb25z
dCBVQ2hhciosIHVuc2lnbmVkIHN0cmluZ09mZnNldCwgdW5zaWduZWQgaW5kZXgsIGNvbnN0IEZv
bnQqLCBHbHlwaEJ1ZmZlciopOwotICAgIGJvb2wgc2hhcGUoY29uc3QgVUNoYXIqIHN0ciwgaW50
IGxlbiwgU0NSSVBUX0lURU0sIGNvbnN0IEZvbnQqLAotICAgICAgICAgICAgICAgVmVjdG9yPFdP
UkQ+JiBnbHlwaHMsIFZlY3RvcjxXT1JEPiYgY2x1c3RlcnMsCi0gICAgICAgICAgICAgICBWZWN0
b3I8U0NSSVBUX1ZJU0FUVFI+JiB2aXN1YWxBdHRyaWJ1dGVzKTsKLQotICAgIGNvbnN0IEZvbnRD
YXNjYWRlJiBtX2ZvbnQ7Ci0gICAgY29uc3QgVGV4dFJ1biYgbV9ydW47Ci0gICAgSGFzaFNldDxj
b25zdCBGb250Kj4qIG1fZmFsbGJhY2tGb250czsKLSAgICBGbG9hdFBvaW50IG1fZ2x5cGhPcmln
aW47Ci0gICAgZmxvYXQgbV9taW5HbHlwaEJvdW5kaW5nQm94WDsKLSAgICBmbG9hdCBtX21heEds
eXBoQm91bmRpbmdCb3hYOwotICAgIGZsb2F0IG1fbWluR2x5cGhCb3VuZGluZ0JveFk7Ci0gICAg
ZmxvYXQgbV9tYXhHbHlwaEJvdW5kaW5nQm94WTsKLQotICAgIFNDUklQVF9DT05UUk9MIG1fY29u
dHJvbDsKLSAgICBTQ1JJUFRfU1RBVEUgbV9zdGF0ZTsKLSAgICBWZWN0b3I8U0NSSVBUX0lURU0+
IG1faXRlbXM7Ci0gCi0gICAgdW5zaWduZWQgbV9jdXJyZW50Q2hhcmFjdGVyOwotICAgIGludCBt
X2VuZDsKLQotICAgIGZsb2F0IG1fcnVuV2lkdGhTb0ZhcjsKLSAgICBmbG9hdCBtX3BhZGRpbmc7
Ci0gICAgZmxvYXQgbV9wYWRQZXJTcGFjZTsKLQotICAgIGJvb2wgbV9jb21wdXRpbmdPZmZzZXRQ
b3NpdGlvbjsKLSAgICBib29sIG1faW5jbHVkZVBhcnRpYWxHbHlwaHM7Ci0gICAgZmxvYXQgbV9v
ZmZzZXRYOwotICAgIGludCBtX29mZnNldFBvc2l0aW9uOwotfTsKLQotfQotI2VuZGlmCmRpZmYg
LS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi90aHJlYWRfbG9jYWxfc3RvcmFn
ZV9wZXJmdGVzdC5jYyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL3RocmVhZF9sb2Nh
bF9zdG9yYWdlX3BlcmZ0ZXN0LmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwLi5iNDhlMTY2NmY3MAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV1RGL3RocmVhZF9sb2NhbF9zdG9yYWdlX3BlcmZ0ZXN0LmNjCkBAIC0wLDAgKzEsMjEz
IEBACisvLyBDb3B5cmlnaHQgMjAxOSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8dmVj
dG9yPgorCisjaW5jbHVkZSAiYmFzZS9iYXJyaWVyX2Nsb3N1cmUuaCIKKyNpbmNsdWRlICJiYXNl
L2JpbmQuaCIKKyNpbmNsdWRlICJiYXNlL2JpbmRfaGVscGVycy5oIgorI2luY2x1ZGUgImJhc2Uv
Y2FsbGJhY2suaCIKKyNpbmNsdWRlICJiYXNlL3N5bmNocm9uaXphdGlvbi93YWl0YWJsZV9ldmVu
dC5oIgorI2luY2x1ZGUgImJhc2UvdGVzdC9iaW5kX3Rlc3RfdXRpbC5oIgorI2luY2x1ZGUgImJh
c2UvdGhyZWFkaW5nL3NpbXBsZV90aHJlYWQuaCIKKyNpbmNsdWRlICJiYXNlL3RocmVhZGluZy90
aHJlYWRfbG9jYWxfc3RvcmFnZS5oIgorI2luY2x1ZGUgImJhc2UvdGltZS90aW1lLmgiCisjaW5j
bHVkZSAiYnVpbGQvYnVpbGRfY29uZmlnLmgiCisjaW5jbHVkZSAidGVzdGluZy9ndGVzdC9pbmNs
dWRlL2d0ZXN0L2d0ZXN0LmgiCisjaW5jbHVkZSAidGVzdGluZy9wZXJmL3BlcmZfdGVzdC5oIgor
CisjaWYgZGVmaW5lZChPU19XSU4pCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2luY2x1ZGUgImJh
c2Uvd2luL3dpbmRvd3NfdHlwZXMuaCIKKyNlbGlmIGRlZmluZWQoT1NfUE9TSVgpIHx8IGRlZmlu
ZWQoT1NfRlVDSFNJQSkKKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisjZW5kaWYKKworbmFtZXNwYWNl
IGJhc2UgeworbmFtZXNwYWNlIGludGVybmFsIHsKKworbmFtZXNwYWNlIHsKKworLy8gQSB0aHJl
YWQgdGhhdCB3YWl0cyBmb3IgdGhlIGNhbGxlciB0byBzaWduYWwgYW4gZXZlbnQgYmVmb3JlIHBy
b2NlZWRpbmcgdG8KKy8vIGNhbGwgYWN0aW9uLlJ1bigpLgorY2xhc3MgVExTVGhyZWFkIDogcHVi
bGljIFNpbXBsZVRocmVhZCB7CisgcHVibGljOgorICAvLyBDcmVhdGVzIGEgUG9zdGluZ1RocmVh
ZCB0aGF0IHdhaXRzIG9uIHxzdGFydF9ldmVudHwgYmVmb3JlIGNhbGxpbmcKKyAgLy8gYWN0aW9u
LlJ1bigpLgorICBUTFNUaHJlYWQoV2FpdGFibGVFdmVudCogc3RhcnRfZXZlbnQsCisgICAgICAg
ICAgICBiYXNlOjpPbmNlQ2xvc3VyZSBhY3Rpb24sCisgICAgICAgICAgICBiYXNlOjpPbmNlQ2xv
c3VyZSBjb21wbGV0aW9uKQorICAgICAgOiBTaW1wbGVUaHJlYWQoIlRMU1RocmVhZCIpLAorICAg
ICAgICBzdGFydF9ldmVudF8oc3RhcnRfZXZlbnQpLAorICAgICAgICBhY3Rpb25fKHN0ZDo6bW92
ZShhY3Rpb24pKSwKKyAgICAgICAgY29tcGxldGlvbl8oc3RkOjptb3ZlKGNvbXBsZXRpb24pKSB7
CisgICAgU3RhcnQoKTsKKyAgfQorCisgIHZvaWQgUnVuKCkgb3ZlcnJpZGUgeworICAgIHN0YXJ0
X2V2ZW50Xy0+V2FpdCgpOworICAgIHN0ZDo6bW92ZShhY3Rpb25fKS5SdW4oKTsKKyAgICBzdGQ6
Om1vdmUoY29tcGxldGlvbl8pLlJ1bigpOworICB9CisKKyBwcml2YXRlOgorICBXYWl0YWJsZUV2
ZW50KiBjb25zdCBzdGFydF9ldmVudF87CisgIGJhc2U6Ok9uY2VDbG9zdXJlIGFjdGlvbl87Cisg
IGJhc2U6Ok9uY2VDbG9zdXJlIGNvbXBsZXRpb25fOworCisgIERJU0FMTE9XX0NPUFlfQU5EX0FT
U0lHTihUTFNUaHJlYWQpOworfTsKKworY2xhc3MgVGhyZWFkTG9jYWxTdG9yYWdlUGVyZlRlc3Qg
OiBwdWJsaWMgdGVzdGluZzo6VGVzdCB7CisgcHJvdGVjdGVkOgorICBUaHJlYWRMb2NhbFN0b3Jh
Z2VQZXJmVGVzdCgpID0gZGVmYXVsdDsKKyAgflRocmVhZExvY2FsU3RvcmFnZVBlcmZUZXN0KCkg
b3ZlcnJpZGUgPSBkZWZhdWx0OworCisgIHRlbXBsYXRlIDxjbGFzcyBSZWFkLCBjbGFzcyBXcml0
ZT4KKyAgdm9pZCBCZW5jaG1hcmsoY29uc3Qgc3RkOjpzdHJpbmcmIHRyYWNlLAorICAgICAgICAg
ICAgICAgICBSZWFkIHJlYWQsCisgICAgICAgICAgICAgICAgIFdyaXRlIHdyaXRlLAorICAgICAg
ICAgICAgICAgICBzaXplX3QgbnVtX29wZXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgc2l6ZV90
IG51bV90aHJlYWRzKSB7CisgICAgd3JpdGUoMik7CisKKyAgICBCZW5jaG1hcmtJbXBsKCJUTFMg
cmVhZCB0aHJvdWdocHV0IiwgdHJhY2UsCisgICAgICAgICAgICAgICAgICBiYXNlOjpCaW5kTGFt
YmRhRm9yVGVzdGluZyhbJl0oKSB7CisgICAgICAgICAgICAgICAgICAgIHZvbGF0aWxlIGludHB0
cl90IHRvdGFsID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBudW1fb3BlcmF0aW9uOyArK2kpCisgICAgICAgICAgICAgICAgICAgICAgdG90YWwgKz0gcmVh
ZCgpOworICAgICAgICAgICAgICAgICAgfSksCisgICAgICAgICAgICAgICAgICBudW1fb3BlcmF0
aW9uLCBudW1fdGhyZWFkcyk7CisKKyAgICBCZW5jaG1hcmtJbXBsKCJUTFMgd3JpdGUgdGhyb3Vn
aHB1dCIsIHRyYWNlLAorICAgICAgICAgICAgICAgICAgYmFzZTo6QmluZExhbWJkYUZvclRlc3Rp
bmcoWyZdKCkgeworICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51
bV9vcGVyYXRpb247ICsraSkKKyAgICAgICAgICAgICAgICAgICAgICB3cml0ZShpKTsKKyAgICAg
ICAgICAgICAgICAgIH0pLAorICAgICAgICAgICAgICAgICAgbnVtX29wZXJhdGlvbiwgbnVtX3Ro
cmVhZHMpOworCisgICAgQmVuY2htYXJrSW1wbCgiVExTIHJlYWQtd3JpdGUgdGhyb3VnaHB1dCIs
IHRyYWNlLAorICAgICAgICAgICAgICAgICAgYmFzZTo6QmluZExhbWJkYUZvclRlc3RpbmcoWyZd
KCkgeworICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bV9vcGVy
YXRpb247ICsraSkKKyAgICAgICAgICAgICAgICAgICAgICB3cml0ZShyZWFkKCkgKyAxKTsKKyAg
ICAgICAgICAgICAgICAgIH0pLAorICAgICAgICAgICAgICAgICAgbnVtX29wZXJhdGlvbiwgbnVt
X3RocmVhZHMpOworICB9CisKKyAgdm9pZCBCZW5jaG1hcmtJbXBsKGNvbnN0IHN0ZDo6c3RyaW5n
JiBtZWFzdXJtZW50LAorICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHRy
YWNlLAorICAgICAgICAgICAgICAgICAgICAgYmFzZTo6UmVwZWF0aW5nQ2xvc3VyZSBhY3Rpb24s
CisgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbnVtX29wZXJhdGlvbiwKKyAgICAgICAgICAg
ICAgICAgICAgIHNpemVfdCBudW1fdGhyZWFkcykgeworICAgIFdhaXRhYmxlRXZlbnQgc3RhcnRf
dGhyZWFkOworICAgIFdhaXRhYmxlRXZlbnQgY29tcGxldGVfdGhyZWFkOworCisgICAgYmFzZTo6
UmVwZWF0aW5nQ2xvc3VyZSBkb25lID0gQmFycmllckNsb3N1cmUoCisgICAgICAgIG51bV90aHJl
YWRzLAorICAgICAgICBiYXNlOjpCaW5kTGFtYmRhRm9yVGVzdGluZyhbJl0oKSB7IGNvbXBsZXRl
X3RocmVhZC5TaWduYWwoKTsgfSkpOworCisgICAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRy
PFRMU1RocmVhZD4+IHRocmVhZHM7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1fdGhy
ZWFkczsgKytpKSB7CisgICAgICB0aHJlYWRzLmVtcGxhY2VfYmFjaygKKyAgICAgICAgICBzdGQ6
Om1ha2VfdW5pcXVlPFRMU1RocmVhZD4oJnN0YXJ0X3RocmVhZCwgYWN0aW9uLCBkb25lKSk7Cisg
ICAgfQorCisgICAgVGltZVRpY2tzIG9wZXJhdGlvbl9zdGFydCA9IFRpbWVUaWNrczo6Tm93KCk7
CisgICAgc3RhcnRfdGhyZWFkLlNpZ25hbCgpOworICAgIGNvbXBsZXRlX3RocmVhZC5XYWl0KCk7
CisgICAgVGltZURlbHRhIG9wZXJhdGlvbl9kdXJhdGlvbiA9IFRpbWVUaWNrczo6Tm93KCkgLSBv
cGVyYXRpb25fc3RhcnQ7CisKKyAgICBmb3IgKGF1dG8mIHRocmVhZCA6IHRocmVhZHMpCisgICAg
ICB0aHJlYWQtPkpvaW4oKTsKKworICAgIHBlcmZfdGVzdDo6UHJpbnRSZXN1bHQobWVhc3VybWVu
dCwgIiIsIHRyYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtX29wZXJhdGlvbiAv
IG9wZXJhdGlvbl9kdXJhdGlvbi5Jbk1pbGxpc2Vjb25kc0YoKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJvcGVyYXRpb25zL21zIiwgdHJ1ZSk7CisgICAgc2l6ZV90IG5hbm9zX3Blcl9v
cGVyYXRpb24gPQorICAgICAgICBvcGVyYXRpb25fZHVyYXRpb24uSW5OYW5vc2Vjb25kcygpIC8g
bnVtX29wZXJhdGlvbjsKKyAgICBwZXJmX3Rlc3Q6OlByaW50UmVzdWx0KG1lYXN1cm1lbnQsICIi
LCB0cmFjZSwgbmFub3NfcGVyX29wZXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJucy9vcGVyYXRpb24iLCB0cnVlKTsKKyAgfQorCisgcHJpdmF0ZToKKyAgRElTQUxMT1dfQ09Q
WV9BTkRfQVNTSUdOKFRocmVhZExvY2FsU3RvcmFnZVBlcmZUZXN0KTsKK307CisKK30gIC8vIG5h
bWVzcGFjZQorCitURVNUX0YoVGhyZWFkTG9jYWxTdG9yYWdlUGVyZlRlc3QsIFRocmVhZExvY2Fs
U3RvcmFnZSkgeworICBUaHJlYWRMb2NhbFN0b3JhZ2U6OlNsb3QgdGxzOworICBhdXRvIHJlYWQg
PSBbJl0oKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PGludHB0cl90Pih0bHMuR2V0KCkpOyB9
OworICBhdXRvIHdyaXRlID0gWyZdKGludHB0cl90IHZhbHVlKSB7IHRscy5TZXQocmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4odmFsdWUpKTsgfTsKKworICBCZW5jaG1hcmsoIlRocmVhZExvY2FsU3Rv
cmFnZSIsIHJlYWQsIHdyaXRlLCAxMDAwMDAwMCwgMSk7CisgIEJlbmNobWFyaygiVGhyZWFkTG9j
YWxTdG9yYWdlIDQgdGhyZWFkcyIsIHJlYWQsIHdyaXRlLCAxMDAwMDAwMCwgNCk7Cit9CisKKyNp
ZiBkZWZpbmVkKE9TX1dJTikKKwordm9pZCBXSU5BUEkgZGVzdHJveSh2b2lkKikge30KKworVEVT
VF9GKFRocmVhZExvY2FsU3RvcmFnZVBlcmZUZXN0LCBQbGF0Zm9ybUZscykgeworICBEV09SRCBr
ZXkgPSBGbHNBbGxvYyhkZXN0cm95KTsKKyAgQVNTRVJUX05FKFBsYXRmb3JtVGhyZWFkTG9jYWxT
dG9yYWdlOjpUTFNfS0VZX09VVF9PRl9JTkRFWEVTLCBrZXkpOworCisgIGF1dG8gcmVhZCA9IFsm
XSgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KEZsc0dldFZhbHVlKGtleSkp
OyB9OworICBhdXRvIHdyaXRlID0gWyZdKGludHB0cl90IHZhbHVlKSB7CisgICAgRmxzU2V0VmFs
dWUoa2V5LCByZWludGVycHJldF9jYXN0PHZvaWQqPih2YWx1ZSkpOworICB9OworCisgIEJlbmNo
bWFyaygiUGxhdGZvcm1GbHMiLCByZWFkLCB3cml0ZSwgMTAwMDAwMDAsIDEpOworICBCZW5jaG1h
cmsoIlBsYXRmb3JtRmxzIDQgdGhyZWFkcyIsIHJlYWQsIHdyaXRlLCAxMDAwMDAwMCwgNCk7Cit9
CisKK1RFU1RfRihUaHJlYWRMb2NhbFN0b3JhZ2VQZXJmVGVzdCwgUGxhdGZvcm1UbHMpIHsKKyAg
RFdPUkQga2V5ID0gVGxzQWxsb2MoKTsKKyAgQVNTRVJUX05FKFBsYXRmb3JtVGhyZWFkTG9jYWxT
dG9yYWdlOjpUTFNfS0VZX09VVF9PRl9JTkRFWEVTLCBrZXkpOworCisgIGF1dG8gcmVhZCA9IFsm
XSgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KFRsc0dldFZhbHVlKGtleSkp
OyB9OworICBhdXRvIHdyaXRlID0gWyZdKGludHB0cl90IHZhbHVlKSB7CisgICAgVGxzU2V0VmFs
dWUoa2V5LCByZWludGVycHJldF9jYXN0PHZvaWQqPih2YWx1ZSkpOworICB9OworCisgIEJlbmNo
bWFyaygiUGxhdGZvcm1UbHMiLCByZWFkLCB3cml0ZSwgMTAwMDAwMDAsIDEpOworICBCZW5jaG1h
cmsoIlBsYXRmb3JtVGxzIDQgdGhyZWFkcyIsIHJlYWQsIHdyaXRlLCAxMDAwMDAwMCwgNCk7Cit9
CisKKyNlbGlmIGRlZmluZWQoT1NfUE9TSVgpIHx8IGRlZmluZWQoT1NfRlVDSFNJQSkKKworVEVT
VF9GKFRocmVhZExvY2FsU3RvcmFnZVBlcmZUZXN0LCBQbGF0Zm9ybVRscykgeworICBwdGhyZWFk
X2tleV90IGtleTsKKyAgQVNTRVJUX0ZBTFNFKHB0aHJlYWRfa2V5X2NyZWF0ZSgma2V5LCBbXSh2
b2lkKikge30pKTsKKyAgQVNTRVJUX05FKFBsYXRmb3JtVGhyZWFkTG9jYWxTdG9yYWdlOjpUTFNf
S0VZX09VVF9PRl9JTkRFWEVTLCBrZXkpOworCisgIGF1dG8gcmVhZCA9IFsmXSgpIHsKKyAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4ocHRocmVhZF9nZXRzcGVjaWZpYyhrZXkp
KTsKKyAgfTsKKyAgYXV0byB3cml0ZSA9IFsmXShpbnRwdHJfdCB2YWx1ZSkgeworICAgIHB0aHJl
YWRfc2V0c3BlY2lmaWMoa2V5LCByZWludGVycHJldF9jYXN0PHZvaWQqPih2YWx1ZSkpOworICB9
OworCisgIEJlbmNobWFyaygiUGxhdGZvcm1UbHMiLCByZWFkLCB3cml0ZSwgMTAwMDAwMDAsIDEp
OworICBCZW5jaG1hcmsoIlBsYXRmb3JtVGxzIDQgdGhyZWFkcyIsIHJlYWQsIHdyaXRlLCAxMDAw
MDAwMCwgNCk7Cit9CisKKyNlbmRpZgorCitURVNUX0YoVGhyZWFkTG9jYWxTdG9yYWdlUGVyZlRl
c3QsIENwcDExVGxzKSB7CisgIHRocmVhZF9sb2NhbCBpbnRwdHJfdCB0aHJlYWRfbG9jYWxfdmFy
aWFibGU7CisKKyAgYXV0byByZWFkID0gWyZdKCkgeyByZXR1cm4gdGhyZWFkX2xvY2FsX3Zhcmlh
YmxlOyB9OworICBhdXRvIHdyaXRlID0gWyZdKGludHB0cl90IHZhbHVlKSB7CisgICAgcmVpbnRl
cnByZXRfY2FzdDx2b2xhdGlsZSBpbnRwdHJfdCo+KCZ0aHJlYWRfbG9jYWxfdmFyaWFibGUpWzBd
ID0gdmFsdWU7CisgIH07CisKKyAgQmVuY2htYXJrKCJDKysgdGhyZWFkX2xvY2FsIFRMUyIsIHJl
YWQsIHdyaXRlLCAxMDAwMDAwMCwgMSk7CisgIEJlbmNobWFyaygiQysrIHRocmVhZF9sb2NhbCBU
TFMgNCB0aHJlYWRzIiwgcmVhZCwgd3JpdGUsIDEwMDAwMDAwLCA0KTsKK30KKworfSAgLy8gbmFt
ZXNwYWNlIGludGVybmFsCit9ICAvLyBuYW1lc3BhY2UgYmFzZQpkaWZmIC0tZ2l0IGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAgYi9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29tcGxleFRleHRDb250cm9sbGVyLmNw
cAppbmRleCA5M2ZlOTBlOWQ5ZC4uOTI2OGVmYjY4M2IgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwCisrKyBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3Bw
CkBAIC0yNSw4ICsyNSw2IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKIAotI2lmICFQTEFURk9S
TShXSU4pCi0KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9Jbml0aWFsaXplVGhyZWFkaW5nLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9Db21wbGV4VGV4dENvbnRyb2xsZXIuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL0ZvbnRDYXNjYWRlLmg+CkBAIC0zNjcsNSArMzY1LDMgQEAgVEVTVF9GKENvbXBsZXhU
ZXh0Q29udHJvbGxlclRlc3QsIFRvdGFsV2lkdGhXaXRoSnVzdGlmaWNhdGlvbikKIH0KIAogfQot
Ci0jZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>385587</attachid>
            <date>2019-12-13 01:58:15 -0800</date>
            <delta_ts>2019-12-16 02:46:41 -0800</delta_ts>
            <desc>WIP patch</desc>
            <filename>complex3.diff</filename>
            <type>text/plain</type>
            <size>46178</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luLmNtYWtlIGIvU291cmNlL1dl
YkNvcmUvUGxhdGZvcm1XaW4uY21ha2UKaW5kZXggZDFmZDRlYjEyZGQuLmRlODZmZDNhMDQxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbi5jbWFrZQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9QbGF0Zm9ybVdpbi5jbWFrZQpAQCAtNTEsNiArNTEsNyBAQCBsaXN0KEFQUEVORCBX
ZWJDb3JlX1NPVVJDRVMKIAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db2xvckRpcmVjdDJE
LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db21wbGV4VGV4dENvbnRyb2xsZXJEaXJl
Y3RXcml0ZS5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vQ29tcGxleFRleHRDb250cm9s
bGVyVW5pc2NyaWJlLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9ESUJQaXhlbERhdGEu
Y3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Zsb2F0UG9pbnREaXJlY3QyRC5jcHAKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRmxvYXRSZWN0RGlyZWN0MkQuY3BwCkBAIC02OSw3ICs3
MCw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9TaW1wbGVGb250RGF0YVdpbi5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vVHJh
bnNmb3JtYXRpb25NYXRyaXhEaXJlY3QyRC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
VHJhbnNmb3JtYXRpb25NYXRyaXhXaW4uY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1Vu
aXNjcmliZUNvbnRyb2xsZXIuY3BwCiAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL3dpbi9Eb3dubG9h
ZEJ1bmRsZVdpbi5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL3dpbi9OZXR3b3JrU3RhdGVOb3Rp
Zmllcldpbi5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwCmluZGV4IDg0NzI4NDllYWQwLi4yNTYwYjg3
ZTRlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29tcGxl
eFRleHRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwCkBAIC00MywzMyArNDMsNiBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLSNpZiBQTEFURk9STShXSU4pICYmICFVU0UoRElSRUNUMkQpCi0KLWNs
YXNzIFRleHRMYXlvdXQgewotfTsKLQotdm9pZCBUZXh0TGF5b3V0RGVsZXRlcjo6b3BlcmF0b3Io
KShUZXh0TGF5b3V0KikgY29uc3QKLXsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPFRleHRMYXlvdXQs
IFRleHRMYXlvdXREZWxldGVyPiBGb250Q2FzY2FkZTo6Y3JlYXRlTGF5b3V0KFJlbmRlclRleHQm
LCBmbG9hdCwgYm9vbCkgY29uc3QKLXsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotZmxvYXQg
Rm9udENhc2NhZGU6OndpZHRoKFRleHRMYXlvdXQmLCB1bnNpZ25lZCwgdW5zaWduZWQsIEhhc2hT
ZXQ8Y29uc3QgRm9udCo+KikKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1
cm4gMDsKLX0KLQotdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmNvbGxlY3RDb21wbGV4VGV4
dFJ1bnNGb3JDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQsIHVuc2lnbmVkLCBjb25z
dCBGb250KikKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotI2Vsc2UKLQogY2xh
c3MgVGV4dExheW91dCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CkBA
IC0yMTYsNyArMTg5LDggQEAgdW5zaWduZWQgQ29tcGxleFRleHRDb250cm9sbGVyOjpvZmZzZXRG
b3JQb3NpdGlvbihmbG9hdCBoLCBib29sIGluY2x1ZGVQYXJ0aWFsR2wKIAogICAgICAgICAgICAg
ICAgIC8vIEZJWE1FOiBJbnN0ZWFkIG9mIGRpdmlkaW5nIHRoZSBnbHlwaCdzIGFkdmFuY2UgZXF1
YWxseSBiZXR3ZWVuIHRoZSBjaGFyYWN0ZXJzLCB0aGlzCiAgICAgICAgICAgICAgICAgLy8gY291
bGQgdXNlIHRoZSBnbHlwaCdzICJsaWdhdHVyZSBjYXJldHMiLiBUaGlzIGlzIGF2YWlsYWJsZSBp
biBDb3JlVGV4dCB2aWEgQ1RGb250R2V0TGlnYXR1cmVDYXJldFBvc2l0aW9ucygpLgotICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGhpdEluZGV4ID0gaGl0R2x5cGhTdGFydCArIChoaXRHbHlwaEVu
ZCAtIGhpdEdseXBoU3RhcnQpICogKG1fcnVuLmx0cigpID8geCAvIGFkanVzdGVkQWR2YW5jZSA6
IDEgLSB4IC8gYWRqdXN0ZWRBZHZhbmNlKTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBoaXRQ
b3MgPSAoaGl0R2x5cGhFbmQgLSBoaXRHbHlwaFN0YXJ0KSAqICh4IC8gYWRqdXN0ZWRBZHZhbmNl
KTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBoaXRJbmRleCA9ICBtX3J1bi5sdHIoKSA/IGhp
dEdseXBoU3RhcnQgKyBoaXRQb3MgOiBoaXRHbHlwaEVuZCAtIGhpdFBvcyAtIDE7CiAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgc3RyaW5nTGVuZ3RoID0gY29tcGxleFRleHRSdW4uc3RyaW5nTGVu
Z3RoKCk7CiAgICAgICAgICAgICAgICAgQ2FjaGVkVGV4dEJyZWFrSXRlcmF0b3IgY3Vyc29yUG9z
aXRpb25JdGVyYXRvcihTdHJpbmdWaWV3KGNvbXBsZXhUZXh0UnVuLmNoYXJhY3RlcnMoKSwgc3Ry
aW5nTGVuZ3RoKSwgVGV4dEJyZWFrSXRlcmF0b3I6Ok1vZGU6OkNhcmV0LCBudWxsQXRvbSgpKTsK
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjbHVzdGVyU3RhcnQ7CkBAIC04OTMsNiArODY3LDQg
QEAgQ29tcGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4dFJ1bjo6Q29tcGxleFRleHRSdW4o
Y29uc3QgVmVjdG9yPEZsb2F0U2l6ZT4mIGEKIHsKIH0KIAotI2VuZGlmCi0KIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZvbnRDYXNjYWRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRD
YXNjYWRlLmNwcAppbmRleCA0MTI3NDdhY2Y4Yy4uM2YxMDRlYzBjN2IgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAKQEAgLTQxLDEwICs0
MSw2IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0cmluZ0hhc2guaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKLSNpZiBQTEFURk9STShXSU4pICYmICFVU0UoRElS
RUNUMkQpCi0jaW5jbHVkZSAiVW5pc2NyaWJlQ29udHJvbGxlci5oIgotI2VuZGlmCi0KIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIFdURjo6VW5pY29kZTsKQEAgLTM1MCwx
NSArMzQ2LDYgQEAgZmxvYXQgRm9udENhc2NhZGU6OndpZHRoT2ZUZXh0UmFuZ2UoY29uc3QgVGV4
dFJ1biYgcnVuLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZAogCiAgICAgYXV0byBjb2RlUGF0aFRv
VXNlID0gY29kZVBhdGgocnVuKTsKICAgICBpZiAoY29kZVBhdGhUb1VzZSA9PSBDb21wbGV4KSB7
Ci0jaWYgUExBVEZPUk0oV0lOKSAmJiAhVVNFKERJUkVDVDJEKQotICAgICAgICBVbmlzY3JpYmVD
b250cm9sbGVyIGl0KHRoaXMsIHJ1bik7Ci0gICAgICAgIGl0LmFkdmFuY2UoZnJvbSk7Ci0gICAg
ICAgIG9mZnNldEJlZm9yZVJhbmdlID0gaXQucnVuV2lkdGhTb0ZhcigpOwotICAgICAgICBpdC5h
ZHZhbmNlKHRvKTsKLSAgICAgICAgb2Zmc2V0QWZ0ZXJSYW5nZSA9IGl0LnJ1bldpZHRoU29GYXIo
KTsKLSAgICAgICAgaXQuYWR2YW5jZSh0byk7Ci0gICAgICAgIHRvdGFsV2lkdGggPSBpdC5ydW5X
aWR0aFNvRmFyKCk7Ci0jZWxzZQogICAgICAgICBDb21wbGV4VGV4dENvbnRyb2xsZXIgY29tcGxl
eEl0ZXJhdG9yKCp0aGlzLCBydW4sIGZhbHNlLCBmYWxsYmFja0ZvbnRzKTsKICAgICAgICAgY29t
cGxleEl0ZXJhdG9yLmFkdmFuY2UoZnJvbSwgbnVsbHB0ciwgSW5jbHVkZVBhcnRpYWxHbHlwaHMs
IGZhbGxiYWNrRm9udHMpOwogICAgICAgICBvZmZzZXRCZWZvcmVSYW5nZSA9IGNvbXBsZXhJdGVy
YXRvci5ydW5XaWR0aFNvRmFyKCk7CkBAIC0zNjYsNyArMzUzLDYgQEAgZmxvYXQgRm9udENhc2Nh
ZGU6OndpZHRoT2ZUZXh0UmFuZ2UoY29uc3QgVGV4dFJ1biYgcnVuLCB1bnNpZ25lZCBmcm9tLCB1
bnNpZ25lZAogICAgICAgICBvZmZzZXRBZnRlclJhbmdlID0gY29tcGxleEl0ZXJhdG9yLnJ1bldp
ZHRoU29GYXIoKTsKICAgICAgICAgY29tcGxleEl0ZXJhdG9yLmFkdmFuY2UocnVuLmxlbmd0aCgp
LCBudWxscHRyLCBJbmNsdWRlUGFydGlhbEdseXBocywgZmFsbGJhY2tGb250cyk7CiAgICAgICAg
IHRvdGFsV2lkdGggPSBjb21wbGV4SXRlcmF0b3IucnVuV2lkdGhTb0ZhcigpOwotI2VuZGlmCiAg
ICAgfSBlbHNlIHsKICAgICAgICAgV2lkdGhJdGVyYXRvciBzaW1wbGVJdGVyYXRvcih0aGlzLCBy
dW4sIGZhbGxiYWNrRm9udHMpOwogICAgICAgICBzaW1wbGVJdGVyYXRvci5hZHZhbmNlKGZyb20s
IG51bGxwdHIpOwpAQCAtMTM5Nyw3ICsxMzgzLDYgQEAgZmxvYXQgRm9udENhc2NhZGU6OmdldEds
eXBoc0FuZEFkdmFuY2VzRm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiBydW4sIHVuc2lnbmUK
ICAgICByZXR1cm4gaW5pdGlhbEFkdmFuY2U7CiB9CiAKLSNpZiAhUExBVEZPUk0oV0lOKSB8fCBV
U0UoRElSRUNUMkQpCiBmbG9hdCBGb250Q2FzY2FkZTo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JD
b21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRv
LCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIEZvclRleHRFbXBoYXNpc09yTm90IGZvclRleHRF
bXBoYXNpcykgY29uc3QKIHsKICAgICBmbG9hdCBpbml0aWFsQWR2YW5jZTsKQEAgLTE0MjcsNyAr
MTQxMiw2IEBAIGZsb2F0IEZvbnRDYXNjYWRlOjpnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvckNvbXBs
ZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgdW5zaWduCiAKICAgICByZXR1cm4gaW5pdGlhbEFk
dmFuY2U7CiB9Ci0jZW5kaWYKIAogdm9pZCBGb250Q2FzY2FkZTo6ZHJhd0VtcGhhc2lzTWFya3NG
b3JTaW1wbGVUZXh0KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVu
LCBjb25zdCBBdG9tU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgdW5zaWdu
ZWQgZnJvbSwgdW5zaWduZWQgdG8pIGNvbnN0CiB7CkBAIC0xNTQ1LDcgKzE1MjksNiBAQCBmbG9h
dCBGb250Q2FzY2FkZTo6ZmxvYXRXaWR0aEZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYgcnVu
LCBIYXNoU2V0PGNvbnN0IEZvbgogICAgIHJldHVybiBpdC5tX3J1bldpZHRoU29GYXI7CiB9CiAK
LSNpZiAhUExBVEZPUk0oV0lOKSB8fCBVU0UoRElSRUNUMkQpCiBmbG9hdCBGb250Q2FzY2FkZTo6
ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgSGFzaFNldDxjb25z
dCBGb250Kj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cpIGNv
bnN0CiB7CiAgICAgQ29tcGxleFRleHRDb250cm9sbGVyIGNvbnRyb2xsZXIoKnRoaXMsIHJ1biwg
dHJ1ZSwgZmFsbGJhY2tGb250cyk7CkBAIC0xNTU3LDcgKzE1NDAsNiBAQCBmbG9hdCBGb250Q2Fz
Y2FkZTo6ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgSGFzaFNl
dDxjb25zdCBGbwogICAgIH0KICAgICByZXR1cm4gY29udHJvbGxlci50b3RhbFdpZHRoKCk7CiB9
Ci0jZW5kaWYKIAogdm9pZCBGb250Q2FzY2FkZTo6YWRqdXN0U2VsZWN0aW9uUmVjdEZvclNpbXBs
ZVRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCB1bnNp
Z25lZCBmcm9tLCB1bnNpZ25lZCB0bykgY29uc3QKIHsKQEAgLTE1NzgsNyArMTU2MCw2IEBAIHZv
aWQgRm9udENhc2NhZGU6OmFkanVzdFNlbGVjdGlvblJlY3RGb3JTaW1wbGVUZXh0KGNvbnN0IFRl
eHRSdW4mIHJ1biwgTGF5b3V0UmVjCiAgICAgc2VsZWN0aW9uUmVjdC5zZXRXaWR0aChMYXlvdXRV
bml0Ojpmcm9tRmxvYXRDZWlsKGFmdGVyV2lkdGggLSBiZWZvcmVXaWR0aCkpOwogfQogCi0jaWYg
IVBMQVRGT1JNKFdJTikgfHwgVVNFKERJUkVDVDJEKQogdm9pZCBGb250Q2FzY2FkZTo6YWRqdXN0
U2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgTGF5b3V0UmVj
dCYgc2VsZWN0aW9uUmVjdCwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8pIGNvbnN0CiB7CiAg
ICAgQ29tcGxleFRleHRDb250cm9sbGVyIGNvbnRyb2xsZXIoKnRoaXMsIHJ1bik7CkBAIC0xNTkz
LDcgKzE1NzQsNiBAQCB2b2lkIEZvbnRDYXNjYWRlOjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9yQ29t
cGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBMYXlvdXRSZQogICAgICAgICBzZWxlY3Rpb25S
ZWN0Lm1vdmUoYmVmb3JlV2lkdGgsIDApOwogICAgIHNlbGVjdGlvblJlY3Quc2V0V2lkdGgoTGF5
b3V0VW5pdDo6ZnJvbUZsb2F0Q2VpbChhZnRlcldpZHRoIC0gYmVmb3JlV2lkdGgpKTsKIH0KLSNl
bmRpZgogCiBpbnQgRm9udENhc2NhZGU6Om9mZnNldEZvclBvc2l0aW9uRm9yU2ltcGxlVGV4dChj
b25zdCBUZXh0UnVuJiBydW4sIGZsb2F0IHgsIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNv
bnN0CiB7CkBAIC0xNjM4LDEzICsxNjE4LDExIEBAIGludCBGb250Q2FzY2FkZTo6b2Zmc2V0Rm9y
UG9zaXRpb25Gb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgZmxvYXQgeCwgYm9vCiAg
ICAgcmV0dXJuIG9mZnNldDsKIH0KIAotI2lmICFQTEFURk9STShXSU4pIHx8IFVTRShESVJFQ1Qy
RCkKIGludCBGb250Q2FzY2FkZTo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21wbGV4VGV4dChjb25z
dCBUZXh0UnVuJiBydW4sIGZsb2F0IHgsIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0
CiB7CiAgICAgQ29tcGxleFRleHRDb250cm9sbGVyIGNvbnRyb2xsZXIoKnRoaXMsIHJ1bik7CiAg
ICAgcmV0dXJuIGNvbnRyb2xsZXIub2Zmc2V0Rm9yUG9zaXRpb24oeCwgaW5jbHVkZVBhcnRpYWxH
bHlwaHMpOwogfQotI2VuZGlmCiAKICNpZiAhUExBVEZPUk0oQ09DT0EpICYmICFVU0UoSEFSRkJV
WlopCiAvLyBGSVhNRTogVW5pZnkgdGhpcyB3aXRoIHRoZSBtYWNPUyBhbmQgaU9TIGltcGxlbWVu
dGF0aW9uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0NvbXBsZXhUZXh0Q29udHJvbGxlclVuaXNjcmliZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vQ29tcGxleFRleHRDb250cm9sbGVyVW5pc2NyaWJlLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNzVjYzE0YjY2MDMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vQ29tcGxleFRl
eHRDb250cm9sbGVyVW5pc2NyaWJlLmNwcApAQCAtMCwwICsxLDI0OCBAQAorLyoKKyogQ29weXJp
Z2h0IChDKSAyMDE3LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisqIGFyZSBtZXQ6CisqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnIEFORCBBTlkKKyogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorKiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUworKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJDb21wbGV4VGV4dENvbnRyb2xsZXIuaCIKKworI2lmICFVU0UoRElSRUNUMkQp
CisKKyNpbmNsdWRlICJGb250Q2FjaGUuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgorI2lu
Y2x1ZGUgIkhXbmREQy5oIgorI2luY2x1ZGUgPHVzcDEwLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworc3RhdGljIGJvb2wgc2hhcGVCeVVuaXNjcmliZShjb25zdCBVQ2hhciogc3RyLCBpbnQg
bGVuLCBTQ1JJUFRfSVRFTSBpdGVtLCBjb25zdCBGb250KiBmb250RGF0YSwKKyAgICBWZWN0b3I8
V09SRD4mIGdseXBocywgVmVjdG9yPFdPUkQ+JiBjbHVzdGVycywKKyAgICBWZWN0b3I8U0NSSVBU
X1ZJU0FUVFI+JiB2aXN1YWxBdHRyaWJ1dGVzKQoreworICAgIEhXbmREQyBoZGM7CisgICAgSEZP
TlQgb2xkRm9udCA9IDA7CisgICAgSFJFU1VMVCBzaGFwZVJlc3VsdCA9IEVfUEVORElORzsKKyAg
ICBpbnQgZ2x5cGhDb3VudCA9IDA7CisKKyAgICBpZiAoIWZvbnREYXRhKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBkbyB7CisgICAgICAgIHNoYXBlUmVzdWx0ID0gU2NyaXB0U2hhcGUo
aGRjLCBmb250RGF0YS0+c2NyaXB0Q2FjaGUoKSwgd2NoYXJGcm9tKHN0ciksIGxlbiwgZ2x5cGhz
LnNpemUoKSwgJml0ZW0uYSwKKyAgICAgICAgICAgIGdseXBocy5kYXRhKCksIGNsdXN0ZXJzLmRh
dGEoKSwgdmlzdWFsQXR0cmlidXRlcy5kYXRhKCksICZnbHlwaENvdW50KTsKKyAgICAgICAgaWYg
KHNoYXBlUmVzdWx0ID09IEVfUEVORElORykgeworICAgICAgICAgICAgLy8gVGhlIHNjcmlwdCBj
YWNoZSBpc24ndCBwcmltZWQgd2l0aCBlbm91Z2ggaW5mbyB5ZXQuIFdlIG5lZWQgdG8gc2VsZWN0
IG91ciBIRk9OVCBpbnRvCisgICAgICAgICAgICAvLyBhIERDIGFuZCBwYXNzIHRoZSBEQyBpbiB0
byBTY3JpcHRTaGFwZS4KKyAgICAgICAgICAgIEFTU0VSVCghaGRjKTsKKyAgICAgICAgICAgIGhk
Yy5zZXRIV25kKDApOworICAgICAgICAgICAgSEZPTlQgaGZvbnQgPSBmb250RGF0YS0+cGxhdGZv
cm1EYXRhKCkuaGZvbnQoKTsKKyAgICAgICAgICAgIG9sZEZvbnQgPSAoSEZPTlQpU2VsZWN0T2Jq
ZWN0KGhkYywgaGZvbnQpOworICAgICAgICB9IGVsc2UgaWYgKHNoYXBlUmVzdWx0ID09IEVfT1VU
T0ZNRU1PUlkpIHsKKyAgICAgICAgICAgIC8vIE5lZWQgdG8gcmVzaXplIG91ciBidWZmZXJzLgor
ICAgICAgICAgICAgZ2x5cGhzLnJlc2l6ZShnbHlwaHMuc2l6ZSgpICogMik7CisgICAgICAgICAg
ICB2aXN1YWxBdHRyaWJ1dGVzLnJlc2l6ZShnbHlwaHMuc2l6ZSgpKTsKKyAgICAgICAgfQorICAg
IH0gd2hpbGUgKHNoYXBlUmVzdWx0ID09IEVfUEVORElORyB8fCBzaGFwZVJlc3VsdCA9PSBFX09V
VE9GTUVNT1JZKTsKKworICAgIGlmIChoZGMpCisgICAgICAgIFNlbGVjdE9iamVjdChoZGMsIG9s
ZEZvbnQpOworCisgICAgaWYgKEZBSUxFRChzaGFwZVJlc3VsdCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGdseXBocy5zaHJpbmsoZ2x5cGhDb3VudCk7CisgICAgdmlzdWFsQXR0cmli
dXRlcy5zaHJpbmsoZ2x5cGhDb3VudCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworY2xhc3Mg
VW5pc2NyaWJlQ29udHJvbGxlciB7CitwdWJsaWM6CisgICAgVW5pc2NyaWJlQ29udHJvbGxlcihj
b25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBWZWN0b3I8U0NSSVBU
X0lURU0+JiBpdGVtcykKKyAgICAgICAgOiBtX2ZvbnQoZm9udCkKKyAgICAgICAgLCBtX3J1bihy
dW4pCisgICAgICAgICwgbV9pdGVtcyhpdGVtcykgeyB9CisKKyAgICBib29sIHNoYXBlQW5kUGxh
Y2VJdGVtKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQsIGNvbnN0IEZvbnQqLCBHbHlwaEJ1ZmZlciop
OworCitwcml2YXRlOgorICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBtX2ZvbnQ7CisgICAgY29uc3Qg
VGV4dFJ1biYgbV9ydW47CisgICAgVmVjdG9yPFNDUklQVF9JVEVNPiYgbV9pdGVtczsKK307CisK
KworYm9vbCBVbmlzY3JpYmVDb250cm9sbGVyOjpzaGFwZUFuZFBsYWNlSXRlbShjb25zdCBVQ2hh
ciogY3AsIHVuc2lnbmVkIGksIGNvbnN0IEZvbnQqIGZvbnREYXRhLCBHbHlwaEJ1ZmZlciogZ2x5
cGhCdWZmZXIpCit7CisgICAgLy8gRGV0ZXJtaW5lIHRoZSBzdHJpbmcgZm9yIHRoaXMgaXRlbS4K
KyAgICBjb25zdCBVQ2hhciogc3RyID0gY3AgKyBtX2l0ZW1zW2ldLmlDaGFyUG9zOworICAgIGlu
dCBsZW4gPSBtX2l0ZW1zW2krMV0uaUNoYXJQb3MgLSBtX2l0ZW1zW2ldLmlDaGFyUG9zOworICAg
IFNDUklQVF9JVEVNIGl0ZW0gPSBtX2l0ZW1zW2ldOworCisgICAgLy8gU2V0IHVwIGJ1ZmZlcnMg
dG8gaG9sZCB0aGUgcmVzdWx0cyBvZiBzaGFwaW5nIHRoZSBpdGVtLgorICAgIFZlY3RvcjxXT1JE
PiBnbHlwaHM7CisgICAgVmVjdG9yPFdPUkQ+IGNsdXN0ZXJzOworICAgIFZlY3RvcjxTQ1JJUFRf
VklTQVRUUj4gdmlzdWFsQXR0cmlidXRlczsKKyAgICBjbHVzdGVycy5yZXNpemUobGVuKTsKKwor
ICAgIC8vIFNoYXBlIHRoZSBpdGVtLgorICAgIC8vIFRoZSByZWNvbW1lbmRlZCBzaXplIGZvciB0
aGUgZ2x5cGggYnVmZmVyIGlzIDEuNSAqIHRoZSBjaGFyYWN0ZXIgbGVuZ3RoICsgMTYgaW4gdGhl
IHVuaXNjcmliZSBkb2NzLgorICAgIC8vIEFwcGFyZW50bHkgdGhpcyBpcyBhIGdvb2Qgc2l6ZSB0
byBhdm9pZCBoYXZpbmcgdG8gbWFrZSByZXBlYXRlZCBjYWxscyB0byBTY3JpcHRTaGFwZS4KKyAg
ICBnbHlwaHMucmVzaXplKDEuNSAqIGxlbiArIDE2KTsKKyAgICB2aXN1YWxBdHRyaWJ1dGVzLnJl
c2l6ZShnbHlwaHMuc2l6ZSgpKTsKKworICAgIGlmICghc2hhcGVCeVVuaXNjcmliZShzdHIsIGxl
biwgaXRlbSwgZm9udERhdGEsIGdseXBocywgY2x1c3RlcnMsIHZpc3VhbEF0dHJpYnV0ZXMpKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIFZlY3RvcjxPcHRpb25hbDx1bnNpZ25lZD4+IHN0
cmluZ09mZnNldHMoZ2x5cGhzLnNpemUoKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGxlbjsgKytpKSB7CisgICAgICAgIGlmIChzdHJpbmdPZmZzZXRzW2NsdXN0ZXJzW2ldXSkKKyAg
ICAgICAgICAgIHN0cmluZ09mZnNldHNbY2x1c3RlcnNbaV1dID0gc3RkOjptaW4oKnN0cmluZ09m
ZnNldHNbY2x1c3RlcnNbaV1dLCBpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3RyaW5n
T2Zmc2V0c1tjbHVzdGVyc1tpXV0gPSBpOworICAgIH0KKworICAgIC8vIFdlIG5vdyBoYXZlIGEg
Y29sbGVjdGlvbiBvZiBnbHlwaHMuCisgICAgVmVjdG9yPEdPRkZTRVQ+IG9mZnNldHM7CisgICAg
VmVjdG9yPGludD4gYWR2YW5jZXM7CisgICAgb2Zmc2V0cy5yZXNpemUoZ2x5cGhzLnNpemUoKSk7
CisgICAgYWR2YW5jZXMucmVzaXplKGdseXBocy5zaXplKCkpOworICAgIEhSRVNVTFQgcGxhY2VS
ZXN1bHQgPSBTY3JpcHRQbGFjZSgwLCBmb250RGF0YS0+c2NyaXB0Q2FjaGUoKSwgZ2x5cGhzLmRh
dGEoKSwgZ2x5cGhzLnNpemUoKSwgdmlzdWFsQXR0cmlidXRlcy5kYXRhKCksCisgICAgICAgICZp
dGVtLmEsIGFkdmFuY2VzLmRhdGEoKSwgb2Zmc2V0cy5kYXRhKCksIDApOworICAgIGlmIChwbGFj
ZVJlc3VsdCA9PSBFX1BFTkRJTkcpIHsKKyAgICAgICAgLy8gVGhlIHNjcmlwdCBjYWNoZSBpc24n
dCBwcmltZWQgd2l0aCBlbm91Z2ggaW5mbyB5ZXQuIFdlIG5lZWQgdG8gc2VsZWN0IG91ciBIRk9O
VCBpbnRvCisgICAgICAgIC8vIGEgREMgYW5kIHBhc3MgdGhlIERDIGluIHRvIFNjcmlwdFBsYWNl
LgorICAgICAgICBIV25kREMgaGRjKDApOworICAgICAgICBIRk9OVCBoZm9udCA9IGZvbnREYXRh
LT5wbGF0Zm9ybURhdGEoKS5oZm9udCgpOworICAgICAgICBIRk9OVCBvbGRGb250ID0gKEhGT05U
KVNlbGVjdE9iamVjdChoZGMsIGhmb250KTsKKyAgICAgICAgcGxhY2VSZXN1bHQgPSBTY3JpcHRQ
bGFjZShoZGMsIGZvbnREYXRhLT5zY3JpcHRDYWNoZSgpLCBnbHlwaHMuZGF0YSgpLCBnbHlwaHMu
c2l6ZSgpLCB2aXN1YWxBdHRyaWJ1dGVzLmRhdGEoKSwKKyAgICAgICAgICAgICZpdGVtLmEsIGFk
dmFuY2VzLmRhdGEoKSwgb2Zmc2V0cy5kYXRhKCksIDApOworICAgICAgICBTZWxlY3RPYmplY3Qo
aGRjLCBvbGRGb250KTsKKyAgICB9CisgICAgCisgICAgaWYgKEZBSUxFRChwbGFjZVJlc3VsdCkg
fHwgZ2x5cGhzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBjb25zdCBm
bG9hdCBjTG9naWNhbFNjYWxlID0gZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLnVzZUdESSgpID8g
MS4wZiA6IDMyLjBmOworICAgIGZsb2F0IHNwYWNlV2lkdGggPSBmb250RGF0YS0+c3BhY2VXaWR0
aCgpIC0gZm9udERhdGEtPnN5bnRoZXRpY0JvbGRPZmZzZXQoKTsKKyAgICB1bnNpZ25lZCBsb2dp
Y2FsU3BhY2VXaWR0aCA9IHNwYWNlV2lkdGggKiBjTG9naWNhbFNjYWxlOworCisgICAgZm9yIChp
bnQgayA9IDA7IGsgPCBsZW47IGsrKykgeworICAgICAgICBVQ2hhciBjaCA9ICooc3RyICsgayk7
CisgICAgICAgIGJvb2wgdHJlYXRBc1NwYWNlID0gRm9udENhc2NhZGU6OnRyZWF0QXNTcGFjZShj
aCk7CisgICAgICAgIGJvb2wgdHJlYXRBc1plcm9XaWR0aFNwYWNlID0gRm9udENhc2NhZGU6OnRy
ZWF0QXNaZXJvV2lkdGhTcGFjZShjaCk7CisgICAgICAgIGlmICh0cmVhdEFzU3BhY2UgfHwgdHJl
YXRBc1plcm9XaWR0aFNwYWNlKSB7CisgICAgICAgICAgICAvLyBTdWJzdGl0dXRlIGluIHRoZSBz
cGFjZSBnbHlwaCBhdCB0aGUgYXBwcm9wcmlhdGUgcGxhY2UgaW4gdGhlIGdseXBocworICAgICAg
ICAgICAgLy8gYXJyYXkuCisgICAgICAgICAgICBnbHlwaHNbY2x1c3RlcnNba11dID0gZm9udERh
dGEtPnNwYWNlR2x5cGgoKTsKKyAgICAgICAgICAgIGFkdmFuY2VzW2NsdXN0ZXJzW2tdXSA9IHRy
ZWF0QXNTcGFjZSA/IGxvZ2ljYWxTcGFjZVdpZHRoIDogMDsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBnbHlwaHMuc2l6ZSgpOyBrKyspIHsKKyAgICAg
ICAgR2x5cGggZ2x5cGggPSBnbHlwaHNba107CisgICAgICAgIGZsb2F0IGFkdmFuY2UgPSBhZHZh
bmNlc1trXSAvIGNMb2dpY2FsU2NhbGU7CisgICAgICAgIGZsb2F0IG9mZnNldFggPSBvZmZzZXRz
W2tdLmR1IC8gY0xvZ2ljYWxTY2FsZTsKKyAgICAgICAgZmxvYXQgb2Zmc2V0WSA9IG9mZnNldHNb
a10uZHYgLyBjTG9naWNhbFNjYWxlOworCisgICAgICAgIC8vIE1hdGNoIEFwcEtpdCdzIHJ1bGVz
IGZvciB0aGUgaW50ZWdlciB2cy4gbm9uLWludGVnZXIgcmVuZGVyaW5nIG1vZGVzLgorICAgICAg
ICBmbG9hdCByb3VuZGVkQWR2YW5jZSA9IHJvdW5kZihhZHZhbmNlKTsKKyAgICAgICAgaWYgKCFm
b250RGF0YS0+cGxhdGZvcm1EYXRhKCkuaXNTeXN0ZW1Gb250KCkpIHsKKyAgICAgICAgICAgIGFk
dmFuY2UgPSByb3VuZGVkQWR2YW5jZTsKKyAgICAgICAgICAgIG9mZnNldFggPSByb3VuZGYob2Zm
c2V0WCk7CisgICAgICAgICAgICBvZmZzZXRZID0gcm91bmRmKG9mZnNldFkpOworICAgICAgICB9
CisKKyAgICAgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gdGFrZSB0aGUgR09GRlNFVFMgZm9yIGNv
bWJpbmluZyBnbHlwaHMgYW5kIHN0b3JlIHRoZW0gaW4gdGhlIGdseXBoIGJ1ZmZlcgorICAgICAg
ICAvLyBhcyB3ZWxsLCBzbyB0aGF0IHdoZW4gdGhlIHRpbWUgY29tZXMgdG8gZHJhdyB0aG9zZSBn
bHlwaHMsIHdlIGNhbiBhcHBseSB0aGUgYXBwcm9wcmlhdGUKKyAgICAgICAgLy8gdHJhbnNsYXRp
b24uCisgICAgICAgIGlmIChnbHlwaEJ1ZmZlcikgeworICAgICAgICAgICAgR2x5cGhCdWZmZXJB
ZHZhbmNlIG9yaWdpbihvZmZzZXRYLCAtb2Zmc2V0WSk7CisgICAgICAgICAgICBpZiAoIWdseXBo
QnVmZmVyLT5hZHZhbmNlc0NvdW50KCkpCisgICAgICAgICAgICAgICAgZ2x5cGhCdWZmZXItPnNl
dEluaXRpYWxBZHZhbmNlKG9yaWdpbik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgZ2x5cGhCdWZmZXItPmV4cGFuZExhc3RBZHZhbmNlKG9yaWdpbik7CisgICAgICAgICAgICBH
bHlwaEJ1ZmZlckFkdmFuY2UgZ2x5cGhBZHZhbmNlKC1vcmlnaW4ud2lkdGgoKSArIGFkdmFuY2Us
IC1vcmlnaW4uaGVpZ2h0KCkpOworICAgICAgICAgICAgZ2x5cGhCdWZmZXItPmFkZChnbHlwaCwg
Zm9udERhdGEsIGdseXBoQWR2YW5jZSwgc3RyaW5nT2Zmc2V0c1trXS52YWx1ZU9yKDApKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIENvbXBsZXhUZXh0
Q29udHJvbGxlcjo6Y29sbGVjdENvbXBsZXhUZXh0UnVuc0ZvckNoYXJhY3RlcnMoY29uc3QgVUNo
YXIqIGNwLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHN0cmluZ0xvY2F0aW9uLCBjb25zdCBG
b250KiBmb250KQoreworICAgIGlmICghZm9udCkgeworICAgICAgICAvLyBDcmVhdGUgYSBydW4g
b2YgbWlzc2luZyBnbHlwaHMgZnJvbSB0aGUgcHJpbWFyeSBmb250LgorICAgICAgICBtX2NvbXBs
ZXhUZXh0UnVucy5hcHBlbmQoQ29tcGxleFRleHRSdW46OmNyZWF0ZShtX2ZvbnQucHJpbWFyeUZv
bnQoKSwgY3AsIHN0cmluZ0xvY2F0aW9uLCBsZW5ndGgsIDAsIGxlbmd0aCwgbV9ydW4ubHRyKCkp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFZlY3RvcjxTQ1JJUFRfSVRFTT4gaXRl
bXMoNik7CisgICAgaW50IG51bUl0ZW1zID0gMDsKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIFND
UklQVF9DT05UUk9MIGNvbnRyb2wgeyB9OworICAgICAgICBTQ1JJUFRfU1RBVEUgc3RhdGUgeyB9
OworICAgICAgICAvLyBTZXQgdXAgdGhlIGNvcnJlY3QgZGlyZWN0aW9uIGZvciB0aGUgcnVuLgor
ICAgICAgICBzdGF0ZS51QmlkaUxldmVsID0gbV9ydW4ucnRsKCk7CisgICAgICAgIC8vIExvY2sg
dGhlIGNvcnJlY3QgZGlyZWN0aW9uYWwgb3ZlcnJpZGUuCisgICAgICAgIHN0YXRlLmZPdmVycmlk
ZURpcmVjdGlvbiA9IG1fcnVuLmRpcmVjdGlvbmFsT3ZlcnJpZGUoKTsKKworICAgICAgICAvLyBT
Y3JpcHRJdGVtaXplIG1heSB3cml0ZSAoY01heEl0ZW1zICsgMSkgU0NSSVBUX0lURU0uCisgICAg
ICAgIEhSRVNVTFQgaHIgPSBTY3JpcHRJdGVtaXplKHdjaGFyRnJvbShjcCksIGxlbmd0aCwgaXRl
bXMuc2l6ZSgpIC0gMSwgJmNvbnRyb2wsICZzdGF0ZSwgaXRlbXMuZGF0YSgpLCAmbnVtSXRlbXMp
OworICAgICAgICBpZiAoaHIgIT0gRV9PVVRPRk1FTU9SWSkgeworICAgICAgICAgICAgQVNTRVJU
KFNVQ0NFRURFRChocikpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
aXRlbXMucmVzaXplKGl0ZW1zLnNpemUoKSAqIDIpOworICAgIH0KKyAgICBpdGVtcy5yZXNpemUo
bnVtSXRlbXMgKyAxKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtSXRlbXM7IGkrKykg
eworICAgICAgICBHbHlwaEJ1ZmZlciBnbHlwaEJ1ZmZlcjsKKyAgICAgICAgZ2x5cGhCdWZmZXIu
c2F2ZU9mZnNldHNJblN0cmluZygpOworCisgICAgICAgIFVuaXNjcmliZUNvbnRyb2xsZXIgdWMo
bV9mb250LCBtX3J1biwgaXRlbXMpOworCisgICAgICAgIGlmICghdWMuc2hhcGVBbmRQbGFjZUl0
ZW0oY3AsIGksIGZvbnQsICZnbHlwaEJ1ZmZlcikpCisgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgVmVjdG9yPEdseXBoPiBnbHlwaHMoZ2x5cGhCdWZmZXIuc2l6ZSgpKTsKKyAgICAgICAg
VmVjdG9yPEZsb2F0U2l6ZT4gYWR2YW5jZXMoZ2x5cGhCdWZmZXIuc2l6ZSgpKTsKKyAgICAgICAg
VmVjdG9yPHVuc2lnbmVkPiBzdHJpbmdJbmRpY2VzKGdseXBoQnVmZmVyLnNpemUoKSk7CisKKyAg
ICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBnbHlwaEJ1ZmZlci5zaXplKCk7IGorKykgewor
ICAgICAgICAgICAgZ2x5cGhzW2pdID0gZ2x5cGhCdWZmZXIuZ2x5cGhBdChqKTsKKyAgICAgICAg
ICAgIGFkdmFuY2VzW2pdID0gRmxvYXRTaXplKGdseXBoQnVmZmVyLmFkdmFuY2VBdChqKSk7Cisg
ICAgICAgICAgICBzdHJpbmdJbmRpY2VzW2pdID0gaXRlbXNbaV0uaUNoYXJQb3MgKyBnbHlwaEJ1
ZmZlci5vZmZzZXRJblN0cmluZyhqKTsKKyAgICAgICAgfQorCisgICAgICAgIFZlY3RvcjxGbG9h
dFBvaW50PiBvcmlnaW5zOworICAgICAgICBGbG9hdFNpemUgaW5pdGlhbEFkdmFuY2UoZ2x5cGhC
dWZmZXIuaW5pdGlhbEFkdmFuY2UoKSk7CisgICAgICAgIGJvb2wgbHRyID0gIWl0ZW1zW2ldLmEu
ZlJUTDsKKyAgICAgICAgbV9jb21wbGV4VGV4dFJ1bnMuYXBwZW5kKENvbXBsZXhUZXh0UnVuOjpj
cmVhdGUoYWR2YW5jZXMsIG9yaWdpbnMsIGdseXBocywgc3RyaW5nSW5kaWNlcywgaW5pdGlhbEFk
dmFuY2UsICpmb250LCBjcCwgc3RyaW5nTG9jYXRpb24sIGxlbmd0aCwgaXRlbXNbaV0uaUNoYXJQ
b3MsIGl0ZW1zW2krMV0uaUNoYXJQb3MsIGx0cikpOworICAgIH0KK30KKworfQorCisjZW5kaWYg
Ly8gIVVTRShESVJFQ1QyRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9Gb250Q0dXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0ZvbnRDR1dpbi5jcHAKaW5kZXggMGVmNjU1ZDhkMDUuLjMzZjg1MmViNmU4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENHV2luLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENHV2luLmNw
cApAQCAtMzQsNyArMzQsNiBAQAogI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCiAjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIlVuaXNj
cmliZUNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJXZWJDb3JlVGV4dFJlbmRlcmVyLmgiCiAjaW5j
bHVkZSA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4
dHJhcy5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ZvbnRDYXNjYWRlRGlyZWN0MkQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0ZvbnRDYXNjYWRlRGlyZWN0MkQuY3BwCmluZGV4IDkxMTEyZDk2NWM4Li5iMmQzNDcx
YjhhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Zv
bnRDYXNjYWRlRGlyZWN0MkQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9Gb250Q2FzY2FkZURpcmVjdDJELmNwcApAQCAtMzcsNyArMzcsNiBAQAogI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZURpcmVjdDJELmgiCiAjaW5jbHVkZSAi
SW50UmVjdC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dERpcmVjdDJELmgiCi0jaW5jbHVk
ZSAiVW5pc2NyaWJlQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIldlYkNvcmVUZXh0UmVuZGVyZXIu
aCIKICNpbmNsdWRlIDxkMmQxLmg+CiAjaW5jbHVkZSA8ZHdyaXRlXzMuaD4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250V2luLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250V2luLmNwcAppbmRleCAxY2FhODAy
MmUyNi4uNTJjYjg4ZjUzZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9Gb250V2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vRm9udFdpbi5jcHAKQEAgLTM1LDEwICszNSw2IEBACiAjaW5jbHVkZSAiVGV4dFJ1
bi5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKLSNpZiAhVVNFKERJUkVDVDJEKQot
I2luY2x1ZGUgIlVuaXNjcmliZUNvbnRyb2xsZXIuaCIKLSNlbmRpZgotCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGJvb2wgRm9udENhc2NhZGU6OmNhblJldHVybkZhbGxiYWNrRm9udHNGb3JDb21w
bGV4VGV4dCgpCkBAIC01MSw3MiArNDcsNCBAQCBib29sIEZvbnRDYXNjYWRlOjpjYW5FeHBhbmRB
cm91bmRJZGVvZ3JhcGhzSW5Db21wbGV4VGV4dCgpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi0j
aWYgIVVTRShESVJFQ1QyRCkKLQotdm9pZCBGb250Q2FzY2FkZTo6YWRqdXN0U2VsZWN0aW9uUmVj
dEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgTGF5b3V0UmVjdCYgc2VsZWN0aW9u
UmVjdCwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8pIGNvbnN0Ci17Ci0gICAgVW5pc2NyaWJl
Q29udHJvbGxlciBpdCh0aGlzLCBydW4pOwotICAgIGl0LmFkdmFuY2UoZnJvbSk7Ci0gICAgZmxv
YXQgYmVmb3JlV2lkdGggPSBpdC5ydW5XaWR0aFNvRmFyKCk7Ci0gICAgaXQuYWR2YW5jZSh0byk7
Ci0gICAgZmxvYXQgYWZ0ZXJXaWR0aCA9IGl0LnJ1bldpZHRoU29GYXIoKTsKLQotICAgIGlmIChy
dW4ucnRsKCkpIHsKLSAgICAgICAgaXQuYWR2YW5jZShydW4ubGVuZ3RoKCkpOwotICAgICAgICBz
ZWxlY3Rpb25SZWN0Lm1vdmUoaXQucnVuV2lkdGhTb0ZhcigpIC0gYWZ0ZXJXaWR0aCwgMCk7Ci0g
ICAgfSBlbHNlCi0gICAgICAgIHNlbGVjdGlvblJlY3QubW92ZShiZWZvcmVXaWR0aCwgMCk7Ci0g
ICAgc2VsZWN0aW9uUmVjdC5zZXRXaWR0aChhZnRlcldpZHRoIC0gYmVmb3JlV2lkdGgpOwotfQot
Ci1mbG9hdCBGb250Q2FzY2FkZTo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dChj
b25zdCBUZXh0UnVuJiBydW4sIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvLCBHbHlwaEJ1ZmZl
ciYgZ2x5cGhCdWZmZXIsIEZvclRleHRFbXBoYXNpc09yTm90IGZvclRleHRFbXBoYXNpcykgY29u
c3QKLXsKLSAgICBpZiAoZm9yVGV4dEVtcGhhc2lzKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBBZGQg
Zm9yVGV4dEVtcGhhc2lzIHBhcmVtZXRlciB0byBVbmlzY3JpYmVDb250cm9sbGVyIGFuZCB1c2Ug
aXQuCi0gICAgICAgIExPR19FUlJPUigiTm90IGltcGxlbWVudGVkIGZvciB0ZXh0IGVtcGhhc2lz
LiIpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBVbmlzY3JpYmVDb250cm9sbGVy
IGNvbnRyb2xsZXIodGhpcywgcnVuKTsKLSAgICBjb250cm9sbGVyLmFkdmFuY2UoZnJvbSk7Ci0g
ICAgZmxvYXQgYmVmb3JlV2lkdGggPSBjb250cm9sbGVyLnJ1bldpZHRoU29GYXIoKTsKLSAgICBj
b250cm9sbGVyLmFkdmFuY2UodG8sICZnbHlwaEJ1ZmZlcik7Ci0KLSAgICBpZiAoZ2x5cGhCdWZm
ZXIuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGZsb2F0IGFmdGVyV2lkdGgg
PSBjb250cm9sbGVyLnJ1bldpZHRoU29GYXIoKTsKLQotICAgIGlmIChydW4ucnRsKCkpIHsKLSAg
ICAgICAgY29udHJvbGxlci5hZHZhbmNlKHJ1bi5sZW5ndGgoKSk7Ci0gICAgICAgIHJldHVybiBj
b250cm9sbGVyLnJ1bldpZHRoU29GYXIoKSAtIGFmdGVyV2lkdGg7Ci0gICAgfQotICAgIHJldHVy
biBiZWZvcmVXaWR0aDsKLX0KLQotZmxvYXQgRm9udENhc2NhZGU6OmZsb2F0V2lkdGhGb3JDb21w
bGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFj
a0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93KSBjb25zdAotewotICAgIFVuaXNj
cmliZUNvbnRyb2xsZXIgY29udHJvbGxlcih0aGlzLCBydW4sIGZhbGxiYWNrRm9udHMpOwotICAg
IGNvbnRyb2xsZXIuYWR2YW5jZShydW4ubGVuZ3RoKCkpOwotICAgIGlmIChnbHlwaE92ZXJmbG93
KSB7Ci0gICAgICAgIGdseXBoT3ZlcmZsb3ctPnRvcCA9IHN0ZDo6bWF4PGludD4oZ2x5cGhPdmVy
Zmxvdy0+dG9wLCBjZWlsZigtY29udHJvbGxlci5taW5HbHlwaEJvdW5kaW5nQm94WSgpKSAtIChn
bHlwaE92ZXJmbG93LT5jb21wdXRlQm91bmRzID8gMCA6IGZvbnRNZXRyaWNzKCkuYXNjZW50KCkp
KTsKLSAgICAgICAgZ2x5cGhPdmVyZmxvdy0+Ym90dG9tID0gc3RkOjptYXg8aW50PihnbHlwaE92
ZXJmbG93LT5ib3R0b20sIGNlaWxmKGNvbnRyb2xsZXIubWF4R2x5cGhCb3VuZGluZ0JveFkoKSkg
LSAoZ2x5cGhPdmVyZmxvdy0+Y29tcHV0ZUJvdW5kcyA/IDAgIDogZm9udE1ldHJpY3MoKS5kZXNj
ZW50KCkpKTsKLSAgICAgICAgZ2x5cGhPdmVyZmxvdy0+bGVmdCA9IHN0ZDo6bWF4PGludD4oMCwg
Y2VpbGYoLWNvbnRyb2xsZXIubWluR2x5cGhCb3VuZGluZ0JveFgoKSkpOwotICAgICAgICBnbHlw
aE92ZXJmbG93LT5yaWdodCA9IHN0ZDo6bWF4PGludD4oMCwgY2VpbGYoY29udHJvbGxlci5tYXhH
bHlwaEJvdW5kaW5nQm94WCgpIC0gY29udHJvbGxlci5ydW5XaWR0aFNvRmFyKCkpKTsKLSAgICB9
Ci0gICAgcmV0dXJuIGNvbnRyb2xsZXIucnVuV2lkdGhTb0ZhcigpOwotfQotCi1pbnQgRm9udENh
c2NhZGU6Om9mZnNldEZvclBvc2l0aW9uRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVu
LCBmbG9hdCB4RmxvYXQsIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0Ci17Ci0gICAg
Ly8gRklYTUU6IFRoaXMgdHJ1bmNhdGlvbiBpcyBub3QgYSBwcm9ibGVtIGZvciBIVE1MLCBidXQg
b25seSBhZmZlY3RzIFNWRywgd2hpY2ggcGFzc2VzIGZsb2F0aW5nLXBvaW50IG51bWJlcnMKLSAg
ICAvLyB0byBGb250Q2FzY2FkZTo6b2Zmc2V0Rm9yUG9zaXRpb24oKS4gQnVnIGh0dHA6Ly93ZWJr
aXQub3JnL2IvNDA2NzMgdHJhY2tzIGZpeGluZyB0aGlzIHByb2JsZW0uCi0gICAgaW50IHggPSBz
dGF0aWNfY2FzdDxpbnQ+KHhGbG9hdCk7Ci0KLSAgICBVbmlzY3JpYmVDb250cm9sbGVyIGNvbnRy
b2xsZXIodGhpcywgcnVuKTsKLSAgICByZXR1cm4gY29udHJvbGxlci5vZmZzZXRGb3JQb3NpdGlv
bih4LCBpbmNsdWRlUGFydGlhbEdseXBocyk7Ci19Ci0KLSNlbmRpZgotCiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vVW5pc2NyaWJlQ29udHJvbGxl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vVW5pc2NyaWJlQ29u
dHJvbGxlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3NGM0ODYwZmYxLi4w
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vVW5p
c2NyaWJlQ29udHJvbGxlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0NTkgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJVbmlzY3JpYmVDb250cm9sbGVyLmgiCi0KLSNpbmNsdWRlICJGb250LmgiCi0jaW5jbHVkZSAi
Rm9udENhc2NhZGUuaCIKLSNpbmNsdWRlICJIV25kREMuaCIKLSNpbmNsdWRlICJUZXh0UnVuLmgi
Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC93aW4vV0No
YXJTdHJpbmdFeHRyYXMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotdXNpbmcgbmFtZXNwYWNl
IFdURjo6VW5pY29kZTsKLQotLy8gRklYTUU6IFJlYXJjaGl0ZWN0IHRoaXMgdG8gYmUgbW9yZSBs
aWtlIFdpZHRoSXRlcmF0b3IgaW4gRm9udC5jcHAuICBIYXZlIGFuIGFkdmFuY2UoKSBtZXRob2QK
LS8vIHRoYXQgZG9lcyBzdHVmZiBpbiB0aGF0IG1ldGhvZCBpbnN0ZWFkIG9mIGRvaW5nIGV2ZXJ5
dGhpbmcgaW4gdGhlIGNvbnN0cnVjdG9yLiAgSGF2ZSBhZHZhbmNlKCkKLS8vIHRha2UgdGhlIEds
eXBoQnVmZmVyIGFzIGFuIGFyZyBzbyB0aGF0IHdlIGRvbid0IGhhdmUgdG8gcG9wdWxhdGUgdGhl
IGdseXBoIGJ1ZmZlciB3aGVuCi0vLyBtZWFzdXJpbmcuCi1VbmlzY3JpYmVDb250cm9sbGVyOjpV
bmlzY3JpYmVDb250cm9sbGVyKGNvbnN0IEZvbnRDYXNjYWRlKiBmb250LCBjb25zdCBUZXh0UnVu
JiBydW4sIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzKQotICAgIDogbV9mb250
KCpmb250KQotICAgICwgbV9ydW4ocnVuKQotICAgICwgbV9mYWxsYmFja0ZvbnRzKGZhbGxiYWNr
Rm9udHMpCi0gICAgLCBtX21pbkdseXBoQm91bmRpbmdCb3hYKHN0ZDo6bnVtZXJpY19saW1pdHM8
ZmxvYXQ+OjptYXgoKSkKLSAgICAsIG1fbWF4R2x5cGhCb3VuZGluZ0JveFgoc3RkOjpudW1lcmlj
X2xpbWl0czxmbG9hdD46Om1pbigpKQotICAgICwgbV9taW5HbHlwaEJvdW5kaW5nQm94WShzdGQ6
Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6bWF4KCkpCi0gICAgLCBtX21heEdseXBoQm91bmRpbmdC
b3hZKHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptaW4oKSkKLSAgICAsIG1fY3VycmVudENo
YXJhY3RlcigwKQotICAgICwgbV9lbmQocnVuLmxlbmd0aCgpKQotICAgICwgbV9ydW5XaWR0aFNv
RmFyKDApCi0gICAgLCBtX3BhZGRpbmcocnVuLmV4cGFuc2lvbigpKQotICAgICwgbV9jb21wdXRp
bmdPZmZzZXRQb3NpdGlvbihmYWxzZSkKLSAgICAsIG1faW5jbHVkZVBhcnRpYWxHbHlwaHMoZmFs
c2UpCi0gICAgLCBtX29mZnNldFgoMCkKLSAgICAsIG1fb2Zmc2V0UG9zaXRpb24oMCkKLXsKLSAg
ICBpZiAoIW1fcGFkZGluZykKLSAgICAgICAgbV9wYWRQZXJTcGFjZSA9IDA7Ci0gICAgZWxzZSB7
Ci0gICAgICAgIGZsb2F0IG51bVNwYWNlcyA9IDA7Ci0gICAgICAgIGZvciAoaW50IHMgPSAwOyBz
IDwgbV9ydW4ubGVuZ3RoKCk7IHMrKykgewotICAgICAgICAgICAgaWYgKEZvbnRDYXNjYWRlOjp0
cmVhdEFzU3BhY2UobV9ydW5bc10pKQotICAgICAgICAgICAgICAgIG51bVNwYWNlcysrOwotICAg
ICAgICB9Ci0KLSAgICAgICAgaWYgKG51bVNwYWNlcyA9PSAwKQotICAgICAgICAgICAgbV9wYWRQ
ZXJTcGFjZSA9IDA7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fcGFkUGVyU3BhY2UgPSBt
X3BhZGRpbmcgLyBudW1TcGFjZXM7Ci0gICAgfQotCi0gICAgLy8gTnVsbCBvdXQgb3VyIHVuaXNj
cmliZSBzdHJ1Y3RzCi0gICAgcmVzZXRDb250cm9sQW5kU3RhdGUoKTsKLX0KLQotaW50IFVuaXNj
cmliZUNvbnRyb2xsZXI6Om9mZnNldEZvclBvc2l0aW9uKGludCB4LCBib29sIGluY2x1ZGVQYXJ0
aWFsR2x5cGhzKQotewotICAgIG1fY29tcHV0aW5nT2Zmc2V0UG9zaXRpb24gPSB0cnVlOwotICAg
IG1faW5jbHVkZVBhcnRpYWxHbHlwaHMgPSBpbmNsdWRlUGFydGlhbEdseXBoczsKLSAgICBtX29m
ZnNldFggPSB4OwotICAgIG1fb2Zmc2V0UG9zaXRpb24gPSAwOwotICAgIGFkdmFuY2UobV9ydW4u
bGVuZ3RoKCkpOwotICAgIGlmIChtX2NvbXB1dGluZ09mZnNldFBvc2l0aW9uKSB7Ci0gICAgICAg
IC8vIFRoZSBwb2ludCBpcyB0byB0aGUgbGVmdCBvciB0byB0aGUgcmlnaHQgb2YgdGhlIGVudGly
ZSBydW4uCi0gICAgICAgIGlmICgobV9vZmZzZXRYID49IG1fcnVuV2lkdGhTb0ZhciAmJiBtX3J1
bi5sdHIoKSkgfHwgKG1fb2Zmc2V0WCA8IDAgJiYgbV9ydW4ucnRsKCkpKQotICAgICAgICAgICAg
bV9vZmZzZXRQb3NpdGlvbiA9IG1fZW5kOwotICAgIH0KLSAgICBtX2NvbXB1dGluZ09mZnNldFBv
c2l0aW9uID0gZmFsc2U7Ci0gICAgcmV0dXJuIG1fb2Zmc2V0UG9zaXRpb247Ci19Ci0KLXZvaWQg
VW5pc2NyaWJlQ29udHJvbGxlcjo6YWR2YW5jZSh1bnNpZ25lZCBvZmZzZXQsIEdseXBoQnVmZmVy
KiBnbHlwaEJ1ZmZlcikKLXsKLSAgICAvLyBGSVhNRTogV2UgcmVhbGx5IHdhbnQgdG8gYmUgdXNp
bmcgYSBuZXdlciB2ZXJzaW9uIG9mIFVuaXNjcmliZSB0aGF0IHN1cHBvcnRzIHRoZSBuZXcgT3Bl
blR5cGUKLSAgICAvLyBmdW5jdGlvbnMuICBUaG9zZSBmdW5jdGlvbnMgd291bGQgYWxsb3cgdXMg
dG8gdHVybiBvZmYga2VybmluZyBhbmQgbGlnYXR1cmVzLiAgV2l0aG91dCBiZWluZyBhYmxlCi0g
ICAgLy8gdG8gZG8gdGhhdCwgd2Ugd2lsbCBoYXZlIGJ1Z2d5IGxpbmUgYnJlYWtpbmcgYW5kIG1l
dHJpY3Mgd2hlbiBzaW1wbGUgYW5kIGNvbXBsZXggdGV4dCBhcmUgY2xvc2UKLSAgICAvLyB0b2dl
dGhlciAodGhlIGNvbXBsZXggY29kZSBwYXRoIHdpbGwgbmFycm93IHRoZSB0ZXh0IGJlY2F1c2Ug
b2Yga2VybmluZyBhbmQgbGlnYXR1cmVzIGFuZCB0aGVuCi0gICAgLy8gd2hlbiBiaWRpIHByb2Nl
c3Npbmcgc3BsaXRzIGludG8gbXVsdGlwbGUgcnVucywgdGhlIHNpbXBsZSBwb3J0aW9ucyB3aWxs
IGdldCB3aWRlciBhbmQgY2F1c2UgdXMgdG8KLSAgICAvLyBzcGlsbCBvZmYgdGhlIGVkZ2Ugb2Yg
YSBsaW5lKS4KLSAgICBpZiAoc3RhdGljX2Nhc3Q8aW50PihvZmZzZXQpID4gbV9lbmQpCi0gICAg
ICAgIG9mZnNldCA9IG1fZW5kOwotCi0gICAgaW50IGxlbmd0aCA9IG9mZnNldCAtIG1fY3VycmVu
dENoYXJhY3RlcjsKLSAgICBpZiAobGVuZ3RoIDw9IDApCi0gICAgICAgIHJldHVybjsKLQotICAg
IFN0cmluZyBidWZmZXJGb3IxNkJpdERhdGE7Ci0KLSAgICAvLyBJdGVtaXplIHRoZSBzdHJpbmcu
Ci0gICAgY29uc3QgVUNoYXIqIGNwID0gbnVsbHB0cjsKLSAgICBpZiAobV9ydW4uaXM4Qml0KCkp
IHsKLSAgICAgICAgLy8gVW5pc2NyaWJlIG9ubHkgZGVhbHMgd2l0aCAxNi1iaXQgY2hhcmFjdGVy
cy4gTXVzdCBnZW5lcmF0ZSB0aGVtIG5vdy4KLSAgICAgICAgYnVmZmVyRm9yMTZCaXREYXRhID0g
U3RyaW5nOjptYWtlMTZCaXRGcm9tOEJpdFNvdXJjZShtX3J1bi5kYXRhOChtX2N1cnJlbnRDaGFy
YWN0ZXIpLCBsZW5ndGgpOwotICAgICAgICBjcCA9IGJ1ZmZlckZvcjE2Qml0RGF0YS5jaGFyYWN0
ZXJzMTYoKTsKLSAgICB9IGVsc2UKLSAgICAgICAgY3AgPSBtX3J1bi5kYXRhMTYobV9jdXJyZW50
Q2hhcmFjdGVyKTsKLQotICAgIHVuc2lnbmVkIGJhc2VDaGFyYWN0ZXIgPSBtX2N1cnJlbnRDaGFy
YWN0ZXI7Ci0KLSAgICAvLyBXZSBicmVhayB1cCBpdGVtaXphdGlvbiBvZiB0aGUgc3RyaW5nIGJ5
IGZvbnREYXRhIGFuZCAoaWYgbmVlZGVkKSB0aGUgdXNlIG9mIHNtYWxsIGNhcHMuCi0KLSAgICAv
LyBGSVhNRTogSXQncyBpbmNvbnNpc3RlbnQgdGhhdCB3ZSB1c2UgbG9naWNhbCBvcmRlciB3aGVu
IGl0ZW1pemluZywgc2luY2UgdGhpcwotICAgIC8vIGRvZXMgbm90IG1hdGNoIG5vcm1hbCBSVEwu
Ci0KLSAgICAvLyBGSVhNRTogVGhpcyBmdW5jdGlvbiBzaG91bGQgZGVjb2RlIHN1cnJvZ2F0ZSBw
YWlycy4gQ3VycmVudGx5IGl0IG1ha2VzIGxpdHRsZSBkaWZmZXJlbmNlIHRoYXQKLSAgICAvLyBp
dCBkb2VzIG5vdCBiZWNhdXNlIHRoZSBmb250IGNhY2hlIG9uIFdpbmRvd3MgZG9lcyBub3Qgc3Vw
cG9ydCBub24tQk1QIGNoYXJhY3RlcnMuCi0gICAgVmVjdG9yPFVDaGFyLCAyNTY+IHNtYWxsQ2Fw
c0J1ZmZlcjsKLSAgICBpZiAobV9mb250LmlzU21hbGxDYXBzKCkpCi0gICAgICAgIHNtYWxsQ2Fw
c0J1ZmZlci5yZXNpemUobGVuZ3RoKTsKLQotICAgIHVuc2lnbmVkIGluZGV4T2ZGb250VHJhbnNp
dGlvbiA9IG1fcnVuLnJ0bCgpID8gbGVuZ3RoIC0gMSA6IDA7Ci0gICAgY29uc3QgVUNoYXIqIGN1
cnIgPSBtX3J1bi5ydGwoKSA/IGNwICsgbGVuZ3RoICAtIDEgOiBjcDsKLSAgICBjb25zdCBVQ2hh
ciogZW5kID0gbV9ydW4ucnRsKCkgPyBjcCAtIDEgOiBjcCArIGxlbmd0aDsKLQotICAgIGNvbnN0
IEZvbnQqIGZvbnREYXRhOwotICAgIGNvbnN0IEZvbnQqIG5leHRGb250RGF0YSA9IG1fZm9udC5n
bHlwaERhdGFGb3JDaGFyYWN0ZXIoKmN1cnIsIGZhbHNlKS5mb250OwotCi0gICAgVUNoYXIgbmV3
QyA9IDA7Ci0KLSAgICBib29sIGlzU21hbGxDYXBzOwotICAgIGJvb2wgbmV4dElzU21hbGxDYXBz
ID0gbV9mb250LmlzU21hbGxDYXBzKCkgJiYgIShVX0dFVF9HQ19NQVNLKCpjdXJyKSAmIFVfR0Nf
TV9NQVNLKSAmJiAobmV3QyA9IHVfdG91cHBlcigqY3VycikpICE9ICpjdXJyOwotCi0gICAgaWYg
KG5leHRJc1NtYWxsQ2FwcykKLSAgICAgICAgc21hbGxDYXBzQnVmZmVyW2N1cnIgLSBjcF0gPSBu
ZXdDOwotCi0gICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgY3VyciA9IG1fcnVuLnJ0bCgpID8g
Y3VyciAtIDEgOiBjdXJyICsgMTsKLSAgICAgICAgaWYgKGN1cnIgPT0gZW5kKQotICAgICAgICAg
ICAgYnJlYWs7Ci0KLSAgICAgICAgZm9udERhdGEgPSBuZXh0Rm9udERhdGE7Ci0gICAgICAgIGlz
U21hbGxDYXBzID0gbmV4dElzU21hbGxDYXBzOwotICAgICAgICBpbnQgaW5kZXggPSBjdXJyIC0g
Y3A7Ci0gICAgICAgIFVDaGFyIGMgPSAqY3VycjsKLQotICAgICAgICBib29sIGZvcmNlU21hbGxD
YXBzID0gaXNTbWFsbENhcHMgJiYgKFVfR0VUX0dDX01BU0soYykgJiBVX0dDX01fTUFTSyk7Ci0g
ICAgICAgIG5leHRGb250RGF0YSA9IG1fZm9udC5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoKmN1cnIs
IGZhbHNlLCBmb3JjZVNtYWxsQ2FwcyA/IFNtYWxsQ2Fwc1ZhcmlhbnQgOiBBdXRvVmFyaWFudCku
Zm9udDsKLSAgICAgICAgaWYgKG1fZm9udC5pc1NtYWxsQ2FwcygpKSB7Ci0gICAgICAgICAgICBu
ZXh0SXNTbWFsbENhcHMgPSBmb3JjZVNtYWxsQ2FwcyB8fCAobmV3QyA9IHVfdG91cHBlcihjKSkg
IT0gYzsKLSAgICAgICAgICAgIGlmIChuZXh0SXNTbWFsbENhcHMpCi0gICAgICAgICAgICAgICAg
c21hbGxDYXBzQnVmZmVyW2luZGV4XSA9IGZvcmNlU21hbGxDYXBzID8gYyA6IG5ld0M7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAobV9mYWxsYmFja0ZvbnRzICYmIGZvbnREYXRhICYmIG5leHRG
b250RGF0YSAhPSBmb250RGF0YSAmJiBmb250RGF0YSAhPSAmbV9mb250LnByaW1hcnlGb250KCkp
Ci0gICAgICAgICAgICBtX2ZhbGxiYWNrRm9udHMtPmFkZChmb250RGF0YSk7Ci0KLSAgICAgICAg
aWYgKG5leHRGb250RGF0YSAhPSBmb250RGF0YSB8fCBuZXh0SXNTbWFsbENhcHMgIT0gaXNTbWFs
bENhcHMpIHsKLSAgICAgICAgICAgIGludCBpdGVtU3RhcnQgPSBtX3J1bi5ydGwoKSA/IGluZGV4
ICsgMSA6IGluZGV4T2ZGb250VHJhbnNpdGlvbjsKLSAgICAgICAgICAgIGludCBpdGVtTGVuZ3Ro
ID0gbV9ydW4ucnRsKCkgPyBpbmRleE9mRm9udFRyYW5zaXRpb24gLSBpbmRleCA6IGluZGV4IC0g
aW5kZXhPZkZvbnRUcmFuc2l0aW9uOwotICAgICAgICAgICAgbV9jdXJyZW50Q2hhcmFjdGVyID0g
YmFzZUNoYXJhY3RlciArIGl0ZW1TdGFydDsKLSAgICAgICAgICAgIGl0ZW1pemVTaGFwZUFuZFBs
YWNlKChpc1NtYWxsQ2FwcyA/IHNtYWxsQ2Fwc0J1ZmZlci5kYXRhKCkgOiBjcCkgKyBpdGVtU3Rh
cnQsIGl0ZW1TdGFydCwgaXRlbUxlbmd0aCwgZm9udERhdGEsIGdseXBoQnVmZmVyKTsKLSAgICAg
ICAgICAgIGluZGV4T2ZGb250VHJhbnNpdGlvbiA9IGluZGV4OwotICAgICAgICB9Ci0gICAgfQot
ICAgIAotICAgIGludCBpdGVtTGVuZ3RoID0gbV9ydW4ucnRsKCkgPyBpbmRleE9mRm9udFRyYW5z
aXRpb24gKyAxIDogbGVuZ3RoIC0gaW5kZXhPZkZvbnRUcmFuc2l0aW9uOwotICAgIGlmIChpdGVt
TGVuZ3RoKSB7Ci0gICAgICAgIGlmIChtX2ZhbGxiYWNrRm9udHMgJiYgbmV4dEZvbnREYXRhICYm
IG5leHRGb250RGF0YSAhPSAmbV9mb250LnByaW1hcnlGb250KCkpCi0gICAgICAgICAgICBtX2Zh
bGxiYWNrRm9udHMtPmFkZChuZXh0Rm9udERhdGEpOwotCi0gICAgICAgIGludCBpdGVtU3RhcnQg
PSBtX3J1bi5ydGwoKSA/IDAgOiBpbmRleE9mRm9udFRyYW5zaXRpb247Ci0gICAgICAgIG1fY3Vy
cmVudENoYXJhY3RlciA9IGJhc2VDaGFyYWN0ZXIgKyBpdGVtU3RhcnQ7Ci0gICAgICAgIGl0ZW1p
emVTaGFwZUFuZFBsYWNlKChuZXh0SXNTbWFsbENhcHMgPyBzbWFsbENhcHNCdWZmZXIuZGF0YSgp
IDogY3ApICsgaXRlbVN0YXJ0LCBpdGVtU3RhcnQsIGl0ZW1MZW5ndGgsIG5leHRGb250RGF0YSwg
Z2x5cGhCdWZmZXIpOwotICAgIH0KLQotICAgIG1fY3VycmVudENoYXJhY3RlciA9IGJhc2VDaGFy
YWN0ZXIgKyBsZW5ndGg7Ci19Ci0KLXZvaWQgVW5pc2NyaWJlQ29udHJvbGxlcjo6aXRlbWl6ZVNo
YXBlQW5kUGxhY2UoY29uc3QgVUNoYXIqIGNwLCB1bnNpZ25lZCBzdHJpbmdPZmZzZXQsIHVuc2ln
bmVkIGxlbmd0aCwgY29uc3QgRm9udCogZm9udERhdGEsIEdseXBoQnVmZmVyKiBnbHlwaEJ1ZmZl
cikKLXsKLSAgICAvLyBTY3JpcHRJdGVtaXplIChpbiBXaW5kb3dzIFhQIHZlcnNpb25zIHByaW9y
IHRvIFNQMikgY2FuIG92ZXJmbG93IGJ5IDEuICBUaGlzIGlzIHdoeSB0aGVyZSBpcyBhbiBleHRy
YSBlbXB0eSBpdGVtCi0gICAgLy8gaGFuZ2luZyBvdXQgYXQgdGhlIGVuZCBvZiB0aGUgYXJyYXkK
LSAgICBtX2l0ZW1zLnJlc2l6ZSg2KTsKLSAgICBpbnQgbnVtSXRlbXMgPSAwOwotICAgIEhSRVNV
TFQgcmMgPSBTX09LOwotICAgIHdoaWxlIChyYyA9IDo6U2NyaXB0SXRlbWl6ZSh3Y2hhckZyb20o
Y3ApLCBsZW5ndGgsIG1faXRlbXMuc2l6ZSgpIC0gMSwgJm1fY29udHJvbCwgJm1fc3RhdGUsIG1f
aXRlbXMuZGF0YSgpLCAmbnVtSXRlbXMpID09IEVfT1VUT0ZNRU1PUlkpIHsKLSAgICAgICAgbV9p
dGVtcy5yZXNpemUobV9pdGVtcy5zaXplKCkgKiAyKTsKLSAgICAgICAgcmVzZXRDb250cm9sQW5k
U3RhdGUoKTsKLSAgICB9Ci0gICAgaWYgKEZBSUxFRChyYykpIHsKLSAgICAgICAgV1RGTG9nQWx3
YXlzKCJVbmlzY3JpYmVDb250cm9sbGVyOjppdGVtaXplU2hhcGVBbmRQbGFjZTogU2NyaXB0SXRl
bWl6ZSBmYWlsZWQsIHJjPSVseCIsIHJjKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBt
X2l0ZW1zLnJlc2l6ZShudW1JdGVtcyArIDEpOwotCi0gICAgaWYgKG1fcnVuLnJ0bCgpKSB7Ci0g
ICAgICAgIGZvciAoaW50IGkgPSBtX2l0ZW1zLnNpemUoKSAtIDI7IGkgPj0gMDsgaS0tKSB7Ci0g
ICAgICAgICAgICBpZiAoIXNoYXBlQW5kUGxhY2VJdGVtKGNwLCBzdHJpbmdPZmZzZXQsIGksIGZv
bnREYXRhLCBnbHlwaEJ1ZmZlcikpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1faXRlbXMu
c2l6ZSgpIC0gMTsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAoIXNoYXBlQW5kUGxhY2VJdGVtKGNw
LCBzdHJpbmdPZmZzZXQsIGksIGZvbnREYXRhLCBnbHlwaEJ1ZmZlcikpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIFVuaXNjcmliZUNvbnRyb2xs
ZXI6OnJlc2V0Q29udHJvbEFuZFN0YXRlKCkKLXsKLSAgICBtZW1zZXQoJm1fY29udHJvbCwgMCwg
c2l6ZW9mKFNDUklQVF9DT05UUk9MKSk7Ci0gICAgbWVtc2V0KCZtX3N0YXRlLCAwLCBzaXplb2Yo
U0NSSVBUX1NUQVRFKSk7Ci0KLSAgICAvLyBTZXQgdXAgdGhlIGNvcnJlY3QgZGlyZWN0aW9uIGZv
ciB0aGUgcnVuLgotICAgIG1fc3RhdGUudUJpZGlMZXZlbCA9IG1fcnVuLnJ0bCgpOwotICAgIAot
ICAgIC8vIExvY2sgdGhlIGNvcnJlY3QgZGlyZWN0aW9uYWwgb3ZlcnJpZGUuCi0gICAgbV9zdGF0
ZS5mT3ZlcnJpZGVEaXJlY3Rpb24gPSBtX3J1bi5kaXJlY3Rpb25hbE92ZXJyaWRlKCk7Ci19Ci0K
LWJvb2wgVW5pc2NyaWJlQ29udHJvbGxlcjo6c2hhcGVBbmRQbGFjZUl0ZW0oY29uc3QgVUNoYXIq
IGNwLCB1bnNpZ25lZCBzdHJpbmdPZmZzZXQsIHVuc2lnbmVkIGksIGNvbnN0IEZvbnQqIGZvbnRE
YXRhLCBHbHlwaEJ1ZmZlciogZ2x5cGhCdWZmZXIpCi17Ci0gICAgLy8gRGV0ZXJtaW5lIHRoZSBz
dHJpbmcgZm9yIHRoaXMgaXRlbS4KLSAgICBjb25zdCBVQ2hhciogc3RyID0gY3AgKyBtX2l0ZW1z
W2ldLmlDaGFyUG9zOwotICAgIGludCBsZW4gPSBtX2l0ZW1zW2krMV0uaUNoYXJQb3MgLSBtX2l0
ZW1zW2ldLmlDaGFyUG9zOwotICAgIFNDUklQVF9JVEVNIGl0ZW0gPSBtX2l0ZW1zW2ldOwotCi0g
ICAgLy8gU2V0IHVwIGJ1ZmZlcnMgdG8gaG9sZCB0aGUgcmVzdWx0cyBvZiBzaGFwaW5nIHRoZSBp
dGVtLgotICAgIFZlY3RvcjxXT1JEPiBnbHlwaHM7Ci0gICAgVmVjdG9yPFdPUkQ+IGNsdXN0ZXJz
OwotICAgIFZlY3RvcjxTQ1JJUFRfVklTQVRUUj4gdmlzdWFsQXR0cmlidXRlczsKLSAgICBjbHVz
dGVycy5yZXNpemUobGVuKTsKLSAgICAgCi0gICAgLy8gU2hhcGUgdGhlIGl0ZW0uCi0gICAgLy8g
VGhlIHJlY29tbWVuZGVkIHNpemUgZm9yIHRoZSBnbHlwaCBidWZmZXIgaXMgMS41ICogdGhlIGNo
YXJhY3RlciBsZW5ndGggKyAxNiBpbiB0aGUgdW5pc2NyaWJlIGRvY3MuCi0gICAgLy8gQXBwYXJl
bnRseSB0aGlzIGlzIGEgZ29vZCBzaXplIHRvIGF2b2lkIGhhdmluZyB0byBtYWtlIHJlcGVhdGVk
IGNhbGxzIHRvIFNjcmlwdFNoYXBlLgotICAgIGdseXBocy5yZXNpemUoMS41ICogbGVuICsgMTYp
OwotICAgIHZpc3VhbEF0dHJpYnV0ZXMucmVzaXplKGdseXBocy5zaXplKCkpOwotCi0gICAgaWYg
KCFzaGFwZShzdHIsIGxlbiwgaXRlbSwgZm9udERhdGEsIGdseXBocywgY2x1c3RlcnMsIHZpc3Vh
bEF0dHJpYnV0ZXMpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIFZlY3RvcjxPcHRpb25h
bDx1bnNpZ25lZD4+IHN0cmluZ09mZnNldHMoZ2x5cGhzLnNpemUoKSk7Ci0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGxlbjsgKytpKSB7Ci0gICAgICAgIGlmIChzdHJpbmdPZmZzZXRzW2Ns
dXN0ZXJzW2ldXSkKLSAgICAgICAgICAgIHN0cmluZ09mZnNldHNbY2x1c3RlcnNbaV1dID0gc3Rk
OjptaW4oKnN0cmluZ09mZnNldHNbY2x1c3RlcnNbaV1dLCBpKTsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgc3RyaW5nT2Zmc2V0c1tjbHVzdGVyc1tpXV0gPSBpOwotICAgIH0KLQotICAgIC8v
IFdlIG5vdyBoYXZlIGEgY29sbGVjdGlvbiBvZiBnbHlwaHMuCi0gICAgVmVjdG9yPEdPRkZTRVQ+
IG9mZnNldHM7Ci0gICAgVmVjdG9yPGludD4gYWR2YW5jZXM7Ci0gICAgb2Zmc2V0cy5yZXNpemUo
Z2x5cGhzLnNpemUoKSk7Ci0gICAgYWR2YW5jZXMucmVzaXplKGdseXBocy5zaXplKCkpOwotICAg
IEhSRVNVTFQgcGxhY2VSZXN1bHQgPSBTY3JpcHRQbGFjZSgwLCBmb250RGF0YS0+c2NyaXB0Q2Fj
aGUoKSwgZ2x5cGhzLmRhdGEoKSwgZ2x5cGhzLnNpemUoKSwgdmlzdWFsQXR0cmlidXRlcy5kYXRh
KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpdGVtLmEsIGFkdmFu
Y2VzLmRhdGEoKSwgb2Zmc2V0cy5kYXRhKCksIDApOwotICAgIGlmIChwbGFjZVJlc3VsdCA9PSBF
X1BFTkRJTkcpIHsKLSAgICAgICAgLy8gVGhlIHNjcmlwdCBjYWNoZSBpc24ndCBwcmltZWQgd2l0
aCBlbm91Z2ggaW5mbyB5ZXQuICBXZSBuZWVkIHRvIHNlbGVjdCBvdXIgSEZPTlQgaW50bwotICAg
ICAgICAvLyBhIERDIGFuZCBwYXNzIHRoZSBEQyBpbiB0byBTY3JpcHRQbGFjZS4KLSAgICAgICAg
SFduZERDIGhkYygwKTsKLSAgICAgICAgSEZPTlQgaGZvbnQgPSBmb250RGF0YS0+cGxhdGZvcm1E
YXRhKCkuaGZvbnQoKTsKLSAgICAgICAgSEZPTlQgb2xkRm9udCA9IChIRk9OVClTZWxlY3RPYmpl
Y3QoaGRjLCBoZm9udCk7Ci0gICAgICAgIHBsYWNlUmVzdWx0ID0gU2NyaXB0UGxhY2UoaGRjLCBm
b250RGF0YS0+c2NyaXB0Q2FjaGUoKSwgZ2x5cGhzLmRhdGEoKSwgZ2x5cGhzLnNpemUoKSwgdmlz
dWFsQXR0cmlidXRlcy5kYXRhKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Jml0ZW0uYSwgYWR2YW5jZXMuZGF0YSgpLCBvZmZzZXRzLmRhdGEoKSwgMCk7Ci0gICAgICAgIFNl
bGVjdE9iamVjdChoZGMsIG9sZEZvbnQpOwotICAgIH0KLSAgICAKLSAgICBpZiAoRkFJTEVEKHBs
YWNlUmVzdWx0KSB8fCBnbHlwaHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQot
ICAgIC8vIENvbnZlcnQgYWxsIGNoYXJzIHRoYXQgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgc3BhY2Vz
IHRvIHVzZSB0aGUgc3BhY2UgZ2x5cGguCi0gICAgLy8gV2UgYWxzbyBjcmVhdGUgYSBtYXAgdGhh
dCBhbGxvd3MgdXMgdG8gcXVpY2tseSBnbyBmcm9tIHNwYWNlIGdseXBocyBiYWNrIHRvIHRoZWly
IGNvcnJlc3BvbmRpbmcgY2hhcmFjdGVycy4KLSAgICBWZWN0b3I8aW50PiBzcGFjZUNoYXJhY3Rl
cnMoZ2x5cGhzLnNpemUoKSk7Ci0gICAgc3BhY2VDaGFyYWN0ZXJzLmZpbGwoLTEpOwotCi0gICAg
Y29uc3QgZmxvYXQgY0xvZ2ljYWxTY2FsZSA9IGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS51c2VH
REkoKSA/IDEuMGYgOiAzMi4wZjsKLSAgICBmbG9hdCBzcGFjZVdpZHRoID0gZm9udERhdGEtPnNw
YWNlV2lkdGgoKSAtIGZvbnREYXRhLT5zeW50aGV0aWNCb2xkT2Zmc2V0KCk7Ci0gICAgdW5zaWdu
ZWQgbG9naWNhbFNwYWNlV2lkdGggPSBzcGFjZVdpZHRoICogY0xvZ2ljYWxTY2FsZTsKLQotICAg
IGZvciAoaW50IGsgPSAwOyBrIDwgbGVuOyBrKyspIHsKLSAgICAgICAgVUNoYXIgY2ggPSAqKHN0
ciArIGspOwotICAgICAgICBib29sIHRyZWF0QXNTcGFjZSA9IEZvbnRDYXNjYWRlOjp0cmVhdEFz
U3BhY2UoY2gpOwotICAgICAgICBib29sIHRyZWF0QXNaZXJvV2lkdGhTcGFjZSA9IEZvbnRDYXNj
YWRlOjp0cmVhdEFzWmVyb1dpZHRoU3BhY2UoY2gpOwotICAgICAgICBpZiAodHJlYXRBc1NwYWNl
IHx8IHRyZWF0QXNaZXJvV2lkdGhTcGFjZSkgewotICAgICAgICAgICAgLy8gU3Vic3RpdHV0ZSBp
biB0aGUgc3BhY2UgZ2x5cGggYXQgdGhlIGFwcHJvcHJpYXRlIHBsYWNlIGluIHRoZSBnbHlwaHMK
LSAgICAgICAgICAgIC8vIGFycmF5LgotICAgICAgICAgICAgZ2x5cGhzW2NsdXN0ZXJzW2tdXSA9
IGZvbnREYXRhLT5zcGFjZUdseXBoKCk7Ci0gICAgICAgICAgICBhZHZhbmNlc1tjbHVzdGVyc1tr
XV0gPSB0cmVhdEFzU3BhY2UgPyBsb2dpY2FsU3BhY2VXaWR0aCA6IDA7Ci0gICAgICAgICAgICBp
ZiAodHJlYXRBc1NwYWNlKQotICAgICAgICAgICAgICAgIHNwYWNlQ2hhcmFjdGVyc1tjbHVzdGVy
c1trXV0gPSBtX2N1cnJlbnRDaGFyYWN0ZXIgKyBrICsgaXRlbS5pQ2hhclBvczsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIC8vIFBvcHVsYXRlIG91ciBnbHlwaCBidWZmZXIgd2l0aCB0aGlzIGlu
Zm9ybWF0aW9uLgotICAgIGJvb2wgaGFzRXh0cmFTcGFjaW5nID0gbV9mb250LmxldHRlclNwYWNp
bmcoKSB8fCBtX2ZvbnQud29yZFNwYWNpbmcoKSB8fCBtX3BhZGRpbmc7Ci0gICAgCi0gICAgZmxv
YXQgbGVmdEVkZ2UgPSBtX3J1bldpZHRoU29GYXI7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGsgPSAw
OyBrIDwgZ2x5cGhzLnNpemUoKTsgaysrKSB7Ci0gICAgICAgIEdseXBoIGdseXBoID0gZ2x5cGhz
W2tdOwotICAgICAgICBmbG9hdCBhZHZhbmNlID0gYWR2YW5jZXNba10gLyBjTG9naWNhbFNjYWxl
OwotICAgICAgICBmbG9hdCBvZmZzZXRYID0gb2Zmc2V0c1trXS5kdSAvIGNMb2dpY2FsU2NhbGU7
Ci0gICAgICAgIGZsb2F0IG9mZnNldFkgPSBvZmZzZXRzW2tdLmR2IC8gY0xvZ2ljYWxTY2FsZTsK
LQotICAgICAgICAvLyBNYXRjaCBBcHBLaXQncyBydWxlcyBmb3IgdGhlIGludGVnZXIgdnMuIG5v
bi1pbnRlZ2VyIHJlbmRlcmluZyBtb2Rlcy4KLSAgICAgICAgZmxvYXQgcm91bmRlZEFkdmFuY2Ug
PSByb3VuZGYoYWR2YW5jZSk7Ci0gICAgICAgIGlmICghZm9udERhdGEtPnBsYXRmb3JtRGF0YSgp
LmlzU3lzdGVtRm9udCgpKSB7Ci0gICAgICAgICAgICBhZHZhbmNlID0gcm91bmRlZEFkdmFuY2U7
Ci0gICAgICAgICAgICBvZmZzZXRYID0gcm91bmRmKG9mZnNldFgpOwotICAgICAgICAgICAgb2Zm
c2V0WSA9IHJvdW5kZihvZmZzZXRZKTsKLSAgICAgICAgfQotCi0gICAgICAgIGFkdmFuY2UgKz0g
Zm9udERhdGEtPnN5bnRoZXRpY0JvbGRPZmZzZXQoKTsKLQotICAgICAgICBpZiAoaGFzRXh0cmFT
cGFjaW5nKSB7Ci0gICAgICAgICAgICAvLyBJZiB3ZSdyZSBhIGdseXBoIHdpdGggYW4gYWR2YW5j
ZSwgZ28gYWhlYWQgYW5kIGFkZCBpbiBsZXR0ZXItc3BhY2luZy4KLSAgICAgICAgICAgIC8vIFRo
YXQgd2F5IHdlIHdlZWQgb3V0IHplcm8gd2lkdGggbHVya2Vycy4gIFRoaXMgYmVoYXZpb3IgbWF0
Y2hlcyB0aGUgZmFzdCB0ZXh0IGNvZGUgcGF0aC4KLSAgICAgICAgICAgIGlmIChhZHZhbmNlICYm
IG1fZm9udC5sZXR0ZXJTcGFjaW5nKCkpCi0gICAgICAgICAgICAgICAgYWR2YW5jZSArPSBtX2Zv
bnQubGV0dGVyU3BhY2luZygpOwotCi0gICAgICAgICAgICAvLyBIYW5kbGUganVzdGlmaWNhdGlv
biBhbmQgd29yZC1zcGFjaW5nLgotICAgICAgICAgICAgaW50IGNoYXJhY3RlckluZGV4ID0gc3Bh
Y2VDaGFyYWN0ZXJzW2tdOwotICAgICAgICAgICAgLy8gY2hhcmFjdGVySW5kZXggaXMgbGVmdCBh
dCB0aGUgaW5pdGlhbCB2YWx1ZSBvZiAtMSBmb3IgZ2x5cGhzIHRoYXQgZG8gbm90IG1hcCBiYWNr
IHRvIHRyZWF0ZWQtYXMtc3BhY2UgY2hhcmFjdGVycy4KLSAgICAgICAgICAgIGlmIChjaGFyYWN0
ZXJJbmRleCAhPSAtMSkgewotICAgICAgICAgICAgICAgIC8vIEFjY291bnQgZm9yIHBhZGRpbmcu
IFdlYkNvcmUgdXNlcyBzcGFjZSBwYWRkaW5nIHRvIGp1c3RpZnkgdGV4dC4KLSAgICAgICAgICAg
ICAgICAvLyBXZSBkaXN0cmlidXRlIHRoZSBzcGVjaWZpZWQgcGFkZGluZyBvdmVyIHRoZSBhdmFp
bGFibGUgc3BhY2VzIGluIHRoZSBydW4uCi0gICAgICAgICAgICAgICAgaWYgKG1fcGFkZGluZykg
ewotICAgICAgICAgICAgICAgICAgICAvLyBVc2UgbGVmdG92ZXIgcGFkZGluZyBpZiBub3QgZXZl
bmx5IGRpdmlzaWJsZSBieSBudW1iZXIgb2Ygc3BhY2VzLgotICAgICAgICAgICAgICAgICAgICBp
ZiAobV9wYWRkaW5nIDwgbV9wYWRQZXJTcGFjZSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
YWR2YW5jZSArPSBtX3BhZGRpbmc7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX3BhZGRpbmcg
PSAwOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAg
ICAgbV9wYWRkaW5nIC09IG1fcGFkUGVyU3BhY2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICBh
ZHZhbmNlICs9IG1fcGFkUGVyU3BhY2U7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBBY2NvdW50IGZvciB3b3JkLXNwYWNpbmcu
Ci0gICAgICAgICAgICAgICAgaWYgKGNoYXJhY3RlckluZGV4ID4gMCAmJiBtX2ZvbnQud29yZFNw
YWNpbmcoKSkgewotICAgICAgICAgICAgICAgICAgICBVQ2hhciBjYW5kaWRhdGVTcGFjZTsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKG1fcnVuLmlzOEJpdCgpKQotICAgICAgICAgICAgICAgICAg
ICAgICAgY2FuZGlkYXRlU3BhY2UgPSAqKG1fcnVuLmRhdGE4KGNoYXJhY3RlckluZGV4IC0gMSkp
OwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBjYW5k
aWRhdGVTcGFjZSA9ICoobV9ydW4uZGF0YTE2KGNoYXJhY3RlckluZGV4IC0gMSkpOwotCi0gICAg
ICAgICAgICAgICAgICAgIGlmICghRm9udENhc2NhZGU6OnRyZWF0QXNTcGFjZShjYW5kaWRhdGVT
cGFjZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBhZHZhbmNlICs9IG1fZm9udC53b3JkU3Bh
Y2luZygpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0g
ICAgICAgIG1fcnVuV2lkdGhTb0ZhciArPSBhZHZhbmNlOwotCi0gICAgICAgIC8vIEZJWE1FOiBX
ZSBuZWVkIHRvIHRha2UgdGhlIEdPRkZTRVRTIGZvciBjb21iaW5pbmcgZ2x5cGhzIGFuZCBzdG9y
ZSB0aGVtIGluIHRoZSBnbHlwaCBidWZmZXIKLSAgICAgICAgLy8gYXMgd2VsbCwgc28gdGhhdCB3
aGVuIHRoZSB0aW1lIGNvbWVzIHRvIGRyYXcgdGhvc2UgZ2x5cGhzLCB3ZSBjYW4gYXBwbHkgdGhl
IGFwcHJvcHJpYXRlCi0gICAgICAgIC8vIHRyYW5zbGF0aW9uLgotICAgICAgICBpZiAoZ2x5cGhC
dWZmZXIpIHsKLSAgICAgICAgICAgIEdseXBoQnVmZmVyQWR2YW5jZSBvcmlnaW4ob2Zmc2V0WCwg
LW9mZnNldFkpOwotICAgICAgICAgICAgaWYgKCFnbHlwaEJ1ZmZlci0+YWR2YW5jZXNDb3VudCgp
KQotICAgICAgICAgICAgICAgIGdseXBoQnVmZmVyLT5zZXRJbml0aWFsQWR2YW5jZShvcmlnaW4p
OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGdseXBoQnVmZmVyLT5leHBhbmRM
YXN0QWR2YW5jZShvcmlnaW4pOwotICAgICAgICAgICAgR2x5cGhCdWZmZXJBZHZhbmNlIGdseXBo
QWR2YW5jZSgtb3JpZ2luLndpZHRoKCkgKyBhZHZhbmNlLCAtb3JpZ2luLmhlaWdodCgpKTsKLSAg
ICAgICAgICAgIGdseXBoQnVmZmVyLT5hZGQoZ2x5cGgsIGZvbnREYXRhLCBnbHlwaEFkdmFuY2Us
IHN0cmluZ09mZnNldHNba10udmFsdWVPcigwKSArIHN0cmluZ09mZnNldCk7Ci0gICAgICAgIH0K
LQotICAgICAgICBGbG9hdFJlY3QgZ2x5cGhCb3VuZHMgPSBmb250RGF0YS0+Ym91bmRzRm9yR2x5
cGgoZ2x5cGgpOwotICAgICAgICBnbHlwaEJvdW5kcy5tb3ZlKG1fZ2x5cGhPcmlnaW4ueCgpLCBt
X2dseXBoT3JpZ2luLnkoKSk7Ci0gICAgICAgIG1fbWluR2x5cGhCb3VuZGluZ0JveFggPSBzdGQ6
Om1pbihtX21pbkdseXBoQm91bmRpbmdCb3hYLCBnbHlwaEJvdW5kcy54KCkpOwotICAgICAgICBt
X21heEdseXBoQm91bmRpbmdCb3hYID0gc3RkOjptYXgobV9tYXhHbHlwaEJvdW5kaW5nQm94WCwg
Z2x5cGhCb3VuZHMubWF4WCgpKTsKLSAgICAgICAgbV9taW5HbHlwaEJvdW5kaW5nQm94WSA9IHN0
ZDo6bWluKG1fbWluR2x5cGhCb3VuZGluZ0JveFksIGdseXBoQm91bmRzLnkoKSk7Ci0gICAgICAg
IG1fbWF4R2x5cGhCb3VuZGluZ0JveFkgPSBzdGQ6Om1heChtX21heEdseXBoQm91bmRpbmdCb3hZ
LCBnbHlwaEJvdW5kcy5tYXhZKCkpOwotICAgICAgICBtX2dseXBoT3JpZ2luLm1vdmUoYWR2YW5j
ZSArIG9mZnNldFgsIC1vZmZzZXRZKTsKLQotICAgICAgICAvLyBNdXRhdGUgdGhlIGdseXBoIGFy
cmF5IHRvIGNvbnRhaW4gb3VyIGFsdGVyZWQgYWR2YW5jZXMuCi0gICAgICAgIGlmIChtX2NvbXB1
dGluZ09mZnNldFBvc2l0aW9uKQotICAgICAgICAgICAgYWR2YW5jZXNba10gPSBhZHZhbmNlOwot
ICAgIH0KLQotICAgIHdoaWxlIChtX2NvbXB1dGluZ09mZnNldFBvc2l0aW9uICYmIG1fb2Zmc2V0
WCA+PSBsZWZ0RWRnZSAmJiBtX29mZnNldFggPCBtX3J1bldpZHRoU29GYXIpIHsKLSAgICAgICAg
Ly8gVGhlIHBvc2l0aW9uIGlzIHNvbWV3aGVyZSBpbnNpZGUgdGhpcyBydW4uCi0gICAgICAgIGlu
dCB0cmFpbGluZyA9IDA7Ci0gICAgICAgIEhSRVNVTFQgcmMgPSA6OlNjcmlwdFh0b0NQKG1fb2Zm
c2V0WCAtIGxlZnRFZGdlLCBjbHVzdGVycy5zaXplKCksIGdseXBocy5zaXplKCksIGNsdXN0ZXJz
LmRhdGEoKSwgdmlzdWFsQXR0cmlidXRlcy5kYXRhKCksCi0gICAgICAgICAgICAgICAgICAgIGFk
dmFuY2VzLmRhdGEoKSwgJml0ZW0uYSwgJm1fb2Zmc2V0UG9zaXRpb24sICZ0cmFpbGluZyk7Ci0g
ICAgICAgIGlmIChGQUlMRUQocmMpKSB7Ci0gICAgICAgICAgICBXVEZMb2dBbHdheXMoIlVuaXNj
cmliZUNvbnRyb2xsZXI6OnNoYXBlQW5kUGxhY2VJdGVtOiBTY3JpcHRYdG9DUCBmYWlsZWQgcmM9
JWx4IiwgcmMpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAg
aWYgKHRyYWlsaW5nICYmIG1faW5jbHVkZVBhcnRpYWxHbHlwaHMgJiYgbV9vZmZzZXRQb3NpdGlv
biA8IGxlbiAtIDEpIHsKLSAgICAgICAgICAgIG1fb2Zmc2V0UG9zaXRpb24gKz0gbV9jdXJyZW50
Q2hhcmFjdGVyICsgbV9pdGVtc1tpXS5pQ2hhclBvczsKLSAgICAgICAgICAgIG1fb2Zmc2V0WCAr
PSBtX3J1bi5ydGwoKSA/IC10cmFpbGluZyA6IHRyYWlsaW5nOwotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgbV9jb21wdXRpbmdPZmZzZXRQb3NpdGlvbiA9IGZhbHNlOwotICAgICAgICAg
ICAgbV9vZmZzZXRQb3NpdGlvbiArPSBtX2N1cnJlbnRDaGFyYWN0ZXIgKyBtX2l0ZW1zW2ldLmlD
aGFyUG9zOwotICAgICAgICAgICAgaWYgKHRyYWlsaW5nICYmIG1faW5jbHVkZVBhcnRpYWxHbHlw
aHMpCi0gICAgICAgICAgICAgICBtX29mZnNldFBvc2l0aW9uKys7Ci0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9v
bCBVbmlzY3JpYmVDb250cm9sbGVyOjpzaGFwZShjb25zdCBVQ2hhciogc3RyLCBpbnQgbGVuLCBT
Q1JJUFRfSVRFTSBpdGVtLCBjb25zdCBGb250KiBmb250RGF0YSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgVmVjdG9yPFdPUkQ+JiBnbHlwaHMsIFZlY3RvcjxXT1JEPiYgY2x1c3Rl
cnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxTQ1JJUFRfVklTQVRU
Uj4mIHZpc3VhbEF0dHJpYnV0ZXMpCi17Ci0gICAgSFduZERDIGhkYzsKLSAgICBIRk9OVCBvbGRG
b250ID0gMDsKLSAgICBIUkVTVUxUIHNoYXBlUmVzdWx0ID0gRV9QRU5ESU5HOwotICAgIGludCBn
bHlwaENvdW50ID0gMDsKLQotICAgIGlmICghZm9udERhdGEpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGRvIHsKLSAgICAgICAgc2hhcGVSZXN1bHQgPSBTY3JpcHRTaGFwZShoZGMsIGZv
bnREYXRhLT5zY3JpcHRDYWNoZSgpLCB3Y2hhckZyb20oc3RyKSwgbGVuLCBnbHlwaHMuc2l6ZSgp
LCAmaXRlbS5hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBocy5kYXRh
KCksIGNsdXN0ZXJzLmRhdGEoKSwgdmlzdWFsQXR0cmlidXRlcy5kYXRhKCksICZnbHlwaENvdW50
KTsKLSAgICAgICAgaWYgKHNoYXBlUmVzdWx0ID09IEVfUEVORElORykgewotICAgICAgICAgICAg
Ly8gVGhlIHNjcmlwdCBjYWNoZSBpc24ndCBwcmltZWQgd2l0aCBlbm91Z2ggaW5mbyB5ZXQuICBX
ZSBuZWVkIHRvIHNlbGVjdCBvdXIgSEZPTlQgaW50bwotICAgICAgICAgICAgLy8gYSBEQyBhbmQg
cGFzcyB0aGUgREMgaW4gdG8gU2NyaXB0U2hhcGUuCi0gICAgICAgICAgICBBU1NFUlQoIWhkYyk7
Ci0gICAgICAgICAgICBoZGMuc2V0SFduZCgwKTsKLSAgICAgICAgICAgIEhGT05UIGhmb250ID0g
Zm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLmhmb250KCk7Ci0gICAgICAgICAgICBvbGRGb250ID0g
KEhGT05UKVNlbGVjdE9iamVjdChoZGMsIGhmb250KTsKLSAgICAgICAgfSBlbHNlIGlmIChzaGFw
ZVJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKSB7Ci0gICAgICAgICAgICAvLyBOZWVkIHRvIHJlc2l6
ZSBvdXIgYnVmZmVycy4KLSAgICAgICAgICAgIGdseXBocy5yZXNpemUoZ2x5cGhzLnNpemUoKSAq
IDIpOwotICAgICAgICAgICAgdmlzdWFsQXR0cmlidXRlcy5yZXNpemUoZ2x5cGhzLnNpemUoKSk7
Ci0gICAgICAgIH0KLSAgICB9IHdoaWxlIChzaGFwZVJlc3VsdCA9PSBFX1BFTkRJTkcgfHwgc2hh
cGVSZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7Ci0KLSAgICBpZiAoaGRjKQotICAgICAgICBTZWxl
Y3RPYmplY3QoaGRjLCBvbGRGb250KTsKLQotICAgIGlmIChGQUlMRUQoc2hhcGVSZXN1bHQpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBnbHlwaHMuc2hyaW5rKGdseXBoQ291bnQpOwot
ICAgIHZpc3VhbEF0dHJpYnV0ZXMuc2hyaW5rKGdseXBoQ291bnQpOwotCi0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9VbmlzY3JpYmVDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vVW5pc2NyaWJlQ29udHJvbGxlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBhNDYyNGM3OWEwOC4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL1VuaXNjcmliZUNvbnRyb2xsZXIuaAorKysgL2Rldi9udWxsCkBAIC0x
LDkwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFVuaXNj
cmliZUNvbnRyb2xsZXJfaAotI2RlZmluZSBVbmlzY3JpYmVDb250cm9sbGVyX2gKLQotI2luY2x1
ZGUgIkZvbnRDYXNjYWRlLmgiCi0jaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKLSNpbmNsdWRlIDx1
c3AxMC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1jbGFzcyBVbmlzY3JpYmVDb250cm9sbGVyIHsKLXB1YmxpYzoKLSAgICBVbmlzY3JpYmVDb250
cm9sbGVyKGNvbnN0IEZvbnRDYXNjYWRlKiwgY29uc3QgVGV4dFJ1biYsIEhhc2hTZXQ8Y29uc3Qg
Rm9udCo+KiBmYWxsYmFja0ZvbnRzID0gMCk7Ci0KLSAgICAvLyBBZHZhbmNlIGFuZCBtZWFzdXJl
L3BsYWNlIHVwIHRvIHRoZSBzcGVjaWZpZWQgY2hhcmFjdGVyLgotICAgIHZvaWQgYWR2YW5jZSh1
bnNpZ25lZCB0bywgR2x5cGhCdWZmZXIqID0gMCk7Ci0KLSAgICAvLyBDb21wdXRlIHRoZSBjaGFy
YWN0ZXIgb2Zmc2V0IGZvciBhIGdpdmVuIHggY29vcmRpbmF0ZS4KLSAgICBpbnQgb2Zmc2V0Rm9y
UG9zaXRpb24oaW50IHgsIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpOwotCi0gICAgLy8gUmV0
dXJucyB0aGUgd2lkdGggb2YgZXZlcnl0aGluZyB3ZSd2ZSBjb25zdW1lZCBzbyBmYXIuCi0gICAg
ZmxvYXQgcnVuV2lkdGhTb0ZhcigpIGNvbnN0IHsgcmV0dXJuIG1fcnVuV2lkdGhTb0ZhcjsgfQot
Ci0gICAgZmxvYXQgbWluR2x5cGhCb3VuZGluZ0JveFgoKSBjb25zdCB7IHJldHVybiBtX21pbkds
eXBoQm91bmRpbmdCb3hYOyB9Ci0gICAgZmxvYXQgbWF4R2x5cGhCb3VuZGluZ0JveFgoKSBjb25z
dCB7IHJldHVybiBtX21heEdseXBoQm91bmRpbmdCb3hYOyB9Ci0gICAgZmxvYXQgbWluR2x5cGhC
b3VuZGluZ0JveFkoKSBjb25zdCB7IHJldHVybiBtX21pbkdseXBoQm91bmRpbmdCb3hZOyB9Ci0g
ICAgZmxvYXQgbWF4R2x5cGhCb3VuZGluZ0JveFkoKSBjb25zdCB7IHJldHVybiBtX21heEdseXBo
Qm91bmRpbmdCb3hZOyB9Ci0KLXByaXZhdGU6ICAgIAotICAgIHZvaWQgcmVzZXRDb250cm9sQW5k
U3RhdGUoKTsKLQotICAgIHZvaWQgaXRlbWl6ZVNoYXBlQW5kUGxhY2UoY29uc3QgVUNoYXIqLCB1
bnNpZ25lZCBzdHJpbmdPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgRm9udCosIEdseXBo
QnVmZmVyKik7Ci0gICAgYm9vbCBzaGFwZUFuZFBsYWNlSXRlbShjb25zdCBVQ2hhciosIHVuc2ln
bmVkIHN0cmluZ09mZnNldCwgdW5zaWduZWQgaW5kZXgsIGNvbnN0IEZvbnQqLCBHbHlwaEJ1ZmZl
ciopOwotICAgIGJvb2wgc2hhcGUoY29uc3QgVUNoYXIqIHN0ciwgaW50IGxlbiwgU0NSSVBUX0lU
RU0sIGNvbnN0IEZvbnQqLAotICAgICAgICAgICAgICAgVmVjdG9yPFdPUkQ+JiBnbHlwaHMsIFZl
Y3RvcjxXT1JEPiYgY2x1c3RlcnMsCi0gICAgICAgICAgICAgICBWZWN0b3I8U0NSSVBUX1ZJU0FU
VFI+JiB2aXN1YWxBdHRyaWJ1dGVzKTsKLQotICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBtX2ZvbnQ7
Ci0gICAgY29uc3QgVGV4dFJ1biYgbV9ydW47Ci0gICAgSGFzaFNldDxjb25zdCBGb250Kj4qIG1f
ZmFsbGJhY2tGb250czsKLSAgICBGbG9hdFBvaW50IG1fZ2x5cGhPcmlnaW47Ci0gICAgZmxvYXQg
bV9taW5HbHlwaEJvdW5kaW5nQm94WDsKLSAgICBmbG9hdCBtX21heEdseXBoQm91bmRpbmdCb3hY
OwotICAgIGZsb2F0IG1fbWluR2x5cGhCb3VuZGluZ0JveFk7Ci0gICAgZmxvYXQgbV9tYXhHbHlw
aEJvdW5kaW5nQm94WTsKLQotICAgIFNDUklQVF9DT05UUk9MIG1fY29udHJvbDsKLSAgICBTQ1JJ
UFRfU1RBVEUgbV9zdGF0ZTsKLSAgICBWZWN0b3I8U0NSSVBUX0lURU0+IG1faXRlbXM7Ci0gCi0g
ICAgdW5zaWduZWQgbV9jdXJyZW50Q2hhcmFjdGVyOwotICAgIGludCBtX2VuZDsKLQotICAgIGZs
b2F0IG1fcnVuV2lkdGhTb0ZhcjsKLSAgICBmbG9hdCBtX3BhZGRpbmc7Ci0gICAgZmxvYXQgbV9w
YWRQZXJTcGFjZTsKLQotICAgIGJvb2wgbV9jb21wdXRpbmdPZmZzZXRQb3NpdGlvbjsKLSAgICBi
b29sIG1faW5jbHVkZVBhcnRpYWxHbHlwaHM7Ci0gICAgZmxvYXQgbV9vZmZzZXRYOwotICAgIGlu
dCBtX29mZnNldFBvc2l0aW9uOwotfTsKLQotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29tcGxleFRleHRDb250cm9sbGVyLmNwcCBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3Bw
CmluZGV4IDkzZmU5MGU5ZDlkLi45MjY4ZWZiNjgzYiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAKKysrIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAK
QEAgLTI1LDggKzI1LDYgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogCi0jaWYgIVBMQVRGT1JN
KFdJTikKLQogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luaXRpYWxpemVUaHJlYWRpbmcuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL0NvbXBsZXhUZXh0Q29udHJvbGxlci5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvRm9udENhc2NhZGUuaD4KQEAgLTM2Nyw1ICszNjUsMyBAQCBURVNUX0YoQ29tcGxleFRl
eHRDb250cm9sbGVyVGVzdCwgVG90YWxXaWR0aFdpdGhKdXN0aWZpY2F0aW9uKQogfQogCiB9Ci0K
LSNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>385746</attachid>
            <date>2019-12-16 02:46:22 -0800</date>
            <delta_ts>2019-12-17 17:59:53 -0800</delta_ts>
            <desc>WIP patch</desc>
            <filename>complex7.diff</filename>
            <type>text/plain</type>
            <size>45425</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luLmNtYWtlIGIvU291cmNlL1dl
YkNvcmUvUGxhdGZvcm1XaW4uY21ha2UKaW5kZXggZDFmZDRlYjEyZGQuLmRlODZmZDNhMDQxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbi5jbWFrZQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9QbGF0Zm9ybVdpbi5jbWFrZQpAQCAtNTEsNiArNTEsNyBAQCBsaXN0KEFQUEVORCBX
ZWJDb3JlX1NPVVJDRVMKIAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db2xvckRpcmVjdDJE
LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db21wbGV4VGV4dENvbnRyb2xsZXJEaXJl
Y3RXcml0ZS5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vQ29tcGxleFRleHRDb250cm9s
bGVyVW5pc2NyaWJlLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9ESUJQaXhlbERhdGEu
Y3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Zsb2F0UG9pbnREaXJlY3QyRC5jcHAKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRmxvYXRSZWN0RGlyZWN0MkQuY3BwCkBAIC02OSw3ICs3
MCw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9TaW1wbGVGb250RGF0YVdpbi5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vVHJh
bnNmb3JtYXRpb25NYXRyaXhEaXJlY3QyRC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
VHJhbnNmb3JtYXRpb25NYXRyaXhXaW4uY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1Vu
aXNjcmliZUNvbnRyb2xsZXIuY3BwCiAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL3dpbi9Eb3dubG9h
ZEJ1bmRsZVdpbi5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL3dpbi9OZXR3b3JrU3RhdGVOb3Rp
Zmllcldpbi5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwCmluZGV4IDg0NzI4NDllYWQwLi42YjBhMGFj
YTU5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29tcGxl
eFRleHRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwCkBAIC00MywzMyArNDMsNiBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLSNpZiBQTEFURk9STShXSU4pICYmICFVU0UoRElSRUNUMkQpCi0KLWNs
YXNzIFRleHRMYXlvdXQgewotfTsKLQotdm9pZCBUZXh0TGF5b3V0RGVsZXRlcjo6b3BlcmF0b3Io
KShUZXh0TGF5b3V0KikgY29uc3QKLXsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPFRleHRMYXlvdXQs
IFRleHRMYXlvdXREZWxldGVyPiBGb250Q2FzY2FkZTo6Y3JlYXRlTGF5b3V0KFJlbmRlclRleHQm
LCBmbG9hdCwgYm9vbCkgY29uc3QKLXsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotZmxvYXQg
Rm9udENhc2NhZGU6OndpZHRoKFRleHRMYXlvdXQmLCB1bnNpZ25lZCwgdW5zaWduZWQsIEhhc2hT
ZXQ8Y29uc3QgRm9udCo+KikKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1
cm4gMDsKLX0KLQotdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmNvbGxlY3RDb21wbGV4VGV4
dFJ1bnNGb3JDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQsIHVuc2lnbmVkLCBjb25z
dCBGb250KikKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotI2Vsc2UKLQogY2xh
c3MgVGV4dExheW91dCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CkBA
IC0yMTYsNyArMTg5LDggQEAgdW5zaWduZWQgQ29tcGxleFRleHRDb250cm9sbGVyOjpvZmZzZXRG
b3JQb3NpdGlvbihmbG9hdCBoLCBib29sIGluY2x1ZGVQYXJ0aWFsR2wKIAogICAgICAgICAgICAg
ICAgIC8vIEZJWE1FOiBJbnN0ZWFkIG9mIGRpdmlkaW5nIHRoZSBnbHlwaCdzIGFkdmFuY2UgZXF1
YWxseSBiZXR3ZWVuIHRoZSBjaGFyYWN0ZXJzLCB0aGlzCiAgICAgICAgICAgICAgICAgLy8gY291
bGQgdXNlIHRoZSBnbHlwaCdzICJsaWdhdHVyZSBjYXJldHMiLiBUaGlzIGlzIGF2YWlsYWJsZSBp
biBDb3JlVGV4dCB2aWEgQ1RGb250R2V0TGlnYXR1cmVDYXJldFBvc2l0aW9ucygpLgotICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGhpdEluZGV4ID0gaGl0R2x5cGhTdGFydCArIChoaXRHbHlwaEVu
ZCAtIGhpdEdseXBoU3RhcnQpICogKG1fcnVuLmx0cigpID8geCAvIGFkanVzdGVkQWR2YW5jZSA6
IDEgLSB4IC8gYWRqdXN0ZWRBZHZhbmNlKTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBoaXRQ
b3MgPSAoaGl0R2x5cGhFbmQgLSBoaXRHbHlwaFN0YXJ0KSAqICh4IC8gYWRqdXN0ZWRBZHZhbmNl
KTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBoaXRJbmRleCA9ICBtX3J1bi5sdHIoKSA/IGhp
dEdseXBoU3RhcnQgKyBoaXRQb3MgOiBoaXRHbHlwaEVuZCAtIGhpdFBvcyAtIDE7CiAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgc3RyaW5nTGVuZ3RoID0gY29tcGxleFRleHRSdW4uc3RyaW5nTGVu
Z3RoKCk7CiAgICAgICAgICAgICAgICAgQ2FjaGVkVGV4dEJyZWFrSXRlcmF0b3IgY3Vyc29yUG9z
aXRpb25JdGVyYXRvcihTdHJpbmdWaWV3KGNvbXBsZXhUZXh0UnVuLmNoYXJhY3RlcnMoKSwgc3Ry
aW5nTGVuZ3RoKSwgVGV4dEJyZWFrSXRlcmF0b3I6Ok1vZGU6OkNhcmV0LCBudWxsQXRvbSgpKTsK
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjbHVzdGVyU3RhcnQ7CkBAIC03ODUsNyArNzU5LDgg
QEAgdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmFkanVzdEdseXBoc0FuZEFkdmFuY2VzKCkK
ICAgICAgICAgICAgICAgICBpZiAocnVuRm9yYmlkc1RyYWlsaW5nRXhwYW5zaW9uKQogICAgICAg
ICAgICAgICAgICAgICBmb3JiaWRUcmFpbGluZ0V4cGFuc2lvbiA9IG1fcnVuLmx0cigpID8gaXNM
YXN0Q2hhcmFjdGVyIDogaXNGaXJzdENoYXJhY3RlcjsKICAgICAgICAgICAgICAgICAvLyBIYW5k
bGUganVzdGlmaWNhdGlvbiBhbmQgd29yZC1zcGFjaW5nLgotICAgICAgICAgICAgICAgIGJvb2wg
aWRlb2dyYXBoID0gRm9udENhc2NhZGU6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woY2gpOworICAg
ICAgICAgICAgICAgIHN0YXRpYyBib29sIGV4cGFuZEFyb3VuZElkZW9ncmFwaHMgPSBGb250Q2Fz
Y2FkZTo6Y2FuRXhwYW5kQXJvdW5kSWRlb2dyYXBoc0luQ29tcGxleFRleHQoKTsKKyAgICAgICAg
ICAgICAgICBib29sIGlkZW9ncmFwaCA9IGV4cGFuZEFyb3VuZElkZW9ncmFwaHMgJiYgRm9udENh
c2NhZGU6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woY2gpOwogICAgICAgICAgICAgICAgIGlmICh0
cmVhdEFzU3BhY2UgfHwgaWRlb2dyYXBoIHx8IGZvcmNlTGVhZGluZ0V4cGFuc2lvbiB8fCBmb3Jj
ZVRyYWlsaW5nRXhwYW5zaW9uKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIERpc3RyaWJ1dGUg
dGhlIHJ1bidzIHRvdGFsIGV4cGFuc2lvbiBldmVubHkgb3ZlciBhbGwgZXhwYW5zaW9uIG9wcG9y
dHVuaXRpZXMgaW4gdGhlIHJ1bi4KICAgICAgICAgICAgICAgICAgICAgaWYgKG1fZXhwYW5zaW9u
KSB7CkBAIC04OTMsNiArODY4LDQgQEAgQ29tcGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4
dFJ1bjo6Q29tcGxleFRleHRSdW4oY29uc3QgVmVjdG9yPEZsb2F0U2l6ZT4mIGEKIHsKIH0KIAot
I2VuZGlmCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcAppbmRleCA0MTI3NDdhY2Y4Yy4uM2YxMDRl
YzBjN2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRD
YXNjYWRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2Fz
Y2FkZS5jcHAKQEAgLTQxLDEwICs0MSw2IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0cmlu
Z0hhc2guaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKLSNpZiBQTEFU
Rk9STShXSU4pICYmICFVU0UoRElSRUNUMkQpCi0jaW5jbHVkZSAiVW5pc2NyaWJlQ29udHJvbGxl
ci5oIgotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIFdU
Rjo6VW5pY29kZTsKQEAgLTM1MCwxNSArMzQ2LDYgQEAgZmxvYXQgRm9udENhc2NhZGU6OndpZHRo
T2ZUZXh0UmFuZ2UoY29uc3QgVGV4dFJ1biYgcnVuLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZAog
CiAgICAgYXV0byBjb2RlUGF0aFRvVXNlID0gY29kZVBhdGgocnVuKTsKICAgICBpZiAoY29kZVBh
dGhUb1VzZSA9PSBDb21wbGV4KSB7Ci0jaWYgUExBVEZPUk0oV0lOKSAmJiAhVVNFKERJUkVDVDJE
KQotICAgICAgICBVbmlzY3JpYmVDb250cm9sbGVyIGl0KHRoaXMsIHJ1bik7Ci0gICAgICAgIGl0
LmFkdmFuY2UoZnJvbSk7Ci0gICAgICAgIG9mZnNldEJlZm9yZVJhbmdlID0gaXQucnVuV2lkdGhT
b0ZhcigpOwotICAgICAgICBpdC5hZHZhbmNlKHRvKTsKLSAgICAgICAgb2Zmc2V0QWZ0ZXJSYW5n
ZSA9IGl0LnJ1bldpZHRoU29GYXIoKTsKLSAgICAgICAgaXQuYWR2YW5jZSh0byk7Ci0gICAgICAg
IHRvdGFsV2lkdGggPSBpdC5ydW5XaWR0aFNvRmFyKCk7Ci0jZWxzZQogICAgICAgICBDb21wbGV4
VGV4dENvbnRyb2xsZXIgY29tcGxleEl0ZXJhdG9yKCp0aGlzLCBydW4sIGZhbHNlLCBmYWxsYmFj
a0ZvbnRzKTsKICAgICAgICAgY29tcGxleEl0ZXJhdG9yLmFkdmFuY2UoZnJvbSwgbnVsbHB0ciwg
SW5jbHVkZVBhcnRpYWxHbHlwaHMsIGZhbGxiYWNrRm9udHMpOwogICAgICAgICBvZmZzZXRCZWZv
cmVSYW5nZSA9IGNvbXBsZXhJdGVyYXRvci5ydW5XaWR0aFNvRmFyKCk7CkBAIC0zNjYsNyArMzUz
LDYgQEAgZmxvYXQgRm9udENhc2NhZGU6OndpZHRoT2ZUZXh0UmFuZ2UoY29uc3QgVGV4dFJ1biYg
cnVuLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZAogICAgICAgICBvZmZzZXRBZnRlclJhbmdlID0g
Y29tcGxleEl0ZXJhdG9yLnJ1bldpZHRoU29GYXIoKTsKICAgICAgICAgY29tcGxleEl0ZXJhdG9y
LmFkdmFuY2UocnVuLmxlbmd0aCgpLCBudWxscHRyLCBJbmNsdWRlUGFydGlhbEdseXBocywgZmFs
bGJhY2tGb250cyk7CiAgICAgICAgIHRvdGFsV2lkdGggPSBjb21wbGV4SXRlcmF0b3IucnVuV2lk
dGhTb0ZhcigpOwotI2VuZGlmCiAgICAgfSBlbHNlIHsKICAgICAgICAgV2lkdGhJdGVyYXRvciBz
aW1wbGVJdGVyYXRvcih0aGlzLCBydW4sIGZhbGxiYWNrRm9udHMpOwogICAgICAgICBzaW1wbGVJ
dGVyYXRvci5hZHZhbmNlKGZyb20sIG51bGxwdHIpOwpAQCAtMTM5Nyw3ICsxMzgzLDYgQEAgZmxv
YXQgRm9udENhc2NhZGU6OmdldEdseXBoc0FuZEFkdmFuY2VzRm9yU2ltcGxlVGV4dChjb25zdCBU
ZXh0UnVuJiBydW4sIHVuc2lnbmUKICAgICByZXR1cm4gaW5pdGlhbEFkdmFuY2U7CiB9CiAKLSNp
ZiAhUExBVEZPUk0oV0lOKSB8fCBVU0UoRElSRUNUMkQpCiBmbG9hdCBGb250Q2FzY2FkZTo6Z2V0
R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIHVuc2ln
bmVkIGZyb20sIHVuc2lnbmVkIHRvLCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIEZvclRleHRF
bXBoYXNpc09yTm90IGZvclRleHRFbXBoYXNpcykgY29uc3QKIHsKICAgICBmbG9hdCBpbml0aWFs
QWR2YW5jZTsKQEAgLTE0MjcsNyArMTQxMiw2IEBAIGZsb2F0IEZvbnRDYXNjYWRlOjpnZXRHbHlw
aHNBbmRBZHZhbmNlc0ZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgdW5zaWduCiAK
ICAgICByZXR1cm4gaW5pdGlhbEFkdmFuY2U7CiB9Ci0jZW5kaWYKIAogdm9pZCBGb250Q2FzY2Fk
ZTo6ZHJhd0VtcGhhc2lzTWFya3NGb3JTaW1wbGVUZXh0KEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBBdG9tU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9h
dFBvaW50JiBwb2ludCwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8pIGNvbnN0CiB7CkBAIC0x
NTQ1LDcgKzE1MjksNiBAQCBmbG9hdCBGb250Q2FzY2FkZTo6ZmxvYXRXaWR0aEZvclNpbXBsZVRl
eHQoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IEZvbgogICAgIHJldHVybiBpdC5t
X3J1bldpZHRoU29GYXI7CiB9CiAKLSNpZiAhUExBVEZPUk0oV0lOKSB8fCBVU0UoRElSRUNUMkQp
CiBmbG9hdCBGb250Q2FzY2FkZTo6ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRS
dW4mIHJ1biwgSGFzaFNldDxjb25zdCBGb250Kj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZs
b3cqIGdseXBoT3ZlcmZsb3cpIGNvbnN0CiB7CiAgICAgQ29tcGxleFRleHRDb250cm9sbGVyIGNv
bnRyb2xsZXIoKnRoaXMsIHJ1biwgdHJ1ZSwgZmFsbGJhY2tGb250cyk7CkBAIC0xNTU3LDcgKzE1
NDAsNiBAQCBmbG9hdCBGb250Q2FzY2FkZTo6ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KGNvbnN0
IFRleHRSdW4mIHJ1biwgSGFzaFNldDxjb25zdCBGbwogICAgIH0KICAgICByZXR1cm4gY29udHJv
bGxlci50b3RhbFdpZHRoKCk7CiB9Ci0jZW5kaWYKIAogdm9pZCBGb250Q2FzY2FkZTo6YWRqdXN0
U2VsZWN0aW9uUmVjdEZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBMYXlvdXRSZWN0
JiBzZWxlY3Rpb25SZWN0LCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bykgY29uc3QKIHsKQEAg
LTE1NzgsNyArMTU2MCw2IEBAIHZvaWQgRm9udENhc2NhZGU6OmFkanVzdFNlbGVjdGlvblJlY3RG
b3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgTGF5b3V0UmVjCiAgICAgc2VsZWN0aW9u
UmVjdC5zZXRXaWR0aChMYXlvdXRVbml0Ojpmcm9tRmxvYXRDZWlsKGFmdGVyV2lkdGggLSBiZWZv
cmVXaWR0aCkpOwogfQogCi0jaWYgIVBMQVRGT1JNKFdJTikgfHwgVVNFKERJUkVDVDJEKQogdm9p
ZCBGb250Q2FzY2FkZTo6YWRqdXN0U2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRl
eHRSdW4mIHJ1biwgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgdW5zaWduZWQgZnJvbSwgdW5z
aWduZWQgdG8pIGNvbnN0CiB7CiAgICAgQ29tcGxleFRleHRDb250cm9sbGVyIGNvbnRyb2xsZXIo
KnRoaXMsIHJ1bik7CkBAIC0xNTkzLDcgKzE1NzQsNiBAQCB2b2lkIEZvbnRDYXNjYWRlOjphZGp1
c3RTZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBMYXlvdXRS
ZQogICAgICAgICBzZWxlY3Rpb25SZWN0Lm1vdmUoYmVmb3JlV2lkdGgsIDApOwogICAgIHNlbGVj
dGlvblJlY3Quc2V0V2lkdGgoTGF5b3V0VW5pdDo6ZnJvbUZsb2F0Q2VpbChhZnRlcldpZHRoIC0g
YmVmb3JlV2lkdGgpKTsKIH0KLSNlbmRpZgogCiBpbnQgRm9udENhc2NhZGU6Om9mZnNldEZvclBv
c2l0aW9uRm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGZsb2F0IHgsIGJvb2wgaW5j
bHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0CiB7CkBAIC0xNjM4LDEzICsxNjE4LDExIEBAIGludCBG
b250Q2FzY2FkZTo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4m
IHJ1biwgZmxvYXQgeCwgYm9vCiAgICAgcmV0dXJuIG9mZnNldDsKIH0KIAotI2lmICFQTEFURk9S
TShXSU4pIHx8IFVTRShESVJFQ1QyRCkKIGludCBGb250Q2FzY2FkZTo6b2Zmc2V0Rm9yUG9zaXRp
b25Gb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGZsb2F0IHgsIGJvb2wgaW5jbHVk
ZVBhcnRpYWxHbHlwaHMpIGNvbnN0CiB7CiAgICAgQ29tcGxleFRleHRDb250cm9sbGVyIGNvbnRy
b2xsZXIoKnRoaXMsIHJ1bik7CiAgICAgcmV0dXJuIGNvbnRyb2xsZXIub2Zmc2V0Rm9yUG9zaXRp
b24oeCwgaW5jbHVkZVBhcnRpYWxHbHlwaHMpOwogfQotI2VuZGlmCiAKICNpZiAhUExBVEZPUk0o
Q09DT0EpICYmICFVU0UoSEFSRkJVWlopCiAvLyBGSVhNRTogVW5pZnkgdGhpcyB3aXRoIHRoZSBt
YWNPUyBhbmQgaU9TIGltcGxlbWVudGF0aW9uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmgKaW5kZXggMmJjZGYxMDZlNmMuLjg5N2NkOTc4Zjg0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmgKQEAg
LTIyOSw2ICsyMjksNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBzdGQ6OnBhaXI8dW5zaWduZWQs
IGJvb2w+IGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJbnRlcm5hbChjb25zdCBVQ2hhciosIHVu
c2lnbmVkIGxlbmd0aCwgVGV4dERpcmVjdGlvbiwgRXhwYW5zaW9uQmVoYXZpb3IpOwogCiAgICAg
ZnJpZW5kIHN0cnVjdCBXaWR0aEl0ZXJhdG9yOworICAgIGZyaWVuZCBjbGFzcyBDb21wbGV4VGV4
dENvbnRyb2xsZXI7CiAKIHB1YmxpYzoKICNpZiBFTkFCTEUoVEVYVF9BVVRPU0laSU5HKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbXBsZXhUZXh0
Q29udHJvbGxlclVuaXNjcmliZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vQ29tcGxleFRleHRDb250cm9sbGVyVW5pc2NyaWJlLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMmFmYjdjNzU3NWQKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vQ29tcGxleFRleHRDb250cm9sbGVy
VW5pc2NyaWJlLmNwcApAQCAtMCwwICsxLDE4NiBAQAorLyoKKyogQ29weXJpZ2h0IChDKSAyMDE3
LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisqIGFyZSBtZXQ6CisqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORCBBTlkKKyogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
CisqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUworKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJD
b21wbGV4VGV4dENvbnRyb2xsZXIuaCIKKworI2lmICFVU0UoRElSRUNUMkQpCisKKyNpbmNsdWRl
ICJGb250Q2FjaGUuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgorI2luY2x1ZGUgIkhXbmRE
Qy5oIgorI2luY2x1ZGUgPHVzcDEwLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGlj
IGJvb2wgc2hhcGVCeVVuaXNjcmliZShjb25zdCBVQ2hhciogc3RyLCBpbnQgbGVuLCBTQ1JJUFRf
SVRFTSBpdGVtLCBjb25zdCBGb250KiBmb250RGF0YSwKKyAgICBWZWN0b3I8V09SRD4mIGdseXBo
cywgVmVjdG9yPFdPUkQ+JiBjbHVzdGVycywKKyAgICBWZWN0b3I8U0NSSVBUX1ZJU0FUVFI+JiB2
aXN1YWxBdHRyaWJ1dGVzKQoreworICAgIEhXbmREQyBoZGM7CisgICAgSEZPTlQgb2xkRm9udCA9
IDA7CisgICAgSFJFU1VMVCBzaGFwZVJlc3VsdCA9IEVfUEVORElORzsKKyAgICBpbnQgZ2x5cGhD
b3VudCA9IDA7CisKKyAgICBpZiAoIWZvbnREYXRhKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBkbyB7CisgICAgICAgIHNoYXBlUmVzdWx0ID0gU2NyaXB0U2hhcGUoaGRjLCBmb250RGF0
YS0+c2NyaXB0Q2FjaGUoKSwgd2NoYXJGcm9tKHN0ciksIGxlbiwgZ2x5cGhzLnNpemUoKSwgJml0
ZW0uYSwKKyAgICAgICAgICAgIGdseXBocy5kYXRhKCksIGNsdXN0ZXJzLmRhdGEoKSwgdmlzdWFs
QXR0cmlidXRlcy5kYXRhKCksICZnbHlwaENvdW50KTsKKyAgICAgICAgaWYgKHNoYXBlUmVzdWx0
ID09IEVfUEVORElORykgeworICAgICAgICAgICAgLy8gVGhlIHNjcmlwdCBjYWNoZSBpc24ndCBw
cmltZWQgd2l0aCBlbm91Z2ggaW5mbyB5ZXQuIFdlIG5lZWQgdG8gc2VsZWN0IG91ciBIRk9OVCBp
bnRvCisgICAgICAgICAgICAvLyBhIERDIGFuZCBwYXNzIHRoZSBEQyBpbiB0byBTY3JpcHRTaGFw
ZS4KKyAgICAgICAgICAgIEFTU0VSVCghaGRjKTsKKyAgICAgICAgICAgIGhkYy5zZXRIV25kKDAp
OworICAgICAgICAgICAgSEZPTlQgaGZvbnQgPSBmb250RGF0YS0+cGxhdGZvcm1EYXRhKCkuaGZv
bnQoKTsKKyAgICAgICAgICAgIG9sZEZvbnQgPSAoSEZPTlQpU2VsZWN0T2JqZWN0KGhkYywgaGZv
bnQpOworICAgICAgICB9IGVsc2UgaWYgKHNoYXBlUmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpIHsK
KyAgICAgICAgICAgIC8vIE5lZWQgdG8gcmVzaXplIG91ciBidWZmZXJzLgorICAgICAgICAgICAg
Z2x5cGhzLnJlc2l6ZShnbHlwaHMuc2l6ZSgpICogMik7CisgICAgICAgICAgICB2aXN1YWxBdHRy
aWJ1dGVzLnJlc2l6ZShnbHlwaHMuc2l6ZSgpKTsKKyAgICAgICAgfQorICAgIH0gd2hpbGUgKHNo
YXBlUmVzdWx0ID09IEVfUEVORElORyB8fCBzaGFwZVJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsK
KworICAgIGlmIChoZGMpCisgICAgICAgIFNlbGVjdE9iamVjdChoZGMsIG9sZEZvbnQpOworCisg
ICAgaWYgKEZBSUxFRChzaGFwZVJlc3VsdCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGdseXBocy5zaHJpbmsoZ2x5cGhDb3VudCk7CisgICAgdmlzdWFsQXR0cmlidXRlcy5zaHJpbmso
Z2x5cGhDb3VudCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBDb21wbGV4VGV4dENv
bnRyb2xsZXI6OmNvbGxlY3RDb21wbGV4VGV4dFJ1bnNGb3JDaGFyYWN0ZXJzKGNvbnN0IFVDaGFy
KiBjcCwgdW5zaWduZWQgc3RyaW5nTGVuZ3RoLCB1bnNpZ25lZCBzdHJpbmdMb2NhdGlvbiwgY29u
c3QgRm9udCogZm9udCkKK3sKKyAgICBpZiAoIWZvbnQpIHsKKyAgICAgICAgLy8gQ3JlYXRlIGEg
cnVuIG9mIG1pc3NpbmcgZ2x5cGhzIGZyb20gdGhlIHByaW1hcnkgZm9udC4KKyAgICAgICAgbV9j
b21wbGV4VGV4dFJ1bnMuYXBwZW5kKENvbXBsZXhUZXh0UnVuOjpjcmVhdGUobV9mb250LnByaW1h
cnlGb250KCksIGNwLCBzdHJpbmdMb2NhdGlvbiwgc3RyaW5nTGVuZ3RoLCAwLCBzdHJpbmdMZW5n
dGgsIG1fcnVuLmx0cigpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBWZWN0b3I8
U0NSSVBUX0lURU0+IGl0ZW1zKDYpOworICAgIGludCBudW1JdGVtcyA9IDA7CisgICAgZm9yICg7
OykgeworICAgICAgICBTQ1JJUFRfQ09OVFJPTCBjb250cm9sIHsgfTsKKyAgICAgICAgU0NSSVBU
X1NUQVRFIHN0YXRlIHsgfTsKKyAgICAgICAgLy8gU2V0IHVwIHRoZSBjb3JyZWN0IGRpcmVjdGlv
biBmb3IgdGhlIHJ1bi4KKyAgICAgICAgc3RhdGUudUJpZGlMZXZlbCA9IG1fcnVuLnJ0bCgpOwor
ICAgICAgICAvLyBMb2NrIHRoZSBjb3JyZWN0IGRpcmVjdGlvbmFsIG92ZXJyaWRlLgorICAgICAg
ICBzdGF0ZS5mT3ZlcnJpZGVEaXJlY3Rpb24gPSBtX3J1bi5kaXJlY3Rpb25hbE92ZXJyaWRlKCk7
CisKKyAgICAgICAgLy8gU2NyaXB0SXRlbWl6ZSBtYXkgd3JpdGUgKGNNYXhJdGVtcyArIDEpIFND
UklQVF9JVEVNLgorICAgICAgICBIUkVTVUxUIGhyID0gU2NyaXB0SXRlbWl6ZSh3Y2hhckZyb20o
Y3ApLCBzdHJpbmdMZW5ndGgsIGl0ZW1zLnNpemUoKSAtIDEsICZjb250cm9sLCAmc3RhdGUsIGl0
ZW1zLmRhdGEoKSwgJm51bUl0ZW1zKTsKKyAgICAgICAgaWYgKGhyICE9IEVfT1VUT0ZNRU1PUlkp
IHsKKyAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIGl0ZW1zLnJlc2l6ZShpdGVtcy5zaXplKCkgKiAyKTsKKyAg
ICB9CisgICAgaXRlbXMucmVzaXplKG51bUl0ZW1zICsgMSk7CisKKyAgICBmb3IgKGludCBpID0g
MDsgaSA8IG51bUl0ZW1zOyBpKyspIHsKKyAgICAgICAgLy8gRGV0ZXJtaW5lIHRoZSBzdHJpbmcg
Zm9yIHRoaXMgaXRlbS4KKyAgICAgICAgY29uc3QgVUNoYXIqIHN0ciA9IGNwICsgaXRlbXNbaV0u
aUNoYXJQb3M7CisgICAgICAgIGludCBsZW5ndGggPSBpdGVtc1tpKzFdLmlDaGFyUG9zIC0gaXRl
bXNbaV0uaUNoYXJQb3M7CisgICAgICAgIFNDUklQVF9JVEVNJiBpdGVtID0gaXRlbXNbaV07CisK
KyAgICAgICAgLy8gU2V0IHVwIGJ1ZmZlcnMgdG8gaG9sZCB0aGUgcmVzdWx0cyBvZiBzaGFwaW5n
IHRoZSBpdGVtLgorICAgICAgICBWZWN0b3I8V09SRD4gZ2x5cGhzOworICAgICAgICBWZWN0b3I8
V09SRD4gY2x1c3RlcnM7CisgICAgICAgIFZlY3RvcjxTQ1JJUFRfVklTQVRUUj4gdmlzdWFsQXR0
cmlidXRlczsKKyAgICAgICAgY2x1c3RlcnMucmVzaXplKGxlbmd0aCk7CisKKyAgICAgICAgLy8g
U2hhcGUgdGhlIGl0ZW0uCisgICAgICAgIC8vIFRoZSByZWNvbW1lbmRlZCBzaXplIGZvciB0aGUg
Z2x5cGggYnVmZmVyIGlzIDEuNSAqIHRoZSBjaGFyYWN0ZXIgbGVuZ3RoICsgMTYgaW4gdGhlIHVu
aXNjcmliZSBkb2NzLgorICAgICAgICAvLyBBcHBhcmVudGx5IHRoaXMgaXMgYSBnb29kIHNpemUg
dG8gYXZvaWQgaGF2aW5nIHRvIG1ha2UgcmVwZWF0ZWQgY2FsbHMgdG8gU2NyaXB0U2hhcGUuCisg
ICAgICAgIGdseXBocy5yZXNpemUoMS41ICogbGVuZ3RoICsgMTYpOworICAgICAgICB2aXN1YWxB
dHRyaWJ1dGVzLnJlc2l6ZShnbHlwaHMuc2l6ZSgpKTsKKworICAgICAgICBpZiAoIXNoYXBlQnlV
bmlzY3JpYmUoc3RyLCBsZW5ndGgsIGl0ZW0sIGZvbnQsIGdseXBocywgY2x1c3RlcnMsIHZpc3Vh
bEF0dHJpYnV0ZXMpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgLy8gV2Ugbm93
IGhhdmUgYSBjb2xsZWN0aW9uIG9mIGdseXBocy4KKyAgICAgICAgVmVjdG9yPEdPRkZTRVQ+IG9m
ZnNldHM7CisgICAgICAgIFZlY3RvcjxpbnQ+IGFkdmFuY2VzOworICAgICAgICBvZmZzZXRzLnJl
c2l6ZShnbHlwaHMuc2l6ZSgpKTsKKyAgICAgICAgYWR2YW5jZXMucmVzaXplKGdseXBocy5zaXpl
KCkpOworICAgICAgICBIUkVTVUxUIHBsYWNlUmVzdWx0ID0gU2NyaXB0UGxhY2UoMCwgZm9udC0+
c2NyaXB0Q2FjaGUoKSwgZ2x5cGhzLmRhdGEoKSwgZ2x5cGhzLnNpemUoKSwgdmlzdWFsQXR0cmli
dXRlcy5kYXRhKCksCisgICAgICAgICAgICAmaXRlbS5hLCBhZHZhbmNlcy5kYXRhKCksIG9mZnNl
dHMuZGF0YSgpLCAwKTsKKyAgICAgICAgaWYgKHBsYWNlUmVzdWx0ID09IEVfUEVORElORykgewor
ICAgICAgICAgICAgLy8gVGhlIHNjcmlwdCBjYWNoZSBpc24ndCBwcmltZWQgd2l0aCBlbm91Z2gg
aW5mbyB5ZXQuIFdlIG5lZWQgdG8gc2VsZWN0IG91ciBIRk9OVCBpbnRvCisgICAgICAgICAgICAv
LyBhIERDIGFuZCBwYXNzIHRoZSBEQyBpbiB0byBTY3JpcHRQbGFjZS4KKyAgICAgICAgICAgIEhX
bmREQyBoZGMoMCk7CisgICAgICAgICAgICBIRk9OVCBoZm9udCA9IGZvbnQtPnBsYXRmb3JtRGF0
YSgpLmhmb250KCk7CisgICAgICAgICAgICBIRk9OVCBvbGRGb250ID0gKEhGT05UKVNlbGVjdE9i
amVjdChoZGMsIGhmb250KTsKKyAgICAgICAgICAgIHBsYWNlUmVzdWx0ID0gU2NyaXB0UGxhY2Uo
aGRjLCBmb250LT5zY3JpcHRDYWNoZSgpLCBnbHlwaHMuZGF0YSgpLCBnbHlwaHMuc2l6ZSgpLCB2
aXN1YWxBdHRyaWJ1dGVzLmRhdGEoKSwKKyAgICAgICAgICAgICAgICAmaXRlbS5hLCBhZHZhbmNl
cy5kYXRhKCksIG9mZnNldHMuZGF0YSgpLCAwKTsKKyAgICAgICAgICAgIFNlbGVjdE9iamVjdCho
ZGMsIG9sZEZvbnQpOworICAgICAgICB9CisgICAgCisgICAgICAgIGlmIChGQUlMRUQocGxhY2VS
ZXN1bHQpIHx8IGdseXBocy5pc0VtcHR5KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAg
ICAgICBWZWN0b3I8dW5zaWduZWQ+IHN0cmluZ0luZGljZXMoZ2x5cGhzLnNpemUoKSwgaXRlbS5p
Q2hhclBvcyk7CisKKyAgICAgICAgZm9yIChpbnQgayA9IGxlbmd0aCAtIDE7IGsgPj0gMDsgay0t
KQorICAgICAgICAgICAgc3RyaW5nSW5kaWNlc1tjbHVzdGVyc1trXV0gPSBpdGVtLmlDaGFyUG9z
ICsgazsKKworICAgICAgICBGbG9hdFNpemUgaW5pdGlhbEFkdmFuY2U7CisgICAgICAgIFZlY3Rv
cjxGbG9hdFNpemU+IGJhc2VBZHZhbmNlczsKKyAgICAgICAgVmVjdG9yPEZsb2F0UG9pbnQ+IG9y
aWdpbnM7CisgICAgICAgIGJhc2VBZHZhbmNlcy5yZXNlcnZlQ2FwYWNpdHkoZ2x5cGhzLnNpemUo
KSk7CisgICAgICAgIG9yaWdpbnMucmVzZXJ2ZUNhcGFjaXR5KGdseXBocy5zaXplKCkpOworCisg
ICAgICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBnbHlwaHMuc2l6ZSgpOyBrKyspIHsKKyAg
ICAgICAgICAgIGNvbnN0IGZsb2F0IGNMb2dpY2FsU2NhbGUgPSBmb250LT5wbGF0Zm9ybURhdGEo
KS51c2VHREkoKSA/IDEgOiAzMjsKKyAgICAgICAgICAgIGZsb2F0IGFkdmFuY2UgPSBhZHZhbmNl
c1trXSAvIGNMb2dpY2FsU2NhbGU7CisgICAgICAgICAgICBmbG9hdCBvZmZzZXRYID0gb2Zmc2V0
c1trXS5kdSAvIGNMb2dpY2FsU2NhbGU7CisgICAgICAgICAgICBmbG9hdCBvZmZzZXRZID0gb2Zm
c2V0c1trXS5kdiAvIGNMb2dpY2FsU2NhbGU7CisKKyAgICAgICAgICAgIC8vIE1hdGNoIEFwcEtp
dCdzIHJ1bGVzIGZvciB0aGUgaW50ZWdlciB2cy4gbm9uLWludGVnZXIgcmVuZGVyaW5nIG1vZGVz
LgorICAgICAgICAgICAgaWYgKCFmb250LT5wbGF0Zm9ybURhdGEoKS5pc1N5c3RlbUZvbnQoKSkg
eworICAgICAgICAgICAgICAgIGFkdmFuY2UgPSByb3VuZGYoYWR2YW5jZSk7CisgICAgICAgICAg
ICAgICAgb2Zmc2V0WCA9IHJvdW5kZihvZmZzZXRYKTsKKyAgICAgICAgICAgICAgICBvZmZzZXRZ
ID0gcm91bmRmKG9mZnNldFkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBGSVhN
RTogV2UgbmVlZCB0byB0YWtlIHRoZSBHT0ZGU0VUUyBmb3IgY29tYmluaW5nIGdseXBocyBhbmQg
c3RvcmUgdGhlbSBpbiB0aGUgZ2x5cGggYnVmZmVyCisgICAgICAgICAgICAvLyBhcyB3ZWxsLCBz
byB0aGF0IHdoZW4gdGhlIHRpbWUgY29tZXMgdG8gZHJhdyB0aG9zZSBnbHlwaHMsIHdlIGNhbiBh
cHBseSB0aGUgYXBwcm9wcmlhdGUKKyAgICAgICAgICAgIC8vIHRyYW5zbGF0aW9uLgorCisgICAg
ICAgICAgICBiYXNlQWR2YW5jZXMudW5jaGVja2VkQXBwZW5kKHsgYWR2YW5jZSwgMCB9KTsKKyAg
ICAgICAgICAgIG9yaWdpbnMudW5jaGVja2VkQXBwZW5kKHsgb2Zmc2V0WCwgb2Zmc2V0WSB9KTsK
KyAgICAgICAgfQorICAgICAgICBib29sIGx0ciA9ICFpdGVtLmEuZlJUTDsKKyAgICAgICAgbV9j
b21wbGV4VGV4dFJ1bnMuYXBwZW5kKENvbXBsZXhUZXh0UnVuOjpjcmVhdGUoYmFzZUFkdmFuY2Vz
LCBvcmlnaW5zLCBnbHlwaHMsIHN0cmluZ0luZGljZXMsIGluaXRpYWxBZHZhbmNlLCAqZm9udCwg
Y3AsIHN0cmluZ0xvY2F0aW9uLCBzdHJpbmdMZW5ndGgsIGl0ZW0uaUNoYXJQb3MsIGl0ZW1zW2kr
MV0uaUNoYXJQb3MsIGx0cikpOworICAgIH0KK30KKworfQorCisjZW5kaWYgLy8gIVVTRShESVJF
Q1QyRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9G
b250Q0dXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRD
R1dpbi5jcHAKaW5kZXggMGVmNjU1ZDhkMDUuLjMzZjg1MmViNmU4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENHV2luLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENHV2luLmNwcApAQCAtMzQsNyAr
MzQsNiBAQAogI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIlVuaXNjcmliZUNvbnRyb2xs
ZXIuaCIKICNpbmNsdWRlICJXZWJDb3JlVGV4dFJlbmRlcmVyLmgiCiAjaW5jbHVkZSA8cGFsL3Nw
aS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYXNjYWRl
RGlyZWN0MkQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRD
YXNjYWRlRGlyZWN0MkQuY3BwCmluZGV4IDkxMTEyZDk2NWM4Li5iMmQzNDcxYjhhYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYXNjYWRlRGly
ZWN0MkQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250
Q2FzY2FkZURpcmVjdDJELmNwcApAQCAtMzcsNyArMzcsNiBAQAogI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dFBsYXRmb3JtUHJpdmF0ZURpcmVjdDJELmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgog
I2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dERpcmVjdDJELmgiCi0jaW5jbHVkZSAiVW5pc2NyaWJl
Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIldlYkNvcmVUZXh0UmVuZGVyZXIuaCIKICNpbmNsdWRl
IDxkMmQxLmg+CiAjaW5jbHVkZSA8ZHdyaXRlXzMuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250V2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250V2luLmNwcAppbmRleCAxY2FhODAyMmUyNi4uNTJjYjg4
ZjUzZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9G
b250V2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9u
dFdpbi5jcHAKQEAgLTM1LDEwICszNSw2IEBACiAjaW5jbHVkZSAiVGV4dFJ1bi5oIgogI2luY2x1
ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKLSNpZiAhVVNFKERJUkVDVDJEKQotI2luY2x1ZGUgIlVu
aXNjcmliZUNvbnRyb2xsZXIuaCIKLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGJv
b2wgRm9udENhc2NhZGU6OmNhblJldHVybkZhbGxiYWNrRm9udHNGb3JDb21wbGV4VGV4dCgpCkBA
IC01MSw3MiArNDcsNCBAQCBib29sIEZvbnRDYXNjYWRlOjpjYW5FeHBhbmRBcm91bmRJZGVvZ3Jh
cGhzSW5Db21wbGV4VGV4dCgpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi0jaWYgIVVTRShESVJF
Q1QyRCkKLQotdm9pZCBGb250Q2FzY2FkZTo6YWRqdXN0U2VsZWN0aW9uUmVjdEZvckNvbXBsZXhU
ZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgdW5zaWdu
ZWQgZnJvbSwgdW5zaWduZWQgdG8pIGNvbnN0Ci17Ci0gICAgVW5pc2NyaWJlQ29udHJvbGxlciBp
dCh0aGlzLCBydW4pOwotICAgIGl0LmFkdmFuY2UoZnJvbSk7Ci0gICAgZmxvYXQgYmVmb3JlV2lk
dGggPSBpdC5ydW5XaWR0aFNvRmFyKCk7Ci0gICAgaXQuYWR2YW5jZSh0byk7Ci0gICAgZmxvYXQg
YWZ0ZXJXaWR0aCA9IGl0LnJ1bldpZHRoU29GYXIoKTsKLQotICAgIGlmIChydW4ucnRsKCkpIHsK
LSAgICAgICAgaXQuYWR2YW5jZShydW4ubGVuZ3RoKCkpOwotICAgICAgICBzZWxlY3Rpb25SZWN0
Lm1vdmUoaXQucnVuV2lkdGhTb0ZhcigpIC0gYWZ0ZXJXaWR0aCwgMCk7Ci0gICAgfSBlbHNlCi0g
ICAgICAgIHNlbGVjdGlvblJlY3QubW92ZShiZWZvcmVXaWR0aCwgMCk7Ci0gICAgc2VsZWN0aW9u
UmVjdC5zZXRXaWR0aChhZnRlcldpZHRoIC0gYmVmb3JlV2lkdGgpOwotfQotCi1mbG9hdCBGb250
Q2FzY2FkZTo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVu
JiBydW4sIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvLCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZm
ZXIsIEZvclRleHRFbXBoYXNpc09yTm90IGZvclRleHRFbXBoYXNpcykgY29uc3QKLXsKLSAgICBp
ZiAoZm9yVGV4dEVtcGhhc2lzKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBBZGQgZm9yVGV4dEVtcGhh
c2lzIHBhcmVtZXRlciB0byBVbmlzY3JpYmVDb250cm9sbGVyIGFuZCB1c2UgaXQuCi0gICAgICAg
IExPR19FUlJPUigiTm90IGltcGxlbWVudGVkIGZvciB0ZXh0IGVtcGhhc2lzLiIpOwotICAgICAg
ICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBVbmlzY3JpYmVDb250cm9sbGVyIGNvbnRyb2xsZXIo
dGhpcywgcnVuKTsKLSAgICBjb250cm9sbGVyLmFkdmFuY2UoZnJvbSk7Ci0gICAgZmxvYXQgYmVm
b3JlV2lkdGggPSBjb250cm9sbGVyLnJ1bldpZHRoU29GYXIoKTsKLSAgICBjb250cm9sbGVyLmFk
dmFuY2UodG8sICZnbHlwaEJ1ZmZlcik7Ci0KLSAgICBpZiAoZ2x5cGhCdWZmZXIuaXNFbXB0eSgp
KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGZsb2F0IGFmdGVyV2lkdGggPSBjb250cm9sbGVy
LnJ1bldpZHRoU29GYXIoKTsKLQotICAgIGlmIChydW4ucnRsKCkpIHsKLSAgICAgICAgY29udHJv
bGxlci5hZHZhbmNlKHJ1bi5sZW5ndGgoKSk7Ci0gICAgICAgIHJldHVybiBjb250cm9sbGVyLnJ1
bldpZHRoU29GYXIoKSAtIGFmdGVyV2lkdGg7Ci0gICAgfQotICAgIHJldHVybiBiZWZvcmVXaWR0
aDsKLX0KLQotZmxvYXQgRm9udENhc2NhZGU6OmZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChjb25z
dCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzLCBHbHlw
aE92ZXJmbG93KiBnbHlwaE92ZXJmbG93KSBjb25zdAotewotICAgIFVuaXNjcmliZUNvbnRyb2xs
ZXIgY29udHJvbGxlcih0aGlzLCBydW4sIGZhbGxiYWNrRm9udHMpOwotICAgIGNvbnRyb2xsZXIu
YWR2YW5jZShydW4ubGVuZ3RoKCkpOwotICAgIGlmIChnbHlwaE92ZXJmbG93KSB7Ci0gICAgICAg
IGdseXBoT3ZlcmZsb3ctPnRvcCA9IHN0ZDo6bWF4PGludD4oZ2x5cGhPdmVyZmxvdy0+dG9wLCBj
ZWlsZigtY29udHJvbGxlci5taW5HbHlwaEJvdW5kaW5nQm94WSgpKSAtIChnbHlwaE92ZXJmbG93
LT5jb21wdXRlQm91bmRzID8gMCA6IGZvbnRNZXRyaWNzKCkuYXNjZW50KCkpKTsKLSAgICAgICAg
Z2x5cGhPdmVyZmxvdy0+Ym90dG9tID0gc3RkOjptYXg8aW50PihnbHlwaE92ZXJmbG93LT5ib3R0
b20sIGNlaWxmKGNvbnRyb2xsZXIubWF4R2x5cGhCb3VuZGluZ0JveFkoKSkgLSAoZ2x5cGhPdmVy
Zmxvdy0+Y29tcHV0ZUJvdW5kcyA/IDAgIDogZm9udE1ldHJpY3MoKS5kZXNjZW50KCkpKTsKLSAg
ICAgICAgZ2x5cGhPdmVyZmxvdy0+bGVmdCA9IHN0ZDo6bWF4PGludD4oMCwgY2VpbGYoLWNvbnRy
b2xsZXIubWluR2x5cGhCb3VuZGluZ0JveFgoKSkpOwotICAgICAgICBnbHlwaE92ZXJmbG93LT5y
aWdodCA9IHN0ZDo6bWF4PGludD4oMCwgY2VpbGYoY29udHJvbGxlci5tYXhHbHlwaEJvdW5kaW5n
Qm94WCgpIC0gY29udHJvbGxlci5ydW5XaWR0aFNvRmFyKCkpKTsKLSAgICB9Ci0gICAgcmV0dXJu
IGNvbnRyb2xsZXIucnVuV2lkdGhTb0ZhcigpOwotfQotCi1pbnQgRm9udENhc2NhZGU6Om9mZnNl
dEZvclBvc2l0aW9uRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBmbG9hdCB4Rmxv
YXQsIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IFRo
aXMgdHJ1bmNhdGlvbiBpcyBub3QgYSBwcm9ibGVtIGZvciBIVE1MLCBidXQgb25seSBhZmZlY3Rz
IFNWRywgd2hpY2ggcGFzc2VzIGZsb2F0aW5nLXBvaW50IG51bWJlcnMKLSAgICAvLyB0byBGb250
Q2FzY2FkZTo6b2Zmc2V0Rm9yUG9zaXRpb24oKS4gQnVnIGh0dHA6Ly93ZWJraXQub3JnL2IvNDA2
NzMgdHJhY2tzIGZpeGluZyB0aGlzIHByb2JsZW0uCi0gICAgaW50IHggPSBzdGF0aWNfY2FzdDxp
bnQ+KHhGbG9hdCk7Ci0KLSAgICBVbmlzY3JpYmVDb250cm9sbGVyIGNvbnRyb2xsZXIodGhpcywg
cnVuKTsKLSAgICByZXR1cm4gY29udHJvbGxlci5vZmZzZXRGb3JQb3NpdGlvbih4LCBpbmNsdWRl
UGFydGlhbEdseXBocyk7Ci19Ci0KLSNlbmRpZgotCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vVW5pc2NyaWJlQ29udHJvbGxlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vVW5pc2NyaWJlQ29udHJvbGxlci5jcHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3NGM0ODYwZmYxLi4wMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vVW5pc2NyaWJlQ29udHJv
bGxlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0NTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJVbmlzY3JpYmVD
b250cm9sbGVyLmgiCi0KLSNpbmNsdWRlICJGb250LmgiCi0jaW5jbHVkZSAiRm9udENhc2NhZGUu
aCIKLSNpbmNsdWRlICJIV25kREMuaCIKLSNpbmNsdWRlICJUZXh0UnVuLmgiCi0jaW5jbHVkZSA8
d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC93aW4vV0NoYXJTdHJpbmdFeHRy
YXMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotdXNpbmcgbmFtZXNwYWNlIFdURjo6VW5pY29k
ZTsKLQotLy8gRklYTUU6IFJlYXJjaGl0ZWN0IHRoaXMgdG8gYmUgbW9yZSBsaWtlIFdpZHRoSXRl
cmF0b3IgaW4gRm9udC5jcHAuICBIYXZlIGFuIGFkdmFuY2UoKSBtZXRob2QKLS8vIHRoYXQgZG9l
cyBzdHVmZiBpbiB0aGF0IG1ldGhvZCBpbnN0ZWFkIG9mIGRvaW5nIGV2ZXJ5dGhpbmcgaW4gdGhl
IGNvbnN0cnVjdG9yLiAgSGF2ZSBhZHZhbmNlKCkKLS8vIHRha2UgdGhlIEdseXBoQnVmZmVyIGFz
IGFuIGFyZyBzbyB0aGF0IHdlIGRvbid0IGhhdmUgdG8gcG9wdWxhdGUgdGhlIGdseXBoIGJ1ZmZl
ciB3aGVuCi0vLyBtZWFzdXJpbmcuCi1VbmlzY3JpYmVDb250cm9sbGVyOjpVbmlzY3JpYmVDb250
cm9sbGVyKGNvbnN0IEZvbnRDYXNjYWRlKiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hT
ZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzKQotICAgIDogbV9mb250KCpmb250KQotICAg
ICwgbV9ydW4ocnVuKQotICAgICwgbV9mYWxsYmFja0ZvbnRzKGZhbGxiYWNrRm9udHMpCi0gICAg
LCBtX21pbkdseXBoQm91bmRpbmdCb3hYKHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgo
KSkKLSAgICAsIG1fbWF4R2x5cGhCb3VuZGluZ0JveFgoc3RkOjpudW1lcmljX2xpbWl0czxmbG9h
dD46Om1pbigpKQotICAgICwgbV9taW5HbHlwaEJvdW5kaW5nQm94WShzdGQ6Om51bWVyaWNfbGlt
aXRzPGZsb2F0Pjo6bWF4KCkpCi0gICAgLCBtX21heEdseXBoQm91bmRpbmdCb3hZKHN0ZDo6bnVt
ZXJpY19saW1pdHM8ZmxvYXQ+OjptaW4oKSkKLSAgICAsIG1fY3VycmVudENoYXJhY3RlcigwKQot
ICAgICwgbV9lbmQocnVuLmxlbmd0aCgpKQotICAgICwgbV9ydW5XaWR0aFNvRmFyKDApCi0gICAg
LCBtX3BhZGRpbmcocnVuLmV4cGFuc2lvbigpKQotICAgICwgbV9jb21wdXRpbmdPZmZzZXRQb3Np
dGlvbihmYWxzZSkKLSAgICAsIG1faW5jbHVkZVBhcnRpYWxHbHlwaHMoZmFsc2UpCi0gICAgLCBt
X29mZnNldFgoMCkKLSAgICAsIG1fb2Zmc2V0UG9zaXRpb24oMCkKLXsKLSAgICBpZiAoIW1fcGFk
ZGluZykKLSAgICAgICAgbV9wYWRQZXJTcGFjZSA9IDA7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGZs
b2F0IG51bVNwYWNlcyA9IDA7Ci0gICAgICAgIGZvciAoaW50IHMgPSAwOyBzIDwgbV9ydW4ubGVu
Z3RoKCk7IHMrKykgewotICAgICAgICAgICAgaWYgKEZvbnRDYXNjYWRlOjp0cmVhdEFzU3BhY2Uo
bV9ydW5bc10pKQotICAgICAgICAgICAgICAgIG51bVNwYWNlcysrOwotICAgICAgICB9Ci0KLSAg
ICAgICAgaWYgKG51bVNwYWNlcyA9PSAwKQotICAgICAgICAgICAgbV9wYWRQZXJTcGFjZSA9IDA7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fcGFkUGVyU3BhY2UgPSBtX3BhZGRpbmcgLyBu
dW1TcGFjZXM7Ci0gICAgfQotCi0gICAgLy8gTnVsbCBvdXQgb3VyIHVuaXNjcmliZSBzdHJ1Y3Rz
Ci0gICAgcmVzZXRDb250cm9sQW5kU3RhdGUoKTsKLX0KLQotaW50IFVuaXNjcmliZUNvbnRyb2xs
ZXI6Om9mZnNldEZvclBvc2l0aW9uKGludCB4LCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKQot
ewotICAgIG1fY29tcHV0aW5nT2Zmc2V0UG9zaXRpb24gPSB0cnVlOwotICAgIG1faW5jbHVkZVBh
cnRpYWxHbHlwaHMgPSBpbmNsdWRlUGFydGlhbEdseXBoczsKLSAgICBtX29mZnNldFggPSB4Owot
ICAgIG1fb2Zmc2V0UG9zaXRpb24gPSAwOwotICAgIGFkdmFuY2UobV9ydW4ubGVuZ3RoKCkpOwot
ICAgIGlmIChtX2NvbXB1dGluZ09mZnNldFBvc2l0aW9uKSB7Ci0gICAgICAgIC8vIFRoZSBwb2lu
dCBpcyB0byB0aGUgbGVmdCBvciB0byB0aGUgcmlnaHQgb2YgdGhlIGVudGlyZSBydW4uCi0gICAg
ICAgIGlmICgobV9vZmZzZXRYID49IG1fcnVuV2lkdGhTb0ZhciAmJiBtX3J1bi5sdHIoKSkgfHwg
KG1fb2Zmc2V0WCA8IDAgJiYgbV9ydW4ucnRsKCkpKQotICAgICAgICAgICAgbV9vZmZzZXRQb3Np
dGlvbiA9IG1fZW5kOwotICAgIH0KLSAgICBtX2NvbXB1dGluZ09mZnNldFBvc2l0aW9uID0gZmFs
c2U7Ci0gICAgcmV0dXJuIG1fb2Zmc2V0UG9zaXRpb247Ci19Ci0KLXZvaWQgVW5pc2NyaWJlQ29u
dHJvbGxlcjo6YWR2YW5jZSh1bnNpZ25lZCBvZmZzZXQsIEdseXBoQnVmZmVyKiBnbHlwaEJ1ZmZl
cikKLXsKLSAgICAvLyBGSVhNRTogV2UgcmVhbGx5IHdhbnQgdG8gYmUgdXNpbmcgYSBuZXdlciB2
ZXJzaW9uIG9mIFVuaXNjcmliZSB0aGF0IHN1cHBvcnRzIHRoZSBuZXcgT3BlblR5cGUKLSAgICAv
LyBmdW5jdGlvbnMuICBUaG9zZSBmdW5jdGlvbnMgd291bGQgYWxsb3cgdXMgdG8gdHVybiBvZmYg
a2VybmluZyBhbmQgbGlnYXR1cmVzLiAgV2l0aG91dCBiZWluZyBhYmxlCi0gICAgLy8gdG8gZG8g
dGhhdCwgd2Ugd2lsbCBoYXZlIGJ1Z2d5IGxpbmUgYnJlYWtpbmcgYW5kIG1ldHJpY3Mgd2hlbiBz
aW1wbGUgYW5kIGNvbXBsZXggdGV4dCBhcmUgY2xvc2UKLSAgICAvLyB0b2dldGhlciAodGhlIGNv
bXBsZXggY29kZSBwYXRoIHdpbGwgbmFycm93IHRoZSB0ZXh0IGJlY2F1c2Ugb2Yga2VybmluZyBh
bmQgbGlnYXR1cmVzIGFuZCB0aGVuCi0gICAgLy8gd2hlbiBiaWRpIHByb2Nlc3Npbmcgc3BsaXRz
IGludG8gbXVsdGlwbGUgcnVucywgdGhlIHNpbXBsZSBwb3J0aW9ucyB3aWxsIGdldCB3aWRlciBh
bmQgY2F1c2UgdXMgdG8KLSAgICAvLyBzcGlsbCBvZmYgdGhlIGVkZ2Ugb2YgYSBsaW5lKS4KLSAg
ICBpZiAoc3RhdGljX2Nhc3Q8aW50PihvZmZzZXQpID4gbV9lbmQpCi0gICAgICAgIG9mZnNldCA9
IG1fZW5kOwotCi0gICAgaW50IGxlbmd0aCA9IG9mZnNldCAtIG1fY3VycmVudENoYXJhY3RlcjsK
LSAgICBpZiAobGVuZ3RoIDw9IDApCi0gICAgICAgIHJldHVybjsKLQotICAgIFN0cmluZyBidWZm
ZXJGb3IxNkJpdERhdGE7Ci0KLSAgICAvLyBJdGVtaXplIHRoZSBzdHJpbmcuCi0gICAgY29uc3Qg
VUNoYXIqIGNwID0gbnVsbHB0cjsKLSAgICBpZiAobV9ydW4uaXM4Qml0KCkpIHsKLSAgICAgICAg
Ly8gVW5pc2NyaWJlIG9ubHkgZGVhbHMgd2l0aCAxNi1iaXQgY2hhcmFjdGVycy4gTXVzdCBnZW5l
cmF0ZSB0aGVtIG5vdy4KLSAgICAgICAgYnVmZmVyRm9yMTZCaXREYXRhID0gU3RyaW5nOjptYWtl
MTZCaXRGcm9tOEJpdFNvdXJjZShtX3J1bi5kYXRhOChtX2N1cnJlbnRDaGFyYWN0ZXIpLCBsZW5n
dGgpOwotICAgICAgICBjcCA9IGJ1ZmZlckZvcjE2Qml0RGF0YS5jaGFyYWN0ZXJzMTYoKTsKLSAg
ICB9IGVsc2UKLSAgICAgICAgY3AgPSBtX3J1bi5kYXRhMTYobV9jdXJyZW50Q2hhcmFjdGVyKTsK
LQotICAgIHVuc2lnbmVkIGJhc2VDaGFyYWN0ZXIgPSBtX2N1cnJlbnRDaGFyYWN0ZXI7Ci0KLSAg
ICAvLyBXZSBicmVhayB1cCBpdGVtaXphdGlvbiBvZiB0aGUgc3RyaW5nIGJ5IGZvbnREYXRhIGFu
ZCAoaWYgbmVlZGVkKSB0aGUgdXNlIG9mIHNtYWxsIGNhcHMuCi0KLSAgICAvLyBGSVhNRTogSXQn
cyBpbmNvbnNpc3RlbnQgdGhhdCB3ZSB1c2UgbG9naWNhbCBvcmRlciB3aGVuIGl0ZW1pemluZywg
c2luY2UgdGhpcwotICAgIC8vIGRvZXMgbm90IG1hdGNoIG5vcm1hbCBSVEwuCi0KLSAgICAvLyBG
SVhNRTogVGhpcyBmdW5jdGlvbiBzaG91bGQgZGVjb2RlIHN1cnJvZ2F0ZSBwYWlycy4gQ3VycmVu
dGx5IGl0IG1ha2VzIGxpdHRsZSBkaWZmZXJlbmNlIHRoYXQKLSAgICAvLyBpdCBkb2VzIG5vdCBi
ZWNhdXNlIHRoZSBmb250IGNhY2hlIG9uIFdpbmRvd3MgZG9lcyBub3Qgc3VwcG9ydCBub24tQk1Q
IGNoYXJhY3RlcnMuCi0gICAgVmVjdG9yPFVDaGFyLCAyNTY+IHNtYWxsQ2Fwc0J1ZmZlcjsKLSAg
ICBpZiAobV9mb250LmlzU21hbGxDYXBzKCkpCi0gICAgICAgIHNtYWxsQ2Fwc0J1ZmZlci5yZXNp
emUobGVuZ3RoKTsKLQotICAgIHVuc2lnbmVkIGluZGV4T2ZGb250VHJhbnNpdGlvbiA9IG1fcnVu
LnJ0bCgpID8gbGVuZ3RoIC0gMSA6IDA7Ci0gICAgY29uc3QgVUNoYXIqIGN1cnIgPSBtX3J1bi5y
dGwoKSA/IGNwICsgbGVuZ3RoICAtIDEgOiBjcDsKLSAgICBjb25zdCBVQ2hhciogZW5kID0gbV9y
dW4ucnRsKCkgPyBjcCAtIDEgOiBjcCArIGxlbmd0aDsKLQotICAgIGNvbnN0IEZvbnQqIGZvbnRE
YXRhOwotICAgIGNvbnN0IEZvbnQqIG5leHRGb250RGF0YSA9IG1fZm9udC5nbHlwaERhdGFGb3JD
aGFyYWN0ZXIoKmN1cnIsIGZhbHNlKS5mb250OwotCi0gICAgVUNoYXIgbmV3QyA9IDA7Ci0KLSAg
ICBib29sIGlzU21hbGxDYXBzOwotICAgIGJvb2wgbmV4dElzU21hbGxDYXBzID0gbV9mb250Lmlz
U21hbGxDYXBzKCkgJiYgIShVX0dFVF9HQ19NQVNLKCpjdXJyKSAmIFVfR0NfTV9NQVNLKSAmJiAo
bmV3QyA9IHVfdG91cHBlcigqY3VycikpICE9ICpjdXJyOwotCi0gICAgaWYgKG5leHRJc1NtYWxs
Q2FwcykKLSAgICAgICAgc21hbGxDYXBzQnVmZmVyW2N1cnIgLSBjcF0gPSBuZXdDOwotCi0gICAg
d2hpbGUgKHRydWUpIHsKLSAgICAgICAgY3VyciA9IG1fcnVuLnJ0bCgpID8gY3VyciAtIDEgOiBj
dXJyICsgMTsKLSAgICAgICAgaWYgKGN1cnIgPT0gZW5kKQotICAgICAgICAgICAgYnJlYWs7Ci0K
LSAgICAgICAgZm9udERhdGEgPSBuZXh0Rm9udERhdGE7Ci0gICAgICAgIGlzU21hbGxDYXBzID0g
bmV4dElzU21hbGxDYXBzOwotICAgICAgICBpbnQgaW5kZXggPSBjdXJyIC0gY3A7Ci0gICAgICAg
IFVDaGFyIGMgPSAqY3VycjsKLQotICAgICAgICBib29sIGZvcmNlU21hbGxDYXBzID0gaXNTbWFs
bENhcHMgJiYgKFVfR0VUX0dDX01BU0soYykgJiBVX0dDX01fTUFTSyk7Ci0gICAgICAgIG5leHRG
b250RGF0YSA9IG1fZm9udC5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoKmN1cnIsIGZhbHNlLCBmb3Jj
ZVNtYWxsQ2FwcyA/IFNtYWxsQ2Fwc1ZhcmlhbnQgOiBBdXRvVmFyaWFudCkuZm9udDsKLSAgICAg
ICAgaWYgKG1fZm9udC5pc1NtYWxsQ2FwcygpKSB7Ci0gICAgICAgICAgICBuZXh0SXNTbWFsbENh
cHMgPSBmb3JjZVNtYWxsQ2FwcyB8fCAobmV3QyA9IHVfdG91cHBlcihjKSkgIT0gYzsKLSAgICAg
ICAgICAgIGlmIChuZXh0SXNTbWFsbENhcHMpCi0gICAgICAgICAgICAgICAgc21hbGxDYXBzQnVm
ZmVyW2luZGV4XSA9IGZvcmNlU21hbGxDYXBzID8gYyA6IG5ld0M7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAobV9mYWxsYmFja0ZvbnRzICYmIGZvbnREYXRhICYmIG5leHRGb250RGF0YSAhPSBm
b250RGF0YSAmJiBmb250RGF0YSAhPSAmbV9mb250LnByaW1hcnlGb250KCkpCi0gICAgICAgICAg
ICBtX2ZhbGxiYWNrRm9udHMtPmFkZChmb250RGF0YSk7Ci0KLSAgICAgICAgaWYgKG5leHRGb250
RGF0YSAhPSBmb250RGF0YSB8fCBuZXh0SXNTbWFsbENhcHMgIT0gaXNTbWFsbENhcHMpIHsKLSAg
ICAgICAgICAgIGludCBpdGVtU3RhcnQgPSBtX3J1bi5ydGwoKSA/IGluZGV4ICsgMSA6IGluZGV4
T2ZGb250VHJhbnNpdGlvbjsKLSAgICAgICAgICAgIGludCBpdGVtTGVuZ3RoID0gbV9ydW4ucnRs
KCkgPyBpbmRleE9mRm9udFRyYW5zaXRpb24gLSBpbmRleCA6IGluZGV4IC0gaW5kZXhPZkZvbnRU
cmFuc2l0aW9uOwotICAgICAgICAgICAgbV9jdXJyZW50Q2hhcmFjdGVyID0gYmFzZUNoYXJhY3Rl
ciArIGl0ZW1TdGFydDsKLSAgICAgICAgICAgIGl0ZW1pemVTaGFwZUFuZFBsYWNlKChpc1NtYWxs
Q2FwcyA/IHNtYWxsQ2Fwc0J1ZmZlci5kYXRhKCkgOiBjcCkgKyBpdGVtU3RhcnQsIGl0ZW1TdGFy
dCwgaXRlbUxlbmd0aCwgZm9udERhdGEsIGdseXBoQnVmZmVyKTsKLSAgICAgICAgICAgIGluZGV4
T2ZGb250VHJhbnNpdGlvbiA9IGluZGV4OwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIGlu
dCBpdGVtTGVuZ3RoID0gbV9ydW4ucnRsKCkgPyBpbmRleE9mRm9udFRyYW5zaXRpb24gKyAxIDog
bGVuZ3RoIC0gaW5kZXhPZkZvbnRUcmFuc2l0aW9uOwotICAgIGlmIChpdGVtTGVuZ3RoKSB7Ci0g
ICAgICAgIGlmIChtX2ZhbGxiYWNrRm9udHMgJiYgbmV4dEZvbnREYXRhICYmIG5leHRGb250RGF0
YSAhPSAmbV9mb250LnByaW1hcnlGb250KCkpCi0gICAgICAgICAgICBtX2ZhbGxiYWNrRm9udHMt
PmFkZChuZXh0Rm9udERhdGEpOwotCi0gICAgICAgIGludCBpdGVtU3RhcnQgPSBtX3J1bi5ydGwo
KSA/IDAgOiBpbmRleE9mRm9udFRyYW5zaXRpb247Ci0gICAgICAgIG1fY3VycmVudENoYXJhY3Rl
ciA9IGJhc2VDaGFyYWN0ZXIgKyBpdGVtU3RhcnQ7Ci0gICAgICAgIGl0ZW1pemVTaGFwZUFuZFBs
YWNlKChuZXh0SXNTbWFsbENhcHMgPyBzbWFsbENhcHNCdWZmZXIuZGF0YSgpIDogY3ApICsgaXRl
bVN0YXJ0LCBpdGVtU3RhcnQsIGl0ZW1MZW5ndGgsIG5leHRGb250RGF0YSwgZ2x5cGhCdWZmZXIp
OwotICAgIH0KLQotICAgIG1fY3VycmVudENoYXJhY3RlciA9IGJhc2VDaGFyYWN0ZXIgKyBsZW5n
dGg7Ci19Ci0KLXZvaWQgVW5pc2NyaWJlQ29udHJvbGxlcjo6aXRlbWl6ZVNoYXBlQW5kUGxhY2Uo
Y29uc3QgVUNoYXIqIGNwLCB1bnNpZ25lZCBzdHJpbmdPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwg
Y29uc3QgRm9udCogZm9udERhdGEsIEdseXBoQnVmZmVyKiBnbHlwaEJ1ZmZlcikKLXsKLSAgICAv
LyBTY3JpcHRJdGVtaXplIChpbiBXaW5kb3dzIFhQIHZlcnNpb25zIHByaW9yIHRvIFNQMikgY2Fu
IG92ZXJmbG93IGJ5IDEuICBUaGlzIGlzIHdoeSB0aGVyZSBpcyBhbiBleHRyYSBlbXB0eSBpdGVt
Ci0gICAgLy8gaGFuZ2luZyBvdXQgYXQgdGhlIGVuZCBvZiB0aGUgYXJyYXkKLSAgICBtX2l0ZW1z
LnJlc2l6ZSg2KTsKLSAgICBpbnQgbnVtSXRlbXMgPSAwOwotICAgIEhSRVNVTFQgcmMgPSBTX09L
OwotICAgIHdoaWxlIChyYyA9IDo6U2NyaXB0SXRlbWl6ZSh3Y2hhckZyb20oY3ApLCBsZW5ndGgs
IG1faXRlbXMuc2l6ZSgpIC0gMSwgJm1fY29udHJvbCwgJm1fc3RhdGUsIG1faXRlbXMuZGF0YSgp
LCAmbnVtSXRlbXMpID09IEVfT1VUT0ZNRU1PUlkpIHsKLSAgICAgICAgbV9pdGVtcy5yZXNpemUo
bV9pdGVtcy5zaXplKCkgKiAyKTsKLSAgICAgICAgcmVzZXRDb250cm9sQW5kU3RhdGUoKTsKLSAg
ICB9Ci0gICAgaWYgKEZBSUxFRChyYykpIHsKLSAgICAgICAgV1RGTG9nQWx3YXlzKCJVbmlzY3Jp
YmVDb250cm9sbGVyOjppdGVtaXplU2hhcGVBbmRQbGFjZTogU2NyaXB0SXRlbWl6ZSBmYWlsZWQs
IHJjPSVseCIsIHJjKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtX2l0ZW1zLnJlc2l6
ZShudW1JdGVtcyArIDEpOwotCi0gICAgaWYgKG1fcnVuLnJ0bCgpKSB7Ci0gICAgICAgIGZvciAo
aW50IGkgPSBtX2l0ZW1zLnNpemUoKSAtIDI7IGkgPj0gMDsgaS0tKSB7Ci0gICAgICAgICAgICBp
ZiAoIXNoYXBlQW5kUGxhY2VJdGVtKGNwLCBzdHJpbmdPZmZzZXQsIGksIGZvbnREYXRhLCBnbHlw
aEJ1ZmZlcikpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1faXRlbXMuc2l6ZSgpIC0gMTsg
aSsrKSB7Ci0gICAgICAgICAgICBpZiAoIXNoYXBlQW5kUGxhY2VJdGVtKGNwLCBzdHJpbmdPZmZz
ZXQsIGksIGZvbnREYXRhLCBnbHlwaEJ1ZmZlcikpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIFVuaXNjcmliZUNvbnRyb2xsZXI6OnJlc2V0Q29u
dHJvbEFuZFN0YXRlKCkKLXsKLSAgICBtZW1zZXQoJm1fY29udHJvbCwgMCwgc2l6ZW9mKFNDUklQ
VF9DT05UUk9MKSk7Ci0gICAgbWVtc2V0KCZtX3N0YXRlLCAwLCBzaXplb2YoU0NSSVBUX1NUQVRF
KSk7Ci0KLSAgICAvLyBTZXQgdXAgdGhlIGNvcnJlY3QgZGlyZWN0aW9uIGZvciB0aGUgcnVuLgot
ICAgIG1fc3RhdGUudUJpZGlMZXZlbCA9IG1fcnVuLnJ0bCgpOwotICAgIAotICAgIC8vIExvY2sg
dGhlIGNvcnJlY3QgZGlyZWN0aW9uYWwgb3ZlcnJpZGUuCi0gICAgbV9zdGF0ZS5mT3ZlcnJpZGVE
aXJlY3Rpb24gPSBtX3J1bi5kaXJlY3Rpb25hbE92ZXJyaWRlKCk7Ci19Ci0KLWJvb2wgVW5pc2Ny
aWJlQ29udHJvbGxlcjo6c2hhcGVBbmRQbGFjZUl0ZW0oY29uc3QgVUNoYXIqIGNwLCB1bnNpZ25l
ZCBzdHJpbmdPZmZzZXQsIHVuc2lnbmVkIGksIGNvbnN0IEZvbnQqIGZvbnREYXRhLCBHbHlwaEJ1
ZmZlciogZ2x5cGhCdWZmZXIpCi17Ci0gICAgLy8gRGV0ZXJtaW5lIHRoZSBzdHJpbmcgZm9yIHRo
aXMgaXRlbS4KLSAgICBjb25zdCBVQ2hhciogc3RyID0gY3AgKyBtX2l0ZW1zW2ldLmlDaGFyUG9z
OwotICAgIGludCBsZW4gPSBtX2l0ZW1zW2krMV0uaUNoYXJQb3MgLSBtX2l0ZW1zW2ldLmlDaGFy
UG9zOwotICAgIFNDUklQVF9JVEVNIGl0ZW0gPSBtX2l0ZW1zW2ldOwotCi0gICAgLy8gU2V0IHVw
IGJ1ZmZlcnMgdG8gaG9sZCB0aGUgcmVzdWx0cyBvZiBzaGFwaW5nIHRoZSBpdGVtLgotICAgIFZl
Y3RvcjxXT1JEPiBnbHlwaHM7Ci0gICAgVmVjdG9yPFdPUkQ+IGNsdXN0ZXJzOwotICAgIFZlY3Rv
cjxTQ1JJUFRfVklTQVRUUj4gdmlzdWFsQXR0cmlidXRlczsKLSAgICBjbHVzdGVycy5yZXNpemUo
bGVuKTsKLSAgICAgCi0gICAgLy8gU2hhcGUgdGhlIGl0ZW0uCi0gICAgLy8gVGhlIHJlY29tbWVu
ZGVkIHNpemUgZm9yIHRoZSBnbHlwaCBidWZmZXIgaXMgMS41ICogdGhlIGNoYXJhY3RlciBsZW5n
dGggKyAxNiBpbiB0aGUgdW5pc2NyaWJlIGRvY3MuCi0gICAgLy8gQXBwYXJlbnRseSB0aGlzIGlz
IGEgZ29vZCBzaXplIHRvIGF2b2lkIGhhdmluZyB0byBtYWtlIHJlcGVhdGVkIGNhbGxzIHRvIFNj
cmlwdFNoYXBlLgotICAgIGdseXBocy5yZXNpemUoMS41ICogbGVuICsgMTYpOwotICAgIHZpc3Vh
bEF0dHJpYnV0ZXMucmVzaXplKGdseXBocy5zaXplKCkpOwotCi0gICAgaWYgKCFzaGFwZShzdHIs
IGxlbiwgaXRlbSwgZm9udERhdGEsIGdseXBocywgY2x1c3RlcnMsIHZpc3VhbEF0dHJpYnV0ZXMp
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIFZlY3RvcjxPcHRpb25hbDx1bnNpZ25lZD4+
IHN0cmluZ09mZnNldHMoZ2x5cGhzLnNpemUoKSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGxlbjsgKytpKSB7Ci0gICAgICAgIGlmIChzdHJpbmdPZmZzZXRzW2NsdXN0ZXJzW2ldXSkK
LSAgICAgICAgICAgIHN0cmluZ09mZnNldHNbY2x1c3RlcnNbaV1dID0gc3RkOjptaW4oKnN0cmlu
Z09mZnNldHNbY2x1c3RlcnNbaV1dLCBpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3Ry
aW5nT2Zmc2V0c1tjbHVzdGVyc1tpXV0gPSBpOwotICAgIH0KLQotICAgIC8vIFdlIG5vdyBoYXZl
IGEgY29sbGVjdGlvbiBvZiBnbHlwaHMuCi0gICAgVmVjdG9yPEdPRkZTRVQ+IG9mZnNldHM7Ci0g
ICAgVmVjdG9yPGludD4gYWR2YW5jZXM7Ci0gICAgb2Zmc2V0cy5yZXNpemUoZ2x5cGhzLnNpemUo
KSk7Ci0gICAgYWR2YW5jZXMucmVzaXplKGdseXBocy5zaXplKCkpOwotICAgIEhSRVNVTFQgcGxh
Y2VSZXN1bHQgPSBTY3JpcHRQbGFjZSgwLCBmb250RGF0YS0+c2NyaXB0Q2FjaGUoKSwgZ2x5cGhz
LmRhdGEoKSwgZ2x5cGhzLnNpemUoKSwgdmlzdWFsQXR0cmlidXRlcy5kYXRhKCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpdGVtLmEsIGFkdmFuY2VzLmRhdGEoKSwg
b2Zmc2V0cy5kYXRhKCksIDApOwotICAgIGlmIChwbGFjZVJlc3VsdCA9PSBFX1BFTkRJTkcpIHsK
LSAgICAgICAgLy8gVGhlIHNjcmlwdCBjYWNoZSBpc24ndCBwcmltZWQgd2l0aCBlbm91Z2ggaW5m
byB5ZXQuICBXZSBuZWVkIHRvIHNlbGVjdCBvdXIgSEZPTlQgaW50bwotICAgICAgICAvLyBhIERD
IGFuZCBwYXNzIHRoZSBEQyBpbiB0byBTY3JpcHRQbGFjZS4KLSAgICAgICAgSFduZERDIGhkYygw
KTsKLSAgICAgICAgSEZPTlQgaGZvbnQgPSBmb250RGF0YS0+cGxhdGZvcm1EYXRhKCkuaGZvbnQo
KTsKLSAgICAgICAgSEZPTlQgb2xkRm9udCA9IChIRk9OVClTZWxlY3RPYmplY3QoaGRjLCBoZm9u
dCk7Ci0gICAgICAgIHBsYWNlUmVzdWx0ID0gU2NyaXB0UGxhY2UoaGRjLCBmb250RGF0YS0+c2Ny
aXB0Q2FjaGUoKSwgZ2x5cGhzLmRhdGEoKSwgZ2x5cGhzLnNpemUoKSwgdmlzdWFsQXR0cmlidXRl
cy5kYXRhKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJml0ZW0uYSwgYWR2
YW5jZXMuZGF0YSgpLCBvZmZzZXRzLmRhdGEoKSwgMCk7Ci0gICAgICAgIFNlbGVjdE9iamVjdCho
ZGMsIG9sZEZvbnQpOwotICAgIH0KLSAgICAKLSAgICBpZiAoRkFJTEVEKHBsYWNlUmVzdWx0KSB8
fCBnbHlwaHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIENvbnZl
cnQgYWxsIGNoYXJzIHRoYXQgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgc3BhY2VzIHRvIHVzZSB0aGUg
c3BhY2UgZ2x5cGguCi0gICAgLy8gV2UgYWxzbyBjcmVhdGUgYSBtYXAgdGhhdCBhbGxvd3MgdXMg
dG8gcXVpY2tseSBnbyBmcm9tIHNwYWNlIGdseXBocyBiYWNrIHRvIHRoZWlyIGNvcnJlc3BvbmRp
bmcgY2hhcmFjdGVycy4KLSAgICBWZWN0b3I8aW50PiBzcGFjZUNoYXJhY3RlcnMoZ2x5cGhzLnNp
emUoKSk7Ci0gICAgc3BhY2VDaGFyYWN0ZXJzLmZpbGwoLTEpOwotCi0gICAgY29uc3QgZmxvYXQg
Y0xvZ2ljYWxTY2FsZSA9IGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS51c2VHREkoKSA/IDEuMGYg
OiAzMi4wZjsKLSAgICBmbG9hdCBzcGFjZVdpZHRoID0gZm9udERhdGEtPnNwYWNlV2lkdGgoKSAt
IGZvbnREYXRhLT5zeW50aGV0aWNCb2xkT2Zmc2V0KCk7Ci0gICAgdW5zaWduZWQgbG9naWNhbFNw
YWNlV2lkdGggPSBzcGFjZVdpZHRoICogY0xvZ2ljYWxTY2FsZTsKLQotICAgIGZvciAoaW50IGsg
PSAwOyBrIDwgbGVuOyBrKyspIHsKLSAgICAgICAgVUNoYXIgY2ggPSAqKHN0ciArIGspOwotICAg
ICAgICBib29sIHRyZWF0QXNTcGFjZSA9IEZvbnRDYXNjYWRlOjp0cmVhdEFzU3BhY2UoY2gpOwot
ICAgICAgICBib29sIHRyZWF0QXNaZXJvV2lkdGhTcGFjZSA9IEZvbnRDYXNjYWRlOjp0cmVhdEFz
WmVyb1dpZHRoU3BhY2UoY2gpOwotICAgICAgICBpZiAodHJlYXRBc1NwYWNlIHx8IHRyZWF0QXNa
ZXJvV2lkdGhTcGFjZSkgewotICAgICAgICAgICAgLy8gU3Vic3RpdHV0ZSBpbiB0aGUgc3BhY2Ug
Z2x5cGggYXQgdGhlIGFwcHJvcHJpYXRlIHBsYWNlIGluIHRoZSBnbHlwaHMKLSAgICAgICAgICAg
IC8vIGFycmF5LgotICAgICAgICAgICAgZ2x5cGhzW2NsdXN0ZXJzW2tdXSA9IGZvbnREYXRhLT5z
cGFjZUdseXBoKCk7Ci0gICAgICAgICAgICBhZHZhbmNlc1tjbHVzdGVyc1trXV0gPSB0cmVhdEFz
U3BhY2UgPyBsb2dpY2FsU3BhY2VXaWR0aCA6IDA7Ci0gICAgICAgICAgICBpZiAodHJlYXRBc1Nw
YWNlKQotICAgICAgICAgICAgICAgIHNwYWNlQ2hhcmFjdGVyc1tjbHVzdGVyc1trXV0gPSBtX2N1
cnJlbnRDaGFyYWN0ZXIgKyBrICsgaXRlbS5pQ2hhclBvczsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIC8vIFBvcHVsYXRlIG91ciBnbHlwaCBidWZmZXIgd2l0aCB0aGlzIGluZm9ybWF0aW9uLgot
ICAgIGJvb2wgaGFzRXh0cmFTcGFjaW5nID0gbV9mb250LmxldHRlclNwYWNpbmcoKSB8fCBtX2Zv
bnQud29yZFNwYWNpbmcoKSB8fCBtX3BhZGRpbmc7Ci0gICAgCi0gICAgZmxvYXQgbGVmdEVkZ2Ug
PSBtX3J1bldpZHRoU29GYXI7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgZ2x5cGhz
LnNpemUoKTsgaysrKSB7Ci0gICAgICAgIEdseXBoIGdseXBoID0gZ2x5cGhzW2tdOwotICAgICAg
ICBmbG9hdCBhZHZhbmNlID0gYWR2YW5jZXNba10gLyBjTG9naWNhbFNjYWxlOwotICAgICAgICBm
bG9hdCBvZmZzZXRYID0gb2Zmc2V0c1trXS5kdSAvIGNMb2dpY2FsU2NhbGU7Ci0gICAgICAgIGZs
b2F0IG9mZnNldFkgPSBvZmZzZXRzW2tdLmR2IC8gY0xvZ2ljYWxTY2FsZTsKLQotICAgICAgICAv
LyBNYXRjaCBBcHBLaXQncyBydWxlcyBmb3IgdGhlIGludGVnZXIgdnMuIG5vbi1pbnRlZ2VyIHJl
bmRlcmluZyBtb2Rlcy4KLSAgICAgICAgZmxvYXQgcm91bmRlZEFkdmFuY2UgPSByb3VuZGYoYWR2
YW5jZSk7Ci0gICAgICAgIGlmICghZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLmlzU3lzdGVtRm9u
dCgpKSB7Ci0gICAgICAgICAgICBhZHZhbmNlID0gcm91bmRlZEFkdmFuY2U7Ci0gICAgICAgICAg
ICBvZmZzZXRYID0gcm91bmRmKG9mZnNldFgpOwotICAgICAgICAgICAgb2Zmc2V0WSA9IHJvdW5k
ZihvZmZzZXRZKTsKLSAgICAgICAgfQotCi0gICAgICAgIGFkdmFuY2UgKz0gZm9udERhdGEtPnN5
bnRoZXRpY0JvbGRPZmZzZXQoKTsKLQotICAgICAgICBpZiAoaGFzRXh0cmFTcGFjaW5nKSB7Ci0g
ICAgICAgICAgICAvLyBJZiB3ZSdyZSBhIGdseXBoIHdpdGggYW4gYWR2YW5jZSwgZ28gYWhlYWQg
YW5kIGFkZCBpbiBsZXR0ZXItc3BhY2luZy4KLSAgICAgICAgICAgIC8vIFRoYXQgd2F5IHdlIHdl
ZWQgb3V0IHplcm8gd2lkdGggbHVya2Vycy4gIFRoaXMgYmVoYXZpb3IgbWF0Y2hlcyB0aGUgZmFz
dCB0ZXh0IGNvZGUgcGF0aC4KLSAgICAgICAgICAgIGlmIChhZHZhbmNlICYmIG1fZm9udC5sZXR0
ZXJTcGFjaW5nKCkpCi0gICAgICAgICAgICAgICAgYWR2YW5jZSArPSBtX2ZvbnQubGV0dGVyU3Bh
Y2luZygpOwotCi0gICAgICAgICAgICAvLyBIYW5kbGUganVzdGlmaWNhdGlvbiBhbmQgd29yZC1z
cGFjaW5nLgotICAgICAgICAgICAgaW50IGNoYXJhY3RlckluZGV4ID0gc3BhY2VDaGFyYWN0ZXJz
W2tdOwotICAgICAgICAgICAgLy8gY2hhcmFjdGVySW5kZXggaXMgbGVmdCBhdCB0aGUgaW5pdGlh
bCB2YWx1ZSBvZiAtMSBmb3IgZ2x5cGhzIHRoYXQgZG8gbm90IG1hcCBiYWNrIHRvIHRyZWF0ZWQt
YXMtc3BhY2UgY2hhcmFjdGVycy4KLSAgICAgICAgICAgIGlmIChjaGFyYWN0ZXJJbmRleCAhPSAt
MSkgewotICAgICAgICAgICAgICAgIC8vIEFjY291bnQgZm9yIHBhZGRpbmcuIFdlYkNvcmUgdXNl
cyBzcGFjZSBwYWRkaW5nIHRvIGp1c3RpZnkgdGV4dC4KLSAgICAgICAgICAgICAgICAvLyBXZSBk
aXN0cmlidXRlIHRoZSBzcGVjaWZpZWQgcGFkZGluZyBvdmVyIHRoZSBhdmFpbGFibGUgc3BhY2Vz
IGluIHRoZSBydW4uCi0gICAgICAgICAgICAgICAgaWYgKG1fcGFkZGluZykgewotICAgICAgICAg
ICAgICAgICAgICAvLyBVc2UgbGVmdG92ZXIgcGFkZGluZyBpZiBub3QgZXZlbmx5IGRpdmlzaWJs
ZSBieSBudW1iZXIgb2Ygc3BhY2VzLgotICAgICAgICAgICAgICAgICAgICBpZiAobV9wYWRkaW5n
IDwgbV9wYWRQZXJTcGFjZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgYWR2YW5jZSArPSBt
X3BhZGRpbmc7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX3BhZGRpbmcgPSAwOwotICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgbV9wYWRkaW5n
IC09IG1fcGFkUGVyU3BhY2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhZHZhbmNlICs9IG1f
cGFkUGVyU3BhY2U7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICAvLyBBY2NvdW50IGZvciB3b3JkLXNwYWNpbmcuCi0gICAgICAgICAg
ICAgICAgaWYgKGNoYXJhY3RlckluZGV4ID4gMCAmJiBtX2ZvbnQud29yZFNwYWNpbmcoKSkgewot
ICAgICAgICAgICAgICAgICAgICBVQ2hhciBjYW5kaWRhdGVTcGFjZTsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKG1fcnVuLmlzOEJpdCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgY2FuZGlk
YXRlU3BhY2UgPSAqKG1fcnVuLmRhdGE4KGNoYXJhY3RlckluZGV4IC0gMSkpOwotICAgICAgICAg
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGVTcGFjZSA9
ICoobV9ydW4uZGF0YTE2KGNoYXJhY3RlckluZGV4IC0gMSkpOwotCi0gICAgICAgICAgICAgICAg
ICAgIGlmICghRm9udENhc2NhZGU6OnRyZWF0QXNTcGFjZShjYW5kaWRhdGVTcGFjZSkpCi0gICAg
ICAgICAgICAgICAgICAgICAgICBhZHZhbmNlICs9IG1fZm9udC53b3JkU3BhY2luZygpOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIG1fcnVu
V2lkdGhTb0ZhciArPSBhZHZhbmNlOwotCi0gICAgICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIHRh
a2UgdGhlIEdPRkZTRVRTIGZvciBjb21iaW5pbmcgZ2x5cGhzIGFuZCBzdG9yZSB0aGVtIGluIHRo
ZSBnbHlwaCBidWZmZXIKLSAgICAgICAgLy8gYXMgd2VsbCwgc28gdGhhdCB3aGVuIHRoZSB0aW1l
IGNvbWVzIHRvIGRyYXcgdGhvc2UgZ2x5cGhzLCB3ZSBjYW4gYXBwbHkgdGhlIGFwcHJvcHJpYXRl
Ci0gICAgICAgIC8vIHRyYW5zbGF0aW9uLgotICAgICAgICBpZiAoZ2x5cGhCdWZmZXIpIHsKLSAg
ICAgICAgICAgIEdseXBoQnVmZmVyQWR2YW5jZSBvcmlnaW4ob2Zmc2V0WCwgLW9mZnNldFkpOwot
ICAgICAgICAgICAgaWYgKCFnbHlwaEJ1ZmZlci0+YWR2YW5jZXNDb3VudCgpKQotICAgICAgICAg
ICAgICAgIGdseXBoQnVmZmVyLT5zZXRJbml0aWFsQWR2YW5jZShvcmlnaW4pOwotICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIGdseXBoQnVmZmVyLT5leHBhbmRMYXN0QWR2YW5jZShv
cmlnaW4pOwotICAgICAgICAgICAgR2x5cGhCdWZmZXJBZHZhbmNlIGdseXBoQWR2YW5jZSgtb3Jp
Z2luLndpZHRoKCkgKyBhZHZhbmNlLCAtb3JpZ2luLmhlaWdodCgpKTsKLSAgICAgICAgICAgIGds
eXBoQnVmZmVyLT5hZGQoZ2x5cGgsIGZvbnREYXRhLCBnbHlwaEFkdmFuY2UsIHN0cmluZ09mZnNl
dHNba10udmFsdWVPcigwKSArIHN0cmluZ09mZnNldCk7Ci0gICAgICAgIH0KLQotICAgICAgICBG
bG9hdFJlY3QgZ2x5cGhCb3VuZHMgPSBmb250RGF0YS0+Ym91bmRzRm9yR2x5cGgoZ2x5cGgpOwot
ICAgICAgICBnbHlwaEJvdW5kcy5tb3ZlKG1fZ2x5cGhPcmlnaW4ueCgpLCBtX2dseXBoT3JpZ2lu
LnkoKSk7Ci0gICAgICAgIG1fbWluR2x5cGhCb3VuZGluZ0JveFggPSBzdGQ6Om1pbihtX21pbkds
eXBoQm91bmRpbmdCb3hYLCBnbHlwaEJvdW5kcy54KCkpOwotICAgICAgICBtX21heEdseXBoQm91
bmRpbmdCb3hYID0gc3RkOjptYXgobV9tYXhHbHlwaEJvdW5kaW5nQm94WCwgZ2x5cGhCb3VuZHMu
bWF4WCgpKTsKLSAgICAgICAgbV9taW5HbHlwaEJvdW5kaW5nQm94WSA9IHN0ZDo6bWluKG1fbWlu
R2x5cGhCb3VuZGluZ0JveFksIGdseXBoQm91bmRzLnkoKSk7Ci0gICAgICAgIG1fbWF4R2x5cGhC
b3VuZGluZ0JveFkgPSBzdGQ6Om1heChtX21heEdseXBoQm91bmRpbmdCb3hZLCBnbHlwaEJvdW5k
cy5tYXhZKCkpOwotICAgICAgICBtX2dseXBoT3JpZ2luLm1vdmUoYWR2YW5jZSArIG9mZnNldFgs
IC1vZmZzZXRZKTsKLQotICAgICAgICAvLyBNdXRhdGUgdGhlIGdseXBoIGFycmF5IHRvIGNvbnRh
aW4gb3VyIGFsdGVyZWQgYWR2YW5jZXMuCi0gICAgICAgIGlmIChtX2NvbXB1dGluZ09mZnNldFBv
c2l0aW9uKQotICAgICAgICAgICAgYWR2YW5jZXNba10gPSBhZHZhbmNlOwotICAgIH0KLQotICAg
IHdoaWxlIChtX2NvbXB1dGluZ09mZnNldFBvc2l0aW9uICYmIG1fb2Zmc2V0WCA+PSBsZWZ0RWRn
ZSAmJiBtX29mZnNldFggPCBtX3J1bldpZHRoU29GYXIpIHsKLSAgICAgICAgLy8gVGhlIHBvc2l0
aW9uIGlzIHNvbWV3aGVyZSBpbnNpZGUgdGhpcyBydW4uCi0gICAgICAgIGludCB0cmFpbGluZyA9
IDA7Ci0gICAgICAgIEhSRVNVTFQgcmMgPSA6OlNjcmlwdFh0b0NQKG1fb2Zmc2V0WCAtIGxlZnRF
ZGdlLCBjbHVzdGVycy5zaXplKCksIGdseXBocy5zaXplKCksIGNsdXN0ZXJzLmRhdGEoKSwgdmlz
dWFsQXR0cmlidXRlcy5kYXRhKCksCi0gICAgICAgICAgICAgICAgICAgIGFkdmFuY2VzLmRhdGEo
KSwgJml0ZW0uYSwgJm1fb2Zmc2V0UG9zaXRpb24sICZ0cmFpbGluZyk7Ci0gICAgICAgIGlmIChG
QUlMRUQocmMpKSB7Ci0gICAgICAgICAgICBXVEZMb2dBbHdheXMoIlVuaXNjcmliZUNvbnRyb2xs
ZXI6OnNoYXBlQW5kUGxhY2VJdGVtOiBTY3JpcHRYdG9DUCBmYWlsZWQgcmM9JWx4IiwgcmMpOwot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHRyYWlsaW5n
ICYmIG1faW5jbHVkZVBhcnRpYWxHbHlwaHMgJiYgbV9vZmZzZXRQb3NpdGlvbiA8IGxlbiAtIDEp
IHsKLSAgICAgICAgICAgIG1fb2Zmc2V0UG9zaXRpb24gKz0gbV9jdXJyZW50Q2hhcmFjdGVyICsg
bV9pdGVtc1tpXS5pQ2hhclBvczsKLSAgICAgICAgICAgIG1fb2Zmc2V0WCArPSBtX3J1bi5ydGwo
KSA/IC10cmFpbGluZyA6IHRyYWlsaW5nOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
bV9jb21wdXRpbmdPZmZzZXRQb3NpdGlvbiA9IGZhbHNlOwotICAgICAgICAgICAgbV9vZmZzZXRQ
b3NpdGlvbiArPSBtX2N1cnJlbnRDaGFyYWN0ZXIgKyBtX2l0ZW1zW2ldLmlDaGFyUG9zOwotICAg
ICAgICAgICAgaWYgKHRyYWlsaW5nICYmIG1faW5jbHVkZVBhcnRpYWxHbHlwaHMpCi0gICAgICAg
ICAgICAgICBtX29mZnNldFBvc2l0aW9uKys7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBVbmlzY3JpYmVD
b250cm9sbGVyOjpzaGFwZShjb25zdCBVQ2hhciogc3RyLCBpbnQgbGVuLCBTQ1JJUFRfSVRFTSBp
dGVtLCBjb25zdCBGb250KiBmb250RGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgVmVjdG9yPFdPUkQ+JiBnbHlwaHMsIFZlY3RvcjxXT1JEPiYgY2x1c3RlcnMsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxTQ1JJUFRfVklTQVRUUj4mIHZpc3VhbEF0
dHJpYnV0ZXMpCi17Ci0gICAgSFduZERDIGhkYzsKLSAgICBIRk9OVCBvbGRGb250ID0gMDsKLSAg
ICBIUkVTVUxUIHNoYXBlUmVzdWx0ID0gRV9QRU5ESU5HOwotICAgIGludCBnbHlwaENvdW50ID0g
MDsKLQotICAgIGlmICghZm9udERhdGEpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGRv
IHsKLSAgICAgICAgc2hhcGVSZXN1bHQgPSBTY3JpcHRTaGFwZShoZGMsIGZvbnREYXRhLT5zY3Jp
cHRDYWNoZSgpLCB3Y2hhckZyb20oc3RyKSwgbGVuLCBnbHlwaHMuc2l6ZSgpLCAmaXRlbS5hLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBocy5kYXRhKCksIGNsdXN0ZXJz
LmRhdGEoKSwgdmlzdWFsQXR0cmlidXRlcy5kYXRhKCksICZnbHlwaENvdW50KTsKLSAgICAgICAg
aWYgKHNoYXBlUmVzdWx0ID09IEVfUEVORElORykgewotICAgICAgICAgICAgLy8gVGhlIHNjcmlw
dCBjYWNoZSBpc24ndCBwcmltZWQgd2l0aCBlbm91Z2ggaW5mbyB5ZXQuICBXZSBuZWVkIHRvIHNl
bGVjdCBvdXIgSEZPTlQgaW50bwotICAgICAgICAgICAgLy8gYSBEQyBhbmQgcGFzcyB0aGUgREMg
aW4gdG8gU2NyaXB0U2hhcGUuCi0gICAgICAgICAgICBBU1NFUlQoIWhkYyk7Ci0gICAgICAgICAg
ICBoZGMuc2V0SFduZCgwKTsKLSAgICAgICAgICAgIEhGT05UIGhmb250ID0gZm9udERhdGEtPnBs
YXRmb3JtRGF0YSgpLmhmb250KCk7Ci0gICAgICAgICAgICBvbGRGb250ID0gKEhGT05UKVNlbGVj
dE9iamVjdChoZGMsIGhmb250KTsKLSAgICAgICAgfSBlbHNlIGlmIChzaGFwZVJlc3VsdCA9PSBF
X09VVE9GTUVNT1JZKSB7Ci0gICAgICAgICAgICAvLyBOZWVkIHRvIHJlc2l6ZSBvdXIgYnVmZmVy
cy4KLSAgICAgICAgICAgIGdseXBocy5yZXNpemUoZ2x5cGhzLnNpemUoKSAqIDIpOwotICAgICAg
ICAgICAgdmlzdWFsQXR0cmlidXRlcy5yZXNpemUoZ2x5cGhzLnNpemUoKSk7Ci0gICAgICAgIH0K
LSAgICB9IHdoaWxlIChzaGFwZVJlc3VsdCA9PSBFX1BFTkRJTkcgfHwgc2hhcGVSZXN1bHQgPT0g
RV9PVVRPRk1FTU9SWSk7Ci0KLSAgICBpZiAoaGRjKQotICAgICAgICBTZWxlY3RPYmplY3QoaGRj
LCBvbGRGb250KTsKLQotICAgIGlmIChGQUlMRUQoc2hhcGVSZXN1bHQpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBnbHlwaHMuc2hyaW5rKGdseXBoQ291bnQpOwotICAgIHZpc3VhbEF0
dHJpYnV0ZXMuc2hyaW5rKGdseXBoQ291bnQpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLX0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9VbmlzY3Jp
YmVDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vVW5p
c2NyaWJlQ29udHJvbGxlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNDYyNGM3
OWEwOC4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL1VuaXNjcmliZUNvbnRyb2xsZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDkwICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFVuaXNjcmliZUNvbnRyb2xs
ZXJfaAotI2RlZmluZSBVbmlzY3JpYmVDb250cm9sbGVyX2gKLQotI2luY2x1ZGUgIkZvbnRDYXNj
YWRlLmgiCi0jaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKLSNpbmNsdWRlIDx1c3AxMC5oPgotI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBVbmlz
Y3JpYmVDb250cm9sbGVyIHsKLXB1YmxpYzoKLSAgICBVbmlzY3JpYmVDb250cm9sbGVyKGNvbnN0
IEZvbnRDYXNjYWRlKiwgY29uc3QgVGV4dFJ1biYsIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxs
YmFja0ZvbnRzID0gMCk7Ci0KLSAgICAvLyBBZHZhbmNlIGFuZCBtZWFzdXJlL3BsYWNlIHVwIHRv
IHRoZSBzcGVjaWZpZWQgY2hhcmFjdGVyLgotICAgIHZvaWQgYWR2YW5jZSh1bnNpZ25lZCB0bywg
R2x5cGhCdWZmZXIqID0gMCk7Ci0KLSAgICAvLyBDb21wdXRlIHRoZSBjaGFyYWN0ZXIgb2Zmc2V0
IGZvciBhIGdpdmVuIHggY29vcmRpbmF0ZS4KLSAgICBpbnQgb2Zmc2V0Rm9yUG9zaXRpb24oaW50
IHgsIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpOwotCi0gICAgLy8gUmV0dXJucyB0aGUgd2lk
dGggb2YgZXZlcnl0aGluZyB3ZSd2ZSBjb25zdW1lZCBzbyBmYXIuCi0gICAgZmxvYXQgcnVuV2lk
dGhTb0ZhcigpIGNvbnN0IHsgcmV0dXJuIG1fcnVuV2lkdGhTb0ZhcjsgfQotCi0gICAgZmxvYXQg
bWluR2x5cGhCb3VuZGluZ0JveFgoKSBjb25zdCB7IHJldHVybiBtX21pbkdseXBoQm91bmRpbmdC
b3hYOyB9Ci0gICAgZmxvYXQgbWF4R2x5cGhCb3VuZGluZ0JveFgoKSBjb25zdCB7IHJldHVybiBt
X21heEdseXBoQm91bmRpbmdCb3hYOyB9Ci0gICAgZmxvYXQgbWluR2x5cGhCb3VuZGluZ0JveFko
KSBjb25zdCB7IHJldHVybiBtX21pbkdseXBoQm91bmRpbmdCb3hZOyB9Ci0gICAgZmxvYXQgbWF4
R2x5cGhCb3VuZGluZ0JveFkoKSBjb25zdCB7IHJldHVybiBtX21heEdseXBoQm91bmRpbmdCb3hZ
OyB9Ci0KLXByaXZhdGU6ICAgIAotICAgIHZvaWQgcmVzZXRDb250cm9sQW5kU3RhdGUoKTsKLQot
ICAgIHZvaWQgaXRlbWl6ZVNoYXBlQW5kUGxhY2UoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBzdHJp
bmdPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgRm9udCosIEdseXBoQnVmZmVyKik7Ci0g
ICAgYm9vbCBzaGFwZUFuZFBsYWNlSXRlbShjb25zdCBVQ2hhciosIHVuc2lnbmVkIHN0cmluZ09m
ZnNldCwgdW5zaWduZWQgaW5kZXgsIGNvbnN0IEZvbnQqLCBHbHlwaEJ1ZmZlciopOwotICAgIGJv
b2wgc2hhcGUoY29uc3QgVUNoYXIqIHN0ciwgaW50IGxlbiwgU0NSSVBUX0lURU0sIGNvbnN0IEZv
bnQqLAotICAgICAgICAgICAgICAgVmVjdG9yPFdPUkQ+JiBnbHlwaHMsIFZlY3RvcjxXT1JEPiYg
Y2x1c3RlcnMsCi0gICAgICAgICAgICAgICBWZWN0b3I8U0NSSVBUX1ZJU0FUVFI+JiB2aXN1YWxB
dHRyaWJ1dGVzKTsKLQotICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBtX2ZvbnQ7Ci0gICAgY29uc3Qg
VGV4dFJ1biYgbV9ydW47Ci0gICAgSGFzaFNldDxjb25zdCBGb250Kj4qIG1fZmFsbGJhY2tGb250
czsKLSAgICBGbG9hdFBvaW50IG1fZ2x5cGhPcmlnaW47Ci0gICAgZmxvYXQgbV9taW5HbHlwaEJv
dW5kaW5nQm94WDsKLSAgICBmbG9hdCBtX21heEdseXBoQm91bmRpbmdCb3hYOwotICAgIGZsb2F0
IG1fbWluR2x5cGhCb3VuZGluZ0JveFk7Ci0gICAgZmxvYXQgbV9tYXhHbHlwaEJvdW5kaW5nQm94
WTsKLQotICAgIFNDUklQVF9DT05UUk9MIG1fY29udHJvbDsKLSAgICBTQ1JJUFRfU1RBVEUgbV9z
dGF0ZTsKLSAgICBWZWN0b3I8U0NSSVBUX0lURU0+IG1faXRlbXM7Ci0gCi0gICAgdW5zaWduZWQg
bV9jdXJyZW50Q2hhcmFjdGVyOwotICAgIGludCBtX2VuZDsKLQotICAgIGZsb2F0IG1fcnVuV2lk
dGhTb0ZhcjsKLSAgICBmbG9hdCBtX3BhZGRpbmc7Ci0gICAgZmxvYXQgbV9wYWRQZXJTcGFjZTsK
LQotICAgIGJvb2wgbV9jb21wdXRpbmdPZmZzZXRQb3NpdGlvbjsKLSAgICBib29sIG1faW5jbHVk
ZVBhcnRpYWxHbHlwaHM7Ci0gICAgZmxvYXQgbV9vZmZzZXRYOwotICAgIGludCBtX29mZnNldFBv
c2l0aW9uOwotfTsKLQotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYkNvcmUvQ29tcGxleFRleHRDb250cm9sbGVyLmNwcCBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViQ29yZS9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwCmluZGV4IDkzZmU5
MGU5ZDlkLi45MjY4ZWZiNjgzYiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJDb3JlL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJDb3JlL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAKQEAgLTI1LDggKzI1
LDYgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogCi0jaWYgIVBMQVRGT1JNKFdJTikKLQogI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luaXRpYWxpemVUaHJlYWRpbmcuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL0NvbXBsZXhUZXh0Q29udHJvbGxlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRm9udENh
c2NhZGUuaD4KQEAgLTM2Nyw1ICszNjUsMyBAQCBURVNUX0YoQ29tcGxleFRleHRDb250cm9sbGVy
VGVzdCwgVG90YWxXaWR0aFdpdGhKdXN0aWZpY2F0aW9uKQogfQogCiB9Ci0KLSNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>385870</attachid>
            <date>2019-12-17 02:18:08 -0800</date>
            <delta_ts>2019-12-17 17:59:53 -0800</delta_ts>
            <desc>WIP patch</desc>
            <filename>complex8.diff</filename>
            <type>text/plain</type>
            <size>44854</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luLmNtYWtlIGIvU291cmNlL1dl
YkNvcmUvUGxhdGZvcm1XaW4uY21ha2UKaW5kZXggZDFmZDRlYjEyZGQuLmRlODZmZDNhMDQxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbi5jbWFrZQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9QbGF0Zm9ybVdpbi5jbWFrZQpAQCAtNTEsNiArNTEsNyBAQCBsaXN0KEFQUEVORCBX
ZWJDb3JlX1NPVVJDRVMKIAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db2xvckRpcmVjdDJE
LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db21wbGV4VGV4dENvbnRyb2xsZXJEaXJl
Y3RXcml0ZS5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vQ29tcGxleFRleHRDb250cm9s
bGVyVW5pc2NyaWJlLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9ESUJQaXhlbERhdGEu
Y3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Zsb2F0UG9pbnREaXJlY3QyRC5jcHAKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRmxvYXRSZWN0RGlyZWN0MkQuY3BwCkBAIC02OSw3ICs3
MCw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9TaW1wbGVGb250RGF0YVdpbi5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vVHJh
bnNmb3JtYXRpb25NYXRyaXhEaXJlY3QyRC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
VHJhbnNmb3JtYXRpb25NYXRyaXhXaW4uY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1Vu
aXNjcmliZUNvbnRyb2xsZXIuY3BwCiAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL3dpbi9Eb3dubG9h
ZEJ1bmRsZVdpbi5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL3dpbi9OZXR3b3JrU3RhdGVOb3Rp
Zmllcldpbi5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwCmluZGV4IDg0NzI4NDllYWQwLi42YjBhMGFj
YTU5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29tcGxl
eFRleHRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwCkBAIC00MywzMyArNDMsNiBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLSNpZiBQTEFURk9STShXSU4pICYmICFVU0UoRElSRUNUMkQpCi0KLWNs
YXNzIFRleHRMYXlvdXQgewotfTsKLQotdm9pZCBUZXh0TGF5b3V0RGVsZXRlcjo6b3BlcmF0b3Io
KShUZXh0TGF5b3V0KikgY29uc3QKLXsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPFRleHRMYXlvdXQs
IFRleHRMYXlvdXREZWxldGVyPiBGb250Q2FzY2FkZTo6Y3JlYXRlTGF5b3V0KFJlbmRlclRleHQm
LCBmbG9hdCwgYm9vbCkgY29uc3QKLXsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotZmxvYXQg
Rm9udENhc2NhZGU6OndpZHRoKFRleHRMYXlvdXQmLCB1bnNpZ25lZCwgdW5zaWduZWQsIEhhc2hT
ZXQ8Y29uc3QgRm9udCo+KikKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1
cm4gMDsKLX0KLQotdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmNvbGxlY3RDb21wbGV4VGV4
dFJ1bnNGb3JDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQsIHVuc2lnbmVkLCBjb25z
dCBGb250KikKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotI2Vsc2UKLQogY2xh
c3MgVGV4dExheW91dCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CkBA
IC0yMTYsNyArMTg5LDggQEAgdW5zaWduZWQgQ29tcGxleFRleHRDb250cm9sbGVyOjpvZmZzZXRG
b3JQb3NpdGlvbihmbG9hdCBoLCBib29sIGluY2x1ZGVQYXJ0aWFsR2wKIAogICAgICAgICAgICAg
ICAgIC8vIEZJWE1FOiBJbnN0ZWFkIG9mIGRpdmlkaW5nIHRoZSBnbHlwaCdzIGFkdmFuY2UgZXF1
YWxseSBiZXR3ZWVuIHRoZSBjaGFyYWN0ZXJzLCB0aGlzCiAgICAgICAgICAgICAgICAgLy8gY291
bGQgdXNlIHRoZSBnbHlwaCdzICJsaWdhdHVyZSBjYXJldHMiLiBUaGlzIGlzIGF2YWlsYWJsZSBp
biBDb3JlVGV4dCB2aWEgQ1RGb250R2V0TGlnYXR1cmVDYXJldFBvc2l0aW9ucygpLgotICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGhpdEluZGV4ID0gaGl0R2x5cGhTdGFydCArIChoaXRHbHlwaEVu
ZCAtIGhpdEdseXBoU3RhcnQpICogKG1fcnVuLmx0cigpID8geCAvIGFkanVzdGVkQWR2YW5jZSA6
IDEgLSB4IC8gYWRqdXN0ZWRBZHZhbmNlKTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBoaXRQ
b3MgPSAoaGl0R2x5cGhFbmQgLSBoaXRHbHlwaFN0YXJ0KSAqICh4IC8gYWRqdXN0ZWRBZHZhbmNl
KTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBoaXRJbmRleCA9ICBtX3J1bi5sdHIoKSA/IGhp
dEdseXBoU3RhcnQgKyBoaXRQb3MgOiBoaXRHbHlwaEVuZCAtIGhpdFBvcyAtIDE7CiAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgc3RyaW5nTGVuZ3RoID0gY29tcGxleFRleHRSdW4uc3RyaW5nTGVu
Z3RoKCk7CiAgICAgICAgICAgICAgICAgQ2FjaGVkVGV4dEJyZWFrSXRlcmF0b3IgY3Vyc29yUG9z
aXRpb25JdGVyYXRvcihTdHJpbmdWaWV3KGNvbXBsZXhUZXh0UnVuLmNoYXJhY3RlcnMoKSwgc3Ry
aW5nTGVuZ3RoKSwgVGV4dEJyZWFrSXRlcmF0b3I6Ok1vZGU6OkNhcmV0LCBudWxsQXRvbSgpKTsK
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjbHVzdGVyU3RhcnQ7CkBAIC03ODUsNyArNzU5LDgg
QEAgdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmFkanVzdEdseXBoc0FuZEFkdmFuY2VzKCkK
ICAgICAgICAgICAgICAgICBpZiAocnVuRm9yYmlkc1RyYWlsaW5nRXhwYW5zaW9uKQogICAgICAg
ICAgICAgICAgICAgICBmb3JiaWRUcmFpbGluZ0V4cGFuc2lvbiA9IG1fcnVuLmx0cigpID8gaXNM
YXN0Q2hhcmFjdGVyIDogaXNGaXJzdENoYXJhY3RlcjsKICAgICAgICAgICAgICAgICAvLyBIYW5k
bGUganVzdGlmaWNhdGlvbiBhbmQgd29yZC1zcGFjaW5nLgotICAgICAgICAgICAgICAgIGJvb2wg
aWRlb2dyYXBoID0gRm9udENhc2NhZGU6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woY2gpOworICAg
ICAgICAgICAgICAgIHN0YXRpYyBib29sIGV4cGFuZEFyb3VuZElkZW9ncmFwaHMgPSBGb250Q2Fz
Y2FkZTo6Y2FuRXhwYW5kQXJvdW5kSWRlb2dyYXBoc0luQ29tcGxleFRleHQoKTsKKyAgICAgICAg
ICAgICAgICBib29sIGlkZW9ncmFwaCA9IGV4cGFuZEFyb3VuZElkZW9ncmFwaHMgJiYgRm9udENh
c2NhZGU6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woY2gpOwogICAgICAgICAgICAgICAgIGlmICh0
cmVhdEFzU3BhY2UgfHwgaWRlb2dyYXBoIHx8IGZvcmNlTGVhZGluZ0V4cGFuc2lvbiB8fCBmb3Jj
ZVRyYWlsaW5nRXhwYW5zaW9uKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIERpc3RyaWJ1dGUg
dGhlIHJ1bidzIHRvdGFsIGV4cGFuc2lvbiBldmVubHkgb3ZlciBhbGwgZXhwYW5zaW9uIG9wcG9y
dHVuaXRpZXMgaW4gdGhlIHJ1bi4KICAgICAgICAgICAgICAgICAgICAgaWYgKG1fZXhwYW5zaW9u
KSB7CkBAIC04OTMsNiArODY4LDQgQEAgQ29tcGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4
dFJ1bjo6Q29tcGxleFRleHRSdW4oY29uc3QgVmVjdG9yPEZsb2F0U2l6ZT4mIGEKIHsKIH0KIAot
I2VuZGlmCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcAppbmRleCA0MTI3NDdhY2Y4Yy4uMjk0YTdj
NDM4NjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRD
YXNjYWRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2Fz
Y2FkZS5jcHAKQEAgLTQxLDEwICs0MSw2IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0cmlu
Z0hhc2guaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKLSNpZiBQTEFU
Rk9STShXSU4pICYmICFVU0UoRElSRUNUMkQpCi0jaW5jbHVkZSAiVW5pc2NyaWJlQ29udHJvbGxl
ci5oIgotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIFdU
Rjo6VW5pY29kZTsKQEAgLTM1MCwxNSArMzQ2LDYgQEAgZmxvYXQgRm9udENhc2NhZGU6OndpZHRo
T2ZUZXh0UmFuZ2UoY29uc3QgVGV4dFJ1biYgcnVuLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZAog
CiAgICAgYXV0byBjb2RlUGF0aFRvVXNlID0gY29kZVBhdGgocnVuKTsKICAgICBpZiAoY29kZVBh
dGhUb1VzZSA9PSBDb21wbGV4KSB7Ci0jaWYgUExBVEZPUk0oV0lOKSAmJiAhVVNFKERJUkVDVDJE
KQotICAgICAgICBVbmlzY3JpYmVDb250cm9sbGVyIGl0KHRoaXMsIHJ1bik7Ci0gICAgICAgIGl0
LmFkdmFuY2UoZnJvbSk7Ci0gICAgICAgIG9mZnNldEJlZm9yZVJhbmdlID0gaXQucnVuV2lkdGhT
b0ZhcigpOwotICAgICAgICBpdC5hZHZhbmNlKHRvKTsKLSAgICAgICAgb2Zmc2V0QWZ0ZXJSYW5n
ZSA9IGl0LnJ1bldpZHRoU29GYXIoKTsKLSAgICAgICAgaXQuYWR2YW5jZSh0byk7Ci0gICAgICAg
IHRvdGFsV2lkdGggPSBpdC5ydW5XaWR0aFNvRmFyKCk7Ci0jZWxzZQogICAgICAgICBDb21wbGV4
VGV4dENvbnRyb2xsZXIgY29tcGxleEl0ZXJhdG9yKCp0aGlzLCBydW4sIGZhbHNlLCBmYWxsYmFj
a0ZvbnRzKTsKICAgICAgICAgY29tcGxleEl0ZXJhdG9yLmFkdmFuY2UoZnJvbSwgbnVsbHB0ciwg
SW5jbHVkZVBhcnRpYWxHbHlwaHMsIGZhbGxiYWNrRm9udHMpOwogICAgICAgICBvZmZzZXRCZWZv
cmVSYW5nZSA9IGNvbXBsZXhJdGVyYXRvci5ydW5XaWR0aFNvRmFyKCk7CkBAIC0zNjYsNyArMzUz
LDYgQEAgZmxvYXQgRm9udENhc2NhZGU6OndpZHRoT2ZUZXh0UmFuZ2UoY29uc3QgVGV4dFJ1biYg
cnVuLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZAogICAgICAgICBvZmZzZXRBZnRlclJhbmdlID0g
Y29tcGxleEl0ZXJhdG9yLnJ1bldpZHRoU29GYXIoKTsKICAgICAgICAgY29tcGxleEl0ZXJhdG9y
LmFkdmFuY2UocnVuLmxlbmd0aCgpLCBudWxscHRyLCBJbmNsdWRlUGFydGlhbEdseXBocywgZmFs
bGJhY2tGb250cyk7CiAgICAgICAgIHRvdGFsV2lkdGggPSBjb21wbGV4SXRlcmF0b3IucnVuV2lk
dGhTb0ZhcigpOwotI2VuZGlmCiAgICAgfSBlbHNlIHsKICAgICAgICAgV2lkdGhJdGVyYXRvciBz
aW1wbGVJdGVyYXRvcih0aGlzLCBydW4sIGZhbGxiYWNrRm9udHMpOwogICAgICAgICBzaW1wbGVJ
dGVyYXRvci5hZHZhbmNlKGZyb20sIG51bGxwdHIpOwpAQCAtMTU0NSw3ICsxNTMxLDYgQEAgZmxv
YXQgRm9udENhc2NhZGU6OmZsb2F0V2lkdGhGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mIHJ1
biwgSGFzaFNldDxjb25zdCBGb24KICAgICByZXR1cm4gaXQubV9ydW5XaWR0aFNvRmFyOwogfQog
Ci0jaWYgIVBMQVRGT1JNKFdJTikgfHwgVVNFKERJUkVDVDJEKQogZmxvYXQgRm9udENhc2NhZGU6
OmZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29u
c3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93KSBj
b25zdAogewogICAgIENvbXBsZXhUZXh0Q29udHJvbGxlciBjb250cm9sbGVyKCp0aGlzLCBydW4s
IHRydWUsIGZhbGxiYWNrRm9udHMpOwpAQCAtMTU1Nyw3ICsxNTQyLDYgQEAgZmxvYXQgRm9udENh
c2NhZGU6OmZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hT
ZXQ8Y29uc3QgRm8KICAgICB9CiAgICAgcmV0dXJuIGNvbnRyb2xsZXIudG90YWxXaWR0aCgpOwog
fQotI2VuZGlmCiAKIHZvaWQgRm9udENhc2NhZGU6OmFkanVzdFNlbGVjdGlvblJlY3RGb3JTaW1w
bGVUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgdW5z
aWduZWQgZnJvbSwgdW5zaWduZWQgdG8pIGNvbnN0CiB7CkBAIC0xNTc4LDcgKzE1NjIsNiBAQCB2
b2lkIEZvbnRDYXNjYWRlOjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9yU2ltcGxlVGV4dChjb25zdCBU
ZXh0UnVuJiBydW4sIExheW91dFJlYwogICAgIHNlbGVjdGlvblJlY3Quc2V0V2lkdGgoTGF5b3V0
VW5pdDo6ZnJvbUZsb2F0Q2VpbChhZnRlcldpZHRoIC0gYmVmb3JlV2lkdGgpKTsKIH0KIAotI2lm
ICFQTEFURk9STShXSU4pIHx8IFVTRShESVJFQ1QyRCkKIHZvaWQgRm9udENhc2NhZGU6OmFkanVz
dFNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIExheW91dFJl
Y3QmIHNlbGVjdGlvblJlY3QsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvKSBjb25zdAogewog
ICAgIENvbXBsZXhUZXh0Q29udHJvbGxlciBjb250cm9sbGVyKCp0aGlzLCBydW4pOwpAQCAtMTU5
Myw3ICsxNTc2LDYgQEAgdm9pZCBGb250Q2FzY2FkZTo6YWRqdXN0U2VsZWN0aW9uUmVjdEZvckNv
bXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgTGF5b3V0UmUKICAgICAgICAgc2VsZWN0aW9u
UmVjdC5tb3ZlKGJlZm9yZVdpZHRoLCAwKTsKICAgICBzZWxlY3Rpb25SZWN0LnNldFdpZHRoKExh
eW91dFVuaXQ6OmZyb21GbG9hdENlaWwoYWZ0ZXJXaWR0aCAtIGJlZm9yZVdpZHRoKSk7CiB9Ci0j
ZW5kaWYKIAogaW50IEZvbnRDYXNjYWRlOjpvZmZzZXRGb3JQb3NpdGlvbkZvclNpbXBsZVRleHQo
Y29uc3QgVGV4dFJ1biYgcnVuLCBmbG9hdCB4LCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBj
b25zdAogewpAQCAtMTYzOCwxMyArMTYyMCwxMSBAQCBpbnQgRm9udENhc2NhZGU6Om9mZnNldEZv
clBvc2l0aW9uRm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGZsb2F0IHgsIGJvbwog
ICAgIHJldHVybiBvZmZzZXQ7CiB9CiAKLSNpZiAhUExBVEZPUk0oV0lOKSB8fCBVU0UoRElSRUNU
MkQpCiBpbnQgRm9udENhc2NhZGU6Om9mZnNldEZvclBvc2l0aW9uRm9yQ29tcGxleFRleHQoY29u
c3QgVGV4dFJ1biYgcnVuLCBmbG9hdCB4LCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25z
dAogewogICAgIENvbXBsZXhUZXh0Q29udHJvbGxlciBjb250cm9sbGVyKCp0aGlzLCBydW4pOwog
ICAgIHJldHVybiBjb250cm9sbGVyLm9mZnNldEZvclBvc2l0aW9uKHgsIGluY2x1ZGVQYXJ0aWFs
R2x5cGhzKTsKIH0KLSNlbmRpZgogCiAjaWYgIVBMQVRGT1JNKENPQ09BKSAmJiAhVVNFKEhBUkZC
VVpaKQogLy8gRklYTUU6IFVuaWZ5IHRoaXMgd2l0aCB0aGUgbWFjT1MgYW5kIGlPUyBpbXBsZW1l
bnRhdGlvbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRDYXNjYWRlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2Fk
ZS5oCmluZGV4IDJiY2RmMTA2ZTZjLi44OTdjZDk3OGY4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5oCkBAIC0yMjksNiArMjI5LDcgQEAgcHJp
dmF0ZToKICAgICBzdGF0aWMgc3RkOjpwYWlyPHVuc2lnbmVkLCBib29sPiBleHBhbnNpb25PcHBv
cnR1bml0eUNvdW50SW50ZXJuYWwoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBsZW5ndGgsIFRleHRE
aXJlY3Rpb24sIEV4cGFuc2lvbkJlaGF2aW9yKTsKIAogICAgIGZyaWVuZCBzdHJ1Y3QgV2lkdGhJ
dGVyYXRvcjsKKyAgICBmcmllbmQgY2xhc3MgQ29tcGxleFRleHRDb250cm9sbGVyOwogCiBwdWJs
aWM6CiAjaWYgRU5BQkxFKFRFWFRfQVVUT1NJWklORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db21wbGV4VGV4dENvbnRyb2xsZXJVbmlzY3JpYmUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbXBsZXhUZXh0Q29u
dHJvbGxlclVuaXNjcmliZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAuLjc4NmM0M2ZmNTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0NvbXBsZXhUZXh0Q29udHJvbGxlclVuaXNjcmliZS5jcHAKQEAgLTAs
MCArMSwxODggQEAKKy8qCisqIENvcHlyaWdodCAoQykgMjAxNy0yMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKiBhcmUgbWV0
OgorKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04KKyogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyogU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ29tcGxleFRleHRDb250cm9sbGVy
LmgiCisKKyNpZiAhVVNFKERJUkVDVDJEKQorCisjaW5jbHVkZSAiRm9udENhY2hlLmgiCisjaW5j
bHVkZSAiRm9udENhc2NhZGUuaCIKKyNpbmNsdWRlICJIV25kREMuaCIKKyNpbmNsdWRlIDx1c3Ax
MC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBib29sIHNoYXBlQnlVbmlzY3Jp
YmUoY29uc3QgVUNoYXIqIHN0ciwgaW50IGxlbiwgU0NSSVBUX0lURU0gaXRlbSwgY29uc3QgRm9u
dCogZm9udERhdGEsCisgICAgVmVjdG9yPFdPUkQ+JiBnbHlwaHMsIFZlY3RvcjxXT1JEPiYgY2x1
c3RlcnMsCisgICAgVmVjdG9yPFNDUklQVF9WSVNBVFRSPiYgdmlzdWFsQXR0cmlidXRlcykKK3sK
KyAgICBIV25kREMgaGRjOworICAgIEhGT05UIG9sZEZvbnQgPSAwOworICAgIEhSRVNVTFQgc2hh
cGVSZXN1bHQgPSBFX1BFTkRJTkc7CisgICAgaW50IGdseXBoQ291bnQgPSAwOworCisgICAgaWYg
KCFmb250RGF0YSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZG8geworICAgICAgICBz
aGFwZVJlc3VsdCA9IFNjcmlwdFNoYXBlKGhkYywgZm9udERhdGEtPnNjcmlwdENhY2hlKCksIHdj
aGFyRnJvbShzdHIpLCBsZW4sIGdseXBocy5zaXplKCksICZpdGVtLmEsCisgICAgICAgICAgICBn
bHlwaHMuZGF0YSgpLCBjbHVzdGVycy5kYXRhKCksIHZpc3VhbEF0dHJpYnV0ZXMuZGF0YSgpLCAm
Z2x5cGhDb3VudCk7CisgICAgICAgIGlmIChzaGFwZVJlc3VsdCA9PSBFX1BFTkRJTkcpIHsKKyAg
ICAgICAgICAgIC8vIFRoZSBzY3JpcHQgY2FjaGUgaXNuJ3QgcHJpbWVkIHdpdGggZW5vdWdoIGlu
Zm8geWV0LiBXZSBuZWVkIHRvIHNlbGVjdCBvdXIgSEZPTlQgaW50bworICAgICAgICAgICAgLy8g
YSBEQyBhbmQgcGFzcyB0aGUgREMgaW4gdG8gU2NyaXB0U2hhcGUuCisgICAgICAgICAgICBBU1NF
UlQoIWhkYyk7CisgICAgICAgICAgICBoZGMuc2V0SFduZCgwKTsKKyAgICAgICAgICAgIEhGT05U
IGhmb250ID0gZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLmhmb250KCk7CisgICAgICAgICAgICBv
bGRGb250ID0gKEhGT05UKVNlbGVjdE9iamVjdChoZGMsIGhmb250KTsKKyAgICAgICAgfSBlbHNl
IGlmIChzaGFwZVJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKSB7CisgICAgICAgICAgICAvLyBOZWVk
IHRvIHJlc2l6ZSBvdXIgYnVmZmVycy4KKyAgICAgICAgICAgIGdseXBocy5yZXNpemUoZ2x5cGhz
LnNpemUoKSAqIDIpOworICAgICAgICAgICAgdmlzdWFsQXR0cmlidXRlcy5yZXNpemUoZ2x5cGhz
LnNpemUoKSk7CisgICAgICAgIH0KKyAgICB9IHdoaWxlIChzaGFwZVJlc3VsdCA9PSBFX1BFTkRJ
TkcgfHwgc2hhcGVSZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7CisKKyAgICBpZiAoaGRjKQorICAg
ICAgICBTZWxlY3RPYmplY3QoaGRjLCBvbGRGb250KTsKKworICAgIGlmIChGQUlMRUQoc2hhcGVS
ZXN1bHQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBnbHlwaHMuc2hyaW5rKGdseXBo
Q291bnQpOworICAgIHZpc3VhbEF0dHJpYnV0ZXMuc2hyaW5rKGdseXBoQ291bnQpOworCisgICAg
cmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjpjb2xsZWN0Q29t
cGxleFRleHRSdW5zRm9yQ2hhcmFjdGVycyhjb25zdCBVQ2hhciogY3AsIHVuc2lnbmVkIHN0cmlu
Z0xlbmd0aCwgdW5zaWduZWQgc3RyaW5nTG9jYXRpb24sIGNvbnN0IEZvbnQqIGZvbnQpCit7Cisg
ICAgaWYgKCFmb250KSB7CisgICAgICAgIC8vIENyZWF0ZSBhIHJ1biBvZiBtaXNzaW5nIGdseXBo
cyBmcm9tIHRoZSBwcmltYXJ5IGZvbnQuCisgICAgICAgIG1fY29tcGxleFRleHRSdW5zLmFwcGVu
ZChDb21wbGV4VGV4dFJ1bjo6Y3JlYXRlKG1fZm9udC5wcmltYXJ5Rm9udCgpLCBjcCwgc3RyaW5n
TG9jYXRpb24sIHN0cmluZ0xlbmd0aCwgMCwgc3RyaW5nTGVuZ3RoLCBtX3J1bi5sdHIoKSkpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgVmVjdG9yPFNDUklQVF9JVEVNPiBpdGVtcyg2
KTsKKyAgICBpbnQgbnVtSXRlbXMgPSAwOworICAgIGZvciAoOzspIHsKKyAgICAgICAgU0NSSVBU
X0NPTlRST0wgY29udHJvbCB7IH07CisgICAgICAgIFNDUklQVF9TVEFURSBzdGF0ZSB7IH07Cisg
ICAgICAgIC8vIFNldCB1cCB0aGUgY29ycmVjdCBkaXJlY3Rpb24gZm9yIHRoZSBydW4uCisgICAg
ICAgIHN0YXRlLnVCaWRpTGV2ZWwgPSBtX3J1bi5ydGwoKTsKKyAgICAgICAgLy8gTG9jayB0aGUg
Y29ycmVjdCBkaXJlY3Rpb25hbCBvdmVycmlkZS4KKyAgICAgICAgc3RhdGUuZk92ZXJyaWRlRGly
ZWN0aW9uID0gbV9ydW4uZGlyZWN0aW9uYWxPdmVycmlkZSgpOworCisgICAgICAgIC8vIFNjcmlw
dEl0ZW1pemUgbWF5IHdyaXRlIChjTWF4SXRlbXMgKyAxKSBTQ1JJUFRfSVRFTS4KKyAgICAgICAg
SFJFU1VMVCBociA9IFNjcmlwdEl0ZW1pemUod2NoYXJGcm9tKGNwKSwgc3RyaW5nTGVuZ3RoLCBp
dGVtcy5zaXplKCkgLSAxLCAmY29udHJvbCwgJnN0YXRlLCBpdGVtcy5kYXRhKCksICZudW1JdGVt
cyk7CisgICAgICAgIGlmIChociAhPSBFX09VVE9GTUVNT1JZKSB7CisgICAgICAgICAgICBBU1NF
UlQoU1VDQ0VFREVEKGhyKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBpdGVtcy5yZXNpemUoaXRlbXMuc2l6ZSgpICogMik7CisgICAgfQorICAgIGl0ZW1zLnJlc2l6
ZShudW1JdGVtcyArIDEpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1JdGVtczsgaSsr
KSB7CisgICAgICAgIC8vIERldGVybWluZSB0aGUgc3RyaW5nIGZvciB0aGlzIGl0ZW0uCisgICAg
ICAgIGNvbnN0IFVDaGFyKiBzdHIgPSBjcCArIGl0ZW1zW2ldLmlDaGFyUG9zOworICAgICAgICBp
bnQgbGVuZ3RoID0gaXRlbXNbaSsxXS5pQ2hhclBvcyAtIGl0ZW1zW2ldLmlDaGFyUG9zOworICAg
ICAgICBTQ1JJUFRfSVRFTSYgaXRlbSA9IGl0ZW1zW2ldOworCisgICAgICAgIC8vIFNldCB1cCBi
dWZmZXJzIHRvIGhvbGQgdGhlIHJlc3VsdHMgb2Ygc2hhcGluZyB0aGUgaXRlbS4KKyAgICAgICAg
VmVjdG9yPFdPUkQ+IGdseXBoczsKKyAgICAgICAgVmVjdG9yPFdPUkQ+IGNsdXN0ZXJzOworICAg
ICAgICBWZWN0b3I8U0NSSVBUX1ZJU0FUVFI+IHZpc3VhbEF0dHJpYnV0ZXM7CisgICAgICAgIGNs
dXN0ZXJzLnJlc2l6ZShsZW5ndGgpOworCisgICAgICAgIC8vIFNoYXBlIHRoZSBpdGVtLgorICAg
ICAgICAvLyBUaGUgcmVjb21tZW5kZWQgc2l6ZSBmb3IgdGhlIGdseXBoIGJ1ZmZlciBpcyAxLjUg
KiB0aGUgY2hhcmFjdGVyIGxlbmd0aCArIDE2IGluIHRoZSB1bmlzY3JpYmUgZG9jcy4KKyAgICAg
ICAgLy8gQXBwYXJlbnRseSB0aGlzIGlzIGEgZ29vZCBzaXplIHRvIGF2b2lkIGhhdmluZyB0byBt
YWtlIHJlcGVhdGVkIGNhbGxzIHRvIFNjcmlwdFNoYXBlLgorICAgICAgICBnbHlwaHMucmVzaXpl
KDEuNSAqIGxlbmd0aCArIDE2KTsKKyAgICAgICAgdmlzdWFsQXR0cmlidXRlcy5yZXNpemUoZ2x5
cGhzLnNpemUoKSk7CisKKyAgICAgICAgaWYgKCFzaGFwZUJ5VW5pc2NyaWJlKHN0ciwgbGVuZ3Ro
LCBpdGVtLCBmb250LCBnbHlwaHMsIGNsdXN0ZXJzLCB2aXN1YWxBdHRyaWJ1dGVzKSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIC8vIFdlIG5vdyBoYXZlIGEgY29sbGVjdGlvbiBv
ZiBnbHlwaHMuCisgICAgICAgIFZlY3RvcjxHT0ZGU0VUPiBvZmZzZXRzOworICAgICAgICBWZWN0
b3I8aW50PiBhZHZhbmNlczsKKyAgICAgICAgb2Zmc2V0cy5yZXNpemUoZ2x5cGhzLnNpemUoKSk7
CisgICAgICAgIGFkdmFuY2VzLnJlc2l6ZShnbHlwaHMuc2l6ZSgpKTsKKyAgICAgICAgSFJFU1VM
VCBwbGFjZVJlc3VsdCA9IFNjcmlwdFBsYWNlKDAsIGZvbnQtPnNjcmlwdENhY2hlKCksIGdseXBo
cy5kYXRhKCksIGdseXBocy5zaXplKCksIHZpc3VhbEF0dHJpYnV0ZXMuZGF0YSgpLAorICAgICAg
ICAgICAgJml0ZW0uYSwgYWR2YW5jZXMuZGF0YSgpLCBvZmZzZXRzLmRhdGEoKSwgMCk7CisgICAg
ICAgIGlmIChwbGFjZVJlc3VsdCA9PSBFX1BFTkRJTkcpIHsKKyAgICAgICAgICAgIC8vIFRoZSBz
Y3JpcHQgY2FjaGUgaXNuJ3QgcHJpbWVkIHdpdGggZW5vdWdoIGluZm8geWV0LiBXZSBuZWVkIHRv
IHNlbGVjdCBvdXIgSEZPTlQgaW50bworICAgICAgICAgICAgLy8gYSBEQyBhbmQgcGFzcyB0aGUg
REMgaW4gdG8gU2NyaXB0UGxhY2UuCisgICAgICAgICAgICBIV25kREMgaGRjKDApOworICAgICAg
ICAgICAgSEZPTlQgaGZvbnQgPSBmb250LT5wbGF0Zm9ybURhdGEoKS5oZm9udCgpOworICAgICAg
ICAgICAgSEZPTlQgb2xkRm9udCA9IChIRk9OVClTZWxlY3RPYmplY3QoaGRjLCBoZm9udCk7Cisg
ICAgICAgICAgICBwbGFjZVJlc3VsdCA9IFNjcmlwdFBsYWNlKGhkYywgZm9udC0+c2NyaXB0Q2Fj
aGUoKSwgZ2x5cGhzLmRhdGEoKSwgZ2x5cGhzLnNpemUoKSwgdmlzdWFsQXR0cmlidXRlcy5kYXRh
KCksCisgICAgICAgICAgICAgICAgJml0ZW0uYSwgYWR2YW5jZXMuZGF0YSgpLCBvZmZzZXRzLmRh
dGEoKSwgMCk7CisgICAgICAgICAgICBTZWxlY3RPYmplY3QoaGRjLCBvbGRGb250KTsKKyAgICAg
ICAgfQorICAgIAorICAgICAgICBpZiAoRkFJTEVEKHBsYWNlUmVzdWx0KSB8fCBnbHlwaHMuaXNF
bXB0eSgpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgVmVjdG9yPHVuc2lnbmVk
PiBzdHJpbmdJbmRpY2VzKGdseXBocy5zaXplKCksIGl0ZW0uaUNoYXJQb3MpOworCisgICAgICAg
IGZvciAoaW50IGsgPSBsZW5ndGggLSAxOyBrID49IDA7IGstLSkKKyAgICAgICAgICAgIHN0cmlu
Z0luZGljZXNbY2x1c3RlcnNba11dID0gaXRlbS5pQ2hhclBvcyArIGs7CisKKyAgICAgICAgRmxv
YXRTaXplIGluaXRpYWxBZHZhbmNlOworICAgICAgICBWZWN0b3I8RmxvYXRTaXplPiBiYXNlQWR2
YW5jZXM7CisgICAgICAgIFZlY3RvcjxGbG9hdFBvaW50PiBvcmlnaW5zOworICAgICAgICBiYXNl
QWR2YW5jZXMucmVzZXJ2ZUNhcGFjaXR5KGdseXBocy5zaXplKCkpOworICAgICAgICBvcmlnaW5z
LnJlc2VydmVDYXBhY2l0eShnbHlwaHMuc2l6ZSgpKTsKKworICAgICAgICBmb3IgKHVuc2lnbmVk
IGsgPSAwOyBrIDwgZ2x5cGhzLnNpemUoKTsgaysrKSB7CisgICAgICAgICAgICBjb25zdCBmbG9h
dCBjTG9naWNhbFNjYWxlID0gZm9udC0+cGxhdGZvcm1EYXRhKCkudXNlR0RJKCkgPyAxIDogMzI7
CisgICAgICAgICAgICBmbG9hdCBhZHZhbmNlID0gYWR2YW5jZXNba10gLyBjTG9naWNhbFNjYWxl
OworICAgICAgICAgICAgZmxvYXQgb2Zmc2V0WCA9IG9mZnNldHNba10uZHUgLyBjTG9naWNhbFNj
YWxlOworICAgICAgICAgICAgZmxvYXQgb2Zmc2V0WSA9IG9mZnNldHNba10uZHYgLyBjTG9naWNh
bFNjYWxlOworCisgICAgICAgICAgICAvLyBNYXRjaCBBcHBLaXQncyBydWxlcyBmb3IgdGhlIGlu
dGVnZXIgdnMuIG5vbi1pbnRlZ2VyIHJlbmRlcmluZyBtb2Rlcy4KKyAgICAgICAgICAgIGlmICgh
Zm9udC0+cGxhdGZvcm1EYXRhKCkuaXNTeXN0ZW1Gb250KCkpIHsKKyAgICAgICAgICAgICAgICBh
ZHZhbmNlID0gcm91bmRmKGFkdmFuY2UpOworICAgICAgICAgICAgICAgIG9mZnNldFggPSByb3Vu
ZGYob2Zmc2V0WCk7CisgICAgICAgICAgICAgICAgb2Zmc2V0WSA9IHJvdW5kZihvZmZzZXRZKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gdGFrZSB0
aGUgR09GRlNFVFMgZm9yIGNvbWJpbmluZyBnbHlwaHMgYW5kIHN0b3JlIHRoZW0gaW4gdGhlIGds
eXBoIGJ1ZmZlcgorICAgICAgICAgICAgLy8gYXMgd2VsbCwgc28gdGhhdCB3aGVuIHRoZSB0aW1l
IGNvbWVzIHRvIGRyYXcgdGhvc2UgZ2x5cGhzLCB3ZSBjYW4gYXBwbHkgdGhlIGFwcHJvcHJpYXRl
CisgICAgICAgICAgICAvLyB0cmFuc2xhdGlvbi4KKworICAgICAgICAgICAgYmFzZUFkdmFuY2Vz
LnVuY2hlY2tlZEFwcGVuZCh7IGFkdmFuY2UsIDAgfSk7CisgICAgICAgICAgICBvcmlnaW5zLnVu
Y2hlY2tlZEFwcGVuZCh7IG9mZnNldFgsIG9mZnNldFkgfSk7CisgICAgICAgICAgICBpZiAoIWsp
CisgICAgICAgICAgICAgICAgaW5pdGlhbEFkdmFuY2UgPSB7IG9mZnNldFgsIG9mZnNldFkgfTsK
KyAgICAgICAgfQorICAgICAgICBib29sIGx0ciA9ICFpdGVtLmEuZlJUTDsKKyAgICAgICAgbV9j
b21wbGV4VGV4dFJ1bnMuYXBwZW5kKENvbXBsZXhUZXh0UnVuOjpjcmVhdGUoYmFzZUFkdmFuY2Vz
LCBvcmlnaW5zLCBnbHlwaHMsIHN0cmluZ0luZGljZXMsIGluaXRpYWxBZHZhbmNlLCAqZm9udCwg
Y3AsIHN0cmluZ0xvY2F0aW9uLCBzdHJpbmdMZW5ndGgsIGl0ZW0uaUNoYXJQb3MsIGl0ZW1zW2kr
MV0uaUNoYXJQb3MsIGx0cikpOworICAgIH0KK30KKworfQorCisjZW5kaWYgLy8gIVVTRShESVJF
Q1QyRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9G
b250Q0dXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRD
R1dpbi5jcHAKaW5kZXggMGVmNjU1ZDhkMDUuLjMzZjg1MmViNmU4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENHV2luLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENHV2luLmNwcApAQCAtMzQsNyAr
MzQsNiBAQAogI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIlVuaXNjcmliZUNvbnRyb2xs
ZXIuaCIKICNpbmNsdWRlICJXZWJDb3JlVGV4dFJlbmRlcmVyLmgiCiAjaW5jbHVkZSA8cGFsL3Nw
aS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYXNjYWRl
RGlyZWN0MkQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRD
YXNjYWRlRGlyZWN0MkQuY3BwCmluZGV4IDkxMTEyZDk2NWM4Li5iMmQzNDcxYjhhYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYXNjYWRlRGly
ZWN0MkQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250
Q2FzY2FkZURpcmVjdDJELmNwcApAQCAtMzcsNyArMzcsNiBAQAogI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dFBsYXRmb3JtUHJpdmF0ZURpcmVjdDJELmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgog
I2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dERpcmVjdDJELmgiCi0jaW5jbHVkZSAiVW5pc2NyaWJl
Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIldlYkNvcmVUZXh0UmVuZGVyZXIuaCIKICNpbmNsdWRl
IDxkMmQxLmg+CiAjaW5jbHVkZSA8ZHdyaXRlXzMuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250V2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250V2luLmNwcAppbmRleCAxY2FhODAyMmUyNi4uOTQ1OTAz
N2FlZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9G
b250V2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9u
dFdpbi5jcHAKQEAgLTM2LDcgKzM2LDcgQEAKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgog
CiAjaWYgIVVTRShESVJFQ1QyRCkKLSNpbmNsdWRlICJVbmlzY3JpYmVDb250cm9sbGVyLmgiCisj
aW5jbHVkZSAiQ29tcGxleFRleHRDb250cm9sbGVyLmgiCiAjZW5kaWYKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewpAQCAtNTMsMzEgKzUzLDkgQEAgYm9vbCBGb250Q2FzY2FkZTo6Y2FuRXhwYW5kQXJv
dW5kSWRlb2dyYXBoc0luQ29tcGxleFRleHQoKQogCiAjaWYgIVVTRShESVJFQ1QyRCkKIAotdm9p
ZCBGb250Q2FzY2FkZTo6YWRqdXN0U2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRl
eHRSdW4mIHJ1biwgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgdW5zaWduZWQgZnJvbSwgdW5z
aWduZWQgdG8pIGNvbnN0Ci17Ci0gICAgVW5pc2NyaWJlQ29udHJvbGxlciBpdCh0aGlzLCBydW4p
OwotICAgIGl0LmFkdmFuY2UoZnJvbSk7Ci0gICAgZmxvYXQgYmVmb3JlV2lkdGggPSBpdC5ydW5X
aWR0aFNvRmFyKCk7Ci0gICAgaXQuYWR2YW5jZSh0byk7Ci0gICAgZmxvYXQgYWZ0ZXJXaWR0aCA9
IGl0LnJ1bldpZHRoU29GYXIoKTsKLQotICAgIGlmIChydW4ucnRsKCkpIHsKLSAgICAgICAgaXQu
YWR2YW5jZShydW4ubGVuZ3RoKCkpOwotICAgICAgICBzZWxlY3Rpb25SZWN0Lm1vdmUoaXQucnVu
V2lkdGhTb0ZhcigpIC0gYWZ0ZXJXaWR0aCwgMCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHNlbGVj
dGlvblJlY3QubW92ZShiZWZvcmVXaWR0aCwgMCk7Ci0gICAgc2VsZWN0aW9uUmVjdC5zZXRXaWR0
aChhZnRlcldpZHRoIC0gYmVmb3JlV2lkdGgpOwotfQotCiBmbG9hdCBGb250Q2FzY2FkZTo6Z2V0
R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIHVuc2ln
bmVkIGZyb20sIHVuc2lnbmVkIHRvLCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIEZvclRleHRF
bXBoYXNpc09yTm90IGZvclRleHRFbXBoYXNpcykgY29uc3QKIHsKLSAgICBpZiAoZm9yVGV4dEVt
cGhhc2lzKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBBZGQgZm9yVGV4dEVtcGhhc2lzIHBhcmVtZXRl
ciB0byBVbmlzY3JpYmVDb250cm9sbGVyIGFuZCB1c2UgaXQuCi0gICAgICAgIExPR19FUlJPUigi
Tm90IGltcGxlbWVudGVkIGZvciB0ZXh0IGVtcGhhc2lzLiIpOwotICAgICAgICByZXR1cm4gMDsK
LSAgICB9Ci0KLSAgICBVbmlzY3JpYmVDb250cm9sbGVyIGNvbnRyb2xsZXIodGhpcywgcnVuKTsK
KyAgICBDb21wbGV4VGV4dENvbnRyb2xsZXIgY29udHJvbGxlcigqdGhpcywgcnVuLCBmYWxzZSwg
MCwgZm9yVGV4dEVtcGhhc2lzKTsKICAgICBjb250cm9sbGVyLmFkdmFuY2UoZnJvbSk7CiAgICAg
ZmxvYXQgYmVmb3JlV2lkdGggPSBjb250cm9sbGVyLnJ1bldpZHRoU29GYXIoKTsKICAgICBjb250
cm9sbGVyLmFkdmFuY2UodG8sICZnbHlwaEJ1ZmZlcik7CkBAIC04OSwzNCArNjcsMTIgQEAgZmxv
YXQgRm9udENhc2NhZGU6OmdldEdseXBoc0FuZEFkdmFuY2VzRm9yQ29tcGxleFRleHQoY29uc3Qg
VGV4dFJ1biYgcnVuLCB1bnNpZ24KIAogICAgIGlmIChydW4ucnRsKCkpIHsKICAgICAgICAgY29u
dHJvbGxlci5hZHZhbmNlKHJ1bi5sZW5ndGgoKSk7CisgICAgICAgIGdseXBoQnVmZmVyLnJldmVy
c2UoMCwgZ2x5cGhCdWZmZXIuc2l6ZSgpKTsKICAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXIucnVu
V2lkdGhTb0ZhcigpIC0gYWZ0ZXJXaWR0aDsKICAgICB9CiAgICAgcmV0dXJuIGJlZm9yZVdpZHRo
OwogfQogCi1mbG9hdCBGb250Q2FzY2FkZTo6ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KGNvbnN0
IFRleHRSdW4mIHJ1biwgSGFzaFNldDxjb25zdCBGb250Kj4qIGZhbGxiYWNrRm9udHMsIEdseXBo
T3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cpIGNvbnN0Ci17Ci0gICAgVW5pc2NyaWJlQ29udHJvbGxl
ciBjb250cm9sbGVyKHRoaXMsIHJ1biwgZmFsbGJhY2tGb250cyk7Ci0gICAgY29udHJvbGxlci5h
ZHZhbmNlKHJ1bi5sZW5ndGgoKSk7Ci0gICAgaWYgKGdseXBoT3ZlcmZsb3cpIHsKLSAgICAgICAg
Z2x5cGhPdmVyZmxvdy0+dG9wID0gc3RkOjptYXg8aW50PihnbHlwaE92ZXJmbG93LT50b3AsIGNl
aWxmKC1jb250cm9sbGVyLm1pbkdseXBoQm91bmRpbmdCb3hZKCkpIC0gKGdseXBoT3ZlcmZsb3ct
PmNvbXB1dGVCb3VuZHMgPyAwIDogZm9udE1ldHJpY3MoKS5hc2NlbnQoKSkpOwotICAgICAgICBn
bHlwaE92ZXJmbG93LT5ib3R0b20gPSBzdGQ6Om1heDxpbnQ+KGdseXBoT3ZlcmZsb3ctPmJvdHRv
bSwgY2VpbGYoY29udHJvbGxlci5tYXhHbHlwaEJvdW5kaW5nQm94WSgpKSAtIChnbHlwaE92ZXJm
bG93LT5jb21wdXRlQm91bmRzID8gMCAgOiBmb250TWV0cmljcygpLmRlc2NlbnQoKSkpOwotICAg
ICAgICBnbHlwaE92ZXJmbG93LT5sZWZ0ID0gc3RkOjptYXg8aW50PigwLCBjZWlsZigtY29udHJv
bGxlci5taW5HbHlwaEJvdW5kaW5nQm94WCgpKSk7Ci0gICAgICAgIGdseXBoT3ZlcmZsb3ctPnJp
Z2h0ID0gc3RkOjptYXg8aW50PigwLCBjZWlsZihjb250cm9sbGVyLm1heEdseXBoQm91bmRpbmdC
b3hYKCkgLSBjb250cm9sbGVyLnJ1bldpZHRoU29GYXIoKSkpOwotICAgIH0KLSAgICByZXR1cm4g
Y29udHJvbGxlci5ydW5XaWR0aFNvRmFyKCk7Ci19Ci0KLWludCBGb250Q2FzY2FkZTo6b2Zmc2V0
Rm9yUG9zaXRpb25Gb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGZsb2F0IHhGbG9h
dCwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogVGhp
cyB0cnVuY2F0aW9uIGlzIG5vdCBhIHByb2JsZW0gZm9yIEhUTUwsIGJ1dCBvbmx5IGFmZmVjdHMg
U1ZHLCB3aGljaCBwYXNzZXMgZmxvYXRpbmctcG9pbnQgbnVtYmVycwotICAgIC8vIHRvIEZvbnRD
YXNjYWRlOjpvZmZzZXRGb3JQb3NpdGlvbigpLiBCdWcgaHR0cDovL3dlYmtpdC5vcmcvYi80MDY3
MyB0cmFja3MgZml4aW5nIHRoaXMgcHJvYmxlbS4KLSAgICBpbnQgeCA9IHN0YXRpY19jYXN0PGlu
dD4oeEZsb2F0KTsKLQotICAgIFVuaXNjcmliZUNvbnRyb2xsZXIgY29udHJvbGxlcih0aGlzLCBy
dW4pOwotICAgIHJldHVybiBjb250cm9sbGVyLm9mZnNldEZvclBvc2l0aW9uKHgsIGluY2x1ZGVQ
YXJ0aWFsR2x5cGhzKTsKLX0KLQogI2VuZGlmCiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9VbmlzY3JpYmVDb250cm9sbGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9VbmlzY3JpYmVDb250cm9sbGVyLmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDc0YzQ4NjBmZjEuLjAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9VbmlzY3JpYmVDb250cm9s
bGVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ1OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlVuaXNjcmliZUNv
bnRyb2xsZXIuaCIKLQotI2luY2x1ZGUgIkZvbnQuaCIKLSNpbmNsdWRlICJGb250Q2FzY2FkZS5o
IgotI2luY2x1ZGUgIkhXbmREQy5oIgotI2luY2x1ZGUgIlRleHRSdW4uaCIKLSNpbmNsdWRlIDx3
dGYvTWF0aEV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L3dpbi9XQ2hhclN0cmluZ0V4dHJh
cy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci11c2luZyBuYW1lc3BhY2UgV1RGOjpVbmljb2Rl
OwotCi0vLyBGSVhNRTogUmVhcmNoaXRlY3QgdGhpcyB0byBiZSBtb3JlIGxpa2UgV2lkdGhJdGVy
YXRvciBpbiBGb250LmNwcC4gIEhhdmUgYW4gYWR2YW5jZSgpIG1ldGhvZAotLy8gdGhhdCBkb2Vz
IHN0dWZmIGluIHRoYXQgbWV0aG9kIGluc3RlYWQgb2YgZG9pbmcgZXZlcnl0aGluZyBpbiB0aGUg
Y29uc3RydWN0b3IuICBIYXZlIGFkdmFuY2UoKQotLy8gdGFrZSB0aGUgR2x5cGhCdWZmZXIgYXMg
YW4gYXJnIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBwb3B1bGF0ZSB0aGUgZ2x5cGggYnVmZmVy
IHdoZW4KLS8vIG1lYXN1cmluZy4KLVVuaXNjcmliZUNvbnRyb2xsZXI6OlVuaXNjcmliZUNvbnRy
b2xsZXIoY29uc3QgRm9udENhc2NhZGUqIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgSGFzaFNl
dDxjb25zdCBGb250Kj4qIGZhbGxiYWNrRm9udHMpCi0gICAgOiBtX2ZvbnQoKmZvbnQpCi0gICAg
LCBtX3J1bihydW4pCi0gICAgLCBtX2ZhbGxiYWNrRm9udHMoZmFsbGJhY2tGb250cykKLSAgICAs
IG1fbWluR2x5cGhCb3VuZGluZ0JveFgoc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46Om1heCgp
KQotICAgICwgbV9tYXhHbHlwaEJvdW5kaW5nQm94WChzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0
Pjo6bWluKCkpCi0gICAgLCBtX21pbkdseXBoQm91bmRpbmdCb3hZKHN0ZDo6bnVtZXJpY19saW1p
dHM8ZmxvYXQ+OjptYXgoKSkKLSAgICAsIG1fbWF4R2x5cGhCb3VuZGluZ0JveFkoc3RkOjpudW1l
cmljX2xpbWl0czxmbG9hdD46Om1pbigpKQotICAgICwgbV9jdXJyZW50Q2hhcmFjdGVyKDApCi0g
ICAgLCBtX2VuZChydW4ubGVuZ3RoKCkpCi0gICAgLCBtX3J1bldpZHRoU29GYXIoMCkKLSAgICAs
IG1fcGFkZGluZyhydW4uZXhwYW5zaW9uKCkpCi0gICAgLCBtX2NvbXB1dGluZ09mZnNldFBvc2l0
aW9uKGZhbHNlKQotICAgICwgbV9pbmNsdWRlUGFydGlhbEdseXBocyhmYWxzZSkKLSAgICAsIG1f
b2Zmc2V0WCgwKQotICAgICwgbV9vZmZzZXRQb3NpdGlvbigwKQotewotICAgIGlmICghbV9wYWRk
aW5nKQotICAgICAgICBtX3BhZFBlclNwYWNlID0gMDsKLSAgICBlbHNlIHsKLSAgICAgICAgZmxv
YXQgbnVtU3BhY2VzID0gMDsKLSAgICAgICAgZm9yIChpbnQgcyA9IDA7IHMgPCBtX3J1bi5sZW5n
dGgoKTsgcysrKSB7Ci0gICAgICAgICAgICBpZiAoRm9udENhc2NhZGU6OnRyZWF0QXNTcGFjZSht
X3J1bltzXSkpCi0gICAgICAgICAgICAgICAgbnVtU3BhY2VzKys7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAobnVtU3BhY2VzID09IDApCi0gICAgICAgICAgICBtX3BhZFBlclNwYWNlID0gMDsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9wYWRQZXJTcGFjZSA9IG1fcGFkZGluZyAvIG51
bVNwYWNlczsKLSAgICB9Ci0KLSAgICAvLyBOdWxsIG91dCBvdXIgdW5pc2NyaWJlIHN0cnVjdHMK
LSAgICByZXNldENvbnRyb2xBbmRTdGF0ZSgpOwotfQotCi1pbnQgVW5pc2NyaWJlQ29udHJvbGxl
cjo6b2Zmc2V0Rm9yUG9zaXRpb24oaW50IHgsIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpCi17
Ci0gICAgbV9jb21wdXRpbmdPZmZzZXRQb3NpdGlvbiA9IHRydWU7Ci0gICAgbV9pbmNsdWRlUGFy
dGlhbEdseXBocyA9IGluY2x1ZGVQYXJ0aWFsR2x5cGhzOwotICAgIG1fb2Zmc2V0WCA9IHg7Ci0g
ICAgbV9vZmZzZXRQb3NpdGlvbiA9IDA7Ci0gICAgYWR2YW5jZShtX3J1bi5sZW5ndGgoKSk7Ci0g
ICAgaWYgKG1fY29tcHV0aW5nT2Zmc2V0UG9zaXRpb24pIHsKLSAgICAgICAgLy8gVGhlIHBvaW50
IGlzIHRvIHRoZSBsZWZ0IG9yIHRvIHRoZSByaWdodCBvZiB0aGUgZW50aXJlIHJ1bi4KLSAgICAg
ICAgaWYgKChtX29mZnNldFggPj0gbV9ydW5XaWR0aFNvRmFyICYmIG1fcnVuLmx0cigpKSB8fCAo
bV9vZmZzZXRYIDwgMCAmJiBtX3J1bi5ydGwoKSkpCi0gICAgICAgICAgICBtX29mZnNldFBvc2l0
aW9uID0gbV9lbmQ7Ci0gICAgfQotICAgIG1fY29tcHV0aW5nT2Zmc2V0UG9zaXRpb24gPSBmYWxz
ZTsKLSAgICByZXR1cm4gbV9vZmZzZXRQb3NpdGlvbjsKLX0KLQotdm9pZCBVbmlzY3JpYmVDb250
cm9sbGVyOjphZHZhbmNlKHVuc2lnbmVkIG9mZnNldCwgR2x5cGhCdWZmZXIqIGdseXBoQnVmZmVy
KQotewotICAgIC8vIEZJWE1FOiBXZSByZWFsbHkgd2FudCB0byBiZSB1c2luZyBhIG5ld2VyIHZl
cnNpb24gb2YgVW5pc2NyaWJlIHRoYXQgc3VwcG9ydHMgdGhlIG5ldyBPcGVuVHlwZQotICAgIC8v
IGZ1bmN0aW9ucy4gIFRob3NlIGZ1bmN0aW9ucyB3b3VsZCBhbGxvdyB1cyB0byB0dXJuIG9mZiBr
ZXJuaW5nIGFuZCBsaWdhdHVyZXMuICBXaXRob3V0IGJlaW5nIGFibGUKLSAgICAvLyB0byBkbyB0
aGF0LCB3ZSB3aWxsIGhhdmUgYnVnZ3kgbGluZSBicmVha2luZyBhbmQgbWV0cmljcyB3aGVuIHNp
bXBsZSBhbmQgY29tcGxleCB0ZXh0IGFyZSBjbG9zZQotICAgIC8vIHRvZ2V0aGVyICh0aGUgY29t
cGxleCBjb2RlIHBhdGggd2lsbCBuYXJyb3cgdGhlIHRleHQgYmVjYXVzZSBvZiBrZXJuaW5nIGFu
ZCBsaWdhdHVyZXMgYW5kIHRoZW4KLSAgICAvLyB3aGVuIGJpZGkgcHJvY2Vzc2luZyBzcGxpdHMg
aW50byBtdWx0aXBsZSBydW5zLCB0aGUgc2ltcGxlIHBvcnRpb25zIHdpbGwgZ2V0IHdpZGVyIGFu
ZCBjYXVzZSB1cyB0bwotICAgIC8vIHNwaWxsIG9mZiB0aGUgZWRnZSBvZiBhIGxpbmUpLgotICAg
IGlmIChzdGF0aWNfY2FzdDxpbnQ+KG9mZnNldCkgPiBtX2VuZCkKLSAgICAgICAgb2Zmc2V0ID0g
bV9lbmQ7Ci0KLSAgICBpbnQgbGVuZ3RoID0gb2Zmc2V0IC0gbV9jdXJyZW50Q2hhcmFjdGVyOwot
ICAgIGlmIChsZW5ndGggPD0gMCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU3RyaW5nIGJ1ZmZl
ckZvcjE2Qml0RGF0YTsKLQotICAgIC8vIEl0ZW1pemUgdGhlIHN0cmluZy4KLSAgICBjb25zdCBV
Q2hhciogY3AgPSBudWxscHRyOwotICAgIGlmIChtX3J1bi5pczhCaXQoKSkgewotICAgICAgICAv
LyBVbmlzY3JpYmUgb25seSBkZWFscyB3aXRoIDE2LWJpdCBjaGFyYWN0ZXJzLiBNdXN0IGdlbmVy
YXRlIHRoZW0gbm93LgotICAgICAgICBidWZmZXJGb3IxNkJpdERhdGEgPSBTdHJpbmc6Om1ha2Ux
NkJpdEZyb204Qml0U291cmNlKG1fcnVuLmRhdGE4KG1fY3VycmVudENoYXJhY3RlciksIGxlbmd0
aCk7Ci0gICAgICAgIGNwID0gYnVmZmVyRm9yMTZCaXREYXRhLmNoYXJhY3RlcnMxNigpOwotICAg
IH0gZWxzZQotICAgICAgICBjcCA9IG1fcnVuLmRhdGExNihtX2N1cnJlbnRDaGFyYWN0ZXIpOwot
Ci0gICAgdW5zaWduZWQgYmFzZUNoYXJhY3RlciA9IG1fY3VycmVudENoYXJhY3RlcjsKLQotICAg
IC8vIFdlIGJyZWFrIHVwIGl0ZW1pemF0aW9uIG9mIHRoZSBzdHJpbmcgYnkgZm9udERhdGEgYW5k
IChpZiBuZWVkZWQpIHRoZSB1c2Ugb2Ygc21hbGwgY2Fwcy4KLQotICAgIC8vIEZJWE1FOiBJdCdz
IGluY29uc2lzdGVudCB0aGF0IHdlIHVzZSBsb2dpY2FsIG9yZGVyIHdoZW4gaXRlbWl6aW5nLCBz
aW5jZSB0aGlzCi0gICAgLy8gZG9lcyBub3QgbWF0Y2ggbm9ybWFsIFJUTC4KLQotICAgIC8vIEZJ
WE1FOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBkZWNvZGUgc3Vycm9nYXRlIHBhaXJzLiBDdXJyZW50
bHkgaXQgbWFrZXMgbGl0dGxlIGRpZmZlcmVuY2UgdGhhdAotICAgIC8vIGl0IGRvZXMgbm90IGJl
Y2F1c2UgdGhlIGZvbnQgY2FjaGUgb24gV2luZG93cyBkb2VzIG5vdCBzdXBwb3J0IG5vbi1CTVAg
Y2hhcmFjdGVycy4KLSAgICBWZWN0b3I8VUNoYXIsIDI1Nj4gc21hbGxDYXBzQnVmZmVyOwotICAg
IGlmIChtX2ZvbnQuaXNTbWFsbENhcHMoKSkKLSAgICAgICAgc21hbGxDYXBzQnVmZmVyLnJlc2l6
ZShsZW5ndGgpOwotCi0gICAgdW5zaWduZWQgaW5kZXhPZkZvbnRUcmFuc2l0aW9uID0gbV9ydW4u
cnRsKCkgPyBsZW5ndGggLSAxIDogMDsKLSAgICBjb25zdCBVQ2hhciogY3VyciA9IG1fcnVuLnJ0
bCgpID8gY3AgKyBsZW5ndGggIC0gMSA6IGNwOwotICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBtX3J1
bi5ydGwoKSA/IGNwIC0gMSA6IGNwICsgbGVuZ3RoOwotCi0gICAgY29uc3QgRm9udCogZm9udERh
dGE7Ci0gICAgY29uc3QgRm9udCogbmV4dEZvbnREYXRhID0gbV9mb250LmdseXBoRGF0YUZvckNo
YXJhY3RlcigqY3VyciwgZmFsc2UpLmZvbnQ7Ci0KLSAgICBVQ2hhciBuZXdDID0gMDsKLQotICAg
IGJvb2wgaXNTbWFsbENhcHM7Ci0gICAgYm9vbCBuZXh0SXNTbWFsbENhcHMgPSBtX2ZvbnQuaXNT
bWFsbENhcHMoKSAmJiAhKFVfR0VUX0dDX01BU0soKmN1cnIpICYgVV9HQ19NX01BU0spICYmIChu
ZXdDID0gdV90b3VwcGVyKCpjdXJyKSkgIT0gKmN1cnI7Ci0KLSAgICBpZiAobmV4dElzU21hbGxD
YXBzKQotICAgICAgICBzbWFsbENhcHNCdWZmZXJbY3VyciAtIGNwXSA9IG5ld0M7Ci0KLSAgICB3
aGlsZSAodHJ1ZSkgewotICAgICAgICBjdXJyID0gbV9ydW4ucnRsKCkgPyBjdXJyIC0gMSA6IGN1
cnIgKyAxOwotICAgICAgICBpZiAoY3VyciA9PSBlbmQpCi0gICAgICAgICAgICBicmVhazsKLQot
ICAgICAgICBmb250RGF0YSA9IG5leHRGb250RGF0YTsKLSAgICAgICAgaXNTbWFsbENhcHMgPSBu
ZXh0SXNTbWFsbENhcHM7Ci0gICAgICAgIGludCBpbmRleCA9IGN1cnIgLSBjcDsKLSAgICAgICAg
VUNoYXIgYyA9ICpjdXJyOwotCi0gICAgICAgIGJvb2wgZm9yY2VTbWFsbENhcHMgPSBpc1NtYWxs
Q2FwcyAmJiAoVV9HRVRfR0NfTUFTSyhjKSAmIFVfR0NfTV9NQVNLKTsKLSAgICAgICAgbmV4dEZv
bnREYXRhID0gbV9mb250LmdseXBoRGF0YUZvckNoYXJhY3RlcigqY3VyciwgZmFsc2UsIGZvcmNl
U21hbGxDYXBzID8gU21hbGxDYXBzVmFyaWFudCA6IEF1dG9WYXJpYW50KS5mb250OwotICAgICAg
ICBpZiAobV9mb250LmlzU21hbGxDYXBzKCkpIHsKLSAgICAgICAgICAgIG5leHRJc1NtYWxsQ2Fw
cyA9IGZvcmNlU21hbGxDYXBzIHx8IChuZXdDID0gdV90b3VwcGVyKGMpKSAhPSBjOwotICAgICAg
ICAgICAgaWYgKG5leHRJc1NtYWxsQ2FwcykKLSAgICAgICAgICAgICAgICBzbWFsbENhcHNCdWZm
ZXJbaW5kZXhdID0gZm9yY2VTbWFsbENhcHMgPyBjIDogbmV3QzsKLSAgICAgICAgfQotCi0gICAg
ICAgIGlmIChtX2ZhbGxiYWNrRm9udHMgJiYgZm9udERhdGEgJiYgbmV4dEZvbnREYXRhICE9IGZv
bnREYXRhICYmIGZvbnREYXRhICE9ICZtX2ZvbnQucHJpbWFyeUZvbnQoKSkKLSAgICAgICAgICAg
IG1fZmFsbGJhY2tGb250cy0+YWRkKGZvbnREYXRhKTsKLQotICAgICAgICBpZiAobmV4dEZvbnRE
YXRhICE9IGZvbnREYXRhIHx8IG5leHRJc1NtYWxsQ2FwcyAhPSBpc1NtYWxsQ2FwcykgewotICAg
ICAgICAgICAgaW50IGl0ZW1TdGFydCA9IG1fcnVuLnJ0bCgpID8gaW5kZXggKyAxIDogaW5kZXhP
ZkZvbnRUcmFuc2l0aW9uOwotICAgICAgICAgICAgaW50IGl0ZW1MZW5ndGggPSBtX3J1bi5ydGwo
KSA/IGluZGV4T2ZGb250VHJhbnNpdGlvbiAtIGluZGV4IDogaW5kZXggLSBpbmRleE9mRm9udFRy
YW5zaXRpb247Ci0gICAgICAgICAgICBtX2N1cnJlbnRDaGFyYWN0ZXIgPSBiYXNlQ2hhcmFjdGVy
ICsgaXRlbVN0YXJ0OwotICAgICAgICAgICAgaXRlbWl6ZVNoYXBlQW5kUGxhY2UoKGlzU21hbGxD
YXBzID8gc21hbGxDYXBzQnVmZmVyLmRhdGEoKSA6IGNwKSArIGl0ZW1TdGFydCwgaXRlbVN0YXJ0
LCBpdGVtTGVuZ3RoLCBmb250RGF0YSwgZ2x5cGhCdWZmZXIpOwotICAgICAgICAgICAgaW5kZXhP
ZkZvbnRUcmFuc2l0aW9uID0gaW5kZXg7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgaW50
IGl0ZW1MZW5ndGggPSBtX3J1bi5ydGwoKSA/IGluZGV4T2ZGb250VHJhbnNpdGlvbiArIDEgOiBs
ZW5ndGggLSBpbmRleE9mRm9udFRyYW5zaXRpb247Ci0gICAgaWYgKGl0ZW1MZW5ndGgpIHsKLSAg
ICAgICAgaWYgKG1fZmFsbGJhY2tGb250cyAmJiBuZXh0Rm9udERhdGEgJiYgbmV4dEZvbnREYXRh
ICE9ICZtX2ZvbnQucHJpbWFyeUZvbnQoKSkKLSAgICAgICAgICAgIG1fZmFsbGJhY2tGb250cy0+
YWRkKG5leHRGb250RGF0YSk7Ci0KLSAgICAgICAgaW50IGl0ZW1TdGFydCA9IG1fcnVuLnJ0bCgp
ID8gMCA6IGluZGV4T2ZGb250VHJhbnNpdGlvbjsKLSAgICAgICAgbV9jdXJyZW50Q2hhcmFjdGVy
ID0gYmFzZUNoYXJhY3RlciArIGl0ZW1TdGFydDsKLSAgICAgICAgaXRlbWl6ZVNoYXBlQW5kUGxh
Y2UoKG5leHRJc1NtYWxsQ2FwcyA/IHNtYWxsQ2Fwc0J1ZmZlci5kYXRhKCkgOiBjcCkgKyBpdGVt
U3RhcnQsIGl0ZW1TdGFydCwgaXRlbUxlbmd0aCwgbmV4dEZvbnREYXRhLCBnbHlwaEJ1ZmZlcik7
Ci0gICAgfQotCi0gICAgbV9jdXJyZW50Q2hhcmFjdGVyID0gYmFzZUNoYXJhY3RlciArIGxlbmd0
aDsKLX0KLQotdm9pZCBVbmlzY3JpYmVDb250cm9sbGVyOjppdGVtaXplU2hhcGVBbmRQbGFjZShj
b25zdCBVQ2hhciogY3AsIHVuc2lnbmVkIHN0cmluZ09mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBj
b25zdCBGb250KiBmb250RGF0YSwgR2x5cGhCdWZmZXIqIGdseXBoQnVmZmVyKQotewotICAgIC8v
IFNjcmlwdEl0ZW1pemUgKGluIFdpbmRvd3MgWFAgdmVyc2lvbnMgcHJpb3IgdG8gU1AyKSBjYW4g
b3ZlcmZsb3cgYnkgMS4gIFRoaXMgaXMgd2h5IHRoZXJlIGlzIGFuIGV4dHJhIGVtcHR5IGl0ZW0K
LSAgICAvLyBoYW5naW5nIG91dCBhdCB0aGUgZW5kIG9mIHRoZSBhcnJheQotICAgIG1faXRlbXMu
cmVzaXplKDYpOwotICAgIGludCBudW1JdGVtcyA9IDA7Ci0gICAgSFJFU1VMVCByYyA9IFNfT0s7
Ci0gICAgd2hpbGUgKHJjID0gOjpTY3JpcHRJdGVtaXplKHdjaGFyRnJvbShjcCksIGxlbmd0aCwg
bV9pdGVtcy5zaXplKCkgLSAxLCAmbV9jb250cm9sLCAmbV9zdGF0ZSwgbV9pdGVtcy5kYXRhKCks
ICZudW1JdGVtcykgPT0gRV9PVVRPRk1FTU9SWSkgewotICAgICAgICBtX2l0ZW1zLnJlc2l6ZSht
X2l0ZW1zLnNpemUoKSAqIDIpOwotICAgICAgICByZXNldENvbnRyb2xBbmRTdGF0ZSgpOwotICAg
IH0KLSAgICBpZiAoRkFJTEVEKHJjKSkgewotICAgICAgICBXVEZMb2dBbHdheXMoIlVuaXNjcmli
ZUNvbnRyb2xsZXI6Oml0ZW1pemVTaGFwZUFuZFBsYWNlOiBTY3JpcHRJdGVtaXplIGZhaWxlZCwg
cmM9JWx4IiwgcmMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1faXRlbXMucmVzaXpl
KG51bUl0ZW1zICsgMSk7Ci0KLSAgICBpZiAobV9ydW4ucnRsKCkpIHsKLSAgICAgICAgZm9yIChp
bnQgaSA9IG1faXRlbXMuc2l6ZSgpIC0gMjsgaSA+PSAwOyBpLS0pIHsKLSAgICAgICAgICAgIGlm
ICghc2hhcGVBbmRQbGFjZUl0ZW0oY3AsIHN0cmluZ09mZnNldCwgaSwgZm9udERhdGEsIGdseXBo
QnVmZmVyKSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9IGVsc2Ug
ewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9pdGVtcy5zaXplKCkgLSAxOyBp
KyspIHsKLSAgICAgICAgICAgIGlmICghc2hhcGVBbmRQbGFjZUl0ZW0oY3AsIHN0cmluZ09mZnNl
dCwgaSwgZm9udERhdGEsIGdseXBoQnVmZmVyKSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgVW5pc2NyaWJlQ29udHJvbGxlcjo6cmVzZXRDb250
cm9sQW5kU3RhdGUoKQotewotICAgIG1lbXNldCgmbV9jb250cm9sLCAwLCBzaXplb2YoU0NSSVBU
X0NPTlRST0wpKTsKLSAgICBtZW1zZXQoJm1fc3RhdGUsIDAsIHNpemVvZihTQ1JJUFRfU1RBVEUp
KTsKLQotICAgIC8vIFNldCB1cCB0aGUgY29ycmVjdCBkaXJlY3Rpb24gZm9yIHRoZSBydW4uCi0g
ICAgbV9zdGF0ZS51QmlkaUxldmVsID0gbV9ydW4ucnRsKCk7Ci0gICAgCi0gICAgLy8gTG9jayB0
aGUgY29ycmVjdCBkaXJlY3Rpb25hbCBvdmVycmlkZS4KLSAgICBtX3N0YXRlLmZPdmVycmlkZURp
cmVjdGlvbiA9IG1fcnVuLmRpcmVjdGlvbmFsT3ZlcnJpZGUoKTsKLX0KLQotYm9vbCBVbmlzY3Jp
YmVDb250cm9sbGVyOjpzaGFwZUFuZFBsYWNlSXRlbShjb25zdCBVQ2hhciogY3AsIHVuc2lnbmVk
IHN0cmluZ09mZnNldCwgdW5zaWduZWQgaSwgY29uc3QgRm9udCogZm9udERhdGEsIEdseXBoQnVm
ZmVyKiBnbHlwaEJ1ZmZlcikKLXsKLSAgICAvLyBEZXRlcm1pbmUgdGhlIHN0cmluZyBmb3IgdGhp
cyBpdGVtLgotICAgIGNvbnN0IFVDaGFyKiBzdHIgPSBjcCArIG1faXRlbXNbaV0uaUNoYXJQb3M7
Ci0gICAgaW50IGxlbiA9IG1faXRlbXNbaSsxXS5pQ2hhclBvcyAtIG1faXRlbXNbaV0uaUNoYXJQ
b3M7Ci0gICAgU0NSSVBUX0lURU0gaXRlbSA9IG1faXRlbXNbaV07Ci0KLSAgICAvLyBTZXQgdXAg
YnVmZmVycyB0byBob2xkIHRoZSByZXN1bHRzIG9mIHNoYXBpbmcgdGhlIGl0ZW0uCi0gICAgVmVj
dG9yPFdPUkQ+IGdseXBoczsKLSAgICBWZWN0b3I8V09SRD4gY2x1c3RlcnM7Ci0gICAgVmVjdG9y
PFNDUklQVF9WSVNBVFRSPiB2aXN1YWxBdHRyaWJ1dGVzOwotICAgIGNsdXN0ZXJzLnJlc2l6ZShs
ZW4pOwotICAgICAKLSAgICAvLyBTaGFwZSB0aGUgaXRlbS4KLSAgICAvLyBUaGUgcmVjb21tZW5k
ZWQgc2l6ZSBmb3IgdGhlIGdseXBoIGJ1ZmZlciBpcyAxLjUgKiB0aGUgY2hhcmFjdGVyIGxlbmd0
aCArIDE2IGluIHRoZSB1bmlzY3JpYmUgZG9jcy4KLSAgICAvLyBBcHBhcmVudGx5IHRoaXMgaXMg
YSBnb29kIHNpemUgdG8gYXZvaWQgaGF2aW5nIHRvIG1ha2UgcmVwZWF0ZWQgY2FsbHMgdG8gU2Ny
aXB0U2hhcGUuCi0gICAgZ2x5cGhzLnJlc2l6ZSgxLjUgKiBsZW4gKyAxNik7Ci0gICAgdmlzdWFs
QXR0cmlidXRlcy5yZXNpemUoZ2x5cGhzLnNpemUoKSk7Ci0KLSAgICBpZiAoIXNoYXBlKHN0ciwg
bGVuLCBpdGVtLCBmb250RGF0YSwgZ2x5cGhzLCBjbHVzdGVycywgdmlzdWFsQXR0cmlidXRlcykp
Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgVmVjdG9yPE9wdGlvbmFsPHVuc2lnbmVkPj4g
c3RyaW5nT2Zmc2V0cyhnbHlwaHMuc2l6ZSgpKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbGVuOyArK2kpIHsKLSAgICAgICAgaWYgKHN0cmluZ09mZnNldHNbY2x1c3RlcnNbaV1dKQot
ICAgICAgICAgICAgc3RyaW5nT2Zmc2V0c1tjbHVzdGVyc1tpXV0gPSBzdGQ6Om1pbigqc3RyaW5n
T2Zmc2V0c1tjbHVzdGVyc1tpXV0sIGkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzdHJp
bmdPZmZzZXRzW2NsdXN0ZXJzW2ldXSA9IGk7Ci0gICAgfQotCi0gICAgLy8gV2Ugbm93IGhhdmUg
YSBjb2xsZWN0aW9uIG9mIGdseXBocy4KLSAgICBWZWN0b3I8R09GRlNFVD4gb2Zmc2V0czsKLSAg
ICBWZWN0b3I8aW50PiBhZHZhbmNlczsKLSAgICBvZmZzZXRzLnJlc2l6ZShnbHlwaHMuc2l6ZSgp
KTsKLSAgICBhZHZhbmNlcy5yZXNpemUoZ2x5cGhzLnNpemUoKSk7Ci0gICAgSFJFU1VMVCBwbGFj
ZVJlc3VsdCA9IFNjcmlwdFBsYWNlKDAsIGZvbnREYXRhLT5zY3JpcHRDYWNoZSgpLCBnbHlwaHMu
ZGF0YSgpLCBnbHlwaHMuc2l6ZSgpLCB2aXN1YWxBdHRyaWJ1dGVzLmRhdGEoKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJml0ZW0uYSwgYWR2YW5jZXMuZGF0YSgpLCBv
ZmZzZXRzLmRhdGEoKSwgMCk7Ci0gICAgaWYgKHBsYWNlUmVzdWx0ID09IEVfUEVORElORykgewot
ICAgICAgICAvLyBUaGUgc2NyaXB0IGNhY2hlIGlzbid0IHByaW1lZCB3aXRoIGVub3VnaCBpbmZv
IHlldC4gIFdlIG5lZWQgdG8gc2VsZWN0IG91ciBIRk9OVCBpbnRvCi0gICAgICAgIC8vIGEgREMg
YW5kIHBhc3MgdGhlIERDIGluIHRvIFNjcmlwdFBsYWNlLgotICAgICAgICBIV25kREMgaGRjKDAp
OwotICAgICAgICBIRk9OVCBoZm9udCA9IGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5oZm9udCgp
OwotICAgICAgICBIRk9OVCBvbGRGb250ID0gKEhGT05UKVNlbGVjdE9iamVjdChoZGMsIGhmb250
KTsKLSAgICAgICAgcGxhY2VSZXN1bHQgPSBTY3JpcHRQbGFjZShoZGMsIGZvbnREYXRhLT5zY3Jp
cHRDYWNoZSgpLCBnbHlwaHMuZGF0YSgpLCBnbHlwaHMuc2l6ZSgpLCB2aXN1YWxBdHRyaWJ1dGVz
LmRhdGEoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaXRlbS5hLCBhZHZh
bmNlcy5kYXRhKCksIG9mZnNldHMuZGF0YSgpLCAwKTsKLSAgICAgICAgU2VsZWN0T2JqZWN0KGhk
Yywgb2xkRm9udCk7Ci0gICAgfQotICAgIAotICAgIGlmIChGQUlMRUQocGxhY2VSZXN1bHQpIHx8
IGdseXBocy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gQ29udmVy
dCBhbGwgY2hhcnMgdGhhdCBzaG91bGQgYmUgdHJlYXRlZCBhcyBzcGFjZXMgdG8gdXNlIHRoZSBz
cGFjZSBnbHlwaC4KLSAgICAvLyBXZSBhbHNvIGNyZWF0ZSBhIG1hcCB0aGF0IGFsbG93cyB1cyB0
byBxdWlja2x5IGdvIGZyb20gc3BhY2UgZ2x5cGhzIGJhY2sgdG8gdGhlaXIgY29ycmVzcG9uZGlu
ZyBjaGFyYWN0ZXJzLgotICAgIFZlY3RvcjxpbnQ+IHNwYWNlQ2hhcmFjdGVycyhnbHlwaHMuc2l6
ZSgpKTsKLSAgICBzcGFjZUNoYXJhY3RlcnMuZmlsbCgtMSk7Ci0KLSAgICBjb25zdCBmbG9hdCBj
TG9naWNhbFNjYWxlID0gZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLnVzZUdESSgpID8gMS4wZiA6
IDMyLjBmOwotICAgIGZsb2F0IHNwYWNlV2lkdGggPSBmb250RGF0YS0+c3BhY2VXaWR0aCgpIC0g
Zm9udERhdGEtPnN5bnRoZXRpY0JvbGRPZmZzZXQoKTsKLSAgICB1bnNpZ25lZCBsb2dpY2FsU3Bh
Y2VXaWR0aCA9IHNwYWNlV2lkdGggKiBjTG9naWNhbFNjYWxlOwotCi0gICAgZm9yIChpbnQgayA9
IDA7IGsgPCBsZW47IGsrKykgewotICAgICAgICBVQ2hhciBjaCA9ICooc3RyICsgayk7Ci0gICAg
ICAgIGJvb2wgdHJlYXRBc1NwYWNlID0gRm9udENhc2NhZGU6OnRyZWF0QXNTcGFjZShjaCk7Ci0g
ICAgICAgIGJvb2wgdHJlYXRBc1plcm9XaWR0aFNwYWNlID0gRm9udENhc2NhZGU6OnRyZWF0QXNa
ZXJvV2lkdGhTcGFjZShjaCk7Ci0gICAgICAgIGlmICh0cmVhdEFzU3BhY2UgfHwgdHJlYXRBc1pl
cm9XaWR0aFNwYWNlKSB7Ci0gICAgICAgICAgICAvLyBTdWJzdGl0dXRlIGluIHRoZSBzcGFjZSBn
bHlwaCBhdCB0aGUgYXBwcm9wcmlhdGUgcGxhY2UgaW4gdGhlIGdseXBocwotICAgICAgICAgICAg
Ly8gYXJyYXkuCi0gICAgICAgICAgICBnbHlwaHNbY2x1c3RlcnNba11dID0gZm9udERhdGEtPnNw
YWNlR2x5cGgoKTsKLSAgICAgICAgICAgIGFkdmFuY2VzW2NsdXN0ZXJzW2tdXSA9IHRyZWF0QXNT
cGFjZSA/IGxvZ2ljYWxTcGFjZVdpZHRoIDogMDsKLSAgICAgICAgICAgIGlmICh0cmVhdEFzU3Bh
Y2UpCi0gICAgICAgICAgICAgICAgc3BhY2VDaGFyYWN0ZXJzW2NsdXN0ZXJzW2tdXSA9IG1fY3Vy
cmVudENoYXJhY3RlciArIGsgKyBpdGVtLmlDaGFyUG9zOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgLy8gUG9wdWxhdGUgb3VyIGdseXBoIGJ1ZmZlciB3aXRoIHRoaXMgaW5mb3JtYXRpb24uCi0g
ICAgYm9vbCBoYXNFeHRyYVNwYWNpbmcgPSBtX2ZvbnQubGV0dGVyU3BhY2luZygpIHx8IG1fZm9u
dC53b3JkU3BhY2luZygpIHx8IG1fcGFkZGluZzsKLSAgICAKLSAgICBmbG9hdCBsZWZ0RWRnZSA9
IG1fcnVuV2lkdGhTb0ZhcjsKLQotICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBnbHlwaHMu
c2l6ZSgpOyBrKyspIHsKLSAgICAgICAgR2x5cGggZ2x5cGggPSBnbHlwaHNba107Ci0gICAgICAg
IGZsb2F0IGFkdmFuY2UgPSBhZHZhbmNlc1trXSAvIGNMb2dpY2FsU2NhbGU7Ci0gICAgICAgIGZs
b2F0IG9mZnNldFggPSBvZmZzZXRzW2tdLmR1IC8gY0xvZ2ljYWxTY2FsZTsKLSAgICAgICAgZmxv
YXQgb2Zmc2V0WSA9IG9mZnNldHNba10uZHYgLyBjTG9naWNhbFNjYWxlOwotCi0gICAgICAgIC8v
IE1hdGNoIEFwcEtpdCdzIHJ1bGVzIGZvciB0aGUgaW50ZWdlciB2cy4gbm9uLWludGVnZXIgcmVu
ZGVyaW5nIG1vZGVzLgotICAgICAgICBmbG9hdCByb3VuZGVkQWR2YW5jZSA9IHJvdW5kZihhZHZh
bmNlKTsKLSAgICAgICAgaWYgKCFmb250RGF0YS0+cGxhdGZvcm1EYXRhKCkuaXNTeXN0ZW1Gb250
KCkpIHsKLSAgICAgICAgICAgIGFkdmFuY2UgPSByb3VuZGVkQWR2YW5jZTsKLSAgICAgICAgICAg
IG9mZnNldFggPSByb3VuZGYob2Zmc2V0WCk7Ci0gICAgICAgICAgICBvZmZzZXRZID0gcm91bmRm
KG9mZnNldFkpOwotICAgICAgICB9Ci0KLSAgICAgICAgYWR2YW5jZSArPSBmb250RGF0YS0+c3lu
dGhldGljQm9sZE9mZnNldCgpOwotCi0gICAgICAgIGlmIChoYXNFeHRyYVNwYWNpbmcpIHsKLSAg
ICAgICAgICAgIC8vIElmIHdlJ3JlIGEgZ2x5cGggd2l0aCBhbiBhZHZhbmNlLCBnbyBhaGVhZCBh
bmQgYWRkIGluIGxldHRlci1zcGFjaW5nLgotICAgICAgICAgICAgLy8gVGhhdCB3YXkgd2Ugd2Vl
ZCBvdXQgemVybyB3aWR0aCBsdXJrZXJzLiAgVGhpcyBiZWhhdmlvciBtYXRjaGVzIHRoZSBmYXN0
IHRleHQgY29kZSBwYXRoLgotICAgICAgICAgICAgaWYgKGFkdmFuY2UgJiYgbV9mb250LmxldHRl
clNwYWNpbmcoKSkKLSAgICAgICAgICAgICAgICBhZHZhbmNlICs9IG1fZm9udC5sZXR0ZXJTcGFj
aW5nKCk7Ci0KLSAgICAgICAgICAgIC8vIEhhbmRsZSBqdXN0aWZpY2F0aW9uIGFuZCB3b3JkLXNw
YWNpbmcuCi0gICAgICAgICAgICBpbnQgY2hhcmFjdGVySW5kZXggPSBzcGFjZUNoYXJhY3RlcnNb
a107Ci0gICAgICAgICAgICAvLyBjaGFyYWN0ZXJJbmRleCBpcyBsZWZ0IGF0IHRoZSBpbml0aWFs
IHZhbHVlIG9mIC0xIGZvciBnbHlwaHMgdGhhdCBkbyBub3QgbWFwIGJhY2sgdG8gdHJlYXRlZC1h
cy1zcGFjZSBjaGFyYWN0ZXJzLgotICAgICAgICAgICAgaWYgKGNoYXJhY3RlckluZGV4ICE9IC0x
KSB7Ci0gICAgICAgICAgICAgICAgLy8gQWNjb3VudCBmb3IgcGFkZGluZy4gV2ViQ29yZSB1c2Vz
IHNwYWNlIHBhZGRpbmcgdG8ganVzdGlmeSB0ZXh0LgotICAgICAgICAgICAgICAgIC8vIFdlIGRp
c3RyaWJ1dGUgdGhlIHNwZWNpZmllZCBwYWRkaW5nIG92ZXIgdGhlIGF2YWlsYWJsZSBzcGFjZXMg
aW4gdGhlIHJ1bi4KLSAgICAgICAgICAgICAgICBpZiAobV9wYWRkaW5nKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIC8vIFVzZSBsZWZ0b3ZlciBwYWRkaW5nIGlmIG5vdCBldmVubHkgZGl2aXNpYmxl
IGJ5IG51bWJlciBvZiBzcGFjZXMuCi0gICAgICAgICAgICAgICAgICAgIGlmIChtX3BhZGRpbmcg
PCBtX3BhZFBlclNwYWNlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhZHZhbmNlICs9IG1f
cGFkZGluZzsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fcGFkZGluZyA9IDA7Ci0gICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX3BhZGRpbmcg
LT0gbV9wYWRQZXJTcGFjZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkdmFuY2UgKz0gbV9w
YWRQZXJTcGFjZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgIC8vIEFjY291bnQgZm9yIHdvcmQtc3BhY2luZy4KLSAgICAgICAgICAg
ICAgICBpZiAoY2hhcmFjdGVySW5kZXggPiAwICYmIG1fZm9udC53b3JkU3BhY2luZygpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIFVDaGFyIGNhbmRpZGF0ZVNwYWNlOwotICAgICAgICAgICAgICAg
ICAgICBpZiAobV9ydW4uaXM4Qml0KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBjYW5kaWRh
dGVTcGFjZSA9ICoobV9ydW4uZGF0YTgoY2hhcmFjdGVySW5kZXggLSAxKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZVNwYWNlID0g
KihtX3J1bi5kYXRhMTYoY2hhcmFjdGVySW5kZXggLSAxKSk7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgaWYgKCFGb250Q2FzY2FkZTo6dHJlYXRBc1NwYWNlKGNhbmRpZGF0ZVNwYWNlKSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGFkdmFuY2UgKz0gbV9mb250LndvcmRTcGFjaW5nKCk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgbV9ydW5X
aWR0aFNvRmFyICs9IGFkdmFuY2U7Ci0KLSAgICAgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gdGFr
ZSB0aGUgR09GRlNFVFMgZm9yIGNvbWJpbmluZyBnbHlwaHMgYW5kIHN0b3JlIHRoZW0gaW4gdGhl
IGdseXBoIGJ1ZmZlcgotICAgICAgICAvLyBhcyB3ZWxsLCBzbyB0aGF0IHdoZW4gdGhlIHRpbWUg
Y29tZXMgdG8gZHJhdyB0aG9zZSBnbHlwaHMsIHdlIGNhbiBhcHBseSB0aGUgYXBwcm9wcmlhdGUK
LSAgICAgICAgLy8gdHJhbnNsYXRpb24uCi0gICAgICAgIGlmIChnbHlwaEJ1ZmZlcikgewotICAg
ICAgICAgICAgR2x5cGhCdWZmZXJBZHZhbmNlIG9yaWdpbihvZmZzZXRYLCAtb2Zmc2V0WSk7Ci0g
ICAgICAgICAgICBpZiAoIWdseXBoQnVmZmVyLT5hZHZhbmNlc0NvdW50KCkpCi0gICAgICAgICAg
ICAgICAgZ2x5cGhCdWZmZXItPnNldEluaXRpYWxBZHZhbmNlKG9yaWdpbik7Ci0gICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgZ2x5cGhCdWZmZXItPmV4cGFuZExhc3RBZHZhbmNlKG9y
aWdpbik7Ci0gICAgICAgICAgICBHbHlwaEJ1ZmZlckFkdmFuY2UgZ2x5cGhBZHZhbmNlKC1vcmln
aW4ud2lkdGgoKSArIGFkdmFuY2UsIC1vcmlnaW4uaGVpZ2h0KCkpOwotICAgICAgICAgICAgZ2x5
cGhCdWZmZXItPmFkZChnbHlwaCwgZm9udERhdGEsIGdseXBoQWR2YW5jZSwgc3RyaW5nT2Zmc2V0
c1trXS52YWx1ZU9yKDApICsgc3RyaW5nT2Zmc2V0KTsKLSAgICAgICAgfQotCi0gICAgICAgIEZs
b2F0UmVjdCBnbHlwaEJvdW5kcyA9IGZvbnREYXRhLT5ib3VuZHNGb3JHbHlwaChnbHlwaCk7Ci0g
ICAgICAgIGdseXBoQm91bmRzLm1vdmUobV9nbHlwaE9yaWdpbi54KCksIG1fZ2x5cGhPcmlnaW4u
eSgpKTsKLSAgICAgICAgbV9taW5HbHlwaEJvdW5kaW5nQm94WCA9IHN0ZDo6bWluKG1fbWluR2x5
cGhCb3VuZGluZ0JveFgsIGdseXBoQm91bmRzLngoKSk7Ci0gICAgICAgIG1fbWF4R2x5cGhCb3Vu
ZGluZ0JveFggPSBzdGQ6Om1heChtX21heEdseXBoQm91bmRpbmdCb3hYLCBnbHlwaEJvdW5kcy5t
YXhYKCkpOwotICAgICAgICBtX21pbkdseXBoQm91bmRpbmdCb3hZID0gc3RkOjptaW4obV9taW5H
bHlwaEJvdW5kaW5nQm94WSwgZ2x5cGhCb3VuZHMueSgpKTsKLSAgICAgICAgbV9tYXhHbHlwaEJv
dW5kaW5nQm94WSA9IHN0ZDo6bWF4KG1fbWF4R2x5cGhCb3VuZGluZ0JveFksIGdseXBoQm91bmRz
Lm1heFkoKSk7Ci0gICAgICAgIG1fZ2x5cGhPcmlnaW4ubW92ZShhZHZhbmNlICsgb2Zmc2V0WCwg
LW9mZnNldFkpOwotCi0gICAgICAgIC8vIE11dGF0ZSB0aGUgZ2x5cGggYXJyYXkgdG8gY29udGFp
biBvdXIgYWx0ZXJlZCBhZHZhbmNlcy4KLSAgICAgICAgaWYgKG1fY29tcHV0aW5nT2Zmc2V0UG9z
aXRpb24pCi0gICAgICAgICAgICBhZHZhbmNlc1trXSA9IGFkdmFuY2U7Ci0gICAgfQotCi0gICAg
d2hpbGUgKG1fY29tcHV0aW5nT2Zmc2V0UG9zaXRpb24gJiYgbV9vZmZzZXRYID49IGxlZnRFZGdl
ICYmIG1fb2Zmc2V0WCA8IG1fcnVuV2lkdGhTb0ZhcikgewotICAgICAgICAvLyBUaGUgcG9zaXRp
b24gaXMgc29tZXdoZXJlIGluc2lkZSB0aGlzIHJ1bi4KLSAgICAgICAgaW50IHRyYWlsaW5nID0g
MDsKLSAgICAgICAgSFJFU1VMVCByYyA9IDo6U2NyaXB0WHRvQ1AobV9vZmZzZXRYIC0gbGVmdEVk
Z2UsIGNsdXN0ZXJzLnNpemUoKSwgZ2x5cGhzLnNpemUoKSwgY2x1c3RlcnMuZGF0YSgpLCB2aXN1
YWxBdHRyaWJ1dGVzLmRhdGEoKSwKLSAgICAgICAgICAgICAgICAgICAgYWR2YW5jZXMuZGF0YSgp
LCAmaXRlbS5hLCAmbV9vZmZzZXRQb3NpdGlvbiwgJnRyYWlsaW5nKTsKLSAgICAgICAgaWYgKEZB
SUxFRChyYykpIHsKLSAgICAgICAgICAgIFdURkxvZ0Fsd2F5cygiVW5pc2NyaWJlQ29udHJvbGxl
cjo6c2hhcGVBbmRQbGFjZUl0ZW06IFNjcmlwdFh0b0NQIGZhaWxlZCByYz0lbHgiLCByYyk7Ci0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAodHJhaWxpbmcg
JiYgbV9pbmNsdWRlUGFydGlhbEdseXBocyAmJiBtX29mZnNldFBvc2l0aW9uIDwgbGVuIC0gMSkg
ewotICAgICAgICAgICAgbV9vZmZzZXRQb3NpdGlvbiArPSBtX2N1cnJlbnRDaGFyYWN0ZXIgKyBt
X2l0ZW1zW2ldLmlDaGFyUG9zOwotICAgICAgICAgICAgbV9vZmZzZXRYICs9IG1fcnVuLnJ0bCgp
ID8gLXRyYWlsaW5nIDogdHJhaWxpbmc7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBt
X2NvbXB1dGluZ09mZnNldFBvc2l0aW9uID0gZmFsc2U7Ci0gICAgICAgICAgICBtX29mZnNldFBv
c2l0aW9uICs9IG1fY3VycmVudENoYXJhY3RlciArIG1faXRlbXNbaV0uaUNoYXJQb3M7Ci0gICAg
ICAgICAgICBpZiAodHJhaWxpbmcgJiYgbV9pbmNsdWRlUGFydGlhbEdseXBocykKLSAgICAgICAg
ICAgICAgIG1fb2Zmc2V0UG9zaXRpb24rKzsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFVuaXNjcmliZUNv
bnRyb2xsZXI6OnNoYXBlKGNvbnN0IFVDaGFyKiBzdHIsIGludCBsZW4sIFNDUklQVF9JVEVNIGl0
ZW0sIGNvbnN0IEZvbnQqIGZvbnREYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBWZWN0b3I8V09SRD4mIGdseXBocywgVmVjdG9yPFdPUkQ+JiBjbHVzdGVycywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPFNDUklQVF9WSVNBVFRSPiYgdmlzdWFsQXR0
cmlidXRlcykKLXsKLSAgICBIV25kREMgaGRjOwotICAgIEhGT05UIG9sZEZvbnQgPSAwOwotICAg
IEhSRVNVTFQgc2hhcGVSZXN1bHQgPSBFX1BFTkRJTkc7Ci0gICAgaW50IGdseXBoQ291bnQgPSAw
OwotCi0gICAgaWYgKCFmb250RGF0YSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZG8g
ewotICAgICAgICBzaGFwZVJlc3VsdCA9IFNjcmlwdFNoYXBlKGhkYywgZm9udERhdGEtPnNjcmlw
dENhY2hlKCksIHdjaGFyRnJvbShzdHIpLCBsZW4sIGdseXBocy5zaXplKCksICZpdGVtLmEsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhzLmRhdGEoKSwgY2x1c3RlcnMu
ZGF0YSgpLCB2aXN1YWxBdHRyaWJ1dGVzLmRhdGEoKSwgJmdseXBoQ291bnQpOwotICAgICAgICBp
ZiAoc2hhcGVSZXN1bHQgPT0gRV9QRU5ESU5HKSB7Ci0gICAgICAgICAgICAvLyBUaGUgc2NyaXB0
IGNhY2hlIGlzbid0IHByaW1lZCB3aXRoIGVub3VnaCBpbmZvIHlldC4gIFdlIG5lZWQgdG8gc2Vs
ZWN0IG91ciBIRk9OVCBpbnRvCi0gICAgICAgICAgICAvLyBhIERDIGFuZCBwYXNzIHRoZSBEQyBp
biB0byBTY3JpcHRTaGFwZS4KLSAgICAgICAgICAgIEFTU0VSVCghaGRjKTsKLSAgICAgICAgICAg
IGhkYy5zZXRIV25kKDApOwotICAgICAgICAgICAgSEZPTlQgaGZvbnQgPSBmb250RGF0YS0+cGxh
dGZvcm1EYXRhKCkuaGZvbnQoKTsKLSAgICAgICAgICAgIG9sZEZvbnQgPSAoSEZPTlQpU2VsZWN0
T2JqZWN0KGhkYywgaGZvbnQpOwotICAgICAgICB9IGVsc2UgaWYgKHNoYXBlUmVzdWx0ID09IEVf
T1VUT0ZNRU1PUlkpIHsKLSAgICAgICAgICAgIC8vIE5lZWQgdG8gcmVzaXplIG91ciBidWZmZXJz
LgotICAgICAgICAgICAgZ2x5cGhzLnJlc2l6ZShnbHlwaHMuc2l6ZSgpICogMik7Ci0gICAgICAg
ICAgICB2aXN1YWxBdHRyaWJ1dGVzLnJlc2l6ZShnbHlwaHMuc2l6ZSgpKTsKLSAgICAgICAgfQot
ICAgIH0gd2hpbGUgKHNoYXBlUmVzdWx0ID09IEVfUEVORElORyB8fCBzaGFwZVJlc3VsdCA9PSBF
X09VVE9GTUVNT1JZKTsKLQotICAgIGlmIChoZGMpCi0gICAgICAgIFNlbGVjdE9iamVjdChoZGMs
IG9sZEZvbnQpOwotCi0gICAgaWYgKEZBSUxFRChzaGFwZVJlc3VsdCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIGdseXBocy5zaHJpbmsoZ2x5cGhDb3VudCk7Ci0gICAgdmlzdWFsQXR0
cmlidXRlcy5zaHJpbmsoZ2x5cGhDb3VudCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1VuaXNjcmli
ZUNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Vbmlz
Y3JpYmVDb250cm9sbGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0NjI0Yzc5
YTA4Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vVW5pc2NyaWJlQ29udHJvbGxlci5oCisrKyAvZGV2L251bGwKQEAgLTEsOTAgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgVW5pc2NyaWJlQ29udHJvbGxl
cl9oCi0jZGVmaW5lIFVuaXNjcmliZUNvbnRyb2xsZXJfaAotCi0jaW5jbHVkZSAiRm9udENhc2Nh
ZGUuaCIKLSNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgotI2luY2x1ZGUgPHVzcDEwLmg+Ci0jaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFVuaXNj
cmliZUNvbnRyb2xsZXIgewotcHVibGljOgotICAgIFVuaXNjcmliZUNvbnRyb2xsZXIoY29uc3Qg
Rm9udENhc2NhZGUqLCBjb25zdCBUZXh0UnVuJiwgSGFzaFNldDxjb25zdCBGb250Kj4qIGZhbGxi
YWNrRm9udHMgPSAwKTsKLQotICAgIC8vIEFkdmFuY2UgYW5kIG1lYXN1cmUvcGxhY2UgdXAgdG8g
dGhlIHNwZWNpZmllZCBjaGFyYWN0ZXIuCi0gICAgdm9pZCBhZHZhbmNlKHVuc2lnbmVkIHRvLCBH
bHlwaEJ1ZmZlciogPSAwKTsKLQotICAgIC8vIENvbXB1dGUgdGhlIGNoYXJhY3RlciBvZmZzZXQg
Zm9yIGEgZ2l2ZW4geCBjb29yZGluYXRlLgotICAgIGludCBvZmZzZXRGb3JQb3NpdGlvbihpbnQg
eCwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocyk7Ci0KLSAgICAvLyBSZXR1cm5zIHRoZSB3aWR0
aCBvZiBldmVyeXRoaW5nIHdlJ3ZlIGNvbnN1bWVkIHNvIGZhci4KLSAgICBmbG9hdCBydW5XaWR0
aFNvRmFyKCkgY29uc3QgeyByZXR1cm4gbV9ydW5XaWR0aFNvRmFyOyB9Ci0KLSAgICBmbG9hdCBt
aW5HbHlwaEJvdW5kaW5nQm94WCgpIGNvbnN0IHsgcmV0dXJuIG1fbWluR2x5cGhCb3VuZGluZ0Jv
eFg7IH0KLSAgICBmbG9hdCBtYXhHbHlwaEJvdW5kaW5nQm94WCgpIGNvbnN0IHsgcmV0dXJuIG1f
bWF4R2x5cGhCb3VuZGluZ0JveFg7IH0KLSAgICBmbG9hdCBtaW5HbHlwaEJvdW5kaW5nQm94WSgp
IGNvbnN0IHsgcmV0dXJuIG1fbWluR2x5cGhCb3VuZGluZ0JveFk7IH0KLSAgICBmbG9hdCBtYXhH
bHlwaEJvdW5kaW5nQm94WSgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4R2x5cGhCb3VuZGluZ0JveFk7
IH0KLQotcHJpdmF0ZTogICAgCi0gICAgdm9pZCByZXNldENvbnRyb2xBbmRTdGF0ZSgpOwotCi0g
ICAgdm9pZCBpdGVtaXplU2hhcGVBbmRQbGFjZShjb25zdCBVQ2hhciosIHVuc2lnbmVkIHN0cmlu
Z09mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBGb250KiwgR2x5cGhCdWZmZXIqKTsKLSAg
ICBib29sIHNoYXBlQW5kUGxhY2VJdGVtKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQgc3RyaW5nT2Zm
c2V0LCB1bnNpZ25lZCBpbmRleCwgY29uc3QgRm9udCosIEdseXBoQnVmZmVyKik7Ci0gICAgYm9v
bCBzaGFwZShjb25zdCBVQ2hhciogc3RyLCBpbnQgbGVuLCBTQ1JJUFRfSVRFTSwgY29uc3QgRm9u
dCosCi0gICAgICAgICAgICAgICBWZWN0b3I8V09SRD4mIGdseXBocywgVmVjdG9yPFdPUkQ+JiBj
bHVzdGVycywKLSAgICAgICAgICAgICAgIFZlY3RvcjxTQ1JJUFRfVklTQVRUUj4mIHZpc3VhbEF0
dHJpYnV0ZXMpOwotCi0gICAgY29uc3QgRm9udENhc2NhZGUmIG1fZm9udDsKLSAgICBjb25zdCBU
ZXh0UnVuJiBtX3J1bjsKLSAgICBIYXNoU2V0PGNvbnN0IEZvbnQqPiogbV9mYWxsYmFja0ZvbnRz
OwotICAgIEZsb2F0UG9pbnQgbV9nbHlwaE9yaWdpbjsKLSAgICBmbG9hdCBtX21pbkdseXBoQm91
bmRpbmdCb3hYOwotICAgIGZsb2F0IG1fbWF4R2x5cGhCb3VuZGluZ0JveFg7Ci0gICAgZmxvYXQg
bV9taW5HbHlwaEJvdW5kaW5nQm94WTsKLSAgICBmbG9hdCBtX21heEdseXBoQm91bmRpbmdCb3hZ
OwotCi0gICAgU0NSSVBUX0NPTlRST0wgbV9jb250cm9sOwotICAgIFNDUklQVF9TVEFURSBtX3N0
YXRlOwotICAgIFZlY3RvcjxTQ1JJUFRfSVRFTT4gbV9pdGVtczsKLSAKLSAgICB1bnNpZ25lZCBt
X2N1cnJlbnRDaGFyYWN0ZXI7Ci0gICAgaW50IG1fZW5kOwotCi0gICAgZmxvYXQgbV9ydW5XaWR0
aFNvRmFyOwotICAgIGZsb2F0IG1fcGFkZGluZzsKLSAgICBmbG9hdCBtX3BhZFBlclNwYWNlOwot
Ci0gICAgYm9vbCBtX2NvbXB1dGluZ09mZnNldFBvc2l0aW9uOwotICAgIGJvb2wgbV9pbmNsdWRl
UGFydGlhbEdseXBoczsKLSAgICBmbG9hdCBtX29mZnNldFg7Ci0gICAgaW50IG1fb2Zmc2V0UG9z
aXRpb247Ci19OwotCi19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViQ29yZS9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJDb3JlL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAKaW5kZXggOTNmZTkw
ZTlkOWQuLjkyNjhlZmI2ODNiIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYkNvcmUvQ29tcGxleFRleHRDb250cm9sbGVyLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYkNvcmUvQ29tcGxleFRleHRDb250cm9sbGVyLmNwcApAQCAtMjUsOCArMjUs
NiBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKLSNpZiAhUExBVEZPUk0oV0lOKQotCiAjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5pdGlhbGl6ZVRocmVhZGluZy5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvQ29tcGxleFRleHRDb250cm9sbGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Gb250Q2Fz
Y2FkZS5oPgpAQCAtMzY3LDUgKzM2NSwzIEBAIFRFU1RfRihDb21wbGV4VGV4dENvbnRyb2xsZXJU
ZXN0LCBUb3RhbFdpZHRoV2l0aEp1c3RpZmljYXRpb24pCiB9CiAKIH0KLQotI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>385932</attachid>
            <date>2019-12-17 17:59:53 -0800</date>
            <delta_ts>2019-12-17 23:45:46 -0800</delta_ts>
            <desc>WIP patch</desc>
            <filename>complex9.diff</filename>
            <type>text/plain</type>
            <size>46247</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luLmNtYWtlIGIvU291cmNlL1dl
YkNvcmUvUGxhdGZvcm1XaW4uY21ha2UKaW5kZXggZDFmZDRlYjEyZGQuLmRlODZmZDNhMDQxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbi5jbWFrZQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9QbGF0Zm9ybVdpbi5jbWFrZQpAQCAtNTEsNiArNTEsNyBAQCBsaXN0KEFQUEVORCBX
ZWJDb3JlX1NPVVJDRVMKIAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db2xvckRpcmVjdDJE
LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db21wbGV4VGV4dENvbnRyb2xsZXJEaXJl
Y3RXcml0ZS5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vQ29tcGxleFRleHRDb250cm9s
bGVyVW5pc2NyaWJlLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9ESUJQaXhlbERhdGEu
Y3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Zsb2F0UG9pbnREaXJlY3QyRC5jcHAKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRmxvYXRSZWN0RGlyZWN0MkQuY3BwCkBAIC02OSw3ICs3
MCw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9TaW1wbGVGb250RGF0YVdpbi5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vVHJh
bnNmb3JtYXRpb25NYXRyaXhEaXJlY3QyRC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
VHJhbnNmb3JtYXRpb25NYXRyaXhXaW4uY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1Vu
aXNjcmliZUNvbnRyb2xsZXIuY3BwCiAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL3dpbi9Eb3dubG9h
ZEJ1bmRsZVdpbi5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL3dpbi9OZXR3b3JrU3RhdGVOb3Rp
Zmllcldpbi5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwCmluZGV4IDg0NzI4NDllYWQwLi42YjBhMGFj
YTU5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29tcGxl
eFRleHRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwCkBAIC00MywzMyArNDMsNiBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLSNpZiBQTEFURk9STShXSU4pICYmICFVU0UoRElSRUNUMkQpCi0KLWNs
YXNzIFRleHRMYXlvdXQgewotfTsKLQotdm9pZCBUZXh0TGF5b3V0RGVsZXRlcjo6b3BlcmF0b3Io
KShUZXh0TGF5b3V0KikgY29uc3QKLXsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPFRleHRMYXlvdXQs
IFRleHRMYXlvdXREZWxldGVyPiBGb250Q2FzY2FkZTo6Y3JlYXRlTGF5b3V0KFJlbmRlclRleHQm
LCBmbG9hdCwgYm9vbCkgY29uc3QKLXsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotZmxvYXQg
Rm9udENhc2NhZGU6OndpZHRoKFRleHRMYXlvdXQmLCB1bnNpZ25lZCwgdW5zaWduZWQsIEhhc2hT
ZXQ8Y29uc3QgRm9udCo+KikKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1
cm4gMDsKLX0KLQotdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmNvbGxlY3RDb21wbGV4VGV4
dFJ1bnNGb3JDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQsIHVuc2lnbmVkLCBjb25z
dCBGb250KikKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotI2Vsc2UKLQogY2xh
c3MgVGV4dExheW91dCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CkBA
IC0yMTYsNyArMTg5LDggQEAgdW5zaWduZWQgQ29tcGxleFRleHRDb250cm9sbGVyOjpvZmZzZXRG
b3JQb3NpdGlvbihmbG9hdCBoLCBib29sIGluY2x1ZGVQYXJ0aWFsR2wKIAogICAgICAgICAgICAg
ICAgIC8vIEZJWE1FOiBJbnN0ZWFkIG9mIGRpdmlkaW5nIHRoZSBnbHlwaCdzIGFkdmFuY2UgZXF1
YWxseSBiZXR3ZWVuIHRoZSBjaGFyYWN0ZXJzLCB0aGlzCiAgICAgICAgICAgICAgICAgLy8gY291
bGQgdXNlIHRoZSBnbHlwaCdzICJsaWdhdHVyZSBjYXJldHMiLiBUaGlzIGlzIGF2YWlsYWJsZSBp
biBDb3JlVGV4dCB2aWEgQ1RGb250R2V0TGlnYXR1cmVDYXJldFBvc2l0aW9ucygpLgotICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGhpdEluZGV4ID0gaGl0R2x5cGhTdGFydCArIChoaXRHbHlwaEVu
ZCAtIGhpdEdseXBoU3RhcnQpICogKG1fcnVuLmx0cigpID8geCAvIGFkanVzdGVkQWR2YW5jZSA6
IDEgLSB4IC8gYWRqdXN0ZWRBZHZhbmNlKTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBoaXRQ
b3MgPSAoaGl0R2x5cGhFbmQgLSBoaXRHbHlwaFN0YXJ0KSAqICh4IC8gYWRqdXN0ZWRBZHZhbmNl
KTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBoaXRJbmRleCA9ICBtX3J1bi5sdHIoKSA/IGhp
dEdseXBoU3RhcnQgKyBoaXRQb3MgOiBoaXRHbHlwaEVuZCAtIGhpdFBvcyAtIDE7CiAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgc3RyaW5nTGVuZ3RoID0gY29tcGxleFRleHRSdW4uc3RyaW5nTGVu
Z3RoKCk7CiAgICAgICAgICAgICAgICAgQ2FjaGVkVGV4dEJyZWFrSXRlcmF0b3IgY3Vyc29yUG9z
aXRpb25JdGVyYXRvcihTdHJpbmdWaWV3KGNvbXBsZXhUZXh0UnVuLmNoYXJhY3RlcnMoKSwgc3Ry
aW5nTGVuZ3RoKSwgVGV4dEJyZWFrSXRlcmF0b3I6Ok1vZGU6OkNhcmV0LCBudWxsQXRvbSgpKTsK
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjbHVzdGVyU3RhcnQ7CkBAIC03ODUsNyArNzU5LDgg
QEAgdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmFkanVzdEdseXBoc0FuZEFkdmFuY2VzKCkK
ICAgICAgICAgICAgICAgICBpZiAocnVuRm9yYmlkc1RyYWlsaW5nRXhwYW5zaW9uKQogICAgICAg
ICAgICAgICAgICAgICBmb3JiaWRUcmFpbGluZ0V4cGFuc2lvbiA9IG1fcnVuLmx0cigpID8gaXNM
YXN0Q2hhcmFjdGVyIDogaXNGaXJzdENoYXJhY3RlcjsKICAgICAgICAgICAgICAgICAvLyBIYW5k
bGUganVzdGlmaWNhdGlvbiBhbmQgd29yZC1zcGFjaW5nLgotICAgICAgICAgICAgICAgIGJvb2wg
aWRlb2dyYXBoID0gRm9udENhc2NhZGU6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woY2gpOworICAg
ICAgICAgICAgICAgIHN0YXRpYyBib29sIGV4cGFuZEFyb3VuZElkZW9ncmFwaHMgPSBGb250Q2Fz
Y2FkZTo6Y2FuRXhwYW5kQXJvdW5kSWRlb2dyYXBoc0luQ29tcGxleFRleHQoKTsKKyAgICAgICAg
ICAgICAgICBib29sIGlkZW9ncmFwaCA9IGV4cGFuZEFyb3VuZElkZW9ncmFwaHMgJiYgRm9udENh
c2NhZGU6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woY2gpOwogICAgICAgICAgICAgICAgIGlmICh0
cmVhdEFzU3BhY2UgfHwgaWRlb2dyYXBoIHx8IGZvcmNlTGVhZGluZ0V4cGFuc2lvbiB8fCBmb3Jj
ZVRyYWlsaW5nRXhwYW5zaW9uKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIERpc3RyaWJ1dGUg
dGhlIHJ1bidzIHRvdGFsIGV4cGFuc2lvbiBldmVubHkgb3ZlciBhbGwgZXhwYW5zaW9uIG9wcG9y
dHVuaXRpZXMgaW4gdGhlIHJ1bi4KICAgICAgICAgICAgICAgICAgICAgaWYgKG1fZXhwYW5zaW9u
KSB7CkBAIC04OTMsNiArODY4LDQgQEAgQ29tcGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4
dFJ1bjo6Q29tcGxleFRleHRSdW4oY29uc3QgVmVjdG9yPEZsb2F0U2l6ZT4mIGEKIHsKIH0KIAot
I2VuZGlmCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcAppbmRleCA0MTI3NDdhY2Y4Yy4uMGFlYzhl
NzBlYmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRD
YXNjYWRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2Fz
Y2FkZS5jcHAKQEAgLTQxLDEwICs0MSw2IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0cmlu
Z0hhc2guaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKLSNpZiBQTEFU
Rk9STShXSU4pICYmICFVU0UoRElSRUNUMkQpCi0jaW5jbHVkZSAiVW5pc2NyaWJlQ29udHJvbGxl
ci5oIgotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIFdU
Rjo6VW5pY29kZTsKQEAgLTM1MCwxNSArMzQ2LDYgQEAgZmxvYXQgRm9udENhc2NhZGU6OndpZHRo
T2ZUZXh0UmFuZ2UoY29uc3QgVGV4dFJ1biYgcnVuLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZAog
CiAgICAgYXV0byBjb2RlUGF0aFRvVXNlID0gY29kZVBhdGgocnVuKTsKICAgICBpZiAoY29kZVBh
dGhUb1VzZSA9PSBDb21wbGV4KSB7Ci0jaWYgUExBVEZPUk0oV0lOKSAmJiAhVVNFKERJUkVDVDJE
KQotICAgICAgICBVbmlzY3JpYmVDb250cm9sbGVyIGl0KHRoaXMsIHJ1bik7Ci0gICAgICAgIGl0
LmFkdmFuY2UoZnJvbSk7Ci0gICAgICAgIG9mZnNldEJlZm9yZVJhbmdlID0gaXQucnVuV2lkdGhT
b0ZhcigpOwotICAgICAgICBpdC5hZHZhbmNlKHRvKTsKLSAgICAgICAgb2Zmc2V0QWZ0ZXJSYW5n
ZSA9IGl0LnJ1bldpZHRoU29GYXIoKTsKLSAgICAgICAgaXQuYWR2YW5jZSh0byk7Ci0gICAgICAg
IHRvdGFsV2lkdGggPSBpdC5ydW5XaWR0aFNvRmFyKCk7Ci0jZWxzZQogICAgICAgICBDb21wbGV4
VGV4dENvbnRyb2xsZXIgY29tcGxleEl0ZXJhdG9yKCp0aGlzLCBydW4sIGZhbHNlLCBmYWxsYmFj
a0ZvbnRzKTsKICAgICAgICAgY29tcGxleEl0ZXJhdG9yLmFkdmFuY2UoZnJvbSwgbnVsbHB0ciwg
SW5jbHVkZVBhcnRpYWxHbHlwaHMsIGZhbGxiYWNrRm9udHMpOwogICAgICAgICBvZmZzZXRCZWZv
cmVSYW5nZSA9IGNvbXBsZXhJdGVyYXRvci5ydW5XaWR0aFNvRmFyKCk7CkBAIC0zNjYsNyArMzUz
LDYgQEAgZmxvYXQgRm9udENhc2NhZGU6OndpZHRoT2ZUZXh0UmFuZ2UoY29uc3QgVGV4dFJ1biYg
cnVuLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZAogICAgICAgICBvZmZzZXRBZnRlclJhbmdlID0g
Y29tcGxleEl0ZXJhdG9yLnJ1bldpZHRoU29GYXIoKTsKICAgICAgICAgY29tcGxleEl0ZXJhdG9y
LmFkdmFuY2UocnVuLmxlbmd0aCgpLCBudWxscHRyLCBJbmNsdWRlUGFydGlhbEdseXBocywgZmFs
bGJhY2tGb250cyk7CiAgICAgICAgIHRvdGFsV2lkdGggPSBjb21wbGV4SXRlcmF0b3IucnVuV2lk
dGhTb0ZhcigpOwotI2VuZGlmCiAgICAgfSBlbHNlIHsKICAgICAgICAgV2lkdGhJdGVyYXRvciBz
aW1wbGVJdGVyYXRvcih0aGlzLCBydW4sIGZhbGxiYWNrRm9udHMpOwogICAgICAgICBzaW1wbGVJ
dGVyYXRvci5hZHZhbmNlKGZyb20sIG51bGxwdHIpOwpAQCAtMTM5Nyw3ICsxMzgzLDYgQEAgZmxv
YXQgRm9udENhc2NhZGU6OmdldEdseXBoc0FuZEFkdmFuY2VzRm9yU2ltcGxlVGV4dChjb25zdCBU
ZXh0UnVuJiBydW4sIHVuc2lnbmUKICAgICByZXR1cm4gaW5pdGlhbEFkdmFuY2U7CiB9CiAKLSNp
ZiAhUExBVEZPUk0oV0lOKSB8fCBVU0UoRElSRUNUMkQpCiBmbG9hdCBGb250Q2FzY2FkZTo6Z2V0
R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIHVuc2ln
bmVkIGZyb20sIHVuc2lnbmVkIHRvLCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIEZvclRleHRF
bXBoYXNpc09yTm90IGZvclRleHRFbXBoYXNpcykgY29uc3QKIHsKICAgICBmbG9hdCBpbml0aWFs
QWR2YW5jZTsKQEAgLTE0MjcsNyArMTQxMiw2IEBAIGZsb2F0IEZvbnRDYXNjYWRlOjpnZXRHbHlw
aHNBbmRBZHZhbmNlc0ZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgdW5zaWduCiAK
ICAgICByZXR1cm4gaW5pdGlhbEFkdmFuY2U7CiB9Ci0jZW5kaWYKIAogdm9pZCBGb250Q2FzY2Fk
ZTo6ZHJhd0VtcGhhc2lzTWFya3NGb3JTaW1wbGVUZXh0KEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBBdG9tU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9h
dFBvaW50JiBwb2ludCwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8pIGNvbnN0CiB7CkBAIC0x
NDUyLDEzICsxNDM2LDcgQEAgdm9pZCBGb250Q2FzY2FkZTo6ZHJhd0dseXBoQnVmZmVyKEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgR2x5cGhCdWZmZXImIGcKIHsKICAgICAvLyBEcmF3
IGVhY2ggY29udGlndW91cyBydW4gb2YgZ2x5cGhzIHRoYXQgdXNlIHRoZSBzYW1lIGZvbnQgZGF0
YS4KICAgICBjb25zdCBGb250KiBmb250RGF0YSA9IGdseXBoQnVmZmVyLmZvbnRBdCgwKTsKLSNp
ZiBQTEFURk9STShXSU4pCi0gICAgRmxvYXRQb2ludCBzdGFydFBvaW50KHBvaW50LngoKSArIGds
eXBoQnVmZmVyLmluaXRpYWxBZHZhbmNlKCkud2lkdGgoKSwgcG9pbnQueSgpICsgZ2x5cGhCdWZm
ZXIuaW5pdGlhbEFkdmFuY2UoKS5oZWlnaHQoKSk7Ci0jZWxzZQotICAgIC8vIEZJWE1FOiBXaHkg
ZG8gd2Ugc3VidHJhY3QgdGhlIGluaXRpYWwgYWR2YW5jZSdzIGhlaWdodCBidXQgbm90IGl0cyB3
aWR0aD8/PwotICAgIC8vIFdlIHNob3VsZCB1c2UgdGhlIGxpbmUgYWJvdmUgZnJvbSBXaW5kb3dz
IGluc3RlYWQuCiAgICAgRmxvYXRQb2ludCBzdGFydFBvaW50KHBvaW50LngoKSwgcG9pbnQueSgp
IC0gZ2x5cGhCdWZmZXIuaW5pdGlhbEFkdmFuY2UoKS5oZWlnaHQoKSk7Ci0jZW5kaWYKICAgICBm
bG9hdCBuZXh0WCA9IHN0YXJ0UG9pbnQueCgpICsgZ2x5cGhCdWZmZXIuYWR2YW5jZUF0KDApLndp
ZHRoKCk7CiAgICAgZmxvYXQgbmV4dFkgPSBzdGFydFBvaW50LnkoKSArIGdseXBoQnVmZmVyLmFk
dmFuY2VBdCgwKS5oZWlnaHQoKTsKICAgICB1bnNpZ25lZCBsYXN0RnJvbSA9IDA7CkBAIC0xNTQ1
LDcgKzE1MjMsNiBAQCBmbG9hdCBGb250Q2FzY2FkZTo6ZmxvYXRXaWR0aEZvclNpbXBsZVRleHQo
Y29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IEZvbgogICAgIHJldHVybiBpdC5tX3J1
bldpZHRoU29GYXI7CiB9CiAKLSNpZiAhUExBVEZPUk0oV0lOKSB8fCBVU0UoRElSRUNUMkQpCiBm
bG9hdCBGb250Q2FzY2FkZTo6ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4m
IHJ1biwgSGFzaFNldDxjb25zdCBGb250Kj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cq
IGdseXBoT3ZlcmZsb3cpIGNvbnN0CiB7CiAgICAgQ29tcGxleFRleHRDb250cm9sbGVyIGNvbnRy
b2xsZXIoKnRoaXMsIHJ1biwgdHJ1ZSwgZmFsbGJhY2tGb250cyk7CkBAIC0xNTU3LDcgKzE1MzQs
NiBAQCBmbG9hdCBGb250Q2FzY2FkZTo6ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KGNvbnN0IFRl
eHRSdW4mIHJ1biwgSGFzaFNldDxjb25zdCBGbwogICAgIH0KICAgICByZXR1cm4gY29udHJvbGxl
ci50b3RhbFdpZHRoKCk7CiB9Ci0jZW5kaWYKIAogdm9pZCBGb250Q2FzY2FkZTo6YWRqdXN0U2Vs
ZWN0aW9uUmVjdEZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBMYXlvdXRSZWN0JiBz
ZWxlY3Rpb25SZWN0LCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bykgY29uc3QKIHsKQEAgLTE1
NzgsNyArMTU1NCw2IEBAIHZvaWQgRm9udENhc2NhZGU6OmFkanVzdFNlbGVjdGlvblJlY3RGb3JT
aW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgTGF5b3V0UmVjCiAgICAgc2VsZWN0aW9uUmVj
dC5zZXRXaWR0aChMYXlvdXRVbml0Ojpmcm9tRmxvYXRDZWlsKGFmdGVyV2lkdGggLSBiZWZvcmVX
aWR0aCkpOwogfQogCi0jaWYgIVBMQVRGT1JNKFdJTikgfHwgVVNFKERJUkVDVDJEKQogdm9pZCBG
b250Q2FzY2FkZTo6YWRqdXN0U2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRS
dW4mIHJ1biwgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgdW5zaWduZWQgZnJvbSwgdW5zaWdu
ZWQgdG8pIGNvbnN0CiB7CiAgICAgQ29tcGxleFRleHRDb250cm9sbGVyIGNvbnRyb2xsZXIoKnRo
aXMsIHJ1bik7CkBAIC0xNTkzLDcgKzE1NjgsNiBAQCB2b2lkIEZvbnRDYXNjYWRlOjphZGp1c3RT
ZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBMYXlvdXRSZQog
ICAgICAgICBzZWxlY3Rpb25SZWN0Lm1vdmUoYmVmb3JlV2lkdGgsIDApOwogICAgIHNlbGVjdGlv
blJlY3Quc2V0V2lkdGgoTGF5b3V0VW5pdDo6ZnJvbUZsb2F0Q2VpbChhZnRlcldpZHRoIC0gYmVm
b3JlV2lkdGgpKTsKIH0KLSNlbmRpZgogCiBpbnQgRm9udENhc2NhZGU6Om9mZnNldEZvclBvc2l0
aW9uRm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGZsb2F0IHgsIGJvb2wgaW5jbHVk
ZVBhcnRpYWxHbHlwaHMpIGNvbnN0CiB7CkBAIC0xNjM4LDEzICsxNjEyLDExIEBAIGludCBGb250
Q2FzY2FkZTo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mIHJ1
biwgZmxvYXQgeCwgYm9vCiAgICAgcmV0dXJuIG9mZnNldDsKIH0KIAotI2lmICFQTEFURk9STShX
SU4pIHx8IFVTRShESVJFQ1QyRCkKIGludCBGb250Q2FzY2FkZTo6b2Zmc2V0Rm9yUG9zaXRpb25G
b3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGZsb2F0IHgsIGJvb2wgaW5jbHVkZVBh
cnRpYWxHbHlwaHMpIGNvbnN0CiB7CiAgICAgQ29tcGxleFRleHRDb250cm9sbGVyIGNvbnRyb2xs
ZXIoKnRoaXMsIHJ1bik7CiAgICAgcmV0dXJuIGNvbnRyb2xsZXIub2Zmc2V0Rm9yUG9zaXRpb24o
eCwgaW5jbHVkZVBhcnRpYWxHbHlwaHMpOwogfQotI2VuZGlmCiAKICNpZiAhUExBVEZPUk0oQ09D
T0EpICYmICFVU0UoSEFSRkJVWlopCiAvLyBGSVhNRTogVW5pZnkgdGhpcyB3aXRoIHRoZSBtYWNP
UyBhbmQgaU9TIGltcGxlbWVudGF0aW9uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnRDYXNjYWRlLmgKaW5kZXggMmJjZGYxMDZlNmMuLjg5N2NkOTc4Zjg0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmgKQEAgLTIy
OSw2ICsyMjksNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBzdGQ6OnBhaXI8dW5zaWduZWQsIGJv
b2w+IGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJbnRlcm5hbChjb25zdCBVQ2hhciosIHVuc2ln
bmVkIGxlbmd0aCwgVGV4dERpcmVjdGlvbiwgRXhwYW5zaW9uQmVoYXZpb3IpOwogCiAgICAgZnJp
ZW5kIHN0cnVjdCBXaWR0aEl0ZXJhdG9yOworICAgIGZyaWVuZCBjbGFzcyBDb21wbGV4VGV4dENv
bnRyb2xsZXI7CiAKIHB1YmxpYzoKICNpZiBFTkFCTEUoVEVYVF9BVVRPU0laSU5HKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbXBsZXhUZXh0Q29u
dHJvbGxlclVuaXNjcmliZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vQ29tcGxleFRleHRDb250cm9sbGVyVW5pc2NyaWJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMC4uZDgwMjFjMTA2NGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vQ29tcGxleFRleHRDb250cm9sbGVyVW5p
c2NyaWJlLmNwcApAQCAtMCwwICsxLDE4NiBAQAorLyoKKyogQ29weXJpZ2h0IChDKSAyMDE3LTIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisqIGFyZSBtZXQ6CisqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFO
RCBBTlkKKyogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQorKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUworKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDb21w
bGV4VGV4dENvbnRyb2xsZXIuaCIKKworI2lmICFVU0UoRElSRUNUMkQpCisKKyNpbmNsdWRlICJG
b250Q2FjaGUuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgorI2luY2x1ZGUgIkhXbmREQy5o
IgorI2luY2x1ZGUgPHVzcDEwLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGJv
b2wgc2hhcGVCeVVuaXNjcmliZShjb25zdCBVQ2hhciogc3RyLCBpbnQgbGVuLCBTQ1JJUFRfSVRF
TSBpdGVtLCBjb25zdCBGb250KiBmb250RGF0YSwKKyAgICBWZWN0b3I8V09SRD4mIGdseXBocywg
VmVjdG9yPFdPUkQ+JiBjbHVzdGVycywKKyAgICBWZWN0b3I8U0NSSVBUX1ZJU0FUVFI+JiB2aXN1
YWxBdHRyaWJ1dGVzKQoreworICAgIEhXbmREQyBoZGM7CisgICAgSEZPTlQgb2xkRm9udCA9IDA7
CisgICAgSFJFU1VMVCBzaGFwZVJlc3VsdCA9IEVfUEVORElORzsKKyAgICBpbnQgZ2x5cGhDb3Vu
dCA9IDA7CisKKyAgICBpZiAoIWZvbnREYXRhKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBkbyB7CisgICAgICAgIHNoYXBlUmVzdWx0ID0gU2NyaXB0U2hhcGUoaGRjLCBmb250RGF0YS0+
c2NyaXB0Q2FjaGUoKSwgd2NoYXJGcm9tKHN0ciksIGxlbiwgZ2x5cGhzLnNpemUoKSwgJml0ZW0u
YSwKKyAgICAgICAgICAgIGdseXBocy5kYXRhKCksIGNsdXN0ZXJzLmRhdGEoKSwgdmlzdWFsQXR0
cmlidXRlcy5kYXRhKCksICZnbHlwaENvdW50KTsKKyAgICAgICAgaWYgKHNoYXBlUmVzdWx0ID09
IEVfUEVORElORykgeworICAgICAgICAgICAgLy8gVGhlIHNjcmlwdCBjYWNoZSBpc24ndCBwcmlt
ZWQgd2l0aCBlbm91Z2ggaW5mbyB5ZXQuIFdlIG5lZWQgdG8gc2VsZWN0IG91ciBIRk9OVCBpbnRv
CisgICAgICAgICAgICAvLyBhIERDIGFuZCBwYXNzIHRoZSBEQyBpbiB0byBTY3JpcHRTaGFwZS4K
KyAgICAgICAgICAgIEFTU0VSVCghaGRjKTsKKyAgICAgICAgICAgIGhkYy5zZXRIV25kKDApOwor
ICAgICAgICAgICAgSEZPTlQgaGZvbnQgPSBmb250RGF0YS0+cGxhdGZvcm1EYXRhKCkuaGZvbnQo
KTsKKyAgICAgICAgICAgIG9sZEZvbnQgPSAoSEZPTlQpU2VsZWN0T2JqZWN0KGhkYywgaGZvbnQp
OworICAgICAgICB9IGVsc2UgaWYgKHNoYXBlUmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpIHsKKyAg
ICAgICAgICAgIC8vIE5lZWQgdG8gcmVzaXplIG91ciBidWZmZXJzLgorICAgICAgICAgICAgZ2x5
cGhzLnJlc2l6ZShnbHlwaHMuc2l6ZSgpICogMik7CisgICAgICAgICAgICB2aXN1YWxBdHRyaWJ1
dGVzLnJlc2l6ZShnbHlwaHMuc2l6ZSgpKTsKKyAgICAgICAgfQorICAgIH0gd2hpbGUgKHNoYXBl
UmVzdWx0ID09IEVfUEVORElORyB8fCBzaGFwZVJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKKwor
ICAgIGlmIChoZGMpCisgICAgICAgIFNlbGVjdE9iamVjdChoZGMsIG9sZEZvbnQpOworCisgICAg
aWYgKEZBSUxFRChzaGFwZVJlc3VsdCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGds
eXBocy5zaHJpbmsoZ2x5cGhDb3VudCk7CisgICAgdmlzdWFsQXR0cmlidXRlcy5zaHJpbmsoZ2x5
cGhDb3VudCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBDb21wbGV4VGV4dENvbnRy
b2xsZXI6OmNvbGxlY3RDb21wbGV4VGV4dFJ1bnNGb3JDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiBj
cCwgdW5zaWduZWQgc3RyaW5nTGVuZ3RoLCB1bnNpZ25lZCBzdHJpbmdMb2NhdGlvbiwgY29uc3Qg
Rm9udCogZm9udCkKK3sKKyAgICBpZiAoIWZvbnQpIHsKKyAgICAgICAgLy8gQ3JlYXRlIGEgcnVu
IG9mIG1pc3NpbmcgZ2x5cGhzIGZyb20gdGhlIHByaW1hcnkgZm9udC4KKyAgICAgICAgbV9jb21w
bGV4VGV4dFJ1bnMuYXBwZW5kKENvbXBsZXhUZXh0UnVuOjpjcmVhdGUobV9mb250LnByaW1hcnlG
b250KCksIGNwLCBzdHJpbmdMb2NhdGlvbiwgc3RyaW5nTGVuZ3RoLCAwLCBzdHJpbmdMZW5ndGgs
IG1fcnVuLmx0cigpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBWZWN0b3I8U0NS
SVBUX0lURU0+IGl0ZW1zKDYpOworICAgIGludCBudW1JdGVtcyA9IDA7CisgICAgZm9yICg7Oykg
eworICAgICAgICBTQ1JJUFRfQ09OVFJPTCBjb250cm9sIHsgfTsKKyAgICAgICAgU0NSSVBUX1NU
QVRFIHN0YXRlIHsgfTsKKyAgICAgICAgLy8gU2V0IHVwIHRoZSBjb3JyZWN0IGRpcmVjdGlvbiBm
b3IgdGhlIHJ1bi4KKyAgICAgICAgc3RhdGUudUJpZGlMZXZlbCA9IG1fcnVuLnJ0bCgpOworICAg
ICAgICAvLyBMb2NrIHRoZSBjb3JyZWN0IGRpcmVjdGlvbmFsIG92ZXJyaWRlLgorICAgICAgICBz
dGF0ZS5mT3ZlcnJpZGVEaXJlY3Rpb24gPSBtX3J1bi5kaXJlY3Rpb25hbE92ZXJyaWRlKCk7CisK
KyAgICAgICAgLy8gU2NyaXB0SXRlbWl6ZSBtYXkgd3JpdGUgKGNNYXhJdGVtcyArIDEpIFNDUklQ
VF9JVEVNLgorICAgICAgICBIUkVTVUxUIGhyID0gU2NyaXB0SXRlbWl6ZSh3Y2hhckZyb20oY3Ap
LCBzdHJpbmdMZW5ndGgsIGl0ZW1zLnNpemUoKSAtIDEsICZjb250cm9sLCAmc3RhdGUsIGl0ZW1z
LmRhdGEoKSwgJm51bUl0ZW1zKTsKKyAgICAgICAgaWYgKGhyICE9IEVfT1VUT0ZNRU1PUlkpIHsK
KyAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGl0ZW1zLnJlc2l6ZShpdGVtcy5zaXplKCkgKiAyKTsKKyAgICB9
CisgICAgaXRlbXMucmVzaXplKG51bUl0ZW1zICsgMSk7CisKKyAgICBmb3IgKGludCBpID0gMDsg
aSA8IG51bUl0ZW1zOyBpKyspIHsKKyAgICAgICAgLy8gRGV0ZXJtaW5lIHRoZSBzdHJpbmcgZm9y
IHRoaXMgaXRlbS4KKyAgICAgICAgY29uc3QgVUNoYXIqIHN0ciA9IGNwICsgaXRlbXNbaV0uaUNo
YXJQb3M7CisgICAgICAgIGludCBsZW5ndGggPSBpdGVtc1tpKzFdLmlDaGFyUG9zIC0gaXRlbXNb
aV0uaUNoYXJQb3M7CisgICAgICAgIFNDUklQVF9JVEVNJiBpdGVtID0gaXRlbXNbaV07CisKKyAg
ICAgICAgLy8gU2V0IHVwIGJ1ZmZlcnMgdG8gaG9sZCB0aGUgcmVzdWx0cyBvZiBzaGFwaW5nIHRo
ZSBpdGVtLgorICAgICAgICBWZWN0b3I8V09SRD4gZ2x5cGhzOworICAgICAgICBWZWN0b3I8V09S
RD4gY2x1c3RlcnM7CisgICAgICAgIFZlY3RvcjxTQ1JJUFRfVklTQVRUUj4gdmlzdWFsQXR0cmli
dXRlczsKKyAgICAgICAgY2x1c3RlcnMucmVzaXplKGxlbmd0aCk7CisKKyAgICAgICAgLy8gU2hh
cGUgdGhlIGl0ZW0uCisgICAgICAgIC8vIFRoZSByZWNvbW1lbmRlZCBzaXplIGZvciB0aGUgZ2x5
cGggYnVmZmVyIGlzIDEuNSAqIHRoZSBjaGFyYWN0ZXIgbGVuZ3RoICsgMTYgaW4gdGhlIHVuaXNj
cmliZSBkb2NzLgorICAgICAgICAvLyBBcHBhcmVudGx5IHRoaXMgaXMgYSBnb29kIHNpemUgdG8g
YXZvaWQgaGF2aW5nIHRvIG1ha2UgcmVwZWF0ZWQgY2FsbHMgdG8gU2NyaXB0U2hhcGUuCisgICAg
ICAgIGdseXBocy5yZXNpemUoMS41ICogbGVuZ3RoICsgMTYpOworICAgICAgICB2aXN1YWxBdHRy
aWJ1dGVzLnJlc2l6ZShnbHlwaHMuc2l6ZSgpKTsKKworICAgICAgICBpZiAoIXNoYXBlQnlVbmlz
Y3JpYmUoc3RyLCBsZW5ndGgsIGl0ZW0sIGZvbnQsIGdseXBocywgY2x1c3RlcnMsIHZpc3VhbEF0
dHJpYnV0ZXMpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgLy8gV2Ugbm93IGhh
dmUgYSBjb2xsZWN0aW9uIG9mIGdseXBocy4KKyAgICAgICAgVmVjdG9yPEdPRkZTRVQ+IG9mZnNl
dHM7CisgICAgICAgIFZlY3RvcjxpbnQ+IGFkdmFuY2VzOworICAgICAgICBvZmZzZXRzLnJlc2l6
ZShnbHlwaHMuc2l6ZSgpKTsKKyAgICAgICAgYWR2YW5jZXMucmVzaXplKGdseXBocy5zaXplKCkp
OworICAgICAgICBIUkVTVUxUIHBsYWNlUmVzdWx0ID0gU2NyaXB0UGxhY2UoMCwgZm9udC0+c2Ny
aXB0Q2FjaGUoKSwgZ2x5cGhzLmRhdGEoKSwgZ2x5cGhzLnNpemUoKSwgdmlzdWFsQXR0cmlidXRl
cy5kYXRhKCksCisgICAgICAgICAgICAmaXRlbS5hLCBhZHZhbmNlcy5kYXRhKCksIG9mZnNldHMu
ZGF0YSgpLCAwKTsKKyAgICAgICAgaWYgKHBsYWNlUmVzdWx0ID09IEVfUEVORElORykgeworICAg
ICAgICAgICAgLy8gVGhlIHNjcmlwdCBjYWNoZSBpc24ndCBwcmltZWQgd2l0aCBlbm91Z2ggaW5m
byB5ZXQuIFdlIG5lZWQgdG8gc2VsZWN0IG91ciBIRk9OVCBpbnRvCisgICAgICAgICAgICAvLyBh
IERDIGFuZCBwYXNzIHRoZSBEQyBpbiB0byBTY3JpcHRQbGFjZS4KKyAgICAgICAgICAgIEhXbmRE
QyBoZGMoMCk7CisgICAgICAgICAgICBIRk9OVCBoZm9udCA9IGZvbnQtPnBsYXRmb3JtRGF0YSgp
Lmhmb250KCk7CisgICAgICAgICAgICBIRk9OVCBvbGRGb250ID0gKEhGT05UKVNlbGVjdE9iamVj
dChoZGMsIGhmb250KTsKKyAgICAgICAgICAgIHBsYWNlUmVzdWx0ID0gU2NyaXB0UGxhY2UoaGRj
LCBmb250LT5zY3JpcHRDYWNoZSgpLCBnbHlwaHMuZGF0YSgpLCBnbHlwaHMuc2l6ZSgpLCB2aXN1
YWxBdHRyaWJ1dGVzLmRhdGEoKSwKKyAgICAgICAgICAgICAgICAmaXRlbS5hLCBhZHZhbmNlcy5k
YXRhKCksIG9mZnNldHMuZGF0YSgpLCAwKTsKKyAgICAgICAgICAgIFNlbGVjdE9iamVjdChoZGMs
IG9sZEZvbnQpOworICAgICAgICB9CisgICAgCisgICAgICAgIGlmIChGQUlMRUQocGxhY2VSZXN1
bHQpIHx8IGdseXBocy5pc0VtcHR5KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICBWZWN0b3I8dW5zaWduZWQ+IHN0cmluZ0luZGljZXMoZ2x5cGhzLnNpemUoKSwgaXRlbS5pQ2hh
clBvcyk7CisKKyAgICAgICAgZm9yIChpbnQgayA9IGxlbmd0aCAtIDE7IGsgPj0gMDsgay0tKQor
ICAgICAgICAgICAgc3RyaW5nSW5kaWNlc1tjbHVzdGVyc1trXV0gPSBpdGVtLmlDaGFyUG9zICsg
azsKKworICAgICAgICBWZWN0b3I8RmxvYXRTaXplPiBiYXNlQWR2YW5jZXM7CisgICAgICAgIFZl
Y3RvcjxGbG9hdFBvaW50PiBvcmlnaW5zOworICAgICAgICBiYXNlQWR2YW5jZXMucmVzZXJ2ZUNh
cGFjaXR5KGdseXBocy5zaXplKCkpOworICAgICAgICBvcmlnaW5zLnJlc2VydmVDYXBhY2l0eShn
bHlwaHMuc2l6ZSgpKTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgZ2x5cGhz
LnNpemUoKTsgaysrKSB7CisgICAgICAgICAgICBjb25zdCBmbG9hdCBjTG9naWNhbFNjYWxlID0g
Zm9udC0+cGxhdGZvcm1EYXRhKCkudXNlR0RJKCkgPyAxIDogMzI7CisgICAgICAgICAgICBmbG9h
dCBhZHZhbmNlID0gYWR2YW5jZXNba10gLyBjTG9naWNhbFNjYWxlOworICAgICAgICAgICAgZmxv
YXQgb2Zmc2V0WCA9IG9mZnNldHNba10uZHUgLyBjTG9naWNhbFNjYWxlOworICAgICAgICAgICAg
ZmxvYXQgb2Zmc2V0WSA9IG9mZnNldHNba10uZHYgLyBjTG9naWNhbFNjYWxlOworCisgICAgICAg
ICAgICAvLyBNYXRjaCBBcHBLaXQncyBydWxlcyBmb3IgdGhlIGludGVnZXIgdnMuIG5vbi1pbnRl
Z2VyIHJlbmRlcmluZyBtb2Rlcy4KKyAgICAgICAgICAgIGlmICghZm9udC0+cGxhdGZvcm1EYXRh
KCkuaXNTeXN0ZW1Gb250KCkpIHsKKyAgICAgICAgICAgICAgICBhZHZhbmNlID0gcm91bmRmKGFk
dmFuY2UpOworICAgICAgICAgICAgICAgIG9mZnNldFggPSByb3VuZGYob2Zmc2V0WCk7CisgICAg
ICAgICAgICAgICAgb2Zmc2V0WSA9IHJvdW5kZihvZmZzZXRZKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gdGFrZSB0aGUgR09GRlNFVFMgZm9yIGNv
bWJpbmluZyBnbHlwaHMgYW5kIHN0b3JlIHRoZW0gaW4gdGhlIGdseXBoIGJ1ZmZlcgorICAgICAg
ICAgICAgLy8gYXMgd2VsbCwgc28gdGhhdCB3aGVuIHRoZSB0aW1lIGNvbWVzIHRvIGRyYXcgdGhv
c2UgZ2x5cGhzLCB3ZSBjYW4gYXBwbHkgdGhlIGFwcHJvcHJpYXRlCisgICAgICAgICAgICAvLyB0
cmFuc2xhdGlvbi4KKworICAgICAgICAgICAgYmFzZUFkdmFuY2VzLnVuY2hlY2tlZEFwcGVuZCh7
IGFkdmFuY2UsIDAgfSk7CisgICAgICAgICAgICBvcmlnaW5zLnVuY2hlY2tlZEFwcGVuZCh7IG9m
ZnNldFgsIC1vZmZzZXRZIH0pOworICAgICAgICB9CisgICAgICAgIEZsb2F0U2l6ZSBpbml0aWFs
QWR2YW5jZSA9IHRvRmxvYXRTaXplKG9yaWdpbnNbMF0pOworICAgICAgICBib29sIGx0ciA9ICFp
dGVtLmEuZlJUTDsKKyAgICAgICAgbV9jb21wbGV4VGV4dFJ1bnMuYXBwZW5kKENvbXBsZXhUZXh0
UnVuOjpjcmVhdGUoYmFzZUFkdmFuY2VzLCBvcmlnaW5zLCBnbHlwaHMsIHN0cmluZ0luZGljZXMs
IGluaXRpYWxBZHZhbmNlLCAqZm9udCwgY3AsIHN0cmluZ0xvY2F0aW9uLCBzdHJpbmdMZW5ndGgs
IGl0ZW0uaUNoYXJQb3MsIGl0ZW1zW2krMV0uaUNoYXJQb3MsIGx0cikpOworICAgIH0KK30KKwor
fQorCisjZW5kaWYgLy8gIVVTRShESVJFQ1QyRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q0dXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDR1dpbi5jcHAKaW5kZXggMGVmNjU1ZDhkMDUuLjMzZjg1
MmViNmU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
Rm9udENHV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
Rm9udENHV2luLmNwcApAQCAtMzQsNyArMzQsNiBAQAogI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgi
CiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgotI2lu
Y2x1ZGUgIlVuaXNjcmliZUNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJXZWJDb3JlVGV4dFJlbmRl
cmVyLmgiCiAjaW5jbHVkZSA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KICNpbmNsdWRl
IDx3dGYvTWF0aEV4dHJhcy5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0ZvbnRDYXNjYWRlRGlyZWN0MkQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYXNjYWRlRGlyZWN0MkQuY3BwCmluZGV4IDkxMTEyZDk2
NWM4Li5iMmQzNDcxYjhhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ZvbnRDYXNjYWRlRGlyZWN0MkQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FzY2FkZURpcmVjdDJELmNwcApAQCAtMzcsNyArMzcs
NiBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZURpcmVjdDJELmgi
CiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dERpcmVjdDJE
LmgiCi0jaW5jbHVkZSAiVW5pc2NyaWJlQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIldlYkNvcmVU
ZXh0UmVuZGVyZXIuaCIKICNpbmNsdWRlIDxkMmQxLmg+CiAjaW5jbHVkZSA8ZHdyaXRlXzMuaD4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250V2lu
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250V2luLmNwcApp
bmRleCAxY2FhODAyMmUyNi4uNTJjYjg4ZjUzZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250V2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFdpbi5jcHAKQEAgLTM1LDEwICszNSw2IEBACiAjaW5j
bHVkZSAiVGV4dFJ1bi5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKLSNpZiAhVVNF
KERJUkVDVDJEKQotI2luY2x1ZGUgIlVuaXNjcmliZUNvbnRyb2xsZXIuaCIKLSNlbmRpZgotCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIGJvb2wgRm9udENhc2NhZGU6OmNhblJldHVybkZhbGxiYWNr
Rm9udHNGb3JDb21wbGV4VGV4dCgpCkBAIC01MSw3MiArNDcsNCBAQCBib29sIEZvbnRDYXNjYWRl
OjpjYW5FeHBhbmRBcm91bmRJZGVvZ3JhcGhzSW5Db21wbGV4VGV4dCgpCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi0jaWYgIVVTRShESVJFQ1QyRCkKLQotdm9pZCBGb250Q2FzY2FkZTo6YWRqdXN0
U2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgTGF5b3V0UmVj
dCYgc2VsZWN0aW9uUmVjdCwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8pIGNvbnN0Ci17Ci0g
ICAgVW5pc2NyaWJlQ29udHJvbGxlciBpdCh0aGlzLCBydW4pOwotICAgIGl0LmFkdmFuY2UoZnJv
bSk7Ci0gICAgZmxvYXQgYmVmb3JlV2lkdGggPSBpdC5ydW5XaWR0aFNvRmFyKCk7Ci0gICAgaXQu
YWR2YW5jZSh0byk7Ci0gICAgZmxvYXQgYWZ0ZXJXaWR0aCA9IGl0LnJ1bldpZHRoU29GYXIoKTsK
LQotICAgIGlmIChydW4ucnRsKCkpIHsKLSAgICAgICAgaXQuYWR2YW5jZShydW4ubGVuZ3RoKCkp
OwotICAgICAgICBzZWxlY3Rpb25SZWN0Lm1vdmUoaXQucnVuV2lkdGhTb0ZhcigpIC0gYWZ0ZXJX
aWR0aCwgMCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHNlbGVjdGlvblJlY3QubW92ZShiZWZvcmVX
aWR0aCwgMCk7Ci0gICAgc2VsZWN0aW9uUmVjdC5zZXRXaWR0aChhZnRlcldpZHRoIC0gYmVmb3Jl
V2lkdGgpOwotfQotCi1mbG9hdCBGb250Q2FzY2FkZTo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JD
b21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRv
LCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIEZvclRleHRFbXBoYXNpc09yTm90IGZvclRleHRF
bXBoYXNpcykgY29uc3QKLXsKLSAgICBpZiAoZm9yVGV4dEVtcGhhc2lzKSB7Ci0gICAgICAgIC8v
IEZJWE1FOiBBZGQgZm9yVGV4dEVtcGhhc2lzIHBhcmVtZXRlciB0byBVbmlzY3JpYmVDb250cm9s
bGVyIGFuZCB1c2UgaXQuCi0gICAgICAgIExPR19FUlJPUigiTm90IGltcGxlbWVudGVkIGZvciB0
ZXh0IGVtcGhhc2lzLiIpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBVbmlzY3Jp
YmVDb250cm9sbGVyIGNvbnRyb2xsZXIodGhpcywgcnVuKTsKLSAgICBjb250cm9sbGVyLmFkdmFu
Y2UoZnJvbSk7Ci0gICAgZmxvYXQgYmVmb3JlV2lkdGggPSBjb250cm9sbGVyLnJ1bldpZHRoU29G
YXIoKTsKLSAgICBjb250cm9sbGVyLmFkdmFuY2UodG8sICZnbHlwaEJ1ZmZlcik7Ci0KLSAgICBp
ZiAoZ2x5cGhCdWZmZXIuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGZsb2F0
IGFmdGVyV2lkdGggPSBjb250cm9sbGVyLnJ1bldpZHRoU29GYXIoKTsKLQotICAgIGlmIChydW4u
cnRsKCkpIHsKLSAgICAgICAgY29udHJvbGxlci5hZHZhbmNlKHJ1bi5sZW5ndGgoKSk7Ci0gICAg
ICAgIHJldHVybiBjb250cm9sbGVyLnJ1bldpZHRoU29GYXIoKSAtIGFmdGVyV2lkdGg7Ci0gICAg
fQotICAgIHJldHVybiBiZWZvcmVXaWR0aDsKLX0KLQotZmxvYXQgRm9udENhc2NhZGU6OmZsb2F0
V2lkdGhGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgRm9u
dCo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93KSBjb25zdAot
ewotICAgIFVuaXNjcmliZUNvbnRyb2xsZXIgY29udHJvbGxlcih0aGlzLCBydW4sIGZhbGxiYWNr
Rm9udHMpOwotICAgIGNvbnRyb2xsZXIuYWR2YW5jZShydW4ubGVuZ3RoKCkpOwotICAgIGlmIChn
bHlwaE92ZXJmbG93KSB7Ci0gICAgICAgIGdseXBoT3ZlcmZsb3ctPnRvcCA9IHN0ZDo6bWF4PGlu
dD4oZ2x5cGhPdmVyZmxvdy0+dG9wLCBjZWlsZigtY29udHJvbGxlci5taW5HbHlwaEJvdW5kaW5n
Qm94WSgpKSAtIChnbHlwaE92ZXJmbG93LT5jb21wdXRlQm91bmRzID8gMCA6IGZvbnRNZXRyaWNz
KCkuYXNjZW50KCkpKTsKLSAgICAgICAgZ2x5cGhPdmVyZmxvdy0+Ym90dG9tID0gc3RkOjptYXg8
aW50PihnbHlwaE92ZXJmbG93LT5ib3R0b20sIGNlaWxmKGNvbnRyb2xsZXIubWF4R2x5cGhCb3Vu
ZGluZ0JveFkoKSkgLSAoZ2x5cGhPdmVyZmxvdy0+Y29tcHV0ZUJvdW5kcyA/IDAgIDogZm9udE1l
dHJpY3MoKS5kZXNjZW50KCkpKTsKLSAgICAgICAgZ2x5cGhPdmVyZmxvdy0+bGVmdCA9IHN0ZDo6
bWF4PGludD4oMCwgY2VpbGYoLWNvbnRyb2xsZXIubWluR2x5cGhCb3VuZGluZ0JveFgoKSkpOwot
ICAgICAgICBnbHlwaE92ZXJmbG93LT5yaWdodCA9IHN0ZDo6bWF4PGludD4oMCwgY2VpbGYoY29u
dHJvbGxlci5tYXhHbHlwaEJvdW5kaW5nQm94WCgpIC0gY29udHJvbGxlci5ydW5XaWR0aFNvRmFy
KCkpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGNvbnRyb2xsZXIucnVuV2lkdGhTb0ZhcigpOwotfQot
Ci1pbnQgRm9udENhc2NhZGU6Om9mZnNldEZvclBvc2l0aW9uRm9yQ29tcGxleFRleHQoY29uc3Qg
VGV4dFJ1biYgcnVuLCBmbG9hdCB4RmxvYXQsIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNv
bnN0Ci17Ci0gICAgLy8gRklYTUU6IFRoaXMgdHJ1bmNhdGlvbiBpcyBub3QgYSBwcm9ibGVtIGZv
ciBIVE1MLCBidXQgb25seSBhZmZlY3RzIFNWRywgd2hpY2ggcGFzc2VzIGZsb2F0aW5nLXBvaW50
IG51bWJlcnMKLSAgICAvLyB0byBGb250Q2FzY2FkZTo6b2Zmc2V0Rm9yUG9zaXRpb24oKS4gQnVn
IGh0dHA6Ly93ZWJraXQub3JnL2IvNDA2NzMgdHJhY2tzIGZpeGluZyB0aGlzIHByb2JsZW0uCi0g
ICAgaW50IHggPSBzdGF0aWNfY2FzdDxpbnQ+KHhGbG9hdCk7Ci0KLSAgICBVbmlzY3JpYmVDb250
cm9sbGVyIGNvbnRyb2xsZXIodGhpcywgcnVuKTsKLSAgICByZXR1cm4gY29udHJvbGxlci5vZmZz
ZXRGb3JQb3NpdGlvbih4LCBpbmNsdWRlUGFydGlhbEdseXBocyk7Ci19Ci0KLSNlbmRpZgotCiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vVW5pc2Ny
aWJlQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
VW5pc2NyaWJlQ29udHJvbGxlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3
NGM0ODYwZmYxLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vVW5pc2NyaWJlQ29udHJvbGxlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0NTkg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJVbmlzY3JpYmVDb250cm9sbGVyLmgiCi0KLSNpbmNsdWRlICJGb250Lmgi
Ci0jaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKLSNpbmNsdWRlICJIV25kREMuaCIKLSNpbmNsdWRl
ICJUZXh0UnVuLmgiCi0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC93aW4vV0NoYXJTdHJpbmdFeHRyYXMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotdXNp
bmcgbmFtZXNwYWNlIFdURjo6VW5pY29kZTsKLQotLy8gRklYTUU6IFJlYXJjaGl0ZWN0IHRoaXMg
dG8gYmUgbW9yZSBsaWtlIFdpZHRoSXRlcmF0b3IgaW4gRm9udC5jcHAuICBIYXZlIGFuIGFkdmFu
Y2UoKSBtZXRob2QKLS8vIHRoYXQgZG9lcyBzdHVmZiBpbiB0aGF0IG1ldGhvZCBpbnN0ZWFkIG9m
IGRvaW5nIGV2ZXJ5dGhpbmcgaW4gdGhlIGNvbnN0cnVjdG9yLiAgSGF2ZSBhZHZhbmNlKCkKLS8v
IHRha2UgdGhlIEdseXBoQnVmZmVyIGFzIGFuIGFyZyBzbyB0aGF0IHdlIGRvbid0IGhhdmUgdG8g
cG9wdWxhdGUgdGhlIGdseXBoIGJ1ZmZlciB3aGVuCi0vLyBtZWFzdXJpbmcuCi1VbmlzY3JpYmVD
b250cm9sbGVyOjpVbmlzY3JpYmVDb250cm9sbGVyKGNvbnN0IEZvbnRDYXNjYWRlKiBmb250LCBj
b25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzKQot
ICAgIDogbV9mb250KCpmb250KQotICAgICwgbV9ydW4ocnVuKQotICAgICwgbV9mYWxsYmFja0Zv
bnRzKGZhbGxiYWNrRm9udHMpCi0gICAgLCBtX21pbkdseXBoQm91bmRpbmdCb3hYKHN0ZDo6bnVt
ZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgoKSkKLSAgICAsIG1fbWF4R2x5cGhCb3VuZGluZ0JveFgo
c3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46Om1pbigpKQotICAgICwgbV9taW5HbHlwaEJvdW5k
aW5nQm94WShzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6bWF4KCkpCi0gICAgLCBtX21heEds
eXBoQm91bmRpbmdCb3hZKHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptaW4oKSkKLSAgICAs
IG1fY3VycmVudENoYXJhY3RlcigwKQotICAgICwgbV9lbmQocnVuLmxlbmd0aCgpKQotICAgICwg
bV9ydW5XaWR0aFNvRmFyKDApCi0gICAgLCBtX3BhZGRpbmcocnVuLmV4cGFuc2lvbigpKQotICAg
ICwgbV9jb21wdXRpbmdPZmZzZXRQb3NpdGlvbihmYWxzZSkKLSAgICAsIG1faW5jbHVkZVBhcnRp
YWxHbHlwaHMoZmFsc2UpCi0gICAgLCBtX29mZnNldFgoMCkKLSAgICAsIG1fb2Zmc2V0UG9zaXRp
b24oMCkKLXsKLSAgICBpZiAoIW1fcGFkZGluZykKLSAgICAgICAgbV9wYWRQZXJTcGFjZSA9IDA7
Ci0gICAgZWxzZSB7Ci0gICAgICAgIGZsb2F0IG51bVNwYWNlcyA9IDA7Ci0gICAgICAgIGZvciAo
aW50IHMgPSAwOyBzIDwgbV9ydW4ubGVuZ3RoKCk7IHMrKykgewotICAgICAgICAgICAgaWYgKEZv
bnRDYXNjYWRlOjp0cmVhdEFzU3BhY2UobV9ydW5bc10pKQotICAgICAgICAgICAgICAgIG51bVNw
YWNlcysrOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG51bVNwYWNlcyA9PSAwKQotICAgICAg
ICAgICAgbV9wYWRQZXJTcGFjZSA9IDA7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fcGFk
UGVyU3BhY2UgPSBtX3BhZGRpbmcgLyBudW1TcGFjZXM7Ci0gICAgfQotCi0gICAgLy8gTnVsbCBv
dXQgb3VyIHVuaXNjcmliZSBzdHJ1Y3RzCi0gICAgcmVzZXRDb250cm9sQW5kU3RhdGUoKTsKLX0K
LQotaW50IFVuaXNjcmliZUNvbnRyb2xsZXI6Om9mZnNldEZvclBvc2l0aW9uKGludCB4LCBib29s
IGluY2x1ZGVQYXJ0aWFsR2x5cGhzKQotewotICAgIG1fY29tcHV0aW5nT2Zmc2V0UG9zaXRpb24g
PSB0cnVlOwotICAgIG1faW5jbHVkZVBhcnRpYWxHbHlwaHMgPSBpbmNsdWRlUGFydGlhbEdseXBo
czsKLSAgICBtX29mZnNldFggPSB4OwotICAgIG1fb2Zmc2V0UG9zaXRpb24gPSAwOwotICAgIGFk
dmFuY2UobV9ydW4ubGVuZ3RoKCkpOwotICAgIGlmIChtX2NvbXB1dGluZ09mZnNldFBvc2l0aW9u
KSB7Ci0gICAgICAgIC8vIFRoZSBwb2ludCBpcyB0byB0aGUgbGVmdCBvciB0byB0aGUgcmlnaHQg
b2YgdGhlIGVudGlyZSBydW4uCi0gICAgICAgIGlmICgobV9vZmZzZXRYID49IG1fcnVuV2lkdGhT
b0ZhciAmJiBtX3J1bi5sdHIoKSkgfHwgKG1fb2Zmc2V0WCA8IDAgJiYgbV9ydW4ucnRsKCkpKQot
ICAgICAgICAgICAgbV9vZmZzZXRQb3NpdGlvbiA9IG1fZW5kOwotICAgIH0KLSAgICBtX2NvbXB1
dGluZ09mZnNldFBvc2l0aW9uID0gZmFsc2U7Ci0gICAgcmV0dXJuIG1fb2Zmc2V0UG9zaXRpb247
Ci19Ci0KLXZvaWQgVW5pc2NyaWJlQ29udHJvbGxlcjo6YWR2YW5jZSh1bnNpZ25lZCBvZmZzZXQs
IEdseXBoQnVmZmVyKiBnbHlwaEJ1ZmZlcikKLXsKLSAgICAvLyBGSVhNRTogV2UgcmVhbGx5IHdh
bnQgdG8gYmUgdXNpbmcgYSBuZXdlciB2ZXJzaW9uIG9mIFVuaXNjcmliZSB0aGF0IHN1cHBvcnRz
IHRoZSBuZXcgT3BlblR5cGUKLSAgICAvLyBmdW5jdGlvbnMuICBUaG9zZSBmdW5jdGlvbnMgd291
bGQgYWxsb3cgdXMgdG8gdHVybiBvZmYga2VybmluZyBhbmQgbGlnYXR1cmVzLiAgV2l0aG91dCBi
ZWluZyBhYmxlCi0gICAgLy8gdG8gZG8gdGhhdCwgd2Ugd2lsbCBoYXZlIGJ1Z2d5IGxpbmUgYnJl
YWtpbmcgYW5kIG1ldHJpY3Mgd2hlbiBzaW1wbGUgYW5kIGNvbXBsZXggdGV4dCBhcmUgY2xvc2UK
LSAgICAvLyB0b2dldGhlciAodGhlIGNvbXBsZXggY29kZSBwYXRoIHdpbGwgbmFycm93IHRoZSB0
ZXh0IGJlY2F1c2Ugb2Yga2VybmluZyBhbmQgbGlnYXR1cmVzIGFuZCB0aGVuCi0gICAgLy8gd2hl
biBiaWRpIHByb2Nlc3Npbmcgc3BsaXRzIGludG8gbXVsdGlwbGUgcnVucywgdGhlIHNpbXBsZSBw
b3J0aW9ucyB3aWxsIGdldCB3aWRlciBhbmQgY2F1c2UgdXMgdG8KLSAgICAvLyBzcGlsbCBvZmYg
dGhlIGVkZ2Ugb2YgYSBsaW5lKS4KLSAgICBpZiAoc3RhdGljX2Nhc3Q8aW50PihvZmZzZXQpID4g
bV9lbmQpCi0gICAgICAgIG9mZnNldCA9IG1fZW5kOwotCi0gICAgaW50IGxlbmd0aCA9IG9mZnNl
dCAtIG1fY3VycmVudENoYXJhY3RlcjsKLSAgICBpZiAobGVuZ3RoIDw9IDApCi0gICAgICAgIHJl
dHVybjsKLQotICAgIFN0cmluZyBidWZmZXJGb3IxNkJpdERhdGE7Ci0KLSAgICAvLyBJdGVtaXpl
IHRoZSBzdHJpbmcuCi0gICAgY29uc3QgVUNoYXIqIGNwID0gbnVsbHB0cjsKLSAgICBpZiAobV9y
dW4uaXM4Qml0KCkpIHsKLSAgICAgICAgLy8gVW5pc2NyaWJlIG9ubHkgZGVhbHMgd2l0aCAxNi1i
aXQgY2hhcmFjdGVycy4gTXVzdCBnZW5lcmF0ZSB0aGVtIG5vdy4KLSAgICAgICAgYnVmZmVyRm9y
MTZCaXREYXRhID0gU3RyaW5nOjptYWtlMTZCaXRGcm9tOEJpdFNvdXJjZShtX3J1bi5kYXRhOCht
X2N1cnJlbnRDaGFyYWN0ZXIpLCBsZW5ndGgpOwotICAgICAgICBjcCA9IGJ1ZmZlckZvcjE2Qml0
RGF0YS5jaGFyYWN0ZXJzMTYoKTsKLSAgICB9IGVsc2UKLSAgICAgICAgY3AgPSBtX3J1bi5kYXRh
MTYobV9jdXJyZW50Q2hhcmFjdGVyKTsKLQotICAgIHVuc2lnbmVkIGJhc2VDaGFyYWN0ZXIgPSBt
X2N1cnJlbnRDaGFyYWN0ZXI7Ci0KLSAgICAvLyBXZSBicmVhayB1cCBpdGVtaXphdGlvbiBvZiB0
aGUgc3RyaW5nIGJ5IGZvbnREYXRhIGFuZCAoaWYgbmVlZGVkKSB0aGUgdXNlIG9mIHNtYWxsIGNh
cHMuCi0KLSAgICAvLyBGSVhNRTogSXQncyBpbmNvbnNpc3RlbnQgdGhhdCB3ZSB1c2UgbG9naWNh
bCBvcmRlciB3aGVuIGl0ZW1pemluZywgc2luY2UgdGhpcwotICAgIC8vIGRvZXMgbm90IG1hdGNo
IG5vcm1hbCBSVEwuCi0KLSAgICAvLyBGSVhNRTogVGhpcyBmdW5jdGlvbiBzaG91bGQgZGVjb2Rl
IHN1cnJvZ2F0ZSBwYWlycy4gQ3VycmVudGx5IGl0IG1ha2VzIGxpdHRsZSBkaWZmZXJlbmNlIHRo
YXQKLSAgICAvLyBpdCBkb2VzIG5vdCBiZWNhdXNlIHRoZSBmb250IGNhY2hlIG9uIFdpbmRvd3Mg
ZG9lcyBub3Qgc3VwcG9ydCBub24tQk1QIGNoYXJhY3RlcnMuCi0gICAgVmVjdG9yPFVDaGFyLCAy
NTY+IHNtYWxsQ2Fwc0J1ZmZlcjsKLSAgICBpZiAobV9mb250LmlzU21hbGxDYXBzKCkpCi0gICAg
ICAgIHNtYWxsQ2Fwc0J1ZmZlci5yZXNpemUobGVuZ3RoKTsKLQotICAgIHVuc2lnbmVkIGluZGV4
T2ZGb250VHJhbnNpdGlvbiA9IG1fcnVuLnJ0bCgpID8gbGVuZ3RoIC0gMSA6IDA7Ci0gICAgY29u
c3QgVUNoYXIqIGN1cnIgPSBtX3J1bi5ydGwoKSA/IGNwICsgbGVuZ3RoICAtIDEgOiBjcDsKLSAg
ICBjb25zdCBVQ2hhciogZW5kID0gbV9ydW4ucnRsKCkgPyBjcCAtIDEgOiBjcCArIGxlbmd0aDsK
LQotICAgIGNvbnN0IEZvbnQqIGZvbnREYXRhOwotICAgIGNvbnN0IEZvbnQqIG5leHRGb250RGF0
YSA9IG1fZm9udC5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoKmN1cnIsIGZhbHNlKS5mb250OwotCi0g
ICAgVUNoYXIgbmV3QyA9IDA7Ci0KLSAgICBib29sIGlzU21hbGxDYXBzOwotICAgIGJvb2wgbmV4
dElzU21hbGxDYXBzID0gbV9mb250LmlzU21hbGxDYXBzKCkgJiYgIShVX0dFVF9HQ19NQVNLKCpj
dXJyKSAmIFVfR0NfTV9NQVNLKSAmJiAobmV3QyA9IHVfdG91cHBlcigqY3VycikpICE9ICpjdXJy
OwotCi0gICAgaWYgKG5leHRJc1NtYWxsQ2FwcykKLSAgICAgICAgc21hbGxDYXBzQnVmZmVyW2N1
cnIgLSBjcF0gPSBuZXdDOwotCi0gICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgY3VyciA9IG1f
cnVuLnJ0bCgpID8gY3VyciAtIDEgOiBjdXJyICsgMTsKLSAgICAgICAgaWYgKGN1cnIgPT0gZW5k
KQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgZm9udERhdGEgPSBuZXh0Rm9udERhdGE7
Ci0gICAgICAgIGlzU21hbGxDYXBzID0gbmV4dElzU21hbGxDYXBzOwotICAgICAgICBpbnQgaW5k
ZXggPSBjdXJyIC0gY3A7Ci0gICAgICAgIFVDaGFyIGMgPSAqY3VycjsKLQotICAgICAgICBib29s
IGZvcmNlU21hbGxDYXBzID0gaXNTbWFsbENhcHMgJiYgKFVfR0VUX0dDX01BU0soYykgJiBVX0dD
X01fTUFTSyk7Ci0gICAgICAgIG5leHRGb250RGF0YSA9IG1fZm9udC5nbHlwaERhdGFGb3JDaGFy
YWN0ZXIoKmN1cnIsIGZhbHNlLCBmb3JjZVNtYWxsQ2FwcyA/IFNtYWxsQ2Fwc1ZhcmlhbnQgOiBB
dXRvVmFyaWFudCkuZm9udDsKLSAgICAgICAgaWYgKG1fZm9udC5pc1NtYWxsQ2FwcygpKSB7Ci0g
ICAgICAgICAgICBuZXh0SXNTbWFsbENhcHMgPSBmb3JjZVNtYWxsQ2FwcyB8fCAobmV3QyA9IHVf
dG91cHBlcihjKSkgIT0gYzsKLSAgICAgICAgICAgIGlmIChuZXh0SXNTbWFsbENhcHMpCi0gICAg
ICAgICAgICAgICAgc21hbGxDYXBzQnVmZmVyW2luZGV4XSA9IGZvcmNlU21hbGxDYXBzID8gYyA6
IG5ld0M7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobV9mYWxsYmFja0ZvbnRzICYmIGZvbnRE
YXRhICYmIG5leHRGb250RGF0YSAhPSBmb250RGF0YSAmJiBmb250RGF0YSAhPSAmbV9mb250LnBy
aW1hcnlGb250KCkpCi0gICAgICAgICAgICBtX2ZhbGxiYWNrRm9udHMtPmFkZChmb250RGF0YSk7
Ci0KLSAgICAgICAgaWYgKG5leHRGb250RGF0YSAhPSBmb250RGF0YSB8fCBuZXh0SXNTbWFsbENh
cHMgIT0gaXNTbWFsbENhcHMpIHsKLSAgICAgICAgICAgIGludCBpdGVtU3RhcnQgPSBtX3J1bi5y
dGwoKSA/IGluZGV4ICsgMSA6IGluZGV4T2ZGb250VHJhbnNpdGlvbjsKLSAgICAgICAgICAgIGlu
dCBpdGVtTGVuZ3RoID0gbV9ydW4ucnRsKCkgPyBpbmRleE9mRm9udFRyYW5zaXRpb24gLSBpbmRl
eCA6IGluZGV4IC0gaW5kZXhPZkZvbnRUcmFuc2l0aW9uOwotICAgICAgICAgICAgbV9jdXJyZW50
Q2hhcmFjdGVyID0gYmFzZUNoYXJhY3RlciArIGl0ZW1TdGFydDsKLSAgICAgICAgICAgIGl0ZW1p
emVTaGFwZUFuZFBsYWNlKChpc1NtYWxsQ2FwcyA/IHNtYWxsQ2Fwc0J1ZmZlci5kYXRhKCkgOiBj
cCkgKyBpdGVtU3RhcnQsIGl0ZW1TdGFydCwgaXRlbUxlbmd0aCwgZm9udERhdGEsIGdseXBoQnVm
ZmVyKTsKLSAgICAgICAgICAgIGluZGV4T2ZGb250VHJhbnNpdGlvbiA9IGluZGV4OwotICAgICAg
ICB9Ci0gICAgfQotICAgIAotICAgIGludCBpdGVtTGVuZ3RoID0gbV9ydW4ucnRsKCkgPyBpbmRl
eE9mRm9udFRyYW5zaXRpb24gKyAxIDogbGVuZ3RoIC0gaW5kZXhPZkZvbnRUcmFuc2l0aW9uOwot
ICAgIGlmIChpdGVtTGVuZ3RoKSB7Ci0gICAgICAgIGlmIChtX2ZhbGxiYWNrRm9udHMgJiYgbmV4
dEZvbnREYXRhICYmIG5leHRGb250RGF0YSAhPSAmbV9mb250LnByaW1hcnlGb250KCkpCi0gICAg
ICAgICAgICBtX2ZhbGxiYWNrRm9udHMtPmFkZChuZXh0Rm9udERhdGEpOwotCi0gICAgICAgIGlu
dCBpdGVtU3RhcnQgPSBtX3J1bi5ydGwoKSA/IDAgOiBpbmRleE9mRm9udFRyYW5zaXRpb247Ci0g
ICAgICAgIG1fY3VycmVudENoYXJhY3RlciA9IGJhc2VDaGFyYWN0ZXIgKyBpdGVtU3RhcnQ7Ci0g
ICAgICAgIGl0ZW1pemVTaGFwZUFuZFBsYWNlKChuZXh0SXNTbWFsbENhcHMgPyBzbWFsbENhcHNC
dWZmZXIuZGF0YSgpIDogY3ApICsgaXRlbVN0YXJ0LCBpdGVtU3RhcnQsIGl0ZW1MZW5ndGgsIG5l
eHRGb250RGF0YSwgZ2x5cGhCdWZmZXIpOwotICAgIH0KLQotICAgIG1fY3VycmVudENoYXJhY3Rl
ciA9IGJhc2VDaGFyYWN0ZXIgKyBsZW5ndGg7Ci19Ci0KLXZvaWQgVW5pc2NyaWJlQ29udHJvbGxl
cjo6aXRlbWl6ZVNoYXBlQW5kUGxhY2UoY29uc3QgVUNoYXIqIGNwLCB1bnNpZ25lZCBzdHJpbmdP
ZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgRm9udCogZm9udERhdGEsIEdseXBoQnVmZmVy
KiBnbHlwaEJ1ZmZlcikKLXsKLSAgICAvLyBTY3JpcHRJdGVtaXplIChpbiBXaW5kb3dzIFhQIHZl
cnNpb25zIHByaW9yIHRvIFNQMikgY2FuIG92ZXJmbG93IGJ5IDEuICBUaGlzIGlzIHdoeSB0aGVy
ZSBpcyBhbiBleHRyYSBlbXB0eSBpdGVtCi0gICAgLy8gaGFuZ2luZyBvdXQgYXQgdGhlIGVuZCBv
ZiB0aGUgYXJyYXkKLSAgICBtX2l0ZW1zLnJlc2l6ZSg2KTsKLSAgICBpbnQgbnVtSXRlbXMgPSAw
OwotICAgIEhSRVNVTFQgcmMgPSBTX09LOwotICAgIHdoaWxlIChyYyA9IDo6U2NyaXB0SXRlbWl6
ZSh3Y2hhckZyb20oY3ApLCBsZW5ndGgsIG1faXRlbXMuc2l6ZSgpIC0gMSwgJm1fY29udHJvbCwg
Jm1fc3RhdGUsIG1faXRlbXMuZGF0YSgpLCAmbnVtSXRlbXMpID09IEVfT1VUT0ZNRU1PUlkpIHsK
LSAgICAgICAgbV9pdGVtcy5yZXNpemUobV9pdGVtcy5zaXplKCkgKiAyKTsKLSAgICAgICAgcmVz
ZXRDb250cm9sQW5kU3RhdGUoKTsKLSAgICB9Ci0gICAgaWYgKEZBSUxFRChyYykpIHsKLSAgICAg
ICAgV1RGTG9nQWx3YXlzKCJVbmlzY3JpYmVDb250cm9sbGVyOjppdGVtaXplU2hhcGVBbmRQbGFj
ZTogU2NyaXB0SXRlbWl6ZSBmYWlsZWQsIHJjPSVseCIsIHJjKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICBtX2l0ZW1zLnJlc2l6ZShudW1JdGVtcyArIDEpOwotCi0gICAgaWYgKG1fcnVu
LnJ0bCgpKSB7Ci0gICAgICAgIGZvciAoaW50IGkgPSBtX2l0ZW1zLnNpemUoKSAtIDI7IGkgPj0g
MDsgaS0tKSB7Ci0gICAgICAgICAgICBpZiAoIXNoYXBlQW5kUGxhY2VJdGVtKGNwLCBzdHJpbmdP
ZmZzZXQsIGksIGZvbnREYXRhLCBnbHlwaEJ1ZmZlcikpCi0gICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1faXRlbXMuc2l6ZSgpIC0gMTsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAoIXNoYXBlQW5k
UGxhY2VJdGVtKGNwLCBzdHJpbmdPZmZzZXQsIGksIGZvbnREYXRhLCBnbHlwaEJ1ZmZlcikpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIFVuaXNj
cmliZUNvbnRyb2xsZXI6OnJlc2V0Q29udHJvbEFuZFN0YXRlKCkKLXsKLSAgICBtZW1zZXQoJm1f
Y29udHJvbCwgMCwgc2l6ZW9mKFNDUklQVF9DT05UUk9MKSk7Ci0gICAgbWVtc2V0KCZtX3N0YXRl
LCAwLCBzaXplb2YoU0NSSVBUX1NUQVRFKSk7Ci0KLSAgICAvLyBTZXQgdXAgdGhlIGNvcnJlY3Qg
ZGlyZWN0aW9uIGZvciB0aGUgcnVuLgotICAgIG1fc3RhdGUudUJpZGlMZXZlbCA9IG1fcnVuLnJ0
bCgpOwotICAgIAotICAgIC8vIExvY2sgdGhlIGNvcnJlY3QgZGlyZWN0aW9uYWwgb3ZlcnJpZGUu
Ci0gICAgbV9zdGF0ZS5mT3ZlcnJpZGVEaXJlY3Rpb24gPSBtX3J1bi5kaXJlY3Rpb25hbE92ZXJy
aWRlKCk7Ci19Ci0KLWJvb2wgVW5pc2NyaWJlQ29udHJvbGxlcjo6c2hhcGVBbmRQbGFjZUl0ZW0o
Y29uc3QgVUNoYXIqIGNwLCB1bnNpZ25lZCBzdHJpbmdPZmZzZXQsIHVuc2lnbmVkIGksIGNvbnN0
IEZvbnQqIGZvbnREYXRhLCBHbHlwaEJ1ZmZlciogZ2x5cGhCdWZmZXIpCi17Ci0gICAgLy8gRGV0
ZXJtaW5lIHRoZSBzdHJpbmcgZm9yIHRoaXMgaXRlbS4KLSAgICBjb25zdCBVQ2hhciogc3RyID0g
Y3AgKyBtX2l0ZW1zW2ldLmlDaGFyUG9zOwotICAgIGludCBsZW4gPSBtX2l0ZW1zW2krMV0uaUNo
YXJQb3MgLSBtX2l0ZW1zW2ldLmlDaGFyUG9zOwotICAgIFNDUklQVF9JVEVNIGl0ZW0gPSBtX2l0
ZW1zW2ldOwotCi0gICAgLy8gU2V0IHVwIGJ1ZmZlcnMgdG8gaG9sZCB0aGUgcmVzdWx0cyBvZiBz
aGFwaW5nIHRoZSBpdGVtLgotICAgIFZlY3RvcjxXT1JEPiBnbHlwaHM7Ci0gICAgVmVjdG9yPFdP
UkQ+IGNsdXN0ZXJzOwotICAgIFZlY3RvcjxTQ1JJUFRfVklTQVRUUj4gdmlzdWFsQXR0cmlidXRl
czsKLSAgICBjbHVzdGVycy5yZXNpemUobGVuKTsKLSAgICAgCi0gICAgLy8gU2hhcGUgdGhlIGl0
ZW0uCi0gICAgLy8gVGhlIHJlY29tbWVuZGVkIHNpemUgZm9yIHRoZSBnbHlwaCBidWZmZXIgaXMg
MS41ICogdGhlIGNoYXJhY3RlciBsZW5ndGggKyAxNiBpbiB0aGUgdW5pc2NyaWJlIGRvY3MuCi0g
ICAgLy8gQXBwYXJlbnRseSB0aGlzIGlzIGEgZ29vZCBzaXplIHRvIGF2b2lkIGhhdmluZyB0byBt
YWtlIHJlcGVhdGVkIGNhbGxzIHRvIFNjcmlwdFNoYXBlLgotICAgIGdseXBocy5yZXNpemUoMS41
ICogbGVuICsgMTYpOwotICAgIHZpc3VhbEF0dHJpYnV0ZXMucmVzaXplKGdseXBocy5zaXplKCkp
OwotCi0gICAgaWYgKCFzaGFwZShzdHIsIGxlbiwgaXRlbSwgZm9udERhdGEsIGdseXBocywgY2x1
c3RlcnMsIHZpc3VhbEF0dHJpYnV0ZXMpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIFZl
Y3RvcjxPcHRpb25hbDx1bnNpZ25lZD4+IHN0cmluZ09mZnNldHMoZ2x5cGhzLnNpemUoKSk7Ci0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbjsgKytpKSB7Ci0gICAgICAgIGlmIChzdHJp
bmdPZmZzZXRzW2NsdXN0ZXJzW2ldXSkKLSAgICAgICAgICAgIHN0cmluZ09mZnNldHNbY2x1c3Rl
cnNbaV1dID0gc3RkOjptaW4oKnN0cmluZ09mZnNldHNbY2x1c3RlcnNbaV1dLCBpKTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgc3RyaW5nT2Zmc2V0c1tjbHVzdGVyc1tpXV0gPSBpOwotICAg
IH0KLQotICAgIC8vIFdlIG5vdyBoYXZlIGEgY29sbGVjdGlvbiBvZiBnbHlwaHMuCi0gICAgVmVj
dG9yPEdPRkZTRVQ+IG9mZnNldHM7Ci0gICAgVmVjdG9yPGludD4gYWR2YW5jZXM7Ci0gICAgb2Zm
c2V0cy5yZXNpemUoZ2x5cGhzLnNpemUoKSk7Ci0gICAgYWR2YW5jZXMucmVzaXplKGdseXBocy5z
aXplKCkpOwotICAgIEhSRVNVTFQgcGxhY2VSZXN1bHQgPSBTY3JpcHRQbGFjZSgwLCBmb250RGF0
YS0+c2NyaXB0Q2FjaGUoKSwgZ2x5cGhzLmRhdGEoKSwgZ2x5cGhzLnNpemUoKSwgdmlzdWFsQXR0
cmlidXRlcy5kYXRhKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZp
dGVtLmEsIGFkdmFuY2VzLmRhdGEoKSwgb2Zmc2V0cy5kYXRhKCksIDApOwotICAgIGlmIChwbGFj
ZVJlc3VsdCA9PSBFX1BFTkRJTkcpIHsKLSAgICAgICAgLy8gVGhlIHNjcmlwdCBjYWNoZSBpc24n
dCBwcmltZWQgd2l0aCBlbm91Z2ggaW5mbyB5ZXQuICBXZSBuZWVkIHRvIHNlbGVjdCBvdXIgSEZP
TlQgaW50bwotICAgICAgICAvLyBhIERDIGFuZCBwYXNzIHRoZSBEQyBpbiB0byBTY3JpcHRQbGFj
ZS4KLSAgICAgICAgSFduZERDIGhkYygwKTsKLSAgICAgICAgSEZPTlQgaGZvbnQgPSBmb250RGF0
YS0+cGxhdGZvcm1EYXRhKCkuaGZvbnQoKTsKLSAgICAgICAgSEZPTlQgb2xkRm9udCA9IChIRk9O
VClTZWxlY3RPYmplY3QoaGRjLCBoZm9udCk7Ci0gICAgICAgIHBsYWNlUmVzdWx0ID0gU2NyaXB0
UGxhY2UoaGRjLCBmb250RGF0YS0+c2NyaXB0Q2FjaGUoKSwgZ2x5cGhzLmRhdGEoKSwgZ2x5cGhz
LnNpemUoKSwgdmlzdWFsQXR0cmlidXRlcy5kYXRhKCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJml0ZW0uYSwgYWR2YW5jZXMuZGF0YSgpLCBvZmZzZXRzLmRhdGEoKSwgMCk7
Ci0gICAgICAgIFNlbGVjdE9iamVjdChoZGMsIG9sZEZvbnQpOwotICAgIH0KLSAgICAKLSAgICBp
ZiAoRkFJTEVEKHBsYWNlUmVzdWx0KSB8fCBnbHlwaHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLQotICAgIC8vIENvbnZlcnQgYWxsIGNoYXJzIHRoYXQgc2hvdWxkIGJlIHRyZWF0
ZWQgYXMgc3BhY2VzIHRvIHVzZSB0aGUgc3BhY2UgZ2x5cGguCi0gICAgLy8gV2UgYWxzbyBjcmVh
dGUgYSBtYXAgdGhhdCBhbGxvd3MgdXMgdG8gcXVpY2tseSBnbyBmcm9tIHNwYWNlIGdseXBocyBi
YWNrIHRvIHRoZWlyIGNvcnJlc3BvbmRpbmcgY2hhcmFjdGVycy4KLSAgICBWZWN0b3I8aW50PiBz
cGFjZUNoYXJhY3RlcnMoZ2x5cGhzLnNpemUoKSk7Ci0gICAgc3BhY2VDaGFyYWN0ZXJzLmZpbGwo
LTEpOwotCi0gICAgY29uc3QgZmxvYXQgY0xvZ2ljYWxTY2FsZSA9IGZvbnREYXRhLT5wbGF0Zm9y
bURhdGEoKS51c2VHREkoKSA/IDEuMGYgOiAzMi4wZjsKLSAgICBmbG9hdCBzcGFjZVdpZHRoID0g
Zm9udERhdGEtPnNwYWNlV2lkdGgoKSAtIGZvbnREYXRhLT5zeW50aGV0aWNCb2xkT2Zmc2V0KCk7
Ci0gICAgdW5zaWduZWQgbG9naWNhbFNwYWNlV2lkdGggPSBzcGFjZVdpZHRoICogY0xvZ2ljYWxT
Y2FsZTsKLQotICAgIGZvciAoaW50IGsgPSAwOyBrIDwgbGVuOyBrKyspIHsKLSAgICAgICAgVUNo
YXIgY2ggPSAqKHN0ciArIGspOwotICAgICAgICBib29sIHRyZWF0QXNTcGFjZSA9IEZvbnRDYXNj
YWRlOjp0cmVhdEFzU3BhY2UoY2gpOwotICAgICAgICBib29sIHRyZWF0QXNaZXJvV2lkdGhTcGFj
ZSA9IEZvbnRDYXNjYWRlOjp0cmVhdEFzWmVyb1dpZHRoU3BhY2UoY2gpOwotICAgICAgICBpZiAo
dHJlYXRBc1NwYWNlIHx8IHRyZWF0QXNaZXJvV2lkdGhTcGFjZSkgewotICAgICAgICAgICAgLy8g
U3Vic3RpdHV0ZSBpbiB0aGUgc3BhY2UgZ2x5cGggYXQgdGhlIGFwcHJvcHJpYXRlIHBsYWNlIGlu
IHRoZSBnbHlwaHMKLSAgICAgICAgICAgIC8vIGFycmF5LgotICAgICAgICAgICAgZ2x5cGhzW2Ns
dXN0ZXJzW2tdXSA9IGZvbnREYXRhLT5zcGFjZUdseXBoKCk7Ci0gICAgICAgICAgICBhZHZhbmNl
c1tjbHVzdGVyc1trXV0gPSB0cmVhdEFzU3BhY2UgPyBsb2dpY2FsU3BhY2VXaWR0aCA6IDA7Ci0g
ICAgICAgICAgICBpZiAodHJlYXRBc1NwYWNlKQotICAgICAgICAgICAgICAgIHNwYWNlQ2hhcmFj
dGVyc1tjbHVzdGVyc1trXV0gPSBtX2N1cnJlbnRDaGFyYWN0ZXIgKyBrICsgaXRlbS5pQ2hhclBv
czsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFBvcHVsYXRlIG91ciBnbHlwaCBidWZmZXIg
d2l0aCB0aGlzIGluZm9ybWF0aW9uLgotICAgIGJvb2wgaGFzRXh0cmFTcGFjaW5nID0gbV9mb250
LmxldHRlclNwYWNpbmcoKSB8fCBtX2ZvbnQud29yZFNwYWNpbmcoKSB8fCBtX3BhZGRpbmc7Ci0g
ICAgCi0gICAgZmxvYXQgbGVmdEVkZ2UgPSBtX3J1bldpZHRoU29GYXI7Ci0KLSAgICBmb3IgKHVu
c2lnbmVkIGsgPSAwOyBrIDwgZ2x5cGhzLnNpemUoKTsgaysrKSB7Ci0gICAgICAgIEdseXBoIGds
eXBoID0gZ2x5cGhzW2tdOwotICAgICAgICBmbG9hdCBhZHZhbmNlID0gYWR2YW5jZXNba10gLyBj
TG9naWNhbFNjYWxlOwotICAgICAgICBmbG9hdCBvZmZzZXRYID0gb2Zmc2V0c1trXS5kdSAvIGNM
b2dpY2FsU2NhbGU7Ci0gICAgICAgIGZsb2F0IG9mZnNldFkgPSBvZmZzZXRzW2tdLmR2IC8gY0xv
Z2ljYWxTY2FsZTsKLQotICAgICAgICAvLyBNYXRjaCBBcHBLaXQncyBydWxlcyBmb3IgdGhlIGlu
dGVnZXIgdnMuIG5vbi1pbnRlZ2VyIHJlbmRlcmluZyBtb2Rlcy4KLSAgICAgICAgZmxvYXQgcm91
bmRlZEFkdmFuY2UgPSByb3VuZGYoYWR2YW5jZSk7Ci0gICAgICAgIGlmICghZm9udERhdGEtPnBs
YXRmb3JtRGF0YSgpLmlzU3lzdGVtRm9udCgpKSB7Ci0gICAgICAgICAgICBhZHZhbmNlID0gcm91
bmRlZEFkdmFuY2U7Ci0gICAgICAgICAgICBvZmZzZXRYID0gcm91bmRmKG9mZnNldFgpOwotICAg
ICAgICAgICAgb2Zmc2V0WSA9IHJvdW5kZihvZmZzZXRZKTsKLSAgICAgICAgfQotCi0gICAgICAg
IGFkdmFuY2UgKz0gZm9udERhdGEtPnN5bnRoZXRpY0JvbGRPZmZzZXQoKTsKLQotICAgICAgICBp
ZiAoaGFzRXh0cmFTcGFjaW5nKSB7Ci0gICAgICAgICAgICAvLyBJZiB3ZSdyZSBhIGdseXBoIHdp
dGggYW4gYWR2YW5jZSwgZ28gYWhlYWQgYW5kIGFkZCBpbiBsZXR0ZXItc3BhY2luZy4KLSAgICAg
ICAgICAgIC8vIFRoYXQgd2F5IHdlIHdlZWQgb3V0IHplcm8gd2lkdGggbHVya2Vycy4gIFRoaXMg
YmVoYXZpb3IgbWF0Y2hlcyB0aGUgZmFzdCB0ZXh0IGNvZGUgcGF0aC4KLSAgICAgICAgICAgIGlm
IChhZHZhbmNlICYmIG1fZm9udC5sZXR0ZXJTcGFjaW5nKCkpCi0gICAgICAgICAgICAgICAgYWR2
YW5jZSArPSBtX2ZvbnQubGV0dGVyU3BhY2luZygpOwotCi0gICAgICAgICAgICAvLyBIYW5kbGUg
anVzdGlmaWNhdGlvbiBhbmQgd29yZC1zcGFjaW5nLgotICAgICAgICAgICAgaW50IGNoYXJhY3Rl
ckluZGV4ID0gc3BhY2VDaGFyYWN0ZXJzW2tdOwotICAgICAgICAgICAgLy8gY2hhcmFjdGVySW5k
ZXggaXMgbGVmdCBhdCB0aGUgaW5pdGlhbCB2YWx1ZSBvZiAtMSBmb3IgZ2x5cGhzIHRoYXQgZG8g
bm90IG1hcCBiYWNrIHRvIHRyZWF0ZWQtYXMtc3BhY2UgY2hhcmFjdGVycy4KLSAgICAgICAgICAg
IGlmIChjaGFyYWN0ZXJJbmRleCAhPSAtMSkgewotICAgICAgICAgICAgICAgIC8vIEFjY291bnQg
Zm9yIHBhZGRpbmcuIFdlYkNvcmUgdXNlcyBzcGFjZSBwYWRkaW5nIHRvIGp1c3RpZnkgdGV4dC4K
LSAgICAgICAgICAgICAgICAvLyBXZSBkaXN0cmlidXRlIHRoZSBzcGVjaWZpZWQgcGFkZGluZyBv
dmVyIHRoZSBhdmFpbGFibGUgc3BhY2VzIGluIHRoZSBydW4uCi0gICAgICAgICAgICAgICAgaWYg
KG1fcGFkZGluZykgewotICAgICAgICAgICAgICAgICAgICAvLyBVc2UgbGVmdG92ZXIgcGFkZGlu
ZyBpZiBub3QgZXZlbmx5IGRpdmlzaWJsZSBieSBudW1iZXIgb2Ygc3BhY2VzLgotICAgICAgICAg
ICAgICAgICAgICBpZiAobV9wYWRkaW5nIDwgbV9wYWRQZXJTcGFjZSkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgYWR2YW5jZSArPSBtX3BhZGRpbmc7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBtX3BhZGRpbmcgPSAwOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgICAgICAgICAgbV9wYWRkaW5nIC09IG1fcGFkUGVyU3BhY2U7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBhZHZhbmNlICs9IG1fcGFkUGVyU3BhY2U7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBBY2NvdW50IGZvciB3
b3JkLXNwYWNpbmcuCi0gICAgICAgICAgICAgICAgaWYgKGNoYXJhY3RlckluZGV4ID4gMCAmJiBt
X2ZvbnQud29yZFNwYWNpbmcoKSkgewotICAgICAgICAgICAgICAgICAgICBVQ2hhciBjYW5kaWRh
dGVTcGFjZTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fcnVuLmlzOEJpdCgpKQotICAgICAg
ICAgICAgICAgICAgICAgICAgY2FuZGlkYXRlU3BhY2UgPSAqKG1fcnVuLmRhdGE4KGNoYXJhY3Rl
ckluZGV4IC0gMSkpOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
ICAgICAgICBjYW5kaWRhdGVTcGFjZSA9ICoobV9ydW4uZGF0YTE2KGNoYXJhY3RlckluZGV4IC0g
MSkpOwotCi0gICAgICAgICAgICAgICAgICAgIGlmICghRm9udENhc2NhZGU6OnRyZWF0QXNTcGFj
ZShjYW5kaWRhdGVTcGFjZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBhZHZhbmNlICs9IG1f
Zm9udC53b3JkU3BhY2luZygpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotCi0gICAgICAgIG1fcnVuV2lkdGhTb0ZhciArPSBhZHZhbmNlOwotCi0gICAgICAg
IC8vIEZJWE1FOiBXZSBuZWVkIHRvIHRha2UgdGhlIEdPRkZTRVRTIGZvciBjb21iaW5pbmcgZ2x5
cGhzIGFuZCBzdG9yZSB0aGVtIGluIHRoZSBnbHlwaCBidWZmZXIKLSAgICAgICAgLy8gYXMgd2Vs
bCwgc28gdGhhdCB3aGVuIHRoZSB0aW1lIGNvbWVzIHRvIGRyYXcgdGhvc2UgZ2x5cGhzLCB3ZSBj
YW4gYXBwbHkgdGhlIGFwcHJvcHJpYXRlCi0gICAgICAgIC8vIHRyYW5zbGF0aW9uLgotICAgICAg
ICBpZiAoZ2x5cGhCdWZmZXIpIHsKLSAgICAgICAgICAgIEdseXBoQnVmZmVyQWR2YW5jZSBvcmln
aW4ob2Zmc2V0WCwgLW9mZnNldFkpOwotICAgICAgICAgICAgaWYgKCFnbHlwaEJ1ZmZlci0+YWR2
YW5jZXNDb3VudCgpKQotICAgICAgICAgICAgICAgIGdseXBoQnVmZmVyLT5zZXRJbml0aWFsQWR2
YW5jZShvcmlnaW4pOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGdseXBoQnVm
ZmVyLT5leHBhbmRMYXN0QWR2YW5jZShvcmlnaW4pOwotICAgICAgICAgICAgR2x5cGhCdWZmZXJB
ZHZhbmNlIGdseXBoQWR2YW5jZSgtb3JpZ2luLndpZHRoKCkgKyBhZHZhbmNlLCAtb3JpZ2luLmhl
aWdodCgpKTsKLSAgICAgICAgICAgIGdseXBoQnVmZmVyLT5hZGQoZ2x5cGgsIGZvbnREYXRhLCBn
bHlwaEFkdmFuY2UsIHN0cmluZ09mZnNldHNba10udmFsdWVPcigwKSArIHN0cmluZ09mZnNldCk7
Ci0gICAgICAgIH0KLQotICAgICAgICBGbG9hdFJlY3QgZ2x5cGhCb3VuZHMgPSBmb250RGF0YS0+
Ym91bmRzRm9yR2x5cGgoZ2x5cGgpOwotICAgICAgICBnbHlwaEJvdW5kcy5tb3ZlKG1fZ2x5cGhP
cmlnaW4ueCgpLCBtX2dseXBoT3JpZ2luLnkoKSk7Ci0gICAgICAgIG1fbWluR2x5cGhCb3VuZGlu
Z0JveFggPSBzdGQ6Om1pbihtX21pbkdseXBoQm91bmRpbmdCb3hYLCBnbHlwaEJvdW5kcy54KCkp
OwotICAgICAgICBtX21heEdseXBoQm91bmRpbmdCb3hYID0gc3RkOjptYXgobV9tYXhHbHlwaEJv
dW5kaW5nQm94WCwgZ2x5cGhCb3VuZHMubWF4WCgpKTsKLSAgICAgICAgbV9taW5HbHlwaEJvdW5k
aW5nQm94WSA9IHN0ZDo6bWluKG1fbWluR2x5cGhCb3VuZGluZ0JveFksIGdseXBoQm91bmRzLnko
KSk7Ci0gICAgICAgIG1fbWF4R2x5cGhCb3VuZGluZ0JveFkgPSBzdGQ6Om1heChtX21heEdseXBo
Qm91bmRpbmdCb3hZLCBnbHlwaEJvdW5kcy5tYXhZKCkpOwotICAgICAgICBtX2dseXBoT3JpZ2lu
Lm1vdmUoYWR2YW5jZSArIG9mZnNldFgsIC1vZmZzZXRZKTsKLQotICAgICAgICAvLyBNdXRhdGUg
dGhlIGdseXBoIGFycmF5IHRvIGNvbnRhaW4gb3VyIGFsdGVyZWQgYWR2YW5jZXMuCi0gICAgICAg
IGlmIChtX2NvbXB1dGluZ09mZnNldFBvc2l0aW9uKQotICAgICAgICAgICAgYWR2YW5jZXNba10g
PSBhZHZhbmNlOwotICAgIH0KLQotICAgIHdoaWxlIChtX2NvbXB1dGluZ09mZnNldFBvc2l0aW9u
ICYmIG1fb2Zmc2V0WCA+PSBsZWZ0RWRnZSAmJiBtX29mZnNldFggPCBtX3J1bldpZHRoU29GYXIp
IHsKLSAgICAgICAgLy8gVGhlIHBvc2l0aW9uIGlzIHNvbWV3aGVyZSBpbnNpZGUgdGhpcyBydW4u
Ci0gICAgICAgIGludCB0cmFpbGluZyA9IDA7Ci0gICAgICAgIEhSRVNVTFQgcmMgPSA6OlNjcmlw
dFh0b0NQKG1fb2Zmc2V0WCAtIGxlZnRFZGdlLCBjbHVzdGVycy5zaXplKCksIGdseXBocy5zaXpl
KCksIGNsdXN0ZXJzLmRhdGEoKSwgdmlzdWFsQXR0cmlidXRlcy5kYXRhKCksCi0gICAgICAgICAg
ICAgICAgICAgIGFkdmFuY2VzLmRhdGEoKSwgJml0ZW0uYSwgJm1fb2Zmc2V0UG9zaXRpb24sICZ0
cmFpbGluZyk7Ci0gICAgICAgIGlmIChGQUlMRUQocmMpKSB7Ci0gICAgICAgICAgICBXVEZMb2dB
bHdheXMoIlVuaXNjcmliZUNvbnRyb2xsZXI6OnNoYXBlQW5kUGxhY2VJdGVtOiBTY3JpcHRYdG9D
UCBmYWlsZWQgcmM9JWx4IiwgcmMpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
IH0KLSAgICAgICAgaWYgKHRyYWlsaW5nICYmIG1faW5jbHVkZVBhcnRpYWxHbHlwaHMgJiYgbV9v
ZmZzZXRQb3NpdGlvbiA8IGxlbiAtIDEpIHsKLSAgICAgICAgICAgIG1fb2Zmc2V0UG9zaXRpb24g
Kz0gbV9jdXJyZW50Q2hhcmFjdGVyICsgbV9pdGVtc1tpXS5pQ2hhclBvczsKLSAgICAgICAgICAg
IG1fb2Zmc2V0WCArPSBtX3J1bi5ydGwoKSA/IC10cmFpbGluZyA6IHRyYWlsaW5nOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgbV9jb21wdXRpbmdPZmZzZXRQb3NpdGlvbiA9IGZhbHNl
OwotICAgICAgICAgICAgbV9vZmZzZXRQb3NpdGlvbiArPSBtX2N1cnJlbnRDaGFyYWN0ZXIgKyBt
X2l0ZW1zW2ldLmlDaGFyUG9zOwotICAgICAgICAgICAgaWYgKHRyYWlsaW5nICYmIG1faW5jbHVk
ZVBhcnRpYWxHbHlwaHMpCi0gICAgICAgICAgICAgICBtX29mZnNldFBvc2l0aW9uKys7Ci0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotYm9vbCBVbmlzY3JpYmVDb250cm9sbGVyOjpzaGFwZShjb25zdCBVQ2hhciogc3Ry
LCBpbnQgbGVuLCBTQ1JJUFRfSVRFTSBpdGVtLCBjb25zdCBGb250KiBmb250RGF0YSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPFdPUkQ+JiBnbHlwaHMsIFZlY3RvcjxX
T1JEPiYgY2x1c3RlcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxT
Q1JJUFRfVklTQVRUUj4mIHZpc3VhbEF0dHJpYnV0ZXMpCi17Ci0gICAgSFduZERDIGhkYzsKLSAg
ICBIRk9OVCBvbGRGb250ID0gMDsKLSAgICBIUkVTVUxUIHNoYXBlUmVzdWx0ID0gRV9QRU5ESU5H
OwotICAgIGludCBnbHlwaENvdW50ID0gMDsKLQotICAgIGlmICghZm9udERhdGEpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIGRvIHsKLSAgICAgICAgc2hhcGVSZXN1bHQgPSBTY3JpcHRT
aGFwZShoZGMsIGZvbnREYXRhLT5zY3JpcHRDYWNoZSgpLCB3Y2hhckZyb20oc3RyKSwgbGVuLCBn
bHlwaHMuc2l6ZSgpLCAmaXRlbS5hLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdseXBocy5kYXRhKCksIGNsdXN0ZXJzLmRhdGEoKSwgdmlzdWFsQXR0cmlidXRlcy5kYXRhKCks
ICZnbHlwaENvdW50KTsKLSAgICAgICAgaWYgKHNoYXBlUmVzdWx0ID09IEVfUEVORElORykgewot
ICAgICAgICAgICAgLy8gVGhlIHNjcmlwdCBjYWNoZSBpc24ndCBwcmltZWQgd2l0aCBlbm91Z2gg
aW5mbyB5ZXQuICBXZSBuZWVkIHRvIHNlbGVjdCBvdXIgSEZPTlQgaW50bwotICAgICAgICAgICAg
Ly8gYSBEQyBhbmQgcGFzcyB0aGUgREMgaW4gdG8gU2NyaXB0U2hhcGUuCi0gICAgICAgICAgICBB
U1NFUlQoIWhkYyk7Ci0gICAgICAgICAgICBoZGMuc2V0SFduZCgwKTsKLSAgICAgICAgICAgIEhG
T05UIGhmb250ID0gZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLmhmb250KCk7Ci0gICAgICAgICAg
ICBvbGRGb250ID0gKEhGT05UKVNlbGVjdE9iamVjdChoZGMsIGhmb250KTsKLSAgICAgICAgfSBl
bHNlIGlmIChzaGFwZVJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKSB7Ci0gICAgICAgICAgICAvLyBO
ZWVkIHRvIHJlc2l6ZSBvdXIgYnVmZmVycy4KLSAgICAgICAgICAgIGdseXBocy5yZXNpemUoZ2x5
cGhzLnNpemUoKSAqIDIpOwotICAgICAgICAgICAgdmlzdWFsQXR0cmlidXRlcy5yZXNpemUoZ2x5
cGhzLnNpemUoKSk7Ci0gICAgICAgIH0KLSAgICB9IHdoaWxlIChzaGFwZVJlc3VsdCA9PSBFX1BF
TkRJTkcgfHwgc2hhcGVSZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7Ci0KLSAgICBpZiAoaGRjKQot
ICAgICAgICBTZWxlY3RPYmplY3QoaGRjLCBvbGRGb250KTsKLQotICAgIGlmIChGQUlMRUQoc2hh
cGVSZXN1bHQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBnbHlwaHMuc2hyaW5rKGds
eXBoQ291bnQpOwotICAgIHZpc3VhbEF0dHJpYnV0ZXMuc2hyaW5rKGdseXBoQ291bnQpOwotCi0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9VbmlzY3JpYmVDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vVW5pc2NyaWJlQ29udHJvbGxlci5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBhNDYyNGM3OWEwOC4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1VuaXNjcmliZUNvbnRyb2xsZXIuaAorKysgL2Rl
di9udWxsCkBAIC0xLDkwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgs
IDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aWZuZGVmIFVuaXNjcmliZUNvbnRyb2xsZXJfaAotI2RlZmluZSBVbmlzY3JpYmVDb250cm9sbGVy
X2gKLQotI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCi0jaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIK
LSNpbmNsdWRlIDx1c3AxMC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1jbGFzcyBVbmlzY3JpYmVDb250cm9sbGVyIHsKLXB1YmxpYzoKLSAgICBV
bmlzY3JpYmVDb250cm9sbGVyKGNvbnN0IEZvbnRDYXNjYWRlKiwgY29uc3QgVGV4dFJ1biYsIEhh
c2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzID0gMCk7Ci0KLSAgICAvLyBBZHZhbmNl
IGFuZCBtZWFzdXJlL3BsYWNlIHVwIHRvIHRoZSBzcGVjaWZpZWQgY2hhcmFjdGVyLgotICAgIHZv
aWQgYWR2YW5jZSh1bnNpZ25lZCB0bywgR2x5cGhCdWZmZXIqID0gMCk7Ci0KLSAgICAvLyBDb21w
dXRlIHRoZSBjaGFyYWN0ZXIgb2Zmc2V0IGZvciBhIGdpdmVuIHggY29vcmRpbmF0ZS4KLSAgICBp
bnQgb2Zmc2V0Rm9yUG9zaXRpb24oaW50IHgsIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpOwot
Ci0gICAgLy8gUmV0dXJucyB0aGUgd2lkdGggb2YgZXZlcnl0aGluZyB3ZSd2ZSBjb25zdW1lZCBz
byBmYXIuCi0gICAgZmxvYXQgcnVuV2lkdGhTb0ZhcigpIGNvbnN0IHsgcmV0dXJuIG1fcnVuV2lk
dGhTb0ZhcjsgfQotCi0gICAgZmxvYXQgbWluR2x5cGhCb3VuZGluZ0JveFgoKSBjb25zdCB7IHJl
dHVybiBtX21pbkdseXBoQm91bmRpbmdCb3hYOyB9Ci0gICAgZmxvYXQgbWF4R2x5cGhCb3VuZGlu
Z0JveFgoKSBjb25zdCB7IHJldHVybiBtX21heEdseXBoQm91bmRpbmdCb3hYOyB9Ci0gICAgZmxv
YXQgbWluR2x5cGhCb3VuZGluZ0JveFkoKSBjb25zdCB7IHJldHVybiBtX21pbkdseXBoQm91bmRp
bmdCb3hZOyB9Ci0gICAgZmxvYXQgbWF4R2x5cGhCb3VuZGluZ0JveFkoKSBjb25zdCB7IHJldHVy
biBtX21heEdseXBoQm91bmRpbmdCb3hZOyB9Ci0KLXByaXZhdGU6ICAgIAotICAgIHZvaWQgcmVz
ZXRDb250cm9sQW5kU3RhdGUoKTsKLQotICAgIHZvaWQgaXRlbWl6ZVNoYXBlQW5kUGxhY2UoY29u
c3QgVUNoYXIqLCB1bnNpZ25lZCBzdHJpbmdPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3Qg
Rm9udCosIEdseXBoQnVmZmVyKik7Ci0gICAgYm9vbCBzaGFwZUFuZFBsYWNlSXRlbShjb25zdCBV
Q2hhciosIHVuc2lnbmVkIHN0cmluZ09mZnNldCwgdW5zaWduZWQgaW5kZXgsIGNvbnN0IEZvbnQq
LCBHbHlwaEJ1ZmZlciopOwotICAgIGJvb2wgc2hhcGUoY29uc3QgVUNoYXIqIHN0ciwgaW50IGxl
biwgU0NSSVBUX0lURU0sIGNvbnN0IEZvbnQqLAotICAgICAgICAgICAgICAgVmVjdG9yPFdPUkQ+
JiBnbHlwaHMsIFZlY3RvcjxXT1JEPiYgY2x1c3RlcnMsCi0gICAgICAgICAgICAgICBWZWN0b3I8
U0NSSVBUX1ZJU0FUVFI+JiB2aXN1YWxBdHRyaWJ1dGVzKTsKLQotICAgIGNvbnN0IEZvbnRDYXNj
YWRlJiBtX2ZvbnQ7Ci0gICAgY29uc3QgVGV4dFJ1biYgbV9ydW47Ci0gICAgSGFzaFNldDxjb25z
dCBGb250Kj4qIG1fZmFsbGJhY2tGb250czsKLSAgICBGbG9hdFBvaW50IG1fZ2x5cGhPcmlnaW47
Ci0gICAgZmxvYXQgbV9taW5HbHlwaEJvdW5kaW5nQm94WDsKLSAgICBmbG9hdCBtX21heEdseXBo
Qm91bmRpbmdCb3hYOwotICAgIGZsb2F0IG1fbWluR2x5cGhCb3VuZGluZ0JveFk7Ci0gICAgZmxv
YXQgbV9tYXhHbHlwaEJvdW5kaW5nQm94WTsKLQotICAgIFNDUklQVF9DT05UUk9MIG1fY29udHJv
bDsKLSAgICBTQ1JJUFRfU1RBVEUgbV9zdGF0ZTsKLSAgICBWZWN0b3I8U0NSSVBUX0lURU0+IG1f
aXRlbXM7Ci0gCi0gICAgdW5zaWduZWQgbV9jdXJyZW50Q2hhcmFjdGVyOwotICAgIGludCBtX2Vu
ZDsKLQotICAgIGZsb2F0IG1fcnVuV2lkdGhTb0ZhcjsKLSAgICBmbG9hdCBtX3BhZGRpbmc7Ci0g
ICAgZmxvYXQgbV9wYWRQZXJTcGFjZTsKLQotICAgIGJvb2wgbV9jb21wdXRpbmdPZmZzZXRQb3Np
dGlvbjsKLSAgICBib29sIG1faW5jbHVkZVBhcnRpYWxHbHlwaHM7Ci0gICAgZmxvYXQgbV9vZmZz
ZXRYOwotICAgIGludCBtX29mZnNldFBvc2l0aW9uOwotfTsKLQotfQotI2VuZGlmCmRpZmYgLS1n
aXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29tcGxleFRleHRDb250cm9s
bGVyLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db21wbGV4VGV4dENv
bnRyb2xsZXIuY3BwCmluZGV4IDkzZmU5MGU5ZDlkLi45MjY4ZWZiNjgzYiAxMDA2NDQKLS0tIGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbXBsZXhUZXh0Q29udHJvbGxlci5j
cHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbXBsZXhUZXh0Q29u
dHJvbGxlci5jcHAKQEAgLTI1LDggKzI1LDYgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogCi0j
aWYgIVBMQVRGT1JNKFdJTikKLQogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luaXRpYWxpemVU
aHJlYWRpbmcuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0NvbXBsZXhUZXh0Q29udHJvbGxlci5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvRm9udENhc2NhZGUuaD4KQEAgLTM2Nyw1ICszNjUsMyBAQCBURVNU
X0YoQ29tcGxleFRleHRDb250cm9sbGVyVGVzdCwgVG90YWxXaWR0aFdpdGhKdXN0aWZpY2F0aW9u
KQogfQogCiB9Ci0KLSNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>385944</attachid>
            <date>2019-12-17 23:45:46 -0800</date>
            <delta_ts>2019-12-19 23:11:54 -0800</delta_ts>
            <desc>WIP patch</desc>
            <filename>complex10.diff</filename>
            <type>text/plain</type>
            <size>43936</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luLmNtYWtlIGIvU291cmNlL1dl
YkNvcmUvUGxhdGZvcm1XaW4uY21ha2UKaW5kZXggZDFmZDRlYjEyZGQuLmRlODZmZDNhMDQxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbi5jbWFrZQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9QbGF0Zm9ybVdpbi5jbWFrZQpAQCAtNTEsNiArNTEsNyBAQCBsaXN0KEFQUEVORCBX
ZWJDb3JlX1NPVVJDRVMKIAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db2xvckRpcmVjdDJE
LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db21wbGV4VGV4dENvbnRyb2xsZXJEaXJl
Y3RXcml0ZS5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vQ29tcGxleFRleHRDb250cm9s
bGVyVW5pc2NyaWJlLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9ESUJQaXhlbERhdGEu
Y3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Zsb2F0UG9pbnREaXJlY3QyRC5jcHAKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRmxvYXRSZWN0RGlyZWN0MkQuY3BwCkBAIC02OSw3ICs3
MCw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9TaW1wbGVGb250RGF0YVdpbi5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vVHJh
bnNmb3JtYXRpb25NYXRyaXhEaXJlY3QyRC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
VHJhbnNmb3JtYXRpb25NYXRyaXhXaW4uY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1Vu
aXNjcmliZUNvbnRyb2xsZXIuY3BwCiAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL3dpbi9Eb3dubG9h
ZEJ1bmRsZVdpbi5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL3dpbi9OZXR3b3JrU3RhdGVOb3Rp
Zmllcldpbi5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwCmluZGV4IDE2M2VkNGUwN2VlLi40OGU4ZDk1
MWI4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29tcGxl
eFRleHRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwCkBAIC00MywzMyArNDMsNiBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLSNpZiBQTEFURk9STShXSU4pICYmICFVU0UoRElSRUNUMkQpCi0KLWNs
YXNzIFRleHRMYXlvdXQgewotfTsKLQotdm9pZCBUZXh0TGF5b3V0RGVsZXRlcjo6b3BlcmF0b3Io
KShUZXh0TGF5b3V0KikgY29uc3QKLXsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPFRleHRMYXlvdXQs
IFRleHRMYXlvdXREZWxldGVyPiBGb250Q2FzY2FkZTo6Y3JlYXRlTGF5b3V0KFJlbmRlclRleHQm
LCBmbG9hdCwgYm9vbCkgY29uc3QKLXsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotZmxvYXQg
Rm9udENhc2NhZGU6OndpZHRoKFRleHRMYXlvdXQmLCB1bnNpZ25lZCwgdW5zaWduZWQsIEhhc2hT
ZXQ8Y29uc3QgRm9udCo+KikKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1
cm4gMDsKLX0KLQotdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmNvbGxlY3RDb21wbGV4VGV4
dFJ1bnNGb3JDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQsIHVuc2lnbmVkLCBjb25z
dCBGb250KikKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotI2Vsc2UKLQogY2xh
c3MgVGV4dExheW91dCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CkBA
IC04OTQsNiArODY3LDQgQEAgQ29tcGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4dFJ1bjo6
Q29tcGxleFRleHRSdW4oY29uc3QgVmVjdG9yPEZsb2F0U2l6ZT4mIGEKIHsKIH0KIAotI2VuZGlm
Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcAppbmRleCA0MTI3NDdhY2Y4Yy4uMGFlYzhlNzBlYmEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5j
cHAKQEAgLTQxLDEwICs0MSw2IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0cmluZ0hhc2gu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKLSNpZiBQTEFURk9STShX
SU4pICYmICFVU0UoRElSRUNUMkQpCi0jaW5jbHVkZSAiVW5pc2NyaWJlQ29udHJvbGxlci5oIgot
I2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIFdURjo6VW5p
Y29kZTsKQEAgLTM1MCwxNSArMzQ2LDYgQEAgZmxvYXQgRm9udENhc2NhZGU6OndpZHRoT2ZUZXh0
UmFuZ2UoY29uc3QgVGV4dFJ1biYgcnVuLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZAogCiAgICAg
YXV0byBjb2RlUGF0aFRvVXNlID0gY29kZVBhdGgocnVuKTsKICAgICBpZiAoY29kZVBhdGhUb1Vz
ZSA9PSBDb21wbGV4KSB7Ci0jaWYgUExBVEZPUk0oV0lOKSAmJiAhVVNFKERJUkVDVDJEKQotICAg
ICAgICBVbmlzY3JpYmVDb250cm9sbGVyIGl0KHRoaXMsIHJ1bik7Ci0gICAgICAgIGl0LmFkdmFu
Y2UoZnJvbSk7Ci0gICAgICAgIG9mZnNldEJlZm9yZVJhbmdlID0gaXQucnVuV2lkdGhTb0Zhcigp
OwotICAgICAgICBpdC5hZHZhbmNlKHRvKTsKLSAgICAgICAgb2Zmc2V0QWZ0ZXJSYW5nZSA9IGl0
LnJ1bldpZHRoU29GYXIoKTsKLSAgICAgICAgaXQuYWR2YW5jZSh0byk7Ci0gICAgICAgIHRvdGFs
V2lkdGggPSBpdC5ydW5XaWR0aFNvRmFyKCk7Ci0jZWxzZQogICAgICAgICBDb21wbGV4VGV4dENv
bnRyb2xsZXIgY29tcGxleEl0ZXJhdG9yKCp0aGlzLCBydW4sIGZhbHNlLCBmYWxsYmFja0ZvbnRz
KTsKICAgICAgICAgY29tcGxleEl0ZXJhdG9yLmFkdmFuY2UoZnJvbSwgbnVsbHB0ciwgSW5jbHVk
ZVBhcnRpYWxHbHlwaHMsIGZhbGxiYWNrRm9udHMpOwogICAgICAgICBvZmZzZXRCZWZvcmVSYW5n
ZSA9IGNvbXBsZXhJdGVyYXRvci5ydW5XaWR0aFNvRmFyKCk7CkBAIC0zNjYsNyArMzUzLDYgQEAg
ZmxvYXQgRm9udENhc2NhZGU6OndpZHRoT2ZUZXh0UmFuZ2UoY29uc3QgVGV4dFJ1biYgcnVuLCB1
bnNpZ25lZCBmcm9tLCB1bnNpZ25lZAogICAgICAgICBvZmZzZXRBZnRlclJhbmdlID0gY29tcGxl
eEl0ZXJhdG9yLnJ1bldpZHRoU29GYXIoKTsKICAgICAgICAgY29tcGxleEl0ZXJhdG9yLmFkdmFu
Y2UocnVuLmxlbmd0aCgpLCBudWxscHRyLCBJbmNsdWRlUGFydGlhbEdseXBocywgZmFsbGJhY2tG
b250cyk7CiAgICAgICAgIHRvdGFsV2lkdGggPSBjb21wbGV4SXRlcmF0b3IucnVuV2lkdGhTb0Zh
cigpOwotI2VuZGlmCiAgICAgfSBlbHNlIHsKICAgICAgICAgV2lkdGhJdGVyYXRvciBzaW1wbGVJ
dGVyYXRvcih0aGlzLCBydW4sIGZhbGxiYWNrRm9udHMpOwogICAgICAgICBzaW1wbGVJdGVyYXRv
ci5hZHZhbmNlKGZyb20sIG51bGxwdHIpOwpAQCAtMTM5Nyw3ICsxMzgzLDYgQEAgZmxvYXQgRm9u
dENhc2NhZGU6OmdldEdseXBoc0FuZEFkdmFuY2VzRm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVu
JiBydW4sIHVuc2lnbmUKICAgICByZXR1cm4gaW5pdGlhbEFkdmFuY2U7CiB9CiAKLSNpZiAhUExB
VEZPUk0oV0lOKSB8fCBVU0UoRElSRUNUMkQpCiBmbG9hdCBGb250Q2FzY2FkZTo6Z2V0R2x5cGhz
QW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIHVuc2lnbmVkIGZy
b20sIHVuc2lnbmVkIHRvLCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIEZvclRleHRFbXBoYXNp
c09yTm90IGZvclRleHRFbXBoYXNpcykgY29uc3QKIHsKICAgICBmbG9hdCBpbml0aWFsQWR2YW5j
ZTsKQEAgLTE0MjcsNyArMTQxMiw2IEBAIGZsb2F0IEZvbnRDYXNjYWRlOjpnZXRHbHlwaHNBbmRB
ZHZhbmNlc0ZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgdW5zaWduCiAKICAgICBy
ZXR1cm4gaW5pdGlhbEFkdmFuY2U7CiB9Ci0jZW5kaWYKIAogdm9pZCBGb250Q2FzY2FkZTo6ZHJh
d0VtcGhhc2lzTWFya3NGb3JTaW1wbGVUZXh0KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29u
c3QgVGV4dFJ1biYgcnVuLCBjb25zdCBBdG9tU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50
JiBwb2ludCwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8pIGNvbnN0CiB7CkBAIC0xNDUyLDEz
ICsxNDM2LDcgQEAgdm9pZCBGb250Q2FzY2FkZTo6ZHJhd0dseXBoQnVmZmVyKEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCwgY29uc3QgR2x5cGhCdWZmZXImIGcKIHsKICAgICAvLyBEcmF3IGVhY2gg
Y29udGlndW91cyBydW4gb2YgZ2x5cGhzIHRoYXQgdXNlIHRoZSBzYW1lIGZvbnQgZGF0YS4KICAg
ICBjb25zdCBGb250KiBmb250RGF0YSA9IGdseXBoQnVmZmVyLmZvbnRBdCgwKTsKLSNpZiBQTEFU
Rk9STShXSU4pCi0gICAgRmxvYXRQb2ludCBzdGFydFBvaW50KHBvaW50LngoKSArIGdseXBoQnVm
ZmVyLmluaXRpYWxBZHZhbmNlKCkud2lkdGgoKSwgcG9pbnQueSgpICsgZ2x5cGhCdWZmZXIuaW5p
dGlhbEFkdmFuY2UoKS5oZWlnaHQoKSk7Ci0jZWxzZQotICAgIC8vIEZJWE1FOiBXaHkgZG8gd2Ug
c3VidHJhY3QgdGhlIGluaXRpYWwgYWR2YW5jZSdzIGhlaWdodCBidXQgbm90IGl0cyB3aWR0aD8/
PwotICAgIC8vIFdlIHNob3VsZCB1c2UgdGhlIGxpbmUgYWJvdmUgZnJvbSBXaW5kb3dzIGluc3Rl
YWQuCiAgICAgRmxvYXRQb2ludCBzdGFydFBvaW50KHBvaW50LngoKSwgcG9pbnQueSgpIC0gZ2x5
cGhCdWZmZXIuaW5pdGlhbEFkdmFuY2UoKS5oZWlnaHQoKSk7Ci0jZW5kaWYKICAgICBmbG9hdCBu
ZXh0WCA9IHN0YXJ0UG9pbnQueCgpICsgZ2x5cGhCdWZmZXIuYWR2YW5jZUF0KDApLndpZHRoKCk7
CiAgICAgZmxvYXQgbmV4dFkgPSBzdGFydFBvaW50LnkoKSArIGdseXBoQnVmZmVyLmFkdmFuY2VB
dCgwKS5oZWlnaHQoKTsKICAgICB1bnNpZ25lZCBsYXN0RnJvbSA9IDA7CkBAIC0xNTQ1LDcgKzE1
MjMsNiBAQCBmbG9hdCBGb250Q2FzY2FkZTo6ZmxvYXRXaWR0aEZvclNpbXBsZVRleHQoY29uc3Qg
VGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IEZvbgogICAgIHJldHVybiBpdC5tX3J1bldpZHRo
U29GYXI7CiB9CiAKLSNpZiAhUExBVEZPUk0oV0lOKSB8fCBVU0UoRElSRUNUMkQpCiBmbG9hdCBG
b250Q2FzY2FkZTo6ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwg
SGFzaFNldDxjb25zdCBGb250Kj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqIGdseXBo
T3ZlcmZsb3cpIGNvbnN0CiB7CiAgICAgQ29tcGxleFRleHRDb250cm9sbGVyIGNvbnRyb2xsZXIo
KnRoaXMsIHJ1biwgdHJ1ZSwgZmFsbGJhY2tGb250cyk7CkBAIC0xNTU3LDcgKzE1MzQsNiBAQCBm
bG9hdCBGb250Q2FzY2FkZTo6ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4m
IHJ1biwgSGFzaFNldDxjb25zdCBGbwogICAgIH0KICAgICByZXR1cm4gY29udHJvbGxlci50b3Rh
bFdpZHRoKCk7CiB9Ci0jZW5kaWYKIAogdm9pZCBGb250Q2FzY2FkZTo6YWRqdXN0U2VsZWN0aW9u
UmVjdEZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBMYXlvdXRSZWN0JiBzZWxlY3Rp
b25SZWN0LCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bykgY29uc3QKIHsKQEAgLTE1NzgsNyAr
MTU1NCw2IEBAIHZvaWQgRm9udENhc2NhZGU6OmFkanVzdFNlbGVjdGlvblJlY3RGb3JTaW1wbGVU
ZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgTGF5b3V0UmVjCiAgICAgc2VsZWN0aW9uUmVjdC5zZXRX
aWR0aChMYXlvdXRVbml0Ojpmcm9tRmxvYXRDZWlsKGFmdGVyV2lkdGggLSBiZWZvcmVXaWR0aCkp
OwogfQogCi0jaWYgIVBMQVRGT1JNKFdJTikgfHwgVVNFKERJUkVDVDJEKQogdm9pZCBGb250Q2Fz
Y2FkZTo6YWRqdXN0U2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1
biwgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8p
IGNvbnN0CiB7CiAgICAgQ29tcGxleFRleHRDb250cm9sbGVyIGNvbnRyb2xsZXIoKnRoaXMsIHJ1
bik7CkBAIC0xNTkzLDcgKzE1NjgsNiBAQCB2b2lkIEZvbnRDYXNjYWRlOjphZGp1c3RTZWxlY3Rp
b25SZWN0Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBMYXlvdXRSZQogICAgICAg
ICBzZWxlY3Rpb25SZWN0Lm1vdmUoYmVmb3JlV2lkdGgsIDApOwogICAgIHNlbGVjdGlvblJlY3Qu
c2V0V2lkdGgoTGF5b3V0VW5pdDo6ZnJvbUZsb2F0Q2VpbChhZnRlcldpZHRoIC0gYmVmb3JlV2lk
dGgpKTsKIH0KLSNlbmRpZgogCiBpbnQgRm9udENhc2NhZGU6Om9mZnNldEZvclBvc2l0aW9uRm9y
U2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGZsb2F0IHgsIGJvb2wgaW5jbHVkZVBhcnRp
YWxHbHlwaHMpIGNvbnN0CiB7CkBAIC0xNjM4LDEzICsxNjEyLDExIEBAIGludCBGb250Q2FzY2Fk
ZTo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgZmxv
YXQgeCwgYm9vCiAgICAgcmV0dXJuIG9mZnNldDsKIH0KIAotI2lmICFQTEFURk9STShXSU4pIHx8
IFVTRShESVJFQ1QyRCkKIGludCBGb250Q2FzY2FkZTo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21w
bGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGZsb2F0IHgsIGJvb2wgaW5jbHVkZVBhcnRpYWxH
bHlwaHMpIGNvbnN0CiB7CiAgICAgQ29tcGxleFRleHRDb250cm9sbGVyIGNvbnRyb2xsZXIoKnRo
aXMsIHJ1bik7CiAgICAgcmV0dXJuIGNvbnRyb2xsZXIub2Zmc2V0Rm9yUG9zaXRpb24oeCwgaW5j
bHVkZVBhcnRpYWxHbHlwaHMpOwogfQotI2VuZGlmCiAKICNpZiAhUExBVEZPUk0oQ09DT0EpICYm
ICFVU0UoSEFSRkJVWlopCiAvLyBGSVhNRTogVW5pZnkgdGhpcyB3aXRoIHRoZSBtYWNPUyBhbmQg
aU9TIGltcGxlbWVudGF0aW9uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0NvbXBsZXhUZXh0Q29udHJvbGxlclVuaXNjcmliZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vQ29tcGxleFRleHRDb250cm9sbGVyVW5pc2Ny
aWJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMWVlNWQ5YmVj
NzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vQ29tcGxleFRleHRDb250cm9sbGVyVW5pc2NyaWJlLmNwcApAQCAtMCwwICsxLDE4NiBAQAor
LyoKKyogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisqIGFyZSBtZXQ6CisqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorKiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworKiBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJDb21wbGV4VGV4dENvbnRyb2xsZXIuaCIKKworI2lmICFV
U0UoRElSRUNUMkQpCisKKyNpbmNsdWRlICJGb250Q2FjaGUuaCIKKyNpbmNsdWRlICJGb250Q2Fz
Y2FkZS5oIgorI2luY2x1ZGUgIkhXbmREQy5oIgorI2luY2x1ZGUgPHVzcDEwLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGJvb2wgc2hhcGVCeVVuaXNjcmliZShjb25zdCBVQ2hh
ciogc3RyLCBpbnQgbGVuLCBTQ1JJUFRfSVRFTSBpdGVtLCBjb25zdCBGb250KiBmb250RGF0YSwK
KyAgICBWZWN0b3I8V09SRD4mIGdseXBocywgVmVjdG9yPFdPUkQ+JiBjbHVzdGVycywKKyAgICBW
ZWN0b3I8U0NSSVBUX1ZJU0FUVFI+JiB2aXN1YWxBdHRyaWJ1dGVzKQoreworICAgIEhXbmREQyBo
ZGM7CisgICAgSEZPTlQgb2xkRm9udCA9IDA7CisgICAgSFJFU1VMVCBzaGFwZVJlc3VsdCA9IEVf
UEVORElORzsKKyAgICBpbnQgZ2x5cGhDb3VudCA9IDA7CisKKyAgICBpZiAoIWZvbnREYXRhKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBkbyB7CisgICAgICAgIHNoYXBlUmVzdWx0ID0g
U2NyaXB0U2hhcGUoaGRjLCBmb250RGF0YS0+c2NyaXB0Q2FjaGUoKSwgd2NoYXJGcm9tKHN0ciks
IGxlbiwgZ2x5cGhzLnNpemUoKSwgJml0ZW0uYSwKKyAgICAgICAgICAgIGdseXBocy5kYXRhKCks
IGNsdXN0ZXJzLmRhdGEoKSwgdmlzdWFsQXR0cmlidXRlcy5kYXRhKCksICZnbHlwaENvdW50KTsK
KyAgICAgICAgaWYgKHNoYXBlUmVzdWx0ID09IEVfUEVORElORykgeworICAgICAgICAgICAgLy8g
VGhlIHNjcmlwdCBjYWNoZSBpc24ndCBwcmltZWQgd2l0aCBlbm91Z2ggaW5mbyB5ZXQuIFdlIG5l
ZWQgdG8gc2VsZWN0IG91ciBIRk9OVCBpbnRvCisgICAgICAgICAgICAvLyBhIERDIGFuZCBwYXNz
IHRoZSBEQyBpbiB0byBTY3JpcHRTaGFwZS4KKyAgICAgICAgICAgIEFTU0VSVCghaGRjKTsKKyAg
ICAgICAgICAgIGhkYy5zZXRIV25kKDApOworICAgICAgICAgICAgSEZPTlQgaGZvbnQgPSBmb250
RGF0YS0+cGxhdGZvcm1EYXRhKCkuaGZvbnQoKTsKKyAgICAgICAgICAgIG9sZEZvbnQgPSAoSEZP
TlQpU2VsZWN0T2JqZWN0KGhkYywgaGZvbnQpOworICAgICAgICB9IGVsc2UgaWYgKHNoYXBlUmVz
dWx0ID09IEVfT1VUT0ZNRU1PUlkpIHsKKyAgICAgICAgICAgIC8vIE5lZWQgdG8gcmVzaXplIG91
ciBidWZmZXJzLgorICAgICAgICAgICAgZ2x5cGhzLnJlc2l6ZShnbHlwaHMuc2l6ZSgpICogMik7
CisgICAgICAgICAgICB2aXN1YWxBdHRyaWJ1dGVzLnJlc2l6ZShnbHlwaHMuc2l6ZSgpKTsKKyAg
ICAgICAgfQorICAgIH0gd2hpbGUgKHNoYXBlUmVzdWx0ID09IEVfUEVORElORyB8fCBzaGFwZVJl
c3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKKworICAgIGlmIChoZGMpCisgICAgICAgIFNlbGVjdE9i
amVjdChoZGMsIG9sZEZvbnQpOworCisgICAgaWYgKEZBSUxFRChzaGFwZVJlc3VsdCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGdseXBocy5zaHJpbmsoZ2x5cGhDb3VudCk7CisgICAg
dmlzdWFsQXR0cmlidXRlcy5zaHJpbmsoZ2x5cGhDb3VudCk7CisKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKwordm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmNvbGxlY3RDb21wbGV4VGV4dFJ1bnNG
b3JDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiBjcCwgdW5zaWduZWQgc3RyaW5nTGVuZ3RoLCB1bnNp
Z25lZCBzdHJpbmdMb2NhdGlvbiwgY29uc3QgRm9udCogZm9udCkKK3sKKyAgICBpZiAoIWZvbnQp
IHsKKyAgICAgICAgLy8gQ3JlYXRlIGEgcnVuIG9mIG1pc3NpbmcgZ2x5cGhzIGZyb20gdGhlIHBy
aW1hcnkgZm9udC4KKyAgICAgICAgbV9jb21wbGV4VGV4dFJ1bnMuYXBwZW5kKENvbXBsZXhUZXh0
UnVuOjpjcmVhdGUobV9mb250LnByaW1hcnlGb250KCksIGNwLCBzdHJpbmdMb2NhdGlvbiwgc3Ry
aW5nTGVuZ3RoLCAwLCBzdHJpbmdMZW5ndGgsIG1fcnVuLmx0cigpKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBWZWN0b3I8U0NSSVBUX0lURU0+IGl0ZW1zKDYpOworICAgIGludCBu
dW1JdGVtcyA9IDA7CisgICAgZm9yICg7OykgeworICAgICAgICBTQ1JJUFRfQ09OVFJPTCBjb250
cm9sIHsgfTsKKyAgICAgICAgU0NSSVBUX1NUQVRFIHN0YXRlIHsgfTsKKyAgICAgICAgLy8gU2V0
IHVwIHRoZSBjb3JyZWN0IGRpcmVjdGlvbiBmb3IgdGhlIHJ1bi4KKyAgICAgICAgc3RhdGUudUJp
ZGlMZXZlbCA9IG1fcnVuLnJ0bCgpOworICAgICAgICAvLyBMb2NrIHRoZSBjb3JyZWN0IGRpcmVj
dGlvbmFsIG92ZXJyaWRlLgorICAgICAgICBzdGF0ZS5mT3ZlcnJpZGVEaXJlY3Rpb24gPSBtX3J1
bi5kaXJlY3Rpb25hbE92ZXJyaWRlKCk7CisKKyAgICAgICAgLy8gU2NyaXB0SXRlbWl6ZSBtYXkg
d3JpdGUgKGNNYXhJdGVtcyArIDEpIFNDUklQVF9JVEVNLgorICAgICAgICBIUkVTVUxUIGhyID0g
U2NyaXB0SXRlbWl6ZSh3Y2hhckZyb20oY3ApLCBzdHJpbmdMZW5ndGgsIGl0ZW1zLnNpemUoKSAt
IDEsICZjb250cm9sLCAmc3RhdGUsIGl0ZW1zLmRhdGEoKSwgJm51bUl0ZW1zKTsKKyAgICAgICAg
aWYgKGhyICE9IEVfT1VUT0ZNRU1PUlkpIHsKKyAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQo
aHIpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGl0ZW1zLnJlc2l6
ZShpdGVtcy5zaXplKCkgKiAyKTsKKyAgICB9CisgICAgaXRlbXMucmVzaXplKG51bUl0ZW1zICsg
MSk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUl0ZW1zOyBpKyspIHsKKyAgICAgICAg
Ly8gRGV0ZXJtaW5lIHRoZSBzdHJpbmcgZm9yIHRoaXMgaXRlbS4KKyAgICAgICAgY29uc3QgVUNo
YXIqIHN0ciA9IGNwICsgaXRlbXNbaV0uaUNoYXJQb3M7CisgICAgICAgIGludCBsZW5ndGggPSBp
dGVtc1tpKzFdLmlDaGFyUG9zIC0gaXRlbXNbaV0uaUNoYXJQb3M7CisgICAgICAgIFNDUklQVF9J
VEVNJiBpdGVtID0gaXRlbXNbaV07CisKKyAgICAgICAgLy8gU2V0IHVwIGJ1ZmZlcnMgdG8gaG9s
ZCB0aGUgcmVzdWx0cyBvZiBzaGFwaW5nIHRoZSBpdGVtLgorICAgICAgICBWZWN0b3I8V09SRD4g
Z2x5cGhzOworICAgICAgICBWZWN0b3I8V09SRD4gY2x1c3RlcnM7CisgICAgICAgIFZlY3RvcjxT
Q1JJUFRfVklTQVRUUj4gdmlzdWFsQXR0cmlidXRlczsKKyAgICAgICAgY2x1c3RlcnMucmVzaXpl
KGxlbmd0aCk7CisKKyAgICAgICAgLy8gU2hhcGUgdGhlIGl0ZW0uCisgICAgICAgIC8vIFRoZSBy
ZWNvbW1lbmRlZCBzaXplIGZvciB0aGUgZ2x5cGggYnVmZmVyIGlzIDEuNSAqIHRoZSBjaGFyYWN0
ZXIgbGVuZ3RoICsgMTYgaW4gdGhlIHVuaXNjcmliZSBkb2NzLgorICAgICAgICAvLyBBcHBhcmVu
dGx5IHRoaXMgaXMgYSBnb29kIHNpemUgdG8gYXZvaWQgaGF2aW5nIHRvIG1ha2UgcmVwZWF0ZWQg
Y2FsbHMgdG8gU2NyaXB0U2hhcGUuCisgICAgICAgIGdseXBocy5yZXNpemUoMS41ICogbGVuZ3Ro
ICsgMTYpOworICAgICAgICB2aXN1YWxBdHRyaWJ1dGVzLnJlc2l6ZShnbHlwaHMuc2l6ZSgpKTsK
KworICAgICAgICBpZiAoIXNoYXBlQnlVbmlzY3JpYmUoc3RyLCBsZW5ndGgsIGl0ZW0sIGZvbnQs
IGdseXBocywgY2x1c3RlcnMsIHZpc3VhbEF0dHJpYnV0ZXMpKQorICAgICAgICAgICAgY29udGlu
dWU7CisKKyAgICAgICAgLy8gV2Ugbm93IGhhdmUgYSBjb2xsZWN0aW9uIG9mIGdseXBocy4KKyAg
ICAgICAgVmVjdG9yPEdPRkZTRVQ+IG9mZnNldHM7CisgICAgICAgIFZlY3RvcjxpbnQ+IGFkdmFu
Y2VzOworICAgICAgICBvZmZzZXRzLnJlc2l6ZShnbHlwaHMuc2l6ZSgpKTsKKyAgICAgICAgYWR2
YW5jZXMucmVzaXplKGdseXBocy5zaXplKCkpOworICAgICAgICBIUkVTVUxUIHBsYWNlUmVzdWx0
ID0gU2NyaXB0UGxhY2UoMCwgZm9udC0+c2NyaXB0Q2FjaGUoKSwgZ2x5cGhzLmRhdGEoKSwgZ2x5
cGhzLnNpemUoKSwgdmlzdWFsQXR0cmlidXRlcy5kYXRhKCksCisgICAgICAgICAgICAmaXRlbS5h
LCBhZHZhbmNlcy5kYXRhKCksIG9mZnNldHMuZGF0YSgpLCAwKTsKKyAgICAgICAgaWYgKHBsYWNl
UmVzdWx0ID09IEVfUEVORElORykgeworICAgICAgICAgICAgLy8gVGhlIHNjcmlwdCBjYWNoZSBp
c24ndCBwcmltZWQgd2l0aCBlbm91Z2ggaW5mbyB5ZXQuIFdlIG5lZWQgdG8gc2VsZWN0IG91ciBI
Rk9OVCBpbnRvCisgICAgICAgICAgICAvLyBhIERDIGFuZCBwYXNzIHRoZSBEQyBpbiB0byBTY3Jp
cHRQbGFjZS4KKyAgICAgICAgICAgIEhXbmREQyBoZGMoMCk7CisgICAgICAgICAgICBIRk9OVCBo
Zm9udCA9IGZvbnQtPnBsYXRmb3JtRGF0YSgpLmhmb250KCk7CisgICAgICAgICAgICBIRk9OVCBv
bGRGb250ID0gKEhGT05UKVNlbGVjdE9iamVjdChoZGMsIGhmb250KTsKKyAgICAgICAgICAgIHBs
YWNlUmVzdWx0ID0gU2NyaXB0UGxhY2UoaGRjLCBmb250LT5zY3JpcHRDYWNoZSgpLCBnbHlwaHMu
ZGF0YSgpLCBnbHlwaHMuc2l6ZSgpLCB2aXN1YWxBdHRyaWJ1dGVzLmRhdGEoKSwKKyAgICAgICAg
ICAgICAgICAmaXRlbS5hLCBhZHZhbmNlcy5kYXRhKCksIG9mZnNldHMuZGF0YSgpLCAwKTsKKyAg
ICAgICAgICAgIFNlbGVjdE9iamVjdChoZGMsIG9sZEZvbnQpOworICAgICAgICB9CisgICAgCisg
ICAgICAgIGlmIChGQUlMRUQocGxhY2VSZXN1bHQpIHx8IGdseXBocy5pc0VtcHR5KCkpCisgICAg
ICAgICAgICBjb250aW51ZTsKKworICAgICAgICBWZWN0b3I8dW5zaWduZWQ+IHN0cmluZ0luZGlj
ZXMoZ2x5cGhzLnNpemUoKSwgaXRlbS5pQ2hhclBvcyk7CisKKyAgICAgICAgZm9yIChpbnQgayA9
IGxlbmd0aCAtIDE7IGsgPj0gMDsgay0tKQorICAgICAgICAgICAgc3RyaW5nSW5kaWNlc1tjbHVz
dGVyc1trXV0gPSBpdGVtLmlDaGFyUG9zICsgazsKKworICAgICAgICBWZWN0b3I8RmxvYXRTaXpl
PiBiYXNlQWR2YW5jZXM7CisgICAgICAgIFZlY3RvcjxGbG9hdFBvaW50PiBvcmlnaW5zOworICAg
ICAgICBiYXNlQWR2YW5jZXMucmVzZXJ2ZUNhcGFjaXR5KGdseXBocy5zaXplKCkpOworICAgICAg
ICBvcmlnaW5zLnJlc2VydmVDYXBhY2l0eShnbHlwaHMuc2l6ZSgpKTsKKworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGsgPSAwOyBrIDwgZ2x5cGhzLnNpemUoKTsgaysrKSB7CisgICAgICAgICAgICBj
b25zdCBmbG9hdCBjTG9naWNhbFNjYWxlID0gZm9udC0+cGxhdGZvcm1EYXRhKCkudXNlR0RJKCkg
PyAxIDogMzI7CisgICAgICAgICAgICBmbG9hdCBhZHZhbmNlID0gYWR2YW5jZXNba10gLyBjTG9n
aWNhbFNjYWxlOworICAgICAgICAgICAgZmxvYXQgb2Zmc2V0WCA9IG9mZnNldHNba10uZHUgLyBj
TG9naWNhbFNjYWxlOworICAgICAgICAgICAgZmxvYXQgb2Zmc2V0WSA9IG9mZnNldHNba10uZHYg
LyBjTG9naWNhbFNjYWxlOworCisgICAgICAgICAgICAvLyBNYXRjaCBBcHBLaXQncyBydWxlcyBm
b3IgdGhlIGludGVnZXIgdnMuIG5vbi1pbnRlZ2VyIHJlbmRlcmluZyBtb2Rlcy4KKyAgICAgICAg
ICAgIGlmICghZm9udC0+cGxhdGZvcm1EYXRhKCkuaXNTeXN0ZW1Gb250KCkpIHsKKyAgICAgICAg
ICAgICAgICBhZHZhbmNlID0gcm91bmRmKGFkdmFuY2UpOworICAgICAgICAgICAgICAgIG9mZnNl
dFggPSByb3VuZGYob2Zmc2V0WCk7CisgICAgICAgICAgICAgICAgb2Zmc2V0WSA9IHJvdW5kZihv
ZmZzZXRZKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gRklYTUU6IFdlIG5lZWQg
dG8gdGFrZSB0aGUgR09GRlNFVFMgZm9yIGNvbWJpbmluZyBnbHlwaHMgYW5kIHN0b3JlIHRoZW0g
aW4gdGhlIGdseXBoIGJ1ZmZlcgorICAgICAgICAgICAgLy8gYXMgd2VsbCwgc28gdGhhdCB3aGVu
IHRoZSB0aW1lIGNvbWVzIHRvIGRyYXcgdGhvc2UgZ2x5cGhzLCB3ZSBjYW4gYXBwbHkgdGhlIGFw
cHJvcHJpYXRlCisgICAgICAgICAgICAvLyB0cmFuc2xhdGlvbi4KKworICAgICAgICAgICAgYmFz
ZUFkdmFuY2VzLnVuY2hlY2tlZEFwcGVuZCh7IGFkdmFuY2UsIDAgfSk7CisgICAgICAgICAgICBv
cmlnaW5zLnVuY2hlY2tlZEFwcGVuZCh7IG9mZnNldFgsIG9mZnNldFkgfSk7CisgICAgICAgIH0K
KyAgICAgICAgRmxvYXRTaXplIGluaXRpYWxBZHZhbmNlID0gdG9GbG9hdFNpemUob3JpZ2luc1sw
XSk7CisgICAgICAgIGJvb2wgbHRyID0gIWl0ZW0uYS5mUlRMOworICAgICAgICBtX2NvbXBsZXhU
ZXh0UnVucy5hcHBlbmQoQ29tcGxleFRleHRSdW46OmNyZWF0ZShiYXNlQWR2YW5jZXMsIG9yaWdp
bnMsIGdseXBocywgc3RyaW5nSW5kaWNlcywgaW5pdGlhbEFkdmFuY2UsICpmb250LCBjcCwgc3Ry
aW5nTG9jYXRpb24sIHN0cmluZ0xlbmd0aCwgaXRlbS5pQ2hhclBvcywgaXRlbXNbaSsxXS5pQ2hh
clBvcywgbHRyKSk7CisgICAgfQorfQorCit9CisKKyNlbmRpZiAvLyAhVVNFKERJUkVDVDJEKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDR1dp
bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENHV2luLmNw
cAppbmRleCAwZWY2NTVkOGQwNS4uMzNmODUyZWI2ZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q0dXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q0dXaW4uY3BwCkBAIC0zNCw3ICszNCw2IEBA
CiAjaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
ICNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiVW5pc2NyaWJlQ29udHJvbGxlci5oIgog
I2luY2x1ZGUgIldlYkNvcmVUZXh0UmVuZGVyZXIuaCIKICNpbmNsdWRlIDxwYWwvc3BpL2NnL0Nv
cmVHcmFwaGljc1NQSS5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhc2NhZGVEaXJlY3Qy
RC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhc2NhZGVE
aXJlY3QyRC5jcHAKaW5kZXggOTExMTJkOTY1YzguLmIyZDM0NzFiOGFjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhc2NhZGVEaXJlY3QyRC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYXNjYWRl
RGlyZWN0MkQuY3BwCkBAIC0zNyw3ICszNyw2IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
UGxhdGZvcm1Qcml2YXRlRGlyZWN0MkQuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVk
ZSAiUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuaCIKLSNpbmNsdWRlICJVbmlzY3JpYmVDb250cm9s
bGVyLmgiCiAjaW5jbHVkZSAiV2ViQ29yZVRleHRSZW5kZXJlci5oIgogI2luY2x1ZGUgPGQyZDEu
aD4KICNpbmNsdWRlIDxkd3JpdGVfMy5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0ZvbnRXaW4uY3BwCmluZGV4IDFjYWE4MDIyZTI2Li41MmNiODhmNTNkMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRXaW4u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250V2luLmNw
cApAQCAtMzUsMTAgKzM1LDYgQEAKICNpbmNsdWRlICJUZXh0UnVuLmgiCiAjaW5jbHVkZSA8d3Rm
L01hdGhFeHRyYXMuaD4KIAotI2lmICFVU0UoRElSRUNUMkQpCi0jaW5jbHVkZSAiVW5pc2NyaWJl
Q29udHJvbGxlci5oIgotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogYm9vbCBGb250
Q2FzY2FkZTo6Y2FuUmV0dXJuRmFsbGJhY2tGb250c0ZvckNvbXBsZXhUZXh0KCkKQEAgLTUxLDcy
ICs0Nyw0IEBAIGJvb2wgRm9udENhc2NhZGU6OmNhbkV4cGFuZEFyb3VuZElkZW9ncmFwaHNJbkNv
bXBsZXhUZXh0KCkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLSNpZiAhVVNFKERJUkVDVDJEKQot
Ci12b2lkIEZvbnRDYXNjYWRlOjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQoY29u
c3QgVGV4dFJ1biYgcnVuLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCB1bnNpZ25lZCBmcm9t
LCB1bnNpZ25lZCB0bykgY29uc3QKLXsKLSAgICBVbmlzY3JpYmVDb250cm9sbGVyIGl0KHRoaXMs
IHJ1bik7Ci0gICAgaXQuYWR2YW5jZShmcm9tKTsKLSAgICBmbG9hdCBiZWZvcmVXaWR0aCA9IGl0
LnJ1bldpZHRoU29GYXIoKTsKLSAgICBpdC5hZHZhbmNlKHRvKTsKLSAgICBmbG9hdCBhZnRlcldp
ZHRoID0gaXQucnVuV2lkdGhTb0ZhcigpOwotCi0gICAgaWYgKHJ1bi5ydGwoKSkgewotICAgICAg
ICBpdC5hZHZhbmNlKHJ1bi5sZW5ndGgoKSk7Ci0gICAgICAgIHNlbGVjdGlvblJlY3QubW92ZShp
dC5ydW5XaWR0aFNvRmFyKCkgLSBhZnRlcldpZHRoLCAwKTsKLSAgICB9IGVsc2UKLSAgICAgICAg
c2VsZWN0aW9uUmVjdC5tb3ZlKGJlZm9yZVdpZHRoLCAwKTsKLSAgICBzZWxlY3Rpb25SZWN0LnNl
dFdpZHRoKGFmdGVyV2lkdGggLSBiZWZvcmVXaWR0aCk7Ci19Ci0KLWZsb2F0IEZvbnRDYXNjYWRl
OjpnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwg
dW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8sIEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgRm9y
VGV4dEVtcGhhc2lzT3JOb3QgZm9yVGV4dEVtcGhhc2lzKSBjb25zdAotewotICAgIGlmIChmb3JU
ZXh0RW1waGFzaXMpIHsKLSAgICAgICAgLy8gRklYTUU6IEFkZCBmb3JUZXh0RW1waGFzaXMgcGFy
ZW1ldGVyIHRvIFVuaXNjcmliZUNvbnRyb2xsZXIgYW5kIHVzZSBpdC4KLSAgICAgICAgTE9HX0VS
Uk9SKCJOb3QgaW1wbGVtZW50ZWQgZm9yIHRleHQgZW1waGFzaXMuIik7Ci0gICAgICAgIHJldHVy
biAwOwotICAgIH0KLQotICAgIFVuaXNjcmliZUNvbnRyb2xsZXIgY29udHJvbGxlcih0aGlzLCBy
dW4pOwotICAgIGNvbnRyb2xsZXIuYWR2YW5jZShmcm9tKTsKLSAgICBmbG9hdCBiZWZvcmVXaWR0
aCA9IGNvbnRyb2xsZXIucnVuV2lkdGhTb0ZhcigpOwotICAgIGNvbnRyb2xsZXIuYWR2YW5jZSh0
bywgJmdseXBoQnVmZmVyKTsKLQotICAgIGlmIChnbHlwaEJ1ZmZlci5pc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybiAwOwotCi0gICAgZmxvYXQgYWZ0ZXJXaWR0aCA9IGNvbnRyb2xsZXIucnVuV2lk
dGhTb0ZhcigpOwotCi0gICAgaWYgKHJ1bi5ydGwoKSkgewotICAgICAgICBjb250cm9sbGVyLmFk
dmFuY2UocnVuLmxlbmd0aCgpKTsKLSAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXIucnVuV2lkdGhT
b0ZhcigpIC0gYWZ0ZXJXaWR0aDsKLSAgICB9Ci0gICAgcmV0dXJuIGJlZm9yZVdpZHRoOwotfQot
Ci1mbG9hdCBGb250Q2FzY2FkZTo6ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRS
dW4mIHJ1biwgSGFzaFNldDxjb25zdCBGb250Kj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZs
b3cqIGdseXBoT3ZlcmZsb3cpIGNvbnN0Ci17Ci0gICAgVW5pc2NyaWJlQ29udHJvbGxlciBjb250
cm9sbGVyKHRoaXMsIHJ1biwgZmFsbGJhY2tGb250cyk7Ci0gICAgY29udHJvbGxlci5hZHZhbmNl
KHJ1bi5sZW5ndGgoKSk7Ci0gICAgaWYgKGdseXBoT3ZlcmZsb3cpIHsKLSAgICAgICAgZ2x5cGhP
dmVyZmxvdy0+dG9wID0gc3RkOjptYXg8aW50PihnbHlwaE92ZXJmbG93LT50b3AsIGNlaWxmKC1j
b250cm9sbGVyLm1pbkdseXBoQm91bmRpbmdCb3hZKCkpIC0gKGdseXBoT3ZlcmZsb3ctPmNvbXB1
dGVCb3VuZHMgPyAwIDogZm9udE1ldHJpY3MoKS5hc2NlbnQoKSkpOwotICAgICAgICBnbHlwaE92
ZXJmbG93LT5ib3R0b20gPSBzdGQ6Om1heDxpbnQ+KGdseXBoT3ZlcmZsb3ctPmJvdHRvbSwgY2Vp
bGYoY29udHJvbGxlci5tYXhHbHlwaEJvdW5kaW5nQm94WSgpKSAtIChnbHlwaE92ZXJmbG93LT5j
b21wdXRlQm91bmRzID8gMCAgOiBmb250TWV0cmljcygpLmRlc2NlbnQoKSkpOwotICAgICAgICBn
bHlwaE92ZXJmbG93LT5sZWZ0ID0gc3RkOjptYXg8aW50PigwLCBjZWlsZigtY29udHJvbGxlci5t
aW5HbHlwaEJvdW5kaW5nQm94WCgpKSk7Ci0gICAgICAgIGdseXBoT3ZlcmZsb3ctPnJpZ2h0ID0g
c3RkOjptYXg8aW50PigwLCBjZWlsZihjb250cm9sbGVyLm1heEdseXBoQm91bmRpbmdCb3hYKCkg
LSBjb250cm9sbGVyLnJ1bldpZHRoU29GYXIoKSkpOwotICAgIH0KLSAgICByZXR1cm4gY29udHJv
bGxlci5ydW5XaWR0aFNvRmFyKCk7Ci19Ci0KLWludCBGb250Q2FzY2FkZTo6b2Zmc2V0Rm9yUG9z
aXRpb25Gb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGZsb2F0IHhGbG9hdCwgYm9v
bCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogVGhpcyB0cnVu
Y2F0aW9uIGlzIG5vdCBhIHByb2JsZW0gZm9yIEhUTUwsIGJ1dCBvbmx5IGFmZmVjdHMgU1ZHLCB3
aGljaCBwYXNzZXMgZmxvYXRpbmctcG9pbnQgbnVtYmVycwotICAgIC8vIHRvIEZvbnRDYXNjYWRl
OjpvZmZzZXRGb3JQb3NpdGlvbigpLiBCdWcgaHR0cDovL3dlYmtpdC5vcmcvYi80MDY3MyB0cmFj
a3MgZml4aW5nIHRoaXMgcHJvYmxlbS4KLSAgICBpbnQgeCA9IHN0YXRpY19jYXN0PGludD4oeEZs
b2F0KTsKLQotICAgIFVuaXNjcmliZUNvbnRyb2xsZXIgY29udHJvbGxlcih0aGlzLCBydW4pOwot
ICAgIHJldHVybiBjb250cm9sbGVyLm9mZnNldEZvclBvc2l0aW9uKHgsIGluY2x1ZGVQYXJ0aWFs
R2x5cGhzKTsKLX0KLQotI2VuZGlmCi0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9VbmlzY3JpYmVDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9VbmlzY3JpYmVDb250cm9sbGVyLmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDc0YzQ4NjBmZjEuLjAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9VbmlzY3JpYmVDb250cm9sbGVyLmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDQ1OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDA3LCAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlVuaXNjcmliZUNvbnRyb2xs
ZXIuaCIKLQotI2luY2x1ZGUgIkZvbnQuaCIKLSNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgotI2lu
Y2x1ZGUgIkhXbmREQy5oIgotI2luY2x1ZGUgIlRleHRSdW4uaCIKLSNpbmNsdWRlIDx3dGYvTWF0
aEV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L3dpbi9XQ2hhclN0cmluZ0V4dHJhcy5oPgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci11c2luZyBuYW1lc3BhY2UgV1RGOjpVbmljb2RlOwotCi0v
LyBGSVhNRTogUmVhcmNoaXRlY3QgdGhpcyB0byBiZSBtb3JlIGxpa2UgV2lkdGhJdGVyYXRvciBp
biBGb250LmNwcC4gIEhhdmUgYW4gYWR2YW5jZSgpIG1ldGhvZAotLy8gdGhhdCBkb2VzIHN0dWZm
IGluIHRoYXQgbWV0aG9kIGluc3RlYWQgb2YgZG9pbmcgZXZlcnl0aGluZyBpbiB0aGUgY29uc3Ry
dWN0b3IuICBIYXZlIGFkdmFuY2UoKQotLy8gdGFrZSB0aGUgR2x5cGhCdWZmZXIgYXMgYW4gYXJn
IHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBwb3B1bGF0ZSB0aGUgZ2x5cGggYnVmZmVyIHdoZW4K
LS8vIG1lYXN1cmluZy4KLVVuaXNjcmliZUNvbnRyb2xsZXI6OlVuaXNjcmliZUNvbnRyb2xsZXIo
Y29uc3QgRm9udENhc2NhZGUqIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgSGFzaFNldDxjb25z
dCBGb250Kj4qIGZhbGxiYWNrRm9udHMpCi0gICAgOiBtX2ZvbnQoKmZvbnQpCi0gICAgLCBtX3J1
bihydW4pCi0gICAgLCBtX2ZhbGxiYWNrRm9udHMoZmFsbGJhY2tGb250cykKLSAgICAsIG1fbWlu
R2x5cGhCb3VuZGluZ0JveFgoc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46Om1heCgpKQotICAg
ICwgbV9tYXhHbHlwaEJvdW5kaW5nQm94WChzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6bWlu
KCkpCi0gICAgLCBtX21pbkdseXBoQm91bmRpbmdCb3hZKHN0ZDo6bnVtZXJpY19saW1pdHM8Zmxv
YXQ+OjptYXgoKSkKLSAgICAsIG1fbWF4R2x5cGhCb3VuZGluZ0JveFkoc3RkOjpudW1lcmljX2xp
bWl0czxmbG9hdD46Om1pbigpKQotICAgICwgbV9jdXJyZW50Q2hhcmFjdGVyKDApCi0gICAgLCBt
X2VuZChydW4ubGVuZ3RoKCkpCi0gICAgLCBtX3J1bldpZHRoU29GYXIoMCkKLSAgICAsIG1fcGFk
ZGluZyhydW4uZXhwYW5zaW9uKCkpCi0gICAgLCBtX2NvbXB1dGluZ09mZnNldFBvc2l0aW9uKGZh
bHNlKQotICAgICwgbV9pbmNsdWRlUGFydGlhbEdseXBocyhmYWxzZSkKLSAgICAsIG1fb2Zmc2V0
WCgwKQotICAgICwgbV9vZmZzZXRQb3NpdGlvbigwKQotewotICAgIGlmICghbV9wYWRkaW5nKQot
ICAgICAgICBtX3BhZFBlclNwYWNlID0gMDsKLSAgICBlbHNlIHsKLSAgICAgICAgZmxvYXQgbnVt
U3BhY2VzID0gMDsKLSAgICAgICAgZm9yIChpbnQgcyA9IDA7IHMgPCBtX3J1bi5sZW5ndGgoKTsg
cysrKSB7Ci0gICAgICAgICAgICBpZiAoRm9udENhc2NhZGU6OnRyZWF0QXNTcGFjZShtX3J1bltz
XSkpCi0gICAgICAgICAgICAgICAgbnVtU3BhY2VzKys7Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAobnVtU3BhY2VzID09IDApCi0gICAgICAgICAgICBtX3BhZFBlclNwYWNlID0gMDsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgbV9wYWRQZXJTcGFjZSA9IG1fcGFkZGluZyAvIG51bVNwYWNl
czsKLSAgICB9Ci0KLSAgICAvLyBOdWxsIG91dCBvdXIgdW5pc2NyaWJlIHN0cnVjdHMKLSAgICBy
ZXNldENvbnRyb2xBbmRTdGF0ZSgpOwotfQotCi1pbnQgVW5pc2NyaWJlQ29udHJvbGxlcjo6b2Zm
c2V0Rm9yUG9zaXRpb24oaW50IHgsIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpCi17Ci0gICAg
bV9jb21wdXRpbmdPZmZzZXRQb3NpdGlvbiA9IHRydWU7Ci0gICAgbV9pbmNsdWRlUGFydGlhbEds
eXBocyA9IGluY2x1ZGVQYXJ0aWFsR2x5cGhzOwotICAgIG1fb2Zmc2V0WCA9IHg7Ci0gICAgbV9v
ZmZzZXRQb3NpdGlvbiA9IDA7Ci0gICAgYWR2YW5jZShtX3J1bi5sZW5ndGgoKSk7Ci0gICAgaWYg
KG1fY29tcHV0aW5nT2Zmc2V0UG9zaXRpb24pIHsKLSAgICAgICAgLy8gVGhlIHBvaW50IGlzIHRv
IHRoZSBsZWZ0IG9yIHRvIHRoZSByaWdodCBvZiB0aGUgZW50aXJlIHJ1bi4KLSAgICAgICAgaWYg
KChtX29mZnNldFggPj0gbV9ydW5XaWR0aFNvRmFyICYmIG1fcnVuLmx0cigpKSB8fCAobV9vZmZz
ZXRYIDwgMCAmJiBtX3J1bi5ydGwoKSkpCi0gICAgICAgICAgICBtX29mZnNldFBvc2l0aW9uID0g
bV9lbmQ7Ci0gICAgfQotICAgIG1fY29tcHV0aW5nT2Zmc2V0UG9zaXRpb24gPSBmYWxzZTsKLSAg
ICByZXR1cm4gbV9vZmZzZXRQb3NpdGlvbjsKLX0KLQotdm9pZCBVbmlzY3JpYmVDb250cm9sbGVy
OjphZHZhbmNlKHVuc2lnbmVkIG9mZnNldCwgR2x5cGhCdWZmZXIqIGdseXBoQnVmZmVyKQotewot
ICAgIC8vIEZJWE1FOiBXZSByZWFsbHkgd2FudCB0byBiZSB1c2luZyBhIG5ld2VyIHZlcnNpb24g
b2YgVW5pc2NyaWJlIHRoYXQgc3VwcG9ydHMgdGhlIG5ldyBPcGVuVHlwZQotICAgIC8vIGZ1bmN0
aW9ucy4gIFRob3NlIGZ1bmN0aW9ucyB3b3VsZCBhbGxvdyB1cyB0byB0dXJuIG9mZiBrZXJuaW5n
IGFuZCBsaWdhdHVyZXMuICBXaXRob3V0IGJlaW5nIGFibGUKLSAgICAvLyB0byBkbyB0aGF0LCB3
ZSB3aWxsIGhhdmUgYnVnZ3kgbGluZSBicmVha2luZyBhbmQgbWV0cmljcyB3aGVuIHNpbXBsZSBh
bmQgY29tcGxleCB0ZXh0IGFyZSBjbG9zZQotICAgIC8vIHRvZ2V0aGVyICh0aGUgY29tcGxleCBj
b2RlIHBhdGggd2lsbCBuYXJyb3cgdGhlIHRleHQgYmVjYXVzZSBvZiBrZXJuaW5nIGFuZCBsaWdh
dHVyZXMgYW5kIHRoZW4KLSAgICAvLyB3aGVuIGJpZGkgcHJvY2Vzc2luZyBzcGxpdHMgaW50byBt
dWx0aXBsZSBydW5zLCB0aGUgc2ltcGxlIHBvcnRpb25zIHdpbGwgZ2V0IHdpZGVyIGFuZCBjYXVz
ZSB1cyB0bwotICAgIC8vIHNwaWxsIG9mZiB0aGUgZWRnZSBvZiBhIGxpbmUpLgotICAgIGlmIChz
dGF0aWNfY2FzdDxpbnQ+KG9mZnNldCkgPiBtX2VuZCkKLSAgICAgICAgb2Zmc2V0ID0gbV9lbmQ7
Ci0KLSAgICBpbnQgbGVuZ3RoID0gb2Zmc2V0IC0gbV9jdXJyZW50Q2hhcmFjdGVyOwotICAgIGlm
IChsZW5ndGggPD0gMCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU3RyaW5nIGJ1ZmZlckZvcjE2
Qml0RGF0YTsKLQotICAgIC8vIEl0ZW1pemUgdGhlIHN0cmluZy4KLSAgICBjb25zdCBVQ2hhciog
Y3AgPSBudWxscHRyOwotICAgIGlmIChtX3J1bi5pczhCaXQoKSkgewotICAgICAgICAvLyBVbmlz
Y3JpYmUgb25seSBkZWFscyB3aXRoIDE2LWJpdCBjaGFyYWN0ZXJzLiBNdXN0IGdlbmVyYXRlIHRo
ZW0gbm93LgotICAgICAgICBidWZmZXJGb3IxNkJpdERhdGEgPSBTdHJpbmc6Om1ha2UxNkJpdEZy
b204Qml0U291cmNlKG1fcnVuLmRhdGE4KG1fY3VycmVudENoYXJhY3RlciksIGxlbmd0aCk7Ci0g
ICAgICAgIGNwID0gYnVmZmVyRm9yMTZCaXREYXRhLmNoYXJhY3RlcnMxNigpOwotICAgIH0gZWxz
ZQotICAgICAgICBjcCA9IG1fcnVuLmRhdGExNihtX2N1cnJlbnRDaGFyYWN0ZXIpOwotCi0gICAg
dW5zaWduZWQgYmFzZUNoYXJhY3RlciA9IG1fY3VycmVudENoYXJhY3RlcjsKLQotICAgIC8vIFdl
IGJyZWFrIHVwIGl0ZW1pemF0aW9uIG9mIHRoZSBzdHJpbmcgYnkgZm9udERhdGEgYW5kIChpZiBu
ZWVkZWQpIHRoZSB1c2Ugb2Ygc21hbGwgY2Fwcy4KLQotICAgIC8vIEZJWE1FOiBJdCdzIGluY29u
c2lzdGVudCB0aGF0IHdlIHVzZSBsb2dpY2FsIG9yZGVyIHdoZW4gaXRlbWl6aW5nLCBzaW5jZSB0
aGlzCi0gICAgLy8gZG9lcyBub3QgbWF0Y2ggbm9ybWFsIFJUTC4KLQotICAgIC8vIEZJWE1FOiBU
aGlzIGZ1bmN0aW9uIHNob3VsZCBkZWNvZGUgc3Vycm9nYXRlIHBhaXJzLiBDdXJyZW50bHkgaXQg
bWFrZXMgbGl0dGxlIGRpZmZlcmVuY2UgdGhhdAotICAgIC8vIGl0IGRvZXMgbm90IGJlY2F1c2Ug
dGhlIGZvbnQgY2FjaGUgb24gV2luZG93cyBkb2VzIG5vdCBzdXBwb3J0IG5vbi1CTVAgY2hhcmFj
dGVycy4KLSAgICBWZWN0b3I8VUNoYXIsIDI1Nj4gc21hbGxDYXBzQnVmZmVyOwotICAgIGlmICht
X2ZvbnQuaXNTbWFsbENhcHMoKSkKLSAgICAgICAgc21hbGxDYXBzQnVmZmVyLnJlc2l6ZShsZW5n
dGgpOwotCi0gICAgdW5zaWduZWQgaW5kZXhPZkZvbnRUcmFuc2l0aW9uID0gbV9ydW4ucnRsKCkg
PyBsZW5ndGggLSAxIDogMDsKLSAgICBjb25zdCBVQ2hhciogY3VyciA9IG1fcnVuLnJ0bCgpID8g
Y3AgKyBsZW5ndGggIC0gMSA6IGNwOwotICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBtX3J1bi5ydGwo
KSA/IGNwIC0gMSA6IGNwICsgbGVuZ3RoOwotCi0gICAgY29uc3QgRm9udCogZm9udERhdGE7Ci0g
ICAgY29uc3QgRm9udCogbmV4dEZvbnREYXRhID0gbV9mb250LmdseXBoRGF0YUZvckNoYXJhY3Rl
cigqY3VyciwgZmFsc2UpLmZvbnQ7Ci0KLSAgICBVQ2hhciBuZXdDID0gMDsKLQotICAgIGJvb2wg
aXNTbWFsbENhcHM7Ci0gICAgYm9vbCBuZXh0SXNTbWFsbENhcHMgPSBtX2ZvbnQuaXNTbWFsbENh
cHMoKSAmJiAhKFVfR0VUX0dDX01BU0soKmN1cnIpICYgVV9HQ19NX01BU0spICYmIChuZXdDID0g
dV90b3VwcGVyKCpjdXJyKSkgIT0gKmN1cnI7Ci0KLSAgICBpZiAobmV4dElzU21hbGxDYXBzKQot
ICAgICAgICBzbWFsbENhcHNCdWZmZXJbY3VyciAtIGNwXSA9IG5ld0M7Ci0KLSAgICB3aGlsZSAo
dHJ1ZSkgewotICAgICAgICBjdXJyID0gbV9ydW4ucnRsKCkgPyBjdXJyIC0gMSA6IGN1cnIgKyAx
OwotICAgICAgICBpZiAoY3VyciA9PSBlbmQpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAg
ICBmb250RGF0YSA9IG5leHRGb250RGF0YTsKLSAgICAgICAgaXNTbWFsbENhcHMgPSBuZXh0SXNT
bWFsbENhcHM7Ci0gICAgICAgIGludCBpbmRleCA9IGN1cnIgLSBjcDsKLSAgICAgICAgVUNoYXIg
YyA9ICpjdXJyOwotCi0gICAgICAgIGJvb2wgZm9yY2VTbWFsbENhcHMgPSBpc1NtYWxsQ2FwcyAm
JiAoVV9HRVRfR0NfTUFTSyhjKSAmIFVfR0NfTV9NQVNLKTsKLSAgICAgICAgbmV4dEZvbnREYXRh
ID0gbV9mb250LmdseXBoRGF0YUZvckNoYXJhY3RlcigqY3VyciwgZmFsc2UsIGZvcmNlU21hbGxD
YXBzID8gU21hbGxDYXBzVmFyaWFudCA6IEF1dG9WYXJpYW50KS5mb250OwotICAgICAgICBpZiAo
bV9mb250LmlzU21hbGxDYXBzKCkpIHsKLSAgICAgICAgICAgIG5leHRJc1NtYWxsQ2FwcyA9IGZv
cmNlU21hbGxDYXBzIHx8IChuZXdDID0gdV90b3VwcGVyKGMpKSAhPSBjOwotICAgICAgICAgICAg
aWYgKG5leHRJc1NtYWxsQ2FwcykKLSAgICAgICAgICAgICAgICBzbWFsbENhcHNCdWZmZXJbaW5k
ZXhdID0gZm9yY2VTbWFsbENhcHMgPyBjIDogbmV3QzsKLSAgICAgICAgfQotCi0gICAgICAgIGlm
IChtX2ZhbGxiYWNrRm9udHMgJiYgZm9udERhdGEgJiYgbmV4dEZvbnREYXRhICE9IGZvbnREYXRh
ICYmIGZvbnREYXRhICE9ICZtX2ZvbnQucHJpbWFyeUZvbnQoKSkKLSAgICAgICAgICAgIG1fZmFs
bGJhY2tGb250cy0+YWRkKGZvbnREYXRhKTsKLQotICAgICAgICBpZiAobmV4dEZvbnREYXRhICE9
IGZvbnREYXRhIHx8IG5leHRJc1NtYWxsQ2FwcyAhPSBpc1NtYWxsQ2FwcykgewotICAgICAgICAg
ICAgaW50IGl0ZW1TdGFydCA9IG1fcnVuLnJ0bCgpID8gaW5kZXggKyAxIDogaW5kZXhPZkZvbnRU
cmFuc2l0aW9uOwotICAgICAgICAgICAgaW50IGl0ZW1MZW5ndGggPSBtX3J1bi5ydGwoKSA/IGlu
ZGV4T2ZGb250VHJhbnNpdGlvbiAtIGluZGV4IDogaW5kZXggLSBpbmRleE9mRm9udFRyYW5zaXRp
b247Ci0gICAgICAgICAgICBtX2N1cnJlbnRDaGFyYWN0ZXIgPSBiYXNlQ2hhcmFjdGVyICsgaXRl
bVN0YXJ0OwotICAgICAgICAgICAgaXRlbWl6ZVNoYXBlQW5kUGxhY2UoKGlzU21hbGxDYXBzID8g
c21hbGxDYXBzQnVmZmVyLmRhdGEoKSA6IGNwKSArIGl0ZW1TdGFydCwgaXRlbVN0YXJ0LCBpdGVt
TGVuZ3RoLCBmb250RGF0YSwgZ2x5cGhCdWZmZXIpOwotICAgICAgICAgICAgaW5kZXhPZkZvbnRU
cmFuc2l0aW9uID0gaW5kZXg7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgaW50IGl0ZW1M
ZW5ndGggPSBtX3J1bi5ydGwoKSA/IGluZGV4T2ZGb250VHJhbnNpdGlvbiArIDEgOiBsZW5ndGgg
LSBpbmRleE9mRm9udFRyYW5zaXRpb247Ci0gICAgaWYgKGl0ZW1MZW5ndGgpIHsKLSAgICAgICAg
aWYgKG1fZmFsbGJhY2tGb250cyAmJiBuZXh0Rm9udERhdGEgJiYgbmV4dEZvbnREYXRhICE9ICZt
X2ZvbnQucHJpbWFyeUZvbnQoKSkKLSAgICAgICAgICAgIG1fZmFsbGJhY2tGb250cy0+YWRkKG5l
eHRGb250RGF0YSk7Ci0KLSAgICAgICAgaW50IGl0ZW1TdGFydCA9IG1fcnVuLnJ0bCgpID8gMCA6
IGluZGV4T2ZGb250VHJhbnNpdGlvbjsKLSAgICAgICAgbV9jdXJyZW50Q2hhcmFjdGVyID0gYmFz
ZUNoYXJhY3RlciArIGl0ZW1TdGFydDsKLSAgICAgICAgaXRlbWl6ZVNoYXBlQW5kUGxhY2UoKG5l
eHRJc1NtYWxsQ2FwcyA/IHNtYWxsQ2Fwc0J1ZmZlci5kYXRhKCkgOiBjcCkgKyBpdGVtU3RhcnQs
IGl0ZW1TdGFydCwgaXRlbUxlbmd0aCwgbmV4dEZvbnREYXRhLCBnbHlwaEJ1ZmZlcik7Ci0gICAg
fQotCi0gICAgbV9jdXJyZW50Q2hhcmFjdGVyID0gYmFzZUNoYXJhY3RlciArIGxlbmd0aDsKLX0K
LQotdm9pZCBVbmlzY3JpYmVDb250cm9sbGVyOjppdGVtaXplU2hhcGVBbmRQbGFjZShjb25zdCBV
Q2hhciogY3AsIHVuc2lnbmVkIHN0cmluZ09mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBG
b250KiBmb250RGF0YSwgR2x5cGhCdWZmZXIqIGdseXBoQnVmZmVyKQotewotICAgIC8vIFNjcmlw
dEl0ZW1pemUgKGluIFdpbmRvd3MgWFAgdmVyc2lvbnMgcHJpb3IgdG8gU1AyKSBjYW4gb3ZlcmZs
b3cgYnkgMS4gIFRoaXMgaXMgd2h5IHRoZXJlIGlzIGFuIGV4dHJhIGVtcHR5IGl0ZW0KLSAgICAv
LyBoYW5naW5nIG91dCBhdCB0aGUgZW5kIG9mIHRoZSBhcnJheQotICAgIG1faXRlbXMucmVzaXpl
KDYpOwotICAgIGludCBudW1JdGVtcyA9IDA7Ci0gICAgSFJFU1VMVCByYyA9IFNfT0s7Ci0gICAg
d2hpbGUgKHJjID0gOjpTY3JpcHRJdGVtaXplKHdjaGFyRnJvbShjcCksIGxlbmd0aCwgbV9pdGVt
cy5zaXplKCkgLSAxLCAmbV9jb250cm9sLCAmbV9zdGF0ZSwgbV9pdGVtcy5kYXRhKCksICZudW1J
dGVtcykgPT0gRV9PVVRPRk1FTU9SWSkgewotICAgICAgICBtX2l0ZW1zLnJlc2l6ZShtX2l0ZW1z
LnNpemUoKSAqIDIpOwotICAgICAgICByZXNldENvbnRyb2xBbmRTdGF0ZSgpOwotICAgIH0KLSAg
ICBpZiAoRkFJTEVEKHJjKSkgewotICAgICAgICBXVEZMb2dBbHdheXMoIlVuaXNjcmliZUNvbnRy
b2xsZXI6Oml0ZW1pemVTaGFwZUFuZFBsYWNlOiBTY3JpcHRJdGVtaXplIGZhaWxlZCwgcmM9JWx4
IiwgcmMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1faXRlbXMucmVzaXplKG51bUl0
ZW1zICsgMSk7Ci0KLSAgICBpZiAobV9ydW4ucnRsKCkpIHsKLSAgICAgICAgZm9yIChpbnQgaSA9
IG1faXRlbXMuc2l6ZSgpIC0gMjsgaSA+PSAwOyBpLS0pIHsKLSAgICAgICAgICAgIGlmICghc2hh
cGVBbmRQbGFjZUl0ZW0oY3AsIHN0cmluZ09mZnNldCwgaSwgZm9udERhdGEsIGdseXBoQnVmZmVy
KSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9pdGVtcy5zaXplKCkgLSAxOyBpKyspIHsK
LSAgICAgICAgICAgIGlmICghc2hhcGVBbmRQbGFjZUl0ZW0oY3AsIHN0cmluZ09mZnNldCwgaSwg
Zm9udERhdGEsIGdseXBoQnVmZmVyKSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICB9Ci19Ci0KLXZvaWQgVW5pc2NyaWJlQ29udHJvbGxlcjo6cmVzZXRDb250cm9sQW5k
U3RhdGUoKQotewotICAgIG1lbXNldCgmbV9jb250cm9sLCAwLCBzaXplb2YoU0NSSVBUX0NPTlRS
T0wpKTsKLSAgICBtZW1zZXQoJm1fc3RhdGUsIDAsIHNpemVvZihTQ1JJUFRfU1RBVEUpKTsKLQot
ICAgIC8vIFNldCB1cCB0aGUgY29ycmVjdCBkaXJlY3Rpb24gZm9yIHRoZSBydW4uCi0gICAgbV9z
dGF0ZS51QmlkaUxldmVsID0gbV9ydW4ucnRsKCk7Ci0gICAgCi0gICAgLy8gTG9jayB0aGUgY29y
cmVjdCBkaXJlY3Rpb25hbCBvdmVycmlkZS4KLSAgICBtX3N0YXRlLmZPdmVycmlkZURpcmVjdGlv
biA9IG1fcnVuLmRpcmVjdGlvbmFsT3ZlcnJpZGUoKTsKLX0KLQotYm9vbCBVbmlzY3JpYmVDb250
cm9sbGVyOjpzaGFwZUFuZFBsYWNlSXRlbShjb25zdCBVQ2hhciogY3AsIHVuc2lnbmVkIHN0cmlu
Z09mZnNldCwgdW5zaWduZWQgaSwgY29uc3QgRm9udCogZm9udERhdGEsIEdseXBoQnVmZmVyKiBn
bHlwaEJ1ZmZlcikKLXsKLSAgICAvLyBEZXRlcm1pbmUgdGhlIHN0cmluZyBmb3IgdGhpcyBpdGVt
LgotICAgIGNvbnN0IFVDaGFyKiBzdHIgPSBjcCArIG1faXRlbXNbaV0uaUNoYXJQb3M7Ci0gICAg
aW50IGxlbiA9IG1faXRlbXNbaSsxXS5pQ2hhclBvcyAtIG1faXRlbXNbaV0uaUNoYXJQb3M7Ci0g
ICAgU0NSSVBUX0lURU0gaXRlbSA9IG1faXRlbXNbaV07Ci0KLSAgICAvLyBTZXQgdXAgYnVmZmVy
cyB0byBob2xkIHRoZSByZXN1bHRzIG9mIHNoYXBpbmcgdGhlIGl0ZW0uCi0gICAgVmVjdG9yPFdP
UkQ+IGdseXBoczsKLSAgICBWZWN0b3I8V09SRD4gY2x1c3RlcnM7Ci0gICAgVmVjdG9yPFNDUklQ
VF9WSVNBVFRSPiB2aXN1YWxBdHRyaWJ1dGVzOwotICAgIGNsdXN0ZXJzLnJlc2l6ZShsZW4pOwot
ICAgICAKLSAgICAvLyBTaGFwZSB0aGUgaXRlbS4KLSAgICAvLyBUaGUgcmVjb21tZW5kZWQgc2l6
ZSBmb3IgdGhlIGdseXBoIGJ1ZmZlciBpcyAxLjUgKiB0aGUgY2hhcmFjdGVyIGxlbmd0aCArIDE2
IGluIHRoZSB1bmlzY3JpYmUgZG9jcy4KLSAgICAvLyBBcHBhcmVudGx5IHRoaXMgaXMgYSBnb29k
IHNpemUgdG8gYXZvaWQgaGF2aW5nIHRvIG1ha2UgcmVwZWF0ZWQgY2FsbHMgdG8gU2NyaXB0U2hh
cGUuCi0gICAgZ2x5cGhzLnJlc2l6ZSgxLjUgKiBsZW4gKyAxNik7Ci0gICAgdmlzdWFsQXR0cmli
dXRlcy5yZXNpemUoZ2x5cGhzLnNpemUoKSk7Ci0KLSAgICBpZiAoIXNoYXBlKHN0ciwgbGVuLCBp
dGVtLCBmb250RGF0YSwgZ2x5cGhzLCBjbHVzdGVycywgdmlzdWFsQXR0cmlidXRlcykpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotCi0gICAgVmVjdG9yPE9wdGlvbmFsPHVuc2lnbmVkPj4gc3RyaW5n
T2Zmc2V0cyhnbHlwaHMuc2l6ZSgpKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVu
OyArK2kpIHsKLSAgICAgICAgaWYgKHN0cmluZ09mZnNldHNbY2x1c3RlcnNbaV1dKQotICAgICAg
ICAgICAgc3RyaW5nT2Zmc2V0c1tjbHVzdGVyc1tpXV0gPSBzdGQ6Om1pbigqc3RyaW5nT2Zmc2V0
c1tjbHVzdGVyc1tpXV0sIGkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzdHJpbmdPZmZz
ZXRzW2NsdXN0ZXJzW2ldXSA9IGk7Ci0gICAgfQotCi0gICAgLy8gV2Ugbm93IGhhdmUgYSBjb2xs
ZWN0aW9uIG9mIGdseXBocy4KLSAgICBWZWN0b3I8R09GRlNFVD4gb2Zmc2V0czsKLSAgICBWZWN0
b3I8aW50PiBhZHZhbmNlczsKLSAgICBvZmZzZXRzLnJlc2l6ZShnbHlwaHMuc2l6ZSgpKTsKLSAg
ICBhZHZhbmNlcy5yZXNpemUoZ2x5cGhzLnNpemUoKSk7Ci0gICAgSFJFU1VMVCBwbGFjZVJlc3Vs
dCA9IFNjcmlwdFBsYWNlKDAsIGZvbnREYXRhLT5zY3JpcHRDYWNoZSgpLCBnbHlwaHMuZGF0YSgp
LCBnbHlwaHMuc2l6ZSgpLCB2aXN1YWxBdHRyaWJ1dGVzLmRhdGEoKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJml0ZW0uYSwgYWR2YW5jZXMuZGF0YSgpLCBvZmZzZXRz
LmRhdGEoKSwgMCk7Ci0gICAgaWYgKHBsYWNlUmVzdWx0ID09IEVfUEVORElORykgewotICAgICAg
ICAvLyBUaGUgc2NyaXB0IGNhY2hlIGlzbid0IHByaW1lZCB3aXRoIGVub3VnaCBpbmZvIHlldC4g
IFdlIG5lZWQgdG8gc2VsZWN0IG91ciBIRk9OVCBpbnRvCi0gICAgICAgIC8vIGEgREMgYW5kIHBh
c3MgdGhlIERDIGluIHRvIFNjcmlwdFBsYWNlLgotICAgICAgICBIV25kREMgaGRjKDApOwotICAg
ICAgICBIRk9OVCBoZm9udCA9IGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5oZm9udCgpOwotICAg
ICAgICBIRk9OVCBvbGRGb250ID0gKEhGT05UKVNlbGVjdE9iamVjdChoZGMsIGhmb250KTsKLSAg
ICAgICAgcGxhY2VSZXN1bHQgPSBTY3JpcHRQbGFjZShoZGMsIGZvbnREYXRhLT5zY3JpcHRDYWNo
ZSgpLCBnbHlwaHMuZGF0YSgpLCBnbHlwaHMuc2l6ZSgpLCB2aXN1YWxBdHRyaWJ1dGVzLmRhdGEo
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaXRlbS5hLCBhZHZhbmNlcy5k
YXRhKCksIG9mZnNldHMuZGF0YSgpLCAwKTsKLSAgICAgICAgU2VsZWN0T2JqZWN0KGhkYywgb2xk
Rm9udCk7Ci0gICAgfQotICAgIAotICAgIGlmIChGQUlMRUQocGxhY2VSZXN1bHQpIHx8IGdseXBo
cy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gQ29udmVydCBhbGwg
Y2hhcnMgdGhhdCBzaG91bGQgYmUgdHJlYXRlZCBhcyBzcGFjZXMgdG8gdXNlIHRoZSBzcGFjZSBn
bHlwaC4KLSAgICAvLyBXZSBhbHNvIGNyZWF0ZSBhIG1hcCB0aGF0IGFsbG93cyB1cyB0byBxdWlj
a2x5IGdvIGZyb20gc3BhY2UgZ2x5cGhzIGJhY2sgdG8gdGhlaXIgY29ycmVzcG9uZGluZyBjaGFy
YWN0ZXJzLgotICAgIFZlY3RvcjxpbnQ+IHNwYWNlQ2hhcmFjdGVycyhnbHlwaHMuc2l6ZSgpKTsK
LSAgICBzcGFjZUNoYXJhY3RlcnMuZmlsbCgtMSk7Ci0KLSAgICBjb25zdCBmbG9hdCBjTG9naWNh
bFNjYWxlID0gZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLnVzZUdESSgpID8gMS4wZiA6IDMyLjBm
OwotICAgIGZsb2F0IHNwYWNlV2lkdGggPSBmb250RGF0YS0+c3BhY2VXaWR0aCgpIC0gZm9udERh
dGEtPnN5bnRoZXRpY0JvbGRPZmZzZXQoKTsKLSAgICB1bnNpZ25lZCBsb2dpY2FsU3BhY2VXaWR0
aCA9IHNwYWNlV2lkdGggKiBjTG9naWNhbFNjYWxlOwotCi0gICAgZm9yIChpbnQgayA9IDA7IGsg
PCBsZW47IGsrKykgewotICAgICAgICBVQ2hhciBjaCA9ICooc3RyICsgayk7Ci0gICAgICAgIGJv
b2wgdHJlYXRBc1NwYWNlID0gRm9udENhc2NhZGU6OnRyZWF0QXNTcGFjZShjaCk7Ci0gICAgICAg
IGJvb2wgdHJlYXRBc1plcm9XaWR0aFNwYWNlID0gRm9udENhc2NhZGU6OnRyZWF0QXNaZXJvV2lk
dGhTcGFjZShjaCk7Ci0gICAgICAgIGlmICh0cmVhdEFzU3BhY2UgfHwgdHJlYXRBc1plcm9XaWR0
aFNwYWNlKSB7Ci0gICAgICAgICAgICAvLyBTdWJzdGl0dXRlIGluIHRoZSBzcGFjZSBnbHlwaCBh
dCB0aGUgYXBwcm9wcmlhdGUgcGxhY2UgaW4gdGhlIGdseXBocwotICAgICAgICAgICAgLy8gYXJy
YXkuCi0gICAgICAgICAgICBnbHlwaHNbY2x1c3RlcnNba11dID0gZm9udERhdGEtPnNwYWNlR2x5
cGgoKTsKLSAgICAgICAgICAgIGFkdmFuY2VzW2NsdXN0ZXJzW2tdXSA9IHRyZWF0QXNTcGFjZSA/
IGxvZ2ljYWxTcGFjZVdpZHRoIDogMDsKLSAgICAgICAgICAgIGlmICh0cmVhdEFzU3BhY2UpCi0g
ICAgICAgICAgICAgICAgc3BhY2VDaGFyYWN0ZXJzW2NsdXN0ZXJzW2tdXSA9IG1fY3VycmVudENo
YXJhY3RlciArIGsgKyBpdGVtLmlDaGFyUG9zOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8g
UG9wdWxhdGUgb3VyIGdseXBoIGJ1ZmZlciB3aXRoIHRoaXMgaW5mb3JtYXRpb24uCi0gICAgYm9v
bCBoYXNFeHRyYVNwYWNpbmcgPSBtX2ZvbnQubGV0dGVyU3BhY2luZygpIHx8IG1fZm9udC53b3Jk
U3BhY2luZygpIHx8IG1fcGFkZGluZzsKLSAgICAKLSAgICBmbG9hdCBsZWZ0RWRnZSA9IG1fcnVu
V2lkdGhTb0ZhcjsKLQotICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBnbHlwaHMuc2l6ZSgp
OyBrKyspIHsKLSAgICAgICAgR2x5cGggZ2x5cGggPSBnbHlwaHNba107Ci0gICAgICAgIGZsb2F0
IGFkdmFuY2UgPSBhZHZhbmNlc1trXSAvIGNMb2dpY2FsU2NhbGU7Ci0gICAgICAgIGZsb2F0IG9m
ZnNldFggPSBvZmZzZXRzW2tdLmR1IC8gY0xvZ2ljYWxTY2FsZTsKLSAgICAgICAgZmxvYXQgb2Zm
c2V0WSA9IG9mZnNldHNba10uZHYgLyBjTG9naWNhbFNjYWxlOwotCi0gICAgICAgIC8vIE1hdGNo
IEFwcEtpdCdzIHJ1bGVzIGZvciB0aGUgaW50ZWdlciB2cy4gbm9uLWludGVnZXIgcmVuZGVyaW5n
IG1vZGVzLgotICAgICAgICBmbG9hdCByb3VuZGVkQWR2YW5jZSA9IHJvdW5kZihhZHZhbmNlKTsK
LSAgICAgICAgaWYgKCFmb250RGF0YS0+cGxhdGZvcm1EYXRhKCkuaXNTeXN0ZW1Gb250KCkpIHsK
LSAgICAgICAgICAgIGFkdmFuY2UgPSByb3VuZGVkQWR2YW5jZTsKLSAgICAgICAgICAgIG9mZnNl
dFggPSByb3VuZGYob2Zmc2V0WCk7Ci0gICAgICAgICAgICBvZmZzZXRZID0gcm91bmRmKG9mZnNl
dFkpOwotICAgICAgICB9Ci0KLSAgICAgICAgYWR2YW5jZSArPSBmb250RGF0YS0+c3ludGhldGlj
Qm9sZE9mZnNldCgpOwotCi0gICAgICAgIGlmIChoYXNFeHRyYVNwYWNpbmcpIHsKLSAgICAgICAg
ICAgIC8vIElmIHdlJ3JlIGEgZ2x5cGggd2l0aCBhbiBhZHZhbmNlLCBnbyBhaGVhZCBhbmQgYWRk
IGluIGxldHRlci1zcGFjaW5nLgotICAgICAgICAgICAgLy8gVGhhdCB3YXkgd2Ugd2VlZCBvdXQg
emVybyB3aWR0aCBsdXJrZXJzLiAgVGhpcyBiZWhhdmlvciBtYXRjaGVzIHRoZSBmYXN0IHRleHQg
Y29kZSBwYXRoLgotICAgICAgICAgICAgaWYgKGFkdmFuY2UgJiYgbV9mb250LmxldHRlclNwYWNp
bmcoKSkKLSAgICAgICAgICAgICAgICBhZHZhbmNlICs9IG1fZm9udC5sZXR0ZXJTcGFjaW5nKCk7
Ci0KLSAgICAgICAgICAgIC8vIEhhbmRsZSBqdXN0aWZpY2F0aW9uIGFuZCB3b3JkLXNwYWNpbmcu
Ci0gICAgICAgICAgICBpbnQgY2hhcmFjdGVySW5kZXggPSBzcGFjZUNoYXJhY3RlcnNba107Ci0g
ICAgICAgICAgICAvLyBjaGFyYWN0ZXJJbmRleCBpcyBsZWZ0IGF0IHRoZSBpbml0aWFsIHZhbHVl
IG9mIC0xIGZvciBnbHlwaHMgdGhhdCBkbyBub3QgbWFwIGJhY2sgdG8gdHJlYXRlZC1hcy1zcGFj
ZSBjaGFyYWN0ZXJzLgotICAgICAgICAgICAgaWYgKGNoYXJhY3RlckluZGV4ICE9IC0xKSB7Ci0g
ICAgICAgICAgICAgICAgLy8gQWNjb3VudCBmb3IgcGFkZGluZy4gV2ViQ29yZSB1c2VzIHNwYWNl
IHBhZGRpbmcgdG8ganVzdGlmeSB0ZXh0LgotICAgICAgICAgICAgICAgIC8vIFdlIGRpc3RyaWJ1
dGUgdGhlIHNwZWNpZmllZCBwYWRkaW5nIG92ZXIgdGhlIGF2YWlsYWJsZSBzcGFjZXMgaW4gdGhl
IHJ1bi4KLSAgICAgICAgICAgICAgICBpZiAobV9wYWRkaW5nKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIC8vIFVzZSBsZWZ0b3ZlciBwYWRkaW5nIGlmIG5vdCBldmVubHkgZGl2aXNpYmxlIGJ5IG51
bWJlciBvZiBzcGFjZXMuCi0gICAgICAgICAgICAgICAgICAgIGlmIChtX3BhZGRpbmcgPCBtX3Bh
ZFBlclNwYWNlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhZHZhbmNlICs9IG1fcGFkZGlu
ZzsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fcGFkZGluZyA9IDA7Ci0gICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX3BhZGRpbmcgLT0gbV9w
YWRQZXJTcGFjZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkdmFuY2UgKz0gbV9wYWRQZXJT
cGFjZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgIC8vIEFjY291bnQgZm9yIHdvcmQtc3BhY2luZy4KLSAgICAgICAgICAgICAgICBp
ZiAoY2hhcmFjdGVySW5kZXggPiAwICYmIG1fZm9udC53b3JkU3BhY2luZygpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIFVDaGFyIGNhbmRpZGF0ZVNwYWNlOwotICAgICAgICAgICAgICAgICAgICBp
ZiAobV9ydW4uaXM4Qml0KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGVTcGFj
ZSA9ICoobV9ydW4uZGF0YTgoY2hhcmFjdGVySW5kZXggLSAxKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZVNwYWNlID0gKihtX3J1
bi5kYXRhMTYoY2hhcmFjdGVySW5kZXggLSAxKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYg
KCFGb250Q2FzY2FkZTo6dHJlYXRBc1NwYWNlKGNhbmRpZGF0ZVNwYWNlKSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGFkdmFuY2UgKz0gbV9mb250LndvcmRTcGFjaW5nKCk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgbV9ydW5XaWR0aFNv
RmFyICs9IGFkdmFuY2U7Ci0KLSAgICAgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gdGFrZSB0aGUg
R09GRlNFVFMgZm9yIGNvbWJpbmluZyBnbHlwaHMgYW5kIHN0b3JlIHRoZW0gaW4gdGhlIGdseXBo
IGJ1ZmZlcgotICAgICAgICAvLyBhcyB3ZWxsLCBzbyB0aGF0IHdoZW4gdGhlIHRpbWUgY29tZXMg
dG8gZHJhdyB0aG9zZSBnbHlwaHMsIHdlIGNhbiBhcHBseSB0aGUgYXBwcm9wcmlhdGUKLSAgICAg
ICAgLy8gdHJhbnNsYXRpb24uCi0gICAgICAgIGlmIChnbHlwaEJ1ZmZlcikgewotICAgICAgICAg
ICAgR2x5cGhCdWZmZXJBZHZhbmNlIG9yaWdpbihvZmZzZXRYLCAtb2Zmc2V0WSk7Ci0gICAgICAg
ICAgICBpZiAoIWdseXBoQnVmZmVyLT5hZHZhbmNlc0NvdW50KCkpCi0gICAgICAgICAgICAgICAg
Z2x5cGhCdWZmZXItPnNldEluaXRpYWxBZHZhbmNlKG9yaWdpbik7Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgZ2x5cGhCdWZmZXItPmV4cGFuZExhc3RBZHZhbmNlKG9yaWdpbik7
Ci0gICAgICAgICAgICBHbHlwaEJ1ZmZlckFkdmFuY2UgZ2x5cGhBZHZhbmNlKC1vcmlnaW4ud2lk
dGgoKSArIGFkdmFuY2UsIC1vcmlnaW4uaGVpZ2h0KCkpOwotICAgICAgICAgICAgZ2x5cGhCdWZm
ZXItPmFkZChnbHlwaCwgZm9udERhdGEsIGdseXBoQWR2YW5jZSwgc3RyaW5nT2Zmc2V0c1trXS52
YWx1ZU9yKDApICsgc3RyaW5nT2Zmc2V0KTsKLSAgICAgICAgfQotCi0gICAgICAgIEZsb2F0UmVj
dCBnbHlwaEJvdW5kcyA9IGZvbnREYXRhLT5ib3VuZHNGb3JHbHlwaChnbHlwaCk7Ci0gICAgICAg
IGdseXBoQm91bmRzLm1vdmUobV9nbHlwaE9yaWdpbi54KCksIG1fZ2x5cGhPcmlnaW4ueSgpKTsK
LSAgICAgICAgbV9taW5HbHlwaEJvdW5kaW5nQm94WCA9IHN0ZDo6bWluKG1fbWluR2x5cGhCb3Vu
ZGluZ0JveFgsIGdseXBoQm91bmRzLngoKSk7Ci0gICAgICAgIG1fbWF4R2x5cGhCb3VuZGluZ0Jv
eFggPSBzdGQ6Om1heChtX21heEdseXBoQm91bmRpbmdCb3hYLCBnbHlwaEJvdW5kcy5tYXhYKCkp
OwotICAgICAgICBtX21pbkdseXBoQm91bmRpbmdCb3hZID0gc3RkOjptaW4obV9taW5HbHlwaEJv
dW5kaW5nQm94WSwgZ2x5cGhCb3VuZHMueSgpKTsKLSAgICAgICAgbV9tYXhHbHlwaEJvdW5kaW5n
Qm94WSA9IHN0ZDo6bWF4KG1fbWF4R2x5cGhCb3VuZGluZ0JveFksIGdseXBoQm91bmRzLm1heFko
KSk7Ci0gICAgICAgIG1fZ2x5cGhPcmlnaW4ubW92ZShhZHZhbmNlICsgb2Zmc2V0WCwgLW9mZnNl
dFkpOwotCi0gICAgICAgIC8vIE11dGF0ZSB0aGUgZ2x5cGggYXJyYXkgdG8gY29udGFpbiBvdXIg
YWx0ZXJlZCBhZHZhbmNlcy4KLSAgICAgICAgaWYgKG1fY29tcHV0aW5nT2Zmc2V0UG9zaXRpb24p
Ci0gICAgICAgICAgICBhZHZhbmNlc1trXSA9IGFkdmFuY2U7Ci0gICAgfQotCi0gICAgd2hpbGUg
KG1fY29tcHV0aW5nT2Zmc2V0UG9zaXRpb24gJiYgbV9vZmZzZXRYID49IGxlZnRFZGdlICYmIG1f
b2Zmc2V0WCA8IG1fcnVuV2lkdGhTb0ZhcikgewotICAgICAgICAvLyBUaGUgcG9zaXRpb24gaXMg
c29tZXdoZXJlIGluc2lkZSB0aGlzIHJ1bi4KLSAgICAgICAgaW50IHRyYWlsaW5nID0gMDsKLSAg
ICAgICAgSFJFU1VMVCByYyA9IDo6U2NyaXB0WHRvQ1AobV9vZmZzZXRYIC0gbGVmdEVkZ2UsIGNs
dXN0ZXJzLnNpemUoKSwgZ2x5cGhzLnNpemUoKSwgY2x1c3RlcnMuZGF0YSgpLCB2aXN1YWxBdHRy
aWJ1dGVzLmRhdGEoKSwKLSAgICAgICAgICAgICAgICAgICAgYWR2YW5jZXMuZGF0YSgpLCAmaXRl
bS5hLCAmbV9vZmZzZXRQb3NpdGlvbiwgJnRyYWlsaW5nKTsKLSAgICAgICAgaWYgKEZBSUxFRChy
YykpIHsKLSAgICAgICAgICAgIFdURkxvZ0Fsd2F5cygiVW5pc2NyaWJlQ29udHJvbGxlcjo6c2hh
cGVBbmRQbGFjZUl0ZW06IFNjcmlwdFh0b0NQIGZhaWxlZCByYz0lbHgiLCByYyk7Ci0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAodHJhaWxpbmcgJiYgbV9p
bmNsdWRlUGFydGlhbEdseXBocyAmJiBtX29mZnNldFBvc2l0aW9uIDwgbGVuIC0gMSkgewotICAg
ICAgICAgICAgbV9vZmZzZXRQb3NpdGlvbiArPSBtX2N1cnJlbnRDaGFyYWN0ZXIgKyBtX2l0ZW1z
W2ldLmlDaGFyUG9zOwotICAgICAgICAgICAgbV9vZmZzZXRYICs9IG1fcnVuLnJ0bCgpID8gLXRy
YWlsaW5nIDogdHJhaWxpbmc7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtX2NvbXB1
dGluZ09mZnNldFBvc2l0aW9uID0gZmFsc2U7Ci0gICAgICAgICAgICBtX29mZnNldFBvc2l0aW9u
ICs9IG1fY3VycmVudENoYXJhY3RlciArIG1faXRlbXNbaV0uaUNoYXJQb3M7Ci0gICAgICAgICAg
ICBpZiAodHJhaWxpbmcgJiYgbV9pbmNsdWRlUGFydGlhbEdseXBocykKLSAgICAgICAgICAgICAg
IG1fb2Zmc2V0UG9zaXRpb24rKzsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFVuaXNjcmliZUNvbnRyb2xs
ZXI6OnNoYXBlKGNvbnN0IFVDaGFyKiBzdHIsIGludCBsZW4sIFNDUklQVF9JVEVNIGl0ZW0sIGNv
bnN0IEZvbnQqIGZvbnREYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0
b3I8V09SRD4mIGdseXBocywgVmVjdG9yPFdPUkQ+JiBjbHVzdGVycywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgVmVjdG9yPFNDUklQVF9WSVNBVFRSPiYgdmlzdWFsQXR0cmlidXRl
cykKLXsKLSAgICBIV25kREMgaGRjOwotICAgIEhGT05UIG9sZEZvbnQgPSAwOwotICAgIEhSRVNV
TFQgc2hhcGVSZXN1bHQgPSBFX1BFTkRJTkc7Ci0gICAgaW50IGdseXBoQ291bnQgPSAwOwotCi0g
ICAgaWYgKCFmb250RGF0YSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZG8gewotICAg
ICAgICBzaGFwZVJlc3VsdCA9IFNjcmlwdFNoYXBlKGhkYywgZm9udERhdGEtPnNjcmlwdENhY2hl
KCksIHdjaGFyRnJvbShzdHIpLCBsZW4sIGdseXBocy5zaXplKCksICZpdGVtLmEsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhzLmRhdGEoKSwgY2x1c3RlcnMuZGF0YSgp
LCB2aXN1YWxBdHRyaWJ1dGVzLmRhdGEoKSwgJmdseXBoQ291bnQpOwotICAgICAgICBpZiAoc2hh
cGVSZXN1bHQgPT0gRV9QRU5ESU5HKSB7Ci0gICAgICAgICAgICAvLyBUaGUgc2NyaXB0IGNhY2hl
IGlzbid0IHByaW1lZCB3aXRoIGVub3VnaCBpbmZvIHlldC4gIFdlIG5lZWQgdG8gc2VsZWN0IG91
ciBIRk9OVCBpbnRvCi0gICAgICAgICAgICAvLyBhIERDIGFuZCBwYXNzIHRoZSBEQyBpbiB0byBT
Y3JpcHRTaGFwZS4KLSAgICAgICAgICAgIEFTU0VSVCghaGRjKTsKLSAgICAgICAgICAgIGhkYy5z
ZXRIV25kKDApOwotICAgICAgICAgICAgSEZPTlQgaGZvbnQgPSBmb250RGF0YS0+cGxhdGZvcm1E
YXRhKCkuaGZvbnQoKTsKLSAgICAgICAgICAgIG9sZEZvbnQgPSAoSEZPTlQpU2VsZWN0T2JqZWN0
KGhkYywgaGZvbnQpOwotICAgICAgICB9IGVsc2UgaWYgKHNoYXBlUmVzdWx0ID09IEVfT1VUT0ZN
RU1PUlkpIHsKLSAgICAgICAgICAgIC8vIE5lZWQgdG8gcmVzaXplIG91ciBidWZmZXJzLgotICAg
ICAgICAgICAgZ2x5cGhzLnJlc2l6ZShnbHlwaHMuc2l6ZSgpICogMik7Ci0gICAgICAgICAgICB2
aXN1YWxBdHRyaWJ1dGVzLnJlc2l6ZShnbHlwaHMuc2l6ZSgpKTsKLSAgICAgICAgfQotICAgIH0g
d2hpbGUgKHNoYXBlUmVzdWx0ID09IEVfUEVORElORyB8fCBzaGFwZVJlc3VsdCA9PSBFX09VVE9G
TUVNT1JZKTsKLQotICAgIGlmIChoZGMpCi0gICAgICAgIFNlbGVjdE9iamVjdChoZGMsIG9sZEZv
bnQpOwotCi0gICAgaWYgKEZBSUxFRChzaGFwZVJlc3VsdCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGdseXBocy5zaHJpbmsoZ2x5cGhDb3VudCk7Ci0gICAgdmlzdWFsQXR0cmlidXRl
cy5zaHJpbmsoZ2x5cGhDb3VudCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1VuaXNjcmliZUNvbnRy
b2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9VbmlzY3JpYmVD
b250cm9sbGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0NjI0Yzc5YTA4Li4w
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vVW5p
c2NyaWJlQ29udHJvbGxlci5oCisrKyAvZGV2L251bGwKQEAgLTEsOTAgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgVW5pc2NyaWJlQ29udHJvbGxlcl9oCi0j
ZGVmaW5lIFVuaXNjcmliZUNvbnRyb2xsZXJfaAotCi0jaW5jbHVkZSAiRm9udENhc2NhZGUuaCIK
LSNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgotI2luY2x1ZGUgPHVzcDEwLmg+Ci0jaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFVuaXNjcmliZUNv
bnRyb2xsZXIgewotcHVibGljOgotICAgIFVuaXNjcmliZUNvbnRyb2xsZXIoY29uc3QgRm9udENh
c2NhZGUqLCBjb25zdCBUZXh0UnVuJiwgSGFzaFNldDxjb25zdCBGb250Kj4qIGZhbGxiYWNrRm9u
dHMgPSAwKTsKLQotICAgIC8vIEFkdmFuY2UgYW5kIG1lYXN1cmUvcGxhY2UgdXAgdG8gdGhlIHNw
ZWNpZmllZCBjaGFyYWN0ZXIuCi0gICAgdm9pZCBhZHZhbmNlKHVuc2lnbmVkIHRvLCBHbHlwaEJ1
ZmZlciogPSAwKTsKLQotICAgIC8vIENvbXB1dGUgdGhlIGNoYXJhY3RlciBvZmZzZXQgZm9yIGEg
Z2l2ZW4geCBjb29yZGluYXRlLgotICAgIGludCBvZmZzZXRGb3JQb3NpdGlvbihpbnQgeCwgYm9v
bCBpbmNsdWRlUGFydGlhbEdseXBocyk7Ci0KLSAgICAvLyBSZXR1cm5zIHRoZSB3aWR0aCBvZiBl
dmVyeXRoaW5nIHdlJ3ZlIGNvbnN1bWVkIHNvIGZhci4KLSAgICBmbG9hdCBydW5XaWR0aFNvRmFy
KCkgY29uc3QgeyByZXR1cm4gbV9ydW5XaWR0aFNvRmFyOyB9Ci0KLSAgICBmbG9hdCBtaW5HbHlw
aEJvdW5kaW5nQm94WCgpIGNvbnN0IHsgcmV0dXJuIG1fbWluR2x5cGhCb3VuZGluZ0JveFg7IH0K
LSAgICBmbG9hdCBtYXhHbHlwaEJvdW5kaW5nQm94WCgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4R2x5
cGhCb3VuZGluZ0JveFg7IH0KLSAgICBmbG9hdCBtaW5HbHlwaEJvdW5kaW5nQm94WSgpIGNvbnN0
IHsgcmV0dXJuIG1fbWluR2x5cGhCb3VuZGluZ0JveFk7IH0KLSAgICBmbG9hdCBtYXhHbHlwaEJv
dW5kaW5nQm94WSgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4R2x5cGhCb3VuZGluZ0JveFk7IH0KLQot
cHJpdmF0ZTogICAgCi0gICAgdm9pZCByZXNldENvbnRyb2xBbmRTdGF0ZSgpOwotCi0gICAgdm9p
ZCBpdGVtaXplU2hhcGVBbmRQbGFjZShjb25zdCBVQ2hhciosIHVuc2lnbmVkIHN0cmluZ09mZnNl
dCwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBGb250KiwgR2x5cGhCdWZmZXIqKTsKLSAgICBib29s
IHNoYXBlQW5kUGxhY2VJdGVtKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQgc3RyaW5nT2Zmc2V0LCB1
bnNpZ25lZCBpbmRleCwgY29uc3QgRm9udCosIEdseXBoQnVmZmVyKik7Ci0gICAgYm9vbCBzaGFw
ZShjb25zdCBVQ2hhciogc3RyLCBpbnQgbGVuLCBTQ1JJUFRfSVRFTSwgY29uc3QgRm9udCosCi0g
ICAgICAgICAgICAgICBWZWN0b3I8V09SRD4mIGdseXBocywgVmVjdG9yPFdPUkQ+JiBjbHVzdGVy
cywKLSAgICAgICAgICAgICAgIFZlY3RvcjxTQ1JJUFRfVklTQVRUUj4mIHZpc3VhbEF0dHJpYnV0
ZXMpOwotCi0gICAgY29uc3QgRm9udENhc2NhZGUmIG1fZm9udDsKLSAgICBjb25zdCBUZXh0UnVu
JiBtX3J1bjsKLSAgICBIYXNoU2V0PGNvbnN0IEZvbnQqPiogbV9mYWxsYmFja0ZvbnRzOwotICAg
IEZsb2F0UG9pbnQgbV9nbHlwaE9yaWdpbjsKLSAgICBmbG9hdCBtX21pbkdseXBoQm91bmRpbmdC
b3hYOwotICAgIGZsb2F0IG1fbWF4R2x5cGhCb3VuZGluZ0JveFg7Ci0gICAgZmxvYXQgbV9taW5H
bHlwaEJvdW5kaW5nQm94WTsKLSAgICBmbG9hdCBtX21heEdseXBoQm91bmRpbmdCb3hZOwotCi0g
ICAgU0NSSVBUX0NPTlRST0wgbV9jb250cm9sOwotICAgIFNDUklQVF9TVEFURSBtX3N0YXRlOwot
ICAgIFZlY3RvcjxTQ1JJUFRfSVRFTT4gbV9pdGVtczsKLSAKLSAgICB1bnNpZ25lZCBtX2N1cnJl
bnRDaGFyYWN0ZXI7Ci0gICAgaW50IG1fZW5kOwotCi0gICAgZmxvYXQgbV9ydW5XaWR0aFNvRmFy
OwotICAgIGZsb2F0IG1fcGFkZGluZzsKLSAgICBmbG9hdCBtX3BhZFBlclNwYWNlOwotCi0gICAg
Ym9vbCBtX2NvbXB1dGluZ09mZnNldFBvc2l0aW9uOwotICAgIGJvb2wgbV9pbmNsdWRlUGFydGlh
bEdseXBoczsKLSAgICBmbG9hdCBtX29mZnNldFg7Ci0gICAgaW50IG1fb2Zmc2V0UG9zaXRpb247
Ci19OwotCi19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViQ29yZS9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJDb3JlL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAKaW5kZXggOTNmZTkwZTlkOWQu
LjkyNjhlZmI2ODNiIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNv
cmUvQ29tcGxleFRleHRDb250cm9sbGVyLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYkNvcmUvQ29tcGxleFRleHRDb250cm9sbGVyLmNwcApAQCAtMjUsOCArMjUsNiBAQAog
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKLSNpZiAhUExBVEZPUk0oV0lOKQotCiAjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5pdGlhbGl6ZVRocmVhZGluZy5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
Q29tcGxleFRleHRDb250cm9sbGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Gb250Q2FzY2FkZS5o
PgpAQCAtMzY3LDUgKzM2NSwzIEBAIFRFU1RfRihDb21wbGV4VGV4dENvbnRyb2xsZXJUZXN0LCBU
b3RhbFdpZHRoV2l0aEp1c3RpZmljYXRpb24pCiB9CiAKIH0KLQotI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>386175</attachid>
            <date>2019-12-19 20:04:30 -0800</date>
            <delta_ts>2019-12-19 23:11:57 -0800</delta_ts>
            <desc>WIP patch</desc>
            <filename>complex11.diff</filename>
            <type>text/plain</type>
            <size>44005</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luLmNtYWtlIGIvU291cmNlL1dl
YkNvcmUvUGxhdGZvcm1XaW4uY21ha2UKaW5kZXggZDFmZDRlYjEyZGQuLmRlODZmZDNhMDQxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbi5jbWFrZQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9QbGF0Zm9ybVdpbi5jbWFrZQpAQCAtNTEsNiArNTEsNyBAQCBsaXN0KEFQUEVORCBX
ZWJDb3JlX1NPVVJDRVMKIAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db2xvckRpcmVjdDJE
LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db21wbGV4VGV4dENvbnRyb2xsZXJEaXJl
Y3RXcml0ZS5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vQ29tcGxleFRleHRDb250cm9s
bGVyVW5pc2NyaWJlLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9ESUJQaXhlbERhdGEu
Y3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Zsb2F0UG9pbnREaXJlY3QyRC5jcHAKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRmxvYXRSZWN0RGlyZWN0MkQuY3BwCkBAIC02OSw3ICs3
MCw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9TaW1wbGVGb250RGF0YVdpbi5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vVHJh
bnNmb3JtYXRpb25NYXRyaXhEaXJlY3QyRC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
VHJhbnNmb3JtYXRpb25NYXRyaXhXaW4uY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1Vu
aXNjcmliZUNvbnRyb2xsZXIuY3BwCiAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL3dpbi9Eb3dubG9h
ZEJ1bmRsZVdpbi5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL3dpbi9OZXR3b3JrU3RhdGVOb3Rp
Zmllcldpbi5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwCmluZGV4IDE2M2VkNGUwN2VlLi40OGU4ZDk1
MWI4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29tcGxl
eFRleHRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwCkBAIC00MywzMyArNDMsNiBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLSNpZiBQTEFURk9STShXSU4pICYmICFVU0UoRElSRUNUMkQpCi0KLWNs
YXNzIFRleHRMYXlvdXQgewotfTsKLQotdm9pZCBUZXh0TGF5b3V0RGVsZXRlcjo6b3BlcmF0b3Io
KShUZXh0TGF5b3V0KikgY29uc3QKLXsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPFRleHRMYXlvdXQs
IFRleHRMYXlvdXREZWxldGVyPiBGb250Q2FzY2FkZTo6Y3JlYXRlTGF5b3V0KFJlbmRlclRleHQm
LCBmbG9hdCwgYm9vbCkgY29uc3QKLXsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotZmxvYXQg
Rm9udENhc2NhZGU6OndpZHRoKFRleHRMYXlvdXQmLCB1bnNpZ25lZCwgdW5zaWduZWQsIEhhc2hT
ZXQ8Y29uc3QgRm9udCo+KikKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1
cm4gMDsKLX0KLQotdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmNvbGxlY3RDb21wbGV4VGV4
dFJ1bnNGb3JDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQsIHVuc2lnbmVkLCBjb25z
dCBGb250KikKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotI2Vsc2UKLQogY2xh
c3MgVGV4dExheW91dCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CkBA
IC04OTQsNiArODY3LDQgQEAgQ29tcGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4dFJ1bjo6
Q29tcGxleFRleHRSdW4oY29uc3QgVmVjdG9yPEZsb2F0U2l6ZT4mIGEKIHsKIH0KIAotI2VuZGlm
Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcAppbmRleCA0MTI3NDdhY2Y4Yy4uMGFlYzhlNzBlYmEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5j
cHAKQEAgLTQxLDEwICs0MSw2IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0cmluZ0hhc2gu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKLSNpZiBQTEFURk9STShX
SU4pICYmICFVU0UoRElSRUNUMkQpCi0jaW5jbHVkZSAiVW5pc2NyaWJlQ29udHJvbGxlci5oIgot
I2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIFdURjo6VW5p
Y29kZTsKQEAgLTM1MCwxNSArMzQ2LDYgQEAgZmxvYXQgRm9udENhc2NhZGU6OndpZHRoT2ZUZXh0
UmFuZ2UoY29uc3QgVGV4dFJ1biYgcnVuLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZAogCiAgICAg
YXV0byBjb2RlUGF0aFRvVXNlID0gY29kZVBhdGgocnVuKTsKICAgICBpZiAoY29kZVBhdGhUb1Vz
ZSA9PSBDb21wbGV4KSB7Ci0jaWYgUExBVEZPUk0oV0lOKSAmJiAhVVNFKERJUkVDVDJEKQotICAg
ICAgICBVbmlzY3JpYmVDb250cm9sbGVyIGl0KHRoaXMsIHJ1bik7Ci0gICAgICAgIGl0LmFkdmFu
Y2UoZnJvbSk7Ci0gICAgICAgIG9mZnNldEJlZm9yZVJhbmdlID0gaXQucnVuV2lkdGhTb0Zhcigp
OwotICAgICAgICBpdC5hZHZhbmNlKHRvKTsKLSAgICAgICAgb2Zmc2V0QWZ0ZXJSYW5nZSA9IGl0
LnJ1bldpZHRoU29GYXIoKTsKLSAgICAgICAgaXQuYWR2YW5jZSh0byk7Ci0gICAgICAgIHRvdGFs
V2lkdGggPSBpdC5ydW5XaWR0aFNvRmFyKCk7Ci0jZWxzZQogICAgICAgICBDb21wbGV4VGV4dENv
bnRyb2xsZXIgY29tcGxleEl0ZXJhdG9yKCp0aGlzLCBydW4sIGZhbHNlLCBmYWxsYmFja0ZvbnRz
KTsKICAgICAgICAgY29tcGxleEl0ZXJhdG9yLmFkdmFuY2UoZnJvbSwgbnVsbHB0ciwgSW5jbHVk
ZVBhcnRpYWxHbHlwaHMsIGZhbGxiYWNrRm9udHMpOwogICAgICAgICBvZmZzZXRCZWZvcmVSYW5n
ZSA9IGNvbXBsZXhJdGVyYXRvci5ydW5XaWR0aFNvRmFyKCk7CkBAIC0zNjYsNyArMzUzLDYgQEAg
ZmxvYXQgRm9udENhc2NhZGU6OndpZHRoT2ZUZXh0UmFuZ2UoY29uc3QgVGV4dFJ1biYgcnVuLCB1
bnNpZ25lZCBmcm9tLCB1bnNpZ25lZAogICAgICAgICBvZmZzZXRBZnRlclJhbmdlID0gY29tcGxl
eEl0ZXJhdG9yLnJ1bldpZHRoU29GYXIoKTsKICAgICAgICAgY29tcGxleEl0ZXJhdG9yLmFkdmFu
Y2UocnVuLmxlbmd0aCgpLCBudWxscHRyLCBJbmNsdWRlUGFydGlhbEdseXBocywgZmFsbGJhY2tG
b250cyk7CiAgICAgICAgIHRvdGFsV2lkdGggPSBjb21wbGV4SXRlcmF0b3IucnVuV2lkdGhTb0Zh
cigpOwotI2VuZGlmCiAgICAgfSBlbHNlIHsKICAgICAgICAgV2lkdGhJdGVyYXRvciBzaW1wbGVJ
dGVyYXRvcih0aGlzLCBydW4sIGZhbGxiYWNrRm9udHMpOwogICAgICAgICBzaW1wbGVJdGVyYXRv
ci5hZHZhbmNlKGZyb20sIG51bGxwdHIpOwpAQCAtMTM5Nyw3ICsxMzgzLDYgQEAgZmxvYXQgRm9u
dENhc2NhZGU6OmdldEdseXBoc0FuZEFkdmFuY2VzRm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVu
JiBydW4sIHVuc2lnbmUKICAgICByZXR1cm4gaW5pdGlhbEFkdmFuY2U7CiB9CiAKLSNpZiAhUExB
VEZPUk0oV0lOKSB8fCBVU0UoRElSRUNUMkQpCiBmbG9hdCBGb250Q2FzY2FkZTo6Z2V0R2x5cGhz
QW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIHVuc2lnbmVkIGZy
b20sIHVuc2lnbmVkIHRvLCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIEZvclRleHRFbXBoYXNp
c09yTm90IGZvclRleHRFbXBoYXNpcykgY29uc3QKIHsKICAgICBmbG9hdCBpbml0aWFsQWR2YW5j
ZTsKQEAgLTE0MjcsNyArMTQxMiw2IEBAIGZsb2F0IEZvbnRDYXNjYWRlOjpnZXRHbHlwaHNBbmRB
ZHZhbmNlc0ZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgdW5zaWduCiAKICAgICBy
ZXR1cm4gaW5pdGlhbEFkdmFuY2U7CiB9Ci0jZW5kaWYKIAogdm9pZCBGb250Q2FzY2FkZTo6ZHJh
d0VtcGhhc2lzTWFya3NGb3JTaW1wbGVUZXh0KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29u
c3QgVGV4dFJ1biYgcnVuLCBjb25zdCBBdG9tU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50
JiBwb2ludCwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8pIGNvbnN0CiB7CkBAIC0xNDUyLDEz
ICsxNDM2LDcgQEAgdm9pZCBGb250Q2FzY2FkZTo6ZHJhd0dseXBoQnVmZmVyKEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCwgY29uc3QgR2x5cGhCdWZmZXImIGcKIHsKICAgICAvLyBEcmF3IGVhY2gg
Y29udGlndW91cyBydW4gb2YgZ2x5cGhzIHRoYXQgdXNlIHRoZSBzYW1lIGZvbnQgZGF0YS4KICAg
ICBjb25zdCBGb250KiBmb250RGF0YSA9IGdseXBoQnVmZmVyLmZvbnRBdCgwKTsKLSNpZiBQTEFU
Rk9STShXSU4pCi0gICAgRmxvYXRQb2ludCBzdGFydFBvaW50KHBvaW50LngoKSArIGdseXBoQnVm
ZmVyLmluaXRpYWxBZHZhbmNlKCkud2lkdGgoKSwgcG9pbnQueSgpICsgZ2x5cGhCdWZmZXIuaW5p
dGlhbEFkdmFuY2UoKS5oZWlnaHQoKSk7Ci0jZWxzZQotICAgIC8vIEZJWE1FOiBXaHkgZG8gd2Ug
c3VidHJhY3QgdGhlIGluaXRpYWwgYWR2YW5jZSdzIGhlaWdodCBidXQgbm90IGl0cyB3aWR0aD8/
PwotICAgIC8vIFdlIHNob3VsZCB1c2UgdGhlIGxpbmUgYWJvdmUgZnJvbSBXaW5kb3dzIGluc3Rl
YWQuCiAgICAgRmxvYXRQb2ludCBzdGFydFBvaW50KHBvaW50LngoKSwgcG9pbnQueSgpIC0gZ2x5
cGhCdWZmZXIuaW5pdGlhbEFkdmFuY2UoKS5oZWlnaHQoKSk7Ci0jZW5kaWYKICAgICBmbG9hdCBu
ZXh0WCA9IHN0YXJ0UG9pbnQueCgpICsgZ2x5cGhCdWZmZXIuYWR2YW5jZUF0KDApLndpZHRoKCk7
CiAgICAgZmxvYXQgbmV4dFkgPSBzdGFydFBvaW50LnkoKSArIGdseXBoQnVmZmVyLmFkdmFuY2VB
dCgwKS5oZWlnaHQoKTsKICAgICB1bnNpZ25lZCBsYXN0RnJvbSA9IDA7CkBAIC0xNTQ1LDcgKzE1
MjMsNiBAQCBmbG9hdCBGb250Q2FzY2FkZTo6ZmxvYXRXaWR0aEZvclNpbXBsZVRleHQoY29uc3Qg
VGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IEZvbgogICAgIHJldHVybiBpdC5tX3J1bldpZHRo
U29GYXI7CiB9CiAKLSNpZiAhUExBVEZPUk0oV0lOKSB8fCBVU0UoRElSRUNUMkQpCiBmbG9hdCBG
b250Q2FzY2FkZTo6ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwg
SGFzaFNldDxjb25zdCBGb250Kj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqIGdseXBo
T3ZlcmZsb3cpIGNvbnN0CiB7CiAgICAgQ29tcGxleFRleHRDb250cm9sbGVyIGNvbnRyb2xsZXIo
KnRoaXMsIHJ1biwgdHJ1ZSwgZmFsbGJhY2tGb250cyk7CkBAIC0xNTU3LDcgKzE1MzQsNiBAQCBm
bG9hdCBGb250Q2FzY2FkZTo6ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4m
IHJ1biwgSGFzaFNldDxjb25zdCBGbwogICAgIH0KICAgICByZXR1cm4gY29udHJvbGxlci50b3Rh
bFdpZHRoKCk7CiB9Ci0jZW5kaWYKIAogdm9pZCBGb250Q2FzY2FkZTo6YWRqdXN0U2VsZWN0aW9u
UmVjdEZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBMYXlvdXRSZWN0JiBzZWxlY3Rp
b25SZWN0LCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bykgY29uc3QKIHsKQEAgLTE1NzgsNyAr
MTU1NCw2IEBAIHZvaWQgRm9udENhc2NhZGU6OmFkanVzdFNlbGVjdGlvblJlY3RGb3JTaW1wbGVU
ZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgTGF5b3V0UmVjCiAgICAgc2VsZWN0aW9uUmVjdC5zZXRX
aWR0aChMYXlvdXRVbml0Ojpmcm9tRmxvYXRDZWlsKGFmdGVyV2lkdGggLSBiZWZvcmVXaWR0aCkp
OwogfQogCi0jaWYgIVBMQVRGT1JNKFdJTikgfHwgVVNFKERJUkVDVDJEKQogdm9pZCBGb250Q2Fz
Y2FkZTo6YWRqdXN0U2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1
biwgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8p
IGNvbnN0CiB7CiAgICAgQ29tcGxleFRleHRDb250cm9sbGVyIGNvbnRyb2xsZXIoKnRoaXMsIHJ1
bik7CkBAIC0xNTkzLDcgKzE1NjgsNiBAQCB2b2lkIEZvbnRDYXNjYWRlOjphZGp1c3RTZWxlY3Rp
b25SZWN0Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBMYXlvdXRSZQogICAgICAg
ICBzZWxlY3Rpb25SZWN0Lm1vdmUoYmVmb3JlV2lkdGgsIDApOwogICAgIHNlbGVjdGlvblJlY3Qu
c2V0V2lkdGgoTGF5b3V0VW5pdDo6ZnJvbUZsb2F0Q2VpbChhZnRlcldpZHRoIC0gYmVmb3JlV2lk
dGgpKTsKIH0KLSNlbmRpZgogCiBpbnQgRm9udENhc2NhZGU6Om9mZnNldEZvclBvc2l0aW9uRm9y
U2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGZsb2F0IHgsIGJvb2wgaW5jbHVkZVBhcnRp
YWxHbHlwaHMpIGNvbnN0CiB7CkBAIC0xNjM4LDEzICsxNjEyLDExIEBAIGludCBGb250Q2FzY2Fk
ZTo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgZmxv
YXQgeCwgYm9vCiAgICAgcmV0dXJuIG9mZnNldDsKIH0KIAotI2lmICFQTEFURk9STShXSU4pIHx8
IFVTRShESVJFQ1QyRCkKIGludCBGb250Q2FzY2FkZTo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21w
bGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGZsb2F0IHgsIGJvb2wgaW5jbHVkZVBhcnRpYWxH
bHlwaHMpIGNvbnN0CiB7CiAgICAgQ29tcGxleFRleHRDb250cm9sbGVyIGNvbnRyb2xsZXIoKnRo
aXMsIHJ1bik7CiAgICAgcmV0dXJuIGNvbnRyb2xsZXIub2Zmc2V0Rm9yUG9zaXRpb24oeCwgaW5j
bHVkZVBhcnRpYWxHbHlwaHMpOwogfQotI2VuZGlmCiAKICNpZiAhUExBVEZPUk0oQ09DT0EpICYm
ICFVU0UoSEFSRkJVWlopCiAvLyBGSVhNRTogVW5pZnkgdGhpcyB3aXRoIHRoZSBtYWNPUyBhbmQg
aU9TIGltcGxlbWVudGF0aW9uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0NvbXBsZXhUZXh0Q29udHJvbGxlclVuaXNjcmliZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vQ29tcGxleFRleHRDb250cm9sbGVyVW5pc2Ny
aWJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNDAyNWE2NDBk
ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vQ29tcGxleFRleHRDb250cm9sbGVyVW5pc2NyaWJlLmNwcApAQCAtMCwwICsxLDE4OSBAQAor
LyoKKyogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisqIGFyZSBtZXQ6CisqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorKiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworKiBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJDb21wbGV4VGV4dENvbnRyb2xsZXIuaCIKKworI2lmICFV
U0UoRElSRUNUMkQpCisKKyNpbmNsdWRlICJGb250Q2FjaGUuaCIKKyNpbmNsdWRlICJGb250Q2Fz
Y2FkZS5oIgorI2luY2x1ZGUgIkhXbmREQy5oIgorI2luY2x1ZGUgPHVzcDEwLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGJvb2wgc2hhcGVCeVVuaXNjcmliZShjb25zdCBVQ2hh
ciogc3RyLCBpbnQgbGVuLCBTQ1JJUFRfSVRFTSBpdGVtLCBjb25zdCBGb250KiBmb250RGF0YSwK
KyAgICBWZWN0b3I8V09SRD4mIGdseXBocywgVmVjdG9yPFdPUkQ+JiBjbHVzdGVycywKKyAgICBW
ZWN0b3I8U0NSSVBUX1ZJU0FUVFI+JiB2aXN1YWxBdHRyaWJ1dGVzKQoreworICAgIEhXbmREQyBo
ZGM7CisgICAgSEZPTlQgb2xkRm9udCA9IDA7CisgICAgSFJFU1VMVCBzaGFwZVJlc3VsdCA9IEVf
UEVORElORzsKKyAgICBpbnQgZ2x5cGhDb3VudCA9IDA7CisKKyAgICBpZiAoIWZvbnREYXRhKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBkbyB7CisgICAgICAgIHNoYXBlUmVzdWx0ID0g
U2NyaXB0U2hhcGUoaGRjLCBmb250RGF0YS0+c2NyaXB0Q2FjaGUoKSwgd2NoYXJGcm9tKHN0ciks
IGxlbiwgZ2x5cGhzLnNpemUoKSwgJml0ZW0uYSwKKyAgICAgICAgICAgIGdseXBocy5kYXRhKCks
IGNsdXN0ZXJzLmRhdGEoKSwgdmlzdWFsQXR0cmlidXRlcy5kYXRhKCksICZnbHlwaENvdW50KTsK
KyAgICAgICAgaWYgKHNoYXBlUmVzdWx0ID09IEVfUEVORElORykgeworICAgICAgICAgICAgLy8g
VGhlIHNjcmlwdCBjYWNoZSBpc24ndCBwcmltZWQgd2l0aCBlbm91Z2ggaW5mbyB5ZXQuIFdlIG5l
ZWQgdG8gc2VsZWN0IG91ciBIRk9OVCBpbnRvCisgICAgICAgICAgICAvLyBhIERDIGFuZCBwYXNz
IHRoZSBEQyBpbiB0byBTY3JpcHRTaGFwZS4KKyAgICAgICAgICAgIEFTU0VSVCghaGRjKTsKKyAg
ICAgICAgICAgIGhkYy5zZXRIV25kKDApOworICAgICAgICAgICAgSEZPTlQgaGZvbnQgPSBmb250
RGF0YS0+cGxhdGZvcm1EYXRhKCkuaGZvbnQoKTsKKyAgICAgICAgICAgIG9sZEZvbnQgPSAoSEZP
TlQpU2VsZWN0T2JqZWN0KGhkYywgaGZvbnQpOworICAgICAgICB9IGVsc2UgaWYgKHNoYXBlUmVz
dWx0ID09IEVfT1VUT0ZNRU1PUlkpIHsKKyAgICAgICAgICAgIC8vIE5lZWQgdG8gcmVzaXplIG91
ciBidWZmZXJzLgorICAgICAgICAgICAgZ2x5cGhzLnJlc2l6ZShnbHlwaHMuc2l6ZSgpICogMik7
CisgICAgICAgICAgICB2aXN1YWxBdHRyaWJ1dGVzLnJlc2l6ZShnbHlwaHMuc2l6ZSgpKTsKKyAg
ICAgICAgfQorICAgIH0gd2hpbGUgKHNoYXBlUmVzdWx0ID09IEVfUEVORElORyB8fCBzaGFwZVJl
c3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKKworICAgIGlmIChoZGMpCisgICAgICAgIFNlbGVjdE9i
amVjdChoZGMsIG9sZEZvbnQpOworCisgICAgaWYgKEZBSUxFRChzaGFwZVJlc3VsdCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGdseXBocy5zaHJpbmsoZ2x5cGhDb3VudCk7CisgICAg
dmlzdWFsQXR0cmlidXRlcy5zaHJpbmsoZ2x5cGhDb3VudCk7CisKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKwordm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmNvbGxlY3RDb21wbGV4VGV4dFJ1bnNG
b3JDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiBjcCwgdW5zaWduZWQgc3RyaW5nTGVuZ3RoLCB1bnNp
Z25lZCBzdHJpbmdMb2NhdGlvbiwgY29uc3QgRm9udCogZm9udCkKK3sKKyAgICBpZiAoIWZvbnQp
IHsKKyAgICAgICAgLy8gQ3JlYXRlIGEgcnVuIG9mIG1pc3NpbmcgZ2x5cGhzIGZyb20gdGhlIHBy
aW1hcnkgZm9udC4KKyAgICAgICAgbV9jb21wbGV4VGV4dFJ1bnMuYXBwZW5kKENvbXBsZXhUZXh0
UnVuOjpjcmVhdGUobV9mb250LnByaW1hcnlGb250KCksIGNwLCBzdHJpbmdMb2NhdGlvbiwgc3Ry
aW5nTGVuZ3RoLCAwLCBzdHJpbmdMZW5ndGgsIG1fcnVuLmx0cigpKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBWZWN0b3I8U0NSSVBUX0lURU0+IGl0ZW1zKDYpOworICAgIGludCBu
dW1JdGVtcyA9IDA7CisgICAgZm9yICg7OykgeworICAgICAgICBTQ1JJUFRfQ09OVFJPTCBjb250
cm9sIHsgfTsKKyAgICAgICAgU0NSSVBUX1NUQVRFIHN0YXRlIHsgfTsKKyAgICAgICAgLy8gU2V0
IHVwIHRoZSBjb3JyZWN0IGRpcmVjdGlvbiBmb3IgdGhlIHJ1bi4KKyAgICAgICAgc3RhdGUudUJp
ZGlMZXZlbCA9IG1fcnVuLnJ0bCgpOworICAgICAgICAvLyBMb2NrIHRoZSBjb3JyZWN0IGRpcmVj
dGlvbmFsIG92ZXJyaWRlLgorICAgICAgICBzdGF0ZS5mT3ZlcnJpZGVEaXJlY3Rpb24gPSBtX3J1
bi5kaXJlY3Rpb25hbE92ZXJyaWRlKCk7CisKKyAgICAgICAgLy8gU2NyaXB0SXRlbWl6ZSBtYXkg
d3JpdGUgKGNNYXhJdGVtcyArIDEpIFNDUklQVF9JVEVNLgorICAgICAgICBIUkVTVUxUIGhyID0g
U2NyaXB0SXRlbWl6ZSh3Y2hhckZyb20oY3ApLCBzdHJpbmdMZW5ndGgsIGl0ZW1zLnNpemUoKSAt
IDEsICZjb250cm9sLCAmc3RhdGUsIGl0ZW1zLmRhdGEoKSwgJm51bUl0ZW1zKTsKKyAgICAgICAg
aWYgKGhyICE9IEVfT1VUT0ZNRU1PUlkpIHsKKyAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQo
aHIpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGl0ZW1zLnJlc2l6
ZShpdGVtcy5zaXplKCkgKiAyKTsKKyAgICB9CisgICAgaXRlbXMucmVzaXplKG51bUl0ZW1zICsg
MSk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUl0ZW1zOyBpKyspIHsKKyAgICAgICAg
Ly8gRGV0ZXJtaW5lIHRoZSBzdHJpbmcgZm9yIHRoaXMgaXRlbS4KKyAgICAgICAgY29uc3QgVUNo
YXIqIHN0ciA9IGNwICsgaXRlbXNbaV0uaUNoYXJQb3M7CisgICAgICAgIGludCBsZW5ndGggPSBp
dGVtc1tpKzFdLmlDaGFyUG9zIC0gaXRlbXNbaV0uaUNoYXJQb3M7CisgICAgICAgIFNDUklQVF9J
VEVNJiBpdGVtID0gaXRlbXNbaV07CisKKyAgICAgICAgLy8gU2V0IHVwIGJ1ZmZlcnMgdG8gaG9s
ZCB0aGUgcmVzdWx0cyBvZiBzaGFwaW5nIHRoZSBpdGVtLgorICAgICAgICBWZWN0b3I8V09SRD4g
Z2x5cGhzOworICAgICAgICBWZWN0b3I8V09SRD4gY2x1c3RlcnM7CisgICAgICAgIFZlY3RvcjxT
Q1JJUFRfVklTQVRUUj4gdmlzdWFsQXR0cmlidXRlczsKKyAgICAgICAgY2x1c3RlcnMucmVzaXpl
KGxlbmd0aCk7CisKKyAgICAgICAgLy8gU2hhcGUgdGhlIGl0ZW0uCisgICAgICAgIC8vIFRoZSBy
ZWNvbW1lbmRlZCBzaXplIGZvciB0aGUgZ2x5cGggYnVmZmVyIGlzIDEuNSAqIHRoZSBjaGFyYWN0
ZXIgbGVuZ3RoICsgMTYgaW4gdGhlIHVuaXNjcmliZSBkb2NzLgorICAgICAgICAvLyBBcHBhcmVu
dGx5IHRoaXMgaXMgYSBnb29kIHNpemUgdG8gYXZvaWQgaGF2aW5nIHRvIG1ha2UgcmVwZWF0ZWQg
Y2FsbHMgdG8gU2NyaXB0U2hhcGUuCisgICAgICAgIGdseXBocy5yZXNpemUoMS41ICogbGVuZ3Ro
ICsgMTYpOworICAgICAgICB2aXN1YWxBdHRyaWJ1dGVzLnJlc2l6ZShnbHlwaHMuc2l6ZSgpKTsK
KworICAgICAgICBpZiAoIXNoYXBlQnlVbmlzY3JpYmUoc3RyLCBsZW5ndGgsIGl0ZW0sIGZvbnQs
IGdseXBocywgY2x1c3RlcnMsIHZpc3VhbEF0dHJpYnV0ZXMpKQorICAgICAgICAgICAgY29udGlu
dWU7CisKKyAgICAgICAgLy8gV2Ugbm93IGhhdmUgYSBjb2xsZWN0aW9uIG9mIGdseXBocy4KKyAg
ICAgICAgVmVjdG9yPEdPRkZTRVQ+IG9mZnNldHM7CisgICAgICAgIFZlY3RvcjxpbnQ+IGFkdmFu
Y2VzOworICAgICAgICBvZmZzZXRzLnJlc2l6ZShnbHlwaHMuc2l6ZSgpKTsKKyAgICAgICAgYWR2
YW5jZXMucmVzaXplKGdseXBocy5zaXplKCkpOworICAgICAgICBIUkVTVUxUIHBsYWNlUmVzdWx0
ID0gU2NyaXB0UGxhY2UoMCwgZm9udC0+c2NyaXB0Q2FjaGUoKSwgZ2x5cGhzLmRhdGEoKSwgZ2x5
cGhzLnNpemUoKSwgdmlzdWFsQXR0cmlidXRlcy5kYXRhKCksCisgICAgICAgICAgICAmaXRlbS5h
LCBhZHZhbmNlcy5kYXRhKCksIG9mZnNldHMuZGF0YSgpLCAwKTsKKyAgICAgICAgaWYgKHBsYWNl
UmVzdWx0ID09IEVfUEVORElORykgeworICAgICAgICAgICAgLy8gVGhlIHNjcmlwdCBjYWNoZSBp
c24ndCBwcmltZWQgd2l0aCBlbm91Z2ggaW5mbyB5ZXQuIFdlIG5lZWQgdG8gc2VsZWN0IG91ciBI
Rk9OVCBpbnRvCisgICAgICAgICAgICAvLyBhIERDIGFuZCBwYXNzIHRoZSBEQyBpbiB0byBTY3Jp
cHRQbGFjZS4KKyAgICAgICAgICAgIEhXbmREQyBoZGMoMCk7CisgICAgICAgICAgICBIRk9OVCBo
Zm9udCA9IGZvbnQtPnBsYXRmb3JtRGF0YSgpLmhmb250KCk7CisgICAgICAgICAgICBIRk9OVCBv
bGRGb250ID0gKEhGT05UKVNlbGVjdE9iamVjdChoZGMsIGhmb250KTsKKyAgICAgICAgICAgIHBs
YWNlUmVzdWx0ID0gU2NyaXB0UGxhY2UoaGRjLCBmb250LT5zY3JpcHRDYWNoZSgpLCBnbHlwaHMu
ZGF0YSgpLCBnbHlwaHMuc2l6ZSgpLCB2aXN1YWxBdHRyaWJ1dGVzLmRhdGEoKSwKKyAgICAgICAg
ICAgICAgICAmaXRlbS5hLCBhZHZhbmNlcy5kYXRhKCksIG9mZnNldHMuZGF0YSgpLCAwKTsKKyAg
ICAgICAgICAgIFNlbGVjdE9iamVjdChoZGMsIG9sZEZvbnQpOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKEZBSUxFRChwbGFjZVJlc3VsdCkgfHwgZ2x5cGhzLmlzRW1wdHkoKSkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmIChtX2ZhbGxiYWNrRm9udHMpCisgICAgICAgICAg
ICBtX2ZhbGxiYWNrRm9udHMtPmFkZChmb250KTsKKworICAgICAgICBWZWN0b3I8dW5zaWduZWQ+
IHN0cmluZ0luZGljZXMoZ2x5cGhzLnNpemUoKSwgaXRlbS5pQ2hhclBvcyk7CisKKyAgICAgICAg
Zm9yIChpbnQgayA9IGxlbmd0aCAtIDE7IGsgPj0gMDsgay0tKQorICAgICAgICAgICAgc3RyaW5n
SW5kaWNlc1tjbHVzdGVyc1trXV0gPSBpdGVtLmlDaGFyUG9zICsgazsKKworICAgICAgICBWZWN0
b3I8RmxvYXRTaXplPiBiYXNlQWR2YW5jZXM7CisgICAgICAgIFZlY3RvcjxGbG9hdFBvaW50PiBv
cmlnaW5zOworICAgICAgICBiYXNlQWR2YW5jZXMucmVzZXJ2ZUNhcGFjaXR5KGdseXBocy5zaXpl
KCkpOworICAgICAgICBvcmlnaW5zLnJlc2VydmVDYXBhY2l0eShnbHlwaHMuc2l6ZSgpKTsKKwor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgZ2x5cGhzLnNpemUoKTsgaysrKSB7Cisg
ICAgICAgICAgICBjb25zdCBmbG9hdCBjTG9naWNhbFNjYWxlID0gZm9udC0+cGxhdGZvcm1EYXRh
KCkudXNlR0RJKCkgPyAxIDogMzI7CisgICAgICAgICAgICBmbG9hdCBhZHZhbmNlID0gYWR2YW5j
ZXNba10gLyBjTG9naWNhbFNjYWxlOworICAgICAgICAgICAgZmxvYXQgb2Zmc2V0WCA9IG9mZnNl
dHNba10uZHUgLyBjTG9naWNhbFNjYWxlOworICAgICAgICAgICAgZmxvYXQgb2Zmc2V0WSA9IG9m
ZnNldHNba10uZHYgLyBjTG9naWNhbFNjYWxlOworCisgICAgICAgICAgICAvLyBNYXRjaCBBcHBL
aXQncyBydWxlcyBmb3IgdGhlIGludGVnZXIgdnMuIG5vbi1pbnRlZ2VyIHJlbmRlcmluZyBtb2Rl
cy4KKyAgICAgICAgICAgIGlmICghZm9udC0+cGxhdGZvcm1EYXRhKCkuaXNTeXN0ZW1Gb250KCkp
IHsKKyAgICAgICAgICAgICAgICBhZHZhbmNlID0gcm91bmRmKGFkdmFuY2UpOworICAgICAgICAg
ICAgICAgIG9mZnNldFggPSByb3VuZGYob2Zmc2V0WCk7CisgICAgICAgICAgICAgICAgb2Zmc2V0
WSA9IHJvdW5kZihvZmZzZXRZKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gRklY
TUU6IFdlIG5lZWQgdG8gdGFrZSB0aGUgR09GRlNFVFMgZm9yIGNvbWJpbmluZyBnbHlwaHMgYW5k
IHN0b3JlIHRoZW0gaW4gdGhlIGdseXBoIGJ1ZmZlcgorICAgICAgICAgICAgLy8gYXMgd2VsbCwg
c28gdGhhdCB3aGVuIHRoZSB0aW1lIGNvbWVzIHRvIGRyYXcgdGhvc2UgZ2x5cGhzLCB3ZSBjYW4g
YXBwbHkgdGhlIGFwcHJvcHJpYXRlCisgICAgICAgICAgICAvLyB0cmFuc2xhdGlvbi4KKworICAg
ICAgICAgICAgYmFzZUFkdmFuY2VzLnVuY2hlY2tlZEFwcGVuZCh7IGFkdmFuY2UsIDAgfSk7Cisg
ICAgICAgICAgICBvcmlnaW5zLnVuY2hlY2tlZEFwcGVuZCh7IG9mZnNldFgsIG9mZnNldFkgfSk7
CisgICAgICAgIH0KKyAgICAgICAgRmxvYXRTaXplIGluaXRpYWxBZHZhbmNlID0gdG9GbG9hdFNp
emUob3JpZ2luc1swXSk7CisgICAgICAgIGJvb2wgbHRyID0gIWl0ZW0uYS5mUlRMOworICAgICAg
ICBtX2NvbXBsZXhUZXh0UnVucy5hcHBlbmQoQ29tcGxleFRleHRSdW46OmNyZWF0ZShiYXNlQWR2
YW5jZXMsIG9yaWdpbnMsIGdseXBocywgc3RyaW5nSW5kaWNlcywgaW5pdGlhbEFkdmFuY2UsICpm
b250LCBjcCwgc3RyaW5nTG9jYXRpb24sIHN0cmluZ0xlbmd0aCwgaXRlbS5pQ2hhclBvcywgaXRl
bXNbaSsxXS5pQ2hhclBvcywgbHRyKSk7CisgICAgfQorfQorCit9CisKKyNlbmRpZiAvLyAhVVNF
KERJUkVDVDJEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0ZvbnRDR1dpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
Rm9udENHV2luLmNwcAppbmRleCAwZWY2NTVkOGQwNS4uMzNmODUyZWI2ZTggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q0dXaW4uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q0dXaW4uY3BwCkBAIC0z
NCw3ICszNCw2IEBACiAjaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKICNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiVW5pc2NyaWJlQ29u
dHJvbGxlci5oIgogI2luY2x1ZGUgIldlYkNvcmVUZXh0UmVuZGVyZXIuaCIKICNpbmNsdWRlIDxw
YWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENh
c2NhZGVEaXJlY3QyRC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
Rm9udENhc2NhZGVEaXJlY3QyRC5jcHAKaW5kZXggOTExMTJkOTY1YzguLmIyZDM0NzFiOGFjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhc2Nh
ZGVEaXJlY3QyRC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ZvbnRDYXNjYWRlRGlyZWN0MkQuY3BwCkBAIC0zNyw3ICszNyw2IEBACiAjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlRGlyZWN0MkQuaCIKICNpbmNsdWRlICJJbnRSZWN0
LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuaCIKLSNpbmNsdWRlICJVbmlz
Y3JpYmVDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiV2ViQ29yZVRleHRSZW5kZXJlci5oIgogI2lu
Y2x1ZGUgPGQyZDEuaD4KICNpbmNsdWRlIDxkd3JpdGVfMy5oPgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRXaW4uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRXaW4uY3BwCmluZGV4IDFjYWE4MDIyZTI2Li41
MmNiODhmNTNkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0ZvbnRXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9Gb250V2luLmNwcApAQCAtMzUsMTAgKzM1LDYgQEAKICNpbmNsdWRlICJUZXh0UnVuLmgiCiAj
aW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAotI2lmICFVU0UoRElSRUNUMkQpCi0jaW5jbHVk
ZSAiVW5pc2NyaWJlQ29udHJvbGxlci5oIgotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogYm9vbCBGb250Q2FzY2FkZTo6Y2FuUmV0dXJuRmFsbGJhY2tGb250c0ZvckNvbXBsZXhUZXh0
KCkKQEAgLTUxLDcyICs0Nyw0IEBAIGJvb2wgRm9udENhc2NhZGU6OmNhbkV4cGFuZEFyb3VuZElk
ZW9ncmFwaHNJbkNvbXBsZXhUZXh0KCkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLSNpZiAhVVNF
KERJUkVDVDJEKQotCi12b2lkIEZvbnRDYXNjYWRlOjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9yQ29t
cGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCB1
bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bykgY29uc3QKLXsKLSAgICBVbmlzY3JpYmVDb250cm9s
bGVyIGl0KHRoaXMsIHJ1bik7Ci0gICAgaXQuYWR2YW5jZShmcm9tKTsKLSAgICBmbG9hdCBiZWZv
cmVXaWR0aCA9IGl0LnJ1bldpZHRoU29GYXIoKTsKLSAgICBpdC5hZHZhbmNlKHRvKTsKLSAgICBm
bG9hdCBhZnRlcldpZHRoID0gaXQucnVuV2lkdGhTb0ZhcigpOwotCi0gICAgaWYgKHJ1bi5ydGwo
KSkgewotICAgICAgICBpdC5hZHZhbmNlKHJ1bi5sZW5ndGgoKSk7Ci0gICAgICAgIHNlbGVjdGlv
blJlY3QubW92ZShpdC5ydW5XaWR0aFNvRmFyKCkgLSBhZnRlcldpZHRoLCAwKTsKLSAgICB9IGVs
c2UKLSAgICAgICAgc2VsZWN0aW9uUmVjdC5tb3ZlKGJlZm9yZVdpZHRoLCAwKTsKLSAgICBzZWxl
Y3Rpb25SZWN0LnNldFdpZHRoKGFmdGVyV2lkdGggLSBiZWZvcmVXaWR0aCk7Ci19Ci0KLWZsb2F0
IEZvbnRDYXNjYWRlOjpnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvckNvbXBsZXhUZXh0KGNvbnN0IFRl
eHRSdW4mIHJ1biwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8sIEdseXBoQnVmZmVyJiBnbHlw
aEJ1ZmZlciwgRm9yVGV4dEVtcGhhc2lzT3JOb3QgZm9yVGV4dEVtcGhhc2lzKSBjb25zdAotewot
ICAgIGlmIChmb3JUZXh0RW1waGFzaXMpIHsKLSAgICAgICAgLy8gRklYTUU6IEFkZCBmb3JUZXh0
RW1waGFzaXMgcGFyZW1ldGVyIHRvIFVuaXNjcmliZUNvbnRyb2xsZXIgYW5kIHVzZSBpdC4KLSAg
ICAgICAgTE9HX0VSUk9SKCJOb3QgaW1wbGVtZW50ZWQgZm9yIHRleHQgZW1waGFzaXMuIik7Ci0g
ICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIFVuaXNjcmliZUNvbnRyb2xsZXIgY29udHJv
bGxlcih0aGlzLCBydW4pOwotICAgIGNvbnRyb2xsZXIuYWR2YW5jZShmcm9tKTsKLSAgICBmbG9h
dCBiZWZvcmVXaWR0aCA9IGNvbnRyb2xsZXIucnVuV2lkdGhTb0ZhcigpOwotICAgIGNvbnRyb2xs
ZXIuYWR2YW5jZSh0bywgJmdseXBoQnVmZmVyKTsKLQotICAgIGlmIChnbHlwaEJ1ZmZlci5pc0Vt
cHR5KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgZmxvYXQgYWZ0ZXJXaWR0aCA9IGNvbnRy
b2xsZXIucnVuV2lkdGhTb0ZhcigpOwotCi0gICAgaWYgKHJ1bi5ydGwoKSkgewotICAgICAgICBj
b250cm9sbGVyLmFkdmFuY2UocnVuLmxlbmd0aCgpKTsKLSAgICAgICAgcmV0dXJuIGNvbnRyb2xs
ZXIucnVuV2lkdGhTb0ZhcigpIC0gYWZ0ZXJXaWR0aDsKLSAgICB9Ci0gICAgcmV0dXJuIGJlZm9y
ZVdpZHRoOwotfQotCi1mbG9hdCBGb250Q2FzY2FkZTo6ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0
KGNvbnN0IFRleHRSdW4mIHJ1biwgSGFzaFNldDxjb25zdCBGb250Kj4qIGZhbGxiYWNrRm9udHMs
IEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cpIGNvbnN0Ci17Ci0gICAgVW5pc2NyaWJlQ29u
dHJvbGxlciBjb250cm9sbGVyKHRoaXMsIHJ1biwgZmFsbGJhY2tGb250cyk7Ci0gICAgY29udHJv
bGxlci5hZHZhbmNlKHJ1bi5sZW5ndGgoKSk7Ci0gICAgaWYgKGdseXBoT3ZlcmZsb3cpIHsKLSAg
ICAgICAgZ2x5cGhPdmVyZmxvdy0+dG9wID0gc3RkOjptYXg8aW50PihnbHlwaE92ZXJmbG93LT50
b3AsIGNlaWxmKC1jb250cm9sbGVyLm1pbkdseXBoQm91bmRpbmdCb3hZKCkpIC0gKGdseXBoT3Zl
cmZsb3ctPmNvbXB1dGVCb3VuZHMgPyAwIDogZm9udE1ldHJpY3MoKS5hc2NlbnQoKSkpOwotICAg
ICAgICBnbHlwaE92ZXJmbG93LT5ib3R0b20gPSBzdGQ6Om1heDxpbnQ+KGdseXBoT3ZlcmZsb3ct
PmJvdHRvbSwgY2VpbGYoY29udHJvbGxlci5tYXhHbHlwaEJvdW5kaW5nQm94WSgpKSAtIChnbHlw
aE92ZXJmbG93LT5jb21wdXRlQm91bmRzID8gMCAgOiBmb250TWV0cmljcygpLmRlc2NlbnQoKSkp
OwotICAgICAgICBnbHlwaE92ZXJmbG93LT5sZWZ0ID0gc3RkOjptYXg8aW50PigwLCBjZWlsZigt
Y29udHJvbGxlci5taW5HbHlwaEJvdW5kaW5nQm94WCgpKSk7Ci0gICAgICAgIGdseXBoT3ZlcmZs
b3ctPnJpZ2h0ID0gc3RkOjptYXg8aW50PigwLCBjZWlsZihjb250cm9sbGVyLm1heEdseXBoQm91
bmRpbmdCb3hYKCkgLSBjb250cm9sbGVyLnJ1bldpZHRoU29GYXIoKSkpOwotICAgIH0KLSAgICBy
ZXR1cm4gY29udHJvbGxlci5ydW5XaWR0aFNvRmFyKCk7Ci19Ci0KLWludCBGb250Q2FzY2FkZTo6
b2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGZsb2F0
IHhGbG9hdCwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3QKLXsKLSAgICAvLyBGSVhN
RTogVGhpcyB0cnVuY2F0aW9uIGlzIG5vdCBhIHByb2JsZW0gZm9yIEhUTUwsIGJ1dCBvbmx5IGFm
ZmVjdHMgU1ZHLCB3aGljaCBwYXNzZXMgZmxvYXRpbmctcG9pbnQgbnVtYmVycwotICAgIC8vIHRv
IEZvbnRDYXNjYWRlOjpvZmZzZXRGb3JQb3NpdGlvbigpLiBCdWcgaHR0cDovL3dlYmtpdC5vcmcv
Yi80MDY3MyB0cmFja3MgZml4aW5nIHRoaXMgcHJvYmxlbS4KLSAgICBpbnQgeCA9IHN0YXRpY19j
YXN0PGludD4oeEZsb2F0KTsKLQotICAgIFVuaXNjcmliZUNvbnRyb2xsZXIgY29udHJvbGxlcih0
aGlzLCBydW4pOwotICAgIHJldHVybiBjb250cm9sbGVyLm9mZnNldEZvclBvc2l0aW9uKHgsIGlu
Y2x1ZGVQYXJ0aWFsR2x5cGhzKTsKLX0KLQotI2VuZGlmCi0KIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9VbmlzY3JpYmVDb250cm9sbGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9VbmlzY3JpYmVDb250cm9sbGVy
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDc0YzQ4NjBmZjEuLjAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9VbmlzY3JpYmVD
b250cm9sbGVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ1OSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlVuaXNj
cmliZUNvbnRyb2xsZXIuaCIKLQotI2luY2x1ZGUgIkZvbnQuaCIKLSNpbmNsdWRlICJGb250Q2Fz
Y2FkZS5oIgotI2luY2x1ZGUgIkhXbmREQy5oIgotI2luY2x1ZGUgIlRleHRSdW4uaCIKLSNpbmNs
dWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L3dpbi9XQ2hhclN0cmlu
Z0V4dHJhcy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci11c2luZyBuYW1lc3BhY2UgV1RGOjpV
bmljb2RlOwotCi0vLyBGSVhNRTogUmVhcmNoaXRlY3QgdGhpcyB0byBiZSBtb3JlIGxpa2UgV2lk
dGhJdGVyYXRvciBpbiBGb250LmNwcC4gIEhhdmUgYW4gYWR2YW5jZSgpIG1ldGhvZAotLy8gdGhh
dCBkb2VzIHN0dWZmIGluIHRoYXQgbWV0aG9kIGluc3RlYWQgb2YgZG9pbmcgZXZlcnl0aGluZyBp
biB0aGUgY29uc3RydWN0b3IuICBIYXZlIGFkdmFuY2UoKQotLy8gdGFrZSB0aGUgR2x5cGhCdWZm
ZXIgYXMgYW4gYXJnIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBwb3B1bGF0ZSB0aGUgZ2x5cGgg
YnVmZmVyIHdoZW4KLS8vIG1lYXN1cmluZy4KLVVuaXNjcmliZUNvbnRyb2xsZXI6OlVuaXNjcmli
ZUNvbnRyb2xsZXIoY29uc3QgRm9udENhc2NhZGUqIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwg
SGFzaFNldDxjb25zdCBGb250Kj4qIGZhbGxiYWNrRm9udHMpCi0gICAgOiBtX2ZvbnQoKmZvbnQp
Ci0gICAgLCBtX3J1bihydW4pCi0gICAgLCBtX2ZhbGxiYWNrRm9udHMoZmFsbGJhY2tGb250cykK
LSAgICAsIG1fbWluR2x5cGhCb3VuZGluZ0JveFgoc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46
Om1heCgpKQotICAgICwgbV9tYXhHbHlwaEJvdW5kaW5nQm94WChzdGQ6Om51bWVyaWNfbGltaXRz
PGZsb2F0Pjo6bWluKCkpCi0gICAgLCBtX21pbkdseXBoQm91bmRpbmdCb3hZKHN0ZDo6bnVtZXJp
Y19saW1pdHM8ZmxvYXQ+OjptYXgoKSkKLSAgICAsIG1fbWF4R2x5cGhCb3VuZGluZ0JveFkoc3Rk
OjpudW1lcmljX2xpbWl0czxmbG9hdD46Om1pbigpKQotICAgICwgbV9jdXJyZW50Q2hhcmFjdGVy
KDApCi0gICAgLCBtX2VuZChydW4ubGVuZ3RoKCkpCi0gICAgLCBtX3J1bldpZHRoU29GYXIoMCkK
LSAgICAsIG1fcGFkZGluZyhydW4uZXhwYW5zaW9uKCkpCi0gICAgLCBtX2NvbXB1dGluZ09mZnNl
dFBvc2l0aW9uKGZhbHNlKQotICAgICwgbV9pbmNsdWRlUGFydGlhbEdseXBocyhmYWxzZSkKLSAg
ICAsIG1fb2Zmc2V0WCgwKQotICAgICwgbV9vZmZzZXRQb3NpdGlvbigwKQotewotICAgIGlmICgh
bV9wYWRkaW5nKQotICAgICAgICBtX3BhZFBlclNwYWNlID0gMDsKLSAgICBlbHNlIHsKLSAgICAg
ICAgZmxvYXQgbnVtU3BhY2VzID0gMDsKLSAgICAgICAgZm9yIChpbnQgcyA9IDA7IHMgPCBtX3J1
bi5sZW5ndGgoKTsgcysrKSB7Ci0gICAgICAgICAgICBpZiAoRm9udENhc2NhZGU6OnRyZWF0QXNT
cGFjZShtX3J1bltzXSkpCi0gICAgICAgICAgICAgICAgbnVtU3BhY2VzKys7Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAobnVtU3BhY2VzID09IDApCi0gICAgICAgICAgICBtX3BhZFBlclNwYWNl
ID0gMDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9wYWRQZXJTcGFjZSA9IG1fcGFkZGlu
ZyAvIG51bVNwYWNlczsKLSAgICB9Ci0KLSAgICAvLyBOdWxsIG91dCBvdXIgdW5pc2NyaWJlIHN0
cnVjdHMKLSAgICByZXNldENvbnRyb2xBbmRTdGF0ZSgpOwotfQotCi1pbnQgVW5pc2NyaWJlQ29u
dHJvbGxlcjo6b2Zmc2V0Rm9yUG9zaXRpb24oaW50IHgsIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlw
aHMpCi17Ci0gICAgbV9jb21wdXRpbmdPZmZzZXRQb3NpdGlvbiA9IHRydWU7Ci0gICAgbV9pbmNs
dWRlUGFydGlhbEdseXBocyA9IGluY2x1ZGVQYXJ0aWFsR2x5cGhzOwotICAgIG1fb2Zmc2V0WCA9
IHg7Ci0gICAgbV9vZmZzZXRQb3NpdGlvbiA9IDA7Ci0gICAgYWR2YW5jZShtX3J1bi5sZW5ndGgo
KSk7Ci0gICAgaWYgKG1fY29tcHV0aW5nT2Zmc2V0UG9zaXRpb24pIHsKLSAgICAgICAgLy8gVGhl
IHBvaW50IGlzIHRvIHRoZSBsZWZ0IG9yIHRvIHRoZSByaWdodCBvZiB0aGUgZW50aXJlIHJ1bi4K
LSAgICAgICAgaWYgKChtX29mZnNldFggPj0gbV9ydW5XaWR0aFNvRmFyICYmIG1fcnVuLmx0cigp
KSB8fCAobV9vZmZzZXRYIDwgMCAmJiBtX3J1bi5ydGwoKSkpCi0gICAgICAgICAgICBtX29mZnNl
dFBvc2l0aW9uID0gbV9lbmQ7Ci0gICAgfQotICAgIG1fY29tcHV0aW5nT2Zmc2V0UG9zaXRpb24g
PSBmYWxzZTsKLSAgICByZXR1cm4gbV9vZmZzZXRQb3NpdGlvbjsKLX0KLQotdm9pZCBVbmlzY3Jp
YmVDb250cm9sbGVyOjphZHZhbmNlKHVuc2lnbmVkIG9mZnNldCwgR2x5cGhCdWZmZXIqIGdseXBo
QnVmZmVyKQotewotICAgIC8vIEZJWE1FOiBXZSByZWFsbHkgd2FudCB0byBiZSB1c2luZyBhIG5l
d2VyIHZlcnNpb24gb2YgVW5pc2NyaWJlIHRoYXQgc3VwcG9ydHMgdGhlIG5ldyBPcGVuVHlwZQot
ICAgIC8vIGZ1bmN0aW9ucy4gIFRob3NlIGZ1bmN0aW9ucyB3b3VsZCBhbGxvdyB1cyB0byB0dXJu
IG9mZiBrZXJuaW5nIGFuZCBsaWdhdHVyZXMuICBXaXRob3V0IGJlaW5nIGFibGUKLSAgICAvLyB0
byBkbyB0aGF0LCB3ZSB3aWxsIGhhdmUgYnVnZ3kgbGluZSBicmVha2luZyBhbmQgbWV0cmljcyB3
aGVuIHNpbXBsZSBhbmQgY29tcGxleCB0ZXh0IGFyZSBjbG9zZQotICAgIC8vIHRvZ2V0aGVyICh0
aGUgY29tcGxleCBjb2RlIHBhdGggd2lsbCBuYXJyb3cgdGhlIHRleHQgYmVjYXVzZSBvZiBrZXJu
aW5nIGFuZCBsaWdhdHVyZXMgYW5kIHRoZW4KLSAgICAvLyB3aGVuIGJpZGkgcHJvY2Vzc2luZyBz
cGxpdHMgaW50byBtdWx0aXBsZSBydW5zLCB0aGUgc2ltcGxlIHBvcnRpb25zIHdpbGwgZ2V0IHdp
ZGVyIGFuZCBjYXVzZSB1cyB0bwotICAgIC8vIHNwaWxsIG9mZiB0aGUgZWRnZSBvZiBhIGxpbmUp
LgotICAgIGlmIChzdGF0aWNfY2FzdDxpbnQ+KG9mZnNldCkgPiBtX2VuZCkKLSAgICAgICAgb2Zm
c2V0ID0gbV9lbmQ7Ci0KLSAgICBpbnQgbGVuZ3RoID0gb2Zmc2V0IC0gbV9jdXJyZW50Q2hhcmFj
dGVyOwotICAgIGlmIChsZW5ndGggPD0gMCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU3RyaW5n
IGJ1ZmZlckZvcjE2Qml0RGF0YTsKLQotICAgIC8vIEl0ZW1pemUgdGhlIHN0cmluZy4KLSAgICBj
b25zdCBVQ2hhciogY3AgPSBudWxscHRyOwotICAgIGlmIChtX3J1bi5pczhCaXQoKSkgewotICAg
ICAgICAvLyBVbmlzY3JpYmUgb25seSBkZWFscyB3aXRoIDE2LWJpdCBjaGFyYWN0ZXJzLiBNdXN0
IGdlbmVyYXRlIHRoZW0gbm93LgotICAgICAgICBidWZmZXJGb3IxNkJpdERhdGEgPSBTdHJpbmc6
Om1ha2UxNkJpdEZyb204Qml0U291cmNlKG1fcnVuLmRhdGE4KG1fY3VycmVudENoYXJhY3Rlciks
IGxlbmd0aCk7Ci0gICAgICAgIGNwID0gYnVmZmVyRm9yMTZCaXREYXRhLmNoYXJhY3RlcnMxNigp
OwotICAgIH0gZWxzZQotICAgICAgICBjcCA9IG1fcnVuLmRhdGExNihtX2N1cnJlbnRDaGFyYWN0
ZXIpOwotCi0gICAgdW5zaWduZWQgYmFzZUNoYXJhY3RlciA9IG1fY3VycmVudENoYXJhY3RlcjsK
LQotICAgIC8vIFdlIGJyZWFrIHVwIGl0ZW1pemF0aW9uIG9mIHRoZSBzdHJpbmcgYnkgZm9udERh
dGEgYW5kIChpZiBuZWVkZWQpIHRoZSB1c2Ugb2Ygc21hbGwgY2Fwcy4KLQotICAgIC8vIEZJWE1F
OiBJdCdzIGluY29uc2lzdGVudCB0aGF0IHdlIHVzZSBsb2dpY2FsIG9yZGVyIHdoZW4gaXRlbWl6
aW5nLCBzaW5jZSB0aGlzCi0gICAgLy8gZG9lcyBub3QgbWF0Y2ggbm9ybWFsIFJUTC4KLQotICAg
IC8vIEZJWE1FOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBkZWNvZGUgc3Vycm9nYXRlIHBhaXJzLiBD
dXJyZW50bHkgaXQgbWFrZXMgbGl0dGxlIGRpZmZlcmVuY2UgdGhhdAotICAgIC8vIGl0IGRvZXMg
bm90IGJlY2F1c2UgdGhlIGZvbnQgY2FjaGUgb24gV2luZG93cyBkb2VzIG5vdCBzdXBwb3J0IG5v
bi1CTVAgY2hhcmFjdGVycy4KLSAgICBWZWN0b3I8VUNoYXIsIDI1Nj4gc21hbGxDYXBzQnVmZmVy
OwotICAgIGlmIChtX2ZvbnQuaXNTbWFsbENhcHMoKSkKLSAgICAgICAgc21hbGxDYXBzQnVmZmVy
LnJlc2l6ZShsZW5ndGgpOwotCi0gICAgdW5zaWduZWQgaW5kZXhPZkZvbnRUcmFuc2l0aW9uID0g
bV9ydW4ucnRsKCkgPyBsZW5ndGggLSAxIDogMDsKLSAgICBjb25zdCBVQ2hhciogY3VyciA9IG1f
cnVuLnJ0bCgpID8gY3AgKyBsZW5ndGggIC0gMSA6IGNwOwotICAgIGNvbnN0IFVDaGFyKiBlbmQg
PSBtX3J1bi5ydGwoKSA/IGNwIC0gMSA6IGNwICsgbGVuZ3RoOwotCi0gICAgY29uc3QgRm9udCog
Zm9udERhdGE7Ci0gICAgY29uc3QgRm9udCogbmV4dEZvbnREYXRhID0gbV9mb250LmdseXBoRGF0
YUZvckNoYXJhY3RlcigqY3VyciwgZmFsc2UpLmZvbnQ7Ci0KLSAgICBVQ2hhciBuZXdDID0gMDsK
LQotICAgIGJvb2wgaXNTbWFsbENhcHM7Ci0gICAgYm9vbCBuZXh0SXNTbWFsbENhcHMgPSBtX2Zv
bnQuaXNTbWFsbENhcHMoKSAmJiAhKFVfR0VUX0dDX01BU0soKmN1cnIpICYgVV9HQ19NX01BU0sp
ICYmIChuZXdDID0gdV90b3VwcGVyKCpjdXJyKSkgIT0gKmN1cnI7Ci0KLSAgICBpZiAobmV4dElz
U21hbGxDYXBzKQotICAgICAgICBzbWFsbENhcHNCdWZmZXJbY3VyciAtIGNwXSA9IG5ld0M7Ci0K
LSAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICBjdXJyID0gbV9ydW4ucnRsKCkgPyBjdXJyIC0g
MSA6IGN1cnIgKyAxOwotICAgICAgICBpZiAoY3VyciA9PSBlbmQpCi0gICAgICAgICAgICBicmVh
azsKLQotICAgICAgICBmb250RGF0YSA9IG5leHRGb250RGF0YTsKLSAgICAgICAgaXNTbWFsbENh
cHMgPSBuZXh0SXNTbWFsbENhcHM7Ci0gICAgICAgIGludCBpbmRleCA9IGN1cnIgLSBjcDsKLSAg
ICAgICAgVUNoYXIgYyA9ICpjdXJyOwotCi0gICAgICAgIGJvb2wgZm9yY2VTbWFsbENhcHMgPSBp
c1NtYWxsQ2FwcyAmJiAoVV9HRVRfR0NfTUFTSyhjKSAmIFVfR0NfTV9NQVNLKTsKLSAgICAgICAg
bmV4dEZvbnREYXRhID0gbV9mb250LmdseXBoRGF0YUZvckNoYXJhY3RlcigqY3VyciwgZmFsc2Us
IGZvcmNlU21hbGxDYXBzID8gU21hbGxDYXBzVmFyaWFudCA6IEF1dG9WYXJpYW50KS5mb250Owot
ICAgICAgICBpZiAobV9mb250LmlzU21hbGxDYXBzKCkpIHsKLSAgICAgICAgICAgIG5leHRJc1Nt
YWxsQ2FwcyA9IGZvcmNlU21hbGxDYXBzIHx8IChuZXdDID0gdV90b3VwcGVyKGMpKSAhPSBjOwot
ICAgICAgICAgICAgaWYgKG5leHRJc1NtYWxsQ2FwcykKLSAgICAgICAgICAgICAgICBzbWFsbENh
cHNCdWZmZXJbaW5kZXhdID0gZm9yY2VTbWFsbENhcHMgPyBjIDogbmV3QzsKLSAgICAgICAgfQot
Ci0gICAgICAgIGlmIChtX2ZhbGxiYWNrRm9udHMgJiYgZm9udERhdGEgJiYgbmV4dEZvbnREYXRh
ICE9IGZvbnREYXRhICYmIGZvbnREYXRhICE9ICZtX2ZvbnQucHJpbWFyeUZvbnQoKSkKLSAgICAg
ICAgICAgIG1fZmFsbGJhY2tGb250cy0+YWRkKGZvbnREYXRhKTsKLQotICAgICAgICBpZiAobmV4
dEZvbnREYXRhICE9IGZvbnREYXRhIHx8IG5leHRJc1NtYWxsQ2FwcyAhPSBpc1NtYWxsQ2Fwcykg
ewotICAgICAgICAgICAgaW50IGl0ZW1TdGFydCA9IG1fcnVuLnJ0bCgpID8gaW5kZXggKyAxIDog
aW5kZXhPZkZvbnRUcmFuc2l0aW9uOwotICAgICAgICAgICAgaW50IGl0ZW1MZW5ndGggPSBtX3J1
bi5ydGwoKSA/IGluZGV4T2ZGb250VHJhbnNpdGlvbiAtIGluZGV4IDogaW5kZXggLSBpbmRleE9m
Rm9udFRyYW5zaXRpb247Ci0gICAgICAgICAgICBtX2N1cnJlbnRDaGFyYWN0ZXIgPSBiYXNlQ2hh
cmFjdGVyICsgaXRlbVN0YXJ0OwotICAgICAgICAgICAgaXRlbWl6ZVNoYXBlQW5kUGxhY2UoKGlz
U21hbGxDYXBzID8gc21hbGxDYXBzQnVmZmVyLmRhdGEoKSA6IGNwKSArIGl0ZW1TdGFydCwgaXRl
bVN0YXJ0LCBpdGVtTGVuZ3RoLCBmb250RGF0YSwgZ2x5cGhCdWZmZXIpOwotICAgICAgICAgICAg
aW5kZXhPZkZvbnRUcmFuc2l0aW9uID0gaW5kZXg7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0g
ICAgaW50IGl0ZW1MZW5ndGggPSBtX3J1bi5ydGwoKSA/IGluZGV4T2ZGb250VHJhbnNpdGlvbiAr
IDEgOiBsZW5ndGggLSBpbmRleE9mRm9udFRyYW5zaXRpb247Ci0gICAgaWYgKGl0ZW1MZW5ndGgp
IHsKLSAgICAgICAgaWYgKG1fZmFsbGJhY2tGb250cyAmJiBuZXh0Rm9udERhdGEgJiYgbmV4dEZv
bnREYXRhICE9ICZtX2ZvbnQucHJpbWFyeUZvbnQoKSkKLSAgICAgICAgICAgIG1fZmFsbGJhY2tG
b250cy0+YWRkKG5leHRGb250RGF0YSk7Ci0KLSAgICAgICAgaW50IGl0ZW1TdGFydCA9IG1fcnVu
LnJ0bCgpID8gMCA6IGluZGV4T2ZGb250VHJhbnNpdGlvbjsKLSAgICAgICAgbV9jdXJyZW50Q2hh
cmFjdGVyID0gYmFzZUNoYXJhY3RlciArIGl0ZW1TdGFydDsKLSAgICAgICAgaXRlbWl6ZVNoYXBl
QW5kUGxhY2UoKG5leHRJc1NtYWxsQ2FwcyA/IHNtYWxsQ2Fwc0J1ZmZlci5kYXRhKCkgOiBjcCkg
KyBpdGVtU3RhcnQsIGl0ZW1TdGFydCwgaXRlbUxlbmd0aCwgbmV4dEZvbnREYXRhLCBnbHlwaEJ1
ZmZlcik7Ci0gICAgfQotCi0gICAgbV9jdXJyZW50Q2hhcmFjdGVyID0gYmFzZUNoYXJhY3RlciAr
IGxlbmd0aDsKLX0KLQotdm9pZCBVbmlzY3JpYmVDb250cm9sbGVyOjppdGVtaXplU2hhcGVBbmRQ
bGFjZShjb25zdCBVQ2hhciogY3AsIHVuc2lnbmVkIHN0cmluZ09mZnNldCwgdW5zaWduZWQgbGVu
Z3RoLCBjb25zdCBGb250KiBmb250RGF0YSwgR2x5cGhCdWZmZXIqIGdseXBoQnVmZmVyKQotewot
ICAgIC8vIFNjcmlwdEl0ZW1pemUgKGluIFdpbmRvd3MgWFAgdmVyc2lvbnMgcHJpb3IgdG8gU1Ay
KSBjYW4gb3ZlcmZsb3cgYnkgMS4gIFRoaXMgaXMgd2h5IHRoZXJlIGlzIGFuIGV4dHJhIGVtcHR5
IGl0ZW0KLSAgICAvLyBoYW5naW5nIG91dCBhdCB0aGUgZW5kIG9mIHRoZSBhcnJheQotICAgIG1f
aXRlbXMucmVzaXplKDYpOwotICAgIGludCBudW1JdGVtcyA9IDA7Ci0gICAgSFJFU1VMVCByYyA9
IFNfT0s7Ci0gICAgd2hpbGUgKHJjID0gOjpTY3JpcHRJdGVtaXplKHdjaGFyRnJvbShjcCksIGxl
bmd0aCwgbV9pdGVtcy5zaXplKCkgLSAxLCAmbV9jb250cm9sLCAmbV9zdGF0ZSwgbV9pdGVtcy5k
YXRhKCksICZudW1JdGVtcykgPT0gRV9PVVRPRk1FTU9SWSkgewotICAgICAgICBtX2l0ZW1zLnJl
c2l6ZShtX2l0ZW1zLnNpemUoKSAqIDIpOwotICAgICAgICByZXNldENvbnRyb2xBbmRTdGF0ZSgp
OwotICAgIH0KLSAgICBpZiAoRkFJTEVEKHJjKSkgewotICAgICAgICBXVEZMb2dBbHdheXMoIlVu
aXNjcmliZUNvbnRyb2xsZXI6Oml0ZW1pemVTaGFwZUFuZFBsYWNlOiBTY3JpcHRJdGVtaXplIGZh
aWxlZCwgcmM9JWx4IiwgcmMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1faXRlbXMu
cmVzaXplKG51bUl0ZW1zICsgMSk7Ci0KLSAgICBpZiAobV9ydW4ucnRsKCkpIHsKLSAgICAgICAg
Zm9yIChpbnQgaSA9IG1faXRlbXMuc2l6ZSgpIC0gMjsgaSA+PSAwOyBpLS0pIHsKLSAgICAgICAg
ICAgIGlmICghc2hhcGVBbmRQbGFjZUl0ZW0oY3AsIHN0cmluZ09mZnNldCwgaSwgZm9udERhdGEs
IGdseXBoQnVmZmVyKSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9
IGVsc2UgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9pdGVtcy5zaXplKCkg
LSAxOyBpKyspIHsKLSAgICAgICAgICAgIGlmICghc2hhcGVBbmRQbGFjZUl0ZW0oY3AsIHN0cmlu
Z09mZnNldCwgaSwgZm9udERhdGEsIGdseXBoQnVmZmVyKSkKLSAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgVW5pc2NyaWJlQ29udHJvbGxlcjo6cmVz
ZXRDb250cm9sQW5kU3RhdGUoKQotewotICAgIG1lbXNldCgmbV9jb250cm9sLCAwLCBzaXplb2Yo
U0NSSVBUX0NPTlRST0wpKTsKLSAgICBtZW1zZXQoJm1fc3RhdGUsIDAsIHNpemVvZihTQ1JJUFRf
U1RBVEUpKTsKLQotICAgIC8vIFNldCB1cCB0aGUgY29ycmVjdCBkaXJlY3Rpb24gZm9yIHRoZSBy
dW4uCi0gICAgbV9zdGF0ZS51QmlkaUxldmVsID0gbV9ydW4ucnRsKCk7Ci0gICAgCi0gICAgLy8g
TG9jayB0aGUgY29ycmVjdCBkaXJlY3Rpb25hbCBvdmVycmlkZS4KLSAgICBtX3N0YXRlLmZPdmVy
cmlkZURpcmVjdGlvbiA9IG1fcnVuLmRpcmVjdGlvbmFsT3ZlcnJpZGUoKTsKLX0KLQotYm9vbCBV
bmlzY3JpYmVDb250cm9sbGVyOjpzaGFwZUFuZFBsYWNlSXRlbShjb25zdCBVQ2hhciogY3AsIHVu
c2lnbmVkIHN0cmluZ09mZnNldCwgdW5zaWduZWQgaSwgY29uc3QgRm9udCogZm9udERhdGEsIEds
eXBoQnVmZmVyKiBnbHlwaEJ1ZmZlcikKLXsKLSAgICAvLyBEZXRlcm1pbmUgdGhlIHN0cmluZyBm
b3IgdGhpcyBpdGVtLgotICAgIGNvbnN0IFVDaGFyKiBzdHIgPSBjcCArIG1faXRlbXNbaV0uaUNo
YXJQb3M7Ci0gICAgaW50IGxlbiA9IG1faXRlbXNbaSsxXS5pQ2hhclBvcyAtIG1faXRlbXNbaV0u
aUNoYXJQb3M7Ci0gICAgU0NSSVBUX0lURU0gaXRlbSA9IG1faXRlbXNbaV07Ci0KLSAgICAvLyBT
ZXQgdXAgYnVmZmVycyB0byBob2xkIHRoZSByZXN1bHRzIG9mIHNoYXBpbmcgdGhlIGl0ZW0uCi0g
ICAgVmVjdG9yPFdPUkQ+IGdseXBoczsKLSAgICBWZWN0b3I8V09SRD4gY2x1c3RlcnM7Ci0gICAg
VmVjdG9yPFNDUklQVF9WSVNBVFRSPiB2aXN1YWxBdHRyaWJ1dGVzOwotICAgIGNsdXN0ZXJzLnJl
c2l6ZShsZW4pOwotICAgICAKLSAgICAvLyBTaGFwZSB0aGUgaXRlbS4KLSAgICAvLyBUaGUgcmVj
b21tZW5kZWQgc2l6ZSBmb3IgdGhlIGdseXBoIGJ1ZmZlciBpcyAxLjUgKiB0aGUgY2hhcmFjdGVy
IGxlbmd0aCArIDE2IGluIHRoZSB1bmlzY3JpYmUgZG9jcy4KLSAgICAvLyBBcHBhcmVudGx5IHRo
aXMgaXMgYSBnb29kIHNpemUgdG8gYXZvaWQgaGF2aW5nIHRvIG1ha2UgcmVwZWF0ZWQgY2FsbHMg
dG8gU2NyaXB0U2hhcGUuCi0gICAgZ2x5cGhzLnJlc2l6ZSgxLjUgKiBsZW4gKyAxNik7Ci0gICAg
dmlzdWFsQXR0cmlidXRlcy5yZXNpemUoZ2x5cGhzLnNpemUoKSk7Ci0KLSAgICBpZiAoIXNoYXBl
KHN0ciwgbGVuLCBpdGVtLCBmb250RGF0YSwgZ2x5cGhzLCBjbHVzdGVycywgdmlzdWFsQXR0cmli
dXRlcykpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgVmVjdG9yPE9wdGlvbmFsPHVuc2ln
bmVkPj4gc3RyaW5nT2Zmc2V0cyhnbHlwaHMuc2l6ZSgpKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbGVuOyArK2kpIHsKLSAgICAgICAgaWYgKHN0cmluZ09mZnNldHNbY2x1c3RlcnNb
aV1dKQotICAgICAgICAgICAgc3RyaW5nT2Zmc2V0c1tjbHVzdGVyc1tpXV0gPSBzdGQ6Om1pbigq
c3RyaW5nT2Zmc2V0c1tjbHVzdGVyc1tpXV0sIGkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBzdHJpbmdPZmZzZXRzW2NsdXN0ZXJzW2ldXSA9IGk7Ci0gICAgfQotCi0gICAgLy8gV2Ugbm93
IGhhdmUgYSBjb2xsZWN0aW9uIG9mIGdseXBocy4KLSAgICBWZWN0b3I8R09GRlNFVD4gb2Zmc2V0
czsKLSAgICBWZWN0b3I8aW50PiBhZHZhbmNlczsKLSAgICBvZmZzZXRzLnJlc2l6ZShnbHlwaHMu
c2l6ZSgpKTsKLSAgICBhZHZhbmNlcy5yZXNpemUoZ2x5cGhzLnNpemUoKSk7Ci0gICAgSFJFU1VM
VCBwbGFjZVJlc3VsdCA9IFNjcmlwdFBsYWNlKDAsIGZvbnREYXRhLT5zY3JpcHRDYWNoZSgpLCBn
bHlwaHMuZGF0YSgpLCBnbHlwaHMuc2l6ZSgpLCB2aXN1YWxBdHRyaWJ1dGVzLmRhdGEoKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJml0ZW0uYSwgYWR2YW5jZXMuZGF0
YSgpLCBvZmZzZXRzLmRhdGEoKSwgMCk7Ci0gICAgaWYgKHBsYWNlUmVzdWx0ID09IEVfUEVORElO
RykgewotICAgICAgICAvLyBUaGUgc2NyaXB0IGNhY2hlIGlzbid0IHByaW1lZCB3aXRoIGVub3Vn
aCBpbmZvIHlldC4gIFdlIG5lZWQgdG8gc2VsZWN0IG91ciBIRk9OVCBpbnRvCi0gICAgICAgIC8v
IGEgREMgYW5kIHBhc3MgdGhlIERDIGluIHRvIFNjcmlwdFBsYWNlLgotICAgICAgICBIV25kREMg
aGRjKDApOwotICAgICAgICBIRk9OVCBoZm9udCA9IGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5o
Zm9udCgpOwotICAgICAgICBIRk9OVCBvbGRGb250ID0gKEhGT05UKVNlbGVjdE9iamVjdChoZGMs
IGhmb250KTsKLSAgICAgICAgcGxhY2VSZXN1bHQgPSBTY3JpcHRQbGFjZShoZGMsIGZvbnREYXRh
LT5zY3JpcHRDYWNoZSgpLCBnbHlwaHMuZGF0YSgpLCBnbHlwaHMuc2l6ZSgpLCB2aXN1YWxBdHRy
aWJ1dGVzLmRhdGEoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaXRlbS5h
LCBhZHZhbmNlcy5kYXRhKCksIG9mZnNldHMuZGF0YSgpLCAwKTsKLSAgICAgICAgU2VsZWN0T2Jq
ZWN0KGhkYywgb2xkRm9udCk7Ci0gICAgfQotICAgIAotICAgIGlmIChGQUlMRUQocGxhY2VSZXN1
bHQpIHx8IGdseXBocy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8g
Q29udmVydCBhbGwgY2hhcnMgdGhhdCBzaG91bGQgYmUgdHJlYXRlZCBhcyBzcGFjZXMgdG8gdXNl
IHRoZSBzcGFjZSBnbHlwaC4KLSAgICAvLyBXZSBhbHNvIGNyZWF0ZSBhIG1hcCB0aGF0IGFsbG93
cyB1cyB0byBxdWlja2x5IGdvIGZyb20gc3BhY2UgZ2x5cGhzIGJhY2sgdG8gdGhlaXIgY29ycmVz
cG9uZGluZyBjaGFyYWN0ZXJzLgotICAgIFZlY3RvcjxpbnQ+IHNwYWNlQ2hhcmFjdGVycyhnbHlw
aHMuc2l6ZSgpKTsKLSAgICBzcGFjZUNoYXJhY3RlcnMuZmlsbCgtMSk7Ci0KLSAgICBjb25zdCBm
bG9hdCBjTG9naWNhbFNjYWxlID0gZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLnVzZUdESSgpID8g
MS4wZiA6IDMyLjBmOwotICAgIGZsb2F0IHNwYWNlV2lkdGggPSBmb250RGF0YS0+c3BhY2VXaWR0
aCgpIC0gZm9udERhdGEtPnN5bnRoZXRpY0JvbGRPZmZzZXQoKTsKLSAgICB1bnNpZ25lZCBsb2dp
Y2FsU3BhY2VXaWR0aCA9IHNwYWNlV2lkdGggKiBjTG9naWNhbFNjYWxlOwotCi0gICAgZm9yIChp
bnQgayA9IDA7IGsgPCBsZW47IGsrKykgewotICAgICAgICBVQ2hhciBjaCA9ICooc3RyICsgayk7
Ci0gICAgICAgIGJvb2wgdHJlYXRBc1NwYWNlID0gRm9udENhc2NhZGU6OnRyZWF0QXNTcGFjZShj
aCk7Ci0gICAgICAgIGJvb2wgdHJlYXRBc1plcm9XaWR0aFNwYWNlID0gRm9udENhc2NhZGU6OnRy
ZWF0QXNaZXJvV2lkdGhTcGFjZShjaCk7Ci0gICAgICAgIGlmICh0cmVhdEFzU3BhY2UgfHwgdHJl
YXRBc1plcm9XaWR0aFNwYWNlKSB7Ci0gICAgICAgICAgICAvLyBTdWJzdGl0dXRlIGluIHRoZSBz
cGFjZSBnbHlwaCBhdCB0aGUgYXBwcm9wcmlhdGUgcGxhY2UgaW4gdGhlIGdseXBocwotICAgICAg
ICAgICAgLy8gYXJyYXkuCi0gICAgICAgICAgICBnbHlwaHNbY2x1c3RlcnNba11dID0gZm9udERh
dGEtPnNwYWNlR2x5cGgoKTsKLSAgICAgICAgICAgIGFkdmFuY2VzW2NsdXN0ZXJzW2tdXSA9IHRy
ZWF0QXNTcGFjZSA/IGxvZ2ljYWxTcGFjZVdpZHRoIDogMDsKLSAgICAgICAgICAgIGlmICh0cmVh
dEFzU3BhY2UpCi0gICAgICAgICAgICAgICAgc3BhY2VDaGFyYWN0ZXJzW2NsdXN0ZXJzW2tdXSA9
IG1fY3VycmVudENoYXJhY3RlciArIGsgKyBpdGVtLmlDaGFyUG9zOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgLy8gUG9wdWxhdGUgb3VyIGdseXBoIGJ1ZmZlciB3aXRoIHRoaXMgaW5mb3JtYXRp
b24uCi0gICAgYm9vbCBoYXNFeHRyYVNwYWNpbmcgPSBtX2ZvbnQubGV0dGVyU3BhY2luZygpIHx8
IG1fZm9udC53b3JkU3BhY2luZygpIHx8IG1fcGFkZGluZzsKLSAgICAKLSAgICBmbG9hdCBsZWZ0
RWRnZSA9IG1fcnVuV2lkdGhTb0ZhcjsKLQotICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBn
bHlwaHMuc2l6ZSgpOyBrKyspIHsKLSAgICAgICAgR2x5cGggZ2x5cGggPSBnbHlwaHNba107Ci0g
ICAgICAgIGZsb2F0IGFkdmFuY2UgPSBhZHZhbmNlc1trXSAvIGNMb2dpY2FsU2NhbGU7Ci0gICAg
ICAgIGZsb2F0IG9mZnNldFggPSBvZmZzZXRzW2tdLmR1IC8gY0xvZ2ljYWxTY2FsZTsKLSAgICAg
ICAgZmxvYXQgb2Zmc2V0WSA9IG9mZnNldHNba10uZHYgLyBjTG9naWNhbFNjYWxlOwotCi0gICAg
ICAgIC8vIE1hdGNoIEFwcEtpdCdzIHJ1bGVzIGZvciB0aGUgaW50ZWdlciB2cy4gbm9uLWludGVn
ZXIgcmVuZGVyaW5nIG1vZGVzLgotICAgICAgICBmbG9hdCByb3VuZGVkQWR2YW5jZSA9IHJvdW5k
ZihhZHZhbmNlKTsKLSAgICAgICAgaWYgKCFmb250RGF0YS0+cGxhdGZvcm1EYXRhKCkuaXNTeXN0
ZW1Gb250KCkpIHsKLSAgICAgICAgICAgIGFkdmFuY2UgPSByb3VuZGVkQWR2YW5jZTsKLSAgICAg
ICAgICAgIG9mZnNldFggPSByb3VuZGYob2Zmc2V0WCk7Ci0gICAgICAgICAgICBvZmZzZXRZID0g
cm91bmRmKG9mZnNldFkpOwotICAgICAgICB9Ci0KLSAgICAgICAgYWR2YW5jZSArPSBmb250RGF0
YS0+c3ludGhldGljQm9sZE9mZnNldCgpOwotCi0gICAgICAgIGlmIChoYXNFeHRyYVNwYWNpbmcp
IHsKLSAgICAgICAgICAgIC8vIElmIHdlJ3JlIGEgZ2x5cGggd2l0aCBhbiBhZHZhbmNlLCBnbyBh
aGVhZCBhbmQgYWRkIGluIGxldHRlci1zcGFjaW5nLgotICAgICAgICAgICAgLy8gVGhhdCB3YXkg
d2Ugd2VlZCBvdXQgemVybyB3aWR0aCBsdXJrZXJzLiAgVGhpcyBiZWhhdmlvciBtYXRjaGVzIHRo
ZSBmYXN0IHRleHQgY29kZSBwYXRoLgotICAgICAgICAgICAgaWYgKGFkdmFuY2UgJiYgbV9mb250
LmxldHRlclNwYWNpbmcoKSkKLSAgICAgICAgICAgICAgICBhZHZhbmNlICs9IG1fZm9udC5sZXR0
ZXJTcGFjaW5nKCk7Ci0KLSAgICAgICAgICAgIC8vIEhhbmRsZSBqdXN0aWZpY2F0aW9uIGFuZCB3
b3JkLXNwYWNpbmcuCi0gICAgICAgICAgICBpbnQgY2hhcmFjdGVySW5kZXggPSBzcGFjZUNoYXJh
Y3RlcnNba107Ci0gICAgICAgICAgICAvLyBjaGFyYWN0ZXJJbmRleCBpcyBsZWZ0IGF0IHRoZSBp
bml0aWFsIHZhbHVlIG9mIC0xIGZvciBnbHlwaHMgdGhhdCBkbyBub3QgbWFwIGJhY2sgdG8gdHJl
YXRlZC1hcy1zcGFjZSBjaGFyYWN0ZXJzLgotICAgICAgICAgICAgaWYgKGNoYXJhY3RlckluZGV4
ICE9IC0xKSB7Ci0gICAgICAgICAgICAgICAgLy8gQWNjb3VudCBmb3IgcGFkZGluZy4gV2ViQ29y
ZSB1c2VzIHNwYWNlIHBhZGRpbmcgdG8ganVzdGlmeSB0ZXh0LgotICAgICAgICAgICAgICAgIC8v
IFdlIGRpc3RyaWJ1dGUgdGhlIHNwZWNpZmllZCBwYWRkaW5nIG92ZXIgdGhlIGF2YWlsYWJsZSBz
cGFjZXMgaW4gdGhlIHJ1bi4KLSAgICAgICAgICAgICAgICBpZiAobV9wYWRkaW5nKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIC8vIFVzZSBsZWZ0b3ZlciBwYWRkaW5nIGlmIG5vdCBldmVubHkgZGl2
aXNpYmxlIGJ5IG51bWJlciBvZiBzcGFjZXMuCi0gICAgICAgICAgICAgICAgICAgIGlmIChtX3Bh
ZGRpbmcgPCBtX3BhZFBlclNwYWNlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhZHZhbmNl
ICs9IG1fcGFkZGluZzsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fcGFkZGluZyA9IDA7Ci0g
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX3Bh
ZGRpbmcgLT0gbV9wYWRQZXJTcGFjZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkdmFuY2Ug
Kz0gbV9wYWRQZXJTcGFjZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgIC8vIEFjY291bnQgZm9yIHdvcmQtc3BhY2luZy4KLSAgICAg
ICAgICAgICAgICBpZiAoY2hhcmFjdGVySW5kZXggPiAwICYmIG1fZm9udC53b3JkU3BhY2luZygp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIFVDaGFyIGNhbmRpZGF0ZVNwYWNlOwotICAgICAgICAg
ICAgICAgICAgICBpZiAobV9ydW4uaXM4Qml0KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBj
YW5kaWRhdGVTcGFjZSA9ICoobV9ydW4uZGF0YTgoY2hhcmFjdGVySW5kZXggLSAxKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZVNw
YWNlID0gKihtX3J1bi5kYXRhMTYoY2hhcmFjdGVySW5kZXggLSAxKSk7Ci0KLSAgICAgICAgICAg
ICAgICAgICAgaWYgKCFGb250Q2FzY2FkZTo6dHJlYXRBc1NwYWNlKGNhbmRpZGF0ZVNwYWNlKSkK
LSAgICAgICAgICAgICAgICAgICAgICAgIGFkdmFuY2UgKz0gbV9mb250LndvcmRTcGFjaW5nKCk7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAg
bV9ydW5XaWR0aFNvRmFyICs9IGFkdmFuY2U7Ci0KLSAgICAgICAgLy8gRklYTUU6IFdlIG5lZWQg
dG8gdGFrZSB0aGUgR09GRlNFVFMgZm9yIGNvbWJpbmluZyBnbHlwaHMgYW5kIHN0b3JlIHRoZW0g
aW4gdGhlIGdseXBoIGJ1ZmZlcgotICAgICAgICAvLyBhcyB3ZWxsLCBzbyB0aGF0IHdoZW4gdGhl
IHRpbWUgY29tZXMgdG8gZHJhdyB0aG9zZSBnbHlwaHMsIHdlIGNhbiBhcHBseSB0aGUgYXBwcm9w
cmlhdGUKLSAgICAgICAgLy8gdHJhbnNsYXRpb24uCi0gICAgICAgIGlmIChnbHlwaEJ1ZmZlcikg
ewotICAgICAgICAgICAgR2x5cGhCdWZmZXJBZHZhbmNlIG9yaWdpbihvZmZzZXRYLCAtb2Zmc2V0
WSk7Ci0gICAgICAgICAgICBpZiAoIWdseXBoQnVmZmVyLT5hZHZhbmNlc0NvdW50KCkpCi0gICAg
ICAgICAgICAgICAgZ2x5cGhCdWZmZXItPnNldEluaXRpYWxBZHZhbmNlKG9yaWdpbik7Ci0gICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZ2x5cGhCdWZmZXItPmV4cGFuZExhc3RBZHZh
bmNlKG9yaWdpbik7Ci0gICAgICAgICAgICBHbHlwaEJ1ZmZlckFkdmFuY2UgZ2x5cGhBZHZhbmNl
KC1vcmlnaW4ud2lkdGgoKSArIGFkdmFuY2UsIC1vcmlnaW4uaGVpZ2h0KCkpOwotICAgICAgICAg
ICAgZ2x5cGhCdWZmZXItPmFkZChnbHlwaCwgZm9udERhdGEsIGdseXBoQWR2YW5jZSwgc3RyaW5n
T2Zmc2V0c1trXS52YWx1ZU9yKDApICsgc3RyaW5nT2Zmc2V0KTsKLSAgICAgICAgfQotCi0gICAg
ICAgIEZsb2F0UmVjdCBnbHlwaEJvdW5kcyA9IGZvbnREYXRhLT5ib3VuZHNGb3JHbHlwaChnbHlw
aCk7Ci0gICAgICAgIGdseXBoQm91bmRzLm1vdmUobV9nbHlwaE9yaWdpbi54KCksIG1fZ2x5cGhP
cmlnaW4ueSgpKTsKLSAgICAgICAgbV9taW5HbHlwaEJvdW5kaW5nQm94WCA9IHN0ZDo6bWluKG1f
bWluR2x5cGhCb3VuZGluZ0JveFgsIGdseXBoQm91bmRzLngoKSk7Ci0gICAgICAgIG1fbWF4R2x5
cGhCb3VuZGluZ0JveFggPSBzdGQ6Om1heChtX21heEdseXBoQm91bmRpbmdCb3hYLCBnbHlwaEJv
dW5kcy5tYXhYKCkpOwotICAgICAgICBtX21pbkdseXBoQm91bmRpbmdCb3hZID0gc3RkOjptaW4o
bV9taW5HbHlwaEJvdW5kaW5nQm94WSwgZ2x5cGhCb3VuZHMueSgpKTsKLSAgICAgICAgbV9tYXhH
bHlwaEJvdW5kaW5nQm94WSA9IHN0ZDo6bWF4KG1fbWF4R2x5cGhCb3VuZGluZ0JveFksIGdseXBo
Qm91bmRzLm1heFkoKSk7Ci0gICAgICAgIG1fZ2x5cGhPcmlnaW4ubW92ZShhZHZhbmNlICsgb2Zm
c2V0WCwgLW9mZnNldFkpOwotCi0gICAgICAgIC8vIE11dGF0ZSB0aGUgZ2x5cGggYXJyYXkgdG8g
Y29udGFpbiBvdXIgYWx0ZXJlZCBhZHZhbmNlcy4KLSAgICAgICAgaWYgKG1fY29tcHV0aW5nT2Zm
c2V0UG9zaXRpb24pCi0gICAgICAgICAgICBhZHZhbmNlc1trXSA9IGFkdmFuY2U7Ci0gICAgfQot
Ci0gICAgd2hpbGUgKG1fY29tcHV0aW5nT2Zmc2V0UG9zaXRpb24gJiYgbV9vZmZzZXRYID49IGxl
ZnRFZGdlICYmIG1fb2Zmc2V0WCA8IG1fcnVuV2lkdGhTb0ZhcikgewotICAgICAgICAvLyBUaGUg
cG9zaXRpb24gaXMgc29tZXdoZXJlIGluc2lkZSB0aGlzIHJ1bi4KLSAgICAgICAgaW50IHRyYWls
aW5nID0gMDsKLSAgICAgICAgSFJFU1VMVCByYyA9IDo6U2NyaXB0WHRvQ1AobV9vZmZzZXRYIC0g
bGVmdEVkZ2UsIGNsdXN0ZXJzLnNpemUoKSwgZ2x5cGhzLnNpemUoKSwgY2x1c3RlcnMuZGF0YSgp
LCB2aXN1YWxBdHRyaWJ1dGVzLmRhdGEoKSwKLSAgICAgICAgICAgICAgICAgICAgYWR2YW5jZXMu
ZGF0YSgpLCAmaXRlbS5hLCAmbV9vZmZzZXRQb3NpdGlvbiwgJnRyYWlsaW5nKTsKLSAgICAgICAg
aWYgKEZBSUxFRChyYykpIHsKLSAgICAgICAgICAgIFdURkxvZ0Fsd2F5cygiVW5pc2NyaWJlQ29u
dHJvbGxlcjo6c2hhcGVBbmRQbGFjZUl0ZW06IFNjcmlwdFh0b0NQIGZhaWxlZCByYz0lbHgiLCBy
Yyk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAodHJh
aWxpbmcgJiYgbV9pbmNsdWRlUGFydGlhbEdseXBocyAmJiBtX29mZnNldFBvc2l0aW9uIDwgbGVu
IC0gMSkgewotICAgICAgICAgICAgbV9vZmZzZXRQb3NpdGlvbiArPSBtX2N1cnJlbnRDaGFyYWN0
ZXIgKyBtX2l0ZW1zW2ldLmlDaGFyUG9zOwotICAgICAgICAgICAgbV9vZmZzZXRYICs9IG1fcnVu
LnJ0bCgpID8gLXRyYWlsaW5nIDogdHJhaWxpbmc7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBtX2NvbXB1dGluZ09mZnNldFBvc2l0aW9uID0gZmFsc2U7Ci0gICAgICAgICAgICBtX29m
ZnNldFBvc2l0aW9uICs9IG1fY3VycmVudENoYXJhY3RlciArIG1faXRlbXNbaV0uaUNoYXJQb3M7
Ci0gICAgICAgICAgICBpZiAodHJhaWxpbmcgJiYgbV9pbmNsdWRlUGFydGlhbEdseXBocykKLSAg
ICAgICAgICAgICAgIG1fb2Zmc2V0UG9zaXRpb24rKzsKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFVuaXNj
cmliZUNvbnRyb2xsZXI6OnNoYXBlKGNvbnN0IFVDaGFyKiBzdHIsIGludCBsZW4sIFNDUklQVF9J
VEVNIGl0ZW0sIGNvbnN0IEZvbnQqIGZvbnREYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBWZWN0b3I8V09SRD4mIGdseXBocywgVmVjdG9yPFdPUkQ+JiBjbHVzdGVycywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPFNDUklQVF9WSVNBVFRSPiYgdmlz
dWFsQXR0cmlidXRlcykKLXsKLSAgICBIV25kREMgaGRjOwotICAgIEhGT05UIG9sZEZvbnQgPSAw
OwotICAgIEhSRVNVTFQgc2hhcGVSZXN1bHQgPSBFX1BFTkRJTkc7Ci0gICAgaW50IGdseXBoQ291
bnQgPSAwOwotCi0gICAgaWYgKCFmb250RGF0YSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgZG8gewotICAgICAgICBzaGFwZVJlc3VsdCA9IFNjcmlwdFNoYXBlKGhkYywgZm9udERhdGEt
PnNjcmlwdENhY2hlKCksIHdjaGFyRnJvbShzdHIpLCBsZW4sIGdseXBocy5zaXplKCksICZpdGVt
LmEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhzLmRhdGEoKSwgY2x1
c3RlcnMuZGF0YSgpLCB2aXN1YWxBdHRyaWJ1dGVzLmRhdGEoKSwgJmdseXBoQ291bnQpOwotICAg
ICAgICBpZiAoc2hhcGVSZXN1bHQgPT0gRV9QRU5ESU5HKSB7Ci0gICAgICAgICAgICAvLyBUaGUg
c2NyaXB0IGNhY2hlIGlzbid0IHByaW1lZCB3aXRoIGVub3VnaCBpbmZvIHlldC4gIFdlIG5lZWQg
dG8gc2VsZWN0IG91ciBIRk9OVCBpbnRvCi0gICAgICAgICAgICAvLyBhIERDIGFuZCBwYXNzIHRo
ZSBEQyBpbiB0byBTY3JpcHRTaGFwZS4KLSAgICAgICAgICAgIEFTU0VSVCghaGRjKTsKLSAgICAg
ICAgICAgIGhkYy5zZXRIV25kKDApOwotICAgICAgICAgICAgSEZPTlQgaGZvbnQgPSBmb250RGF0
YS0+cGxhdGZvcm1EYXRhKCkuaGZvbnQoKTsKLSAgICAgICAgICAgIG9sZEZvbnQgPSAoSEZPTlQp
U2VsZWN0T2JqZWN0KGhkYywgaGZvbnQpOwotICAgICAgICB9IGVsc2UgaWYgKHNoYXBlUmVzdWx0
ID09IEVfT1VUT0ZNRU1PUlkpIHsKLSAgICAgICAgICAgIC8vIE5lZWQgdG8gcmVzaXplIG91ciBi
dWZmZXJzLgotICAgICAgICAgICAgZ2x5cGhzLnJlc2l6ZShnbHlwaHMuc2l6ZSgpICogMik7Ci0g
ICAgICAgICAgICB2aXN1YWxBdHRyaWJ1dGVzLnJlc2l6ZShnbHlwaHMuc2l6ZSgpKTsKLSAgICAg
ICAgfQotICAgIH0gd2hpbGUgKHNoYXBlUmVzdWx0ID09IEVfUEVORElORyB8fCBzaGFwZVJlc3Vs
dCA9PSBFX09VVE9GTUVNT1JZKTsKLQotICAgIGlmIChoZGMpCi0gICAgICAgIFNlbGVjdE9iamVj
dChoZGMsIG9sZEZvbnQpOwotCi0gICAgaWYgKEZBSUxFRChzaGFwZVJlc3VsdCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIGdseXBocy5zaHJpbmsoZ2x5cGhDb3VudCk7Ci0gICAgdmlz
dWFsQXR0cmlidXRlcy5zaHJpbmsoZ2x5cGhDb3VudCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1Vu
aXNjcmliZUNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9VbmlzY3JpYmVDb250cm9sbGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0
NjI0Yzc5YTA4Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vVW5pc2NyaWJlQ29udHJvbGxlci5oCisrKyAvZGV2L251bGwKQEAgLTEsOTAgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgVW5pc2NyaWJlQ29u
dHJvbGxlcl9oCi0jZGVmaW5lIFVuaXNjcmliZUNvbnRyb2xsZXJfaAotCi0jaW5jbHVkZSAiRm9u
dENhc2NhZGUuaCIKLSNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgotI2luY2x1ZGUgPHVzcDEwLmg+
Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNz
IFVuaXNjcmliZUNvbnRyb2xsZXIgewotcHVibGljOgotICAgIFVuaXNjcmliZUNvbnRyb2xsZXIo
Y29uc3QgRm9udENhc2NhZGUqLCBjb25zdCBUZXh0UnVuJiwgSGFzaFNldDxjb25zdCBGb250Kj4q
IGZhbGxiYWNrRm9udHMgPSAwKTsKLQotICAgIC8vIEFkdmFuY2UgYW5kIG1lYXN1cmUvcGxhY2Ug
dXAgdG8gdGhlIHNwZWNpZmllZCBjaGFyYWN0ZXIuCi0gICAgdm9pZCBhZHZhbmNlKHVuc2lnbmVk
IHRvLCBHbHlwaEJ1ZmZlciogPSAwKTsKLQotICAgIC8vIENvbXB1dGUgdGhlIGNoYXJhY3RlciBv
ZmZzZXQgZm9yIGEgZ2l2ZW4geCBjb29yZGluYXRlLgotICAgIGludCBvZmZzZXRGb3JQb3NpdGlv
bihpbnQgeCwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocyk7Ci0KLSAgICAvLyBSZXR1cm5zIHRo
ZSB3aWR0aCBvZiBldmVyeXRoaW5nIHdlJ3ZlIGNvbnN1bWVkIHNvIGZhci4KLSAgICBmbG9hdCBy
dW5XaWR0aFNvRmFyKCkgY29uc3QgeyByZXR1cm4gbV9ydW5XaWR0aFNvRmFyOyB9Ci0KLSAgICBm
bG9hdCBtaW5HbHlwaEJvdW5kaW5nQm94WCgpIGNvbnN0IHsgcmV0dXJuIG1fbWluR2x5cGhCb3Vu
ZGluZ0JveFg7IH0KLSAgICBmbG9hdCBtYXhHbHlwaEJvdW5kaW5nQm94WCgpIGNvbnN0IHsgcmV0
dXJuIG1fbWF4R2x5cGhCb3VuZGluZ0JveFg7IH0KLSAgICBmbG9hdCBtaW5HbHlwaEJvdW5kaW5n
Qm94WSgpIGNvbnN0IHsgcmV0dXJuIG1fbWluR2x5cGhCb3VuZGluZ0JveFk7IH0KLSAgICBmbG9h
dCBtYXhHbHlwaEJvdW5kaW5nQm94WSgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4R2x5cGhCb3VuZGlu
Z0JveFk7IH0KLQotcHJpdmF0ZTogICAgCi0gICAgdm9pZCByZXNldENvbnRyb2xBbmRTdGF0ZSgp
OwotCi0gICAgdm9pZCBpdGVtaXplU2hhcGVBbmRQbGFjZShjb25zdCBVQ2hhciosIHVuc2lnbmVk
IHN0cmluZ09mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBGb250KiwgR2x5cGhCdWZmZXIq
KTsKLSAgICBib29sIHNoYXBlQW5kUGxhY2VJdGVtKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQgc3Ry
aW5nT2Zmc2V0LCB1bnNpZ25lZCBpbmRleCwgY29uc3QgRm9udCosIEdseXBoQnVmZmVyKik7Ci0g
ICAgYm9vbCBzaGFwZShjb25zdCBVQ2hhciogc3RyLCBpbnQgbGVuLCBTQ1JJUFRfSVRFTSwgY29u
c3QgRm9udCosCi0gICAgICAgICAgICAgICBWZWN0b3I8V09SRD4mIGdseXBocywgVmVjdG9yPFdP
UkQ+JiBjbHVzdGVycywKLSAgICAgICAgICAgICAgIFZlY3RvcjxTQ1JJUFRfVklTQVRUUj4mIHZp
c3VhbEF0dHJpYnV0ZXMpOwotCi0gICAgY29uc3QgRm9udENhc2NhZGUmIG1fZm9udDsKLSAgICBj
b25zdCBUZXh0UnVuJiBtX3J1bjsKLSAgICBIYXNoU2V0PGNvbnN0IEZvbnQqPiogbV9mYWxsYmFj
a0ZvbnRzOwotICAgIEZsb2F0UG9pbnQgbV9nbHlwaE9yaWdpbjsKLSAgICBmbG9hdCBtX21pbkds
eXBoQm91bmRpbmdCb3hYOwotICAgIGZsb2F0IG1fbWF4R2x5cGhCb3VuZGluZ0JveFg7Ci0gICAg
ZmxvYXQgbV9taW5HbHlwaEJvdW5kaW5nQm94WTsKLSAgICBmbG9hdCBtX21heEdseXBoQm91bmRp
bmdCb3hZOwotCi0gICAgU0NSSVBUX0NPTlRST0wgbV9jb250cm9sOwotICAgIFNDUklQVF9TVEFU
RSBtX3N0YXRlOwotICAgIFZlY3RvcjxTQ1JJUFRfSVRFTT4gbV9pdGVtczsKLSAKLSAgICB1bnNp
Z25lZCBtX2N1cnJlbnRDaGFyYWN0ZXI7Ci0gICAgaW50IG1fZW5kOwotCi0gICAgZmxvYXQgbV9y
dW5XaWR0aFNvRmFyOwotICAgIGZsb2F0IG1fcGFkZGluZzsKLSAgICBmbG9hdCBtX3BhZFBlclNw
YWNlOwotCi0gICAgYm9vbCBtX2NvbXB1dGluZ09mZnNldFBvc2l0aW9uOwotICAgIGJvb2wgbV9p
bmNsdWRlUGFydGlhbEdseXBoczsKLSAgICBmbG9hdCBtX29mZnNldFg7Ci0gICAgaW50IG1fb2Zm
c2V0UG9zaXRpb247Ci19OwotCi19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViQ29yZS9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAKaW5kZXgg
OTNmZTkwZTlkOWQuLjkyNjhlZmI2ODNiIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYkNvcmUvQ29tcGxleFRleHRDb250cm9sbGVyLmNwcAorKysgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29tcGxleFRleHRDb250cm9sbGVyLmNwcApAQCAtMjUs
OCArMjUsNiBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKLSNpZiAhUExBVEZPUk0oV0lOKQot
CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5pdGlhbGl6ZVRocmVhZGluZy5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvQ29tcGxleFRleHRDb250cm9sbGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9G
b250Q2FzY2FkZS5oPgpAQCAtMzY3LDUgKzM2NSwzIEBAIFRFU1RfRihDb21wbGV4VGV4dENvbnRy
b2xsZXJUZXN0LCBUb3RhbFdpZHRoV2l0aEp1c3RpZmljYXRpb24pCiB9CiAKIH0KLQotI2VuZGlm
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>386184</attachid>
            <date>2019-12-19 23:12:16 -0800</date>
            <delta_ts>2020-01-07 00:05:13 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204884-20191220161215.patch</filename>
            <type>text/plain</type>
            <size>56586</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUzNzM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjU3ZDk5NzNmNjk5Yzcw
ZDhjYTdiMzc5M2U2N2RjN2Y0NWFmYWFlNi4uNzZmMTlkZDI4ZDZiZGJkNTYxZjRmNGU5ZTEyNDMw
MjQzOGQwYzg3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDE5LTEyLTE5ICBGdWpp
aSBIaXJvbm9yaSAgPEhpcm9ub3JpLkZ1amlpQHNvbnkuY29tPgorCisgICAgICAgIFtXaW5dIFVz
ZSBDb21wbGV4VGV4dENvbnRyb2xsZXIgaW5zdGVhZCBvZiBVbmlzY3JpYmVDb250cm9sbGVyCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQ4ODQKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFdmVuIHRob3Vn
aCBVbmlzY3JpYmVDb250cm9sbGVyIGlzIGEgc2ltaWxhciBjb2RlIHdpdGgKKyAgICAgICAgQ29t
cGxleFRleHRDb250cm9sbGVyLCBVbmlzY3JpYmVDb250cm9sbGVyIGRvZXNuJ3Qgc3VwcG9ydAor
ICAgICAgICBzdXJyb2dhdGUgcGFpcnMgYW5kIGhhcyByZW5kZXJpbmcgZ2xpdGNoZXMgb2YgcGFy
dGlhbGx5IHNlbGVjdGVkIGEKKyAgICAgICAgY29tYmluaW5nIGNoYXJhY3Rlci4KKworICAgICAg
ICBSZW1vdmUgVW5pc2NyaWJlQ29udHJvbGxlciwgYW5kIHVzZSBDb21wbGV4VGV4dENvbnRyb2xs
ZXIgYnkKKyAgICAgICAgaW1wbGVtZW50aW5nIGBjb2xsZWN0Q29tcGxleFRleHRSdW5zRm9yQ2hh
cmFjdGVyc2Agd2l0aCBVbmlzY3JpYmUuCisKKyAgICAgICAgKiBQbGF0Zm9ybVdpbi5jbWFrZToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q29tcGxleFRleHRDb250cm9sbGVyOjpjb2xsZWN0Q29tcGxleFRl
eHRSdW5zRm9yQ2hhcmFjdGVycyk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udENhc2NhZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OndpZHRo
T2ZUZXh0UmFuZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmdldEds
eXBoc0FuZEFkdmFuY2VzRm9yQ29tcGxleFRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
Rm9udENhc2NhZGU6OmRyYXdHbHlwaEJ1ZmZlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpG
b250Q2FzY2FkZTo6ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZvbnRDYXNjYWRlOjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6Om9mZnNldEZvclBvc2l0aW9uRm9y
Q29tcGxleFRleHQgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db21w
bGV4VGV4dENvbnRyb2xsZXJVbmlzY3JpYmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OnNoYXBlQnlVbmlzY3JpYmUpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcGxleFRleHRDb250cm9s
bGVyOjpjb2xsZWN0Q29tcGxleFRleHRSdW5zRm9yQ2hhcmFjdGVycyk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDR1dpbi5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ZvbnRDYXNjYWRlRGlyZWN0MkQuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbi9Gb250V2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjph
ZGp1c3RTZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmdldEdseXBoc0FuZEFkdmFuY2VzRm9yQ29tcGxleFRl
eHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmZsb2F0
V2lkdGhGb3JDb21wbGV4VGV4dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
b250Q2FzY2FkZTo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21wbGV4VGV4dCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1VuaXNjcmliZUNvbnRyb2xsZXIu
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9VbmlzY3JpYmVD
b250cm9sbGVyLmg6IFJlbW92ZWQuCisKIDIwMTktMTItMTggIERldmluIFJvdXNzbyAgPGRyb3Vz
c29AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IEVsZW1lbnRzOiByZXN0cmlj
dCBzaG93aW5nIHBhaW50IGZsYXNoaW5nIGFuZCBjb21wb3NpdGluZyBib3JkZXJzIHRvIHRoZSBX
ZWIgSW5zcGVjdG9yIHNlc3Npb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3Jt
V2luLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW4uY21ha2UKaW5kZXggZDFmZDRl
YjEyZGQ5NzExMDAxODBlYTgwNTZlZDQ4NjU2OWZjOTA2ZS4uZGU4NmZkM2EwNDExNjFhZjdiODhl
ZDU1YTVjNDA1ZGI2Y2NmOGRlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1X
aW4uY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW4uY21ha2UKQEAgLTUxLDYg
KzUxLDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vQ29sb3JEaXJlY3QyRC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vQ29t
cGxleFRleHRDb250cm9sbGVyRGlyZWN0V3JpdGUuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0NvbXBsZXhUZXh0Q29udHJvbGxlclVuaXNjcmliZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vRElCUGl4ZWxEYXRhLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9GbG9h
dFBvaW50RGlyZWN0MkQuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Zsb2F0UmVjdERp
cmVjdDJELmNwcApAQCAtNjksNyArNzAsNiBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFXaW4uY3BwCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL1RyYW5zZm9ybWF0aW9uTWF0cml4RGlyZWN0MkQuY3BwCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1RyYW5zZm9ybWF0aW9uTWF0cml4V2luLmNwcAotICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3dpbi9VbmlzY3JpYmVDb250cm9sbGVyLmNwcAogCiAgICAgcGxhdGZv
cm0vbmV0d29yay93aW4vRG93bmxvYWRCdW5kbGVXaW4uY3BwCiAgICAgcGxhdGZvcm0vbmV0d29y
ay93aW4vTmV0d29ya1N0YXRlTm90aWZpZXJXaW4uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29tcGxleFRleHRDb250cm9sbGVyLmNwcAppbmRl
eCAxNjNlZDRlMDdlZWU3ZjU1YTExOWEzNTdkNzg4ZTQwNzc0YmM4ZWExLi40OGU4ZDk1MWI4YzY2
Y2YxYTNjM2Q2MTZhNzQ1MDc5YTk1MDA3MzJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAKQEAgLTQz
LDMzICs0Myw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotI2lmIFBMQVRGT1JNKFdJTikg
JiYgIVVTRShESVJFQ1QyRCkKLQotY2xhc3MgVGV4dExheW91dCB7Ci19OwotCi12b2lkIFRleHRM
YXlvdXREZWxldGVyOjpvcGVyYXRvcigpKFRleHRMYXlvdXQqKSBjb25zdAotewotfQotCi1zdGQ6
OnVuaXF1ZV9wdHI8VGV4dExheW91dCwgVGV4dExheW91dERlbGV0ZXI+IEZvbnRDYXNjYWRlOjpj
cmVhdGVMYXlvdXQoUmVuZGVyVGV4dCYsIGZsb2F0LCBib29sKSBjb25zdAotewotICAgIHJldHVy
biBudWxscHRyOwotfQotCi1mbG9hdCBGb250Q2FzY2FkZTo6d2lkdGgoVGV4dExheW91dCYsIHVu
c2lnbmVkLCB1bnNpZ25lZCwgSGFzaFNldDxjb25zdCBGb250Kj4qKQotewotICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAwOwotfQotCi12b2lkIENvbXBsZXhUZXh0Q29udHJv
bGxlcjo6Y29sbGVjdENvbXBsZXhUZXh0UnVuc0ZvckNoYXJhY3RlcnMoY29uc3QgVUNoYXIqLCB1
bnNpZ25lZCwgdW5zaWduZWQsIGNvbnN0IEZvbnQqKQotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotfQotCi0jZWxzZQotCiBjbGFzcyBUZXh0TGF5b3V0IHsKICAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKIHB1YmxpYzoKQEAgLTg5NCw2ICs4NjcsNCBAQCBDb21wbGV4VGV4dENvbnRy
b2xsZXI6OkNvbXBsZXhUZXh0UnVuOjpDb21wbGV4VGV4dFJ1bihjb25zdCBWZWN0b3I8RmxvYXRT
aXplPiYgYQogewogfQogCi0jZW5kaWYKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwCmluZGV4IDQx
Mjc0N2FjZjhjOTExOGNjOGI2NmJjMTFmMTBlNjQ2NmYzMzU2NzAuLjBhZWM4ZTcwZWJhYmE0Mjg3
ZDY0OGQyMzFlMGRlYzYwODM2MWU0NWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAKQEAgLTQxLDEwICs0MSw2IEBACiAjaW5jbHVkZSA8
d3RmL3RleHQvQXRvbVN0cmluZ0hhc2guaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWls
ZGVyLmg+CiAKLSNpZiBQTEFURk9STShXSU4pICYmICFVU0UoRElSRUNUMkQpCi0jaW5jbHVkZSAi
VW5pc2NyaWJlQ29udHJvbGxlci5oIgotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
dXNpbmcgbmFtZXNwYWNlIFdURjo6VW5pY29kZTsKQEAgLTM1MCwxNSArMzQ2LDYgQEAgZmxvYXQg
Rm9udENhc2NhZGU6OndpZHRoT2ZUZXh0UmFuZ2UoY29uc3QgVGV4dFJ1biYgcnVuLCB1bnNpZ25l
ZCBmcm9tLCB1bnNpZ25lZAogCiAgICAgYXV0byBjb2RlUGF0aFRvVXNlID0gY29kZVBhdGgocnVu
KTsKICAgICBpZiAoY29kZVBhdGhUb1VzZSA9PSBDb21wbGV4KSB7Ci0jaWYgUExBVEZPUk0oV0lO
KSAmJiAhVVNFKERJUkVDVDJEKQotICAgICAgICBVbmlzY3JpYmVDb250cm9sbGVyIGl0KHRoaXMs
IHJ1bik7Ci0gICAgICAgIGl0LmFkdmFuY2UoZnJvbSk7Ci0gICAgICAgIG9mZnNldEJlZm9yZVJh
bmdlID0gaXQucnVuV2lkdGhTb0ZhcigpOwotICAgICAgICBpdC5hZHZhbmNlKHRvKTsKLSAgICAg
ICAgb2Zmc2V0QWZ0ZXJSYW5nZSA9IGl0LnJ1bldpZHRoU29GYXIoKTsKLSAgICAgICAgaXQuYWR2
YW5jZSh0byk7Ci0gICAgICAgIHRvdGFsV2lkdGggPSBpdC5ydW5XaWR0aFNvRmFyKCk7Ci0jZWxz
ZQogICAgICAgICBDb21wbGV4VGV4dENvbnRyb2xsZXIgY29tcGxleEl0ZXJhdG9yKCp0aGlzLCBy
dW4sIGZhbHNlLCBmYWxsYmFja0ZvbnRzKTsKICAgICAgICAgY29tcGxleEl0ZXJhdG9yLmFkdmFu
Y2UoZnJvbSwgbnVsbHB0ciwgSW5jbHVkZVBhcnRpYWxHbHlwaHMsIGZhbGxiYWNrRm9udHMpOwog
ICAgICAgICBvZmZzZXRCZWZvcmVSYW5nZSA9IGNvbXBsZXhJdGVyYXRvci5ydW5XaWR0aFNvRmFy
KCk7CkBAIC0zNjYsNyArMzUzLDYgQEAgZmxvYXQgRm9udENhc2NhZGU6OndpZHRoT2ZUZXh0UmFu
Z2UoY29uc3QgVGV4dFJ1biYgcnVuLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZAogICAgICAgICBv
ZmZzZXRBZnRlclJhbmdlID0gY29tcGxleEl0ZXJhdG9yLnJ1bldpZHRoU29GYXIoKTsKICAgICAg
ICAgY29tcGxleEl0ZXJhdG9yLmFkdmFuY2UocnVuLmxlbmd0aCgpLCBudWxscHRyLCBJbmNsdWRl
UGFydGlhbEdseXBocywgZmFsbGJhY2tGb250cyk7CiAgICAgICAgIHRvdGFsV2lkdGggPSBjb21w
bGV4SXRlcmF0b3IucnVuV2lkdGhTb0ZhcigpOwotI2VuZGlmCiAgICAgfSBlbHNlIHsKICAgICAg
ICAgV2lkdGhJdGVyYXRvciBzaW1wbGVJdGVyYXRvcih0aGlzLCBydW4sIGZhbGxiYWNrRm9udHMp
OwogICAgICAgICBzaW1wbGVJdGVyYXRvci5hZHZhbmNlKGZyb20sIG51bGxwdHIpOwpAQCAtMTM5
Nyw3ICsxMzgzLDYgQEAgZmxvYXQgRm9udENhc2NhZGU6OmdldEdseXBoc0FuZEFkdmFuY2VzRm9y
U2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiBydW4sIHVuc2lnbmUKICAgICByZXR1cm4gaW5pdGlh
bEFkdmFuY2U7CiB9CiAKLSNpZiAhUExBVEZPUk0oV0lOKSB8fCBVU0UoRElSRUNUMkQpCiBmbG9h
dCBGb250Q2FzY2FkZTo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dChjb25zdCBU
ZXh0UnVuJiBydW4sIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvLCBHbHlwaEJ1ZmZlciYgZ2x5
cGhCdWZmZXIsIEZvclRleHRFbXBoYXNpc09yTm90IGZvclRleHRFbXBoYXNpcykgY29uc3QKIHsK
ICAgICBmbG9hdCBpbml0aWFsQWR2YW5jZTsKQEAgLTE0MjcsNyArMTQxMiw2IEBAIGZsb2F0IEZv
bnRDYXNjYWRlOjpnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRS
dW4mIHJ1biwgdW5zaWduCiAKICAgICByZXR1cm4gaW5pdGlhbEFkdmFuY2U7CiB9Ci0jZW5kaWYK
IAogdm9pZCBGb250Q2FzY2FkZTo6ZHJhd0VtcGhhc2lzTWFya3NGb3JTaW1wbGVUZXh0KEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBBdG9tU3RyaW5n
JiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQg
dG8pIGNvbnN0CiB7CkBAIC0xNDUyLDEzICsxNDM2LDcgQEAgdm9pZCBGb250Q2FzY2FkZTo6ZHJh
d0dseXBoQnVmZmVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgR2x5cGhCdWZmZXIm
IGcKIHsKICAgICAvLyBEcmF3IGVhY2ggY29udGlndW91cyBydW4gb2YgZ2x5cGhzIHRoYXQgdXNl
IHRoZSBzYW1lIGZvbnQgZGF0YS4KICAgICBjb25zdCBGb250KiBmb250RGF0YSA9IGdseXBoQnVm
ZmVyLmZvbnRBdCgwKTsKLSNpZiBQTEFURk9STShXSU4pCi0gICAgRmxvYXRQb2ludCBzdGFydFBv
aW50KHBvaW50LngoKSArIGdseXBoQnVmZmVyLmluaXRpYWxBZHZhbmNlKCkud2lkdGgoKSwgcG9p
bnQueSgpICsgZ2x5cGhCdWZmZXIuaW5pdGlhbEFkdmFuY2UoKS5oZWlnaHQoKSk7Ci0jZWxzZQot
ICAgIC8vIEZJWE1FOiBXaHkgZG8gd2Ugc3VidHJhY3QgdGhlIGluaXRpYWwgYWR2YW5jZSdzIGhl
aWdodCBidXQgbm90IGl0cyB3aWR0aD8/PwotICAgIC8vIFdlIHNob3VsZCB1c2UgdGhlIGxpbmUg
YWJvdmUgZnJvbSBXaW5kb3dzIGluc3RlYWQuCiAgICAgRmxvYXRQb2ludCBzdGFydFBvaW50KHBv
aW50LngoKSwgcG9pbnQueSgpIC0gZ2x5cGhCdWZmZXIuaW5pdGlhbEFkdmFuY2UoKS5oZWlnaHQo
KSk7Ci0jZW5kaWYKICAgICBmbG9hdCBuZXh0WCA9IHN0YXJ0UG9pbnQueCgpICsgZ2x5cGhCdWZm
ZXIuYWR2YW5jZUF0KDApLndpZHRoKCk7CiAgICAgZmxvYXQgbmV4dFkgPSBzdGFydFBvaW50Lnko
KSArIGdseXBoQnVmZmVyLmFkdmFuY2VBdCgwKS5oZWlnaHQoKTsKICAgICB1bnNpZ25lZCBsYXN0
RnJvbSA9IDA7CkBAIC0xNTQ1LDcgKzE1MjMsNiBAQCBmbG9hdCBGb250Q2FzY2FkZTo6ZmxvYXRX
aWR0aEZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IEZvbgog
ICAgIHJldHVybiBpdC5tX3J1bldpZHRoU29GYXI7CiB9CiAKLSNpZiAhUExBVEZPUk0oV0lOKSB8
fCBVU0UoRElSRUNUMkQpCiBmbG9hdCBGb250Q2FzY2FkZTo6ZmxvYXRXaWR0aEZvckNvbXBsZXhU
ZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgSGFzaFNldDxjb25zdCBGb250Kj4qIGZhbGxiYWNrRm9u
dHMsIEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cpIGNvbnN0CiB7CiAgICAgQ29tcGxleFRl
eHRDb250cm9sbGVyIGNvbnRyb2xsZXIoKnRoaXMsIHJ1biwgdHJ1ZSwgZmFsbGJhY2tGb250cyk7
CkBAIC0xNTU3LDcgKzE1MzQsNiBAQCBmbG9hdCBGb250Q2FzY2FkZTo6ZmxvYXRXaWR0aEZvckNv
bXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgSGFzaFNldDxjb25zdCBGbwogICAgIH0KICAg
ICByZXR1cm4gY29udHJvbGxlci50b3RhbFdpZHRoKCk7CiB9Ci0jZW5kaWYKIAogdm9pZCBGb250
Q2FzY2FkZTo6YWRqdXN0U2VsZWN0aW9uUmVjdEZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYg
cnVuLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0
bykgY29uc3QKIHsKQEAgLTE1NzgsNyArMTU1NCw2IEBAIHZvaWQgRm9udENhc2NhZGU6OmFkanVz
dFNlbGVjdGlvblJlY3RGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgTGF5b3V0UmVj
CiAgICAgc2VsZWN0aW9uUmVjdC5zZXRXaWR0aChMYXlvdXRVbml0Ojpmcm9tRmxvYXRDZWlsKGFm
dGVyV2lkdGggLSBiZWZvcmVXaWR0aCkpOwogfQogCi0jaWYgIVBMQVRGT1JNKFdJTikgfHwgVVNF
KERJUkVDVDJEKQogdm9pZCBGb250Q2FzY2FkZTo6YWRqdXN0U2VsZWN0aW9uUmVjdEZvckNvbXBs
ZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgdW5z
aWduZWQgZnJvbSwgdW5zaWduZWQgdG8pIGNvbnN0CiB7CiAgICAgQ29tcGxleFRleHRDb250cm9s
bGVyIGNvbnRyb2xsZXIoKnRoaXMsIHJ1bik7CkBAIC0xNTkzLDcgKzE1NjgsNiBAQCB2b2lkIEZv
bnRDYXNjYWRlOjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1
biYgcnVuLCBMYXlvdXRSZQogICAgICAgICBzZWxlY3Rpb25SZWN0Lm1vdmUoYmVmb3JlV2lkdGgs
IDApOwogICAgIHNlbGVjdGlvblJlY3Quc2V0V2lkdGgoTGF5b3V0VW5pdDo6ZnJvbUZsb2F0Q2Vp
bChhZnRlcldpZHRoIC0gYmVmb3JlV2lkdGgpKTsKIH0KLSNlbmRpZgogCiBpbnQgRm9udENhc2Nh
ZGU6Om9mZnNldEZvclBvc2l0aW9uRm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGZs
b2F0IHgsIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0CiB7CkBAIC0xNjM4LDEzICsx
NjEyLDExIEBAIGludCBGb250Q2FzY2FkZTo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JTaW1wbGVUZXh0
KGNvbnN0IFRleHRSdW4mIHJ1biwgZmxvYXQgeCwgYm9vCiAgICAgcmV0dXJuIG9mZnNldDsKIH0K
IAotI2lmICFQTEFURk9STShXSU4pIHx8IFVTRShESVJFQ1QyRCkKIGludCBGb250Q2FzY2FkZTo6
b2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGZsb2F0
IHgsIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0CiB7CiAgICAgQ29tcGxleFRleHRD
b250cm9sbGVyIGNvbnRyb2xsZXIoKnRoaXMsIHJ1bik7CiAgICAgcmV0dXJuIGNvbnRyb2xsZXIu
b2Zmc2V0Rm9yUG9zaXRpb24oeCwgaW5jbHVkZVBhcnRpYWxHbHlwaHMpOwogfQotI2VuZGlmCiAK
ICNpZiAhUExBVEZPUk0oQ09DT0EpICYmICFVU0UoSEFSRkJVWlopCiAvLyBGSVhNRTogVW5pZnkg
dGhpcyB3aXRoIHRoZSBtYWNPUyBhbmQgaU9TIGltcGxlbWVudGF0aW9uLgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbXBsZXhUZXh0Q29udHJvbGxl
clVuaXNjcmliZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vQ29t
cGxleFRleHRDb250cm9sbGVyVW5pc2NyaWJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MDI1YTY0MGRkY2Fm
M2EwYjA3MGZiMTc3Nzc1N2YzODIzMWJkZWNhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbXBsZXhUZXh0Q29udHJvbGxlclVuaXNjcmli
ZS5jcHAKQEAgLTAsMCArMSwxODkgQEAKKy8qCisqIENvcHlyaWdodCAoQykgMjAxNy0yMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworKiBhcmUgbWV0OgorKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5Z
CisqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04KKyogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMKKyogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ29tcGxleFRl
eHRDb250cm9sbGVyLmgiCisKKyNpZiAhVVNFKERJUkVDVDJEKQorCisjaW5jbHVkZSAiRm9udENh
Y2hlLmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKKyNpbmNsdWRlICJIV25kREMuaCIKKyNp
bmNsdWRlIDx1c3AxMC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBib29sIHNo
YXBlQnlVbmlzY3JpYmUoY29uc3QgVUNoYXIqIHN0ciwgaW50IGxlbiwgU0NSSVBUX0lURU0gaXRl
bSwgY29uc3QgRm9udCogZm9udERhdGEsCisgICAgVmVjdG9yPFdPUkQ+JiBnbHlwaHMsIFZlY3Rv
cjxXT1JEPiYgY2x1c3RlcnMsCisgICAgVmVjdG9yPFNDUklQVF9WSVNBVFRSPiYgdmlzdWFsQXR0
cmlidXRlcykKK3sKKyAgICBIV25kREMgaGRjOworICAgIEhGT05UIG9sZEZvbnQgPSAwOworICAg
IEhSRVNVTFQgc2hhcGVSZXN1bHQgPSBFX1BFTkRJTkc7CisgICAgaW50IGdseXBoQ291bnQgPSAw
OworCisgICAgaWYgKCFmb250RGF0YSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZG8g
eworICAgICAgICBzaGFwZVJlc3VsdCA9IFNjcmlwdFNoYXBlKGhkYywgZm9udERhdGEtPnNjcmlw
dENhY2hlKCksIHdjaGFyRnJvbShzdHIpLCBsZW4sIGdseXBocy5zaXplKCksICZpdGVtLmEsCisg
ICAgICAgICAgICBnbHlwaHMuZGF0YSgpLCBjbHVzdGVycy5kYXRhKCksIHZpc3VhbEF0dHJpYnV0
ZXMuZGF0YSgpLCAmZ2x5cGhDb3VudCk7CisgICAgICAgIGlmIChzaGFwZVJlc3VsdCA9PSBFX1BF
TkRJTkcpIHsKKyAgICAgICAgICAgIC8vIFRoZSBzY3JpcHQgY2FjaGUgaXNuJ3QgcHJpbWVkIHdp
dGggZW5vdWdoIGluZm8geWV0LiBXZSBuZWVkIHRvIHNlbGVjdCBvdXIgSEZPTlQgaW50bworICAg
ICAgICAgICAgLy8gYSBEQyBhbmQgcGFzcyB0aGUgREMgaW4gdG8gU2NyaXB0U2hhcGUuCisgICAg
ICAgICAgICBBU1NFUlQoIWhkYyk7CisgICAgICAgICAgICBoZGMuc2V0SFduZCgwKTsKKyAgICAg
ICAgICAgIEhGT05UIGhmb250ID0gZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLmhmb250KCk7Cisg
ICAgICAgICAgICBvbGRGb250ID0gKEhGT05UKVNlbGVjdE9iamVjdChoZGMsIGhmb250KTsKKyAg
ICAgICAgfSBlbHNlIGlmIChzaGFwZVJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKSB7CisgICAgICAg
ICAgICAvLyBOZWVkIHRvIHJlc2l6ZSBvdXIgYnVmZmVycy4KKyAgICAgICAgICAgIGdseXBocy5y
ZXNpemUoZ2x5cGhzLnNpemUoKSAqIDIpOworICAgICAgICAgICAgdmlzdWFsQXR0cmlidXRlcy5y
ZXNpemUoZ2x5cGhzLnNpemUoKSk7CisgICAgICAgIH0KKyAgICB9IHdoaWxlIChzaGFwZVJlc3Vs
dCA9PSBFX1BFTkRJTkcgfHwgc2hhcGVSZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7CisKKyAgICBp
ZiAoaGRjKQorICAgICAgICBTZWxlY3RPYmplY3QoaGRjLCBvbGRGb250KTsKKworICAgIGlmIChG
QUlMRUQoc2hhcGVSZXN1bHQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBnbHlwaHMu
c2hyaW5rKGdseXBoQ291bnQpOworICAgIHZpc3VhbEF0dHJpYnV0ZXMuc2hyaW5rKGdseXBoQ291
bnQpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQ29tcGxleFRleHRDb250cm9sbGVy
Ojpjb2xsZWN0Q29tcGxleFRleHRSdW5zRm9yQ2hhcmFjdGVycyhjb25zdCBVQ2hhciogY3AsIHVu
c2lnbmVkIHN0cmluZ0xlbmd0aCwgdW5zaWduZWQgc3RyaW5nTG9jYXRpb24sIGNvbnN0IEZvbnQq
IGZvbnQpCit7CisgICAgaWYgKCFmb250KSB7CisgICAgICAgIC8vIENyZWF0ZSBhIHJ1biBvZiBt
aXNzaW5nIGdseXBocyBmcm9tIHRoZSBwcmltYXJ5IGZvbnQuCisgICAgICAgIG1fY29tcGxleFRl
eHRSdW5zLmFwcGVuZChDb21wbGV4VGV4dFJ1bjo6Y3JlYXRlKG1fZm9udC5wcmltYXJ5Rm9udCgp
LCBjcCwgc3RyaW5nTG9jYXRpb24sIHN0cmluZ0xlbmd0aCwgMCwgc3RyaW5nTGVuZ3RoLCBtX3J1
bi5sdHIoKSkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgVmVjdG9yPFNDUklQVF9J
VEVNPiBpdGVtcyg2KTsKKyAgICBpbnQgbnVtSXRlbXMgPSAwOworICAgIGZvciAoOzspIHsKKyAg
ICAgICAgU0NSSVBUX0NPTlRST0wgY29udHJvbCB7IH07CisgICAgICAgIFNDUklQVF9TVEFURSBz
dGF0ZSB7IH07CisgICAgICAgIC8vIFNldCB1cCB0aGUgY29ycmVjdCBkaXJlY3Rpb24gZm9yIHRo
ZSBydW4uCisgICAgICAgIHN0YXRlLnVCaWRpTGV2ZWwgPSBtX3J1bi5ydGwoKTsKKyAgICAgICAg
Ly8gTG9jayB0aGUgY29ycmVjdCBkaXJlY3Rpb25hbCBvdmVycmlkZS4KKyAgICAgICAgc3RhdGUu
Zk92ZXJyaWRlRGlyZWN0aW9uID0gbV9ydW4uZGlyZWN0aW9uYWxPdmVycmlkZSgpOworCisgICAg
ICAgIC8vIFNjcmlwdEl0ZW1pemUgbWF5IHdyaXRlIChjTWF4SXRlbXMgKyAxKSBTQ1JJUFRfSVRF
TS4KKyAgICAgICAgSFJFU1VMVCBociA9IFNjcmlwdEl0ZW1pemUod2NoYXJGcm9tKGNwKSwgc3Ry
aW5nTGVuZ3RoLCBpdGVtcy5zaXplKCkgLSAxLCAmY29udHJvbCwgJnN0YXRlLCBpdGVtcy5kYXRh
KCksICZudW1JdGVtcyk7CisgICAgICAgIGlmIChociAhPSBFX09VVE9GTUVNT1JZKSB7CisgICAg
ICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBpdGVtcy5yZXNpemUoaXRlbXMuc2l6ZSgpICogMik7CisgICAgfQorICAg
IGl0ZW1zLnJlc2l6ZShudW1JdGVtcyArIDEpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBu
dW1JdGVtczsgaSsrKSB7CisgICAgICAgIC8vIERldGVybWluZSB0aGUgc3RyaW5nIGZvciB0aGlz
IGl0ZW0uCisgICAgICAgIGNvbnN0IFVDaGFyKiBzdHIgPSBjcCArIGl0ZW1zW2ldLmlDaGFyUG9z
OworICAgICAgICBpbnQgbGVuZ3RoID0gaXRlbXNbaSsxXS5pQ2hhclBvcyAtIGl0ZW1zW2ldLmlD
aGFyUG9zOworICAgICAgICBTQ1JJUFRfSVRFTSYgaXRlbSA9IGl0ZW1zW2ldOworCisgICAgICAg
IC8vIFNldCB1cCBidWZmZXJzIHRvIGhvbGQgdGhlIHJlc3VsdHMgb2Ygc2hhcGluZyB0aGUgaXRl
bS4KKyAgICAgICAgVmVjdG9yPFdPUkQ+IGdseXBoczsKKyAgICAgICAgVmVjdG9yPFdPUkQ+IGNs
dXN0ZXJzOworICAgICAgICBWZWN0b3I8U0NSSVBUX1ZJU0FUVFI+IHZpc3VhbEF0dHJpYnV0ZXM7
CisgICAgICAgIGNsdXN0ZXJzLnJlc2l6ZShsZW5ndGgpOworCisgICAgICAgIC8vIFNoYXBlIHRo
ZSBpdGVtLgorICAgICAgICAvLyBUaGUgcmVjb21tZW5kZWQgc2l6ZSBmb3IgdGhlIGdseXBoIGJ1
ZmZlciBpcyAxLjUgKiB0aGUgY2hhcmFjdGVyIGxlbmd0aCArIDE2IGluIHRoZSB1bmlzY3JpYmUg
ZG9jcy4KKyAgICAgICAgLy8gQXBwYXJlbnRseSB0aGlzIGlzIGEgZ29vZCBzaXplIHRvIGF2b2lk
IGhhdmluZyB0byBtYWtlIHJlcGVhdGVkIGNhbGxzIHRvIFNjcmlwdFNoYXBlLgorICAgICAgICBn
bHlwaHMucmVzaXplKDEuNSAqIGxlbmd0aCArIDE2KTsKKyAgICAgICAgdmlzdWFsQXR0cmlidXRl
cy5yZXNpemUoZ2x5cGhzLnNpemUoKSk7CisKKyAgICAgICAgaWYgKCFzaGFwZUJ5VW5pc2NyaWJl
KHN0ciwgbGVuZ3RoLCBpdGVtLCBmb250LCBnbHlwaHMsIGNsdXN0ZXJzLCB2aXN1YWxBdHRyaWJ1
dGVzKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIC8vIFdlIG5vdyBoYXZlIGEg
Y29sbGVjdGlvbiBvZiBnbHlwaHMuCisgICAgICAgIFZlY3RvcjxHT0ZGU0VUPiBvZmZzZXRzOwor
ICAgICAgICBWZWN0b3I8aW50PiBhZHZhbmNlczsKKyAgICAgICAgb2Zmc2V0cy5yZXNpemUoZ2x5
cGhzLnNpemUoKSk7CisgICAgICAgIGFkdmFuY2VzLnJlc2l6ZShnbHlwaHMuc2l6ZSgpKTsKKyAg
ICAgICAgSFJFU1VMVCBwbGFjZVJlc3VsdCA9IFNjcmlwdFBsYWNlKDAsIGZvbnQtPnNjcmlwdENh
Y2hlKCksIGdseXBocy5kYXRhKCksIGdseXBocy5zaXplKCksIHZpc3VhbEF0dHJpYnV0ZXMuZGF0
YSgpLAorICAgICAgICAgICAgJml0ZW0uYSwgYWR2YW5jZXMuZGF0YSgpLCBvZmZzZXRzLmRhdGEo
KSwgMCk7CisgICAgICAgIGlmIChwbGFjZVJlc3VsdCA9PSBFX1BFTkRJTkcpIHsKKyAgICAgICAg
ICAgIC8vIFRoZSBzY3JpcHQgY2FjaGUgaXNuJ3QgcHJpbWVkIHdpdGggZW5vdWdoIGluZm8geWV0
LiBXZSBuZWVkIHRvIHNlbGVjdCBvdXIgSEZPTlQgaW50bworICAgICAgICAgICAgLy8gYSBEQyBh
bmQgcGFzcyB0aGUgREMgaW4gdG8gU2NyaXB0UGxhY2UuCisgICAgICAgICAgICBIV25kREMgaGRj
KDApOworICAgICAgICAgICAgSEZPTlQgaGZvbnQgPSBmb250LT5wbGF0Zm9ybURhdGEoKS5oZm9u
dCgpOworICAgICAgICAgICAgSEZPTlQgb2xkRm9udCA9IChIRk9OVClTZWxlY3RPYmplY3QoaGRj
LCBoZm9udCk7CisgICAgICAgICAgICBwbGFjZVJlc3VsdCA9IFNjcmlwdFBsYWNlKGhkYywgZm9u
dC0+c2NyaXB0Q2FjaGUoKSwgZ2x5cGhzLmRhdGEoKSwgZ2x5cGhzLnNpemUoKSwgdmlzdWFsQXR0
cmlidXRlcy5kYXRhKCksCisgICAgICAgICAgICAgICAgJml0ZW0uYSwgYWR2YW5jZXMuZGF0YSgp
LCBvZmZzZXRzLmRhdGEoKSwgMCk7CisgICAgICAgICAgICBTZWxlY3RPYmplY3QoaGRjLCBvbGRG
b250KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChGQUlMRUQocGxhY2VSZXN1bHQpIHx8IGds
eXBocy5pc0VtcHR5KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAobV9m
YWxsYmFja0ZvbnRzKQorICAgICAgICAgICAgbV9mYWxsYmFja0ZvbnRzLT5hZGQoZm9udCk7CisK
KyAgICAgICAgVmVjdG9yPHVuc2lnbmVkPiBzdHJpbmdJbmRpY2VzKGdseXBocy5zaXplKCksIGl0
ZW0uaUNoYXJQb3MpOworCisgICAgICAgIGZvciAoaW50IGsgPSBsZW5ndGggLSAxOyBrID49IDA7
IGstLSkKKyAgICAgICAgICAgIHN0cmluZ0luZGljZXNbY2x1c3RlcnNba11dID0gaXRlbS5pQ2hh
clBvcyArIGs7CisKKyAgICAgICAgVmVjdG9yPEZsb2F0U2l6ZT4gYmFzZUFkdmFuY2VzOworICAg
ICAgICBWZWN0b3I8RmxvYXRQb2ludD4gb3JpZ2luczsKKyAgICAgICAgYmFzZUFkdmFuY2VzLnJl
c2VydmVDYXBhY2l0eShnbHlwaHMuc2l6ZSgpKTsKKyAgICAgICAgb3JpZ2lucy5yZXNlcnZlQ2Fw
YWNpdHkoZ2x5cGhzLnNpemUoKSk7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBrID0gMDsgayA8
IGdseXBocy5zaXplKCk7IGsrKykgeworICAgICAgICAgICAgY29uc3QgZmxvYXQgY0xvZ2ljYWxT
Y2FsZSA9IGZvbnQtPnBsYXRmb3JtRGF0YSgpLnVzZUdESSgpID8gMSA6IDMyOworICAgICAgICAg
ICAgZmxvYXQgYWR2YW5jZSA9IGFkdmFuY2VzW2tdIC8gY0xvZ2ljYWxTY2FsZTsKKyAgICAgICAg
ICAgIGZsb2F0IG9mZnNldFggPSBvZmZzZXRzW2tdLmR1IC8gY0xvZ2ljYWxTY2FsZTsKKyAgICAg
ICAgICAgIGZsb2F0IG9mZnNldFkgPSBvZmZzZXRzW2tdLmR2IC8gY0xvZ2ljYWxTY2FsZTsKKwor
ICAgICAgICAgICAgLy8gTWF0Y2ggQXBwS2l0J3MgcnVsZXMgZm9yIHRoZSBpbnRlZ2VyIHZzLiBu
b24taW50ZWdlciByZW5kZXJpbmcgbW9kZXMuCisgICAgICAgICAgICBpZiAoIWZvbnQtPnBsYXRm
b3JtRGF0YSgpLmlzU3lzdGVtRm9udCgpKSB7CisgICAgICAgICAgICAgICAgYWR2YW5jZSA9IHJv
dW5kZihhZHZhbmNlKTsKKyAgICAgICAgICAgICAgICBvZmZzZXRYID0gcm91bmRmKG9mZnNldFgp
OworICAgICAgICAgICAgICAgIG9mZnNldFkgPSByb3VuZGYob2Zmc2V0WSk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIHRha2UgdGhlIEdPRkZTRVRT
IGZvciBjb21iaW5pbmcgZ2x5cGhzIGFuZCBzdG9yZSB0aGVtIGluIHRoZSBnbHlwaCBidWZmZXIK
KyAgICAgICAgICAgIC8vIGFzIHdlbGwsIHNvIHRoYXQgd2hlbiB0aGUgdGltZSBjb21lcyB0byBk
cmF3IHRob3NlIGdseXBocywgd2UgY2FuIGFwcGx5IHRoZSBhcHByb3ByaWF0ZQorICAgICAgICAg
ICAgLy8gdHJhbnNsYXRpb24uCisKKyAgICAgICAgICAgIGJhc2VBZHZhbmNlcy51bmNoZWNrZWRB
cHBlbmQoeyBhZHZhbmNlLCAwIH0pOworICAgICAgICAgICAgb3JpZ2lucy51bmNoZWNrZWRBcHBl
bmQoeyBvZmZzZXRYLCBvZmZzZXRZIH0pOworICAgICAgICB9CisgICAgICAgIEZsb2F0U2l6ZSBp
bml0aWFsQWR2YW5jZSA9IHRvRmxvYXRTaXplKG9yaWdpbnNbMF0pOworICAgICAgICBib29sIGx0
ciA9ICFpdGVtLmEuZlJUTDsKKyAgICAgICAgbV9jb21wbGV4VGV4dFJ1bnMuYXBwZW5kKENvbXBs
ZXhUZXh0UnVuOjpjcmVhdGUoYmFzZUFkdmFuY2VzLCBvcmlnaW5zLCBnbHlwaHMsIHN0cmluZ0lu
ZGljZXMsIGluaXRpYWxBZHZhbmNlLCAqZm9udCwgY3AsIHN0cmluZ0xvY2F0aW9uLCBzdHJpbmdM
ZW5ndGgsIGl0ZW0uaUNoYXJQb3MsIGl0ZW1zW2krMV0uaUNoYXJQb3MsIGx0cikpOworICAgIH0K
K30KKworfQorCisjZW5kaWYgLy8gIVVTRShESVJFQ1QyRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q0dXaW4uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDR1dpbi5jcHAKaW5kZXggMGVmNjU1ZDhkMDVi
NmE2MWE4YTRlMzhhNTE5MjY3MDAxYTQ4YzkyZC4uMzNmODUyZWI2ZThkYmRhNDUwYmY1ZWZhNzMw
ZTQwNmE4YWZlOTdkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0ZvbnRDR1dpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0ZvbnRDR1dpbi5jcHAKQEAgLTM0LDcgKzM0LDYgQEAKICNpbmNsdWRlICJHbHlwaEJ1
ZmZlci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkludFJlY3Qu
aCIKLSNpbmNsdWRlICJVbmlzY3JpYmVDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiV2ViQ29yZVRl
eHRSZW5kZXJlci5oIgogI2luY2x1ZGUgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+CiAj
aW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FzY2FkZURpcmVjdDJELmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FzY2FkZURpcmVjdDJELmNwcAppbmRleCA5
MTExMmQ5NjVjODliYTdkNGM1N2JlN2M2OTNlY2ExNzcyNjg1OWFmLi5iMmQzNDcxYjhhYzMxOTM2
YjEyMjcwM2NlYzU5ODJhMDg1ODVlY2M2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vRm9udENhc2NhZGVEaXJlY3QyRC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYXNjYWRlRGlyZWN0MkQuY3BwCkBAIC0z
Nyw3ICszNyw2IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlRGly
ZWN0MkQuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0
RGlyZWN0MkQuaCIKLSNpbmNsdWRlICJVbmlzY3JpYmVDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAi
V2ViQ29yZVRleHRSZW5kZXJlci5oIgogI2luY2x1ZGUgPGQyZDEuaD4KICNpbmNsdWRlIDxkd3Jp
dGVfMy5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ZvbnRXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRX
aW4uY3BwCmluZGV4IDFjYWE4MDIyZTI2YTcwN2QyZjFiNDBkMDQ5MWE4YzA4ZWE4YTQyYzQuLjUy
Y2I4OGY1M2QwNWExMDE5NmU2NTFiZmQyYWNkMDMyZGM3OTIyZWEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250V2luLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFdpbi5jcHAKQEAgLTM1LDEwICszNSw2
IEBACiAjaW5jbHVkZSAiVGV4dFJ1bi5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAK
LSNpZiAhVVNFKERJUkVDVDJEKQotI2luY2x1ZGUgIlVuaXNjcmliZUNvbnRyb2xsZXIuaCIKLSNl
bmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGJvb2wgRm9udENhc2NhZGU6OmNhblJldHVy
bkZhbGxiYWNrRm9udHNGb3JDb21wbGV4VGV4dCgpCkBAIC01MSw3MiArNDcsNCBAQCBib29sIEZv
bnRDYXNjYWRlOjpjYW5FeHBhbmRBcm91bmRJZGVvZ3JhcGhzSW5Db21wbGV4VGV4dCgpCiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi0jaWYgIVVTRShESVJFQ1QyRCkKLQotdm9pZCBGb250Q2FzY2Fk
ZTo6YWRqdXN0U2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwg
TGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8pIGNv
bnN0Ci17Ci0gICAgVW5pc2NyaWJlQ29udHJvbGxlciBpdCh0aGlzLCBydW4pOwotICAgIGl0LmFk
dmFuY2UoZnJvbSk7Ci0gICAgZmxvYXQgYmVmb3JlV2lkdGggPSBpdC5ydW5XaWR0aFNvRmFyKCk7
Ci0gICAgaXQuYWR2YW5jZSh0byk7Ci0gICAgZmxvYXQgYWZ0ZXJXaWR0aCA9IGl0LnJ1bldpZHRo
U29GYXIoKTsKLQotICAgIGlmIChydW4ucnRsKCkpIHsKLSAgICAgICAgaXQuYWR2YW5jZShydW4u
bGVuZ3RoKCkpOwotICAgICAgICBzZWxlY3Rpb25SZWN0Lm1vdmUoaXQucnVuV2lkdGhTb0Zhcigp
IC0gYWZ0ZXJXaWR0aCwgMCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHNlbGVjdGlvblJlY3QubW92
ZShiZWZvcmVXaWR0aCwgMCk7Ci0gICAgc2VsZWN0aW9uUmVjdC5zZXRXaWR0aChhZnRlcldpZHRo
IC0gYmVmb3JlV2lkdGgpOwotfQotCi1mbG9hdCBGb250Q2FzY2FkZTo6Z2V0R2x5cGhzQW5kQWR2
YW5jZXNGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIHVuc2lnbmVkIGZyb20sIHVu
c2lnbmVkIHRvLCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIEZvclRleHRFbXBoYXNpc09yTm90
IGZvclRleHRFbXBoYXNpcykgY29uc3QKLXsKLSAgICBpZiAoZm9yVGV4dEVtcGhhc2lzKSB7Ci0g
ICAgICAgIC8vIEZJWE1FOiBBZGQgZm9yVGV4dEVtcGhhc2lzIHBhcmVtZXRlciB0byBVbmlzY3Jp
YmVDb250cm9sbGVyIGFuZCB1c2UgaXQuCi0gICAgICAgIExPR19FUlJPUigiTm90IGltcGxlbWVu
dGVkIGZvciB0ZXh0IGVtcGhhc2lzLiIpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAg
ICBVbmlzY3JpYmVDb250cm9sbGVyIGNvbnRyb2xsZXIodGhpcywgcnVuKTsKLSAgICBjb250cm9s
bGVyLmFkdmFuY2UoZnJvbSk7Ci0gICAgZmxvYXQgYmVmb3JlV2lkdGggPSBjb250cm9sbGVyLnJ1
bldpZHRoU29GYXIoKTsKLSAgICBjb250cm9sbGVyLmFkdmFuY2UodG8sICZnbHlwaEJ1ZmZlcik7
Ci0KLSAgICBpZiAoZ2x5cGhCdWZmZXIuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gMDsKLQot
ICAgIGZsb2F0IGFmdGVyV2lkdGggPSBjb250cm9sbGVyLnJ1bldpZHRoU29GYXIoKTsKLQotICAg
IGlmIChydW4ucnRsKCkpIHsKLSAgICAgICAgY29udHJvbGxlci5hZHZhbmNlKHJ1bi5sZW5ndGgo
KSk7Ci0gICAgICAgIHJldHVybiBjb250cm9sbGVyLnJ1bldpZHRoU29GYXIoKSAtIGFmdGVyV2lk
dGg7Ci0gICAgfQotICAgIHJldHVybiBiZWZvcmVXaWR0aDsKLX0KLQotZmxvYXQgRm9udENhc2Nh
ZGU6OmZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8
Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93
KSBjb25zdAotewotICAgIFVuaXNjcmliZUNvbnRyb2xsZXIgY29udHJvbGxlcih0aGlzLCBydW4s
IGZhbGxiYWNrRm9udHMpOwotICAgIGNvbnRyb2xsZXIuYWR2YW5jZShydW4ubGVuZ3RoKCkpOwot
ICAgIGlmIChnbHlwaE92ZXJmbG93KSB7Ci0gICAgICAgIGdseXBoT3ZlcmZsb3ctPnRvcCA9IHN0
ZDo6bWF4PGludD4oZ2x5cGhPdmVyZmxvdy0+dG9wLCBjZWlsZigtY29udHJvbGxlci5taW5HbHlw
aEJvdW5kaW5nQm94WSgpKSAtIChnbHlwaE92ZXJmbG93LT5jb21wdXRlQm91bmRzID8gMCA6IGZv
bnRNZXRyaWNzKCkuYXNjZW50KCkpKTsKLSAgICAgICAgZ2x5cGhPdmVyZmxvdy0+Ym90dG9tID0g
c3RkOjptYXg8aW50PihnbHlwaE92ZXJmbG93LT5ib3R0b20sIGNlaWxmKGNvbnRyb2xsZXIubWF4
R2x5cGhCb3VuZGluZ0JveFkoKSkgLSAoZ2x5cGhPdmVyZmxvdy0+Y29tcHV0ZUJvdW5kcyA/IDAg
IDogZm9udE1ldHJpY3MoKS5kZXNjZW50KCkpKTsKLSAgICAgICAgZ2x5cGhPdmVyZmxvdy0+bGVm
dCA9IHN0ZDo6bWF4PGludD4oMCwgY2VpbGYoLWNvbnRyb2xsZXIubWluR2x5cGhCb3VuZGluZ0Jv
eFgoKSkpOwotICAgICAgICBnbHlwaE92ZXJmbG93LT5yaWdodCA9IHN0ZDo6bWF4PGludD4oMCwg
Y2VpbGYoY29udHJvbGxlci5tYXhHbHlwaEJvdW5kaW5nQm94WCgpIC0gY29udHJvbGxlci5ydW5X
aWR0aFNvRmFyKCkpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGNvbnRyb2xsZXIucnVuV2lkdGhTb0Zh
cigpOwotfQotCi1pbnQgRm9udENhc2NhZGU6Om9mZnNldEZvclBvc2l0aW9uRm9yQ29tcGxleFRl
eHQoY29uc3QgVGV4dFJ1biYgcnVuLCBmbG9hdCB4RmxvYXQsIGJvb2wgaW5jbHVkZVBhcnRpYWxH
bHlwaHMpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IFRoaXMgdHJ1bmNhdGlvbiBpcyBub3QgYSBw
cm9ibGVtIGZvciBIVE1MLCBidXQgb25seSBhZmZlY3RzIFNWRywgd2hpY2ggcGFzc2VzIGZsb2F0
aW5nLXBvaW50IG51bWJlcnMKLSAgICAvLyB0byBGb250Q2FzY2FkZTo6b2Zmc2V0Rm9yUG9zaXRp
b24oKS4gQnVnIGh0dHA6Ly93ZWJraXQub3JnL2IvNDA2NzMgdHJhY2tzIGZpeGluZyB0aGlzIHBy
b2JsZW0uCi0gICAgaW50IHggPSBzdGF0aWNfY2FzdDxpbnQ+KHhGbG9hdCk7Ci0KLSAgICBVbmlz
Y3JpYmVDb250cm9sbGVyIGNvbnRyb2xsZXIodGhpcywgcnVuKTsKLSAgICByZXR1cm4gY29udHJv
bGxlci5vZmZzZXRGb3JQb3NpdGlvbih4LCBpbmNsdWRlUGFydGlhbEdseXBocyk7Ci19Ci0KLSNl
bmRpZgotCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vVW5pc2NyaWJlQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vVW5pc2NyaWJlQ29udHJvbGxlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDQ3NGM0ODYwZmYxMDA0NDA5OWI2YWYzZjliZmI5YjQwY2Q3ODhkYTkuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL1VuaXNjcmliZUNvbnRyb2xsZXIuY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsNDU5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDks
IDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVW5pc2NyaWJlQ29udHJvbGxlci5oIgotCi0jaW5jbHVk
ZSAiRm9udC5oIgotI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCi0jaW5jbHVkZSAiSFduZERDLmgi
Ci0jaW5jbHVkZSAiVGV4dFJ1bi5oIgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvd2luL1dDaGFyU3RyaW5nRXh0cmFzLmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLXVzaW5nIG5hbWVzcGFjZSBXVEY6OlVuaWNvZGU7Ci0KLS8vIEZJWE1FOiBSZWFyY2hp
dGVjdCB0aGlzIHRvIGJlIG1vcmUgbGlrZSBXaWR0aEl0ZXJhdG9yIGluIEZvbnQuY3BwLiAgSGF2
ZSBhbiBhZHZhbmNlKCkgbWV0aG9kCi0vLyB0aGF0IGRvZXMgc3R1ZmYgaW4gdGhhdCBtZXRob2Qg
aW5zdGVhZCBvZiBkb2luZyBldmVyeXRoaW5nIGluIHRoZSBjb25zdHJ1Y3Rvci4gIEhhdmUgYWR2
YW5jZSgpCi0vLyB0YWtlIHRoZSBHbHlwaEJ1ZmZlciBhcyBhbiBhcmcgc28gdGhhdCB3ZSBkb24n
dCBoYXZlIHRvIHBvcHVsYXRlIHRoZSBnbHlwaCBidWZmZXIgd2hlbgotLy8gbWVhc3VyaW5nLgot
VW5pc2NyaWJlQ29udHJvbGxlcjo6VW5pc2NyaWJlQ29udHJvbGxlcihjb25zdCBGb250Q2FzY2Fk
ZSogZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiogZmFsbGJh
Y2tGb250cykKLSAgICA6IG1fZm9udCgqZm9udCkKLSAgICAsIG1fcnVuKHJ1bikKLSAgICAsIG1f
ZmFsbGJhY2tGb250cyhmYWxsYmFja0ZvbnRzKQotICAgICwgbV9taW5HbHlwaEJvdW5kaW5nQm94
WChzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6bWF4KCkpCi0gICAgLCBtX21heEdseXBoQm91
bmRpbmdCb3hYKHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptaW4oKSkKLSAgICAsIG1fbWlu
R2x5cGhCb3VuZGluZ0JveFkoc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46Om1heCgpKQotICAg
ICwgbV9tYXhHbHlwaEJvdW5kaW5nQm94WShzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6bWlu
KCkpCi0gICAgLCBtX2N1cnJlbnRDaGFyYWN0ZXIoMCkKLSAgICAsIG1fZW5kKHJ1bi5sZW5ndGgo
KSkKLSAgICAsIG1fcnVuV2lkdGhTb0ZhcigwKQotICAgICwgbV9wYWRkaW5nKHJ1bi5leHBhbnNp
b24oKSkKLSAgICAsIG1fY29tcHV0aW5nT2Zmc2V0UG9zaXRpb24oZmFsc2UpCi0gICAgLCBtX2lu
Y2x1ZGVQYXJ0aWFsR2x5cGhzKGZhbHNlKQotICAgICwgbV9vZmZzZXRYKDApCi0gICAgLCBtX29m
ZnNldFBvc2l0aW9uKDApCi17Ci0gICAgaWYgKCFtX3BhZGRpbmcpCi0gICAgICAgIG1fcGFkUGVy
U3BhY2UgPSAwOwotICAgIGVsc2UgewotICAgICAgICBmbG9hdCBudW1TcGFjZXMgPSAwOwotICAg
ICAgICBmb3IgKGludCBzID0gMDsgcyA8IG1fcnVuLmxlbmd0aCgpOyBzKyspIHsKLSAgICAgICAg
ICAgIGlmIChGb250Q2FzY2FkZTo6dHJlYXRBc1NwYWNlKG1fcnVuW3NdKSkKLSAgICAgICAgICAg
ICAgICBudW1TcGFjZXMrKzsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChudW1TcGFjZXMgPT0g
MCkKLSAgICAgICAgICAgIG1fcGFkUGVyU3BhY2UgPSAwOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBtX3BhZFBlclNwYWNlID0gbV9wYWRkaW5nIC8gbnVtU3BhY2VzOwotICAgIH0KLQotICAg
IC8vIE51bGwgb3V0IG91ciB1bmlzY3JpYmUgc3RydWN0cwotICAgIHJlc2V0Q29udHJvbEFuZFN0
YXRlKCk7Ci19Ci0KLWludCBVbmlzY3JpYmVDb250cm9sbGVyOjpvZmZzZXRGb3JQb3NpdGlvbihp
bnQgeCwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykKLXsKLSAgICBtX2NvbXB1dGluZ09mZnNl
dFBvc2l0aW9uID0gdHJ1ZTsKLSAgICBtX2luY2x1ZGVQYXJ0aWFsR2x5cGhzID0gaW5jbHVkZVBh
cnRpYWxHbHlwaHM7Ci0gICAgbV9vZmZzZXRYID0geDsKLSAgICBtX29mZnNldFBvc2l0aW9uID0g
MDsKLSAgICBhZHZhbmNlKG1fcnVuLmxlbmd0aCgpKTsKLSAgICBpZiAobV9jb21wdXRpbmdPZmZz
ZXRQb3NpdGlvbikgewotICAgICAgICAvLyBUaGUgcG9pbnQgaXMgdG8gdGhlIGxlZnQgb3IgdG8g
dGhlIHJpZ2h0IG9mIHRoZSBlbnRpcmUgcnVuLgotICAgICAgICBpZiAoKG1fb2Zmc2V0WCA+PSBt
X3J1bldpZHRoU29GYXIgJiYgbV9ydW4ubHRyKCkpIHx8IChtX29mZnNldFggPCAwICYmIG1fcnVu
LnJ0bCgpKSkKLSAgICAgICAgICAgIG1fb2Zmc2V0UG9zaXRpb24gPSBtX2VuZDsKLSAgICB9Ci0g
ICAgbV9jb21wdXRpbmdPZmZzZXRQb3NpdGlvbiA9IGZhbHNlOwotICAgIHJldHVybiBtX29mZnNl
dFBvc2l0aW9uOwotfQotCi12b2lkIFVuaXNjcmliZUNvbnRyb2xsZXI6OmFkdmFuY2UodW5zaWdu
ZWQgb2Zmc2V0LCBHbHlwaEJ1ZmZlciogZ2x5cGhCdWZmZXIpCi17Ci0gICAgLy8gRklYTUU6IFdl
IHJlYWxseSB3YW50IHRvIGJlIHVzaW5nIGEgbmV3ZXIgdmVyc2lvbiBvZiBVbmlzY3JpYmUgdGhh
dCBzdXBwb3J0cyB0aGUgbmV3IE9wZW5UeXBlCi0gICAgLy8gZnVuY3Rpb25zLiAgVGhvc2UgZnVu
Y3Rpb25zIHdvdWxkIGFsbG93IHVzIHRvIHR1cm4gb2ZmIGtlcm5pbmcgYW5kIGxpZ2F0dXJlcy4g
IFdpdGhvdXQgYmVpbmcgYWJsZQotICAgIC8vIHRvIGRvIHRoYXQsIHdlIHdpbGwgaGF2ZSBidWdn
eSBsaW5lIGJyZWFraW5nIGFuZCBtZXRyaWNzIHdoZW4gc2ltcGxlIGFuZCBjb21wbGV4IHRleHQg
YXJlIGNsb3NlCi0gICAgLy8gdG9nZXRoZXIgKHRoZSBjb21wbGV4IGNvZGUgcGF0aCB3aWxsIG5h
cnJvdyB0aGUgdGV4dCBiZWNhdXNlIG9mIGtlcm5pbmcgYW5kIGxpZ2F0dXJlcyBhbmQgdGhlbgot
ICAgIC8vIHdoZW4gYmlkaSBwcm9jZXNzaW5nIHNwbGl0cyBpbnRvIG11bHRpcGxlIHJ1bnMsIHRo
ZSBzaW1wbGUgcG9ydGlvbnMgd2lsbCBnZXQgd2lkZXIgYW5kIGNhdXNlIHVzIHRvCi0gICAgLy8g
c3BpbGwgb2ZmIHRoZSBlZGdlIG9mIGEgbGluZSkuCi0gICAgaWYgKHN0YXRpY19jYXN0PGludD4o
b2Zmc2V0KSA+IG1fZW5kKQotICAgICAgICBvZmZzZXQgPSBtX2VuZDsKLQotICAgIGludCBsZW5n
dGggPSBvZmZzZXQgLSBtX2N1cnJlbnRDaGFyYWN0ZXI7Ci0gICAgaWYgKGxlbmd0aCA8PSAwKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBTdHJpbmcgYnVmZmVyRm9yMTZCaXREYXRhOwotCi0gICAg
Ly8gSXRlbWl6ZSB0aGUgc3RyaW5nLgotICAgIGNvbnN0IFVDaGFyKiBjcCA9IG51bGxwdHI7Ci0g
ICAgaWYgKG1fcnVuLmlzOEJpdCgpKSB7Ci0gICAgICAgIC8vIFVuaXNjcmliZSBvbmx5IGRlYWxz
IHdpdGggMTYtYml0IGNoYXJhY3RlcnMuIE11c3QgZ2VuZXJhdGUgdGhlbSBub3cuCi0gICAgICAg
IGJ1ZmZlckZvcjE2Qml0RGF0YSA9IFN0cmluZzo6bWFrZTE2Qml0RnJvbThCaXRTb3VyY2UobV9y
dW4uZGF0YTgobV9jdXJyZW50Q2hhcmFjdGVyKSwgbGVuZ3RoKTsKLSAgICAgICAgY3AgPSBidWZm
ZXJGb3IxNkJpdERhdGEuY2hhcmFjdGVyczE2KCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGNwID0g
bV9ydW4uZGF0YTE2KG1fY3VycmVudENoYXJhY3Rlcik7Ci0KLSAgICB1bnNpZ25lZCBiYXNlQ2hh
cmFjdGVyID0gbV9jdXJyZW50Q2hhcmFjdGVyOwotCi0gICAgLy8gV2UgYnJlYWsgdXAgaXRlbWl6
YXRpb24gb2YgdGhlIHN0cmluZyBieSBmb250RGF0YSBhbmQgKGlmIG5lZWRlZCkgdGhlIHVzZSBv
ZiBzbWFsbCBjYXBzLgotCi0gICAgLy8gRklYTUU6IEl0J3MgaW5jb25zaXN0ZW50IHRoYXQgd2Ug
dXNlIGxvZ2ljYWwgb3JkZXIgd2hlbiBpdGVtaXppbmcsIHNpbmNlIHRoaXMKLSAgICAvLyBkb2Vz
IG5vdCBtYXRjaCBub3JtYWwgUlRMLgotCi0gICAgLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24gc2hv
dWxkIGRlY29kZSBzdXJyb2dhdGUgcGFpcnMuIEN1cnJlbnRseSBpdCBtYWtlcyBsaXR0bGUgZGlm
ZmVyZW5jZSB0aGF0Ci0gICAgLy8gaXQgZG9lcyBub3QgYmVjYXVzZSB0aGUgZm9udCBjYWNoZSBv
biBXaW5kb3dzIGRvZXMgbm90IHN1cHBvcnQgbm9uLUJNUCBjaGFyYWN0ZXJzLgotICAgIFZlY3Rv
cjxVQ2hhciwgMjU2PiBzbWFsbENhcHNCdWZmZXI7Ci0gICAgaWYgKG1fZm9udC5pc1NtYWxsQ2Fw
cygpKQotICAgICAgICBzbWFsbENhcHNCdWZmZXIucmVzaXplKGxlbmd0aCk7Ci0KLSAgICB1bnNp
Z25lZCBpbmRleE9mRm9udFRyYW5zaXRpb24gPSBtX3J1bi5ydGwoKSA/IGxlbmd0aCAtIDEgOiAw
OwotICAgIGNvbnN0IFVDaGFyKiBjdXJyID0gbV9ydW4ucnRsKCkgPyBjcCArIGxlbmd0aCAgLSAx
IDogY3A7Ci0gICAgY29uc3QgVUNoYXIqIGVuZCA9IG1fcnVuLnJ0bCgpID8gY3AgLSAxIDogY3Ag
KyBsZW5ndGg7Ci0KLSAgICBjb25zdCBGb250KiBmb250RGF0YTsKLSAgICBjb25zdCBGb250KiBu
ZXh0Rm9udERhdGEgPSBtX2ZvbnQuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKCpjdXJyLCBmYWxzZSku
Zm9udDsKLQotICAgIFVDaGFyIG5ld0MgPSAwOwotCi0gICAgYm9vbCBpc1NtYWxsQ2FwczsKLSAg
ICBib29sIG5leHRJc1NtYWxsQ2FwcyA9IG1fZm9udC5pc1NtYWxsQ2FwcygpICYmICEoVV9HRVRf
R0NfTUFTSygqY3VycikgJiBVX0dDX01fTUFTSykgJiYgKG5ld0MgPSB1X3RvdXBwZXIoKmN1cnIp
KSAhPSAqY3VycjsKLQotICAgIGlmIChuZXh0SXNTbWFsbENhcHMpCi0gICAgICAgIHNtYWxsQ2Fw
c0J1ZmZlcltjdXJyIC0gY3BdID0gbmV3QzsKLQotICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAg
IGN1cnIgPSBtX3J1bi5ydGwoKSA/IGN1cnIgLSAxIDogY3VyciArIDE7Ci0gICAgICAgIGlmIChj
dXJyID09IGVuZCkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGZvbnREYXRhID0gbmV4
dEZvbnREYXRhOwotICAgICAgICBpc1NtYWxsQ2FwcyA9IG5leHRJc1NtYWxsQ2FwczsKLSAgICAg
ICAgaW50IGluZGV4ID0gY3VyciAtIGNwOwotICAgICAgICBVQ2hhciBjID0gKmN1cnI7Ci0KLSAg
ICAgICAgYm9vbCBmb3JjZVNtYWxsQ2FwcyA9IGlzU21hbGxDYXBzICYmIChVX0dFVF9HQ19NQVNL
KGMpICYgVV9HQ19NX01BU0spOwotICAgICAgICBuZXh0Rm9udERhdGEgPSBtX2ZvbnQuZ2x5cGhE
YXRhRm9yQ2hhcmFjdGVyKCpjdXJyLCBmYWxzZSwgZm9yY2VTbWFsbENhcHMgPyBTbWFsbENhcHNW
YXJpYW50IDogQXV0b1ZhcmlhbnQpLmZvbnQ7Ci0gICAgICAgIGlmIChtX2ZvbnQuaXNTbWFsbENh
cHMoKSkgewotICAgICAgICAgICAgbmV4dElzU21hbGxDYXBzID0gZm9yY2VTbWFsbENhcHMgfHwg
KG5ld0MgPSB1X3RvdXBwZXIoYykpICE9IGM7Ci0gICAgICAgICAgICBpZiAobmV4dElzU21hbGxD
YXBzKQotICAgICAgICAgICAgICAgIHNtYWxsQ2Fwc0J1ZmZlcltpbmRleF0gPSBmb3JjZVNtYWxs
Q2FwcyA/IGMgOiBuZXdDOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1fZmFsbGJhY2tGb250
cyAmJiBmb250RGF0YSAmJiBuZXh0Rm9udERhdGEgIT0gZm9udERhdGEgJiYgZm9udERhdGEgIT0g
Jm1fZm9udC5wcmltYXJ5Rm9udCgpKQotICAgICAgICAgICAgbV9mYWxsYmFja0ZvbnRzLT5hZGQo
Zm9udERhdGEpOwotCi0gICAgICAgIGlmIChuZXh0Rm9udERhdGEgIT0gZm9udERhdGEgfHwgbmV4
dElzU21hbGxDYXBzICE9IGlzU21hbGxDYXBzKSB7Ci0gICAgICAgICAgICBpbnQgaXRlbVN0YXJ0
ID0gbV9ydW4ucnRsKCkgPyBpbmRleCArIDEgOiBpbmRleE9mRm9udFRyYW5zaXRpb247Ci0gICAg
ICAgICAgICBpbnQgaXRlbUxlbmd0aCA9IG1fcnVuLnJ0bCgpID8gaW5kZXhPZkZvbnRUcmFuc2l0
aW9uIC0gaW5kZXggOiBpbmRleCAtIGluZGV4T2ZGb250VHJhbnNpdGlvbjsKLSAgICAgICAgICAg
IG1fY3VycmVudENoYXJhY3RlciA9IGJhc2VDaGFyYWN0ZXIgKyBpdGVtU3RhcnQ7Ci0gICAgICAg
ICAgICBpdGVtaXplU2hhcGVBbmRQbGFjZSgoaXNTbWFsbENhcHMgPyBzbWFsbENhcHNCdWZmZXIu
ZGF0YSgpIDogY3ApICsgaXRlbVN0YXJ0LCBpdGVtU3RhcnQsIGl0ZW1MZW5ndGgsIGZvbnREYXRh
LCBnbHlwaEJ1ZmZlcik7Ci0gICAgICAgICAgICBpbmRleE9mRm9udFRyYW5zaXRpb24gPSBpbmRl
eDsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBpbnQgaXRlbUxlbmd0aCA9IG1fcnVuLnJ0
bCgpID8gaW5kZXhPZkZvbnRUcmFuc2l0aW9uICsgMSA6IGxlbmd0aCAtIGluZGV4T2ZGb250VHJh
bnNpdGlvbjsKLSAgICBpZiAoaXRlbUxlbmd0aCkgewotICAgICAgICBpZiAobV9mYWxsYmFja0Zv
bnRzICYmIG5leHRGb250RGF0YSAmJiBuZXh0Rm9udERhdGEgIT0gJm1fZm9udC5wcmltYXJ5Rm9u
dCgpKQotICAgICAgICAgICAgbV9mYWxsYmFja0ZvbnRzLT5hZGQobmV4dEZvbnREYXRhKTsKLQot
ICAgICAgICBpbnQgaXRlbVN0YXJ0ID0gbV9ydW4ucnRsKCkgPyAwIDogaW5kZXhPZkZvbnRUcmFu
c2l0aW9uOwotICAgICAgICBtX2N1cnJlbnRDaGFyYWN0ZXIgPSBiYXNlQ2hhcmFjdGVyICsgaXRl
bVN0YXJ0OwotICAgICAgICBpdGVtaXplU2hhcGVBbmRQbGFjZSgobmV4dElzU21hbGxDYXBzID8g
c21hbGxDYXBzQnVmZmVyLmRhdGEoKSA6IGNwKSArIGl0ZW1TdGFydCwgaXRlbVN0YXJ0LCBpdGVt
TGVuZ3RoLCBuZXh0Rm9udERhdGEsIGdseXBoQnVmZmVyKTsKLSAgICB9Ci0KLSAgICBtX2N1cnJl
bnRDaGFyYWN0ZXIgPSBiYXNlQ2hhcmFjdGVyICsgbGVuZ3RoOwotfQotCi12b2lkIFVuaXNjcmli
ZUNvbnRyb2xsZXI6Oml0ZW1pemVTaGFwZUFuZFBsYWNlKGNvbnN0IFVDaGFyKiBjcCwgdW5zaWdu
ZWQgc3RyaW5nT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IEZvbnQqIGZvbnREYXRhLCBH
bHlwaEJ1ZmZlciogZ2x5cGhCdWZmZXIpCi17Ci0gICAgLy8gU2NyaXB0SXRlbWl6ZSAoaW4gV2lu
ZG93cyBYUCB2ZXJzaW9ucyBwcmlvciB0byBTUDIpIGNhbiBvdmVyZmxvdyBieSAxLiAgVGhpcyBp
cyB3aHkgdGhlcmUgaXMgYW4gZXh0cmEgZW1wdHkgaXRlbQotICAgIC8vIGhhbmdpbmcgb3V0IGF0
IHRoZSBlbmQgb2YgdGhlIGFycmF5Ci0gICAgbV9pdGVtcy5yZXNpemUoNik7Ci0gICAgaW50IG51
bUl0ZW1zID0gMDsKLSAgICBIUkVTVUxUIHJjID0gU19PSzsKLSAgICB3aGlsZSAocmMgPSA6OlNj
cmlwdEl0ZW1pemUod2NoYXJGcm9tKGNwKSwgbGVuZ3RoLCBtX2l0ZW1zLnNpemUoKSAtIDEsICZt
X2NvbnRyb2wsICZtX3N0YXRlLCBtX2l0ZW1zLmRhdGEoKSwgJm51bUl0ZW1zKSA9PSBFX09VVE9G
TUVNT1JZKSB7Ci0gICAgICAgIG1faXRlbXMucmVzaXplKG1faXRlbXMuc2l6ZSgpICogMik7Ci0g
ICAgICAgIHJlc2V0Q29udHJvbEFuZFN0YXRlKCk7Ci0gICAgfQotICAgIGlmIChGQUlMRUQocmMp
KSB7Ci0gICAgICAgIFdURkxvZ0Fsd2F5cygiVW5pc2NyaWJlQ29udHJvbGxlcjo6aXRlbWl6ZVNo
YXBlQW5kUGxhY2U6IFNjcmlwdEl0ZW1pemUgZmFpbGVkLCByYz0lbHgiLCByYyk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgbV9pdGVtcy5yZXNpemUobnVtSXRlbXMgKyAxKTsKLQotICAg
IGlmIChtX3J1bi5ydGwoKSkgewotICAgICAgICBmb3IgKGludCBpID0gbV9pdGVtcy5zaXplKCkg
LSAyOyBpID49IDA7IGktLSkgewotICAgICAgICAgICAgaWYgKCFzaGFwZUFuZFBsYWNlSXRlbShj
cCwgc3RyaW5nT2Zmc2V0LCBpLCBmb250RGF0YSwgZ2x5cGhCdWZmZXIpKQotICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBtX2l0ZW1zLnNpemUoKSAtIDE7IGkrKykgewotICAgICAgICAgICAgaWYg
KCFzaGFwZUFuZFBsYWNlSXRlbShjcCwgc3RyaW5nT2Zmc2V0LCBpLCBmb250RGF0YSwgZ2x5cGhC
dWZmZXIpKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLX0KLQot
dm9pZCBVbmlzY3JpYmVDb250cm9sbGVyOjpyZXNldENvbnRyb2xBbmRTdGF0ZSgpCi17Ci0gICAg
bWVtc2V0KCZtX2NvbnRyb2wsIDAsIHNpemVvZihTQ1JJUFRfQ09OVFJPTCkpOwotICAgIG1lbXNl
dCgmbV9zdGF0ZSwgMCwgc2l6ZW9mKFNDUklQVF9TVEFURSkpOwotCi0gICAgLy8gU2V0IHVwIHRo
ZSBjb3JyZWN0IGRpcmVjdGlvbiBmb3IgdGhlIHJ1bi4KLSAgICBtX3N0YXRlLnVCaWRpTGV2ZWwg
PSBtX3J1bi5ydGwoKTsKLSAgICAKLSAgICAvLyBMb2NrIHRoZSBjb3JyZWN0IGRpcmVjdGlvbmFs
IG92ZXJyaWRlLgotICAgIG1fc3RhdGUuZk92ZXJyaWRlRGlyZWN0aW9uID0gbV9ydW4uZGlyZWN0
aW9uYWxPdmVycmlkZSgpOwotfQotCi1ib29sIFVuaXNjcmliZUNvbnRyb2xsZXI6OnNoYXBlQW5k
UGxhY2VJdGVtKGNvbnN0IFVDaGFyKiBjcCwgdW5zaWduZWQgc3RyaW5nT2Zmc2V0LCB1bnNpZ25l
ZCBpLCBjb25zdCBGb250KiBmb250RGF0YSwgR2x5cGhCdWZmZXIqIGdseXBoQnVmZmVyKQotewot
ICAgIC8vIERldGVybWluZSB0aGUgc3RyaW5nIGZvciB0aGlzIGl0ZW0uCi0gICAgY29uc3QgVUNo
YXIqIHN0ciA9IGNwICsgbV9pdGVtc1tpXS5pQ2hhclBvczsKLSAgICBpbnQgbGVuID0gbV9pdGVt
c1tpKzFdLmlDaGFyUG9zIC0gbV9pdGVtc1tpXS5pQ2hhclBvczsKLSAgICBTQ1JJUFRfSVRFTSBp
dGVtID0gbV9pdGVtc1tpXTsKLQotICAgIC8vIFNldCB1cCBidWZmZXJzIHRvIGhvbGQgdGhlIHJl
c3VsdHMgb2Ygc2hhcGluZyB0aGUgaXRlbS4KLSAgICBWZWN0b3I8V09SRD4gZ2x5cGhzOwotICAg
IFZlY3RvcjxXT1JEPiBjbHVzdGVyczsKLSAgICBWZWN0b3I8U0NSSVBUX1ZJU0FUVFI+IHZpc3Vh
bEF0dHJpYnV0ZXM7Ci0gICAgY2x1c3RlcnMucmVzaXplKGxlbik7Ci0gICAgIAotICAgIC8vIFNo
YXBlIHRoZSBpdGVtLgotICAgIC8vIFRoZSByZWNvbW1lbmRlZCBzaXplIGZvciB0aGUgZ2x5cGgg
YnVmZmVyIGlzIDEuNSAqIHRoZSBjaGFyYWN0ZXIgbGVuZ3RoICsgMTYgaW4gdGhlIHVuaXNjcmli
ZSBkb2NzLgotICAgIC8vIEFwcGFyZW50bHkgdGhpcyBpcyBhIGdvb2Qgc2l6ZSB0byBhdm9pZCBo
YXZpbmcgdG8gbWFrZSByZXBlYXRlZCBjYWxscyB0byBTY3JpcHRTaGFwZS4KLSAgICBnbHlwaHMu
cmVzaXplKDEuNSAqIGxlbiArIDE2KTsKLSAgICB2aXN1YWxBdHRyaWJ1dGVzLnJlc2l6ZShnbHlw
aHMuc2l6ZSgpKTsKLQotICAgIGlmICghc2hhcGUoc3RyLCBsZW4sIGl0ZW0sIGZvbnREYXRhLCBn
bHlwaHMsIGNsdXN0ZXJzLCB2aXN1YWxBdHRyaWJ1dGVzKSkKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0KLSAgICBWZWN0b3I8T3B0aW9uYWw8dW5zaWduZWQ+PiBzdHJpbmdPZmZzZXRzKGdseXBocy5z
aXplKCkpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW47ICsraSkgewotICAgICAg
ICBpZiAoc3RyaW5nT2Zmc2V0c1tjbHVzdGVyc1tpXV0pCi0gICAgICAgICAgICBzdHJpbmdPZmZz
ZXRzW2NsdXN0ZXJzW2ldXSA9IHN0ZDo6bWluKCpzdHJpbmdPZmZzZXRzW2NsdXN0ZXJzW2ldXSwg
aSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHN0cmluZ09mZnNldHNbY2x1c3RlcnNbaV1d
ID0gaTsKLSAgICB9Ci0KLSAgICAvLyBXZSBub3cgaGF2ZSBhIGNvbGxlY3Rpb24gb2YgZ2x5cGhz
LgotICAgIFZlY3RvcjxHT0ZGU0VUPiBvZmZzZXRzOwotICAgIFZlY3RvcjxpbnQ+IGFkdmFuY2Vz
OwotICAgIG9mZnNldHMucmVzaXplKGdseXBocy5zaXplKCkpOwotICAgIGFkdmFuY2VzLnJlc2l6
ZShnbHlwaHMuc2l6ZSgpKTsKLSAgICBIUkVTVUxUIHBsYWNlUmVzdWx0ID0gU2NyaXB0UGxhY2Uo
MCwgZm9udERhdGEtPnNjcmlwdENhY2hlKCksIGdseXBocy5kYXRhKCksIGdseXBocy5zaXplKCks
IHZpc3VhbEF0dHJpYnV0ZXMuZGF0YSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAmaXRlbS5hLCBhZHZhbmNlcy5kYXRhKCksIG9mZnNldHMuZGF0YSgpLCAwKTsKLSAg
ICBpZiAocGxhY2VSZXN1bHQgPT0gRV9QRU5ESU5HKSB7Ci0gICAgICAgIC8vIFRoZSBzY3JpcHQg
Y2FjaGUgaXNuJ3QgcHJpbWVkIHdpdGggZW5vdWdoIGluZm8geWV0LiAgV2UgbmVlZCB0byBzZWxl
Y3Qgb3VyIEhGT05UIGludG8KLSAgICAgICAgLy8gYSBEQyBhbmQgcGFzcyB0aGUgREMgaW4gdG8g
U2NyaXB0UGxhY2UuCi0gICAgICAgIEhXbmREQyBoZGMoMCk7Ci0gICAgICAgIEhGT05UIGhmb250
ID0gZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLmhmb250KCk7Ci0gICAgICAgIEhGT05UIG9sZEZv
bnQgPSAoSEZPTlQpU2VsZWN0T2JqZWN0KGhkYywgaGZvbnQpOwotICAgICAgICBwbGFjZVJlc3Vs
dCA9IFNjcmlwdFBsYWNlKGhkYywgZm9udERhdGEtPnNjcmlwdENhY2hlKCksIGdseXBocy5kYXRh
KCksIGdseXBocy5zaXplKCksIHZpc3VhbEF0dHJpYnV0ZXMuZGF0YSgpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICZpdGVtLmEsIGFkdmFuY2VzLmRhdGEoKSwgb2Zmc2V0cy5k
YXRhKCksIDApOwotICAgICAgICBTZWxlY3RPYmplY3QoaGRjLCBvbGRGb250KTsKLSAgICB9Ci0g
ICAgCi0gICAgaWYgKEZBSUxFRChwbGFjZVJlc3VsdCkgfHwgZ2x5cGhzLmlzRW1wdHkoKSkKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBDb252ZXJ0IGFsbCBjaGFycyB0aGF0IHNob3Vs
ZCBiZSB0cmVhdGVkIGFzIHNwYWNlcyB0byB1c2UgdGhlIHNwYWNlIGdseXBoLgotICAgIC8vIFdl
IGFsc28gY3JlYXRlIGEgbWFwIHRoYXQgYWxsb3dzIHVzIHRvIHF1aWNrbHkgZ28gZnJvbSBzcGFj
ZSBnbHlwaHMgYmFjayB0byB0aGVpciBjb3JyZXNwb25kaW5nIGNoYXJhY3RlcnMuCi0gICAgVmVj
dG9yPGludD4gc3BhY2VDaGFyYWN0ZXJzKGdseXBocy5zaXplKCkpOwotICAgIHNwYWNlQ2hhcmFj
dGVycy5maWxsKC0xKTsKLQotICAgIGNvbnN0IGZsb2F0IGNMb2dpY2FsU2NhbGUgPSBmb250RGF0
YS0+cGxhdGZvcm1EYXRhKCkudXNlR0RJKCkgPyAxLjBmIDogMzIuMGY7Ci0gICAgZmxvYXQgc3Bh
Y2VXaWR0aCA9IGZvbnREYXRhLT5zcGFjZVdpZHRoKCkgLSBmb250RGF0YS0+c3ludGhldGljQm9s
ZE9mZnNldCgpOwotICAgIHVuc2lnbmVkIGxvZ2ljYWxTcGFjZVdpZHRoID0gc3BhY2VXaWR0aCAq
IGNMb2dpY2FsU2NhbGU7Ci0KLSAgICBmb3IgKGludCBrID0gMDsgayA8IGxlbjsgaysrKSB7Ci0g
ICAgICAgIFVDaGFyIGNoID0gKihzdHIgKyBrKTsKLSAgICAgICAgYm9vbCB0cmVhdEFzU3BhY2Ug
PSBGb250Q2FzY2FkZTo6dHJlYXRBc1NwYWNlKGNoKTsKLSAgICAgICAgYm9vbCB0cmVhdEFzWmVy
b1dpZHRoU3BhY2UgPSBGb250Q2FzY2FkZTo6dHJlYXRBc1plcm9XaWR0aFNwYWNlKGNoKTsKLSAg
ICAgICAgaWYgKHRyZWF0QXNTcGFjZSB8fCB0cmVhdEFzWmVyb1dpZHRoU3BhY2UpIHsKLSAgICAg
ICAgICAgIC8vIFN1YnN0aXR1dGUgaW4gdGhlIHNwYWNlIGdseXBoIGF0IHRoZSBhcHByb3ByaWF0
ZSBwbGFjZSBpbiB0aGUgZ2x5cGhzCi0gICAgICAgICAgICAvLyBhcnJheS4KLSAgICAgICAgICAg
IGdseXBoc1tjbHVzdGVyc1trXV0gPSBmb250RGF0YS0+c3BhY2VHbHlwaCgpOwotICAgICAgICAg
ICAgYWR2YW5jZXNbY2x1c3RlcnNba11dID0gdHJlYXRBc1NwYWNlID8gbG9naWNhbFNwYWNlV2lk
dGggOiAwOwotICAgICAgICAgICAgaWYgKHRyZWF0QXNTcGFjZSkKLSAgICAgICAgICAgICAgICBz
cGFjZUNoYXJhY3RlcnNbY2x1c3RlcnNba11dID0gbV9jdXJyZW50Q2hhcmFjdGVyICsgayArIGl0
ZW0uaUNoYXJQb3M7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBQb3B1bGF0ZSBvdXIgZ2x5
cGggYnVmZmVyIHdpdGggdGhpcyBpbmZvcm1hdGlvbi4KLSAgICBib29sIGhhc0V4dHJhU3BhY2lu
ZyA9IG1fZm9udC5sZXR0ZXJTcGFjaW5nKCkgfHwgbV9mb250LndvcmRTcGFjaW5nKCkgfHwgbV9w
YWRkaW5nOwotICAgIAotICAgIGZsb2F0IGxlZnRFZGdlID0gbV9ydW5XaWR0aFNvRmFyOwotCi0g
ICAgZm9yICh1bnNpZ25lZCBrID0gMDsgayA8IGdseXBocy5zaXplKCk7IGsrKykgewotICAgICAg
ICBHbHlwaCBnbHlwaCA9IGdseXBoc1trXTsKLSAgICAgICAgZmxvYXQgYWR2YW5jZSA9IGFkdmFu
Y2VzW2tdIC8gY0xvZ2ljYWxTY2FsZTsKLSAgICAgICAgZmxvYXQgb2Zmc2V0WCA9IG9mZnNldHNb
a10uZHUgLyBjTG9naWNhbFNjYWxlOwotICAgICAgICBmbG9hdCBvZmZzZXRZID0gb2Zmc2V0c1tr
XS5kdiAvIGNMb2dpY2FsU2NhbGU7Ci0KLSAgICAgICAgLy8gTWF0Y2ggQXBwS2l0J3MgcnVsZXMg
Zm9yIHRoZSBpbnRlZ2VyIHZzLiBub24taW50ZWdlciByZW5kZXJpbmcgbW9kZXMuCi0gICAgICAg
IGZsb2F0IHJvdW5kZWRBZHZhbmNlID0gcm91bmRmKGFkdmFuY2UpOwotICAgICAgICBpZiAoIWZv
bnREYXRhLT5wbGF0Zm9ybURhdGEoKS5pc1N5c3RlbUZvbnQoKSkgewotICAgICAgICAgICAgYWR2
YW5jZSA9IHJvdW5kZWRBZHZhbmNlOwotICAgICAgICAgICAgb2Zmc2V0WCA9IHJvdW5kZihvZmZz
ZXRYKTsKLSAgICAgICAgICAgIG9mZnNldFkgPSByb3VuZGYob2Zmc2V0WSk7Ci0gICAgICAgIH0K
LQotICAgICAgICBhZHZhbmNlICs9IGZvbnREYXRhLT5zeW50aGV0aWNCb2xkT2Zmc2V0KCk7Ci0K
LSAgICAgICAgaWYgKGhhc0V4dHJhU3BhY2luZykgewotICAgICAgICAgICAgLy8gSWYgd2UncmUg
YSBnbHlwaCB3aXRoIGFuIGFkdmFuY2UsIGdvIGFoZWFkIGFuZCBhZGQgaW4gbGV0dGVyLXNwYWNp
bmcuCi0gICAgICAgICAgICAvLyBUaGF0IHdheSB3ZSB3ZWVkIG91dCB6ZXJvIHdpZHRoIGx1cmtl
cnMuICBUaGlzIGJlaGF2aW9yIG1hdGNoZXMgdGhlIGZhc3QgdGV4dCBjb2RlIHBhdGguCi0gICAg
ICAgICAgICBpZiAoYWR2YW5jZSAmJiBtX2ZvbnQubGV0dGVyU3BhY2luZygpKQotICAgICAgICAg
ICAgICAgIGFkdmFuY2UgKz0gbV9mb250LmxldHRlclNwYWNpbmcoKTsKLQotICAgICAgICAgICAg
Ly8gSGFuZGxlIGp1c3RpZmljYXRpb24gYW5kIHdvcmQtc3BhY2luZy4KLSAgICAgICAgICAgIGlu
dCBjaGFyYWN0ZXJJbmRleCA9IHNwYWNlQ2hhcmFjdGVyc1trXTsKLSAgICAgICAgICAgIC8vIGNo
YXJhY3RlckluZGV4IGlzIGxlZnQgYXQgdGhlIGluaXRpYWwgdmFsdWUgb2YgLTEgZm9yIGdseXBo
cyB0aGF0IGRvIG5vdCBtYXAgYmFjayB0byB0cmVhdGVkLWFzLXNwYWNlIGNoYXJhY3RlcnMuCi0g
ICAgICAgICAgICBpZiAoY2hhcmFjdGVySW5kZXggIT0gLTEpIHsKLSAgICAgICAgICAgICAgICAv
LyBBY2NvdW50IGZvciBwYWRkaW5nLiBXZWJDb3JlIHVzZXMgc3BhY2UgcGFkZGluZyB0byBqdXN0
aWZ5IHRleHQuCi0gICAgICAgICAgICAgICAgLy8gV2UgZGlzdHJpYnV0ZSB0aGUgc3BlY2lmaWVk
IHBhZGRpbmcgb3ZlciB0aGUgYXZhaWxhYmxlIHNwYWNlcyBpbiB0aGUgcnVuLgotICAgICAgICAg
ICAgICAgIGlmIChtX3BhZGRpbmcpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gVXNlIGxlZnRv
dmVyIHBhZGRpbmcgaWYgbm90IGV2ZW5seSBkaXZpc2libGUgYnkgbnVtYmVyIG9mIHNwYWNlcy4K
LSAgICAgICAgICAgICAgICAgICAgaWYgKG1fcGFkZGluZyA8IG1fcGFkUGVyU3BhY2UpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGFkdmFuY2UgKz0gbV9wYWRkaW5nOwotICAgICAgICAgICAg
ICAgICAgICAgICAgbV9wYWRkaW5nID0gMDsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIG1fcGFkZGluZyAtPSBtX3BhZFBlclNwYWNlOwotICAg
ICAgICAgICAgICAgICAgICAgICAgYWR2YW5jZSArPSBtX3BhZFBlclNwYWNlOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gQWNj
b3VudCBmb3Igd29yZC1zcGFjaW5nLgotICAgICAgICAgICAgICAgIGlmIChjaGFyYWN0ZXJJbmRl
eCA+IDAgJiYgbV9mb250LndvcmRTcGFjaW5nKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgVUNo
YXIgY2FuZGlkYXRlU3BhY2U7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX3J1bi5pczhCaXQo
KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZVNwYWNlID0gKihtX3J1bi5kYXRh
OChjaGFyYWN0ZXJJbmRleCAtIDEpKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgICAgICAgICAgY2FuZGlkYXRlU3BhY2UgPSAqKG1fcnVuLmRhdGExNihjaGFyYWN0
ZXJJbmRleCAtIDEpKTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoIUZvbnRDYXNjYWRlOjp0
cmVhdEFzU3BhY2UoY2FuZGlkYXRlU3BhY2UpKQotICAgICAgICAgICAgICAgICAgICAgICAgYWR2
YW5jZSArPSBtX2ZvbnQud29yZFNwYWNpbmcoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBtX3J1bldpZHRoU29GYXIgKz0gYWR2YW5jZTsK
LQotICAgICAgICAvLyBGSVhNRTogV2UgbmVlZCB0byB0YWtlIHRoZSBHT0ZGU0VUUyBmb3IgY29t
YmluaW5nIGdseXBocyBhbmQgc3RvcmUgdGhlbSBpbiB0aGUgZ2x5cGggYnVmZmVyCi0gICAgICAg
IC8vIGFzIHdlbGwsIHNvIHRoYXQgd2hlbiB0aGUgdGltZSBjb21lcyB0byBkcmF3IHRob3NlIGds
eXBocywgd2UgY2FuIGFwcGx5IHRoZSBhcHByb3ByaWF0ZQotICAgICAgICAvLyB0cmFuc2xhdGlv
bi4KLSAgICAgICAgaWYgKGdseXBoQnVmZmVyKSB7Ci0gICAgICAgICAgICBHbHlwaEJ1ZmZlckFk
dmFuY2Ugb3JpZ2luKG9mZnNldFgsIC1vZmZzZXRZKTsKLSAgICAgICAgICAgIGlmICghZ2x5cGhC
dWZmZXItPmFkdmFuY2VzQ291bnQoKSkKLSAgICAgICAgICAgICAgICBnbHlwaEJ1ZmZlci0+c2V0
SW5pdGlhbEFkdmFuY2Uob3JpZ2luKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICBnbHlwaEJ1ZmZlci0+ZXhwYW5kTGFzdEFkdmFuY2Uob3JpZ2luKTsKLSAgICAgICAgICAgIEds
eXBoQnVmZmVyQWR2YW5jZSBnbHlwaEFkdmFuY2UoLW9yaWdpbi53aWR0aCgpICsgYWR2YW5jZSwg
LW9yaWdpbi5oZWlnaHQoKSk7Ci0gICAgICAgICAgICBnbHlwaEJ1ZmZlci0+YWRkKGdseXBoLCBm
b250RGF0YSwgZ2x5cGhBZHZhbmNlLCBzdHJpbmdPZmZzZXRzW2tdLnZhbHVlT3IoMCkgKyBzdHJp
bmdPZmZzZXQpOwotICAgICAgICB9Ci0KLSAgICAgICAgRmxvYXRSZWN0IGdseXBoQm91bmRzID0g
Zm9udERhdGEtPmJvdW5kc0ZvckdseXBoKGdseXBoKTsKLSAgICAgICAgZ2x5cGhCb3VuZHMubW92
ZShtX2dseXBoT3JpZ2luLngoKSwgbV9nbHlwaE9yaWdpbi55KCkpOwotICAgICAgICBtX21pbkds
eXBoQm91bmRpbmdCb3hYID0gc3RkOjptaW4obV9taW5HbHlwaEJvdW5kaW5nQm94WCwgZ2x5cGhC
b3VuZHMueCgpKTsKLSAgICAgICAgbV9tYXhHbHlwaEJvdW5kaW5nQm94WCA9IHN0ZDo6bWF4KG1f
bWF4R2x5cGhCb3VuZGluZ0JveFgsIGdseXBoQm91bmRzLm1heFgoKSk7Ci0gICAgICAgIG1fbWlu
R2x5cGhCb3VuZGluZ0JveFkgPSBzdGQ6Om1pbihtX21pbkdseXBoQm91bmRpbmdCb3hZLCBnbHlw
aEJvdW5kcy55KCkpOwotICAgICAgICBtX21heEdseXBoQm91bmRpbmdCb3hZID0gc3RkOjptYXgo
bV9tYXhHbHlwaEJvdW5kaW5nQm94WSwgZ2x5cGhCb3VuZHMubWF4WSgpKTsKLSAgICAgICAgbV9n
bHlwaE9yaWdpbi5tb3ZlKGFkdmFuY2UgKyBvZmZzZXRYLCAtb2Zmc2V0WSk7Ci0KLSAgICAgICAg
Ly8gTXV0YXRlIHRoZSBnbHlwaCBhcnJheSB0byBjb250YWluIG91ciBhbHRlcmVkIGFkdmFuY2Vz
LgotICAgICAgICBpZiAobV9jb21wdXRpbmdPZmZzZXRQb3NpdGlvbikKLSAgICAgICAgICAgIGFk
dmFuY2VzW2tdID0gYWR2YW5jZTsKLSAgICB9Ci0KLSAgICB3aGlsZSAobV9jb21wdXRpbmdPZmZz
ZXRQb3NpdGlvbiAmJiBtX29mZnNldFggPj0gbGVmdEVkZ2UgJiYgbV9vZmZzZXRYIDwgbV9ydW5X
aWR0aFNvRmFyKSB7Ci0gICAgICAgIC8vIFRoZSBwb3NpdGlvbiBpcyBzb21ld2hlcmUgaW5zaWRl
IHRoaXMgcnVuLgotICAgICAgICBpbnQgdHJhaWxpbmcgPSAwOwotICAgICAgICBIUkVTVUxUIHJj
ID0gOjpTY3JpcHRYdG9DUChtX29mZnNldFggLSBsZWZ0RWRnZSwgY2x1c3RlcnMuc2l6ZSgpLCBn
bHlwaHMuc2l6ZSgpLCBjbHVzdGVycy5kYXRhKCksIHZpc3VhbEF0dHJpYnV0ZXMuZGF0YSgpLAot
ICAgICAgICAgICAgICAgICAgICBhZHZhbmNlcy5kYXRhKCksICZpdGVtLmEsICZtX29mZnNldFBv
c2l0aW9uLCAmdHJhaWxpbmcpOwotICAgICAgICBpZiAoRkFJTEVEKHJjKSkgewotICAgICAgICAg
ICAgV1RGTG9nQWx3YXlzKCJVbmlzY3JpYmVDb250cm9sbGVyOjpzaGFwZUFuZFBsYWNlSXRlbTog
U2NyaXB0WHRvQ1AgZmFpbGVkIHJjPSVseCIsIHJjKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICB9Ci0gICAgICAgIGlmICh0cmFpbGluZyAmJiBtX2luY2x1ZGVQYXJ0aWFsR2x5
cGhzICYmIG1fb2Zmc2V0UG9zaXRpb24gPCBsZW4gLSAxKSB7Ci0gICAgICAgICAgICBtX29mZnNl
dFBvc2l0aW9uICs9IG1fY3VycmVudENoYXJhY3RlciArIG1faXRlbXNbaV0uaUNoYXJQb3M7Ci0g
ICAgICAgICAgICBtX29mZnNldFggKz0gbV9ydW4ucnRsKCkgPyAtdHJhaWxpbmcgOiB0cmFpbGlu
ZzsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1fY29tcHV0aW5nT2Zmc2V0UG9zaXRp
b24gPSBmYWxzZTsKLSAgICAgICAgICAgIG1fb2Zmc2V0UG9zaXRpb24gKz0gbV9jdXJyZW50Q2hh
cmFjdGVyICsgbV9pdGVtc1tpXS5pQ2hhclBvczsKLSAgICAgICAgICAgIGlmICh0cmFpbGluZyAm
JiBtX2luY2x1ZGVQYXJ0aWFsR2x5cGhzKQotICAgICAgICAgICAgICAgbV9vZmZzZXRQb3NpdGlv
bisrOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgVW5pc2NyaWJlQ29udHJvbGxlcjo6c2hhcGUoY29uc3Qg
VUNoYXIqIHN0ciwgaW50IGxlbiwgU0NSSVBUX0lURU0gaXRlbSwgY29uc3QgRm9udCogZm9udERh
dGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxXT1JEPiYgZ2x5cGhz
LCBWZWN0b3I8V09SRD4mIGNsdXN0ZXJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBWZWN0b3I8U0NSSVBUX1ZJU0FUVFI+JiB2aXN1YWxBdHRyaWJ1dGVzKQotewotICAgIEhXbmRE
QyBoZGM7Ci0gICAgSEZPTlQgb2xkRm9udCA9IDA7Ci0gICAgSFJFU1VMVCBzaGFwZVJlc3VsdCA9
IEVfUEVORElORzsKLSAgICBpbnQgZ2x5cGhDb3VudCA9IDA7Ci0KLSAgICBpZiAoIWZvbnREYXRh
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBkbyB7Ci0gICAgICAgIHNoYXBlUmVzdWx0
ID0gU2NyaXB0U2hhcGUoaGRjLCBmb250RGF0YS0+c2NyaXB0Q2FjaGUoKSwgd2NoYXJGcm9tKHN0
ciksIGxlbiwgZ2x5cGhzLnNpemUoKSwgJml0ZW0uYSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnbHlwaHMuZGF0YSgpLCBjbHVzdGVycy5kYXRhKCksIHZpc3VhbEF0dHJpYnV0
ZXMuZGF0YSgpLCAmZ2x5cGhDb3VudCk7Ci0gICAgICAgIGlmIChzaGFwZVJlc3VsdCA9PSBFX1BF
TkRJTkcpIHsKLSAgICAgICAgICAgIC8vIFRoZSBzY3JpcHQgY2FjaGUgaXNuJ3QgcHJpbWVkIHdp
dGggZW5vdWdoIGluZm8geWV0LiAgV2UgbmVlZCB0byBzZWxlY3Qgb3VyIEhGT05UIGludG8KLSAg
ICAgICAgICAgIC8vIGEgREMgYW5kIHBhc3MgdGhlIERDIGluIHRvIFNjcmlwdFNoYXBlLgotICAg
ICAgICAgICAgQVNTRVJUKCFoZGMpOwotICAgICAgICAgICAgaGRjLnNldEhXbmQoMCk7Ci0gICAg
ICAgICAgICBIRk9OVCBoZm9udCA9IGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5oZm9udCgpOwot
ICAgICAgICAgICAgb2xkRm9udCA9IChIRk9OVClTZWxlY3RPYmplY3QoaGRjLCBoZm9udCk7Ci0g
ICAgICAgIH0gZWxzZSBpZiAoc2hhcGVSZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkgewotICAgICAg
ICAgICAgLy8gTmVlZCB0byByZXNpemUgb3VyIGJ1ZmZlcnMuCi0gICAgICAgICAgICBnbHlwaHMu
cmVzaXplKGdseXBocy5zaXplKCkgKiAyKTsKLSAgICAgICAgICAgIHZpc3VhbEF0dHJpYnV0ZXMu
cmVzaXplKGdseXBocy5zaXplKCkpOwotICAgICAgICB9Ci0gICAgfSB3aGlsZSAoc2hhcGVSZXN1
bHQgPT0gRV9QRU5ESU5HIHx8IHNoYXBlUmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOwotCi0gICAg
aWYgKGhkYykKLSAgICAgICAgU2VsZWN0T2JqZWN0KGhkYywgb2xkRm9udCk7Ci0KLSAgICBpZiAo
RkFJTEVEKHNoYXBlUmVzdWx0KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZ2x5cGhz
LnNocmluayhnbHlwaENvdW50KTsKLSAgICB2aXN1YWxBdHRyaWJ1dGVzLnNocmluayhnbHlwaENv
dW50KTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vVW5pc2NyaWJlQ29udHJvbGxlci5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1VuaXNjcmliZUNvbnRyb2xsZXIuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTQ2MjRjNzlhMDgwODMzMjBhNTI3MzVkZTExZGM5
NGE4YmM0ZmYwMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vVW5pc2NyaWJlQ29udHJvbGxl
ci5oCisrKyAvZGV2L251bGwKQEAgLTEsOTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNywgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpZm5kZWYgVW5pc2NyaWJlQ29udHJvbGxlcl9oCi0jZGVmaW5lIFVuaXNjcmli
ZUNvbnRyb2xsZXJfaAotCi0jaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKLSNpbmNsdWRlICJHbHlw
aEJ1ZmZlci5oIgotI2luY2x1ZGUgPHVzcDEwLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFVuaXNjcmliZUNvbnRyb2xsZXIgewotcHVi
bGljOgotICAgIFVuaXNjcmliZUNvbnRyb2xsZXIoY29uc3QgRm9udENhc2NhZGUqLCBjb25zdCBU
ZXh0UnVuJiwgSGFzaFNldDxjb25zdCBGb250Kj4qIGZhbGxiYWNrRm9udHMgPSAwKTsKLQotICAg
IC8vIEFkdmFuY2UgYW5kIG1lYXN1cmUvcGxhY2UgdXAgdG8gdGhlIHNwZWNpZmllZCBjaGFyYWN0
ZXIuCi0gICAgdm9pZCBhZHZhbmNlKHVuc2lnbmVkIHRvLCBHbHlwaEJ1ZmZlciogPSAwKTsKLQot
ICAgIC8vIENvbXB1dGUgdGhlIGNoYXJhY3RlciBvZmZzZXQgZm9yIGEgZ2l2ZW4geCBjb29yZGlu
YXRlLgotICAgIGludCBvZmZzZXRGb3JQb3NpdGlvbihpbnQgeCwgYm9vbCBpbmNsdWRlUGFydGlh
bEdseXBocyk7Ci0KLSAgICAvLyBSZXR1cm5zIHRoZSB3aWR0aCBvZiBldmVyeXRoaW5nIHdlJ3Zl
IGNvbnN1bWVkIHNvIGZhci4KLSAgICBmbG9hdCBydW5XaWR0aFNvRmFyKCkgY29uc3QgeyByZXR1
cm4gbV9ydW5XaWR0aFNvRmFyOyB9Ci0KLSAgICBmbG9hdCBtaW5HbHlwaEJvdW5kaW5nQm94WCgp
IGNvbnN0IHsgcmV0dXJuIG1fbWluR2x5cGhCb3VuZGluZ0JveFg7IH0KLSAgICBmbG9hdCBtYXhH
bHlwaEJvdW5kaW5nQm94WCgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4R2x5cGhCb3VuZGluZ0JveFg7
IH0KLSAgICBmbG9hdCBtaW5HbHlwaEJvdW5kaW5nQm94WSgpIGNvbnN0IHsgcmV0dXJuIG1fbWlu
R2x5cGhCb3VuZGluZ0JveFk7IH0KLSAgICBmbG9hdCBtYXhHbHlwaEJvdW5kaW5nQm94WSgpIGNv
bnN0IHsgcmV0dXJuIG1fbWF4R2x5cGhCb3VuZGluZ0JveFk7IH0KLQotcHJpdmF0ZTogICAgCi0g
ICAgdm9pZCByZXNldENvbnRyb2xBbmRTdGF0ZSgpOwotCi0gICAgdm9pZCBpdGVtaXplU2hhcGVB
bmRQbGFjZShjb25zdCBVQ2hhciosIHVuc2lnbmVkIHN0cmluZ09mZnNldCwgdW5zaWduZWQgbGVu
Z3RoLCBjb25zdCBGb250KiwgR2x5cGhCdWZmZXIqKTsKLSAgICBib29sIHNoYXBlQW5kUGxhY2VJ
dGVtKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQgc3RyaW5nT2Zmc2V0LCB1bnNpZ25lZCBpbmRleCwg
Y29uc3QgRm9udCosIEdseXBoQnVmZmVyKik7Ci0gICAgYm9vbCBzaGFwZShjb25zdCBVQ2hhciog
c3RyLCBpbnQgbGVuLCBTQ1JJUFRfSVRFTSwgY29uc3QgRm9udCosCi0gICAgICAgICAgICAgICBW
ZWN0b3I8V09SRD4mIGdseXBocywgVmVjdG9yPFdPUkQ+JiBjbHVzdGVycywKLSAgICAgICAgICAg
ICAgIFZlY3RvcjxTQ1JJUFRfVklTQVRUUj4mIHZpc3VhbEF0dHJpYnV0ZXMpOwotCi0gICAgY29u
c3QgRm9udENhc2NhZGUmIG1fZm9udDsKLSAgICBjb25zdCBUZXh0UnVuJiBtX3J1bjsKLSAgICBI
YXNoU2V0PGNvbnN0IEZvbnQqPiogbV9mYWxsYmFja0ZvbnRzOwotICAgIEZsb2F0UG9pbnQgbV9n
bHlwaE9yaWdpbjsKLSAgICBmbG9hdCBtX21pbkdseXBoQm91bmRpbmdCb3hYOwotICAgIGZsb2F0
IG1fbWF4R2x5cGhCb3VuZGluZ0JveFg7Ci0gICAgZmxvYXQgbV9taW5HbHlwaEJvdW5kaW5nQm94
WTsKLSAgICBmbG9hdCBtX21heEdseXBoQm91bmRpbmdCb3hZOwotCi0gICAgU0NSSVBUX0NPTlRS
T0wgbV9jb250cm9sOwotICAgIFNDUklQVF9TVEFURSBtX3N0YXRlOwotICAgIFZlY3RvcjxTQ1JJ
UFRfSVRFTT4gbV9pdGVtczsKLSAKLSAgICB1bnNpZ25lZCBtX2N1cnJlbnRDaGFyYWN0ZXI7Ci0g
ICAgaW50IG1fZW5kOwotCi0gICAgZmxvYXQgbV9ydW5XaWR0aFNvRmFyOwotICAgIGZsb2F0IG1f
cGFkZGluZzsKLSAgICBmbG9hdCBtX3BhZFBlclNwYWNlOwotCi0gICAgYm9vbCBtX2NvbXB1dGlu
Z09mZnNldFBvc2l0aW9uOwotICAgIGJvb2wgbV9pbmNsdWRlUGFydGlhbEdseXBoczsKLSAgICBm
bG9hdCBtX29mZnNldFg7Ci0gICAgaW50IG1fb2Zmc2V0UG9zaXRpb247Ci19OwotCi19Ci0jZW5k
aWYKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA2
ZTNmNGIzZmQ0YWNjZmY2MGQwYWI0M2U1MjllYWJlNmE1MTY4NGY0Li5hODFmZTVjZGNmNzE2Mjhk
MGM4ZjY2ZjFkOGZiZmM5NzFmNjFlOTgxIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysr
IGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTktMTItMTkgIEZ1amlpIEhp
cm9ub3JpICA8SGlyb25vcmkuRnVqaWlAc29ueS5jb20+CisKKyAgICAgICAgW1dpbl0gVXNlIENv
bXBsZXhUZXh0Q29udHJvbGxlciBpbnN0ZWFkIG9mIFVuaXNjcmliZUNvbnRyb2xsZXIKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNDg4NAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJDb3JlL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHA6IEVuYWJsZWQgdGhlc2Ug
dGVzdHMgZm9yIFBMQVRGT1JNKFdJTikuCisKIDIwMTktMTItMTggIENvbW1pdCBRdWV1ZSAgPGNv
bW1pdC1xdWV1ZUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0
IHIyNTM2NDYuCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUv
Q29tcGxleFRleHRDb250cm9sbGVyLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
Q29yZS9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwCmluZGV4IDkzZmU5MGU5ZDlkMTdjMzE0NjU2
ZWU2MjBlOGUzZTZmMmEwOTdmY2MuLjkyNjhlZmI2ODNiZWY1MTU2NjY4YTE5Nzg1OWU2NTRmZWE3
MTNkMGEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db21w
bGV4VGV4dENvbnRyb2xsZXIuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
Q29yZS9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwCkBAIC0yNSw4ICsyNSw2IEBACiAKICNpbmNs
dWRlICJjb25maWcuaCIKIAotI2lmICFQTEFURk9STShXSU4pCi0KICNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9Jbml0aWFsaXplVGhyZWFkaW5nLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Db21wbGV4
VGV4dENvbnRyb2xsZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZvbnRDYXNjYWRlLmg+CkBAIC0z
NjcsNSArMzY1LDMgQEAgVEVTVF9GKENvbXBsZXhUZXh0Q29udHJvbGxlclRlc3QsIFRvdGFsV2lk
dGhXaXRoSnVzdGlmaWNhdGlvbikKIH0KIAogfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA2MjVhOThiYjc3
ZThiMDA0NGE0MDMyZmYxZmQyYTY3NmMxNzJiY2UwLi4xZDk5NzFiNjA0Nzk2OGUwM2ZlZjI1NmU1
OWNlNDUwYTMxOTJkYjUyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTktMTItMTkgIEZ1amlp
IEhpcm9ub3JpICA8SGlyb25vcmkuRnVqaWlAc29ueS5jb20+CisKKyAgICAgICAgW1dpbl0gVXNl
IENvbXBsZXhUZXh0Q29udHJvbGxlciBpbnN0ZWFkIG9mIFVuaXNjcmliZUNvbnRyb2xsZXIKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNDg4NAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0v
d2luL1Rlc3RFeHBlY3RhdGlvbnM6CisgICAgICAgICogcGxhdGZvcm0vd2luL2Zhc3QvdGV4dC9q
dXN0aWZ5LWlkZW9ncmFwaC1jb21wbGV4LWV4cGVjdGVkLnR4dDogUmViYXNlbGluZWQuCisgICAg
ICAgICogcGxhdGZvcm0vd2luY2Fpcm8vVGVzdEV4cGVjdGF0aW9uczoKKwogMjAxOS0xMi0xOCAg
Unlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBSRUdSRVNTSU9OOiBb
IE1hYyB3azIgXSB0aWxlZC1kcmF3aW5nL3Njcm9sbGluZy9mYXN0LXNjcm9sbC1kaXYtbGF0Y2hl
ZC1tYWluZnJhbWUtd2l0aC1oYW5kbGVyLmh0bWwgaXMgYSBmbGFrZXkgZmFpbHVyZQpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRU
ZXN0cy9wbGF0Zm9ybS93aW4vVGVzdEV4cGVjdGF0aW9ucwppbmRleCA0NWJkZGYzYzU5MzFiMjM4
ZDc1ZjAzY2EzMmJhYzg5YTI3YjE0ZDFkLi4zNDRhYTE1ZWRmNzlhNTE2OTQwZDY1M2ViOTJiNjg1
MTViYzEzNjVjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vVGVzdEV4cGVj
dGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vVGVzdEV4cGVjdGF0aW9ucwpA
QCAtMjk2NSw2ICsyOTY1LDggQEAgd2Via2l0Lm9yZy9iLzE1MTc1OSBmYXN0L2RvbS9XaW5kb3cv
cHJvcGVydHktYWNjZXNzLW9uLWNhY2hlZC13aW5kb3ctYWZ0ZXItZnJhbWUKIAogd2Via2l0Lm9y
Zy9iLzE1MjAwOSBmYXN0L2NhbnZhcy9jYW52YXMtdG9vLWxhcmdlLXRvLWRyYXcuaHRtbCBbIFNr
aXAgXQogCitmYXN0L3RleHQvYXJhYmljLXp3ai1hbmQtenduai5odG1sIFsgSW1hZ2VPbmx5RmFp
bHVyZSBdCisKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIEVuZCBsaXN0IG9mIFVOUkVWSUVXRUQgZmFpbHVyZXMgIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCkBAIC0zNDI2LDYgKzM0MjgsNyBAQCBmYXN0
L3RleHQvY29tcGxleC1zbWFsbC1jYXBzLW5vbi1ibXAtY2FwaXRhbGl6ZS5odG1sIFsgSW1hZ2VP
bmx5RmFpbHVyZSBdCiBmYXN0L3RleHQvY3Vyc2l2ZS16aC5odG1sIFsgSW1hZ2VPbmx5RmFpbHVy
ZSBdCiBmYXN0L3RleHQvZW1vamktc2luZ2xlLXBhcmVudC1mYW1pbHktMi5odG1sIFsgSW1hZ2VP
bmx5RmFpbHVyZSBdCiBmYXN0L3RleHQvZW1vamktc2luZ2xlLXBhcmVudC1mYW1pbHkuaHRtbCBb
IEltYWdlT25seUZhaWx1cmUgXQorZmFzdC90ZXh0L2Vtb2ppLXdpdGgtam9pbmVyLmh0bWwgWyBG
YWlsdXJlIF0KIGh0dHAvdGVzdHMvc2VjdXJpdHkvaHR0cC0wLjkvaW1hZ2Utb24tSFRUUC0wLjkt
ZGVmYXVsdC1wb3J0LXBhZ2UtYWxsb3dlZC1yZWYtdGVzdC5odG1sIFsgSW1hZ2VPbmx5RmFpbHVy
ZSBdCiBtYXRobWwvcHJlc2VudGF0aW9uL25vbi1ibXAtb3BlcmF0b3JzLXN0cmV0Y2hpbmcuaHRt
bCBbIEltYWdlT25seUZhaWx1cmUgXQogc2VjdXJpdHkvY29udGVudFNlY3VyaXR5UG9saWN5L2lt
YWdlLXdpdGgtYmxvYi11cmwtYWxsb3dlZC1ieS1pbWctc3JjLXN0YXItd2l0aC1BbGxvd0NvbnRl
bnRTZWN1cml0eVBvbGljeVNvdXJjZVN0YXJUb01hdGNoQW55UHJvdG9jb2wtZW5hYmxlZC5odG1s
IFsgSW1hZ2VPbmx5RmFpbHVyZSBdCkBAIC00NTA2LDMgKzQ1MDksOCBAQCB3ZWJraXQub3JnL2Iv
MjA0OTc0IGh0dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qvc3luYy14aHItaW4tdW5sb2FkLmh0bWwg
WyBGYWlsdXJlCiB3ZWJraXQub3JnL2IvMjA1MjcyIGpzL2ludGVnZXItZGl2aXNpb24tbmVnMnRv
dGhlMzItYnktbmVnMS5odG1sIFsgRmFpbHVyZSBdCiAKIHdlYmtpdC5vcmcvYi8yMDUyNzMgaW1w
b3J0ZWQvYmxpbmsvZmFzdC9zdWItcGl4ZWwvbmVnYXRpdmUtY29tcG9zaXRlZC1vZmZzZXQuaHRt
bCBbIFBhc3MgSW1hZ2VPbmx5RmFpbHVyZSBdCisKK3dlYmtpdC5vcmcvYi8yMDU0ODYgZmFzdC90
ZXh0L2F0c3VpLXJ0bC1vdmVycmlkZS1zZWxlY3Rpb24uaHRtbCBbIEZhaWx1cmUgXQord2Via2l0
Lm9yZy9iLzIwNTQ4NyBmYXN0L3RleHQvc2VsZWN0aW9uLWluLWluaXRpYWwtYWR2YW5jZS1yZWdp
b24uaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIwNTQ4NSBmYXN0L3RleHQvc3RhbGUt
VGV4dExheW91dC1mcm9tLWZpcnN0LWxpbmUuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQord2Vi
a2l0Lm9yZy9iLzIwNTQ4NiBpbXBvcnRlZC9ibGluay9lZGl0aW5nL3NlbGVjdGlvbi9vZmZzZXQt
ZnJvbS1wb2ludC1jb21wbGV4LXNjcmlwdHMuaHRtbCBbIEZhaWx1cmUgXQpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL2Zhc3QvdGV4dC9qdXN0aWZ5LWlkZW9ncmFwaC1jb21w
bGV4LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9mYXN0L3RleHQvanVz
dGlmeS1pZGVvZ3JhcGgtY29tcGxleC1leHBlY3RlZC50eHQKaW5kZXggZjEwMTk0MjQzNTUyZTg1
N2ZhNTE5OWFhMmFmZDg2OTFmZTdmNzYwNy4uYWQ4NTY0MzEwOTFhNTU2MDU2YzBkODk2MDFiMDlj
NmVmYWZkZjcxOSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL2Zhc3QvdGV4
dC9qdXN0aWZ5LWlkZW9ncmFwaC1jb21wbGV4LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS93aW4vZmFzdC90ZXh0L2p1c3RpZnktaWRlb2dyYXBoLWNvbXBsZXgtZXhwZWN0
ZWQudHh0CkBAIC0xNiw4ICsxNiw4IEBAIGxheWVyIGF0ICgwLDApIHNpemUgODAweDYwMAogICAg
ICAgICAgIHRleHQgcnVuIGF0ICgwLDMwKSB3aWR0aCAzODI6ICJceHs1MTJBfVx4ezc1NzB9XHh7
NzY4NH1ceHs4ODRDfVx4ezUyRDV9XHh7NjFDOX1ceHs3NTI4fVx4ezdBMEJ9XHh7NUYwRn1ceHs1
RTczfVx4ezUzRjB9XHh7RkYwQ31ceHs1QkEyfVx4ezYyMzZ9XHh7NEU1Rn1ceHs5NzVFfVx4ezVF
Mzh9XHh7NTU5Q31ceHs2MTFCfVx4ezk1OEJ9XHh7NzY3Q31ceHs0RUJBfVx4ezU0RTF9XHh7NjI0
MH1ceHs1Mjc1fVx4ezRGNUN9XHh7NzY4NH1ceHs2MUM5fVx4ezc1Mjh9XHh7N0EwQn1ceHs1RjBG
fVx4ezMwMDJ9XHh7MzAwRH0iCiAgICAgICBSZW5kZXJCbG9jayB7UH0gYXQgKDAsMTI5KSBzaXpl
IDU1MHg0NQogICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSA1NTB4NDUK
LSAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCA1NTA6ICJFQSBNb2JpbGUgXHh7NzY4
NH0gV29ybGR3aWRlIFN0dWRpb3MgXHh7NTI2Rn1ceHs3RTNEfVx4ezg4QzF9IFRyYXZpcyBCb2F0
bWFuIFx4ezYzMDd9XHh7NTFGQX1ceHtGRjFBfVx4ezMwMEN9QXBwIFN0b3JlIFx4ezRFMER9XHh7
NTBDNX1ceHs1RkI5fVx4ezVFOTV9XHh7NjUzOX1ceHs4QjhBfVx4ezRFODZ9XHh7ODg0Q31ceHs1
MkQ1fVx4ezkwNEF9XHh7NjIzMn0iCi0gICAgICAgICAgdGV4dCBydW4gYXQgKDAsMTUpIHdpZHRo
IDU1MDogIlx4ezc1MjJ9XHh7Njk2RH1ceHs3Njg0fVx4ezc1MUZ9XHh7NjE0Qn1ceHtGRjBDfVx4
ezgwMEN9XHh7NEUxNH1ceHs5MDg0fVx4ezU3Mjh9XHh7NjMwMX1ceHs3RThDfVx4ezZGMTR9XHh7
OTAzMn1ceHszMDAyfVx4ezY3MDl9XHh7NEU4Nn1ceHs1MTY4fVx4ezc0MDN9IDUgXHh7NTM0M31c
eHs1OTFBfVx4ezg0MkN9XHh7NzY4NH0gaVBob25lIFx4ezU0OEN9IGlQb2QgdG91Y2ggXHh7NUJB
Mn1ceHs2MjM2fVx4ezcwQkF9XHh7NTdGQX1ceHs3OTBFfVx4e0ZGMEN9QXBwIFN0b3JlIgorICAg
ICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDU1MDogIkVBIE1vYmlsZSBceHs3Njg0fSBX
b3JsZHdpZGUgU3R1ZGlvcyBceHs1MjZGfVx4ezdFM0R9XHh7ODhDMX0gVHJhdmlzIEJvYXRtYW4g
XHh7NjMwN31ceHs1MUZBfVx4e0ZGMUF9XHh7MzAwQ31BcHAgU3RvcmUgXHh7NEUwRH1ceHs1MEM1
fVx4ezVGQjl9XHh7NUU5NX1ceHs2NTM5fVx4ezhCOEF9XHh7NEU4Nn1ceHs4ODRDfVx4ezUyRDV9
XHh7OTA0QX0iCisgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMTUpIHdpZHRoIDU1MDogIlx4ezYy
MzJ9XHh7NzUyMn1ceHs2OTZEfVx4ezc2ODR9XHh7NzUxRn1ceHs2MTRCfVx4e0ZGMEN9XHh7ODAw
Q31ceHs0RTE0fVx4ezkwODR9XHh7NTcyOH1ceHs2MzAxfVx4ezdFOEN9XHh7NkYxNH1ceHs5MDMy
fVx4ezMwMDJ9XHh7NjcwOX1ceHs0RTg2fVx4ezUxNjh9XHh7NzQwM30gNSBceHs1MzQzfVx4ezU5
MUF9XHh7ODQyQ31ceHs3Njg0fSBpUGhvbmUgXHh7NTQ4Q30gaVBvZCB0b3VjaCBceHs1QkEyfVx4
ezYyMzZ9XHh7NzBCQX1ceHs1N0ZBfVx4ezc5MEV9XHh7RkYwQ31BcHAgU3RvcmUiCiAgICAgICAg
ICAgdGV4dCBydW4gYXQgKDAsMzApIHdpZHRoIDMwMTogIlx4ezhCOTN9XHh7NjIxMX1ceHs1MDEx
fVx4ezgwRkR9XHh7NTkyMH1ceHs5NThCfVx4ezc2N0N9XHh7NTNEN31ceHs1MjMwfVx4ezVFRTN9
XHh7NTkyN31ceHs3Njg0fVx4ezVCQTJ9XHh7NjIzNn1ceHs1NTlDfVx4ezYxMUJ9XHh7NzY4NH1c
eHs5QUQ4fVx4ezU0QzF9XHh7OENFQX0gRUEgXHh7OTA0QX1ceHs2MjMyfVx4ezMwMDJ9XHh7MzAw
RH0iCiAgICAgICBSZW5kZXJCbG9jayB7UH0gYXQgKDAsMTg2KSBzaXplIDU1MHg0NQogICAgICAg
ICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSA1NTB4NDUKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3BsYXRmb3JtL3dpbmNhaXJvL1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS93aW5jYWlyby9UZXN0RXhwZWN0YXRpb25zCmluZGV4IDg0OGMxZDdhY2M5NmQ2
NGJiOTAxYWNiMDFiZWFiMWFiNDZhZDE2NjkuLmYzZmM4ZmQxMzEwZjc3YjRhZGZkY2Y1MDMxNzFm
OGEzMzZjYzU5ZmEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbmNhaXJvL1Rl
c3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luY2Fpcm8vVGVzdEV4
cGVjdGF0aW9ucwpAQCAtODI5LDYgKzgyOSwxMSBAQCBmYXN0L2RvbS9mb2N1cy1zaGlmdC1jcmFz
aC5odG1sIFsgUGFzcyBUaW1lb3V0IF0KIGZhc3QvZG9tL1JhbmdlL2RldGFjaC1yYW5nZS1kdXJp
bmctZGVsZXRlY29udGVudHMuaHRtbCBbIFBhc3MgVGltZW91dCBdCiBpbXBvcnRlZC9ibGluay9m
YXN0L2RvbS9XaW5kb3cvb3Blbi13aW5kb3ctZmVhdHVyZXMtZnV6ei5odG1sIFsgUGFzcyBUaW1l
b3V0IF0KIAord2Via2l0Lm9yZy9iLzIwNTQ4NiBmYXN0L3RleHQvYXRzdWktcnRsLW92ZXJyaWRl
LXNlbGVjdGlvbi5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjA1NDg3IGZhc3QvdGV4
dC9zZWxlY3Rpb24taW4taW5pdGlhbC1hZHZhbmNlLXJlZ2lvbi5odG1sIFsgRmFpbHVyZSBdCit3
ZWJraXQub3JnL2IvMjA1NDg1IGZhc3QvdGV4dC9zdGFsZS1UZXh0TGF5b3V0LWZyb20tZmlyc3Qt
bGluZS5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjA1NDg2IGltcG9y
dGVkL2JsaW5rL2VkaXRpbmcvc2VsZWN0aW9uL29mZnNldC1mcm9tLXBvaW50LWNvbXBsZXgtc2Ny
aXB0cy5odG1sIFsgRmFpbHVyZSBdCisKICMvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8KICMgaHR0cAogIy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwpAQCAtMTExOSw3
ICsxMTI0LDYgQEAgbGVnYWN5LWFuaW1hdGlvbi1lbmdpbmUvY29tcG9zaXRpbmcvYmFja2luZy9i
YWNraW5nLXN0b3JlLWF0dGFjaG1lbnQtZW1wdHkta2V5ZnIKICMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjCiAKIHdlYmtpdC5vcmcvYi8xMTczMjIgZmFzdC9jc3MvdGV4dC1pbmRlbnQtZmlyc3QtbGlu
ZS0wMDYuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQotd2Via2l0Lm9yZy9iLzExNzMyMiBmYXN0
L2Nzcy93b3JkLXNwYWNpbmctY2hhcmFjdGVycy1jb21wbGV4LXRleHQuaHRtbCBbIEltYWdlT25s
eUZhaWx1cmUgXQogZmFzdC9jc3MvZ2V0Q29tcHV0ZWRTdHlsZS9nZXRDb21wdXRlZFN0eWxlLW91
dGxpbmUtc2hvcnRoYW5kLmh0bWwgWyBQYXNzIFRpbWVvdXQgXQogd2Via2l0Lm9yZy9iLzEzNjQ4
NCBmYXN0L2Nzcy1nZW5lcmF0ZWQtY29udGVudC9pbml0aWFsLWxldHRlci1iYXNpYy5odG1sIFsg
UGFzcyBGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi8xMzY0ODQgZmFzdC9jc3MtZ2VuZXJhdGVkLWNv
bnRlbnQvaW5pdGlhbC1sZXR0ZXItYm9yZGVyLXBhZGRpbmcuaHRtbCBbIFBhc3MgRmFpbHVyZSBd
CkBAIC0xNzIxLDE1ICsxNzI1LDEyIEBAIGZhc3QvdGV4dC9jb21wbGV4LXNtYWxsLWNhcHMtbm9u
LWJtcC1jYXBpdGFsaXplLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KIGZhc3QvdGV4dC9kZWNv
cmF0aW9ucy12ZXJ0aWNhbC11bmRlcmxpbmUuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQogZmFz
dC90ZXh0L2VsbGlwc2lzLXRleHQtcnRsLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KIGZhc3Qv
dGV4dC9lbW9qaS1vdmVybGFwLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KLWZhc3QvdGV4dC9l
bW9qaS1zaW5nbGUtcGFyZW50LWZhbWlseS0yLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KLWZh
c3QvdGV4dC9lbW9qaS1zaW5nbGUtcGFyZW50LWZhbWlseS5odG1sIFsgSW1hZ2VPbmx5RmFpbHVy
ZSBdCiBmYXN0L3RleHQvZW1vamktdmFyaWF0aW9uLXNlbGVjdG9yLmh0bWwgWyBJbWFnZU9ubHlG
YWlsdXJlIF0KIGZhc3QvdGV4dC9lbW9qaS13aXRoLWpvaW5lci5odG1sIFsgRmFpbHVyZSBdCiBm
YXN0L3RleHQvZW1vamkuaHRtbCBbIEZhaWx1cmUgXQogZmFzdC90ZXh0L2VtcGhhc2lzLW92ZXJs
YXAuaHRtbCBbIEZhaWx1cmUgXQogZmFzdC90ZXh0L2ZhbGxiYWNrLWxhbmd1YWdlLWhhbi0yLmh0
bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KIGZhc3QvdGV4dC9mYWxsYmFjay10cmFpdHMtZml4dXAu
aHRtbCBbIEZhaWx1cmUgXQotZmFzdC90ZXh0L2ZpdHpwYXRyaWNrLWNvbWJpbmF0aW9uLmh0bWwg
WyBJbWFnZU9ubHlGYWlsdXJlIF0KIGZhc3QvdGV4dC9mb250LWN1cnNpdmUtaXRhbGljLWNqay5o
dG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCiBmYXN0L3RleHQvZm9udC1rZXJuaW5nLmh0bWwgWyBJ
bWFnZU9ubHlGYWlsdXJlIF0KIGZhc3QvdGV4dC9mb250LWxvYWQtZGF0YS1wYXJ0aXRpb25lZC1h
bHBoYWJldC5odG1sIFsgRmFpbHVyZSBdCkBAIC0xNzU5LDcgKzE3NjAsNiBAQCBmYXN0L3RleHQv
anVzdGlmeS1pZGVvZ3JhcGgtY29tcGxleC5odG1sIFsgRmFpbHVyZSBdCiBmYXN0L3RleHQvanVz
dGlmeS1pZGVvZ3JhcGgtc2ltcGxlLmh0bWwgWyBGYWlsdXJlIF0KIGZhc3QvdGV4dC9qdXN0aWZ5
LWlkZW9ncmFwaC12ZXJ0aWNhbC5odG1sIFsgRmFpbHVyZSBdCiBmYXN0L3RleHQvanVzdGlmeS1u
YnNwLmh0bWwgWyBGYWlsdXJlIF0KLWZhc3QvdGV4dC9rZXJuaW5nLXdpdGgtVGV4dExheW91dC5o
dG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCiBmYXN0L3RleHQva2htZXItbGFvLWZvbnQuaHRtbCBb
IEZhaWx1cmUgXQogZmFzdC90ZXh0L2xpbmUtYnJlYWstYmV0d2Vlbi10ZXh0LW5vZGVzLWxhdGlu
MS5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCiBmYXN0L3RleHQvbGluZS1icmVhay1iZXR3ZWVu
LXRleHQtbm9kZXMuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQpAQCAtMTc4Nyw3ICsxNzg3LDYg
QEAgZmFzdC90ZXh0L3NtYWxsLWxpbmUtaGVpZ2h0Lmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0K
IGZhc3QvdGV4dC9zb2Z0LWh5cGhlbi1hcy1maXJzdC1icmVha2luZy1vcHBvcnR1bml0eS5odG1s
IFsgSW1hZ2VPbmx5RmFpbHVyZSBdCiBmYXN0L3RleHQvc29mdC1oeXBoZW4tbWluLXByZWZlcnJl
ZC13aWR0aC5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCiBmYXN0L3RleHQvc3BhY2Utd2lkdGgu
aHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQotZmFzdC90ZXh0L3N0YWxlLVRleHRMYXlvdXQtZnJv
bS1maXJzdC1saW5lLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KIGZhc3QvdGV4dC9zdmctZm9u
dC1mYWNlLXdpdGgta2VybmluZy5odG1sIFsgRmFpbHVyZSBdCiBmYXN0L3RleHQvc3ludGhldGlj
LWJvbGQtdHJhbnNmb3JtZWQuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQogZmFzdC90ZXh0L3N5
c3RlbS1mb250LWZhbGxiYWNrLWVtb2ppLmh0bWwgWyBGYWlsdXJlIF0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>386944</attachid>
            <date>2020-01-07 00:05:30 -0800</date>
            <delta_ts>2020-01-08 02:02:49 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204884-20200107170528.patch</filename>
            <type>text/plain</type>
            <size>56217</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0MTE0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODkwMTUyM2UzOTk5ZDkx
OTI5YWY1NmVmMjRmYzY3YmE2ZjljZDNjOS4uNzNjMTFhMzk1MTUxY2RmOGMwOGYwZDJjZTEwZDU4
YmZiZjI2OWQ3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDIwLTAxLTA2ICBGdWpp
aSBIaXJvbm9yaSAgPEhpcm9ub3JpLkZ1amlpQHNvbnkuY29tPgorCisgICAgICAgIFtXaW5dIFVz
ZSBDb21wbGV4VGV4dENvbnRyb2xsZXIgaW5zdGVhZCBvZiBVbmlzY3JpYmVDb250cm9sbGVyCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQ4ODQKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFdmVuIHRob3Vn
aCBVbmlzY3JpYmVDb250cm9sbGVyIGlzIGEgc2ltaWxhciBjb2RlIHdpdGgKKyAgICAgICAgQ29t
cGxleFRleHRDb250cm9sbGVyLCBVbmlzY3JpYmVDb250cm9sbGVyIGRvZXNuJ3Qgc3VwcG9ydAor
ICAgICAgICBzdXJyb2dhdGUgcGFpcnMgYW5kIGhhcyByZW5kZXJpbmcgZ2xpdGNoZXMgb2YgcGFy
dGlhbGx5IHNlbGVjdGVkIGEKKyAgICAgICAgY29tYmluaW5nIGNoYXJhY3Rlci4KKworICAgICAg
ICBSZW1vdmUgVW5pc2NyaWJlQ29udHJvbGxlciwgYW5kIHVzZSBDb21wbGV4VGV4dENvbnRyb2xs
ZXIgYnkKKyAgICAgICAgaW1wbGVtZW50aW5nIGBjb2xsZWN0Q29tcGxleFRleHRSdW5zRm9yQ2hh
cmFjdGVyc2Agd2l0aCBVbmlzY3JpYmUuCisKKyAgICAgICAgKiBQbGF0Zm9ybVdpbi5jbWFrZToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q29tcGxleFRleHRDb250cm9sbGVyOjpjb2xsZWN0Q29tcGxleFRl
eHRSdW5zRm9yQ2hhcmFjdGVycyk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udENhc2NhZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OndpZHRo
T2ZUZXh0UmFuZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmdldEds
eXBoc0FuZEFkdmFuY2VzRm9yQ29tcGxleFRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
Rm9udENhc2NhZGU6OmRyYXdHbHlwaEJ1ZmZlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpG
b250Q2FzY2FkZTo6ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZvbnRDYXNjYWRlOjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6Om9mZnNldEZvclBvc2l0aW9uRm9y
Q29tcGxleFRleHQgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db21w
bGV4VGV4dENvbnRyb2xsZXJVbmlzY3JpYmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OnNoYXBlQnlVbmlzY3JpYmUpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcGxleFRleHRDb250cm9s
bGVyOjpjb2xsZWN0Q29tcGxleFRleHRSdW5zRm9yQ2hhcmFjdGVycyk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDR1dpbi5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ZvbnRDYXNjYWRlRGlyZWN0MkQuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbi9Gb250V2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjph
ZGp1c3RTZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmdldEdseXBoc0FuZEFkdmFuY2VzRm9yQ29tcGxleFRl
eHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmZsb2F0
V2lkdGhGb3JDb21wbGV4VGV4dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
b250Q2FzY2FkZTo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21wbGV4VGV4dCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1VuaXNjcmliZUNvbnRyb2xsZXIu
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9VbmlzY3JpYmVD
b250cm9sbGVyLmg6IFJlbW92ZWQuCisKIDIwMjAtMDEtMDYgIEZ1amlpIEhpcm9ub3JpICA8SGly
b25vcmkuRnVqaWlAc29ueS5jb20+CiAKICAgICAgICAgQ29tcGxleFRleHRDb250cm9sbGVyOjpv
ZmZzZXRGb3JQb3NpdGlvbiByZXR1cm5zIGEgd3Jvbmcgb2Zmc2V0IGZvciBhIGdseXBoIGJvdW5k
YXJ5IGluIGEgUlRMIHRleHQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2lu
LmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW4uY21ha2UKaW5kZXggMjUwYTBiMzVj
MDQwMmY2NzlkYWU0OWI0YTIwYzViYTE5ZDY1ZmViOC4uNGYzMDcxNTliN2VkODA2ZWI4MTk1MmJi
YTQ1ZjVjMDdhOGRjOTNlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW4u
Y21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW4uY21ha2UKQEAgLTUwLDYgKzUw
LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy93aW4vQ29sb3JEaXJlY3QyRC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vQ29tcGxl
eFRleHRDb250cm9sbGVyRGlyZWN0V3JpdGUuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0NvbXBsZXhUZXh0Q29udHJvbGxlclVuaXNjcmliZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy93aW4vRElCUGl4ZWxEYXRhLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9GbG9hdFBv
aW50RGlyZWN0MkQuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Zsb2F0UmVjdERpcmVj
dDJELmNwcApAQCAtNjgsNyArNjksNiBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFXaW4uY3BwCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL1RyYW5zZm9ybWF0aW9uTWF0cml4RGlyZWN0MkQuY3BwCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL1RyYW5zZm9ybWF0aW9uTWF0cml4V2luLmNwcAotICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3dpbi9VbmlzY3JpYmVDb250cm9sbGVyLmNwcAogCiAgICAgcGxhdGZvcm0v
bmV0d29yay93aW4vRG93bmxvYWRCdW5kbGVXaW4uY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay93
aW4vTmV0d29ya1N0YXRlTm90aWZpZXJXaW4uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29tcGxleFRleHRDb250cm9sbGVyLmNwcAppbmRleCA4
MzQ3YzlmYjBjMjhhOTc2MDc0OGMxMjM0ZTA0OWRjNDAyM2Q2NTQ3Li4yZDg1NDM4NDQ0MDJkYWE5
ZDQwMGQ5ZWNhOTFmYTEzYzQwYmY4OWQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAKQEAgLTQzLDMz
ICs0Myw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotI2lmIFBMQVRGT1JNKFdJTikgJiYg
IVVTRShESVJFQ1QyRCkKLQotY2xhc3MgVGV4dExheW91dCB7Ci19OwotCi12b2lkIFRleHRMYXlv
dXREZWxldGVyOjpvcGVyYXRvcigpKFRleHRMYXlvdXQqKSBjb25zdAotewotfQotCi1zdGQ6OnVu
aXF1ZV9wdHI8VGV4dExheW91dCwgVGV4dExheW91dERlbGV0ZXI+IEZvbnRDYXNjYWRlOjpjcmVh
dGVMYXlvdXQoUmVuZGVyVGV4dCYsIGZsb2F0LCBib29sKSBjb25zdAotewotICAgIHJldHVybiBu
dWxscHRyOwotfQotCi1mbG9hdCBGb250Q2FzY2FkZTo6d2lkdGgoVGV4dExheW91dCYsIHVuc2ln
bmVkLCB1bnNpZ25lZCwgSGFzaFNldDxjb25zdCBGb250Kj4qKQotewotICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIHJldHVybiAwOwotfQotCi12b2lkIENvbXBsZXhUZXh0Q29udHJvbGxl
cjo6Y29sbGVjdENvbXBsZXhUZXh0UnVuc0ZvckNoYXJhY3RlcnMoY29uc3QgVUNoYXIqLCB1bnNp
Z25lZCwgdW5zaWduZWQsIGNvbnN0IEZvbnQqKQotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotfQotCi0jZWxzZQotCiBjbGFzcyBUZXh0TGF5b3V0IHsKICAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKIHB1YmxpYzoKQEAgLTkwNiw2ICs4NzksNCBAQCBDb21wbGV4VGV4dENvbnRyb2xs
ZXI6OkNvbXBsZXhUZXh0UnVuOjpDb21wbGV4VGV4dFJ1bihjb25zdCBWZWN0b3I8RmxvYXRTaXpl
PiYgYQogewogfQogCi0jZW5kaWYKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwCmluZGV4IDFhNmY3
M2E4MjM5NmU0MDFkOTQzN2ZlYTYwM2M5MGI2YjUwZGM1ZjkuLjgzMDhmMmIyMDJhYzI0ODk3OGJl
ZGNlOWYxOTdjMTFkYTYyZDA2ZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250Q2FzY2FkZS5jcHAKQEAgLTQxLDEwICs0MSw2IEBACiAjaW5jbHVkZSA8d3Rm
L3RleHQvQXRvbVN0cmluZ0hhc2guaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVy
Lmg+CiAKLSNpZiBQTEFURk9STShXSU4pICYmICFVU0UoRElSRUNUMkQpCi0jaW5jbHVkZSAiVW5p
c2NyaWJlQ29udHJvbGxlci5oIgotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNp
bmcgbmFtZXNwYWNlIFdURjo6VW5pY29kZTsKQEAgLTM1MCwxNSArMzQ2LDYgQEAgZmxvYXQgRm9u
dENhc2NhZGU6OndpZHRoT2ZUZXh0UmFuZ2UoY29uc3QgVGV4dFJ1biYgcnVuLCB1bnNpZ25lZCBm
cm9tLCB1bnNpZ25lZAogCiAgICAgYXV0byBjb2RlUGF0aFRvVXNlID0gY29kZVBhdGgocnVuKTsK
ICAgICBpZiAoY29kZVBhdGhUb1VzZSA9PSBDb21wbGV4KSB7Ci0jaWYgUExBVEZPUk0oV0lOKSAm
JiAhVVNFKERJUkVDVDJEKQotICAgICAgICBVbmlzY3JpYmVDb250cm9sbGVyIGl0KHRoaXMsIHJ1
bik7Ci0gICAgICAgIGl0LmFkdmFuY2UoZnJvbSk7Ci0gICAgICAgIG9mZnNldEJlZm9yZVJhbmdl
ID0gaXQucnVuV2lkdGhTb0ZhcigpOwotICAgICAgICBpdC5hZHZhbmNlKHRvKTsKLSAgICAgICAg
b2Zmc2V0QWZ0ZXJSYW5nZSA9IGl0LnJ1bldpZHRoU29GYXIoKTsKLSAgICAgICAgaXQuYWR2YW5j
ZSh0byk7Ci0gICAgICAgIHRvdGFsV2lkdGggPSBpdC5ydW5XaWR0aFNvRmFyKCk7Ci0jZWxzZQog
ICAgICAgICBDb21wbGV4VGV4dENvbnRyb2xsZXIgY29tcGxleEl0ZXJhdG9yKCp0aGlzLCBydW4s
IGZhbHNlLCBmYWxsYmFja0ZvbnRzKTsKICAgICAgICAgY29tcGxleEl0ZXJhdG9yLmFkdmFuY2Uo
ZnJvbSwgbnVsbHB0ciwgSW5jbHVkZVBhcnRpYWxHbHlwaHMsIGZhbGxiYWNrRm9udHMpOwogICAg
ICAgICBvZmZzZXRCZWZvcmVSYW5nZSA9IGNvbXBsZXhJdGVyYXRvci5ydW5XaWR0aFNvRmFyKCk7
CkBAIC0zNjYsNyArMzUzLDYgQEAgZmxvYXQgRm9udENhc2NhZGU6OndpZHRoT2ZUZXh0UmFuZ2Uo
Y29uc3QgVGV4dFJ1biYgcnVuLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZAogICAgICAgICBvZmZz
ZXRBZnRlclJhbmdlID0gY29tcGxleEl0ZXJhdG9yLnJ1bldpZHRoU29GYXIoKTsKICAgICAgICAg
Y29tcGxleEl0ZXJhdG9yLmFkdmFuY2UocnVuLmxlbmd0aCgpLCBudWxscHRyLCBJbmNsdWRlUGFy
dGlhbEdseXBocywgZmFsbGJhY2tGb250cyk7CiAgICAgICAgIHRvdGFsV2lkdGggPSBjb21wbGV4
SXRlcmF0b3IucnVuV2lkdGhTb0ZhcigpOwotI2VuZGlmCiAgICAgfSBlbHNlIHsKICAgICAgICAg
V2lkdGhJdGVyYXRvciBzaW1wbGVJdGVyYXRvcih0aGlzLCBydW4sIGZhbGxiYWNrRm9udHMpOwog
ICAgICAgICBzaW1wbGVJdGVyYXRvci5hZHZhbmNlKGZyb20sIG51bGxwdHIpOwpAQCAtMTM5Nyw3
ICsxMzgzLDYgQEAgZmxvYXQgRm9udENhc2NhZGU6OmdldEdseXBoc0FuZEFkdmFuY2VzRm9yU2lt
cGxlVGV4dChjb25zdCBUZXh0UnVuJiBydW4sIHVuc2lnbmUKICAgICByZXR1cm4gaW5pdGlhbEFk
dmFuY2U7CiB9CiAKLSNpZiAhUExBVEZPUk0oV0lOKSB8fCBVU0UoRElSRUNUMkQpCiBmbG9hdCBG
b250Q2FzY2FkZTo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0
UnVuJiBydW4sIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvLCBHbHlwaEJ1ZmZlciYgZ2x5cGhC
dWZmZXIsIEZvclRleHRFbXBoYXNpc09yTm90IGZvclRleHRFbXBoYXNpcykgY29uc3QKIHsKICAg
ICBmbG9hdCBpbml0aWFsQWR2YW5jZTsKQEAgLTE0MjcsNyArMTQxMiw2IEBAIGZsb2F0IEZvbnRD
YXNjYWRlOjpnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4m
IHJ1biwgdW5zaWduCiAKICAgICByZXR1cm4gaW5pdGlhbEFkdmFuY2U7CiB9Ci0jZW5kaWYKIAog
dm9pZCBGb250Q2FzY2FkZTo6ZHJhd0VtcGhhc2lzTWFya3NGb3JTaW1wbGVUZXh0KEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBBdG9tU3RyaW5nJiBt
YXJrLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8p
IGNvbnN0CiB7CkBAIC0xNDUyLDEzICsxNDM2LDcgQEAgdm9pZCBGb250Q2FzY2FkZTo6ZHJhd0ds
eXBoQnVmZmVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgR2x5cGhCdWZmZXImIGcK
IHsKICAgICAvLyBEcmF3IGVhY2ggY29udGlndW91cyBydW4gb2YgZ2x5cGhzIHRoYXQgdXNlIHRo
ZSBzYW1lIGZvbnQgZGF0YS4KICAgICBjb25zdCBGb250KiBmb250RGF0YSA9IGdseXBoQnVmZmVy
LmZvbnRBdCgwKTsKLSNpZiBQTEFURk9STShXSU4pCi0gICAgRmxvYXRQb2ludCBzdGFydFBvaW50
KHBvaW50LngoKSArIGdseXBoQnVmZmVyLmluaXRpYWxBZHZhbmNlKCkud2lkdGgoKSwgcG9pbnQu
eSgpICsgZ2x5cGhCdWZmZXIuaW5pdGlhbEFkdmFuY2UoKS5oZWlnaHQoKSk7Ci0jZWxzZQotICAg
IC8vIEZJWE1FOiBXaHkgZG8gd2Ugc3VidHJhY3QgdGhlIGluaXRpYWwgYWR2YW5jZSdzIGhlaWdo
dCBidXQgbm90IGl0cyB3aWR0aD8/PwotICAgIC8vIFdlIHNob3VsZCB1c2UgdGhlIGxpbmUgYWJv
dmUgZnJvbSBXaW5kb3dzIGluc3RlYWQuCiAgICAgRmxvYXRQb2ludCBzdGFydFBvaW50KHBvaW50
LngoKSwgcG9pbnQueSgpIC0gZ2x5cGhCdWZmZXIuaW5pdGlhbEFkdmFuY2UoKS5oZWlnaHQoKSk7
Ci0jZW5kaWYKICAgICBmbG9hdCBuZXh0WCA9IHN0YXJ0UG9pbnQueCgpICsgZ2x5cGhCdWZmZXIu
YWR2YW5jZUF0KDApLndpZHRoKCk7CiAgICAgZmxvYXQgbmV4dFkgPSBzdGFydFBvaW50LnkoKSAr
IGdseXBoQnVmZmVyLmFkdmFuY2VBdCgwKS5oZWlnaHQoKTsKICAgICB1bnNpZ25lZCBsYXN0RnJv
bSA9IDA7CkBAIC0xNTQ1LDcgKzE1MjMsNiBAQCBmbG9hdCBGb250Q2FzY2FkZTo6ZmxvYXRXaWR0
aEZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IEZvbgogICAg
IHJldHVybiBpdC5tX3J1bldpZHRoU29GYXI7CiB9CiAKLSNpZiAhUExBVEZPUk0oV0lOKSB8fCBV
U0UoRElSRUNUMkQpCiBmbG9hdCBGb250Q2FzY2FkZTo6ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0
KGNvbnN0IFRleHRSdW4mIHJ1biwgSGFzaFNldDxjb25zdCBGb250Kj4qIGZhbGxiYWNrRm9udHMs
IEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cpIGNvbnN0CiB7CiAgICAgQ29tcGxleFRleHRD
b250cm9sbGVyIGNvbnRyb2xsZXIoKnRoaXMsIHJ1biwgdHJ1ZSwgZmFsbGJhY2tGb250cyk7CkBA
IC0xNTU3LDcgKzE1MzQsNiBAQCBmbG9hdCBGb250Q2FzY2FkZTo6ZmxvYXRXaWR0aEZvckNvbXBs
ZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgSGFzaFNldDxjb25zdCBGbwogICAgIH0KICAgICBy
ZXR1cm4gY29udHJvbGxlci50b3RhbFdpZHRoKCk7CiB9Ci0jZW5kaWYKIAogdm9pZCBGb250Q2Fz
Y2FkZTo6YWRqdXN0U2VsZWN0aW9uUmVjdEZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYgcnVu
LCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bykg
Y29uc3QKIHsKQEAgLTE1NzgsNyArMTU1NCw2IEBAIHZvaWQgRm9udENhc2NhZGU6OmFkanVzdFNl
bGVjdGlvblJlY3RGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgTGF5b3V0UmVjCiAg
ICAgc2VsZWN0aW9uUmVjdC5zZXRXaWR0aChMYXlvdXRVbml0Ojpmcm9tRmxvYXRDZWlsKGFmdGVy
V2lkdGggLSBiZWZvcmVXaWR0aCkpOwogfQogCi0jaWYgIVBMQVRGT1JNKFdJTikgfHwgVVNFKERJ
UkVDVDJEKQogdm9pZCBGb250Q2FzY2FkZTo6YWRqdXN0U2VsZWN0aW9uUmVjdEZvckNvbXBsZXhU
ZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgdW5zaWdu
ZWQgZnJvbSwgdW5zaWduZWQgdG8pIGNvbnN0CiB7CiAgICAgQ29tcGxleFRleHRDb250cm9sbGVy
IGNvbnRyb2xsZXIoKnRoaXMsIHJ1bik7CkBAIC0xNTkzLDcgKzE1NjgsNiBAQCB2b2lkIEZvbnRD
YXNjYWRlOjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYg
cnVuLCBMYXlvdXRSZQogICAgICAgICBzZWxlY3Rpb25SZWN0Lm1vdmUoYmVmb3JlV2lkdGgsIDAp
OwogICAgIHNlbGVjdGlvblJlY3Quc2V0V2lkdGgoTGF5b3V0VW5pdDo6ZnJvbUZsb2F0Q2VpbChh
ZnRlcldpZHRoIC0gYmVmb3JlV2lkdGgpKTsKIH0KLSNlbmRpZgogCiBpbnQgRm9udENhc2NhZGU6
Om9mZnNldEZvclBvc2l0aW9uRm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGZsb2F0
IHgsIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0CiB7CkBAIC0xNjM4LDEzICsxNjEy
LDExIEBAIGludCBGb250Q2FzY2FkZTo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JTaW1wbGVUZXh0KGNv
bnN0IFRleHRSdW4mIHJ1biwgZmxvYXQgeCwgYm9vCiAgICAgcmV0dXJuIG9mZnNldDsKIH0KIAot
I2lmICFQTEFURk9STShXSU4pIHx8IFVTRShESVJFQ1QyRCkKIGludCBGb250Q2FzY2FkZTo6b2Zm
c2V0Rm9yUG9zaXRpb25Gb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGZsb2F0IHgs
IGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0CiB7CiAgICAgQ29tcGxleFRleHRDb250
cm9sbGVyIGNvbnRyb2xsZXIoKnRoaXMsIHJ1bik7CiAgICAgcmV0dXJuIGNvbnRyb2xsZXIub2Zm
c2V0Rm9yUG9zaXRpb24oeCwgaW5jbHVkZVBhcnRpYWxHbHlwaHMpOwogfQotI2VuZGlmCiAKICNp
ZiAhUExBVEZPUk0oQ09DT0EpICYmICFVU0UoSEFSRkJVWlopCiAvLyBGSVhNRTogVW5pZnkgdGhp
cyB3aXRoIHRoZSBtYWNPUyBhbmQgaU9TIGltcGxlbWVudGF0aW9uLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbXBsZXhUZXh0Q29udHJvbGxlclVu
aXNjcmliZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vQ29tcGxl
eFRleHRDb250cm9sbGVyVW5pc2NyaWJlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MDI1YTY0MGRkY2FmM2Ew
YjA3MGZiMTc3Nzc1N2YzODIzMWJkZWNhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbXBsZXhUZXh0Q29udHJvbGxlclVuaXNjcmliZS5j
cHAKQEAgLTAsMCArMSwxODkgQEAKKy8qCisqIENvcHlyaWdodCAoQykgMjAxNy0yMDE5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
KiBhcmUgbWV0OgorKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04KKyogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMK
KyogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ29tcGxleFRleHRD
b250cm9sbGVyLmgiCisKKyNpZiAhVVNFKERJUkVDVDJEKQorCisjaW5jbHVkZSAiRm9udENhY2hl
LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKKyNpbmNsdWRlICJIV25kREMuaCIKKyNpbmNs
dWRlIDx1c3AxMC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBib29sIHNoYXBl
QnlVbmlzY3JpYmUoY29uc3QgVUNoYXIqIHN0ciwgaW50IGxlbiwgU0NSSVBUX0lURU0gaXRlbSwg
Y29uc3QgRm9udCogZm9udERhdGEsCisgICAgVmVjdG9yPFdPUkQ+JiBnbHlwaHMsIFZlY3RvcjxX
T1JEPiYgY2x1c3RlcnMsCisgICAgVmVjdG9yPFNDUklQVF9WSVNBVFRSPiYgdmlzdWFsQXR0cmli
dXRlcykKK3sKKyAgICBIV25kREMgaGRjOworICAgIEhGT05UIG9sZEZvbnQgPSAwOworICAgIEhS
RVNVTFQgc2hhcGVSZXN1bHQgPSBFX1BFTkRJTkc7CisgICAgaW50IGdseXBoQ291bnQgPSAwOwor
CisgICAgaWYgKCFmb250RGF0YSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZG8gewor
ICAgICAgICBzaGFwZVJlc3VsdCA9IFNjcmlwdFNoYXBlKGhkYywgZm9udERhdGEtPnNjcmlwdENh
Y2hlKCksIHdjaGFyRnJvbShzdHIpLCBsZW4sIGdseXBocy5zaXplKCksICZpdGVtLmEsCisgICAg
ICAgICAgICBnbHlwaHMuZGF0YSgpLCBjbHVzdGVycy5kYXRhKCksIHZpc3VhbEF0dHJpYnV0ZXMu
ZGF0YSgpLCAmZ2x5cGhDb3VudCk7CisgICAgICAgIGlmIChzaGFwZVJlc3VsdCA9PSBFX1BFTkRJ
TkcpIHsKKyAgICAgICAgICAgIC8vIFRoZSBzY3JpcHQgY2FjaGUgaXNuJ3QgcHJpbWVkIHdpdGgg
ZW5vdWdoIGluZm8geWV0LiBXZSBuZWVkIHRvIHNlbGVjdCBvdXIgSEZPTlQgaW50bworICAgICAg
ICAgICAgLy8gYSBEQyBhbmQgcGFzcyB0aGUgREMgaW4gdG8gU2NyaXB0U2hhcGUuCisgICAgICAg
ICAgICBBU1NFUlQoIWhkYyk7CisgICAgICAgICAgICBoZGMuc2V0SFduZCgwKTsKKyAgICAgICAg
ICAgIEhGT05UIGhmb250ID0gZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLmhmb250KCk7CisgICAg
ICAgICAgICBvbGRGb250ID0gKEhGT05UKVNlbGVjdE9iamVjdChoZGMsIGhmb250KTsKKyAgICAg
ICAgfSBlbHNlIGlmIChzaGFwZVJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKSB7CisgICAgICAgICAg
ICAvLyBOZWVkIHRvIHJlc2l6ZSBvdXIgYnVmZmVycy4KKyAgICAgICAgICAgIGdseXBocy5yZXNp
emUoZ2x5cGhzLnNpemUoKSAqIDIpOworICAgICAgICAgICAgdmlzdWFsQXR0cmlidXRlcy5yZXNp
emUoZ2x5cGhzLnNpemUoKSk7CisgICAgICAgIH0KKyAgICB9IHdoaWxlIChzaGFwZVJlc3VsdCA9
PSBFX1BFTkRJTkcgfHwgc2hhcGVSZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7CisKKyAgICBpZiAo
aGRjKQorICAgICAgICBTZWxlY3RPYmplY3QoaGRjLCBvbGRGb250KTsKKworICAgIGlmIChGQUlM
RUQoc2hhcGVSZXN1bHQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBnbHlwaHMuc2hy
aW5rKGdseXBoQ291bnQpOworICAgIHZpc3VhbEF0dHJpYnV0ZXMuc2hyaW5rKGdseXBoQ291bnQp
OworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjpj
b2xsZWN0Q29tcGxleFRleHRSdW5zRm9yQ2hhcmFjdGVycyhjb25zdCBVQ2hhciogY3AsIHVuc2ln
bmVkIHN0cmluZ0xlbmd0aCwgdW5zaWduZWQgc3RyaW5nTG9jYXRpb24sIGNvbnN0IEZvbnQqIGZv
bnQpCit7CisgICAgaWYgKCFmb250KSB7CisgICAgICAgIC8vIENyZWF0ZSBhIHJ1biBvZiBtaXNz
aW5nIGdseXBocyBmcm9tIHRoZSBwcmltYXJ5IGZvbnQuCisgICAgICAgIG1fY29tcGxleFRleHRS
dW5zLmFwcGVuZChDb21wbGV4VGV4dFJ1bjo6Y3JlYXRlKG1fZm9udC5wcmltYXJ5Rm9udCgpLCBj
cCwgc3RyaW5nTG9jYXRpb24sIHN0cmluZ0xlbmd0aCwgMCwgc3RyaW5nTGVuZ3RoLCBtX3J1bi5s
dHIoKSkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgVmVjdG9yPFNDUklQVF9JVEVN
PiBpdGVtcyg2KTsKKyAgICBpbnQgbnVtSXRlbXMgPSAwOworICAgIGZvciAoOzspIHsKKyAgICAg
ICAgU0NSSVBUX0NPTlRST0wgY29udHJvbCB7IH07CisgICAgICAgIFNDUklQVF9TVEFURSBzdGF0
ZSB7IH07CisgICAgICAgIC8vIFNldCB1cCB0aGUgY29ycmVjdCBkaXJlY3Rpb24gZm9yIHRoZSBy
dW4uCisgICAgICAgIHN0YXRlLnVCaWRpTGV2ZWwgPSBtX3J1bi5ydGwoKTsKKyAgICAgICAgLy8g
TG9jayB0aGUgY29ycmVjdCBkaXJlY3Rpb25hbCBvdmVycmlkZS4KKyAgICAgICAgc3RhdGUuZk92
ZXJyaWRlRGlyZWN0aW9uID0gbV9ydW4uZGlyZWN0aW9uYWxPdmVycmlkZSgpOworCisgICAgICAg
IC8vIFNjcmlwdEl0ZW1pemUgbWF5IHdyaXRlIChjTWF4SXRlbXMgKyAxKSBTQ1JJUFRfSVRFTS4K
KyAgICAgICAgSFJFU1VMVCBociA9IFNjcmlwdEl0ZW1pemUod2NoYXJGcm9tKGNwKSwgc3RyaW5n
TGVuZ3RoLCBpdGVtcy5zaXplKCkgLSAxLCAmY29udHJvbCwgJnN0YXRlLCBpdGVtcy5kYXRhKCks
ICZudW1JdGVtcyk7CisgICAgICAgIGlmIChociAhPSBFX09VVE9GTUVNT1JZKSB7CisgICAgICAg
ICAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBpdGVtcy5yZXNpemUoaXRlbXMuc2l6ZSgpICogMik7CisgICAgfQorICAgIGl0
ZW1zLnJlc2l6ZShudW1JdGVtcyArIDEpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1J
dGVtczsgaSsrKSB7CisgICAgICAgIC8vIERldGVybWluZSB0aGUgc3RyaW5nIGZvciB0aGlzIGl0
ZW0uCisgICAgICAgIGNvbnN0IFVDaGFyKiBzdHIgPSBjcCArIGl0ZW1zW2ldLmlDaGFyUG9zOwor
ICAgICAgICBpbnQgbGVuZ3RoID0gaXRlbXNbaSsxXS5pQ2hhclBvcyAtIGl0ZW1zW2ldLmlDaGFy
UG9zOworICAgICAgICBTQ1JJUFRfSVRFTSYgaXRlbSA9IGl0ZW1zW2ldOworCisgICAgICAgIC8v
IFNldCB1cCBidWZmZXJzIHRvIGhvbGQgdGhlIHJlc3VsdHMgb2Ygc2hhcGluZyB0aGUgaXRlbS4K
KyAgICAgICAgVmVjdG9yPFdPUkQ+IGdseXBoczsKKyAgICAgICAgVmVjdG9yPFdPUkQ+IGNsdXN0
ZXJzOworICAgICAgICBWZWN0b3I8U0NSSVBUX1ZJU0FUVFI+IHZpc3VhbEF0dHJpYnV0ZXM7Cisg
ICAgICAgIGNsdXN0ZXJzLnJlc2l6ZShsZW5ndGgpOworCisgICAgICAgIC8vIFNoYXBlIHRoZSBp
dGVtLgorICAgICAgICAvLyBUaGUgcmVjb21tZW5kZWQgc2l6ZSBmb3IgdGhlIGdseXBoIGJ1ZmZl
ciBpcyAxLjUgKiB0aGUgY2hhcmFjdGVyIGxlbmd0aCArIDE2IGluIHRoZSB1bmlzY3JpYmUgZG9j
cy4KKyAgICAgICAgLy8gQXBwYXJlbnRseSB0aGlzIGlzIGEgZ29vZCBzaXplIHRvIGF2b2lkIGhh
dmluZyB0byBtYWtlIHJlcGVhdGVkIGNhbGxzIHRvIFNjcmlwdFNoYXBlLgorICAgICAgICBnbHlw
aHMucmVzaXplKDEuNSAqIGxlbmd0aCArIDE2KTsKKyAgICAgICAgdmlzdWFsQXR0cmlidXRlcy5y
ZXNpemUoZ2x5cGhzLnNpemUoKSk7CisKKyAgICAgICAgaWYgKCFzaGFwZUJ5VW5pc2NyaWJlKHN0
ciwgbGVuZ3RoLCBpdGVtLCBmb250LCBnbHlwaHMsIGNsdXN0ZXJzLCB2aXN1YWxBdHRyaWJ1dGVz
KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIC8vIFdlIG5vdyBoYXZlIGEgY29s
bGVjdGlvbiBvZiBnbHlwaHMuCisgICAgICAgIFZlY3RvcjxHT0ZGU0VUPiBvZmZzZXRzOworICAg
ICAgICBWZWN0b3I8aW50PiBhZHZhbmNlczsKKyAgICAgICAgb2Zmc2V0cy5yZXNpemUoZ2x5cGhz
LnNpemUoKSk7CisgICAgICAgIGFkdmFuY2VzLnJlc2l6ZShnbHlwaHMuc2l6ZSgpKTsKKyAgICAg
ICAgSFJFU1VMVCBwbGFjZVJlc3VsdCA9IFNjcmlwdFBsYWNlKDAsIGZvbnQtPnNjcmlwdENhY2hl
KCksIGdseXBocy5kYXRhKCksIGdseXBocy5zaXplKCksIHZpc3VhbEF0dHJpYnV0ZXMuZGF0YSgp
LAorICAgICAgICAgICAgJml0ZW0uYSwgYWR2YW5jZXMuZGF0YSgpLCBvZmZzZXRzLmRhdGEoKSwg
MCk7CisgICAgICAgIGlmIChwbGFjZVJlc3VsdCA9PSBFX1BFTkRJTkcpIHsKKyAgICAgICAgICAg
IC8vIFRoZSBzY3JpcHQgY2FjaGUgaXNuJ3QgcHJpbWVkIHdpdGggZW5vdWdoIGluZm8geWV0LiBX
ZSBuZWVkIHRvIHNlbGVjdCBvdXIgSEZPTlQgaW50bworICAgICAgICAgICAgLy8gYSBEQyBhbmQg
cGFzcyB0aGUgREMgaW4gdG8gU2NyaXB0UGxhY2UuCisgICAgICAgICAgICBIV25kREMgaGRjKDAp
OworICAgICAgICAgICAgSEZPTlQgaGZvbnQgPSBmb250LT5wbGF0Zm9ybURhdGEoKS5oZm9udCgp
OworICAgICAgICAgICAgSEZPTlQgb2xkRm9udCA9IChIRk9OVClTZWxlY3RPYmplY3QoaGRjLCBo
Zm9udCk7CisgICAgICAgICAgICBwbGFjZVJlc3VsdCA9IFNjcmlwdFBsYWNlKGhkYywgZm9udC0+
c2NyaXB0Q2FjaGUoKSwgZ2x5cGhzLmRhdGEoKSwgZ2x5cGhzLnNpemUoKSwgdmlzdWFsQXR0cmli
dXRlcy5kYXRhKCksCisgICAgICAgICAgICAgICAgJml0ZW0uYSwgYWR2YW5jZXMuZGF0YSgpLCBv
ZmZzZXRzLmRhdGEoKSwgMCk7CisgICAgICAgICAgICBTZWxlY3RPYmplY3QoaGRjLCBvbGRGb250
KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChGQUlMRUQocGxhY2VSZXN1bHQpIHx8IGdseXBo
cy5pc0VtcHR5KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAobV9mYWxs
YmFja0ZvbnRzKQorICAgICAgICAgICAgbV9mYWxsYmFja0ZvbnRzLT5hZGQoZm9udCk7CisKKyAg
ICAgICAgVmVjdG9yPHVuc2lnbmVkPiBzdHJpbmdJbmRpY2VzKGdseXBocy5zaXplKCksIGl0ZW0u
aUNoYXJQb3MpOworCisgICAgICAgIGZvciAoaW50IGsgPSBsZW5ndGggLSAxOyBrID49IDA7IGst
LSkKKyAgICAgICAgICAgIHN0cmluZ0luZGljZXNbY2x1c3RlcnNba11dID0gaXRlbS5pQ2hhclBv
cyArIGs7CisKKyAgICAgICAgVmVjdG9yPEZsb2F0U2l6ZT4gYmFzZUFkdmFuY2VzOworICAgICAg
ICBWZWN0b3I8RmxvYXRQb2ludD4gb3JpZ2luczsKKyAgICAgICAgYmFzZUFkdmFuY2VzLnJlc2Vy
dmVDYXBhY2l0eShnbHlwaHMuc2l6ZSgpKTsKKyAgICAgICAgb3JpZ2lucy5yZXNlcnZlQ2FwYWNp
dHkoZ2x5cGhzLnNpemUoKSk7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBrID0gMDsgayA8IGds
eXBocy5zaXplKCk7IGsrKykgeworICAgICAgICAgICAgY29uc3QgZmxvYXQgY0xvZ2ljYWxTY2Fs
ZSA9IGZvbnQtPnBsYXRmb3JtRGF0YSgpLnVzZUdESSgpID8gMSA6IDMyOworICAgICAgICAgICAg
ZmxvYXQgYWR2YW5jZSA9IGFkdmFuY2VzW2tdIC8gY0xvZ2ljYWxTY2FsZTsKKyAgICAgICAgICAg
IGZsb2F0IG9mZnNldFggPSBvZmZzZXRzW2tdLmR1IC8gY0xvZ2ljYWxTY2FsZTsKKyAgICAgICAg
ICAgIGZsb2F0IG9mZnNldFkgPSBvZmZzZXRzW2tdLmR2IC8gY0xvZ2ljYWxTY2FsZTsKKworICAg
ICAgICAgICAgLy8gTWF0Y2ggQXBwS2l0J3MgcnVsZXMgZm9yIHRoZSBpbnRlZ2VyIHZzLiBub24t
aW50ZWdlciByZW5kZXJpbmcgbW9kZXMuCisgICAgICAgICAgICBpZiAoIWZvbnQtPnBsYXRmb3Jt
RGF0YSgpLmlzU3lzdGVtRm9udCgpKSB7CisgICAgICAgICAgICAgICAgYWR2YW5jZSA9IHJvdW5k
ZihhZHZhbmNlKTsKKyAgICAgICAgICAgICAgICBvZmZzZXRYID0gcm91bmRmKG9mZnNldFgpOwor
ICAgICAgICAgICAgICAgIG9mZnNldFkgPSByb3VuZGYob2Zmc2V0WSk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIHRha2UgdGhlIEdPRkZTRVRTIGZv
ciBjb21iaW5pbmcgZ2x5cGhzIGFuZCBzdG9yZSB0aGVtIGluIHRoZSBnbHlwaCBidWZmZXIKKyAg
ICAgICAgICAgIC8vIGFzIHdlbGwsIHNvIHRoYXQgd2hlbiB0aGUgdGltZSBjb21lcyB0byBkcmF3
IHRob3NlIGdseXBocywgd2UgY2FuIGFwcGx5IHRoZSBhcHByb3ByaWF0ZQorICAgICAgICAgICAg
Ly8gdHJhbnNsYXRpb24uCisKKyAgICAgICAgICAgIGJhc2VBZHZhbmNlcy51bmNoZWNrZWRBcHBl
bmQoeyBhZHZhbmNlLCAwIH0pOworICAgICAgICAgICAgb3JpZ2lucy51bmNoZWNrZWRBcHBlbmQo
eyBvZmZzZXRYLCBvZmZzZXRZIH0pOworICAgICAgICB9CisgICAgICAgIEZsb2F0U2l6ZSBpbml0
aWFsQWR2YW5jZSA9IHRvRmxvYXRTaXplKG9yaWdpbnNbMF0pOworICAgICAgICBib29sIGx0ciA9
ICFpdGVtLmEuZlJUTDsKKyAgICAgICAgbV9jb21wbGV4VGV4dFJ1bnMuYXBwZW5kKENvbXBsZXhU
ZXh0UnVuOjpjcmVhdGUoYmFzZUFkdmFuY2VzLCBvcmlnaW5zLCBnbHlwaHMsIHN0cmluZ0luZGlj
ZXMsIGluaXRpYWxBZHZhbmNlLCAqZm9udCwgY3AsIHN0cmluZ0xvY2F0aW9uLCBzdHJpbmdMZW5n
dGgsIGl0ZW0uaUNoYXJQb3MsIGl0ZW1zW2krMV0uaUNoYXJQb3MsIGx0cikpOworICAgIH0KK30K
KworfQorCisjZW5kaWYgLy8gIVVTRShESVJFQ1QyRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q0dXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDR1dpbi5jcHAKaW5kZXggMGVmNjU1ZDhkMDViNmE2
MWE4YTRlMzhhNTE5MjY3MDAxYTQ4YzkyZC4uMzNmODUyZWI2ZThkYmRhNDUwYmY1ZWZhNzMwZTQw
NmE4YWZlOTdkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0ZvbnRDR1dpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0ZvbnRDR1dpbi5jcHAKQEAgLTM0LDcgKzM0LDYgQEAKICNpbmNsdWRlICJHbHlwaEJ1ZmZl
ci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIK
LSNpbmNsdWRlICJVbmlzY3JpYmVDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiV2ViQ29yZVRleHRS
ZW5kZXJlci5oIgogI2luY2x1ZGUgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+CiAjaW5j
bHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FzY2FkZURpcmVjdDJELmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FzY2FkZURpcmVjdDJELmNwcAppbmRleCA5MTEx
MmQ5NjVjODliYTdkNGM1N2JlN2M2OTNlY2ExNzcyNjg1OWFmLi5iMmQzNDcxYjhhYzMxOTM2YjEy
MjcwM2NlYzU5ODJhMDg1ODVlY2M2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vRm9udENhc2NhZGVEaXJlY3QyRC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYXNjYWRlRGlyZWN0MkQuY3BwCkBAIC0zNyw3
ICszNyw2IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlRGlyZWN0
MkQuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0RGly
ZWN0MkQuaCIKLSNpbmNsdWRlICJVbmlzY3JpYmVDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiV2Vi
Q29yZVRleHRSZW5kZXJlci5oIgogI2luY2x1ZGUgPGQyZDEuaD4KICNpbmNsdWRlIDxkd3JpdGVf
My5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Zv
bnRXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRXaW4u
Y3BwCmluZGV4IDFjYWE4MDIyZTI2YTcwN2QyZjFiNDBkMDQ5MWE4YzA4ZWE4YTQyYzQuLjUyY2I4
OGY1M2QwNWExMDE5NmU2NTFiZmQyYWNkMDMyZGM3OTIyZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250V2luLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFdpbi5jcHAKQEAgLTM1LDEwICszNSw2IEBA
CiAjaW5jbHVkZSAiVGV4dFJ1bi5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKLSNp
ZiAhVVNFKERJUkVDVDJEKQotI2luY2x1ZGUgIlVuaXNjcmliZUNvbnRyb2xsZXIuaCIKLSNlbmRp
ZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGJvb2wgRm9udENhc2NhZGU6OmNhblJldHVybkZh
bGxiYWNrRm9udHNGb3JDb21wbGV4VGV4dCgpCkBAIC01MSw3MiArNDcsNCBAQCBib29sIEZvbnRD
YXNjYWRlOjpjYW5FeHBhbmRBcm91bmRJZGVvZ3JhcGhzSW5Db21wbGV4VGV4dCgpCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi0jaWYgIVVTRShESVJFQ1QyRCkKLQotdm9pZCBGb250Q2FzY2FkZTo6
YWRqdXN0U2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgTGF5
b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8pIGNvbnN0
Ci17Ci0gICAgVW5pc2NyaWJlQ29udHJvbGxlciBpdCh0aGlzLCBydW4pOwotICAgIGl0LmFkdmFu
Y2UoZnJvbSk7Ci0gICAgZmxvYXQgYmVmb3JlV2lkdGggPSBpdC5ydW5XaWR0aFNvRmFyKCk7Ci0g
ICAgaXQuYWR2YW5jZSh0byk7Ci0gICAgZmxvYXQgYWZ0ZXJXaWR0aCA9IGl0LnJ1bldpZHRoU29G
YXIoKTsKLQotICAgIGlmIChydW4ucnRsKCkpIHsKLSAgICAgICAgaXQuYWR2YW5jZShydW4ubGVu
Z3RoKCkpOwotICAgICAgICBzZWxlY3Rpb25SZWN0Lm1vdmUoaXQucnVuV2lkdGhTb0ZhcigpIC0g
YWZ0ZXJXaWR0aCwgMCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHNlbGVjdGlvblJlY3QubW92ZShi
ZWZvcmVXaWR0aCwgMCk7Ci0gICAgc2VsZWN0aW9uUmVjdC5zZXRXaWR0aChhZnRlcldpZHRoIC0g
YmVmb3JlV2lkdGgpOwotfQotCi1mbG9hdCBGb250Q2FzY2FkZTo6Z2V0R2x5cGhzQW5kQWR2YW5j
ZXNGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIHVuc2lnbmVkIGZyb20sIHVuc2ln
bmVkIHRvLCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIEZvclRleHRFbXBoYXNpc09yTm90IGZv
clRleHRFbXBoYXNpcykgY29uc3QKLXsKLSAgICBpZiAoZm9yVGV4dEVtcGhhc2lzKSB7Ci0gICAg
ICAgIC8vIEZJWE1FOiBBZGQgZm9yVGV4dEVtcGhhc2lzIHBhcmVtZXRlciB0byBVbmlzY3JpYmVD
b250cm9sbGVyIGFuZCB1c2UgaXQuCi0gICAgICAgIExPR19FUlJPUigiTm90IGltcGxlbWVudGVk
IGZvciB0ZXh0IGVtcGhhc2lzLiIpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBV
bmlzY3JpYmVDb250cm9sbGVyIGNvbnRyb2xsZXIodGhpcywgcnVuKTsKLSAgICBjb250cm9sbGVy
LmFkdmFuY2UoZnJvbSk7Ci0gICAgZmxvYXQgYmVmb3JlV2lkdGggPSBjb250cm9sbGVyLnJ1bldp
ZHRoU29GYXIoKTsKLSAgICBjb250cm9sbGVyLmFkdmFuY2UodG8sICZnbHlwaEJ1ZmZlcik7Ci0K
LSAgICBpZiAoZ2x5cGhCdWZmZXIuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAg
IGZsb2F0IGFmdGVyV2lkdGggPSBjb250cm9sbGVyLnJ1bldpZHRoU29GYXIoKTsKLQotICAgIGlm
IChydW4ucnRsKCkpIHsKLSAgICAgICAgY29udHJvbGxlci5hZHZhbmNlKHJ1bi5sZW5ndGgoKSk7
Ci0gICAgICAgIHJldHVybiBjb250cm9sbGVyLnJ1bldpZHRoU29GYXIoKSAtIGFmdGVyV2lkdGg7
Ci0gICAgfQotICAgIHJldHVybiBiZWZvcmVXaWR0aDsKLX0KLQotZmxvYXQgRm9udENhc2NhZGU6
OmZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29u
c3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93KSBj
b25zdAotewotICAgIFVuaXNjcmliZUNvbnRyb2xsZXIgY29udHJvbGxlcih0aGlzLCBydW4sIGZh
bGxiYWNrRm9udHMpOwotICAgIGNvbnRyb2xsZXIuYWR2YW5jZShydW4ubGVuZ3RoKCkpOwotICAg
IGlmIChnbHlwaE92ZXJmbG93KSB7Ci0gICAgICAgIGdseXBoT3ZlcmZsb3ctPnRvcCA9IHN0ZDo6
bWF4PGludD4oZ2x5cGhPdmVyZmxvdy0+dG9wLCBjZWlsZigtY29udHJvbGxlci5taW5HbHlwaEJv
dW5kaW5nQm94WSgpKSAtIChnbHlwaE92ZXJmbG93LT5jb21wdXRlQm91bmRzID8gMCA6IGZvbnRN
ZXRyaWNzKCkuYXNjZW50KCkpKTsKLSAgICAgICAgZ2x5cGhPdmVyZmxvdy0+Ym90dG9tID0gc3Rk
OjptYXg8aW50PihnbHlwaE92ZXJmbG93LT5ib3R0b20sIGNlaWxmKGNvbnRyb2xsZXIubWF4R2x5
cGhCb3VuZGluZ0JveFkoKSkgLSAoZ2x5cGhPdmVyZmxvdy0+Y29tcHV0ZUJvdW5kcyA/IDAgIDog
Zm9udE1ldHJpY3MoKS5kZXNjZW50KCkpKTsKLSAgICAgICAgZ2x5cGhPdmVyZmxvdy0+bGVmdCA9
IHN0ZDo6bWF4PGludD4oMCwgY2VpbGYoLWNvbnRyb2xsZXIubWluR2x5cGhCb3VuZGluZ0JveFgo
KSkpOwotICAgICAgICBnbHlwaE92ZXJmbG93LT5yaWdodCA9IHN0ZDo6bWF4PGludD4oMCwgY2Vp
bGYoY29udHJvbGxlci5tYXhHbHlwaEJvdW5kaW5nQm94WCgpIC0gY29udHJvbGxlci5ydW5XaWR0
aFNvRmFyKCkpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGNvbnRyb2xsZXIucnVuV2lkdGhTb0Zhcigp
OwotfQotCi1pbnQgRm9udENhc2NhZGU6Om9mZnNldEZvclBvc2l0aW9uRm9yQ29tcGxleFRleHQo
Y29uc3QgVGV4dFJ1biYgcnVuLCBmbG9hdCB4RmxvYXQsIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlw
aHMpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IFRoaXMgdHJ1bmNhdGlvbiBpcyBub3QgYSBwcm9i
bGVtIGZvciBIVE1MLCBidXQgb25seSBhZmZlY3RzIFNWRywgd2hpY2ggcGFzc2VzIGZsb2F0aW5n
LXBvaW50IG51bWJlcnMKLSAgICAvLyB0byBGb250Q2FzY2FkZTo6b2Zmc2V0Rm9yUG9zaXRpb24o
KS4gQnVnIGh0dHA6Ly93ZWJraXQub3JnL2IvNDA2NzMgdHJhY2tzIGZpeGluZyB0aGlzIHByb2Js
ZW0uCi0gICAgaW50IHggPSBzdGF0aWNfY2FzdDxpbnQ+KHhGbG9hdCk7Ci0KLSAgICBVbmlzY3Jp
YmVDb250cm9sbGVyIGNvbnRyb2xsZXIodGhpcywgcnVuKTsKLSAgICByZXR1cm4gY29udHJvbGxl
ci5vZmZzZXRGb3JQb3NpdGlvbih4LCBpbmNsdWRlUGFydGlhbEdseXBocyk7Ci19Ci0KLSNlbmRp
ZgotCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
VW5pc2NyaWJlQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vVW5pc2NyaWJlQ29udHJvbGxlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDQ3NGM0ODYwZmYxMDA0NDA5OWI2YWYzZjliZmI5YjQwY2Q3ODhkYTkuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL1VuaXNjcmliZUNvbnRyb2xsZXIuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsNDU5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDksIDIw
MTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiVW5pc2NyaWJlQ29udHJvbGxlci5oIgotCi0jaW5jbHVkZSAi
Rm9udC5oIgotI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCi0jaW5jbHVkZSAiSFduZERDLmgiCi0j
aW5jbHVkZSAiVGV4dFJ1bi5oIgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvd2luL1dDaGFyU3RyaW5nRXh0cmFzLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLXVzaW5nIG5hbWVzcGFjZSBXVEY6OlVuaWNvZGU7Ci0KLS8vIEZJWE1FOiBSZWFyY2hpdGVj
dCB0aGlzIHRvIGJlIG1vcmUgbGlrZSBXaWR0aEl0ZXJhdG9yIGluIEZvbnQuY3BwLiAgSGF2ZSBh
biBhZHZhbmNlKCkgbWV0aG9kCi0vLyB0aGF0IGRvZXMgc3R1ZmYgaW4gdGhhdCBtZXRob2QgaW5z
dGVhZCBvZiBkb2luZyBldmVyeXRoaW5nIGluIHRoZSBjb25zdHJ1Y3Rvci4gIEhhdmUgYWR2YW5j
ZSgpCi0vLyB0YWtlIHRoZSBHbHlwaEJ1ZmZlciBhcyBhbiBhcmcgc28gdGhhdCB3ZSBkb24ndCBo
YXZlIHRvIHBvcHVsYXRlIHRoZSBnbHlwaCBidWZmZXIgd2hlbgotLy8gbWVhc3VyaW5nLgotVW5p
c2NyaWJlQ29udHJvbGxlcjo6VW5pc2NyaWJlQ29udHJvbGxlcihjb25zdCBGb250Q2FzY2FkZSog
Zm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tG
b250cykKLSAgICA6IG1fZm9udCgqZm9udCkKLSAgICAsIG1fcnVuKHJ1bikKLSAgICAsIG1fZmFs
bGJhY2tGb250cyhmYWxsYmFja0ZvbnRzKQotICAgICwgbV9taW5HbHlwaEJvdW5kaW5nQm94WChz
dGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6bWF4KCkpCi0gICAgLCBtX21heEdseXBoQm91bmRp
bmdCb3hYKHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptaW4oKSkKLSAgICAsIG1fbWluR2x5
cGhCb3VuZGluZ0JveFkoc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46Om1heCgpKQotICAgICwg
bV9tYXhHbHlwaEJvdW5kaW5nQm94WShzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6bWluKCkp
Ci0gICAgLCBtX2N1cnJlbnRDaGFyYWN0ZXIoMCkKLSAgICAsIG1fZW5kKHJ1bi5sZW5ndGgoKSkK
LSAgICAsIG1fcnVuV2lkdGhTb0ZhcigwKQotICAgICwgbV9wYWRkaW5nKHJ1bi5leHBhbnNpb24o
KSkKLSAgICAsIG1fY29tcHV0aW5nT2Zmc2V0UG9zaXRpb24oZmFsc2UpCi0gICAgLCBtX2luY2x1
ZGVQYXJ0aWFsR2x5cGhzKGZhbHNlKQotICAgICwgbV9vZmZzZXRYKDApCi0gICAgLCBtX29mZnNl
dFBvc2l0aW9uKDApCi17Ci0gICAgaWYgKCFtX3BhZGRpbmcpCi0gICAgICAgIG1fcGFkUGVyU3Bh
Y2UgPSAwOwotICAgIGVsc2UgewotICAgICAgICBmbG9hdCBudW1TcGFjZXMgPSAwOwotICAgICAg
ICBmb3IgKGludCBzID0gMDsgcyA8IG1fcnVuLmxlbmd0aCgpOyBzKyspIHsKLSAgICAgICAgICAg
IGlmIChGb250Q2FzY2FkZTo6dHJlYXRBc1NwYWNlKG1fcnVuW3NdKSkKLSAgICAgICAgICAgICAg
ICBudW1TcGFjZXMrKzsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChudW1TcGFjZXMgPT0gMCkK
LSAgICAgICAgICAgIG1fcGFkUGVyU3BhY2UgPSAwOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBtX3BhZFBlclNwYWNlID0gbV9wYWRkaW5nIC8gbnVtU3BhY2VzOwotICAgIH0KLQotICAgIC8v
IE51bGwgb3V0IG91ciB1bmlzY3JpYmUgc3RydWN0cwotICAgIHJlc2V0Q29udHJvbEFuZFN0YXRl
KCk7Ci19Ci0KLWludCBVbmlzY3JpYmVDb250cm9sbGVyOjpvZmZzZXRGb3JQb3NpdGlvbihpbnQg
eCwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykKLXsKLSAgICBtX2NvbXB1dGluZ09mZnNldFBv
c2l0aW9uID0gdHJ1ZTsKLSAgICBtX2luY2x1ZGVQYXJ0aWFsR2x5cGhzID0gaW5jbHVkZVBhcnRp
YWxHbHlwaHM7Ci0gICAgbV9vZmZzZXRYID0geDsKLSAgICBtX29mZnNldFBvc2l0aW9uID0gMDsK
LSAgICBhZHZhbmNlKG1fcnVuLmxlbmd0aCgpKTsKLSAgICBpZiAobV9jb21wdXRpbmdPZmZzZXRQ
b3NpdGlvbikgewotICAgICAgICAvLyBUaGUgcG9pbnQgaXMgdG8gdGhlIGxlZnQgb3IgdG8gdGhl
IHJpZ2h0IG9mIHRoZSBlbnRpcmUgcnVuLgotICAgICAgICBpZiAoKG1fb2Zmc2V0WCA+PSBtX3J1
bldpZHRoU29GYXIgJiYgbV9ydW4ubHRyKCkpIHx8IChtX29mZnNldFggPCAwICYmIG1fcnVuLnJ0
bCgpKSkKLSAgICAgICAgICAgIG1fb2Zmc2V0UG9zaXRpb24gPSBtX2VuZDsKLSAgICB9Ci0gICAg
bV9jb21wdXRpbmdPZmZzZXRQb3NpdGlvbiA9IGZhbHNlOwotICAgIHJldHVybiBtX29mZnNldFBv
c2l0aW9uOwotfQotCi12b2lkIFVuaXNjcmliZUNvbnRyb2xsZXI6OmFkdmFuY2UodW5zaWduZWQg
b2Zmc2V0LCBHbHlwaEJ1ZmZlciogZ2x5cGhCdWZmZXIpCi17Ci0gICAgLy8gRklYTUU6IFdlIHJl
YWxseSB3YW50IHRvIGJlIHVzaW5nIGEgbmV3ZXIgdmVyc2lvbiBvZiBVbmlzY3JpYmUgdGhhdCBz
dXBwb3J0cyB0aGUgbmV3IE9wZW5UeXBlCi0gICAgLy8gZnVuY3Rpb25zLiAgVGhvc2UgZnVuY3Rp
b25zIHdvdWxkIGFsbG93IHVzIHRvIHR1cm4gb2ZmIGtlcm5pbmcgYW5kIGxpZ2F0dXJlcy4gIFdp
dGhvdXQgYmVpbmcgYWJsZQotICAgIC8vIHRvIGRvIHRoYXQsIHdlIHdpbGwgaGF2ZSBidWdneSBs
aW5lIGJyZWFraW5nIGFuZCBtZXRyaWNzIHdoZW4gc2ltcGxlIGFuZCBjb21wbGV4IHRleHQgYXJl
IGNsb3NlCi0gICAgLy8gdG9nZXRoZXIgKHRoZSBjb21wbGV4IGNvZGUgcGF0aCB3aWxsIG5hcnJv
dyB0aGUgdGV4dCBiZWNhdXNlIG9mIGtlcm5pbmcgYW5kIGxpZ2F0dXJlcyBhbmQgdGhlbgotICAg
IC8vIHdoZW4gYmlkaSBwcm9jZXNzaW5nIHNwbGl0cyBpbnRvIG11bHRpcGxlIHJ1bnMsIHRoZSBz
aW1wbGUgcG9ydGlvbnMgd2lsbCBnZXQgd2lkZXIgYW5kIGNhdXNlIHVzIHRvCi0gICAgLy8gc3Bp
bGwgb2ZmIHRoZSBlZGdlIG9mIGEgbGluZSkuCi0gICAgaWYgKHN0YXRpY19jYXN0PGludD4ob2Zm
c2V0KSA+IG1fZW5kKQotICAgICAgICBvZmZzZXQgPSBtX2VuZDsKLQotICAgIGludCBsZW5ndGgg
PSBvZmZzZXQgLSBtX2N1cnJlbnRDaGFyYWN0ZXI7Ci0gICAgaWYgKGxlbmd0aCA8PSAwKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBTdHJpbmcgYnVmZmVyRm9yMTZCaXREYXRhOwotCi0gICAgLy8g
SXRlbWl6ZSB0aGUgc3RyaW5nLgotICAgIGNvbnN0IFVDaGFyKiBjcCA9IG51bGxwdHI7Ci0gICAg
aWYgKG1fcnVuLmlzOEJpdCgpKSB7Ci0gICAgICAgIC8vIFVuaXNjcmliZSBvbmx5IGRlYWxzIHdp
dGggMTYtYml0IGNoYXJhY3RlcnMuIE11c3QgZ2VuZXJhdGUgdGhlbSBub3cuCi0gICAgICAgIGJ1
ZmZlckZvcjE2Qml0RGF0YSA9IFN0cmluZzo6bWFrZTE2Qml0RnJvbThCaXRTb3VyY2UobV9ydW4u
ZGF0YTgobV9jdXJyZW50Q2hhcmFjdGVyKSwgbGVuZ3RoKTsKLSAgICAgICAgY3AgPSBidWZmZXJG
b3IxNkJpdERhdGEuY2hhcmFjdGVyczE2KCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGNwID0gbV9y
dW4uZGF0YTE2KG1fY3VycmVudENoYXJhY3Rlcik7Ci0KLSAgICB1bnNpZ25lZCBiYXNlQ2hhcmFj
dGVyID0gbV9jdXJyZW50Q2hhcmFjdGVyOwotCi0gICAgLy8gV2UgYnJlYWsgdXAgaXRlbWl6YXRp
b24gb2YgdGhlIHN0cmluZyBieSBmb250RGF0YSBhbmQgKGlmIG5lZWRlZCkgdGhlIHVzZSBvZiBz
bWFsbCBjYXBzLgotCi0gICAgLy8gRklYTUU6IEl0J3MgaW5jb25zaXN0ZW50IHRoYXQgd2UgdXNl
IGxvZ2ljYWwgb3JkZXIgd2hlbiBpdGVtaXppbmcsIHNpbmNlIHRoaXMKLSAgICAvLyBkb2VzIG5v
dCBtYXRjaCBub3JtYWwgUlRMLgotCi0gICAgLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24gc2hvdWxk
IGRlY29kZSBzdXJyb2dhdGUgcGFpcnMuIEN1cnJlbnRseSBpdCBtYWtlcyBsaXR0bGUgZGlmZmVy
ZW5jZSB0aGF0Ci0gICAgLy8gaXQgZG9lcyBub3QgYmVjYXVzZSB0aGUgZm9udCBjYWNoZSBvbiBX
aW5kb3dzIGRvZXMgbm90IHN1cHBvcnQgbm9uLUJNUCBjaGFyYWN0ZXJzLgotICAgIFZlY3RvcjxV
Q2hhciwgMjU2PiBzbWFsbENhcHNCdWZmZXI7Ci0gICAgaWYgKG1fZm9udC5pc1NtYWxsQ2Fwcygp
KQotICAgICAgICBzbWFsbENhcHNCdWZmZXIucmVzaXplKGxlbmd0aCk7Ci0KLSAgICB1bnNpZ25l
ZCBpbmRleE9mRm9udFRyYW5zaXRpb24gPSBtX3J1bi5ydGwoKSA/IGxlbmd0aCAtIDEgOiAwOwot
ICAgIGNvbnN0IFVDaGFyKiBjdXJyID0gbV9ydW4ucnRsKCkgPyBjcCArIGxlbmd0aCAgLSAxIDog
Y3A7Ci0gICAgY29uc3QgVUNoYXIqIGVuZCA9IG1fcnVuLnJ0bCgpID8gY3AgLSAxIDogY3AgKyBs
ZW5ndGg7Ci0KLSAgICBjb25zdCBGb250KiBmb250RGF0YTsKLSAgICBjb25zdCBGb250KiBuZXh0
Rm9udERhdGEgPSBtX2ZvbnQuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKCpjdXJyLCBmYWxzZSkuZm9u
dDsKLQotICAgIFVDaGFyIG5ld0MgPSAwOwotCi0gICAgYm9vbCBpc1NtYWxsQ2FwczsKLSAgICBi
b29sIG5leHRJc1NtYWxsQ2FwcyA9IG1fZm9udC5pc1NtYWxsQ2FwcygpICYmICEoVV9HRVRfR0Nf
TUFTSygqY3VycikgJiBVX0dDX01fTUFTSykgJiYgKG5ld0MgPSB1X3RvdXBwZXIoKmN1cnIpKSAh
PSAqY3VycjsKLQotICAgIGlmIChuZXh0SXNTbWFsbENhcHMpCi0gICAgICAgIHNtYWxsQ2Fwc0J1
ZmZlcltjdXJyIC0gY3BdID0gbmV3QzsKLQotICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIGN1
cnIgPSBtX3J1bi5ydGwoKSA/IGN1cnIgLSAxIDogY3VyciArIDE7Ci0gICAgICAgIGlmIChjdXJy
ID09IGVuZCkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGZvbnREYXRhID0gbmV4dEZv
bnREYXRhOwotICAgICAgICBpc1NtYWxsQ2FwcyA9IG5leHRJc1NtYWxsQ2FwczsKLSAgICAgICAg
aW50IGluZGV4ID0gY3VyciAtIGNwOwotICAgICAgICBVQ2hhciBjID0gKmN1cnI7Ci0KLSAgICAg
ICAgYm9vbCBmb3JjZVNtYWxsQ2FwcyA9IGlzU21hbGxDYXBzICYmIChVX0dFVF9HQ19NQVNLKGMp
ICYgVV9HQ19NX01BU0spOwotICAgICAgICBuZXh0Rm9udERhdGEgPSBtX2ZvbnQuZ2x5cGhEYXRh
Rm9yQ2hhcmFjdGVyKCpjdXJyLCBmYWxzZSwgZm9yY2VTbWFsbENhcHMgPyBTbWFsbENhcHNWYXJp
YW50IDogQXV0b1ZhcmlhbnQpLmZvbnQ7Ci0gICAgICAgIGlmIChtX2ZvbnQuaXNTbWFsbENhcHMo
KSkgewotICAgICAgICAgICAgbmV4dElzU21hbGxDYXBzID0gZm9yY2VTbWFsbENhcHMgfHwgKG5l
d0MgPSB1X3RvdXBwZXIoYykpICE9IGM7Ci0gICAgICAgICAgICBpZiAobmV4dElzU21hbGxDYXBz
KQotICAgICAgICAgICAgICAgIHNtYWxsQ2Fwc0J1ZmZlcltpbmRleF0gPSBmb3JjZVNtYWxsQ2Fw
cyA/IGMgOiBuZXdDOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1fZmFsbGJhY2tGb250cyAm
JiBmb250RGF0YSAmJiBuZXh0Rm9udERhdGEgIT0gZm9udERhdGEgJiYgZm9udERhdGEgIT0gJm1f
Zm9udC5wcmltYXJ5Rm9udCgpKQotICAgICAgICAgICAgbV9mYWxsYmFja0ZvbnRzLT5hZGQoZm9u
dERhdGEpOwotCi0gICAgICAgIGlmIChuZXh0Rm9udERhdGEgIT0gZm9udERhdGEgfHwgbmV4dElz
U21hbGxDYXBzICE9IGlzU21hbGxDYXBzKSB7Ci0gICAgICAgICAgICBpbnQgaXRlbVN0YXJ0ID0g
bV9ydW4ucnRsKCkgPyBpbmRleCArIDEgOiBpbmRleE9mRm9udFRyYW5zaXRpb247Ci0gICAgICAg
ICAgICBpbnQgaXRlbUxlbmd0aCA9IG1fcnVuLnJ0bCgpID8gaW5kZXhPZkZvbnRUcmFuc2l0aW9u
IC0gaW5kZXggOiBpbmRleCAtIGluZGV4T2ZGb250VHJhbnNpdGlvbjsKLSAgICAgICAgICAgIG1f
Y3VycmVudENoYXJhY3RlciA9IGJhc2VDaGFyYWN0ZXIgKyBpdGVtU3RhcnQ7Ci0gICAgICAgICAg
ICBpdGVtaXplU2hhcGVBbmRQbGFjZSgoaXNTbWFsbENhcHMgPyBzbWFsbENhcHNCdWZmZXIuZGF0
YSgpIDogY3ApICsgaXRlbVN0YXJ0LCBpdGVtU3RhcnQsIGl0ZW1MZW5ndGgsIGZvbnREYXRhLCBn
bHlwaEJ1ZmZlcik7Ci0gICAgICAgICAgICBpbmRleE9mRm9udFRyYW5zaXRpb24gPSBpbmRleDsK
LSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBpbnQgaXRlbUxlbmd0aCA9IG1fcnVuLnJ0bCgp
ID8gaW5kZXhPZkZvbnRUcmFuc2l0aW9uICsgMSA6IGxlbmd0aCAtIGluZGV4T2ZGb250VHJhbnNp
dGlvbjsKLSAgICBpZiAoaXRlbUxlbmd0aCkgewotICAgICAgICBpZiAobV9mYWxsYmFja0ZvbnRz
ICYmIG5leHRGb250RGF0YSAmJiBuZXh0Rm9udERhdGEgIT0gJm1fZm9udC5wcmltYXJ5Rm9udCgp
KQotICAgICAgICAgICAgbV9mYWxsYmFja0ZvbnRzLT5hZGQobmV4dEZvbnREYXRhKTsKLQotICAg
ICAgICBpbnQgaXRlbVN0YXJ0ID0gbV9ydW4ucnRsKCkgPyAwIDogaW5kZXhPZkZvbnRUcmFuc2l0
aW9uOwotICAgICAgICBtX2N1cnJlbnRDaGFyYWN0ZXIgPSBiYXNlQ2hhcmFjdGVyICsgaXRlbVN0
YXJ0OwotICAgICAgICBpdGVtaXplU2hhcGVBbmRQbGFjZSgobmV4dElzU21hbGxDYXBzID8gc21h
bGxDYXBzQnVmZmVyLmRhdGEoKSA6IGNwKSArIGl0ZW1TdGFydCwgaXRlbVN0YXJ0LCBpdGVtTGVu
Z3RoLCBuZXh0Rm9udERhdGEsIGdseXBoQnVmZmVyKTsKLSAgICB9Ci0KLSAgICBtX2N1cnJlbnRD
aGFyYWN0ZXIgPSBiYXNlQ2hhcmFjdGVyICsgbGVuZ3RoOwotfQotCi12b2lkIFVuaXNjcmliZUNv
bnRyb2xsZXI6Oml0ZW1pemVTaGFwZUFuZFBsYWNlKGNvbnN0IFVDaGFyKiBjcCwgdW5zaWduZWQg
c3RyaW5nT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IEZvbnQqIGZvbnREYXRhLCBHbHlw
aEJ1ZmZlciogZ2x5cGhCdWZmZXIpCi17Ci0gICAgLy8gU2NyaXB0SXRlbWl6ZSAoaW4gV2luZG93
cyBYUCB2ZXJzaW9ucyBwcmlvciB0byBTUDIpIGNhbiBvdmVyZmxvdyBieSAxLiAgVGhpcyBpcyB3
aHkgdGhlcmUgaXMgYW4gZXh0cmEgZW1wdHkgaXRlbQotICAgIC8vIGhhbmdpbmcgb3V0IGF0IHRo
ZSBlbmQgb2YgdGhlIGFycmF5Ci0gICAgbV9pdGVtcy5yZXNpemUoNik7Ci0gICAgaW50IG51bUl0
ZW1zID0gMDsKLSAgICBIUkVTVUxUIHJjID0gU19PSzsKLSAgICB3aGlsZSAocmMgPSA6OlNjcmlw
dEl0ZW1pemUod2NoYXJGcm9tKGNwKSwgbGVuZ3RoLCBtX2l0ZW1zLnNpemUoKSAtIDEsICZtX2Nv
bnRyb2wsICZtX3N0YXRlLCBtX2l0ZW1zLmRhdGEoKSwgJm51bUl0ZW1zKSA9PSBFX09VVE9GTUVN
T1JZKSB7Ci0gICAgICAgIG1faXRlbXMucmVzaXplKG1faXRlbXMuc2l6ZSgpICogMik7Ci0gICAg
ICAgIHJlc2V0Q29udHJvbEFuZFN0YXRlKCk7Ci0gICAgfQotICAgIGlmIChGQUlMRUQocmMpKSB7
Ci0gICAgICAgIFdURkxvZ0Fsd2F5cygiVW5pc2NyaWJlQ29udHJvbGxlcjo6aXRlbWl6ZVNoYXBl
QW5kUGxhY2U6IFNjcmlwdEl0ZW1pemUgZmFpbGVkLCByYz0lbHgiLCByYyk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0gICAgbV9pdGVtcy5yZXNpemUobnVtSXRlbXMgKyAxKTsKLQotICAgIGlm
IChtX3J1bi5ydGwoKSkgewotICAgICAgICBmb3IgKGludCBpID0gbV9pdGVtcy5zaXplKCkgLSAy
OyBpID49IDA7IGktLSkgewotICAgICAgICAgICAgaWYgKCFzaGFwZUFuZFBsYWNlSXRlbShjcCwg
c3RyaW5nT2Zmc2V0LCBpLCBmb250RGF0YSwgZ2x5cGhCdWZmZXIpKQotICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBtX2l0ZW1zLnNpemUoKSAtIDE7IGkrKykgewotICAgICAgICAgICAgaWYgKCFz
aGFwZUFuZFBsYWNlSXRlbShjcCwgc3RyaW5nT2Zmc2V0LCBpLCBmb250RGF0YSwgZ2x5cGhCdWZm
ZXIpKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9p
ZCBVbmlzY3JpYmVDb250cm9sbGVyOjpyZXNldENvbnRyb2xBbmRTdGF0ZSgpCi17Ci0gICAgbWVt
c2V0KCZtX2NvbnRyb2wsIDAsIHNpemVvZihTQ1JJUFRfQ09OVFJPTCkpOwotICAgIG1lbXNldCgm
bV9zdGF0ZSwgMCwgc2l6ZW9mKFNDUklQVF9TVEFURSkpOwotCi0gICAgLy8gU2V0IHVwIHRoZSBj
b3JyZWN0IGRpcmVjdGlvbiBmb3IgdGhlIHJ1bi4KLSAgICBtX3N0YXRlLnVCaWRpTGV2ZWwgPSBt
X3J1bi5ydGwoKTsKLSAgICAKLSAgICAvLyBMb2NrIHRoZSBjb3JyZWN0IGRpcmVjdGlvbmFsIG92
ZXJyaWRlLgotICAgIG1fc3RhdGUuZk92ZXJyaWRlRGlyZWN0aW9uID0gbV9ydW4uZGlyZWN0aW9u
YWxPdmVycmlkZSgpOwotfQotCi1ib29sIFVuaXNjcmliZUNvbnRyb2xsZXI6OnNoYXBlQW5kUGxh
Y2VJdGVtKGNvbnN0IFVDaGFyKiBjcCwgdW5zaWduZWQgc3RyaW5nT2Zmc2V0LCB1bnNpZ25lZCBp
LCBjb25zdCBGb250KiBmb250RGF0YSwgR2x5cGhCdWZmZXIqIGdseXBoQnVmZmVyKQotewotICAg
IC8vIERldGVybWluZSB0aGUgc3RyaW5nIGZvciB0aGlzIGl0ZW0uCi0gICAgY29uc3QgVUNoYXIq
IHN0ciA9IGNwICsgbV9pdGVtc1tpXS5pQ2hhclBvczsKLSAgICBpbnQgbGVuID0gbV9pdGVtc1tp
KzFdLmlDaGFyUG9zIC0gbV9pdGVtc1tpXS5pQ2hhclBvczsKLSAgICBTQ1JJUFRfSVRFTSBpdGVt
ID0gbV9pdGVtc1tpXTsKLQotICAgIC8vIFNldCB1cCBidWZmZXJzIHRvIGhvbGQgdGhlIHJlc3Vs
dHMgb2Ygc2hhcGluZyB0aGUgaXRlbS4KLSAgICBWZWN0b3I8V09SRD4gZ2x5cGhzOwotICAgIFZl
Y3RvcjxXT1JEPiBjbHVzdGVyczsKLSAgICBWZWN0b3I8U0NSSVBUX1ZJU0FUVFI+IHZpc3VhbEF0
dHJpYnV0ZXM7Ci0gICAgY2x1c3RlcnMucmVzaXplKGxlbik7Ci0gICAgIAotICAgIC8vIFNoYXBl
IHRoZSBpdGVtLgotICAgIC8vIFRoZSByZWNvbW1lbmRlZCBzaXplIGZvciB0aGUgZ2x5cGggYnVm
ZmVyIGlzIDEuNSAqIHRoZSBjaGFyYWN0ZXIgbGVuZ3RoICsgMTYgaW4gdGhlIHVuaXNjcmliZSBk
b2NzLgotICAgIC8vIEFwcGFyZW50bHkgdGhpcyBpcyBhIGdvb2Qgc2l6ZSB0byBhdm9pZCBoYXZp
bmcgdG8gbWFrZSByZXBlYXRlZCBjYWxscyB0byBTY3JpcHRTaGFwZS4KLSAgICBnbHlwaHMucmVz
aXplKDEuNSAqIGxlbiArIDE2KTsKLSAgICB2aXN1YWxBdHRyaWJ1dGVzLnJlc2l6ZShnbHlwaHMu
c2l6ZSgpKTsKLQotICAgIGlmICghc2hhcGUoc3RyLCBsZW4sIGl0ZW0sIGZvbnREYXRhLCBnbHlw
aHMsIGNsdXN0ZXJzLCB2aXN1YWxBdHRyaWJ1dGVzKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0K
LSAgICBWZWN0b3I8T3B0aW9uYWw8dW5zaWduZWQ+PiBzdHJpbmdPZmZzZXRzKGdseXBocy5zaXpl
KCkpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW47ICsraSkgewotICAgICAgICBp
ZiAoc3RyaW5nT2Zmc2V0c1tjbHVzdGVyc1tpXV0pCi0gICAgICAgICAgICBzdHJpbmdPZmZzZXRz
W2NsdXN0ZXJzW2ldXSA9IHN0ZDo6bWluKCpzdHJpbmdPZmZzZXRzW2NsdXN0ZXJzW2ldXSwgaSk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHN0cmluZ09mZnNldHNbY2x1c3RlcnNbaV1dID0g
aTsKLSAgICB9Ci0KLSAgICAvLyBXZSBub3cgaGF2ZSBhIGNvbGxlY3Rpb24gb2YgZ2x5cGhzLgot
ICAgIFZlY3RvcjxHT0ZGU0VUPiBvZmZzZXRzOwotICAgIFZlY3RvcjxpbnQ+IGFkdmFuY2VzOwot
ICAgIG9mZnNldHMucmVzaXplKGdseXBocy5zaXplKCkpOwotICAgIGFkdmFuY2VzLnJlc2l6ZShn
bHlwaHMuc2l6ZSgpKTsKLSAgICBIUkVTVUxUIHBsYWNlUmVzdWx0ID0gU2NyaXB0UGxhY2UoMCwg
Zm9udERhdGEtPnNjcmlwdENhY2hlKCksIGdseXBocy5kYXRhKCksIGdseXBocy5zaXplKCksIHZp
c3VhbEF0dHJpYnV0ZXMuZGF0YSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAmaXRlbS5hLCBhZHZhbmNlcy5kYXRhKCksIG9mZnNldHMuZGF0YSgpLCAwKTsKLSAgICBp
ZiAocGxhY2VSZXN1bHQgPT0gRV9QRU5ESU5HKSB7Ci0gICAgICAgIC8vIFRoZSBzY3JpcHQgY2Fj
aGUgaXNuJ3QgcHJpbWVkIHdpdGggZW5vdWdoIGluZm8geWV0LiAgV2UgbmVlZCB0byBzZWxlY3Qg
b3VyIEhGT05UIGludG8KLSAgICAgICAgLy8gYSBEQyBhbmQgcGFzcyB0aGUgREMgaW4gdG8gU2Ny
aXB0UGxhY2UuCi0gICAgICAgIEhXbmREQyBoZGMoMCk7Ci0gICAgICAgIEhGT05UIGhmb250ID0g
Zm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLmhmb250KCk7Ci0gICAgICAgIEhGT05UIG9sZEZvbnQg
PSAoSEZPTlQpU2VsZWN0T2JqZWN0KGhkYywgaGZvbnQpOwotICAgICAgICBwbGFjZVJlc3VsdCA9
IFNjcmlwdFBsYWNlKGhkYywgZm9udERhdGEtPnNjcmlwdENhY2hlKCksIGdseXBocy5kYXRhKCks
IGdseXBocy5zaXplKCksIHZpc3VhbEF0dHJpYnV0ZXMuZGF0YSgpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICZpdGVtLmEsIGFkdmFuY2VzLmRhdGEoKSwgb2Zmc2V0cy5kYXRh
KCksIDApOwotICAgICAgICBTZWxlY3RPYmplY3QoaGRjLCBvbGRGb250KTsKLSAgICB9Ci0gICAg
Ci0gICAgaWYgKEZBSUxFRChwbGFjZVJlc3VsdCkgfHwgZ2x5cGhzLmlzRW1wdHkoKSkKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBDb252ZXJ0IGFsbCBjaGFycyB0aGF0IHNob3VsZCBi
ZSB0cmVhdGVkIGFzIHNwYWNlcyB0byB1c2UgdGhlIHNwYWNlIGdseXBoLgotICAgIC8vIFdlIGFs
c28gY3JlYXRlIGEgbWFwIHRoYXQgYWxsb3dzIHVzIHRvIHF1aWNrbHkgZ28gZnJvbSBzcGFjZSBn
bHlwaHMgYmFjayB0byB0aGVpciBjb3JyZXNwb25kaW5nIGNoYXJhY3RlcnMuCi0gICAgVmVjdG9y
PGludD4gc3BhY2VDaGFyYWN0ZXJzKGdseXBocy5zaXplKCkpOwotICAgIHNwYWNlQ2hhcmFjdGVy
cy5maWxsKC0xKTsKLQotICAgIGNvbnN0IGZsb2F0IGNMb2dpY2FsU2NhbGUgPSBmb250RGF0YS0+
cGxhdGZvcm1EYXRhKCkudXNlR0RJKCkgPyAxLjBmIDogMzIuMGY7Ci0gICAgZmxvYXQgc3BhY2VX
aWR0aCA9IGZvbnREYXRhLT5zcGFjZVdpZHRoKCkgLSBmb250RGF0YS0+c3ludGhldGljQm9sZE9m
ZnNldCgpOwotICAgIHVuc2lnbmVkIGxvZ2ljYWxTcGFjZVdpZHRoID0gc3BhY2VXaWR0aCAqIGNM
b2dpY2FsU2NhbGU7Ci0KLSAgICBmb3IgKGludCBrID0gMDsgayA8IGxlbjsgaysrKSB7Ci0gICAg
ICAgIFVDaGFyIGNoID0gKihzdHIgKyBrKTsKLSAgICAgICAgYm9vbCB0cmVhdEFzU3BhY2UgPSBG
b250Q2FzY2FkZTo6dHJlYXRBc1NwYWNlKGNoKTsKLSAgICAgICAgYm9vbCB0cmVhdEFzWmVyb1dp
ZHRoU3BhY2UgPSBGb250Q2FzY2FkZTo6dHJlYXRBc1plcm9XaWR0aFNwYWNlKGNoKTsKLSAgICAg
ICAgaWYgKHRyZWF0QXNTcGFjZSB8fCB0cmVhdEFzWmVyb1dpZHRoU3BhY2UpIHsKLSAgICAgICAg
ICAgIC8vIFN1YnN0aXR1dGUgaW4gdGhlIHNwYWNlIGdseXBoIGF0IHRoZSBhcHByb3ByaWF0ZSBw
bGFjZSBpbiB0aGUgZ2x5cGhzCi0gICAgICAgICAgICAvLyBhcnJheS4KLSAgICAgICAgICAgIGds
eXBoc1tjbHVzdGVyc1trXV0gPSBmb250RGF0YS0+c3BhY2VHbHlwaCgpOwotICAgICAgICAgICAg
YWR2YW5jZXNbY2x1c3RlcnNba11dID0gdHJlYXRBc1NwYWNlID8gbG9naWNhbFNwYWNlV2lkdGgg
OiAwOwotICAgICAgICAgICAgaWYgKHRyZWF0QXNTcGFjZSkKLSAgICAgICAgICAgICAgICBzcGFj
ZUNoYXJhY3RlcnNbY2x1c3RlcnNba11dID0gbV9jdXJyZW50Q2hhcmFjdGVyICsgayArIGl0ZW0u
aUNoYXJQb3M7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBQb3B1bGF0ZSBvdXIgZ2x5cGgg
YnVmZmVyIHdpdGggdGhpcyBpbmZvcm1hdGlvbi4KLSAgICBib29sIGhhc0V4dHJhU3BhY2luZyA9
IG1fZm9udC5sZXR0ZXJTcGFjaW5nKCkgfHwgbV9mb250LndvcmRTcGFjaW5nKCkgfHwgbV9wYWRk
aW5nOwotICAgIAotICAgIGZsb2F0IGxlZnRFZGdlID0gbV9ydW5XaWR0aFNvRmFyOwotCi0gICAg
Zm9yICh1bnNpZ25lZCBrID0gMDsgayA8IGdseXBocy5zaXplKCk7IGsrKykgewotICAgICAgICBH
bHlwaCBnbHlwaCA9IGdseXBoc1trXTsKLSAgICAgICAgZmxvYXQgYWR2YW5jZSA9IGFkdmFuY2Vz
W2tdIC8gY0xvZ2ljYWxTY2FsZTsKLSAgICAgICAgZmxvYXQgb2Zmc2V0WCA9IG9mZnNldHNba10u
ZHUgLyBjTG9naWNhbFNjYWxlOwotICAgICAgICBmbG9hdCBvZmZzZXRZID0gb2Zmc2V0c1trXS5k
diAvIGNMb2dpY2FsU2NhbGU7Ci0KLSAgICAgICAgLy8gTWF0Y2ggQXBwS2l0J3MgcnVsZXMgZm9y
IHRoZSBpbnRlZ2VyIHZzLiBub24taW50ZWdlciByZW5kZXJpbmcgbW9kZXMuCi0gICAgICAgIGZs
b2F0IHJvdW5kZWRBZHZhbmNlID0gcm91bmRmKGFkdmFuY2UpOwotICAgICAgICBpZiAoIWZvbnRE
YXRhLT5wbGF0Zm9ybURhdGEoKS5pc1N5c3RlbUZvbnQoKSkgewotICAgICAgICAgICAgYWR2YW5j
ZSA9IHJvdW5kZWRBZHZhbmNlOwotICAgICAgICAgICAgb2Zmc2V0WCA9IHJvdW5kZihvZmZzZXRY
KTsKLSAgICAgICAgICAgIG9mZnNldFkgPSByb3VuZGYob2Zmc2V0WSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBhZHZhbmNlICs9IGZvbnREYXRhLT5zeW50aGV0aWNCb2xkT2Zmc2V0KCk7Ci0KLSAg
ICAgICAgaWYgKGhhc0V4dHJhU3BhY2luZykgewotICAgICAgICAgICAgLy8gSWYgd2UncmUgYSBn
bHlwaCB3aXRoIGFuIGFkdmFuY2UsIGdvIGFoZWFkIGFuZCBhZGQgaW4gbGV0dGVyLXNwYWNpbmcu
Ci0gICAgICAgICAgICAvLyBUaGF0IHdheSB3ZSB3ZWVkIG91dCB6ZXJvIHdpZHRoIGx1cmtlcnMu
ICBUaGlzIGJlaGF2aW9yIG1hdGNoZXMgdGhlIGZhc3QgdGV4dCBjb2RlIHBhdGguCi0gICAgICAg
ICAgICBpZiAoYWR2YW5jZSAmJiBtX2ZvbnQubGV0dGVyU3BhY2luZygpKQotICAgICAgICAgICAg
ICAgIGFkdmFuY2UgKz0gbV9mb250LmxldHRlclNwYWNpbmcoKTsKLQotICAgICAgICAgICAgLy8g
SGFuZGxlIGp1c3RpZmljYXRpb24gYW5kIHdvcmQtc3BhY2luZy4KLSAgICAgICAgICAgIGludCBj
aGFyYWN0ZXJJbmRleCA9IHNwYWNlQ2hhcmFjdGVyc1trXTsKLSAgICAgICAgICAgIC8vIGNoYXJh
Y3RlckluZGV4IGlzIGxlZnQgYXQgdGhlIGluaXRpYWwgdmFsdWUgb2YgLTEgZm9yIGdseXBocyB0
aGF0IGRvIG5vdCBtYXAgYmFjayB0byB0cmVhdGVkLWFzLXNwYWNlIGNoYXJhY3RlcnMuCi0gICAg
ICAgICAgICBpZiAoY2hhcmFjdGVySW5kZXggIT0gLTEpIHsKLSAgICAgICAgICAgICAgICAvLyBB
Y2NvdW50IGZvciBwYWRkaW5nLiBXZWJDb3JlIHVzZXMgc3BhY2UgcGFkZGluZyB0byBqdXN0aWZ5
IHRleHQuCi0gICAgICAgICAgICAgICAgLy8gV2UgZGlzdHJpYnV0ZSB0aGUgc3BlY2lmaWVkIHBh
ZGRpbmcgb3ZlciB0aGUgYXZhaWxhYmxlIHNwYWNlcyBpbiB0aGUgcnVuLgotICAgICAgICAgICAg
ICAgIGlmIChtX3BhZGRpbmcpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gVXNlIGxlZnRvdmVy
IHBhZGRpbmcgaWYgbm90IGV2ZW5seSBkaXZpc2libGUgYnkgbnVtYmVyIG9mIHNwYWNlcy4KLSAg
ICAgICAgICAgICAgICAgICAgaWYgKG1fcGFkZGluZyA8IG1fcGFkUGVyU3BhY2UpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGFkdmFuY2UgKz0gbV9wYWRkaW5nOwotICAgICAgICAgICAgICAg
ICAgICAgICAgbV9wYWRkaW5nID0gMDsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIG1fcGFkZGluZyAtPSBtX3BhZFBlclNwYWNlOwotICAgICAg
ICAgICAgICAgICAgICAgICAgYWR2YW5jZSArPSBtX3BhZFBlclNwYWNlOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gQWNjb3Vu
dCBmb3Igd29yZC1zcGFjaW5nLgotICAgICAgICAgICAgICAgIGlmIChjaGFyYWN0ZXJJbmRleCA+
IDAgJiYgbV9mb250LndvcmRTcGFjaW5nKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgVUNoYXIg
Y2FuZGlkYXRlU3BhY2U7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX3J1bi5pczhCaXQoKSkK
LSAgICAgICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZVNwYWNlID0gKihtX3J1bi5kYXRhOChj
aGFyYWN0ZXJJbmRleCAtIDEpKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgICAgICAgICAgY2FuZGlkYXRlU3BhY2UgPSAqKG1fcnVuLmRhdGExNihjaGFyYWN0ZXJJ
bmRleCAtIDEpKTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoIUZvbnRDYXNjYWRlOjp0cmVh
dEFzU3BhY2UoY2FuZGlkYXRlU3BhY2UpKQotICAgICAgICAgICAgICAgICAgICAgICAgYWR2YW5j
ZSArPSBtX2ZvbnQud29yZFNwYWNpbmcoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLQotICAgICAgICBtX3J1bldpZHRoU29GYXIgKz0gYWR2YW5jZTsKLQot
ICAgICAgICAvLyBGSVhNRTogV2UgbmVlZCB0byB0YWtlIHRoZSBHT0ZGU0VUUyBmb3IgY29tYmlu
aW5nIGdseXBocyBhbmQgc3RvcmUgdGhlbSBpbiB0aGUgZ2x5cGggYnVmZmVyCi0gICAgICAgIC8v
IGFzIHdlbGwsIHNvIHRoYXQgd2hlbiB0aGUgdGltZSBjb21lcyB0byBkcmF3IHRob3NlIGdseXBo
cywgd2UgY2FuIGFwcGx5IHRoZSBhcHByb3ByaWF0ZQotICAgICAgICAvLyB0cmFuc2xhdGlvbi4K
LSAgICAgICAgaWYgKGdseXBoQnVmZmVyKSB7Ci0gICAgICAgICAgICBHbHlwaEJ1ZmZlckFkdmFu
Y2Ugb3JpZ2luKG9mZnNldFgsIC1vZmZzZXRZKTsKLSAgICAgICAgICAgIGlmICghZ2x5cGhCdWZm
ZXItPmFkdmFuY2VzQ291bnQoKSkKLSAgICAgICAgICAgICAgICBnbHlwaEJ1ZmZlci0+c2V0SW5p
dGlhbEFkdmFuY2Uob3JpZ2luKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBn
bHlwaEJ1ZmZlci0+ZXhwYW5kTGFzdEFkdmFuY2Uob3JpZ2luKTsKLSAgICAgICAgICAgIEdseXBo
QnVmZmVyQWR2YW5jZSBnbHlwaEFkdmFuY2UoLW9yaWdpbi53aWR0aCgpICsgYWR2YW5jZSwgLW9y
aWdpbi5oZWlnaHQoKSk7Ci0gICAgICAgICAgICBnbHlwaEJ1ZmZlci0+YWRkKGdseXBoLCBmb250
RGF0YSwgZ2x5cGhBZHZhbmNlLCBzdHJpbmdPZmZzZXRzW2tdLnZhbHVlT3IoMCkgKyBzdHJpbmdP
ZmZzZXQpOwotICAgICAgICB9Ci0KLSAgICAgICAgRmxvYXRSZWN0IGdseXBoQm91bmRzID0gZm9u
dERhdGEtPmJvdW5kc0ZvckdseXBoKGdseXBoKTsKLSAgICAgICAgZ2x5cGhCb3VuZHMubW92ZSht
X2dseXBoT3JpZ2luLngoKSwgbV9nbHlwaE9yaWdpbi55KCkpOwotICAgICAgICBtX21pbkdseXBo
Qm91bmRpbmdCb3hYID0gc3RkOjptaW4obV9taW5HbHlwaEJvdW5kaW5nQm94WCwgZ2x5cGhCb3Vu
ZHMueCgpKTsKLSAgICAgICAgbV9tYXhHbHlwaEJvdW5kaW5nQm94WCA9IHN0ZDo6bWF4KG1fbWF4
R2x5cGhCb3VuZGluZ0JveFgsIGdseXBoQm91bmRzLm1heFgoKSk7Ci0gICAgICAgIG1fbWluR2x5
cGhCb3VuZGluZ0JveFkgPSBzdGQ6Om1pbihtX21pbkdseXBoQm91bmRpbmdCb3hZLCBnbHlwaEJv
dW5kcy55KCkpOwotICAgICAgICBtX21heEdseXBoQm91bmRpbmdCb3hZID0gc3RkOjptYXgobV9t
YXhHbHlwaEJvdW5kaW5nQm94WSwgZ2x5cGhCb3VuZHMubWF4WSgpKTsKLSAgICAgICAgbV9nbHlw
aE9yaWdpbi5tb3ZlKGFkdmFuY2UgKyBvZmZzZXRYLCAtb2Zmc2V0WSk7Ci0KLSAgICAgICAgLy8g
TXV0YXRlIHRoZSBnbHlwaCBhcnJheSB0byBjb250YWluIG91ciBhbHRlcmVkIGFkdmFuY2VzLgot
ICAgICAgICBpZiAobV9jb21wdXRpbmdPZmZzZXRQb3NpdGlvbikKLSAgICAgICAgICAgIGFkdmFu
Y2VzW2tdID0gYWR2YW5jZTsKLSAgICB9Ci0KLSAgICB3aGlsZSAobV9jb21wdXRpbmdPZmZzZXRQ
b3NpdGlvbiAmJiBtX29mZnNldFggPj0gbGVmdEVkZ2UgJiYgbV9vZmZzZXRYIDwgbV9ydW5XaWR0
aFNvRmFyKSB7Ci0gICAgICAgIC8vIFRoZSBwb3NpdGlvbiBpcyBzb21ld2hlcmUgaW5zaWRlIHRo
aXMgcnVuLgotICAgICAgICBpbnQgdHJhaWxpbmcgPSAwOwotICAgICAgICBIUkVTVUxUIHJjID0g
OjpTY3JpcHRYdG9DUChtX29mZnNldFggLSBsZWZ0RWRnZSwgY2x1c3RlcnMuc2l6ZSgpLCBnbHlw
aHMuc2l6ZSgpLCBjbHVzdGVycy5kYXRhKCksIHZpc3VhbEF0dHJpYnV0ZXMuZGF0YSgpLAotICAg
ICAgICAgICAgICAgICAgICBhZHZhbmNlcy5kYXRhKCksICZpdGVtLmEsICZtX29mZnNldFBvc2l0
aW9uLCAmdHJhaWxpbmcpOwotICAgICAgICBpZiAoRkFJTEVEKHJjKSkgewotICAgICAgICAgICAg
V1RGTG9nQWx3YXlzKCJVbmlzY3JpYmVDb250cm9sbGVyOjpzaGFwZUFuZFBsYWNlSXRlbTogU2Ny
aXB0WHRvQ1AgZmFpbGVkIHJjPSVseCIsIHJjKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICB9Ci0gICAgICAgIGlmICh0cmFpbGluZyAmJiBtX2luY2x1ZGVQYXJ0aWFsR2x5cGhz
ICYmIG1fb2Zmc2V0UG9zaXRpb24gPCBsZW4gLSAxKSB7Ci0gICAgICAgICAgICBtX29mZnNldFBv
c2l0aW9uICs9IG1fY3VycmVudENoYXJhY3RlciArIG1faXRlbXNbaV0uaUNoYXJQb3M7Ci0gICAg
ICAgICAgICBtX29mZnNldFggKz0gbV9ydW4ucnRsKCkgPyAtdHJhaWxpbmcgOiB0cmFpbGluZzsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1fY29tcHV0aW5nT2Zmc2V0UG9zaXRpb24g
PSBmYWxzZTsKLSAgICAgICAgICAgIG1fb2Zmc2V0UG9zaXRpb24gKz0gbV9jdXJyZW50Q2hhcmFj
dGVyICsgbV9pdGVtc1tpXS5pQ2hhclBvczsKLSAgICAgICAgICAgIGlmICh0cmFpbGluZyAmJiBt
X2luY2x1ZGVQYXJ0aWFsR2x5cGhzKQotICAgICAgICAgICAgICAgbV9vZmZzZXRQb3NpdGlvbisr
OwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLWJvb2wgVW5pc2NyaWJlQ29udHJvbGxlcjo6c2hhcGUoY29uc3QgVUNo
YXIqIHN0ciwgaW50IGxlbiwgU0NSSVBUX0lURU0gaXRlbSwgY29uc3QgRm9udCogZm9udERhdGEs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxXT1JEPiYgZ2x5cGhzLCBW
ZWN0b3I8V09SRD4mIGNsdXN0ZXJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBW
ZWN0b3I8U0NSSVBUX1ZJU0FUVFI+JiB2aXN1YWxBdHRyaWJ1dGVzKQotewotICAgIEhXbmREQyBo
ZGM7Ci0gICAgSEZPTlQgb2xkRm9udCA9IDA7Ci0gICAgSFJFU1VMVCBzaGFwZVJlc3VsdCA9IEVf
UEVORElORzsKLSAgICBpbnQgZ2x5cGhDb3VudCA9IDA7Ci0KLSAgICBpZiAoIWZvbnREYXRhKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBkbyB7Ci0gICAgICAgIHNoYXBlUmVzdWx0ID0g
U2NyaXB0U2hhcGUoaGRjLCBmb250RGF0YS0+c2NyaXB0Q2FjaGUoKSwgd2NoYXJGcm9tKHN0ciks
IGxlbiwgZ2x5cGhzLnNpemUoKSwgJml0ZW0uYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnbHlwaHMuZGF0YSgpLCBjbHVzdGVycy5kYXRhKCksIHZpc3VhbEF0dHJpYnV0ZXMu
ZGF0YSgpLCAmZ2x5cGhDb3VudCk7Ci0gICAgICAgIGlmIChzaGFwZVJlc3VsdCA9PSBFX1BFTkRJ
TkcpIHsKLSAgICAgICAgICAgIC8vIFRoZSBzY3JpcHQgY2FjaGUgaXNuJ3QgcHJpbWVkIHdpdGgg
ZW5vdWdoIGluZm8geWV0LiAgV2UgbmVlZCB0byBzZWxlY3Qgb3VyIEhGT05UIGludG8KLSAgICAg
ICAgICAgIC8vIGEgREMgYW5kIHBhc3MgdGhlIERDIGluIHRvIFNjcmlwdFNoYXBlLgotICAgICAg
ICAgICAgQVNTRVJUKCFoZGMpOwotICAgICAgICAgICAgaGRjLnNldEhXbmQoMCk7Ci0gICAgICAg
ICAgICBIRk9OVCBoZm9udCA9IGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5oZm9udCgpOwotICAg
ICAgICAgICAgb2xkRm9udCA9IChIRk9OVClTZWxlY3RPYmplY3QoaGRjLCBoZm9udCk7Ci0gICAg
ICAgIH0gZWxzZSBpZiAoc2hhcGVSZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkgewotICAgICAgICAg
ICAgLy8gTmVlZCB0byByZXNpemUgb3VyIGJ1ZmZlcnMuCi0gICAgICAgICAgICBnbHlwaHMucmVz
aXplKGdseXBocy5zaXplKCkgKiAyKTsKLSAgICAgICAgICAgIHZpc3VhbEF0dHJpYnV0ZXMucmVz
aXplKGdseXBocy5zaXplKCkpOwotICAgICAgICB9Ci0gICAgfSB3aGlsZSAoc2hhcGVSZXN1bHQg
PT0gRV9QRU5ESU5HIHx8IHNoYXBlUmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOwotCi0gICAgaWYg
KGhkYykKLSAgICAgICAgU2VsZWN0T2JqZWN0KGhkYywgb2xkRm9udCk7Ci0KLSAgICBpZiAoRkFJ
TEVEKHNoYXBlUmVzdWx0KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZ2x5cGhzLnNo
cmluayhnbHlwaENvdW50KTsKLSAgICB2aXN1YWxBdHRyaWJ1dGVzLnNocmluayhnbHlwaENvdW50
KTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vVW5pc2NyaWJlQ29udHJvbGxlci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1VuaXNjcmliZUNvbnRyb2xsZXIuaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTQ2MjRjNzlhMDgwODMzMjBhNTI3MzVkZTExZGM5NGE4
YmM0ZmYwMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vVW5pc2NyaWJlQ29udHJvbGxlci5o
CisrKyAvZGV2L251bGwKQEAgLTEsOTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
NywgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpZm5kZWYgVW5pc2NyaWJlQ29udHJvbGxlcl9oCi0jZGVmaW5lIFVuaXNjcmliZUNv
bnRyb2xsZXJfaAotCi0jaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKLSNpbmNsdWRlICJHbHlwaEJ1
ZmZlci5oIgotI2luY2x1ZGUgPHVzcDEwLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFVuaXNjcmliZUNvbnRyb2xsZXIgewotcHVibGlj
OgotICAgIFVuaXNjcmliZUNvbnRyb2xsZXIoY29uc3QgRm9udENhc2NhZGUqLCBjb25zdCBUZXh0
UnVuJiwgSGFzaFNldDxjb25zdCBGb250Kj4qIGZhbGxiYWNrRm9udHMgPSAwKTsKLQotICAgIC8v
IEFkdmFuY2UgYW5kIG1lYXN1cmUvcGxhY2UgdXAgdG8gdGhlIHNwZWNpZmllZCBjaGFyYWN0ZXIu
Ci0gICAgdm9pZCBhZHZhbmNlKHVuc2lnbmVkIHRvLCBHbHlwaEJ1ZmZlciogPSAwKTsKLQotICAg
IC8vIENvbXB1dGUgdGhlIGNoYXJhY3RlciBvZmZzZXQgZm9yIGEgZ2l2ZW4geCBjb29yZGluYXRl
LgotICAgIGludCBvZmZzZXRGb3JQb3NpdGlvbihpbnQgeCwgYm9vbCBpbmNsdWRlUGFydGlhbEds
eXBocyk7Ci0KLSAgICAvLyBSZXR1cm5zIHRoZSB3aWR0aCBvZiBldmVyeXRoaW5nIHdlJ3ZlIGNv
bnN1bWVkIHNvIGZhci4KLSAgICBmbG9hdCBydW5XaWR0aFNvRmFyKCkgY29uc3QgeyByZXR1cm4g
bV9ydW5XaWR0aFNvRmFyOyB9Ci0KLSAgICBmbG9hdCBtaW5HbHlwaEJvdW5kaW5nQm94WCgpIGNv
bnN0IHsgcmV0dXJuIG1fbWluR2x5cGhCb3VuZGluZ0JveFg7IH0KLSAgICBmbG9hdCBtYXhHbHlw
aEJvdW5kaW5nQm94WCgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4R2x5cGhCb3VuZGluZ0JveFg7IH0K
LSAgICBmbG9hdCBtaW5HbHlwaEJvdW5kaW5nQm94WSgpIGNvbnN0IHsgcmV0dXJuIG1fbWluR2x5
cGhCb3VuZGluZ0JveFk7IH0KLSAgICBmbG9hdCBtYXhHbHlwaEJvdW5kaW5nQm94WSgpIGNvbnN0
IHsgcmV0dXJuIG1fbWF4R2x5cGhCb3VuZGluZ0JveFk7IH0KLQotcHJpdmF0ZTogICAgCi0gICAg
dm9pZCByZXNldENvbnRyb2xBbmRTdGF0ZSgpOwotCi0gICAgdm9pZCBpdGVtaXplU2hhcGVBbmRQ
bGFjZShjb25zdCBVQ2hhciosIHVuc2lnbmVkIHN0cmluZ09mZnNldCwgdW5zaWduZWQgbGVuZ3Ro
LCBjb25zdCBGb250KiwgR2x5cGhCdWZmZXIqKTsKLSAgICBib29sIHNoYXBlQW5kUGxhY2VJdGVt
KGNvbnN0IFVDaGFyKiwgdW5zaWduZWQgc3RyaW5nT2Zmc2V0LCB1bnNpZ25lZCBpbmRleCwgY29u
c3QgRm9udCosIEdseXBoQnVmZmVyKik7Ci0gICAgYm9vbCBzaGFwZShjb25zdCBVQ2hhciogc3Ry
LCBpbnQgbGVuLCBTQ1JJUFRfSVRFTSwgY29uc3QgRm9udCosCi0gICAgICAgICAgICAgICBWZWN0
b3I8V09SRD4mIGdseXBocywgVmVjdG9yPFdPUkQ+JiBjbHVzdGVycywKLSAgICAgICAgICAgICAg
IFZlY3RvcjxTQ1JJUFRfVklTQVRUUj4mIHZpc3VhbEF0dHJpYnV0ZXMpOwotCi0gICAgY29uc3Qg
Rm9udENhc2NhZGUmIG1fZm9udDsKLSAgICBjb25zdCBUZXh0UnVuJiBtX3J1bjsKLSAgICBIYXNo
U2V0PGNvbnN0IEZvbnQqPiogbV9mYWxsYmFja0ZvbnRzOwotICAgIEZsb2F0UG9pbnQgbV9nbHlw
aE9yaWdpbjsKLSAgICBmbG9hdCBtX21pbkdseXBoQm91bmRpbmdCb3hYOwotICAgIGZsb2F0IG1f
bWF4R2x5cGhCb3VuZGluZ0JveFg7Ci0gICAgZmxvYXQgbV9taW5HbHlwaEJvdW5kaW5nQm94WTsK
LSAgICBmbG9hdCBtX21heEdseXBoQm91bmRpbmdCb3hZOwotCi0gICAgU0NSSVBUX0NPTlRST0wg
bV9jb250cm9sOwotICAgIFNDUklQVF9TVEFURSBtX3N0YXRlOwotICAgIFZlY3RvcjxTQ1JJUFRf
SVRFTT4gbV9pdGVtczsKLSAKLSAgICB1bnNpZ25lZCBtX2N1cnJlbnRDaGFyYWN0ZXI7Ci0gICAg
aW50IG1fZW5kOwotCi0gICAgZmxvYXQgbV9ydW5XaWR0aFNvRmFyOwotICAgIGZsb2F0IG1fcGFk
ZGluZzsKLSAgICBmbG9hdCBtX3BhZFBlclNwYWNlOwotCi0gICAgYm9vbCBtX2NvbXB1dGluZ09m
ZnNldFBvc2l0aW9uOwotICAgIGJvb2wgbV9pbmNsdWRlUGFydGlhbEdseXBoczsKLSAgICBmbG9h
dCBtX29mZnNldFg7Ci0gICAgaW50IG1fb2Zmc2V0UG9zaXRpb247Ci19OwotCi19Ci0jZW5kaWYK
ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA5YTI3
Y2ZkZDIwZmNiOWU0NjQ0NDUzNGU0MGE0YTY4YzU5ZWY1ODcxLi5hODBhOGIwMTlkY2VmMjgxNjFh
N2QyYmViYjJjMmZiNWM5ZjUzNGQxIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIv
VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMjAtMDEtMDYgIEZ1amlpIEhpcm9u
b3JpICA8SGlyb25vcmkuRnVqaWlAc29ueS5jb20+CisKKyAgICAgICAgW1dpbl0gVXNlIENvbXBs
ZXhUZXh0Q29udHJvbGxlciBpbnN0ZWFkIG9mIFVuaXNjcmliZUNvbnRyb2xsZXIKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNDg4NAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJDb3JlL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHA6IEVuYWJsZWQgdGhlc2UgdGVz
dHMgZm9yIFBMQVRGT1JNKFdJTikuCisKIDIwMjAtMDEtMDYgIEpvbmF0aGFuIEJlZGFyZCAgPGpi
ZWRhcmRAYXBwbGUuY29tPgogCiAgICAgICAgIHJlc3VsdHMud2Via2l0Lm9yZzogVHdlYWsgcHJv
Y2Vzc2luZyBjb25zdGFudHMKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViQ29yZS9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJDb3JlL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAKaW5kZXggOTNmZTkwZTlkOWQx
N2MzMTQ2NTZlZTYyMGU4ZTNlNmYyYTA5N2ZjYy4uOTI2OGVmYjY4M2JlZjUxNTY2NjhhMTk3ODU5
ZTY1NGZlYTcxM2QwYSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJD
b3JlL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJDb3JlL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAKQEAgLTI1LDggKzI1LDYgQEAK
IAogI2luY2x1ZGUgImNvbmZpZy5oIgogCi0jaWYgIVBMQVRGT1JNKFdJTikKLQogI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luaXRpYWxpemVUaHJlYWRpbmcuaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L0NvbXBsZXhUZXh0Q29udHJvbGxlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRm9udENhc2NhZGUu
aD4KQEAgLTM2Nyw1ICszNjUsMyBAQCBURVNUX0YoQ29tcGxleFRleHRDb250cm9sbGVyVGVzdCwg
VG90YWxXaWR0aFdpdGhKdXN0aWZpY2F0aW9uKQogfQogCiB9Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDIw
ODNiMTlhZGU3OWQyOWIyN2E5Y2I0Yjg4ZTIzNjJiMWU2YTc3NTYuLmEzMGYzZmQyZGEzMWY3MzFm
YjQ3ZjNjNmQ5ZTRhNzljMzg2NzRiNjMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxv
ZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAyMC0wMS0w
NiAgRnVqaWkgSGlyb25vcmkgIDxIaXJvbm9yaS5GdWppaUBzb255LmNvbT4KKworICAgICAgICBb
V2luXSBVc2UgQ29tcGxleFRleHRDb250cm9sbGVyIGluc3RlYWQgb2YgVW5pc2NyaWJlQ29udHJv
bGxlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0
ODg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS93aW4vVGVzdEV4cGVjdGF0aW9uczoKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vZmFz
dC90ZXh0L2p1c3RpZnktaWRlb2dyYXBoLWNvbXBsZXgtZXhwZWN0ZWQudHh0OiBSZWJhc2VsaW5l
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS93aW5jYWlyby9UZXN0RXhwZWN0YXRpb25zOgorCiAyMDIw
LTAxLTA2ICBGdWppaSBIaXJvbm9yaSAgPEhpcm9ub3JpLkZ1amlpQHNvbnkuY29tPgogCiAgICAg
ICAgIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6b2Zmc2V0Rm9yUG9zaXRpb24gcmV0dXJucyBhIHdy
b25nIG9mZnNldCBmb3IgYSBnbHlwaCBib3VuZGFyeSBpbiBhIFJUTCB0ZXh0CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91dFRlc3Rz
L3BsYXRmb3JtL3dpbi9UZXN0RXhwZWN0YXRpb25zCmluZGV4IDQ1YmRkZjNjNTkzMWIyMzhkNzVm
MDNjYTMyYmFjODlhMjdiMTRkMWQuLjJiNDk3ZDA1YmEzOWMwNDE1ZTllMTBmODIxM2MyZWFmZTAz
YTVlMDMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9UZXN0RXhwZWN0YXRp
b25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9UZXN0RXhwZWN0YXRpb25zCkBAIC0y
OTY1LDYgKzI5NjUsOCBAQCB3ZWJraXQub3JnL2IvMTUxNzU5IGZhc3QvZG9tL1dpbmRvdy9wcm9w
ZXJ0eS1hY2Nlc3Mtb24tY2FjaGVkLXdpbmRvdy1hZnRlci1mcmFtZQogCiB3ZWJraXQub3JnL2Iv
MTUyMDA5IGZhc3QvY2FudmFzL2NhbnZhcy10b28tbGFyZ2UtdG8tZHJhdy5odG1sIFsgU2tpcCBd
CiAKK2Zhc3QvdGV4dC9hcmFiaWMtendqLWFuZC16d25qLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJl
IF0KKwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMg
RW5kIGxpc3Qgb2YgVU5SRVZJRVdFRCBmYWlsdXJlcyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKQEAgLTM0MjYsNiArMzQyOCw3IEBAIGZhc3QvdGV4
dC9jb21wbGV4LXNtYWxsLWNhcHMtbm9uLWJtcC1jYXBpdGFsaXplLmh0bWwgWyBJbWFnZU9ubHlG
YWlsdXJlIF0KIGZhc3QvdGV4dC9jdXJzaXZlLXpoLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0K
IGZhc3QvdGV4dC9lbW9qaS1zaW5nbGUtcGFyZW50LWZhbWlseS0yLmh0bWwgWyBJbWFnZU9ubHlG
YWlsdXJlIF0KIGZhc3QvdGV4dC9lbW9qaS1zaW5nbGUtcGFyZW50LWZhbWlseS5odG1sIFsgSW1h
Z2VPbmx5RmFpbHVyZSBdCitmYXN0L3RleHQvZW1vamktd2l0aC1qb2luZXIuaHRtbCBbIEZhaWx1
cmUgXQogaHR0cC90ZXN0cy9zZWN1cml0eS9odHRwLTAuOS9pbWFnZS1vbi1IVFRQLTAuOS1kZWZh
dWx0LXBvcnQtcGFnZS1hbGxvd2VkLXJlZi10ZXN0Lmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0K
IG1hdGhtbC9wcmVzZW50YXRpb24vbm9uLWJtcC1vcGVyYXRvcnMtc3RyZXRjaGluZy5odG1sIFsg
SW1hZ2VPbmx5RmFpbHVyZSBdCiBzZWN1cml0eS9jb250ZW50U2VjdXJpdHlQb2xpY3kvaW1hZ2Ut
d2l0aC1ibG9iLXVybC1hbGxvd2VkLWJ5LWltZy1zcmMtc3Rhci13aXRoLUFsbG93Q29udGVudFNl
Y3VyaXR5UG9saWN5U291cmNlU3RhclRvTWF0Y2hBbnlQcm90b2NvbC1lbmFibGVkLmh0bWwgWyBJ
bWFnZU9ubHlGYWlsdXJlIF0KQEAgLTQ1MDYsMyArNDUwOSw2IEBAIHdlYmtpdC5vcmcvYi8yMDQ5
NzQgaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9zeW5jLXhoci1pbi11bmxvYWQuaHRtbCBbIEZh
aWx1cmUKIHdlYmtpdC5vcmcvYi8yMDUyNzIganMvaW50ZWdlci1kaXZpc2lvbi1uZWcydG90aGUz
Mi1ieS1uZWcxLmh0bWwgWyBGYWlsdXJlIF0KIAogd2Via2l0Lm9yZy9iLzIwNTI3MyBpbXBvcnRl
ZC9ibGluay9mYXN0L3N1Yi1waXhlbC9uZWdhdGl2ZS1jb21wb3NpdGVkLW9mZnNldC5odG1sIFsg
UGFzcyBJbWFnZU9ubHlGYWlsdXJlIF0KKword2Via2l0Lm9yZy9iLzIwNTQ4NyBmYXN0L3RleHQv
c2VsZWN0aW9uLWluLWluaXRpYWwtYWR2YW5jZS1yZWdpb24uaHRtbCBbIEZhaWx1cmUgXQord2Vi
a2l0Lm9yZy9iLzIwNTQ4NSBmYXN0L3RleHQvc3RhbGUtVGV4dExheW91dC1mcm9tLWZpcnN0LWxp
bmUuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vd2luL2Zhc3QvdGV4dC9qdXN0aWZ5LWlkZW9ncmFwaC1jb21wbGV4LWV4cGVjdGVkLnR4
dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9mYXN0L3RleHQvanVzdGlmeS1pZGVvZ3JhcGgt
Y29tcGxleC1leHBlY3RlZC50eHQKaW5kZXggZjEwMTk0MjQzNTUyZTg1N2ZhNTE5OWFhMmFmZDg2
OTFmZTdmNzYwNy4uYWQ4NTY0MzEwOTFhNTU2MDU2YzBkODk2MDFiMDljNmVmYWZkZjcxOSAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL2Zhc3QvdGV4dC9qdXN0aWZ5LWlkZW9n
cmFwaC1jb21wbGV4LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4v
ZmFzdC90ZXh0L2p1c3RpZnktaWRlb2dyYXBoLWNvbXBsZXgtZXhwZWN0ZWQudHh0CkBAIC0xNiw4
ICsxNiw4IEBAIGxheWVyIGF0ICgwLDApIHNpemUgODAweDYwMAogICAgICAgICAgIHRleHQgcnVu
IGF0ICgwLDMwKSB3aWR0aCAzODI6ICJceHs1MTJBfVx4ezc1NzB9XHh7NzY4NH1ceHs4ODRDfVx4
ezUyRDV9XHh7NjFDOX1ceHs3NTI4fVx4ezdBMEJ9XHh7NUYwRn1ceHs1RTczfVx4ezUzRjB9XHh7
RkYwQ31ceHs1QkEyfVx4ezYyMzZ9XHh7NEU1Rn1ceHs5NzVFfVx4ezVFMzh9XHh7NTU5Q31ceHs2
MTFCfVx4ezk1OEJ9XHh7NzY3Q31ceHs0RUJBfVx4ezU0RTF9XHh7NjI0MH1ceHs1Mjc1fVx4ezRG
NUN9XHh7NzY4NH1ceHs2MUM5fVx4ezc1Mjh9XHh7N0EwQn1ceHs1RjBGfVx4ezMwMDJ9XHh7MzAw
RH0iCiAgICAgICBSZW5kZXJCbG9jayB7UH0gYXQgKDAsMTI5KSBzaXplIDU1MHg0NQogICAgICAg
ICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSA1NTB4NDUKLSAgICAgICAgICB0ZXh0
IHJ1biBhdCAoMCwwKSB3aWR0aCA1NTA6ICJFQSBNb2JpbGUgXHh7NzY4NH0gV29ybGR3aWRlIFN0
dWRpb3MgXHh7NTI2Rn1ceHs3RTNEfVx4ezg4QzF9IFRyYXZpcyBCb2F0bWFuIFx4ezYzMDd9XHh7
NTFGQX1ceHtGRjFBfVx4ezMwMEN9QXBwIFN0b3JlIFx4ezRFMER9XHh7NTBDNX1ceHs1RkI5fVx4
ezVFOTV9XHh7NjUzOX1ceHs4QjhBfVx4ezRFODZ9XHh7ODg0Q31ceHs1MkQ1fVx4ezkwNEF9XHh7
NjIzMn0iCi0gICAgICAgICAgdGV4dCBydW4gYXQgKDAsMTUpIHdpZHRoIDU1MDogIlx4ezc1MjJ9
XHh7Njk2RH1ceHs3Njg0fVx4ezc1MUZ9XHh7NjE0Qn1ceHtGRjBDfVx4ezgwMEN9XHh7NEUxNH1c
eHs5MDg0fVx4ezU3Mjh9XHh7NjMwMX1ceHs3RThDfVx4ezZGMTR9XHh7OTAzMn1ceHszMDAyfVx4
ezY3MDl9XHh7NEU4Nn1ceHs1MTY4fVx4ezc0MDN9IDUgXHh7NTM0M31ceHs1OTFBfVx4ezg0MkN9
XHh7NzY4NH0gaVBob25lIFx4ezU0OEN9IGlQb2QgdG91Y2ggXHh7NUJBMn1ceHs2MjM2fVx4ezcw
QkF9XHh7NTdGQX1ceHs3OTBFfVx4e0ZGMEN9QXBwIFN0b3JlIgorICAgICAgICAgIHRleHQgcnVu
IGF0ICgwLDApIHdpZHRoIDU1MDogIkVBIE1vYmlsZSBceHs3Njg0fSBXb3JsZHdpZGUgU3R1ZGlv
cyBceHs1MjZGfVx4ezdFM0R9XHh7ODhDMX0gVHJhdmlzIEJvYXRtYW4gXHh7NjMwN31ceHs1MUZB
fVx4e0ZGMUF9XHh7MzAwQ31BcHAgU3RvcmUgXHh7NEUwRH1ceHs1MEM1fVx4ezVGQjl9XHh7NUU5
NX1ceHs2NTM5fVx4ezhCOEF9XHh7NEU4Nn1ceHs4ODRDfVx4ezUyRDV9XHh7OTA0QX0iCisgICAg
ICAgICAgdGV4dCBydW4gYXQgKDAsMTUpIHdpZHRoIDU1MDogIlx4ezYyMzJ9XHh7NzUyMn1ceHs2
OTZEfVx4ezc2ODR9XHh7NzUxRn1ceHs2MTRCfVx4e0ZGMEN9XHh7ODAwQ31ceHs0RTE0fVx4ezkw
ODR9XHh7NTcyOH1ceHs2MzAxfVx4ezdFOEN9XHh7NkYxNH1ceHs5MDMyfVx4ezMwMDJ9XHh7Njcw
OX1ceHs0RTg2fVx4ezUxNjh9XHh7NzQwM30gNSBceHs1MzQzfVx4ezU5MUF9XHh7ODQyQ31ceHs3
Njg0fSBpUGhvbmUgXHh7NTQ4Q30gaVBvZCB0b3VjaCBceHs1QkEyfVx4ezYyMzZ9XHh7NzBCQX1c
eHs1N0ZBfVx4ezc5MEV9XHh7RkYwQ31BcHAgU3RvcmUiCiAgICAgICAgICAgdGV4dCBydW4gYXQg
KDAsMzApIHdpZHRoIDMwMTogIlx4ezhCOTN9XHh7NjIxMX1ceHs1MDExfVx4ezgwRkR9XHh7NTky
MH1ceHs5NThCfVx4ezc2N0N9XHh7NTNEN31ceHs1MjMwfVx4ezVFRTN9XHh7NTkyN31ceHs3Njg0
fVx4ezVCQTJ9XHh7NjIzNn1ceHs1NTlDfVx4ezYxMUJ9XHh7NzY4NH1ceHs5QUQ4fVx4ezU0QzF9
XHh7OENFQX0gRUEgXHh7OTA0QX1ceHs2MjMyfVx4ezMwMDJ9XHh7MzAwRH0iCiAgICAgICBSZW5k
ZXJCbG9jayB7UH0gYXQgKDAsMTg2KSBzaXplIDU1MHg0NQogICAgICAgICBSZW5kZXJUZXh0IHsj
dGV4dH0gYXQgKDAsMCkgc2l6ZSA1NTB4NDUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRm
b3JtL3dpbmNhaXJvL1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW5j
YWlyby9UZXN0RXhwZWN0YXRpb25zCmluZGV4IDg0OGMxZDdhY2M5NmQ2NGJiOTAxYWNiMDFiZWFi
MWFiNDZhZDE2NjkuLmE4NWM3MGJmNWZkNTA1YjY1Y2VlYjVhZWUwNjEwZjI5YzE0MDY1ODIgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbmNhaXJvL1Rlc3RFeHBlY3RhdGlvbnMK
KysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luY2Fpcm8vVGVzdEV4cGVjdGF0aW9ucwpAQCAt
ODI5LDYgKzgyOSw5IEBAIGZhc3QvZG9tL2ZvY3VzLXNoaWZ0LWNyYXNoLmh0bWwgWyBQYXNzIFRp
bWVvdXQgXQogZmFzdC9kb20vUmFuZ2UvZGV0YWNoLXJhbmdlLWR1cmluZy1kZWxldGVjb250ZW50
cy5odG1sIFsgUGFzcyBUaW1lb3V0IF0KIGltcG9ydGVkL2JsaW5rL2Zhc3QvZG9tL1dpbmRvdy9v
cGVuLXdpbmRvdy1mZWF0dXJlcy1mdXp6Lmh0bWwgWyBQYXNzIFRpbWVvdXQgXQogCit3ZWJraXQu
b3JnL2IvMjA1NDg3IGZhc3QvdGV4dC9zZWxlY3Rpb24taW4taW5pdGlhbC1hZHZhbmNlLXJlZ2lv
bi5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjA1NDg1IGZhc3QvdGV4dC9zdGFsZS1U
ZXh0TGF5b3V0LWZyb20tZmlyc3QtbGluZS5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCisKICMv
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KICMgaHR0cAogIy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLwpAQCAtMTExOSw3ICsxMTIyLDYgQEAgbGVnYWN5LWFuaW1hdGlv
bi1lbmdpbmUvY29tcG9zaXRpbmcvYmFja2luZy9iYWNraW5nLXN0b3JlLWF0dGFjaG1lbnQtZW1w
dHkta2V5ZnIKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKIHdlYmtpdC5vcmcvYi8xMTczMjIg
ZmFzdC9jc3MvdGV4dC1pbmRlbnQtZmlyc3QtbGluZS0wMDYuaHRtbCBbIEltYWdlT25seUZhaWx1
cmUgXQotd2Via2l0Lm9yZy9iLzExNzMyMiBmYXN0L2Nzcy93b3JkLXNwYWNpbmctY2hhcmFjdGVy
cy1jb21wbGV4LXRleHQuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQogZmFzdC9jc3MvZ2V0Q29t
cHV0ZWRTdHlsZS9nZXRDb21wdXRlZFN0eWxlLW91dGxpbmUtc2hvcnRoYW5kLmh0bWwgWyBQYXNz
IFRpbWVvdXQgXQogd2Via2l0Lm9yZy9iLzEzNjQ4NCBmYXN0L2Nzcy1nZW5lcmF0ZWQtY29udGVu
dC9pbml0aWFsLWxldHRlci1iYXNpYy5odG1sIFsgUGFzcyBGYWlsdXJlIF0KIHdlYmtpdC5vcmcv
Yi8xMzY0ODQgZmFzdC9jc3MtZ2VuZXJhdGVkLWNvbnRlbnQvaW5pdGlhbC1sZXR0ZXItYm9yZGVy
LXBhZGRpbmcuaHRtbCBbIFBhc3MgRmFpbHVyZSBdCkBAIC0xNzIxLDE1ICsxNzIzLDEyIEBAIGZh
c3QvdGV4dC9jb21wbGV4LXNtYWxsLWNhcHMtbm9uLWJtcC1jYXBpdGFsaXplLmh0bWwgWyBJbWFn
ZU9ubHlGYWlsdXJlIF0KIGZhc3QvdGV4dC9kZWNvcmF0aW9ucy12ZXJ0aWNhbC11bmRlcmxpbmUu
aHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQogZmFzdC90ZXh0L2VsbGlwc2lzLXRleHQtcnRsLmh0
bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KIGZhc3QvdGV4dC9lbW9qaS1vdmVybGFwLmh0bWwgWyBJ
bWFnZU9ubHlGYWlsdXJlIF0KLWZhc3QvdGV4dC9lbW9qaS1zaW5nbGUtcGFyZW50LWZhbWlseS0y
Lmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KLWZhc3QvdGV4dC9lbW9qaS1zaW5nbGUtcGFyZW50
LWZhbWlseS5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCiBmYXN0L3RleHQvZW1vamktdmFyaWF0
aW9uLXNlbGVjdG9yLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KIGZhc3QvdGV4dC9lbW9qaS13
aXRoLWpvaW5lci5odG1sIFsgRmFpbHVyZSBdCiBmYXN0L3RleHQvZW1vamkuaHRtbCBbIEZhaWx1
cmUgXQogZmFzdC90ZXh0L2VtcGhhc2lzLW92ZXJsYXAuaHRtbCBbIEZhaWx1cmUgXQogZmFzdC90
ZXh0L2ZhbGxiYWNrLWxhbmd1YWdlLWhhbi0yLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KIGZh
c3QvdGV4dC9mYWxsYmFjay10cmFpdHMtZml4dXAuaHRtbCBbIEZhaWx1cmUgXQotZmFzdC90ZXh0
L2ZpdHpwYXRyaWNrLWNvbWJpbmF0aW9uLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KIGZhc3Qv
dGV4dC9mb250LWN1cnNpdmUtaXRhbGljLWNqay5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCiBm
YXN0L3RleHQvZm9udC1rZXJuaW5nLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KIGZhc3QvdGV4
dC9mb250LWxvYWQtZGF0YS1wYXJ0aXRpb25lZC1hbHBoYWJldC5odG1sIFsgRmFpbHVyZSBdCkBA
IC0xNzU5LDcgKzE3NTgsNiBAQCBmYXN0L3RleHQvanVzdGlmeS1pZGVvZ3JhcGgtY29tcGxleC5o
dG1sIFsgRmFpbHVyZSBdCiBmYXN0L3RleHQvanVzdGlmeS1pZGVvZ3JhcGgtc2ltcGxlLmh0bWwg
WyBGYWlsdXJlIF0KIGZhc3QvdGV4dC9qdXN0aWZ5LWlkZW9ncmFwaC12ZXJ0aWNhbC5odG1sIFsg
RmFpbHVyZSBdCiBmYXN0L3RleHQvanVzdGlmeS1uYnNwLmh0bWwgWyBGYWlsdXJlIF0KLWZhc3Qv
dGV4dC9rZXJuaW5nLXdpdGgtVGV4dExheW91dC5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCiBm
YXN0L3RleHQva2htZXItbGFvLWZvbnQuaHRtbCBbIEZhaWx1cmUgXQogZmFzdC90ZXh0L2xpbmUt
YnJlYWstYmV0d2Vlbi10ZXh0LW5vZGVzLWxhdGluMS5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBd
CiBmYXN0L3RleHQvbGluZS1icmVhay1iZXR3ZWVuLXRleHQtbm9kZXMuaHRtbCBbIEltYWdlT25s
eUZhaWx1cmUgXQpAQCAtMTc4Nyw3ICsxNzg1LDYgQEAgZmFzdC90ZXh0L3NtYWxsLWxpbmUtaGVp
Z2h0Lmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KIGZhc3QvdGV4dC9zb2Z0LWh5cGhlbi1hcy1m
aXJzdC1icmVha2luZy1vcHBvcnR1bml0eS5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCiBmYXN0
L3RleHQvc29mdC1oeXBoZW4tbWluLXByZWZlcnJlZC13aWR0aC5odG1sIFsgSW1hZ2VPbmx5RmFp
bHVyZSBdCiBmYXN0L3RleHQvc3BhY2Utd2lkdGguaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQot
ZmFzdC90ZXh0L3N0YWxlLVRleHRMYXlvdXQtZnJvbS1maXJzdC1saW5lLmh0bWwgWyBJbWFnZU9u
bHlGYWlsdXJlIF0KIGZhc3QvdGV4dC9zdmctZm9udC1mYWNlLXdpdGgta2VybmluZy5odG1sIFsg
RmFpbHVyZSBdCiBmYXN0L3RleHQvc3ludGhldGljLWJvbGQtdHJhbnNmb3JtZWQuaHRtbCBbIElt
YWdlT25seUZhaWx1cmUgXQogZmFzdC90ZXh0L3N5c3RlbS1mb250LWZhbGxiYWNrLWVtb2ppLmh0
bWwgWyBGYWlsdXJlIF0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>387087</attachid>
            <date>2020-01-08 02:03:06 -0800</date>
            <delta_ts>2020-01-09 18:28:01 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204884-20200108190304.patch</filename>
            <type>text/plain</type>
            <size>56423</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0MTkwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2UwMDkwZDYyMWVmODVm
MTViYzg3NTg0MjFhZWQ5ZTI0YzYxYzBhOS4uYzhhMjM0N2YxNzBiZGFlZTM4ZmFhMTQ3YTdjMzYz
MzRkMmMwZjZiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDIwLTAxLTA4ICBGdWpp
aSBIaXJvbm9yaSAgPEhpcm9ub3JpLkZ1amlpQHNvbnkuY29tPgorCisgICAgICAgIFtXaW5dIFVz
ZSBDb21wbGV4VGV4dENvbnRyb2xsZXIgaW5zdGVhZCBvZiBVbmlzY3JpYmVDb250cm9sbGVyCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQ4ODQKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVbmlzY3JpYmVD
b250cm9sbGVyIGRvZXNuJ3Qgc3VwcG9ydCBzdXJyb2dhdGUgcGFpcnMgYW5kIGhhcworICAgICAg
ICByZW5kZXJpbmcgZ2xpdGNoZXMgb2YgcGFydGlhbGx5IHNlbGVjdGVkIGEgY29tYmluaW5nIGNo
YXJhY3Rlci4KKworICAgICAgICBSZW1vdmUgVW5pc2NyaWJlQ29udHJvbGxlciwgYW5kIHVzZSBD
b21wbGV4VGV4dENvbnRyb2xsZXIgYnkKKyAgICAgICAgaW1wbGVtZW50aW5nIGBjb2xsZWN0Q29t
cGxleFRleHRSdW5zRm9yQ2hhcmFjdGVyc2Agd2l0aCBVbmlzY3JpYmUuCisKKyAgICAgICAgQ292
ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIFBsYXRmb3JtV2luLmNtYWtlOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDb21wbGV4VGV4dENvbnRyb2xsZXI6OmNvbGxlY3RDb21wbGV4VGV4
dFJ1bnNGb3JDaGFyYWN0ZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9Gb250Q2FzY2FkZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6d2lkdGhP
ZlRleHRSYW5nZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6Z2V0R2x5
cGhzQW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpG
b250Q2FzY2FkZTo6ZHJhd0dseXBoQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZv
bnRDYXNjYWRlOjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udENhc2NhZGU6OmFkanVzdFNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JD
b21wbGV4VGV4dCBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbXBs
ZXhUZXh0Q29udHJvbGxlclVuaXNjcmliZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
c2hhcGVCeVVuaXNjcmliZSk6CisgICAgICAgIChXZWJDb3JlOjpDb21wbGV4VGV4dENvbnRyb2xs
ZXI6OmNvbGxlY3RDb21wbGV4VGV4dFJ1bnNGb3JDaGFyYWN0ZXJzKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy93aW4vRm9udENHV2luLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vRm9udENhc2NhZGVEaXJlY3QyRC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ZvbnRXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmFk
anVzdFNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGb250Q2FzY2FkZTo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4
dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6ZmxvYXRX
aWR0aEZvckNvbXBsZXhUZXh0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZv
bnRDYXNjYWRlOjpvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0IGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vVW5pc2NyaWJlQ29udHJvbGxlci5j
cHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1VuaXNjcmliZUNv
bnRyb2xsZXIuaDogUmVtb3ZlZC4KKwogMjAyMC0wMS0wOCAgRnVqaWkgSGlyb25vcmkgIDxIaXJv
bm9yaS5GdWppaUBzb255LmNvbT4KIAogICAgICAgICBbSGFyZkJ1enpdW0dUS10gZmFzdC90ZXh0
L2NvbXBsZXgtZmlyc3QtZ2x5cGgtd2l0aC1pbml0aWFsLWFkdmFuY2UuaHRtbCBpcyBmYWlsaW5n
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbi5jbWFrZSBiL1NvdXJjZS9X
ZWJDb3JlL1BsYXRmb3JtV2luLmNtYWtlCmluZGV4IDI1MGEwYjM1YzA0MDJmNjc5ZGFlNDliNGEy
MGM1YmExOWQ2NWZlYjguLjRmMzA3MTU5YjdlZDgwNmViODE5NTJiYmE0NWY1YzA3YThkYzkzZWIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luLmNtYWtlCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1BsYXRmb3JtV2luLmNtYWtlCkBAIC01MCw2ICs1MCw3IEBAIGxpc3QoQVBQRU5E
IFdlYkNvcmVfU09VUkNFUwogCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbG9yRGlyZWN0
MkQuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbXBsZXhUZXh0Q29udHJvbGxlckRp
cmVjdFdyaXRlLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db21wbGV4VGV4dENvbnRy
b2xsZXJVbmlzY3JpYmUuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RJQlBpeGVsRGF0
YS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRmxvYXRQb2ludERpcmVjdDJELmNwcAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9GbG9hdFJlY3REaXJlY3QyRC5jcHAKQEAgLTY4LDcg
KzY5LDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL1NpbXBsZUZvbnREYXRhV2luLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9U
cmFuc2Zvcm1hdGlvbk1hdHJpeERpcmVjdDJELmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dp
bi9UcmFuc2Zvcm1hdGlvbk1hdHJpeFdpbi5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
VW5pc2NyaWJlQ29udHJvbGxlci5jcHAKIAogICAgIHBsYXRmb3JtL25ldHdvcmsvd2luL0Rvd25s
b2FkQnVuZGxlV2luLmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvd2luL05ldHdvcmtTdGF0ZU5v
dGlmaWVyV2luLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvQ29tcGxleFRleHRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAKaW5kZXggODM0N2M5ZmIwYzI4YTk3NjA3
NDhjMTIzNGUwNDlkYzQwMjNkNjU0Ny4uMmQ4NTQzODQ0NDAyZGFhOWQ0MDBkOWVjYTkxZmExM2M0
MGJmODlkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29t
cGxleFRleHRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwCkBAIC00MywzMyArNDMsNiBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLSNpZiBQTEFURk9STShXSU4pICYmICFVU0UoRElSRUNUMkQpCi0K
LWNsYXNzIFRleHRMYXlvdXQgewotfTsKLQotdm9pZCBUZXh0TGF5b3V0RGVsZXRlcjo6b3BlcmF0
b3IoKShUZXh0TGF5b3V0KikgY29uc3QKLXsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPFRleHRMYXlv
dXQsIFRleHRMYXlvdXREZWxldGVyPiBGb250Q2FzY2FkZTo6Y3JlYXRlTGF5b3V0KFJlbmRlclRl
eHQmLCBmbG9hdCwgYm9vbCkgY29uc3QKLXsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotZmxv
YXQgRm9udENhc2NhZGU6OndpZHRoKFRleHRMYXlvdXQmLCB1bnNpZ25lZCwgdW5zaWduZWQsIEhh
c2hTZXQ8Y29uc3QgRm9udCo+KikKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICBy
ZXR1cm4gMDsKLX0KLQotdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmNvbGxlY3RDb21wbGV4
VGV4dFJ1bnNGb3JDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQsIHVuc2lnbmVkLCBj
b25zdCBGb250KikKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotI2Vsc2UKLQog
Y2xhc3MgVGV4dExheW91dCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6
CkBAIC05MDYsNiArODc5LDQgQEAgQ29tcGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4dFJ1
bjo6Q29tcGxleFRleHRSdW4oY29uc3QgVmVjdG9yPEZsb2F0U2l6ZT4mIGEKIHsKIH0KIAotI2Vu
ZGlmCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcAppbmRleCAxYTZmNzNhODIzOTZlNDAxZDk0Mzdm
ZWE2MDNjOTBiNmI1MGRjNWY5Li44MzA4ZjJiMjAyYWMyNDg5NzhiZWRjZTlmMTk3YzExZGE2MmQw
NmUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2Fz
Y2FkZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2Nh
ZGUuY3BwCkBAIC00MSwxMCArNDEsNiBAQAogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmdI
YXNoLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCi0jaWYgUExBVEZP
Uk0oV0lOKSAmJiAhVVNFKERJUkVDVDJEKQotI2luY2x1ZGUgIlVuaXNjcmliZUNvbnRyb2xsZXIu
aCIKLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBXVEY6
OlVuaWNvZGU7CkBAIC0zNTAsMTUgKzM0Niw2IEBAIGZsb2F0IEZvbnRDYXNjYWRlOjp3aWR0aE9m
VGV4dFJhbmdlKGNvbnN0IFRleHRSdW4mIHJ1biwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQKIAog
ICAgIGF1dG8gY29kZVBhdGhUb1VzZSA9IGNvZGVQYXRoKHJ1bik7CiAgICAgaWYgKGNvZGVQYXRo
VG9Vc2UgPT0gQ29tcGxleCkgewotI2lmIFBMQVRGT1JNKFdJTikgJiYgIVVTRShESVJFQ1QyRCkK
LSAgICAgICAgVW5pc2NyaWJlQ29udHJvbGxlciBpdCh0aGlzLCBydW4pOwotICAgICAgICBpdC5h
ZHZhbmNlKGZyb20pOwotICAgICAgICBvZmZzZXRCZWZvcmVSYW5nZSA9IGl0LnJ1bldpZHRoU29G
YXIoKTsKLSAgICAgICAgaXQuYWR2YW5jZSh0byk7Ci0gICAgICAgIG9mZnNldEFmdGVyUmFuZ2Ug
PSBpdC5ydW5XaWR0aFNvRmFyKCk7Ci0gICAgICAgIGl0LmFkdmFuY2UodG8pOwotICAgICAgICB0
b3RhbFdpZHRoID0gaXQucnVuV2lkdGhTb0ZhcigpOwotI2Vsc2UKICAgICAgICAgQ29tcGxleFRl
eHRDb250cm9sbGVyIGNvbXBsZXhJdGVyYXRvcigqdGhpcywgcnVuLCBmYWxzZSwgZmFsbGJhY2tG
b250cyk7CiAgICAgICAgIGNvbXBsZXhJdGVyYXRvci5hZHZhbmNlKGZyb20sIG51bGxwdHIsIElu
Y2x1ZGVQYXJ0aWFsR2x5cGhzLCBmYWxsYmFja0ZvbnRzKTsKICAgICAgICAgb2Zmc2V0QmVmb3Jl
UmFuZ2UgPSBjb21wbGV4SXRlcmF0b3IucnVuV2lkdGhTb0ZhcigpOwpAQCAtMzY2LDcgKzM1Myw2
IEBAIGZsb2F0IEZvbnRDYXNjYWRlOjp3aWR0aE9mVGV4dFJhbmdlKGNvbnN0IFRleHRSdW4mIHJ1
biwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQKICAgICAgICAgb2Zmc2V0QWZ0ZXJSYW5nZSA9IGNv
bXBsZXhJdGVyYXRvci5ydW5XaWR0aFNvRmFyKCk7CiAgICAgICAgIGNvbXBsZXhJdGVyYXRvci5h
ZHZhbmNlKHJ1bi5sZW5ndGgoKSwgbnVsbHB0ciwgSW5jbHVkZVBhcnRpYWxHbHlwaHMsIGZhbGxi
YWNrRm9udHMpOwogICAgICAgICB0b3RhbFdpZHRoID0gY29tcGxleEl0ZXJhdG9yLnJ1bldpZHRo
U29GYXIoKTsKLSNlbmRpZgogICAgIH0gZWxzZSB7CiAgICAgICAgIFdpZHRoSXRlcmF0b3Igc2lt
cGxlSXRlcmF0b3IodGhpcywgcnVuLCBmYWxsYmFja0ZvbnRzKTsKICAgICAgICAgc2ltcGxlSXRl
cmF0b3IuYWR2YW5jZShmcm9tLCBudWxscHRyKTsKQEAgLTEzOTcsNyArMTM4Myw2IEBAIGZsb2F0
IEZvbnRDYXNjYWRlOjpnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvclNpbXBsZVRleHQoY29uc3QgVGV4
dFJ1biYgcnVuLCB1bnNpZ25lCiAgICAgcmV0dXJuIGluaXRpYWxBZHZhbmNlOwogfQogCi0jaWYg
IVBMQVRGT1JNKFdJTikgfHwgVVNFKERJUkVDVDJEKQogZmxvYXQgRm9udENhc2NhZGU6OmdldEds
eXBoc0FuZEFkdmFuY2VzRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCB1bnNpZ25l
ZCBmcm9tLCB1bnNpZ25lZCB0bywgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBGb3JUZXh0RW1w
aGFzaXNPck5vdCBmb3JUZXh0RW1waGFzaXMpIGNvbnN0CiB7CiAgICAgZmxvYXQgaW5pdGlhbEFk
dmFuY2U7CkBAIC0xNDI3LDcgKzE0MTIsNiBAQCBmbG9hdCBGb250Q2FzY2FkZTo6Z2V0R2x5cGhz
QW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIHVuc2lnbgogCiAg
ICAgcmV0dXJuIGluaXRpYWxBZHZhbmNlOwogfQotI2VuZGlmCiAKIHZvaWQgRm9udENhc2NhZGU6
OmRyYXdFbXBoYXNpc01hcmtzRm9yU2ltcGxlVGV4dChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgQXRvbVN0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnQsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvKSBjb25zdAogewpAQCAtMTQ1
MiwxMyArMTQzNiw3IEBAIHZvaWQgRm9udENhc2NhZGU6OmRyYXdHbHlwaEJ1ZmZlcihHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEdseXBoQnVmZmVyJiBnCiB7CiAgICAgLy8gRHJhdyBl
YWNoIGNvbnRpZ3VvdXMgcnVuIG9mIGdseXBocyB0aGF0IHVzZSB0aGUgc2FtZSBmb250IGRhdGEu
CiAgICAgY29uc3QgRm9udCogZm9udERhdGEgPSBnbHlwaEJ1ZmZlci5mb250QXQoMCk7Ci0jaWYg
UExBVEZPUk0oV0lOKQotICAgIEZsb2F0UG9pbnQgc3RhcnRQb2ludChwb2ludC54KCkgKyBnbHlw
aEJ1ZmZlci5pbml0aWFsQWR2YW5jZSgpLndpZHRoKCksIHBvaW50LnkoKSArIGdseXBoQnVmZmVy
LmluaXRpYWxBZHZhbmNlKCkuaGVpZ2h0KCkpOwotI2Vsc2UKLSAgICAvLyBGSVhNRTogV2h5IGRv
IHdlIHN1YnRyYWN0IHRoZSBpbml0aWFsIGFkdmFuY2UncyBoZWlnaHQgYnV0IG5vdCBpdHMgd2lk
dGg/Pz8KLSAgICAvLyBXZSBzaG91bGQgdXNlIHRoZSBsaW5lIGFib3ZlIGZyb20gV2luZG93cyBp
bnN0ZWFkLgogICAgIEZsb2F0UG9pbnQgc3RhcnRQb2ludChwb2ludC54KCksIHBvaW50LnkoKSAt
IGdseXBoQnVmZmVyLmluaXRpYWxBZHZhbmNlKCkuaGVpZ2h0KCkpOwotI2VuZGlmCiAgICAgZmxv
YXQgbmV4dFggPSBzdGFydFBvaW50LngoKSArIGdseXBoQnVmZmVyLmFkdmFuY2VBdCgwKS53aWR0
aCgpOwogICAgIGZsb2F0IG5leHRZID0gc3RhcnRQb2ludC55KCkgKyBnbHlwaEJ1ZmZlci5hZHZh
bmNlQXQoMCkuaGVpZ2h0KCk7CiAgICAgdW5zaWduZWQgbGFzdEZyb20gPSAwOwpAQCAtMTU0NSw3
ICsxNTIzLDYgQEAgZmxvYXQgRm9udENhc2NhZGU6OmZsb2F0V2lkdGhGb3JTaW1wbGVUZXh0KGNv
bnN0IFRleHRSdW4mIHJ1biwgSGFzaFNldDxjb25zdCBGb24KICAgICByZXR1cm4gaXQubV9ydW5X
aWR0aFNvRmFyOwogfQogCi0jaWYgIVBMQVRGT1JNKFdJTikgfHwgVVNFKERJUkVDVDJEKQogZmxv
YXQgRm9udENhc2NhZGU6OmZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBy
dW4sIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBn
bHlwaE92ZXJmbG93KSBjb25zdAogewogICAgIENvbXBsZXhUZXh0Q29udHJvbGxlciBjb250cm9s
bGVyKCp0aGlzLCBydW4sIHRydWUsIGZhbGxiYWNrRm9udHMpOwpAQCAtMTU1Nyw3ICsxNTM0LDYg
QEAgZmxvYXQgRm9udENhc2NhZGU6OmZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0
UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgRm8KICAgICB9CiAgICAgcmV0dXJuIGNvbnRyb2xsZXIu
dG90YWxXaWR0aCgpOwogfQotI2VuZGlmCiAKIHZvaWQgRm9udENhc2NhZGU6OmFkanVzdFNlbGVj
dGlvblJlY3RGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgTGF5b3V0UmVjdCYgc2Vs
ZWN0aW9uUmVjdCwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8pIGNvbnN0CiB7CkBAIC0xNTc4
LDcgKzE1NTQsNiBAQCB2b2lkIEZvbnRDYXNjYWRlOjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9yU2lt
cGxlVGV4dChjb25zdCBUZXh0UnVuJiBydW4sIExheW91dFJlYwogICAgIHNlbGVjdGlvblJlY3Qu
c2V0V2lkdGgoTGF5b3V0VW5pdDo6ZnJvbUZsb2F0Q2VpbChhZnRlcldpZHRoIC0gYmVmb3JlV2lk
dGgpKTsKIH0KIAotI2lmICFQTEFURk9STShXSU4pIHx8IFVTRShESVJFQ1QyRCkKIHZvaWQgRm9u
dENhc2NhZGU6OmFkanVzdFNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVu
JiBydW4sIExheW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVk
IHRvKSBjb25zdAogewogICAgIENvbXBsZXhUZXh0Q29udHJvbGxlciBjb250cm9sbGVyKCp0aGlz
LCBydW4pOwpAQCAtMTU5Myw3ICsxNTY4LDYgQEAgdm9pZCBGb250Q2FzY2FkZTo6YWRqdXN0U2Vs
ZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgTGF5b3V0UmUKICAg
ICAgICAgc2VsZWN0aW9uUmVjdC5tb3ZlKGJlZm9yZVdpZHRoLCAwKTsKICAgICBzZWxlY3Rpb25S
ZWN0LnNldFdpZHRoKExheW91dFVuaXQ6OmZyb21GbG9hdENlaWwoYWZ0ZXJXaWR0aCAtIGJlZm9y
ZVdpZHRoKSk7CiB9Ci0jZW5kaWYKIAogaW50IEZvbnRDYXNjYWRlOjpvZmZzZXRGb3JQb3NpdGlv
bkZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBmbG9hdCB4LCBib29sIGluY2x1ZGVQ
YXJ0aWFsR2x5cGhzKSBjb25zdAogewpAQCAtMTYzOCwxMyArMTYxMiwxMSBAQCBpbnQgRm9udENh
c2NhZGU6Om9mZnNldEZvclBvc2l0aW9uRm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiBydW4s
IGZsb2F0IHgsIGJvbwogICAgIHJldHVybiBvZmZzZXQ7CiB9CiAKLSNpZiAhUExBVEZPUk0oV0lO
KSB8fCBVU0UoRElSRUNUMkQpCiBpbnQgRm9udENhc2NhZGU6Om9mZnNldEZvclBvc2l0aW9uRm9y
Q29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBmbG9hdCB4LCBib29sIGluY2x1ZGVQYXJ0
aWFsR2x5cGhzKSBjb25zdAogewogICAgIENvbXBsZXhUZXh0Q29udHJvbGxlciBjb250cm9sbGVy
KCp0aGlzLCBydW4pOwogICAgIHJldHVybiBjb250cm9sbGVyLm9mZnNldEZvclBvc2l0aW9uKHgs
IGluY2x1ZGVQYXJ0aWFsR2x5cGhzKTsKIH0KLSNlbmRpZgogCiAjaWYgIVBMQVRGT1JNKENPQ09B
KSAmJiAhVVNFKEhBUkZCVVpaKQogLy8gRklYTUU6IFVuaWZ5IHRoaXMgd2l0aCB0aGUgbWFjT1Mg
YW5kIGlPUyBpbXBsZW1lbnRhdGlvbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9Db21wbGV4VGV4dENvbnRyb2xsZXJVbmlzY3JpYmUuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbXBsZXhUZXh0Q29udHJvbGxlclVu
aXNjcmliZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDAyNWE2NDBkZGNhZjNhMGIwNzBmYjE3Nzc3NTdmMzgy
MzFiZGVjYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9Db21wbGV4VGV4dENvbnRyb2xsZXJVbmlzY3JpYmUuY3BwCkBAIC0wLDAgKzEsMTg5
IEBACisvKgorKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyogYXJlIG1ldDoKKyogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisq
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisqIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNvbXBsZXhUZXh0Q29udHJvbGxlci5oIgorCisj
aWYgIVVTRShESVJFQ1QyRCkKKworI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgorI2luY2x1ZGUgIkZv
bnRDYXNjYWRlLmgiCisjaW5jbHVkZSAiSFduZERDLmgiCisjaW5jbHVkZSA8dXNwMTAuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgYm9vbCBzaGFwZUJ5VW5pc2NyaWJlKGNvbnN0
IFVDaGFyKiBzdHIsIGludCBsZW4sIFNDUklQVF9JVEVNIGl0ZW0sIGNvbnN0IEZvbnQqIGZvbnRE
YXRhLAorICAgIFZlY3RvcjxXT1JEPiYgZ2x5cGhzLCBWZWN0b3I8V09SRD4mIGNsdXN0ZXJzLAor
ICAgIFZlY3RvcjxTQ1JJUFRfVklTQVRUUj4mIHZpc3VhbEF0dHJpYnV0ZXMpCit7CisgICAgSFdu
ZERDIGhkYzsKKyAgICBIRk9OVCBvbGRGb250ID0gMDsKKyAgICBIUkVTVUxUIHNoYXBlUmVzdWx0
ID0gRV9QRU5ESU5HOworICAgIGludCBnbHlwaENvdW50ID0gMDsKKworICAgIGlmICghZm9udERh
dGEpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGRvIHsKKyAgICAgICAgc2hhcGVSZXN1
bHQgPSBTY3JpcHRTaGFwZShoZGMsIGZvbnREYXRhLT5zY3JpcHRDYWNoZSgpLCB3Y2hhckZyb20o
c3RyKSwgbGVuLCBnbHlwaHMuc2l6ZSgpLCAmaXRlbS5hLAorICAgICAgICAgICAgZ2x5cGhzLmRh
dGEoKSwgY2x1c3RlcnMuZGF0YSgpLCB2aXN1YWxBdHRyaWJ1dGVzLmRhdGEoKSwgJmdseXBoQ291
bnQpOworICAgICAgICBpZiAoc2hhcGVSZXN1bHQgPT0gRV9QRU5ESU5HKSB7CisgICAgICAgICAg
ICAvLyBUaGUgc2NyaXB0IGNhY2hlIGlzbid0IHByaW1lZCB3aXRoIGVub3VnaCBpbmZvIHlldC4g
V2UgbmVlZCB0byBzZWxlY3Qgb3VyIEhGT05UIGludG8KKyAgICAgICAgICAgIC8vIGEgREMgYW5k
IHBhc3MgdGhlIERDIGluIHRvIFNjcmlwdFNoYXBlLgorICAgICAgICAgICAgQVNTRVJUKCFoZGMp
OworICAgICAgICAgICAgaGRjLnNldEhXbmQoMCk7CisgICAgICAgICAgICBIRk9OVCBoZm9udCA9
IGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5oZm9udCgpOworICAgICAgICAgICAgb2xkRm9udCA9
IChIRk9OVClTZWxlY3RPYmplY3QoaGRjLCBoZm9udCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2hh
cGVSZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkgeworICAgICAgICAgICAgLy8gTmVlZCB0byByZXNp
emUgb3VyIGJ1ZmZlcnMuCisgICAgICAgICAgICBnbHlwaHMucmVzaXplKGdseXBocy5zaXplKCkg
KiAyKTsKKyAgICAgICAgICAgIHZpc3VhbEF0dHJpYnV0ZXMucmVzaXplKGdseXBocy5zaXplKCkp
OworICAgICAgICB9CisgICAgfSB3aGlsZSAoc2hhcGVSZXN1bHQgPT0gRV9QRU5ESU5HIHx8IHNo
YXBlUmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOworCisgICAgaWYgKGhkYykKKyAgICAgICAgU2Vs
ZWN0T2JqZWN0KGhkYywgb2xkRm9udCk7CisKKyAgICBpZiAoRkFJTEVEKHNoYXBlUmVzdWx0KSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZ2x5cGhzLnNocmluayhnbHlwaENvdW50KTsK
KyAgICB2aXN1YWxBdHRyaWJ1dGVzLnNocmluayhnbHlwaENvdW50KTsKKworICAgIHJldHVybiB0
cnVlOworfQorCit2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Y29sbGVjdENvbXBsZXhUZXh0
UnVuc0ZvckNoYXJhY3RlcnMoY29uc3QgVUNoYXIqIGNwLCB1bnNpZ25lZCBzdHJpbmdMZW5ndGgs
IHVuc2lnbmVkIHN0cmluZ0xvY2F0aW9uLCBjb25zdCBGb250KiBmb250KQoreworICAgIGlmICgh
Zm9udCkgeworICAgICAgICAvLyBDcmVhdGUgYSBydW4gb2YgbWlzc2luZyBnbHlwaHMgZnJvbSB0
aGUgcHJpbWFyeSBmb250LgorICAgICAgICBtX2NvbXBsZXhUZXh0UnVucy5hcHBlbmQoQ29tcGxl
eFRleHRSdW46OmNyZWF0ZShtX2ZvbnQucHJpbWFyeUZvbnQoKSwgY3AsIHN0cmluZ0xvY2F0aW9u
LCBzdHJpbmdMZW5ndGgsIDAsIHN0cmluZ0xlbmd0aCwgbV9ydW4ubHRyKCkpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIFZlY3RvcjxTQ1JJUFRfSVRFTT4gaXRlbXMoNik7CisgICAg
aW50IG51bUl0ZW1zID0gMDsKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIFNDUklQVF9DT05UUk9M
IGNvbnRyb2wgeyB9OworICAgICAgICBTQ1JJUFRfU1RBVEUgc3RhdGUgeyB9OworICAgICAgICAv
LyBTZXQgdXAgdGhlIGNvcnJlY3QgZGlyZWN0aW9uIGZvciB0aGUgcnVuLgorICAgICAgICBzdGF0
ZS51QmlkaUxldmVsID0gbV9ydW4ucnRsKCk7CisgICAgICAgIC8vIExvY2sgdGhlIGNvcnJlY3Qg
ZGlyZWN0aW9uYWwgb3ZlcnJpZGUuCisgICAgICAgIHN0YXRlLmZPdmVycmlkZURpcmVjdGlvbiA9
IG1fcnVuLmRpcmVjdGlvbmFsT3ZlcnJpZGUoKTsKKworICAgICAgICAvLyBTY3JpcHRJdGVtaXpl
IG1heSB3cml0ZSAoY01heEl0ZW1zICsgMSkgU0NSSVBUX0lURU0uCisgICAgICAgIEhSRVNVTFQg
aHIgPSBTY3JpcHRJdGVtaXplKHdjaGFyRnJvbShjcCksIHN0cmluZ0xlbmd0aCwgaXRlbXMuc2l6
ZSgpIC0gMSwgJmNvbnRyb2wsICZzdGF0ZSwgaXRlbXMuZGF0YSgpLCAmbnVtSXRlbXMpOworICAg
ICAgICBpZiAoaHIgIT0gRV9PVVRPRk1FTU9SWSkgeworICAgICAgICAgICAgQVNTRVJUKFNVQ0NF
RURFRChocikpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaXRlbXMu
cmVzaXplKGl0ZW1zLnNpemUoKSAqIDIpOworICAgIH0KKyAgICBpdGVtcy5yZXNpemUobnVtSXRl
bXMgKyAxKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtSXRlbXM7IGkrKykgeworICAg
ICAgICAvLyBEZXRlcm1pbmUgdGhlIHN0cmluZyBmb3IgdGhpcyBpdGVtLgorICAgICAgICBjb25z
dCBVQ2hhciogc3RyID0gY3AgKyBpdGVtc1tpXS5pQ2hhclBvczsKKyAgICAgICAgaW50IGxlbmd0
aCA9IGl0ZW1zW2krMV0uaUNoYXJQb3MgLSBpdGVtc1tpXS5pQ2hhclBvczsKKyAgICAgICAgU0NS
SVBUX0lURU0mIGl0ZW0gPSBpdGVtc1tpXTsKKworICAgICAgICAvLyBTZXQgdXAgYnVmZmVycyB0
byBob2xkIHRoZSByZXN1bHRzIG9mIHNoYXBpbmcgdGhlIGl0ZW0uCisgICAgICAgIFZlY3RvcjxX
T1JEPiBnbHlwaHM7CisgICAgICAgIFZlY3RvcjxXT1JEPiBjbHVzdGVyczsKKyAgICAgICAgVmVj
dG9yPFNDUklQVF9WSVNBVFRSPiB2aXN1YWxBdHRyaWJ1dGVzOworICAgICAgICBjbHVzdGVycy5y
ZXNpemUobGVuZ3RoKTsKKworICAgICAgICAvLyBTaGFwZSB0aGUgaXRlbS4KKyAgICAgICAgLy8g
VGhlIHJlY29tbWVuZGVkIHNpemUgZm9yIHRoZSBnbHlwaCBidWZmZXIgaXMgMS41ICogdGhlIGNo
YXJhY3RlciBsZW5ndGggKyAxNiBpbiB0aGUgdW5pc2NyaWJlIGRvY3MuCisgICAgICAgIC8vIEFw
cGFyZW50bHkgdGhpcyBpcyBhIGdvb2Qgc2l6ZSB0byBhdm9pZCBoYXZpbmcgdG8gbWFrZSByZXBl
YXRlZCBjYWxscyB0byBTY3JpcHRTaGFwZS4KKyAgICAgICAgZ2x5cGhzLnJlc2l6ZSgxLjUgKiBs
ZW5ndGggKyAxNik7CisgICAgICAgIHZpc3VhbEF0dHJpYnV0ZXMucmVzaXplKGdseXBocy5zaXpl
KCkpOworCisgICAgICAgIGlmICghc2hhcGVCeVVuaXNjcmliZShzdHIsIGxlbmd0aCwgaXRlbSwg
Zm9udCwgZ2x5cGhzLCBjbHVzdGVycywgdmlzdWFsQXR0cmlidXRlcykpCisgICAgICAgICAgICBj
b250aW51ZTsKKworICAgICAgICAvLyBXZSBub3cgaGF2ZSBhIGNvbGxlY3Rpb24gb2YgZ2x5cGhz
LgorICAgICAgICBWZWN0b3I8R09GRlNFVD4gb2Zmc2V0czsKKyAgICAgICAgVmVjdG9yPGludD4g
YWR2YW5jZXM7CisgICAgICAgIG9mZnNldHMucmVzaXplKGdseXBocy5zaXplKCkpOworICAgICAg
ICBhZHZhbmNlcy5yZXNpemUoZ2x5cGhzLnNpemUoKSk7CisgICAgICAgIEhSRVNVTFQgcGxhY2VS
ZXN1bHQgPSBTY3JpcHRQbGFjZSgwLCBmb250LT5zY3JpcHRDYWNoZSgpLCBnbHlwaHMuZGF0YSgp
LCBnbHlwaHMuc2l6ZSgpLCB2aXN1YWxBdHRyaWJ1dGVzLmRhdGEoKSwKKyAgICAgICAgICAgICZp
dGVtLmEsIGFkdmFuY2VzLmRhdGEoKSwgb2Zmc2V0cy5kYXRhKCksIDApOworICAgICAgICBpZiAo
cGxhY2VSZXN1bHQgPT0gRV9QRU5ESU5HKSB7CisgICAgICAgICAgICAvLyBUaGUgc2NyaXB0IGNh
Y2hlIGlzbid0IHByaW1lZCB3aXRoIGVub3VnaCBpbmZvIHlldC4gV2UgbmVlZCB0byBzZWxlY3Qg
b3VyIEhGT05UIGludG8KKyAgICAgICAgICAgIC8vIGEgREMgYW5kIHBhc3MgdGhlIERDIGluIHRv
IFNjcmlwdFBsYWNlLgorICAgICAgICAgICAgSFduZERDIGhkYygwKTsKKyAgICAgICAgICAgIEhG
T05UIGhmb250ID0gZm9udC0+cGxhdGZvcm1EYXRhKCkuaGZvbnQoKTsKKyAgICAgICAgICAgIEhG
T05UIG9sZEZvbnQgPSAoSEZPTlQpU2VsZWN0T2JqZWN0KGhkYywgaGZvbnQpOworICAgICAgICAg
ICAgcGxhY2VSZXN1bHQgPSBTY3JpcHRQbGFjZShoZGMsIGZvbnQtPnNjcmlwdENhY2hlKCksIGds
eXBocy5kYXRhKCksIGdseXBocy5zaXplKCksIHZpc3VhbEF0dHJpYnV0ZXMuZGF0YSgpLAorICAg
ICAgICAgICAgICAgICZpdGVtLmEsIGFkdmFuY2VzLmRhdGEoKSwgb2Zmc2V0cy5kYXRhKCksIDAp
OworICAgICAgICAgICAgU2VsZWN0T2JqZWN0KGhkYywgb2xkRm9udCk7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoRkFJTEVEKHBsYWNlUmVzdWx0KSB8fCBnbHlwaHMuaXNFbXB0eSgpKQorICAg
ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKG1fZmFsbGJhY2tGb250cykKKyAgICAg
ICAgICAgIG1fZmFsbGJhY2tGb250cy0+YWRkKGZvbnQpOworCisgICAgICAgIFZlY3Rvcjx1bnNp
Z25lZD4gc3RyaW5nSW5kaWNlcyhnbHlwaHMuc2l6ZSgpLCBpdGVtLmlDaGFyUG9zKTsKKworICAg
ICAgICBmb3IgKGludCBrID0gbGVuZ3RoIC0gMTsgayA+PSAwOyBrLS0pCisgICAgICAgICAgICBz
dHJpbmdJbmRpY2VzW2NsdXN0ZXJzW2tdXSA9IGl0ZW0uaUNoYXJQb3MgKyBrOworCisgICAgICAg
IFZlY3RvcjxGbG9hdFNpemU+IGJhc2VBZHZhbmNlczsKKyAgICAgICAgVmVjdG9yPEZsb2F0UG9p
bnQ+IG9yaWdpbnM7CisgICAgICAgIGJhc2VBZHZhbmNlcy5yZXNlcnZlQ2FwYWNpdHkoZ2x5cGhz
LnNpemUoKSk7CisgICAgICAgIG9yaWdpbnMucmVzZXJ2ZUNhcGFjaXR5KGdseXBocy5zaXplKCkp
OworCisgICAgICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBnbHlwaHMuc2l6ZSgpOyBrKysp
IHsKKyAgICAgICAgICAgIGNvbnN0IGZsb2F0IGNMb2dpY2FsU2NhbGUgPSBmb250LT5wbGF0Zm9y
bURhdGEoKS51c2VHREkoKSA/IDEgOiAzMjsKKyAgICAgICAgICAgIGZsb2F0IGFkdmFuY2UgPSBh
ZHZhbmNlc1trXSAvIGNMb2dpY2FsU2NhbGU7CisgICAgICAgICAgICBmbG9hdCBvZmZzZXRYID0g
b2Zmc2V0c1trXS5kdSAvIGNMb2dpY2FsU2NhbGU7CisgICAgICAgICAgICBmbG9hdCBvZmZzZXRZ
ID0gb2Zmc2V0c1trXS5kdiAvIGNMb2dpY2FsU2NhbGU7CisKKyAgICAgICAgICAgIC8vIE1hdGNo
IEFwcEtpdCdzIHJ1bGVzIGZvciB0aGUgaW50ZWdlciB2cy4gbm9uLWludGVnZXIgcmVuZGVyaW5n
IG1vZGVzLgorICAgICAgICAgICAgaWYgKCFmb250LT5wbGF0Zm9ybURhdGEoKS5pc1N5c3RlbUZv
bnQoKSkgeworICAgICAgICAgICAgICAgIGFkdmFuY2UgPSByb3VuZGYoYWR2YW5jZSk7CisgICAg
ICAgICAgICAgICAgb2Zmc2V0WCA9IHJvdW5kZihvZmZzZXRYKTsKKyAgICAgICAgICAgICAgICBv
ZmZzZXRZID0gcm91bmRmKG9mZnNldFkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAv
LyBGSVhNRTogV2UgbmVlZCB0byB0YWtlIHRoZSBHT0ZGU0VUUyBmb3IgY29tYmluaW5nIGdseXBo
cyBhbmQgc3RvcmUgdGhlbSBpbiB0aGUgZ2x5cGggYnVmZmVyCisgICAgICAgICAgICAvLyBhcyB3
ZWxsLCBzbyB0aGF0IHdoZW4gdGhlIHRpbWUgY29tZXMgdG8gZHJhdyB0aG9zZSBnbHlwaHMsIHdl
IGNhbiBhcHBseSB0aGUgYXBwcm9wcmlhdGUKKyAgICAgICAgICAgIC8vIHRyYW5zbGF0aW9uLgor
CisgICAgICAgICAgICBiYXNlQWR2YW5jZXMudW5jaGVja2VkQXBwZW5kKHsgYWR2YW5jZSwgMCB9
KTsKKyAgICAgICAgICAgIG9yaWdpbnMudW5jaGVja2VkQXBwZW5kKHsgb2Zmc2V0WCwgb2Zmc2V0
WSB9KTsKKyAgICAgICAgfQorICAgICAgICBGbG9hdFNpemUgaW5pdGlhbEFkdmFuY2UgPSB0b0Zs
b2F0U2l6ZShvcmlnaW5zWzBdKTsKKyAgICAgICAgYm9vbCBsdHIgPSAhaXRlbS5hLmZSVEw7Cisg
ICAgICAgIG1fY29tcGxleFRleHRSdW5zLmFwcGVuZChDb21wbGV4VGV4dFJ1bjo6Y3JlYXRlKGJh
c2VBZHZhbmNlcywgb3JpZ2lucywgZ2x5cGhzLCBzdHJpbmdJbmRpY2VzLCBpbml0aWFsQWR2YW5j
ZSwgKmZvbnQsIGNwLCBzdHJpbmdMb2NhdGlvbiwgc3RyaW5nTGVuZ3RoLCBpdGVtLmlDaGFyUG9z
LCBpdGVtc1tpKzFdLmlDaGFyUG9zLCBsdHIpKTsKKyAgICB9Cit9CisKK30KKworI2VuZGlmIC8v
ICFVU0UoRElSRUNUMkQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vRm9udENHV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9Gb250Q0dXaW4uY3BwCmluZGV4IDBlZjY1NWQ4ZDA1YjZhNjFhOGE0ZTM4YTUxOTI2NzAw
MWE0OGM5MmQuLjMzZjg1MmViNmU4ZGJkYTQ1MGJmNWVmYTczMGU0MDZhOGFmZTk3ZGUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q0dXaW4uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q0dXaW4uY3Bw
CkBAIC0zNCw3ICszNCw2IEBACiAjaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKICNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiVW5pc2Ny
aWJlQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIldlYkNvcmVUZXh0UmVuZGVyZXIuaCIKICNpbmNs
dWRlIDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0
cmFzLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
Rm9udENhc2NhZGVEaXJlY3QyRC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vRm9udENhc2NhZGVEaXJlY3QyRC5jcHAKaW5kZXggOTExMTJkOTY1Yzg5YmE3ZDRjNTdi
ZTdjNjkzZWNhMTc3MjY4NTlhZi4uYjJkMzQ3MWI4YWMzMTkzNmIxMjI3MDNjZWM1OTgyYTA4NTg1
ZWNjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Zv
bnRDYXNjYWRlRGlyZWN0MkQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9Gb250Q2FzY2FkZURpcmVjdDJELmNwcApAQCAtMzcsNyArMzcsNiBAQAogI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZURpcmVjdDJELmgiCiAjaW5jbHVkZSAi
SW50UmVjdC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dERpcmVjdDJELmgiCi0jaW5jbHVk
ZSAiVW5pc2NyaWJlQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIldlYkNvcmVUZXh0UmVuZGVyZXIu
aCIKICNpbmNsdWRlIDxkMmQxLmg+CiAjaW5jbHVkZSA8ZHdyaXRlXzMuaD4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250V2luLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250V2luLmNwcAppbmRleCAxY2FhODAy
MmUyNmE3MDdkMmYxYjQwZDA0OTFhOGMwOGVhOGE0MmM0Li41MmNiODhmNTNkMDVhMTAxOTZlNjUx
YmZkMmFjZDAzMmRjNzkyMmVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vRm9udFdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ZvbnRXaW4uY3BwCkBAIC0zNSwxMCArMzUsNiBAQAogI2luY2x1ZGUgIlRleHRS
dW4uaCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCi0jaWYgIVVTRShESVJFQ1QyRCkK
LSNpbmNsdWRlICJVbmlzY3JpYmVDb250cm9sbGVyLmgiCi0jZW5kaWYKLQogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBib29sIEZvbnRDYXNjYWRlOjpjYW5SZXR1cm5GYWxsYmFja0ZvbnRzRm9yQ29t
cGxleFRleHQoKQpAQCAtNTEsNzIgKzQ3LDQgQEAgYm9vbCBGb250Q2FzY2FkZTo6Y2FuRXhwYW5k
QXJvdW5kSWRlb2dyYXBoc0luQ29tcGxleFRleHQoKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAot
I2lmICFVU0UoRElSRUNUMkQpCi0KLXZvaWQgRm9udENhc2NhZGU6OmFkanVzdFNlbGVjdGlvblJl
Y3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIExheW91dFJlY3QmIHNlbGVjdGlv
blJlY3QsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvKSBjb25zdAotewotICAgIFVuaXNjcmli
ZUNvbnRyb2xsZXIgaXQodGhpcywgcnVuKTsKLSAgICBpdC5hZHZhbmNlKGZyb20pOwotICAgIGZs
b2F0IGJlZm9yZVdpZHRoID0gaXQucnVuV2lkdGhTb0ZhcigpOwotICAgIGl0LmFkdmFuY2UodG8p
OwotICAgIGZsb2F0IGFmdGVyV2lkdGggPSBpdC5ydW5XaWR0aFNvRmFyKCk7Ci0KLSAgICBpZiAo
cnVuLnJ0bCgpKSB7Ci0gICAgICAgIGl0LmFkdmFuY2UocnVuLmxlbmd0aCgpKTsKLSAgICAgICAg
c2VsZWN0aW9uUmVjdC5tb3ZlKGl0LnJ1bldpZHRoU29GYXIoKSAtIGFmdGVyV2lkdGgsIDApOwot
ICAgIH0gZWxzZQotICAgICAgICBzZWxlY3Rpb25SZWN0Lm1vdmUoYmVmb3JlV2lkdGgsIDApOwot
ICAgIHNlbGVjdGlvblJlY3Quc2V0V2lkdGgoYWZ0ZXJXaWR0aCAtIGJlZm9yZVdpZHRoKTsKLX0K
LQotZmxvYXQgRm9udENhc2NhZGU6OmdldEdseXBoc0FuZEFkdmFuY2VzRm9yQ29tcGxleFRleHQo
Y29uc3QgVGV4dFJ1biYgcnVuLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bywgR2x5cGhCdWZm
ZXImIGdseXBoQnVmZmVyLCBGb3JUZXh0RW1waGFzaXNPck5vdCBmb3JUZXh0RW1waGFzaXMpIGNv
bnN0Ci17Ci0gICAgaWYgKGZvclRleHRFbXBoYXNpcykgewotICAgICAgICAvLyBGSVhNRTogQWRk
IGZvclRleHRFbXBoYXNpcyBwYXJlbWV0ZXIgdG8gVW5pc2NyaWJlQ29udHJvbGxlciBhbmQgdXNl
IGl0LgotICAgICAgICBMT0dfRVJST1IoIk5vdCBpbXBsZW1lbnRlZCBmb3IgdGV4dCBlbXBoYXNp
cy4iKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgVW5pc2NyaWJlQ29udHJvbGxl
ciBjb250cm9sbGVyKHRoaXMsIHJ1bik7Ci0gICAgY29udHJvbGxlci5hZHZhbmNlKGZyb20pOwot
ICAgIGZsb2F0IGJlZm9yZVdpZHRoID0gY29udHJvbGxlci5ydW5XaWR0aFNvRmFyKCk7Ci0gICAg
Y29udHJvbGxlci5hZHZhbmNlKHRvLCAmZ2x5cGhCdWZmZXIpOwotCi0gICAgaWYgKGdseXBoQnVm
ZmVyLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBmbG9hdCBhZnRlcldpZHRo
ID0gY29udHJvbGxlci5ydW5XaWR0aFNvRmFyKCk7Ci0KLSAgICBpZiAocnVuLnJ0bCgpKSB7Ci0g
ICAgICAgIGNvbnRyb2xsZXIuYWR2YW5jZShydW4ubGVuZ3RoKCkpOwotICAgICAgICByZXR1cm4g
Y29udHJvbGxlci5ydW5XaWR0aFNvRmFyKCkgLSBhZnRlcldpZHRoOwotICAgIH0KLSAgICByZXR1
cm4gYmVmb3JlV2lkdGg7Ci19Ci0KLWZsb2F0IEZvbnRDYXNjYWRlOjpmbG9hdFdpZHRoRm9yQ29t
cGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiogZmFsbGJh
Y2tGb250cywgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QKLXsKLSAgICBVbmlz
Y3JpYmVDb250cm9sbGVyIGNvbnRyb2xsZXIodGhpcywgcnVuLCBmYWxsYmFja0ZvbnRzKTsKLSAg
ICBjb250cm9sbGVyLmFkdmFuY2UocnVuLmxlbmd0aCgpKTsKLSAgICBpZiAoZ2x5cGhPdmVyZmxv
dykgewotICAgICAgICBnbHlwaE92ZXJmbG93LT50b3AgPSBzdGQ6Om1heDxpbnQ+KGdseXBoT3Zl
cmZsb3ctPnRvcCwgY2VpbGYoLWNvbnRyb2xsZXIubWluR2x5cGhCb3VuZGluZ0JveFkoKSkgLSAo
Z2x5cGhPdmVyZmxvdy0+Y29tcHV0ZUJvdW5kcyA/IDAgOiBmb250TWV0cmljcygpLmFzY2VudCgp
KSk7Ci0gICAgICAgIGdseXBoT3ZlcmZsb3ctPmJvdHRvbSA9IHN0ZDo6bWF4PGludD4oZ2x5cGhP
dmVyZmxvdy0+Ym90dG9tLCBjZWlsZihjb250cm9sbGVyLm1heEdseXBoQm91bmRpbmdCb3hZKCkp
IC0gKGdseXBoT3ZlcmZsb3ctPmNvbXB1dGVCb3VuZHMgPyAwICA6IGZvbnRNZXRyaWNzKCkuZGVz
Y2VudCgpKSk7Ci0gICAgICAgIGdseXBoT3ZlcmZsb3ctPmxlZnQgPSBzdGQ6Om1heDxpbnQ+KDAs
IGNlaWxmKC1jb250cm9sbGVyLm1pbkdseXBoQm91bmRpbmdCb3hYKCkpKTsKLSAgICAgICAgZ2x5
cGhPdmVyZmxvdy0+cmlnaHQgPSBzdGQ6Om1heDxpbnQ+KDAsIGNlaWxmKGNvbnRyb2xsZXIubWF4
R2x5cGhCb3VuZGluZ0JveFgoKSAtIGNvbnRyb2xsZXIucnVuV2lkdGhTb0ZhcigpKSk7Ci0gICAg
fQotICAgIHJldHVybiBjb250cm9sbGVyLnJ1bldpZHRoU29GYXIoKTsKLX0KLQotaW50IEZvbnRD
YXNjYWRlOjpvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1
biwgZmxvYXQgeEZsb2F0LCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdAotewotICAg
IC8vIEZJWE1FOiBUaGlzIHRydW5jYXRpb24gaXMgbm90IGEgcHJvYmxlbSBmb3IgSFRNTCwgYnV0
IG9ubHkgYWZmZWN0cyBTVkcsIHdoaWNoIHBhc3NlcyBmbG9hdGluZy1wb2ludCBudW1iZXJzCi0g
ICAgLy8gdG8gRm9udENhc2NhZGU6Om9mZnNldEZvclBvc2l0aW9uKCkuIEJ1ZyBodHRwOi8vd2Vi
a2l0Lm9yZy9iLzQwNjczIHRyYWNrcyBmaXhpbmcgdGhpcyBwcm9ibGVtLgotICAgIGludCB4ID0g
c3RhdGljX2Nhc3Q8aW50Pih4RmxvYXQpOwotCi0gICAgVW5pc2NyaWJlQ29udHJvbGxlciBjb250
cm9sbGVyKHRoaXMsIHJ1bik7Ci0gICAgcmV0dXJuIGNvbnRyb2xsZXIub2Zmc2V0Rm9yUG9zaXRp
b24oeCwgaW5jbHVkZVBhcnRpYWxHbHlwaHMpOwotfQotCi0jZW5kaWYKLQogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1VuaXNjcmliZUNvbnRyb2xs
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1VuaXNjcmliZUNv
bnRyb2xsZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NzRjNDg2MGZmMTAw
NDQwOTliNmFmM2Y5YmZiOWI0MGNkNzg4ZGE5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9V
bmlzY3JpYmVDb250cm9sbGVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ1OSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIlVuaXNjcmliZUNvbnRyb2xsZXIuaCIKLQotI2luY2x1ZGUgIkZvbnQuaCIKLSNpbmNsdWRl
ICJGb250Q2FzY2FkZS5oIgotI2luY2x1ZGUgIkhXbmREQy5oIgotI2luY2x1ZGUgIlRleHRSdW4u
aCIKLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L3dpbi9X
Q2hhclN0cmluZ0V4dHJhcy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci11c2luZyBuYW1lc3Bh
Y2UgV1RGOjpVbmljb2RlOwotCi0vLyBGSVhNRTogUmVhcmNoaXRlY3QgdGhpcyB0byBiZSBtb3Jl
IGxpa2UgV2lkdGhJdGVyYXRvciBpbiBGb250LmNwcC4gIEhhdmUgYW4gYWR2YW5jZSgpIG1ldGhv
ZAotLy8gdGhhdCBkb2VzIHN0dWZmIGluIHRoYXQgbWV0aG9kIGluc3RlYWQgb2YgZG9pbmcgZXZl
cnl0aGluZyBpbiB0aGUgY29uc3RydWN0b3IuICBIYXZlIGFkdmFuY2UoKQotLy8gdGFrZSB0aGUg
R2x5cGhCdWZmZXIgYXMgYW4gYXJnIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBwb3B1bGF0ZSB0
aGUgZ2x5cGggYnVmZmVyIHdoZW4KLS8vIG1lYXN1cmluZy4KLVVuaXNjcmliZUNvbnRyb2xsZXI6
OlVuaXNjcmliZUNvbnRyb2xsZXIoY29uc3QgRm9udENhc2NhZGUqIGZvbnQsIGNvbnN0IFRleHRS
dW4mIHJ1biwgSGFzaFNldDxjb25zdCBGb250Kj4qIGZhbGxiYWNrRm9udHMpCi0gICAgOiBtX2Zv
bnQoKmZvbnQpCi0gICAgLCBtX3J1bihydW4pCi0gICAgLCBtX2ZhbGxiYWNrRm9udHMoZmFsbGJh
Y2tGb250cykKLSAgICAsIG1fbWluR2x5cGhCb3VuZGluZ0JveFgoc3RkOjpudW1lcmljX2xpbWl0
czxmbG9hdD46Om1heCgpKQotICAgICwgbV9tYXhHbHlwaEJvdW5kaW5nQm94WChzdGQ6Om51bWVy
aWNfbGltaXRzPGZsb2F0Pjo6bWluKCkpCi0gICAgLCBtX21pbkdseXBoQm91bmRpbmdCb3hZKHN0
ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgoKSkKLSAgICAsIG1fbWF4R2x5cGhCb3VuZGlu
Z0JveFkoc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46Om1pbigpKQotICAgICwgbV9jdXJyZW50
Q2hhcmFjdGVyKDApCi0gICAgLCBtX2VuZChydW4ubGVuZ3RoKCkpCi0gICAgLCBtX3J1bldpZHRo
U29GYXIoMCkKLSAgICAsIG1fcGFkZGluZyhydW4uZXhwYW5zaW9uKCkpCi0gICAgLCBtX2NvbXB1
dGluZ09mZnNldFBvc2l0aW9uKGZhbHNlKQotICAgICwgbV9pbmNsdWRlUGFydGlhbEdseXBocyhm
YWxzZSkKLSAgICAsIG1fb2Zmc2V0WCgwKQotICAgICwgbV9vZmZzZXRQb3NpdGlvbigwKQotewot
ICAgIGlmICghbV9wYWRkaW5nKQotICAgICAgICBtX3BhZFBlclNwYWNlID0gMDsKLSAgICBlbHNl
IHsKLSAgICAgICAgZmxvYXQgbnVtU3BhY2VzID0gMDsKLSAgICAgICAgZm9yIChpbnQgcyA9IDA7
IHMgPCBtX3J1bi5sZW5ndGgoKTsgcysrKSB7Ci0gICAgICAgICAgICBpZiAoRm9udENhc2NhZGU6
OnRyZWF0QXNTcGFjZShtX3J1bltzXSkpCi0gICAgICAgICAgICAgICAgbnVtU3BhY2VzKys7Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAobnVtU3BhY2VzID09IDApCi0gICAgICAgICAgICBtX3Bh
ZFBlclNwYWNlID0gMDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9wYWRQZXJTcGFjZSA9
IG1fcGFkZGluZyAvIG51bVNwYWNlczsKLSAgICB9Ci0KLSAgICAvLyBOdWxsIG91dCBvdXIgdW5p
c2NyaWJlIHN0cnVjdHMKLSAgICByZXNldENvbnRyb2xBbmRTdGF0ZSgpOwotfQotCi1pbnQgVW5p
c2NyaWJlQ29udHJvbGxlcjo6b2Zmc2V0Rm9yUG9zaXRpb24oaW50IHgsIGJvb2wgaW5jbHVkZVBh
cnRpYWxHbHlwaHMpCi17Ci0gICAgbV9jb21wdXRpbmdPZmZzZXRQb3NpdGlvbiA9IHRydWU7Ci0g
ICAgbV9pbmNsdWRlUGFydGlhbEdseXBocyA9IGluY2x1ZGVQYXJ0aWFsR2x5cGhzOwotICAgIG1f
b2Zmc2V0WCA9IHg7Ci0gICAgbV9vZmZzZXRQb3NpdGlvbiA9IDA7Ci0gICAgYWR2YW5jZShtX3J1
bi5sZW5ndGgoKSk7Ci0gICAgaWYgKG1fY29tcHV0aW5nT2Zmc2V0UG9zaXRpb24pIHsKLSAgICAg
ICAgLy8gVGhlIHBvaW50IGlzIHRvIHRoZSBsZWZ0IG9yIHRvIHRoZSByaWdodCBvZiB0aGUgZW50
aXJlIHJ1bi4KLSAgICAgICAgaWYgKChtX29mZnNldFggPj0gbV9ydW5XaWR0aFNvRmFyICYmIG1f
cnVuLmx0cigpKSB8fCAobV9vZmZzZXRYIDwgMCAmJiBtX3J1bi5ydGwoKSkpCi0gICAgICAgICAg
ICBtX29mZnNldFBvc2l0aW9uID0gbV9lbmQ7Ci0gICAgfQotICAgIG1fY29tcHV0aW5nT2Zmc2V0
UG9zaXRpb24gPSBmYWxzZTsKLSAgICByZXR1cm4gbV9vZmZzZXRQb3NpdGlvbjsKLX0KLQotdm9p
ZCBVbmlzY3JpYmVDb250cm9sbGVyOjphZHZhbmNlKHVuc2lnbmVkIG9mZnNldCwgR2x5cGhCdWZm
ZXIqIGdseXBoQnVmZmVyKQotewotICAgIC8vIEZJWE1FOiBXZSByZWFsbHkgd2FudCB0byBiZSB1
c2luZyBhIG5ld2VyIHZlcnNpb24gb2YgVW5pc2NyaWJlIHRoYXQgc3VwcG9ydHMgdGhlIG5ldyBP
cGVuVHlwZQotICAgIC8vIGZ1bmN0aW9ucy4gIFRob3NlIGZ1bmN0aW9ucyB3b3VsZCBhbGxvdyB1
cyB0byB0dXJuIG9mZiBrZXJuaW5nIGFuZCBsaWdhdHVyZXMuICBXaXRob3V0IGJlaW5nIGFibGUK
LSAgICAvLyB0byBkbyB0aGF0LCB3ZSB3aWxsIGhhdmUgYnVnZ3kgbGluZSBicmVha2luZyBhbmQg
bWV0cmljcyB3aGVuIHNpbXBsZSBhbmQgY29tcGxleCB0ZXh0IGFyZSBjbG9zZQotICAgIC8vIHRv
Z2V0aGVyICh0aGUgY29tcGxleCBjb2RlIHBhdGggd2lsbCBuYXJyb3cgdGhlIHRleHQgYmVjYXVz
ZSBvZiBrZXJuaW5nIGFuZCBsaWdhdHVyZXMgYW5kIHRoZW4KLSAgICAvLyB3aGVuIGJpZGkgcHJv
Y2Vzc2luZyBzcGxpdHMgaW50byBtdWx0aXBsZSBydW5zLCB0aGUgc2ltcGxlIHBvcnRpb25zIHdp
bGwgZ2V0IHdpZGVyIGFuZCBjYXVzZSB1cyB0bwotICAgIC8vIHNwaWxsIG9mZiB0aGUgZWRnZSBv
ZiBhIGxpbmUpLgotICAgIGlmIChzdGF0aWNfY2FzdDxpbnQ+KG9mZnNldCkgPiBtX2VuZCkKLSAg
ICAgICAgb2Zmc2V0ID0gbV9lbmQ7Ci0KLSAgICBpbnQgbGVuZ3RoID0gb2Zmc2V0IC0gbV9jdXJy
ZW50Q2hhcmFjdGVyOwotICAgIGlmIChsZW5ndGggPD0gMCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgU3RyaW5nIGJ1ZmZlckZvcjE2Qml0RGF0YTsKLQotICAgIC8vIEl0ZW1pemUgdGhlIHN0cmlu
Zy4KLSAgICBjb25zdCBVQ2hhciogY3AgPSBudWxscHRyOwotICAgIGlmIChtX3J1bi5pczhCaXQo
KSkgewotICAgICAgICAvLyBVbmlzY3JpYmUgb25seSBkZWFscyB3aXRoIDE2LWJpdCBjaGFyYWN0
ZXJzLiBNdXN0IGdlbmVyYXRlIHRoZW0gbm93LgotICAgICAgICBidWZmZXJGb3IxNkJpdERhdGEg
PSBTdHJpbmc6Om1ha2UxNkJpdEZyb204Qml0U291cmNlKG1fcnVuLmRhdGE4KG1fY3VycmVudENo
YXJhY3RlciksIGxlbmd0aCk7Ci0gICAgICAgIGNwID0gYnVmZmVyRm9yMTZCaXREYXRhLmNoYXJh
Y3RlcnMxNigpOwotICAgIH0gZWxzZQotICAgICAgICBjcCA9IG1fcnVuLmRhdGExNihtX2N1cnJl
bnRDaGFyYWN0ZXIpOwotCi0gICAgdW5zaWduZWQgYmFzZUNoYXJhY3RlciA9IG1fY3VycmVudENo
YXJhY3RlcjsKLQotICAgIC8vIFdlIGJyZWFrIHVwIGl0ZW1pemF0aW9uIG9mIHRoZSBzdHJpbmcg
YnkgZm9udERhdGEgYW5kIChpZiBuZWVkZWQpIHRoZSB1c2Ugb2Ygc21hbGwgY2Fwcy4KLQotICAg
IC8vIEZJWE1FOiBJdCdzIGluY29uc2lzdGVudCB0aGF0IHdlIHVzZSBsb2dpY2FsIG9yZGVyIHdo
ZW4gaXRlbWl6aW5nLCBzaW5jZSB0aGlzCi0gICAgLy8gZG9lcyBub3QgbWF0Y2ggbm9ybWFsIFJU
TC4KLQotICAgIC8vIEZJWE1FOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBkZWNvZGUgc3Vycm9nYXRl
IHBhaXJzLiBDdXJyZW50bHkgaXQgbWFrZXMgbGl0dGxlIGRpZmZlcmVuY2UgdGhhdAotICAgIC8v
IGl0IGRvZXMgbm90IGJlY2F1c2UgdGhlIGZvbnQgY2FjaGUgb24gV2luZG93cyBkb2VzIG5vdCBz
dXBwb3J0IG5vbi1CTVAgY2hhcmFjdGVycy4KLSAgICBWZWN0b3I8VUNoYXIsIDI1Nj4gc21hbGxD
YXBzQnVmZmVyOwotICAgIGlmIChtX2ZvbnQuaXNTbWFsbENhcHMoKSkKLSAgICAgICAgc21hbGxD
YXBzQnVmZmVyLnJlc2l6ZShsZW5ndGgpOwotCi0gICAgdW5zaWduZWQgaW5kZXhPZkZvbnRUcmFu
c2l0aW9uID0gbV9ydW4ucnRsKCkgPyBsZW5ndGggLSAxIDogMDsKLSAgICBjb25zdCBVQ2hhciog
Y3VyciA9IG1fcnVuLnJ0bCgpID8gY3AgKyBsZW5ndGggIC0gMSA6IGNwOwotICAgIGNvbnN0IFVD
aGFyKiBlbmQgPSBtX3J1bi5ydGwoKSA/IGNwIC0gMSA6IGNwICsgbGVuZ3RoOwotCi0gICAgY29u
c3QgRm9udCogZm9udERhdGE7Ci0gICAgY29uc3QgRm9udCogbmV4dEZvbnREYXRhID0gbV9mb250
LmdseXBoRGF0YUZvckNoYXJhY3RlcigqY3VyciwgZmFsc2UpLmZvbnQ7Ci0KLSAgICBVQ2hhciBu
ZXdDID0gMDsKLQotICAgIGJvb2wgaXNTbWFsbENhcHM7Ci0gICAgYm9vbCBuZXh0SXNTbWFsbENh
cHMgPSBtX2ZvbnQuaXNTbWFsbENhcHMoKSAmJiAhKFVfR0VUX0dDX01BU0soKmN1cnIpICYgVV9H
Q19NX01BU0spICYmIChuZXdDID0gdV90b3VwcGVyKCpjdXJyKSkgIT0gKmN1cnI7Ci0KLSAgICBp
ZiAobmV4dElzU21hbGxDYXBzKQotICAgICAgICBzbWFsbENhcHNCdWZmZXJbY3VyciAtIGNwXSA9
IG5ld0M7Ci0KLSAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICBjdXJyID0gbV9ydW4ucnRsKCkg
PyBjdXJyIC0gMSA6IGN1cnIgKyAxOwotICAgICAgICBpZiAoY3VyciA9PSBlbmQpCi0gICAgICAg
ICAgICBicmVhazsKLQotICAgICAgICBmb250RGF0YSA9IG5leHRGb250RGF0YTsKLSAgICAgICAg
aXNTbWFsbENhcHMgPSBuZXh0SXNTbWFsbENhcHM7Ci0gICAgICAgIGludCBpbmRleCA9IGN1cnIg
LSBjcDsKLSAgICAgICAgVUNoYXIgYyA9ICpjdXJyOwotCi0gICAgICAgIGJvb2wgZm9yY2VTbWFs
bENhcHMgPSBpc1NtYWxsQ2FwcyAmJiAoVV9HRVRfR0NfTUFTSyhjKSAmIFVfR0NfTV9NQVNLKTsK
LSAgICAgICAgbmV4dEZvbnREYXRhID0gbV9mb250LmdseXBoRGF0YUZvckNoYXJhY3RlcigqY3Vy
ciwgZmFsc2UsIGZvcmNlU21hbGxDYXBzID8gU21hbGxDYXBzVmFyaWFudCA6IEF1dG9WYXJpYW50
KS5mb250OwotICAgICAgICBpZiAobV9mb250LmlzU21hbGxDYXBzKCkpIHsKLSAgICAgICAgICAg
IG5leHRJc1NtYWxsQ2FwcyA9IGZvcmNlU21hbGxDYXBzIHx8IChuZXdDID0gdV90b3VwcGVyKGMp
KSAhPSBjOwotICAgICAgICAgICAgaWYgKG5leHRJc1NtYWxsQ2FwcykKLSAgICAgICAgICAgICAg
ICBzbWFsbENhcHNCdWZmZXJbaW5kZXhdID0gZm9yY2VTbWFsbENhcHMgPyBjIDogbmV3QzsKLSAg
ICAgICAgfQotCi0gICAgICAgIGlmIChtX2ZhbGxiYWNrRm9udHMgJiYgZm9udERhdGEgJiYgbmV4
dEZvbnREYXRhICE9IGZvbnREYXRhICYmIGZvbnREYXRhICE9ICZtX2ZvbnQucHJpbWFyeUZvbnQo
KSkKLSAgICAgICAgICAgIG1fZmFsbGJhY2tGb250cy0+YWRkKGZvbnREYXRhKTsKLQotICAgICAg
ICBpZiAobmV4dEZvbnREYXRhICE9IGZvbnREYXRhIHx8IG5leHRJc1NtYWxsQ2FwcyAhPSBpc1Nt
YWxsQ2FwcykgewotICAgICAgICAgICAgaW50IGl0ZW1TdGFydCA9IG1fcnVuLnJ0bCgpID8gaW5k
ZXggKyAxIDogaW5kZXhPZkZvbnRUcmFuc2l0aW9uOwotICAgICAgICAgICAgaW50IGl0ZW1MZW5n
dGggPSBtX3J1bi5ydGwoKSA/IGluZGV4T2ZGb250VHJhbnNpdGlvbiAtIGluZGV4IDogaW5kZXgg
LSBpbmRleE9mRm9udFRyYW5zaXRpb247Ci0gICAgICAgICAgICBtX2N1cnJlbnRDaGFyYWN0ZXIg
PSBiYXNlQ2hhcmFjdGVyICsgaXRlbVN0YXJ0OwotICAgICAgICAgICAgaXRlbWl6ZVNoYXBlQW5k
UGxhY2UoKGlzU21hbGxDYXBzID8gc21hbGxDYXBzQnVmZmVyLmRhdGEoKSA6IGNwKSArIGl0ZW1T
dGFydCwgaXRlbVN0YXJ0LCBpdGVtTGVuZ3RoLCBmb250RGF0YSwgZ2x5cGhCdWZmZXIpOwotICAg
ICAgICAgICAgaW5kZXhPZkZvbnRUcmFuc2l0aW9uID0gaW5kZXg7Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgCi0gICAgaW50IGl0ZW1MZW5ndGggPSBtX3J1bi5ydGwoKSA/IGluZGV4T2ZGb250VHJh
bnNpdGlvbiArIDEgOiBsZW5ndGggLSBpbmRleE9mRm9udFRyYW5zaXRpb247Ci0gICAgaWYgKGl0
ZW1MZW5ndGgpIHsKLSAgICAgICAgaWYgKG1fZmFsbGJhY2tGb250cyAmJiBuZXh0Rm9udERhdGEg
JiYgbmV4dEZvbnREYXRhICE9ICZtX2ZvbnQucHJpbWFyeUZvbnQoKSkKLSAgICAgICAgICAgIG1f
ZmFsbGJhY2tGb250cy0+YWRkKG5leHRGb250RGF0YSk7Ci0KLSAgICAgICAgaW50IGl0ZW1TdGFy
dCA9IG1fcnVuLnJ0bCgpID8gMCA6IGluZGV4T2ZGb250VHJhbnNpdGlvbjsKLSAgICAgICAgbV9j
dXJyZW50Q2hhcmFjdGVyID0gYmFzZUNoYXJhY3RlciArIGl0ZW1TdGFydDsKLSAgICAgICAgaXRl
bWl6ZVNoYXBlQW5kUGxhY2UoKG5leHRJc1NtYWxsQ2FwcyA/IHNtYWxsQ2Fwc0J1ZmZlci5kYXRh
KCkgOiBjcCkgKyBpdGVtU3RhcnQsIGl0ZW1TdGFydCwgaXRlbUxlbmd0aCwgbmV4dEZvbnREYXRh
LCBnbHlwaEJ1ZmZlcik7Ci0gICAgfQotCi0gICAgbV9jdXJyZW50Q2hhcmFjdGVyID0gYmFzZUNo
YXJhY3RlciArIGxlbmd0aDsKLX0KLQotdm9pZCBVbmlzY3JpYmVDb250cm9sbGVyOjppdGVtaXpl
U2hhcGVBbmRQbGFjZShjb25zdCBVQ2hhciogY3AsIHVuc2lnbmVkIHN0cmluZ09mZnNldCwgdW5z
aWduZWQgbGVuZ3RoLCBjb25zdCBGb250KiBmb250RGF0YSwgR2x5cGhCdWZmZXIqIGdseXBoQnVm
ZmVyKQotewotICAgIC8vIFNjcmlwdEl0ZW1pemUgKGluIFdpbmRvd3MgWFAgdmVyc2lvbnMgcHJp
b3IgdG8gU1AyKSBjYW4gb3ZlcmZsb3cgYnkgMS4gIFRoaXMgaXMgd2h5IHRoZXJlIGlzIGFuIGV4
dHJhIGVtcHR5IGl0ZW0KLSAgICAvLyBoYW5naW5nIG91dCBhdCB0aGUgZW5kIG9mIHRoZSBhcnJh
eQotICAgIG1faXRlbXMucmVzaXplKDYpOwotICAgIGludCBudW1JdGVtcyA9IDA7Ci0gICAgSFJF
U1VMVCByYyA9IFNfT0s7Ci0gICAgd2hpbGUgKHJjID0gOjpTY3JpcHRJdGVtaXplKHdjaGFyRnJv
bShjcCksIGxlbmd0aCwgbV9pdGVtcy5zaXplKCkgLSAxLCAmbV9jb250cm9sLCAmbV9zdGF0ZSwg
bV9pdGVtcy5kYXRhKCksICZudW1JdGVtcykgPT0gRV9PVVRPRk1FTU9SWSkgewotICAgICAgICBt
X2l0ZW1zLnJlc2l6ZShtX2l0ZW1zLnNpemUoKSAqIDIpOwotICAgICAgICByZXNldENvbnRyb2xB
bmRTdGF0ZSgpOwotICAgIH0KLSAgICBpZiAoRkFJTEVEKHJjKSkgewotICAgICAgICBXVEZMb2dB
bHdheXMoIlVuaXNjcmliZUNvbnRyb2xsZXI6Oml0ZW1pemVTaGFwZUFuZFBsYWNlOiBTY3JpcHRJ
dGVtaXplIGZhaWxlZCwgcmM9JWx4IiwgcmMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAg
IG1faXRlbXMucmVzaXplKG51bUl0ZW1zICsgMSk7Ci0KLSAgICBpZiAobV9ydW4ucnRsKCkpIHsK
LSAgICAgICAgZm9yIChpbnQgaSA9IG1faXRlbXMuc2l6ZSgpIC0gMjsgaSA+PSAwOyBpLS0pIHsK
LSAgICAgICAgICAgIGlmICghc2hhcGVBbmRQbGFjZUl0ZW0oY3AsIHN0cmluZ09mZnNldCwgaSwg
Zm9udERhdGEsIGdseXBoQnVmZmVyKSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICB9IGVsc2UgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9pdGVt
cy5zaXplKCkgLSAxOyBpKyspIHsKLSAgICAgICAgICAgIGlmICghc2hhcGVBbmRQbGFjZUl0ZW0o
Y3AsIHN0cmluZ09mZnNldCwgaSwgZm9udERhdGEsIGdseXBoQnVmZmVyKSkKLSAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgVW5pc2NyaWJlQ29udHJv
bGxlcjo6cmVzZXRDb250cm9sQW5kU3RhdGUoKQotewotICAgIG1lbXNldCgmbV9jb250cm9sLCAw
LCBzaXplb2YoU0NSSVBUX0NPTlRST0wpKTsKLSAgICBtZW1zZXQoJm1fc3RhdGUsIDAsIHNpemVv
ZihTQ1JJUFRfU1RBVEUpKTsKLQotICAgIC8vIFNldCB1cCB0aGUgY29ycmVjdCBkaXJlY3Rpb24g
Zm9yIHRoZSBydW4uCi0gICAgbV9zdGF0ZS51QmlkaUxldmVsID0gbV9ydW4ucnRsKCk7Ci0gICAg
Ci0gICAgLy8gTG9jayB0aGUgY29ycmVjdCBkaXJlY3Rpb25hbCBvdmVycmlkZS4KLSAgICBtX3N0
YXRlLmZPdmVycmlkZURpcmVjdGlvbiA9IG1fcnVuLmRpcmVjdGlvbmFsT3ZlcnJpZGUoKTsKLX0K
LQotYm9vbCBVbmlzY3JpYmVDb250cm9sbGVyOjpzaGFwZUFuZFBsYWNlSXRlbShjb25zdCBVQ2hh
ciogY3AsIHVuc2lnbmVkIHN0cmluZ09mZnNldCwgdW5zaWduZWQgaSwgY29uc3QgRm9udCogZm9u
dERhdGEsIEdseXBoQnVmZmVyKiBnbHlwaEJ1ZmZlcikKLXsKLSAgICAvLyBEZXRlcm1pbmUgdGhl
IHN0cmluZyBmb3IgdGhpcyBpdGVtLgotICAgIGNvbnN0IFVDaGFyKiBzdHIgPSBjcCArIG1faXRl
bXNbaV0uaUNoYXJQb3M7Ci0gICAgaW50IGxlbiA9IG1faXRlbXNbaSsxXS5pQ2hhclBvcyAtIG1f
aXRlbXNbaV0uaUNoYXJQb3M7Ci0gICAgU0NSSVBUX0lURU0gaXRlbSA9IG1faXRlbXNbaV07Ci0K
LSAgICAvLyBTZXQgdXAgYnVmZmVycyB0byBob2xkIHRoZSByZXN1bHRzIG9mIHNoYXBpbmcgdGhl
IGl0ZW0uCi0gICAgVmVjdG9yPFdPUkQ+IGdseXBoczsKLSAgICBWZWN0b3I8V09SRD4gY2x1c3Rl
cnM7Ci0gICAgVmVjdG9yPFNDUklQVF9WSVNBVFRSPiB2aXN1YWxBdHRyaWJ1dGVzOwotICAgIGNs
dXN0ZXJzLnJlc2l6ZShsZW4pOwotICAgICAKLSAgICAvLyBTaGFwZSB0aGUgaXRlbS4KLSAgICAv
LyBUaGUgcmVjb21tZW5kZWQgc2l6ZSBmb3IgdGhlIGdseXBoIGJ1ZmZlciBpcyAxLjUgKiB0aGUg
Y2hhcmFjdGVyIGxlbmd0aCArIDE2IGluIHRoZSB1bmlzY3JpYmUgZG9jcy4KLSAgICAvLyBBcHBh
cmVudGx5IHRoaXMgaXMgYSBnb29kIHNpemUgdG8gYXZvaWQgaGF2aW5nIHRvIG1ha2UgcmVwZWF0
ZWQgY2FsbHMgdG8gU2NyaXB0U2hhcGUuCi0gICAgZ2x5cGhzLnJlc2l6ZSgxLjUgKiBsZW4gKyAx
Nik7Ci0gICAgdmlzdWFsQXR0cmlidXRlcy5yZXNpemUoZ2x5cGhzLnNpemUoKSk7Ci0KLSAgICBp
ZiAoIXNoYXBlKHN0ciwgbGVuLCBpdGVtLCBmb250RGF0YSwgZ2x5cGhzLCBjbHVzdGVycywgdmlz
dWFsQXR0cmlidXRlcykpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgVmVjdG9yPE9wdGlv
bmFsPHVuc2lnbmVkPj4gc3RyaW5nT2Zmc2V0cyhnbHlwaHMuc2l6ZSgpKTsKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKLSAgICAgICAgaWYgKHN0cmluZ09mZnNldHNb
Y2x1c3RlcnNbaV1dKQotICAgICAgICAgICAgc3RyaW5nT2Zmc2V0c1tjbHVzdGVyc1tpXV0gPSBz
dGQ6Om1pbigqc3RyaW5nT2Zmc2V0c1tjbHVzdGVyc1tpXV0sIGkpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBzdHJpbmdPZmZzZXRzW2NsdXN0ZXJzW2ldXSA9IGk7Ci0gICAgfQotCi0gICAg
Ly8gV2Ugbm93IGhhdmUgYSBjb2xsZWN0aW9uIG9mIGdseXBocy4KLSAgICBWZWN0b3I8R09GRlNF
VD4gb2Zmc2V0czsKLSAgICBWZWN0b3I8aW50PiBhZHZhbmNlczsKLSAgICBvZmZzZXRzLnJlc2l6
ZShnbHlwaHMuc2l6ZSgpKTsKLSAgICBhZHZhbmNlcy5yZXNpemUoZ2x5cGhzLnNpemUoKSk7Ci0g
ICAgSFJFU1VMVCBwbGFjZVJlc3VsdCA9IFNjcmlwdFBsYWNlKDAsIGZvbnREYXRhLT5zY3JpcHRD
YWNoZSgpLCBnbHlwaHMuZGF0YSgpLCBnbHlwaHMuc2l6ZSgpLCB2aXN1YWxBdHRyaWJ1dGVzLmRh
dGEoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJml0ZW0uYSwgYWR2
YW5jZXMuZGF0YSgpLCBvZmZzZXRzLmRhdGEoKSwgMCk7Ci0gICAgaWYgKHBsYWNlUmVzdWx0ID09
IEVfUEVORElORykgewotICAgICAgICAvLyBUaGUgc2NyaXB0IGNhY2hlIGlzbid0IHByaW1lZCB3
aXRoIGVub3VnaCBpbmZvIHlldC4gIFdlIG5lZWQgdG8gc2VsZWN0IG91ciBIRk9OVCBpbnRvCi0g
ICAgICAgIC8vIGEgREMgYW5kIHBhc3MgdGhlIERDIGluIHRvIFNjcmlwdFBsYWNlLgotICAgICAg
ICBIV25kREMgaGRjKDApOwotICAgICAgICBIRk9OVCBoZm9udCA9IGZvbnREYXRhLT5wbGF0Zm9y
bURhdGEoKS5oZm9udCgpOwotICAgICAgICBIRk9OVCBvbGRGb250ID0gKEhGT05UKVNlbGVjdE9i
amVjdChoZGMsIGhmb250KTsKLSAgICAgICAgcGxhY2VSZXN1bHQgPSBTY3JpcHRQbGFjZShoZGMs
IGZvbnREYXRhLT5zY3JpcHRDYWNoZSgpLCBnbHlwaHMuZGF0YSgpLCBnbHlwaHMuc2l6ZSgpLCB2
aXN1YWxBdHRyaWJ1dGVzLmRhdGEoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAmaXRlbS5hLCBhZHZhbmNlcy5kYXRhKCksIG9mZnNldHMuZGF0YSgpLCAwKTsKLSAgICAgICAg
U2VsZWN0T2JqZWN0KGhkYywgb2xkRm9udCk7Ci0gICAgfQotICAgIAotICAgIGlmIChGQUlMRUQo
cGxhY2VSZXN1bHQpIHx8IGdseXBocy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB0cnVlOwot
Ci0gICAgLy8gQ29udmVydCBhbGwgY2hhcnMgdGhhdCBzaG91bGQgYmUgdHJlYXRlZCBhcyBzcGFj
ZXMgdG8gdXNlIHRoZSBzcGFjZSBnbHlwaC4KLSAgICAvLyBXZSBhbHNvIGNyZWF0ZSBhIG1hcCB0
aGF0IGFsbG93cyB1cyB0byBxdWlja2x5IGdvIGZyb20gc3BhY2UgZ2x5cGhzIGJhY2sgdG8gdGhl
aXIgY29ycmVzcG9uZGluZyBjaGFyYWN0ZXJzLgotICAgIFZlY3RvcjxpbnQ+IHNwYWNlQ2hhcmFj
dGVycyhnbHlwaHMuc2l6ZSgpKTsKLSAgICBzcGFjZUNoYXJhY3RlcnMuZmlsbCgtMSk7Ci0KLSAg
ICBjb25zdCBmbG9hdCBjTG9naWNhbFNjYWxlID0gZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLnVz
ZUdESSgpID8gMS4wZiA6IDMyLjBmOwotICAgIGZsb2F0IHNwYWNlV2lkdGggPSBmb250RGF0YS0+
c3BhY2VXaWR0aCgpIC0gZm9udERhdGEtPnN5bnRoZXRpY0JvbGRPZmZzZXQoKTsKLSAgICB1bnNp
Z25lZCBsb2dpY2FsU3BhY2VXaWR0aCA9IHNwYWNlV2lkdGggKiBjTG9naWNhbFNjYWxlOwotCi0g
ICAgZm9yIChpbnQgayA9IDA7IGsgPCBsZW47IGsrKykgewotICAgICAgICBVQ2hhciBjaCA9ICoo
c3RyICsgayk7Ci0gICAgICAgIGJvb2wgdHJlYXRBc1NwYWNlID0gRm9udENhc2NhZGU6OnRyZWF0
QXNTcGFjZShjaCk7Ci0gICAgICAgIGJvb2wgdHJlYXRBc1plcm9XaWR0aFNwYWNlID0gRm9udENh
c2NhZGU6OnRyZWF0QXNaZXJvV2lkdGhTcGFjZShjaCk7Ci0gICAgICAgIGlmICh0cmVhdEFzU3Bh
Y2UgfHwgdHJlYXRBc1plcm9XaWR0aFNwYWNlKSB7Ci0gICAgICAgICAgICAvLyBTdWJzdGl0dXRl
IGluIHRoZSBzcGFjZSBnbHlwaCBhdCB0aGUgYXBwcm9wcmlhdGUgcGxhY2UgaW4gdGhlIGdseXBo
cwotICAgICAgICAgICAgLy8gYXJyYXkuCi0gICAgICAgICAgICBnbHlwaHNbY2x1c3RlcnNba11d
ID0gZm9udERhdGEtPnNwYWNlR2x5cGgoKTsKLSAgICAgICAgICAgIGFkdmFuY2VzW2NsdXN0ZXJz
W2tdXSA9IHRyZWF0QXNTcGFjZSA/IGxvZ2ljYWxTcGFjZVdpZHRoIDogMDsKLSAgICAgICAgICAg
IGlmICh0cmVhdEFzU3BhY2UpCi0gICAgICAgICAgICAgICAgc3BhY2VDaGFyYWN0ZXJzW2NsdXN0
ZXJzW2tdXSA9IG1fY3VycmVudENoYXJhY3RlciArIGsgKyBpdGVtLmlDaGFyUG9zOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgLy8gUG9wdWxhdGUgb3VyIGdseXBoIGJ1ZmZlciB3aXRoIHRoaXMg
aW5mb3JtYXRpb24uCi0gICAgYm9vbCBoYXNFeHRyYVNwYWNpbmcgPSBtX2ZvbnQubGV0dGVyU3Bh
Y2luZygpIHx8IG1fZm9udC53b3JkU3BhY2luZygpIHx8IG1fcGFkZGluZzsKLSAgICAKLSAgICBm
bG9hdCBsZWZ0RWRnZSA9IG1fcnVuV2lkdGhTb0ZhcjsKLQotICAgIGZvciAodW5zaWduZWQgayA9
IDA7IGsgPCBnbHlwaHMuc2l6ZSgpOyBrKyspIHsKLSAgICAgICAgR2x5cGggZ2x5cGggPSBnbHlw
aHNba107Ci0gICAgICAgIGZsb2F0IGFkdmFuY2UgPSBhZHZhbmNlc1trXSAvIGNMb2dpY2FsU2Nh
bGU7Ci0gICAgICAgIGZsb2F0IG9mZnNldFggPSBvZmZzZXRzW2tdLmR1IC8gY0xvZ2ljYWxTY2Fs
ZTsKLSAgICAgICAgZmxvYXQgb2Zmc2V0WSA9IG9mZnNldHNba10uZHYgLyBjTG9naWNhbFNjYWxl
OwotCi0gICAgICAgIC8vIE1hdGNoIEFwcEtpdCdzIHJ1bGVzIGZvciB0aGUgaW50ZWdlciB2cy4g
bm9uLWludGVnZXIgcmVuZGVyaW5nIG1vZGVzLgotICAgICAgICBmbG9hdCByb3VuZGVkQWR2YW5j
ZSA9IHJvdW5kZihhZHZhbmNlKTsKLSAgICAgICAgaWYgKCFmb250RGF0YS0+cGxhdGZvcm1EYXRh
KCkuaXNTeXN0ZW1Gb250KCkpIHsKLSAgICAgICAgICAgIGFkdmFuY2UgPSByb3VuZGVkQWR2YW5j
ZTsKLSAgICAgICAgICAgIG9mZnNldFggPSByb3VuZGYob2Zmc2V0WCk7Ci0gICAgICAgICAgICBv
ZmZzZXRZID0gcm91bmRmKG9mZnNldFkpOwotICAgICAgICB9Ci0KLSAgICAgICAgYWR2YW5jZSAr
PSBmb250RGF0YS0+c3ludGhldGljQm9sZE9mZnNldCgpOwotCi0gICAgICAgIGlmIChoYXNFeHRy
YVNwYWNpbmcpIHsKLSAgICAgICAgICAgIC8vIElmIHdlJ3JlIGEgZ2x5cGggd2l0aCBhbiBhZHZh
bmNlLCBnbyBhaGVhZCBhbmQgYWRkIGluIGxldHRlci1zcGFjaW5nLgotICAgICAgICAgICAgLy8g
VGhhdCB3YXkgd2Ugd2VlZCBvdXQgemVybyB3aWR0aCBsdXJrZXJzLiAgVGhpcyBiZWhhdmlvciBt
YXRjaGVzIHRoZSBmYXN0IHRleHQgY29kZSBwYXRoLgotICAgICAgICAgICAgaWYgKGFkdmFuY2Ug
JiYgbV9mb250LmxldHRlclNwYWNpbmcoKSkKLSAgICAgICAgICAgICAgICBhZHZhbmNlICs9IG1f
Zm9udC5sZXR0ZXJTcGFjaW5nKCk7Ci0KLSAgICAgICAgICAgIC8vIEhhbmRsZSBqdXN0aWZpY2F0
aW9uIGFuZCB3b3JkLXNwYWNpbmcuCi0gICAgICAgICAgICBpbnQgY2hhcmFjdGVySW5kZXggPSBz
cGFjZUNoYXJhY3RlcnNba107Ci0gICAgICAgICAgICAvLyBjaGFyYWN0ZXJJbmRleCBpcyBsZWZ0
IGF0IHRoZSBpbml0aWFsIHZhbHVlIG9mIC0xIGZvciBnbHlwaHMgdGhhdCBkbyBub3QgbWFwIGJh
Y2sgdG8gdHJlYXRlZC1hcy1zcGFjZSBjaGFyYWN0ZXJzLgotICAgICAgICAgICAgaWYgKGNoYXJh
Y3RlckluZGV4ICE9IC0xKSB7Ci0gICAgICAgICAgICAgICAgLy8gQWNjb3VudCBmb3IgcGFkZGlu
Zy4gV2ViQ29yZSB1c2VzIHNwYWNlIHBhZGRpbmcgdG8ganVzdGlmeSB0ZXh0LgotICAgICAgICAg
ICAgICAgIC8vIFdlIGRpc3RyaWJ1dGUgdGhlIHNwZWNpZmllZCBwYWRkaW5nIG92ZXIgdGhlIGF2
YWlsYWJsZSBzcGFjZXMgaW4gdGhlIHJ1bi4KLSAgICAgICAgICAgICAgICBpZiAobV9wYWRkaW5n
KSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFVzZSBsZWZ0b3ZlciBwYWRkaW5nIGlmIG5vdCBl
dmVubHkgZGl2aXNpYmxlIGJ5IG51bWJlciBvZiBzcGFjZXMuCi0gICAgICAgICAgICAgICAgICAg
IGlmIChtX3BhZGRpbmcgPCBtX3BhZFBlclNwYWNlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBhZHZhbmNlICs9IG1fcGFkZGluZzsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fcGFkZGlu
ZyA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBtX3BhZGRpbmcgLT0gbV9wYWRQZXJTcGFjZTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGFkdmFuY2UgKz0gbV9wYWRQZXJTcGFjZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIEFjY291bnQgZm9yIHdvcmQtc3BhY2lu
Zy4KLSAgICAgICAgICAgICAgICBpZiAoY2hhcmFjdGVySW5kZXggPiAwICYmIG1fZm9udC53b3Jk
U3BhY2luZygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFVDaGFyIGNhbmRpZGF0ZVNwYWNlOwot
ICAgICAgICAgICAgICAgICAgICBpZiAobV9ydW4uaXM4Qml0KCkpCi0gICAgICAgICAgICAgICAg
ICAgICAgICBjYW5kaWRhdGVTcGFjZSA9ICoobV9ydW4uZGF0YTgoY2hhcmFjdGVySW5kZXggLSAx
KSk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGNh
bmRpZGF0ZVNwYWNlID0gKihtX3J1bi5kYXRhMTYoY2hhcmFjdGVySW5kZXggLSAxKSk7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgaWYgKCFGb250Q2FzY2FkZTo6dHJlYXRBc1NwYWNlKGNhbmRpZGF0
ZVNwYWNlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkdmFuY2UgKz0gbV9mb250LndvcmRT
cGFjaW5nKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0K
LSAgICAgICAgbV9ydW5XaWR0aFNvRmFyICs9IGFkdmFuY2U7Ci0KLSAgICAgICAgLy8gRklYTUU6
IFdlIG5lZWQgdG8gdGFrZSB0aGUgR09GRlNFVFMgZm9yIGNvbWJpbmluZyBnbHlwaHMgYW5kIHN0
b3JlIHRoZW0gaW4gdGhlIGdseXBoIGJ1ZmZlcgotICAgICAgICAvLyBhcyB3ZWxsLCBzbyB0aGF0
IHdoZW4gdGhlIHRpbWUgY29tZXMgdG8gZHJhdyB0aG9zZSBnbHlwaHMsIHdlIGNhbiBhcHBseSB0
aGUgYXBwcm9wcmlhdGUKLSAgICAgICAgLy8gdHJhbnNsYXRpb24uCi0gICAgICAgIGlmIChnbHlw
aEJ1ZmZlcikgewotICAgICAgICAgICAgR2x5cGhCdWZmZXJBZHZhbmNlIG9yaWdpbihvZmZzZXRY
LCAtb2Zmc2V0WSk7Ci0gICAgICAgICAgICBpZiAoIWdseXBoQnVmZmVyLT5hZHZhbmNlc0NvdW50
KCkpCi0gICAgICAgICAgICAgICAgZ2x5cGhCdWZmZXItPnNldEluaXRpYWxBZHZhbmNlKG9yaWdp
bik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZ2x5cGhCdWZmZXItPmV4cGFu
ZExhc3RBZHZhbmNlKG9yaWdpbik7Ci0gICAgICAgICAgICBHbHlwaEJ1ZmZlckFkdmFuY2UgZ2x5
cGhBZHZhbmNlKC1vcmlnaW4ud2lkdGgoKSArIGFkdmFuY2UsIC1vcmlnaW4uaGVpZ2h0KCkpOwot
ICAgICAgICAgICAgZ2x5cGhCdWZmZXItPmFkZChnbHlwaCwgZm9udERhdGEsIGdseXBoQWR2YW5j
ZSwgc3RyaW5nT2Zmc2V0c1trXS52YWx1ZU9yKDApICsgc3RyaW5nT2Zmc2V0KTsKLSAgICAgICAg
fQotCi0gICAgICAgIEZsb2F0UmVjdCBnbHlwaEJvdW5kcyA9IGZvbnREYXRhLT5ib3VuZHNGb3JH
bHlwaChnbHlwaCk7Ci0gICAgICAgIGdseXBoQm91bmRzLm1vdmUobV9nbHlwaE9yaWdpbi54KCks
IG1fZ2x5cGhPcmlnaW4ueSgpKTsKLSAgICAgICAgbV9taW5HbHlwaEJvdW5kaW5nQm94WCA9IHN0
ZDo6bWluKG1fbWluR2x5cGhCb3VuZGluZ0JveFgsIGdseXBoQm91bmRzLngoKSk7Ci0gICAgICAg
IG1fbWF4R2x5cGhCb3VuZGluZ0JveFggPSBzdGQ6Om1heChtX21heEdseXBoQm91bmRpbmdCb3hY
LCBnbHlwaEJvdW5kcy5tYXhYKCkpOwotICAgICAgICBtX21pbkdseXBoQm91bmRpbmdCb3hZID0g
c3RkOjptaW4obV9taW5HbHlwaEJvdW5kaW5nQm94WSwgZ2x5cGhCb3VuZHMueSgpKTsKLSAgICAg
ICAgbV9tYXhHbHlwaEJvdW5kaW5nQm94WSA9IHN0ZDo6bWF4KG1fbWF4R2x5cGhCb3VuZGluZ0Jv
eFksIGdseXBoQm91bmRzLm1heFkoKSk7Ci0gICAgICAgIG1fZ2x5cGhPcmlnaW4ubW92ZShhZHZh
bmNlICsgb2Zmc2V0WCwgLW9mZnNldFkpOwotCi0gICAgICAgIC8vIE11dGF0ZSB0aGUgZ2x5cGgg
YXJyYXkgdG8gY29udGFpbiBvdXIgYWx0ZXJlZCBhZHZhbmNlcy4KLSAgICAgICAgaWYgKG1fY29t
cHV0aW5nT2Zmc2V0UG9zaXRpb24pCi0gICAgICAgICAgICBhZHZhbmNlc1trXSA9IGFkdmFuY2U7
Ci0gICAgfQotCi0gICAgd2hpbGUgKG1fY29tcHV0aW5nT2Zmc2V0UG9zaXRpb24gJiYgbV9vZmZz
ZXRYID49IGxlZnRFZGdlICYmIG1fb2Zmc2V0WCA8IG1fcnVuV2lkdGhTb0ZhcikgewotICAgICAg
ICAvLyBUaGUgcG9zaXRpb24gaXMgc29tZXdoZXJlIGluc2lkZSB0aGlzIHJ1bi4KLSAgICAgICAg
aW50IHRyYWlsaW5nID0gMDsKLSAgICAgICAgSFJFU1VMVCByYyA9IDo6U2NyaXB0WHRvQ1AobV9v
ZmZzZXRYIC0gbGVmdEVkZ2UsIGNsdXN0ZXJzLnNpemUoKSwgZ2x5cGhzLnNpemUoKSwgY2x1c3Rl
cnMuZGF0YSgpLCB2aXN1YWxBdHRyaWJ1dGVzLmRhdGEoKSwKLSAgICAgICAgICAgICAgICAgICAg
YWR2YW5jZXMuZGF0YSgpLCAmaXRlbS5hLCAmbV9vZmZzZXRQb3NpdGlvbiwgJnRyYWlsaW5nKTsK
LSAgICAgICAgaWYgKEZBSUxFRChyYykpIHsKLSAgICAgICAgICAgIFdURkxvZ0Fsd2F5cygiVW5p
c2NyaWJlQ29udHJvbGxlcjo6c2hhcGVBbmRQbGFjZUl0ZW06IFNjcmlwdFh0b0NQIGZhaWxlZCBy
Yz0lbHgiLCByYyk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAg
ICBpZiAodHJhaWxpbmcgJiYgbV9pbmNsdWRlUGFydGlhbEdseXBocyAmJiBtX29mZnNldFBvc2l0
aW9uIDwgbGVuIC0gMSkgewotICAgICAgICAgICAgbV9vZmZzZXRQb3NpdGlvbiArPSBtX2N1cnJl
bnRDaGFyYWN0ZXIgKyBtX2l0ZW1zW2ldLmlDaGFyUG9zOwotICAgICAgICAgICAgbV9vZmZzZXRY
ICs9IG1fcnVuLnJ0bCgpID8gLXRyYWlsaW5nIDogdHJhaWxpbmc7Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBtX2NvbXB1dGluZ09mZnNldFBvc2l0aW9uID0gZmFsc2U7Ci0gICAgICAg
ICAgICBtX29mZnNldFBvc2l0aW9uICs9IG1fY3VycmVudENoYXJhY3RlciArIG1faXRlbXNbaV0u
aUNoYXJQb3M7Ci0gICAgICAgICAgICBpZiAodHJhaWxpbmcgJiYgbV9pbmNsdWRlUGFydGlhbEds
eXBocykKLSAgICAgICAgICAgICAgIG1fb2Zmc2V0UG9zaXRpb24rKzsKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1i
b29sIFVuaXNjcmliZUNvbnRyb2xsZXI6OnNoYXBlKGNvbnN0IFVDaGFyKiBzdHIsIGludCBsZW4s
IFNDUklQVF9JVEVNIGl0ZW0sIGNvbnN0IEZvbnQqIGZvbnREYXRhLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBWZWN0b3I8V09SRD4mIGdseXBocywgVmVjdG9yPFdPUkQ+JiBjbHVz
dGVycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPFNDUklQVF9WSVNB
VFRSPiYgdmlzdWFsQXR0cmlidXRlcykKLXsKLSAgICBIV25kREMgaGRjOwotICAgIEhGT05UIG9s
ZEZvbnQgPSAwOwotICAgIEhSRVNVTFQgc2hhcGVSZXN1bHQgPSBFX1BFTkRJTkc7Ci0gICAgaW50
IGdseXBoQ291bnQgPSAwOwotCi0gICAgaWYgKCFmb250RGF0YSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgZG8gewotICAgICAgICBzaGFwZVJlc3VsdCA9IFNjcmlwdFNoYXBlKGhkYywg
Zm9udERhdGEtPnNjcmlwdENhY2hlKCksIHdjaGFyRnJvbShzdHIpLCBsZW4sIGdseXBocy5zaXpl
KCksICZpdGVtLmEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhzLmRh
dGEoKSwgY2x1c3RlcnMuZGF0YSgpLCB2aXN1YWxBdHRyaWJ1dGVzLmRhdGEoKSwgJmdseXBoQ291
bnQpOwotICAgICAgICBpZiAoc2hhcGVSZXN1bHQgPT0gRV9QRU5ESU5HKSB7Ci0gICAgICAgICAg
ICAvLyBUaGUgc2NyaXB0IGNhY2hlIGlzbid0IHByaW1lZCB3aXRoIGVub3VnaCBpbmZvIHlldC4g
IFdlIG5lZWQgdG8gc2VsZWN0IG91ciBIRk9OVCBpbnRvCi0gICAgICAgICAgICAvLyBhIERDIGFu
ZCBwYXNzIHRoZSBEQyBpbiB0byBTY3JpcHRTaGFwZS4KLSAgICAgICAgICAgIEFTU0VSVCghaGRj
KTsKLSAgICAgICAgICAgIGhkYy5zZXRIV25kKDApOwotICAgICAgICAgICAgSEZPTlQgaGZvbnQg
PSBmb250RGF0YS0+cGxhdGZvcm1EYXRhKCkuaGZvbnQoKTsKLSAgICAgICAgICAgIG9sZEZvbnQg
PSAoSEZPTlQpU2VsZWN0T2JqZWN0KGhkYywgaGZvbnQpOwotICAgICAgICB9IGVsc2UgaWYgKHNo
YXBlUmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpIHsKLSAgICAgICAgICAgIC8vIE5lZWQgdG8gcmVz
aXplIG91ciBidWZmZXJzLgotICAgICAgICAgICAgZ2x5cGhzLnJlc2l6ZShnbHlwaHMuc2l6ZSgp
ICogMik7Ci0gICAgICAgICAgICB2aXN1YWxBdHRyaWJ1dGVzLnJlc2l6ZShnbHlwaHMuc2l6ZSgp
KTsKLSAgICAgICAgfQotICAgIH0gd2hpbGUgKHNoYXBlUmVzdWx0ID09IEVfUEVORElORyB8fCBz
aGFwZVJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKLQotICAgIGlmIChoZGMpCi0gICAgICAgIFNl
bGVjdE9iamVjdChoZGMsIG9sZEZvbnQpOwotCi0gICAgaWYgKEZBSUxFRChzaGFwZVJlc3VsdCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGdseXBocy5zaHJpbmsoZ2x5cGhDb3VudCk7
Ci0gICAgdmlzdWFsQXR0cmlidXRlcy5zaHJpbmsoZ2x5cGhDb3VudCk7Ci0KLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL1VuaXNjcmliZUNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9VbmlzY3JpYmVDb250cm9sbGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGE0NjI0Yzc5YTA4MDgzMzIwYTUyNzM1ZGUxMWRjOTRhOGJjNGZmMDEuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL1VuaXNjcmliZUNvbnRyb2xsZXIuaAorKysgL2Rldi9udWxsCkBA
IC0xLDkwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDksIDIw
MTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFVu
aXNjcmliZUNvbnRyb2xsZXJfaAotI2RlZmluZSBVbmlzY3JpYmVDb250cm9sbGVyX2gKLQotI2lu
Y2x1ZGUgIkZvbnRDYXNjYWRlLmgiCi0jaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKLSNpbmNsdWRl
IDx1c3AxMC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1jbGFzcyBVbmlzY3JpYmVDb250cm9sbGVyIHsKLXB1YmxpYzoKLSAgICBVbmlzY3JpYmVD
b250cm9sbGVyKGNvbnN0IEZvbnRDYXNjYWRlKiwgY29uc3QgVGV4dFJ1biYsIEhhc2hTZXQ8Y29u
c3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzID0gMCk7Ci0KLSAgICAvLyBBZHZhbmNlIGFuZCBtZWFz
dXJlL3BsYWNlIHVwIHRvIHRoZSBzcGVjaWZpZWQgY2hhcmFjdGVyLgotICAgIHZvaWQgYWR2YW5j
ZSh1bnNpZ25lZCB0bywgR2x5cGhCdWZmZXIqID0gMCk7Ci0KLSAgICAvLyBDb21wdXRlIHRoZSBj
aGFyYWN0ZXIgb2Zmc2V0IGZvciBhIGdpdmVuIHggY29vcmRpbmF0ZS4KLSAgICBpbnQgb2Zmc2V0
Rm9yUG9zaXRpb24oaW50IHgsIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpOwotCi0gICAgLy8g
UmV0dXJucyB0aGUgd2lkdGggb2YgZXZlcnl0aGluZyB3ZSd2ZSBjb25zdW1lZCBzbyBmYXIuCi0g
ICAgZmxvYXQgcnVuV2lkdGhTb0ZhcigpIGNvbnN0IHsgcmV0dXJuIG1fcnVuV2lkdGhTb0Zhcjsg
fQotCi0gICAgZmxvYXQgbWluR2x5cGhCb3VuZGluZ0JveFgoKSBjb25zdCB7IHJldHVybiBtX21p
bkdseXBoQm91bmRpbmdCb3hYOyB9Ci0gICAgZmxvYXQgbWF4R2x5cGhCb3VuZGluZ0JveFgoKSBj
b25zdCB7IHJldHVybiBtX21heEdseXBoQm91bmRpbmdCb3hYOyB9Ci0gICAgZmxvYXQgbWluR2x5
cGhCb3VuZGluZ0JveFkoKSBjb25zdCB7IHJldHVybiBtX21pbkdseXBoQm91bmRpbmdCb3hZOyB9
Ci0gICAgZmxvYXQgbWF4R2x5cGhCb3VuZGluZ0JveFkoKSBjb25zdCB7IHJldHVybiBtX21heEds
eXBoQm91bmRpbmdCb3hZOyB9Ci0KLXByaXZhdGU6ICAgIAotICAgIHZvaWQgcmVzZXRDb250cm9s
QW5kU3RhdGUoKTsKLQotICAgIHZvaWQgaXRlbWl6ZVNoYXBlQW5kUGxhY2UoY29uc3QgVUNoYXIq
LCB1bnNpZ25lZCBzdHJpbmdPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgRm9udCosIEds
eXBoQnVmZmVyKik7Ci0gICAgYm9vbCBzaGFwZUFuZFBsYWNlSXRlbShjb25zdCBVQ2hhciosIHVu
c2lnbmVkIHN0cmluZ09mZnNldCwgdW5zaWduZWQgaW5kZXgsIGNvbnN0IEZvbnQqLCBHbHlwaEJ1
ZmZlciopOwotICAgIGJvb2wgc2hhcGUoY29uc3QgVUNoYXIqIHN0ciwgaW50IGxlbiwgU0NSSVBU
X0lURU0sIGNvbnN0IEZvbnQqLAotICAgICAgICAgICAgICAgVmVjdG9yPFdPUkQ+JiBnbHlwaHMs
IFZlY3RvcjxXT1JEPiYgY2x1c3RlcnMsCi0gICAgICAgICAgICAgICBWZWN0b3I8U0NSSVBUX1ZJ
U0FUVFI+JiB2aXN1YWxBdHRyaWJ1dGVzKTsKLQotICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBtX2Zv
bnQ7Ci0gICAgY29uc3QgVGV4dFJ1biYgbV9ydW47Ci0gICAgSGFzaFNldDxjb25zdCBGb250Kj4q
IG1fZmFsbGJhY2tGb250czsKLSAgICBGbG9hdFBvaW50IG1fZ2x5cGhPcmlnaW47Ci0gICAgZmxv
YXQgbV9taW5HbHlwaEJvdW5kaW5nQm94WDsKLSAgICBmbG9hdCBtX21heEdseXBoQm91bmRpbmdC
b3hYOwotICAgIGZsb2F0IG1fbWluR2x5cGhCb3VuZGluZ0JveFk7Ci0gICAgZmxvYXQgbV9tYXhH
bHlwaEJvdW5kaW5nQm94WTsKLQotICAgIFNDUklQVF9DT05UUk9MIG1fY29udHJvbDsKLSAgICBT
Q1JJUFRfU1RBVEUgbV9zdGF0ZTsKLSAgICBWZWN0b3I8U0NSSVBUX0lURU0+IG1faXRlbXM7Ci0g
Ci0gICAgdW5zaWduZWQgbV9jdXJyZW50Q2hhcmFjdGVyOwotICAgIGludCBtX2VuZDsKLQotICAg
IGZsb2F0IG1fcnVuV2lkdGhTb0ZhcjsKLSAgICBmbG9hdCBtX3BhZGRpbmc7Ci0gICAgZmxvYXQg
bV9wYWRQZXJTcGFjZTsKLQotICAgIGJvb2wgbV9jb21wdXRpbmdPZmZzZXRQb3NpdGlvbjsKLSAg
ICBib29sIG1faW5jbHVkZVBhcnRpYWxHbHlwaHM7Ci0gICAgZmxvYXQgbV9vZmZzZXRYOwotICAg
IGludCBtX29mZnNldFBvc2l0aW9uOwotfTsKLQotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9Ub29s
cy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYzg1Yzk5ZDk3MGEwYzY3N2Q1MGRi
YTM2ZmU3YzM5NzUwNGQ0M2JiNS4uOGQ5ZGU2MjcwYmMzNzQ1NjRkN2U2MWQ3ZDljNDJkMzFkOTVi
Y2U1MCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDEyIEBACisyMDIwLTAxLTA4ICBGdWppaSBIaXJvbm9yaSAgPEhpcm9ub3JpLkZ1
amlpQHNvbnkuY29tPgorCisgICAgICAgIFtXaW5dIFVzZSBDb21wbGV4VGV4dENvbnRyb2xsZXIg
aW5zdGVhZCBvZiBVbmlzY3JpYmVDb250cm9sbGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQ4ODQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db21w
bGV4VGV4dENvbnRyb2xsZXIuY3BwOiBFbmFibGVkIHRoZXNlIHRlc3RzIGZvciBQTEFURk9STShX
SU4pLgorCiAyMDIwLTAxLTA3ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgogCiAg
ICAgICAgIHJ1bi1qc2Mgc2hvdWxkIG5vdCBwcmludCAiLi4uIEkgc2hvdWxkIG5vdCBiZSBoZXJl
IC4uLiIgd2hlbiBpdCBkb2Vzbid0IGdldCBraWxsZWQgd2hlbiBzZW5kaW5nIGEgc2lnbmFsIHRv
IGl0c2VsZgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0Nv
bXBsZXhUZXh0Q29udHJvbGxlci5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNv
cmUvQ29tcGxleFRleHRDb250cm9sbGVyLmNwcAppbmRleCA5M2ZlOTBlOWQ5ZDE3YzMxNDY1NmVl
NjIwZThlM2U2ZjJhMDk3ZmNjLi45MjY4ZWZiNjgzYmVmNTE1NjY2OGExOTc4NTllNjU0ZmVhNzEz
ZDBhIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29tcGxl
eFRleHRDb250cm9sbGVyLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNv
cmUvQ29tcGxleFRleHRDb250cm9sbGVyLmNwcApAQCAtMjUsOCArMjUsNiBAQAogCiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAKLSNpZiAhUExBVEZPUk0oV0lOKQotCiAjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5pdGlhbGl6ZVRocmVhZGluZy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ29tcGxleFRl
eHRDb250cm9sbGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Gb250Q2FzY2FkZS5oPgpAQCAtMzY3
LDUgKzM2NSwzIEBAIFRFU1RfRihDb21wbGV4VGV4dENvbnRyb2xsZXJUZXN0LCBUb3RhbFdpZHRo
V2l0aEp1c3RpZmljYXRpb24pCiB9CiAKIH0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggODM1YzYwZjFlYTVm
MjFmYTdlYzhjYmZlNTNjM2Y2MGVkOGVjYmZjZi4uNmM0ZDViZGY5OTNkMTFlN2EwOGJkMTA0ZWU2
ZGQ2YzNkMmNlMjM1YSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xh
eW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDIwLTAxLTA4ICBGdWppaSBI
aXJvbm9yaSAgPEhpcm9ub3JpLkZ1amlpQHNvbnkuY29tPgorCisgICAgICAgIFtXaW5dIFVzZSBD
b21wbGV4VGV4dENvbnRyb2xsZXIgaW5zdGVhZCBvZiBVbmlzY3JpYmVDb250cm9sbGVyCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQ4ODQKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL3dp
bi9UZXN0RXhwZWN0YXRpb25zOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9mYXN0L3RleHQvanVz
dGlmeS1pZGVvZ3JhcGgtY29tcGxleC1leHBlY3RlZC50eHQ6IFJlYmFzZWxpbmVkLgorICAgICAg
ICAqIHBsYXRmb3JtL3dpbmNhaXJvL1Rlc3RFeHBlY3RhdGlvbnM6CisKIDIwMjAtMDEtMDggIEZ1
amlpIEhpcm9ub3JpICA8SGlyb25vcmkuRnVqaWlAc29ueS5jb20+CiAKICAgICAgICAgW0hhcmZC
dXp6XVtHVEtdIGZhc3QvdGV4dC9jb21wbGV4LWZpcnN0LWdseXBoLXdpdGgtaW5pdGlhbC1hZHZh
bmNlLmh0bWwgaXMgZmFpbGluZwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2lu
L1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vVGVzdEV4cGVjdGF0
aW9ucwppbmRleCBkYTM1NGVmM2NkNjBlZTA4MTNiMjc0Y2Y3YWY1MGYxYjZhZTEyZmYyLi45NDll
MWRhN2VmY2QzNjQ3NDBiNzRkOTE0ZDdmNDJmZTJmZmRmZTI5IDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9wbGF0Zm9ybS93aW4vVGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS93aW4vVGVzdEV4cGVjdGF0aW9ucwpAQCAtMjk2NSw2ICsyOTY1LDggQEAgd2Via2l0Lm9y
Zy9iLzE1MTc1OSBmYXN0L2RvbS9XaW5kb3cvcHJvcGVydHktYWNjZXNzLW9uLWNhY2hlZC13aW5k
b3ctYWZ0ZXItZnJhbWUKIAogd2Via2l0Lm9yZy9iLzE1MjAwOSBmYXN0L2NhbnZhcy9jYW52YXMt
dG9vLWxhcmdlLXRvLWRyYXcuaHRtbCBbIFNraXAgXQogCitmYXN0L3RleHQvYXJhYmljLXp3ai1h
bmQtenduai5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCisKICMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIEVuZCBsaXN0IG9mIFVOUkVWSUVXRUQgZmFp
bHVyZXMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
CkBAIC0zNDI2LDYgKzM0MjgsNyBAQCBmYXN0L3RleHQvY29tcGxleC1zbWFsbC1jYXBzLW5vbi1i
bXAtY2FwaXRhbGl6ZS5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCiBmYXN0L3RleHQvY3Vyc2l2
ZS16aC5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCiBmYXN0L3RleHQvZW1vamktc2luZ2xlLXBh
cmVudC1mYW1pbHktMi5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCiBmYXN0L3RleHQvZW1vamkt
c2luZ2xlLXBhcmVudC1mYW1pbHkuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQorZmFzdC90ZXh0
L2Vtb2ppLXdpdGgtam9pbmVyLmh0bWwgWyBGYWlsdXJlIF0KIGh0dHAvdGVzdHMvc2VjdXJpdHkv
aHR0cC0wLjkvaW1hZ2Utb24tSFRUUC0wLjktZGVmYXVsdC1wb3J0LXBhZ2UtYWxsb3dlZC1yZWYt
dGVzdC5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCiBtYXRobWwvcHJlc2VudGF0aW9uL25vbi1i
bXAtb3BlcmF0b3JzLXN0cmV0Y2hpbmcuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQogc2VjdXJp
dHkvY29udGVudFNlY3VyaXR5UG9saWN5L2ltYWdlLXdpdGgtYmxvYi11cmwtYWxsb3dlZC1ieS1p
bWctc3JjLXN0YXItd2l0aC1BbGxvd0NvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZVN0YXJUb01h
dGNoQW55UHJvdG9jb2wtZW5hYmxlZC5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCkBAIC00NTA3
LDYgKzQ1MTAsOSBAQCB3ZWJraXQub3JnL2IvMjA1MjcyIGpzL2ludGVnZXItZGl2aXNpb24tbmVn
MnRvdGhlMzItYnktbmVnMS5odG1sIFsgRmFpbHVyZSBdCiAKIHdlYmtpdC5vcmcvYi8yMDUyNzMg
aW1wb3J0ZWQvYmxpbmsvZmFzdC9zdWItcGl4ZWwvbmVnYXRpdmUtY29tcG9zaXRlZC1vZmZzZXQu
aHRtbCBbIFBhc3MgSW1hZ2VPbmx5RmFpbHVyZSBdCiAKK3dlYmtpdC5vcmcvYi8yMDU0ODcgZmFz
dC90ZXh0L3NlbGVjdGlvbi1pbi1pbml0aWFsLWFkdmFuY2UtcmVnaW9uLmh0bWwgWyBGYWlsdXJl
IF0KK3dlYmtpdC5vcmcvYi8yMDU0ODUgZmFzdC90ZXh0L3N0YWxlLVRleHRMYXlvdXQtZnJvbS1m
aXJzdC1saW5lLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KKwogd2Via2l0Lm9yZy9iLzIwNTg1
NSBodHRwL3dwdC9jc3MvY3NzLWhpZ2hsaWdodC1hcGkvaGlnaGxpZ2h0LXRleHQtYWNyb3NzLWVs
ZW1lbnRzLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi8yMDU4NTUgaHR0
cC93cHQvY3NzL2Nzcy1oaWdobGlnaHQtYXBpL2hpZ2hsaWdodC10ZXh0LWNhc2NhZGUuaHRtbCBb
IEltYWdlT25seUZhaWx1cmUgXQogd2Via2l0Lm9yZy9iLzIwNTg1NSBodHRwL3dwdC9jc3MvY3Nz
LWhpZ2hsaWdodC1hcGkvaGlnaGxpZ2h0LXRleHQtcmVwbGFjZS5odG1sIFsgSW1hZ2VPbmx5RmFp
bHVyZSBdCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vZmFzdC90ZXh0L2p1
c3RpZnktaWRlb2dyYXBoLWNvbXBsZXgtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vd2luL2Zhc3QvdGV4dC9qdXN0aWZ5LWlkZW9ncmFwaC1jb21wbGV4LWV4cGVjdGVkLnR4dApp
bmRleCBmMTAxOTQyNDM1NTJlODU3ZmE1MTk5YWEyYWZkODY5MWZlN2Y3NjA3Li5hZDg1NjQzMTA5
MWE1NTYwNTZjMGQ4OTYwMWIwOWM2ZWZhZmRmNzE5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS93aW4vZmFzdC90ZXh0L2p1c3RpZnktaWRlb2dyYXBoLWNvbXBsZXgtZXhwZWN0ZWQu
dHh0CisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9mYXN0L3RleHQvanVzdGlmeS1pZGVv
Z3JhcGgtY29tcGxleC1leHBlY3RlZC50eHQKQEAgLTE2LDggKzE2LDggQEAgbGF5ZXIgYXQgKDAs
MCkgc2l6ZSA4MDB4NjAwCiAgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMzApIHdpZHRoIDM4Mjog
Ilx4ezUxMkF9XHh7NzU3MH1ceHs3Njg0fVx4ezg4NEN9XHh7NTJENX1ceHs2MUM5fVx4ezc1Mjh9
XHh7N0EwQn1ceHs1RjBGfVx4ezVFNzN9XHh7NTNGMH1ceHtGRjBDfVx4ezVCQTJ9XHh7NjIzNn1c
eHs0RTVGfVx4ezk3NUV9XHh7NUUzOH1ceHs1NTlDfVx4ezYxMUJ9XHh7OTU4Qn1ceHs3NjdDfVx4
ezRFQkF9XHh7NTRFMX1ceHs2MjQwfVx4ezUyNzV9XHh7NEY1Q31ceHs3Njg0fVx4ezYxQzl9XHh7
NzUyOH1ceHs3QTBCfVx4ezVGMEZ9XHh7MzAwMn1ceHszMDBEfSIKICAgICAgIFJlbmRlckJsb2Nr
IHtQfSBhdCAoMCwxMjkpIHNpemUgNTUweDQ1CiAgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBh
dCAoMCwwKSBzaXplIDU1MHg0NQotICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDU1
MDogIkVBIE1vYmlsZSBceHs3Njg0fSBXb3JsZHdpZGUgU3R1ZGlvcyBceHs1MjZGfVx4ezdFM0R9
XHh7ODhDMX0gVHJhdmlzIEJvYXRtYW4gXHh7NjMwN31ceHs1MUZBfVx4e0ZGMUF9XHh7MzAwQ31B
cHAgU3RvcmUgXHh7NEUwRH1ceHs1MEM1fVx4ezVGQjl9XHh7NUU5NX1ceHs2NTM5fVx4ezhCOEF9
XHh7NEU4Nn1ceHs4ODRDfVx4ezUyRDV9XHh7OTA0QX1ceHs2MjMyfSIKLSAgICAgICAgICB0ZXh0
IHJ1biBhdCAoMCwxNSkgd2lkdGggNTUwOiAiXHh7NzUyMn1ceHs2OTZEfVx4ezc2ODR9XHh7NzUx
Rn1ceHs2MTRCfVx4e0ZGMEN9XHh7ODAwQ31ceHs0RTE0fVx4ezkwODR9XHh7NTcyOH1ceHs2MzAx
fVx4ezdFOEN9XHh7NkYxNH1ceHs5MDMyfVx4ezMwMDJ9XHh7NjcwOX1ceHs0RTg2fVx4ezUxNjh9
XHh7NzQwM30gNSBceHs1MzQzfVx4ezU5MUF9XHh7ODQyQ31ceHs3Njg0fSBpUGhvbmUgXHh7NTQ4
Q30gaVBvZCB0b3VjaCBceHs1QkEyfVx4ezYyMzZ9XHh7NzBCQX1ceHs1N0ZBfVx4ezc5MEV9XHh7
RkYwQ31BcHAgU3RvcmUiCisgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggNTUwOiAi
RUEgTW9iaWxlIFx4ezc2ODR9IFdvcmxkd2lkZSBTdHVkaW9zIFx4ezUyNkZ9XHh7N0UzRH1ceHs4
OEMxfSBUcmF2aXMgQm9hdG1hbiBceHs2MzA3fVx4ezUxRkF9XHh7RkYxQX1ceHszMDBDfUFwcCBT
dG9yZSBceHs0RTBEfVx4ezUwQzV9XHh7NUZCOX1ceHs1RTk1fVx4ezY1Mzl9XHh7OEI4QX1ceHs0
RTg2fVx4ezg4NEN9XHh7NTJENX1ceHs5MDRBfSIKKyAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCwx
NSkgd2lkdGggNTUwOiAiXHh7NjIzMn1ceHs3NTIyfVx4ezY5NkR9XHh7NzY4NH1ceHs3NTFGfVx4
ezYxNEJ9XHh7RkYwQ31ceHs4MDBDfVx4ezRFMTR9XHh7OTA4NH1ceHs1NzI4fVx4ezYzMDF9XHh7
N0U4Q31ceHs2RjE0fVx4ezkwMzJ9XHh7MzAwMn1ceHs2NzA5fVx4ezRFODZ9XHh7NTE2OH1ceHs3
NDAzfSA1IFx4ezUzNDN9XHh7NTkxQX1ceHs4NDJDfVx4ezc2ODR9IGlQaG9uZSBceHs1NDhDfSBp
UG9kIHRvdWNoIFx4ezVCQTJ9XHh7NjIzNn1ceHs3MEJBfVx4ezU3RkF9XHh7NzkwRX1ceHtGRjBD
fUFwcCBTdG9yZSIKICAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCwzMCkgd2lkdGggMzAxOiAiXHh7
OEI5M31ceHs2MjExfVx4ezUwMTF9XHh7ODBGRH1ceHs1OTIwfVx4ezk1OEJ9XHh7NzY3Q31ceHs1
M0Q3fVx4ezUyMzB9XHh7NUVFM31ceHs1OTI3fVx4ezc2ODR9XHh7NUJBMn1ceHs2MjM2fVx4ezU1
OUN9XHh7NjExQn1ceHs3Njg0fVx4ezlBRDh9XHh7NTRDMX1ceHs4Q0VBfSBFQSBceHs5MDRBfVx4
ezYyMzJ9XHh7MzAwMn1ceHszMDBEfSIKICAgICAgIFJlbmRlckJsb2NrIHtQfSBhdCAoMCwxODYp
IHNpemUgNTUweDQ1CiAgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXplIDU1
MHg0NQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luY2Fpcm8vVGVzdEV4cGVj
dGF0aW9ucyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbmNhaXJvL1Rlc3RFeHBlY3RhdGlvbnMK
aW5kZXggMDFhNTEyMmQ3ODEyYWUyZmY4YTk0MjU1ZTAwZTRjNGViOTc0MjEyMS4uZGQ3N2M0Y2I5
OGQ4YTBmNTdiZTI2ZWJiMzA0ZjE3ZTBiYjBhODcxOSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vd2luY2Fpcm8vVGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS93aW5jYWlyby9UZXN0RXhwZWN0YXRpb25zCkBAIC04MjksNiArODI5LDkgQEAgZmFzdC9k
b20vZm9jdXMtc2hpZnQtY3Jhc2guaHRtbCBbIFBhc3MgVGltZW91dCBdCiBmYXN0L2RvbS9SYW5n
ZS9kZXRhY2gtcmFuZ2UtZHVyaW5nLWRlbGV0ZWNvbnRlbnRzLmh0bWwgWyBQYXNzIFRpbWVvdXQg
XQogaW1wb3J0ZWQvYmxpbmsvZmFzdC9kb20vV2luZG93L29wZW4td2luZG93LWZlYXR1cmVzLWZ1
enouaHRtbCBbIFBhc3MgVGltZW91dCBdCiAKK3dlYmtpdC5vcmcvYi8yMDU0ODcgZmFzdC90ZXh0
L3NlbGVjdGlvbi1pbi1pbml0aWFsLWFkdmFuY2UtcmVnaW9uLmh0bWwgWyBGYWlsdXJlIF0KK3dl
YmtpdC5vcmcvYi8yMDU0ODUgZmFzdC90ZXh0L3N0YWxlLVRleHRMYXlvdXQtZnJvbS1maXJzdC1s
aW5lLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KKwogIy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLwogIyBodHRwCiAjLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCkBA
IC0xMTE5LDcgKzExMjIsNiBAQCBsZWdhY3ktYW5pbWF0aW9uLWVuZ2luZS9jb21wb3NpdGluZy9i
YWNraW5nL2JhY2tpbmctc3RvcmUtYXR0YWNobWVudC1lbXB0eS1rZXlmcgogIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMKIAogd2Via2l0Lm9yZy9iLzExNzMyMiBmYXN0L2Nzcy90ZXh0LWluZGVudC1m
aXJzdC1saW5lLTAwNi5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCi13ZWJraXQub3JnL2IvMTE3
MzIyIGZhc3QvY3NzL3dvcmQtc3BhY2luZy1jaGFyYWN0ZXJzLWNvbXBsZXgtdGV4dC5odG1sIFsg
SW1hZ2VPbmx5RmFpbHVyZSBdCiBmYXN0L2Nzcy9nZXRDb21wdXRlZFN0eWxlL2dldENvbXB1dGVk
U3R5bGUtb3V0bGluZS1zaG9ydGhhbmQuaHRtbCBbIFBhc3MgVGltZW91dCBdCiB3ZWJraXQub3Jn
L2IvMTM2NDg0IGZhc3QvY3NzLWdlbmVyYXRlZC1jb250ZW50L2luaXRpYWwtbGV0dGVyLWJhc2lj
Lmh0bWwgWyBQYXNzIEZhaWx1cmUgXQogd2Via2l0Lm9yZy9iLzEzNjQ4NCBmYXN0L2Nzcy1nZW5l
cmF0ZWQtY29udGVudC9pbml0aWFsLWxldHRlci1ib3JkZXItcGFkZGluZy5odG1sIFsgUGFzcyBG
YWlsdXJlIF0KQEAgLTE3MTksMTUgKzE3MjEsMTIgQEAgZmFzdC90ZXh0L2NvbXBsZXgtc21hbGwt
Y2Fwcy1ub24tYm1wLWNhcGl0YWxpemUuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQogZmFzdC90
ZXh0L2RlY29yYXRpb25zLXZlcnRpY2FsLXVuZGVybGluZS5odG1sIFsgSW1hZ2VPbmx5RmFpbHVy
ZSBdCiBmYXN0L3RleHQvZWxsaXBzaXMtdGV4dC1ydGwuaHRtbCBbIEltYWdlT25seUZhaWx1cmUg
XQogZmFzdC90ZXh0L2Vtb2ppLW92ZXJsYXAuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQotZmFz
dC90ZXh0L2Vtb2ppLXNpbmdsZS1wYXJlbnQtZmFtaWx5LTIuaHRtbCBbIEltYWdlT25seUZhaWx1
cmUgXQotZmFzdC90ZXh0L2Vtb2ppLXNpbmdsZS1wYXJlbnQtZmFtaWx5Lmh0bWwgWyBJbWFnZU9u
bHlGYWlsdXJlIF0KIGZhc3QvdGV4dC9lbW9qaS12YXJpYXRpb24tc2VsZWN0b3IuaHRtbCBbIElt
YWdlT25seUZhaWx1cmUgXQogZmFzdC90ZXh0L2Vtb2ppLXdpdGgtam9pbmVyLmh0bWwgWyBGYWls
dXJlIF0KIGZhc3QvdGV4dC9lbW9qaS5odG1sIFsgRmFpbHVyZSBdCiBmYXN0L3RleHQvZW1waGFz
aXMtb3ZlcmxhcC5odG1sIFsgRmFpbHVyZSBdCiBmYXN0L3RleHQvZmFsbGJhY2stbGFuZ3VhZ2Ut
aGFuLTIuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQogZmFzdC90ZXh0L2ZhbGxiYWNrLXRyYWl0
cy1maXh1cC5odG1sIFsgRmFpbHVyZSBdCi1mYXN0L3RleHQvZml0enBhdHJpY2stY29tYmluYXRp
b24uaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQogZmFzdC90ZXh0L2ZvbnQtY3Vyc2l2ZS1pdGFs
aWMtY2prLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KIGZhc3QvdGV4dC9mb250LWtlcm5pbmcu
aHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQogZmFzdC90ZXh0L2ZvbnQtbG9hZC1kYXRhLXBhcnRp
dGlvbmVkLWFscGhhYmV0Lmh0bWwgWyBGYWlsdXJlIF0KQEAgLTE3NTcsNyArMTc1Niw2IEBAIGZh
c3QvdGV4dC9qdXN0aWZ5LWlkZW9ncmFwaC1jb21wbGV4Lmh0bWwgWyBGYWlsdXJlIF0KIGZhc3Qv
dGV4dC9qdXN0aWZ5LWlkZW9ncmFwaC1zaW1wbGUuaHRtbCBbIEZhaWx1cmUgXQogZmFzdC90ZXh0
L2p1c3RpZnktaWRlb2dyYXBoLXZlcnRpY2FsLmh0bWwgWyBGYWlsdXJlIF0KIGZhc3QvdGV4dC9q
dXN0aWZ5LW5ic3AuaHRtbCBbIEZhaWx1cmUgXQotZmFzdC90ZXh0L2tlcm5pbmctd2l0aC1UZXh0
TGF5b3V0Lmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KIGZhc3QvdGV4dC9raG1lci1sYW8tZm9u
dC5odG1sIFsgRmFpbHVyZSBdCiBmYXN0L3RleHQvbGluZS1icmVhay1iZXR3ZWVuLXRleHQtbm9k
ZXMtbGF0aW4xLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KIGZhc3QvdGV4dC9saW5lLWJyZWFr
LWJldHdlZW4tdGV4dC1ub2Rlcy5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCkBAIC0xNzg1LDcg
KzE3ODMsNiBAQCBmYXN0L3RleHQvc21hbGwtbGluZS1oZWlnaHQuaHRtbCBbIEltYWdlT25seUZh
aWx1cmUgXQogZmFzdC90ZXh0L3NvZnQtaHlwaGVuLWFzLWZpcnN0LWJyZWFraW5nLW9wcG9ydHVu
aXR5Lmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KIGZhc3QvdGV4dC9zb2Z0LWh5cGhlbi1taW4t
cHJlZmVycmVkLXdpZHRoLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KIGZhc3QvdGV4dC9zcGFj
ZS13aWR0aC5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCi1mYXN0L3RleHQvc3RhbGUtVGV4dExh
eW91dC1mcm9tLWZpcnN0LWxpbmUuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQogZmFzdC90ZXh0
L3N2Zy1mb250LWZhY2Utd2l0aC1rZXJuaW5nLmh0bWwgWyBGYWlsdXJlIF0KIGZhc3QvdGV4dC9z
eW50aGV0aWMtYm9sZC10cmFuc2Zvcm1lZC5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCiBmYXN0
L3RleHQvc3lzdGVtLWZvbnQtZmFsbGJhY2stZW1vamkuaHRtbCBbIEZhaWx1cmUgXQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>387303</attachid>
            <date>2020-01-09 18:28:19 -0800</date>
            <delta_ts>2020-01-09 18:28:19 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-204884-20200110112816.patch</filename>
            <type>text/plain</type>
            <size>56382</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0MzE4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjAyNjQzYjFlMWI3MTZk
Mjg1ZDJkMjMyNjdjZjVjYTI2NTVjMzcwNy4uZWY4YjA5ZjJmYTNkMjY0NTk4MGY1ODZkZTdmYjUx
MWI4NmFkZmY3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDIwLTAxLTA5ICBGdWpp
aSBIaXJvbm9yaSAgPEhpcm9ub3JpLkZ1amlpQHNvbnkuY29tPgorCisgICAgICAgIFtXaW5dIFVz
ZSBDb21wbGV4VGV4dENvbnRyb2xsZXIgaW5zdGVhZCBvZiBVbmlzY3JpYmVDb250cm9sbGVyCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQ4ODQKKwor
ICAgICAgICBSZXZpZXdlZCBieSBCcmVudCBGdWxnaGFtLgorCisgICAgICAgIFVuaXNjcmliZUNv
bnRyb2xsZXIgZG9lc24ndCBzdXBwb3J0IHN1cnJvZ2F0ZSBwYWlycyBhbmQgaGFzCisgICAgICAg
IHJlbmRlcmluZyBnbGl0Y2hlcyBvZiBwYXJ0aWFsbHkgc2VsZWN0ZWQgYSBjb21iaW5pbmcgY2hh
cmFjdGVyLgorCisgICAgICAgIFJlbW92ZSBVbmlzY3JpYmVDb250cm9sbGVyLCBhbmQgdXNlIENv
bXBsZXhUZXh0Q29udHJvbGxlciBieQorICAgICAgICBpbXBsZW1lbnRpbmcgYGNvbGxlY3RDb21w
bGV4VGV4dFJ1bnNGb3JDaGFyYWN0ZXJzYCB3aXRoIFVuaXNjcmliZS4KKworICAgICAgICBDb3Zl
cmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogUGxhdGZvcm1XaW4uY21ha2U6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29tcGxleFRleHRDb250cm9sbGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbXBsZXhUZXh0Q29udHJvbGxlcjo6Y29sbGVjdENvbXBsZXhUZXh0
UnVuc0ZvckNoYXJhY3RlcnMpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0ZvbnRDYXNjYWRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjp3aWR0aE9m
VGV4dFJhbmdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpnZXRHbHlw
aHNBbmRBZHZhbmNlc0ZvckNvbXBsZXhUZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZv
bnRDYXNjYWRlOjpkcmF3R2x5cGhCdWZmZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dENhc2NhZGU6OmZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpGb250Q2FzY2FkZTo6YWRqdXN0U2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpvZmZzZXRGb3JQb3NpdGlvbkZvckNv
bXBsZXhUZXh0IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vQ29tcGxl
eFRleHRDb250cm9sbGVyVW5pc2NyaWJlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpz
aGFwZUJ5VW5pc2NyaWJlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBsZXhUZXh0Q29udHJvbGxl
cjo6Y29sbGVjdENvbXBsZXhUZXh0UnVuc0ZvckNoYXJhY3RlcnMpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3dpbi9Gb250Q0dXaW4uY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3dpbi9Gb250Q2FzY2FkZURpcmVjdDJELmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vRm9udFdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6YWRq
dXN0U2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvckNvbXBsZXhUZXh0
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpmbG9hdFdp
ZHRoRm9yQ29tcGxleFRleHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dENhc2NhZGU6Om9mZnNldEZvclBvc2l0aW9uRm9yQ29tcGxleFRleHQgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9VbmlzY3JpYmVDb250cm9sbGVyLmNw
cDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vVW5pc2NyaWJlQ29u
dHJvbGxlci5oOiBSZW1vdmVkLgorCiAyMDIwLTAxLTA5ICBXZW5zb24gSHNpZWggIDx3ZW5zb25f
aHNpZWhAYXBwbGUuY29tPgogCiAgICAgICAgIFRleHQgbWFuaXB1bGF0aW9uIGNvbnRyb2xsZXIg
c2hvdWxkIG5vdCBvYnNlcnZlIGNoYW5nZXMgaW4gbmV3IHJlcGxhY2VtZW50IGVsZW1lbnRzCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbi5jbWFrZSBiL1NvdXJjZS9XZWJD
b3JlL1BsYXRmb3JtV2luLmNtYWtlCmluZGV4IDI1MGEwYjM1YzA0MDJmNjc5ZGFlNDliNGEyMGM1
YmExOWQ2NWZlYjguLjRmMzA3MTU5YjdlZDgwNmViODE5NTJiYmE0NWY1YzA3YThkYzkzZWIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luLmNtYWtlCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1BsYXRmb3JtV2luLmNtYWtlCkBAIC01MCw2ICs1MCw3IEBAIGxpc3QoQVBQRU5EIFdl
YkNvcmVfU09VUkNFUwogCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbG9yRGlyZWN0MkQu
Y3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbXBsZXhUZXh0Q29udHJvbGxlckRpcmVj
dFdyaXRlLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db21wbGV4VGV4dENvbnRyb2xs
ZXJVbmlzY3JpYmUuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RJQlBpeGVsRGF0YS5j
cHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRmxvYXRQb2ludERpcmVjdDJELmNwcAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9GbG9hdFJlY3REaXJlY3QyRC5jcHAKQEAgLTY4LDcgKzY5
LDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL1NpbXBsZUZvbnREYXRhV2luLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9UcmFu
c2Zvcm1hdGlvbk1hdHJpeERpcmVjdDJELmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9U
cmFuc2Zvcm1hdGlvbk1hdHJpeFdpbi5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vVW5p
c2NyaWJlQ29udHJvbGxlci5jcHAKIAogICAgIHBsYXRmb3JtL25ldHdvcmsvd2luL0Rvd25sb2Fk
QnVuZGxlV2luLmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvd2luL05ldHdvcmtTdGF0ZU5vdGlm
aWVyV2luLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Q29tcGxleFRleHRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAKaW5kZXggODM0N2M5ZmIwYzI4YTk3NjA3NDhj
MTIzNGUwNDlkYzQwMjNkNjU0Ny4uMmQ4NTQzODQ0NDAyZGFhOWQ0MDBkOWVjYTkxZmExM2M0MGJm
ODlkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29tcGxl
eFRleHRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwCkBAIC00MywzMyArNDMsNiBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLSNpZiBQTEFURk9STShXSU4pICYmICFVU0UoRElSRUNUMkQpCi0KLWNs
YXNzIFRleHRMYXlvdXQgewotfTsKLQotdm9pZCBUZXh0TGF5b3V0RGVsZXRlcjo6b3BlcmF0b3Io
KShUZXh0TGF5b3V0KikgY29uc3QKLXsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPFRleHRMYXlvdXQs
IFRleHRMYXlvdXREZWxldGVyPiBGb250Q2FzY2FkZTo6Y3JlYXRlTGF5b3V0KFJlbmRlclRleHQm
LCBmbG9hdCwgYm9vbCkgY29uc3QKLXsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotZmxvYXQg
Rm9udENhc2NhZGU6OndpZHRoKFRleHRMYXlvdXQmLCB1bnNpZ25lZCwgdW5zaWduZWQsIEhhc2hT
ZXQ8Y29uc3QgRm9udCo+KikKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1
cm4gMDsKLX0KLQotdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmNvbGxlY3RDb21wbGV4VGV4
dFJ1bnNGb3JDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQsIHVuc2lnbmVkLCBjb25z
dCBGb250KikKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotI2Vsc2UKLQogY2xh
c3MgVGV4dExheW91dCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CkBA
IC05MDYsNiArODc5LDQgQEAgQ29tcGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4dFJ1bjo6
Q29tcGxleFRleHRSdW4oY29uc3QgVmVjdG9yPEZsb2F0U2l6ZT4mIGEKIHsKIH0KIAotI2VuZGlm
Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcAppbmRleCAxYTZmNzNhODIzOTZlNDAxZDk0MzdmZWE2
MDNjOTBiNmI1MGRjNWY5Li44MzA4ZjJiMjAyYWMyNDg5NzhiZWRjZTlmMTk3YzExZGE2MmQwNmUy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2Fk
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUu
Y3BwCkBAIC00MSwxMCArNDEsNiBAQAogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmdIYXNo
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCi0jaWYgUExBVEZPUk0o
V0lOKSAmJiAhVVNFKERJUkVDVDJEKQotI2luY2x1ZGUgIlVuaXNjcmliZUNvbnRyb2xsZXIuaCIK
LSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBXVEY6OlVu
aWNvZGU7CkBAIC0zNTAsMTUgKzM0Niw2IEBAIGZsb2F0IEZvbnRDYXNjYWRlOjp3aWR0aE9mVGV4
dFJhbmdlKGNvbnN0IFRleHRSdW4mIHJ1biwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQKIAogICAg
IGF1dG8gY29kZVBhdGhUb1VzZSA9IGNvZGVQYXRoKHJ1bik7CiAgICAgaWYgKGNvZGVQYXRoVG9V
c2UgPT0gQ29tcGxleCkgewotI2lmIFBMQVRGT1JNKFdJTikgJiYgIVVTRShESVJFQ1QyRCkKLSAg
ICAgICAgVW5pc2NyaWJlQ29udHJvbGxlciBpdCh0aGlzLCBydW4pOwotICAgICAgICBpdC5hZHZh
bmNlKGZyb20pOwotICAgICAgICBvZmZzZXRCZWZvcmVSYW5nZSA9IGl0LnJ1bldpZHRoU29GYXIo
KTsKLSAgICAgICAgaXQuYWR2YW5jZSh0byk7Ci0gICAgICAgIG9mZnNldEFmdGVyUmFuZ2UgPSBp
dC5ydW5XaWR0aFNvRmFyKCk7Ci0gICAgICAgIGl0LmFkdmFuY2UodG8pOwotICAgICAgICB0b3Rh
bFdpZHRoID0gaXQucnVuV2lkdGhTb0ZhcigpOwotI2Vsc2UKICAgICAgICAgQ29tcGxleFRleHRD
b250cm9sbGVyIGNvbXBsZXhJdGVyYXRvcigqdGhpcywgcnVuLCBmYWxzZSwgZmFsbGJhY2tGb250
cyk7CiAgICAgICAgIGNvbXBsZXhJdGVyYXRvci5hZHZhbmNlKGZyb20sIG51bGxwdHIsIEluY2x1
ZGVQYXJ0aWFsR2x5cGhzLCBmYWxsYmFja0ZvbnRzKTsKICAgICAgICAgb2Zmc2V0QmVmb3JlUmFu
Z2UgPSBjb21wbGV4SXRlcmF0b3IucnVuV2lkdGhTb0ZhcigpOwpAQCAtMzY2LDcgKzM1Myw2IEBA
IGZsb2F0IEZvbnRDYXNjYWRlOjp3aWR0aE9mVGV4dFJhbmdlKGNvbnN0IFRleHRSdW4mIHJ1biwg
dW5zaWduZWQgZnJvbSwgdW5zaWduZWQKICAgICAgICAgb2Zmc2V0QWZ0ZXJSYW5nZSA9IGNvbXBs
ZXhJdGVyYXRvci5ydW5XaWR0aFNvRmFyKCk7CiAgICAgICAgIGNvbXBsZXhJdGVyYXRvci5hZHZh
bmNlKHJ1bi5sZW5ndGgoKSwgbnVsbHB0ciwgSW5jbHVkZVBhcnRpYWxHbHlwaHMsIGZhbGxiYWNr
Rm9udHMpOwogICAgICAgICB0b3RhbFdpZHRoID0gY29tcGxleEl0ZXJhdG9yLnJ1bldpZHRoU29G
YXIoKTsKLSNlbmRpZgogICAgIH0gZWxzZSB7CiAgICAgICAgIFdpZHRoSXRlcmF0b3Igc2ltcGxl
SXRlcmF0b3IodGhpcywgcnVuLCBmYWxsYmFja0ZvbnRzKTsKICAgICAgICAgc2ltcGxlSXRlcmF0
b3IuYWR2YW5jZShmcm9tLCBudWxscHRyKTsKQEAgLTEzOTcsNyArMTM4Myw2IEBAIGZsb2F0IEZv
bnRDYXNjYWRlOjpnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1
biYgcnVuLCB1bnNpZ25lCiAgICAgcmV0dXJuIGluaXRpYWxBZHZhbmNlOwogfQogCi0jaWYgIVBM
QVRGT1JNKFdJTikgfHwgVVNFKERJUkVDVDJEKQogZmxvYXQgRm9udENhc2NhZGU6OmdldEdseXBo
c0FuZEFkdmFuY2VzRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCB1bnNpZ25lZCBm
cm9tLCB1bnNpZ25lZCB0bywgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBGb3JUZXh0RW1waGFz
aXNPck5vdCBmb3JUZXh0RW1waGFzaXMpIGNvbnN0CiB7CiAgICAgZmxvYXQgaW5pdGlhbEFkdmFu
Y2U7CkBAIC0xNDI3LDcgKzE0MTIsNiBAQCBmbG9hdCBGb250Q2FzY2FkZTo6Z2V0R2x5cGhzQW5k
QWR2YW5jZXNGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIHVuc2lnbgogCiAgICAg
cmV0dXJuIGluaXRpYWxBZHZhbmNlOwogfQotI2VuZGlmCiAKIHZvaWQgRm9udENhc2NhZGU6OmRy
YXdFbXBoYXNpc01hcmtzRm9yU2ltcGxlVGV4dChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNv
bnN0IFRleHRSdW4mIHJ1biwgY29uc3QgQXRvbVN0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvKSBjb25zdAogewpAQCAtMTQ1Miwx
MyArMTQzNiw3IEBAIHZvaWQgRm9udENhc2NhZGU6OmRyYXdHbHlwaEJ1ZmZlcihHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIGNvbnN0IEdseXBoQnVmZmVyJiBnCiB7CiAgICAgLy8gRHJhdyBlYWNo
IGNvbnRpZ3VvdXMgcnVuIG9mIGdseXBocyB0aGF0IHVzZSB0aGUgc2FtZSBmb250IGRhdGEuCiAg
ICAgY29uc3QgRm9udCogZm9udERhdGEgPSBnbHlwaEJ1ZmZlci5mb250QXQoMCk7Ci0jaWYgUExB
VEZPUk0oV0lOKQotICAgIEZsb2F0UG9pbnQgc3RhcnRQb2ludChwb2ludC54KCkgKyBnbHlwaEJ1
ZmZlci5pbml0aWFsQWR2YW5jZSgpLndpZHRoKCksIHBvaW50LnkoKSArIGdseXBoQnVmZmVyLmlu
aXRpYWxBZHZhbmNlKCkuaGVpZ2h0KCkpOwotI2Vsc2UKLSAgICAvLyBGSVhNRTogV2h5IGRvIHdl
IHN1YnRyYWN0IHRoZSBpbml0aWFsIGFkdmFuY2UncyBoZWlnaHQgYnV0IG5vdCBpdHMgd2lkdGg/
Pz8KLSAgICAvLyBXZSBzaG91bGQgdXNlIHRoZSBsaW5lIGFib3ZlIGZyb20gV2luZG93cyBpbnN0
ZWFkLgogICAgIEZsb2F0UG9pbnQgc3RhcnRQb2ludChwb2ludC54KCksIHBvaW50LnkoKSAtIGds
eXBoQnVmZmVyLmluaXRpYWxBZHZhbmNlKCkuaGVpZ2h0KCkpOwotI2VuZGlmCiAgICAgZmxvYXQg
bmV4dFggPSBzdGFydFBvaW50LngoKSArIGdseXBoQnVmZmVyLmFkdmFuY2VBdCgwKS53aWR0aCgp
OwogICAgIGZsb2F0IG5leHRZID0gc3RhcnRQb2ludC55KCkgKyBnbHlwaEJ1ZmZlci5hZHZhbmNl
QXQoMCkuaGVpZ2h0KCk7CiAgICAgdW5zaWduZWQgbGFzdEZyb20gPSAwOwpAQCAtMTU0NSw3ICsx
NTIzLDYgQEAgZmxvYXQgRm9udENhc2NhZGU6OmZsb2F0V2lkdGhGb3JTaW1wbGVUZXh0KGNvbnN0
IFRleHRSdW4mIHJ1biwgSGFzaFNldDxjb25zdCBGb24KICAgICByZXR1cm4gaXQubV9ydW5XaWR0
aFNvRmFyOwogfQogCi0jaWYgIVBMQVRGT1JNKFdJTikgfHwgVVNFKERJUkVDVDJEKQogZmxvYXQg
Rm9udENhc2NhZGU6OmZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4s
IEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlw
aE92ZXJmbG93KSBjb25zdAogewogICAgIENvbXBsZXhUZXh0Q29udHJvbGxlciBjb250cm9sbGVy
KCp0aGlzLCBydW4sIHRydWUsIGZhbGxiYWNrRm9udHMpOwpAQCAtMTU1Nyw3ICsxNTM0LDYgQEAg
ZmxvYXQgRm9udENhc2NhZGU6OmZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVu
JiBydW4sIEhhc2hTZXQ8Y29uc3QgRm8KICAgICB9CiAgICAgcmV0dXJuIGNvbnRyb2xsZXIudG90
YWxXaWR0aCgpOwogfQotI2VuZGlmCiAKIHZvaWQgRm9udENhc2NhZGU6OmFkanVzdFNlbGVjdGlv
blJlY3RGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgTGF5b3V0UmVjdCYgc2VsZWN0
aW9uUmVjdCwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8pIGNvbnN0CiB7CkBAIC0xNTc4LDcg
KzE1NTQsNiBAQCB2b2lkIEZvbnRDYXNjYWRlOjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9yU2ltcGxl
VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIExheW91dFJlYwogICAgIHNlbGVjdGlvblJlY3Quc2V0
V2lkdGgoTGF5b3V0VW5pdDo6ZnJvbUZsb2F0Q2VpbChhZnRlcldpZHRoIC0gYmVmb3JlV2lkdGgp
KTsKIH0KIAotI2lmICFQTEFURk9STShXSU4pIHx8IFVTRShESVJFQ1QyRCkKIHZvaWQgRm9udENh
c2NhZGU6OmFkanVzdFNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBy
dW4sIExheW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRv
KSBjb25zdAogewogICAgIENvbXBsZXhUZXh0Q29udHJvbGxlciBjb250cm9sbGVyKCp0aGlzLCBy
dW4pOwpAQCAtMTU5Myw3ICsxNTY4LDYgQEAgdm9pZCBGb250Q2FzY2FkZTo6YWRqdXN0U2VsZWN0
aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgTGF5b3V0UmUKICAgICAg
ICAgc2VsZWN0aW9uUmVjdC5tb3ZlKGJlZm9yZVdpZHRoLCAwKTsKICAgICBzZWxlY3Rpb25SZWN0
LnNldFdpZHRoKExheW91dFVuaXQ6OmZyb21GbG9hdENlaWwoYWZ0ZXJXaWR0aCAtIGJlZm9yZVdp
ZHRoKSk7CiB9Ci0jZW5kaWYKIAogaW50IEZvbnRDYXNjYWRlOjpvZmZzZXRGb3JQb3NpdGlvbkZv
clNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBmbG9hdCB4LCBib29sIGluY2x1ZGVQYXJ0
aWFsR2x5cGhzKSBjb25zdAogewpAQCAtMTYzOCwxMyArMTYxMiwxMSBAQCBpbnQgRm9udENhc2Nh
ZGU6Om9mZnNldEZvclBvc2l0aW9uRm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGZs
b2F0IHgsIGJvbwogICAgIHJldHVybiBvZmZzZXQ7CiB9CiAKLSNpZiAhUExBVEZPUk0oV0lOKSB8
fCBVU0UoRElSRUNUMkQpCiBpbnQgRm9udENhc2NhZGU6Om9mZnNldEZvclBvc2l0aW9uRm9yQ29t
cGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBmbG9hdCB4LCBib29sIGluY2x1ZGVQYXJ0aWFs
R2x5cGhzKSBjb25zdAogewogICAgIENvbXBsZXhUZXh0Q29udHJvbGxlciBjb250cm9sbGVyKCp0
aGlzLCBydW4pOwogICAgIHJldHVybiBjb250cm9sbGVyLm9mZnNldEZvclBvc2l0aW9uKHgsIGlu
Y2x1ZGVQYXJ0aWFsR2x5cGhzKTsKIH0KLSNlbmRpZgogCiAjaWYgIVBMQVRGT1JNKENPQ09BKSAm
JiAhVVNFKEhBUkZCVVpaKQogLy8gRklYTUU6IFVuaWZ5IHRoaXMgd2l0aCB0aGUgbWFjT1MgYW5k
IGlPUyBpbXBsZW1lbnRhdGlvbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9Db21wbGV4VGV4dENvbnRyb2xsZXJVbmlzY3JpYmUuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbXBsZXhUZXh0Q29udHJvbGxlclVuaXNj
cmliZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNDY4ZjY3ZGZjMzY0Y2VhMTM2ODEzOTA5OTgyMWRmZWIzNDFm
MDZkNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9Db21wbGV4VGV4dENvbnRyb2xsZXJVbmlzY3JpYmUuY3BwCkBAIC0wLDAgKzEsMTg5IEBA
CisvKgorKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyogYXJlIG1ldDoKKyogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisqIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisqIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNvbXBsZXhUZXh0Q29udHJvbGxlci5oIgorCisjaWYg
IVVTRShESVJFQ1QyRCkKKworI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgorI2luY2x1ZGUgIkZvbnRD
YXNjYWRlLmgiCisjaW5jbHVkZSAiSFduZERDLmgiCisjaW5jbHVkZSA8dXNwMTAuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgYm9vbCBzaGFwZUJ5VW5pc2NyaWJlKGNvbnN0IFVD
aGFyKiBzdHIsIGludCBsZW4sIFNDUklQVF9JVEVNIGl0ZW0sIGNvbnN0IEZvbnQqIGZvbnREYXRh
LAorICAgIFZlY3RvcjxXT1JEPiYgZ2x5cGhzLCBWZWN0b3I8V09SRD4mIGNsdXN0ZXJzLAorICAg
IFZlY3RvcjxTQ1JJUFRfVklTQVRUUj4mIHZpc3VhbEF0dHJpYnV0ZXMpCit7CisgICAgSFduZERD
IGhkYzsKKyAgICBIR0RJT0JKIG9sZEZvbnQgPSBudWxscHRyOworICAgIEhSRVNVTFQgc2hhcGVS
ZXN1bHQgPSBFX1BFTkRJTkc7CisgICAgaW50IGdseXBoQ291bnQgPSAwOworCisgICAgaWYgKCFm
b250RGF0YSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZG8geworICAgICAgICBzaGFw
ZVJlc3VsdCA9IFNjcmlwdFNoYXBlKGhkYywgZm9udERhdGEtPnNjcmlwdENhY2hlKCksIHdjaGFy
RnJvbShzdHIpLCBsZW4sIGdseXBocy5zaXplKCksICZpdGVtLmEsCisgICAgICAgICAgICBnbHlw
aHMuZGF0YSgpLCBjbHVzdGVycy5kYXRhKCksIHZpc3VhbEF0dHJpYnV0ZXMuZGF0YSgpLCAmZ2x5
cGhDb3VudCk7CisgICAgICAgIGlmIChzaGFwZVJlc3VsdCA9PSBFX1BFTkRJTkcpIHsKKyAgICAg
ICAgICAgIC8vIFRoZSBzY3JpcHQgY2FjaGUgaXNuJ3QgcHJpbWVkIHdpdGggZW5vdWdoIGluZm8g
eWV0LiBXZSBuZWVkIHRvIHNlbGVjdCBvdXIgSEZPTlQgaW50bworICAgICAgICAgICAgLy8gYSBE
QyBhbmQgcGFzcyB0aGUgREMgaW4gdG8gU2NyaXB0U2hhcGUuCisgICAgICAgICAgICBBU1NFUlQo
IWhkYyk7CisgICAgICAgICAgICBoZGMuc2V0SFduZChudWxscHRyKTsKKyAgICAgICAgICAgIEhG
T05UIGhmb250ID0gZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLmhmb250KCk7CisgICAgICAgICAg
ICBvbGRGb250ID0gU2VsZWN0T2JqZWN0KGhkYywgaGZvbnQpOworICAgICAgICB9IGVsc2UgaWYg
KHNoYXBlUmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpIHsKKyAgICAgICAgICAgIC8vIE5lZWQgdG8g
cmVzaXplIG91ciBidWZmZXJzLgorICAgICAgICAgICAgZ2x5cGhzLnJlc2l6ZShnbHlwaHMuc2l6
ZSgpICogMik7CisgICAgICAgICAgICB2aXN1YWxBdHRyaWJ1dGVzLnJlc2l6ZShnbHlwaHMuc2l6
ZSgpKTsKKyAgICAgICAgfQorICAgIH0gd2hpbGUgKHNoYXBlUmVzdWx0ID09IEVfUEVORElORyB8
fCBzaGFwZVJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKKworICAgIGlmIChoZGMpCisgICAgICAg
IFNlbGVjdE9iamVjdChoZGMsIG9sZEZvbnQpOworCisgICAgaWYgKEZBSUxFRChzaGFwZVJlc3Vs
dCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGdseXBocy5zaHJpbmsoZ2x5cGhDb3Vu
dCk7CisgICAgdmlzdWFsQXR0cmlidXRlcy5zaHJpbmsoZ2x5cGhDb3VudCk7CisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKwordm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmNvbGxlY3RDb21wbGV4
VGV4dFJ1bnNGb3JDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiBjcCwgdW5zaWduZWQgc3RyaW5nTGVu
Z3RoLCB1bnNpZ25lZCBzdHJpbmdMb2NhdGlvbiwgY29uc3QgRm9udCogZm9udCkKK3sKKyAgICBp
ZiAoIWZvbnQpIHsKKyAgICAgICAgLy8gQ3JlYXRlIGEgcnVuIG9mIG1pc3NpbmcgZ2x5cGhzIGZy
b20gdGhlIHByaW1hcnkgZm9udC4KKyAgICAgICAgbV9jb21wbGV4VGV4dFJ1bnMuYXBwZW5kKENv
bXBsZXhUZXh0UnVuOjpjcmVhdGUobV9mb250LnByaW1hcnlGb250KCksIGNwLCBzdHJpbmdMb2Nh
dGlvbiwgc3RyaW5nTGVuZ3RoLCAwLCBzdHJpbmdMZW5ndGgsIG1fcnVuLmx0cigpKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBWZWN0b3I8U0NSSVBUX0lURU0+IGl0ZW1zKDYpOwor
ICAgIGludCBudW1JdGVtcyA9IDA7CisgICAgZm9yICg7OykgeworICAgICAgICBTQ1JJUFRfQ09O
VFJPTCBjb250cm9sIHsgfTsKKyAgICAgICAgU0NSSVBUX1NUQVRFIHN0YXRlIHsgfTsKKyAgICAg
ICAgLy8gU2V0IHVwIHRoZSBjb3JyZWN0IGRpcmVjdGlvbiBmb3IgdGhlIHJ1bi4KKyAgICAgICAg
c3RhdGUudUJpZGlMZXZlbCA9IG1fcnVuLnJ0bCgpOworICAgICAgICAvLyBMb2NrIHRoZSBjb3Jy
ZWN0IGRpcmVjdGlvbmFsIG92ZXJyaWRlLgorICAgICAgICBzdGF0ZS5mT3ZlcnJpZGVEaXJlY3Rp
b24gPSBtX3J1bi5kaXJlY3Rpb25hbE92ZXJyaWRlKCk7CisKKyAgICAgICAgLy8gU2NyaXB0SXRl
bWl6ZSBtYXkgd3JpdGUgKGNNYXhJdGVtcyArIDEpIFNDUklQVF9JVEVNLgorICAgICAgICBIUkVT
VUxUIGhyID0gU2NyaXB0SXRlbWl6ZSh3Y2hhckZyb20oY3ApLCBzdHJpbmdMZW5ndGgsIGl0ZW1z
LnNpemUoKSAtIDEsICZjb250cm9sLCAmc3RhdGUsIGl0ZW1zLmRhdGEoKSwgJm51bUl0ZW1zKTsK
KyAgICAgICAgaWYgKGhyICE9IEVfT1VUT0ZNRU1PUlkpIHsKKyAgICAgICAgICAgIEFTU0VSVChT
VUNDRUVERUQoaHIpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGl0
ZW1zLnJlc2l6ZShpdGVtcy5zaXplKCkgKiAyKTsKKyAgICB9CisgICAgaXRlbXMucmVzaXplKG51
bUl0ZW1zICsgMSk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUl0ZW1zOyBpKyspIHsK
KyAgICAgICAgLy8gRGV0ZXJtaW5lIHRoZSBzdHJpbmcgZm9yIHRoaXMgaXRlbS4KKyAgICAgICAg
Y29uc3QgVUNoYXIqIHN0ciA9IGNwICsgaXRlbXNbaV0uaUNoYXJQb3M7CisgICAgICAgIGludCBs
ZW5ndGggPSBpdGVtc1tpKzFdLmlDaGFyUG9zIC0gaXRlbXNbaV0uaUNoYXJQb3M7CisgICAgICAg
IFNDUklQVF9JVEVNJiBpdGVtID0gaXRlbXNbaV07CisKKyAgICAgICAgLy8gU2V0IHVwIGJ1ZmZl
cnMgdG8gaG9sZCB0aGUgcmVzdWx0cyBvZiBzaGFwaW5nIHRoZSBpdGVtLgorICAgICAgICBWZWN0
b3I8V09SRD4gZ2x5cGhzOworICAgICAgICBWZWN0b3I8V09SRD4gY2x1c3RlcnM7CisgICAgICAg
IFZlY3RvcjxTQ1JJUFRfVklTQVRUUj4gdmlzdWFsQXR0cmlidXRlczsKKyAgICAgICAgY2x1c3Rl
cnMucmVzaXplKGxlbmd0aCk7CisKKyAgICAgICAgLy8gU2hhcGUgdGhlIGl0ZW0uCisgICAgICAg
IC8vIFRoZSByZWNvbW1lbmRlZCBzaXplIGZvciB0aGUgZ2x5cGggYnVmZmVyIGlzIDEuNSAqIHRo
ZSBjaGFyYWN0ZXIgbGVuZ3RoICsgMTYgaW4gdGhlIHVuaXNjcmliZSBkb2NzLgorICAgICAgICAv
LyBBcHBhcmVudGx5IHRoaXMgaXMgYSBnb29kIHNpemUgdG8gYXZvaWQgaGF2aW5nIHRvIG1ha2Ug
cmVwZWF0ZWQgY2FsbHMgdG8gU2NyaXB0U2hhcGUuCisgICAgICAgIGdseXBocy5yZXNpemUoMS41
ICogbGVuZ3RoICsgMTYpOworICAgICAgICB2aXN1YWxBdHRyaWJ1dGVzLnJlc2l6ZShnbHlwaHMu
c2l6ZSgpKTsKKworICAgICAgICBpZiAoIXNoYXBlQnlVbmlzY3JpYmUoc3RyLCBsZW5ndGgsIGl0
ZW0sIGZvbnQsIGdseXBocywgY2x1c3RlcnMsIHZpc3VhbEF0dHJpYnV0ZXMpKQorICAgICAgICAg
ICAgY29udGludWU7CisKKyAgICAgICAgLy8gV2Ugbm93IGhhdmUgYSBjb2xsZWN0aW9uIG9mIGds
eXBocy4KKyAgICAgICAgVmVjdG9yPEdPRkZTRVQ+IG9mZnNldHM7CisgICAgICAgIFZlY3Rvcjxp
bnQ+IGFkdmFuY2VzOworICAgICAgICBvZmZzZXRzLnJlc2l6ZShnbHlwaHMuc2l6ZSgpKTsKKyAg
ICAgICAgYWR2YW5jZXMucmVzaXplKGdseXBocy5zaXplKCkpOworICAgICAgICBIUkVTVUxUIHBs
YWNlUmVzdWx0ID0gU2NyaXB0UGxhY2UoMCwgZm9udC0+c2NyaXB0Q2FjaGUoKSwgZ2x5cGhzLmRh
dGEoKSwgZ2x5cGhzLnNpemUoKSwgdmlzdWFsQXR0cmlidXRlcy5kYXRhKCksCisgICAgICAgICAg
ICAmaXRlbS5hLCBhZHZhbmNlcy5kYXRhKCksIG9mZnNldHMuZGF0YSgpLCAwKTsKKyAgICAgICAg
aWYgKHBsYWNlUmVzdWx0ID09IEVfUEVORElORykgeworICAgICAgICAgICAgLy8gVGhlIHNjcmlw
dCBjYWNoZSBpc24ndCBwcmltZWQgd2l0aCBlbm91Z2ggaW5mbyB5ZXQuIFdlIG5lZWQgdG8gc2Vs
ZWN0IG91ciBIRk9OVCBpbnRvCisgICAgICAgICAgICAvLyBhIERDIGFuZCBwYXNzIHRoZSBEQyBp
biB0byBTY3JpcHRQbGFjZS4KKyAgICAgICAgICAgIEhXbmREQyBoZGMoMCk7CisgICAgICAgICAg
ICBIRk9OVCBoZm9udCA9IGZvbnQtPnBsYXRmb3JtRGF0YSgpLmhmb250KCk7CisgICAgICAgICAg
ICBIR0RJT0JKIG9sZEZvbnQgPSBTZWxlY3RPYmplY3QoaGRjLCBoZm9udCk7CisgICAgICAgICAg
ICBwbGFjZVJlc3VsdCA9IFNjcmlwdFBsYWNlKGhkYywgZm9udC0+c2NyaXB0Q2FjaGUoKSwgZ2x5
cGhzLmRhdGEoKSwgZ2x5cGhzLnNpemUoKSwgdmlzdWFsQXR0cmlidXRlcy5kYXRhKCksCisgICAg
ICAgICAgICAgICAgJml0ZW0uYSwgYWR2YW5jZXMuZGF0YSgpLCBvZmZzZXRzLmRhdGEoKSwgMCk7
CisgICAgICAgICAgICBTZWxlY3RPYmplY3QoaGRjLCBvbGRGb250KTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChGQUlMRUQocGxhY2VSZXN1bHQpIHx8IGdseXBocy5pc0VtcHR5KCkpCisgICAg
ICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAobV9mYWxsYmFja0ZvbnRzKQorICAgICAg
ICAgICAgbV9mYWxsYmFja0ZvbnRzLT5hZGQoZm9udCk7CisKKyAgICAgICAgVmVjdG9yPHVuc2ln
bmVkPiBzdHJpbmdJbmRpY2VzKGdseXBocy5zaXplKCksIGl0ZW0uaUNoYXJQb3MpOworCisgICAg
ICAgIGZvciAoaW50IGsgPSBsZW5ndGggLSAxOyBrID49IDA7IGstLSkKKyAgICAgICAgICAgIHN0
cmluZ0luZGljZXNbY2x1c3RlcnNba11dID0gaXRlbS5pQ2hhclBvcyArIGs7CisKKyAgICAgICAg
VmVjdG9yPEZsb2F0U2l6ZT4gYmFzZUFkdmFuY2VzOworICAgICAgICBWZWN0b3I8RmxvYXRQb2lu
dD4gb3JpZ2luczsKKyAgICAgICAgYmFzZUFkdmFuY2VzLnJlc2VydmVDYXBhY2l0eShnbHlwaHMu
c2l6ZSgpKTsKKyAgICAgICAgb3JpZ2lucy5yZXNlcnZlQ2FwYWNpdHkoZ2x5cGhzLnNpemUoKSk7
CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBrID0gMDsgayA8IGdseXBocy5zaXplKCk7IGsrKykg
eworICAgICAgICAgICAgY29uc3QgZmxvYXQgY0xvZ2ljYWxTY2FsZSA9IGZvbnQtPnBsYXRmb3Jt
RGF0YSgpLnVzZUdESSgpID8gMSA6IDMyOworICAgICAgICAgICAgZmxvYXQgYWR2YW5jZSA9IGFk
dmFuY2VzW2tdIC8gY0xvZ2ljYWxTY2FsZTsKKyAgICAgICAgICAgIGZsb2F0IG9mZnNldFggPSBv
ZmZzZXRzW2tdLmR1IC8gY0xvZ2ljYWxTY2FsZTsKKyAgICAgICAgICAgIGZsb2F0IG9mZnNldFkg
PSBvZmZzZXRzW2tdLmR2IC8gY0xvZ2ljYWxTY2FsZTsKKworICAgICAgICAgICAgLy8gTWF0Y2gg
QXBwS2l0J3MgcnVsZXMgZm9yIHRoZSBpbnRlZ2VyIHZzLiBub24taW50ZWdlciByZW5kZXJpbmcg
bW9kZXMuCisgICAgICAgICAgICBpZiAoIWZvbnQtPnBsYXRmb3JtRGF0YSgpLmlzU3lzdGVtRm9u
dCgpKSB7CisgICAgICAgICAgICAgICAgYWR2YW5jZSA9IHJvdW5kZihhZHZhbmNlKTsKKyAgICAg
ICAgICAgICAgICBvZmZzZXRYID0gcm91bmRmKG9mZnNldFgpOworICAgICAgICAgICAgICAgIG9m
ZnNldFkgPSByb3VuZGYob2Zmc2V0WSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8v
IEZJWE1FOiBXZSBuZWVkIHRvIHRha2UgdGhlIEdPRkZTRVRTIGZvciBjb21iaW5pbmcgZ2x5cGhz
IGFuZCBzdG9yZSB0aGVtIGluIHRoZSBnbHlwaCBidWZmZXIKKyAgICAgICAgICAgIC8vIGFzIHdl
bGwsIHNvIHRoYXQgd2hlbiB0aGUgdGltZSBjb21lcyB0byBkcmF3IHRob3NlIGdseXBocywgd2Ug
Y2FuIGFwcGx5IHRoZSBhcHByb3ByaWF0ZQorICAgICAgICAgICAgLy8gdHJhbnNsYXRpb24uCisK
KyAgICAgICAgICAgIGJhc2VBZHZhbmNlcy51bmNoZWNrZWRBcHBlbmQoeyBhZHZhbmNlLCAwIH0p
OworICAgICAgICAgICAgb3JpZ2lucy51bmNoZWNrZWRBcHBlbmQoeyBvZmZzZXRYLCBvZmZzZXRZ
IH0pOworICAgICAgICB9CisgICAgICAgIEZsb2F0U2l6ZSBpbml0aWFsQWR2YW5jZSA9IHRvRmxv
YXRTaXplKG9yaWdpbnNbMF0pOworICAgICAgICBib29sIGx0ciA9ICFpdGVtLmEuZlJUTDsKKyAg
ICAgICAgbV9jb21wbGV4VGV4dFJ1bnMuYXBwZW5kKENvbXBsZXhUZXh0UnVuOjpjcmVhdGUoYmFz
ZUFkdmFuY2VzLCBvcmlnaW5zLCBnbHlwaHMsIHN0cmluZ0luZGljZXMsIGluaXRpYWxBZHZhbmNl
LCAqZm9udCwgY3AsIHN0cmluZ0xvY2F0aW9uLCBzdHJpbmdMZW5ndGgsIGl0ZW0uaUNoYXJQb3Ms
IGl0ZW1zW2krMV0uaUNoYXJQb3MsIGx0cikpOworICAgIH0KK30KKworfQorCisjZW5kaWYgLy8g
IVVTRShESVJFQ1QyRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9Gb250Q0dXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0ZvbnRDR1dpbi5jcHAKaW5kZXggMGVmNjU1ZDhkMDViNmE2MWE4YTRlMzhhNTE5MjY3MDAx
YTQ4YzkyZC4uMzNmODUyZWI2ZThkYmRhNDUwYmY1ZWZhNzMwZTQwNmE4YWZlOTdkZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDR1dpbi5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDR1dpbi5jcHAK
QEAgLTM0LDcgKzM0LDYgQEAKICNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgogI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJVbmlzY3Jp
YmVDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiV2ViQ29yZVRleHRSZW5kZXJlci5oIgogI2luY2x1
ZGUgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRy
YXMuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9G
b250Q2FzY2FkZURpcmVjdDJELmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9Gb250Q2FzY2FkZURpcmVjdDJELmNwcAppbmRleCA5MTExMmQ5NjVjODliYTdkNGM1N2Jl
N2M2OTNlY2ExNzcyNjg1OWFmLi5iMmQzNDcxYjhhYzMxOTM2YjEyMjcwM2NlYzU5ODJhMDg1ODVl
Y2M2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9u
dENhc2NhZGVEaXJlY3QyRC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0ZvbnRDYXNjYWRlRGlyZWN0MkQuY3BwCkBAIC0zNyw3ICszNyw2IEBACiAjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlRGlyZWN0MkQuaCIKICNpbmNsdWRlICJJ
bnRSZWN0LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuaCIKLSNpbmNsdWRl
ICJVbmlzY3JpYmVDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiV2ViQ29yZVRleHRSZW5kZXJlci5o
IgogI2luY2x1ZGUgPGQyZDEuaD4KICNpbmNsdWRlIDxkd3JpdGVfMy5oPgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRXaW4uY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRXaW4uY3BwCmluZGV4IDFjYWE4MDIy
ZTI2YTcwN2QyZjFiNDBkMDQ5MWE4YzA4ZWE4YTQyYzQuLjUyY2I4OGY1M2QwNWExMDE5NmU2NTFi
ZmQyYWNkMDMyZGM3OTIyZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9Gb250V2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vRm9udFdpbi5jcHAKQEAgLTM1LDEwICszNSw2IEBACiAjaW5jbHVkZSAiVGV4dFJ1
bi5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKLSNpZiAhVVNFKERJUkVDVDJEKQot
I2luY2x1ZGUgIlVuaXNjcmliZUNvbnRyb2xsZXIuaCIKLSNlbmRpZgotCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGJvb2wgRm9udENhc2NhZGU6OmNhblJldHVybkZhbGxiYWNrRm9udHNGb3JDb21w
bGV4VGV4dCgpCkBAIC01MSw3MiArNDcsNCBAQCBib29sIEZvbnRDYXNjYWRlOjpjYW5FeHBhbmRB
cm91bmRJZGVvZ3JhcGhzSW5Db21wbGV4VGV4dCgpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi0j
aWYgIVVTRShESVJFQ1QyRCkKLQotdm9pZCBGb250Q2FzY2FkZTo6YWRqdXN0U2VsZWN0aW9uUmVj
dEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgTGF5b3V0UmVjdCYgc2VsZWN0aW9u
UmVjdCwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8pIGNvbnN0Ci17Ci0gICAgVW5pc2NyaWJl
Q29udHJvbGxlciBpdCh0aGlzLCBydW4pOwotICAgIGl0LmFkdmFuY2UoZnJvbSk7Ci0gICAgZmxv
YXQgYmVmb3JlV2lkdGggPSBpdC5ydW5XaWR0aFNvRmFyKCk7Ci0gICAgaXQuYWR2YW5jZSh0byk7
Ci0gICAgZmxvYXQgYWZ0ZXJXaWR0aCA9IGl0LnJ1bldpZHRoU29GYXIoKTsKLQotICAgIGlmIChy
dW4ucnRsKCkpIHsKLSAgICAgICAgaXQuYWR2YW5jZShydW4ubGVuZ3RoKCkpOwotICAgICAgICBz
ZWxlY3Rpb25SZWN0Lm1vdmUoaXQucnVuV2lkdGhTb0ZhcigpIC0gYWZ0ZXJXaWR0aCwgMCk7Ci0g
ICAgfSBlbHNlCi0gICAgICAgIHNlbGVjdGlvblJlY3QubW92ZShiZWZvcmVXaWR0aCwgMCk7Ci0g
ICAgc2VsZWN0aW9uUmVjdC5zZXRXaWR0aChhZnRlcldpZHRoIC0gYmVmb3JlV2lkdGgpOwotfQot
Ci1mbG9hdCBGb250Q2FzY2FkZTo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dChj
b25zdCBUZXh0UnVuJiBydW4sIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvLCBHbHlwaEJ1ZmZl
ciYgZ2x5cGhCdWZmZXIsIEZvclRleHRFbXBoYXNpc09yTm90IGZvclRleHRFbXBoYXNpcykgY29u
c3QKLXsKLSAgICBpZiAoZm9yVGV4dEVtcGhhc2lzKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBBZGQg
Zm9yVGV4dEVtcGhhc2lzIHBhcmVtZXRlciB0byBVbmlzY3JpYmVDb250cm9sbGVyIGFuZCB1c2Ug
aXQuCi0gICAgICAgIExPR19FUlJPUigiTm90IGltcGxlbWVudGVkIGZvciB0ZXh0IGVtcGhhc2lz
LiIpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBVbmlzY3JpYmVDb250cm9sbGVy
IGNvbnRyb2xsZXIodGhpcywgcnVuKTsKLSAgICBjb250cm9sbGVyLmFkdmFuY2UoZnJvbSk7Ci0g
ICAgZmxvYXQgYmVmb3JlV2lkdGggPSBjb250cm9sbGVyLnJ1bldpZHRoU29GYXIoKTsKLSAgICBj
b250cm9sbGVyLmFkdmFuY2UodG8sICZnbHlwaEJ1ZmZlcik7Ci0KLSAgICBpZiAoZ2x5cGhCdWZm
ZXIuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGZsb2F0IGFmdGVyV2lkdGgg
PSBjb250cm9sbGVyLnJ1bldpZHRoU29GYXIoKTsKLQotICAgIGlmIChydW4ucnRsKCkpIHsKLSAg
ICAgICAgY29udHJvbGxlci5hZHZhbmNlKHJ1bi5sZW5ndGgoKSk7Ci0gICAgICAgIHJldHVybiBj
b250cm9sbGVyLnJ1bldpZHRoU29GYXIoKSAtIGFmdGVyV2lkdGg7Ci0gICAgfQotICAgIHJldHVy
biBiZWZvcmVXaWR0aDsKLX0KLQotZmxvYXQgRm9udENhc2NhZGU6OmZsb2F0V2lkdGhGb3JDb21w
bGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFj
a0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93KSBjb25zdAotewotICAgIFVuaXNj
cmliZUNvbnRyb2xsZXIgY29udHJvbGxlcih0aGlzLCBydW4sIGZhbGxiYWNrRm9udHMpOwotICAg
IGNvbnRyb2xsZXIuYWR2YW5jZShydW4ubGVuZ3RoKCkpOwotICAgIGlmIChnbHlwaE92ZXJmbG93
KSB7Ci0gICAgICAgIGdseXBoT3ZlcmZsb3ctPnRvcCA9IHN0ZDo6bWF4PGludD4oZ2x5cGhPdmVy
Zmxvdy0+dG9wLCBjZWlsZigtY29udHJvbGxlci5taW5HbHlwaEJvdW5kaW5nQm94WSgpKSAtIChn
bHlwaE92ZXJmbG93LT5jb21wdXRlQm91bmRzID8gMCA6IGZvbnRNZXRyaWNzKCkuYXNjZW50KCkp
KTsKLSAgICAgICAgZ2x5cGhPdmVyZmxvdy0+Ym90dG9tID0gc3RkOjptYXg8aW50PihnbHlwaE92
ZXJmbG93LT5ib3R0b20sIGNlaWxmKGNvbnRyb2xsZXIubWF4R2x5cGhCb3VuZGluZ0JveFkoKSkg
LSAoZ2x5cGhPdmVyZmxvdy0+Y29tcHV0ZUJvdW5kcyA/IDAgIDogZm9udE1ldHJpY3MoKS5kZXNj
ZW50KCkpKTsKLSAgICAgICAgZ2x5cGhPdmVyZmxvdy0+bGVmdCA9IHN0ZDo6bWF4PGludD4oMCwg
Y2VpbGYoLWNvbnRyb2xsZXIubWluR2x5cGhCb3VuZGluZ0JveFgoKSkpOwotICAgICAgICBnbHlw
aE92ZXJmbG93LT5yaWdodCA9IHN0ZDo6bWF4PGludD4oMCwgY2VpbGYoY29udHJvbGxlci5tYXhH
bHlwaEJvdW5kaW5nQm94WCgpIC0gY29udHJvbGxlci5ydW5XaWR0aFNvRmFyKCkpKTsKLSAgICB9
Ci0gICAgcmV0dXJuIGNvbnRyb2xsZXIucnVuV2lkdGhTb0ZhcigpOwotfQotCi1pbnQgRm9udENh
c2NhZGU6Om9mZnNldEZvclBvc2l0aW9uRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVu
LCBmbG9hdCB4RmxvYXQsIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0Ci17Ci0gICAg
Ly8gRklYTUU6IFRoaXMgdHJ1bmNhdGlvbiBpcyBub3QgYSBwcm9ibGVtIGZvciBIVE1MLCBidXQg
b25seSBhZmZlY3RzIFNWRywgd2hpY2ggcGFzc2VzIGZsb2F0aW5nLXBvaW50IG51bWJlcnMKLSAg
ICAvLyB0byBGb250Q2FzY2FkZTo6b2Zmc2V0Rm9yUG9zaXRpb24oKS4gQnVnIGh0dHA6Ly93ZWJr
aXQub3JnL2IvNDA2NzMgdHJhY2tzIGZpeGluZyB0aGlzIHByb2JsZW0uCi0gICAgaW50IHggPSBz
dGF0aWNfY2FzdDxpbnQ+KHhGbG9hdCk7Ci0KLSAgICBVbmlzY3JpYmVDb250cm9sbGVyIGNvbnRy
b2xsZXIodGhpcywgcnVuKTsKLSAgICByZXR1cm4gY29udHJvbGxlci5vZmZzZXRGb3JQb3NpdGlv
bih4LCBpbmNsdWRlUGFydGlhbEdseXBocyk7Ci19Ci0KLSNlbmRpZgotCiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vVW5pc2NyaWJlQ29udHJvbGxl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vVW5pc2NyaWJlQ29u
dHJvbGxlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3NGM0ODYwZmYxMDA0
NDA5OWI2YWYzZjliZmI5YjQwY2Q3ODhkYTkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1Vu
aXNjcmliZUNvbnRyb2xsZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDU5ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiVW5pc2NyaWJlQ29udHJvbGxlci5oIgotCi0jaW5jbHVkZSAiRm9udC5oIgotI2luY2x1ZGUg
IkZvbnRDYXNjYWRlLmgiCi0jaW5jbHVkZSAiSFduZERDLmgiCi0jaW5jbHVkZSAiVGV4dFJ1bi5o
IgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvd2luL1dD
aGFyU3RyaW5nRXh0cmFzLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLXVzaW5nIG5hbWVzcGFj
ZSBXVEY6OlVuaWNvZGU7Ci0KLS8vIEZJWE1FOiBSZWFyY2hpdGVjdCB0aGlzIHRvIGJlIG1vcmUg
bGlrZSBXaWR0aEl0ZXJhdG9yIGluIEZvbnQuY3BwLiAgSGF2ZSBhbiBhZHZhbmNlKCkgbWV0aG9k
Ci0vLyB0aGF0IGRvZXMgc3R1ZmYgaW4gdGhhdCBtZXRob2QgaW5zdGVhZCBvZiBkb2luZyBldmVy
eXRoaW5nIGluIHRoZSBjb25zdHJ1Y3Rvci4gIEhhdmUgYWR2YW5jZSgpCi0vLyB0YWtlIHRoZSBH
bHlwaEJ1ZmZlciBhcyBhbiBhcmcgc28gdGhhdCB3ZSBkb24ndCBoYXZlIHRvIHBvcHVsYXRlIHRo
ZSBnbHlwaCBidWZmZXIgd2hlbgotLy8gbWVhc3VyaW5nLgotVW5pc2NyaWJlQ29udHJvbGxlcjo6
VW5pc2NyaWJlQ29udHJvbGxlcihjb25zdCBGb250Q2FzY2FkZSogZm9udCwgY29uc3QgVGV4dFJ1
biYgcnVuLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tGb250cykKLSAgICA6IG1fZm9u
dCgqZm9udCkKLSAgICAsIG1fcnVuKHJ1bikKLSAgICAsIG1fZmFsbGJhY2tGb250cyhmYWxsYmFj
a0ZvbnRzKQotICAgICwgbV9taW5HbHlwaEJvdW5kaW5nQm94WChzdGQ6Om51bWVyaWNfbGltaXRz
PGZsb2F0Pjo6bWF4KCkpCi0gICAgLCBtX21heEdseXBoQm91bmRpbmdCb3hYKHN0ZDo6bnVtZXJp
Y19saW1pdHM8ZmxvYXQ+OjptaW4oKSkKLSAgICAsIG1fbWluR2x5cGhCb3VuZGluZ0JveFkoc3Rk
OjpudW1lcmljX2xpbWl0czxmbG9hdD46Om1heCgpKQotICAgICwgbV9tYXhHbHlwaEJvdW5kaW5n
Qm94WShzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6bWluKCkpCi0gICAgLCBtX2N1cnJlbnRD
aGFyYWN0ZXIoMCkKLSAgICAsIG1fZW5kKHJ1bi5sZW5ndGgoKSkKLSAgICAsIG1fcnVuV2lkdGhT
b0ZhcigwKQotICAgICwgbV9wYWRkaW5nKHJ1bi5leHBhbnNpb24oKSkKLSAgICAsIG1fY29tcHV0
aW5nT2Zmc2V0UG9zaXRpb24oZmFsc2UpCi0gICAgLCBtX2luY2x1ZGVQYXJ0aWFsR2x5cGhzKGZh
bHNlKQotICAgICwgbV9vZmZzZXRYKDApCi0gICAgLCBtX29mZnNldFBvc2l0aW9uKDApCi17Ci0g
ICAgaWYgKCFtX3BhZGRpbmcpCi0gICAgICAgIG1fcGFkUGVyU3BhY2UgPSAwOwotICAgIGVsc2Ug
ewotICAgICAgICBmbG9hdCBudW1TcGFjZXMgPSAwOwotICAgICAgICBmb3IgKGludCBzID0gMDsg
cyA8IG1fcnVuLmxlbmd0aCgpOyBzKyspIHsKLSAgICAgICAgICAgIGlmIChGb250Q2FzY2FkZTo6
dHJlYXRBc1NwYWNlKG1fcnVuW3NdKSkKLSAgICAgICAgICAgICAgICBudW1TcGFjZXMrKzsKLSAg
ICAgICAgfQotCi0gICAgICAgIGlmIChudW1TcGFjZXMgPT0gMCkKLSAgICAgICAgICAgIG1fcGFk
UGVyU3BhY2UgPSAwOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX3BhZFBlclNwYWNlID0g
bV9wYWRkaW5nIC8gbnVtU3BhY2VzOwotICAgIH0KLQotICAgIC8vIE51bGwgb3V0IG91ciB1bmlz
Y3JpYmUgc3RydWN0cwotICAgIHJlc2V0Q29udHJvbEFuZFN0YXRlKCk7Ci19Ci0KLWludCBVbmlz
Y3JpYmVDb250cm9sbGVyOjpvZmZzZXRGb3JQb3NpdGlvbihpbnQgeCwgYm9vbCBpbmNsdWRlUGFy
dGlhbEdseXBocykKLXsKLSAgICBtX2NvbXB1dGluZ09mZnNldFBvc2l0aW9uID0gdHJ1ZTsKLSAg
ICBtX2luY2x1ZGVQYXJ0aWFsR2x5cGhzID0gaW5jbHVkZVBhcnRpYWxHbHlwaHM7Ci0gICAgbV9v
ZmZzZXRYID0geDsKLSAgICBtX29mZnNldFBvc2l0aW9uID0gMDsKLSAgICBhZHZhbmNlKG1fcnVu
Lmxlbmd0aCgpKTsKLSAgICBpZiAobV9jb21wdXRpbmdPZmZzZXRQb3NpdGlvbikgewotICAgICAg
ICAvLyBUaGUgcG9pbnQgaXMgdG8gdGhlIGxlZnQgb3IgdG8gdGhlIHJpZ2h0IG9mIHRoZSBlbnRp
cmUgcnVuLgotICAgICAgICBpZiAoKG1fb2Zmc2V0WCA+PSBtX3J1bldpZHRoU29GYXIgJiYgbV9y
dW4ubHRyKCkpIHx8IChtX29mZnNldFggPCAwICYmIG1fcnVuLnJ0bCgpKSkKLSAgICAgICAgICAg
IG1fb2Zmc2V0UG9zaXRpb24gPSBtX2VuZDsKLSAgICB9Ci0gICAgbV9jb21wdXRpbmdPZmZzZXRQ
b3NpdGlvbiA9IGZhbHNlOwotICAgIHJldHVybiBtX29mZnNldFBvc2l0aW9uOwotfQotCi12b2lk
IFVuaXNjcmliZUNvbnRyb2xsZXI6OmFkdmFuY2UodW5zaWduZWQgb2Zmc2V0LCBHbHlwaEJ1ZmZl
ciogZ2x5cGhCdWZmZXIpCi17Ci0gICAgLy8gRklYTUU6IFdlIHJlYWxseSB3YW50IHRvIGJlIHVz
aW5nIGEgbmV3ZXIgdmVyc2lvbiBvZiBVbmlzY3JpYmUgdGhhdCBzdXBwb3J0cyB0aGUgbmV3IE9w
ZW5UeXBlCi0gICAgLy8gZnVuY3Rpb25zLiAgVGhvc2UgZnVuY3Rpb25zIHdvdWxkIGFsbG93IHVz
IHRvIHR1cm4gb2ZmIGtlcm5pbmcgYW5kIGxpZ2F0dXJlcy4gIFdpdGhvdXQgYmVpbmcgYWJsZQot
ICAgIC8vIHRvIGRvIHRoYXQsIHdlIHdpbGwgaGF2ZSBidWdneSBsaW5lIGJyZWFraW5nIGFuZCBt
ZXRyaWNzIHdoZW4gc2ltcGxlIGFuZCBjb21wbGV4IHRleHQgYXJlIGNsb3NlCi0gICAgLy8gdG9n
ZXRoZXIgKHRoZSBjb21wbGV4IGNvZGUgcGF0aCB3aWxsIG5hcnJvdyB0aGUgdGV4dCBiZWNhdXNl
IG9mIGtlcm5pbmcgYW5kIGxpZ2F0dXJlcyBhbmQgdGhlbgotICAgIC8vIHdoZW4gYmlkaSBwcm9j
ZXNzaW5nIHNwbGl0cyBpbnRvIG11bHRpcGxlIHJ1bnMsIHRoZSBzaW1wbGUgcG9ydGlvbnMgd2ls
bCBnZXQgd2lkZXIgYW5kIGNhdXNlIHVzIHRvCi0gICAgLy8gc3BpbGwgb2ZmIHRoZSBlZGdlIG9m
IGEgbGluZSkuCi0gICAgaWYgKHN0YXRpY19jYXN0PGludD4ob2Zmc2V0KSA+IG1fZW5kKQotICAg
ICAgICBvZmZzZXQgPSBtX2VuZDsKLQotICAgIGludCBsZW5ndGggPSBvZmZzZXQgLSBtX2N1cnJl
bnRDaGFyYWN0ZXI7Ci0gICAgaWYgKGxlbmd0aCA8PSAwKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBTdHJpbmcgYnVmZmVyRm9yMTZCaXREYXRhOwotCi0gICAgLy8gSXRlbWl6ZSB0aGUgc3RyaW5n
LgotICAgIGNvbnN0IFVDaGFyKiBjcCA9IG51bGxwdHI7Ci0gICAgaWYgKG1fcnVuLmlzOEJpdCgp
KSB7Ci0gICAgICAgIC8vIFVuaXNjcmliZSBvbmx5IGRlYWxzIHdpdGggMTYtYml0IGNoYXJhY3Rl
cnMuIE11c3QgZ2VuZXJhdGUgdGhlbSBub3cuCi0gICAgICAgIGJ1ZmZlckZvcjE2Qml0RGF0YSA9
IFN0cmluZzo6bWFrZTE2Qml0RnJvbThCaXRTb3VyY2UobV9ydW4uZGF0YTgobV9jdXJyZW50Q2hh
cmFjdGVyKSwgbGVuZ3RoKTsKLSAgICAgICAgY3AgPSBidWZmZXJGb3IxNkJpdERhdGEuY2hhcmFj
dGVyczE2KCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGNwID0gbV9ydW4uZGF0YTE2KG1fY3VycmVu
dENoYXJhY3Rlcik7Ci0KLSAgICB1bnNpZ25lZCBiYXNlQ2hhcmFjdGVyID0gbV9jdXJyZW50Q2hh
cmFjdGVyOwotCi0gICAgLy8gV2UgYnJlYWsgdXAgaXRlbWl6YXRpb24gb2YgdGhlIHN0cmluZyBi
eSBmb250RGF0YSBhbmQgKGlmIG5lZWRlZCkgdGhlIHVzZSBvZiBzbWFsbCBjYXBzLgotCi0gICAg
Ly8gRklYTUU6IEl0J3MgaW5jb25zaXN0ZW50IHRoYXQgd2UgdXNlIGxvZ2ljYWwgb3JkZXIgd2hl
biBpdGVtaXppbmcsIHNpbmNlIHRoaXMKLSAgICAvLyBkb2VzIG5vdCBtYXRjaCBub3JtYWwgUlRM
LgotCi0gICAgLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24gc2hvdWxkIGRlY29kZSBzdXJyb2dhdGUg
cGFpcnMuIEN1cnJlbnRseSBpdCBtYWtlcyBsaXR0bGUgZGlmZmVyZW5jZSB0aGF0Ci0gICAgLy8g
aXQgZG9lcyBub3QgYmVjYXVzZSB0aGUgZm9udCBjYWNoZSBvbiBXaW5kb3dzIGRvZXMgbm90IHN1
cHBvcnQgbm9uLUJNUCBjaGFyYWN0ZXJzLgotICAgIFZlY3RvcjxVQ2hhciwgMjU2PiBzbWFsbENh
cHNCdWZmZXI7Ci0gICAgaWYgKG1fZm9udC5pc1NtYWxsQ2FwcygpKQotICAgICAgICBzbWFsbENh
cHNCdWZmZXIucmVzaXplKGxlbmd0aCk7Ci0KLSAgICB1bnNpZ25lZCBpbmRleE9mRm9udFRyYW5z
aXRpb24gPSBtX3J1bi5ydGwoKSA/IGxlbmd0aCAtIDEgOiAwOwotICAgIGNvbnN0IFVDaGFyKiBj
dXJyID0gbV9ydW4ucnRsKCkgPyBjcCArIGxlbmd0aCAgLSAxIDogY3A7Ci0gICAgY29uc3QgVUNo
YXIqIGVuZCA9IG1fcnVuLnJ0bCgpID8gY3AgLSAxIDogY3AgKyBsZW5ndGg7Ci0KLSAgICBjb25z
dCBGb250KiBmb250RGF0YTsKLSAgICBjb25zdCBGb250KiBuZXh0Rm9udERhdGEgPSBtX2ZvbnQu
Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKCpjdXJyLCBmYWxzZSkuZm9udDsKLQotICAgIFVDaGFyIG5l
d0MgPSAwOwotCi0gICAgYm9vbCBpc1NtYWxsQ2FwczsKLSAgICBib29sIG5leHRJc1NtYWxsQ2Fw
cyA9IG1fZm9udC5pc1NtYWxsQ2FwcygpICYmICEoVV9HRVRfR0NfTUFTSygqY3VycikgJiBVX0dD
X01fTUFTSykgJiYgKG5ld0MgPSB1X3RvdXBwZXIoKmN1cnIpKSAhPSAqY3VycjsKLQotICAgIGlm
IChuZXh0SXNTbWFsbENhcHMpCi0gICAgICAgIHNtYWxsQ2Fwc0J1ZmZlcltjdXJyIC0gY3BdID0g
bmV3QzsKLQotICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIGN1cnIgPSBtX3J1bi5ydGwoKSA/
IGN1cnIgLSAxIDogY3VyciArIDE7Ci0gICAgICAgIGlmIChjdXJyID09IGVuZCkKLSAgICAgICAg
ICAgIGJyZWFrOwotCi0gICAgICAgIGZvbnREYXRhID0gbmV4dEZvbnREYXRhOwotICAgICAgICBp
c1NtYWxsQ2FwcyA9IG5leHRJc1NtYWxsQ2FwczsKLSAgICAgICAgaW50IGluZGV4ID0gY3VyciAt
IGNwOwotICAgICAgICBVQ2hhciBjID0gKmN1cnI7Ci0KLSAgICAgICAgYm9vbCBmb3JjZVNtYWxs
Q2FwcyA9IGlzU21hbGxDYXBzICYmIChVX0dFVF9HQ19NQVNLKGMpICYgVV9HQ19NX01BU0spOwot
ICAgICAgICBuZXh0Rm9udERhdGEgPSBtX2ZvbnQuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKCpjdXJy
LCBmYWxzZSwgZm9yY2VTbWFsbENhcHMgPyBTbWFsbENhcHNWYXJpYW50IDogQXV0b1ZhcmlhbnQp
LmZvbnQ7Ci0gICAgICAgIGlmIChtX2ZvbnQuaXNTbWFsbENhcHMoKSkgewotICAgICAgICAgICAg
bmV4dElzU21hbGxDYXBzID0gZm9yY2VTbWFsbENhcHMgfHwgKG5ld0MgPSB1X3RvdXBwZXIoYykp
ICE9IGM7Ci0gICAgICAgICAgICBpZiAobmV4dElzU21hbGxDYXBzKQotICAgICAgICAgICAgICAg
IHNtYWxsQ2Fwc0J1ZmZlcltpbmRleF0gPSBmb3JjZVNtYWxsQ2FwcyA/IGMgOiBuZXdDOwotICAg
ICAgICB9Ci0KLSAgICAgICAgaWYgKG1fZmFsbGJhY2tGb250cyAmJiBmb250RGF0YSAmJiBuZXh0
Rm9udERhdGEgIT0gZm9udERhdGEgJiYgZm9udERhdGEgIT0gJm1fZm9udC5wcmltYXJ5Rm9udCgp
KQotICAgICAgICAgICAgbV9mYWxsYmFja0ZvbnRzLT5hZGQoZm9udERhdGEpOwotCi0gICAgICAg
IGlmIChuZXh0Rm9udERhdGEgIT0gZm9udERhdGEgfHwgbmV4dElzU21hbGxDYXBzICE9IGlzU21h
bGxDYXBzKSB7Ci0gICAgICAgICAgICBpbnQgaXRlbVN0YXJ0ID0gbV9ydW4ucnRsKCkgPyBpbmRl
eCArIDEgOiBpbmRleE9mRm9udFRyYW5zaXRpb247Ci0gICAgICAgICAgICBpbnQgaXRlbUxlbmd0
aCA9IG1fcnVuLnJ0bCgpID8gaW5kZXhPZkZvbnRUcmFuc2l0aW9uIC0gaW5kZXggOiBpbmRleCAt
IGluZGV4T2ZGb250VHJhbnNpdGlvbjsKLSAgICAgICAgICAgIG1fY3VycmVudENoYXJhY3RlciA9
IGJhc2VDaGFyYWN0ZXIgKyBpdGVtU3RhcnQ7Ci0gICAgICAgICAgICBpdGVtaXplU2hhcGVBbmRQ
bGFjZSgoaXNTbWFsbENhcHMgPyBzbWFsbENhcHNCdWZmZXIuZGF0YSgpIDogY3ApICsgaXRlbVN0
YXJ0LCBpdGVtU3RhcnQsIGl0ZW1MZW5ndGgsIGZvbnREYXRhLCBnbHlwaEJ1ZmZlcik7Ci0gICAg
ICAgICAgICBpbmRleE9mRm9udFRyYW5zaXRpb24gPSBpbmRleDsKLSAgICAgICAgfQotICAgIH0K
LSAgICAKLSAgICBpbnQgaXRlbUxlbmd0aCA9IG1fcnVuLnJ0bCgpID8gaW5kZXhPZkZvbnRUcmFu
c2l0aW9uICsgMSA6IGxlbmd0aCAtIGluZGV4T2ZGb250VHJhbnNpdGlvbjsKLSAgICBpZiAoaXRl
bUxlbmd0aCkgewotICAgICAgICBpZiAobV9mYWxsYmFja0ZvbnRzICYmIG5leHRGb250RGF0YSAm
JiBuZXh0Rm9udERhdGEgIT0gJm1fZm9udC5wcmltYXJ5Rm9udCgpKQotICAgICAgICAgICAgbV9m
YWxsYmFja0ZvbnRzLT5hZGQobmV4dEZvbnREYXRhKTsKLQotICAgICAgICBpbnQgaXRlbVN0YXJ0
ID0gbV9ydW4ucnRsKCkgPyAwIDogaW5kZXhPZkZvbnRUcmFuc2l0aW9uOwotICAgICAgICBtX2N1
cnJlbnRDaGFyYWN0ZXIgPSBiYXNlQ2hhcmFjdGVyICsgaXRlbVN0YXJ0OwotICAgICAgICBpdGVt
aXplU2hhcGVBbmRQbGFjZSgobmV4dElzU21hbGxDYXBzID8gc21hbGxDYXBzQnVmZmVyLmRhdGEo
KSA6IGNwKSArIGl0ZW1TdGFydCwgaXRlbVN0YXJ0LCBpdGVtTGVuZ3RoLCBuZXh0Rm9udERhdGEs
IGdseXBoQnVmZmVyKTsKLSAgICB9Ci0KLSAgICBtX2N1cnJlbnRDaGFyYWN0ZXIgPSBiYXNlQ2hh
cmFjdGVyICsgbGVuZ3RoOwotfQotCi12b2lkIFVuaXNjcmliZUNvbnRyb2xsZXI6Oml0ZW1pemVT
aGFwZUFuZFBsYWNlKGNvbnN0IFVDaGFyKiBjcCwgdW5zaWduZWQgc3RyaW5nT2Zmc2V0LCB1bnNp
Z25lZCBsZW5ndGgsIGNvbnN0IEZvbnQqIGZvbnREYXRhLCBHbHlwaEJ1ZmZlciogZ2x5cGhCdWZm
ZXIpCi17Ci0gICAgLy8gU2NyaXB0SXRlbWl6ZSAoaW4gV2luZG93cyBYUCB2ZXJzaW9ucyBwcmlv
ciB0byBTUDIpIGNhbiBvdmVyZmxvdyBieSAxLiAgVGhpcyBpcyB3aHkgdGhlcmUgaXMgYW4gZXh0
cmEgZW1wdHkgaXRlbQotICAgIC8vIGhhbmdpbmcgb3V0IGF0IHRoZSBlbmQgb2YgdGhlIGFycmF5
Ci0gICAgbV9pdGVtcy5yZXNpemUoNik7Ci0gICAgaW50IG51bUl0ZW1zID0gMDsKLSAgICBIUkVT
VUxUIHJjID0gU19PSzsKLSAgICB3aGlsZSAocmMgPSA6OlNjcmlwdEl0ZW1pemUod2NoYXJGcm9t
KGNwKSwgbGVuZ3RoLCBtX2l0ZW1zLnNpemUoKSAtIDEsICZtX2NvbnRyb2wsICZtX3N0YXRlLCBt
X2l0ZW1zLmRhdGEoKSwgJm51bUl0ZW1zKSA9PSBFX09VVE9GTUVNT1JZKSB7Ci0gICAgICAgIG1f
aXRlbXMucmVzaXplKG1faXRlbXMuc2l6ZSgpICogMik7Ci0gICAgICAgIHJlc2V0Q29udHJvbEFu
ZFN0YXRlKCk7Ci0gICAgfQotICAgIGlmIChGQUlMRUQocmMpKSB7Ci0gICAgICAgIFdURkxvZ0Fs
d2F5cygiVW5pc2NyaWJlQ29udHJvbGxlcjo6aXRlbWl6ZVNoYXBlQW5kUGxhY2U6IFNjcmlwdEl0
ZW1pemUgZmFpbGVkLCByYz0lbHgiLCByYyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
bV9pdGVtcy5yZXNpemUobnVtSXRlbXMgKyAxKTsKLQotICAgIGlmIChtX3J1bi5ydGwoKSkgewot
ICAgICAgICBmb3IgKGludCBpID0gbV9pdGVtcy5zaXplKCkgLSAyOyBpID49IDA7IGktLSkgewot
ICAgICAgICAgICAgaWYgKCFzaGFwZUFuZFBsYWNlSXRlbShjcCwgc3RyaW5nT2Zmc2V0LCBpLCBm
b250RGF0YSwgZ2x5cGhCdWZmZXIpKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2l0ZW1z
LnNpemUoKSAtIDE7IGkrKykgewotICAgICAgICAgICAgaWYgKCFzaGFwZUFuZFBsYWNlSXRlbShj
cCwgc3RyaW5nT2Zmc2V0LCBpLCBmb250RGF0YSwgZ2x5cGhCdWZmZXIpKQotICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBVbmlzY3JpYmVDb250cm9s
bGVyOjpyZXNldENvbnRyb2xBbmRTdGF0ZSgpCi17Ci0gICAgbWVtc2V0KCZtX2NvbnRyb2wsIDAs
IHNpemVvZihTQ1JJUFRfQ09OVFJPTCkpOwotICAgIG1lbXNldCgmbV9zdGF0ZSwgMCwgc2l6ZW9m
KFNDUklQVF9TVEFURSkpOwotCi0gICAgLy8gU2V0IHVwIHRoZSBjb3JyZWN0IGRpcmVjdGlvbiBm
b3IgdGhlIHJ1bi4KLSAgICBtX3N0YXRlLnVCaWRpTGV2ZWwgPSBtX3J1bi5ydGwoKTsKLSAgICAK
LSAgICAvLyBMb2NrIHRoZSBjb3JyZWN0IGRpcmVjdGlvbmFsIG92ZXJyaWRlLgotICAgIG1fc3Rh
dGUuZk92ZXJyaWRlRGlyZWN0aW9uID0gbV9ydW4uZGlyZWN0aW9uYWxPdmVycmlkZSgpOwotfQot
Ci1ib29sIFVuaXNjcmliZUNvbnRyb2xsZXI6OnNoYXBlQW5kUGxhY2VJdGVtKGNvbnN0IFVDaGFy
KiBjcCwgdW5zaWduZWQgc3RyaW5nT2Zmc2V0LCB1bnNpZ25lZCBpLCBjb25zdCBGb250KiBmb250
RGF0YSwgR2x5cGhCdWZmZXIqIGdseXBoQnVmZmVyKQotewotICAgIC8vIERldGVybWluZSB0aGUg
c3RyaW5nIGZvciB0aGlzIGl0ZW0uCi0gICAgY29uc3QgVUNoYXIqIHN0ciA9IGNwICsgbV9pdGVt
c1tpXS5pQ2hhclBvczsKLSAgICBpbnQgbGVuID0gbV9pdGVtc1tpKzFdLmlDaGFyUG9zIC0gbV9p
dGVtc1tpXS5pQ2hhclBvczsKLSAgICBTQ1JJUFRfSVRFTSBpdGVtID0gbV9pdGVtc1tpXTsKLQot
ICAgIC8vIFNldCB1cCBidWZmZXJzIHRvIGhvbGQgdGhlIHJlc3VsdHMgb2Ygc2hhcGluZyB0aGUg
aXRlbS4KLSAgICBWZWN0b3I8V09SRD4gZ2x5cGhzOwotICAgIFZlY3RvcjxXT1JEPiBjbHVzdGVy
czsKLSAgICBWZWN0b3I8U0NSSVBUX1ZJU0FUVFI+IHZpc3VhbEF0dHJpYnV0ZXM7Ci0gICAgY2x1
c3RlcnMucmVzaXplKGxlbik7Ci0gICAgIAotICAgIC8vIFNoYXBlIHRoZSBpdGVtLgotICAgIC8v
IFRoZSByZWNvbW1lbmRlZCBzaXplIGZvciB0aGUgZ2x5cGggYnVmZmVyIGlzIDEuNSAqIHRoZSBj
aGFyYWN0ZXIgbGVuZ3RoICsgMTYgaW4gdGhlIHVuaXNjcmliZSBkb2NzLgotICAgIC8vIEFwcGFy
ZW50bHkgdGhpcyBpcyBhIGdvb2Qgc2l6ZSB0byBhdm9pZCBoYXZpbmcgdG8gbWFrZSByZXBlYXRl
ZCBjYWxscyB0byBTY3JpcHRTaGFwZS4KLSAgICBnbHlwaHMucmVzaXplKDEuNSAqIGxlbiArIDE2
KTsKLSAgICB2aXN1YWxBdHRyaWJ1dGVzLnJlc2l6ZShnbHlwaHMuc2l6ZSgpKTsKLQotICAgIGlm
ICghc2hhcGUoc3RyLCBsZW4sIGl0ZW0sIGZvbnREYXRhLCBnbHlwaHMsIGNsdXN0ZXJzLCB2aXN1
YWxBdHRyaWJ1dGVzKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBWZWN0b3I8T3B0aW9u
YWw8dW5zaWduZWQ+PiBzdHJpbmdPZmZzZXRzKGdseXBocy5zaXplKCkpOwotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBsZW47ICsraSkgewotICAgICAgICBpZiAoc3RyaW5nT2Zmc2V0c1tj
bHVzdGVyc1tpXV0pCi0gICAgICAgICAgICBzdHJpbmdPZmZzZXRzW2NsdXN0ZXJzW2ldXSA9IHN0
ZDo6bWluKCpzdHJpbmdPZmZzZXRzW2NsdXN0ZXJzW2ldXSwgaSk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHN0cmluZ09mZnNldHNbY2x1c3RlcnNbaV1dID0gaTsKLSAgICB9Ci0KLSAgICAv
LyBXZSBub3cgaGF2ZSBhIGNvbGxlY3Rpb24gb2YgZ2x5cGhzLgotICAgIFZlY3RvcjxHT0ZGU0VU
PiBvZmZzZXRzOwotICAgIFZlY3RvcjxpbnQ+IGFkdmFuY2VzOwotICAgIG9mZnNldHMucmVzaXpl
KGdseXBocy5zaXplKCkpOwotICAgIGFkdmFuY2VzLnJlc2l6ZShnbHlwaHMuc2l6ZSgpKTsKLSAg
ICBIUkVTVUxUIHBsYWNlUmVzdWx0ID0gU2NyaXB0UGxhY2UoMCwgZm9udERhdGEtPnNjcmlwdENh
Y2hlKCksIGdseXBocy5kYXRhKCksIGdseXBocy5zaXplKCksIHZpc3VhbEF0dHJpYnV0ZXMuZGF0
YSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaXRlbS5hLCBhZHZh
bmNlcy5kYXRhKCksIG9mZnNldHMuZGF0YSgpLCAwKTsKLSAgICBpZiAocGxhY2VSZXN1bHQgPT0g
RV9QRU5ESU5HKSB7Ci0gICAgICAgIC8vIFRoZSBzY3JpcHQgY2FjaGUgaXNuJ3QgcHJpbWVkIHdp
dGggZW5vdWdoIGluZm8geWV0LiAgV2UgbmVlZCB0byBzZWxlY3Qgb3VyIEhGT05UIGludG8KLSAg
ICAgICAgLy8gYSBEQyBhbmQgcGFzcyB0aGUgREMgaW4gdG8gU2NyaXB0UGxhY2UuCi0gICAgICAg
IEhXbmREQyBoZGMoMCk7Ci0gICAgICAgIEhGT05UIGhmb250ID0gZm9udERhdGEtPnBsYXRmb3Jt
RGF0YSgpLmhmb250KCk7Ci0gICAgICAgIEhGT05UIG9sZEZvbnQgPSAoSEZPTlQpU2VsZWN0T2Jq
ZWN0KGhkYywgaGZvbnQpOwotICAgICAgICBwbGFjZVJlc3VsdCA9IFNjcmlwdFBsYWNlKGhkYywg
Zm9udERhdGEtPnNjcmlwdENhY2hlKCksIGdseXBocy5kYXRhKCksIGdseXBocy5zaXplKCksIHZp
c3VhbEF0dHJpYnV0ZXMuZGF0YSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICZpdGVtLmEsIGFkdmFuY2VzLmRhdGEoKSwgb2Zmc2V0cy5kYXRhKCksIDApOwotICAgICAgICBT
ZWxlY3RPYmplY3QoaGRjLCBvbGRGb250KTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKEZBSUxFRChw
bGFjZVJlc3VsdCkgfHwgZ2x5cGhzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0K
LSAgICAvLyBDb252ZXJ0IGFsbCBjaGFycyB0aGF0IHNob3VsZCBiZSB0cmVhdGVkIGFzIHNwYWNl
cyB0byB1c2UgdGhlIHNwYWNlIGdseXBoLgotICAgIC8vIFdlIGFsc28gY3JlYXRlIGEgbWFwIHRo
YXQgYWxsb3dzIHVzIHRvIHF1aWNrbHkgZ28gZnJvbSBzcGFjZSBnbHlwaHMgYmFjayB0byB0aGVp
ciBjb3JyZXNwb25kaW5nIGNoYXJhY3RlcnMuCi0gICAgVmVjdG9yPGludD4gc3BhY2VDaGFyYWN0
ZXJzKGdseXBocy5zaXplKCkpOwotICAgIHNwYWNlQ2hhcmFjdGVycy5maWxsKC0xKTsKLQotICAg
IGNvbnN0IGZsb2F0IGNMb2dpY2FsU2NhbGUgPSBmb250RGF0YS0+cGxhdGZvcm1EYXRhKCkudXNl
R0RJKCkgPyAxLjBmIDogMzIuMGY7Ci0gICAgZmxvYXQgc3BhY2VXaWR0aCA9IGZvbnREYXRhLT5z
cGFjZVdpZHRoKCkgLSBmb250RGF0YS0+c3ludGhldGljQm9sZE9mZnNldCgpOwotICAgIHVuc2ln
bmVkIGxvZ2ljYWxTcGFjZVdpZHRoID0gc3BhY2VXaWR0aCAqIGNMb2dpY2FsU2NhbGU7Ci0KLSAg
ICBmb3IgKGludCBrID0gMDsgayA8IGxlbjsgaysrKSB7Ci0gICAgICAgIFVDaGFyIGNoID0gKihz
dHIgKyBrKTsKLSAgICAgICAgYm9vbCB0cmVhdEFzU3BhY2UgPSBGb250Q2FzY2FkZTo6dHJlYXRB
c1NwYWNlKGNoKTsKLSAgICAgICAgYm9vbCB0cmVhdEFzWmVyb1dpZHRoU3BhY2UgPSBGb250Q2Fz
Y2FkZTo6dHJlYXRBc1plcm9XaWR0aFNwYWNlKGNoKTsKLSAgICAgICAgaWYgKHRyZWF0QXNTcGFj
ZSB8fCB0cmVhdEFzWmVyb1dpZHRoU3BhY2UpIHsKLSAgICAgICAgICAgIC8vIFN1YnN0aXR1dGUg
aW4gdGhlIHNwYWNlIGdseXBoIGF0IHRoZSBhcHByb3ByaWF0ZSBwbGFjZSBpbiB0aGUgZ2x5cGhz
Ci0gICAgICAgICAgICAvLyBhcnJheS4KLSAgICAgICAgICAgIGdseXBoc1tjbHVzdGVyc1trXV0g
PSBmb250RGF0YS0+c3BhY2VHbHlwaCgpOwotICAgICAgICAgICAgYWR2YW5jZXNbY2x1c3RlcnNb
a11dID0gdHJlYXRBc1NwYWNlID8gbG9naWNhbFNwYWNlV2lkdGggOiAwOwotICAgICAgICAgICAg
aWYgKHRyZWF0QXNTcGFjZSkKLSAgICAgICAgICAgICAgICBzcGFjZUNoYXJhY3RlcnNbY2x1c3Rl
cnNba11dID0gbV9jdXJyZW50Q2hhcmFjdGVyICsgayArIGl0ZW0uaUNoYXJQb3M7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICAvLyBQb3B1bGF0ZSBvdXIgZ2x5cGggYnVmZmVyIHdpdGggdGhpcyBp
bmZvcm1hdGlvbi4KLSAgICBib29sIGhhc0V4dHJhU3BhY2luZyA9IG1fZm9udC5sZXR0ZXJTcGFj
aW5nKCkgfHwgbV9mb250LndvcmRTcGFjaW5nKCkgfHwgbV9wYWRkaW5nOwotICAgIAotICAgIGZs
b2F0IGxlZnRFZGdlID0gbV9ydW5XaWR0aFNvRmFyOwotCi0gICAgZm9yICh1bnNpZ25lZCBrID0g
MDsgayA8IGdseXBocy5zaXplKCk7IGsrKykgewotICAgICAgICBHbHlwaCBnbHlwaCA9IGdseXBo
c1trXTsKLSAgICAgICAgZmxvYXQgYWR2YW5jZSA9IGFkdmFuY2VzW2tdIC8gY0xvZ2ljYWxTY2Fs
ZTsKLSAgICAgICAgZmxvYXQgb2Zmc2V0WCA9IG9mZnNldHNba10uZHUgLyBjTG9naWNhbFNjYWxl
OwotICAgICAgICBmbG9hdCBvZmZzZXRZID0gb2Zmc2V0c1trXS5kdiAvIGNMb2dpY2FsU2NhbGU7
Ci0KLSAgICAgICAgLy8gTWF0Y2ggQXBwS2l0J3MgcnVsZXMgZm9yIHRoZSBpbnRlZ2VyIHZzLiBu
b24taW50ZWdlciByZW5kZXJpbmcgbW9kZXMuCi0gICAgICAgIGZsb2F0IHJvdW5kZWRBZHZhbmNl
ID0gcm91bmRmKGFkdmFuY2UpOwotICAgICAgICBpZiAoIWZvbnREYXRhLT5wbGF0Zm9ybURhdGEo
KS5pc1N5c3RlbUZvbnQoKSkgewotICAgICAgICAgICAgYWR2YW5jZSA9IHJvdW5kZWRBZHZhbmNl
OwotICAgICAgICAgICAgb2Zmc2V0WCA9IHJvdW5kZihvZmZzZXRYKTsKLSAgICAgICAgICAgIG9m
ZnNldFkgPSByb3VuZGYob2Zmc2V0WSk7Ci0gICAgICAgIH0KLQotICAgICAgICBhZHZhbmNlICs9
IGZvbnREYXRhLT5zeW50aGV0aWNCb2xkT2Zmc2V0KCk7Ci0KLSAgICAgICAgaWYgKGhhc0V4dHJh
U3BhY2luZykgewotICAgICAgICAgICAgLy8gSWYgd2UncmUgYSBnbHlwaCB3aXRoIGFuIGFkdmFu
Y2UsIGdvIGFoZWFkIGFuZCBhZGQgaW4gbGV0dGVyLXNwYWNpbmcuCi0gICAgICAgICAgICAvLyBU
aGF0IHdheSB3ZSB3ZWVkIG91dCB6ZXJvIHdpZHRoIGx1cmtlcnMuICBUaGlzIGJlaGF2aW9yIG1h
dGNoZXMgdGhlIGZhc3QgdGV4dCBjb2RlIHBhdGguCi0gICAgICAgICAgICBpZiAoYWR2YW5jZSAm
JiBtX2ZvbnQubGV0dGVyU3BhY2luZygpKQotICAgICAgICAgICAgICAgIGFkdmFuY2UgKz0gbV9m
b250LmxldHRlclNwYWNpbmcoKTsKLQotICAgICAgICAgICAgLy8gSGFuZGxlIGp1c3RpZmljYXRp
b24gYW5kIHdvcmQtc3BhY2luZy4KLSAgICAgICAgICAgIGludCBjaGFyYWN0ZXJJbmRleCA9IHNw
YWNlQ2hhcmFjdGVyc1trXTsKLSAgICAgICAgICAgIC8vIGNoYXJhY3RlckluZGV4IGlzIGxlZnQg
YXQgdGhlIGluaXRpYWwgdmFsdWUgb2YgLTEgZm9yIGdseXBocyB0aGF0IGRvIG5vdCBtYXAgYmFj
ayB0byB0cmVhdGVkLWFzLXNwYWNlIGNoYXJhY3RlcnMuCi0gICAgICAgICAgICBpZiAoY2hhcmFj
dGVySW5kZXggIT0gLTEpIHsKLSAgICAgICAgICAgICAgICAvLyBBY2NvdW50IGZvciBwYWRkaW5n
LiBXZWJDb3JlIHVzZXMgc3BhY2UgcGFkZGluZyB0byBqdXN0aWZ5IHRleHQuCi0gICAgICAgICAg
ICAgICAgLy8gV2UgZGlzdHJpYnV0ZSB0aGUgc3BlY2lmaWVkIHBhZGRpbmcgb3ZlciB0aGUgYXZh
aWxhYmxlIHNwYWNlcyBpbiB0aGUgcnVuLgotICAgICAgICAgICAgICAgIGlmIChtX3BhZGRpbmcp
IHsKLSAgICAgICAgICAgICAgICAgICAgLy8gVXNlIGxlZnRvdmVyIHBhZGRpbmcgaWYgbm90IGV2
ZW5seSBkaXZpc2libGUgYnkgbnVtYmVyIG9mIHNwYWNlcy4KLSAgICAgICAgICAgICAgICAgICAg
aWYgKG1fcGFkZGluZyA8IG1fcGFkUGVyU3BhY2UpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGFkdmFuY2UgKz0gbV9wYWRkaW5nOwotICAgICAgICAgICAgICAgICAgICAgICAgbV9wYWRkaW5n
ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG1fcGFkZGluZyAtPSBtX3BhZFBlclNwYWNlOwotICAgICAgICAgICAgICAgICAgICAgICAg
YWR2YW5jZSArPSBtX3BhZFBlclNwYWNlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gQWNjb3VudCBmb3Igd29yZC1zcGFjaW5n
LgotICAgICAgICAgICAgICAgIGlmIChjaGFyYWN0ZXJJbmRleCA+IDAgJiYgbV9mb250LndvcmRT
cGFjaW5nKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgVUNoYXIgY2FuZGlkYXRlU3BhY2U7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChtX3J1bi5pczhCaXQoKSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGNhbmRpZGF0ZVNwYWNlID0gKihtX3J1bi5kYXRhOChjaGFyYWN0ZXJJbmRleCAtIDEp
KTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgY2Fu
ZGlkYXRlU3BhY2UgPSAqKG1fcnVuLmRhdGExNihjaGFyYWN0ZXJJbmRleCAtIDEpKTsKLQotICAg
ICAgICAgICAgICAgICAgICBpZiAoIUZvbnRDYXNjYWRlOjp0cmVhdEFzU3BhY2UoY2FuZGlkYXRl
U3BhY2UpKQotICAgICAgICAgICAgICAgICAgICAgICAgYWR2YW5jZSArPSBtX2ZvbnQud29yZFNw
YWNpbmcoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQot
ICAgICAgICBtX3J1bldpZHRoU29GYXIgKz0gYWR2YW5jZTsKLQotICAgICAgICAvLyBGSVhNRTog
V2UgbmVlZCB0byB0YWtlIHRoZSBHT0ZGU0VUUyBmb3IgY29tYmluaW5nIGdseXBocyBhbmQgc3Rv
cmUgdGhlbSBpbiB0aGUgZ2x5cGggYnVmZmVyCi0gICAgICAgIC8vIGFzIHdlbGwsIHNvIHRoYXQg
d2hlbiB0aGUgdGltZSBjb21lcyB0byBkcmF3IHRob3NlIGdseXBocywgd2UgY2FuIGFwcGx5IHRo
ZSBhcHByb3ByaWF0ZQotICAgICAgICAvLyB0cmFuc2xhdGlvbi4KLSAgICAgICAgaWYgKGdseXBo
QnVmZmVyKSB7Ci0gICAgICAgICAgICBHbHlwaEJ1ZmZlckFkdmFuY2Ugb3JpZ2luKG9mZnNldFgs
IC1vZmZzZXRZKTsKLSAgICAgICAgICAgIGlmICghZ2x5cGhCdWZmZXItPmFkdmFuY2VzQ291bnQo
KSkKLSAgICAgICAgICAgICAgICBnbHlwaEJ1ZmZlci0+c2V0SW5pdGlhbEFkdmFuY2Uob3JpZ2lu
KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBnbHlwaEJ1ZmZlci0+ZXhwYW5k
TGFzdEFkdmFuY2Uob3JpZ2luKTsKLSAgICAgICAgICAgIEdseXBoQnVmZmVyQWR2YW5jZSBnbHlw
aEFkdmFuY2UoLW9yaWdpbi53aWR0aCgpICsgYWR2YW5jZSwgLW9yaWdpbi5oZWlnaHQoKSk7Ci0g
ICAgICAgICAgICBnbHlwaEJ1ZmZlci0+YWRkKGdseXBoLCBmb250RGF0YSwgZ2x5cGhBZHZhbmNl
LCBzdHJpbmdPZmZzZXRzW2tdLnZhbHVlT3IoMCkgKyBzdHJpbmdPZmZzZXQpOwotICAgICAgICB9
Ci0KLSAgICAgICAgRmxvYXRSZWN0IGdseXBoQm91bmRzID0gZm9udERhdGEtPmJvdW5kc0Zvckds
eXBoKGdseXBoKTsKLSAgICAgICAgZ2x5cGhCb3VuZHMubW92ZShtX2dseXBoT3JpZ2luLngoKSwg
bV9nbHlwaE9yaWdpbi55KCkpOwotICAgICAgICBtX21pbkdseXBoQm91bmRpbmdCb3hYID0gc3Rk
OjptaW4obV9taW5HbHlwaEJvdW5kaW5nQm94WCwgZ2x5cGhCb3VuZHMueCgpKTsKLSAgICAgICAg
bV9tYXhHbHlwaEJvdW5kaW5nQm94WCA9IHN0ZDo6bWF4KG1fbWF4R2x5cGhCb3VuZGluZ0JveFgs
IGdseXBoQm91bmRzLm1heFgoKSk7Ci0gICAgICAgIG1fbWluR2x5cGhCb3VuZGluZ0JveFkgPSBz
dGQ6Om1pbihtX21pbkdseXBoQm91bmRpbmdCb3hZLCBnbHlwaEJvdW5kcy55KCkpOwotICAgICAg
ICBtX21heEdseXBoQm91bmRpbmdCb3hZID0gc3RkOjptYXgobV9tYXhHbHlwaEJvdW5kaW5nQm94
WSwgZ2x5cGhCb3VuZHMubWF4WSgpKTsKLSAgICAgICAgbV9nbHlwaE9yaWdpbi5tb3ZlKGFkdmFu
Y2UgKyBvZmZzZXRYLCAtb2Zmc2V0WSk7Ci0KLSAgICAgICAgLy8gTXV0YXRlIHRoZSBnbHlwaCBh
cnJheSB0byBjb250YWluIG91ciBhbHRlcmVkIGFkdmFuY2VzLgotICAgICAgICBpZiAobV9jb21w
dXRpbmdPZmZzZXRQb3NpdGlvbikKLSAgICAgICAgICAgIGFkdmFuY2VzW2tdID0gYWR2YW5jZTsK
LSAgICB9Ci0KLSAgICB3aGlsZSAobV9jb21wdXRpbmdPZmZzZXRQb3NpdGlvbiAmJiBtX29mZnNl
dFggPj0gbGVmdEVkZ2UgJiYgbV9vZmZzZXRYIDwgbV9ydW5XaWR0aFNvRmFyKSB7Ci0gICAgICAg
IC8vIFRoZSBwb3NpdGlvbiBpcyBzb21ld2hlcmUgaW5zaWRlIHRoaXMgcnVuLgotICAgICAgICBp
bnQgdHJhaWxpbmcgPSAwOwotICAgICAgICBIUkVTVUxUIHJjID0gOjpTY3JpcHRYdG9DUChtX29m
ZnNldFggLSBsZWZ0RWRnZSwgY2x1c3RlcnMuc2l6ZSgpLCBnbHlwaHMuc2l6ZSgpLCBjbHVzdGVy
cy5kYXRhKCksIHZpc3VhbEF0dHJpYnV0ZXMuZGF0YSgpLAotICAgICAgICAgICAgICAgICAgICBh
ZHZhbmNlcy5kYXRhKCksICZpdGVtLmEsICZtX29mZnNldFBvc2l0aW9uLCAmdHJhaWxpbmcpOwot
ICAgICAgICBpZiAoRkFJTEVEKHJjKSkgewotICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCJVbmlz
Y3JpYmVDb250cm9sbGVyOjpzaGFwZUFuZFBsYWNlSXRlbTogU2NyaXB0WHRvQ1AgZmFpbGVkIHJj
PSVseCIsIHJjKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAg
IGlmICh0cmFpbGluZyAmJiBtX2luY2x1ZGVQYXJ0aWFsR2x5cGhzICYmIG1fb2Zmc2V0UG9zaXRp
b24gPCBsZW4gLSAxKSB7Ci0gICAgICAgICAgICBtX29mZnNldFBvc2l0aW9uICs9IG1fY3VycmVu
dENoYXJhY3RlciArIG1faXRlbXNbaV0uaUNoYXJQb3M7Ci0gICAgICAgICAgICBtX29mZnNldFgg
Kz0gbV9ydW4ucnRsKCkgPyAtdHJhaWxpbmcgOiB0cmFpbGluZzsKLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIG1fY29tcHV0aW5nT2Zmc2V0UG9zaXRpb24gPSBmYWxzZTsKLSAgICAgICAg
ICAgIG1fb2Zmc2V0UG9zaXRpb24gKz0gbV9jdXJyZW50Q2hhcmFjdGVyICsgbV9pdGVtc1tpXS5p
Q2hhclBvczsKLSAgICAgICAgICAgIGlmICh0cmFpbGluZyAmJiBtX2luY2x1ZGVQYXJ0aWFsR2x5
cGhzKQotICAgICAgICAgICAgICAgbV9vZmZzZXRQb3NpdGlvbisrOwotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJv
b2wgVW5pc2NyaWJlQ29udHJvbGxlcjo6c2hhcGUoY29uc3QgVUNoYXIqIHN0ciwgaW50IGxlbiwg
U0NSSVBUX0lURU0gaXRlbSwgY29uc3QgRm9udCogZm9udERhdGEsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFZlY3RvcjxXT1JEPiYgZ2x5cGhzLCBWZWN0b3I8V09SRD4mIGNsdXN0
ZXJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8U0NSSVBUX1ZJU0FU
VFI+JiB2aXN1YWxBdHRyaWJ1dGVzKQotewotICAgIEhXbmREQyBoZGM7Ci0gICAgSEZPTlQgb2xk
Rm9udCA9IDA7Ci0gICAgSFJFU1VMVCBzaGFwZVJlc3VsdCA9IEVfUEVORElORzsKLSAgICBpbnQg
Z2x5cGhDb3VudCA9IDA7Ci0KLSAgICBpZiAoIWZvbnREYXRhKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBkbyB7Ci0gICAgICAgIHNoYXBlUmVzdWx0ID0gU2NyaXB0U2hhcGUoaGRjLCBm
b250RGF0YS0+c2NyaXB0Q2FjaGUoKSwgd2NoYXJGcm9tKHN0ciksIGxlbiwgZ2x5cGhzLnNpemUo
KSwgJml0ZW0uYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaHMuZGF0
YSgpLCBjbHVzdGVycy5kYXRhKCksIHZpc3VhbEF0dHJpYnV0ZXMuZGF0YSgpLCAmZ2x5cGhDb3Vu
dCk7Ci0gICAgICAgIGlmIChzaGFwZVJlc3VsdCA9PSBFX1BFTkRJTkcpIHsKLSAgICAgICAgICAg
IC8vIFRoZSBzY3JpcHQgY2FjaGUgaXNuJ3QgcHJpbWVkIHdpdGggZW5vdWdoIGluZm8geWV0LiAg
V2UgbmVlZCB0byBzZWxlY3Qgb3VyIEhGT05UIGludG8KLSAgICAgICAgICAgIC8vIGEgREMgYW5k
IHBhc3MgdGhlIERDIGluIHRvIFNjcmlwdFNoYXBlLgotICAgICAgICAgICAgQVNTRVJUKCFoZGMp
OwotICAgICAgICAgICAgaGRjLnNldEhXbmQoMCk7Ci0gICAgICAgICAgICBIRk9OVCBoZm9udCA9
IGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5oZm9udCgpOwotICAgICAgICAgICAgb2xkRm9udCA9
IChIRk9OVClTZWxlY3RPYmplY3QoaGRjLCBoZm9udCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoc2hh
cGVSZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkgewotICAgICAgICAgICAgLy8gTmVlZCB0byByZXNp
emUgb3VyIGJ1ZmZlcnMuCi0gICAgICAgICAgICBnbHlwaHMucmVzaXplKGdseXBocy5zaXplKCkg
KiAyKTsKLSAgICAgICAgICAgIHZpc3VhbEF0dHJpYnV0ZXMucmVzaXplKGdseXBocy5zaXplKCkp
OwotICAgICAgICB9Ci0gICAgfSB3aGlsZSAoc2hhcGVSZXN1bHQgPT0gRV9QRU5ESU5HIHx8IHNo
YXBlUmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOwotCi0gICAgaWYgKGhkYykKLSAgICAgICAgU2Vs
ZWN0T2JqZWN0KGhkYywgb2xkRm9udCk7Ci0KLSAgICBpZiAoRkFJTEVEKHNoYXBlUmVzdWx0KSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZ2x5cGhzLnNocmluayhnbHlwaENvdW50KTsK
LSAgICB2aXN1YWxBdHRyaWJ1dGVzLnNocmluayhnbHlwaENvdW50KTsKLQotICAgIHJldHVybiB0
cnVlOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vVW5pc2NyaWJlQ29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL1VuaXNjcmliZUNvbnRyb2xsZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggYTQ2MjRjNzlhMDgwODMzMjBhNTI3MzVkZTExZGM5NGE4YmM0ZmYwMS4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vVW5pc2NyaWJlQ29udHJvbGxlci5oCisrKyAvZGV2L251bGwKQEAg
LTEsOTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSwgMjAx
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgVW5p
c2NyaWJlQ29udHJvbGxlcl9oCi0jZGVmaW5lIFVuaXNjcmliZUNvbnRyb2xsZXJfaAotCi0jaW5j
bHVkZSAiRm9udENhc2NhZGUuaCIKLSNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgotI2luY2x1ZGUg
PHVzcDEwLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLWNsYXNzIFVuaXNjcmliZUNvbnRyb2xsZXIgewotcHVibGljOgotICAgIFVuaXNjcmliZUNv
bnRyb2xsZXIoY29uc3QgRm9udENhc2NhZGUqLCBjb25zdCBUZXh0UnVuJiwgSGFzaFNldDxjb25z
dCBGb250Kj4qIGZhbGxiYWNrRm9udHMgPSAwKTsKLQotICAgIC8vIEFkdmFuY2UgYW5kIG1lYXN1
cmUvcGxhY2UgdXAgdG8gdGhlIHNwZWNpZmllZCBjaGFyYWN0ZXIuCi0gICAgdm9pZCBhZHZhbmNl
KHVuc2lnbmVkIHRvLCBHbHlwaEJ1ZmZlciogPSAwKTsKLQotICAgIC8vIENvbXB1dGUgdGhlIGNo
YXJhY3RlciBvZmZzZXQgZm9yIGEgZ2l2ZW4geCBjb29yZGluYXRlLgotICAgIGludCBvZmZzZXRG
b3JQb3NpdGlvbihpbnQgeCwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocyk7Ci0KLSAgICAvLyBS
ZXR1cm5zIHRoZSB3aWR0aCBvZiBldmVyeXRoaW5nIHdlJ3ZlIGNvbnN1bWVkIHNvIGZhci4KLSAg
ICBmbG9hdCBydW5XaWR0aFNvRmFyKCkgY29uc3QgeyByZXR1cm4gbV9ydW5XaWR0aFNvRmFyOyB9
Ci0KLSAgICBmbG9hdCBtaW5HbHlwaEJvdW5kaW5nQm94WCgpIGNvbnN0IHsgcmV0dXJuIG1fbWlu
R2x5cGhCb3VuZGluZ0JveFg7IH0KLSAgICBmbG9hdCBtYXhHbHlwaEJvdW5kaW5nQm94WCgpIGNv
bnN0IHsgcmV0dXJuIG1fbWF4R2x5cGhCb3VuZGluZ0JveFg7IH0KLSAgICBmbG9hdCBtaW5HbHlw
aEJvdW5kaW5nQm94WSgpIGNvbnN0IHsgcmV0dXJuIG1fbWluR2x5cGhCb3VuZGluZ0JveFk7IH0K
LSAgICBmbG9hdCBtYXhHbHlwaEJvdW5kaW5nQm94WSgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4R2x5
cGhCb3VuZGluZ0JveFk7IH0KLQotcHJpdmF0ZTogICAgCi0gICAgdm9pZCByZXNldENvbnRyb2xB
bmRTdGF0ZSgpOwotCi0gICAgdm9pZCBpdGVtaXplU2hhcGVBbmRQbGFjZShjb25zdCBVQ2hhcios
IHVuc2lnbmVkIHN0cmluZ09mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBGb250KiwgR2x5
cGhCdWZmZXIqKTsKLSAgICBib29sIHNoYXBlQW5kUGxhY2VJdGVtKGNvbnN0IFVDaGFyKiwgdW5z
aWduZWQgc3RyaW5nT2Zmc2V0LCB1bnNpZ25lZCBpbmRleCwgY29uc3QgRm9udCosIEdseXBoQnVm
ZmVyKik7Ci0gICAgYm9vbCBzaGFwZShjb25zdCBVQ2hhciogc3RyLCBpbnQgbGVuLCBTQ1JJUFRf
SVRFTSwgY29uc3QgRm9udCosCi0gICAgICAgICAgICAgICBWZWN0b3I8V09SRD4mIGdseXBocywg
VmVjdG9yPFdPUkQ+JiBjbHVzdGVycywKLSAgICAgICAgICAgICAgIFZlY3RvcjxTQ1JJUFRfVklT
QVRUUj4mIHZpc3VhbEF0dHJpYnV0ZXMpOwotCi0gICAgY29uc3QgRm9udENhc2NhZGUmIG1fZm9u
dDsKLSAgICBjb25zdCBUZXh0UnVuJiBtX3J1bjsKLSAgICBIYXNoU2V0PGNvbnN0IEZvbnQqPiog
bV9mYWxsYmFja0ZvbnRzOwotICAgIEZsb2F0UG9pbnQgbV9nbHlwaE9yaWdpbjsKLSAgICBmbG9h
dCBtX21pbkdseXBoQm91bmRpbmdCb3hYOwotICAgIGZsb2F0IG1fbWF4R2x5cGhCb3VuZGluZ0Jv
eFg7Ci0gICAgZmxvYXQgbV9taW5HbHlwaEJvdW5kaW5nQm94WTsKLSAgICBmbG9hdCBtX21heEds
eXBoQm91bmRpbmdCb3hZOwotCi0gICAgU0NSSVBUX0NPTlRST0wgbV9jb250cm9sOwotICAgIFND
UklQVF9TVEFURSBtX3N0YXRlOwotICAgIFZlY3RvcjxTQ1JJUFRfSVRFTT4gbV9pdGVtczsKLSAK
LSAgICB1bnNpZ25lZCBtX2N1cnJlbnRDaGFyYWN0ZXI7Ci0gICAgaW50IG1fZW5kOwotCi0gICAg
ZmxvYXQgbV9ydW5XaWR0aFNvRmFyOwotICAgIGZsb2F0IG1fcGFkZGluZzsKLSAgICBmbG9hdCBt
X3BhZFBlclNwYWNlOwotCi0gICAgYm9vbCBtX2NvbXB1dGluZ09mZnNldFBvc2l0aW9uOwotICAg
IGJvb2wgbV9pbmNsdWRlUGFydGlhbEdseXBoczsKLSAgICBmbG9hdCBtX29mZnNldFg7Ci0gICAg
aW50IG1fb2Zmc2V0UG9zaXRpb247Ci19OwotCi19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1Rvb2xz
L0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAyMzlhYjE1YWJiNWU5OTNmMTYyMTAz
ZTMyNDJmZDA3NjBkNGZlMjA5Li5iOTZjMjYwODBkZjE5MGFmMGE5YjVmZDc3MjcwN2YzOTI2YmU4
ZmM3IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTIgQEAKKzIwMjAtMDEtMDkgIEZ1amlpIEhpcm9ub3JpICA8SGlyb25vcmkuRnVq
aWlAc29ueS5jb20+CisKKyAgICAgICAgW1dpbl0gVXNlIENvbXBsZXhUZXh0Q29udHJvbGxlciBp
bnN0ZWFkIG9mIFVuaXNjcmliZUNvbnRyb2xsZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNDg4NAorCisgICAgICAgIFJldmlld2VkIGJ5IEJyZW50
IEZ1bGdoYW0uCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29tcGxl
eFRleHRDb250cm9sbGVyLmNwcDogRW5hYmxlZCB0aGVzZSB0ZXN0cyBmb3IgUExBVEZPUk0oV0lO
KS4KKwogMjAyMC0wMS0wOSAgRGF2aWQgS2lsemVyICA8ZGRraWx6ZXJAYXBwbGUuY29tPgogCiAg
ICAgICAgIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUxpYnJhcnlQYXRoRm9yVGVzdGluZygpIHJl
dHVybnMgaW5uZXIgcG9pbnRlciB0byBhdXRvcmVsZWFzZWQgTlNTdHJpbmcKZGlmZiAtLWdpdCBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db21wbGV4VGV4dENvbnRyb2xsZXIu
Y3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbXBsZXhUZXh0Q29udHJv
bGxlci5jcHAKaW5kZXggOTNmZTkwZTlkOWQxN2MzMTQ2NTZlZTYyMGU4ZTNlNmYyYTA5N2ZjYy4u
OTI2OGVmYjY4M2JlZjUxNTY2NjhhMTk3ODU5ZTY1NGZlYTcxM2QwYSAxMDA2NDQKLS0tIGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAK
KysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbXBsZXhUZXh0Q29udHJv
bGxlci5jcHAKQEAgLTI1LDggKzI1LDYgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogCi0jaWYg
IVBMQVRGT1JNKFdJTikKLQogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luaXRpYWxpemVUaHJl
YWRpbmcuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0NvbXBsZXhUZXh0Q29udHJvbGxlci5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvRm9udENhc2NhZGUuaD4KQEAgLTM2Nyw1ICszNjUsMyBAQCBURVNUX0Yo
Q29tcGxleFRleHRDb250cm9sbGVyVGVzdCwgVG90YWxXaWR0aFdpdGhKdXN0aWZpY2F0aW9uKQog
fQogCiB9Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGE1YmMwNDNhMjI2YTdiZWU1YzYwNjViM2EzNjM3YTdm
NGZhODA4MTQuLmQwYjkxNmQ5MTRjNGJkYzE2YjIyMjk4YzU0OTJlM2FmNmJlOWY5NDEgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxNCBAQAorMjAyMC0wMS0wOSAgRnVqaWkgSGlyb25vcmkgIDxIaXJvbm9yaS5G
dWppaUBzb255LmNvbT4KKworICAgICAgICBbV2luXSBVc2UgQ29tcGxleFRleHRDb250cm9sbGVy
IGluc3RlYWQgb2YgVW5pc2NyaWJlQ29udHJvbGxlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0ODg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQnJl
bnQgRnVsZ2hhbS4KKworICAgICAgICAqIHBsYXRmb3JtL3dpbi9UZXN0RXhwZWN0YXRpb25zOgor
ICAgICAgICAqIHBsYXRmb3JtL3dpbi9mYXN0L3RleHQvanVzdGlmeS1pZGVvZ3JhcGgtY29tcGxl
eC1leHBlY3RlZC50eHQ6IFJlYmFzZWxpbmVkLgorICAgICAgICAqIHBsYXRmb3JtL3dpbmNhaXJv
L1Rlc3RFeHBlY3RhdGlvbnM6CisKIDIwMjAtMDEtMDkgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hh
bUBhcHBsZS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTiAocjI1MzY2Mik6IExhcmdlIERhdGEg
VVJMcyBhcmUgbm90IGJlaW5nIGhhbmRsZWQgcHJvcGVybHkKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3BsYXRmb3JtL3dpbi9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
d2luL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggZGEzNTRlZjNjZDYwZWUwODEzYjI3NGNmN2FmNTBm
MWI2YWUxMmZmMi4uOTQ5ZTFkYTdlZmNkMzY0NzQwYjc0ZDkxNGQ3ZjQyZmUyZmZkZmUyOSAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTI5NjUsNiArMjk2
NSw4IEBAIHdlYmtpdC5vcmcvYi8xNTE3NTkgZmFzdC9kb20vV2luZG93L3Byb3BlcnR5LWFjY2Vz
cy1vbi1jYWNoZWQtd2luZG93LWFmdGVyLWZyYW1lCiAKIHdlYmtpdC5vcmcvYi8xNTIwMDkgZmFz
dC9jYW52YXMvY2FudmFzLXRvby1sYXJnZS10by1kcmF3Lmh0bWwgWyBTa2lwIF0KIAorZmFzdC90
ZXh0L2FyYWJpYy16d2otYW5kLXp3bmouaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQorCiAjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBFbmQgbGlzdCBv
ZiBVTlJFVklFV0VEIGZhaWx1cmVzICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIwpAQCAtMzQyNiw2ICszNDI4LDcgQEAgZmFzdC90ZXh0L2NvbXBsZXgt
c21hbGwtY2Fwcy1ub24tYm1wLWNhcGl0YWxpemUuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQog
ZmFzdC90ZXh0L2N1cnNpdmUtemguaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQogZmFzdC90ZXh0
L2Vtb2ppLXNpbmdsZS1wYXJlbnQtZmFtaWx5LTIuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQog
ZmFzdC90ZXh0L2Vtb2ppLXNpbmdsZS1wYXJlbnQtZmFtaWx5Lmh0bWwgWyBJbWFnZU9ubHlGYWls
dXJlIF0KK2Zhc3QvdGV4dC9lbW9qaS13aXRoLWpvaW5lci5odG1sIFsgRmFpbHVyZSBdCiBodHRw
L3Rlc3RzL3NlY3VyaXR5L2h0dHAtMC45L2ltYWdlLW9uLUhUVFAtMC45LWRlZmF1bHQtcG9ydC1w
YWdlLWFsbG93ZWQtcmVmLXRlc3QuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQogbWF0aG1sL3By
ZXNlbnRhdGlvbi9ub24tYm1wLW9wZXJhdG9ycy1zdHJldGNoaW5nLmh0bWwgWyBJbWFnZU9ubHlG
YWlsdXJlIF0KIHNlY3VyaXR5L2NvbnRlbnRTZWN1cml0eVBvbGljeS9pbWFnZS13aXRoLWJsb2It
dXJsLWFsbG93ZWQtYnktaW1nLXNyYy1zdGFyLXdpdGgtQWxsb3dDb250ZW50U2VjdXJpdHlQb2xp
Y3lTb3VyY2VTdGFyVG9NYXRjaEFueVByb3RvY29sLWVuYWJsZWQuaHRtbCBbIEltYWdlT25seUZh
aWx1cmUgXQpAQCAtNDUwNyw2ICs0NTEwLDkgQEAgd2Via2l0Lm9yZy9iLzIwNTI3MiBqcy9pbnRl
Z2VyLWRpdmlzaW9uLW5lZzJ0b3RoZTMyLWJ5LW5lZzEuaHRtbCBbIEZhaWx1cmUgXQogCiB3ZWJr
aXQub3JnL2IvMjA1MjczIGltcG9ydGVkL2JsaW5rL2Zhc3Qvc3ViLXBpeGVsL25lZ2F0aXZlLWNv
bXBvc2l0ZWQtb2Zmc2V0Lmh0bWwgWyBQYXNzIEltYWdlT25seUZhaWx1cmUgXQogCit3ZWJraXQu
b3JnL2IvMjA1NDg3IGZhc3QvdGV4dC9zZWxlY3Rpb24taW4taW5pdGlhbC1hZHZhbmNlLXJlZ2lv
bi5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjA1NDg1IGZhc3QvdGV4dC9zdGFsZS1U
ZXh0TGF5b3V0LWZyb20tZmlyc3QtbGluZS5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCisKIHdl
YmtpdC5vcmcvYi8yMDU4NTUgaHR0cC93cHQvY3NzL2Nzcy1oaWdobGlnaHQtYXBpL2hpZ2hsaWdo
dC10ZXh0LWFjcm9zcy1lbGVtZW50cy5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCiB3ZWJraXQu
b3JnL2IvMjA1ODU1IGh0dHAvd3B0L2Nzcy9jc3MtaGlnaGxpZ2h0LWFwaS9oaWdobGlnaHQtdGV4
dC1jYXNjYWRlLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi8yMDU4NTUg
aHR0cC93cHQvY3NzL2Nzcy1oaWdobGlnaHQtYXBpL2hpZ2hsaWdodC10ZXh0LXJlcGxhY2UuaHRt
bCBbIEltYWdlT25seUZhaWx1cmUgXQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
d2luL2Zhc3QvdGV4dC9qdXN0aWZ5LWlkZW9ncmFwaC1jb21wbGV4LWV4cGVjdGVkLnR4dCBiL0xh
eW91dFRlc3RzL3BsYXRmb3JtL3dpbi9mYXN0L3RleHQvanVzdGlmeS1pZGVvZ3JhcGgtY29tcGxl
eC1leHBlY3RlZC50eHQKaW5kZXggZjEwMTk0MjQzNTUyZTg1N2ZhNTE5OWFhMmFmZDg2OTFmZTdm
NzYwNy4uYWQ4NTY0MzEwOTFhNTU2MDU2YzBkODk2MDFiMDljNmVmYWZkZjcxOSAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL2Zhc3QvdGV4dC9qdXN0aWZ5LWlkZW9ncmFwaC1j
b21wbGV4LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vZmFzdC90
ZXh0L2p1c3RpZnktaWRlb2dyYXBoLWNvbXBsZXgtZXhwZWN0ZWQudHh0CkBAIC0xNiw4ICsxNiw4
IEBAIGxheWVyIGF0ICgwLDApIHNpemUgODAweDYwMAogICAgICAgICAgIHRleHQgcnVuIGF0ICgw
LDMwKSB3aWR0aCAzODI6ICJceHs1MTJBfVx4ezc1NzB9XHh7NzY4NH1ceHs4ODRDfVx4ezUyRDV9
XHh7NjFDOX1ceHs3NTI4fVx4ezdBMEJ9XHh7NUYwRn1ceHs1RTczfVx4ezUzRjB9XHh7RkYwQ31c
eHs1QkEyfVx4ezYyMzZ9XHh7NEU1Rn1ceHs5NzVFfVx4ezVFMzh9XHh7NTU5Q31ceHs2MTFCfVx4
ezk1OEJ9XHh7NzY3Q31ceHs0RUJBfVx4ezU0RTF9XHh7NjI0MH1ceHs1Mjc1fVx4ezRGNUN9XHh7
NzY4NH1ceHs2MUM5fVx4ezc1Mjh9XHh7N0EwQn1ceHs1RjBGfVx4ezMwMDJ9XHh7MzAwRH0iCiAg
ICAgICBSZW5kZXJCbG9jayB7UH0gYXQgKDAsMTI5KSBzaXplIDU1MHg0NQogICAgICAgICBSZW5k
ZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSA1NTB4NDUKLSAgICAgICAgICB0ZXh0IHJ1biBh
dCAoMCwwKSB3aWR0aCA1NTA6ICJFQSBNb2JpbGUgXHh7NzY4NH0gV29ybGR3aWRlIFN0dWRpb3Mg
XHh7NTI2Rn1ceHs3RTNEfVx4ezg4QzF9IFRyYXZpcyBCb2F0bWFuIFx4ezYzMDd9XHh7NTFGQX1c
eHtGRjFBfVx4ezMwMEN9QXBwIFN0b3JlIFx4ezRFMER9XHh7NTBDNX1ceHs1RkI5fVx4ezVFOTV9
XHh7NjUzOX1ceHs4QjhBfVx4ezRFODZ9XHh7ODg0Q31ceHs1MkQ1fVx4ezkwNEF9XHh7NjIzMn0i
Ci0gICAgICAgICAgdGV4dCBydW4gYXQgKDAsMTUpIHdpZHRoIDU1MDogIlx4ezc1MjJ9XHh7Njk2
RH1ceHs3Njg0fVx4ezc1MUZ9XHh7NjE0Qn1ceHtGRjBDfVx4ezgwMEN9XHh7NEUxNH1ceHs5MDg0
fVx4ezU3Mjh9XHh7NjMwMX1ceHs3RThDfVx4ezZGMTR9XHh7OTAzMn1ceHszMDAyfVx4ezY3MDl9
XHh7NEU4Nn1ceHs1MTY4fVx4ezc0MDN9IDUgXHh7NTM0M31ceHs1OTFBfVx4ezg0MkN9XHh7NzY4
NH0gaVBob25lIFx4ezU0OEN9IGlQb2QgdG91Y2ggXHh7NUJBMn1ceHs2MjM2fVx4ezcwQkF9XHh7
NTdGQX1ceHs3OTBFfVx4e0ZGMEN9QXBwIFN0b3JlIgorICAgICAgICAgIHRleHQgcnVuIGF0ICgw
LDApIHdpZHRoIDU1MDogIkVBIE1vYmlsZSBceHs3Njg0fSBXb3JsZHdpZGUgU3R1ZGlvcyBceHs1
MjZGfVx4ezdFM0R9XHh7ODhDMX0gVHJhdmlzIEJvYXRtYW4gXHh7NjMwN31ceHs1MUZBfVx4e0ZG
MUF9XHh7MzAwQ31BcHAgU3RvcmUgXHh7NEUwRH1ceHs1MEM1fVx4ezVGQjl9XHh7NUU5NX1ceHs2
NTM5fVx4ezhCOEF9XHh7NEU4Nn1ceHs4ODRDfVx4ezUyRDV9XHh7OTA0QX0iCisgICAgICAgICAg
dGV4dCBydW4gYXQgKDAsMTUpIHdpZHRoIDU1MDogIlx4ezYyMzJ9XHh7NzUyMn1ceHs2OTZEfVx4
ezc2ODR9XHh7NzUxRn1ceHs2MTRCfVx4e0ZGMEN9XHh7ODAwQ31ceHs0RTE0fVx4ezkwODR9XHh7
NTcyOH1ceHs2MzAxfVx4ezdFOEN9XHh7NkYxNH1ceHs5MDMyfVx4ezMwMDJ9XHh7NjcwOX1ceHs0
RTg2fVx4ezUxNjh9XHh7NzQwM30gNSBceHs1MzQzfVx4ezU5MUF9XHh7ODQyQ31ceHs3Njg0fSBp
UGhvbmUgXHh7NTQ4Q30gaVBvZCB0b3VjaCBceHs1QkEyfVx4ezYyMzZ9XHh7NzBCQX1ceHs1N0ZB
fVx4ezc5MEV9XHh7RkYwQ31BcHAgU3RvcmUiCiAgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMzAp
IHdpZHRoIDMwMTogIlx4ezhCOTN9XHh7NjIxMX1ceHs1MDExfVx4ezgwRkR9XHh7NTkyMH1ceHs5
NThCfVx4ezc2N0N9XHh7NTNEN31ceHs1MjMwfVx4ezVFRTN9XHh7NTkyN31ceHs3Njg0fVx4ezVC
QTJ9XHh7NjIzNn1ceHs1NTlDfVx4ezYxMUJ9XHh7NzY4NH1ceHs5QUQ4fVx4ezU0QzF9XHh7OENF
QX0gRUEgXHh7OTA0QX1ceHs2MjMyfVx4ezMwMDJ9XHh7MzAwRH0iCiAgICAgICBSZW5kZXJCbG9j
ayB7UH0gYXQgKDAsMTg2KSBzaXplIDU1MHg0NQogICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0g
YXQgKDAsMCkgc2l6ZSA1NTB4NDUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3dp
bmNhaXJvL1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW5jYWlyby9U
ZXN0RXhwZWN0YXRpb25zCmluZGV4IDAxYTUxMjJkNzgxMmFlMmZmOGE5NDI1NWUwMGU0YzRlYjk3
NDIxMjEuLmRkNzdjNGNiOThkOGEwZjU3YmUyNmViYjMwNGYxN2UwYmIwYTg3MTkgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbmNhaXJvL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luY2Fpcm8vVGVzdEV4cGVjdGF0aW9ucwpAQCAtODI5LDYg
KzgyOSw5IEBAIGZhc3QvZG9tL2ZvY3VzLXNoaWZ0LWNyYXNoLmh0bWwgWyBQYXNzIFRpbWVvdXQg
XQogZmFzdC9kb20vUmFuZ2UvZGV0YWNoLXJhbmdlLWR1cmluZy1kZWxldGVjb250ZW50cy5odG1s
IFsgUGFzcyBUaW1lb3V0IF0KIGltcG9ydGVkL2JsaW5rL2Zhc3QvZG9tL1dpbmRvdy9vcGVuLXdp
bmRvdy1mZWF0dXJlcy1mdXp6Lmh0bWwgWyBQYXNzIFRpbWVvdXQgXQogCit3ZWJraXQub3JnL2Iv
MjA1NDg3IGZhc3QvdGV4dC9zZWxlY3Rpb24taW4taW5pdGlhbC1hZHZhbmNlLXJlZ2lvbi5odG1s
IFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjA1NDg1IGZhc3QvdGV4dC9zdGFsZS1UZXh0TGF5
b3V0LWZyb20tZmlyc3QtbGluZS5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCisKICMvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KICMgaHR0cAogIy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLwpAQCAtMTExOSw3ICsxMTIyLDYgQEAgbGVnYWN5LWFuaW1hdGlvbi1lbmdp
bmUvY29tcG9zaXRpbmcvYmFja2luZy9iYWNraW5nLXN0b3JlLWF0dGFjaG1lbnQtZW1wdHkta2V5
ZnIKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKIHdlYmtpdC5vcmcvYi8xMTczMjIgZmFzdC9j
c3MvdGV4dC1pbmRlbnQtZmlyc3QtbGluZS0wMDYuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQot
d2Via2l0Lm9yZy9iLzExNzMyMiBmYXN0L2Nzcy93b3JkLXNwYWNpbmctY2hhcmFjdGVycy1jb21w
bGV4LXRleHQuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQogZmFzdC9jc3MvZ2V0Q29tcHV0ZWRT
dHlsZS9nZXRDb21wdXRlZFN0eWxlLW91dGxpbmUtc2hvcnRoYW5kLmh0bWwgWyBQYXNzIFRpbWVv
dXQgXQogd2Via2l0Lm9yZy9iLzEzNjQ4NCBmYXN0L2Nzcy1nZW5lcmF0ZWQtY29udGVudC9pbml0
aWFsLWxldHRlci1iYXNpYy5odG1sIFsgUGFzcyBGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi8xMzY0
ODQgZmFzdC9jc3MtZ2VuZXJhdGVkLWNvbnRlbnQvaW5pdGlhbC1sZXR0ZXItYm9yZGVyLXBhZGRp
bmcuaHRtbCBbIFBhc3MgRmFpbHVyZSBdCkBAIC0xNzE5LDE1ICsxNzIxLDEyIEBAIGZhc3QvdGV4
dC9jb21wbGV4LXNtYWxsLWNhcHMtbm9uLWJtcC1jYXBpdGFsaXplLmh0bWwgWyBJbWFnZU9ubHlG
YWlsdXJlIF0KIGZhc3QvdGV4dC9kZWNvcmF0aW9ucy12ZXJ0aWNhbC11bmRlcmxpbmUuaHRtbCBb
IEltYWdlT25seUZhaWx1cmUgXQogZmFzdC90ZXh0L2VsbGlwc2lzLXRleHQtcnRsLmh0bWwgWyBJ
bWFnZU9ubHlGYWlsdXJlIF0KIGZhc3QvdGV4dC9lbW9qaS1vdmVybGFwLmh0bWwgWyBJbWFnZU9u
bHlGYWlsdXJlIF0KLWZhc3QvdGV4dC9lbW9qaS1zaW5nbGUtcGFyZW50LWZhbWlseS0yLmh0bWwg
WyBJbWFnZU9ubHlGYWlsdXJlIF0KLWZhc3QvdGV4dC9lbW9qaS1zaW5nbGUtcGFyZW50LWZhbWls
eS5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCiBmYXN0L3RleHQvZW1vamktdmFyaWF0aW9uLXNl
bGVjdG9yLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KIGZhc3QvdGV4dC9lbW9qaS13aXRoLWpv
aW5lci5odG1sIFsgRmFpbHVyZSBdCiBmYXN0L3RleHQvZW1vamkuaHRtbCBbIEZhaWx1cmUgXQog
ZmFzdC90ZXh0L2VtcGhhc2lzLW92ZXJsYXAuaHRtbCBbIEZhaWx1cmUgXQogZmFzdC90ZXh0L2Zh
bGxiYWNrLWxhbmd1YWdlLWhhbi0yLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KIGZhc3QvdGV4
dC9mYWxsYmFjay10cmFpdHMtZml4dXAuaHRtbCBbIEZhaWx1cmUgXQotZmFzdC90ZXh0L2ZpdHpw
YXRyaWNrLWNvbWJpbmF0aW9uLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KIGZhc3QvdGV4dC9m
b250LWN1cnNpdmUtaXRhbGljLWNqay5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCiBmYXN0L3Rl
eHQvZm9udC1rZXJuaW5nLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KIGZhc3QvdGV4dC9mb250
LWxvYWQtZGF0YS1wYXJ0aXRpb25lZC1hbHBoYWJldC5odG1sIFsgRmFpbHVyZSBdCkBAIC0xNzU3
LDcgKzE3NTYsNiBAQCBmYXN0L3RleHQvanVzdGlmeS1pZGVvZ3JhcGgtY29tcGxleC5odG1sIFsg
RmFpbHVyZSBdCiBmYXN0L3RleHQvanVzdGlmeS1pZGVvZ3JhcGgtc2ltcGxlLmh0bWwgWyBGYWls
dXJlIF0KIGZhc3QvdGV4dC9qdXN0aWZ5LWlkZW9ncmFwaC12ZXJ0aWNhbC5odG1sIFsgRmFpbHVy
ZSBdCiBmYXN0L3RleHQvanVzdGlmeS1uYnNwLmh0bWwgWyBGYWlsdXJlIF0KLWZhc3QvdGV4dC9r
ZXJuaW5nLXdpdGgtVGV4dExheW91dC5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCiBmYXN0L3Rl
eHQva2htZXItbGFvLWZvbnQuaHRtbCBbIEZhaWx1cmUgXQogZmFzdC90ZXh0L2xpbmUtYnJlYWst
YmV0d2Vlbi10ZXh0LW5vZGVzLWxhdGluMS5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCiBmYXN0
L3RleHQvbGluZS1icmVhay1iZXR3ZWVuLXRleHQtbm9kZXMuaHRtbCBbIEltYWdlT25seUZhaWx1
cmUgXQpAQCAtMTc4NSw3ICsxNzgzLDYgQEAgZmFzdC90ZXh0L3NtYWxsLWxpbmUtaGVpZ2h0Lmh0
bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KIGZhc3QvdGV4dC9zb2Z0LWh5cGhlbi1hcy1maXJzdC1i
cmVha2luZy1vcHBvcnR1bml0eS5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCiBmYXN0L3RleHQv
c29mdC1oeXBoZW4tbWluLXByZWZlcnJlZC13aWR0aC5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBd
CiBmYXN0L3RleHQvc3BhY2Utd2lkdGguaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQotZmFzdC90
ZXh0L3N0YWxlLVRleHRMYXlvdXQtZnJvbS1maXJzdC1saW5lLmh0bWwgWyBJbWFnZU9ubHlGYWls
dXJlIF0KIGZhc3QvdGV4dC9zdmctZm9udC1mYWNlLXdpdGgta2VybmluZy5odG1sIFsgRmFpbHVy
ZSBdCiBmYXN0L3RleHQvc3ludGhldGljLWJvbGQtdHJhbnNmb3JtZWQuaHRtbCBbIEltYWdlT25s
eUZhaWx1cmUgXQogZmFzdC90ZXh0L3N5c3RlbS1mb250LWZhbGxiYWNrLWVtb2ppLmh0bWwgWyBG
YWlsdXJlIF0K
</data>

          </attachment>
      

    </bug>

</bugzilla>