<?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>101269</bug_id>
          
          <creation_ts>2012-11-05 15:36:04 -0800</creation_ts>
          <short_desc>Optimized kerning and ligatures using caching</short_desc>
          <delta_ts>2012-11-08 11:06:20 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Geoffrey Garen">ggaren</reporter>
          <assigned_to name="Geoffrey Garen">ggaren</assigned_to>
          <cc>ap</cc>
    
    <cc>bdakin</cc>
    
    <cc>eric</cc>
    
    <cc>hyatt</cc>
    
    <cc>mitz</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>slewis</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>758962</commentid>
    <comment_count>0</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-11-05 15:36:04 -0800</bug_when>
    <thetext>Optimized kerning and ligatures using caching</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759153</commentid>
    <comment_count>1</comment_count>
      <attachid>172466</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-11-05 18:51:11 -0800</bug_when>
    <thetext>Created attachment 172466
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759162</commentid>
    <comment_count>2</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-11-05 19:02:10 -0800</bug_when>
    <thetext>What&apos;s the memory impact of this cache on some common pages?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759178</commentid>
    <comment_count>3</comment_count>
      <attachid>172466</attachid>
    <who name="">mitz</who>
    <bug_when>2012-11-05 19:30:34 -0800</bug_when>
    <thetext>Comment on attachment 172466
Patch

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

&gt; Source/WebCore/platform/graphics/WidthCache.h:2
&gt; + * Copyright (C) 2013 Apple Inc. All rights reserved.

It is still 2012.

&gt; Source/WebCore/platform/graphics/WidthCache.h:8
&gt; + *

Please use the BSD-style license header.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759223</commentid>
    <comment_count>4</comment_count>
      <attachid>172466</attachid>
    <who name="">mitz</who>
    <bug_when>2012-11-05 21:15:23 -0800</bug_when>
    <thetext>Comment on attachment 172466
Patch

The rest of the patch looks great! Is Xcode the only build system that needs to be told of the new header file?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759339</commentid>
    <comment_count>5</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-11-06 00:24:24 -0800</bug_when>
    <thetext>&gt; What&apos;s the memory impact of this cache on some common pages?

Notwithstanding what seems like a bug in how membuster3 measures &quot;End&quot;, this patch looks like no significant change.

Here are the full results from membuster3:

NO patch:

****************************************************************************************************
Run #	   Process	Max		Mean		End
****************************************************************************************************
Run 1:
	    Safari	14.83 MB	10.92 MB	12.39 MB
	WebProcess	578.16 MB	280.24 MB	183.95 MB
	     Total	593.00 MB	291.16 MB	196.34 MB
Run 2:
	    Safari	14.77 MB	11.00 MB	7.10 MB
	WebProcess	571.30 MB	281.36 MB	5.91 MB
	     Total	586.07 MB	292.36 MB	13.02 MB
Run 3:
	    Safari	14.75 MB	10.94 MB	12.36 MB
	WebProcess	571.87 MB	282.98 MB	347.13 MB
	     Total	586.62 MB	293.92 MB	359.49 MB
****************************************************************************************************
Mean (Confidence)	Minimum Run	Statistic
****************************************************************************************************
292.48 MB +/- 0.54%	291.16 MB	Mean Allocations
588.56 MB +/- 0.74%	586.07 MB	Max Allocations
189.62 MB +/- 103.44%	13.02 MB	End Allocations
****************************************************************************************************

YES patch:

****************************************************************************************************
Run #	   Process	Max		Mean		End
****************************************************************************************************
Run 1:
	    Safari	14.61 MB	10.93 MB	12.63 MB
	WebProcess	576.99 MB	283.67 MB	494.06 MB
	     Total	591.59 MB	294.60 MB	506.69 MB
Run 2:
	    Safari	14.59 MB	10.99 MB	7.35 MB
	WebProcess	582.06 MB	282.56 MB	63.48 MB
	     Total	596.66 MB	293.55 MB	70.84 MB
Run 3:
	    Safari	14.49 MB	10.95 MB	10.48 MB
	WebProcess	580.75 MB	281.35 MB	409.96 MB
	     Total	595.23 MB	292.30 MB	420.44 MB
****************************************************************************************************
Mean (Confidence)	Minimum Run	Statistic
****************************************************************************************************
293.48 MB +/- 0.45%	292.30 MB	Mean Allocations
594.49 MB +/- 0.50%	591.59 MB	Max Allocations
332.66 MB +/- 78.51%	70.84 MB	End Allocations
****************************************************************************************************</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759799</commentid>
    <comment_count>6</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-11-06 10:02:19 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; &gt; What&apos;s the memory impact of this cache on some common pages?
&gt; 
&gt; Notwithstanding what seems like a bug in how membuster3 measures &quot;End&quot;, this patch looks like no significant change.

Hmm, if I edit that down:
NO patch:
    WebProcess    578.16 MB    280.24 MB    183.95 MB
    WebProcess    571.30 MB    281.36 MB    5.91 MB
    WebProcess    571.87 MB    282.98 MB    347.13 MB

YES patch:
    WebProcess    576.99 MB    283.67 MB    494.06 MB
    WebProcess    582.06 MB    282.56 MB    63.48 MB
    WebProcess    580.75 MB    281.35 MB    409.96 MB

The &apos;end&apos; results are all higher with the patch.

Can you instrument your cache specifically to find out how much memory it adds?

Simon</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759910</commentid>
    <comment_count>7</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-11-06 11:27:07 -0800</bug_when>
    <thetext>&gt; The &apos;end&apos; results are all higher with the patch.

Something&apos;s broken about the &apos;end&apos; results. They report 100% variance (!). This cache can&apos;t effect them because it gets deleted when you close the tab.

&gt; Can you instrument your cache specifically to find out how much memory it adds?

Sure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>760181</commentid>
    <comment_count>8</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-11-06 16:22:39 -0800</bug_when>
    <thetext>Some instrumented statistics on the cache:
apple.com: 5kB
wikipedia.org: 15kB
apple.com/store: 36kB
cnn.com: 36kB
nytimes.com: 81kB
nbcnews.com article: 92kB
nytimes.com article: 99kB
http://en.wikipedia.org/wiki/Main_Page: 120kB
latimes.com article: 213kB
cnn.com article: 220kB
http://en.wikipedia.org/wiki/Steve_jobs: 1MB

The wikipedia article grows to a 1MB cache because it performs 16000 layouts during load. Without the cache, those layouts spend 699ms kerning and legating 251195 text runs; with it, they spend 260ms kerning and legating 82605 text runs. I believe the speed is worth the memory in this case. (Of course, the real answer is that we shouldn&apos;t layout wikipedia pages 16000 times. I&apos;ll file a bug about that.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>760184</commentid>
    <comment_count>9</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-11-06 16:25:05 -0800</bug_when>
    <thetext>&gt; &gt; Source/WebCore/platform/graphics/WidthCache.h:2
&gt; &gt; + * Copyright (C) 2013 Apple Inc. All rights reserved.
&gt; 
&gt; It is still 2012.

I accept your optimism about when this patch will be finished ;).

&gt; &gt; Source/WebCore/platform/graphics/WidthCache.h:8
&gt; &gt; + *
&gt; 
&gt; Please use the BSD-style license header.

Will do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>760188</commentid>
    <comment_count>10</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-11-06 16:27:32 -0800</bug_when>
    <thetext>Please CC me on the 16k layout bug. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>760195</commentid>
    <comment_count>11</comment_count>
      <attachid>172674</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-11-06 16:33:22 -0800</bug_when>
    <thetext>Created attachment 172674
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>760212</commentid>
    <comment_count>12</comment_count>
    <who name="Stephanie Lewis">slewis</who>
    <bug_when>2012-11-06 16:51:38 -0800</bug_when>
    <thetext>I broke end results.  There&apos;s a patch out to fix it.  Based on the max number which is accurate but is usually more varient I would be concerned there is a small regression.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>760353</commentid>
    <comment_count>13</comment_count>
      <attachid>172674</attachid>
    <who name="">mitz</who>
    <bug_when>2012-11-06 20:57:35 -0800</bug_when>
    <thetext>Comment on attachment 172674
Patch

What’s up with the EWS bots?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>760354</commentid>
    <comment_count>14</comment_count>
    <who name="">mitz</who>
    <bug_when>2012-11-06 20:58:47 -0800</bug_when>
    <thetext>&lt;rdar://problem/12329057&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>760744</commentid>
    <comment_count>15</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-11-07 08:42:56 -0800</bug_when>
    <thetext>They seem to have had trouble applying your project diff:

Hunk #4 FAILED at 25676.
1 out of 4 hunks FAILED -- saving rejects to file Source/WebCore/WebCore.xcodeproj/project.pbxproj.rej</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>761981</commentid>
    <comment_count>16</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-11-08 11:06:20 -0800</bug_when>
    <thetext>Committed r133921: &lt;http://trac.webkit.org/changeset/133921&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>172466</attachid>
            <date>2012-11-05 18:51:11 -0800</date>
            <delta_ts>2012-11-06 16:33:19 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101269-20121105184925.patch</filename>
            <type>text/plain</type>
            <size>19268</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMzUzNikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk2IEBACisyMDEyLTExLTA1ICBHZW9mZnJl
eSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CisKKyAgICAgICAgT3B0aW1pemVkIGtlcm5pbmcg
YW5kIGxpZ2F0dXJlcyB1c2luZyBjYWNoaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMDEyNjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBDb25zaWRlciB0aHJlZSBraW5kcyBvZiB0ZXh0IGxheW91dCwg
YW5kIHRoZSB2YWx1ZSBvZiBjYWNoaW5nIGZvciBlYWNoOgorCisgICAgICAgICAgICAoMSkgMSBs
YXlvdXQgb2YgMTAwJSB1bmlxdWUgd29yZHM6IHNtYWxsIG5lZ2F0aXZlIHZhbHVlLgorCisgICAg
ICAgICAgICAoMikgMSBsYXlvdXQgb2YgRW5nbGlzaCBwcm9zZTogbWVkaXVtIHBvc2l0aXZlIHZh
bHVlLgorCisgICAgICAgICAgICAoMykgTWFueSBsYXlvdXRzIG9mIGFueXRoaW5nOiBleHRyYS1l
eHRyYS1sYXJnZSBwb3NpdGl2ZSB2YWx1ZS4KKworICAgICAgICBTaW5jZSB3ZSBjYW4ndCBkaXN0
aW5ndWlzaCBiZXR3ZW4gdGhlc2Ugd29ya2Zsb3dzIGEgcHJpb3JpLCB3ZSB1c2Ugc3RhdGlzdGlj
YWwKKyAgICAgICAgc2FtcGxpbmcuIFRvIG1pbmltaXplIGNvc3QgaW4gKDEpIGFuZCBtYXhpbWl6
ZSBiZW5lZml0IGluICgyKSBhbmQgKDMpLCB3ZSB0cmVhdAorICAgICAgICBlYWNoIGNhY2hlIGFj
Y2VzcyBhcyBhIHN0YXRpc3RpY2FsIHNhbXBsZSwgYW5kIHVzZSB0aGUgY2FjaGUgaW4gcHJvcG9y
dGlvbiB0bworICAgICAgICB0aGUgb2JzZXJ2ZWQgcHJvYmFiaWxpdHkgb2YgZHVwbGljYXRlIHRl
eHQgbWVhc3VyZW1lbnQuCisKKyAgICAgICAgQmVuY2htYXJrIHJlc3VsdHM6CisgICAgICAgICAg
ICBwbHQzOiAxJSBmYXN0ZXIKKyAgICAgICAgICAgIGNoYXB0ZXItcmVmbG93LW9uY2UtcmFuZG9t
OiBObyBjaGFuZ2UgWypdCisgICAgICAgICAgICBjaGFwdGVyLXJlZmxvdy1vbmNlOiAyMyUgZmFz
dGVyCisgICAgICAgICAgICBjaGFwdGVyLXJlZmxvdy10d2ljZTogNTIlIGZhc3RlcgorICAgICAg
ICAgICAgY2hhcHRlci1yZWZsb3ctdGhyaWNlOiA2OCUgZmFzdGVyCisgICAgICAgICAgICBjaGFw
dGVyLXJlZmxvdzogMjYzJSBmYXN0ZXIKKyAgICAgICAgICAgIGxpbmUtbGF5b3V0OiAyNzAlIGZh
c3RlcgorCisgICAgICAgICAgICBbKl0gVGhpcyBpcyBhIHN0cmVzcyB0ZXN0IGRlc2lnbmVkIHRv
IG1ha2UgZXZlcnl0aGluZyBnbyB3cm9uZyBmb3IKKyAgICAgICAgICAgIGNhY2hpbmcuIEl0IGRv
ZXMgbm90IHJlcHJlc2VudCByZWFsIHdvcmxkIGNvbnRlbnQuCisKKyAgICAgICAgKiBXZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
V2lkdGhDYWNoZS5oOiBBZGRlZC4KKworICAgICAgICAoV2lkdGhDYWNoZSk6IEFkZGVkIGEgY2xh
c3MgdGhhdCBjYWNoZXMgY29tbW9uIHdvcmQgd2lkdGhzLiBUaGlzIGNhY2hlCisgICAgICAgIGNv
dWxkIGNhY2hlIG1vcmUgdGhpbmdzIG9yIG1vcmUgY2FzZXMgaW4gZnV0dXJlIC0tIGJ1dCBmb3Ig
bm93IGl0IHNlZW1zCisgICAgICAgIHRvIGNvdmVyIHRoZSBjb21tb24gY2FzZXMuCisKKyAgICAg
ICAgKFNtYWxsU3RyaW5nS2V5KTogRWFybHkgcHJvZmlsaW5nIHNob3dlZCB0aGF0IGFsbG9jYXRp
bmcgYW4gQXRvbWljU3RyaW5nCisgICAgICAgIG9yIFN0cmluZyBtZWFzdXJhYmx5IGFkZGVkIHRv
IHRoZSBjb3N0IG9mIHRoZSBjYWNoZSwgc28gSSBhZGRlZCBhIGN1c3RvbQorICAgICAgICBzdHJp
bmcga2V5IHRoYXQgY2FuIGJlIHN0b3JlZCBkaXJlY3RseSBpbnNpZGUgdGhlIHRhYmxlIGJ5IHZh
bHVlIC0tCisgICAgICAgIGVtcGlyaWNhbGx5IGFuc3dlcmluZyBhbiBhZ2Utb2xkIHF1ZXN0aW9u
IHdpdGggd2hpY2ggQXBwbGUgV2ViS2l0IGVuZ2luZWVycworICAgICAgICBzZWVtIHRvIGJlIG9i
c2Vzc2VkLgorCisgICAgICAgIChXZWJDb3JlOjpXaWR0aENhY2hlOjpTbWFsbFN0cmluZ0tleTo6
Y2FwYWNpdHkpOgorICAgICAgICAoV2ViQ29yZTo6V2lkdGhDYWNoZTo6U21hbGxTdHJpbmdLZXk6
OlNtYWxsU3RyaW5nS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OldpZHRoQ2FjaGU6OlNtYWxsU3Ry
aW5nS2V5OjpjaGFyYWN0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OldpZHRoQ2FjaGU6OlNtYWxs
U3RyaW5nS2V5OjpsZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6V2lkdGhDYWNoZTo6U21hbGxT
dHJpbmdLZXk6Omhhc2gpOgorICAgICAgICAoV2ViQ29yZTo6V2lkdGhDYWNoZTo6U21hbGxTdHJp
bmdLZXk6OmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OldpZHRo
Q2FjaGU6OlNtYWxsU3RyaW5nS2V5Ojppc0hhc2hUYWJsZUVtcHR5VmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6V2lkdGhDYWNoZTo6U21hbGxTdHJpbmdLZXlIYXNoOjpoYXNoKToKKyAgICAgICAg
KFdlYkNvcmU6OldpZHRoQ2FjaGU6OlNtYWxsU3RyaW5nS2V5SGFzaDo6ZXF1YWwpOgorICAgICAg
ICAoU21hbGxTdHJpbmdLZXlIYXNoKToKKyAgICAgICAgKFNtYWxsU3RyaW5nS2V5SGFzaFRyYWl0
cyk6CisgICAgICAgIChXZWJDb3JlOjpXaWR0aENhY2hlOjpTbWFsbFN0cmluZ0tleUhhc2hUcmFp
dHM6OmlzRW1wdHlWYWx1ZSk6IERpdHRvLgorCisgICAgICAgIChXZWJDb3JlOjpXaWR0aENhY2hl
OjpXaWR0aENhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OldpZHRoQ2FjaGU6OmFkZCk6IFNlcGFy
YXRlIG91dCB0aGUgImRvbid0IHVzZSB0aGUgY2FjaGUiIGNhc2UKKyAgICAgICAgc28gdGhlIGNv
bXBpbGVyIGNhbiBpbmxpbmUgaXQgc2VwYXJhdGUsIGhvcGVmdWxseSBmdXJ0aGVyIHJlZHVjaW5n
IGNhc2VzCisgICAgICAgIG9mICgxKS4KKworICAgICAgICAoV2ViQ29yZTo6V2lkdGhDYWNoZTo6
YWRkU2xvd0Nhc2UpOiBUaGVyZSdzIGEgbGl0dGxlIHN1YnRsZXR5IHRvIHRoZQorICAgICAgICBz
YW1wbGluZyBwb2xpY3kgaGVyZS4gTG90cyBvZiBkaWZmZXJlbnQgYXBwcm9hY2hlcyBhcmUgcG9z
c2libGUsIGFuZCBJCisgICAgICAgIGp1c3QgcGlja2VkIGEgc2ltcGxlIG9uZSB0aGF0IHNlZW1l
ZCB0byB3b3JrIGJhc2VkIG9uIGJlbmNobWFya2luZy4gSSdsbAorICAgICAgICBwb2ludCBvdXQg
c29tZSBpbnRlcmVzdGluZyBzdWJsdGV0aWVzIEknbSBhd2FyZSBvZiBoZXJlOgorCisgICAgICAg
ICAgICAoKikgU2luY2Ugd2Ugc3RhcnQgYXQgdGhlIG1pbiBzYW1wbGluZyByYXRlLCBhIGZvbnQg
dXNlZCBmb3IgMjAgd29yZHMKKyAgICAgICAgICAgIG9yIGZld2VyIG5ldmVyIGFsbG9jYXRlcyBh
IGNhY2hlLiBBbmVjZG90YWxseSwgc29tZSBmb250cyBzZWVtIHRvCisgICAgICAgICAgICBiZSB1
c2VkIHRoaXMgd2F5LgorCisgICAgICAgICAgICAoKikgV2hlbiB0aGUgc2FtcGxpbmcgcmF0ZSBp
cyB4IC8geSwgc2FtcGxpbmcgYWxsIHggd29yZHMgaW4gYSByb3cKKyAgICAgICAgICAgIHNlZW1z
IHNtYXJ0IGJlY2F1c2Ugc29tZSB3b3JkcyBtYXkgb2NjdXIgbW9yZSBjb21tb25seSBpbiByZWxh
dGlvbiB0bworICAgICAgICAgICAgZWFjaCBvdGhlciAoc3VjaCBhcyAnZWFjaCcgYW5kICdvdGhl
cicpLCBhbmQgcmVwZWF0IHdvcmtsb2FkcyB3aWxsCisgICAgICAgICAgICBsYXkgb3V0IHRoZSBz
YW1lIHdvcmRzIGluIG9yZGVyLiBJbnR1aXRpdmVseSwgdGhlc2UgYXJlIGJvdGggcmVhc29ucwor
ICAgICAgICAgICAgdGhpcyBwb2xpY3kgbWF5IHJhbXAgdXAgbW9yZSBlZmZlY3RpdmVseSB1bmRl
ciBsb2FkLgorCisgICAgICAgICAgICAoKikgSSBvcHRlZCBmb3IgbGluZWFyIGJhY2stb2ZmIGlu
c3RlYWQgb2YsIHNheSwgZXhwb25lbnRpYWwgYmFjay1vZmYKKyAgICAgICAgICAgIGJlY2F1c2Ug
d2UncmUgbm90IHRyeWluZyB0byBiYWNrIG9mZiB0byBpbmZpbml0eSAtLSBqdXN0IHRvIG91ciBt
aW4KKyAgICAgICAgICAgIHNhbXBsaW5nIHJhdGUuIFNpbmNlIHdlIGRvbid0IGV4cGVjdCB0aGUg
Y2FjaGUgdG8gaGl0IGZvciBldmVyeSB3b3JkLAorICAgICAgICAgICAgbXkgZ3Vlc3MgaXMgdGhh
dCBleHBvbmVudGlhbCBiYWNrLW9mZiB3b3VsZCBiZSB0b28gYWdncmVzc2l2ZS4KKworICAgICAg
ICAgICAgKCopIE91ciAiZXZpY3Rpb24iIHBvbGljeSBoYXMgYW4gSVEgb2YgMS4gSSBleHBlY3Qg
dGhpcyBpcyBzdWZmaWNpZW50CisgICAgICAgICAgICBiZWNhdXNlIGl0IHdvdWxkIGJlIHN1cnBy
aXNpbmcgdG8gc2VlIGEgbWlsbGlvbiB1bmlxdWUgd29yZHMgYWxsIHVzZWQKKyAgICAgICAgICAg
IGluIHRoZSBzYW1lIGRvY3VtZW50LiAoSSB3b3VsZCBub3QgbGlrZSB0byBwbGF5IGEgTGV0dGVy
cHJlc3MgZ2FtZQorICAgICAgICAgICAgYWdhaW5zdCBzdWNoIGEgZG9jdW1lbnQuKQorCisgICAg
ICAgIChXZWJDb3JlOjpXaWR0aENhY2hlOjpjbGVhcik6IE5lZWRlZCBiZWNhdXNlIGEgZm9udCBj
YW4gY2hhbmdlLCBpbiB3aGljaAorICAgICAgICBjYXNlIHdlIG5lZWQgdG8gZGl0Y2ggaXRzIGNh
Y2hlLgorCisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcj09KTogTmVlZGVkIGZvciBoYXNoaW5n
LgorCiAyMDEyLTExLTA1ICBCZXRoIERha2luICA8YmRha2luQGFwcGxlLmNvbT4KIAogICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAxMDAxCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShy
ZXZpc2lvbiAxMzM1MzMpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTMzNyw2ICszMzcsNyBAQAogCQkxNDk0N0ZG
RTEyRjgwQ0QyMDBBMEY2MzEgLyogRG9jdW1lbnRPcmRlcmVkTWFwLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDk0N0ZGQzEyRjgwQ0QyMDBBMEY2MzEg
LyogRG9jdW1lbnRPcmRlcmVkTWFwLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMTQ5OTNCRTUwQjJGMkIxQzAwNTA0OTdGIC8qIEZvY3VzQ29udHJv
bGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
NDk5M0JFMzBCMkYyQjFDMDA1MDQ5N0YgLyogRm9jdXNDb250cm9sbGVyLmNwcCAqLzsgfTsKIAkJ
MTQ5OTNCRTYwQjJGMkIxQzAwNTA0OTdGIC8qIEZvY3VzQ29udHJvbGxlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ5OTNCRTQwQjJGMkIxQzAwNTA0
OTdGIC8qIEZvY3VzQ29udHJvbGxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTE0QTNFREU3MTY0ODgzQ0UwMEY0RjQxNSAvKiBXaWR0aENhY2hl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEEzRURF
NjE2NDg4M0NFMDBGNEY0MTUgLyogV2lkdGhDYWNoZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0QzlBNUVBMEIzRDEwNUYwMDVBMDIzMiAvKiBT
ZXR0aW5ncy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxNEM5QTVFOTBCM0QxMDVGMDA1QTAyMzIgLyogU2V0dGluZ3MuY3BwICovOyB9OwogCQkxNENE
OEQ4MjEwNkI1MjkwMDBBNDZEMjMgLyogSlNTaGFyZWRXb3JrZXJDdXN0b20uY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTRDRDhEODExMDZCNTI5MDAw
QTQ2RDIzIC8qIEpTU2hhcmVkV29ya2VyQ3VzdG9tLmNwcCAqLzsgfTsKIAkJMTRDRjc4QTQwOUY1
OENCRjAwRUIzNjY1IC8qIEpTQ1NTVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMTRDRjc4QTMwOUY1OENCRjAwRUIzNjY1IC8qIEpTQ1NTVmFs
dWUuY3BwICovOyB9OwpAQCAtNzQxOSw2ICs3NDIwLDcgQEAKIAkJMTQ5NDdGRkMxMkY4MENEMjAw
QTBGNjMxIC8qIERvY3VtZW50T3JkZXJlZE1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBEb2N1bWVudE9yZGVyZWRNYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMTQ5OTNCRTMwQjJGMkIxQzAwNTA0OTdGIC8qIEZvY3VzQ29udHJvbGxlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9jdXNDb250cm9sbGVyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ5OTNCRTQwQjJGMkIxQzAwNTA0OTdGIC8qIEZv
Y3VzQ29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRm9jdXND
b250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0QTNFREU2MTY0ODgz
Q0UwMEY0RjQxNSAvKiBXaWR0aENhY2hlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdpZHRoQ2FjaGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTRBOThFMDUx
MzYzODZBMjAwQzlGRUQyIC8qIEJsb2IuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IEJsb2Iu
aWRsOyBwYXRoID0gZmlsZWFwaS9CbG9iLmlkbDsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9
OwogCQkxNEJERjU5NzEzNjUzOTJDMDAxNDgzOTMgLyogRE9NRmlsZVN5c3RlbS5pZGwgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSB0ZXh0OyBuYW1lID0gRE9NRmlsZVN5c3RlbS5pZGw7IHBhdGggPSBNb2R1bGVzL2ZpbGVz
eXN0ZW0vRE9NRmlsZVN5c3RlbS5pZGw7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKIAkJ
MTRCREY1OUExMzY1Mzk5MTAwMTQ4MzkzIC8qIEZpbGVSZWFkZXIuaWRsICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dDsgbmFtZSA9IEZpbGVSZWFkZXIuaWRsOyBwYXRoID0gZmlsZWFwaS9GaWxlUmVhZGVyLmlkbDsg
c291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OwpAQCAtMjAwNTQsNiArMjAwNTYsNyBAQAogCQkJ
CTFBRjg5QTQxMTUxOEZERUEwMEU1NDdCNSAvKiBUaWxlZEJhY2tpbmcuaCAqLywKIAkJCQkzN0My
OEE2NzEwRjY1OUNDMDA4Qzc4MTMgLyogVHlwZXNldHRpbmdGZWF0dXJlcy5oICovLAogCQkJCUU0
QUZDRkE0MERBRjI5QTMwMEY1RjU1QyAvKiBVbml0QmV6aWVyLmggKi8sCisJCQkJMTRBM0VERTYx
NjQ4ODNDRTAwRjRGNDE1IC8qIFdpZHRoQ2FjaGUuaCAqLywKIAkJCQk5MzlCMDJFQzBFQTJEQkM0
MDBDNTQ1NzAgLyogV2lkdGhJdGVyYXRvci5jcHAgKi8sCiAJCQkJOTM5QjAyRUQwRUEyREJDNDAw
QzU0NTcwIC8qIFdpZHRoSXRlcmF0b3IuaCAqLywKIAkJCQk1MDFCQUFBODEzOTUwRTJDMDBGN0FD
RUIgLyogV2luZFJ1bGUuaCAqLywKQEAgLTI1NjczLDYgKzI1Njc2LDcgQEAKIAkJCQk1MDkzMzM1
MDE2M0IwRTQzMDAwOTlBNjAgLyogQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNTBEMzI4NTgxNjNCMzEzRjAwMTYxMTFFIC8qIFZhbGlkYXRlZEN1c3RvbUZp
bHRlck9wZXJhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJM0ZGRkY5QTkxNTlEOUE1NTAwMjBC
QkQ1IC8qIFdlYktpdENTU1ZpZXdwb3J0UnVsZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMTRBM0VE
RTcxNjQ4ODNDRTAwRjRGNDE1IC8qIFdpZHRoQ2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJKTsK
IAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAJKHJldmlzaW9uIDEzMzUz
NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xOTgsMTMgKzE5OCwyOSBAQCBmbG9hdCBGb250Ojp3aWR0aChjb25zdCBUZXh0
UnVuJiBydW4sIEhhCiB7CiAgICAgQ29kZVBhdGggY29kZVBhdGhUb1VzZSA9IGNvZGVQYXRoKHJ1
bik7CiAgICAgaWYgKGNvZGVQYXRoVG9Vc2UgIT0gQ29tcGxleCkgewotICAgICAgICAvLyBJZiB0
aGUgY29tcGxleCB0ZXh0IGltcGxlbWVudGF0aW9uIGNhbm5vdCByZXR1cm4gZmFsbGJhY2sgZm9u
dHMsIGF2b2lkCi0gICAgICAgIC8vIHJldHVybmluZyB0aGVtIGZvciBzaW1wbGUgdGV4dCBhcyB3
ZWxsLgotICAgICAgICBzdGF0aWMgYm9vbCByZXR1cm5GYWxsYmFja0ZvbnRzID0gY2FuUmV0dXJu
RmFsbGJhY2tGb250c0ZvckNvbXBsZXhUZXh0KCk7Ci0gICAgICAgIHJldHVybiBmbG9hdFdpZHRo
Rm9yU2ltcGxlVGV4dChydW4sIHJldHVybkZhbGxiYWNrRm9udHMgPyBmYWxsYmFja0ZvbnRzIDog
MCwgY29kZVBhdGhUb1VzZSA9PSBTaW1wbGVXaXRoR2x5cGhPdmVyZmxvdyB8fCAoZ2x5cGhPdmVy
ZmxvdyAmJiBnbHlwaE92ZXJmbG93LT5jb21wdXRlQm91bmRzKSA/IGdseXBoT3ZlcmZsb3cgOiAw
KTsKKyAgICAgICAgLy8gVGhlIGNvbXBsZXggcGF0aCBpcyBtb3JlIHJlc3RyaWN0aXZlIGFib3V0
IHJldHVybmluZyBmYWxsYmFjayBmb250cyB0aGFuIHRoZSBzaW1wbGUgcGF0aCwgc28gd2UgbmVl
ZCBhbiBleHBsaWNpdCB0ZXN0IHRvIG1ha2UgdGhlaXIgYmVoYXZpb3JzIG1hdGNoLgorICAgICAg
ICBpZiAoIWNhblJldHVybkZhbGxiYWNrRm9udHNGb3JDb21wbGV4VGV4dCgpKQorICAgICAgICAg
ICAgZmFsbGJhY2tGb250cyA9IDA7CisgICAgICAgIC8vIFRoZSBzaW1wbGUgcGF0aCBjYW4gb3B0
aW1pemUgdGhlIGNhc2Ugd2hlcmUgZ2x5cGggb3ZlcmZsb3cgaXMgbm90IG9ic2VydmFibGUuCisg
ICAgICAgIGlmIChjb2RlUGF0aFRvVXNlICE9IFNpbXBsZVdpdGhHbHlwaE92ZXJmbG93ICYmIChn
bHlwaE92ZXJmbG93ICYmICFnbHlwaE92ZXJmbG93LT5jb21wdXRlQm91bmRzKSkKKyAgICAgICAg
ICAgIGdseXBoT3ZlcmZsb3cgPSAwOwogICAgIH0KIAotICAgIHJldHVybiBmbG9hdFdpZHRoRm9y
Q29tcGxleFRleHQocnVuLCBmYWxsYmFja0ZvbnRzLCBnbHlwaE92ZXJmbG93KTsKKyAgICBib29s
IGhhc0tlcm5pbmdPckxpZ2F0dXJlcyA9IHR5cGVzZXR0aW5nRmVhdHVyZXMoKSAmIChLZXJuaW5n
IHwgTGlnYXR1cmVzKTsKKyAgICBib29sIGhhc1dvcmRTcGFjaW5nT3JMZXR0ZXJTcGFjaW5nID0g
d29yZFNwYWNpbmcoKSB8IGxldHRlclNwYWNpbmcoKTsKKyAgICBmbG9hdCogY2FjaGVFbnRyeSA9
IG1fZm9udEZhbGxiYWNrTGlzdC0+d2lkdGhDYWNoZSgpLmFkZChydW4sIHN0ZDo6bnVtZXJpY19s
aW1pdHM8ZmxvYXQ+OjpxdWlldF9OYU4oKSwgaGFzS2VybmluZ09yTGlnYXR1cmVzLCBoYXNXb3Jk
U3BhY2luZ09yTGV0dGVyU3BhY2luZywgZ2x5cGhPdmVyZmxvdyk7CisgICAgaWYgKGNhY2hlRW50
cnkgJiYgIWlzbmFuKCpjYWNoZUVudHJ5KSkKKyAgICAgICAgcmV0dXJuICpjYWNoZUVudHJ5Owor
CisgICAgZmxvYXQgcmVzdWx0OworICAgIGlmIChjb2RlUGF0aFRvVXNlID09IENvbXBsZXgpCisg
ICAgICAgIHJlc3VsdCA9IGZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChydW4sIGZhbGxiYWNrRm9u
dHMsIGdseXBoT3ZlcmZsb3cpOworICAgIGVsc2UKKyAgICAgICAgcmVzdWx0ID0gZmxvYXRXaWR0
aEZvclNpbXBsZVRleHQocnVuLCBmYWxsYmFja0ZvbnRzLCBnbHlwaE92ZXJmbG93KTsKKworICAg
IGlmIChjYWNoZUVudHJ5ICYmICghZmFsbGJhY2tGb250cyB8fCBmYWxsYmFja0ZvbnRzLT5pc0Vt
cHR5KCkpKQorICAgICAgICAqY2FjaGVFbnRyeSA9IHJlc3VsdDsKKyAgICByZXR1cm4gcmVzdWx0
OwogfQogCiBmbG9hdCBGb250Ojp3aWR0aChjb25zdCBUZXh0UnVuJiBydW4sIGludCYgY2hhcnND
b25zdW1lZCwgU3RyaW5nJiBnbHlwaE5hbWUpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250RmFsbGJhY2tMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RmFsbGJhY2tMaXN0LmNwcAkocmV2aXNp
b24gMTMzNTMzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEZhbGxi
YWNrTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwLDYgKzYwLDcgQEAgdm9pZCBGb250RmFs
bGJhY2tMaXN0OjppbnZhbGlkYXRlKFBhc3NSZQogICAgIG1fZm9udFNlbGVjdG9yID0gZm9udFNl
bGVjdG9yOwogICAgIG1fZm9udFNlbGVjdG9yVmVyc2lvbiA9IG1fZm9udFNlbGVjdG9yID8gbV9m
b250U2VsZWN0b3ItPnZlcnNpb24oKSA6IDA7CiAgICAgbV9nZW5lcmF0aW9uID0gZm9udENhY2hl
KCktPmdlbmVyYXRpb24oKTsKKyAgICBtX3dpZHRoQ2FjaGUuY2xlYXIoKTsKIH0KIAogdm9pZCBG
b250RmFsbGJhY2tMaXN0OjpyZWxlYXNlRm9udERhdGEoKQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udEZhbGxiYWNrTGlzdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYWxsYmFja0xpc3QuaAkocmV2aXNpb24g
MTMzNTMzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEZhbGxiYWNr
TGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw2ICsyMyw3IEBACiAKICNpbmNsdWRlICJGb250
U2VsZWN0b3IuaCIKICNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgorI2luY2x1ZGUgIldpZHRo
Q2FjaGUuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhy
ZWFkLmg+CiAKQEAgLTc5LDYgKzgwLDggQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGZvbnRTZWxl
Y3RvclZlcnNpb24oKSBjb25zdCB7IHJldHVybiBtX2ZvbnRTZWxlY3RvclZlcnNpb247IH0KICAg
ICB1bnNpZ25lZCBnZW5lcmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9nZW5lcmF0aW9uOyB9CiAK
KyAgICBXaWR0aENhY2hlJiB3aWR0aENhY2hlKCkgY29uc3QgeyByZXR1cm4gbV93aWR0aENhY2hl
OyB9CisKIHByaXZhdGU6CiAgICAgRm9udEZhbGxiYWNrTGlzdCgpOwogCkBAIC0xMDIsNiArMTA1
LDcgQEAgcHJpdmF0ZToKICAgICBtdXRhYmxlIEdseXBoUGFnZVRyZWVOb2RlKiBtX3BhZ2VaZXJv
OwogICAgIG11dGFibGUgY29uc3QgU2ltcGxlRm9udERhdGEqIG1fY2FjaGVkUHJpbWFyeVNpbXBs
ZUZvbnREYXRhOwogICAgIFJlZlB0cjxGb250U2VsZWN0b3I+IG1fZm9udFNlbGVjdG9yOworICAg
IG11dGFibGUgV2lkdGhDYWNoZSBtX3dpZHRoQ2FjaGU7CiAgICAgdW5zaWduZWQgbV9mb250U2Vs
ZWN0b3JWZXJzaW9uOwogICAgIG11dGFibGUgaW50IG1fZmFtaWx5SW5kZXg7CiAgICAgdW5zaWdu
ZWQgc2hvcnQgbV9nZW5lcmF0aW9uOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvV2lkdGhDYWNoZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1dpZHRoQ2FjaGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1dpZHRoQ2FjaGUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxOTEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
CisgKi8KKworI2lmbmRlZiBXaWR0aENhY2hlX2gKKyNkZWZpbmUgV2lkdGhDYWNoZV9oCisKKyNp
bmNsdWRlICJUZXh0UnVuLmgiCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3
dGYvSGFzaEZ1bmN0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9TdHJpbmdIYXNoZXIuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitzdHJ1Y3QgR2x5cGhPdmVyZmxvdzsKKworY2xhc3MgV2lkdGhDYWNoZSB7
Citwcml2YXRlOgorICAgIC8vIFVzZWQgdG8gb3B0aW1pemUgc21hbGwgc3RyaW5ncyBhcyBoYXNo
IHRhYmxlIGtleXMuIEF2b2lkcyBtYWxsb2MnaW5nIGFuIG91dC1vZi1saW5lIFN0cmluZ0ltcGwu
CisgICAgY2xhc3MgU21hbGxTdHJpbmdLZXkgeworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGlj
IHVuc2lnbmVkIGNhcGFjaXR5KCkgeyByZXR1cm4gc19jYXBhY2l0eTsgfQorCisgICAgICAgIFNt
YWxsU3RyaW5nS2V5KCkKKyAgICAgICAgICAgIDogbV9sZW5ndGgoc19lbXB0eVZhbHVlTGVuZ3Ro
KQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBTbWFsbFN0cmluZ0tleShXVEY6Okhh
c2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCisgICAgICAgICAgICA6IG1fbGVuZ3RoKHNfZGVsZXRl
ZFZhbHVlTGVuZ3RoKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBTbWFsbFN0cmluZ0tleShDaGFyYWN0ZXJUeXBlKiBjaGFy
YWN0ZXJzLCB1bnNpZ25lZCBzaG9ydCBsZW5ndGgpCisgICAgICAgICAgICA6IG1fbGVuZ3RoKGxl
bmd0aCkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKGxlbmd0aCA8PSBzX2NhcGFjaXR5
KTsKKyAgICAgICAgICAgIFN0cmluZ0hhc2hlciBoYXNoZXI7CisKKyAgICAgICAgICAgIGJvb2wg
cmVtYWluZGVyID0gbGVuZ3RoICYgMTsKKyAgICAgICAgICAgIGxlbmd0aCA+Pj0gMTsKKworICAg
ICAgICAgICAgdW5zaWduZWQgaSA9IDA7CisgICAgICAgICAgICB3aGlsZSAobGVuZ3RoLS0pIHsK
KyAgICAgICAgICAgICAgICBtX2NoYXJhY3RlcnNbaV0gPSBjaGFyYWN0ZXJzW2ldOworICAgICAg
ICAgICAgICAgIG1fY2hhcmFjdGVyc1tpICsgMV0gPSBjaGFyYWN0ZXJzW2kgKyAxXTsKKyAgICAg
ICAgICAgICAgICBoYXNoZXIuYWRkQ2hhcmFjdGVycyhjaGFyYWN0ZXJzW2ldLCBjaGFyYWN0ZXJz
W2kgKyAxXSk7CisgICAgICAgICAgICAgICAgaSArPSAyOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAocmVtYWluZGVyKSB7CisgICAgICAgICAgICAgICAgbV9jaGFyYWN0ZXJzW2ld
ID0gY2hhcmFjdGVyc1tpXTsKKyAgICAgICAgICAgICAgICBoYXNoZXIuYWRkQ2hhcmFjdGVyKGNo
YXJhY3RlcnNbaV0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtX2hhc2ggPSBoYXNo
ZXIuaGFzaCgpOworICAgICAgICB9CisKKyAgICAgICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMo
KSBjb25zdCB7IHJldHVybiBtX2NoYXJhY3RlcnM7IH0KKyAgICAgICAgdW5zaWduZWQgc2hvcnQg
bGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KKyAgICAgICAgdW5zaWduZWQgaGFz
aCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzaDsgfQorCisgICAgICAgIGJvb2wgaXNIYXNoVGFibGVE
ZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0aCA9PSBzX2RlbGV0ZWRWYWx1ZUxl
bmd0aDsgfQorICAgICAgICBib29sIGlzSGFzaFRhYmxlRW1wdHlWYWx1ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fbGVuZ3RoID09IHNfZW1wdHlWYWx1ZUxlbmd0aDsgfQorCisgICAgcHJpdmF0ZToKKyAg
ICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNfY2FwYWNpdHkgPSAxNTsKKyAgICAgICAgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIHNfZW1wdHlWYWx1ZUxlbmd0aCA9IHNfY2FwYWNpdHkgKyAxOwor
ICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc19kZWxldGVkVmFsdWVMZW5ndGggPSBzX2Nh
cGFjaXR5ICsgMjsKKworICAgICAgICB1bnNpZ25lZCBtX2hhc2g7CisgICAgICAgIHVuc2lnbmVk
IHNob3J0IG1fbGVuZ3RoOworICAgICAgICBVQ2hhciBtX2NoYXJhY3RlcnNbc19jYXBhY2l0eV07
CisgICAgfTsKKworICAgIHN0cnVjdCBTbWFsbFN0cmluZ0tleUhhc2ggeworICAgICAgICBzdGF0
aWMgdW5zaWduZWQgaGFzaChjb25zdCBTbWFsbFN0cmluZ0tleSYga2V5KSB7IHJldHVybiBrZXku
aGFzaCgpOyB9CisgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFNtYWxsU3RyaW5nS2V5
JiBhLCBjb25zdCBTbWFsbFN0cmluZ0tleSYgYikgeyByZXR1cm4gYSA9PSBiOyB9CisgICAgICAg
IHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsg
Ly8gRW1wdHkgYW5kIGRlbGV0ZWQgdmFsdWVzIGhhdmUgbGVuZ3RocyB0aGF0IGFyZSBub3QgZXF1
YWwgdG8gYW55IHZhbGlkIGxlbmd0aC4KKyAgICB9OworCisgICAgc3RydWN0IFNtYWxsU3RyaW5n
S2V5SGFzaFRyYWl0cyA6IFdURjo6U2ltcGxlQ2xhc3NIYXNoVHJhaXRzPFNtYWxsU3RyaW5nS2V5
PiB7CisgICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc0lzRW1wdHlWYWx1ZUZ1bmN0aW9uID0g
dHJ1ZTsKKyAgICAgICAgc3RhdGljIGJvb2wgaXNFbXB0eVZhbHVlKGNvbnN0IFNtYWxsU3RyaW5n
S2V5JiBrZXkpIHsgcmV0dXJuIGtleS5pc0hhc2hUYWJsZUVtcHR5VmFsdWUoKTsgfQorICAgICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gZmFsc2U7CisgICAgICAgIHN0
YXRpYyBjb25zdCBpbnQgbWluaW11bVRhYmxlU2l6ZSA9IDE2OworICAgIH07CisKKyAgICBmcmll
bmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNtYWxsU3RyaW5nS2V5JiwgY29uc3QgU21hbGxTdHJp
bmdLZXkmKTsKKworcHVibGljOgorICAgIFdpZHRoQ2FjaGUoKQorICAgICAgICA6IG1faW50ZXJ2
YWwoc19tYXhJbnRlcnZhbCkKKyAgICAgICAgLCBtX2NvdW50ZG93bihtX2ludGVydmFsKQorICAg
IHsKKyAgICB9CisKKyAgICBmbG9hdCogYWRkKGNvbnN0IFRleHRSdW4mIHJ1biwgZmxvYXQgZW50
cnksIGJvb2wgaGFzS2VybmluZ09yTGlnYXR1cmVzLCBib29sIGhhc1dvcmRTcGFjaW5nT3JMZXR0
ZXJTcGFjaW5nLCBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93KQorICAgIHsKKyAgICAgICAg
Ly8gVGhlIHdpZHRoIGNhY2hlIGlzIG5vdCByZWFsbHkgcHJvZml0YWJsZSB1bmxlc3Mgd2UncmUg
ZG9pbmcgZXhwZW5zaXZlIGdseXBoIHRyYW5zZm9ybWF0aW9ucy4KKyAgICAgICAgaWYgKCFoYXNL
ZXJuaW5nT3JMaWdhdHVyZXMpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgLy8gV29y
ZCBzcGFjaW5nIGFuZCBsZXR0ZXIgc3BhY2luZyBjYW4gY2hhbmdlIHRoZSB3aWR0aCBvZiBhIHdv
cmQuCisgICAgICAgIGlmIChoYXNXb3JkU3BhY2luZ09yTGV0dGVyU3BhY2luZykKKyAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICAvLyBTaW5jZSB0aGlzIGlzIGp1c3QgYSB3aWR0aCBjYWNo
ZSwgd2UgZG9uJ3QgaGF2ZSBlbm91Z2ggaW5mb3JtYXRpb24gdG8gc2F0aXNmeSBnbHlwaCBxdWVy
aWVzLgorICAgICAgICBpZiAoZ2x5cGhPdmVyZmxvdykKKyAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICAvLyBJZiB3ZSBhbGxvdyB0YWJzIGFuZCBhIHRhYiBvY2N1cnMgaW5zaWRlIGEgd29y
ZCwgdGhlIHdpZHRoIG9mIHRoZSB3b3JkIHZhcmllcyBiYXNlZCBvbiBpdHMgcG9zaXRpb24gb24g
dGhlIGxpbmUuCisgICAgICAgIGlmIChydW4uYWxsb3dUYWJzKCkpCisgICAgICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihydW4ubGVuZ3RoKCkpID4g
U21hbGxTdHJpbmdLZXk6OmNhcGFjaXR5KCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKworICAg
ICAgICBpZiAobV9jb3VudGRvd24gPiAwKSB7CisgICAgICAgICAgICAtLW1fY291bnRkb3duOwor
ICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gYWRkU2xv
d0Nhc2UocnVuLCBlbnRyeSk7CisgICAgfQorCisgICAgZmxvYXQqIGFkZFNsb3dDYXNlKGNvbnN0
IFRleHRSdW4mIHJ1biwgZmxvYXQgZW50cnkpCisgICAgeworICAgICAgICBTbWFsbFN0cmluZ0tl
eSBzbWFsbFN0cmluZ0tleTsKKyAgICAgICAgaWYgKHJ1bi5pczhCaXQoKSkKKyAgICAgICAgICAg
IHNtYWxsU3RyaW5nS2V5ID0gU21hbGxTdHJpbmdLZXkocnVuLmNoYXJhY3RlcnM4KCksIHJ1bi5s
ZW5ndGgoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNtYWxsU3RyaW5nS2V5ID0gU21h
bGxTdHJpbmdLZXkocnVuLmNoYXJhY3RlcnMxNigpLCBydW4ubGVuZ3RoKCkpOworCisgICAgICAg
IE1hcDo6QWRkUmVzdWx0IGFkZFJlc3VsdCA9IG1fbWFwLmFkZChzbWFsbFN0cmluZ0tleSwgZW50
cnkpOworCisgICAgICAgIC8vIENhY2hlIGhpdDogcmFtcCB1cCBieSBzYW1wbGluZyB0aGUgbmV4
dCBmZXcgd29yZHMuCisgICAgICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkpIHsKKyAgICAg
ICAgICAgIG1faW50ZXJ2YWwgPSBzX21pbkludGVydmFsOworICAgICAgICAgICAgcmV0dXJuICZh
ZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOworICAgICAgICB9CisKKyAgICAgICAgLy8gQ2FjaGUg
bWlzczogcmFtcCBkb3duIGJ5IGluY3JlYXNpbmcgb3VyIHNhbXBsaW5nIGludGVydmFsLgorICAg
ICAgICBpZiAobV9pbnRlcnZhbCA8IHNfbWF4SW50ZXJ2YWwpCisgICAgICAgICAgICArK21faW50
ZXJ2YWw7CisgICAgICAgIG1fY291bnRkb3duID0gbV9pbnRlcnZhbDsKKworICAgICAgICBpZiAo
bV9tYXAuc2l6ZSgpIDwgc19tYXhTaXplKQorICAgICAgICAgICAgcmV0dXJuICZhZGRSZXN1bHQu
aXRlcmF0b3ItPnZhbHVlOworCisgICAgICAgIG1fbWFwLmNsZWFyKCk7IC8vIE5vIG5lZWQgdG8g
YmUgZmFuY3k6IHdlJ3JlIGp1c3QgdHJ5aW5nIHRvIGF2b2lkIHBhdGhvbG9naWNhbCBncm93dGgu
CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHZvaWQgY2xlYXIoKSB7IG1fbWFwLmNs
ZWFyKCk7IH0KKworcHJpdmF0ZToKKyAgICB0eXBlZGVmIEhhc2hNYXA8U21hbGxTdHJpbmdLZXks
IGZsb2F0LCBTbWFsbFN0cmluZ0tleUhhc2gsIFNtYWxsU3RyaW5nS2V5SGFzaFRyYWl0cz4gTWFw
OworICAgIHN0YXRpYyBjb25zdCBpbnQgc19taW5JbnRlcnZhbCA9IC0zOyAvLyBBIGNhY2hlIGhp
dCBwYXlzIGZvciBhYm91dCAzIGNhY2hlIG1pc3Nlcy4KKyAgICBzdGF0aWMgY29uc3QgaW50IHNf
bWF4SW50ZXJ2YWwgPSAyMDsgLy8gU2FtcGxpbmcgYXQgdGhpcyBpbnRlcnZhbCBoYXMgYWxtb3N0
IG5vIG92ZXJoZWFkLgorICAgIHN0YXRpYyBjb25zdCBpbnQgc19tYXhTaXplID0gNTAwMDAwOyAv
LyBKdXN0IGVub3VnaCB0byBndWFyZCBhZ2FpbnN0IHBhdGhvbG9naWNhbCBncm93dGguCisKKyAg
ICBpbnQgbV9pbnRlcnZhbDsKKyAgICBpbnQgbV9jb3VudGRvd247CisgICAgTWFwIG1fbWFwOwor
fTsKKworaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBXaWR0aENhY2hlOjpTbWFsbFN0cmlu
Z0tleSYgYSwgY29uc3QgV2lkdGhDYWNoZTo6U21hbGxTdHJpbmdLZXkmIGIpCit7CisgICAgaWYg
KGEubGVuZ3RoKCkgIT0gYi5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJl
dHVybiBXVEY6OmVxdWFsKGEuY2hhcmFjdGVycygpLCBiLmNoYXJhY3RlcnMoKSwgYS5sZW5ndGgo
KSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFdpZHRoQ2FjaGVf
aAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>172674</attachid>
            <date>2012-11-06 16:33:22 -0800</date>
            <delta_ts>2012-11-06 20:57:35 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101269-20121106163134.patch</filename>
            <type>text/plain</type>
            <size>21589</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMzY5MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk5IEBACisyMDEyLTExLTA1ICBHZW9mZnJl
eSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CisKKyAgICAgICAgT3B0aW1pemVkIGtlcm5pbmcg
YW5kIGxpZ2F0dXJlcyB1c2luZyBjYWNoaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMDEyNjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBDb25zaWRlciB0aHJlZSBraW5kcyBvZiB0ZXh0IGxheW91dCwg
YW5kIHRoZSB2YWx1ZSBvZiBjYWNoaW5nIGZvciBlYWNoOgorCisgICAgICAgICAgICAoMSkgMSBs
YXlvdXQgb2YgMTAwJSB1bmlxdWUgd29yZHM6IHNtYWxsIG5lZ2F0aXZlIHZhbHVlLgorCisgICAg
ICAgICAgICAoMikgMSBsYXlvdXQgb2YgRW5nbGlzaCBwcm9zZTogbWVkaXVtIHBvc2l0aXZlIHZh
bHVlLgorCisgICAgICAgICAgICAoMykgTWFueSBsYXlvdXRzIG9mIGFueXRoaW5nOiBleHRyYS1l
eHRyYS1sYXJnZSBwb3NpdGl2ZSB2YWx1ZS4KKworICAgICAgICBTaW5jZSB3ZSBjYW4ndCBkaXN0
aW5ndWlzaCBiZXR3ZW4gdGhlc2Ugd29ya2Zsb3dzIGEgcHJpb3JpLCB3ZSB1c2Ugc3RhdGlzdGlj
YWwKKyAgICAgICAgc2FtcGxpbmcuIFRvIG1pbmltaXplIGNvc3QgaW4gKDEpIGFuZCBtYXhpbWl6
ZSBiZW5lZml0IGluICgyKSBhbmQgKDMpLCB3ZSB0cmVhdAorICAgICAgICBlYWNoIGNhY2hlIGFj
Y2VzcyBhcyBhIHN0YXRpc3RpY2FsIHNhbXBsZSwgYW5kIHVzZSB0aGUgY2FjaGUgaW4gcHJvcG9y
dGlvbiB0bworICAgICAgICB0aGUgb2JzZXJ2ZWQgcHJvYmFiaWxpdHkgb2YgZHVwbGljYXRlIHRl
eHQgbWVhc3VyZW1lbnQuCisKKyAgICAgICAgQmVuY2htYXJrIHJlc3VsdHM6CisgICAgICAgICAg
ICBwbHQzOiAxJSBmYXN0ZXIKKyAgICAgICAgICAgIGNoYXB0ZXItcmVmbG93LW9uY2UtcmFuZG9t
OiBObyBjaGFuZ2UgWypdCisgICAgICAgICAgICBjaGFwdGVyLXJlZmxvdy1vbmNlOiAyMyUgZmFz
dGVyCisgICAgICAgICAgICBjaGFwdGVyLXJlZmxvdy10d2ljZTogNTIlIGZhc3RlcgorICAgICAg
ICAgICAgY2hhcHRlci1yZWZsb3ctdGhyaWNlOiA2OCUgZmFzdGVyCisgICAgICAgICAgICBjaGFw
dGVyLXJlZmxvdzogMjYzJSBmYXN0ZXIKKyAgICAgICAgICAgIGxpbmUtbGF5b3V0OiAyNzAlIGZh
c3RlcgorCisgICAgICAgICAgICBbKl0gVGhpcyBpcyBhIHN0cmVzcyB0ZXN0IGRlc2lnbmVkIHRv
IG1ha2UgZXZlcnl0aGluZyBnbyB3cm9uZyBmb3IKKyAgICAgICAgICAgIGNhY2hpbmcuIEl0IGRv
ZXMgbm90IHJlcHJlc2VudCByZWFsIHdvcmxkIGNvbnRlbnQuCisKKyAgICAgICAgKiBHTlVtYWtl
ZmlsZS5saXN0LmFtOgorICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogV2ViQ29yZS52
Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1dpZHRoQ2FjaGUuaDogQWRk
ZWQuCisKKyAgICAgICAgKFdpZHRoQ2FjaGUpOiBBZGRlZCBhIGNsYXNzIHRoYXQgY2FjaGVzIGNv
bW1vbiB3b3JkIHdpZHRocy4gVGhpcyBjYWNoZQorICAgICAgICBjb3VsZCBjYWNoZSBtb3JlIHRo
aW5ncyBvciBtb3JlIGNhc2VzIGluIGZ1dHVyZSAtLSBidXQgZm9yIG5vdyBpdCBzZWVtcworICAg
ICAgICB0byBjb3ZlciB0aGUgY29tbW9uIGNhc2VzLgorCisgICAgICAgIChTbWFsbFN0cmluZ0tl
eSk6IEVhcmx5IHByb2ZpbGluZyBzaG93ZWQgdGhhdCBhbGxvY2F0aW5nIGFuIEF0b21pY1N0cmlu
ZworICAgICAgICBvciBTdHJpbmcgbWVhc3VyYWJseSBhZGRlZCB0byB0aGUgY29zdCBvZiB0aGUg
Y2FjaGUsIHNvIEkgYWRkZWQgYSBjdXN0b20KKyAgICAgICAgc3RyaW5nIGtleSB0aGF0IGNhbiBi
ZSBzdG9yZWQgZGlyZWN0bHkgaW5zaWRlIHRoZSB0YWJsZSBieSB2YWx1ZSAtLQorICAgICAgICBl
bXBpcmljYWxseSBhbnN3ZXJpbmcgYW4gYWdlLW9sZCBxdWVzdGlvbiB3aXRoIHdoaWNoIEFwcGxl
IFdlYktpdCBlbmdpbmVlcnMKKyAgICAgICAgc2VlbSB0byBiZSBvYnNlc3NlZC4KKworICAgICAg
ICAoV2ViQ29yZTo6V2lkdGhDYWNoZTo6U21hbGxTdHJpbmdLZXk6OmNhcGFjaXR5KToKKyAgICAg
ICAgKFdlYkNvcmU6OldpZHRoQ2FjaGU6OlNtYWxsU3RyaW5nS2V5OjpTbWFsbFN0cmluZ0tleSk6
CisgICAgICAgIChXZWJDb3JlOjpXaWR0aENhY2hlOjpTbWFsbFN0cmluZ0tleTo6Y2hhcmFjdGVy
cyk6CisgICAgICAgIChXZWJDb3JlOjpXaWR0aENhY2hlOjpTbWFsbFN0cmluZ0tleTo6bGVuZ3Ro
KToKKyAgICAgICAgKFdlYkNvcmU6OldpZHRoQ2FjaGU6OlNtYWxsU3RyaW5nS2V5OjpoYXNoKToK
KyAgICAgICAgKFdlYkNvcmU6OldpZHRoQ2FjaGU6OlNtYWxsU3RyaW5nS2V5Ojppc0hhc2hUYWJs
ZURlbGV0ZWRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpXaWR0aENhY2hlOjpTbWFsbFN0cmlu
Z0tleTo6aXNIYXNoVGFibGVFbXB0eVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OldpZHRoQ2Fj
aGU6OlNtYWxsU3RyaW5nS2V5SGFzaDo6aGFzaCk6CisgICAgICAgIChXZWJDb3JlOjpXaWR0aENh
Y2hlOjpTbWFsbFN0cmluZ0tleUhhc2g6OmVxdWFsKToKKyAgICAgICAgKFNtYWxsU3RyaW5nS2V5
SGFzaCk6CisgICAgICAgIChTbWFsbFN0cmluZ0tleUhhc2hUcmFpdHMpOgorICAgICAgICAoV2Vi
Q29yZTo6V2lkdGhDYWNoZTo6U21hbGxTdHJpbmdLZXlIYXNoVHJhaXRzOjppc0VtcHR5VmFsdWUp
OiBEaXR0by4KKworICAgICAgICAoV2ViQ29yZTo6V2lkdGhDYWNoZTo6V2lkdGhDYWNoZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpXaWR0aENhY2hlOjphZGQpOiBTZXBhcmF0ZSBvdXQgdGhlICJkb24n
dCB1c2UgdGhlIGNhY2hlIiBjYXNlCisgICAgICAgIHNvIHRoZSBjb21waWxlciBjYW4gaW5saW5l
IGl0IHNlcGFyYXRlLCBob3BlZnVsbHkgZnVydGhlciByZWR1Y2luZyBjYXNlcworICAgICAgICBv
ZiAoMSkuCisKKyAgICAgICAgKFdlYkNvcmU6OldpZHRoQ2FjaGU6OmFkZFNsb3dDYXNlKTogVGhl
cmUncyBhIGxpdHRsZSBzdWJ0bGV0eSB0byB0aGUKKyAgICAgICAgc2FtcGxpbmcgcG9saWN5IGhl
cmUuIExvdHMgb2YgZGlmZmVyZW50IGFwcHJvYWNoZXMgYXJlIHBvc3NpYmxlLCBhbmQgSQorICAg
ICAgICBqdXN0IHBpY2tlZCBhIHNpbXBsZSBvbmUgdGhhdCBzZWVtZWQgdG8gd29yayBiYXNlZCBv
biBiZW5jaG1hcmtpbmcuIEknbGwKKyAgICAgICAgcG9pbnQgb3V0IHNvbWUgaW50ZXJlc3Rpbmcg
c3VibHRldGllcyBJJ20gYXdhcmUgb2YgaGVyZToKKworICAgICAgICAgICAgKCopIFNpbmNlIHdl
IHN0YXJ0IGF0IHRoZSBtaW4gc2FtcGxpbmcgcmF0ZSwgYSBmb250IHVzZWQgZm9yIDIwIHdvcmRz
CisgICAgICAgICAgICBvciBmZXdlciBuZXZlciBhbGxvY2F0ZXMgYSBjYWNoZS4gQW5lY2RvdGFs
bHksIHNvbWUgZm9udHMgc2VlbSB0bworICAgICAgICAgICAgYmUgdXNlZCB0aGlzIHdheS4KKwor
ICAgICAgICAgICAgKCopIFdoZW4gdGhlIHNhbXBsaW5nIHJhdGUgaXMgeCAvIHksIHNhbXBsaW5n
IGFsbCB4IHdvcmRzIGluIGEgcm93CisgICAgICAgICAgICBzZWVtcyBzbWFydCBiZWNhdXNlIHNv
bWUgd29yZHMgbWF5IG9jY3VyIG1vcmUgY29tbW9ubHkgaW4gcmVsYXRpb24gdG8KKyAgICAgICAg
ICAgIGVhY2ggb3RoZXIgKHN1Y2ggYXMgJ2VhY2gnIGFuZCAnb3RoZXInKSwgYW5kIHJlcGVhdCB3
b3JrbG9hZHMgd2lsbAorICAgICAgICAgICAgbGF5IG91dCB0aGUgc2FtZSB3b3JkcyBpbiBvcmRl
ci4gSW50dWl0aXZlbHksIHRoZXNlIGFyZSBib3RoIHJlYXNvbnMKKyAgICAgICAgICAgIHRoaXMg
cG9saWN5IG1heSByYW1wIHVwIG1vcmUgZWZmZWN0aXZlbHkgdW5kZXIgbG9hZC4KKworICAgICAg
ICAgICAgKCopIEkgb3B0ZWQgZm9yIGxpbmVhciBiYWNrLW9mZiBpbnN0ZWFkIG9mLCBzYXksIGV4
cG9uZW50aWFsIGJhY2stb2ZmCisgICAgICAgICAgICBiZWNhdXNlIHdlJ3JlIG5vdCB0cnlpbmcg
dG8gYmFjayBvZmYgdG8gaW5maW5pdHkgLS0ganVzdCB0byBvdXIgbWluCisgICAgICAgICAgICBz
YW1wbGluZyByYXRlLiBTaW5jZSB3ZSBkb24ndCBleHBlY3QgdGhlIGNhY2hlIHRvIGhpdCBmb3Ig
ZXZlcnkgd29yZCwKKyAgICAgICAgICAgIG15IGd1ZXNzIGlzIHRoYXQgZXhwb25lbnRpYWwgYmFj
ay1vZmYgd291bGQgYmUgdG9vIGFnZ3Jlc3NpdmUuCisKKyAgICAgICAgICAgICgqKSBPdXIgImV2
aWN0aW9uIiBwb2xpY3kgaGFzIGFuIElRIG9mIDEuIEkgZXhwZWN0IHRoaXMgaXMgc3VmZmljaWVu
dAorICAgICAgICAgICAgYmVjYXVzZSBpdCB3b3VsZCBiZSBzdXJwcmlzaW5nIHRvIHNlZSBhIG1p
bGxpb24gdW5pcXVlIHdvcmRzIGFsbCB1c2VkCisgICAgICAgICAgICBpbiB0aGUgc2FtZSBkb2N1
bWVudC4gKEkgd291bGQgbm90IGxpa2UgdG8gcGxheSBhIExldHRlcnByZXNzIGdhbWUKKyAgICAg
ICAgICAgIGFnYWluc3Qgc3VjaCBhIGRvY3VtZW50LikKKworICAgICAgICAoV2ViQ29yZTo6V2lk
dGhDYWNoZTo6Y2xlYXIpOiBOZWVkZWQgYmVjYXVzZSBhIGZvbnQgY2FuIGNoYW5nZSwgaW4gd2hp
Y2gKKyAgICAgICAgY2FzZSB3ZSBuZWVkIHRvIGRpdGNoIGl0cyBjYWNoZS4KKworICAgICAgICAo
V2ViQ29yZTo6b3BlcmF0b3I9PSk6IE5lZWRlZCBmb3IgaGFzaGluZy4KKwogMjAxMi0xMS0wNiAg
SHVhbmcgRG9uZ3N1bmcgIDxsdXh0ZWxsYUBjb21wYW55MTAwLm5ldD4KIAogICAgICAgICBCdWls
ZCBmaXguIHIxMzM2MDEgYnJva2UgdGhlIFdpbmRvd3MgYnVpbGQuCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0dO
VW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDEzMzUzMykKKysrIFNvdXJjZS9XZWJDb3JlL0dO
VW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTQ1NTgsNiArNDU1OCw3IEBAIHdl
YmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJh
bnNmb3Jtcy9UcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaCBcCiAJU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvVHlwZXNldHRpbmdGZWF0dXJlcy5oIFwKIAlTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Vbml0QmV6aWVyLmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1dpZHRoQ2FjaGUuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvV2lkdGhJdGVyYXRvci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1dpZHRoSXRlcmF0b3IuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
V2luZFJ1bGUuaCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkJKHJldmlzaW9uIDEzMzUzMykKKysrIFNvdXJj
ZS9XZWJDb3JlL1RhcmdldC5wcmkJKHdvcmtpbmcgY29weSkKQEAgLTIxODUsNiArMjE4NSw3IEBA
IEhFQURFUlMgKz0gXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3Jt
U3RhdGUuaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2xhdGVUcmFu
c2Zvcm1PcGVyYXRpb24uaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5o
IFwKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9XaWR0aENhY2hlLmggXAogICAgIHBsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZURlY29kZXIuaCBcCiAgICAgcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvYm1wL0JNUEltYWdlUmVhZGVyLmggXAogICAgIHBsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2ljby9JQ09JbWFnZURlY29kZXIuaCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gMTMzNTMzKQorKysgU291cmNlL1dl
YkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTM0
MTM0LDYgKzM0MTM0LDEwIEBACiAJCQkJCT4KIAkJCQk8L0ZpbGU+CiAJCQkJPEZpbGUKKwkJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xXaWR0aENhY2hlLmgiCisJCQkJCT4K
KwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxn
cmFwaGljc1xXaWR0aEl0ZXJhdG9yLmNwcCIKIAkJCQkJPgogCQkJCTwvRmlsZT4KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJl
dmlzaW9uIDEzMzUzMykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzM3LDYgKzMzNyw3IEBACiAJCTE0OTQ3RkZF
MTJGODBDRDIwMEEwRjYzMSAvKiBEb2N1bWVudE9yZGVyZWRNYXAuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0OTQ3RkZDMTJGODBDRDIwMEEwRjYzMSAv
KiBEb2N1bWVudE9yZGVyZWRNYXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkxNDk5M0JFNTBCMkYyQjFDMDA1MDQ5N0YgLyogRm9jdXNDb250cm9s
bGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0
OTkzQkUzMEIyRjJCMUMwMDUwNDk3RiAvKiBGb2N1c0NvbnRyb2xsZXIuY3BwICovOyB9OwogCQkx
NDk5M0JFNjBCMkYyQjFDMDA1MDQ5N0YgLyogRm9jdXNDb250cm9sbGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDk5M0JFNDBCMkYyQjFDMDA1MDQ5
N0YgLyogRm9jdXNDb250cm9sbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJMTRBM0VERTcxNjQ4ODNDRTAwRjRGNDE1IC8qIFdpZHRoQ2FjaGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0QTNFREU2
MTY0ODgzQ0UwMEY0RjQxNSAvKiBXaWR0aENhY2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTRDOUE1RUEwQjNEMTA1RjAwNUEwMjMyIC8qIFNl
dHRpbmdzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDE0QzlBNUU5MEIzRDEwNUYwMDVBMDIzMiAvKiBTZXR0aW5ncy5jcHAgKi87IH07CiAJCTE0Q0Q4
RDgyMTA2QjUyOTAwMEE0NkQyMyAvKiBKU1NoYXJlZFdvcmtlckN1c3RvbS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNENEOEQ4MTEwNkI1MjkwMDBB
NDZEMjMgLyogSlNTaGFyZWRXb3JrZXJDdXN0b20uY3BwICovOyB9OwogCQkxNENGNzhBNDA5RjU4
Q0JGMDBFQjM2NjUgLyogSlNDU1NWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxNENGNzhBMzA5RjU4Q0JGMDBFQjM2NjUgLyogSlNDU1NWYWx1
ZS5jcHAgKi87IH07CkBAIC03NDE5LDYgKzc0MjAsNyBAQAogCQkxNDk0N0ZGQzEyRjgwQ0QyMDBB
MEY2MzEgLyogRG9jdW1lbnRPcmRlcmVkTWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IERvY3VtZW50T3JkZXJlZE1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkxNDk5M0JFMzBCMkYyQjFDMDA1MDQ5N0YgLyogRm9jdXNDb250cm9sbGVyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb2N1c0NvbnRyb2xsZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDk5M0JFNDBCMkYyQjFDMDA1MDQ5N0YgLyogRm9j
dXNDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb2N1c0Nv
bnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTRBM0VERTYxNjQ4ODND
RTAwRjRGNDE1IC8qIFdpZHRoQ2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV2lkdGhDYWNoZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNEE5OEUwNTEz
NjM4NkEyMDBDOUZFRDIgLyogQmxvYi5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gQmxvYi5p
ZGw7IHBhdGggPSBmaWxlYXBpL0Jsb2IuaWRsOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07
CiAJCTE0QkRGNTk3MTM2NTM5MkMwMDE0ODM5MyAvKiBET01GaWxlU3lzdGVtLmlkbCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQ7IG5hbWUgPSBET01GaWxlU3lzdGVtLmlkbDsgcGF0aCA9IE1vZHVsZXMvZmlsZXN5
c3RlbS9ET01GaWxlU3lzdGVtLmlkbDsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OwogCQkx
NEJERjU5QTEzNjUzOTkxMDAxNDgzOTMgLyogRmlsZVJlYWRlci5pZGwgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
OyBuYW1lID0gRmlsZVJlYWRlci5pZGw7IHBhdGggPSBmaWxlYXBpL0ZpbGVSZWFkZXIuaWRsOyBz
b3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CkBAIC0yMDA1NCw2ICsyMDA1Niw3IEBACiAJCQkJ
MUFGODlBNDExNTE4RkRFQTAwRTU0N0I1IC8qIFRpbGVkQmFja2luZy5oICovLAogCQkJCTM3QzI4
QTY3MTBGNjU5Q0MwMDhDNzgxMyAvKiBUeXBlc2V0dGluZ0ZlYXR1cmVzLmggKi8sCiAJCQkJRTRB
RkNGQTQwREFGMjlBMzAwRjVGNTVDIC8qIFVuaXRCZXppZXIuaCAqLywKKwkJCQkxNEEzRURFNjE2
NDg4M0NFMDBGNEY0MTUgLyogV2lkdGhDYWNoZS5oICovLAogCQkJCTkzOUIwMkVDMEVBMkRCQzQw
MEM1NDU3MCAvKiBXaWR0aEl0ZXJhdG9yLmNwcCAqLywKIAkJCQk5MzlCMDJFRDBFQTJEQkM0MDBD
NTQ1NzAgLyogV2lkdGhJdGVyYXRvci5oICovLAogCQkJCTUwMUJBQUE4MTM5NTBFMkMwMEY3QUNF
QiAvKiBXaW5kUnVsZS5oICovLApAQCAtMjU2NzMsNiArMjU2NzYsNyBAQAogCQkJCTUwOTMzMzUw
MTYzQjBFNDMwMDA5OUE2MCAvKiBDdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0LmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1MEQzMjg1ODE2M0IzMTNGMDAxNjExMUUgLyogVmFsaWRhdGVkQ3VzdG9tRmls
dGVyT3BlcmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkzRkZGRjlBOTE1OUQ5QTU1MDAyMEJC
RDUgLyogV2ViS2l0Q1NTVmlld3BvcnRSdWxlLmggaW4gSGVhZGVycyAqLywKKwkJCQkxNEEzRURF
NzE2NDg4M0NFMDBGNEY0MTUgLyogV2lkdGhDYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwog
CQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcAkocmV2aXNpb24gMTMzNTM0
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE5OCwxMyArMTk4LDI5IEBAIGZsb2F0IEZvbnQ6OndpZHRoKGNvbnN0IFRleHRS
dW4mIHJ1biwgSGEKIHsKICAgICBDb2RlUGF0aCBjb2RlUGF0aFRvVXNlID0gY29kZVBhdGgocnVu
KTsKICAgICBpZiAoY29kZVBhdGhUb1VzZSAhPSBDb21wbGV4KSB7Ci0gICAgICAgIC8vIElmIHRo
ZSBjb21wbGV4IHRleHQgaW1wbGVtZW50YXRpb24gY2Fubm90IHJldHVybiBmYWxsYmFjayBmb250
cywgYXZvaWQKLSAgICAgICAgLy8gcmV0dXJuaW5nIHRoZW0gZm9yIHNpbXBsZSB0ZXh0IGFzIHdl
bGwuCi0gICAgICAgIHN0YXRpYyBib29sIHJldHVybkZhbGxiYWNrRm9udHMgPSBjYW5SZXR1cm5G
YWxsYmFja0ZvbnRzRm9yQ29tcGxleFRleHQoKTsKLSAgICAgICAgcmV0dXJuIGZsb2F0V2lkdGhG
b3JTaW1wbGVUZXh0KHJ1biwgcmV0dXJuRmFsbGJhY2tGb250cyA/IGZhbGxiYWNrRm9udHMgOiAw
LCBjb2RlUGF0aFRvVXNlID09IFNpbXBsZVdpdGhHbHlwaE92ZXJmbG93IHx8IChnbHlwaE92ZXJm
bG93ICYmIGdseXBoT3ZlcmZsb3ctPmNvbXB1dGVCb3VuZHMpID8gZ2x5cGhPdmVyZmxvdyA6IDAp
OworICAgICAgICAvLyBUaGUgY29tcGxleCBwYXRoIGlzIG1vcmUgcmVzdHJpY3RpdmUgYWJvdXQg
cmV0dXJuaW5nIGZhbGxiYWNrIGZvbnRzIHRoYW4gdGhlIHNpbXBsZSBwYXRoLCBzbyB3ZSBuZWVk
IGFuIGV4cGxpY2l0IHRlc3QgdG8gbWFrZSB0aGVpciBiZWhhdmlvcnMgbWF0Y2guCisgICAgICAg
IGlmICghY2FuUmV0dXJuRmFsbGJhY2tGb250c0ZvckNvbXBsZXhUZXh0KCkpCisgICAgICAgICAg
ICBmYWxsYmFja0ZvbnRzID0gMDsKKyAgICAgICAgLy8gVGhlIHNpbXBsZSBwYXRoIGNhbiBvcHRp
bWl6ZSB0aGUgY2FzZSB3aGVyZSBnbHlwaCBvdmVyZmxvdyBpcyBub3Qgb2JzZXJ2YWJsZS4KKyAg
ICAgICAgaWYgKGNvZGVQYXRoVG9Vc2UgIT0gU2ltcGxlV2l0aEdseXBoT3ZlcmZsb3cgJiYgKGds
eXBoT3ZlcmZsb3cgJiYgIWdseXBoT3ZlcmZsb3ctPmNvbXB1dGVCb3VuZHMpKQorICAgICAgICAg
ICAgZ2x5cGhPdmVyZmxvdyA9IDA7CiAgICAgfQogCi0gICAgcmV0dXJuIGZsb2F0V2lkdGhGb3JD
b21wbGV4VGV4dChydW4sIGZhbGxiYWNrRm9udHMsIGdseXBoT3ZlcmZsb3cpOworICAgIGJvb2wg
aGFzS2VybmluZ09yTGlnYXR1cmVzID0gdHlwZXNldHRpbmdGZWF0dXJlcygpICYgKEtlcm5pbmcg
fCBMaWdhdHVyZXMpOworICAgIGJvb2wgaGFzV29yZFNwYWNpbmdPckxldHRlclNwYWNpbmcgPSB3
b3JkU3BhY2luZygpIHwgbGV0dGVyU3BhY2luZygpOworICAgIGZsb2F0KiBjYWNoZUVudHJ5ID0g
bV9mb250RmFsbGJhY2tMaXN0LT53aWR0aENhY2hlKCkuYWRkKHJ1biwgc3RkOjpudW1lcmljX2xp
bWl0czxmbG9hdD46OnF1aWV0X05hTigpLCBoYXNLZXJuaW5nT3JMaWdhdHVyZXMsIGhhc1dvcmRT
cGFjaW5nT3JMZXR0ZXJTcGFjaW5nLCBnbHlwaE92ZXJmbG93KTsKKyAgICBpZiAoY2FjaGVFbnRy
eSAmJiAhaXNuYW4oKmNhY2hlRW50cnkpKQorICAgICAgICByZXR1cm4gKmNhY2hlRW50cnk7CisK
KyAgICBmbG9hdCByZXN1bHQ7CisgICAgaWYgKGNvZGVQYXRoVG9Vc2UgPT0gQ29tcGxleCkKKyAg
ICAgICAgcmVzdWx0ID0gZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KHJ1biwgZmFsbGJhY2tGb250
cywgZ2x5cGhPdmVyZmxvdyk7CisgICAgZWxzZQorICAgICAgICByZXN1bHQgPSBmbG9hdFdpZHRo
Rm9yU2ltcGxlVGV4dChydW4sIGZhbGxiYWNrRm9udHMsIGdseXBoT3ZlcmZsb3cpOworCisgICAg
aWYgKGNhY2hlRW50cnkgJiYgKCFmYWxsYmFja0ZvbnRzIHx8IGZhbGxiYWNrRm9udHMtPmlzRW1w
dHkoKSkpCisgICAgICAgICpjYWNoZUVudHJ5ID0gcmVzdWx0OworICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKIGZsb2F0IEZvbnQ6OndpZHRoKGNvbnN0IFRleHRSdW4mIHJ1biwgaW50JiBjaGFyc0Nv
bnN1bWVkLCBTdHJpbmcmIGdseXBoTmFtZSkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRGYWxsYmFja0xpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYWxsYmFja0xpc3QuY3BwCShyZXZpc2lv
biAxMzM1MzMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RmFsbGJh
Y2tMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsNiArNjAsNyBAQCB2b2lkIEZvbnRGYWxs
YmFja0xpc3Q6OmludmFsaWRhdGUoUGFzc1JlCiAgICAgbV9mb250U2VsZWN0b3IgPSBmb250U2Vs
ZWN0b3I7CiAgICAgbV9mb250U2VsZWN0b3JWZXJzaW9uID0gbV9mb250U2VsZWN0b3IgPyBtX2Zv
bnRTZWxlY3Rvci0+dmVyc2lvbigpIDogMDsKICAgICBtX2dlbmVyYXRpb24gPSBmb250Q2FjaGUo
KS0+Z2VuZXJhdGlvbigpOworICAgIG1fd2lkdGhDYWNoZS5jbGVhcigpOwogfQogCiB2b2lkIEZv
bnRGYWxsYmFja0xpc3Q6OnJlbGVhc2VGb250RGF0YSgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250RmFsbGJhY2tMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEZhbGxiYWNrTGlzdC5oCShyZXZpc2lvbiAx
MzM1MzMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RmFsbGJhY2tM
aXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYgKzIzLDcgQEAKIAogI2luY2x1ZGUgIkZvbnRT
ZWxlY3Rvci5oIgogI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCisjaW5jbHVkZSAiV2lkdGhD
YWNoZS5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJl
YWQuaD4KIApAQCAtNzksNiArODAsOCBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgZm9udFNlbGVj
dG9yVmVyc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fZm9udFNlbGVjdG9yVmVyc2lvbjsgfQogICAg
IHVuc2lnbmVkIGdlbmVyYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2dlbmVyYXRpb247IH0KIAor
ICAgIFdpZHRoQ2FjaGUmIHdpZHRoQ2FjaGUoKSBjb25zdCB7IHJldHVybiBtX3dpZHRoQ2FjaGU7
IH0KKwogcHJpdmF0ZToKICAgICBGb250RmFsbGJhY2tMaXN0KCk7CiAKQEAgLTEwMiw2ICsxMDUs
NyBAQCBwcml2YXRlOgogICAgIG11dGFibGUgR2x5cGhQYWdlVHJlZU5vZGUqIG1fcGFnZVplcm87
CiAgICAgbXV0YWJsZSBjb25zdCBTaW1wbGVGb250RGF0YSogbV9jYWNoZWRQcmltYXJ5U2ltcGxl
Rm9udERhdGE7CiAgICAgUmVmUHRyPEZvbnRTZWxlY3Rvcj4gbV9mb250U2VsZWN0b3I7CisgICAg
bXV0YWJsZSBXaWR0aENhY2hlIG1fd2lkdGhDYWNoZTsKICAgICB1bnNpZ25lZCBtX2ZvbnRTZWxl
Y3RvclZlcnNpb247CiAgICAgbXV0YWJsZSBpbnQgbV9mYW1pbHlJbmRleDsKICAgICB1bnNpZ25l
ZCBzaG9ydCBtX2dlbmVyYXRpb247CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9XaWR0aENhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvV2lkdGhDYWNoZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvV2lkdGhDYWNoZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE5NiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IFdpZHRoQ2FjaGVfaAorI2RlZmluZSBXaWR0aENhY2hlX2gKKworI2luY2x1ZGUgIlRleHRSdW4u
aCIKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoRnVuY3Rpb25z
Lmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1N0cmluZ0hhc2hlci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0
cnVjdCBHbHlwaE92ZXJmbG93OworCitjbGFzcyBXaWR0aENhY2hlIHsKK3ByaXZhdGU6CisgICAg
Ly8gVXNlZCB0byBvcHRpbWl6ZSBzbWFsbCBzdHJpbmdzIGFzIGhhc2ggdGFibGUga2V5cy4gQXZv
aWRzIG1hbGxvYydpbmcgYW4gb3V0LW9mLWxpbmUgU3RyaW5nSW1wbC4KKyAgICBjbGFzcyBTbWFs
bFN0cmluZ0tleSB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgdW5zaWduZWQgY2FwYWNp
dHkoKSB7IHJldHVybiBzX2NhcGFjaXR5OyB9CisKKyAgICAgICAgU21hbGxTdHJpbmdLZXkoKQor
ICAgICAgICAgICAgOiBtX2xlbmd0aChzX2VtcHR5VmFsdWVMZW5ndGgpCisgICAgICAgIHsKKyAg
ICAgICAgfQorCisgICAgICAgIFNtYWxsU3RyaW5nS2V5KFdURjo6SGFzaFRhYmxlRGVsZXRlZFZh
bHVlVHlwZSkKKyAgICAgICAgICAgIDogbV9sZW5ndGgoc19kZWxldGVkVmFsdWVMZW5ndGgpCisg
ICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+IFNtYWxsU3RyaW5nS2V5KENoYXJhY3RlclR5cGUqIGNoYXJhY3RlcnMsIHVuc2lnbmVk
IHNob3J0IGxlbmd0aCkKKyAgICAgICAgICAgIDogbV9sZW5ndGgobGVuZ3RoKQorICAgICAgICB7
CisgICAgICAgICAgICBBU1NFUlQobGVuZ3RoIDw9IHNfY2FwYWNpdHkpOworICAgICAgICAgICAg
U3RyaW5nSGFzaGVyIGhhc2hlcjsKKworICAgICAgICAgICAgYm9vbCByZW1haW5kZXIgPSBsZW5n
dGggJiAxOworICAgICAgICAgICAgbGVuZ3RoID4+PSAxOworCisgICAgICAgICAgICB1bnNpZ25l
ZCBpID0gMDsKKyAgICAgICAgICAgIHdoaWxlIChsZW5ndGgtLSkgeworICAgICAgICAgICAgICAg
IG1fY2hhcmFjdGVyc1tpXSA9IGNoYXJhY3RlcnNbaV07CisgICAgICAgICAgICAgICAgbV9jaGFy
YWN0ZXJzW2kgKyAxXSA9IGNoYXJhY3RlcnNbaSArIDFdOworICAgICAgICAgICAgICAgIGhhc2hl
ci5hZGRDaGFyYWN0ZXJzKGNoYXJhY3RlcnNbaV0sIGNoYXJhY3RlcnNbaSArIDFdKTsKKyAgICAg
ICAgICAgICAgICBpICs9IDI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChyZW1h
aW5kZXIpIHsKKyAgICAgICAgICAgICAgICBtX2NoYXJhY3RlcnNbaV0gPSBjaGFyYWN0ZXJzW2ld
OworICAgICAgICAgICAgICAgIGhhc2hlci5hZGRDaGFyYWN0ZXIoY2hhcmFjdGVyc1tpXSk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1faGFzaCA9IGhhc2hlci5oYXNoKCk7CisgICAg
ICAgIH0KKworICAgICAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycygpIGNvbnN0IHsgcmV0dXJu
IG1fY2hhcmFjdGVyczsgfQorICAgICAgICB1bnNpZ25lZCBzaG9ydCBsZW5ndGgoKSBjb25zdCB7
IHJldHVybiBtX2xlbmd0aDsgfQorICAgICAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QgeyByZXR1
cm4gbV9oYXNoOyB9CisKKyAgICAgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fbGVuZ3RoID09IHNfZGVsZXRlZFZhbHVlTGVuZ3RoOyB9CisgICAgICAg
IGJvb2wgaXNIYXNoVGFibGVFbXB0eVZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGggPT0g
c19lbXB0eVZhbHVlTGVuZ3RoOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBzdGF0aWMgY29u
c3QgdW5zaWduZWQgc19jYXBhY2l0eSA9IDE1OworICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgc19lbXB0eVZhbHVlTGVuZ3RoID0gc19jYXBhY2l0eSArIDE7CisgICAgICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBzX2RlbGV0ZWRWYWx1ZUxlbmd0aCA9IHNfY2FwYWNpdHkgKyAyOworCisg
ICAgICAgIHVuc2lnbmVkIG1faGFzaDsKKyAgICAgICAgdW5zaWduZWQgc2hvcnQgbV9sZW5ndGg7
CisgICAgICAgIFVDaGFyIG1fY2hhcmFjdGVyc1tzX2NhcGFjaXR5XTsKKyAgICB9OworCisgICAg
c3RydWN0IFNtYWxsU3RyaW5nS2V5SGFzaCB7CisgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNo
KGNvbnN0IFNtYWxsU3RyaW5nS2V5JiBrZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7IH0KKyAgICAg
ICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgU21hbGxTdHJpbmdLZXkmIGEsIGNvbnN0IFNtYWxs
U3RyaW5nS2V5JiBiKSB7IHJldHVybiBhID09IGI7IH0KKyAgICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOyAvLyBFbXB0eSBhbmQgZGVs
ZXRlZCB2YWx1ZXMgaGF2ZSBsZW5ndGhzIHRoYXQgYXJlIG5vdCBlcXVhbCB0byBhbnkgdmFsaWQg
bGVuZ3RoLgorICAgIH07CisKKyAgICBzdHJ1Y3QgU21hbGxTdHJpbmdLZXlIYXNoVHJhaXRzIDog
V1RGOjpTaW1wbGVDbGFzc0hhc2hUcmFpdHM8U21hbGxTdHJpbmdLZXk+IHsKKyAgICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaGFzSXNFbXB0eVZhbHVlRnVuY3Rpb24gPSB0cnVlOworICAgICAgICBz
dGF0aWMgYm9vbCBpc0VtcHR5VmFsdWUoY29uc3QgU21hbGxTdHJpbmdLZXkmIGtleSkgeyByZXR1
cm4ga2V5LmlzSGFzaFRhYmxlRW1wdHlWYWx1ZSgpOyB9CisgICAgICAgIHN0YXRpYyBjb25zdCBi
b29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSBmYWxzZTsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBt
aW5pbXVtVGFibGVTaXplID0gMTY7CisgICAgfTsKKworICAgIGZyaWVuZCBib29sIG9wZXJhdG9y
PT0oY29uc3QgU21hbGxTdHJpbmdLZXkmLCBjb25zdCBTbWFsbFN0cmluZ0tleSYpOworCitwdWJs
aWM6CisgICAgV2lkdGhDYWNoZSgpCisgICAgICAgIDogbV9pbnRlcnZhbChzX21heEludGVydmFs
KQorICAgICAgICAsIG1fY291bnRkb3duKG1faW50ZXJ2YWwpCisgICAgeworICAgIH0KKworICAg
IGZsb2F0KiBhZGQoY29uc3QgVGV4dFJ1biYgcnVuLCBmbG9hdCBlbnRyeSwgYm9vbCBoYXNLZXJu
aW5nT3JMaWdhdHVyZXMsIGJvb2wgaGFzV29yZFNwYWNpbmdPckxldHRlclNwYWNpbmcsIEdseXBo
T3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cpCisgICAgeworICAgICAgICAvLyBUaGUgd2lkdGggY2Fj
aGUgaXMgbm90IHJlYWxseSBwcm9maXRhYmxlIHVubGVzcyB3ZSdyZSBkb2luZyBleHBlbnNpdmUg
Z2x5cGggdHJhbnNmb3JtYXRpb25zLgorICAgICAgICBpZiAoIWhhc0tlcm5pbmdPckxpZ2F0dXJl
cykKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAvLyBXb3JkIHNwYWNpbmcgYW5kIGxl
dHRlciBzcGFjaW5nIGNhbiBjaGFuZ2UgdGhlIHdpZHRoIG9mIGEgd29yZC4KKyAgICAgICAgaWYg
KGhhc1dvcmRTcGFjaW5nT3JMZXR0ZXJTcGFjaW5nKQorICAgICAgICAgICAgcmV0dXJuIDA7Cisg
ICAgICAgIC8vIFNpbmNlIHRoaXMgaXMganVzdCBhIHdpZHRoIGNhY2hlLCB3ZSBkb24ndCBoYXZl
IGVub3VnaCBpbmZvcm1hdGlvbiB0byBzYXRpc2Z5IGdseXBoIHF1ZXJpZXMuCisgICAgICAgIGlm
IChnbHlwaE92ZXJmbG93KQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIC8vIElmIHdl
IGFsbG93IHRhYnMgYW5kIGEgdGFiIG9jY3VycyBpbnNpZGUgYSB3b3JkLCB0aGUgd2lkdGggb2Yg
dGhlIHdvcmQgdmFyaWVzIGJhc2VkIG9uIGl0cyBwb3NpdGlvbiBvbiB0aGUgbGluZS4KKyAgICAg
ICAgaWYgKHJ1bi5hbGxvd1RhYnMoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBp
ZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJ1bi5sZW5ndGgoKSkgPiBTbWFsbFN0cmluZ0tleTo6
Y2FwYWNpdHkoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgIGlmIChtX2NvdW50
ZG93biA+IDApIHsKKyAgICAgICAgICAgIC0tbV9jb3VudGRvd247CisgICAgICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBhZGRTbG93Q2FzZShydW4sIGVudHJ5
KTsKKyAgICB9CisKKyAgICBmbG9hdCogYWRkU2xvd0Nhc2UoY29uc3QgVGV4dFJ1biYgcnVuLCBm
bG9hdCBlbnRyeSkKKyAgICB7CisgICAgICAgIFNtYWxsU3RyaW5nS2V5IHNtYWxsU3RyaW5nS2V5
OworICAgICAgICBpZiAocnVuLmlzOEJpdCgpKQorICAgICAgICAgICAgc21hbGxTdHJpbmdLZXkg
PSBTbWFsbFN0cmluZ0tleShydW4uY2hhcmFjdGVyczgoKSwgcnVuLmxlbmd0aCgpKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgc21hbGxTdHJpbmdLZXkgPSBTbWFsbFN0cmluZ0tleShydW4u
Y2hhcmFjdGVyczE2KCksIHJ1bi5sZW5ndGgoKSk7CisKKyAgICAgICAgTWFwOjpBZGRSZXN1bHQg
YWRkUmVzdWx0ID0gbV9tYXAuYWRkKHNtYWxsU3RyaW5nS2V5LCBlbnRyeSk7CisKKyAgICAgICAg
Ly8gQ2FjaGUgaGl0OiByYW1wIHVwIGJ5IHNhbXBsaW5nIHRoZSBuZXh0IGZldyB3b3Jkcy4KKyAg
ICAgICAgaWYgKCFhZGRSZXN1bHQuaXNOZXdFbnRyeSkgeworICAgICAgICAgICAgbV9pbnRlcnZh
bCA9IHNfbWluSW50ZXJ2YWw7CisgICAgICAgICAgICByZXR1cm4gJmFkZFJlc3VsdC5pdGVyYXRv
ci0+dmFsdWU7CisgICAgICAgIH0KKworICAgICAgICAvLyBDYWNoZSBtaXNzOiByYW1wIGRvd24g
YnkgaW5jcmVhc2luZyBvdXIgc2FtcGxpbmcgaW50ZXJ2YWwuCisgICAgICAgIGlmIChtX2ludGVy
dmFsIDwgc19tYXhJbnRlcnZhbCkKKyAgICAgICAgICAgICsrbV9pbnRlcnZhbDsKKyAgICAgICAg
bV9jb3VudGRvd24gPSBtX2ludGVydmFsOworCisgICAgICAgIGlmIChtX21hcC5zaXplKCkgPCBz
X21heFNpemUpCisgICAgICAgICAgICByZXR1cm4gJmFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7
CisKKyAgICAgICAgbV9tYXAuY2xlYXIoKTsgLy8gTm8gbmVlZCB0byBiZSBmYW5jeTogd2UncmUg
anVzdCB0cnlpbmcgdG8gYXZvaWQgcGF0aG9sb2dpY2FsIGdyb3d0aC4KKyAgICAgICAgcmV0dXJu
IDA7CisgICAgfQorCisgICAgdm9pZCBjbGVhcigpIHsgbV9tYXAuY2xlYXIoKTsgfQorCitwcml2
YXRlOgorICAgIHR5cGVkZWYgSGFzaE1hcDxTbWFsbFN0cmluZ0tleSwgZmxvYXQsIFNtYWxsU3Ry
aW5nS2V5SGFzaCwgU21hbGxTdHJpbmdLZXlIYXNoVHJhaXRzPiBNYXA7CisgICAgc3RhdGljIGNv
bnN0IGludCBzX21pbkludGVydmFsID0gLTM7IC8vIEEgY2FjaGUgaGl0IHBheXMgZm9yIGFib3V0
IDMgY2FjaGUgbWlzc2VzLgorICAgIHN0YXRpYyBjb25zdCBpbnQgc19tYXhJbnRlcnZhbCA9IDIw
OyAvLyBTYW1wbGluZyBhdCB0aGlzIGludGVydmFsIGhhcyBhbG1vc3Qgbm8gb3ZlcmhlYWQuCisg
ICAgc3RhdGljIGNvbnN0IGludCBzX21heFNpemUgPSA1MDAwMDA7IC8vIEp1c3QgZW5vdWdoIHRv
IGd1YXJkIGFnYWluc3QgcGF0aG9sb2dpY2FsIGdyb3d0aC4KKworICAgIGludCBtX2ludGVydmFs
OworICAgIGludCBtX2NvdW50ZG93bjsKKyAgICBNYXAgbV9tYXA7Cit9OworCitpbmxpbmUgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IFdpZHRoQ2FjaGU6OlNtYWxsU3RyaW5nS2V5JiBhLCBjb25zdCBX
aWR0aENhY2hlOjpTbWFsbFN0cmluZ0tleSYgYikKK3sKKyAgICBpZiAoYS5sZW5ndGgoKSAhPSBi
Lmxlbmd0aCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIFdURjo6ZXF1YWwo
YS5jaGFyYWN0ZXJzKCksIGIuY2hhcmFjdGVycygpLCBhLmxlbmd0aCgpKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gV2lkdGhDYWNoZV9oCg==
</data>
<flag name="review"
          id="187086"
          type_id="1"
          status="+"
          setter="mitz"
    />
          </attachment>
      

    </bug>

</bugzilla>