<?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>140010</bug_id>
          
          <creation_ts>2014-12-30 16:54:42 -0800</creation_ts>
          <short_desc>Move &apos;font-size&apos; CSS property to the new StyleBuilder</short_desc>
          <delta_ts>2015-01-02 11:53:49 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>CSS</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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>137910</dependson>
          <blocked>140034</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1058220</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-12-30 16:54:42 -0800</bug_when>
    <thetext>Move &apos;font-size&apos; CSS property to the new StyleBuilder</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1058222</commentid>
    <comment_count>1</comment_count>
      <attachid>243833</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-12-30 18:09:04 -0800</bug_when>
    <thetext>Created attachment 243833
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1058303</commentid>
    <comment_count>2</comment_count>
      <attachid>243833</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-12-31 20:41:38 -0800</bug_when>
    <thetext>Comment on attachment 243833
Patch

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

My comments are mostly about the code you are moving.

&gt; Source/WebCore/css/StyleBuilderCustom.h:1286
&gt; +    fontDescription.setKeywordSize(CSSValueMedium - CSSValueXxSmall + 1);

It’s irritating that this trick of x - CSSValueXxSmall + 1 is done in at least two places without a comment. I’d rather have this be a helper function that does things like range checking, or even static asserts that all the values are consecutive.

&gt; Source/WebCore/css/StyleBuilderCustom.h:1347
&gt; +    float size = 0;

It would be nicer to define parentSize and parentIsAbsoluteSize right above the paragraph where they are set up, rather than having this and a blank line in between.

So we should declare size lower down in the function, after the if statement. Also, I don’t think we need to initialize it to zero; it’s set in every code path. Or we could initialize it to -1 and then we could get rid of the default/return and the else/return.

&gt; Source/WebCore/css/StyleBuilderCustom.h:1377
&gt; +        case CSSValueWebkitRubyText: {
&gt; +            float rubyTextSizeMultiplier = determineRubyTextSizeMultiplier(styleResolver);
&gt; +            size = rubyTextSizeMultiplier * parentSize;
&gt; +            break;

This would read better without the local variable and the braces:

    size = determineRubyTextSizeMultiplier(styleResolver) * parentSize;

&gt; Source/WebCore/css/StyleBuilderCustom.h:1382
&gt; +        fontDescription.setIsAbsoluteSize(parentIsAbsoluteSize &amp;&amp; (ident == CSSValueLarger || ident == CSSValueSmaller || ident == CSSValueWebkitRubyText));

It’s annoying that this is at the end the if clause but ...

&gt; Source/WebCore/css/StyleBuilderCustom.h:1384
&gt; +        fontDescription.setIsAbsoluteSize(parentIsAbsoluteSize || !(primitiveValue.isPercentage() || primitiveValue.isFontRelativeLength()));

... this is at the beginning of the else clause. They should be formatted in a consistent way.

&gt; Source/WebCore/css/StyleBuilderCustom.h:1392
&gt; +            Ref&lt;CalculationValue&gt; calculationValue { primitiveValue.cssCalcValue()-&gt;createCalculationValue(styleResolver.state().cssToLengthConversionData().copyWithAdjustedZoom(1.0f)) };
&gt; +            size = calculationValue-&gt;evaluate(parentSize);

If you merged these into a single line of code, it would only be 5 characters longer than the first line here. I suggest we do it all in one line. Or if we really want to break it into two lines, I think we could choose a different subexpression, like the argument to createCalculationValue.

&gt; Source/WebCore/css/StyleBuilderCustom.h:1401
&gt; +    // Overly large font sizes will cause crashes on some platforms (such as Windows).
&gt; +    // Cap font size here to make sure that doesn&apos;t happen.

I think this comment would be better up where the maximumAllowedFontSize constant is defined, rather than here where it’s used.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1058308</commentid>
    <comment_count>3</comment_count>
      <attachid>243857</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-12-31 22:33:11 -0800</bug_when>
    <thetext>Created attachment 243857
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1058309</commentid>
    <comment_count>4</comment_count>
      <attachid>243833</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-12-31 22:34:00 -0800</bug_when>
    <thetext>Comment on attachment 243833
Patch

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

&gt;&gt; Source/WebCore/css/StyleBuilderCustom.h:1286
&gt;&gt; +    fontDescription.setKeywordSize(CSSValueMedium - CSSValueXxSmall + 1);
&gt; 
&gt; It’s irritating that this trick of x - CSSValueXxSmall + 1 is done in at least two places without a comment. I’d rather have this be a helper function that does things like range checking, or even static asserts that all the values are consecutive.

Ok, I added setKeywordSizeFromIdentifier() / keywordSizeAsIdentifier() setter / getter on FontDescription and refactored the code base to use them. Let me know if this looks OK.

&gt;&gt; Source/WebCore/css/StyleBuilderCustom.h:1347
&gt;&gt; +    float size = 0;
&gt; 
&gt; It would be nicer to define parentSize and parentIsAbsoluteSize right above the paragraph where they are set up, rather than having this and a blank line in between.
&gt; 
&gt; So we should declare size lower down in the function, after the if statement. Also, I don’t think we need to initialize it to zero; it’s set in every code path. Or we could initialize it to -1 and then we could get rid of the default/return and the else/return.

Done.

&gt;&gt; Source/WebCore/css/StyleBuilderCustom.h:1377
&gt;&gt; +            break;
&gt; 
&gt; This would read better without the local variable and the braces:
&gt; 
&gt;     size = determineRubyTextSizeMultiplier(styleResolver) * parentSize;

Done.

&gt;&gt; Source/WebCore/css/StyleBuilderCustom.h:1384
&gt;&gt; +        fontDescription.setIsAbsoluteSize(parentIsAbsoluteSize || !(primitiveValue.isPercentage() || primitiveValue.isFontRelativeLength()));
&gt; 
&gt; ... this is at the beginning of the else clause. They should be formatted in a consistent way.

Ok, done.

&gt;&gt; Source/WebCore/css/StyleBuilderCustom.h:1392
&gt;&gt; +            size = calculationValue-&gt;evaluate(parentSize);
&gt; 
&gt; If you merged these into a single line of code, it would only be 5 characters longer than the first line here. I suggest we do it all in one line. Or if we really want to break it into two lines, I think we could choose a different subexpression, like the argument to createCalculationValue.

Now on one line.

&gt;&gt; Source/WebCore/css/StyleBuilderCustom.h:1401
&gt;&gt; +    // Cap font size here to make sure that doesn&apos;t happen.
&gt; 
&gt; I think this comment would be better up where the maximumAllowedFontSize constant is defined, rather than here where it’s used.

There is already such comment there. I removed this comment here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1058360</commentid>
    <comment_count>5</comment_count>
      <attachid>243857</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-01-01 15:14:26 -0800</bug_when>
    <thetext>Comment on attachment 243857
Patch

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

&gt; Source/WebCore/platform/graphics/FontDescription.h:128
&gt; +    CSSValueID keywordSizeAsIdentifier() const

Darin, do the new setter and getter look OK?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1058453</commentid>
    <comment_count>6</comment_count>
      <attachid>243857</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-01-02 10:45:30 -0800</bug_when>
    <thetext>Comment on attachment 243857
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/FontDescription.h:128
&gt;&gt; +    CSSValueID keywordSizeAsIdentifier() const
&gt; 
&gt; Darin, do the new setter and getter look OK?

Sure, that looks OK to me. I would have done the static_assert of each individual value myself, but overall looks good.

&gt; Source/WebCore/platform/graphics/FontDescription.h:165
&gt; +        ASSERT(size &gt;= 0 &amp;&amp; size &lt;= 8);

All unsigned values are &gt;= 0, so that half of the assert is pointless.

Separately, I would suggest that any time you write an assert with &amp;&amp; you split it into two assertions instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1058461</commentid>
    <comment_count>7</comment_count>
      <attachid>243904</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-01-02 11:13:46 -0800</bug_when>
    <thetext>Created attachment 243904
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1058466</commentid>
    <comment_count>8</comment_count>
      <attachid>243904</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-02 11:53:44 -0800</bug_when>
    <thetext>Comment on attachment 243904
Patch

Clearing flags on attachment: 243904

Committed r177866: &lt;http://trac.webkit.org/changeset/177866&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1058467</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-02 11:53:49 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>243833</attachid>
            <date>2014-12-30 18:09:04 -0800</date>
            <delta_ts>2014-12-31 22:33:08 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-140010-20141230180906.patch</filename>
            <type>text/plain</type>
            <size>18822</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc3ODI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjQ4MWUwOTk2N2I4NjZl
NzQyMjljZWU2NmI3NTIxNWM2NjcyMjQwMS4uNjg1MGY4NzU0OTJlYWRjNTY1OTk2ODA1ZmMwZWQw
MzQ2ODNjNTJkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDMzIEBACiAyMDE0LTEyLTMwICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKKyAgICAgICAgTW92ZSAnZm9udC1zaXplJyBD
U1MgcHJvcGVydHkgdG8gdGhlIG5ldyBTdHlsZUJ1aWxkZXIKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MDAxMAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmUgJ2ZvbnQtc2l6ZScgQ1NTIHByb3BlcnR5
IHRvIHRoZSBuZXcgU3R5bGVCdWlsZGVyIGJ5IHVzaW5nIGN1c3RvbQorICAgICAgICBjb2RlLgor
CisgICAgICAgICogY3NzL0NTU1Byb3BlcnR5TmFtZXMuaW46CisgICAgICAgICogY3NzL0RlcHJl
Y2F0ZWRTdHlsZUJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGVwcmVjYXRlZFN0eWxl
QnVpbGRlcjo6RGVwcmVjYXRlZFN0eWxlQnVpbGRlcik6CisgICAgICAgIChXZWJDb3JlOjpBcHBs
eVByb3BlcnR5Rm9udFNpemU6OmxhcmdlckZvbnRTaXplKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkFwcGx5UHJvcGVydHlGb250U2l6ZTo6c21hbGxlckZvbnRTaXplKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlGb250U2l6ZTo6YXBwbHlJbmhlcml0VmFs
dWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUZvbnRTaXplOjph
cHBseUluaXRpYWxWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3Bl
cnR5Rm9udFNpemU6OmRldGVybWluZVJ1YnlUZXh0U2l6ZU11bHRpcGxpZXIpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUZvbnRTaXplOjphcHBseVZhbHVlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlGb250U2l6ZTo6Y3JlYXRlSGFu
ZGxlcik6IERlbGV0ZWQuCisgICAgICAgICogY3NzL1N0eWxlQnVpbGRlckN1c3RvbS5oOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxGb250U2l6ZSk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdEZvbnRT
aXplKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6bGFyZ2VyRm9udFNp
emUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjpzbWFsbGVyRm9udFNp
emUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjpkZXRlcm1pbmVSdWJ5
VGV4dFNpemVNdWx0aXBsaWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3Rv
bTo6YXBwbHlWYWx1ZUZvbnRTaXplKToKKworMjAxNC0xMi0zMCAgQ2hyaXMgRHVtZXogIDxjZHVt
ZXpAYXBwbGUuY29tPgorCiAgICAgICAgIE1vdmUgZm9udC1yZWxhdGVkIENTUyBwcm9wZXJ0aWVz
IHRvIHRoZSBuZXcgU3R5bGVCdWlsZGVyCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNDAwMDgKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1Byb3BlcnR5TmFtZXMuaW4gYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJvcGVydHlOYW1l
cy5pbgppbmRleCBkNzcwZWMxOWJjODI2MGY5ZjA5MTMxOTk5OWI4Y2ZiMjZiMDJiZGU2Li4wNjI2
ZGQ2MmUwYjg2OGM3NzQyNWFmM2RlMDA1MTIwODBhODI5Y2E5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTUHJvcGVydHlOYW1lcy5pbgorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTUHJvcGVydHlOYW1lcy5pbgpAQCAtODksNyArODksNyBAQCBkaXJlY3Rpb24gW0luaGVyaXRl
ZCwgQ3VzdG9tPVZhbHVlXQogZGlzcGxheSBbQ3VzdG9tPUluaGVyaXR8VmFsdWVdCiBmb250IFtJ
bmhlcml0ZWQsIExlZ2FjeVN0eWxlQnVpbGRlcl0KIGZvbnQtZmFtaWx5IFtJbmhlcml0ZWQsIEN1
c3RvbT1BbGxdCi1mb250LXNpemUgW0luaGVyaXRlZCwgTGVnYWN5U3R5bGVCdWlsZGVyXQorZm9u
dC1zaXplIFtJbmhlcml0ZWQsIEN1c3RvbT1BbGxdCiBmb250LXN0eWxlIFtJbmhlcml0ZWQsIEZv
bnRQcm9wZXJ0eSwgVHlwZU5hbWU9Rm9udEl0YWxpYywgTmFtZUZvck1ldGhvZHM9SXRhbGljXQog
Zm9udC12YXJpYW50IFtJbmhlcml0ZWQsIEZvbnRQcm9wZXJ0eSwgVHlwZU5hbWU9Rm9udFNtYWxs
Q2FwcywgTmFtZUZvck1ldGhvZHM9U21hbGxDYXBzXQogZm9udC13ZWlnaHQgW0luaGVyaXRlZCwg
Q3VzdG9tPUFsbF0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9EZXByZWNhdGVkU3R5
bGVCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9EZXByZWNhdGVkU3R5bGVCdWlsZGVy
LmNwcAppbmRleCAxNGVmMjc2YWNkNGM3NTljMjgzZjY0MzkxNDU4MTkxNzNmZDQ2ODc5Li41M2Nh
NTk3ZWJhOTQ4NDgwNDRkYWYwMzliOGY5YmRjMzk0N2NjZGJmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvRGVwcmVjYXRlZFN0eWxlQnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL0RlcHJlY2F0ZWRTdHlsZUJ1aWxkZXIuY3BwCkBAIC0zNCwxMyArMzQsMTAgQEAKICNp
bmNsdWRlICJDU1NWYWx1ZUxpc3QuaCIKICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgogI2luY2x1
ZGUgIlJlbmRlclN0eWxlLmgiCi0jaW5jbHVkZSAiU3R5bGVGb250U2l6ZUZ1bmN0aW9ucy5oIgog
I2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi11c2lu
ZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwotCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KIHN0cnVjdCBG
aWxsTGF5ZXJBY2Nlc3NvclR5cGVzIHsKICAgICB0eXBlZGVmIFQgU2V0dGVyOwpAQCAtMTQxLDE0
OCArMTM4LDYgQEAgcHVibGljOgogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFu
ZGxlcigpIHsgcmV0dXJuIFByb3BlcnR5SGFuZGxlcigmYXBwbHlJbmhlcml0VmFsdWUsICZhcHBs
eUluaXRpYWxWYWx1ZSwgJmFwcGx5VmFsdWUpOyB9CiB9OwogCi1jbGFzcyBBcHBseVByb3BlcnR5
Rm9udFNpemUgewotcHJpdmF0ZToKLSAgICAvLyBXaGVuIHRoZSBDU1Mga2V5d29yZCAibGFyZ2Vy
IiBpcyB1c2VkLCB0aGlzIGZ1bmN0aW9uIHdpbGwgYXR0ZW1wdCB0byBtYXRjaCB3aXRoaW4gdGhl
IGtleXdvcmQKLSAgICAvLyB0YWJsZSwgYW5kIGZhaWxpbmcgdGhhdCwgd2lsbCBzaW1wbHkgbXVs
dGlwbHkgYnkgMS4yLgotICAgIHN0YXRpYyBmbG9hdCBsYXJnZXJGb250U2l6ZShmbG9hdCBzaXpl
KQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IEZpZ3VyZSBvdXQgd2hlcmUgd2UgZmFsbCBpbiB0
aGUgc2l6ZSByYW5nZXMgKHh4LXNtYWxsIHRvIHh4eC1sYXJnZSkgYW5kIHNjYWxlIHVwIHRvCi0g
ICAgICAgIC8vIHRoZSBuZXh0IHNpemUgbGV2ZWwuCi0gICAgICAgIHJldHVybiBzaXplICogMS4y
ZjsKLSAgICB9Ci0KLSAgICAvLyBMaWtlIHRoZSBwcmV2aW91cyBmdW5jdGlvbiwgYnV0IGZvciB0
aGUga2V5d29yZCAic21hbGxlciIuCi0gICAgc3RhdGljIGZsb2F0IHNtYWxsZXJGb250U2l6ZShm
bG9hdCBzaXplKQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IEZpZ3VyZSBvdXQgd2hlcmUgd2Ug
ZmFsbCBpbiB0aGUgc2l6ZSByYW5nZXMgKHh4LXNtYWxsIHRvIHh4eC1sYXJnZSkgYW5kIHNjYWxl
IGRvd24gdG8KLSAgICAgICAgLy8gdGhlIG5leHQgc2l6ZSBsZXZlbC4KLSAgICAgICAgcmV0dXJu
IHNpemUgLyAxLjJmOwotICAgIH0KLXB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVy
aXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQotICAg
IHsKLSAgICAgICAgZmxvYXQgc2l6ZSA9IHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPmZv
bnREZXNjcmlwdGlvbigpLnNwZWNpZmllZFNpemUoKTsKLQotICAgICAgICBpZiAoc2l6ZSA8IDAp
Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNj
cmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOwotICAg
ICAgICBmb250RGVzY3JpcHRpb24uc2V0S2V5d29yZFNpemUoc3R5bGVSZXNvbHZlci0+cGFyZW50
U3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCkua2V5d29yZFNpemUoKSk7Ci0gICAgICAgIHN0eWxl
UmVzb2x2ZXItPnNldEZvbnRTaXplKGZvbnREZXNjcmlwdGlvbiwgc2l6ZSk7Ci0gICAgICAgIHN0
eWxlUmVzb2x2ZXItPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NT
UHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKLSAgICB7Ci0gICAgICAg
IEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLT5zdHlsZSgp
LT5mb250RGVzY3JpcHRpb24oKTsKLSAgICAgICAgZmxvYXQgc2l6ZSA9IFN0eWxlOjpmb250U2l6
ZUZvcktleXdvcmQoQ1NTVmFsdWVNZWRpdW0sIGZvbnREZXNjcmlwdGlvbi51c2VGaXhlZERlZmF1
bHRTaXplKCksIHN0eWxlUmVzb2x2ZXItPmRvY3VtZW50KCkpOwotCi0gICAgICAgIGlmIChzaXpl
IDwgMCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0
S2V5d29yZFNpemUoQ1NTVmFsdWVNZWRpdW0gLSBDU1NWYWx1ZVh4U21hbGwgKyAxKTsKLSAgICAg
ICAgc3R5bGVSZXNvbHZlci0+c2V0Rm9udFNpemUoZm9udERlc2NyaXB0aW9uLCBzaXplKTsKLSAg
ICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZmxvYXQgZGV0ZXJtaW5lUnVi
eVRleHRTaXplTXVsdGlwbGllcihTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQotICAgIHsK
LSAgICAgICAgaWYgKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnJ1YnlQb3NpdGlvbigpICE9IFJ1
YnlQb3NpdGlvbkludGVyQ2hhcmFjdGVyKQotICAgICAgICAgICAgcmV0dXJuIDAuNWY7Ci0gICAg
ICAgIAotICAgICAgICBFbGVtZW50KiBlbGVtZW50ID0gc3R5bGVSZXNvbHZlci0+c3RhdGUoKS5l
bGVtZW50KCk7Ci0gICAgICAgIGlmIChlbGVtZW50ID09IG51bGxwdHIpCi0gICAgICAgICAgICBy
ZXR1cm4gMC4yNWY7Ci0gICAgICAgIAotICAgICAgICAvLyBGSVhNRTogVGhpcyBoYWNrIGlzIHRv
IGVuc3VyZSB0b25lIG1hcmtzIGFyZSB0aGUgc2FtZSBzaXplIGFzCi0gICAgICAgIC8vIHRoZSBi
b3BvbW9mby4gVGhpcyBjb2RlIHdpbGwgZ28gYXdheSBpZiB3ZSBtYWtlIGEgc3BlY2lhbCByZW5k
ZXJlcgotICAgICAgICAvLyBmb3IgdGhlIHRvbmUgbWFya3MgZXZlbnR1YWxseS4KLSAgICAgICAg
Zm9yIChjb25zdCBFbGVtZW50KiBjdXJyRWxlbWVudCA9IGVsZW1lbnQtPnBhcmVudEVsZW1lbnQo
KTsgY3VyckVsZW1lbnQ7IGN1cnJFbGVtZW50ID0gY3VyckVsZW1lbnQtPnBhcmVudEVsZW1lbnQo
KSkgewotICAgICAgICAgICAgaWYgKGN1cnJFbGVtZW50LT5oYXNUYWdOYW1lKHJ0VGFnKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gMS4wZjsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gMC4y
NWY7Ci0gICAgfQotICAgIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJ
RCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQotICAgIHsK
LSAgICAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkKLSAgICAgICAgICAg
IHJldHVybjsKLQotICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBk
b3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKLQotICAgICAgICBGb250RGVzY3Jp
cHRpb24gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+Zm9udERlc2Ny
aXB0aW9uKCk7Ci0gICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRLZXl3b3JkU2l6ZSgwKTsKLSAg
ICAgICAgZmxvYXQgcGFyZW50U2l6ZSA9IDA7Ci0gICAgICAgIGJvb2wgcGFyZW50SXNBYnNvbHV0
ZVNpemUgPSBmYWxzZTsKLSAgICAgICAgZmxvYXQgc2l6ZSA9IDA7Ci0KLSAgICAgICAgaWYgKHN0
eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCkpIHsKLSAgICAgICAgICAgIHBhcmVudFNpemUgPSBz
dHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKS5zcGVjaWZpZWRT
aXplKCk7Ci0gICAgICAgICAgICBwYXJlbnRJc0Fic29sdXRlU2l6ZSA9IHN0eWxlUmVzb2x2ZXIt
PnBhcmVudFN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpLmlzQWJzb2x1dGVTaXplKCk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAoQ1NTVmFsdWVJRCBpZGVudCA9IHByaW1pdGl2ZVZhbHVlLmdl
dFZhbHVlSUQoKSkgewotICAgICAgICAgICAgLy8gS2V5d29yZHMgYXJlIGJlaW5nIHVzZWQuCi0g
ICAgICAgICAgICBzd2l0Y2ggKGlkZW50KSB7Ci0gICAgICAgICAgICBjYXNlIENTU1ZhbHVlWHhT
bWFsbDoKLSAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVYU21hbGw6Ci0gICAgICAgICAgICBjYXNl
IENTU1ZhbHVlU21hbGw6Ci0gICAgICAgICAgICBjYXNlIENTU1ZhbHVlTWVkaXVtOgotICAgICAg
ICAgICAgY2FzZSBDU1NWYWx1ZUxhcmdlOgotICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVhMYXJn
ZToKLSAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVYeExhcmdlOgotICAgICAgICAgICAgY2FzZSBD
U1NWYWx1ZVdlYmtpdFh4eExhcmdlOgotICAgICAgICAgICAgICAgIHNpemUgPSBTdHlsZTo6Zm9u
dFNpemVGb3JLZXl3b3JkKGlkZW50LCBmb250RGVzY3JpcHRpb24udXNlRml4ZWREZWZhdWx0U2l6
ZSgpLCBzdHlsZVJlc29sdmVyLT5kb2N1bWVudCgpKTsKLSAgICAgICAgICAgICAgICBmb250RGVz
Y3JpcHRpb24uc2V0S2V5d29yZFNpemUoaWRlbnQgLSBDU1NWYWx1ZVh4U21hbGwgKyAxKTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVMYXJnZXI6Ci0g
ICAgICAgICAgICAgICAgc2l6ZSA9IGxhcmdlckZvbnRTaXplKHBhcmVudFNpemUpOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVNtYWxsZXI6Ci0gICAg
ICAgICAgICAgICAgc2l6ZSA9IHNtYWxsZXJGb250U2l6ZShwYXJlbnRTaXplKTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRSdWJ5VGV4dDog
ewotICAgICAgICAgICAgICAgIGZsb2F0IHJ1YnlUZXh0U2l6ZU11bHRpcGxpZXIgPSBkZXRlcm1p
bmVSdWJ5VGV4dFNpemVNdWx0aXBsaWVyKHN0eWxlUmVzb2x2ZXIpOwotICAgICAgICAgICAgICAg
IHNpemUgPSBydWJ5VGV4dFNpemVNdWx0aXBsaWVyICogcGFyZW50U2l6ZTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIH0gZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJc0Fi
c29sdXRlU2l6ZShwYXJlbnRJc0Fic29sdXRlU2l6ZSAmJiAoaWRlbnQgPT0gQ1NTVmFsdWVMYXJn
ZXIgfHwgaWRlbnQgPT0gQ1NTVmFsdWVTbWFsbGVyIHx8IGlkZW50ID09IENTU1ZhbHVlV2Via2l0
UnVieVRleHQpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZvbnREZXNjcmlwdGlv
bi5zZXRJc0Fic29sdXRlU2l6ZShwYXJlbnRJc0Fic29sdXRlU2l6ZSB8fCAhKHByaW1pdGl2ZVZh
bHVlLmlzUGVyY2VudGFnZSgpIHx8IHByaW1pdGl2ZVZhbHVlLmlzRm9udFJlbGF0aXZlTGVuZ3Ro
KCkpKTsKLSAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS5pc0xlbmd0aCgpKSB7Ci0gICAg
ICAgICAgICAgICAgc2l6ZSA9IHByaW1pdGl2ZVZhbHVlLmNvbXB1dGVMZW5ndGg8ZmxvYXQ+KENT
U1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKSwgc3R5
bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5kb2N1bWVudCgp
LnJlbmRlclZpZXcoKSwgMS4wZiwgdHJ1ZSkpOwotICAgICAgICAgICAgICAgIHN0eWxlUmVzb2x2
ZXItPnN0YXRlKCkuc2V0Rm9udFNpemVIYXNWaWV3cG9ydFVuaXRzKHByaW1pdGl2ZVZhbHVlLmlz
Vmlld3BvcnRQZXJjZW50YWdlTGVuZ3RoKCkpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChwcmlt
aXRpdmVWYWx1ZS5pc1BlcmNlbnRhZ2UoKSkKLSAgICAgICAgICAgICAgICBzaXplID0gKHByaW1p
dGl2ZVZhbHVlLmdldEZsb2F0VmFsdWUoKSAqIHBhcmVudFNpemUpIC8gMTAwLjBmOwotICAgICAg
ICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUuaXNDYWxjdWxhdGVkUGVyY2VudGFnZVdpdGhM
ZW5ndGgoKSkgewotICAgICAgICAgICAgICAgIFJlZjxDYWxjdWxhdGlvblZhbHVlPiBjYWxjdWxh
dGlvblZhbHVlIHsgcHJpbWl0aXZlVmFsdWUuY3NzQ2FsY1ZhbHVlKCktPmNyZWF0ZUNhbGN1bGF0
aW9uVmFsdWUoc3R5bGVSZXNvbHZlci0+c3RhdGUoKS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRh
KCkuY29weVdpdGhBZGp1c3RlZFpvb20oMS4wZikpIH07Ci0gICAgICAgICAgICAgICAgc2l6ZSA9
IGNhbGN1bGF0aW9uVmFsdWUtPmV2YWx1YXRlKHBhcmVudFNpemUpOwotICAgICAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHNp
emUgPCAwKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIC8vIE92ZXJseSBsYXJnZSBm
b250IHNpemVzIHdpbGwgY2F1c2UgY3Jhc2hlcyBvbiBzb21lIHBsYXRmb3JtcyAoc3VjaCBhcyBX
aW5kb3dzKS4KLSAgICAgICAgLy8gQ2FwIGZvbnQgc2l6ZSBoZXJlIHRvIG1ha2Ugc3VyZSB0aGF0
IGRvZXNuJ3QgaGFwcGVuLgotICAgICAgICBzaXplID0gc3RkOjptaW4obWF4aW11bUFsbG93ZWRG
b250U2l6ZSwgc2l6ZSk7Ci0KLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Rm9udFNpemUoZm9u
dERlc2NyaXB0aW9uLCBzaXplKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Rm9udERlc2Ny
aXB0aW9uKGZvbnREZXNjcmlwdGlvbik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBz
dGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKSB7IHJldHVybiBQcm9wZXJ0eUhh
bmRsZXIoJmFwcGx5SW5oZXJpdFZhbHVlLCAmYXBwbHlJbml0aWFsVmFsdWUsICZhcHBseVZhbHVl
KTsgfQotfTsKLQogY29uc3QgRGVwcmVjYXRlZFN0eWxlQnVpbGRlciYgRGVwcmVjYXRlZFN0eWxl
QnVpbGRlcjo6c2hhcmVkU3R5bGVCdWlsZGVyKCkKIHsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8RGVwcmVjYXRlZFN0eWxlQnVpbGRlcj4gc3R5bGVCdWlsZGVySW5zdGFuY2U7CkBAIC0zMDUs
OCArMTYwLDYgQEAgRGVwcmVjYXRlZFN0eWxlQnVpbGRlcjo6RGVwcmVjYXRlZFN0eWxlQnVpbGRl
cigpCiAgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5QmFja2dyb3VuZFJlcGVhdFgs
IEFwcGx5UHJvcGVydHlGaWxsTGF5ZXI8RUZpbGxSZXBlYXQsIENTU1Byb3BlcnR5QmFja2dyb3Vu
ZFJlcGVhdFgsIEJhY2tncm91bmRGaWxsTGF5ZXIsICZSZW5kZXJTdHlsZTo6YWNjZXNzQmFja2dy
b3VuZExheWVycywgJlJlbmRlclN0eWxlOjpiYWNrZ3JvdW5kTGF5ZXJzLCAmRmlsbExheWVyOjpp
c1JlcGVhdFhTZXQsICZGaWxsTGF5ZXI6OnJlcGVhdFgsICZGaWxsTGF5ZXI6OnNldFJlcGVhdFgs
ICZGaWxsTGF5ZXI6OmNsZWFyUmVwZWF0WCwgJkZpbGxMYXllcjo6aW5pdGlhbEZpbGxSZXBlYXRY
LCAmQ1NTVG9TdHlsZU1hcDo6bWFwRmlsbFJlcGVhdFg+OjpjcmVhdGVIYW5kbGVyKCkpOwogICAg
IHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eUJhY2tncm91bmRSZXBlYXRZLCBBcHBseVBy
b3BlcnR5RmlsbExheWVyPEVGaWxsUmVwZWF0LCBDU1NQcm9wZXJ0eUJhY2tncm91bmRSZXBlYXRZ
LCBCYWNrZ3JvdW5kRmlsbExheWVyLCAmUmVuZGVyU3R5bGU6OmFjY2Vzc0JhY2tncm91bmRMYXll
cnMsICZSZW5kZXJTdHlsZTo6YmFja2dyb3VuZExheWVycywgJkZpbGxMYXllcjo6aXNSZXBlYXRZ
U2V0LCAmRmlsbExheWVyOjpyZXBlYXRZLCAmRmlsbExheWVyOjpzZXRSZXBlYXRZLCAmRmlsbExh
eWVyOjpjbGVhclJlcGVhdFksICZGaWxsTGF5ZXI6OmluaXRpYWxGaWxsUmVwZWF0WSwgJkNTU1Rv
U3R5bGVNYXA6Om1hcEZpbGxSZXBlYXRZPjo6Y3JlYXRlSGFuZGxlcigpKTsKICAgICBzZXRQcm9w
ZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kU2l6ZSwgQXBwbHlQcm9wZXJ0eUZpbGxM
YXllcjxGaWxsU2l6ZSwgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kU2l6ZSwgQmFja2dyb3VuZEZpbGxM
YXllciwgJlJlbmRlclN0eWxlOjphY2Nlc3NCYWNrZ3JvdW5kTGF5ZXJzLCAmUmVuZGVyU3R5bGU6
OmJhY2tncm91bmRMYXllcnMsICZGaWxsTGF5ZXI6OmlzU2l6ZVNldCwgJkZpbGxMYXllcjo6c2l6
ZSwgJkZpbGxMYXllcjo6c2V0U2l6ZSwgJkZpbGxMYXllcjo6Y2xlYXJTaXplLCAmRmlsbExheWVy
Ojppbml0aWFsRmlsbFNpemUsICZDU1NUb1N0eWxlTWFwOjptYXBGaWxsU2l6ZT46OmNyZWF0ZUhh
bmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5Rm9udFNpemUsIEFw
cGx5UHJvcGVydHlGb250U2l6ZTo6Y3JlYXRlSGFuZGxlcigpKTsKLQogICAgIHNldFByb3BlcnR5
SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdEJhY2tncm91bmRDbGlwLCBDU1NQcm9wZXJ0eUJhY2tn
cm91bmRDbGlwKTsKICAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRCYWNr
Z3JvdW5kQ29tcG9zaXRlLCBBcHBseVByb3BlcnR5RmlsbExheWVyPENvbXBvc2l0ZU9wZXJhdG9y
LCBDU1NQcm9wZXJ0eVdlYmtpdEJhY2tncm91bmRDb21wb3NpdGUsIEJhY2tncm91bmRGaWxsTGF5
ZXIsICZSZW5kZXJTdHlsZTo6YWNjZXNzQmFja2dyb3VuZExheWVycywgJlJlbmRlclN0eWxlOjpi
YWNrZ3JvdW5kTGF5ZXJzLCAmRmlsbExheWVyOjppc0NvbXBvc2l0ZVNldCwgJkZpbGxMYXllcjo6
Y29tcG9zaXRlLCAmRmlsbExheWVyOjpzZXRDb21wb3NpdGUsICZGaWxsTGF5ZXI6OmNsZWFyQ29t
cG9zaXRlLCAmRmlsbExheWVyOjppbml0aWFsRmlsbENvbXBvc2l0ZSwgJkNTU1RvU3R5bGVNYXA6
Om1hcEZpbGxDb21wb3NpdGU+OjpjcmVhdGVIYW5kbGVyKCkpOwogICAgIHNldFByb3BlcnR5SGFu
ZGxlcihDU1NQcm9wZXJ0eVdlYmtpdEJhY2tncm91bmRPcmlnaW4sIENTU1Byb3BlcnR5QmFja2dy
b3VuZE9yaWdpbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVy
Q3VzdG9tLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyQ3VzdG9tLmgKaW5kZXgg
MWMyMTllNjBkMzJkZGU4NGYzYjEyYWY5ZTEyZTE1ZWQ0OTc2YmM4Ni4uYjdkYmRlY2IzMjlkODY3
NzEzODE2OGI1ZDEyNjE5NjE0N2UwZTU1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3Nz
L1N0eWxlQnVpbGRlckN1c3RvbS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxk
ZXJDdXN0b20uaApAQCAtMzEsNyArMzEsOSBAQAogI2luY2x1ZGUgIkNTU0N1cnNvckltYWdlVmFs
dWUuaCIKICNpbmNsdWRlICJDU1NTaGFkb3dWYWx1ZS5oIgogI2luY2x1ZGUgIkN1cnNvckxpc3Qu
aCIKKyNpbmNsdWRlICJFbGVtZW50QW5jZXN0b3JJdGVyYXRvci5oIgogI2luY2x1ZGUgIkZyYW1l
LmgiCisjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKICNpbmNsdWRlICJMb2NhbGVUb1NjcmlwdE1h
cHBpbmcuaCIKICNpbmNsdWRlICJSZWN0LmgiCiAjaW5jbHVkZSAiU1ZHRWxlbWVudC5oIgpAQCAt
NjEsNiArNjMsNyBAQCBwdWJsaWM6CiAgICAgREVDTEFSRV9QUk9QRVJUWV9DVVNUT01fSEFORExF
UlMoQ291bnRlclJlc2V0KTsKICAgICBERUNMQVJFX1BST1BFUlRZX0NVU1RPTV9IQU5ETEVSUyhD
dXJzb3IpOwogICAgIERFQ0xBUkVfUFJPUEVSVFlfQ1VTVE9NX0hBTkRMRVJTKEZvbnRGYW1pbHkp
OworICAgIERFQ0xBUkVfUFJPUEVSVFlfQ1VTVE9NX0hBTkRMRVJTKEZvbnRTaXplKTsKICAgICBE
RUNMQVJFX1BST1BFUlRZX0NVU1RPTV9IQU5ETEVSUyhGb250V2VpZ2h0KTsKICNpZiBFTkFCTEUo
Q1NTX0lNQUdFX1JFU09MVVRJT04pCiAgICAgREVDTEFSRV9QUk9QRVJUWV9DVVNUT01fSEFORExF
UlMoSW1hZ2VSZXNvbHV0aW9uKTsKQEAgLTExOCw2ICsxMjEsMTAgQEAgcHJpdmF0ZToKICAgICBz
dGF0aWMgdm9pZCBhcHBseUluaGVyaXRDb3VudGVyKFN0eWxlUmVzb2x2ZXImKTsKICAgICB0ZW1w
bGF0ZSA8Q291bnRlckJlaGF2aW9yIGNvdW50ZXJCZWhhdmlvcj4KICAgICBzdGF0aWMgdm9pZCBh
cHBseVZhbHVlQ291bnRlcihTdHlsZVJlc29sdmVyJiwgQ1NTVmFsdWUmKTsKKworICAgIHN0YXRp
YyBmbG9hdCBsYXJnZXJGb250U2l6ZShmbG9hdCBzaXplKTsKKyAgICBzdGF0aWMgZmxvYXQgc21h
bGxlckZvbnRTaXplKGZsb2F0IHNpemUpOworICAgIHN0YXRpYyBmbG9hdCBkZXRlcm1pbmVSdWJ5
VGV4dFNpemVNdWx0aXBsaWVyKFN0eWxlUmVzb2x2ZXImKTsKIH07CiAKIGlubGluZSB2b2lkIFN0
eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZVdlYmtpdE1hcnF1ZWVJbmNyZW1lbnQoU3R5bGVS
ZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVlKQpAQCAtMTI2OCw2ICsxMjc1
LDEzNiBAQCBpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVXZWJraXRG
b250VmFyaWFudExpZ2F0dXJlcyhTdHlsZVJlc29sdgogICAgIHN0eWxlUmVzb2x2ZXIuc2V0Rm9u
dERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiB9CiAKK2lubGluZSB2b2lkIFN0eWxlQnVp
bGRlckN1c3RvbTo6YXBwbHlJbml0aWFsRm9udFNpemUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNv
bHZlcikKK3sKKyAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNv
bHZlci5zdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICBmbG9hdCBzaXplID0gU3R5bGU6
OmZvbnRTaXplRm9yS2V5d29yZChDU1NWYWx1ZU1lZGl1bSwgZm9udERlc2NyaXB0aW9uLnVzZUZp
eGVkRGVmYXVsdFNpemUoKSwgc3R5bGVSZXNvbHZlci5kb2N1bWVudCgpKTsKKworICAgIGlmIChz
aXplIDwgMCkKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9udERlc2NyaXB0aW9uLnNldEtleXdv
cmRTaXplKENTU1ZhbHVlTWVkaXVtIC0gQ1NTVmFsdWVYeFNtYWxsICsgMSk7CisgICAgc3R5bGVS
ZXNvbHZlci5zZXRGb250U2l6ZShmb250RGVzY3JpcHRpb24sIHNpemUpOworICAgIHN0eWxlUmVz
b2x2ZXIuc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7Cit9CisKK2lubGluZSB2
b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0Rm9udFNpemUoU3R5bGVSZXNvbHZl
ciYgc3R5bGVSZXNvbHZlcikKK3sKKyAgICBjb25zdCBGb250RGVzY3JpcHRpb24mIHBhcmVudEZv
bnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKS0+Zm9udERlc2NyaXB0
aW9uKCk7CisgICAgZmxvYXQgc2l6ZSA9IHBhcmVudEZvbnREZXNjcmlwdGlvbi5zcGVjaWZpZWRT
aXplKCk7CisKKyAgICBpZiAoc2l6ZSA8IDApCisgICAgICAgIHJldHVybjsKKworICAgIEZvbnRE
ZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLnN0eWxlKCktPmZvbnRE
ZXNjcmlwdGlvbigpOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRLZXl3b3JkU2l6ZShwYXJlbnRG
b250RGVzY3JpcHRpb24ua2V5d29yZFNpemUoKSk7CisgICAgc3R5bGVSZXNvbHZlci5zZXRGb250
U2l6ZShmb250RGVzY3JpcHRpb24sIHNpemUpOworICAgIHN0eWxlUmVzb2x2ZXIuc2V0Rm9udERl
c2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7Cit9CisKKy8vIFdoZW4gdGhlIENTUyBrZXl3b3Jk
ICJsYXJnZXIiIGlzIHVzZWQsIHRoaXMgZnVuY3Rpb24gd2lsbCBhdHRlbXB0IHRvIG1hdGNoIHdp
dGhpbiB0aGUga2V5d29yZAorLy8gdGFibGUsIGFuZCBmYWlsaW5nIHRoYXQsIHdpbGwgc2ltcGx5
IG11bHRpcGx5IGJ5IDEuMi4KK2lubGluZSBmbG9hdCBTdHlsZUJ1aWxkZXJDdXN0b206Omxhcmdl
ckZvbnRTaXplKGZsb2F0IHNpemUpCit7CisgICAgLy8gRklYTUU6IEZpZ3VyZSBvdXQgd2hlcmUg
d2UgZmFsbCBpbiB0aGUgc2l6ZSByYW5nZXMgKHh4LXNtYWxsIHRvIHh4eC1sYXJnZSkgYW5kIHNj
YWxlIHVwIHRvCisgICAgLy8gdGhlIG5leHQgc2l6ZSBsZXZlbC4KKyAgICByZXR1cm4gc2l6ZSAq
IDEuMmY7Cit9CisKKy8vIExpa2UgdGhlIHByZXZpb3VzIGZ1bmN0aW9uLCBidXQgZm9yIHRoZSBr
ZXl3b3JkICJzbWFsbGVyIi4KK2lubGluZSBmbG9hdCBTdHlsZUJ1aWxkZXJDdXN0b206OnNtYWxs
ZXJGb250U2l6ZShmbG9hdCBzaXplKQoreworICAgIC8vIEZJWE1FOiBGaWd1cmUgb3V0IHdoZXJl
IHdlIGZhbGwgaW4gdGhlIHNpemUgcmFuZ2VzICh4eC1zbWFsbCB0byB4eHgtbGFyZ2UpIGFuZCBz
Y2FsZSBkb3duIHRvCisgICAgLy8gdGhlIG5leHQgc2l6ZSBsZXZlbC4KKyAgICByZXR1cm4gc2l6
ZSAvIDEuMmY7Cit9CisKK2lubGluZSBmbG9hdCBTdHlsZUJ1aWxkZXJDdXN0b206OmRldGVybWlu
ZVJ1YnlUZXh0U2l6ZU11bHRpcGxpZXIoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKK3sK
KyAgICBpZiAoc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5ydWJ5UG9zaXRpb24oKSAhPSBSdWJ5UG9z
aXRpb25JbnRlckNoYXJhY3RlcikKKyAgICAgICAgcmV0dXJuIDAuNWY7CisKKyAgICAvLyBGSVhN
RTogVGhpcyBoYWNrIGlzIHRvIGVuc3VyZSB0b25lIG1hcmtzIGFyZSB0aGUgc2FtZSBzaXplIGFz
CisgICAgLy8gdGhlIGJvcG9tb2ZvLiBUaGlzIGNvZGUgd2lsbCBnbyBhd2F5IGlmIHdlIG1ha2Ug
YSBzcGVjaWFsIHJlbmRlcmVyCisgICAgLy8gZm9yIHRoZSB0b25lIG1hcmtzIGV2ZW50dWFsbHku
CisgICAgaWYgKGF1dG8qIGVsZW1lbnQgPSBzdHlsZVJlc29sdmVyLnN0YXRlKCkuZWxlbWVudCgp
KSB7CisgICAgICAgIGZvciAoYXV0byYgYW5jZXN0b3IgOiBhbmNlc3RvcnNPZlR5cGU8SFRNTEVs
ZW1lbnQ+KCplbGVtZW50KSkgeworICAgICAgICAgICAgaWYgKGFuY2VzdG9yLmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjpydFRhZykpCisgICAgICAgICAgICAgICAgcmV0dXJuIDEuMGY7CisgICAgICAg
IH0KKyAgICB9CisgICAgcmV0dXJuIDAuMjVmOworfQorCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxk
ZXJDdXN0b206OmFwcGx5VmFsdWVGb250U2l6ZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVy
LCBDU1NWYWx1ZSYgdmFsdWUpCit7CisgICAgYXV0byYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2Fz
dDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpOworCisgICAgRm9udERlc2NyaXB0aW9uIGZvbnRE
ZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7Cisg
ICAgZm9udERlc2NyaXB0aW9uLnNldEtleXdvcmRTaXplKDApOworICAgIGZsb2F0IHBhcmVudFNp
emUgPSAwOworICAgIGJvb2wgcGFyZW50SXNBYnNvbHV0ZVNpemUgPSBmYWxzZTsKKyAgICBmbG9h
dCBzaXplID0gMDsKKworICAgIGlmIChzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCkpIHsKKyAg
ICAgICAgcGFyZW50U2l6ZSA9IHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKS0+Zm9udERlc2Ny
aXB0aW9uKCkuc3BlY2lmaWVkU2l6ZSgpOworICAgICAgICBwYXJlbnRJc0Fic29sdXRlU2l6ZSA9
IHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCkuaXNBYnNvbHV0
ZVNpemUoKTsKKyAgICB9CisKKyAgICBpZiAoQ1NTVmFsdWVJRCBpZGVudCA9IHByaW1pdGl2ZVZh
bHVlLmdldFZhbHVlSUQoKSkgeworICAgICAgICAvLyBLZXl3b3JkcyBhcmUgYmVpbmcgdXNlZC4K
KyAgICAgICAgc3dpdGNoIChpZGVudCkgeworICAgICAgICBjYXNlIENTU1ZhbHVlWHhTbWFsbDoK
KyAgICAgICAgY2FzZSBDU1NWYWx1ZVhTbWFsbDoKKyAgICAgICAgY2FzZSBDU1NWYWx1ZVNtYWxs
OgorICAgICAgICBjYXNlIENTU1ZhbHVlTWVkaXVtOgorICAgICAgICBjYXNlIENTU1ZhbHVlTGFy
Z2U6CisgICAgICAgIGNhc2UgQ1NTVmFsdWVYTGFyZ2U6CisgICAgICAgIGNhc2UgQ1NTVmFsdWVY
eExhcmdlOgorICAgICAgICBjYXNlIENTU1ZhbHVlV2Via2l0WHh4TGFyZ2U6CisgICAgICAgICAg
ICBzaXplID0gU3R5bGU6OmZvbnRTaXplRm9yS2V5d29yZChpZGVudCwgZm9udERlc2NyaXB0aW9u
LnVzZUZpeGVkRGVmYXVsdFNpemUoKSwgc3R5bGVSZXNvbHZlci5kb2N1bWVudCgpKTsKKyAgICAg
ICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRLZXl3b3JkU2l6ZShpZGVudCAtIENTU1ZhbHVlWHhT
bWFsbCArIDEpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVMYXJn
ZXI6CisgICAgICAgICAgICBzaXplID0gbGFyZ2VyRm9udFNpemUocGFyZW50U2l6ZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZVNtYWxsZXI6CisgICAgICAgICAg
ICBzaXplID0gc21hbGxlckZvbnRTaXplKHBhcmVudFNpemUpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRSdWJ5VGV4dDogeworICAgICAgICAgICAgZmxv
YXQgcnVieVRleHRTaXplTXVsdGlwbGllciA9IGRldGVybWluZVJ1YnlUZXh0U2l6ZU11bHRpcGxp
ZXIoc3R5bGVSZXNvbHZlcik7CisgICAgICAgICAgICBzaXplID0gcnVieVRleHRTaXplTXVsdGlw
bGllciAqIHBhcmVudFNpemU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfSBkZWZhdWx0
OgorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZm9udERlc2NyaXB0
aW9uLnNldElzQWJzb2x1dGVTaXplKHBhcmVudElzQWJzb2x1dGVTaXplICYmIChpZGVudCA9PSBD
U1NWYWx1ZUxhcmdlciB8fCBpZGVudCA9PSBDU1NWYWx1ZVNtYWxsZXIgfHwgaWRlbnQgPT0gQ1NT
VmFsdWVXZWJraXRSdWJ5VGV4dCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIGZvbnREZXNjcmlw
dGlvbi5zZXRJc0Fic29sdXRlU2l6ZShwYXJlbnRJc0Fic29sdXRlU2l6ZSB8fCAhKHByaW1pdGl2
ZVZhbHVlLmlzUGVyY2VudGFnZSgpIHx8IHByaW1pdGl2ZVZhbHVlLmlzRm9udFJlbGF0aXZlTGVu
Z3RoKCkpKTsKKyAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmlzTGVuZ3RoKCkpIHsKKyAgICAg
ICAgICAgIHNpemUgPSBwcmltaXRpdmVWYWx1ZS5jb21wdXRlTGVuZ3RoPGZsb2F0PihDU1NUb0xl
bmd0aENvbnZlcnNpb25EYXRhKHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKSwgc3R5bGVSZXNv
bHZlci5yb290RWxlbWVudFN0eWxlKCksIHN0eWxlUmVzb2x2ZXIuZG9jdW1lbnQoKS5yZW5kZXJW
aWV3KCksIDEuMGYsIHRydWUpKTsKKyAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXIuc3RhdGUoKS5z
ZXRGb250U2l6ZUhhc1ZpZXdwb3J0VW5pdHMocHJpbWl0aXZlVmFsdWUuaXNWaWV3cG9ydFBlcmNl
bnRhZ2VMZW5ndGgoKSk7CisgICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUuaXNQZXJj
ZW50YWdlKCkpCisgICAgICAgICAgICBzaXplID0gKHByaW1pdGl2ZVZhbHVlLmdldEZsb2F0VmFs
dWUoKSAqIHBhcmVudFNpemUpIC8gMTAwLjBmOworICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVW
YWx1ZS5pc0NhbGN1bGF0ZWRQZXJjZW50YWdlV2l0aExlbmd0aCgpKSB7CisgICAgICAgICAgICBS
ZWY8Q2FsY3VsYXRpb25WYWx1ZT4gY2FsY3VsYXRpb25WYWx1ZSB7IHByaW1pdGl2ZVZhbHVlLmNz
c0NhbGNWYWx1ZSgpLT5jcmVhdGVDYWxjdWxhdGlvblZhbHVlKHN0eWxlUmVzb2x2ZXIuc3RhdGUo
KS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkuY29weVdpdGhBZGp1c3RlZFpvb20oMS4wZikp
IH07CisgICAgICAgICAgICBzaXplID0gY2FsY3VsYXRpb25WYWx1ZS0+ZXZhbHVhdGUocGFyZW50
U2l6ZSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmIChzaXplIDwgMCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gT3Zlcmx5IGxhcmdlIGZv
bnQgc2l6ZXMgd2lsbCBjYXVzZSBjcmFzaGVzIG9uIHNvbWUgcGxhdGZvcm1zIChzdWNoIGFzIFdp
bmRvd3MpLgorICAgIC8vIENhcCBmb250IHNpemUgaGVyZSB0byBtYWtlIHN1cmUgdGhhdCBkb2Vz
bid0IGhhcHBlbi4KKyAgICBzaXplID0gc3RkOjptaW4obWF4aW11bUFsbG93ZWRGb250U2l6ZSwg
c2l6ZSk7CisKKyAgICBzdHlsZVJlc29sdmVyLnNldEZvbnRTaXplKGZvbnREZXNjcmlwdGlvbiwg
c2l6ZSk7CisgICAgc3R5bGVSZXNvbHZlci5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0
aW9uKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gU3R5bGVCdWls
ZGVyQ3VzdG9tX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>243857</attachid>
            <date>2014-12-31 22:33:11 -0800</date>
            <delta_ts>2015-01-02 11:13:39 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-140010-20141231223314.patch</filename>
            <type>text/plain</type>
            <size>27206</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc3ODI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjQ4MWUwOTk2N2I4NjZl
NzQyMjljZWU2NmI3NTIxNWM2NjcyMjQwMS4uNTEzM2VkYTQ0NGY5N2JjZjVjZThkYmFmNjBiNzE1
ZTI1MzBjMjIxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDE1IEBACiAyMDE0LTEyLTMwICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKKyAgICAgICAgTW92ZSAnZm9udC1zaXplJyBD
U1MgcHJvcGVydHkgdG8gdGhlIG5ldyBTdHlsZUJ1aWxkZXIKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MDAxMAorCisgICAgICAgIFJldmlld2VkIGJ5
IERhcmluIEFkbGVyLgorCisgICAgICAgIE1vdmUgJ2ZvbnQtc2l6ZScgQ1NTIHByb3BlcnR5IHRv
IHRoZSBuZXcgU3R5bGVCdWlsZGVyIGJ5IHVzaW5nIGN1c3RvbQorICAgICAgICBjb2RlLgorCisy
MDE0LTEyLTMwICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKICAgICAgICAgTW92
ZSBmb250LXJlbGF0ZWQgQ1NTIHByb3BlcnRpZXMgdG8gdGhlIG5ldyBTdHlsZUJ1aWxkZXIKICAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MDAwOAogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9u
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3Bw
CmluZGV4IDg0YzU1OTdlNWI2ZDdmZmZkZTFlY2U0ZjZkZTI3ZjY1ZDdmOGJhYjIuLjNkM2IxNTFl
YTgyMTY1NmYyYzcwZDI2NmVhZGY0OGQ1YzJmZDViYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCkBAIC0xMjgyLDEzICsxMjgy
LDYgQEAgdm9pZCBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OnNldENzc1RleHQoY29uc3Qg
U3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgZWMgPSBOT19NT0RJRklDQVRJT05fQUxM
T1dFRF9FUlI7CiB9CiAKLXN0YXRpYyBDU1NWYWx1ZUlEIGNzc0lkZW50aWZpZXJGb3JGb250U2l6
ZUtleXdvcmQoaW50IGtleXdvcmRTaXplKQotewotICAgIEFTU0VSVF9BUkcoa2V5d29yZFNpemUs
IGtleXdvcmRTaXplKTsKLSAgICBBU1NFUlRfQVJHKGtleXdvcmRTaXplLCBrZXl3b3JkU2l6ZSA8
PSA4KTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q1NTVmFsdWVJRD4oQ1NTVmFsdWVYeFNtYWxs
ICsga2V5d29yZFNpemUgLSAxKTsKLX0KLQogUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4g
Q29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6Z2V0Rm9udFNpemVDU1NWYWx1ZVByZWZlcnJpbmdLZXl3
b3JkKCkgY29uc3QKIHsKICAgICBpZiAoIW1fbm9kZSkKQEAgLTEzMDAsOCArMTI5Myw4IEBAIFBh
c3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IENvbXB1dGVkU3R5bGVFeHRyYWN0b3I6OmdldEZv
bnRTaXplQ1NTVmFsdWVQcmVmZXJyCiAgICAgaWYgKCFzdHlsZSkKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKLSAgICBpZiAoaW50IGtleXdvcmRTaXplID0gc3R5bGUtPmZvbnREZXNjcmlwdGlv
bigpLmtleXdvcmRTaXplKCkpCi0gICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJ
ZGVudGlmaWVyVmFsdWUoY3NzSWRlbnRpZmllckZvckZvbnRTaXplS2V5d29yZChrZXl3b3JkU2l6
ZSkpOworICAgIGlmIChDU1NWYWx1ZUlEIHNpemVJZGVudGlmaWVyID0gc3R5bGUtPmZvbnREZXNj
cmlwdGlvbigpLmtleXdvcmRTaXplQXNJZGVudGlmaWVyKCkpCisgICAgICAgIHJldHVybiBjc3NW
YWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoc2l6ZUlkZW50aWZpZXIpOwogCiAgICAg
cmV0dXJuIHpvb21BZGp1c3RlZFBpeGVsVmFsdWUoc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpLmNv
bXB1dGVkUGl4ZWxTaXplKCksIHN0eWxlLmdldCgpKTsKIH0KQEAgLTMyNDMsMTIgKzMyMzYsMTIg
QEAgYm9vbCBDb21wdXRlZFN0eWxlRXh0cmFjdG9yOjpwcm9wZXJ0eU1hdGNoZXMoQ1NTUHJvcGVy
dHlJRCBwcm9wZXJ0eUlELCBjb25zdCBDU1MKIHsKICAgICBpZiAocHJvcGVydHlJRCA9PSBDU1NQ
cm9wZXJ0eUZvbnRTaXplICYmIGlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpICYmIG1fbm9k
ZSkgewogICAgICAgICBtX25vZGUtPmRvY3VtZW50KCkudXBkYXRlTGF5b3V0SWdub3JlUGVuZGlu
Z1N0eWxlc2hlZXRzKCk7Ci0gICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IG1fbm9kZS0+Y29t
cHV0ZWRTdHlsZShtX3BzZXVkb0VsZW1lbnRTcGVjaWZpZXIpOwotICAgICAgICBpZiAoc3R5bGUg
JiYgc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpLmtleXdvcmRTaXplKCkpIHsKLSAgICAgICAgICAg
IENTU1ZhbHVlSUQgc2l6ZVZhbHVlID0gY3NzSWRlbnRpZmllckZvckZvbnRTaXplS2V5d29yZChz
dHlsZS0+Zm9udERlc2NyaXB0aW9uKCkua2V5d29yZFNpemUoKSk7Ci0gICAgICAgICAgICBjb25z
dCBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZT4oKnZhbHVlKTsKLSAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS5pc1ZhbHVl
SUQoKSAmJiBwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkgPT0gc2l6ZVZhbHVlKQotICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoUmVuZGVyU3R5bGUqIHN0eWxlID0g
bV9ub2RlLT5jb21wdXRlZFN0eWxlKG1fcHNldWRvRWxlbWVudFNwZWNpZmllcikpIHsKKyAgICAg
ICAgICAgIGlmIChDU1NWYWx1ZUlEIHNpemVJZGVudGlmaWVyID0gc3R5bGUtPmZvbnREZXNjcmlw
dGlvbigpLmtleXdvcmRTaXplQXNJZGVudGlmaWVyKCkpIHsKKyAgICAgICAgICAgICAgICBhdXRv
JiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOwor
ICAgICAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS5pc1ZhbHVlSUQoKSAmJiBwcmltaXRp
dmVWYWx1ZS5nZXRWYWx1ZUlEKCkgPT0gc2l6ZUlkZW50aWZpZXIpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogICAgIFJl
ZlB0cjxDU1NWYWx1ZT4gY29tcHV0ZWRWYWx1ZSA9IHByb3BlcnR5VmFsdWUocHJvcGVydHlJRCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJvcGVydHlOYW1lcy5pbiBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NQcm9wZXJ0eU5hbWVzLmluCmluZGV4IGQ3NzBlYzE5YmM4MjYw
ZjlmMDkxMzE5OTk5YjhjZmIyNmIwMmJkZTYuLjA2MjZkZDYyZTBiODY4Yzc3NDI1YWYzZGUwMDUx
MjA4MGE4MjljYTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcm9wZXJ0eU5h
bWVzLmluCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcm9wZXJ0eU5hbWVzLmluCkBAIC04
OSw3ICs4OSw3IEBAIGRpcmVjdGlvbiBbSW5oZXJpdGVkLCBDdXN0b209VmFsdWVdCiBkaXNwbGF5
IFtDdXN0b209SW5oZXJpdHxWYWx1ZV0KIGZvbnQgW0luaGVyaXRlZCwgTGVnYWN5U3R5bGVCdWls
ZGVyXQogZm9udC1mYW1pbHkgW0luaGVyaXRlZCwgQ3VzdG9tPUFsbF0KLWZvbnQtc2l6ZSBbSW5o
ZXJpdGVkLCBMZWdhY3lTdHlsZUJ1aWxkZXJdCitmb250LXNpemUgW0luaGVyaXRlZCwgQ3VzdG9t
PUFsbF0KIGZvbnQtc3R5bGUgW0luaGVyaXRlZCwgRm9udFByb3BlcnR5LCBUeXBlTmFtZT1Gb250
SXRhbGljLCBOYW1lRm9yTWV0aG9kcz1JdGFsaWNdCiBmb250LXZhcmlhbnQgW0luaGVyaXRlZCwg
Rm9udFByb3BlcnR5LCBUeXBlTmFtZT1Gb250U21hbGxDYXBzLCBOYW1lRm9yTWV0aG9kcz1TbWFs
bENhcHNdCiBmb250LXdlaWdodCBbSW5oZXJpdGVkLCBDdXN0b209QWxsXQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY3NzL0RlcHJlY2F0ZWRTdHlsZUJ1aWxkZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvY3NzL0RlcHJlY2F0ZWRTdHlsZUJ1aWxkZXIuY3BwCmluZGV4IDE0ZWYyNzZhY2Q0Yzc1
OWMyODNmNjQzOTE0NTgxOTE3M2ZkNDY4NzkuLjUzY2E1OTdlYmE5NDg0ODA0NGRhZjAzOWI4Zjli
ZGMzOTQ3Y2NkYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9EZXByZWNhdGVkU3R5
bGVCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRGVwcmVjYXRlZFN0eWxlQnVp
bGRlci5jcHAKQEAgLTM0LDEzICszNCwxMCBAQAogI2luY2x1ZGUgIkNTU1ZhbHVlTGlzdC5oIgog
I2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKLSNpbmNs
dWRlICJTdHlsZUZvbnRTaXplRnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7Ci0K
IHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogc3RydWN0IEZpbGxMYXllckFjY2Vzc29yVHlwZXMgewog
ICAgIHR5cGVkZWYgVCBTZXR0ZXI7CkBAIC0xNDEsMTQ4ICsxMzgsNiBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkgeyByZXR1cm4gUHJvcGVydHlI
YW5kbGVyKCZhcHBseUluaGVyaXRWYWx1ZSwgJmFwcGx5SW5pdGlhbFZhbHVlLCAmYXBwbHlWYWx1
ZSk7IH0KIH07CiAKLWNsYXNzIEFwcGx5UHJvcGVydHlGb250U2l6ZSB7Ci1wcml2YXRlOgotICAg
IC8vIFdoZW4gdGhlIENTUyBrZXl3b3JkICJsYXJnZXIiIGlzIHVzZWQsIHRoaXMgZnVuY3Rpb24g
d2lsbCBhdHRlbXB0IHRvIG1hdGNoIHdpdGhpbiB0aGUga2V5d29yZAotICAgIC8vIHRhYmxlLCBh
bmQgZmFpbGluZyB0aGF0LCB3aWxsIHNpbXBseSBtdWx0aXBseSBieSAxLjIuCi0gICAgc3RhdGlj
IGZsb2F0IGxhcmdlckZvbnRTaXplKGZsb2F0IHNpemUpCi0gICAgewotICAgICAgICAvLyBGSVhN
RTogRmlndXJlIG91dCB3aGVyZSB3ZSBmYWxsIGluIHRoZSBzaXplIHJhbmdlcyAoeHgtc21hbGwg
dG8geHh4LWxhcmdlKSBhbmQgc2NhbGUgdXAgdG8KLSAgICAgICAgLy8gdGhlIG5leHQgc2l6ZSBs
ZXZlbC4KLSAgICAgICAgcmV0dXJuIHNpemUgKiAxLjJmOwotICAgIH0KLQotICAgIC8vIExpa2Ug
dGhlIHByZXZpb3VzIGZ1bmN0aW9uLCBidXQgZm9yIHRoZSBrZXl3b3JkICJzbWFsbGVyIi4KLSAg
ICBzdGF0aWMgZmxvYXQgc21hbGxlckZvbnRTaXplKGZsb2F0IHNpemUpCi0gICAgewotICAgICAg
ICAvLyBGSVhNRTogRmlndXJlIG91dCB3aGVyZSB3ZSBmYWxsIGluIHRoZSBzaXplIHJhbmdlcyAo
eHgtc21hbGwgdG8geHh4LWxhcmdlKSBhbmQgc2NhbGUgZG93biB0bwotICAgICAgICAvLyB0aGUg
bmV4dCBzaXplIGxldmVsLgotICAgICAgICByZXR1cm4gc2l6ZSAvIDEuMmY7Ci0gICAgfQotcHVi
bGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0
eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCi0gICAgewotICAgICAgICBmbG9hdCBzaXplID0g
c3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCkuc3BlY2lmaWVk
U2l6ZSgpOwotCi0gICAgICAgIGlmIChzaXplIDwgMCkKLSAgICAgICAgICAgIHJldHVybjsKLQot
ICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci0+
c3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7Ci0gICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRL
ZXl3b3JkU2l6ZShzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT5mb250RGVzY3JpcHRpb24o
KS5rZXl3b3JkU2l6ZSgpKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Rm9udFNpemUoZm9u
dERlc2NyaXB0aW9uLCBzaXplKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Rm9udERlc2Ny
aXB0aW9uKGZvbnREZXNjcmlwdGlvbik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBz
dGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVy
KiBzdHlsZVJlc29sdmVyKQotICAgIHsKLSAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNj
cmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOwotICAg
ICAgICBmbG9hdCBzaXplID0gU3R5bGU6OmZvbnRTaXplRm9yS2V5d29yZChDU1NWYWx1ZU1lZGl1
bSwgZm9udERlc2NyaXB0aW9uLnVzZUZpeGVkRGVmYXVsdFNpemUoKSwgc3R5bGVSZXNvbHZlci0+
ZG9jdW1lbnQoKSk7Ci0KLSAgICAgICAgaWYgKHNpemUgPCAwKQotICAgICAgICAgICAgcmV0dXJu
OwotCi0gICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRLZXl3b3JkU2l6ZShDU1NWYWx1ZU1lZGl1
bSAtIENTU1ZhbHVlWHhTbWFsbCArIDEpOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRGb250
U2l6ZShmb250RGVzY3JpcHRpb24sIHNpemUpOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRG
b250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIHN0YXRpYyBmbG9hdCBkZXRlcm1pbmVSdWJ5VGV4dFNpemVNdWx0aXBsaWVyKFN0eWxl
UmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCi0gICAgewotICAgICAgICBpZiAoc3R5bGVSZXNvbHZl
ci0+c3R5bGUoKS0+cnVieVBvc2l0aW9uKCkgIT0gUnVieVBvc2l0aW9uSW50ZXJDaGFyYWN0ZXIp
Ci0gICAgICAgICAgICByZXR1cm4gMC41ZjsKLSAgICAgICAgCi0gICAgICAgIEVsZW1lbnQqIGVs
ZW1lbnQgPSBzdHlsZVJlc29sdmVyLT5zdGF0ZSgpLmVsZW1lbnQoKTsKLSAgICAgICAgaWYgKGVs
ZW1lbnQgPT0gbnVsbHB0cikKLSAgICAgICAgICAgIHJldHVybiAwLjI1ZjsKLSAgICAgICAgCi0g
ICAgICAgIC8vIEZJWE1FOiBUaGlzIGhhY2sgaXMgdG8gZW5zdXJlIHRvbmUgbWFya3MgYXJlIHRo
ZSBzYW1lIHNpemUgYXMKLSAgICAgICAgLy8gdGhlIGJvcG9tb2ZvLiBUaGlzIGNvZGUgd2lsbCBn
byBhd2F5IGlmIHdlIG1ha2UgYSBzcGVjaWFsIHJlbmRlcmVyCi0gICAgICAgIC8vIGZvciB0aGUg
dG9uZSBtYXJrcyBldmVudHVhbGx5LgotICAgICAgICBmb3IgKGNvbnN0IEVsZW1lbnQqIGN1cnJF
bGVtZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgpOyBjdXJyRWxlbWVudDsgY3VyckVsZW1l
bnQgPSBjdXJyRWxlbWVudC0+cGFyZW50RWxlbWVudCgpKSB7Ci0gICAgICAgICAgICBpZiAoY3Vy
ckVsZW1lbnQtPmhhc1RhZ05hbWUocnRUYWcpKQotICAgICAgICAgICAgICAgIHJldHVybiAxLjBm
OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAwLjI1ZjsKLSAgICB9Ci0gICAgCi0gICAgc3Rh
dGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJl
c29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCi0gICAgewotICAgICAgICBpZiAoIWlzPENTU1ByaW1p
dGl2ZVZhbHVlPigqdmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIENTU1By
aW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
PigqdmFsdWUpOwotCi0gICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBz
dHlsZVJlc29sdmVyLT5zdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsKLSAgICAgICAgZm9udERl
c2NyaXB0aW9uLnNldEtleXdvcmRTaXplKDApOwotICAgICAgICBmbG9hdCBwYXJlbnRTaXplID0g
MDsKLSAgICAgICAgYm9vbCBwYXJlbnRJc0Fic29sdXRlU2l6ZSA9IGZhbHNlOwotICAgICAgICBm
bG9hdCBzaXplID0gMDsKLQotICAgICAgICBpZiAoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUo
KSkgewotICAgICAgICAgICAgcGFyZW50U2l6ZSA9IHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxl
KCktPmZvbnREZXNjcmlwdGlvbigpLnNwZWNpZmllZFNpemUoKTsKLSAgICAgICAgICAgIHBhcmVu
dElzQWJzb2x1dGVTaXplID0gc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+Zm9udERlc2Ny
aXB0aW9uKCkuaXNBYnNvbHV0ZVNpemUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChDU1NW
YWx1ZUlEIGlkZW50ID0gcHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpKSB7Ci0gICAgICAgICAg
ICAvLyBLZXl3b3JkcyBhcmUgYmVpbmcgdXNlZC4KLSAgICAgICAgICAgIHN3aXRjaCAoaWRlbnQp
IHsKLSAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVYeFNtYWxsOgotICAgICAgICAgICAgY2FzZSBD
U1NWYWx1ZVhTbWFsbDoKLSAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVTbWFsbDoKLSAgICAgICAg
ICAgIGNhc2UgQ1NTVmFsdWVNZWRpdW06Ci0gICAgICAgICAgICBjYXNlIENTU1ZhbHVlTGFyZ2U6
Ci0gICAgICAgICAgICBjYXNlIENTU1ZhbHVlWExhcmdlOgotICAgICAgICAgICAgY2FzZSBDU1NW
YWx1ZVh4TGFyZ2U6Ci0gICAgICAgICAgICBjYXNlIENTU1ZhbHVlV2Via2l0WHh4TGFyZ2U6Ci0g
ICAgICAgICAgICAgICAgc2l6ZSA9IFN0eWxlOjpmb250U2l6ZUZvcktleXdvcmQoaWRlbnQsIGZv
bnREZXNjcmlwdGlvbi51c2VGaXhlZERlZmF1bHRTaXplKCksIHN0eWxlUmVzb2x2ZXItPmRvY3Vt
ZW50KCkpOwotICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRLZXl3b3JkU2l6ZShp
ZGVudCAtIENTU1ZhbHVlWHhTbWFsbCArIDEpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgY2FzZSBDU1NWYWx1ZUxhcmdlcjoKLSAgICAgICAgICAgICAgICBzaXplID0gbGFy
Z2VyRm9udFNpemUocGFyZW50U2l6ZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICBjYXNlIENTU1ZhbHVlU21hbGxlcjoKLSAgICAgICAgICAgICAgICBzaXplID0gc21hbGxl
ckZvbnRTaXplKHBhcmVudFNpemUpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgY2FzZSBDU1NWYWx1ZVdlYmtpdFJ1YnlUZXh0OiB7Ci0gICAgICAgICAgICAgICAgZmxvYXQg
cnVieVRleHRTaXplTXVsdGlwbGllciA9IGRldGVybWluZVJ1YnlUZXh0U2l6ZU11bHRpcGxpZXIo
c3R5bGVSZXNvbHZlcik7Ci0gICAgICAgICAgICAgICAgc2l6ZSA9IHJ1YnlUZXh0U2l6ZU11bHRp
cGxpZXIgKiBwYXJlbnRTaXplOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
fSBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldElzQWJzb2x1dGVTaXplKHBhcmVudElzQWJzb2x1
dGVTaXplICYmIChpZGVudCA9PSBDU1NWYWx1ZUxhcmdlciB8fCBpZGVudCA9PSBDU1NWYWx1ZVNt
YWxsZXIgfHwgaWRlbnQgPT0gQ1NTVmFsdWVXZWJraXRSdWJ5VGV4dCkpOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldElzQWJzb2x1dGVTaXplKHBhcmVu
dElzQWJzb2x1dGVTaXplIHx8ICEocHJpbWl0aXZlVmFsdWUuaXNQZXJjZW50YWdlKCkgfHwgcHJp
bWl0aXZlVmFsdWUuaXNGb250UmVsYXRpdmVMZW5ndGgoKSkpOwotICAgICAgICAgICAgaWYgKHBy
aW1pdGl2ZVZhbHVlLmlzTGVuZ3RoKCkpIHsKLSAgICAgICAgICAgICAgICBzaXplID0gcHJpbWl0
aXZlVmFsdWUuY29tcHV0ZUxlbmd0aDxmbG9hdD4oQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YShz
dHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0
eWxlKCksIHN0eWxlUmVzb2x2ZXItPmRvY3VtZW50KCkucmVuZGVyVmlldygpLCAxLjBmLCB0cnVl
KSk7Ci0gICAgICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3RhdGUoKS5zZXRGb250U2l6ZUhh
c1ZpZXdwb3J0VW5pdHMocHJpbWl0aXZlVmFsdWUuaXNWaWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgo
KSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLmlzUGVyY2VudGFnZSgp
KQotICAgICAgICAgICAgICAgIHNpemUgPSAocHJpbWl0aXZlVmFsdWUuZ2V0RmxvYXRWYWx1ZSgp
ICogcGFyZW50U2l6ZSkgLyAxMDAuMGY7Ci0gICAgICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVW
YWx1ZS5pc0NhbGN1bGF0ZWRQZXJjZW50YWdlV2l0aExlbmd0aCgpKSB7Ci0gICAgICAgICAgICAg
ICAgUmVmPENhbGN1bGF0aW9uVmFsdWU+IGNhbGN1bGF0aW9uVmFsdWUgeyBwcmltaXRpdmVWYWx1
ZS5jc3NDYWxjVmFsdWUoKS0+Y3JlYXRlQ2FsY3VsYXRpb25WYWx1ZShzdHlsZVJlc29sdmVyLT5z
dGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKS5jb3B5V2l0aEFkanVzdGVkWm9vbSgx
LjBmKSkgfTsKLSAgICAgICAgICAgICAgICBzaXplID0gY2FsY3VsYXRpb25WYWx1ZS0+ZXZhbHVh
dGUocGFyZW50U2l6ZSk7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc2l6ZSA8IDApCi0gICAgICAgICAgICByZXR1
cm47Ci0KLSAgICAgICAgLy8gT3Zlcmx5IGxhcmdlIGZvbnQgc2l6ZXMgd2lsbCBjYXVzZSBjcmFz
aGVzIG9uIHNvbWUgcGxhdGZvcm1zIChzdWNoIGFzIFdpbmRvd3MpLgotICAgICAgICAvLyBDYXAg
Zm9udCBzaXplIGhlcmUgdG8gbWFrZSBzdXJlIHRoYXQgZG9lc24ndCBoYXBwZW4uCi0gICAgICAg
IHNpemUgPSBzdGQ6Om1pbihtYXhpbXVtQWxsb3dlZEZvbnRTaXplLCBzaXplKTsKLQotICAgICAg
ICBzdHlsZVJlc29sdmVyLT5zZXRGb250U2l6ZShmb250RGVzY3JpcHRpb24sIHNpemUpOwotICAg
ICAgICBzdHlsZVJlc29sdmVyLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3Jl
YXRlSGFuZGxlcigpIHsgcmV0dXJuIFByb3BlcnR5SGFuZGxlcigmYXBwbHlJbmhlcml0VmFsdWUs
ICZhcHBseUluaXRpYWxWYWx1ZSwgJmFwcGx5VmFsdWUpOyB9Ci19OwotCiBjb25zdCBEZXByZWNh
dGVkU3R5bGVCdWlsZGVyJiBEZXByZWNhdGVkU3R5bGVCdWlsZGVyOjpzaGFyZWRTdHlsZUJ1aWxk
ZXIoKQogewogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxEZXByZWNhdGVkU3R5bGVCdWlsZGVy
PiBzdHlsZUJ1aWxkZXJJbnN0YW5jZTsKQEAgLTMwNSw4ICsxNjAsNiBAQCBEZXByZWNhdGVkU3R5
bGVCdWlsZGVyOjpEZXByZWNhdGVkU3R5bGVCdWlsZGVyKCkKICAgICBzZXRQcm9wZXJ0eUhhbmRs
ZXIoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUmVwZWF0WCwgQXBwbHlQcm9wZXJ0eUZpbGxMYXllcjxF
RmlsbFJlcGVhdCwgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUmVwZWF0WCwgQmFja2dyb3VuZEZpbGxM
YXllciwgJlJlbmRlclN0eWxlOjphY2Nlc3NCYWNrZ3JvdW5kTGF5ZXJzLCAmUmVuZGVyU3R5bGU6
OmJhY2tncm91bmRMYXllcnMsICZGaWxsTGF5ZXI6OmlzUmVwZWF0WFNldCwgJkZpbGxMYXllcjo6
cmVwZWF0WCwgJkZpbGxMYXllcjo6c2V0UmVwZWF0WCwgJkZpbGxMYXllcjo6Y2xlYXJSZXBlYXRY
LCAmRmlsbExheWVyOjppbml0aWFsRmlsbFJlcGVhdFgsICZDU1NUb1N0eWxlTWFwOjptYXBGaWxs
UmVwZWF0WD46OmNyZWF0ZUhhbmRsZXIoKSk7CiAgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1By
b3BlcnR5QmFja2dyb3VuZFJlcGVhdFksIEFwcGx5UHJvcGVydHlGaWxsTGF5ZXI8RUZpbGxSZXBl
YXQsIENTU1Byb3BlcnR5QmFja2dyb3VuZFJlcGVhdFksIEJhY2tncm91bmRGaWxsTGF5ZXIsICZS
ZW5kZXJTdHlsZTo6YWNjZXNzQmFja2dyb3VuZExheWVycywgJlJlbmRlclN0eWxlOjpiYWNrZ3Jv
dW5kTGF5ZXJzLCAmRmlsbExheWVyOjppc1JlcGVhdFlTZXQsICZGaWxsTGF5ZXI6OnJlcGVhdFks
ICZGaWxsTGF5ZXI6OnNldFJlcGVhdFksICZGaWxsTGF5ZXI6OmNsZWFyUmVwZWF0WSwgJkZpbGxM
YXllcjo6aW5pdGlhbEZpbGxSZXBlYXRZLCAmQ1NTVG9TdHlsZU1hcDo6bWFwRmlsbFJlcGVhdFk+
OjpjcmVhdGVIYW5kbGVyKCkpOwogICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eUJh
Y2tncm91bmRTaXplLCBBcHBseVByb3BlcnR5RmlsbExheWVyPEZpbGxTaXplLCBDU1NQcm9wZXJ0
eUJhY2tncm91bmRTaXplLCBCYWNrZ3JvdW5kRmlsbExheWVyLCAmUmVuZGVyU3R5bGU6OmFjY2Vz
c0JhY2tncm91bmRMYXllcnMsICZSZW5kZXJTdHlsZTo6YmFja2dyb3VuZExheWVycywgJkZpbGxM
YXllcjo6aXNTaXplU2V0LCAmRmlsbExheWVyOjpzaXplLCAmRmlsbExheWVyOjpzZXRTaXplLCAm
RmlsbExheWVyOjpjbGVhclNpemUsICZGaWxsTGF5ZXI6OmluaXRpYWxGaWxsU2l6ZSwgJkNTU1Rv
U3R5bGVNYXA6Om1hcEZpbGxTaXplPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0
eUhhbmRsZXIoQ1NTUHJvcGVydHlGb250U2l6ZSwgQXBwbHlQcm9wZXJ0eUZvbnRTaXplOjpjcmVh
dGVIYW5kbGVyKCkpOwotCiAgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0
QmFja2dyb3VuZENsaXAsIENTU1Byb3BlcnR5QmFja2dyb3VuZENsaXApOwogICAgIHNldFByb3Bl
cnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdEJhY2tncm91bmRDb21wb3NpdGUsIEFwcGx5UHJv
cGVydHlGaWxsTGF5ZXI8Q29tcG9zaXRlT3BlcmF0b3IsIENTU1Byb3BlcnR5V2Via2l0QmFja2dy
b3VuZENvbXBvc2l0ZSwgQmFja2dyb3VuZEZpbGxMYXllciwgJlJlbmRlclN0eWxlOjphY2Nlc3NC
YWNrZ3JvdW5kTGF5ZXJzLCAmUmVuZGVyU3R5bGU6OmJhY2tncm91bmRMYXllcnMsICZGaWxsTGF5
ZXI6OmlzQ29tcG9zaXRlU2V0LCAmRmlsbExheWVyOjpjb21wb3NpdGUsICZGaWxsTGF5ZXI6OnNl
dENvbXBvc2l0ZSwgJkZpbGxMYXllcjo6Y2xlYXJDb21wb3NpdGUsICZGaWxsTGF5ZXI6OmluaXRp
YWxGaWxsQ29tcG9zaXRlLCAmQ1NTVG9TdHlsZU1hcDo6bWFwRmlsbENvbXBvc2l0ZT46OmNyZWF0
ZUhhbmRsZXIoKSk7CiAgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0QmFj
a2dyb3VuZE9yaWdpbiwgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kT3JpZ2luKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXJDdXN0b20uaCBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZUJ1aWxkZXJDdXN0b20uaAppbmRleCAxYzIxOWU2MGQzMmRkZTg0ZjNiMTJhZjll
MTJlMTVlZDQ5NzZiYzg2Li4yMDk2MzlmZGY5NDA2MDQwZGRlN2IzODExMWUyYTU5Mzk0ZjUxZjQw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyQ3VzdG9tLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlckN1c3RvbS5oCkBAIC0zMSw3ICszMSw5
IEBACiAjaW5jbHVkZSAiQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU1NoYWRv
d1ZhbHVlLmgiCiAjaW5jbHVkZSAiQ3Vyc29yTGlzdC5oIgorI2luY2x1ZGUgIkVsZW1lbnRBbmNl
c3Rvckl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJIVE1MRWxlbWVu
dC5oIgogI2luY2x1ZGUgIkxvY2FsZVRvU2NyaXB0TWFwcGluZy5oIgogI2luY2x1ZGUgIlJlY3Qu
aCIKICNpbmNsdWRlICJTVkdFbGVtZW50LmgiCkBAIC02MSw2ICs2Myw3IEBAIHB1YmxpYzoKICAg
ICBERUNMQVJFX1BST1BFUlRZX0NVU1RPTV9IQU5ETEVSUyhDb3VudGVyUmVzZXQpOwogICAgIERF
Q0xBUkVfUFJPUEVSVFlfQ1VTVE9NX0hBTkRMRVJTKEN1cnNvcik7CiAgICAgREVDTEFSRV9QUk9Q
RVJUWV9DVVNUT01fSEFORExFUlMoRm9udEZhbWlseSk7CisgICAgREVDTEFSRV9QUk9QRVJUWV9D
VVNUT01fSEFORExFUlMoRm9udFNpemUpOwogICAgIERFQ0xBUkVfUFJPUEVSVFlfQ1VTVE9NX0hB
TkRMRVJTKEZvbnRXZWlnaHQpOwogI2lmIEVOQUJMRShDU1NfSU1BR0VfUkVTT0xVVElPTikKICAg
ICBERUNMQVJFX1BST1BFUlRZX0NVU1RPTV9IQU5ETEVSUyhJbWFnZVJlc29sdXRpb24pOwpAQCAt
MTE4LDYgKzEyMSwxMCBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdENv
dW50ZXIoU3R5bGVSZXNvbHZlciYpOwogICAgIHRlbXBsYXRlIDxDb3VudGVyQmVoYXZpb3IgY291
bnRlckJlaGF2aW9yPgogICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWVDb3VudGVyKFN0eWxlUmVz
b2x2ZXImLCBDU1NWYWx1ZSYpOworCisgICAgc3RhdGljIGZsb2F0IGxhcmdlckZvbnRTaXplKGZs
b2F0IHNpemUpOworICAgIHN0YXRpYyBmbG9hdCBzbWFsbGVyRm9udFNpemUoZmxvYXQgc2l6ZSk7
CisgICAgc3RhdGljIGZsb2F0IGRldGVybWluZVJ1YnlUZXh0U2l6ZU11bHRpcGxpZXIoU3R5bGVS
ZXNvbHZlciYpOwogfTsKIAogaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZh
bHVlV2Via2l0TWFycXVlZUluY3JlbWVudChTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBD
U1NWYWx1ZSYgdmFsdWUpCkBAIC04NDIsOCArODQ5LDEwIEBAIGlubGluZSB2b2lkIFN0eWxlQnVp
bGRlckN1c3RvbTo6YXBwbHlJbml0aWFsRm9udEZhbWlseShTdHlsZVJlc29sdmVyJiBzdHlsZVJl
c29sCiAgICAgRm9udERlc2NyaXB0aW9uIGluaXRpYWxEZXNjID0gRm9udERlc2NyaXB0aW9uKCk7
CiAKICAgICAvLyBXZSBuZWVkIHRvIGFkanVzdCB0aGUgc2l6ZSB0byBhY2NvdW50IGZvciB0aGUg
Z2VuZXJpYyBmYW1pbHkgY2hhbmdlIGZyb20gbW9ub3NwYWNlIHRvIG5vbi1tb25vc3BhY2UuCi0g
ICAgaWYgKGZvbnREZXNjcmlwdGlvbi5rZXl3b3JkU2l6ZSgpICYmIGZvbnREZXNjcmlwdGlvbi51
c2VGaXhlZERlZmF1bHRTaXplKCkpCi0gICAgICAgIHN0eWxlUmVzb2x2ZXIuc2V0Rm9udFNpemUo
Zm9udERlc2NyaXB0aW9uLCBTdHlsZTo6Zm9udFNpemVGb3JLZXl3b3JkKENTU1ZhbHVlWHhTbWFs
bCArIGZvbnREZXNjcmlwdGlvbi5rZXl3b3JkU2l6ZSgpIC0gMSwgZmFsc2UsIHN0eWxlUmVzb2x2
ZXIuZG9jdW1lbnQoKSkpOworICAgIGlmIChmb250RGVzY3JpcHRpb24udXNlRml4ZWREZWZhdWx0
U2l6ZSgpKSB7CisgICAgICAgIGlmIChDU1NWYWx1ZUlEIHNpemVJZGVudGlmaWVyID0gZm9udERl
c2NyaXB0aW9uLmtleXdvcmRTaXplQXNJZGVudGlmaWVyKCkpCisgICAgICAgICAgICBzdHlsZVJl
c29sdmVyLnNldEZvbnRTaXplKGZvbnREZXNjcmlwdGlvbiwgU3R5bGU6OmZvbnRTaXplRm9yS2V5
d29yZChzaXplSWRlbnRpZmllciwgZmFsc2UsIHN0eWxlUmVzb2x2ZXIuZG9jdW1lbnQoKSkpOwor
ICAgIH0KICAgICBpZiAoIWluaXRpYWxEZXNjLmZpcnN0RmFtaWx5KCkuaXNFbXB0eSgpKQogICAg
ICAgICBmb250RGVzY3JpcHRpb24uc2V0RmFtaWxpZXMoaW5pdGlhbERlc2MuZmFtaWxpZXMoKSk7
CiAKQEAgLTkyMyw4ICs5MzIsMTAgQEAgaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjph
cHBseVZhbHVlRm9udEZhbWlseShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmUKICAgICAgICAg
cmV0dXJuOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRGYW1pbGllcyhmYW1pbGllcyk7CiAKLSAg
ICBpZiAoZm9udERlc2NyaXB0aW9uLmtleXdvcmRTaXplKCkgJiYgZm9udERlc2NyaXB0aW9uLnVz
ZUZpeGVkRGVmYXVsdFNpemUoKSAhPSBvbGRGYW1pbHlVc2VkRml4ZWREZWZhdWx0U2l6ZSkKLSAg
ICAgICAgc3R5bGVSZXNvbHZlci5zZXRGb250U2l6ZShmb250RGVzY3JpcHRpb24sIFN0eWxlOjpm
b250U2l6ZUZvcktleXdvcmQoQ1NTVmFsdWVYeFNtYWxsICsgZm9udERlc2NyaXB0aW9uLmtleXdv
cmRTaXplKCkgLSAxLCAhb2xkRmFtaWx5VXNlZEZpeGVkRGVmYXVsdFNpemUsIHN0eWxlUmVzb2x2
ZXIuZG9jdW1lbnQoKSkpOworICAgIGlmIChmb250RGVzY3JpcHRpb24udXNlRml4ZWREZWZhdWx0
U2l6ZSgpICE9IG9sZEZhbWlseVVzZWRGaXhlZERlZmF1bHRTaXplKSB7CisgICAgICAgIGlmIChD
U1NWYWx1ZUlEIHNpemVJZGVudGlmaWVyID0gZm9udERlc2NyaXB0aW9uLmtleXdvcmRTaXplQXNJ
ZGVudGlmaWVyKCkpCisgICAgICAgICAgICBzdHlsZVJlc29sdmVyLnNldEZvbnRTaXplKGZvbnRE
ZXNjcmlwdGlvbiwgU3R5bGU6OmZvbnRTaXplRm9yS2V5d29yZChzaXplSWRlbnRpZmllciwgIW9s
ZEZhbWlseVVzZWRGaXhlZERlZmF1bHRTaXplLCBzdHlsZVJlc29sdmVyLmRvY3VtZW50KCkpKTsK
KyAgICB9CiAKICAgICBzdHlsZVJlc29sdmVyLnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3Jp
cHRpb24pOwogfQpAQCAtMTI2OCw2ICsxMjc5LDEyOSBAQCBpbmxpbmUgdm9pZCBTdHlsZUJ1aWxk
ZXJDdXN0b206OmFwcGx5VmFsdWVXZWJraXRGb250VmFyaWFudExpZ2F0dXJlcyhTdHlsZVJlc29s
dgogICAgIHN0eWxlUmVzb2x2ZXIuc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7
CiB9CiAKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsRm9udFNp
emUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKK3sKKyAgICBGb250RGVzY3JpcHRpb24g
Zm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5mb250RGVzY3JpcHRpb24o
KTsKKyAgICBmbG9hdCBzaXplID0gU3R5bGU6OmZvbnRTaXplRm9yS2V5d29yZChDU1NWYWx1ZU1l
ZGl1bSwgZm9udERlc2NyaXB0aW9uLnVzZUZpeGVkRGVmYXVsdFNpemUoKSwgc3R5bGVSZXNvbHZl
ci5kb2N1bWVudCgpKTsKKworICAgIGlmIChzaXplIDwgMCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgZm9udERlc2NyaXB0aW9uLnNldEtleXdvcmRTaXplRnJvbUlkZW50aWZpZXIoQ1NTVmFsdWVN
ZWRpdW0pOworICAgIHN0eWxlUmVzb2x2ZXIuc2V0Rm9udFNpemUoZm9udERlc2NyaXB0aW9uLCBz
aXplKTsKKyAgICBzdHlsZVJlc29sdmVyLnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRp
b24pOworfQorCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdEZv
bnRTaXplKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCit7CisgICAgY29uc3QgRm9udERl
c2NyaXB0aW9uJiBwYXJlbnRGb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLnBhcmVudFN0
eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOworICAgIGZsb2F0IHNpemUgPSBwYXJlbnRGb250RGVz
Y3JpcHRpb24uc3BlY2lmaWVkU2l6ZSgpOworCisgICAgaWYgKHNpemUgPCAwKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNv
bHZlci5zdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0
S2V5d29yZFNpemUocGFyZW50Rm9udERlc2NyaXB0aW9uLmtleXdvcmRTaXplKCkpOworICAgIHN0
eWxlUmVzb2x2ZXIuc2V0Rm9udFNpemUoZm9udERlc2NyaXB0aW9uLCBzaXplKTsKKyAgICBzdHls
ZVJlc29sdmVyLnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOworfQorCisvLyBX
aGVuIHRoZSBDU1Mga2V5d29yZCAibGFyZ2VyIiBpcyB1c2VkLCB0aGlzIGZ1bmN0aW9uIHdpbGwg
YXR0ZW1wdCB0byBtYXRjaCB3aXRoaW4gdGhlIGtleXdvcmQKKy8vIHRhYmxlLCBhbmQgZmFpbGlu
ZyB0aGF0LCB3aWxsIHNpbXBseSBtdWx0aXBseSBieSAxLjIuCitpbmxpbmUgZmxvYXQgU3R5bGVC
dWlsZGVyQ3VzdG9tOjpsYXJnZXJGb250U2l6ZShmbG9hdCBzaXplKQoreworICAgIC8vIEZJWE1F
OiBGaWd1cmUgb3V0IHdoZXJlIHdlIGZhbGwgaW4gdGhlIHNpemUgcmFuZ2VzICh4eC1zbWFsbCB0
byB4eHgtbGFyZ2UpIGFuZCBzY2FsZSB1cCB0bworICAgIC8vIHRoZSBuZXh0IHNpemUgbGV2ZWwu
CisgICAgcmV0dXJuIHNpemUgKiAxLjJmOworfQorCisvLyBMaWtlIHRoZSBwcmV2aW91cyBmdW5j
dGlvbiwgYnV0IGZvciB0aGUga2V5d29yZCAic21hbGxlciIuCitpbmxpbmUgZmxvYXQgU3R5bGVC
dWlsZGVyQ3VzdG9tOjpzbWFsbGVyRm9udFNpemUoZmxvYXQgc2l6ZSkKK3sKKyAgICAvLyBGSVhN
RTogRmlndXJlIG91dCB3aGVyZSB3ZSBmYWxsIGluIHRoZSBzaXplIHJhbmdlcyAoeHgtc21hbGwg
dG8geHh4LWxhcmdlKSBhbmQgc2NhbGUgZG93biB0bworICAgIC8vIHRoZSBuZXh0IHNpemUgbGV2
ZWwuCisgICAgcmV0dXJuIHNpemUgLyAxLjJmOworfQorCitpbmxpbmUgZmxvYXQgU3R5bGVCdWls
ZGVyQ3VzdG9tOjpkZXRlcm1pbmVSdWJ5VGV4dFNpemVNdWx0aXBsaWVyKFN0eWxlUmVzb2x2ZXIm
IHN0eWxlUmVzb2x2ZXIpCit7CisgICAgaWYgKHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+cnVieVBv
c2l0aW9uKCkgIT0gUnVieVBvc2l0aW9uSW50ZXJDaGFyYWN0ZXIpCisgICAgICAgIHJldHVybiAw
LjVmOworCisgICAgLy8gRklYTUU6IFRoaXMgaGFjayBpcyB0byBlbnN1cmUgdG9uZSBtYXJrcyBh
cmUgdGhlIHNhbWUgc2l6ZSBhcworICAgIC8vIHRoZSBib3BvbW9mby4gVGhpcyBjb2RlIHdpbGwg
Z28gYXdheSBpZiB3ZSBtYWtlIGEgc3BlY2lhbCByZW5kZXJlcgorICAgIC8vIGZvciB0aGUgdG9u
ZSBtYXJrcyBldmVudHVhbGx5LgorICAgIGlmIChhdXRvKiBlbGVtZW50ID0gc3R5bGVSZXNvbHZl
ci5zdGF0ZSgpLmVsZW1lbnQoKSkgeworICAgICAgICBmb3IgKGF1dG8mIGFuY2VzdG9yIDogYW5j
ZXN0b3JzT2ZUeXBlPEhUTUxFbGVtZW50PigqZWxlbWVudCkpIHsKKyAgICAgICAgICAgIGlmIChh
bmNlc3Rvci5oYXNUYWdOYW1lKEhUTUxOYW1lczo6cnRUYWcpKQorICAgICAgICAgICAgICAgIHJl
dHVybiAxLjBmOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAwLjI1ZjsKK30KKworaW5s
aW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlRm9udFNpemUoU3R5bGVSZXNv
bHZlciYgc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVlKQoreworICAgIEZvbnREZXNjcmlw
dGlvbiBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLnN0eWxlKCktPmZvbnREZXNjcmlw
dGlvbigpOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRLZXl3b3JkU2l6ZUZyb21JZGVudGlmaWVy
KENTU1ZhbHVlSW52YWxpZCk7CisKKyAgICBmbG9hdCBwYXJlbnRTaXplID0gMDsKKyAgICBib29s
IHBhcmVudElzQWJzb2x1dGVTaXplID0gZmFsc2U7CisgICAgaWYgKGF1dG8qIHBhcmVudFN0eWxl
ID0gc3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpKSB7CisgICAgICAgIHBhcmVudFNpemUgPSBw
YXJlbnRTdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkuc3BlY2lmaWVkU2l6ZSgpOworICAgICAgICBw
YXJlbnRJc0Fic29sdXRlU2l6ZSA9IHBhcmVudFN0eWxlLT5mb250RGVzY3JpcHRpb24oKS5pc0Fi
c29sdXRlU2l6ZSgpOworICAgIH0KKworICAgIGF1dG8mIHByaW1pdGl2ZVZhbHVlID0gZG93bmNh
c3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKKyAgICBmbG9hdCBzaXplOworICAgIGlmIChD
U1NWYWx1ZUlEIGlkZW50ID0gcHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpKSB7CisgICAgICAg
IGZvbnREZXNjcmlwdGlvbi5zZXRJc0Fic29sdXRlU2l6ZShwYXJlbnRJc0Fic29sdXRlU2l6ZSAm
JiAoaWRlbnQgPT0gQ1NTVmFsdWVMYXJnZXIgfHwgaWRlbnQgPT0gQ1NTVmFsdWVTbWFsbGVyIHx8
IGlkZW50ID09IENTU1ZhbHVlV2Via2l0UnVieVRleHQpKTsKKworICAgICAgICAvLyBLZXl3b3Jk
cyBhcmUgYmVpbmcgdXNlZC4KKyAgICAgICAgc3dpdGNoIChpZGVudCkgeworICAgICAgICBjYXNl
IENTU1ZhbHVlWHhTbWFsbDoKKyAgICAgICAgY2FzZSBDU1NWYWx1ZVhTbWFsbDoKKyAgICAgICAg
Y2FzZSBDU1NWYWx1ZVNtYWxsOgorICAgICAgICBjYXNlIENTU1ZhbHVlTWVkaXVtOgorICAgICAg
ICBjYXNlIENTU1ZhbHVlTGFyZ2U6CisgICAgICAgIGNhc2UgQ1NTVmFsdWVYTGFyZ2U6CisgICAg
ICAgIGNhc2UgQ1NTVmFsdWVYeExhcmdlOgorICAgICAgICBjYXNlIENTU1ZhbHVlV2Via2l0WHh4
TGFyZ2U6CisgICAgICAgICAgICBzaXplID0gU3R5bGU6OmZvbnRTaXplRm9yS2V5d29yZChpZGVu
dCwgZm9udERlc2NyaXB0aW9uLnVzZUZpeGVkRGVmYXVsdFNpemUoKSwgc3R5bGVSZXNvbHZlci5k
b2N1bWVudCgpKTsKKyAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRLZXl3b3JkU2l6ZUZy
b21JZGVudGlmaWVyKGlkZW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENT
U1ZhbHVlTGFyZ2VyOgorICAgICAgICAgICAgc2l6ZSA9IGxhcmdlckZvbnRTaXplKHBhcmVudFNp
emUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVTbWFsbGVyOgor
ICAgICAgICAgICAgc2l6ZSA9IHNtYWxsZXJGb250U2l6ZShwYXJlbnRTaXplKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1ZhbHVlV2Via2l0UnVieVRleHQ6CisgICAgICAg
ICAgICBzaXplID0gZGV0ZXJtaW5lUnVieVRleHRTaXplTXVsdGlwbGllcihzdHlsZVJlc29sdmVy
KSAqIHBhcmVudFNpemU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGZvbnRE
ZXNjcmlwdGlvbi5zZXRJc0Fic29sdXRlU2l6ZShwYXJlbnRJc0Fic29sdXRlU2l6ZSB8fCAhKHBy
aW1pdGl2ZVZhbHVlLmlzUGVyY2VudGFnZSgpIHx8IHByaW1pdGl2ZVZhbHVlLmlzRm9udFJlbGF0
aXZlTGVuZ3RoKCkpKTsKKyAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmlzTGVuZ3RoKCkpIHsK
KyAgICAgICAgICAgIHNpemUgPSBwcmltaXRpdmVWYWx1ZS5jb21wdXRlTGVuZ3RoPGZsb2F0PihD
U1NUb0xlbmd0aENvbnZlcnNpb25EYXRhKHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKSwgc3R5
bGVSZXNvbHZlci5yb290RWxlbWVudFN0eWxlKCksIHN0eWxlUmVzb2x2ZXIuZG9jdW1lbnQoKS5y
ZW5kZXJWaWV3KCksIDEuMGYsIHRydWUpKTsKKyAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXIuc3Rh
dGUoKS5zZXRGb250U2l6ZUhhc1ZpZXdwb3J0VW5pdHMocHJpbWl0aXZlVmFsdWUuaXNWaWV3cG9y
dFBlcmNlbnRhZ2VMZW5ndGgoKSk7CisgICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUu
aXNQZXJjZW50YWdlKCkpCisgICAgICAgICAgICBzaXplID0gKHByaW1pdGl2ZVZhbHVlLmdldEZs
b2F0VmFsdWUoKSAqIHBhcmVudFNpemUpIC8gMTAwLjBmOworICAgICAgICBlbHNlIGlmIChwcmlt
aXRpdmVWYWx1ZS5pc0NhbGN1bGF0ZWRQZXJjZW50YWdlV2l0aExlbmd0aCgpKQorICAgICAgICAg
ICAgc2l6ZSA9IHByaW1pdGl2ZVZhbHVlLmNzc0NhbGNWYWx1ZSgpLT5jcmVhdGVDYWxjdWxhdGlv
blZhbHVlKHN0eWxlUmVzb2x2ZXIuc3RhdGUoKS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCku
Y29weVdpdGhBZGp1c3RlZFpvb20oMS4wZikpLT5ldmFsdWF0ZShwYXJlbnRTaXplKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChzaXplIDwgMCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgc3R5bGVSZXNvbHZlci5zZXRGb250U2l6ZShmb250RGVz
Y3JpcHRpb24sIHN0ZDo6bWluKG1heGltdW1BbGxvd2VkRm9udFNpemUsIHNpemUpKTsKKyAgICBz
dHlsZVJlc29sdmVyLnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOworfQorCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBTdHlsZUJ1aWxkZXJDdXN0b21faApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCmluZGV4IGU0YTg0ZTc1YzcxZDExOWU4Yjhk
ODVjYmQ1ODlkNTZkNjYxNzhlMjkuLmUxMzQzNWM3NTc4NjcwYWM1M2M2NGM4MDk3MDZmMmZiODk2
OTFjMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKQEAgLTMyMTUsOCArMzIx
NSw4IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6Y2hlY2tGb3JHZW5lcmljRmFtaWx5Q2hhbmdlKFJl
bmRlclN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5bGUqCiAgICAgLy8gSWYgdGhlIGZvbnQgdXNlcyBh
IGtleXdvcmQgc2l6ZSwgdGhlbiB3ZSByZWZldGNoIGZyb20gdGhlIHRhYmxlIHJhdGhlciB0aGFu
CiAgICAgLy8gbXVsdGlwbHlpbmcgYnkgb3VyIHNjYWxlIGZhY3Rvci4KICAgICBmbG9hdCBzaXpl
OwotICAgIGlmIChjaGlsZEZvbnQua2V5d29yZFNpemUoKSkKLSAgICAgICAgc2l6ZSA9IFN0eWxl
Ojpmb250U2l6ZUZvcktleXdvcmQoQ1NTVmFsdWVYeFNtYWxsICsgY2hpbGRGb250LmtleXdvcmRT
aXplKCkgLSAxLCBjaGlsZEZvbnQudXNlRml4ZWREZWZhdWx0U2l6ZSgpLCBkb2N1bWVudCgpKTsK
KyAgICBpZiAoQ1NTVmFsdWVJRCBzaXplSWRlbnRpZmllciA9IGNoaWxkRm9udC5rZXl3b3JkU2l6
ZUFzSWRlbnRpZmllcigpKQorICAgICAgICBzaXplID0gU3R5bGU6OmZvbnRTaXplRm9yS2V5d29y
ZChzaXplSWRlbnRpZmllciwgY2hpbGRGb250LnVzZUZpeGVkRGVmYXVsdFNpemUoKSwgZG9jdW1l
bnQoKSk7CiAgICAgZWxzZSB7CiAgICAgICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IGRvY3VtZW50
U2V0dGluZ3MoKTsKICAgICAgICAgZmxvYXQgZml4ZWRTY2FsZUZhY3RvciA9IChzZXR0aW5ncyAm
JiBzZXR0aW5ncy0+ZGVmYXVsdEZpeGVkRm9udFNpemUoKSAmJiBzZXR0aW5ncy0+ZGVmYXVsdEZv
bnRTaXplKCkpCkBAIC0zMjM4LDcgKzMyMzgsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmluaXRp
YWxpemVGb250U3R5bGUoU2V0dGluZ3MqIHNldHRpbmdzKQogICAgIGZvbnREZXNjcmlwdGlvbi5z
ZXRSZW5kZXJpbmdNb2RlKHNldHRpbmdzLT5mb250UmVuZGVyaW5nTW9kZSgpKTsKICAgICBmb250
RGVzY3JpcHRpb24uc2V0VXNlUHJpbnRlckZvbnQoZG9jdW1lbnQoKS5wcmludGluZygpIHx8ICFz
ZXR0aW5ncy0+c2NyZWVuRm9udFN1YnN0aXR1dGlvbkVuYWJsZWQoKSk7CiAgICAgZm9udERlc2Ny
aXB0aW9uLnNldE9uZUZhbWlseShzdGFuZGFyZEZhbWlseSk7Ci0gICAgZm9udERlc2NyaXB0aW9u
LnNldEtleXdvcmRTaXplKENTU1ZhbHVlTWVkaXVtIC0gQ1NTVmFsdWVYeFNtYWxsICsgMSk7Cisg
ICAgZm9udERlc2NyaXB0aW9uLnNldEtleXdvcmRTaXplRnJvbUlkZW50aWZpZXIoQ1NTVmFsdWVN
ZWRpdW0pOwogICAgIHNldEZvbnRTaXplKGZvbnREZXNjcmlwdGlvbiwgU3R5bGU6OmZvbnRTaXpl
Rm9yS2V5d29yZChDU1NWYWx1ZU1lZGl1bSwgZmFsc2UsIGRvY3VtZW50KCkpKTsKICAgICBtX3N0
YXRlLnN0eWxlKCktPnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0
KCkpOwogICAgIG1fc3RhdGUuc2V0TGluZUhlaWdodFZhbHVlKDApOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udERlc2NyaXB0aW9uLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RGVzY3JpcHRpb24uaAppbmRleCA1MzU4NGQw
OWU1YWU5NTFhNmIzMDI0ZWM0YzQyN2I2ZTlhZDAzMWNlLi4wNWE2NGM5NzM0M2M0NzE3YjNmMzNl
NWEzMTgxYjllZmFlMmEzY2FkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250RGVzY3JpcHRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250RGVzY3JpcHRpb24uaApAQCAtMjUsNiArMjUsNyBAQAogI2lmbmRlZiBGb250
RGVzY3JpcHRpb25faAogI2RlZmluZSBGb250RGVzY3JpcHRpb25faAogCisjaW5jbHVkZSAiQ1NT
VmFsdWVLZXl3b3Jkcy5oIgogI2luY2x1ZGUgIkZvbnRGZWF0dXJlU2V0dGluZ3MuaCIKICNpbmNs
dWRlICJGb250T3JpZW50YXRpb24uaCIKICNpbmNsdWRlICJGb250UmVuZGVyaW5nTW9kZS5oIgpA
QCAtMTI0LDYgKzEyNSwxMiBAQCBwdWJsaWM6CiAgICAgTGlnYXR1cmVzU3RhdGUgZGlzY3JldGlv
bmFyeUxpZ2F0dXJlc1N0YXRlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8TGlnYXR1cmVz
U3RhdGU+KG1fZGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRlKTsgfQogICAgIExpZ2F0dXJlc1N0
YXRlIGhpc3RvcmljYWxMaWdhdHVyZXNTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0
PExpZ2F0dXJlc1N0YXRlPihtX2hpc3RvcmljYWxMaWdhdHVyZXNTdGF0ZSk7IH0KICAgICB1bnNp
Z25lZCBrZXl3b3JkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5d29yZFNpemU7IH0KKyAgICBD
U1NWYWx1ZUlEIGtleXdvcmRTaXplQXNJZGVudGlmaWVyKCkgY29uc3QKKyAgICB7CisgICAgICAg
IENTU1ZhbHVlSUQgaWRlbnRpZmllciA9IG1fa2V5d29yZFNpemUgPyBzdGF0aWNfY2FzdDxDU1NW
YWx1ZUlEPihDU1NWYWx1ZVh4U21hbGwgKyBtX2tleXdvcmRTaXplIC0gMSkgOiBDU1NWYWx1ZUlu
dmFsaWQ7CisgICAgICAgIEFTU0VSVChpZGVudGlmaWVyID09IENTU1ZhbHVlSW52YWxpZCB8fCAo
aWRlbnRpZmllciA+PSBDU1NWYWx1ZVh4U21hbGwgJiYgaWRlbnRpZmllciA8PSBDU1NWYWx1ZVdl
YmtpdFh4eExhcmdlKSk7CisgICAgICAgIHJldHVybiBpZGVudGlmaWVyOworICAgIH0KICAgICBG
b250U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5nKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8Rm9udFNtb290aGluZ01vZGU+KG1fZm9udFNtb290aGluZyk7IH0KICAgICBUZXh0UmVuZGVy
aW5nTW9kZSB0ZXh0UmVuZGVyaW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFRl
eHRSZW5kZXJpbmdNb2RlPihtX3RleHRSZW5kZXJpbmcpOyB9CiAgICAgVVNjcmlwdENvZGUgc2Ny
aXB0KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VVNjcmlwdENvZGU+KG1fc2NyaXB0KTsg
fQpAQCAtMTUzLDcgKzE2MCwxOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRDb21tb25MaWdhdHVy
ZXNTdGF0ZShMaWdhdHVyZXNTdGF0ZSBjb21tb25MaWdhdHVyZXNTdGF0ZSkgeyBtX2NvbW1vbkxp
Z2F0dXJlc1N0YXRlID0gY29tbW9uTGlnYXR1cmVzU3RhdGU7IH0KICAgICB2b2lkIHNldERpc2Ny
ZXRpb25hcnlMaWdhdHVyZXNTdGF0ZShMaWdhdHVyZXNTdGF0ZSBkaXNjcmV0aW9uYXJ5TGlnYXR1
cmVzU3RhdGUpIHsgbV9kaXNjcmV0aW9uYXJ5TGlnYXR1cmVzU3RhdGUgPSBkaXNjcmV0aW9uYXJ5
TGlnYXR1cmVzU3RhdGU7IH0KICAgICB2b2lkIHNldEhpc3RvcmljYWxMaWdhdHVyZXNTdGF0ZShM
aWdhdHVyZXNTdGF0ZSBoaXN0b3JpY2FsTGlnYXR1cmVzU3RhdGUpIHsgbV9oaXN0b3JpY2FsTGln
YXR1cmVzU3RhdGUgPSBoaXN0b3JpY2FsTGlnYXR1cmVzU3RhdGU7IH0KLSAgICB2b2lkIHNldEtl
eXdvcmRTaXplKHVuc2lnbmVkIHMpIHsgbV9rZXl3b3JkU2l6ZSA9IHM7IH0KKyAgICB2b2lkIHNl
dEtleXdvcmRTaXplKHVuc2lnbmVkIHNpemUpCisgICAgeworICAgICAgICBBU1NFUlQoc2l6ZSA+
PSAwICYmIHNpemUgPD0gOCk7CisgICAgICAgIG1fa2V5d29yZFNpemUgPSBzaXplOworICAgICAg
ICBBU1NFUlQobV9rZXl3b3JkU2l6ZSA9PSBzaXplKTsgLy8gTWFrZSBzdXJlIGl0IGZpdHMgaW4g
dGhlIGJpdGZpZWxkLgorICAgIH0KKyAgICB2b2lkIHNldEtleXdvcmRTaXplRnJvbUlkZW50aWZp
ZXIoQ1NTVmFsdWVJRCBpZGVudGlmaWVyKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFpZGVudGlm
aWVyIHx8IChpZGVudGlmaWVyID49IENTU1ZhbHVlWHhTbWFsbCAmJiBpZGVudGlmaWVyIDw9IENT
U1ZhbHVlV2Via2l0WHh4TGFyZ2UpKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydChDU1NWYWx1ZVdl
YmtpdFh4eExhcmdlIC0gQ1NTVmFsdWVYeFNtYWxsICsgMSA9PSA4LCAiTWF4aW11bSBrZXl3b3Jk
IHNpemUgc2hvdWxkIGJlIDguIik7CisgICAgICAgIHNldEtleXdvcmRTaXplKGlkZW50aWZpZXIg
PyBpZGVudGlmaWVyIC0gQ1NTVmFsdWVYeFNtYWxsICsgMSA6IDApOworICAgIH0KKwogICAgIHZv
aWQgc2V0Rm9udFNtb290aGluZyhGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmcpIHsgbV9mb250
U21vb3RoaW5nID0gc21vb3RoaW5nOyB9CiAgICAgdm9pZCBzZXRUZXh0UmVuZGVyaW5nTW9kZShU
ZXh0UmVuZGVyaW5nTW9kZSByZW5kZXJpbmcpIHsgbV90ZXh0UmVuZGVyaW5nID0gcmVuZGVyaW5n
OyB9CiAgICAgdm9pZCBzZXRJc1NwZWNpZmllZEZvbnQoYm9vbCBpc1NwZWNpZmllZEZvbnQpIHsg
bV9pc1NwZWNpZmllZEZvbnQgPSBpc1NwZWNpZmllZEZvbnQ7IH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2ZUZvckRvY3VtZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3N0eWxlL1N0eWxlUmVzb2x2ZUZvckRvY3VtZW50LmNwcAppbmRleCA4NjlhNWY0YWU3NmI4
NmY4MWQyMDBlYmQ3NTBiMGMxNWQwNGU0YmFhLi5jNWQxMjYwMTUzOGU1N2M3MjE2ZGEwMmQ0MzZi
ZTEwNzVhNzU0ODg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlc29s
dmVGb3JEb2N1bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZl
Rm9yRG9jdW1lbnQuY3BwCkBAIC0xMDEsNyArMTAxLDcgQEAgUmVmPFJlbmRlclN0eWxlPiByZXNv
bHZlRm9yRG9jdW1lbnQoY29uc3QgRG9jdW1lbnQmIGRvY3VtZW50KQogICAgIGZvbnREZXNjcmlw
dGlvbi5zZXRSZW5kZXJpbmdNb2RlKHNldHRpbmdzLmZvbnRSZW5kZXJpbmdNb2RlKCkpOwogICAg
IGZvbnREZXNjcmlwdGlvbi5zZXRPbmVGYW1pbHkoc3RhbmRhcmRGYW1pbHkpOwogCi0gICAgZm9u
dERlc2NyaXB0aW9uLnNldEtleXdvcmRTaXplKENTU1ZhbHVlTWVkaXVtIC0gQ1NTVmFsdWVYeFNt
YWxsICsgMSk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldEtleXdvcmRTaXplRnJvbUlkZW50aWZp
ZXIoQ1NTVmFsdWVNZWRpdW0pOwogICAgIGludCBzaXplID0gZm9udFNpemVGb3JLZXl3b3JkKENT
U1ZhbHVlTWVkaXVtLCBmYWxzZSwgZG9jdW1lbnQpOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRT
cGVjaWZpZWRTaXplKHNpemUpOwogICAgIGJvb2wgdXNlU1ZHWm9vbVJ1bGVzID0gZG9jdW1lbnQu
aXNTVkdEb2N1bWVudCgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>243904</attachid>
            <date>2015-01-02 11:13:46 -0800</date>
            <delta_ts>2015-01-02 11:53:44 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-140010-20150102111349.patch</filename>
            <type>text/plain</type>
            <size>27152</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc3ODY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWFkNzk5ZDdhNTg3OTMz
YmQxYzE2MWQyNWI0MTQ3YjI4NjhiM2UyNi4uNGZlZjA4ZGUyOWIxNjFkNDkxMDI5MDM0OGI4NGZj
M2Y5ZTkxM2JkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDE0LTEyLTMwICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSAnZm9udC1zaXplJyBD
U1MgcHJvcGVydHkgdG8gdGhlIG5ldyBTdHlsZUJ1aWxkZXIKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MDAxMAorCisgICAgICAgIFJldmlld2VkIGJ5
IERhcmluIEFkbGVyLgorCisgICAgICAgIE1vdmUgJ2ZvbnQtc2l6ZScgQ1NTIHByb3BlcnR5IHRv
IHRoZSBuZXcgU3R5bGVCdWlsZGVyIGJ5IHVzaW5nIGN1c3RvbQorICAgICAgICBjb2RlLgorCiAy
MDE1LTAxLTAyICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBQYXNz
IERvY3VtZW50IGluc3RlYWQgb2YgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCB0byBub24td29ya2Vy
IGNvbnN0cnVjdG9ycwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVk
U3R5bGVEZWNsYXJhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHls
ZURlY2xhcmF0aW9uLmNwcAppbmRleCAxNWIzNTY4ODNlNjM5YWU3YzQ5Y2IyOTY4YjIzZmQxZmE3
NmZjNjcwLi40N2M2YzFiYjYxZjVmOTEzOGNkZWM3ZTRkYmQ1ZTc0ZjdhZGI3NDQwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcApA
QCAtMTI4MiwxMyArMTI4Miw2IEBAIHZvaWQgQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpz
ZXRDc3NUZXh0KGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIGVjID0gTk9f
TU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOwogfQogCi1zdGF0aWMgQ1NTVmFsdWVJRCBjc3NJZGVu
dGlmaWVyRm9yRm9udFNpemVLZXl3b3JkKGludCBrZXl3b3JkU2l6ZSkKLXsKLSAgICBBU1NFUlRf
QVJHKGtleXdvcmRTaXplLCBrZXl3b3JkU2l6ZSk7Ci0gICAgQVNTRVJUX0FSRyhrZXl3b3JkU2l6
ZSwga2V5d29yZFNpemUgPD0gOCk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PENTU1ZhbHVlSUQ+
KENTU1ZhbHVlWHhTbWFsbCArIGtleXdvcmRTaXplIC0gMSk7Ci19Ci0KIFBhc3NSZWZQdHI8Q1NT
UHJpbWl0aXZlVmFsdWU+IENvbXB1dGVkU3R5bGVFeHRyYWN0b3I6OmdldEZvbnRTaXplQ1NTVmFs
dWVQcmVmZXJyaW5nS2V5d29yZCgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX25vZGUpCkBAIC0xMzAw
LDggKzEyOTMsOCBAQCBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBDb21wdXRlZFN0eWxl
RXh0cmFjdG9yOjpnZXRGb250U2l6ZUNTU1ZhbHVlUHJlZmVycgogICAgIGlmICghc3R5bGUpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgaWYgKGludCBrZXl3b3JkU2l6ZSA9IHN0eWxl
LT5mb250RGVzY3JpcHRpb24oKS5rZXl3b3JkU2l6ZSgpKQotICAgICAgICByZXR1cm4gY3NzVmFs
dWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKGNzc0lkZW50aWZpZXJGb3JGb250U2l6ZUtl
eXdvcmQoa2V5d29yZFNpemUpKTsKKyAgICBpZiAoQ1NTVmFsdWVJRCBzaXplSWRlbnRpZmllciA9
IHN0eWxlLT5mb250RGVzY3JpcHRpb24oKS5rZXl3b3JkU2l6ZUFzSWRlbnRpZmllcigpKQorICAg
ICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHNpemVJZGVu
dGlmaWVyKTsKIAogICAgIHJldHVybiB6b29tQWRqdXN0ZWRQaXhlbFZhbHVlKHN0eWxlLT5mb250
RGVzY3JpcHRpb24oKS5jb21wdXRlZFBpeGVsU2l6ZSgpLCBzdHlsZS5nZXQoKSk7CiB9CkBAIC0z
MjQxLDEyICszMjM0LDEyIEBAIGJvb2wgQ29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6cHJvcGVydHlN
YXRjaGVzKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgY29uc3QgQ1NTCiB7CiAgICAgaWYgKHBy
b3BlcnR5SUQgPT0gQ1NTUHJvcGVydHlGb250U2l6ZSAmJiBpczxDU1NQcmltaXRpdmVWYWx1ZT4o
KnZhbHVlKSAmJiBtX25vZGUpIHsKICAgICAgICAgbV9ub2RlLT5kb2N1bWVudCgpLnVwZGF0ZUxh
eW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwotICAgICAgICBSZW5kZXJTdHlsZSogc3R5
bGUgPSBtX25vZGUtPmNvbXB1dGVkU3R5bGUobV9wc2V1ZG9FbGVtZW50U3BlY2lmaWVyKTsKLSAg
ICAgICAgaWYgKHN0eWxlICYmIHN0eWxlLT5mb250RGVzY3JpcHRpb24oKS5rZXl3b3JkU2l6ZSgp
KSB7Ci0gICAgICAgICAgICBDU1NWYWx1ZUlEIHNpemVWYWx1ZSA9IGNzc0lkZW50aWZpZXJGb3JG
b250U2l6ZUtleXdvcmQoc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpLmtleXdvcmRTaXplKCkpOwot
ICAgICAgICAgICAgY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93
bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7Ci0gICAgICAgICAgICBpZiAocHJpbWl0
aXZlVmFsdWUuaXNWYWx1ZUlEKCkgJiYgcHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IHNp
emVWYWx1ZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKFJlbmRl
clN0eWxlKiBzdHlsZSA9IG1fbm9kZS0+Y29tcHV0ZWRTdHlsZShtX3BzZXVkb0VsZW1lbnRTcGVj
aWZpZXIpKSB7CisgICAgICAgICAgICBpZiAoQ1NTVmFsdWVJRCBzaXplSWRlbnRpZmllciA9IHN0
eWxlLT5mb250RGVzY3JpcHRpb24oKS5rZXl3b3JkU2l6ZUFzSWRlbnRpZmllcigpKSB7CisgICAg
ICAgICAgICAgICAgYXV0byYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZT4oKnZhbHVlKTsKKyAgICAgICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUuaXNWYWx1
ZUlEKCkgJiYgcHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IHNpemVJZGVudGlmaWVyKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KICAgICAgICAg
fQogICAgIH0KICAgICBSZWZQdHI8Q1NTVmFsdWU+IGNvbXB1dGVkVmFsdWUgPSBwcm9wZXJ0eVZh
bHVlKHByb3BlcnR5SUQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1Byb3Bl
cnR5TmFtZXMuaW4gYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJvcGVydHlOYW1lcy5pbgppbmRl
eCBkNzcwZWMxOWJjODI2MGY5ZjA5MTMxOTk5OWI4Y2ZiMjZiMDJiZGU2Li4wNjI2ZGQ2MmUwYjg2
OGM3NzQyNWFmM2RlMDA1MTIwODBhODI5Y2E5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTUHJvcGVydHlOYW1lcy5pbgorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJvcGVy
dHlOYW1lcy5pbgpAQCAtODksNyArODksNyBAQCBkaXJlY3Rpb24gW0luaGVyaXRlZCwgQ3VzdG9t
PVZhbHVlXQogZGlzcGxheSBbQ3VzdG9tPUluaGVyaXR8VmFsdWVdCiBmb250IFtJbmhlcml0ZWQs
IExlZ2FjeVN0eWxlQnVpbGRlcl0KIGZvbnQtZmFtaWx5IFtJbmhlcml0ZWQsIEN1c3RvbT1BbGxd
Ci1mb250LXNpemUgW0luaGVyaXRlZCwgTGVnYWN5U3R5bGVCdWlsZGVyXQorZm9udC1zaXplIFtJ
bmhlcml0ZWQsIEN1c3RvbT1BbGxdCiBmb250LXN0eWxlIFtJbmhlcml0ZWQsIEZvbnRQcm9wZXJ0
eSwgVHlwZU5hbWU9Rm9udEl0YWxpYywgTmFtZUZvck1ldGhvZHM9SXRhbGljXQogZm9udC12YXJp
YW50IFtJbmhlcml0ZWQsIEZvbnRQcm9wZXJ0eSwgVHlwZU5hbWU9Rm9udFNtYWxsQ2FwcywgTmFt
ZUZvck1ldGhvZHM9U21hbGxDYXBzXQogZm9udC13ZWlnaHQgW0luaGVyaXRlZCwgQ3VzdG9tPUFs
bF0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9EZXByZWNhdGVkU3R5bGVCdWlsZGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9EZXByZWNhdGVkU3R5bGVCdWlsZGVyLmNwcAppbmRl
eCAxNGVmMjc2YWNkNGM3NTljMjgzZjY0MzkxNDU4MTkxNzNmZDQ2ODc5Li41M2NhNTk3ZWJhOTQ4
NDgwNDRkYWYwMzliOGY5YmRjMzk0N2NjZGJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvRGVwcmVjYXRlZFN0eWxlQnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0Rl
cHJlY2F0ZWRTdHlsZUJ1aWxkZXIuY3BwCkBAIC0zNCwxMyArMzQsMTAgQEAKICNpbmNsdWRlICJD
U1NWYWx1ZUxpc3QuaCIKICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgogI2luY2x1ZGUgIlJlbmRl
clN0eWxlLmgiCi0jaW5jbHVkZSAiU3R5bGVGb250U2l6ZUZ1bmN0aW9ucy5oIgogI2luY2x1ZGUg
IlN0eWxlUmVzb2x2ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi11c2luZyBuYW1lc3Bh
Y2UgSFRNTE5hbWVzOwotCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KIHN0cnVjdCBGaWxsTGF5ZXJB
Y2Nlc3NvclR5cGVzIHsKICAgICB0eXBlZGVmIFQgU2V0dGVyOwpAQCAtMTQxLDE0OCArMTM4LDYg
QEAgcHVibGljOgogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpIHsg
cmV0dXJuIFByb3BlcnR5SGFuZGxlcigmYXBwbHlJbmhlcml0VmFsdWUsICZhcHBseUluaXRpYWxW
YWx1ZSwgJmFwcGx5VmFsdWUpOyB9CiB9OwogCi1jbGFzcyBBcHBseVByb3BlcnR5Rm9udFNpemUg
ewotcHJpdmF0ZToKLSAgICAvLyBXaGVuIHRoZSBDU1Mga2V5d29yZCAibGFyZ2VyIiBpcyB1c2Vk
LCB0aGlzIGZ1bmN0aW9uIHdpbGwgYXR0ZW1wdCB0byBtYXRjaCB3aXRoaW4gdGhlIGtleXdvcmQK
LSAgICAvLyB0YWJsZSwgYW5kIGZhaWxpbmcgdGhhdCwgd2lsbCBzaW1wbHkgbXVsdGlwbHkgYnkg
MS4yLgotICAgIHN0YXRpYyBmbG9hdCBsYXJnZXJGb250U2l6ZShmbG9hdCBzaXplKQotICAgIHsK
LSAgICAgICAgLy8gRklYTUU6IEZpZ3VyZSBvdXQgd2hlcmUgd2UgZmFsbCBpbiB0aGUgc2l6ZSBy
YW5nZXMgKHh4LXNtYWxsIHRvIHh4eC1sYXJnZSkgYW5kIHNjYWxlIHVwIHRvCi0gICAgICAgIC8v
IHRoZSBuZXh0IHNpemUgbGV2ZWwuCi0gICAgICAgIHJldHVybiBzaXplICogMS4yZjsKLSAgICB9
Ci0KLSAgICAvLyBMaWtlIHRoZSBwcmV2aW91cyBmdW5jdGlvbiwgYnV0IGZvciB0aGUga2V5d29y
ZCAic21hbGxlciIuCi0gICAgc3RhdGljIGZsb2F0IHNtYWxsZXJGb250U2l6ZShmbG9hdCBzaXpl
KQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IEZpZ3VyZSBvdXQgd2hlcmUgd2UgZmFsbCBpbiB0
aGUgc2l6ZSByYW5nZXMgKHh4LXNtYWxsIHRvIHh4eC1sYXJnZSkgYW5kIHNjYWxlIGRvd24gdG8K
LSAgICAgICAgLy8gdGhlIG5leHQgc2l6ZSBsZXZlbC4KLSAgICAgICAgcmV0dXJuIHNpemUgLyAx
LjJmOwotICAgIH0KLXB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShD
U1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQotICAgIHsKLSAgICAg
ICAgZmxvYXQgc2l6ZSA9IHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPmZvbnREZXNjcmlw
dGlvbigpLnNwZWNpZmllZFNpemUoKTsKLQotICAgICAgICBpZiAoc2l6ZSA8IDApCi0gICAgICAg
ICAgICByZXR1cm47Ci0KLSAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9
IHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOwotICAgICAgICBmb250
RGVzY3JpcHRpb24uc2V0S2V5d29yZFNpemUoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+
Zm9udERlc2NyaXB0aW9uKCkua2V5d29yZFNpemUoKSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXIt
PnNldEZvbnRTaXplKGZvbnREZXNjcmlwdGlvbiwgc2l6ZSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2
ZXItPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJ
RCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKLSAgICB7Ci0gICAgICAgIEZvbnREZXNj
cmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5mb250RGVz
Y3JpcHRpb24oKTsKLSAgICAgICAgZmxvYXQgc2l6ZSA9IFN0eWxlOjpmb250U2l6ZUZvcktleXdv
cmQoQ1NTVmFsdWVNZWRpdW0sIGZvbnREZXNjcmlwdGlvbi51c2VGaXhlZERlZmF1bHRTaXplKCks
IHN0eWxlUmVzb2x2ZXItPmRvY3VtZW50KCkpOwotCi0gICAgICAgIGlmIChzaXplIDwgMCkKLSAg
ICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0S2V5d29yZFNp
emUoQ1NTVmFsdWVNZWRpdW0gLSBDU1NWYWx1ZVh4U21hbGwgKyAxKTsKLSAgICAgICAgc3R5bGVS
ZXNvbHZlci0+c2V0Rm9udFNpemUoZm9udERlc2NyaXB0aW9uLCBzaXplKTsKLSAgICAgICAgc3R5
bGVSZXNvbHZlci0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZmxvYXQgZGV0ZXJtaW5lUnVieVRleHRTaXpl
TXVsdGlwbGllcihTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQotICAgIHsKLSAgICAgICAg
aWYgKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnJ1YnlQb3NpdGlvbigpICE9IFJ1YnlQb3NpdGlv
bkludGVyQ2hhcmFjdGVyKQotICAgICAgICAgICAgcmV0dXJuIDAuNWY7Ci0gICAgICAgIAotICAg
ICAgICBFbGVtZW50KiBlbGVtZW50ID0gc3R5bGVSZXNvbHZlci0+c3RhdGUoKS5lbGVtZW50KCk7
Ci0gICAgICAgIGlmIChlbGVtZW50ID09IG51bGxwdHIpCi0gICAgICAgICAgICByZXR1cm4gMC4y
NWY7Ci0gICAgICAgIAotICAgICAgICAvLyBGSVhNRTogVGhpcyBoYWNrIGlzIHRvIGVuc3VyZSB0
b25lIG1hcmtzIGFyZSB0aGUgc2FtZSBzaXplIGFzCi0gICAgICAgIC8vIHRoZSBib3BvbW9mby4g
VGhpcyBjb2RlIHdpbGwgZ28gYXdheSBpZiB3ZSBtYWtlIGEgc3BlY2lhbCByZW5kZXJlcgotICAg
ICAgICAvLyBmb3IgdGhlIHRvbmUgbWFya3MgZXZlbnR1YWxseS4KLSAgICAgICAgZm9yIChjb25z
dCBFbGVtZW50KiBjdXJyRWxlbWVudCA9IGVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKTsgY3VyckVs
ZW1lbnQ7IGN1cnJFbGVtZW50ID0gY3VyckVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKSkgewotICAg
ICAgICAgICAgaWYgKGN1cnJFbGVtZW50LT5oYXNUYWdOYW1lKHJ0VGFnKSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gMS4wZjsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gMC4yNWY7Ci0gICAg
fQotICAgIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVS
ZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQotICAgIHsKLSAgICAgICAg
aWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybjsK
LQotICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKLQotICAgICAgICBGb250RGVzY3JpcHRpb24gZm9u
dERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7
Ci0gICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRLZXl3b3JkU2l6ZSgwKTsKLSAgICAgICAgZmxv
YXQgcGFyZW50U2l6ZSA9IDA7Ci0gICAgICAgIGJvb2wgcGFyZW50SXNBYnNvbHV0ZVNpemUgPSBm
YWxzZTsKLSAgICAgICAgZmxvYXQgc2l6ZSA9IDA7Ci0KLSAgICAgICAgaWYgKHN0eWxlUmVzb2x2
ZXItPnBhcmVudFN0eWxlKCkpIHsKLSAgICAgICAgICAgIHBhcmVudFNpemUgPSBzdHlsZVJlc29s
dmVyLT5wYXJlbnRTdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKS5zcGVjaWZpZWRTaXplKCk7Ci0g
ICAgICAgICAgICBwYXJlbnRJc0Fic29sdXRlU2l6ZSA9IHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0
eWxlKCktPmZvbnREZXNjcmlwdGlvbigpLmlzQWJzb2x1dGVTaXplKCk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBpZiAoQ1NTVmFsdWVJRCBpZGVudCA9IHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQo
KSkgewotICAgICAgICAgICAgLy8gS2V5d29yZHMgYXJlIGJlaW5nIHVzZWQuCi0gICAgICAgICAg
ICBzd2l0Y2ggKGlkZW50KSB7Ci0gICAgICAgICAgICBjYXNlIENTU1ZhbHVlWHhTbWFsbDoKLSAg
ICAgICAgICAgIGNhc2UgQ1NTVmFsdWVYU21hbGw6Ci0gICAgICAgICAgICBjYXNlIENTU1ZhbHVl
U21hbGw6Ci0gICAgICAgICAgICBjYXNlIENTU1ZhbHVlTWVkaXVtOgotICAgICAgICAgICAgY2Fz
ZSBDU1NWYWx1ZUxhcmdlOgotICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVhMYXJnZToKLSAgICAg
ICAgICAgIGNhc2UgQ1NTVmFsdWVYeExhcmdlOgotICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVdl
YmtpdFh4eExhcmdlOgotICAgICAgICAgICAgICAgIHNpemUgPSBTdHlsZTo6Zm9udFNpemVGb3JL
ZXl3b3JkKGlkZW50LCBmb250RGVzY3JpcHRpb24udXNlRml4ZWREZWZhdWx0U2l6ZSgpLCBzdHls
ZVJlc29sdmVyLT5kb2N1bWVudCgpKTsKLSAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24u
c2V0S2V5d29yZFNpemUoaWRlbnQgLSBDU1NWYWx1ZVh4U21hbGwgKyAxKTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVMYXJnZXI6Ci0gICAgICAgICAg
ICAgICAgc2l6ZSA9IGxhcmdlckZvbnRTaXplKHBhcmVudFNpemUpOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVNtYWxsZXI6Ci0gICAgICAgICAgICAg
ICAgc2l6ZSA9IHNtYWxsZXJGb250U2l6ZShwYXJlbnRTaXplKTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRSdWJ5VGV4dDogewotICAgICAg
ICAgICAgICAgIGZsb2F0IHJ1YnlUZXh0U2l6ZU11bHRpcGxpZXIgPSBkZXRlcm1pbmVSdWJ5VGV4
dFNpemVNdWx0aXBsaWVyKHN0eWxlUmVzb2x2ZXIpOwotICAgICAgICAgICAgICAgIHNpemUgPSBy
dWJ5VGV4dFNpemVNdWx0aXBsaWVyICogcGFyZW50U2l6ZTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIH0gZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJc0Fic29sdXRlU2l6
ZShwYXJlbnRJc0Fic29sdXRlU2l6ZSAmJiAoaWRlbnQgPT0gQ1NTVmFsdWVMYXJnZXIgfHwgaWRl
bnQgPT0gQ1NTVmFsdWVTbWFsbGVyIHx8IGlkZW50ID09IENTU1ZhbHVlV2Via2l0UnVieVRleHQp
KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJc0Fi
c29sdXRlU2l6ZShwYXJlbnRJc0Fic29sdXRlU2l6ZSB8fCAhKHByaW1pdGl2ZVZhbHVlLmlzUGVy
Y2VudGFnZSgpIHx8IHByaW1pdGl2ZVZhbHVlLmlzRm9udFJlbGF0aXZlTGVuZ3RoKCkpKTsKLSAg
ICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS5pc0xlbmd0aCgpKSB7Ci0gICAgICAgICAgICAg
ICAgc2l6ZSA9IHByaW1pdGl2ZVZhbHVlLmNvbXB1dGVMZW5ndGg8ZmxvYXQ+KENTU1RvTGVuZ3Ro
Q29udmVyc2lvbkRhdGEoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKSwgc3R5bGVSZXNvbHZl
ci0+cm9vdEVsZW1lbnRTdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5kb2N1bWVudCgpLnJlbmRlclZp
ZXcoKSwgMS4wZiwgdHJ1ZSkpOwotICAgICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0YXRl
KCkuc2V0Rm9udFNpemVIYXNWaWV3cG9ydFVuaXRzKHByaW1pdGl2ZVZhbHVlLmlzVmlld3BvcnRQ
ZXJjZW50YWdlTGVuZ3RoKCkpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1
ZS5pc1BlcmNlbnRhZ2UoKSkKLSAgICAgICAgICAgICAgICBzaXplID0gKHByaW1pdGl2ZVZhbHVl
LmdldEZsb2F0VmFsdWUoKSAqIHBhcmVudFNpemUpIC8gMTAwLjBmOwotICAgICAgICAgICAgZWxz
ZSBpZiAocHJpbWl0aXZlVmFsdWUuaXNDYWxjdWxhdGVkUGVyY2VudGFnZVdpdGhMZW5ndGgoKSkg
ewotICAgICAgICAgICAgICAgIFJlZjxDYWxjdWxhdGlvblZhbHVlPiBjYWxjdWxhdGlvblZhbHVl
IHsgcHJpbWl0aXZlVmFsdWUuY3NzQ2FsY1ZhbHVlKCktPmNyZWF0ZUNhbGN1bGF0aW9uVmFsdWUo
c3R5bGVSZXNvbHZlci0+c3RhdGUoKS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkuY29weVdp
dGhBZGp1c3RlZFpvb20oMS4wZikpIH07Ci0gICAgICAgICAgICAgICAgc2l6ZSA9IGNhbGN1bGF0
aW9uVmFsdWUtPmV2YWx1YXRlKHBhcmVudFNpemUpOwotICAgICAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHNpemUgPCAwKQot
ICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIC8vIE92ZXJseSBsYXJnZSBmb250IHNpemVz
IHdpbGwgY2F1c2UgY3Jhc2hlcyBvbiBzb21lIHBsYXRmb3JtcyAoc3VjaCBhcyBXaW5kb3dzKS4K
LSAgICAgICAgLy8gQ2FwIGZvbnQgc2l6ZSBoZXJlIHRvIG1ha2Ugc3VyZSB0aGF0IGRvZXNuJ3Qg
aGFwcGVuLgotICAgICAgICBzaXplID0gc3RkOjptaW4obWF4aW11bUFsbG93ZWRGb250U2l6ZSwg
c2l6ZSk7Ci0KLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Rm9udFNpemUoZm9udERlc2NyaXB0
aW9uLCBzaXplKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Rm9udERlc2NyaXB0aW9uKGZv
bnREZXNjcmlwdGlvbik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzdGF0aWMgUHJv
cGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKSB7IHJldHVybiBQcm9wZXJ0eUhhbmRsZXIoJmFw
cGx5SW5oZXJpdFZhbHVlLCAmYXBwbHlJbml0aWFsVmFsdWUsICZhcHBseVZhbHVlKTsgfQotfTsK
LQogY29uc3QgRGVwcmVjYXRlZFN0eWxlQnVpbGRlciYgRGVwcmVjYXRlZFN0eWxlQnVpbGRlcjo6
c2hhcmVkU3R5bGVCdWlsZGVyKCkKIHsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8RGVwcmVj
YXRlZFN0eWxlQnVpbGRlcj4gc3R5bGVCdWlsZGVySW5zdGFuY2U7CkBAIC0zMDUsOCArMTYwLDYg
QEAgRGVwcmVjYXRlZFN0eWxlQnVpbGRlcjo6RGVwcmVjYXRlZFN0eWxlQnVpbGRlcigpCiAgICAg
c2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5QmFja2dyb3VuZFJlcGVhdFgsIEFwcGx5UHJv
cGVydHlGaWxsTGF5ZXI8RUZpbGxSZXBlYXQsIENTU1Byb3BlcnR5QmFja2dyb3VuZFJlcGVhdFgs
IEJhY2tncm91bmRGaWxsTGF5ZXIsICZSZW5kZXJTdHlsZTo6YWNjZXNzQmFja2dyb3VuZExheWVy
cywgJlJlbmRlclN0eWxlOjpiYWNrZ3JvdW5kTGF5ZXJzLCAmRmlsbExheWVyOjppc1JlcGVhdFhT
ZXQsICZGaWxsTGF5ZXI6OnJlcGVhdFgsICZGaWxsTGF5ZXI6OnNldFJlcGVhdFgsICZGaWxsTGF5
ZXI6OmNsZWFyUmVwZWF0WCwgJkZpbGxMYXllcjo6aW5pdGlhbEZpbGxSZXBlYXRYLCAmQ1NTVG9T
dHlsZU1hcDo6bWFwRmlsbFJlcGVhdFg+OjpjcmVhdGVIYW5kbGVyKCkpOwogICAgIHNldFByb3Bl
cnR5SGFuZGxlcihDU1NQcm9wZXJ0eUJhY2tncm91bmRSZXBlYXRZLCBBcHBseVByb3BlcnR5Rmls
bExheWVyPEVGaWxsUmVwZWF0LCBDU1NQcm9wZXJ0eUJhY2tncm91bmRSZXBlYXRZLCBCYWNrZ3Jv
dW5kRmlsbExheWVyLCAmUmVuZGVyU3R5bGU6OmFjY2Vzc0JhY2tncm91bmRMYXllcnMsICZSZW5k
ZXJTdHlsZTo6YmFja2dyb3VuZExheWVycywgJkZpbGxMYXllcjo6aXNSZXBlYXRZU2V0LCAmRmls
bExheWVyOjpyZXBlYXRZLCAmRmlsbExheWVyOjpzZXRSZXBlYXRZLCAmRmlsbExheWVyOjpjbGVh
clJlcGVhdFksICZGaWxsTGF5ZXI6OmluaXRpYWxGaWxsUmVwZWF0WSwgJkNTU1RvU3R5bGVNYXA6
Om1hcEZpbGxSZXBlYXRZPjo6Y3JlYXRlSGFuZGxlcigpKTsKICAgICBzZXRQcm9wZXJ0eUhhbmRs
ZXIoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kU2l6ZSwgQXBwbHlQcm9wZXJ0eUZpbGxMYXllcjxGaWxs
U2l6ZSwgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kU2l6ZSwgQmFja2dyb3VuZEZpbGxMYXllciwgJlJl
bmRlclN0eWxlOjphY2Nlc3NCYWNrZ3JvdW5kTGF5ZXJzLCAmUmVuZGVyU3R5bGU6OmJhY2tncm91
bmRMYXllcnMsICZGaWxsTGF5ZXI6OmlzU2l6ZVNldCwgJkZpbGxMYXllcjo6c2l6ZSwgJkZpbGxM
YXllcjo6c2V0U2l6ZSwgJkZpbGxMYXllcjo6Y2xlYXJTaXplLCAmRmlsbExheWVyOjppbml0aWFs
RmlsbFNpemUsICZDU1NUb1N0eWxlTWFwOjptYXBGaWxsU2l6ZT46OmNyZWF0ZUhhbmRsZXIoKSk7
Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5Rm9udFNpemUsIEFwcGx5UHJvcGVy
dHlGb250U2l6ZTo6Y3JlYXRlSGFuZGxlcigpKTsKLQogICAgIHNldFByb3BlcnR5SGFuZGxlcihD
U1NQcm9wZXJ0eVdlYmtpdEJhY2tncm91bmRDbGlwLCBDU1NQcm9wZXJ0eUJhY2tncm91bmRDbGlw
KTsKICAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRCYWNrZ3JvdW5kQ29t
cG9zaXRlLCBBcHBseVByb3BlcnR5RmlsbExheWVyPENvbXBvc2l0ZU9wZXJhdG9yLCBDU1NQcm9w
ZXJ0eVdlYmtpdEJhY2tncm91bmRDb21wb3NpdGUsIEJhY2tncm91bmRGaWxsTGF5ZXIsICZSZW5k
ZXJTdHlsZTo6YWNjZXNzQmFja2dyb3VuZExheWVycywgJlJlbmRlclN0eWxlOjpiYWNrZ3JvdW5k
TGF5ZXJzLCAmRmlsbExheWVyOjppc0NvbXBvc2l0ZVNldCwgJkZpbGxMYXllcjo6Y29tcG9zaXRl
LCAmRmlsbExheWVyOjpzZXRDb21wb3NpdGUsICZGaWxsTGF5ZXI6OmNsZWFyQ29tcG9zaXRlLCAm
RmlsbExheWVyOjppbml0aWFsRmlsbENvbXBvc2l0ZSwgJkNTU1RvU3R5bGVNYXA6Om1hcEZpbGxD
b21wb3NpdGU+OjpjcmVhdGVIYW5kbGVyKCkpOwogICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQ
cm9wZXJ0eVdlYmtpdEJhY2tncm91bmRPcmlnaW4sIENTU1Byb3BlcnR5QmFja2dyb3VuZE9yaWdp
bik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyQ3VzdG9tLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyQ3VzdG9tLmgKaW5kZXggMWMyMTllNjBk
MzJkZGU4NGYzYjEyYWY5ZTEyZTE1ZWQ0OTc2YmM4Ni4uMjA5NjM5ZmRmOTQwNjA0MGRkZTdiMzgx
MTFlMmE1OTM5NGY1MWY0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVp
bGRlckN1c3RvbS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXJDdXN0b20u
aApAQCAtMzEsNyArMzEsOSBAQAogI2luY2x1ZGUgIkNTU0N1cnNvckltYWdlVmFsdWUuaCIKICNp
bmNsdWRlICJDU1NTaGFkb3dWYWx1ZS5oIgogI2luY2x1ZGUgIkN1cnNvckxpc3QuaCIKKyNpbmNs
dWRlICJFbGVtZW50QW5jZXN0b3JJdGVyYXRvci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5j
bHVkZSAiSFRNTEVsZW1lbnQuaCIKICNpbmNsdWRlICJMb2NhbGVUb1NjcmlwdE1hcHBpbmcuaCIK
ICNpbmNsdWRlICJSZWN0LmgiCiAjaW5jbHVkZSAiU1ZHRWxlbWVudC5oIgpAQCAtNjEsNiArNjMs
NyBAQCBwdWJsaWM6CiAgICAgREVDTEFSRV9QUk9QRVJUWV9DVVNUT01fSEFORExFUlMoQ291bnRl
clJlc2V0KTsKICAgICBERUNMQVJFX1BST1BFUlRZX0NVU1RPTV9IQU5ETEVSUyhDdXJzb3IpOwog
ICAgIERFQ0xBUkVfUFJPUEVSVFlfQ1VTVE9NX0hBTkRMRVJTKEZvbnRGYW1pbHkpOworICAgIERF
Q0xBUkVfUFJPUEVSVFlfQ1VTVE9NX0hBTkRMRVJTKEZvbnRTaXplKTsKICAgICBERUNMQVJFX1BS
T1BFUlRZX0NVU1RPTV9IQU5ETEVSUyhGb250V2VpZ2h0KTsKICNpZiBFTkFCTEUoQ1NTX0lNQUdF
X1JFU09MVVRJT04pCiAgICAgREVDTEFSRV9QUk9QRVJUWV9DVVNUT01fSEFORExFUlMoSW1hZ2VS
ZXNvbHV0aW9uKTsKQEAgLTExOCw2ICsxMjEsMTAgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9p
ZCBhcHBseUluaGVyaXRDb3VudGVyKFN0eWxlUmVzb2x2ZXImKTsKICAgICB0ZW1wbGF0ZSA8Q291
bnRlckJlaGF2aW9yIGNvdW50ZXJCZWhhdmlvcj4KICAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVl
Q291bnRlcihTdHlsZVJlc29sdmVyJiwgQ1NTVmFsdWUmKTsKKworICAgIHN0YXRpYyBmbG9hdCBs
YXJnZXJGb250U2l6ZShmbG9hdCBzaXplKTsKKyAgICBzdGF0aWMgZmxvYXQgc21hbGxlckZvbnRT
aXplKGZsb2F0IHNpemUpOworICAgIHN0YXRpYyBmbG9hdCBkZXRlcm1pbmVSdWJ5VGV4dFNpemVN
dWx0aXBsaWVyKFN0eWxlUmVzb2x2ZXImKTsKIH07CiAKIGlubGluZSB2b2lkIFN0eWxlQnVpbGRl
ckN1c3RvbTo6YXBwbHlWYWx1ZVdlYmtpdE1hcnF1ZWVJbmNyZW1lbnQoU3R5bGVSZXNvbHZlciYg
c3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVlKQpAQCAtODQyLDggKzg0OSwxMCBAQCBpbmxp
bmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbEZvbnRGYW1pbHkoU3R5bGVS
ZXNvbHZlciYgc3R5bGVSZXNvbAogICAgIEZvbnREZXNjcmlwdGlvbiBpbml0aWFsRGVzYyA9IEZv
bnREZXNjcmlwdGlvbigpOwogCiAgICAgLy8gV2UgbmVlZCB0byBhZGp1c3QgdGhlIHNpemUgdG8g
YWNjb3VudCBmb3IgdGhlIGdlbmVyaWMgZmFtaWx5IGNoYW5nZSBmcm9tIG1vbm9zcGFjZSB0byBu
b24tbW9ub3NwYWNlLgotICAgIGlmIChmb250RGVzY3JpcHRpb24ua2V5d29yZFNpemUoKSAmJiBm
b250RGVzY3JpcHRpb24udXNlRml4ZWREZWZhdWx0U2l6ZSgpKQotICAgICAgICBzdHlsZVJlc29s
dmVyLnNldEZvbnRTaXplKGZvbnREZXNjcmlwdGlvbiwgU3R5bGU6OmZvbnRTaXplRm9yS2V5d29y
ZChDU1NWYWx1ZVh4U21hbGwgKyBmb250RGVzY3JpcHRpb24ua2V5d29yZFNpemUoKSAtIDEsIGZh
bHNlLCBzdHlsZVJlc29sdmVyLmRvY3VtZW50KCkpKTsKKyAgICBpZiAoZm9udERlc2NyaXB0aW9u
LnVzZUZpeGVkRGVmYXVsdFNpemUoKSkgeworICAgICAgICBpZiAoQ1NTVmFsdWVJRCBzaXplSWRl
bnRpZmllciA9IGZvbnREZXNjcmlwdGlvbi5rZXl3b3JkU2l6ZUFzSWRlbnRpZmllcigpKQorICAg
ICAgICAgICAgc3R5bGVSZXNvbHZlci5zZXRGb250U2l6ZShmb250RGVzY3JpcHRpb24sIFN0eWxl
Ojpmb250U2l6ZUZvcktleXdvcmQoc2l6ZUlkZW50aWZpZXIsIGZhbHNlLCBzdHlsZVJlc29sdmVy
LmRvY3VtZW50KCkpKTsKKyAgICB9CiAgICAgaWYgKCFpbml0aWFsRGVzYy5maXJzdEZhbWlseSgp
LmlzRW1wdHkoKSkKICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEZhbWlsaWVzKGluaXRpYWxE
ZXNjLmZhbWlsaWVzKCkpOwogCkBAIC05MjMsOCArOTMyLDEwIEBAIGlubGluZSB2b2lkIFN0eWxl
QnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUZvbnRGYW1pbHkoU3R5bGVSZXNvbHZlciYgc3R5bGVS
ZXNvbHZlCiAgICAgICAgIHJldHVybjsKICAgICBmb250RGVzY3JpcHRpb24uc2V0RmFtaWxpZXMo
ZmFtaWxpZXMpOwogCi0gICAgaWYgKGZvbnREZXNjcmlwdGlvbi5rZXl3b3JkU2l6ZSgpICYmIGZv
bnREZXNjcmlwdGlvbi51c2VGaXhlZERlZmF1bHRTaXplKCkgIT0gb2xkRmFtaWx5VXNlZEZpeGVk
RGVmYXVsdFNpemUpCi0gICAgICAgIHN0eWxlUmVzb2x2ZXIuc2V0Rm9udFNpemUoZm9udERlc2Ny
aXB0aW9uLCBTdHlsZTo6Zm9udFNpemVGb3JLZXl3b3JkKENTU1ZhbHVlWHhTbWFsbCArIGZvbnRE
ZXNjcmlwdGlvbi5rZXl3b3JkU2l6ZSgpIC0gMSwgIW9sZEZhbWlseVVzZWRGaXhlZERlZmF1bHRT
aXplLCBzdHlsZVJlc29sdmVyLmRvY3VtZW50KCkpKTsKKyAgICBpZiAoZm9udERlc2NyaXB0aW9u
LnVzZUZpeGVkRGVmYXVsdFNpemUoKSAhPSBvbGRGYW1pbHlVc2VkRml4ZWREZWZhdWx0U2l6ZSkg
eworICAgICAgICBpZiAoQ1NTVmFsdWVJRCBzaXplSWRlbnRpZmllciA9IGZvbnREZXNjcmlwdGlv
bi5rZXl3b3JkU2l6ZUFzSWRlbnRpZmllcigpKQorICAgICAgICAgICAgc3R5bGVSZXNvbHZlci5z
ZXRGb250U2l6ZShmb250RGVzY3JpcHRpb24sIFN0eWxlOjpmb250U2l6ZUZvcktleXdvcmQoc2l6
ZUlkZW50aWZpZXIsICFvbGRGYW1pbHlVc2VkRml4ZWREZWZhdWx0U2l6ZSwgc3R5bGVSZXNvbHZl
ci5kb2N1bWVudCgpKSk7CisgICAgfQogCiAgICAgc3R5bGVSZXNvbHZlci5zZXRGb250RGVzY3Jp
cHRpb24oZm9udERlc2NyaXB0aW9uKTsKIH0KQEAgLTEyNjgsNiArMTI3OSwxMjkgQEAgaW5saW5l
IHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlV2Via2l0Rm9udFZhcmlhbnRMaWdh
dHVyZXMoU3R5bGVSZXNvbHYKICAgICBzdHlsZVJlc29sdmVyLnNldEZvbnREZXNjcmlwdGlvbihm
b250RGVzY3JpcHRpb24pOwogfQogCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFw
cGx5SW5pdGlhbEZvbnRTaXplKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCit7CisgICAg
Rm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+
Zm9udERlc2NyaXB0aW9uKCk7CisgICAgZmxvYXQgc2l6ZSA9IFN0eWxlOjpmb250U2l6ZUZvcktl
eXdvcmQoQ1NTVmFsdWVNZWRpdW0sIGZvbnREZXNjcmlwdGlvbi51c2VGaXhlZERlZmF1bHRTaXpl
KCksIHN0eWxlUmVzb2x2ZXIuZG9jdW1lbnQoKSk7CisKKyAgICBpZiAoc2l6ZSA8IDApCisgICAg
ICAgIHJldHVybjsKKworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRLZXl3b3JkU2l6ZUZyb21JZGVu
dGlmaWVyKENTU1ZhbHVlTWVkaXVtKTsKKyAgICBzdHlsZVJlc29sdmVyLnNldEZvbnRTaXplKGZv
bnREZXNjcmlwdGlvbiwgc2l6ZSk7CisgICAgc3R5bGVSZXNvbHZlci5zZXRGb250RGVzY3JpcHRp
b24oZm9udERlc2NyaXB0aW9uKTsKK30KKworaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9t
OjphcHBseUluaGVyaXRGb250U2l6ZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQorewor
ICAgIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgcGFyZW50Rm9udERlc2NyaXB0aW9uID0gc3R5bGVS
ZXNvbHZlci5wYXJlbnRTdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICBmbG9hdCBzaXpl
ID0gcGFyZW50Rm9udERlc2NyaXB0aW9uLnNwZWNpZmllZFNpemUoKTsKKworICAgIGlmIChzaXpl
IDwgMCkKKyAgICAgICAgcmV0dXJuOworCisgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlw
dGlvbiA9IHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAgZm9u
dERlc2NyaXB0aW9uLnNldEtleXdvcmRTaXplKHBhcmVudEZvbnREZXNjcmlwdGlvbi5rZXl3b3Jk
U2l6ZSgpKTsKKyAgICBzdHlsZVJlc29sdmVyLnNldEZvbnRTaXplKGZvbnREZXNjcmlwdGlvbiwg
c2l6ZSk7CisgICAgc3R5bGVSZXNvbHZlci5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0
aW9uKTsKK30KKworLy8gV2hlbiB0aGUgQ1NTIGtleXdvcmQgImxhcmdlciIgaXMgdXNlZCwgdGhp
cyBmdW5jdGlvbiB3aWxsIGF0dGVtcHQgdG8gbWF0Y2ggd2l0aGluIHRoZSBrZXl3b3JkCisvLyB0
YWJsZSwgYW5kIGZhaWxpbmcgdGhhdCwgd2lsbCBzaW1wbHkgbXVsdGlwbHkgYnkgMS4yLgoraW5s
aW5lIGZsb2F0IFN0eWxlQnVpbGRlckN1c3RvbTo6bGFyZ2VyRm9udFNpemUoZmxvYXQgc2l6ZSkK
K3sKKyAgICAvLyBGSVhNRTogRmlndXJlIG91dCB3aGVyZSB3ZSBmYWxsIGluIHRoZSBzaXplIHJh
bmdlcyAoeHgtc21hbGwgdG8geHh4LWxhcmdlKSBhbmQgc2NhbGUgdXAgdG8KKyAgICAvLyB0aGUg
bmV4dCBzaXplIGxldmVsLgorICAgIHJldHVybiBzaXplICogMS4yZjsKK30KKworLy8gTGlrZSB0
aGUgcHJldmlvdXMgZnVuY3Rpb24sIGJ1dCBmb3IgdGhlIGtleXdvcmQgInNtYWxsZXIiLgoraW5s
aW5lIGZsb2F0IFN0eWxlQnVpbGRlckN1c3RvbTo6c21hbGxlckZvbnRTaXplKGZsb2F0IHNpemUp
Cit7CisgICAgLy8gRklYTUU6IEZpZ3VyZSBvdXQgd2hlcmUgd2UgZmFsbCBpbiB0aGUgc2l6ZSBy
YW5nZXMgKHh4LXNtYWxsIHRvIHh4eC1sYXJnZSkgYW5kIHNjYWxlIGRvd24gdG8KKyAgICAvLyB0
aGUgbmV4dCBzaXplIGxldmVsLgorICAgIHJldHVybiBzaXplIC8gMS4yZjsKK30KKworaW5saW5l
IGZsb2F0IFN0eWxlQnVpbGRlckN1c3RvbTo6ZGV0ZXJtaW5lUnVieVRleHRTaXplTXVsdGlwbGll
cihTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQoreworICAgIGlmIChzdHlsZVJlc29sdmVy
LnN0eWxlKCktPnJ1YnlQb3NpdGlvbigpICE9IFJ1YnlQb3NpdGlvbkludGVyQ2hhcmFjdGVyKQor
ICAgICAgICByZXR1cm4gMC41ZjsKKworICAgIC8vIEZJWE1FOiBUaGlzIGhhY2sgaXMgdG8gZW5z
dXJlIHRvbmUgbWFya3MgYXJlIHRoZSBzYW1lIHNpemUgYXMKKyAgICAvLyB0aGUgYm9wb21vZm8u
IFRoaXMgY29kZSB3aWxsIGdvIGF3YXkgaWYgd2UgbWFrZSBhIHNwZWNpYWwgcmVuZGVyZXIKKyAg
ICAvLyBmb3IgdGhlIHRvbmUgbWFya3MgZXZlbnR1YWxseS4KKyAgICBpZiAoYXV0byogZWxlbWVu
dCA9IHN0eWxlUmVzb2x2ZXIuc3RhdGUoKS5lbGVtZW50KCkpIHsKKyAgICAgICAgZm9yIChhdXRv
JiBhbmNlc3RvciA6IGFuY2VzdG9yc09mVHlwZTxIVE1MRWxlbWVudD4oKmVsZW1lbnQpKSB7Cisg
ICAgICAgICAgICBpZiAoYW5jZXN0b3IuaGFzVGFnTmFtZShIVE1MTmFtZXM6OnJ0VGFnKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gMS4wZjsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4g
MC4yNWY7Cit9CisKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUZv
bnRTaXplKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKK3sK
KyAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci5zdHls
ZSgpLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0S2V5d29yZFNp
emVGcm9tSWRlbnRpZmllcihDU1NWYWx1ZUludmFsaWQpOworCisgICAgZmxvYXQgcGFyZW50U2l6
ZSA9IDA7CisgICAgYm9vbCBwYXJlbnRJc0Fic29sdXRlU2l6ZSA9IGZhbHNlOworICAgIGlmIChh
dXRvKiBwYXJlbnRTdHlsZSA9IHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKSkgeworICAgICAg
ICBwYXJlbnRTaXplID0gcGFyZW50U3R5bGUtPmZvbnREZXNjcmlwdGlvbigpLnNwZWNpZmllZFNp
emUoKTsKKyAgICAgICAgcGFyZW50SXNBYnNvbHV0ZVNpemUgPSBwYXJlbnRTdHlsZS0+Zm9udERl
c2NyaXB0aW9uKCkuaXNBYnNvbHV0ZVNpemUoKTsKKyAgICB9CisKKyAgICBhdXRvJiBwcmltaXRp
dmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSk7CisgICAgZmxvYXQg
c2l6ZTsKKyAgICBpZiAoQ1NTVmFsdWVJRCBpZGVudCA9IHByaW1pdGl2ZVZhbHVlLmdldFZhbHVl
SUQoKSkgeworICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0SXNBYnNvbHV0ZVNpemUocGFyZW50
SXNBYnNvbHV0ZVNpemUgJiYgKGlkZW50ID09IENTU1ZhbHVlTGFyZ2VyIHx8IGlkZW50ID09IENT
U1ZhbHVlU21hbGxlciB8fCBpZGVudCA9PSBDU1NWYWx1ZVdlYmtpdFJ1YnlUZXh0KSk7CisKKyAg
ICAgICAgLy8gS2V5d29yZHMgYXJlIGJlaW5nIHVzZWQuCisgICAgICAgIHN3aXRjaCAoaWRlbnQp
IHsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZVh4U21hbGw6CisgICAgICAgIGNhc2UgQ1NTVmFsdWVY
U21hbGw6CisgICAgICAgIGNhc2UgQ1NTVmFsdWVTbWFsbDoKKyAgICAgICAgY2FzZSBDU1NWYWx1
ZU1lZGl1bToKKyAgICAgICAgY2FzZSBDU1NWYWx1ZUxhcmdlOgorICAgICAgICBjYXNlIENTU1Zh
bHVlWExhcmdlOgorICAgICAgICBjYXNlIENTU1ZhbHVlWHhMYXJnZToKKyAgICAgICAgY2FzZSBD
U1NWYWx1ZVdlYmtpdFh4eExhcmdlOgorICAgICAgICAgICAgc2l6ZSA9IFN0eWxlOjpmb250U2l6
ZUZvcktleXdvcmQoaWRlbnQsIGZvbnREZXNjcmlwdGlvbi51c2VGaXhlZERlZmF1bHRTaXplKCks
IHN0eWxlUmVzb2x2ZXIuZG9jdW1lbnQoKSk7CisgICAgICAgICAgICBmb250RGVzY3JpcHRpb24u
c2V0S2V5d29yZFNpemVGcm9tSWRlbnRpZmllcihpZGVudCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBDU1NWYWx1ZUxhcmdlcjoKKyAgICAgICAgICAgIHNpemUgPSBsYXJnZXJG
b250U2l6ZShwYXJlbnRTaXplKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENT
U1ZhbHVlU21hbGxlcjoKKyAgICAgICAgICAgIHNpemUgPSBzbWFsbGVyRm9udFNpemUocGFyZW50
U2l6ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdFJ1
YnlUZXh0OgorICAgICAgICAgICAgc2l6ZSA9IGRldGVybWluZVJ1YnlUZXh0U2l6ZU11bHRpcGxp
ZXIoc3R5bGVSZXNvbHZlcikgKiBwYXJlbnRTaXplOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9IGVsc2Ug
eworICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0SXNBYnNvbHV0ZVNpemUocGFyZW50SXNBYnNv
bHV0ZVNpemUgfHwgIShwcmltaXRpdmVWYWx1ZS5pc1BlcmNlbnRhZ2UoKSB8fCBwcmltaXRpdmVW
YWx1ZS5pc0ZvbnRSZWxhdGl2ZUxlbmd0aCgpKSk7CisgICAgICAgIGlmIChwcmltaXRpdmVWYWx1
ZS5pc0xlbmd0aCgpKSB7CisgICAgICAgICAgICBzaXplID0gcHJpbWl0aXZlVmFsdWUuY29tcHV0
ZUxlbmd0aDxmbG9hdD4oQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YShzdHlsZVJlc29sdmVyLnBh
cmVudFN0eWxlKCksIHN0eWxlUmVzb2x2ZXIucm9vdEVsZW1lbnRTdHlsZSgpLCBzdHlsZVJlc29s
dmVyLmRvY3VtZW50KCkucmVuZGVyVmlldygpLCAxLjBmLCB0cnVlKSk7CisgICAgICAgICAgICBz
dHlsZVJlc29sdmVyLnN0YXRlKCkuc2V0Rm9udFNpemVIYXNWaWV3cG9ydFVuaXRzKHByaW1pdGl2
ZVZhbHVlLmlzVmlld3BvcnRQZXJjZW50YWdlTGVuZ3RoKCkpOworICAgICAgICB9IGVsc2UgaWYg
KHByaW1pdGl2ZVZhbHVlLmlzUGVyY2VudGFnZSgpKQorICAgICAgICAgICAgc2l6ZSA9IChwcmlt
aXRpdmVWYWx1ZS5nZXRGbG9hdFZhbHVlKCkgKiBwYXJlbnRTaXplKSAvIDEwMC4wZjsKKyAgICAg
ICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUuaXNDYWxjdWxhdGVkUGVyY2VudGFnZVdpdGhMZW5n
dGgoKSkKKyAgICAgICAgICAgIHNpemUgPSBwcmltaXRpdmVWYWx1ZS5jc3NDYWxjVmFsdWUoKS0+
Y3JlYXRlQ2FsY3VsYXRpb25WYWx1ZShzdHlsZVJlc29sdmVyLnN0YXRlKCkuY3NzVG9MZW5ndGhD
b252ZXJzaW9uRGF0YSgpLmNvcHlXaXRoQWRqdXN0ZWRab29tKDEuMGYpKS0+ZXZhbHVhdGUocGFy
ZW50U2l6ZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAoc2l6ZSA8IDApCisgICAgICAgIHJldHVybjsKKworICAgIHN0eWxlUmVzb2x2ZXIuc2V0
Rm9udFNpemUoZm9udERlc2NyaXB0aW9uLCBzdGQ6Om1pbihtYXhpbXVtQWxsb3dlZEZvbnRTaXpl
LCBzaXplKSk7CisgICAgc3R5bGVSZXNvbHZlci5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2Ny
aXB0aW9uKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gU3R5bGVC
dWlsZGVyQ3VzdG9tX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29s
dmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAppbmRleCA2MWY1
ZTI3ZjhkMzE5NzllMzM5ZWJhNGY1YmQ4MjJlNjRjM2E1YTg2Li41YWEwMWU4Y2FlYWIwOWNhODUw
ZjQxYzYxZDQ3MWY1MTNlMzkzNzYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVSZXNvbHZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3Bw
CkBAIC0zMjE1LDggKzMyMTUsOCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9yR2VuZXJp
Y0ZhbWlseUNoYW5nZShSZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxlKgogICAgIC8vIElm
IHRoZSBmb250IHVzZXMgYSBrZXl3b3JkIHNpemUsIHRoZW4gd2UgcmVmZXRjaCBmcm9tIHRoZSB0
YWJsZSByYXRoZXIgdGhhbgogICAgIC8vIG11bHRpcGx5aW5nIGJ5IG91ciBzY2FsZSBmYWN0b3Iu
CiAgICAgZmxvYXQgc2l6ZTsKLSAgICBpZiAoY2hpbGRGb250LmtleXdvcmRTaXplKCkpCi0gICAg
ICAgIHNpemUgPSBTdHlsZTo6Zm9udFNpemVGb3JLZXl3b3JkKENTU1ZhbHVlWHhTbWFsbCArIGNo
aWxkRm9udC5rZXl3b3JkU2l6ZSgpIC0gMSwgY2hpbGRGb250LnVzZUZpeGVkRGVmYXVsdFNpemUo
KSwgZG9jdW1lbnQoKSk7CisgICAgaWYgKENTU1ZhbHVlSUQgc2l6ZUlkZW50aWZpZXIgPSBjaGls
ZEZvbnQua2V5d29yZFNpemVBc0lkZW50aWZpZXIoKSkKKyAgICAgICAgc2l6ZSA9IFN0eWxlOjpm
b250U2l6ZUZvcktleXdvcmQoc2l6ZUlkZW50aWZpZXIsIGNoaWxkRm9udC51c2VGaXhlZERlZmF1
bHRTaXplKCksIGRvY3VtZW50KCkpOwogICAgIGVsc2UgewogICAgICAgICBTZXR0aW5ncyogc2V0
dGluZ3MgPSBkb2N1bWVudFNldHRpbmdzKCk7CiAgICAgICAgIGZsb2F0IGZpeGVkU2NhbGVGYWN0
b3IgPSAoc2V0dGluZ3MgJiYgc2V0dGluZ3MtPmRlZmF1bHRGaXhlZEZvbnRTaXplKCkgJiYgc2V0
dGluZ3MtPmRlZmF1bHRGb250U2l6ZSgpKQpAQCAtMzIzOCw3ICszMjM4LDcgQEAgdm9pZCBTdHls
ZVJlc29sdmVyOjppbml0aWFsaXplRm9udFN0eWxlKFNldHRpbmdzKiBzZXR0aW5ncykKICAgICBm
b250RGVzY3JpcHRpb24uc2V0UmVuZGVyaW5nTW9kZShzZXR0aW5ncy0+Zm9udFJlbmRlcmluZ01v
ZGUoKSk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldFVzZVByaW50ZXJGb250KGRvY3VtZW50KCku
cHJpbnRpbmcoKSB8fCAhc2V0dGluZ3MtPnNjcmVlbkZvbnRTdWJzdGl0dXRpb25FbmFibGVkKCkp
OwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRPbmVGYW1pbHkoc3RhbmRhcmRGYW1pbHkpOwotICAg
IGZvbnREZXNjcmlwdGlvbi5zZXRLZXl3b3JkU2l6ZShDU1NWYWx1ZU1lZGl1bSAtIENTU1ZhbHVl
WHhTbWFsbCArIDEpOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRLZXl3b3JkU2l6ZUZyb21JZGVu
dGlmaWVyKENTU1ZhbHVlTWVkaXVtKTsKICAgICBzZXRGb250U2l6ZShmb250RGVzY3JpcHRpb24s
IFN0eWxlOjpmb250U2l6ZUZvcktleXdvcmQoQ1NTVmFsdWVNZWRpdW0sIGZhbHNlLCBkb2N1bWVu
dCgpKSk7CiAgICAgbV9zdGF0ZS5zdHlsZSgpLT5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjpp
bml0aWFsTGluZUhlaWdodCgpKTsKICAgICBtX3N0YXRlLnNldExpbmVIZWlnaHRWYWx1ZSgwKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnREZXNjcmlw
dGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udERlc2NyaXB0aW9u
LmgKaW5kZXggNTM1ODRkMDllNWFlOTUxYTZiMzAyNGVjNGM0MjdiNmU5YWQwMzFjZS4uNzdmZGYx
YjA4MzdlNDMwN2U1ZjliMmY4ZjM4MzU4NzcwZjlmZWUxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udERlc2NyaXB0aW9uLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udERlc2NyaXB0aW9uLmgKQEAgLTI1LDYgKzI1LDcg
QEAKICNpZm5kZWYgRm9udERlc2NyaXB0aW9uX2gKICNkZWZpbmUgRm9udERlc2NyaXB0aW9uX2gK
IAorI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKICNpbmNsdWRlICJGb250RmVhdHVyZVNl
dHRpbmdzLmgiCiAjaW5jbHVkZSAiRm9udE9yaWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiRm9udFJl
bmRlcmluZ01vZGUuaCIKQEAgLTEyNCw2ICsxMjUsMTIgQEAgcHVibGljOgogICAgIExpZ2F0dXJl
c1N0YXRlIGRpc2NyZXRpb25hcnlMaWdhdHVyZXNTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRp
Y19jYXN0PExpZ2F0dXJlc1N0YXRlPihtX2Rpc2NyZXRpb25hcnlMaWdhdHVyZXNTdGF0ZSk7IH0K
ICAgICBMaWdhdHVyZXNTdGF0ZSBoaXN0b3JpY2FsTGlnYXR1cmVzU3RhdGUoKSBjb25zdCB7IHJl
dHVybiBzdGF0aWNfY2FzdDxMaWdhdHVyZXNTdGF0ZT4obV9oaXN0b3JpY2FsTGlnYXR1cmVzU3Rh
dGUpOyB9CiAgICAgdW5zaWduZWQga2V5d29yZFNpemUoKSBjb25zdCB7IHJldHVybiBtX2tleXdv
cmRTaXplOyB9CisgICAgQ1NTVmFsdWVJRCBrZXl3b3JkU2l6ZUFzSWRlbnRpZmllcigpIGNvbnN0
CisgICAgeworICAgICAgICBDU1NWYWx1ZUlEIGlkZW50aWZpZXIgPSBtX2tleXdvcmRTaXplID8g
c3RhdGljX2Nhc3Q8Q1NTVmFsdWVJRD4oQ1NTVmFsdWVYeFNtYWxsICsgbV9rZXl3b3JkU2l6ZSAt
IDEpIDogQ1NTVmFsdWVJbnZhbGlkOworICAgICAgICBBU1NFUlQoaWRlbnRpZmllciA9PSBDU1NW
YWx1ZUludmFsaWQgfHwgKGlkZW50aWZpZXIgPj0gQ1NTVmFsdWVYeFNtYWxsICYmIGlkZW50aWZp
ZXIgPD0gQ1NTVmFsdWVXZWJraXRYeHhMYXJnZSkpOworICAgICAgICByZXR1cm4gaWRlbnRpZmll
cjsKKyAgICB9CiAgICAgRm9udFNtb290aGluZ01vZGUgZm9udFNtb290aGluZygpIGNvbnN0IHsg
cmV0dXJuIHN0YXRpY19jYXN0PEZvbnRTbW9vdGhpbmdNb2RlPihtX2ZvbnRTbW9vdGhpbmcpOyB9
CiAgICAgVGV4dFJlbmRlcmluZ01vZGUgdGV4dFJlbmRlcmluZ01vZGUoKSBjb25zdCB7IHJldHVy
biBzdGF0aWNfY2FzdDxUZXh0UmVuZGVyaW5nTW9kZT4obV90ZXh0UmVuZGVyaW5nKTsgfQogICAg
IFVTY3JpcHRDb2RlIHNjcmlwdCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFVTY3JpcHRD
b2RlPihtX3NjcmlwdCk7IH0KQEAgLTE1Myw3ICsxNjAsMTkgQEAgcHVibGljOgogICAgIHZvaWQg
c2V0Q29tbW9uTGlnYXR1cmVzU3RhdGUoTGlnYXR1cmVzU3RhdGUgY29tbW9uTGlnYXR1cmVzU3Rh
dGUpIHsgbV9jb21tb25MaWdhdHVyZXNTdGF0ZSA9IGNvbW1vbkxpZ2F0dXJlc1N0YXRlOyB9CiAg
ICAgdm9pZCBzZXREaXNjcmV0aW9uYXJ5TGlnYXR1cmVzU3RhdGUoTGlnYXR1cmVzU3RhdGUgZGlz
Y3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRlKSB7IG1fZGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRl
ID0gZGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRlOyB9CiAgICAgdm9pZCBzZXRIaXN0b3JpY2Fs
TGlnYXR1cmVzU3RhdGUoTGlnYXR1cmVzU3RhdGUgaGlzdG9yaWNhbExpZ2F0dXJlc1N0YXRlKSB7
IG1faGlzdG9yaWNhbExpZ2F0dXJlc1N0YXRlID0gaGlzdG9yaWNhbExpZ2F0dXJlc1N0YXRlOyB9
Ci0gICAgdm9pZCBzZXRLZXl3b3JkU2l6ZSh1bnNpZ25lZCBzKSB7IG1fa2V5d29yZFNpemUgPSBz
OyB9CisgICAgdm9pZCBzZXRLZXl3b3JkU2l6ZSh1bnNpZ25lZCBzaXplKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKHNpemUgPD0gOCk7CisgICAgICAgIG1fa2V5d29yZFNpemUgPSBzaXplOworICAg
ICAgICBBU1NFUlQobV9rZXl3b3JkU2l6ZSA9PSBzaXplKTsgLy8gTWFrZSBzdXJlIGl0IGZpdHMg
aW4gdGhlIGJpdGZpZWxkLgorICAgIH0KKyAgICB2b2lkIHNldEtleXdvcmRTaXplRnJvbUlkZW50
aWZpZXIoQ1NTVmFsdWVJRCBpZGVudGlmaWVyKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFpZGVu
dGlmaWVyIHx8IChpZGVudGlmaWVyID49IENTU1ZhbHVlWHhTbWFsbCAmJiBpZGVudGlmaWVyIDw9
IENTU1ZhbHVlV2Via2l0WHh4TGFyZ2UpKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydChDU1NWYWx1
ZVdlYmtpdFh4eExhcmdlIC0gQ1NTVmFsdWVYeFNtYWxsICsgMSA9PSA4LCAiTWF4aW11bSBrZXl3
b3JkIHNpemUgc2hvdWxkIGJlIDguIik7CisgICAgICAgIHNldEtleXdvcmRTaXplKGlkZW50aWZp
ZXIgPyBpZGVudGlmaWVyIC0gQ1NTVmFsdWVYeFNtYWxsICsgMSA6IDApOworICAgIH0KKwogICAg
IHZvaWQgc2V0Rm9udFNtb290aGluZyhGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmcpIHsgbV9m
b250U21vb3RoaW5nID0gc21vb3RoaW5nOyB9CiAgICAgdm9pZCBzZXRUZXh0UmVuZGVyaW5nTW9k
ZShUZXh0UmVuZGVyaW5nTW9kZSByZW5kZXJpbmcpIHsgbV90ZXh0UmVuZGVyaW5nID0gcmVuZGVy
aW5nOyB9CiAgICAgdm9pZCBzZXRJc1NwZWNpZmllZEZvbnQoYm9vbCBpc1NwZWNpZmllZEZvbnQp
IHsgbV9pc1NwZWNpZmllZEZvbnQgPSBpc1NwZWNpZmllZEZvbnQ7IH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2ZUZvckRvY3VtZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2ZUZvckRvY3VtZW50LmNwcAppbmRleCA4NjlhNWY0YWU3
NmI4NmY4MWQyMDBlYmQ3NTBiMGMxNWQwNGU0YmFhLi5jNWQxMjYwMTUzOGU1N2M3MjE2ZGEwMmQ0
MzZiZTEwNzVhNzU0ODg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJl
c29sdmVGb3JEb2N1bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNv
bHZlRm9yRG9jdW1lbnQuY3BwCkBAIC0xMDEsNyArMTAxLDcgQEAgUmVmPFJlbmRlclN0eWxlPiBy
ZXNvbHZlRm9yRG9jdW1lbnQoY29uc3QgRG9jdW1lbnQmIGRvY3VtZW50KQogICAgIGZvbnREZXNj
cmlwdGlvbi5zZXRSZW5kZXJpbmdNb2RlKHNldHRpbmdzLmZvbnRSZW5kZXJpbmdNb2RlKCkpOwog
ICAgIGZvbnREZXNjcmlwdGlvbi5zZXRPbmVGYW1pbHkoc3RhbmRhcmRGYW1pbHkpOwogCi0gICAg
Zm9udERlc2NyaXB0aW9uLnNldEtleXdvcmRTaXplKENTU1ZhbHVlTWVkaXVtIC0gQ1NTVmFsdWVY
eFNtYWxsICsgMSk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldEtleXdvcmRTaXplRnJvbUlkZW50
aWZpZXIoQ1NTVmFsdWVNZWRpdW0pOwogICAgIGludCBzaXplID0gZm9udFNpemVGb3JLZXl3b3Jk
KENTU1ZhbHVlTWVkaXVtLCBmYWxzZSwgZG9jdW1lbnQpOwogICAgIGZvbnREZXNjcmlwdGlvbi5z
ZXRTcGVjaWZpZWRTaXplKHNpemUpOwogICAgIGJvb2wgdXNlU1ZHWm9vbVJ1bGVzID0gZG9jdW1l
bnQuaXNTVkdEb2N1bWVudCgpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>