<?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>167062</bug_id>
          
          <creation_ts>2017-01-14 19:40:33 -0800</creation_ts>
          <short_desc>De-duplicate some (nearly) identical code in Editor(Mac|IOS).mm</short_desc>
          <delta_ts>2017-01-14 22:47:11 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Tim Horton">thorton</reporter>
          <assigned_to name="Tim Horton">thorton</assigned_to>
          <cc>bdakin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>enrica</cc>
    
    <cc>mitz</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1266895</commentid>
    <comment_count>0</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2017-01-14 19:40:33 -0800</bug_when>
    <thetext>De-duplicate some (nearly) identical code in Editor(Mac|IOS).mm</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1266896</commentid>
    <comment_count>1</comment_count>
      <attachid>298876</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2017-01-14 19:40:58 -0800</bug_when>
    <thetext>Created attachment 298876
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1266902</commentid>
    <comment_count>2</comment_count>
      <attachid>298876</attachid>
    <who name="">mitz</who>
    <bug_when>2017-01-14 19:56:50 -0800</bug_when>
    <thetext>Comment on attachment 298876
Patch

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

&gt; Source/WebCore/ChangeLog:22
&gt; +        Move these six methods here.

functions

&gt; Source/WebCore/ChangeLog:29
&gt; +        and Editor(Mac|IOS), so we&apos;ll make them class methods.

static member functions

&gt; Source/WebCore/editing/Editor.cpp:3657
&gt; +        const Font* result = nullptr;

Should we call this font like the other one below?

&gt; Source/WebCore/editing/Editor.cpp:3670
&gt; +    if (range &amp;&amp; startNode) {

Maybe change this to an early return and only declare the font variable after?

&gt; Source/WebCore/editing/Editor.cpp:3672
&gt; +        // In the loop below, n should eventually match pastEnd and not become nil, but we&apos;ve seen at least one

null

&gt; Source/WebCore/editing/Editor.h:446
&gt; +    WEBCORE_EXPORT const Font* fontForSelection(bool&amp;) const;

The boolean needs to be named here.

&gt; Source/WebCore/editing/cocoa/EditorCocoa.mm:133
&gt; +    content.dataInRTFDFormat = attributedString.containsAttachments ? dataInRTFDFormat(attributedString) : 0;

nullptr?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1266903</commentid>
    <comment_count>3</comment_count>
      <attachid>298880</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2017-01-14 20:23:10 -0800</bug_when>
    <thetext>Created attachment 298880
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1266907</commentid>
    <comment_count>4</comment_count>
      <attachid>298876</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-01-14 20:41:48 -0800</bug_when>
    <thetext>Comment on attachment 298876
Patch

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

&gt;&gt; Source/WebCore/editing/Editor.h:446
&gt;&gt; +    WEBCORE_EXPORT const Font* fontForSelection(bool&amp;) const;
&gt; 
&gt; The boolean needs to be named here.

Another option that could clean things up in the future would to change this to return a struct so we can have both the font and the &quot;has multiple fonts&quot; boolean without using an out argument. Even a tuple or pair might be better, but then we would not have a name for the boolean.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1266912</commentid>
    <comment_count>5</comment_count>
      <attachid>298883</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2017-01-14 21:14:10 -0800</bug_when>
    <thetext>Created attachment 298883
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1266926</commentid>
    <comment_count>6</comment_count>
      <attachid>298887</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2017-01-14 22:09:00 -0800</bug_when>
    <thetext>Created attachment 298887
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1266936</commentid>
    <comment_count>7</comment_count>
      <attachid>298887</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-01-14 22:47:06 -0800</bug_when>
    <thetext>Comment on attachment 298887
Patch

Clearing flags on attachment: 298887

Committed r210773: &lt;http://trac.webkit.org/changeset/210773&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1266937</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-01-14 22:47:11 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>298876</attachid>
            <date>2017-01-14 19:40:58 -0800</date>
            <delta_ts>2017-01-14 20:23:07 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-167062-20170114193914.patch</filename>
            <type>text/plain</type>
            <size>23990</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjEwNzcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTQxOTRlNjQ2MmViZmMx
OWRlNTYxM2FhOTcxOGQ3YzNhYThkMjA1ZS4uMWIxODJjMWU3NzY4ZmUwNzM0OTE4OTVhNzIxMmUw
MmEwN2M3Y2JkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDE3LTAxLTE0ICBUaW0g
SG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgorCisgICAgICAgIERlLWR1cGxpY2F0
ZSBzb21lIChuZWFybHkpIGlkZW50aWNhbCBjb2RlIGluIEVkaXRvcihNYWN8SU9TKS5tbQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY3MDYyCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3Rz
LCBqdXN0IHJlZmFjdG9yaW5nLgorCisgICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjpmb250Rm9yU2VsZWN0aW9uKToKKyAgICAgICAgKiBlZGl0
aW5nL0VkaXRvci5oOgorICAgICAgICBNb3ZlIGZvbnRGb3JTZWxlY3Rpb24gdG8gRWRpdG9yIGFu
ZCB1bmd1YXJkIGl0LCBiZWNhdXNlIGl0J3Mgbm90IENvY29hIHNwZWNpZmljLgorCisgICAgICAg
ICogZWRpdGluZy9jb2NvYS9FZGl0b3JDb2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRv
cjo6d3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9y
OjpzZWxlY3Rpb25JbldlYkFyY2hpdmVGb3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9y
OjpyZXBsYWNlU2VsZWN0aW9uV2l0aEF0dHJpYnV0ZWRTdHJpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjpjcmVhdGVGcmFnbWVudEZvckltYWdlUmVzb3VyY2VBbmRBZGRSZXNvdXJjZSk6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmRhdGFJblJURkRGb3JtYXQpOgorICAgICAgICAo
V2ViQ29yZTo6RWRpdG9yOjpkYXRhSW5SVEZGb3JtYXQpOgorICAgICAgICBNb3ZlIHRoZXNlIHNp
eCBtZXRob2RzIGhlcmUuCisgICAgICAgIHNlbGVjdGlvbkluV2ViQXJjaGl2ZUZvcm1hdCBhbmQg
cmVwbGFjZVNlbGVjdGlvbldpdGhBdHRyaWJ1dGVkU3RyaW5nIGFyZQorICAgICAgICBlbnRpcmVs
eSBpZGVudGljYWw7IHdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkIGFuZCBjcmVhdGVGcmFnbWVu
dC4uLgorICAgICAgICBib3RoIGhhdmUgc2xpZ2h0bHkgc3VzcGljaW91cy1sb29raW5nIGRpZmZl
cmVuY2VzIHRoYXQgSSBsZWZ0IGludGFjdAorICAgICAgICBhbmQgd3JvdGUgY29tbWVudHMgYWJv
dXQgKGVzcGVjaWFsbHkgY3JlYXRlRnJhZ21lbnQuLi4sIHRoZSBvdGhlciBvbmUKKyAgICAgICAg
aXMgc29tZXdoYXQgZXhwbGljYWJsZSkuIFRoZSB0d28gZGF0YUluUlRGKEQpRm9ybWF0IG1ldGhv
ZHMgdXNlZCB0bworICAgICAgICBiZSBzdGF0aWMgZnVuY3Rpb25zLCBidXQgZm9yIG5vdyBhcmUg
cmVxdWlyZWQgZnJvbSBib3RoIEVkaXRvckNvY29hCisgICAgICAgIGFuZCBFZGl0b3IoTWFjfElP
UyksIHNvIHdlJ2xsIG1ha2UgdGhlbSBjbGFzcyBtZXRob2RzLgorCisgICAgICAgICogZWRpdGlu
Zy9pb3MvRWRpdG9ySU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpmb250Rm9yU2Vs
ZWN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0aW9uSW5X
ZWJBcmNoaXZlRm9ybWF0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmRhdGFJblJURkRG
b3JtYXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6ZGF0YUluUlRGRm9ybWF0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6d3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9h
cmQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjcmVhdGVGcmFnbWVudEZv
ckltYWdlUmVzb3VyY2VBbmRBZGRSZXNvdXJjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpFZGl0b3I6OnJlcGxhY2VTZWxlY3Rpb25XaXRoQXR0cmlidXRlZFN0cmluZyk6IERlbGV0ZWQu
CisgICAgICAgICogZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpmb250Rm9yU2VsZWN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkVk
aXRvcjo6c2VsZWN0aW9uSW5XZWJBcmNoaXZlRm9ybWF0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OmRhdGFJblJURkRGb3JtYXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6ZGF0
YUluUlRGRm9ybWF0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6d3JpdGVT
ZWxlY3Rpb25Ub1Bhc3RlYm9hcmQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9y
OjpjcmVhdGVGcmFnbWVudEZvckltYWdlUmVzb3VyY2VBbmRBZGRSZXNvdXJjZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnJlcGxhY2VTZWxlY3Rpb25XaXRoQXR0cmlidXRl
ZFN0cmluZyk6IERlbGV0ZWQuCisKIDIwMTctMDEtMTQgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFw
cGxlLmNvbT4KIAogICAgICAgICBTbWFsbCBjb2RlIGNsZWFudXAgYWZ0ZXIgcjIxMDc2MApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9FZGl0b3IuY3BwCmluZGV4IDRkMzg0MWI2YjAxNzQxMzM3ZTMzZDIwMzE5OGI3
NjUzZmZjM2M3ZjMuLjQ4MjUyOWIxODZkY2Q2NmM2Y2I5MjhiYWQ4ODExMTQ0MGM1MjY3ZjYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKQEAgLTM2NDYsNCArMzY0Niw0OCBAQCBEb2N1bWVu
dCYgRWRpdG9yOjpkb2N1bWVudCgpIGNvbnN0CiAgICAgcmV0dXJuICptX2ZyYW1lLmRvY3VtZW50
KCk7CiB9CiAKK2NvbnN0IEZvbnQqIEVkaXRvcjo6Zm9udEZvclNlbGVjdGlvbihib29sJiBoYXNN
dWx0aXBsZUZvbnRzKSBjb25zdAoreworICAgIGhhc011bHRpcGxlRm9udHMgPSBmYWxzZTsKKwor
ICAgIGlmICghbV9mcmFtZS5zZWxlY3Rpb24oKS5pc1JhbmdlKCkpIHsKKyAgICAgICAgTm9kZSog
bm9kZVRvUmVtb3ZlOworICAgICAgICBhdXRvKiBzdHlsZSA9IHN0eWxlRm9yU2VsZWN0aW9uU3Rh
cnQoJm1fZnJhbWUsIG5vZGVUb1JlbW92ZSk7IC8vIHNldHMgbm9kZVRvUmVtb3ZlCisKKyAgICAg
ICAgY29uc3QgRm9udCogcmVzdWx0ID0gbnVsbHB0cjsKKyAgICAgICAgaWYgKHN0eWxlKSB7Cisg
ICAgICAgICAgICByZXN1bHQgPSAmc3R5bGUtPmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKTsK
KyAgICAgICAgICAgIGlmIChub2RlVG9SZW1vdmUpCisgICAgICAgICAgICAgICAgbm9kZVRvUmVt
b3ZlLT5yZW1vdmUoKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fQorCisgICAgY29uc3QgRm9udCogZm9udCA9IG51bGxwdHI7CisgICAgUmVmUHRyPFJhbmdlPiBy
YW5nZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBOb2Rl
KiBzdGFydE5vZGUgPSBhZGp1c3RlZFNlbGVjdGlvblN0YXJ0Rm9yU3R5bGVDb21wdXRhdGlvbiht
X2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKS5kZXByZWNhdGVkTm9kZSgpOworICAgIGlm
IChyYW5nZSAmJiBzdGFydE5vZGUpIHsKKyAgICAgICAgTm9kZSogcGFzdEVuZCA9IHJhbmdlLT5w
YXN0TGFzdE5vZGUoKTsKKyAgICAgICAgLy8gSW4gdGhlIGxvb3AgYmVsb3csIG4gc2hvdWxkIGV2
ZW50dWFsbHkgbWF0Y2ggcGFzdEVuZCBhbmQgbm90IGJlY29tZSBuaWwsIGJ1dCB3ZSd2ZSBzZWVu
IGF0IGxlYXN0IG9uZQorICAgICAgICAvLyB1bnJlcHJvZHVjaWJsZSBjYXNlIHdoZXJlIHRoaXMg
ZGlkbid0IGhhcHBlbiwgc28gY2hlY2sgZm9yIG51bGwgYWxzby4KKyAgICAgICAgZm9yIChOb2Rl
KiBub2RlID0gc3RhcnROb2RlOyBub2RlICYmIG5vZGUgIT0gcGFzdEVuZDsgbm9kZSA9IE5vZGVU
cmF2ZXJzYWw6Om5leHQoKm5vZGUpKSB7CisgICAgICAgICAgICBhdXRvIHJlbmRlcmVyID0gbm9k
ZS0+cmVuZGVyZXIoKTsKKyAgICAgICAgICAgIGlmICghcmVuZGVyZXIpCisgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICAvLyBGSVhNRTogQXJlIHRoZXJlIGFueSBub2RlIHR5
cGVzIHRoYXQgaGF2ZSByZW5kZXJlcnMsIGJ1dCB0aGF0IHdlIHNob3VsZCBiZSBza2lwcGluZz8K
KyAgICAgICAgICAgIGNvbnN0IEZvbnQmIHByaW1hcnlGb250ID0gcmVuZGVyZXItPnN0eWxlKCku
Zm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpOworICAgICAgICAgICAgaWYgKCFmb250KQorICAg
ICAgICAgICAgICAgIGZvbnQgPSAmcHJpbWFyeUZvbnQ7CisgICAgICAgICAgICBlbHNlIGlmIChm
b250ICE9ICZwcmltYXJ5Rm9udCkgeworICAgICAgICAgICAgICAgIGhhc011bHRpcGxlRm9udHMg
PSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorCisgICAgcmV0dXJuIGZvbnQ7Cit9CisKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaCBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKaW5kZXggNzMzMGViYjAzZWE4NDFhN2M4ZTEwZGMzYjA4
M2I3NDExZDA4OTE3MS4uMzY4MTE1MzJkNWIyNGYwMjk0ZmQzZjMzZTcxYmExMzY5YzgwMzNhYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCkBAIC00NDMsMTAgKzQ0MywxMSBAQCBwdWJsaWM6CiAK
ICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gd2ViQ29udGVudEZyb21QYXN0ZWJvYXJkKFBh
c3RlYm9hcmQmLCBSYW5nZSYgY29udGV4dCwgYm9vbCBhbGxvd1BsYWluVGV4dCwgYm9vbCYgY2hv
c2VQbGFpblRleHQpOwogCisgICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgRm9udCogZm9udEZvclNl
bGVjdGlvbihib29sJikgY29uc3Q7CisKICNpZiBQTEFURk9STShDT0NPQSkKICAgICBXRUJDT1JF
X0VYUE9SVCBzdGF0aWMgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlRm9yU2VsZWN0aW9uU3RhcnQo
RnJhbWUqICwgTm9kZSAqJm5vZGVUb1JlbW92ZSk7CiAgICAgdm9pZCBnZXRUZXh0RGVjb3JhdGlv
bkF0dHJpYnV0ZXNSZXNwZWN0aW5nVHlwaW5nU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmLCBOU011
dGFibGVEaWN0aW9uYXJ5KikgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgRm9udCog
Zm9udEZvclNlbGVjdGlvbihib29sJikgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgTlNEaWN0
aW9uYXJ5ICpmb250QXR0cmlidXRlc0ZvclNlbGVjdGlvblN0YXJ0KCkgY29uc3Q7CiAgICAgV0VC
Q09SRV9FWFBPUlQgU3RyaW5nIHN0cmluZ1NlbGVjdGlvbkZvclBhc3RlYm9hcmQoKTsKICAgICBT
dHJpbmcgc3RyaW5nU2VsZWN0aW9uRm9yUGFzdGVib2FyZFdpdGhJbWFnZUFsdFRleHQoKTsKQEAg
LTUyMiw2ICs1MjMsOSBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBj
cmVhdGVGcmFnbWVudEFuZEFkZFJlc291cmNlcyhOU0F0dHJpYnV0ZWRTdHJpbmcgKik7CiAgICAg
RnJhZ21lbnRBbmRSZXNvdXJjZXMgY3JlYXRlRnJhZ21lbnQoTlNBdHRyaWJ1dGVkU3RyaW5nICop
OwogICAgIHZvaWQgZmlsbEluVXNlclZpc2libGVGb3JtKFBhc3RlYm9hcmRVUkwmKTsKKworICAg
IHN0YXRpYyBSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhSW5SVEZERm9ybWF0KE5TQXR0cmlidXRl
ZFN0cmluZyAqKTsKKyAgICBzdGF0aWMgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YUluUlRGRm9y
bWF0KE5TQXR0cmlidXRlZFN0cmluZyAqKTsKICNlbmRpZgogCiAgICAgdm9pZCBwb3N0VGV4dFN0
YXRlQ2hhbmdlTm90aWZpY2F0aW9uRm9yQ3V0KGNvbnN0IFN0cmluZyYsIGNvbnN0IFZpc2libGVT
ZWxlY3Rpb24mKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRWRp
dG9yQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1t
CmluZGV4IGM1N2Q2NGQzOTdhZTQ2Y2IyZTQyOWU5MDk5ODQ1MzlkNzBkODRiOWYuLjUyMjdlNTVi
OTVlMjkyOGU1YzUwMzQ4NGFmZDJlZjk0Y2E4MWQyOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvY29jb2EvRWRpdG9yQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9jb2NvYS9FZGl0b3JDb2NvYS5tbQpAQCAtMzAsMTYgKzMwLDIzIEBACiAjaW1wb3J0ICJD
U1NWYWx1ZUxpc3QuaCIKICNpbXBvcnQgIkNTU1ZhbHVlUG9vbC5oIgogI2ltcG9ydCAiRG9jdW1l
bnRGcmFnbWVudC5oIgorI2ltcG9ydCAiRG9jdW1lbnRMb2FkZXIuaCIKICNpbXBvcnQgIkVkaXRp
bmdTdHlsZS5oIgorI2ltcG9ydCAiRWRpdG9yQ2xpZW50LmgiCiAjaW1wb3J0ICJGcmFtZS5oIgog
I2ltcG9ydCAiRnJhbWVTZWxlY3Rpb24uaCIKKyNpbXBvcnQgIkhUTUxDb252ZXJ0ZXIuaCIKKyNp
bXBvcnQgIkhUTUxJbWFnZUVsZW1lbnQuaCIKICNpbXBvcnQgIkhUTUxTcGFuRWxlbWVudC5oIgor
I2ltcG9ydCAiTGVnYWN5V2ViQXJjaGl2ZS5oIgogI2ltcG9ydCAiTlNBdHRyaWJ1dGVkU3RyaW5n
U1BJLmgiCisjaW1wb3J0ICJQYXN0ZWJvYXJkLmgiCiAjaW1wb3J0ICJSZW5kZXJFbGVtZW50Lmgi
CiAjaW1wb3J0ICJSZW5kZXJTdHlsZS5oIgogI2ltcG9ydCAiU29mdExpbmtpbmcuaCIKICNpbXBv
cnQgIlRleHQuaCIKICNpbXBvcnQgImh0bWxlZGl0aW5nLmgiCisjaW1wb3J0IDx3dGYvQmxvY2tP
YmpDRXhjZXB0aW9ucy5oPgogCiAjaWYgUExBVEZPUk0oSU9TKQogU09GVF9MSU5LX1BSSVZBVEVf
RlJBTUVXT1JLKFdlYktpdExlZ2FjeSkKQEAgLTExNiw0ICsxMjMsOTkgQEAgRnJhZ21lbnRBbmRS
ZXNvdXJjZXMgRWRpdG9yOjpjcmVhdGVGcmFnbWVudChOU0F0dHJpYnV0ZWRTdHJpbmcgKnN0cmlu
ZykKICAgICByZXR1cm4gcmVzdWx0OwogfQogCit2b2lkIEVkaXRvcjo6d3JpdGVTZWxlY3Rpb25U
b1Bhc3RlYm9hcmQoUGFzdGVib2FyZCYgcGFzdGVib2FyZCkKK3sKKyAgICBOU0F0dHJpYnV0ZWRT
dHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmcgPSBhdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlKCpzZWxl
Y3RlZFJhbmdlKCkpOworCisgICAgUGFzdGVib2FyZFdlYkNvbnRlbnQgY29udGVudDsKKyAgICBj
b250ZW50LmNhblNtYXJ0Q29weU9yRGVsZXRlID0gY2FuU21hcnRDb3B5T3JEZWxldGUoKTsKKyAg
ICBjb250ZW50LmRhdGFJbldlYkFyY2hpdmVGb3JtYXQgPSBzZWxlY3Rpb25JbldlYkFyY2hpdmVG
b3JtYXQoKTsKKyAgICBjb250ZW50LmRhdGFJblJURkRGb3JtYXQgPSBhdHRyaWJ1dGVkU3RyaW5n
LmNvbnRhaW5zQXR0YWNobWVudHMgPyBkYXRhSW5SVEZERm9ybWF0KGF0dHJpYnV0ZWRTdHJpbmcp
IDogMDsKKyAgICBjb250ZW50LmRhdGFJblJURkZvcm1hdCA9IGRhdGFJblJURkZvcm1hdChhdHRy
aWJ1dGVkU3RyaW5nKTsKKyAgICAvLyBGSVhNRTogV2h5IGRvbid0IHdlIHdhbnQgdGhpcyBvbiBp
T1M/CisjaWYgUExBVEZPUk0oTUFDKQorICAgIGNvbnRlbnQuZGF0YUluSFRNTEZvcm1hdCA9IHNl
bGVjdGlvbkluSFRNTEZvcm1hdCgpOworI2VuZGlmCisgICAgY29udGVudC5kYXRhSW5TdHJpbmdG
b3JtYXQgPSBzdHJpbmdTZWxlY3Rpb25Gb3JQYXN0ZWJvYXJkV2l0aEltYWdlQWx0VGV4dCgpOwor
ICAgIGNsaWVudCgpLT5nZXRDbGllbnRQYXN0ZWJvYXJkRGF0YUZvclJhbmdlKHNlbGVjdGVkUmFu
Z2UoKS5nZXQoKSwgY29udGVudC5jbGllbnRUeXBlcywgY29udGVudC5jbGllbnREYXRhKTsKKwor
ICAgIHBhc3RlYm9hcmQud3JpdGUoY29udGVudCk7Cit9CisKK1JlZlB0cjxTaGFyZWRCdWZmZXI+
IEVkaXRvcjo6c2VsZWN0aW9uSW5XZWJBcmNoaXZlRm9ybWF0KCkKK3sKKyAgICBSZWZQdHI8TGVn
YWN5V2ViQXJjaGl2ZT4gYXJjaGl2ZSA9IExlZ2FjeVdlYkFyY2hpdmU6OmNyZWF0ZUZyb21TZWxl
Y3Rpb24oJm1fZnJhbWUpOworICAgIGlmICghYXJjaGl2ZSkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6d3JhcENGRGF0YShhcmNoaXZlLT5yYXdEYXRh
UmVwcmVzZW50YXRpb24oKS5nZXQoKSk7Cit9CisKK3ZvaWQgRWRpdG9yOjpyZXBsYWNlU2VsZWN0
aW9uV2l0aEF0dHJpYnV0ZWRTdHJpbmcoTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3Ry
aW5nLCBNYWlsQmxvY2txdW90ZUhhbmRsaW5nIG1haWxCbG9ja3F1b3RlSGFuZGxpbmcpCit7Cisg
ICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNOb25lKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudFJpY2hseUVk
aXRhYmxlKCkpIHsKKyAgICAgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0g
Y3JlYXRlRnJhZ21lbnRBbmRBZGRSZXNvdXJjZXMoYXR0cmlidXRlZFN0cmluZyk7CisgICAgICAg
IGlmIChmcmFnbWVudCAmJiBzaG91bGRJbnNlcnRGcmFnbWVudChmcmFnbWVudCwgc2VsZWN0ZWRS
YW5nZSgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlBhc3RlZCkpCisgICAgICAgICAgICBwYXN0ZUFz
RnJhZ21lbnQoZnJhZ21lbnQucmVsZWFzZU5vbk51bGwoKSwgZmFsc2UsIGZhbHNlLCBtYWlsQmxv
Y2txdW90ZUhhbmRsaW5nKTsKKyAgICB9IGVsc2UgeworICAgICAgICBTdHJpbmcgdGV4dCA9IGF0
dHJpYnV0ZWRTdHJpbmcuc3RyaW5nOworICAgICAgICBpZiAoc2hvdWxkSW5zZXJ0VGV4dCh0ZXh0
LCBzZWxlY3RlZFJhbmdlKCkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVkKSkKKyAg
ICAgICAgICAgIHBhc3RlQXNQbGFpblRleHQodGV4dCwgZmFsc2UpOworICAgIH0KK30KKworUmVm
UHRyPERvY3VtZW50RnJhZ21lbnQ+IEVkaXRvcjo6Y3JlYXRlRnJhZ21lbnRGb3JJbWFnZVJlc291
cmNlQW5kQWRkUmVzb3VyY2UoUmVmUHRyPEFyY2hpdmVSZXNvdXJjZT4mJiByZXNvdXJjZSkKK3sK
KyAgICBpZiAoIXJlc291cmNlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIC8vIEZJ
WE1FOiBXaHkgaXMgdGhpcyBkaWZmZXJlbnQ/CisjaWYgUExBVEZPUk0oTUFDKQorICAgIFN0cmlu
ZyByZXNvdXJjZVVSTCA9IHJlc291cmNlLT51cmwoKS5zdHJpbmcoKTsKKyNlbHNlCisgICAgTlNV
UkwgKlVSTCA9IHJlc291cmNlLT51cmwoKTsKKyAgICBTdHJpbmcgcmVzb3VyY2VVUkwgPSBVUkwu
aXNGaWxlVVJMID8gVVJMLmFic29sdXRlU3RyaW5nIDogcmVzb3VyY2UtPnVybCgpOworI2VuZGlm
CisKKyAgICBpZiAoRG9jdW1lbnRMb2FkZXIqIGxvYWRlciA9IG1fZnJhbWUubG9hZGVyKCkuZG9j
dW1lbnRMb2FkZXIoKSkKKyAgICAgICAgbG9hZGVyLT5hZGRBcmNoaXZlUmVzb3VyY2UocmVzb3Vy
Y2UucmVsZWFzZU5vbk51bGwoKSk7CisKKyAgICBhdXRvIGltYWdlRWxlbWVudCA9IEhUTUxJbWFn
ZUVsZW1lbnQ6OmNyZWF0ZSgqbV9mcmFtZS5kb2N1bWVudCgpKTsKKyAgICBpbWFnZUVsZW1lbnQt
PnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oSFRNTE5hbWVzOjpzcmNBdHRyLCBy
ZXNvdXJjZVVSTCk7CisKKyAgICBhdXRvIGZyYWdtZW50ID0gbV9mcmFtZS5kb2N1bWVudCgpLT5j
cmVhdGVEb2N1bWVudEZyYWdtZW50KCk7CisgICAgZnJhZ21lbnQtPmFwcGVuZENoaWxkKGltYWdl
RWxlbWVudCk7CisgICAgCisgICAgcmV0dXJuIFdURk1vdmUoZnJhZ21lbnQpOworfQorCitSZWZQ
dHI8U2hhcmVkQnVmZmVyPiBFZGl0b3I6OmRhdGFJblJURkRGb3JtYXQoTlNBdHRyaWJ1dGVkU3Ry
aW5nICpzdHJpbmcpCit7CisgICAgTlNVSW50ZWdlciBsZW5ndGggPSBzdHJpbmcubGVuZ3RoOwor
ICAgIGlmICghbGVuZ3RoKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIEJFR0lOX0JM
T0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICByZXR1cm4gU2hhcmVkQnVmZmVyOjp3cmFwTlNEYXRh
KFtzdHJpbmcgUlRGREZyb21SYW5nZTpOU01ha2VSYW5nZSgwLCBsZW5ndGgpIGRvY3VtZW50QXR0
cmlidXRlczpAeyB9XSk7CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKworICAgIHJl
dHVybiBudWxscHRyOworfQorCitSZWZQdHI8U2hhcmVkQnVmZmVyPiBFZGl0b3I6OmRhdGFJblJU
RkZvcm1hdChOU0F0dHJpYnV0ZWRTdHJpbmcgKnN0cmluZykKK3sKKyAgICBOU1VJbnRlZ2VyIGxl
bmd0aCA9IHN0cmluZy5sZW5ndGg7CisgICAgaWYgKCFsZW5ndGgpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIHJldHVybiBT
aGFyZWRCdWZmZXI6OndyYXBOU0RhdGEoW3N0cmluZyBSVEZGcm9tUmFuZ2U6TlNNYWtlUmFuZ2Uo
MCwgbGVuZ3RoKSBkb2N1bWVudEF0dHJpYnV0ZXM6QHsgfV0pOworICAgIEVORF9CTE9DS19PQkpD
X0VYQ0VQVElPTlM7CisKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworCiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0b3JJT1MubW0gYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL2lvcy9FZGl0b3JJT1MubW0KaW5kZXggYzVlOGMyOTEyNGJmMDdiYTk2Y2U1NGMy
N2VjYjhiY2ZmN2I1NjQ3ZS4uMmIxMTg1ZTJhYWY2MWMyYjUwNmQwZWE2N2I0ODA3NDg5ZDIwODJj
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1tCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbQpAQCAtNjIsNyArNjIs
NiBAQAogI2ltcG9ydCAiaHRtbGVkaXRpbmcuaCIKICNpbXBvcnQgIm1hcmt1cC5oIgogI2ltcG9y
dCA8TW9iaWxlQ29yZVNlcnZpY2VzL01vYmlsZUNvcmVTZXJ2aWNlcy5oPgotI2ltcG9ydCA8d3Rm
L0Jsb2NrT2JqQ0V4Y2VwdGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVy
Lmg+CiAKIFNPRlRfTElOS19GUkFNRVdPUksoQXBwU3VwcG9ydCkKQEAgLTE2NSw0OCArMTY0LDYg
QEAgdm9pZCBFZGl0b3I6OnNldFRleHRBbGlnbm1lbnRGb3JDaGFuZ2VkQmFzZVdyaXRpbmdEaXJl
Y3Rpb24oV3JpdGluZ0RpcmVjdGlvbiBkaXIKICAgICBhcHBseVBhcmFncmFwaFN0eWxlKHN0eWxl
LmdldCgpKTsKIH0KIAotY29uc3QgRm9udCogRWRpdG9yOjpmb250Rm9yU2VsZWN0aW9uKGJvb2wm
IGhhc011bHRpcGxlRm9udHMpIGNvbnN0Ci17Ci0gICAgaGFzTXVsdGlwbGVGb250cyA9IGZhbHNl
OwotCi0gICAgaWYgKCFtX2ZyYW1lLnNlbGVjdGlvbigpLmlzUmFuZ2UoKSkgewotICAgICAgICBO
b2RlKiBub2RlVG9SZW1vdmU7Ci0gICAgICAgIGF1dG8qIHN0eWxlID0gc3R5bGVGb3JTZWxlY3Rp
b25TdGFydCgmbV9mcmFtZSwgbm9kZVRvUmVtb3ZlKTsgLy8gc2V0cyBub2RlVG9SZW1vdmUKLQot
ICAgICAgICBjb25zdCBGb250KiByZXN1bHQgPSBudWxscHRyOwotICAgICAgICBpZiAoc3R5bGUp
IHsKLSAgICAgICAgICAgIHJlc3VsdCA9ICZzdHlsZS0+Zm9udENhc2NhZGUoKS5wcmltYXJ5Rm9u
dCgpOwotICAgICAgICAgICAgaWYgKG5vZGVUb1JlbW92ZSkKLSAgICAgICAgICAgICAgICBub2Rl
VG9SZW1vdmUtPnJlbW92ZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsK
LSAgICB9Ci0KLSAgICBjb25zdCBGb250KiBmb250ID0gbnVsbHB0cjsKLSAgICBSZWZQdHI8UmFu
Z2U+IHJhbmdlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAg
IGlmIChOb2RlKiBzdGFydE5vZGUgPSBhZGp1c3RlZFNlbGVjdGlvblN0YXJ0Rm9yU3R5bGVDb21w
dXRhdGlvbihtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKS5kZXByZWNhdGVkTm9kZSgp
KSB7Ci0gICAgICAgIE5vZGUqIHBhc3RFbmQgPSByYW5nZS0+cGFzdExhc3ROb2RlKCk7Ci0gICAg
ICAgIC8vIEluIHRoZSBsb29wIGJlbG93LCBuIHNob3VsZCBldmVudHVhbGx5IG1hdGNoIHBhc3RF
bmQgYW5kIG5vdCBiZWNvbWUgbmlsLCBidXQgd2UndmUgc2VlbiBhdCBsZWFzdCBvbmUKLSAgICAg
ICAgLy8gdW5yZXByb2R1Y2libGUgY2FzZSB3aGVyZSB0aGlzIGRpZG4ndCBoYXBwZW4sIHNvIGNo
ZWNrIGZvciBudWxsIGFsc28uCi0gICAgICAgIGZvciAoTm9kZSogbm9kZSA9IHN0YXJ0Tm9kZTsg
bm9kZSAmJiBub2RlICE9IHBhc3RFbmQ7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpub2Rl
KSkgewotICAgICAgICAgICAgYXV0byByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7Ci0gICAg
ICAgICAgICBpZiAoIXJlbmRlcmVyKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgLy8gRklYTUU6IEFyZSB0aGVyZSBhbnkgbm9kZSB0eXBlcyB0aGF0IGhhdmUgcmVuZGVy
ZXJzLCBidXQgdGhhdCB3ZSBzaG91bGQgYmUgc2tpcHBpbmc/Ci0gICAgICAgICAgICBjb25zdCBG
b250JiBwcmltYXJ5Rm9udCA9IHJlbmRlcmVyLT5zdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFy
eUZvbnQoKTsKLSAgICAgICAgICAgIGlmICghZm9udCkKLSAgICAgICAgICAgICAgICBmb250ID0g
JnByaW1hcnlGb250OwotICAgICAgICAgICAgZWxzZSBpZiAoZm9udCAhPSAmcHJpbWFyeUZvbnQp
IHsKLSAgICAgICAgICAgICAgICBoYXNNdWx0aXBsZUZvbnRzID0gdHJ1ZTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVy
biBmb250OwotfQotCiBOU0RpY3Rpb25hcnkqIEVkaXRvcjo6Zm9udEF0dHJpYnV0ZXNGb3JTZWxl
Y3Rpb25TdGFydCgpIGNvbnN0CiB7CiAgICAgTm9kZSogbm9kZVRvUmVtb3ZlOwpAQCAtMjUyLDMy
ICsyMDksNiBAQCB2b2lkIEVkaXRvcjo6cmVtb3ZlVW5jaGFuZ2VhYmxlU3R5bGVzKCkKICAgICBh
cHBseVN0eWxlVG9TZWxlY3Rpb24oZGVmYXVsdFN0eWxlLmdldCgpLCBFZGl0QWN0aW9uQ2hhbmdl
QXR0cmlidXRlcyk7CiB9CiAKLXN0YXRpYyBSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhSW5SVEZE
Rm9ybWF0KE5TQXR0cmlidXRlZFN0cmluZyAqc3RyaW5nKQotewotICAgIE5TVUludGVnZXIgbGVu
Z3RoID0gc3RyaW5nLmxlbmd0aDsKLSAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0KLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgcmV0dXJuIFNo
YXJlZEJ1ZmZlcjo6d3JhcE5TRGF0YShbc3RyaW5nIFJURkRGcm9tUmFuZ2U6TlNNYWtlUmFuZ2Uo
MCwgbGVuZ3RoKSBkb2N1bWVudEF0dHJpYnV0ZXM6bmlsXSk7Ci0gICAgRU5EX0JMT0NLX09CSkNf
RVhDRVBUSU9OUzsKLQotICAgIHJldHVybiBudWxscHRyOwotfQotCi1zdGF0aWMgUmVmUHRyPFNo
YXJlZEJ1ZmZlcj4gZGF0YUluUlRGRm9ybWF0KE5TQXR0cmlidXRlZFN0cmluZyAqc3RyaW5nKQot
ewotICAgIE5TVUludGVnZXIgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aDsKLSAgICBpZiAoIWxlbmd0
aCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQ
VElPTlM7Ci0gICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6d3JhcE5TRGF0YShbc3RyaW5nIFJURkZy
b21SYW5nZTpOU01ha2VSYW5nZSgwLCBsZW5ndGgpIGRvY3VtZW50QXR0cmlidXRlczpuaWxdKTsK
LSAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19
Ci0KIFN0cmluZyBFZGl0b3I6OnN0cmluZ1NlbGVjdGlvbkZvclBhc3RlYm9hcmRXaXRoSW1hZ2VB
bHRUZXh0KCkKIHsKICAgICBTdHJpbmcgdGV4dCA9IHNlbGVjdGVkVGV4dEZvckRhdGFUcmFuc2Zl
cigpOwpAQCAtMjg1LDI5ICsyMTYsNiBAQCBTdHJpbmcgRWRpdG9yOjpzdHJpbmdTZWxlY3Rpb25G
b3JQYXN0ZWJvYXJkV2l0aEltYWdlQWx0VGV4dCgpCiAgICAgcmV0dXJuIHRleHQ7CiB9CiAKLVJl
ZlB0cjxTaGFyZWRCdWZmZXI+IEVkaXRvcjo6c2VsZWN0aW9uSW5XZWJBcmNoaXZlRm9ybWF0KCkK
LXsKLSAgICBSZWZQdHI8TGVnYWN5V2ViQXJjaGl2ZT4gYXJjaGl2ZSA9IExlZ2FjeVdlYkFyY2hp
dmU6OmNyZWF0ZUZyb21TZWxlY3Rpb24oJm1fZnJhbWUpOwotICAgIGlmICghYXJjaGl2ZSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6d3JhcENGRGF0
YShhcmNoaXZlLT5yYXdEYXRhUmVwcmVzZW50YXRpb24oKS5nZXQoKSk7Ci19Ci0KLXZvaWQgRWRp
dG9yOjp3cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChQYXN0ZWJvYXJkJiBwYXN0ZWJvYXJkKQot
ewotICAgIE5TQXR0cmlidXRlZFN0cmluZyAqYXR0cmlidXRlZFN0cmluZyA9IGF0dHJpYnV0ZWRT
dHJpbmdGcm9tUmFuZ2UoKnNlbGVjdGVkUmFuZ2UoKSk7Ci0KLSAgICBQYXN0ZWJvYXJkV2ViQ29u
dGVudCBjb250ZW50OwotICAgIGNvbnRlbnQuY2FuU21hcnRDb3B5T3JEZWxldGUgPSBjYW5TbWFy
dENvcHlPckRlbGV0ZSgpOwotICAgIGNvbnRlbnQuZGF0YUluV2ViQXJjaGl2ZUZvcm1hdCA9IHNl
bGVjdGlvbkluV2ViQXJjaGl2ZUZvcm1hdCgpOwotICAgIGNvbnRlbnQuZGF0YUluUlRGREZvcm1h
dCA9IFthdHRyaWJ1dGVkU3RyaW5nIGNvbnRhaW5zQXR0YWNobWVudHNdID8gZGF0YUluUlRGREZv
cm1hdChhdHRyaWJ1dGVkU3RyaW5nKSA6IDA7Ci0gICAgY29udGVudC5kYXRhSW5SVEZGb3JtYXQg
PSBkYXRhSW5SVEZGb3JtYXQoYXR0cmlidXRlZFN0cmluZyk7Ci0gICAgY29udGVudC5kYXRhSW5T
dHJpbmdGb3JtYXQgPSBzdHJpbmdTZWxlY3Rpb25Gb3JQYXN0ZWJvYXJkV2l0aEltYWdlQWx0VGV4
dCgpOwotICAgIGNsaWVudCgpLT5nZXRDbGllbnRQYXN0ZWJvYXJkRGF0YUZvclJhbmdlKHNlbGVj
dGVkUmFuZ2UoKS5nZXQoKSwgY29udGVudC5jbGllbnRUeXBlcywgY29udGVudC5jbGllbnREYXRh
KTsKLQotICAgIHBhc3RlYm9hcmQud3JpdGUoY29udGVudCk7Ci19Ci0KIHN0YXRpYyB2b2lkIGdl
dEltYWdlKEVsZW1lbnQmIGltYWdlRWxlbWVudCwgUmVmUHRyPEltYWdlPiYgaW1hZ2UsIENhY2hl
ZEltYWdlKiYgY2FjaGVkSW1hZ2UpCiB7CiAgICAgYXV0byogcmVuZGVyZXIgPSBpbWFnZUVsZW1l
bnQucmVuZGVyZXIoKTsKQEAgLTU2OSw0MiArNDc3LDYgQEAgUmVmUHRyPERvY3VtZW50RnJhZ21l
bnQ+IEVkaXRvcjo6Y3JlYXRlRnJhZ21lbnRBbmRBZGRSZXNvdXJjZXMoTlNBdHRyaWJ1dGVkU3Ry
aW4KICAgICByZXR1cm4gV1RGTW92ZShmcmFnbWVudEFuZFJlc291cmNlcy5mcmFnbWVudCk7CiB9
CiAKLVJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBFZGl0b3I6OmNyZWF0ZUZyYWdtZW50Rm9ySW1h
Z2VSZXNvdXJjZUFuZEFkZFJlc291cmNlKFJlZlB0cjxBcmNoaXZlUmVzb3VyY2U+JiYgcmVzb3Vy
Y2UpCi17Ci0gICAgaWYgKCFyZXNvdXJjZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAg
ICBOU1VSTCAqVVJMID0gcmVzb3VyY2UtPnVybCgpOwotICAgIFN0cmluZyByZXNvdXJjZVVSTCA9
IFtVUkwgaXNGaWxlVVJMXSA/IFtVUkwgYWJzb2x1dGVTdHJpbmddIDogcmVzb3VyY2UtPnVybCgp
OwotCi0gICAgaWYgKERvY3VtZW50TG9hZGVyKiBsb2FkZXIgPSBtX2ZyYW1lLmxvYWRlcigpLmRv
Y3VtZW50TG9hZGVyKCkpCi0gICAgICAgIGxvYWRlci0+YWRkQXJjaGl2ZVJlc291cmNlKHJlc291
cmNlLnJlbGVhc2VOb25OdWxsKCkpOwotCi0gICAgYXV0byBpbWFnZUVsZW1lbnQgPSBIVE1MSW1h
Z2VFbGVtZW50OjpjcmVhdGUoKm1fZnJhbWUuZG9jdW1lbnQoKSk7Ci0gICAgaW1hZ2VFbGVtZW50
LT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKEhUTUxOYW1lczo6c3JjQXR0ciwg
cmVzb3VyY2VVUkwpOwotCi0gICAgYXV0byBmcmFnbWVudCA9IG1fZnJhbWUuZG9jdW1lbnQoKS0+
Y3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOwotICAgIGZyYWdtZW50LT5hcHBlbmRDaGlsZChpbWFn
ZUVsZW1lbnQpOwotCi0gICAgcmV0dXJuIFdURk1vdmUoZnJhZ21lbnQpOwotfQotCi12b2lkIEVk
aXRvcjo6cmVwbGFjZVNlbGVjdGlvbldpdGhBdHRyaWJ1dGVkU3RyaW5nKE5TQXR0cmlidXRlZFN0
cmluZyAqYXR0cmlidXRlZFN0cmluZywgTWFpbEJsb2NrcXVvdGVIYW5kbGluZyBtYWlsQmxvY2tx
dW90ZUhhbmRsaW5nKQotewotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLmlzTm9uZSgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KS5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpKSB7Ci0gICAgICAgIFJlZlB0cjxEb2N1bWVudEZy
YWdtZW50PiBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50QW5kQWRkUmVzb3VyY2VzKGF0dHJpYnV0
ZWRTdHJpbmcpOwotICAgICAgICBpZiAoZnJhZ21lbnQgJiYgc2hvdWxkSW5zZXJ0RnJhZ21lbnQo
ZnJhZ21lbnQsIHNlbGVjdGVkUmFuZ2UoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKQot
ICAgICAgICAgICAgcGFzdGVBc0ZyYWdtZW50KGZyYWdtZW50LnJlbGVhc2VOb25OdWxsKCksIGZh
bHNlLCBmYWxzZSwgbWFpbEJsb2NrcXVvdGVIYW5kbGluZyk7Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgU3RyaW5nIHRleHQgPSBbYXR0cmlidXRlZFN0cmluZyBzdHJpbmddOwotICAgICAgICBpZiAo
c2hvdWxkSW5zZXJ0VGV4dCh0ZXh0LCBzZWxlY3RlZFJhbmdlKCkuZ2V0KCksIEVkaXRvckluc2Vy
dEFjdGlvbjo6UGFzdGVkKSkKLSAgICAgICAgICAgIHBhc3RlQXNQbGFpblRleHQodGV4dCwgZmFs
c2UpOwotICAgIH0KLX0KLQogdm9pZCBFZGl0b3I6Omluc2VydERpY3RhdGlvblBocmFzZXMoVmVj
dG9yPFZlY3RvcjxTdHJpbmc+PiYmIGRpY3RhdGlvblBocmFzZXMsIFJldGFpblB0cjxpZD4gbWV0
YWRhdGEpCiB7CiAgICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNOb25lKCkpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0KaW5kZXggYjU0YmJkMTdlN2YwOGZlNmVhZjA5
OTdlNzg3M2U1ZjVhY2RkMjMxOS4uNTU2ZjA4ZjNhZWQzNTBiNjVlYTc5OGUxNmJiNmNjNTYzODli
YzM1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1t
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQpAQCAtNjgsNyAr
NjgsNiBAQAogI2ltcG9ydCAiV2ViTlNBdHRyaWJ1dGVkU3RyaW5nRXh0cmFzLmgiCiAjaW1wb3J0
ICJodG1sZWRpdGluZy5oIgogI2ltcG9ydCAibWFya3VwLmgiCi0jaW1wb3J0IDx3dGYvQmxvY2tP
YmpDRXhjZXB0aW9ucy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTEwNSw0OCArMTA0
LDYgQEAgdm9pZCBFZGl0b3I6OnBhc3RlV2l0aFBhc3RlYm9hcmQoUGFzdGVib2FyZCogcGFzdGVi
b2FyZCwgYm9vbCBhbGxvd1BsYWluVGV4dCwgTWEKICAgICBjbGllbnQoKS0+c2V0SW5zZXJ0aW9u
UGFzdGVib2FyZChTdHJpbmcoKSk7CiB9CiAKLWNvbnN0IEZvbnQqIEVkaXRvcjo6Zm9udEZvclNl
bGVjdGlvbihib29sJiBoYXNNdWx0aXBsZUZvbnRzKSBjb25zdAotewotICAgIGhhc011bHRpcGxl
Rm9udHMgPSBmYWxzZTsKLQotICAgIGlmICghbV9mcmFtZS5zZWxlY3Rpb24oKS5pc1JhbmdlKCkp
IHsKLSAgICAgICAgTm9kZSogbm9kZVRvUmVtb3ZlOwotICAgICAgICBhdXRvKiBzdHlsZSA9IHN0
eWxlRm9yU2VsZWN0aW9uU3RhcnQoJm1fZnJhbWUsIG5vZGVUb1JlbW92ZSk7IC8vIHNldHMgbm9k
ZVRvUmVtb3ZlCi0KLSAgICAgICAgY29uc3QgRm9udCogcmVzdWx0ID0gbnVsbHB0cjsKLSAgICAg
ICAgaWYgKHN0eWxlKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSAmc3R5bGUtPmZvbnRDYXNjYWRl
KCkucHJpbWFyeUZvbnQoKTsKLSAgICAgICAgICAgIGlmIChub2RlVG9SZW1vdmUpCi0gICAgICAg
ICAgICAgICAgbm9kZVRvUmVtb3ZlLT5yZW1vdmUoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1
cm4gcmVzdWx0OwotICAgIH0KLQotICAgIGNvbnN0IEZvbnQqIGZvbnQgPSBudWxscHRyOwotICAg
IFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJh
bmdlKCk7Ci0gICAgTm9kZSogc3RhcnROb2RlID0gYWRqdXN0ZWRTZWxlY3Rpb25TdGFydEZvclN0
eWxlQ29tcHV0YXRpb24obV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSkuZGVwcmVjYXRl
ZE5vZGUoKTsKLSAgICBpZiAocmFuZ2UgJiYgc3RhcnROb2RlKSB7Ci0gICAgICAgIE5vZGUqIHBh
c3RFbmQgPSByYW5nZS0+cGFzdExhc3ROb2RlKCk7Ci0gICAgICAgIC8vIEluIHRoZSBsb29wIGJl
bG93LCBuIHNob3VsZCBldmVudHVhbGx5IG1hdGNoIHBhc3RFbmQgYW5kIG5vdCBiZWNvbWUgbmls
LCBidXQgd2UndmUgc2VlbiBhdCBsZWFzdCBvbmUKLSAgICAgICAgLy8gdW5yZXByb2R1Y2libGUg
Y2FzZSB3aGVyZSB0aGlzIGRpZG4ndCBoYXBwZW4sIHNvIGNoZWNrIGZvciBudWxsIGFsc28uCi0g
ICAgICAgIGZvciAoTm9kZSogbm9kZSA9IHN0YXJ0Tm9kZTsgbm9kZSAmJiBub2RlICE9IHBhc3RF
bmQ7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlKSkgewotICAgICAgICAgICAgYXV0
byByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7Ci0gICAgICAgICAgICBpZiAoIXJlbmRlcmVy
KQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgLy8gRklYTUU6IEFyZSB0
aGVyZSBhbnkgbm9kZSB0eXBlcyB0aGF0IGhhdmUgcmVuZGVyZXJzLCBidXQgdGhhdCB3ZSBzaG91
bGQgYmUgc2tpcHBpbmc/Ci0gICAgICAgICAgICBjb25zdCBGb250JiBwcmltYXJ5Rm9udCA9IHJl
bmRlcmVyLT5zdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKTsKLSAgICAgICAgICAg
IGlmICghZm9udCkKLSAgICAgICAgICAgICAgICBmb250ID0gJnByaW1hcnlGb250OwotICAgICAg
ICAgICAgZWxzZSBpZiAoZm9udCAhPSAmcHJpbWFyeUZvbnQpIHsKLSAgICAgICAgICAgICAgICBo
YXNNdWx0aXBsZUZvbnRzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBmb250OwotfQotCiBOU0RpY3Rp
b25hcnkqIEVkaXRvcjo6Zm9udEF0dHJpYnV0ZXNGb3JTZWxlY3Rpb25TdGFydCgpIGNvbnN0CiB7
CiAgICAgTm9kZSogbm9kZVRvUmVtb3ZlOwpAQCAtMzA2LDE0ICsyNjMsNiBAQCBTdHJpbmcgRWRp
dG9yOjpzdHJpbmdTZWxlY3Rpb25Gb3JQYXN0ZWJvYXJkV2l0aEltYWdlQWx0VGV4dCgpCiAgICAg
cmV0dXJuIHRleHQ7CiB9CiAKLVJlZlB0cjxTaGFyZWRCdWZmZXI+IEVkaXRvcjo6c2VsZWN0aW9u
SW5XZWJBcmNoaXZlRm9ybWF0KCkKLXsKLSAgICBSZWZQdHI8TGVnYWN5V2ViQXJjaGl2ZT4gYXJj
aGl2ZSA9IExlZ2FjeVdlYkFyY2hpdmU6OmNyZWF0ZUZyb21TZWxlY3Rpb24oJm1fZnJhbWUpOwot
ICAgIGlmICghYXJjaGl2ZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIFNo
YXJlZEJ1ZmZlcjo6d3JhcENGRGF0YShhcmNoaXZlLT5yYXdEYXRhUmVwcmVzZW50YXRpb24oKS5n
ZXQoKSk7Ci19Ci0KIFN0cmluZyBFZGl0b3I6OnNlbGVjdGlvbkluSFRNTEZvcm1hdCgpCiB7CiAg
ICAgcmV0dXJuIGNyZWF0ZU1hcmt1cCgqc2VsZWN0ZWRSYW5nZSgpLCBudWxscHRyLCBBbm5vdGF0
ZUZvckludGVyY2hhbmdlLCBmYWxzZSwgUmVzb2x2ZU5vbkxvY2FsVVJMcyk7CkBAIC0zMzksMzIg
KzI4OCw2IEBAIFJlZlB0cjxSYW5nZT4gRWRpdG9yOjphZGp1c3RlZFNlbGVjdGlvblJhbmdlKCkK
ICAgICAgICAgcmFuZ2UtPnNldFN0YXJ0KCplbmNsb3NpbmdBbmNob3IsIDApOwogICAgIHJldHVy
biByYW5nZTsKIH0KLSAgICAKLXN0YXRpYyBSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhSW5SVEZE
Rm9ybWF0KE5TQXR0cmlidXRlZFN0cmluZyAqc3RyaW5nKQotewotICAgIE5TVUludGVnZXIgbGVu
Z3RoID0gc3RyaW5nLmxlbmd0aDsKLSAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0KLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgcmV0dXJuIFNo
YXJlZEJ1ZmZlcjo6d3JhcE5TRGF0YShbc3RyaW5nIFJURkRGcm9tUmFuZ2U6TlNNYWtlUmFuZ2Uo
MCwgbGVuZ3RoKSBkb2N1bWVudEF0dHJpYnV0ZXM6QHsgfV0pOwotICAgIEVORF9CTE9DS19PQkpD
X0VYQ0VQVElPTlM7Ci0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotc3RhdGljIFJlZlB0cjxT
aGFyZWRCdWZmZXI+IGRhdGFJblJURkZvcm1hdChOU0F0dHJpYnV0ZWRTdHJpbmcgKnN0cmluZykK
LXsKLSAgICBOU1VJbnRlZ2VyIGxlbmd0aCA9IHN0cmluZy5sZW5ndGg7Ci0gICAgaWYgKCFsZW5n
dGgpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENF
UFRJT05TOwotICAgIHJldHVybiBTaGFyZWRCdWZmZXI6OndyYXBOU0RhdGEoW3N0cmluZyBSVEZG
cm9tUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgbGVuZ3RoKSBkb2N1bWVudEF0dHJpYnV0ZXM6QHsgfV0p
OwotICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0KLSAgICByZXR1cm4gbnVsbHB0cjsK
LX0KIAogUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gRWRpdG9yOjpkYXRhU2VsZWN0aW9uRm9yUGFzdGVi
b2FyZChjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlKQogewpAQCAtMzkzLDIyICszMTYsNiBA
QCBSZWZQdHI8U2hhcmVkQnVmZmVyPiBFZGl0b3I6OmRhdGFTZWxlY3Rpb25Gb3JQYXN0ZWJvYXJk
KGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZAogICAgIHJldHVybiBudWxscHRyOwogfQogCi12b2lk
IEVkaXRvcjo6d3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoUGFzdGVib2FyZCYgcGFzdGVib2Fy
ZCkKLXsKLSAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmcgPSBhdHRyaWJ1
dGVkU3RyaW5nRnJvbVJhbmdlKCpzZWxlY3RlZFJhbmdlKCkpOwotCi0gICAgUGFzdGVib2FyZFdl
YkNvbnRlbnQgY29udGVudDsKLSAgICBjb250ZW50LmNhblNtYXJ0Q29weU9yRGVsZXRlID0gY2Fu
U21hcnRDb3B5T3JEZWxldGUoKTsKLSAgICBjb250ZW50LmRhdGFJbldlYkFyY2hpdmVGb3JtYXQg
PSBzZWxlY3Rpb25JbldlYkFyY2hpdmVGb3JtYXQoKTsKLSAgICBjb250ZW50LmRhdGFJblJURkRG
b3JtYXQgPSBbYXR0cmlidXRlZFN0cmluZyBjb250YWluc0F0dGFjaG1lbnRzXSA/IGRhdGFJblJU
RkRGb3JtYXQoYXR0cmlidXRlZFN0cmluZykgOiAwOwotICAgIGNvbnRlbnQuZGF0YUluUlRGRm9y
bWF0ID0gZGF0YUluUlRGRm9ybWF0KGF0dHJpYnV0ZWRTdHJpbmcpOwotICAgIGNvbnRlbnQuZGF0
YUluSFRNTEZvcm1hdCA9IHNlbGVjdGlvbkluSFRNTEZvcm1hdCgpOwotICAgIGNvbnRlbnQuZGF0
YUluU3RyaW5nRm9ybWF0ID0gc3RyaW5nU2VsZWN0aW9uRm9yUGFzdGVib2FyZFdpdGhJbWFnZUFs
dFRleHQoKTsKLSAgICBjbGllbnQoKS0+Z2V0Q2xpZW50UGFzdGVib2FyZERhdGFGb3JSYW5nZShz
ZWxlY3RlZFJhbmdlKCkuZ2V0KCksIGNvbnRlbnQuY2xpZW50VHlwZXMsIGNvbnRlbnQuY2xpZW50
RGF0YSk7Ci0KLSAgICBwYXN0ZWJvYXJkLndyaXRlKGNvbnRlbnQpOwotfQotCiBzdGF0aWMgdm9p
ZCBnZXRJbWFnZShFbGVtZW50JiBpbWFnZUVsZW1lbnQsIFJlZlB0cjxJbWFnZT4mIGltYWdlLCBD
YWNoZWRJbWFnZSomIGNhY2hlZEltYWdlKQogewogICAgIGF1dG8qIHJlbmRlcmVyID0gaW1hZ2VF
bGVtZW50LnJlbmRlcmVyKCk7CkBAIC02NjEsMjQgKzU2OCw2IEBAIFJlZlB0cjxEb2N1bWVudEZy
YWdtZW50PiBFZGl0b3I6OndlYkNvbnRlbnRGcm9tUGFzdGVib2FyZChQYXN0ZWJvYXJkJiBwYXN0
ZWJvYXJkCiAgICAgcmV0dXJuIFdURk1vdmUocmVhZGVyLmZyYWdtZW50KTsKIH0KIAotUmVmUHRy
PERvY3VtZW50RnJhZ21lbnQ+IEVkaXRvcjo6Y3JlYXRlRnJhZ21lbnRGb3JJbWFnZVJlc291cmNl
QW5kQWRkUmVzb3VyY2UoUmVmUHRyPEFyY2hpdmVSZXNvdXJjZT4mJiByZXNvdXJjZSkKLXsKLSAg
ICBpZiAoIXJlc291cmNlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFN0cmluZyBy
ZXNvdXJjZVVSTCA9IHJlc291cmNlLT51cmwoKS5zdHJpbmcoKTsKLSAgICBpZiAoRG9jdW1lbnRM
b2FkZXIqIGxvYWRlciA9IG1fZnJhbWUubG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKSkKLSAgICAg
ICAgbG9hZGVyLT5hZGRBcmNoaXZlUmVzb3VyY2UocmVzb3VyY2UucmVsZWFzZU5vbk51bGwoKSk7
Ci0KLSAgICBhdXRvIGltYWdlRWxlbWVudCA9IEhUTUxJbWFnZUVsZW1lbnQ6OmNyZWF0ZSgqbV9m
cmFtZS5kb2N1bWVudCgpKTsKLSAgICBpbWFnZUVsZW1lbnQtPnNldEF0dHJpYnV0ZVdpdGhvdXRT
eW5jaHJvbml6YXRpb24oSFRNTE5hbWVzOjpzcmNBdHRyLCByZXNvdXJjZVVSTCk7Ci0KLSAgICBh
dXRvIGZyYWdtZW50ID0gZG9jdW1lbnQoKS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7Ci0gICAg
ZnJhZ21lbnQtPmFwcGVuZENoaWxkKGltYWdlRWxlbWVudCk7Ci0KLSAgICByZXR1cm4gV1RGTW92
ZShmcmFnbWVudCk7Ci19Ci0KIFJlZjxEb2N1bWVudEZyYWdtZW50PiBFZGl0b3I6OmNyZWF0ZUZy
YWdtZW50Rm9ySW1hZ2VBbmRVUkwoY29uc3QgU3RyaW5nJiB1cmwpCiB7CiAgICAgYXV0byBpbWFn
ZUVsZW1lbnQgPSBIVE1MSW1hZ2VFbGVtZW50OjpjcmVhdGUoKm1fZnJhbWUuZG9jdW1lbnQoKSk7
CkBAIC03MTcsMjIgKzYwNiw2IEBAIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBFZGl0b3I6OmNy
ZWF0ZUZyYWdtZW50QW5kQWRkUmVzb3VyY2VzKE5TQXR0cmlidXRlZFN0cmluCiAgICAgcmV0dXJu
IFdURk1vdmUoZnJhZ21lbnRBbmRSZXNvdXJjZXMuZnJhZ21lbnQpOwogfQogCi12b2lkIEVkaXRv
cjo6cmVwbGFjZVNlbGVjdGlvbldpdGhBdHRyaWJ1dGVkU3RyaW5nKE5TQXR0cmlidXRlZFN0cmlu
ZyAqYXR0cmlidXRlZFN0cmluZywgTWFpbEJsb2NrcXVvdGVIYW5kbGluZyBtYWlsQmxvY2txdW90
ZUhhbmRsaW5nKQotewotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLmlzTm9uZSgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5p
c0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpKSB7Ci0gICAgICAgIFJlZlB0cjxEb2N1bWVudEZyYWdt
ZW50PiBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50QW5kQWRkUmVzb3VyY2VzKGF0dHJpYnV0ZWRT
dHJpbmcpOwotICAgICAgICBpZiAoZnJhZ21lbnQgJiYgc2hvdWxkSW5zZXJ0RnJhZ21lbnQoZnJh
Z21lbnQsIHNlbGVjdGVkUmFuZ2UoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKQotICAg
ICAgICAgICAgcGFzdGVBc0ZyYWdtZW50KGZyYWdtZW50LnJlbGVhc2VOb25OdWxsKCksIGZhbHNl
LCBmYWxzZSwgbWFpbEJsb2NrcXVvdGVIYW5kbGluZyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
U3RyaW5nIHRleHQgPSBbYXR0cmlidXRlZFN0cmluZyBzdHJpbmddOwotICAgICAgICBpZiAoc2hv
dWxkSW5zZXJ0VGV4dCh0ZXh0LCBzZWxlY3RlZFJhbmdlKCkuZ2V0KCksIEVkaXRvckluc2VydEFj
dGlvbjo6UGFzdGVkKSkKLSAgICAgICAgICAgIHBhc3RlQXNQbGFpblRleHQodGV4dCwgZmFsc2Up
OwotICAgIH0KLX0KLQogdm9pZCBFZGl0b3I6OmFwcGx5Rm9udFN0eWxlcyhjb25zdCBTdHJpbmcm
IGZvbnRGYW1pbHksIGRvdWJsZSBmb250U2l6ZSwgdW5zaWduZWQgZm9udFRyYWl0cykKIHsKICAg
ICBhdXRvJiBjc3NWYWx1ZVBvb2wgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>298880</attachid>
            <date>2017-01-14 20:23:10 -0800</date>
            <delta_ts>2017-01-14 21:14:06 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-167062-20170114202126.patch</filename>
            <type>text/plain</type>
            <size>29383</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjEwNzcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTQxOTRlNjQ2MmViZmMx
OWRlNTYxM2FhOTcxOGQ3YzNhYThkMjA1ZS4uOGI3YzM4Nzk5MTZkOWFlNGFlYmFhMWY3MjQzNDZm
OTFlNzBiNWI3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUzIEBACisyMDE3LTAxLTE0ICBUaW0g
SG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgorCisgICAgICAgIERlLWR1cGxpY2F0
ZSBzb21lIChuZWFybHkpIGlkZW50aWNhbCBjb2RlIGluIEVkaXRvcihNYWN8SU9TKS5tbQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY3MDYyCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgRGFuIEJlcm5zdGVpbi4KKworICAgICAgICBObyBuZXcgdGVzdHMs
IGp1c3QgcmVmYWN0b3JpbmcuCisKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OmZvbnRGb3JTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjpzdHlsZUZvclNlbGVjdGlvblN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkVk
aXRvcjo6YWRqdXN0ZWRTZWxlY3Rpb25SYW5nZSk6CisgICAgICAgICogZWRpdGluZy9FZGl0b3Iu
aDoKKyAgICAgICAgTW92ZSB0aGVzZSB0aHJlZSBmdW5jdGlvbnMgdG8gRWRpdG9yIGFuZCB1bmd1
YXJkIHRoZW0sIGJlY2F1c2UgdGhleSdyZQorICAgICAgICBub3QgQ29jb2Egc3BlY2lmaWMuCisK
KyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjp3cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZCk6CisgICAgICAgIChXZWJDb3Jl
OjpFZGl0b3I6OnNlbGVjdGlvbkluV2ViQXJjaGl2ZUZvcm1hdCk6CisgICAgICAgIChXZWJDb3Jl
OjpFZGl0b3I6OnJlcGxhY2VTZWxlY3Rpb25XaXRoQXR0cmlidXRlZFN0cmluZyk6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6OmNyZWF0ZUZyYWdtZW50Rm9ySW1hZ2VSZXNvdXJjZUFuZEFkZFJl
c291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6ZGF0YUluUlRGREZvcm1hdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmRhdGFJblJURkZvcm1hdCk6CisgICAgICAgIE1vdmUg
dGhlc2Ugc2l4IGZ1bmN0aW9ucyBoZXJlLgorICAgICAgICBzZWxlY3Rpb25JbldlYkFyY2hpdmVG
b3JtYXQgYW5kIHJlcGxhY2VTZWxlY3Rpb25XaXRoQXR0cmlidXRlZFN0cmluZyBhcmUKKyAgICAg
ICAgZW50aXJlbHkgaWRlbnRpY2FsOyB3cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZCBhbmQgY3Jl
YXRlRnJhZ21lbnQuLi4KKyAgICAgICAgYm90aCBoYXZlIHNsaWdodGx5IHN1c3BpY2lvdXMtbG9v
a2luZyBkaWZmZXJlbmNlcyB0aGF0IEkgbGVmdCBpbnRhY3QKKyAgICAgICAgYW5kIHdyb3RlIGNv
bW1lbnRzIGFib3V0IChlc3BlY2lhbGx5IGNyZWF0ZUZyYWdtZW50Li4uLCB0aGUgb3RoZXIgb25l
CisgICAgICAgIGlzIHNvbWV3aGF0IGV4cGxpY2FibGUpLiBUaGUgdHdvIGRhdGFJblJURihEKUZv
cm1hdCBmdW5jdGlvbnMgdXNlZCB0bworICAgICAgICBiZSBzdGF0aWMgZnVuY3Rpb25zLCBidXQg
Zm9yIG5vdyBhcmUgcmVxdWlyZWQgZnJvbSBib3RoIEVkaXRvckNvY29hCisgICAgICAgIGFuZCBF
ZGl0b3IoTWFjfElPUyksIHNvIHdlJ2xsIG1ha2UgdGhlbSBzdGF0aWMgbWVtYmVyIGZ1bmN0aW9u
cy4KKworICAgICAgICAqIGVkaXRpbmcvaW9zL0VkaXRvcklPUy5tbToKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6Zm9udEZvclNlbGVjdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpFZGl0b3I6OnNlbGVjdGlvbkluV2ViQXJjaGl2ZUZvcm1hdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpkYXRhSW5SVEZERm9ybWF0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OmRhdGFJblJURkZvcm1hdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Ondy
aXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkVk
aXRvcjo6Y3JlYXRlRnJhZ21lbnRGb3JJbWFnZVJlc291cmNlQW5kQWRkUmVzb3VyY2UpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpyZXBsYWNlU2VsZWN0aW9uV2l0aEF0dHJp
YnV0ZWRTdHJpbmcpOiBEZWxldGVkLgorICAgICAgICAqIGVkaXRpbmcvbWFjL0VkaXRvck1hYy5t
bToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Zm9udEZvclNlbGVjdGlvbik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNlbGVjdGlvbkluV2ViQXJjaGl2ZUZvcm1hdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpkYXRhSW5SVEZERm9ybWF0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OmRhdGFJblJURkZvcm1hdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpFZGl0b3I6OndyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y3JlYXRlRnJhZ21lbnRGb3JJbWFnZVJlc291cmNlQW5k
QWRkUmVzb3VyY2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpyZXBsYWNl
U2VsZWN0aW9uV2l0aEF0dHJpYnV0ZWRTdHJpbmcpOiBEZWxldGVkLgorCiAyMDE3LTAxLTE0ICBa
YWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgU21hbGwgY29kZSBjbGVh
bnVwIGFmdGVyIHIyMTA3NjAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRp
dG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAppbmRleCA0ZDM4NDFi
NmIwMTc0MTMzN2UzM2QyMDMxOThiNzY1M2ZmYzNjN2YzLi5iOWQxYjA2N2Q3ODFmY2IyNjM2ZGI4
MjA1N2U2YTk4NWZhNTY1MDg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCkBAIC01Niw2
ICs1Niw3IEBACiAjaW5jbHVkZSAiSFRNTEltYWdlRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxJ
bnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MU3Bh
bkVsZW1lbnQuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiSW5kZW50
T3V0ZGVudENvbW1hbmQuaCIKICNpbmNsdWRlICJJbnB1dEV2ZW50LmgiCkBAIC0zNjQ2LDQgKzM2
NDcsOTggQEAgRG9jdW1lbnQmIEVkaXRvcjo6ZG9jdW1lbnQoKSBjb25zdAogICAgIHJldHVybiAq
bV9mcmFtZS5kb2N1bWVudCgpOwogfQogCitSZWZQdHI8UmFuZ2U+IEVkaXRvcjo6YWRqdXN0ZWRT
ZWxlY3Rpb25SYW5nZSgpCit7CisgICAgLy8gRklYTUU6IFdoeSBkbyB3ZSBuZWVkIHRvIGFkanVz
dCB0aGUgc2VsZWN0aW9uIHRvIGluY2x1ZGUgdGhlIGFuY2hvciB0YWcgaXQncyBpbj8KKyAgICAv
LyBXaG9ldmVyIHdyb3RlIHRoaXMgY29kZSBvcmlnaW5hbGx5IGZvcmdvdCB0byBsZWF2ZSB1cyBh
IGNvbW1lbnQgZXhwbGFpbmluZyB0aGUgcmF0aW9uYWxlLgorICAgIFJlZlB0cjxSYW5nZT4gcmFu
Z2UgPSBzZWxlY3RlZFJhbmdlKCk7CisgICAgTm9kZSogY29tbW9uQW5jZXN0b3IgPSByYW5nZS0+
Y29tbW9uQW5jZXN0b3JDb250YWluZXIoKTsKKyAgICBBU1NFUlQoY29tbW9uQW5jZXN0b3IpOwor
ICAgIGF1dG8qIGVuY2xvc2luZ0FuY2hvciA9IGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFnKGZpcnN0
UG9zaXRpb25Jbk5vZGUoY29tbW9uQW5jZXN0b3IpLCBIVE1MTmFtZXM6OmFUYWcpOworICAgIGlm
IChlbmNsb3NpbmdBbmNob3IgJiYgY29tcGFyZVBvc2l0aW9ucyhmaXJzdFBvc2l0aW9uSW5PckJl
Zm9yZU5vZGUocmFuZ2UtPnN0YXJ0UG9zaXRpb24oKS5hbmNob3JOb2RlKCkpLCByYW5nZS0+c3Rh
cnRQb3NpdGlvbigpKSA+PSAwKQorICAgICAgICByYW5nZS0+c2V0U3RhcnQoKmVuY2xvc2luZ0Fu
Y2hvciwgMCk7CisgICAgcmV0dXJuIHJhbmdlOworfQorCisvLyBGSVhNRTogVGhpcyBmaWd1cmVz
IG91dCB0aGUgY3VycmVudCBzdHlsZSBieSBpbnNlcnRpbmcgYSA8c3Bhbj4hCitjb25zdCBSZW5k
ZXJTdHlsZSogRWRpdG9yOjpzdHlsZUZvclNlbGVjdGlvblN0YXJ0KEZyYW1lKiBmcmFtZSwgTm9k
ZSomIG5vZGVUb1JlbW92ZSkKK3sKKyAgICBub2RlVG9SZW1vdmUgPSBudWxscHRyOworCisgICAg
aWYgKGZyYW1lLT5zZWxlY3Rpb24oKS5pc05vbmUoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICBQb3NpdGlvbiBwb3NpdGlvbiA9IGFkanVzdGVkU2VsZWN0aW9uU3RhcnRGb3JTdHls
ZUNvbXB1dGF0aW9uKGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgaWYgKCFw
b3NpdGlvbi5pc0NhbmRpZGF0ZSgpIHx8IHBvc2l0aW9uLmlzTnVsbCgpKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IHR5cGluZ1N0eWxlID0gZnJh
bWUtPnNlbGVjdGlvbigpLnR5cGluZ1N0eWxlKCk7CisgICAgaWYgKCF0eXBpbmdTdHlsZSB8fCAh
dHlwaW5nU3R5bGUtPnN0eWxlKCkpCisgICAgICAgIHJldHVybiAmcG9zaXRpb24uZGVwcmVjYXRl
ZE5vZGUoKS0+cmVuZGVyZXIoKS0+c3R5bGUoKTsKKworICAgIGF1dG8gc3R5bGVFbGVtZW50ID0g
SFRNTFNwYW5FbGVtZW50OjpjcmVhdGUoKmZyYW1lLT5kb2N1bWVudCgpKTsKKworICAgIFN0cmlu
ZyBzdHlsZVRleHQgPSB0eXBpbmdTdHlsZS0+c3R5bGUoKS0+YXNUZXh0KCkgKyAiIGRpc3BsYXk6
IGlubGluZSI7CisgICAgc3R5bGVFbGVtZW50LT5zZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjpzdHls
ZUF0dHIsIHN0eWxlVGV4dCk7CisKKyAgICBzdHlsZUVsZW1lbnQtPmFwcGVuZENoaWxkKGZyYW1l
LT5kb2N1bWVudCgpLT5jcmVhdGVFZGl0aW5nVGV4dE5vZGUoZW1wdHlTdHJpbmcoKSkpOworCisg
ICAgYXV0byBwb3NpdGlvbk5vZGUgPSBwb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpOworICAgIGlm
ICghcG9zaXRpb25Ob2RlIHx8ICFwb3NpdGlvbk5vZGUtPnBhcmVudE5vZGUoKSB8fCBwb3NpdGlv
bk5vZGUtPnBhcmVudE5vZGUoKS0+YXBwZW5kQ2hpbGQoc3R5bGVFbGVtZW50KS5oYXNFeGNlcHRp
b24oKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBub2RlVG9SZW1vdmUgPSBzdHls
ZUVsZW1lbnQucHRyKCk7CisgICAgCisgICAgZnJhbWUtPmRvY3VtZW50KCktPnVwZGF0ZVN0eWxl
SWZOZWVkZWQoKTsKKyAgICByZXR1cm4gc3R5bGVFbGVtZW50LT5yZW5kZXJlcigpID8gJnN0eWxl
RWxlbWVudC0+cmVuZGVyZXIoKS0+c3R5bGUoKSA6IG51bGxwdHI7Cit9CisKK2NvbnN0IEZvbnQq
IEVkaXRvcjo6Zm9udEZvclNlbGVjdGlvbihib29sJiBoYXNNdWx0aXBsZUZvbnRzKSBjb25zdAor
eworICAgIGhhc011bHRpcGxlRm9udHMgPSBmYWxzZTsKKworICAgIGlmICghbV9mcmFtZS5zZWxl
Y3Rpb24oKS5pc1JhbmdlKCkpIHsKKyAgICAgICAgTm9kZSogbm9kZVRvUmVtb3ZlOworICAgICAg
ICBhdXRvKiBzdHlsZSA9IHN0eWxlRm9yU2VsZWN0aW9uU3RhcnQoJm1fZnJhbWUsIG5vZGVUb1Jl
bW92ZSk7IC8vIHNldHMgbm9kZVRvUmVtb3ZlCisKKyAgICAgICAgY29uc3QgRm9udCogZm9udCA9
IG51bGxwdHI7CisgICAgICAgIGlmIChzdHlsZSkgeworICAgICAgICAgICAgZm9udCA9ICZzdHls
ZS0+Zm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpOworICAgICAgICAgICAgaWYgKG5vZGVUb1Jl
bW92ZSkKKyAgICAgICAgICAgICAgICBub2RlVG9SZW1vdmUtPnJlbW92ZSgpOworICAgICAgICB9
CisKKyAgICAgICAgcmV0dXJuIGZvbnQ7CisgICAgfQorCisgICAgUmVmUHRyPFJhbmdlPiByYW5n
ZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBpZiAoIXJh
bmdlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIE5vZGUqIHN0YXJ0Tm9kZSA9IGFk
anVzdGVkU2VsZWN0aW9uU3RhcnRGb3JTdHlsZUNvbXB1dGF0aW9uKG1fZnJhbWUuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkpLmRlcHJlY2F0ZWROb2RlKCk7CisgICAgaWYgKCFzdGFydE5vZGUpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgY29uc3QgRm9udCogZm9udCA9IG51bGxwdHI7
CisgICAgTm9kZSogcGFzdEVuZCA9IHJhbmdlLT5wYXN0TGFzdE5vZGUoKTsKKyAgICAvLyBJbiB0
aGUgbG9vcCBiZWxvdywgbiBzaG91bGQgZXZlbnR1YWxseSBtYXRjaCBwYXN0RW5kIGFuZCBub3Qg
YmVjb21lIG5pbCwgYnV0IHdlJ3ZlIHNlZW4gYXQgbGVhc3Qgb25lCisgICAgLy8gdW5yZXByb2R1
Y2libGUgY2FzZSB3aGVyZSB0aGlzIGRpZG4ndCBoYXBwZW4sIHNvIGNoZWNrIGZvciBudWxsIGFs
c28uCisgICAgZm9yIChOb2RlKiBub2RlID0gc3RhcnROb2RlOyBub2RlICYmIG5vZGUgIT0gcGFz
dEVuZDsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKm5vZGUpKSB7CisgICAgICAgIGF1dG8g
cmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOworICAgICAgICBpZiAoIXJlbmRlcmVyKQorICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIC8vIEZJWE1FOiBBcmUgdGhlcmUgYW55IG5vZGUg
dHlwZXMgdGhhdCBoYXZlIHJlbmRlcmVycywgYnV0IHRoYXQgd2Ugc2hvdWxkIGJlIHNraXBwaW5n
PworICAgICAgICBjb25zdCBGb250JiBwcmltYXJ5Rm9udCA9IHJlbmRlcmVyLT5zdHlsZSgpLmZv
bnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKTsKKyAgICAgICAgaWYgKCFmb250KQorICAgICAgICAg
ICAgZm9udCA9ICZwcmltYXJ5Rm9udDsKKyAgICAgICAgZWxzZSBpZiAoZm9udCAhPSAmcHJpbWFy
eUZvbnQpIHsKKyAgICAgICAgICAgIGhhc011bHRpcGxlRm9udHMgPSB0cnVlOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZm9udDsKK30KKworCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0VkaXRvci5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAppbmRleCA3MzMwZWJi
MDNlYTg0MWE3YzhlMTBkYzNiMDgzYjc0MTFkMDg5MTcxLi41NjdjNjViNjQ5MzUxMjdmNjc4ZTcz
OWM4MDAwODRhYTYzYzdiNTY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKQEAgLTQ0MywxMCAr
NDQzLDExIEBAIHB1YmxpYzoKIAogICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiB3ZWJDb250
ZW50RnJvbVBhc3RlYm9hcmQoUGFzdGVib2FyZCYsIFJhbmdlJiBjb250ZXh0LCBib29sIGFsbG93
UGxhaW5UZXh0LCBib29sJiBjaG9zZVBsYWluVGV4dCk7CiAKLSNpZiBQTEFURk9STShDT0NPQSkK
KyAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCBGb250KiBmb250Rm9yU2VsZWN0aW9uKGJvb2wmIGhh
c011bHRpcGxlRm9udHMpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBjb25zdCBS
ZW5kZXJTdHlsZSogc3R5bGVGb3JTZWxlY3Rpb25TdGFydChGcmFtZSogLCBOb2RlICombm9kZVRv
UmVtb3ZlKTsKKworI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIHZvaWQgZ2V0VGV4dERlY29yYXRp
b25BdHRyaWJ1dGVzUmVzcGVjdGluZ1R5cGluZ1N0eWxlKGNvbnN0IFJlbmRlclN0eWxlJiwgTlNN
dXRhYmxlRGljdGlvbmFyeSopIGNvbnN0OwotICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IEZvbnQq
IGZvbnRGb3JTZWxlY3Rpb24oYm9vbCYpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIE5TRGlj
dGlvbmFyeSAqZm9udEF0dHJpYnV0ZXNGb3JTZWxlY3Rpb25TdGFydCgpIGNvbnN0OwogICAgIFdF
QkNPUkVfRVhQT1JUIFN0cmluZyBzdHJpbmdTZWxlY3Rpb25Gb3JQYXN0ZWJvYXJkKCk7CiAgICAg
U3RyaW5nIHN0cmluZ1NlbGVjdGlvbkZvclBhc3RlYm9hcmRXaXRoSW1hZ2VBbHRUZXh0KCk7CkBA
IC01MTIsMTYgKzUxMywyMCBAQCBwcml2YXRlOgogCiAgICAgYm9vbCB1bmlmaWVkVGV4dENoZWNr
ZXJFbmFibGVkKCkgY29uc3Q7CiAKKyAgICBSZWZQdHI8UmFuZ2U+IGFkanVzdGVkU2VsZWN0aW9u
UmFuZ2UoKTsKKwogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+
IHNlbGVjdGlvbkluV2ViQXJjaGl2ZUZvcm1hdCgpOwogICAgIFN0cmluZyBzZWxlY3Rpb25JbkhU
TUxGb3JtYXQoKTsKICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBpbWFnZUluV2ViQXJjaGl2ZUZv
cm1hdChFbGVtZW50Jik7Ci0gICAgUmVmUHRyPFJhbmdlPiBhZGp1c3RlZFNlbGVjdGlvblJhbmdl
KCk7CiAgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50Rm9ySW1hZ2VS
ZXNvdXJjZUFuZEFkZFJlc291cmNlKFJlZlB0cjxBcmNoaXZlUmVzb3VyY2U+JiYpOwogICAgIFJl
ZjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZvckltYWdlQW5kVVJMKGNvbnN0IFN0
cmluZyYpOwogICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEFuZEFk
ZFJlc291cmNlcyhOU0F0dHJpYnV0ZWRTdHJpbmcgKik7CiAgICAgRnJhZ21lbnRBbmRSZXNvdXJj
ZXMgY3JlYXRlRnJhZ21lbnQoTlNBdHRyaWJ1dGVkU3RyaW5nICopOwogICAgIHZvaWQgZmlsbElu
VXNlclZpc2libGVGb3JtKFBhc3RlYm9hcmRVUkwmKTsKKworICAgIHN0YXRpYyBSZWZQdHI8U2hh
cmVkQnVmZmVyPiBkYXRhSW5SVEZERm9ybWF0KE5TQXR0cmlidXRlZFN0cmluZyAqKTsKKyAgICBz
dGF0aWMgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YUluUlRGRm9ybWF0KE5TQXR0cmlidXRlZFN0
cmluZyAqKTsKICNlbmRpZgogCiAgICAgdm9pZCBwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0
aW9uRm9yQ3V0KGNvbnN0IFN0cmluZyYsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRWRpdG9yQ29jb2EubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tCmluZGV4IGM1N2Q2NGQzOTdh
ZTQ2Y2IyZTQyOWU5MDk5ODQ1MzlkNzBkODRiOWYuLjBhNWQzNWZmNTk1M2I0N2Q3MzNhZDVlYWNl
NTFlMWZjYjg4MzE4NDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2Ev
RWRpdG9yQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9FZGl0b3JD
b2NvYS5tbQpAQCAtMzAsMTYgKzMwLDIzIEBACiAjaW1wb3J0ICJDU1NWYWx1ZUxpc3QuaCIKICNp
bXBvcnQgIkNTU1ZhbHVlUG9vbC5oIgogI2ltcG9ydCAiRG9jdW1lbnRGcmFnbWVudC5oIgorI2lt
cG9ydCAiRG9jdW1lbnRMb2FkZXIuaCIKICNpbXBvcnQgIkVkaXRpbmdTdHlsZS5oIgorI2ltcG9y
dCAiRWRpdG9yQ2xpZW50LmgiCiAjaW1wb3J0ICJGcmFtZS5oIgogI2ltcG9ydCAiRnJhbWVTZWxl
Y3Rpb24uaCIKKyNpbXBvcnQgIkhUTUxDb252ZXJ0ZXIuaCIKKyNpbXBvcnQgIkhUTUxJbWFnZUVs
ZW1lbnQuaCIKICNpbXBvcnQgIkhUTUxTcGFuRWxlbWVudC5oIgorI2ltcG9ydCAiTGVnYWN5V2Vi
QXJjaGl2ZS5oIgogI2ltcG9ydCAiTlNBdHRyaWJ1dGVkU3RyaW5nU1BJLmgiCisjaW1wb3J0ICJQ
YXN0ZWJvYXJkLmgiCiAjaW1wb3J0ICJSZW5kZXJFbGVtZW50LmgiCiAjaW1wb3J0ICJSZW5kZXJT
dHlsZS5oIgogI2ltcG9ydCAiU29mdExpbmtpbmcuaCIKICNpbXBvcnQgIlRleHQuaCIKICNpbXBv
cnQgImh0bWxlZGl0aW5nLmgiCisjaW1wb3J0IDx3dGYvQmxvY2tPYmpDRXhjZXB0aW9ucy5oPgog
CiAjaWYgUExBVEZPUk0oSU9TKQogU09GVF9MSU5LX1BSSVZBVEVfRlJBTUVXT1JLKFdlYktpdExl
Z2FjeSkKQEAgLTUzLDM5ICs2MCw2IEBAIFNPRlRfTElOSyhXZWJLaXRMZWdhY3ksIF9XZWJDcmVh
dGVGcmFnbWVudCwgdm9pZCwgKFdlYkNvcmU6OkRvY3VtZW50JiBkb2N1bWVudCwKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi0vLyBGSVhNRTogVGhpcyBmaWd1cmVzIG91dCB0aGUgY3VycmVudCBz
dHlsZSBieSBpbnNlcnRpbmcgYSA8c3Bhbj4hCi1jb25zdCBSZW5kZXJTdHlsZSogRWRpdG9yOjpz
dHlsZUZvclNlbGVjdGlvblN0YXJ0KEZyYW1lKiBmcmFtZSwgTm9kZSomIG5vZGVUb1JlbW92ZSkK
LXsKLSAgICBub2RlVG9SZW1vdmUgPSBudWxscHRyOwotICAgIAotICAgIGlmIChmcmFtZS0+c2Vs
ZWN0aW9uKCkuaXNOb25lKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgUG9zaXRp
b24gcG9zaXRpb24gPSBhZGp1c3RlZFNlbGVjdGlvblN0YXJ0Rm9yU3R5bGVDb21wdXRhdGlvbihm
cmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwotICAgIGlmICghcG9zaXRpb24uaXNDYW5k
aWRhdGUoKSB8fCBwb3NpdGlvbi5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiB0eXBpbmdTdHlsZSA9IGZyYW1lLT5zZWxlY3Rpb24o
KS50eXBpbmdTdHlsZSgpOwotICAgIGlmICghdHlwaW5nU3R5bGUgfHwgIXR5cGluZ1N0eWxlLT5z
dHlsZSgpKQotICAgICAgICByZXR1cm4gJnBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCktPnJlbmRl
cmVyKCktPnN0eWxlKCk7Ci0KLSAgICBhdXRvIHN0eWxlRWxlbWVudCA9IEhUTUxTcGFuRWxlbWVu
dDo6Y3JlYXRlKCpmcmFtZS0+ZG9jdW1lbnQoKSk7Ci0KLSAgICBTdHJpbmcgc3R5bGVUZXh0ID0g
dHlwaW5nU3R5bGUtPnN0eWxlKCktPmFzVGV4dCgpICsgIiBkaXNwbGF5OiBpbmxpbmUiOwotICAg
IHN0eWxlRWxlbWVudC0+c2V0QXR0cmlidXRlKEhUTUxOYW1lczo6c3R5bGVBdHRyLCBzdHlsZVRl
eHQpOwotCi0gICAgc3R5bGVFbGVtZW50LT5hcHBlbmRDaGlsZChmcmFtZS0+ZG9jdW1lbnQoKS0+
Y3JlYXRlRWRpdGluZ1RleHROb2RlKGVtcHR5U3RyaW5nKCkpKTsKLQotICAgIGF1dG8gcG9zaXRp
b25Ob2RlID0gcG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKTsKLSAgICBpZiAoIXBvc2l0aW9uTm9k
ZSB8fCAhcG9zaXRpb25Ob2RlLT5wYXJlbnROb2RlKCkgfHwgcG9zaXRpb25Ob2RlLT5wYXJlbnRO
b2RlKCktPmFwcGVuZENoaWxkKHN0eWxlRWxlbWVudCkuaGFzRXhjZXB0aW9uKCkpCi0gICAgICAg
IHJldHVybiBudWxscHRyOwotCi0gICAgbm9kZVRvUmVtb3ZlID0gc3R5bGVFbGVtZW50LnB0cigp
OwotCi0gICAgZnJhbWUtPmRvY3VtZW50KCktPnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKLSAgICBy
ZXR1cm4gc3R5bGVFbGVtZW50LT5yZW5kZXJlcigpID8gJnN0eWxlRWxlbWVudC0+cmVuZGVyZXIo
KS0+c3R5bGUoKSA6IG51bGxwdHI7Ci19Ci0KIHZvaWQgRWRpdG9yOjpnZXRUZXh0RGVjb3JhdGlv
bkF0dHJpYnV0ZXNSZXNwZWN0aW5nVHlwaW5nU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxl
LCBOU011dGFibGVEaWN0aW9uYXJ5KiByZXN1bHQpIGNvbnN0CiB7CiAgICAgUmVmUHRyPEVkaXRp
bmdTdHlsZT4gdHlwaW5nU3R5bGUgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnR5cGluZ1N0eWxlKCk7
CkBAIC0xMTYsNCArOTAsOTkgQEAgRnJhZ21lbnRBbmRSZXNvdXJjZXMgRWRpdG9yOjpjcmVhdGVG
cmFnbWVudChOU0F0dHJpYnV0ZWRTdHJpbmcgKnN0cmluZykKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCit2b2lkIEVkaXRvcjo6d3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoUGFzdGVib2FyZCYg
cGFzdGVib2FyZCkKK3sKKyAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmcg
PSBhdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlKCpzZWxlY3RlZFJhbmdlKCkpOworCisgICAgUGFz
dGVib2FyZFdlYkNvbnRlbnQgY29udGVudDsKKyAgICBjb250ZW50LmNhblNtYXJ0Q29weU9yRGVs
ZXRlID0gY2FuU21hcnRDb3B5T3JEZWxldGUoKTsKKyAgICBjb250ZW50LmRhdGFJbldlYkFyY2hp
dmVGb3JtYXQgPSBzZWxlY3Rpb25JbldlYkFyY2hpdmVGb3JtYXQoKTsKKyAgICBjb250ZW50LmRh
dGFJblJURkRGb3JtYXQgPSBhdHRyaWJ1dGVkU3RyaW5nLmNvbnRhaW5zQXR0YWNobWVudHMgPyBk
YXRhSW5SVEZERm9ybWF0KGF0dHJpYnV0ZWRTdHJpbmcpIDogbnVsbHB0cjsKKyAgICBjb250ZW50
LmRhdGFJblJURkZvcm1hdCA9IGRhdGFJblJURkZvcm1hdChhdHRyaWJ1dGVkU3RyaW5nKTsKKyAg
ICAvLyBGSVhNRTogV2h5IGRvbid0IHdlIHdhbnQgdGhpcyBvbiBpT1M/CisjaWYgUExBVEZPUk0o
TUFDKQorICAgIGNvbnRlbnQuZGF0YUluSFRNTEZvcm1hdCA9IHNlbGVjdGlvbkluSFRNTEZvcm1h
dCgpOworI2VuZGlmCisgICAgY29udGVudC5kYXRhSW5TdHJpbmdGb3JtYXQgPSBzdHJpbmdTZWxl
Y3Rpb25Gb3JQYXN0ZWJvYXJkV2l0aEltYWdlQWx0VGV4dCgpOworICAgIGNsaWVudCgpLT5nZXRD
bGllbnRQYXN0ZWJvYXJkRGF0YUZvclJhbmdlKHNlbGVjdGVkUmFuZ2UoKS5nZXQoKSwgY29udGVu
dC5jbGllbnRUeXBlcywgY29udGVudC5jbGllbnREYXRhKTsKKworICAgIHBhc3RlYm9hcmQud3Jp
dGUoY29udGVudCk7Cit9CisKK1JlZlB0cjxTaGFyZWRCdWZmZXI+IEVkaXRvcjo6c2VsZWN0aW9u
SW5XZWJBcmNoaXZlRm9ybWF0KCkKK3sKKyAgICBSZWZQdHI8TGVnYWN5V2ViQXJjaGl2ZT4gYXJj
aGl2ZSA9IExlZ2FjeVdlYkFyY2hpdmU6OmNyZWF0ZUZyb21TZWxlY3Rpb24oJm1fZnJhbWUpOwor
ICAgIGlmICghYXJjaGl2ZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIFNo
YXJlZEJ1ZmZlcjo6d3JhcENGRGF0YShhcmNoaXZlLT5yYXdEYXRhUmVwcmVzZW50YXRpb24oKS5n
ZXQoKSk7Cit9CisKK3ZvaWQgRWRpdG9yOjpyZXBsYWNlU2VsZWN0aW9uV2l0aEF0dHJpYnV0ZWRT
dHJpbmcoTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nLCBNYWlsQmxvY2txdW90
ZUhhbmRsaW5nIG1haWxCbG9ja3F1b3RlSGFuZGxpbmcpCit7CisgICAgaWYgKG1fZnJhbWUuc2Vs
ZWN0aW9uKCkuaXNOb25lKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX2ZyYW1lLnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkpIHsKKyAgICAg
ICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRBbmRB
ZGRSZXNvdXJjZXMoYXR0cmlidXRlZFN0cmluZyk7CisgICAgICAgIGlmIChmcmFnbWVudCAmJiBz
aG91bGRJbnNlcnRGcmFnbWVudChmcmFnbWVudCwgc2VsZWN0ZWRSYW5nZSgpLCBFZGl0b3JJbnNl
cnRBY3Rpb246OlBhc3RlZCkpCisgICAgICAgICAgICBwYXN0ZUFzRnJhZ21lbnQoZnJhZ21lbnQu
cmVsZWFzZU5vbk51bGwoKSwgZmFsc2UsIGZhbHNlLCBtYWlsQmxvY2txdW90ZUhhbmRsaW5nKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBTdHJpbmcgdGV4dCA9IGF0dHJpYnV0ZWRTdHJpbmcuc3Ry
aW5nOworICAgICAgICBpZiAoc2hvdWxkSW5zZXJ0VGV4dCh0ZXh0LCBzZWxlY3RlZFJhbmdlKCku
Z2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVkKSkKKyAgICAgICAgICAgIHBhc3RlQXNQ
bGFpblRleHQodGV4dCwgZmFsc2UpOworICAgIH0KK30KKworUmVmUHRyPERvY3VtZW50RnJhZ21l
bnQ+IEVkaXRvcjo6Y3JlYXRlRnJhZ21lbnRGb3JJbWFnZVJlc291cmNlQW5kQWRkUmVzb3VyY2Uo
UmVmUHRyPEFyY2hpdmVSZXNvdXJjZT4mJiByZXNvdXJjZSkKK3sKKyAgICBpZiAoIXJlc291cmNl
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIC8vIEZJWE1FOiBXaHkgaXMgdGhpcyBk
aWZmZXJlbnQ/CisjaWYgUExBVEZPUk0oTUFDKQorICAgIFN0cmluZyByZXNvdXJjZVVSTCA9IHJl
c291cmNlLT51cmwoKS5zdHJpbmcoKTsKKyNlbHNlCisgICAgTlNVUkwgKlVSTCA9IHJlc291cmNl
LT51cmwoKTsKKyAgICBTdHJpbmcgcmVzb3VyY2VVUkwgPSBVUkwuaXNGaWxlVVJMID8gVVJMLmFi
c29sdXRlU3RyaW5nIDogcmVzb3VyY2UtPnVybCgpOworI2VuZGlmCisKKyAgICBpZiAoRG9jdW1l
bnRMb2FkZXIqIGxvYWRlciA9IG1fZnJhbWUubG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKSkKKyAg
ICAgICAgbG9hZGVyLT5hZGRBcmNoaXZlUmVzb3VyY2UocmVzb3VyY2UucmVsZWFzZU5vbk51bGwo
KSk7CisKKyAgICBhdXRvIGltYWdlRWxlbWVudCA9IEhUTUxJbWFnZUVsZW1lbnQ6OmNyZWF0ZSgq
bV9mcmFtZS5kb2N1bWVudCgpKTsKKyAgICBpbWFnZUVsZW1lbnQtPnNldEF0dHJpYnV0ZVdpdGhv
dXRTeW5jaHJvbml6YXRpb24oSFRNTE5hbWVzOjpzcmNBdHRyLCByZXNvdXJjZVVSTCk7CisKKyAg
ICBhdXRvIGZyYWdtZW50ID0gbV9mcmFtZS5kb2N1bWVudCgpLT5jcmVhdGVEb2N1bWVudEZyYWdt
ZW50KCk7CisgICAgZnJhZ21lbnQtPmFwcGVuZENoaWxkKGltYWdlRWxlbWVudCk7CisgICAgCisg
ICAgcmV0dXJuIFdURk1vdmUoZnJhZ21lbnQpOworfQorCitSZWZQdHI8U2hhcmVkQnVmZmVyPiBF
ZGl0b3I6OmRhdGFJblJURkRGb3JtYXQoTlNBdHRyaWJ1dGVkU3RyaW5nICpzdHJpbmcpCit7Cisg
ICAgTlNVSW50ZWdlciBsZW5ndGggPSBzdHJpbmcubGVuZ3RoOworICAgIGlmICghbGVuZ3RoKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9O
UzsKKyAgICByZXR1cm4gU2hhcmVkQnVmZmVyOjp3cmFwTlNEYXRhKFtzdHJpbmcgUlRGREZyb21S
YW5nZTpOU01ha2VSYW5nZSgwLCBsZW5ndGgpIGRvY3VtZW50QXR0cmlidXRlczpAeyB9XSk7Cisg
ICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKworICAgIHJldHVybiBudWxscHRyOworfQor
CitSZWZQdHI8U2hhcmVkQnVmZmVyPiBFZGl0b3I6OmRhdGFJblJURkZvcm1hdChOU0F0dHJpYnV0
ZWRTdHJpbmcgKnN0cmluZykKK3sKKyAgICBOU1VJbnRlZ2VyIGxlbmd0aCA9IHN0cmluZy5sZW5n
dGg7CisgICAgaWYgKCFsZW5ndGgpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgQkVH
SU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIHJldHVybiBTaGFyZWRCdWZmZXI6OndyYXBO
U0RhdGEoW3N0cmluZyBSVEZGcm9tUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgbGVuZ3RoKSBkb2N1bWVu
dEF0dHJpYnV0ZXM6QHsgfV0pOworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisKKyAg
ICByZXR1cm4gbnVsbHB0cjsKK30KKworCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL2lvcy9FZGl0b3JJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0
b3JJT1MubW0KaW5kZXggYzVlOGMyOTEyNGJmMDdiYTk2Y2U1NGMyN2VjYjhiY2ZmN2I1NjQ3ZS4u
MmIxMTg1ZTJhYWY2MWMyYjUwNmQwZWE2N2I0ODA3NDg5ZDIwODJjZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbQpAQCAtNjIsNyArNjIsNiBAQAogI2ltcG9ydCAiaHRt
bGVkaXRpbmcuaCIKICNpbXBvcnQgIm1hcmt1cC5oIgogI2ltcG9ydCA8TW9iaWxlQ29yZVNlcnZp
Y2VzL01vYmlsZUNvcmVTZXJ2aWNlcy5oPgotI2ltcG9ydCA8d3RmL0Jsb2NrT2JqQ0V4Y2VwdGlv
bnMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIFNPRlRfTElOS19G
UkFNRVdPUksoQXBwU3VwcG9ydCkKQEAgLTE2NSw0OCArMTY0LDYgQEAgdm9pZCBFZGl0b3I6OnNl
dFRleHRBbGlnbm1lbnRGb3JDaGFuZ2VkQmFzZVdyaXRpbmdEaXJlY3Rpb24oV3JpdGluZ0RpcmVj
dGlvbiBkaXIKICAgICBhcHBseVBhcmFncmFwaFN0eWxlKHN0eWxlLmdldCgpKTsKIH0KIAotY29u
c3QgRm9udCogRWRpdG9yOjpmb250Rm9yU2VsZWN0aW9uKGJvb2wmIGhhc011bHRpcGxlRm9udHMp
IGNvbnN0Ci17Ci0gICAgaGFzTXVsdGlwbGVGb250cyA9IGZhbHNlOwotCi0gICAgaWYgKCFtX2Zy
YW1lLnNlbGVjdGlvbigpLmlzUmFuZ2UoKSkgewotICAgICAgICBOb2RlKiBub2RlVG9SZW1vdmU7
Ci0gICAgICAgIGF1dG8qIHN0eWxlID0gc3R5bGVGb3JTZWxlY3Rpb25TdGFydCgmbV9mcmFtZSwg
bm9kZVRvUmVtb3ZlKTsgLy8gc2V0cyBub2RlVG9SZW1vdmUKLQotICAgICAgICBjb25zdCBGb250
KiByZXN1bHQgPSBudWxscHRyOwotICAgICAgICBpZiAoc3R5bGUpIHsKLSAgICAgICAgICAgIHJl
c3VsdCA9ICZzdHlsZS0+Zm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpOwotICAgICAgICAgICAg
aWYgKG5vZGVUb1JlbW92ZSkKLSAgICAgICAgICAgICAgICBub2RlVG9SZW1vdmUtPnJlbW92ZSgp
OwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICBjb25z
dCBGb250KiBmb250ID0gbnVsbHB0cjsKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gbV9mcmFt
ZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIGlmIChOb2RlKiBzdGFydE5v
ZGUgPSBhZGp1c3RlZFNlbGVjdGlvblN0YXJ0Rm9yU3R5bGVDb21wdXRhdGlvbihtX2ZyYW1lLnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpKS5kZXByZWNhdGVkTm9kZSgpKSB7Ci0gICAgICAgIE5vZGUq
IHBhc3RFbmQgPSByYW5nZS0+cGFzdExhc3ROb2RlKCk7Ci0gICAgICAgIC8vIEluIHRoZSBsb29w
IGJlbG93LCBuIHNob3VsZCBldmVudHVhbGx5IG1hdGNoIHBhc3RFbmQgYW5kIG5vdCBiZWNvbWUg
bmlsLCBidXQgd2UndmUgc2VlbiBhdCBsZWFzdCBvbmUKLSAgICAgICAgLy8gdW5yZXByb2R1Y2li
bGUgY2FzZSB3aGVyZSB0aGlzIGRpZG4ndCBoYXBwZW4sIHNvIGNoZWNrIGZvciBudWxsIGFsc28u
Ci0gICAgICAgIGZvciAoTm9kZSogbm9kZSA9IHN0YXJ0Tm9kZTsgbm9kZSAmJiBub2RlICE9IHBh
c3RFbmQ7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlKSkgewotICAgICAgICAgICAg
YXV0byByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7Ci0gICAgICAgICAgICBpZiAoIXJlbmRl
cmVyKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgLy8gRklYTUU6IEFy
ZSB0aGVyZSBhbnkgbm9kZSB0eXBlcyB0aGF0IGhhdmUgcmVuZGVyZXJzLCBidXQgdGhhdCB3ZSBz
aG91bGQgYmUgc2tpcHBpbmc/Ci0gICAgICAgICAgICBjb25zdCBGb250JiBwcmltYXJ5Rm9udCA9
IHJlbmRlcmVyLT5zdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKTsKLSAgICAgICAg
ICAgIGlmICghZm9udCkKLSAgICAgICAgICAgICAgICBmb250ID0gJnByaW1hcnlGb250OwotICAg
ICAgICAgICAgZWxzZSBpZiAoZm9udCAhPSAmcHJpbWFyeUZvbnQpIHsKLSAgICAgICAgICAgICAg
ICBoYXNNdWx0aXBsZUZvbnRzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBmb250OwotfQotCiBOU0Rp
Y3Rpb25hcnkqIEVkaXRvcjo6Zm9udEF0dHJpYnV0ZXNGb3JTZWxlY3Rpb25TdGFydCgpIGNvbnN0
CiB7CiAgICAgTm9kZSogbm9kZVRvUmVtb3ZlOwpAQCAtMjUyLDMyICsyMDksNiBAQCB2b2lkIEVk
aXRvcjo6cmVtb3ZlVW5jaGFuZ2VhYmxlU3R5bGVzKCkKICAgICBhcHBseVN0eWxlVG9TZWxlY3Rp
b24oZGVmYXVsdFN0eWxlLmdldCgpLCBFZGl0QWN0aW9uQ2hhbmdlQXR0cmlidXRlcyk7CiB9CiAK
LXN0YXRpYyBSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhSW5SVEZERm9ybWF0KE5TQXR0cmlidXRl
ZFN0cmluZyAqc3RyaW5nKQotewotICAgIE5TVUludGVnZXIgbGVuZ3RoID0gc3RyaW5nLmxlbmd0
aDsKLSAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBCRUdJ
Tl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6d3JhcE5T
RGF0YShbc3RyaW5nIFJURkRGcm9tUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgbGVuZ3RoKSBkb2N1bWVu
dEF0dHJpYnV0ZXM6bmlsXSk7Ci0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLQotICAg
IHJldHVybiBudWxscHRyOwotfQotCi1zdGF0aWMgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YUlu
UlRGRm9ybWF0KE5TQXR0cmlidXRlZFN0cmluZyAqc3RyaW5nKQotewotICAgIE5TVUludGVnZXIg
bGVuZ3RoID0gc3RyaW5nLmxlbmd0aDsKLSAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0KLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgcmV0dXJu
IFNoYXJlZEJ1ZmZlcjo6d3JhcE5TRGF0YShbc3RyaW5nIFJURkZyb21SYW5nZTpOU01ha2VSYW5n
ZSgwLCBsZW5ndGgpIGRvY3VtZW50QXR0cmlidXRlczpuaWxdKTsKLSAgICBFTkRfQkxPQ0tfT0JK
Q19FWENFUFRJT05TOwotCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KIFN0cmluZyBFZGl0b3I6
OnN0cmluZ1NlbGVjdGlvbkZvclBhc3RlYm9hcmRXaXRoSW1hZ2VBbHRUZXh0KCkKIHsKICAgICBT
dHJpbmcgdGV4dCA9IHNlbGVjdGVkVGV4dEZvckRhdGFUcmFuc2ZlcigpOwpAQCAtMjg1LDI5ICsy
MTYsNiBAQCBTdHJpbmcgRWRpdG9yOjpzdHJpbmdTZWxlY3Rpb25Gb3JQYXN0ZWJvYXJkV2l0aElt
YWdlQWx0VGV4dCgpCiAgICAgcmV0dXJuIHRleHQ7CiB9CiAKLVJlZlB0cjxTaGFyZWRCdWZmZXI+
IEVkaXRvcjo6c2VsZWN0aW9uSW5XZWJBcmNoaXZlRm9ybWF0KCkKLXsKLSAgICBSZWZQdHI8TGVn
YWN5V2ViQXJjaGl2ZT4gYXJjaGl2ZSA9IExlZ2FjeVdlYkFyY2hpdmU6OmNyZWF0ZUZyb21TZWxl
Y3Rpb24oJm1fZnJhbWUpOwotICAgIGlmICghYXJjaGl2ZSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6d3JhcENGRGF0YShhcmNoaXZlLT5yYXdEYXRh
UmVwcmVzZW50YXRpb24oKS5nZXQoKSk7Ci19Ci0KLXZvaWQgRWRpdG9yOjp3cml0ZVNlbGVjdGlv
blRvUGFzdGVib2FyZChQYXN0ZWJvYXJkJiBwYXN0ZWJvYXJkKQotewotICAgIE5TQXR0cmlidXRl
ZFN0cmluZyAqYXR0cmlidXRlZFN0cmluZyA9IGF0dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2UoKnNl
bGVjdGVkUmFuZ2UoKSk7Ci0KLSAgICBQYXN0ZWJvYXJkV2ViQ29udGVudCBjb250ZW50OwotICAg
IGNvbnRlbnQuY2FuU21hcnRDb3B5T3JEZWxldGUgPSBjYW5TbWFydENvcHlPckRlbGV0ZSgpOwot
ICAgIGNvbnRlbnQuZGF0YUluV2ViQXJjaGl2ZUZvcm1hdCA9IHNlbGVjdGlvbkluV2ViQXJjaGl2
ZUZvcm1hdCgpOwotICAgIGNvbnRlbnQuZGF0YUluUlRGREZvcm1hdCA9IFthdHRyaWJ1dGVkU3Ry
aW5nIGNvbnRhaW5zQXR0YWNobWVudHNdID8gZGF0YUluUlRGREZvcm1hdChhdHRyaWJ1dGVkU3Ry
aW5nKSA6IDA7Ci0gICAgY29udGVudC5kYXRhSW5SVEZGb3JtYXQgPSBkYXRhSW5SVEZGb3JtYXQo
YXR0cmlidXRlZFN0cmluZyk7Ci0gICAgY29udGVudC5kYXRhSW5TdHJpbmdGb3JtYXQgPSBzdHJp
bmdTZWxlY3Rpb25Gb3JQYXN0ZWJvYXJkV2l0aEltYWdlQWx0VGV4dCgpOwotICAgIGNsaWVudCgp
LT5nZXRDbGllbnRQYXN0ZWJvYXJkRGF0YUZvclJhbmdlKHNlbGVjdGVkUmFuZ2UoKS5nZXQoKSwg
Y29udGVudC5jbGllbnRUeXBlcywgY29udGVudC5jbGllbnREYXRhKTsKLQotICAgIHBhc3RlYm9h
cmQud3JpdGUoY29udGVudCk7Ci19Ci0KIHN0YXRpYyB2b2lkIGdldEltYWdlKEVsZW1lbnQmIGlt
YWdlRWxlbWVudCwgUmVmUHRyPEltYWdlPiYgaW1hZ2UsIENhY2hlZEltYWdlKiYgY2FjaGVkSW1h
Z2UpCiB7CiAgICAgYXV0byogcmVuZGVyZXIgPSBpbWFnZUVsZW1lbnQucmVuZGVyZXIoKTsKQEAg
LTU2OSw0MiArNDc3LDYgQEAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IEVkaXRvcjo6Y3JlYXRl
RnJhZ21lbnRBbmRBZGRSZXNvdXJjZXMoTlNBdHRyaWJ1dGVkU3RyaW4KICAgICByZXR1cm4gV1RG
TW92ZShmcmFnbWVudEFuZFJlc291cmNlcy5mcmFnbWVudCk7CiB9CiAKLVJlZlB0cjxEb2N1bWVu
dEZyYWdtZW50PiBFZGl0b3I6OmNyZWF0ZUZyYWdtZW50Rm9ySW1hZ2VSZXNvdXJjZUFuZEFkZFJl
c291cmNlKFJlZlB0cjxBcmNoaXZlUmVzb3VyY2U+JiYgcmVzb3VyY2UpCi17Ci0gICAgaWYgKCFy
ZXNvdXJjZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBOU1VSTCAqVVJMID0gcmVz
b3VyY2UtPnVybCgpOwotICAgIFN0cmluZyByZXNvdXJjZVVSTCA9IFtVUkwgaXNGaWxlVVJMXSA/
IFtVUkwgYWJzb2x1dGVTdHJpbmddIDogcmVzb3VyY2UtPnVybCgpOwotCi0gICAgaWYgKERvY3Vt
ZW50TG9hZGVyKiBsb2FkZXIgPSBtX2ZyYW1lLmxvYWRlcigpLmRvY3VtZW50TG9hZGVyKCkpCi0g
ICAgICAgIGxvYWRlci0+YWRkQXJjaGl2ZVJlc291cmNlKHJlc291cmNlLnJlbGVhc2VOb25OdWxs
KCkpOwotCi0gICAgYXV0byBpbWFnZUVsZW1lbnQgPSBIVE1MSW1hZ2VFbGVtZW50OjpjcmVhdGUo
Km1fZnJhbWUuZG9jdW1lbnQoKSk7Ci0gICAgaW1hZ2VFbGVtZW50LT5zZXRBdHRyaWJ1dGVXaXRo
b3V0U3luY2hyb25pemF0aW9uKEhUTUxOYW1lczo6c3JjQXR0ciwgcmVzb3VyY2VVUkwpOwotCi0g
ICAgYXV0byBmcmFnbWVudCA9IG1fZnJhbWUuZG9jdW1lbnQoKS0+Y3JlYXRlRG9jdW1lbnRGcmFn
bWVudCgpOwotICAgIGZyYWdtZW50LT5hcHBlbmRDaGlsZChpbWFnZUVsZW1lbnQpOwotCi0gICAg
cmV0dXJuIFdURk1vdmUoZnJhZ21lbnQpOwotfQotCi12b2lkIEVkaXRvcjo6cmVwbGFjZVNlbGVj
dGlvbldpdGhBdHRyaWJ1dGVkU3RyaW5nKE5TQXR0cmlidXRlZFN0cmluZyAqYXR0cmlidXRlZFN0
cmluZywgTWFpbEJsb2NrcXVvdGVIYW5kbGluZyBtYWlsQmxvY2txdW90ZUhhbmRsaW5nKQotewot
ICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLmlzTm9uZSgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRSaWNobHlF
ZGl0YWJsZSgpKSB7Ci0gICAgICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9
IGNyZWF0ZUZyYWdtZW50QW5kQWRkUmVzb3VyY2VzKGF0dHJpYnV0ZWRTdHJpbmcpOwotICAgICAg
ICBpZiAoZnJhZ21lbnQgJiYgc2hvdWxkSW5zZXJ0RnJhZ21lbnQoZnJhZ21lbnQsIHNlbGVjdGVk
UmFuZ2UoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKQotICAgICAgICAgICAgcGFzdGVB
c0ZyYWdtZW50KGZyYWdtZW50LnJlbGVhc2VOb25OdWxsKCksIGZhbHNlLCBmYWxzZSwgbWFpbEJs
b2NrcXVvdGVIYW5kbGluZyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgU3RyaW5nIHRleHQgPSBb
YXR0cmlidXRlZFN0cmluZyBzdHJpbmddOwotICAgICAgICBpZiAoc2hvdWxkSW5zZXJ0VGV4dCh0
ZXh0LCBzZWxlY3RlZFJhbmdlKCkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVkKSkK
LSAgICAgICAgICAgIHBhc3RlQXNQbGFpblRleHQodGV4dCwgZmFsc2UpOwotICAgIH0KLX0KLQog
dm9pZCBFZGl0b3I6Omluc2VydERpY3RhdGlvblBocmFzZXMoVmVjdG9yPFZlY3RvcjxTdHJpbmc+
PiYmIGRpY3RhdGlvblBocmFzZXMsIFJldGFpblB0cjxpZD4gbWV0YWRhdGEpCiB7CiAgICAgaWYg
KG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNOb25lKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9F
ZGl0b3JNYWMubW0KaW5kZXggYjU0YmJkMTdlN2YwOGZlNmVhZjA5OTdlNzg3M2U1ZjVhY2RkMjMx
OS4uN2FiOWZmN2RjMDRkZmJjNjg2MGRhYjExMTkwYTY5N2Y5NjQ3N2RjZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQpAQCAtNjgsNyArNjgsNiBAQAogI2ltcG9ydCAi
V2ViTlNBdHRyaWJ1dGVkU3RyaW5nRXh0cmFzLmgiCiAjaW1wb3J0ICJodG1sZWRpdGluZy5oIgog
I2ltcG9ydCAibWFya3VwLmgiCi0jaW1wb3J0IDx3dGYvQmxvY2tPYmpDRXhjZXB0aW9ucy5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTEwNSw0OCArMTA0LDYgQEAgdm9pZCBFZGl0b3I6
OnBhc3RlV2l0aFBhc3RlYm9hcmQoUGFzdGVib2FyZCogcGFzdGVib2FyZCwgYm9vbCBhbGxvd1Bs
YWluVGV4dCwgTWEKICAgICBjbGllbnQoKS0+c2V0SW5zZXJ0aW9uUGFzdGVib2FyZChTdHJpbmco
KSk7CiB9CiAKLWNvbnN0IEZvbnQqIEVkaXRvcjo6Zm9udEZvclNlbGVjdGlvbihib29sJiBoYXNN
dWx0aXBsZUZvbnRzKSBjb25zdAotewotICAgIGhhc011bHRpcGxlRm9udHMgPSBmYWxzZTsKLQot
ICAgIGlmICghbV9mcmFtZS5zZWxlY3Rpb24oKS5pc1JhbmdlKCkpIHsKLSAgICAgICAgTm9kZSog
bm9kZVRvUmVtb3ZlOwotICAgICAgICBhdXRvKiBzdHlsZSA9IHN0eWxlRm9yU2VsZWN0aW9uU3Rh
cnQoJm1fZnJhbWUsIG5vZGVUb1JlbW92ZSk7IC8vIHNldHMgbm9kZVRvUmVtb3ZlCi0KLSAgICAg
ICAgY29uc3QgRm9udCogcmVzdWx0ID0gbnVsbHB0cjsKLSAgICAgICAgaWYgKHN0eWxlKSB7Ci0g
ICAgICAgICAgICByZXN1bHQgPSAmc3R5bGUtPmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKTsK
LSAgICAgICAgICAgIGlmIChub2RlVG9SZW1vdmUpCi0gICAgICAgICAgICAgICAgbm9kZVRvUmVt
b3ZlLT5yZW1vdmUoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0K
LQotICAgIGNvbnN0IEZvbnQqIGZvbnQgPSBudWxscHRyOwotICAgIFJlZlB0cjxSYW5nZT4gcmFu
Z2UgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgTm9kZSog
c3RhcnROb2RlID0gYWRqdXN0ZWRTZWxlY3Rpb25TdGFydEZvclN0eWxlQ29tcHV0YXRpb24obV9m
cmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSkuZGVwcmVjYXRlZE5vZGUoKTsKLSAgICBpZiAo
cmFuZ2UgJiYgc3RhcnROb2RlKSB7Ci0gICAgICAgIE5vZGUqIHBhc3RFbmQgPSByYW5nZS0+cGFz
dExhc3ROb2RlKCk7Ci0gICAgICAgIC8vIEluIHRoZSBsb29wIGJlbG93LCBuIHNob3VsZCBldmVu
dHVhbGx5IG1hdGNoIHBhc3RFbmQgYW5kIG5vdCBiZWNvbWUgbmlsLCBidXQgd2UndmUgc2VlbiBh
dCBsZWFzdCBvbmUKLSAgICAgICAgLy8gdW5yZXByb2R1Y2libGUgY2FzZSB3aGVyZSB0aGlzIGRp
ZG4ndCBoYXBwZW4sIHNvIGNoZWNrIGZvciBudWxsIGFsc28uCi0gICAgICAgIGZvciAoTm9kZSog
bm9kZSA9IHN0YXJ0Tm9kZTsgbm9kZSAmJiBub2RlICE9IHBhc3RFbmQ7IG5vZGUgPSBOb2RlVHJh
dmVyc2FsOjpuZXh0KCpub2RlKSkgewotICAgICAgICAgICAgYXV0byByZW5kZXJlciA9IG5vZGUt
PnJlbmRlcmVyKCk7Ci0gICAgICAgICAgICBpZiAoIXJlbmRlcmVyKQotICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgLy8gRklYTUU6IEFyZSB0aGVyZSBhbnkgbm9kZSB0eXBl
cyB0aGF0IGhhdmUgcmVuZGVyZXJzLCBidXQgdGhhdCB3ZSBzaG91bGQgYmUgc2tpcHBpbmc/Ci0g
ICAgICAgICAgICBjb25zdCBGb250JiBwcmltYXJ5Rm9udCA9IHJlbmRlcmVyLT5zdHlsZSgpLmZv
bnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKTsKLSAgICAgICAgICAgIGlmICghZm9udCkKLSAgICAg
ICAgICAgICAgICBmb250ID0gJnByaW1hcnlGb250OwotICAgICAgICAgICAgZWxzZSBpZiAoZm9u
dCAhPSAmcHJpbWFyeUZvbnQpIHsKLSAgICAgICAgICAgICAgICBoYXNNdWx0aXBsZUZvbnRzID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgIH0KLQotICAgIHJldHVybiBmb250OwotfQotCiBOU0RpY3Rpb25hcnkqIEVkaXRvcjo6Zm9u
dEF0dHJpYnV0ZXNGb3JTZWxlY3Rpb25TdGFydCgpIGNvbnN0CiB7CiAgICAgTm9kZSogbm9kZVRv
UmVtb3ZlOwpAQCAtMzA2LDE0ICsyNjMsNiBAQCBTdHJpbmcgRWRpdG9yOjpzdHJpbmdTZWxlY3Rp
b25Gb3JQYXN0ZWJvYXJkV2l0aEltYWdlQWx0VGV4dCgpCiAgICAgcmV0dXJuIHRleHQ7CiB9CiAK
LVJlZlB0cjxTaGFyZWRCdWZmZXI+IEVkaXRvcjo6c2VsZWN0aW9uSW5XZWJBcmNoaXZlRm9ybWF0
KCkKLXsKLSAgICBSZWZQdHI8TGVnYWN5V2ViQXJjaGl2ZT4gYXJjaGl2ZSA9IExlZ2FjeVdlYkFy
Y2hpdmU6OmNyZWF0ZUZyb21TZWxlY3Rpb24oJm1fZnJhbWUpOwotICAgIGlmICghYXJjaGl2ZSkK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6d3JhcENG
RGF0YShhcmNoaXZlLT5yYXdEYXRhUmVwcmVzZW50YXRpb24oKS5nZXQoKSk7Ci19Ci0KIFN0cmlu
ZyBFZGl0b3I6OnNlbGVjdGlvbkluSFRNTEZvcm1hdCgpCiB7CiAgICAgcmV0dXJuIGNyZWF0ZU1h
cmt1cCgqc2VsZWN0ZWRSYW5nZSgpLCBudWxscHRyLCBBbm5vdGF0ZUZvckludGVyY2hhbmdlLCBm
YWxzZSwgUmVzb2x2ZU5vbkxvY2FsVVJMcyk7CkBAIC0zMjcsNDUgKzI3Niw2IEBAIFJlZlB0cjxT
aGFyZWRCdWZmZXI+IEVkaXRvcjo6aW1hZ2VJbldlYkFyY2hpdmVGb3JtYXQoRWxlbWVudCYgaW1h
Z2VFbGVtZW50KQogICAgIHJldHVybiBTaGFyZWRCdWZmZXI6OndyYXBDRkRhdGEoYXJjaGl2ZS0+
cmF3RGF0YVJlcHJlc2VudGF0aW9uKCkuZ2V0KCkpOwogfQogCi1SZWZQdHI8UmFuZ2U+IEVkaXRv
cjo6YWRqdXN0ZWRTZWxlY3Rpb25SYW5nZSgpCi17Ci0gICAgLy8gRklYTUU6IFdoeSBkbyB3ZSBu
ZWVkIHRvIGFkanVzdCB0aGUgc2VsZWN0aW9uIHRvIGluY2x1ZGUgdGhlIGFuY2hvciB0YWcgaXQn
cyBpbj8KLSAgICAvLyBXaG9ldmVyIHdyb3RlIHRoaXMgY29kZSBvcmlnaW5hbGx5IGZvcmdvdCB0
byBsZWF2ZSB1cyBhIGNvbW1lbnQgZXhwbGFpbmluZyB0aGUgcmF0aW9uYWxlLgotICAgIFJlZlB0
cjxSYW5nZT4gcmFuZ2UgPSBzZWxlY3RlZFJhbmdlKCk7Ci0gICAgTm9kZSogY29tbW9uQW5jZXN0
b3IgPSByYW5nZS0+Y29tbW9uQW5jZXN0b3JDb250YWluZXIoKTsKLSAgICBBU1NFUlQoY29tbW9u
QW5jZXN0b3IpOwotICAgIGF1dG8qIGVuY2xvc2luZ0FuY2hvciA9IGVuY2xvc2luZ0VsZW1lbnRX
aXRoVGFnKGZpcnN0UG9zaXRpb25Jbk5vZGUoY29tbW9uQW5jZXN0b3IpLCBIVE1MTmFtZXM6OmFU
YWcpOwotICAgIGlmIChlbmNsb3NpbmdBbmNob3IgJiYgY29tcGFyZVBvc2l0aW9ucyhmaXJzdFBv
c2l0aW9uSW5PckJlZm9yZU5vZGUocmFuZ2UtPnN0YXJ0UG9zaXRpb24oKS5hbmNob3JOb2RlKCkp
LCByYW5nZS0+c3RhcnRQb3NpdGlvbigpKSA+PSAwKQotICAgICAgICByYW5nZS0+c2V0U3RhcnQo
KmVuY2xvc2luZ0FuY2hvciwgMCk7Ci0gICAgcmV0dXJuIHJhbmdlOwotfQotICAgIAotc3RhdGlj
IFJlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGFJblJURkRGb3JtYXQoTlNBdHRyaWJ1dGVkU3RyaW5n
ICpzdHJpbmcpCi17Ci0gICAgTlNVSW50ZWdlciBsZW5ndGggPSBzdHJpbmcubGVuZ3RoOwotICAg
IGlmICghbGVuZ3RoKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIEJFR0lOX0JMT0NL
X09CSkNfRVhDRVBUSU9OUzsKLSAgICByZXR1cm4gU2hhcmVkQnVmZmVyOjp3cmFwTlNEYXRhKFtz
dHJpbmcgUlRGREZyb21SYW5nZTpOU01ha2VSYW5nZSgwLCBsZW5ndGgpIGRvY3VtZW50QXR0cmli
dXRlczpAeyB9XSk7Ci0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLQotICAgIHJldHVy
biBudWxscHRyOwotfQotCi1zdGF0aWMgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YUluUlRGRm9y
bWF0KE5TQXR0cmlidXRlZFN0cmluZyAqc3RyaW5nKQotewotICAgIE5TVUludGVnZXIgbGVuZ3Ro
ID0gc3RyaW5nLmxlbmd0aDsKLSAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0KLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgcmV0dXJuIFNoYXJl
ZEJ1ZmZlcjo6d3JhcE5TRGF0YShbc3RyaW5nIFJURkZyb21SYW5nZTpOU01ha2VSYW5nZSgwLCBs
ZW5ndGgpIGRvY3VtZW50QXR0cmlidXRlczpAeyB9XSk7Ci0gICAgRU5EX0JMT0NLX09CSkNfRVhD
RVBUSU9OUzsKLQotICAgIHJldHVybiBudWxscHRyOwotfQotCiBSZWZQdHI8U2hhcmVkQnVmZmVy
PiBFZGl0b3I6OmRhdGFTZWxlY3Rpb25Gb3JQYXN0ZWJvYXJkKGNvbnN0IFN0cmluZyYgcGFzdGVi
b2FyZFR5cGUpCiB7CiAgICAgLy8gRklYTUU6IFRoZSBpbnRlcmZhY2UgdG8gdGhpcyBmdW5jdGlv
biBpcyBhd2t3YXJkLiBXZSdkIHByb2JhYmx5IGJlIGJldHRlciBvZmYgd2l0aCB0aHJlZSBzZXBh
cmF0ZSBmdW5jdGlvbnMuCkBAIC0zOTMsMjIgKzMwMyw2IEBAIFJlZlB0cjxTaGFyZWRCdWZmZXI+
IEVkaXRvcjo6ZGF0YVNlbGVjdGlvbkZvclBhc3RlYm9hcmQoY29uc3QgU3RyaW5nJiBwYXN0ZWJv
YXJkCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXZvaWQgRWRpdG9yOjp3cml0ZVNlbGVjdGlv
blRvUGFzdGVib2FyZChQYXN0ZWJvYXJkJiBwYXN0ZWJvYXJkKQotewotICAgIE5TQXR0cmlidXRl
ZFN0cmluZyAqYXR0cmlidXRlZFN0cmluZyA9IGF0dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2UoKnNl
bGVjdGVkUmFuZ2UoKSk7Ci0KLSAgICBQYXN0ZWJvYXJkV2ViQ29udGVudCBjb250ZW50OwotICAg
IGNvbnRlbnQuY2FuU21hcnRDb3B5T3JEZWxldGUgPSBjYW5TbWFydENvcHlPckRlbGV0ZSgpOwot
ICAgIGNvbnRlbnQuZGF0YUluV2ViQXJjaGl2ZUZvcm1hdCA9IHNlbGVjdGlvbkluV2ViQXJjaGl2
ZUZvcm1hdCgpOwotICAgIGNvbnRlbnQuZGF0YUluUlRGREZvcm1hdCA9IFthdHRyaWJ1dGVkU3Ry
aW5nIGNvbnRhaW5zQXR0YWNobWVudHNdID8gZGF0YUluUlRGREZvcm1hdChhdHRyaWJ1dGVkU3Ry
aW5nKSA6IDA7Ci0gICAgY29udGVudC5kYXRhSW5SVEZGb3JtYXQgPSBkYXRhSW5SVEZGb3JtYXQo
YXR0cmlidXRlZFN0cmluZyk7Ci0gICAgY29udGVudC5kYXRhSW5IVE1MRm9ybWF0ID0gc2VsZWN0
aW9uSW5IVE1MRm9ybWF0KCk7Ci0gICAgY29udGVudC5kYXRhSW5TdHJpbmdGb3JtYXQgPSBzdHJp
bmdTZWxlY3Rpb25Gb3JQYXN0ZWJvYXJkV2l0aEltYWdlQWx0VGV4dCgpOwotICAgIGNsaWVudCgp
LT5nZXRDbGllbnRQYXN0ZWJvYXJkRGF0YUZvclJhbmdlKHNlbGVjdGVkUmFuZ2UoKS5nZXQoKSwg
Y29udGVudC5jbGllbnRUeXBlcywgY29udGVudC5jbGllbnREYXRhKTsKLQotICAgIHBhc3RlYm9h
cmQud3JpdGUoY29udGVudCk7Ci19Ci0KIHN0YXRpYyB2b2lkIGdldEltYWdlKEVsZW1lbnQmIGlt
YWdlRWxlbWVudCwgUmVmUHRyPEltYWdlPiYgaW1hZ2UsIENhY2hlZEltYWdlKiYgY2FjaGVkSW1h
Z2UpCiB7CiAgICAgYXV0byogcmVuZGVyZXIgPSBpbWFnZUVsZW1lbnQucmVuZGVyZXIoKTsKQEAg
LTY2MSwyNCArNTU1LDYgQEAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IEVkaXRvcjo6d2ViQ29u
dGVudEZyb21QYXN0ZWJvYXJkKFBhc3RlYm9hcmQmIHBhc3RlYm9hcmQKICAgICByZXR1cm4gV1RG
TW92ZShyZWFkZXIuZnJhZ21lbnQpOwogfQogCi1SZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gRWRp
dG9yOjpjcmVhdGVGcmFnbWVudEZvckltYWdlUmVzb3VyY2VBbmRBZGRSZXNvdXJjZShSZWZQdHI8
QXJjaGl2ZVJlc291cmNlPiYmIHJlc291cmNlKQotewotICAgIGlmICghcmVzb3VyY2UpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotCi0gICAgU3RyaW5nIHJlc291cmNlVVJMID0gcmVzb3VyY2Ut
PnVybCgpLnN0cmluZygpOwotICAgIGlmIChEb2N1bWVudExvYWRlciogbG9hZGVyID0gbV9mcmFt
ZS5sb2FkZXIoKS5kb2N1bWVudExvYWRlcigpKQotICAgICAgICBsb2FkZXItPmFkZEFyY2hpdmVS
ZXNvdXJjZShyZXNvdXJjZS5yZWxlYXNlTm9uTnVsbCgpKTsKLQotICAgIGF1dG8gaW1hZ2VFbGVt
ZW50ID0gSFRNTEltYWdlRWxlbWVudDo6Y3JlYXRlKCptX2ZyYW1lLmRvY3VtZW50KCkpOwotICAg
IGltYWdlRWxlbWVudC0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihIVE1MTmFt
ZXM6OnNyY0F0dHIsIHJlc291cmNlVVJMKTsKLQotICAgIGF1dG8gZnJhZ21lbnQgPSBkb2N1bWVu
dCgpLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKLSAgICBmcmFnbWVudC0+YXBwZW5kQ2hpbGQo
aW1hZ2VFbGVtZW50KTsKLQotICAgIHJldHVybiBXVEZNb3ZlKGZyYWdtZW50KTsKLX0KLQogUmVm
PERvY3VtZW50RnJhZ21lbnQ+IEVkaXRvcjo6Y3JlYXRlRnJhZ21lbnRGb3JJbWFnZUFuZFVSTChj
b25zdCBTdHJpbmcmIHVybCkKIHsKICAgICBhdXRvIGltYWdlRWxlbWVudCA9IEhUTUxJbWFnZUVs
ZW1lbnQ6OmNyZWF0ZSgqbV9mcmFtZS5kb2N1bWVudCgpKTsKQEAgLTcxNywyMiArNTkzLDYgQEAg
UmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IEVkaXRvcjo6Y3JlYXRlRnJhZ21lbnRBbmRBZGRSZXNv
dXJjZXMoTlNBdHRyaWJ1dGVkU3RyaW4KICAgICByZXR1cm4gV1RGTW92ZShmcmFnbWVudEFuZFJl
c291cmNlcy5mcmFnbWVudCk7CiB9CiAKLXZvaWQgRWRpdG9yOjpyZXBsYWNlU2VsZWN0aW9uV2l0
aEF0dHJpYnV0ZWRTdHJpbmcoTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nLCBN
YWlsQmxvY2txdW90ZUhhbmRsaW5nIG1haWxCbG9ja3F1b3RlSGFuZGxpbmcpCi17Ci0gICAgaWYg
KG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNOb25lKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
IChtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudFJpY2hseUVkaXRhYmxl
KCkpIHsKLSAgICAgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gY3JlYXRl
RnJhZ21lbnRBbmRBZGRSZXNvdXJjZXMoYXR0cmlidXRlZFN0cmluZyk7Ci0gICAgICAgIGlmIChm
cmFnbWVudCAmJiBzaG91bGRJbnNlcnRGcmFnbWVudChmcmFnbWVudCwgc2VsZWN0ZWRSYW5nZSgp
LCBFZGl0b3JJbnNlcnRBY3Rpb246OlBhc3RlZCkpCi0gICAgICAgICAgICBwYXN0ZUFzRnJhZ21l
bnQoZnJhZ21lbnQucmVsZWFzZU5vbk51bGwoKSwgZmFsc2UsIGZhbHNlLCBtYWlsQmxvY2txdW90
ZUhhbmRsaW5nKTsKLSAgICB9IGVsc2UgewotICAgICAgICBTdHJpbmcgdGV4dCA9IFthdHRyaWJ1
dGVkU3RyaW5nIHN0cmluZ107Ci0gICAgICAgIGlmIChzaG91bGRJbnNlcnRUZXh0KHRleHQsIHNl
bGVjdGVkUmFuZ2UoKS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKQotICAgICAg
ICAgICAgcGFzdGVBc1BsYWluVGV4dCh0ZXh0LCBmYWxzZSk7Ci0gICAgfQotfQotCiB2b2lkIEVk
aXRvcjo6YXBwbHlGb250U3R5bGVzKGNvbnN0IFN0cmluZyYgZm9udEZhbWlseSwgZG91YmxlIGZv
bnRTaXplLCB1bnNpZ25lZCBmb250VHJhaXRzKQogewogICAgIGF1dG8mIGNzc1ZhbHVlUG9vbCA9
IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>298883</attachid>
            <date>2017-01-14 21:14:10 -0800</date>
            <delta_ts>2017-01-14 22:08:56 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-167062-20170114211226.patch</filename>
            <type>text/plain</type>
            <size>30753</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjEwNzcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTQxOTRlNjQ2MmViZmMx
OWRlNTYxM2FhOTcxOGQ3YzNhYThkMjA1ZS4uOGI3YzM4Nzk5MTZkOWFlNGFlYmFhMWY3MjQzNDZm
OTFlNzBiNWI3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUzIEBACisyMDE3LTAxLTE0ICBUaW0g
SG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgorCisgICAgICAgIERlLWR1cGxpY2F0
ZSBzb21lIChuZWFybHkpIGlkZW50aWNhbCBjb2RlIGluIEVkaXRvcihNYWN8SU9TKS5tbQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY3MDYyCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgRGFuIEJlcm5zdGVpbi4KKworICAgICAgICBObyBuZXcgdGVzdHMs
IGp1c3QgcmVmYWN0b3JpbmcuCisKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OmZvbnRGb3JTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjpzdHlsZUZvclNlbGVjdGlvblN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkVk
aXRvcjo6YWRqdXN0ZWRTZWxlY3Rpb25SYW5nZSk6CisgICAgICAgICogZWRpdGluZy9FZGl0b3Iu
aDoKKyAgICAgICAgTW92ZSB0aGVzZSB0aHJlZSBmdW5jdGlvbnMgdG8gRWRpdG9yIGFuZCB1bmd1
YXJkIHRoZW0sIGJlY2F1c2UgdGhleSdyZQorICAgICAgICBub3QgQ29jb2Egc3BlY2lmaWMuCisK
KyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjp3cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZCk6CisgICAgICAgIChXZWJDb3Jl
OjpFZGl0b3I6OnNlbGVjdGlvbkluV2ViQXJjaGl2ZUZvcm1hdCk6CisgICAgICAgIChXZWJDb3Jl
OjpFZGl0b3I6OnJlcGxhY2VTZWxlY3Rpb25XaXRoQXR0cmlidXRlZFN0cmluZyk6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6OmNyZWF0ZUZyYWdtZW50Rm9ySW1hZ2VSZXNvdXJjZUFuZEFkZFJl
c291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6ZGF0YUluUlRGREZvcm1hdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmRhdGFJblJURkZvcm1hdCk6CisgICAgICAgIE1vdmUg
dGhlc2Ugc2l4IGZ1bmN0aW9ucyBoZXJlLgorICAgICAgICBzZWxlY3Rpb25JbldlYkFyY2hpdmVG
b3JtYXQgYW5kIHJlcGxhY2VTZWxlY3Rpb25XaXRoQXR0cmlidXRlZFN0cmluZyBhcmUKKyAgICAg
ICAgZW50aXJlbHkgaWRlbnRpY2FsOyB3cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZCBhbmQgY3Jl
YXRlRnJhZ21lbnQuLi4KKyAgICAgICAgYm90aCBoYXZlIHNsaWdodGx5IHN1c3BpY2lvdXMtbG9v
a2luZyBkaWZmZXJlbmNlcyB0aGF0IEkgbGVmdCBpbnRhY3QKKyAgICAgICAgYW5kIHdyb3RlIGNv
bW1lbnRzIGFib3V0IChlc3BlY2lhbGx5IGNyZWF0ZUZyYWdtZW50Li4uLCB0aGUgb3RoZXIgb25l
CisgICAgICAgIGlzIHNvbWV3aGF0IGV4cGxpY2FibGUpLiBUaGUgdHdvIGRhdGFJblJURihEKUZv
cm1hdCBmdW5jdGlvbnMgdXNlZCB0bworICAgICAgICBiZSBzdGF0aWMgZnVuY3Rpb25zLCBidXQg
Zm9yIG5vdyBhcmUgcmVxdWlyZWQgZnJvbSBib3RoIEVkaXRvckNvY29hCisgICAgICAgIGFuZCBF
ZGl0b3IoTWFjfElPUyksIHNvIHdlJ2xsIG1ha2UgdGhlbSBzdGF0aWMgbWVtYmVyIGZ1bmN0aW9u
cy4KKworICAgICAgICAqIGVkaXRpbmcvaW9zL0VkaXRvcklPUy5tbToKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6Zm9udEZvclNlbGVjdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpFZGl0b3I6OnNlbGVjdGlvbkluV2ViQXJjaGl2ZUZvcm1hdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpkYXRhSW5SVEZERm9ybWF0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OmRhdGFJblJURkZvcm1hdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Ondy
aXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkVk
aXRvcjo6Y3JlYXRlRnJhZ21lbnRGb3JJbWFnZVJlc291cmNlQW5kQWRkUmVzb3VyY2UpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpyZXBsYWNlU2VsZWN0aW9uV2l0aEF0dHJp
YnV0ZWRTdHJpbmcpOiBEZWxldGVkLgorICAgICAgICAqIGVkaXRpbmcvbWFjL0VkaXRvck1hYy5t
bToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Zm9udEZvclNlbGVjdGlvbik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNlbGVjdGlvbkluV2ViQXJjaGl2ZUZvcm1hdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpkYXRhSW5SVEZERm9ybWF0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OmRhdGFJblJURkZvcm1hdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpFZGl0b3I6OndyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y3JlYXRlRnJhZ21lbnRGb3JJbWFnZVJlc291cmNlQW5k
QWRkUmVzb3VyY2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpyZXBsYWNl
U2VsZWN0aW9uV2l0aEF0dHJpYnV0ZWRTdHJpbmcpOiBEZWxldGVkLgorCiAyMDE3LTAxLTE0ICBa
YWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgU21hbGwgY29kZSBjbGVh
bnVwIGFmdGVyIHIyMTA3NjAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRp
dG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAppbmRleCA0ZDM4NDFi
NmIwMTc0MTMzN2UzM2QyMDMxOThiNzY1M2ZmYzNjN2YzLi5iOWQxYjA2N2Q3ODFmY2IyNjM2ZGI4
MjA1N2U2YTk4NWZhNTY1MDg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCkBAIC01Niw2
ICs1Niw3IEBACiAjaW5jbHVkZSAiSFRNTEltYWdlRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxJ
bnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MU3Bh
bkVsZW1lbnQuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiSW5kZW50
T3V0ZGVudENvbW1hbmQuaCIKICNpbmNsdWRlICJJbnB1dEV2ZW50LmgiCkBAIC0zNjQ2LDQgKzM2
NDcsOTggQEAgRG9jdW1lbnQmIEVkaXRvcjo6ZG9jdW1lbnQoKSBjb25zdAogICAgIHJldHVybiAq
bV9mcmFtZS5kb2N1bWVudCgpOwogfQogCitSZWZQdHI8UmFuZ2U+IEVkaXRvcjo6YWRqdXN0ZWRT
ZWxlY3Rpb25SYW5nZSgpCit7CisgICAgLy8gRklYTUU6IFdoeSBkbyB3ZSBuZWVkIHRvIGFkanVz
dCB0aGUgc2VsZWN0aW9uIHRvIGluY2x1ZGUgdGhlIGFuY2hvciB0YWcgaXQncyBpbj8KKyAgICAv
LyBXaG9ldmVyIHdyb3RlIHRoaXMgY29kZSBvcmlnaW5hbGx5IGZvcmdvdCB0byBsZWF2ZSB1cyBh
IGNvbW1lbnQgZXhwbGFpbmluZyB0aGUgcmF0aW9uYWxlLgorICAgIFJlZlB0cjxSYW5nZT4gcmFu
Z2UgPSBzZWxlY3RlZFJhbmdlKCk7CisgICAgTm9kZSogY29tbW9uQW5jZXN0b3IgPSByYW5nZS0+
Y29tbW9uQW5jZXN0b3JDb250YWluZXIoKTsKKyAgICBBU1NFUlQoY29tbW9uQW5jZXN0b3IpOwor
ICAgIGF1dG8qIGVuY2xvc2luZ0FuY2hvciA9IGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFnKGZpcnN0
UG9zaXRpb25Jbk5vZGUoY29tbW9uQW5jZXN0b3IpLCBIVE1MTmFtZXM6OmFUYWcpOworICAgIGlm
IChlbmNsb3NpbmdBbmNob3IgJiYgY29tcGFyZVBvc2l0aW9ucyhmaXJzdFBvc2l0aW9uSW5PckJl
Zm9yZU5vZGUocmFuZ2UtPnN0YXJ0UG9zaXRpb24oKS5hbmNob3JOb2RlKCkpLCByYW5nZS0+c3Rh
cnRQb3NpdGlvbigpKSA+PSAwKQorICAgICAgICByYW5nZS0+c2V0U3RhcnQoKmVuY2xvc2luZ0Fu
Y2hvciwgMCk7CisgICAgcmV0dXJuIHJhbmdlOworfQorCisvLyBGSVhNRTogVGhpcyBmaWd1cmVz
IG91dCB0aGUgY3VycmVudCBzdHlsZSBieSBpbnNlcnRpbmcgYSA8c3Bhbj4hCitjb25zdCBSZW5k
ZXJTdHlsZSogRWRpdG9yOjpzdHlsZUZvclNlbGVjdGlvblN0YXJ0KEZyYW1lKiBmcmFtZSwgTm9k
ZSomIG5vZGVUb1JlbW92ZSkKK3sKKyAgICBub2RlVG9SZW1vdmUgPSBudWxscHRyOworCisgICAg
aWYgKGZyYW1lLT5zZWxlY3Rpb24oKS5pc05vbmUoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICBQb3NpdGlvbiBwb3NpdGlvbiA9IGFkanVzdGVkU2VsZWN0aW9uU3RhcnRGb3JTdHls
ZUNvbXB1dGF0aW9uKGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgaWYgKCFw
b3NpdGlvbi5pc0NhbmRpZGF0ZSgpIHx8IHBvc2l0aW9uLmlzTnVsbCgpKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IHR5cGluZ1N0eWxlID0gZnJh
bWUtPnNlbGVjdGlvbigpLnR5cGluZ1N0eWxlKCk7CisgICAgaWYgKCF0eXBpbmdTdHlsZSB8fCAh
dHlwaW5nU3R5bGUtPnN0eWxlKCkpCisgICAgICAgIHJldHVybiAmcG9zaXRpb24uZGVwcmVjYXRl
ZE5vZGUoKS0+cmVuZGVyZXIoKS0+c3R5bGUoKTsKKworICAgIGF1dG8gc3R5bGVFbGVtZW50ID0g
SFRNTFNwYW5FbGVtZW50OjpjcmVhdGUoKmZyYW1lLT5kb2N1bWVudCgpKTsKKworICAgIFN0cmlu
ZyBzdHlsZVRleHQgPSB0eXBpbmdTdHlsZS0+c3R5bGUoKS0+YXNUZXh0KCkgKyAiIGRpc3BsYXk6
IGlubGluZSI7CisgICAgc3R5bGVFbGVtZW50LT5zZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjpzdHls
ZUF0dHIsIHN0eWxlVGV4dCk7CisKKyAgICBzdHlsZUVsZW1lbnQtPmFwcGVuZENoaWxkKGZyYW1l
LT5kb2N1bWVudCgpLT5jcmVhdGVFZGl0aW5nVGV4dE5vZGUoZW1wdHlTdHJpbmcoKSkpOworCisg
ICAgYXV0byBwb3NpdGlvbk5vZGUgPSBwb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpOworICAgIGlm
ICghcG9zaXRpb25Ob2RlIHx8ICFwb3NpdGlvbk5vZGUtPnBhcmVudE5vZGUoKSB8fCBwb3NpdGlv
bk5vZGUtPnBhcmVudE5vZGUoKS0+YXBwZW5kQ2hpbGQoc3R5bGVFbGVtZW50KS5oYXNFeGNlcHRp
b24oKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBub2RlVG9SZW1vdmUgPSBzdHls
ZUVsZW1lbnQucHRyKCk7CisgICAgCisgICAgZnJhbWUtPmRvY3VtZW50KCktPnVwZGF0ZVN0eWxl
SWZOZWVkZWQoKTsKKyAgICByZXR1cm4gc3R5bGVFbGVtZW50LT5yZW5kZXJlcigpID8gJnN0eWxl
RWxlbWVudC0+cmVuZGVyZXIoKS0+c3R5bGUoKSA6IG51bGxwdHI7Cit9CisKK2NvbnN0IEZvbnQq
IEVkaXRvcjo6Zm9udEZvclNlbGVjdGlvbihib29sJiBoYXNNdWx0aXBsZUZvbnRzKSBjb25zdAor
eworICAgIGhhc011bHRpcGxlRm9udHMgPSBmYWxzZTsKKworICAgIGlmICghbV9mcmFtZS5zZWxl
Y3Rpb24oKS5pc1JhbmdlKCkpIHsKKyAgICAgICAgTm9kZSogbm9kZVRvUmVtb3ZlOworICAgICAg
ICBhdXRvKiBzdHlsZSA9IHN0eWxlRm9yU2VsZWN0aW9uU3RhcnQoJm1fZnJhbWUsIG5vZGVUb1Jl
bW92ZSk7IC8vIHNldHMgbm9kZVRvUmVtb3ZlCisKKyAgICAgICAgY29uc3QgRm9udCogZm9udCA9
IG51bGxwdHI7CisgICAgICAgIGlmIChzdHlsZSkgeworICAgICAgICAgICAgZm9udCA9ICZzdHls
ZS0+Zm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpOworICAgICAgICAgICAgaWYgKG5vZGVUb1Jl
bW92ZSkKKyAgICAgICAgICAgICAgICBub2RlVG9SZW1vdmUtPnJlbW92ZSgpOworICAgICAgICB9
CisKKyAgICAgICAgcmV0dXJuIGZvbnQ7CisgICAgfQorCisgICAgUmVmUHRyPFJhbmdlPiByYW5n
ZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBpZiAoIXJh
bmdlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIE5vZGUqIHN0YXJ0Tm9kZSA9IGFk
anVzdGVkU2VsZWN0aW9uU3RhcnRGb3JTdHlsZUNvbXB1dGF0aW9uKG1fZnJhbWUuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkpLmRlcHJlY2F0ZWROb2RlKCk7CisgICAgaWYgKCFzdGFydE5vZGUpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgY29uc3QgRm9udCogZm9udCA9IG51bGxwdHI7
CisgICAgTm9kZSogcGFzdEVuZCA9IHJhbmdlLT5wYXN0TGFzdE5vZGUoKTsKKyAgICAvLyBJbiB0
aGUgbG9vcCBiZWxvdywgbiBzaG91bGQgZXZlbnR1YWxseSBtYXRjaCBwYXN0RW5kIGFuZCBub3Qg
YmVjb21lIG5pbCwgYnV0IHdlJ3ZlIHNlZW4gYXQgbGVhc3Qgb25lCisgICAgLy8gdW5yZXByb2R1
Y2libGUgY2FzZSB3aGVyZSB0aGlzIGRpZG4ndCBoYXBwZW4sIHNvIGNoZWNrIGZvciBudWxsIGFs
c28uCisgICAgZm9yIChOb2RlKiBub2RlID0gc3RhcnROb2RlOyBub2RlICYmIG5vZGUgIT0gcGFz
dEVuZDsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKm5vZGUpKSB7CisgICAgICAgIGF1dG8g
cmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOworICAgICAgICBpZiAoIXJlbmRlcmVyKQorICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIC8vIEZJWE1FOiBBcmUgdGhlcmUgYW55IG5vZGUg
dHlwZXMgdGhhdCBoYXZlIHJlbmRlcmVycywgYnV0IHRoYXQgd2Ugc2hvdWxkIGJlIHNraXBwaW5n
PworICAgICAgICBjb25zdCBGb250JiBwcmltYXJ5Rm9udCA9IHJlbmRlcmVyLT5zdHlsZSgpLmZv
bnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKTsKKyAgICAgICAgaWYgKCFmb250KQorICAgICAgICAg
ICAgZm9udCA9ICZwcmltYXJ5Rm9udDsKKyAgICAgICAgZWxzZSBpZiAoZm9udCAhPSAmcHJpbWFy
eUZvbnQpIHsKKyAgICAgICAgICAgIGhhc011bHRpcGxlRm9udHMgPSB0cnVlOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZm9udDsKK30KKworCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0VkaXRvci5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAppbmRleCA3MzMwZWJi
MDNlYTg0MWE3YzhlMTBkYzNiMDgzYjc0MTFkMDg5MTcxLi41NjdjNjViNjQ5MzUxMjdmNjc4ZTcz
OWM4MDAwODRhYTYzYzdiNTY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKQEAgLTQ0MywxMCAr
NDQzLDExIEBAIHB1YmxpYzoKIAogICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiB3ZWJDb250
ZW50RnJvbVBhc3RlYm9hcmQoUGFzdGVib2FyZCYsIFJhbmdlJiBjb250ZXh0LCBib29sIGFsbG93
UGxhaW5UZXh0LCBib29sJiBjaG9zZVBsYWluVGV4dCk7CiAKLSNpZiBQTEFURk9STShDT0NPQSkK
KyAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCBGb250KiBmb250Rm9yU2VsZWN0aW9uKGJvb2wmIGhh
c011bHRpcGxlRm9udHMpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBjb25zdCBS
ZW5kZXJTdHlsZSogc3R5bGVGb3JTZWxlY3Rpb25TdGFydChGcmFtZSogLCBOb2RlICombm9kZVRv
UmVtb3ZlKTsKKworI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIHZvaWQgZ2V0VGV4dERlY29yYXRp
b25BdHRyaWJ1dGVzUmVzcGVjdGluZ1R5cGluZ1N0eWxlKGNvbnN0IFJlbmRlclN0eWxlJiwgTlNN
dXRhYmxlRGljdGlvbmFyeSopIGNvbnN0OwotICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IEZvbnQq
IGZvbnRGb3JTZWxlY3Rpb24oYm9vbCYpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIE5TRGlj
dGlvbmFyeSAqZm9udEF0dHJpYnV0ZXNGb3JTZWxlY3Rpb25TdGFydCgpIGNvbnN0OwogICAgIFdF
QkNPUkVfRVhQT1JUIFN0cmluZyBzdHJpbmdTZWxlY3Rpb25Gb3JQYXN0ZWJvYXJkKCk7CiAgICAg
U3RyaW5nIHN0cmluZ1NlbGVjdGlvbkZvclBhc3RlYm9hcmRXaXRoSW1hZ2VBbHRUZXh0KCk7CkBA
IC01MTIsMTYgKzUxMywyMCBAQCBwcml2YXRlOgogCiAgICAgYm9vbCB1bmlmaWVkVGV4dENoZWNr
ZXJFbmFibGVkKCkgY29uc3Q7CiAKKyAgICBSZWZQdHI8UmFuZ2U+IGFkanVzdGVkU2VsZWN0aW9u
UmFuZ2UoKTsKKwogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+
IHNlbGVjdGlvbkluV2ViQXJjaGl2ZUZvcm1hdCgpOwogICAgIFN0cmluZyBzZWxlY3Rpb25JbkhU
TUxGb3JtYXQoKTsKICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBpbWFnZUluV2ViQXJjaGl2ZUZv
cm1hdChFbGVtZW50Jik7Ci0gICAgUmVmUHRyPFJhbmdlPiBhZGp1c3RlZFNlbGVjdGlvblJhbmdl
KCk7CiAgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50Rm9ySW1hZ2VS
ZXNvdXJjZUFuZEFkZFJlc291cmNlKFJlZlB0cjxBcmNoaXZlUmVzb3VyY2U+JiYpOwogICAgIFJl
ZjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZvckltYWdlQW5kVVJMKGNvbnN0IFN0
cmluZyYpOwogICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEFuZEFk
ZFJlc291cmNlcyhOU0F0dHJpYnV0ZWRTdHJpbmcgKik7CiAgICAgRnJhZ21lbnRBbmRSZXNvdXJj
ZXMgY3JlYXRlRnJhZ21lbnQoTlNBdHRyaWJ1dGVkU3RyaW5nICopOwogICAgIHZvaWQgZmlsbElu
VXNlclZpc2libGVGb3JtKFBhc3RlYm9hcmRVUkwmKTsKKworICAgIHN0YXRpYyBSZWZQdHI8U2hh
cmVkQnVmZmVyPiBkYXRhSW5SVEZERm9ybWF0KE5TQXR0cmlidXRlZFN0cmluZyAqKTsKKyAgICBz
dGF0aWMgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YUluUlRGRm9ybWF0KE5TQXR0cmlidXRlZFN0
cmluZyAqKTsKICNlbmRpZgogCiAgICAgdm9pZCBwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0
aW9uRm9yQ3V0KGNvbnN0IFN0cmluZyYsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRWRpdG9yQ29jb2EubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tCmluZGV4IGM1N2Q2NGQzOTdh
ZTQ2Y2IyZTQyOWU5MDk5ODQ1MzlkNzBkODRiOWYuLjBhNWQzNWZmNTk1M2I0N2Q3MzNhZDVlYWNl
NTFlMWZjYjg4MzE4NDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2Ev
RWRpdG9yQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9FZGl0b3JD
b2NvYS5tbQpAQCAtMzAsMTYgKzMwLDIzIEBACiAjaW1wb3J0ICJDU1NWYWx1ZUxpc3QuaCIKICNp
bXBvcnQgIkNTU1ZhbHVlUG9vbC5oIgogI2ltcG9ydCAiRG9jdW1lbnRGcmFnbWVudC5oIgorI2lt
cG9ydCAiRG9jdW1lbnRMb2FkZXIuaCIKICNpbXBvcnQgIkVkaXRpbmdTdHlsZS5oIgorI2ltcG9y
dCAiRWRpdG9yQ2xpZW50LmgiCiAjaW1wb3J0ICJGcmFtZS5oIgogI2ltcG9ydCAiRnJhbWVTZWxl
Y3Rpb24uaCIKKyNpbXBvcnQgIkhUTUxDb252ZXJ0ZXIuaCIKKyNpbXBvcnQgIkhUTUxJbWFnZUVs
ZW1lbnQuaCIKICNpbXBvcnQgIkhUTUxTcGFuRWxlbWVudC5oIgorI2ltcG9ydCAiTGVnYWN5V2Vi
QXJjaGl2ZS5oIgogI2ltcG9ydCAiTlNBdHRyaWJ1dGVkU3RyaW5nU1BJLmgiCisjaW1wb3J0ICJQ
YXN0ZWJvYXJkLmgiCiAjaW1wb3J0ICJSZW5kZXJFbGVtZW50LmgiCiAjaW1wb3J0ICJSZW5kZXJT
dHlsZS5oIgogI2ltcG9ydCAiU29mdExpbmtpbmcuaCIKICNpbXBvcnQgIlRleHQuaCIKICNpbXBv
cnQgImh0bWxlZGl0aW5nLmgiCisjaW1wb3J0IDx3dGYvQmxvY2tPYmpDRXhjZXB0aW9ucy5oPgog
CiAjaWYgUExBVEZPUk0oSU9TKQogU09GVF9MSU5LX1BSSVZBVEVfRlJBTUVXT1JLKFdlYktpdExl
Z2FjeSkKQEAgLTUzLDM5ICs2MCw2IEBAIFNPRlRfTElOSyhXZWJLaXRMZWdhY3ksIF9XZWJDcmVh
dGVGcmFnbWVudCwgdm9pZCwgKFdlYkNvcmU6OkRvY3VtZW50JiBkb2N1bWVudCwKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi0vLyBGSVhNRTogVGhpcyBmaWd1cmVzIG91dCB0aGUgY3VycmVudCBz
dHlsZSBieSBpbnNlcnRpbmcgYSA8c3Bhbj4hCi1jb25zdCBSZW5kZXJTdHlsZSogRWRpdG9yOjpz
dHlsZUZvclNlbGVjdGlvblN0YXJ0KEZyYW1lKiBmcmFtZSwgTm9kZSomIG5vZGVUb1JlbW92ZSkK
LXsKLSAgICBub2RlVG9SZW1vdmUgPSBudWxscHRyOwotICAgIAotICAgIGlmIChmcmFtZS0+c2Vs
ZWN0aW9uKCkuaXNOb25lKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgUG9zaXRp
b24gcG9zaXRpb24gPSBhZGp1c3RlZFNlbGVjdGlvblN0YXJ0Rm9yU3R5bGVDb21wdXRhdGlvbihm
cmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwotICAgIGlmICghcG9zaXRpb24uaXNDYW5k
aWRhdGUoKSB8fCBwb3NpdGlvbi5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiB0eXBpbmdTdHlsZSA9IGZyYW1lLT5zZWxlY3Rpb24o
KS50eXBpbmdTdHlsZSgpOwotICAgIGlmICghdHlwaW5nU3R5bGUgfHwgIXR5cGluZ1N0eWxlLT5z
dHlsZSgpKQotICAgICAgICByZXR1cm4gJnBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCktPnJlbmRl
cmVyKCktPnN0eWxlKCk7Ci0KLSAgICBhdXRvIHN0eWxlRWxlbWVudCA9IEhUTUxTcGFuRWxlbWVu
dDo6Y3JlYXRlKCpmcmFtZS0+ZG9jdW1lbnQoKSk7Ci0KLSAgICBTdHJpbmcgc3R5bGVUZXh0ID0g
dHlwaW5nU3R5bGUtPnN0eWxlKCktPmFzVGV4dCgpICsgIiBkaXNwbGF5OiBpbmxpbmUiOwotICAg
IHN0eWxlRWxlbWVudC0+c2V0QXR0cmlidXRlKEhUTUxOYW1lczo6c3R5bGVBdHRyLCBzdHlsZVRl
eHQpOwotCi0gICAgc3R5bGVFbGVtZW50LT5hcHBlbmRDaGlsZChmcmFtZS0+ZG9jdW1lbnQoKS0+
Y3JlYXRlRWRpdGluZ1RleHROb2RlKGVtcHR5U3RyaW5nKCkpKTsKLQotICAgIGF1dG8gcG9zaXRp
b25Ob2RlID0gcG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKTsKLSAgICBpZiAoIXBvc2l0aW9uTm9k
ZSB8fCAhcG9zaXRpb25Ob2RlLT5wYXJlbnROb2RlKCkgfHwgcG9zaXRpb25Ob2RlLT5wYXJlbnRO
b2RlKCktPmFwcGVuZENoaWxkKHN0eWxlRWxlbWVudCkuaGFzRXhjZXB0aW9uKCkpCi0gICAgICAg
IHJldHVybiBudWxscHRyOwotCi0gICAgbm9kZVRvUmVtb3ZlID0gc3R5bGVFbGVtZW50LnB0cigp
OwotCi0gICAgZnJhbWUtPmRvY3VtZW50KCktPnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKLSAgICBy
ZXR1cm4gc3R5bGVFbGVtZW50LT5yZW5kZXJlcigpID8gJnN0eWxlRWxlbWVudC0+cmVuZGVyZXIo
KS0+c3R5bGUoKSA6IG51bGxwdHI7Ci19Ci0KIHZvaWQgRWRpdG9yOjpnZXRUZXh0RGVjb3JhdGlv
bkF0dHJpYnV0ZXNSZXNwZWN0aW5nVHlwaW5nU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxl
LCBOU011dGFibGVEaWN0aW9uYXJ5KiByZXN1bHQpIGNvbnN0CiB7CiAgICAgUmVmUHRyPEVkaXRp
bmdTdHlsZT4gdHlwaW5nU3R5bGUgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnR5cGluZ1N0eWxlKCk7
CkBAIC0xMTYsNCArOTAsOTkgQEAgRnJhZ21lbnRBbmRSZXNvdXJjZXMgRWRpdG9yOjpjcmVhdGVG
cmFnbWVudChOU0F0dHJpYnV0ZWRTdHJpbmcgKnN0cmluZykKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCit2b2lkIEVkaXRvcjo6d3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoUGFzdGVib2FyZCYg
cGFzdGVib2FyZCkKK3sKKyAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmcg
PSBhdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlKCpzZWxlY3RlZFJhbmdlKCkpOworCisgICAgUGFz
dGVib2FyZFdlYkNvbnRlbnQgY29udGVudDsKKyAgICBjb250ZW50LmNhblNtYXJ0Q29weU9yRGVs
ZXRlID0gY2FuU21hcnRDb3B5T3JEZWxldGUoKTsKKyAgICBjb250ZW50LmRhdGFJbldlYkFyY2hp
dmVGb3JtYXQgPSBzZWxlY3Rpb25JbldlYkFyY2hpdmVGb3JtYXQoKTsKKyAgICBjb250ZW50LmRh
dGFJblJURkRGb3JtYXQgPSBhdHRyaWJ1dGVkU3RyaW5nLmNvbnRhaW5zQXR0YWNobWVudHMgPyBk
YXRhSW5SVEZERm9ybWF0KGF0dHJpYnV0ZWRTdHJpbmcpIDogbnVsbHB0cjsKKyAgICBjb250ZW50
LmRhdGFJblJURkZvcm1hdCA9IGRhdGFJblJURkZvcm1hdChhdHRyaWJ1dGVkU3RyaW5nKTsKKyAg
ICAvLyBGSVhNRTogV2h5IGRvbid0IHdlIHdhbnQgdGhpcyBvbiBpT1M/CisjaWYgUExBVEZPUk0o
TUFDKQorICAgIGNvbnRlbnQuZGF0YUluSFRNTEZvcm1hdCA9IHNlbGVjdGlvbkluSFRNTEZvcm1h
dCgpOworI2VuZGlmCisgICAgY29udGVudC5kYXRhSW5TdHJpbmdGb3JtYXQgPSBzdHJpbmdTZWxl
Y3Rpb25Gb3JQYXN0ZWJvYXJkV2l0aEltYWdlQWx0VGV4dCgpOworICAgIGNsaWVudCgpLT5nZXRD
bGllbnRQYXN0ZWJvYXJkRGF0YUZvclJhbmdlKHNlbGVjdGVkUmFuZ2UoKS5nZXQoKSwgY29udGVu
dC5jbGllbnRUeXBlcywgY29udGVudC5jbGllbnREYXRhKTsKKworICAgIHBhc3RlYm9hcmQud3Jp
dGUoY29udGVudCk7Cit9CisKK1JlZlB0cjxTaGFyZWRCdWZmZXI+IEVkaXRvcjo6c2VsZWN0aW9u
SW5XZWJBcmNoaXZlRm9ybWF0KCkKK3sKKyAgICBSZWZQdHI8TGVnYWN5V2ViQXJjaGl2ZT4gYXJj
aGl2ZSA9IExlZ2FjeVdlYkFyY2hpdmU6OmNyZWF0ZUZyb21TZWxlY3Rpb24oJm1fZnJhbWUpOwor
ICAgIGlmICghYXJjaGl2ZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIFNo
YXJlZEJ1ZmZlcjo6d3JhcENGRGF0YShhcmNoaXZlLT5yYXdEYXRhUmVwcmVzZW50YXRpb24oKS5n
ZXQoKSk7Cit9CisKK3ZvaWQgRWRpdG9yOjpyZXBsYWNlU2VsZWN0aW9uV2l0aEF0dHJpYnV0ZWRT
dHJpbmcoTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nLCBNYWlsQmxvY2txdW90
ZUhhbmRsaW5nIG1haWxCbG9ja3F1b3RlSGFuZGxpbmcpCit7CisgICAgaWYgKG1fZnJhbWUuc2Vs
ZWN0aW9uKCkuaXNOb25lKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX2ZyYW1lLnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkpIHsKKyAgICAg
ICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRBbmRB
ZGRSZXNvdXJjZXMoYXR0cmlidXRlZFN0cmluZyk7CisgICAgICAgIGlmIChmcmFnbWVudCAmJiBz
aG91bGRJbnNlcnRGcmFnbWVudChmcmFnbWVudCwgc2VsZWN0ZWRSYW5nZSgpLCBFZGl0b3JJbnNl
cnRBY3Rpb246OlBhc3RlZCkpCisgICAgICAgICAgICBwYXN0ZUFzRnJhZ21lbnQoZnJhZ21lbnQu
cmVsZWFzZU5vbk51bGwoKSwgZmFsc2UsIGZhbHNlLCBtYWlsQmxvY2txdW90ZUhhbmRsaW5nKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBTdHJpbmcgdGV4dCA9IGF0dHJpYnV0ZWRTdHJpbmcuc3Ry
aW5nOworICAgICAgICBpZiAoc2hvdWxkSW5zZXJ0VGV4dCh0ZXh0LCBzZWxlY3RlZFJhbmdlKCku
Z2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVkKSkKKyAgICAgICAgICAgIHBhc3RlQXNQ
bGFpblRleHQodGV4dCwgZmFsc2UpOworICAgIH0KK30KKworUmVmUHRyPERvY3VtZW50RnJhZ21l
bnQ+IEVkaXRvcjo6Y3JlYXRlRnJhZ21lbnRGb3JJbWFnZVJlc291cmNlQW5kQWRkUmVzb3VyY2Uo
UmVmUHRyPEFyY2hpdmVSZXNvdXJjZT4mJiByZXNvdXJjZSkKK3sKKyAgICBpZiAoIXJlc291cmNl
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIC8vIEZJWE1FOiBXaHkgaXMgdGhpcyBk
aWZmZXJlbnQ/CisjaWYgUExBVEZPUk0oTUFDKQorICAgIFN0cmluZyByZXNvdXJjZVVSTCA9IHJl
c291cmNlLT51cmwoKS5zdHJpbmcoKTsKKyNlbHNlCisgICAgTlNVUkwgKlVSTCA9IHJlc291cmNl
LT51cmwoKTsKKyAgICBTdHJpbmcgcmVzb3VyY2VVUkwgPSBVUkwuaXNGaWxlVVJMID8gVVJMLmFi
c29sdXRlU3RyaW5nIDogcmVzb3VyY2UtPnVybCgpOworI2VuZGlmCisKKyAgICBpZiAoRG9jdW1l
bnRMb2FkZXIqIGxvYWRlciA9IG1fZnJhbWUubG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKSkKKyAg
ICAgICAgbG9hZGVyLT5hZGRBcmNoaXZlUmVzb3VyY2UocmVzb3VyY2UucmVsZWFzZU5vbk51bGwo
KSk7CisKKyAgICBhdXRvIGltYWdlRWxlbWVudCA9IEhUTUxJbWFnZUVsZW1lbnQ6OmNyZWF0ZSgq
bV9mcmFtZS5kb2N1bWVudCgpKTsKKyAgICBpbWFnZUVsZW1lbnQtPnNldEF0dHJpYnV0ZVdpdGhv
dXRTeW5jaHJvbml6YXRpb24oSFRNTE5hbWVzOjpzcmNBdHRyLCByZXNvdXJjZVVSTCk7CisKKyAg
ICBhdXRvIGZyYWdtZW50ID0gbV9mcmFtZS5kb2N1bWVudCgpLT5jcmVhdGVEb2N1bWVudEZyYWdt
ZW50KCk7CisgICAgZnJhZ21lbnQtPmFwcGVuZENoaWxkKGltYWdlRWxlbWVudCk7CisgICAgCisg
ICAgcmV0dXJuIFdURk1vdmUoZnJhZ21lbnQpOworfQorCitSZWZQdHI8U2hhcmVkQnVmZmVyPiBF
ZGl0b3I6OmRhdGFJblJURkRGb3JtYXQoTlNBdHRyaWJ1dGVkU3RyaW5nICpzdHJpbmcpCit7Cisg
ICAgTlNVSW50ZWdlciBsZW5ndGggPSBzdHJpbmcubGVuZ3RoOworICAgIGlmICghbGVuZ3RoKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9O
UzsKKyAgICByZXR1cm4gU2hhcmVkQnVmZmVyOjp3cmFwTlNEYXRhKFtzdHJpbmcgUlRGREZyb21S
YW5nZTpOU01ha2VSYW5nZSgwLCBsZW5ndGgpIGRvY3VtZW50QXR0cmlidXRlczpAeyB9XSk7Cisg
ICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKworICAgIHJldHVybiBudWxscHRyOworfQor
CitSZWZQdHI8U2hhcmVkQnVmZmVyPiBFZGl0b3I6OmRhdGFJblJURkZvcm1hdChOU0F0dHJpYnV0
ZWRTdHJpbmcgKnN0cmluZykKK3sKKyAgICBOU1VJbnRlZ2VyIGxlbmd0aCA9IHN0cmluZy5sZW5n
dGg7CisgICAgaWYgKCFsZW5ndGgpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgQkVH
SU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIHJldHVybiBTaGFyZWRCdWZmZXI6OndyYXBO
U0RhdGEoW3N0cmluZyBSVEZGcm9tUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgbGVuZ3RoKSBkb2N1bWVu
dEF0dHJpYnV0ZXM6QHsgfV0pOworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisKKyAg
ICByZXR1cm4gbnVsbHB0cjsKK30KKworCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL2lvcy9FZGl0b3JJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0
b3JJT1MubW0KaW5kZXggYzVlOGMyOTEyNGJmMDdiYTk2Y2U1NGMyN2VjYjhiY2ZmN2I1NjQ3ZS4u
YjNlODU1NDQ1MTA0YWQzMGM4MzBkOWJkYTAwYjk2YzgyN2RiMTRlNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbQpAQCAtNjIsMTggKzYyLDE0IEBACiAjaW1wb3J0ICJo
dG1sZWRpdGluZy5oIgogI2ltcG9ydCAibWFya3VwLmgiCiAjaW1wb3J0IDxNb2JpbGVDb3JlU2Vy
dmljZXMvTW9iaWxlQ29yZVNlcnZpY2VzLmg+Ci0jaW1wb3J0IDx3dGYvQmxvY2tPYmpDRXhjZXB0
aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogU09GVF9MSU5L
X0ZSQU1FV09SSyhBcHBTdXBwb3J0KQogU09GVF9MSU5LKEFwcFN1cHBvcnQsIENQU2hhcmVkUmVz
b3VyY2VzRGlyZWN0b3J5LCBDRlN0cmluZ1JlZiwgKHZvaWQpLCAoKSkKIAotQGludGVyZmFjZSBO
U0F0dHJpYnV0ZWRTdHJpbmcgKE5TQXR0cmlidXRlZFN0cmluZ0tpdEFkZGl0aW9ucykKK0BpbnRl
cmZhY2UgTlNBdHRyaWJ1dGVkU3RyaW5nICgpCiAtIChpZClpbml0V2l0aFJURjooTlNEYXRhICop
ZGF0YSBkb2N1bWVudEF0dHJpYnV0ZXM6KE5TRGljdGlvbmFyeSAqKilkaWN0OwogLSAoaWQpaW5p
dFdpdGhSVEZEOihOU0RhdGEgKilkYXRhIGRvY3VtZW50QXR0cmlidXRlczooTlNEaWN0aW9uYXJ5
ICoqKWRpY3Q7Ci0tIChOU0RhdGEgKilSVEZGcm9tUmFuZ2U6KE5TUmFuZ2UpcmFuZ2UgZG9jdW1l
bnRBdHRyaWJ1dGVzOihOU0RpY3Rpb25hcnkgKilkaWN0OwotLSAoTlNEYXRhICopUlRGREZyb21S
YW5nZTooTlNSYW5nZSlyYW5nZSBkb2N1bWVudEF0dHJpYnV0ZXM6KE5TRGljdGlvbmFyeSAqKWRp
Y3Q7Ci0tIChCT09MKWNvbnRhaW5zQXR0YWNobWVudHM7CiBAZW5kCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKQEAgLTE2NSw0OCArMTYxLDYgQEAgdm9pZCBFZGl0b3I6OnNldFRleHRBbGlnbm1lbnRG
b3JDaGFuZ2VkQmFzZVdyaXRpbmdEaXJlY3Rpb24oV3JpdGluZ0RpcmVjdGlvbiBkaXIKICAgICBh
cHBseVBhcmFncmFwaFN0eWxlKHN0eWxlLmdldCgpKTsKIH0KIAotY29uc3QgRm9udCogRWRpdG9y
Ojpmb250Rm9yU2VsZWN0aW9uKGJvb2wmIGhhc011bHRpcGxlRm9udHMpIGNvbnN0Ci17Ci0gICAg
aGFzTXVsdGlwbGVGb250cyA9IGZhbHNlOwotCi0gICAgaWYgKCFtX2ZyYW1lLnNlbGVjdGlvbigp
LmlzUmFuZ2UoKSkgewotICAgICAgICBOb2RlKiBub2RlVG9SZW1vdmU7Ci0gICAgICAgIGF1dG8q
IHN0eWxlID0gc3R5bGVGb3JTZWxlY3Rpb25TdGFydCgmbV9mcmFtZSwgbm9kZVRvUmVtb3ZlKTsg
Ly8gc2V0cyBub2RlVG9SZW1vdmUKLQotICAgICAgICBjb25zdCBGb250KiByZXN1bHQgPSBudWxs
cHRyOwotICAgICAgICBpZiAoc3R5bGUpIHsKLSAgICAgICAgICAgIHJlc3VsdCA9ICZzdHlsZS0+
Zm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpOwotICAgICAgICAgICAgaWYgKG5vZGVUb1JlbW92
ZSkKLSAgICAgICAgICAgICAgICBub2RlVG9SZW1vdmUtPnJlbW92ZSgpOwotICAgICAgICB9Ci0K
LSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICBjb25zdCBGb250KiBmb250ID0g
bnVsbHB0cjsKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS50
b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIGlmIChOb2RlKiBzdGFydE5vZGUgPSBhZGp1c3RlZFNl
bGVjdGlvblN0YXJ0Rm9yU3R5bGVDb21wdXRhdGlvbihtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpKS5kZXByZWNhdGVkTm9kZSgpKSB7Ci0gICAgICAgIE5vZGUqIHBhc3RFbmQgPSByYW5n
ZS0+cGFzdExhc3ROb2RlKCk7Ci0gICAgICAgIC8vIEluIHRoZSBsb29wIGJlbG93LCBuIHNob3Vs
ZCBldmVudHVhbGx5IG1hdGNoIHBhc3RFbmQgYW5kIG5vdCBiZWNvbWUgbmlsLCBidXQgd2UndmUg
c2VlbiBhdCBsZWFzdCBvbmUKLSAgICAgICAgLy8gdW5yZXByb2R1Y2libGUgY2FzZSB3aGVyZSB0
aGlzIGRpZG4ndCBoYXBwZW4sIHNvIGNoZWNrIGZvciBudWxsIGFsc28uCi0gICAgICAgIGZvciAo
Tm9kZSogbm9kZSA9IHN0YXJ0Tm9kZTsgbm9kZSAmJiBub2RlICE9IHBhc3RFbmQ7IG5vZGUgPSBO
b2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlKSkgewotICAgICAgICAgICAgYXV0byByZW5kZXJlciA9
IG5vZGUtPnJlbmRlcmVyKCk7Ci0gICAgICAgICAgICBpZiAoIXJlbmRlcmVyKQotICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgLy8gRklYTUU6IEFyZSB0aGVyZSBhbnkgbm9k
ZSB0eXBlcyB0aGF0IGhhdmUgcmVuZGVyZXJzLCBidXQgdGhhdCB3ZSBzaG91bGQgYmUgc2tpcHBp
bmc/Ci0gICAgICAgICAgICBjb25zdCBGb250JiBwcmltYXJ5Rm9udCA9IHJlbmRlcmVyLT5zdHls
ZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKTsKLSAgICAgICAgICAgIGlmICghZm9udCkK
LSAgICAgICAgICAgICAgICBmb250ID0gJnByaW1hcnlGb250OwotICAgICAgICAgICAgZWxzZSBp
ZiAoZm9udCAhPSAmcHJpbWFyeUZvbnQpIHsKLSAgICAgICAgICAgICAgICBoYXNNdWx0aXBsZUZv
bnRzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgIH0KLQotICAgIHJldHVybiBmb250OwotfQotCiBOU0RpY3Rpb25hcnkqIEVkaXRv
cjo6Zm9udEF0dHJpYnV0ZXNGb3JTZWxlY3Rpb25TdGFydCgpIGNvbnN0CiB7CiAgICAgTm9kZSog
bm9kZVRvUmVtb3ZlOwpAQCAtMjUyLDMyICsyMDYsNiBAQCB2b2lkIEVkaXRvcjo6cmVtb3ZlVW5j
aGFuZ2VhYmxlU3R5bGVzKCkKICAgICBhcHBseVN0eWxlVG9TZWxlY3Rpb24oZGVmYXVsdFN0eWxl
LmdldCgpLCBFZGl0QWN0aW9uQ2hhbmdlQXR0cmlidXRlcyk7CiB9CiAKLXN0YXRpYyBSZWZQdHI8
U2hhcmVkQnVmZmVyPiBkYXRhSW5SVEZERm9ybWF0KE5TQXR0cmlidXRlZFN0cmluZyAqc3RyaW5n
KQotewotICAgIE5TVUludGVnZXIgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aDsKLSAgICBpZiAoIWxl
bmd0aCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBCRUdJTl9CTE9DS19PQkpDX0VY
Q0VQVElPTlM7Ci0gICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6d3JhcE5TRGF0YShbc3RyaW5nIFJU
RkRGcm9tUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgbGVuZ3RoKSBkb2N1bWVudEF0dHJpYnV0ZXM6bmls
XSk7Ci0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLQotICAgIHJldHVybiBudWxscHRy
OwotfQotCi1zdGF0aWMgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YUluUlRGRm9ybWF0KE5TQXR0
cmlidXRlZFN0cmluZyAqc3RyaW5nKQotewotICAgIE5TVUludGVnZXIgbGVuZ3RoID0gc3RyaW5n
Lmxlbmd0aDsKLSAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAg
ICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6
d3JhcE5TRGF0YShbc3RyaW5nIFJURkZyb21SYW5nZTpOU01ha2VSYW5nZSgwLCBsZW5ndGgpIGRv
Y3VtZW50QXR0cmlidXRlczpuaWxdKTsKLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwot
Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KIFN0cmluZyBFZGl0b3I6OnN0cmluZ1NlbGVjdGlv
bkZvclBhc3RlYm9hcmRXaXRoSW1hZ2VBbHRUZXh0KCkKIHsKICAgICBTdHJpbmcgdGV4dCA9IHNl
bGVjdGVkVGV4dEZvckRhdGFUcmFuc2ZlcigpOwpAQCAtMjg1LDI5ICsyMTMsNiBAQCBTdHJpbmcg
RWRpdG9yOjpzdHJpbmdTZWxlY3Rpb25Gb3JQYXN0ZWJvYXJkV2l0aEltYWdlQWx0VGV4dCgpCiAg
ICAgcmV0dXJuIHRleHQ7CiB9CiAKLVJlZlB0cjxTaGFyZWRCdWZmZXI+IEVkaXRvcjo6c2VsZWN0
aW9uSW5XZWJBcmNoaXZlRm9ybWF0KCkKLXsKLSAgICBSZWZQdHI8TGVnYWN5V2ViQXJjaGl2ZT4g
YXJjaGl2ZSA9IExlZ2FjeVdlYkFyY2hpdmU6OmNyZWF0ZUZyb21TZWxlY3Rpb24oJm1fZnJhbWUp
OwotICAgIGlmICghYXJjaGl2ZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJu
IFNoYXJlZEJ1ZmZlcjo6d3JhcENGRGF0YShhcmNoaXZlLT5yYXdEYXRhUmVwcmVzZW50YXRpb24o
KS5nZXQoKSk7Ci19Ci0KLXZvaWQgRWRpdG9yOjp3cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChQ
YXN0ZWJvYXJkJiBwYXN0ZWJvYXJkKQotewotICAgIE5TQXR0cmlidXRlZFN0cmluZyAqYXR0cmli
dXRlZFN0cmluZyA9IGF0dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2UoKnNlbGVjdGVkUmFuZ2UoKSk7
Ci0KLSAgICBQYXN0ZWJvYXJkV2ViQ29udGVudCBjb250ZW50OwotICAgIGNvbnRlbnQuY2FuU21h
cnRDb3B5T3JEZWxldGUgPSBjYW5TbWFydENvcHlPckRlbGV0ZSgpOwotICAgIGNvbnRlbnQuZGF0
YUluV2ViQXJjaGl2ZUZvcm1hdCA9IHNlbGVjdGlvbkluV2ViQXJjaGl2ZUZvcm1hdCgpOwotICAg
IGNvbnRlbnQuZGF0YUluUlRGREZvcm1hdCA9IFthdHRyaWJ1dGVkU3RyaW5nIGNvbnRhaW5zQXR0
YWNobWVudHNdID8gZGF0YUluUlRGREZvcm1hdChhdHRyaWJ1dGVkU3RyaW5nKSA6IDA7Ci0gICAg
Y29udGVudC5kYXRhSW5SVEZGb3JtYXQgPSBkYXRhSW5SVEZGb3JtYXQoYXR0cmlidXRlZFN0cmlu
Zyk7Ci0gICAgY29udGVudC5kYXRhSW5TdHJpbmdGb3JtYXQgPSBzdHJpbmdTZWxlY3Rpb25Gb3JQ
YXN0ZWJvYXJkV2l0aEltYWdlQWx0VGV4dCgpOwotICAgIGNsaWVudCgpLT5nZXRDbGllbnRQYXN0
ZWJvYXJkRGF0YUZvclJhbmdlKHNlbGVjdGVkUmFuZ2UoKS5nZXQoKSwgY29udGVudC5jbGllbnRU
eXBlcywgY29udGVudC5jbGllbnREYXRhKTsKLQotICAgIHBhc3RlYm9hcmQud3JpdGUoY29udGVu
dCk7Ci19Ci0KIHN0YXRpYyB2b2lkIGdldEltYWdlKEVsZW1lbnQmIGltYWdlRWxlbWVudCwgUmVm
UHRyPEltYWdlPiYgaW1hZ2UsIENhY2hlZEltYWdlKiYgY2FjaGVkSW1hZ2UpCiB7CiAgICAgYXV0
byogcmVuZGVyZXIgPSBpbWFnZUVsZW1lbnQucmVuZGVyZXIoKTsKQEAgLTU2OSw0MiArNDc0LDYg
QEAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IEVkaXRvcjo6Y3JlYXRlRnJhZ21lbnRBbmRBZGRS
ZXNvdXJjZXMoTlNBdHRyaWJ1dGVkU3RyaW4KICAgICByZXR1cm4gV1RGTW92ZShmcmFnbWVudEFu
ZFJlc291cmNlcy5mcmFnbWVudCk7CiB9CiAKLVJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBFZGl0
b3I6OmNyZWF0ZUZyYWdtZW50Rm9ySW1hZ2VSZXNvdXJjZUFuZEFkZFJlc291cmNlKFJlZlB0cjxB
cmNoaXZlUmVzb3VyY2U+JiYgcmVzb3VyY2UpCi17Ci0gICAgaWYgKCFyZXNvdXJjZSkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBOU1VSTCAqVVJMID0gcmVzb3VyY2UtPnVybCgpOwot
ICAgIFN0cmluZyByZXNvdXJjZVVSTCA9IFtVUkwgaXNGaWxlVVJMXSA/IFtVUkwgYWJzb2x1dGVT
dHJpbmddIDogcmVzb3VyY2UtPnVybCgpOwotCi0gICAgaWYgKERvY3VtZW50TG9hZGVyKiBsb2Fk
ZXIgPSBtX2ZyYW1lLmxvYWRlcigpLmRvY3VtZW50TG9hZGVyKCkpCi0gICAgICAgIGxvYWRlci0+
YWRkQXJjaGl2ZVJlc291cmNlKHJlc291cmNlLnJlbGVhc2VOb25OdWxsKCkpOwotCi0gICAgYXV0
byBpbWFnZUVsZW1lbnQgPSBIVE1MSW1hZ2VFbGVtZW50OjpjcmVhdGUoKm1fZnJhbWUuZG9jdW1l
bnQoKSk7Ci0gICAgaW1hZ2VFbGVtZW50LT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0
aW9uKEhUTUxOYW1lczo6c3JjQXR0ciwgcmVzb3VyY2VVUkwpOwotCi0gICAgYXV0byBmcmFnbWVu
dCA9IG1fZnJhbWUuZG9jdW1lbnQoKS0+Y3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOwotICAgIGZy
YWdtZW50LT5hcHBlbmRDaGlsZChpbWFnZUVsZW1lbnQpOwotCi0gICAgcmV0dXJuIFdURk1vdmUo
ZnJhZ21lbnQpOwotfQotCi12b2lkIEVkaXRvcjo6cmVwbGFjZVNlbGVjdGlvbldpdGhBdHRyaWJ1
dGVkU3RyaW5nKE5TQXR0cmlidXRlZFN0cmluZyAqYXR0cmlidXRlZFN0cmluZywgTWFpbEJsb2Nr
cXVvdGVIYW5kbGluZyBtYWlsQmxvY2txdW90ZUhhbmRsaW5nKQotewotICAgIGlmIChtX2ZyYW1l
LnNlbGVjdGlvbigpLmlzTm9uZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpKSB7Ci0g
ICAgICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50
QW5kQWRkUmVzb3VyY2VzKGF0dHJpYnV0ZWRTdHJpbmcpOwotICAgICAgICBpZiAoZnJhZ21lbnQg
JiYgc2hvdWxkSW5zZXJ0RnJhZ21lbnQoZnJhZ21lbnQsIHNlbGVjdGVkUmFuZ2UoKSwgRWRpdG9y
SW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKQotICAgICAgICAgICAgcGFzdGVBc0ZyYWdtZW50KGZyYWdt
ZW50LnJlbGVhc2VOb25OdWxsKCksIGZhbHNlLCBmYWxzZSwgbWFpbEJsb2NrcXVvdGVIYW5kbGlu
Zyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgU3RyaW5nIHRleHQgPSBbYXR0cmlidXRlZFN0cmlu
ZyBzdHJpbmddOwotICAgICAgICBpZiAoc2hvdWxkSW5zZXJ0VGV4dCh0ZXh0LCBzZWxlY3RlZFJh
bmdlKCkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVkKSkKLSAgICAgICAgICAgIHBh
c3RlQXNQbGFpblRleHQodGV4dCwgZmFsc2UpOwotICAgIH0KLX0KLQogdm9pZCBFZGl0b3I6Omlu
c2VydERpY3RhdGlvblBocmFzZXMoVmVjdG9yPFZlY3RvcjxTdHJpbmc+PiYmIGRpY3RhdGlvblBo
cmFzZXMsIFJldGFpblB0cjxpZD4gbWV0YWRhdGEpCiB7CiAgICAgaWYgKG1fZnJhbWUuc2VsZWN0
aW9uKCkuaXNOb25lKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9F
ZGl0b3JNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0KaW5k
ZXggYjU0YmJkMTdlN2YwOGZlNmVhZjA5OTdlNzg3M2U1ZjVhY2RkMjMxOS4uN2FiOWZmN2RjMDRk
ZmJjNjg2MGRhYjExMTkwYTY5N2Y5NjQ3N2RjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFj
L0VkaXRvck1hYy5tbQpAQCAtNjgsNyArNjgsNiBAQAogI2ltcG9ydCAiV2ViTlNBdHRyaWJ1dGVk
U3RyaW5nRXh0cmFzLmgiCiAjaW1wb3J0ICJodG1sZWRpdGluZy5oIgogI2ltcG9ydCAibWFya3Vw
LmgiCi0jaW1wb3J0IDx3dGYvQmxvY2tPYmpDRXhjZXB0aW9ucy5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKQEAgLTEwNSw0OCArMTA0LDYgQEAgdm9pZCBFZGl0b3I6OnBhc3RlV2l0aFBhc3Rl
Ym9hcmQoUGFzdGVib2FyZCogcGFzdGVib2FyZCwgYm9vbCBhbGxvd1BsYWluVGV4dCwgTWEKICAg
ICBjbGllbnQoKS0+c2V0SW5zZXJ0aW9uUGFzdGVib2FyZChTdHJpbmcoKSk7CiB9CiAKLWNvbnN0
IEZvbnQqIEVkaXRvcjo6Zm9udEZvclNlbGVjdGlvbihib29sJiBoYXNNdWx0aXBsZUZvbnRzKSBj
b25zdAotewotICAgIGhhc011bHRpcGxlRm9udHMgPSBmYWxzZTsKLQotICAgIGlmICghbV9mcmFt
ZS5zZWxlY3Rpb24oKS5pc1JhbmdlKCkpIHsKLSAgICAgICAgTm9kZSogbm9kZVRvUmVtb3ZlOwot
ICAgICAgICBhdXRvKiBzdHlsZSA9IHN0eWxlRm9yU2VsZWN0aW9uU3RhcnQoJm1fZnJhbWUsIG5v
ZGVUb1JlbW92ZSk7IC8vIHNldHMgbm9kZVRvUmVtb3ZlCi0KLSAgICAgICAgY29uc3QgRm9udCog
cmVzdWx0ID0gbnVsbHB0cjsKLSAgICAgICAgaWYgKHN0eWxlKSB7Ci0gICAgICAgICAgICByZXN1
bHQgPSAmc3R5bGUtPmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKTsKLSAgICAgICAgICAgIGlm
IChub2RlVG9SZW1vdmUpCi0gICAgICAgICAgICAgICAgbm9kZVRvUmVtb3ZlLT5yZW1vdmUoKTsK
LSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIGNvbnN0IEZv
bnQqIGZvbnQgPSBudWxscHRyOwotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBtX2ZyYW1lLnNl
bGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgTm9kZSogc3RhcnROb2RlID0gYWRq
dXN0ZWRTZWxlY3Rpb25TdGFydEZvclN0eWxlQ29tcHV0YXRpb24obV9mcmFtZS5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKSkuZGVwcmVjYXRlZE5vZGUoKTsKLSAgICBpZiAocmFuZ2UgJiYgc3RhcnRO
b2RlKSB7Ci0gICAgICAgIE5vZGUqIHBhc3RFbmQgPSByYW5nZS0+cGFzdExhc3ROb2RlKCk7Ci0g
ICAgICAgIC8vIEluIHRoZSBsb29wIGJlbG93LCBuIHNob3VsZCBldmVudHVhbGx5IG1hdGNoIHBh
c3RFbmQgYW5kIG5vdCBiZWNvbWUgbmlsLCBidXQgd2UndmUgc2VlbiBhdCBsZWFzdCBvbmUKLSAg
ICAgICAgLy8gdW5yZXByb2R1Y2libGUgY2FzZSB3aGVyZSB0aGlzIGRpZG4ndCBoYXBwZW4sIHNv
IGNoZWNrIGZvciBudWxsIGFsc28uCi0gICAgICAgIGZvciAoTm9kZSogbm9kZSA9IHN0YXJ0Tm9k
ZTsgbm9kZSAmJiBub2RlICE9IHBhc3RFbmQ7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpu
b2RlKSkgewotICAgICAgICAgICAgYXV0byByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7Ci0g
ICAgICAgICAgICBpZiAoIXJlbmRlcmVyKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgLy8gRklYTUU6IEFyZSB0aGVyZSBhbnkgbm9kZSB0eXBlcyB0aGF0IGhhdmUgcmVu
ZGVyZXJzLCBidXQgdGhhdCB3ZSBzaG91bGQgYmUgc2tpcHBpbmc/Ci0gICAgICAgICAgICBjb25z
dCBGb250JiBwcmltYXJ5Rm9udCA9IHJlbmRlcmVyLT5zdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJp
bWFyeUZvbnQoKTsKLSAgICAgICAgICAgIGlmICghZm9udCkKLSAgICAgICAgICAgICAgICBmb250
ID0gJnByaW1hcnlGb250OwotICAgICAgICAgICAgZWxzZSBpZiAoZm9udCAhPSAmcHJpbWFyeUZv
bnQpIHsKLSAgICAgICAgICAgICAgICBoYXNNdWx0aXBsZUZvbnRzID0gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJl
dHVybiBmb250OwotfQotCiBOU0RpY3Rpb25hcnkqIEVkaXRvcjo6Zm9udEF0dHJpYnV0ZXNGb3JT
ZWxlY3Rpb25TdGFydCgpIGNvbnN0CiB7CiAgICAgTm9kZSogbm9kZVRvUmVtb3ZlOwpAQCAtMzA2
LDE0ICsyNjMsNiBAQCBTdHJpbmcgRWRpdG9yOjpzdHJpbmdTZWxlY3Rpb25Gb3JQYXN0ZWJvYXJk
V2l0aEltYWdlQWx0VGV4dCgpCiAgICAgcmV0dXJuIHRleHQ7CiB9CiAKLVJlZlB0cjxTaGFyZWRC
dWZmZXI+IEVkaXRvcjo6c2VsZWN0aW9uSW5XZWJBcmNoaXZlRm9ybWF0KCkKLXsKLSAgICBSZWZQ
dHI8TGVnYWN5V2ViQXJjaGl2ZT4gYXJjaGl2ZSA9IExlZ2FjeVdlYkFyY2hpdmU6OmNyZWF0ZUZy
b21TZWxlY3Rpb24oJm1fZnJhbWUpOwotICAgIGlmICghYXJjaGl2ZSkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6d3JhcENGRGF0YShhcmNoaXZlLT5y
YXdEYXRhUmVwcmVzZW50YXRpb24oKS5nZXQoKSk7Ci19Ci0KIFN0cmluZyBFZGl0b3I6OnNlbGVj
dGlvbkluSFRNTEZvcm1hdCgpCiB7CiAgICAgcmV0dXJuIGNyZWF0ZU1hcmt1cCgqc2VsZWN0ZWRS
YW5nZSgpLCBudWxscHRyLCBBbm5vdGF0ZUZvckludGVyY2hhbmdlLCBmYWxzZSwgUmVzb2x2ZU5v
bkxvY2FsVVJMcyk7CkBAIC0zMjcsNDUgKzI3Niw2IEBAIFJlZlB0cjxTaGFyZWRCdWZmZXI+IEVk
aXRvcjo6aW1hZ2VJbldlYkFyY2hpdmVGb3JtYXQoRWxlbWVudCYgaW1hZ2VFbGVtZW50KQogICAg
IHJldHVybiBTaGFyZWRCdWZmZXI6OndyYXBDRkRhdGEoYXJjaGl2ZS0+cmF3RGF0YVJlcHJlc2Vu
dGF0aW9uKCkuZ2V0KCkpOwogfQogCi1SZWZQdHI8UmFuZ2U+IEVkaXRvcjo6YWRqdXN0ZWRTZWxl
Y3Rpb25SYW5nZSgpCi17Ci0gICAgLy8gRklYTUU6IFdoeSBkbyB3ZSBuZWVkIHRvIGFkanVzdCB0
aGUgc2VsZWN0aW9uIHRvIGluY2x1ZGUgdGhlIGFuY2hvciB0YWcgaXQncyBpbj8KLSAgICAvLyBX
aG9ldmVyIHdyb3RlIHRoaXMgY29kZSBvcmlnaW5hbGx5IGZvcmdvdCB0byBsZWF2ZSB1cyBhIGNv
bW1lbnQgZXhwbGFpbmluZyB0aGUgcmF0aW9uYWxlLgotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2Ug
PSBzZWxlY3RlZFJhbmdlKCk7Ci0gICAgTm9kZSogY29tbW9uQW5jZXN0b3IgPSByYW5nZS0+Y29t
bW9uQW5jZXN0b3JDb250YWluZXIoKTsKLSAgICBBU1NFUlQoY29tbW9uQW5jZXN0b3IpOwotICAg
IGF1dG8qIGVuY2xvc2luZ0FuY2hvciA9IGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFnKGZpcnN0UG9z
aXRpb25Jbk5vZGUoY29tbW9uQW5jZXN0b3IpLCBIVE1MTmFtZXM6OmFUYWcpOwotICAgIGlmIChl
bmNsb3NpbmdBbmNob3IgJiYgY29tcGFyZVBvc2l0aW9ucyhmaXJzdFBvc2l0aW9uSW5PckJlZm9y
ZU5vZGUocmFuZ2UtPnN0YXJ0UG9zaXRpb24oKS5hbmNob3JOb2RlKCkpLCByYW5nZS0+c3RhcnRQ
b3NpdGlvbigpKSA+PSAwKQotICAgICAgICByYW5nZS0+c2V0U3RhcnQoKmVuY2xvc2luZ0FuY2hv
ciwgMCk7Ci0gICAgcmV0dXJuIHJhbmdlOwotfQotICAgIAotc3RhdGljIFJlZlB0cjxTaGFyZWRC
dWZmZXI+IGRhdGFJblJURkRGb3JtYXQoTlNBdHRyaWJ1dGVkU3RyaW5nICpzdHJpbmcpCi17Ci0g
ICAgTlNVSW50ZWdlciBsZW5ndGggPSBzdHJpbmcubGVuZ3RoOwotICAgIGlmICghbGVuZ3RoKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9O
UzsKLSAgICByZXR1cm4gU2hhcmVkQnVmZmVyOjp3cmFwTlNEYXRhKFtzdHJpbmcgUlRGREZyb21S
YW5nZTpOU01ha2VSYW5nZSgwLCBsZW5ndGgpIGRvY3VtZW50QXR0cmlidXRlczpAeyB9XSk7Ci0g
ICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLQotICAgIHJldHVybiBudWxscHRyOwotfQot
Ci1zdGF0aWMgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YUluUlRGRm9ybWF0KE5TQXR0cmlidXRl
ZFN0cmluZyAqc3RyaW5nKQotewotICAgIE5TVUludGVnZXIgbGVuZ3RoID0gc3RyaW5nLmxlbmd0
aDsKLSAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBCRUdJ
Tl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6d3JhcE5T
RGF0YShbc3RyaW5nIFJURkZyb21SYW5nZTpOU01ha2VSYW5nZSgwLCBsZW5ndGgpIGRvY3VtZW50
QXR0cmlidXRlczpAeyB9XSk7Ci0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLQotICAg
IHJldHVybiBudWxscHRyOwotfQotCiBSZWZQdHI8U2hhcmVkQnVmZmVyPiBFZGl0b3I6OmRhdGFT
ZWxlY3Rpb25Gb3JQYXN0ZWJvYXJkKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUpCiB7CiAg
ICAgLy8gRklYTUU6IFRoZSBpbnRlcmZhY2UgdG8gdGhpcyBmdW5jdGlvbiBpcyBhd2t3YXJkLiBX
ZSdkIHByb2JhYmx5IGJlIGJldHRlciBvZmYgd2l0aCB0aHJlZSBzZXBhcmF0ZSBmdW5jdGlvbnMu
CkBAIC0zOTMsMjIgKzMwMyw2IEBAIFJlZlB0cjxTaGFyZWRCdWZmZXI+IEVkaXRvcjo6ZGF0YVNl
bGVjdGlvbkZvclBhc3RlYm9hcmQoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkCiAgICAgcmV0dXJu
IG51bGxwdHI7CiB9CiAKLXZvaWQgRWRpdG9yOjp3cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChQ
YXN0ZWJvYXJkJiBwYXN0ZWJvYXJkKQotewotICAgIE5TQXR0cmlidXRlZFN0cmluZyAqYXR0cmli
dXRlZFN0cmluZyA9IGF0dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2UoKnNlbGVjdGVkUmFuZ2UoKSk7
Ci0KLSAgICBQYXN0ZWJvYXJkV2ViQ29udGVudCBjb250ZW50OwotICAgIGNvbnRlbnQuY2FuU21h
cnRDb3B5T3JEZWxldGUgPSBjYW5TbWFydENvcHlPckRlbGV0ZSgpOwotICAgIGNvbnRlbnQuZGF0
YUluV2ViQXJjaGl2ZUZvcm1hdCA9IHNlbGVjdGlvbkluV2ViQXJjaGl2ZUZvcm1hdCgpOwotICAg
IGNvbnRlbnQuZGF0YUluUlRGREZvcm1hdCA9IFthdHRyaWJ1dGVkU3RyaW5nIGNvbnRhaW5zQXR0
YWNobWVudHNdID8gZGF0YUluUlRGREZvcm1hdChhdHRyaWJ1dGVkU3RyaW5nKSA6IDA7Ci0gICAg
Y29udGVudC5kYXRhSW5SVEZGb3JtYXQgPSBkYXRhSW5SVEZGb3JtYXQoYXR0cmlidXRlZFN0cmlu
Zyk7Ci0gICAgY29udGVudC5kYXRhSW5IVE1MRm9ybWF0ID0gc2VsZWN0aW9uSW5IVE1MRm9ybWF0
KCk7Ci0gICAgY29udGVudC5kYXRhSW5TdHJpbmdGb3JtYXQgPSBzdHJpbmdTZWxlY3Rpb25Gb3JQ
YXN0ZWJvYXJkV2l0aEltYWdlQWx0VGV4dCgpOwotICAgIGNsaWVudCgpLT5nZXRDbGllbnRQYXN0
ZWJvYXJkRGF0YUZvclJhbmdlKHNlbGVjdGVkUmFuZ2UoKS5nZXQoKSwgY29udGVudC5jbGllbnRU
eXBlcywgY29udGVudC5jbGllbnREYXRhKTsKLQotICAgIHBhc3RlYm9hcmQud3JpdGUoY29udGVu
dCk7Ci19Ci0KIHN0YXRpYyB2b2lkIGdldEltYWdlKEVsZW1lbnQmIGltYWdlRWxlbWVudCwgUmVm
UHRyPEltYWdlPiYgaW1hZ2UsIENhY2hlZEltYWdlKiYgY2FjaGVkSW1hZ2UpCiB7CiAgICAgYXV0
byogcmVuZGVyZXIgPSBpbWFnZUVsZW1lbnQucmVuZGVyZXIoKTsKQEAgLTY2MSwyNCArNTU1LDYg
QEAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IEVkaXRvcjo6d2ViQ29udGVudEZyb21QYXN0ZWJv
YXJkKFBhc3RlYm9hcmQmIHBhc3RlYm9hcmQKICAgICByZXR1cm4gV1RGTW92ZShyZWFkZXIuZnJh
Z21lbnQpOwogfQogCi1SZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gRWRpdG9yOjpjcmVhdGVGcmFn
bWVudEZvckltYWdlUmVzb3VyY2VBbmRBZGRSZXNvdXJjZShSZWZQdHI8QXJjaGl2ZVJlc291cmNl
PiYmIHJlc291cmNlKQotewotICAgIGlmICghcmVzb3VyY2UpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotCi0gICAgU3RyaW5nIHJlc291cmNlVVJMID0gcmVzb3VyY2UtPnVybCgpLnN0cmluZygp
OwotICAgIGlmIChEb2N1bWVudExvYWRlciogbG9hZGVyID0gbV9mcmFtZS5sb2FkZXIoKS5kb2N1
bWVudExvYWRlcigpKQotICAgICAgICBsb2FkZXItPmFkZEFyY2hpdmVSZXNvdXJjZShyZXNvdXJj
ZS5yZWxlYXNlTm9uTnVsbCgpKTsKLQotICAgIGF1dG8gaW1hZ2VFbGVtZW50ID0gSFRNTEltYWdl
RWxlbWVudDo6Y3JlYXRlKCptX2ZyYW1lLmRvY3VtZW50KCkpOwotICAgIGltYWdlRWxlbWVudC0+
c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihIVE1MTmFtZXM6OnNyY0F0dHIsIHJl
c291cmNlVVJMKTsKLQotICAgIGF1dG8gZnJhZ21lbnQgPSBkb2N1bWVudCgpLmNyZWF0ZURvY3Vt
ZW50RnJhZ21lbnQoKTsKLSAgICBmcmFnbWVudC0+YXBwZW5kQ2hpbGQoaW1hZ2VFbGVtZW50KTsK
LQotICAgIHJldHVybiBXVEZNb3ZlKGZyYWdtZW50KTsKLX0KLQogUmVmPERvY3VtZW50RnJhZ21l
bnQ+IEVkaXRvcjo6Y3JlYXRlRnJhZ21lbnRGb3JJbWFnZUFuZFVSTChjb25zdCBTdHJpbmcmIHVy
bCkKIHsKICAgICBhdXRvIGltYWdlRWxlbWVudCA9IEhUTUxJbWFnZUVsZW1lbnQ6OmNyZWF0ZSgq
bV9mcmFtZS5kb2N1bWVudCgpKTsKQEAgLTcxNywyMiArNTkzLDYgQEAgUmVmUHRyPERvY3VtZW50
RnJhZ21lbnQ+IEVkaXRvcjo6Y3JlYXRlRnJhZ21lbnRBbmRBZGRSZXNvdXJjZXMoTlNBdHRyaWJ1
dGVkU3RyaW4KICAgICByZXR1cm4gV1RGTW92ZShmcmFnbWVudEFuZFJlc291cmNlcy5mcmFnbWVu
dCk7CiB9CiAKLXZvaWQgRWRpdG9yOjpyZXBsYWNlU2VsZWN0aW9uV2l0aEF0dHJpYnV0ZWRTdHJp
bmcoTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nLCBNYWlsQmxvY2txdW90ZUhh
bmRsaW5nIG1haWxCbG9ja3F1b3RlSGFuZGxpbmcpCi17Ci0gICAgaWYgKG1fZnJhbWUuc2VsZWN0
aW9uKCkuaXNOb25lKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ZyYW1lLnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkpIHsKLSAgICAgICAg
UmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRBbmRBZGRS
ZXNvdXJjZXMoYXR0cmlidXRlZFN0cmluZyk7Ci0gICAgICAgIGlmIChmcmFnbWVudCAmJiBzaG91
bGRJbnNlcnRGcmFnbWVudChmcmFnbWVudCwgc2VsZWN0ZWRSYW5nZSgpLCBFZGl0b3JJbnNlcnRB
Y3Rpb246OlBhc3RlZCkpCi0gICAgICAgICAgICBwYXN0ZUFzRnJhZ21lbnQoZnJhZ21lbnQucmVs
ZWFzZU5vbk51bGwoKSwgZmFsc2UsIGZhbHNlLCBtYWlsQmxvY2txdW90ZUhhbmRsaW5nKTsKLSAg
ICB9IGVsc2UgewotICAgICAgICBTdHJpbmcgdGV4dCA9IFthdHRyaWJ1dGVkU3RyaW5nIHN0cmlu
Z107Ci0gICAgICAgIGlmIChzaG91bGRJbnNlcnRUZXh0KHRleHQsIHNlbGVjdGVkUmFuZ2UoKS5n
ZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKQotICAgICAgICAgICAgcGFzdGVBc1Bs
YWluVGV4dCh0ZXh0LCBmYWxzZSk7Ci0gICAgfQotfQotCiB2b2lkIEVkaXRvcjo6YXBwbHlGb250
U3R5bGVzKGNvbnN0IFN0cmluZyYgZm9udEZhbWlseSwgZG91YmxlIGZvbnRTaXplLCB1bnNpZ25l
ZCBmb250VHJhaXRzKQogewogICAgIGF1dG8mIGNzc1ZhbHVlUG9vbCA9IENTU1ZhbHVlUG9vbDo6
c2luZ2xldG9uKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcGkvY29j
b2EvTlNBdHRyaWJ1dGVkU3RyaW5nU1BJLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcGkv
Y29jb2EvTlNBdHRyaWJ1dGVkU3RyaW5nU1BJLmgKaW5kZXggZTdjMmJhYjI1NzlkYWIwYmRkNTA5
YzY0Zjg0NTc2ZjA1YmZlODkzMS4uNjIzYzBmODA1NGJkY2RkZGIwMzFkYjA5ZjBhYTNjOGE3M2Yx
OWUwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3BpL2NvY29hL05TQXR0
cmlidXRlZFN0cmluZ1NQSS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NwaS9jb2Nv
YS9OU0F0dHJpYnV0ZWRTdHJpbmdTUEkuaApAQCAtMTExLDYgKzExMSwxMiBAQCBTT0ZUX0xJTktf
Q09OU1RBTlQoVUlGb3VuZGF0aW9uLCBOU0NvY29hVmVyc2lvbkRvY3VtZW50QXR0cmlidXRlLCBO
U1N0cmluZyAqKQogLy8gd2lsbCBjb250aW51ZSB0byBzdXBwb3J0IGl0Lgogc3RhdGljIE5TU3Ry
aW5nICpjb25zdCBOU1N1cGVyc2NyaXB0QXR0cmlidXRlTmFtZSA9IEAiTlNTdXBlcnNjcmlwdCI7
CiAKK0BpbnRlcmZhY2UgTlNBdHRyaWJ1dGVkU3RyaW5nICgpCistIChOU0RhdGEgKilSVEZGcm9t
UmFuZ2U6KE5TUmFuZ2UpcmFuZ2UgZG9jdW1lbnRBdHRyaWJ1dGVzOihOU0RpY3Rpb25hcnkgKilk
aWN0OworLSAoTlNEYXRhICopUlRGREZyb21SYW5nZTooTlNSYW5nZSlyYW5nZSBkb2N1bWVudEF0
dHJpYnV0ZXM6KE5TRGljdGlvbmFyeSAqKWRpY3Q7CistIChCT09MKWNvbnRhaW5zQXR0YWNobWVu
dHM7CitAZW5kCisKICNlbmRpZgogCiAjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>298887</attachid>
            <date>2017-01-14 22:09:00 -0800</date>
            <delta_ts>2017-01-14 22:47:06 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-167062-20170114220716.patch</filename>
            <type>text/plain</type>
            <size>31079</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjEwNzcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTQxOTRlNjQ2MmViZmMx
OWRlNTYxM2FhOTcxOGQ3YzNhYThkMjA1ZS4uYzhhMmNjM2NjOThlZGM1YzQzNTYxOWJlZWQ5ZDNi
ZmYzZTFjNTg4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU3IEBACisyMDE3LTAxLTE0ICBUaW0g
SG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgorCisgICAgICAgIERlLWR1cGxpY2F0
ZSBzb21lIChuZWFybHkpIGlkZW50aWNhbCBjb2RlIGluIEVkaXRvcihNYWN8SU9TKS5tbQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY3MDYyCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgRGFuIEJlcm5zdGVpbi4KKworICAgICAgICBObyBuZXcgdGVzdHMs
IGp1c3QgcmVmYWN0b3JpbmcuCisKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OmZvbnRGb3JTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjpzdHlsZUZvclNlbGVjdGlvblN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkVk
aXRvcjo6YWRqdXN0ZWRTZWxlY3Rpb25SYW5nZSk6CisgICAgICAgICogZWRpdGluZy9FZGl0b3Iu
aDoKKyAgICAgICAgTW92ZSB0aGVzZSB0aHJlZSBmdW5jdGlvbnMgdG8gRWRpdG9yIGFuZCB1bmd1
YXJkIHRoZW0sIGJlY2F1c2UgdGhleSdyZQorICAgICAgICBub3QgQ29jb2Egc3BlY2lmaWMuCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9zcGkvY29jb2EvTlNBdHRyaWJ1dGVkU3RyaW5nU1BJLmg6Cisg
ICAgICAgIE1vdmUgc29tZSBpT1Mtb25seSBOU0F0dHJpYnV0ZWRTdHJpbmcgSVBJIChzbyBubyBJ
bnRlcm5hbCBTREsgc3dpdGNoKQorICAgICAgICB0byBOU0F0dHJpYnV0ZWRTdHJpbmdTUEkuaC4K
KworICAgICAgICAqIGVkaXRpbmcvY29jb2EvRWRpdG9yQ29jb2EubW06CisgICAgICAgIChXZWJD
b3JlOjpFZGl0b3I6OndyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKToKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6c2VsZWN0aW9uSW5XZWJBcmNoaXZlRm9ybWF0KToKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6cmVwbGFjZVNlbGVjdGlvbldpdGhBdHRyaWJ1dGVkU3RyaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6Y3JlYXRlRnJhZ21lbnRGb3JJbWFnZVJlc291cmNlQW5kQWRk
UmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpkYXRhSW5SVEZERm9ybWF0KToK
KyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6ZGF0YUluUlRGRm9ybWF0KToKKyAgICAgICAgTW92
ZSB0aGVzZSBzaXggZnVuY3Rpb25zIGhlcmUuCisgICAgICAgIHNlbGVjdGlvbkluV2ViQXJjaGl2
ZUZvcm1hdCBhbmQgcmVwbGFjZVNlbGVjdGlvbldpdGhBdHRyaWJ1dGVkU3RyaW5nIGFyZQorICAg
ICAgICBlbnRpcmVseSBpZGVudGljYWw7IHdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkIGFuZCBj
cmVhdGVGcmFnbWVudC4uLgorICAgICAgICBib3RoIGhhdmUgc2xpZ2h0bHkgc3VzcGljaW91cy1s
b29raW5nIGRpZmZlcmVuY2VzIHRoYXQgSSBsZWZ0IGludGFjdAorICAgICAgICBhbmQgd3JvdGUg
Y29tbWVudHMgYWJvdXQgKGVzcGVjaWFsbHkgY3JlYXRlRnJhZ21lbnQuLi4sIHRoZSBvdGhlciBv
bmUKKyAgICAgICAgaXMgc29tZXdoYXQgZXhwbGljYWJsZSkuIFRoZSB0d28gZGF0YUluUlRGKEQp
Rm9ybWF0IGZ1bmN0aW9ucyB1c2VkIHRvCisgICAgICAgIGJlIHN0YXRpYyBmdW5jdGlvbnMsIGJ1
dCBmb3Igbm93IGFyZSByZXF1aXJlZCBmcm9tIGJvdGggRWRpdG9yQ29jb2EKKyAgICAgICAgYW5k
IEVkaXRvcihNYWN8SU9TKSwgc28gd2UnbGwgbWFrZSB0aGVtIHN0YXRpYyBtZW1iZXIgZnVuY3Rp
b25zLgorCisgICAgICAgICogZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1tOgorICAgICAgICAoV2Vi
Q29yZTo6RWRpdG9yOjpmb250Rm9yU2VsZWN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6c2VsZWN0aW9uSW5XZWJBcmNoaXZlRm9ybWF0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OmRhdGFJblJURkRGb3JtYXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6ZGF0YUluUlRGRm9ybWF0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6
d3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpjcmVhdGVGcmFnbWVudEZvckltYWdlUmVzb3VyY2VBbmRBZGRSZXNvdXJjZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnJlcGxhY2VTZWxlY3Rpb25XaXRoQXR0
cmlidXRlZFN0cmluZyk6IERlbGV0ZWQuCisgICAgICAgICogZWRpdGluZy9tYWMvRWRpdG9yTWFj
Lm1tOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpmb250Rm9yU2VsZWN0aW9uKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0aW9uSW5XZWJBcmNoaXZlRm9ybWF0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmRhdGFJblJURkRGb3JtYXQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6ZGF0YUluUlRGRm9ybWF0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6d3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjcmVhdGVGcmFnbWVudEZvckltYWdlUmVzb3VyY2VB
bmRBZGRSZXNvdXJjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnJlcGxh
Y2VTZWxlY3Rpb25XaXRoQXR0cmlidXRlZFN0cmluZyk6IERlbGV0ZWQuCisKIDIwMTctMDEtMTQg
IFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBTbWFsbCBjb2RlIGNs
ZWFudXAgYWZ0ZXIgcjIxMDc2MApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9F
ZGl0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCmluZGV4IDRkMzg0
MWI2YjAxNzQxMzM3ZTMzZDIwMzE5OGI3NjUzZmZjM2M3ZjMuLjA4ZTUzOTE1Nzc4OGZiNTcxNWZh
ZWQ5YmNlYzVkNWZlNDNjMTI1ODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RWRpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKQEAgLTU2
LDYgKzU2LDcgQEAKICNpbmNsdWRlICJIVE1MSW1hZ2VFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRN
TElucHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkhUTUxT
cGFuRWxlbWVudC5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJJbmRl
bnRPdXRkZW50Q29tbWFuZC5oIgogI2luY2x1ZGUgIklucHV0RXZlbnQuaCIKQEAgLTM2NDYsNCAr
MzY0Nyw5OCBAQCBEb2N1bWVudCYgRWRpdG9yOjpkb2N1bWVudCgpIGNvbnN0CiAgICAgcmV0dXJu
ICptX2ZyYW1lLmRvY3VtZW50KCk7CiB9CiAKK1JlZlB0cjxSYW5nZT4gRWRpdG9yOjphZGp1c3Rl
ZFNlbGVjdGlvblJhbmdlKCkKK3sKKyAgICAvLyBGSVhNRTogV2h5IGRvIHdlIG5lZWQgdG8gYWRq
dXN0IHRoZSBzZWxlY3Rpb24gdG8gaW5jbHVkZSB0aGUgYW5jaG9yIHRhZyBpdCdzIGluPworICAg
IC8vIFdob2V2ZXIgd3JvdGUgdGhpcyBjb2RlIG9yaWdpbmFsbHkgZm9yZ290IHRvIGxlYXZlIHVz
IGEgY29tbWVudCBleHBsYWluaW5nIHRoZSByYXRpb25hbGUuCisgICAgUmVmUHRyPFJhbmdlPiBy
YW5nZSA9IHNlbGVjdGVkUmFuZ2UoKTsKKyAgICBOb2RlKiBjb21tb25BbmNlc3RvciA9IHJhbmdl
LT5jb21tb25BbmNlc3RvckNvbnRhaW5lcigpOworICAgIEFTU0VSVChjb21tb25BbmNlc3Rvcik7
CisgICAgYXV0byogZW5jbG9zaW5nQW5jaG9yID0gZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcoZmly
c3RQb3NpdGlvbkluTm9kZShjb21tb25BbmNlc3RvciksIEhUTUxOYW1lczo6YVRhZyk7CisgICAg
aWYgKGVuY2xvc2luZ0FuY2hvciAmJiBjb21wYXJlUG9zaXRpb25zKGZpcnN0UG9zaXRpb25Jbk9y
QmVmb3JlTm9kZShyYW5nZS0+c3RhcnRQb3NpdGlvbigpLmFuY2hvck5vZGUoKSksIHJhbmdlLT5z
dGFydFBvc2l0aW9uKCkpID49IDApCisgICAgICAgIHJhbmdlLT5zZXRTdGFydCgqZW5jbG9zaW5n
QW5jaG9yLCAwKTsKKyAgICByZXR1cm4gcmFuZ2U7Cit9CisKKy8vIEZJWE1FOiBUaGlzIGZpZ3Vy
ZXMgb3V0IHRoZSBjdXJyZW50IHN0eWxlIGJ5IGluc2VydGluZyBhIDxzcGFuPiEKK2NvbnN0IFJl
bmRlclN0eWxlKiBFZGl0b3I6OnN0eWxlRm9yU2VsZWN0aW9uU3RhcnQoRnJhbWUqIGZyYW1lLCBO
b2RlKiYgbm9kZVRvUmVtb3ZlKQoreworICAgIG5vZGVUb1JlbW92ZSA9IG51bGxwdHI7CisKKyAg
ICBpZiAoZnJhbWUtPnNlbGVjdGlvbigpLmlzTm9uZSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgIFBvc2l0aW9uIHBvc2l0aW9uID0gYWRqdXN0ZWRTZWxlY3Rpb25TdGFydEZvclN0
eWxlQ29tcHV0YXRpb24oZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICBpZiAo
IXBvc2l0aW9uLmlzQ2FuZGlkYXRlKCkgfHwgcG9zaXRpb24uaXNOdWxsKCkpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gdHlwaW5nU3R5bGUgPSBm
cmFtZS0+c2VsZWN0aW9uKCkudHlwaW5nU3R5bGUoKTsKKyAgICBpZiAoIXR5cGluZ1N0eWxlIHx8
ICF0eXBpbmdTdHlsZS0+c3R5bGUoKSkKKyAgICAgICAgcmV0dXJuICZwb3NpdGlvbi5kZXByZWNh
dGVkTm9kZSgpLT5yZW5kZXJlcigpLT5zdHlsZSgpOworCisgICAgYXV0byBzdHlsZUVsZW1lbnQg
PSBIVE1MU3BhbkVsZW1lbnQ6OmNyZWF0ZSgqZnJhbWUtPmRvY3VtZW50KCkpOworCisgICAgU3Ry
aW5nIHN0eWxlVGV4dCA9IHR5cGluZ1N0eWxlLT5zdHlsZSgpLT5hc1RleHQoKSArICIgZGlzcGxh
eTogaW5saW5lIjsKKyAgICBzdHlsZUVsZW1lbnQtPnNldEF0dHJpYnV0ZShIVE1MTmFtZXM6OnN0
eWxlQXR0ciwgc3R5bGVUZXh0KTsKKworICAgIHN0eWxlRWxlbWVudC0+YXBwZW5kQ2hpbGQoZnJh
bWUtPmRvY3VtZW50KCktPmNyZWF0ZUVkaXRpbmdUZXh0Tm9kZShlbXB0eVN0cmluZygpKSk7CisK
KyAgICBhdXRvIHBvc2l0aW9uTm9kZSA9IHBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCk7CisgICAg
aWYgKCFwb3NpdGlvbk5vZGUgfHwgIXBvc2l0aW9uTm9kZS0+cGFyZW50Tm9kZSgpIHx8IHBvc2l0
aW9uTm9kZS0+cGFyZW50Tm9kZSgpLT5hcHBlbmRDaGlsZChzdHlsZUVsZW1lbnQpLmhhc0V4Y2Vw
dGlvbigpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIG5vZGVUb1JlbW92ZSA9IHN0
eWxlRWxlbWVudC5wdHIoKTsKKyAgICAKKyAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+dXBkYXRlU3R5
bGVJZk5lZWRlZCgpOworICAgIHJldHVybiBzdHlsZUVsZW1lbnQtPnJlbmRlcmVyKCkgPyAmc3R5
bGVFbGVtZW50LT5yZW5kZXJlcigpLT5zdHlsZSgpIDogbnVsbHB0cjsKK30KKworY29uc3QgRm9u
dCogRWRpdG9yOjpmb250Rm9yU2VsZWN0aW9uKGJvb2wmIGhhc011bHRpcGxlRm9udHMpIGNvbnN0
Cit7CisgICAgaGFzTXVsdGlwbGVGb250cyA9IGZhbHNlOworCisgICAgaWYgKCFtX2ZyYW1lLnNl
bGVjdGlvbigpLmlzUmFuZ2UoKSkgeworICAgICAgICBOb2RlKiBub2RlVG9SZW1vdmU7CisgICAg
ICAgIGF1dG8qIHN0eWxlID0gc3R5bGVGb3JTZWxlY3Rpb25TdGFydCgmbV9mcmFtZSwgbm9kZVRv
UmVtb3ZlKTsgLy8gc2V0cyBub2RlVG9SZW1vdmUKKworICAgICAgICBjb25zdCBGb250KiBmb250
ID0gbnVsbHB0cjsKKyAgICAgICAgaWYgKHN0eWxlKSB7CisgICAgICAgICAgICBmb250ID0gJnN0
eWxlLT5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCk7CisgICAgICAgICAgICBpZiAobm9kZVRv
UmVtb3ZlKQorICAgICAgICAgICAgICAgIG5vZGVUb1JlbW92ZS0+cmVtb3ZlKCk7CisgICAgICAg
IH0KKworICAgICAgICByZXR1cm4gZm9udDsKKyAgICB9CisKKyAgICBSZWZQdHI8UmFuZ2U+IHJh
bmdlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGlmICgh
cmFuZ2UpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgTm9kZSogc3RhcnROb2RlID0g
YWRqdXN0ZWRTZWxlY3Rpb25TdGFydEZvclN0eWxlQ29tcHV0YXRpb24obV9mcmFtZS5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKSkuZGVwcmVjYXRlZE5vZGUoKTsKKyAgICBpZiAoIXN0YXJ0Tm9kZSkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBjb25zdCBGb250KiBmb250ID0gbnVsbHB0
cjsKKyAgICBOb2RlKiBwYXN0RW5kID0gcmFuZ2UtPnBhc3RMYXN0Tm9kZSgpOworICAgIC8vIElu
IHRoZSBsb29wIGJlbG93LCBub2RlIHNob3VsZCBldmVudHVhbGx5IG1hdGNoIHBhc3RFbmQgYW5k
IG5vdCBiZWNvbWUgbnVsbCwgYnV0IHdlJ3ZlIHNlZW4gYXQgbGVhc3Qgb25lCisgICAgLy8gdW5y
ZXByb2R1Y2libGUgY2FzZSB3aGVyZSB0aGlzIGRpZG4ndCBoYXBwZW4sIHNvIGNoZWNrIGZvciBu
dWxsIGFsc28uCisgICAgZm9yIChOb2RlKiBub2RlID0gc3RhcnROb2RlOyBub2RlICYmIG5vZGUg
IT0gcGFzdEVuZDsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKm5vZGUpKSB7CisgICAgICAg
IGF1dG8gcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOworICAgICAgICBpZiAoIXJlbmRlcmVy
KQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIC8vIEZJWE1FOiBBcmUgdGhlcmUgYW55
IG5vZGUgdHlwZXMgdGhhdCBoYXZlIHJlbmRlcmVycywgYnV0IHRoYXQgd2Ugc2hvdWxkIGJlIHNr
aXBwaW5nPworICAgICAgICBjb25zdCBGb250JiBwcmltYXJ5Rm9udCA9IHJlbmRlcmVyLT5zdHls
ZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKTsKKyAgICAgICAgaWYgKCFmb250KQorICAg
ICAgICAgICAgZm9udCA9ICZwcmltYXJ5Rm9udDsKKyAgICAgICAgZWxzZSBpZiAoZm9udCAhPSAm
cHJpbWFyeUZvbnQpIHsKKyAgICAgICAgICAgIGhhc011bHRpcGxlRm9udHMgPSB0cnVlOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZm9udDsKK30K
KworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0VkaXRvci5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAppbmRleCA3
MzMwZWJiMDNlYTg0MWE3YzhlMTBkYzNiMDgzYjc0MTFkMDg5MTcxLi41NjdjNjViNjQ5MzUxMjdm
Njc4ZTczOWM4MDAwODRhYTYzYzdiNTY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0VkaXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKQEAgLTQ0
MywxMCArNDQzLDExIEBAIHB1YmxpYzoKIAogICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiB3
ZWJDb250ZW50RnJvbVBhc3RlYm9hcmQoUGFzdGVib2FyZCYsIFJhbmdlJiBjb250ZXh0LCBib29s
IGFsbG93UGxhaW5UZXh0LCBib29sJiBjaG9zZVBsYWluVGV4dCk7CiAKLSNpZiBQTEFURk9STShD
T0NPQSkKKyAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCBGb250KiBmb250Rm9yU2VsZWN0aW9uKGJv
b2wmIGhhc011bHRpcGxlRm9udHMpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBj
b25zdCBSZW5kZXJTdHlsZSogc3R5bGVGb3JTZWxlY3Rpb25TdGFydChGcmFtZSogLCBOb2RlICom
bm9kZVRvUmVtb3ZlKTsKKworI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIHZvaWQgZ2V0VGV4dERl
Y29yYXRpb25BdHRyaWJ1dGVzUmVzcGVjdGluZ1R5cGluZ1N0eWxlKGNvbnN0IFJlbmRlclN0eWxl
JiwgTlNNdXRhYmxlRGljdGlvbmFyeSopIGNvbnN0OwotICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0
IEZvbnQqIGZvbnRGb3JTZWxlY3Rpb24oYm9vbCYpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JU
IE5TRGljdGlvbmFyeSAqZm9udEF0dHJpYnV0ZXNGb3JTZWxlY3Rpb25TdGFydCgpIGNvbnN0Owog
ICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBzdHJpbmdTZWxlY3Rpb25Gb3JQYXN0ZWJvYXJkKCk7
CiAgICAgU3RyaW5nIHN0cmluZ1NlbGVjdGlvbkZvclBhc3RlYm9hcmRXaXRoSW1hZ2VBbHRUZXh0
KCk7CkBAIC01MTIsMTYgKzUxMywyMCBAQCBwcml2YXRlOgogCiAgICAgYm9vbCB1bmlmaWVkVGV4
dENoZWNrZXJFbmFibGVkKCkgY29uc3Q7CiAKKyAgICBSZWZQdHI8UmFuZ2U+IGFkanVzdGVkU2Vs
ZWN0aW9uUmFuZ2UoKTsKKwogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIFJlZlB0cjxTaGFyZWRC
dWZmZXI+IHNlbGVjdGlvbkluV2ViQXJjaGl2ZUZvcm1hdCgpOwogICAgIFN0cmluZyBzZWxlY3Rp
b25JbkhUTUxGb3JtYXQoKTsKICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBpbWFnZUluV2ViQXJj
aGl2ZUZvcm1hdChFbGVtZW50Jik7Ci0gICAgUmVmUHRyPFJhbmdlPiBhZGp1c3RlZFNlbGVjdGlv
blJhbmdlKCk7CiAgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50Rm9y
SW1hZ2VSZXNvdXJjZUFuZEFkZFJlc291cmNlKFJlZlB0cjxBcmNoaXZlUmVzb3VyY2U+JiYpOwog
ICAgIFJlZjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZvckltYWdlQW5kVVJMKGNv
bnN0IFN0cmluZyYpOwogICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVu
dEFuZEFkZFJlc291cmNlcyhOU0F0dHJpYnV0ZWRTdHJpbmcgKik7CiAgICAgRnJhZ21lbnRBbmRS
ZXNvdXJjZXMgY3JlYXRlRnJhZ21lbnQoTlNBdHRyaWJ1dGVkU3RyaW5nICopOwogICAgIHZvaWQg
ZmlsbEluVXNlclZpc2libGVGb3JtKFBhc3RlYm9hcmRVUkwmKTsKKworICAgIHN0YXRpYyBSZWZQ
dHI8U2hhcmVkQnVmZmVyPiBkYXRhSW5SVEZERm9ybWF0KE5TQXR0cmlidXRlZFN0cmluZyAqKTsK
KyAgICBzdGF0aWMgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YUluUlRGRm9ybWF0KE5TQXR0cmli
dXRlZFN0cmluZyAqKTsKICNlbmRpZgogCiAgICAgdm9pZCBwb3N0VGV4dFN0YXRlQ2hhbmdlTm90
aWZpY2F0aW9uRm9yQ3V0KGNvbnN0IFN0cmluZyYsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRWRpdG9yQ29jb2EubW0g
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tCmluZGV4IGM1N2Q2
NGQzOTdhZTQ2Y2IyZTQyOWU5MDk5ODQ1MzlkNzBkODRiOWYuLjBhNWQzNWZmNTk1M2I0N2Q3MzNh
ZDVlYWNlNTFlMWZjYjg4MzE4NDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
Y29jb2EvRWRpdG9yQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9F
ZGl0b3JDb2NvYS5tbQpAQCAtMzAsMTYgKzMwLDIzIEBACiAjaW1wb3J0ICJDU1NWYWx1ZUxpc3Qu
aCIKICNpbXBvcnQgIkNTU1ZhbHVlUG9vbC5oIgogI2ltcG9ydCAiRG9jdW1lbnRGcmFnbWVudC5o
IgorI2ltcG9ydCAiRG9jdW1lbnRMb2FkZXIuaCIKICNpbXBvcnQgIkVkaXRpbmdTdHlsZS5oIgor
I2ltcG9ydCAiRWRpdG9yQ2xpZW50LmgiCiAjaW1wb3J0ICJGcmFtZS5oIgogI2ltcG9ydCAiRnJh
bWVTZWxlY3Rpb24uaCIKKyNpbXBvcnQgIkhUTUxDb252ZXJ0ZXIuaCIKKyNpbXBvcnQgIkhUTUxJ
bWFnZUVsZW1lbnQuaCIKICNpbXBvcnQgIkhUTUxTcGFuRWxlbWVudC5oIgorI2ltcG9ydCAiTGVn
YWN5V2ViQXJjaGl2ZS5oIgogI2ltcG9ydCAiTlNBdHRyaWJ1dGVkU3RyaW5nU1BJLmgiCisjaW1w
b3J0ICJQYXN0ZWJvYXJkLmgiCiAjaW1wb3J0ICJSZW5kZXJFbGVtZW50LmgiCiAjaW1wb3J0ICJS
ZW5kZXJTdHlsZS5oIgogI2ltcG9ydCAiU29mdExpbmtpbmcuaCIKICNpbXBvcnQgIlRleHQuaCIK
ICNpbXBvcnQgImh0bWxlZGl0aW5nLmgiCisjaW1wb3J0IDx3dGYvQmxvY2tPYmpDRXhjZXB0aW9u
cy5oPgogCiAjaWYgUExBVEZPUk0oSU9TKQogU09GVF9MSU5LX1BSSVZBVEVfRlJBTUVXT1JLKFdl
YktpdExlZ2FjeSkKQEAgLTUzLDM5ICs2MCw2IEBAIFNPRlRfTElOSyhXZWJLaXRMZWdhY3ksIF9X
ZWJDcmVhdGVGcmFnbWVudCwgdm9pZCwgKFdlYkNvcmU6OkRvY3VtZW50JiBkb2N1bWVudCwKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi0vLyBGSVhNRTogVGhpcyBmaWd1cmVzIG91dCB0aGUgY3Vy
cmVudCBzdHlsZSBieSBpbnNlcnRpbmcgYSA8c3Bhbj4hCi1jb25zdCBSZW5kZXJTdHlsZSogRWRp
dG9yOjpzdHlsZUZvclNlbGVjdGlvblN0YXJ0KEZyYW1lKiBmcmFtZSwgTm9kZSomIG5vZGVUb1Jl
bW92ZSkKLXsKLSAgICBub2RlVG9SZW1vdmUgPSBudWxscHRyOwotICAgIAotICAgIGlmIChmcmFt
ZS0+c2VsZWN0aW9uKCkuaXNOb25lKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAg
UG9zaXRpb24gcG9zaXRpb24gPSBhZGp1c3RlZFNlbGVjdGlvblN0YXJ0Rm9yU3R5bGVDb21wdXRh
dGlvbihmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwotICAgIGlmICghcG9zaXRpb24u
aXNDYW5kaWRhdGUoKSB8fCBwb3NpdGlvbi5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0KLSAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiB0eXBpbmdTdHlsZSA9IGZyYW1lLT5zZWxl
Y3Rpb24oKS50eXBpbmdTdHlsZSgpOwotICAgIGlmICghdHlwaW5nU3R5bGUgfHwgIXR5cGluZ1N0
eWxlLT5zdHlsZSgpKQotICAgICAgICByZXR1cm4gJnBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCkt
PnJlbmRlcmVyKCktPnN0eWxlKCk7Ci0KLSAgICBhdXRvIHN0eWxlRWxlbWVudCA9IEhUTUxTcGFu
RWxlbWVudDo6Y3JlYXRlKCpmcmFtZS0+ZG9jdW1lbnQoKSk7Ci0KLSAgICBTdHJpbmcgc3R5bGVU
ZXh0ID0gdHlwaW5nU3R5bGUtPnN0eWxlKCktPmFzVGV4dCgpICsgIiBkaXNwbGF5OiBpbmxpbmUi
OwotICAgIHN0eWxlRWxlbWVudC0+c2V0QXR0cmlidXRlKEhUTUxOYW1lczo6c3R5bGVBdHRyLCBz
dHlsZVRleHQpOwotCi0gICAgc3R5bGVFbGVtZW50LT5hcHBlbmRDaGlsZChmcmFtZS0+ZG9jdW1l
bnQoKS0+Y3JlYXRlRWRpdGluZ1RleHROb2RlKGVtcHR5U3RyaW5nKCkpKTsKLQotICAgIGF1dG8g
cG9zaXRpb25Ob2RlID0gcG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKTsKLSAgICBpZiAoIXBvc2l0
aW9uTm9kZSB8fCAhcG9zaXRpb25Ob2RlLT5wYXJlbnROb2RlKCkgfHwgcG9zaXRpb25Ob2RlLT5w
YXJlbnROb2RlKCktPmFwcGVuZENoaWxkKHN0eWxlRWxlbWVudCkuaGFzRXhjZXB0aW9uKCkpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgbm9kZVRvUmVtb3ZlID0gc3R5bGVFbGVtZW50
LnB0cigpOwotCi0gICAgZnJhbWUtPmRvY3VtZW50KCktPnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsK
LSAgICByZXR1cm4gc3R5bGVFbGVtZW50LT5yZW5kZXJlcigpID8gJnN0eWxlRWxlbWVudC0+cmVu
ZGVyZXIoKS0+c3R5bGUoKSA6IG51bGxwdHI7Ci19Ci0KIHZvaWQgRWRpdG9yOjpnZXRUZXh0RGVj
b3JhdGlvbkF0dHJpYnV0ZXNSZXNwZWN0aW5nVHlwaW5nU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUm
IHN0eWxlLCBOU011dGFibGVEaWN0aW9uYXJ5KiByZXN1bHQpIGNvbnN0CiB7CiAgICAgUmVmUHRy
PEVkaXRpbmdTdHlsZT4gdHlwaW5nU3R5bGUgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnR5cGluZ1N0
eWxlKCk7CkBAIC0xMTYsNCArOTAsOTkgQEAgRnJhZ21lbnRBbmRSZXNvdXJjZXMgRWRpdG9yOjpj
cmVhdGVGcmFnbWVudChOU0F0dHJpYnV0ZWRTdHJpbmcgKnN0cmluZykKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCit2b2lkIEVkaXRvcjo6d3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoUGFzdGVi
b2FyZCYgcGFzdGVib2FyZCkKK3sKKyAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRT
dHJpbmcgPSBhdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlKCpzZWxlY3RlZFJhbmdlKCkpOworCisg
ICAgUGFzdGVib2FyZFdlYkNvbnRlbnQgY29udGVudDsKKyAgICBjb250ZW50LmNhblNtYXJ0Q29w
eU9yRGVsZXRlID0gY2FuU21hcnRDb3B5T3JEZWxldGUoKTsKKyAgICBjb250ZW50LmRhdGFJbldl
YkFyY2hpdmVGb3JtYXQgPSBzZWxlY3Rpb25JbldlYkFyY2hpdmVGb3JtYXQoKTsKKyAgICBjb250
ZW50LmRhdGFJblJURkRGb3JtYXQgPSBhdHRyaWJ1dGVkU3RyaW5nLmNvbnRhaW5zQXR0YWNobWVu
dHMgPyBkYXRhSW5SVEZERm9ybWF0KGF0dHJpYnV0ZWRTdHJpbmcpIDogbnVsbHB0cjsKKyAgICBj
b250ZW50LmRhdGFJblJURkZvcm1hdCA9IGRhdGFJblJURkZvcm1hdChhdHRyaWJ1dGVkU3RyaW5n
KTsKKyAgICAvLyBGSVhNRTogV2h5IGRvbid0IHdlIHdhbnQgdGhpcyBvbiBpT1M/CisjaWYgUExB
VEZPUk0oTUFDKQorICAgIGNvbnRlbnQuZGF0YUluSFRNTEZvcm1hdCA9IHNlbGVjdGlvbkluSFRN
TEZvcm1hdCgpOworI2VuZGlmCisgICAgY29udGVudC5kYXRhSW5TdHJpbmdGb3JtYXQgPSBzdHJp
bmdTZWxlY3Rpb25Gb3JQYXN0ZWJvYXJkV2l0aEltYWdlQWx0VGV4dCgpOworICAgIGNsaWVudCgp
LT5nZXRDbGllbnRQYXN0ZWJvYXJkRGF0YUZvclJhbmdlKHNlbGVjdGVkUmFuZ2UoKS5nZXQoKSwg
Y29udGVudC5jbGllbnRUeXBlcywgY29udGVudC5jbGllbnREYXRhKTsKKworICAgIHBhc3RlYm9h
cmQud3JpdGUoY29udGVudCk7Cit9CisKK1JlZlB0cjxTaGFyZWRCdWZmZXI+IEVkaXRvcjo6c2Vs
ZWN0aW9uSW5XZWJBcmNoaXZlRm9ybWF0KCkKK3sKKyAgICBSZWZQdHI8TGVnYWN5V2ViQXJjaGl2
ZT4gYXJjaGl2ZSA9IExlZ2FjeVdlYkFyY2hpdmU6OmNyZWF0ZUZyb21TZWxlY3Rpb24oJm1fZnJh
bWUpOworICAgIGlmICghYXJjaGl2ZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0
dXJuIFNoYXJlZEJ1ZmZlcjo6d3JhcENGRGF0YShhcmNoaXZlLT5yYXdEYXRhUmVwcmVzZW50YXRp
b24oKS5nZXQoKSk7Cit9CisKK3ZvaWQgRWRpdG9yOjpyZXBsYWNlU2VsZWN0aW9uV2l0aEF0dHJp
YnV0ZWRTdHJpbmcoTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nLCBNYWlsQmxv
Y2txdW90ZUhhbmRsaW5nIG1haWxCbG9ja3F1b3RlSGFuZGxpbmcpCit7CisgICAgaWYgKG1fZnJh
bWUuc2VsZWN0aW9uKCkuaXNOb25lKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX2Zy
YW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkpIHsK
KyAgICAgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21l
bnRBbmRBZGRSZXNvdXJjZXMoYXR0cmlidXRlZFN0cmluZyk7CisgICAgICAgIGlmIChmcmFnbWVu
dCAmJiBzaG91bGRJbnNlcnRGcmFnbWVudChmcmFnbWVudCwgc2VsZWN0ZWRSYW5nZSgpLCBFZGl0
b3JJbnNlcnRBY3Rpb246OlBhc3RlZCkpCisgICAgICAgICAgICBwYXN0ZUFzRnJhZ21lbnQoZnJh
Z21lbnQucmVsZWFzZU5vbk51bGwoKSwgZmFsc2UsIGZhbHNlLCBtYWlsQmxvY2txdW90ZUhhbmRs
aW5nKTsKKyAgICB9IGVsc2UgeworICAgICAgICBTdHJpbmcgdGV4dCA9IGF0dHJpYnV0ZWRTdHJp
bmcuc3RyaW5nOworICAgICAgICBpZiAoc2hvdWxkSW5zZXJ0VGV4dCh0ZXh0LCBzZWxlY3RlZFJh
bmdlKCkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVkKSkKKyAgICAgICAgICAgIHBh
c3RlQXNQbGFpblRleHQodGV4dCwgZmFsc2UpOworICAgIH0KK30KKworUmVmUHRyPERvY3VtZW50
RnJhZ21lbnQ+IEVkaXRvcjo6Y3JlYXRlRnJhZ21lbnRGb3JJbWFnZVJlc291cmNlQW5kQWRkUmVz
b3VyY2UoUmVmUHRyPEFyY2hpdmVSZXNvdXJjZT4mJiByZXNvdXJjZSkKK3sKKyAgICBpZiAoIXJl
c291cmNlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIC8vIEZJWE1FOiBXaHkgaXMg
dGhpcyBkaWZmZXJlbnQ/CisjaWYgUExBVEZPUk0oTUFDKQorICAgIFN0cmluZyByZXNvdXJjZVVS
TCA9IHJlc291cmNlLT51cmwoKS5zdHJpbmcoKTsKKyNlbHNlCisgICAgTlNVUkwgKlVSTCA9IHJl
c291cmNlLT51cmwoKTsKKyAgICBTdHJpbmcgcmVzb3VyY2VVUkwgPSBVUkwuaXNGaWxlVVJMID8g
VVJMLmFic29sdXRlU3RyaW5nIDogcmVzb3VyY2UtPnVybCgpOworI2VuZGlmCisKKyAgICBpZiAo
RG9jdW1lbnRMb2FkZXIqIGxvYWRlciA9IG1fZnJhbWUubG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIo
KSkKKyAgICAgICAgbG9hZGVyLT5hZGRBcmNoaXZlUmVzb3VyY2UocmVzb3VyY2UucmVsZWFzZU5v
bk51bGwoKSk7CisKKyAgICBhdXRvIGltYWdlRWxlbWVudCA9IEhUTUxJbWFnZUVsZW1lbnQ6OmNy
ZWF0ZSgqbV9mcmFtZS5kb2N1bWVudCgpKTsKKyAgICBpbWFnZUVsZW1lbnQtPnNldEF0dHJpYnV0
ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oSFRNTE5hbWVzOjpzcmNBdHRyLCByZXNvdXJjZVVSTCk7
CisKKyAgICBhdXRvIGZyYWdtZW50ID0gbV9mcmFtZS5kb2N1bWVudCgpLT5jcmVhdGVEb2N1bWVu
dEZyYWdtZW50KCk7CisgICAgZnJhZ21lbnQtPmFwcGVuZENoaWxkKGltYWdlRWxlbWVudCk7Cisg
ICAgCisgICAgcmV0dXJuIFdURk1vdmUoZnJhZ21lbnQpOworfQorCitSZWZQdHI8U2hhcmVkQnVm
ZmVyPiBFZGl0b3I6OmRhdGFJblJURkRGb3JtYXQoTlNBdHRyaWJ1dGVkU3RyaW5nICpzdHJpbmcp
Cit7CisgICAgTlNVSW50ZWdlciBsZW5ndGggPSBzdHJpbmcubGVuZ3RoOworICAgIGlmICghbGVu
Z3RoKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhD
RVBUSU9OUzsKKyAgICByZXR1cm4gU2hhcmVkQnVmZmVyOjp3cmFwTlNEYXRhKFtzdHJpbmcgUlRG
REZyb21SYW5nZTpOU01ha2VSYW5nZSgwLCBsZW5ndGgpIGRvY3VtZW50QXR0cmlidXRlczpAeyB9
XSk7CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKworICAgIHJldHVybiBudWxscHRy
OworfQorCitSZWZQdHI8U2hhcmVkQnVmZmVyPiBFZGl0b3I6OmRhdGFJblJURkZvcm1hdChOU0F0
dHJpYnV0ZWRTdHJpbmcgKnN0cmluZykKK3sKKyAgICBOU1VJbnRlZ2VyIGxlbmd0aCA9IHN0cmlu
Zy5sZW5ndGg7CisgICAgaWYgKCFsZW5ndGgpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisg
ICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIHJldHVybiBTaGFyZWRCdWZmZXI6
OndyYXBOU0RhdGEoW3N0cmluZyBSVEZGcm9tUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgbGVuZ3RoKSBk
b2N1bWVudEF0dHJpYnV0ZXM6QHsgfV0pOworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7
CisKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL2lvcy9FZGl0b3JJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lv
cy9FZGl0b3JJT1MubW0KaW5kZXggYzVlOGMyOTEyNGJmMDdiYTk2Y2U1NGMyN2VjYjhiY2ZmN2I1
NjQ3ZS4uM2FlNzE1NDQyODU5MjdjN2JlZTJiMGU2OGNjZWFjZGM4ZTY4YjBkOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1tCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbQpAQCAtNjIsMjAgKzYyLDExIEBACiAjaW1w
b3J0ICJodG1sZWRpdGluZy5oIgogI2ltcG9ydCAibWFya3VwLmgiCiAjaW1wb3J0IDxNb2JpbGVD
b3JlU2VydmljZXMvTW9iaWxlQ29yZVNlcnZpY2VzLmg+Ci0jaW1wb3J0IDx3dGYvQmxvY2tPYmpD
RXhjZXB0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogU09G
VF9MSU5LX0ZSQU1FV09SSyhBcHBTdXBwb3J0KQogU09GVF9MSU5LKEFwcFN1cHBvcnQsIENQU2hh
cmVkUmVzb3VyY2VzRGlyZWN0b3J5LCBDRlN0cmluZ1JlZiwgKHZvaWQpLCAoKSkKIAotQGludGVy
ZmFjZSBOU0F0dHJpYnV0ZWRTdHJpbmcgKE5TQXR0cmlidXRlZFN0cmluZ0tpdEFkZGl0aW9ucykK
LS0gKGlkKWluaXRXaXRoUlRGOihOU0RhdGEgKilkYXRhIGRvY3VtZW50QXR0cmlidXRlczooTlNE
aWN0aW9uYXJ5ICoqKWRpY3Q7Ci0tIChpZClpbml0V2l0aFJURkQ6KE5TRGF0YSAqKWRhdGEgZG9j
dW1lbnRBdHRyaWJ1dGVzOihOU0RpY3Rpb25hcnkgKiopZGljdDsKLS0gKE5TRGF0YSAqKVJURkZy
b21SYW5nZTooTlNSYW5nZSlyYW5nZSBkb2N1bWVudEF0dHJpYnV0ZXM6KE5TRGljdGlvbmFyeSAq
KWRpY3Q7Ci0tIChOU0RhdGEgKilSVEZERnJvbVJhbmdlOihOU1JhbmdlKXJhbmdlIGRvY3VtZW50
QXR0cmlidXRlczooTlNEaWN0aW9uYXJ5ICopZGljdDsKLS0gKEJPT0wpY29udGFpbnNBdHRhY2ht
ZW50czsKLUBlbmQKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRN
TE5hbWVzOwpAQCAtMTY1LDQ4ICsxNTYsNiBAQCB2b2lkIEVkaXRvcjo6c2V0VGV4dEFsaWdubWVu
dEZvckNoYW5nZWRCYXNlV3JpdGluZ0RpcmVjdGlvbihXcml0aW5nRGlyZWN0aW9uIGRpcgogICAg
IGFwcGx5UGFyYWdyYXBoU3R5bGUoc3R5bGUuZ2V0KCkpOwogfQogCi1jb25zdCBGb250KiBFZGl0
b3I6OmZvbnRGb3JTZWxlY3Rpb24oYm9vbCYgaGFzTXVsdGlwbGVGb250cykgY29uc3QKLXsKLSAg
ICBoYXNNdWx0aXBsZUZvbnRzID0gZmFsc2U7Ci0KLSAgICBpZiAoIW1fZnJhbWUuc2VsZWN0aW9u
KCkuaXNSYW5nZSgpKSB7Ci0gICAgICAgIE5vZGUqIG5vZGVUb1JlbW92ZTsKLSAgICAgICAgYXV0
byogc3R5bGUgPSBzdHlsZUZvclNlbGVjdGlvblN0YXJ0KCZtX2ZyYW1lLCBub2RlVG9SZW1vdmUp
OyAvLyBzZXRzIG5vZGVUb1JlbW92ZQotCi0gICAgICAgIGNvbnN0IEZvbnQqIHJlc3VsdCA9IG51
bGxwdHI7Ci0gICAgICAgIGlmIChzdHlsZSkgewotICAgICAgICAgICAgcmVzdWx0ID0gJnN0eWxl
LT5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCk7Ci0gICAgICAgICAgICBpZiAobm9kZVRvUmVt
b3ZlKQotICAgICAgICAgICAgICAgIG5vZGVUb1JlbW92ZS0+cmVtb3ZlKCk7Ci0gICAgICAgIH0K
LQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIGNvbnN0IEZvbnQqIGZvbnQg
PSBudWxscHRyOwotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBtX2ZyYW1lLnNlbGVjdGlvbigp
LnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgaWYgKE5vZGUqIHN0YXJ0Tm9kZSA9IGFkanVzdGVk
U2VsZWN0aW9uU3RhcnRGb3JTdHlsZUNvbXB1dGF0aW9uKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkpLmRlcHJlY2F0ZWROb2RlKCkpIHsKLSAgICAgICAgTm9kZSogcGFzdEVuZCA9IHJh
bmdlLT5wYXN0TGFzdE5vZGUoKTsKLSAgICAgICAgLy8gSW4gdGhlIGxvb3AgYmVsb3csIG4gc2hv
dWxkIGV2ZW50dWFsbHkgbWF0Y2ggcGFzdEVuZCBhbmQgbm90IGJlY29tZSBuaWwsIGJ1dCB3ZSd2
ZSBzZWVuIGF0IGxlYXN0IG9uZQotICAgICAgICAvLyB1bnJlcHJvZHVjaWJsZSBjYXNlIHdoZXJl
IHRoaXMgZGlkbid0IGhhcHBlbiwgc28gY2hlY2sgZm9yIG51bGwgYWxzby4KLSAgICAgICAgZm9y
IChOb2RlKiBub2RlID0gc3RhcnROb2RlOyBub2RlICYmIG5vZGUgIT0gcGFzdEVuZDsgbm9kZSA9
IE5vZGVUcmF2ZXJzYWw6Om5leHQoKm5vZGUpKSB7Ci0gICAgICAgICAgICBhdXRvIHJlbmRlcmVy
ID0gbm9kZS0+cmVuZGVyZXIoKTsKLSAgICAgICAgICAgIGlmICghcmVuZGVyZXIpCi0gICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAvLyBGSVhNRTogQXJlIHRoZXJlIGFueSBu
b2RlIHR5cGVzIHRoYXQgaGF2ZSByZW5kZXJlcnMsIGJ1dCB0aGF0IHdlIHNob3VsZCBiZSBza2lw
cGluZz8KLSAgICAgICAgICAgIGNvbnN0IEZvbnQmIHByaW1hcnlGb250ID0gcmVuZGVyZXItPnN0
eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpOwotICAgICAgICAgICAgaWYgKCFmb250
KQotICAgICAgICAgICAgICAgIGZvbnQgPSAmcHJpbWFyeUZvbnQ7Ci0gICAgICAgICAgICBlbHNl
IGlmIChmb250ICE9ICZwcmltYXJ5Rm9udCkgewotICAgICAgICAgICAgICAgIGhhc011bHRpcGxl
Rm9udHMgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGZvbnQ7Ci19Ci0KIE5TRGljdGlvbmFyeSogRWRp
dG9yOjpmb250QXR0cmlidXRlc0ZvclNlbGVjdGlvblN0YXJ0KCkgY29uc3QKIHsKICAgICBOb2Rl
KiBub2RlVG9SZW1vdmU7CkBAIC0yNTIsMzIgKzIwMSw2IEBAIHZvaWQgRWRpdG9yOjpyZW1vdmVV
bmNoYW5nZWFibGVTdHlsZXMoKQogICAgIGFwcGx5U3R5bGVUb1NlbGVjdGlvbihkZWZhdWx0U3R5
bGUuZ2V0KCksIEVkaXRBY3Rpb25DaGFuZ2VBdHRyaWJ1dGVzKTsKIH0KIAotc3RhdGljIFJlZlB0
cjxTaGFyZWRCdWZmZXI+IGRhdGFJblJURkRGb3JtYXQoTlNBdHRyaWJ1dGVkU3RyaW5nICpzdHJp
bmcpCi17Ci0gICAgTlNVSW50ZWdlciBsZW5ndGggPSBzdHJpbmcubGVuZ3RoOwotICAgIGlmICgh
bGVuZ3RoKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIEJFR0lOX0JMT0NLX09CSkNf
RVhDRVBUSU9OUzsKLSAgICByZXR1cm4gU2hhcmVkQnVmZmVyOjp3cmFwTlNEYXRhKFtzdHJpbmcg
UlRGREZyb21SYW5nZTpOU01ha2VSYW5nZSgwLCBsZW5ndGgpIGRvY3VtZW50QXR0cmlidXRlczpu
aWxdKTsKLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotCi0gICAgcmV0dXJuIG51bGxw
dHI7Ci19Ci0KLXN0YXRpYyBSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhSW5SVEZGb3JtYXQoTlNB
dHRyaWJ1dGVkU3RyaW5nICpzdHJpbmcpCi17Ci0gICAgTlNVSW50ZWdlciBsZW5ndGggPSBzdHJp
bmcubGVuZ3RoOwotICAgIGlmICghbGVuZ3RoKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQot
ICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICByZXR1cm4gU2hhcmVkQnVmZmVy
Ojp3cmFwTlNEYXRhKFtzdHJpbmcgUlRGRnJvbVJhbmdlOk5TTWFrZVJhbmdlKDAsIGxlbmd0aCkg
ZG9jdW1lbnRBdHRyaWJ1dGVzOm5pbF0pOwotICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7
Ci0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQogU3RyaW5nIEVkaXRvcjo6c3RyaW5nU2VsZWN0
aW9uRm9yUGFzdGVib2FyZFdpdGhJbWFnZUFsdFRleHQoKQogewogICAgIFN0cmluZyB0ZXh0ID0g
c2VsZWN0ZWRUZXh0Rm9yRGF0YVRyYW5zZmVyKCk7CkBAIC0yODUsMjkgKzIwOCw2IEBAIFN0cmlu
ZyBFZGl0b3I6OnN0cmluZ1NlbGVjdGlvbkZvclBhc3RlYm9hcmRXaXRoSW1hZ2VBbHRUZXh0KCkK
ICAgICByZXR1cm4gdGV4dDsKIH0KIAotUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gRWRpdG9yOjpzZWxl
Y3Rpb25JbldlYkFyY2hpdmVGb3JtYXQoKQotewotICAgIFJlZlB0cjxMZWdhY3lXZWJBcmNoaXZl
PiBhcmNoaXZlID0gTGVnYWN5V2ViQXJjaGl2ZTo6Y3JlYXRlRnJvbVNlbGVjdGlvbigmbV9mcmFt
ZSk7Ci0gICAgaWYgKCFhcmNoaXZlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1
cm4gU2hhcmVkQnVmZmVyOjp3cmFwQ0ZEYXRhKGFyY2hpdmUtPnJhd0RhdGFSZXByZXNlbnRhdGlv
bigpLmdldCgpKTsKLX0KLQotdm9pZCBFZGl0b3I6OndyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJk
KFBhc3RlYm9hcmQmIHBhc3RlYm9hcmQpCi17Ci0gICAgTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRy
aWJ1dGVkU3RyaW5nID0gYXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZSgqc2VsZWN0ZWRSYW5nZSgp
KTsKLQotICAgIFBhc3RlYm9hcmRXZWJDb250ZW50IGNvbnRlbnQ7Ci0gICAgY29udGVudC5jYW5T
bWFydENvcHlPckRlbGV0ZSA9IGNhblNtYXJ0Q29weU9yRGVsZXRlKCk7Ci0gICAgY29udGVudC5k
YXRhSW5XZWJBcmNoaXZlRm9ybWF0ID0gc2VsZWN0aW9uSW5XZWJBcmNoaXZlRm9ybWF0KCk7Ci0g
ICAgY29udGVudC5kYXRhSW5SVEZERm9ybWF0ID0gW2F0dHJpYnV0ZWRTdHJpbmcgY29udGFpbnNB
dHRhY2htZW50c10gPyBkYXRhSW5SVEZERm9ybWF0KGF0dHJpYnV0ZWRTdHJpbmcpIDogMDsKLSAg
ICBjb250ZW50LmRhdGFJblJURkZvcm1hdCA9IGRhdGFJblJURkZvcm1hdChhdHRyaWJ1dGVkU3Ry
aW5nKTsKLSAgICBjb250ZW50LmRhdGFJblN0cmluZ0Zvcm1hdCA9IHN0cmluZ1NlbGVjdGlvbkZv
clBhc3RlYm9hcmRXaXRoSW1hZ2VBbHRUZXh0KCk7Ci0gICAgY2xpZW50KCktPmdldENsaWVudFBh
c3RlYm9hcmREYXRhRm9yUmFuZ2Uoc2VsZWN0ZWRSYW5nZSgpLmdldCgpLCBjb250ZW50LmNsaWVu
dFR5cGVzLCBjb250ZW50LmNsaWVudERhdGEpOwotCi0gICAgcGFzdGVib2FyZC53cml0ZShjb250
ZW50KTsKLX0KLQogc3RhdGljIHZvaWQgZ2V0SW1hZ2UoRWxlbWVudCYgaW1hZ2VFbGVtZW50LCBS
ZWZQdHI8SW1hZ2U+JiBpbWFnZSwgQ2FjaGVkSW1hZ2UqJiBjYWNoZWRJbWFnZSkKIHsKICAgICBh
dXRvKiByZW5kZXJlciA9IGltYWdlRWxlbWVudC5yZW5kZXJlcigpOwpAQCAtNTY5LDQyICs0Njks
NiBAQCBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gRWRpdG9yOjpjcmVhdGVGcmFnbWVudEFuZEFk
ZFJlc291cmNlcyhOU0F0dHJpYnV0ZWRTdHJpbgogICAgIHJldHVybiBXVEZNb3ZlKGZyYWdtZW50
QW5kUmVzb3VyY2VzLmZyYWdtZW50KTsKIH0KIAotUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IEVk
aXRvcjo6Y3JlYXRlRnJhZ21lbnRGb3JJbWFnZVJlc291cmNlQW5kQWRkUmVzb3VyY2UoUmVmUHRy
PEFyY2hpdmVSZXNvdXJjZT4mJiByZXNvdXJjZSkKLXsKLSAgICBpZiAoIXJlc291cmNlKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIE5TVVJMICpVUkwgPSByZXNvdXJjZS0+dXJsKCk7
Ci0gICAgU3RyaW5nIHJlc291cmNlVVJMID0gW1VSTCBpc0ZpbGVVUkxdID8gW1VSTCBhYnNvbHV0
ZVN0cmluZ10gOiByZXNvdXJjZS0+dXJsKCk7Ci0KLSAgICBpZiAoRG9jdW1lbnRMb2FkZXIqIGxv
YWRlciA9IG1fZnJhbWUubG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKSkKLSAgICAgICAgbG9hZGVy
LT5hZGRBcmNoaXZlUmVzb3VyY2UocmVzb3VyY2UucmVsZWFzZU5vbk51bGwoKSk7Ci0KLSAgICBh
dXRvIGltYWdlRWxlbWVudCA9IEhUTUxJbWFnZUVsZW1lbnQ6OmNyZWF0ZSgqbV9mcmFtZS5kb2N1
bWVudCgpKTsKLSAgICBpbWFnZUVsZW1lbnQtPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6
YXRpb24oSFRNTE5hbWVzOjpzcmNBdHRyLCByZXNvdXJjZVVSTCk7Ci0KLSAgICBhdXRvIGZyYWdt
ZW50ID0gbV9mcmFtZS5kb2N1bWVudCgpLT5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7Ci0gICAg
ZnJhZ21lbnQtPmFwcGVuZENoaWxkKGltYWdlRWxlbWVudCk7Ci0KLSAgICByZXR1cm4gV1RGTW92
ZShmcmFnbWVudCk7Ci19Ci0KLXZvaWQgRWRpdG9yOjpyZXBsYWNlU2VsZWN0aW9uV2l0aEF0dHJp
YnV0ZWRTdHJpbmcoTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nLCBNYWlsQmxv
Y2txdW90ZUhhbmRsaW5nIG1haWxCbG9ja3F1b3RlSGFuZGxpbmcpCi17Ci0gICAgaWYgKG1fZnJh
bWUuc2VsZWN0aW9uKCkuaXNOb25lKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2Zy
YW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkpIHsK
LSAgICAgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21l
bnRBbmRBZGRSZXNvdXJjZXMoYXR0cmlidXRlZFN0cmluZyk7Ci0gICAgICAgIGlmIChmcmFnbWVu
dCAmJiBzaG91bGRJbnNlcnRGcmFnbWVudChmcmFnbWVudCwgc2VsZWN0ZWRSYW5nZSgpLCBFZGl0
b3JJbnNlcnRBY3Rpb246OlBhc3RlZCkpCi0gICAgICAgICAgICBwYXN0ZUFzRnJhZ21lbnQoZnJh
Z21lbnQucmVsZWFzZU5vbk51bGwoKSwgZmFsc2UsIGZhbHNlLCBtYWlsQmxvY2txdW90ZUhhbmRs
aW5nKTsKLSAgICB9IGVsc2UgewotICAgICAgICBTdHJpbmcgdGV4dCA9IFthdHRyaWJ1dGVkU3Ry
aW5nIHN0cmluZ107Ci0gICAgICAgIGlmIChzaG91bGRJbnNlcnRUZXh0KHRleHQsIHNlbGVjdGVk
UmFuZ2UoKS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKQotICAgICAgICAgICAg
cGFzdGVBc1BsYWluVGV4dCh0ZXh0LCBmYWxzZSk7Ci0gICAgfQotfQotCiB2b2lkIEVkaXRvcjo6
aW5zZXJ0RGljdGF0aW9uUGhyYXNlcyhWZWN0b3I8VmVjdG9yPFN0cmluZz4+JiYgZGljdGF0aW9u
UGhyYXNlcywgUmV0YWluUHRyPGlkPiBtZXRhZGF0YSkKIHsKICAgICBpZiAobV9mcmFtZS5zZWxl
Y3Rpb24oKS5pc05vbmUoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFj
L0VkaXRvck1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQpp
bmRleCBiNTRiYmQxN2U3ZjA4ZmU2ZWFmMDk5N2U3ODczZTVmNWFjZGQyMzE5Li43YWI5ZmY3ZGMw
NGRmYmM2ODYwZGFiMTExOTBhNjk3Zjk2NDc3ZGNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9t
YWMvRWRpdG9yTWFjLm1tCkBAIC02OCw3ICs2OCw2IEBACiAjaW1wb3J0ICJXZWJOU0F0dHJpYnV0
ZWRTdHJpbmdFeHRyYXMuaCIKICNpbXBvcnQgImh0bWxlZGl0aW5nLmgiCiAjaW1wb3J0ICJtYXJr
dXAuaCIKLSNpbXBvcnQgPHd0Zi9CbG9ja09iakNFeGNlcHRpb25zLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIApAQCAtMTA1LDQ4ICsxMDQsNiBAQCB2b2lkIEVkaXRvcjo6cGFzdGVXaXRoUGFz
dGVib2FyZChQYXN0ZWJvYXJkKiBwYXN0ZWJvYXJkLCBib29sIGFsbG93UGxhaW5UZXh0LCBNYQog
ICAgIGNsaWVudCgpLT5zZXRJbnNlcnRpb25QYXN0ZWJvYXJkKFN0cmluZygpKTsKIH0KIAotY29u
c3QgRm9udCogRWRpdG9yOjpmb250Rm9yU2VsZWN0aW9uKGJvb2wmIGhhc011bHRpcGxlRm9udHMp
IGNvbnN0Ci17Ci0gICAgaGFzTXVsdGlwbGVGb250cyA9IGZhbHNlOwotCi0gICAgaWYgKCFtX2Zy
YW1lLnNlbGVjdGlvbigpLmlzUmFuZ2UoKSkgewotICAgICAgICBOb2RlKiBub2RlVG9SZW1vdmU7
Ci0gICAgICAgIGF1dG8qIHN0eWxlID0gc3R5bGVGb3JTZWxlY3Rpb25TdGFydCgmbV9mcmFtZSwg
bm9kZVRvUmVtb3ZlKTsgLy8gc2V0cyBub2RlVG9SZW1vdmUKLQotICAgICAgICBjb25zdCBGb250
KiByZXN1bHQgPSBudWxscHRyOwotICAgICAgICBpZiAoc3R5bGUpIHsKLSAgICAgICAgICAgIHJl
c3VsdCA9ICZzdHlsZS0+Zm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpOwotICAgICAgICAgICAg
aWYgKG5vZGVUb1JlbW92ZSkKLSAgICAgICAgICAgICAgICBub2RlVG9SZW1vdmUtPnJlbW92ZSgp
OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgY29uc3Qg
Rm9udCogZm9udCA9IG51bGxwdHI7Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IG1fZnJhbWUu
c2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICBOb2RlKiBzdGFydE5vZGUgPSBh
ZGp1c3RlZFNlbGVjdGlvblN0YXJ0Rm9yU3R5bGVDb21wdXRhdGlvbihtX2ZyYW1lLnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpKS5kZXByZWNhdGVkTm9kZSgpOwotICAgIGlmIChyYW5nZSAmJiBzdGFy
dE5vZGUpIHsKLSAgICAgICAgTm9kZSogcGFzdEVuZCA9IHJhbmdlLT5wYXN0TGFzdE5vZGUoKTsK
LSAgICAgICAgLy8gSW4gdGhlIGxvb3AgYmVsb3csIG4gc2hvdWxkIGV2ZW50dWFsbHkgbWF0Y2gg
cGFzdEVuZCBhbmQgbm90IGJlY29tZSBuaWwsIGJ1dCB3ZSd2ZSBzZWVuIGF0IGxlYXN0IG9uZQot
ICAgICAgICAvLyB1bnJlcHJvZHVjaWJsZSBjYXNlIHdoZXJlIHRoaXMgZGlkbid0IGhhcHBlbiwg
c28gY2hlY2sgZm9yIG51bGwgYWxzby4KLSAgICAgICAgZm9yIChOb2RlKiBub2RlID0gc3RhcnRO
b2RlOyBub2RlICYmIG5vZGUgIT0gcGFzdEVuZDsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQo
Km5vZGUpKSB7Ci0gICAgICAgICAgICBhdXRvIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsK
LSAgICAgICAgICAgIGlmICghcmVuZGVyZXIpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICAvLyBGSVhNRTogQXJlIHRoZXJlIGFueSBub2RlIHR5cGVzIHRoYXQgaGF2ZSBy
ZW5kZXJlcnMsIGJ1dCB0aGF0IHdlIHNob3VsZCBiZSBza2lwcGluZz8KLSAgICAgICAgICAgIGNv
bnN0IEZvbnQmIHByaW1hcnlGb250ID0gcmVuZGVyZXItPnN0eWxlKCkuZm9udENhc2NhZGUoKS5w
cmltYXJ5Rm9udCgpOwotICAgICAgICAgICAgaWYgKCFmb250KQotICAgICAgICAgICAgICAgIGZv
bnQgPSAmcHJpbWFyeUZvbnQ7Ci0gICAgICAgICAgICBlbHNlIGlmIChmb250ICE9ICZwcmltYXJ5
Rm9udCkgewotICAgICAgICAgICAgICAgIGhhc011bHRpcGxlRm9udHMgPSB0cnVlOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAg
cmV0dXJuIGZvbnQ7Ci19Ci0KIE5TRGljdGlvbmFyeSogRWRpdG9yOjpmb250QXR0cmlidXRlc0Zv
clNlbGVjdGlvblN0YXJ0KCkgY29uc3QKIHsKICAgICBOb2RlKiBub2RlVG9SZW1vdmU7CkBAIC0z
MDYsMTQgKzI2Myw2IEBAIFN0cmluZyBFZGl0b3I6OnN0cmluZ1NlbGVjdGlvbkZvclBhc3RlYm9h
cmRXaXRoSW1hZ2VBbHRUZXh0KCkKICAgICByZXR1cm4gdGV4dDsKIH0KIAotUmVmUHRyPFNoYXJl
ZEJ1ZmZlcj4gRWRpdG9yOjpzZWxlY3Rpb25JbldlYkFyY2hpdmVGb3JtYXQoKQotewotICAgIFJl
ZlB0cjxMZWdhY3lXZWJBcmNoaXZlPiBhcmNoaXZlID0gTGVnYWN5V2ViQXJjaGl2ZTo6Y3JlYXRl
RnJvbVNlbGVjdGlvbigmbV9mcmFtZSk7Ci0gICAgaWYgKCFhcmNoaXZlKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gU2hhcmVkQnVmZmVyOjp3cmFwQ0ZEYXRhKGFyY2hpdmUt
PnJhd0RhdGFSZXByZXNlbnRhdGlvbigpLmdldCgpKTsKLX0KLQogU3RyaW5nIEVkaXRvcjo6c2Vs
ZWN0aW9uSW5IVE1MRm9ybWF0KCkKIHsKICAgICByZXR1cm4gY3JlYXRlTWFya3VwKCpzZWxlY3Rl
ZFJhbmdlKCksIG51bGxwdHIsIEFubm90YXRlRm9ySW50ZXJjaGFuZ2UsIGZhbHNlLCBSZXNvbHZl
Tm9uTG9jYWxVUkxzKTsKQEAgLTMyNyw0NSArMjc2LDYgQEAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4g
RWRpdG9yOjppbWFnZUluV2ViQXJjaGl2ZUZvcm1hdChFbGVtZW50JiBpbWFnZUVsZW1lbnQpCiAg
ICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6d3JhcENGRGF0YShhcmNoaXZlLT5yYXdEYXRhUmVwcmVz
ZW50YXRpb24oKS5nZXQoKSk7CiB9CiAKLVJlZlB0cjxSYW5nZT4gRWRpdG9yOjphZGp1c3RlZFNl
bGVjdGlvblJhbmdlKCkKLXsKLSAgICAvLyBGSVhNRTogV2h5IGRvIHdlIG5lZWQgdG8gYWRqdXN0
IHRoZSBzZWxlY3Rpb24gdG8gaW5jbHVkZSB0aGUgYW5jaG9yIHRhZyBpdCdzIGluPwotICAgIC8v
IFdob2V2ZXIgd3JvdGUgdGhpcyBjb2RlIG9yaWdpbmFsbHkgZm9yZ290IHRvIGxlYXZlIHVzIGEg
Y29tbWVudCBleHBsYWluaW5nIHRoZSByYXRpb25hbGUuCi0gICAgUmVmUHRyPFJhbmdlPiByYW5n
ZSA9IHNlbGVjdGVkUmFuZ2UoKTsKLSAgICBOb2RlKiBjb21tb25BbmNlc3RvciA9IHJhbmdlLT5j
b21tb25BbmNlc3RvckNvbnRhaW5lcigpOwotICAgIEFTU0VSVChjb21tb25BbmNlc3Rvcik7Ci0g
ICAgYXV0byogZW5jbG9zaW5nQW5jaG9yID0gZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcoZmlyc3RQ
b3NpdGlvbkluTm9kZShjb21tb25BbmNlc3RvciksIEhUTUxOYW1lczo6YVRhZyk7Ci0gICAgaWYg
KGVuY2xvc2luZ0FuY2hvciAmJiBjb21wYXJlUG9zaXRpb25zKGZpcnN0UG9zaXRpb25Jbk9yQmVm
b3JlTm9kZShyYW5nZS0+c3RhcnRQb3NpdGlvbigpLmFuY2hvck5vZGUoKSksIHJhbmdlLT5zdGFy
dFBvc2l0aW9uKCkpID49IDApCi0gICAgICAgIHJhbmdlLT5zZXRTdGFydCgqZW5jbG9zaW5nQW5j
aG9yLCAwKTsKLSAgICByZXR1cm4gcmFuZ2U7Ci19Ci0gICAgCi1zdGF0aWMgUmVmUHRyPFNoYXJl
ZEJ1ZmZlcj4gZGF0YUluUlRGREZvcm1hdChOU0F0dHJpYnV0ZWRTdHJpbmcgKnN0cmluZykKLXsK
LSAgICBOU1VJbnRlZ2VyIGxlbmd0aCA9IHN0cmluZy5sZW5ndGg7Ci0gICAgaWYgKCFsZW5ndGgp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJ
T05TOwotICAgIHJldHVybiBTaGFyZWRCdWZmZXI6OndyYXBOU0RhdGEoW3N0cmluZyBSVEZERnJv
bVJhbmdlOk5TTWFrZVJhbmdlKDAsIGxlbmd0aCkgZG9jdW1lbnRBdHRyaWJ1dGVzOkB7IH1dKTsK
LSAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19
Ci0KLXN0YXRpYyBSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhSW5SVEZGb3JtYXQoTlNBdHRyaWJ1
dGVkU3RyaW5nICpzdHJpbmcpCi17Ci0gICAgTlNVSW50ZWdlciBsZW5ndGggPSBzdHJpbmcubGVu
Z3RoOwotICAgIGlmICghbGVuZ3RoKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIEJF
R0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICByZXR1cm4gU2hhcmVkQnVmZmVyOjp3cmFw
TlNEYXRhKFtzdHJpbmcgUlRGRnJvbVJhbmdlOk5TTWFrZVJhbmdlKDAsIGxlbmd0aCkgZG9jdW1l
bnRBdHRyaWJ1dGVzOkB7IH1dKTsKLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotCi0g
ICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KIFJlZlB0cjxTaGFyZWRCdWZmZXI+IEVkaXRvcjo6ZGF0
YVNlbGVjdGlvbkZvclBhc3RlYm9hcmQoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSkKIHsK
ICAgICAvLyBGSVhNRTogVGhlIGludGVyZmFjZSB0byB0aGlzIGZ1bmN0aW9uIGlzIGF3a3dhcmQu
IFdlJ2QgcHJvYmFibHkgYmUgYmV0dGVyIG9mZiB3aXRoIHRocmVlIHNlcGFyYXRlIGZ1bmN0aW9u
cy4KQEAgLTM5MywyMiArMzAzLDYgQEAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gRWRpdG9yOjpkYXRh
U2VsZWN0aW9uRm9yUGFzdGVib2FyZChjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmQKICAgICByZXR1
cm4gbnVsbHB0cjsKIH0KIAotdm9pZCBFZGl0b3I6OndyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJk
KFBhc3RlYm9hcmQmIHBhc3RlYm9hcmQpCi17Ci0gICAgTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRy
aWJ1dGVkU3RyaW5nID0gYXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZSgqc2VsZWN0ZWRSYW5nZSgp
KTsKLQotICAgIFBhc3RlYm9hcmRXZWJDb250ZW50IGNvbnRlbnQ7Ci0gICAgY29udGVudC5jYW5T
bWFydENvcHlPckRlbGV0ZSA9IGNhblNtYXJ0Q29weU9yRGVsZXRlKCk7Ci0gICAgY29udGVudC5k
YXRhSW5XZWJBcmNoaXZlRm9ybWF0ID0gc2VsZWN0aW9uSW5XZWJBcmNoaXZlRm9ybWF0KCk7Ci0g
ICAgY29udGVudC5kYXRhSW5SVEZERm9ybWF0ID0gW2F0dHJpYnV0ZWRTdHJpbmcgY29udGFpbnNB
dHRhY2htZW50c10gPyBkYXRhSW5SVEZERm9ybWF0KGF0dHJpYnV0ZWRTdHJpbmcpIDogMDsKLSAg
ICBjb250ZW50LmRhdGFJblJURkZvcm1hdCA9IGRhdGFJblJURkZvcm1hdChhdHRyaWJ1dGVkU3Ry
aW5nKTsKLSAgICBjb250ZW50LmRhdGFJbkhUTUxGb3JtYXQgPSBzZWxlY3Rpb25JbkhUTUxGb3Jt
YXQoKTsKLSAgICBjb250ZW50LmRhdGFJblN0cmluZ0Zvcm1hdCA9IHN0cmluZ1NlbGVjdGlvbkZv
clBhc3RlYm9hcmRXaXRoSW1hZ2VBbHRUZXh0KCk7Ci0gICAgY2xpZW50KCktPmdldENsaWVudFBh
c3RlYm9hcmREYXRhRm9yUmFuZ2Uoc2VsZWN0ZWRSYW5nZSgpLmdldCgpLCBjb250ZW50LmNsaWVu
dFR5cGVzLCBjb250ZW50LmNsaWVudERhdGEpOwotCi0gICAgcGFzdGVib2FyZC53cml0ZShjb250
ZW50KTsKLX0KLQogc3RhdGljIHZvaWQgZ2V0SW1hZ2UoRWxlbWVudCYgaW1hZ2VFbGVtZW50LCBS
ZWZQdHI8SW1hZ2U+JiBpbWFnZSwgQ2FjaGVkSW1hZ2UqJiBjYWNoZWRJbWFnZSkKIHsKICAgICBh
dXRvKiByZW5kZXJlciA9IGltYWdlRWxlbWVudC5yZW5kZXJlcigpOwpAQCAtNjYxLDI0ICs1NTUs
NiBAQCBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gRWRpdG9yOjp3ZWJDb250ZW50RnJvbVBhc3Rl
Ym9hcmQoUGFzdGVib2FyZCYgcGFzdGVib2FyZAogICAgIHJldHVybiBXVEZNb3ZlKHJlYWRlci5m
cmFnbWVudCk7CiB9CiAKLVJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBFZGl0b3I6OmNyZWF0ZUZy
YWdtZW50Rm9ySW1hZ2VSZXNvdXJjZUFuZEFkZFJlc291cmNlKFJlZlB0cjxBcmNoaXZlUmVzb3Vy
Y2U+JiYgcmVzb3VyY2UpCi17Ci0gICAgaWYgKCFyZXNvdXJjZSkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0KLSAgICBTdHJpbmcgcmVzb3VyY2VVUkwgPSByZXNvdXJjZS0+dXJsKCkuc3RyaW5n
KCk7Ci0gICAgaWYgKERvY3VtZW50TG9hZGVyKiBsb2FkZXIgPSBtX2ZyYW1lLmxvYWRlcigpLmRv
Y3VtZW50TG9hZGVyKCkpCi0gICAgICAgIGxvYWRlci0+YWRkQXJjaGl2ZVJlc291cmNlKHJlc291
cmNlLnJlbGVhc2VOb25OdWxsKCkpOwotCi0gICAgYXV0byBpbWFnZUVsZW1lbnQgPSBIVE1MSW1h
Z2VFbGVtZW50OjpjcmVhdGUoKm1fZnJhbWUuZG9jdW1lbnQoKSk7Ci0gICAgaW1hZ2VFbGVtZW50
LT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKEhUTUxOYW1lczo6c3JjQXR0ciwg
cmVzb3VyY2VVUkwpOwotCi0gICAgYXV0byBmcmFnbWVudCA9IGRvY3VtZW50KCkuY3JlYXRlRG9j
dW1lbnRGcmFnbWVudCgpOwotICAgIGZyYWdtZW50LT5hcHBlbmRDaGlsZChpbWFnZUVsZW1lbnQp
OwotCi0gICAgcmV0dXJuIFdURk1vdmUoZnJhZ21lbnQpOwotfQotCiBSZWY8RG9jdW1lbnRGcmFn
bWVudD4gRWRpdG9yOjpjcmVhdGVGcmFnbWVudEZvckltYWdlQW5kVVJMKGNvbnN0IFN0cmluZyYg
dXJsKQogewogICAgIGF1dG8gaW1hZ2VFbGVtZW50ID0gSFRNTEltYWdlRWxlbWVudDo6Y3JlYXRl
KCptX2ZyYW1lLmRvY3VtZW50KCkpOwpAQCAtNzE3LDIyICs1OTMsNiBAQCBSZWZQdHI8RG9jdW1l
bnRGcmFnbWVudD4gRWRpdG9yOjpjcmVhdGVGcmFnbWVudEFuZEFkZFJlc291cmNlcyhOU0F0dHJp
YnV0ZWRTdHJpbgogICAgIHJldHVybiBXVEZNb3ZlKGZyYWdtZW50QW5kUmVzb3VyY2VzLmZyYWdt
ZW50KTsKIH0KIAotdm9pZCBFZGl0b3I6OnJlcGxhY2VTZWxlY3Rpb25XaXRoQXR0cmlidXRlZFN0
cmluZyhOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmcsIE1haWxCbG9ja3F1b3Rl
SGFuZGxpbmcgbWFpbEJsb2NrcXVvdGVIYW5kbGluZykKLXsKLSAgICBpZiAobV9mcmFtZS5zZWxl
Y3Rpb24oKS5pc05vbmUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fZnJhbWUuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkgewotICAgICAg
ICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEFuZEFk
ZFJlc291cmNlcyhhdHRyaWJ1dGVkU3RyaW5nKTsKLSAgICAgICAgaWYgKGZyYWdtZW50ICYmIHNo
b3VsZEluc2VydEZyYWdtZW50KGZyYWdtZW50LCBzZWxlY3RlZFJhbmdlKCksIEVkaXRvckluc2Vy
dEFjdGlvbjo6UGFzdGVkKSkKLSAgICAgICAgICAgIHBhc3RlQXNGcmFnbWVudChmcmFnbWVudC5y
ZWxlYXNlTm9uTnVsbCgpLCBmYWxzZSwgZmFsc2UsIG1haWxCbG9ja3F1b3RlSGFuZGxpbmcpOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIFN0cmluZyB0ZXh0ID0gW2F0dHJpYnV0ZWRTdHJpbmcgc3Ry
aW5nXTsKLSAgICAgICAgaWYgKHNob3VsZEluc2VydFRleHQodGV4dCwgc2VsZWN0ZWRSYW5nZSgp
LmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlBhc3RlZCkpCi0gICAgICAgICAgICBwYXN0ZUFz
UGxhaW5UZXh0KHRleHQsIGZhbHNlKTsKLSAgICB9Ci19Ci0KIHZvaWQgRWRpdG9yOjphcHBseUZv
bnRTdHlsZXMoY29uc3QgU3RyaW5nJiBmb250RmFtaWx5LCBkb3VibGUgZm9udFNpemUsIHVuc2ln
bmVkIGZvbnRUcmFpdHMpCiB7CiAgICAgYXV0byYgY3NzVmFsdWVQb29sID0gQ1NTVmFsdWVQb29s
OjpzaW5nbGV0b24oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NwaS9j
b2NvYS9OU0F0dHJpYnV0ZWRTdHJpbmdTUEkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Nw
aS9jb2NvYS9OU0F0dHJpYnV0ZWRTdHJpbmdTUEkuaAppbmRleCBlN2MyYmFiMjU3OWRhYjBiZGQ1
MDljNjRmODQ1NzZmMDViZmU4OTMxLi40MDZmMjkxODAzYjdlZTY0NmYyZWQ4NjMzMTY1NzhiNWQ3
ZjNmMjUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcGkvY29jb2EvTlNB
dHRyaWJ1dGVkU3RyaW5nU1BJLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3BpL2Nv
Y29hL05TQXR0cmlidXRlZFN0cmluZ1NQSS5oCkBAIC0xMTEsNiArMTExLDE0IEBAIFNPRlRfTElO
S19DT05TVEFOVChVSUZvdW5kYXRpb24sIE5TQ29jb2FWZXJzaW9uRG9jdW1lbnRBdHRyaWJ1dGUs
IE5TU3RyaW5nICopCiAvLyB3aWxsIGNvbnRpbnVlIHRvIHN1cHBvcnQgaXQuCiBzdGF0aWMgTlNT
dHJpbmcgKmNvbnN0IE5TU3VwZXJzY3JpcHRBdHRyaWJ1dGVOYW1lID0gQCJOU1N1cGVyc2NyaXB0
IjsKIAorQGludGVyZmFjZSBOU0F0dHJpYnV0ZWRTdHJpbmcgKCkKKy0gKGlkKWluaXRXaXRoUlRG
OihOU0RhdGEgKilkYXRhIGRvY3VtZW50QXR0cmlidXRlczooTlNEaWN0aW9uYXJ5ICoqKWRpY3Q7
CistIChpZClpbml0V2l0aFJURkQ6KE5TRGF0YSAqKWRhdGEgZG9jdW1lbnRBdHRyaWJ1dGVzOihO
U0RpY3Rpb25hcnkgKiopZGljdDsKKy0gKE5TRGF0YSAqKVJURkZyb21SYW5nZTooTlNSYW5nZSly
YW5nZSBkb2N1bWVudEF0dHJpYnV0ZXM6KE5TRGljdGlvbmFyeSAqKWRpY3Q7CistIChOU0RhdGEg
KilSVEZERnJvbVJhbmdlOihOU1JhbmdlKXJhbmdlIGRvY3VtZW50QXR0cmlidXRlczooTlNEaWN0
aW9uYXJ5ICopZGljdDsKKy0gKEJPT0wpY29udGFpbnNBdHRhY2htZW50czsKK0BlbmQKKwogI2Vu
ZGlmCiAKICNlbmRpZgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>