<?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>88580</bug_id>
          
          <creation_ts>2012-06-07 15:09:23 -0700</creation_ts>
          <short_desc>RenderObject should not know about first-line element</short_desc>
          <delta_ts>2012-08-23 11:45:05 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></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>
          
          <blocked>93829</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Igor Trindade Oliveira">igor.oliveira</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bruno.abinader</cc>
    
    <cc>eric</cc>
    
    <cc>esprehn</cc>
    
    <cc>jchaffraix</cc>
    
    <cc>leviw</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>643962</commentid>
    <comment_count>0</comment_count>
    <who name="Igor Trindade Oliveira">igor.oliveira</who>
    <bug_when>2012-06-07 15:09:23 -0700</bug_when>
    <thetext>RenderObject has some code related with first-line. This code should be in RenderBlockLineLayout or RenderBoxModelObject.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>644019</commentid>
    <comment_count>1</comment_count>
      <attachid>146408</attachid>
    <who name="Igor Trindade Oliveira">igor.oliveira</who>
    <bug_when>2012-06-07 15:59:20 -0700</bug_when>
    <thetext>Created attachment 146408
exploratory patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>644069</commentid>
    <comment_count>2</comment_count>
      <attachid>146408</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-06-07 16:49:22 -0700</bug_when>
    <thetext>Comment on attachment 146408
exploratory patch

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

&gt; Source/WebCore/rendering/InlineBox.h:278
&gt; +    RenderStyle* styleForFirstLine(bool isStyleForFirstLine) const
&gt; +    { 
&gt; +        RenderStyle* style = m_renderer-&gt;style();
&gt; +        if (isStyleForFirstLine) {
&gt; +            if (m_renderer-&gt;isText())
&gt; +                style = toRenderBoxModelObject(m_renderer-&gt;parent())-&gt;styleForFirstLine(isStyleForFirstLine);
&gt; +            else
&gt; +                style = boxModelObject()-&gt;styleForFirstLine(isStyleForFirstLine);
&gt; +        }
&gt; +        return style;
&gt; +    }

This naming confuses me. If the function is called styleForFirstLine I don&apos;t expect to call it with a bool saying whether I actually want the first line.

Also, this is too much code to be written in the definition. I&apos;d rather see something like what you see in RenderObject::preservesNewline() where you state it&apos;s inline, implement it in the header, but have the implementation at the end of the file.

&gt; Source/WebCore/rendering/InlineBox.h:296
&gt; +    EVerticalAlign verticalAlign() const
&gt; +    {
&gt; +        RenderBoxModelObject* object;
&gt; +        if (m_renderer-&gt;isText())
&gt; +            object = toRenderBoxModelObject(m_renderer-&gt;parent());
&gt; +        else
&gt; +            object = boxModelObject();
&gt; +        return object-&gt;styleForFirstLine(m_bitfields.firstLine())-&gt;verticalAlign();
&gt; +    }

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>647435</commentid>
    <comment_count>3</comment_count>
      <attachid>146408</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-06-12 15:59:24 -0700</bug_when>
    <thetext>Comment on attachment 146408
exploratory patch

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

&gt;&gt; Source/WebCore/rendering/InlineBox.h:278
&gt;&gt; +    }
&gt; 
&gt; This naming confuses me. If the function is called styleForFirstLine I don&apos;t expect to call it with a bool saying whether I actually want the first line.
&gt; 
&gt; Also, this is too much code to be written in the definition. I&apos;d rather see something like what you see in RenderObject::preservesNewline() where you state it&apos;s inline, implement it in the header, but have the implementation at the end of the file.

For the boolean, this is unfortunately the current state of our code where we get a boolean telling us if we are on the first line. I would have preferred more differentiated code paths but that&apos;s likely too difficult to implement as part of this change.

The naming could indeed love some massaging. It&apos;s more a firstLineAwareStyle() than really a styleForFirstLine().

&gt; Source/WebCore/rendering/InlineTextBox.cpp:922
&gt; -    renderer()-&gt;getTextDecorationColors(deco, underline, overline, linethrough, true, isFirstLineStyle());
&gt; +    toRenderBoxModelObject(renderer()-&gt;parent())-&gt;getTextDecorationColors(deco, underline, overline, linethrough, true, isFirstLineStyle());

Looks like an change in behavior.

&gt; Source/WebCore/rendering/RenderBR.cpp:45
&gt; +        RenderStyle* s = toRenderBoxModelObject(parent())-&gt;styleForFirstLine(firstLine);

There is a lot of toRenderBoxModelObject(someRenderer)-&gt;styleForFirstLine. Could it be possible to reduce the number of such casts? One idea that pops up is to change helper functions to take a RenderBoxModelObject instead of a RenderObject.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>647582</commentid>
    <comment_count>4</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-06-12 18:43:53 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; For the boolean, this is unfortunately the current state of our code where we get a boolean telling us if we are on the first line. I would have preferred more differentiated code paths but that&apos;s likely too difficult to implement as part of this change.
&gt; 
&gt; The naming could indeed love some massaging. It&apos;s more a firstLineAwareStyle() than really a styleForFirstLine().

I like that!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>648234</commentid>
    <comment_count>5</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-06-13 10:37:01 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; For the boolean, this is unfortunately the current state of our code where we get a boolean telling us if we are on the first line. I would have preferred more differentiated code paths but that&apos;s likely too difficult to implement as part of this change.
&gt; &gt; 
&gt; &gt; The naming could indeed love some massaging. It&apos;s more a firstLineAwareStyle() than really a styleForFirstLine().
&gt; 
&gt; I like that!

Seconded! I wasn&apos;t saying we can&apos;t take a boolean, I was just saying that the name styleForFirstLine didn&apos;t actually seem to describe what the function did. firstLineAwareStyle is clearer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>653369</commentid>
    <comment_count>6</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-06-20 05:47:03 -0700</bug_when>
    <thetext>(In reply to comment #0)
&gt; RenderObject has some code related with first-line. This code should be in RenderBlockLineLayout or RenderBoxModelObject.

I support the idea of ripping subclass-specific code out of RenderObject, but it&apos;s not clear to me what you&apos;re trying to do here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>653473</commentid>
    <comment_count>7</comment_count>
    <who name="Igor Trindade Oliveira">igor.oliveira</who>
    <bug_when>2012-06-20 08:05:48 -0700</bug_when>
    <thetext>I am just moving the methods uncachedFirstLineStyle and firstLineStyleSlowCase out of the RenderObject, however doing that i need to change the code in lot of places, specially because RenderObject::style(bool) is also called by RenderText object, so in some cases i need to do:

renderObject-&gt;isText() ? toRenderBoxModelObject(renderObject-&gt;parent())-&gt;firstLineStyle() : toRenderBoxModelObject(renderObject)-&gt;firstLineStyle();

This code is valid because firstLineStyleSlowCase() already does:

const RenderObject* renderer = isText() ? parent() : this;

In other parts of the code, i agree that probably the casts are not correctly(e.g. getTextDecorartion) but i am fixing case by case.

(In reply to comment #6)
&gt; (In reply to comment #0)
&gt; &gt; RenderObject has some code related with first-line. This code should be in RenderBlockLineLayout or RenderBoxModelObject.
&gt; 
&gt; I support the idea of ripping subclass-specific code out of RenderObject, but it&apos;s not clear to me what you&apos;re trying to do here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>653500</commentid>
    <comment_count>8</comment_count>
      <attachid>146408</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-06-20 08:25:20 -0700</bug_when>
    <thetext>Comment on attachment 146408
exploratory patch

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

&gt; Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapper.mm:690
&gt; +        RenderBoxModelObject* boxModelObject = renderer-&gt;isText() ? toRenderBoxModelObject(renderer-&gt;parent()) : toRenderBoxModelObject(renderer);

Isn&apos;t there a boxModelObject() function on a renderer which does this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>703003</commentid>
    <comment_count>9</comment_count>
    <who name="Bruno Abinader (history only)">bruno.abinader</who>
    <bug_when>2012-08-23 08:12:02 -0700</bug_when>
    <thetext>Adding bug 93829 as it _might_ change its behavior.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>146408</attachid>
            <date>2012-06-07 15:59:20 -0700</date>
            <delta_ts>2012-06-20 08:25:20 -0700</delta_ts>
            <desc>exploratory patch</desc>
            <filename>0001-WIP.patch</filename>
            <type>text/plain</type>
            <size>61965</size>
            <attacher name="Igor Trindade Oliveira">igor.oliveira</attacher>
            
              <data encoding="base64">RnJvbSA5OTFlZDRjNWIyN2RkNDBkNDc4YzYyYjRiNTc2ZGU0MDg5MmU1ODJkIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBJZ29yIE9saXZlaXJhIDxpZ29yLm9Ac2lzYS5zYW1zdW5nLmNv
bT4KRGF0ZTogVGh1LCA3IEp1biAyMDEyIDE1OjA0OjI4IC0wNzAwClN1YmplY3Q6IFtQQVRDSF0g
V0lQCgotLS0KIC4uLi9ndGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwICAgICAg
ICAgIHwgICAgNiArLQogLi4uL21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlci5tbSAg
ICAgICAgICAgfCAgICAzICstCiBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAgICAgICAg
ICAgICAgICAgICAgICB8ICAgIDIgKy0KIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNp
c0JveC5jcHAgICAgICAgICAgIHwgICAgNiArLQogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lu
bGluZUJveC5jcHAgICAgICAgICAgICAgfCAgICA0ICstCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvSW5saW5lQm94LmggICAgICAgICAgICAgICB8ICAgMjIgKysrKy0KIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcCAgICAgICAgIHwgICA0NCArKysrLS0tLS0KIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmggICAgICAgICAgIHwgICAgNCAr
LQogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwICAgICAgICAgfCAg
IDE5ICsrLS0KIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCUi5jcHAgICAgICAgICAg
ICAgIHwgICAgMyArLQogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcCAg
ICAgICAgICAgfCAgIDEwICstCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tM
aW5lTGF5b3V0LmNwcCB8ICAgMTYgKy0tCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Qm94TW9kZWxPYmplY3QuY3BwICB8ICAxMDMgKysrKysrKysrKysrKysrKysrKysKIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5oICAgIHwgICAxNSArKysKIC4u
Li9yZW5kZXJpbmcvUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94LmNwcCAgICAgIHwgICAgMiAr
LQogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAgICAgICAgICAgfCAg
IDIwICsrLS0KIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwICAgICAg
ICAgIHwgICA4OSAtLS0tLS0tLS0tLS0tLS0tLQogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck9iamVjdC5oICAgICAgICAgICAgfCAgIDEzIC0tLQogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclJ1YnlSdW4uY3BwICAgICAgICAgfCAgICA2ICstCiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAgICAgICAgICAgICB8ICAgIDIgKy0KIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcCAgICAgICAgIHwgICAyMCArKy0tCiAyMSBm
aWxlcyBjaGFuZ2VkLCAyMjMgaW5zZXJ0aW9ucygrKSwgMTg2IGRlbGV0aW9ucygtKQoKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktpdEFjY2Vzc2libGVJ
bnRlcmZhY2VUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL1dlYktp
dEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmNwcAppbmRleCAyYjIwZjlmLi4yMmQ5NTVkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9XZWJLaXRBY2Nlc3NpYmxl
SW50ZXJmYWNlVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsv
V2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwCkBAIC0zOCw2ICszOCw3IEBACiAjaW5j
bHVkZSAiSG9zdFdpbmRvdy5oIgogI2luY2x1ZGUgIklubGluZVRleHRCb3guaCIKICNpbmNsdWRl
ICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlJlbmRlckJveE1vZGVsT2JqZWN0LmgiCiAj
aW5jbHVkZSAiUmVuZGVyTGlzdEl0ZW0uaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0TWFya2VyLmgi
CiAjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgpAQCAtMTg3LDggKzE4OCw5IEBAIHN0YXRpYyBpbnQg
YmFzZWxpbmVQb3NpdGlvbkZvclJlbmRlck9iamVjdChSZW5kZXJPYmplY3QqIHJlbmRlck9iamVj
dCkKICAgICAvLyBGSVhNRTogVGhpcyBpbXBsZW1lbnRhdGlvbiBvZiBiYXNlbGluZVBvc2l0aW9u
IG9yaWdpbmF0ZXMgZnJvbSBSZW5kZXJPYmplY3QuY3BwIGFuZCB3YXMKICAgICAvLyByZW1vdmVk
IGluIHI3MDA3Mi4gVGhlIGltcGxlbWVudGF0aW9uIGxvb2tzIGluY29ycmVjdCB0aG91Z2gsIGJl
Y2F1c2UgdGhpcyBpcyBub3QgdGhlCiAgICAgLy8gYmFzZWxpbmUgb2YgdGhlIHVuZGVybHlpbmcg
UmVuZGVyT2JqZWN0LCBidXQgb2YgdGhlIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuCi0gICAg
Y29uc3QgRm9udE1ldHJpY3MmIGZvbnRNZXRyaWNzID0gcmVuZGVyT2JqZWN0LT5maXJzdExpbmVT
dHlsZSgpLT5mb250TWV0cmljcygpOwotICAgIHJldHVybiBmb250TWV0cmljcy5hc2NlbnQoKSAr
IChyZW5kZXJPYmplY3QtPmZpcnN0TGluZVN0eWxlKCktPmNvbXB1dGVkTGluZUhlaWdodCgpIC0g
Zm9udE1ldHJpY3MuaGVpZ2h0KCkpIC8gMjsKKyAgICBSZW5kZXJTdHlsZSogZmlyc3RMaW5lU3R5
bGUgPSByZW5kZXJPYmplY3QtPmlzVGV4dCgpID8gdG9SZW5kZXJCb3hNb2RlbE9iamVjdChyZW5k
ZXJPYmplY3QtPnBhcmVudCgpKS0+Zmlyc3RMaW5lU3R5bGUoKSA6IHRvUmVuZGVyQm94TW9kZWxP
YmplY3QocmVuZGVyT2JqZWN0KS0+Zmlyc3RMaW5lU3R5bGUoKTsKKyAgICBjb25zdCBGb250TWV0
cmljcyYgZm9udE1ldHJpY3MgPSBmaXJzdExpbmVTdHlsZS0+Zm9udE1ldHJpY3MoKTsKKyAgICBy
ZXR1cm4gZm9udE1ldHJpY3MuYXNjZW50KCkgKyAoZmlyc3RMaW5lU3R5bGUtPmNvbXB1dGVkTGlu
ZUhlaWdodCgpIC0gZm9udE1ldHJpY3MuaGVpZ2h0KCkpIC8gMjsKIH0KIAogc3RhdGljIEF0a0F0
dHJpYnV0ZVNldCogZ2V0QXR0cmlidXRlU2V0Rm9yQWNjZXNzaWJpbGl0eU9iamVjdChjb25zdCBB
Y2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlci5tbSBiL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
Lm1tCmluZGV4IDdhOWQ0YmIuLmE2YmU0YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyLm1tCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVyLm1tCkBAIC02ODcsNyArNjg3LDggQEAgc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVTdHJpbmdT
ZXRTdHlsZShOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5nLCBSZW4KICAgICAg
ICAgLy8gZmluZCBjb2xvcnMgdXNpbmcgcXVpcmsgbW9kZSBhcHByb2FjaCAoc3RyaWN0IG1vZGUg
d291bGQgdXNlIGN1cnJlbnQKICAgICAgICAgLy8gY29sb3IgZm9yIGFsbCBidXQgdGhlIHJvb3Qg
bGluZSBib3gsIHdoaWNoIHdvdWxkIHVzZSBnZXRUZXh0RGVjb3JhdGlvbkNvbG9ycykKICAgICAg
ICAgQ29sb3IgdW5kZXJsaW5lLCBvdmVybGluZSwgbGluZXRocm91Z2g7Ci0gICAgICAgIHJlbmRl
cmVyLT5nZXRUZXh0RGVjb3JhdGlvbkNvbG9ycyhkZWNvciwgdW5kZXJsaW5lLCBvdmVybGluZSwg
bGluZXRocm91Z2gpOworICAgICAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogYm94TW9kZWxPYmpl
Y3QgPSByZW5kZXJlci0+aXNUZXh0KCkgPyB0b1JlbmRlckJveE1vZGVsT2JqZWN0KHJlbmRlcmVy
LT5wYXJlbnQoKSkgOiB0b1JlbmRlckJveE1vZGVsT2JqZWN0KHJlbmRlcmVyKTsKKyAgICAgICAg
Ym94TW9kZWxPYmplY3QtPmdldFRleHREZWNvcmF0aW9uQ29sb3JzKGRlY29yLCB1bmRlcmxpbmUs
IG92ZXJsaW5lLCBsaW5ldGhyb3VnaCk7CiAgICAgICAgIAogICAgICAgICBpZiAoKGRlY29yICYg
VU5ERVJMSU5FKSAhPSAwKSB7CiAgICAgICAgICAgICBBWEF0dHJpYnV0ZVN0cmluZ1NldE51bWJl
cihhdHRyU3RyaW5nLCBOU0FjY2Vzc2liaWxpdHlVbmRlcmxpbmVUZXh0QXR0cmlidXRlLCBbTlNO
dW1iZXIgbnVtYmVyV2l0aEJvb2w6WUVTXSwgcmFuZ2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCmlu
ZGV4IDAwNTI2NGMuLjE5NzYxOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVt
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKQEAgLTEwMDAsNyAr
MTAwMCw3IEBAIGJvb2wgRWxlbWVudDo6cHNldWRvU3R5bGVDYWNoZUlzSW52YWxpZChjb25zdCBS
ZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBSZW5kZXJTCiAgICAgICAgIFJlZlB0cjxSZW5kZXJT
dHlsZT4gbmV3UHNldWRvU3R5bGU7CiAgICAgICAgIFBzZXVkb0lkIHBzZXVkb0lkID0gcHNldWRv
U3R5bGVDYWNoZS0+YXQoaSktPnN0eWxlVHlwZSgpOwogICAgICAgICBpZiAocHNldWRvSWQgPT0g
RklSU1RfTElORSB8fCBwc2V1ZG9JZCA9PSBGSVJTVF9MSU5FX0lOSEVSSVRFRCkKLSAgICAgICAg
ICAgIG5ld1BzZXVkb1N0eWxlID0gcmVuZGVyZXIoKS0+dW5jYWNoZWRGaXJzdExpbmVTdHlsZShu
ZXdTdHlsZSk7CisgICAgICAgICAgICBuZXdQc2V1ZG9TdHlsZSA9IHJlbmRlckJveE1vZGVsT2Jq
ZWN0KCktPnVuY2FjaGVkRmlyc3RMaW5lU3R5bGUobmV3U3R5bGUpOwogICAgICAgICBlbHNlCiAg
ICAgICAgICAgICBuZXdQc2V1ZG9TdHlsZSA9IHJlbmRlcmVyKCktPmdldFVuY2FjaGVkUHNldWRv
U3R5bGUocHNldWRvSWQsIG5ld1N0eWxlLCBuZXdTdHlsZSk7CiAgICAgICAgIGlmICghbmV3UHNl
dWRvU3R5bGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNC
b3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcAppbmRleCAx
MzAxMDNjLi5kMDk1ODk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRWxs
aXBzaXNCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5j
cHAKQEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogdm9pZCBFbGxpcHNpc0Jv
eDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9m
ZnNldCwgTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVCb3R0b20pCiB7CiAgICAg
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0ID0gcGFpbnRJbmZvLmNvbnRleHQ7Ci0gICAgUmVuZGVy
U3R5bGUqIHN0eWxlID0gbV9yZW5kZXJlci0+c3R5bGUoaXNGaXJzdExpbmVTdHlsZSgpKTsKKyAg
ICBSZW5kZXJTdHlsZSogc3R5bGUgPSBzdHlsZUZvckZpcnN0TGluZShpc0ZpcnN0TGluZVN0eWxl
KCkpOwogICAgIENvbG9yIHRleHRDb2xvciA9IHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3Io
Q1NTUHJvcGVydHlDb2xvcik7CiAgICAgaWYgKHRleHRDb2xvciAhPSBjb250ZXh0LT5maWxsQ29s
b3IoKSkKICAgICAgICAgY29udGV4dC0+c2V0RmlsbENvbG9yKHRleHRDb2xvciwgc3R5bGUtPmNv
bG9yU3BhY2UoKSk7CkBAIC02OSwxNCArNjksMTQgQEAgdm9pZCBFbGxpcHNpc0JveDo6cGFpbnQo
UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCwgTGEK
ICAgICAgICAgLy8gUGFpbnQgdGhlIG1hcmt1cCBib3gKICAgICAgICAgTGF5b3V0UG9pbnQgYWRq
dXN0ZWRQYWludE9mZnNldCA9IHBhaW50T2Zmc2V0OwogICAgICAgICBhZGp1c3RlZFBhaW50T2Zm
c2V0Lm1vdmUoeCgpICsgbV9sb2dpY2FsV2lkdGggLSBtX21hcmt1cEJveC0+eCgpLAotICAgICAg
ICAgICAgeSgpICsgc3R5bGUtPmZvbnRNZXRyaWNzKCkuYXNjZW50KCkgLSAobV9tYXJrdXBCb3gt
PnkoKSArIG1fbWFya3VwQm94LT5yZW5kZXJlcigpLT5zdHlsZShpc0ZpcnN0TGluZVN0eWxlKCkp
LT5mb250TWV0cmljcygpLmFzY2VudCgpKSk7CisgICAgICAgICAgICB5KCkgKyBzdHlsZS0+Zm9u
dE1ldHJpY3MoKS5hc2NlbnQoKSAtIChtX21hcmt1cEJveC0+eSgpICsgbV9tYXJrdXBCb3gtPnN0
eWxlRm9yRmlyc3RMaW5lKGlzRmlyc3RMaW5lU3R5bGUoKSktPmZvbnRNZXRyaWNzKCkuYXNjZW50
KCkpKTsKICAgICAgICAgbV9tYXJrdXBCb3gtPnBhaW50KHBhaW50SW5mbywgYWRqdXN0ZWRQYWlu
dE9mZnNldCwgbGluZVRvcCwgbGluZUJvdHRvbSk7CiAgICAgfQogfQogCiBJbnRSZWN0IEVsbGlw
c2lzQm94OjpzZWxlY3Rpb25SZWN0KCkKIHsKLSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBtX3Jl
bmRlcmVyLT5zdHlsZShpc0ZpcnN0TGluZVN0eWxlKCkpOworICAgIFJlbmRlclN0eWxlKiBzdHls
ZSA9IHN0eWxlRm9yRmlyc3RMaW5lKGlzRmlyc3RMaW5lU3R5bGUoKSk7CiAgICAgY29uc3QgRm9u
dCYgZm9udCA9IHN0eWxlLT5mb250KCk7CiAgICAgLy8gRklYTUU6IFdoeSBpcyB0aGlzIGFsd2F5
cyBMVFI/IEZpeCBieSBwYXNzaW5nIGNvcnJlY3QgdGV4dCBydW4gZmxhZ3MgYmVsb3cuCiAgICAg
cmV0dXJuIGVuY2xvc2luZ0ludFJlY3QoZm9udC5zZWxlY3Rpb25SZWN0Rm9yVGV4dChSZW5kZXJC
bG9jazo6Y29uc3RydWN0VGV4dFJ1bihyZW5kZXJlcigpLCBmb250LCBtX3N0ciwgc3R5bGUsIFRl
eHRSdW46OkFsbG93VHJhaWxpbmdFeHBhbnNpb24pLCBJbnRQb2ludCh4KCksIHkoKSArIHJvb3Qo
KS0+c2VsZWN0aW9uVG9wQWRqdXN0ZWRGb3JQcmVjZWRpbmdCbG9jaygpKSwgcm9vdCgpLT5zZWxl
Y3Rpb25IZWlnaHRBZGp1c3RlZEZvclByZWNlZGluZ0Jsb2NrKCkpKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0lubGluZUJveC5jcHAKaW5kZXggOTU3ZTBmMC4uNzczZDZjOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0lubGluZUJveC5jcHAKQEAgLTE0NSwxMyArMTQ1LDEzIEBAIGZsb2F0IElu
bGluZUJveDo6bG9naWNhbEhlaWdodCgpIGNvbnN0CiAgICAgICAgIHJldHVybiB2aXJ0dWFsTG9n
aWNhbEhlaWdodCgpOwogICAgIAogICAgIGlmIChyZW5kZXJlcigpLT5pc1RleHQoKSkKLSAgICAg
ICAgcmV0dXJuIG1fYml0ZmllbGRzLmlzVGV4dCgpID8gcmVuZGVyZXIoKS0+c3R5bGUoaXNGaXJz
dExpbmVTdHlsZSgpKS0+Zm9udE1ldHJpY3MoKS5oZWlnaHQoKSA6IDA7CisgICAgICAgIHJldHVy
biBtX2JpdGZpZWxkcy5pc1RleHQoKSA/IHN0eWxlRm9yRmlyc3RMaW5lKGlzRmlyc3RMaW5lU3R5
bGUoKSktPmZvbnRNZXRyaWNzKCkuaGVpZ2h0KCkgOiAwOwogICAgIGlmIChyZW5kZXJlcigpLT5p
c0JveCgpICYmIHBhcmVudCgpKQogICAgICAgICByZXR1cm4gaXNIb3Jpem9udGFsKCkgPyB0b1Jl
bmRlckJveChtX3JlbmRlcmVyKS0+aGVpZ2h0KCkgOiB0b1JlbmRlckJveChtX3JlbmRlcmVyKS0+
d2lkdGgoKTsKIAogICAgIEFTU0VSVChpc0lubGluZUZsb3dCb3goKSk7CiAgICAgUmVuZGVyQm94
TW9kZWxPYmplY3QqIGZsb3dPYmplY3QgPSBib3hNb2RlbE9iamVjdCgpOwotICAgIGNvbnN0IEZv
bnRNZXRyaWNzJiBmb250TWV0cmljcyA9IHJlbmRlcmVyKCktPnN0eWxlKGlzRmlyc3RMaW5lU3R5
bGUoKSktPmZvbnRNZXRyaWNzKCk7CisgICAgY29uc3QgRm9udE1ldHJpY3MmIGZvbnRNZXRyaWNz
ID0gc3R5bGVGb3JGaXJzdExpbmUoaXNGaXJzdExpbmVTdHlsZSgpKS0+Zm9udE1ldHJpY3MoKTsK
ICAgICBmbG9hdCByZXN1bHQgPSBmb250TWV0cmljcy5oZWlnaHQoKTsKICAgICBpZiAocGFyZW50
KCkpCiAgICAgICAgIHJlc3VsdCArPSBmbG93T2JqZWN0LT5ib3JkZXJBbmRQYWRkaW5nTG9naWNh
bEhlaWdodCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJv
eC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5oCmluZGV4IDJlZDljZDQu
LjI1MWQzNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3gu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmgKQEAgLTI2NSw2ICsy
NjUsMTggQEAgcHVibGljOgogICAgIC8vIHZpc2libGVMZWZ0RWRnZSwgdmlzaWJsZVJpZ2h0RWRn
ZSBhcmUgaW4gdGhlIHBhcmVudCdzIGNvb3JkaW5hdGUgc3lzdGVtLgogICAgIHZpcnR1YWwgZmxv
YXQgcGxhY2VFbGxpcHNpc0JveChib29sIGx0ciwgZmxvYXQgdmlzaWJsZUxlZnRFZGdlLCBmbG9h
dCB2aXNpYmxlUmlnaHRFZGdlLCBmbG9hdCBlbGxpcHNpc1dpZHRoLCBib29sJik7CiAKKyAgICBS
ZW5kZXJTdHlsZSogc3R5bGVGb3JGaXJzdExpbmUoYm9vbCBpc1N0eWxlRm9yRmlyc3RMaW5lKSBj
b25zdAorICAgIHsgCisgICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IG1fcmVuZGVyZXItPnN0
eWxlKCk7CisgICAgICAgIGlmIChpc1N0eWxlRm9yRmlyc3RMaW5lKSB7CisgICAgICAgICAgICBp
ZiAobV9yZW5kZXJlci0+aXNUZXh0KCkpCisgICAgICAgICAgICAgICAgc3R5bGUgPSB0b1JlbmRl
ckJveE1vZGVsT2JqZWN0KG1fcmVuZGVyZXItPnBhcmVudCgpKS0+c3R5bGVGb3JGaXJzdExpbmUo
aXNTdHlsZUZvckZpcnN0TGluZSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
c3R5bGUgPSBib3hNb2RlbE9iamVjdCgpLT5zdHlsZUZvckZpcnN0TGluZShpc1N0eWxlRm9yRmly
c3RMaW5lKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc3R5bGU7CisgICAgfQorCiAjaWZu
ZGVmIE5ERUJVRwogICAgIHZvaWQgc2V0SGFzQmFkUGFyZW50KCk7CiAjZW5kaWYKQEAgLTI3Myw3
ICsyODUsMTUgQEAgcHVibGljOgogCiAgICAgYm9vbCB2aXNpYmxlVG9IaXRUZXN0aW5nKCkgY29u
c3QgeyByZXR1cm4gcmVuZGVyZXIoKS0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUg
JiYgcmVuZGVyZXIoKS0+c3R5bGUoKS0+cG9pbnRlckV2ZW50cygpICE9IFBFX05PTkU7IH0KICAg
ICAKLSAgICBFVmVydGljYWxBbGlnbiB2ZXJ0aWNhbEFsaWduKCkgY29uc3QgeyByZXR1cm4gcmVu
ZGVyZXIoKS0+c3R5bGUobV9iaXRmaWVsZHMuZmlyc3RMaW5lKCkpLT52ZXJ0aWNhbEFsaWduKCk7
IH0KKyAgICBFVmVydGljYWxBbGlnbiB2ZXJ0aWNhbEFsaWduKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBvYmplY3Q7CisgICAgICAgIGlmIChtX3JlbmRlcmVy
LT5pc1RleHQoKSkKKyAgICAgICAgICAgIG9iamVjdCA9IHRvUmVuZGVyQm94TW9kZWxPYmplY3Qo
bV9yZW5kZXJlci0+cGFyZW50KCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBvYmplY3Qg
PSBib3hNb2RlbE9iamVjdCgpOworICAgICAgICByZXR1cm4gb2JqZWN0LT5zdHlsZUZvckZpcnN0
TGluZShtX2JpdGZpZWxkcy5maXJzdExpbmUoKSktPnZlcnRpY2FsQWxpZ24oKTsKKyAgICB9CiAK
ICAgICAvLyBVc2Ugd2l0aCBjYXV0aW9uISBUaGUgdHlwZSBpcyBub3QgY2hlY2tlZCEKICAgICBS
ZW5kZXJCb3hNb2RlbE9iamVjdCogYm94TW9kZWxPYmplY3QoKSBjb25zdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCmluZGV4IDU4Yzk3ZGQuLjViYTA0ZTcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAKQEAgLTEyMSw4ICsx
MjEsOCBAQCB2b2lkIElubGluZUZsb3dCb3g6OmFkZFRvTGluZShJbmxpbmVCb3gqIGNoaWxkKQog
ICAgIH0KIAogICAgIGlmIChkZXNjZW5kYW50c0hhdmVTYW1lTGluZUhlaWdodEFuZEJhc2VsaW5l
KCkgJiYgIWNoaWxkLT5yZW5kZXJlcigpLT5pc1Bvc2l0aW9uZWQoKSkgewotICAgICAgICBSZW5k
ZXJTdHlsZSogcGFyZW50U3R5bGUgPSByZW5kZXJlcigpLT5zdHlsZShpc0ZpcnN0TGluZVN0eWxl
KCkpOwotICAgICAgICBSZW5kZXJTdHlsZSogY2hpbGRTdHlsZSA9IGNoaWxkLT5yZW5kZXJlcigp
LT5zdHlsZShpc0ZpcnN0TGluZVN0eWxlKCkpOworICAgICAgICBSZW5kZXJTdHlsZSogcGFyZW50
U3R5bGUgPSBzdHlsZUZvckZpcnN0TGluZShpc0ZpcnN0TGluZVN0eWxlKCkpOworICAgICAgICBS
ZW5kZXJTdHlsZSogY2hpbGRTdHlsZSA9IGNoaWxkLT5zdHlsZUZvckZpcnN0TGluZShpc0ZpcnN0
TGluZVN0eWxlKCkpOwogICAgICAgICBib29sIHNob3VsZENsZWFyRGVzY2VuZGFudHNIYXZlU2Ft
ZUxpbmVIZWlnaHRBbmRCYXNlbGluZSA9IGZhbHNlOwogICAgICAgICBpZiAoY2hpbGQtPnJlbmRl
cmVyKCktPmlzUmVwbGFjZWQoKSkKICAgICAgICAgICAgIHNob3VsZENsZWFyRGVzY2VuZGFudHNI
YXZlU2FtZUxpbmVIZWlnaHRBbmRCYXNlbGluZSA9IHRydWU7CkBAIC0xNTksMTYgKzE1OSwxNiBA
QCB2b2lkIElubGluZUZsb3dCb3g6OmFkZFRvTGluZShJbmxpbmVCb3gqIGNoaWxkKQogCiAgICAg
aWYgKCFjaGlsZC0+cmVuZGVyZXIoKS0+aXNQb3NpdGlvbmVkKCkpIHsKICAgICAgICAgaWYgKGNo
aWxkLT5pc1RleHQoKSkgewotICAgICAgICAgICAgUmVuZGVyU3R5bGUqIGNoaWxkU3R5bGUgPSBj
aGlsZC0+cmVuZGVyZXIoKS0+c3R5bGUoaXNGaXJzdExpbmVTdHlsZSgpKTsKKyAgICAgICAgICAg
IFJlbmRlclN0eWxlKiBjaGlsZFN0eWxlID0gY2hpbGQtPnN0eWxlRm9yRmlyc3RMaW5lKGlzRmly
c3RMaW5lU3R5bGUoKSk7CiAgICAgICAgICAgICBpZiAoY2hpbGRTdHlsZS0+bGV0dGVyU3BhY2lu
ZygpIDwgMCB8fCBjaGlsZFN0eWxlLT50ZXh0U2hhZG93KCkgfHwgY2hpbGRTdHlsZS0+dGV4dEVt
cGhhc2lzTWFyaygpICE9IFRleHRFbXBoYXNpc01hcmtOb25lIHx8IGNoaWxkU3R5bGUtPnRleHRT
dHJva2VXaWR0aCgpKQogICAgICAgICAgICAgICAgIGNoaWxkLT5jbGVhcktub3duVG9IYXZlTm9P
dmVyZmxvdygpOwogICAgICAgICB9IGVsc2UgaWYgKGNoaWxkLT5yZW5kZXJlcigpLT5pc1JlcGxh
Y2VkKCkpIHsKICAgICAgICAgICAgIFJlbmRlckJveCogYm94ID0gdG9SZW5kZXJCb3goY2hpbGQt
PnJlbmRlcmVyKCkpOwogICAgICAgICAgICAgaWYgKGJveC0+aGFzUmVuZGVyT3ZlcmZsb3coKSB8
fCBib3gtPmhhc1NlbGZQYWludGluZ0xheWVyKCkpCiAgICAgICAgICAgICAgICAgY2hpbGQtPmNs
ZWFyS25vd25Ub0hhdmVOb092ZXJmbG93KCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoIWNoaWxkLT5y
ZW5kZXJlcigpLT5pc0JSKCkgJiYgKGNoaWxkLT5yZW5kZXJlcigpLT5zdHlsZShpc0ZpcnN0TGlu
ZVN0eWxlKCkpLT5ib3hTaGFkb3coKSB8fCBjaGlsZC0+Ym94TW9kZWxPYmplY3QoKS0+aGFzU2Vs
ZlBhaW50aW5nTGF5ZXIoKQorICAgICAgICB9IGVsc2UgaWYgKCFjaGlsZC0+cmVuZGVyZXIoKS0+
aXNCUigpICYmIChjaGlsZC0+c3R5bGVGb3JGaXJzdExpbmUoaXNGaXJzdExpbmVTdHlsZSgpKS0+
Ym94U2hhZG93KCkgfHwgY2hpbGQtPmJveE1vZGVsT2JqZWN0KCktPmhhc1NlbGZQYWludGluZ0xh
eWVyKCkKICAgICAgICAgICAgICAgICAgICB8fCAoY2hpbGQtPnJlbmRlcmVyKCktPmlzTGlzdE1h
cmtlcigpICYmICF0b1JlbmRlckxpc3RNYXJrZXIoY2hpbGQtPnJlbmRlcmVyKCkpLT5pc0luc2lk
ZSgpKQotICAgICAgICAgICAgICAgICAgIHx8IGNoaWxkLT5yZW5kZXJlcigpLT5zdHlsZShpc0Zp
cnN0TGluZVN0eWxlKCkpLT5oYXNCb3JkZXJJbWFnZU91dHNldHMoKSkpCisgICAgICAgICAgICAg
ICAgICAgfHwgY2hpbGQtPnN0eWxlRm9yRmlyc3RMaW5lKGlzRmlyc3RMaW5lU3R5bGUoKSktPmhh
c0JvcmRlckltYWdlT3V0c2V0cygpKSkKICAgICAgICAgICAgIGNoaWxkLT5jbGVhcktub3duVG9I
YXZlTm9PdmVyZmxvdygpOwogICAgICAgICAKICAgICAgICAgaWYgKGtub3duVG9IYXZlTm9PdmVy
ZmxvdygpICYmIGNoaWxkLT5pc0lubGluZUZsb3dCb3goKSAmJiAhdG9JbmxpbmVGbG93Qm94KGNo
aWxkKS0+a25vd25Ub0hhdmVOb092ZXJmbG93KCkpCkBAIC0zNzIsNyArMzcyLDcgQEAgZmxvYXQg
SW5saW5lRmxvd0JveDo6cGxhY2VCb3hlc0luSW5saW5lRGlyZWN0aW9uKGZsb2F0IGxvZ2ljYWxM
ZWZ0LCBib29sJiBuZWVkc1cKICAgICAgICAgICAgIFJlbmRlclRleHQqIHJ0ID0gdG9SZW5kZXJU
ZXh0KHRleHQtPnJlbmRlcmVyKCkpOwogICAgICAgICAgICAgaWYgKHJ0LT50ZXh0TGVuZ3RoKCkp
IHsKICAgICAgICAgICAgICAgICBpZiAobmVlZHNXb3JkU3BhY2luZyAmJiBpc1NwYWNlT3JOZXds
aW5lKHJ0LT5jaGFyYWN0ZXJzKClbdGV4dC0+c3RhcnQoKV0pKQotICAgICAgICAgICAgICAgICAg
ICBsb2dpY2FsTGVmdCArPSBydC0+c3R5bGUoaXNGaXJzdExpbmVTdHlsZSgpKS0+Zm9udCgpLndv
cmRTcGFjaW5nKCk7CisgICAgICAgICAgICAgICAgICAgIGxvZ2ljYWxMZWZ0ICs9IHRleHQtPnN0
eWxlRm9yRmlyc3RMaW5lKGlzRmlyc3RMaW5lU3R5bGUoKSktPmZvbnQoKS53b3JkU3BhY2luZygp
OwogICAgICAgICAgICAgICAgIG5lZWRzV29yZFNwYWNpbmcgPSAhaXNTcGFjZU9yTmV3bGluZShy
dC0+Y2hhcmFjdGVycygpW3RleHQtPmVuZCgpXSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB0ZXh0LT5zZXRMb2dpY2FsTGVmdChsb2dpY2FsTGVmdCk7CkBAIC00MzEsOCArNDMxLDggQEAg
Ym9vbCBJbmxpbmVGbG93Qm94OjpyZXF1aXJlc0lkZW9ncmFwaGljQmFzZWxpbmUoY29uc3QgR2x5
cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm8KICAgICBpZiAoaXNIb3Jpem9udGFsKCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAKLSAgICBpZiAocmVuZGVyZXIoKS0+c3R5bGUoaXNGaXJzdExp
bmVTdHlsZSgpKS0+Zm9udERlc2NyaXB0aW9uKCkudGV4dE9yaWVudGF0aW9uKCkgPT0gVGV4dE9y
aWVudGF0aW9uVXByaWdodAotICAgICAgICB8fCByZW5kZXJlcigpLT5zdHlsZShpc0ZpcnN0TGlu
ZVN0eWxlKCkpLT5mb250KCkucHJpbWFyeUZvbnQoKS0+aGFzVmVydGljYWxHbHlwaHMoKSkKKyAg
ICBpZiAoc3R5bGVGb3JGaXJzdExpbmUoaXNGaXJzdExpbmVTdHlsZSgpKS0+Zm9udERlc2NyaXB0
aW9uKCkudGV4dE9yaWVudGF0aW9uKCkgPT0gVGV4dE9yaWVudGF0aW9uVXByaWdodAorICAgICAg
ICB8fCBzdHlsZUZvckZpcnN0TGluZShpc0ZpcnN0TGluZVN0eWxlKCkpLT5mb250KCkucHJpbWFy
eUZvbnQoKS0+aGFzVmVydGljYWxHbHlwaHMoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAg
ICBmb3IgKElubGluZUJveCogY3VyciA9IGZpcnN0Q2hpbGQoKTsgY3VycjsgY3VyciA9IGN1cnIt
Pm5leHRPbkxpbmUoKSkgewpAQCAtNDQzLDcgKzQ0Myw3IEBAIGJvb2wgSW5saW5lRmxvd0JveDo6
cmVxdWlyZXNJZGVvZ3JhcGhpY0Jhc2VsaW5lKGNvbnN0IEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFj
a0ZvCiAgICAgICAgICAgICBpZiAodG9JbmxpbmVGbG93Qm94KGN1cnIpLT5yZXF1aXJlc0lkZW9n
cmFwaGljQmFzZWxpbmUodGV4dEJveERhdGFNYXApKQogICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKGN1cnItPnJlbmRlcmVyKCkt
PnN0eWxlKGlzRmlyc3RMaW5lU3R5bGUoKSktPmZvbnQoKS5wcmltYXJ5Rm9udCgpLT5oYXNWZXJ0
aWNhbEdseXBocygpKQorICAgICAgICAgICAgaWYgKGN1cnItPnN0eWxlRm9yRmlyc3RMaW5lKGlz
Rmlyc3RMaW5lU3R5bGUoKSktPmZvbnQoKS5wcmltYXJ5Rm9udCgpLT5oYXNWZXJ0aWNhbEdseXBo
cygpKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgCiAgICAgICAg
ICAgICBjb25zdCBWZWN0b3I8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogdXNlZEZvbnRzID0gMDsK
QEAgLTU5Myw3ICs1OTMsNyBAQCB2b2lkIElubGluZUZsb3dCb3g6OnBsYWNlQm94ZXNJbkJsb2Nr
RGlyZWN0aW9uKExheW91dFVuaXQgdG9wLCBMYXlvdXRVbml0IG1heEhlaQogewogICAgIGJvb2wg
aXNSb290Qm94ID0gaXNSb290SW5saW5lQm94KCk7CiAgICAgaWYgKGlzUm9vdEJveCkgewotICAg
ICAgICBjb25zdCBGb250TWV0cmljcyYgZm9udE1ldHJpY3MgPSByZW5kZXJlcigpLT5zdHlsZShp
c0ZpcnN0TGluZVN0eWxlKCkpLT5mb250TWV0cmljcygpOworICAgICAgICBjb25zdCBGb250TWV0
cmljcyYgZm9udE1ldHJpY3MgPSBzdHlsZUZvckZpcnN0TGluZShpc0ZpcnN0TGluZVN0eWxlKCkp
LT5mb250TWV0cmljcygpOwogICAgICAgICAvLyBSb290SW5saW5lQm94ZXMgYXJlIGFsd2F5cyBw
bGFjZWQgb24gYXQgcGl4ZWwgYm91bmRhcmllcyBpbiB0aGVpciBsb2dpY2FsIHkgZGlyZWN0aW9u
LiBOb3QgZG9pbmcKICAgICAgICAgLy8gc28gcmVzdWx0cyBpbiBpbmNvcnJlY3QgcmVuZGVyaW5n
IG9mIHRleHQgZGVjb3JhdGlvbnMsIG1vc3Qgbm90YWJseSB1bmRlcmxpbmVzLgogICAgICAgICBz
ZXRMb2dpY2FsVG9wKHJvdW5kVG9JbnQodG9wICsgbWF4QXNjZW50IC0gZm9udE1ldHJpY3MuYXNj
ZW50KGJhc2VsaW5lVHlwZSkpKTsKQEAgLTYzNSwxMSArNjM1LDExIEBAIHZvaWQgSW5saW5lRmxv
d0JveDo6cGxhY2VCb3hlc0luQmxvY2tEaXJlY3Rpb24oTGF5b3V0VW5pdCB0b3AsIExheW91dFVu
aXQgbWF4SGVpCiAgICAgICAgIExheW91dFVuaXQgYm94SGVpZ2h0SW5jbHVkaW5nTWFyZ2lucyA9
IGJveEhlaWdodDsKICAgICAgICAgICAgIAogICAgICAgICBpZiAoY3Vyci0+aXNUZXh0KCkgfHwg
Y3Vyci0+aXNJbmxpbmVGbG93Qm94KCkpIHsKLSAgICAgICAgICAgIGNvbnN0IEZvbnRNZXRyaWNz
JiBmb250TWV0cmljcyA9IGN1cnItPnJlbmRlcmVyKCktPnN0eWxlKGlzRmlyc3RMaW5lU3R5bGUo
KSktPmZvbnRNZXRyaWNzKCk7CisgICAgICAgICAgICBjb25zdCBGb250TWV0cmljcyYgZm9udE1l
dHJpY3MgPSBjdXJyLT5zdHlsZUZvckZpcnN0TGluZShpc0ZpcnN0TGluZVN0eWxlKCkpLT5mb250
TWV0cmljcygpOwogICAgICAgICAgICAgbmV3TG9naWNhbFRvcCArPSBjdXJyLT5iYXNlbGluZVBv
c2l0aW9uKGJhc2VsaW5lVHlwZSkgLSBmb250TWV0cmljcy5hc2NlbnQoYmFzZWxpbmVUeXBlKTsK
ICAgICAgICAgICAgIGlmIChjdXJyLT5pc0lubGluZUZsb3dCb3goKSkgewogICAgICAgICAgICAg
ICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBib3hPYmplY3QgPSB0b1JlbmRlckJveE1vZGVsT2Jq
ZWN0KGN1cnItPnJlbmRlcmVyKCkpOwotICAgICAgICAgICAgICAgIG5ld0xvZ2ljYWxUb3AgLT0g
Ym94T2JqZWN0LT5zdHlsZShpc0ZpcnN0TGluZVN0eWxlKCkpLT5pc0hvcml6b250YWxXcml0aW5n
TW9kZSgpID8gYm94T2JqZWN0LT5ib3JkZXJUb3AoKSArIGJveE9iamVjdC0+cGFkZGluZ1RvcCgp
IDogCisgICAgICAgICAgICAgICAgbmV3TG9naWNhbFRvcCAtPSBib3hPYmplY3QtPnN0eWxlRm9y
Rmlyc3RMaW5lKGlzRmlyc3RMaW5lU3R5bGUoKSktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkg
PyBib3hPYmplY3QtPmJvcmRlclRvcCgpICsgYm94T2JqZWN0LT5wYWRkaW5nVG9wKCkgOiAKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJveE9iamVjdC0+Ym9yZGVyUmlnaHQoKSAr
IGJveE9iamVjdC0+cGFkZGluZ1JpZ2h0KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBu
ZXdMb2dpY2FsVG9wSW5jbHVkaW5nTWFyZ2lucyA9IG5ld0xvZ2ljYWxUb3A7CkBAIC02NzQsOSAr
Njc0LDkgQEAgdm9pZCBJbmxpbmVGbG93Qm94OjpwbGFjZUJveGVzSW5CbG9ja0RpcmVjdGlvbihM
YXlvdXRVbml0IHRvcCwgTGF5b3V0VW5pdCBtYXhIZWkKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIGlmIChjdXJyLT5pc0lubGluZVRleHRCb3goKSkgewogICAgICAgICAgICAgICAgIFRleHRF
bXBoYXNpc1Bvc2l0aW9uIGVtcGhhc2lzTWFya1Bvc2l0aW9uOwotICAgICAgICAgICAgICAgIGlm
ICh0b0lubGluZVRleHRCb3goY3VyciktPmdldEVtcGhhc2lzTWFya1Bvc2l0aW9uKGN1cnItPnJl
bmRlcmVyKCktPnN0eWxlKGlzRmlyc3RMaW5lU3R5bGUoKSksIGVtcGhhc2lzTWFya1Bvc2l0aW9u
KSkgeworICAgICAgICAgICAgICAgIGlmICh0b0lubGluZVRleHRCb3goY3VyciktPmdldEVtcGhh
c2lzTWFya1Bvc2l0aW9uKGN1cnItPnN0eWxlRm9yRmlyc3RMaW5lKGlzRmlyc3RMaW5lU3R5bGUo
KSksIGVtcGhhc2lzTWFya1Bvc2l0aW9uKSkgewogICAgICAgICAgICAgICAgICAgICBib29sIGVt
cGhhc2lzTWFya0lzT3ZlciA9IGVtcGhhc2lzTWFya1Bvc2l0aW9uID09IFRleHRFbXBoYXNpc1Bv
c2l0aW9uT3ZlcjsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGVtcGhhc2lzTWFya0lzT3ZlciAh
PSBjdXJyLT5yZW5kZXJlcigpLT5zdHlsZShpc0ZpcnN0TGluZVN0eWxlKCkpLT5pc0ZsaXBwZWRM
aW5lc1dyaXRpbmdNb2RlKCkpCisgICAgICAgICAgICAgICAgICAgIGlmIChlbXBoYXNpc01hcmtJ
c092ZXIgIT0gY3Vyci0+c3R5bGVGb3JGaXJzdExpbmUoaXNGaXJzdExpbmVTdHlsZSgpKS0+aXNG
bGlwcGVkTGluZXNXcml0aW5nTW9kZSgpKQogICAgICAgICAgICAgICAgICAgICAgICAgaGFzQW5u
b3RhdGlvbnNCZWZvcmUgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgICAgICAgICAgICAgICBoYXNBbm5vdGF0aW9uc0FmdGVyID0gdHJ1ZTsKQEAgLTc0Myw3ICs3
NDMsNyBAQCBpbmxpbmUgdm9pZCBJbmxpbmVGbG93Qm94OjphZGRCb3hTaGFkb3dWaXN1YWxPdmVy
ZmxvdyhMYXlvdXRSZWN0JiBsb2dpY2FsVmlzdWFsTwogICAgIGlmICghcGFyZW50KCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHJlbmRlcmVyKCktPnN0eWxl
KGlzRmlyc3RMaW5lU3R5bGUoKSk7CisgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gc3R5bGVGb3JG
aXJzdExpbmUoaXNGaXJzdExpbmVTdHlsZSgpKTsKICAgICBpZiAoIXN0eWxlLT5ib3hTaGFkb3co
KSkKICAgICAgICAgcmV0dXJuOwogCkBAIC03NzYsNyArNzc2LDcgQEAgaW5saW5lIHZvaWQgSW5s
aW5lRmxvd0JveDo6YWRkQm9yZGVyT3V0c2V0VmlzdWFsT3ZlcmZsb3coTGF5b3V0UmVjdCYgbG9n
aWNhbFZpc3UKICAgICBpZiAoIXBhcmVudCgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAg
UmVuZGVyU3R5bGUqIHN0eWxlID0gcmVuZGVyZXIoKS0+c3R5bGUoaXNGaXJzdExpbmVTdHlsZSgp
KTsKKyAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBzdHlsZUZvckZpcnN0TGluZShpc0ZpcnN0TGlu
ZVN0eWxlKCkpOwogICAgIGlmICghc3R5bGUtPmhhc0JvcmRlckltYWdlT3V0c2V0cygpKQogICAg
ICAgICByZXR1cm47CiAgICAgCkBAIC04MTEsNyArODExLDcgQEAgaW5saW5lIHZvaWQgSW5saW5l
Rmxvd0JveDo6YWRkVGV4dEJveFZpc3VhbE92ZXJmbG93KElubGluZVRleHRCb3gqIHRleHRCb3gs
IEdseXAKICAgICBpZiAodGV4dEJveC0+a25vd25Ub0hhdmVOb092ZXJmbG93KCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHRleHRCb3gtPnJlbmRlcmVyKCkt
PnN0eWxlKGlzRmlyc3RMaW5lU3R5bGUoKSk7CisgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gdGV4
dEJveC0+c3R5bGVGb3JGaXJzdExpbmUoaXNGaXJzdExpbmVTdHlsZSgpKTsKICAgICAKICAgICBH
bHlwaE92ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcDo6aXRlcmF0b3IgaXQgPSB0ZXh0Qm94RGF0
YU1hcC5maW5kKHRleHRCb3gpOwogICAgIEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cgPSBp
dCA9PSB0ZXh0Qm94RGF0YU1hcC5lbmQoKSA/IDAgOiAmaXQtPnNlY29uZC5zZWNvbmQ7CkBAIC0x
MjE3LDcgKzEyMTcsNyBAQCB2b2lkIElubGluZUZsb3dCb3g6OnBhaW50Qm94RGVjb3JhdGlvbnMo
UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JgogICAgIAogICAgIC8vIFlv
dSBjYW4gdXNlIHA6OmZpcnN0LWxpbmUgdG8gc3BlY2lmeSBhIGJhY2tncm91bmQuIElmIHNvLCB0
aGUgcm9vdCBsaW5lIGJveGVzIGZvcgogICAgIC8vIGEgbGluZSBtYXkgYWN0dWFsbHkgaGF2ZSB0
byBwYWludCBhIGJhY2tncm91bmQuCi0gICAgUmVuZGVyU3R5bGUqIHN0eWxlVG9Vc2UgPSByZW5k
ZXJlcigpLT5zdHlsZShpc0ZpcnN0TGluZVN0eWxlKCkpOworICAgIFJlbmRlclN0eWxlKiBzdHls
ZVRvVXNlID0gc3R5bGVGb3JGaXJzdExpbmUoaXNGaXJzdExpbmVTdHlsZSgpKTsKICAgICBpZiAo
KCFwYXJlbnQoKSAmJiBpc0ZpcnN0TGluZVN0eWxlKCkgJiYgc3R5bGVUb1VzZSAhPSByZW5kZXJl
cigpLT5zdHlsZSgpKSB8fCAocGFyZW50KCkgJiYgcmVuZGVyZXIoKS0+aGFzQm94RGVjb3JhdGlv
bnMoKSkpIHsKICAgICAgICAgTGF5b3V0UmVjdCBwYWludFJlY3QgPSBMYXlvdXRSZWN0KGFkanVz
dGVkUGFpbnRvZmZzZXQsIGZyYW1lUmVjdC5zaXplKCkpOwogICAgICAgICAvLyBTaGFkb3cgY29t
ZXMgZmlyc3QgYW5kIGlzIGJlaGluZCB0aGUgYmFja2dyb3VuZCBhbmQgYm9yZGVyLgpAQCAtMTI0
MCw3ICsxMjQwLDcgQEAgdm9pZCBJbmxpbmVGbG93Qm94OjpwYWludEJveERlY29yYXRpb25zKFBh
aW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYKICAgICAgICAgICAgIC8vIFRo
ZSBzaW1wbGUgY2FzZSBpcyB3aGVyZSB3ZSBlaXRoZXIgaGF2ZSBubyBib3JkZXIgaW1hZ2Ugb3Ig
d2UgYXJlIHRoZSBvbmx5IGJveCBmb3IgdGhpcyBvYmplY3QuICBJbiB0aG9zZQogICAgICAgICAg
ICAgLy8gY2FzZXMgb25seSBhIHNpbmdsZSBjYWxsIHRvIGRyYXcgaXMgcmVxdWlyZWQuCiAgICAg
ICAgICAgICBpZiAoIWhhc0JvcmRlckltYWdlIHx8ICghcHJldkxpbmVCb3goKSAmJiAhbmV4dExp
bmVCb3goKSkpCi0gICAgICAgICAgICAgICAgYm94TW9kZWxPYmplY3QoKS0+cGFpbnRCb3JkZXIo
cGFpbnRJbmZvLCBwYWludFJlY3QsIHJlbmRlcmVyKCktPnN0eWxlKGlzRmlyc3RMaW5lU3R5bGUo
KSksIEJhY2tncm91bmRCbGVlZE5vbmUsIGluY2x1ZGVMb2dpY2FsTGVmdEVkZ2UoKSwgaW5jbHVk
ZUxvZ2ljYWxSaWdodEVkZ2UoKSk7CisgICAgICAgICAgICAgICAgYm94TW9kZWxPYmplY3QoKS0+
cGFpbnRCb3JkZXIocGFpbnRJbmZvLCBwYWludFJlY3QsIHN0eWxlRm9yRmlyc3RMaW5lKGlzRmly
c3RMaW5lU3R5bGUoKSksIEJhY2tncm91bmRCbGVlZE5vbmUsIGluY2x1ZGVMb2dpY2FsTGVmdEVk
Z2UoKSwgaW5jbHVkZUxvZ2ljYWxSaWdodEVkZ2UoKSk7CiAgICAgICAgICAgICBlbHNlIHsKICAg
ICAgICAgICAgICAgICAvLyBXZSBoYXZlIGEgYm9yZGVyIGltYWdlIHRoYXQgc3BhbnMgbXVsdGlw
bGUgbGluZXMuCiAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBhZGp1c3QgdHggYW5kIHR5
IGJ5IHRoZSB3aWR0aCBvZiBhbGwgcHJldmlvdXMgbGluZXMuCkBAIC0xMjY0LDcgKzEyNjQsNyBA
QCB2b2lkIElubGluZUZsb3dCb3g6OnBhaW50Qm94RGVjb3JhdGlvbnMoUGFpbnRJbmZvJiBwYWlu
dEluZm8sIGNvbnN0IExheW91dFBvaW50JgogICAgICAgICAgICAgICAgIExheW91dFJlY3QgY2xp
cFJlY3QgPSBjbGlwUmVjdEZvck5pbmVQaWVjZUltYWdlU3RyaXAodGhpcywgYm9yZGVySW1hZ2Us
IHBhaW50UmVjdCk7CiAgICAgICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBz
dGF0ZVNhdmVyKCpjb250ZXh0KTsKICAgICAgICAgICAgICAgICBjb250ZXh0LT5jbGlwKGNsaXBS
ZWN0KTsKLSAgICAgICAgICAgICAgICBib3hNb2RlbE9iamVjdCgpLT5wYWludEJvcmRlcihwYWlu
dEluZm8sIExheW91dFJlY3Qoc3RyaXBYLCBzdHJpcFksIHN0cmlwV2lkdGgsIHN0cmlwSGVpZ2h0
KSwgcmVuZGVyZXIoKS0+c3R5bGUoaXNGaXJzdExpbmVTdHlsZSgpKSk7CisgICAgICAgICAgICAg
ICAgYm94TW9kZWxPYmplY3QoKS0+cGFpbnRCb3JkZXIocGFpbnRJbmZvLCBMYXlvdXRSZWN0KHN0
cmlwWCwgc3RyaXBZLCBzdHJpcFdpZHRoLCBzdHJpcEhlaWdodCksIHN0eWxlRm9yRmlyc3RMaW5l
KGlzRmlyc3RMaW5lU3R5bGUoKSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpA
QCAtMTQ0MSw3ICsxNDQxLDcgQEAgTGF5b3V0VW5pdCBJbmxpbmVGbG93Qm94Ojpjb21wdXRlT3Zl
ckFubm90YXRpb25BZGp1c3RtZW50KExheW91dFVuaXQgYWxsb3dlZFBvc2kKICAgICAgICAgfQog
CiAgICAgICAgIGlmIChjdXJyLT5pc0lubGluZVRleHRCb3goKSkgewotICAgICAgICAgICAgUmVu
ZGVyU3R5bGUqIHN0eWxlID0gY3Vyci0+cmVuZGVyZXIoKS0+c3R5bGUoaXNGaXJzdExpbmVTdHls
ZSgpKTsKKyAgICAgICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IGN1cnItPnN0eWxlRm9yRmly
c3RMaW5lKGlzRmlyc3RMaW5lU3R5bGUoKSk7CiAgICAgICAgICAgICBUZXh0RW1waGFzaXNQb3Np
dGlvbiBlbXBoYXNpc01hcmtQb3NpdGlvbjsKICAgICAgICAgICAgIGlmIChzdHlsZS0+dGV4dEVt
cGhhc2lzTWFyaygpICE9IFRleHRFbXBoYXNpc01hcmtOb25lICYmIHRvSW5saW5lVGV4dEJveChj
dXJyKS0+Z2V0RW1waGFzaXNNYXJrUG9zaXRpb24oc3R5bGUsIGVtcGhhc2lzTWFya1Bvc2l0aW9u
KSAmJiBlbXBoYXNpc01hcmtQb3NpdGlvbiA9PSBUZXh0RW1waGFzaXNQb3NpdGlvbk92ZXIpIHsK
ICAgICAgICAgICAgICAgICBpZiAoIXN0eWxlLT5pc0ZsaXBwZWRMaW5lc1dyaXRpbmdNb2RlKCkp
IHsKQEAgLTE0NjgsNyArMTQ2OCw3IEBAIExheW91dFVuaXQgSW5saW5lRmxvd0JveDo6Y29tcHV0
ZVVuZGVyQW5ub3RhdGlvbkFkanVzdG1lbnQoTGF5b3V0VW5pdCBhbGxvd2VkUG9zCiAgICAgICAg
ICAgICByZXN1bHQgPSBtYXgocmVzdWx0LCB0b0lubGluZUZsb3dCb3goY3VyciktPmNvbXB1dGVV
bmRlckFubm90YXRpb25BZGp1c3RtZW50KGFsbG93ZWRQb3NpdGlvbikpOwogCiAgICAgICAgIGlm
IChjdXJyLT5pc0lubGluZVRleHRCb3goKSkgewotICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHN0
eWxlID0gY3Vyci0+cmVuZGVyZXIoKS0+c3R5bGUoaXNGaXJzdExpbmVTdHlsZSgpKTsKKyAgICAg
ICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IGN1cnItPnN0eWxlRm9yRmlyc3RMaW5lKGlzRmly
c3RMaW5lU3R5bGUoKSk7CiAgICAgICAgICAgICBpZiAoc3R5bGUtPnRleHRFbXBoYXNpc01hcmso
KSAhPSBUZXh0RW1waGFzaXNNYXJrTm9uZSAmJiBzdHlsZS0+dGV4dEVtcGhhc2lzUG9zaXRpb24o
KSA9PSBUZXh0RW1waGFzaXNQb3NpdGlvblVuZGVyKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFz
dHlsZS0+aXNGbGlwcGVkTGluZXNXcml0aW5nTW9kZSgpKSB7CiAgICAgICAgICAgICAgICAgICAg
IExheW91dFVuaXQgYm90dG9tT2ZFbXBoYXNpc01hcmsgPSBjdXJyLT5sb2dpY2FsQm90dG9tKCkg
KyBzdHlsZS0+Zm9udCgpLmVtcGhhc2lzTWFya0hlaWdodChzdHlsZS0+dGV4dEVtcGhhc2lzTWFy
a1N0cmluZygpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVG
bG93Qm94LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5oCmluZGV4
IDIwNjhlNzguLjUzMWY5YjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9J
bmxpbmVGbG93Qm94LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dC
b3guaApAQCAtMTM3LDEzICsxMzcsMTMgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKCFp
bmNsdWRlTG9naWNhbExlZnRFZGdlKCkpCiAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAg
cmV0dXJuIGlzSG9yaXpvbnRhbCgpID8gcmVuZGVyZXIoKS0+c3R5bGUoaXNGaXJzdExpbmVTdHls
ZSgpKS0+Ym9yZGVyTGVmdFdpZHRoKCkgOiByZW5kZXJlcigpLT5zdHlsZShpc0ZpcnN0TGluZVN0
eWxlKCkpLT5ib3JkZXJUb3BXaWR0aCgpOworICAgICAgICByZXR1cm4gaXNIb3Jpem9udGFsKCkg
PyBib3hNb2RlbE9iamVjdCgpLT5zdHlsZUZvckZpcnN0TGluZShpc0ZpcnN0TGluZVN0eWxlKCkp
LT5ib3JkZXJMZWZ0V2lkdGgoKSA6IGJveE1vZGVsT2JqZWN0KCktPnN0eWxlRm9yRmlyc3RMaW5l
KGlzRmlyc3RMaW5lU3R5bGUoKSktPmJvcmRlclRvcFdpZHRoKCk7CiAgICAgfQogICAgIGludCBi
b3JkZXJMb2dpY2FsUmlnaHQoKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKCFpbmNsdWRlTG9n
aWNhbFJpZ2h0RWRnZSgpKQogICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiBp
c0hvcml6b250YWwoKSA/IHJlbmRlcmVyKCktPnN0eWxlKGlzRmlyc3RMaW5lU3R5bGUoKSktPmJv
cmRlclJpZ2h0V2lkdGgoKSA6IHJlbmRlcmVyKCktPnN0eWxlKGlzRmlyc3RMaW5lU3R5bGUoKSkt
PmJvcmRlckJvdHRvbVdpZHRoKCk7CisgICAgICAgIHJldHVybiBpc0hvcml6b250YWwoKSA/IGJv
eE1vZGVsT2JqZWN0KCktPnN0eWxlRm9yRmlyc3RMaW5lKGlzRmlyc3RMaW5lU3R5bGUoKSktPmJv
cmRlclJpZ2h0V2lkdGgoKSA6IGJveE1vZGVsT2JqZWN0KCktPnN0eWxlRm9yRmlyc3RMaW5lKGlz
Rmlyc3RMaW5lU3R5bGUoKSktPmJvcmRlckJvdHRvbVdpZHRoKCk7CiAgICAgfQogICAgIGludCBw
YWRkaW5nTG9naWNhbExlZnQoKSBjb25zdAogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9JbmxpbmVUZXh0Qm94LmNwcAppbmRleCAxMWI3MDU1Li4yMTUyOTc0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCkBAIC0xODQsMTAgKzE4NCw5IEBAIExh
eW91dFJlY3QgSW5saW5lVGV4dEJveDo6bG9jYWxTZWxlY3Rpb25SZWN0KGludCBzdGFydFBvcywg
aW50IGVuZFBvcykKIAogICAgIEZvbnRDYWNoZVB1cmdlUHJldmVudGVyIGZvbnRDYWNoZVB1cmdl
UHJldmVudGVyOwogCi0gICAgUmVuZGVyVGV4dCogdGV4dE9iaiA9IHRleHRSZW5kZXJlcigpOwog
ICAgIExheW91dFVuaXQgc2VsVG9wID0gc2VsZWN0aW9uVG9wKCk7CiAgICAgTGF5b3V0VW5pdCBz
ZWxIZWlnaHQgPSBzZWxlY3Rpb25IZWlnaHQoKTsKLSAgICBSZW5kZXJTdHlsZSogc3R5bGVUb1Vz
ZSA9IHRleHRPYmotPnN0eWxlKGlzRmlyc3RMaW5lU3R5bGUoKSk7CisgICAgUmVuZGVyU3R5bGUq
IHN0eWxlVG9Vc2UgPSBzdHlsZUZvckZpcnN0TGluZShpc0ZpcnN0TGluZVN0eWxlKCkpOwogICAg
IGNvbnN0IEZvbnQmIGZvbnQgPSBzdHlsZVRvVXNlLT5mb250KCk7CiAKICAgICBCdWZmZXJGb3JB
cHBlbmRpbmdIeXBoZW4gY2hhcmFjdGVyc1dpdGhIeXBoZW47CkBAIC01MTYsNyArNTE1LDcgQEAg
dm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5
b3V0UG9pbnQmIHBhaW50T2Zmc2V0LAogCiAgICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0ID0g
cGFpbnRJbmZvLmNvbnRleHQ7CiAKLSAgICBSZW5kZXJTdHlsZSogc3R5bGVUb1VzZSA9IHJlbmRl
cmVyKCktPnN0eWxlKGlzRmlyc3RMaW5lU3R5bGUoKSk7CisgICAgUmVuZGVyU3R5bGUqIHN0eWxl
VG9Vc2UgPSBzdHlsZUZvckZpcnN0TGluZShpc0ZpcnN0TGluZVN0eWxlKCkpOwogICAgIAogICAg
IGFkanVzdGVkUGFpbnRPZmZzZXQubW92ZSgwLCBzdHlsZVRvVXNlLT5pc0hvcml6b250YWxXcml0
aW5nTW9kZSgpID8gMCA6IC1sb2dpY2FsSGVpZ2h0KCkpOwogCkBAIC05MjAsNyArOTE5LDcgQEAg
dm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludERlY29yYXRpb24oR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBGbG9hdFBvaW50JgogICAgIAogICAgIC8vIEdldCB0aGUgdGV4dCBkZWNvcmF0
aW9uIGNvbG9ycy4KICAgICBDb2xvciB1bmRlcmxpbmUsIG92ZXJsaW5lLCBsaW5ldGhyb3VnaDsK
LSAgICByZW5kZXJlcigpLT5nZXRUZXh0RGVjb3JhdGlvbkNvbG9ycyhkZWNvLCB1bmRlcmxpbmUs
IG92ZXJsaW5lLCBsaW5ldGhyb3VnaCwgdHJ1ZSwgaXNGaXJzdExpbmVTdHlsZSgpKTsKKyAgICB0
b1JlbmRlckJveE1vZGVsT2JqZWN0KHJlbmRlcmVyKCktPnBhcmVudCgpKS0+Z2V0VGV4dERlY29y
YXRpb25Db2xvcnMoZGVjbywgdW5kZXJsaW5lLCBvdmVybGluZSwgbGluZXRocm91Z2gsIHRydWUs
IGlzRmlyc3RMaW5lU3R5bGUoKSk7CiAgICAgCiAgICAgLy8gVXNlIGEgc3BlY2lhbCBmdW5jdGlv
biBmb3IgdW5kZXJsaW5lcyB0byBnZXQgdGhlIHBvc2l0aW9uaW5nIGV4YWN0bHkgcmlnaHQuCiAg
ICAgYm9vbCBpc1ByaW50aW5nID0gdGV4dFJlbmRlcmVyKCktPmRvY3VtZW50KCktPnByaW50aW5n
KCk7CkBAIC05MjgsNyArOTI3LDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludERlY29yYXRp
b24oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFBvaW50JgogCiAgICAgYm9v
bCBsaW5lc0FyZU9wYXF1ZSA9ICFpc1ByaW50aW5nICYmICghKGRlY28gJiBVTkRFUkxJTkUpIHx8
IHVuZGVybGluZS5hbHBoYSgpID09IDI1NSkgJiYgKCEoZGVjbyAmIE9WRVJMSU5FKSB8fCBvdmVy
bGluZS5hbHBoYSgpID09IDI1NSkgJiYgKCEoZGVjbyAmIExJTkVfVEhST1VHSCkgfHwgbGluZXRo
cm91Z2guYWxwaGEoKSA9PSAyNTUpOwogCi0gICAgUmVuZGVyU3R5bGUqIHN0eWxlVG9Vc2UgPSBy
ZW5kZXJlcigpLT5zdHlsZShpc0ZpcnN0TGluZVN0eWxlKCkpOworICAgIFJlbmRlclN0eWxlKiBz
dHlsZVRvVXNlID0gc3R5bGVGb3JGaXJzdExpbmUoaXNGaXJzdExpbmVTdHlsZSgpKTsKICAgICBp
bnQgYmFzZWxpbmUgPSBzdHlsZVRvVXNlLT5mb250TWV0cmljcygpLmFzY2VudCgpOwogCiAgICAg
Ym9vbCBzZXRDbGlwID0gZmFsc2U7CkBAIC0xMDY0LDcgKzEwNjMsNyBAQCB2b2lkIElubGluZVRl
eHRCb3g6OnBhaW50RG9jdW1lbnRNYXJrZXIoR3JhcGhpY3NDb250ZXh0KiBwdCwgY29uc3QgRmxv
YXRQb2ludCYgYgogICAgIC8vIFNvLCB3ZSBnZW5lcmFsbHkgcGxhY2UgdGhlIHVuZGVybGluZSBh
dCB0aGUgYm90dG9tIG9mIHRoZSB0ZXh0LCBidXQgaW4gbGFyZ2VyIGZvbnRzIHRoYXQncyBub3Qg
c28gZ29vZCBzbwogICAgIC8vIHdlIHBpbiB0byB0d28gcGl4ZWxzIHVuZGVyIHRoZSBiYXNlbGlu
ZS4KICAgICBpbnQgbGluZVRoaWNrbmVzcyA9IGNNaXNzcGVsbGluZ0xpbmVUaGlja25lc3M7Ci0g
ICAgaW50IGJhc2VsaW5lID0gcmVuZGVyZXIoKS0+c3R5bGUoaXNGaXJzdExpbmVTdHlsZSgpKS0+
Zm9udE1ldHJpY3MoKS5hc2NlbnQoKTsKKyAgICBpbnQgYmFzZWxpbmUgPSBzdHlsZUZvckZpcnN0
TGluZShpc0ZpcnN0TGluZVN0eWxlKCkpLT5mb250TWV0cmljcygpLmFzY2VudCgpOwogICAgIGlu
dCBkZXNjZW50ID0gbG9naWNhbEhlaWdodCgpIC0gYmFzZWxpbmU7CiAgICAgaW50IHVuZGVybGlu
ZU9mZnNldDsKICAgICBpZiAoZGVzY2VudCA8PSAoMiArIGxpbmVUaGlja25lc3MpKSB7CkBAIC0x
MjE2LDcgKzEyMTUsNyBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50Q29tcG9zaXRpb25VbmRl
cmxpbmUoR3JhcGhpY3NDb250ZXh0KiBjdHgsIGNvbnN0IEZsb2F0UAogICAgIC8vIEFsbCBvdGhl
ciBtYXJrZWQgdGV4dCB1bmRlcmxpbmVzIGFyZSAxcHggdGhpY2suCiAgICAgLy8gSWYgdGhlcmUn
cyBub3QgZW5vdWdoIHNwYWNlIHRoZSB1bmRlcmxpbmUgd2lsbCB0b3VjaCBvciBvdmVybGFwIGNo
YXJhY3RlcnMuCiAgICAgaW50IGxpbmVUaGlja25lc3MgPSAxOwotICAgIGludCBiYXNlbGluZSA9
IHJlbmRlcmVyKCktPnN0eWxlKGlzRmlyc3RMaW5lU3R5bGUoKSktPmZvbnRNZXRyaWNzKCkuYXNj
ZW50KCk7CisgICAgaW50IGJhc2VsaW5lID0gc3R5bGVGb3JGaXJzdExpbmUoaXNGaXJzdExpbmVT
dHlsZSgpKS0+Zm9udE1ldHJpY3MoKS5hc2NlbnQoKTsKICAgICBpZiAodW5kZXJsaW5lLnRoaWNr
ICYmIGxvZ2ljYWxIZWlnaHQoKSAtIGJhc2VsaW5lID49IDIpCiAgICAgICAgIGxpbmVUaGlja25l
c3MgPSAyOwogCkBAIC0xMjYxLDggKzEyNjAsNyBAQCBpbnQgSW5saW5lVGV4dEJveDo6b2Zmc2V0
Rm9yUG9zaXRpb24oZmxvYXQgbGluZU9mZnNldCwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocwog
CiAgICAgRm9udENhY2hlUHVyZ2VQcmV2ZW50ZXIgZm9udENhY2hlUHVyZ2VQcmV2ZW50ZXI7CiAK
LSAgICBSZW5kZXJUZXh0KiB0ZXh0ID0gdG9SZW5kZXJUZXh0KHJlbmRlcmVyKCkpOwotICAgIFJl
bmRlclN0eWxlKiBzdHlsZSA9IHRleHQtPnN0eWxlKGlzRmlyc3RMaW5lU3R5bGUoKSk7CisgICAg
UmVuZGVyU3R5bGUqIHN0eWxlID0gc3R5bGVGb3JGaXJzdExpbmUoaXNGaXJzdExpbmVTdHlsZSgp
KTsKICAgICBjb25zdCBGb250JiBmb250ID0gc3R5bGUtPmZvbnQoKTsKICAgICByZXR1cm4gZm9u
dC5vZmZzZXRGb3JQb3NpdGlvbihjb25zdHJ1Y3RUZXh0UnVuKHN0eWxlLCBmb250KSwgbGluZU9m
ZnNldCAtIGxvZ2ljYWxMZWZ0KCksIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKTsKIH0KQEAgLTEyNzcs
OCArMTI3NSw3IEBAIGZsb2F0IElubGluZVRleHRCb3g6OnBvc2l0aW9uRm9yT2Zmc2V0KGludCBv
ZmZzZXQpIGNvbnN0CiAKICAgICBGb250Q2FjaGVQdXJnZVByZXZlbnRlciBmb250Q2FjaGVQdXJn
ZVByZXZlbnRlcjsKIAotICAgIFJlbmRlclRleHQqIHRleHQgPSB0b1JlbmRlclRleHQocmVuZGVy
ZXIoKSk7Ci0gICAgUmVuZGVyU3R5bGUqIHN0eWxlVG9Vc2UgPSB0ZXh0LT5zdHlsZShpc0ZpcnN0
TGluZVN0eWxlKCkpOworICAgIFJlbmRlclN0eWxlKiBzdHlsZVRvVXNlID0gc3R5bGVGb3JGaXJz
dExpbmUoaXNGaXJzdExpbmVTdHlsZSgpKTsKICAgICBBU1NFUlQoc3R5bGVUb1VzZSk7CiAgICAg
Y29uc3QgRm9udCYgZm9udCA9IHN0eWxlVG9Vc2UtPmZvbnQoKTsKICAgICBpbnQgZnJvbSA9ICFp
c0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBvZmZzZXQgLSBtX3N0YXJ0IDogMDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCUi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQlIuY3BwCmluZGV4IGQ4MDM5MzYuLmZiMzRlMmQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCUi5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJSLmNwcApAQCAtMjQsNiArMjQsNyBAQAogCiAjaW5jbHVk
ZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJJbmxpbmVUZXh0Qm94LmgiCisjaW5jbHVkZSAiUmVu
ZGVyQm94TW9kZWxPYmplY3QuaCIKICNpbmNsdWRlICJWaXNpYmxlUG9zaXRpb24uaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewpAQCAtNDEsNyArNDIsNyBAQCBSZW5kZXJCUjo6flJlbmRlckJSKCkK
IGludCBSZW5kZXJCUjo6bGluZUhlaWdodChib29sIGZpcnN0TGluZSkgY29uc3QKIHsKICAgICBp
ZiAoZmlyc3RMaW5lICYmIGRvY3VtZW50KCktPnVzZXNGaXJzdExpbmVSdWxlcygpKSB7Ci0gICAg
ICAgIFJlbmRlclN0eWxlKiBzID0gc3R5bGUoZmlyc3RMaW5lKTsKKyAgICAgICAgUmVuZGVyU3R5
bGUqIHMgPSB0b1JlbmRlckJveE1vZGVsT2JqZWN0KHBhcmVudCgpKS0+c3R5bGVGb3JGaXJzdExp
bmUoZmlyc3RMaW5lKTsKICAgICAgICAgaWYgKHMgIT0gc3R5bGUoKSkKICAgICAgICAgICAgIHJl
dHVybiBzLT5jb21wdXRlZExpbmVIZWlnaHQodmlldygpKTsKICAgICB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAppbmRleCA5MDY0YzBhLi5iZWZiZGUzIDEwMDc1NQot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKQEAgLTU4MjAsNyArNTgyMCw3IEBA
IExheW91dFVuaXQgUmVuZGVyQmxvY2s6OmxpbmVIZWlnaHQoYm9vbCBmaXJzdExpbmUsIExpbmVE
aXJlY3Rpb25Nb2RlIGRpcmVjdGlvbiwKICAgICAgICAgcmV0dXJuIFJlbmRlckJveDo6bGluZUhl
aWdodChmaXJzdExpbmUsIGRpcmVjdGlvbiwgbGluZVBvc2l0aW9uTW9kZSk7CiAKICAgICBpZiAo
Zmlyc3RMaW5lICYmIGRvY3VtZW50KCktPnVzZXNGaXJzdExpbmVSdWxlcygpKSB7Ci0gICAgICAg
IFJlbmRlclN0eWxlKiBzID0gc3R5bGUoZmlyc3RMaW5lKTsKKyAgICAgICAgUmVuZGVyU3R5bGUq
IHMgPSBzdHlsZUZvckZpcnN0TGluZShmaXJzdExpbmUpOwogICAgICAgICBpZiAocyAhPSBzdHls
ZSgpKQogICAgICAgICAgICAgcmV0dXJuIHMtPmNvbXB1dGVkTGluZUhlaWdodCh2aWV3KCkpOwog
ICAgIH0KQEAgLTU4NjMsNyArNTg2Myw3IEBAIExheW91dFVuaXQgUmVuZGVyQmxvY2s6OmJhc2Vs
aW5lUG9zaXRpb24oRm9udEJhc2VsaW5lIGJhc2VsaW5lVHlwZSwgYm9vbCBmaXJzdExpCiAgICAg
ICAgIHJldHVybiBSZW5kZXJCb3g6OmJhc2VsaW5lUG9zaXRpb24oYmFzZWxpbmVUeXBlLCBmaXJz
dExpbmUsIGRpcmVjdGlvbiwgbGluZVBvc2l0aW9uTW9kZSk7CiAgICAgfQogCi0gICAgY29uc3Qg
Rm9udE1ldHJpY3MmIGZvbnRNZXRyaWNzID0gc3R5bGUoZmlyc3RMaW5lKS0+Zm9udE1ldHJpY3Mo
KTsKKyAgICBjb25zdCBGb250TWV0cmljcyYgZm9udE1ldHJpY3MgPSBzdHlsZUZvckZpcnN0TGlu
ZShmaXJzdExpbmUpLT5mb250TWV0cmljcygpOwogICAgIHJldHVybiBmb250TWV0cmljcy5hc2Nl
bnQoYmFzZWxpbmVUeXBlKSArIChsaW5lSGVpZ2h0KGZpcnN0TGluZSwgZGlyZWN0aW9uLCBsaW5l
UG9zaXRpb25Nb2RlKSAtIGZvbnRNZXRyaWNzLmhlaWdodCgpKSAvIDI7CiB9CiAKQEAgLTU4NzQs
NyArNTg3NCw3IEBAIExheW91dFVuaXQgUmVuZGVyQmxvY2s6OmZpcnN0TGluZUJveEJhc2VsaW5l
KCkgY29uc3QKIAogICAgIGlmIChjaGlsZHJlbklubGluZSgpKSB7CiAgICAgICAgIGlmIChmaXJz
dExpbmVCb3goKSkKLSAgICAgICAgICAgIHJldHVybiBmaXJzdExpbmVCb3goKS0+bG9naWNhbFRv
cCgpICsgc3R5bGUodHJ1ZSktPmZvbnRNZXRyaWNzKCkuYXNjZW50KGZpcnN0Um9vdEJveCgpLT5i
YXNlbGluZVR5cGUoKSk7CisgICAgICAgICAgICByZXR1cm4gZmlyc3RMaW5lQm94KCktPmxvZ2lj
YWxUb3AoKSArIHN0eWxlRm9yRmlyc3RMaW5lKHRydWUpLT5mb250TWV0cmljcygpLmFzY2VudChm
aXJzdFJvb3RCb3goKS0+YmFzZWxpbmVUeXBlKCkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAg
ICByZXR1cm4gLTE7CiAgICAgfQpAQCAtNTkwNiw3ICs1OTA2LDcgQEAgTGF5b3V0VW5pdCBSZW5k
ZXJCbG9jazo6bGFzdExpbmVCb3hCYXNlbGluZSgpIGNvbnN0CiAgICAgICAgICAgICAgICAgICsg
KGxpbmVEaXJlY3Rpb24gPT0gSG9yaXpvbnRhbExpbmUgPyBib3JkZXJUb3AoKSArIHBhZGRpbmdU
b3AoKSA6IGJvcmRlclJpZ2h0KCkgKyBwYWRkaW5nUmlnaHQoKSk7CiAgICAgICAgIH0KICAgICAg
ICAgaWYgKGxhc3RMaW5lQm94KCkpCi0gICAgICAgICAgICByZXR1cm4gbGFzdExpbmVCb3goKS0+
bG9naWNhbFRvcCgpICsgc3R5bGUobGFzdExpbmVCb3goKSA9PSBmaXJzdExpbmVCb3goKSktPmZv
bnRNZXRyaWNzKCkuYXNjZW50KGxhc3RSb290Qm94KCktPmJhc2VsaW5lVHlwZSgpKTsKKyAgICAg
ICAgICAgIHJldHVybiBsYXN0TGluZUJveCgpLT5sb2dpY2FsVG9wKCkgKyBzdHlsZUZvckZpcnN0
TGluZShsYXN0TGluZUJveCgpID09IGZpcnN0TGluZUJveCgpKS0+Zm9udE1ldHJpY3MoKS5hc2Nl
bnQobGFzdFJvb3RCb3goKS0+YmFzZWxpbmVUeXBlKCkpOwogICAgICAgICByZXR1cm4gLTE7CiAg
ICAgfSBlbHNlIHsKICAgICAgICAgYm9vbCBoYXZlTm9ybWFsRmxvd0NoaWxkID0gZmFsc2U7CkBA
IC01OTY0LDcgKzU5NjQsNyBAQCBSZW5kZXJCbG9jayogUmVuZGVyQmxvY2s6OmZpcnN0TGluZUJs
b2NrKCkgY29uc3QKIAogc3RhdGljIFJlbmRlclN0eWxlKiBzdHlsZUZvckZpcnN0TGV0dGVyKFJl
bmRlck9iamVjdCogZmlyc3RMZXR0ZXJCbG9jaywgUmVuZGVyT2JqZWN0KiBmaXJzdExldHRlckNv
bnRhaW5lcikKIHsKLSAgICBSZW5kZXJTdHlsZSogcHNldWRvU3R5bGUgPSBmaXJzdExldHRlckJs
b2NrLT5nZXRDYWNoZWRQc2V1ZG9TdHlsZShGSVJTVF9MRVRURVIsIGZpcnN0TGV0dGVyQ29udGFp
bmVyLT5maXJzdExpbmVTdHlsZSgpKTsKKyAgICBSZW5kZXJTdHlsZSogcHNldWRvU3R5bGUgPSBm
aXJzdExldHRlckJsb2NrLT5nZXRDYWNoZWRQc2V1ZG9TdHlsZShGSVJTVF9MRVRURVIsIHRvUmVu
ZGVyQm94TW9kZWxPYmplY3QoZmlyc3RMZXR0ZXJDb250YWluZXIpLT5maXJzdExpbmVTdHlsZSgp
KTsKICAgICAvLyBGb3JjZSBpbmxpbmUgZGlzcGxheSAoZXhjZXB0IGZvciBmbG9hdGluZyBmaXJz
dC1sZXR0ZXJzKS4KICAgICBwc2V1ZG9TdHlsZS0+c2V0RGlzcGxheShwc2V1ZG9TdHlsZS0+aXNG
bG9hdGluZygpID8gQkxPQ0sgOiBJTkxJTkUpOwogICAgIC8vIENTUzIgc2F5cyBmaXJzdC1sZXR0
ZXIgY2FuJ3QgYmUgcG9zaXRpb25lZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAKaW5kZXggOWZjZGRjMi4uNGViMjZlOSAxMDA3NTUK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAK
QEAgLTY0NSwxNyArNjQ1LDE3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRMb2dpY2FsV2lkdGhG
b3JUZXh0UnVuKFJvb3RJbmxpbmVCb3gqIGxpbmVCb3gsIEJpZGlSdW4qIHJ1CiAgICAgICAgIC8v
IHdpbGwga2VlcCB1cyBmcm9tIGNvbXB1dGluZyBnbHlwaCBib3VuZHMgaW4gbmVhcmx5IGFsbCBj
YXNlcy4KICAgICAgICAgYm9vbCBpbmNsdWRlUm9vdExpbmUgPSBsaW5lQm94LT5pbmNsdWRlc1Jv
b3RMaW5lQm94Rm9udE9yTGVhZGluZygpOwogICAgICAgICBpbnQgYmFzZWxpbmVTaGlmdCA9IGxp
bmVCb3gtPnZlcnRpY2FsUG9zaXRpb25Gb3JCb3gocnVuLT5tX2JveCwgdmVydGljYWxQb3NpdGlv
bkNhY2hlKTsKLSAgICAgICAgaW50IHJvb3REZXNjZW50ID0gaW5jbHVkZVJvb3RMaW5lID8gbGlu
ZUJveC0+cmVuZGVyZXIoKS0+c3R5bGUobGluZUluZm8uaXNGaXJzdExpbmUoKSktPmZvbnQoKS5m
b250TWV0cmljcygpLmRlc2NlbnQoKSA6IDA7Ci0gICAgICAgIGludCByb290QXNjZW50ID0gaW5j
bHVkZVJvb3RMaW5lID8gbGluZUJveC0+cmVuZGVyZXIoKS0+c3R5bGUobGluZUluZm8uaXNGaXJz
dExpbmUoKSktPmZvbnQoKS5mb250TWV0cmljcygpLmFzY2VudCgpIDogMDsKLSAgICAgICAgaW50
IGJveEFzY2VudCA9IHJlbmRlcmVyLT5zdHlsZShsaW5lSW5mby5pc0ZpcnN0TGluZSgpKS0+Zm9u
dCgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkgLSBiYXNlbGluZVNoaWZ0OwotICAgICAgICBpbnQg
Ym94RGVzY2VudCA9IHJlbmRlcmVyLT5zdHlsZShsaW5lSW5mby5pc0ZpcnN0TGluZSgpKS0+Zm9u
dCgpLmZvbnRNZXRyaWNzKCkuZGVzY2VudCgpICsgYmFzZWxpbmVTaGlmdDsKKyAgICAgICAgaW50
IHJvb3REZXNjZW50ID0gaW5jbHVkZVJvb3RMaW5lID8gbGluZUJveC0+c3R5bGVGb3JGaXJzdExp
bmUobGluZUluZm8uaXNGaXJzdExpbmUoKSktPmZvbnQoKS5mb250TWV0cmljcygpLmRlc2NlbnQo
KSA6IDA7CisgICAgICAgIGludCByb290QXNjZW50ID0gaW5jbHVkZVJvb3RMaW5lID8gbGluZUJv
eC0+c3R5bGVGb3JGaXJzdExpbmUobGluZUluZm8uaXNGaXJzdExpbmUoKSktPmZvbnQoKS5mb250
TWV0cmljcygpLmFzY2VudCgpIDogMDsKKyAgICAgICAgaW50IGJveEFzY2VudCA9IHRvUmVuZGVy
Qm94TW9kZWxPYmplY3QocmVuZGVyZXItPnBhcmVudCgpKS0+c3R5bGVGb3JGaXJzdExpbmUobGlu
ZUluZm8uaXNGaXJzdExpbmUoKSktPmZvbnQoKS5mb250TWV0cmljcygpLmFzY2VudCgpIC0gYmFz
ZWxpbmVTaGlmdDsKKyAgICAgICAgaW50IGJveERlc2NlbnQgPSB0b1JlbmRlckJveE1vZGVsT2Jq
ZWN0KHJlbmRlcmVyLT5wYXJlbnQoKSktPnN0eWxlRm9yRmlyc3RMaW5lKGxpbmVJbmZvLmlzRmly
c3RMaW5lKCkpLT5mb250KCkuZm9udE1ldHJpY3MoKS5kZXNjZW50KCkgKyBiYXNlbGluZVNoaWZ0
OwogICAgICAgICBpZiAoYm94QXNjZW50ID4gcm9vdERlc2NlbnQgfHwgIGJveERlc2NlbnQgPiBy
b290QXNjZW50KQogICAgICAgICAgICAgZ2x5cGhPdmVyZmxvdy5jb21wdXRlQm91bmRzID0gdHJ1
ZTsgCiAgICAgfQogICAgIAogICAgIExheW91dFVuaXQgaHlwaGVuV2lkdGggPSAwOwogICAgIGlm
ICh0b0lubGluZVRleHRCb3gocnVuLT5tX2JveCktPmhhc0h5cGhlbigpKSB7Ci0gICAgICAgIGNv
bnN0IEZvbnQmIGZvbnQgPSByZW5kZXJlci0+c3R5bGUobGluZUluZm8uaXNGaXJzdExpbmUoKSkt
PmZvbnQoKTsKKyAgICAgICAgY29uc3QgRm9udCYgZm9udCA9IHRvUmVuZGVyQm94TW9kZWxPYmpl
Y3QocmVuZGVyZXItPnBhcmVudCgpKS0+c3R5bGVGb3JGaXJzdExpbmUobGluZUluZm8uaXNGaXJz
dExpbmUoKSktPmZvbnQoKTsKICAgICAgICAgaHlwaGVuV2lkdGggPSBtZWFzdXJlSHlwaGVuV2lk
dGgocmVuZGVyZXIsIGZvbnQpOwogICAgIH0KICAgICBydW4tPm1fYm94LT5zZXRMb2dpY2FsV2lk
dGgocmVuZGVyZXItPndpZHRoKHJ1bi0+bV9zdGFydCwgcnVuLT5tX3N0b3AgLSBydW4tPm1fc3Rh
cnQsIHhQb3MsIGxpbmVJbmZvLmlzRmlyc3RMaW5lKCksICZmYWxsYmFja0ZvbnRzLCAmZ2x5cGhP
dmVyZmxvdykgKyBoeXBoZW5XaWR0aCk7CkBAIC03ODUsNyArNzg1LDcgQEAgdm9pZCBSZW5kZXJC
bG9jazo6Y29tcHV0ZUlubGluZURpcmVjdGlvblBvc2l0aW9uc0ZvckxpbmUoUm9vdElubGluZUJv
eCogbGluZUJveCwKIAogICAgICAgICAgICAgaWYgKGludCBsZW5ndGggPSBydC0+dGV4dExlbmd0
aCgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFyLT5tX3N0YXJ0ICYmIG5lZWRzV29yZFNwYWNp
bmcgJiYgaXNTcGFjZU9yTmV3bGluZShydC0+Y2hhcmFjdGVycygpW3ItPm1fc3RhcnRdKSkKLSAg
ICAgICAgICAgICAgICAgICAgdG90YWxMb2dpY2FsV2lkdGggKz0gcnQtPnN0eWxlKGxpbmVJbmZv
LmlzRmlyc3RMaW5lKCkpLT5mb250KCkud29yZFNwYWNpbmcoKTsKKyAgICAgICAgICAgICAgICAg
ICAgdG90YWxMb2dpY2FsV2lkdGggKz0gdG9SZW5kZXJCb3hNb2RlbE9iamVjdChydC0+cGFyZW50
KCkpLT5zdHlsZUZvckZpcnN0TGluZShsaW5lSW5mby5pc0ZpcnN0TGluZSgpKS0+Zm9udCgpLndv
cmRTcGFjaW5nKCk7CiAgICAgICAgICAgICAgICAgbmVlZHNXb3JkU3BhY2luZyA9ICFpc1NwYWNl
T3JOZXdsaW5lKHJ0LT5jaGFyYWN0ZXJzKClbci0+bV9zdG9wIC0gMV0pICYmIHItPm1fc3RvcCA9
PSBsZW5ndGg7CiAgICAgICAgICAgICB9CiAKQEAgLTE4MzksNyArMTgzOSw3IEBAIHN0YXRpYyBi
b29sIHJlcXVpcmVzTGluZUJveEZvckNvbnRlbnQoUmVuZGVySW5saW5lKiBmbG93LCBjb25zdCBM
aW5lSW5mbyYgbGluZUluCiB7CiAgICAgUmVuZGVyT2JqZWN0KiBwYXJlbnQgPSBmbG93LT5wYXJl
bnQoKTsKICAgICBpZiAoZmxvdy0+ZG9jdW1lbnQoKS0+aW5Ob1F1aXJrc01vZGUoKSAKLSAgICAg
ICAgJiYgKGZsb3ctPnN0eWxlKGxpbmVJbmZvLmlzRmlyc3RMaW5lKCkpLT5saW5lSGVpZ2h0KCkg
IT0gcGFyZW50LT5zdHlsZShsaW5lSW5mby5pc0ZpcnN0TGluZSgpKS0+bGluZUhlaWdodCgpCisg
ICAgICAgICYmIChmbG93LT5zdHlsZUZvckZpcnN0TGluZShsaW5lSW5mby5pc0ZpcnN0TGluZSgp
KS0+bGluZUhlaWdodCgpICE9IHRvUmVuZGVyQm94TW9kZWxPYmplY3QocGFyZW50KS0+c3R5bGVG
b3JGaXJzdExpbmUobGluZUluZm8uaXNGaXJzdExpbmUoKSktPmxpbmVIZWlnaHQoKQogICAgICAg
ICB8fCBmbG93LT5zdHlsZSgpLT52ZXJ0aWNhbEFsaWduKCkgIT0gcGFyZW50LT5zdHlsZSgpLT52
ZXJ0aWNhbEFsaWduKCkKICAgICAgICAgfHwgIXBhcmVudC0+c3R5bGUoKS0+Zm9udCgpLmZvbnRN
ZXRyaWNzKCkuaGFzSWRlbnRpY2FsQXNjZW50RGVzY2VudEFuZExpbmVHYXAoZmxvdy0+c3R5bGUo
KS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkpKSkKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yMzE1
LDcgKzIzMTUsNyBAQCBJbmxpbmVJdGVyYXRvciBSZW5kZXJCbG9jazo6TGluZUJyZWFrZXI6Om5l
eHRMaW5lQnJlYWsoSW5saW5lQmlkaVJlc29sdmVyJiByZXNvbAogICAgICAgICAgICAgYm9vbCBp
c1NWR1RleHQgPSB0LT5pc1NWR0lubGluZVRleHQoKTsKICNlbmRpZgogCi0gICAgICAgICAgICBS
ZW5kZXJTdHlsZSogc3R5bGUgPSB0LT5zdHlsZShsaW5lSW5mby5pc0ZpcnN0TGluZSgpKTsKKyAg
ICAgICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHRvUmVuZGVyQm94TW9kZWxPYmplY3QodC0+
cGFyZW50KCkpLT5zdHlsZUZvckZpcnN0TGluZShsaW5lSW5mby5pc0ZpcnN0TGluZSgpKTsKICAg
ICAgICAgICAgIGlmIChzdHlsZS0+aGFzVGV4dENvbWJpbmUoKSAmJiBjdXJyZW50Lm1fb2JqLT5p
c0NvbWJpbmVUZXh0KCkgJiYgIXRvUmVuZGVyQ29tYmluZVRleHQoY3VycmVudC5tX29iaiktPmlz
Q29tYmluZWQoKSkKICAgICAgICAgICAgICAgICB0b1JlbmRlckNvbWJpbmVUZXh0KGN1cnJlbnQu
bV9vYmopLT5jb21iaW5lVGV4dCgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAppbmRleCA2NDZmZmUyLi42ZTBkMmE2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKQEAg
LTMwMzAsNCArMzAzMCwxMDcgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6bW92ZUNoaWxk
cmVuVG8oUmVuZGVyQm94TW9kZWxPYmplY3QqIHRvQm94TW9kZWxPYmplY3QKICAgICB9CiB9CiAK
K1JlbmRlckJsb2NrKiBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Zmlyc3RMaW5lQmxvY2soKSBjb25z
dAoreworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgQ29sb3IgZGVjb3JhdGlvbkNvbG9yKFJl
bmRlclN0eWxlKiBzdHlsZSkKK3sKKyAgICBDb2xvciByZXN1bHQ7CisgICAgaWYgKHN0eWxlLT50
ZXh0U3Ryb2tlV2lkdGgoKSA+IDApIHsKKyAgICAgICAgLy8gUHJlZmVyIHN0cm9rZSBjb2xvciBp
ZiBwb3NzaWJsZSBidXQgbm90IGlmIGl0J3MgZnVsbHkgdHJhbnNwYXJlbnQuCisgICAgICAgIHJl
c3VsdCA9IHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlXZWJraXRUZXh0
U3Ryb2tlQ29sb3IpOworICAgICAgICBpZiAocmVzdWx0LmFscGhhKCkpCisgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHJlc3VsdCA9IHN0eWxlLT52aXNpdGVkRGVwZW5k
ZW50Q29sb3IoQ1NTUHJvcGVydHlXZWJraXRUZXh0RmlsbENvbG9yKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCit2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpnZXRUZXh0RGVjb3JhdGlvbkNv
bG9ycyhpbnQgZGVjb3JhdGlvbnMsIENvbG9yJiB1bmRlcmxpbmUsIENvbG9yJiBvdmVybGluZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2xvciYgbGluZXRo
cm91Z2gsIGJvb2wgcXVpcmtzTW9kZSwgYm9vbCBmaXJzdGxpbmVTdHlsZSkKK3sKKyAgICBSZW5k
ZXJPYmplY3QqIGN1cnIgPSB0aGlzOworICAgIFJlbmRlclN0eWxlKiBzdHlsZVRvVXNlID0gMDsK
KyAgICBkbyB7CisgICAgICAgIHN0eWxlVG9Vc2UgPSB0b1JlbmRlckJveE1vZGVsT2JqZWN0KGN1
cnIpLT5zdHlsZUZvckZpcnN0TGluZShmaXJzdGxpbmVTdHlsZSk7CisgICAgICAgIGludCBjdXJy
RGVjcyA9IHN0eWxlVG9Vc2UtPnRleHREZWNvcmF0aW9uKCk7CisgICAgICAgIGlmIChjdXJyRGVj
cykgeworICAgICAgICAgICAgaWYgKGN1cnJEZWNzICYgVU5ERVJMSU5FKSB7CisgICAgICAgICAg
ICAgICAgZGVjb3JhdGlvbnMgJj0gflVOREVSTElORTsKKyAgICAgICAgICAgICAgICB1bmRlcmxp
bmUgPSBkZWNvcmF0aW9uQ29sb3Ioc3R5bGVUb1VzZSk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBpZiAoY3VyckRlY3MgJiBPVkVSTElORSkgeworICAgICAgICAgICAgICAgIGRlY29yYXRp
b25zICY9IH5PVkVSTElORTsKKyAgICAgICAgICAgICAgICBvdmVybGluZSA9IGRlY29yYXRpb25D
b2xvcihzdHlsZVRvVXNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjdXJyRGVj
cyAmIExJTkVfVEhST1VHSCkgeworICAgICAgICAgICAgICAgIGRlY29yYXRpb25zICY9IH5MSU5F
X1RIUk9VR0g7CisgICAgICAgICAgICAgICAgbGluZXRocm91Z2ggPSBkZWNvcmF0aW9uQ29sb3Io
c3R5bGVUb1VzZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGN1cnIt
PmlzRmxvYXRpbmcoKSB8fCBjdXJyLT5pc1Bvc2l0aW9uZWQoKSB8fCBjdXJyLT5pc1J1YnlUZXh0
KCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGN1cnIgPSBjdXJyLT5wYXJlbnQoKTsK
KyAgICAgICAgaWYgKGN1cnIgJiYgY3Vyci0+aXNBbm9ueW1vdXNCbG9jaygpICYmIHRvUmVuZGVy
QmxvY2soY3VyciktPmNvbnRpbnVhdGlvbigpKQorICAgICAgICAgICAgY3VyciA9IHRvUmVuZGVy
QmxvY2soY3VyciktPmNvbnRpbnVhdGlvbigpOworICAgIH0gd2hpbGUgKGN1cnIgJiYgZGVjb3Jh
dGlvbnMgJiYgKCFxdWlya3NNb2RlIHx8ICFjdXJyLT5ub2RlKCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8fCAoIWN1cnItPm5vZGUoKS0+aGFzVGFnTmFtZShhVGFnKSAm
JiAhY3Vyci0+bm9kZSgpLT5oYXNUYWdOYW1lKGZvbnRUYWcpKSkpOworCisgICAgLy8gSWYgd2Ug
YmFpbGVkIG91dCwgdXNlIHRoZSBlbGVtZW50IHdlIGJhaWxlZCBvdXQgYXQgKHR5cGljYWxseSBh
IDxmb250PiBvciA8YT4gZWxlbWVudCkuCisgICAgaWYgKGRlY29yYXRpb25zICYmIGN1cnIpIHsK
KyAgICAgICAgc3R5bGVUb1VzZSA9IHRvUmVuZGVyQm94TW9kZWxPYmplY3QoY3VyciktPnN0eWxl
Rm9yRmlyc3RMaW5lKGZpcnN0bGluZVN0eWxlKTsKKyAgICAgICAgaWYgKGRlY29yYXRpb25zICYg
VU5ERVJMSU5FKQorICAgICAgICAgICAgdW5kZXJsaW5lID0gZGVjb3JhdGlvbkNvbG9yKHN0eWxl
VG9Vc2UpOworICAgICAgICBpZiAoZGVjb3JhdGlvbnMgJiBPVkVSTElORSkKKyAgICAgICAgICAg
IG92ZXJsaW5lID0gZGVjb3JhdGlvbkNvbG9yKHN0eWxlVG9Vc2UpOworICAgICAgICBpZiAoZGVj
b3JhdGlvbnMgJiBMSU5FX1RIUk9VR0gpCisgICAgICAgICAgICBsaW5ldGhyb3VnaCA9IGRlY29y
YXRpb25Db2xvcihzdHlsZVRvVXNlKTsKKyAgICB9Cit9CisKK1Bhc3NSZWZQdHI8UmVuZGVyU3R5
bGU+IFJlbmRlckJveE1vZGVsT2JqZWN0Ojp1bmNhY2hlZEZpcnN0TGluZVN0eWxlKFJlbmRlclN0
eWxlKiBzdHlsZSkgY29uc3QKK3sKKyAgICBpZiAoIWRvY3VtZW50KCktPnVzZXNGaXJzdExpbmVS
dWxlcygpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIEFTU0VSVCghaXNUZXh0KCkpOworCisg
ICAgUmVmUHRyPFJlbmRlclN0eWxlPiByZXN1bHQ7CisKKyAgICBpZiAoaXNCbG9ja0Zsb3coKSkg
eworICAgICAgICBpZiAoUmVuZGVyQmxvY2sqIGZpcnN0TGluZUJsb2NrID0gdGhpcy0+Zmlyc3RM
aW5lQmxvY2soKSkKKyAgICAgICAgICAgIHJlc3VsdCA9IGZpcnN0TGluZUJsb2NrLT5nZXRVbmNh
Y2hlZFBzZXVkb1N0eWxlKEZJUlNUX0xJTkUsIHN0eWxlLCBmaXJzdExpbmVCbG9jayA9PSB0aGlz
ID8gc3R5bGUgOiAwKTsKKyAgICB9IGVsc2UgaWYgKCFpc0Fub255bW91cygpICYmIGlzUmVuZGVy
SW5saW5lKCkpIHsKKyAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gdG9SZW5kZXJC
b3hNb2RlbE9iamVjdChwYXJlbnQoKSktPmZpcnN0TGluZVN0eWxlKCk7CisgICAgICAgIGlmIChw
YXJlbnRTdHlsZSAhPSBwYXJlbnQoKS0+c3R5bGUoKSkKKyAgICAgICAgICAgIHJlc3VsdCA9IGdl
dFVuY2FjaGVkUHNldWRvU3R5bGUoRklSU1RfTElORV9JTkhFUklURUQsIHBhcmVudFN0eWxlLCBz
dHlsZSk7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7Cit9CisKK1JlbmRl
clN0eWxlKiBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Zmlyc3RMaW5lU3R5bGVTbG93Q2FzZSgpIGNv
bnN0Cit7CisgICAgQVNTRVJUKGRvY3VtZW50KCktPnVzZXNGaXJzdExpbmVSdWxlcygpKTsKKwor
ICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IFJlbmRlck9iamVjdDo6c3R5bGUoKTsKKyAgICBjb25z
dCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gaXNUZXh0KCkgPyBwYXJlbnQoKSA6IHRoaXM7Cisg
ICAgaWYgKHJlbmRlcmVyLT5pc0Jsb2NrRmxvdygpKSB7CisgICAgICAgIGlmIChSZW5kZXJCbG9j
ayogZmlyc3RMaW5lQmxvY2sgPSB0b1JlbmRlckJveE1vZGVsT2JqZWN0KHJlbmRlcmVyKS0+Zmly
c3RMaW5lQmxvY2soKSkKKyAgICAgICAgICAgIHN0eWxlID0gZmlyc3RMaW5lQmxvY2stPmdldENh
Y2hlZFBzZXVkb1N0eWxlKEZJUlNUX0xJTkUsIHN0eWxlKTsKKyAgICB9IGVsc2UgaWYgKCFyZW5k
ZXJlci0+aXNBbm9ueW1vdXMoKSAmJiByZW5kZXJlci0+aXNSZW5kZXJJbmxpbmUoKSkgeworICAg
ICAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSB0b1JlbmRlckJveE1vZGVsT2JqZWN0KHJl
bmRlcmVyLT5wYXJlbnQoKSktPmZpcnN0TGluZVN0eWxlKCk7CisgICAgICAgIGlmIChwYXJlbnRT
dHlsZSAhPSByZW5kZXJlci0+cGFyZW50KCktPnN0eWxlKCkpIHsKKyAgICAgICAgICAgIC8vIEEg
Zmlyc3QtbGluZSBzdHlsZSBpcyBpbiBlZmZlY3QuIENhY2hlIGEgZmlyc3QtbGluZSBzdHlsZSBm
b3Igb3Vyc2VsdmVzLgorICAgICAgICAgICAgcmVuZGVyZXItPnN0eWxlKCktPnNldEhhc1BzZXVk
b1N0eWxlKEZJUlNUX0xJTkVfSU5IRVJJVEVEKTsKKyAgICAgICAgICAgIHN0eWxlID0gcmVuZGVy
ZXItPmdldENhY2hlZFBzZXVkb1N0eWxlKEZJUlNUX0xJTkVfSU5IRVJJVEVELCBwYXJlbnRTdHls
ZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gc3R5bGU7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCb3hNb2RlbE9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1v
ZGVsT2JqZWN0LmgKaW5kZXggOWEwZWVhMi4uYjU3Yzg4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmgKQEAgLTE3Nyw2ICsxNzcsMTkgQEAg
cHVibGljOgogICAgIHZvaWQgc3VzcGVuZEFuaW1hdGlvbnMoZG91YmxlIHRpbWUgPSAwKTsKICNl
bmRpZgogCisgICAgLy8gT2J0YWlucyB0aGUgbmVhcmVzdCBlbmNsb3NpbmcgYmxvY2sgKGluY2x1
ZGluZyB0aGlzIGJsb2NrKSB0aGF0IGNvbnRyaWJ1dGVzIGEgZmlyc3QtbGluZSBzdHlsZSB0byBv
dXIgaW5saW5lCisgICAgLy8gY2hpbGRyZW4uCisgICAgdmlydHVhbCBSZW5kZXJCbG9jayogZmly
c3RMaW5lQmxvY2soKSBjb25zdDsKKworICAgIHZvaWQgZ2V0VGV4dERlY29yYXRpb25Db2xvcnMo
aW50IGRlY29yYXRpb25zLCBDb2xvciYgdW5kZXJsaW5lLCBDb2xvciYgb3ZlcmxpbmUsIENvbG9y
JiBsaW5ldGhyb3VnaCwgYm9vbCBxdWlya3NNb2RlID0gZmFsc2UsIGJvb2wgZmlyc3RsaW5lU3R5
bGUgPSBmYWxzZSk7CisKKyAgICAvLyBVc2VkIG9ubHkgYnkgRWxlbWVudDo6cHNldWRvU3R5bGVD
YWNoZUlzSW52YWxpZCB0byBnZXQgYSBmaXJzdCBsaW5lIHN0eWxlIGJhc2VkIG9mZiBvZiBhCisg
ICAgLy8gZ2l2ZW4gbmV3IHN0eWxlLCB3aXRob3V0IGFjY2Vzc2luZyB0aGUgY2FjaGUuCisgICAg
UGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gdW5jYWNoZWRGaXJzdExpbmVTdHlsZShSZW5kZXJTdHls
ZSopIGNvbnN0OworCisgICAgUmVuZGVyU3R5bGUqIGZpcnN0TGluZVN0eWxlKCkgY29uc3QgeyBy
ZXR1cm4gZG9jdW1lbnQoKS0+dXNlc0ZpcnN0TGluZVJ1bGVzKCkgPyBmaXJzdExpbmVTdHlsZVNs
b3dDYXNlKCkgOiBSZW5kZXJPYmplY3Q6OnN0eWxlKCk7IH0KKyAgICBSZW5kZXJTdHlsZSogc3R5
bGVGb3JGaXJzdExpbmUoYm9vbCBpc0ZpcnN0TGluZVN0eWxlKSBjb25zdCB7IHJldHVybiBpc0Zp
cnN0TGluZVN0eWxlID8gZmlyc3RMaW5lU3R5bGUoKSA6IFJlbmRlck9iamVjdDo6c3R5bGUoKTsg
fQorCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHdpbGxCZURlc3Ryb3llZCgpOwogCkBA
IC0yNzEsNiArMjg0LDggQEAgcHVibGljOgogcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgaXNC
b3hNb2RlbE9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAorICAgIFJlbmRlclN0eWxl
KiBmaXJzdExpbmVTdHlsZVNsb3dDYXNlKCkgY29uc3Q7CisKICAgICBJbnRTaXplIGNhbGN1bGF0
ZUZpbGxUaWxlU2l6ZShjb25zdCBGaWxsTGF5ZXIqLCBjb25zdCBJbnRTaXplJiBzY2FsZWRQb3Np
dGlvbmluZ0FyZWFTaXplKSBjb25zdDsKIAogICAgIGVudW0gU2NhbGVCeUVmZmVjdGl2ZVpvb21P
ck5vdCB7IFNjYWxlQnlFZmZlY3RpdmVab29tLCBEb05vdFNjYWxlQnlFZmZlY3RpdmVab29tIH07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGVwcmVjYXRlZEZs
ZXhpYmxlQm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEZXByZWNhdGVk
RmxleGlibGVCb3guY3BwCmluZGV4IGE0YzRiODkuLjYwMDE2NmYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3guY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3guY3Bw
CkBAIC05NDcsNyArOTQ3LDcgQEAgdm9pZCBSZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3g6OmFw
cGx5TGluZUNsYW1wKEZsZXhCb3hJdGVyYXRvciYgaXRlcmF0b3IsIGJvb2wKICAgICAgICAgY29u
c3QgVUNoYXIgZWxsaXBzaXNBbmRTcGFjZVsyXSA9IHsgaG9yaXpvbnRhbEVsbGlwc2lzLCAnICcg
fTsKICAgICAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIGVsbGlwc2lzQW5k
U3BhY2VTdHIsIChlbGxpcHNpc0FuZFNwYWNlLCAyKSk7CiAgICAgICAgIERFRklORV9TVEFUSUNf
TE9DQUwoQXRvbWljU3RyaW5nLCBlbGxpcHNpc1N0ciwgKCZob3Jpem9udGFsRWxsaXBzaXMsIDEp
KTsKLSAgICAgICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlKG51bVZpc2libGVMaW5lcyA9PSAx
KS0+Zm9udCgpOworICAgICAgICBjb25zdCBGb250JiBmb250ID0gc3R5bGVGb3JGaXJzdExpbmUo
bnVtVmlzaWJsZUxpbmVzID09IDEpLT5mb250KCk7CiAKICAgICAgICAgLy8gR2V0IGVsbGlwc2lz
IHdpZHRoLCBhbmQgaWYgdGhlIGxhc3QgY2hpbGQgaXMgYW4gYW5jaG9yLCBpdCB3aWxsIGdvIGFm
dGVyIHRoZSBlbGxpcHNpcywgc28gYWRkIGluIGEgc3BhY2UgYW5kIHRoZSBhbmNob3Igd2lkdGgg
dG9vCiAgICAgICAgIExheW91dFVuaXQgdG90YWxXaWR0aDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlcklubGluZS5jcHAKaW5kZXggYjQ1YmRjMy4uNzhmYTM0NyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAKQEAgLTIxOSw4ICsyMTksOCBAQCB2b2lk
IFJlbmRlcklubGluZTo6dXBkYXRlQWx3YXlzQ3JlYXRlTGluZUJveGVzKGJvb2wgZnVsbExheW91
dCkKIAogICAgIGlmICghYWx3YXlzQ3JlYXRlTGluZUJveGVzICYmIGNoZWNrRm9udHMgJiYgZG9j
dW1lbnQoKS0+dXNlc0ZpcnN0TGluZVJ1bGVzKCkpIHsKICAgICAgICAgLy8gSGF2ZSB0byBjaGVj
ayB0aGUgZmlyc3QgbGluZSBzdHlsZSBhcyB3ZWxsLgotICAgICAgICBwYXJlbnRTdHlsZSA9IHBh
cmVudCgpLT5zdHlsZSh0cnVlKTsKLSAgICAgICAgUmVuZGVyU3R5bGUqIGNoaWxkU3R5bGUgPSBz
dHlsZSh0cnVlKTsKKyAgICAgICAgcGFyZW50U3R5bGUgPSB0b1JlbmRlckJveE1vZGVsT2JqZWN0
KHBhcmVudCgpKS0+Zmlyc3RMaW5lU3R5bGUoKTsKKyAgICAgICAgUmVuZGVyU3R5bGUqIGNoaWxk
U3R5bGUgPSBmaXJzdExpbmVTdHlsZSgpOwogICAgICAgICBhbHdheXNDcmVhdGVMaW5lQm94ZXMg
PSAhcGFyZW50U3R5bGUtPmZvbnQoKS5mb250TWV0cmljcygpLmhhc0lkZW50aWNhbEFzY2VudERl
c2NlbnRBbmRMaW5lR2FwKGNoaWxkU3R5bGUtPmZvbnQoKS5mb250TWV0cmljcygpKQogICAgICAg
ICB8fCBjaGlsZFN0eWxlLT52ZXJ0aWNhbEFsaWduKCkgIT0gQkFTRUxJTkUKICAgICAgICAgfHwg
cGFyZW50U3R5bGUtPmxpbmVIZWlnaHQoKSAhPSBjaGlsZFN0eWxlLT5saW5lSGVpZ2h0KCk7CkBA
IC01NDAsOCArNTQwLDggQEAgdm9pZCBSZW5kZXJJbmxpbmU6OmdlbmVyYXRlQ3VsbGVkTGluZUJv
eFJlY3RzKEdlbmVyYXRvckNvbnRleHQgeWllbGQsIGNvbnN0IFJlbmQKICAgICAgICAgICAgIFJl
bmRlckJveCogY3VyckJveCA9IHRvUmVuZGVyQm94KGN1cnIpOwogICAgICAgICAgICAgaWYgKGN1
cnJCb3gtPmlubGluZUJveFdyYXBwZXIoKSkgewogICAgICAgICAgICAgICAgIFJvb3RJbmxpbmVC
b3gqIHJvb3RCb3ggPSBjdXJyQm94LT5pbmxpbmVCb3hXcmFwcGVyKCktPnJvb3QoKTsKLSAgICAg
ICAgICAgICAgICBpbnQgbG9naWNhbFRvcCA9IHJvb3RCb3gtPmxvZ2ljYWxUb3AoKSArIChyb290
Qm94LT5yZW5kZXJlcigpLT5zdHlsZShyb290Qm94LT5pc0ZpcnN0TGluZVN0eWxlKCkpLT5mb250
KCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSAtIGNvbnRhaW5lci0+c3R5bGUocm9vdEJveC0+aXNG
aXJzdExpbmVTdHlsZSgpKS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkpOwotICAgICAg
ICAgICAgICAgIGludCBsb2dpY2FsSGVpZ2h0ID0gY29udGFpbmVyLT5zdHlsZShyb290Qm94LT5p
c0ZpcnN0TGluZVN0eWxlKCkpLT5mb250KCkuZm9udE1ldHJpY3MoKS5oZWlnaHQoKTsKKyAgICAg
ICAgICAgICAgICBpbnQgbG9naWNhbFRvcCA9IHJvb3RCb3gtPmxvZ2ljYWxUb3AoKSArIChyb290
Qm94LT5zdHlsZUZvckZpcnN0TGluZShyb290Qm94LT5pc0ZpcnN0TGluZVN0eWxlKCkpLT5mb250
KCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSAtIGNvbnRhaW5lci0+c3R5bGVGb3JGaXJzdExpbmUo
cm9vdEJveC0+aXNGaXJzdExpbmVTdHlsZSgpKS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkuYXNjZW50
KCkpOworICAgICAgICAgICAgICAgIGludCBsb2dpY2FsSGVpZ2h0ID0gY29udGFpbmVyLT5zdHls
ZUZvckZpcnN0TGluZShyb290Qm94LT5pc0ZpcnN0TGluZVN0eWxlKCkpLT5mb250KCkuZm9udE1l
dHJpY3MoKS5oZWlnaHQoKTsKICAgICAgICAgICAgICAgICBpZiAoaXNIb3Jpem9udGFsKQogICAg
ICAgICAgICAgICAgICAgICB5aWVsZChGbG9hdFJlY3QoY3VyckJveC0+aW5saW5lQm94V3JhcHBl
cigpLT54KCkgLSBjdXJyQm94LT5tYXJnaW5MZWZ0KCksIGxvZ2ljYWxUb3AsIGN1cnJCb3gtPndp
ZHRoKCkgKyBjdXJyQm94LT5tYXJnaW5XaWR0aCgpLCBsb2dpY2FsSGVpZ2h0KSk7CiAgICAgICAg
ICAgICAgICAgZWxzZQpAQCAtNTU1LDggKzU1NSw4IEBAIHZvaWQgUmVuZGVySW5saW5lOjpnZW5l
cmF0ZUN1bGxlZExpbmVCb3hSZWN0cyhHZW5lcmF0b3JDb250ZXh0IHlpZWxkLCBjb25zdCBSZW5k
CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBmb3IgKElubGluZUZsb3dCb3gq
IGNoaWxkTGluZSA9IGN1cnJJbmxpbmUtPmZpcnN0TGluZUJveCgpOyBjaGlsZExpbmU7IGNoaWxk
TGluZSA9IGNoaWxkTGluZS0+bmV4dExpbmVCb3goKSkgewogICAgICAgICAgICAgICAgICAgICBS
b290SW5saW5lQm94KiByb290Qm94ID0gY2hpbGRMaW5lLT5yb290KCk7Ci0gICAgICAgICAgICAg
ICAgICAgIGludCBsb2dpY2FsVG9wID0gcm9vdEJveC0+bG9naWNhbFRvcCgpICsgKHJvb3RCb3gt
PnJlbmRlcmVyKCktPnN0eWxlKHJvb3RCb3gtPmlzRmlyc3RMaW5lU3R5bGUoKSktPmZvbnQoKS5m
b250TWV0cmljcygpLmFzY2VudCgpIC0gY29udGFpbmVyLT5zdHlsZShyb290Qm94LT5pc0ZpcnN0
TGluZVN0eWxlKCkpLT5mb250KCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIGludCBsb2dpY2FsSGVpZ2h0ID0gY29udGFpbmVyLT5zdHlsZShyb290Qm94LT5p
c0ZpcnN0TGluZVN0eWxlKCkpLT5mb250KCkuZm9udE1ldHJpY3MoKS5oZWlnaHQoKTsKKyAgICAg
ICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxUb3AgPSByb290Qm94LT5sb2dpY2FsVG9wKCkgKyAo
cm9vdEJveC0+c3R5bGVGb3JGaXJzdExpbmUocm9vdEJveC0+aXNGaXJzdExpbmVTdHlsZSgpKS0+
Zm9udCgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkgLSBjb250YWluZXItPnN0eWxlRm9yRmlyc3RM
aW5lKHJvb3RCb3gtPmlzRmlyc3RMaW5lU3R5bGUoKSktPmZvbnQoKS5mb250TWV0cmljcygpLmFz
Y2VudCgpKTsKKyAgICAgICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxIZWlnaHQgPSBjb250YWlu
ZXItPnN0eWxlRm9yRmlyc3RMaW5lKHJvb3RCb3gtPmlzRmlyc3RMaW5lU3R5bGUoKSktPmZvbnQo
KS5mb250TWV0cmljcygpLmhlaWdodCgpOwogICAgICAgICAgICAgICAgICAgICBpZiAoaXNIb3Jp
em9udGFsKQogICAgICAgICAgICAgICAgICAgICAgICAgeWllbGQoRmxvYXRSZWN0KGNoaWxkTGlu
ZS0+eCgpIC0gY2hpbGRMaW5lLT5tYXJnaW5Mb2dpY2FsTGVmdCgpLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxvZ2ljYWxUb3AsCkBAIC01NzMsOCArNTczLDggQEAgdm9pZCBSZW5kZXJJ
bmxpbmU6OmdlbmVyYXRlQ3VsbGVkTGluZUJveFJlY3RzKEdlbmVyYXRvckNvbnRleHQgeWllbGQs
IGNvbnN0IFJlbmQKICAgICAgICAgICAgIFJlbmRlclRleHQqIGN1cnJUZXh0ID0gdG9SZW5kZXJU
ZXh0KGN1cnIpOwogICAgICAgICAgICAgZm9yIChJbmxpbmVUZXh0Qm94KiBjaGlsZFRleHQgPSBj
dXJyVGV4dC0+Zmlyc3RUZXh0Qm94KCk7IGNoaWxkVGV4dDsgY2hpbGRUZXh0ID0gY2hpbGRUZXh0
LT5uZXh0VGV4dEJveCgpKSB7CiAgICAgICAgICAgICAgICAgUm9vdElubGluZUJveCogcm9vdEJv
eCA9IGNoaWxkVGV4dC0+cm9vdCgpOwotICAgICAgICAgICAgICAgIGludCBsb2dpY2FsVG9wID0g
cm9vdEJveC0+bG9naWNhbFRvcCgpICsgKHJvb3RCb3gtPnJlbmRlcmVyKCktPnN0eWxlKHJvb3RC
b3gtPmlzRmlyc3RMaW5lU3R5bGUoKSktPmZvbnQoKS5mb250TWV0cmljcygpLmFzY2VudCgpIC0g
Y29udGFpbmVyLT5zdHlsZShyb290Qm94LT5pc0ZpcnN0TGluZVN0eWxlKCkpLT5mb250KCkuZm9u
dE1ldHJpY3MoKS5hc2NlbnQoKSk7Ci0gICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxIZWlnaHQg
PSBjb250YWluZXItPnN0eWxlKHJvb3RCb3gtPmlzRmlyc3RMaW5lU3R5bGUoKSktPmZvbnQoKS5m
b250TWV0cmljcygpLmhlaWdodCgpOworICAgICAgICAgICAgICAgIGludCBsb2dpY2FsVG9wID0g
cm9vdEJveC0+bG9naWNhbFRvcCgpICsgKHJvb3RCb3gtPnN0eWxlRm9yRmlyc3RMaW5lKHJvb3RC
b3gtPmlzRmlyc3RMaW5lU3R5bGUoKSktPmZvbnQoKS5mb250TWV0cmljcygpLmFzY2VudCgpIC0g
Y29udGFpbmVyLT5zdHlsZUZvckZpcnN0TGluZShyb290Qm94LT5pc0ZpcnN0TGluZVN0eWxlKCkp
LT5mb250KCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSk7CisgICAgICAgICAgICAgICAgaW50IGxv
Z2ljYWxIZWlnaHQgPSBjb250YWluZXItPnN0eWxlRm9yRmlyc3RMaW5lKHJvb3RCb3gtPmlzRmly
c3RMaW5lU3R5bGUoKSktPmZvbnQoKS5mb250TWV0cmljcygpLmhlaWdodCgpOwogICAgICAgICAg
ICAgICAgIGlmIChpc0hvcml6b250YWwpCiAgICAgICAgICAgICAgICAgICAgIHlpZWxkKEZsb2F0
UmVjdChjaGlsZFRleHQtPngoKSwgbG9naWNhbFRvcCwgY2hpbGRUZXh0LT5sb2dpY2FsV2lkdGgo
KSwgbG9naWNhbEhlaWdodCkpOwogICAgICAgICAgICAgICAgIGVsc2UKQEAgLTEyNjIsNyArMTI2
Miw3IEBAIElubGluZUZsb3dCb3gqIFJlbmRlcklubGluZTo6Y3JlYXRlQW5kQXBwZW5kSW5saW5l
Rmxvd0JveCgpCiBMYXlvdXRVbml0IFJlbmRlcklubGluZTo6bGluZUhlaWdodChib29sIGZpcnN0
TGluZSwgTGluZURpcmVjdGlvbk1vZGUgLypkaXJlY3Rpb24qLywgTGluZVBvc2l0aW9uTW9kZSAv
KmxpbmVQb3NpdGlvbk1vZGUqLykgY29uc3QKIHsKICAgICBpZiAoZmlyc3RMaW5lICYmIGRvY3Vt
ZW50KCktPnVzZXNGaXJzdExpbmVSdWxlcygpKSB7Ci0gICAgICAgIFJlbmRlclN0eWxlKiBzID0g
c3R5bGUoZmlyc3RMaW5lKTsKKyAgICAgICAgUmVuZGVyU3R5bGUqIHMgPSBzdHlsZUZvckZpcnN0
TGluZShmaXJzdExpbmUpOwogICAgICAgICBpZiAocyAhPSBzdHlsZSgpKQogICAgICAgICAgICAg
cmV0dXJuIHMtPmNvbXB1dGVkTGluZUhlaWdodCh2aWV3KCkpOwogICAgIH0KQEAgLTEyNzIsNyAr
MTI3Miw3IEBAIExheW91dFVuaXQgUmVuZGVySW5saW5lOjpsaW5lSGVpZ2h0KGJvb2wgZmlyc3RM
aW5lLCBMaW5lRGlyZWN0aW9uTW9kZSAvKmRpcmVjdGlvCiAKIExheW91dFVuaXQgUmVuZGVySW5s
aW5lOjpiYXNlbGluZVBvc2l0aW9uKEZvbnRCYXNlbGluZSBiYXNlbGluZVR5cGUsIGJvb2wgZmly
c3RMaW5lLCBMaW5lRGlyZWN0aW9uTW9kZSBkaXJlY3Rpb24sIExpbmVQb3NpdGlvbk1vZGUgbGlu
ZVBvc2l0aW9uTW9kZSkgY29uc3QKIHsKLSAgICBjb25zdCBGb250TWV0cmljcyYgZm9udE1ldHJp
Y3MgPSBzdHlsZShmaXJzdExpbmUpLT5mb250TWV0cmljcygpOworICAgIGNvbnN0IEZvbnRNZXRy
aWNzJiBmb250TWV0cmljcyA9IHN0eWxlRm9yRmlyc3RMaW5lKGZpcnN0TGluZSktPmZvbnRNZXRy
aWNzKCk7CiAgICAgcmV0dXJuIGZvbnRNZXRyaWNzLmFzY2VudChiYXNlbGluZVR5cGUpICsgKGxp
bmVIZWlnaHQoZmlyc3RMaW5lLCBkaXJlY3Rpb24sIGxpbmVQb3NpdGlvbk1vZGUpIC0gZm9udE1l
dHJpY3MuaGVpZ2h0KCkpIC8gMjsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
T2JqZWN0LmNwcAppbmRleCAyNTg0Nzc2Li43M2E3OGJlIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyT2JqZWN0LmNwcApAQCAtNTg4LDExICs1ODgsNiBAQCBSZW5kZXJGbG93VGhy
ZWFkKiBSZW5kZXJPYmplY3Q6OmVuY2xvc2luZ1JlbmRlckZsb3dUaHJlYWQoKSBjb25zdAogICAg
IHJldHVybiAwOwogfQogCi1SZW5kZXJCbG9jayogUmVuZGVyT2JqZWN0OjpmaXJzdExpbmVCbG9j
aygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgYm9vbCBvYmpl
Y3RJc1JlbGF5b3V0Qm91bmRhcnkoY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpCiB7CiAgICAg
Ly8gRklYTUU6IEluIGZ1dHVyZSBpdCBtYXkgYmUgcG9zc2libGUgdG8gYnJvYWRlbiB0aGVzZSBj
b25kaXRpb25zIGluIG9yZGVyIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UuCkBAIC0yNTI3LDQ4ICsy
NTIyLDYgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OmxheW91dCgpCiAgICAgc2V0TmVlZHNMYXlvdXQo
ZmFsc2UpOwogfQogCi1QYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBSZW5kZXJPYmplY3Q6OnVuY2Fj
aGVkRmlyc3RMaW5lU3R5bGUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAotewotICAgIGlmICgh
ZG9jdW1lbnQoKS0+dXNlc0ZpcnN0TGluZVJ1bGVzKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0g
ICAgQVNTRVJUKCFpc1RleHQoKSk7Ci0KLSAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHJlc3VsdDsK
LQotICAgIGlmIChpc0Jsb2NrRmxvdygpKSB7Ci0gICAgICAgIGlmIChSZW5kZXJCbG9jayogZmly
c3RMaW5lQmxvY2sgPSB0aGlzLT5maXJzdExpbmVCbG9jaygpKQotICAgICAgICAgICAgcmVzdWx0
ID0gZmlyc3RMaW5lQmxvY2stPmdldFVuY2FjaGVkUHNldWRvU3R5bGUoRklSU1RfTElORSwgc3R5
bGUsIGZpcnN0TGluZUJsb2NrID09IHRoaXMgPyBzdHlsZSA6IDApOwotICAgIH0gZWxzZSBpZiAo
IWlzQW5vbnltb3VzKCkgJiYgaXNSZW5kZXJJbmxpbmUoKSkgewotICAgICAgICBSZW5kZXJTdHls
ZSogcGFyZW50U3R5bGUgPSBwYXJlbnQoKS0+Zmlyc3RMaW5lU3R5bGUoKTsKLSAgICAgICAgaWYg
KHBhcmVudFN0eWxlICE9IHBhcmVudCgpLT5zdHlsZSgpKQotICAgICAgICAgICAgcmVzdWx0ID0g
Z2V0VW5jYWNoZWRQc2V1ZG9TdHlsZShGSVJTVF9MSU5FX0lOSEVSSVRFRCwgcGFyZW50U3R5bGUs
IHN0eWxlKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKLX0KLQotUmVu
ZGVyU3R5bGUqIFJlbmRlck9iamVjdDo6Zmlyc3RMaW5lU3R5bGVTbG93Q2FzZSgpIGNvbnN0Ci17
Ci0gICAgQVNTRVJUKGRvY3VtZW50KCktPnVzZXNGaXJzdExpbmVSdWxlcygpKTsKLQotICAgIFJl
bmRlclN0eWxlKiBzdHlsZSA9IG1fc3R5bGUuZ2V0KCk7Ci0gICAgY29uc3QgUmVuZGVyT2JqZWN0
KiByZW5kZXJlciA9IGlzVGV4dCgpID8gcGFyZW50KCkgOiB0aGlzOwotICAgIGlmIChyZW5kZXJl
ci0+aXNCbG9ja0Zsb3coKSkgewotICAgICAgICBpZiAoUmVuZGVyQmxvY2sqIGZpcnN0TGluZUJs
b2NrID0gcmVuZGVyZXItPmZpcnN0TGluZUJsb2NrKCkpCi0gICAgICAgICAgICBzdHlsZSA9IGZp
cnN0TGluZUJsb2NrLT5nZXRDYWNoZWRQc2V1ZG9TdHlsZShGSVJTVF9MSU5FLCBzdHlsZSk7Ci0g
ICAgfSBlbHNlIGlmICghcmVuZGVyZXItPmlzQW5vbnltb3VzKCkgJiYgcmVuZGVyZXItPmlzUmVu
ZGVySW5saW5lKCkpIHsKLSAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gcmVuZGVy
ZXItPnBhcmVudCgpLT5maXJzdExpbmVTdHlsZSgpOwotICAgICAgICBpZiAocGFyZW50U3R5bGUg
IT0gcmVuZGVyZXItPnBhcmVudCgpLT5zdHlsZSgpKSB7Ci0gICAgICAgICAgICAvLyBBIGZpcnN0
LWxpbmUgc3R5bGUgaXMgaW4gZWZmZWN0LiBDYWNoZSBhIGZpcnN0LWxpbmUgc3R5bGUgZm9yIG91
cnNlbHZlcy4KLSAgICAgICAgICAgIHJlbmRlcmVyLT5zdHlsZSgpLT5zZXRIYXNQc2V1ZG9TdHls
ZShGSVJTVF9MSU5FX0lOSEVSSVRFRCk7Ci0gICAgICAgICAgICBzdHlsZSA9IHJlbmRlcmVyLT5n
ZXRDYWNoZWRQc2V1ZG9TdHlsZShGSVJTVF9MSU5FX0lOSEVSSVRFRCwgcGFyZW50U3R5bGUpOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHN0eWxlOwotfQotCiBSZW5kZXJTdHlsZSog
UmVuZGVyT2JqZWN0OjpnZXRDYWNoZWRQc2V1ZG9TdHlsZShQc2V1ZG9JZCBwc2V1ZG8sIFJlbmRl
clN0eWxlKiBwYXJlbnRTdHlsZSkgY29uc3QKIHsKICAgICBpZiAocHNldWRvIDwgRklSU1RfSU5U
RVJOQUxfUFNFVURPSUQgJiYgIXN0eWxlKCktPmhhc1BzZXVkb1N0eWxlKHBzZXVkbykpCkBAIC0y
NjI0LDQ4ICsyNTc3LDYgQEAgc3RhdGljIENvbG9yIGRlY29yYXRpb25Db2xvcihSZW5kZXJTdHls
ZSogc3R5bGUpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBSZW5kZXJPYmplY3Q6Omdl
dFRleHREZWNvcmF0aW9uQ29sb3JzKGludCBkZWNvcmF0aW9ucywgQ29sb3ImIHVuZGVybGluZSwg
Q29sb3ImIG92ZXJsaW5lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIENvbG9yJiBsaW5ldGhyb3VnaCwgYm9vbCBxdWlya3NNb2RlLCBib29sIGZpcnN0bGluZVN0
eWxlKQotewotICAgIFJlbmRlck9iamVjdCogY3VyciA9IHRoaXM7Ci0gICAgUmVuZGVyU3R5bGUq
IHN0eWxlVG9Vc2UgPSAwOwotICAgIGRvIHsKLSAgICAgICAgc3R5bGVUb1VzZSA9IGN1cnItPnN0
eWxlKGZpcnN0bGluZVN0eWxlKTsKLSAgICAgICAgaW50IGN1cnJEZWNzID0gc3R5bGVUb1VzZS0+
dGV4dERlY29yYXRpb24oKTsKLSAgICAgICAgaWYgKGN1cnJEZWNzKSB7Ci0gICAgICAgICAgICBp
ZiAoY3VyckRlY3MgJiBVTkRFUkxJTkUpIHsKLSAgICAgICAgICAgICAgICBkZWNvcmF0aW9ucyAm
PSB+VU5ERVJMSU5FOwotICAgICAgICAgICAgICAgIHVuZGVybGluZSA9IGRlY29yYXRpb25Db2xv
cihzdHlsZVRvVXNlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChjdXJyRGVjcyAm
IE9WRVJMSU5FKSB7Ci0gICAgICAgICAgICAgICAgZGVjb3JhdGlvbnMgJj0gfk9WRVJMSU5FOwot
ICAgICAgICAgICAgICAgIG92ZXJsaW5lID0gZGVjb3JhdGlvbkNvbG9yKHN0eWxlVG9Vc2UpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGN1cnJEZWNzICYgTElORV9USFJPVUdIKSB7
Ci0gICAgICAgICAgICAgICAgZGVjb3JhdGlvbnMgJj0gfkxJTkVfVEhST1VHSDsKLSAgICAgICAg
ICAgICAgICBsaW5ldGhyb3VnaCA9IGRlY29yYXRpb25Db2xvcihzdHlsZVRvVXNlKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoY3Vyci0+aXNSdWJ5VGV4dCgpKQotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICBjdXJyID0gY3Vyci0+cGFyZW50KCk7Ci0gICAgICAg
IGlmIChjdXJyICYmIGN1cnItPmlzQW5vbnltb3VzQmxvY2soKSAmJiB0b1JlbmRlckJsb2NrKGN1
cnIpLT5jb250aW51YXRpb24oKSkKLSAgICAgICAgICAgIGN1cnIgPSB0b1JlbmRlckJsb2NrKGN1
cnIpLT5jb250aW51YXRpb24oKTsKLSAgICB9IHdoaWxlIChjdXJyICYmIGRlY29yYXRpb25zICYm
ICghcXVpcmtzTW9kZSB8fCAhY3Vyci0+bm9kZSgpIHx8Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKCFjdXJyLT5ub2RlKCktPmhhc1RhZ05hbWUoYVRhZykgJiYgIWN1cnIt
Pm5vZGUoKS0+aGFzVGFnTmFtZShmb250VGFnKSkpKTsKLQotICAgIC8vIElmIHdlIGJhaWxlZCBv
dXQsIHVzZSB0aGUgZWxlbWVudCB3ZSBiYWlsZWQgb3V0IGF0ICh0eXBpY2FsbHkgYSA8Zm9udD4g
b3IgPGE+IGVsZW1lbnQpLgotICAgIGlmIChkZWNvcmF0aW9ucyAmJiBjdXJyKSB7Ci0gICAgICAg
IHN0eWxlVG9Vc2UgPSBjdXJyLT5zdHlsZShmaXJzdGxpbmVTdHlsZSk7Ci0gICAgICAgIGlmIChk
ZWNvcmF0aW9ucyAmIFVOREVSTElORSkKLSAgICAgICAgICAgIHVuZGVybGluZSA9IGRlY29yYXRp
b25Db2xvcihzdHlsZVRvVXNlKTsKLSAgICAgICAgaWYgKGRlY29yYXRpb25zICYgT1ZFUkxJTkUp
Ci0gICAgICAgICAgICBvdmVybGluZSA9IGRlY29yYXRpb25Db2xvcihzdHlsZVRvVXNlKTsKLSAg
ICAgICAgaWYgKGRlY29yYXRpb25zICYgTElORV9USFJPVUdIKQotICAgICAgICAgICAgbGluZXRo
cm91Z2ggPSBkZWNvcmF0aW9uQ29sb3Ioc3R5bGVUb1VzZSk7Ci0gICAgfQotfQotCiAjaWYgRU5B
QkxFKERBU0hCT0FSRF9TVVBQT1JUKQogdm9pZCBSZW5kZXJPYmplY3Q6OmFkZERhc2hib2FyZFJl
Z2lvbnMoVmVjdG9yPERhc2hib2FyZFJlZ2lvblZhbHVlPiYgcmVnaW9ucykKIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAppbmRleCBmMjFlOTE5Li5iNGNiNTE2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCkBAIC0yMzAsMTAgKzIzMCw2IEBA
IHB1YmxpYzoKICAgICB2b2lkIHNldE5lZWRzTGF5b3V0SXNGb3JiaWRkZW4oYm9vbCBmbGFnKSB7
IG1fc2V0TmVlZHNMYXlvdXRGb3JiaWRkZW4gPSBmbGFnOyB9CiAjZW5kaWYKIAotICAgIC8vIE9i
dGFpbnMgdGhlIG5lYXJlc3QgZW5jbG9zaW5nIGJsb2NrIChpbmNsdWRpbmcgdGhpcyBibG9jaykg
dGhhdCBjb250cmlidXRlcyBhIGZpcnN0LWxpbmUgc3R5bGUgdG8gb3VyIGlubGluZQotICAgIC8v
IGNoaWxkcmVuLgotICAgIHZpcnR1YWwgUmVuZGVyQmxvY2sqIGZpcnN0TGluZUJsb2NrKCkgY29u
c3Q7Ci0KICAgICAvLyBDYWxsZWQgd2hlbiBhbiBvYmplY3QgdGhhdCB3YXMgZmxvYXRpbmcgb3Ig
cG9zaXRpb25lZCBiZWNvbWVzIGEgbm9ybWFsIGZsb3cgb2JqZWN0CiAgICAgLy8gYWdhaW4uICBX
ZSBoYXZlIHRvIG1ha2Ugc3VyZSB0aGUgcmVuZGVyIHRyZWUgdXBkYXRlcyBhcyBuZWVkZWQgdG8g
YWNjb21tb2RhdGUgdGhlIG5ldwogICAgIC8vIG5vcm1hbCBmbG93IG9iamVjdC4KQEAgLTcxMiwx
MiArNzA4LDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBtYXhQcmVmZXJyZWRM
b2dpY2FsV2lkdGgoKSBjb25zdCB7IHJldHVybiAwOyB9CiAKICAgICBSZW5kZXJTdHlsZSogc3R5
bGUoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlLmdldCgpOyB9Ci0gICAgUmVuZGVyU3R5bGUqIGZp
cnN0TGluZVN0eWxlKCkgY29uc3QgeyByZXR1cm4gZG9jdW1lbnQoKS0+dXNlc0ZpcnN0TGluZVJ1
bGVzKCkgPyBmaXJzdExpbmVTdHlsZVNsb3dDYXNlKCkgOiBzdHlsZSgpOyB9Ci0gICAgUmVuZGVy
U3R5bGUqIHN0eWxlKGJvb2wgZmlyc3RMaW5lKSBjb25zdCB7IHJldHVybiBmaXJzdExpbmUgPyBm
aXJzdExpbmVTdHlsZSgpIDogc3R5bGUoKTsgfQotCi0gICAgLy8gVXNlZCBvbmx5IGJ5IEVsZW1l
bnQ6OnBzZXVkb1N0eWxlQ2FjaGVJc0ludmFsaWQgdG8gZ2V0IGEgZmlyc3QgbGluZSBzdHlsZSBi
YXNlZCBvZmYgb2YgYQotICAgIC8vIGdpdmVuIG5ldyBzdHlsZSwgd2l0aG91dCBhY2Nlc3Npbmcg
dGhlIGNhY2hlLgotICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHVuY2FjaGVkRmlyc3RMaW5l
U3R5bGUoUmVuZGVyU3R5bGUqKSBjb25zdDsKIAogICAgIC8vIEFub255bW91cyBibG9ja3MgdGhh
dCBhcmUgcGFydCBvZiBvZiBhIGNvbnRpbnVhdGlvbiBjaGFpbiB3aWxsIHJldHVybiB0aGVpciBp
bmxpbmUgY29udGludWF0aW9uJ3Mgb3V0bGluZSBzdHlsZSBpbnN0ZWFkLgogICAgIC8vIFRoaXMg
aXMgdHlwaWNhbGx5IG9ubHkgcmVsZXZhbnQgd2hlbiByZXBhaW50aW5nLgpAQCAtNzI1LDggKzcx
NSw2IEBAIHB1YmxpYzoKICAgICAKICAgICB2aXJ0dWFsIEN1cnNvckRpcmVjdGl2ZSBnZXRDdXJz
b3IoY29uc3QgTGF5b3V0UG9pbnQmLCBDdXJzb3ImKSBjb25zdDsKIAotICAgIHZvaWQgZ2V0VGV4
dERlY29yYXRpb25Db2xvcnMoaW50IGRlY29yYXRpb25zLCBDb2xvciYgdW5kZXJsaW5lLCBDb2xv
ciYgb3ZlcmxpbmUsIENvbG9yJiBsaW5ldGhyb3VnaCwgYm9vbCBxdWlya3NNb2RlID0gZmFsc2Us
IGJvb2wgZmlyc3RsaW5lU3R5bGUgPSBmYWxzZSk7Ci0KICAgICAvLyBSZXR1cm4gdGhlIFJlbmRl
ckJveCBpbiB0aGUgY29udGFpbmVyIGNoYWluIHdoaWNoIGlzIHJlc3BvbnNpYmxlIGZvciBwYWlu
dGluZyB0aGlzIG9iamVjdCwgb3IgMAogICAgIC8vIGlmIHBhaW50aW5nIGlzIHJvb3QtcmVsYXRp
dmUuIFRoaXMgaXMgdGhlIGNvbnRhaW5lciB0aGF0IHNob3VsZCBiZSBwYXNzZWQgdG8gdGhlICdm
b3JSZXBhaW50JwogICAgIC8vIG1ldGhvZHMuCkBAIC05MzMsNyArOTIxLDYgQEAgcHJvdGVjdGVk
OgogICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBvdXRsaW5lQm91bmRzRm9yUmVwYWludChSZW5kZXJC
b3hNb2RlbE9iamVjdCogLypyZXBhaW50Q29udGFpbmVyKi8sIExheW91dFBvaW50KiAvKmNhY2hl
ZE9mZnNldFRvUmVwYWludENvbnRhaW5lciovID0gMCkgY29uc3QgeyByZXR1cm4gTGF5b3V0UmVj
dCgpOyB9CiAKIHByaXZhdGU6Ci0gICAgUmVuZGVyU3R5bGUqIGZpcnN0TGluZVN0eWxlU2xvd0Nh
c2UoKSBjb25zdDsKICAgICBTdHlsZURpZmZlcmVuY2UgYWRqdXN0U3R5bGVEaWZmZXJlbmNlKFN0
eWxlRGlmZmVyZW5jZSwgdW5zaWduZWQgY29udGV4dFNlbnNpdGl2ZVByb3BlcnRpZXMpIGNvbnN0
OwogCiAgICAgQ29sb3Igc2VsZWN0aW9uQ29sb3IoaW50IGNvbG9yUHJvcGVydHkpIGNvbnN0Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlSdW4uY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlSdW4uY3BwCmluZGV4IDcxNmU1NWYu
LjVmM2I0MjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5
UnVuLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieVJ1bi5jcHAK
QEAgLTI5OCwxNiArMjk4LDE2IEBAIHZvaWQgUmVuZGVyUnVieVJ1bjo6Z2V0T3ZlcmhhbmcoYm9v
bCBmaXJzdExpbmUsIFJlbmRlck9iamVjdCogc3RhcnRSZW5kZXJlciwgUmVuCiAgICAgc3RhcnRP
dmVyaGFuZyA9IHN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IGxvZ2ljYWxMZWZ0
T3ZlcmhhbmcgOiBsb2dpY2FsUmlnaHRPdmVyaGFuZzsKICAgICBlbmRPdmVyaGFuZyA9IHN0eWxl
KCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IGxvZ2ljYWxSaWdodE92ZXJoYW5nIDogbG9n
aWNhbExlZnRPdmVyaGFuZzsKIAotICAgIGlmICghc3RhcnRSZW5kZXJlciB8fCAhc3RhcnRSZW5k
ZXJlci0+aXNUZXh0KCkgfHwgc3RhcnRSZW5kZXJlci0+c3R5bGUoZmlyc3RMaW5lKS0+Zm9udFNp
emUoKSA+IHJ1YnlCYXNlLT5zdHlsZShmaXJzdExpbmUpLT5mb250U2l6ZSgpKQorICAgIGlmICgh
c3RhcnRSZW5kZXJlciB8fCAhc3RhcnRSZW5kZXJlci0+aXNUZXh0KCkgfHwgdG9SZW5kZXJCb3hN
b2RlbE9iamVjdChzdGFydFJlbmRlcmVyLT5wYXJlbnQoKSktPnN0eWxlRm9yRmlyc3RMaW5lKGZp
cnN0TGluZSktPmZvbnRTaXplKCkgPiBydWJ5QmFzZS0+c3R5bGVGb3JGaXJzdExpbmUoZmlyc3RM
aW5lKS0+Zm9udFNpemUoKSkKICAgICAgICAgc3RhcnRPdmVyaGFuZyA9IDA7CiAKLSAgICBpZiAo
IWVuZFJlbmRlcmVyIHx8ICFlbmRSZW5kZXJlci0+aXNUZXh0KCkgfHwgZW5kUmVuZGVyZXItPnN0
eWxlKGZpcnN0TGluZSktPmZvbnRTaXplKCkgPiBydWJ5QmFzZS0+c3R5bGUoZmlyc3RMaW5lKS0+
Zm9udFNpemUoKSkKKyAgICBpZiAoIWVuZFJlbmRlcmVyIHx8ICFlbmRSZW5kZXJlci0+aXNUZXh0
KCkgfHwgdG9SZW5kZXJCb3hNb2RlbE9iamVjdChlbmRSZW5kZXJlci0+cGFyZW50KCkpLT5zdHls
ZUZvckZpcnN0TGluZShmaXJzdExpbmUpLT5mb250U2l6ZSgpID4gcnVieUJhc2UtPnN0eWxlRm9y
Rmlyc3RMaW5lKGZpcnN0TGluZSktPmZvbnRTaXplKCkpCiAgICAgICAgIGVuZE92ZXJoYW5nID0g
MDsKIAogICAgIC8vIFdlIG92ZXJoYW5nIGEgcnVieSBvbmx5IGlmIHRoZSBuZWlnaGJvcmluZyBy
ZW5kZXIgb2JqZWN0IGlzIGEgdGV4dC4KICAgICAvLyBXZSBjYW4gb3ZlcmhhbmcgdGhlIHJ1Ynkg
Ynkgbm8gbW9yZSB0aGFuIGhhbGYgdGhlIHdpZHRoIG9mIHRoZSBuZWlnaGJvcmluZyB0ZXh0CiAg
ICAgLy8gYW5kIG5vIG1vcmUgdGhhbiBoYWxmIHRoZSBmb250IHNpemUuCi0gICAgaW50IGhhbGZX
aWR0aE9mRm9udFNpemUgPSBydWJ5VGV4dC0+c3R5bGUoZmlyc3RMaW5lKS0+Zm9udFNpemUoKSAv
IDI7CisgICAgaW50IGhhbGZXaWR0aE9mRm9udFNpemUgPSBydWJ5VGV4dC0+c3R5bGVGb3JGaXJz
dExpbmUoZmlyc3RMaW5lKS0+Zm9udFNpemUoKSAvIDI7CiAgICAgaWYgKHN0YXJ0T3Zlcmhhbmcp
CiAgICAgICAgIHN0YXJ0T3ZlcmhhbmcgPSBtaW48aW50PihzdGFydE92ZXJoYW5nLCBtaW48aW50
Pih0b1JlbmRlclRleHQoc3RhcnRSZW5kZXJlciktPm1pbkxvZ2ljYWxXaWR0aCgpLCBoYWxmV2lk
dGhPZkZvbnRTaXplKSk7CiAgICAgaWYgKGVuZE92ZXJoYW5nKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRleHQuY3BwCmluZGV4IDE2YzFlYTEuLjJiYmE1YjkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKQEAgLTE0NDUsNyArMTQ0NSw3IEBAIGZsb2F0IFJl
bmRlclRleHQ6OndpZHRoKHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbiwgZmxvYXQgeFBvcywg
Ym9vbCBmaXJzdExpbmUsCiAgICAgaWYgKGZyb20gKyBsZW4gPiB0ZXh0TGVuZ3RoKCkpCiAgICAg
ICAgIGxlbiA9IHRleHRMZW5ndGgoKSAtIGZyb207CiAKLSAgICByZXR1cm4gd2lkdGgoZnJvbSwg
bGVuLCBzdHlsZShmaXJzdExpbmUpLT5mb250KCksIHhQb3MsIGZhbGxiYWNrRm9udHMsIGdseXBo
T3ZlcmZsb3cpOworICAgIHJldHVybiB3aWR0aChmcm9tLCBsZW4sIHRvUmVuZGVyQm94TW9kZWxP
YmplY3QocGFyZW50KCkpLT5zdHlsZUZvckZpcnN0TGluZShmaXJzdExpbmUpLT5mb250KCksIHhQ
b3MsIGZhbGxiYWNrRm9udHMsIGdseXBoT3ZlcmZsb3cpOwogfQogCiBmbG9hdCBSZW5kZXJUZXh0
Ojp3aWR0aCh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4sIGNvbnN0IEZvbnQmIGYsIGZsb2F0
IHhQb3MsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cywgR2x5
cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9Sb290SW5saW5lQm94LmNwcAppbmRleCBiY2JlN2JkLi40NTlmODUxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCkBAIC03MjgsNyArNzI4LDcgQEAgdm9p
ZCBSb290SW5saW5lQm94Ojphc2NlbnRBbmREZXNjZW50Rm9yQm94KElubGluZUJveCogYm94LCBH
bHlwaE92ZXJmbG93QW5kRmFsbGIKICAgICAvLyBSZXBsYWNlZCBib3hlcyB3aWxsIHJldHVybiAw
IGZvciB0aGUgbGluZS1oZWlnaHQgaWYgbGluZS1ib3gtY29udGFpbiBzYXlzIHRoZXkgYXJlCiAg
ICAgLy8gbm90IHRvIGJlIGluY2x1ZGVkLgogICAgIGlmIChib3gtPnJlbmRlcmVyKCktPmlzUmVw
bGFjZWQoKSkgewotICAgICAgICBpZiAocmVuZGVyZXIoKS0+c3R5bGUoaXNGaXJzdExpbmVTdHls
ZSgpKS0+bGluZUJveENvbnRhaW4oKSAmIExpbmVCb3hDb250YWluUmVwbGFjZWQpIHsKKyAgICAg
ICAgaWYgKHN0eWxlRm9yRmlyc3RMaW5lKGlzRmlyc3RMaW5lU3R5bGUoKSktPmxpbmVCb3hDb250
YWluKCkgJiBMaW5lQm94Q29udGFpblJlcGxhY2VkKSB7CiAgICAgICAgICAgICBhc2NlbnQgPSBi
b3gtPmJhc2VsaW5lUG9zaXRpb24oYmFzZWxpbmVUeXBlKCkpOwogICAgICAgICAgICAgZGVzY2Vu
dCA9IGJveC0+bGluZUhlaWdodCgpIC0gYXNjZW50OwogICAgICAgICAgICAgCkBAIC03NTMsOCAr
NzUzLDggQEAgdm9pZCBSb290SW5saW5lQm94Ojphc2NlbnRBbmREZXNjZW50Rm9yQm94KElubGlu
ZUJveCogYm94LCBHbHlwaE92ZXJmbG93QW5kRmFsbGIKICAgICBib29sIHNldFVzZWRGb250ID0g
ZmFsc2U7CiAgICAgYm9vbCBzZXRVc2VkRm9udFdpdGhMZWFkaW5nID0gZmFsc2U7CiAKLSAgICBp
ZiAodXNlZEZvbnRzICYmICF1c2VkRm9udHMtPmlzRW1wdHkoKSAmJiAoaW5jbHVkZUZvbnQgfHwg
KGJveC0+cmVuZGVyZXIoKS0+c3R5bGUoaXNGaXJzdExpbmVTdHlsZSgpKS0+bGluZUhlaWdodCgp
LmlzTmVnYXRpdmUoKSAmJiBpbmNsdWRlTGVhZGluZykpKSB7Ci0gICAgICAgIHVzZWRGb250cy0+
YXBwZW5kKGJveC0+cmVuZGVyZXIoKS0+c3R5bGUoaXNGaXJzdExpbmVTdHlsZSgpKS0+Zm9udCgp
LnByaW1hcnlGb250KCkpOworICAgIGlmICh1c2VkRm9udHMgJiYgIXVzZWRGb250cy0+aXNFbXB0
eSgpICYmIChpbmNsdWRlRm9udCB8fCAoYm94LT5zdHlsZUZvckZpcnN0TGluZShpc0ZpcnN0TGlu
ZVN0eWxlKCkpLT5saW5lSGVpZ2h0KCkuaXNOZWdhdGl2ZSgpICYmIGluY2x1ZGVMZWFkaW5nKSkp
IHsKKyAgICAgICAgdXNlZEZvbnRzLT5hcHBlbmQoYm94LT5zdHlsZUZvckZpcnN0TGluZShpc0Zp
cnN0TGluZVN0eWxlKCkpLT5mb250KCkucHJpbWFyeUZvbnQoKSk7CiAgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgdXNlZEZvbnRzLT5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgY29u
c3QgRm9udE1ldHJpY3MmIGZvbnRNZXRyaWNzID0gdXNlZEZvbnRzLT5hdChpKS0+Zm9udE1ldHJp
Y3MoKTsKICAgICAgICAgICAgIGludCB1c2VkRm9udEFzY2VudCA9IGZvbnRNZXRyaWNzLmFzY2Vu
dChiYXNlbGluZVR5cGUoKSk7CkBAIC03OTIsOCArNzkyLDggQEAgdm9pZCBSb290SW5saW5lQm94
Ojphc2NlbnRBbmREZXNjZW50Rm9yQm94KElubGluZUJveCogYm94LCBHbHlwaE92ZXJmbG93QW5k
RmFsbGIKICAgICB9CiAgICAgCiAgICAgaWYgKGluY2x1ZGVGb250Rm9yQm94KGJveCkgJiYgIXNl
dFVzZWRGb250KSB7Ci0gICAgICAgIGludCBmb250QXNjZW50ID0gYm94LT5yZW5kZXJlcigpLT5z
dHlsZShpc0ZpcnN0TGluZVN0eWxlKCkpLT5mb250TWV0cmljcygpLmFzY2VudCgpOwotICAgICAg
ICBpbnQgZm9udERlc2NlbnQgPSBib3gtPnJlbmRlcmVyKCktPnN0eWxlKGlzRmlyc3RMaW5lU3R5
bGUoKSktPmZvbnRNZXRyaWNzKCkuZGVzY2VudCgpOworICAgICAgICBpbnQgZm9udEFzY2VudCA9
IGJveC0+c3R5bGVGb3JGaXJzdExpbmUoaXNGaXJzdExpbmVTdHlsZSgpKS0+Zm9udE1ldHJpY3Mo
KS5hc2NlbnQoKTsKKyAgICAgICAgaW50IGZvbnREZXNjZW50ID0gYm94LT5zdHlsZUZvckZpcnN0
TGluZShpc0ZpcnN0TGluZVN0eWxlKCkpLT5mb250TWV0cmljcygpLmRlc2NlbnQoKTsKICAgICAg
ICAgc2V0QXNjZW50QW5kRGVzY2VudChhc2NlbnQsIGRlc2NlbnQsIGZvbnRBc2NlbnQsIGZvbnRE
ZXNjZW50LCBhc2NlbnREZXNjZW50U2V0KTsKICAgICAgICAgYWZmZWN0c0FzY2VudCA9IGZvbnRB
c2NlbnQgLSBib3gtPmxvZ2ljYWxUb3AoKSA+IDA7CiAgICAgICAgIGFmZmVjdHNEZXNjZW50ID0g
Zm9udERlc2NlbnQgKyBib3gtPmxvZ2ljYWxUb3AoKSA+IDA7IApAQCAtODAzLDEzICs4MDMsMTMg
QEAgdm9pZCBSb290SW5saW5lQm94Ojphc2NlbnRBbmREZXNjZW50Rm9yQm94KElubGluZUJveCog
Ym94LCBHbHlwaE92ZXJmbG93QW5kRmFsbGIKICAgICAgICAgc2V0QXNjZW50QW5kRGVzY2VudChh
c2NlbnQsIGRlc2NlbnQsIGdseXBoT3ZlcmZsb3ctPnRvcCwgZ2x5cGhPdmVyZmxvdy0+Ym90dG9t
LCBhc2NlbnREZXNjZW50U2V0KTsKICAgICAgICAgYWZmZWN0c0FzY2VudCA9IGdseXBoT3ZlcmZs
b3ctPnRvcCAtIGJveC0+bG9naWNhbFRvcCgpID4gMDsKICAgICAgICAgYWZmZWN0c0Rlc2NlbnQg
PSBnbHlwaE92ZXJmbG93LT5ib3R0b20gKyBib3gtPmxvZ2ljYWxUb3AoKSA+IDA7IAotICAgICAg
ICBnbHlwaE92ZXJmbG93LT50b3AgPSBtaW4oZ2x5cGhPdmVyZmxvdy0+dG9wLCBtYXgoMCwgZ2x5
cGhPdmVyZmxvdy0+dG9wIC0gYm94LT5yZW5kZXJlcigpLT5zdHlsZShpc0ZpcnN0TGluZVN0eWxl
KCkpLT5mb250TWV0cmljcygpLmFzY2VudCgpKSk7Ci0gICAgICAgIGdseXBoT3ZlcmZsb3ctPmJv
dHRvbSA9IG1pbihnbHlwaE92ZXJmbG93LT5ib3R0b20sIG1heCgwLCBnbHlwaE92ZXJmbG93LT5i
b3R0b20gLSBib3gtPnJlbmRlcmVyKCktPnN0eWxlKGlzRmlyc3RMaW5lU3R5bGUoKSktPmZvbnRN
ZXRyaWNzKCkuZGVzY2VudCgpKSk7CisgICAgICAgIGdseXBoT3ZlcmZsb3ctPnRvcCA9IG1pbihn
bHlwaE92ZXJmbG93LT50b3AsIG1heCgwLCBnbHlwaE92ZXJmbG93LT50b3AgLSBib3gtPnN0eWxl
Rm9yRmlyc3RMaW5lKGlzRmlyc3RMaW5lU3R5bGUoKSktPmZvbnRNZXRyaWNzKCkuYXNjZW50KCkp
KTsKKyAgICAgICAgZ2x5cGhPdmVyZmxvdy0+Ym90dG9tID0gbWluKGdseXBoT3ZlcmZsb3ctPmJv
dHRvbSwgbWF4KDAsIGdseXBoT3ZlcmZsb3ctPmJvdHRvbSAtIGJveC0+c3R5bGVGb3JGaXJzdExp
bmUoaXNGaXJzdExpbmVTdHlsZSgpKS0+Zm9udE1ldHJpY3MoKS5kZXNjZW50KCkpKTsKICAgICB9
CiAKICAgICBpZiAoaW5jbHVkZU1hcmdpbkZvckJveChib3gpKSB7Ci0gICAgICAgIExheW91dFVu
aXQgYXNjZW50V2l0aE1hcmdpbiA9IGJveC0+cmVuZGVyZXIoKS0+c3R5bGUoaXNGaXJzdExpbmVT
dHlsZSgpKS0+Zm9udE1ldHJpY3MoKS5hc2NlbnQoKTsKLSAgICAgICAgTGF5b3V0VW5pdCBkZXNj
ZW50V2l0aE1hcmdpbiA9IGJveC0+cmVuZGVyZXIoKS0+c3R5bGUoaXNGaXJzdExpbmVTdHlsZSgp
KS0+Zm9udE1ldHJpY3MoKS5kZXNjZW50KCk7CisgICAgICAgIExheW91dFVuaXQgYXNjZW50V2l0
aE1hcmdpbiA9IGJveC0+c3R5bGVGb3JGaXJzdExpbmUoaXNGaXJzdExpbmVTdHlsZSgpKS0+Zm9u
dE1ldHJpY3MoKS5hc2NlbnQoKTsKKyAgICAgICAgTGF5b3V0VW5pdCBkZXNjZW50V2l0aE1hcmdp
biA9IGJveC0+c3R5bGVGb3JGaXJzdExpbmUoaXNGaXJzdExpbmVTdHlsZSgpKS0+Zm9udE1ldHJp
Y3MoKS5kZXNjZW50KCk7CiAgICAgICAgIGlmIChib3gtPnBhcmVudCgpICYmICFib3gtPnJlbmRl
cmVyKCktPmlzVGV4dCgpKSB7CiAgICAgICAgICAgICBhc2NlbnRXaXRoTWFyZ2luICs9IGJveC0+
Ym94TW9kZWxPYmplY3QoKS0+Ym9yZGVyQmVmb3JlKCkgKyBib3gtPmJveE1vZGVsT2JqZWN0KCkt
PnBhZGRpbmdCZWZvcmUoKSArIGJveC0+Ym94TW9kZWxPYmplY3QoKS0+bWFyZ2luQmVmb3JlKCk7
CiAgICAgICAgICAgICBkZXNjZW50V2l0aE1hcmdpbiArPSBib3gtPmJveE1vZGVsT2JqZWN0KCkt
PmJvcmRlckFmdGVyKCkgKyBib3gtPmJveE1vZGVsT2JqZWN0KCktPnBhZGRpbmdBZnRlcigpICsg
Ym94LT5ib3hNb2RlbE9iamVjdCgpLT5tYXJnaW5BZnRlcigpOwpAQCAtODU1LDcgKzg1NSw3IEBA
IExheW91dFVuaXQgUm9vdElubGluZUJveDo6dmVydGljYWxQb3NpdGlvbkZvckJveChJbmxpbmVC
b3gqIGJveCwgVmVydGljYWxQb3NpdGlvCiAgICAgICAgIHZlcnRpY2FsUG9zaXRpb24gPSBib3gt
PnBhcmVudCgpLT5sb2dpY2FsVG9wKCk7CiAgICAgCiAgICAgaWYgKHZlcnRpY2FsQWxpZ24gIT0g
QkFTRUxJTkUpIHsKLSAgICAgICAgY29uc3QgRm9udCYgZm9udCA9IHBhcmVudC0+c3R5bGUoZmly
c3RMaW5lKS0+Zm9udCgpOworICAgICAgICBjb25zdCBGb250JiBmb250ID0gdG9SZW5kZXJCb3hN
b2RlbE9iamVjdChwYXJlbnQpLT5zdHlsZUZvckZpcnN0TGluZShmaXJzdExpbmUpLT5mb250KCk7
CiAgICAgICAgIGNvbnN0IEZvbnRNZXRyaWNzJiBmb250TWV0cmljcyA9IGZvbnQuZm9udE1ldHJp
Y3MoKTsKICAgICAgICAgaW50IGZvbnRTaXplID0gZm9udC5waXhlbFNpemUoKTsKIAotLSAKMS43
LjkuNQoK
</data>

          </attachment>
      

    </bug>

</bugzilla>