<?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>157464</bug_id>
          
          <creation_ts>2016-05-08 11:51:02 -0700</creation_ts>
          <short_desc>[OS X] Migrate our Font classes entirely off of NSFont</short_desc>
          <delta_ts>2016-05-08 15:54:03 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Myles C. Maxfield">mmaxfield</reporter>
          <assigned_to name="Myles C. Maxfield">mmaxfield</assigned_to>
          <cc>commit-queue</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1191077</commentid>
    <comment_count>0</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2016-05-08 11:51:02 -0700</bug_when>
    <thetext>[OS X] Migrate our Font classes entirely off of NSFont</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1191079</commentid>
    <comment_count>1</comment_count>
      <attachid>278367</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2016-05-08 12:30:53 -0700</bug_when>
    <thetext>Created attachment 278367
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1191082</commentid>
    <comment_count>2</comment_count>
      <attachid>278367</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-05-08 13:13:25 -0700</bug_when>
    <thetext>Comment on attachment 278367
Patch

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

How safe is this switch? Is there any risk of behavior change?

&gt; Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm:1019
&gt; +        NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
&gt; +            static_cast&lt;NSString *&gt;(adoptCF(CTFontCopyPostScriptName(font)).get()) , NSAccessibilityFontNameKey,
&gt; +            static_cast&lt;NSString *&gt;(adoptCF(CTFontCopyFamilyName(font)).get())     , NSAccessibilityFontFamilyKey,
&gt; +            static_cast&lt;NSString *&gt;(adoptCF(CTFontCopyDisplayName(font)).get())    , NSAccessibilityVisibleNameKey,
&gt; +            [NSNumber numberWithFloat:CTFontGetSize(font)]                         , NSAccessibilityFontSizeKey,
&gt; +            nil];

WebKit coding style specifically asks us to avoid this style, where we line things up in columns.

&gt; Source/WebCore/bindings/objc/DOM.mm:728
&gt; -    RenderObject* renderer = core(self)-&gt;renderer();
&gt; -    if (!renderer)
&gt; -        return nil;
&gt; -    return renderer-&gt;style().fontCascade().primaryFont().getCTFont();
&gt; +    if (RenderObject* renderer = core(self)-&gt;renderer())
&gt; +        return renderer-&gt;style().fontCascade().primaryFont().getCTFont();
&gt; +    return nil;

I prefer early return to nested code like this, except where there are multiple cases.

Also, I suggest we use auto instead of RenderObject* for the type. We may actually get more efficient code because I am pretty sure Element::renderer returns something more specific than RenderObject.

&gt; Source/WebCore/editing/cocoa/HTMLConverter.mm:1041
&gt; +    if (auto renderer = element.renderer())
&gt; +        return (PlatformFont *)renderer-&gt;style().fontCascade().primaryFont().getCTFont();
&gt; +    return nil;

Same comment about early return.

Why is the explicit cast to PlatformFont * needed?

&gt; Source/WebKit/mac/WebCoreSupport/PopupMenuMac.mm:175
&gt; +        RetainPtr&lt;CTFontRef&gt; defaultFont = adoptCF(CTFontCreateUIFontForLanguage(kCTFontSystemFontType, CTFontGetSize(font), nil));

I suggest using auto here instead of explicit RetainPtr&lt;CTFontRef&gt;. The type would be implicit based on the right side expression.

&gt; Source/WebKit2/WebProcess/WebCoreSupport/mac/WebPopupMenuMac.mm:46
&gt; +    RetainPtr&lt;CTFontDescriptorRef&gt; fontDescriptor = adoptCF(CTFontCopyFontDescriptor(font));

Ditto.

&gt; Source/WebKit2/WebProcess/WebCoreSupport/mac/WebPopupMenuMac.mm:50
&gt; +    RetainPtr&lt;CFDictionaryRef&gt; attributes = adoptCF(CTFontDescriptorCopyAttributes(fontDescriptor.get()));

Ditto.

&gt; Source/WebKit2/WebProcess/WebPage/mac/WebPageMac.mm:370
&gt; +        if (CTFontRef ctFont = font ? font-&gt;getCTFont() : nullptr) {
&gt; +            fontName = adoptCF(CTFontCopyPostScriptName(ctFont)).get();
&gt; +            fontSize = CTFontGetSize(ctFont);
&gt;          }

How about nesting a second if rather than using ?: here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1191087</commentid>
    <comment_count>3</comment_count>
      <attachid>278371</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2016-05-08 13:42:19 -0700</bug_when>
    <thetext>Created attachment 278371
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1191092</commentid>
    <comment_count>4</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2016-05-08 14:27:44 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Comment on attachment 278367 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=278367&amp;action=review
&gt; 
&gt; How safe is this switch? Is there any risk of behavior change?

Almost no risk. There are two slight changes, but they shouldn&apos;t have any effect.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1191093</commentid>
    <comment_count>5</comment_count>
      <attachid>278373</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2016-05-08 14:36:06 -0700</bug_when>
    <thetext>Created attachment 278373
Patch for committing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1191094</commentid>
    <comment_count>6</comment_count>
      <attachid>278373</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-05-08 14:37:00 -0700</bug_when>
    <thetext>Comment on attachment 278373
Patch for committing

Rejecting attachment 278373 from commit-queue.

Failed to run &quot;[&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-queues.webkit.org&apos;, &apos;--bot-id=webkit-cq-02&apos;, &apos;validate-changelog&apos;, &apos;--check-oops&apos;, &apos;--non-interactive&apos;, 278373, &apos;--port=mac&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit

ChangeLog entry in Source/WebCore/ChangeLog contains OOPS!.

Full output: http://webkit-queues.webkit.org/results/1289552</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1191095</commentid>
    <comment_count>7</comment_count>
      <attachid>278374</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2016-05-08 14:39:22 -0700</bug_when>
    <thetext>Created attachment 278374
Patch for committing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1191097</commentid>
    <comment_count>8</comment_count>
      <attachid>278374</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-05-08 14:43:24 -0700</bug_when>
    <thetext>Comment on attachment 278374
Patch for committing

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

More ideas for refinement (after landing, presumably).

&gt; Source/WebCore/platform/graphics/cocoa/FontCocoa.mm:548
&gt; +    m_treatAsFixedPitch = (CTFontGetSymbolicTraits(ctFont) &amp; kCTFontMonoSpaceTrait) || CGFontIsFixedPitch(m_platformData.cgFont()) || (fullName &amp;&amp; (CFStringCompare(fullName.get(), CFSTR(&quot;Osaka-Mono&quot;), kCFCompareCaseInsensitive) == kCFCompareEqualTo || CFStringCompare(fullName.get(), CFSTR(&quot;MS-PGothic&quot;), kCFCompareCaseInsensitive) == kCFCompareEqualTo || CFStringCompare(fullName.get(), CFSTR(&quot;MonotypeCorsiva&quot;), kCFCompareCaseInsensitive) == kCFCompareEqualTo));

These calls to CFStringCompare really call for a helper function to make this expression readable.

&gt; Source/WebCore/platform/graphics/cocoa/FontCocoa.mm:598
&gt; +        CGFontRenderingStyle renderingStyle = kCGFontRenderingStyleAntialiasing | kCGFontRenderingStyleSubpixelPositioning | kCGFontRenderingStyleSubpixelQuantization | kCGFontAntialiasingStyleUnfiltered;

Probably could have named this just style instead of renderingStyle.

&gt; Source/WebKit/mac/WebCoreSupport/PopupMenuMac.mm:87
&gt; +                font = style.font().weight() &lt; FontWeightBold ? adoptCF(CTFontCreateUIFontForLanguage(kCTFontUIFontSystem, size, nullptr)) : adoptCF(CTFontCreateUIFontForLanguage(kCTFontUIFontEmphasizedSystem, size, nullptr));

Seems like we could use the ? : just for the kCTFontUIFont constants instead of repeating the whole expression twice.

&gt; Source/WebKit/mac/WebView/WebHTMLView.mm:5650
&gt; +        auto aName = [a fontName];
&gt; +        if (!fontName || !aName || !CFEqual(fontName.get(), static_cast&lt;CFStringRef&gt;([a fontName])))

Forgot to use aName here inside the static_cast.

&gt; Source/WebKit2/WebProcess/WebCoreSupport/mac/WebPopupMenuMac.mm:54
&gt; +    data.fontInfo.fontAttributeDictionary = attributes;

Surprised you don’t need to call get() here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1191102</commentid>
    <comment_count>9</comment_count>
      <attachid>278374</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-05-08 15:02:15 -0700</bug_when>
    <thetext>Comment on attachment 278374
Patch for committing

Rejecting attachment 278374 from commit-queue.

Failed to run &quot;[&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-queues.webkit.org&apos;, &apos;--bot-id=webkit-cq-03&apos;, &apos;build&apos;, &apos;--no-clean&apos;, &apos;--no-update&apos;, &apos;--build-style=release&apos;, &apos;--port=mac&apos;]&quot; exit_code: 2 cwd: /Volumes/Data/EWS/WebKit

Last 500 characters of output:
ntBase.dia -c /Volumes/Data/EWS/WebKit/Source/WebCore/html/HTMLFrameElementBase.cpp -o /Volumes/Data/EWS/WebKit/WebKitBuild/WebCore.build/Release/WebCore.build/Objects-normal/x86_64/HTMLFrameElementBase.o

** BUILD FAILED **


The following build commands failed:
	CompileC /Volumes/Data/EWS/WebKit/WebKitBuild/WebCore.build/Release/WebCore.build/Objects-normal/x86_64/HTMLConverter.o editing/cocoa/HTMLConverter.mm normal x86_64 objective-c++ com.apple.compilers.llvm.clang.1_0.compiler
(1 failure)

Full output: http://webkit-queues.webkit.org/results/1289610</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1191104</commentid>
    <comment_count>10</comment_count>
      <attachid>278377</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2016-05-08 15:33:02 -0700</bug_when>
    <thetext>Created attachment 278377
Patch for committing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1191108</commentid>
    <comment_count>11</comment_count>
      <attachid>278377</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-05-08 15:53:58 -0700</bug_when>
    <thetext>Comment on attachment 278377
Patch for committing

Clearing flags on attachment: 278377

Committed r200563: &lt;http://trac.webkit.org/changeset/200563&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1191109</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-05-08 15:54:03 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>278367</attachid>
            <date>2016-05-08 12:30:53 -0700</date>
            <delta_ts>2016-05-08 13:42:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-157464-20160508123138.patch</filename>
            <type>text/plain</type>
            <size>30878</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAwNTU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzUwZTg5MjgxN2Y5MWYy
MzU5MWM4NDExMGM4NzViYTMyNTE4NTRkYy4uNWIxMDE0MjAzMDZmYjc5YmI0Yjg4ZmIyODhjMmU0
MGRjOWMxMzI5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDE2LTA1LTA4ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW09TIFhdIE1p
Z3JhdGUgb3VyIEZvbnQgY2xhc3NlcyBlbnRpcmVseSBvZmYgb2YgTlNGb250CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTc0NjQKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCZWNhdXNlIE5TRm9udCBhbmQg
Q1RGb250IGFyZSB0b2xsLWZyZWUtYnJpZGdlZCwgd2UgZG9uJ3QgbmVlZCBOU0ZvbnQgYXQgYWxs
IGFueXdoZXJlLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBiZWNhdXNlIHRoZXJlIGlzIG5vIGJl
aGF2aW9yIGNoYW5nZS4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tOgorICAgICAgICAoYWNjZXNzaWJpbGl0eVNlYXJjaENy
aXRlcmlhRm9yU2VhcmNoUHJlZGljYXRlUGFyYW1ldGVyaXplZEF0dHJpYnV0ZSk6CisgICAgICAg
ICh0ZXh0TWFya2VyUmFuZ2VGcm9tUmFuZ2UpOgorICAgICAgICAodmlzaWJsZVBvc2l0aW9uRm9y
U3RhcnRPZlRleHRNYXJrZXJSYW5nZSk6CisgICAgICAgICh2aXNpYmxlUG9zaXRpb25Gb3JFbmRP
ZlRleHRNYXJrZXJSYW5nZSk6CisgICAgICAgIChBWEF0dHJpYnV0ZWRTdHJpbmdSYW5nZUlzVmFs
aWQpOgorICAgICAgICAoQVhBdHRyaWJ1dGVTdHJpbmdTZXRGb250KToKKyAgICAgICAgKENyZWF0
ZUNHQ29sb3JJZkRpZmZlcmVudCk6CisgICAgICAgIChBWEF0dHJpYnV0ZVN0cmluZ1NldFN0eWxl
KToKKyAgICAgICAgKHRleHRNYXJrZXJSYW5nZUZyb21WaXNpYmxlUG9zaXRpb25zKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9vYmpjL0RPTS5tbToKKyAgICAgICAgKC1bRE9NRWxlbWVudCBfZm9udF0p
OgorICAgICAgICAqIGJpbmRpbmdzL29iamMvRE9NUHJpdmF0ZS5oOgorICAgICAgICAqIGVkaXRp
bmcvY29jb2EvSFRNTENvbnZlcnRlci5tbToKKyAgICAgICAgKF9mb250KToKKyAgICAgICAgKFdl
YkNvcmU6OmVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlKToKKyAgICAgICAgKiBlZGl0
aW5nL21hYy9FZGl0b3JNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmZvbnRBdHRy
aWJ1dGVzRm9yU2VsZWN0aW9uU3RhcnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zv
bnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmdldENURm9udCk6CisgICAgICAgIChXZWJD
b3JlOjpGb250OjpnZXROU0ZvbnQpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRQbGF0Zm9ybURhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURh
dGE6Om5zRm9udCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
Rm9udENvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZGV0ZXJtaW5lUGl0Y2gpOgor
ICAgICAgICAoV2ViQ29yZTo6YWR2YW5jZUZvckNvbG9yQml0bWFwRm9udCk6CisgICAgICAgIChX
ZWJDb3JlOjpGb250OjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgpOgorICAgICAgICAoV2ViQ29yZTo6
cmVuZGVyaW5nU3R5bGUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nv
Y29hL0ZvbnRQbGF0Zm9ybURhdGFDb2NvYS5tbToKKwogMjAxNi0wNS0wOCAgRGF2aWQgS2lsemVy
ICA8ZGRraWx6ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFRocmVhZFNhbml0aXplcjogRGF0YSBy
YWNlIGFuZCB0aHJlYWQgbGVhayBpbiBXZWJDb3JlOjpTY3JvbGxpbmdUaHJlYWQ6OmNyZWF0ZVRo
cmVhZElmTmVlZGVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKaW5kZXggZDIzNTQxNDE3ODM2OTFhYjU2NmY2OWE4
OTk2NzgyOGY4YjAzM2Q3Ni4uZmVjNTkzY2Y0ZjI5M2JmZjI0NGMxODZlZjI2NzAyNmZiODE2Yzk4
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJLaXQvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDE2LTA1LTA4ICBNeWxlcyBD
LiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW09TIFhdIE1pZ3Jh
dGUgb3VyIEZvbnQgY2xhc3NlcyBlbnRpcmVseSBvZmYgb2YgTlNGb250CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTc0NjQKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1BvcHVw
TWVudU1hYy5tbToKKyAgICAgICAgKFBvcHVwTWVudU1hYzo6cG9wdWxhdGUpOgorICAgICAgICAo
UG9wdXBNZW51TWFjOjpzaG93KToKKyAgICAgICAgKiBXZWJWaWV3L1dlYkhUTUxWaWV3Lm1tOgor
ICAgICAgICAoZm9udE5hbWVGb3JEZXNjcmlwdGlvbik6CisgICAgICAgICgtW1dlYkhUTUxWaWV3
IF9hZGRUb1N0eWxlOmZvbnRBOmZvbnRCOl0pOgorCiAyMDE2LTA1LTA2ICBKb3NlcGggUGVjb3Jh
cm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CiAKICAgICAgICAgUmVuYW1lIEhpdFRlc3RSZXF1ZXN0
IERpc2FsbG93U2hhZG93Q29udGVudCB0byBEaXNhbGxvd1VzZXJBZ2VudFNoYWRvd0NvbnRlbnQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA3OTA5YjZiN2E1NWRkNDJlM2IzNTc3ZWFkZTI1MDY2NDdjM2FkYmQzLi5k
YmIzNWY2NmEyN2E1NjI5ZDgxODRiMzgyMzE4MzFhYjU4OTUwYjllIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTUgQEAKKzIwMTYtMDUtMDggIE15bGVzIEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFw
cGxlLmNvbT4KKworICAgICAgICBbT1MgWF0gTWlncmF0ZSBvdXIgRm9udCBjbGFzc2VzIGVudGly
ZWx5IG9mZiBvZiBOU0ZvbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE1NzQ2NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViUG9wdXBNZW51TWFj
Lm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnU6OnNldFVwUGxhdGZvcm1EYXRhKToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW06CisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2U6OmZvbnRBdFNlbGVjdGlvbik6CisKIDIwMTYtMDUtMDYgIEpvc2Vw
aCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW5hbWUgSGl0VGVz
dFJlcXVlc3QgRGlzYWxsb3dTaGFkb3dDb250ZW50IHRvIERpc2FsbG93VXNlckFnZW50U2hhZG93
Q29udGVudApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2Vi
QWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQppbmRleCA5MTBh
YzM2OTQ2MzU1ZTllN2FmNGU3OWEwN2JjYTk1NDIzZGNmMjk0Li5jMDI2ZTRiODJiMjA0OWUxYTVi
ZjMyZTZjYWZjOGY2M2Q4Y2FmYzVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ck1hYy5tbQpAQCAtNzI0LDcgKzcyNCw3IEBAIHN0YXRpYyBBY2Nlc3NpYmlsaXR5U2VhcmNoQ3Jp
dGVyaWEgYWNjZXNzaWJpbGl0eVNlYXJjaENyaXRlcmlhRm9yU2VhcmNoUHJlZGljYXRlCiAgICAg
aWYgKFtzZWFyY2hUZXh0UGFyYW1ldGVyIGlzS2luZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNzXV0p
CiAgICAgICAgIHNlYXJjaFRleHQgPSBzZWFyY2hUZXh0UGFyYW1ldGVyOwogICAgIAotICAgIEFj
Y2Vzc2liaWxpdHlPYmplY3QgKnN0YXJ0RWxlbWVudCA9IG51bGxwdHI7CisgICAgQWNjZXNzaWJp
bGl0eU9iamVjdCogc3RhcnRFbGVtZW50ID0gbnVsbHB0cjsKICAgICBpZiAoW3N0YXJ0RWxlbWVu
dFBhcmFtZXRlciBpc0tpbmRPZkNsYXNzOltXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBj
bGFzc11dKQogICAgICAgICBzdGFydEVsZW1lbnQgPSBbc3RhcnRFbGVtZW50UGFyYW1ldGVyIGFj
Y2Vzc2liaWxpdHlPYmplY3RdOwogICAgIApAQCAtODMxLDcgKzgzMSw3IEBAIC0gKGlkKXRleHRN
YXJrZXJSYW5nZUZyb21SYW5nZTooY29uc3QgUmVmUHRyPFJhbmdlPilyYW5nZQogICAgIHJldHVy
biB0ZXh0TWFya2VyUmFuZ2VGcm9tUmFuZ2UobV9vYmplY3QtPmF4T2JqZWN0Q2FjaGUoKSwgcmFu
Z2UpOwogfQogCi1zdGF0aWMgaWQgdGV4dE1hcmtlclJhbmdlRnJvbVJhbmdlKEFYT2JqZWN0Q2Fj
aGUgKmNhY2hlLCBjb25zdCBSZWZQdHI8UmFuZ2U+IHJhbmdlKQorc3RhdGljIGlkIHRleHRNYXJr
ZXJSYW5nZUZyb21SYW5nZShBWE9iamVjdENhY2hlKiBjYWNoZSwgY29uc3QgUmVmUHRyPFJhbmdl
PiByYW5nZSkKIHsKICAgICBpZCBzdGFydFRleHRNYXJrZXIgPSBzdGFydE9yRW5kVGV4dG1hcmtl
ckZvclJhbmdlKGNhY2hlLCByYW5nZSwgdHJ1ZSk7CiAgICAgaWQgZW5kVGV4dE1hcmtlciA9IHN0
YXJ0T3JFbmRUZXh0bWFya2VyRm9yUmFuZ2UoY2FjaGUsIHJhbmdlLCBmYWxzZSk7CkBAIC05ODAs
MTIgKzk4MCwxMiBAQCAtIChWaXNpYmxlUG9zaXRpb24pdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1h
cmtlcjooaWQpdGV4dE1hcmtlcgogICAgIHJldHVybiB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFy
a2VyKG1fb2JqZWN0LT5heE9iamVjdENhY2hlKCksIHRleHRNYXJrZXIpOwogfQogCi1zdGF0aWMg
VmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbkZvclN0YXJ0T2ZUZXh0TWFya2VyUmFuZ2Uo
QVhPYmplY3RDYWNoZSAqY2FjaGUsIGlkIHRleHRNYXJrZXJSYW5nZSkKK3N0YXRpYyBWaXNpYmxl
UG9zaXRpb24gdmlzaWJsZVBvc2l0aW9uRm9yU3RhcnRPZlRleHRNYXJrZXJSYW5nZShBWE9iamVj
dENhY2hlKiBjYWNoZSwgaWQgdGV4dE1hcmtlclJhbmdlKQogewogICAgIHJldHVybiB2aXNpYmxl
UG9zaXRpb25Gb3JUZXh0TWFya2VyKGNhY2hlLCBBWFRleHRNYXJrZXJSYW5nZVN0YXJ0KHRleHRN
YXJrZXJSYW5nZSkpOwogfQogCi1zdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlv
bkZvckVuZE9mVGV4dE1hcmtlclJhbmdlKEFYT2JqZWN0Q2FjaGUgKmNhY2hlLCBpZCB0ZXh0TWFy
a2VyUmFuZ2UpCitzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbkZvckVuZE9m
VGV4dE1hcmtlclJhbmdlKEFYT2JqZWN0Q2FjaGUqIGNhY2hlLCBpZCB0ZXh0TWFya2VyUmFuZ2Up
CiB7CiAgICAgcmV0dXJuIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXIoY2FjaGUsIEFYVGV4
dE1hcmtlclJhbmdlRW5kKHRleHRNYXJrZXJSYW5nZSkpOwogfQpAQCAtMTAwMCwyMyArMTAwMCwy
MyBAQCBzdGF0aWMgaWQgdGV4dE1hcmtlclJhbmdlRnJvbU1hcmtlcnMoaWQgdGV4dE1hcmtlcjEs
IGlkIHRleHRNYXJrZXIyKQogCiAvLyBXaGVuIG1vZGlmeWluZyBhdHRyaWJ1dGVkIHN0cmluZ3Ms
IHRoZSByYW5nZSBjYW4gY29tZSBmcm9tIGEgc291cmNlIHdoaWNoIG1heSBwcm92aWRlIGZhdWx0
eSBpbmZvcm1hdGlvbiAoZS5nLiB0aGUgc3BlbGwgY2hlY2tlcikuCiAvLyBUbyBwcm90ZWN0IGFn
YWluc3Qgc3VjaCBjYXNlcyB0aGUgcmFuZ2Ugc2hvdWxkIGJlIHZhbGlkYXRlZCBiZWZvcmUgYWRk
aW5nIG9yIHJlbW92aW5nIGF0dHJpYnV0ZXMuCi1zdGF0aWMgQk9PTCBBWEF0dHJpYnV0ZWRTdHJp
bmdSYW5nZUlzVmFsaWQoTlNBdHRyaWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5nLCBOU1JhbmdlIHJh
bmdlKQorc3RhdGljIEJPT0wgQVhBdHRyaWJ1dGVkU3RyaW5nUmFuZ2VJc1ZhbGlkKE5TQXR0cmli
dXRlZFN0cmluZyAqYXR0clN0cmluZywgTlNSYW5nZSByYW5nZSkKIHsKICAgICByZXR1cm4gKHJh
bmdlLmxvY2F0aW9uIDwgW2F0dHJTdHJpbmcgbGVuZ3RoXSAmJiBOU01heFJhbmdlKHJhbmdlKSA8
PSBbYXR0clN0cmluZyBsZW5ndGhdKTsKIH0KIAotc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVTdHJp
bmdTZXRGb250KE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcqIGF0dHJTdHJpbmcsIE5TU3RyaW5n
KiBhdHRyaWJ1dGUsIE5TRm9udCogZm9udCwgTlNSYW5nZSByYW5nZSkKK3N0YXRpYyB2b2lkIEFY
QXR0cmlidXRlU3RyaW5nU2V0Rm9udChOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nICphdHRyU3Ry
aW5nLCBOU1N0cmluZyAqYXR0cmlidXRlLCBDVEZvbnRSZWYgZm9udCwgTlNSYW5nZSByYW5nZSkK
IHsKICAgICBpZiAoIUFYQXR0cmlidXRlZFN0cmluZ1JhbmdlSXNWYWxpZChhdHRyU3RyaW5nLCBy
YW5nZSkpCiAgICAgICAgIHJldHVybjsKLSAgICAKKwogICAgIGlmIChmb250KSB7Ci0gICAgICAg
IE5TRGljdGlvbmFyeSogZGljdCA9IFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3Rz
QW5kS2V5czoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb250IGZvbnROYW1lXSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBOU0FjY2Vzc2liaWxpdHlGb250TmFtZUtleSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb250IGZhbWlseU5hbWVdICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLCBOU0FjY2Vzc2liaWxpdHlGb250RmFtaWx5S2V5LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgW2ZvbnQgZGlzcGxheU5hbWVdICAgICAgICAgICAgICAg
ICAgICAgICAgICAsIE5TQWNjZXNzaWJpbGl0eVZpc2libGVOYW1lS2V5LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDpbZm9udCBwb2ludFNp
emVdXSAsIE5TQWNjZXNzaWJpbGl0eUZvbnRTaXplS2V5LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbmlsXTsKKyAgICAgICAgTlNEaWN0aW9uYXJ5ICpkaWN0ID0gW05TRGljdGlvbmFy
eSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOgorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
TlNTdHJpbmcgKj4oYWRvcHRDRihDVEZvbnRDb3B5UG9zdFNjcmlwdE5hbWUoZm9udCkpLmdldCgp
KSAsIE5TQWNjZXNzaWJpbGl0eUZvbnROYW1lS2V5LAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
TlNTdHJpbmcgKj4oYWRvcHRDRihDVEZvbnRDb3B5RmFtaWx5TmFtZShmb250KSkuZ2V0KCkpICAg
ICAsIE5TQWNjZXNzaWJpbGl0eUZvbnRGYW1pbHlLZXksCisgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxOU1N0cmluZyAqPihhZG9wdENGKENURm9udENvcHlEaXNwbGF5TmFtZShmb250KSkuZ2V0KCkp
ICAgICwgTlNBY2Nlc3NpYmlsaXR5VmlzaWJsZU5hbWVLZXksCisgICAgICAgICAgICBbTlNOdW1i
ZXIgbnVtYmVyV2l0aEZsb2F0OkNURm9udEdldFNpemUoZm9udCldICAgICAgICAgICAgICAgICAg
ICAgICAgICwgTlNBY2Nlc3NpYmlsaXR5Rm9udFNpemVLZXksCisgICAgICAgICAgICBuaWxdOwog
ICAgICAgICAKICAgICAgICAgW2F0dHJTdHJpbmcgYWRkQXR0cmlidXRlOmF0dHJpYnV0ZSB2YWx1
ZTpkaWN0IHJhbmdlOnJhbmdlXTsKICAgICB9IGVsc2UKQEAgLTEwMjQsMTAgKzEwMjQsMTAgQEAg
c3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVTdHJpbmdTZXRGb250KE5TTXV0YWJsZUF0dHJpYnV0ZWRT
dHJpbmcqIGF0dHJTdHJpbmcsIE5TU3QKICAgICAKIH0KIAotc3RhdGljIENHQ29sb3JSZWYgQ3Jl
YXRlQ0dDb2xvcklmRGlmZmVyZW50KE5TQ29sb3IqIG5zQ29sb3IsIENHQ29sb3JSZWYgZXhpc3Rp
bmdDb2xvcikKK3N0YXRpYyBDR0NvbG9yUmVmIENyZWF0ZUNHQ29sb3JJZkRpZmZlcmVudChOU0Nv
bG9yICpuc0NvbG9yLCBDR0NvbG9yUmVmIGV4aXN0aW5nQ29sb3IpCiB7CiAgICAgLy8gZ2V0IGNv
bG9yIGluZm9ybWF0aW9uIGFzc3VtaW5nIE5TRGV2aWNlUkdCQ29sb3JTcGFjZQotICAgIE5TQ29s
b3IqIHJnYkNvbG9yID0gW25zQ29sb3IgY29sb3JVc2luZ0NvbG9yU3BhY2VOYW1lOk5TRGV2aWNl
UkdCQ29sb3JTcGFjZV07CisgICAgTlNDb2xvciAqcmdiQ29sb3IgPSBbbnNDb2xvciBjb2xvclVz
aW5nQ29sb3JTcGFjZU5hbWU6TlNEZXZpY2VSR0JDb2xvclNwYWNlXTsKICAgICBpZiAocmdiQ29s
b3IgPT0gbmlsKQogICAgICAgICByZ2JDb2xvciA9IFtOU0NvbG9yIGJsYWNrQ29sb3JdOwogICAg
IENHRmxvYXQgY29tcG9uZW50c1s0XTsKQEAgLTEwNzksNyArMTA3OSw3IEBAIHN0YXRpYyB2b2lk
IEFYQXR0cmlidXRlU3RyaW5nU2V0U3R5bGUoTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyogYXR0
clN0cmluZywgUmVuCiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlID0gcmVuZGVyZXItPnN0
eWxlKCk7CiAgICAgCiAgICAgLy8gc2V0IGJhc2ljIGZvbnQgaW5mbwotICAgIEFYQXR0cmlidXRl
U3RyaW5nU2V0Rm9udChhdHRyU3RyaW5nLCBOU0FjY2Vzc2liaWxpdHlGb250VGV4dEF0dHJpYnV0
ZSwgc3R5bGUuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpLmdldE5TRm9udCgpLCByYW5nZSk7
CisgICAgQVhBdHRyaWJ1dGVTdHJpbmdTZXRGb250KGF0dHJTdHJpbmcsIE5TQWNjZXNzaWJpbGl0
eUZvbnRUZXh0QXR0cmlidXRlLCBzdHlsZS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCkuZ2V0
Q1RGb250KCksIHJhbmdlKTsKICAgICAKICAgICAvLyBzZXQgYmFzaWMgY29sb3JzCiAgICAgQVhB
dHRyaWJ1dGVTdHJpbmdTZXRDb2xvcihhdHRyU3RyaW5nLCBOU0FjY2Vzc2liaWxpdHlGb3JlZ3Jv
dW5kQ29sb3JUZXh0QXR0cmlidXRlLCBuc0NvbG9yKHN0eWxlLnZpc2l0ZWREZXBlbmRlbnRDb2xv
cihDU1NQcm9wZXJ0eUNvbG9yKSksIHJhbmdlKTsKQEAgLTEzNDgsNyArMTM0OCw3IEBAIC0gKE5T
QXR0cmlidXRlZFN0cmluZyopZG9BWEF0dHJpYnV0ZWRTdHJpbmdGb3JUZXh0TWFya2VyUmFuZ2U6
KGlkKXRleHRNYXJrZXJSYW5nCiAgICAgcmV0dXJuIFthdHRyU3RyaW5nIGF1dG9yZWxlYXNlXTsK
IH0KIAotc3RhdGljIGlkIHRleHRNYXJrZXJSYW5nZUZyb21WaXNpYmxlUG9zaXRpb25zKEFYT2Jq
ZWN0Q2FjaGUgKmNhY2hlLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIHN0YXJ0UG9zaXRpb24sIGNv
bnN0IFZpc2libGVQb3NpdGlvbiYgZW5kUG9zaXRpb24pCitzdGF0aWMgaWQgdGV4dE1hcmtlclJh
bmdlRnJvbVZpc2libGVQb3NpdGlvbnMoQVhPYmplY3RDYWNoZSogY2FjaGUsIGNvbnN0IFZpc2li
bGVQb3NpdGlvbiYgc3RhcnRQb3NpdGlvbiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBlbmRQb3Np
dGlvbikKIHsKICAgICBpZCBzdGFydFRleHRNYXJrZXIgPSB0ZXh0TWFya2VyRm9yVmlzaWJsZVBv
c2l0aW9uKGNhY2hlLCBzdGFydFBvc2l0aW9uKTsKICAgICBpZCBlbmRUZXh0TWFya2VyID0gdGV4
dE1hcmtlckZvclZpc2libGVQb3NpdGlvbihjYWNoZSwgZW5kUG9zaXRpb24pOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET00ubW0gYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9vYmpjL0RPTS5tbQppbmRleCBhMzJmMDNlYWZjZWMxYzk1NmVlYTVjMmM0NzAwMTBk
Y2JkZGNiNjVjLi4yNjE0MGNmNGIyMmZjMjQyMmZiOGUzYmFiN2I1M2NkODc0NTQyOTZlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQpAQCAtNzIxLDI0ICs3MjEsMTIgQEAgQGVuZAog
CiBAaW1wbGVtZW50YXRpb24gRE9NRWxlbWVudCAoV2ViUHJpdmF0ZSkKIAotI2lmICFQTEFURk9S
TShJT1MpCi0tIChOU0ZvbnQgKilfZm9udAotewotICAgIC8vIEZJWE1FOiBDb3VsZCB3ZSBtb3Zl
IHRoaXMgZnVuY3Rpb24gdG8gV2ViQ29yZTo6RWxlbWVudCBhbmQgYXV0b2dlbmVyYXRlPwotICAg
IGF1dG8gcmVuZGVyZXIgPSBjb3JlKHNlbGYpLT5yZW5kZXJlcigpOwotICAgIGlmICghcmVuZGVy
ZXIpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgcmV0dXJuIHJlbmRlcmVyLT5zdHlsZSgpLmZv
bnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKS5nZXROU0ZvbnQoKTsKLX0KLSNlbHNlCiAtIChDVEZv
bnRSZWYpX2ZvbnQKIHsKLSAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gY29yZShzZWxmKS0+
cmVuZGVyZXIoKTsKLSAgICBpZiAoIXJlbmRlcmVyKQotICAgICAgICByZXR1cm4gbmlsOwotICAg
IHJldHVybiByZW5kZXJlci0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCkuZ2V0
Q1RGb250KCk7CisgICAgaWYgKFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBjb3JlKHNlbGYpLT5y
ZW5kZXJlcigpKQorICAgICAgICByZXR1cm4gcmVuZGVyZXItPnN0eWxlKCkuZm9udENhc2NhZGUo
KS5wcmltYXJ5Rm9udCgpLmdldENURm9udCgpOworICAgIHJldHVybiBuaWw7CiB9Ci0jZW5kaWYK
IAogI2lmICFQTEFURk9STShJT1MpCiAtIChOU0RhdGEgKilfaW1hZ2VUSUZGUmVwcmVzZW50YXRp
b24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NUHJpdmF0ZS5o
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01Qcml2YXRlLmgKaW5kZXggMWUyOTM2
ZGQ4OTRlNTYzYzIxNzY0MmYwMjdiOGNkMmU3YzRkNTFjZS4uN2FjMmMyZWZlNTBlYThmNzYxZTFj
ZjMzN2Q3OTE0MjdkZjIwYWIzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
b2JqYy9ET01Qcml2YXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01Q
cml2YXRlLmgKQEAgLTc0LDExICs3NCw5IEBACiAKIEBpbnRlcmZhY2UgRE9NRWxlbWVudCAoV2Vi
UHJpdmF0ZSkKICNpZiAhVEFSR0VUX09TX0lQSE9ORQotLSAoTlNGb250ICopX2ZvbnQ7CiAtIChO
U0RhdGEgKilfaW1hZ2VUSUZGUmVwcmVzZW50YXRpb247Ci0jZWxzZQotLSAoQ1RGb250UmVmKV9m
b250OwogI2VuZGlmCistIChDVEZvbnRSZWYpX2ZvbnQ7CiAtIChOU1VSTCAqKV9nZXRVUkxBdHRy
aWJ1dGU6KE5TU3RyaW5nICopbmFtZTsKIC0gKEJPT0wpaXNGb2N1c2VkOwogQGVuZApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tCmluZGV4IDVmYTQ0YTY1
NDJlNTdmZWIyODcwODIzNDViMjc2MWJmMTg2OWYzMDQuLmRkMjM5ZTFjOTY4OTdlZDQ4MzdlZTVh
MDc4YzkxNTY4ODZhNmQ0NzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29j
b2EvSFRNTENvbnZlcnRlci5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0hU
TUxDb252ZXJ0ZXIubW0KQEAgLTEwMzQsMjMgKzEwMzQsMTIgQEAgUGxhdGZvcm1Db2xvciAqSFRN
TENvbnZlcnRlcjo6X2NvbG9yRm9yRWxlbWVudChFbGVtZW50JiBlbGVtZW50LCBDU1NQcm9wZXJ0
eUlEIHAKICAgICByZXR1cm4gcGxhdGZvcm1SZXN1bHQ7CiB9CiAKLSNpZiAhUExBVEZPUk0oSU9T
KQogc3RhdGljIFBsYXRmb3JtRm9udCAqX2ZvbnQoRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBh
dXRvIHJlbmRlcmVyID0gZWxlbWVudC5yZW5kZXJlcigpOwotICAgIGlmICghcmVuZGVyZXIpCi0g
ICAgICAgIHJldHVybiBuaWw7Ci0gICAgcmV0dXJuIHJlbmRlcmVyLT5zdHlsZSgpLmZvbnRDYXNj
YWRlKCkucHJpbWFyeUZvbnQoKS5nZXROU0ZvbnQoKTsKLX0KLSNlbHNlCi1zdGF0aWMgUGxhdGZv
cm1Gb250ICpfZm9udChFbGVtZW50JiBlbGVtZW50KQotewotICAgIGF1dG8gcmVuZGVyZXIgPSBl
bGVtZW50LnJlbmRlcmVyKCk7Ci0gICAgaWYgKCFyZW5kZXJlcikKLSAgICAgICAgcmV0dXJuIG5p
bDsKLSAgICByZXR1cm4gKFBsYXRmb3JtRm9udCAqKXJlbmRlcmVyLT5zdHlsZSgpLmZvbnRDYXNj
YWRlKCkucHJpbWFyeUZvbnQoKS5nZXRDVEZvbnQoKTsKKyAgICBpZiAoYXV0byByZW5kZXJlciA9
IGVsZW1lbnQucmVuZGVyZXIoKSkKKyAgICAgICAgcmV0dXJuIChQbGF0Zm9ybUZvbnQgKilyZW5k
ZXJlci0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCkuZ2V0Q1RGb250KCk7Cisg
ICAgcmV0dXJuIG5pbDsKIH0KLSNlbmRpZgogCiAjZGVmaW5lIFVJRmxvYXRJc1plcm8obnVtYmVy
KSAoZmFicyhudW1iZXIgLSAwKSA8IEZMVF9FUFNJTE9OKQogCkBAIC0yNTM1LDggKzI1MjQsOCBA
QCBOU0F0dHJpYnV0ZWRTdHJpbmcgKmVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlKFJh
bmdlJiByYW5nZSwgSW5jbHVkZUltYWdlcwogICAgICAgICAgICAgW2F0dHJzLmdldCgpIHNldE9i
amVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0aEludGVnZXI6TlNVbmRlcmxpbmVTdHlsZVNpbmdsZV0g
Zm9yS2V5Ok5TVW5kZXJsaW5lU3R5bGVBdHRyaWJ1dGVOYW1lXTsKICAgICAgICAgaWYgKHN0eWxl
LnRleHREZWNvcmF0aW9uc0luRWZmZWN0KCkgJiBUZXh0RGVjb3JhdGlvbkxpbmVUaHJvdWdoKQog
ICAgICAgICAgICAgW2F0dHJzLmdldCgpIHNldE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0aElu
dGVnZXI6TlNVbmRlcmxpbmVTdHlsZVNpbmdsZV0gZm9yS2V5Ok5TU3RyaWtldGhyb3VnaFN0eWxl
QXR0cmlidXRlTmFtZV07Ci0gICAgICAgIGlmIChOU0ZvbnQgKmZvbnQgPSBzdHlsZS5mb250Q2Fz
Y2FkZSgpLnByaW1hcnlGb250KCkuZ2V0TlNGb250KCkpCi0gICAgICAgICAgICBbYXR0cnMuZ2V0
KCkgc2V0T2JqZWN0OmZvbnQgZm9yS2V5Ok5TRm9udEF0dHJpYnV0ZU5hbWVdOworICAgICAgICBp
ZiAoYXV0byBmb250ID0gc3R5bGUuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpLmdldENURm9u
dCgpKQorICAgICAgICAgICAgW2F0dHJzLmdldCgpIHNldE9iamVjdDp0b05TRm9udChmb250KSBm
b3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIFth
dHRycy5nZXQoKSBzZXRPYmplY3Q6W2ZvbnRNYW5hZ2VyIGNvbnZlcnRGb250OldlYkRlZmF1bHRG
b250KCkgdG9TaXplOnN0eWxlLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKS5wbGF0Zm9ybURh
dGEoKS5zaXplKCldIGZvcktleTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKICAgICAgICAgaWYgKHN0
eWxlLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKS5hbHBoYSgpKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCmluZGV4IDE5NTNhYzlmMjI3ZjI0MjVm
OWRiM2EyNjliMDY3NjE4ZDI2MmIwYTQuLjA4MzY2MzQ3MGJiOGU0MDg3MDNmNThjZTg1MTkwOTEx
N2YxODNkZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1h
Yy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0KQEAgLTE1
NSw4ICsxNTUsOCBAQCBOU0RpY3Rpb25hcnkqIEVkaXRvcjo6Zm9udEF0dHJpYnV0ZXNGb3JTZWxl
Y3Rpb25TdGFydCgpIGNvbnN0CiAgICAgaWYgKHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3Io
Q1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpLmlzVmFsaWQoKSAmJiBzdHlsZS0+dmlzaXRlZERl
cGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKS5hbHBoYSgpICE9IDApCiAg
ICAgICAgIFtyZXN1bHQgc2V0T2JqZWN0Om5zQ29sb3Ioc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRD
b2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcikpIGZvcktleTpOU0JhY2tncm91bmRDb2xv
ckF0dHJpYnV0ZU5hbWVdOwogCi0gICAgaWYgKHN0eWxlLT5mb250Q2FzY2FkZSgpLnByaW1hcnlG
b250KCkuZ2V0TlNGb250KCkpCi0gICAgICAgIFtyZXN1bHQgc2V0T2JqZWN0OnN0eWxlLT5mb250
Q2FzY2FkZSgpLnByaW1hcnlGb250KCkuZ2V0TlNGb250KCkgZm9yS2V5Ok5TRm9udEF0dHJpYnV0
ZU5hbWVdOworICAgIGlmIChhdXRvIGN0Rm9udCA9IHN0eWxlLT5mb250Q2FzY2FkZSgpLnByaW1h
cnlGb250KCkuZ2V0Q1RGb250KCkpCisgICAgICAgIFtyZXN1bHQgc2V0T2JqZWN0OnRvTlNGb250
KGN0Rm9udCkgZm9yS2V5Ok5TRm9udEF0dHJpYnV0ZU5hbWVdOwogCiAgICAgaWYgKHN0eWxlLT52
aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcikuaXNWYWxpZCgpICYmIHN0eWxl
LT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcikgIT0gQ29sb3I6OmJsYWNr
KQogICAgICAgICBbcmVzdWx0IHNldE9iamVjdDpuc0NvbG9yKHN0eWxlLT52aXNpdGVkRGVwZW5k
ZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcikpIGZvcktleTpOU0ZvcmVncm91bmRDb2xvckF0dHJp
YnV0ZU5hbWVdOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCmluZGV4IGE4
YWJkNWNhMDE2ODJiMzNlMDQwNmY3OWQyOGVmYTcwYTU2MmIyYTguLmI0OWM0ZDcwMjlkN2JhMGE2
ODhiOWNkNDY5NDc3OTBiZTNjZmQwNDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250LmgKQEAgLTE3MiwxNSArMTcyLDExIEBAIHB1YmxpYzoKICAgICBTdHJpbmcgZGVzY3Jp
cHRpb24oKSBjb25zdDsKICNlbmRpZgogCi0jaWYgVVNFKEFQUEtJVCkKLSAgICBOU0ZvbnQqIGdl
dE5TRm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fcGxhdGZvcm1EYXRhLm5zRm9udCgpOyB9Ci0jZW5k
aWYKLQogI2lmIFBMQVRGT1JNKElPUykKLSAgICBDVEZvbnRSZWYgZ2V0Q1RGb250KCkgY29uc3Qg
eyByZXR1cm4gbV9wbGF0Zm9ybURhdGEuZm9udCgpOyB9CiAgICAgYm9vbCBzaG91bGROb3RCZVVz
ZWRGb3JBcmFiaWMoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZE5vdEJlVXNlZEZvckFyYWJpYzsg
fTsKICNlbmRpZgogI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIENURm9udFJlZiBnZXRDVEZvbnQo
KSBjb25zdCB7IHJldHVybiBtX3BsYXRmb3JtRGF0YS5mb250KCk7IH0KICAgICBDRkRpY3Rpb25h
cnlSZWYgZ2V0Q0ZTdHJpbmdBdHRyaWJ1dGVzKGJvb2wgZW5hYmxlS2VybmluZywgRm9udE9yaWVu
dGF0aW9uKSBjb25zdDsKICAgICBjb25zdCBCaXRWZWN0b3ImIGdseXBoc1N1cHBvcnRlZEJ5U21h
bGxDYXBzKCkgY29uc3Q7CiAgICAgY29uc3QgQml0VmVjdG9yJiBnbHlwaHNTdXBwb3J0ZWRCeUFs
bFNtYWxsQ2FwcygpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oCmluZGV4IGQxNmY2YzFhOTNhNmU1MmNkZjU1ZGZkZWUw
NjRlZmMzYjcxOWViYmEuLjNjZTM4YTRmYjhiNTg0MzFiY2ZlOGU1MjJmOWY0MzEwYTJjMmEwMWUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9y
bURhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZv
cm1EYXRhLmgKQEAgLTEzMCwxMSArMTMwLDYgQEAgcHVibGljOgogICAgIFJldGFpblB0cjxDRlR5
cGVSZWY+IG9iamVjdEZvckVxdWFsaXR5Q2hlY2soKSBjb25zdDsKIAogICAgIGJvb2wgaGFzQ3Vz
dG9tVHJhY2tpbmcoKSBjb25zdCB7IHJldHVybiBpc1N5c3RlbUZvbnQoKTsgfQotCi0jaWYgVVNF
KEFQUEtJVCkKLSAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgd2hlbiBhbGwgTlNGb250IHVzYWdl
IGlzIHJlbW92ZWQuCi0gICAgTlNGb250ICpuc0ZvbnQoKSBjb25zdCB7IHJldHVybiAoTlNGb250
ICopbV9mb250LmdldCgpOyB9Ci0jZW5kaWYKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oV0lOKSB8
fCBQTEFURk9STShDT0NPQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NvY29hL0ZvbnRDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NvY29hL0ZvbnRDb2NvYS5tbQppbmRleCA3ZmUwYzJlMThiNGQyZDY2M2ZjNmJhZjE5YzU0
ZGZlNDk0YTM2MzQ4Li4wOWNiMjQ4YWZhMjk4NGI4NDU0N2ZiOTJmYTJhNGI5ZGI4ZDVmY2ZhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q29j
b2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENv
Y29hLm1tCkBAIC01MjcsOCArNTI3LDkgQEAgUmVmUHRyPEZvbnQ+IEZvbnQ6OnBsYXRmb3JtQ3Jl
YXRlU2NhbGVkRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBmbG9hdCBzY2FsZUYKIAogdm9p
ZCBGb250OjpkZXRlcm1pbmVQaXRjaCgpCiB7Ci0jaWYgVVNFKEFQUEtJVCkKLSAgICBOU0ZvbnQq
IGYgPSBtX3BsYXRmb3JtRGF0YS5uc0ZvbnQoKTsKKyAgICBDVEZvbnRSZWYgY3RGb250ID0gbV9w
bGF0Zm9ybURhdGEuZm9udCgpOworICAgIEFTU0VSVChjdEZvbnQpOworCiAgICAgLy8gU3BlY2lh
bCBjYXNlIE9zYWthLU1vbm8uCiAgICAgLy8gQWNjb3JkaW5nIHRvIDxyZGFyOi8vcHJvYmxlbS8z
OTk5NDY3Piwgd2Ugc2hvdWxkIHRyZWF0IE9zYWthLU1vbm8gYXMgZml4ZWQgcGl0Y2guCiAgICAg
Ly8gTm90ZSB0aGF0IHRoZSBBcHBLaXQgZG9lcyBub3QgcmVwb3J0IE9zYWthLU1vbm8gYXMgZml4
ZWQgcGl0Y2guCkBAIC01NDEsMTggKzU0MiwxMSBAQCB2b2lkIEZvbnQ6OmRldGVybWluZVBpdGNo
KCkKICAgICAvLyBBY2NvcmRpbmcgdG8gPHJkYXI6Ly9wcm9ibGVtLzU0NTQ3MDQ+LCB3ZSBzaG91
bGQgbm90IHRyZWF0IE1vbm90eXBlQ29yc2l2YSBhcyBmaXhlZCBwaXRjaC4KICAgICAvLyBOb3Rl
IHRoYXQgQXBwS2l0IGRvZXMgcmVwb3J0IE1vbm90eXBlQ29yc2l2YSBhcyBmaXhlZCBwaXRjaC4K
IAotICAgIE5TU3RyaW5nICpuYW1lID0gW2YgZm9udE5hbWVdOwotICAgIG1fdHJlYXRBc0ZpeGVk
UGl0Y2ggPSAoW2YgaXNGaXhlZFBpdGNoXSAgfHwgW2YgX2lzRmFrZUZpeGVkUGl0Y2hdIHx8IFtu
YW1lIGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmU6QCJPc2FrYS1Nb25vIl0gPT0gTlNPcmRlcmVkU2Ft
ZSkgJiYgW25hbWUgY2FzZUluc2Vuc2l0aXZlQ29tcGFyZTpAIk1TLVBHb3RoaWMiXSAhPSBOU09y
ZGVyZWRTYW1lICYmIFtuYW1lIGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmU6QCJNb25vdHlwZUNvcnNp
dmEiXSAhPSBOU09yZGVyZWRTYW1lOwotI2Vsc2UKLSAgICBDVEZvbnRSZWYgY3RGb250ID0gbV9w
bGF0Zm9ybURhdGEuZm9udCgpOwotICAgIG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPSBmYWxzZTsKLSAg
ICBpZiAoIWN0Rm9udCkKLSAgICAgICAgcmV0dXJuOyAvLyBDVEZvbnQgaXMgbnVsbCBpbiB0aGUg
Y2FzZSBvZiBTVkcgZm9udHMgZm9yIGV4YW1wbGUuCi0KICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdS
ZWY+IGZ1bGxOYW1lID0gYWRvcHRDRihDVEZvbnRDb3B5RnVsbE5hbWUoY3RGb250KSk7CiAgICAg
UmV0YWluUHRyPENGU3RyaW5nUmVmPiBmYW1pbHlOYW1lID0gYWRvcHRDRihDVEZvbnRDb3B5RmFt
aWx5TmFtZShjdEZvbnQpKTsKIAotICAgIG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPSBDR0ZvbnRJc0Zp
eGVkUGl0Y2gobV9wbGF0Zm9ybURhdGEuY2dGb250KCkpIHx8IChmdWxsTmFtZSAmJiAoQ0ZTdHJp
bmdDb21wYXJlKGZ1bGxOYW1lLmdldCgpLCBDRlNUUigiT3Nha2EtTW9ubyIpLCBrQ0ZDb21wYXJl
Q2FzZUluc2Vuc2l0aXZlKSA9PSBrQ0ZDb21wYXJlRXF1YWxUbyB8fCBDRlN0cmluZ0NvbXBhcmUo
ZnVsbE5hbWUuZ2V0KCksIENGU1RSKCJNUy1QR290aGljIiksIGtDRkNvbXBhcmVDYXNlSW5zZW5z
aXRpdmUpID09IGtDRkNvbXBhcmVFcXVhbFRvKSk7CisgICAgbV90cmVhdEFzRml4ZWRQaXRjaCA9
IChDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhjdEZvbnQpICYga0NURm9udE1vbm9TcGFjZVRyYWl0
KSB8fCBDR0ZvbnRJc0ZpeGVkUGl0Y2gobV9wbGF0Zm9ybURhdGEuY2dGb250KCkpIHx8IChmdWxs
TmFtZSAmJiAoQ0ZTdHJpbmdDb21wYXJlKGZ1bGxOYW1lLmdldCgpLCBDRlNUUigiT3Nha2EtTW9u
byIpLCBrQ0ZDb21wYXJlQ2FzZUluc2Vuc2l0aXZlKSA9PSBrQ0ZDb21wYXJlRXF1YWxUbyB8fCBD
RlN0cmluZ0NvbXBhcmUoZnVsbE5hbWUuZ2V0KCksIENGU1RSKCJNUy1QR290aGljIiksIGtDRkNv
bXBhcmVDYXNlSW5zZW5zaXRpdmUpID09IGtDRkNvbXBhcmVFcXVhbFRvIHx8IENGU3RyaW5nQ29t
cGFyZShmdWxsTmFtZS5nZXQoKSwgQ0ZTVFIoIk1vbm90eXBlQ29yc2l2YSIpLCBrQ0ZDb21wYXJl
Q2FzZUluc2Vuc2l0aXZlKSA9PSBrQ0ZDb21wYXJlRXF1YWxUbykpOworI2lmIFBMQVRGT1JNKElP
UykKICAgICBpZiAoZmFtaWx5TmFtZSAmJiBDRlN0cmluZ0NvbXBhcmUoZmFtaWx5TmFtZS5nZXQo
KSwgQ0ZTVFIoIkNvdXJpZXIgTmV3IiksIGtDRkNvbXBhcmVDYXNlSW5zZW5zaXRpdmUpID09IGtD
RkNvbXBhcmVFcXVhbFRvKSB7CiAgICAgICAgIC8vIFNwZWNpYWwgY2FzZSBDb3VyaWVyIE5ldyB0
byBub3QgYmUgdHJlYXRlZCBhcyBmaXhlZCBwaXRjaCwgYXMgdGhpcyB3aWxsIG1ha2UgdXNlIG9m
IGEgaGFja2VkIHNwYWNlIHdpZHRoIHdoaWNoIGlzIHVuZGVzaXJlYWJsZSBmb3IgaVBob25lIChz
ZWUgcmRhcjovLzYyNjk3ODMpLgogICAgICAgICBtX3RyZWF0QXNGaXhlZFBpdGNoID0gZmFsc2U7
CkBAIC01NzEsNDMgKzU2NSwxNCBAQCBGbG9hdFJlY3QgRm9udDo6cGxhdGZvcm1Cb3VuZHNGb3JH
bHlwaChHbHlwaCBnbHlwaCkgY29uc3QKICAgICByZXR1cm4gYm91bmRpbmdCb3g7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgQ0dGb250UmVuZGVyaW5nU3R5bGUgcmVuZGVyaW5nU3R5bGUoY29uc3QgRm9u
dFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhKQotewotI2lmIFVTRShBUFBLSVQpCi0gICAgQ0dG
b250UmVuZGVyaW5nU3R5bGUgc3R5bGUgPSBrQ0dGb250UmVuZGVyaW5nU3R5bGVBbnRpYWxpYXNp
bmcgfCBrQ0dGb250UmVuZGVyaW5nU3R5bGVTdWJwaXhlbFBvc2l0aW9uaW5nIHwga0NHRm9udFJl
bmRlcmluZ1N0eWxlU3VicGl4ZWxRdWFudGl6YXRpb247Ci0gICAgTlNGb250ICpmb250ID0gcGxh
dGZvcm1EYXRhLm5zRm9udCgpOwotICAgIGlmIChmb250KSB7Ci0gICAgICAgIHN3aXRjaCAoW2Zv
bnQgcmVuZGVyaW5nTW9kZV0pIHsKLSAgICAgICAgY2FzZSBOU0ZvbnRJbnRlZ2VyQWR2YW5jZW1l
bnRzUmVuZGVyaW5nTW9kZToKLSAgICAgICAgICAgIHN0eWxlID0gMDsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIE5TRm9udEFudGlhbGlhc2VkSW50ZWdlckFkdmFuY2VtZW50c1Jl
bmRlcmluZ01vZGU6Ci0gICAgICAgICAgICBzdHlsZSA9IGtDR0ZvbnRSZW5kZXJpbmdTdHlsZUFu
dGlhbGlhc2luZzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHN0eWxlOwotCi0jZWxz
ZQotICAgIFVOVVNFRF9QQVJBTShwbGF0Zm9ybURhdGEpOwotICAgIHJldHVybiBrQ0dGb250UmVu
ZGVyaW5nU3R5bGVBbnRpYWxpYXNpbmcgfCBrQ0dGb250UmVuZGVyaW5nU3R5bGVTdWJwaXhlbFBv
c2l0aW9uaW5nIHwga0NHRm9udFJlbmRlcmluZ1N0eWxlU3VicGl4ZWxRdWFudGl6YXRpb24gfCBr
Q0dGb250QW50aWFsaWFzaW5nU3R5bGVVbmZpbHRlcmVkOwotI2VuZGlmCi19Ci0KIHN0YXRpYyBp
bmxpbmUgT3B0aW9uYWw8Q0dTaXplPiBhZHZhbmNlRm9yQ29sb3JCaXRtYXBGb250KGNvbnN0IEZv
bnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSwgR2x5cGggZ2x5cGgpCiB7Ci0jaWYgUExBVEZP
Uk0oTUFDKQotICAgIE5TRm9udCAqZm9udCA9IHBsYXRmb3JtRGF0YS5uc0ZvbnQoKTsKKyAgICBD
VEZvbnRSZWYgZm9udCA9IHBsYXRmb3JtRGF0YS5mb250KCk7CiAgICAgaWYgKCFmb250IHx8ICFw
bGF0Zm9ybURhdGEuaXNDb2xvckJpdG1hcEZvbnQoKSkKICAgICAgICAgcmV0dXJuIE51bGxvcHQ7
Ci0gICAgcmV0dXJuIE5TU2l6ZVRvQ0dTaXplKFtmb250IGFkdmFuY2VtZW50Rm9yR2x5cGg6Z2x5
cGhdKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHBsYXRmb3JtRGF0YSk7Ci0gICAgVU5VU0VE
X1BBUkFNKGdseXBoKTsKLSAgICByZXR1cm4gTnVsbG9wdDsKLSNlbmRpZgorICAgIENHU2l6ZSBh
ZHZhbmNlOworICAgIENURm9udEdldEFkdmFuY2VzRm9yR2x5cGhzKGZvbnQsIGtDVEZvbnRPcmll
bnRhdGlvbkRlZmF1bHQsICZnbHlwaCwgJmFkdmFuY2UsIDEpOworICAgIHJldHVybiBhZHZhbmNl
OwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgY2FuVXNlRmFzdEdseXBoQWR2YW5jZUdldHRlcihj
b25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEsIEdseXBoIGdseXBoLCBDR1NpemUm
IGFkdmFuY2UsIGJvb2wmIHBvcHVsYXRlZEFkdmFuY2UpCkBAIC02MzAsNyArNTk1LDggQEAgZmxv
YXQgRm9udDo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAogICAgIGlm
ICgoaG9yaXpvbnRhbCB8fCBtX2lzQnJva2VuSWRlb2dyYXBoRmFsbGJhY2spICYmIGNhblVzZUZh
c3RHbHlwaEFkdmFuY2VHZXR0ZXIodGhpcy0+cGxhdGZvcm1EYXRhKCksIGdseXBoLCBhZHZhbmNl
LCBwb3B1bGF0ZWRBZHZhbmNlKSkgewogICAgICAgICBmbG9hdCBwb2ludFNpemUgPSBwbGF0Zm9y
bURhdGEoKS5zaXplKCk7CiAgICAgICAgIENHQWZmaW5lVHJhbnNmb3JtIG0gPSBDR0FmZmluZVRy
YW5zZm9ybU1ha2VTY2FsZShwb2ludFNpemUsIHBvaW50U2l6ZSk7Ci0gICAgICAgIGlmICghQ0dG
b250R2V0R2x5cGhBZHZhbmNlc0ZvclN0eWxlKHBsYXRmb3JtRGF0YSgpLmNnRm9udCgpLCAmbSwg
cmVuZGVyaW5nU3R5bGUocGxhdGZvcm1EYXRhKCkpLCAmZ2x5cGgsIDEsICZhZHZhbmNlKSkgewor
ICAgICAgICBDR0ZvbnRSZW5kZXJpbmdTdHlsZSByZW5kZXJpbmdTdHlsZSA9IGtDR0ZvbnRSZW5k
ZXJpbmdTdHlsZUFudGlhbGlhc2luZyB8IGtDR0ZvbnRSZW5kZXJpbmdTdHlsZVN1YnBpeGVsUG9z
aXRpb25pbmcgfCBrQ0dGb250UmVuZGVyaW5nU3R5bGVTdWJwaXhlbFF1YW50aXphdGlvbiB8IGtD
R0ZvbnRBbnRpYWxpYXNpbmdTdHlsZVVuZmlsdGVyZWQ7CisgICAgICAgIGlmICghQ0dGb250R2V0
R2x5cGhBZHZhbmNlc0ZvclN0eWxlKHBsYXRmb3JtRGF0YSgpLmNnRm9udCgpLCAmbSwgcmVuZGVy
aW5nU3R5bGUsICZnbHlwaCwgMSwgJmFkdmFuY2UpKSB7CiAgICAgICAgICAgICBSZXRhaW5QdHI8
Q0ZTdHJpbmdSZWY+IGZ1bGxOYW1lID0gYWRvcHRDRihDR0ZvbnRDb3B5RnVsbE5hbWUocGxhdGZv
cm1EYXRhKCkuY2dGb250KCkpKTsKICAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGNh
Y2hlIGdseXBoIHdpZHRocyBmb3IgJUAgJWYiLCBmdWxsTmFtZS5nZXQoKSwgcG9pbnRTaXplKTsK
ICAgICAgICAgICAgIGFkdmFuY2Uud2lkdGggPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1tIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29h
Lm1tCmluZGV4IGQ4NjE4MzdkZGZkZWQ4YTM2MWExMjc2NDY1NTliNDVjYTJhNDg3MTQuLmJjNjU4
YzZmYWQ5YmZlYmZhZmRiODBiNzQ3OGRiNjc0MDUyYWUxNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9ybURhdGFDb2NvYS5tbQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250UGxhdGZvcm1E
YXRhQ29jb2EubW0KQEAgLTI5LDkgKzI5LDcgQEAKICNpbXBvcnQgIldlYkNvcmVTeXN0ZW1JbnRl
cmZhY2UuaCIKICNpbXBvcnQgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCi0jaWYgIVBMQVRGT1JN
KElPUykKLSNpbXBvcnQgPEFwcEtpdC9OU0ZvbnQuaD4KLSNlbHNlCisjaWYgUExBVEZPUk0oSU9T
KQogI2ltcG9ydCAiQ29yZUdyYXBoaWNzU1BJLmgiCiAjaW1wb3J0IDxDb3JlVGV4dC9Db3JlVGV4
dC5oPgogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9y
dC9Qb3B1cE1lbnVNYWMubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9Qb3B1
cE1lbnVNYWMubW0KaW5kZXggNmQyY2UxNjIxM2U2OGIwNTkyOWIzNWYyMjA1OWU5OTJlZWY2Y2Vi
Ny4uMDYzZThjZWM3YmFmNmY5NTY3YzVkMTIzZDNiZmY0YzY4NWEyNzI1YyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvUG9wdXBNZW51TWFjLm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1BvcHVwTWVudU1hYy5tbQpAQCAtODEsMTIg
KzgxLDEyIEBAIHZvaWQgUG9wdXBNZW51TWFjOjpwb3B1bGF0ZSgpCiAgICAgICAgIFBvcHVwTWVu
dVN0eWxlIHN0eWxlID0gbV9jbGllbnQtPml0ZW1TdHlsZShpKTsKICAgICAgICAgUmV0YWluUHRy
PE5TTXV0YWJsZURpY3Rpb25hcnk+IGF0dHJpYnV0ZXMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlRGlj
dGlvbmFyeSBhbGxvY10gaW5pdF0pOwogICAgICAgICBpZiAoc3R5bGUuZm9udCgpICE9IEZvbnRD
YXNjYWRlKCkpIHsKLSAgICAgICAgICAgIE5TRm9udCAqZm9udCA9IHN0eWxlLmZvbnQoKS5wcmlt
YXJ5Rm9udCgpLmdldE5TRm9udCgpOworICAgICAgICAgICAgUmV0YWluUHRyPENURm9udFJlZj4g
Zm9udCA9IHN0eWxlLmZvbnQoKS5wcmltYXJ5Rm9udCgpLmdldENURm9udCgpOwogICAgICAgICAg
ICAgaWYgKCFmb250KSB7CiAgICAgICAgICAgICAgICAgQ0dGbG9hdCBzaXplID0gc3R5bGUuZm9u
dCgpLnByaW1hcnlGb250KCkucGxhdGZvcm1EYXRhKCkuc2l6ZSgpOwotICAgICAgICAgICAgICAg
IGZvbnQgPSBzdHlsZS5mb250KCkud2VpZ2h0KCkgPCBGb250V2VpZ2h0Qm9sZCA/IFtOU0ZvbnQg
c3lzdGVtRm9udE9mU2l6ZTpzaXplXSA6IFtOU0ZvbnQgYm9sZFN5c3RlbUZvbnRPZlNpemU6c2l6
ZV07CisgICAgICAgICAgICAgICAgZm9udCA9IHN0eWxlLmZvbnQoKS53ZWlnaHQoKSA8IEZvbnRX
ZWlnaHRCb2xkID8gYWRvcHRDRihDVEZvbnRDcmVhdGVVSUZvbnRGb3JMYW5ndWFnZShrQ1RGb250
U3lzdGVtRm9udFR5cGUsIHNpemUsIG51bGxwdHIpKSA6IGFkb3B0Q0YoQ1RGb250Q3JlYXRlVUlG
b250Rm9yTGFuZ3VhZ2Uoa0NURm9udEVtcGhhc2l6ZWRTeXN0ZW1Gb250VHlwZSwgc2l6ZSwgbnVs
bHB0cikpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgW2F0dHJpYnV0ZXMgc2V0T2JqZWN0
OmZvbnQgZm9yS2V5Ok5TRm9udEF0dHJpYnV0ZU5hbWVdOworICAgICAgICAgICAgW2F0dHJpYnV0
ZXMgc2V0T2JqZWN0OmZvbnQuZ2V0KCkgZm9yS2V5Ok5TRm9udEF0dHJpYnV0ZU5hbWVdOwogICAg
ICAgICB9CiAKICAgICAgICAgUmV0YWluUHRyPE5TTXV0YWJsZVBhcmFncmFwaFN0eWxlPiBwYXJh
Z3JhcGhTdHlsZSA9IGFkb3B0TlMoW1tOU1BhcmFncmFwaFN0eWxlIGRlZmF1bHRQYXJhZ3JhcGhT
dHlsZV0gbXV0YWJsZUNvcHldKTsKQEAgLTE1NCwxMyArMTU0LDEzIEBAIHZvaWQgUG9wdXBNZW51
TWFjOjpzaG93KGNvbnN0IEludFJlY3QmIHIsIEZyYW1lVmlldyogdiwgaW50IGluZGV4KQogICAg
IFttX3BvcHVwIHNlbGVjdEl0ZW1BdEluZGV4OmluZGV4XTsKICAgICBbbV9wb3B1cCBzZXRVc2Vy
SW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uOnRleHREaXJlY3Rpb24gPT0gTFRSID8gTlNVc2VySW50
ZXJmYWNlTGF5b3V0RGlyZWN0aW9uTGVmdFRvUmlnaHQgOiBOU1VzZXJJbnRlcmZhY2VMYXlvdXRE
aXJlY3Rpb25SaWdodFRvTGVmdF07CiAKLSAgICBOU01lbnUqIG1lbnUgPSBbbV9wb3B1cCBtZW51
XTsKKyAgICBOU01lbnUgKm1lbnUgPSBbbV9wb3B1cCBtZW51XTsKICNpZiBfX01BQ19PU19YX1ZF
UlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTEwMAogICAgIFttZW51IHNldFVzZXJJbnRlcmZhY2VM
YXlvdXREaXJlY3Rpb246dGV4dERpcmVjdGlvbiA9PSBMVFIgPyBOU1VzZXJJbnRlcmZhY2VMYXlv
dXREaXJlY3Rpb25MZWZ0VG9SaWdodCA6IE5TVXNlckludGVyZmFjZUxheW91dERpcmVjdGlvblJp
Z2h0VG9MZWZ0XTsKICNlbmRpZgogCiAgICAgTlNQb2ludCBsb2NhdGlvbjsKLSAgICBOU0ZvbnQq
IGZvbnQgPSBtX2NsaWVudC0+bWVudVN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250KCkuZ2V0TlNG
b250KCk7CisgICAgQ1RGb250UmVmIGZvbnQgPSBtX2NsaWVudC0+bWVudVN0eWxlKCkuZm9udCgp
LnByaW1hcnlGb250KCkuZ2V0Q1RGb250KCk7CiAKICAgICAvLyBUaGVzZSB2YWx1ZXMgd2VyZSBi
b3Jyb3dlZCBmcm9tIEFwcEtpdCB0byBtYXRjaCB0aGVpciBwbGFjZW1lbnQgb2YgdGhlIG1lbnUu
CiAgICAgY29uc3QgaW50IHBvcE92ZXJIb3Jpem9udGFsQWRqdXN0ID0gLTEwOwpAQCAtMTcyLDgg
KzE3Miw4IEBAIHZvaWQgUG9wdXBNZW51TWFjOjpzaG93KGNvbnN0IEludFJlY3QmIHIsIEZyYW1l
VmlldyogdiwgaW50IGluZGV4KQogICAgICAgICAgICAgdGl0bGVGcmFtZSA9IHI7CiAgICAgICAg
IGZsb2F0IHZlcnRPZmZzZXQgPSByb3VuZGYoKE5TTWF4WShyKSAtIE5TTWF4WSh0aXRsZUZyYW1l
KSkgKyBOU0hlaWdodCh0aXRsZUZyYW1lKSk7CiAgICAgICAgIC8vIEFkanVzdCBmb3IgZm9udHMg
b3RoZXIgdGhhbiB0aGUgc3lzdGVtIGZvbnQuCi0gICAgICAgIE5TRm9udCogZGVmYXVsdEZvbnQg
PSBbTlNGb250IHN5c3RlbUZvbnRPZlNpemU6W2ZvbnQgcG9pbnRTaXplXV07Ci0gICAgICAgIHZl
cnRPZmZzZXQgKz0gW2ZvbnQgZGVzY2VuZGVyXSAtIFtkZWZhdWx0Rm9udCBkZXNjZW5kZXJdOwor
ICAgICAgICBSZXRhaW5QdHI8Q1RGb250UmVmPiBkZWZhdWx0Rm9udCA9IGFkb3B0Q0YoQ1RGb250
Q3JlYXRlVUlGb250Rm9yTGFuZ3VhZ2Uoa0NURm9udFN5c3RlbUZvbnRUeXBlLCBDVEZvbnRHZXRT
aXplKGZvbnQpLCBuaWwpKTsKKyAgICAgICAgdmVydE9mZnNldCArPSBDVEZvbnRHZXREZXNjZW50
KGZvbnQpIC0gQ1RGb250R2V0RGVzY2VudChkZWZhdWx0Rm9udC5nZXQoKSk7CiAgICAgICAgIHZl
cnRPZmZzZXQgPSBmbWluZihOU0hlaWdodChyKSwgdmVydE9mZnNldCk7CiAKICAgICAgICAgZmxv
YXQgaG9yaXpvbnRhbE9mZnNldCA9IHRleHREaXJlY3Rpb24gPT0gTFRSID8gcG9wT3Zlckhvcml6
b250YWxBZGp1c3QgOiAwOwpAQCAtMjE1LDcgKzIxNSw3IEBAIHZvaWQgUG9wdXBNZW51TWFjOjpz
aG93KGNvbnN0IEludFJlY3QmIHIsIEZyYW1lVmlldyogdiwgaW50IGluZGV4KQogI3ByYWdtYSBj
bGFuZyBkaWFnbm9zdGljIHBvcAogICAgIH0KIAotICAgIFdLUG9wdXBNZW51KG1lbnUsIGxvY2F0
aW9uLCByb3VuZGYoTlNXaWR0aChyKSksIGR1bW15Vmlldy5nZXQoKSwgaW5kZXgsIGZvbnQsIGNv
bnRyb2xTaXplLCAhbV9jbGllbnQtPm1lbnVTdHlsZSgpLmhhc0RlZmF1bHRBcHBlYXJhbmNlKCkp
OworICAgIFdLUG9wdXBNZW51KG1lbnUsIGxvY2F0aW9uLCByb3VuZGYoTlNXaWR0aChyKSksIGR1
bW15Vmlldy5nZXQoKSwgaW5kZXgsIHRvTlNGb250KGZvbnQpLCBjb250cm9sU2l6ZSwgIW1fY2xp
ZW50LT5tZW51U3R5bGUoKS5oYXNEZWZhdWx0QXBwZWFyYW5jZSgpKTsKIAogICAgIFttX3BvcHVw
IGRpc21pc3NQb3BVcF07CiAgICAgW2R1bW15VmlldyByZW1vdmVGcm9tU3VwZXJ2aWV3XTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0gYi9Tb3Vy
Y2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCmluZGV4IDI4NjgzMmNmYWIyYmIx
N2U1MjdkNWU5NjEwMzUwNzM4Y2M4MDNmMjMuLmViNWE5NmFiNjk4MzRiY2UxMThiMWUxODI4NmYz
NmYwYWZmMmI3NWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRN
TFZpZXcubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQpA
QCAtNTU5OSwxNCArNTU5OSwxNCBAQCAtIChOU0ZvbnQgKilfb3JpZ2luYWxGb250QgogICAgIHJl
dHVybiBbW05TRm9udE1hbmFnZXIgc2hhcmVkRm9udE1hbmFnZXJdIGZvbnRXaXRoRmFtaWx5OkAi
VGltZXMiIHRyYWl0czpOU0ZvbnRJdGFsaWNUcmFpdCB3ZWlnaHQ6U1RBTkRBUkRfQk9MRF9XRUlH
SFQgc2l6ZToxMi4wZl07CiB9CiAKLXN0YXRpYyBOU1N0cmluZyAqZm9udE5hbWVGb3JEZXNjcmlw
dGlvbihOU1N0cmluZyAqZmFtaWx5TmFtZSwgQk9PTCBpdGFsaWMsIEJPT0wgYm9sZCkKK3N0YXRp
YyBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGZvbnROYW1lRm9yRGVzY3JpcHRpb24oTlNTdHJpbmcg
KmZhbWlseU5hbWUsIEJPT0wgaXRhbGljLCBCT09MIGJvbGQpCiB7CiAgICAgLy8gRmluZCB0aGUg
Zm9udCB0aGUgc2FtZSB3YXkgdGhlIHJlbmRlcmluZyBjb2RlIHdvdWxkIGxhdGVyIGlmIGl0IGVu
Y291bnRlcmVkIHRoaXMgQ1NTLgogICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb247
CiAgICAgZm9udERlc2NyaXB0aW9uLnNldElzSXRhbGljKGl0YWxpYyk7CiAgICAgZm9udERlc2Ny
aXB0aW9uLnNldFdlaWdodChib2xkID8gRm9udFdlaWdodDkwMCA6IEZvbnRXZWlnaHQ1MDApOwog
ICAgIFJlZlB0cjxGb250PiBmb250ID0gRm9udENhY2hlOjpzaW5nbGV0b24oKS5mb250Rm9yRmFt
aWx5KGZvbnREZXNjcmlwdGlvbiwgZmFtaWx5TmFtZSk7Ci0gICAgcmV0dXJuIFtmb250LT5wbGF0
Zm9ybURhdGEoKS5uc0ZvbnQoKSBmb250TmFtZV07CisgICAgcmV0dXJuIGFkb3B0Q0YoQ1RGb250
Q29weVBvc3RTY3JpcHROYW1lKGZvbnQtPmdldENURm9udCgpKSk7CiB9CiAKIC0gKHZvaWQpX2Fk
ZFRvU3R5bGU6KERPTUNTU1N0eWxlRGVjbGFyYXRpb24gKilzdHlsZSBmb250QTooTlNGb250ICop
YSBmb250QjooTlNGb250ICopYgpAQCAtNTY0NSw4ICs1NjQ1LDEwIEBAIC0gKHZvaWQpX2FkZFRv
U3R5bGU6KERPTUNTU1N0eWxlRGVjbGFyYXRpb24gKilzdHlsZSBmb250QTooTlNGb250ICopYSBm
b250QjooTlNGCiAgICAgICAgIC8vIHRoZSBQb3N0c2NyaXB0IG5hbWUuCiAgICAgICAgIC8vIElm
IHdlIGRvbid0IGZpbmQgYSBmb250IHdpdGggdGhlIHNhbWUgUG9zdHNjcmlwdCBuYW1lLCB0aGVu
IHdlJ2xsIGhhdmUgdG8gdXNlIHRoZQogICAgICAgICAvLyBQb3N0c2NyaXB0IG5hbWUgdG8gbWFr
ZSB0aGUgQ1NTIHNwZWNpZmljIGVub3VnaC4KLSAgICAgICAgaWYgKCFbZm9udE5hbWVGb3JEZXNj
cmlwdGlvbihhRmFtaWx5TmFtZSwgYUlzSXRhbGljLCBhSXNCb2xkKSBpc0VxdWFsVG9TdHJpbmc6
W2EgZm9udE5hbWVdXSkKLSAgICAgICAgICAgIGZhbWlseU5hbWVGb3JDU1MgPSBbYSBmb250TmFt
ZV07CisgICAgICAgIGF1dG8gZm9udE5hbWUgPSBmb250TmFtZUZvckRlc2NyaXB0aW9uKGFGYW1p
bHlOYW1lLCBhSXNJdGFsaWMsIGFJc0JvbGQpOworICAgICAgICBhdXRvIGFOYW1lID0gW2EgZm9u
dE5hbWVdOworICAgICAgICBpZiAoIWZvbnROYW1lIHx8ICFhTmFtZSB8fCAhQ0ZFcXVhbChmb250
TmFtZS5nZXQoKSwgc3RhdGljX2Nhc3Q8Q0ZTdHJpbmdSZWY+KFthIGZvbnROYW1lXSkpKQorICAg
ICAgICAgICAgZmFtaWx5TmFtZUZvckNTUyA9IGFOYW1lOwogCiAgICAgICAgIC8vIEZJWE1FOiBO
ZWVkIG1vcmUgc29waGlzdGljYXRlZCBlc2NhcGluZyBjb2RlIGlmIHdlIHdhbnQgdG8gaGFuZGxl
IGZhbWlseSBuYW1lcwogICAgICAgICAvLyB3aXRoIGNoYXJhY3RlcnMgbGlrZSBzaW5nbGUgcXVv
dGUgb3IgYmFja3NsYXNoIGluIHRoZWlyIG5hbWVzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViUG9wdXBNZW51TWFjLm1tIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViUG9wdXBNZW51TWFj
Lm1tCmluZGV4IGY3MjdjNjg1ZDAxMzEzZjdkYjFhZmUxZjE5ZDJkMmEyMzNiMTgxN2UuLjFkNGFm
Y2ZlYmUwZTgxNmFhZTNlOGQ5NDg0M2YwNDJjZWQxZTcwODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYlBvcHVwTWVudU1hYy5tbQor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJQb3B1
cE1lbnVNYWMubW0KQEAgLTM5LDE1ICszOSwxOSBAQCB2b2lkIFdlYlBvcHVwTWVudTo6c2V0VXBQ
bGF0Zm9ybURhdGEoY29uc3QgSW50UmVjdCYsIFBsYXRmb3JtUG9wdXBNZW51RGF0YSYgZGF0YQog
ewogI2lmIFVTRShBUFBLSVQpCiAgICAgLy8gRklYTUU6IGZvbnQgd2lsbCBiZSBuaWwgaGVyZSBm
b3IgY3VzdG9tIGZvbnRzLCB3ZSBzaG91bGQgZml4IHRoYXQuCi0gICAgTlNGb250ICpmb250ID0g
bV9wb3B1cENsaWVudC0+bWVudVN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250KCkuZ2V0TlNGb250
KCk7CisgICAgQ1RGb250UmVmIGZvbnQgPSBtX3BvcHVwQ2xpZW50LT5tZW51U3R5bGUoKS5mb250
KCkucHJpbWFyeUZvbnQoKS5nZXRDVEZvbnQoKTsKICAgICBpZiAoIWZvbnQpCiAgICAgICAgIHJl
dHVybjsKLSAgICAKLSAgICBDRkRpY3Rpb25hcnlSZWYgZm9udERlc2NyaXB0b3JBdHRyaWJ1dGVz
ID0gKENGRGljdGlvbmFyeVJlZilbW2ZvbnQgZm9udERlc2NyaXB0b3JdIGZvbnRBdHRyaWJ1dGVz
XTsKLSAgICBpZiAoIWZvbnREZXNjcmlwdG9yQXR0cmlidXRlcykKKworICAgIFJldGFpblB0cjxD
VEZvbnREZXNjcmlwdG9yUmVmPiBmb250RGVzY3JpcHRvciA9IGFkb3B0Q0YoQ1RGb250Q29weUZv
bnREZXNjcmlwdG9yKGZvbnQpKTsKKyAgICBpZiAoIWZvbnREZXNjcmlwdG9yKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBhdHRyaWJ1dGVzID0gYWRv
cHRDRihDVEZvbnREZXNjcmlwdG9yQ29weUF0dHJpYnV0ZXMoZm9udERlc2NyaXB0b3IuZ2V0KCkp
KTsKKyAgICBpZiAoIWF0dHJpYnV0ZXMpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBkYXRh
LmZvbnRJbmZvLmZvbnRBdHRyaWJ1dGVEaWN0aW9uYXJ5ID0gZm9udERlc2NyaXB0b3JBdHRyaWJ1
dGVzOworICAgIGRhdGEuZm9udEluZm8uZm9udEF0dHJpYnV0ZURpY3Rpb25hcnkgPSBhdHRyaWJ1
dGVzOwogICAgIGRhdGEuc2hvdWxkUG9wT3ZlciA9IG1fcG9wdXBDbGllbnQtPnNob3VsZFBvcE92
ZXIoKTsKICAgICBkYXRhLmhpZGVBcnJvd3MgPSAhbV9wb3B1cENsaWVudC0+bWVudVN0eWxlKCku
aGFzRGVmYXVsdEFwcGVhcmFuY2UoKTsKICAgICBkYXRhLm1lbnVTaXplID0gbV9wb3B1cENsaWVu
dC0+bWVudVN0eWxlKCkubWVudVNpemUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbSBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQppbmRleCAyOGFlNmU5YTBjM2NiZjJkY2Mw
MDQ1NGJkYzM0YTc1NWU3ZjZmODgzLi43MjA0MGU0OTBlMTBhZjM5Mzc3YjFhNTk5MTA1ZWNkMmRh
ODdmNTJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFj
L1dlYlBhZ2VNYWMubW0KKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21h
Yy9XZWJQYWdlTWFjLm1tCkBAIC0zNjQsMTAgKzM2NCw5IEBAIHZvaWQgV2ViUGFnZTo6Zm9udEF0
U2VsZWN0aW9uKHVpbnQ2NF90IGNhbGxiYWNrSUQpCiAgICAgCiAgICAgaWYgKCFmcmFtZS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKS5pc05vbmUoKSkgewogICAgICAgICBjb25zdCBGb250KiBmb250
ID0gZnJhbWUuZWRpdG9yKCkuZm9udEZvclNlbGVjdGlvbihzZWxlY3Rpb25IYXNNdWx0aXBsZUZv
bnRzKTsKLSAgICAgICAgTlNGb250ICpuc0ZvbnQgPSBmb250ID8gZm9udC0+Z2V0TlNGb250KCkg
OiBuaWw7Ci0gICAgICAgIGlmIChuc0ZvbnQpIHsKLSAgICAgICAgICAgIGZvbnROYW1lID0gbnNG
b250LmZvbnROYW1lOwotICAgICAgICAgICAgZm9udFNpemUgPSBuc0ZvbnQucG9pbnRTaXplOwor
ICAgICAgICBpZiAoQ1RGb250UmVmIGN0Rm9udCA9IGZvbnQgPyBmb250LT5nZXRDVEZvbnQoKSA6
IG51bGxwdHIpIHsKKyAgICAgICAgICAgIGZvbnROYW1lID0gYWRvcHRDRihDVEZvbnRDb3B5UG9z
dFNjcmlwdE5hbWUoY3RGb250KSkuZ2V0KCk7CisgICAgICAgICAgICBmb250U2l6ZSA9IENURm9u
dEdldFNpemUoY3RGb250KTsKICAgICAgICAgfQogICAgIH0KICAgICBzZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlUHJveHk6OkZvbnRBdFNlbGVjdGlvbkNhbGxiYWNrKGZvbnROYW1lLCBmb250U2l6ZSwg
c2VsZWN0aW9uSGFzTXVsdGlwbGVGb250cywgY2FsbGJhY2tJRCkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>278371</attachid>
            <date>2016-05-08 13:42:19 -0700</date>
            <delta_ts>2016-05-08 14:36:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-157464-20160508134304.patch</filename>
            <type>text/plain</type>
            <size>30882</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAwNTU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzUwZTg5MjgxN2Y5MWYy
MzU5MWM4NDExMGM4NzViYTMyNTE4NTRkYy4uNWIxMDE0MjAzMDZmYjc5YmI0Yjg4ZmIyODhjMmU0
MGRjOWMxMzI5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDE2LTA1LTA4ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW09TIFhdIE1p
Z3JhdGUgb3VyIEZvbnQgY2xhc3NlcyBlbnRpcmVseSBvZmYgb2YgTlNGb250CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTc0NjQKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCZWNhdXNlIE5TRm9udCBhbmQg
Q1RGb250IGFyZSB0b2xsLWZyZWUtYnJpZGdlZCwgd2UgZG9uJ3QgbmVlZCBOU0ZvbnQgYXQgYWxs
IGFueXdoZXJlLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBiZWNhdXNlIHRoZXJlIGlzIG5vIGJl
aGF2aW9yIGNoYW5nZS4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tOgorICAgICAgICAoYWNjZXNzaWJpbGl0eVNlYXJjaENy
aXRlcmlhRm9yU2VhcmNoUHJlZGljYXRlUGFyYW1ldGVyaXplZEF0dHJpYnV0ZSk6CisgICAgICAg
ICh0ZXh0TWFya2VyUmFuZ2VGcm9tUmFuZ2UpOgorICAgICAgICAodmlzaWJsZVBvc2l0aW9uRm9y
U3RhcnRPZlRleHRNYXJrZXJSYW5nZSk6CisgICAgICAgICh2aXNpYmxlUG9zaXRpb25Gb3JFbmRP
ZlRleHRNYXJrZXJSYW5nZSk6CisgICAgICAgIChBWEF0dHJpYnV0ZWRTdHJpbmdSYW5nZUlzVmFs
aWQpOgorICAgICAgICAoQVhBdHRyaWJ1dGVTdHJpbmdTZXRGb250KToKKyAgICAgICAgKENyZWF0
ZUNHQ29sb3JJZkRpZmZlcmVudCk6CisgICAgICAgIChBWEF0dHJpYnV0ZVN0cmluZ1NldFN0eWxl
KToKKyAgICAgICAgKHRleHRNYXJrZXJSYW5nZUZyb21WaXNpYmxlUG9zaXRpb25zKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9vYmpjL0RPTS5tbToKKyAgICAgICAgKC1bRE9NRWxlbWVudCBfZm9udF0p
OgorICAgICAgICAqIGJpbmRpbmdzL29iamMvRE9NUHJpdmF0ZS5oOgorICAgICAgICAqIGVkaXRp
bmcvY29jb2EvSFRNTENvbnZlcnRlci5tbToKKyAgICAgICAgKF9mb250KToKKyAgICAgICAgKFdl
YkNvcmU6OmVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlKToKKyAgICAgICAgKiBlZGl0
aW5nL21hYy9FZGl0b3JNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmZvbnRBdHRy
aWJ1dGVzRm9yU2VsZWN0aW9uU3RhcnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zv
bnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmdldENURm9udCk6CisgICAgICAgIChXZWJD
b3JlOjpGb250OjpnZXROU0ZvbnQpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRQbGF0Zm9ybURhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURh
dGE6Om5zRm9udCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
Rm9udENvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZGV0ZXJtaW5lUGl0Y2gpOgor
ICAgICAgICAoV2ViQ29yZTo6YWR2YW5jZUZvckNvbG9yQml0bWFwRm9udCk6CisgICAgICAgIChX
ZWJDb3JlOjpGb250OjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgpOgorICAgICAgICAoV2ViQ29yZTo6
cmVuZGVyaW5nU3R5bGUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nv
Y29hL0ZvbnRQbGF0Zm9ybURhdGFDb2NvYS5tbToKKwogMjAxNi0wNS0wOCAgRGF2aWQgS2lsemVy
ICA8ZGRraWx6ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFRocmVhZFNhbml0aXplcjogRGF0YSBy
YWNlIGFuZCB0aHJlYWQgbGVhayBpbiBXZWJDb3JlOjpTY3JvbGxpbmdUaHJlYWQ6OmNyZWF0ZVRo
cmVhZElmTmVlZGVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKaW5kZXggZDIzNTQxNDE3ODM2OTFhYjU2NmY2OWE4
OTk2NzgyOGY4YjAzM2Q3Ni4uZmVjNTkzY2Y0ZjI5M2JmZjI0NGMxODZlZjI2NzAyNmZiODE2Yzk4
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJLaXQvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDE2LTA1LTA4ICBNeWxlcyBD
LiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW09TIFhdIE1pZ3Jh
dGUgb3VyIEZvbnQgY2xhc3NlcyBlbnRpcmVseSBvZmYgb2YgTlNGb250CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTc0NjQKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1BvcHVw
TWVudU1hYy5tbToKKyAgICAgICAgKFBvcHVwTWVudU1hYzo6cG9wdWxhdGUpOgorICAgICAgICAo
UG9wdXBNZW51TWFjOjpzaG93KToKKyAgICAgICAgKiBXZWJWaWV3L1dlYkhUTUxWaWV3Lm1tOgor
ICAgICAgICAoZm9udE5hbWVGb3JEZXNjcmlwdGlvbik6CisgICAgICAgICgtW1dlYkhUTUxWaWV3
IF9hZGRUb1N0eWxlOmZvbnRBOmZvbnRCOl0pOgorCiAyMDE2LTA1LTA2ICBKb3NlcGggUGVjb3Jh
cm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CiAKICAgICAgICAgUmVuYW1lIEhpdFRlc3RSZXF1ZXN0
IERpc2FsbG93U2hhZG93Q29udGVudCB0byBEaXNhbGxvd1VzZXJBZ2VudFNoYWRvd0NvbnRlbnQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA3OTA5YjZiN2E1NWRkNDJlM2IzNTc3ZWFkZTI1MDY2NDdjM2FkYmQzLi5k
YmIzNWY2NmEyN2E1NjI5ZDgxODRiMzgyMzE4MzFhYjU4OTUwYjllIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTUgQEAKKzIwMTYtMDUtMDggIE15bGVzIEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFw
cGxlLmNvbT4KKworICAgICAgICBbT1MgWF0gTWlncmF0ZSBvdXIgRm9udCBjbGFzc2VzIGVudGly
ZWx5IG9mZiBvZiBOU0ZvbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE1NzQ2NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViUG9wdXBNZW51TWFj
Lm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnU6OnNldFVwUGxhdGZvcm1EYXRhKToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW06CisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2U6OmZvbnRBdFNlbGVjdGlvbik6CisKIDIwMTYtMDUtMDYgIEpvc2Vw
aCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW5hbWUgSGl0VGVz
dFJlcXVlc3QgRGlzYWxsb3dTaGFkb3dDb250ZW50IHRvIERpc2FsbG93VXNlckFnZW50U2hhZG93
Q29udGVudApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2Vi
QWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQppbmRleCA5MTBh
YzM2OTQ2MzU1ZTllN2FmNGU3OWEwN2JjYTk1NDIzZGNmMjk0Li5jMDI2ZTRiODJiMjA0OWUxYTVi
ZjMyZTZjYWZjOGY2M2Q4Y2FmYzVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ck1hYy5tbQpAQCAtNzI0LDcgKzcyNCw3IEBAIHN0YXRpYyBBY2Nlc3NpYmlsaXR5U2VhcmNoQ3Jp
dGVyaWEgYWNjZXNzaWJpbGl0eVNlYXJjaENyaXRlcmlhRm9yU2VhcmNoUHJlZGljYXRlCiAgICAg
aWYgKFtzZWFyY2hUZXh0UGFyYW1ldGVyIGlzS2luZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNzXV0p
CiAgICAgICAgIHNlYXJjaFRleHQgPSBzZWFyY2hUZXh0UGFyYW1ldGVyOwogICAgIAotICAgIEFj
Y2Vzc2liaWxpdHlPYmplY3QgKnN0YXJ0RWxlbWVudCA9IG51bGxwdHI7CisgICAgQWNjZXNzaWJp
bGl0eU9iamVjdCogc3RhcnRFbGVtZW50ID0gbnVsbHB0cjsKICAgICBpZiAoW3N0YXJ0RWxlbWVu
dFBhcmFtZXRlciBpc0tpbmRPZkNsYXNzOltXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBj
bGFzc11dKQogICAgICAgICBzdGFydEVsZW1lbnQgPSBbc3RhcnRFbGVtZW50UGFyYW1ldGVyIGFj
Y2Vzc2liaWxpdHlPYmplY3RdOwogICAgIApAQCAtODMxLDcgKzgzMSw3IEBAIC0gKGlkKXRleHRN
YXJrZXJSYW5nZUZyb21SYW5nZTooY29uc3QgUmVmUHRyPFJhbmdlPilyYW5nZQogICAgIHJldHVy
biB0ZXh0TWFya2VyUmFuZ2VGcm9tUmFuZ2UobV9vYmplY3QtPmF4T2JqZWN0Q2FjaGUoKSwgcmFu
Z2UpOwogfQogCi1zdGF0aWMgaWQgdGV4dE1hcmtlclJhbmdlRnJvbVJhbmdlKEFYT2JqZWN0Q2Fj
aGUgKmNhY2hlLCBjb25zdCBSZWZQdHI8UmFuZ2U+IHJhbmdlKQorc3RhdGljIGlkIHRleHRNYXJr
ZXJSYW5nZUZyb21SYW5nZShBWE9iamVjdENhY2hlKiBjYWNoZSwgY29uc3QgUmVmUHRyPFJhbmdl
PiByYW5nZSkKIHsKICAgICBpZCBzdGFydFRleHRNYXJrZXIgPSBzdGFydE9yRW5kVGV4dG1hcmtl
ckZvclJhbmdlKGNhY2hlLCByYW5nZSwgdHJ1ZSk7CiAgICAgaWQgZW5kVGV4dE1hcmtlciA9IHN0
YXJ0T3JFbmRUZXh0bWFya2VyRm9yUmFuZ2UoY2FjaGUsIHJhbmdlLCBmYWxzZSk7CkBAIC05ODAs
MTIgKzk4MCwxMiBAQCAtIChWaXNpYmxlUG9zaXRpb24pdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1h
cmtlcjooaWQpdGV4dE1hcmtlcgogICAgIHJldHVybiB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFy
a2VyKG1fb2JqZWN0LT5heE9iamVjdENhY2hlKCksIHRleHRNYXJrZXIpOwogfQogCi1zdGF0aWMg
VmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbkZvclN0YXJ0T2ZUZXh0TWFya2VyUmFuZ2Uo
QVhPYmplY3RDYWNoZSAqY2FjaGUsIGlkIHRleHRNYXJrZXJSYW5nZSkKK3N0YXRpYyBWaXNpYmxl
UG9zaXRpb24gdmlzaWJsZVBvc2l0aW9uRm9yU3RhcnRPZlRleHRNYXJrZXJSYW5nZShBWE9iamVj
dENhY2hlKiBjYWNoZSwgaWQgdGV4dE1hcmtlclJhbmdlKQogewogICAgIHJldHVybiB2aXNpYmxl
UG9zaXRpb25Gb3JUZXh0TWFya2VyKGNhY2hlLCBBWFRleHRNYXJrZXJSYW5nZVN0YXJ0KHRleHRN
YXJrZXJSYW5nZSkpOwogfQogCi1zdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlv
bkZvckVuZE9mVGV4dE1hcmtlclJhbmdlKEFYT2JqZWN0Q2FjaGUgKmNhY2hlLCBpZCB0ZXh0TWFy
a2VyUmFuZ2UpCitzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbkZvckVuZE9m
VGV4dE1hcmtlclJhbmdlKEFYT2JqZWN0Q2FjaGUqIGNhY2hlLCBpZCB0ZXh0TWFya2VyUmFuZ2Up
CiB7CiAgICAgcmV0dXJuIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXIoY2FjaGUsIEFYVGV4
dE1hcmtlclJhbmdlRW5kKHRleHRNYXJrZXJSYW5nZSkpOwogfQpAQCAtMTAwMCwyMyArMTAwMCwy
MyBAQCBzdGF0aWMgaWQgdGV4dE1hcmtlclJhbmdlRnJvbU1hcmtlcnMoaWQgdGV4dE1hcmtlcjEs
IGlkIHRleHRNYXJrZXIyKQogCiAvLyBXaGVuIG1vZGlmeWluZyBhdHRyaWJ1dGVkIHN0cmluZ3Ms
IHRoZSByYW5nZSBjYW4gY29tZSBmcm9tIGEgc291cmNlIHdoaWNoIG1heSBwcm92aWRlIGZhdWx0
eSBpbmZvcm1hdGlvbiAoZS5nLiB0aGUgc3BlbGwgY2hlY2tlcikuCiAvLyBUbyBwcm90ZWN0IGFn
YWluc3Qgc3VjaCBjYXNlcyB0aGUgcmFuZ2Ugc2hvdWxkIGJlIHZhbGlkYXRlZCBiZWZvcmUgYWRk
aW5nIG9yIHJlbW92aW5nIGF0dHJpYnV0ZXMuCi1zdGF0aWMgQk9PTCBBWEF0dHJpYnV0ZWRTdHJp
bmdSYW5nZUlzVmFsaWQoTlNBdHRyaWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5nLCBOU1JhbmdlIHJh
bmdlKQorc3RhdGljIEJPT0wgQVhBdHRyaWJ1dGVkU3RyaW5nUmFuZ2VJc1ZhbGlkKE5TQXR0cmli
dXRlZFN0cmluZyAqYXR0clN0cmluZywgTlNSYW5nZSByYW5nZSkKIHsKICAgICByZXR1cm4gKHJh
bmdlLmxvY2F0aW9uIDwgW2F0dHJTdHJpbmcgbGVuZ3RoXSAmJiBOU01heFJhbmdlKHJhbmdlKSA8
PSBbYXR0clN0cmluZyBsZW5ndGhdKTsKIH0KIAotc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVTdHJp
bmdTZXRGb250KE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcqIGF0dHJTdHJpbmcsIE5TU3RyaW5n
KiBhdHRyaWJ1dGUsIE5TRm9udCogZm9udCwgTlNSYW5nZSByYW5nZSkKK3N0YXRpYyB2b2lkIEFY
QXR0cmlidXRlU3RyaW5nU2V0Rm9udChOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nICphdHRyU3Ry
aW5nLCBOU1N0cmluZyAqYXR0cmlidXRlLCBDVEZvbnRSZWYgZm9udCwgTlNSYW5nZSByYW5nZSkK
IHsKICAgICBpZiAoIUFYQXR0cmlidXRlZFN0cmluZ1JhbmdlSXNWYWxpZChhdHRyU3RyaW5nLCBy
YW5nZSkpCiAgICAgICAgIHJldHVybjsKLSAgICAKKwogICAgIGlmIChmb250KSB7Ci0gICAgICAg
IE5TRGljdGlvbmFyeSogZGljdCA9IFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3Rz
QW5kS2V5czoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb250IGZvbnROYW1lXSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBOU0FjY2Vzc2liaWxpdHlGb250TmFtZUtleSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb250IGZhbWlseU5hbWVdICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLCBOU0FjY2Vzc2liaWxpdHlGb250RmFtaWx5S2V5LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgW2ZvbnQgZGlzcGxheU5hbWVdICAgICAgICAgICAgICAg
ICAgICAgICAgICAsIE5TQWNjZXNzaWJpbGl0eVZpc2libGVOYW1lS2V5LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDpbZm9udCBwb2ludFNp
emVdXSAsIE5TQWNjZXNzaWJpbGl0eUZvbnRTaXplS2V5LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbmlsXTsKKyAgICAgICAgTlNEaWN0aW9uYXJ5ICpkaWN0ID0gW05TRGljdGlvbmFy
eSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOgorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
TlNTdHJpbmcgKj4oYWRvcHRDRihDVEZvbnRDb3B5UG9zdFNjcmlwdE5hbWUoZm9udCkpLmdldCgp
KSAsIE5TQWNjZXNzaWJpbGl0eUZvbnROYW1lS2V5LAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
TlNTdHJpbmcgKj4oYWRvcHRDRihDVEZvbnRDb3B5RmFtaWx5TmFtZShmb250KSkuZ2V0KCkpICAg
ICAsIE5TQWNjZXNzaWJpbGl0eUZvbnRGYW1pbHlLZXksCisgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxOU1N0cmluZyAqPihhZG9wdENGKENURm9udENvcHlEaXNwbGF5TmFtZShmb250KSkuZ2V0KCkp
ICAgICwgTlNBY2Nlc3NpYmlsaXR5VmlzaWJsZU5hbWVLZXksCisgICAgICAgICAgICBbTlNOdW1i
ZXIgbnVtYmVyV2l0aEZsb2F0OkNURm9udEdldFNpemUoZm9udCldICAgICAgICAgICAgICAgICAg
ICAgICAgICwgTlNBY2Nlc3NpYmlsaXR5Rm9udFNpemVLZXksCisgICAgICAgICAgICBuaWxdOwog
ICAgICAgICAKICAgICAgICAgW2F0dHJTdHJpbmcgYWRkQXR0cmlidXRlOmF0dHJpYnV0ZSB2YWx1
ZTpkaWN0IHJhbmdlOnJhbmdlXTsKICAgICB9IGVsc2UKQEAgLTEwMjQsMTAgKzEwMjQsMTAgQEAg
c3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVTdHJpbmdTZXRGb250KE5TTXV0YWJsZUF0dHJpYnV0ZWRT
dHJpbmcqIGF0dHJTdHJpbmcsIE5TU3QKICAgICAKIH0KIAotc3RhdGljIENHQ29sb3JSZWYgQ3Jl
YXRlQ0dDb2xvcklmRGlmZmVyZW50KE5TQ29sb3IqIG5zQ29sb3IsIENHQ29sb3JSZWYgZXhpc3Rp
bmdDb2xvcikKK3N0YXRpYyBDR0NvbG9yUmVmIENyZWF0ZUNHQ29sb3JJZkRpZmZlcmVudChOU0Nv
bG9yICpuc0NvbG9yLCBDR0NvbG9yUmVmIGV4aXN0aW5nQ29sb3IpCiB7CiAgICAgLy8gZ2V0IGNv
bG9yIGluZm9ybWF0aW9uIGFzc3VtaW5nIE5TRGV2aWNlUkdCQ29sb3JTcGFjZQotICAgIE5TQ29s
b3IqIHJnYkNvbG9yID0gW25zQ29sb3IgY29sb3JVc2luZ0NvbG9yU3BhY2VOYW1lOk5TRGV2aWNl
UkdCQ29sb3JTcGFjZV07CisgICAgTlNDb2xvciAqcmdiQ29sb3IgPSBbbnNDb2xvciBjb2xvclVz
aW5nQ29sb3JTcGFjZU5hbWU6TlNEZXZpY2VSR0JDb2xvclNwYWNlXTsKICAgICBpZiAocmdiQ29s
b3IgPT0gbmlsKQogICAgICAgICByZ2JDb2xvciA9IFtOU0NvbG9yIGJsYWNrQ29sb3JdOwogICAg
IENHRmxvYXQgY29tcG9uZW50c1s0XTsKQEAgLTEwNzksNyArMTA3OSw3IEBAIHN0YXRpYyB2b2lk
IEFYQXR0cmlidXRlU3RyaW5nU2V0U3R5bGUoTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyogYXR0
clN0cmluZywgUmVuCiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlID0gcmVuZGVyZXItPnN0
eWxlKCk7CiAgICAgCiAgICAgLy8gc2V0IGJhc2ljIGZvbnQgaW5mbwotICAgIEFYQXR0cmlidXRl
U3RyaW5nU2V0Rm9udChhdHRyU3RyaW5nLCBOU0FjY2Vzc2liaWxpdHlGb250VGV4dEF0dHJpYnV0
ZSwgc3R5bGUuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpLmdldE5TRm9udCgpLCByYW5nZSk7
CisgICAgQVhBdHRyaWJ1dGVTdHJpbmdTZXRGb250KGF0dHJTdHJpbmcsIE5TQWNjZXNzaWJpbGl0
eUZvbnRUZXh0QXR0cmlidXRlLCBzdHlsZS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCkuZ2V0
Q1RGb250KCksIHJhbmdlKTsKICAgICAKICAgICAvLyBzZXQgYmFzaWMgY29sb3JzCiAgICAgQVhB
dHRyaWJ1dGVTdHJpbmdTZXRDb2xvcihhdHRyU3RyaW5nLCBOU0FjY2Vzc2liaWxpdHlGb3JlZ3Jv
dW5kQ29sb3JUZXh0QXR0cmlidXRlLCBuc0NvbG9yKHN0eWxlLnZpc2l0ZWREZXBlbmRlbnRDb2xv
cihDU1NQcm9wZXJ0eUNvbG9yKSksIHJhbmdlKTsKQEAgLTEzNDgsNyArMTM0OCw3IEBAIC0gKE5T
QXR0cmlidXRlZFN0cmluZyopZG9BWEF0dHJpYnV0ZWRTdHJpbmdGb3JUZXh0TWFya2VyUmFuZ2U6
KGlkKXRleHRNYXJrZXJSYW5nCiAgICAgcmV0dXJuIFthdHRyU3RyaW5nIGF1dG9yZWxlYXNlXTsK
IH0KIAotc3RhdGljIGlkIHRleHRNYXJrZXJSYW5nZUZyb21WaXNpYmxlUG9zaXRpb25zKEFYT2Jq
ZWN0Q2FjaGUgKmNhY2hlLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIHN0YXJ0UG9zaXRpb24sIGNv
bnN0IFZpc2libGVQb3NpdGlvbiYgZW5kUG9zaXRpb24pCitzdGF0aWMgaWQgdGV4dE1hcmtlclJh
bmdlRnJvbVZpc2libGVQb3NpdGlvbnMoQVhPYmplY3RDYWNoZSogY2FjaGUsIGNvbnN0IFZpc2li
bGVQb3NpdGlvbiYgc3RhcnRQb3NpdGlvbiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBlbmRQb3Np
dGlvbikKIHsKICAgICBpZCBzdGFydFRleHRNYXJrZXIgPSB0ZXh0TWFya2VyRm9yVmlzaWJsZVBv
c2l0aW9uKGNhY2hlLCBzdGFydFBvc2l0aW9uKTsKICAgICBpZCBlbmRUZXh0TWFya2VyID0gdGV4
dE1hcmtlckZvclZpc2libGVQb3NpdGlvbihjYWNoZSwgZW5kUG9zaXRpb24pOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET00ubW0gYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9vYmpjL0RPTS5tbQppbmRleCBhMzJmMDNlYWZjZWMxYzk1NmVlYTVjMmM0NzAwMTBk
Y2JkZGNiNjVjLi4yNjE0MGNmNGIyMmZjMjQyMmZiOGUzYmFiN2I1M2NkODc0NTQyOTZlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQpAQCAtNzIxLDI0ICs3MjEsMTIgQEAgQGVuZAog
CiBAaW1wbGVtZW50YXRpb24gRE9NRWxlbWVudCAoV2ViUHJpdmF0ZSkKIAotI2lmICFQTEFURk9S
TShJT1MpCi0tIChOU0ZvbnQgKilfZm9udAotewotICAgIC8vIEZJWE1FOiBDb3VsZCB3ZSBtb3Zl
IHRoaXMgZnVuY3Rpb24gdG8gV2ViQ29yZTo6RWxlbWVudCBhbmQgYXV0b2dlbmVyYXRlPwotICAg
IGF1dG8gcmVuZGVyZXIgPSBjb3JlKHNlbGYpLT5yZW5kZXJlcigpOwotICAgIGlmICghcmVuZGVy
ZXIpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgcmV0dXJuIHJlbmRlcmVyLT5zdHlsZSgpLmZv
bnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKS5nZXROU0ZvbnQoKTsKLX0KLSNlbHNlCiAtIChDVEZv
bnRSZWYpX2ZvbnQKIHsKLSAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gY29yZShzZWxmKS0+
cmVuZGVyZXIoKTsKLSAgICBpZiAoIXJlbmRlcmVyKQotICAgICAgICByZXR1cm4gbmlsOwotICAg
IHJldHVybiByZW5kZXJlci0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCkuZ2V0
Q1RGb250KCk7CisgICAgaWYgKFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBjb3JlKHNlbGYpLT5y
ZW5kZXJlcigpKQorICAgICAgICByZXR1cm4gcmVuZGVyZXItPnN0eWxlKCkuZm9udENhc2NhZGUo
KS5wcmltYXJ5Rm9udCgpLmdldENURm9udCgpOworICAgIHJldHVybiBuaWw7CiB9Ci0jZW5kaWYK
IAogI2lmICFQTEFURk9STShJT1MpCiAtIChOU0RhdGEgKilfaW1hZ2VUSUZGUmVwcmVzZW50YXRp
b24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NUHJpdmF0ZS5o
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01Qcml2YXRlLmgKaW5kZXggMWUyOTM2
ZGQ4OTRlNTYzYzIxNzY0MmYwMjdiOGNkMmU3YzRkNTFjZS4uN2FjMmMyZWZlNTBlYThmNzYxZTFj
ZjMzN2Q3OTE0MjdkZjIwYWIzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
b2JqYy9ET01Qcml2YXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01Q
cml2YXRlLmgKQEAgLTc0LDExICs3NCw5IEBACiAKIEBpbnRlcmZhY2UgRE9NRWxlbWVudCAoV2Vi
UHJpdmF0ZSkKICNpZiAhVEFSR0VUX09TX0lQSE9ORQotLSAoTlNGb250ICopX2ZvbnQ7CiAtIChO
U0RhdGEgKilfaW1hZ2VUSUZGUmVwcmVzZW50YXRpb247Ci0jZWxzZQotLSAoQ1RGb250UmVmKV9m
b250OwogI2VuZGlmCistIChDVEZvbnRSZWYpX2ZvbnQ7CiAtIChOU1VSTCAqKV9nZXRVUkxBdHRy
aWJ1dGU6KE5TU3RyaW5nICopbmFtZTsKIC0gKEJPT0wpaXNGb2N1c2VkOwogQGVuZApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tCmluZGV4IDVmYTQ0YTY1
NDJlNTdmZWIyODcwODIzNDViMjc2MWJmMTg2OWYzMDQuLmRkMjM5ZTFjOTY4OTdlZDQ4MzdlZTVh
MDc4YzkxNTY4ODZhNmQ0NzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29j
b2EvSFRNTENvbnZlcnRlci5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0hU
TUxDb252ZXJ0ZXIubW0KQEAgLTEwMzQsMjMgKzEwMzQsMTIgQEAgUGxhdGZvcm1Db2xvciAqSFRN
TENvbnZlcnRlcjo6X2NvbG9yRm9yRWxlbWVudChFbGVtZW50JiBlbGVtZW50LCBDU1NQcm9wZXJ0
eUlEIHAKICAgICByZXR1cm4gcGxhdGZvcm1SZXN1bHQ7CiB9CiAKLSNpZiAhUExBVEZPUk0oSU9T
KQogc3RhdGljIFBsYXRmb3JtRm9udCAqX2ZvbnQoRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBh
dXRvIHJlbmRlcmVyID0gZWxlbWVudC5yZW5kZXJlcigpOwotICAgIGlmICghcmVuZGVyZXIpCi0g
ICAgICAgIHJldHVybiBuaWw7Ci0gICAgcmV0dXJuIHJlbmRlcmVyLT5zdHlsZSgpLmZvbnRDYXNj
YWRlKCkucHJpbWFyeUZvbnQoKS5nZXROU0ZvbnQoKTsKLX0KLSNlbHNlCi1zdGF0aWMgUGxhdGZv
cm1Gb250ICpfZm9udChFbGVtZW50JiBlbGVtZW50KQotewotICAgIGF1dG8gcmVuZGVyZXIgPSBl
bGVtZW50LnJlbmRlcmVyKCk7Ci0gICAgaWYgKCFyZW5kZXJlcikKLSAgICAgICAgcmV0dXJuIG5p
bDsKLSAgICByZXR1cm4gKFBsYXRmb3JtRm9udCAqKXJlbmRlcmVyLT5zdHlsZSgpLmZvbnRDYXNj
YWRlKCkucHJpbWFyeUZvbnQoKS5nZXRDVEZvbnQoKTsKKyAgICBpZiAoYXV0byByZW5kZXJlciA9
IGVsZW1lbnQucmVuZGVyZXIoKSkKKyAgICAgICAgcmV0dXJuIChQbGF0Zm9ybUZvbnQgKilyZW5k
ZXJlci0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCkuZ2V0Q1RGb250KCk7Cisg
ICAgcmV0dXJuIG5pbDsKIH0KLSNlbmRpZgogCiAjZGVmaW5lIFVJRmxvYXRJc1plcm8obnVtYmVy
KSAoZmFicyhudW1iZXIgLSAwKSA8IEZMVF9FUFNJTE9OKQogCkBAIC0yNTM1LDggKzI1MjQsOCBA
QCBOU0F0dHJpYnV0ZWRTdHJpbmcgKmVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlKFJh
bmdlJiByYW5nZSwgSW5jbHVkZUltYWdlcwogICAgICAgICAgICAgW2F0dHJzLmdldCgpIHNldE9i
amVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0aEludGVnZXI6TlNVbmRlcmxpbmVTdHlsZVNpbmdsZV0g
Zm9yS2V5Ok5TVW5kZXJsaW5lU3R5bGVBdHRyaWJ1dGVOYW1lXTsKICAgICAgICAgaWYgKHN0eWxl
LnRleHREZWNvcmF0aW9uc0luRWZmZWN0KCkgJiBUZXh0RGVjb3JhdGlvbkxpbmVUaHJvdWdoKQog
ICAgICAgICAgICAgW2F0dHJzLmdldCgpIHNldE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0aElu
dGVnZXI6TlNVbmRlcmxpbmVTdHlsZVNpbmdsZV0gZm9yS2V5Ok5TU3RyaWtldGhyb3VnaFN0eWxl
QXR0cmlidXRlTmFtZV07Ci0gICAgICAgIGlmIChOU0ZvbnQgKmZvbnQgPSBzdHlsZS5mb250Q2Fz
Y2FkZSgpLnByaW1hcnlGb250KCkuZ2V0TlNGb250KCkpCi0gICAgICAgICAgICBbYXR0cnMuZ2V0
KCkgc2V0T2JqZWN0OmZvbnQgZm9yS2V5Ok5TRm9udEF0dHJpYnV0ZU5hbWVdOworICAgICAgICBp
ZiAoYXV0byBmb250ID0gc3R5bGUuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpLmdldENURm9u
dCgpKQorICAgICAgICAgICAgW2F0dHJzLmdldCgpIHNldE9iamVjdDp0b05TRm9udChmb250KSBm
b3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIFth
dHRycy5nZXQoKSBzZXRPYmplY3Q6W2ZvbnRNYW5hZ2VyIGNvbnZlcnRGb250OldlYkRlZmF1bHRG
b250KCkgdG9TaXplOnN0eWxlLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKS5wbGF0Zm9ybURh
dGEoKS5zaXplKCldIGZvcktleTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKICAgICAgICAgaWYgKHN0
eWxlLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKS5hbHBoYSgpKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCmluZGV4IDE5NTNhYzlmMjI3ZjI0MjVm
OWRiM2EyNjliMDY3NjE4ZDI2MmIwYTQuLjA4MzY2MzQ3MGJiOGU0MDg3MDNmNThjZTg1MTkwOTEx
N2YxODNkZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1h
Yy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0KQEAgLTE1
NSw4ICsxNTUsOCBAQCBOU0RpY3Rpb25hcnkqIEVkaXRvcjo6Zm9udEF0dHJpYnV0ZXNGb3JTZWxl
Y3Rpb25TdGFydCgpIGNvbnN0CiAgICAgaWYgKHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3Io
Q1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpLmlzVmFsaWQoKSAmJiBzdHlsZS0+dmlzaXRlZERl
cGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKS5hbHBoYSgpICE9IDApCiAg
ICAgICAgIFtyZXN1bHQgc2V0T2JqZWN0Om5zQ29sb3Ioc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRD
b2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcikpIGZvcktleTpOU0JhY2tncm91bmRDb2xv
ckF0dHJpYnV0ZU5hbWVdOwogCi0gICAgaWYgKHN0eWxlLT5mb250Q2FzY2FkZSgpLnByaW1hcnlG
b250KCkuZ2V0TlNGb250KCkpCi0gICAgICAgIFtyZXN1bHQgc2V0T2JqZWN0OnN0eWxlLT5mb250
Q2FzY2FkZSgpLnByaW1hcnlGb250KCkuZ2V0TlNGb250KCkgZm9yS2V5Ok5TRm9udEF0dHJpYnV0
ZU5hbWVdOworICAgIGlmIChhdXRvIGN0Rm9udCA9IHN0eWxlLT5mb250Q2FzY2FkZSgpLnByaW1h
cnlGb250KCkuZ2V0Q1RGb250KCkpCisgICAgICAgIFtyZXN1bHQgc2V0T2JqZWN0OnRvTlNGb250
KGN0Rm9udCkgZm9yS2V5Ok5TRm9udEF0dHJpYnV0ZU5hbWVdOwogCiAgICAgaWYgKHN0eWxlLT52
aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcikuaXNWYWxpZCgpICYmIHN0eWxl
LT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcikgIT0gQ29sb3I6OmJsYWNr
KQogICAgICAgICBbcmVzdWx0IHNldE9iamVjdDpuc0NvbG9yKHN0eWxlLT52aXNpdGVkRGVwZW5k
ZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcikpIGZvcktleTpOU0ZvcmVncm91bmRDb2xvckF0dHJp
YnV0ZU5hbWVdOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCmluZGV4IGE4
YWJkNWNhMDE2ODJiMzNlMDQwNmY3OWQyOGVmYTcwYTU2MmIyYTguLmI0OWM0ZDcwMjlkN2JhMGE2
ODhiOWNkNDY5NDc3OTBiZTNjZmQwNDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250LmgKQEAgLTE3MiwxNSArMTcyLDExIEBAIHB1YmxpYzoKICAgICBTdHJpbmcgZGVzY3Jp
cHRpb24oKSBjb25zdDsKICNlbmRpZgogCi0jaWYgVVNFKEFQUEtJVCkKLSAgICBOU0ZvbnQqIGdl
dE5TRm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fcGxhdGZvcm1EYXRhLm5zRm9udCgpOyB9Ci0jZW5k
aWYKLQogI2lmIFBMQVRGT1JNKElPUykKLSAgICBDVEZvbnRSZWYgZ2V0Q1RGb250KCkgY29uc3Qg
eyByZXR1cm4gbV9wbGF0Zm9ybURhdGEuZm9udCgpOyB9CiAgICAgYm9vbCBzaG91bGROb3RCZVVz
ZWRGb3JBcmFiaWMoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZE5vdEJlVXNlZEZvckFyYWJpYzsg
fTsKICNlbmRpZgogI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIENURm9udFJlZiBnZXRDVEZvbnQo
KSBjb25zdCB7IHJldHVybiBtX3BsYXRmb3JtRGF0YS5mb250KCk7IH0KICAgICBDRkRpY3Rpb25h
cnlSZWYgZ2V0Q0ZTdHJpbmdBdHRyaWJ1dGVzKGJvb2wgZW5hYmxlS2VybmluZywgRm9udE9yaWVu
dGF0aW9uKSBjb25zdDsKICAgICBjb25zdCBCaXRWZWN0b3ImIGdseXBoc1N1cHBvcnRlZEJ5U21h
bGxDYXBzKCkgY29uc3Q7CiAgICAgY29uc3QgQml0VmVjdG9yJiBnbHlwaHNTdXBwb3J0ZWRCeUFs
bFNtYWxsQ2FwcygpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oCmluZGV4IGQxNmY2YzFhOTNhNmU1MmNkZjU1ZGZkZWUw
NjRlZmMzYjcxOWViYmEuLjNjZTM4YTRmYjhiNTg0MzFiY2ZlOGU1MjJmOWY0MzEwYTJjMmEwMWUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9y
bURhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZv
cm1EYXRhLmgKQEAgLTEzMCwxMSArMTMwLDYgQEAgcHVibGljOgogICAgIFJldGFpblB0cjxDRlR5
cGVSZWY+IG9iamVjdEZvckVxdWFsaXR5Q2hlY2soKSBjb25zdDsKIAogICAgIGJvb2wgaGFzQ3Vz
dG9tVHJhY2tpbmcoKSBjb25zdCB7IHJldHVybiBpc1N5c3RlbUZvbnQoKTsgfQotCi0jaWYgVVNF
KEFQUEtJVCkKLSAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgd2hlbiBhbGwgTlNGb250IHVzYWdl
IGlzIHJlbW92ZWQuCi0gICAgTlNGb250ICpuc0ZvbnQoKSBjb25zdCB7IHJldHVybiAoTlNGb250
ICopbV9mb250LmdldCgpOyB9Ci0jZW5kaWYKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oV0lOKSB8
fCBQTEFURk9STShDT0NPQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NvY29hL0ZvbnRDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NvY29hL0ZvbnRDb2NvYS5tbQppbmRleCA3ZmUwYzJlMThiNGQyZDY2M2ZjNmJhZjE5YzU0
ZGZlNDk0YTM2MzQ4Li4wOWNiMjQ4YWZhMjk4NGI4NDU0N2ZiOTJmYTJhNGI5ZGI4ZDVmY2ZhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q29j
b2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENv
Y29hLm1tCkBAIC01MjcsOCArNTI3LDkgQEAgUmVmUHRyPEZvbnQ+IEZvbnQ6OnBsYXRmb3JtQ3Jl
YXRlU2NhbGVkRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBmbG9hdCBzY2FsZUYKIAogdm9p
ZCBGb250OjpkZXRlcm1pbmVQaXRjaCgpCiB7Ci0jaWYgVVNFKEFQUEtJVCkKLSAgICBOU0ZvbnQq
IGYgPSBtX3BsYXRmb3JtRGF0YS5uc0ZvbnQoKTsKKyAgICBDVEZvbnRSZWYgY3RGb250ID0gbV9w
bGF0Zm9ybURhdGEuZm9udCgpOworICAgIEFTU0VSVChjdEZvbnQpOworCiAgICAgLy8gU3BlY2lh
bCBjYXNlIE9zYWthLU1vbm8uCiAgICAgLy8gQWNjb3JkaW5nIHRvIDxyZGFyOi8vcHJvYmxlbS8z
OTk5NDY3Piwgd2Ugc2hvdWxkIHRyZWF0IE9zYWthLU1vbm8gYXMgZml4ZWQgcGl0Y2guCiAgICAg
Ly8gTm90ZSB0aGF0IHRoZSBBcHBLaXQgZG9lcyBub3QgcmVwb3J0IE9zYWthLU1vbm8gYXMgZml4
ZWQgcGl0Y2guCkBAIC01NDEsMTggKzU0MiwxMSBAQCB2b2lkIEZvbnQ6OmRldGVybWluZVBpdGNo
KCkKICAgICAvLyBBY2NvcmRpbmcgdG8gPHJkYXI6Ly9wcm9ibGVtLzU0NTQ3MDQ+LCB3ZSBzaG91
bGQgbm90IHRyZWF0IE1vbm90eXBlQ29yc2l2YSBhcyBmaXhlZCBwaXRjaC4KICAgICAvLyBOb3Rl
IHRoYXQgQXBwS2l0IGRvZXMgcmVwb3J0IE1vbm90eXBlQ29yc2l2YSBhcyBmaXhlZCBwaXRjaC4K
IAotICAgIE5TU3RyaW5nICpuYW1lID0gW2YgZm9udE5hbWVdOwotICAgIG1fdHJlYXRBc0ZpeGVk
UGl0Y2ggPSAoW2YgaXNGaXhlZFBpdGNoXSAgfHwgW2YgX2lzRmFrZUZpeGVkUGl0Y2hdIHx8IFtu
YW1lIGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmU6QCJPc2FrYS1Nb25vIl0gPT0gTlNPcmRlcmVkU2Ft
ZSkgJiYgW25hbWUgY2FzZUluc2Vuc2l0aXZlQ29tcGFyZTpAIk1TLVBHb3RoaWMiXSAhPSBOU09y
ZGVyZWRTYW1lICYmIFtuYW1lIGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmU6QCJNb25vdHlwZUNvcnNp
dmEiXSAhPSBOU09yZGVyZWRTYW1lOwotI2Vsc2UKLSAgICBDVEZvbnRSZWYgY3RGb250ID0gbV9w
bGF0Zm9ybURhdGEuZm9udCgpOwotICAgIG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPSBmYWxzZTsKLSAg
ICBpZiAoIWN0Rm9udCkKLSAgICAgICAgcmV0dXJuOyAvLyBDVEZvbnQgaXMgbnVsbCBpbiB0aGUg
Y2FzZSBvZiBTVkcgZm9udHMgZm9yIGV4YW1wbGUuCi0KICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdS
ZWY+IGZ1bGxOYW1lID0gYWRvcHRDRihDVEZvbnRDb3B5RnVsbE5hbWUoY3RGb250KSk7CiAgICAg
UmV0YWluUHRyPENGU3RyaW5nUmVmPiBmYW1pbHlOYW1lID0gYWRvcHRDRihDVEZvbnRDb3B5RmFt
aWx5TmFtZShjdEZvbnQpKTsKIAotICAgIG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPSBDR0ZvbnRJc0Zp
eGVkUGl0Y2gobV9wbGF0Zm9ybURhdGEuY2dGb250KCkpIHx8IChmdWxsTmFtZSAmJiAoQ0ZTdHJp
bmdDb21wYXJlKGZ1bGxOYW1lLmdldCgpLCBDRlNUUigiT3Nha2EtTW9ubyIpLCBrQ0ZDb21wYXJl
Q2FzZUluc2Vuc2l0aXZlKSA9PSBrQ0ZDb21wYXJlRXF1YWxUbyB8fCBDRlN0cmluZ0NvbXBhcmUo
ZnVsbE5hbWUuZ2V0KCksIENGU1RSKCJNUy1QR290aGljIiksIGtDRkNvbXBhcmVDYXNlSW5zZW5z
aXRpdmUpID09IGtDRkNvbXBhcmVFcXVhbFRvKSk7CisgICAgbV90cmVhdEFzRml4ZWRQaXRjaCA9
IChDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhjdEZvbnQpICYga0NURm9udE1vbm9TcGFjZVRyYWl0
KSB8fCBDR0ZvbnRJc0ZpeGVkUGl0Y2gobV9wbGF0Zm9ybURhdGEuY2dGb250KCkpIHx8IChmdWxs
TmFtZSAmJiAoQ0ZTdHJpbmdDb21wYXJlKGZ1bGxOYW1lLmdldCgpLCBDRlNUUigiT3Nha2EtTW9u
byIpLCBrQ0ZDb21wYXJlQ2FzZUluc2Vuc2l0aXZlKSA9PSBrQ0ZDb21wYXJlRXF1YWxUbyB8fCBD
RlN0cmluZ0NvbXBhcmUoZnVsbE5hbWUuZ2V0KCksIENGU1RSKCJNUy1QR290aGljIiksIGtDRkNv
bXBhcmVDYXNlSW5zZW5zaXRpdmUpID09IGtDRkNvbXBhcmVFcXVhbFRvIHx8IENGU3RyaW5nQ29t
cGFyZShmdWxsTmFtZS5nZXQoKSwgQ0ZTVFIoIk1vbm90eXBlQ29yc2l2YSIpLCBrQ0ZDb21wYXJl
Q2FzZUluc2Vuc2l0aXZlKSA9PSBrQ0ZDb21wYXJlRXF1YWxUbykpOworI2lmIFBMQVRGT1JNKElP
UykKICAgICBpZiAoZmFtaWx5TmFtZSAmJiBDRlN0cmluZ0NvbXBhcmUoZmFtaWx5TmFtZS5nZXQo
KSwgQ0ZTVFIoIkNvdXJpZXIgTmV3IiksIGtDRkNvbXBhcmVDYXNlSW5zZW5zaXRpdmUpID09IGtD
RkNvbXBhcmVFcXVhbFRvKSB7CiAgICAgICAgIC8vIFNwZWNpYWwgY2FzZSBDb3VyaWVyIE5ldyB0
byBub3QgYmUgdHJlYXRlZCBhcyBmaXhlZCBwaXRjaCwgYXMgdGhpcyB3aWxsIG1ha2UgdXNlIG9m
IGEgaGFja2VkIHNwYWNlIHdpZHRoIHdoaWNoIGlzIHVuZGVzaXJlYWJsZSBmb3IgaVBob25lIChz
ZWUgcmRhcjovLzYyNjk3ODMpLgogICAgICAgICBtX3RyZWF0QXNGaXhlZFBpdGNoID0gZmFsc2U7
CkBAIC01NzEsNDMgKzU2NSwxNCBAQCBGbG9hdFJlY3QgRm9udDo6cGxhdGZvcm1Cb3VuZHNGb3JH
bHlwaChHbHlwaCBnbHlwaCkgY29uc3QKICAgICByZXR1cm4gYm91bmRpbmdCb3g7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgQ0dGb250UmVuZGVyaW5nU3R5bGUgcmVuZGVyaW5nU3R5bGUoY29uc3QgRm9u
dFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhKQotewotI2lmIFVTRShBUFBLSVQpCi0gICAgQ0dG
b250UmVuZGVyaW5nU3R5bGUgc3R5bGUgPSBrQ0dGb250UmVuZGVyaW5nU3R5bGVBbnRpYWxpYXNp
bmcgfCBrQ0dGb250UmVuZGVyaW5nU3R5bGVTdWJwaXhlbFBvc2l0aW9uaW5nIHwga0NHRm9udFJl
bmRlcmluZ1N0eWxlU3VicGl4ZWxRdWFudGl6YXRpb247Ci0gICAgTlNGb250ICpmb250ID0gcGxh
dGZvcm1EYXRhLm5zRm9udCgpOwotICAgIGlmIChmb250KSB7Ci0gICAgICAgIHN3aXRjaCAoW2Zv
bnQgcmVuZGVyaW5nTW9kZV0pIHsKLSAgICAgICAgY2FzZSBOU0ZvbnRJbnRlZ2VyQWR2YW5jZW1l
bnRzUmVuZGVyaW5nTW9kZToKLSAgICAgICAgICAgIHN0eWxlID0gMDsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIE5TRm9udEFudGlhbGlhc2VkSW50ZWdlckFkdmFuY2VtZW50c1Jl
bmRlcmluZ01vZGU6Ci0gICAgICAgICAgICBzdHlsZSA9IGtDR0ZvbnRSZW5kZXJpbmdTdHlsZUFu
dGlhbGlhc2luZzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHN0eWxlOwotCi0jZWxz
ZQotICAgIFVOVVNFRF9QQVJBTShwbGF0Zm9ybURhdGEpOwotICAgIHJldHVybiBrQ0dGb250UmVu
ZGVyaW5nU3R5bGVBbnRpYWxpYXNpbmcgfCBrQ0dGb250UmVuZGVyaW5nU3R5bGVTdWJwaXhlbFBv
c2l0aW9uaW5nIHwga0NHRm9udFJlbmRlcmluZ1N0eWxlU3VicGl4ZWxRdWFudGl6YXRpb24gfCBr
Q0dGb250QW50aWFsaWFzaW5nU3R5bGVVbmZpbHRlcmVkOwotI2VuZGlmCi19Ci0KIHN0YXRpYyBp
bmxpbmUgT3B0aW9uYWw8Q0dTaXplPiBhZHZhbmNlRm9yQ29sb3JCaXRtYXBGb250KGNvbnN0IEZv
bnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSwgR2x5cGggZ2x5cGgpCiB7Ci0jaWYgUExBVEZP
Uk0oTUFDKQotICAgIE5TRm9udCAqZm9udCA9IHBsYXRmb3JtRGF0YS5uc0ZvbnQoKTsKKyAgICBD
VEZvbnRSZWYgZm9udCA9IHBsYXRmb3JtRGF0YS5mb250KCk7CiAgICAgaWYgKCFmb250IHx8ICFw
bGF0Zm9ybURhdGEuaXNDb2xvckJpdG1hcEZvbnQoKSkKICAgICAgICAgcmV0dXJuIE51bGxvcHQ7
Ci0gICAgcmV0dXJuIE5TU2l6ZVRvQ0dTaXplKFtmb250IGFkdmFuY2VtZW50Rm9yR2x5cGg6Z2x5
cGhdKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHBsYXRmb3JtRGF0YSk7Ci0gICAgVU5VU0VE
X1BBUkFNKGdseXBoKTsKLSAgICByZXR1cm4gTnVsbG9wdDsKLSNlbmRpZgorICAgIENHU2l6ZSBh
ZHZhbmNlOworICAgIENURm9udEdldEFkdmFuY2VzRm9yR2x5cGhzKGZvbnQsIGtDVEZvbnRPcmll
bnRhdGlvbkRlZmF1bHQsICZnbHlwaCwgJmFkdmFuY2UsIDEpOworICAgIHJldHVybiBhZHZhbmNl
OwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgY2FuVXNlRmFzdEdseXBoQWR2YW5jZUdldHRlcihj
b25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEsIEdseXBoIGdseXBoLCBDR1NpemUm
IGFkdmFuY2UsIGJvb2wmIHBvcHVsYXRlZEFkdmFuY2UpCkBAIC02MzAsNyArNTk1LDggQEAgZmxv
YXQgRm9udDo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAogICAgIGlm
ICgoaG9yaXpvbnRhbCB8fCBtX2lzQnJva2VuSWRlb2dyYXBoRmFsbGJhY2spICYmIGNhblVzZUZh
c3RHbHlwaEFkdmFuY2VHZXR0ZXIodGhpcy0+cGxhdGZvcm1EYXRhKCksIGdseXBoLCBhZHZhbmNl
LCBwb3B1bGF0ZWRBZHZhbmNlKSkgewogICAgICAgICBmbG9hdCBwb2ludFNpemUgPSBwbGF0Zm9y
bURhdGEoKS5zaXplKCk7CiAgICAgICAgIENHQWZmaW5lVHJhbnNmb3JtIG0gPSBDR0FmZmluZVRy
YW5zZm9ybU1ha2VTY2FsZShwb2ludFNpemUsIHBvaW50U2l6ZSk7Ci0gICAgICAgIGlmICghQ0dG
b250R2V0R2x5cGhBZHZhbmNlc0ZvclN0eWxlKHBsYXRmb3JtRGF0YSgpLmNnRm9udCgpLCAmbSwg
cmVuZGVyaW5nU3R5bGUocGxhdGZvcm1EYXRhKCkpLCAmZ2x5cGgsIDEsICZhZHZhbmNlKSkgewor
ICAgICAgICBDR0ZvbnRSZW5kZXJpbmdTdHlsZSByZW5kZXJpbmdTdHlsZSA9IGtDR0ZvbnRSZW5k
ZXJpbmdTdHlsZUFudGlhbGlhc2luZyB8IGtDR0ZvbnRSZW5kZXJpbmdTdHlsZVN1YnBpeGVsUG9z
aXRpb25pbmcgfCBrQ0dGb250UmVuZGVyaW5nU3R5bGVTdWJwaXhlbFF1YW50aXphdGlvbiB8IGtD
R0ZvbnRBbnRpYWxpYXNpbmdTdHlsZVVuZmlsdGVyZWQ7CisgICAgICAgIGlmICghQ0dGb250R2V0
R2x5cGhBZHZhbmNlc0ZvclN0eWxlKHBsYXRmb3JtRGF0YSgpLmNnRm9udCgpLCAmbSwgcmVuZGVy
aW5nU3R5bGUsICZnbHlwaCwgMSwgJmFkdmFuY2UpKSB7CiAgICAgICAgICAgICBSZXRhaW5QdHI8
Q0ZTdHJpbmdSZWY+IGZ1bGxOYW1lID0gYWRvcHRDRihDR0ZvbnRDb3B5RnVsbE5hbWUocGxhdGZv
cm1EYXRhKCkuY2dGb250KCkpKTsKICAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGNh
Y2hlIGdseXBoIHdpZHRocyBmb3IgJUAgJWYiLCBmdWxsTmFtZS5nZXQoKSwgcG9pbnRTaXplKTsK
ICAgICAgICAgICAgIGFkdmFuY2Uud2lkdGggPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1tIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29h
Lm1tCmluZGV4IGQ4NjE4MzdkZGZkZWQ4YTM2MWExMjc2NDY1NTliNDVjYTJhNDg3MTQuLmJjNjU4
YzZmYWQ5YmZlYmZhZmRiODBiNzQ3OGRiNjc0MDUyYWUxNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9ybURhdGFDb2NvYS5tbQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250UGxhdGZvcm1E
YXRhQ29jb2EubW0KQEAgLTI5LDkgKzI5LDcgQEAKICNpbXBvcnQgIldlYkNvcmVTeXN0ZW1JbnRl
cmZhY2UuaCIKICNpbXBvcnQgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCi0jaWYgIVBMQVRGT1JN
KElPUykKLSNpbXBvcnQgPEFwcEtpdC9OU0ZvbnQuaD4KLSNlbHNlCisjaWYgUExBVEZPUk0oSU9T
KQogI2ltcG9ydCAiQ29yZUdyYXBoaWNzU1BJLmgiCiAjaW1wb3J0IDxDb3JlVGV4dC9Db3JlVGV4
dC5oPgogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9y
dC9Qb3B1cE1lbnVNYWMubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9Qb3B1
cE1lbnVNYWMubW0KaW5kZXggNmQyY2UxNjIxM2U2OGIwNTkyOWIzNWYyMjA1OWU5OTJlZWY2Y2Vi
Ny4uNWQ1YTNkMWI2NmRhYjM1OGFkODcwNzVjMWYzZWU4MGE1ZjRmMjVmMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvUG9wdXBNZW51TWFjLm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1BvcHVwTWVudU1hYy5tbQpAQCAtODEsMTIg
KzgxLDEyIEBAIHZvaWQgUG9wdXBNZW51TWFjOjpwb3B1bGF0ZSgpCiAgICAgICAgIFBvcHVwTWVu
dVN0eWxlIHN0eWxlID0gbV9jbGllbnQtPml0ZW1TdHlsZShpKTsKICAgICAgICAgUmV0YWluUHRy
PE5TTXV0YWJsZURpY3Rpb25hcnk+IGF0dHJpYnV0ZXMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlRGlj
dGlvbmFyeSBhbGxvY10gaW5pdF0pOwogICAgICAgICBpZiAoc3R5bGUuZm9udCgpICE9IEZvbnRD
YXNjYWRlKCkpIHsKLSAgICAgICAgICAgIE5TRm9udCAqZm9udCA9IHN0eWxlLmZvbnQoKS5wcmlt
YXJ5Rm9udCgpLmdldE5TRm9udCgpOworICAgICAgICAgICAgUmV0YWluUHRyPENURm9udFJlZj4g
Zm9udCA9IHN0eWxlLmZvbnQoKS5wcmltYXJ5Rm9udCgpLmdldENURm9udCgpOwogICAgICAgICAg
ICAgaWYgKCFmb250KSB7CiAgICAgICAgICAgICAgICAgQ0dGbG9hdCBzaXplID0gc3R5bGUuZm9u
dCgpLnByaW1hcnlGb250KCkucGxhdGZvcm1EYXRhKCkuc2l6ZSgpOwotICAgICAgICAgICAgICAg
IGZvbnQgPSBzdHlsZS5mb250KCkud2VpZ2h0KCkgPCBGb250V2VpZ2h0Qm9sZCA/IFtOU0ZvbnQg
c3lzdGVtRm9udE9mU2l6ZTpzaXplXSA6IFtOU0ZvbnQgYm9sZFN5c3RlbUZvbnRPZlNpemU6c2l6
ZV07CisgICAgICAgICAgICAgICAgZm9udCA9IHN0eWxlLmZvbnQoKS53ZWlnaHQoKSA8IEZvbnRX
ZWlnaHRCb2xkID8gYWRvcHRDRihDVEZvbnRDcmVhdGVVSUZvbnRGb3JMYW5ndWFnZShrQ1RGb250
VUlGb250U3lzdGVtLCBzaXplLCBudWxscHRyKSkgOiBhZG9wdENGKENURm9udENyZWF0ZVVJRm9u
dEZvckxhbmd1YWdlKGtDVEZvbnRVSUZvbnRFbXBoYXNpemVkU3lzdGVtLCBzaXplLCBudWxscHRy
KSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBbYXR0cmlidXRlcyBzZXRPYmplY3Q6Zm9u
dCBmb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07CisgICAgICAgICAgICBbYXR0cmlidXRlcyBz
ZXRPYmplY3Q6dG9OU0ZvbnQoZm9udC5nZXQoKSkgZm9yS2V5Ok5TRm9udEF0dHJpYnV0ZU5hbWVd
OwogICAgICAgICB9CiAKICAgICAgICAgUmV0YWluUHRyPE5TTXV0YWJsZVBhcmFncmFwaFN0eWxl
PiBwYXJhZ3JhcGhTdHlsZSA9IGFkb3B0TlMoW1tOU1BhcmFncmFwaFN0eWxlIGRlZmF1bHRQYXJh
Z3JhcGhTdHlsZV0gbXV0YWJsZUNvcHldKTsKQEAgLTE1NCwxMyArMTU0LDEzIEBAIHZvaWQgUG9w
dXBNZW51TWFjOjpzaG93KGNvbnN0IEludFJlY3QmIHIsIEZyYW1lVmlldyogdiwgaW50IGluZGV4
KQogICAgIFttX3BvcHVwIHNlbGVjdEl0ZW1BdEluZGV4OmluZGV4XTsKICAgICBbbV9wb3B1cCBz
ZXRVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uOnRleHREaXJlY3Rpb24gPT0gTFRSID8gTlNV
c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uTGVmdFRvUmlnaHQgOiBOU1VzZXJJbnRlcmZhY2VM
YXlvdXREaXJlY3Rpb25SaWdodFRvTGVmdF07CiAKLSAgICBOU01lbnUqIG1lbnUgPSBbbV9wb3B1
cCBtZW51XTsKKyAgICBOU01lbnUgKm1lbnUgPSBbbV9wb3B1cCBtZW51XTsKICNpZiBfX01BQ19P
U19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTEwMAogICAgIFttZW51IHNldFVzZXJJbnRl
cmZhY2VMYXlvdXREaXJlY3Rpb246dGV4dERpcmVjdGlvbiA9PSBMVFIgPyBOU1VzZXJJbnRlcmZh
Y2VMYXlvdXREaXJlY3Rpb25MZWZ0VG9SaWdodCA6IE5TVXNlckludGVyZmFjZUxheW91dERpcmVj
dGlvblJpZ2h0VG9MZWZ0XTsKICNlbmRpZgogCiAgICAgTlNQb2ludCBsb2NhdGlvbjsKLSAgICBO
U0ZvbnQqIGZvbnQgPSBtX2NsaWVudC0+bWVudVN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250KCku
Z2V0TlNGb250KCk7CisgICAgQ1RGb250UmVmIGZvbnQgPSBtX2NsaWVudC0+bWVudVN0eWxlKCku
Zm9udCgpLnByaW1hcnlGb250KCkuZ2V0Q1RGb250KCk7CiAKICAgICAvLyBUaGVzZSB2YWx1ZXMg
d2VyZSBib3Jyb3dlZCBmcm9tIEFwcEtpdCB0byBtYXRjaCB0aGVpciBwbGFjZW1lbnQgb2YgdGhl
IG1lbnUuCiAgICAgY29uc3QgaW50IHBvcE92ZXJIb3Jpem9udGFsQWRqdXN0ID0gLTEwOwpAQCAt
MTcyLDggKzE3Miw4IEBAIHZvaWQgUG9wdXBNZW51TWFjOjpzaG93KGNvbnN0IEludFJlY3QmIHIs
IEZyYW1lVmlldyogdiwgaW50IGluZGV4KQogICAgICAgICAgICAgdGl0bGVGcmFtZSA9IHI7CiAg
ICAgICAgIGZsb2F0IHZlcnRPZmZzZXQgPSByb3VuZGYoKE5TTWF4WShyKSAtIE5TTWF4WSh0aXRs
ZUZyYW1lKSkgKyBOU0hlaWdodCh0aXRsZUZyYW1lKSk7CiAgICAgICAgIC8vIEFkanVzdCBmb3Ig
Zm9udHMgb3RoZXIgdGhhbiB0aGUgc3lzdGVtIGZvbnQuCi0gICAgICAgIE5TRm9udCogZGVmYXVs
dEZvbnQgPSBbTlNGb250IHN5c3RlbUZvbnRPZlNpemU6W2ZvbnQgcG9pbnRTaXplXV07Ci0gICAg
ICAgIHZlcnRPZmZzZXQgKz0gW2ZvbnQgZGVzY2VuZGVyXSAtIFtkZWZhdWx0Rm9udCBkZXNjZW5k
ZXJdOworICAgICAgICBSZXRhaW5QdHI8Q1RGb250UmVmPiBkZWZhdWx0Rm9udCA9IGFkb3B0Q0Yo
Q1RGb250Q3JlYXRlVUlGb250Rm9yTGFuZ3VhZ2Uoa0NURm9udFVJRm9udFN5c3RlbSwgQ1RGb250
R2V0U2l6ZShmb250KSwgbmlsKSk7CisgICAgICAgIHZlcnRPZmZzZXQgKz0gQ1RGb250R2V0RGVz
Y2VudChmb250KSAtIENURm9udEdldERlc2NlbnQoZGVmYXVsdEZvbnQuZ2V0KCkpOwogICAgICAg
ICB2ZXJ0T2Zmc2V0ID0gZm1pbmYoTlNIZWlnaHQociksIHZlcnRPZmZzZXQpOwogCiAgICAgICAg
IGZsb2F0IGhvcml6b250YWxPZmZzZXQgPSB0ZXh0RGlyZWN0aW9uID09IExUUiA/IHBvcE92ZXJI
b3Jpem9udGFsQWRqdXN0IDogMDsKQEAgLTIxNSw3ICsyMTUsNyBAQCB2b2lkIFBvcHVwTWVudU1h
Yzo6c2hvdyhjb25zdCBJbnRSZWN0JiByLCBGcmFtZVZpZXcqIHYsIGludCBpbmRleCkKICNwcmFn
bWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKICAgICB9CiAKLSAgICBXS1BvcHVwTWVudShtZW51LCBs
b2NhdGlvbiwgcm91bmRmKE5TV2lkdGgocikpLCBkdW1teVZpZXcuZ2V0KCksIGluZGV4LCBmb250
LCBjb250cm9sU2l6ZSwgIW1fY2xpZW50LT5tZW51U3R5bGUoKS5oYXNEZWZhdWx0QXBwZWFyYW5j
ZSgpKTsKKyAgICBXS1BvcHVwTWVudShtZW51LCBsb2NhdGlvbiwgcm91bmRmKE5TV2lkdGgocikp
LCBkdW1teVZpZXcuZ2V0KCksIGluZGV4LCB0b05TRm9udChmb250KSwgY29udHJvbFNpemUsICFt
X2NsaWVudC0+bWVudVN0eWxlKCkuaGFzRGVmYXVsdEFwcGVhcmFuY2UoKSk7CiAKICAgICBbbV9w
b3B1cCBkaXNtaXNzUG9wVXBdOwogICAgIFtkdW1teVZpZXcgcmVtb3ZlRnJvbVN1cGVydmlld107
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tIGIv
U291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQppbmRleCAyODY4MzJjZmFi
MmJiMTdlNTI3ZDVlOTYxMDM1MDczOGNjODAzZjIzLi5lYjVhOTZhYjY5ODM0YmNlMTE4YjFlMTgy
ODZmMzZmMGFmZjJiNzVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dl
YkhUTUxWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcu
bW0KQEAgLTU1OTksMTQgKzU1OTksMTQgQEAgLSAoTlNGb250ICopX29yaWdpbmFsRm9udEIKICAg
ICByZXR1cm4gW1tOU0ZvbnRNYW5hZ2VyIHNoYXJlZEZvbnRNYW5hZ2VyXSBmb250V2l0aEZhbWls
eTpAIlRpbWVzIiB0cmFpdHM6TlNGb250SXRhbGljVHJhaXQgd2VpZ2h0OlNUQU5EQVJEX0JPTERf
V0VJR0hUIHNpemU6MTIuMGZdOwogfQogCi1zdGF0aWMgTlNTdHJpbmcgKmZvbnROYW1lRm9yRGVz
Y3JpcHRpb24oTlNTdHJpbmcgKmZhbWlseU5hbWUsIEJPT0wgaXRhbGljLCBCT09MIGJvbGQpCitz
dGF0aWMgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBmb250TmFtZUZvckRlc2NyaXB0aW9uKE5TU3Ry
aW5nICpmYW1pbHlOYW1lLCBCT09MIGl0YWxpYywgQk9PTCBib2xkKQogewogICAgIC8vIEZpbmQg
dGhlIGZvbnQgdGhlIHNhbWUgd2F5IHRoZSByZW5kZXJpbmcgY29kZSB3b3VsZCBsYXRlciBpZiBp
dCBlbmNvdW50ZXJlZCB0aGlzIENTUy4KICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0
aW9uOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJc0l0YWxpYyhpdGFsaWMpOwogICAgIGZvbnRE
ZXNjcmlwdGlvbi5zZXRXZWlnaHQoYm9sZCA/IEZvbnRXZWlnaHQ5MDAgOiBGb250V2VpZ2h0NTAw
KTsKICAgICBSZWZQdHI8Rm9udD4gZm9udCA9IEZvbnRDYWNoZTo6c2luZ2xldG9uKCkuZm9udEZv
ckZhbWlseShmb250RGVzY3JpcHRpb24sIGZhbWlseU5hbWUpOwotICAgIHJldHVybiBbZm9udC0+
cGxhdGZvcm1EYXRhKCkubnNGb250KCkgZm9udE5hbWVdOworICAgIHJldHVybiBhZG9wdENGKENU
Rm9udENvcHlQb3N0U2NyaXB0TmFtZShmb250LT5nZXRDVEZvbnQoKSkpOwogfQogCiAtICh2b2lk
KV9hZGRUb1N0eWxlOihET01DU1NTdHlsZURlY2xhcmF0aW9uICopc3R5bGUgZm9udEE6KE5TRm9u
dCAqKWEgZm9udEI6KE5TRm9udCAqKWIKQEAgLTU2NDUsOCArNTY0NSwxMCBAQCAtICh2b2lkKV9h
ZGRUb1N0eWxlOihET01DU1NTdHlsZURlY2xhcmF0aW9uICopc3R5bGUgZm9udEE6KE5TRm9udCAq
KWEgZm9udEI6KE5TRgogICAgICAgICAvLyB0aGUgUG9zdHNjcmlwdCBuYW1lLgogICAgICAgICAv
LyBJZiB3ZSBkb24ndCBmaW5kIGEgZm9udCB3aXRoIHRoZSBzYW1lIFBvc3RzY3JpcHQgbmFtZSwg
dGhlbiB3ZSdsbCBoYXZlIHRvIHVzZSB0aGUKICAgICAgICAgLy8gUG9zdHNjcmlwdCBuYW1lIHRv
IG1ha2UgdGhlIENTUyBzcGVjaWZpYyBlbm91Z2guCi0gICAgICAgIGlmICghW2ZvbnROYW1lRm9y
RGVzY3JpcHRpb24oYUZhbWlseU5hbWUsIGFJc0l0YWxpYywgYUlzQm9sZCkgaXNFcXVhbFRvU3Ry
aW5nOlthIGZvbnROYW1lXV0pCi0gICAgICAgICAgICBmYW1pbHlOYW1lRm9yQ1NTID0gW2EgZm9u
dE5hbWVdOworICAgICAgICBhdXRvIGZvbnROYW1lID0gZm9udE5hbWVGb3JEZXNjcmlwdGlvbihh
RmFtaWx5TmFtZSwgYUlzSXRhbGljLCBhSXNCb2xkKTsKKyAgICAgICAgYXV0byBhTmFtZSA9IFth
IGZvbnROYW1lXTsKKyAgICAgICAgaWYgKCFmb250TmFtZSB8fCAhYU5hbWUgfHwgIUNGRXF1YWwo
Zm9udE5hbWUuZ2V0KCksIHN0YXRpY19jYXN0PENGU3RyaW5nUmVmPihbYSBmb250TmFtZV0pKSkK
KyAgICAgICAgICAgIGZhbWlseU5hbWVGb3JDU1MgPSBhTmFtZTsKIAogICAgICAgICAvLyBGSVhN
RTogTmVlZCBtb3JlIHNvcGhpc3RpY2F0ZWQgZXNjYXBpbmcgY29kZSBpZiB3ZSB3YW50IHRvIGhh
bmRsZSBmYW1pbHkgbmFtZXMKICAgICAgICAgLy8gd2l0aCBjaGFyYWN0ZXJzIGxpa2Ugc2luZ2xl
IHF1b3RlIG9yIGJhY2tzbGFzaCBpbiB0aGVpciBuYW1lcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYlBvcHVwTWVudU1hYy5tbSBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYlBvcHVwTWVu
dU1hYy5tbQppbmRleCBmNzI3YzY4NWQwMTMxM2Y3ZGIxYWZlMWYxOWQyZDJhMjMzYjE4MTdlLi4x
ZDRhZmNmZWJlMGU4MTZhYWUzZThkOTQ4NDNmMDQyY2VkMWU3MDg2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJQb3B1cE1lbnVNYWMu
bW0KKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2Vi
UG9wdXBNZW51TWFjLm1tCkBAIC0zOSwxNSArMzksMTkgQEAgdm9pZCBXZWJQb3B1cE1lbnU6OnNl
dFVwUGxhdGZvcm1EYXRhKGNvbnN0IEludFJlY3QmLCBQbGF0Zm9ybVBvcHVwTWVudURhdGEmIGRh
dGEKIHsKICNpZiBVU0UoQVBQS0lUKQogICAgIC8vIEZJWE1FOiBmb250IHdpbGwgYmUgbmlsIGhl
cmUgZm9yIGN1c3RvbSBmb250cywgd2Ugc2hvdWxkIGZpeCB0aGF0LgotICAgIE5TRm9udCAqZm9u
dCA9IG1fcG9wdXBDbGllbnQtPm1lbnVTdHlsZSgpLmZvbnQoKS5wcmltYXJ5Rm9udCgpLmdldE5T
Rm9udCgpOworICAgIENURm9udFJlZiBmb250ID0gbV9wb3B1cENsaWVudC0+bWVudVN0eWxlKCku
Zm9udCgpLnByaW1hcnlGb250KCkuZ2V0Q1RGb250KCk7CiAgICAgaWYgKCFmb250KQogICAgICAg
ICByZXR1cm47Ci0gICAgCi0gICAgQ0ZEaWN0aW9uYXJ5UmVmIGZvbnREZXNjcmlwdG9yQXR0cmli
dXRlcyA9IChDRkRpY3Rpb25hcnlSZWYpW1tmb250IGZvbnREZXNjcmlwdG9yXSBmb250QXR0cmli
dXRlc107Ci0gICAgaWYgKCFmb250RGVzY3JpcHRvckF0dHJpYnV0ZXMpCisKKyAgICBSZXRhaW5Q
dHI8Q1RGb250RGVzY3JpcHRvclJlZj4gZm9udERlc2NyaXB0b3IgPSBhZG9wdENGKENURm9udENv
cHlGb250RGVzY3JpcHRvcihmb250KSk7CisgICAgaWYgKCFmb250RGVzY3JpcHRvcikKKyAgICAg
ICAgcmV0dXJuOworCisgICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gYXR0cmlidXRlcyA9
IGFkb3B0Q0YoQ1RGb250RGVzY3JpcHRvckNvcHlBdHRyaWJ1dGVzKGZvbnREZXNjcmlwdG9yLmdl
dCgpKSk7CisgICAgaWYgKCFhdHRyaWJ1dGVzKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAg
ZGF0YS5mb250SW5mby5mb250QXR0cmlidXRlRGljdGlvbmFyeSA9IGZvbnREZXNjcmlwdG9yQXR0
cmlidXRlczsKKyAgICBkYXRhLmZvbnRJbmZvLmZvbnRBdHRyaWJ1dGVEaWN0aW9uYXJ5ID0gYXR0
cmlidXRlczsKICAgICBkYXRhLnNob3VsZFBvcE92ZXIgPSBtX3BvcHVwQ2xpZW50LT5zaG91bGRQ
b3BPdmVyKCk7CiAgICAgZGF0YS5oaWRlQXJyb3dzID0gIW1fcG9wdXBDbGllbnQtPm1lbnVTdHls
ZSgpLmhhc0RlZmF1bHRBcHBlYXJhbmNlKCk7CiAgICAgZGF0YS5tZW51U2l6ZSA9IG1fcG9wdXBD
bGllbnQtPm1lbnVTdHlsZSgpLm1lbnVTaXplKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0gYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KaW5kZXggMjhhZTZlOWEwYzNjYmYy
ZGNjMDA0NTRiZGMzNGE3NTVlN2Y2Zjg4My4uNzIwNDBlNDkwZTEwYWYzOTM3N2IxYTU5OTEwNWVj
ZDJkYTg3ZjUyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L21hYy9XZWJQYWdlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9tYWMvV2ViUGFnZU1hYy5tbQpAQCAtMzY0LDEwICszNjQsOSBAQCB2b2lkIFdlYlBhZ2U6OmZv
bnRBdFNlbGVjdGlvbih1aW50NjRfdCBjYWxsYmFja0lEKQogICAgIAogICAgIGlmICghZnJhbWUu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNOb25lKCkpIHsKICAgICAgICAgY29uc3QgRm9udCog
Zm9udCA9IGZyYW1lLmVkaXRvcigpLmZvbnRGb3JTZWxlY3Rpb24oc2VsZWN0aW9uSGFzTXVsdGlw
bGVGb250cyk7Ci0gICAgICAgIE5TRm9udCAqbnNGb250ID0gZm9udCA/IGZvbnQtPmdldE5TRm9u
dCgpIDogbmlsOwotICAgICAgICBpZiAobnNGb250KSB7Ci0gICAgICAgICAgICBmb250TmFtZSA9
IG5zRm9udC5mb250TmFtZTsKLSAgICAgICAgICAgIGZvbnRTaXplID0gbnNGb250LnBvaW50U2l6
ZTsKKyAgICAgICAgaWYgKENURm9udFJlZiBjdEZvbnQgPSBmb250ID8gZm9udC0+Z2V0Q1RGb250
KCkgOiBudWxscHRyKSB7CisgICAgICAgICAgICBmb250TmFtZSA9IGFkb3B0Q0YoQ1RGb250Q29w
eVBvc3RTY3JpcHROYW1lKGN0Rm9udCkpLmdldCgpOworICAgICAgICAgICAgZm9udFNpemUgPSBD
VEZvbnRHZXRTaXplKGN0Rm9udCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgc2VuZChNZXNzYWdl
czo6V2ViUGFnZVByb3h5OjpGb250QXRTZWxlY3Rpb25DYWxsYmFjayhmb250TmFtZSwgZm9udFNp
emUsIHNlbGVjdGlvbkhhc011bHRpcGxlRm9udHMsIGNhbGxiYWNrSUQpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>278373</attachid>
            <date>2016-05-08 14:36:06 -0700</date>
            <delta_ts>2016-05-08 14:39:19 -0700</delta_ts>
            <desc>Patch for committing</desc>
            <filename>bug-157464-20160508143651.patch</filename>
            <type>text/plain</type>
            <size>30811</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAwNTU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzUwZTg5MjgxN2Y5MWYy
MzU5MWM4NDExMGM4NzViYTMyNTE4NTRkYy4uNWIxMDE0MjAzMDZmYjc5YmI0Yjg4ZmIyODhjMmU0
MGRjOWMxMzI5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDE2LTA1LTA4ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW09TIFhdIE1p
Z3JhdGUgb3VyIEZvbnQgY2xhc3NlcyBlbnRpcmVseSBvZmYgb2YgTlNGb250CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTc0NjQKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCZWNhdXNlIE5TRm9udCBhbmQg
Q1RGb250IGFyZSB0b2xsLWZyZWUtYnJpZGdlZCwgd2UgZG9uJ3QgbmVlZCBOU0ZvbnQgYXQgYWxs
IGFueXdoZXJlLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBiZWNhdXNlIHRoZXJlIGlzIG5vIGJl
aGF2aW9yIGNoYW5nZS4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tOgorICAgICAgICAoYWNjZXNzaWJpbGl0eVNlYXJjaENy
aXRlcmlhRm9yU2VhcmNoUHJlZGljYXRlUGFyYW1ldGVyaXplZEF0dHJpYnV0ZSk6CisgICAgICAg
ICh0ZXh0TWFya2VyUmFuZ2VGcm9tUmFuZ2UpOgorICAgICAgICAodmlzaWJsZVBvc2l0aW9uRm9y
U3RhcnRPZlRleHRNYXJrZXJSYW5nZSk6CisgICAgICAgICh2aXNpYmxlUG9zaXRpb25Gb3JFbmRP
ZlRleHRNYXJrZXJSYW5nZSk6CisgICAgICAgIChBWEF0dHJpYnV0ZWRTdHJpbmdSYW5nZUlzVmFs
aWQpOgorICAgICAgICAoQVhBdHRyaWJ1dGVTdHJpbmdTZXRGb250KToKKyAgICAgICAgKENyZWF0
ZUNHQ29sb3JJZkRpZmZlcmVudCk6CisgICAgICAgIChBWEF0dHJpYnV0ZVN0cmluZ1NldFN0eWxl
KToKKyAgICAgICAgKHRleHRNYXJrZXJSYW5nZUZyb21WaXNpYmxlUG9zaXRpb25zKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9vYmpjL0RPTS5tbToKKyAgICAgICAgKC1bRE9NRWxlbWVudCBfZm9udF0p
OgorICAgICAgICAqIGJpbmRpbmdzL29iamMvRE9NUHJpdmF0ZS5oOgorICAgICAgICAqIGVkaXRp
bmcvY29jb2EvSFRNTENvbnZlcnRlci5tbToKKyAgICAgICAgKF9mb250KToKKyAgICAgICAgKFdl
YkNvcmU6OmVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlKToKKyAgICAgICAgKiBlZGl0
aW5nL21hYy9FZGl0b3JNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmZvbnRBdHRy
aWJ1dGVzRm9yU2VsZWN0aW9uU3RhcnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zv
bnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmdldENURm9udCk6CisgICAgICAgIChXZWJD
b3JlOjpGb250OjpnZXROU0ZvbnQpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRQbGF0Zm9ybURhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURh
dGE6Om5zRm9udCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
Rm9udENvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZGV0ZXJtaW5lUGl0Y2gpOgor
ICAgICAgICAoV2ViQ29yZTo6YWR2YW5jZUZvckNvbG9yQml0bWFwRm9udCk6CisgICAgICAgIChX
ZWJDb3JlOjpGb250OjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgpOgorICAgICAgICAoV2ViQ29yZTo6
cmVuZGVyaW5nU3R5bGUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nv
Y29hL0ZvbnRQbGF0Zm9ybURhdGFDb2NvYS5tbToKKwogMjAxNi0wNS0wOCAgRGF2aWQgS2lsemVy
ICA8ZGRraWx6ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFRocmVhZFNhbml0aXplcjogRGF0YSBy
YWNlIGFuZCB0aHJlYWQgbGVhayBpbiBXZWJDb3JlOjpTY3JvbGxpbmdUaHJlYWQ6OmNyZWF0ZVRo
cmVhZElmTmVlZGVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKaW5kZXggZDIzNTQxNDE3ODM2OTFhYjU2NmY2OWE4
OTk2NzgyOGY4YjAzM2Q3Ni4uZmVjNTkzY2Y0ZjI5M2JmZjI0NGMxODZlZjI2NzAyNmZiODE2Yzk4
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJLaXQvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDE2LTA1LTA4ICBNeWxlcyBD
LiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW09TIFhdIE1pZ3Jh
dGUgb3VyIEZvbnQgY2xhc3NlcyBlbnRpcmVseSBvZmYgb2YgTlNGb250CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTc0NjQKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1BvcHVw
TWVudU1hYy5tbToKKyAgICAgICAgKFBvcHVwTWVudU1hYzo6cG9wdWxhdGUpOgorICAgICAgICAo
UG9wdXBNZW51TWFjOjpzaG93KToKKyAgICAgICAgKiBXZWJWaWV3L1dlYkhUTUxWaWV3Lm1tOgor
ICAgICAgICAoZm9udE5hbWVGb3JEZXNjcmlwdGlvbik6CisgICAgICAgICgtW1dlYkhUTUxWaWV3
IF9hZGRUb1N0eWxlOmZvbnRBOmZvbnRCOl0pOgorCiAyMDE2LTA1LTA2ICBKb3NlcGggUGVjb3Jh
cm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CiAKICAgICAgICAgUmVuYW1lIEhpdFRlc3RSZXF1ZXN0
IERpc2FsbG93U2hhZG93Q29udGVudCB0byBEaXNhbGxvd1VzZXJBZ2VudFNoYWRvd0NvbnRlbnQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA3OTA5YjZiN2E1NWRkNDJlM2IzNTc3ZWFkZTI1MDY2NDdjM2FkYmQzLi5k
YmIzNWY2NmEyN2E1NjI5ZDgxODRiMzgyMzE4MzFhYjU4OTUwYjllIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTUgQEAKKzIwMTYtMDUtMDggIE15bGVzIEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFw
cGxlLmNvbT4KKworICAgICAgICBbT1MgWF0gTWlncmF0ZSBvdXIgRm9udCBjbGFzc2VzIGVudGly
ZWx5IG9mZiBvZiBOU0ZvbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE1NzQ2NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViUG9wdXBNZW51TWFj
Lm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnU6OnNldFVwUGxhdGZvcm1EYXRhKToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW06CisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2U6OmZvbnRBdFNlbGVjdGlvbik6CisKIDIwMTYtMDUtMDYgIEpvc2Vw
aCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW5hbWUgSGl0VGVz
dFJlcXVlc3QgRGlzYWxsb3dTaGFkb3dDb250ZW50IHRvIERpc2FsbG93VXNlckFnZW50U2hhZG93
Q29udGVudApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2Vi
QWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQppbmRleCA5MTBh
YzM2OTQ2MzU1ZTllN2FmNGU3OWEwN2JjYTk1NDIzZGNmMjk0Li5kN2IzNzQ0M2JhZTE5YWEzNmRk
ZjQ3ZGU0MjgxNmZlOGFiZjkzOGFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ck1hYy5tbQpAQCAtNzI0LDcgKzcyNCw3IEBAIHN0YXRpYyBBY2Nlc3NpYmlsaXR5U2VhcmNoQ3Jp
dGVyaWEgYWNjZXNzaWJpbGl0eVNlYXJjaENyaXRlcmlhRm9yU2VhcmNoUHJlZGljYXRlCiAgICAg
aWYgKFtzZWFyY2hUZXh0UGFyYW1ldGVyIGlzS2luZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNzXV0p
CiAgICAgICAgIHNlYXJjaFRleHQgPSBzZWFyY2hUZXh0UGFyYW1ldGVyOwogICAgIAotICAgIEFj
Y2Vzc2liaWxpdHlPYmplY3QgKnN0YXJ0RWxlbWVudCA9IG51bGxwdHI7CisgICAgQWNjZXNzaWJp
bGl0eU9iamVjdCogc3RhcnRFbGVtZW50ID0gbnVsbHB0cjsKICAgICBpZiAoW3N0YXJ0RWxlbWVu
dFBhcmFtZXRlciBpc0tpbmRPZkNsYXNzOltXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBj
bGFzc11dKQogICAgICAgICBzdGFydEVsZW1lbnQgPSBbc3RhcnRFbGVtZW50UGFyYW1ldGVyIGFj
Y2Vzc2liaWxpdHlPYmplY3RdOwogICAgIApAQCAtODMxLDcgKzgzMSw3IEBAIC0gKGlkKXRleHRN
YXJrZXJSYW5nZUZyb21SYW5nZTooY29uc3QgUmVmUHRyPFJhbmdlPilyYW5nZQogICAgIHJldHVy
biB0ZXh0TWFya2VyUmFuZ2VGcm9tUmFuZ2UobV9vYmplY3QtPmF4T2JqZWN0Q2FjaGUoKSwgcmFu
Z2UpOwogfQogCi1zdGF0aWMgaWQgdGV4dE1hcmtlclJhbmdlRnJvbVJhbmdlKEFYT2JqZWN0Q2Fj
aGUgKmNhY2hlLCBjb25zdCBSZWZQdHI8UmFuZ2U+IHJhbmdlKQorc3RhdGljIGlkIHRleHRNYXJr
ZXJSYW5nZUZyb21SYW5nZShBWE9iamVjdENhY2hlKiBjYWNoZSwgY29uc3QgUmVmUHRyPFJhbmdl
PiByYW5nZSkKIHsKICAgICBpZCBzdGFydFRleHRNYXJrZXIgPSBzdGFydE9yRW5kVGV4dG1hcmtl
ckZvclJhbmdlKGNhY2hlLCByYW5nZSwgdHJ1ZSk7CiAgICAgaWQgZW5kVGV4dE1hcmtlciA9IHN0
YXJ0T3JFbmRUZXh0bWFya2VyRm9yUmFuZ2UoY2FjaGUsIHJhbmdlLCBmYWxzZSk7CkBAIC05ODAs
MTIgKzk4MCwxMiBAQCAtIChWaXNpYmxlUG9zaXRpb24pdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1h
cmtlcjooaWQpdGV4dE1hcmtlcgogICAgIHJldHVybiB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFy
a2VyKG1fb2JqZWN0LT5heE9iamVjdENhY2hlKCksIHRleHRNYXJrZXIpOwogfQogCi1zdGF0aWMg
VmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbkZvclN0YXJ0T2ZUZXh0TWFya2VyUmFuZ2Uo
QVhPYmplY3RDYWNoZSAqY2FjaGUsIGlkIHRleHRNYXJrZXJSYW5nZSkKK3N0YXRpYyBWaXNpYmxl
UG9zaXRpb24gdmlzaWJsZVBvc2l0aW9uRm9yU3RhcnRPZlRleHRNYXJrZXJSYW5nZShBWE9iamVj
dENhY2hlKiBjYWNoZSwgaWQgdGV4dE1hcmtlclJhbmdlKQogewogICAgIHJldHVybiB2aXNpYmxl
UG9zaXRpb25Gb3JUZXh0TWFya2VyKGNhY2hlLCBBWFRleHRNYXJrZXJSYW5nZVN0YXJ0KHRleHRN
YXJrZXJSYW5nZSkpOwogfQogCi1zdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlv
bkZvckVuZE9mVGV4dE1hcmtlclJhbmdlKEFYT2JqZWN0Q2FjaGUgKmNhY2hlLCBpZCB0ZXh0TWFy
a2VyUmFuZ2UpCitzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbkZvckVuZE9m
VGV4dE1hcmtlclJhbmdlKEFYT2JqZWN0Q2FjaGUqIGNhY2hlLCBpZCB0ZXh0TWFya2VyUmFuZ2Up
CiB7CiAgICAgcmV0dXJuIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXIoY2FjaGUsIEFYVGV4
dE1hcmtlclJhbmdlRW5kKHRleHRNYXJrZXJSYW5nZSkpOwogfQpAQCAtMTAwMCwyMyArMTAwMCwy
MyBAQCBzdGF0aWMgaWQgdGV4dE1hcmtlclJhbmdlRnJvbU1hcmtlcnMoaWQgdGV4dE1hcmtlcjEs
IGlkIHRleHRNYXJrZXIyKQogCiAvLyBXaGVuIG1vZGlmeWluZyBhdHRyaWJ1dGVkIHN0cmluZ3Ms
IHRoZSByYW5nZSBjYW4gY29tZSBmcm9tIGEgc291cmNlIHdoaWNoIG1heSBwcm92aWRlIGZhdWx0
eSBpbmZvcm1hdGlvbiAoZS5nLiB0aGUgc3BlbGwgY2hlY2tlcikuCiAvLyBUbyBwcm90ZWN0IGFn
YWluc3Qgc3VjaCBjYXNlcyB0aGUgcmFuZ2Ugc2hvdWxkIGJlIHZhbGlkYXRlZCBiZWZvcmUgYWRk
aW5nIG9yIHJlbW92aW5nIGF0dHJpYnV0ZXMuCi1zdGF0aWMgQk9PTCBBWEF0dHJpYnV0ZWRTdHJp
bmdSYW5nZUlzVmFsaWQoTlNBdHRyaWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5nLCBOU1JhbmdlIHJh
bmdlKQorc3RhdGljIEJPT0wgQVhBdHRyaWJ1dGVkU3RyaW5nUmFuZ2VJc1ZhbGlkKE5TQXR0cmli
dXRlZFN0cmluZyAqYXR0clN0cmluZywgTlNSYW5nZSByYW5nZSkKIHsKICAgICByZXR1cm4gKHJh
bmdlLmxvY2F0aW9uIDwgW2F0dHJTdHJpbmcgbGVuZ3RoXSAmJiBOU01heFJhbmdlKHJhbmdlKSA8
PSBbYXR0clN0cmluZyBsZW5ndGhdKTsKIH0KIAotc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVTdHJp
bmdTZXRGb250KE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcqIGF0dHJTdHJpbmcsIE5TU3RyaW5n
KiBhdHRyaWJ1dGUsIE5TRm9udCogZm9udCwgTlNSYW5nZSByYW5nZSkKK3N0YXRpYyB2b2lkIEFY
QXR0cmlidXRlU3RyaW5nU2V0Rm9udChOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nICphdHRyU3Ry
aW5nLCBOU1N0cmluZyAqYXR0cmlidXRlLCBDVEZvbnRSZWYgZm9udCwgTlNSYW5nZSByYW5nZSkK
IHsKICAgICBpZiAoIUFYQXR0cmlidXRlZFN0cmluZ1JhbmdlSXNWYWxpZChhdHRyU3RyaW5nLCBy
YW5nZSkpCiAgICAgICAgIHJldHVybjsKLSAgICAKKwogICAgIGlmIChmb250KSB7Ci0gICAgICAg
IE5TRGljdGlvbmFyeSogZGljdCA9IFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3Rz
QW5kS2V5czoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb250IGZvbnROYW1lXSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBOU0FjY2Vzc2liaWxpdHlGb250TmFtZUtleSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb250IGZhbWlseU5hbWVdICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLCBOU0FjY2Vzc2liaWxpdHlGb250RmFtaWx5S2V5LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgW2ZvbnQgZGlzcGxheU5hbWVdICAgICAgICAgICAgICAg
ICAgICAgICAgICAsIE5TQWNjZXNzaWJpbGl0eVZpc2libGVOYW1lS2V5LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDpbZm9udCBwb2ludFNp
emVdXSAsIE5TQWNjZXNzaWJpbGl0eUZvbnRTaXplS2V5LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbmlsXTsKKyAgICAgICAgTlNEaWN0aW9uYXJ5ICpkaWN0ID0gW05TRGljdGlvbmFy
eSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOgorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
TlNTdHJpbmcgKj4oYWRvcHRDRihDVEZvbnRDb3B5UG9zdFNjcmlwdE5hbWUoZm9udCkpLmdldCgp
KSwgTlNBY2Nlc3NpYmlsaXR5Rm9udE5hbWVLZXksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxO
U1N0cmluZyAqPihhZG9wdENGKENURm9udENvcHlGYW1pbHlOYW1lKGZvbnQpKS5nZXQoKSksIE5T
QWNjZXNzaWJpbGl0eUZvbnRGYW1pbHlLZXksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxOU1N0
cmluZyAqPihhZG9wdENGKENURm9udENvcHlEaXNwbGF5TmFtZShmb250KSkuZ2V0KCkpLCBOU0Fj
Y2Vzc2liaWxpdHlWaXNpYmxlTmFtZUtleSwKKyAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJX
aXRoRmxvYXQ6Q1RGb250R2V0U2l6ZShmb250KV0sIE5TQWNjZXNzaWJpbGl0eUZvbnRTaXplS2V5
LAorICAgICAgICAgICAgbmlsXTsKICAgICAgICAgCiAgICAgICAgIFthdHRyU3RyaW5nIGFkZEF0
dHJpYnV0ZTphdHRyaWJ1dGUgdmFsdWU6ZGljdCByYW5nZTpyYW5nZV07CiAgICAgfSBlbHNlCkBA
IC0xMDI0LDEwICsxMDI0LDEwIEBAIHN0YXRpYyB2b2lkIEFYQXR0cmlidXRlU3RyaW5nU2V0Rm9u
dChOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5nLCBOU1N0CiAgICAgCiB9CiAK
LXN0YXRpYyBDR0NvbG9yUmVmIENyZWF0ZUNHQ29sb3JJZkRpZmZlcmVudChOU0NvbG9yKiBuc0Nv
bG9yLCBDR0NvbG9yUmVmIGV4aXN0aW5nQ29sb3IpCitzdGF0aWMgQ0dDb2xvclJlZiBDcmVhdGVD
R0NvbG9ySWZEaWZmZXJlbnQoTlNDb2xvciAqbnNDb2xvciwgQ0dDb2xvclJlZiBleGlzdGluZ0Nv
bG9yKQogewogICAgIC8vIGdldCBjb2xvciBpbmZvcm1hdGlvbiBhc3N1bWluZyBOU0RldmljZVJH
QkNvbG9yU3BhY2UKLSAgICBOU0NvbG9yKiByZ2JDb2xvciA9IFtuc0NvbG9yIGNvbG9yVXNpbmdD
b2xvclNwYWNlTmFtZTpOU0RldmljZVJHQkNvbG9yU3BhY2VdOworICAgIE5TQ29sb3IgKnJnYkNv
bG9yID0gW25zQ29sb3IgY29sb3JVc2luZ0NvbG9yU3BhY2VOYW1lOk5TRGV2aWNlUkdCQ29sb3JT
cGFjZV07CiAgICAgaWYgKHJnYkNvbG9yID09IG5pbCkKICAgICAgICAgcmdiQ29sb3IgPSBbTlND
b2xvciBibGFja0NvbG9yXTsKICAgICBDR0Zsb2F0IGNvbXBvbmVudHNbNF07CkBAIC0xMDc5LDcg
KzEwNzksNyBAQCBzdGF0aWMgdm9pZCBBWEF0dHJpYnV0ZVN0cmluZ1NldFN0eWxlKE5TTXV0YWJs
ZUF0dHJpYnV0ZWRTdHJpbmcqIGF0dHJTdHJpbmcsIFJlbgogICAgIGNvbnN0IFJlbmRlclN0eWxl
JiBzdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOwogICAgIAogICAgIC8vIHNldCBiYXNpYyBmb250
IGluZm8KLSAgICBBWEF0dHJpYnV0ZVN0cmluZ1NldEZvbnQoYXR0clN0cmluZywgTlNBY2Nlc3Np
YmlsaXR5Rm9udFRleHRBdHRyaWJ1dGUsIHN0eWxlLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQo
KS5nZXROU0ZvbnQoKSwgcmFuZ2UpOworICAgIEFYQXR0cmlidXRlU3RyaW5nU2V0Rm9udChhdHRy
U3RyaW5nLCBOU0FjY2Vzc2liaWxpdHlGb250VGV4dEF0dHJpYnV0ZSwgc3R5bGUuZm9udENhc2Nh
ZGUoKS5wcmltYXJ5Rm9udCgpLmdldENURm9udCgpLCByYW5nZSk7CiAgICAgCiAgICAgLy8gc2V0
IGJhc2ljIGNvbG9ycwogICAgIEFYQXR0cmlidXRlU3RyaW5nU2V0Q29sb3IoYXR0clN0cmluZywg
TlNBY2Nlc3NpYmlsaXR5Rm9yZWdyb3VuZENvbG9yVGV4dEF0dHJpYnV0ZSwgbnNDb2xvcihzdHls
ZS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcikpLCByYW5nZSk7CkBAIC0x
MzQ4LDcgKzEzNDgsNyBAQCAtIChOU0F0dHJpYnV0ZWRTdHJpbmcqKWRvQVhBdHRyaWJ1dGVkU3Ry
aW5nRm9yVGV4dE1hcmtlclJhbmdlOihpZCl0ZXh0TWFya2VyUmFuZwogICAgIHJldHVybiBbYXR0
clN0cmluZyBhdXRvcmVsZWFzZV07CiB9CiAKLXN0YXRpYyBpZCB0ZXh0TWFya2VyUmFuZ2VGcm9t
VmlzaWJsZVBvc2l0aW9ucyhBWE9iamVjdENhY2hlICpjYWNoZSwgY29uc3QgVmlzaWJsZVBvc2l0
aW9uJiBzdGFydFBvc2l0aW9uLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIGVuZFBvc2l0aW9uKQor
c3RhdGljIGlkIHRleHRNYXJrZXJSYW5nZUZyb21WaXNpYmxlUG9zaXRpb25zKEFYT2JqZWN0Q2Fj
aGUqIGNhY2hlLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIHN0YXJ0UG9zaXRpb24sIGNvbnN0IFZp
c2libGVQb3NpdGlvbiYgZW5kUG9zaXRpb24pCiB7CiAgICAgaWQgc3RhcnRUZXh0TWFya2VyID0g
dGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbihjYWNoZSwgc3RhcnRQb3NpdGlvbik7CiAgICAg
aWQgZW5kVGV4dE1hcmtlciA9IHRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb24oY2FjaGUsIGVu
ZFBvc2l0aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9N
Lm1tIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET00ubW0KaW5kZXggYTMyZjAzZWFm
Y2VjMWM5NTZlZWE1YzJjNDcwMDEwZGNiZGRjYjY1Yy4uNTA4NjljMjMxMjM2MWMyN2ZkMTY0Y2Rk
NDA0OGFkNDg0MzEyMDk2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2Jq
Yy9ET00ubW0KKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET00ubW0KQEAgLTcy
MSwyNCArNzIxLDEzIEBAIEBlbmQKIAogQGltcGxlbWVudGF0aW9uIERPTUVsZW1lbnQgKFdlYlBy
aXZhdGUpCiAKLSNpZiAhUExBVEZPUk0oSU9TKQotLSAoTlNGb250ICopX2ZvbnQKLXsKLSAgICAv
LyBGSVhNRTogQ291bGQgd2UgbW92ZSB0aGlzIGZ1bmN0aW9uIHRvIFdlYkNvcmU6OkVsZW1lbnQg
YW5kIGF1dG9nZW5lcmF0ZT8KLSAgICBhdXRvIHJlbmRlcmVyID0gY29yZShzZWxmKS0+cmVuZGVy
ZXIoKTsKLSAgICBpZiAoIXJlbmRlcmVyKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVy
biByZW5kZXJlci0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCkuZ2V0TlNGb250
KCk7Ci19Ci0jZWxzZQogLSAoQ1RGb250UmVmKV9mb250CiB7Ci0gICAgUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlciA9IGNvcmUoc2VsZiktPnJlbmRlcmVyKCk7CisgICAgYXV0byogcmVuZGVyZXIgPSBj
b3JlKHNlbGYpLT5yZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVy
biBuaWw7CiAgICAgcmV0dXJuIHJlbmRlcmVyLT5zdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFy
eUZvbnQoKS5nZXRDVEZvbnQoKTsKIH0KLSNlbmRpZgogCiAjaWYgIVBMQVRGT1JNKElPUykKIC0g
KE5TRGF0YSAqKV9pbWFnZVRJRkZSZXByZXNlbnRhdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvb2JqYy9ET01Qcml2YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9vYmpjL0RPTVByaXZhdGUuaAppbmRleCAxZTI5MzZkZDg5NGU1NjNjMjE3NjQyZjAyN2I4Y2Qy
ZTdjNGQ1MWNlLi43YWMyYzJlZmU1MGVhOGY3NjFlMWNmMzM3ZDc5MTQyN2RmMjBhYjMzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTVByaXZhdGUuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTVByaXZhdGUuaApAQCAtNzQsMTEgKzc0LDkg
QEAKIAogQGludGVyZmFjZSBET01FbGVtZW50IChXZWJQcml2YXRlKQogI2lmICFUQVJHRVRfT1Nf
SVBIT05FCi0tIChOU0ZvbnQgKilfZm9udDsKIC0gKE5TRGF0YSAqKV9pbWFnZVRJRkZSZXByZXNl
bnRhdGlvbjsKLSNlbHNlCi0tIChDVEZvbnRSZWYpX2ZvbnQ7CiAjZW5kaWYKKy0gKENURm9udFJl
ZilfZm9udDsKIC0gKE5TVVJMICopX2dldFVSTEF0dHJpYnV0ZTooTlNTdHJpbmcgKiluYW1lOwog
LSAoQk9PTClpc0ZvY3VzZWQ7CiBAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL2NvY29hL0hUTUxDb252ZXJ0ZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29h
L0hUTUxDb252ZXJ0ZXIubW0KaW5kZXggNWZhNDRhNjU0MmU1N2ZlYjI4NzA4MjM0NWIyNzYxYmYx
ODY5ZjMwNC4uMzMzZjhhZjJmODViNTZhNGRjM2ZmYTJmZThkYWM1Yjg4ZDU1MjE5MSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5tbQpAQCAtMTAzNCwy
MyArMTAzNCwxMyBAQCBQbGF0Zm9ybUNvbG9yICpIVE1MQ29udmVydGVyOjpfY29sb3JGb3JFbGVt
ZW50KEVsZW1lbnQmIGVsZW1lbnQsIENTU1Byb3BlcnR5SUQgcAogICAgIHJldHVybiBwbGF0Zm9y
bVJlc3VsdDsKIH0KIAotI2lmICFQTEFURk9STShJT1MpCi1zdGF0aWMgUGxhdGZvcm1Gb250ICpf
Zm9udChFbGVtZW50JiBlbGVtZW50KQotewotICAgIGF1dG8gcmVuZGVyZXIgPSBlbGVtZW50LnJl
bmRlcmVyKCk7Ci0gICAgaWYgKCFyZW5kZXJlcikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBy
ZXR1cm4gcmVuZGVyZXItPnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpLmdldE5T
Rm9udCgpOwotfQotI2Vsc2UKIHN0YXRpYyBQbGF0Zm9ybUZvbnQgKl9mb250KEVsZW1lbnQmIGVs
ZW1lbnQpCiB7Ci0gICAgYXV0byByZW5kZXJlciA9IGVsZW1lbnQucmVuZGVyZXIoKTsKKyAgICBh
dXRvKiByZW5kZXJlciA9IGVsZW1lbnQucmVuZGVyZXIoKSkKICAgICBpZiAoIXJlbmRlcmVyKQog
ICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiAoUGxhdGZvcm1Gb250ICopcmVuZGVyZXIt
PnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpLmdldENURm9udCgpOworICAgIHJl
dHVybiB0b05TRm9udChyZW5kZXJlci0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250
KCkuZ2V0Q1RGb250KCkpOwogfQotI2VuZGlmCiAKICNkZWZpbmUgVUlGbG9hdElzWmVybyhudW1i
ZXIpIChmYWJzKG51bWJlciAtIDApIDwgRkxUX0VQU0lMT04pCiAKQEAgLTI1MzUsOCArMjUyNSw4
IEBAIE5TQXR0cmlidXRlZFN0cmluZyAqZWRpdGluZ0F0dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2Uo
UmFuZ2UmIHJhbmdlLCBJbmNsdWRlSW1hZ2VzCiAgICAgICAgICAgICBbYXR0cnMuZ2V0KCkgc2V0
T2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoSW50ZWdlcjpOU1VuZGVybGluZVN0eWxlU2luZ2xl
XSBmb3JLZXk6TlNVbmRlcmxpbmVTdHlsZUF0dHJpYnV0ZU5hbWVdOwogICAgICAgICBpZiAoc3R5
bGUudGV4dERlY29yYXRpb25zSW5FZmZlY3QoKSAmIFRleHREZWNvcmF0aW9uTGluZVRocm91Z2gp
CiAgICAgICAgICAgICBbYXR0cnMuZ2V0KCkgc2V0T2JqZWN0OltOU051bWJlciBudW1iZXJXaXRo
SW50ZWdlcjpOU1VuZGVybGluZVN0eWxlU2luZ2xlXSBmb3JLZXk6TlNTdHJpa2V0aHJvdWdoU3R5
bGVBdHRyaWJ1dGVOYW1lXTsKLSAgICAgICAgaWYgKE5TRm9udCAqZm9udCA9IHN0eWxlLmZvbnRD
YXNjYWRlKCkucHJpbWFyeUZvbnQoKS5nZXROU0ZvbnQoKSkKLSAgICAgICAgICAgIFthdHRycy5n
ZXQoKSBzZXRPYmplY3Q6Zm9udCBmb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07CisgICAgICAg
IGlmIChhdXRvIGZvbnQgPSBzdHlsZS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCkuZ2V0Q1RG
b250KCkpCisgICAgICAgICAgICBbYXR0cnMuZ2V0KCkgc2V0T2JqZWN0OnRvTlNGb250KGZvbnQp
IGZvcktleTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAg
W2F0dHJzLmdldCgpIHNldE9iamVjdDpbZm9udE1hbmFnZXIgY29udmVydEZvbnQ6V2ViRGVmYXVs
dEZvbnQoKSB0b1NpemU6c3R5bGUuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpLnBsYXRmb3Jt
RGF0YSgpLnNpemUoKV0gZm9yS2V5Ok5TRm9udEF0dHJpYnV0ZU5hbWVdOwogICAgICAgICBpZiAo
c3R5bGUudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpLmFscGhhKCkpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0KaW5kZXggMTk1M2FjOWYyMjdmMjQy
NWY5ZGIzYTI2OWIwNjc2MThkMjYyYjBhNC4uMDgzNjYzNDcwYmI4ZTQwODcwM2Y1OGNlODUxOTA5
MTE3ZjE4M2RlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9y
TWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQpAQCAt
MTU1LDggKzE1NSw4IEBAIE5TRGljdGlvbmFyeSogRWRpdG9yOjpmb250QXR0cmlidXRlc0ZvclNl
bGVjdGlvblN0YXJ0KCkgY29uc3QKICAgICBpZiAoc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xv
cihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcikuaXNWYWxpZCgpICYmIHN0eWxlLT52aXNpdGVk
RGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpLmFscGhhKCkgIT0gMCkK
ICAgICAgICAgW3Jlc3VsdCBzZXRPYmplY3Q6bnNDb2xvcihzdHlsZS0+dmlzaXRlZERlcGVuZGVu
dENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKSkgZm9yS2V5Ok5TQmFja2dyb3VuZENv
bG9yQXR0cmlidXRlTmFtZV07CiAKLSAgICBpZiAoc3R5bGUtPmZvbnRDYXNjYWRlKCkucHJpbWFy
eUZvbnQoKS5nZXROU0ZvbnQoKSkKLSAgICAgICAgW3Jlc3VsdCBzZXRPYmplY3Q6c3R5bGUtPmZv
bnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKS5nZXROU0ZvbnQoKSBmb3JLZXk6TlNGb250QXR0cmli
dXRlTmFtZV07CisgICAgaWYgKGF1dG8gY3RGb250ID0gc3R5bGUtPmZvbnRDYXNjYWRlKCkucHJp
bWFyeUZvbnQoKS5nZXRDVEZvbnQoKSkKKyAgICAgICAgW3Jlc3VsdCBzZXRPYmplY3Q6dG9OU0Zv
bnQoY3RGb250KSBmb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07CiAKICAgICBpZiAoc3R5bGUt
PnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKS5pc1ZhbGlkKCkgJiYgc3R5
bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSAhPSBDb2xvcjo6Ymxh
Y2spCiAgICAgICAgIFtyZXN1bHQgc2V0T2JqZWN0Om5zQ29sb3Ioc3R5bGUtPnZpc2l0ZWREZXBl
bmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSkgZm9yS2V5Ok5TRm9yZWdyb3VuZENvbG9yQXR0
cmlidXRlTmFtZV07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgKaW5kZXgg
YThhYmQ1Y2EwMTY4MmIzM2UwNDA2Zjc5ZDI4ZWZhNzBhNTYyYjJhOC4uYjQ5YzRkNzAyOWQ3YmEw
YTY4OGI5Y2Q0Njk0Nzc5MGJlM2NmZDA0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnQuaApAQCAtMTcyLDE1ICsxNzIsMTEgQEAgcHVibGljOgogICAgIFN0cmluZyBkZXNj
cmlwdGlvbigpIGNvbnN0OwogI2VuZGlmCiAKLSNpZiBVU0UoQVBQS0lUKQotICAgIE5TRm9udCog
Z2V0TlNGb250KCkgY29uc3QgeyByZXR1cm4gbV9wbGF0Zm9ybURhdGEubnNGb250KCk7IH0KLSNl
bmRpZgotCiAjaWYgUExBVEZPUk0oSU9TKQotICAgIENURm9udFJlZiBnZXRDVEZvbnQoKSBjb25z
dCB7IHJldHVybiBtX3BsYXRmb3JtRGF0YS5mb250KCk7IH0KICAgICBib29sIHNob3VsZE5vdEJl
VXNlZEZvckFyYWJpYygpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkTm90QmVVc2VkRm9yQXJhYmlj
OyB9OwogI2VuZGlmCiAjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgQ1RGb250UmVmIGdldENURm9u
dCgpIGNvbnN0IHsgcmV0dXJuIG1fcGxhdGZvcm1EYXRhLmZvbnQoKTsgfQogICAgIENGRGljdGlv
bmFyeVJlZiBnZXRDRlN0cmluZ0F0dHJpYnV0ZXMoYm9vbCBlbmFibGVLZXJuaW5nLCBGb250T3Jp
ZW50YXRpb24pIGNvbnN0OwogICAgIGNvbnN0IEJpdFZlY3RvciYgZ2x5cGhzU3VwcG9ydGVkQnlT
bWFsbENhcHMoKSBjb25zdDsKICAgICBjb25zdCBCaXRWZWN0b3ImIGdseXBoc1N1cHBvcnRlZEJ5
QWxsU21hbGxDYXBzKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmgKaW5kZXggZDE2ZjZjMWE5M2E2ZTUyY2RmNTVkZmRl
ZTA2NGVmYzNiNzE5ZWJiYS4uM2NlMzhhNGZiOGI1ODQzMWJjZmU4ZTUyMmY5ZjQzMTBhMmMyYTAx
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRm
b3JtRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0
Zm9ybURhdGEuaApAQCAtMTMwLDExICsxMzAsNiBAQCBwdWJsaWM6CiAgICAgUmV0YWluUHRyPENG
VHlwZVJlZj4gb2JqZWN0Rm9yRXF1YWxpdHlDaGVjaygpIGNvbnN0OwogCiAgICAgYm9vbCBoYXND
dXN0b21UcmFja2luZygpIGNvbnN0IHsgcmV0dXJuIGlzU3lzdGVtRm9udCgpOyB9Ci0KLSNpZiBV
U0UoQVBQS0lUKQotICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhpcyB3aGVuIGFsbCBOU0ZvbnQgdXNh
Z2UgaXMgcmVtb3ZlZC4KLSAgICBOU0ZvbnQgKm5zRm9udCgpIGNvbnN0IHsgcmV0dXJuIChOU0Zv
bnQgKiltX2ZvbnQuZ2V0KCk7IH0KLSNlbmRpZgogI2VuZGlmCiAKICNpZiBQTEFURk9STShXSU4p
IHx8IFBMQVRGT1JNKENPQ09BKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29jb2EvRm9udENvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY29jb2EvRm9udENvY29hLm1tCmluZGV4IDdmZTBjMmUxOGI0ZDJkNjYzZmM2YmFmMTlj
NTRkZmU0OTRhMzYzNDguLjA5Y2IyNDhhZmEyOTg0Yjg0NTQ3ZmI5MmZhMmE0YjlkYjhkNWZjZmEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRD
b2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250
Q29jb2EubW0KQEAgLTUyNyw4ICs1MjcsOSBAQCBSZWZQdHI8Rm9udD4gRm9udDo6cGxhdGZvcm1D
cmVhdGVTY2FsZWRGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGZsb2F0IHNjYWxlRgogCiB2
b2lkIEZvbnQ6OmRldGVybWluZVBpdGNoKCkKIHsKLSNpZiBVU0UoQVBQS0lUKQotICAgIE5TRm9u
dCogZiA9IG1fcGxhdGZvcm1EYXRhLm5zRm9udCgpOworICAgIENURm9udFJlZiBjdEZvbnQgPSBt
X3BsYXRmb3JtRGF0YS5mb250KCk7CisgICAgQVNTRVJUKGN0Rm9udCk7CisKICAgICAvLyBTcGVj
aWFsIGNhc2UgT3Nha2EtTW9uby4KICAgICAvLyBBY2NvcmRpbmcgdG8gPHJkYXI6Ly9wcm9ibGVt
LzM5OTk0Njc+LCB3ZSBzaG91bGQgdHJlYXQgT3Nha2EtTW9ubyBhcyBmaXhlZCBwaXRjaC4KICAg
ICAvLyBOb3RlIHRoYXQgdGhlIEFwcEtpdCBkb2VzIG5vdCByZXBvcnQgT3Nha2EtTW9ubyBhcyBm
aXhlZCBwaXRjaC4KQEAgLTU0MSwxOCArNTQyLDExIEBAIHZvaWQgRm9udDo6ZGV0ZXJtaW5lUGl0
Y2goKQogICAgIC8vIEFjY29yZGluZyB0byA8cmRhcjovL3Byb2JsZW0vNTQ1NDcwND4sIHdlIHNo
b3VsZCBub3QgdHJlYXQgTW9ub3R5cGVDb3JzaXZhIGFzIGZpeGVkIHBpdGNoLgogICAgIC8vIE5v
dGUgdGhhdCBBcHBLaXQgZG9lcyByZXBvcnQgTW9ub3R5cGVDb3JzaXZhIGFzIGZpeGVkIHBpdGNo
LgogCi0gICAgTlNTdHJpbmcgKm5hbWUgPSBbZiBmb250TmFtZV07Ci0gICAgbV90cmVhdEFzRml4
ZWRQaXRjaCA9IChbZiBpc0ZpeGVkUGl0Y2hdICB8fCBbZiBfaXNGYWtlRml4ZWRQaXRjaF0gfHwg
W25hbWUgY2FzZUluc2Vuc2l0aXZlQ29tcGFyZTpAIk9zYWthLU1vbm8iXSA9PSBOU09yZGVyZWRT
YW1lKSAmJiBbbmFtZSBjYXNlSW5zZW5zaXRpdmVDb21wYXJlOkAiTVMtUEdvdGhpYyJdICE9IE5T
T3JkZXJlZFNhbWUgJiYgW25hbWUgY2FzZUluc2Vuc2l0aXZlQ29tcGFyZTpAIk1vbm90eXBlQ29y
c2l2YSJdICE9IE5TT3JkZXJlZFNhbWU7Ci0jZWxzZQotICAgIENURm9udFJlZiBjdEZvbnQgPSBt
X3BsYXRmb3JtRGF0YS5mb250KCk7Ci0gICAgbV90cmVhdEFzRml4ZWRQaXRjaCA9IGZhbHNlOwot
ICAgIGlmICghY3RGb250KQotICAgICAgICByZXR1cm47IC8vIENURm9udCBpcyBudWxsIGluIHRo
ZSBjYXNlIG9mIFNWRyBmb250cyBmb3IgZXhhbXBsZS4KLQogICAgIFJldGFpblB0cjxDRlN0cmlu
Z1JlZj4gZnVsbE5hbWUgPSBhZG9wdENGKENURm9udENvcHlGdWxsTmFtZShjdEZvbnQpKTsKICAg
ICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGZhbWlseU5hbWUgPSBhZG9wdENGKENURm9udENvcHlG
YW1pbHlOYW1lKGN0Rm9udCkpOwogCi0gICAgbV90cmVhdEFzRml4ZWRQaXRjaCA9IENHRm9udElz
Rml4ZWRQaXRjaChtX3BsYXRmb3JtRGF0YS5jZ0ZvbnQoKSkgfHwgKGZ1bGxOYW1lICYmIChDRlN0
cmluZ0NvbXBhcmUoZnVsbE5hbWUuZ2V0KCksIENGU1RSKCJPc2FrYS1Nb25vIiksIGtDRkNvbXBh
cmVDYXNlSW5zZW5zaXRpdmUpID09IGtDRkNvbXBhcmVFcXVhbFRvIHx8IENGU3RyaW5nQ29tcGFy
ZShmdWxsTmFtZS5nZXQoKSwgQ0ZTVFIoIk1TLVBHb3RoaWMiKSwga0NGQ29tcGFyZUNhc2VJbnNl
bnNpdGl2ZSkgPT0ga0NGQ29tcGFyZUVxdWFsVG8pKTsKKyAgICBtX3RyZWF0QXNGaXhlZFBpdGNo
ID0gKENURm9udEdldFN5bWJvbGljVHJhaXRzKGN0Rm9udCkgJiBrQ1RGb250TW9ub1NwYWNlVHJh
aXQpIHx8IENHRm9udElzRml4ZWRQaXRjaChtX3BsYXRmb3JtRGF0YS5jZ0ZvbnQoKSkgfHwgKGZ1
bGxOYW1lICYmIChDRlN0cmluZ0NvbXBhcmUoZnVsbE5hbWUuZ2V0KCksIENGU1RSKCJPc2FrYS1N
b25vIiksIGtDRkNvbXBhcmVDYXNlSW5zZW5zaXRpdmUpID09IGtDRkNvbXBhcmVFcXVhbFRvIHx8
IENGU3RyaW5nQ29tcGFyZShmdWxsTmFtZS5nZXQoKSwgQ0ZTVFIoIk1TLVBHb3RoaWMiKSwga0NG
Q29tcGFyZUNhc2VJbnNlbnNpdGl2ZSkgPT0ga0NGQ29tcGFyZUVxdWFsVG8gfHwgQ0ZTdHJpbmdD
b21wYXJlKGZ1bGxOYW1lLmdldCgpLCBDRlNUUigiTW9ub3R5cGVDb3JzaXZhIiksIGtDRkNvbXBh
cmVDYXNlSW5zZW5zaXRpdmUpID09IGtDRkNvbXBhcmVFcXVhbFRvKSk7CisjaWYgUExBVEZPUk0o
SU9TKQogICAgIGlmIChmYW1pbHlOYW1lICYmIENGU3RyaW5nQ29tcGFyZShmYW1pbHlOYW1lLmdl
dCgpLCBDRlNUUigiQ291cmllciBOZXciKSwga0NGQ29tcGFyZUNhc2VJbnNlbnNpdGl2ZSkgPT0g
a0NGQ29tcGFyZUVxdWFsVG8pIHsKICAgICAgICAgLy8gU3BlY2lhbCBjYXNlIENvdXJpZXIgTmV3
IHRvIG5vdCBiZSB0cmVhdGVkIGFzIGZpeGVkIHBpdGNoLCBhcyB0aGlzIHdpbGwgbWFrZSB1c2Ug
b2YgYSBoYWNrZWQgc3BhY2Ugd2lkdGggd2hpY2ggaXMgdW5kZXNpcmVhYmxlIGZvciBpUGhvbmUg
KHNlZSByZGFyOi8vNjI2OTc4MykuCiAgICAgICAgIG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPSBmYWxz
ZTsKQEAgLTU3MSw0MyArNTY1LDE0IEBAIEZsb2F0UmVjdCBGb250OjpwbGF0Zm9ybUJvdW5kc0Zv
ckdseXBoKEdseXBoIGdseXBoKSBjb25zdAogICAgIHJldHVybiBib3VuZGluZ0JveDsKIH0KIAot
c3RhdGljIGlubGluZSBDR0ZvbnRSZW5kZXJpbmdTdHlsZSByZW5kZXJpbmdTdHlsZShjb25zdCBG
b250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEpCi17Ci0jaWYgVVNFKEFQUEtJVCkKLSAgICBD
R0ZvbnRSZW5kZXJpbmdTdHlsZSBzdHlsZSA9IGtDR0ZvbnRSZW5kZXJpbmdTdHlsZUFudGlhbGlh
c2luZyB8IGtDR0ZvbnRSZW5kZXJpbmdTdHlsZVN1YnBpeGVsUG9zaXRpb25pbmcgfCBrQ0dGb250
UmVuZGVyaW5nU3R5bGVTdWJwaXhlbFF1YW50aXphdGlvbjsKLSAgICBOU0ZvbnQgKmZvbnQgPSBw
bGF0Zm9ybURhdGEubnNGb250KCk7Ci0gICAgaWYgKGZvbnQpIHsKLSAgICAgICAgc3dpdGNoIChb
Zm9udCByZW5kZXJpbmdNb2RlXSkgewotICAgICAgICBjYXNlIE5TRm9udEludGVnZXJBZHZhbmNl
bWVudHNSZW5kZXJpbmdNb2RlOgotICAgICAgICAgICAgc3R5bGUgPSAwOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgTlNGb250QW50aWFsaWFzZWRJbnRlZ2VyQWR2YW5jZW1lbnRz
UmVuZGVyaW5nTW9kZToKLSAgICAgICAgICAgIHN0eWxlID0ga0NHRm9udFJlbmRlcmluZ1N0eWxl
QW50aWFsaWFzaW5nOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gc3R5bGU7Ci0KLSNl
bHNlCi0gICAgVU5VU0VEX1BBUkFNKHBsYXRmb3JtRGF0YSk7Ci0gICAgcmV0dXJuIGtDR0ZvbnRS
ZW5kZXJpbmdTdHlsZUFudGlhbGlhc2luZyB8IGtDR0ZvbnRSZW5kZXJpbmdTdHlsZVN1YnBpeGVs
UG9zaXRpb25pbmcgfCBrQ0dGb250UmVuZGVyaW5nU3R5bGVTdWJwaXhlbFF1YW50aXphdGlvbiB8
IGtDR0ZvbnRBbnRpYWxpYXNpbmdTdHlsZVVuZmlsdGVyZWQ7Ci0jZW5kaWYKLX0KLQogc3RhdGlj
IGlubGluZSBPcHRpb25hbDxDR1NpemU+IGFkdmFuY2VGb3JDb2xvckJpdG1hcEZvbnQoY29uc3Qg
Rm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhLCBHbHlwaCBnbHlwaCkKIHsKLSNpZiBQTEFU
Rk9STShNQUMpCi0gICAgTlNGb250ICpmb250ID0gcGxhdGZvcm1EYXRhLm5zRm9udCgpOworICAg
IENURm9udFJlZiBmb250ID0gcGxhdGZvcm1EYXRhLmZvbnQoKTsKICAgICBpZiAoIWZvbnQgfHwg
IXBsYXRmb3JtRGF0YS5pc0NvbG9yQml0bWFwRm9udCgpKQogICAgICAgICByZXR1cm4gTnVsbG9w
dDsKLSAgICByZXR1cm4gTlNTaXplVG9DR1NpemUoW2ZvbnQgYWR2YW5jZW1lbnRGb3JHbHlwaDpn
bHlwaF0pOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0ocGxhdGZvcm1EYXRhKTsKLSAgICBVTlVT
RURfUEFSQU0oZ2x5cGgpOwotICAgIHJldHVybiBOdWxsb3B0OwotI2VuZGlmCisgICAgQ0dTaXpl
IGFkdmFuY2U7CisgICAgQ1RGb250R2V0QWR2YW5jZXNGb3JHbHlwaHMoZm9udCwga0NURm9udE9y
aWVudGF0aW9uRGVmYXVsdCwgJmdseXBoLCAmYWR2YW5jZSwgMSk7CisgICAgcmV0dXJuIGFkdmFu
Y2U7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBjYW5Vc2VGYXN0R2x5cGhBZHZhbmNlR2V0dGVy
KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSwgR2x5cGggZ2x5cGgsIENHU2l6
ZSYgYWR2YW5jZSwgYm9vbCYgcG9wdWxhdGVkQWR2YW5jZSkKQEAgLTYzMCw3ICs1OTUsOCBAQCBm
bG9hdCBGb250OjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CiAgICAg
aWYgKChob3Jpem9udGFsIHx8IG1faXNCcm9rZW5JZGVvZ3JhcGhGYWxsYmFjaykgJiYgY2FuVXNl
RmFzdEdseXBoQWR2YW5jZUdldHRlcih0aGlzLT5wbGF0Zm9ybURhdGEoKSwgZ2x5cGgsIGFkdmFu
Y2UsIHBvcHVsYXRlZEFkdmFuY2UpKSB7CiAgICAgICAgIGZsb2F0IHBvaW50U2l6ZSA9IHBsYXRm
b3JtRGF0YSgpLnNpemUoKTsKICAgICAgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gbSA9IENHQWZmaW5l
VHJhbnNmb3JtTWFrZVNjYWxlKHBvaW50U2l6ZSwgcG9pbnRTaXplKTsKLSAgICAgICAgaWYgKCFD
R0ZvbnRHZXRHbHlwaEFkdmFuY2VzRm9yU3R5bGUocGxhdGZvcm1EYXRhKCkuY2dGb250KCksICZt
LCByZW5kZXJpbmdTdHlsZShwbGF0Zm9ybURhdGEoKSksICZnbHlwaCwgMSwgJmFkdmFuY2UpKSB7
CisgICAgICAgIENHRm9udFJlbmRlcmluZ1N0eWxlIHJlbmRlcmluZ1N0eWxlID0ga0NHRm9udFJl
bmRlcmluZ1N0eWxlQW50aWFsaWFzaW5nIHwga0NHRm9udFJlbmRlcmluZ1N0eWxlU3VicGl4ZWxQ
b3NpdGlvbmluZyB8IGtDR0ZvbnRSZW5kZXJpbmdTdHlsZVN1YnBpeGVsUXVhbnRpemF0aW9uIHwg
a0NHRm9udEFudGlhbGlhc2luZ1N0eWxlVW5maWx0ZXJlZDsKKyAgICAgICAgaWYgKCFDR0ZvbnRH
ZXRHbHlwaEFkdmFuY2VzRm9yU3R5bGUocGxhdGZvcm1EYXRhKCkuY2dGb250KCksICZtLCByZW5k
ZXJpbmdTdHlsZSwgJmdseXBoLCAxLCAmYWR2YW5jZSkpIHsKICAgICAgICAgICAgIFJldGFpblB0
cjxDRlN0cmluZ1JlZj4gZnVsbE5hbWUgPSBhZG9wdENGKENHRm9udENvcHlGdWxsTmFtZShwbGF0
Zm9ybURhdGEoKS5jZ0ZvbnQoKSkpOwogICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8g
Y2FjaGUgZ2x5cGggd2lkdGhzIGZvciAlQCAlZiIsIGZ1bGxOYW1lLmdldCgpLCBwb2ludFNpemUp
OwogICAgICAgICAgICAgYWR2YW5jZS53aWR0aCA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250UGxhdGZvcm1EYXRhQ29jb2EubW0gYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250UGxhdGZvcm1EYXRhQ29j
b2EubW0KaW5kZXggZDg2MTgzN2RkZmRlZDhhMzYxYTEyNzY0NjU1OWI0NWNhMmE0ODcxNC4uYmM2
NThjNmZhZDliZmViZmFmZGI4MGI3NDc4ZGI2NzQwNTJhZTE1MyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1t
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9y
bURhdGFDb2NvYS5tbQpAQCAtMjksOSArMjksNyBAQAogI2ltcG9ydCAiV2ViQ29yZVN5c3RlbUlu
dGVyZmFjZS5oIgogI2ltcG9ydCA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKLSNpZiAhUExBVEZP
Uk0oSU9TKQotI2ltcG9ydCA8QXBwS2l0L05TRm9udC5oPgotI2Vsc2UKKyNpZiBQTEFURk9STShJ
T1MpCiAjaW1wb3J0ICJDb3JlR3JhcGhpY3NTUEkuaCIKICNpbXBvcnQgPENvcmVUZXh0L0NvcmVU
ZXh0Lmg+CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBw
b3J0L1BvcHVwTWVudU1hYy5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1Bv
cHVwTWVudU1hYy5tbQppbmRleCA2ZDJjZTE2MjEzZTY4YjA1OTI5YjM1ZjIyMDU5ZTk5MmVlZjZj
ZWI3Li5mZmUwMTdmZGEyMzAxZDJiYTMyZWYwODNlODg0YTEyZjY1ZDkyNGUzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9Qb3B1cE1lbnVNYWMubW0KKysrIGIv
U291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvUG9wdXBNZW51TWFjLm1tCkBAIC04MSwx
MiArODEsMTIgQEAgdm9pZCBQb3B1cE1lbnVNYWM6OnBvcHVsYXRlKCkKICAgICAgICAgUG9wdXBN
ZW51U3R5bGUgc3R5bGUgPSBtX2NsaWVudC0+aXRlbVN0eWxlKGkpOwogICAgICAgICBSZXRhaW5Q
dHI8TlNNdXRhYmxlRGljdGlvbmFyeT4gYXR0cmlidXRlcyA9IGFkb3B0TlMoW1tOU011dGFibGVE
aWN0aW9uYXJ5IGFsbG9jXSBpbml0XSk7CiAgICAgICAgIGlmIChzdHlsZS5mb250KCkgIT0gRm9u
dENhc2NhZGUoKSkgewotICAgICAgICAgICAgTlNGb250ICpmb250ID0gc3R5bGUuZm9udCgpLnBy
aW1hcnlGb250KCkuZ2V0TlNGb250KCk7CisgICAgICAgICAgICBSZXRhaW5QdHI8Q1RGb250UmVm
PiBmb250ID0gc3R5bGUuZm9udCgpLnByaW1hcnlGb250KCkuZ2V0Q1RGb250KCk7CiAgICAgICAg
ICAgICBpZiAoIWZvbnQpIHsKICAgICAgICAgICAgICAgICBDR0Zsb2F0IHNpemUgPSBzdHlsZS5m
b250KCkucHJpbWFyeUZvbnQoKS5wbGF0Zm9ybURhdGEoKS5zaXplKCk7Ci0gICAgICAgICAgICAg
ICAgZm9udCA9IHN0eWxlLmZvbnQoKS53ZWlnaHQoKSA8IEZvbnRXZWlnaHRCb2xkID8gW05TRm9u
dCBzeXN0ZW1Gb250T2ZTaXplOnNpemVdIDogW05TRm9udCBib2xkU3lzdGVtRm9udE9mU2l6ZTpz
aXplXTsKKyAgICAgICAgICAgICAgICBmb250ID0gc3R5bGUuZm9udCgpLndlaWdodCgpIDwgRm9u
dFdlaWdodEJvbGQgPyBhZG9wdENGKENURm9udENyZWF0ZVVJRm9udEZvckxhbmd1YWdlKGtDVEZv
bnRVSUZvbnRTeXN0ZW0sIHNpemUsIG51bGxwdHIpKSA6IGFkb3B0Q0YoQ1RGb250Q3JlYXRlVUlG
b250Rm9yTGFuZ3VhZ2Uoa0NURm9udFVJRm9udEVtcGhhc2l6ZWRTeXN0ZW0sIHNpemUsIG51bGxw
dHIpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFthdHRyaWJ1dGVzIHNldE9iamVjdDpm
b250IGZvcktleTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKKyAgICAgICAgICAgIFthdHRyaWJ1dGVz
IHNldE9iamVjdDp0b05TRm9udChmb250LmdldCgpKSBmb3JLZXk6TlNGb250QXR0cmlidXRlTmFt
ZV07CiAgICAgICAgIH0KIAogICAgICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlUGFyYWdyYXBoU3R5
bGU+IHBhcmFncmFwaFN0eWxlID0gYWRvcHROUyhbW05TUGFyYWdyYXBoU3R5bGUgZGVmYXVsdFBh
cmFncmFwaFN0eWxlXSBtdXRhYmxlQ29weV0pOwpAQCAtMTU0LDEzICsxNTQsMTMgQEAgdm9pZCBQ
b3B1cE1lbnVNYWM6OnNob3coY29uc3QgSW50UmVjdCYgciwgRnJhbWVWaWV3KiB2LCBpbnQgaW5k
ZXgpCiAgICAgW21fcG9wdXAgc2VsZWN0SXRlbUF0SW5kZXg6aW5kZXhdOwogICAgIFttX3BvcHVw
IHNldFVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb246dGV4dERpcmVjdGlvbiA9PSBMVFIgPyBO
U1VzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb25MZWZ0VG9SaWdodCA6IE5TVXNlckludGVyZmFj
ZUxheW91dERpcmVjdGlvblJpZ2h0VG9MZWZ0XTsKIAotICAgIE5TTWVudSogbWVudSA9IFttX3Bv
cHVwIG1lbnVdOworICAgIE5TTWVudSAqbWVudSA9IFttX3BvcHVwIG1lbnVdOwogI2lmIF9fTUFD
X09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMTAwCiAgICAgW21lbnUgc2V0VXNlcklu
dGVyZmFjZUxheW91dERpcmVjdGlvbjp0ZXh0RGlyZWN0aW9uID09IExUUiA/IE5TVXNlckludGVy
ZmFjZUxheW91dERpcmVjdGlvbkxlZnRUb1JpZ2h0IDogTlNVc2VySW50ZXJmYWNlTGF5b3V0RGly
ZWN0aW9uUmlnaHRUb0xlZnRdOwogI2VuZGlmCiAKICAgICBOU1BvaW50IGxvY2F0aW9uOwotICAg
IE5TRm9udCogZm9udCA9IG1fY2xpZW50LT5tZW51U3R5bGUoKS5mb250KCkucHJpbWFyeUZvbnQo
KS5nZXROU0ZvbnQoKTsKKyAgICBDVEZvbnRSZWYgZm9udCA9IG1fY2xpZW50LT5tZW51U3R5bGUo
KS5mb250KCkucHJpbWFyeUZvbnQoKS5nZXRDVEZvbnQoKTsKIAogICAgIC8vIFRoZXNlIHZhbHVl
cyB3ZXJlIGJvcnJvd2VkIGZyb20gQXBwS2l0IHRvIG1hdGNoIHRoZWlyIHBsYWNlbWVudCBvZiB0
aGUgbWVudS4KICAgICBjb25zdCBpbnQgcG9wT3Zlckhvcml6b250YWxBZGp1c3QgPSAtMTA7CkBA
IC0xNzIsOCArMTcyLDggQEAgdm9pZCBQb3B1cE1lbnVNYWM6OnNob3coY29uc3QgSW50UmVjdCYg
ciwgRnJhbWVWaWV3KiB2LCBpbnQgaW5kZXgpCiAgICAgICAgICAgICB0aXRsZUZyYW1lID0gcjsK
ICAgICAgICAgZmxvYXQgdmVydE9mZnNldCA9IHJvdW5kZigoTlNNYXhZKHIpIC0gTlNNYXhZKHRp
dGxlRnJhbWUpKSArIE5TSGVpZ2h0KHRpdGxlRnJhbWUpKTsKICAgICAgICAgLy8gQWRqdXN0IGZv
ciBmb250cyBvdGhlciB0aGFuIHRoZSBzeXN0ZW0gZm9udC4KLSAgICAgICAgTlNGb250KiBkZWZh
dWx0Rm9udCA9IFtOU0ZvbnQgc3lzdGVtRm9udE9mU2l6ZTpbZm9udCBwb2ludFNpemVdXTsKLSAg
ICAgICAgdmVydE9mZnNldCArPSBbZm9udCBkZXNjZW5kZXJdIC0gW2RlZmF1bHRGb250IGRlc2Nl
bmRlcl07CisgICAgICAgIGF1dG8gZGVmYXVsdEZvbnQgPSBhZG9wdENGKENURm9udENyZWF0ZVVJ
Rm9udEZvckxhbmd1YWdlKGtDVEZvbnRVSUZvbnRTeXN0ZW0sIENURm9udEdldFNpemUoZm9udCks
IG5pbCkpOworICAgICAgICB2ZXJ0T2Zmc2V0ICs9IENURm9udEdldERlc2NlbnQoZm9udCkgLSBD
VEZvbnRHZXREZXNjZW50KGRlZmF1bHRGb250LmdldCgpKTsKICAgICAgICAgdmVydE9mZnNldCA9
IGZtaW5mKE5TSGVpZ2h0KHIpLCB2ZXJ0T2Zmc2V0KTsKIAogICAgICAgICBmbG9hdCBob3Jpem9u
dGFsT2Zmc2V0ID0gdGV4dERpcmVjdGlvbiA9PSBMVFIgPyBwb3BPdmVySG9yaXpvbnRhbEFkanVz
dCA6IDA7CkBAIC0yMTUsNyArMjE1LDcgQEAgdm9pZCBQb3B1cE1lbnVNYWM6OnNob3coY29uc3Qg
SW50UmVjdCYgciwgRnJhbWVWaWV3KiB2LCBpbnQgaW5kZXgpCiAjcHJhZ21hIGNsYW5nIGRpYWdu
b3N0aWMgcG9wCiAgICAgfQogCi0gICAgV0tQb3B1cE1lbnUobWVudSwgbG9jYXRpb24sIHJvdW5k
ZihOU1dpZHRoKHIpKSwgZHVtbXlWaWV3LmdldCgpLCBpbmRleCwgZm9udCwgY29udHJvbFNpemUs
ICFtX2NsaWVudC0+bWVudVN0eWxlKCkuaGFzRGVmYXVsdEFwcGVhcmFuY2UoKSk7CisgICAgV0tQ
b3B1cE1lbnUobWVudSwgbG9jYXRpb24sIHJvdW5kZihOU1dpZHRoKHIpKSwgZHVtbXlWaWV3Lmdl
dCgpLCBpbmRleCwgdG9OU0ZvbnQoZm9udCksIGNvbnRyb2xTaXplLCAhbV9jbGllbnQtPm1lbnVT
dHlsZSgpLmhhc0RlZmF1bHRBcHBlYXJhbmNlKCkpOwogCiAgICAgW21fcG9wdXAgZGlzbWlzc1Bv
cFVwXTsKICAgICBbZHVtbXlWaWV3IHJlbW92ZUZyb21TdXBlcnZpZXddOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbSBiL1NvdXJjZS9XZWJLaXQv
bWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0KaW5kZXggMjg2ODMyY2ZhYjJiYjE3ZTUyN2Q1ZTk2
MTAzNTA3MzhjYzgwM2YyMy4uZWI1YTk2YWI2OTgzNGJjZTExOGIxZTE4Mjg2ZjM2ZjBhZmYyYjc1
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQor
KysgYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCkBAIC01NTk5LDE0
ICs1NTk5LDE0IEBAIC0gKE5TRm9udCAqKV9vcmlnaW5hbEZvbnRCCiAgICAgcmV0dXJuIFtbTlNG
b250TWFuYWdlciBzaGFyZWRGb250TWFuYWdlcl0gZm9udFdpdGhGYW1pbHk6QCJUaW1lcyIgdHJh
aXRzOk5TRm9udEl0YWxpY1RyYWl0IHdlaWdodDpTVEFOREFSRF9CT0xEX1dFSUdIVCBzaXplOjEy
LjBmXTsKIH0KIAotc3RhdGljIE5TU3RyaW5nICpmb250TmFtZUZvckRlc2NyaXB0aW9uKE5TU3Ry
aW5nICpmYW1pbHlOYW1lLCBCT09MIGl0YWxpYywgQk9PTCBib2xkKQorc3RhdGljIFJldGFpblB0
cjxDRlN0cmluZ1JlZj4gZm9udE5hbWVGb3JEZXNjcmlwdGlvbihOU1N0cmluZyAqZmFtaWx5TmFt
ZSwgQk9PTCBpdGFsaWMsIEJPT0wgYm9sZCkKIHsKICAgICAvLyBGaW5kIHRoZSBmb250IHRoZSBz
YW1lIHdheSB0aGUgcmVuZGVyaW5nIGNvZGUgd291bGQgbGF0ZXIgaWYgaXQgZW5jb3VudGVyZWQg
dGhpcyBDU1MuCiAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbjsKICAgICBmb250
RGVzY3JpcHRpb24uc2V0SXNJdGFsaWMoaXRhbGljKTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0
V2VpZ2h0KGJvbGQgPyBGb250V2VpZ2h0OTAwIDogRm9udFdlaWdodDUwMCk7CiAgICAgUmVmUHRy
PEZvbnQ+IGZvbnQgPSBGb250Q2FjaGU6OnNpbmdsZXRvbigpLmZvbnRGb3JGYW1pbHkoZm9udERl
c2NyaXB0aW9uLCBmYW1pbHlOYW1lKTsKLSAgICByZXR1cm4gW2ZvbnQtPnBsYXRmb3JtRGF0YSgp
Lm5zRm9udCgpIGZvbnROYW1lXTsKKyAgICByZXR1cm4gYWRvcHRDRihDVEZvbnRDb3B5UG9zdFNj
cmlwdE5hbWUoZm9udC0+Z2V0Q1RGb250KCkpKTsKIH0KIAogLSAodm9pZClfYWRkVG9TdHlsZToo
RE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiAqKXN0eWxlIGZvbnRBOihOU0ZvbnQgKilhIGZvbnRCOihO
U0ZvbnQgKiliCkBAIC01NjQ1LDggKzU2NDUsMTAgQEAgLSAodm9pZClfYWRkVG9TdHlsZTooRE9N
Q1NTU3R5bGVEZWNsYXJhdGlvbiAqKXN0eWxlIGZvbnRBOihOU0ZvbnQgKilhIGZvbnRCOihOU0YK
ICAgICAgICAgLy8gdGhlIFBvc3RzY3JpcHQgbmFtZS4KICAgICAgICAgLy8gSWYgd2UgZG9uJ3Qg
ZmluZCBhIGZvbnQgd2l0aCB0aGUgc2FtZSBQb3N0c2NyaXB0IG5hbWUsIHRoZW4gd2UnbGwgaGF2
ZSB0byB1c2UgdGhlCiAgICAgICAgIC8vIFBvc3RzY3JpcHQgbmFtZSB0byBtYWtlIHRoZSBDU1Mg
c3BlY2lmaWMgZW5vdWdoLgotICAgICAgICBpZiAoIVtmb250TmFtZUZvckRlc2NyaXB0aW9uKGFG
YW1pbHlOYW1lLCBhSXNJdGFsaWMsIGFJc0JvbGQpIGlzRXF1YWxUb1N0cmluZzpbYSBmb250TmFt
ZV1dKQotICAgICAgICAgICAgZmFtaWx5TmFtZUZvckNTUyA9IFthIGZvbnROYW1lXTsKKyAgICAg
ICAgYXV0byBmb250TmFtZSA9IGZvbnROYW1lRm9yRGVzY3JpcHRpb24oYUZhbWlseU5hbWUsIGFJ
c0l0YWxpYywgYUlzQm9sZCk7CisgICAgICAgIGF1dG8gYU5hbWUgPSBbYSBmb250TmFtZV07Cisg
ICAgICAgIGlmICghZm9udE5hbWUgfHwgIWFOYW1lIHx8ICFDRkVxdWFsKGZvbnROYW1lLmdldCgp
LCBzdGF0aWNfY2FzdDxDRlN0cmluZ1JlZj4oW2EgZm9udE5hbWVdKSkpCisgICAgICAgICAgICBm
YW1pbHlOYW1lRm9yQ1NTID0gYU5hbWU7CiAKICAgICAgICAgLy8gRklYTUU6IE5lZWQgbW9yZSBz
b3BoaXN0aWNhdGVkIGVzY2FwaW5nIGNvZGUgaWYgd2Ugd2FudCB0byBoYW5kbGUgZmFtaWx5IG5h
bWVzCiAgICAgICAgIC8vIHdpdGggY2hhcmFjdGVycyBsaWtlIHNpbmdsZSBxdW90ZSBvciBiYWNr
c2xhc2ggaW4gdGhlaXIgbmFtZXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJQb3B1cE1lbnVNYWMubW0gYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJQb3B1cE1lbnVNYWMubW0KaW5kZXgg
ZjcyN2M2ODVkMDEzMTNmN2RiMWFmZTFmMTlkMmQyYTIzM2IxODE3ZS4uNDE3MTkyMWEwMTdhNTRj
MTVhZmJmMDRkNTg5NDBmMzJlNjliNzZlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViUG9wdXBNZW51TWFjLm1tCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYlBvcHVwTWVudU1hYy5t
bQpAQCAtMzksMTUgKzM5LDE5IEBAIHZvaWQgV2ViUG9wdXBNZW51OjpzZXRVcFBsYXRmb3JtRGF0
YShjb25zdCBJbnRSZWN0JiwgUGxhdGZvcm1Qb3B1cE1lbnVEYXRhJiBkYXRhCiB7CiAjaWYgVVNF
KEFQUEtJVCkKICAgICAvLyBGSVhNRTogZm9udCB3aWxsIGJlIG5pbCBoZXJlIGZvciBjdXN0b20g
Zm9udHMsIHdlIHNob3VsZCBmaXggdGhhdC4KLSAgICBOU0ZvbnQgKmZvbnQgPSBtX3BvcHVwQ2xp
ZW50LT5tZW51U3R5bGUoKS5mb250KCkucHJpbWFyeUZvbnQoKS5nZXROU0ZvbnQoKTsKKyAgICBD
VEZvbnRSZWYgZm9udCA9IG1fcG9wdXBDbGllbnQtPm1lbnVTdHlsZSgpLmZvbnQoKS5wcmltYXJ5
Rm9udCgpLmdldENURm9udCgpOwogICAgIGlmICghZm9udCkKICAgICAgICAgcmV0dXJuOwotICAg
IAotICAgIENGRGljdGlvbmFyeVJlZiBmb250RGVzY3JpcHRvckF0dHJpYnV0ZXMgPSAoQ0ZEaWN0
aW9uYXJ5UmVmKVtbZm9udCBmb250RGVzY3JpcHRvcl0gZm9udEF0dHJpYnV0ZXNdOwotICAgIGlm
ICghZm9udERlc2NyaXB0b3JBdHRyaWJ1dGVzKQorCisgICAgYXV0byBmb250RGVzY3JpcHRvciA9
IGFkb3B0Q0YoQ1RGb250Q29weUZvbnREZXNjcmlwdG9yKGZvbnQpKTsKKyAgICBpZiAoIWZvbnRE
ZXNjcmlwdG9yKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIGF0dHJpYnV0ZXMgPSBhZG9w
dENGKENURm9udERlc2NyaXB0b3JDb3B5QXR0cmlidXRlcyhmb250RGVzY3JpcHRvci5nZXQoKSkp
OworICAgIGlmICghYXR0cmlidXRlcykKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGRhdGEu
Zm9udEluZm8uZm9udEF0dHJpYnV0ZURpY3Rpb25hcnkgPSBmb250RGVzY3JpcHRvckF0dHJpYnV0
ZXM7CisgICAgZGF0YS5mb250SW5mby5mb250QXR0cmlidXRlRGljdGlvbmFyeSA9IGF0dHJpYnV0
ZXM7CiAgICAgZGF0YS5zaG91bGRQb3BPdmVyID0gbV9wb3B1cENsaWVudC0+c2hvdWxkUG9wT3Zl
cigpOwogICAgIGRhdGEuaGlkZUFycm93cyA9ICFtX3BvcHVwQ2xpZW50LT5tZW51U3R5bGUoKS5o
YXNEZWZhdWx0QXBwZWFyYW5jZSgpOwogICAgIGRhdGEubWVudVNpemUgPSBtX3BvcHVwQ2xpZW50
LT5tZW51U3R5bGUoKS5tZW51U2l6ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCmluZGV4IDI4YWU2ZTlhMGMzY2JmMmRjYzAw
NDU0YmRjMzRhNzU1ZTdmNmY4ODMuLjk3MDQ1YjJiNTg3NzU3N2Y4ZjRlZWZmYjFiN2VkNTM2MTlk
ZWI2NTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMv
V2ViUGFnZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFj
L1dlYlBhZ2VNYWMubW0KQEAgLTM2MywxMSArMzYzLDExIEBAIHZvaWQgV2ViUGFnZTo6Zm9udEF0
U2VsZWN0aW9uKHVpbnQ2NF90IGNhbGxiYWNrSUQpCiAgICAgRnJhbWUmIGZyYW1lID0gbV9wYWdl
LT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKICAgICAKICAgICBpZiAo
IWZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzTm9uZSgpKSB7Ci0gICAgICAgIGNvbnN0
IEZvbnQqIGZvbnQgPSBmcmFtZS5lZGl0b3IoKS5mb250Rm9yU2VsZWN0aW9uKHNlbGVjdGlvbkhh
c011bHRpcGxlRm9udHMpOwotICAgICAgICBOU0ZvbnQgKm5zRm9udCA9IGZvbnQgPyBmb250LT5n
ZXROU0ZvbnQoKSA6IG5pbDsKLSAgICAgICAgaWYgKG5zRm9udCkgewotICAgICAgICAgICAgZm9u
dE5hbWUgPSBuc0ZvbnQuZm9udE5hbWU7Ci0gICAgICAgICAgICBmb250U2l6ZSA9IG5zRm9udC5w
b2ludFNpemU7CisgICAgICAgIGlmIChhdXRvKiBmb250ID0gZnJhbWUuZWRpdG9yKCkuZm9udEZv
clNlbGVjdGlvbihzZWxlY3Rpb25IYXNNdWx0aXBsZUZvbnRzKSkgeworICAgICAgICAgICAgaWYg
KGF1dG8gY3RGb250ID0gZm9udC0+Z2V0Q1RGb250KCkpIHsKKyAgICAgICAgICAgICAgICBmb250
TmFtZSA9IGFkb3B0Q0YoQ1RGb250Q29weVBvc3RTY3JpcHROYW1lKGN0Rm9udCkpLmdldCgpOwor
ICAgICAgICAgICAgICAgIGZvbnRTaXplID0gQ1RGb250R2V0U2l6ZShjdEZvbnQpOworICAgICAg
ICAgICAgfQogICAgICAgICB9CiAgICAgfQogICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94
eTo6Rm9udEF0U2VsZWN0aW9uQ2FsbGJhY2soZm9udE5hbWUsIGZvbnRTaXplLCBzZWxlY3Rpb25I
YXNNdWx0aXBsZUZvbnRzLCBjYWxsYmFja0lEKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>278374</attachid>
            <date>2016-05-08 14:39:22 -0700</date>
            <delta_ts>2016-05-08 15:32:58 -0700</delta_ts>
            <desc>Patch for committing</desc>
            <filename>bug-157464-20160508144007.patch</filename>
            <type>text/plain</type>
            <size>30802</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAwNTU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzUwZTg5MjgxN2Y5MWYy
MzU5MWM4NDExMGM4NzViYTMyNTE4NTRkYy4uZWEzN2Q3NzZkZmI0MTdhOTQyM2NhMTBkNjc3NTZm
YTJiZjliZTlmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDE2LTA1LTA4ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW09TIFhdIE1p
Z3JhdGUgb3VyIEZvbnQgY2xhc3NlcyBlbnRpcmVseSBvZmYgb2YgTlNGb250CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTc0NjQKKworICAgICAgICBS
ZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICBCZWNhdXNlIE5TRm9udCBhbmQgQ1RG
b250IGFyZSB0b2xsLWZyZWUtYnJpZGdlZCwgd2UgZG9uJ3QgbmVlZCBOU0ZvbnQgYXQgYWxsIGFu
eXdoZXJlLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBiZWNhdXNlIHRoZXJlIGlzIG5vIGJlaGF2
aW9yIGNoYW5nZS4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVyTWFjLm1tOgorICAgICAgICAoYWNjZXNzaWJpbGl0eVNlYXJjaENyaXRl
cmlhRm9yU2VhcmNoUHJlZGljYXRlUGFyYW1ldGVyaXplZEF0dHJpYnV0ZSk6CisgICAgICAgICh0
ZXh0TWFya2VyUmFuZ2VGcm9tUmFuZ2UpOgorICAgICAgICAodmlzaWJsZVBvc2l0aW9uRm9yU3Rh
cnRPZlRleHRNYXJrZXJSYW5nZSk6CisgICAgICAgICh2aXNpYmxlUG9zaXRpb25Gb3JFbmRPZlRl
eHRNYXJrZXJSYW5nZSk6CisgICAgICAgIChBWEF0dHJpYnV0ZWRTdHJpbmdSYW5nZUlzVmFsaWQp
OgorICAgICAgICAoQVhBdHRyaWJ1dGVTdHJpbmdTZXRGb250KToKKyAgICAgICAgKENyZWF0ZUNH
Q29sb3JJZkRpZmZlcmVudCk6CisgICAgICAgIChBWEF0dHJpYnV0ZVN0cmluZ1NldFN0eWxlKToK
KyAgICAgICAgKHRleHRNYXJrZXJSYW5nZUZyb21WaXNpYmxlUG9zaXRpb25zKToKKyAgICAgICAg
KiBiaW5kaW5ncy9vYmpjL0RPTS5tbToKKyAgICAgICAgKC1bRE9NRWxlbWVudCBfZm9udF0pOgor
ICAgICAgICAqIGJpbmRpbmdzL29iamMvRE9NUHJpdmF0ZS5oOgorICAgICAgICAqIGVkaXRpbmcv
Y29jb2EvSFRNTENvbnZlcnRlci5tbToKKyAgICAgICAgKF9mb250KToKKyAgICAgICAgKFdlYkNv
cmU6OmVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlKToKKyAgICAgICAgKiBlZGl0aW5n
L21hYy9FZGl0b3JNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmZvbnRBdHRyaWJ1
dGVzRm9yU2VsZWN0aW9uU3RhcnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmdldENURm9udCk6CisgICAgICAgIChXZWJDb3Jl
OjpGb250OjpnZXROU0ZvbnQpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0ZvbnRQbGF0Zm9ybURhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6
Om5zRm9udCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9u
dENvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZGV0ZXJtaW5lUGl0Y2gpOgorICAg
ICAgICAoV2ViQ29yZTo6YWR2YW5jZUZvckNvbG9yQml0bWFwRm9udCk6CisgICAgICAgIChXZWJD
b3JlOjpGb250OjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgpOgorICAgICAgICAoV2ViQ29yZTo6cmVu
ZGVyaW5nU3R5bGUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29h
L0ZvbnRQbGF0Zm9ybURhdGFDb2NvYS5tbToKKwogMjAxNi0wNS0wOCAgRGF2aWQgS2lsemVyICA8
ZGRraWx6ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFRocmVhZFNhbml0aXplcjogRGF0YSByYWNl
IGFuZCB0aHJlYWQgbGVhayBpbiBXZWJDb3JlOjpTY3JvbGxpbmdUaHJlYWQ6OmNyZWF0ZVRocmVh
ZElmTmVlZGVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKaW5kZXggZDIzNTQxNDE3ODM2OTFhYjU2NmY2OWE4OTk2
NzgyOGY4YjAzM2Q3Ni4uMTYwZGQ3OGVkYzdhMjU5OTg0MTRiMzdkMTgxZGFkNmJiNDE3MTA0NyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJL
aXQvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDE2LTA1LTA4ICBNeWxlcyBDLiBN
YXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW09TIFhdIE1pZ3JhdGUg
b3VyIEZvbnQgY2xhc3NlcyBlbnRpcmVseSBvZmYgb2YgTlNGb250CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTc0NjQKKworICAgICAgICBSZXZpZXdl
ZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1BvcHVwTWVudU1h
Yy5tbToKKyAgICAgICAgKFBvcHVwTWVudU1hYzo6cG9wdWxhdGUpOgorICAgICAgICAoUG9wdXBN
ZW51TWFjOjpzaG93KToKKyAgICAgICAgKiBXZWJWaWV3L1dlYkhUTUxWaWV3Lm1tOgorICAgICAg
ICAoZm9udE5hbWVGb3JEZXNjcmlwdGlvbik6CisgICAgICAgICgtW1dlYkhUTUxWaWV3IF9hZGRU
b1N0eWxlOmZvbnRBOmZvbnRCOl0pOgorCiAyMDE2LTA1LTA2ICBKb3NlcGggUGVjb3Jhcm8gIDxw
ZWNvcmFyb0BhcHBsZS5jb20+CiAKICAgICAgICAgUmVuYW1lIEhpdFRlc3RSZXF1ZXN0IERpc2Fs
bG93U2hhZG93Q29udGVudCB0byBEaXNhbGxvd1VzZXJBZ2VudFNoYWRvd0NvbnRlbnQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZwppbmRleCA3OTA5YjZiN2E1NWRkNDJlM2IzNTc3ZWFkZTI1MDY2NDdjM2FkYmQzLi5kMDcyZGFj
ZTc2YWM3ZTc5MThhMzk3ZWQ3MmY0Y2RhN2EyYzY4MDM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTUgQEAKKzIwMTYtMDUtMDggIE15bGVzIEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNv
bT4KKworICAgICAgICBbT1MgWF0gTWlncmF0ZSBvdXIgRm9udCBjbGFzc2VzIGVudGlyZWx5IG9m
ZiBvZiBOU0ZvbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE1NzQ2NAorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViUG9wdXBNZW51TWFjLm1tOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnU6OnNldFVwUGxhdGZvcm1EYXRhKToKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW06CisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2U6OmZvbnRBdFNlbGVjdGlvbik6CisKIDIwMTYtMDUtMDYgIEpvc2VwaCBQZWNvcmFy
byAgPHBlY29yYXJvQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW5hbWUgSGl0VGVzdFJlcXVlc3Qg
RGlzYWxsb3dTaGFkb3dDb250ZW50IHRvIERpc2FsbG93VXNlckFnZW50U2hhZG93Q29udGVudApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXJNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21h
Yy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQppbmRleCA5MTBhYzM2OTQ2MzU1
ZTllN2FmNGU3OWEwN2JjYTk1NDIzZGNmMjk0Li5kN2IzNzQ0M2JhZTE5YWEzNmRkZjQ3ZGU0Mjgx
NmZlOGFiZjkzOGFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21h
Yy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQpA
QCAtNzI0LDcgKzcyNCw3IEBAIHN0YXRpYyBBY2Nlc3NpYmlsaXR5U2VhcmNoQ3JpdGVyaWEgYWNj
ZXNzaWJpbGl0eVNlYXJjaENyaXRlcmlhRm9yU2VhcmNoUHJlZGljYXRlCiAgICAgaWYgKFtzZWFy
Y2hUZXh0UGFyYW1ldGVyIGlzS2luZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNzXV0pCiAgICAgICAg
IHNlYXJjaFRleHQgPSBzZWFyY2hUZXh0UGFyYW1ldGVyOwogICAgIAotICAgIEFjY2Vzc2liaWxp
dHlPYmplY3QgKnN0YXJ0RWxlbWVudCA9IG51bGxwdHI7CisgICAgQWNjZXNzaWJpbGl0eU9iamVj
dCogc3RhcnRFbGVtZW50ID0gbnVsbHB0cjsKICAgICBpZiAoW3N0YXJ0RWxlbWVudFBhcmFtZXRl
ciBpc0tpbmRPZkNsYXNzOltXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBjbGFzc11dKQog
ICAgICAgICBzdGFydEVsZW1lbnQgPSBbc3RhcnRFbGVtZW50UGFyYW1ldGVyIGFjY2Vzc2liaWxp
dHlPYmplY3RdOwogICAgIApAQCAtODMxLDcgKzgzMSw3IEBAIC0gKGlkKXRleHRNYXJrZXJSYW5n
ZUZyb21SYW5nZTooY29uc3QgUmVmUHRyPFJhbmdlPilyYW5nZQogICAgIHJldHVybiB0ZXh0TWFy
a2VyUmFuZ2VGcm9tUmFuZ2UobV9vYmplY3QtPmF4T2JqZWN0Q2FjaGUoKSwgcmFuZ2UpOwogfQog
Ci1zdGF0aWMgaWQgdGV4dE1hcmtlclJhbmdlRnJvbVJhbmdlKEFYT2JqZWN0Q2FjaGUgKmNhY2hl
LCBjb25zdCBSZWZQdHI8UmFuZ2U+IHJhbmdlKQorc3RhdGljIGlkIHRleHRNYXJrZXJSYW5nZUZy
b21SYW5nZShBWE9iamVjdENhY2hlKiBjYWNoZSwgY29uc3QgUmVmUHRyPFJhbmdlPiByYW5nZSkK
IHsKICAgICBpZCBzdGFydFRleHRNYXJrZXIgPSBzdGFydE9yRW5kVGV4dG1hcmtlckZvclJhbmdl
KGNhY2hlLCByYW5nZSwgdHJ1ZSk7CiAgICAgaWQgZW5kVGV4dE1hcmtlciA9IHN0YXJ0T3JFbmRU
ZXh0bWFya2VyRm9yUmFuZ2UoY2FjaGUsIHJhbmdlLCBmYWxzZSk7CkBAIC05ODAsMTIgKzk4MCwx
MiBAQCAtIChWaXNpYmxlUG9zaXRpb24pdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcjooaWQp
dGV4dE1hcmtlcgogICAgIHJldHVybiB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyKG1fb2Jq
ZWN0LT5heE9iamVjdENhY2hlKCksIHRleHRNYXJrZXIpOwogfQogCi1zdGF0aWMgVmlzaWJsZVBv
c2l0aW9uIHZpc2libGVQb3NpdGlvbkZvclN0YXJ0T2ZUZXh0TWFya2VyUmFuZ2UoQVhPYmplY3RD
YWNoZSAqY2FjaGUsIGlkIHRleHRNYXJrZXJSYW5nZSkKK3N0YXRpYyBWaXNpYmxlUG9zaXRpb24g
dmlzaWJsZVBvc2l0aW9uRm9yU3RhcnRPZlRleHRNYXJrZXJSYW5nZShBWE9iamVjdENhY2hlKiBj
YWNoZSwgaWQgdGV4dE1hcmtlclJhbmdlKQogewogICAgIHJldHVybiB2aXNpYmxlUG9zaXRpb25G
b3JUZXh0TWFya2VyKGNhY2hlLCBBWFRleHRNYXJrZXJSYW5nZVN0YXJ0KHRleHRNYXJrZXJSYW5n
ZSkpOwogfQogCi1zdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbkZvckVuZE9m
VGV4dE1hcmtlclJhbmdlKEFYT2JqZWN0Q2FjaGUgKmNhY2hlLCBpZCB0ZXh0TWFya2VyUmFuZ2Up
CitzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbkZvckVuZE9mVGV4dE1hcmtl
clJhbmdlKEFYT2JqZWN0Q2FjaGUqIGNhY2hlLCBpZCB0ZXh0TWFya2VyUmFuZ2UpCiB7CiAgICAg
cmV0dXJuIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXIoY2FjaGUsIEFYVGV4dE1hcmtlclJh
bmdlRW5kKHRleHRNYXJrZXJSYW5nZSkpOwogfQpAQCAtMTAwMCwyMyArMTAwMCwyMyBAQCBzdGF0
aWMgaWQgdGV4dE1hcmtlclJhbmdlRnJvbU1hcmtlcnMoaWQgdGV4dE1hcmtlcjEsIGlkIHRleHRN
YXJrZXIyKQogCiAvLyBXaGVuIG1vZGlmeWluZyBhdHRyaWJ1dGVkIHN0cmluZ3MsIHRoZSByYW5n
ZSBjYW4gY29tZSBmcm9tIGEgc291cmNlIHdoaWNoIG1heSBwcm92aWRlIGZhdWx0eSBpbmZvcm1h
dGlvbiAoZS5nLiB0aGUgc3BlbGwgY2hlY2tlcikuCiAvLyBUbyBwcm90ZWN0IGFnYWluc3Qgc3Vj
aCBjYXNlcyB0aGUgcmFuZ2Ugc2hvdWxkIGJlIHZhbGlkYXRlZCBiZWZvcmUgYWRkaW5nIG9yIHJl
bW92aW5nIGF0dHJpYnV0ZXMuCi1zdGF0aWMgQk9PTCBBWEF0dHJpYnV0ZWRTdHJpbmdSYW5nZUlz
VmFsaWQoTlNBdHRyaWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5nLCBOU1JhbmdlIHJhbmdlKQorc3Rh
dGljIEJPT0wgQVhBdHRyaWJ1dGVkU3RyaW5nUmFuZ2VJc1ZhbGlkKE5TQXR0cmlidXRlZFN0cmlu
ZyAqYXR0clN0cmluZywgTlNSYW5nZSByYW5nZSkKIHsKICAgICByZXR1cm4gKHJhbmdlLmxvY2F0
aW9uIDwgW2F0dHJTdHJpbmcgbGVuZ3RoXSAmJiBOU01heFJhbmdlKHJhbmdlKSA8PSBbYXR0clN0
cmluZyBsZW5ndGhdKTsKIH0KIAotc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVTdHJpbmdTZXRGb250
KE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcqIGF0dHJTdHJpbmcsIE5TU3RyaW5nKiBhdHRyaWJ1
dGUsIE5TRm9udCogZm9udCwgTlNSYW5nZSByYW5nZSkKK3N0YXRpYyB2b2lkIEFYQXR0cmlidXRl
U3RyaW5nU2V0Rm9udChOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nICphdHRyU3RyaW5nLCBOU1N0
cmluZyAqYXR0cmlidXRlLCBDVEZvbnRSZWYgZm9udCwgTlNSYW5nZSByYW5nZSkKIHsKICAgICBp
ZiAoIUFYQXR0cmlidXRlZFN0cmluZ1JhbmdlSXNWYWxpZChhdHRyU3RyaW5nLCByYW5nZSkpCiAg
ICAgICAgIHJldHVybjsKLSAgICAKKwogICAgIGlmIChmb250KSB7Ci0gICAgICAgIE5TRGljdGlv
bmFyeSogZGljdCA9IFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czoK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb250IGZvbnROYW1lXSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLCBOU0FjY2Vzc2liaWxpdHlGb250TmFtZUtleSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFtmb250IGZhbWlseU5hbWVdICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLCBOU0FjY2Vzc2liaWxpdHlGb250RmFtaWx5S2V5LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgW2ZvbnQgZGlzcGxheU5hbWVdICAgICAgICAgICAgICAgICAgICAgICAg
ICAsIE5TQWNjZXNzaWJpbGl0eVZpc2libGVOYW1lS2V5LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDpbZm9udCBwb2ludFNpemVdXSAsIE5T
QWNjZXNzaWJpbGl0eUZvbnRTaXplS2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bmlsXTsKKyAgICAgICAgTlNEaWN0aW9uYXJ5ICpkaWN0ID0gW05TRGljdGlvbmFyeSBkaWN0aW9u
YXJ5V2l0aE9iamVjdHNBbmRLZXlzOgorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8TlNTdHJpbmcg
Kj4oYWRvcHRDRihDVEZvbnRDb3B5UG9zdFNjcmlwdE5hbWUoZm9udCkpLmdldCgpKSwgTlNBY2Nl
c3NpYmlsaXR5Rm9udE5hbWVLZXksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxOU1N0cmluZyAq
PihhZG9wdENGKENURm9udENvcHlGYW1pbHlOYW1lKGZvbnQpKS5nZXQoKSksIE5TQWNjZXNzaWJp
bGl0eUZvbnRGYW1pbHlLZXksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxOU1N0cmluZyAqPihh
ZG9wdENGKENURm9udENvcHlEaXNwbGF5TmFtZShmb250KSkuZ2V0KCkpLCBOU0FjY2Vzc2liaWxp
dHlWaXNpYmxlTmFtZUtleSwKKyAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6
Q1RGb250R2V0U2l6ZShmb250KV0sIE5TQWNjZXNzaWJpbGl0eUZvbnRTaXplS2V5LAorICAgICAg
ICAgICAgbmlsXTsKICAgICAgICAgCiAgICAgICAgIFthdHRyU3RyaW5nIGFkZEF0dHJpYnV0ZTph
dHRyaWJ1dGUgdmFsdWU6ZGljdCByYW5nZTpyYW5nZV07CiAgICAgfSBlbHNlCkBAIC0xMDI0LDEw
ICsxMDI0LDEwIEBAIHN0YXRpYyB2b2lkIEFYQXR0cmlidXRlU3RyaW5nU2V0Rm9udChOU011dGFi
bGVBdHRyaWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5nLCBOU1N0CiAgICAgCiB9CiAKLXN0YXRpYyBD
R0NvbG9yUmVmIENyZWF0ZUNHQ29sb3JJZkRpZmZlcmVudChOU0NvbG9yKiBuc0NvbG9yLCBDR0Nv
bG9yUmVmIGV4aXN0aW5nQ29sb3IpCitzdGF0aWMgQ0dDb2xvclJlZiBDcmVhdGVDR0NvbG9ySWZE
aWZmZXJlbnQoTlNDb2xvciAqbnNDb2xvciwgQ0dDb2xvclJlZiBleGlzdGluZ0NvbG9yKQogewog
ICAgIC8vIGdldCBjb2xvciBpbmZvcm1hdGlvbiBhc3N1bWluZyBOU0RldmljZVJHQkNvbG9yU3Bh
Y2UKLSAgICBOU0NvbG9yKiByZ2JDb2xvciA9IFtuc0NvbG9yIGNvbG9yVXNpbmdDb2xvclNwYWNl
TmFtZTpOU0RldmljZVJHQkNvbG9yU3BhY2VdOworICAgIE5TQ29sb3IgKnJnYkNvbG9yID0gW25z
Q29sb3IgY29sb3JVc2luZ0NvbG9yU3BhY2VOYW1lOk5TRGV2aWNlUkdCQ29sb3JTcGFjZV07CiAg
ICAgaWYgKHJnYkNvbG9yID09IG5pbCkKICAgICAgICAgcmdiQ29sb3IgPSBbTlNDb2xvciBibGFj
a0NvbG9yXTsKICAgICBDR0Zsb2F0IGNvbXBvbmVudHNbNF07CkBAIC0xMDc5LDcgKzEwNzksNyBA
QCBzdGF0aWMgdm9pZCBBWEF0dHJpYnV0ZVN0cmluZ1NldFN0eWxlKE5TTXV0YWJsZUF0dHJpYnV0
ZWRTdHJpbmcqIGF0dHJTdHJpbmcsIFJlbgogICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSA9
IHJlbmRlcmVyLT5zdHlsZSgpOwogICAgIAogICAgIC8vIHNldCBiYXNpYyBmb250IGluZm8KLSAg
ICBBWEF0dHJpYnV0ZVN0cmluZ1NldEZvbnQoYXR0clN0cmluZywgTlNBY2Nlc3NpYmlsaXR5Rm9u
dFRleHRBdHRyaWJ1dGUsIHN0eWxlLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKS5nZXROU0Zv
bnQoKSwgcmFuZ2UpOworICAgIEFYQXR0cmlidXRlU3RyaW5nU2V0Rm9udChhdHRyU3RyaW5nLCBO
U0FjY2Vzc2liaWxpdHlGb250VGV4dEF0dHJpYnV0ZSwgc3R5bGUuZm9udENhc2NhZGUoKS5wcmlt
YXJ5Rm9udCgpLmdldENURm9udCgpLCByYW5nZSk7CiAgICAgCiAgICAgLy8gc2V0IGJhc2ljIGNv
bG9ycwogICAgIEFYQXR0cmlidXRlU3RyaW5nU2V0Q29sb3IoYXR0clN0cmluZywgTlNBY2Nlc3Np
YmlsaXR5Rm9yZWdyb3VuZENvbG9yVGV4dEF0dHJpYnV0ZSwgbnNDb2xvcihzdHlsZS52aXNpdGVk
RGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcikpLCByYW5nZSk7CkBAIC0xMzQ4LDcgKzEz
NDgsNyBAQCAtIChOU0F0dHJpYnV0ZWRTdHJpbmcqKWRvQVhBdHRyaWJ1dGVkU3RyaW5nRm9yVGV4
dE1hcmtlclJhbmdlOihpZCl0ZXh0TWFya2VyUmFuZwogICAgIHJldHVybiBbYXR0clN0cmluZyBh
dXRvcmVsZWFzZV07CiB9CiAKLXN0YXRpYyBpZCB0ZXh0TWFya2VyUmFuZ2VGcm9tVmlzaWJsZVBv
c2l0aW9ucyhBWE9iamVjdENhY2hlICpjYWNoZSwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBzdGFy
dFBvc2l0aW9uLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIGVuZFBvc2l0aW9uKQorc3RhdGljIGlk
IHRleHRNYXJrZXJSYW5nZUZyb21WaXNpYmxlUG9zaXRpb25zKEFYT2JqZWN0Q2FjaGUqIGNhY2hl
LCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIHN0YXJ0UG9zaXRpb24sIGNvbnN0IFZpc2libGVQb3Np
dGlvbiYgZW5kUG9zaXRpb24pCiB7CiAgICAgaWQgc3RhcnRUZXh0TWFya2VyID0gdGV4dE1hcmtl
ckZvclZpc2libGVQb3NpdGlvbihjYWNoZSwgc3RhcnRQb3NpdGlvbik7CiAgICAgaWQgZW5kVGV4
dE1hcmtlciA9IHRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb24oY2FjaGUsIGVuZFBvc2l0aW9u
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NLm1tIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET00ubW0KaW5kZXggYTMyZjAzZWFmY2VjMWM5NTZl
ZWE1YzJjNDcwMDEwZGNiZGRjYjY1Yy4uNTA4NjljMjMxMjM2MWMyN2ZkMTY0Y2RkNDA0OGFkNDg0
MzEyMDk2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET00ubW0K
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET00ubW0KQEAgLTcyMSwyNCArNzIx
LDEzIEBAIEBlbmQKIAogQGltcGxlbWVudGF0aW9uIERPTUVsZW1lbnQgKFdlYlByaXZhdGUpCiAK
LSNpZiAhUExBVEZPUk0oSU9TKQotLSAoTlNGb250ICopX2ZvbnQKLXsKLSAgICAvLyBGSVhNRTog
Q291bGQgd2UgbW92ZSB0aGlzIGZ1bmN0aW9uIHRvIFdlYkNvcmU6OkVsZW1lbnQgYW5kIGF1dG9n
ZW5lcmF0ZT8KLSAgICBhdXRvIHJlbmRlcmVyID0gY29yZShzZWxmKS0+cmVuZGVyZXIoKTsKLSAg
ICBpZiAoIXJlbmRlcmVyKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiByZW5kZXJl
ci0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCkuZ2V0TlNGb250KCk7Ci19Ci0j
ZWxzZQogLSAoQ1RGb250UmVmKV9mb250CiB7Ci0gICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9
IGNvcmUoc2VsZiktPnJlbmRlcmVyKCk7CisgICAgYXV0byogcmVuZGVyZXIgPSBjb3JlKHNlbGYp
LT5yZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVybiBuaWw7CiAg
ICAgcmV0dXJuIHJlbmRlcmVyLT5zdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKS5n
ZXRDVEZvbnQoKTsKIH0KLSNlbmRpZgogCiAjaWYgIVBMQVRGT1JNKElPUykKIC0gKE5TRGF0YSAq
KV9pbWFnZVRJRkZSZXByZXNlbnRhdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvb2JqYy9ET01Qcml2YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RP
TVByaXZhdGUuaAppbmRleCAxZTI5MzZkZDg5NGU1NjNjMjE3NjQyZjAyN2I4Y2QyZTdjNGQ1MWNl
Li43YWMyYzJlZmU1MGVhOGY3NjFlMWNmMzM3ZDc5MTQyN2RmMjBhYjMzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTVByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9vYmpjL0RPTVByaXZhdGUuaApAQCAtNzQsMTEgKzc0LDkgQEAKIAogQGlu
dGVyZmFjZSBET01FbGVtZW50IChXZWJQcml2YXRlKQogI2lmICFUQVJHRVRfT1NfSVBIT05FCi0t
IChOU0ZvbnQgKilfZm9udDsKIC0gKE5TRGF0YSAqKV9pbWFnZVRJRkZSZXByZXNlbnRhdGlvbjsK
LSNlbHNlCi0tIChDVEZvbnRSZWYpX2ZvbnQ7CiAjZW5kaWYKKy0gKENURm9udFJlZilfZm9udDsK
IC0gKE5TVVJMICopX2dldFVSTEF0dHJpYnV0ZTooTlNTdHJpbmcgKiluYW1lOwogLSAoQk9PTClp
c0ZvY3VzZWQ7CiBAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29h
L0hUTUxDb252ZXJ0ZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0hUTUxDb252
ZXJ0ZXIubW0KaW5kZXggNWZhNDRhNjU0MmU1N2ZlYjI4NzA4MjM0NWIyNzYxYmYxODY5ZjMwNC4u
MzMzZjhhZjJmODViNTZhNGRjM2ZmYTJmZThkYWM1Yjg4ZDU1MjE5MSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5tbQpAQCAtMTAzNCwyMyArMTAzNCwx
MyBAQCBQbGF0Zm9ybUNvbG9yICpIVE1MQ29udmVydGVyOjpfY29sb3JGb3JFbGVtZW50KEVsZW1l
bnQmIGVsZW1lbnQsIENTU1Byb3BlcnR5SUQgcAogICAgIHJldHVybiBwbGF0Zm9ybVJlc3VsdDsK
IH0KIAotI2lmICFQTEFURk9STShJT1MpCi1zdGF0aWMgUGxhdGZvcm1Gb250ICpfZm9udChFbGVt
ZW50JiBlbGVtZW50KQotewotICAgIGF1dG8gcmVuZGVyZXIgPSBlbGVtZW50LnJlbmRlcmVyKCk7
Ci0gICAgaWYgKCFyZW5kZXJlcikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1cm4gcmVu
ZGVyZXItPnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpLmdldE5TRm9udCgpOwot
fQotI2Vsc2UKIHN0YXRpYyBQbGF0Zm9ybUZvbnQgKl9mb250KEVsZW1lbnQmIGVsZW1lbnQpCiB7
Ci0gICAgYXV0byByZW5kZXJlciA9IGVsZW1lbnQucmVuZGVyZXIoKTsKKyAgICBhdXRvKiByZW5k
ZXJlciA9IGVsZW1lbnQucmVuZGVyZXIoKSkKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICBy
ZXR1cm4gbmlsOwotICAgIHJldHVybiAoUGxhdGZvcm1Gb250ICopcmVuZGVyZXItPnN0eWxlKCku
Zm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpLmdldENURm9udCgpOworICAgIHJldHVybiB0b05T
Rm9udChyZW5kZXJlci0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCkuZ2V0Q1RG
b250KCkpOwogfQotI2VuZGlmCiAKICNkZWZpbmUgVUlGbG9hdElzWmVybyhudW1iZXIpIChmYWJz
KG51bWJlciAtIDApIDwgRkxUX0VQU0lMT04pCiAKQEAgLTI1MzUsOCArMjUyNSw4IEBAIE5TQXR0
cmlidXRlZFN0cmluZyAqZWRpdGluZ0F0dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2UoUmFuZ2UmIHJh
bmdlLCBJbmNsdWRlSW1hZ2VzCiAgICAgICAgICAgICBbYXR0cnMuZ2V0KCkgc2V0T2JqZWN0OltO
U051bWJlciBudW1iZXJXaXRoSW50ZWdlcjpOU1VuZGVybGluZVN0eWxlU2luZ2xlXSBmb3JLZXk6
TlNVbmRlcmxpbmVTdHlsZUF0dHJpYnV0ZU5hbWVdOwogICAgICAgICBpZiAoc3R5bGUudGV4dERl
Y29yYXRpb25zSW5FZmZlY3QoKSAmIFRleHREZWNvcmF0aW9uTGluZVRocm91Z2gpCiAgICAgICAg
ICAgICBbYXR0cnMuZ2V0KCkgc2V0T2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoSW50ZWdlcjpO
U1VuZGVybGluZVN0eWxlU2luZ2xlXSBmb3JLZXk6TlNTdHJpa2V0aHJvdWdoU3R5bGVBdHRyaWJ1
dGVOYW1lXTsKLSAgICAgICAgaWYgKE5TRm9udCAqZm9udCA9IHN0eWxlLmZvbnRDYXNjYWRlKCku
cHJpbWFyeUZvbnQoKS5nZXROU0ZvbnQoKSkKLSAgICAgICAgICAgIFthdHRycy5nZXQoKSBzZXRP
YmplY3Q6Zm9udCBmb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07CisgICAgICAgIGlmIChhdXRv
IGZvbnQgPSBzdHlsZS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCkuZ2V0Q1RGb250KCkpCisg
ICAgICAgICAgICBbYXR0cnMuZ2V0KCkgc2V0T2JqZWN0OnRvTlNGb250KGZvbnQpIGZvcktleTpO
U0ZvbnRBdHRyaWJ1dGVOYW1lXTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgW2F0dHJzLmdl
dCgpIHNldE9iamVjdDpbZm9udE1hbmFnZXIgY29udmVydEZvbnQ6V2ViRGVmYXVsdEZvbnQoKSB0
b1NpemU6c3R5bGUuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpLnBsYXRmb3JtRGF0YSgpLnNp
emUoKV0gZm9yS2V5Ok5TRm9udEF0dHJpYnV0ZU5hbWVdOwogICAgICAgICBpZiAoc3R5bGUudmlz
aXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpLmFscGhhKCkpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0gYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0KaW5kZXggMTk1M2FjOWYyMjdmMjQyNWY5ZGIzYTI2
OWIwNjc2MThkMjYyYjBhNC4uMDgzNjYzNDcwYmI4ZTQwODcwM2Y1OGNlODUxOTA5MTE3ZjE4M2Rl
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQpAQCAtMTU1LDggKzE1
NSw4IEBAIE5TRGljdGlvbmFyeSogRWRpdG9yOjpmb250QXR0cmlidXRlc0ZvclNlbGVjdGlvblN0
YXJ0KCkgY29uc3QKICAgICBpZiAoc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9w
ZXJ0eUJhY2tncm91bmRDb2xvcikuaXNWYWxpZCgpICYmIHN0eWxlLT52aXNpdGVkRGVwZW5kZW50
Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpLmFscGhhKCkgIT0gMCkKICAgICAgICAg
W3Jlc3VsdCBzZXRPYmplY3Q6bnNDb2xvcihzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENT
U1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKSkgZm9yS2V5Ok5TQmFja2dyb3VuZENvbG9yQXR0cmli
dXRlTmFtZV07CiAKLSAgICBpZiAoc3R5bGUtPmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKS5n
ZXROU0ZvbnQoKSkKLSAgICAgICAgW3Jlc3VsdCBzZXRPYmplY3Q6c3R5bGUtPmZvbnRDYXNjYWRl
KCkucHJpbWFyeUZvbnQoKS5nZXROU0ZvbnQoKSBmb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07
CisgICAgaWYgKGF1dG8gY3RGb250ID0gc3R5bGUtPmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQo
KS5nZXRDVEZvbnQoKSkKKyAgICAgICAgW3Jlc3VsdCBzZXRPYmplY3Q6dG9OU0ZvbnQoY3RGb250
KSBmb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07CiAKICAgICBpZiAoc3R5bGUtPnZpc2l0ZWRE
ZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKS5pc1ZhbGlkKCkgJiYgc3R5bGUtPnZpc2l0
ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSAhPSBDb2xvcjo6YmxhY2spCiAgICAg
ICAgIFtyZXN1bHQgc2V0T2JqZWN0Om5zQ29sb3Ioc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xv
cihDU1NQcm9wZXJ0eUNvbG9yKSkgZm9yS2V5Ok5TRm9yZWdyb3VuZENvbG9yQXR0cmlidXRlTmFt
ZV07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgKaW5kZXggYThhYmQ1Y2Ew
MTY4MmIzM2UwNDA2Zjc5ZDI4ZWZhNzBhNTYyYjJhOC4uYjQ5YzRkNzAyOWQ3YmEwYTY4OGI5Y2Q0
Njk0Nzc5MGJlM2NmZDA0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQu
aApAQCAtMTcyLDE1ICsxNzIsMTEgQEAgcHVibGljOgogICAgIFN0cmluZyBkZXNjcmlwdGlvbigp
IGNvbnN0OwogI2VuZGlmCiAKLSNpZiBVU0UoQVBQS0lUKQotICAgIE5TRm9udCogZ2V0TlNGb250
KCkgY29uc3QgeyByZXR1cm4gbV9wbGF0Zm9ybURhdGEubnNGb250KCk7IH0KLSNlbmRpZgotCiAj
aWYgUExBVEZPUk0oSU9TKQotICAgIENURm9udFJlZiBnZXRDVEZvbnQoKSBjb25zdCB7IHJldHVy
biBtX3BsYXRmb3JtRGF0YS5mb250KCk7IH0KICAgICBib29sIHNob3VsZE5vdEJlVXNlZEZvckFy
YWJpYygpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkTm90QmVVc2VkRm9yQXJhYmljOyB9OwogI2Vu
ZGlmCiAjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgQ1RGb250UmVmIGdldENURm9udCgpIGNvbnN0
IHsgcmV0dXJuIG1fcGxhdGZvcm1EYXRhLmZvbnQoKTsgfQogICAgIENGRGljdGlvbmFyeVJlZiBn
ZXRDRlN0cmluZ0F0dHJpYnV0ZXMoYm9vbCBlbmFibGVLZXJuaW5nLCBGb250T3JpZW50YXRpb24p
IGNvbnN0OwogICAgIGNvbnN0IEJpdFZlY3RvciYgZ2x5cGhzU3VwcG9ydGVkQnlTbWFsbENhcHMo
KSBjb25zdDsKICAgICBjb25zdCBCaXRWZWN0b3ImIGdseXBoc1N1cHBvcnRlZEJ5QWxsU21hbGxD
YXBzKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250UGxhdGZvcm1EYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250UGxhdGZvcm1EYXRhLmgKaW5kZXggZDE2ZjZjMWE5M2E2ZTUyY2RmNTVkZmRlZTA2NGVmYzNi
NzE5ZWJiYS4uM2NlMzhhNGZiOGI1ODQzMWJjZmU4ZTUyMmY5ZjQzMTBhMmMyYTAxZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEu
aApAQCAtMTMwLDExICsxMzAsNiBAQCBwdWJsaWM6CiAgICAgUmV0YWluUHRyPENGVHlwZVJlZj4g
b2JqZWN0Rm9yRXF1YWxpdHlDaGVjaygpIGNvbnN0OwogCiAgICAgYm9vbCBoYXNDdXN0b21UcmFj
a2luZygpIGNvbnN0IHsgcmV0dXJuIGlzU3lzdGVtRm9udCgpOyB9Ci0KLSNpZiBVU0UoQVBQS0lU
KQotICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhpcyB3aGVuIGFsbCBOU0ZvbnQgdXNhZ2UgaXMgcmVt
b3ZlZC4KLSAgICBOU0ZvbnQgKm5zRm9udCgpIGNvbnN0IHsgcmV0dXJuIChOU0ZvbnQgKiltX2Zv
bnQuZ2V0KCk7IH0KLSNlbmRpZgogI2VuZGlmCiAKICNpZiBQTEFURk9STShXSU4pIHx8IFBMQVRG
T1JNKENPQ09BKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29jb2EvRm9udENvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvRm9udENvY29hLm1tCmluZGV4IDdmZTBjMmUxOGI0ZDJkNjYzZmM2YmFmMTljNTRkZmU0OTRh
MzYzNDguLjA5Y2IyNDhhZmEyOTg0Yjg0NTQ3ZmI5MmZhMmE0YjlkYjhkNWZjZmEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDb2NvYS5tbQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q29jb2EubW0K
QEAgLTUyNyw4ICs1MjcsOSBAQCBSZWZQdHI8Rm9udD4gRm9udDo6cGxhdGZvcm1DcmVhdGVTY2Fs
ZWRGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGZsb2F0IHNjYWxlRgogCiB2b2lkIEZvbnQ6
OmRldGVybWluZVBpdGNoKCkKIHsKLSNpZiBVU0UoQVBQS0lUKQotICAgIE5TRm9udCogZiA9IG1f
cGxhdGZvcm1EYXRhLm5zRm9udCgpOworICAgIENURm9udFJlZiBjdEZvbnQgPSBtX3BsYXRmb3Jt
RGF0YS5mb250KCk7CisgICAgQVNTRVJUKGN0Rm9udCk7CisKICAgICAvLyBTcGVjaWFsIGNhc2Ug
T3Nha2EtTW9uby4KICAgICAvLyBBY2NvcmRpbmcgdG8gPHJkYXI6Ly9wcm9ibGVtLzM5OTk0Njc+
LCB3ZSBzaG91bGQgdHJlYXQgT3Nha2EtTW9ubyBhcyBmaXhlZCBwaXRjaC4KICAgICAvLyBOb3Rl
IHRoYXQgdGhlIEFwcEtpdCBkb2VzIG5vdCByZXBvcnQgT3Nha2EtTW9ubyBhcyBmaXhlZCBwaXRj
aC4KQEAgLTU0MSwxOCArNTQyLDExIEBAIHZvaWQgRm9udDo6ZGV0ZXJtaW5lUGl0Y2goKQogICAg
IC8vIEFjY29yZGluZyB0byA8cmRhcjovL3Byb2JsZW0vNTQ1NDcwND4sIHdlIHNob3VsZCBub3Qg
dHJlYXQgTW9ub3R5cGVDb3JzaXZhIGFzIGZpeGVkIHBpdGNoLgogICAgIC8vIE5vdGUgdGhhdCBB
cHBLaXQgZG9lcyByZXBvcnQgTW9ub3R5cGVDb3JzaXZhIGFzIGZpeGVkIHBpdGNoLgogCi0gICAg
TlNTdHJpbmcgKm5hbWUgPSBbZiBmb250TmFtZV07Ci0gICAgbV90cmVhdEFzRml4ZWRQaXRjaCA9
IChbZiBpc0ZpeGVkUGl0Y2hdICB8fCBbZiBfaXNGYWtlRml4ZWRQaXRjaF0gfHwgW25hbWUgY2Fz
ZUluc2Vuc2l0aXZlQ29tcGFyZTpAIk9zYWthLU1vbm8iXSA9PSBOU09yZGVyZWRTYW1lKSAmJiBb
bmFtZSBjYXNlSW5zZW5zaXRpdmVDb21wYXJlOkAiTVMtUEdvdGhpYyJdICE9IE5TT3JkZXJlZFNh
bWUgJiYgW25hbWUgY2FzZUluc2Vuc2l0aXZlQ29tcGFyZTpAIk1vbm90eXBlQ29yc2l2YSJdICE9
IE5TT3JkZXJlZFNhbWU7Ci0jZWxzZQotICAgIENURm9udFJlZiBjdEZvbnQgPSBtX3BsYXRmb3Jt
RGF0YS5mb250KCk7Ci0gICAgbV90cmVhdEFzRml4ZWRQaXRjaCA9IGZhbHNlOwotICAgIGlmICgh
Y3RGb250KQotICAgICAgICByZXR1cm47IC8vIENURm9udCBpcyBudWxsIGluIHRoZSBjYXNlIG9m
IFNWRyBmb250cyBmb3IgZXhhbXBsZS4KLQogICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gZnVs
bE5hbWUgPSBhZG9wdENGKENURm9udENvcHlGdWxsTmFtZShjdEZvbnQpKTsKICAgICBSZXRhaW5Q
dHI8Q0ZTdHJpbmdSZWY+IGZhbWlseU5hbWUgPSBhZG9wdENGKENURm9udENvcHlGYW1pbHlOYW1l
KGN0Rm9udCkpOwogCi0gICAgbV90cmVhdEFzRml4ZWRQaXRjaCA9IENHRm9udElzRml4ZWRQaXRj
aChtX3BsYXRmb3JtRGF0YS5jZ0ZvbnQoKSkgfHwgKGZ1bGxOYW1lICYmIChDRlN0cmluZ0NvbXBh
cmUoZnVsbE5hbWUuZ2V0KCksIENGU1RSKCJPc2FrYS1Nb25vIiksIGtDRkNvbXBhcmVDYXNlSW5z
ZW5zaXRpdmUpID09IGtDRkNvbXBhcmVFcXVhbFRvIHx8IENGU3RyaW5nQ29tcGFyZShmdWxsTmFt
ZS5nZXQoKSwgQ0ZTVFIoIk1TLVBHb3RoaWMiKSwga0NGQ29tcGFyZUNhc2VJbnNlbnNpdGl2ZSkg
PT0ga0NGQ29tcGFyZUVxdWFsVG8pKTsKKyAgICBtX3RyZWF0QXNGaXhlZFBpdGNoID0gKENURm9u
dEdldFN5bWJvbGljVHJhaXRzKGN0Rm9udCkgJiBrQ1RGb250TW9ub1NwYWNlVHJhaXQpIHx8IENH
Rm9udElzRml4ZWRQaXRjaChtX3BsYXRmb3JtRGF0YS5jZ0ZvbnQoKSkgfHwgKGZ1bGxOYW1lICYm
IChDRlN0cmluZ0NvbXBhcmUoZnVsbE5hbWUuZ2V0KCksIENGU1RSKCJPc2FrYS1Nb25vIiksIGtD
RkNvbXBhcmVDYXNlSW5zZW5zaXRpdmUpID09IGtDRkNvbXBhcmVFcXVhbFRvIHx8IENGU3RyaW5n
Q29tcGFyZShmdWxsTmFtZS5nZXQoKSwgQ0ZTVFIoIk1TLVBHb3RoaWMiKSwga0NGQ29tcGFyZUNh
c2VJbnNlbnNpdGl2ZSkgPT0ga0NGQ29tcGFyZUVxdWFsVG8gfHwgQ0ZTdHJpbmdDb21wYXJlKGZ1
bGxOYW1lLmdldCgpLCBDRlNUUigiTW9ub3R5cGVDb3JzaXZhIiksIGtDRkNvbXBhcmVDYXNlSW5z
ZW5zaXRpdmUpID09IGtDRkNvbXBhcmVFcXVhbFRvKSk7CisjaWYgUExBVEZPUk0oSU9TKQogICAg
IGlmIChmYW1pbHlOYW1lICYmIENGU3RyaW5nQ29tcGFyZShmYW1pbHlOYW1lLmdldCgpLCBDRlNU
UigiQ291cmllciBOZXciKSwga0NGQ29tcGFyZUNhc2VJbnNlbnNpdGl2ZSkgPT0ga0NGQ29tcGFy
ZUVxdWFsVG8pIHsKICAgICAgICAgLy8gU3BlY2lhbCBjYXNlIENvdXJpZXIgTmV3IHRvIG5vdCBi
ZSB0cmVhdGVkIGFzIGZpeGVkIHBpdGNoLCBhcyB0aGlzIHdpbGwgbWFrZSB1c2Ugb2YgYSBoYWNr
ZWQgc3BhY2Ugd2lkdGggd2hpY2ggaXMgdW5kZXNpcmVhYmxlIGZvciBpUGhvbmUgKHNlZSByZGFy
Oi8vNjI2OTc4MykuCiAgICAgICAgIG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPSBmYWxzZTsKQEAgLTU3
MSw0MyArNTY1LDE0IEBAIEZsb2F0UmVjdCBGb250OjpwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKEds
eXBoIGdseXBoKSBjb25zdAogICAgIHJldHVybiBib3VuZGluZ0JveDsKIH0KIAotc3RhdGljIGlu
bGluZSBDR0ZvbnRSZW5kZXJpbmdTdHlsZSByZW5kZXJpbmdTdHlsZShjb25zdCBGb250UGxhdGZv
cm1EYXRhJiBwbGF0Zm9ybURhdGEpCi17Ci0jaWYgVVNFKEFQUEtJVCkKLSAgICBDR0ZvbnRSZW5k
ZXJpbmdTdHlsZSBzdHlsZSA9IGtDR0ZvbnRSZW5kZXJpbmdTdHlsZUFudGlhbGlhc2luZyB8IGtD
R0ZvbnRSZW5kZXJpbmdTdHlsZVN1YnBpeGVsUG9zaXRpb25pbmcgfCBrQ0dGb250UmVuZGVyaW5n
U3R5bGVTdWJwaXhlbFF1YW50aXphdGlvbjsKLSAgICBOU0ZvbnQgKmZvbnQgPSBwbGF0Zm9ybURh
dGEubnNGb250KCk7Ci0gICAgaWYgKGZvbnQpIHsKLSAgICAgICAgc3dpdGNoIChbZm9udCByZW5k
ZXJpbmdNb2RlXSkgewotICAgICAgICBjYXNlIE5TRm9udEludGVnZXJBZHZhbmNlbWVudHNSZW5k
ZXJpbmdNb2RlOgotICAgICAgICAgICAgc3R5bGUgPSAwOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgTlNGb250QW50aWFsaWFzZWRJbnRlZ2VyQWR2YW5jZW1lbnRzUmVuZGVyaW5n
TW9kZToKLSAgICAgICAgICAgIHN0eWxlID0ga0NHRm9udFJlbmRlcmluZ1N0eWxlQW50aWFsaWFz
aW5nOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gc3R5bGU7Ci0KLSNlbHNlCi0gICAg
VU5VU0VEX1BBUkFNKHBsYXRmb3JtRGF0YSk7Ci0gICAgcmV0dXJuIGtDR0ZvbnRSZW5kZXJpbmdT
dHlsZUFudGlhbGlhc2luZyB8IGtDR0ZvbnRSZW5kZXJpbmdTdHlsZVN1YnBpeGVsUG9zaXRpb25p
bmcgfCBrQ0dGb250UmVuZGVyaW5nU3R5bGVTdWJwaXhlbFF1YW50aXphdGlvbiB8IGtDR0ZvbnRB
bnRpYWxpYXNpbmdTdHlsZVVuZmlsdGVyZWQ7Ci0jZW5kaWYKLX0KLQogc3RhdGljIGlubGluZSBP
cHRpb25hbDxDR1NpemU+IGFkdmFuY2VGb3JDb2xvckJpdG1hcEZvbnQoY29uc3QgRm9udFBsYXRm
b3JtRGF0YSYgcGxhdGZvcm1EYXRhLCBHbHlwaCBnbHlwaCkKIHsKLSNpZiBQTEFURk9STShNQUMp
Ci0gICAgTlNGb250ICpmb250ID0gcGxhdGZvcm1EYXRhLm5zRm9udCgpOworICAgIENURm9udFJl
ZiBmb250ID0gcGxhdGZvcm1EYXRhLmZvbnQoKTsKICAgICBpZiAoIWZvbnQgfHwgIXBsYXRmb3Jt
RGF0YS5pc0NvbG9yQml0bWFwRm9udCgpKQogICAgICAgICByZXR1cm4gTnVsbG9wdDsKLSAgICBy
ZXR1cm4gTlNTaXplVG9DR1NpemUoW2ZvbnQgYWR2YW5jZW1lbnRGb3JHbHlwaDpnbHlwaF0pOwot
I2Vsc2UKLSAgICBVTlVTRURfUEFSQU0ocGxhdGZvcm1EYXRhKTsKLSAgICBVTlVTRURfUEFSQU0o
Z2x5cGgpOwotICAgIHJldHVybiBOdWxsb3B0OwotI2VuZGlmCisgICAgQ0dTaXplIGFkdmFuY2U7
CisgICAgQ1RGb250R2V0QWR2YW5jZXNGb3JHbHlwaHMoZm9udCwga0NURm9udE9yaWVudGF0aW9u
RGVmYXVsdCwgJmdseXBoLCAmYWR2YW5jZSwgMSk7CisgICAgcmV0dXJuIGFkdmFuY2U7CiB9CiAK
IHN0YXRpYyBpbmxpbmUgYm9vbCBjYW5Vc2VGYXN0R2x5cGhBZHZhbmNlR2V0dGVyKGNvbnN0IEZv
bnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSwgR2x5cGggZ2x5cGgsIENHU2l6ZSYgYWR2YW5j
ZSwgYm9vbCYgcG9wdWxhdGVkQWR2YW5jZSkKQEAgLTYzMCw3ICs1OTUsOCBAQCBmbG9hdCBGb250
OjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CiAgICAgaWYgKChob3Jp
em9udGFsIHx8IG1faXNCcm9rZW5JZGVvZ3JhcGhGYWxsYmFjaykgJiYgY2FuVXNlRmFzdEdseXBo
QWR2YW5jZUdldHRlcih0aGlzLT5wbGF0Zm9ybURhdGEoKSwgZ2x5cGgsIGFkdmFuY2UsIHBvcHVs
YXRlZEFkdmFuY2UpKSB7CiAgICAgICAgIGZsb2F0IHBvaW50U2l6ZSA9IHBsYXRmb3JtRGF0YSgp
LnNpemUoKTsKICAgICAgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gbSA9IENHQWZmaW5lVHJhbnNmb3Jt
TWFrZVNjYWxlKHBvaW50U2l6ZSwgcG9pbnRTaXplKTsKLSAgICAgICAgaWYgKCFDR0ZvbnRHZXRH
bHlwaEFkdmFuY2VzRm9yU3R5bGUocGxhdGZvcm1EYXRhKCkuY2dGb250KCksICZtLCByZW5kZXJp
bmdTdHlsZShwbGF0Zm9ybURhdGEoKSksICZnbHlwaCwgMSwgJmFkdmFuY2UpKSB7CisgICAgICAg
IENHRm9udFJlbmRlcmluZ1N0eWxlIHJlbmRlcmluZ1N0eWxlID0ga0NHRm9udFJlbmRlcmluZ1N0
eWxlQW50aWFsaWFzaW5nIHwga0NHRm9udFJlbmRlcmluZ1N0eWxlU3VicGl4ZWxQb3NpdGlvbmlu
ZyB8IGtDR0ZvbnRSZW5kZXJpbmdTdHlsZVN1YnBpeGVsUXVhbnRpemF0aW9uIHwga0NHRm9udEFu
dGlhbGlhc2luZ1N0eWxlVW5maWx0ZXJlZDsKKyAgICAgICAgaWYgKCFDR0ZvbnRHZXRHbHlwaEFk
dmFuY2VzRm9yU3R5bGUocGxhdGZvcm1EYXRhKCkuY2dGb250KCksICZtLCByZW5kZXJpbmdTdHls
ZSwgJmdseXBoLCAxLCAmYWR2YW5jZSkpIHsKICAgICAgICAgICAgIFJldGFpblB0cjxDRlN0cmlu
Z1JlZj4gZnVsbE5hbWUgPSBhZG9wdENGKENHRm9udENvcHlGdWxsTmFtZShwbGF0Zm9ybURhdGEo
KS5jZ0ZvbnQoKSkpOwogICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gY2FjaGUgZ2x5
cGggd2lkdGhzIGZvciAlQCAlZiIsIGZ1bGxOYW1lLmdldCgpLCBwb2ludFNpemUpOwogICAgICAg
ICAgICAgYWR2YW5jZS53aWR0aCA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250UGxhdGZvcm1EYXRhQ29jb2EubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250UGxhdGZvcm1EYXRhQ29jb2EubW0KaW5k
ZXggZDg2MTgzN2RkZmRlZDhhMzYxYTEyNzY0NjU1OWI0NWNhMmE0ODcxNC4uYmM2NThjNmZhZDli
ZmViZmFmZGI4MGI3NDc4ZGI2NzQwNTJhZTE1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1tCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9ybURhdGFDb2Nv
YS5tbQpAQCAtMjksOSArMjksNyBAQAogI2ltcG9ydCAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5o
IgogI2ltcG9ydCA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKLSNpZiAhUExBVEZPUk0oSU9TKQot
I2ltcG9ydCA8QXBwS2l0L05TRm9udC5oPgotI2Vsc2UKKyNpZiBQTEFURk9STShJT1MpCiAjaW1w
b3J0ICJDb3JlR3JhcGhpY3NTUEkuaCIKICNpbXBvcnQgPENvcmVUZXh0L0NvcmVUZXh0Lmg+CiAj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1BvcHVw
TWVudU1hYy5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1BvcHVwTWVudU1h
Yy5tbQppbmRleCA2ZDJjZTE2MjEzZTY4YjA1OTI5YjM1ZjIyMDU5ZTk5MmVlZjZjZWI3Li5mZmUw
MTdmZGEyMzAxZDJiYTMyZWYwODNlODg0YTEyZjY1ZDkyNGUzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9Qb3B1cE1lbnVNYWMubW0KKysrIGIvU291cmNlL1dl
YktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvUG9wdXBNZW51TWFjLm1tCkBAIC04MSwxMiArODEsMTIg
QEAgdm9pZCBQb3B1cE1lbnVNYWM6OnBvcHVsYXRlKCkKICAgICAgICAgUG9wdXBNZW51U3R5bGUg
c3R5bGUgPSBtX2NsaWVudC0+aXRlbVN0eWxlKGkpOwogICAgICAgICBSZXRhaW5QdHI8TlNNdXRh
YmxlRGljdGlvbmFyeT4gYXR0cmlidXRlcyA9IGFkb3B0TlMoW1tOU011dGFibGVEaWN0aW9uYXJ5
IGFsbG9jXSBpbml0XSk7CiAgICAgICAgIGlmIChzdHlsZS5mb250KCkgIT0gRm9udENhc2NhZGUo
KSkgewotICAgICAgICAgICAgTlNGb250ICpmb250ID0gc3R5bGUuZm9udCgpLnByaW1hcnlGb250
KCkuZ2V0TlNGb250KCk7CisgICAgICAgICAgICBSZXRhaW5QdHI8Q1RGb250UmVmPiBmb250ID0g
c3R5bGUuZm9udCgpLnByaW1hcnlGb250KCkuZ2V0Q1RGb250KCk7CiAgICAgICAgICAgICBpZiAo
IWZvbnQpIHsKICAgICAgICAgICAgICAgICBDR0Zsb2F0IHNpemUgPSBzdHlsZS5mb250KCkucHJp
bWFyeUZvbnQoKS5wbGF0Zm9ybURhdGEoKS5zaXplKCk7Ci0gICAgICAgICAgICAgICAgZm9udCA9
IHN0eWxlLmZvbnQoKS53ZWlnaHQoKSA8IEZvbnRXZWlnaHRCb2xkID8gW05TRm9udCBzeXN0ZW1G
b250T2ZTaXplOnNpemVdIDogW05TRm9udCBib2xkU3lzdGVtRm9udE9mU2l6ZTpzaXplXTsKKyAg
ICAgICAgICAgICAgICBmb250ID0gc3R5bGUuZm9udCgpLndlaWdodCgpIDwgRm9udFdlaWdodEJv
bGQgPyBhZG9wdENGKENURm9udENyZWF0ZVVJRm9udEZvckxhbmd1YWdlKGtDVEZvbnRVSUZvbnRT
eXN0ZW0sIHNpemUsIG51bGxwdHIpKSA6IGFkb3B0Q0YoQ1RGb250Q3JlYXRlVUlGb250Rm9yTGFu
Z3VhZ2Uoa0NURm9udFVJRm9udEVtcGhhc2l6ZWRTeXN0ZW0sIHNpemUsIG51bGxwdHIpKTsKICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIFthdHRyaWJ1dGVzIHNldE9iamVjdDpmb250IGZvcktl
eTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKKyAgICAgICAgICAgIFthdHRyaWJ1dGVzIHNldE9iamVj
dDp0b05TRm9udChmb250LmdldCgpKSBmb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07CiAgICAg
ICAgIH0KIAogICAgICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlUGFyYWdyYXBoU3R5bGU+IHBhcmFn
cmFwaFN0eWxlID0gYWRvcHROUyhbW05TUGFyYWdyYXBoU3R5bGUgZGVmYXVsdFBhcmFncmFwaFN0
eWxlXSBtdXRhYmxlQ29weV0pOwpAQCAtMTU0LDEzICsxNTQsMTMgQEAgdm9pZCBQb3B1cE1lbnVN
YWM6OnNob3coY29uc3QgSW50UmVjdCYgciwgRnJhbWVWaWV3KiB2LCBpbnQgaW5kZXgpCiAgICAg
W21fcG9wdXAgc2VsZWN0SXRlbUF0SW5kZXg6aW5kZXhdOwogICAgIFttX3BvcHVwIHNldFVzZXJJ
bnRlcmZhY2VMYXlvdXREaXJlY3Rpb246dGV4dERpcmVjdGlvbiA9PSBMVFIgPyBOU1VzZXJJbnRl
cmZhY2VMYXlvdXREaXJlY3Rpb25MZWZ0VG9SaWdodCA6IE5TVXNlckludGVyZmFjZUxheW91dERp
cmVjdGlvblJpZ2h0VG9MZWZ0XTsKIAotICAgIE5TTWVudSogbWVudSA9IFttX3BvcHVwIG1lbnVd
OworICAgIE5TTWVudSAqbWVudSA9IFttX3BvcHVwIG1lbnVdOwogI2lmIF9fTUFDX09TX1hfVkVS
U0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMTAwCiAgICAgW21lbnUgc2V0VXNlckludGVyZmFjZUxh
eW91dERpcmVjdGlvbjp0ZXh0RGlyZWN0aW9uID09IExUUiA/IE5TVXNlckludGVyZmFjZUxheW91
dERpcmVjdGlvbkxlZnRUb1JpZ2h0IDogTlNVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uUmln
aHRUb0xlZnRdOwogI2VuZGlmCiAKICAgICBOU1BvaW50IGxvY2F0aW9uOwotICAgIE5TRm9udCog
Zm9udCA9IG1fY2xpZW50LT5tZW51U3R5bGUoKS5mb250KCkucHJpbWFyeUZvbnQoKS5nZXROU0Zv
bnQoKTsKKyAgICBDVEZvbnRSZWYgZm9udCA9IG1fY2xpZW50LT5tZW51U3R5bGUoKS5mb250KCku
cHJpbWFyeUZvbnQoKS5nZXRDVEZvbnQoKTsKIAogICAgIC8vIFRoZXNlIHZhbHVlcyB3ZXJlIGJv
cnJvd2VkIGZyb20gQXBwS2l0IHRvIG1hdGNoIHRoZWlyIHBsYWNlbWVudCBvZiB0aGUgbWVudS4K
ICAgICBjb25zdCBpbnQgcG9wT3Zlckhvcml6b250YWxBZGp1c3QgPSAtMTA7CkBAIC0xNzIsOCAr
MTcyLDggQEAgdm9pZCBQb3B1cE1lbnVNYWM6OnNob3coY29uc3QgSW50UmVjdCYgciwgRnJhbWVW
aWV3KiB2LCBpbnQgaW5kZXgpCiAgICAgICAgICAgICB0aXRsZUZyYW1lID0gcjsKICAgICAgICAg
ZmxvYXQgdmVydE9mZnNldCA9IHJvdW5kZigoTlNNYXhZKHIpIC0gTlNNYXhZKHRpdGxlRnJhbWUp
KSArIE5TSGVpZ2h0KHRpdGxlRnJhbWUpKTsKICAgICAgICAgLy8gQWRqdXN0IGZvciBmb250cyBv
dGhlciB0aGFuIHRoZSBzeXN0ZW0gZm9udC4KLSAgICAgICAgTlNGb250KiBkZWZhdWx0Rm9udCA9
IFtOU0ZvbnQgc3lzdGVtRm9udE9mU2l6ZTpbZm9udCBwb2ludFNpemVdXTsKLSAgICAgICAgdmVy
dE9mZnNldCArPSBbZm9udCBkZXNjZW5kZXJdIC0gW2RlZmF1bHRGb250IGRlc2NlbmRlcl07Cisg
ICAgICAgIGF1dG8gZGVmYXVsdEZvbnQgPSBhZG9wdENGKENURm9udENyZWF0ZVVJRm9udEZvckxh
bmd1YWdlKGtDVEZvbnRVSUZvbnRTeXN0ZW0sIENURm9udEdldFNpemUoZm9udCksIG5pbCkpOwor
ICAgICAgICB2ZXJ0T2Zmc2V0ICs9IENURm9udEdldERlc2NlbnQoZm9udCkgLSBDVEZvbnRHZXRE
ZXNjZW50KGRlZmF1bHRGb250LmdldCgpKTsKICAgICAgICAgdmVydE9mZnNldCA9IGZtaW5mKE5T
SGVpZ2h0KHIpLCB2ZXJ0T2Zmc2V0KTsKIAogICAgICAgICBmbG9hdCBob3Jpem9udGFsT2Zmc2V0
ID0gdGV4dERpcmVjdGlvbiA9PSBMVFIgPyBwb3BPdmVySG9yaXpvbnRhbEFkanVzdCA6IDA7CkBA
IC0yMTUsNyArMjE1LDcgQEAgdm9pZCBQb3B1cE1lbnVNYWM6OnNob3coY29uc3QgSW50UmVjdCYg
ciwgRnJhbWVWaWV3KiB2LCBpbnQgaW5kZXgpCiAjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9w
CiAgICAgfQogCi0gICAgV0tQb3B1cE1lbnUobWVudSwgbG9jYXRpb24sIHJvdW5kZihOU1dpZHRo
KHIpKSwgZHVtbXlWaWV3LmdldCgpLCBpbmRleCwgZm9udCwgY29udHJvbFNpemUsICFtX2NsaWVu
dC0+bWVudVN0eWxlKCkuaGFzRGVmYXVsdEFwcGVhcmFuY2UoKSk7CisgICAgV0tQb3B1cE1lbnUo
bWVudSwgbG9jYXRpb24sIHJvdW5kZihOU1dpZHRoKHIpKSwgZHVtbXlWaWV3LmdldCgpLCBpbmRl
eCwgdG9OU0ZvbnQoZm9udCksIGNvbnRyb2xTaXplLCAhbV9jbGllbnQtPm1lbnVTdHlsZSgpLmhh
c0RlZmF1bHRBcHBlYXJhbmNlKCkpOwogCiAgICAgW21fcG9wdXAgZGlzbWlzc1BvcFVwXTsKICAg
ICBbZHVtbXlWaWV3IHJlbW92ZUZyb21TdXBlcnZpZXddOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZp
ZXcvV2ViSFRNTFZpZXcubW0KaW5kZXggMjg2ODMyY2ZhYjJiYjE3ZTUyN2Q1ZTk2MTAzNTA3Mzhj
YzgwM2YyMy4uZWI1YTk2YWI2OTgzNGJjZTExOGIxZTE4Mjg2ZjM2ZjBhZmYyYjc1ZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCkBAIC01NTk5LDE0ICs1NTk5LDE0
IEBAIC0gKE5TRm9udCAqKV9vcmlnaW5hbEZvbnRCCiAgICAgcmV0dXJuIFtbTlNGb250TWFuYWdl
ciBzaGFyZWRGb250TWFuYWdlcl0gZm9udFdpdGhGYW1pbHk6QCJUaW1lcyIgdHJhaXRzOk5TRm9u
dEl0YWxpY1RyYWl0IHdlaWdodDpTVEFOREFSRF9CT0xEX1dFSUdIVCBzaXplOjEyLjBmXTsKIH0K
IAotc3RhdGljIE5TU3RyaW5nICpmb250TmFtZUZvckRlc2NyaXB0aW9uKE5TU3RyaW5nICpmYW1p
bHlOYW1lLCBCT09MIGl0YWxpYywgQk9PTCBib2xkKQorc3RhdGljIFJldGFpblB0cjxDRlN0cmlu
Z1JlZj4gZm9udE5hbWVGb3JEZXNjcmlwdGlvbihOU1N0cmluZyAqZmFtaWx5TmFtZSwgQk9PTCBp
dGFsaWMsIEJPT0wgYm9sZCkKIHsKICAgICAvLyBGaW5kIHRoZSBmb250IHRoZSBzYW1lIHdheSB0
aGUgcmVuZGVyaW5nIGNvZGUgd291bGQgbGF0ZXIgaWYgaXQgZW5jb3VudGVyZWQgdGhpcyBDU1Mu
CiAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbjsKICAgICBmb250RGVzY3JpcHRp
b24uc2V0SXNJdGFsaWMoaXRhbGljKTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0V2VpZ2h0KGJv
bGQgPyBGb250V2VpZ2h0OTAwIDogRm9udFdlaWdodDUwMCk7CiAgICAgUmVmUHRyPEZvbnQ+IGZv
bnQgPSBGb250Q2FjaGU6OnNpbmdsZXRvbigpLmZvbnRGb3JGYW1pbHkoZm9udERlc2NyaXB0aW9u
LCBmYW1pbHlOYW1lKTsKLSAgICByZXR1cm4gW2ZvbnQtPnBsYXRmb3JtRGF0YSgpLm5zRm9udCgp
IGZvbnROYW1lXTsKKyAgICByZXR1cm4gYWRvcHRDRihDVEZvbnRDb3B5UG9zdFNjcmlwdE5hbWUo
Zm9udC0+Z2V0Q1RGb250KCkpKTsKIH0KIAogLSAodm9pZClfYWRkVG9TdHlsZTooRE9NQ1NTU3R5
bGVEZWNsYXJhdGlvbiAqKXN0eWxlIGZvbnRBOihOU0ZvbnQgKilhIGZvbnRCOihOU0ZvbnQgKili
CkBAIC01NjQ1LDggKzU2NDUsMTAgQEAgLSAodm9pZClfYWRkVG9TdHlsZTooRE9NQ1NTU3R5bGVE
ZWNsYXJhdGlvbiAqKXN0eWxlIGZvbnRBOihOU0ZvbnQgKilhIGZvbnRCOihOU0YKICAgICAgICAg
Ly8gdGhlIFBvc3RzY3JpcHQgbmFtZS4KICAgICAgICAgLy8gSWYgd2UgZG9uJ3QgZmluZCBhIGZv
bnQgd2l0aCB0aGUgc2FtZSBQb3N0c2NyaXB0IG5hbWUsIHRoZW4gd2UnbGwgaGF2ZSB0byB1c2Ug
dGhlCiAgICAgICAgIC8vIFBvc3RzY3JpcHQgbmFtZSB0byBtYWtlIHRoZSBDU1Mgc3BlY2lmaWMg
ZW5vdWdoLgotICAgICAgICBpZiAoIVtmb250TmFtZUZvckRlc2NyaXB0aW9uKGFGYW1pbHlOYW1l
LCBhSXNJdGFsaWMsIGFJc0JvbGQpIGlzRXF1YWxUb1N0cmluZzpbYSBmb250TmFtZV1dKQotICAg
ICAgICAgICAgZmFtaWx5TmFtZUZvckNTUyA9IFthIGZvbnROYW1lXTsKKyAgICAgICAgYXV0byBm
b250TmFtZSA9IGZvbnROYW1lRm9yRGVzY3JpcHRpb24oYUZhbWlseU5hbWUsIGFJc0l0YWxpYywg
YUlzQm9sZCk7CisgICAgICAgIGF1dG8gYU5hbWUgPSBbYSBmb250TmFtZV07CisgICAgICAgIGlm
ICghZm9udE5hbWUgfHwgIWFOYW1lIHx8ICFDRkVxdWFsKGZvbnROYW1lLmdldCgpLCBzdGF0aWNf
Y2FzdDxDRlN0cmluZ1JlZj4oW2EgZm9udE5hbWVdKSkpCisgICAgICAgICAgICBmYW1pbHlOYW1l
Rm9yQ1NTID0gYU5hbWU7CiAKICAgICAgICAgLy8gRklYTUU6IE5lZWQgbW9yZSBzb3BoaXN0aWNh
dGVkIGVzY2FwaW5nIGNvZGUgaWYgd2Ugd2FudCB0byBoYW5kbGUgZmFtaWx5IG5hbWVzCiAgICAg
ICAgIC8vIHdpdGggY2hhcmFjdGVycyBsaWtlIHNpbmdsZSBxdW90ZSBvciBiYWNrc2xhc2ggaW4g
dGhlaXIgbmFtZXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L21hYy9XZWJQb3B1cE1lbnVNYWMubW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJQb3B1cE1lbnVNYWMubW0KaW5kZXggZjcyN2M2ODVk
MDEzMTNmN2RiMWFmZTFmMTlkMmQyYTIzM2IxODE3ZS4uNDE3MTkyMWEwMTdhNTRjMTVhZmJmMDRk
NTg5NDBmMzJlNjliNzZlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9tYWMvV2ViUG9wdXBNZW51TWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYlBvcHVwTWVudU1hYy5tbQpAQCAtMzks
MTUgKzM5LDE5IEBAIHZvaWQgV2ViUG9wdXBNZW51OjpzZXRVcFBsYXRmb3JtRGF0YShjb25zdCBJ
bnRSZWN0JiwgUGxhdGZvcm1Qb3B1cE1lbnVEYXRhJiBkYXRhCiB7CiAjaWYgVVNFKEFQUEtJVCkK
ICAgICAvLyBGSVhNRTogZm9udCB3aWxsIGJlIG5pbCBoZXJlIGZvciBjdXN0b20gZm9udHMsIHdl
IHNob3VsZCBmaXggdGhhdC4KLSAgICBOU0ZvbnQgKmZvbnQgPSBtX3BvcHVwQ2xpZW50LT5tZW51
U3R5bGUoKS5mb250KCkucHJpbWFyeUZvbnQoKS5nZXROU0ZvbnQoKTsKKyAgICBDVEZvbnRSZWYg
Zm9udCA9IG1fcG9wdXBDbGllbnQtPm1lbnVTdHlsZSgpLmZvbnQoKS5wcmltYXJ5Rm9udCgpLmdl
dENURm9udCgpOwogICAgIGlmICghZm9udCkKICAgICAgICAgcmV0dXJuOwotICAgIAotICAgIENG
RGljdGlvbmFyeVJlZiBmb250RGVzY3JpcHRvckF0dHJpYnV0ZXMgPSAoQ0ZEaWN0aW9uYXJ5UmVm
KVtbZm9udCBmb250RGVzY3JpcHRvcl0gZm9udEF0dHJpYnV0ZXNdOwotICAgIGlmICghZm9udERl
c2NyaXB0b3JBdHRyaWJ1dGVzKQorCisgICAgYXV0byBmb250RGVzY3JpcHRvciA9IGFkb3B0Q0Yo
Q1RGb250Q29weUZvbnREZXNjcmlwdG9yKGZvbnQpKTsKKyAgICBpZiAoIWZvbnREZXNjcmlwdG9y
KQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIGF0dHJpYnV0ZXMgPSBhZG9wdENGKENURm9u
dERlc2NyaXB0b3JDb3B5QXR0cmlidXRlcyhmb250RGVzY3JpcHRvci5nZXQoKSkpOworICAgIGlm
ICghYXR0cmlidXRlcykKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGRhdGEuZm9udEluZm8u
Zm9udEF0dHJpYnV0ZURpY3Rpb25hcnkgPSBmb250RGVzY3JpcHRvckF0dHJpYnV0ZXM7CisgICAg
ZGF0YS5mb250SW5mby5mb250QXR0cmlidXRlRGljdGlvbmFyeSA9IGF0dHJpYnV0ZXM7CiAgICAg
ZGF0YS5zaG91bGRQb3BPdmVyID0gbV9wb3B1cENsaWVudC0+c2hvdWxkUG9wT3ZlcigpOwogICAg
IGRhdGEuaGlkZUFycm93cyA9ICFtX3BvcHVwQ2xpZW50LT5tZW51U3R5bGUoKS5oYXNEZWZhdWx0
QXBwZWFyYW5jZSgpOwogICAgIGRhdGEubWVudVNpemUgPSBtX3BvcHVwQ2xpZW50LT5tZW51U3R5
bGUoKS5tZW51U2l6ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL21hYy9XZWJQYWdlTWFjLm1tCmluZGV4IDI4YWU2ZTlhMGMzY2JmMmRjYzAwNDU0YmRjMzRh
NzU1ZTdmNmY4ODMuLjk3MDQ1YjJiNTg3NzU3N2Y4ZjRlZWZmYjFiN2VkNTM2MTlkZWI2NTIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1h
Yy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VN
YWMubW0KQEAgLTM2MywxMSArMzYzLDExIEBAIHZvaWQgV2ViUGFnZTo6Zm9udEF0U2VsZWN0aW9u
KHVpbnQ2NF90IGNhbGxiYWNrSUQpCiAgICAgRnJhbWUmIGZyYW1lID0gbV9wYWdlLT5mb2N1c0Nv
bnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKICAgICAKICAgICBpZiAoIWZyYW1lLnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpLmlzTm9uZSgpKSB7Ci0gICAgICAgIGNvbnN0IEZvbnQqIGZv
bnQgPSBmcmFtZS5lZGl0b3IoKS5mb250Rm9yU2VsZWN0aW9uKHNlbGVjdGlvbkhhc011bHRpcGxl
Rm9udHMpOwotICAgICAgICBOU0ZvbnQgKm5zRm9udCA9IGZvbnQgPyBmb250LT5nZXROU0ZvbnQo
KSA6IG5pbDsKLSAgICAgICAgaWYgKG5zRm9udCkgewotICAgICAgICAgICAgZm9udE5hbWUgPSBu
c0ZvbnQuZm9udE5hbWU7Ci0gICAgICAgICAgICBmb250U2l6ZSA9IG5zRm9udC5wb2ludFNpemU7
CisgICAgICAgIGlmIChhdXRvKiBmb250ID0gZnJhbWUuZWRpdG9yKCkuZm9udEZvclNlbGVjdGlv
bihzZWxlY3Rpb25IYXNNdWx0aXBsZUZvbnRzKSkgeworICAgICAgICAgICAgaWYgKGF1dG8gY3RG
b250ID0gZm9udC0+Z2V0Q1RGb250KCkpIHsKKyAgICAgICAgICAgICAgICBmb250TmFtZSA9IGFk
b3B0Q0YoQ1RGb250Q29weVBvc3RTY3JpcHROYW1lKGN0Rm9udCkpLmdldCgpOworICAgICAgICAg
ICAgICAgIGZvbnRTaXplID0gQ1RGb250R2V0U2l6ZShjdEZvbnQpOworICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgfQogICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6Rm9udEF0
U2VsZWN0aW9uQ2FsbGJhY2soZm9udE5hbWUsIGZvbnRTaXplLCBzZWxlY3Rpb25IYXNNdWx0aXBs
ZUZvbnRzLCBjYWxsYmFja0lEKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>278377</attachid>
            <date>2016-05-08 15:33:02 -0700</date>
            <delta_ts>2016-05-08 15:53:58 -0700</delta_ts>
            <desc>Patch for committing</desc>
            <filename>bug-157464-20160508153347.patch</filename>
            <type>text/plain</type>
            <size>31038</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAwNTYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWUyYzU5MTRiOTFhNjE3
MDZhMjVmYTRhMTgxOWVlZGZmYmM1MTYxYi4uMGE5NjFmMmUzYzBkODE5ZGQwNzhiZWFiZDFlMGMx
YzhlMGFkNDkxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDE2LTA1LTA4ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW09TIFhdIE1p
Z3JhdGUgb3VyIEZvbnQgY2xhc3NlcyBlbnRpcmVseSBvZmYgb2YgTlNGb250CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTc0NjQKKworICAgICAgICBS
ZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICBCZWNhdXNlIE5TRm9udCBhbmQgQ1RG
b250IGFyZSB0b2xsLWZyZWUtYnJpZGdlZCwgd2UgZG9uJ3QgbmVlZCBOU0ZvbnQgYXQgYWxsIGFu
eXdoZXJlLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBiZWNhdXNlIHRoZXJlIGlzIG5vIGJlaGF2
aW9yIGNoYW5nZS4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVyTWFjLm1tOgorICAgICAgICAoYWNjZXNzaWJpbGl0eVNlYXJjaENyaXRl
cmlhRm9yU2VhcmNoUHJlZGljYXRlUGFyYW1ldGVyaXplZEF0dHJpYnV0ZSk6CisgICAgICAgICh0
ZXh0TWFya2VyUmFuZ2VGcm9tUmFuZ2UpOgorICAgICAgICAodmlzaWJsZVBvc2l0aW9uRm9yU3Rh
cnRPZlRleHRNYXJrZXJSYW5nZSk6CisgICAgICAgICh2aXNpYmxlUG9zaXRpb25Gb3JFbmRPZlRl
eHRNYXJrZXJSYW5nZSk6CisgICAgICAgIChBWEF0dHJpYnV0ZWRTdHJpbmdSYW5nZUlzVmFsaWQp
OgorICAgICAgICAoQVhBdHRyaWJ1dGVTdHJpbmdTZXRGb250KToKKyAgICAgICAgKENyZWF0ZUNH
Q29sb3JJZkRpZmZlcmVudCk6CisgICAgICAgIChBWEF0dHJpYnV0ZVN0cmluZ1NldFN0eWxlKToK
KyAgICAgICAgKHRleHRNYXJrZXJSYW5nZUZyb21WaXNpYmxlUG9zaXRpb25zKToKKyAgICAgICAg
KiBiaW5kaW5ncy9vYmpjL0RPTS5tbToKKyAgICAgICAgKC1bRE9NRWxlbWVudCBfZm9udF0pOgor
ICAgICAgICAqIGJpbmRpbmdzL29iamMvRE9NUHJpdmF0ZS5oOgorICAgICAgICAqIGVkaXRpbmcv
Y29jb2EvSFRNTENvbnZlcnRlci5tbToKKyAgICAgICAgKF9mb250KToKKyAgICAgICAgKFdlYkNv
cmU6OmVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlKToKKyAgICAgICAgKiBlZGl0aW5n
L21hYy9FZGl0b3JNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmZvbnRBdHRyaWJ1
dGVzRm9yU2VsZWN0aW9uU3RhcnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmdldENURm9udCk6CisgICAgICAgIChXZWJDb3Jl
OjpGb250OjpnZXROU0ZvbnQpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0ZvbnRQbGF0Zm9ybURhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6
Om5zRm9udCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9u
dENvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZGV0ZXJtaW5lUGl0Y2gpOgorICAg
ICAgICAoV2ViQ29yZTo6YWR2YW5jZUZvckNvbG9yQml0bWFwRm9udCk6CisgICAgICAgIChXZWJD
b3JlOjpGb250OjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgpOgorICAgICAgICAoV2ViQ29yZTo6cmVu
ZGVyaW5nU3R5bGUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29h
L0ZvbnRQbGF0Zm9ybURhdGFDb2NvYS5tbToKKwogMjAxNi0wNS0wOCAgQ2hyaXMgRHVtZXogIDxj
ZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFtCaW5kaW5nc10gU2ltcGxpZnkgW1JlcXVpcmVz
RXhpc3RpbmdBdG9taWNTdHJpbmddIElETCBleHRlbmRlZCBhdHRyaWJ1dGUgaGFuZGxpbmcKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvbWFj
L0NoYW5nZUxvZwppbmRleCBkMjM1NDE0MTc4MzY5MWFiNTY2ZjY5YTg5OTY3ODI4ZjhiMDMzZDc2
Li4xNjBkZDc4ZWRjN2EyNTk5ODQxNGIzN2QxODFkYWQ2YmI0MTcxMDQ3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTYtMDUtMDggIE15bGVzIEMuIE1heGZpZWxkICA8bW1h
eGZpZWxkQGFwcGxlLmNvbT4KKworICAgICAgICBbT1MgWF0gTWlncmF0ZSBvdXIgRm9udCBjbGFz
c2VzIGVudGlyZWx5IG9mZiBvZiBOU0ZvbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE1NzQ2NAorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFk
bGVyLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvUG9wdXBNZW51TWFjLm1tOgorICAgICAg
ICAoUG9wdXBNZW51TWFjOjpwb3B1bGF0ZSk6CisgICAgICAgIChQb3B1cE1lbnVNYWM6OnNob3cp
OgorICAgICAgICAqIFdlYlZpZXcvV2ViSFRNTFZpZXcubW06CisgICAgICAgIChmb250TmFtZUZv
ckRlc2NyaXB0aW9uKToKKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgX2FkZFRvU3R5bGU6Zm9udEE6
Zm9udEI6XSk6CisKIDIwMTYtMDUtMDYgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxl
LmNvbT4KIAogICAgICAgICBSZW5hbWUgSGl0VGVzdFJlcXVlc3QgRGlzYWxsb3dTaGFkb3dDb250
ZW50IHRvIERpc2FsbG93VXNlckFnZW50U2hhZG93Q29udGVudApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDc5MDli
NmI3YTU1ZGQ0MmUzYjM1NzdlYWRlMjUwNjY0N2MzYWRiZDMuLmQwNzJkYWNlNzZhYzdlNzkxOGEz
OTdlZDcyZjRjZGE3YTJjNjgwMzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxNi0w
NS0wOCAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgorCisgICAgICAg
IFtPUyBYXSBNaWdyYXRlIG91ciBGb250IGNsYXNzZXMgZW50aXJlbHkgb2ZmIG9mIE5TRm9udAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU3NDY0CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L21hYy9XZWJQb3B1cE1lbnVNYWMubW06CisgICAgICAgIChXZWJLaXQ6
OldlYlBvcHVwTWVudTo6c2V0VXBQbGF0Zm9ybURhdGEpOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Zm9u
dEF0U2VsZWN0aW9uKToKKwogMjAxNi0wNS0wNiAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9A
YXBwbGUuY29tPgogCiAgICAgICAgIFJlbmFtZSBIaXRUZXN0UmVxdWVzdCBEaXNhbGxvd1NoYWRv
d0NvbnRlbnQgdG8gRGlzYWxsb3dVc2VyQWdlbnRTaGFkb3dDb250ZW50CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlck1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCmluZGV4IDkxMGFjMzY5NDYzNTVlOWU3YWY0ZTc5YTA3
YmNhOTU0MjNkY2YyOTQuLmQ3YjM3NDQzYmFlMTlhYTM2ZGRmNDdkZTQyODE2ZmU4YWJmOTM4YWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCkBAIC03MjQsNyArNzI0
LDcgQEAgc3RhdGljIEFjY2Vzc2liaWxpdHlTZWFyY2hDcml0ZXJpYSBhY2Nlc3NpYmlsaXR5U2Vh
cmNoQ3JpdGVyaWFGb3JTZWFyY2hQcmVkaWNhdGUKICAgICBpZiAoW3NlYXJjaFRleHRQYXJhbWV0
ZXIgaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcgY2xhc3NdXSkKICAgICAgICAgc2VhcmNoVGV4dCA9
IHNlYXJjaFRleHRQYXJhbWV0ZXI7CiAgICAgCi0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCAqc3Rh
cnRFbGVtZW50ID0gbnVsbHB0cjsKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBzdGFydEVsZW1l
bnQgPSBudWxscHRyOwogICAgIGlmIChbc3RhcnRFbGVtZW50UGFyYW1ldGVyIGlzS2luZE9mQ2xh
c3M6W1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGNsYXNzXV0pCiAgICAgICAgIHN0YXJ0
RWxlbWVudCA9IFtzdGFydEVsZW1lbnRQYXJhbWV0ZXIgYWNjZXNzaWJpbGl0eU9iamVjdF07CiAg
ICAgCkBAIC04MzEsNyArODMxLDcgQEAgc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3QqIGFjY2Vz
c2liaWxpdHlPYmplY3RGb3JUZXh0TWFya2VyKEFYT2JqZWN0Q2FjaGUqIGNhY2gKICAgICByZXR1
cm4gdGV4dE1hcmtlclJhbmdlRnJvbVJhbmdlKG1fb2JqZWN0LT5heE9iamVjdENhY2hlKCksIHJh
bmdlKTsKIH0KIAotc3RhdGljIGlkIHRleHRNYXJrZXJSYW5nZUZyb21SYW5nZShBWE9iamVjdENh
Y2hlICpjYWNoZSwgY29uc3QgUmVmUHRyPFJhbmdlPiByYW5nZSkKK3N0YXRpYyBpZCB0ZXh0TWFy
a2VyUmFuZ2VGcm9tUmFuZ2UoQVhPYmplY3RDYWNoZSogY2FjaGUsIGNvbnN0IFJlZlB0cjxSYW5n
ZT4gcmFuZ2UpCiB7CiAgICAgaWQgc3RhcnRUZXh0TWFya2VyID0gc3RhcnRPckVuZFRleHRtYXJr
ZXJGb3JSYW5nZShjYWNoZSwgcmFuZ2UsIHRydWUpOwogICAgIGlkIGVuZFRleHRNYXJrZXIgPSBz
dGFydE9yRW5kVGV4dG1hcmtlckZvclJhbmdlKGNhY2hlLCByYW5nZSwgZmFsc2UpOwpAQCAtOTgw
LDEyICs5ODAsMTIgQEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb25Gb3JU
ZXh0TWFya2VyKEFYT2JqZWN0Q2FjaGUqIGNhY2hlLCBDRlR5cGUKICAgICByZXR1cm4gdmlzaWJs
ZVBvc2l0aW9uRm9yVGV4dE1hcmtlcihtX29iamVjdC0+YXhPYmplY3RDYWNoZSgpLCB0ZXh0TWFy
a2VyKTsKIH0KIAotc3RhdGljIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb25Gb3JTdGFy
dE9mVGV4dE1hcmtlclJhbmdlKEFYT2JqZWN0Q2FjaGUgKmNhY2hlLCBpZCB0ZXh0TWFya2VyUmFu
Z2UpCitzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbkZvclN0YXJ0T2ZUZXh0
TWFya2VyUmFuZ2UoQVhPYmplY3RDYWNoZSogY2FjaGUsIGlkIHRleHRNYXJrZXJSYW5nZSkKIHsK
ICAgICByZXR1cm4gdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcihjYWNoZSwgQVhUZXh0TWFy
a2VyUmFuZ2VTdGFydCh0ZXh0TWFya2VyUmFuZ2UpKTsKIH0KIAotc3RhdGljIFZpc2libGVQb3Np
dGlvbiB2aXNpYmxlUG9zaXRpb25Gb3JFbmRPZlRleHRNYXJrZXJSYW5nZShBWE9iamVjdENhY2hl
ICpjYWNoZSwgaWQgdGV4dE1hcmtlclJhbmdlKQorc3RhdGljIFZpc2libGVQb3NpdGlvbiB2aXNp
YmxlUG9zaXRpb25Gb3JFbmRPZlRleHRNYXJrZXJSYW5nZShBWE9iamVjdENhY2hlKiBjYWNoZSwg
aWQgdGV4dE1hcmtlclJhbmdlKQogewogICAgIHJldHVybiB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0
TWFya2VyKGNhY2hlLCBBWFRleHRNYXJrZXJSYW5nZUVuZCh0ZXh0TWFya2VyUmFuZ2UpKTsKIH0K
QEAgLTEwMDAsMjMgKzEwMDAsMjMgQEAgc3RhdGljIGlkIHRleHRNYXJrZXJSYW5nZUZyb21NYXJr
ZXJzKGlkIHRleHRNYXJrZXIxLCBpZCB0ZXh0TWFya2VyMikKIAogLy8gV2hlbiBtb2RpZnlpbmcg
YXR0cmlidXRlZCBzdHJpbmdzLCB0aGUgcmFuZ2UgY2FuIGNvbWUgZnJvbSBhIHNvdXJjZSB3aGlj
aCBtYXkgcHJvdmlkZSBmYXVsdHkgaW5mb3JtYXRpb24gKGUuZy4gdGhlIHNwZWxsIGNoZWNrZXIp
LgogLy8gVG8gcHJvdGVjdCBhZ2FpbnN0IHN1Y2ggY2FzZXMgdGhlIHJhbmdlIHNob3VsZCBiZSB2
YWxpZGF0ZWQgYmVmb3JlIGFkZGluZyBvciByZW1vdmluZyBhdHRyaWJ1dGVzLgotc3RhdGljIEJP
T0wgQVhBdHRyaWJ1dGVkU3RyaW5nUmFuZ2VJc1ZhbGlkKE5TQXR0cmlidXRlZFN0cmluZyogYXR0
clN0cmluZywgTlNSYW5nZSByYW5nZSkKK3N0YXRpYyBCT09MIEFYQXR0cmlidXRlZFN0cmluZ1Jh
bmdlSXNWYWxpZChOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJTdHJpbmcsIE5TUmFuZ2UgcmFuZ2Up
CiB7CiAgICAgcmV0dXJuIChyYW5nZS5sb2NhdGlvbiA8IFthdHRyU3RyaW5nIGxlbmd0aF0gJiYg
TlNNYXhSYW5nZShyYW5nZSkgPD0gW2F0dHJTdHJpbmcgbGVuZ3RoXSk7CiB9CiAKLXN0YXRpYyB2
b2lkIEFYQXR0cmlidXRlU3RyaW5nU2V0Rm9udChOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nKiBh
dHRyU3RyaW5nLCBOU1N0cmluZyogYXR0cmlidXRlLCBOU0ZvbnQqIGZvbnQsIE5TUmFuZ2UgcmFu
Z2UpCitzdGF0aWMgdm9pZCBBWEF0dHJpYnV0ZVN0cmluZ1NldEZvbnQoTlNNdXRhYmxlQXR0cmli
dXRlZFN0cmluZyAqYXR0clN0cmluZywgTlNTdHJpbmcgKmF0dHJpYnV0ZSwgQ1RGb250UmVmIGZv
bnQsIE5TUmFuZ2UgcmFuZ2UpCiB7CiAgICAgaWYgKCFBWEF0dHJpYnV0ZWRTdHJpbmdSYW5nZUlz
VmFsaWQoYXR0clN0cmluZywgcmFuZ2UpKQogICAgICAgICByZXR1cm47Ci0gICAgCisKICAgICBp
ZiAoZm9udCkgewotICAgICAgICBOU0RpY3Rpb25hcnkqIGRpY3QgPSBbTlNEaWN0aW9uYXJ5IGRp
Y3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBbZm9udCBmb250TmFtZV0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgTlNBY2Nlc3Np
YmlsaXR5Rm9udE5hbWVLZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9udCBm
YW1pbHlOYW1lXSAgICAgICAgICAgICAgICAgICAgICAgICAgICwgTlNBY2Nlc3NpYmlsaXR5Rm9u
dEZhbWlseUtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb250IGRpc3BsYXlO
YW1lXSAgICAgICAgICAgICAgICAgICAgICAgICAgLCBOU0FjY2Vzc2liaWxpdHlWaXNpYmxlTmFt
ZUtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRo
RmxvYXQ6W2ZvbnQgcG9pbnRTaXplXV0gLCBOU0FjY2Vzc2liaWxpdHlGb250U2l6ZUtleSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5pbF07CisgICAgICAgIE5TRGljdGlvbmFyeSAq
ZGljdCA9IFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czoKKyAgICAg
ICAgICAgIHN0YXRpY19jYXN0PE5TU3RyaW5nICo+KGFkb3B0Q0YoQ1RGb250Q29weVBvc3RTY3Jp
cHROYW1lKGZvbnQpKS5nZXQoKSksIE5TQWNjZXNzaWJpbGl0eUZvbnROYW1lS2V5LAorICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8TlNTdHJpbmcgKj4oYWRvcHRDRihDVEZvbnRDb3B5RmFtaWx5TmFt
ZShmb250KSkuZ2V0KCkpLCBOU0FjY2Vzc2liaWxpdHlGb250RmFtaWx5S2V5LAorICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8TlNTdHJpbmcgKj4oYWRvcHRDRihDVEZvbnRDb3B5RGlzcGxheU5hbWUo
Zm9udCkpLmdldCgpKSwgTlNBY2Nlc3NpYmlsaXR5VmlzaWJsZU5hbWVLZXksCisgICAgICAgICAg
ICBbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OkNURm9udEdldFNpemUoZm9udCldLCBOU0FjY2Vz
c2liaWxpdHlGb250U2l6ZUtleSwKKyAgICAgICAgICAgIG5pbF07CiAgICAgICAgIAogICAgICAg
ICBbYXR0clN0cmluZyBhZGRBdHRyaWJ1dGU6YXR0cmlidXRlIHZhbHVlOmRpY3QgcmFuZ2U6cmFu
Z2VdOwogICAgIH0gZWxzZQpAQCAtMTAyNCwxMCArMTAyNCwxMCBAQCBzdGF0aWMgdm9pZCBBWEF0
dHJpYnV0ZVN0cmluZ1NldEZvbnQoTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyogYXR0clN0cmlu
ZywgTlNTdAogICAgIAogfQogCi1zdGF0aWMgQ0dDb2xvclJlZiBDcmVhdGVDR0NvbG9ySWZEaWZm
ZXJlbnQoTlNDb2xvciogbnNDb2xvciwgQ0dDb2xvclJlZiBleGlzdGluZ0NvbG9yKQorc3RhdGlj
IENHQ29sb3JSZWYgQ3JlYXRlQ0dDb2xvcklmRGlmZmVyZW50KE5TQ29sb3IgKm5zQ29sb3IsIENH
Q29sb3JSZWYgZXhpc3RpbmdDb2xvcikKIHsKICAgICAvLyBnZXQgY29sb3IgaW5mb3JtYXRpb24g
YXNzdW1pbmcgTlNEZXZpY2VSR0JDb2xvclNwYWNlCi0gICAgTlNDb2xvciogcmdiQ29sb3IgPSBb
bnNDb2xvciBjb2xvclVzaW5nQ29sb3JTcGFjZU5hbWU6TlNEZXZpY2VSR0JDb2xvclNwYWNlXTsK
KyAgICBOU0NvbG9yICpyZ2JDb2xvciA9IFtuc0NvbG9yIGNvbG9yVXNpbmdDb2xvclNwYWNlTmFt
ZTpOU0RldmljZVJHQkNvbG9yU3BhY2VdOwogICAgIGlmIChyZ2JDb2xvciA9PSBuaWwpCiAgICAg
ICAgIHJnYkNvbG9yID0gW05TQ29sb3IgYmxhY2tDb2xvcl07CiAgICAgQ0dGbG9hdCBjb21wb25l
bnRzWzRdOwpAQCAtMTA3OSw3ICsxMDc5LDcgQEAgc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVTdHJp
bmdTZXRTdHlsZShOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5nLCBSZW4KICAg
ICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUgPSByZW5kZXJlci0+c3R5bGUoKTsKICAgICAKICAg
ICAvLyBzZXQgYmFzaWMgZm9udCBpbmZvCi0gICAgQVhBdHRyaWJ1dGVTdHJpbmdTZXRGb250KGF0
dHJTdHJpbmcsIE5TQWNjZXNzaWJpbGl0eUZvbnRUZXh0QXR0cmlidXRlLCBzdHlsZS5mb250Q2Fz
Y2FkZSgpLnByaW1hcnlGb250KCkuZ2V0TlNGb250KCksIHJhbmdlKTsKKyAgICBBWEF0dHJpYnV0
ZVN0cmluZ1NldEZvbnQoYXR0clN0cmluZywgTlNBY2Nlc3NpYmlsaXR5Rm9udFRleHRBdHRyaWJ1
dGUsIHN0eWxlLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKS5nZXRDVEZvbnQoKSwgcmFuZ2Up
OwogICAgIAogICAgIC8vIHNldCBiYXNpYyBjb2xvcnMKICAgICBBWEF0dHJpYnV0ZVN0cmluZ1Nl
dENvbG9yKGF0dHJTdHJpbmcsIE5TQWNjZXNzaWJpbGl0eUZvcmVncm91bmRDb2xvclRleHRBdHRy
aWJ1dGUsIG5zQ29sb3Ioc3R5bGUudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29s
b3IpKSwgcmFuZ2UpOwpAQCAtMTM0OCw3ICsxMzQ4LDcgQEAgc3RhdGljIE5TU3RyaW5nKiBuc1N0
cmluZ0ZvclJlcGxhY2VkTm9kZShOb2RlKiByZXBsYWNlZE5vZGUpCiAgICAgcmV0dXJuIFthdHRy
U3RyaW5nIGF1dG9yZWxlYXNlXTsKIH0KIAotc3RhdGljIGlkIHRleHRNYXJrZXJSYW5nZUZyb21W
aXNpYmxlUG9zaXRpb25zKEFYT2JqZWN0Q2FjaGUgKmNhY2hlLCBjb25zdCBWaXNpYmxlUG9zaXRp
b24mIHN0YXJ0UG9zaXRpb24sIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgZW5kUG9zaXRpb24pCitz
dGF0aWMgaWQgdGV4dE1hcmtlclJhbmdlRnJvbVZpc2libGVQb3NpdGlvbnMoQVhPYmplY3RDYWNo
ZSogY2FjaGUsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgc3RhcnRQb3NpdGlvbiwgY29uc3QgVmlz
aWJsZVBvc2l0aW9uJiBlbmRQb3NpdGlvbikKIHsKICAgICBpZCBzdGFydFRleHRNYXJrZXIgPSB0
ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uKGNhY2hlLCBzdGFydFBvc2l0aW9uKTsKICAgICBp
ZCBlbmRUZXh0TWFya2VyID0gdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbihjYWNoZSwgZW5k
UG9zaXRpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET00u
bW0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQppbmRleCBhMzJmMDNlYWZj
ZWMxYzk1NmVlYTVjMmM0NzAwMTBkY2JkZGNiNjVjLi41MDg2OWMyMzEyMzYxYzI3ZmQxNjRjZGQ0
MDQ4YWQ0ODQzMTIwOTY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpj
L0RPTS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQpAQCAtNzIx
LDI0ICs3MjEsMTMgQEAgaWQgPERPTUV2ZW50VGFyZ2V0PiBraXQoV2ViQ29yZTo6RXZlbnRUYXJn
ZXQqIGV2ZW50VGFyZ2V0KQogCiBAaW1wbGVtZW50YXRpb24gRE9NRWxlbWVudCAoV2ViUHJpdmF0
ZSkKIAotI2lmICFQTEFURk9STShJT1MpCi0tIChOU0ZvbnQgKilfZm9udAotewotICAgIC8vIEZJ
WE1FOiBDb3VsZCB3ZSBtb3ZlIHRoaXMgZnVuY3Rpb24gdG8gV2ViQ29yZTo6RWxlbWVudCBhbmQg
YXV0b2dlbmVyYXRlPwotICAgIGF1dG8gcmVuZGVyZXIgPSBjb3JlKHNlbGYpLT5yZW5kZXJlcigp
OwotICAgIGlmICghcmVuZGVyZXIpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgcmV0dXJuIHJl
bmRlcmVyLT5zdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKS5nZXROU0ZvbnQoKTsK
LX0KLSNlbHNlCiAtIChDVEZvbnRSZWYpX2ZvbnQKIHsKLSAgICBSZW5kZXJPYmplY3QqIHJlbmRl
cmVyID0gY29yZShzZWxmKS0+cmVuZGVyZXIoKTsKKyAgICBhdXRvKiByZW5kZXJlciA9IGNvcmUo
c2VsZiktPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuIG5p
bDsKICAgICByZXR1cm4gcmVuZGVyZXItPnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9u
dCgpLmdldENURm9udCgpOwogfQotI2VuZGlmCiAKICNpZiAhUExBVEZPUk0oSU9TKQogLSAoTlNE
YXRhICopX2ltYWdlVElGRlJlcHJlc2VudGF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9vYmpjL0RPTVByaXZhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29i
amMvRE9NUHJpdmF0ZS5oCmluZGV4IDFlMjkzNmRkODk0ZTU2M2MyMTc2NDJmMDI3YjhjZDJlN2M0
ZDUxY2UuLjdhYzJjMmVmZTUwZWE4Zjc2MWUxY2YzMzdkNzkxNDI3ZGYyMGFiMzMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NUHJpdmF0ZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NUHJpdmF0ZS5oCkBAIC03NCwxMSArNzQsOSBAQAog
CiBAaW50ZXJmYWNlIERPTUVsZW1lbnQgKFdlYlByaXZhdGUpCiAjaWYgIVRBUkdFVF9PU19JUEhP
TkUKLS0gKE5TRm9udCAqKV9mb250OwogLSAoTlNEYXRhICopX2ltYWdlVElGRlJlcHJlc2VudGF0
aW9uOwotI2Vsc2UKLS0gKENURm9udFJlZilfZm9udDsKICNlbmRpZgorLSAoQ1RGb250UmVmKV9m
b250OwogLSAoTlNVUkwgKilfZ2V0VVJMQXR0cmlidXRlOihOU1N0cmluZyAqKW5hbWU7CiAtIChC
T09MKWlzRm9jdXNlZDsKIEBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
Y29jb2EvSFRNTENvbnZlcnRlci5tbSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRN
TENvbnZlcnRlci5tbQppbmRleCA1ZmE0NGE2NTQyZTU3ZmViMjg3MDgyMzQ1YjI3NjFiZjE4Njlm
MzA0Li4wOGExYWNjNzE5ZWU5MDcyMDViMmVjZTVlZDBhNWVmNDg0OWJhMTE1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0hUTUxDb252ZXJ0ZXIubW0KKysrIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tCkBAIC0xMDM0LDIzICsx
MDM0LDEzIEBAIFBsYXRmb3JtQ29sb3IgKkhUTUxDb252ZXJ0ZXI6Ol9jb2xvckZvckVsZW1lbnQo
RWxlbWVudCYgZWxlbWVudCwgQ1NTUHJvcGVydHlJRCBwCiAgICAgcmV0dXJuIHBsYXRmb3JtUmVz
dWx0OwogfQogCi0jaWYgIVBMQVRGT1JNKElPUykKLXN0YXRpYyBQbGF0Zm9ybUZvbnQgKl9mb250
KEVsZW1lbnQmIGVsZW1lbnQpCi17Ci0gICAgYXV0byByZW5kZXJlciA9IGVsZW1lbnQucmVuZGVy
ZXIoKTsKLSAgICBpZiAoIXJlbmRlcmVyKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVy
biByZW5kZXJlci0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCkuZ2V0TlNGb250
KCk7Ci19Ci0jZWxzZQogc3RhdGljIFBsYXRmb3JtRm9udCAqX2ZvbnQoRWxlbWVudCYgZWxlbWVu
dCkKIHsKLSAgICBhdXRvIHJlbmRlcmVyID0gZWxlbWVudC5yZW5kZXJlcigpOworICAgIGF1dG8q
IHJlbmRlcmVyID0gZWxlbWVudC5yZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIpCiAgICAg
ICAgIHJldHVybiBuaWw7Ci0gICAgcmV0dXJuIChQbGF0Zm9ybUZvbnQgKilyZW5kZXJlci0+c3R5
bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCkuZ2V0Q1RGb250KCk7CisgICAgcmV0dXJu
IHRvTlNGb250KHJlbmRlcmVyLT5zdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKS5n
ZXRDVEZvbnQoKSk7CiB9Ci0jZW5kaWYKIAogI2RlZmluZSBVSUZsb2F0SXNaZXJvKG51bWJlcikg
KGZhYnMobnVtYmVyIC0gMCkgPCBGTFRfRVBTSUxPTikKIApAQCAtMjUzNSw4ICsyNTI1LDggQEAg
TlNBdHRyaWJ1dGVkU3RyaW5nICplZGl0aW5nQXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZShSYW5n
ZSYgcmFuZ2UsIEluY2x1ZGVJbWFnZXMKICAgICAgICAgICAgIFthdHRycy5nZXQoKSBzZXRPYmpl
Y3Q6W05TTnVtYmVyIG51bWJlcldpdGhJbnRlZ2VyOk5TVW5kZXJsaW5lU3R5bGVTaW5nbGVdIGZv
cktleTpOU1VuZGVybGluZVN0eWxlQXR0cmlidXRlTmFtZV07CiAgICAgICAgIGlmIChzdHlsZS50
ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCgpICYgVGV4dERlY29yYXRpb25MaW5lVGhyb3VnaCkKICAg
ICAgICAgICAgIFthdHRycy5nZXQoKSBzZXRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhJbnRl
Z2VyOk5TVW5kZXJsaW5lU3R5bGVTaW5nbGVdIGZvcktleTpOU1N0cmlrZXRocm91Z2hTdHlsZUF0
dHJpYnV0ZU5hbWVdOwotICAgICAgICBpZiAoTlNGb250ICpmb250ID0gc3R5bGUuZm9udENhc2Nh
ZGUoKS5wcmltYXJ5Rm9udCgpLmdldE5TRm9udCgpKQotICAgICAgICAgICAgW2F0dHJzLmdldCgp
IHNldE9iamVjdDpmb250IGZvcktleTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKKyAgICAgICAgaWYg
KGF1dG8gZm9udCA9IHN0eWxlLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKS5nZXRDVEZvbnQo
KSkKKyAgICAgICAgICAgIFthdHRycy5nZXQoKSBzZXRPYmplY3Q6dG9OU0ZvbnQoZm9udCkgZm9y
S2V5Ok5TRm9udEF0dHJpYnV0ZU5hbWVdOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBbYXR0
cnMuZ2V0KCkgc2V0T2JqZWN0Oltmb250TWFuYWdlciBjb252ZXJ0Rm9udDpXZWJEZWZhdWx0Rm9u
dCgpIHRvU2l6ZTpzdHlsZS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCkucGxhdGZvcm1EYXRh
KCkuc2l6ZSgpXSBmb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07CiAgICAgICAgIGlmIChzdHls
ZS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcikuYWxwaGEoKSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbSBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQppbmRleCAxOTUzYWM5ZjIyN2YyNDI1Zjlk
YjNhMjY5YjA2NzYxOGQyNjJiMGE0Li4wODM2NjM0NzBiYjhlNDA4NzAzZjU4Y2U4NTE5MDkxMTdm
MTgzZGU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMu
bW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCkBAIC0xNTUs
OCArMTU1LDggQEAgTlNEaWN0aW9uYXJ5KiBFZGl0b3I6OmZvbnRBdHRyaWJ1dGVzRm9yU2VsZWN0
aW9uU3RhcnQoKSBjb25zdAogICAgIGlmIChzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENT
U1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKS5pc1ZhbGlkKCkgJiYgc3R5bGUtPnZpc2l0ZWREZXBl
bmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcikuYWxwaGEoKSAhPSAwKQogICAg
ICAgICBbcmVzdWx0IHNldE9iamVjdDpuc0NvbG9yKHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29s
b3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpKSBmb3JLZXk6TlNCYWNrZ3JvdW5kQ29sb3JB
dHRyaWJ1dGVOYW1lXTsKIAotICAgIGlmIChzdHlsZS0+Zm9udENhc2NhZGUoKS5wcmltYXJ5Rm9u
dCgpLmdldE5TRm9udCgpKQotICAgICAgICBbcmVzdWx0IHNldE9iamVjdDpzdHlsZS0+Zm9udENh
c2NhZGUoKS5wcmltYXJ5Rm9udCgpLmdldE5TRm9udCgpIGZvcktleTpOU0ZvbnRBdHRyaWJ1dGVO
YW1lXTsKKyAgICBpZiAoYXV0byBjdEZvbnQgPSBzdHlsZS0+Zm9udENhc2NhZGUoKS5wcmltYXJ5
Rm9udCgpLmdldENURm9udCgpKQorICAgICAgICBbcmVzdWx0IHNldE9iamVjdDp0b05TRm9udChj
dEZvbnQpIGZvcktleTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKIAogICAgIGlmIChzdHlsZS0+dmlz
aXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpLmlzVmFsaWQoKSAmJiBzdHlsZS0+
dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpICE9IENvbG9yOjpibGFjaykK
ICAgICAgICAgW3Jlc3VsdCBzZXRPYmplY3Q6bnNDb2xvcihzdHlsZS0+dmlzaXRlZERlcGVuZGVu
dENvbG9yKENTU1Byb3BlcnR5Q29sb3IpKSBmb3JLZXk6TlNGb3JlZ3JvdW5kQ29sb3JBdHRyaWJ1
dGVOYW1lXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAppbmRleCBhOGFi
ZDVjYTAxNjgyYjMzZTA0MDZmNzlkMjhlZmE3MGE1NjJiMmE4Li5iNDljNGQ3MDI5ZDdiYTBhNjg4
YjljZDQ2OTQ3NzkwYmUzY2ZkMDQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udC5oCkBAIC0xNzIsMTUgKzE3MiwxMSBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIGRlc2NyaXB0
aW9uKCkgY29uc3Q7CiAjZW5kaWYKIAotI2lmIFVTRShBUFBLSVQpCi0gICAgTlNGb250KiBnZXRO
U0ZvbnQoKSBjb25zdCB7IHJldHVybiBtX3BsYXRmb3JtRGF0YS5uc0ZvbnQoKTsgfQotI2VuZGlm
Ci0KICNpZiBQTEFURk9STShJT1MpCi0gICAgQ1RGb250UmVmIGdldENURm9udCgpIGNvbnN0IHsg
cmV0dXJuIG1fcGxhdGZvcm1EYXRhLmZvbnQoKTsgfQogICAgIGJvb2wgc2hvdWxkTm90QmVVc2Vk
Rm9yQXJhYmljKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGROb3RCZVVzZWRGb3JBcmFiaWM7IH07
CiAjZW5kaWYKICNpZiBQTEFURk9STShDT0NPQSkKKyAgICBDVEZvbnRSZWYgZ2V0Q1RGb250KCkg
Y29uc3QgeyByZXR1cm4gbV9wbGF0Zm9ybURhdGEuZm9udCgpOyB9CiAgICAgQ0ZEaWN0aW9uYXJ5
UmVmIGdldENGU3RyaW5nQXR0cmlidXRlcyhib29sIGVuYWJsZUtlcm5pbmcsIEZvbnRPcmllbnRh
dGlvbikgY29uc3Q7CiAgICAgY29uc3QgQml0VmVjdG9yJiBnbHlwaHNTdXBwb3J0ZWRCeVNtYWxs
Q2FwcygpIGNvbnN0OwogICAgIGNvbnN0IEJpdFZlY3RvciYgZ2x5cGhzU3VwcG9ydGVkQnlBbGxT
bWFsbENhcHMoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRQbGF0Zm9ybURhdGEuaAppbmRleCBkMTZmNmMxYTkzYTZlNTJjZGY1NWRmZGVlMDY0
ZWZjM2I3MTllYmJhLi4zY2UzOGE0ZmI4YjU4NDMxYmNmZThlNTIyZjlmNDMxMGEyYzJhMDFlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1E
YXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3Jt
RGF0YS5oCkBAIC0xMzAsMTEgKzEzMCw2IEBAIHB1YmxpYzoKICAgICBSZXRhaW5QdHI8Q0ZUeXBl
UmVmPiBvYmplY3RGb3JFcXVhbGl0eUNoZWNrKCkgY29uc3Q7CiAKICAgICBib29sIGhhc0N1c3Rv
bVRyYWNraW5nKCkgY29uc3QgeyByZXR1cm4gaXNTeXN0ZW1Gb250KCk7IH0KLQotI2lmIFVTRShB
UFBLSVQpCi0gICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzIHdoZW4gYWxsIE5TRm9udCB1c2FnZSBp
cyByZW1vdmVkLgotICAgIE5TRm9udCAqbnNGb250KCkgY29uc3QgeyByZXR1cm4gKE5TRm9udCAq
KW1fZm9udC5nZXQoKTsgfQotI2VuZGlmCiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKFdJTikgfHwg
UExBVEZPUk0oQ09DT0EpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9Gb250Q29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9Gb250Q29jb2EubW0KaW5kZXggN2ZlMGMyZTE4YjRkMmQ2NjNmYzZiYWYxOWM1NGRm
ZTQ5NGEzNjM0OC4uYmNkYWY5YjFiNWU5Njc5OTNiNTAzMWE3YzIzYTRlY2FhNmYyZmM0ZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENvY29h
Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDb2Nv
YS5tbQpAQCAtNTI1LDEwICs1MjUsMTYgQEAgUmVmUHRyPEZvbnQ+IEZvbnQ6OnBsYXRmb3JtQ3Jl
YXRlU2NhbGVkRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBmbG9hdCBzY2FsZUYKICAgICBy
ZXR1cm4gY3JlYXRlRGVyaXZhdGl2ZUZvbnQoc2NhbGVkRm9udC5nZXQoKSwgc2l6ZSwgbV9wbGF0
Zm9ybURhdGEub3JpZW50YXRpb24oKSwgZm9udFRyYWl0cywgbV9wbGF0Zm9ybURhdGEuc3ludGhl
dGljQm9sZCgpLCBtX3BsYXRmb3JtRGF0YS5zeW50aGV0aWNPYmxpcXVlKCkpOwogfQogCitzdGF0
aWMgaW5saW5lIGJvb2wgY2FzZUluc2Vuc2l0aXZlQ29tcGFyZShDRlN0cmluZ1JlZiBhLCBDRlN0
cmluZ1JlZiBiKQoreworICAgIHJldHVybiBhICYmIENGU3RyaW5nQ29tcGFyZShhLCBiLCBrQ0ZD
b21wYXJlQ2FzZUluc2Vuc2l0aXZlKSA9PSBrQ0ZDb21wYXJlRXF1YWxUbzsKK30KKwogdm9pZCBG
b250OjpkZXRlcm1pbmVQaXRjaCgpCiB7Ci0jaWYgVVNFKEFQUEtJVCkKLSAgICBOU0ZvbnQqIGYg
PSBtX3BsYXRmb3JtRGF0YS5uc0ZvbnQoKTsKKyAgICBDVEZvbnRSZWYgY3RGb250ID0gbV9wbGF0
Zm9ybURhdGEuZm9udCgpOworICAgIEFTU0VSVChjdEZvbnQpOworCiAgICAgLy8gU3BlY2lhbCBj
YXNlIE9zYWthLU1vbm8uCiAgICAgLy8gQWNjb3JkaW5nIHRvIDxyZGFyOi8vcHJvYmxlbS8zOTk5
NDY3Piwgd2Ugc2hvdWxkIHRyZWF0IE9zYWthLU1vbm8gYXMgZml4ZWQgcGl0Y2guCiAgICAgLy8g
Tm90ZSB0aGF0IHRoZSBBcHBLaXQgZG9lcyBub3QgcmVwb3J0IE9zYWthLU1vbm8gYXMgZml4ZWQg
cGl0Y2guCkBAIC01NDEsMTggKzU0NywxMSBAQCB2b2lkIEZvbnQ6OmRldGVybWluZVBpdGNoKCkK
ICAgICAvLyBBY2NvcmRpbmcgdG8gPHJkYXI6Ly9wcm9ibGVtLzU0NTQ3MDQ+LCB3ZSBzaG91bGQg
bm90IHRyZWF0IE1vbm90eXBlQ29yc2l2YSBhcyBmaXhlZCBwaXRjaC4KICAgICAvLyBOb3RlIHRo
YXQgQXBwS2l0IGRvZXMgcmVwb3J0IE1vbm90eXBlQ29yc2l2YSBhcyBmaXhlZCBwaXRjaC4KIAot
ICAgIE5TU3RyaW5nICpuYW1lID0gW2YgZm9udE5hbWVdOwotICAgIG1fdHJlYXRBc0ZpeGVkUGl0
Y2ggPSAoW2YgaXNGaXhlZFBpdGNoXSAgfHwgW2YgX2lzRmFrZUZpeGVkUGl0Y2hdIHx8IFtuYW1l
IGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmU6QCJPc2FrYS1Nb25vIl0gPT0gTlNPcmRlcmVkU2FtZSkg
JiYgW25hbWUgY2FzZUluc2Vuc2l0aXZlQ29tcGFyZTpAIk1TLVBHb3RoaWMiXSAhPSBOU09yZGVy
ZWRTYW1lICYmIFtuYW1lIGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmU6QCJNb25vdHlwZUNvcnNpdmEi
XSAhPSBOU09yZGVyZWRTYW1lOwotI2Vsc2UKLSAgICBDVEZvbnRSZWYgY3RGb250ID0gbV9wbGF0
Zm9ybURhdGEuZm9udCgpOwotICAgIG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPSBmYWxzZTsKLSAgICBp
ZiAoIWN0Rm9udCkKLSAgICAgICAgcmV0dXJuOyAvLyBDVEZvbnQgaXMgbnVsbCBpbiB0aGUgY2Fz
ZSBvZiBTVkcgZm9udHMgZm9yIGV4YW1wbGUuCi0KICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+
IGZ1bGxOYW1lID0gYWRvcHRDRihDVEZvbnRDb3B5RnVsbE5hbWUoY3RGb250KSk7CiAgICAgUmV0
YWluUHRyPENGU3RyaW5nUmVmPiBmYW1pbHlOYW1lID0gYWRvcHRDRihDVEZvbnRDb3B5RmFtaWx5
TmFtZShjdEZvbnQpKTsKIAotICAgIG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPSBDR0ZvbnRJc0ZpeGVk
UGl0Y2gobV9wbGF0Zm9ybURhdGEuY2dGb250KCkpIHx8IChmdWxsTmFtZSAmJiAoQ0ZTdHJpbmdD
b21wYXJlKGZ1bGxOYW1lLmdldCgpLCBDRlNUUigiT3Nha2EtTW9ubyIpLCBrQ0ZDb21wYXJlQ2Fz
ZUluc2Vuc2l0aXZlKSA9PSBrQ0ZDb21wYXJlRXF1YWxUbyB8fCBDRlN0cmluZ0NvbXBhcmUoZnVs
bE5hbWUuZ2V0KCksIENGU1RSKCJNUy1QR290aGljIiksIGtDRkNvbXBhcmVDYXNlSW5zZW5zaXRp
dmUpID09IGtDRkNvbXBhcmVFcXVhbFRvKSk7CisgICAgbV90cmVhdEFzRml4ZWRQaXRjaCA9IChD
VEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhjdEZvbnQpICYga0NURm9udE1vbm9TcGFjZVRyYWl0KSB8
fCBDR0ZvbnRJc0ZpeGVkUGl0Y2gobV9wbGF0Zm9ybURhdGEuY2dGb250KCkpIHx8IChjYXNlSW5z
ZW5zaXRpdmVDb21wYXJlKGZ1bGxOYW1lLmdldCgpLCBDRlNUUigiT3Nha2EtTW9ubyIpKSB8fCBj
YXNlSW5zZW5zaXRpdmVDb21wYXJlKGZ1bGxOYW1lLmdldCgpLCBDRlNUUigiTVMtUEdvdGhpYyIp
KSB8fCBjYXNlSW5zZW5zaXRpdmVDb21wYXJlKGZ1bGxOYW1lLmdldCgpLCBDRlNUUigiTW9ub3R5
cGVDb3JzaXZhIikpKTsKKyNpZiBQTEFURk9STShJT1MpCiAgICAgaWYgKGZhbWlseU5hbWUgJiYg
Q0ZTdHJpbmdDb21wYXJlKGZhbWlseU5hbWUuZ2V0KCksIENGU1RSKCJDb3VyaWVyIE5ldyIpLCBr
Q0ZDb21wYXJlQ2FzZUluc2Vuc2l0aXZlKSA9PSBrQ0ZDb21wYXJlRXF1YWxUbykgewogICAgICAg
ICAvLyBTcGVjaWFsIGNhc2UgQ291cmllciBOZXcgdG8gbm90IGJlIHRyZWF0ZWQgYXMgZml4ZWQg
cGl0Y2gsIGFzIHRoaXMgd2lsbCBtYWtlIHVzZSBvZiBhIGhhY2tlZCBzcGFjZSB3aWR0aCB3aGlj
aCBpcyB1bmRlc2lyZWFibGUgZm9yIGlQaG9uZSAoc2VlIHJkYXI6Ly82MjY5NzgzKS4KICAgICAg
ICAgbV90cmVhdEFzRml4ZWRQaXRjaCA9IGZhbHNlOwpAQCAtNTcxLDQzICs1NzAsMTQgQEAgRmxv
YXRSZWN0IEZvbnQ6OnBsYXRmb3JtQm91bmRzRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CiAg
ICAgcmV0dXJuIGJvdW5kaW5nQm94OwogfQogCi1zdGF0aWMgaW5saW5lIENHRm9udFJlbmRlcmlu
Z1N0eWxlIHJlbmRlcmluZ1N0eWxlKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0
YSkKLXsKLSNpZiBVU0UoQVBQS0lUKQotICAgIENHRm9udFJlbmRlcmluZ1N0eWxlIHN0eWxlID0g
a0NHRm9udFJlbmRlcmluZ1N0eWxlQW50aWFsaWFzaW5nIHwga0NHRm9udFJlbmRlcmluZ1N0eWxl
U3VicGl4ZWxQb3NpdGlvbmluZyB8IGtDR0ZvbnRSZW5kZXJpbmdTdHlsZVN1YnBpeGVsUXVhbnRp
emF0aW9uOwotICAgIE5TRm9udCAqZm9udCA9IHBsYXRmb3JtRGF0YS5uc0ZvbnQoKTsKLSAgICBp
ZiAoZm9udCkgewotICAgICAgICBzd2l0Y2ggKFtmb250IHJlbmRlcmluZ01vZGVdKSB7Ci0gICAg
ICAgIGNhc2UgTlNGb250SW50ZWdlckFkdmFuY2VtZW50c1JlbmRlcmluZ01vZGU6Ci0gICAgICAg
ICAgICBzdHlsZSA9IDA7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBOU0ZvbnRB
bnRpYWxpYXNlZEludGVnZXJBZHZhbmNlbWVudHNSZW5kZXJpbmdNb2RlOgotICAgICAgICAgICAg
c3R5bGUgPSBrQ0dGb250UmVuZGVyaW5nU3R5bGVBbnRpYWxpYXNpbmc7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgfQotICAgIHJldHVybiBzdHlsZTsKLQotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0ocGxhdGZv
cm1EYXRhKTsKLSAgICByZXR1cm4ga0NHRm9udFJlbmRlcmluZ1N0eWxlQW50aWFsaWFzaW5nIHwg
a0NHRm9udFJlbmRlcmluZ1N0eWxlU3VicGl4ZWxQb3NpdGlvbmluZyB8IGtDR0ZvbnRSZW5kZXJp
bmdTdHlsZVN1YnBpeGVsUXVhbnRpemF0aW9uIHwga0NHRm9udEFudGlhbGlhc2luZ1N0eWxlVW5m
aWx0ZXJlZDsKLSNlbmRpZgotfQotCiBzdGF0aWMgaW5saW5lIE9wdGlvbmFsPENHU2l6ZT4gYWR2
YW5jZUZvckNvbG9yQml0bWFwRm9udChjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURh
dGEsIEdseXBoIGdseXBoKQogewotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBOU0ZvbnQgKmZvbnQg
PSBwbGF0Zm9ybURhdGEubnNGb250KCk7CisgICAgQ1RGb250UmVmIGZvbnQgPSBwbGF0Zm9ybURh
dGEuZm9udCgpOwogICAgIGlmICghZm9udCB8fCAhcGxhdGZvcm1EYXRhLmlzQ29sb3JCaXRtYXBG
b250KCkpCiAgICAgICAgIHJldHVybiBOdWxsb3B0OwotICAgIHJldHVybiBOU1NpemVUb0NHU2l6
ZShbZm9udCBhZHZhbmNlbWVudEZvckdseXBoOmdseXBoXSk7Ci0jZWxzZQotICAgIFVOVVNFRF9Q
QVJBTShwbGF0Zm9ybURhdGEpOwotICAgIFVOVVNFRF9QQVJBTShnbHlwaCk7Ci0gICAgcmV0dXJu
IE51bGxvcHQ7Ci0jZW5kaWYKKyAgICBDR1NpemUgYWR2YW5jZTsKKyAgICBDVEZvbnRHZXRBZHZh
bmNlc0ZvckdseXBocyhmb250LCBrQ1RGb250T3JpZW50YXRpb25EZWZhdWx0LCAmZ2x5cGgsICZh
ZHZhbmNlLCAxKTsKKyAgICByZXR1cm4gYWR2YW5jZTsKIH0KIAogc3RhdGljIGlubGluZSBib29s
IGNhblVzZUZhc3RHbHlwaEFkdmFuY2VHZXR0ZXIoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxh
dGZvcm1EYXRhLCBHbHlwaCBnbHlwaCwgQ0dTaXplJiBhZHZhbmNlLCBib29sJiBwb3B1bGF0ZWRB
ZHZhbmNlKQpAQCAtNjMwLDcgKzYwMCw4IEBAIGZsb2F0IEZvbnQ6OnBsYXRmb3JtV2lkdGhGb3JH
bHlwaChHbHlwaCBnbHlwaCkgY29uc3QKICAgICBpZiAoKGhvcml6b250YWwgfHwgbV9pc0Jyb2tl
bklkZW9ncmFwaEZhbGxiYWNrKSAmJiBjYW5Vc2VGYXN0R2x5cGhBZHZhbmNlR2V0dGVyKHRoaXMt
PnBsYXRmb3JtRGF0YSgpLCBnbHlwaCwgYWR2YW5jZSwgcG9wdWxhdGVkQWR2YW5jZSkpIHsKICAg
ICAgICAgZmxvYXQgcG9pbnRTaXplID0gcGxhdGZvcm1EYXRhKCkuc2l6ZSgpOwogICAgICAgICBD
R0FmZmluZVRyYW5zZm9ybSBtID0gQ0dBZmZpbmVUcmFuc2Zvcm1NYWtlU2NhbGUocG9pbnRTaXpl
LCBwb2ludFNpemUpOwotICAgICAgICBpZiAoIUNHRm9udEdldEdseXBoQWR2YW5jZXNGb3JTdHls
ZShwbGF0Zm9ybURhdGEoKS5jZ0ZvbnQoKSwgJm0sIHJlbmRlcmluZ1N0eWxlKHBsYXRmb3JtRGF0
YSgpKSwgJmdseXBoLCAxLCAmYWR2YW5jZSkpIHsKKyAgICAgICAgQ0dGb250UmVuZGVyaW5nU3R5
bGUgc3R5bGUgPSBrQ0dGb250UmVuZGVyaW5nU3R5bGVBbnRpYWxpYXNpbmcgfCBrQ0dGb250UmVu
ZGVyaW5nU3R5bGVTdWJwaXhlbFBvc2l0aW9uaW5nIHwga0NHRm9udFJlbmRlcmluZ1N0eWxlU3Vi
cGl4ZWxRdWFudGl6YXRpb24gfCBrQ0dGb250QW50aWFsaWFzaW5nU3R5bGVVbmZpbHRlcmVkOwor
ICAgICAgICBpZiAoIUNHRm9udEdldEdseXBoQWR2YW5jZXNGb3JTdHlsZShwbGF0Zm9ybURhdGEo
KS5jZ0ZvbnQoKSwgJm0sIHN0eWxlLCAmZ2x5cGgsIDEsICZhZHZhbmNlKSkgewogICAgICAgICAg
ICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBmdWxsTmFtZSA9IGFkb3B0Q0YoQ0dGb250Q29weUZ1
bGxOYW1lKHBsYXRmb3JtRGF0YSgpLmNnRm9udCgpKSk7CiAgICAgICAgICAgICBMT0dfRVJST1Io
IlVuYWJsZSB0byBjYWNoZSBnbHlwaCB3aWR0aHMgZm9yICVAICVmIiwgZnVsbE5hbWUuZ2V0KCks
IHBvaW50U2l6ZSk7CiAgICAgICAgICAgICBhZHZhbmNlLndpZHRoID0gMDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9ybURhdGFD
b2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0
Zm9ybURhdGFDb2NvYS5tbQppbmRleCBkODYxODM3ZGRmZGVkOGEzNjFhMTI3NjQ2NTU5YjQ1Y2Ey
YTQ4NzE0Li5iYzY1OGM2ZmFkOWJmZWJmYWZkYjgwYjc0NzhkYjY3NDA1MmFlMTUzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250UGxhdGZvcm1E
YXRhQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
Rm9udFBsYXRmb3JtRGF0YUNvY29hLm1tCkBAIC0yOSw5ICsyOSw3IEBACiAjaW1wb3J0ICJXZWJD
b3JlU3lzdGVtSW50ZXJmYWNlLmgiCiAjaW1wb3J0IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAot
I2lmICFQTEFURk9STShJT1MpCi0jaW1wb3J0IDxBcHBLaXQvTlNGb250Lmg+Ci0jZWxzZQorI2lm
IFBMQVRGT1JNKElPUykKICNpbXBvcnQgIkNvcmVHcmFwaGljc1NQSS5oIgogI2ltcG9ydCA8Q29y
ZVRleHQvQ29yZVRleHQuaD4KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMv
V2ViQ29yZVN1cHBvcnQvUG9wdXBNZW51TWFjLm1tIGIvU291cmNlL1dlYktpdC9tYWMvV2ViQ29y
ZVN1cHBvcnQvUG9wdXBNZW51TWFjLm1tCmluZGV4IDZkMmNlMTYyMTNlNjhiMDU5MjliMzVmMjIw
NTllOTkyZWVmNmNlYjcuLmZjZTgwYmMzNDVhNTFjZDQ2NWVmYjBkNDMxNzllOTQ4ODQwY2RkMTYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1BvcHVwTWVudU1h
Yy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9Qb3B1cE1lbnVNYWMu
bW0KQEAgLTgxLDEyICs4MSwxMiBAQCB2b2lkIFBvcHVwTWVudU1hYzo6cG9wdWxhdGUoKQogICAg
ICAgICBQb3B1cE1lbnVTdHlsZSBzdHlsZSA9IG1fY2xpZW50LT5pdGVtU3R5bGUoaSk7CiAgICAg
ICAgIFJldGFpblB0cjxOU011dGFibGVEaWN0aW9uYXJ5PiBhdHRyaWJ1dGVzID0gYWRvcHROUyhb
W05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdKTsKICAgICAgICAgaWYgKHN0eWxlLmZv
bnQoKSAhPSBGb250Q2FzY2FkZSgpKSB7Ci0gICAgICAgICAgICBOU0ZvbnQgKmZvbnQgPSBzdHls
ZS5mb250KCkucHJpbWFyeUZvbnQoKS5nZXROU0ZvbnQoKTsKKyAgICAgICAgICAgIFJldGFpblB0
cjxDVEZvbnRSZWY+IGZvbnQgPSBzdHlsZS5mb250KCkucHJpbWFyeUZvbnQoKS5nZXRDVEZvbnQo
KTsKICAgICAgICAgICAgIGlmICghZm9udCkgewogICAgICAgICAgICAgICAgIENHRmxvYXQgc2l6
ZSA9IHN0eWxlLmZvbnQoKS5wcmltYXJ5Rm9udCgpLnBsYXRmb3JtRGF0YSgpLnNpemUoKTsKLSAg
ICAgICAgICAgICAgICBmb250ID0gc3R5bGUuZm9udCgpLndlaWdodCgpIDwgRm9udFdlaWdodEJv
bGQgPyBbTlNGb250IHN5c3RlbUZvbnRPZlNpemU6c2l6ZV0gOiBbTlNGb250IGJvbGRTeXN0ZW1G
b250T2ZTaXplOnNpemVdOworICAgICAgICAgICAgICAgIGZvbnQgPSBhZG9wdENGKENURm9udENy
ZWF0ZVVJRm9udEZvckxhbmd1YWdlKHN0eWxlLmZvbnQoKS53ZWlnaHQoKSA8IEZvbnRXZWlnaHRC
b2xkID8ga0NURm9udFVJRm9udFN5c3RlbSA6IGtDVEZvbnRVSUZvbnRFbXBoYXNpemVkU3lzdGVt
LCBzaXplLCBudWxscHRyKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBbYXR0cmlidXRl
cyBzZXRPYmplY3Q6Zm9udCBmb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07CisgICAgICAgICAg
ICBbYXR0cmlidXRlcyBzZXRPYmplY3Q6dG9OU0ZvbnQoZm9udC5nZXQoKSkgZm9yS2V5Ok5TRm9u
dEF0dHJpYnV0ZU5hbWVdOwogICAgICAgICB9CiAKICAgICAgICAgUmV0YWluUHRyPE5TTXV0YWJs
ZVBhcmFncmFwaFN0eWxlPiBwYXJhZ3JhcGhTdHlsZSA9IGFkb3B0TlMoW1tOU1BhcmFncmFwaFN0
eWxlIGRlZmF1bHRQYXJhZ3JhcGhTdHlsZV0gbXV0YWJsZUNvcHldKTsKQEAgLTE1NCwxMyArMTU0
LDEzIEBAIHZvaWQgUG9wdXBNZW51TWFjOjpzaG93KGNvbnN0IEludFJlY3QmIHIsIEZyYW1lVmll
dyogdiwgaW50IGluZGV4KQogICAgIFttX3BvcHVwIHNlbGVjdEl0ZW1BdEluZGV4OmluZGV4XTsK
ICAgICBbbV9wb3B1cCBzZXRVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uOnRleHREaXJlY3Rp
b24gPT0gTFRSID8gTlNVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uTGVmdFRvUmlnaHQgOiBO
U1VzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb25SaWdodFRvTGVmdF07CiAKLSAgICBOU01lbnUq
IG1lbnUgPSBbbV9wb3B1cCBtZW51XTsKKyAgICBOU01lbnUgKm1lbnUgPSBbbV9wb3B1cCBtZW51
XTsKICNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTEwMAogICAgIFtt
ZW51IHNldFVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb246dGV4dERpcmVjdGlvbiA9PSBMVFIg
PyBOU1VzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb25MZWZ0VG9SaWdodCA6IE5TVXNlckludGVy
ZmFjZUxheW91dERpcmVjdGlvblJpZ2h0VG9MZWZ0XTsKICNlbmRpZgogCiAgICAgTlNQb2ludCBs
b2NhdGlvbjsKLSAgICBOU0ZvbnQqIGZvbnQgPSBtX2NsaWVudC0+bWVudVN0eWxlKCkuZm9udCgp
LnByaW1hcnlGb250KCkuZ2V0TlNGb250KCk7CisgICAgQ1RGb250UmVmIGZvbnQgPSBtX2NsaWVu
dC0+bWVudVN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250KCkuZ2V0Q1RGb250KCk7CiAKICAgICAv
LyBUaGVzZSB2YWx1ZXMgd2VyZSBib3Jyb3dlZCBmcm9tIEFwcEtpdCB0byBtYXRjaCB0aGVpciBw
bGFjZW1lbnQgb2YgdGhlIG1lbnUuCiAgICAgY29uc3QgaW50IHBvcE92ZXJIb3Jpem9udGFsQWRq
dXN0ID0gLTEwOwpAQCAtMTcyLDggKzE3Miw4IEBAIHZvaWQgUG9wdXBNZW51TWFjOjpzaG93KGNv
bnN0IEludFJlY3QmIHIsIEZyYW1lVmlldyogdiwgaW50IGluZGV4KQogICAgICAgICAgICAgdGl0
bGVGcmFtZSA9IHI7CiAgICAgICAgIGZsb2F0IHZlcnRPZmZzZXQgPSByb3VuZGYoKE5TTWF4WShy
KSAtIE5TTWF4WSh0aXRsZUZyYW1lKSkgKyBOU0hlaWdodCh0aXRsZUZyYW1lKSk7CiAgICAgICAg
IC8vIEFkanVzdCBmb3IgZm9udHMgb3RoZXIgdGhhbiB0aGUgc3lzdGVtIGZvbnQuCi0gICAgICAg
IE5TRm9udCogZGVmYXVsdEZvbnQgPSBbTlNGb250IHN5c3RlbUZvbnRPZlNpemU6W2ZvbnQgcG9p
bnRTaXplXV07Ci0gICAgICAgIHZlcnRPZmZzZXQgKz0gW2ZvbnQgZGVzY2VuZGVyXSAtIFtkZWZh
dWx0Rm9udCBkZXNjZW5kZXJdOworICAgICAgICBhdXRvIGRlZmF1bHRGb250ID0gYWRvcHRDRihD
VEZvbnRDcmVhdGVVSUZvbnRGb3JMYW5ndWFnZShrQ1RGb250VUlGb250U3lzdGVtLCBDVEZvbnRH
ZXRTaXplKGZvbnQpLCBuaWwpKTsKKyAgICAgICAgdmVydE9mZnNldCArPSBDVEZvbnRHZXREZXNj
ZW50KGZvbnQpIC0gQ1RGb250R2V0RGVzY2VudChkZWZhdWx0Rm9udC5nZXQoKSk7CiAgICAgICAg
IHZlcnRPZmZzZXQgPSBmbWluZihOU0hlaWdodChyKSwgdmVydE9mZnNldCk7CiAKICAgICAgICAg
ZmxvYXQgaG9yaXpvbnRhbE9mZnNldCA9IHRleHREaXJlY3Rpb24gPT0gTFRSID8gcG9wT3Zlckhv
cml6b250YWxBZGp1c3QgOiAwOwpAQCAtMjE1LDcgKzIxNSw3IEBAIHZvaWQgUG9wdXBNZW51TWFj
OjpzaG93KGNvbnN0IEludFJlY3QmIHIsIEZyYW1lVmlldyogdiwgaW50IGluZGV4KQogI3ByYWdt
YSBjbGFuZyBkaWFnbm9zdGljIHBvcAogICAgIH0KIAotICAgIFdLUG9wdXBNZW51KG1lbnUsIGxv
Y2F0aW9uLCByb3VuZGYoTlNXaWR0aChyKSksIGR1bW15Vmlldy5nZXQoKSwgaW5kZXgsIGZvbnQs
IGNvbnRyb2xTaXplLCAhbV9jbGllbnQtPm1lbnVTdHlsZSgpLmhhc0RlZmF1bHRBcHBlYXJhbmNl
KCkpOworICAgIFdLUG9wdXBNZW51KG1lbnUsIGxvY2F0aW9uLCByb3VuZGYoTlNXaWR0aChyKSks
IGR1bW15Vmlldy5nZXQoKSwgaW5kZXgsIHRvTlNGb250KGZvbnQpLCBjb250cm9sU2l6ZSwgIW1f
Y2xpZW50LT5tZW51U3R5bGUoKS5oYXNEZWZhdWx0QXBwZWFyYW5jZSgpKTsKIAogICAgIFttX3Bv
cHVwIGRpc21pc3NQb3BVcF07CiAgICAgW2R1bW15VmlldyByZW1vdmVGcm9tU3VwZXJ2aWV3XTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0gYi9T
b3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCmluZGV4IDI4NjgzMmNmYWIy
YmIxN2U1MjdkNWU5NjEwMzUwNzM4Y2M4MDNmMjMuLmUwMDkwZjM2YzMwMjI5ZmNmNWM4ODU0YjRk
NTAyYmE0OTQxM2VmNTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2Vi
SFRNTFZpZXcubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5t
bQpAQCAtNTU5OSwxNCArNTU5OSwxNCBAQCBzdGF0aWMgUGFzc1JlZlB0cjxLZXlib2FyZEV2ZW50
PiBjdXJyZW50S2V5Ym9hcmRFdmVudChGcmFtZSogY29yZUZyYW1lKQogICAgIHJldHVybiBbW05T
Rm9udE1hbmFnZXIgc2hhcmVkRm9udE1hbmFnZXJdIGZvbnRXaXRoRmFtaWx5OkAiVGltZXMiIHRy
YWl0czpOU0ZvbnRJdGFsaWNUcmFpdCB3ZWlnaHQ6U1RBTkRBUkRfQk9MRF9XRUlHSFQgc2l6ZTox
Mi4wZl07CiB9CiAKLXN0YXRpYyBOU1N0cmluZyAqZm9udE5hbWVGb3JEZXNjcmlwdGlvbihOU1N0
cmluZyAqZmFtaWx5TmFtZSwgQk9PTCBpdGFsaWMsIEJPT0wgYm9sZCkKK3N0YXRpYyBSZXRhaW5Q
dHI8Q0ZTdHJpbmdSZWY+IGZvbnROYW1lRm9yRGVzY3JpcHRpb24oTlNTdHJpbmcgKmZhbWlseU5h
bWUsIEJPT0wgaXRhbGljLCBCT09MIGJvbGQpCiB7CiAgICAgLy8gRmluZCB0aGUgZm9udCB0aGUg
c2FtZSB3YXkgdGhlIHJlbmRlcmluZyBjb2RlIHdvdWxkIGxhdGVyIGlmIGl0IGVuY291bnRlcmVk
IHRoaXMgQ1NTLgogICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb247CiAgICAgZm9u
dERlc2NyaXB0aW9uLnNldElzSXRhbGljKGl0YWxpYyk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNl
dFdlaWdodChib2xkID8gRm9udFdlaWdodDkwMCA6IEZvbnRXZWlnaHQ1MDApOwogICAgIFJlZlB0
cjxGb250PiBmb250ID0gRm9udENhY2hlOjpzaW5nbGV0b24oKS5mb250Rm9yRmFtaWx5KGZvbnRE
ZXNjcmlwdGlvbiwgZmFtaWx5TmFtZSk7Ci0gICAgcmV0dXJuIFtmb250LT5wbGF0Zm9ybURhdGEo
KS5uc0ZvbnQoKSBmb250TmFtZV07CisgICAgcmV0dXJuIGFkb3B0Q0YoQ1RGb250Q29weVBvc3RT
Y3JpcHROYW1lKGZvbnQtPmdldENURm9udCgpKSk7CiB9CiAKIC0gKHZvaWQpX2FkZFRvU3R5bGU6
KERPTUNTU1N0eWxlRGVjbGFyYXRpb24gKilzdHlsZSBmb250QTooTlNGb250ICopYSBmb250Qjoo
TlNGb250ICopYgpAQCAtNTY0NSw4ICs1NjQ1LDEwIEBAIHN0YXRpYyBOU1N0cmluZyAqZm9udE5h
bWVGb3JEZXNjcmlwdGlvbihOU1N0cmluZyAqZmFtaWx5TmFtZSwgQk9PTCBpdGFsaWMsIEJPT0wK
ICAgICAgICAgLy8gdGhlIFBvc3RzY3JpcHQgbmFtZS4KICAgICAgICAgLy8gSWYgd2UgZG9uJ3Qg
ZmluZCBhIGZvbnQgd2l0aCB0aGUgc2FtZSBQb3N0c2NyaXB0IG5hbWUsIHRoZW4gd2UnbGwgaGF2
ZSB0byB1c2UgdGhlCiAgICAgICAgIC8vIFBvc3RzY3JpcHQgbmFtZSB0byBtYWtlIHRoZSBDU1Mg
c3BlY2lmaWMgZW5vdWdoLgotICAgICAgICBpZiAoIVtmb250TmFtZUZvckRlc2NyaXB0aW9uKGFG
YW1pbHlOYW1lLCBhSXNJdGFsaWMsIGFJc0JvbGQpIGlzRXF1YWxUb1N0cmluZzpbYSBmb250TmFt
ZV1dKQotICAgICAgICAgICAgZmFtaWx5TmFtZUZvckNTUyA9IFthIGZvbnROYW1lXTsKKyAgICAg
ICAgYXV0byBmb250TmFtZSA9IGZvbnROYW1lRm9yRGVzY3JpcHRpb24oYUZhbWlseU5hbWUsIGFJ
c0l0YWxpYywgYUlzQm9sZCk7CisgICAgICAgIGF1dG8gYU5hbWUgPSBbYSBmb250TmFtZV07Cisg
ICAgICAgIGlmICghZm9udE5hbWUgfHwgIWFOYW1lIHx8ICFDRkVxdWFsKGZvbnROYW1lLmdldCgp
LCBzdGF0aWNfY2FzdDxDRlN0cmluZ1JlZj4oYU5hbWUpKSkKKyAgICAgICAgICAgIGZhbWlseU5h
bWVGb3JDU1MgPSBhTmFtZTsKIAogICAgICAgICAvLyBGSVhNRTogTmVlZCBtb3JlIHNvcGhpc3Rp
Y2F0ZWQgZXNjYXBpbmcgY29kZSBpZiB3ZSB3YW50IHRvIGhhbmRsZSBmYW1pbHkgbmFtZXMKICAg
ICAgICAgLy8gd2l0aCBjaGFyYWN0ZXJzIGxpa2Ugc2luZ2xlIHF1b3RlIG9yIGJhY2tzbGFzaCBp
biB0aGVpciBuYW1lcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvbWFjL1dlYlBvcHVwTWVudU1hYy5tbSBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYlBvcHVwTWVudU1hYy5tbQppbmRleCBmNzI3YzY4
NWQwMTMxM2Y3ZGIxYWZlMWYxOWQyZDJhMjMzYjE4MTdlLi41YTQzNDIzNjE3MDkyZTZjYTI0ZTY2
MjAzNmI4Zjg0YmQ1MDZiYmU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L21hYy9XZWJQb3B1cE1lbnVNYWMubW0KKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViUG9wdXBNZW51TWFjLm1tCkBAIC0z
OSwxNSArMzksMTkgQEAgdm9pZCBXZWJQb3B1cE1lbnU6OnNldFVwUGxhdGZvcm1EYXRhKGNvbnN0
IEludFJlY3QmLCBQbGF0Zm9ybVBvcHVwTWVudURhdGEmIGRhdGEKIHsKICNpZiBVU0UoQVBQS0lU
KQogICAgIC8vIEZJWE1FOiBmb250IHdpbGwgYmUgbmlsIGhlcmUgZm9yIGN1c3RvbSBmb250cywg
d2Ugc2hvdWxkIGZpeCB0aGF0LgotICAgIE5TRm9udCAqZm9udCA9IG1fcG9wdXBDbGllbnQtPm1l
bnVTdHlsZSgpLmZvbnQoKS5wcmltYXJ5Rm9udCgpLmdldE5TRm9udCgpOworICAgIENURm9udFJl
ZiBmb250ID0gbV9wb3B1cENsaWVudC0+bWVudVN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250KCku
Z2V0Q1RGb250KCk7CiAgICAgaWYgKCFmb250KQogICAgICAgICByZXR1cm47Ci0gICAgCi0gICAg
Q0ZEaWN0aW9uYXJ5UmVmIGZvbnREZXNjcmlwdG9yQXR0cmlidXRlcyA9IChDRkRpY3Rpb25hcnlS
ZWYpW1tmb250IGZvbnREZXNjcmlwdG9yXSBmb250QXR0cmlidXRlc107Ci0gICAgaWYgKCFmb250
RGVzY3JpcHRvckF0dHJpYnV0ZXMpCisKKyAgICBhdXRvIGZvbnREZXNjcmlwdG9yID0gYWRvcHRD
RihDVEZvbnRDb3B5Rm9udERlc2NyaXB0b3IoZm9udCkpOworICAgIGlmICghZm9udERlc2NyaXB0
b3IpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gYXR0cmlidXRlcyA9IGFkb3B0Q0YoQ1RG
b250RGVzY3JpcHRvckNvcHlBdHRyaWJ1dGVzKGZvbnREZXNjcmlwdG9yLmdldCgpKSk7CisgICAg
aWYgKCFhdHRyaWJ1dGVzKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgZGF0YS5mb250SW5m
by5mb250QXR0cmlidXRlRGljdGlvbmFyeSA9IGZvbnREZXNjcmlwdG9yQXR0cmlidXRlczsKKyAg
ICBkYXRhLmZvbnRJbmZvLmZvbnRBdHRyaWJ1dGVEaWN0aW9uYXJ5ID0gYXR0cmlidXRlcy5nZXQo
KTsKICAgICBkYXRhLnNob3VsZFBvcE92ZXIgPSBtX3BvcHVwQ2xpZW50LT5zaG91bGRQb3BPdmVy
KCk7CiAgICAgZGF0YS5oaWRlQXJyb3dzID0gIW1fcG9wdXBDbGllbnQtPm1lbnVTdHlsZSgpLmhh
c0RlZmF1bHRBcHBlYXJhbmNlKCk7CiAgICAgZGF0YS5tZW51U2l6ZSA9IG1fcG9wdXBDbGllbnQt
Pm1lbnVTdHlsZSgpLm1lbnVTaXplKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KaW5kZXggMjhhZTZlOWEwYzNjYmYyZGNjMDA0
NTRiZGMzNGE3NTVlN2Y2Zjg4My4uOTcwNDViMmI1ODc3NTc3ZjhmNGVlZmZiMWI3ZWQ1MzYxOWRl
YjY1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9X
ZWJQYWdlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMv
V2ViUGFnZU1hYy5tbQpAQCAtMzYzLDExICszNjMsMTEgQEAgdm9pZCBXZWJQYWdlOjpmb250QXRT
ZWxlY3Rpb24odWludDY0X3QgY2FsbGJhY2tJRCkKICAgICBGcmFtZSYgZnJhbWUgPSBtX3BhZ2Ut
PmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwogICAgIAogICAgIGlmICgh
ZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNOb25lKCkpIHsKLSAgICAgICAgY29uc3Qg
Rm9udCogZm9udCA9IGZyYW1lLmVkaXRvcigpLmZvbnRGb3JTZWxlY3Rpb24oc2VsZWN0aW9uSGFz
TXVsdGlwbGVGb250cyk7Ci0gICAgICAgIE5TRm9udCAqbnNGb250ID0gZm9udCA/IGZvbnQtPmdl
dE5TRm9udCgpIDogbmlsOwotICAgICAgICBpZiAobnNGb250KSB7Ci0gICAgICAgICAgICBmb250
TmFtZSA9IG5zRm9udC5mb250TmFtZTsKLSAgICAgICAgICAgIGZvbnRTaXplID0gbnNGb250LnBv
aW50U2l6ZTsKKyAgICAgICAgaWYgKGF1dG8qIGZvbnQgPSBmcmFtZS5lZGl0b3IoKS5mb250Rm9y
U2VsZWN0aW9uKHNlbGVjdGlvbkhhc011bHRpcGxlRm9udHMpKSB7CisgICAgICAgICAgICBpZiAo
YXV0byBjdEZvbnQgPSBmb250LT5nZXRDVEZvbnQoKSkgeworICAgICAgICAgICAgICAgIGZvbnRO
YW1lID0gYWRvcHRDRihDVEZvbnRDb3B5UG9zdFNjcmlwdE5hbWUoY3RGb250KSkuZ2V0KCk7Cisg
ICAgICAgICAgICAgICAgZm9udFNpemUgPSBDVEZvbnRHZXRTaXplKGN0Rm9udCk7CisgICAgICAg
ICAgICB9CiAgICAgICAgIH0KICAgICB9CiAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5
OjpGb250QXRTZWxlY3Rpb25DYWxsYmFjayhmb250TmFtZSwgZm9udFNpemUsIHNlbGVjdGlvbkhh
c011bHRpcGxlRm9udHMsIGNhbGxiYWNrSUQpKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>