<?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>185869</bug_id>
          
          <creation_ts>2018-05-22 08:24:35 -0700</creation_ts>
          <short_desc>IndexedDB: breaks if binary data (Uint8Array) and autoIncrement key in store</short_desc>
          <delta_ts>2019-01-07 15:25:38 -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>WebCore Misc.</component>
          <version>Safari 11</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>macOS 10.13</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=193219</see_also>
          <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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Maxime Réty">maxime.rety</reporter>
          <assigned_to name="Sihui Liu">sihui_liu</assigned_to>
          <cc>alecflett</cc>
    
    <cc>beidson</cc>
    
    <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>jsbell</cc>
    
    <cc>sihui_liu</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1426160</commentid>
    <comment_count>0</comment_count>
      <attachid>340983</attachid>
    <who name="Maxime Réty">maxime.rety</who>
    <bug_when>2018-05-22 08:24:35 -0700</bug_when>
    <thetext>Created attachment 340983
Test case

There&apos;s a bug in Safari 11.1 when you try to add a record with binary data (Uint8Array) into an indexedDB store having an autoIncrement key.

The triggered error is &quot;UnknownError: An internal error was encountered in the Indexed Database server&quot;, and then the whole database is broken and can&apos;t be reopened/reused.

This issue neither happens if you have binary data and a store without autoIncrement, nor non-binary data and a store with autoIncrement. Only having both is an issue.

Breaks (at least) on Safari Version 11.1 (13605.1.33.1.4) on macOS High Sierra 10.13.4.

Full test case: https://gist.github.com/maximerety/2332ed4660652f57ef6e12e3194e28e4

Related issue: https://github.com/dfahlander/Dexie.js/issues/656</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1426185</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-05-22 09:45:48 -0700</bug_when>
    <thetext>&lt;rdar://problem/40453623&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1481813</commentid>
    <comment_count>2</comment_count>
      <attachid>355704</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2018-11-26 19:40:38 -0800</bug_when>
    <thetext>Created attachment 355704
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1481947</commentid>
    <comment_count>3</comment_count>
      <attachid>355704</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2018-11-27 09:56:29 -0800</bug_when>
    <thetext>Comment on attachment 355704
Patch

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

r=me

&gt; Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp:955
&gt; +    static NeverDestroyed&lt;Strong&lt;JSDOMGlobalObject&gt;&gt; domGlobalObject(databaseThreadVM(), JSDOMGlobalObject::create(databaseThreadVM(), JSDOMGlobalObject::createStructure(databaseThreadVM(), jsNull()), normalWorld(databaseThreadVM())));

It&apos;s not necessary in this patch, but I think it would be nice to write a follow-up patch that eventually deletes this global object and its VM. We use this global object as a temporary to enable serializing and deserializing JavaScript values. It&apos;s wasteful to keep it and its VM allocated forever.

One strategy is to create an object that owns the VM and global object, and make that object reference counted and owned by each UniqueIDBDatabase. That way, when the last UniqueIDBDatabase is closed, we can free the VM.

So you would have something like:

class IDBSerializationContext : public WeakPtrFactory&lt;IDBSerializationContext&gt;, public RefCounted&lt;IDBSerializationContext&gt; {
    ...
    private:
        std::unique_ptr&lt;VM&gt; m_vm;
        Strong&lt;JSDOMGlobalObject&gt; m_globalObject;
};

IDBSerializationContext&amp; sharedIDBSerializationContext()
{
    static WeakPtr&lt;IDBSerializationContext&gt; s_context;
    if (!s_context) {
        ...
    }
    return s_context;
}

&gt; Source/WebCore/bindings/js/JSDOMWrapper.cpp:44
&gt; +    ASSERT(globalObject.classInfo() == JSDOMGlobalObject::info() || scriptExecutionContext() || globalObject.classInfo() == JSRemoteDOMWindow::info());

Probably best to write this as:

    ASSERT(scriptExecutionContext() || globalObject.classInfo() == JSRemoteDOMWindow::info() || globalObject.classInfo() == JSDOMGlobalObject::info());

The primary thing we&apos;re trying to assert is that we have a script execution context. After that come two exceptions to the general rule. Best to put the general rule first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1482673</commentid>
    <comment_count>4</comment_count>
      <attachid>355704</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2018-11-28 14:39:37 -0800</bug_when>
    <thetext>Comment on attachment 355704
Patch

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

&gt;&gt; Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp:955
&gt;&gt; +    static NeverDestroyed&lt;Strong&lt;JSDOMGlobalObject&gt;&gt; domGlobalObject(databaseThreadVM(), JSDOMGlobalObject::create(databaseThreadVM(), JSDOMGlobalObject::createStructure(databaseThreadVM(), jsNull()), normalWorld(databaseThreadVM())));
&gt; 
&gt; It&apos;s not necessary in this patch, but I think it would be nice to write a follow-up patch that eventually deletes this global object and its VM. We use this global object as a temporary to enable serializing and deserializing JavaScript values. It&apos;s wasteful to keep it and its VM allocated forever.
&gt; 
&gt; One strategy is to create an object that owns the VM and global object, and make that object reference counted and owned by each UniqueIDBDatabase. That way, when the last UniqueIDBDatabase is closed, we can free the VM.
&gt; 
&gt; So you would have something like:
&gt; 
&gt; class IDBSerializationContext : public WeakPtrFactory&lt;IDBSerializationContext&gt;, public RefCounted&lt;IDBSerializationContext&gt; {
&gt;     ...
&gt;     private:
&gt;         std::unique_ptr&lt;VM&gt; m_vm;
&gt;         Strong&lt;JSDOMGlobalObject&gt; m_globalObject;
&gt; };
&gt; 
&gt; IDBSerializationContext&amp; sharedIDBSerializationContext()
&gt; {
&gt;     static WeakPtr&lt;IDBSerializationContext&gt; s_context;
&gt;     if (!s_context) {
&gt;         ...
&gt;     }
&gt;     return s_context;
&gt; }

Sure, will do.

&gt;&gt; Source/WebCore/bindings/js/JSDOMWrapper.cpp:44
&gt;&gt; +    ASSERT(globalObject.classInfo() == JSDOMGlobalObject::info() || scriptExecutionContext() || globalObject.classInfo() == JSRemoteDOMWindow::info());
&gt; 
&gt; Probably best to write this as:
&gt; 
&gt;     ASSERT(scriptExecutionContext() || globalObject.classInfo() == JSRemoteDOMWindow::info() || globalObject.classInfo() == JSDOMGlobalObject::info());
&gt; 
&gt; The primary thing we&apos;re trying to assert is that we have a script execution context. After that come two exceptions to the general rule. Best to put the general rule first.

JSDOMObject invokes JSDOMGlobalObject::scriptExecutionContext(), which checks if JSDOMGlobalObject inherits from JS*Window or JSWorker* or JSWorker* or JSWorklet* with release assert.  I put globalObject.classInfo() == JSDOMGlobalObject::info() before scriptExecutionContext() to avoid removing the release assertion, as creating a JSDOMGlobalObject without window or worker is a special case that should not happen elsewhere. I can change the order here and remove the assertion in scriptExecutionContext().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1482983</commentid>
    <comment_count>5</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2018-11-29 09:43:28 -0800</bug_when>
    <thetext>&gt; JSDOMObject invokes JSDOMGlobalObject::scriptExecutionContext(), which
&gt; checks if JSDOMGlobalObject inherits from JS*Window or JSWorker* or
&gt; JSWorker* or JSWorklet* with release assert.  I put globalObject.classInfo()
&gt; == JSDOMGlobalObject::info() before scriptExecutionContext() to avoid
&gt; removing the release assertion, as creating a JSDOMGlobalObject without
&gt; window or worker is a special case that should not happen elsewhere. I can
&gt; change the order here and remove the assertion in scriptExecutionContext().

OK, let&apos;s leave this as is for now.

Perhaps later we&apos;ll decide that IDB should really use JSWorkerGlobalScope instead of JSDOMGlobalObject.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1483032</commentid>
    <comment_count>6</comment_count>
      <attachid>355704</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-11-29 10:45:25 -0800</bug_when>
    <thetext>Comment on attachment 355704
Patch

Clearing flags on attachment: 355704

Committed r238677: &lt;https://trac.webkit.org/changeset/238677&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1483033</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-11-29 10:45:27 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>340983</attachid>
            <date>2018-05-22 08:24:35 -0700</date>
            <delta_ts>2018-05-22 08:24:35 -0700</delta_ts>
            <desc>Test case</desc>
            <filename>ko-indexeddb-both.html</filename>
            <type>text/html</type>
            <size>1687</size>
            <attacher name="Maxime Réty">maxime.rety</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWw+CjxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KPHRpdGxlPktPOiBhZGQgYSBy
ZWNvcmQgY29udGFpbmluZyBiaW5hcnkgZGF0YSBpbiBhIHN0b3JlIGhhdmluZyBhbiBhdXRvSW5j
cmVtZW50IGtleS48L3RpdGxlPgoKPCEtLSBMb2dnaW5nIC0tPgo8c3R5bGUgdHlwZT0idGV4dC9j
c3MiPgogIHRleHRhcmVhI2xvZyB7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMTAwMHB4
OwogIH0KPC9zdHlsZT4KCjxoMz5Mb2c8L2gzPgo8dGV4dGFyZWEgaWQ9ImxvZyI+PC90ZXh0YXJl
YT4KCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KICBjb25zdCBsb2cgPSAoLi4uYXJn
cykgPT4gewogICAgY29uc29sZS5sb2coLi4uYXJncyk7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgnbG9nJykudmFsdWUgKz0gYXJncy5qb2luKCcgJykgKyAiXG4iOwogIH07Cjwvc2NyaXB0
PgoKPCEtLSBUZXN0IHNjcmlwdCAtLT4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgog
IGxldCBkYjsKCiAgY29uc3QgcmVjb3JkID0gewogICAgLy8gaWQ6IDEsIDwtIGF1dG9tYXRpY2Fs
bHkgYWRkZWQgZHVlIHRvIGF1dG9JbmNyZW1lbnQKICAgIHByb3BlcnR5OiBVaW50OEFycmF5LmZy
b20oWzQyLCAyNTVdKQogIH07CgogIGNvbnN0IG9wZW5fcnEgPSB3aW5kb3cuaW5kZXhlZERCLm9w
ZW4oIlRlc3RCaW5hcnlBbmRBdXRvSW5jcmVtZW50IiwgMSk7CgogIG9wZW5fcnEub251cGdyYWRl
bmVlZGVkID0gZnVuY3Rpb24gKGUpIHsKICAgIGRiID0gZS50YXJnZXQucmVzdWx0OwoKICAgIGNv
bnN0IG9ialN0b3JlID0gZGIuY3JlYXRlT2JqZWN0U3RvcmUoInN0b3JlIiwgeyBrZXlQYXRoOiAi
aWQiLCBhdXRvSW5jcmVtZW50OiB0cnVlIH0pOwogICAgY29uc3QgYWRkX3JxID0gb2JqU3RvcmUu
YWRkKHJlY29yZCk7CgogICAgYWRkX3JxLm9uZXJyb3IgPSBmdW5jdGlvbiAoZSkgewogICAgICBs
b2coImZhaWxlZCB0byBhZGQgcmVjb3JkIChzZWUgY29uc29sZSkiKTsKICAgICAgY29uc29sZS5l
cnJvcihlKTsKICAgIH0KCiAgICBhZGRfcnEub25zdWNjZXNzID0gZnVuY3Rpb24gKGUpIHsKICAg
ICAgbG9nKCJhZGRlZCByZWNvcmQiKTsKICAgIH0KICB9OwoKICBvcGVuX3JxLm9uc3VjY2VzcyA9
IGZ1bmN0aW9uIChlKSB7CiAgICBpZiAoIWRiKSB7CiAgICAgIGRiID0gZS50YXJnZXQucmVzdWx0
OwogICAgfQoKICAgIGNvbnN0IHJxID0gZGIudHJhbnNhY3Rpb24oInN0b3JlIikKICAgICAgLm9i
amVjdFN0b3JlKCJzdG9yZSIpCiAgICAgIC5nZXQoMSk7CgogICAgcnEub25zdWNjZXNzID0gZnVu
Y3Rpb24gKGUpIHsKICAgICAgY29uc3QgcmVzdWx0ID0gZS50YXJnZXQucmVzdWx0OwogICAgICBs
b2coInJlc3VsdC5wcm9wZXJ0eSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXk6IiwgcmVzdWx0LnByb3Bl
cnR5IGluc3RhbmNlb2YgVWludDhBcnJheSk7CiAgICAgIGxvZygicmVzdWx0LnByb3BlcnR5Lmxl
bmd0aCA9PT0gMjoiLCByZXN1bHQucHJvcGVydHkubGVuZ3RoID09PSAyKTsKICAgICAgbG9nKCJy
ZXN1bHQucHJvcGVydHlbMF0gPT09IDQyOiIsIHJlc3VsdC5wcm9wZXJ0eVswXSA9PT0gNDIpOwog
ICAgICBsb2coInJlc3VsdC5wcm9wZXJ0eVsxXSA9PT0gMjU1OiIsIHJlc3VsdC5wcm9wZXJ0eVsx
XSA9PT0gMjU1KTsKICAgIH07CiAgfTsKPC9zY3JpcHQ+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>355704</attachid>
            <date>2018-11-26 19:40:38 -0800</date>
            <delta_ts>2018-11-29 10:45:25 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-185869-20181126194038.patch</filename>
            <type>text/plain</type>
            <size>12482</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM4MjgxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGQ2MGE3MzQyNjY5Mjkz
MWVlMjE5NWMzMzgxNGE3MDIyMzU0ZmQ3Ny4uN2Y5MjhmY2I5ZTUwMDdhMmU1MDM3MjM0MWJhNjA1
NjhjZmJiMDBhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDE4LTExLTI2ICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIEluZGV4ZWREQjogYnJlYWtz
IGlmIGJpbmFyeSBkYXRhIChVaW50OEFycmF5KSBhbmQgYXV0b0luY3JlbWVudCBrZXkgaW4gc3Rv
cmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NTg2
OQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNDA0NTM2MjM+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgbGV4aWNhbEdsb2JhbE9iamVjdCBpcyBjYXN0
ZWQgdG8gSlNET01HbG9iYWxPYmplY3QgaW4gQ2xvbmVTZXJpYWxpemVyOjpkdW1wQXJyYXlCdWZm
ZXJWaWV3LCAKKyAgICAgICAgc28gd2Ugc2hvdWxkIHVzZSBKU0RPTUdsb2JhbE9iamVjdCBpbnN0
ZWFkIG9mIEpTR2xvYmFsT2JqZWN0IGluIElEQiBkYXRhYmFzZSB0aHJlYWQuCisKKyAgICAgICAg
Q292ZXJlZCBieSBtb2RpZmllZCB0ZXN0OiBzdG9yYWdlL2luZGV4ZWRkYi9vYmplY3RzdG9yZS1h
dXRvaW5jcmVtZW50Lmh0bWwKKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9V
bmlxdWVJREJEYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1
ZUlEQkRhdGFiYXNlOjpkYXRhYmFzZVRocmVhZFZNKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNl
cnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmRhdGFiYXNlVGhyZWFkRXhlY1N0YXRlKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpKU0RPTUdsb2JhbE9iamVjdDo6Y3JlYXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RP
TUdsb2JhbE9iamVjdC5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV3JhcHBlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpKU0RPTU9iamVjdDo6SlNET01PYmplY3QpOgorCiAyMDE4LTEx
LTE2ICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW2lPU10gMiBz
dWJzZXF1ZW50IHRhcHMgYXJlIHJlcXVpcmVkIHRvIHRyaWdnZXIgY2VydGFpbiB0YXNrcyBvbiB0
aGUgZGVza3RvcCB2ZXJzaW9uIG9mIFlvdVR1YmUuY29tIChob3ZlciB2cyBjbGljaykuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURC
RGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1Vu
aXF1ZUlEQkRhdGFiYXNlLmNwcAppbmRleCA5YjI2MDM5MTA5ZTliYjA5ZDQ2NGVkNGJkMTZhODhk
ZjUwY2UzNzA5Li5mZjdlZjUyM2MwNjZhZjAwOTU1ZWVmYTdlMzBjN2Q2NWM1Zjk5OGJjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURC
RGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZl
ci9VbmlxdWVJREJEYXRhYmFzZS5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShJ
TkRFWEVEX0RBVEFCQVNFKQogCisjaW5jbHVkZSAiRE9NV3JhcHBlcldvcmxkLmgiCiAjaW5jbHVk
ZSAiSURCQmluZGluZ1V0aWxpdGllcy5oIgogI2luY2x1ZGUgIklEQkN1cnNvckluZm8uaCIKICNp
bmNsdWRlICJJREJHZXRBbGxSZWNvcmRzRGF0YS5oIgpAQCAtNDIsNiArNDMsNyBAQAogI2luY2x1
ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKICNpbmNs
dWRlICJVbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb24uaCIKKyNpbmNsdWRlICJXZWJDb3JlSlND
bGllbnREYXRhLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvQXV4aWxpYXJ5QmFycmllcklu
bGluZXMuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9IZWFwSW5saW5lcy5oPgogI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL1N0cm9uZ0lubGluZXMuaD4KQEAgLTkzOCw2ICs5NDAsMTEgQEAg
Vk0mIFVuaXF1ZUlEQkRhdGFiYXNlOjpkYXRhYmFzZVRocmVhZFZNKCkKIHsKICAgICBBU1NFUlQo
IWlzTWFpblRocmVhZCgpKTsKICAgICBzdGF0aWMgVk0qIHZtID0gJlZNOjpjcmVhdGUoKS5sZWFr
UmVmKCk7CisgICAgaWYgKCF2bS0+aGVhcC5oYXNBY2Nlc3MoKSkgeworICAgICAgICB2bS0+aGVh
cC5hY3F1aXJlQWNjZXNzKCk7CisgICAgICAgIEpTVk1DbGllbnREYXRhOjppbml0Tm9ybWFsV29y
bGQodm0pOworICAgIH0KKwogICAgIHJldHVybiAqdm07CiB9CiAKQEAgLTk0NSwxMCArOTUyLDEw
IEBAIEV4ZWNTdGF0ZSYgVW5pcXVlSURCRGF0YWJhc2U6OmRhdGFiYXNlVGhyZWFkRXhlY1N0YXRl
KCkKIHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKIAotICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxTdHJvbmc8SlNHbG9iYWxPYmplY3Q+PiBnbG9iYWxPYmplY3QoZGF0YWJhc2VUaHJl
YWRWTSgpLCBKU0dsb2JhbE9iamVjdDo6Y3JlYXRlKGRhdGFiYXNlVGhyZWFkVk0oKSwgSlNHbG9i
YWxPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZShkYXRhYmFzZVRocmVhZFZNKCksIGpzTnVsbCgpKSkp
OworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJvbmc8SlNET01HbG9iYWxPYmplY3Q+PiBk
b21HbG9iYWxPYmplY3QoZGF0YWJhc2VUaHJlYWRWTSgpLCBKU0RPTUdsb2JhbE9iamVjdDo6Y3Jl
YXRlKGRhdGFiYXNlVGhyZWFkVk0oKSwgSlNET01HbG9iYWxPYmplY3Q6OmNyZWF0ZVN0cnVjdHVy
ZShkYXRhYmFzZVRocmVhZFZNKCksIGpzTnVsbCgpKSwgbm9ybWFsV29ybGQoZGF0YWJhc2VUaHJl
YWRWTSgpKSkpOwogCi0gICAgUkVMRUFTRV9BU1NFUlQoZ2xvYmFsT2JqZWN0LmdldCgpLT5nbG9i
YWxFeGVjKCkpOwotICAgIHJldHVybiAqZ2xvYmFsT2JqZWN0LmdldCgpLT5nbG9iYWxFeGVjKCk7
CisgICAgUkVMRUFTRV9BU1NFUlQoZG9tR2xvYmFsT2JqZWN0LmdldCgpLT5nbG9iYWxFeGVjKCkp
OworICAgIHJldHVybiAqZG9tR2xvYmFsT2JqZWN0LmdldCgpLT5nbG9iYWxFeGVjKCk7CiB9CiAK
IHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1QdXRPckFkZCh1aW50NjRfdCBjYWxsYmFj
a0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVu
dGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IElEQktleURhdGEm
IGtleURhdGEsIGNvbnN0IElEQlZhbHVlJiBvcmlnaW5hbFJlY29yZFZhbHVlLCBJbmRleGVkREI6
Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZSBvdmVyd3JpdGVNb2RlKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwCmluZGV4IDVkODg0MmI1YzY5
MzFlY2UwMDgzZGY5MzllYTdiZjAzY2E2ZjNhYWMuLjc2NWVlZGNjMjQ1NTEyZDU1OWRlMjkxNDZl
NWRmOGZhZTRlMzY4OGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NR2xvYmFsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TUdsb2JhbE9iamVjdC5jcHAKQEAgLTc2LDYgKzc2LDEzIEBAIHZvaWQgSlNET01HbG9iYWxPYmpl
Y3Q6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQogICAgIHN0YXRpY19jYXN0PEpTRE9NR2xvYmFsT2Jq
ZWN0Kj4oY2VsbCktPkpTRE9NR2xvYmFsT2JqZWN0Ojp+SlNET01HbG9iYWxPYmplY3QoKTsKIH0K
IAorSlNET01HbG9iYWxPYmplY3QqIEpTRE9NR2xvYmFsT2JqZWN0OjpjcmVhdGUoSlNDOjpWTSYg
dm0sIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFJlZjxET01XcmFwcGVyV29ybGQ+JiYgd29y
bGQpCit7CisgICAgSlNET01HbG9iYWxPYmplY3QqIGRvbUdsb2JhbE9iamVjdCA9IG5ldyAoTm90
TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNET01HbG9iYWxPYmplY3Q+KHZtLmhlYXApKSBKU0RP
TUdsb2JhbE9iamVjdCh2bSwgc3RydWN0dXJlLCBXVEZNb3ZlKHdvcmxkKSk7CisgICAgZG9tR2xv
YmFsT2JqZWN0LT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmV0dXJuIGRvbUdsb2JhbE9iamVj
dDsKK30KKwogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYWtlVGhpc1R5cGVFcnJvckZv
ckJ1aWx0aW5zKEV4ZWNTdGF0ZSogZXhlY1N0YXRlKQogewogICAgIEFTU0VSVChleGVjU3RhdGUp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmpl
Y3QuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmgKaW5k
ZXggZWQ1MjU1MTAxMDAyNmExYThlNDdlNzAzNjc2NTEyNzRhMWEzNTc3MC4uYWM2OTI4ZjIzOWZj
ZWVlNzA3Y2RjMWIwMWJhOTc4ODk4YzIxYTEyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5oCkBAIC01Myw2ICs1Myw4IEBAIHByb3RlY3RlZDoK
ICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBKU0M6OkpTT2JqZWN0Kik7CiAKIHB1
YmxpYzoKKyAgICBzdGF0aWMgSlNET01HbG9iYWxPYmplY3QqIGNyZWF0ZShKU0M6OlZNJiwgSlND
OjpTdHJ1Y3R1cmUqLCBSZWY8RE9NV3JhcHBlcldvcmxkPiYmKTsKKwogICAgIExvY2smIGdjTG9j
aygpIHsgcmV0dXJuIG1fZ2NMb2NrOyB9CiAKICAgICBKU0RPTVN0cnVjdHVyZU1hcCYgc3RydWN0
dXJlcyhjb25zdCBBYnN0cmFjdExvY2tlciYpIHsgcmV0dXJuIG1fc3RydWN0dXJlczsgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XcmFwcGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV3JhcHBlci5jcHAKaW5kZXggODlhMzA4MGRh
OGI1MzM3ZGEwMTljZWU2YTEzNWVjNzVjYTM4OWM0MC4uMTlmY2Q3NzY2NTI4OGE0MzkxMWQwYTRm
YmQ2YmI5ZjAxNDAyNTJlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01XcmFwcGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdy
YXBwZXIuY3BwCkBAIC00MSw3ICs0MSw3IEBAIFNUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RF
U1RSVUNUSUJMRShKU0RPTU9iamVjdCk7CiBKU0RPTU9iamVjdDo6SlNET01PYmplY3QoSlNDOjpT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNDOjpKU0dsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQog
ICAgIDogQmFzZShnbG9iYWxPYmplY3Qudm0oKSwgc3RydWN0dXJlKQogewotICAgIEFTU0VSVChz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCkgfHwgZ2xvYmFsT2JqZWN0LmNsYXNzSW5mbygpID09IEpT
UmVtb3RlRE9NV2luZG93OjppbmZvKCkpOworICAgIEFTU0VSVChnbG9iYWxPYmplY3QuY2xhc3NJ
bmZvKCkgPT0gSlNET01HbG9iYWxPYmplY3Q6OmluZm8oKSB8fCBzY3JpcHRFeGVjdXRpb25Db250
ZXh0KCkgfHwgZ2xvYmFsT2JqZWN0LmNsYXNzSW5mbygpID09IEpTUmVtb3RlRE9NV2luZG93Ojpp
bmZvKCkpOwogfQogCiBDb21wbGV0ZVN1YnNwYWNlKiBvdXRwdXRDb25zdHJhaW50U3Vic3BhY2VG
b3IoVk0mIHZtKQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCmluZGV4IDBmODJiOTIzNGViYzg1MzliMGU5OWY2NjNmODk5MzRlNDI2ZjY0
YjkuLjdlNzZmMjg3MTllMzQ3YzU1MjRlZGE5Y2MxNTM0NmI5M2I3MGY2MzEgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMCBAQAorMjAxOC0xMS0yNiAgU2lodWkgTGl1ICA8c2lodWlfbGl1QGFwcGxlLmNvbT4K
KworICAgICAgICBJbmRleGVkREI6IGJyZWFrcyBpZiBiaW5hcnkgZGF0YSAoVWludDhBcnJheSkg
YW5kIGF1dG9JbmNyZW1lbnQga2V5IGluIHN0b3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODU4NjkKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzQw
NDUzNjIzPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogc3RvcmFnZS9pbmRleGVkZGIvb2JqZWN0c3RvcmUtYXV0b2luY3JlbWVudC1leHBlY3RlZC50
eHQ6CisgICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIvb2JqZWN0c3RvcmUtYXV0b2luY3JlbWVu
dC1wcml2YXRlLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9yZXNv
dXJjZXMvb2JqZWN0c3RvcmUtYXV0b2luY3JlbWVudC5qczoKKyAgICAgICAgKGdldExpbmNvbG5B
ZnRlckluamVjdGVkS2V5U3VjY2Vzcyk6CisgICAgICAgIChwdXRCb2JTdWNjZXNzKToKKyAgICAg
ICAgKGdldEJvYlN1Y2Nlc3MpOgorICAgICAgICAoYWRkTGluY29sbldpdGhFeHBsaWNpdEtleVN1
Y2Nlc3MpOgorICAgICAgICAocHV0QWJyYWhhbVN1Y2Nlc3MpOgorCiAyMDE4LTExLTE2ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW2lPU10gMiBzdWJzZXF1ZW50
IHRhcHMgYXJlIHJlcXVpcmVkIHRvIHRyaWdnZXIgY2VydGFpbiB0YXNrcyBvbiB0aGUgZGVza3Rv
cCB2ZXJzaW9uIG9mIFlvdVR1YmUuY29tCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdl
L2luZGV4ZWRkYi9vYmplY3RzdG9yZS1hdXRvaW5jcmVtZW50LWV4cGVjdGVkLnR4dCBiL0xheW91
dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL29iamVjdHN0b3JlLWF1dG9pbmNyZW1lbnQtZXhwZWN0
ZWQudHh0CmluZGV4IDIzMGYzZjRjNWJmMmE1YWEzNzFjMjZjYWFkMTM3OWVkODI0YWFmMTAuLjBh
YjBmMWFjZDRlMGE2ZTYyOTgzZjEwMDNhMzY0MDlhMjk2NDMyNjcgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL29iamVjdHN0b3JlLWF1dG9pbmNyZW1lbnQtZXhwZWN0
ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL29iamVjdHN0b3JlLWF1
dG9pbmNyZW1lbnQtZXhwZWN0ZWQudHh0CkBAIC0zNSwxOSArMzUsMjYgQEAgZ2V0TGluY29sbkFm
dGVySW5qZWN0ZWRLZXlTdWNjZXNzKCk6CiBQQVNTIGV2ZW50LnRhcmdldC5yZXN1bHQubmFtZSBp
cyAiTGluY29sbiIKIFBBU1MgZXZlbnQudGFyZ2V0LnJlc3VsdC5udW1iZXIgaXMgIjcwMTIiCiBQ
QVNTIGV2ZW50LnRhcmdldC5yZXN1bHQuaWQgaXMgNAorc3RvcmUuYWRkKHtuYW1lOiAnQm9iJywg
bnVtYmVyOiBVaW50OEFycmF5LmZyb20oWzEwMCwgMTAxXSl9KQorcHV0Qm9iU3VjY2VzcygpOgor
UEFTUyBldmVudC50YXJnZXQucmVzdWx0IGlzIDUKK3N0b3JlLmdldCg1KQorZ2V0Qm9iU3VjY2Vz
cygpOgorUEFTUyBldmVudC50YXJnZXQucmVzdWx0Lm5hbWUgaXMgIkJvYiIKK1BBU1MgZXZlbnQu
dGFyZ2V0LnJlc3VsdC5udW1iZXIgaXMgWzEwMCwgMTAxXQogc3RvcmUgPSB0cmFucy5vYmplY3RT
dG9yZSgnU3RvcmVXaXRoQXV0b0luY3JlbWVudCcpCiBJbnNlcnQgaW50byBvYmplY3Qgc3RvcmUg
d2l0aCBrZXkgZ2VuIHVzaW5nIGV4cGxpY2l0IGtleQotc3RvcmUuYWRkKHtuYW1lOiAnTGluY29s
bicsIG51bWJlcjogJzcwMTInfSwgNSkKK3N0b3JlLmFkZCh7bmFtZTogJ0xpbmNvbG4nLCBudW1i
ZXI6ICc3MDEyJ30sIDYpCiBhZGRMaW5jb2xuV2l0aEV4cGxpY2l0S2V5U3VjY2VzcygpOgotUEFT
UyBldmVudC50YXJnZXQucmVzdWx0IGlzIDUKLXN0b3JlLmdldCg1KQorUEFTUyBldmVudC50YXJn
ZXQucmVzdWx0IGlzIDYKK3N0b3JlLmdldCg2KQogZ2V0TGluY29sblN1Y2Nlc3MoKToKIFBBU1Mg
ZXZlbnQudGFyZ2V0LnJlc3VsdC5uYW1lIGlzICJMaW5jb2xuIgogUEFTUyBldmVudC50YXJnZXQu
cmVzdWx0Lm51bWJlciBpcyAiNzAxMiIKIHN0b3JlLnB1dCh7bmFtZTogJ0FicmFoYW0nLCBudW1i
ZXI6ICcyMTA3J30pCiBwdXRBYnJhaGFtU3VjY2VzcygpOgotUEFTUyBldmVudC50YXJnZXQucmVz
dWx0IGlzIDYKLXN0b3JlLmdldCg2KQorUEFTUyBldmVudC50YXJnZXQucmVzdWx0IGlzIDcKK3N0
b3JlLmdldCg3KQogZ2V0QWJyYWhhbVN1Y2Nlc3MoKToKIFBBU1MgZXZlbnQudGFyZ2V0LnJlc3Vs
dC5uYW1lIGlzICJBYnJhaGFtIgogUEFTUyBldmVudC50YXJnZXQucmVzdWx0Lm51bWJlciBpcyAi
MjEwNyIKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL29iamVjdHN0
b3JlLWF1dG9pbmNyZW1lbnQtcHJpdmF0ZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdG9y
YWdlL2luZGV4ZWRkYi9vYmplY3RzdG9yZS1hdXRvaW5jcmVtZW50LXByaXZhdGUtZXhwZWN0ZWQu
dHh0CmluZGV4IDIzMGYzZjRjNWJmMmE1YWEzNzFjMjZjYWFkMTM3OWVkODI0YWFmMTAuLjBhYjBm
MWFjZDRlMGE2ZTYyOTgzZjEwMDNhMzY0MDlhMjk2NDMyNjcgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL3N0b3JhZ2UvaW5kZXhlZGRiL29iamVjdHN0b3JlLWF1dG9pbmNyZW1lbnQtcHJpdmF0ZS1l
eHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvb2JqZWN0c3Rv
cmUtYXV0b2luY3JlbWVudC1wcml2YXRlLWV4cGVjdGVkLnR4dApAQCAtMzUsMTkgKzM1LDI2IEBA
IGdldExpbmNvbG5BZnRlckluamVjdGVkS2V5U3VjY2VzcygpOgogUEFTUyBldmVudC50YXJnZXQu
cmVzdWx0Lm5hbWUgaXMgIkxpbmNvbG4iCiBQQVNTIGV2ZW50LnRhcmdldC5yZXN1bHQubnVtYmVy
IGlzICI3MDEyIgogUEFTUyBldmVudC50YXJnZXQucmVzdWx0LmlkIGlzIDQKK3N0b3JlLmFkZCh7
bmFtZTogJ0JvYicsIG51bWJlcjogVWludDhBcnJheS5mcm9tKFsxMDAsIDEwMV0pfSkKK3B1dEJv
YlN1Y2Nlc3MoKToKK1BBU1MgZXZlbnQudGFyZ2V0LnJlc3VsdCBpcyA1CitzdG9yZS5nZXQoNSkK
K2dldEJvYlN1Y2Nlc3MoKToKK1BBU1MgZXZlbnQudGFyZ2V0LnJlc3VsdC5uYW1lIGlzICJCb2Ii
CitQQVNTIGV2ZW50LnRhcmdldC5yZXN1bHQubnVtYmVyIGlzIFsxMDAsIDEwMV0KIHN0b3JlID0g
dHJhbnMub2JqZWN0U3RvcmUoJ1N0b3JlV2l0aEF1dG9JbmNyZW1lbnQnKQogSW5zZXJ0IGludG8g
b2JqZWN0IHN0b3JlIHdpdGgga2V5IGdlbiB1c2luZyBleHBsaWNpdCBrZXkKLXN0b3JlLmFkZCh7
bmFtZTogJ0xpbmNvbG4nLCBudW1iZXI6ICc3MDEyJ30sIDUpCitzdG9yZS5hZGQoe25hbWU6ICdM
aW5jb2xuJywgbnVtYmVyOiAnNzAxMid9LCA2KQogYWRkTGluY29sbldpdGhFeHBsaWNpdEtleVN1
Y2Nlc3MoKToKLVBBU1MgZXZlbnQudGFyZ2V0LnJlc3VsdCBpcyA1Ci1zdG9yZS5nZXQoNSkKK1BB
U1MgZXZlbnQudGFyZ2V0LnJlc3VsdCBpcyA2CitzdG9yZS5nZXQoNikKIGdldExpbmNvbG5TdWNj
ZXNzKCk6CiBQQVNTIGV2ZW50LnRhcmdldC5yZXN1bHQubmFtZSBpcyAiTGluY29sbiIKIFBBU1Mg
ZXZlbnQudGFyZ2V0LnJlc3VsdC5udW1iZXIgaXMgIjcwMTIiCiBzdG9yZS5wdXQoe25hbWU6ICdB
YnJhaGFtJywgbnVtYmVyOiAnMjEwNyd9KQogcHV0QWJyYWhhbVN1Y2Nlc3MoKToKLVBBU1MgZXZl
bnQudGFyZ2V0LnJlc3VsdCBpcyA2Ci1zdG9yZS5nZXQoNikKK1BBU1MgZXZlbnQudGFyZ2V0LnJl
c3VsdCBpcyA3CitzdG9yZS5nZXQoNykKIGdldEFicmFoYW1TdWNjZXNzKCk6CiBQQVNTIGV2ZW50
LnRhcmdldC5yZXN1bHQubmFtZSBpcyAiQWJyYWhhbSIKIFBBU1MgZXZlbnQudGFyZ2V0LnJlc3Vs
dC5udW1iZXIgaXMgIjIxMDciCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4
ZWRkYi9yZXNvdXJjZXMvb2JqZWN0c3RvcmUtYXV0b2luY3JlbWVudC5qcyBiL0xheW91dFRlc3Rz
L3N0b3JhZ2UvaW5kZXhlZGRiL3Jlc291cmNlcy9vYmplY3RzdG9yZS1hdXRvaW5jcmVtZW50Lmpz
CmluZGV4IGE0NzhhYTEwNDg4MjY4NDdiYmMzZjExZWI3YzdiNjI0NGFhNjdmYTQuLjg5NGNlZDk2
YTkxZWU1Zjk1NzdhYTg3NGI4ODBmNTkxODMzZWRlMDIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L3N0b3JhZ2UvaW5kZXhlZGRiL3Jlc291cmNlcy9vYmplY3RzdG9yZS1hdXRvaW5jcmVtZW50Lmpz
CisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3Jlc291cmNlcy9vYmplY3RzdG9y
ZS1hdXRvaW5jcmVtZW50LmpzCkBAIC03MCw5ICs3MCwzMCBAQCBmdW5jdGlvbiBnZXRMaW5jb2xu
QWZ0ZXJJbmplY3RlZEtleVN1Y2Nlc3MoKQogICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygiZXZl
bnQudGFyZ2V0LnJlc3VsdC5udW1iZXIiLCAiNzAxMiIpOwogICAgIHNob3VsZEJlKCJldmVudC50
YXJnZXQucmVzdWx0LmlkIiwgIjQiKTsKIAorICAgIHJlcXVlc3QgPSBldmFsQW5kTG9nKCJzdG9y
ZS5hZGQoe25hbWU6ICdCb2InLCBudW1iZXI6IFVpbnQ4QXJyYXkuZnJvbShbMTAwLCAxMDFdKX0p
Iik7CisgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSBwdXRCb2JTdWNjZXNzOworICAgIHJlcXVlc3Qu
b25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOworfQorCitmdW5jdGlvbiBwdXRCb2JT
dWNjZXNzKCkKK3sKKyAgICBkZWJ1ZygicHV0Qm9iU3VjY2VzcygpOiIpOworICAgIHNob3VsZEJl
KCJldmVudC50YXJnZXQucmVzdWx0IiwgIjUiKTsKKworICAgIHJlcXVlc3QgPSBldmFsQW5kTG9n
KCJzdG9yZS5nZXQoNSkiKTsKKyAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IGdldEJvYlN1Y2Nlc3M7
CisgICAgcmVxdWVzdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7Cit9CisKK2Z1
bmN0aW9uIGdldEJvYlN1Y2Nlc3MoKQoreworICAgIGRlYnVnKCJnZXRCb2JTdWNjZXNzKCk6Iik7
CisgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJldmVudC50YXJnZXQucmVzdWx0Lm5hbWUiLCAi
Qm9iIik7CisgICAgc2hvdWxkQmUoImV2ZW50LnRhcmdldC5yZXN1bHQubnVtYmVyIiwgIlsxMDAs
IDEwMV0iKTsKKwogICAgIHNlbGYuc3RvcmUgPSBldmFsQW5kTG9nKCJzdG9yZSA9IHRyYW5zLm9i
amVjdFN0b3JlKCdTdG9yZVdpdGhBdXRvSW5jcmVtZW50JykiKTsKICAgICBkZWJ1ZygiSW5zZXJ0
IGludG8gb2JqZWN0IHN0b3JlIHdpdGgga2V5IGdlbiB1c2luZyBleHBsaWNpdCBrZXkiKTsKLSAg
ICByZXF1ZXN0ID0gZXZhbEFuZExvZygic3RvcmUuYWRkKHtuYW1lOiAnTGluY29sbicsIG51bWJl
cjogJzcwMTInfSwgNSkiKTsKKyAgICByZXF1ZXN0ID0gZXZhbEFuZExvZygic3RvcmUuYWRkKHtu
YW1lOiAnTGluY29sbicsIG51bWJlcjogJzcwMTInfSwgNikiKTsKICAgICByZXF1ZXN0Lm9uc3Vj
Y2VzcyA9IGFkZExpbmNvbG5XaXRoRXhwbGljaXRLZXlTdWNjZXNzOwogICAgIHJlcXVlc3Qub25l
cnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOwogfQpAQCAtODAsOSArMTAxLDkgQEAgZnVu
Y3Rpb24gZ2V0TGluY29sbkFmdGVySW5qZWN0ZWRLZXlTdWNjZXNzKCkKIGZ1bmN0aW9uIGFkZExp
bmNvbG5XaXRoRXhwbGljaXRLZXlTdWNjZXNzKCkKIHsKICAgICBkZWJ1ZygiYWRkTGluY29sbldp
dGhFeHBsaWNpdEtleVN1Y2Nlc3MoKToiKTsKLSAgICBzaG91bGRCZSgiZXZlbnQudGFyZ2V0LnJl
c3VsdCIsICI1Iik7CisgICAgc2hvdWxkQmUoImV2ZW50LnRhcmdldC5yZXN1bHQiLCAiNiIpOwog
Ci0gICAgcmVxdWVzdCA9IGV2YWxBbmRMb2coInN0b3JlLmdldCg1KSIpOworICAgIHJlcXVlc3Qg
PSBldmFsQW5kTG9nKCJzdG9yZS5nZXQoNikiKTsKICAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IGdl
dExpbmNvbG5TdWNjZXNzOwogICAgIHJlcXVlc3Qub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNh
bGxiYWNrOwogfQpAQCAtMTAxLDkgKzEyMiw5IEBAIGZ1bmN0aW9uIGdldExpbmNvbG5TdWNjZXNz
KCkKIGZ1bmN0aW9uIHB1dEFicmFoYW1TdWNjZXNzKCkKIHsKICAgICBkZWJ1ZygicHV0QWJyYWhh
bVN1Y2Nlc3MoKToiKTsKLSAgICBzaG91bGRCZSgiZXZlbnQudGFyZ2V0LnJlc3VsdCIsICI2Iik7
CisgICAgc2hvdWxkQmUoImV2ZW50LnRhcmdldC5yZXN1bHQiLCAiNyIpOwogCi0gICAgcmVxdWVz
dCA9IGV2YWxBbmRMb2coInN0b3JlLmdldCg2KSIpOworICAgIHJlcXVlc3QgPSBldmFsQW5kTG9n
KCJzdG9yZS5nZXQoNykiKTsKICAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IGdldEFicmFoYW1TdWNj
ZXNzOwogICAgIHJlcXVlc3Qub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOwogfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>