<?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>37936</bug_id>
          
          <creation_ts>2010-04-21 11:25:32 -0700</creation_ts>
          <short_desc>REGRESSION: Memory usage increase caused by storing glyph bounds in GlyphMetricsMap</short_desc>
          <delta_ts>2010-04-28 21:24:26 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Text</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Adele Peterson">adele</reporter>
          <assigned_to name="Adele Peterson">adele</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric</cc>
    
    <cc>mitz</cc>
    
    <cc>ojan</cc>
    
    <cc>slewis</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>215423</commentid>
    <comment_count>0</comment_count>
    <who name="Adele Peterson">adele</who>
    <bug_when>2010-04-21 11:25:32 -0700</bug_when>
    <thetext>Memory usage increase caused by storing glyph bounds in GlyphMetricsMap

http://trac.webkit.org/changeset/57215

I&apos;m working on a fix for this</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>215428</commentid>
    <comment_count>1</comment_count>
      <attachid>53975</attachid>
    <who name="Adele Peterson">adele</who>
    <bug_when>2010-04-21 11:38:17 -0700</bug_when>
    <thetext>Created attachment 53975
preliminary patch

I&apos;m still testing the memory benefit here, but I&apos;d like to get preliminary review while I&apos;m confirming there&apos;s some memory usage benefit to this change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>215431</commentid>
    <comment_count>2</comment_count>
    <who name="Adele Peterson">adele</who>
    <bug_when>2010-04-21 11:39:48 -0700</bug_when>
    <thetext>&lt;rdar://problem/7855777&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>215437</commentid>
    <comment_count>3</comment_count>
      <attachid>53975</attachid>
    <who name="">mitz</who>
    <bug_when>2010-04-21 11:56:16 -0700</bug_when>
    <thetext>Comment on attachment 53975
preliminary patch

&gt; +        Break GlyphMetricsMap into GlyphBoundsMap and GlyphWidthMap.

One could make the case for making a template GlyphMetricsMap&lt;&gt; and having GlyphBoundsMap and GlyphWidthMap be instances of that template.

&gt; +        * platform/graphics/GlyphWidthMap.cpp: Copied from platform/graphics/GlyphMetricsMap.cpp.

Perhaps a more elegant way to represent this part of the change would be to resurrect the old GlyphWidthMap.{cpp,h} using SVN magic.

&gt; +        * platform/graphics/SimpleFontData.h: (WebCore::SimpleFontData::metricsForGlyph):
&gt; +        This method is only used by ComplexTextController, so we&apos;ll keep it, and add the GlyphMetrics struct
&gt; +        in this header file.

I think ComplexTextController should just fetch the width and the bounds separately. There’s little value in introducing the struct here (or anywhere).


&gt; -GlyphMetricsMap::GlyphMetricsPage* GlyphMetricsMap::locatePageSlowCase(unsigned pageNumber)
&gt; +    

Extra whitespace.

&gt; +    for (unsigned i = 0; i &lt; GlyphBoundsPage::size; i++)
&gt; +        page-&gt;setBoundsForIndex(i, unknownBounds);
&gt; +    

And here.


&gt; Index: WebCore/platform/graphics/GlyphBoundsMap.h
&gt; ===================================================================
&gt; --- WebCore/platform/graphics/GlyphBoundsMap.h	(revision 57946)
&gt; +++ WebCore/platform/graphics/GlyphBoundsMap.h	(working copy)

&gt; +    
&gt; +    typedef unsigned short Glyph;

Does this not conflict with the same typedef in GlyphWidthMap.h? Maybe it’s okay because they’re the same?

&gt; +    const float cGlyphSizeUnknown = -1;

And this?

&gt; Index: WebCore/platform/graphics/GlyphWidthMap.cpp
&gt; ===================================================================
&gt; --- WebCore/platform/graphics/GlyphWidthMap.cpp	(revision 57946)
&gt; +++ WebCore/platform/graphics/GlyphWidthMap.cpp	(working copy)

&gt;  namespace WebCore {

&gt; +    GlyphWidthMap::GlyphWidthPage* GlyphWidthMap::locatePageSlowCase(unsigned pageNumber)

We don’t indent for namespace in .cpp files.

&gt;  #include &quot;FontPlatformData.h&quot;
&gt; -#include &quot;GlyphMetricsMap.h&quot;
&gt; +#include &quot;GlyphBoundsMap.h&quot;
&gt; +#include &quot;GlyphWidthMap.h&quot;
&gt;  #include &quot;GlyphPageTreeNode.h&quot;

These are no longer sorted.

&gt; +struct GlyphMetrics {
&gt; +    float horizontalAdvance;
&gt; +    FloatRect boundingBox;
&gt; +};
&gt; +    

Extra whitespace there. Like I said, I don’t think this is needed.

&gt;  enum GlyphMetricsMode { GlyphBoundingBox, GlyphWidthOnly };

Or this.

&gt;      float widthForGlyph(Glyph glyph) const { return metricsForGlyph(glyph, GlyphWidthOnly).horizontalAdvance; }
&gt;      GlyphMetrics metricsForGlyph(Glyph, GlyphMetricsMode = GlyphBoundingBox) const;

Just replace this with FloatRect boundsForGlyph(…) const;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>215494</commentid>
    <comment_count>4</comment_count>
      <attachid>53975</attachid>
    <who name="Adele Peterson">adele</who>
    <bug_when>2010-04-21 14:10:53 -0700</bug_when>
    <thetext>Comment on attachment 53975
preliminary patch

OK will make changes and post a new patch.  Thanks, Dan!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>215551</commentid>
    <comment_count>5</comment_count>
    <who name="Stephanie Lewis">slewis</who>
    <bug_when>2010-04-21 16:12:07 -0700</bug_when>
    <thetext>This is trying to fix a memory regression on the Membuster test.  Google&apos;s page_cycler saw a similar regression from the same change. See http://bugs.webkit.org/show_bug.cgi?id=37292</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216224</commentid>
    <comment_count>6</comment_count>
      <attachid>54120</attachid>
    <who name="Adele Peterson">adele</who>
    <bug_when>2010-04-22 19:09:27 -0700</bug_when>
    <thetext>Created attachment 54120
patch

still need to test on Windows...and confirm memory win...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216226</commentid>
    <comment_count>7</comment_count>
      <attachid>54120</attachid>
    <who name="Adele Peterson">adele</who>
    <bug_when>2010-04-22 19:22:20 -0700</bug_when>
    <thetext>Comment on attachment 54120
patch

update for windows coming soon...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216232</commentid>
    <comment_count>8</comment_count>
      <attachid>54122</attachid>
    <who name="Adele Peterson">adele</who>
    <bug_when>2010-04-22 19:47:07 -0700</bug_when>
    <thetext>Created attachment 54122
patch

and one more time...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216236</commentid>
    <comment_count>9</comment_count>
      <attachid>54122</attachid>
    <who name="">mitz</who>
    <bug_when>2010-04-22 19:59:38 -0700</bug_when>
    <thetext>Comment on attachment 54122
patch

r=me pending perf measurements</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216579</commentid>
    <comment_count>10</comment_count>
    <who name="Stephanie Lewis">slewis</who>
    <bug_when>2010-04-23 15:04:49 -0700</bug_when>
    <thetext>This looks to have been an ~10 MB improvement on the regression, but I believe there is still some regression left.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216585</commentid>
    <comment_count>11</comment_count>
    <who name="Adele Peterson">adele</who>
    <bug_when>2010-04-23 15:17:30 -0700</bug_when>
    <thetext>Committed revision 58192.  Leaving this open until we have more test results.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>217558</commentid>
    <comment_count>12</comment_count>
      <attachid>54392</attachid>
    <who name="">mitz</who>
    <bug_when>2010-04-27 00:13:37 -0700</bug_when>
    <thetext>Created attachment 54392
Patch to further reduce memory use</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>217696</commentid>
    <comment_count>13</comment_count>
      <attachid>54392</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2010-04-27 07:31:21 -0700</bug_when>
    <thetext>Comment on attachment 54392
Patch to further reduce memory use

That&apos;s awesome! It&apos;s probably safe to assume there aren&apos;t any fonts that stupidly have a non-zero width zeroWidthSpace? What about ahem? I doubt we care for any real-world font though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218771</commentid>
    <comment_count>14</comment_count>
    <who name="">mitz</who>
    <bug_when>2010-04-28 19:58:00 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (From update of attachment 54392 [details])
&gt; It&apos;s probably safe to assume there aren&apos;t any fonts that
&gt; stupidly have a non-zero width zeroWidthSpace?

I don’t think that’s a safe assumption, which is why the code to force ZWS to have zero width was added in the first place (by me, if I remember correctly).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218772</commentid>
    <comment_count>15</comment_count>
      <attachid>54665</attachid>
    <who name="">mitz</who>
    <bug_when>2010-04-28 20:04:14 -0700</bug_when>
    <thetext>Created attachment 54665
Don’t store the width and bounds of the ZERO WIDTH SPACE glyph in the metrics maps</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218773</commentid>
    <comment_count>16</comment_count>
      <attachid>54665</attachid>
    <who name="Adele Peterson">adele</who>
    <bug_when>2010-04-28 20:06:43 -0700</bug_when>
    <thetext>Comment on attachment 54665
Don’t store the width and bounds of the ZERO WIDTH SPACE glyph in the metrics maps

&gt; +        (WebCore::SimpleFontData::platformGlyphInit): Set m_zeroWidthSpaceGlyph. Donât creat entries
typos!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218775</commentid>
    <comment_count>17</comment_count>
    <who name="">mitz</who>
    <bug_when>2010-04-28 20:16:09 -0700</bug_when>
    <thetext>Attachment 54665 committed as &lt;http://trac.webkit.org/projects/webkit/changeset/58467&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218783</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-28 20:55:41 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/58467 might have broken Leopard Intel Release (Tests)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218798</commentid>
    <comment_count>19</comment_count>
    <who name="">mitz</who>
    <bug_when>2010-04-28 21:24:26 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; http://trac.webkit.org/changeset/58467 might have broken Leopard Intel Release
&gt; (Tests)

Which I tried to fix in
&lt;http://trac.webkit.org/projects/webkit/changeset/58474&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53975</attachid>
            <date>2010-04-21 11:38:17 -0700</date>
            <delta_ts>2010-04-22 19:09:27 -0700</delta_ts>
            <desc>preliminary patch</desc>
            <filename>patch_4-21-10-glyph.txt</filename>
            <type>text/plain</type>
            <size>63493</size>
            <attacher name="Adele Peterson">adele</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1Nzk5NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNzQgQEAKKzIwMTAtMDQtMjEgIEFkZWxlIFBldGVyc29uICA8YWRlbGVAYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZp
eCBmb3IgPHJkYXI6Ly9wcm9ibGVtLzc4NTU3Nzc+IFJFR1JFU1NJT046IE1lbW9yeSB1c2FnZSBp
bmNyZWFzZSBjYXVzZWQgYnkgc3RvcmluZyBnbHlwaCBib3VuZHMgaW4gR2x5cGhNZXRyaWNzTWFw
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNzkzNgor
CisgICAgICAgIENvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdC4gIFNob3VsZCBub3QgY2F1c2UgYW55
IGNoYW5nZSBpbiBmdW5jdGlvbmFsaXR5LgorCisgICAgICAgIEFkZGVkIG5ldyBmaWxlcyB0byBi
dWlsZCBzeXN0ZW1zLgorICAgICAgICAqIEFuZHJvaWQubWs6CisgICAgICAgICogR05VbWFrZWZp
bGUuYW06CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKworICAgICAgICBCcmVhayBHbHlwaE1ldHJpY3NNYXAgaW50byBHbHlwaEJvdW5kc01h
cCBhbmQgR2x5cGhXaWR0aE1hcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HbHlwaEJv
dW5kc01hcC5jcHA6IENvcGllZCBmcm9tIHBsYXRmb3JtL2dyYXBoaWNzL0dseXBoTWV0cmljc01h
cC5jcHAuCisgICAgICAgIChXZWJDb3JlOjpHbHlwaEJvdW5kc01hcDo6bG9jYXRlUGFnZVNsb3dD
YXNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HbHlwaEJvdW5kc01hcC5oOiBDb3Bp
ZWQgZnJvbSBwbGF0Zm9ybS9ncmFwaGljcy9HbHlwaE1ldHJpY3NNYXAuaC4KKyAgICAgICAgKFdl
YkNvcmU6OkdseXBoQm91bmRzTWFwOjpHbHlwaEJvdW5kc01hcCk6CisgICAgICAgIChXZWJDb3Jl
OjpHbHlwaEJvdW5kc01hcDo6fkdseXBoQm91bmRzTWFwKToKKyAgICAgICAgKFdlYkNvcmU6Okds
eXBoQm91bmRzTWFwOjpib3VuZHNGb3JHbHlwaCk6CisgICAgICAgIChXZWJDb3JlOjpHbHlwaEJv
dW5kc01hcDo6c2V0Qm91bmRzRm9yR2x5cGgpOgorICAgICAgICAoV2ViQ29yZTo6R2x5cGhCb3Vu
ZHNNYXA6OkdseXBoQm91bmRzUGFnZTo6Ym91bmRzRm9yR2x5cGgpOgorICAgICAgICAoV2ViQ29y
ZTo6R2x5cGhCb3VuZHNNYXA6OkdseXBoQm91bmRzUGFnZTo6c2V0Qm91bmRzRm9yR2x5cGgpOgor
ICAgICAgICAoV2ViQ29yZTo6R2x5cGhCb3VuZHNNYXA6OkdseXBoQm91bmRzUGFnZTo6c2V0Qm91
bmRzRm9ySW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6R2x5cGhCb3VuZHNNYXA6OmxvY2F0ZVBh
Z2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dseXBoTWV0cmljc01hcC5jcHA6IFJl
bW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhNZXRyaWNzTWFwLmg6IFJl
bW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhXaWR0aE1hcC5jcHA6IENv
cGllZCBmcm9tIHBsYXRmb3JtL2dyYXBoaWNzL0dseXBoTWV0cmljc01hcC5jcHAuCisgICAgICAg
IChXZWJDb3JlOjpHbHlwaFdpZHRoTWFwOjpsb2NhdGVQYWdlU2xvd0Nhc2UpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0dseXBoV2lkdGhNYXAuaDogQ29waWVkIGZyb20gcGxhdGZvcm0v
Z3JhcGhpY3MvR2x5cGhNZXRyaWNzTWFwLmguCisgICAgICAgIChXZWJDb3JlOjpHbHlwaFdpZHRo
TWFwOjpHbHlwaFdpZHRoTWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkdseXBoV2lkdGhNYXA6On5H
bHlwaFdpZHRoTWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkdseXBoV2lkdGhNYXA6OndpZHRoRm9y
R2x5cGgpOgorICAgICAgICAoV2ViQ29yZTo6R2x5cGhXaWR0aE1hcDo6c2V0V2lkdGhGb3JHbHlw
aCk6CisgICAgICAgIChXZWJDb3JlOjpHbHlwaFdpZHRoTWFwOjpHbHlwaFdpZHRoUGFnZTo6d2lk
dGhGb3JHbHlwaCk6CisgICAgICAgIChXZWJDb3JlOjpHbHlwaFdpZHRoTWFwOjpHbHlwaFdpZHRo
UGFnZTo6c2V0V2lkdGhGb3JHbHlwaCk6CisgICAgICAgIChXZWJDb3JlOjpHbHlwaFdpZHRoTWFw
OjpHbHlwaFdpZHRoUGFnZTo6c2V0V2lkdGhGb3JJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpH
bHlwaFdpZHRoTWFwOjpsb2NhdGVQYWdlKToKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L1NpbXBsZUZvbnREYXRhLmNwcDogKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUds
eXBoSW5pdCk6CisgICAgICAgIEJyZWFrIGNhbGwgdG8gc2V0TWV0cmljc0ZvckdseXBoIGludG8g
Y2FsbHMgdG8gc2V0V2lkdGhGb3JHbHlwaCBhbmQgc2V0Qm91bmRzRm9yR2x5cGguCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaDogKFdlYkNvcmU6OlNpbXBsZUZv
bnREYXRhOjptZXRyaWNzRm9yR2x5cGgpOgorICAgICAgICBUaGlzIG1ldGhvZCBpcyBvbmx5IHVz
ZWQgYnkgQ29tcGxleFRleHRDb250cm9sbGVyLCBzbyB3ZSdsbCBrZWVwIGl0LCBhbmQgYWRkIHRo
ZSBHbHlwaE1ldHJpY3Mgc3RydWN0CisgICAgICAgIGluIHRoaXMgaGVhZGVyIGZpbGUuCisKKyAg
ICAgICAgVXBkYXRlZCB0byBicmVhayBwbGF0Zm9ybU1ldHJpY3NGb3JHbHlwaCBpbnRvIHBsYXRm
b3JtV2lkdGhGb3JHbHlwaCBhbmQgcGxhdGZvcm1Cb3VuZHNGb3JHbHlwaCwKKyAgICAgICAgbWFp
bnRhaW5pbmcgcHJlc2VudCBiZWhhdmlvciBmcm9tIHBsYXRmb3JtTWV0cmljc0ZvckdseXBoIGlt
cGxlbWVudGF0aW9ucy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9TaW1wbGVG
b250RGF0YUNhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpwbGF0
Zm9ybUJvdW5kc0ZvckdseXBoKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpw
bGF0Zm9ybVdpZHRoRm9yR2x5cGgpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1NpbXBsZUZvbnREYXRhQ2hyb21pdW1XaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2lt
cGxlRm9udERhdGE6OnBsYXRmb3JtQm91bmRzRm9yR2x5cGgpOgorICAgICAgICAoV2ViQ29yZTo6
U2ltcGxlRm9udERhdGE6OnBsYXRmb3JtV2lkdGhGb3JHbHlwaCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vU2ltcGxlRm9udERhdGFMaW51eC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1Cb3VuZHNGb3JHbHlwaCk6CisgICAgICAg
IChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1XaWR0aEZvckdseXBoKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFNYWMubW06CisgICAgICAg
IChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1Cb3VuZHNGb3JHbHlwaCk6CisgICAg
ICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1XaWR0aEZvckdseXBoKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvU2ltcGxlRm9udERhdGFQYW5nby5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1Cb3VuZHNGb3JHbHlwaCk6
CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1XaWR0aEZvckdseXBo
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9TaW1wbGVGb250RGF0YVdpbmNl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUJvdW5kc0Zv
ckdseXBoKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93eC9TaW1wbGVGb250RGF0YVd4
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUJvdW5kc0Zv
ckdseXBoKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybVdpZHRo
Rm9yR2x5cGgpOgorCiAyMDEwLTA0LTIxICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUu
Y29tPgogCiAgICAgICAgIFRpZ2VyIGJ1aWxkIGZpeC4KSW5kZXg6IFdlYkNvcmUvQW5kcm9pZC5t
awo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0FuZHJvaWQubWsJKHJldmlzaW9uIDU3OTQ2KQorKysg
V2ViQ29yZS9BbmRyb2lkLm1rCSh3b3JraW5nIGNvcHkpCkBAIC00MzcsOCArNDM3LDkgQEAgTE9D
QUxfU1JDX0ZJTEVTIDo9ICQoTE9DQUxfU1JDX0ZJTEVTKSBcCiAJcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udEZhbWlseS5jcHAgXAogCXBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYXN0UGF0aC5jcHAgXAog
CXBsYXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRlZEltYWdlLmNwcCBcCisJcGxhdGZvcm0vZ3JhcGhp
Y3MvR2x5cGhCb3VuZHNNYXAuY3BwIFwKIAlwbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2VUcmVl
Tm9kZS5jcHAgXAotCXBsYXRmb3JtL2dyYXBoaWNzL0dseXBoTWV0cmljc01hcC5jcHAgXAorCXBs
YXRmb3JtL2dyYXBoaWNzL0dseXBoV2lkdGhNYXAuY3BwIFwKIAlwbGF0Zm9ybS9ncmFwaGljcy9H
cmFkaWVudC5jcHAgXAogCXBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAgXAog
CXBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwIFwKSW5kZXg6IFdlYkNvcmUvR05V
bWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNp
b24gNTc5NDYpCisrKyBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0x
NjIzLDExICsxNjIzLDEzIEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HZW5lcmF0ZWRJbWFnZS5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR2VuZXJhdGVkSW1hZ2UuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HZW5lcmF0
b3IuaCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaEJvdW5kc01hcC5jcHAgXAor
CVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhCb3VuZHNNYXAuaCBcCiAJV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HbHlwaEJ1ZmZlci5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dseXBoUGFnZVRyZWVOb2RlLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
bHlwaFBhZ2VUcmVlTm9kZS5oIFwKLQlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoTWV0
cmljc01hcC5jcHAgXAotCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhNZXRyaWNzTWFw
LmggXAorCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhXaWR0aE1hcC5jcHAgXAorCVdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhXaWR0aE1hcC5oIFwKIAlXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYWRpZW50LmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFkaWVudC5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5j
cHAgXApJbmRleDogV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9X
ZWJDb3JlLmd5cGkJKHJldmlzaW9uIDU3OTQ2KQorKysgV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdv
cmtpbmcgY29weSkKQEAgLTIzNDAsMTEgKzIzNDAsMTMgQEAKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9HZW5lcmF0ZWRJbWFnZS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL0dlbmVyYXRlZEltYWdlLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L0dlbmVyYXRvci5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9HbHlwaEJvdW5k
c01hcC5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoQm91bmRzTWFw
LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoQnVmZmVyLmgnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZVRyZWVOb2RlLmNwcCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlVHJlZU5vZGUuaCcsCi0gICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhNZXRyaWNzTWFwLmNwcCcsCi0gICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhNZXRyaWNzTWFwLmgnLAorICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL0dseXBoV2lkdGhNYXAuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9HbHlwaFdpZHRoTWFwLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL0dyYWRpZW50LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGll
bnQuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNw
cCcsCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJldmlzaW9uIDU3
OTQ2KQorKysgV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29ya2luZyBj
b3B5KQpAQCAtMjI4MjksNiArMjI4MjksMTQgQEAKIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0
Zm9ybVxncmFwaGljc1xHZW5lcmF0b3IuaCINCiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KKyAgICAg
ICAgICAgICAgICA8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGlj
c1xHbHlwaEJvdW5kc01hcC5jcHAiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUN
CisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcR2x5cGhCb3VuZHNNYXAu
aCINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0KIAkJCQkJUmVsYXRpdmVQYXRo
PSIuLlxwbGF0Zm9ybVxncmFwaGljc1xHbHlwaEJ1ZmZlci5oIg0KIAkJCQkJPg0KQEAgLTIyODQy
LDExICsyMjg1MCwxMSBAQAogCQkJCQk+DQogCQkJCTwvRmlsZT4NCiAJCQkJPEZpbGUNCi0JCQkJ
CVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcR2x5cGhNZXRyaWNzTWFwLmNwcCIN
CisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcR2x5cGhXaWR0aE1hcC5j
cHAiDQogCQkJCQk+DQogCQkJCTwvRmlsZT4NCiAJCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0
aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcR2x5cGhNZXRyaWNzTWFwLmgiDQorCQkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEdseXBoV2lkdGhNYXAuaCINCiAJCQkJCT4NCiAJ
CQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA1Nzk0NikKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zNDExLDYgKzM0MTEsMTAg
QEAKIAkJQUE0QzNBNzcwQjJCMTY3OTAwMjMzNEEyIC8qIFN0eWxlRWxlbWVudC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUE0QzNBNzUwQjJCMTY3OTAw
MjMzNEEyIC8qIFN0eWxlRWxlbWVudC5oICovOyB9OwogCQlBQjAxNERFMzBFNjg5QTQzMDBFMTA0
NDUgLyogVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFCMDE0REUxMEU2ODlBNDMwMEUxMDQ0NSAvKiBUZXh0
Q29udHJvbElubmVyRWxlbWVudHMuY3BwICovOyB9OwogCQlBQjAxNERFNDBFNjg5QTQzMDBFMTA0
NDUgLyogVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBQjAxNERFMjBFNjg5QTQzMDBFMTA0NDUgLyogVGV4dENv
bnRyb2xJbm5lckVsZW1lbnRzLmggKi87IH07CisJCUFCMDRGMzFGMTE3RUI2MUUwMERFMjcxMyAv
KiBHbHlwaEJvdW5kc01hcC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBQjA0RjMxRDExN0VCNjFFMDBERTI3MTMgLyogR2x5cGhCb3VuZHNNYXAuY3Bw
ICovOyB9OworCQlBQjA0RjMyMDExN0VCNjFFMDBERTI3MTMgLyogR2x5cGhCb3VuZHNNYXAuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFCMDRGMzFFMTE3
RUI2MUUwMERFMjcxMyAvKiBHbHlwaEJvdW5kc01hcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUFCMDRGMzIzMTE3RUI2MzcwMERFMjcxMyAvKiBH
bHlwaFdpZHRoTWFwLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEFCMDRGMzIxMTE3RUI2MzcwMERFMjcxMyAvKiBHbHlwaFdpZHRoTWFwLmNwcCAqLzsg
fTsKKwkJQUIwNEYzMjQxMTdFQjYzNzAwREUyNzEzIC8qIEdseXBoV2lkdGhNYXAuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFCMDRGMzIyMTE3RUI2Mzcw
MERFMjcxMyAvKiBHbHlwaFdpZHRoTWFwLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJQUIyM0EzMjcwOUJCQTdEMDAwNjdDQzUzIC8qIEJlZm9yZVRl
eHRJbnNlcnRlZEV2ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEFCMjNBMzI1MDlCQkE3RDAwMDY3Q0M1MyAvKiBCZWZvcmVUZXh0SW5zZXJ0ZWRF
dmVudC5jcHAgKi87IH07CiAJCUFCMjNBMzI4MDlCQkE3RDAwMDY3Q0M1MyAvKiBCZWZvcmVUZXh0
SW5zZXJ0ZWRFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQUIyM0EzMjYwOUJCQTdEMDAwNjdDQzUzIC8qIEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50
LmggKi87IH07CiAJCUFCMjQ3QTZDMEFGRDYzODMwMDNGQTVGRCAvKiBSZW5kZXJTbGlkZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUIyNDdBNkEw
QUZENjM4MzAwM0ZBNUZEIC8qIFJlbmRlclNsaWRlci5jcHAgKi87IH07CkBAIC00NzA5LDggKzQ3
MTMsNiBAQAogCQlDNTE2MEVFQjEwMDQ1NDNBMDBBN0NFRTIgLyogU3RvcmFnZUFyZWFJbXBsLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTE2MEVFOTEw
MDQ1NDNBMDBBN0NFRTIgLyogU3RvcmFnZUFyZWFJbXBsLmggKi87IH07CiAJCUM1NUUzOEJGMTAw
NDBENUQwMEE1NkJEQiAvKiBTdG9yYWdlTmFtZXNwYWNlSW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzU1RTM4QkIxMDA0MEQ1RDAwQTU2QkRCIC8q
IFN0b3JhZ2VOYW1lc3BhY2VJbXBsLmggKi87IH07CiAJCUM1NUUzOEMwMTAwNDBENUQwMEE1NkJE
QiAvKiBTdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBDNTVFMzhCQzEwMDQwRDVEMDBBNTZCREIgLyogU3RvcmFnZU5h
bWVzcGFjZUltcGwuY3BwICovOyB9OwotCQlDNUQ0QUE3OTExNkJBRkI2MDA2OUNBOTMgLyogR2x5
cGhNZXRyaWNzTWFwLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEM1RDRBQTc3MTE2QkFGQjYwMDY5Q0E5MyAvKiBHbHlwaE1ldHJpY3NNYXAuY3BwICov
OyB9OwotCQlDNUQ0QUE3QTExNkJBRkI2MDA2OUNBOTMgLyogR2x5cGhNZXRyaWNzTWFwLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNUQ0QUE3ODExNkJB
RkI2MDA2OUNBOTMgLyogR2x5cGhNZXRyaWNzTWFwLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQzVFOUI2NzcxMDY5N0UxMzAwQzdCQjFBIC8qIFN0
b3JhZ2VFdmVudERpc3BhdGNoZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQzVFOUI2NzYxMDY5N0UxMzAwQzdCQjFBIC8qIFN0b3JhZ2VFdmVudERp
c3BhdGNoZXIuY3BwICovOyB9OwogCQlDNUVCREQ4NDEwNUVEREVDMDA1NjgxNkYgLyogU3RvcmFn
ZUV2ZW50RGlzcGF0Y2hlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQzVFQkREODExMDVFRERFQzAwNTY4MTZGIC8qIFN0b3JhZ2VFdmVudERpc3BhdGNo
ZXIuaCAqLzsgfTsKIAkJQzZENzRBRDUwOUFBMjgyRTAwMEIwQTUyIC8qIE1vZGlmeVNlbGVjdGlv
bkxpc3RMZXZlbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQzZENzRBRDMwOUFBMjgyRTAwMEIwQTUyIC8qIE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5o
ICovOyB9OwpAQCAtODYwMyw2ICs4NjA1LDEwIEBACiAJCUFBNEMzQTc1MEIyQjE2NzkwMDIzMzRB
MiAvKiBTdHlsZUVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0
eWxlRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBQjAxNERFMTBFNjg5
QTQzMDBFMTA0NDUgLyogVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFCMDE0REUyMEU2ODlBNDMwMEUxMDQ0NSAvKiBU
ZXh0Q29udHJvbElubmVyRWxlbWVudHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUFCMDRGMzFEMTE3RUI2MUUwMERFMjcxMyAvKiBHbHlwaEJvdW5kc01hcC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHbHlwaEJvdW5kc01hcC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFCMDRGMzFFMTE3RUI2MUUwMERFMjcxMyAvKiBHbHlw
aEJvdW5kc01hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHbHlwaEJvdW5k
c01hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBQjA0RjMyMTExN0VCNjM3MDBE
RTI3MTMgLyogR2x5cGhXaWR0aE1hcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBHbHlwaFdpZHRoTWFwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QUIwNEYzMjIxMTdFQjYzNzAwREUyNzEzIC8qIEdseXBoV2lkdGhNYXAuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gR2x5cGhXaWR0aE1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBQjIzQTMyNTA5QkJBN0QwMDA2N0NDNTMgLyogQmVmb3JlVGV4dEluc2VydGVk
RXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJlZm9yZVRl
eHRJbnNlcnRlZEV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUIyM0Ez
MjYwOUJCQTdEMDAwNjdDQzUzIC8qIEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBQjI0N0E2QTBBRkQ2MzgzMDAzRkE1RkQgLyogUmVu
ZGVyU2xpZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5k
ZXJTbGlkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTAwODUsOCArMTAw
OTEsNiBAQAogCQlDNTE2MEVFOTEwMDQ1NDNBMDBBN0NFRTIgLyogU3RvcmFnZUFyZWFJbXBsLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0b3JhZ2VBcmVhSW1wbC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDNTVFMzhCQjEwMDQwRDVEMDBBNTZCREIgLyogU3Rv
cmFnZU5hbWVzcGFjZUltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3Rv
cmFnZU5hbWVzcGFjZUltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzU1RTM4
QkMxMDA0MEQ1RDAwQTU2QkRCIC8qIFN0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzVENEFBNzcxMTZCQUZCNjAwNjlDQTkzIC8qIEds
eXBoTWV0cmljc01hcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBH
bHlwaE1ldHJpY3NNYXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDNUQ0QUE3
ODExNkJBRkI2MDA2OUNBOTMgLyogR2x5cGhNZXRyaWNzTWFwLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEdseXBoTWV0cmljc01hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlDNUU5QjY3NjEwNjk3RTEzMDBDN0JCMUEgLyogU3RvcmFnZUV2ZW50RGlzcGF0Y2hl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdG9yYWdlRXZlbnRE
aXNwYXRjaGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzVFQkREODExMDVF
RERFQzAwNTY4MTZGIC8qIFN0b3JhZ2VFdmVudERpc3BhdGNoZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU3RvcmFnZUV2ZW50RGlzcGF0Y2hlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlDNkQ3NEFEMzA5QUEyODJFMDAwQjBBNTIgLyogTW9kaWZ5U2VsZWN0
aW9uTGlzdExldmVsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1vZGlmeVNl
bGVjdGlvbkxpc3RMZXZlbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTQ2ODIs
MTEgKzE0Njg2LDEzIEBACiAJCQkJQkNFMDRDOTMwREFGRjkwMjAwN0EwRjQxIC8qIEdlbmVyYXRl
ZEltYWdlLmNwcCAqLywKIAkJCQlCQzIzRjBEQTBEQUZGNEE0MDA5RkRDOTEgLyogR2VuZXJhdGVk
SW1hZ2UuaCAqLywKIAkJCQlCQ0UwNEM4OTBEQUZGN0EwMDA3QTBGNDEgLyogR2VuZXJhdG9yLmgg
Ki8sCisJCQkJQUIwNEYzMUQxMTdFQjYxRTAwREUyNzEzIC8qIEdseXBoQm91bmRzTWFwLmNwcCAq
LywKKwkJCQlBQjA0RjMxRTExN0VCNjFFMDBERTI3MTMgLyogR2x5cGhCb3VuZHNNYXAuaCAqLywK
IAkJCQlCMkMzREE1QjBEMDA2Q0Q2MDBFRjZGMjYgLyogR2x5cGhCdWZmZXIuaCAqLywKLQkJCQlD
NUQ0QUE3NzExNkJBRkI2MDA2OUNBOTMgLyogR2x5cGhNZXRyaWNzTWFwLmNwcCAqLywKLQkJCQlD
NUQ0QUE3ODExNkJBRkI2MDA2OUNBOTMgLyogR2x5cGhNZXRyaWNzTWFwLmggKi8sCiAJCQkJQjJD
M0RBNUMwRDAwNkNENjAwRUY2RjI2IC8qIEdseXBoUGFnZVRyZWVOb2RlLmNwcCAqLywKIAkJCQlC
MkMzREE1RDBEMDA2Q0Q2MDBFRjZGMjYgLyogR2x5cGhQYWdlVHJlZU5vZGUuaCAqLywKKwkJCQlB
QjA0RjMyMTExN0VCNjM3MDBERTI3MTMgLyogR2x5cGhXaWR0aE1hcC5jcHAgKi8sCisJCQkJQUIw
NEYzMjIxMTdFQjYzNzAwREUyNzEzIC8qIEdseXBoV2lkdGhNYXAuaCAqLywKIAkJCQlCQzUzQzYw
NzBEQTU2QzU3MDAyMUVCNUQgLyogR3JhZGllbnQuY3BwICovLAogCQkJCUJDNTNDNUY0MERBNTZC
OTIwMDIxRUI1RCAvKiBHcmFkaWVudC5oICovLAogCQkJCUIyQTAxNTkyMEFGNkNENTMwMDZCQ0Uw
RSAvKiBHcmFwaGljc0NvbnRleHQuY3BwICovLApAQCAtMTg4NTUsNyArMTg4NjEsNiBAQAogCQkJ
CTk3QzA3ODUwMTE2NUQ1QkUwMDNBMzJFRiAvKiBTdWZmaXhUcmVlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkyNTQyRjREQjExNjZDMjVBMDBFODlBODYgLyogVXNlckdlc3R1cmVJbmRpY2F0b3IuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDOTQzOUMzMTE2Q0Y0OTQwMDQ4Qzc1MCAvKiBKU05vZGVDdXN0
b20uaCBpbiBIZWFkZXJzICovLAotCQkJCUM1RDRBQTdBMTE2QkFGQjYwMDY5Q0E5MyAvKiBHbHlw
aE1ldHJpY3NNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUE0MDlDOTg1MTE2RDBEREQwMDcxOTdC
RCAvKiBBY2Nlc3NpYmlsaXR5UHJvZ3Jlc3NJbmRpY2F0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTg5NTI1M0Q4MTE2QzRDNjgwMENBQkYwMCAvKiBGaWxlU3RyZWFtLmggaW4gSGVhZGVycyAqLywK
IAkJCQk5NzM4ODlBMTExNkVBOURDMDBBREYzMTMgLyogRG9jdW1lbnRXcml0ZXIuaCBpbiBIZWFk
ZXJzICovLApAQCAtMTg4NjksNiArMTg4NzQsOCBAQAogCQkJCUNFRjQxOENGMTE3OTY3OEMwMDlE
MTEyQyAvKiBWaWV3cG9ydEFyZ3VtZW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEMzA4MEYx
MTdDRjdFNzAwQTc5MUY3IC8qIFJlbmRlckZyYW1lQmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZEMzA4RDYxMTdEMTY4NTAwQTc5MUY3IC8qIFJlbmRlcklGcmFtZS5oIGluIEhlYWRlcnMgKi8s
CisJCQkJQUIwNEYzMjAxMTdFQjYxRTAwREUyNzEzIC8qIEdseXBoQm91bmRzTWFwLmggaW4gSGVh
ZGVycyAqLywKKwkJCQlBQjA0RjMyNDExN0VCNjM3MDBERTI3MTMgLyogR2x5cGhXaWR0aE1hcC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vz
c2luZyA9IDA7CiAJCX07CkBAIC0yMTA5NCw3ICsyMTEwMSw2IEBACiAJCQkJMkUzQkJGMDcxMTYy
REExMTAwQjk0MDlBIC8qIFVVSUQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODk1MjUzNTIxMTY0
MUIzNDAwQ0FCRjAwIC8qIEZpbGVUaHJlYWQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMjU0MkY0
REExMTY2QzI1QTAwRTg5QTg2IC8qIFVzZXJHZXN0dXJlSW5kaWNhdG9yLmNwcCBpbiBTb3VyY2Vz
ICovLAotCQkJCUM1RDRBQTc5MTE2QkFGQjYwMDY5Q0E5MyAvKiBHbHlwaE1ldHJpY3NNYXAuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTQwOUM5ODQxMTZEMERERDAwNzE5N0JEIC8qIEFjY2Vzc2li
aWxpdHlQcm9ncmVzc0luZGljYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4OTUyNTNENzEx
NkM0QzY4MDBDQUJGMDAgLyogRmlsZVN0cmVhbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5RkEz
N0VFNzExNzJGQ0YwMDBDNENENTUgLyogSlNTY3JpcHRQcm9maWxlTm9kZUN1c3RvbS5jcHAgaW4g
U291cmNlcyAqLywKQEAgLTIxMTA0LDcgKzIxMTEwLDkgQEAKIAkJCQlDRUY0MThDRTExNzk2NzhD
MDA5RDExMkMgLyogVmlld3BvcnRBcmd1bWVudHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZE
MzA4MEUxMTdDRjdFNzAwQTc5MUY3IC8qIFJlbmRlckZyYW1lQmFzZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRkQzMDhENTExN0QxNjg1MDBBNzkxRjcgLyogUmVuZGVySUZyYW1lLmNwcCBpbiBT
b3VyY2VzICovLAotIAkJCQk5NzM4ODlBMDExNkVBOURDMDBBREYzMTMgLyogRG9jdW1lbnRXcml0
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOTczODg5QTAxMTZFQTlEQzAwQURGMzEzIC8qIERv
Y3VtZW50V3JpdGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUFCMDRGMzFGMTE3RUI2MUUwMERF
MjcxMyAvKiBHbHlwaEJvdW5kc01hcC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBQjA0RjMyMzEx
N0VCNjM3MDBERTI3MTMgLyogR2x5cGhXaWR0aE1hcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7
CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhCb3VuZHNNYXAuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhCb3VuZHNNYXAuY3BwCShyZXZpc2lv
biA1Nzk0NikJKGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaE1ldHJpY3NNYXAu
Y3BwOjU3OTQ2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaEJvdW5kc01hcC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwNiwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgi
QXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4g
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkdseXBoTWV0cmljc01hcC5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK0dseXBoTWV0cmljc01hcDo6R2x5cGhNZXRyaWNzUGFnZSogR2x5cGhNZXRyaWNzTWFw
Ojpsb2NhdGVQYWdlU2xvd0Nhc2UodW5zaWduZWQgcGFnZU51bWJlcikKK3sKKyAgICBHbHlwaE1l
dHJpY3NQYWdlKiBwYWdlOworICAgIGlmICghcGFnZU51bWJlcikgeworICAgICAgICBBU1NFUlQo
IW1fZmlsbGVkUHJpbWFyeVBhZ2UpOworICAgICAgICBwYWdlID0gJm1fcHJpbWFyeVBhZ2U7Cisg
ICAgICAgIG1fZmlsbGVkUHJpbWFyeVBhZ2UgPSB0cnVlOworICAgIH0gZWxzZSB7CisgICAgICAg
IGlmIChtX3BhZ2VzKSB7CisgICAgICAgICAgICBpZiAoKHBhZ2UgPSBtX3BhZ2VzLT5nZXQocGFn
ZU51bWJlcikpKQorICAgICAgICAgICAgICAgIHJldHVybiBwYWdlOworICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgIG1fcGFnZXMuc2V0KG5ldyBIYXNoTWFwPGludCwgR2x5cGhNZXRyaWNzUGFn
ZSo+KTsKKyAgICAgICAgcGFnZSA9IG5ldyBHbHlwaE1ldHJpY3NQYWdlOworICAgICAgICBtX3Bh
Z2VzLT5zZXQocGFnZU51bWJlciwgcGFnZSk7CisgICAgfQorCisgICAgR2x5cGhNZXRyaWNzIHVu
a25vd25NZXRyaWNzOworICAgIHVua25vd25NZXRyaWNzLmhvcml6b250YWxBZHZhbmNlID0gY0ds
eXBoU2l6ZVVua25vd247CisgICAgdW5rbm93bk1ldHJpY3MuYm91bmRpbmdCb3guc2V0V2lkdGgo
Y0dseXBoU2l6ZVVua25vd24pOworICAgIHVua25vd25NZXRyaWNzLmJvdW5kaW5nQm94LnNldEhl
aWdodChjR2x5cGhTaXplVW5rbm93bik7CisgICAgLy8gRmlsbCBpbiB0aGUgd2hvbGUgcGFnZSB3
aXRoIHRoZSB1bmtub3duIGdseXBoIGluZm9ybWF0aW9uLgorICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBHbHlwaE1ldHJpY3NQYWdlOjpzaXplOyBpKyspCisgICAgICAgIHBhZ2UtPnNldE1l
dHJpY3NGb3JJbmRleChpLCB1bmtub3duTWV0cmljcyk7CisKKyAgICByZXR1cm4gcGFnZTsKK30K
KworfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaEJvdW5kc01hcC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaEJvdW5kc01hcC5j
cHAJKHJldmlzaW9uIDU3OTQ2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaEJv
dW5kc01hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDEzICsyNywxMyBAQAogICovCiAKICNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJHbHlwaE1ldHJpY3NNYXAuaCIKKyNpbmNsdWRl
ICJHbHlwaEJvdW5kc01hcC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUdseXBoTWV0cmlj
c01hcDo6R2x5cGhNZXRyaWNzUGFnZSogR2x5cGhNZXRyaWNzTWFwOjpsb2NhdGVQYWdlU2xvd0Nh
c2UodW5zaWduZWQgcGFnZU51bWJlcikKKyAgICAKK0dseXBoQm91bmRzTWFwOjpHbHlwaEJvdW5k
c1BhZ2UqIEdseXBoQm91bmRzTWFwOjpsb2NhdGVQYWdlU2xvd0Nhc2UodW5zaWduZWQgcGFnZU51
bWJlcikKIHsKLSAgICBHbHlwaE1ldHJpY3NQYWdlKiBwYWdlOworICAgIEdseXBoQm91bmRzUGFn
ZSogcGFnZTsKICAgICBpZiAoIXBhZ2VOdW1iZXIpIHsKICAgICAgICAgQVNTRVJUKCFtX2ZpbGxl
ZFByaW1hcnlQYWdlKTsKICAgICAgICAgcGFnZSA9ICZtX3ByaW1hcnlQYWdlOwpAQCAtNDMsMTkg
KzQzLDE4IEBAIEdseXBoTWV0cmljc01hcDo6R2x5cGhNZXRyaWNzUGFnZSogR2x5cGgKICAgICAg
ICAgICAgIGlmICgocGFnZSA9IG1fcGFnZXMtPmdldChwYWdlTnVtYmVyKSkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIHBhZ2U7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbV9wYWdlcy5z
ZXQobmV3IEhhc2hNYXA8aW50LCBHbHlwaE1ldHJpY3NQYWdlKj4pOwotICAgICAgICBwYWdlID0g
bmV3IEdseXBoTWV0cmljc1BhZ2U7CisgICAgICAgICAgICBtX3BhZ2VzLnNldChuZXcgSGFzaE1h
cDxpbnQsIEdseXBoQm91bmRzUGFnZSo+KTsKKyAgICAgICAgcGFnZSA9IG5ldyBHbHlwaEJvdW5k
c1BhZ2U7CiAgICAgICAgIG1fcGFnZXMtPnNldChwYWdlTnVtYmVyLCBwYWdlKTsKICAgICB9Ci0K
LSAgICBHbHlwaE1ldHJpY3MgdW5rbm93bk1ldHJpY3M7Ci0gICAgdW5rbm93bk1ldHJpY3MuaG9y
aXpvbnRhbEFkdmFuY2UgPSBjR2x5cGhTaXplVW5rbm93bjsKLSAgICB1bmtub3duTWV0cmljcy5i
b3VuZGluZ0JveC5zZXRXaWR0aChjR2x5cGhTaXplVW5rbm93bik7Ci0gICAgdW5rbm93bk1ldHJp
Y3MuYm91bmRpbmdCb3guc2V0SGVpZ2h0KGNHbHlwaFNpemVVbmtub3duKTsKKyAgICAKKyAgICBG
bG9hdFJlY3QgdW5rbm93bkJvdW5kczsKKyAgICB1bmtub3duQm91bmRzLnNldFdpZHRoKGNHbHlw
aFNpemVVbmtub3duKTsKKyAgICB1bmtub3duQm91bmRzLnNldEhlaWdodChjR2x5cGhTaXplVW5r
bm93bik7CiAgICAgLy8gRmlsbCBpbiB0aGUgd2hvbGUgcGFnZSB3aXRoIHRoZSB1bmtub3duIGds
eXBoIGluZm9ybWF0aW9uLgotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHbHlwaE1ldHJp
Y3NQYWdlOjpzaXplOyBpKyspCi0gICAgICAgIHBhZ2UtPnNldE1ldHJpY3NGb3JJbmRleChpLCB1
bmtub3duTWV0cmljcyk7Ci0KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR2x5cGhCb3Vu
ZHNQYWdlOjpzaXplOyBpKyspCisgICAgICAgIHBhZ2UtPnNldEJvdW5kc0ZvckluZGV4KGksIHVu
a25vd25Cb3VuZHMpOworICAgIAogICAgIHJldHVybiBwYWdlOwogfQogCkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoQm91bmRzTWFwLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaEJvdW5kc01hcC5oCShyZXZpc2lvbiA1Nzk0NikJKGZy
b20gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaE1ldHJpY3NNYXAuaDo1Nzk0NikKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhCb3VuZHNNYXAuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDEwNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhl
IG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBHbHlwaE1ldHJpY3NNYXBfaAor
I2RlZmluZSBHbHlwaE1ldHJpY3NNYXBfaAorCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8
d3RmL3VuaWNvZGUvVW5pY29kZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3R5cGVkZWYg
dW5zaWduZWQgc2hvcnQgR2x5cGg7CisKK2NvbnN0IGZsb2F0IGNHbHlwaFNpemVVbmtub3duID0g
LTE7CisKK3N0cnVjdCBHbHlwaE1ldHJpY3MgeworICAgIGZsb2F0IGhvcml6b250YWxBZHZhbmNl
OworICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveDsKK307CisKK2NsYXNzIEdseXBoTWV0cmljc01h
cCA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CitwdWJsaWM6CisgICAgR2x5cGhNZXRyaWNzTWFwKCkg
OiBtX2ZpbGxlZFByaW1hcnlQYWdlKGZhbHNlKSB7IH0KKyAgICB+R2x5cGhNZXRyaWNzTWFwKCkK
KyAgICB7IAorICAgICAgICBpZiAobV9wYWdlcykKKyAgICAgICAgICAgIGRlbGV0ZUFsbFZhbHVl
cygqbV9wYWdlcyk7CisgICAgfQorCisgICAgR2x5cGhNZXRyaWNzIG1ldHJpY3NGb3JHbHlwaChH
bHlwaCBnbHlwaCkKKyAgICB7CisgICAgICAgIHJldHVybiBsb2NhdGVQYWdlKGdseXBoIC8gR2x5
cGhNZXRyaWNzUGFnZTo6c2l6ZSktPm1ldHJpY3NGb3JHbHlwaChnbHlwaCk7CisgICAgfQorCisg
ICAgZmxvYXQgd2lkdGhGb3JHbHlwaChHbHlwaCBnbHlwaCkKKyAgICB7CisgICAgICAgIHJldHVy
biBsb2NhdGVQYWdlKGdseXBoIC8gR2x5cGhNZXRyaWNzUGFnZTo6c2l6ZSktPm1ldHJpY3NGb3JH
bHlwaChnbHlwaCkuaG9yaXpvbnRhbEFkdmFuY2U7CisgICAgfQorCisgICAgdm9pZCBzZXRNZXRy
aWNzRm9yR2x5cGgoR2x5cGggZ2x5cGgsIGNvbnN0IEdseXBoTWV0cmljcyYgbWV0cmljcykKKyAg
ICB7CisgICAgICAgIGxvY2F0ZVBhZ2UoZ2x5cGggLyBHbHlwaE1ldHJpY3NQYWdlOjpzaXplKS0+
c2V0TWV0cmljc0ZvckdseXBoKGdseXBoLCBtZXRyaWNzKTsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgc3RydWN0IEdseXBoTWV0cmljc1BhZ2UgeworICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90
IHNpemUgPSAyNTY7IC8vIFVzdWFsbHkgY292ZXJzIExhdGluLTEgaW4gYSBzaW5nbGUgcGFnZS4K
KyAgICAgICAgR2x5cGhNZXRyaWNzIG1fbWV0cmljc1tzaXplXTsKKworICAgICAgICBHbHlwaE1l
dHJpY3MgbWV0cmljc0ZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdCB7IHJldHVybiBtX21ldHJp
Y3NbZ2x5cGggJSBzaXplXTsgfQorICAgICAgICB2b2lkIHNldE1ldHJpY3NGb3JHbHlwaChHbHlw
aCBnbHlwaCwgY29uc3QgR2x5cGhNZXRyaWNzJiBtZXRyaWNzKQorICAgICAgICB7CisgICAgICAg
ICAgICBzZXRNZXRyaWNzRm9ySW5kZXgoZ2x5cGggJSBzaXplLCBtZXRyaWNzKTsKKyAgICAgICAg
fQorICAgICAgICB2b2lkIHNldE1ldHJpY3NGb3JJbmRleCh1bnNpZ25lZCBpbmRleCwgY29uc3Qg
R2x5cGhNZXRyaWNzJiBtZXRyaWNzKQorICAgICAgICB7CisgICAgICAgICAgICBtX21ldHJpY3Nb
aW5kZXhdID0gbWV0cmljczsKKyAgICAgICAgfQorICAgIH07CisgICAgCisgICAgR2x5cGhNZXRy
aWNzUGFnZSogbG9jYXRlUGFnZSh1bnNpZ25lZCBwYWdlTnVtYmVyKQorICAgIHsKKyAgICAgICAg
aWYgKCFwYWdlTnVtYmVyICYmIG1fZmlsbGVkUHJpbWFyeVBhZ2UpCisgICAgICAgICAgICByZXR1
cm4gJm1fcHJpbWFyeVBhZ2U7CisgICAgICAgIHJldHVybiBsb2NhdGVQYWdlU2xvd0Nhc2UocGFn
ZU51bWJlcik7CisgICAgfQorCisgICAgR2x5cGhNZXRyaWNzUGFnZSogbG9jYXRlUGFnZVNsb3dD
YXNlKHVuc2lnbmVkIHBhZ2VOdW1iZXIpOworICAgIAorICAgIGJvb2wgbV9maWxsZWRQcmltYXJ5
UGFnZTsKKyAgICBHbHlwaE1ldHJpY3NQYWdlIG1fcHJpbWFyeVBhZ2U7IC8vIFdlIG9wdGltaXpl
IGZvciB0aGUgcGFnZSB0aGF0IGNvbnRhaW5zIGdseXBoIGluZGljZXMgMC0yNTUuCisgICAgT3du
UHRyPEhhc2hNYXA8aW50LCBHbHlwaE1ldHJpY3NQYWdlKj4gPiBtX3BhZ2VzOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR2x5cGhCb3VuZHNNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dseXBoQm91bmRzTWFwLmgJKHJldmlzaW9uIDU3OTQ2KQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HbHlwaEJvdW5kc01hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4ICsy
Niw4IEBACiAgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgR2x5cGhNZXRyaWNzTWFwX2gKLSNk
ZWZpbmUgR2x5cGhNZXRyaWNzTWFwX2gKKyNpZm5kZWYgR2x5cGhCb3VuZHNNYXBfaAorI2RlZmlu
ZSBHbHlwaEJvdW5kc01hcF9oCiAKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgpAQCAtMzUsNzAgKzM1LDYwIEBACiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUv
VW5pY29kZS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXR5cGVkZWYgdW5zaWduZWQgc2hv
cnQgR2x5cGg7Ci0KLWNvbnN0IGZsb2F0IGNHbHlwaFNpemVVbmtub3duID0gLTE7Ci0KLXN0cnVj
dCBHbHlwaE1ldHJpY3MgewotICAgIGZsb2F0IGhvcml6b250YWxBZHZhbmNlOwotICAgIEZsb2F0
UmVjdCBib3VuZGluZ0JveDsKLX07Ci0KLWNsYXNzIEdseXBoTWV0cmljc01hcCA6IHB1YmxpYyBO
b25jb3B5YWJsZSB7Ci1wdWJsaWM6Ci0gICAgR2x5cGhNZXRyaWNzTWFwKCkgOiBtX2ZpbGxlZFBy
aW1hcnlQYWdlKGZhbHNlKSB7IH0KLSAgICB+R2x5cGhNZXRyaWNzTWFwKCkKLSAgICB7IAotICAg
ICAgICBpZiAobV9wYWdlcykKLSAgICAgICAgICAgIGRlbGV0ZUFsbFZhbHVlcygqbV9wYWdlcyk7
Ci0gICAgfQotCi0gICAgR2x5cGhNZXRyaWNzIG1ldHJpY3NGb3JHbHlwaChHbHlwaCBnbHlwaCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBsb2NhdGVQYWdlKGdseXBoIC8gR2x5cGhNZXRyaWNzUGFn
ZTo6c2l6ZSktPm1ldHJpY3NGb3JHbHlwaChnbHlwaCk7Ci0gICAgfQotCi0gICAgZmxvYXQgd2lk
dGhGb3JHbHlwaChHbHlwaCBnbHlwaCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBsb2NhdGVQYWdl
KGdseXBoIC8gR2x5cGhNZXRyaWNzUGFnZTo6c2l6ZSktPm1ldHJpY3NGb3JHbHlwaChnbHlwaCku
aG9yaXpvbnRhbEFkdmFuY2U7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRNZXRyaWNzRm9yR2x5cGgo
R2x5cGggZ2x5cGgsIGNvbnN0IEdseXBoTWV0cmljcyYgbWV0cmljcykKLSAgICB7Ci0gICAgICAg
IGxvY2F0ZVBhZ2UoZ2x5cGggLyBHbHlwaE1ldHJpY3NQYWdlOjpzaXplKS0+c2V0TWV0cmljc0Zv
ckdseXBoKGdseXBoLCBtZXRyaWNzKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgc3RydWN0IEds
eXBoTWV0cmljc1BhZ2UgewotICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHNpemUgPSAyNTY7
IC8vIFVzdWFsbHkgY292ZXJzIExhdGluLTEgaW4gYSBzaW5nbGUgcGFnZS4KLSAgICAgICAgR2x5
cGhNZXRyaWNzIG1fbWV0cmljc1tzaXplXTsKLQotICAgICAgICBHbHlwaE1ldHJpY3MgbWV0cmlj
c0ZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdCB7IHJldHVybiBtX21ldHJpY3NbZ2x5cGggJSBz
aXplXTsgfQotICAgICAgICB2b2lkIHNldE1ldHJpY3NGb3JHbHlwaChHbHlwaCBnbHlwaCwgY29u
c3QgR2x5cGhNZXRyaWNzJiBtZXRyaWNzKQorICAgIAorICAgIHR5cGVkZWYgdW5zaWduZWQgc2hv
cnQgR2x5cGg7CisgICAgCisgICAgY29uc3QgZmxvYXQgY0dseXBoU2l6ZVVua25vd24gPSAtMTsK
KyAgICAKKyAgICBjbGFzcyBHbHlwaEJvdW5kc01hcCA6IHB1YmxpYyBOb25jb3B5YWJsZSB7Cisg
ICAgcHVibGljOgorICAgICAgICBHbHlwaEJvdW5kc01hcCgpIDogbV9maWxsZWRQcmltYXJ5UGFn
ZShmYWxzZSkgeyB9CisgICAgICAgIH5HbHlwaEJvdW5kc01hcCgpCisgICAgICAgIHsgCisgICAg
ICAgICAgICBpZiAobV9wYWdlcykKKyAgICAgICAgICAgICAgICBkZWxldGVBbGxWYWx1ZXMoKm1f
cGFnZXMpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBGbG9hdFJlY3QgYm91bmRzRm9y
R2x5cGgoR2x5cGggZ2x5cGgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHNldE1ldHJpY3NGb3JJ
bmRleChnbHlwaCAlIHNpemUsIG1ldHJpY3MpOworICAgICAgICAgICAgcmV0dXJuIGxvY2F0ZVBh
Z2UoZ2x5cGggLyBHbHlwaEJvdW5kc1BhZ2U6OnNpemUpLT5ib3VuZHNGb3JHbHlwaChnbHlwaCk7
CiAgICAgICAgIH0KLSAgICAgICAgdm9pZCBzZXRNZXRyaWNzRm9ySW5kZXgodW5zaWduZWQgaW5k
ZXgsIGNvbnN0IEdseXBoTWV0cmljcyYgbWV0cmljcykKKyAgICAgICAgCisgICAgICAgIHZvaWQg
c2V0Qm91bmRzRm9yR2x5cGgoR2x5cGggZ2x5cGgsIGNvbnN0IEZsb2F0UmVjdCYgYm91bmRzKQog
ICAgICAgICB7Ci0gICAgICAgICAgICBtX21ldHJpY3NbaW5kZXhdID0gbWV0cmljczsKKyAgICAg
ICAgICAgIGxvY2F0ZVBhZ2UoZ2x5cGggLyBHbHlwaEJvdW5kc1BhZ2U6OnNpemUpLT5zZXRCb3Vu
ZHNGb3JHbHlwaChnbHlwaCwgYm91bmRzKTsKICAgICAgICAgfQorICAgICAgICAKKyAgICBwcml2
YXRlOgorICAgICAgICBzdHJ1Y3QgR2x5cGhCb3VuZHNQYWdlIHsKKyAgICAgICAgICAgIHN0YXRp
YyBjb25zdCBzaXplX3Qgc2l6ZSA9IDI1NjsgLy8gVXN1YWxseSBjb3ZlcnMgTGF0aW4tMSBpbiBh
IHNpbmdsZSBwYWdlLgorICAgICAgICAgICAgRmxvYXRSZWN0IG1fYm91bmRzW3NpemVdOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBGbG9hdFJlY3QgYm91bmRzRm9yR2x5cGgoR2x5cGggZ2x5
cGgpIGNvbnN0IHsgcmV0dXJuIG1fYm91bmRzW2dseXBoICUgc2l6ZV07IH0KKyAgICAgICAgICAg
IHZvaWQgc2V0Qm91bmRzRm9yR2x5cGgoR2x5cGggZ2x5cGgsIGNvbnN0IEZsb2F0UmVjdCYgYm91
bmRzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHNldEJvdW5kc0ZvckluZGV4KGds
eXBoICUgc2l6ZSwgYm91bmRzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZvaWQgc2V0
Qm91bmRzRm9ySW5kZXgodW5zaWduZWQgaW5kZXgsIGNvbnN0IEZsb2F0UmVjdCYgYm91bmRzKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1fYm91bmRzW2luZGV4XSA9IGJvdW5kczsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICAgICAgCisgICAgICAgIEdseXBoQm91bmRz
UGFnZSogbG9jYXRlUGFnZSh1bnNpZ25lZCBwYWdlTnVtYmVyKQorICAgICAgICB7CisgICAgICAg
ICAgICBpZiAoIXBhZ2VOdW1iZXIgJiYgbV9maWxsZWRQcmltYXJ5UGFnZSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gJm1fcHJpbWFyeVBhZ2U7CisgICAgICAgICAgICByZXR1cm4gbG9jYXRlUGFn
ZVNsb3dDYXNlKHBhZ2VOdW1iZXIpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBHbHlw
aEJvdW5kc1BhZ2UqIGxvY2F0ZVBhZ2VTbG93Q2FzZSh1bnNpZ25lZCBwYWdlTnVtYmVyKTsKKyAg
ICAgICAgCisgICAgICAgIGJvb2wgbV9maWxsZWRQcmltYXJ5UGFnZTsKKyAgICAgICAgR2x5cGhC
b3VuZHNQYWdlIG1fcHJpbWFyeVBhZ2U7IC8vIFdlIG9wdGltaXplIGZvciB0aGUgcGFnZSB0aGF0
IGNvbnRhaW5zIGdseXBoIGluZGljZXMgMC0yNTUuCisgICAgICAgIE93blB0cjxIYXNoTWFwPGlu
dCwgR2x5cGhCb3VuZHNQYWdlKj4gPiBtX3BhZ2VzOwogICAgIH07CiAgICAgCi0gICAgR2x5cGhN
ZXRyaWNzUGFnZSogbG9jYXRlUGFnZSh1bnNpZ25lZCBwYWdlTnVtYmVyKQotICAgIHsKLSAgICAg
ICAgaWYgKCFwYWdlTnVtYmVyICYmIG1fZmlsbGVkUHJpbWFyeVBhZ2UpCi0gICAgICAgICAgICBy
ZXR1cm4gJm1fcHJpbWFyeVBhZ2U7Ci0gICAgICAgIHJldHVybiBsb2NhdGVQYWdlU2xvd0Nhc2Uo
cGFnZU51bWJlcik7Ci0gICAgfQotCi0gICAgR2x5cGhNZXRyaWNzUGFnZSogbG9jYXRlUGFnZVNs
b3dDYXNlKHVuc2lnbmVkIHBhZ2VOdW1iZXIpOwotICAgIAotICAgIGJvb2wgbV9maWxsZWRQcmlt
YXJ5UGFnZTsKLSAgICBHbHlwaE1ldHJpY3NQYWdlIG1fcHJpbWFyeVBhZ2U7IC8vIFdlIG9wdGlt
aXplIGZvciB0aGUgcGFnZSB0aGF0IGNvbnRhaW5zIGdseXBoIGluZGljZXMgMC0yNTUuCi0gICAg
T3duUHRyPEhhc2hNYXA8aW50LCBHbHlwaE1ldHJpY3NQYWdlKj4gPiBtX3BhZ2VzOwotfTsKLQog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR2x5cGhNZXRyaWNzTWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dseXBoTWV0cmljc01hcC5jcHAJKHJldmlzaW9uIDU3OTQ2KQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaE1ldHJpY3NNYXAuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDYyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVp
dGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBu
YW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwot
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJHbHlwaE1ldHJpY3NNYXAuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1HbHlwaE1ldHJp
Y3NNYXA6OkdseXBoTWV0cmljc1BhZ2UqIEdseXBoTWV0cmljc01hcDo6bG9jYXRlUGFnZVNsb3dD
YXNlKHVuc2lnbmVkIHBhZ2VOdW1iZXIpCi17Ci0gICAgR2x5cGhNZXRyaWNzUGFnZSogcGFnZTsK
LSAgICBpZiAoIXBhZ2VOdW1iZXIpIHsKLSAgICAgICAgQVNTRVJUKCFtX2ZpbGxlZFByaW1hcnlQ
YWdlKTsKLSAgICAgICAgcGFnZSA9ICZtX3ByaW1hcnlQYWdlOwotICAgICAgICBtX2ZpbGxlZFBy
aW1hcnlQYWdlID0gdHJ1ZTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAobV9wYWdlcykgewot
ICAgICAgICAgICAgaWYgKChwYWdlID0gbV9wYWdlcy0+Z2V0KHBhZ2VOdW1iZXIpKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gcGFnZTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBtX3Bh
Z2VzLnNldChuZXcgSGFzaE1hcDxpbnQsIEdseXBoTWV0cmljc1BhZ2UqPik7Ci0gICAgICAgIHBh
Z2UgPSBuZXcgR2x5cGhNZXRyaWNzUGFnZTsKLSAgICAgICAgbV9wYWdlcy0+c2V0KHBhZ2VOdW1i
ZXIsIHBhZ2UpOwotICAgIH0KLQotICAgIEdseXBoTWV0cmljcyB1bmtub3duTWV0cmljczsKLSAg
ICB1bmtub3duTWV0cmljcy5ob3Jpem9udGFsQWR2YW5jZSA9IGNHbHlwaFNpemVVbmtub3duOwot
ICAgIHVua25vd25NZXRyaWNzLmJvdW5kaW5nQm94LnNldFdpZHRoKGNHbHlwaFNpemVVbmtub3du
KTsKLSAgICB1bmtub3duTWV0cmljcy5ib3VuZGluZ0JveC5zZXRIZWlnaHQoY0dseXBoU2l6ZVVu
a25vd24pOwotICAgIC8vIEZpbGwgaW4gdGhlIHdob2xlIHBhZ2Ugd2l0aCB0aGUgdW5rbm93biBn
bHlwaCBpbmZvcm1hdGlvbi4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR2x5cGhNZXRy
aWNzUGFnZTo6c2l6ZTsgaSsrKQotICAgICAgICBwYWdlLT5zZXRNZXRyaWNzRm9ySW5kZXgoaSwg
dW5rbm93bk1ldHJpY3MpOwotCi0gICAgcmV0dXJuIHBhZ2U7Ci19Ci0KLX0KSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhNZXRyaWNzTWFwLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaE1ldHJpY3NNYXAuaAkocmV2aXNpb24gNTc5NDYp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoTWV0cmljc01hcC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDEwNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICog
My4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5v
ciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEdseXBoTWV0cmljc01h
cF9oCi0jZGVmaW5lIEdseXBoTWV0cmljc01hcF9oCi0KLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIK
LSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLSNpbmNs
dWRlIDx3dGYvdW5pY29kZS9Vbmljb2RlLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdHlw
ZWRlZiB1bnNpZ25lZCBzaG9ydCBHbHlwaDsKLQotY29uc3QgZmxvYXQgY0dseXBoU2l6ZVVua25v
d24gPSAtMTsKLQotc3RydWN0IEdseXBoTWV0cmljcyB7Ci0gICAgZmxvYXQgaG9yaXpvbnRhbEFk
dmFuY2U7Ci0gICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94OwotfTsKLQotY2xhc3MgR2x5cGhNZXRy
aWNzTWFwIDogcHVibGljIE5vbmNvcHlhYmxlIHsKLXB1YmxpYzoKLSAgICBHbHlwaE1ldHJpY3NN
YXAoKSA6IG1fZmlsbGVkUHJpbWFyeVBhZ2UoZmFsc2UpIHsgfQotICAgIH5HbHlwaE1ldHJpY3NN
YXAoKQotICAgIHsgCi0gICAgICAgIGlmIChtX3BhZ2VzKQotICAgICAgICAgICAgZGVsZXRlQWxs
VmFsdWVzKCptX3BhZ2VzKTsKLSAgICB9Ci0KLSAgICBHbHlwaE1ldHJpY3MgbWV0cmljc0Zvckds
eXBoKEdseXBoIGdseXBoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGxvY2F0ZVBhZ2UoZ2x5cGgg
LyBHbHlwaE1ldHJpY3NQYWdlOjpzaXplKS0+bWV0cmljc0ZvckdseXBoKGdseXBoKTsKLSAgICB9
Ci0KLSAgICBmbG9hdCB3aWR0aEZvckdseXBoKEdseXBoIGdseXBoKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGxvY2F0ZVBhZ2UoZ2x5cGggLyBHbHlwaE1ldHJpY3NQYWdlOjpzaXplKS0+bWV0cmlj
c0ZvckdseXBoKGdseXBoKS5ob3Jpem9udGFsQWR2YW5jZTsKLSAgICB9Ci0KLSAgICB2b2lkIHNl
dE1ldHJpY3NGb3JHbHlwaChHbHlwaCBnbHlwaCwgY29uc3QgR2x5cGhNZXRyaWNzJiBtZXRyaWNz
KQotICAgIHsKLSAgICAgICAgbG9jYXRlUGFnZShnbHlwaCAvIEdseXBoTWV0cmljc1BhZ2U6OnNp
emUpLT5zZXRNZXRyaWNzRm9yR2x5cGgoZ2x5cGgsIG1ldHJpY3MpOwotICAgIH0KLQotcHJpdmF0
ZToKLSAgICBzdHJ1Y3QgR2x5cGhNZXRyaWNzUGFnZSB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBz
aXplX3Qgc2l6ZSA9IDI1NjsgLy8gVXN1YWxseSBjb3ZlcnMgTGF0aW4tMSBpbiBhIHNpbmdsZSBw
YWdlLgotICAgICAgICBHbHlwaE1ldHJpY3MgbV9tZXRyaWNzW3NpemVdOwotCi0gICAgICAgIEds
eXBoTWV0cmljcyBtZXRyaWNzRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0IHsgcmV0dXJuIG1f
bWV0cmljc1tnbHlwaCAlIHNpemVdOyB9Ci0gICAgICAgIHZvaWQgc2V0TWV0cmljc0ZvckdseXBo
KEdseXBoIGdseXBoLCBjb25zdCBHbHlwaE1ldHJpY3MmIG1ldHJpY3MpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHNldE1ldHJpY3NGb3JJbmRleChnbHlwaCAlIHNpemUsIG1ldHJpY3MpOwotICAg
ICAgICB9Ci0gICAgICAgIHZvaWQgc2V0TWV0cmljc0ZvckluZGV4KHVuc2lnbmVkIGluZGV4LCBj
b25zdCBHbHlwaE1ldHJpY3MmIG1ldHJpY3MpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fbWV0
cmljc1tpbmRleF0gPSBtZXRyaWNzOwotICAgICAgICB9Ci0gICAgfTsKLSAgICAKLSAgICBHbHlw
aE1ldHJpY3NQYWdlKiBsb2NhdGVQYWdlKHVuc2lnbmVkIHBhZ2VOdW1iZXIpCi0gICAgewotICAg
ICAgICBpZiAoIXBhZ2VOdW1iZXIgJiYgbV9maWxsZWRQcmltYXJ5UGFnZSkKLSAgICAgICAgICAg
IHJldHVybiAmbV9wcmltYXJ5UGFnZTsKLSAgICAgICAgcmV0dXJuIGxvY2F0ZVBhZ2VTbG93Q2Fz
ZShwYWdlTnVtYmVyKTsKLSAgICB9Ci0KLSAgICBHbHlwaE1ldHJpY3NQYWdlKiBsb2NhdGVQYWdl
U2xvd0Nhc2UodW5zaWduZWQgcGFnZU51bWJlcik7Ci0gICAgCi0gICAgYm9vbCBtX2ZpbGxlZFBy
aW1hcnlQYWdlOwotICAgIEdseXBoTWV0cmljc1BhZ2UgbV9wcmltYXJ5UGFnZTsgLy8gV2Ugb3B0
aW1pemUgZm9yIHRoZSBwYWdlIHRoYXQgY29udGFpbnMgZ2x5cGggaW5kaWNlcyAwLTI1NS4KLSAg
ICBPd25QdHI8SGFzaE1hcDxpbnQsIEdseXBoTWV0cmljc1BhZ2UqPiA+IG1fcGFnZXM7Ci19Owot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HbHlwaFdpZHRoTWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dseXBoV2lkdGhNYXAuY3BwCShyZXZpc2lvbiA1Nzk0NikJKGZyb20gV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaE1ldHJpY3NNYXAuY3BwOjU3OTQ2KQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFdpZHRoTWFwLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRo
ZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFt
ZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
R2x5cGhNZXRyaWNzTWFwLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworR2x5cGhNZXRyaWNz
TWFwOjpHbHlwaE1ldHJpY3NQYWdlKiBHbHlwaE1ldHJpY3NNYXA6OmxvY2F0ZVBhZ2VTbG93Q2Fz
ZSh1bnNpZ25lZCBwYWdlTnVtYmVyKQoreworICAgIEdseXBoTWV0cmljc1BhZ2UqIHBhZ2U7Cisg
ICAgaWYgKCFwYWdlTnVtYmVyKSB7CisgICAgICAgIEFTU0VSVCghbV9maWxsZWRQcmltYXJ5UGFn
ZSk7CisgICAgICAgIHBhZ2UgPSAmbV9wcmltYXJ5UGFnZTsKKyAgICAgICAgbV9maWxsZWRQcmlt
YXJ5UGFnZSA9IHRydWU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKG1fcGFnZXMpIHsKKyAg
ICAgICAgICAgIGlmICgocGFnZSA9IG1fcGFnZXMtPmdldChwYWdlTnVtYmVyKSkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIHBhZ2U7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbV9wYWdl
cy5zZXQobmV3IEhhc2hNYXA8aW50LCBHbHlwaE1ldHJpY3NQYWdlKj4pOworICAgICAgICBwYWdl
ID0gbmV3IEdseXBoTWV0cmljc1BhZ2U7CisgICAgICAgIG1fcGFnZXMtPnNldChwYWdlTnVtYmVy
LCBwYWdlKTsKKyAgICB9CisKKyAgICBHbHlwaE1ldHJpY3MgdW5rbm93bk1ldHJpY3M7CisgICAg
dW5rbm93bk1ldHJpY3MuaG9yaXpvbnRhbEFkdmFuY2UgPSBjR2x5cGhTaXplVW5rbm93bjsKKyAg
ICB1bmtub3duTWV0cmljcy5ib3VuZGluZ0JveC5zZXRXaWR0aChjR2x5cGhTaXplVW5rbm93bik7
CisgICAgdW5rbm93bk1ldHJpY3MuYm91bmRpbmdCb3guc2V0SGVpZ2h0KGNHbHlwaFNpemVVbmtu
b3duKTsKKyAgICAvLyBGaWxsIGluIHRoZSB3aG9sZSBwYWdlIHdpdGggdGhlIHVua25vd24gZ2x5
cGggaW5mb3JtYXRpb24uCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdseXBoTWV0cmlj
c1BhZ2U6OnNpemU7IGkrKykKKyAgICAgICAgcGFnZS0+c2V0TWV0cmljc0ZvckluZGV4KGksIHVu
a25vd25NZXRyaWNzKTsKKworICAgIHJldHVybiBwYWdlOworfQorCit9CkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoV2lkdGhNYXAuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhXaWR0aE1hcC5jcHAJKHJldmlzaW9uIDU3OTQ2KQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFdpZHRoTWFwLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA5
LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjcsMzYgKzI3LDMyIEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIkdseXBoTWV0cmljc01hcC5oIgorI2luY2x1ZGUgIkdseXBoV2lkdGhN
YXAuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewotCi1HbHlwaE1ldHJpY3NNYXA6OkdseXBoTWV0
cmljc1BhZ2UqIEdseXBoTWV0cmljc01hcDo6bG9jYXRlUGFnZVNsb3dDYXNlKHVuc2lnbmVkIHBh
Z2VOdW1iZXIpCi17Ci0gICAgR2x5cGhNZXRyaWNzUGFnZSogcGFnZTsKLSAgICBpZiAoIXBhZ2VO
dW1iZXIpIHsKLSAgICAgICAgQVNTRVJUKCFtX2ZpbGxlZFByaW1hcnlQYWdlKTsKLSAgICAgICAg
cGFnZSA9ICZtX3ByaW1hcnlQYWdlOwotICAgICAgICBtX2ZpbGxlZFByaW1hcnlQYWdlID0gdHJ1
ZTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAobV9wYWdlcykgewotICAgICAgICAgICAgaWYg
KChwYWdlID0gbV9wYWdlcy0+Z2V0KHBhZ2VOdW1iZXIpKSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gcGFnZTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBtX3BhZ2VzLnNldChuZXcgSGFz
aE1hcDxpbnQsIEdseXBoTWV0cmljc1BhZ2UqPik7Ci0gICAgICAgIHBhZ2UgPSBuZXcgR2x5cGhN
ZXRyaWNzUGFnZTsKLSAgICAgICAgbV9wYWdlcy0+c2V0KHBhZ2VOdW1iZXIsIHBhZ2UpOworICAg
IAorICAgIEdseXBoV2lkdGhNYXA6OkdseXBoV2lkdGhQYWdlKiBHbHlwaFdpZHRoTWFwOjpsb2Nh
dGVQYWdlU2xvd0Nhc2UodW5zaWduZWQgcGFnZU51bWJlcikKKyAgICB7CisgICAgICAgIEdseXBo
V2lkdGhQYWdlKiBwYWdlOworICAgICAgICBpZiAoIXBhZ2VOdW1iZXIpIHsKKyAgICAgICAgICAg
IEFTU0VSVCghbV9maWxsZWRQcmltYXJ5UGFnZSk7CisgICAgICAgICAgICBwYWdlID0gJm1fcHJp
bWFyeVBhZ2U7CisgICAgICAgICAgICBtX2ZpbGxlZFByaW1hcnlQYWdlID0gdHJ1ZTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChtX3BhZ2VzKSB7CisgICAgICAgICAgICAgICAg
aWYgKChwYWdlID0gbV9wYWdlcy0+Z2V0KHBhZ2VOdW1iZXIpKSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHBhZ2U7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBtX3Bh
Z2VzLnNldChuZXcgSGFzaE1hcDxpbnQsIEdseXBoV2lkdGhQYWdlKj4pOworICAgICAgICAgICAg
cGFnZSA9IG5ldyBHbHlwaFdpZHRoUGFnZTsKKyAgICAgICAgICAgIG1fcGFnZXMtPnNldChwYWdl
TnVtYmVyLCBwYWdlKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRmlsbCBpbiB0
aGUgd2hvbGUgcGFnZSB3aXRoIHRoZSB1bmtub3duIGdseXBoIHdpZHRoIHZhbHVlLgorICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR2x5cGhXaWR0aFBhZ2U6OnNpemU7IGkrKykKKyAg
ICAgICAgICAgIHBhZ2UtPnNldFdpZHRoRm9ySW5kZXgoaSwgY0dseXBoV2lkdGhVbmtub3duKTsK
KyAgICAgICAgCisgICAgICAgIHJldHVybiBwYWdlOwogICAgIH0KLQotICAgIEdseXBoTWV0cmlj
cyB1bmtub3duTWV0cmljczsKLSAgICB1bmtub3duTWV0cmljcy5ob3Jpem9udGFsQWR2YW5jZSA9
IGNHbHlwaFNpemVVbmtub3duOwotICAgIHVua25vd25NZXRyaWNzLmJvdW5kaW5nQm94LnNldFdp
ZHRoKGNHbHlwaFNpemVVbmtub3duKTsKLSAgICB1bmtub3duTWV0cmljcy5ib3VuZGluZ0JveC5z
ZXRIZWlnaHQoY0dseXBoU2l6ZVVua25vd24pOwotICAgIC8vIEZpbGwgaW4gdGhlIHdob2xlIHBh
Z2Ugd2l0aCB0aGUgdW5rbm93biBnbHlwaCBpbmZvcm1hdGlvbi4KLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgR2x5cGhNZXRyaWNzUGFnZTo6c2l6ZTsgaSsrKQotICAgICAgICBwYWdlLT5z
ZXRNZXRyaWNzRm9ySW5kZXgoaSwgdW5rbm93bk1ldHJpY3MpOwotCi0gICAgcmV0dXJuIHBhZ2U7
Ci19Ci0KKyAgICAKIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhXaWR0
aE1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhXaWR0
aE1hcC5oCShyZXZpc2lvbiA1Nzk0NikJKGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
bHlwaE1ldHJpY3NNYXAuaDo1Nzk0NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5
cGhXaWR0aE1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA2LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0
ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisg
KiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIEdseXBoTWV0cmljc01hcF9oCisjZGVmaW5lIEdseXBoTWV0cmljc01hcF9oCisKKyNp
bmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUg
PHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmljb2RlLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBHbHlwaDsKKworY29uc3Qg
ZmxvYXQgY0dseXBoU2l6ZVVua25vd24gPSAtMTsKKworc3RydWN0IEdseXBoTWV0cmljcyB7Cisg
ICAgZmxvYXQgaG9yaXpvbnRhbEFkdmFuY2U7CisgICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94Owor
fTsKKworY2xhc3MgR2x5cGhNZXRyaWNzTWFwIDogcHVibGljIE5vbmNvcHlhYmxlIHsKK3B1Ymxp
YzoKKyAgICBHbHlwaE1ldHJpY3NNYXAoKSA6IG1fZmlsbGVkUHJpbWFyeVBhZ2UoZmFsc2UpIHsg
fQorICAgIH5HbHlwaE1ldHJpY3NNYXAoKQorICAgIHsgCisgICAgICAgIGlmIChtX3BhZ2VzKQor
ICAgICAgICAgICAgZGVsZXRlQWxsVmFsdWVzKCptX3BhZ2VzKTsKKyAgICB9CisKKyAgICBHbHlw
aE1ldHJpY3MgbWV0cmljc0ZvckdseXBoKEdseXBoIGdseXBoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGxvY2F0ZVBhZ2UoZ2x5cGggLyBHbHlwaE1ldHJpY3NQYWdlOjpzaXplKS0+bWV0cmljc0Zv
ckdseXBoKGdseXBoKTsKKyAgICB9CisKKyAgICBmbG9hdCB3aWR0aEZvckdseXBoKEdseXBoIGds
eXBoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGxvY2F0ZVBhZ2UoZ2x5cGggLyBHbHlwaE1ldHJp
Y3NQYWdlOjpzaXplKS0+bWV0cmljc0ZvckdseXBoKGdseXBoKS5ob3Jpem9udGFsQWR2YW5jZTsK
KyAgICB9CisKKyAgICB2b2lkIHNldE1ldHJpY3NGb3JHbHlwaChHbHlwaCBnbHlwaCwgY29uc3Qg
R2x5cGhNZXRyaWNzJiBtZXRyaWNzKQorICAgIHsKKyAgICAgICAgbG9jYXRlUGFnZShnbHlwaCAv
IEdseXBoTWV0cmljc1BhZ2U6OnNpemUpLT5zZXRNZXRyaWNzRm9yR2x5cGgoZ2x5cGgsIG1ldHJp
Y3MpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBzdHJ1Y3QgR2x5cGhNZXRyaWNzUGFnZSB7Cisg
ICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc2l6ZSA9IDI1NjsgLy8gVXN1YWxseSBjb3ZlcnMg
TGF0aW4tMSBpbiBhIHNpbmdsZSBwYWdlLgorICAgICAgICBHbHlwaE1ldHJpY3MgbV9tZXRyaWNz
W3NpemVdOworCisgICAgICAgIEdseXBoTWV0cmljcyBtZXRyaWNzRm9yR2x5cGgoR2x5cGggZ2x5
cGgpIGNvbnN0IHsgcmV0dXJuIG1fbWV0cmljc1tnbHlwaCAlIHNpemVdOyB9CisgICAgICAgIHZv
aWQgc2V0TWV0cmljc0ZvckdseXBoKEdseXBoIGdseXBoLCBjb25zdCBHbHlwaE1ldHJpY3MmIG1l
dHJpY3MpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNldE1ldHJpY3NGb3JJbmRleChnbHlwaCAl
IHNpemUsIG1ldHJpY3MpOworICAgICAgICB9CisgICAgICAgIHZvaWQgc2V0TWV0cmljc0Zvcklu
ZGV4KHVuc2lnbmVkIGluZGV4LCBjb25zdCBHbHlwaE1ldHJpY3MmIG1ldHJpY3MpCisgICAgICAg
IHsKKyAgICAgICAgICAgIG1fbWV0cmljc1tpbmRleF0gPSBtZXRyaWNzOworICAgICAgICB9Cisg
ICAgfTsKKyAgICAKKyAgICBHbHlwaE1ldHJpY3NQYWdlKiBsb2NhdGVQYWdlKHVuc2lnbmVkIHBh
Z2VOdW1iZXIpCisgICAgeworICAgICAgICBpZiAoIXBhZ2VOdW1iZXIgJiYgbV9maWxsZWRQcmlt
YXJ5UGFnZSkKKyAgICAgICAgICAgIHJldHVybiAmbV9wcmltYXJ5UGFnZTsKKyAgICAgICAgcmV0
dXJuIGxvY2F0ZVBhZ2VTbG93Q2FzZShwYWdlTnVtYmVyKTsKKyAgICB9CisKKyAgICBHbHlwaE1l
dHJpY3NQYWdlKiBsb2NhdGVQYWdlU2xvd0Nhc2UodW5zaWduZWQgcGFnZU51bWJlcik7CisgICAg
CisgICAgYm9vbCBtX2ZpbGxlZFByaW1hcnlQYWdlOworICAgIEdseXBoTWV0cmljc1BhZ2UgbV9w
cmltYXJ5UGFnZTsgLy8gV2Ugb3B0aW1pemUgZm9yIHRoZSBwYWdlIHRoYXQgY29udGFpbnMgZ2x5
cGggaW5kaWNlcyAwLTI1NS4KKyAgICBPd25QdHI8SGFzaE1hcDxpbnQsIEdseXBoTWV0cmljc1Bh
Z2UqPiA+IG1fcGFnZXM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFdpZHRoTWFwLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFdpZHRoTWFwLmgJKHJldmlzaW9u
IDU3OTQ2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFdpZHRoTWFwLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAy
MDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
NiwgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDc5ICsyNiw2OCBAQAogICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAq
LwogCi0jaWZuZGVmIEdseXBoTWV0cmljc01hcF9oCi0jZGVmaW5lIEdseXBoTWV0cmljc01hcF9o
CisjaWZuZGVmIEdseXBoV2lkdGhNYXBfaAorI2RlZmluZSBHbHlwaFdpZHRoTWFwX2gKIAotI2lu
Y2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8
d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VuaWNvZGUuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewotCi10eXBlZGVmIHVuc2lnbmVkIHNob3J0IEdseXBoOwotCi1jb25zdCBm
bG9hdCBjR2x5cGhTaXplVW5rbm93biA9IC0xOwotCi1zdHJ1Y3QgR2x5cGhNZXRyaWNzIHsKLSAg
ICBmbG9hdCBob3Jpem9udGFsQWR2YW5jZTsKLSAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3g7Ci19
OwotCi1jbGFzcyBHbHlwaE1ldHJpY3NNYXAgOiBwdWJsaWMgTm9uY29weWFibGUgewotcHVibGlj
OgotICAgIEdseXBoTWV0cmljc01hcCgpIDogbV9maWxsZWRQcmltYXJ5UGFnZShmYWxzZSkgeyB9
Ci0gICAgfkdseXBoTWV0cmljc01hcCgpCi0gICAgeyAKLSAgICAgICAgaWYgKG1fcGFnZXMpCi0g
ICAgICAgICAgICBkZWxldGVBbGxWYWx1ZXMoKm1fcGFnZXMpOwotICAgIH0KLQotICAgIEdseXBo
TWV0cmljcyBtZXRyaWNzRm9yR2x5cGgoR2x5cGggZ2x5cGgpCi0gICAgewotICAgICAgICByZXR1
cm4gbG9jYXRlUGFnZShnbHlwaCAvIEdseXBoTWV0cmljc1BhZ2U6OnNpemUpLT5tZXRyaWNzRm9y
R2x5cGgoZ2x5cGgpOwotICAgIH0KLQotICAgIGZsb2F0IHdpZHRoRm9yR2x5cGgoR2x5cGggZ2x5
cGgpCi0gICAgewotICAgICAgICByZXR1cm4gbG9jYXRlUGFnZShnbHlwaCAvIEdseXBoTWV0cmlj
c1BhZ2U6OnNpemUpLT5tZXRyaWNzRm9yR2x5cGgoZ2x5cGgpLmhvcml6b250YWxBZHZhbmNlOwot
ICAgIH0KLQotICAgIHZvaWQgc2V0TWV0cmljc0ZvckdseXBoKEdseXBoIGdseXBoLCBjb25zdCBH
bHlwaE1ldHJpY3MmIG1ldHJpY3MpCi0gICAgewotICAgICAgICBsb2NhdGVQYWdlKGdseXBoIC8g
R2x5cGhNZXRyaWNzUGFnZTo6c2l6ZSktPnNldE1ldHJpY3NGb3JHbHlwaChnbHlwaCwgbWV0cmlj
cyk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIHN0cnVjdCBHbHlwaE1ldHJpY3NQYWdlIHsKLSAg
ICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBzaXplID0gMjU2OyAvLyBVc3VhbGx5IGNvdmVycyBM
YXRpbi0xIGluIGEgc2luZ2xlIHBhZ2UuCi0gICAgICAgIEdseXBoTWV0cmljcyBtX21ldHJpY3Nb
c2l6ZV07Ci0KLSAgICAgICAgR2x5cGhNZXRyaWNzIG1ldHJpY3NGb3JHbHlwaChHbHlwaCBnbHlw
aCkgY29uc3QgeyByZXR1cm4gbV9tZXRyaWNzW2dseXBoICUgc2l6ZV07IH0KLSAgICAgICAgdm9p
ZCBzZXRNZXRyaWNzRm9yR2x5cGgoR2x5cGggZ2x5cGgsIGNvbnN0IEdseXBoTWV0cmljcyYgbWV0
cmljcykKKyAgICAKKyAgICB0eXBlZGVmIHVuc2lnbmVkIHNob3J0IEdseXBoOworICAgIAorICAg
IGNvbnN0IGZsb2F0IGNHbHlwaFdpZHRoVW5rbm93biA9IC0xOworICAgIAorICAgIGNsYXNzIEds
eXBoV2lkdGhNYXAgOiBwdWJsaWMgTm9uY29weWFibGUgeworICAgIHB1YmxpYzoKKyAgICAgICAg
R2x5cGhXaWR0aE1hcCgpIDogbV9maWxsZWRQcmltYXJ5UGFnZShmYWxzZSkgeyB9CisgICAgICAg
IH5HbHlwaFdpZHRoTWFwKCkKKyAgICAgICAgeyAKKyAgICAgICAgICAgIGlmIChtX3BhZ2VzKQor
ICAgICAgICAgICAgICAgIGRlbGV0ZUFsbFZhbHVlcygqbV9wYWdlcyk7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIGZsb2F0IHdpZHRoRm9yR2x5cGgoR2x5cGggZ2x5cGgpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIHNldE1ldHJpY3NGb3JJbmRleChnbHlwaCAlIHNpemUsIG1ldHJpY3Mp
OworICAgICAgICAgICAgcmV0dXJuIGxvY2F0ZVBhZ2UoZ2x5cGggLyBHbHlwaFdpZHRoUGFnZTo6
c2l6ZSktPndpZHRoRm9yR2x5cGgoZ2x5cGgpOwogICAgICAgICB9Ci0gICAgICAgIHZvaWQgc2V0
TWV0cmljc0ZvckluZGV4KHVuc2lnbmVkIGluZGV4LCBjb25zdCBHbHlwaE1ldHJpY3MmIG1ldHJp
Y3MpCisgICAgICAgIAorICAgICAgICB2b2lkIHNldFdpZHRoRm9yR2x5cGgoR2x5cGggZ2x5cGgs
IGZsb2F0IHdpZHRoKQogICAgICAgICB7Ci0gICAgICAgICAgICBtX21ldHJpY3NbaW5kZXhdID0g
bWV0cmljczsKKyAgICAgICAgICAgIGxvY2F0ZVBhZ2UoZ2x5cGggLyBHbHlwaFdpZHRoUGFnZTo6
c2l6ZSktPnNldFdpZHRoRm9yR2x5cGgoZ2x5cGgsIHdpZHRoKTsKICAgICAgICAgfQorICAgICAg
ICAKKyAgICBwcml2YXRlOgorICAgICAgICBzdHJ1Y3QgR2x5cGhXaWR0aFBhZ2UgeworICAgICAg
ICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBzaXplID0gMjU2OyAvLyBVc3VhbGx5IGNvdmVycyBM
YXRpbi0xIGluIGEgc2luZ2xlIHBhZ2UuCisgICAgICAgICAgICBmbG9hdCBtX3dpZHRoc1tzaXpl
XTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZmxvYXQgd2lkdGhGb3JHbHlwaChHbHlwaCBn
bHlwaCkgY29uc3QgeyByZXR1cm4gbV93aWR0aHNbZ2x5cGggJSBzaXplXTsgfQorICAgICAgICAg
ICAgdm9pZCBzZXRXaWR0aEZvckdseXBoKEdseXBoIGdseXBoLCBmbG9hdCB3aWR0aCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBzZXRXaWR0aEZvckluZGV4KGdseXBoICUgc2l6ZSwg
d2lkdGgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdm9pZCBzZXRXaWR0aEZvckluZGV4
KHVuc2lnbmVkIGluZGV4LCBmbG9hdCB3aWR0aCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBtX3dpZHRoc1tpbmRleF0gPSB3aWR0aDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsK
KyAgICAgICAgCisgICAgICAgIEdseXBoV2lkdGhQYWdlKiBsb2NhdGVQYWdlKHVuc2lnbmVkIHBh
Z2VOdW1iZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghcGFnZU51bWJlciAmJiBtX2Zp
bGxlZFByaW1hcnlQYWdlKQorICAgICAgICAgICAgICAgIHJldHVybiAmbV9wcmltYXJ5UGFnZTsK
KyAgICAgICAgICAgIHJldHVybiBsb2NhdGVQYWdlU2xvd0Nhc2UocGFnZU51bWJlcik7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIEdseXBoV2lkdGhQYWdlKiBsb2NhdGVQYWdlU2xvd0Nh
c2UodW5zaWduZWQgcGFnZU51bWJlcik7CisgICAgICAgIAorICAgICAgICBib29sIG1fZmlsbGVk
UHJpbWFyeVBhZ2U7CisgICAgICAgIEdseXBoV2lkdGhQYWdlIG1fcHJpbWFyeVBhZ2U7IC8vIFdl
IG9wdGltaXplIGZvciB0aGUgcGFnZSB0aGF0IGNvbnRhaW5zIGdseXBoIGluZGljZXMgMC0yNTUu
CisgICAgICAgIE93blB0cjxIYXNoTWFwPGludCwgR2x5cGhXaWR0aFBhZ2UqPiA+IG1fcGFnZXM7
CiAgICAgfTsKICAgICAKLSAgICBHbHlwaE1ldHJpY3NQYWdlKiBsb2NhdGVQYWdlKHVuc2lnbmVk
IHBhZ2VOdW1iZXIpCi0gICAgewotICAgICAgICBpZiAoIXBhZ2VOdW1iZXIgJiYgbV9maWxsZWRQ
cmltYXJ5UGFnZSkKLSAgICAgICAgICAgIHJldHVybiAmbV9wcmltYXJ5UGFnZTsKLSAgICAgICAg
cmV0dXJuIGxvY2F0ZVBhZ2VTbG93Q2FzZShwYWdlTnVtYmVyKTsKLSAgICB9Ci0KLSAgICBHbHlw
aE1ldHJpY3NQYWdlKiBsb2NhdGVQYWdlU2xvd0Nhc2UodW5zaWduZWQgcGFnZU51bWJlcik7Ci0g
ICAgCi0gICAgYm9vbCBtX2ZpbGxlZFByaW1hcnlQYWdlOwotICAgIEdseXBoTWV0cmljc1BhZ2Ug
bV9wcmltYXJ5UGFnZTsgLy8gV2Ugb3B0aW1pemUgZm9yIHRoZSBwYWdlIHRoYXQgY29udGFpbnMg
Z2x5cGggaW5kaWNlcyAwLTI1NS4KLSAgICBPd25QdHI8SGFzaE1hcDxpbnQsIEdseXBoTWV0cmlj
c1BhZ2UqPiA+IG1fcGFnZXM7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCit9CiAKICNl
bmRpZgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5j
cHAJKHJldmlzaW9uIDU3OTQ2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVG
b250RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1OCw5ICsxNTgsOCBAQCB2b2lkIFNpbXBs
ZUZvbnREYXRhOjpwbGF0Zm9ybUdseXBoSW5pdCgpCiAgICAgR2x5cGggemVyb1dpZHRoU3BhY2VH
bHlwaCA9IGdseXBoUGFnZVplcm8tPmdseXBoRGF0YUZvckNoYXJhY3RlcigwKS5nbHlwaDsKICAg
ICBpZiAoemVyb1dpZHRoU3BhY2VHbHlwaCkgewogICAgICAgICBpZiAoemVyb1dpZHRoU3BhY2VH
bHlwaCAhPSBtX3NwYWNlR2x5cGgpIHsKLSAgICAgICAgICAgIEdseXBoTWV0cmljcyBtZXRyaWNz
OwotICAgICAgICAgICAgbWV0cmljcy5ob3Jpem9udGFsQWR2YW5jZSA9IDA7Ci0gICAgICAgICAg
ICBtX2dseXBoVG9NZXRyaWNzTWFwLnNldE1ldHJpY3NGb3JHbHlwaCh6ZXJvV2lkdGhTcGFjZUds
eXBoLCBtZXRyaWNzKTsKKyAgICAgICAgICAgIG1fZ2x5cGhUb1dpZHRoTWFwLnNldFdpZHRoRm9y
R2x5cGgoemVyb1dpZHRoU3BhY2VHbHlwaCwgMCk7CisgICAgICAgICAgICBtX2dseXBoVG9Cb3Vu
ZHNNYXAuc2V0Qm91bmRzRm9yR2x5cGgoemVyb1dpZHRoU3BhY2VHbHlwaCwgRmxvYXRSZWN0KCkp
OwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIExPR19FUlJPUigiRm9udCBtYXBzIFNQQUNF
IGFuZCBaRVJPIFdJRFRIIFNQQUNFIHRvIHRoZSBzYW1lIGdseXBoLiBHbHlwaCB3aWR0aCBub3Qg
b3ZlcnJpZGRlbi4iKTsKICAgICB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Np
bXBsZUZvbnREYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9T
aW1wbGVGb250RGF0YS5oCShyZXZpc2lvbiA1Nzk0NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvU2ltcGxlRm9udERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsOCBAQAog
CiAjaW5jbHVkZSAiRm9udERhdGEuaCIKICNpbmNsdWRlICJGb250UGxhdGZvcm1EYXRhLmgiCi0j
aW5jbHVkZSAiR2x5cGhNZXRyaWNzTWFwLmgiCisjaW5jbHVkZSAiR2x5cGhCb3VuZHNNYXAuaCIK
KyNpbmNsdWRlICJHbHlwaFdpZHRoTWFwLmgiCiAjaW5jbHVkZSAiR2x5cGhQYWdlVHJlZU5vZGUu
aCIKICNpbmNsdWRlICJUeXBlc2V0dGluZ0ZlYXR1cmVzLmgiCiAjaW5jbHVkZSA8d3RmL093blB0
ci5oPgpAQCAtNTksNiArNjAsMTEgQEAgY2xhc3MgRm9udFBsYXRmb3JtRGF0YTsKIGNsYXNzIFNo
YXJlZEJ1ZmZlcjsKIGNsYXNzIFNWR0ZvbnREYXRhOwogCitzdHJ1Y3QgR2x5cGhNZXRyaWNzIHsK
KyAgICBmbG9hdCBob3Jpem9udGFsQWR2YW5jZTsKKyAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3g7
Cit9OworICAgIAogZW51bSBQaXRjaCB7IFVua25vd25QaXRjaCwgRml4ZWRQaXRjaCwgVmFyaWFi
bGVQaXRjaCB9OwogZW51bSBHbHlwaE1ldHJpY3NNb2RlIHsgR2x5cGhCb3VuZGluZ0JveCwgR2x5
cGhXaWR0aE9ubHkgfTsKIApAQCAtODMsNyArODksOCBAQCBwdWJsaWM6CiAKICAgICBmbG9hdCB3
aWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdCB7IHJldHVybiBtZXRyaWNzRm9yR2x5cGgo
Z2x5cGgsIEdseXBoV2lkdGhPbmx5KS5ob3Jpem9udGFsQWR2YW5jZTsgfQogICAgIEdseXBoTWV0
cmljcyBtZXRyaWNzRm9yR2x5cGgoR2x5cGgsIEdseXBoTWV0cmljc01vZGUgPSBHbHlwaEJvdW5k
aW5nQm94KSBjb25zdDsKLSAgICBHbHlwaE1ldHJpY3MgcGxhdGZvcm1NZXRyaWNzRm9yR2x5cGgo
R2x5cGgsIEdseXBoTWV0cmljc01vZGUpIGNvbnN0OworICAgIGZsb2F0IHBsYXRmb3JtV2lkdGhG
b3JHbHlwaChHbHlwaCkgY29uc3Q7CisgICAgRmxvYXRSZWN0IHBsYXRmb3JtQm91bmRzRm9yR2x5
cGgoR2x5cGgpIGNvbnN0OwogCiAgICAgZmxvYXQgc3BhY2VXaWR0aCgpIGNvbnN0IHsgcmV0dXJu
IG1fc3BhY2VXaWR0aDsgfQogICAgIGZsb2F0IGFkanVzdGVkU3BhY2VXaWR0aCgpIGNvbnN0IHsg
cmV0dXJuIG1fYWRqdXN0ZWRTcGFjZVdpZHRoOyB9CkBAIC0xODIsNyArMTg5LDggQEAgcHJpdmF0
ZToKIAogICAgIEZvbnRQbGF0Zm9ybURhdGEgbV9wbGF0Zm9ybURhdGE7CiAKLSAgICBtdXRhYmxl
IEdseXBoTWV0cmljc01hcCBtX2dseXBoVG9NZXRyaWNzTWFwOworICAgIG11dGFibGUgR2x5cGhC
b3VuZHNNYXAgbV9nbHlwaFRvQm91bmRzTWFwOworICAgIG11dGFibGUgR2x5cGhXaWR0aE1hcCBt
X2dseXBoVG9XaWR0aE1hcDsKIAogICAgIGJvb2wgbV90cmVhdEFzRml4ZWRQaXRjaDsKIApAQCAt
MjQwLDEyICsyNDgsMjEgQEAgcHJpdmF0ZToKICNpZiAhUExBVEZPUk0oUVQpCiBBTFdBWVNfSU5M
SU5FIEdseXBoTWV0cmljcyBTaW1wbGVGb250RGF0YTo6bWV0cmljc0ZvckdseXBoKEdseXBoIGds
eXBoLCBHbHlwaE1ldHJpY3NNb2RlIG1ldHJpY3NNb2RlKSBjb25zdAogewotICAgIEdseXBoTWV0
cmljcyBtZXRyaWNzID0gbV9nbHlwaFRvTWV0cmljc01hcC5tZXRyaWNzRm9yR2x5cGgoZ2x5cGgp
OwotICAgIGlmICgobWV0cmljc01vZGUgPT0gR2x5cGhXaWR0aE9ubHkgJiYgbWV0cmljcy5ob3Jp
em9udGFsQWR2YW5jZSAhPSBjR2x5cGhTaXplVW5rbm93bikgfHwgKG1ldHJpY3NNb2RlID09IEds
eXBoQm91bmRpbmdCb3ggJiYgbWV0cmljcy5ib3VuZGluZ0JveC53aWR0aCgpICE9IGNHbHlwaFNp
emVVbmtub3duKSkKKyAgICBHbHlwaE1ldHJpY3MgbWV0cmljczsKKyAgICBtZXRyaWNzLmhvcml6
b250YWxBZHZhbmNlID0gbV9nbHlwaFRvV2lkdGhNYXAud2lkdGhGb3JHbHlwaChnbHlwaCk7Cisg
ICAgaWYgKG1ldHJpY3NNb2RlID09IEdseXBoV2lkdGhPbmx5ICYmIG1ldHJpY3MuaG9yaXpvbnRh
bEFkdmFuY2UgIT0gY0dseXBoV2lkdGhVbmtub3duKQogICAgICAgICByZXR1cm4gbWV0cmljczsK
IAotICAgIG1ldHJpY3MgPSBwbGF0Zm9ybU1ldHJpY3NGb3JHbHlwaChnbHlwaCwgbWV0cmljc01v
ZGUpOwotICAgIG1fZ2x5cGhUb01ldHJpY3NNYXAuc2V0TWV0cmljc0ZvckdseXBoKGdseXBoLCBt
ZXRyaWNzKTsKKyAgICBtZXRyaWNzLmhvcml6b250YWxBZHZhbmNlID0gcGxhdGZvcm1XaWR0aEZv
ckdseXBoKGdseXBoKTsKKyAgICBtX2dseXBoVG9XaWR0aE1hcC5zZXRXaWR0aEZvckdseXBoKGds
eXBoLCBtZXRyaWNzLmhvcml6b250YWxBZHZhbmNlKTsKKworICAgIGlmIChtZXRyaWNzTW9kZSA9
PSBHbHlwaEJvdW5kaW5nQm94KSB7CisgICAgICAgIG1ldHJpY3MuYm91bmRpbmdCb3ggPSBtX2ds
eXBoVG9Cb3VuZHNNYXAuYm91bmRzRm9yR2x5cGgoZ2x5cGgpOworICAgICAgICBpZiAobWV0cmlj
cy5ib3VuZGluZ0JveC53aWR0aCgpICE9IGNHbHlwaFNpemVVbmtub3duKQorICAgICAgICAgICAg
cmV0dXJuIG1ldHJpY3M7CisgICAgICAgIG1ldHJpY3MuYm91bmRpbmdCb3ggPSBwbGF0Zm9ybUJv
dW5kc0ZvckdseXBoKGdseXBoKTsKKyAgICAgICAgbV9nbHlwaFRvQm91bmRzTWFwLnNldEJvdW5k
c0ZvckdseXBoKGdseXBoLCBtZXRyaWNzLmJvdW5kaW5nQm94KTsKKyAgICB9CiAKICAgICByZXR1
cm4gbWV0cmljczsKIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vU2lt
cGxlRm9udERhdGFDYWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9TaW1wbGVGb250RGF0YUNhaXJvLmNwcAkocmV2aXNpb24gNTc5NDYpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1NpbXBsZUZvbnREYXRhQ2Fpcm8uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTQsNyArMTE0LDEyIEBAIHZvaWQgU2ltcGxlRm9udERhdGE6OmRl
dGVybWluZVBpdGNoKCkKICAgICBtX3RyZWF0QXNGaXhlZFBpdGNoID0gbV9wbGF0Zm9ybURhdGEu
aXNGaXhlZFBpdGNoKCk7CiB9CiAKLUdseXBoTWV0cmljcyBTaW1wbGVGb250RGF0YTo6cGxhdGZv
cm1NZXRyaWNzRm9yR2x5cGgoR2x5cGggZ2x5cGgsIEdseXBoTWV0cmljc01vZGUpIGNvbnN0CitG
bG9hdFJlY3QgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQm91bmRzRm9yR2x5cGgoR2x5cGgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIEZsb2F0UmVjdCgpOworfQorCitmbG9hdCBTaW1wbGVGb250RGF0
YTo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAogewogICAgIEFTU0VS
VChtX3BsYXRmb3JtRGF0YS5tX3NjYWxlZEZvbnQpOwogCkBAIC0xMjUsMTAgKzEzMCw4IEBAIEds
eXBoTWV0cmljcyBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1NZXQKICAgICBmbG9hdCB3ID0gKGZs
b2F0KW1fc3BhY2VXaWR0aDsKICAgICBpZiAoY2Fpcm9fc2NhbGVkX2ZvbnRfc3RhdHVzKG1fcGxh
dGZvcm1EYXRhLm1fc2NhbGVkRm9udCkgPT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1MgJiYgZXh0ZW50
cy54X2FkdmFuY2UgIT0gMCkKICAgICAgICAgdyA9IChmbG9hdClleHRlbnRzLnhfYWR2YW5jZTsK
LSAgICAKLSAgICBHbHlwaE1ldHJpY3MgbWV0cmljczsKLSAgICBtZXRyaWNzLmhvcml6b250YWxB
ZHZhbmNlID0gdzsKLSAgICByZXR1cm4gbWV0cmljczsKKworICAgIHJldHVybiB3OyAgICAKIH0K
IAogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TaW1wbGVGb250
RGF0YUNocm9taXVtV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1NpbXBsZUZvbnREYXRhQ2hyb21pdW1XaW4uY3BwCShyZXZpc2lvbiA1Nzk0
NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2ltcGxlRm9udERhdGFD
aHJvbWl1bVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MSw3ICsxNTEsMTIgQEAgdm9pZCBT
aW1wbGVGb250RGF0YTo6ZGV0ZXJtaW5lUGl0Y2goKQogICAgIFJlbGVhc2VEQygwLCBkYyk7CiB9
CiAKLUdseXBoTWV0cmljcyBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1NZXRyaWNzRm9yR2x5cGgo
R2x5cGggZ2x5cGgsIEdseXBoTWV0cmljc01vZGUpIGNvbnN0CitGbG9hdFJlY3QgU2ltcGxlRm9u
dERhdGE6OnBsYXRmb3JtQm91bmRzRm9yR2x5cGgoR2x5cGgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IEZsb2F0UmVjdCgpOworfQorCitmbG9hdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1XaWR0aEZv
ckdseXBoKEdseXBoIGdseXBoKSBjb25zdAogewogICAgIEhEQyBkYyA9IEdldERDKDApOwogICAg
IEhHRElPQkogb2xkRm9udCA9IFNlbGVjdE9iamVjdChkYywgbV9wbGF0Zm9ybURhdGEuaGZvbnQo
KSk7CkBAIC0xNzAsOSArMTc1LDcgQEAgR2x5cGhNZXRyaWNzIFNpbXBsZUZvbnREYXRhOjpwbGF0
Zm9ybU1ldAogICAgIFNlbGVjdE9iamVjdChkYywgb2xkRm9udCk7CiAgICAgUmVsZWFzZURDKDAs
IGRjKTsKIAotICAgIEdseXBoTWV0cmljcyBtZXRyaWNzOwotICAgIG1ldHJpY3MuaG9yaXpvbnRh
bEFkdmFuY2UgPSBzdGF0aWNfY2FzdDxmbG9hdD4od2lkdGgpOwotICAgIHJldHVybiBtZXRyaWNz
OworICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4od2lkdGgpOwogfQogCiB9ICAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9T
aW1wbGVGb250RGF0YUxpbnV4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1NpbXBsZUZvbnREYXRhTGludXguY3BwCShyZXZpc2lvbiA1Nzk0NikK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2ltcGxlRm9udERhdGFMaW51
eC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3Miw3ICsxNzIsMTIgQEAgdm9pZCBTaW1wbGVGb250
RGF0YTo6ZGV0ZXJtaW5lUGl0Y2goKQogICAgIG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPSBwbGF0Zm9y
bURhdGEoKS5pc0ZpeGVkUGl0Y2goKTsKIH0KIAotR2x5cGhNZXRyaWNzIFNpbXBsZUZvbnREYXRh
OjpwbGF0Zm9ybU1ldHJpY3NGb3JHbHlwaChHbHlwaCBnbHlwaCwgR2x5cGhNZXRyaWNzTW9kZSAv
KiBtZXRyaWNzTW9kZSAqLykgY29uc3QKK0Zsb2F0UmVjdCBTaW1wbGVGb250RGF0YTo6cGxhdGZv
cm1Cb3VuZHNGb3JHbHlwaChHbHlwaCkgY29uc3QKK3sKKyAgICByZXR1cm4gRmxvYXRSZWN0KCk7
Cit9CisgICAgCitmbG9hdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEds
eXBoIGdseXBoKSBjb25zdAogewogICAgIFNrQVNTRVJUKHNpemVvZihnbHlwaCkgPT0gMik7ICAg
Ly8gY29tcGlsZS10aW1lIGFzc2VydAogCkBAIC0xODYsOSArMTkxLDcgQEAgR2x5cGhNZXRyaWNz
IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybU1ldAogICAgIC8vIFRob3VnaCBXZWJLaXQgc3VwcG9y
dHMgbm9uLWludGVncmFsIGFkdmFuY2VzLCBTa2lhIG9ubHkgc3VwcG9ydHMgdGhlbQogICAgIC8v
IGZvciAic3VicGl4ZWwiIChkaXN0aW5jdCBmcm9tIExDRCBzdWJwaXhlbCBhbnRpYWxpYXNpbmcp
IHRleHQsIHdoaWNoCiAgICAgLy8gd2UgZG9uJ3QgdXNlLgotICAgIEdseXBoTWV0cmljcyBtZXRy
aWNzOwotICAgIG1ldHJpY3MuaG9yaXpvbnRhbEFkdmFuY2UgPSByb3VuZChTa1NjYWxhclRvRmxv
YXQod2lkdGgpKTsKLSAgICByZXR1cm4gbWV0cmljczsKKyAgICByZXR1cm4gcm91bmQoU2tTY2Fs
YXJUb0Zsb2F0KHdpZHRoKSk7CiB9CiAKIH0gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9TaW1wbGVGb250RGF0YVBhbmdvLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9TaW1wbGVGb250RGF0YVBh
bmdvLmNwcAkocmV2aXNpb24gNTc5NDYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0
ay9TaW1wbGVGb250RGF0YVBhbmdvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE5LDcgKzExOSwx
MiBAQCB2b2lkIFNpbXBsZUZvbnREYXRhOjpkZXRlcm1pbmVQaXRjaCgpCiAgICAgbV90cmVhdEFz
Rml4ZWRQaXRjaCA9IG1fcGxhdGZvcm1EYXRhLmlzRml4ZWRQaXRjaCgpOwogfQogCi1HbHlwaE1l
dHJpY3MgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtTWV0cmljc0ZvckdseXBoKEdseXBoIGdseXBo
LCBHbHlwaE1ldHJpY3NNb2RlKSBjb25zdAorRmxvYXRSZWN0IFNpbXBsZUZvbnREYXRhOjpwbGF0
Zm9ybUJvdW5kc0ZvckdseXBoKEdseXBoKSBjb25zdAoreworICAgIHJldHVybiBGbG9hdFJlY3Qo
KTsKK30KKworZmxvYXQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtV2lkdGhGb3JHbHlwaChHbHlw
aCBnbHlwaCkgY29uc3QKIHsKICAgICBBU1NFUlQobV9wbGF0Zm9ybURhdGEubV9zY2FsZWRGb250
KTsKIApAQCAtMTI3LDEzICsxMzIsMTEgQEAgR2x5cGhNZXRyaWNzIFNpbXBsZUZvbnREYXRhOjpw
bGF0Zm9ybU1ldAogICAgIGNhaXJvX3RleHRfZXh0ZW50c190IGV4dGVudHM7CiAgICAgY2Fpcm9f
c2NhbGVkX2ZvbnRfZ2x5cGhfZXh0ZW50cyhtX3BsYXRmb3JtRGF0YS5tX3NjYWxlZEZvbnQsICZj
Z2x5cGgsIDEsICZleHRlbnRzKTsKIAotICAgIGZsb2F0IHcgPSAoZmxvYXQpbV9zcGFjZVdpZHRo
OworICAgIGZsb2F0IHdpZHRoID0gKGZsb2F0KW1fc3BhY2VXaWR0aDsKICAgICBpZiAoY2Fpcm9f
c2NhbGVkX2ZvbnRfc3RhdHVzKG1fcGxhdGZvcm1EYXRhLm1fc2NhbGVkRm9udCkgPT0gQ0FJUk9f
U1RBVFVTX1NVQ0NFU1MgJiYgZXh0ZW50cy54X2FkdmFuY2UgIT0gMCkKLSAgICAgICAgdyA9IChm
bG9hdClleHRlbnRzLnhfYWR2YW5jZTsKLSAgICAKLSAgICBHbHlwaE1ldHJpY3MgbWV0cmljczsK
LSAgICBtZXRyaWNzLmhvcml6b250YWxBZHZhbmNlID0gdzsKLSAgICByZXR1cm4gbWV0cmljczsK
KyAgICAgICAgd2lkdGggPSAoZmxvYXQpZXh0ZW50cy54X2FkdmFuY2U7CisKKyAgICByZXR1cm4g
d2lkdGg7ICAgIAogfQogCiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9T
aW1wbGVGb250RGF0YU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL21hYy9TaW1wbGVGb250RGF0YU1hYy5tbQkocmV2aXNpb24gNTc5NDYpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YU1hYy5tbQkod29ya2luZyBjb3B5
KQpAQCAtNDA3LDcgKzQwNywyMiBAQCB2b2lkIFNpbXBsZUZvbnREYXRhOjpkZXRlcm1pbmVQaXRj
aCgpCiAgICAgICAgICAgIFtuYW1lIGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmU6QCJNb25vdHlwZUNv
cnNpdmEiXSAhPSBOU09yZGVyZWRTYW1lOwogfQogCi1HbHlwaE1ldHJpY3MgU2ltcGxlRm9udERh
dGE6OnBsYXRmb3JtTWV0cmljc0ZvckdseXBoKEdseXBoIGdseXBoLCBHbHlwaE1ldHJpY3NNb2Rl
IG1ldHJpY3NNb2RlKSBjb25zdAorRmxvYXRSZWN0IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUJv
dW5kc0ZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAoreworICAgIEZsb2F0UmVjdCBib3VuZGlu
Z0JveDsKKyNpZm5kZWYgQlVJTERJTkdfT05fVElHRVIKKyAgICBDR1JlY3QgYm94OworICAgIENH
Rm9udEdldEdseXBoQkJveGVzKHBsYXRmb3JtRGF0YSgpLmNnRm9udCgpLCAmZ2x5cGgsIDEsICZi
b3gpOworICAgIGZsb2F0IHBvaW50U2l6ZSA9IHBsYXRmb3JtRGF0YSgpLm1fc2l6ZTsKKyAgICBD
R0Zsb2F0IHNjYWxlID0gcG9pbnRTaXplIC8gdW5pdHNQZXJFbSgpOworICAgIGJvdW5kaW5nQm94
ID0gQ0dSZWN0QXBwbHlBZmZpbmVUcmFuc2Zvcm0oYm94LCBDR0FmZmluZVRyYW5zZm9ybU1ha2VT
Y2FsZShzY2FsZSwgLXNjYWxlKSk7CisgICAgaWYgKG1fc3ludGhldGljQm9sZE9mZnNldCkKKyAg
ICAgICAgYm91bmRpbmdCb3guc2V0V2lkdGgoYm91bmRpbmdCb3gud2lkdGgoKSArIG1fc3ludGhl
dGljQm9sZE9mZnNldCk7CisjZW5kaWYKKyAgICByZXR1cm4gYm91bmRpbmdCb3g7Cit9CisKK2Zs
b2F0IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNv
bnN0CiB7CiAgICAgTlNGb250KiBmb250ID0gcGxhdGZvcm1EYXRhKCkuZm9udCgpOwogICAgIGZs
b2F0IHBvaW50U2l6ZSA9IHBsYXRmb3JtRGF0YSgpLm1fc2l6ZTsKQEAgLTQxNywxOSArNDMyLDcg
QEAgR2x5cGhNZXRyaWNzIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybU1ldAogICAgICAgICBMT0df
RVJST1IoIlVuYWJsZSB0byBjYWNoZSBnbHlwaCB3aWR0aHMgZm9yICVAICVmIiwgW2ZvbnQgZGlz
cGxheU5hbWVdLCBwb2ludFNpemUpOwogICAgICAgICBhZHZhbmNlLndpZHRoID0gMDsKICAgICB9
Ci0gICAgR2x5cGhNZXRyaWNzIG1ldHJpY3M7Ci0gICAgbWV0cmljcy5ob3Jpem9udGFsQWR2YW5j
ZSA9IGFkdmFuY2Uud2lkdGggKyBtX3N5bnRoZXRpY0JvbGRPZmZzZXQ7Ci0gICAgaWYgKG1ldHJp
Y3NNb2RlID09IEdseXBoQm91bmRpbmdCb3gpIHsKLSNpZm5kZWYgQlVJTERJTkdfT05fVElHRVIK
LSAgICAgICAgQ0dSZWN0IGJvdW5kaW5nQm94OwotICAgICAgICBDR0ZvbnRHZXRHbHlwaEJCb3hl
cyhwbGF0Zm9ybURhdGEoKS5jZ0ZvbnQoKSwgJmdseXBoLCAxLCAmYm91bmRpbmdCb3gpOwotICAg
ICAgICBDR0Zsb2F0IHNjYWxlID0gcG9pbnRTaXplIC8gdW5pdHNQZXJFbSgpOwotICAgICAgICBt
ZXRyaWNzLmJvdW5kaW5nQm94ID0gQ0dSZWN0QXBwbHlBZmZpbmVUcmFuc2Zvcm0oYm91bmRpbmdC
b3gsIENHQWZmaW5lVHJhbnNmb3JtTWFrZVNjYWxlKHNjYWxlLCAtc2NhbGUpKTsKLSAgICAgICAg
aWYgKG1fc3ludGhldGljQm9sZE9mZnNldCkKLSAgICAgICAgICAgIG1ldHJpY3MuYm91bmRpbmdC
b3guc2V0V2lkdGgobWV0cmljcy5ib3VuZGluZ0JveC53aWR0aCgpICsgbV9zeW50aGV0aWNCb2xk
T2Zmc2V0KTsKLSNlbmRpZgotICAgIH0KLSAgICByZXR1cm4gbWV0cmljczsKKyAgICByZXR1cm4g
YWR2YW5jZS53aWR0aCArIG1fc3ludGhldGljQm9sZE9mZnNldDsKIH0KIAogI2lmIFVTRShBVFNV
SSkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvU2ltcGxlRm9udERhdGFX
aW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9T
aW1wbGVGb250RGF0YVdpbmNlLmNwcAkocmV2aXNpb24gNTc5NDYpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbmNlL1NpbXBsZUZvbnREYXRhV2luY2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMzEsNiArMTMxLDEwIEBAIHZvaWQgU2ltcGxlRm9udERhdGE6OmRldGVybWluZVBpdGNo
KCkKICAgICBtX3RyZWF0QXNGaXhlZFBpdGNoID0gISh0bS50bVBpdGNoQW5kRmFtaWx5ICYgVE1Q
Rl9GSVhFRF9QSVRDSCk7CiB9CiAKK0Zsb2F0UmVjdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1C
b3VuZHNGb3JHbHlwaChHbHlwaCkgY29uc3QKK3sKK30KKyAgICAKIGZsb2F0IFNpbXBsZUZvbnRE
YXRhOjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CiB7CiAgICAgaWYg
KG1fcGxhdGZvcm1EYXRhLmlzRGlzYWJsZWQoKSkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd3gvU2ltcGxlRm9udERhdGFXeC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93eC9TaW1wbGVGb250RGF0YVd4LmNwcAkocmV2aXNpb24gNTc5NDYpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L1NpbXBsZUZvbnREYXRhV3guY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTIsMTkgKzExMiwyMiBAQCB2b2lkIFNpbXBsZUZvbnREYXRhOjpkZXRl
cm1pbmVQaXRjaCgpCiAgICAgICAgIG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPSBmYWxzZTsKIH0KIAot
R2x5cGhNZXRyaWNzIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybU1ldHJpY3NGb3JHbHlwaChHbHlw
aCBnbHlwaCwgR2x5cGhNZXRyaWNzTW9kZSkgY29uc3QKK0Zsb2F0UmVjdCBTaW1wbGVGb250RGF0
YTo6cGxhdGZvcm1Cb3VuZHNGb3JHbHlwaChHbHlwaCkgY29uc3QKK3sKKyAgICByZXR1cm4gRmxv
YXRSZWN0KCk7Cit9CisKK2Zsb2F0IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybVdpZHRoRm9yR2x5
cGgoR2x5cGggZ2x5cGgpIGNvbnN0CiB7Ci0gICAgR2x5cGhNZXRyaWNzIG1ldHJpY3M7CiAjaWYg
X19XWE1TV19fCiAgICAgLy8gdW5kZXIgV2luZG93cyAvIHd4TVNXIHdlIGN1cnJlbnRseSBhbHdh
eXMgdXNlIEdESSBmb250cy4KLSAgICBtZXRyaWNzLmhvcml6b250YWxBZHZhbmNlID0gd2lkdGhG
b3JHRElHbHlwaChnbHlwaCk7CisgICAgcmV0dXJuIHdpZHRoRm9yR0RJR2x5cGgoZ2x5cGgpOwog
I2Vsc2UKICAgICAvLyBUT0RPOiBmaXggdGhpcyEgTWFrZSBHZXRUZXh0RXh0ZW50cyBhIG1ldGhv
ZCBvZiB3eEZvbnQgaW4gMi45CiAgICAgaW50IHdpZHRoID0gMTA7CiAgICAgR2V0VGV4dEV4dGVu
dCgqbV9wbGF0Zm9ybURhdGEuZm9udCgpLCAod3hDaGFyKWdseXBoLCAmd2lkdGgsIE5VTEwpOwot
ICAgIG1ldHJpY3MuaG9yaXpvbnRhbEFkdmFuY2UgPSB3aWR0aDsKKyAgICByZXR1cm4gd2lkdGg7
CiAjZW5kaWYKLSAgICByZXR1cm4gbWV0cmljczsKIH0KIAogI2lmIE9TKFdJTkRPV1MpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54120</attachid>
            <date>2010-04-22 19:09:27 -0700</date>
            <delta_ts>2010-04-22 19:47:07 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch_4-22-10-glyph.txt</filename>
            <type>text/plain</type>
            <size>40169</size>
            <attacher name="Adele Peterson">adele</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1ODEzOCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNzIgQEAKKzIwMTAtMDQtMjIgIEFkZWxlIFBldGVyc29uICA8YWRlbGVAYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZp
eCBmb3IgPHJkYXI6Ly9wcm9ibGVtLzc4NTU3Nzc+IFJFR1JFU1NJT046IE1lbW9yeSB1c2FnZSBp
bmNyZWFzZSBjYXVzZWQgYnkgc3RvcmluZyBnbHlwaCBib3VuZHMgaW4gR2x5cGhNZXRyaWNzTWFw
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNzkzNgor
CisgICAgICAgIFRoaXMgY2hhbmdlIGJyZWFrcyB0aGUgR2x5cGhNZXRyaWNzTWFwIGludG8gdHdv
IG1hcHMgLSBvbmUgZm9yIHdpZHRoIGFuZCBvbmUgZm9yIGJvdW5kcywgc28gdGhhdCB3ZSBkb24n
dCBzdG9yZQorICAgICAgICBhIEZsb2F0UmVjdCBmb3IgdGhlIGdseXBoIGJvdW5kcyB1bmxlc3Mg
d2UgbmVlZCB0by4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLiAgVGhpcyBz
aG91bGQgbm90IGNhdXNlIGFueSBjaGFuZ2UgaW4gZnVuY3Rpb25hbGl0eS4KKworICAgICAgICBV
cGRhdGVkIGZvciByZW1vdmFsIG9mIEdseXBoTWV0cmljc01hcC5jcHAKKyAgICAgICAgKiBBbmRy
b2lkLm1rOgorICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIFdlYkNvcmUuZ3lw
aToKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKKyAgICAgICAgTWFkZSBHbHlwaE1l
dHJpY3NNYXAgYSB0ZW1wbGF0ZSwgc28gaXQgY2FuIGJlIHVzZWQgZm9yIHNlcGFyYXRlIHdpZHRo
IGFuZCBib3VuZHMgbWFwcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HbHlwaE1ldHJp
Y3NNYXAuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dseXBoTWV0
cmljc01hcC5oOgorICAgICAgICAoV2ViQ29yZTo6R2x5cGhNZXRyaWNzTWFwOjptZXRyaWNzRm9y
R2x5cGgpOgorICAgICAgICAoV2ViQ29yZTo6R2x5cGhNZXRyaWNzTWFwOjpzZXRNZXRyaWNzRm9y
R2x5cGgpOgorICAgICAgICAoV2ViQ29yZTo6R2x5cGhNZXRyaWNzTWFwOjpHbHlwaE1ldHJpY3NQ
YWdlOjptZXRyaWNzRm9yR2x5cGgpOgorICAgICAgICAoV2ViQ29yZTo6R2x5cGhNZXRyaWNzTWFw
OjpHbHlwaE1ldHJpY3NQYWdlOjpzZXRNZXRyaWNzRm9yR2x5cGgpOgorICAgICAgICAoV2ViQ29y
ZTo6R2x5cGhNZXRyaWNzTWFwOjpHbHlwaE1ldHJpY3NQYWdlOjpzZXRNZXRyaWNzRm9ySW5kZXgp
OgorICAgICAgICAoV2ViQ29yZTo6Ojp1bmtub3duTWV0cmljcyk6CisgICAgICAgIChXZWJDb3Jl
Ojo6OmxvY2F0ZVBhZ2VTbG93Q2FzZSk6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9t
YWMvQ29tcGxleFRleHRDb250cm9sbGVyLmNwcDogKFdlYkNvcmU6OkNvbXBsZXhUZXh0Q29udHJv
bGxlcjo6YWRqdXN0R2x5cGhzQW5kQWR2YW5jZXMpOgorICAgICAgICBDYWxsIGJvdW5kc0Zvckds
eXBoIGluc3RlYWQgb2YgbWV0cmljc0ZvckdseXBoLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL1NpbXBsZUZvbnREYXRhLmNwcDogKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpwbGF0Zm9y
bUdseXBoSW5pdCk6CisgICAgICAgIENhbGwgc2V0TWV0cmljc0ZvckdseXBoIGZvciBib3RoIGds
eXBoIG1hcHMuCisKKyAgICAgICAgQnJlYWsgZ2V0dGVycyBhbmQgc2V0dGVycyBmb3IgbWV0cmlj
c0ZvckdseXBoIGludG8gd2lkdGhGb3JHbHlwaCBhbmQgYm91bmRzRm9yR2x5cGgsIG1haW50YWlu
aW5nIHByZXNlbnQgYmVoYXZpb3IuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxl
Rm9udERhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6Oik6CisgICAgICAgIChXZWJDb3JlOjpTaW1w
bGVGb250RGF0YTo6Ym91bmRzRm9yR2x5cGgpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9u
dERhdGE6OndpZHRoRm9yR2x5cGgpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L1NpbXBsZUZvbnREYXRhQ2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERh
dGE6OnBsYXRmb3JtQm91bmRzRm9yR2x5cGgpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9u
dERhdGE6OnBsYXRmb3JtV2lkdGhGb3JHbHlwaCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vU2ltcGxlRm9udERhdGFDaHJvbWl1bVdpbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1Cb3VuZHNGb3JHbHlwaCk6CisgICAgICAgIChX
ZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1XaWR0aEZvckdseXBoKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TaW1wbGVGb250RGF0YUxpbnV4LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKToK
KyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9TaW1wbGVGb250RGF0YVBhbmdvLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUJvdW5kc0Zvckds
eXBoKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybVdpZHRoRm9y
R2x5cGgpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YU1h
Yy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUJvdW5kc0Zv
ckdseXBoKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybVdpZHRo
Rm9yR2x5cGgpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0
YUNHV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUJv
dW5kc0ZvckdseXBoKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpwbGF0Zm9y
bVdpZHRoRm9yR2x5cGgpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVG
b250RGF0YUNhaXJvV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpw
bGF0Zm9ybUJvdW5kc0ZvckdseXBoKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
U2ltcGxlRm9udERhdGFXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6
OmJvdW5kc0ZvckdESUdseXBoKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjp3
aWR0aEZvckdESUdseXBoKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9TaW1w
bGVGb250RGF0YVdpbmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpw
bGF0Zm9ybUJvdW5kc0ZvckdseXBoKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93eC9T
aW1wbGVGb250RGF0YVd4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpw
bGF0Zm9ybUJvdW5kc0ZvckdseXBoKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRh
OjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgpOgorCiAyMDEwLTA0LTIyICBGdW1pdG9zaGkgVWthaSAg
PHVrYWlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCklu
ZGV4OiBXZWJDb3JlL0FuZHJvaWQubWsKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9BbmRyb2lkLm1r
CShyZXZpc2lvbiA1Nzk0NikKKysrIFdlYkNvcmUvQW5kcm9pZC5tawkod29ya2luZyBjb3B5KQpA
QCAtNDM4LDcgKzQzOCw2IEBAIExPQ0FMX1NSQ19GSUxFUyA6PSAkKExPQ0FMX1NSQ19GSUxFUykg
XAogCXBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYXN0UGF0aC5jcHAgXAogCXBsYXRmb3JtL2dyYXBo
aWNzL0dlbmVyYXRlZEltYWdlLmNwcCBcCiAJcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlVHJl
ZU5vZGUuY3BwIFwKLQlwbGF0Zm9ybS9ncmFwaGljcy9HbHlwaE1ldHJpY3NNYXAuY3BwIFwKIAlw
bGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5jcHAgXAogCXBsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dC5jcHAgXAogCXBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwIFwK
SW5kZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9HTlVt
YWtlZmlsZS5hbQkocmV2aXNpb24gNTc5NDYpCisrKyBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3
b3JraW5nIGNvcHkpCkBAIC0xNjI0LDEwICsxNjI0LDkgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwK
IAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRlZEltYWdlLmggXAogCVdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJhdG9yLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR2x5cGhCdWZmZXIuaCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaE1ldHJp
Y3NNYXAuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2VUcmVlTm9kZS5j
cHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlVHJlZU5vZGUuaCBcCi0J
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaE1ldHJpY3NNYXAuY3BwIFwKLQlXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoTWV0cmljc01hcC5oIFwKIAlXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYWRpZW50LmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFk
aWVudC5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAg
XApJbmRleDogV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJD
b3JlLmd5cGkJKHJldmlzaW9uIDU3OTQ2KQorKysgV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtp
bmcgY29weSkKQEAgLTIzNDEsMTAgKzIzNDEsOSBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL0dlbmVyYXRlZEltYWdlLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L0dlbmVyYXRvci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9HbHlwaEJ1ZmZl
ci5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9HbHlwaE1ldHJpY3NNYXAuaCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlVHJlZU5vZGUuY3BwJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2VUcmVlTm9kZS5oJywKLSAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9HbHlwaE1ldHJpY3NNYXAuY3BwJywKLSAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9HbHlwaE1ldHJpY3NNYXAuaCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9HcmFkaWVudC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQuY3BwJywKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29y
ZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZj
cHJvagkocmV2aXNpb24gNTc5NDYpCisrKyBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUu
dmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yMjgzNCwxOSArMjI4MzQsMTUgQEAKIAkJCQkJPg0K
IAkJCQk8L0ZpbGU+DQogCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3Jt
XGdyYXBoaWNzXEdseXBoUGFnZVRyZWVOb2RlLmNwcCINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0K
LQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xHbHlw
aFBhZ2VUcmVlTm9kZS5oIg0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGlj
c1xHbHlwaE1ldHJpY3NNYXAuaCINCiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0K
LQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xHbHlwaE1ldHJpY3NNYXAu
Y3BwIg0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xHbHlwaFBhZ2VU
cmVlTm9kZS5jcHAiDQogCQkJCQk+DQogCQkJCTwvRmlsZT4NCiAJCQkJPEZpbGUNCi0JCQkJCVJl
bGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcR2x5cGhNZXRyaWNzTWFwLmgiDQorCQkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEdseXBoUGFnZVRyZWVOb2RlLmgi
DQogCQkJCQk+DQogCQkJCTwvRmlsZT4NCiAJCQkJPEZpbGUNCkluZGV4OiBXZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gNTc5NDYpCisrKyBXZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzQy
MCw2ICszNDIwLDcgQEAKIAkJQUI0MDQ4NEUwRTA4M0ZBODAwN0Q2OTIwIC8qIE1lZGlhRG9jdW1l
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFCNDA0
ODRDMEUwODNGQTgwMDdENjkyMCAvKiBNZWRpYURvY3VtZW50LmggKi87IH07CiAJCUFCNDI2MUQ4
MEEyRjZDOTcwMEJERDE3RCAvKiBtaXNzaW5nSW1hZ2UudGlmZiBpbiBSZXNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUI0MjYxRDcwQTJGNkM5NzAwQkREMTdEIC8q
IG1pc3NpbmdJbWFnZS50aWZmICovOyB9OwogCQlBQjRDQjRFQjBCOEJEQTNEMDA5RjQwQjAgLyog
SlNIVE1MU2VsZWN0RWxlbWVudEN1c3RvbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQUI0Q0I0RUEwQjhCREEzRDAwOUY0MEIwIC8qIEpTSFRNTFNlbGVj
dEVsZW1lbnRDdXN0b20uaCAqLzsgfTsKKwkJQUI1QTZFRDcxMTdGRTZCRTAwNENEQzRCIC8qIEds
eXBoTWV0cmljc01hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQUI1QTZFRDUxMTdGRTZCRTAwNENEQzRCIC8qIEdseXBoTWV0cmljc01hcC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUFCNjdEMUE4MDk3
RjNBRTMwMEY5MzkyRSAvKiBSZW5kZXJUZXh0Q29udHJvbC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBQjY3RDFBNjA5N0YzQUUzMDBGOTM5MkUgLyog
UmVuZGVyVGV4dENvbnRyb2wuY3BwICovOyB9OwogCQlBQjY3RDFBOTA5N0YzQUUzMDBGOTM5MkUg
LyogUmVuZGVyVGV4dENvbnRyb2wuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEFCNjdEMUE3MDk3RjNBRTMwMEY5MzkyRSAvKiBSZW5kZXJUZXh0Q29udHJv
bC5oICovOyB9OwogCQlBQjcxNzA4OTBCMzExODA4MDAxNzEyM0UgLyogU2VhcmNoUG9wdXBNZW51
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBQjcxNzA4
ODBCMzExODA4MDAxNzEyM0UgLyogU2VhcmNoUG9wdXBNZW51LmggKi87IH07CkBAIC00NzA5LDgg
KzQ3MTAsNiBAQAogCQlDNTE2MEVFQjEwMDQ1NDNBMDBBN0NFRTIgLyogU3RvcmFnZUFyZWFJbXBs
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTE2MEVF
OTEwMDQ1NDNBMDBBN0NFRTIgLyogU3RvcmFnZUFyZWFJbXBsLmggKi87IH07CiAJCUM1NUUzOEJG
MTAwNDBENUQwMEE1NkJEQiAvKiBTdG9yYWdlTmFtZXNwYWNlSW1wbC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzU1RTM4QkIxMDA0MEQ1RDAwQTU2QkRC
IC8qIFN0b3JhZ2VOYW1lc3BhY2VJbXBsLmggKi87IH07CiAJCUM1NUUzOEMwMTAwNDBENUQwMEE1
NkJEQiAvKiBTdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTVFMzhCQzEwMDQwRDVEMDBBNTZCREIgLyogU3RvcmFn
ZU5hbWVzcGFjZUltcGwuY3BwICovOyB9OwotCQlDNUQ0QUE3OTExNkJBRkI2MDA2OUNBOTMgLyog
R2x5cGhNZXRyaWNzTWFwLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEM1RDRBQTc3MTE2QkFGQjYwMDY5Q0E5MyAvKiBHbHlwaE1ldHJpY3NNYXAuY3Bw
ICovOyB9OwotCQlDNUQ0QUE3QTExNkJBRkI2MDA2OUNBOTMgLyogR2x5cGhNZXRyaWNzTWFwLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNUQ0QUE3ODEx
NkJBRkI2MDA2OUNBOTMgLyogR2x5cGhNZXRyaWNzTWFwLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQzVFOUI2NzcxMDY5N0UxMzAwQzdCQjFBIC8q
IFN0b3JhZ2VFdmVudERpc3BhdGNoZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQzVFOUI2NzYxMDY5N0UxMzAwQzdCQjFBIC8qIFN0b3JhZ2VFdmVu
dERpc3BhdGNoZXIuY3BwICovOyB9OwogCQlDNUVCREQ4NDEwNUVEREVDMDA1NjgxNkYgLyogU3Rv
cmFnZUV2ZW50RGlzcGF0Y2hlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQzVFQkREODExMDVFRERFQzAwNTY4MTZGIC8qIFN0b3JhZ2VFdmVudERpc3Bh
dGNoZXIuaCAqLzsgfTsKIAkJQzZENzRBRDUwOUFBMjgyRTAwMEIwQTUyIC8qIE1vZGlmeVNlbGVj
dGlvbkxpc3RMZXZlbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQzZENzRBRDMwOUFBMjgyRTAwMEIwQTUyIC8qIE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZl
bC5oICovOyB9OwpAQCAtODYxMiw2ICs4NjExLDcgQEAKIAkJQUI0MDQ4NEMwRTA4M0ZBODAwN0Q2
OTIwIC8qIE1lZGlhRG9jdW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
TWVkaWFEb2N1bWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBQjQyNjFENzBB
MkY2Qzk3MDBCREQxN0QgLyogbWlzc2luZ0ltYWdlLnRpZmYgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBpbWFnZS50aWZmOyBwYXRoID0gbWlzc2luZ0lt
YWdlLnRpZmY7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFCNENCNEVBMEI4QkRBM0Qw
MDlGNDBCMCAvKiBKU0hUTUxTZWxlY3RFbGVtZW50Q3VzdG9tLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU0hUTUxTZWxlY3RFbGVtZW50Q3VzdG9tLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUFCNUE2RUQ1MTE3RkU2QkUwMDRDREM0QiAvKiBHbHlwaE1ldHJp
Y3NNYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR2x5cGhNZXRyaWNzTWFw
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFCNjdEMUE2MDk3RjNBRTMwMEY5Mzky
RSAvKiBSZW5kZXJUZXh0Q29udHJvbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gUmVuZGVyVGV4dENvbnRyb2wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlBQjY3RDFBNzA5N0YzQUUzMDBGOTM5MkUgLyogUmVuZGVyVGV4dENvbnRyb2wuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclRleHRDb250cm9sLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFCNzE3MDg4MEIzMTE4MDgwMDE3MTIzRSAvKiBTZWFy
Y2hQb3B1cE1lbnUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNlYXJjaFBv
cHVwTWVudS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTAwODUsOCArMTAwODUs
NiBAQAogCQlDNTE2MEVFOTEwMDQ1NDNBMDBBN0NFRTIgLyogU3RvcmFnZUFyZWFJbXBsLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0b3JhZ2VBcmVhSW1wbC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlDNTVFMzhCQjEwMDQwRDVEMDBBNTZCREIgLyogU3RvcmFn
ZU5hbWVzcGFjZUltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RvcmFn
ZU5hbWVzcGFjZUltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzU1RTM4QkMx
MDA0MEQ1RDAwQTU2QkRCIC8qIFN0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzVENEFBNzcxMTZCQUZCNjAwNjlDQTkzIC8qIEdseXBo
TWV0cmljc01hcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHbHlw
aE1ldHJpY3NNYXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDNUQ0QUE3ODEx
NkJBRkI2MDA2OUNBOTMgLyogR2x5cGhNZXRyaWNzTWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEdseXBoTWV0cmljc01hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlDNUU5QjY3NjEwNjk3RTEzMDBDN0JCMUEgLyogU3RvcmFnZUV2ZW50RGlzcGF0Y2hlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdG9yYWdlRXZlbnREaXNw
YXRjaGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzVFQkREODExMDVFRERF
QzAwNTY4MTZGIC8qIFN0b3JhZ2VFdmVudERpc3BhdGNoZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU3RvcmFnZUV2ZW50RGlzcGF0Y2hlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlDNkQ3NEFEMzA5QUEyODJFMDAwQjBBNTIgLyogTW9kaWZ5U2VsZWN0aW9u
TGlzdExldmVsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1vZGlmeVNlbGVj
dGlvbkxpc3RMZXZlbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTQ2ODMsOCAr
MTQ2ODEsNyBAQAogCQkJCUJDMjNGMERBMERBRkY0QTQwMDlGREM5MSAvKiBHZW5lcmF0ZWRJbWFn
ZS5oICovLAogCQkJCUJDRTA0Qzg5MERBRkY3QTAwMDdBMEY0MSAvKiBHZW5lcmF0b3IuaCAqLywK
IAkJCQlCMkMzREE1QjBEMDA2Q0Q2MDBFRjZGMjYgLyogR2x5cGhCdWZmZXIuaCAqLywKLQkJCQlD
NUQ0QUE3NzExNkJBRkI2MDA2OUNBOTMgLyogR2x5cGhNZXRyaWNzTWFwLmNwcCAqLywKLQkJCQlD
NUQ0QUE3ODExNkJBRkI2MDA2OUNBOTMgLyogR2x5cGhNZXRyaWNzTWFwLmggKi8sCisJCQkJQUI1
QTZFRDUxMTdGRTZCRTAwNENEQzRCIC8qIEdseXBoTWV0cmljc01hcC5oICovLAogCQkJCUIyQzNE
QTVDMEQwMDZDRDYwMEVGNkYyNiAvKiBHbHlwaFBhZ2VUcmVlTm9kZS5jcHAgKi8sCiAJCQkJQjJD
M0RBNUQwRDAwNkNENjAwRUY2RjI2IC8qIEdseXBoUGFnZVRyZWVOb2RlLmggKi8sCiAJCQkJQkM1
M0M2MDcwREE1NkM1NzAwMjFFQjVEIC8qIEdyYWRpZW50LmNwcCAqLywKQEAgLTE4ODU1LDcgKzE4
ODUyLDYgQEAKIAkJCQk5N0MwNzg1MDExNjVENUJFMDAzQTMyRUYgLyogU3VmZml4VHJlZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMjU0MkY0REIxMTY2QzI1QTAwRTg5QTg2IC8qIFVzZXJHZXN0dXJl
SW5kaWNhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzk0MzlDMzExNkNGNDk0MDA0OEM3NTAg
LyogSlNOb2RlQ3VzdG9tLmggaW4gSGVhZGVycyAqLywKLQkJCQlDNUQ0QUE3QTExNkJBRkI2MDA2
OUNBOTMgLyogR2x5cGhNZXRyaWNzTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNDA5Qzk4NTEx
NkQwREREMDA3MTk3QkQgLyogQWNjZXNzaWJpbGl0eVByb2dyZXNzSW5kaWNhdG9yLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk4OTUyNTNEODExNkM0QzY4MDBDQUJGMDAgLyogRmlsZVN0cmVhbS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJOTczODg5QTExMTZFQTlEQzAwQURGMzEzIC8qIERvY3VtZW50V3Jp
dGVyLmggaW4gSGVhZGVycyAqLywKQEAgLTE4ODY5LDYgKzE4ODY1LDcgQEAKIAkJCQlDRUY0MThD
RjExNzk2NzhDMDA5RDExMkMgLyogVmlld3BvcnRBcmd1bWVudHMuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGRDMwODBGMTE3Q0Y3RTcwMEE3OTFGNyAvKiBSZW5kZXJGcmFtZUJhc2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRDMwOEQ2MTE3RDE2ODUwMEE3OTFGNyAvKiBSZW5kZXJJRnJhbWUuaCBp
biBIZWFkZXJzICovLAorCQkJCUFCNUE2RUQ3MTE3RkU2QkUwMDRDREM0QiAvKiBHbHlwaE1ldHJp
Y3NNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9z
dHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMjEwOTQsNyArMjEwOTEsNiBAQAogCQkJCTJFM0JC
RjA3MTE2MkRBMTEwMEI5NDA5QSAvKiBVVUlELmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg5NTI1
MzUyMTE2NDFCMzQwMENBQkYwMCAvKiBGaWxlVGhyZWFkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTI1NDJGNERBMTE2NkMyNUEwMEU4OUE4NiAvKiBVc2VyR2VzdHVyZUluZGljYXRvci5jcHAgaW4g
U291cmNlcyAqLywKLQkJCQlDNUQ0QUE3OTExNkJBRkI2MDA2OUNBOTMgLyogR2x5cGhNZXRyaWNz
TWFwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE0MDlDOTg0MTE2RDBEREQwMDcxOTdCRCAvKiBB
Y2Nlc3NpYmlsaXR5UHJvZ3Jlc3NJbmRpY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODk1
MjUzRDcxMTZDNEM2ODAwQ0FCRjAwIC8qIEZpbGVTdHJlYW0uY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJOUZBMzdFRTcxMTcyRkNGMDAwQzRDRDU1IC8qIEpTU2NyaXB0UHJvZmlsZU5vZGVDdXN0b20u
Y3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yMTEwNCw3ICsyMTEwMCw3IEBACiAJCQkJQ0VGNDE4Q0Ux
MTc5Njc4QzAwOUQxMTJDIC8qIFZpZXdwb3J0QXJndW1lbnRzLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGRDMwODBFMTE3Q0Y3RTcwMEE3OTFGNyAvKiBSZW5kZXJGcmFtZUJhc2UuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEZEMzA4RDUxMTdEMTY4NTAwQTc5MUY3IC8qIFJlbmRlcklGcmFtZS5j
cHAgaW4gU291cmNlcyAqLywKLSAJCQkJOTczODg5QTAxMTZFQTlEQzAwQURGMzEzIC8qIERvY3Vt
ZW50V3JpdGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTk3Mzg4OUEwMTE2RUE5REMwMEFERjMx
MyAvKiBEb2N1bWVudFdyaXRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5
Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR2x5cGhNZXRyaWNzTWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoTWV0cmljc01hcC5jcHAJKHJldmlzaW9uIDU3OTQ2KQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaE1ldHJpY3NNYXAuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDYyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAz
LiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9y
IHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJHbHlwaE1ldHJpY3NNYXAuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1HbHlw
aE1ldHJpY3NNYXA6OkdseXBoTWV0cmljc1BhZ2UqIEdseXBoTWV0cmljc01hcDo6bG9jYXRlUGFn
ZVNsb3dDYXNlKHVuc2lnbmVkIHBhZ2VOdW1iZXIpCi17Ci0gICAgR2x5cGhNZXRyaWNzUGFnZSog
cGFnZTsKLSAgICBpZiAoIXBhZ2VOdW1iZXIpIHsKLSAgICAgICAgQVNTRVJUKCFtX2ZpbGxlZFBy
aW1hcnlQYWdlKTsKLSAgICAgICAgcGFnZSA9ICZtX3ByaW1hcnlQYWdlOwotICAgICAgICBtX2Zp
bGxlZFByaW1hcnlQYWdlID0gdHJ1ZTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAobV9wYWdl
cykgewotICAgICAgICAgICAgaWYgKChwYWdlID0gbV9wYWdlcy0+Z2V0KHBhZ2VOdW1iZXIpKSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gcGFnZTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICBtX3BhZ2VzLnNldChuZXcgSGFzaE1hcDxpbnQsIEdseXBoTWV0cmljc1BhZ2UqPik7Ci0gICAg
ICAgIHBhZ2UgPSBuZXcgR2x5cGhNZXRyaWNzUGFnZTsKLSAgICAgICAgbV9wYWdlcy0+c2V0KHBh
Z2VOdW1iZXIsIHBhZ2UpOwotICAgIH0KLQotICAgIEdseXBoTWV0cmljcyB1bmtub3duTWV0cmlj
czsKLSAgICB1bmtub3duTWV0cmljcy5ob3Jpem9udGFsQWR2YW5jZSA9IGNHbHlwaFNpemVVbmtu
b3duOwotICAgIHVua25vd25NZXRyaWNzLmJvdW5kaW5nQm94LnNldFdpZHRoKGNHbHlwaFNpemVV
bmtub3duKTsKLSAgICB1bmtub3duTWV0cmljcy5ib3VuZGluZ0JveC5zZXRIZWlnaHQoY0dseXBo
U2l6ZVVua25vd24pOwotICAgIC8vIEZpbGwgaW4gdGhlIHdob2xlIHBhZ2Ugd2l0aCB0aGUgdW5r
bm93biBnbHlwaCBpbmZvcm1hdGlvbi4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR2x5
cGhNZXRyaWNzUGFnZTo6c2l6ZTsgaSsrKQotICAgICAgICBwYWdlLT5zZXRNZXRyaWNzRm9ySW5k
ZXgoaSwgdW5rbm93bk1ldHJpY3MpOwotCi0gICAgcmV0dXJuIHBhZ2U7Ci19Ci0KLX0KSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhNZXRyaWNzTWFwLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaE1ldHJpY3NNYXAuaAkocmV2aXNpb24g
NTc5NDYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoTWV0cmljc01hcC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw2IEBACiAjaWZuZGVmIEdseXBoTWV0cmljc01hcF9o
CiAjZGVmaW5lIEdseXBoTWV0cmljc01hcF9oCiAKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRl
IDx3dGYvdW5pY29kZS9Vbmljb2RlLmg+CkBAIC00MCwxMiArMzksNyBAQCB0eXBlZGVmIHVuc2ln
bmVkIHNob3J0IEdseXBoOwogCiBjb25zdCBmbG9hdCBjR2x5cGhTaXplVW5rbm93biA9IC0xOwog
Ci1zdHJ1Y3QgR2x5cGhNZXRyaWNzIHsKLSAgICBmbG9hdCBob3Jpem9udGFsQWR2YW5jZTsKLSAg
ICBGbG9hdFJlY3QgYm91bmRpbmdCb3g7Ci19OwotCi1jbGFzcyBHbHlwaE1ldHJpY3NNYXAgOiBw
dWJsaWMgTm9uY29weWFibGUgewordGVtcGxhdGU8Y2xhc3MgVD4gY2xhc3MgR2x5cGhNZXRyaWNz
TWFwIDogcHVibGljIE5vbmNvcHlhYmxlIHsKIHB1YmxpYzoKICAgICBHbHlwaE1ldHJpY3NNYXAo
KSA6IG1fZmlsbGVkUHJpbWFyeVBhZ2UoZmFsc2UpIHsgfQogICAgIH5HbHlwaE1ldHJpY3NNYXAo
KQpAQCAtNTQsMTcgKzQ4LDEyIEBAIHB1YmxpYzoKICAgICAgICAgICAgIGRlbGV0ZUFsbFZhbHVl
cygqbV9wYWdlcyk7CiAgICAgfQogCi0gICAgR2x5cGhNZXRyaWNzIG1ldHJpY3NGb3JHbHlwaChH
bHlwaCBnbHlwaCkKKyAgICBUIG1ldHJpY3NGb3JHbHlwaChHbHlwaCBnbHlwaCkKICAgICB7CiAg
ICAgICAgIHJldHVybiBsb2NhdGVQYWdlKGdseXBoIC8gR2x5cGhNZXRyaWNzUGFnZTo6c2l6ZSkt
Pm1ldHJpY3NGb3JHbHlwaChnbHlwaCk7CiAgICAgfQogCi0gICAgZmxvYXQgd2lkdGhGb3JHbHlw
aChHbHlwaCBnbHlwaCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBsb2NhdGVQYWdlKGdseXBoIC8g
R2x5cGhNZXRyaWNzUGFnZTo6c2l6ZSktPm1ldHJpY3NGb3JHbHlwaChnbHlwaCkuaG9yaXpvbnRh
bEFkdmFuY2U7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRNZXRyaWNzRm9yR2x5cGgoR2x5cGggZ2x5
cGgsIGNvbnN0IEdseXBoTWV0cmljcyYgbWV0cmljcykKKyAgICB2b2lkIHNldE1ldHJpY3NGb3JH
bHlwaChHbHlwaCBnbHlwaCwgY29uc3QgVCYgbWV0cmljcykKICAgICB7CiAgICAgICAgIGxvY2F0
ZVBhZ2UoZ2x5cGggLyBHbHlwaE1ldHJpY3NQYWdlOjpzaXplKS0+c2V0TWV0cmljc0ZvckdseXBo
KGdseXBoLCBtZXRyaWNzKTsKICAgICB9CkBAIC03MiwxNCArNjEsMTQgQEAgcHVibGljOgogcHJp
dmF0ZToKICAgICBzdHJ1Y3QgR2x5cGhNZXRyaWNzUGFnZSB7CiAgICAgICAgIHN0YXRpYyBjb25z
dCBzaXplX3Qgc2l6ZSA9IDI1NjsgLy8gVXN1YWxseSBjb3ZlcnMgTGF0aW4tMSBpbiBhIHNpbmds
ZSBwYWdlLgotICAgICAgICBHbHlwaE1ldHJpY3MgbV9tZXRyaWNzW3NpemVdOworICAgICAgICBU
IG1fbWV0cmljc1tzaXplXTsKIAotICAgICAgICBHbHlwaE1ldHJpY3MgbWV0cmljc0ZvckdseXBo
KEdseXBoIGdseXBoKSBjb25zdCB7IHJldHVybiBtX21ldHJpY3NbZ2x5cGggJSBzaXplXTsgfQot
ICAgICAgICB2b2lkIHNldE1ldHJpY3NGb3JHbHlwaChHbHlwaCBnbHlwaCwgY29uc3QgR2x5cGhN
ZXRyaWNzJiBtZXRyaWNzKQorICAgICAgICBUIG1ldHJpY3NGb3JHbHlwaChHbHlwaCBnbHlwaCkg
Y29uc3QgeyByZXR1cm4gbV9tZXRyaWNzW2dseXBoICUgc2l6ZV07IH0KKyAgICAgICAgdm9pZCBz
ZXRNZXRyaWNzRm9yR2x5cGgoR2x5cGggZ2x5cGgsIGNvbnN0IFQmIG1ldHJpY3MpCiAgICAgICAg
IHsKICAgICAgICAgICAgIHNldE1ldHJpY3NGb3JJbmRleChnbHlwaCAlIHNpemUsIG1ldHJpY3Mp
OwogICAgICAgICB9Ci0gICAgICAgIHZvaWQgc2V0TWV0cmljc0ZvckluZGV4KHVuc2lnbmVkIGlu
ZGV4LCBjb25zdCBHbHlwaE1ldHJpY3MmIG1ldHJpY3MpCisgICAgICAgIHZvaWQgc2V0TWV0cmlj
c0ZvckluZGV4KHVuc2lnbmVkIGluZGV4LCBjb25zdCBUJiBtZXRyaWNzKQogICAgICAgICB7CiAg
ICAgICAgICAgICBtX21ldHJpY3NbaW5kZXhdID0gbWV0cmljczsKICAgICAgICAgfQpAQCAtOTQs
MTEgKzgzLDQ3IEBAIHByaXZhdGU6CiAKICAgICBHbHlwaE1ldHJpY3NQYWdlKiBsb2NhdGVQYWdl
U2xvd0Nhc2UodW5zaWduZWQgcGFnZU51bWJlcik7CiAgICAgCisgICAgc3RhdGljIFQgdW5rbm93
bk1ldHJpY3MoKTsKKwogICAgIGJvb2wgbV9maWxsZWRQcmltYXJ5UGFnZTsKICAgICBHbHlwaE1l
dHJpY3NQYWdlIG1fcHJpbWFyeVBhZ2U7IC8vIFdlIG9wdGltaXplIGZvciB0aGUgcGFnZSB0aGF0
IGNvbnRhaW5zIGdseXBoIGluZGljZXMgMC0yNTUuCiAgICAgT3duUHRyPEhhc2hNYXA8aW50LCBH
bHlwaE1ldHJpY3NQYWdlKj4gPiBtX3BhZ2VzOwogfTsKIAordGVtcGxhdGU8PiBpbmxpbmUgZmxv
YXQgR2x5cGhNZXRyaWNzTWFwPGZsb2F0Pjo6dW5rbm93bk1ldHJpY3MoKQoreworICAgIHJldHVy
biBjR2x5cGhTaXplVW5rbm93bjsKK30KKwordGVtcGxhdGU8PiBpbmxpbmUgRmxvYXRSZWN0IEds
eXBoTWV0cmljc01hcDxGbG9hdFJlY3Q+Ojp1bmtub3duTWV0cmljcygpCit7CisgICAgcmV0dXJu
IEZsb2F0UmVjdCgwLCAwLCBjR2x5cGhTaXplVW5rbm93biwgY0dseXBoU2l6ZVVua25vd24pOwor
fQorCit0ZW1wbGF0ZTxjbGFzcyBUPiBzdHJ1Y3QgR2x5cGhNZXRyaWNzTWFwPFQ+OjpHbHlwaE1l
dHJpY3NQYWdlKiBHbHlwaE1ldHJpY3NNYXA8VD46OmxvY2F0ZVBhZ2VTbG93Q2FzZSh1bnNpZ25l
ZCBwYWdlTnVtYmVyKQoreworICAgIEdseXBoTWV0cmljc1BhZ2UqIHBhZ2U7CisgICAgaWYgKCFw
YWdlTnVtYmVyKSB7CisgICAgICAgIEFTU0VSVCghbV9maWxsZWRQcmltYXJ5UGFnZSk7CisgICAg
ICAgIHBhZ2UgPSAmbV9wcmltYXJ5UGFnZTsKKyAgICAgICAgbV9maWxsZWRQcmltYXJ5UGFnZSA9
IHRydWU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKG1fcGFnZXMpIHsKKyAgICAgICAgICAg
IGlmICgocGFnZSA9IG1fcGFnZXMtPmdldChwYWdlTnVtYmVyKSkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIHBhZ2U7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbV9wYWdlcy5zZXQobmV3
IEhhc2hNYXA8aW50LCBHbHlwaE1ldHJpY3NQYWdlKj4pOworICAgICAgICBwYWdlID0gbmV3IEds
eXBoTWV0cmljc1BhZ2U7CisgICAgICAgIG1fcGFnZXMtPnNldChwYWdlTnVtYmVyLCBwYWdlKTsK
KyAgICB9CisKKyAgICAvLyBGaWxsIGluIHRoZSB3aG9sZSBwYWdlIHdpdGggdGhlIHVua25vd24g
Z2x5cGggaW5mb3JtYXRpb24uCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdseXBoTWV0
cmljc1BhZ2U6OnNpemU7IGkrKykKKyAgICAgICAgcGFnZS0+c2V0TWV0cmljc0ZvckluZGV4KGks
IHVua25vd25NZXRyaWNzKCkpOworCisgICAgcmV0dXJuIHBhZ2U7Cit9CisgICAgCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9TaW1wbGVGb250RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9TaW1wbGVGb250RGF0YS5jcHAJKHJldmlzaW9uIDU3OTQ2KQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1OCw5
ICsxNTgsOCBAQCB2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUdseXBoSW5pdCgpCiAgICAg
R2x5cGggemVyb1dpZHRoU3BhY2VHbHlwaCA9IGdseXBoUGFnZVplcm8tPmdseXBoRGF0YUZvckNo
YXJhY3RlcigwKS5nbHlwaDsKICAgICBpZiAoemVyb1dpZHRoU3BhY2VHbHlwaCkgewogICAgICAg
ICBpZiAoemVyb1dpZHRoU3BhY2VHbHlwaCAhPSBtX3NwYWNlR2x5cGgpIHsKLSAgICAgICAgICAg
IEdseXBoTWV0cmljcyBtZXRyaWNzOwotICAgICAgICAgICAgbWV0cmljcy5ob3Jpem9udGFsQWR2
YW5jZSA9IDA7Ci0gICAgICAgICAgICBtX2dseXBoVG9NZXRyaWNzTWFwLnNldE1ldHJpY3NGb3JH
bHlwaCh6ZXJvV2lkdGhTcGFjZUdseXBoLCBtZXRyaWNzKTsKKyAgICAgICAgICAgIG1fZ2x5cGhU
b1dpZHRoTWFwLnNldE1ldHJpY3NGb3JHbHlwaCh6ZXJvV2lkdGhTcGFjZUdseXBoLCAwKTsKKyAg
ICAgICAgICAgIG1fZ2x5cGhUb0JvdW5kc01hcC5zZXRNZXRyaWNzRm9yR2x5cGgoemVyb1dpZHRo
U3BhY2VHbHlwaCwgRmxvYXRSZWN0KCkpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIExP
R19FUlJPUigiRm9udCBtYXBzIFNQQUNFIGFuZCBaRVJPIFdJRFRIIFNQQUNFIHRvIHRoZSBzYW1l
IGdseXBoLiBHbHlwaCB3aWR0aCBub3Qgb3ZlcnJpZGRlbi4iKTsKICAgICB9CkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oCShyZXZpc2lvbiA1Nzk0NikK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaAkod29ya2luZyBj
b3B5KQpAQCAtMjYsNiArMjYsNyBAQAogCiAjaW5jbHVkZSAiRm9udERhdGEuaCIKICNpbmNsdWRl
ICJGb250UGxhdGZvcm1EYXRhLmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAi
R2x5cGhNZXRyaWNzTWFwLmgiCiAjaW5jbHVkZSAiR2x5cGhQYWdlVHJlZU5vZGUuaCIKICNpbmNs
dWRlICJUeXBlc2V0dGluZ0ZlYXR1cmVzLmgiCkBAIC02MCw3ICs2MSw2IEBAIGNsYXNzIFNoYXJl
ZEJ1ZmZlcjsKIGNsYXNzIFNWR0ZvbnREYXRhOwogCiBlbnVtIFBpdGNoIHsgVW5rbm93blBpdGNo
LCBGaXhlZFBpdGNoLCBWYXJpYWJsZVBpdGNoIH07Ci1lbnVtIEdseXBoTWV0cmljc01vZGUgeyBH
bHlwaEJvdW5kaW5nQm94LCBHbHlwaFdpZHRoT25seSB9OwogCiBjbGFzcyBTaW1wbGVGb250RGF0
YSA6IHB1YmxpYyBGb250RGF0YSB7CiBwdWJsaWM6CkBAIC04MSw5ICs4MSwxMCBAQCBwdWJsaWM6
CiAgICAgZmxvYXQgeEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1feEhlaWdodDsgfQogICAgIHVu
c2lnbmVkIHVuaXRzUGVyRW0oKSBjb25zdCB7IHJldHVybiBtX3VuaXRzUGVyRW07IH0KIAotICAg
IGZsb2F0IHdpZHRoRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0IHsgcmV0dXJuIG1ldHJpY3NG
b3JHbHlwaChnbHlwaCwgR2x5cGhXaWR0aE9ubHkpLmhvcml6b250YWxBZHZhbmNlOyB9Ci0gICAg
R2x5cGhNZXRyaWNzIG1ldHJpY3NGb3JHbHlwaChHbHlwaCwgR2x5cGhNZXRyaWNzTW9kZSA9IEds
eXBoQm91bmRpbmdCb3gpIGNvbnN0OwotICAgIEdseXBoTWV0cmljcyBwbGF0Zm9ybU1ldHJpY3NG
b3JHbHlwaChHbHlwaCwgR2x5cGhNZXRyaWNzTW9kZSkgY29uc3Q7CisgICAgRmxvYXRSZWN0IGJv
dW5kc0ZvckdseXBoKEdseXBoKSBjb25zdDsKKyAgICBmbG9hdCB3aWR0aEZvckdseXBoKEdseXBo
IGdseXBoKSBjb25zdDsKKyAgICBGbG9hdFJlY3QgcGxhdGZvcm1Cb3VuZHNGb3JHbHlwaChHbHlw
aCkgY29uc3Q7CisgICAgZmxvYXQgcGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoKSBjb25zdDsK
IAogICAgIGZsb2F0IHNwYWNlV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3NwYWNlV2lkdGg7IH0K
ICAgICBmbG9hdCBhZGp1c3RlZFNwYWNlV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2FkanVzdGVk
U3BhY2VXaWR0aDsgfQpAQCAtMTY4LDcgKzE2OSw4IEBAIHByaXZhdGU6CiAgICAgfHwgKE9TKFdJ
TkRPV1MpICYmIFBMQVRGT1JNKFdYKSkKICAgICB2b2lkIGluaXRHRElGb250KCk7CiAgICAgdm9p
ZCBwbGF0Zm9ybUNvbW1vbkRlc3Ryb3koKTsKLSAgICBHbHlwaE1ldHJpY3MgbWV0cmljc0ZvckdE
SUdseXBoKEdseXBoIGdseXBoKSBjb25zdDsKKyAgICBGbG9hdFJlY3QgYm91bmRzRm9yR0RJR2x5
cGgoR2x5cGggZ2x5cGgpIGNvbnN0OworICAgIGZsb2F0IHdpZHRoRm9yR0RJR2x5cGgoR2x5cGgg
Z2x5cGgpIGNvbnN0OwogI2VuZGlmCiAKICAgICBpbnQgbV9hc2NlbnQ7CkBAIC0xODIsNyArMTg0
LDggQEAgcHJpdmF0ZToKIAogICAgIEZvbnRQbGF0Zm9ybURhdGEgbV9wbGF0Zm9ybURhdGE7CiAK
LSAgICBtdXRhYmxlIEdseXBoTWV0cmljc01hcCBtX2dseXBoVG9NZXRyaWNzTWFwOworICAgIG11
dGFibGUgR2x5cGhNZXRyaWNzTWFwPEZsb2F0UmVjdD4gbV9nbHlwaFRvQm91bmRzTWFwOworICAg
IG11dGFibGUgR2x5cGhNZXRyaWNzTWFwPGZsb2F0PiBtX2dseXBoVG9XaWR0aE1hcDsKIAogICAg
IGJvb2wgbV90cmVhdEFzRml4ZWRQaXRjaDsKIApAQCAtMjM4LDE2ICsyNDEsMjUgQEAgcHJpdmF0
ZToKICAgICAKICAgICAKICNpZiAhUExBVEZPUk0oUVQpCi1BTFdBWVNfSU5MSU5FIEdseXBoTWV0
cmljcyBTaW1wbGVGb250RGF0YTo6bWV0cmljc0ZvckdseXBoKEdseXBoIGdseXBoLCBHbHlwaE1l
dHJpY3NNb2RlIG1ldHJpY3NNb2RlKSBjb25zdAorQUxXQVlTX0lOTElORSBGbG9hdFJlY3QgU2lt
cGxlRm9udERhdGE6OmJvdW5kc0ZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAogewotICAgIEds
eXBoTWV0cmljcyBtZXRyaWNzID0gbV9nbHlwaFRvTWV0cmljc01hcC5tZXRyaWNzRm9yR2x5cGgo
Z2x5cGgpOwotICAgIGlmICgobWV0cmljc01vZGUgPT0gR2x5cGhXaWR0aE9ubHkgJiYgbWV0cmlj
cy5ob3Jpem9udGFsQWR2YW5jZSAhPSBjR2x5cGhTaXplVW5rbm93bikgfHwgKG1ldHJpY3NNb2Rl
ID09IEdseXBoQm91bmRpbmdCb3ggJiYgbWV0cmljcy5ib3VuZGluZ0JveC53aWR0aCgpICE9IGNH
bHlwaFNpemVVbmtub3duKSkKLSAgICAgICAgcmV0dXJuIG1ldHJpY3M7Ci0KLSAgICBtZXRyaWNz
ID0gcGxhdGZvcm1NZXRyaWNzRm9yR2x5cGgoZ2x5cGgsIG1ldHJpY3NNb2RlKTsKLSAgICBtX2ds
eXBoVG9NZXRyaWNzTWFwLnNldE1ldHJpY3NGb3JHbHlwaChnbHlwaCwgbWV0cmljcyk7CisgICAg
RmxvYXRSZWN0IGJvdW5kcyA9IG1fZ2x5cGhUb0JvdW5kc01hcC5tZXRyaWNzRm9yR2x5cGgoZ2x5
cGgpOworICAgIGlmIChib3VuZHMud2lkdGgoKSAhPSBjR2x5cGhTaXplVW5rbm93bikKKyAgICAg
ICAgcmV0dXJuIGJvdW5kczsKKyAgICBib3VuZHMgPSBwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKGds
eXBoKTsKKyAgICBtX2dseXBoVG9Cb3VuZHNNYXAuc2V0TWV0cmljc0ZvckdseXBoKGdseXBoLCBi
b3VuZHMpOworICAgIHJldHVybiBib3VuZHM7Cit9CiAKLSAgICByZXR1cm4gbWV0cmljczsKK0FM
V0FZU19JTkxJTkUgZmxvYXQgU2ltcGxlRm9udERhdGE6OndpZHRoRm9yR2x5cGgoR2x5cGggZ2x5
cGgpIGNvbnN0Cit7CisgICAgZmxvYXQgd2lkdGggPSBtX2dseXBoVG9XaWR0aE1hcC5tZXRyaWNz
Rm9yR2x5cGgoZ2x5cGgpOworICAgIGlmICh3aWR0aCAhPSBjR2x5cGhTaXplVW5rbm93bikKKyAg
ICAgICAgcmV0dXJuIHdpZHRoOworCisgICAgd2lkdGggPSBwbGF0Zm9ybVdpZHRoRm9yR2x5cGgo
Z2x5cGgpOworICAgIG1fZ2x5cGhUb1dpZHRoTWFwLnNldE1ldHJpY3NGb3JHbHlwaChnbHlwaCwg
d2lkdGgpOworICAgIHJldHVybiB3aWR0aDsKIH0KICNlbmRpZgogCkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL1NpbXBsZUZvbnREYXRhQ2Fpcm8uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vU2ltcGxlRm9udERhdGFDYWlyby5j
cHAJKHJldmlzaW9uIDU3OTQ2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9T
aW1wbGVGb250RGF0YUNhaXJvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDcgKzExNCwxMiBA
QCB2b2lkIFNpbXBsZUZvbnREYXRhOjpkZXRlcm1pbmVQaXRjaCgpCiAgICAgbV90cmVhdEFzRml4
ZWRQaXRjaCA9IG1fcGxhdGZvcm1EYXRhLmlzRml4ZWRQaXRjaCgpOwogfQogCi1HbHlwaE1ldHJp
Y3MgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtTWV0cmljc0ZvckdseXBoKEdseXBoIGdseXBoLCBH
bHlwaE1ldHJpY3NNb2RlKSBjb25zdAorRmxvYXRSZWN0IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9y
bUJvdW5kc0ZvckdseXBoKEdseXBoKSBjb25zdAoreworICAgIHJldHVybiBGbG9hdFJlY3QoKTsK
K30KKworZmxvYXQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtV2lkdGhGb3JHbHlwaChHbHlwaCBn
bHlwaCkgY29uc3QKIHsKICAgICBBU1NFUlQobV9wbGF0Zm9ybURhdGEubV9zY2FsZWRGb250KTsK
IApAQCAtMTI1LDEwICsxMzAsOCBAQCBHbHlwaE1ldHJpY3MgU2ltcGxlRm9udERhdGE6OnBsYXRm
b3JtTWV0CiAgICAgZmxvYXQgdyA9IChmbG9hdCltX3NwYWNlV2lkdGg7CiAgICAgaWYgKGNhaXJv
X3NjYWxlZF9mb250X3N0YXR1cyhtX3BsYXRmb3JtRGF0YS5tX3NjYWxlZEZvbnQpID09IENBSVJP
X1NUQVRVU19TVUNDRVNTICYmIGV4dGVudHMueF9hZHZhbmNlICE9IDApCiAgICAgICAgIHcgPSAo
ZmxvYXQpZXh0ZW50cy54X2FkdmFuY2U7Ci0gICAgCi0gICAgR2x5cGhNZXRyaWNzIG1ldHJpY3M7
Ci0gICAgbWV0cmljcy5ob3Jpem9udGFsQWR2YW5jZSA9IHc7Ci0gICAgcmV0dXJuIG1ldHJpY3M7
CisKKyAgICByZXR1cm4gdzsgICAgCiB9CiAKIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vU2ltcGxlRm9udERhdGFDaHJvbWl1bVdpbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TaW1wbGVGb250RGF0YUNocm9t
aXVtV2luLmNwcAkocmV2aXNpb24gNTc5NDYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1NpbXBsZUZvbnREYXRhQ2hyb21pdW1XaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNTEsNyArMTUxLDEyIEBAIHZvaWQgU2ltcGxlRm9udERhdGE6OmRldGVybWluZVBpdGNoKCkK
ICAgICBSZWxlYXNlREMoMCwgZGMpOwogfQogCi1HbHlwaE1ldHJpY3MgU2ltcGxlRm9udERhdGE6
OnBsYXRmb3JtTWV0cmljc0ZvckdseXBoKEdseXBoIGdseXBoLCBHbHlwaE1ldHJpY3NNb2RlKSBj
b25zdAorRmxvYXRSZWN0IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKEds
eXBoKSBjb25zdAoreworICAgIHJldHVybiBGbG9hdFJlY3QoKTsKK30KKworZmxvYXQgU2ltcGxl
Rm9udERhdGE6OnBsYXRmb3JtV2lkdGhGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKIHsKICAg
ICBIREMgZGMgPSBHZXREQygwKTsKICAgICBIR0RJT0JKIG9sZEZvbnQgPSBTZWxlY3RPYmplY3Qo
ZGMsIG1fcGxhdGZvcm1EYXRhLmhmb250KCkpOwpAQCAtMTcwLDkgKzE3NSw3IEBAIEdseXBoTWV0
cmljcyBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1NZXQKICAgICBTZWxlY3RPYmplY3QoZGMsIG9s
ZEZvbnQpOwogICAgIFJlbGVhc2VEQygwLCBkYyk7CiAKLSAgICBHbHlwaE1ldHJpY3MgbWV0cmlj
czsKLSAgICBtZXRyaWNzLmhvcml6b250YWxBZHZhbmNlID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHdp
ZHRoKTsKLSAgICByZXR1cm4gbWV0cmljczsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+
KHdpZHRoKTsKIH0KIAogfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2ltcGxlRm9udERhdGFMaW51eC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TaW1wbGVGb250RGF0YUxp
bnV4LmNwcAkocmV2aXNpb24gNTc5NDYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1NpbXBsZUZvbnREYXRhTGludXguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzIsNyAr
MTcyLDEyIEBAIHZvaWQgU2ltcGxlRm9udERhdGE6OmRldGVybWluZVBpdGNoKCkKICAgICBtX3Ry
ZWF0QXNGaXhlZFBpdGNoID0gcGxhdGZvcm1EYXRhKCkuaXNGaXhlZFBpdGNoKCk7CiB9CiAKLUds
eXBoTWV0cmljcyBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1NZXRyaWNzRm9yR2x5cGgoR2x5cGgg
Z2x5cGgsIEdseXBoTWV0cmljc01vZGUgLyogbWV0cmljc01vZGUgKi8pIGNvbnN0CitGbG9hdFJl
Y3QgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQm91bmRzRm9yR2x5cGgoR2x5cGgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIEZsb2F0UmVjdCgpOworfQorICAgIAorZmxvYXQgU2ltcGxlRm9udERhdGE6
OnBsYXRmb3JtV2lkdGhGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKIHsKICAgICBTa0FTU0VS
VChzaXplb2YoZ2x5cGgpID09IDIpOyAgIC8vIGNvbXBpbGUtdGltZSBhc3NlcnQKIApAQCAtMTg2
LDkgKzE5MSw3IEBAIEdseXBoTWV0cmljcyBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1NZXQKICAg
ICAvLyBUaG91Z2ggV2ViS2l0IHN1cHBvcnRzIG5vbi1pbnRlZ3JhbCBhZHZhbmNlcywgU2tpYSBv
bmx5IHN1cHBvcnRzIHRoZW0KICAgICAvLyBmb3IgInN1YnBpeGVsIiAoZGlzdGluY3QgZnJvbSBM
Q0Qgc3VicGl4ZWwgYW50aWFsaWFzaW5nKSB0ZXh0LCB3aGljaAogICAgIC8vIHdlIGRvbid0IHVz
ZS4KLSAgICBHbHlwaE1ldHJpY3MgbWV0cmljczsKLSAgICBtZXRyaWNzLmhvcml6b250YWxBZHZh
bmNlID0gcm91bmQoU2tTY2FsYXJUb0Zsb2F0KHdpZHRoKSk7Ci0gICAgcmV0dXJuIG1ldHJpY3M7
CisgICAgcmV0dXJuIHJvdW5kKFNrU2NhbGFyVG9GbG9hdCh3aWR0aCkpOwogfQogCiB9ICAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvU2lt
cGxlRm9udERhdGFQYW5nby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ndGsvU2ltcGxlRm9udERhdGFQYW5nby5jcHAJKHJldmlzaW9uIDU3OTQ2KQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvU2ltcGxlRm9udERhdGFQYW5nby5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTExOSw3ICsxMTksMTIgQEAgdm9pZCBTaW1wbGVGb250RGF0YTo6ZGV0ZXJt
aW5lUGl0Y2goKQogICAgIG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPSBtX3BsYXRmb3JtRGF0YS5pc0Zp
eGVkUGl0Y2goKTsKIH0KIAotR2x5cGhNZXRyaWNzIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybU1l
dHJpY3NGb3JHbHlwaChHbHlwaCBnbHlwaCwgR2x5cGhNZXRyaWNzTW9kZSkgY29uc3QKK0Zsb2F0
UmVjdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1Cb3VuZHNGb3JHbHlwaChHbHlwaCkgY29uc3QK
K3sKKyAgICByZXR1cm4gRmxvYXRSZWN0KCk7Cit9CisKK2Zsb2F0IFNpbXBsZUZvbnREYXRhOjpw
bGF0Zm9ybVdpZHRoRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG1f
cGxhdGZvcm1EYXRhLm1fc2NhbGVkRm9udCk7CiAKQEAgLTEyNywxMyArMTMyLDExIEBAIEdseXBo
TWV0cmljcyBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1NZXQKICAgICBjYWlyb190ZXh0X2V4dGVu
dHNfdCBleHRlbnRzOwogICAgIGNhaXJvX3NjYWxlZF9mb250X2dseXBoX2V4dGVudHMobV9wbGF0
Zm9ybURhdGEubV9zY2FsZWRGb250LCAmY2dseXBoLCAxLCAmZXh0ZW50cyk7CiAKLSAgICBmbG9h
dCB3ID0gKGZsb2F0KW1fc3BhY2VXaWR0aDsKKyAgICBmbG9hdCB3aWR0aCA9IChmbG9hdCltX3Nw
YWNlV2lkdGg7CiAgICAgaWYgKGNhaXJvX3NjYWxlZF9mb250X3N0YXR1cyhtX3BsYXRmb3JtRGF0
YS5tX3NjYWxlZEZvbnQpID09IENBSVJPX1NUQVRVU19TVUNDRVNTICYmIGV4dGVudHMueF9hZHZh
bmNlICE9IDApCi0gICAgICAgIHcgPSAoZmxvYXQpZXh0ZW50cy54X2FkdmFuY2U7Ci0gICAgCi0g
ICAgR2x5cGhNZXRyaWNzIG1ldHJpY3M7Ci0gICAgbWV0cmljcy5ob3Jpem9udGFsQWR2YW5jZSA9
IHc7Ci0gICAgcmV0dXJuIG1ldHJpY3M7CisgICAgICAgIHdpZHRoID0gKGZsb2F0KWV4dGVudHMu
eF9hZHZhbmNlOworCisgICAgcmV0dXJuIHdpZHRoOyAgICAKIH0KIAogfQpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xs
ZXIuY3BwCShyZXZpc2lvbiA1Nzk0NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0NywxMiArNTQ3
LDEyIEBAIHZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjphZGp1c3RHbHlwaHMKICAgICAgICAg
ICAgIG1fYWRqdXN0ZWRBZHZhbmNlcy5hcHBlbmQoYWR2YW5jZSk7CiAgICAgICAgICAgICBtX2Fk
anVzdGVkR2x5cGhzLmFwcGVuZChnbHlwaCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIEds
eXBoTWV0cmljcyBnbHlwaE1ldHJpY3MgPSBmb250RGF0YS0+bWV0cmljc0ZvckdseXBoKGdseXBo
KTsKLSAgICAgICAgICAgIGdseXBoTWV0cmljcy5ib3VuZGluZ0JveC5tb3ZlKGdseXBoT3JpZ2lu
LngsIGdseXBoT3JpZ2luLnkpOwotICAgICAgICAgICAgbV9taW5HbHlwaEJvdW5kaW5nQm94WCA9
IG1pbihtX21pbkdseXBoQm91bmRpbmdCb3hYLCBnbHlwaE1ldHJpY3MuYm91bmRpbmdCb3gueCgp
KTsKLSAgICAgICAgICAgIG1fbWF4R2x5cGhCb3VuZGluZ0JveFggPSBtYXgobV9tYXhHbHlwaEJv
dW5kaW5nQm94WCwgZ2x5cGhNZXRyaWNzLmJvdW5kaW5nQm94LnJpZ2h0KCkpOwotICAgICAgICAg
ICAgbV9taW5HbHlwaEJvdW5kaW5nQm94WSA9IG1pbihtX21pbkdseXBoQm91bmRpbmdCb3hZLCBn
bHlwaE1ldHJpY3MuYm91bmRpbmdCb3gueSgpKTsKLSAgICAgICAgICAgIG1fbWF4R2x5cGhCb3Vu
ZGluZ0JveFkgPSBtYXgobV9tYXhHbHlwaEJvdW5kaW5nQm94WSwgZ2x5cGhNZXRyaWNzLmJvdW5k
aW5nQm94LmJvdHRvbSgpKTsKKyAgICAgICAgICAgIEZsb2F0UmVjdCBnbHlwaEJvdW5kcyA9IGZv
bnREYXRhLT5ib3VuZHNGb3JHbHlwaChnbHlwaCk7CisgICAgICAgICAgICBnbHlwaEJvdW5kcy5t
b3ZlKGdseXBoT3JpZ2luLngsIGdseXBoT3JpZ2luLnkpOworICAgICAgICAgICAgbV9taW5HbHlw
aEJvdW5kaW5nQm94WCA9IG1pbihtX21pbkdseXBoQm91bmRpbmdCb3hYLCBnbHlwaEJvdW5kcy54
KCkpOworICAgICAgICAgICAgbV9tYXhHbHlwaEJvdW5kaW5nQm94WCA9IG1heChtX21heEdseXBo
Qm91bmRpbmdCb3hYLCBnbHlwaEJvdW5kcy5yaWdodCgpKTsKKyAgICAgICAgICAgIG1fbWluR2x5
cGhCb3VuZGluZ0JveFkgPSBtaW4obV9taW5HbHlwaEJvdW5kaW5nQm94WSwgZ2x5cGhCb3VuZHMu
eSgpKTsKKyAgICAgICAgICAgIG1fbWF4R2x5cGhCb3VuZGluZ0JveFkgPSBtYXgobV9tYXhHbHlw
aEJvdW5kaW5nQm94WSwgZ2x5cGhCb3VuZHMuYm90dG9tKCkpOwogICAgICAgICAgICAgZ2x5cGhP
cmlnaW4ueCArPSBhZHZhbmNlLndpZHRoOwogICAgICAgICAgICAgZ2x5cGhPcmlnaW4ueSArPSBh
ZHZhbmNlLmhlaWdodDsKICAgICAgICAgICAgIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9tYWMvU2ltcGxlRm9udERhdGFNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFNYWMubW0JKHJldmlzaW9uIDU3OTQ2KQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFNYWMubW0JKHdv
cmtpbmcgY29weSkKQEAgLTQwNyw3ICs0MDcsMjIgQEAgdm9pZCBTaW1wbGVGb250RGF0YTo6ZGV0
ZXJtaW5lUGl0Y2goKQogICAgICAgICAgICBbbmFtZSBjYXNlSW5zZW5zaXRpdmVDb21wYXJlOkAi
TW9ub3R5cGVDb3JzaXZhIl0gIT0gTlNPcmRlcmVkU2FtZTsKIH0KIAotR2x5cGhNZXRyaWNzIFNp
bXBsZUZvbnREYXRhOjpwbGF0Zm9ybU1ldHJpY3NGb3JHbHlwaChHbHlwaCBnbHlwaCwgR2x5cGhN
ZXRyaWNzTW9kZSBtZXRyaWNzTW9kZSkgY29uc3QKK0Zsb2F0UmVjdCBTaW1wbGVGb250RGF0YTo6
cGxhdGZvcm1Cb3VuZHNGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKK3sKKyAgICBGbG9hdFJl
Y3QgYm91bmRpbmdCb3g7CisjaWZuZGVmIEJVSUxESU5HX09OX1RJR0VSCisgICAgQ0dSZWN0IGJv
eDsKKyAgICBDR0ZvbnRHZXRHbHlwaEJCb3hlcyhwbGF0Zm9ybURhdGEoKS5jZ0ZvbnQoKSwgJmds
eXBoLCAxLCAmYm94KTsKKyAgICBmbG9hdCBwb2ludFNpemUgPSBwbGF0Zm9ybURhdGEoKS5tX3Np
emU7CisgICAgQ0dGbG9hdCBzY2FsZSA9IHBvaW50U2l6ZSAvIHVuaXRzUGVyRW0oKTsKKyAgICBi
b3VuZGluZ0JveCA9IENHUmVjdEFwcGx5QWZmaW5lVHJhbnNmb3JtKGJveCwgQ0dBZmZpbmVUcmFu
c2Zvcm1NYWtlU2NhbGUoc2NhbGUsIC1zY2FsZSkpOworICAgIGlmIChtX3N5bnRoZXRpY0JvbGRP
ZmZzZXQpCisgICAgICAgIGJvdW5kaW5nQm94LnNldFdpZHRoKGJvdW5kaW5nQm94LndpZHRoKCkg
KyBtX3N5bnRoZXRpY0JvbGRPZmZzZXQpOworI2VuZGlmCisgICAgcmV0dXJuIGJvdW5kaW5nQm94
OworfQorCitmbG9hdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBo
IGdseXBoKSBjb25zdAogewogICAgIE5TRm9udCogZm9udCA9IHBsYXRmb3JtRGF0YSgpLmZvbnQo
KTsKICAgICBmbG9hdCBwb2ludFNpemUgPSBwbGF0Zm9ybURhdGEoKS5tX3NpemU7CkBAIC00MTcs
MTkgKzQzMiw3IEBAIEdseXBoTWV0cmljcyBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1NZXQKICAg
ICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gY2FjaGUgZ2x5cGggd2lkdGhzIGZvciAlQCAlZiIs
IFtmb250IGRpc3BsYXlOYW1lXSwgcG9pbnRTaXplKTsKICAgICAgICAgYWR2YW5jZS53aWR0aCA9
IDA7CiAgICAgfQotICAgIEdseXBoTWV0cmljcyBtZXRyaWNzOwotICAgIG1ldHJpY3MuaG9yaXpv
bnRhbEFkdmFuY2UgPSBhZHZhbmNlLndpZHRoICsgbV9zeW50aGV0aWNCb2xkT2Zmc2V0OwotICAg
IGlmIChtZXRyaWNzTW9kZSA9PSBHbHlwaEJvdW5kaW5nQm94KSB7Ci0jaWZuZGVmIEJVSUxESU5H
X09OX1RJR0VSCi0gICAgICAgIENHUmVjdCBib3VuZGluZ0JveDsKLSAgICAgICAgQ0dGb250R2V0
R2x5cGhCQm94ZXMocGxhdGZvcm1EYXRhKCkuY2dGb250KCksICZnbHlwaCwgMSwgJmJvdW5kaW5n
Qm94KTsKLSAgICAgICAgQ0dGbG9hdCBzY2FsZSA9IHBvaW50U2l6ZSAvIHVuaXRzUGVyRW0oKTsK
LSAgICAgICAgbWV0cmljcy5ib3VuZGluZ0JveCA9IENHUmVjdEFwcGx5QWZmaW5lVHJhbnNmb3Jt
KGJvdW5kaW5nQm94LCBDR0FmZmluZVRyYW5zZm9ybU1ha2VTY2FsZShzY2FsZSwgLXNjYWxlKSk7
Ci0gICAgICAgIGlmIChtX3N5bnRoZXRpY0JvbGRPZmZzZXQpCi0gICAgICAgICAgICBtZXRyaWNz
LmJvdW5kaW5nQm94LnNldFdpZHRoKG1ldHJpY3MuYm91bmRpbmdCb3gud2lkdGgoKSArIG1fc3lu
dGhldGljQm9sZE9mZnNldCk7Ci0jZW5kaWYKLSAgICB9Ci0gICAgcmV0dXJuIG1ldHJpY3M7Cisg
ICAgcmV0dXJuIGFkdmFuY2Uud2lkdGggKyBtX3N5bnRoZXRpY0JvbGRPZmZzZXQ7CiB9CiAKICNp
ZiBVU0UoQVRTVUkpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVG
b250RGF0YUNHV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9TaW1wbGVGb250RGF0YUNHV2luLmNwcAkocmV2aXNpb24gNTc5NDYpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YUNHV2luLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTI1LDExICsxMjUsMjYgQEAgdm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1D
aGFyV2lkdGhJbgogICAgICAgICBpbml0Q2hhcldpZHRocygpOwogICAgIH0KIH0KK0Zsb2F0UmVj
dCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1Cb3VuZHNGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29u
c3QKK3sKKyAgICBpZiAobV9wbGF0Zm9ybURhdGEudXNlR0RJKCkpCisgICAgICAgIHJldHVybiBi
b3VuZHNGb3JHRElHbHlwaChnbHlwaCk7CisKKyAgICBDR1JlY3QgYm94OworICAgIENHRm9udEdl
dEdseXBoQkJveGVzKG1fcGxhdGZvcm1EYXRhLmNnRm9udCgpLCAmZ2x5cGgsIDEsICZib3VuZGlu
Z0JveCk7CisgICAgZmxvYXQgcG9pbnRTaXplID0gbV9wbGF0Zm9ybURhdGEuc2l6ZSgpOworICAg
IENHRmxvYXQgc2NhbGUgPSBwb2ludFNpemUgLyB1bml0c1BlckVtKCk7CisgICAgRmxvYXRSZWN0
IGJvdW5kaW5nQm94ID0gQ0dSZWN0QXBwbHlBZmZpbmVUcmFuc2Zvcm0oYm94LCBDR0FmZmluZVRy
YW5zZm9ybU1ha2VTY2FsZShzY2FsZSwgLXNjYWxlKSk7CisgICAgaWYgKG1fc3ludGhldGljQm9s
ZE9mZnNldCkKKyAgICAgICAgYm91bmRpbmdCb3guc2V0V2lkdGgoYm91bmRpbmdCb3gud2lkdGgo
KSArIG1fc3ludGhldGljQm9sZE9mZnNldCk7CiAKLUdseXBoTWV0cmljcyBTaW1wbGVGb250RGF0
YTo6cGxhdGZvcm1NZXRyaWNzRm9yR2x5cGgoR2x5cGggZ2x5cGgsIEdseXBoTWV0cmljc01vZGUg
bWV0cmljc01vZGUpIGNvbnN0CisgICAgcmV0dXJuIGJvdW5kaW5nQm94OworfQorCitmbG9hdCBT
aW1wbGVGb250RGF0YTo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAog
ewogICAgIGlmIChtX3BsYXRmb3JtRGF0YS51c2VHREkoKSkKLSAgICAgICByZXR1cm4gbWV0cmlj
c0ZvckdESUdseXBoKGdseXBoKTsKKyAgICAgICAgcmV0dXJuIHdpZHRoRm9yR0RJR2x5cGgoZ2x5
cGgpOwogCiAgICAgQ0dGb250UmVmIGZvbnQgPSBtX3BsYXRmb3JtRGF0YS5jZ0ZvbnQoKTsKICAg
ICBmbG9hdCBwb2ludFNpemUgPSBtX3BsYXRmb3JtRGF0YS5zaXplKCk7CkBAIC0xMzksMTggKzE1
NCw4IEBAIEdseXBoTWV0cmljcyBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1NZXQKICAgICAvLyBG
SVhNRTogTmVlZCB0byBhZGQgcmVhbCBzdXBwb3J0IGZvciBwcmludGVyIGZvbnRzLgogICAgIGJv
b2wgaXNQcmludGVyRm9udCA9IGZhbHNlOwogICAgIHdrR2V0R2x5cGhBZHZhbmNlcyhmb250LCBt
LCBtX2lzU3lzdGVtRm9udCwgaXNQcmludGVyRm9udCwgZ2x5cGgsIGFkdmFuY2UpOwotICAgIEds
eXBoTWV0cmljcyBtZXRyaWNzOwotICAgIG1ldHJpY3MuaG9yaXpvbnRhbEFkdmFuY2UgPSBhZHZh
bmNlLndpZHRoICsgbV9zeW50aGV0aWNCb2xkT2Zmc2V0OwotICAgIAotICAgIGlmIChtZXRyaWNz
TW9kZSA9PSBHbHlwaEJvdW5kaW5nQm94KSB7Ci0gICAgICAgIENHUmVjdCBib3VuZGluZ0JveDsK
LSAgICAgICAgQ0dGb250R2V0R2x5cGhCQm94ZXMoZm9udCwgJmdseXBoLCAxLCAmYm91bmRpbmdC
b3gpOwotICAgICAgICBDR0Zsb2F0IHNjYWxlID0gcG9pbnRTaXplIC8gdW5pdHNQZXJFbSgpOwot
ICAgICAgICBtZXRyaWNzLmJvdW5kaW5nQm94ID0gQ0dSZWN0QXBwbHlBZmZpbmVUcmFuc2Zvcm0o
Ym91bmRpbmdCb3gsIENHQWZmaW5lVHJhbnNmb3JtTWFrZVNjYWxlKHNjYWxlLCAtc2NhbGUpKTsK
LSAgICAgICAgaWYgKG1fc3ludGhldGljQm9sZE9mZnNldCkKLSAgICAgICAgICAgIG1ldHJpY3Mu
Ym91bmRpbmdCb3guc2V0V2lkdGgobWV0cmljcy5ib3VuZGluZ0JveC53aWR0aCgpICsgbV9zeW50
aGV0aWNCb2xkT2Zmc2V0KTsKLSAgICB9Ci0gICAgcmV0dXJuIG1ldHJpY3M7CisKKyAgICByZXR1
cm4gYWR2YW5jZS53aWR0aCArIG1fc3ludGhldGljQm9sZE9mZnNldDsKIH0KIAogfQpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFDYWlyb1dpbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERh
dGFDYWlyb1dpbi5jcHAJKHJldmlzaW9uIDU3OTQ2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vU2ltcGxlRm9udERhdGFDYWlyb1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk2
LDYgKzk2LDE0IEBAIHZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQ2hhcldpZHRoSW4KICAg
ICAvLyBjaGFyd2lkdGhzIGFyZSBzZXQgaW4gcGxhdGZvcm1Jbml0LgogfQogCitGbG9hdFJlY3Qg
U2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQm91bmRzRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0
Cit7CisgICAgaWYgKG1fcGxhdGZvcm1EYXRhLnVzZUdESSgpKQorICAgICAgICByZXR1cm4gYm91
bmRzRm9yR0RJR2x5cGgoZ2x5cGgpOworICAgIC8vRklYTUU6IEltcGxlbWVudCB0aGlzCisgICAg
cmV0dXJuIEZsb2F0UmVjdCgpOworfQorICAgIAogZmxvYXQgU2ltcGxlRm9udERhdGE6OnBsYXRm
b3JtV2lkdGhGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKIHsKICAgICBpZiAobV9wbGF0Zm9y
bURhdGEudXNlR0RJKCkpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1w
bGVGb250RGF0YVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vU2ltcGxlRm9udERhdGFXaW4uY3BwCShyZXZpc2lvbiA1Nzk0NikKKysrIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhV2luLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTc5LDcgKzE3OSwyNCBAQCB2b2lkIFNpbXBsZUZvbnREYXRhOjpkZXRlcm1pbmVQaXRj
aCgpCiAgICAgUmVsZWFzZURDKDAsIGRjKTsKIH0KIAotR2x5cGhNZXRyaWNzIFNpbXBsZUZvbnRE
YXRhOjptZXRyaWNzRm9yR0RJR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CitGbG9hdFJlY3QgU2lt
cGxlRm9udERhdGE6OmJvdW5kc0ZvckdESUdseXBoKEdseXBoIGdseXBoKSBjb25zdAoreworICAg
IEhEQyBoZGMgPSBHZXREQygwKTsKKyAgICBTZXRHcmFwaGljc01vZGUoaGRjLCBHTV9BRFZBTkNF
RCk7CisgICAgSEdESU9CSiBvbGRGb250ID0gU2VsZWN0T2JqZWN0KGhkYywgbV9wbGF0Zm9ybURh
dGEuaGZvbnQoKSk7CisgICAgCisgICAgR0xZUEhNRVRSSUNTIGdkaU1ldHJpY3M7CisgICAgc3Rh
dGljIGNvbnN0IE1BVDIgaWRlbnRpdHkgPSB7IDAsIDEsICAwLCAwLCAgMCwgMCwgIDAsIDEgfTsK
KyAgICBHZXRHbHlwaE91dGxpbmUoaGRjLCBnbHlwaCwgR0dPX01FVFJJQ1MgfCBHR09fR0xZUEhf
SU5ERVgsICZnZGlNZXRyaWNzLCAwLCAwLCAmaWRlbnRpdHkpOworICAgIAorICAgIFNlbGVjdE9i
amVjdChoZGMsIG9sZEZvbnQpOworICAgIFJlbGVhc2VEQygwLCBoZGMpOworICAgIAorICAgIHJl
dHVybiBGbG9hdFJlY3QoZ2RpTWV0cmljcy5nbXB0R2x5cGhPcmlnaW4ueCwgLWdkaU1ldHJpY3Mu
Z21wdEdseXBoT3JpZ2luLnksCisgICAgICAgIGdkaU1ldHJpY3MuZ21CbGFja0JveFggKyBtX3N5
bnRoZXRpY0JvbGRPZmZzZXQsIGdkaU1ldHJpY3MuZ21CbGFja0JveFkpOyAKK30KKyAgICAKK2Zs
b2F0IFNpbXBsZUZvbnREYXRhOjp3aWR0aEZvckdESUdseXBoKEdseXBoIGdseXBoKSBjb25zdAog
ewogICAgIEhEQyBoZGMgPSBHZXREQygwKTsKICAgICBTZXRHcmFwaGljc01vZGUoaGRjLCBHTV9B
RFZBTkNFRCk7CkBAIC0xOTIsMTIgKzIwOSw3IEBAIEdseXBoTWV0cmljcyBTaW1wbGVGb250RGF0
YTo6bWV0cmljc0ZvckcKICAgICBTZWxlY3RPYmplY3QoaGRjLCBvbGRGb250KTsKICAgICBSZWxl
YXNlREMoMCwgaGRjKTsKIAotICAgIEdseXBoTWV0cmljcyBnbHlwaE1ldHJpY3M7Ci0gICAgZ2x5
cGhNZXRyaWNzLmhvcml6b250YWxBZHZhbmNlID0gZ2RpTWV0cmljcy5nbUNlbGxJbmNYICsgbV9z
eW50aGV0aWNCb2xkT2Zmc2V0OwotICAgIGdseXBoTWV0cmljcy5ib3VuZGluZ0JveCA9IEZsb2F0
UmVjdChnZGlNZXRyaWNzLmdtcHRHbHlwaE9yaWdpbi54LCAtZ2RpTWV0cmljcy5nbXB0R2x5cGhP
cmlnaW4ueSwKLSAgICAgICAgZ2RpTWV0cmljcy5nbUJsYWNrQm94WCArIG1fc3ludGhldGljQm9s
ZE9mZnNldCwgZ2RpTWV0cmljcy5nbUJsYWNrQm94WSk7Ci0KLSAgICByZXR1cm4gZ2x5cGhNZXRy
aWNzOworICAgIHJldHVybiBnZGlNZXRyaWNzLmdtQ2VsbEluY1ggKyBtX3N5bnRoZXRpY0JvbGRP
ZmZzZXQ7CiB9CiAKIFNDUklQVF9GT05UUFJPUEVSVElFUyogU2ltcGxlRm9udERhdGE6OnNjcmlw
dEZvbnRQcm9wZXJ0aWVzKCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luY2UvU2ltcGxlRm9udERhdGFXaW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW5jZS9TaW1wbGVGb250RGF0YVdpbmNlLmNwcAkocmV2aXNpb24gNTc5
NDYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL1NpbXBsZUZvbnREYXRhV2lu
Y2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzEsNiArMTMxLDExIEBAIHZvaWQgU2ltcGxlRm9u
dERhdGE6OmRldGVybWluZVBpdGNoKCkKICAgICBtX3RyZWF0QXNGaXhlZFBpdGNoID0gISh0bS50
bVBpdGNoQW5kRmFtaWx5ICYgVE1QRl9GSVhFRF9QSVRDSCk7CiB9CiAKK0Zsb2F0UmVjdCBTaW1w
bGVGb250RGF0YTo6cGxhdGZvcm1Cb3VuZHNGb3JHbHlwaChHbHlwaCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gRmxvYXRSZWN0KCk7Cit9CisgICAgCiBmbG9hdCBTaW1wbGVGb250RGF0YTo6cGxhdGZv
cm1XaWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAogewogICAgIGlmIChtX3BsYXRmb3Jt
RGF0YS5pc0Rpc2FibGVkKCkpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L1Np
bXBsZUZvbnREYXRhV3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd3gvU2ltcGxlRm9udERhdGFXeC5jcHAJKHJldmlzaW9uIDU3OTQ2KQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93eC9TaW1wbGVGb250RGF0YVd4LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTEyLDE5ICsxMTIsMjIgQEAgdm9pZCBTaW1wbGVGb250RGF0YTo6ZGV0ZXJtaW5lUGl0Y2go
KQogICAgICAgICBtX3RyZWF0QXNGaXhlZFBpdGNoID0gZmFsc2U7CiB9CiAKLUdseXBoTWV0cmlj
cyBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1NZXRyaWNzRm9yR2x5cGgoR2x5cGggZ2x5cGgsIEds
eXBoTWV0cmljc01vZGUpIGNvbnN0CitGbG9hdFJlY3QgU2ltcGxlRm9udERhdGE6OnBsYXRmb3Jt
Qm91bmRzRm9yR2x5cGgoR2x5cGgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwor
fQorCitmbG9hdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoIGds
eXBoKSBjb25zdAogewotICAgIEdseXBoTWV0cmljcyBtZXRyaWNzOwogI2lmIF9fV1hNU1dfXwog
ICAgIC8vIHVuZGVyIFdpbmRvd3MgLyB3eE1TVyB3ZSBjdXJyZW50bHkgYWx3YXlzIHVzZSBHREkg
Zm9udHMuCi0gICAgbWV0cmljcy5ob3Jpem9udGFsQWR2YW5jZSA9IHdpZHRoRm9yR0RJR2x5cGgo
Z2x5cGgpOworICAgIHJldHVybiB3aWR0aEZvckdESUdseXBoKGdseXBoKTsKICNlbHNlCiAgICAg
Ly8gVE9ETzogZml4IHRoaXMhIE1ha2UgR2V0VGV4dEV4dGVudHMgYSBtZXRob2Qgb2Ygd3hGb250
IGluIDIuOQogICAgIGludCB3aWR0aCA9IDEwOwogICAgIEdldFRleHRFeHRlbnQoKm1fcGxhdGZv
cm1EYXRhLmZvbnQoKSwgKHd4Q2hhcilnbHlwaCwgJndpZHRoLCBOVUxMKTsKLSAgICBtZXRyaWNz
Lmhvcml6b250YWxBZHZhbmNlID0gd2lkdGg7CisgICAgcmV0dXJuIHdpZHRoOwogI2VuZGlmCi0g
ICAgcmV0dXJuIG1ldHJpY3M7CiB9CiAKICNpZiBPUyhXSU5ET1dTKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54122</attachid>
            <date>2010-04-22 19:47:07 -0700</date>
            <delta_ts>2010-04-22 19:59:38 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch_4-22-10-glyph.txt</filename>
            <type>text/plain</type>
            <size>41418</size>
            <attacher name="Adele Peterson">adele</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1ODE0MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNzQgQEAKKzIwMTAtMDQtMjIgIEFkZWxlIFBldGVyc29uICA8YWRlbGVAYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZp
eCBmb3IgPHJkYXI6Ly9wcm9ibGVtLzc4NTU3Nzc+IFJFR1JFU1NJT046IE1lbW9yeSB1c2FnZSBp
bmNyZWFzZSBjYXVzZWQgYnkgc3RvcmluZyBnbHlwaCBib3VuZHMgaW4gR2x5cGhNZXRyaWNzTWFw
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNzkzNgor
CisgICAgICAgIFRoaXMgY2hhbmdlIGJyZWFrcyB0aGUgR2x5cGhNZXRyaWNzTWFwIGludG8gdHdv
IG1hcHMgLSBvbmUgZm9yIHdpZHRoIGFuZCBvbmUgZm9yIGJvdW5kcywgc28gdGhhdCB3ZSBkb24n
dCBzdG9yZQorICAgICAgICBhIEZsb2F0UmVjdCBmb3IgdGhlIGdseXBoIGJvdW5kcyB1bmxlc3Mg
d2UgbmVlZCB0by4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLiAgVGhpcyBz
aG91bGQgbm90IGNhdXNlIGFueSBjaGFuZ2UgaW4gZnVuY3Rpb25hbGl0eS4KKworICAgICAgICBV
cGRhdGVkIGZvciByZW1vdmFsIG9mIEdseXBoTWV0cmljc01hcC5jcHAKKyAgICAgICAgKiBBbmRy
b2lkLm1rOgorICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIFdlYkNvcmUuZ3lw
aToKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKKyAgICAgICAgTWFkZSBHbHlwaE1l
dHJpY3NNYXAgYSB0ZW1wbGF0ZSwgc28gaXQgY2FuIGJlIHVzZWQgZm9yIHNlcGFyYXRlIHdpZHRo
IGFuZCBib3VuZHMgbWFwcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HbHlwaE1ldHJp
Y3NNYXAuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dseXBoTWV0
cmljc01hcC5oOgorICAgICAgICAoV2ViQ29yZTo6R2x5cGhNZXRyaWNzTWFwOjptZXRyaWNzRm9y
R2x5cGgpOgorICAgICAgICAoV2ViQ29yZTo6R2x5cGhNZXRyaWNzTWFwOjpzZXRNZXRyaWNzRm9y
R2x5cGgpOgorICAgICAgICAoV2ViQ29yZTo6R2x5cGhNZXRyaWNzTWFwOjpHbHlwaE1ldHJpY3NQ
YWdlOjptZXRyaWNzRm9yR2x5cGgpOgorICAgICAgICAoV2ViQ29yZTo6R2x5cGhNZXRyaWNzTWFw
OjpHbHlwaE1ldHJpY3NQYWdlOjpzZXRNZXRyaWNzRm9yR2x5cGgpOgorICAgICAgICAoV2ViQ29y
ZTo6R2x5cGhNZXRyaWNzTWFwOjpHbHlwaE1ldHJpY3NQYWdlOjpzZXRNZXRyaWNzRm9ySW5kZXgp
OgorICAgICAgICAoV2ViQ29yZTo6Ojp1bmtub3duTWV0cmljcyk6CisgICAgICAgIChXZWJDb3Jl
Ojo6OmxvY2F0ZVBhZ2VTbG93Q2FzZSk6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9t
YWMvQ29tcGxleFRleHRDb250cm9sbGVyLmNwcDogKFdlYkNvcmU6OkNvbXBsZXhUZXh0Q29udHJv
bGxlcjo6YWRqdXN0R2x5cGhzQW5kQWR2YW5jZXMpOgorICAgICAgICBDYWxsIGJvdW5kc0Zvckds
eXBoIGluc3RlYWQgb2YgbWV0cmljc0ZvckdseXBoLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3dpbi9VbmlzY3JpYmVDb250cm9sbGVyLmNwcDogKFdlYkNvcmU6OlVuaXNjcmliZUNvbnRy
b2xsZXI6OnNoYXBlQW5kUGxhY2VJdGVtKToKKyAgICAgICAgZGl0dG8uCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuY3BwOiAoV2ViQ29yZTo6U2ltcGxlRm9udERh
dGE6OnBsYXRmb3JtR2x5cGhJbml0KToKKyAgICAgICAgQ2FsbCBzZXRNZXRyaWNzRm9yR2x5cGgg
Zm9yIGJvdGggZ2x5cGggbWFwcy4KKworICAgICAgICBCcmVhayBnZXR0ZXJzIGFuZCBzZXR0ZXJz
IGZvciBtZXRyaWNzRm9yR2x5cGggaW50byB3aWR0aEZvckdseXBoIGFuZCBib3VuZHNGb3JHbHlw
aCwgbWFpbnRhaW5pbmcgcHJlc2VudCBiZWhhdmlvci4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9TaW1wbGVGb250RGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6KToKKyAgICAgICAgKFdl
YkNvcmU6OlNpbXBsZUZvbnREYXRhOjpib3VuZHNGb3JHbHlwaCk6CisgICAgICAgIChXZWJDb3Jl
OjpTaW1wbGVGb250RGF0YTo6d2lkdGhGb3JHbHlwaCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vU2ltcGxlRm9udERhdGFDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
aW1wbGVGb250RGF0YTo6cGxhdGZvcm1Cb3VuZHNGb3JHbHlwaCk6CisgICAgICAgIChXZWJDb3Jl
OjpTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1XaWR0aEZvckdseXBoKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TaW1wbGVGb250RGF0YUNocm9taXVtV2luLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKToK
KyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NpbXBsZUZvbnREYXRhTGlu
dXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQm91bmRz
Rm9yR2x5cGgpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OnBsYXRmb3JtV2lk
dGhGb3JHbHlwaCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL1NpbXBsZUZvbnRE
YXRhUGFuZ28uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OnBsYXRmb3Jt
Qm91bmRzRm9yR2x5cGgpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OnBsYXRm
b3JtV2lkdGhGb3JHbHlwaCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBs
ZUZvbnREYXRhTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OnBsYXRm
b3JtQm91bmRzRm9yR2x5cGgpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OnBs
YXRmb3JtV2lkdGhGb3JHbHlwaCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1Np
bXBsZUZvbnREYXRhQ0dXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6
OnBsYXRmb3JtQm91bmRzRm9yR2x5cGgpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERh
dGE6OnBsYXRmb3JtV2lkdGhGb3JHbHlwaCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL1NpbXBsZUZvbnREYXRhQ2Fpcm9XaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxl
Rm9udERhdGE6OnBsYXRmb3JtQm91bmRzRm9yR2x5cGgpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YVdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaW1w
bGVGb250RGF0YTo6Ym91bmRzRm9yR0RJR2x5cGgpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxl
Rm9udERhdGE6OndpZHRoRm9yR0RJR2x5cGgpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbmNlL1NpbXBsZUZvbnREYXRhV2luY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxl
Rm9udERhdGE6OnBsYXRmb3JtQm91bmRzRm9yR2x5cGgpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3d4L1NpbXBsZUZvbnREYXRhV3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxl
Rm9udERhdGE6OnBsYXRmb3JtQm91bmRzRm9yR2x5cGgpOgorICAgICAgICAoV2ViQ29yZTo6U2lt
cGxlRm9udERhdGE6OnBsYXRmb3JtV2lkdGhGb3JHbHlwaCk6CisKIDIwMTAtMDQtMjIgIFpoZW55
YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBGaXNo
ZXIuCkluZGV4OiBXZWJDb3JlL0FuZHJvaWQubWsKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9BbmRy
b2lkLm1rCShyZXZpc2lvbiA1Nzk0NikKKysrIFdlYkNvcmUvQW5kcm9pZC5tawkod29ya2luZyBj
b3B5KQpAQCAtNDM4LDcgKzQzOCw2IEBAIExPQ0FMX1NSQ19GSUxFUyA6PSAkKExPQ0FMX1NSQ19G
SUxFUykgXAogCXBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYXN0UGF0aC5jcHAgXAogCXBsYXRmb3Jt
L2dyYXBoaWNzL0dlbmVyYXRlZEltYWdlLmNwcCBcCiAJcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQ
YWdlVHJlZU5vZGUuY3BwIFwKLQlwbGF0Zm9ybS9ncmFwaGljcy9HbHlwaE1ldHJpY3NNYXAuY3Bw
IFwKIAlwbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5jcHAgXAogCXBsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dC5jcHAgXAogCXBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIu
Y3BwIFwKSW5kZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gNTc5NDYpCisrKyBXZWJDb3JlL0dOVW1ha2VmaWxl
LmFtCSh3b3JraW5nIGNvcHkpCkBAIC0xNjI0LDEwICsxNjI0LDkgQEAgd2ViY29yZV9zb3VyY2Vz
ICs9IFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRlZEltYWdlLmggXAogCVdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJhdG9yLmggXAogCVdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR2x5cGhCdWZmZXIuaCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlw
aE1ldHJpY3NNYXAuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2VUcmVl
Tm9kZS5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlVHJlZU5vZGUu
aCBcCi0JV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaE1ldHJpY3NNYXAuY3BwIFwKLQlX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoTWV0cmljc01hcC5oIFwKIAlXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFkaWVudC5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dC5jcHAgXApJbmRleDogV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDU3OTQ2KQorKysgV2ViQ29yZS9XZWJDb3JlLmd5cGkJ
KHdvcmtpbmcgY29weSkKQEAgLTIzNDEsMTAgKzIzNDEsOSBAQAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL0dlbmVyYXRlZEltYWdlLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL0dlbmVyYXRvci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9HbHlw
aEJ1ZmZlci5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9HbHlwaE1ldHJpY3NN
YXAuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlVHJlZU5vZGUu
Y3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2VUcmVlTm9kZS5o
JywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9HbHlwaE1ldHJpY3NNYXAuY3BwJywK
LSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9HbHlwaE1ldHJpY3NNYXAuaCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuY3BwJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHQuY3BwJywKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJD
b3JlLnZjcHJvagkocmV2aXNpb24gNTc5NDYpCisrKyBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dl
YkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yMjg0MiwxMCArMjI4NDIsNiBAQAogCQkJ
CQk+DQogCQkJCTwvRmlsZT4NCiAJCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxh
dGZvcm1cZ3JhcGhpY3NcR2x5cGhNZXRyaWNzTWFwLmNwcCINCi0JCQkJCT4NCi0JCQkJPC9GaWxl
Pg0KLQkJCQk8RmlsZQ0KIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xH
bHlwaE1ldHJpY3NNYXAuaCINCiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KSW5kZXg6IFdlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA1Nzk0NikKKysrIFdl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC0zNDIwLDYgKzM0MjAsNyBAQAogCQlBQjQwNDg0RTBFMDgzRkE4MDA3RDY5MjAgLyogTWVkaWFE
b2N1bWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QUI0MDQ4NEMwRTA4M0ZBODAwN0Q2OTIwIC8qIE1lZGlhRG9jdW1lbnQuaCAqLzsgfTsKIAkJQUI0
MjYxRDgwQTJGNkM5NzAwQkREMTdEIC8qIG1pc3NpbmdJbWFnZS50aWZmIGluIFJlc291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBQjQyNjFENzBBMkY2Qzk3MDBCREQx
N0QgLyogbWlzc2luZ0ltYWdlLnRpZmYgKi87IH07CiAJCUFCNENCNEVCMEI4QkRBM0QwMDlGNDBC
MCAvKiBKU0hUTUxTZWxlY3RFbGVtZW50Q3VzdG9tLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBQjRDQjRFQTBCOEJEQTNEMDA5RjQwQjAgLyogSlNIVE1M
U2VsZWN0RWxlbWVudEN1c3RvbS5oICovOyB9OworCQlBQjVBNkVENzExN0ZFNkJFMDA0Q0RDNEIg
LyogR2x5cGhNZXRyaWNzTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBQjVBNkVENTExN0ZFNkJFMDA0Q0RDNEIgLyogR2x5cGhNZXRyaWNzTWFwLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQUI2N0Qx
QTgwOTdGM0FFMzAwRjkzOTJFIC8qIFJlbmRlclRleHRDb250cm9sLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFCNjdEMUE2MDk3RjNBRTMwMEY5Mzky
RSAvKiBSZW5kZXJUZXh0Q29udHJvbC5jcHAgKi87IH07CiAJCUFCNjdEMUE5MDk3RjNBRTMwMEY5
MzkyRSAvKiBSZW5kZXJUZXh0Q29udHJvbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQUI2N0QxQTcwOTdGM0FFMzAwRjkzOTJFIC8qIFJlbmRlclRleHRD
b250cm9sLmggKi87IH07CiAJCUFCNzE3MDg5MEIzMTE4MDgwMDE3MTIzRSAvKiBTZWFyY2hQb3B1
cE1lbnUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFC
NzE3MDg4MEIzMTE4MDgwMDE3MTIzRSAvKiBTZWFyY2hQb3B1cE1lbnUuaCAqLzsgfTsKQEAgLTQ3
MDksOCArNDcxMCw2IEBACiAJCUM1MTYwRUVCMTAwNDU0M0EwMEE3Q0VFMiAvKiBTdG9yYWdlQXJl
YUltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1
MTYwRUU5MTAwNDU0M0EwMEE3Q0VFMiAvKiBTdG9yYWdlQXJlYUltcGwuaCAqLzsgfTsKIAkJQzU1
RTM4QkYxMDA0MEQ1RDAwQTU2QkRCIC8qIFN0b3JhZ2VOYW1lc3BhY2VJbXBsLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTVFMzhCQjEwMDQwRDVEMDBB
NTZCREIgLyogU3RvcmFnZU5hbWVzcGFjZUltcGwuaCAqLzsgfTsKIAkJQzU1RTM4QzAxMDA0MEQ1
RDAwQTU2QkRCIC8qIFN0b3JhZ2VOYW1lc3BhY2VJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1NUUzOEJDMTAwNDBENUQwMEE1NkJEQiAvKiBT
dG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAgKi87IH07Ci0JCUM1RDRBQTc5MTE2QkFGQjYwMDY5Q0E5
MyAvKiBHbHlwaE1ldHJpY3NNYXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQzVENEFBNzcxMTZCQUZCNjAwNjlDQTkzIC8qIEdseXBoTWV0cmljc01h
cC5jcHAgKi87IH07Ci0JCUM1RDRBQTdBMTE2QkFGQjYwMDY5Q0E5MyAvKiBHbHlwaE1ldHJpY3NN
YXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1RDRB
QTc4MTE2QkFGQjYwMDY5Q0E5MyAvKiBHbHlwaE1ldHJpY3NNYXAuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlDNUU5QjY3NzEwNjk3RTEzMDBDN0JC
MUEgLyogU3RvcmFnZUV2ZW50RGlzcGF0Y2hlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNUU5QjY3NjEwNjk3RTEzMDBDN0JCMUEgLyogU3RvcmFn
ZUV2ZW50RGlzcGF0Y2hlci5jcHAgKi87IH07CiAJCUM1RUJERDg0MTA1RURERUMwMDU2ODE2RiAv
KiBTdG9yYWdlRXZlbnREaXNwYXRjaGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDNUVCREQ4MTEwNUVEREVDMDA1NjgxNkYgLyogU3RvcmFnZUV2ZW50
RGlzcGF0Y2hlci5oICovOyB9OwogCQlDNkQ3NEFENTA5QUEyODJFMDAwQjBBNTIgLyogTW9kaWZ5
U2VsZWN0aW9uTGlzdExldmVsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBDNkQ3NEFEMzA5QUEyODJFMDAwQjBBNTIgLyogTW9kaWZ5U2VsZWN0aW9uTGlz
dExldmVsLmggKi87IH07CkBAIC04NjEyLDYgKzg2MTEsNyBAQAogCQlBQjQwNDg0QzBFMDgzRkE4
MDA3RDY5MjAgLyogTWVkaWFEb2N1bWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBNZWRpYURvY3VtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFCNDI2
MUQ3MEEyRjZDOTcwMEJERDE3RCAvKiBtaXNzaW5nSW1hZ2UudGlmZiAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IGltYWdlLnRpZmY7IHBhdGggPSBtaXNz
aW5nSW1hZ2UudGlmZjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUI0Q0I0RUEwQjhC
REEzRDAwOUY0MEIwIC8qIEpTSFRNTFNlbGVjdEVsZW1lbnRDdXN0b20uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSFRNTFNlbGVjdEVsZW1lbnRDdXN0b20uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUI1QTZFRDUxMTdGRTZCRTAwNENEQzRCIC8qIEdseXBo
TWV0cmljc01hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHbHlwaE1ldHJp
Y3NNYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUI2N0QxQTYwOTdGM0FFMzAw
RjkzOTJFIC8qIFJlbmRlclRleHRDb250cm9sLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBSZW5kZXJUZXh0Q29udHJvbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUFCNjdEMUE3MDk3RjNBRTMwMEY5MzkyRSAvKiBSZW5kZXJUZXh0Q29udHJvbC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyVGV4dENvbnRyb2wuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUI3MTcwODgwQjMxMTgwODAwMTcxMjNFIC8q
IFNlYXJjaFBvcHVwTWVudS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2Vh
cmNoUG9wdXBNZW51Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDA4NSw4ICsx
MDA4NSw2IEBACiAJCUM1MTYwRUU5MTAwNDU0M0EwMEE3Q0VFMiAvKiBTdG9yYWdlQXJlYUltcGwu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RvcmFnZUFyZWFJbXBsLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM1NUUzOEJCMTAwNDBENUQwMEE1NkJEQiAvKiBT
dG9yYWdlTmFtZXNwYWNlSW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
dG9yYWdlTmFtZXNwYWNlSW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDNTVF
MzhCQzEwMDQwRDVEMDBBNTZCREIgLyogU3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDNUQ0QUE3NzExNkJBRkI2MDA2OUNBOTMgLyog
R2x5cGhNZXRyaWNzTWFwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEdseXBoTWV0cmljc01hcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUM1RDRB
QTc4MTE2QkFGQjYwMDY5Q0E5MyAvKiBHbHlwaE1ldHJpY3NNYXAuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gR2x5cGhNZXRyaWNzTWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUM1RTlCNjc2MTA2OTdFMTMwMEM3QkIxQSAvKiBTdG9yYWdlRXZlbnREaXNwYXRj
aGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0b3JhZ2VFdmVu
dERpc3BhdGNoZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDNUVCREQ4MTEw
NUVEREVDMDA1NjgxNkYgLyogU3RvcmFnZUV2ZW50RGlzcGF0Y2hlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTdG9yYWdlRXZlbnREaXNwYXRjaGVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUM2RDc0QUQzMDlBQTI4MkUwMDBCMEE1MiAvKiBNb2RpZnlTZWxl
Y3Rpb25MaXN0TGV2ZWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTW9kaWZ5
U2VsZWN0aW9uTGlzdExldmVsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNDY4
Myw4ICsxNDY4MSw3IEBACiAJCQkJQkMyM0YwREEwREFGRjRBNDAwOUZEQzkxIC8qIEdlbmVyYXRl
ZEltYWdlLmggKi8sCiAJCQkJQkNFMDRDODkwREFGRjdBMDAwN0EwRjQxIC8qIEdlbmVyYXRvci5o
ICovLAogCQkJCUIyQzNEQTVCMEQwMDZDRDYwMEVGNkYyNiAvKiBHbHlwaEJ1ZmZlci5oICovLAot
CQkJCUM1RDRBQTc3MTE2QkFGQjYwMDY5Q0E5MyAvKiBHbHlwaE1ldHJpY3NNYXAuY3BwICovLAot
CQkJCUM1RDRBQTc4MTE2QkFGQjYwMDY5Q0E5MyAvKiBHbHlwaE1ldHJpY3NNYXAuaCAqLywKKwkJ
CQlBQjVBNkVENTExN0ZFNkJFMDA0Q0RDNEIgLyogR2x5cGhNZXRyaWNzTWFwLmggKi8sCiAJCQkJ
QjJDM0RBNUMwRDAwNkNENjAwRUY2RjI2IC8qIEdseXBoUGFnZVRyZWVOb2RlLmNwcCAqLywKIAkJ
CQlCMkMzREE1RDBEMDA2Q0Q2MDBFRjZGMjYgLyogR2x5cGhQYWdlVHJlZU5vZGUuaCAqLywKIAkJ
CQlCQzUzQzYwNzBEQTU2QzU3MDAyMUVCNUQgLyogR3JhZGllbnQuY3BwICovLApAQCAtMTg4NTUs
NyArMTg4NTIsNiBAQAogCQkJCTk3QzA3ODUwMTE2NUQ1QkUwMDNBMzJFRiAvKiBTdWZmaXhUcmVl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkyNTQyRjREQjExNjZDMjVBMDBFODlBODYgLyogVXNlckdl
c3R1cmVJbmRpY2F0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDOTQzOUMzMTE2Q0Y0OTQwMDQ4
Qzc1MCAvKiBKU05vZGVDdXN0b20uaCBpbiBIZWFkZXJzICovLAotCQkJCUM1RDRBQTdBMTE2QkFG
QjYwMDY5Q0E5MyAvKiBHbHlwaE1ldHJpY3NNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUE0MDlD
OTg1MTE2RDBEREQwMDcxOTdCRCAvKiBBY2Nlc3NpYmlsaXR5UHJvZ3Jlc3NJbmRpY2F0b3IuaCBp
biBIZWFkZXJzICovLAogCQkJCTg5NTI1M0Q4MTE2QzRDNjgwMENBQkYwMCAvKiBGaWxlU3RyZWFt
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzM4ODlBMTExNkVBOURDMDBBREYzMTMgLyogRG9jdW1l
bnRXcml0ZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMTg4NjksNiArMTg4NjUsNyBAQAogCQkJCUNF
RjQxOENGMTE3OTY3OEMwMDlEMTEyQyAvKiBWaWV3cG9ydEFyZ3VtZW50cy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZEMzA4MEYxMTdDRjdFNzAwQTc5MUY3IC8qIFJlbmRlckZyYW1lQmFzZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZEMzA4RDYxMTdEMTY4NTAwQTc5MUY3IC8qIFJlbmRlcklGcmFt
ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQUI1QTZFRDcxMTdGRTZCRTAwNENEQzRCIC8qIEdseXBo
TWV0cmljc01hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1l
bnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0yMTA5NCw3ICsyMTA5MSw2IEBACiAJCQkJ
MkUzQkJGMDcxMTYyREExMTAwQjk0MDlBIC8qIFVVSUQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
ODk1MjUzNTIxMTY0MUIzNDAwQ0FCRjAwIC8qIEZpbGVUaHJlYWQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMjU0MkY0REExMTY2QzI1QTAwRTg5QTg2IC8qIFVzZXJHZXN0dXJlSW5kaWNhdG9yLmNw
cCBpbiBTb3VyY2VzICovLAotCQkJCUM1RDRBQTc5MTE2QkFGQjYwMDY5Q0E5MyAvKiBHbHlwaE1l
dHJpY3NNYXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTQwOUM5ODQxMTZEMERERDAwNzE5N0JE
IC8qIEFjY2Vzc2liaWxpdHlQcm9ncmVzc0luZGljYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk4OTUyNTNENzExNkM0QzY4MDBDQUJGMDAgLyogRmlsZVN0cmVhbS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk5RkEzN0VFNzExNzJGQ0YwMDBDNENENTUgLyogSlNTY3JpcHRQcm9maWxlTm9kZUN1
c3RvbS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTIxMTA0LDcgKzIxMTAwLDcgQEAKIAkJCQlDRUY0
MThDRTExNzk2NzhDMDA5RDExMkMgLyogVmlld3BvcnRBcmd1bWVudHMuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEZEMzA4MEUxMTdDRjdFNzAwQTc5MUY3IC8qIFJlbmRlckZyYW1lQmFzZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRkQzMDhENTExN0QxNjg1MDBBNzkxRjcgLyogUmVuZGVySUZy
YW1lLmNwcCBpbiBTb3VyY2VzICovLAotIAkJCQk5NzM4ODlBMDExNkVBOURDMDBBREYzMTMgLyog
RG9jdW1lbnRXcml0ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOTczODg5QTAxMTZFQTlEQzAw
QURGMzEzIC8qIERvY3VtZW50V3JpdGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1
bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaE1ldHJpY3NNYXAuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhNZXRyaWNzTWFwLmNwcAkocmV2aXNpb24gNTc5
NDYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoTWV0cmljc01hcC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNjIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwg
MjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAK
LSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAK
LSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUi
KSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
LSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIkdseXBoTWV0cmljc01hcC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LUdseXBoTWV0cmljc01hcDo6R2x5cGhNZXRyaWNzUGFnZSogR2x5cGhNZXRyaWNzTWFwOjpsb2Nh
dGVQYWdlU2xvd0Nhc2UodW5zaWduZWQgcGFnZU51bWJlcikKLXsKLSAgICBHbHlwaE1ldHJpY3NQ
YWdlKiBwYWdlOwotICAgIGlmICghcGFnZU51bWJlcikgewotICAgICAgICBBU1NFUlQoIW1fZmls
bGVkUHJpbWFyeVBhZ2UpOwotICAgICAgICBwYWdlID0gJm1fcHJpbWFyeVBhZ2U7Ci0gICAgICAg
IG1fZmlsbGVkUHJpbWFyeVBhZ2UgPSB0cnVlOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICht
X3BhZ2VzKSB7Ci0gICAgICAgICAgICBpZiAoKHBhZ2UgPSBtX3BhZ2VzLT5nZXQocGFnZU51bWJl
cikpKQotICAgICAgICAgICAgICAgIHJldHVybiBwYWdlOwotICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgIG1fcGFnZXMuc2V0KG5ldyBIYXNoTWFwPGludCwgR2x5cGhNZXRyaWNzUGFnZSo+KTsK
LSAgICAgICAgcGFnZSA9IG5ldyBHbHlwaE1ldHJpY3NQYWdlOwotICAgICAgICBtX3BhZ2VzLT5z
ZXQocGFnZU51bWJlciwgcGFnZSk7Ci0gICAgfQotCi0gICAgR2x5cGhNZXRyaWNzIHVua25vd25N
ZXRyaWNzOwotICAgIHVua25vd25NZXRyaWNzLmhvcml6b250YWxBZHZhbmNlID0gY0dseXBoU2l6
ZVVua25vd247Ci0gICAgdW5rbm93bk1ldHJpY3MuYm91bmRpbmdCb3guc2V0V2lkdGgoY0dseXBo
U2l6ZVVua25vd24pOwotICAgIHVua25vd25NZXRyaWNzLmJvdW5kaW5nQm94LnNldEhlaWdodChj
R2x5cGhTaXplVW5rbm93bik7Ci0gICAgLy8gRmlsbCBpbiB0aGUgd2hvbGUgcGFnZSB3aXRoIHRo
ZSB1bmtub3duIGdseXBoIGluZm9ybWF0aW9uLgotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBHbHlwaE1ldHJpY3NQYWdlOjpzaXplOyBpKyspCi0gICAgICAgIHBhZ2UtPnNldE1ldHJpY3NG
b3JJbmRleChpLCB1bmtub3duTWV0cmljcyk7Ci0KLSAgICByZXR1cm4gcGFnZTsKLX0KLQotfQpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaE1ldHJpY3NNYXAuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoTWV0cmljc01hcC5oCShyZXZp
c2lvbiA1Nzk0NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhNZXRyaWNzTWFw
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDYgQEAKICNpZm5kZWYgR2x5cGhNZXRyaWNz
TWFwX2gKICNkZWZpbmUgR2x5cGhNZXRyaWNzTWFwX2gKIAotI2luY2x1ZGUgIkZsb2F0UmVjdC5o
IgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2lu
Y2x1ZGUgPHd0Zi91bmljb2RlL1VuaWNvZGUuaD4KQEAgLTQwLDEyICszOSw3IEBAIHR5cGVkZWYg
dW5zaWduZWQgc2hvcnQgR2x5cGg7CiAKIGNvbnN0IGZsb2F0IGNHbHlwaFNpemVVbmtub3duID0g
LTE7CiAKLXN0cnVjdCBHbHlwaE1ldHJpY3MgewotICAgIGZsb2F0IGhvcml6b250YWxBZHZhbmNl
OwotICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveDsKLX07Ci0KLWNsYXNzIEdseXBoTWV0cmljc01h
cCA6IHB1YmxpYyBOb25jb3B5YWJsZSB7Cit0ZW1wbGF0ZTxjbGFzcyBUPiBjbGFzcyBHbHlwaE1l
dHJpY3NNYXAgOiBwdWJsaWMgTm9uY29weWFibGUgewogcHVibGljOgogICAgIEdseXBoTWV0cmlj
c01hcCgpIDogbV9maWxsZWRQcmltYXJ5UGFnZShmYWxzZSkgeyB9CiAgICAgfkdseXBoTWV0cmlj
c01hcCgpCkBAIC01NCwxNyArNDgsMTIgQEAgcHVibGljOgogICAgICAgICAgICAgZGVsZXRlQWxs
VmFsdWVzKCptX3BhZ2VzKTsKICAgICB9CiAKLSAgICBHbHlwaE1ldHJpY3MgbWV0cmljc0Zvckds
eXBoKEdseXBoIGdseXBoKQorICAgIFQgbWV0cmljc0ZvckdseXBoKEdseXBoIGdseXBoKQogICAg
IHsKICAgICAgICAgcmV0dXJuIGxvY2F0ZVBhZ2UoZ2x5cGggLyBHbHlwaE1ldHJpY3NQYWdlOjpz
aXplKS0+bWV0cmljc0ZvckdseXBoKGdseXBoKTsKICAgICB9CiAKLSAgICBmbG9hdCB3aWR0aEZv
ckdseXBoKEdseXBoIGdseXBoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGxvY2F0ZVBhZ2UoZ2x5
cGggLyBHbHlwaE1ldHJpY3NQYWdlOjpzaXplKS0+bWV0cmljc0ZvckdseXBoKGdseXBoKS5ob3Jp
em9udGFsQWR2YW5jZTsKLSAgICB9Ci0KLSAgICB2b2lkIHNldE1ldHJpY3NGb3JHbHlwaChHbHlw
aCBnbHlwaCwgY29uc3QgR2x5cGhNZXRyaWNzJiBtZXRyaWNzKQorICAgIHZvaWQgc2V0TWV0cmlj
c0ZvckdseXBoKEdseXBoIGdseXBoLCBjb25zdCBUJiBtZXRyaWNzKQogICAgIHsKICAgICAgICAg
bG9jYXRlUGFnZShnbHlwaCAvIEdseXBoTWV0cmljc1BhZ2U6OnNpemUpLT5zZXRNZXRyaWNzRm9y
R2x5cGgoZ2x5cGgsIG1ldHJpY3MpOwogICAgIH0KQEAgLTcyLDE0ICs2MSwxNCBAQCBwdWJsaWM6
CiBwcml2YXRlOgogICAgIHN0cnVjdCBHbHlwaE1ldHJpY3NQYWdlIHsKICAgICAgICAgc3RhdGlj
IGNvbnN0IHNpemVfdCBzaXplID0gMjU2OyAvLyBVc3VhbGx5IGNvdmVycyBMYXRpbi0xIGluIGEg
c2luZ2xlIHBhZ2UuCi0gICAgICAgIEdseXBoTWV0cmljcyBtX21ldHJpY3Nbc2l6ZV07CisgICAg
ICAgIFQgbV9tZXRyaWNzW3NpemVdOwogCi0gICAgICAgIEdseXBoTWV0cmljcyBtZXRyaWNzRm9y
R2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0IHsgcmV0dXJuIG1fbWV0cmljc1tnbHlwaCAlIHNpemVd
OyB9Ci0gICAgICAgIHZvaWQgc2V0TWV0cmljc0ZvckdseXBoKEdseXBoIGdseXBoLCBjb25zdCBH
bHlwaE1ldHJpY3MmIG1ldHJpY3MpCisgICAgICAgIFQgbWV0cmljc0ZvckdseXBoKEdseXBoIGds
eXBoKSBjb25zdCB7IHJldHVybiBtX21ldHJpY3NbZ2x5cGggJSBzaXplXTsgfQorICAgICAgICB2
b2lkIHNldE1ldHJpY3NGb3JHbHlwaChHbHlwaCBnbHlwaCwgY29uc3QgVCYgbWV0cmljcykKICAg
ICAgICAgewogICAgICAgICAgICAgc2V0TWV0cmljc0ZvckluZGV4KGdseXBoICUgc2l6ZSwgbWV0
cmljcyk7CiAgICAgICAgIH0KLSAgICAgICAgdm9pZCBzZXRNZXRyaWNzRm9ySW5kZXgodW5zaWdu
ZWQgaW5kZXgsIGNvbnN0IEdseXBoTWV0cmljcyYgbWV0cmljcykKKyAgICAgICAgdm9pZCBzZXRN
ZXRyaWNzRm9ySW5kZXgodW5zaWduZWQgaW5kZXgsIGNvbnN0IFQmIG1ldHJpY3MpCiAgICAgICAg
IHsKICAgICAgICAgICAgIG1fbWV0cmljc1tpbmRleF0gPSBtZXRyaWNzOwogICAgICAgICB9CkBA
IC05NCwxMSArODMsNDcgQEAgcHJpdmF0ZToKIAogICAgIEdseXBoTWV0cmljc1BhZ2UqIGxvY2F0
ZVBhZ2VTbG93Q2FzZSh1bnNpZ25lZCBwYWdlTnVtYmVyKTsKICAgICAKKyAgICBzdGF0aWMgVCB1
bmtub3duTWV0cmljcygpOworCiAgICAgYm9vbCBtX2ZpbGxlZFByaW1hcnlQYWdlOwogICAgIEds
eXBoTWV0cmljc1BhZ2UgbV9wcmltYXJ5UGFnZTsgLy8gV2Ugb3B0aW1pemUgZm9yIHRoZSBwYWdl
IHRoYXQgY29udGFpbnMgZ2x5cGggaW5kaWNlcyAwLTI1NS4KICAgICBPd25QdHI8SGFzaE1hcDxp
bnQsIEdseXBoTWV0cmljc1BhZ2UqPiA+IG1fcGFnZXM7CiB9OwogCit0ZW1wbGF0ZTw+IGlubGlu
ZSBmbG9hdCBHbHlwaE1ldHJpY3NNYXA8ZmxvYXQ+Ojp1bmtub3duTWV0cmljcygpCit7CisgICAg
cmV0dXJuIGNHbHlwaFNpemVVbmtub3duOworfQorCit0ZW1wbGF0ZTw+IGlubGluZSBGbG9hdFJl
Y3QgR2x5cGhNZXRyaWNzTWFwPEZsb2F0UmVjdD46OnVua25vd25NZXRyaWNzKCkKK3sKKyAgICBy
ZXR1cm4gRmxvYXRSZWN0KDAsIDAsIGNHbHlwaFNpemVVbmtub3duLCBjR2x5cGhTaXplVW5rbm93
bik7Cit9CisKK3RlbXBsYXRlPGNsYXNzIFQ+IHR5cGVuYW1lIEdseXBoTWV0cmljc01hcDxUPjo6
R2x5cGhNZXRyaWNzUGFnZSogR2x5cGhNZXRyaWNzTWFwPFQ+Ojpsb2NhdGVQYWdlU2xvd0Nhc2Uo
dW5zaWduZWQgcGFnZU51bWJlcikKK3sKKyAgICBHbHlwaE1ldHJpY3NQYWdlKiBwYWdlOworICAg
IGlmICghcGFnZU51bWJlcikgeworICAgICAgICBBU1NFUlQoIW1fZmlsbGVkUHJpbWFyeVBhZ2Up
OworICAgICAgICBwYWdlID0gJm1fcHJpbWFyeVBhZ2U7CisgICAgICAgIG1fZmlsbGVkUHJpbWFy
eVBhZ2UgPSB0cnVlOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChtX3BhZ2VzKSB7CisgICAg
ICAgICAgICBpZiAoKHBhZ2UgPSBtX3BhZ2VzLT5nZXQocGFnZU51bWJlcikpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBwYWdlOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1fcGFnZXMu
c2V0KG5ldyBIYXNoTWFwPGludCwgR2x5cGhNZXRyaWNzUGFnZSo+KTsKKyAgICAgICAgcGFnZSA9
IG5ldyBHbHlwaE1ldHJpY3NQYWdlOworICAgICAgICBtX3BhZ2VzLT5zZXQocGFnZU51bWJlciwg
cGFnZSk7CisgICAgfQorCisgICAgLy8gRmlsbCBpbiB0aGUgd2hvbGUgcGFnZSB3aXRoIHRoZSB1
bmtub3duIGdseXBoIGluZm9ybWF0aW9uLgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBH
bHlwaE1ldHJpY3NQYWdlOjpzaXplOyBpKyspCisgICAgICAgIHBhZ2UtPnNldE1ldHJpY3NGb3JJ
bmRleChpLCB1bmtub3duTWV0cmljcygpKTsKKworICAgIHJldHVybiBwYWdlOworfQorICAgIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvU2ltcGxlRm9udERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuY3BwCShyZXZpc2lvbiA1Nzk0NikKKysrIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNTgsOSArMTU4LDggQEAgdm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1HbHlwaEluaXQo
KQogICAgIEdseXBoIHplcm9XaWR0aFNwYWNlR2x5cGggPSBnbHlwaFBhZ2VaZXJvLT5nbHlwaERh
dGFGb3JDaGFyYWN0ZXIoMCkuZ2x5cGg7CiAgICAgaWYgKHplcm9XaWR0aFNwYWNlR2x5cGgpIHsK
ICAgICAgICAgaWYgKHplcm9XaWR0aFNwYWNlR2x5cGggIT0gbV9zcGFjZUdseXBoKSB7Ci0gICAg
ICAgICAgICBHbHlwaE1ldHJpY3MgbWV0cmljczsKLSAgICAgICAgICAgIG1ldHJpY3MuaG9yaXpv
bnRhbEFkdmFuY2UgPSAwOwotICAgICAgICAgICAgbV9nbHlwaFRvTWV0cmljc01hcC5zZXRNZXRy
aWNzRm9yR2x5cGgoemVyb1dpZHRoU3BhY2VHbHlwaCwgbWV0cmljcyk7CisgICAgICAgICAgICBt
X2dseXBoVG9XaWR0aE1hcC5zZXRNZXRyaWNzRm9yR2x5cGgoemVyb1dpZHRoU3BhY2VHbHlwaCwg
MCk7CisgICAgICAgICAgICBtX2dseXBoVG9Cb3VuZHNNYXAuc2V0TWV0cmljc0ZvckdseXBoKHpl
cm9XaWR0aFNwYWNlR2x5cGgsIEZsb2F0UmVjdCgpKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAg
ICAgICBMT0dfRVJST1IoIkZvbnQgbWFwcyBTUEFDRSBhbmQgWkVSTyBXSURUSCBTUEFDRSB0byB0
aGUgc2FtZSBnbHlwaC4gR2x5cGggd2lkdGggbm90IG92ZXJyaWRkZW4uIik7CiAgICAgfQpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaAkocmV2aXNpb24g
NTc5NDYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKIAogI2luY2x1ZGUgIkZvbnREYXRhLmgiCiAj
aW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2lu
Y2x1ZGUgIkdseXBoTWV0cmljc01hcC5oIgogI2luY2x1ZGUgIkdseXBoUGFnZVRyZWVOb2RlLmgi
CiAjaW5jbHVkZSAiVHlwZXNldHRpbmdGZWF0dXJlcy5oIgpAQCAtNjAsNyArNjEsNiBAQCBjbGFz
cyBTaGFyZWRCdWZmZXI7CiBjbGFzcyBTVkdGb250RGF0YTsKIAogZW51bSBQaXRjaCB7IFVua25v
d25QaXRjaCwgRml4ZWRQaXRjaCwgVmFyaWFibGVQaXRjaCB9OwotZW51bSBHbHlwaE1ldHJpY3NN
b2RlIHsgR2x5cGhCb3VuZGluZ0JveCwgR2x5cGhXaWR0aE9ubHkgfTsKIAogY2xhc3MgU2ltcGxl
Rm9udERhdGEgOiBwdWJsaWMgRm9udERhdGEgewogcHVibGljOgpAQCAtODEsOSArODEsMTAgQEAg
cHVibGljOgogICAgIGZsb2F0IHhIZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX3hIZWlnaHQ7IH0K
ICAgICB1bnNpZ25lZCB1bml0c1BlckVtKCkgY29uc3QgeyByZXR1cm4gbV91bml0c1BlckVtOyB9
CiAKLSAgICBmbG9hdCB3aWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdCB7IHJldHVybiBt
ZXRyaWNzRm9yR2x5cGgoZ2x5cGgsIEdseXBoV2lkdGhPbmx5KS5ob3Jpem9udGFsQWR2YW5jZTsg
fQotICAgIEdseXBoTWV0cmljcyBtZXRyaWNzRm9yR2x5cGgoR2x5cGgsIEdseXBoTWV0cmljc01v
ZGUgPSBHbHlwaEJvdW5kaW5nQm94KSBjb25zdDsKLSAgICBHbHlwaE1ldHJpY3MgcGxhdGZvcm1N
ZXRyaWNzRm9yR2x5cGgoR2x5cGgsIEdseXBoTWV0cmljc01vZGUpIGNvbnN0OworICAgIEZsb2F0
UmVjdCBib3VuZHNGb3JHbHlwaChHbHlwaCkgY29uc3Q7CisgICAgZmxvYXQgd2lkdGhGb3JHbHlw
aChHbHlwaCBnbHlwaCkgY29uc3Q7CisgICAgRmxvYXRSZWN0IHBsYXRmb3JtQm91bmRzRm9yR2x5
cGgoR2x5cGgpIGNvbnN0OworICAgIGZsb2F0IHBsYXRmb3JtV2lkdGhGb3JHbHlwaChHbHlwaCkg
Y29uc3Q7CiAKICAgICBmbG9hdCBzcGFjZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9zcGFjZVdp
ZHRoOyB9CiAgICAgZmxvYXQgYWRqdXN0ZWRTcGFjZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9h
ZGp1c3RlZFNwYWNlV2lkdGg7IH0KQEAgLTE2OCw3ICsxNjksOCBAQCBwcml2YXRlOgogICAgIHx8
IChPUyhXSU5ET1dTKSAmJiBQTEFURk9STShXWCkpCiAgICAgdm9pZCBpbml0R0RJRm9udCgpOwog
ICAgIHZvaWQgcGxhdGZvcm1Db21tb25EZXN0cm95KCk7Ci0gICAgR2x5cGhNZXRyaWNzIG1ldHJp
Y3NGb3JHRElHbHlwaChHbHlwaCBnbHlwaCkgY29uc3Q7CisgICAgRmxvYXRSZWN0IGJvdW5kc0Zv
ckdESUdseXBoKEdseXBoIGdseXBoKSBjb25zdDsKKyAgICBmbG9hdCB3aWR0aEZvckdESUdseXBo
KEdseXBoIGdseXBoKSBjb25zdDsKICNlbmRpZgogCiAgICAgaW50IG1fYXNjZW50OwpAQCAtMTgy
LDcgKzE4NCw4IEBAIHByaXZhdGU6CiAKICAgICBGb250UGxhdGZvcm1EYXRhIG1fcGxhdGZvcm1E
YXRhOwogCi0gICAgbXV0YWJsZSBHbHlwaE1ldHJpY3NNYXAgbV9nbHlwaFRvTWV0cmljc01hcDsK
KyAgICBtdXRhYmxlIEdseXBoTWV0cmljc01hcDxGbG9hdFJlY3Q+IG1fZ2x5cGhUb0JvdW5kc01h
cDsKKyAgICBtdXRhYmxlIEdseXBoTWV0cmljc01hcDxmbG9hdD4gbV9nbHlwaFRvV2lkdGhNYXA7
CiAKICAgICBib29sIG1fdHJlYXRBc0ZpeGVkUGl0Y2g7CiAKQEAgLTIzOCwxNiArMjQxLDI1IEBA
IHByaXZhdGU6CiAgICAgCiAgICAgCiAjaWYgIVBMQVRGT1JNKFFUKQotQUxXQVlTX0lOTElORSBH
bHlwaE1ldHJpY3MgU2ltcGxlRm9udERhdGE6Om1ldHJpY3NGb3JHbHlwaChHbHlwaCBnbHlwaCwg
R2x5cGhNZXRyaWNzTW9kZSBtZXRyaWNzTW9kZSkgY29uc3QKK0FMV0FZU19JTkxJTkUgRmxvYXRS
ZWN0IFNpbXBsZUZvbnREYXRhOjpib3VuZHNGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKIHsK
LSAgICBHbHlwaE1ldHJpY3MgbWV0cmljcyA9IG1fZ2x5cGhUb01ldHJpY3NNYXAubWV0cmljc0Zv
ckdseXBoKGdseXBoKTsKLSAgICBpZiAoKG1ldHJpY3NNb2RlID09IEdseXBoV2lkdGhPbmx5ICYm
IG1ldHJpY3MuaG9yaXpvbnRhbEFkdmFuY2UgIT0gY0dseXBoU2l6ZVVua25vd24pIHx8IChtZXRy
aWNzTW9kZSA9PSBHbHlwaEJvdW5kaW5nQm94ICYmIG1ldHJpY3MuYm91bmRpbmdCb3gud2lkdGgo
KSAhPSBjR2x5cGhTaXplVW5rbm93bikpCi0gICAgICAgIHJldHVybiBtZXRyaWNzOwotCi0gICAg
bWV0cmljcyA9IHBsYXRmb3JtTWV0cmljc0ZvckdseXBoKGdseXBoLCBtZXRyaWNzTW9kZSk7Ci0g
ICAgbV9nbHlwaFRvTWV0cmljc01hcC5zZXRNZXRyaWNzRm9yR2x5cGgoZ2x5cGgsIG1ldHJpY3Mp
OworICAgIEZsb2F0UmVjdCBib3VuZHMgPSBtX2dseXBoVG9Cb3VuZHNNYXAubWV0cmljc0Zvckds
eXBoKGdseXBoKTsKKyAgICBpZiAoYm91bmRzLndpZHRoKCkgIT0gY0dseXBoU2l6ZVVua25vd24p
CisgICAgICAgIHJldHVybiBib3VuZHM7CisgICAgYm91bmRzID0gcGxhdGZvcm1Cb3VuZHNGb3JH
bHlwaChnbHlwaCk7CisgICAgbV9nbHlwaFRvQm91bmRzTWFwLnNldE1ldHJpY3NGb3JHbHlwaChn
bHlwaCwgYm91bmRzKTsKKyAgICByZXR1cm4gYm91bmRzOworfQogCi0gICAgcmV0dXJuIG1ldHJp
Y3M7CitBTFdBWVNfSU5MSU5FIGZsb2F0IFNpbXBsZUZvbnREYXRhOjp3aWR0aEZvckdseXBoKEds
eXBoIGdseXBoKSBjb25zdAoreworICAgIGZsb2F0IHdpZHRoID0gbV9nbHlwaFRvV2lkdGhNYXAu
bWV0cmljc0ZvckdseXBoKGdseXBoKTsKKyAgICBpZiAod2lkdGggIT0gY0dseXBoU2l6ZVVua25v
d24pCisgICAgICAgIHJldHVybiB3aWR0aDsKKworICAgIHdpZHRoID0gcGxhdGZvcm1XaWR0aEZv
ckdseXBoKGdseXBoKTsKKyAgICBtX2dseXBoVG9XaWR0aE1hcC5zZXRNZXRyaWNzRm9yR2x5cGgo
Z2x5cGgsIHdpZHRoKTsKKyAgICByZXR1cm4gd2lkdGg7CiB9CiAjZW5kaWYKIApJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9TaW1wbGVGb250RGF0YUNhaXJvLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1NpbXBsZUZvbnREYXRh
Q2Fpcm8uY3BwCShyZXZpc2lvbiA1Nzk0NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vU2ltcGxlRm9udERhdGFDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNCw3ICsx
MTQsMTIgQEAgdm9pZCBTaW1wbGVGb250RGF0YTo6ZGV0ZXJtaW5lUGl0Y2goKQogICAgIG1fdHJl
YXRBc0ZpeGVkUGl0Y2ggPSBtX3BsYXRmb3JtRGF0YS5pc0ZpeGVkUGl0Y2goKTsKIH0KIAotR2x5
cGhNZXRyaWNzIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybU1ldHJpY3NGb3JHbHlwaChHbHlwaCBn
bHlwaCwgR2x5cGhNZXRyaWNzTW9kZSkgY29uc3QKK0Zsb2F0UmVjdCBTaW1wbGVGb250RGF0YTo6
cGxhdGZvcm1Cb3VuZHNGb3JHbHlwaChHbHlwaCkgY29uc3QKK3sKKyAgICByZXR1cm4gRmxvYXRS
ZWN0KCk7Cit9CisKK2Zsb2F0IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgo
R2x5cGggZ2x5cGgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG1fcGxhdGZvcm1EYXRhLm1fc2NhbGVk
Rm9udCk7CiAKQEAgLTEyNSwxMCArMTMwLDggQEAgR2x5cGhNZXRyaWNzIFNpbXBsZUZvbnREYXRh
OjpwbGF0Zm9ybU1ldAogICAgIGZsb2F0IHcgPSAoZmxvYXQpbV9zcGFjZVdpZHRoOwogICAgIGlm
IChjYWlyb19zY2FsZWRfZm9udF9zdGF0dXMobV9wbGF0Zm9ybURhdGEubV9zY2FsZWRGb250KSA9
PSBDQUlST19TVEFUVVNfU1VDQ0VTUyAmJiBleHRlbnRzLnhfYWR2YW5jZSAhPSAwKQogICAgICAg
ICB3ID0gKGZsb2F0KWV4dGVudHMueF9hZHZhbmNlOwotICAgIAotICAgIEdseXBoTWV0cmljcyBt
ZXRyaWNzOwotICAgIG1ldHJpY3MuaG9yaXpvbnRhbEFkdmFuY2UgPSB3OwotICAgIHJldHVybiBt
ZXRyaWNzOworCisgICAgcmV0dXJuIHc7ICAgIAogfQogCiB9CkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1NpbXBsZUZvbnREYXRhQ2hyb21pdW1XaW4uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2ltcGxlRm9udERh
dGFDaHJvbWl1bVdpbi5jcHAJKHJldmlzaW9uIDU3OTQ2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9TaW1wbGVGb250RGF0YUNocm9taXVtV2luLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTUxLDcgKzE1MSwxMiBAQCB2b2lkIFNpbXBsZUZvbnREYXRhOjpkZXRlcm1pbmVQ
aXRjaCgpCiAgICAgUmVsZWFzZURDKDAsIGRjKTsKIH0KIAotR2x5cGhNZXRyaWNzIFNpbXBsZUZv
bnREYXRhOjpwbGF0Zm9ybU1ldHJpY3NGb3JHbHlwaChHbHlwaCBnbHlwaCwgR2x5cGhNZXRyaWNz
TW9kZSkgY29uc3QKK0Zsb2F0UmVjdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1Cb3VuZHNGb3JH
bHlwaChHbHlwaCkgY29uc3QKK3sKKyAgICByZXR1cm4gRmxvYXRSZWN0KCk7Cit9CisKK2Zsb2F0
IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0
CiB7CiAgICAgSERDIGRjID0gR2V0REMoMCk7CiAgICAgSEdESU9CSiBvbGRGb250ID0gU2VsZWN0
T2JqZWN0KGRjLCBtX3BsYXRmb3JtRGF0YS5oZm9udCgpKTsKQEAgLTE3MCw5ICsxNzUsNyBAQCBH
bHlwaE1ldHJpY3MgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtTWV0CiAgICAgU2VsZWN0T2JqZWN0
KGRjLCBvbGRGb250KTsKICAgICBSZWxlYXNlREMoMCwgZGMpOwogCi0gICAgR2x5cGhNZXRyaWNz
IG1ldHJpY3M7Ci0gICAgbWV0cmljcy5ob3Jpem9udGFsQWR2YW5jZSA9IHN0YXRpY19jYXN0PGZs
b2F0Pih3aWR0aCk7Ci0gICAgcmV0dXJuIG1ldHJpY3M7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0
PGZsb2F0Pih3aWR0aCk7CiB9CiAKIH0gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NpbXBsZUZvbnREYXRhTGludXguY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2ltcGxlRm9u
dERhdGFMaW51eC5jcHAJKHJldmlzaW9uIDU3OTQ2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9TaW1wbGVGb250RGF0YUxpbnV4LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTcyLDcgKzE3MiwxMiBAQCB2b2lkIFNpbXBsZUZvbnREYXRhOjpkZXRlcm1pbmVQaXRjaCgpCiAg
ICAgbV90cmVhdEFzRml4ZWRQaXRjaCA9IHBsYXRmb3JtRGF0YSgpLmlzRml4ZWRQaXRjaCgpOwog
fQogCi1HbHlwaE1ldHJpY3MgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtTWV0cmljc0ZvckdseXBo
KEdseXBoIGdseXBoLCBHbHlwaE1ldHJpY3NNb2RlIC8qIG1ldHJpY3NNb2RlICovKSBjb25zdAor
RmxvYXRSZWN0IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKEdseXBoKSBj
b25zdAoreworICAgIHJldHVybiBGbG9hdFJlY3QoKTsKK30KKyAgICAKK2Zsb2F0IFNpbXBsZUZv
bnREYXRhOjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CiB7CiAgICAg
U2tBU1NFUlQoc2l6ZW9mKGdseXBoKSA9PSAyKTsgICAvLyBjb21waWxlLXRpbWUgYXNzZXJ0CiAK
QEAgLTE4Niw5ICsxOTEsNyBAQCBHbHlwaE1ldHJpY3MgU2ltcGxlRm9udERhdGE6OnBsYXRmb3Jt
TWV0CiAgICAgLy8gVGhvdWdoIFdlYktpdCBzdXBwb3J0cyBub24taW50ZWdyYWwgYWR2YW5jZXMs
IFNraWEgb25seSBzdXBwb3J0cyB0aGVtCiAgICAgLy8gZm9yICJzdWJwaXhlbCIgKGRpc3RpbmN0
IGZyb20gTENEIHN1YnBpeGVsIGFudGlhbGlhc2luZykgdGV4dCwgd2hpY2gKICAgICAvLyB3ZSBk
b24ndCB1c2UuCi0gICAgR2x5cGhNZXRyaWNzIG1ldHJpY3M7Ci0gICAgbWV0cmljcy5ob3Jpem9u
dGFsQWR2YW5jZSA9IHJvdW5kKFNrU2NhbGFyVG9GbG9hdCh3aWR0aCkpOwotICAgIHJldHVybiBt
ZXRyaWNzOworICAgIHJldHVybiByb3VuZChTa1NjYWxhclRvRmxvYXQod2lkdGgpKTsKIH0KIAog
fSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3RrL1NpbXBsZUZvbnREYXRhUGFuZ28uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3RrL1NpbXBsZUZvbnREYXRhUGFuZ28uY3BwCShyZXZpc2lvbiA1Nzk0NikK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL1NpbXBsZUZvbnREYXRhUGFuZ28uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTksNyArMTE5LDEyIEBAIHZvaWQgU2ltcGxlRm9udERhdGE6
OmRldGVybWluZVBpdGNoKCkKICAgICBtX3RyZWF0QXNGaXhlZFBpdGNoID0gbV9wbGF0Zm9ybURh
dGEuaXNGaXhlZFBpdGNoKCk7CiB9CiAKLUdseXBoTWV0cmljcyBTaW1wbGVGb250RGF0YTo6cGxh
dGZvcm1NZXRyaWNzRm9yR2x5cGgoR2x5cGggZ2x5cGgsIEdseXBoTWV0cmljc01vZGUpIGNvbnN0
CitGbG9hdFJlY3QgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQm91bmRzRm9yR2x5cGgoR2x5cGgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIEZsb2F0UmVjdCgpOworfQorCitmbG9hdCBTaW1wbGVGb250
RGF0YTo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAogewogICAgIEFT
U0VSVChtX3BsYXRmb3JtRGF0YS5tX3NjYWxlZEZvbnQpOwogCkBAIC0xMjcsMTMgKzEzMiwxMSBA
QCBHbHlwaE1ldHJpY3MgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtTWV0CiAgICAgY2Fpcm9fdGV4
dF9leHRlbnRzX3QgZXh0ZW50czsKICAgICBjYWlyb19zY2FsZWRfZm9udF9nbHlwaF9leHRlbnRz
KG1fcGxhdGZvcm1EYXRhLm1fc2NhbGVkRm9udCwgJmNnbHlwaCwgMSwgJmV4dGVudHMpOwogCi0g
ICAgZmxvYXQgdyA9IChmbG9hdCltX3NwYWNlV2lkdGg7CisgICAgZmxvYXQgd2lkdGggPSAoZmxv
YXQpbV9zcGFjZVdpZHRoOwogICAgIGlmIChjYWlyb19zY2FsZWRfZm9udF9zdGF0dXMobV9wbGF0
Zm9ybURhdGEubV9zY2FsZWRGb250KSA9PSBDQUlST19TVEFUVVNfU1VDQ0VTUyAmJiBleHRlbnRz
LnhfYWR2YW5jZSAhPSAwKQotICAgICAgICB3ID0gKGZsb2F0KWV4dGVudHMueF9hZHZhbmNlOwot
ICAgIAotICAgIEdseXBoTWV0cmljcyBtZXRyaWNzOwotICAgIG1ldHJpY3MuaG9yaXpvbnRhbEFk
dmFuY2UgPSB3OwotICAgIHJldHVybiBtZXRyaWNzOworICAgICAgICB3aWR0aCA9IChmbG9hdCll
eHRlbnRzLnhfYWR2YW5jZTsKKworICAgIHJldHVybiB3aWR0aDsgICAgCiB9CiAKIH0KSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRD
b250cm9sbGVyLmNwcAkocmV2aXNpb24gNTc5NDYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NDcs
MTIgKzU0NywxMiBAQCB2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6YWRqdXN0R2x5cGhzCiAg
ICAgICAgICAgICBtX2FkanVzdGVkQWR2YW5jZXMuYXBwZW5kKGFkdmFuY2UpOwogICAgICAgICAg
ICAgbV9hZGp1c3RlZEdseXBocy5hcHBlbmQoZ2x5cGgpOwogICAgICAgICAgICAgCi0gICAgICAg
ICAgICBHbHlwaE1ldHJpY3MgZ2x5cGhNZXRyaWNzID0gZm9udERhdGEtPm1ldHJpY3NGb3JHbHlw
aChnbHlwaCk7Ci0gICAgICAgICAgICBnbHlwaE1ldHJpY3MuYm91bmRpbmdCb3gubW92ZShnbHlw
aE9yaWdpbi54LCBnbHlwaE9yaWdpbi55KTsKLSAgICAgICAgICAgIG1fbWluR2x5cGhCb3VuZGlu
Z0JveFggPSBtaW4obV9taW5HbHlwaEJvdW5kaW5nQm94WCwgZ2x5cGhNZXRyaWNzLmJvdW5kaW5n
Qm94LngoKSk7Ci0gICAgICAgICAgICBtX21heEdseXBoQm91bmRpbmdCb3hYID0gbWF4KG1fbWF4
R2x5cGhCb3VuZGluZ0JveFgsIGdseXBoTWV0cmljcy5ib3VuZGluZ0JveC5yaWdodCgpKTsKLSAg
ICAgICAgICAgIG1fbWluR2x5cGhCb3VuZGluZ0JveFkgPSBtaW4obV9taW5HbHlwaEJvdW5kaW5n
Qm94WSwgZ2x5cGhNZXRyaWNzLmJvdW5kaW5nQm94LnkoKSk7Ci0gICAgICAgICAgICBtX21heEds
eXBoQm91bmRpbmdCb3hZID0gbWF4KG1fbWF4R2x5cGhCb3VuZGluZ0JveFksIGdseXBoTWV0cmlj
cy5ib3VuZGluZ0JveC5ib3R0b20oKSk7CisgICAgICAgICAgICBGbG9hdFJlY3QgZ2x5cGhCb3Vu
ZHMgPSBmb250RGF0YS0+Ym91bmRzRm9yR2x5cGgoZ2x5cGgpOworICAgICAgICAgICAgZ2x5cGhC
b3VuZHMubW92ZShnbHlwaE9yaWdpbi54LCBnbHlwaE9yaWdpbi55KTsKKyAgICAgICAgICAgIG1f
bWluR2x5cGhCb3VuZGluZ0JveFggPSBtaW4obV9taW5HbHlwaEJvdW5kaW5nQm94WCwgZ2x5cGhC
b3VuZHMueCgpKTsKKyAgICAgICAgICAgIG1fbWF4R2x5cGhCb3VuZGluZ0JveFggPSBtYXgobV9t
YXhHbHlwaEJvdW5kaW5nQm94WCwgZ2x5cGhCb3VuZHMucmlnaHQoKSk7CisgICAgICAgICAgICBt
X21pbkdseXBoQm91bmRpbmdCb3hZID0gbWluKG1fbWluR2x5cGhCb3VuZGluZ0JveFksIGdseXBo
Qm91bmRzLnkoKSk7CisgICAgICAgICAgICBtX21heEdseXBoQm91bmRpbmdCb3hZID0gbWF4KG1f
bWF4R2x5cGhCb3VuZGluZ0JveFksIGdseXBoQm91bmRzLmJvdHRvbSgpKTsKICAgICAgICAgICAg
IGdseXBoT3JpZ2luLnggKz0gYWR2YW5jZS53aWR0aDsKICAgICAgICAgICAgIGdseXBoT3JpZ2lu
LnkgKz0gYWR2YW5jZS5oZWlnaHQ7CiAgICAgICAgICAgICAKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhTWFjLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhTWFjLm1tCShyZXZpc2lvbiA1
Nzk0NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhTWFj
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC00MDcsNyArNDA3LDIyIEBAIHZvaWQgU2ltcGxlRm9udERh
dGE6OmRldGVybWluZVBpdGNoKCkKICAgICAgICAgICAgW25hbWUgY2FzZUluc2Vuc2l0aXZlQ29t
cGFyZTpAIk1vbm90eXBlQ29yc2l2YSJdICE9IE5TT3JkZXJlZFNhbWU7CiB9CiAKLUdseXBoTWV0
cmljcyBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1NZXRyaWNzRm9yR2x5cGgoR2x5cGggZ2x5cGgs
IEdseXBoTWV0cmljc01vZGUgbWV0cmljc01vZGUpIGNvbnN0CitGbG9hdFJlY3QgU2ltcGxlRm9u
dERhdGE6OnBsYXRmb3JtQm91bmRzRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0Cit7CisgICAg
RmxvYXRSZWN0IGJvdW5kaW5nQm94OworI2lmbmRlZiBCVUlMRElOR19PTl9USUdFUgorICAgIENH
UmVjdCBib3g7CisgICAgQ0dGb250R2V0R2x5cGhCQm94ZXMocGxhdGZvcm1EYXRhKCkuY2dGb250
KCksICZnbHlwaCwgMSwgJmJveCk7CisgICAgZmxvYXQgcG9pbnRTaXplID0gcGxhdGZvcm1EYXRh
KCkubV9zaXplOworICAgIENHRmxvYXQgc2NhbGUgPSBwb2ludFNpemUgLyB1bml0c1BlckVtKCk7
CisgICAgYm91bmRpbmdCb3ggPSBDR1JlY3RBcHBseUFmZmluZVRyYW5zZm9ybShib3gsIENHQWZm
aW5lVHJhbnNmb3JtTWFrZVNjYWxlKHNjYWxlLCAtc2NhbGUpKTsKKyAgICBpZiAobV9zeW50aGV0
aWNCb2xkT2Zmc2V0KQorICAgICAgICBib3VuZGluZ0JveC5zZXRXaWR0aChib3VuZGluZ0JveC53
aWR0aCgpICsgbV9zeW50aGV0aWNCb2xkT2Zmc2V0KTsKKyNlbmRpZgorICAgIHJldHVybiBib3Vu
ZGluZ0JveDsKK30KKworZmxvYXQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtV2lkdGhGb3JHbHlw
aChHbHlwaCBnbHlwaCkgY29uc3QKIHsKICAgICBOU0ZvbnQqIGZvbnQgPSBwbGF0Zm9ybURhdGEo
KS5mb250KCk7CiAgICAgZmxvYXQgcG9pbnRTaXplID0gcGxhdGZvcm1EYXRhKCkubV9zaXplOwpA
QCAtNDE3LDE5ICs0MzIsNyBAQCBHbHlwaE1ldHJpY3MgU2ltcGxlRm9udERhdGE6OnBsYXRmb3Jt
TWV0CiAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGNhY2hlIGdseXBoIHdpZHRocyBmb3Ig
JUAgJWYiLCBbZm9udCBkaXNwbGF5TmFtZV0sIHBvaW50U2l6ZSk7CiAgICAgICAgIGFkdmFuY2Uu
d2lkdGggPSAwOwogICAgIH0KLSAgICBHbHlwaE1ldHJpY3MgbWV0cmljczsKLSAgICBtZXRyaWNz
Lmhvcml6b250YWxBZHZhbmNlID0gYWR2YW5jZS53aWR0aCArIG1fc3ludGhldGljQm9sZE9mZnNl
dDsKLSAgICBpZiAobWV0cmljc01vZGUgPT0gR2x5cGhCb3VuZGluZ0JveCkgewotI2lmbmRlZiBC
VUlMRElOR19PTl9USUdFUgotICAgICAgICBDR1JlY3QgYm91bmRpbmdCb3g7Ci0gICAgICAgIENH
Rm9udEdldEdseXBoQkJveGVzKHBsYXRmb3JtRGF0YSgpLmNnRm9udCgpLCAmZ2x5cGgsIDEsICZi
b3VuZGluZ0JveCk7Ci0gICAgICAgIENHRmxvYXQgc2NhbGUgPSBwb2ludFNpemUgLyB1bml0c1Bl
ckVtKCk7Ci0gICAgICAgIG1ldHJpY3MuYm91bmRpbmdCb3ggPSBDR1JlY3RBcHBseUFmZmluZVRy
YW5zZm9ybShib3VuZGluZ0JveCwgQ0dBZmZpbmVUcmFuc2Zvcm1NYWtlU2NhbGUoc2NhbGUsIC1z
Y2FsZSkpOwotICAgICAgICBpZiAobV9zeW50aGV0aWNCb2xkT2Zmc2V0KQotICAgICAgICAgICAg
bWV0cmljcy5ib3VuZGluZ0JveC5zZXRXaWR0aChtZXRyaWNzLmJvdW5kaW5nQm94LndpZHRoKCkg
KyBtX3N5bnRoZXRpY0JvbGRPZmZzZXQpOwotI2VuZGlmCi0gICAgfQotICAgIHJldHVybiBtZXRy
aWNzOworICAgIHJldHVybiBhZHZhbmNlLndpZHRoICsgbV9zeW50aGV0aWNCb2xkT2Zmc2V0Owog
fQogCiAjaWYgVVNFKEFUU1VJKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
U2ltcGxlRm9udERhdGFDR1dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFDR1dpbi5jcHAJKHJldmlzaW9uIDU3OTQ2KQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFDR1dpbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEyNSwxMSArMTI1LDI2IEBAIHZvaWQgU2ltcGxlRm9udERhdGE6OnBs
YXRmb3JtQ2hhcldpZHRoSW4KICAgICAgICAgaW5pdENoYXJXaWR0aHMoKTsKICAgICB9CiB9CitG
bG9hdFJlY3QgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQm91bmRzRm9yR2x5cGgoR2x5cGggZ2x5
cGgpIGNvbnN0Cit7CisgICAgaWYgKG1fcGxhdGZvcm1EYXRhLnVzZUdESSgpKQorICAgICAgICBy
ZXR1cm4gYm91bmRzRm9yR0RJR2x5cGgoZ2x5cGgpOworCisgICAgQ0dSZWN0IGJveDsKKyAgICBD
R0ZvbnRHZXRHbHlwaEJCb3hlcyhtX3BsYXRmb3JtRGF0YS5jZ0ZvbnQoKSwgJmdseXBoLCAxLCAm
Ym94KTsKKyAgICBmbG9hdCBwb2ludFNpemUgPSBtX3BsYXRmb3JtRGF0YS5zaXplKCk7CisgICAg
Q0dGbG9hdCBzY2FsZSA9IHBvaW50U2l6ZSAvIHVuaXRzUGVyRW0oKTsKKyAgICBGbG9hdFJlY3Qg
Ym91bmRpbmdCb3ggPSBDR1JlY3RBcHBseUFmZmluZVRyYW5zZm9ybShib3gsIENHQWZmaW5lVHJh
bnNmb3JtTWFrZVNjYWxlKHNjYWxlLCAtc2NhbGUpKTsKKyAgICBpZiAobV9zeW50aGV0aWNCb2xk
T2Zmc2V0KQorICAgICAgICBib3VuZGluZ0JveC5zZXRXaWR0aChib3VuZGluZ0JveC53aWR0aCgp
ICsgbV9zeW50aGV0aWNCb2xkT2Zmc2V0KTsKIAotR2x5cGhNZXRyaWNzIFNpbXBsZUZvbnREYXRh
OjpwbGF0Zm9ybU1ldHJpY3NGb3JHbHlwaChHbHlwaCBnbHlwaCwgR2x5cGhNZXRyaWNzTW9kZSBt
ZXRyaWNzTW9kZSkgY29uc3QKKyAgICByZXR1cm4gYm91bmRpbmdCb3g7Cit9CisKK2Zsb2F0IFNp
bXBsZUZvbnREYXRhOjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CiB7
CiAgICAgaWYgKG1fcGxhdGZvcm1EYXRhLnVzZUdESSgpKQotICAgICAgIHJldHVybiBtZXRyaWNz
Rm9yR0RJR2x5cGgoZ2x5cGgpOworICAgICAgICByZXR1cm4gd2lkdGhGb3JHRElHbHlwaChnbHlw
aCk7CiAKICAgICBDR0ZvbnRSZWYgZm9udCA9IG1fcGxhdGZvcm1EYXRhLmNnRm9udCgpOwogICAg
IGZsb2F0IHBvaW50U2l6ZSA9IG1fcGxhdGZvcm1EYXRhLnNpemUoKTsKQEAgLTEzOSwxOCArMTU0
LDggQEAgR2x5cGhNZXRyaWNzIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybU1ldAogICAgIC8vIEZJ
WE1FOiBOZWVkIHRvIGFkZCByZWFsIHN1cHBvcnQgZm9yIHByaW50ZXIgZm9udHMuCiAgICAgYm9v
bCBpc1ByaW50ZXJGb250ID0gZmFsc2U7CiAgICAgd2tHZXRHbHlwaEFkdmFuY2VzKGZvbnQsIG0s
IG1faXNTeXN0ZW1Gb250LCBpc1ByaW50ZXJGb250LCBnbHlwaCwgYWR2YW5jZSk7Ci0gICAgR2x5
cGhNZXRyaWNzIG1ldHJpY3M7Ci0gICAgbWV0cmljcy5ob3Jpem9udGFsQWR2YW5jZSA9IGFkdmFu
Y2Uud2lkdGggKyBtX3N5bnRoZXRpY0JvbGRPZmZzZXQ7Ci0gICAgCi0gICAgaWYgKG1ldHJpY3NN
b2RlID09IEdseXBoQm91bmRpbmdCb3gpIHsKLSAgICAgICAgQ0dSZWN0IGJvdW5kaW5nQm94Owot
ICAgICAgICBDR0ZvbnRHZXRHbHlwaEJCb3hlcyhmb250LCAmZ2x5cGgsIDEsICZib3VuZGluZ0Jv
eCk7Ci0gICAgICAgIENHRmxvYXQgc2NhbGUgPSBwb2ludFNpemUgLyB1bml0c1BlckVtKCk7Ci0g
ICAgICAgIG1ldHJpY3MuYm91bmRpbmdCb3ggPSBDR1JlY3RBcHBseUFmZmluZVRyYW5zZm9ybShi
b3VuZGluZ0JveCwgQ0dBZmZpbmVUcmFuc2Zvcm1NYWtlU2NhbGUoc2NhbGUsIC1zY2FsZSkpOwot
ICAgICAgICBpZiAobV9zeW50aGV0aWNCb2xkT2Zmc2V0KQotICAgICAgICAgICAgbWV0cmljcy5i
b3VuZGluZ0JveC5zZXRXaWR0aChtZXRyaWNzLmJvdW5kaW5nQm94LndpZHRoKCkgKyBtX3N5bnRo
ZXRpY0JvbGRPZmZzZXQpOwotICAgIH0KLSAgICByZXR1cm4gbWV0cmljczsKKworICAgIHJldHVy
biBhZHZhbmNlLndpZHRoICsgbV9zeW50aGV0aWNCb2xkT2Zmc2V0OwogfQogCiB9CkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YUNhaXJvV2luLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0
YUNhaXJvV2luLmNwcAkocmV2aXNpb24gNTc5NDYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9TaW1wbGVGb250RGF0YUNhaXJvV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTYs
NiArOTYsMTQgQEAgdm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1DaGFyV2lkdGhJbgogICAg
IC8vIGNoYXJ3aWR0aHMgYXJlIHNldCBpbiBwbGF0Zm9ybUluaXQuCiB9CiAKK0Zsb2F0UmVjdCBT
aW1wbGVGb250RGF0YTo6cGxhdGZvcm1Cb3VuZHNGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QK
K3sKKyAgICBpZiAobV9wbGF0Zm9ybURhdGEudXNlR0RJKCkpCisgICAgICAgIHJldHVybiBib3Vu
ZHNGb3JHRElHbHlwaChnbHlwaCk7CisgICAgLy9GSVhNRTogSW1wbGVtZW50IHRoaXMKKyAgICBy
ZXR1cm4gRmxvYXRSZWN0KCk7Cit9CisgICAgCiBmbG9hdCBTaW1wbGVGb250RGF0YTo6cGxhdGZv
cm1XaWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAogewogICAgIGlmIChtX3BsYXRmb3Jt
RGF0YS51c2VHREkoKSkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBs
ZUZvbnREYXRhV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9TaW1wbGVGb250RGF0YVdpbi5jcHAJKHJldmlzaW9uIDU3OTQ2KQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFXaW4uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNzksNyArMTc5LDI0IEBAIHZvaWQgU2ltcGxlRm9udERhdGE6OmRldGVybWluZVBpdGNo
KCkKICAgICBSZWxlYXNlREMoMCwgZGMpOwogfQogCi1HbHlwaE1ldHJpY3MgU2ltcGxlRm9udERh
dGE6Om1ldHJpY3NGb3JHRElHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKK0Zsb2F0UmVjdCBTaW1w
bGVGb250RGF0YTo6Ym91bmRzRm9yR0RJR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0Cit7CisgICAg
SERDIGhkYyA9IEdldERDKDApOworICAgIFNldEdyYXBoaWNzTW9kZShoZGMsIEdNX0FEVkFOQ0VE
KTsKKyAgICBIR0RJT0JKIG9sZEZvbnQgPSBTZWxlY3RPYmplY3QoaGRjLCBtX3BsYXRmb3JtRGF0
YS5oZm9udCgpKTsKKyAgICAKKyAgICBHTFlQSE1FVFJJQ1MgZ2RpTWV0cmljczsKKyAgICBzdGF0
aWMgY29uc3QgTUFUMiBpZGVudGl0eSA9IHsgMCwgMSwgIDAsIDAsICAwLCAwLCAgMCwgMSB9Owor
ICAgIEdldEdseXBoT3V0bGluZShoZGMsIGdseXBoLCBHR09fTUVUUklDUyB8IEdHT19HTFlQSF9J
TkRFWCwgJmdkaU1ldHJpY3MsIDAsIDAsICZpZGVudGl0eSk7CisgICAgCisgICAgU2VsZWN0T2Jq
ZWN0KGhkYywgb2xkRm9udCk7CisgICAgUmVsZWFzZURDKDAsIGhkYyk7CisgICAgCisgICAgcmV0
dXJuIEZsb2F0UmVjdChnZGlNZXRyaWNzLmdtcHRHbHlwaE9yaWdpbi54LCAtZ2RpTWV0cmljcy5n
bXB0R2x5cGhPcmlnaW4ueSwKKyAgICAgICAgZ2RpTWV0cmljcy5nbUJsYWNrQm94WCArIG1fc3lu
dGhldGljQm9sZE9mZnNldCwgZ2RpTWV0cmljcy5nbUJsYWNrQm94WSk7IAorfQorICAgIAorZmxv
YXQgU2ltcGxlRm9udERhdGE6OndpZHRoRm9yR0RJR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CiB7
CiAgICAgSERDIGhkYyA9IEdldERDKDApOwogICAgIFNldEdyYXBoaWNzTW9kZShoZGMsIEdNX0FE
VkFOQ0VEKTsKQEAgLTE5MiwxMiArMjA5LDcgQEAgR2x5cGhNZXRyaWNzIFNpbXBsZUZvbnREYXRh
OjptZXRyaWNzRm9yRwogICAgIFNlbGVjdE9iamVjdChoZGMsIG9sZEZvbnQpOwogICAgIFJlbGVh
c2VEQygwLCBoZGMpOwogCi0gICAgR2x5cGhNZXRyaWNzIGdseXBoTWV0cmljczsKLSAgICBnbHlw
aE1ldHJpY3MuaG9yaXpvbnRhbEFkdmFuY2UgPSBnZGlNZXRyaWNzLmdtQ2VsbEluY1ggKyBtX3N5
bnRoZXRpY0JvbGRPZmZzZXQ7Ci0gICAgZ2x5cGhNZXRyaWNzLmJvdW5kaW5nQm94ID0gRmxvYXRS
ZWN0KGdkaU1ldHJpY3MuZ21wdEdseXBoT3JpZ2luLngsIC1nZGlNZXRyaWNzLmdtcHRHbHlwaE9y
aWdpbi55LAotICAgICAgICBnZGlNZXRyaWNzLmdtQmxhY2tCb3hYICsgbV9zeW50aGV0aWNCb2xk
T2Zmc2V0LCBnZGlNZXRyaWNzLmdtQmxhY2tCb3hZKTsKLQotICAgIHJldHVybiBnbHlwaE1ldHJp
Y3M7CisgICAgcmV0dXJuIGdkaU1ldHJpY3MuZ21DZWxsSW5jWCArIG1fc3ludGhldGljQm9sZE9m
ZnNldDsKIH0KIAogU0NSSVBUX0ZPTlRQUk9QRVJUSUVTKiBTaW1wbGVGb250RGF0YTo6c2NyaXB0
Rm9udFByb3BlcnRpZXMoKSBjb25zdApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vVW5pc2NyaWJlQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vVW5pc2NyaWJlQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDU3OTQ2KQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vVW5pc2NyaWJlQ29udHJvbGxlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM4MCwxMiArMzgwLDEyIEBAIGJvb2wgVW5pc2NyaWJlQ29udHJv
bGxlcjo6c2hhcGVBbmRQbGFjZUkKICAgICAgICAgICAgIGdseXBoQnVmZmVyLT5hZGQoZ2x5cGgs
IGZvbnREYXRhLCBhZHZhbmNlLCAmc2l6ZSk7CiAgICAgICAgIH0KIAotICAgICAgICBHbHlwaE1l
dHJpY3MgZ2x5cGhNZXRyaWNzID0gZm9udERhdGEtPm1ldHJpY3NGb3JHbHlwaChnbHlwaCk7Ci0g
ICAgICAgIGdseXBoTWV0cmljcy5ib3VuZGluZ0JveC5tb3ZlKG1fZ2x5cGhPcmlnaW4ueCgpLCBt
X2dseXBoT3JpZ2luLnkoKSk7Ci0gICAgICAgIG1fbWluR2x5cGhCb3VuZGluZ0JveFggPSBtaW4o
bV9taW5HbHlwaEJvdW5kaW5nQm94WCwgZ2x5cGhNZXRyaWNzLmJvdW5kaW5nQm94LngoKSk7Ci0g
ICAgICAgIG1fbWF4R2x5cGhCb3VuZGluZ0JveFggPSBtYXgobV9tYXhHbHlwaEJvdW5kaW5nQm94
WCwgZ2x5cGhNZXRyaWNzLmJvdW5kaW5nQm94LnJpZ2h0KCkpOwotICAgICAgICBtX21pbkdseXBo
Qm91bmRpbmdCb3hZID0gbWluKG1fbWluR2x5cGhCb3VuZGluZ0JveFksIGdseXBoTWV0cmljcy5i
b3VuZGluZ0JveC55KCkpOwotICAgICAgICBtX21heEdseXBoQm91bmRpbmdCb3hZID0gbWF4KG1f
bWF4R2x5cGhCb3VuZGluZ0JveFksIGdseXBoTWV0cmljcy5ib3VuZGluZ0JveC5ib3R0b20oKSk7
CisgICAgICAgIEZsb2F0UmVjdCBnbHlwaEJvdW5kcyA9IGZvbnREYXRhLT5ib3VuZHNGb3JHbHlw
aChnbHlwaCk7CisgICAgICAgIGdseXBoQm91bmRzLm1vdmUobV9nbHlwaE9yaWdpbi54KCksIG1f
Z2x5cGhPcmlnaW4ueSgpKTsKKyAgICAgICAgbV9taW5HbHlwaEJvdW5kaW5nQm94WCA9IG1pbiht
X21pbkdseXBoQm91bmRpbmdCb3hYLCBnbHlwaEJvdW5kcy54KCkpOworICAgICAgICBtX21heEds
eXBoQm91bmRpbmdCb3hYID0gbWF4KG1fbWF4R2x5cGhCb3VuZGluZ0JveFgsIGdseXBoQm91bmRz
LnJpZ2h0KCkpOworICAgICAgICBtX21pbkdseXBoQm91bmRpbmdCb3hZID0gbWluKG1fbWluR2x5
cGhCb3VuZGluZ0JveFksIGdseXBoQm91bmRzLnkoKSk7CisgICAgICAgIG1fbWF4R2x5cGhCb3Vu
ZGluZ0JveFkgPSBtYXgobV9tYXhHbHlwaEJvdW5kaW5nQm94WSwgZ2x5cGhCb3VuZHMuYm90dG9t
KCkpOwogICAgICAgICBtX2dseXBoT3JpZ2luLm1vdmUoYWR2YW5jZSArIG9mZnNldFgsIC1vZmZz
ZXRZKTsKIAogICAgICAgICAvLyBNdXRhdGUgdGhlIGdseXBoIGFycmF5IHRvIGNvbnRhaW4gb3Vy
IGFsdGVyZWQgYWR2YW5jZXMuCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNl
L1NpbXBsZUZvbnREYXRhV2luY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luY2UvU2ltcGxlRm9udERhdGFXaW5jZS5jcHAJKHJldmlzaW9uIDU3OTQ2KQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9TaW1wbGVGb250RGF0YVdpbmNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTMxLDYgKzEzMSwxMSBAQCB2b2lkIFNpbXBsZUZvbnREYXRh
OjpkZXRlcm1pbmVQaXRjaCgpCiAgICAgbV90cmVhdEFzRml4ZWRQaXRjaCA9ICEodG0udG1QaXRj
aEFuZEZhbWlseSAmIFRNUEZfRklYRURfUElUQ0gpOwogfQogCitGbG9hdFJlY3QgU2ltcGxlRm9u
dERhdGE6OnBsYXRmb3JtQm91bmRzRm9yR2x5cGgoR2x5cGgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IEZsb2F0UmVjdCgpOworfQorICAgIAogZmxvYXQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtV2lk
dGhGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKIHsKICAgICBpZiAobV9wbGF0Zm9ybURhdGEu
aXNEaXNhYmxlZCgpKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9TaW1wbGVG
b250RGF0YVd4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4
L1NpbXBsZUZvbnREYXRhV3guY3BwCShyZXZpc2lvbiA1Nzk0NikKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd3gvU2ltcGxlRm9udERhdGFXeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEx
MiwxOSArMTEyLDIyIEBAIHZvaWQgU2ltcGxlRm9udERhdGE6OmRldGVybWluZVBpdGNoKCkKICAg
ICAgICAgbV90cmVhdEFzRml4ZWRQaXRjaCA9IGZhbHNlOwogfQogCi1HbHlwaE1ldHJpY3MgU2lt
cGxlRm9udERhdGE6OnBsYXRmb3JtTWV0cmljc0ZvckdseXBoKEdseXBoIGdseXBoLCBHbHlwaE1l
dHJpY3NNb2RlKSBjb25zdAorRmxvYXRSZWN0IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUJvdW5k
c0ZvckdseXBoKEdseXBoKSBjb25zdAoreworICAgIHJldHVybiBGbG9hdFJlY3QoKTsKK30KKwor
ZmxvYXQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtV2lkdGhGb3JHbHlwaChHbHlwaCBnbHlwaCkg
Y29uc3QKIHsKLSAgICBHbHlwaE1ldHJpY3MgbWV0cmljczsKICNpZiBfX1dYTVNXX18KICAgICAv
LyB1bmRlciBXaW5kb3dzIC8gd3hNU1cgd2UgY3VycmVudGx5IGFsd2F5cyB1c2UgR0RJIGZvbnRz
LgotICAgIG1ldHJpY3MuaG9yaXpvbnRhbEFkdmFuY2UgPSB3aWR0aEZvckdESUdseXBoKGdseXBo
KTsKKyAgICByZXR1cm4gd2lkdGhGb3JHRElHbHlwaChnbHlwaCk7CiAjZWxzZQogICAgIC8vIFRP
RE86IGZpeCB0aGlzISBNYWtlIEdldFRleHRFeHRlbnRzIGEgbWV0aG9kIG9mIHd4Rm9udCBpbiAy
LjkKICAgICBpbnQgd2lkdGggPSAxMDsKICAgICBHZXRUZXh0RXh0ZW50KCptX3BsYXRmb3JtRGF0
YS5mb250KCksICh3eENoYXIpZ2x5cGgsICZ3aWR0aCwgTlVMTCk7Ci0gICAgbWV0cmljcy5ob3Jp
em9udGFsQWR2YW5jZSA9IHdpZHRoOworICAgIHJldHVybiB3aWR0aDsKICNlbmRpZgotICAgIHJl
dHVybiBtZXRyaWNzOwogfQogCiAjaWYgT1MoV0lORE9XUykK
</data>
<flag name="review"
          id="38017"
          type_id="1"
          status="+"
          setter="mitz"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54392</attachid>
            <date>2010-04-27 00:13:37 -0700</date>
            <delta_ts>2010-04-28 20:04:14 -0700</delta_ts>
            <desc>Patch to further reduce memory use</desc>
            <filename>7855777-ZWS.diff</filename>
            <type>text/plain</type>
            <size>3191</size>
            <attacher>mitz</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuY3BwCShy
ZXZpc2lvbiA1ODI2MikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERh
dGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Miw2ICs5Miw3IEBAIFNpbXBsZUZvbnREYXRhOjpT
aW1wbGVGb250RGF0YShjb25zdCBGb24KIAogICAgICAgICAvLyBGSVhNRTogaXMgdGhlcmUgYSB3
YXkgd2UgY2FuIGdldCB0aGUgc3BhY2UgZ2x5cGggZnJvbSB0aGUgU1ZHR2x5cGhJZGVudGlmaWVy
IGFib3ZlPwogICAgICAgICBtX3NwYWNlR2x5cGggPSAwOworICAgICAgICBtX3plcm9XaWR0aFNw
YWNlR2x5cGggPSAwOwogICAgICAgICBkZXRlcm1pbmVQaXRjaCgpOwogICAgICAgICBtX2FkanVz
dGVkU3BhY2VXaWR0aCA9IHJvdW5kZihtX3NwYWNlV2lkdGgpOwogICAgICAgICBtX21pc3NpbmdH
bHlwaERhdGEuZm9udERhdGEgPSB0aGlzOwpAQCAtMTM2LDYgKzEzNyw3IEBAIHZvaWQgU2ltcGxl
Rm9udERhdGE6OnBsYXRmb3JtR2x5cGhJbml0KCkKICAgICAgICAgbV9zcGFjZVdpZHRoID0gMDsK
ICAgICAgICAgbV9hZGp1c3RlZFNwYWNlV2lkdGggPSAwOwogICAgICAgICBkZXRlcm1pbmVQaXRj
aCgpOworICAgICAgICBtX3plcm9XaWR0aFNwYWNlR2x5cGggPSAwOwogICAgICAgICBtX21pc3Np
bmdHbHlwaERhdGEuZm9udERhdGEgPSB0aGlzOwogICAgICAgICBtX21pc3NpbmdHbHlwaERhdGEu
Z2x5cGggPSAwOwogICAgICAgICByZXR1cm47CkBAIC0xNTUsMTMgKzE1NywxMCBAQCB2b2lkIFNp
bXBsZUZvbnREYXRhOjpwbGF0Zm9ybUdseXBoSW5pdCgpCiAgICAgLy8gU2VlIDxodHRwOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzE3OD4KICAgICAvLyBBc2sgZm9yIHRoZSBn
bHlwaCBmb3IgMCB0byBhdm9pZCBwYWdpbmcgaW4gWkVSTyBXSURUSCBTUEFDRS4gQ29udHJvbCBj
aGFyYWN0ZXJzLCBpbmNsdWRpbmcgMCwKICAgICAvLyBhcmUgbWFwcGVkIHRvIHRoZSBaRVJPIFdJ
RFRIIFNQQUNFIGdseXBoLgotICAgIEdseXBoIHplcm9XaWR0aFNwYWNlR2x5cGggPSBnbHlwaFBh
Z2VaZXJvLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoMCkuZ2x5cGg7Ci0gICAgaWYgKHplcm9XaWR0
aFNwYWNlR2x5cGgpIHsKLSAgICAgICAgaWYgKHplcm9XaWR0aFNwYWNlR2x5cGggIT0gbV9zcGFj
ZUdseXBoKSB7Ci0gICAgICAgICAgICBtX2dseXBoVG9XaWR0aE1hcC5zZXRNZXRyaWNzRm9yR2x5
cGgoemVyb1dpZHRoU3BhY2VHbHlwaCwgMCk7Ci0gICAgICAgICAgICBtX2dseXBoVG9Cb3VuZHNN
YXAuc2V0TWV0cmljc0ZvckdseXBoKHplcm9XaWR0aFNwYWNlR2x5cGgsIEZsb2F0UmVjdCgpKTsK
LSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBMT0dfRVJST1IoIkZvbnQgbWFwcyBTUEFDRSBh
bmQgWkVSTyBXSURUSCBTUEFDRSB0byB0aGUgc2FtZSBnbHlwaC4gR2x5cGggd2lkdGggbm90IG92
ZXJyaWRkZW4uIik7CisgICAgbV96ZXJvV2lkdGhTcGFjZUdseXBoID0gZ2x5cGhQYWdlWmVyby0+
Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKDApLmdseXBoOworICAgIGlmIChtX3plcm9XaWR0aFNwYWNl
R2x5cGggPT0gbV9zcGFjZUdseXBoKSB7CisgICAgICAgIG1femVyb1dpZHRoU3BhY2VHbHlwaCA9
IDA7CisgICAgICAgIExPR19FUlJPUigiRm9udCBtYXBzIFNQQUNFIGFuZCBaRVJPIFdJRFRIIFNQ
QUNFIHRvIHRoZSBzYW1lIGdseXBoLiBHbHlwaCB3aWR0aCB3aWxsIG5vdCBiZSBvdmVycmlkZGVu
LiIpOwogICAgIH0KIAogICAgIG1fbWlzc2luZ0dseXBoRGF0YS5mb250RGF0YSA9IHRoaXM7Cklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oCShyZXZpc2lv
biA1ODI2MikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaAko
d29ya2luZyBjb3B5KQpAQCAtMjAwLDYgKzIwMCw4IEBAIHByaXZhdGU6CiAgICAgZmxvYXQgbV9z
cGFjZVdpZHRoOwogICAgIGZsb2F0IG1fYWRqdXN0ZWRTcGFjZVdpZHRoOwogCisgICAgR2x5cGgg
bV96ZXJvV2lkdGhTcGFjZUdseXBoOworCiAgICAgR2x5cGhEYXRhIG1fbWlzc2luZ0dseXBoRGF0
YTsKIAogICAgIG11dGFibGUgU2ltcGxlRm9udERhdGEqIG1fc21hbGxDYXBzRm9udERhdGE7CkBA
IC0yNDMsOSArMjQ1LDEzIEBAIHByaXZhdGU6CiAjaWYgIVBMQVRGT1JNKFFUKQogQUxXQVlTX0lO
TElORSBGbG9hdFJlY3QgU2ltcGxlRm9udERhdGE6OmJvdW5kc0ZvckdseXBoKEdseXBoIGdseXBo
KSBjb25zdAogeworICAgIGlmIChnbHlwaCA9PSBtX3plcm9XaWR0aFNwYWNlR2x5cGggJiYgZ2x5
cGgpCisgICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKwogICAgIEZsb2F0UmVjdCBib3VuZHMg
PSBtX2dseXBoVG9Cb3VuZHNNYXAubWV0cmljc0ZvckdseXBoKGdseXBoKTsKICAgICBpZiAoYm91
bmRzLndpZHRoKCkgIT0gY0dseXBoU2l6ZVVua25vd24pCiAgICAgICAgIHJldHVybiBib3VuZHM7
CisKICAgICBib3VuZHMgPSBwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKGdseXBoKTsKICAgICBtX2ds
eXBoVG9Cb3VuZHNNYXAuc2V0TWV0cmljc0ZvckdseXBoKGdseXBoLCBib3VuZHMpOwogICAgIHJl
dHVybiBib3VuZHM7CkBAIC0yNTMsNiArMjU5LDkgQEAgQUxXQVlTX0lOTElORSBGbG9hdFJlY3Qg
U2ltcGxlRm9udERhdGE6OgogCiBBTFdBWVNfSU5MSU5FIGZsb2F0IFNpbXBsZUZvbnREYXRhOjp3
aWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAogeworICAgIGlmIChnbHlwaCA9PSBtX3pl
cm9XaWR0aFNwYWNlR2x5cGggJiYgZ2x5cGgpCisgICAgICAgIHJldHVybiAwOworCiAgICAgZmxv
YXQgd2lkdGggPSBtX2dseXBoVG9XaWR0aE1hcC5tZXRyaWNzRm9yR2x5cGgoZ2x5cGgpOwogICAg
IGlmICh3aWR0aCAhPSBjR2x5cGhTaXplVW5rbm93bikKICAgICAgICAgcmV0dXJuIHdpZHRoOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54665</attachid>
            <date>2010-04-28 20:04:14 -0700</date>
            <delta_ts>2010-04-28 20:06:42 -0700</delta_ts>
            <desc>Don’t store the width and bounds of the ZERO WIDTH SPACE glyph in the metrics maps</desc>
            <filename>7855777_r1.diff</filename>
            <type>text/plain</type>
            <size>4676</size>
            <attacher>mitz</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1ODQ2NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjQgQEAKKzIwMTAtMDQtMjggIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3Jl
IG9mIDxyZGFyOi8vcHJvYmxlbS83ODU1Nzc3PiBSRUdSRVNTSU9OOiBNZW1vcnkgdXNhZ2UgaW5j
cmVhc2UgY2F1c2VkIGJ5IHN0b3JpbmcgZ2x5cGggYm91bmRzIGluIEdseXBoTWV0cmljc01hcAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzc5MzYKKwor
ICAgICAgICBBc3NpZ25pbmcgemVybyB3aWR0aCBhbmQgZW1wdHkgYm91bmRzIHRvIHRoZSBaRVJP
IFdJRFRIIFNQQUNFIGdseXBoIG9mdGVuIGFsbG9jYXRlcyBhIHdpZHRoIG1hcAorICAgICAgICBw
YWdlIGFuZCBhIGJvdW5kcyBtYXAgcGFnZSBmb3IgdGhlIGdseXBoLCBlYWNoIG9mIHdoaWNoIHBh
Z2VzIGNvbnRhaW5zIDI1NSB1bnVzZWQgZW50cmllcy4gU2F2ZQorICAgICAgICB0aGlzIHNwYWNl
IGJ5IG5vdCBzdG9yaW5nIHRoZSB6ZXJvIHdpZHRoIGFuZCBlbXB0eSBib3VuZHMgaW4gdGhlIG1l
dHJpY3MgbWFwcy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRh
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpTaW1wbGVGb250RGF0YSk6
IEluaXRpYWxpemUgbV96ZXJvV2lkdGhTcGFjZUdseXBoLgorICAgICAgICAoV2ViQ29yZTo6U2lt
cGxlRm9udERhdGE6OnBsYXRmb3JtR2x5cGhJbml0KTogU2V0IG1femVyb1dpZHRoU3BhY2VHbHlw
aC4gRG9u4oCZdCBjcmVhdCBlbnRyaWVzCisgICAgICAgIGZvciB0aGUgWkVSTyBXSURUSCBTUEFD
RSBnbHlwaCBpbiB0aGUgd2lkdGggbWFwIGFuZCBpbiB0aGUgYm91bmRzIG1hcC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6
U2ltcGxlRm9udERhdGE6OmJvdW5kc0ZvckdseXBoKTogUmV0dXJuIGVtcHR5IGJvdW5kcyBmb3Ig
dGhlIFpFUk8gV0lEVEggU1BBQ0UgZ2x5cGgKKyAgICAgICAgd2l0aG91dCBjb25zdWx0aW5nIHRo
ZSBib3VuZHMgbWFwLgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OndpZHRoRm9y
R2x5cGgpOiBSZXR1cm4gemVybyBmb3IgdGhlIFpFUk8gV0lEVEggU1BBQ0UgZ2x5cGggd2l0aG91
dAorICAgICAgICBjb25zdWx0aW5nIHRoZSB3aWR0aCBtYXAuCisKIDIwMTAtMDQtMjggIE1pa2Ug
VGhvbGUgIDxtdGhvbGVAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE1hcmsgUm93
ZS4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuY3Bw
CShyZXZpc2lvbiA1ODQ2NCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9u
dERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Miw2ICs5Miw3IEBAIFNpbXBsZUZvbnREYXRh
OjpTaW1wbGVGb250RGF0YShjb25zdCBGb24KIAogICAgICAgICAvLyBGSVhNRTogaXMgdGhlcmUg
YSB3YXkgd2UgY2FuIGdldCB0aGUgc3BhY2UgZ2x5cGggZnJvbSB0aGUgU1ZHR2x5cGhJZGVudGlm
aWVyIGFib3ZlPwogICAgICAgICBtX3NwYWNlR2x5cGggPSAwOworICAgICAgICBtX3plcm9XaWR0
aFNwYWNlR2x5cGggPSAwOwogICAgICAgICBkZXRlcm1pbmVQaXRjaCgpOwogICAgICAgICBtX2Fk
anVzdGVkU3BhY2VXaWR0aCA9IHJvdW5kZihtX3NwYWNlV2lkdGgpOwogICAgICAgICBtX21pc3Np
bmdHbHlwaERhdGEuZm9udERhdGEgPSB0aGlzOwpAQCAtMTM2LDYgKzEzNyw3IEBAIHZvaWQgU2lt
cGxlRm9udERhdGE6OnBsYXRmb3JtR2x5cGhJbml0KCkKICAgICAgICAgbV9zcGFjZVdpZHRoID0g
MDsKICAgICAgICAgbV9hZGp1c3RlZFNwYWNlV2lkdGggPSAwOwogICAgICAgICBkZXRlcm1pbmVQ
aXRjaCgpOworICAgICAgICBtX3plcm9XaWR0aFNwYWNlR2x5cGggPSAwOwogICAgICAgICBtX21p
c3NpbmdHbHlwaERhdGEuZm9udERhdGEgPSB0aGlzOwogICAgICAgICBtX21pc3NpbmdHbHlwaERh
dGEuZ2x5cGggPSAwOwogICAgICAgICByZXR1cm47CkBAIC0xNTUsMTMgKzE1NywxMCBAQCB2b2lk
IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUdseXBoSW5pdCgpCiAgICAgLy8gU2VlIDxodHRwOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzE3OD4KICAgICAvLyBBc2sgZm9yIHRo
ZSBnbHlwaCBmb3IgMCB0byBhdm9pZCBwYWdpbmcgaW4gWkVSTyBXSURUSCBTUEFDRS4gQ29udHJv
bCBjaGFyYWN0ZXJzLCBpbmNsdWRpbmcgMCwKICAgICAvLyBhcmUgbWFwcGVkIHRvIHRoZSBaRVJP
IFdJRFRIIFNQQUNFIGdseXBoLgotICAgIEdseXBoIHplcm9XaWR0aFNwYWNlR2x5cGggPSBnbHlw
aFBhZ2VaZXJvLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoMCkuZ2x5cGg7Ci0gICAgaWYgKHplcm9X
aWR0aFNwYWNlR2x5cGgpIHsKLSAgICAgICAgaWYgKHplcm9XaWR0aFNwYWNlR2x5cGggIT0gbV9z
cGFjZUdseXBoKSB7Ci0gICAgICAgICAgICBtX2dseXBoVG9XaWR0aE1hcC5zZXRNZXRyaWNzRm9y
R2x5cGgoemVyb1dpZHRoU3BhY2VHbHlwaCwgMCk7Ci0gICAgICAgICAgICBtX2dseXBoVG9Cb3Vu
ZHNNYXAuc2V0TWV0cmljc0ZvckdseXBoKHplcm9XaWR0aFNwYWNlR2x5cGgsIEZsb2F0UmVjdCgp
KTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBMT0dfRVJST1IoIkZvbnQgbWFwcyBTUEFD
RSBhbmQgWkVSTyBXSURUSCBTUEFDRSB0byB0aGUgc2FtZSBnbHlwaC4gR2x5cGggd2lkdGggbm90
IG92ZXJyaWRkZW4uIik7CisgICAgbV96ZXJvV2lkdGhTcGFjZUdseXBoID0gZ2x5cGhQYWdlWmVy
by0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKDApLmdseXBoOworICAgIGlmIChtX3plcm9XaWR0aFNw
YWNlR2x5cGggPT0gbV9zcGFjZUdseXBoKSB7CisgICAgICAgIG1femVyb1dpZHRoU3BhY2VHbHlw
aCA9IDA7CisgICAgICAgIExPR19FUlJPUigiRm9udCBtYXBzIFNQQUNFIGFuZCBaRVJPIFdJRFRI
IFNQQUNFIHRvIHRoZSBzYW1lIGdseXBoLiBHbHlwaCB3aWR0aCB3aWxsIG5vdCBiZSBvdmVycmlk
ZGVuLiIpOwogICAgIH0KIAogICAgIG1fbWlzc2luZ0dseXBoRGF0YS5mb250RGF0YSA9IHRoaXM7
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oCShyZXZp
c2lvbiA1ODQ2NCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEu
aAkod29ya2luZyBjb3B5KQpAQCAtMjAwLDYgKzIwMCw4IEBAIHByaXZhdGU6CiAgICAgZmxvYXQg
bV9zcGFjZVdpZHRoOwogICAgIGZsb2F0IG1fYWRqdXN0ZWRTcGFjZVdpZHRoOwogCisgICAgR2x5
cGggbV96ZXJvV2lkdGhTcGFjZUdseXBoOworCiAgICAgR2x5cGhEYXRhIG1fbWlzc2luZ0dseXBo
RGF0YTsKIAogICAgIG11dGFibGUgU2ltcGxlRm9udERhdGEqIG1fc21hbGxDYXBzRm9udERhdGE7
CkBAIC0yNDMsOSArMjQ1LDEzIEBAIHByaXZhdGU6CiAjaWYgIVBMQVRGT1JNKFFUKQogQUxXQVlT
X0lOTElORSBGbG9hdFJlY3QgU2ltcGxlRm9udERhdGE6OmJvdW5kc0ZvckdseXBoKEdseXBoIGds
eXBoKSBjb25zdAogeworICAgIGlmIChnbHlwaCA9PSBtX3plcm9XaWR0aFNwYWNlR2x5cGggJiYg
Z2x5cGgpCisgICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKwogICAgIEZsb2F0UmVjdCBib3Vu
ZHMgPSBtX2dseXBoVG9Cb3VuZHNNYXAubWV0cmljc0ZvckdseXBoKGdseXBoKTsKICAgICBpZiAo
Ym91bmRzLndpZHRoKCkgIT0gY0dseXBoU2l6ZVVua25vd24pCiAgICAgICAgIHJldHVybiBib3Vu
ZHM7CisKICAgICBib3VuZHMgPSBwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKGdseXBoKTsKICAgICBt
X2dseXBoVG9Cb3VuZHNNYXAuc2V0TWV0cmljc0ZvckdseXBoKGdseXBoLCBib3VuZHMpOwogICAg
IHJldHVybiBib3VuZHM7CkBAIC0yNTMsNiArMjU5LDkgQEAgQUxXQVlTX0lOTElORSBGbG9hdFJl
Y3QgU2ltcGxlRm9udERhdGE6OgogCiBBTFdBWVNfSU5MSU5FIGZsb2F0IFNpbXBsZUZvbnREYXRh
Ojp3aWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAogeworICAgIGlmIChnbHlwaCA9PSBt
X3plcm9XaWR0aFNwYWNlR2x5cGggJiYgZ2x5cGgpCisgICAgICAgIHJldHVybiAwOworCiAgICAg
ZmxvYXQgd2lkdGggPSBtX2dseXBoVG9XaWR0aE1hcC5tZXRyaWNzRm9yR2x5cGgoZ2x5cGgpOwog
ICAgIGlmICh3aWR0aCAhPSBjR2x5cGhTaXplVW5rbm93bikKICAgICAgICAgcmV0dXJuIHdpZHRo
Owo=
</data>
<flag name="review"
          id="38681"
          type_id="1"
          status="+"
          setter="adele"
    />
          </attachment>
      

    </bug>

</bugzilla>