<?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>153912</bug_id>
          
          <creation_ts>2016-02-04 21:51:13 -0800</creation_ts>
          <short_desc>Modern IDB: UniqueIDBDatabase&apos;s m_databaseInfo is unsafely used from multiple threads</short_desc>
          <delta_ts>2016-02-05 14:30:12 -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>Other</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>149117</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Brady Eidson">beidson</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>achristensen</cc>
    
    <cc>alecflett</cc>
    
    <cc>ap</cc>
    
    <cc>commit-queue</cc>
    
    <cc>jsbell</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1162317</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-02-04 21:51:13 -0800</bug_when>
    <thetext>Modern IDB: UniqueIDBDatabase&apos;s m_databaseInfo is used from multiple threads

It&apos;s meant to be assigned and used on the main thread, but in UniqueIDBDatabase::performPutOrAdd, which is a database thread method:
    auto objectStoreInfo = m_databaseInfo-&gt;infoForExistingObjectStore(objectStoreIdentifier);

Yikes!

Noticed this in a random audit, don&apos;t know of any actual fallout, but it&apos;s obviously not safe.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1162320</commentid>
    <comment_count>1</comment_count>
      <attachid>270728</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-02-04 21:58:07 -0800</bug_when>
    <thetext>Created attachment 270728
Patch for moving between machines

This is the patch I plan on fixing up and landing tomorrow from a different machine - attaching it here so I don&apos;t lose it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1162321</commentid>
    <comment_count>2</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-02-04 22:04:14 -0800</bug_when>
    <thetext>In the meanwhile - while fixing this specific instance is easy - I&apos;m trying to come up with a good design pattern to apply here to actually prevent this type of coding mistake.

One idea is that UniqueIDBDatabase inherits from some class - like UniqueIDBDatabaseBase - and that class is the keeper of thread-sensitive objects, such as m_databaseInfo.

Additionally, the data members themselves are private, and access to them is only allowed through protected methods.

The protector methods that allow access could have ASSERT_WITH_SECURITY_IMPLICATION checks making sure the access is on the expected thread (e.g., m_databaseInfo only ever on the main thread, m_backingStore only ever on the database server thread, etc etc)

It would still be *possible* for the caller to save off their own pointer to the object that could be incorrectly used on another thread, but that would appear much more suspicious in any patch review and/or audit.

CC&apos;ing Alexey here for comment and ideas, since he&apos;s spent a lot of time dwelling on thread safety issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1162407</commentid>
    <comment_count>3</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-02-05 09:31:00 -0800</bug_when>
    <thetext>Sending the entire IDBObjectStoreInfo over for every put/add might be overkill - I&apos;ll look closely and see if sending some pieces over piecemeal might be lighter weight.

For example - We don&apos;t need a copy of each IDBIndexInfo that might exist in the object store.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1162408</commentid>
    <comment_count>4</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-02-05 09:34:33 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; Sending the entire IDBObjectStoreInfo over for every put/add might be
&gt; overkill - I&apos;ll look closely and see if sending some pieces over piecemeal
&gt; might be lighter weight.
&gt; 
&gt; For example - We don&apos;t need a copy of each IDBIndexInfo that might exist in
&gt; the object store.

We can go much lighter weight for the Memory backing store, but the SQLite backing store requires the whole thing to walk the indexes.

The Memory backing store does NOT need this because it saves its own copy of IDBIndexInfos in each MemoryIndex when it is created.

That seems much more efficient than passing over a full copy for every put or add.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1162410</commentid>
    <comment_count>5</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-02-05 09:35:48 -0800</bug_when>
    <thetext>All UniqueIDBDatabase needs for its logic is:
-object store identifier
-autoincrement flag
-object store key path

If the SQLite backing store maintained its own copy of the database info, it could also get buy with just that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1162437</commentid>
    <comment_count>6</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-02-05 10:55:43 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; If the SQLite backing store maintained its own copy of the database info, it
&gt; could also get buy with just that.

There is, of course, complexity in doing this properly which is:
-Keeping it updated during version change transactions
-Reverting it on version change abort</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1162438</commentid>
    <comment_count>7</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-02-05 10:56:20 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #5)
&gt; &gt; If the SQLite backing store maintained its own copy of the database info, it
&gt; &gt; could also get buy with just that.
&gt; 
&gt; There is, of course, complexity in doing this properly which is:
&gt; -Keeping it updated during version change transactions
&gt; -Reverting it on version change abort

Both are things we already do in the memory backing store, and will be covered by a myriad of tests, so it&apos;s definitely not insurmountable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1162459</commentid>
    <comment_count>8</comment_count>
      <attachid>270760</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-02-05 12:34:18 -0800</bug_when>
    <thetext>Created attachment 270760
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1162504</commentid>
    <comment_count>9</comment_count>
      <attachid>270760</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-02-05 14:30:09 -0800</bug_when>
    <thetext>Comment on attachment 270760
Patch v1

Clearing flags on attachment: 270760

Committed r196191: &lt;http://trac.webkit.org/changeset/196191&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1162505</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-02-05 14:30:12 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>270728</attachid>
            <date>2016-02-04 21:58:07 -0800</date>
            <delta_ts>2016-02-05 12:34:18 -0800</delta_ts>
            <desc>Patch for moving between machines</desc>
            <filename>proposedPatch</filename>
            <type>application/octet-stream</type>
            <size>7388</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9Vbmlx
dWVJREJEYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2
ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwCmluZGV4IDljMTk0M2IuLjljNWRiODggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRh
YmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1Vu
aXF1ZUlEQkRhdGFiYXNlLmNwcApAQCAtNjU2LDcgKzY1NiwxNCBAQCB2b2lkIFVuaXF1ZUlEQkRh
dGFiYXNlOjpwdXRPckFkZChjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0
IElEQktleQogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OnB1
dE9yQWRkIik7CiAKICAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFjayhjYWxs
YmFjayk7Ci0gICAgbV9zZXJ2ZXIucG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRh
c2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVB1dE9yQWRkLCBjYWxsYmFja0lE
LCByZXF1ZXN0RGF0YS50cmFuc2FjdGlvbklkZW50aWZpZXIoKSwgcmVxdWVzdERhdGEub2JqZWN0
U3RvcmVJZGVudGlmaWVyKCksIGtleURhdGEsIHZhbHVlRGF0YSwgb3ZlcndyaXRlTW9kZSkpOwor
CisgICAgYXV0byogb2JqZWN0U3RvcmVJbmZvID0gbV9kYXRhYmFzZUluZm8tPmluZm9Gb3JFeGlz
dGluZ09iamVjdFN0b3JlKHJlcXVlc3REYXRhLm9iamVjdFN0b3JlSWRlbnRpZmllcigpKTsKKyAg
ICBpZiAoIW9iamVjdFN0b3JlSW5mbykgeworICAgICAgICBwZXJmb3JtRXJyb3JDYWxsYmFjayhj
YWxsYmFja0lELCB7IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvciwgQVND
SUlMaXRlcmFsKCJPYmplY3Qgc3RvcmUgY2Fubm90IGJlIGZvdW5kIGluIHRoZSBiYWNraW5nIHN0
b3JlIikgfSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX3NlcnZlci5wb3N0RGF0
YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNl
OjpwZXJmb3JtUHV0T3JBZGQsIGNhbGxiYWNrSUQsIHJlcXVlc3REYXRhLnRyYW5zYWN0aW9uSWRl
bnRpZmllcigpLCAqb2JqZWN0U3RvcmVJbmZvLCBrZXlEYXRhLCB2YWx1ZURhdGEsIG92ZXJ3cml0
ZU1vZGUpKTsKIH0KIAogVk0mIFVuaXF1ZUlEQkRhdGFiYXNlOjpkYXRhYmFzZVRocmVhZFZNKCkK
QEAgLTY3NiwyNyArNjgzLDIxIEBAIEV4ZWNTdGF0ZSYgVW5pcXVlSURCRGF0YWJhc2U6OmRhdGFi
YXNlVGhyZWFkRXhlY1N0YXRlKCkKICAgICByZXR1cm4gKmdsb2JhbE9iamVjdC5nZXQoKS0+Z2xv
YmFsRXhlYygpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUHV0T3JBZGQo
dWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXIm
IHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBj
b25zdCBJREJLZXlEYXRhJiBrZXlEYXRhLCBjb25zdCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYgb3Jp
Z2luYWxSZWNvcmRWYWx1ZSwgSW5kZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUgb3Zl
cndyaXRlTW9kZSkKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1QdXRPckFkZCh1aW50
NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJh
bnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJPYmplY3RTdG9yZUluZm8mIG9iamVjdFN0b3Jl
SW5mbywgY29uc3QgSURCS2V5RGF0YSYga2V5RGF0YSwgY29uc3QgVGhyZWFkU2FmZURhdGFCdWZm
ZXImIG9yaWdpbmFsUmVjb3JkVmFsdWUsIEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVN
b2RlIG92ZXJ3cml0ZU1vZGUpCiB7CiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAgICAg
TE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1QdXRPckFkZCIp
OwogCiAgICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlKTsKLSAgICBBU1NFUlQob2JqZWN0U3RvcmVJ
ZGVudGlmaWVyKTsKKyAgICBBU1NFUlQob2JqZWN0U3RvcmVJbmZvLmlkZW50aWZpZXIoKSk7CiAK
ICAgICBJREJLZXlEYXRhIHVzZWRLZXk7CiAgICAgSURCRXJyb3IgZXJyb3I7Ci0KLSAgICBhdXRv
IG9iamVjdFN0b3JlSW5mbyA9IG1fZGF0YWJhc2VJbmZvLT5pbmZvRm9yRXhpc3RpbmdPYmplY3RT
dG9yZShvYmplY3RTdG9yZUlkZW50aWZpZXIpOwotICAgIGlmICghb2JqZWN0U3RvcmVJbmZvKSB7
Ci0gICAgICAgIGVycm9yID0gSURCRXJyb3IoSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRT
dGF0ZUVycm9yLCBBU0NJSUxpdGVyYWwoIk9iamVjdCBzdG9yZSBjYW5ub3QgYmUgZm91bmQgaW4g
dGhlIGJhY2tpbmcgc3RvcmUiKSk7Ci0gICAgICAgIG1fc2VydmVyLnBvc3REYXRhYmFzZVRhc2tS
ZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlk
UGVyZm9ybVB1dE9yQWRkLCBjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCB1c2VkS2V5KSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9CisgICAgYXV0byBvYmplY3RTdG9yZUlkZW50aWZpZXIgPSBv
YmplY3RTdG9yZUluZm8uaWRlbnRpZmllcigpOwogCiAgICAgYm9vbCB1c2VkS2V5SXNHZW5lcmF0
ZWQgPSBmYWxzZTsKICAgICBTY29wZUd1YXJkIGdlbmVyYXRlZEtleVJlc2V0dGVyOwotICAgIGlm
IChvYmplY3RTdG9yZUluZm8tPmF1dG9JbmNyZW1lbnQoKSAmJiAha2V5RGF0YS5pc1ZhbGlkKCkp
IHsKKyAgICBpZiAob2JqZWN0U3RvcmVJbmZvLmF1dG9JbmNyZW1lbnQoKSAmJiAha2V5RGF0YS5p
c1ZhbGlkKCkpIHsKICAgICAgICAgdWludDY0X3Qga2V5TnVtYmVyOwogICAgICAgICBlcnJvciA9
IG1fYmFja2luZ1N0b3JlLT5nZW5lcmF0ZUtleU51bWJlcih0cmFuc2FjdGlvbklkZW50aWZpZXIs
IG9iamVjdFN0b3JlSWRlbnRpZmllciwga2V5TnVtYmVyKTsKICAgICAgICAgaWYgKCFlcnJvci5p
c051bGwoKSkgewpAQCAtNzI4LDcgKzcyOSw3IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBl
cmZvcm1QdXRPckFkZCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlCiAg
ICAgLy8gSWYgT2JqZWN0U3RvcmUgaGFzIGEga2V5IHBhdGggYW5kIHRoZSBrZXkgaXMgYXV0b2dl
bmVyYXRlZCwgdGhlbiBpbmplY3QgdGhlIGtleSBpbnRvIHRoZSB2YWx1ZQogICAgIC8vIHVzaW5n
IHN0ZXBzIHRvIGFzc2lnbiBhIGtleSB0byBhIHZhbHVlIHVzaW5nIGEga2V5IHBhdGguCiAgICAg
VGhyZWFkU2FmZURhdGFCdWZmZXIgaW5qZWN0ZWRSZWNvcmRWYWx1ZTsKLSAgICBpZiAodXNlZEtl
eUlzR2VuZXJhdGVkICYmICFvYmplY3RTdG9yZUluZm8tPmtleVBhdGgoKS5pc051bGwoKSkgewor
ICAgIGlmICh1c2VkS2V5SXNHZW5lcmF0ZWQgJiYgIW9iamVjdFN0b3JlSW5mby5rZXlQYXRoKCku
aXNOdWxsKCkpIHsKICAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2tlcihkYXRhYmFzZVRocmVhZFZN
KCkpOwogCiAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBkZXNlcmlhbGl6ZUlEQlZhbHVlRGF0YVRv
SlNWYWx1ZShkYXRhYmFzZVRocmVhZEV4ZWNTdGF0ZSgpLCBvcmlnaW5hbFJlY29yZFZhbHVlKTsK
QEAgLTczNyw3ICs3MzgsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUHV0T3JB
ZGQodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZQogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCFpbmplY3RJREJLZXlJbnRvU2NyaXB0
VmFsdWUoZGF0YWJhc2VUaHJlYWRFeGVjU3RhdGUoKSwgdXNlZEtleSwgdmFsdWUsIG9iamVjdFN0
b3JlSW5mby0+a2V5UGF0aCgpKSkgeworICAgICAgICBpZiAoIWluamVjdElEQktleUludG9TY3Jp
cHRWYWx1ZShkYXRhYmFzZVRocmVhZEV4ZWNTdGF0ZSgpLCB1c2VkS2V5LCB2YWx1ZSwgb2JqZWN0
U3RvcmVJbmZvLmtleVBhdGgoKSkpIHsKICAgICAgICAgICAgIG1fc2VydmVyLnBvc3REYXRhYmFz
ZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFz
ZTo6ZGlkUGVyZm9ybVB1dE9yQWRkLCBjYWxsYmFja0lkZW50aWZpZXIsIElEQkVycm9yKElEQkRh
dGFiYXNlRXhjZXB0aW9uOjpDb25zdHJhaW50RXJyb3IsIEFTQ0lJTGl0ZXJhbCgiVW5hYmxlIHRv
IGluamVjdCByZWNvcmQga2V5IGludG8gcmVjb3JkIHZhbHVlIikpLCB1c2VkS2V5KSk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTc2MSwxMyArNzYyLDEzIEBAIHZvaWQgVW5p
cXVlSURCRGF0YWJhc2U6OnBlcmZvcm1QdXRPckFkZCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZp
ZXIsIGNvbnN0IElEQlJlCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBlcnJvciA9IG1f
YmFja2luZ1N0b3JlLT5hZGRSZWNvcmQodHJhbnNhY3Rpb25JZGVudGlmaWVyLCAqb2JqZWN0U3Rv
cmVJbmZvLCB1c2VkS2V5LCBpbmplY3RlZFJlY29yZFZhbHVlLmRhdGEoKSA/IGluamVjdGVkUmVj
b3JkVmFsdWUgOiBvcmlnaW5hbFJlY29yZFZhbHVlKTsKKyAgICBlcnJvciA9IG1fYmFja2luZ1N0
b3JlLT5hZGRSZWNvcmQodHJhbnNhY3Rpb25JZGVudGlmaWVyLCBvYmplY3RTdG9yZUluZm8sIHVz
ZWRLZXksIGluamVjdGVkUmVjb3JkVmFsdWUuZGF0YSgpID8gaW5qZWN0ZWRSZWNvcmRWYWx1ZSA6
IG9yaWdpbmFsUmVjb3JkVmFsdWUpOwogICAgIGlmICghZXJyb3IuaXNOdWxsKCkpIHsKICAgICAg
ICAgbV9zZXJ2ZXIucG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygq
dGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUHV0T3JBZGQsIGNhbGxiYWNrSWRl
bnRpZmllciwgZXJyb3IsIHVzZWRLZXkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IGlmIChvdmVyd3JpdGVNb2RlICE9IEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2Rl
OjpPdmVyd3JpdGVGb3JDdXJzb3IgJiYgb2JqZWN0U3RvcmVJbmZvLT5hdXRvSW5jcmVtZW50KCkg
JiYga2V5RGF0YS50eXBlKCkgPT0gSW5kZXhlZERCOjpLZXlUeXBlOjpOdW1iZXIpCisgICAgaWYg
KG92ZXJ3cml0ZU1vZGUgIT0gSW5kZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGU6Ok92
ZXJ3cml0ZUZvckN1cnNvciAmJiBvYmplY3RTdG9yZUluZm8uYXV0b0luY3JlbWVudCgpICYmIGtl
eURhdGEudHlwZSgpID09IEluZGV4ZWREQjo6S2V5VHlwZTo6TnVtYmVyKQogICAgICAgICBlcnJv
ciA9IG1fYmFja2luZ1N0b3JlLT5tYXliZVVwZGF0ZUtleUdlbmVyYXRvck51bWJlcih0cmFuc2Fj
dGlvbklkZW50aWZpZXIsIG9iamVjdFN0b3JlSWRlbnRpZmllciwga2V5RGF0YS5udW1iZXIoKSk7
CiAKICAgICBnZW5lcmF0ZWRLZXlSZXNldHRlci5kaXNhYmxlKCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFz
ZS5oCmluZGV4IGYxMGY3MDguLmRjMDE3NzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5oCkBAIC0x
MzUsNyArMTM1LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBlcmZvcm1DbGVhck9iamVjdFN0b3Jl
KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVy
JiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllcik7
CiAgICAgdm9pZCBwZXJmb3JtQ3JlYXRlSW5kZXgodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVy
LCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29u
c3QgSURCSW5kZXhJbmZvJik7CiAgICAgdm9pZCBwZXJmb3JtRGVsZXRlSW5kZXgodWludDY0X3Qg
Y2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0
aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1aW50NjRfdCBp
bmRleElkZW50aWZpZXIpOwotICAgIHZvaWQgcGVyZm9ybVB1dE9yQWRkKHVpbnQ2NF90IGNhbGxi
YWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklk
ZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgSURCS2V5RGF0
YSYsIGNvbnN0IFRocmVhZFNhZmVEYXRhQnVmZmVyJiB2YWx1ZURhdGEsIEluZGV4ZWREQjo6T2Jq
ZWN0U3RvcmVPdmVyd3JpdGVNb2RlKTsKKyAgICB2b2lkIHBlcmZvcm1QdXRPckFkZCh1aW50NjRf
dCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNh
Y3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJPYmplY3RTdG9yZUluZm8mLCBjb25zdCBJREJLZXlE
YXRhJiwgY29uc3QgVGhyZWFkU2FmZURhdGFCdWZmZXImIHZhbHVlRGF0YSwgSW5kZXhlZERCOjpP
YmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUpOwogICAgIHZvaWQgcGVyZm9ybUdldFJlY29yZCh1aW50
NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJh
bnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0
IElEQktleVJhbmdlRGF0YSYpOwogICAgIHZvaWQgcGVyZm9ybUdldEluZGV4UmVjb3JkKHVpbnQ2
NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFu
c2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgdWludDY0
X3QgaW5kZXhJZGVudGlmaWVyLCBJbmRleGVkREI6OkluZGV4UmVjb3JkVHlwZSwgY29uc3QgSURC
S2V5UmFuZ2VEYXRhJik7CiAgICAgdm9pZCBwZXJmb3JtR2V0Q291bnQodWludDY0X3QgY2FsbGJh
Y2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRl
bnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1aW50NjRfdCBpbmRleElk
ZW50aWZpZXIsIGNvbnN0IElEQktleVJhbmdlRGF0YSYpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>270760</attachid>
            <date>2016-02-05 12:34:18 -0800</date>
            <delta_ts>2016-02-05 14:30:09 -0800</delta_ts>
            <desc>Patch v1</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>10862</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBkN2ZiMjIzLi5hNGU3YmQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzYg
QEAKKzIwMTYtMDItMDUgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAg
ICAgIE1vZGVybiBJREI6IFVuaXF1ZUlEQkRhdGFiYXNlJ3MgbV9kYXRhYmFzZUluZm8gaXMgdW5z
YWZlbHkgdXNlZCBmcm9tIG11bHRpcGxlIHRocmVhZHMuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTM5MTIKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgKEFueXRoaW5nIHRlc3RhYmxl
IGFib3V0IHRoaXMgcGF0Y2ggaXMgYWxyZWFkeSBjb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzKS4K
KworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJCYWNraW5nU3RvcmUuaDoK
KworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlJREJCYWNraW5nU3Rv
cmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpNZW1vcnlJREJCYWNraW5nU3Rv
cmU6OmluZm9Gb3JPYmplY3RTdG9yZSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2Vy
dmVyL01lbW9yeUlEQkJhY2tpbmdTdG9yZS5oOgorCisgICAgICAgIFRlYWNoIHRoZSBTUUxpdGVJ
REJCYWNraW5nU3RvcmUgdG8gYWN0dWFsbHkga2VlcCBpdHMgbV9kYXRhYmFzZUluZm8gdXAgdG8g
ZGF0ZSBhcyBpdCBjaGFuZ2VzLAorICAgICAgICBhbmQgdG8gcmV2ZXJ0IGl0IHdoZW4gdmVyc2lv
biBjaGFuZ2UgdHJhbnNhY3Rpb25zIGFib3J0OgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRi
L3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURC
U2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OmJlZ2luVHJhbnNhY3Rpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OmFib3J0VHJhbnNh
Y3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3Rv
cmU6OmNvbW1pdFRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FM
aXRlSURCQmFja2luZ1N0b3JlOjpjcmVhdGVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlT2JqZWN0U3RvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OmNyZWF0
ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0
b3JlOjpkZWxldGVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlE
QkJhY2tpbmdTdG9yZTo6aW5mb0Zvck9iamVjdFN0b3JlKToKKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmg6CisKKyAgICAgICAgKiBNb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVB1dE9yQWRkKTogVXNl
IHRoZSBJREJCYWNraW5nU3RvcmUncyBjb3B5IG9mIHRoZSAKKyAgICAgICAgICBJREJPYmplY3RT
dG9yZUluZm8sIG1lYW50IG9ubHkgZm9yIHRoZSBkYXRhYmFzZSB0aHJlYWQsIGluc3RlYWQgb2Yg
dGhlIFVuaXF1ZUlEQkRhdGFiYXNlJ3MgY29weSwgCisgICAgICAgICAgd2hpY2ggaXMgbWVhbnQg
b25seSBmb3IgdGhlIG1haW4gdGhyZWFkLgorCiAyMDE2LTAyLTA1ICBBbGV4IENocmlzdGVuc2Vu
ICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQ2xlYW4gdXAgQmxvYiBjb2Rl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURC
QmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
SURCQmFja2luZ1N0b3JlLmgKaW5kZXggYjBmOTdkMy4uYzMzMjVhYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQkJhY2tpbmdTdG9yZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJCYWNraW5nU3Rv
cmUuaApAQCAtNzcsNiArNzcsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBJREJFcnJvciBvcGVu
Q3Vyc29yKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVy
LCBjb25zdCBJREJDdXJzb3JJbmZvJiwgSURCR2V0UmVzdWx0JiBvdXRSZXN1bHQpID0gMDsKICAg
ICB2aXJ0dWFsIElEQkVycm9yIGl0ZXJhdGVDdXJzb3IoY29uc3QgSURCUmVzb3VyY2VJZGVudGlm
aWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYg
Y3Vyc29ySWRlbnRpZmllciwgY29uc3QgSURCS2V5RGF0YSYsIHVpbnQzMl90IGNvdW50LCBJREJH
ZXRSZXN1bHQmIG91dFJlc3VsdCkgPSAwOwogCisgICAgdmlydHVhbCBJREJPYmplY3RTdG9yZUlu
Zm8qIGluZm9Gb3JPYmplY3RTdG9yZSh1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIpID0g
MDsKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlQmFja2luZ1N0b3JlKCkgPSAwOwogICAgIHZpcnR1
YWwgYm9vbCBzdXBwb3J0c1NpbXVsdGFuZW91c1RyYW5zYWN0aW9ucygpID0gMDsKIH07CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5SURC
QmFja2luZ1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZl
ci9NZW1vcnlJREJCYWNraW5nU3RvcmUuY3BwCmluZGV4IDc0ZGQ2ZjQuLjU0YzFmYTggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlJREJC
YWNraW5nU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3Nl
cnZlci9NZW1vcnlJREJCYWNraW5nU3RvcmUuY3BwCkBAIC00ODEsNiArNDgxLDEyIEBAIFJlZlB0
cjxNZW1vcnlPYmplY3RTdG9yZT4gTWVtb3J5SURCQmFja2luZ1N0b3JlOjp0YWtlT2JqZWN0U3Rv
cmVCeUlkZW50aWZpZXIodWluCiAgICAgcmV0dXJuIG9iamVjdFN0b3JlQnlJZGVudGlmaWVyOwog
fQogCitJREJPYmplY3RTdG9yZUluZm8qIE1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6aW5mb0Zvck9i
amVjdFN0b3JlKHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllcikKK3sKKyAgICBBU1NFUlQo
bV9kYXRhYmFzZUluZm8pOworICAgIHJldHVybiBtX2RhdGFiYXNlSW5mby0+aW5mb0ZvckV4aXN0
aW5nT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVJZGVudGlmaWVyKTsKK30KKwogdm9pZCBNZW1vcnlJ
REJCYWNraW5nU3RvcmU6OmRlbGV0ZUJhY2tpbmdTdG9yZSgpCiB7CiAgICAgLy8gVGhlIGluLW1l
bW9yeSBJREIgYmFja2luZyBzdG9yZSBkb2Vzbid0IG5lZWQgdG8gZG8gYW55IGNsZWFudXAgd2hl
biBpdCBpcyBkZWxldGVkLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL01lbW9yeUlEQkJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeUlEQkJhY2tpbmdTdG9yZS5oCmluZGV4IDYzYTll
YTUuLjQ5MjAyZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L3NlcnZlci9NZW1vcnlJREJCYWNraW5nU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5SURCQmFja2luZ1N0b3JlLmgKQEAgLTY5LDYgKzY5
LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgSURCRXJyb3Igb3BlbkN1cnNvcihjb25zdCBJREJS
ZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCQ3Vyc29y
SW5mbyYsIElEQkdldFJlc3VsdCYgb3V0UmVzdWx0KSBvdmVycmlkZSBmaW5hbDsKICAgICB2aXJ0
dWFsIElEQkVycm9yIGl0ZXJhdGVDdXJzb3IoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0
cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgY3Vyc29y
SWRlbnRpZmllciwgY29uc3QgSURCS2V5RGF0YSYsIHVpbnQzMl90IGNvdW50LCBJREJHZXRSZXN1
bHQmIG91dFJlc3VsdCkgb3ZlcnJpZGUgZmluYWw7CiAKKyAgICB2aXJ0dWFsIElEQk9iamVjdFN0
b3JlSW5mbyogaW5mb0Zvck9iamVjdFN0b3JlKHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmll
cikgb3ZlcnJpZGUgZmluYWw7CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUJhY2tpbmdTdG9yZSgp
IG92ZXJyaWRlIGZpbmFsOwogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c1NpbXVsdGFuZW91c1Ry
YW5zYWN0aW9ucygpIG92ZXJyaWRlIGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tp
bmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FM
aXRlSURCQmFja2luZ1N0b3JlLmNwcAppbmRleCA5MGJjZDFjLi5iNWQ1MjU2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2lu
Z1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
U1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcApAQCAtNjEyLDYgKzYxMiw3IEBAIElEQkVycm9yIFNR
TGl0ZUlEQkJhY2tpbmdTdG9yZTo6YmVnaW5UcmFuc2FjdGlvbihjb25zdCBJREJUcmFuc2FjdGlv
bkluZm8mIGluZm8pCiAKICAgICBBU1NFUlQobV9zcWxpdGVEQik7CiAgICAgQVNTRVJUKG1fc3Fs
aXRlREItPmlzT3BlbigpKTsKKyAgICBBU1NFUlQobV9kYXRhYmFzZUluZm8pOwogCiAgICAgYXV0
byBhZGRSZXN1bHQgPSBtX3RyYW5zYWN0aW9ucy5hZGQoaW5mby5pZGVudGlmaWVyKCksIG51bGxw
dHIpOwogICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkpIHsKQEAgLTYyMCw3ICs2MjEsMTIg
QEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpiZWdpblRyYW5zYWN0aW9uKGNvbnN0
IElEQlRyYW5zYWN0aW9uSW5mbyYgaW5mbykKICAgICB9CiAKICAgICBhZGRSZXN1bHQuaXRlcmF0
b3ItPnZhbHVlID0gc3RkOjptYWtlX3VuaXF1ZTxTUUxpdGVJREJUcmFuc2FjdGlvbj4oKnRoaXMs
IGluZm8pOwotICAgIHJldHVybiBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5iZWdpbigqbV9z
cWxpdGVEQik7CisKKyAgICBhdXRvIGVycm9yID0gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+
YmVnaW4oKm1fc3FsaXRlREIpOworICAgIGlmIChlcnJvci5pc051bGwoKSAmJiBpbmZvLm1vZGUo
KSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZTo6VmVyc2lvbkNoYW5nZSkKKyAgICAgICAg
bV9vcmlnaW5hbERhdGFiYXNlSW5mb0JlZm9yZVZlcnNpb25DaGFuZ2UgPSBzdGQ6Om1ha2VfdW5p
cXVlPElEQkRhdGFiYXNlSW5mbz4oKm1fZGF0YWJhc2VJbmZvKTsKKworICAgIHJldHVybiBlcnJv
cjsKIH0KIAogSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjphYm9ydFRyYW5zYWN0aW9u
KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgaWRlbnRpZmllcikKQEAgLTYzNiw2ICs2NDIs
MTIgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjphYm9ydFRyYW5zYWN0aW9uKGNv
bnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgaWQKICAgICAgICAgcmV0dXJuIHsgSURCRGF0YWJh
c2VFeGNlcHRpb246OlVua25vd25FcnJvciwgQVNDSUlMaXRlcmFsKCJBdHRlbXB0IHRvIGFib3J0
IGEgdHJhbnNhY3Rpb24gdGhhdCBoYXNuJ3QgYmVlbiBlc3RhYmxpc2hlZCIpIH07CiAgICAgfQog
CisKKyAgICBpZiAodHJhbnNhY3Rpb24tPm1vZGUoKSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9u
TW9kZTo6VmVyc2lvbkNoYW5nZSkgeworICAgICAgICBBU1NFUlQobV9vcmlnaW5hbERhdGFiYXNl
SW5mb0JlZm9yZVZlcnNpb25DaGFuZ2UpOworICAgICAgICBtX2RhdGFiYXNlSW5mbyA9IFdURk1v
dmUobV9vcmlnaW5hbERhdGFiYXNlSW5mb0JlZm9yZVZlcnNpb25DaGFuZ2UpOworICAgIH0KKwog
ICAgIHJldHVybiB0cmFuc2FjdGlvbi0+YWJvcnQoKTsKIH0KIApAQCAtNjUyLDcgKzY2NCwxNiBA
QCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmNvbW1pdFRyYW5zYWN0aW9uKGNvbnN0
IElEQlJlc291cmNlSWRlbnRpZmllciYgaQogICAgICAgICByZXR1cm4geyBJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6VW5rbm93bkVycm9yLCBBU0NJSUxpdGVyYWwoIkF0dGVtcHQgdG8gY29tbWl0IGEg
dHJhbnNhY3Rpb24gdGhhdCBoYXNuJ3QgYmVlbiBlc3RhYmxpc2hlZCIpIH07CiAgICAgfQogCi0g
ICAgcmV0dXJuIHRyYW5zYWN0aW9uLT5jb21taXQoKTsKKyAgICBhdXRvIGVycm9yID0gdHJhbnNh
Y3Rpb24tPmNvbW1pdCgpOworICAgIGlmICghZXJyb3IuaXNOdWxsKCkpIHsKKyAgICAgICAgaWYg
KHRyYW5zYWN0aW9uLT5tb2RlKCkgPT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGU6OlZlcnNp
b25DaGFuZ2UpIHsKKyAgICAgICAgICAgIEFTU0VSVChtX29yaWdpbmFsRGF0YWJhc2VJbmZvQmVm
b3JlVmVyc2lvbkNoYW5nZSk7CisgICAgICAgICAgICBtX2RhdGFiYXNlSW5mbyA9IFdURk1vdmUo
bV9vcmlnaW5hbERhdGFiYXNlSW5mb0JlZm9yZVZlcnNpb25DaGFuZ2UpOworICAgICAgICB9Cisg
ICAgfSBlbHNlCisgICAgICAgIG1fb3JpZ2luYWxEYXRhYmFzZUluZm9CZWZvcmVWZXJzaW9uQ2hh
bmdlID0gbnVsbHB0cjsKKworICAgIHJldHVybiBlcnJvcjsKIH0KIAogSURCRXJyb3IgU1FMaXRl
SURCQmFja2luZ1N0b3JlOjpjcmVhdGVPYmplY3RTdG9yZShjb25zdCBJREJSZXNvdXJjZUlkZW50
aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCT2JqZWN0U3RvcmVJbmZvJiBp
bmZvKQpAQCAtNzAyLDYgKzcyMyw4IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6
Y3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0CiAgICAgICAg
IH0KICAgICB9CiAKKyAgICBtX2RhdGFiYXNlSW5mby0+YWRkRXhpc3RpbmdPYmplY3RTdG9yZShp
bmZvKTsKKwogICAgIHJldHVybiB7IH07CiB9CiAKQEAgLTc3Nyw2ICs4MDAsOCBAQCBJREJFcnJv
ciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IElEQlJlc291
cmNlSWRlbnRpZmllciYgdAogICAgICAgICB9CiAgICAgfQogCisgICAgbV9kYXRhYmFzZUluZm8t
PmRlbGV0ZU9iamVjdFN0b3JlKG9iamVjdFN0b3JlSWRlbnRpZmllcik7CisKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIApAQCAtODkwLDYgKzkxNSwxMCBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5n
U3RvcmU6OmNyZWF0ZUluZGV4KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhYwog
ICAgICAgICB9CiAgICAgfQogCisgICAgYXV0byogb2JqZWN0U3RvcmUgPSBtX2RhdGFiYXNlSW5m
by0+aW5mb0ZvckV4aXN0aW5nT2JqZWN0U3RvcmUoaW5mby5vYmplY3RTdG9yZUlkZW50aWZpZXIo
KSk7CisgICAgQVNTRVJUKG9iamVjdFN0b3JlKTsKKyAgICBvYmplY3RTdG9yZS0+YWRkRXhpc3Rp
bmdJbmRleChpbmZvKTsKKwogICAgIHJldHVybiB7IH07CiB9CiAKQEAgLTEwMzIsNiArMTA2MSwx
MCBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmRlbGV0ZUluZGV4KGNvbnN0IElE
QlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhYwogICAgICAgICB9CiAgICAgfQogCisgICAgYXV0
byogb2JqZWN0U3RvcmUgPSBtX2RhdGFiYXNlSW5mby0+aW5mb0ZvckV4aXN0aW5nT2JqZWN0U3Rv
cmUob2JqZWN0U3RvcmVJZGVudGlmaWVyKTsKKyAgICBBU1NFUlQob2JqZWN0U3RvcmUpOworICAg
IG9iamVjdFN0b3JlLT5kZWxldGVJbmRleChpbmRleElkZW50aWZpZXIpOworCiAgICAgcmV0dXJu
IHsgfTsKIH0KIApAQCAtMTYyMiw2ICsxNjU1LDEyIEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tp
bmdTdG9yZTo6aXRlcmF0ZUN1cnNvcihjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5z
CiAgICAgcmV0dXJuIHsgfTsKIH0KIAorSURCT2JqZWN0U3RvcmVJbmZvKiBTUUxpdGVJREJCYWNr
aW5nU3RvcmU6OmluZm9Gb3JPYmplY3RTdG9yZSh1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZp
ZXIpCit7CisgICAgQVNTRVJUKG1fZGF0YWJhc2VJbmZvKTsKKyAgICByZXR1cm4gbV9kYXRhYmFz
ZUluZm8tPmluZm9Gb3JFeGlzdGluZ09iamVjdFN0b3JlKG9iamVjdFN0b3JlSWRlbnRpZmllcik7
Cit9CisKIHZvaWQgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpkZWxldGVCYWNraW5nU3RvcmUoKQog
ewogICAgIFN0cmluZyBkYkZpbGVuYW1lID0gZnVsbERhdGFiYXNlUGF0aCgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tp
bmdTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0
ZUlEQkJhY2tpbmdTdG9yZS5oCmluZGV4IDg4ZGY0ZDYuLjEzMWMzOWUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3Rv
cmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRl
SURCQmFja2luZ1N0b3JlLmgKQEAgLTczLDYgKzczLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
SURCRXJyb3Igb3BlbkN1cnNvcihjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0
aW9uSWRlbnRpZmllciwgY29uc3QgSURCQ3Vyc29ySW5mbyYsIElEQkdldFJlc3VsdCYgb3V0UmVz
dWx0KSBvdmVycmlkZSBmaW5hbDsKICAgICB2aXJ0dWFsIElEQkVycm9yIGl0ZXJhdGVDdXJzb3Io
Y29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0
IElEQlJlc291cmNlSWRlbnRpZmllciYgY3Vyc29ySWRlbnRpZmllciwgY29uc3QgSURCS2V5RGF0
YSYsIHVpbnQzMl90IGNvdW50LCBJREJHZXRSZXN1bHQmIG91dFJlc3VsdCkgb3ZlcnJpZGUgZmlu
YWw7CiAKKyAgICB2aXJ0dWFsIElEQk9iamVjdFN0b3JlSW5mbyogaW5mb0Zvck9iamVjdFN0b3Jl
KHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllcikgb3ZlcnJpZGUgZmluYWw7CiAgICAgdmly
dHVhbCB2b2lkIGRlbGV0ZUJhY2tpbmdTdG9yZSgpIG92ZXJyaWRlIGZpbmFsOwogICAgIHZpcnR1
YWwgYm9vbCBzdXBwb3J0c1NpbXVsdGFuZW91c1RyYW5zYWN0aW9ucygpIG92ZXJyaWRlIGZpbmFs
IHsgcmV0dXJuIGZhbHNlOyB9CiAKQEAgLTEwNCw2ICsxMDUsNyBAQCBwcml2YXRlOgogCiAgICAg
SURCRGF0YWJhc2VJZGVudGlmaWVyIG1faWRlbnRpZmllcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
SURCRGF0YWJhc2VJbmZvPiBtX2RhdGFiYXNlSW5mbzsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SURC
RGF0YWJhc2VJbmZvPiBtX29yaWdpbmFsRGF0YWJhc2VJbmZvQmVmb3JlVmVyc2lvbkNoYW5nZTsK
IAogICAgIHN0ZDo6dW5pcXVlX3B0cjxTUUxpdGVEYXRhYmFzZT4gbV9zcWxpdGVEQjsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlE
QkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9V
bmlxdWVJREJEYXRhYmFzZS5jcHAKaW5kZXggNzM4MzJhNS4uZDkwN2M4ZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVl
SURCRGF0YWJhc2UuY3BwCkBAIC02OTAsNyArNjkwLDcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFz
ZTo6cGVyZm9ybVB1dE9yQWRkKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURC
UmUKICAgICBJREJLZXlEYXRhIHVzZWRLZXk7CiAgICAgSURCRXJyb3IgZXJyb3I7CiAKLSAgICBh
dXRvIG9iamVjdFN0b3JlSW5mbyA9IG1fZGF0YWJhc2VJbmZvLT5pbmZvRm9yRXhpc3RpbmdPYmpl
Y3RTdG9yZShvYmplY3RTdG9yZUlkZW50aWZpZXIpOworICAgIGF1dG8qIG9iamVjdFN0b3JlSW5m
byA9IG1fYmFja2luZ1N0b3JlLT5pbmZvRm9yT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVJZGVudGlm
aWVyKTsKICAgICBpZiAoIW9iamVjdFN0b3JlSW5mbykgewogICAgICAgICBlcnJvciA9IElEQkVy
cm9yKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvciwgQVNDSUlMaXRlcmFs
KCJPYmplY3Qgc3RvcmUgY2Fubm90IGJlIGZvdW5kIGluIHRoZSBiYWNraW5nIHN0b3JlIikpOwog
ICAgICAgICBtX3NlcnZlci5wb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRU
YXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1QdXRPckFkZCwgY2FsbGJh
Y2tJZGVudGlmaWVyLCBlcnJvciwgdXNlZEtleSkpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>