<?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>54102</bug_id>
          
          <creation_ts>2011-02-09 07:15:29 -0800</creation_ts>
          <short_desc>IndexedDB: Update the semantics of put()</short_desc>
          <delta_ts>2011-02-10 11:42:04 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Hans Wennborg">hans</reporter>
          <assigned_to name="Hans Wennborg">hans</assigned_to>
          <cc>andreip</cc>
    
    <cc>dgrogan</cc>
    
    <cc>jorlow</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>348211</commentid>
    <comment_count>0</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-02-09 07:15:29 -0800</bug_when>
    <thetext>IndexedDB: Update the semantics of put()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348221</commentid>
    <comment_count>1</comment_count>
      <attachid>81811</attachid>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-02-09 07:28:00 -0800</bug_when>
    <thetext>Created attachment 81811
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348224</commentid>
    <comment_count>2</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-02-09 07:32:59 -0800</bug_when>
    <thetext>As usual, I&apos;m a bit uncertain about the PassRefPtr stuff. In the case of the selectKeyForPut function, I figured it should take all parameters as raw pointers since it doesn&apos;t take ownership of anything, and it returns a PassRefPtr because the result is expected to go in a RefPtr. Does that make sense?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348482</commentid>
    <comment_count>3</comment_count>
      <attachid>81811</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2011-02-09 13:00:37 -0800</bug_when>
    <thetext>Comment on attachment 81811
Patch

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

r=me

&gt; Source/WebCore/storage/IDBObjectStoreBackendImpl.cpp:229
&gt; +        // FIXME: Generate auto increment key, and inject it through the key path.

Can you do this in a follow up patch?

&gt; Source/WebCore/storage/IDBObjectStoreBackendImpl.cpp:260
&gt; +    RefPtr&lt;SerializedScriptValue&gt; value = prpValue;

The only time we need to do the whole prp and then save it to a RefPtr bit is when we pass the PassRefPtr to something that takes a PassRefPtr.  If we&apos;re just doing -&gt;&apos;s and .get()s then we don&apos;t actually need to do it.  Not sure if you do here, but just something to note.  (We use it more than we probably should.)

Does stuff below reference prpValue or value?  If it&apos;s the former, then you have a bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348484</commentid>
    <comment_count>4</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2011-02-09 13:06:18 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; As usual, I&apos;m a bit uncertain about the PassRefPtr stuff. In the case of the selectKeyForPut function, I figured it should take all parameters as raw pointers since it doesn&apos;t take ownership of anything, and it returns a PassRefPtr because the result is expected to go in a RefPtr. Does that make sense?

Yup, that&apos;s perfect.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348485</commentid>
    <comment_count>5</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2011-02-09 13:07:56 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 81811 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=81811&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/WebCore/storage/IDBObjectStoreBackendImpl.cpp:229
&gt; &gt; +        // FIXME: Generate auto increment key, and inject it through the key path.
&gt; 
&gt; Can you do this in a follow up patch?
&gt; 
&gt; &gt; Source/WebCore/storage/IDBObjectStoreBackendImpl.cpp:260
&gt; &gt; +    RefPtr&lt;SerializedScriptValue&gt; value = prpValue;
&gt; 
&gt; The only time we need to do the whole prp and then save it to a RefPtr bit is when we pass the PassRefPtr to something that takes a PassRefPtr.  If we&apos;re just doing -&gt;&apos;s and .get()s then we don&apos;t actually need to do it.  Not sure if you do here, but just something to note.  (We use it more than we probably should.)
&gt; 
&gt; Does stuff below reference prpValue or value?  If it&apos;s the former, then you have a bug.

To be clear: the reason for this is that when a PassRefPtr is assigned to another PassRefPtr or a RefPt, it gives up its reference and is zeroed out.  But if you just do a .get() or a -&gt; that doesn&apos;t happen.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348912</commentid>
    <comment_count>6</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-02-10 03:02:26 -0800</bug_when>
    <thetext>Committed r78187: &lt;http://trac.webkit.org/changeset/78187&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348915</commentid>
    <comment_count>7</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-02-10 03:09:46 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 81811 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=81811&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/WebCore/storage/IDBObjectStoreBackendImpl.cpp:229
&gt; &gt; +        // FIXME: Generate auto increment key, and inject it through the key path.
&gt; 
&gt; Can you do this in a follow up patch?
Will do.

&gt; 
&gt; &gt; Source/WebCore/storage/IDBObjectStoreBackendImpl.cpp:260
&gt; &gt; +    RefPtr&lt;SerializedScriptValue&gt; value = prpValue;
&gt; 
&gt; The only time we need to do the whole prp and then save it to a RefPtr bit is when we pass the PassRefPtr to something that takes a PassRefPtr.  If we&apos;re just doing -&gt;&apos;s and .get()s then we don&apos;t actually need to do it.  Not sure if you do here, but just something to note.  (We use it more than we probably should.)
Hmm, we just do -&gt; and .get() on value, so we could get rid of that RefPtr.

But this makes me wonder why so many of the parameters to putInternal() are PassRefPtr, even though we don&apos;t take ownership. Is this because of the mechanism with transaction and callback tasks?

&gt; 
&gt; Does stuff below reference prpValue or value?  If it&apos;s the former, then you have a bug.
Just value.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349236</commentid>
    <comment_count>8</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2011-02-10 11:42:04 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #3)
&gt; &gt; (From update of attachment 81811 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=81811&amp;action=review
&gt; &gt; 
&gt; &gt; r=me
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/storage/IDBObjectStoreBackendImpl.cpp:229
&gt; &gt; &gt; +        // FIXME: Generate auto increment key, and inject it through the key path.
&gt; &gt; 
&gt; &gt; Can you do this in a follow up patch?
&gt; Will do.
&gt; 
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/storage/IDBObjectStoreBackendImpl.cpp:260
&gt; &gt; &gt; +    RefPtr&lt;SerializedScriptValue&gt; value = prpValue;
&gt; &gt; 
&gt; &gt; The only time we need to do the whole prp and then save it to a RefPtr bit is when we pass the PassRefPtr to something that takes a PassRefPtr.  If we&apos;re just doing -&gt;&apos;s and .get()s then we don&apos;t actually need to do it.  Not sure if you do here, but just something to note.  (We use it more than we probably should.)
&gt; Hmm, we just do -&gt; and .get() on value, so we could get rid of that RefPtr.
&gt; 
&gt; But this makes me wonder why so many of the parameters to putInternal() are PassRefPtr, even though we don&apos;t take ownership. Is this because of the mechanism with transaction and callback tasks?

Hmm.  Actually, that might be it.  Maybe see if you can remove them and report back?

&gt; &gt; 
&gt; &gt; Does stuff below reference prpValue or value?  If it&apos;s the former, then you have a bug.
&gt; Just value.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>81811</attachid>
            <date>2011-02-09 07:28:00 -0800</date>
            <delta_ts>2011-02-09 13:00:37 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-54102-20110209152758.patch</filename>
            <type>text/plain</type>
            <size>13999</size>
            <attacher name="Hans Wennborg">hans</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogNzgwMzQKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA3OGQwY2E2ZTBmNTE2NmU1Yjg0ZWRk
ZmY2YzJiYTdjYzJmYTZmODIzLi4yMThmMDZjMTU2MzlmZDJlMGJhNTljZDk5OGNjZDk4MWU4ODI3
NjdlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTEtMDItMDkgIEhhbnMgV2VubmJvcmcgIDxo
YW5zQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBJbmRleGVkREI6IFVwZGF0ZSB0aGUgc2VtYW50aWNzIG9mIHB1dCgpCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NDEwMgorCisgICAg
ICAgIFVwZGF0ZSB0ZXN0IHRvIHJlZmxlY3QgdGhlIG5ldyBzZW1hbnRpY3MuCisKKyAgICAgICAg
KiBzdG9yYWdlL2luZGV4ZWRkYi9vYmplY3RzdG9yZS1hdXRvaW5jcmVtZW50LWV4cGVjdGVkLnR4
dDoKKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9vYmplY3RzdG9yZS1hdXRvaW5jcmVtZW50
Lmh0bWw6CisKIDIwMTEtMDItMDkgIElseWEgVGlraG9ub3Zza3kgIDxsb2lzbG9AY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9y
YWdlL2luZGV4ZWRkYi9vYmplY3RzdG9yZS1hdXRvaW5jcmVtZW50LWV4cGVjdGVkLnR4dCBiL0xh
eW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL29iamVjdHN0b3JlLWF1dG9pbmNyZW1lbnQtZXhw
ZWN0ZWQudHh0CmluZGV4IGI4NTg3YTMxZmU4MDUxYzM2ZmU1YzNhMjM2YWRmNzk3NzhkZjUwMmQu
LjViYTI3OGI3YjMzN2EzYmFiZWZkNWE2ZThjNGMwNzU5ZTRkN2YzMzUgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL29iamVjdHN0b3JlLWF1dG9pbmNyZW1lbnQtZXhw
ZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL29iamVjdHN0b3Jl
LWF1dG9pbmNyZW1lbnQtZXhwZWN0ZWQudHh0CkBAIC01NywxMyArNTcsMTMgQEAgUEFTUyBzdG9y
ZU5hbWVzLmxlbmd0aCBpcyAzCiBzZXRWZXJzaW9uQ29tcGxldGVkKCk6CiB0cmFucyA9IGRiLnRy
YW5zYWN0aW9uKFtdLCB3ZWJraXRJREJUcmFuc2FjdGlvbi5SRUFEX1dSSVRFKQogc3RvcmUgPSB0
cmFucy5vYmplY3RTdG9yZSgnU3RvcmVXaXRoS2V5UGF0aCcpCi1JbnNlcnQgaW4gb2JqZWN0IHN0
b3JlIHdpdGgga2V5IGdlbiBhbmQga2V5IHBhdGgKLXN0b3JlLmFkZCh7bmFtZTogJ0xpbmNvbG4n
LCBudW1iZXI6ICc3MDEyJ30pCi1hZGRMaW5jb2xuRXJyb3IoKToKLUVycm9yIGV2ZW50IGZpcmVk
OgotUEFTUyAncmVzdWx0JyBpbiBldmVudCBpcyBmYWxzZQotUEFTUyAnY29kZScgaW4gZXZlbnQg
aXMgdHJ1ZQotUEFTUyAnbWVzc2FnZScgaW4gZXZlbnQgaXMgdHJ1ZQorSW5zZXJ0IGludG8gb2Jq
ZWN0IHN0b3JlIHdpdGggYXV0byBpbmNyZW1lbnQgYW5kIGtleSBwYXRoLCB3aXRoIGtleSBpbiB0
aGUgb2JqZWN0Lgorc3RvcmUuYWRkKHtuYW1lOiAnSmVmZmVyc3NvbicsIG51bWJlcjogJzcwMTAn
LCBpZDogM30pCithZGRKZWZmZXJzc29uU3VjY2VzcygpOgorU3VjY2VzcyBldmVudCBmaXJlZDoK
K1BBU1MgJ3Jlc3VsdCcgaW4gZXZlbnQgaXMgdHJ1ZQorUEFTUyAnY29kZScgaW4gZXZlbnQgaXMg
ZmFsc2UKK1BBU1MgJ21lc3NhZ2UnIGluIGV2ZW50IGlzIGZhbHNlCiBQQVNTICdzb3VyY2UnIGlu
IGV2ZW50IGlzIHRydWUKIFBBU1MgZXZlbnQuc291cmNlICE9IG51bGwgaXMgdHJ1ZQogUEFTUyAn
b25zdWNjZXNzJyBpbiBldmVudC50YXJnZXQgaXMgdHJ1ZQpAQCAtNzEsMTIgKzcxLDEwIEBAIFBB
U1MgJ29uZXJyb3InIGluIGV2ZW50LnRhcmdldCBpcyB0cnVlCiBQQVNTICdyZWFkeVN0YXRlJyBp
biBldmVudC50YXJnZXQgaXMgdHJ1ZQogUEFTUyBldmVudC50YXJnZXQucmVhZHlTdGF0ZSBpcyBl
dmVudC50YXJnZXQuRE9ORQogCi1QQVNTIGV2ZW50LmNvZGUgaXMgd2Via2l0SURCRGF0YWJhc2VF
eGNlcHRpb24uVU5LTk9XTl9FUlIKLWV2ZW50LnByZXZlbnREZWZhdWx0KCkKLXN0b3JlID0gdHJh
bnMub2JqZWN0U3RvcmUoJ1N0b3JlV2l0aEF1dG9JbmNyZW1lbnQnKQotSW5zZXJ0IGludG8gb2Jq
ZWN0IHN0b3JlIHdpdGgga2V5IGdlbiB1c2luZyBleHBsaWNpdCBrZXkKLXN0b3JlLmFkZCh7bmFt
ZTogJ0xpbmNvbG4nfSwgMSkKLWFkZFdpdGhFeHBsaWNpdEtleUVycm9yKCk6CitQQVNTIGV2ZW50
LnJlc3VsdCBpcyAzCitJbnNlcnQgaW50byBvYmplY3Qgc3RvcmUgd2l0aCBhdXRvIGluY3JlbWVu
dCBhbmQga2V5IHBhdGgsIHdpdGhvdXQga2V5IGluIHRoZSBvYmplY3QuCitzdG9yZS5hZGQoe25h
bWU6ICdMaW5jb2xuJywgbnVtYmVyOiAnNzAxMid9KQorYWRkTGluY29sbkVycm9yKCk6CiBFcnJv
ciBldmVudCBmaXJlZDoKIFBBU1MgJ3Jlc3VsdCcgaW4gZXZlbnQgaXMgZmFsc2UKIFBBU1MgJ2Nv
ZGUnIGluIGV2ZW50IGlzIHRydWUKQEAgLTg4LDEwICs4NiwxMSBAQCBQQVNTICdvbmVycm9yJyBp
biBldmVudC50YXJnZXQgaXMgdHJ1ZQogUEFTUyAncmVhZHlTdGF0ZScgaW4gZXZlbnQudGFyZ2V0
IGlzIHRydWUKIFBBU1MgZXZlbnQudGFyZ2V0LnJlYWR5U3RhdGUgaXMgZXZlbnQudGFyZ2V0LkRP
TkUKIAotUEFTUyBldmVudC5jb2RlIGlzIHdlYmtpdElEQkRhdGFiYXNlRXhjZXB0aW9uLkRBVEFf
RVJSCitQQVNTIGV2ZW50LmNvZGUgaXMgd2Via2l0SURCRGF0YWJhc2VFeGNlcHRpb24uVU5LTk9X
Tl9FUlIKIGV2ZW50LnByZXZlbnREZWZhdWx0KCkKLUluc2VydCBpbnRvIG9iamVjdCBzdG9yZSB3
aXRoIGtleSBnZW4gYW5kIG5vIGtleSBwYXRoCi1zdG9yZS5hZGQoe25hbWU6ICdMaW5jb2xuJywg
bnVtYmVyOiAnNzAxMid9KQorc3RvcmUgPSB0cmFucy5vYmplY3RTdG9yZSgnU3RvcmVXaXRoQXV0
b0luY3JlbWVudCcpCitJbnNlcnQgaW50byBvYmplY3Qgc3RvcmUgd2l0aCBrZXkgZ2VuIHVzaW5n
IGV4cGxpY2l0IGtleQorc3RvcmUuYWRkKHtuYW1lOiAnTGluY29sbicsIG51bWJlcjogJzcwMTIn
fSwgNSkKIGFkZExpbmNvbG5TdWNjZXNzKCk6CiBTdWNjZXNzIGV2ZW50IGZpcmVkOgogUEFTUyAn
cmVzdWx0JyBpbiBldmVudCBpcyB0cnVlCkBAIC0xMDQsOCArMTAzLDggQEAgUEFTUyAnb25lcnJv
cicgaW4gZXZlbnQudGFyZ2V0IGlzIHRydWUKIFBBU1MgJ3JlYWR5U3RhdGUnIGluIGV2ZW50LnRh
cmdldCBpcyB0cnVlCiBQQVNTIGV2ZW50LnRhcmdldC5yZWFkeVN0YXRlIGlzIGV2ZW50LnRhcmdl
dC5ET05FCiAKLVBBU1MgZXZlbnQucmVzdWx0IGlzIDEKLXN0b3JlLmdldCgxKQorUEFTUyBldmVu
dC5yZXN1bHQgaXMgNQorc3RvcmUuZ2V0KDUpCiBnZXRMaW5jb2xuU3VjY2VzcygpOgogU3VjY2Vz
cyBldmVudCBmaXJlZDoKIFBBU1MgJ3Jlc3VsdCcgaW4gZXZlbnQgaXMgdHJ1ZQpAQCAtMTMzLDgg
KzEzMiw4IEBAIFBBU1MgJ29uZXJyb3InIGluIGV2ZW50LnRhcmdldCBpcyB0cnVlCiBQQVNTICdy
ZWFkeVN0YXRlJyBpbiBldmVudC50YXJnZXQgaXMgdHJ1ZQogUEFTUyBldmVudC50YXJnZXQucmVh
ZHlTdGF0ZSBpcyBldmVudC50YXJnZXQuRE9ORQogCi1QQVNTIGV2ZW50LnJlc3VsdCBpcyAyCi1z
dG9yZS5nZXQoMikKK1BBU1MgZXZlbnQucmVzdWx0IGlzIDYKK3N0b3JlLmdldCg2KQogZ2V0QWJy
YWhhbVN1Y2Nlc3MoKToKIFN1Y2Nlc3MgZXZlbnQgZmlyZWQ6CiBQQVNTICdyZXN1bHQnIGluIGV2
ZW50IGlzIHRydWUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL29i
amVjdHN0b3JlLWF1dG9pbmNyZW1lbnQuaHRtbCBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhl
ZGRiL29iamVjdHN0b3JlLWF1dG9pbmNyZW1lbnQuaHRtbAppbmRleCAzOWNmOGI1YjEwNmY3Nzdl
OWY2NTkwNjhlZWYzODJiODQwODcwOWM4Li4wYzBlOWY1OThmMGJhOTdiMmIxNmE2OTVkNmIyNDdk
Y2YwYmZiNWU1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9vYmpl
Y3RzdG9yZS1hdXRvaW5jcmVtZW50Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRl
eGVkZGIvb2JqZWN0c3RvcmUtYXV0b2luY3JlbWVudC5odG1sCkBAIC03NCw3ICs3NCwxOSBAQCBm
dW5jdGlvbiBzZXRWZXJzaW9uQ29tcGxldGVkKCkKIAogICAgIHdpbmRvdy5zdG9yZSA9IGV2YWxB
bmRMb2coInN0b3JlID0gdHJhbnMub2JqZWN0U3RvcmUoJ1N0b3JlV2l0aEtleVBhdGgnKSIpOwog
Ci0gICAgZGVidWcoIkluc2VydCBpbiBvYmplY3Qgc3RvcmUgd2l0aCBrZXkgZ2VuIGFuZCBrZXkg
cGF0aCIpOworICAgIGRlYnVnKCJJbnNlcnQgaW50byBvYmplY3Qgc3RvcmUgd2l0aCBhdXRvIGlu
Y3JlbWVudCBhbmQga2V5IHBhdGgsIHdpdGgga2V5IGluIHRoZSBvYmplY3QuIik7CisgICAgcmVz
dWx0ID0gZXZhbEFuZExvZygic3RvcmUuYWRkKHtuYW1lOiAnSmVmZmVyc3NvbicsIG51bWJlcjog
JzcwMTAnLCBpZDogM30pIik7CisgICAgcmVzdWx0Lm9uc3VjY2VzcyA9IGFkZEplZmZlcnNzb25T
dWNjZXNzOworICAgIHJlc3VsdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7Cit9
CisKK2Z1bmN0aW9uIGFkZEplZmZlcnNzb25TdWNjZXNzKCkKK3sKKyAgICBkZWJ1ZygiYWRkSmVm
ZmVyc3NvblN1Y2Nlc3MoKToiKTsKKyAgICB2ZXJpZnlTdWNjZXNzRXZlbnQoZXZlbnQpOworICAg
IHNob3VsZEJlKCJldmVudC5yZXN1bHQiLCAiMyIpOworCisgICAgZGVidWcoIkluc2VydCBpbnRv
IG9iamVjdCBzdG9yZSB3aXRoIGF1dG8gaW5jcmVtZW50IGFuZCBrZXkgcGF0aCwgd2l0aG91dCBr
ZXkgaW4gdGhlIG9iamVjdC4iKTsKICAgICByZXN1bHQgPSBldmFsQW5kTG9nKCJzdG9yZS5hZGQo
e25hbWU6ICdMaW5jb2xuJywgbnVtYmVyOiAnNzAxMid9KSIpOwogICAgIHJlc3VsdC5vbnN1Y2Nl
c3MgPSB1bmV4cGVjdGVkU3VjY2Vzc0NhbGxiYWNrOwogICAgIHJlc3VsdC5vbmVycm9yID0gYWRk
TGluY29sbkVycm9yOwpAQCAtOTEsMzIgKzEwMywxNyBAQCBmdW5jdGlvbiBhZGRMaW5jb2xuRXJy
b3IoKQogCiAgICAgd2luZG93LnN0b3JlID0gZXZhbEFuZExvZygic3RvcmUgPSB0cmFucy5vYmpl
Y3RTdG9yZSgnU3RvcmVXaXRoQXV0b0luY3JlbWVudCcpIik7CiAgICAgZGVidWcoIkluc2VydCBp
bnRvIG9iamVjdCBzdG9yZSB3aXRoIGtleSBnZW4gdXNpbmcgZXhwbGljaXQga2V5Iik7Ci0gICAg
cmVzdWx0ID0gZXZhbEFuZExvZygic3RvcmUuYWRkKHtuYW1lOiAnTGluY29sbid9LCAxKSIpOwot
ICAgIHJlc3VsdC5vbnN1Y2Nlc3MgPSB1bmV4cGVjdGVkU3VjY2Vzc0NhbGxiYWNrOwotICAgIHJl
c3VsdC5vbmVycm9yID0gYWRkV2l0aEV4cGxpY2l0S2V5RXJyb3I7Ci19Ci0KLWZ1bmN0aW9uIGFk
ZFdpdGhFeHBsaWNpdEtleUVycm9yKCkKLXsKLSAgICBkZWJ1ZygiYWRkV2l0aEV4cGxpY2l0S2V5
RXJyb3IoKToiKTsKLSAgICB2ZXJpZnlFcnJvckV2ZW50KGV2ZW50KTsKLSAgICBzaG91bGRCZSgi
ZXZlbnQuY29kZSIsICJ3ZWJraXRJREJEYXRhYmFzZUV4Y2VwdGlvbi5EQVRBX0VSUiIpOwotCi0g
ICAgZXZhbEFuZExvZygiZXZlbnQucHJldmVudERlZmF1bHQoKSIpOwotCi0gICAgZGVidWcoIklu
c2VydCBpbnRvIG9iamVjdCBzdG9yZSB3aXRoIGtleSBnZW4gYW5kIG5vIGtleSBwYXRoIik7Ci0g
ICAgcmVzdWx0ID0gZXZhbEFuZExvZygic3RvcmUuYWRkKHtuYW1lOiAnTGluY29sbicsIG51bWJl
cjogJzcwMTInfSkiKTsKKyAgICByZXN1bHQgPSBldmFsQW5kTG9nKCJzdG9yZS5hZGQoe25hbWU6
ICdMaW5jb2xuJywgbnVtYmVyOiAnNzAxMid9LCA1KSIpOwogICAgIHJlc3VsdC5vbnN1Y2Nlc3Mg
PSBhZGRMaW5jb2xuU3VjY2VzczsKLSAgICByZXN1bHQub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJv
ckNhbGxiYWNrOwogfQogCiBmdW5jdGlvbiBhZGRMaW5jb2xuU3VjY2VzcygpCiB7CiAgICAgZGVi
dWcoImFkZExpbmNvbG5TdWNjZXNzKCk6Iik7CiAgICAgdmVyaWZ5U3VjY2Vzc0V2ZW50KGV2ZW50
KTsKLSAgICBzaG91bGRCZSgiZXZlbnQucmVzdWx0IiwgIjEiKTsKKyAgICBzaG91bGRCZSgiZXZl
bnQucmVzdWx0IiwgIjUiKTsKIAotICAgIHJlc3VsdCA9IGV2YWxBbmRMb2coInN0b3JlLmdldCgx
KSIpOworICAgIHJlc3VsdCA9IGV2YWxBbmRMb2coInN0b3JlLmdldCg1KSIpOwogICAgIHJlc3Vs
dC5vbnN1Y2Nlc3MgPSBnZXRMaW5jb2xuU3VjY2VzczsKICAgICByZXN1bHQub25lcnJvciA9IHVu
ZXhwZWN0ZWRFcnJvckNhbGxiYWNrOwogfQpAQCAtMTM3LDkgKzEzNCw5IEBAIGZ1bmN0aW9uIHB1
dEFicmFoYW1TdWNjZXNzKCkKIHsKICAgICBkZWJ1ZygicHV0QWJyYWhhbVN1Y2Nlc3MoKToiKTsK
ICAgICB2ZXJpZnlTdWNjZXNzRXZlbnQoZXZlbnQpOwotICAgIHNob3VsZEJlKCJldmVudC5yZXN1
bHQiLCAiMiIpOworICAgIHNob3VsZEJlKCJldmVudC5yZXN1bHQiLCAiNiIpOwogCi0gICAgcmVz
dWx0ID0gZXZhbEFuZExvZygic3RvcmUuZ2V0KDIpIik7CisgICAgcmVzdWx0ID0gZXZhbEFuZExv
Zygic3RvcmUuZ2V0KDYpIik7CiAgICAgcmVzdWx0Lm9uc3VjY2VzcyA9IGdldEFicmFoYW1TdWNj
ZXNzOwogICAgIHJlc3VsdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKaW5kZXggMDY2MTczYTBhMjIyMTg3YjMxMGY2OGM0OTAyMWExYmI2NDQwNjNkMy4uMjRj
OTY4ODdjMDMwODIwMDZlNzhhOTNjMjY0NzQ2M2JkYzQ1N2YzZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDI2IEBACisyMDExLTAyLTA5ICBIYW5zIFdlbm5ib3JnICA8aGFuc0BjaHJvbWl1bS5vcmc+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW5kZXhl
ZERCOiBVcGRhdGUgdGhlIHNlbWFudGljcyBvZiBwdXQoKQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQxMDIKKworICAgICAgICBVcGRhdGUgdGhlIHNl
bWFudGljcyBvZiBwdXQ6IEZvciBvYmplY3Qgc3RvcmVzIHdpdGggYXV0byBpbmNyZW1lbnQsCisg
ICAgICAgIGl0IHNob3VsZCBiZSBhbGxvd2VkIHRvIHByb3ZpZGUgYW4gZXhwbGljaXQga2V5LCBv
ciBhbiBpbi1saW5lIGtleSwKKyAgICAgICAgb3ZlcnJpZGluZyB0aGUga2V5IGdlbmVyYXRvciBt
ZWNoYW5pc20uCisKKyAgICAgICAgVGhpcyByZWZsZWN0cyB0aGUgc3BlYyBjaGFuZ2VzIHN1Z2dl
c3RlZCBoZXJlOgorICAgICAgICBodHRwOi8vd3d3LnczLm9yZy9CdWdzL1B1YmxpYy9zaG93X2J1
Zy5jZ2k/aWQ9MTE5NzYKKworICAgICAgICBFeHRyYWN0aW5nIGtleS1zZWxlY3Rpb24gbG9naWMg
aW50byBpdHMgb3duIGZ1bmN0aW9uCisgICAgICAgIHRvIG1ha2UgaXQgYSBiaXQgZWFzaWVyIG9u
IHRoZSBleWVzLgorCisgICAgICAgICogc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnNlbGVj
dEtleUZvclB1dCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
OjpwdXRJbnRlcm5hbCk6CisgICAgICAgICogc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsLmg6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpyZXNl
dEF1dG9JbmNyZW1lbnRLZXlDYWNoZSk6CisKIDIwMTEtMDItMDggIFBhdmVsIFBvZGl2aWxvdiAg
PHBvZGl2aWxvdkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgWXVyeSBTZW1p
a2hhdHNreS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGwuY3BwCmluZGV4IDIxM2Y1ZDA5ZGE4NGQ5ZTI0NTkwNDU4Mjk3ZGI5OTI5Njhh
ZjliY2YuLjU3Y2NkMzZmOGQxZGY0ZDgwOTEwMTQyZjc4OTJmYzBjYzgzNmM2YjkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNw
cApAQCAtMTk3LDUxICsxOTcsNzEgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpw
dXQoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycFZhbHVlLAogICAgICAgICBl
YyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOT1RfQUxMT1dFRF9FUlI7CiB9CiAKLXZvaWQgSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBh
c3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBwcnBWYWx1ZSwgUGFzc1JlZlB0cjxJREJL
ZXk+IHBycEtleSwgUHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2Fs
bGJhY2tzLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNh
Y3Rpb24pCitQYXNzUmVmUHRyPElEQktleT4gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6c2Vs
ZWN0S2V5Rm9yUHV0KElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwqIG9iamVjdFN0b3JlLCBTZXJp
YWxpemVkU2NyaXB0VmFsdWUqIHZhbHVlLCBJREJLZXkqIGtleSwgUHV0TW9kZSBwdXRNb2RlLCBJ
REJDYWxsYmFja3MqIGNhbGxiYWNrcykKIHsKLSAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPiB2YWx1ZSA9IHBycFZhbHVlOwotICAgIFJlZlB0cjxJREJLZXk+IGtleSA9IHBycEtleTsK
LQogICAgIGlmIChwdXRNb2RlID09IEN1cnNvclVwZGF0ZSkKICAgICAgICAgQVNTRVJUKGtleSk7
CiAKLSAgICBpZiAoIW9iamVjdFN0b3JlLT5tX2tleVBhdGguaXNOdWxsKCkgJiYga2V5ICYmIHB1
dE1vZGUgIT0gQ3Vyc29yVXBkYXRlKSB7CisgICAgY29uc3QgYm9vbCBhdXRvSW5jcmVtZW50ID0g
b2JqZWN0U3RvcmUtPmF1dG9JbmNyZW1lbnQoKTsKKyAgICBjb25zdCBib29sIGhhc0tleVBhdGgg
PSAhb2JqZWN0U3RvcmUtPm1fa2V5UGF0aC5pc051bGwoKTsKKworICAgIGlmIChoYXNLZXlQYXRo
ICYmIGtleSAmJiBwdXRNb2RlICE9IEN1cnNvclVwZGF0ZSkgewogICAgICAgICBjYWxsYmFja3Mt
Pm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpE
QVRBX0VSUiwgIkEga2V5IHdhcyBzdXBwbGllZCBmb3IgYW4gb2JqZWN0U3RvcmUgdGhhdCBoYXMg
YSBrZXlQYXRoLiIpKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gMDsKICAgICB9
CiAKLSAgICBpZiAob2JqZWN0U3RvcmUtPmF1dG9JbmNyZW1lbnQoKSAmJiBrZXkgJiYgcHV0TW9k
ZSAhPSBDdXJzb3JVcGRhdGUpIHsKLSAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFi
YXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlIsICJBIGtleSB3
YXMgc3VwcGxpZWQgZm9yIGFuIG9iamVjdFN0b3JlIHRoYXQgaXMgdXNpbmcgYXV0byBpbmNyZW1l
bnQuIikpOwotICAgICAgICByZXR1cm47CisgICAgaWYgKGF1dG9JbmNyZW1lbnQgJiYga2V5KSB7
CisgICAgICAgIG9iamVjdFN0b3JlLT5yZXNldEF1dG9JbmNyZW1lbnRLZXlDYWNoZSgpOworICAg
ICAgICByZXR1cm4ga2V5OwogICAgIH0KIAotICAgIGlmIChvYmplY3RTdG9yZS0+YXV0b0luY3Jl
bWVudCgpICYmIHB1dE1vZGUgIT0gQ3Vyc29yVXBkYXRlKSB7Ci0gICAgICAgIGtleSA9IG9iamVj
dFN0b3JlLT5nZW5BdXRvSW5jcmVtZW50S2V5KCk7CisgICAgaWYgKGF1dG9JbmNyZW1lbnQpIHsK
KyAgICAgICAgQVNTRVJUKCFrZXkpOworICAgICAgICBpZiAoIWhhc0tleVBhdGgpCisgICAgICAg
ICAgICByZXR1cm4gb2JqZWN0U3RvcmUtPmdlbkF1dG9JbmNyZW1lbnRLZXkoKTsKIAotICAgICAg
ICBpZiAoIW9iamVjdFN0b3JlLT5tX2tleVBhdGguaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIC8v
IEZJWE1FOiBJbmplY3QgdGhlIGdlbmVyYXRlZCBrZXkgaW50byB0aGUgb2JqZWN0LgotICAgICAg
ICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6VU5LTk9XTl9FUlIsICJBZGRpbmcgZGF0YSB0byBvYmplY3Qgc3RvcmVz
IHdpdGggYXV0byBpbmNyZW1lbnQgYW5kIGluLWxpbmUga2V5cyBub3QgeWV0IHN1cHBvcnRlZC4i
KSk7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgIFJlZlB0cjxJREJLZXk+IGtleVBhdGhL
ZXkgPSBmZXRjaEtleUZyb21LZXlQYXRoKHZhbHVlLCBvYmplY3RTdG9yZS0+bV9rZXlQYXRoKTsK
KyAgICAgICAgaWYgKGtleVBhdGhLZXkpIHsKKyAgICAgICAgICAgIG9iamVjdFN0b3JlLT5yZXNl
dEF1dG9JbmNyZW1lbnRLZXlDYWNoZSgpOworICAgICAgICAgICAgcmV0dXJuIGtleVBhdGhLZXk7
CiAgICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKCFvYmplY3RTdG9yZS0+bV9rZXlQYXRoLmlzTnVs
bCgpKSB7Ci0gICAgICAgIFJlZlB0cjxJREJLZXk+IGtleVBhdGhLZXkgPSBmZXRjaEtleUZyb21L
ZXlQYXRoKHZhbHVlLmdldCgpLCBvYmplY3RTdG9yZS0+bV9rZXlQYXRoKTsKKworICAgICAgICAv
LyBGSVhNRTogR2VuZXJhdGUgYXV0byBpbmNyZW1lbnQga2V5LCBhbmQgaW5qZWN0IGl0IHRocm91
Z2ggdGhlIGtleSBwYXRoLgorICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VF
cnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVTktOT1dOX0VSUiwgIkFkZGluZyBk
YXRhIHRvIG9iamVjdCBzdG9yZXMgd2l0aCBhdXRvIGluY3JlbWVudCBhbmQgaW4tbGluZSBrZXlz
IG5vdCB5ZXQgc3VwcG9ydGVkLiIpKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAg
aWYgKGhhc0tleVBhdGgpIHsKKyAgICAgICAgUmVmUHRyPElEQktleT4ga2V5UGF0aEtleSA9IGZl
dGNoS2V5RnJvbUtleVBhdGgodmFsdWUsIG9iamVjdFN0b3JlLT5tX2tleVBhdGgpOwogCiAgICAg
ICAgIGlmICgha2V5UGF0aEtleSkgewogICAgICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElE
QkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlIsICJU
aGUga2V5IGNvdWxkIG5vdCBiZSBmZXRjaGVkIGZyb20gdGhlIGtleVBhdGguIikpOwotICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KIAotICAgICAg
ICBpZiAocHV0TW9kZSA9PSBDdXJzb3JVcGRhdGUgJiYgIWtleVBhdGhLZXktPmlzRXF1YWwoa2V5
LmdldCgpKSkgeworICAgICAgICBpZiAocHV0TW9kZSA9PSBDdXJzb3JVcGRhdGUgJiYgIWtleVBh
dGhLZXktPmlzRXF1YWwoa2V5KSkgewogICAgICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElE
QkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlIsICJU
aGUga2V5IGZldGNoZWQgZnJvbSB0aGUga2V5UGF0aCBkb2VzIG5vdCBtYXRjaCB0aGUga2V5IG9m
IHRoZSBjdXJzb3IuIikpOwotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJu
IDA7CiAgICAgICAgIH0KIAotICAgICAgICBrZXkgPSBrZXlQYXRoS2V5OwotICAgIH0gZWxzZSBp
ZiAoIWtleSkgewotICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6
Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUiwgIk5vIGtleSBzdXBwbGllZC4i
KSk7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIGtleVBhdGhLZXkucmVsZWFzZSgp
OwogICAgIH0KIAorICAgIGlmICgha2V5KSB7CisgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJ
REJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSLCAi
Tm8ga2V5IHN1cHBsaWVkIikpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICByZXR1
cm4ga2V5OworfQorCit2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFs
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcHJw
VmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBwcnBLZXksIFB1dE1vZGUgcHV0TW9kZSwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uKQoreworICAgIFJlZlB0cjxTZXJpYWxpemVkU2Ny
aXB0VmFsdWU+IHZhbHVlID0gcHJwVmFsdWU7CisgICAgUmVmUHRyPElEQktleT4ga2V5ID0gc2Vs
ZWN0S2V5Rm9yUHV0KG9iamVjdFN0b3JlLmdldCgpLCB2YWx1ZS5nZXQoKSwgcHJwS2V5LmdldCgp
LCBwdXRNb2RlLCBjYWxsYmFja3MuZ2V0KCkpOworICAgIGlmICgha2V5KQorICAgICAgICByZXR1
cm47CisKICAgICBpZiAoa2V5LT50eXBlKCkgPT0gSURCS2V5OjpOdWxsVHlwZSkgewogICAgICAg
ICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpEQVRBX0VSUiwgIk5VTEwga2V5IGlzIG5vdCBhbGxvd2VkLiIpKTsKICAgICAg
ICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGwuaAppbmRleCBkNTEzMDJmZjg1NDM2ZDk3YTQwMGI2YmMwY2FhZGMyZDQzNDcw
MmQ5Li42Njg1OTczMDYwYjVmZWRiMmM4MGY3ODI3YWIzMjgyNTdkZDdjZTlhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaApAQCAt
ODMsNiArODMsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgbG9hZEluZGV4ZXMoKTsKICAgICBTUUxp
dGVEYXRhYmFzZSYgc3FsaXRlRGF0YWJhc2UoKSBjb25zdDsKICAgICBQYXNzUmVmUHRyPElEQktl
eT4gZ2VuQXV0b0luY3JlbWVudEtleSgpOworICAgIHZvaWQgcmVzZXRBdXRvSW5jcmVtZW50S2V5
Q2FjaGUoKSB7IG1fYXV0b0luY3JlbWVudE51bWJlciA9IC0xOyB9CisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8SURCS2V5PiBzZWxlY3RLZXlGb3JQdXQoSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbCos
IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSosIElEQktleSosIFB1dE1vZGUsIElEQkNhbGxiYWNrcyop
OwogCiAgICAgc3RhdGljIHZvaWQgZ2V0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCS2V5
PiBrZXksIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7CiAgICAgc3RhdGljIHZvaWQgcHV0SW50
ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc1JlZlB0
cjxJREJLZXk+LCBQdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPik7Cg==
</data>
<flag name="review"
          id="73422"
          type_id="1"
          status="+"
          setter="jorlow"
    />
          </attachment>
      

    </bug>

</bugzilla>