<?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>127012</bug_id>
          
          <creation_ts>2014-01-14 14:32:32 -0800</creation_ts>
          <short_desc>Use KeyedCoding as a persistent storage mechanism for blobs</short_desc>
          <delta_ts>2014-01-17 08:58:21 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>127011</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Brady Eidson">beidson</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>alecflett</cc>
    
    <cc>andersca</cc>
    
    <cc>commit-queue</cc>
    
    <cc>jsbell</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>968042</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-01-14 14:32:32 -0800</bug_when>
    <thetext>Use KeyedCoding as a persistent storage mechanism for blobs

This is needed to support https://bugs.webkit.org/show_bug.cgi?id=127011 and other future IDB work.

Anders says he has KeyedEncoding done and KeyedDecoding partially/almost done with a patch at home.  I hope to take over finishing that asap.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>968044</commentid>
    <comment_count>1</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-01-14 14:33:42 -0800</bug_when>
    <thetext>In Radar as &lt;rdar://problem/15818481&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>968556</commentid>
    <comment_count>2</comment_count>
      <attachid>221323</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-01-15 18:42:20 -0800</bug_when>
    <thetext>Created attachment 221323
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>968557</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-01-15 18:44:16 -0800</bug_when>
    <thetext>Attachment 221323 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBKeyPath.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBKeyPath.h&apos;, u&apos;Source/WebCore/WebCore.exp.in&apos;, u&apos;Source/WebCore/platform/KeyedCoding.h&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit2/DatabaseProcess/IndexedDB/IDBSerialization.cpp&apos;, u&apos;Source/WebKit2/DatabaseProcess/IndexedDB/IDBSerialization.h&apos;, u&apos;Source/WebKit2/DatabaseProcess/IndexedDB/sqlite/UniqueIDBDatabaseBackingStoreSQLite.cpp&apos;, u&apos;Source/WebKit2/Shared/cf/KeyedDecoder.cpp&apos;, u&apos;Source/WebKit2/Shared/cf/KeyedDecoder.h&apos;, u&apos;Source/WebKit2/Shared/cf/KeyedEncoder.cpp&apos;, u&apos;Source/WebKit2/Shared/cf/KeyedEncoder.h&apos;, u&apos;Source/WebKit2/WebKit2.xcodeproj/project.pbxproj&apos;, &apos;--commit-queue&apos;]&quot; exit_code: 1
ERROR: Source/WebCore/Modules/indexeddb/IDBKeyPath.cpp:286:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/Modules/indexeddb/IDBKeyPath.cpp:301:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 2 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>968895</commentid>
    <comment_count>4</comment_count>
      <attachid>221323</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2014-01-16 13:11:04 -0800</bug_when>
    <thetext>Comment on attachment 221323
Patch v1

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

&gt; Source/WebCore/platform/KeyedCoding.h:79
&gt; +        while (beginArrayElement()) {

If beginArrayElement() returns false result will be uninitialized. I&apos;d initialize result to true and change the loop to

while (true) { if (!beginArrayElement()) { result = false; break; }

&gt; Source/WebCore/platform/KeyedCoding.h:81
&gt; +            objects.append(T());
&gt; +            result = function(*this, objects.last());

Instead of appending to the array do something like:
T element;
if (!function(*this, t)) {
    result = false;
    break;
}

object.append(std::move(element));

&gt; Source/WebCore/platform/KeyedCoding.h:115
&gt; +    virtual PassRefPtr&lt;SharedBuffer&gt; createBuffer() = 0;

Let&apos;s call this finishEncoding() instead to indicate that it can only be called when you&apos;re done.

&gt; Source/WebKit2/ChangeLog:7
&gt; +

Extra newline.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>968905</commentid>
    <comment_count>5</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-01-16 13:33:44 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 221323 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=221323&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/KeyedCoding.h:79
&gt; &gt; +        while (beginArrayElement()) {
&gt; 
&gt; If beginArrayElement() returns false result will be uninitialized. I&apos;d initialize result to true and change the loop to
&gt; 
&gt; while (true) { if (!beginArrayElement()) { result = false; break; }
&gt; 

`result` is only about the success of the individual object function.  It&apos;s okay for beginArrayElement to return false, as that just means there&apos;s no more elements in the array.

So it seems the only change needed here is to initialize result to true, indicating that no individual object failed to decode.

&gt; &gt; Source/WebCore/platform/KeyedCoding.h:81
&gt; &gt; +            objects.append(T());
&gt; &gt; +            result = function(*this, objects.last());
&gt; 
&gt; Instead of appending to the array do something like:
&gt; T element;
&gt; if (!function(*this, t)) {
&gt;     result = false;
&gt;     break;
&gt; }
&gt; 
&gt; object.append(std::move(element));
&gt; 

Looks good.

&gt; &gt; Source/WebCore/platform/KeyedCoding.h:115
&gt; &gt; +    virtual PassRefPtr&lt;SharedBuffer&gt; createBuffer() = 0;
&gt; 
&gt; Let&apos;s call this finishEncoding() instead to indicate that it can only be called when you&apos;re done.

Sounds good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>968911</commentid>
    <comment_count>6</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-01-16 13:41:51 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/162148</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>968928</commentid>
    <comment_count>7</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-01-16 14:02:09 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/162151 as a build fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>969141</commentid>
    <comment_count>8</comment_count>
      <attachid>221323</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-01-17 08:58:21 -0800</bug_when>
    <thetext>Comment on attachment 221323
Patch v1

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

&gt; Source/WebKit2/Shared/cf/KeyedDecoder.h:51
&gt; +    virtual bool decodeInt64(const String&amp; key, int64_t&amp;);
&gt; +    virtual bool decodeUInt32(const String&amp; key, uint32_t&amp;);
&gt; +    virtual bool decodeString(const String&amp; key, String&amp;);
&gt; +
&gt; +    virtual bool beginObject(const String&amp; key);
&gt; +    virtual void endObject();
&gt; +
&gt; +    virtual bool beginArray(const String&amp; key);
&gt; +    virtual bool beginArrayElement();
&gt; +    virtual void endArrayElement();
&gt; +    virtual void endArray();

Should add &quot;override&quot; to all of these.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>221323</attachid>
            <date>2014-01-15 18:42:20 -0800</date>
            <delta_ts>2014-01-17 08:58:20 -0800</delta_ts>
            <desc>Patch v1</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>25837</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBkMmNiZTI3Li41OTVkZWUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQg
QEAKKzIwMTQtMDEtMTUgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAg
ICAgIFVzZSBLZXllZENvZGluZyBhcyBhIHBlcnNpc3RlbnQgc3RvcmFnZSBtZWNoYW5pc20gZm9y
IGJsb2JzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MjcwMTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGQgYmFzaWMgS2V5ZWREZWNvZGVyIGludGVyZmFjZSB0aGF0IGlzIHRoZSBpbnZlcnNlIG9mIEtl
eWVkRW5jb2RlcjoKKyAgICAgICAgKiBwbGF0Zm9ybS9LZXllZENvZGluZy5oOgorICAgICAgICAo
V2ViQ29yZTo6S2V5ZWREZWNvZGVyOjpkZWNvZGVWZXJpZmllZEVudW0pOgorICAgICAgICAoV2Vi
Q29yZTo6S2V5ZWREZWNvZGVyOjpkZWNvZGVPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6S2V5
ZWREZWNvZGVyOjpkZWNvZGVPYmplY3RzKToKKworICAgICAgICBVc2UgS2V5ZWRFbmNvZGVyL0Rl
Y29kZXIgdG8gZW5jb2RlL2RlY29kZSBJREJLZXlQYXRoOgorICAgICAgICAqIE1vZHVsZXMvaW5k
ZXhlZGRiL0lEQktleVBhdGguY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5UGF0aDo6ZW5j
b2RlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleVBhdGg6OmRlY29kZSk6CisgICAgICAgICog
TW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0aC5oOgorCisgICAgICAgICogV2ViQ29yZS5leHAu
aW46CisKIDIwMTQtMDEtMTUgIFpvbHRhbiBIb3J2YXRoICA8em9sdGFuQHdlYmtpdC5vcmc+CiAK
ICAgICAgICAgV29yZE1lYXN1cmVtZW50IGlzIGEgc3RydWN0LCBub3QgYSBjbGFzcwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0aC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlQYXRoLmNwcAppbmRleCAwYTBm
OWE2Li4yYjQ2ZmY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJLZXlQYXRoLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJLZXlQYXRoLmNwcApAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKElOREVYRURfREFU
QUJBU0UpCiAKKyNpbmNsdWRlICJLZXllZENvZGluZy5oIgogI2luY2x1ZGUgPHd0Zi9BU0NJSUNU
eXBlLmg+CiAjaW5jbHVkZSA8d3RmL2R0b2EuaD4KICNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmlj
b2RlLmg+CkBAIC0yNjEsNiArMjYyLDQ5IEBAIElEQktleVBhdGggSURCS2V5UGF0aDo6aXNvbGF0
ZWRDb3B5KCkgY29uc3QKICAgICByZXR1cm4gcmVzdWx0OwogfQogCit2b2lkIElEQktleVBhdGg6
OmVuY29kZShLZXllZEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2Rlci5lbmNv
ZGVFbnVtKCJ0eXBlIiwgbV90eXBlKTsKKyAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgIGNhc2Ug
SURCS2V5UGF0aDo6TnVsbFR5cGU6CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSURCS2V5UGF0
aDo6U3RyaW5nVHlwZToKKyAgICAgICAgZW5jb2Rlci5lbmNvZGVTdHJpbmcoInN0cmluZyIsIG1f
c3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJREJLZXlQYXRoOjpBcnJheVR5cGU6
CisgICAgICAgIGVuY29kZXIuZW5jb2RlT2JqZWN0cygiYXJyYXkiLCBtX2FycmF5LmJlZ2luKCks
IG1fYXJyYXkuZW5kKCksIFtdKFdlYkNvcmU6OktleWVkRW5jb2RlciYgZW5jb2RlciwgY29uc3Qg
U3RyaW5nJiBzdHJpbmcpIHsKKyAgICAgICAgICAgIGVuY29kZXIuZW5jb2RlU3RyaW5nKCJzdHJp
bmciLCBzdHJpbmcpOworICAgICAgICB9KTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfTsKK30KKworYm9vbCBJREJLZXlQ
YXRoOjpkZWNvZGUoS2V5ZWREZWNvZGVyJiBkZWNvZGVyLCBJREJLZXlQYXRoJiByZXN1bHQpCit7
CisgICAgYXV0byBlbnVtRnVuY3Rpb24gPSBbXShpbnQ2NF90IHZhbHVlKSB7CisgICAgICAgIHJl
dHVybiB2YWx1ZSA9PSBOdWxsVHlwZSB8fCB2YWx1ZSA9PSBTdHJpbmdUeXBlIHx8IHZhbHVlID09
IEFycmF5VHlwZTsKKyAgICB9OworCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZVZlcmlmaWVkRW51
bSgidHlwZSIsIHJlc3VsdC5tX3R5cGUsIGVudW1GdW5jdGlvbikpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGlmIChyZXN1bHQubV90eXBlID09IE51bGxUeXBlKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKworICAgIGlmIChyZXN1bHQubV90eXBlID09IFN0cmluZ1R5cGUpCisgICAgICAg
IHJldHVybiBkZWNvZGVyLmRlY29kZVN0cmluZygic3RyaW5nIiwgcmVzdWx0Lm1fc3RyaW5nKTsK
KworICAgIEFTU0VSVChyZXN1bHQubV90eXBlID09IEFycmF5VHlwZSk7CisKKyAgICBhdXRvIGFy
cmF5RnVuY3Rpb24gPSBbXShLZXllZERlY29kZXImIGRlY29kZXIsIFN0cmluZyYgcmVzdWx0KSB7
CisgICAgICAgIHJldHVybiBkZWNvZGVyLmRlY29kZVN0cmluZygic3RyaW5nIiwgcmVzdWx0KTsK
KyAgICB9OworCisgICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlT2JqZWN0cygiYXJyYXkiLCByZXN1
bHQubV9hcnJheSwgYXJyYXlGdW5jdGlvbik7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IAogI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0aC5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0aC5oCmluZGV4IDEzNWY2MTMuLjZkY2Q3ZGUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlQYXRoLmgKQEAgLTMz
LDYgKzMzLDkgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBLZXllZERlY29kZXI7
CitjbGFzcyBLZXllZEVuY29kZXI7CisKIGVudW0gSURCS2V5UGF0aFBhcnNlRXJyb3IgewogICAg
IElEQktleVBhdGhQYXJzZUVycm9yTm9uZSwKICAgICBJREJLZXlQYXRoUGFyc2VFcnJvclN0YXJ0
LApAQCAtNzQsNiArNzcsOSBAQCBwdWJsaWM6CiAKICAgICBJREJLZXlQYXRoIGlzb2xhdGVkQ29w
eSgpIGNvbnN0OwogCisgICAgdm9pZCBlbmNvZGUoS2V5ZWRFbmNvZGVyJikgY29uc3Q7CisgICAg
c3RhdGljIGJvb2wgZGVjb2RlKEtleWVkRGVjb2RlciYsIElEQktleVBhdGgmKTsKKwogcHJpdmF0
ZToKICAgICBUeXBlIG1fdHlwZTsKICAgICBTdHJpbmcgbV9zdHJpbmc7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhw
LmluCmluZGV4IGY3N2MzMWIuLjgxMTk4YTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZXhwLmluCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCkBAIC0zMDcw
LDggKzMwNzAsMTAgQEAgX19aTjdXZWJDb3JlMjZNb2NrTWVkaWFQbGF5ZXJNZWRpYVNvdXJjZTE5
cmVnaXN0ZXJNZWRpYUVuZ2luZUVQRnZQRk4zV1RGMTBQYXNzT3cKICNlbmRpZgogCiAjaWYgRU5B
QkxFKElOREVYRURfREFUQUJBU0UpCitfX1pOSzdXZWJDb3JlMTBJREJLZXlQYXRoNmVuY29kZUVS
TlNfMTJLZXllZEVuY29kZXJFCiBfX1pON1dlYkNvcmUxMElEQktleVBhdGhDMUVSS04zV1RGNlN0
cmluZ0UKIF9fWk43V2ViQ29yZTEwSURCS2V5UGF0aEMxRVJLTjNXVEY2VmVjdG9ySU5TMV82U3Ry
aW5nRUxtMEVOUzFfMTVDcmFzaE9uT3ZlcmZsb3dFRUUKK19fWk43V2ViQ29yZTEwSURCS2V5UGF0
aDZkZWNvZGVFUk5TXzEyS2V5ZWREZWNvZGVyRVJTMF8KIF9fWk43V2ViQ29yZTE4SURCRGF0YWJh
c2VCYWNrZW5kMTRvcGVuQ29ubmVjdGlvbkVOM1dURjEwUGFzc1JlZlB0cklOU18xMklEQkNhbGxi
YWNrc0VFRU5TMl9JTlNfMjBJREJEYXRhYmFzZUNhbGxiYWNrc0VFRXh5CiBfX1pON1dlYkNvcmUx
OElEQkRhdGFiYXNlQmFja2VuZDZjcmVhdGVFUktOM1dURjZTdHJpbmdFUzRfUE5TXzI2SURCRmFj
dG9yeUJhY2tlbmRJbnRlcmZhY2VFUk5TXzE5SURCU2VydmVyQ29ubmVjdGlvbkUKIF9fWk43V2Vi
Q29yZTE4SURCRGF0YWJhc2VCYWNrZW5kRDFFdgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vS2V5ZWRDb2RpbmcuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0tleWVkQ29k
aW5nLmgKaW5kZXggOGYyZWI2OC4uMWZkYzUxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vS2V5ZWRDb2RpbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9LZXll
ZENvZGluZy5oCkBAIC0yNiwxNiArMjYsNzYgQEAKICNpZm5kZWYgS2V5ZWRDb2RpbmdfaAogI2Rl
ZmluZSBLZXllZENvZGluZ19oCiAKKyNpbmNsdWRlIDxmdW5jdGlvbmFsPgogI2luY2x1ZGUgPHd0
Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKK2NsYXNzIFNoYXJlZEJ1ZmZlcjsKKwogY2xhc3MgS2V5ZWREZWNvZGVyIHsKIHByb3Rl
Y3RlZDoKICAgICB2aXJ0dWFsIH5LZXllZERlY29kZXIoKSB7IH0KIAogcHVibGljOgorICAgIHZp
cnR1YWwgYm9vbCBkZWNvZGVJbnQ2NChjb25zdCBTdHJpbmcmIGtleSwgaW50NjRfdCYpID0gMDsK
ICAgICB2aXJ0dWFsIGJvb2wgZGVjb2RlVUludDMyKGNvbnN0IFN0cmluZyYga2V5LCB1aW50MzJf
dCYpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgZGVjb2RlU3RyaW5nKGNvbnN0IFN0cmluZyYga2V5
LCBTdHJpbmcmKSA9IDA7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBGPgor
ICAgIGJvb2wgZGVjb2RlVmVyaWZpZWRFbnVtKGNvbnN0IFN0cmluZyYga2V5LCBUJiB2YWx1ZSwg
RiYmIGZ1bmN0aW9uKQorICAgIHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2VudW08
VD46OnZhbHVlLCAiVCBtdXN0IGJlIGFuIGVudW0gdHlwZSIpOworCisgICAgICAgIGludDY0X3Qg
aW50VmFsdWU7CisgICAgICAgIGlmICghZGVjb2RlSW50NjQoa2V5LCBpbnRWYWx1ZSkpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKCFmdW5jdGlvbihpbnRWYWx1ZSkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgdmFsdWUgPSBzdGF0aWNfY2Fz
dDxUPihpbnRWYWx1ZSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEY+CisgICAgYm9vbCBkZWNvZGVPYmplY3QoY29uc3Qg
U3RyaW5nJiBrZXksIFQmIG9iamVjdCwgRiYmIGZ1bmN0aW9uKQorICAgIHsKKyAgICAgICAgaWYg
KCFiZWdpbk9iamVjdChrZXkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBi
b29sIHJlc3VsdCA9IGZ1bmN0aW9uKCp0aGlzLCBvYmplY3QpOworICAgICAgICBlbmRPYmplY3Qo
KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBGPgorICAgIGJvb2wgZGVjb2RlT2JqZWN0cyhjb25zdCBTdHJpbmcmIGtl
eSwgVmVjdG9yPFQ+JiBvYmplY3RzLCBGJiYgZnVuY3Rpb24pCisgICAgeworICAgICAgICBpZiAo
IWJlZ2luQXJyYXkoa2V5KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBi
b29sIHJlc3VsdDsKKyAgICAgICAgd2hpbGUgKGJlZ2luQXJyYXlFbGVtZW50KCkpIHsKKyAgICAg
ICAgICAgIG9iamVjdHMuYXBwZW5kKFQoKSk7CisgICAgICAgICAgICByZXN1bHQgPSBmdW5jdGlv
bigqdGhpcywgb2JqZWN0cy5sYXN0KCkpOworICAgICAgICAgICAgZW5kQXJyYXlFbGVtZW50KCk7
CisgICAgICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorCisgICAgICAgIGVuZEFycmF5KCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fQorCitwcml2YXRlOgorICAgIHZpcnR1YWwgYm9vbCBiZWdpbk9iamVjdChjb25zdCBTdHJpbmcm
IGtleSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBlbmRPYmplY3QoKSA9IDA7CisKKyAgICB2aXJ0
dWFsIGJvb2wgYmVnaW5BcnJheShjb25zdCBTdHJpbmcmIGtleSkgPSAwOworICAgIHZpcnR1YWwg
Ym9vbCBiZWdpbkFycmF5RWxlbWVudCgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZW5kQXJyYXlF
bGVtZW50KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBlbmRBcnJheSgpID0gMDsKIH07CiAKIGNs
YXNzIEtleWVkRW5jb2RlciB7CkBAIC01Miw2ICsxMTIsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCB2b2lkIGVuY29kZURvdWJsZShjb25zdCBTdHJpbmcmIGtleSwgZG91YmxlKSA9IDA7CiAgICAg
dmlydHVhbCB2b2lkIGVuY29kZVN0cmluZyhjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5n
JikgPSAwOwogCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlQnVm
ZmVyKCkgPSAwOworCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICB2b2lkIGVuY29kZUVu
dW0oY29uc3QgU3RyaW5nJiBrZXksIFQgdmFsdWUpCiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IGYxZjRi
ZjIuLmQzYjRmZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MiBAQAorMjAxNC0wMS0xNSAgQnJh
ZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIEtleWVkQ29kaW5n
IGFzIGEgcGVyc2lzdGVudCBzdG9yYWdlIG1lY2hhbmlzbSBmb3IgYmxvYnMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNzAxMgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisKKyAgICAgICAgQWRkIGEgd2F5IHRvIGdldCB0
aGUgZW5jb2RlZCBidWZmZXIgdG8gc2F2ZToKKyAgICAgICAgKiBTaGFyZWQvY2YvS2V5ZWRFbmNv
ZGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6S2V5ZWRFbmNvZGVyOjpjcmVhdGVCdWZmZXIpOgor
ICAgICAgICAqIFNoYXJlZC9jZi9LZXllZEVuY29kZXIuaDoKKworICAgICAgICBBZGQgYSBXZWJL
aXQgS2V5ZWREZWNvZGVyIGZvciBDRiBwbGF0Zm9ybXMgdGhhdCBjYW4gZGVjb2RlIHRoZSBwcmV2
aW91c2x5IGVuY29kZWQgYnVmZmVyOgorICAgICAgICAqIFNoYXJlZC9jZi9LZXllZERlY29kZXIu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6S2V5ZWREZWNvZGVyOjpLZXllZERlY29kZXIp
OgorICAgICAgICAoV2ViS2l0OjpLZXllZERlY29kZXI6On5LZXllZERlY29kZXIpOgorICAgICAg
ICAoV2ViS2l0OjpLZXllZERlY29kZXI6OmRlY29kZUludDY0KToKKyAgICAgICAgKFdlYktpdDo6
S2V5ZWREZWNvZGVyOjpkZWNvZGVVSW50MzIpOgorICAgICAgICAoV2ViS2l0OjpLZXllZERlY29k
ZXI6OmRlY29kZVN0cmluZyk6CisgICAgICAgIChXZWJLaXQ6OktleWVkRGVjb2Rlcjo6YmVnaW5P
YmplY3QpOgorICAgICAgICAoV2ViS2l0OjpLZXllZERlY29kZXI6OmVuZE9iamVjdCk6CisgICAg
ICAgIChXZWJLaXQ6OktleWVkRGVjb2Rlcjo6YmVnaW5BcnJheSk6CisgICAgICAgIChXZWJLaXQ6
OktleWVkRGVjb2Rlcjo6YmVnaW5BcnJheUVsZW1lbnQpOgorICAgICAgICAoV2ViS2l0OjpLZXll
ZERlY29kZXI6OmVuZEFycmF5RWxlbWVudCk6CisgICAgICAgIChXZWJLaXQ6OktleWVkRGVjb2Rl
cjo6ZW5kQXJyYXkpOgorICAgICAgICAqIFNoYXJlZC9jZi9LZXllZERlY29kZXIuaDoKKworICAg
ICAgICBDcmVhdGUgYSBXZWJLaXQgS2V5ZWRFbmNvZGVyL0RlY29kZXIgYW5kIHVzZSB0byBlbmNv
ZGUvZGVjb2RlIElEQktleVBhdGhzOgorICAgICAgICAqIERhdGFiYXNlUHJvY2Vzcy9JbmRleGVk
REIvSURCU2VyaWFsaXphdGlvbi5jcHA6CisgICAgICAgIChXZWJLaXQ6OnNlcmlhbGl6ZUlEQktl
eVBhdGgpOgorICAgICAgICAoV2ViS2l0OjpkZXNlcmlhbGl6ZUlEQktleVBhdGgpOgorICAgICAg
ICAqIERhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvSURCU2VyaWFsaXphdGlvbi5oOgorCisgICAg
ICAgICogRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9zcWxpdGUvVW5pcXVlSURCRGF0YWJhc2VC
YWNraW5nU3RvcmVTUUxpdGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpVbmlxdWVJREJEYXRhYmFz
ZUJhY2tpbmdTdG9yZVNRTGl0ZTo6Y3JlYXRlT2JqZWN0U3RvcmUpOgorCisgICAgICAgICogV2Vi
S2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCiAyMDE0LTAxLTE1ICBDYXJsb3MgR2Fy
Y2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBXZWIgcHJv
Y2VzcyBzb21ldGltZXMgY3Jhc2hlcyB3aGVuIHByaW50aW5nIGluIHN5bmNocm9ub3VzIG1vZGUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvSURC
U2VyaWFsaXphdGlvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhl
ZERCL0lEQlNlcmlhbGl6YXRpb24uY3BwCmluZGV4IDhjNmVkMTAuLmE5OTI3MzEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvSURCU2VyaWFsaXph
dGlvbi5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9J
REJTZXJpYWxpemF0aW9uLmNwcApAQCAtMjgsMjQgKzI4LDI5IEBACiAjaWYgRU5BQkxFKElOREVY
RURfREFUQUJBU0UpCiAKICNpbmNsdWRlICJBcmd1bWVudEVuY29kZXIuaCIKKyNpbmNsdWRlICJL
ZXllZERlY29kZXIuaCIKKyNpbmNsdWRlICJLZXllZEVuY29kZXIuaCIKICNpbmNsdWRlIDxXZWJD
b3JlL0lEQktleVBhdGguaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFj
ZSBXZWJLaXQgewogCi1zdGQ6OnVuaXF1ZV9wdHI8VmVjdG9yPHVpbnQ4X3Q+PiBzZXJpYWxpemVJ
REJLZXlQYXRoKGNvbnN0IFdlYkNvcmU6OklEQktleVBhdGgmKQorUmVmUHRyPFNoYXJlZEJ1ZmZl
cj4gc2VyaWFsaXplSURCS2V5UGF0aChjb25zdCBXZWJDb3JlOjpJREJLZXlQYXRoJiBrZXlQYXRo
KQogewotICAgIC8vIEZJWE1FOiBPbmNlIHdlIGhhdmUgYSBzZXJpYWxpemF0aW9uIHNvbHV0aW9u
IGFwcHJvcHJpYXRlIGZvciBwZXJzaXN0ZW50IHN0b3JhZ2UgdG8gZGlzaywgdXNlIHRoYXQgaGVy
ZS4KLQotICAgIHJldHVybiBudWxscHRyOworICAgIEtleWVkRW5jb2RlciBlbmNvZGVyOworICAg
IGtleVBhdGguZW5jb2RlKGVuY29kZXIpOworICAgIHJldHVybiBlbmNvZGVyLmNyZWF0ZUJ1ZmZl
cigpOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6SURCS2V5UGF0aD4gZGVzZXJpYWxp
emVJREJLZXlQYXRoKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpCitzdGQ6OnVuaXF1ZV9wdHI8V2Vi
Q29yZTo6SURCS2V5UGF0aD4gZGVzZXJpYWxpemVJREJLZXlQYXRoKGNvbnN0IHVpbnQ4X3QqIGRh
dGEsIHNpemVfdCBzaXplKQogewotICAgIC8vIEZJWE1FOiBPbmNlIHdlIGhhdmUgYSBzZXJpYWxp
emF0aW9uIHNvbHV0aW9uIGFwcHJvcHJpYXRlIGZvciBwZXJzaXN0ZW50IHN0b3JhZ2UgdG8gZGlz
aywgdXNlIHRoYXQgaGVyZS4KKyAgICBLZXllZERlY29kZXIgZGVjb2RlcihkYXRhLCBzaXplKTsK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8SURCS2V5UGF0aD4gcmVzdWx0ID0gc3RkOjptYWtlX3VuaXF1
ZTxJREJLZXlQYXRoPigpOworICAgIGlmICghSURCS2V5UGF0aDo6ZGVjb2RlKGRlY29kZXIsICpy
ZXN1bHQpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBudWxscHRyOwor
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9JREJTZXJpYWxpemF0
aW9uLmggYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL0lEQlNlcmlh
bGl6YXRpb24uaAppbmRleCBmZjlhZDA2Li5hNmM3M2RmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL0lEQlNlcmlhbGl6YXRpb24uaAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL0lEQlNlcmlhbGl6YXRpb24u
aApAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKKyNp
bmNsdWRlIDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzYsNyArMzcsNyBAQCBjbGFzcyBJREJLZXlQYXRo
OwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotc3RkOjp1bmlxdWVfcHRyPFZlY3Rvcjx1aW50OF90
Pj4gc2VyaWFsaXplSURCS2V5UGF0aChjb25zdCBXZWJDb3JlOjpJREJLZXlQYXRoJik7CitSZWZQ
dHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBzZXJpYWxpemVJREJLZXlQYXRoKGNvbnN0IFdlYkNv
cmU6OklEQktleVBhdGgmKTsKIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpJREJLZXlQYXRoPiBk
ZXNlcmlhbGl6ZUlEQktleVBhdGgoY29uc3QgdWludDhfdCogYnVmZmVyLCBzaXplX3QgYnVmZmVy
U2l6ZSk7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9zcWxpdGUvVW5pcXVlSURCRGF0YWJhc2VCYWNr
aW5nU3RvcmVTUUxpdGUuY3BwIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4
ZWREQi9zcWxpdGUvVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUuY3BwCmluZGV4
IDhiMjE3YWEuLjBiMDViZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJv
Y2Vzcy9JbmRleGVkREIvc3FsaXRlL1VuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRl
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL3NxbGl0
ZS9VbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZS5jcHAKQEAgLTM2Miw3ICszNjIs
NyBAQCBib29sIFVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlOjpjcmVhdGVPYmpl
Y3RTdG9yZShjb25zdCBJREJUcmFuc2FjdGlvbgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQogCi0gICAgc3RkOjp1bmlxdWVfcHRyPFZlY3Rvcjx1aW50OF90Pj4ga2V5UGF0aEJsb2IgPSBz
ZXJpYWxpemVJREJLZXlQYXRoKG1ldGFkYXRhLmtleVBhdGgpOworICAgIFJlZlB0cjxTaGFyZWRC
dWZmZXI+IGtleVBhdGhCbG9iID0gc2VyaWFsaXplSURCS2V5UGF0aChtZXRhZGF0YS5rZXlQYXRo
KTsKICAgICBpZiAoIWtleVBhdGhCbG9iKSB7CiAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRv
IHNlcmlhbGl6ZSBJREJLZXlQYXRoIHRvIHNhdmUgaW4gZGF0YWJhc2UiKTsKICAgICAgICAgcmV0
dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2NmL0tleWVkRGVj
b2Rlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvY2YvS2V5ZWREZWNvZGVyLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZWIxZWYyCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2NmL0tleWVkRGVjb2Rlci5jcHAKQEAgLTAsMCArMSwx
NTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiS2V5ZWRE
ZWNvZGVyLmgiCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNl
IFdlYktpdCB7CisKK0tleWVkRGVjb2Rlcjo6S2V5ZWREZWNvZGVyKGNvbnN0IHVpbnQ4X3QqIGRh
dGEsIHNpemVfdCBzaXplKQoreworICAgIGF1dG8gY2ZEYXRhID0gYWRvcHRDRihDRkRhdGFDcmVh
dGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgZGF0YSwgc2l6ZSkpOworICAgIG1fcm9vdERpY3Rpb25h
cnkgPSBhZG9wdENGKHN0YXRpY19jYXN0PENGRGljdGlvbmFyeVJlZj4oQ0ZQcm9wZXJ0eUxpc3RD
cmVhdGVXaXRoRGF0YShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBjZkRhdGEuZ2V0KCksIGtDRlByb3Bl
cnR5TGlzdEltbXV0YWJsZSwgMCwgMCkpKTsKKworICAgIGlmIChtX3Jvb3REaWN0aW9uYXJ5ICYm
IENGR2V0VHlwZUlEKG1fcm9vdERpY3Rpb25hcnkuZ2V0KCkpICE9IENGRGljdGlvbmFyeUdldFR5
cGVJRCgpKQorICAgICAgICBtX3Jvb3REaWN0aW9uYXJ5ID0gbnVsbHB0cjsKKworICAgIGlmICht
X3Jvb3REaWN0aW9uYXJ5KQorICAgICAgICBtX2RpY3Rpb25hcnlTdGFjay5hcHBlbmQobV9yb290
RGljdGlvbmFyeS5nZXQoKSk7Cit9CisKK0tleWVkRGVjb2Rlcjo6fktleWVkRGVjb2RlcigpCit7
CisgICAgQVNTRVJUKG1fZGljdGlvbmFyeVN0YWNrLnNpemUoKSA9PSAxKTsKKyAgICBBU1NFUlQo
bV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpID09IG1fcm9vdERpY3Rpb25hcnkpOworICAgIEFTU0VS
VChtX2FycmF5U3RhY2suaXNFbXB0eSgpKTsKKyAgICBBU1NFUlQobV9hcnJheUluZGV4U3RhY2su
aXNFbXB0eSgpKTsKK30KKworYm9vbCBLZXllZERlY29kZXI6OmRlY29kZUludDY0KGNvbnN0IFN0
cmluZyYga2V5LCBpbnQ2NF90JiByZXN1bHQpCit7CisgICAgaWYgKCFtX2RpY3Rpb25hcnlTdGFj
ay5sYXN0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIENGTnVtYmVyUmVmIG51bWJl
ciA9IHN0YXRpY19jYXN0PENGTnVtYmVyUmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShtX2RpY3Rp
b25hcnlTdGFjay5sYXN0KCksIGtleS5jcmVhdGVDRlN0cmluZygpLmdldCgpKSk7CisgICAgaWYg
KCFudW1iZXIgfHwgQ0ZHZXRUeXBlSUQobnVtYmVyKSAhPSBDRk51bWJlckdldFR5cGVJRCgpIHx8
IENGTnVtYmVyR2V0VHlwZShudW1iZXIpICE9IGtDRk51bWJlclNJbnQ2NFR5cGUpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBDRk51bWJlckdldFZhbHVlKG51bWJlciwga0NG
TnVtYmVyU0ludDY0VHlwZSwgJnJlc3VsdCk7Cit9CisKK2Jvb2wgS2V5ZWREZWNvZGVyOjpkZWNv
ZGVVSW50MzIoY29uc3QgU3RyaW5nJiBrZXksIHVpbnQzMl90JiByZXN1bHQpCit7CisgICAgaWYg
KCFtX2RpY3Rpb25hcnlTdGFjay5sYXN0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IENGTnVtYmVyUmVmIG51bWJlciA9IHN0YXRpY19jYXN0PENGTnVtYmVyUmVmPihDRkRpY3Rpb25h
cnlHZXRWYWx1ZShtX2RpY3Rpb25hcnlTdGFjay5sYXN0KCksIGtleS5jcmVhdGVDRlN0cmluZygp
LmdldCgpKSk7CisgICAgaWYgKCFudW1iZXIgfHwgQ0ZHZXRUeXBlSUQobnVtYmVyKSAhPSBDRk51
bWJlckdldFR5cGVJRCgpIHx8IENGTnVtYmVyR2V0VHlwZShudW1iZXIpICE9IGtDRk51bWJlclNJ
bnQzMlR5cGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBDRk51bWJlckdl
dFZhbHVlKG51bWJlciwga0NGTnVtYmVyU0ludDMyVHlwZSwgJnJlc3VsdCk7Cit9CisKK2Jvb2wg
S2V5ZWREZWNvZGVyOjpkZWNvZGVTdHJpbmcoY29uc3QgU3RyaW5nJiBrZXksIFN0cmluZyYgcmVz
dWx0KQoreworICAgIGlmICghbV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBDRlN0cmluZ1JlZiBzdHJpbmcgPSBzdGF0aWNfY2FzdDxDRlN0cmlu
Z1JlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUobV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpLCBrZXku
Y3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSkpOworICAgIGlmICghc3RyaW5nIHx8IENGR2V0VHlwZUlE
KHN0cmluZykgIT0gQ0ZTdHJpbmdHZXRUeXBlSUQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgcmVzdWx0ID0gc3RyaW5nOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEtleWVk
RGVjb2Rlcjo6YmVnaW5PYmplY3QoY29uc3QgU3RyaW5nJiBrZXkpCit7CisgICAgaWYgKCFtX2Rp
Y3Rpb25hcnlTdGFjay5sYXN0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIENGRGlj
dGlvbmFyeVJlZiBkaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8Q0ZEaWN0aW9uYXJ5UmVmPihDRkRp
Y3Rpb25hcnlHZXRWYWx1ZShtX2RpY3Rpb25hcnlTdGFjay5sYXN0KCksIGtleS5jcmVhdGVDRlN0
cmluZygpLmdldCgpKSk7CisgICAgaWYgKCFkaWN0aW9uYXJ5IHx8IENGR2V0VHlwZUlEKGRpY3Rp
b25hcnkpICE9IENGRGljdGlvbmFyeUdldFR5cGVJRCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBtX2RpY3Rpb25hcnlTdGFjay5hcHBlbmQoZGljdGlvbmFyeSk7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK3ZvaWQgS2V5ZWREZWNvZGVyOjplbmRPYmplY3QoKQoreworICAgIG1fZGlj
dGlvbmFyeVN0YWNrLnJlbW92ZUxhc3QoKTsKK30KKworYm9vbCBLZXllZERlY29kZXI6OmJlZ2lu
QXJyYXkoY29uc3QgU3RyaW5nJiBrZXkpCit7CisgICAgaWYgKCFtX2RpY3Rpb25hcnlTdGFjay5s
YXN0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIENGQXJyYXlSZWYgYXJyYXkgPSBz
dGF0aWNfY2FzdDxDRkFycmF5UmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShtX2RpY3Rpb25hcnlT
dGFjay5sYXN0KCksIGtleS5jcmVhdGVDRlN0cmluZygpLmdldCgpKSk7CisgICAgaWYgKCFhcnJh
eSB8fCBDRkdldFR5cGVJRChhcnJheSkgIT0gQ0ZBcnJheUdldFR5cGVJRCgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBmb3IgKENGSW5kZXggaSA9IDA7IGkgPCBDRkFycmF5R2V0Q291
bnQoYXJyYXkpOyArK2kpIHsKKyAgICAgICAgQ0ZUeXBlUmVmIG9iamVjdCA9IENGQXJyYXlHZXRW
YWx1ZUF0SW5kZXgoYXJyYXksIGkpOworICAgICAgICBpZiAoQ0ZHZXRUeXBlSUQob2JqZWN0KSAh
PSBDRkRpY3Rpb25hcnlHZXRUeXBlSUQoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICBtX2FycmF5U3RhY2suYXBwZW5kKGFycmF5KTsKKyAgICBtX2FycmF5SW5kZXhT
dGFjay5hcHBlbmQoMCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgS2V5ZWREZWNvZGVy
OjpiZWdpbkFycmF5RWxlbWVudCgpCit7CisgICAgQVNTRVJUKG1fZGljdGlvbmFyeVN0YWNrLmxh
c3QoKSk7CisKKyAgICBpZiAobV9hcnJheUluZGV4U3RhY2subGFzdCgpID49IENGQXJyYXlHZXRD
b3VudChtX2FycmF5U3RhY2subGFzdCgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
Q0ZEaWN0aW9uYXJ5UmVmIGRpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxDRkRpY3Rpb25hcnlSZWY+
KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgobV9hcnJheVN0YWNrLmxhc3QoKSwgbV9hcnJheUluZGV4
U3RhY2subGFzdCgpKyspKTsKKyAgICBtX2RpY3Rpb25hcnlTdGFjay5hcHBlbmQoZGljdGlvbmFy
eSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgS2V5ZWREZWNvZGVyOjplbmRBcnJheUVs
ZW1lbnQoKQoreworICAgIG1fZGljdGlvbmFyeVN0YWNrLnJlbW92ZUxhc3QoKTsKK30KKwordm9p
ZCBLZXllZERlY29kZXI6OmVuZEFycmF5KCkKK3sKKyAgICBtX2FycmF5U3RhY2sucmVtb3ZlTGFz
dCgpOworICAgIG1fYXJyYXlJbmRleFN0YWNrLnJlbW92ZUxhc3QoKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvY2YvS2V5ZWRE
ZWNvZGVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvY2YvS2V5ZWREZWNvZGVyLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJlNzlkYQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9jZi9LZXllZERlY29kZXIuaApAQCAtMCwwICsxLDYyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBLZXllZERlY29kZXJfaAorI2RlZmluZSBLZXllZERlY29k
ZXJfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9LZXllZENvZGluZy5oPgorI2luY2x1ZGUgPHd0Zi9S
ZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJLaXQg
eworCitjbGFzcyBLZXllZERlY29kZXIgRklOQUwgOiBwdWJsaWMgV2ViQ29yZTo6S2V5ZWREZWNv
ZGVyIHsKK3B1YmxpYzoKKyAgICBLZXllZERlY29kZXIoY29uc3QgdWludDhfdCogZGF0YSwgc2l6
ZV90KTsKKyAgICB2aXJ0dWFsIH5LZXllZERlY29kZXIoKTsKKworcHJpdmF0ZToKKyAgICB2aXJ0
dWFsIGJvb2wgZGVjb2RlSW50NjQoY29uc3QgU3RyaW5nJiBrZXksIGludDY0X3QmKTsKKyAgICB2
aXJ0dWFsIGJvb2wgZGVjb2RlVUludDMyKGNvbnN0IFN0cmluZyYga2V5LCB1aW50MzJfdCYpOwor
ICAgIHZpcnR1YWwgYm9vbCBkZWNvZGVTdHJpbmcoY29uc3QgU3RyaW5nJiBrZXksIFN0cmluZyYp
OworCisgICAgdmlydHVhbCBib29sIGJlZ2luT2JqZWN0KGNvbnN0IFN0cmluZyYga2V5KTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZW5kT2JqZWN0KCk7CisKKyAgICB2aXJ0dWFsIGJvb2wgYmVnaW5BcnJh
eShjb25zdCBTdHJpbmcmIGtleSk7CisgICAgdmlydHVhbCBib29sIGJlZ2luQXJyYXlFbGVtZW50
KCk7CisgICAgdmlydHVhbCB2b2lkIGVuZEFycmF5RWxlbWVudCgpOworICAgIHZpcnR1YWwgdm9p
ZCBlbmRBcnJheSgpOworCisgICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gbV9yb290RGlj
dGlvbmFyeTsKKworICAgIFZlY3RvcjxDRkRpY3Rpb25hcnlSZWYsIDE2PiBtX2RpY3Rpb25hcnlT
dGFjazsKKyAgICBWZWN0b3I8Q0ZBcnJheVJlZiwgMTY+IG1fYXJyYXlTdGFjazsKKyAgICBWZWN0
b3I8Q0ZJbmRleD4gbV9hcnJheUluZGV4U3RhY2s7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKKworI2VuZGlmIC8vIEtleWVkRGVjb2Rlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvY2YvS2V5ZWRFbmNvZGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9jZi9L
ZXllZEVuY29kZXIuY3BwCmluZGV4IDNjMzI3ZWEuLmUyYjU0ZTAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9jZi9LZXllZEVuY29kZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9jZi9LZXllZEVuY29kZXIuY3BwCkBAIC0yNyw4ICsyNywxMSBAQAogI2luY2x1ZGUg
IktleWVkRW5jb2Rlci5oIgogCiAjaW5jbHVkZSA8Q29yZUZvdW5kYXRpb24vQ29yZUZvdW5kYXRp
b24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgogCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKwogbmFtZXNwYWNl
IFdlYktpdCB7CiAKIHN0YXRpYyBSZXRhaW5QdHI8Q0ZNdXRhYmxlRGljdGlvbmFyeVJlZj4gY3Jl
YXRlRGljdGlvbmFyeSgpCkBAIC0xMzQsNCArMTM3LDE0IEBAIHZvaWQgS2V5ZWRFbmNvZGVyOjpl
bmRBcnJheSgpCiAgICAgbV9hcnJheVN0YWNrLnJlbW92ZUxhc3QoKTsKIH0KIAorUGFzc1JlZlB0
cjxTaGFyZWRCdWZmZXI+IEtleWVkRW5jb2Rlcjo6Y3JlYXRlQnVmZmVyKCkKK3sKKyAgICBDRkVy
cm9yUmVmIGVycm9yID0gbnVsbHB0cjsKKyAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBkYXRhID0g
YWRvcHRDRihDRlByb3BlcnR5TGlzdENyZWF0ZURhdGEoa0NGQWxsb2NhdG9yRGVmYXVsdCwgbV9y
b290RGljdGlvbmFyeS5nZXQoKSwga0NGUHJvcGVydHlMaXN0QmluYXJ5Rm9ybWF0X3YxXzAsIDAs
ICZlcnJvcikpOworICAgIGlmIChlcnJvcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAg
ICByZXR1cm4gU2hhcmVkQnVmZmVyOjp3cmFwQ0ZEYXRhKGRhdGEuZ2V0KCkpOworfQorCiB9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9jZi9L
ZXllZEVuY29kZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9jZi9LZXllZEVuY29kZXIuaApp
bmRleCBiYzY0NGVkLi42ZTczNTdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
Y2YvS2V5ZWRFbmNvZGVyLmgKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2NmL0tleWVkRW5j
b2Rlci5oCkBAIC0zNyw2ICszNyw4IEBAIHB1YmxpYzoKICAgICBLZXllZEVuY29kZXIoKTsKICAg
ICB+S2V5ZWRFbmNvZGVyKCk7CiAKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29yZTo6U2hh
cmVkQnVmZmVyPiBjcmVhdGVCdWZmZXIoKSBPVkVSUklERTsKKwogcHJpdmF0ZToKICAgICB2aXJ0
dWFsIHZvaWQgZW5jb2RlQnl0ZXMoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IHVpbnQ4X3QqLCBz
aXplX3QpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBlbmNvZGVCb29sKGNvbnN0IFN0cmlu
ZyYga2V5LCBib29sKSBPVkVSUklERTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYktp
dDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA1YzE5NmRjLi4wMjhkNzY3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIv
U291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC02ODUs
NiArNjg1LDggQEAKIAkJNTE4MzQ1OTMxMzQ1MzJFOTAwOTJCNjk2IC8qIFdlYkljb25EYXRhYmFz
ZUNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTE4MzQ1OTExMzQ1MzJFODAwOTJCNjk2IC8qIFdlYkljb25EYXRhYmFzZUNsaWVudC5oICovOyB9
OwogCQk1MTgzNTNEQTE4ODVCRjhDMDBEOUZFNDQgLyogSURCU2VyaWFsaXphdGlvbi5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTgzNTNEODE4ODVC
RjhDMDBEOUZFNDQgLyogSURCU2VyaWFsaXphdGlvbi5jcHAgKi87IH07CiAJCTUxODM1M0RCMTg4
NUJGOEMwMEQ5RkU0NCAvKiBJREJTZXJpYWxpemF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTgzNTNEOTE4ODVCRjhDMDBEOUZFNDQgLyogSURC
U2VyaWFsaXphdGlvbi5oICovOyB9OworCQk1MTgzNTNERTE4ODcxMjhCMDBEOUZFNDQgLyogS2V5
ZWREZWNvZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUxODM1M0RDMTg4NzEyOEIwMEQ5RkU0NCAvKiBLZXllZERlY29kZXIuY3BwICovOyB9Owor
CQk1MTgzNTNERjE4ODcxMjhCMDBEOUZFNDQgLyogS2V5ZWREZWNvZGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTgzNTNERDE4ODcxMjhCMDBEOUZF
NDQgLyogS2V5ZWREZWNvZGVyLmggKi87IH07CiAJCTUxODNEREVDMTYzMEJERkMwMDhCRTVDNyAv
KiBOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTEwNUIwRDQxNjJGN0E3QTAwRTI3NzA5IC8qIE5ldHdvcmtQ
cm9jZXNzQ29ubmVjdGlvbi5jcHAgKi87IH07CiAJCTUxODcxQjVCMTI3Q0I4OUQwMEY3NjIzMiAv
KiBXZWJDb250ZXh0TWVudS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MTg3MUI1OTEyN0NCODlEMDBGNzYyMzIgLyogV2ViQ29udGV4dE1lbnUuY3Bw
ICovOyB9OwogCQk1MTg3MUI1QzEyN0NCODlEMDBGNzYyMzIgLyogV2ViQ29udGV4dE1lbnUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxODcxQjVBMTI3
Q0I4OUQwMEY3NjIzMiAvKiBXZWJDb250ZXh0TWVudS5oICovOyB9OwpAQCAtMjMzNyw2ICsyMzM5
LDggQEAKIAkJNTE4MzQ1OTExMzQ1MzJFODAwOTJCNjk2IC8qIFdlYkljb25EYXRhYmFzZUNsaWVu
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJJY29uRGF0YWJhc2VDbGll
bnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE4MzUzRDgxODg1QkY4QzAwRDlG
RTQ0IC8qIElEQlNlcmlhbGl6YXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSURCU2VyaWFsaXphdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTUxODM1M0Q5MTg4NUJGOEMwMEQ5RkU0NCAvKiBJREJTZXJpYWxpemF0aW9uLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElEQlNlcmlhbGl6YXRpb24uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE4MzUzREMxODg3MTI4QjAwRDlGRTQ0IC8qIEtleWVkRGVj
b2Rlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBLZXllZERlY29k
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTgzNTNERDE4ODcxMjhCMDBE
OUZFNDQgLyogS2V5ZWREZWNvZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEtleWVkRGVjb2Rlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTgzQjM5MzEz
NzlGODVDMDBFODc1NEUgLyogU2hpbS54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7
IHBhdGggPSBTaGltLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTg0
QkM0QTEzMkU5MDdBMDA2QjlFMjggLyogV2ViSWNvbkRhdGFiYXNlLm1lc3NhZ2VzLmluICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dDsgcGF0aCA9IFdlYkljb25EYXRhYmFzZS5tZXNzYWdlcy5pbjsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE4NzFCNTkxMjdDQjg5RDAwRjc2MjMyIC8qIFdlYkNvbnRl
eHRNZW51LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkNvbnRl
eHRNZW51LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM4MjcsNiArMzgzMSw4
IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQkxQUFGMEM0OTEyQjE2MzM0MDA4RTQ5RTIgLyogQXJn
dW1lbnRDb2RlcnNDRi5jcHAgKi8sCiAJCQkJMUFBRjBDNDgxMkIxNjMzNDAwOEU0OUUyIC8qIEFy
Z3VtZW50Q29kZXJzQ0YuaCAqLywKKwkJCQk1MTgzNTNEQzE4ODcxMjhCMDBEOUZFNDQgLyogS2V5
ZWREZWNvZGVyLmNwcCAqLywKKwkJCQk1MTgzNTNERDE4ODcxMjhCMDBEOUZFNDQgLyogS2V5ZWRE
ZWNvZGVyLmggKi8sCiAJCQkJMUFFMDBENUExODJEQURFMTAwMDg3REQ3IC8qIEtleWVkRW5jb2Rl
ci5jcHAgKi8sCiAJCQkJMUFFMDBENUIxODJEQURFMTAwMDg3REQ3IC8qIEtleWVkRW5jb2Rlci5o
ICovLAogCQkJKTsKQEAgLTYwMzcsNiArNjA0Myw3IEBACiAJCQkJMjk4NEY1ODkxNjRCQTA5NTAw
NEJDMEM2IC8qIEN1c3RvbVByb3RvY29sTWFuYWdlck1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywK
IAkJCQkyOUFEMzA5MzE2NEI0QzVEMDA3MkRFQTkgLyogQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJv
eHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTI5ODRGNTdEMTY0QjkxNUYwMDRCQzBDNiAvKiBDdXN0
b21Qcm90b2NvbE1hbmFnZXJQcm94eU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MTgz
NTNERjE4ODcxMjhCMDBEOUZFNDQgLyogS2V5ZWREZWNvZGVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk5M0ZDNjdCRTEyRDNDQ0YyMDBBNjA2MTAgLyogRGVjb2RlckFkYXB0ZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDRTgxRDk5MTMxQUUwMjEwMDI0MTkxMCAvKiBEaWN0aW9uYXJ5UG9wdXBJbmZv
LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTY3RUVBMDE3MDM3N0JGMDA3NjgxQ0EgLyogRGlza0Nh
Y2hlTW9uaXRvci5oIGluIEhlYWRlcnMgKi8sCkBAIC03ODYyLDYgKzc4NjksNyBAQAogCQkJCUJD
QTBFRjgwMTIzMzFFNzgwMDdEM0NGQiAvKiBXZWJVbmRvU3RlcC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkyREE5NDRBRjE4ODRFOUJBMDBFRDg2REIgLyogV2ViUGFnZVByb3h5SU9TLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJQkNFMjMxNUUxMjJDMzBDQTAwRDVDMzVBIC8qIEFQSVVSTFJlcXVlc3Qu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTE4MzUzREUxODg3MTI4QjAwRDlGRTQ0IC8qIEtleWVk
RGVjb2Rlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzkwQTFEMzEyMkRENTVFMDBDQzhDNTAg
LyogQVBJVVJMUmVzcG9uc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzAzMzdERDExMjdBMjk4
MDAwOEZGNEY0IC8qIFdlYldoZWVsRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFGQ0Ix
ODUxN0JCRkUwMzAwMzk0Q0Q4IC8qIEFzeW5jaHJvbm91c05ldHdvcmtMb2FkZXJDbGllbnQuY3Bw
IGluIFNvdXJjZXMgKi8sCg==
</data>
<flag name="review"
          id="245212"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>