<?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>133292</bug_id>
          
          <creation_ts>2014-05-26 12:07:18 -0700</creation_ts>
          <short_desc>Class name matching should use ASCII case-insensitive matching, not Unicode case folding</short_desc>
          <delta_ts>2014-05-28 10:10:31 -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>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>kangil.han</cc>
    
    <cc>ossy</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1011814</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-05-26 12:07:18 -0700</bug_when>
    <thetext>Class name matching should use ASCII case-insensitive matching, not Unicode case folding</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1011817</commentid>
    <comment_count>1</comment_count>
      <attachid>232091</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-05-26 12:42:36 -0700</bug_when>
    <thetext>Created attachment 232091
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1011818</commentid>
    <comment_count>2</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-05-26 12:46:39 -0700</bug_when>
    <thetext>This same kind of mistake seems common in other parts of the DOM. I’ll have to look at various places that call lower, equalIgnoringCase, and equalPossiblyIgnoringCase to find these mistakes, build more test cases, and then use this new function in more places. I think we’ll also need to add an equalASCIICaseInsensitive function to replace equalIgnoringCase in most cases. I’m taking the terminology from &lt;http://dom.spec.whatwg.org/#ascii-case-insensitive&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1011820</commentid>
    <comment_count>3</comment_count>
      <attachid>232091</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2014-05-26 12:53:35 -0700</bug_when>
    <thetext>Comment on attachment 232091
Patch

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

&gt; Source/WebCore/dom/SpaceSplitString.cpp:197
&gt; +    if (SpaceSplitStringData* data = table.get(keyString))
&gt; +        return data;

Can you .add nullptr here instead and avoid the other hash lookup below?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1011821</commentid>
    <comment_count>4</comment_count>
      <attachid>232091</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-05-26 12:55:24 -0700</bug_when>
    <thetext>Comment on attachment 232091
Patch

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

&gt;&gt; Source/WebCore/dom/SpaceSplitString.cpp:197
&gt;&gt; +        return data;
&gt; 
&gt; Can you .add nullptr here instead and avoid the other hash lookup below?

I can’t because the string might have no tokens in it. In that case, we do not add anything to do the table.

This is actually a problem. It means that if we run into a string with no tokens repeatedly, we do hash table lookups and tokenization every time a SpaceSplitString is created for it!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1011822</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-05-26 12:58:56 -0700</bug_when>
    <thetext>Committed r169358: &lt;http://trac.webkit.org/changeset/169358&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1011827</commentid>
    <comment_count>6</comment_count>
      <attachid>232091</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-05-26 13:25:43 -0700</bug_when>
    <thetext>Comment on attachment 232091
Patch

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

Rename shouldFoldCase -&gt; convertToASCIILowercase as the argument of SpaceSplitString::set()?

&gt; LayoutTests/ChangeLog:11
&gt; +        * fast/dom/getElementsByClassName/ASCII-case-insensitive-expected.txt: Added.
&gt; +        * fast/dom/getElementsByClassName/ASCII-case-insensitive.html: Added.
&gt; +        * fast/dom/getElementsByClassName/case-sensitive-expected.txt: Added.
&gt; +        * fast/dom/getElementsByClassName/case-sensitive.html: Added.

Also test that DOMSettableTokenList is no affected?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1011924</commentid>
    <comment_count>7</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2014-05-27 03:07:44 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Committed r169358: &lt;http://trac.webkit.org/changeset/169358&gt;

It broke the Apple Windows build:

     1&gt;WebKit.exp : error LNK2001: unresolved external symbol &quot;private: static class WTF::PassRefPtr&lt;class WTF::StringImpl&gt; __cdecl WTF::AtomicString::addSlowCase(class WTF::StringImpl *)&quot; (?addSlowCase@AtomicString@WTF@@CA?AV?$PassRefPtr@VStringImpl@WTF@@@2@PAVStringImpl@2@@Z)
     1&gt;C:\cygwin\home\buildbot\slave\win-release\build\WebKitBuild\Release\bin32\WebKit.dll : fatal error LNK1120: 1 unresolved externals
     1&gt;Done Building Project &quot;C:\cygwin\home\buildbot\slave\win-release\build\Source\WebKit\WebKit.vcxproj\WebKit\WebKit.vcxproj&quot; (Build target(s)) -- FAILED.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1011926</commentid>
    <comment_count>8</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2014-05-27 03:26:09 -0700</bug_when>
    <thetext>Fix landed in http://trac.webkit.org/changeset/169376</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1012058</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-05-27 13:27:33 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Also test that DOMSettableTokenList is no affected?

Sure, I’ll add a test.

I’ve learned that anywhere HTML specifies case-insensitive matching, it’s ASCII case-insensitive matching. So I will be following this patch up with changes to lots of other places in HTML where we don’t need to do general case folding, but rather simply ASCII case folding.

I have started work on some patches for this.

By the way, one place this patch missed was the CSS selector compiler matching of class names. My larger patch will cover that too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1012099</commentid>
    <comment_count>10</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-05-27 17:36:21 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; By the way, one place this patch missed was the CSS selector compiler matching of class names. My larger patch will cover that too.

I don&apos;t think className matching is ever case insensitive.

All the attribute matching code can be case insensitive and it is probably wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1012243</commentid>
    <comment_count>11</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-05-28 10:10:31 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; I don&apos;t think className matching is ever case insensitive.

It’s amazing how much conflicting information there is about this out on the web. I had real trouble finding anything definitive in either CSS or HTML specifications about it.

&gt; All the attribute matching code can be case insensitive and it is probably wrong.

I guess that’s why we need test cases.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>232091</attachid>
            <date>2014-05-26 12:42:36 -0700</date>
            <delta_ts>2014-05-26 13:25:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-133292-20140526124229.patch</filename>
            <type>text/plain</type>
            <size>32637</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY5MzEzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGJlMTZjMzE2NGJkMmJkY2ZkYWM2ZTJh
NDA4MmRjNmM0NWNkNDVhYTQuLmU5YTcyNmNkYmIxNTViMzJkNDYzYmU4NTViYTIyY2IxN2I4ODk5
MDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTQtMDUtMjYgIERhcmluIEFkbGVyICA8ZGFyaW5A
YXBwbGUuY29tPgorCisgICAgICAgIENsYXNzIG5hbWUgbWF0Y2hpbmcgc2hvdWxkIHVzZSBBU0NJ
SSBjYXNlLWluc2Vuc2l0aXZlIG1hdGNoaW5nLCBub3QgVW5pY29kZSBjYXNlIGZvbGRpbmcKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMzI5MgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd3RmL3RleHQv
QXRvbWljU3RyaW5nLmNwcDoKKyAgICAgICAgKFdURjo6QXRvbWljU3RyaW5nOjphZGRTbG93Q2Fz
ZSk6IENoYW5nZSB0byB0YWtlIHJlZmVyZW5jZXMgaW5zdGVhZCBvZiBwb2ludGVycyBzaW5jZSB0
aGVzZQorICAgICAgICBhcmd1bWVudHMgY2FuIG5ldmVyIGJlIG51bGwuCisgICAgICAgIChXVEY6
OkF0b21pY1N0cmluZzo6bG93ZXIpOiBSZWFycmFuZ2VkIHNsaWdodGx5IHRvIHVzZSBQYXNzUmVm
IGluIGEgbW9yZSBlZmZpY2llbnQgYnV0CisgICAgICAgIHNsaWdodGx5IHVnbGllciB3YXkuCisg
ICAgICAgIChXVEY6OkF0b21pY1N0cmluZzo6Y29udmVydFRvQVNDSUlMb3dlcmNhc2UpOiBBZGRl
ZC4KKyAgICAgICAgKiB3dGYvdGV4dC9BdG9taWNTdHJpbmcuaDogVXBkYXRlZCBmb3IgYWJvdmUg
Y2hhbmdlcy4KKworICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwOgorICAgICAgICAo
V1RGOjpTdHJpbmdJbXBsOjpjb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSk6IEFkZGVkLgorICAgICAg
ICAqIHd0Zi90ZXh0L1N0cmluZ0ltcGwuaDogVXBkYXRlZCBmb3IgYWJvdmUuCisKKyAgICAgICAg
KiB3dGYvdGV4dC9XVEZTdHJpbmcuY3BwOgorICAgICAgICAoV1RGOjpTdHJpbmc6OmNvbnZlcnRU
b0FTQ0lJTG93ZXJjYXNlKTogQWRkZWQuCisgICAgICAgICogd3RmL3RleHQvV1RGU3RyaW5nLmg6
IFVwZGF0ZWQgZm9yIGFib3ZlLgorCiAyMDE0LTA1LTIyICBaYW4gRG9iZXJzZWsgIDx6ZG9iZXJz
ZWtAaWdhbGlhLmNvbT4KIAogICAgICAgICBBZGQgdGhlIHBhcnRpYWwgc3BlY2lhbGl6YXRpb24g
Zm9yIFZlY3RvclRyYWl0czxzdGQ6OnVuaXF1ZV9wdHI8UD4+CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDg3Yzk4
N2E2MzVlNzNhZDhlYWJiOTRmZjA2NTI2ODFhZDU4YzU3Yi4uODhiYjBmMTEzMzA3M2RkYWQ4NGI2
YTY1YTJkNmNjMWQ0YzM1YTRiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDE0LTA1
LTI2ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBDbGFzcyBuYW1l
IG1hdGNoaW5nIHNob3VsZCB1c2UgQVNDSUkgY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaGluZywgbm90
IFVuaWNvZGUgY2FzZSBmb2xkaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMzMyOTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBUZXN0czogZmFzdC9kb20vZ2V0RWxlbWVudHNCeUNsYXNzTmFtZS9BU0NJ
SS1jYXNlLWluc2Vuc2l0aXZlLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvZG9tL2dldEVsZW1l
bnRzQnlDbGFzc05hbWUvY2FzZS1zZW5zaXRpdmUuaHRtbAorCisgICAgICAgICogZG9tL1NwYWNl
U3BsaXRTdHJpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aGFzTm9uQVNDSUlPclVwcGVyKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnRva2VuaXplU3BhY2VTcGxpdFN0cmluZyk6IFVz
ZSBhIGZvciBsb29wIGluc3RlYWQgb2Ygd2hpbGUuCisgICAgICAgIChXZWJDb3JlOjpzcGFjZVNw
bGl0U3RyaW5nVGFibGUpOiBSZW5hbWVkIGZyb20gc2hhcmVkRGF0YU1hcDsgdGhlIG5ldyBuYW1l
IGlzIHN1cHBvc2VkCisgICAgICAgIHRvIGhlbHAgdXMgc2VlIHRoZSBhbmFsb2d5IHdpdGggdGhl
IGF0b21pYyBzdHJpbmcgdGFibGUuCisgICAgICAgIChXZWJDb3JlOjpTcGFjZVNwbGl0U3RyaW5n
OjpzZXQpOiBSZW1vdmVkIHVubmVlZGVkIHNwZWNpYWwgY2FzZSBmb3IgbnVsbCBhbmQgcHJlZmxp
Z2h0CisgICAgICAgIHNpbmNlIEF0b21pY1N0cmluZzo6Y29udmVydFRvQVNDSUlMb3dlcmNhc2Ug
bm93IGhhbmRsZXMgYm90aCBvZiB0aG9zZS4gQ2hhbmdlZCB0byBjYWxsCisgICAgICAgIGNvbnZl
cnRUb0FTQ0lJTG93ZXJjYXNlIGluc3RlYWQgb2YgZm9sZENhc2UsIHNpbmNlIHdlIGRvbid0IHdh
bnQgdG8gZm9sZCBub24tQVNDSUkuCisgICAgICAgIChXZWJDb3JlOjpTcGFjZVNwbGl0U3RyaW5n
OjpzcGFjZVNwbGl0U3RyaW5nQ29udGFpbnNWYWx1ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6U3BhY2VTcGxpdFN0cmluZ0RhdGE6OmNyZWF0ZSk6IE1hcmtlZCB0aGlzIGlubGluZSBzaW5j
ZSBpdCdzIG9ubHkgY2FsbGVkIGluCisgICAgICAgIG9uZSBwbGFjZSBhbmQgdGhhdCBwbGFjZSBp
cyBpbiB0aGlzIGZpbGUuIEFsc28gdXNlZCBhdXRvIGEgYml0IGFuZCB1c2VkIGdldCBpbnN0ZWFk
IG9mCisgICAgICAgIGZpbmQgc2luY2UgdGhlIHZhbHVlIHR5cGUgaXMgYSBzaW1wbGUgcG9pbnRl
ci4KKyAgICAgICAgKFdlYkNvcmU6OlNwYWNlU3BsaXRTdHJpbmdEYXRhOjpkZXN0cm95KTogUmVt
b3ZlZCB1bm5lZWRlZCBjaGVjayBmb3IgbnVsbC4gV2UgbmV2ZXIKKyAgICAgICAgY3JlYXRlIGFu
eSBTcGFjZVNwbGl0U3RyaW5nRGF0YSB3aXRoIGVtcHR5IHN0cmluZ3MsIGFuZCBhIG51bGwgaXMg
YSBraW5kIG9mIGVtcHR5IHN0cmluZy4KKworICAgICAgICAqIGRvbS9TcGFjZVNwbGl0U3RyaW5n
Lmg6IFJlbW92ZWQgc29tZSB1bm5lZWRlZCBpbmNsdWRlcyBhbmQgc29tZSB1bm5lZWRlZCB1c2Vz
IG9mIHRoZQorICAgICAgICBpbmxpbmUga2V5d29yZC4gQ2hhbmdlZCB0eXBlcyBmcm9tIHNpemVf
dCB0byB1bnNpZ25lZCBpbiBhIGNvdXBsZSBwbGFjZXM7IHdlIGhhZCBhIG1peAorICAgICAgICBv
ZiB0aGUgdHlwZXMgYW5kIHRoZXJlIHdhcyBubyByZWFzb24gdG8gdXNlIHNpemVfdCB0aGVyZS4K
KwogMjAxNC0wNS0yMyAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAog
ICAgICAgICBSZW5hbWUgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUncyBtX3Njcm9sbFBvc2l0
aW9uIHRvIG1ha2UgaXQgY2xlYXIgdGhhdCBpdCdzIHRoZSB2YWx1ZSBjb21taXR0ZWQgZnJvbSB0
aGUgc3RhdGUgdHJlZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9BdG9taWNTdHJp
bmcuY3BwIGIvU291cmNlL1dURi93dGYvdGV4dC9BdG9taWNTdHJpbmcuY3BwCmluZGV4IDliNDc4
MzlmMmM2NzVhODE4ZTllM2Q3ZjE5ZGZmODA4MWNjMmNmNGQuLjZkYjhkZjIwN2ZmNDhmMmRhYzA5
NzE0OTlhMTcxNDk5YmQ1Yzk3MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRv
bWljU3RyaW5nLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21pY1N0cmluZy5jcHAK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAy
MDA3LCAyMDA4LCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwNC0yMDA4LCAyMDEzLTIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEwIFBhdHJpY2sgR2Fuc3RlcmVyIDxwYXJvZ2FAcGFy
b2dhLmNvbT4KICAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKQEAgLTM5NiwzNyArMzk2LDM3IEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4g
QXRvbWljU3RyaW5nOjphZGRGcm9tTGl0ZXJhbERhdGEoY29uc3QgY2hhciogY2hhcmFjdGVycywK
ICAgICByZXR1cm4gYWRkVG9TdHJpbmdUYWJsZTxDaGFyQnVmZmVyLCBDaGFyQnVmZmVyRnJvbUxp
dGVyYWxEYXRhVHJhbnNsYXRvcj4oYnVmZmVyKTsKIH0KIAotUGFzc1JlZlB0cjxTdHJpbmdJbXBs
PiBBdG9taWNTdHJpbmc6OmFkZFNsb3dDYXNlKFN0cmluZ0ltcGwqIHN0cmluZykKK1Bhc3NSZWZQ
dHI8U3RyaW5nSW1wbD4gQXRvbWljU3RyaW5nOjphZGRTbG93Q2FzZShTdHJpbmdJbXBsJiBzdHJp
bmcpCiB7Ci0gICAgaWYgKCFzdHJpbmctPmxlbmd0aCgpKQorICAgIGlmICghc3RyaW5nLmxlbmd0
aCgpKQogICAgICAgICByZXR1cm4gU3RyaW5nSW1wbDo6ZW1wdHkoKTsKIAotICAgIEFTU0VSVF9X
SVRIX01FU1NBR0UoIXN0cmluZy0+aXNBdG9taWMoKSwgIkF0b21pY1N0cmluZyBzaG91bGQgbm90
IGhpdCB0aGUgc2xvdyBjYXNlIGlmIHRoZSBzdHJpbmcgaXMgYWxyZWFkeSBhdG9taWMuIik7Cisg
ICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghc3RyaW5nLmlzQXRvbWljKCksICJBdG9taWNTdHJpbmcg
c2hvdWxkIG5vdCBoaXQgdGhlIHNsb3cgY2FzZSBpZiB0aGUgc3RyaW5nIGlzIGFscmVhZHkgYXRv
bWljLiIpOwogCiAgICAgQXRvbWljU3RyaW5nVGFibGVMb2NrZXIgbG9ja2VyOwotICAgIEhhc2hT
ZXQ8U3RyaW5nSW1wbCo+OjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0gc3RyaW5nVGFibGUoKS5hZGQo
c3RyaW5nKTsKKyAgICBhdXRvIGFkZFJlc3VsdCA9IHN0cmluZ1RhYmxlKCkuYWRkKCZzdHJpbmcp
OwogCiAgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAgIEFTU0VSVCgqYWRk
UmVzdWx0Lml0ZXJhdG9yID09IHN0cmluZyk7Ci0gICAgICAgIHN0cmluZy0+c2V0SXNBdG9taWMo
dHJ1ZSk7CisgICAgICAgIEFTU0VSVCgqYWRkUmVzdWx0Lml0ZXJhdG9yID09ICZzdHJpbmcpOwor
ICAgICAgICBzdHJpbmcuc2V0SXNBdG9taWModHJ1ZSk7CiAgICAgfQogCiAgICAgcmV0dXJuICph
ZGRSZXN1bHQuaXRlcmF0b3I7CiB9CiAKLVBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gQXRvbWljU3Ry
aW5nOjphZGRTbG93Q2FzZShBdG9taWNTdHJpbmdUYWJsZSogc3RyaW5nVGFibGUsIFN0cmluZ0lt
cGwqIHN0cmluZykKK1Bhc3NSZWZQdHI8U3RyaW5nSW1wbD4gQXRvbWljU3RyaW5nOjphZGRTbG93
Q2FzZShBdG9taWNTdHJpbmdUYWJsZSYgc3RyaW5nVGFibGUsIFN0cmluZ0ltcGwmIHN0cmluZykK
IHsKLSAgICBpZiAoIXN0cmluZy0+bGVuZ3RoKCkpCisgICAgaWYgKCFzdHJpbmcubGVuZ3RoKCkp
CiAgICAgICAgIHJldHVybiBTdHJpbmdJbXBsOjplbXB0eSgpOwogCi0gICAgQVNTRVJUX1dJVEhf
TUVTU0FHRSghc3RyaW5nLT5pc0F0b21pYygpLCAiQXRvbWljU3RyaW5nIHNob3VsZCBub3QgaGl0
IHRoZSBzbG93IGNhc2UgaWYgdGhlIHN0cmluZyBpcyBhbHJlYWR5IGF0b21pYy4iKTsKKyAgICBB
U1NFUlRfV0lUSF9NRVNTQUdFKCFzdHJpbmcuaXNBdG9taWMoKSwgIkF0b21pY1N0cmluZyBzaG91
bGQgbm90IGhpdCB0aGUgc2xvdyBjYXNlIGlmIHRoZSBzdHJpbmcgaXMgYWxyZWFkeSBhdG9taWMu
Iik7CiAKICAgICBBdG9taWNTdHJpbmdUYWJsZUxvY2tlciBsb2NrZXI7Ci0gICAgSGFzaFNldDxT
dHJpbmdJbXBsKj46OkFkZFJlc3VsdCBhZGRSZXN1bHQgPSBzdHJpbmdUYWJsZS0+dGFibGUoKS5h
ZGQoc3RyaW5nKTsKKyAgICBhdXRvIGFkZFJlc3VsdCA9IHN0cmluZ1RhYmxlLnRhYmxlKCkuYWRk
KCZzdHJpbmcpOwogCiAgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAgIEFT
U0VSVCgqYWRkUmVzdWx0Lml0ZXJhdG9yID09IHN0cmluZyk7Ci0gICAgICAgIHN0cmluZy0+c2V0
SXNBdG9taWModHJ1ZSk7CisgICAgICAgIEFTU0VSVCgqYWRkUmVzdWx0Lml0ZXJhdG9yID09ICZz
dHJpbmcpOworICAgICAgICBzdHJpbmcuc2V0SXNBdG9taWModHJ1ZSk7CiAgICAgfQogCiAgICAg
cmV0dXJuICphZGRSZXN1bHQuaXRlcmF0b3I7CkBAIC00NzQsMTMgKzQ3NCw1OSBAQCBBdG9taWNT
dHJpbmcgQXRvbWljU3RyaW5nOjpsb3dlcigpIGNvbnN0CiAgICAgaWYgKFVOTElLRUxZKCFpbXBs
KSkKICAgICAgICAgcmV0dXJuIEF0b21pY1N0cmluZygpOwogCi0gICAgUmVmUHRyPFN0cmluZ0lt
cGw+IGxvd2VySW1wbCA9IGltcGwtPmxvd2VyKCk7Ci0gICAgQXRvbWljU3RyaW5nIHJldHVyblZh
bHVlOwotICAgIGlmIChMSUtFTFkobG93ZXJJbXBsID09IGltcGwpKQotICAgICAgICByZXR1cm5W
YWx1ZS5tX3N0cmluZyA9IGxvd2VySW1wbC5yZWxlYXNlKCk7Ci0gICAgZWxzZQotICAgICAgICBy
ZXR1cm5WYWx1ZS5tX3N0cmluZyA9IGFkZFNsb3dDYXNlKGxvd2VySW1wbC5nZXQoKSk7Ci0gICAg
cmV0dXJuIHJldHVyblZhbHVlOworICAgIFBhc3NSZWY8U3RyaW5nSW1wbD4gbG93ZXJjYXNlZFN0
cmluZyA9IGltcGwtPmxvd2VyKCk7CisgICAgaWYgKExJS0VMWSgmbG93ZXJjYXNlZFN0cmluZy5n
ZXQoKSA9PSBpbXBsKSkgeworICAgICAgICBsb3dlcmNhc2VkU3RyaW5nLmRyb3BSZWYoKTsKKyAg
ICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIEF0b21pY1N0cmluZyByZXN1bHQ7Cisg
ICAgcmVzdWx0Lm1fc3RyaW5nID0gYWRkU2xvd0Nhc2UobG93ZXJjYXNlZFN0cmluZy5nZXQoKSk7
CisgICAgbG93ZXJjYXNlZFN0cmluZy5kcm9wUmVmKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KworQXRvbWljU3RyaW5nIEF0b21pY1N0cmluZzo6Y29udmVydFRvQVNDSUlMb3dlcmNhc2UoKSBj
b25zdAoreworICAgIFN0cmluZ0ltcGwqIGltcGwgPSB0aGlzLT5pbXBsKCk7CisgICAgaWYgKFVO
TElLRUxZKCFpbXBsKSkKKyAgICAgICAgcmV0dXJuIEF0b21pY1N0cmluZygpOworCisgICAgLy8g
Rm9sZCBzaG9ydCBzdHJpbmdzIHdpdGhvdXQgYWxsb2NhdGluZyBhIG5ldyBTdHJpbmdJbXBsLCBz
aW5jZQorICAgIC8vIHRoZXJlJ3MgYSBnb29kIGNoYW5jZSB0aGVzZSBzdHJpbmdzIGFyZSBhbHJl
YWR5IGluIHRoZSBhdG9taWMKKyAgICAvLyBzdHJpbmcgdGFibGUgYW5kIHNvIG5vIG1lbW9yeSBh
bGxvY2F0aW9uIHdpbGwgYmUgcmVxdWlyZWQuCisgICAgdW5zaWduZWQgbGVuZ3RoOworICAgIGNv
bnN0IHVuc2lnbmVkIGxvY2FsQnVmZmVyU2l6ZSA9IDEwMDsKKyAgICBpZiAoaW1wbC0+aXM4Qml0
KCkgJiYgKGxlbmd0aCA9IGltcGwtPmxlbmd0aCgpKSA8PSBsb2NhbEJ1ZmZlclNpemUpIHsKKyAg
ICAgICAgY29uc3QgTENoYXIqIGNoYXJhY3RlcnMgPSBpbXBsLT5jaGFyYWN0ZXJzOCgpOworICAg
ICAgICB1bnNpZ25lZCBmYWlsaW5nSW5kZXg7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICAgICAgTENoYXIgY2hhcmFjdGVyID0gY2hhcmFj
dGVyc1tpXTsKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShpc0FTQ0lJVXBwZXIoY2hhcmFjdGVy
KSkpIHsKKyAgICAgICAgICAgICAgICBmYWlsaW5nSW5kZXggPSBpOworICAgICAgICAgICAgICAg
IGdvdG8gU2xvd1BhdGg7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
ICp0aGlzOworU2xvd1BhdGg6CisgICAgICAgIExDaGFyIGxvY2FsQnVmZmVyW2xvY2FsQnVmZmVy
U2l6ZV07CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmYWlsaW5nSW5kZXg7ICsr
aSkKKyAgICAgICAgICAgIGxvY2FsQnVmZmVyW2ldID0gY2hhcmFjdGVyc1tpXTsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gZmFpbGluZ0luZGV4OyBpIDwgbGVuZ3RoOyArK2kpCisgICAgICAg
ICAgICBsb2NhbEJ1ZmZlcltpXSA9IHRvQVNDSUlMb3dlcihjaGFyYWN0ZXJzW2ldKTsKKyAgICAg
ICAgcmV0dXJuIEF0b21pY1N0cmluZyhsb2NhbEJ1ZmZlciwgbGVuZ3RoKTsKKyAgICB9CisKKyAg
ICBQYXNzUmVmPFN0cmluZ0ltcGw+IGZvbGRlZFN0cmluZyA9IGltcGwtPmNvbnZlcnRUb0FTQ0lJ
TG93ZXJjYXNlKCk7CisgICAgaWYgKExJS0VMWSgmZm9sZGVkU3RyaW5nLmdldCgpID09IGltcGwp
KSB7CisgICAgICAgIGZvbGRlZFN0cmluZy5kcm9wUmVmKCk7CisgICAgICAgIHJldHVybiAqdGhp
czsKKyAgICB9CisKKyAgICBBdG9taWNTdHJpbmcgcmVzdWx0OworICAgIHJlc3VsdC5tX3N0cmlu
ZyA9IGFkZFNsb3dDYXNlKGZvbGRlZFN0cmluZy5nZXQoKSk7CisgICAgZm9sZGVkU3RyaW5nLmRy
b3BSZWYoKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBBdG9taWNTdHJpbmdJbXBsKiBBdG9t
aWNTdHJpbmc6OmZpbmRTbG93Q2FzZShTdHJpbmdJbXBsJiBzdHJpbmcpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21pY1N0cmluZy5oIGIvU291cmNlL1dURi93dGYvdGV4dC9B
dG9taWNTdHJpbmcuaAppbmRleCAxNDY3MDFiYTA1NTk0ZTBkYmYzNjkxZTcxNzg0MjcwNjI2NWFi
YzM0Li41NjU3MWEwYmViNWZkZjM1NzBmYTJhNTc3M2Q5ZWY4YmYzYWMwM2EzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21pY1N0cmluZy5oCisrKyBiL1NvdXJjZS9XVEYvd3Rm
L3RleHQvQXRvbWljU3RyaW5nLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOCwgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTE0MSw5ICsxNDEs
MTAgQEAgcHVibGljOgogICAgIGJvb2wgZW5kc1dpdGgoY29uc3QgY2hhciAoJnByZWZpeClbbWF0
Y2hMZW5ndGhdLCBib29sIGNhc2VTZW5zaXRpdmUgPSB0cnVlKSBjb25zdAogICAgICAgICB7IHJl
dHVybiBtX3N0cmluZy5lbmRzV2l0aDxtYXRjaExlbmd0aD4ocHJlZml4LCBjYXNlU2Vuc2l0aXZl
KTsgfQogICAgIAorICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBBdG9taWNTdHJpbmcgY29udmVy
dFRvQVNDSUlMb3dlcmNhc2UoKSBjb25zdDsKICAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgQXRv
bWljU3RyaW5nIGxvd2VyKCkgY29uc3Q7CiAgICAgQXRvbWljU3RyaW5nIHVwcGVyKCkgY29uc3Qg
eyByZXR1cm4gQXRvbWljU3RyaW5nKGltcGwoKS0+dXBwZXIoKSk7IH0KLSAgICAKKwogICAgIGlu
dCB0b0ludChib29sKiBvayA9IDApIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nLnRvSW50KG9rKTsg
fQogICAgIGRvdWJsZSB0b0RvdWJsZShib29sKiBvayA9IDApIGNvbnN0IHsgcmV0dXJuIG1fc3Ry
aW5nLnRvRG91YmxlKG9rKTsgfQogICAgIGZsb2F0IHRvRmxvYXQoYm9vbCogb2sgPSAwKSBjb25z
dCB7IHJldHVybiBtX3N0cmluZy50b0Zsb2F0KG9rKTsgfQpAQCAtMTg1LDcgKzE4Niw3IEBAIHB1
YmxpYzoKICAgICAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIXN0cmluZyB8fCAhc3RyaW5n
LT5sZW5ndGgoKSB8fCBpc0luQXRvbWljU3RyaW5nVGFibGUoc3RyaW5nKSwgIlRoZSBhdG9taWMg
c3RyaW5nIGNvbWVzIGZyb20gYW4gb3RoZXIgdGhyZWFkISIpOwogICAgICAgICAgICAgcmV0dXJu
IHN0cmluZzsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gYWRkU2xvd0Nhc2Uoc3RyaW5nKTsK
KyAgICAgICAgcmV0dXJuIGFkZFNsb3dDYXNlKCpzdHJpbmcpOwogICAgIH0KICAgICBXVEZfRVhQ
T1JUX1NUUklOR19BUEkgc3RhdGljIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gYWRkRnJvbUxpdGVy
YWxEYXRhKGNvbnN0IGNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCk7CiAjaWYgVVNF
KENGKQpAQCAtMTk5LDcgKzIwMCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIEFTU0VSVF9XSVRI
X01FU1NBR0UoIXN0cmluZyB8fCAhc3RyaW5nLT5sZW5ndGgoKSB8fCBpc0luQXRvbWljU3RyaW5n
VGFibGUoc3RyaW5nKSwgIlRoZSBhdG9taWMgc3RyaW5nIGNvbWVzIGZyb20gYW4gb3RoZXIgdGhy
ZWFkISIpOwogICAgICAgICAgICAgcmV0dXJuIHN0cmluZzsKICAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gYWRkU2xvd0Nhc2Uoc3RyaW5nVGFibGVQcm92aWRlci5hdG9taWNTdHJpbmdUYWJsZSgp
LCBzdHJpbmcpOworICAgICAgICByZXR1cm4gYWRkU2xvd0Nhc2UoKnN0cmluZ1RhYmxlUHJvdmlk
ZXIuYXRvbWljU3RyaW5nVGFibGUoKSwgKnN0cmluZyk7CiAgICAgfQogCiBwcml2YXRlOgpAQCAt
MjA4LDggKzIwOSw4IEBAIHByaXZhdGU6CiAKICAgICBTdHJpbmcgbV9zdHJpbmc7CiAgICAgCi0g
ICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIHN0YXRpYyBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGFk
ZFNsb3dDYXNlKFN0cmluZ0ltcGwqKTsKLSAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgc3RhdGlj
IFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gYWRkU2xvd0Nhc2UoQXRvbWljU3RyaW5nVGFibGUqLCBT
dHJpbmdJbXBsKik7CisgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIHN0YXRpYyBQYXNzUmVmUHRy
PFN0cmluZ0ltcGw+IGFkZFNsb3dDYXNlKFN0cmluZ0ltcGwmKTsKKyAgICBXVEZfRVhQT1JUX1NU
UklOR19BUEkgc3RhdGljIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gYWRkU2xvd0Nhc2UoQXRvbWlj
U3RyaW5nVGFibGUmLCBTdHJpbmdJbXBsJik7CiAKICAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkg
c3RhdGljIEF0b21pY1N0cmluZ0ltcGwqIGZpbmRTbG93Q2FzZShTdHJpbmdJbXBsJik7CiAgICAg
V1RGX0VYUE9SVF9TVFJJTkdfQVBJIHN0YXRpYyBBdG9taWNTdHJpbmcgZnJvbVVURjhJbnRlcm5h
bChjb25zdCBjaGFyKiwgY29uc3QgY2hhciopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYv
dGV4dC9TdHJpbmdJbXBsLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5jcHAK
aW5kZXggYzY4NDcxMDllNDZmOTgzNDY2OTkxZTg3MmNlZDExYjI4ZDhkMzhmZS4uNmFmZjliMjRj
NTRlYTg3MGM1ZGVjODhlMjQyNWE4OTljN2ZlNzZlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93
dGYvdGV4dC9TdHJpbmdJbXBsLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0lt
cGwuY3BwCkBAIC0yLDcgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwg
KGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtv
aXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyICggbXVl
bGxlckBrZGUub3JnICkKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwg
MjAwNywgMjAwOCwgMjAwOSwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDks
IDIwMTMtMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDYgQW5kcmV3IFdlbGxpbmd0b24gKHByb3RvbkB3aXJldGFwcGVkLm5ldCkKICAqCiAg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCkBAIC0zNTMsMTIgKzM1MywxMiBAQCBQYXNzUmVmPFN0cmluZ0ltcGw+IFN0cmluZ0lt
cGw6Omxvd2VyKCkKICAgICAgICAgICAgIExDaGFyIGNoYXJhY3RlciA9IG1fZGF0YThbaV07CiAg
ICAgICAgICAgICBpZiAoVU5MSUtFTFkoKGNoYXJhY3RlciAmIH4weDdGKSB8fCBpc0FTQ0lJVXBw
ZXIoY2hhcmFjdGVyKSkpIHsKICAgICAgICAgICAgICAgICBmYWlsaW5nSW5kZXggPSBpOwotICAg
ICAgICAgICAgICAgIGdvdG8gU2xvd1BhdGg4Yml0TG93ZXI7CisgICAgICAgICAgICAgICAgZ290
byBTbG93UGF0aDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICByZXR1cm4gKnRo
aXM7CiAKLVNsb3dQYXRoOGJpdExvd2VyOgorU2xvd1BhdGg6CiAgICAgICAgIExDaGFyKiBkYXRh
ODsKICAgICAgICAgYXV0byBuZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXplZEludGVybmFsTm9u
RW1wdHkobV9sZW5ndGgsIGRhdGE4KTsKIApAQCAtNjE5LDYgKzYxOSw4IEBAIFBhc3NSZWY8U3Ry
aW5nSW1wbD4gU3RyaW5nSW1wbDo6ZmlsbChVQ2hhciBjaGFyYWN0ZXIpCiAKIFBhc3NSZWY8U3Ry
aW5nSW1wbD4gU3RyaW5nSW1wbDo6Zm9sZENhc2UoKQogeworICAgIC8vIEZJWE1FOiBXaHkgZG9l
c24ndCB0aGlzIGZ1bmN0aW9uIGhhdmUgYSBwcmVmbGlnaHQgbGlrZSB0aGUgb25lIGluIFN0cmlu
Z0ltcGw6Omxvd2VyPworCiAgICAgaWYgKG1fbGVuZ3RoID4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1heCgpKSkKICAgICAgICAgQ1JBU0goKTsK
ICAgICBpbnQzMl90IGxlbmd0aCA9IG1fbGVuZ3RoOwpAQCAtNjczLDYgKzY3NSw0NCBAQCBQYXNz
UmVmPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OmZvbGRDYXNlKCkKICAgICByZXR1cm4gbmV3SW1w
bC5yZWxlYXNlTm9uTnVsbCgpOwogfQogCitQYXNzUmVmPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6
OmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCkKK3sKKyAgICBpZiAoaXM4Qml0KCkpIHsKKyAgICAg
ICAgdW5zaWduZWQgZmFpbGluZ0luZGV4OworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbV9sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgTENoYXIgY2hhcmFjdGVyID0gbV9kYXRh
OFtpXTsKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShpc0FTQ0lJVXBwZXIoY2hhcmFjdGVyKSkp
IHsKKyAgICAgICAgICAgICAgICBmYWlsaW5nSW5kZXggPSBpOworICAgICAgICAgICAgICAgIGdv
dG8gU2xvd1BhdGg7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuICp0
aGlzOworCitTbG93UGF0aDoKKyAgICAgICAgTENoYXIqIGRhdGE4OworICAgICAgICBQYXNzUmVm
PFN0cmluZ0ltcGw+IG5ld0ltcGwgPSBjcmVhdGVVbmluaXRpYWxpemVkSW50ZXJuYWxOb25FbXB0
eShtX2xlbmd0aCwgZGF0YTgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZmFp
bGluZ0luZGV4OyArK2kpCisgICAgICAgICAgICBkYXRhOFtpXSA9IG1fZGF0YThbaV07CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IGZhaWxpbmdJbmRleDsgaSA8IG1fbGVuZ3RoOyArK2kpCisg
ICAgICAgICAgICBkYXRhOFtpXSA9IHRvQVNDSUlMb3dlcihtX2RhdGE4W2ldKTsKKyAgICAgICAg
cmV0dXJuIG5ld0ltcGw7CisgICAgfQorCisgICAgYm9vbCBub1VwcGVyID0gdHJ1ZTsKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9sZW5ndGg7ICsraSkgeworICAgICAgICBpZiAoVU5M
SUtFTFkoaXNBU0NJSVVwcGVyKG1fZGF0YTE2W2ldKSkpCisgICAgICAgICAgICBub1VwcGVyID0g
ZmFsc2U7CisgICAgfQorICAgIGlmIChub1VwcGVyKQorICAgICAgICByZXR1cm4gKnRoaXM7CisK
KyAgICBVQ2hhciogZGF0YTE2OworICAgIFBhc3NSZWY8U3RyaW5nSW1wbD4gbmV3SW1wbCA9IGNy
ZWF0ZVVuaW5pdGlhbGl6ZWRJbnRlcm5hbE5vbkVtcHR5KG1fbGVuZ3RoLCBkYXRhMTYpOworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2xlbmd0aDsgKytpKQorICAgICAgICBkYXRhMTZb
aV0gPSB0b0FTQ0lJTG93ZXIobV9kYXRhMTZbaV0pOworICAgIHJldHVybiBuZXdJbXBsOworfQor
CiB0ZW1wbGF0ZSA8Y2xhc3MgVUNoYXJQcmVkaWNhdGU+CiBpbmxpbmUgUGFzc1JlZjxTdHJpbmdJ
bXBsPiBTdHJpbmdJbXBsOjpzdHJpcE1hdGNoZWRDaGFyYWN0ZXJzKFVDaGFyUHJlZGljYXRlIHBy
ZWRpY2F0ZSkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5o
IGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmgKaW5kZXggNmQzZGE2NjU1MTIyM2E2
ODgwYjYzZGY3YTM4NWY2YWVlN2Y5ZWUxNC4uMTg3NGE0YmY2ZmFhM2E1ZGQ5MDg0ZmQ0YWJmZGEx
MzFhNDUwZTI0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmgK
KysrIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmgKQEAgLTEsNiArMSw2IEBACiAv
KgogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMTAs
IDIwMTMtMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBA
IC02MjgsNiArNjI4LDcgQEAgcHVibGljOgogICAgIGRvdWJsZSB0b0RvdWJsZShib29sKiBvayA9
IDApOwogICAgIGZsb2F0IHRvRmxvYXQoYm9vbCogb2sgPSAwKTsKIAorICAgIFdURl9FWFBPUlRf
U1RSSU5HX0FQSSBQYXNzUmVmPFN0cmluZ0ltcGw+IGNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCk7
CiAgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFBhc3NSZWY8U3RyaW5nSW1wbD4gbG93ZXIoKTsK
ICAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgUGFzc1JlZjxTdHJpbmdJbXBsPiB1cHBlcigpOwog
ICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBQYXNzUmVmPFN0cmluZ0ltcGw+IGxvd2VyKGNvbnN0
IEF0b21pY1N0cmluZyYgbG9jYWxlSWRlbnRpZmllcik7CkBAIC02MzUsNiArNjM2LDcgQEAgcHVi
bGljOgogCiAgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFBhc3NSZWY8U3RyaW5nSW1wbD4gZmls
bChVQ2hhcik7CiAgICAgLy8gRklYTUU6IERvIHdlIG5lZWQgZmlsbChjaGFyKSBvciBjYW4gd2Ug
anVzdCBkbyB0aGUgcmlnaHQgdGhpbmcgaWYgVUNoYXIgaXMgQVNDSUk/CisKICAgICBQYXNzUmVm
PFN0cmluZ0ltcGw+IGZvbGRDYXNlKCk7CiAKICAgICBQYXNzUmVmPFN0cmluZ0ltcGw+IHN0cmlw
V2hpdGVTcGFjZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcu
Y3BwIGIvU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuY3BwCmluZGV4IDk1Yzk1Y2MzZjMz
NGNhMmM1NTY0NTVjYzEwMGJmNDk3MWVkN2UzYzcuLmRjYTA4MWRkZjA0NmNkNjIyYzJkMjljMzRl
ZmU3MzUxZmI5ZDdmZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5n
LmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5jcHAKQEAgLTMzNSw2ICsz
MzUsMTQgQEAgU3RyaW5nIFN0cmluZzo6c3Vic3RyaW5nU2hhcmluZ0ltcGwodW5zaWduZWQgb2Zm
c2V0LCB1bnNpZ25lZCBsZW5ndGgpIGNvbnN0CiAgICAgcmV0dXJuIFN0cmluZyhTdHJpbmdJbXBs
OjpjcmVhdGVTdWJzdHJpbmdTaGFyaW5nSW1wbChtX2ltcGwsIG9mZnNldCwgbGVuZ3RoKSk7CiB9
CiAKK1N0cmluZyBTdHJpbmc6OmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCkgY29uc3QKK3sKKyAg
ICAvLyBGSVhNRTogU2hvdWxkIHRoaXMgZnVuY3Rpb24sIGFuZCB0aGUgbWFueSBvdGhlcnMgbGlr
ZSBpdCwgYmUgaW5saW5lZD8KKyAgICBpZiAoIW1faW1wbCkKKyAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOworICAgIHJldHVybiBtX2ltcGwtPmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCk7Cit9CisK
IFN0cmluZyBTdHJpbmc6Omxvd2VyKCkgY29uc3QKIHsKICAgICBpZiAoIW1faW1wbCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmggYi9Tb3VyY2UvV1RGL3d0Zi90
ZXh0L1dURlN0cmluZy5oCmluZGV4IGIyZWFlYWQ0MTVhMmUxZmI5YTgwZmQ3ZWVkN2UwZjRlMTg0
YzE5MTkuLmM0ZjY5YTc0OWNmZDQ4MjhmYzhlNDZjYWZlNjNkYTJlYTZkZTMxMGIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmgKKysrIGIvU291cmNlL1dURi93dGYv
dGV4dC9XVEZTdHJpbmcuaApAQCAtMzEwLDcgKzMxMCwxMCBAQCBwdWJsaWM6CiAgICAgU3RyaW5n
IGxlZnQodW5zaWduZWQgbGVuKSBjb25zdCB7IHJldHVybiBzdWJzdHJpbmcoMCwgbGVuKTsgfQog
ICAgIFN0cmluZyByaWdodCh1bnNpZ25lZCBsZW4pIGNvbnN0IHsgcmV0dXJuIHN1YnN0cmluZyhs
ZW5ndGgoKSAtIGxlbiwgbGVuKTsgfQogCi0gICAgLy8gUmV0dXJucyBhIGxvd2VyY2FzZS91cHBl
cmNhc2UgdmVyc2lvbiBvZiB0aGUgc3RyaW5nCisgICAgLy8gUmV0dXJucyBhIGxvd2VyY2FzZS91
cHBlcmNhc2UgdmVyc2lvbiBvZiB0aGUgc3RyaW5nLgorICAgIC8vIFRoZSBjb252ZXJ0VG9BU0NJ
SUxvd2VyY2FzZSBpcyB1c2VmdWwgaW4gbWFueSBjb250ZXh0cyBzdWNoIGFzIEhUTUwgd2hlcmUg
d2UgZG9uJ3QKKyAgICAvLyB3YW50IHRvIGRvIGFueSBjb252ZXJzaW9uIGZvciBub24tQVNDSUkg
bGV0dGVycy4KKyAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgU3RyaW5nIGNvbnZlcnRUb0FTQ0lJ
TG93ZXJjYXNlKCkgY29uc3Q7CiAgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFN0cmluZyBsb3dl
cigpIGNvbnN0OwogICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBTdHJpbmcgdXBwZXIoKSBjb25z
dDsKIApAQCAtMzI1LDcgKzMyOCw4IEBAIHB1YmxpYzoKICAgICBXVEZfRVhQT1JUX1NUUklOR19B
UEkgU3RyaW5nIHJlbW92ZUNoYXJhY3RlcnMoQ2hhcmFjdGVyTWF0Y2hGdW5jdGlvblB0cikgY29u
c3Q7CiAgICAgdGVtcGxhdGU8Ym9vbCBpc1NwZWNpYWxDaGFyYWN0ZXIoVUNoYXIpPiBib29sIGlz
QWxsU3BlY2lhbENoYXJhY3RlcnMoKSBjb25zdDsKIAotICAgIC8vIFJldHVybiB0aGUgc3RyaW5n
IHdpdGggY2FzZSBmb2xkZWQgZm9yIGNhc2UgaW5zZW5zaXRpdmUgY29tcGFyaXNvbi4KKyAgICAv
LyBSZXR1cm5zIHRoZSBzdHJpbmcgd2l0aCBjYXNlIGZvbGRlZCBmb3IgY2FzZSBpbnNlbnNpdGl2
ZSBjb21wYXJpc29uLgorICAgIC8vIFVzZSBjb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSBpbnN0ZWFk
IGlmIEFTQ0lJIGNhc2UgaW5zZW5zaXRpdmUgY29tcGFyaXNvbiBpcyBkZXNpcmVkLgogICAgIFdU
Rl9FWFBPUlRfU1RSSU5HX0FQSSBTdHJpbmcgZm9sZENhc2UoKSBjb25zdDsKIAogICAgIFdURl9F
WFBPUlRfU1RSSU5HX0FQSSBzdGF0aWMgU3RyaW5nIGZvcm1hdChjb25zdCBjaGFyICosIC4uLikg
V1RGX0FUVFJJQlVURV9QUklOVEYoMSwgMik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vU3BhY2VTcGxpdFN0cmluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU3BhY2VTcGxpdFN0
cmluZy5jcHAKaW5kZXggZDk4YmNhODMxZjNlZGY0NjZjMDI1NmJmNzJhYzk3MTIzYWUzMWIwNy4u
NjIyYTdmMmQ4NWEyMTc2ZDk5Mjg3NTY1YjhhMTYxNWQxYmZjODE4ZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZG9tL1NwYWNlU3BsaXRTdHJpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9TcGFjZVNwbGl0U3RyaW5nLmNwcApAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmln
aHQgKEMpIDIwMDcgRGF2aWQgU21pdGggKGNhdGZpc2gubWFuQGdtYWlsLmNvbSkKLSAqIENvcHly
aWdodCAoQykgMjAwNywgMjAwOCwgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMTEtMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIyLDQyICsyMiwx
OCBAQAogI2luY2x1ZGUgIlNwYWNlU3BsaXRTdHJpbmcuaCIKIAogI2luY2x1ZGUgIkhUTUxQYXJz
ZXJJZGlvbXMuaCIKLSNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgogI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvQXRvbWljU3RyaW5nSGFzaC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxk
ZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBDT01QSUxFX0FTU0VSVCghKHNpemVvZihT
cGFjZVNwbGl0U3RyaW5nRGF0YSkgJSBzaXplb2YodWludHB0cl90KSksIFNwYWNlU3BsaXRTdHJp
bmdEYXRhVGFpbElzQWxpZ25lZFRvV29yZFNpemUpOwogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hh
cmFjdGVyVHlwZT4KLXN0YXRpYyBpbmxpbmUgYm9vbCBoYXNOb25BU0NJSU9yVXBwZXIoY29uc3Qg
Q2hhcmFjdGVyVHlwZSogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIGJvb2wg
aGFzVXBwZXIgPSBmYWxzZTsKLSAgICBDaGFyYWN0ZXJUeXBlIG9yZWQgPSAwOwotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICBDaGFyYWN0ZXJUeXBl
IGMgPSBjaGFyYWN0ZXJzW2ldOwotICAgICAgICBoYXNVcHBlciB8PSBpc0FTQ0lJVXBwZXIoYyk7
Ci0gICAgICAgIG9yZWQgfD0gYzsKLSAgICB9Ci0gICAgcmV0dXJuIGhhc1VwcGVyIHx8IChvcmVk
ICYgfjB4N0YpOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgaGFzTm9uQVNDSUlPclVwcGVyKGNv
bnN0IFN0cmluZyYgc3RyaW5nKQotewotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0cmluZy5sZW5n
dGgoKTsKLQotICAgIGlmIChzdHJpbmcuaXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBoYXNOb25B
U0NJSU9yVXBwZXIoc3RyaW5nLmNoYXJhY3RlcnM4KCksIGxlbmd0aCk7Ci0gICAgcmV0dXJuIGhh
c05vbkFTQ0lJT3JVcHBlcihzdHJpbmcuY2hhcmFjdGVyczE2KCksIGxlbmd0aCk7Ci19Ci0KIHRl
bXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlLCB0eXBlbmFtZSBUb2tlblByb2Nlc3Nvcj4K
IHN0YXRpYyBpbmxpbmUgdm9pZCB0b2tlbml6ZVNwYWNlU3BsaXRTdHJpbmcoVG9rZW5Qcm9jZXNz
b3ImIHRva2VuUHJvY2Vzc29yLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXJzLCB1bnNp
Z25lZCBsZW5ndGgpCiB7Ci0gICAgdW5zaWduZWQgc3RhcnQgPSAwOwotICAgIHdoaWxlICh0cnVl
KSB7CisgICAgZm9yICh1bnNpZ25lZCBzdGFydCA9IDA7IDsgKSB7CiAgICAgICAgIHdoaWxlIChz
dGFydCA8IGxlbmd0aCAmJiBpc0hUTUxTcGFjZShjaGFyYWN0ZXJzW3N0YXJ0XSkpCiAgICAgICAg
ICAgICArK3N0YXJ0OwogICAgICAgICBpZiAoc3RhcnQgPj0gbGVuZ3RoKQpAQCAtNzgsMTEgKzU0
LDExIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB0b2tlbml6ZVNwYWNlU3BsaXRTdHJpbmcoVG9rZW5Q
cm9jZXNzb3ImIHRva2VuUHJvY2Vzc29yLCBjb25zCiB7CiAgICAgQVNTRVJUKCFzdHJpbmcuaXNO
dWxsKCkpOwogCi0gICAgY29uc3QgU3RyaW5nSW1wbCogc3RyaW5nSW1wbCA9IHN0cmluZy5pbXBs
KCk7Ci0gICAgaWYgKHN0cmluZ0ltcGwtPmlzOEJpdCgpKQotICAgICAgICB0b2tlbml6ZVNwYWNl
U3BsaXRTdHJpbmcodG9rZW5Qcm9jZXNzb3IsIHN0cmluZ0ltcGwtPmNoYXJhY3RlcnM4KCksIHN0
cmluZ0ltcGwtPmxlbmd0aCgpKTsKKyAgICBjb25zdCBTdHJpbmdJbXBsJiBzdHJpbmdJbXBsID0g
KnN0cmluZy5pbXBsKCk7CisgICAgaWYgKHN0cmluZ0ltcGwuaXM4Qml0KCkpCisgICAgICAgIHRv
a2VuaXplU3BhY2VTcGxpdFN0cmluZyh0b2tlblByb2Nlc3Nvciwgc3RyaW5nSW1wbC5jaGFyYWN0
ZXJzOCgpLCBzdHJpbmdJbXBsLmxlbmd0aCgpKTsKICAgICBlbHNlCi0gICAgICAgIHRva2VuaXpl
U3BhY2VTcGxpdFN0cmluZyh0b2tlblByb2Nlc3Nvciwgc3RyaW5nSW1wbC0+Y2hhcmFjdGVyczE2
KCksIHN0cmluZ0ltcGwtPmxlbmd0aCgpKTsKKyAgICAgICAgdG9rZW5pemVTcGFjZVNwbGl0U3Ry
aW5nKHRva2VuUHJvY2Vzc29yLCBzdHJpbmdJbXBsLmNoYXJhY3RlcnMxNigpLCBzdHJpbmdJbXBs
Lmxlbmd0aCgpKTsKIH0KIAogYm9vbCBTcGFjZVNwbGl0U3RyaW5nRGF0YTo6Y29udGFpbnNBbGwo
U3BhY2VTcGxpdFN0cmluZ0RhdGEmIG90aGVyKQpAQCAtMTAwLDcgKzc2LDcgQEAgYm9vbCBTcGFj
ZVNwbGl0U3RyaW5nRGF0YTo6Y29udGFpbnNBbGwoU3BhY2VTcGxpdFN0cmluZ0RhdGEmIG90aGVy
KQogICAgIHJldHVybiB0cnVlOwogfQogCi1zdHJ1Y3QgU3BhY2VTcGxpdFN0cmluZ0RhdGFNYXBL
ZXlUcmFpdCA6IHB1YmxpYyBIYXNoVHJhaXRzPEF0b21pY1N0cmluZz4KK3N0cnVjdCBTcGFjZVNw
bGl0U3RyaW5nVGFibGVLZXlUcmFpdHMgOiBwdWJsaWMgSGFzaFRyYWl0czxBdG9taWNTdHJpbmc+
CiB7CiAgICAgLy8gVGhlIG51bWJlciAyMDAgZm9yIHR5cGljYWxOdW1iZXJPZlNwYWNlU3BsaXRT
dHJpbmcgd2FzIGJhc2VkIG9uIHRoZSB0eXBpY2FsIG51bWJlciBvZiB1bmlxdWUgY2xhc3MgbmFt
ZXMKICAgICAvLyBvbiB0eXBpY2FsIHdlYnNpdGVzIG9uIEF1Z3VzdCAyMDEzLgpAQCAtMTA4LDI2
ICs4NCwxNyBAQCBzdHJ1Y3QgU3BhY2VTcGxpdFN0cmluZ0RhdGFNYXBLZXlUcmFpdCA6IHB1Ymxp
YyBIYXNoVHJhaXRzPEF0b21pY1N0cmluZz4KICAgICBzdGF0aWMgY29uc3QgaW50IG1pbmltdW1U
YWJsZVNpemUgPSBXVEY6Okhhc2hUYWJsZUNhcGFjaXR5Rm9yU2l6ZTx0eXBpY2FsTnVtYmVyT2ZT
cGFjZVNwbGl0U3RyaW5nPjo6dmFsdWU7CiB9OwogCi10eXBlZGVmIEhhc2hNYXA8QXRvbWljU3Ry
aW5nLCBTcGFjZVNwbGl0U3RyaW5nRGF0YSosIERlZmF1bHRIYXNoPEF0b21pY1N0cmluZz46Okhh
c2gsIFNwYWNlU3BsaXRTdHJpbmdEYXRhTWFwS2V5VHJhaXQ+IFNwYWNlU3BsaXRTdHJpbmdEYXRh
TWFwOwordHlwZWRlZiBIYXNoTWFwPEF0b21pY1N0cmluZywgU3BhY2VTcGxpdFN0cmluZ0RhdGEq
LCBBdG9taWNTdHJpbmdIYXNoLCBTcGFjZVNwbGl0U3RyaW5nVGFibGVLZXlUcmFpdHM+IFNwYWNl
U3BsaXRTdHJpbmdUYWJsZTsKIAotc3RhdGljIFNwYWNlU3BsaXRTdHJpbmdEYXRhTWFwJiBzaGFy
ZWREYXRhTWFwKCkKK3N0YXRpYyBTcGFjZVNwbGl0U3RyaW5nVGFibGUmIHNwYWNlU3BsaXRTdHJp
bmdUYWJsZSgpCiB7Ci0gICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKFNwYWNlU3Bs
aXRTdHJpbmdEYXRhTWFwLCBtYXAsICgpKTsKLSAgICByZXR1cm4gbWFwOworICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxTcGFjZVNwbGl0U3RyaW5nVGFibGU+IHRhYmxlOworICAgIHJldHVybiB0
YWJsZTsKIH0KIAogdm9pZCBTcGFjZVNwbGl0U3RyaW5nOjpzZXQoY29uc3QgQXRvbWljU3RyaW5n
JiBpbnB1dFN0cmluZywgYm9vbCBzaG91bGRGb2xkQ2FzZSkKIHsKLSAgICBpZiAoaW5wdXRTdHJp
bmcuaXNOdWxsKCkpIHsKLSAgICAgICAgY2xlYXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIEF0b21pY1N0cmluZyBzdHJpbmcoaW5wdXRTdHJpbmcpOwotICAgIGlmIChzaG91bGRG
b2xkQ2FzZSAmJiBoYXNOb25BU0NJSU9yVXBwZXIoc3RyaW5nKSkKLSAgICAgICAgc3RyaW5nID0g
c3RyaW5nLnN0cmluZygpLmZvbGRDYXNlKCk7Ci0KLSAgICBtX2RhdGEgPSBTcGFjZVNwbGl0U3Ry
aW5nRGF0YTo6Y3JlYXRlKHN0cmluZyk7CisgICAgbV9kYXRhID0gU3BhY2VTcGxpdFN0cmluZ0Rh
dGE6OmNyZWF0ZShzaG91bGRGb2xkQ2FzZSA/IGlucHV0U3RyaW5nLmNvbnZlcnRUb0FTQ0lJTG93
ZXJjYXNlKCkgOiBpbnB1dFN0cmluZyk7CiB9CiAKIGNsYXNzIFRva2VuSXNFcXVhbFRvQ1N0cmlu
Z1Rva2VuUHJvY2Vzc29yIHsKQEAgLTE2MiwxMiArMTI5LDggQEAgYm9vbCBTcGFjZVNwbGl0U3Ry
aW5nOjpzcGFjZVNwbGl0U3RyaW5nQ29udGFpbnNWYWx1ZShjb25zdCBTdHJpbmcmIGlucHV0U3Ry
aW5nLAogICAgIGlmIChpbnB1dFN0cmluZy5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgU3RyaW5nIHN0cmluZyA9IGlucHV0U3RyaW5nOwotICAgIGlmIChzaG91bGRGb2xk
Q2FzZSAmJiBoYXNOb25BU0NJSU9yVXBwZXIoc3RyaW5nKSkKLSAgICAgICAgc3RyaW5nID0gc3Ry
aW5nLmZvbGRDYXNlKCk7Ci0KICAgICBUb2tlbklzRXF1YWxUb0NTdHJpbmdUb2tlblByb2Nlc3Nv
ciB0b2tlblByb2Nlc3Nvcih2YWx1ZSwgdmFsdWVMZW5ndGgpOwotICAgIHRva2VuaXplU3BhY2VT
cGxpdFN0cmluZyh0b2tlblByb2Nlc3Nvciwgc3RyaW5nKTsKKyAgICB0b2tlbml6ZVNwYWNlU3Bs
aXRTdHJpbmcodG9rZW5Qcm9jZXNzb3IsIHNob3VsZEZvbGRDYXNlID8gaW5wdXRTdHJpbmcuaW1w
bCgpLT5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpIDogaW5wdXRTdHJpbmcpOwogICAgIHJldHVy
biB0b2tlblByb2Nlc3Nvci5yZWZlcmVuY2VTdHJpbmdXYXNGb3VuZCgpOwogfQogCkBAIC0xNzYs
OCArMTM5LDcgQEAgY2xhc3MgVG9rZW5Db3VudGVyIHsKIHB1YmxpYzoKICAgICBUb2tlbkNvdW50
ZXIoKSA6IG1fdG9rZW5Db3VudCgwKSB7IH0KIAotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFy
YWN0ZXJUeXBlPgotICAgIGJvb2wgcHJvY2Vzc1Rva2VuKGNvbnN0IENoYXJhY3RlclR5cGUqLCB1
bnNpZ25lZCkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBib29sIHByb2Nl
c3NUb2tlbihjb25zdCBDaGFyYWN0ZXJUeXBlKiwgdW5zaWduZWQpCiAgICAgewogICAgICAgICAr
K21fdG9rZW5Db3VudDsKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xOTQsOCArMTU2LDcgQEAg
Y2xhc3MgVG9rZW5BdG9taWNTdHJpbmdJbml0aWFsaXplciB7CiBwdWJsaWM6CiAgICAgVG9rZW5B
dG9taWNTdHJpbmdJbml0aWFsaXplcihBdG9taWNTdHJpbmcqIG1lbW9yeSkgOiBtX21lbW9yeUJ1
Y2tldChtZW1vcnkpIHsgfQogCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+
Ci0gICAgYm9vbCBwcm9jZXNzVG9rZW4oY29uc3QgQ2hhcmFjdGVyVHlwZSogY2hhcmFjdGVycywg
dW5zaWduZWQgbGVuZ3RoKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGJv
b2wgcHJvY2Vzc1Rva2VuKGNvbnN0IENoYXJhY3RlclR5cGUqIGNoYXJhY3RlcnMsIHVuc2lnbmVk
IGxlbmd0aCkKICAgICB7CiAgICAgICAgIG5ldyAoTm90TnVsbCwgbV9tZW1vcnlCdWNrZXQpIEF0
b21pY1N0cmluZyhjaGFyYWN0ZXJzLCBsZW5ndGgpOwogICAgICAgICArK21fbWVtb3J5QnVja2V0
OwpAQCAtMjAzLDExICsxNjQsMTIgQEAgcHVibGljOgogICAgIH0KIAogICAgIGNvbnN0IEF0b21p
Y1N0cmluZyogbmV4dE1lbW9yeUJ1Y2tldCgpIGNvbnN0IHsgcmV0dXJuIG1fbWVtb3J5QnVja2V0
OyB9CisKIHByaXZhdGU6CiAgICAgQXRvbWljU3RyaW5nKiBtX21lbW9yeUJ1Y2tldDsKIH07CiAK
LVBhc3NSZWZQdHI8U3BhY2VTcGxpdFN0cmluZ0RhdGE+IFNwYWNlU3BsaXRTdHJpbmdEYXRhOjpj
cmVhdGUoY29uc3QgQXRvbWljU3RyaW5nJiBrZXlTdHJpbmcsIHVuc2lnbmVkIHRva2VuQ291bnQp
CitpbmxpbmUgUGFzc1JlZlB0cjxTcGFjZVNwbGl0U3RyaW5nRGF0YT4gU3BhY2VTcGxpdFN0cmlu
Z0RhdGE6OmNyZWF0ZShjb25zdCBBdG9taWNTdHJpbmcmIGtleVN0cmluZywgdW5zaWduZWQgdG9r
ZW5Db3VudCkKIHsKICAgICBBU1NFUlQodG9rZW5Db3VudCk7CiAKQEAgLTIzMCwxMCArMTkyLDkg
QEAgUGFzc1JlZlB0cjxTcGFjZVNwbGl0U3RyaW5nRGF0YT4gU3BhY2VTcGxpdFN0cmluZ0RhdGE6
OmNyZWF0ZShjb25zdCBBdG9taWNTdHJpbmcKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwog
ICAgIEFTU0VSVCgha2V5U3RyaW5nLmlzTnVsbCgpKTsKIAotICAgIFNwYWNlU3BsaXRTdHJpbmdE
YXRhTWFwJiBzcGFjZVNwbGl0U3RyaW5nRGF0YUNhY2hlID0gc2hhcmVkRGF0YU1hcCgpOwotICAg
IFNwYWNlU3BsaXRTdHJpbmdEYXRhTWFwOjppdGVyYXRvciBpdGVyYXRvciA9IHNwYWNlU3BsaXRT
dHJpbmdEYXRhQ2FjaGUuZmluZChrZXlTdHJpbmcpOwotICAgIGlmIChpdGVyYXRvciAhPSBzcGFj
ZVNwbGl0U3RyaW5nRGF0YUNhY2hlLmVuZCgpKQotICAgICAgICByZXR1cm4gaXRlcmF0b3ItPnZh
bHVlOworICAgIGF1dG8mIHRhYmxlID0gc3BhY2VTcGxpdFN0cmluZ1RhYmxlKCk7CisgICAgaWYg
KFNwYWNlU3BsaXRTdHJpbmdEYXRhKiBkYXRhID0gdGFibGUuZ2V0KGtleVN0cmluZykpCisgICAg
ICAgIHJldHVybiBkYXRhOwogCiAgICAgLy8gTm90aGluZyBpbiB0aGUgY2FjaGU/IExldCdzIGNy
ZWF0ZSBhIG5ldyBTcGFjZVNwbGl0U3RyaW5nRGF0YSBpZiB0aGUgaW5wdXQgaGFzIHNvbWV0aGlu
ZyB1c2VmdWwuCiAgICAgLy8gMSkgV2UgZmluZCB0aGUgbnVtYmVyIG9mIHN0cmluZ3MgaW4gdGhl
IGlucHV0IHRvIGtub3cgaG93IG11Y2ggc2l6ZSB3ZSBuZWVkIHRvIGFsbG9jYXRlLgpAQCAtMjQ1
LDcgKzIwNiw3IEBAIFBhc3NSZWZQdHI8U3BhY2VTcGxpdFN0cmluZ0RhdGE+IFNwYWNlU3BsaXRT
dHJpbmdEYXRhOjpjcmVhdGUoY29uc3QgQXRvbWljU3RyaW5nCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogCiAgICAgUmVmUHRyPFNwYWNlU3BsaXRTdHJpbmdEYXRhPiBzcGFjZVNwbGl0U3RyaW5n
RGF0YSA9IGNyZWF0ZShrZXlTdHJpbmcsIHRva2VuQ291bnQpOwotICAgIHNwYWNlU3BsaXRTdHJp
bmdEYXRhQ2FjaGUuYWRkKGtleVN0cmluZywgc3BhY2VTcGxpdFN0cmluZ0RhdGEuZ2V0KCkpOwor
ICAgIHRhYmxlLmFkZChrZXlTdHJpbmcsIHNwYWNlU3BsaXRTdHJpbmdEYXRhLmdldCgpKTsKICAg
ICByZXR1cm4gc3BhY2VTcGxpdFN0cmluZ0RhdGEucmVsZWFzZSgpOwogfQogCkBAIC0yNTQsOCAr
MjE1LDcgQEAgdm9pZCBTcGFjZVNwbGl0U3RyaW5nRGF0YTo6ZGVzdHJveShTcGFjZVNwbGl0U3Ry
aW5nRGF0YSogc3BhY2VTcGxpdFN0cmluZykKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwogCi0gICAgaWYgKCFzcGFjZVNwbGl0U3RyaW5nLT5tX2tleVN0cmluZy5pc051bGwoKSkKLSAg
ICAgICAgc2hhcmVkRGF0YU1hcCgpLnJlbW92ZShzcGFjZVNwbGl0U3RyaW5nLT5tX2tleVN0cmlu
Zyk7CisgICAgc3BhY2VTcGxpdFN0cmluZ1RhYmxlKCkucmVtb3ZlKHNwYWNlU3BsaXRTdHJpbmct
Pm1fa2V5U3RyaW5nKTsKIAogICAgIHVuc2lnbmVkIGkgPSAwOwogICAgIHVuc2lnbmVkIHNpemUg
PSBzcGFjZVNwbGl0U3RyaW5nLT5zaXplKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vU3BhY2VTcGxpdFN0cmluZy5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1NwYWNlU3BsaXRTdHJp
bmcuaAppbmRleCAyZjBlMGQzNWE5OWZjODBjM2MyOWU5MDQwZDllZWUzNTgxY2Q1NjhiLi5lZjU2
ODAxYTc3MTFkZjVhMmNiNTU4MTNiZTU2NzNmMTkwMzI4ZTczIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vU3BhY2VTcGxpdFN0cmluZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9T
cGFjZVNwbGl0U3RyaW5nLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDA3LCAyMDA4LCAyMDEwLCAyMDExLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjEsOSArMjEsNyBAQAogI2lmbmRl
ZiBTcGFjZVNwbGl0U3RyaW5nX2gKICNkZWZpbmUgU3BhY2VTcGxpdFN0cmluZ19oCiAKLSNpbmNs
dWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+Ci0jaW5j
bHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5n
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTUxLDI2ICs0OSwyNiBAQCBwdWJsaWM6CiAg
ICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQogICAgIHN0YXRpYyBw
dHJkaWZmX3Qgc2l6ZU1lbW9yeU9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTcGFj
ZVNwbGl0U3RyaW5nRGF0YSwgbV9zaXplKTsgfQogCi0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBv
cGVyYXRvcltdKHNpemVfdCBpKQorICAgIGNvbnN0IEF0b21pY1N0cmluZyYgb3BlcmF0b3JbXSh1
bnNpZ25lZCBpKQogICAgIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaSA8IG1fc2l6ZSk7CiAg
ICAgICAgIHJldHVybiB0b2tlbkFycmF5U3RhcnQoKVtpXTsKICAgICB9CiAKLSAgICBpbmxpbmUg
dm9pZCByZWYoKQorICAgIHZvaWQgcmVmKCkKICAgICB7CiAgICAgICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7CiAgICAgICAgIEFTU0VSVChtX3JlZkNvdW50KTsKICAgICAgICAgKyttX3JlZkNv
dW50OwogICAgIH0KIAotICAgIGlubGluZSB2b2lkIGRlcmVmKCkKKyAgICB2b2lkIGRlcmVmKCkK
ICAgICB7CiAgICAgICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgICAgIEFTU0VSVCht
X3JlZkNvdW50KTsKICAgICAgICAgdW5zaWduZWQgdGVtcFJlZkNvdW50ID0gbV9yZWZDb3VudCAt
IDE7CiAgICAgICAgIGlmICghdGVtcFJlZkNvdW50KSB7Ci0gICAgICAgICAgICBTcGFjZVNwbGl0
U3RyaW5nRGF0YTo6ZGVzdHJveSh0aGlzKTsKKyAgICAgICAgICAgIGRlc3Ryb3kodGhpcyk7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgbV9yZWZDb3VudCA9IHRlbXBS
ZWZDb3VudDsKQEAgLTg5LDcgKzg3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgQVNTRVJUX1dJVEhf
TUVTU0FHRShtX3NpemUsICJTcGFjZVNwbGl0U3RyaW5nRGF0YSBzaG91bGQgbmV2ZXIgYmUgZW1w
dHkgYnkgZGVmaW5pdGlvbi4gVGhlcmUgaXMgbm8gZGlmZmVyZW5jZSBiZXR3ZWVuIGVtcHR5IGFu
ZCBudWxsLiIpOwogICAgIH0KIAotICAgIGlubGluZSB+U3BhY2VTcGxpdFN0cmluZ0RhdGEoKSB7
IH0KKyAgICB+U3BhY2VTcGxpdFN0cmluZ0RhdGEoKSB7IH0KICAgICBzdGF0aWMgdm9pZCBkZXN0
cm95KFNwYWNlU3BsaXRTdHJpbmdEYXRhKik7CiAKICAgICBBdG9taWNTdHJpbmcqIHRva2VuQXJy
YXlTdGFydCgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8QXRvbWljU3RyaW5nKj4odGhpcyAr
IDEpOyB9CkBAIC0xMTIsOSArMTEwLDkgQEAgcHVibGljOgogICAgIGJvb2wgY29udGFpbnMoY29u
c3QgQXRvbWljU3RyaW5nJiBzdHJpbmcpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YSAmJiBtX2RhdGEt
PmNvbnRhaW5zKHN0cmluZyk7IH0KICAgICBib29sIGNvbnRhaW5zQWxsKGNvbnN0IFNwYWNlU3Bs
aXRTdHJpbmcmIG5hbWVzKSBjb25zdCB7IHJldHVybiAhbmFtZXMubV9kYXRhIHx8IChtX2RhdGEg
JiYgbV9kYXRhLT5jb250YWluc0FsbCgqbmFtZXMubV9kYXRhKSk7IH0KIAotICAgIHNpemVfdCBz
aXplKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhID8gbV9kYXRhLT5zaXplKCkgOiAwOyB9CisgICAg
dW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YSA/IG1fZGF0YS0+c2l6ZSgpIDog
MDsgfQogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFtX2RhdGE7IH0KLSAgICBj
b25zdCBBdG9taWNTdHJpbmcmIG9wZXJhdG9yW10oc2l6ZV90IGkpIGNvbnN0CisgICAgY29uc3Qg
QXRvbWljU3RyaW5nJiBvcGVyYXRvcltdKHVuc2lnbmVkIGkpIGNvbnN0CiAgICAgewogICAgICAg
ICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihtX2RhdGEpOwogICAgICAgICByZXR1
cm4gKCptX2RhdGEpW2ldOwpAQCAtMTI4LDcgKzEyNiw2IEBAIHB1YmxpYzoKICAgICB9CiAKIHBy
aXZhdGU6Ci0KICAgICBSZWZQdHI8U3BhY2VTcGxpdFN0cmluZ0RhdGE+IG1fZGF0YTsKIH07CiAK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBhMTQyMzdmMjhkNTQ1NzMwMWQ0NzU1Zjk3NzU5Y2E5N2U1YTg1MmE5Li5hZTRhN2E1
YmMwY2EwOGZiZjRiNTkxMWVmMzU1NmUwM2IzODk1NzkwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAK
KzIwMTQtMDUtMjYgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIENs
YXNzIG5hbWUgbWF0Y2hpbmcgc2hvdWxkIHVzZSBBU0NJSSBjYXNlLWluc2Vuc2l0aXZlIG1hdGNo
aW5nLCBub3QgVW5pY29kZSBjYXNlIGZvbGRpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMzI5MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogZmFzdC9kb20vZ2V0RWxlbWVudHNCeUNsYXNzTmFtZS9B
U0NJSS1jYXNlLWluc2Vuc2l0aXZlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFz
dC9kb20vZ2V0RWxlbWVudHNCeUNsYXNzTmFtZS9BU0NJSS1jYXNlLWluc2Vuc2l0aXZlLmh0bWw6
IEFkZGVkLgorICAgICAgICAqIGZhc3QvZG9tL2dldEVsZW1lbnRzQnlDbGFzc05hbWUvY2FzZS1z
ZW5zaXRpdmUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9nZXRFbGVt
ZW50c0J5Q2xhc3NOYW1lL2Nhc2Utc2Vuc2l0aXZlLmh0bWw6IEFkZGVkLgorCiAyMDE0LTA1LTIz
ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFNjcm9s
bGluZyB0ZXN0cyBzaG91bGQgbm90IHRyeSB0byBkdW1wIHBpeGVscwpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvZmFzdC9kb20vZ2V0RWxlbWVudHNCeUNsYXNzTmFtZS9BU0NJSS1jYXNlLWluc2Vu
c2l0aXZlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL2dldEVsZW1lbnRzQnlD
bGFzc05hbWUvQVNDSUktY2FzZS1pbnNlbnNpdGl2ZS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
OWY5MzA3ZmI5YzZhZGUwYzcwZWQ0NzVmMDE1ZTJkOGZhOTZmMjc3YQotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL2dldEVsZW1lbnRzQnlDbGFzc05hbWUvQVNDSUktY2Fz
ZS1pbnNlbnNpdGl2ZS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw4IEBACitGQUlMIGdldEJ5Q2xh
c3NOYW1lKCdhJykgc2hvdWxkIGJlIGEgQS4gV2FzIGEuCitGQUlMIGdldEJ5Q2xhc3NOYW1lKCdB
Jykgc2hvdWxkIGJlIGEgQS4gV2FzIEEuCitQQVNTIGdldEJ5Q2xhc3NOYW1lKCfDpCcpIGlzICLD
pCIKK1BBU1MgZ2V0QnlDbGFzc05hbWUoJ8OEJykgaXMgIsOEIgorUEFTUyBzdWNjZXNzZnVsbHlQ
YXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2Zhc3QvZG9tL2dldEVsZW1lbnRzQnlDbGFzc05hbWUvQVNDSUktY2FzZS1pbnNlbnNpdGl2ZS5o
dG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vZ2V0RWxlbWVudHNCeUNsYXNzTmFtZS9BU0NJSS1j
YXNlLWluc2Vuc2l0aXZlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODQyNTM3MWYyYTFkNWQxYTMwNDNkOTVm
ZjFlYzkxMTlhZWI0NWFhNwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9t
L2dldEVsZW1lbnRzQnlDbGFzc05hbWUvQVNDSUktY2FzZS1pbnNlbnNpdGl2ZS5odG1sCkBAIC0w
LDAgKzEsMzAgQEAKKzwhRE9DVFlQRSBodG1sPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1U
eXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgorCis8c2NyaXB0IHNyYz0i
Li4vLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QuanMiPjwvc2NyaXB0PgorCis8ZGl2IGlkPSJhIiBj
bGFzcz0iYSI+PC9kaXY+Cis8ZGl2IGlkPSLDpCIgY2xhc3M9IsOkIj48L2Rpdj4KKzxkaXYgaWQ9
IkEiIGNsYXNzPSJBIj48L2Rpdj4KKzxkaXYgaWQ9IsOEIiBjbGFzcz0iw4QiPjwvZGl2PgorCis8
c2NyaXB0PgorCitmdW5jdGlvbiBnZXRCeUNsYXNzTmFtZShjbGFzc05hbWVzKQoreworICAgIHZh
ciBub2RlcyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoY2xhc3NOYW1lcyk7Cisg
ICAgdmFyIHJlc3VsdCA9ICIiOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3Ro
OyArK2kpIHsKKyAgICAgICAgaWYgKGkpCisgICAgICAgICAgICByZXN1bHQgKz0gIiAiOworICAg
ICAgICByZXN1bHQgKz0gbm9kZXNbaV0uaWQ7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK3Nob3VsZEJlRXF1YWxUb1N0cmluZygiZ2V0QnlDbGFzc05hbWUoJ2EnKSIsICJhIEEiKTsK
K3Nob3VsZEJlRXF1YWxUb1N0cmluZygiZ2V0QnlDbGFzc05hbWUoJ0EnKSIsICJhIEEiKTsKK3No
b3VsZEJlRXF1YWxUb1N0cmluZygiZ2V0QnlDbGFzc05hbWUoJ8OkJykiLCAiw6QiKTsKK3Nob3Vs
ZEJlRXF1YWxUb1N0cmluZygiZ2V0QnlDbGFzc05hbWUoJ8OEJykiLCAiw4QiKTsKKworPC9zY3Jp
cHQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9nZXRFbGVtZW50c0J5Q2xhc3NO
YW1lL2Nhc2Utc2Vuc2l0aXZlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL2dl
dEVsZW1lbnRzQnlDbGFzc05hbWUvY2FzZS1zZW5zaXRpdmUtZXhwZWN0ZWQudHh0Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjYxMzA4YTFiZjM3NmVhN2QwNzVjYmMwMDQ3ZjRmMDU3MDVlY2ZkNzAKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9nZXRFbGVtZW50c0J5Q2xhc3NOYW1lL2Nhc2Ut
c2Vuc2l0aXZlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDggQEAKK1BBU1MgZ2V0QnlDbGFzc05h
bWUoJ2EnKSBpcyAiYSIKK1BBU1MgZ2V0QnlDbGFzc05hbWUoJ0EnKSBpcyAiQSIKK1BBU1MgZ2V0
QnlDbGFzc05hbWUoJ8OkJykgaXMgIsOkIgorUEFTUyBnZXRCeUNsYXNzTmFtZSgnw4QnKSBpcyAi
w4QiCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vZ2V0RWxlbWVudHNCeUNsYXNzTmFtZS9j
YXNlLXNlbnNpdGl2ZS5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vZ2V0RWxlbWVudHNCeUNs
YXNzTmFtZS9jYXNlLXNlbnNpdGl2ZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc1YzA0MjVlNGExODIzNzAx
NzEzOTViNzQ4ZjljM2FkM2Y5ODkzOTgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9m
YXN0L2RvbS9nZXRFbGVtZW50c0J5Q2xhc3NOYW1lL2Nhc2Utc2Vuc2l0aXZlLmh0bWwKQEAgLTAs
MCArMSwzMCBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8v
RU4iPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7
IGNoYXJzZXQ9VVRGLTgiPgorCis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vcmVzb3VyY2VzL2pzLXRl
c3QuanMiPjwvc2NyaXB0PgorCis8ZGl2IGlkPSJhIiBjbGFzcz0iYSI+PC9kaXY+Cis8ZGl2IGlk
PSLDpCIgY2xhc3M9IsOkIj48L2Rpdj4KKzxkaXYgaWQ9IkEiIGNsYXNzPSJBIj48L2Rpdj4KKzxk
aXYgaWQ9IsOEIiBjbGFzcz0iw4QiPjwvZGl2PgorCis8c2NyaXB0PgorCitmdW5jdGlvbiBnZXRC
eUNsYXNzTmFtZShjbGFzc05hbWVzKQoreworICAgIHZhciBub2RlcyA9IGRvY3VtZW50LmdldEVs
ZW1lbnRzQnlDbGFzc05hbWUoY2xhc3NOYW1lcyk7CisgICAgdmFyIHJlc3VsdCA9ICIiOworICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgaWYgKGkp
CisgICAgICAgICAgICByZXN1bHQgKz0gIiAiOworICAgICAgICByZXN1bHQgKz0gbm9kZXNbaV0u
aWQ7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3Nob3VsZEJlRXF1YWxUb1N0cmlu
ZygiZ2V0QnlDbGFzc05hbWUoJ2EnKSIsICJhIik7CitzaG91bGRCZUVxdWFsVG9TdHJpbmcoImdl
dEJ5Q2xhc3NOYW1lKCdBJykiLCAiQSIpOworc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJnZXRCeUNs
YXNzTmFtZSgnw6QnKSIsICLDpCIpOworc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJnZXRCeUNsYXNz
TmFtZSgnw4QnKSIsICLDhCIpOworCis8L3NjcmlwdD4K
</data>
<flag name="review"
          id="256567"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>