<?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>122694</bug_id>
          
          <creation_ts>2013-10-12 10:00:48 -0700</creation_ts>
          <short_desc>Factor line box code from RenderText to a class</short_desc>
          <delta_ts>2013-10-12 10:54:08 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>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="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kling</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>rakuco</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>939086</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-10-12 10:00:48 -0700</bug_when>
    <thetext>This code can be factored out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>939087</commentid>
    <comment_count>1</comment_count>
      <attachid>214057</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-10-12 10:13:07 -0700</bug_when>
    <thetext>Created attachment 214057
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>939089</commentid>
    <comment_count>2</comment_count>
      <attachid>214057</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-10-12 10:23:33 -0700</bug_when>
    <thetext>Comment on attachment 214057
patch

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

&gt; Source/WebCore/rendering/RenderTextLineBoxes.cpp:43
&gt; +        m_first = m_last = textBox;

We should do this on two lines.

&gt; Source/WebCore/rendering/RenderTextLineBoxes.cpp:59
&gt; +        m_first = 0;

nullptr

&gt; Source/WebCore/rendering/RenderTextLineBoxes.cpp:114
&gt; +    m_first = m_last = 0;

nullptr
Also, we should do this on two lines.

&gt; Source/WebCore/rendering/RenderTextLineBoxes.cpp:117
&gt; +InlineTextBox* RenderTextLineBoxes::findNext(int offset, int&amp; pos) const

Crappy name: pos.

&gt; Source/WebCore/rendering/RenderTextLineBoxes.cpp:120
&gt; +        return 0;

nullptr

&gt; Source/WebCore/rendering/RenderTextLineBoxes.cpp:129
&gt; +    pos = (offset &gt; currentOffset ? current-&gt;len() : current-&gt;len() - (currentOffset - offset) );

Extra space before last &apos;)&apos;

&gt; Source/WebCore/rendering/RenderTextLineBoxes.cpp:143
&gt; +    const InlineTextBox* prev = 0;

nullptr

&gt; Source/WebCore/rendering/RenderTextLineBoxes.h:45
&gt; +    void extract(InlineTextBox*);
&gt; +    void attach(InlineTextBox*);
&gt; +    void remove(InlineTextBox*);

Seems like these should really take references. Maybe in a later patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>939094</commentid>
    <comment_count>3</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-10-12 10:54:08 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/157340</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>214057</attachid>
            <date>2013-10-12 10:13:07 -0700</date>
            <delta_ts>2013-10-12 10:23:32 -0700</delta_ts>
            <desc>patch</desc>
            <filename>rendertextlineboxes.patch</filename>
            <type>text/plain</type>
            <size>27444</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NzMzOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDEzLTEwLTEyICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBGYWN0b3IgbGluZSBib3ggY29k
ZSBmcm9tIFJlbmRlclRleHQgdG8gYSBjbGFzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIyNjk0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQ3JlYXRlIFJlbmRlclRleHRMaW5lQm94ZXMgYW5kIG1vdmUg
c29tZSBsaW5lIGJveCBzcGVjaWZpYyBjb2RlIHRoZXJlLgorCiAyMDEzLTEwLTEyICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXBsYWNlIFJlbmRlclRleHQ6
OnJlbmRlcmVkVGV4dExlbmd0aCB3aXRoIGhhc1JlbmRlcmVkVGV4dApJbmRleDogU291cmNlL1dl
YkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ01ha2VM
aXN0cy50eHQJKHJldmlzaW9uIDE1NzMzOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0CSh3b3JraW5nIGNvcHkpCkBAIC0yMTU5LDYgKzIxNTksNyBAQCBzZXQoV2ViQ29yZV9TT1VS
Q0VTCiAgICAgcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sTXVsdGlMaW5lLmNwcAogICAgIHJl
bmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCiAgICAgcmVuZGVyaW5nL1Jl
bmRlclRleHRGcmFnbWVudC5jcHAKKyAgICByZW5kZXJpbmcvUmVuZGVyVGV4dExpbmVCb3hlcy5j
cHAKICAgICByZW5kZXJpbmcvUmVuZGVyVGV4dFRyYWNrQ3VlLmNwcAogICAgIHJlbmRlcmluZy9S
ZW5kZXJUaGVtZS5jcHAKICAgICByZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gMTU3MzM5KQorKysgU291cmNl
L1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2luZyBjb3B5KQpAQCAtNDQ0MiwxOCAr
NDQ0MiwyMCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUYWJsZVJvdy5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFi
bGVTZWN0aW9uLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2Vj
dGlvbi5oIFwKKwlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAgXAorCVNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmggXAogCVNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUZXh0Q29udHJvbC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaCBcCi0JU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRleHQuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4
dFRyYWNrQ3VlLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRUcmFj
a0N1ZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dEZyYWdtZW50LmNw
cCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRGcmFnbWVudC5oIFwKLQlT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGV4dExpbmVCb3hlcy5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUZXh0TGluZUJveGVzLmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5o
IFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAgXApJbmRl
eDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvago9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCShy
ZXZpc2lvbiAxNTczMzkpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29y
ZS52Y3hwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMDY2NSw2ICsxMDY2NSwyMCBAQAogICAgICAg
PEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9y
bSknPT0nUHJvZHVjdGlvbnxXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgogICAgICAg
PEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9y
bSknPT0nUHJvZHVjdGlvbnx4NjQnIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KICAgICA8L0Ns
Q29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xSZW5kZXJUZXh0
TGluZUJveGVzLmNwcCI+CisgICAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249Iick
KENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+dHJ1ZTwvRXhjbHVk
ZWRGcm9tQnVpbGQ+CisgICAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENv
bmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJv
bUJ1aWxkPgorICAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1
cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z19XaW5DYWlyb3xXaW4zMiciPnRydWU8L0V4Y2x1
ZGVkRnJvbUJ1aWxkPgorICAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChD
b25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z19XaW5DYWlyb3x4NjQnIj50cnVlPC9F
eGNsdWRlZEZyb21CdWlsZD4KKyAgICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0i
JyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWdTdWZmaXh8V2luMzInIj50cnVl
PC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlv
bj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWdTdWZmaXh8eDY0JyI+dHJ1
ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRp
b249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj50cnVl
PC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlv
bj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj50cnVlPC9F
eGNsdWRlZEZyb21CdWlsZD4KKyAgICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0i
JyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZV9XaW5DYWlyb3xXaW4zMici
PnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29u
ZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlX1dpbkNhaXJv
fHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgICA8RXhjbHVkZWRGcm9tQnVp
bGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQcm9kdWN0aW9u
fFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgICAgIDxFeGNsdWRlZEZyb21C
dWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1Byb2R1Y3Rp
b258eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgPC9DbENvbXBpbGU+CiAgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcUmVuZGVyVGV4dFRyYWNrQ3VlLmNwcCI+
CiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwk
KFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgogICAg
ICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0
Zm9ybSknPT0nRGVidWd8eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CkBAIC0xOTUwNyw2
ICsxOTUyMSw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcUmVuZGVy
VGV4dENvbnRyb2xNdWx0aUxpbmUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJl
bmRlcmluZ1xSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaCIgLz4KICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xSZW5kZXJUZXh0RnJhZ21lbnQuaCIgLz4KKyAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xSZW5kZXJUZXh0TGluZUJveGVzLmgiIC8+CiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcUmVuZGVyVGV4dFRyYWNrQ3VlLmgi
IC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcUmVuZGVyVGhlbWUuaCIg
Lz4KICAgICA8Q3VzdG9tQnVpbGRTdGVwIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xSZW5kZXJUaGVt
ZVNhZmFyaS5oIiAvPgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTU3MzM5KQorKysgU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC01Njcy
LDYgKzU2NzIsOCBAQAogCQlFNEMyNzk1OTBDRjk3NDE5MDBFOTdCOTggLyogUmVuZGVyTWVkaWEu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0QzI3OTU3
MENGOTc0MTkwMEU5N0I5OCAvKiBSZW5kZXJNZWRpYS5oICovOyB9OwogCQlFNEM5MUEwRTE4MDIz
NDMxMDBBMTdGNkQgLyogVGV4dFBhaW50U3R5bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0QzkxQTBEMTgwMjM0MzEwMEExN0Y2RCAvKiBUZXh0UGFp
bnRTdHlsZS5oICovOyB9OwogCQlFNEM5MUExMDE4MDIzNDM5MDBBMTdGNkQgLyogVGV4dFBhaW50
U3R5bGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTRDOTFBMEYxODAyMzQzOTAwQTE3RjZEIC8qIFRleHRQYWludFN0eWxlLmNwcCAqLzsgfTsKKwkJ
RTRDOTFBMTYxODA5OTlGMTAwQTE3RjZEIC8qIFJlbmRlclRleHRMaW5lQm94ZXMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0QzkxQTE1MTgwOTk5RjEw
MEExN0Y2RCAvKiBSZW5kZXJUZXh0TGluZUJveGVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRTRDOTFBMTgxODA5OTlGQjAwQTE3RjZEIC8qIFJl
bmRlclRleHRMaW5lQm94ZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRTRDOTFBMTcxODA5OTlGQjAwQTE3RjZEIC8qIFJlbmRlclRleHRMaW5lQm94
ZXMuY3BwICovOyB9OwogCQlFNEQ1OEVCNDE3QjREQkRDMDBDQkRDQTggLyogU3R5bGVSZXNvbHZl
Rm9yRG9jdW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRTRENThFQjIxN0I0REJEQzAwQ0JEQ0E4IC8qIFN0eWxlUmVzb2x2ZUZvckRvY3VtZW50
LmNwcCAqLzsgfTsKIAkJRTRENThFQjUxN0I0REJEQzAwQ0JEQ0E4IC8qIFN0eWxlUmVzb2x2ZUZv
ckRvY3VtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFNEQ1OEVCMzE3QjREQkRDMDBDQkRDQTggLyogU3R5bGVSZXNvbHZlRm9yRG9jdW1lbnQuaCAq
LzsgfTsKIAkJRTRENThFQjgxN0I0RUQ4OTAwQ0JEQ0E4IC8qIFN0eWxlRm9udFNpemVGdW5jdGlv
bnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRE
NThFQjYxN0I0RUQ4OTAwQ0JEQ0E4IC8qIFN0eWxlRm9udFNpemVGdW5jdGlvbnMuY3BwICovOyB9
OwpAQCAtMTI2NDQsNiArMTI2NDYsOCBAQAogCQlFNEMyNzk1NzBDRjk3NDE5MDBFOTdCOTggLyog
UmVuZGVyTWVkaWEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyTWVk
aWEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRDOTFBMEQxODAyMzQzMTAwQTE3
RjZEIC8qIFRleHRQYWludFN0eWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFRleHRQYWludFN0eWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0QzkxQTBG
MTgwMjM0MzkwMEExN0Y2RCAvKiBUZXh0UGFpbnRTdHlsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBUZXh0UGFpbnRTdHlsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUU0QzkxQTE1MTgwOTk5RjEwMEExN0Y2RCAvKiBSZW5kZXJUZXh0TGluZUJv
eGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclRleHRMaW5lQm94
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTRDOTFBMTcxODA5OTlGQjAwQTE3
RjZEIC8qIFJlbmRlclRleHRMaW5lQm94ZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gUmVuZGVyVGV4dExpbmVCb3hlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUU0RDU4RUIyMTdCNERCREMwMENCRENBOCAvKiBTdHlsZVJlc29sdmVGb3JEb2N1
bWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHlsZVJlc29s
dmVGb3JEb2N1bWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0RDU4RUIz
MTdCNERCREMwMENCRENBOCAvKiBTdHlsZVJlc29sdmVGb3JEb2N1bWVudC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTdHlsZVJlc29sdmVGb3JEb2N1bWVudC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlFNEQ1OEVCNjE3QjRFRDg5MDBDQkRDQTggLyogU3R5bGVG
b250U2l6ZUZ1bmN0aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBTdHlsZUZvbnRTaXplRnVuY3Rpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTIwNjM2LDYgKzIwNjQwLDggQEAKIAkJCQkwODNEQUVBNTBGMDFBN0ZCMDAzNDI3NTQgLyog
UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmggKi8sCiAJCQkJQkNFQTQ4NEUwOTdEOTMwMjAw
OTRDOUU0IC8qIFJlbmRlclRleHRGcmFnbWVudC5jcHAgKi8sCiAJCQkJQkNFQTQ4NEYwOTdEOTMw
MjAwOTRDOUU0IC8qIFJlbmRlclRleHRGcmFnbWVudC5oICovLAorCQkJCUU0QzkxQTE3MTgwOTk5
RkIwMEExN0Y2RCAvKiBSZW5kZXJUZXh0TGluZUJveGVzLmNwcCAqLywKKwkJCQlFNEM5MUExNTE4
MDk5OUYxMDBBMTdGNkQgLyogUmVuZGVyVGV4dExpbmVCb3hlcy5oICovLAogCQkJCTg2RkY4ODVF
MTVERTNCODIwMEJENkIyOCAvKiBSZW5kZXJUZXh0VHJhY2tDdWUuY3BwICovLAogCQkJCTg2RkY4
ODVGMTVERTNCODIwMEJENkIyOCAvKiBSZW5kZXJUZXh0VHJhY2tDdWUuaCAqLywKIAkJCQlCQ0VB
NDg0QTA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVyVGhlbWUuY3BwICovLApAQCAtMjE3OTQsNiAr
MjE4MDAsNyBAQAogCQkJCTdFMTJFOTBGMTVGQTVEM0EwMDVFNDEyNiAvKiBDdXN0b21GaWx0ZXJN
ZXNoR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MENDMDg5QTE0QzZFOTlDMDAxN0FC
NTEgLyogQ3VzdG9tRmlsdGVyTnVtYmVyUGFyYW1ldGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
MEFDRTJDQjE0QjVENzkzMDA0NDY2NjYgLyogQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmggaW4gSGVh
ZGVycyAqLywKKwkJCQlFNEM5MUExNjE4MDk5OUYxMDBBMTdGNkQgLyogUmVuZGVyVGV4dExpbmVC
b3hlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTA5Q0M5RkIxNEMwNjlFRDAwQkJFQ0JEIC8qIEN1
c3RvbUZpbHRlclBhcmFtZXRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTA5MzMzNTAxNjNCMEU0
MzAwMDk5QTYwIC8qIEN1c3RvbUZpbHRlclBhcmFtZXRlckxpc3QuaCBpbiBIZWFkZXJzICovLAog
CQkJCTUwM0QwQ0FCMTRCNUIwODcwMEYzMkY1NyAvKiBDdXN0b21GaWx0ZXJQcm9ncmFtLmggaW4g
SGVhZGVycyAqLywKQEAgLTI1OTE1LDYgKzI1OTIyLDcgQEAKIAkJCQlGREVBQUFGNDEyQjAyRUU0
MDBEQ0YzM0IgLyogSlNBdWRpb0NvbnRleHRDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
RkRBMTVFQTcxMkIwM0VFMTAwM0E1ODNBIC8qIEpTQXVkaW9EZXN0aW5hdGlvbk5vZGUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJRkRBMTVFQUQxMkIwM0VFMTAwM0E1ODNBIC8qIEpTQXVkaW9MaXN0
ZW5lci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlFNEM5MUExODE4MDk5OUZCMDBBMTdGNkQgLyog
UmVuZGVyVGV4dExpbmVCb3hlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGREExNUVBRjEyQjAz
RUUxMDAzQTU4M0EgLyogSlNBdWRpb05vZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkRBMTVF
QjMxMkIwM0VFMTAwM0E1ODNBIC8qIEpTQXVkaW9QYXJhbS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlGREExNUVCNTEyQjAzRUUxMDAzQTU4M0EgLyogSlNBdWRpb1Byb2Nlc3NpbmdFdmVudC5jcHAg
aW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5j
cHAJKHJldmlzaW9uIDE1NzMzOSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU1LDggKzE1NSw2IEBAIFJlbmRlclRleHQ6OlJl
bmRlclRleHQoVGV4dCogdGV4dE5vZGUsIGMKICAgICAsIG1fYmVnaW5NaW5XaWR0aCgwKQogICAg
ICwgbV9lbmRNaW5XaWR0aCgwKQogICAgICwgbV90ZXh0KHRleHQpCi0gICAgLCBtX2ZpcnN0VGV4
dEJveCgwKQotICAgICwgbV9sYXN0VGV4dEJveCgwKQogewogICAgIEFTU0VSVCghbV90ZXh0Lmlz
TnVsbCgpKTsKIApAQCAtMTcyLDggKzE3MCw2IEBAIFJlbmRlclRleHQ6OlJlbmRlclRleHQoVGV4
dCogdGV4dE5vZGUsIGMKIAogUmVuZGVyVGV4dDo6flJlbmRlclRleHQoKQogewotICAgIEFTU0VS
VCghbV9maXJzdFRleHRCb3gpOwotICAgIEFTU0VSVCghbV9sYXN0VGV4dEJveCk7CiB9CiAKICNl
bmRpZgpAQCAtMjYyLDcwICsyNTgsNiBAQCB2b2lkIFJlbmRlclRleHQ6OndpbGxCZURlc3Ryb3ll
ZCgpCiAgICAgUmVuZGVyT2JqZWN0Ojp3aWxsQmVEZXN0cm95ZWQoKTsKIH0KIAotdm9pZCBSZW5k
ZXJUZXh0OjpleHRyYWN0VGV4dEJveChJbmxpbmVUZXh0Qm94KiBib3gpCi17Ci0gICAgY2hlY2tD
b25zaXN0ZW5jeSgpOwotCi0gICAgbV9sYXN0VGV4dEJveCA9IGJveC0+cHJldlRleHRCb3goKTsK
LSAgICBpZiAoYm94ID09IG1fZmlyc3RUZXh0Qm94KQotICAgICAgICBtX2ZpcnN0VGV4dEJveCA9
IDA7Ci0gICAgaWYgKGJveC0+cHJldlRleHRCb3goKSkKLSAgICAgICAgYm94LT5wcmV2VGV4dEJv
eCgpLT5zZXROZXh0VGV4dEJveCgwKTsKLSAgICBib3gtPnNldFByZXZpb3VzVGV4dEJveCgwKTsK
LSAgICBmb3IgKElubGluZVRleHRCb3gqIGN1cnIgPSBib3g7IGN1cnI7IGN1cnIgPSBjdXJyLT5u
ZXh0VGV4dEJveCgpKQotICAgICAgICBjdXJyLT5zZXRFeHRyYWN0ZWQoKTsKLQotICAgIGNoZWNr
Q29uc2lzdGVuY3koKTsKLX0KLQotdm9pZCBSZW5kZXJUZXh0OjphdHRhY2hUZXh0Qm94KElubGlu
ZVRleHRCb3gqIGJveCkKLXsKLSAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0KLSAgICBpZiAobV9s
YXN0VGV4dEJveCkgewotICAgICAgICBtX2xhc3RUZXh0Qm94LT5zZXROZXh0VGV4dEJveChib3gp
OwotICAgICAgICBib3gtPnNldFByZXZpb3VzVGV4dEJveChtX2xhc3RUZXh0Qm94KTsKLSAgICB9
IGVsc2UKLSAgICAgICAgbV9maXJzdFRleHRCb3ggPSBib3g7Ci0gICAgSW5saW5lVGV4dEJveCog
bGFzdCA9IGJveDsKLSAgICBmb3IgKElubGluZVRleHRCb3gqIGN1cnIgPSBib3g7IGN1cnI7IGN1
cnIgPSBjdXJyLT5uZXh0VGV4dEJveCgpKSB7Ci0gICAgICAgIGN1cnItPnNldEV4dHJhY3RlZChm
YWxzZSk7Ci0gICAgICAgIGxhc3QgPSBjdXJyOwotICAgIH0KLSAgICBtX2xhc3RUZXh0Qm94ID0g
bGFzdDsKLQotICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKLX0KLQotdm9pZCBSZW5kZXJUZXh0Ojpy
ZW1vdmVUZXh0Qm94KElubGluZVRleHRCb3gqIGJveCkKLXsKLSAgICBjaGVja0NvbnNpc3RlbmN5
KCk7Ci0KLSAgICBpZiAoYm94ID09IG1fZmlyc3RUZXh0Qm94KQotICAgICAgICBtX2ZpcnN0VGV4
dEJveCA9IGJveC0+bmV4dFRleHRCb3goKTsKLSAgICBpZiAoYm94ID09IG1fbGFzdFRleHRCb3gp
Ci0gICAgICAgIG1fbGFzdFRleHRCb3ggPSBib3gtPnByZXZUZXh0Qm94KCk7Ci0gICAgaWYgKGJv
eC0+bmV4dFRleHRCb3goKSkKLSAgICAgICAgYm94LT5uZXh0VGV4dEJveCgpLT5zZXRQcmV2aW91
c1RleHRCb3goYm94LT5wcmV2VGV4dEJveCgpKTsKLSAgICBpZiAoYm94LT5wcmV2VGV4dEJveCgp
KQotICAgICAgICBib3gtPnByZXZUZXh0Qm94KCktPnNldE5leHRUZXh0Qm94KGJveC0+bmV4dFRl
eHRCb3goKSk7Ci0KLSAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci19Ci0KLXZvaWQgUmVuZGVyVGV4
dDo6ZGVsZXRlVGV4dEJveGVzKCkKLXsKLSAgICBpZiAoZmlyc3RUZXh0Qm94KCkpIHsKLSAgICAg
ICAgUmVuZGVyQXJlbmEmIGFyZW5hID0gcmVuZGVyQXJlbmEoKTsKLSAgICAgICAgSW5saW5lVGV4
dEJveCogbmV4dDsKLSAgICAgICAgZm9yIChJbmxpbmVUZXh0Qm94KiBjdXJyID0gZmlyc3RUZXh0
Qm94KCk7IGN1cnI7IGN1cnIgPSBuZXh0KSB7Ci0gICAgICAgICAgICBuZXh0ID0gY3Vyci0+bmV4
dFRleHRCb3goKTsKLSAgICAgICAgICAgIGN1cnItPmRlc3Ryb3koYXJlbmEpOwotICAgICAgICB9
Ci0gICAgICAgIG1fZmlyc3RUZXh0Qm94ID0gbV9sYXN0VGV4dEJveCA9IDA7Ci0gICAgfQotfQot
CiBTdHJpbmcgUmVuZGVyVGV4dDo6b3JpZ2luYWxUZXh0KCkgY29uc3QKIHsKICAgICByZXR1cm4g
dGV4dE5vZGUoKSA/IHRleHROb2RlKCktPmRhdGEoKSA6IFN0cmluZygpOwpAQCAtNDc2LDI3ICs0
MDgsNiBAQCB2b2lkIFJlbmRlclRleHQ6OmFic29sdXRlUXVhZHNGb3JSYW5nZShWCiAgICAgfQog
fQogCi1JbmxpbmVUZXh0Qm94KiBSZW5kZXJUZXh0OjpmaW5kTmV4dElubGluZVRleHRCb3goaW50
IG9mZnNldCwgaW50JiBwb3MpIGNvbnN0Ci17Ci0gICAgLy8gVGhlIHRleHQgcnVucyBwb2ludCB0
byBwYXJ0cyBvZiB0aGUgUmVuZGVyVGV4dCdzIG1fdGV4dAotICAgIC8vICh0aGV5IGRvbid0IGlu
Y2x1ZGUgJ1xuJykKLSAgICAvLyBGaW5kIHRoZSB0ZXh0IHJ1biB0aGF0IGluY2x1ZGVzIHRoZSBj
aGFyYWN0ZXIgYXQgb2Zmc2V0Ci0gICAgLy8gYW5kIHJldHVybiBwb3MsIHdoaWNoIGlzIHRoZSBw
b3NpdGlvbiBvZiB0aGUgY2hhciBpbiB0aGUgcnVuLgotCi0gICAgaWYgKCFtX2ZpcnN0VGV4dEJv
eCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBJbmxpbmVUZXh0Qm94KiBzID0gbV9maXJzdFRl
eHRCb3g7Ci0gICAgaW50IG9mZiA9IHMtPmxlbigpOwotICAgIHdoaWxlIChvZmZzZXQgPiBvZmYg
JiYgcy0+bmV4dFRleHRCb3goKSkgewotICAgICAgICBzID0gcy0+bmV4dFRleHRCb3goKTsKLSAg
ICAgICAgb2ZmID0gcy0+c3RhcnQoKSArIHMtPmxlbigpOwotICAgIH0KLSAgICAvLyB3ZSBhcmUg
bm93IGluIHRoZSBjb3JyZWN0IHRleHQgcnVuCi0gICAgcG9zID0gKG9mZnNldCA+IG9mZiA/IHMt
PmxlbigpIDogcy0+bGVuKCkgLSAob2ZmIC0gb2Zmc2V0KSApOwotICAgIHJldHVybiBzOwotfQot
CiBlbnVtIFNob3VsZEFmZmluaXR5QmVEb3duc3RyZWFtIHsgQWx3YXlzRG93bnN0cmVhbSwgQWx3
YXlzVXBzdHJlYW0sIFVwc3RyZWFtSWZQb3NpdGlvbklzTm90QXRTdGFydCB9OwogCiBzdGF0aWMg
Ym9vbCBsaW5lRGlyZWN0aW9uUG9pbnRGaXRzSW5Cb3goaW50IHBvaW50TGluZURpcmVjdGlvbiwg
SW5saW5lVGV4dEJveCogYm94LCBTaG91bGRBZmZpbml0eUJlRG93bnN0cmVhbSYgc2hvdWxkQWZm
aW5pdHlCZURvd25zdHJlYW0pCkBAIC0xMTY2LDEyICsxMDc3LDEyIEBAIEZsb2F0UG9pbnQgUmVu
ZGVyVGV4dDo6Zmlyc3RSdW5PcmlnaW4oKSAKIAogZmxvYXQgUmVuZGVyVGV4dDo6Zmlyc3RSdW5Y
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9maXJzdFRleHRCb3ggPyBtX2ZpcnN0VGV4dEJveC0+
eCgpIDogMDsKKyAgICByZXR1cm4gZmlyc3RUZXh0Qm94KCkgPyBmaXJzdFRleHRCb3goKS0+eCgp
IDogMDsKIH0KIAogZmxvYXQgUmVuZGVyVGV4dDo6Zmlyc3RSdW5ZKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gbV9maXJzdFRleHRCb3ggPyBtX2ZpcnN0VGV4dEJveC0+eSgpIDogMDsKKyAgICByZXR1
cm4gZmlyc3RUZXh0Qm94KCkgPyBmaXJzdFRleHRCb3goKS0+eSgpIDogMDsKIH0KICAgICAKIHZv
aWQgUmVuZGVyVGV4dDo6c2V0U2VsZWN0aW9uU3RhdGUoU2VsZWN0aW9uU3RhdGUgc3RhdGUpCkBA
IC0xNDM5LDIwICsxMzUwLDYgQEAgSW5saW5lVGV4dEJveCogUmVuZGVyVGV4dDo6Y3JlYXRlVGV4
dEJveAogICAgIHJldHVybiBuZXcgKHJlbmRlckFyZW5hKCkpIElubGluZVRleHRCb3goKnRoaXMp
OwogfQogCi1JbmxpbmVUZXh0Qm94KiBSZW5kZXJUZXh0OjpjcmVhdGVJbmxpbmVUZXh0Qm94KCkK
LXsKLSAgICBJbmxpbmVUZXh0Qm94KiB0ZXh0Qm94ID0gY3JlYXRlVGV4dEJveCgpOwotICAgIGlm
ICghbV9maXJzdFRleHRCb3gpCi0gICAgICAgIG1fZmlyc3RUZXh0Qm94ID0gbV9sYXN0VGV4dEJv
eCA9IHRleHRCb3g7Ci0gICAgZWxzZSB7Ci0gICAgICAgIG1fbGFzdFRleHRCb3gtPnNldE5leHRU
ZXh0Qm94KHRleHRCb3gpOwotICAgICAgICB0ZXh0Qm94LT5zZXRQcmV2aW91c1RleHRCb3gobV9s
YXN0VGV4dEJveCk7Ci0gICAgICAgIG1fbGFzdFRleHRCb3ggPSB0ZXh0Qm94OwotICAgIH0KLSAg
ICB0ZXh0Qm94LT5zZXRCZWhhdmVzTGlrZVRleHQodHJ1ZSk7Ci0gICAgcmV0dXJuIHRleHRCb3g7
Ci19Ci0KIHZvaWQgUmVuZGVyVGV4dDo6cG9zaXRpb25MaW5lQm94KElubGluZUJveCogYm94KQog
ewogICAgIElubGluZVRleHRCb3gqIHMgPSB0b0lubGluZVRleHRCb3goYm94KTsKQEAgLTE0NjEs
MTQgKzEzNTgsNyBAQCB2b2lkIFJlbmRlclRleHQ6OnBvc2l0aW9uTGluZUJveChJbmxpbmVCCiAg
ICAgaWYgKCFzLT5sZW4oKSkgewogICAgICAgICAvLyBXZSB3YW50IHRoZSBib3ggdG8gYmUgZGVz
dHJveWVkLgogICAgICAgICBzLT5yZW1vdmUoKTsKLSAgICAgICAgaWYgKG1fZmlyc3RUZXh0Qm94
ID09IHMpCi0gICAgICAgICAgICBtX2ZpcnN0VGV4dEJveCA9IHMtPm5leHRUZXh0Qm94KCk7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHMtPnByZXZUZXh0Qm94KCktPnNldE5leHRUZXh0Qm94
KHMtPm5leHRUZXh0Qm94KCkpOwotICAgICAgICBpZiAobV9sYXN0VGV4dEJveCA9PSBzKQotICAg
ICAgICAgICAgbV9sYXN0VGV4dEJveCA9IHMtPnByZXZUZXh0Qm94KCk7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHMtPm5leHRUZXh0Qm94KCktPnNldFByZXZpb3VzVGV4dEJveChzLT5wcmV2
VGV4dEJveCgpKTsKKyAgICAgICAgbV9saW5lQm94ZXMucmVtb3ZlKHMpOwogICAgICAgICBzLT5k
ZXN0cm95KHJlbmRlckFyZW5hKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTg0NSwy
MyArMTczNSw2IEBAIGJvb2wgUmVuZGVyVGV4dDo6Y29tcHV0ZUNhblVzZVNpbXBsZUZvbnQKICAg
ICByZXR1cm4gRm9udDo6Y2hhcmFjdGVyUmFuZ2VDb2RlUGF0aChjaGFyYWN0ZXJzKCksIGxlbmd0
aCgpKSA9PSBGb250OjpTaW1wbGU7CiB9CiAKLSNpZm5kZWYgTkRFQlVHCi0KLXZvaWQgUmVuZGVy
VGV4dDo6Y2hlY2tDb25zaXN0ZW5jeSgpIGNvbnN0Ci17Ci0jaWZkZWYgQ0hFQ0tfQ09OU0lTVEVO
Q1kKLSAgICBjb25zdCBJbmxpbmVUZXh0Qm94KiBwcmV2ID0gMDsKLSAgICBmb3IgKGNvbnN0IElu
bGluZVRleHRCb3gqIGNoaWxkID0gbV9maXJzdFRleHRCb3g7IGNoaWxkICE9IDA7IGNoaWxkID0g
Y2hpbGQtPm5leHRUZXh0Qm94KCkpIHsKLSAgICAgICAgQVNTRVJUKGNoaWxkLT5yZW5kZXJlcigp
ID09IHRoaXMpOwotICAgICAgICBBU1NFUlQoY2hpbGQtPnByZXZUZXh0Qm94KCkgPT0gcHJldik7
Ci0gICAgICAgIHByZXYgPSBjaGlsZDsKLSAgICB9Ci0gICAgQVNTRVJUKHByZXYgPT0gbV9sYXN0
VGV4dEJveCk7Ci0jZW5kaWYKLX0KLQotI2VuZGlmCi0KIHZvaWQgUmVuZGVyVGV4dDo6bW9tZW50
YXJpbHlSZXZlYWxMYXN0VHlwZWRDaGFyYWN0ZXIodW5zaWduZWQgbGFzdFR5cGVkQ2hhcmFjdGVy
T2Zmc2V0KQogewogICAgIGlmICghZ1NlY3VyZVRleHRUaW1lcnMpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUZXh0LmgJKHJldmlzaW9uIDE1NzMzOSkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDYgKzI0LDcg
QEAKICNkZWZpbmUgUmVuZGVyVGV4dF9oCiAKICNpbmNsdWRlICJSZW5kZXJFbGVtZW50LmgiCisj
aW5jbHVkZSAiUmVuZGVyVGV4dExpbmVCb3hlcy5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTUxLDE0ICs1MiwxNCBAQCBwdWJsaWM6CiAKICAg
ICB2aXJ0dWFsIFN0cmluZyBvcmlnaW5hbFRleHQoKSBjb25zdDsKIAotICAgIHZvaWQgZXh0cmFj
dFRleHRCb3goSW5saW5lVGV4dEJveCopOwotICAgIHZvaWQgYXR0YWNoVGV4dEJveChJbmxpbmVU
ZXh0Qm94Kik7Ci0gICAgdm9pZCByZW1vdmVUZXh0Qm94KElubGluZVRleHRCb3gqKTsKKyAgICB2
b2lkIGV4dHJhY3RUZXh0Qm94KElubGluZVRleHRCb3gqIGJveCkgeyBtX2xpbmVCb3hlcy5leHRy
YWN0KGJveCk7IH0KKyAgICB2b2lkIGF0dGFjaFRleHRCb3goSW5saW5lVGV4dEJveCogYm94KSB7
IG1fbGluZUJveGVzLmF0dGFjaChib3gpOyB9CisgICAgdm9pZCByZW1vdmVUZXh0Qm94KElubGlu
ZVRleHRCb3gqIGJveCkgeyBtX2xpbmVCb3hlcy5yZW1vdmUoYm94KTsgfQogCiAgICAgU3RyaW5n
SW1wbCogdGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dC5pbXBsKCk7IH0KICAgICBTdHJpbmcg
dGV4dFdpdGhvdXRDb252ZXJ0aW5nQmFja3NsYXNoVG9ZZW5TeW1ib2woKSBjb25zdDsKIAotICAg
IElubGluZVRleHRCb3gqIGNyZWF0ZUlubGluZVRleHRCb3goKTsKKyAgICBJbmxpbmVUZXh0Qm94
KiBjcmVhdGVJbmxpbmVUZXh0Qm94KCkgeyByZXR1cm4gbV9saW5lQm94ZXMuY3JlYXRlQW5kQXBw
ZW5kSW5saW5lVGV4dEJveCgqdGhpcyk7IH0KICAgICB2b2lkIGRpcnR5TGluZUJveGVzKGJvb2wg
ZnVsbExheW91dCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50
UmVjdD4mLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQpIGNvbnN0IE9WRVJS
SURFIEZJTkFMOwpAQCAtMTE2LDggKzExNyw4IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgTGF5
b3V0UmVjdCBjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChjb25zdCBSZW5kZXJMYXllck1v
ZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyKSBjb25zdCBPVkVSUklERSBGSU5BTDsKIAotICAg
IElubGluZVRleHRCb3gqIGZpcnN0VGV4dEJveCgpIGNvbnN0IHsgcmV0dXJuIG1fZmlyc3RUZXh0
Qm94OyB9Ci0gICAgSW5saW5lVGV4dEJveCogbGFzdFRleHRCb3goKSBjb25zdCB7IHJldHVybiBt
X2xhc3RUZXh0Qm94OyB9CisgICAgSW5saW5lVGV4dEJveCogZmlyc3RUZXh0Qm94KCkgY29uc3Qg
eyByZXR1cm4gbV9saW5lQm94ZXMuZmlyc3QoKTsgfQorICAgIElubGluZVRleHRCb3gqIGxhc3RU
ZXh0Qm94KCkgY29uc3QgeyByZXR1cm4gbV9saW5lQm94ZXMubGFzdCgpOyB9CiAKICAgICB2aXJ0
dWFsIGludCBjYXJldE1pbk9mZnNldCgpIGNvbnN0IE9WRVJSSURFOwogICAgIHZpcnR1YWwgaW50
IGNhcmV0TWF4T2Zmc2V0KCkgY29uc3QgT1ZFUlJJREU7CkBAIC0xMzIsNyArMTMzLDcgQEAgcHVi
bGljOgogICAgIGJvb2wgaXNTZWN1cmUoKSBjb25zdCB7IHJldHVybiBzdHlsZSgpLT50ZXh0U2Vj
dXJpdHkoKSAhPSBUU05PTkU7IH0KICAgICB2b2lkIG1vbWVudGFyaWx5UmV2ZWFsTGFzdFR5cGVk
Q2hhcmFjdGVyKHVuc2lnbmVkIGxhc3RUeXBlZENoYXJhY3Rlck9mZnNldCk7CiAKLSAgICBJbmxp
bmVUZXh0Qm94KiBmaW5kTmV4dElubGluZVRleHRCb3goaW50IG9mZnNldCwgaW50JiBwb3MpIGNv
bnN0OworICAgIElubGluZVRleHRCb3gqIGZpbmROZXh0SW5saW5lVGV4dEJveChpbnQgb2Zmc2V0
LCBpbnQmIHBvcykgY29uc3QgeyByZXR1cm4gbV9saW5lQm94ZXMuZmluZE5leHQob2Zmc2V0LCBw
b3MpOyB9CiAKICAgICB2b2lkIGNoZWNrQ29uc2lzdGVuY3koKSBjb25zdDsKIApAQCAtMTQ1LDYg
KzE0Niw4IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBzdHlsZURpZENoYW5nZShTdHls
ZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSk7CiAKKyAgICB2aXJ0dWFs
IElubGluZVRleHRCb3gqIGNyZWF0ZVRleHRCb3goKTsgLy8gU3ViY2xhc3NlZCBieSBSZW5kZXJT
VkdJbmxpbmVUZXh0LgorCiAjaWYgRU5BQkxFKElPU19URVhUX0FVVE9TSVpJTkcpCiAgICAgZmxv
YXQgY2FuZGlkYXRlQ29tcHV0ZWRUZXh0U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FuZGlkYXRl
Q29tcHV0ZWRUZXh0U2l6ZTsgfQogICAgIHZvaWQgc2V0Q2FuZGlkYXRlQ29tcHV0ZWRUZXh0U2l6
ZShmbG9hdCBzKSB7IG1fY2FuZGlkYXRlQ29tcHV0ZWRUZXh0U2l6ZSA9IHM7IH0KQEAgLTE1Niw4
ICsxNTksNiBAQCBwcm90ZWN0ZWQ6CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0VGV4dEludGVybmFs
KGNvbnN0IFN0cmluZyYpOwogICAgIHZpcnR1YWwgVUNoYXIgcHJldmlvdXNDaGFyYWN0ZXIoKSBj
b25zdDsKLSAgICAKLSAgICB2aXJ0dWFsIElubGluZVRleHRCb3gqIGNyZWF0ZVRleHRCb3goKTsg
Ly8gU3ViY2xhc3NlZCBieSBTVkcuCiAKIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGNhbkhh
dmVDaGlsZHJlbigpIGNvbnN0IE9WRVJSSURFIEZJTkFMIHsgcmV0dXJuIGZhbHNlOyB9CkBAIC0x
NzMsNyArMTc0LDcgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChj
b25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0TG9jYXRp
b24mLCBjb25zdCBMYXlvdXRQb2ludCYsIEhpdFRlc3RBY3Rpb24pIE9WRVJSSURFIEZJTkFMIHsg
QVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBmYWxzZTsgfQogCi0gICAgdm9pZCBkZWxldGVU
ZXh0Qm94ZXMoKTsKKyAgICB2b2lkIGRlbGV0ZVRleHRCb3hlcygpIHsgbV9saW5lQm94ZXMuZGVs
ZXRlQWxsKCp0aGlzKTsgfQogICAgIGJvb2wgY29udGFpbnNPbmx5V2hpdGVzcGFjZSh1bnNpZ25l
ZCBmcm9tLCB1bnNpZ25lZCBsZW4pIGNvbnN0OwogICAgIGZsb2F0IHdpZHRoRnJvbUNhY2hlKGNv
bnN0IEZvbnQmLCBpbnQgc3RhcnQsIGludCBsZW4sIGZsb2F0IHhQb3MsIEhhc2hTZXQ8Y29uc3Qg
U2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyopIGNvbnN0Owog
ICAgIGJvb2wgaXNBbGxBU0NJSSgpIGNvbnN0IHsgcmV0dXJuIG1faXNBbGxBU0NJSTsgfQpAQCAt
MjEwLDggKzIxMSw3IEBAIHByaXZhdGU6CiAKICAgICBTdHJpbmcgbV90ZXh0OwogCi0gICAgSW5s
aW5lVGV4dEJveCogbV9maXJzdFRleHRCb3g7Ci0gICAgSW5saW5lVGV4dEJveCogbV9sYXN0VGV4
dEJveDsKKyAgICBSZW5kZXJUZXh0TGluZUJveGVzIG1fbGluZUJveGVzOwogfTsKIAogaW5saW5l
IFJlbmRlclRleHQmIHRvUmVuZGVyVGV4dChSZW5kZXJPYmplY3QmIG9iamVjdCkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0TGluZUJveGVzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dExpbmVCb3hlcy5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dExpbmVCb3hl
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVuZGVyVGV4dExpbmVCb3hlcy5oIgorCisjaW5j
bHVkZSAiSW5saW5lVGV4dEJveC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlbmRlclRl
eHRMaW5lQm94ZXM6OlJlbmRlclRleHRMaW5lQm94ZXMoKQorICAgIDogbV9maXJzdChudWxscHRy
KQorICAgICwgbV9sYXN0KG51bGxwdHIpCit7Cit9CisKK0lubGluZVRleHRCb3gqIFJlbmRlclRl
eHRMaW5lQm94ZXM6OmNyZWF0ZUFuZEFwcGVuZElubGluZVRleHRCb3goUmVuZGVyVGV4dCYgcmVu
ZGVyVGV4dCkKK3sKKyAgICBhdXRvIHRleHRCb3ggPSByZW5kZXJUZXh0LmNyZWF0ZVRleHRCb3go
KTsKKyAgICBpZiAoIW1fZmlyc3QpCisgICAgICAgIG1fZmlyc3QgPSBtX2xhc3QgPSB0ZXh0Qm94
OworICAgIGVsc2UgeworICAgICAgICBtX2xhc3QtPnNldE5leHRUZXh0Qm94KHRleHRCb3gpOwor
ICAgICAgICB0ZXh0Qm94LT5zZXRQcmV2aW91c1RleHRCb3gobV9sYXN0KTsKKyAgICAgICAgbV9s
YXN0ID0gdGV4dEJveDsKKyAgICB9CisgICAgdGV4dEJveC0+c2V0QmVoYXZlc0xpa2VUZXh0KHRy
dWUpOworICAgIHJldHVybiB0ZXh0Qm94OworfQorCit2b2lkIFJlbmRlclRleHRMaW5lQm94ZXM6
OmV4dHJhY3QoSW5saW5lVGV4dEJveCogYm94KQoreworICAgIGNoZWNrQ29uc2lzdGVuY3koKTsK
KworICAgIG1fbGFzdCA9IGJveC0+cHJldlRleHRCb3goKTsKKyAgICBpZiAoYm94ID09IG1fZmly
c3QpCisgICAgICAgIG1fZmlyc3QgPSAwOworICAgIGlmIChib3gtPnByZXZUZXh0Qm94KCkpCisg
ICAgICAgIGJveC0+cHJldlRleHRCb3goKS0+c2V0TmV4dFRleHRCb3goMCk7CisgICAgYm94LT5z
ZXRQcmV2aW91c1RleHRCb3goMCk7CisgICAgZm9yIChhdXRvIGN1cnJlbnQgPSBib3g7IGN1cnJl
bnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0VGV4dEJveCgpKQorICAgICAgICBjdXJyZW50LT5z
ZXRFeHRyYWN0ZWQoKTsKKworICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKK30KKwordm9pZCBSZW5k
ZXJUZXh0TGluZUJveGVzOjphdHRhY2goSW5saW5lVGV4dEJveCogYm94KQoreworICAgIGNoZWNr
Q29uc2lzdGVuY3koKTsKKworICAgIGlmIChtX2xhc3QpIHsKKyAgICAgICAgbV9sYXN0LT5zZXRO
ZXh0VGV4dEJveChib3gpOworICAgICAgICBib3gtPnNldFByZXZpb3VzVGV4dEJveChtX2xhc3Qp
OworICAgIH0gZWxzZQorICAgICAgICBtX2ZpcnN0ID0gYm94OworICAgIGF1dG8gbGFzdCA9IGJv
eDsKKyAgICBmb3IgKGF1dG8gY3VycmVudCA9IGJveDsgY3VycmVudDsgY3VycmVudCA9IGN1cnJl
bnQtPm5leHRUZXh0Qm94KCkpIHsKKyAgICAgICAgY3VycmVudC0+c2V0RXh0cmFjdGVkKGZhbHNl
KTsKKyAgICAgICAgbGFzdCA9IGN1cnJlbnQ7CisgICAgfQorICAgIG1fbGFzdCA9IGxhc3Q7CisK
KyAgICBjaGVja0NvbnNpc3RlbmN5KCk7Cit9CisKK3ZvaWQgUmVuZGVyVGV4dExpbmVCb3hlczo6
cmVtb3ZlKElubGluZVRleHRCb3gqIGJveCkKK3sKKyAgICBjaGVja0NvbnNpc3RlbmN5KCk7CisK
KyAgICBpZiAoYm94ID09IG1fZmlyc3QpCisgICAgICAgIG1fZmlyc3QgPSBib3gtPm5leHRUZXh0
Qm94KCk7CisgICAgaWYgKGJveCA9PSBtX2xhc3QpCisgICAgICAgIG1fbGFzdCA9IGJveC0+cHJl
dlRleHRCb3goKTsKKyAgICBpZiAoYm94LT5uZXh0VGV4dEJveCgpKQorICAgICAgICBib3gtPm5l
eHRUZXh0Qm94KCktPnNldFByZXZpb3VzVGV4dEJveChib3gtPnByZXZUZXh0Qm94KCkpOworICAg
IGlmIChib3gtPnByZXZUZXh0Qm94KCkpCisgICAgICAgIGJveC0+cHJldlRleHRCb3goKS0+c2V0
TmV4dFRleHRCb3goYm94LT5uZXh0VGV4dEJveCgpKTsKKworICAgIGNoZWNrQ29uc2lzdGVuY3ko
KTsKK30KKwordm9pZCBSZW5kZXJUZXh0TGluZUJveGVzOjpkZWxldGVBbGwoUmVuZGVyVGV4dCYg
cmVuZGVyZXIpCit7CisgICAgaWYgKCFtX2ZpcnN0KQorICAgICAgICByZXR1cm47CisgICAgUmVu
ZGVyQXJlbmEmIGFyZW5hID0gcmVuZGVyZXIucmVuZGVyQXJlbmEoKTsKKyAgICBJbmxpbmVUZXh0
Qm94KiBuZXh0OworICAgIGZvciAoYXV0byBjdXJyZW50ID0gbV9maXJzdDsgY3VycmVudDsgY3Vy
cmVudCA9IG5leHQpIHsKKyAgICAgICAgbmV4dCA9IGN1cnJlbnQtPm5leHRUZXh0Qm94KCk7Cisg
ICAgICAgIGN1cnJlbnQtPmRlc3Ryb3koYXJlbmEpOworICAgIH0KKyAgICBtX2ZpcnN0ID0gbV9s
YXN0ID0gMDsKK30KKworSW5saW5lVGV4dEJveCogUmVuZGVyVGV4dExpbmVCb3hlczo6ZmluZE5l
eHQoaW50IG9mZnNldCwgaW50JiBwb3MpIGNvbnN0Cit7CisgICAgaWYgKCFtX2ZpcnN0KQorICAg
ICAgICByZXR1cm4gMDsKKyAgICAvLyBGSVhNRTogVGhpcyBsb29rcyBidWdneS4gVGhlIGZ1bmN0
aW9uIGlzIG9ubHkgdXNlZCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLgorICAgIGF1dG8gY3VycmVu
dCA9IG1fZmlyc3Q7CisgICAgaW50IGN1cnJlbnRPZmZzZXQgPSBjdXJyZW50LT5sZW4oKTsKKyAg
ICB3aGlsZSAob2Zmc2V0ID4gY3VycmVudE9mZnNldCAmJiBjdXJyZW50LT5uZXh0VGV4dEJveCgp
KSB7CisgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0VGV4dEJveCgpOworICAgICAgICBj
dXJyZW50T2Zmc2V0ID0gY3VycmVudC0+c3RhcnQoKSArIGN1cnJlbnQtPmxlbigpOworICAgIH0K
KyAgICAvLyB3ZSBhcmUgbm93IGluIHRoZSBjb3JyZWN0IHRleHQgcnVuCisgICAgcG9zID0gKG9m
ZnNldCA+IGN1cnJlbnRPZmZzZXQgPyBjdXJyZW50LT5sZW4oKSA6IGN1cnJlbnQtPmxlbigpIC0g
KGN1cnJlbnRPZmZzZXQgLSBvZmZzZXQpICk7CisgICAgcmV0dXJuIGN1cnJlbnQ7Cit9CisKKyNp
ZiAhQVNTRVJUX0RJU0FCTEVECitSZW5kZXJUZXh0TGluZUJveGVzOjp+UmVuZGVyVGV4dExpbmVC
b3hlcygpCit7CisgICAgQVNTRVJUKCFtX2ZpcnN0KTsKKyAgICBBU1NFUlQoIW1fbGFzdCk7Cit9
CisKK3ZvaWQgUmVuZGVyVGV4dExpbmVCb3hlczo6Y2hlY2tDb25zaXN0ZW5jeSgpIGNvbnN0Cit7
CisjaWZkZWYgQ0hFQ0tfQ09OU0lTVEVOQ1kKKyAgICBjb25zdCBJbmxpbmVUZXh0Qm94KiBwcmV2
ID0gMDsKKyAgICBmb3IgKGF1dG8gY2hpbGQgPSBtX2ZpcnN0OyBjaGlsZDsgY2hpbGQgPSBjaGls
ZC0+bmV4dFRleHRCb3goKSkgeworICAgICAgICBBU1NFUlQoY2hpbGQtPnJlbmRlcmVyKCkgPT0g
dGhpcyk7CisgICAgICAgIEFTU0VSVChjaGlsZC0+cHJldlRleHRCb3goKSA9PSBwcmV2KTsKKyAg
ICAgICAgcHJldiA9IGNoaWxkOworICAgIH0KKyAgICBBU1NFUlQocHJldiA9PSBtX2xhc3QpOwor
I2VuZGlmCit9CisjZW5kaWYKKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRleHRMaW5lQm94ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGV4dExpbmVCb3hlcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRleHRMaW5lQm94ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBSZW5kZXJUZXh0TGluZUJveGVzX2gKKyNkZWZp
bmUgUmVuZGVyVGV4dExpbmVCb3hlc19oCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
SW5saW5lVGV4dEJveDsKK2NsYXNzIFJlbmRlclRleHQ7CisKK2NsYXNzIFJlbmRlclRleHRMaW5l
Qm94ZXMgeworcHVibGljOgorICAgIFJlbmRlclRleHRMaW5lQm94ZXMoKTsKKworICAgIElubGlu
ZVRleHRCb3gqIGZpcnN0KCkgY29uc3QgeyByZXR1cm4gbV9maXJzdDsgfQorICAgIElubGluZVRl
eHRCb3gqIGxhc3QoKSBjb25zdCB7IHJldHVybiBtX2xhc3Q7IH0KKworICAgIElubGluZVRleHRC
b3gqIGNyZWF0ZUFuZEFwcGVuZElubGluZVRleHRCb3goUmVuZGVyVGV4dCYpOworCisgICAgdm9p
ZCBleHRyYWN0KElubGluZVRleHRCb3gqKTsKKyAgICB2b2lkIGF0dGFjaChJbmxpbmVUZXh0Qm94
Kik7CisgICAgdm9pZCByZW1vdmUoSW5saW5lVGV4dEJveCopOworICAgIHZvaWQgZGVsZXRlQWxs
KFJlbmRlclRleHQmKTsKKworICAgIElubGluZVRleHRCb3gqIGZpbmROZXh0KGludCBvZmZzZXQs
IGludCYgcG9zKSBjb25zdDsKKworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICB+UmVuZGVyVGV4
dExpbmVCb3hlcygpOworICAgIHZvaWQgY2hlY2tDb25zaXN0ZW5jeSgpIGNvbnN0OworI2Vsc2UK
KyAgICB2b2lkIGNoZWNrQ29uc2lzdGVuY3koKSBjb25zdCB7IH0KKyNlbmRpZgorCitwcml2YXRl
OgorICAgIElubGluZVRleHRCb3gqIG1fZmlyc3Q7CisgICAgSW5saW5lVGV4dEJveCogbV9sYXN0
OworfTsKKworfQorCisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlcmluZ0FsbEluT25lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyaW5nQWxsSW5PbmUuY3BwCShyZXZpc2lvbiAxNTczMzkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyaW5nQWxsSW5PbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDgsNiArMTA4LDcgQEAKICNpbmNsdWRlICJSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5jcHAi
CiAjaW5jbHVkZSAiUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcCIKICNpbmNsdWRlICJS
ZW5kZXJUZXh0RnJhZ21lbnQuY3BwIgorI2luY2x1ZGUgIlJlbmRlclRleHRMaW5lQm94ZXMuY3Bw
IgogI2luY2x1ZGUgIlJlbmRlclRleHRUcmFja0N1ZS5jcHAiCiAjaW5jbHVkZSAiUmVuZGVyVGhl
bWUuY3BwIgogI2lmIFBMQVRGT1JNKFdJTikK
</data>
<flag name="review"
          id="236543"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
      

    </bug>

</bugzilla>