<?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>98090</bug_id>
          
          <creation_ts>2012-10-01 16:31:29 -0700</creation_ts>
          <short_desc>Add LSKD support to MediaPlayerPrivateAVFoundation.</short_desc>
          <delta_ts>2012-10-12 13:47:03 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</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>
          <dependson>98044</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jer Noble">jer.noble</reporter>
          <assigned_to name="Jer Noble">jer.noble</assigned_to>
          <cc>eric.carlson</cc>
    
    <cc>eric</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>732113</commentid>
    <comment_count>0</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2012-10-01 16:31:29 -0700</bug_when>
    <thetext>Add LSKD support to MediaPlayerPrivateAVFoundation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>732140</commentid>
    <comment_count>1</comment_count>
      <attachid>166576</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2012-10-01 17:12:32 -0700</bug_when>
    <thetext>Created attachment 166576
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>740326</commentid>
    <comment_count>2</comment_count>
      <attachid>166576</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2012-10-11 15:41:40 -0700</bug_when>
    <thetext>Comment on attachment 166576
Patch

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

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:130
&gt; +    static dispatch_queue_t globalQueue = 0;

No need to initialize the queue here.

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:133
&gt; +        globalQueue = dispatch_queue_create(0, DISPATCH_QUEUE_SERIAL);

I think you should give this queue a name.

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:789
&gt; +    do {
&gt; +        // 1. Check whether the Key System is supported with the specified container and codec type(s) by following the steps for the first matching condition from the following list:
&gt; +        //    If keySystem is null, continue to the next step.
&gt; +        if (keySystem.isNull() || keySystem.isEmpty())
&gt; +            break;
&gt; +
&gt; +        // If keySystem contains an unrecognized or unsupported Key System, return the empty string
&gt; +        if (!keySystemIsSupported(keySystem))
&gt;              return MediaPlayer::IsNotSupported;
&gt; +
&gt; +        // If the Key System specified by keySystem does not support decrypting the container and/or codec specified in the rest of the type string.
&gt; +        // (AVFoundation does not provide an API which would allow us to determine this, so this is a no-op)
&gt; +
&gt; +    } while(false);

I think you should put this in a separate helper function instead of using do { } while (false).

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:992
&gt; +static bool extractKeyURIKeyIdAndCertificateFromInitData(Uint8Array* initData, String&amp; keyURI, String&amp; keyId, RefPtr&lt;Uint8Array&gt;&amp; certificate)

ID should be all caps.

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:1049
&gt; +    String keyId;

keyID.

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:1084
&gt; +MediaPlayer::MediaKeyException MediaPlayerPrivateAVFoundationObjC::addKey(const String&amp; keySystem, const unsigned char* keyPtr, unsigned keyLength, const unsigned char* initDataPtr, unsigned initDataLength, const String&amp; sessionId)

sessionID.

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:1104
&gt; +MediaPlayer::MediaKeyException MediaPlayerPrivateAVFoundationObjC::cancelKeyRequest(const String&amp; keySystem, const String&amp; sessionId)

sessionID.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741171</commentid>
    <comment_count>3</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2012-10-12 13:47:03 -0700</bug_when>
    <thetext>Committed r131220: &lt;http://trac.webkit.org/changeset/131220&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>166576</attachid>
            <date>2012-10-01 17:12:32 -0700</date>
            <delta_ts>2012-10-11 15:41:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-98090-20121001171145.patch</filename>
            <type>text/plain</type>
            <size>17394</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI5OTM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjIzYjNjZjMzYWFlYTg5
NjQyOGE2YTBkOWM3Y2IzZjk0Mjg4YjUwMy4uYThkZWQ4YzIzZWNjY2ZiOGQ4YjVmYWIyNWZiZTRm
NWJhYTFlNDE3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDMyIEBACiAyMDEyLTEwLTAxICBKZXIg
Tm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCisgICAgICAgIEFkZCBMU0tEIHN1cHBvcnQg
dG8gTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTgwOTAKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3IgTFNLRCBrZXkgc3lzdGVt
IHRvIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbi4KKworICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlv
bk9iakMuaDoKKyAgICAgICAgKE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMpOiBB
ZGQgbV9sb2FkZXJEZWxlZ2F0ZSwgbV9rZXlVUklUb1JlcXVlc3RNYXAsIGFuZCBtX3Nlc3Npb25U
b1JlcXVlc3RNYXAuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29i
amMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5tbToKKyAgICAgICAgKGdsb2Jh
bExvYWRlckRlbGVnYXRlUXVldWUpOiBTdGF0aWMgYWNjZXNzb3IgZm9yIHRoZSBkaXNwYXRjaCBx
dWV1ZSB0byB1c2UgZm9yIHRoZSBsb2FkZXIgZGVsZWdhdGUuCisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpNZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb25PYmpDKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91
bmRhdGlvbk9iakM6OmNyZWF0ZUFWQXNzZXRGb3JVUkwpOiBBZGQgdGhlIGxvYWRlciBkZWxlZ2F0
ZSB0byB0aGUgQVZVUkxBc3NldC4KKyAgICAgICAgKFdlYkNvcmU6OmtleVN5c3RlbUlzU3VwcG9y
dGVkKTogQ29udmVuaWVuY2UgZnVuY3Rpb247IGNoZWNrcyB0aGF0IHRoZSBrZXkgc3lzdGVtIG1h
dGNoZXMgImNvbS5hcHBsZS5sc2tkIgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uT2JqQzo6ZXh0ZW5kZWRTdXBwb3J0c1R5cGUpOiBDaGVjayB0aGUga2V5
IHN5c3RlbSBtYXRjaGVzLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZG
b3VuZGF0aW9uT2JqQzo6c2hvdWxkV2FpdEZvckxvYWRpbmdPZlJlc291cmNlKTogRmlyZSBhIG5l
ZWRrZXkgZXZlbnQgd2l0aCBhbiBpbml0RGF0YSBjb250YWluaW5nCisgICAgICAgICAgICB0aGUg
a2V5IFVSSS4KKyAgICAgICAgKFdlYkNvcmU6OmV4dHJhY3RLZXlVUklLZXlJZEFuZENlcnRpZmlj
YXRlRnJvbUluaXREYXRhKTogRXh0cmFjdCB0aGUga2V5VVJJLCBrZXlJRCwgYW5kIHRoZSBhcHAg
Y2VydGlmaWNhdGUgZnJvbSB0aGUgaW5pdERhdGEuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpnZW5lcmF0ZUtleVJlcXVlc3QpOiBHZW5lcmF0
ZSBhIHN0cmVhbWluZyBrZXkgcmVxdWVzdCBmcm9tIEFWRm91bmRhdGlvbiBhbmQgCisgICAgICAg
ICAgICBmaXJlIGEga2V5bWVzc2FnZSBldmVudC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmFkZEtleSk6IFBhc3MgdG8gQVZGb3VuZGF0aW9u
IHRocm91Z2ggdGhlIEFWQXNzZXRSZXNvdXJjZUxvYWRlci4KKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmNhbmNlbEtleVJlcXVlc3QpOiBSZWxl
YXNlIHRoZSBsb2FkZXIgZGVsZWdhdGUuCisgICAgICAgICgtW1dlYkNvcmVBVkZMb2FkZXJEZWxl
Z2F0ZSBpbml0V2l0aENhbGxiYWNrOl0pOiBTaW1wbGUgY29uc3RydWN0b3IuCisgICAgICAgICgt
W1dlYkNvcmVBVkZMb2FkZXJEZWxlZ2F0ZSByZXNvdXJjZUxvYWRlcjpzaG91bGRXYWl0Rm9yTG9h
ZGluZ09mUmVxdWVzdGVkUmVzb3VyY2U6XSk6IFBhc3MgdG8gdGhlIE1lZGlhUGxheWVyUHJpdmF0
ZUFWRm91bmRhdGlvbk9iakMuCisKKzIwMTItMTAtMDEgIEplciBOb2JsZSAgPGplci5ub2JsZUBh
cHBsZS5jb20+CisKICAgICAgICAgRW5hYmxlIEVOQ1JZUFRFRF9NRURJQSBzdXBwb3J0IG9uIE1h
Yy4KICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk4MDQ0
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRh
dGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJp
dmF0ZUFWRm91bmRhdGlvbk9iakMuaAppbmRleCBkZDA5M2Y4MGM4ZjRhNjYzMWJjOTVhMjNmMzEz
ZjY1Nzk4ZDgxYzI0Li5kZWM2YWQxNWJjZjFlYmNmM2MwMTMyMjk1NjE0ZTdiNjM0ZGIwMTBiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24v
b2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uT2JqQy5oCkBAIC0yOSw4ICsyOSw5IEBACiAjaWYgRU5BQkxFKFZJREVP
KSAmJiBVU0UoQVZGT1VOREFUSU9OKQogCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlQVZG
b3VuZGF0aW9uLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KIAotT0JKQ19DTEFTUyBBVkFz
c2V0OworT0JKQ19DTEFTUyBBVlVSTEFzc2V0OwogT0JKQ19DTEFTUyBBVlBsYXllcjsKIE9CSkNf
Q0xBU1MgQVZQbGF5ZXJJdGVtOwogT0JKQ19DTEFTUyBBVlBsYXllckl0ZW1WaWRlb091dHB1dDsK
QEAgLTM4LDYgKzM5LDExIEBAIE9CSkNfQ0xBU1MgQVZQbGF5ZXJMYXllcjsKIE9CSkNfQ0xBU1Mg
QVZBc3NldEltYWdlR2VuZXJhdG9yOwogT0JKQ19DTEFTUyBXZWJDb3JlQVZGTW92aWVPYnNlcnZl
cjsKIAorI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9N
SU5fUkVRVUlSRUQgPj0gMTA5MAorT0JKQ19DTEFTUyBXZWJDb3JlQVZGTG9hZGVyRGVsZWdhdGU7
CitPQkpDX0NMQVNTIEFWQXNzZXRSZXNvdXJjZUxvYWRpbmdSZXF1ZXN0OworI2VuZGlmCisKICNp
Zm5kZWYgX19PQkpDX18KIHR5cGVkZWYgc3RydWN0IG9iamNfb2JqZWN0ICppZDsKICNlbmRpZgpA
QCAtNTYsNiArNjIsMTAgQEAgcHVibGljOgogICAgIHZvaWQgc2V0QXNzZXQoaWQpOwogICAgIHZp
cnR1YWwgdm9pZCB0cmFja3NDaGFuZ2VkKCk7CiAKKyNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElB
KSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwOTAKKyAgICBib29sIHNo
b3VsZFdhaXRGb3JMb2FkaW5nT2ZSZXNvdXJjZShBVkFzc2V0UmVzb3VyY2VMb2FkaW5nUmVxdWVz
dCopOworI2VuZGlmCisKIHByaXZhdGU6CiAgICAgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0
aW9uT2JqQyhNZWRpYVBsYXllciopOwogCkBAIC0xMjgsNyArMTM4LDEzIEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBwYWludFdpdGhWaWRlb091dHB1dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRS
ZWN0Jik7CiAjZW5kaWYKIAotICAgIFJldGFpblB0cjxBVkFzc2V0PiBtX2F2QXNzZXQ7CisjaWYg
RU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKKyAgICB2aXJ0dWFsIE1lZGlhUGxheWVyOjpNZWRpYUtl
eUV4Y2VwdGlvbiBhZGRLZXkoY29uc3QgU3RyaW5nJiwgY29uc3QgdW5zaWduZWQgY2hhciosIHVu
c2lnbmVkLCBjb25zdCB1bnNpZ25lZCBjaGFyKiwgdW5zaWduZWQsIGNvbnN0IFN0cmluZyYpOwor
ICAgIHZpcnR1YWwgTWVkaWFQbGF5ZXI6Ok1lZGlhS2V5RXhjZXB0aW9uIGdlbmVyYXRlS2V5UmVx
dWVzdChjb25zdCBTdHJpbmcmLCBjb25zdCB1bnNpZ25lZCBjaGFyKiwgdW5zaWduZWQpOworICAg
IHZpcnR1YWwgTWVkaWFQbGF5ZXI6Ok1lZGlhS2V5RXhjZXB0aW9uIGNhbmNlbEtleVJlcXVlc3Qo
Y29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJik7CisjZW5kaWYKKworICAgIFJldGFpblB0cjxB
VlVSTEFzc2V0PiBtX2F2QXNzZXQ7CiAgICAgUmV0YWluUHRyPEFWUGxheWVyPiBtX2F2UGxheWVy
OwogICAgIFJldGFpblB0cjxBVlBsYXllckl0ZW0+IG1fYXZQbGF5ZXJJdGVtOwogICAgIFJldGFp
blB0cjxBVlBsYXllckxheWVyPiBtX3ZpZGVvTGF5ZXI7CkBAIC0xNDMsNiArMTU5LDEyIEBAIHBy
aXZhdGU6CiAgICAgUmV0YWluUHRyPEFWUGxheWVySXRlbVZpZGVvT3V0cHV0PiBtX3ZpZGVvT3V0
cHV0OwogICAgIFJldGFpblB0cjxDVlBpeGVsQnVmZmVyUmVmPiBtX2xhc3RJbWFnZTsKICNlbmRp
ZgorCisjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01J
Tl9SRVFVSVJFRCA+PSAxMDkwCisgICAgUmV0YWluUHRyPFdlYkNvcmVBVkZMb2FkZXJEZWxlZ2F0
ZT4gbV9sb2FkZXJEZWxlZ2F0ZTsKKyAgICBIYXNoTWFwPFN0cmluZywgUmV0YWluUHRyPEFWQXNz
ZXRSZXNvdXJjZUxvYWRpbmdSZXF1ZXN0PiA+IG1fa2V5VVJJVG9SZXF1ZXN0TWFwOworICAgIEhh
c2hNYXA8U3RyaW5nLCBSZXRhaW5QdHI8QVZBc3NldFJlc291cmNlTG9hZGluZ1JlcXVlc3Q+ID4g
bV9zZXNzaW9uSWRUb1JlcXVlc3RNYXA7CisjZW5kaWYKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxh
eWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25P
YmpDLm1tCmluZGV4IDVjMmE0OGI0MDRmY2UxODJjNjFkMDc1NWMxOTAyMDk0ZmU4MGRmYTMuLmRh
MmViZTM2NTQ5NTExMDdhYjdmM2I0ZTg4YzhhMGYzZGE4OTAxZjQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVy
UHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9u
T2JqQy5tbQpAQCAtMzAsNiArMzAsNyBAQAogI2ltcG9ydCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZG
b3VuZGF0aW9uT2JqQy5oIgogCiAjaW1wb3J0ICJCbG9ja0V4Y2VwdGlvbnMuaCIKKyNpbXBvcnQg
IkRhdGFWaWV3LmgiCiAjaW1wb3J0ICJGbG9hdENvbnZlcnNpb24uaCIKICNpbXBvcnQgIkZyYW1l
Vmlldy5oIgogI2ltcG9ydCAiRmxvYXRDb252ZXJzaW9uLmgiCkBAIC0zOSw5ICs0MCwxMyBAQAog
I2ltcG9ydCAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbXBvcnQgIlNvZnRMaW5raW5nLmgiCiAjaW1w
b3J0ICJUaW1lUmFuZ2VzLmgiCisjaW1wb3J0ICJVVUlELmgiCiAjaW1wb3J0ICJXZWJDb3JlU3lz
dGVtSW50ZXJmYWNlLmgiCiAjaW1wb3J0IDxvYmpjL29iamMtcnVudGltZS5oPgogI2ltcG9ydCA8
d3RmL1VudXNlZFBhcmFtLmg+CisjaW1wb3J0IDx3dGYvVWludDhBcnJheS5oPgorI2ltcG9ydCA8
d3RmL1VpbnQxNkFycmF5Lmg+CisjaW1wb3J0IDx3dGYvVWludDMyQXJyYXkuaD4KIAogI2ltcG9y
dCA8Q29yZU1lZGlhL0NvcmVNZWRpYS5oPgogI2ltcG9ydCA8QVZGb3VuZGF0aW9uL0FWRm91bmRh
dGlvbi5oPgpAQCAtMTEyLDYgKzExNywyNSBAQCBlbnVtIE1lZGlhUGxheWVyQVZGb3VuZGF0aW9u
T2JzZXJ2YXRpb25Db250ZXh0IHsKIC0odm9pZClvYnNlcnZlVmFsdWVGb3JLZXlQYXRoOmtleVBh
dGggb2ZPYmplY3Q6KGlkKW9iamVjdCBjaGFuZ2U6KE5TRGljdGlvbmFyeSAqKWNoYW5nZSBjb250
ZXh0OihNZWRpYVBsYXllckFWRm91bmRhdGlvbk9ic2VydmF0aW9uQ29udGV4dCljb250ZXh0Owog
QGVuZAogCisjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKK0BpbnRlcmZhY2UgV2ViQ29yZUFW
RkxvYWRlckRlbGVnYXRlIDogTlNPYmplY3Q8QVZBc3NldFJlc291cmNlTG9hZGVyRGVsZWdhdGU+
IHsKKyAgICBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDKiBtX2NhbGxiYWNrOwor
fQorLSAoaWQpaW5pdFdpdGhDYWxsYmFjazooTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9u
T2JqQyopY2FsbGJhY2s7CistIChCT09MKXJlc291cmNlTG9hZGVyOihBVkFzc2V0UmVzb3VyY2VM
b2FkZXIgKilyZXNvdXJjZUxvYWRlciBzaG91bGRXYWl0Rm9yTG9hZGluZ09mUmVxdWVzdGVkUmVz
b3VyY2U6KEFWQXNzZXRSZXNvdXJjZUxvYWRpbmdSZXF1ZXN0ICopbG9hZGluZ1JlcXVlc3Q7CitA
ZW5kCisKK3N0YXRpYyBkaXNwYXRjaF9xdWV1ZV90IGdsb2JhbExvYWRlckRlbGVnYXRlUXVldWUo
KQoreworICAgIHN0YXRpYyBkaXNwYXRjaF9xdWV1ZV90IGdsb2JhbFF1ZXVlID0gMDsKKyAgICBz
dGF0aWMgZGlzcGF0Y2hfb25jZV90IG9uY2VUb2tlbjsKKyAgICBkaXNwYXRjaF9vbmNlKCZvbmNl
VG9rZW4sIF57CisgICAgICAgIGdsb2JhbFF1ZXVlID0gZGlzcGF0Y2hfcXVldWVfY3JlYXRlKDAs
IERJU1BBVENIX1FVRVVFX1NFUklBTCk7CisgICAgfSk7CisgICAgcmV0dXJuIGdsb2JhbFF1ZXVl
OworfQorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIE5TQXJyYXkgKmFz
c2V0TWV0YWRhdGFLZXlOYW1lcygpOwpAQCAtMTQ0LDYgKzE2OCw5IEBAIE1lZGlhUGxheWVyUHJp
dmF0ZUFWRm91bmRhdGlvbk9iakM6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMo
TWVkaWFQbGF5CiAgICAgLCBtX29iamNPYnNlcnZlcihBZG9wdE5TLCBbW1dlYkNvcmVBVkZNb3Zp
ZU9ic2VydmVyIGFsbG9jXSBpbml0V2l0aENhbGxiYWNrOnRoaXNdKQogICAgICwgbV92aWRlb0Zy
YW1lSGFzRHJhd24oZmFsc2UpCiAgICAgLCBtX2hhdmVDaGVja2VkUGxheWFiaWxpdHkoZmFsc2Up
CisjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKKyAgICAsIG1fbG9hZGVyRGVsZWdhdGUoQWRv
cHROUywgW1tXZWJDb3JlQVZGTG9hZGVyRGVsZWdhdGUgYWxsb2NdIGluaXRXaXRoQ2FsbGJhY2s6
dGhpc10pCisjZW5kaWYKIHsKIH0KIApAQCAtMzA4LDYgKzMzNSwxMCBAQCB2b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmNyZWF0ZUFWQXNzZXRGb3JVUkwoY29uc3QgU3Ry
aW5nJiB1cmwpCiAgICAgTlNVUkwgKmNvY29hVVJMID0gS1VSTChQYXJzZWRVUkxTdHJpbmcsIHVy
bCk7CiAgICAgbV9hdkFzc2V0LmFkb3B0TlMoW1tBVlVSTEFzc2V0IGFsbG9jXSBpbml0V2l0aFVS
TDpjb2NvYVVSTCBvcHRpb25zOm9wdGlvbnMuZ2V0KCldKTsKIAorI2lmIEVOQUJMRShFTkNSWVBU
RURfTUVESUEpCisgICAgW1ttX2F2QXNzZXQuZ2V0KCkgcmVzb3VyY2VMb2FkZXJdIHNldERlbGVn
YXRlOm1fbG9hZGVyRGVsZWdhdGUuZ2V0KCkgcXVldWU6Z2xvYmFsTG9hZGVyRGVsZWdhdGVRdWV1
ZSgpXTsKKyNlbmRpZgorCiAgICAgbV9oYXZlQ2hlY2tlZFBsYXlhYmlsaXR5ID0gZmFsc2U7CiAK
ICAgICBzZXREZWxheUNhbGxiYWNrcyhmYWxzZSk7CkBAIC03MzAsMTMgKzc2MSw1OCBAQCBNZWRp
YVBsYXllcjo6U3VwcG9ydHNUeXBlIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6
OnN1cHBvcnRzVHlwZShjb25zdAogfQogCiAjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKK3N0
YXRpYyBib29sIGtleVN5c3RlbUlzU3VwcG9ydGVkKGNvbnN0IFN0cmluZyYga2V5U3lzdGVtKQor
eworICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShrZXlTeXN0ZW0sICJjb20uYXBwbGUubHNrZCIp
IHx8IGVxdWFsSWdub3JpbmdDYXNlKGtleVN5c3RlbSwgImNvbS5hcHBsZS5sc2tkLjFfMCIpKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKwogTWVkaWFQbGF5
ZXI6OlN1cHBvcnRzVHlwZSBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpleHRl
bmRlZFN1cHBvcnRzVHlwZShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgY29kZWNz
LCBjb25zdCBTdHJpbmcmIGtleVN5c3RlbSwgY29uc3QgS1VSTCYgdXJsKQogewotICAgIC8vIEFW
Rm91bmRhdGlvbiBkb2VzIG5vdCBzdXBwb3J0IGFueSBlbmNyeXB0ZWQgbWVkaWEsIHNvIHJldHVy
biBJc05vdFN1cHBvcnRlZCBpZiB0aGUga2V5U3lzdGVtIGlzIG5vbi1OVUxMLgotICAgIGlmICgh
a2V5U3lzdGVtLmlzTnVsbCgpIHx8ICFrZXlTeXN0ZW0uaXNFbXB0eSgpKQorICAgIC8vIEZyb206
IDxodHRwOi8vZHZjcy53My5vcmcvaGcvaHRtbC1tZWRpYS9yYXctZmlsZS90aXAvZW5jcnlwdGVk
LW1lZGlhL2VuY3J5cHRlZC1tZWRpYS5odG1sI2RvbS1jYW5wbGF5dHlwZT4KKyAgICAvLyBJbiBh
ZGRpdGlvbiB0byB0aGUgc3RlcHMgaW4gdGhlIGN1cnJlbnQgc3BlY2lmaWNhdGlvbiwgdGhpcyBt
ZXRob2QgbXVzdCBydW4gdGhlIGZvbGxvd2luZyBzdGVwczoKKyAgICBkbyB7CisgICAgICAgIC8v
IDEuIENoZWNrIHdoZXRoZXIgdGhlIEtleSBTeXN0ZW0gaXMgc3VwcG9ydGVkIHdpdGggdGhlIHNw
ZWNpZmllZCBjb250YWluZXIgYW5kIGNvZGVjIHR5cGUocykgYnkgZm9sbG93aW5nIHRoZSBzdGVw
cyBmb3IgdGhlIGZpcnN0IG1hdGNoaW5nIGNvbmRpdGlvbiBmcm9tIHRoZSBmb2xsb3dpbmcgbGlz
dDoKKyAgICAgICAgLy8gICAgSWYga2V5U3lzdGVtIGlzIG51bGwsIGNvbnRpbnVlIHRvIHRoZSBu
ZXh0IHN0ZXAuCisgICAgICAgIGlmIChrZXlTeXN0ZW0uaXNOdWxsKCkgfHwga2V5U3lzdGVtLmlz
RW1wdHkoKSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIC8vIElmIGtleVN5c3RlbSBj
b250YWlucyBhbiB1bnJlY29nbml6ZWQgb3IgdW5zdXBwb3J0ZWQgS2V5IFN5c3RlbSwgcmV0dXJu
IHRoZSBlbXB0eSBzdHJpbmcKKyAgICAgICAgaWYgKCFrZXlTeXN0ZW1Jc1N1cHBvcnRlZChrZXlT
eXN0ZW0pKQogICAgICAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVyOjpJc05vdFN1cHBvcnRlZDsK
KworICAgICAgICAvLyBJZiB0aGUgS2V5IFN5c3RlbSBzcGVjaWZpZWQgYnkga2V5U3lzdGVtIGRv
ZXMgbm90IHN1cHBvcnQgZGVjcnlwdGluZyB0aGUgY29udGFpbmVyIGFuZC9vciBjb2RlYyBzcGVj
aWZpZWQgaW4gdGhlIHJlc3Qgb2YgdGhlIHR5cGUgc3RyaW5nLgorICAgICAgICAvLyAoQVZGb3Vu
ZGF0aW9uIGRvZXMgbm90IHByb3ZpZGUgYW4gQVBJIHdoaWNoIHdvdWxkIGFsbG93IHVzIHRvIGRl
dGVybWluZSB0aGlzLCBzbyB0aGlzIGlzIGEgbm8tb3ApCisKKyAgICB9IHdoaWxlKGZhbHNlKTsK
KworICAgIC8vIDIuIFJldHVybiAibWF5YmUiIG9yICJwcm9iYWJseSIgYXMgYXBwcm9wcmlhdGUg
cGVyIHRoZSBleGlzdGluZyBzcGVjaWZpY2F0aW9uIG9mIGNhblBsYXlUeXBlKCkuCiAgICAgcmV0
dXJuIHN1cHBvcnRzVHlwZSh0eXBlLCBjb2RlY3MsIHVybCk7CiB9CisKK2Jvb2wgTWVkaWFQbGF5
ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6c2hvdWxkV2FpdEZvckxvYWRpbmdPZlJlc291cmNl
KEFWQXNzZXRSZXNvdXJjZUxvYWRpbmdSZXF1ZXN0KiBhdlJlcXVlc3QpCit7CisgICAgU3RyaW5n
IGtleVVSSSA9IFtbW2F2UmVxdWVzdCByZXF1ZXN0XSBVUkxdIGFic29sdXRlU3RyaW5nXTsKKwor
ICAgIC8vIENyZWF0ZSBhbiBpbml0RGF0YSB3aXRoIHRoZSBmb2xsb3dpbmcgbGF5b3V0OgorICAg
IC8vIFs0IGJ5dGVzOiBrZXlVUkkgc2l6ZV0sIFtrZXlVUkkgc2l6ZSBieXRlczoga2V5VVJJXQor
ICAgIHVuc2lnbmVkIGtleVVSSVNpemUgPSBrZXlVUkkubGVuZ3RoKCkgKiBzaXplb2YoVUNoYXIp
OworICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gaW5pdERhdGFCdWZmZXIgPSBBcnJheUJ1ZmZlcjo6
Y3JlYXRlKDQgKyBrZXlVUklTaXplLCAxKTsKKyAgICBSZWZQdHI8RGF0YVZpZXc+IGluaXREYXRh
VmlldyA9IERhdGFWaWV3OjpjcmVhdGUoaW5pdERhdGFCdWZmZXIsIDAsIGluaXREYXRhQnVmZmVy
LT5ieXRlTGVuZ3RoKCkpOworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGluaXREYXRh
Vmlldy0+c2V0VWludDMyKDAsIGtleVVSSVNpemUsIHRydWUsIGVjKTsKKworICAgIFJlZlB0cjxV
aW50MTZBcnJheT4ga2V5VVJJQXJyYXkgPSBVaW50MTZBcnJheTo6Y3JlYXRlKGluaXREYXRhQnVm
ZmVyLCA0LCBrZXlVUkkubGVuZ3RoKCkpOworICAgIGtleVVSSUFycmF5LT5zZXRSYW5nZShrZXlV
UkkuY2hhcmFjdGVycygpLCBrZXlVUkkubGVuZ3RoKCkgLyBzaXplb2YodW5zaWduZWQgY2hhciks
IDApOworCisgICAgaWYgKCFwbGF5ZXIoKS0+a2V5TmVlZGVkKCJjb20uYXBwbGUubHNrZCIsIGVt
cHR5U3RyaW5nKCksIHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbml0RGF0YUJ1
ZmZlci0+ZGF0YSgpKSwgaW5pdERhdGFCdWZmZXItPmJ5dGVMZW5ndGgoKSkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIG1fa2V5VVJJVG9SZXF1ZXN0TWFwLnNldChrZXlVUkksIGF2UmVx
dWVzdCk7CisgICAgcmV0dXJuIHRydWU7Cit9CiAjZW5kaWYKIAogYm9vbCBNZWRpYVBsYXllclBy
aXZhdGVBVkZvdW5kYXRpb25PYmpDOjppc0F2YWlsYWJsZSgpCkBAIC05MTEsNiArOTg3LDEzMyBA
QCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnBhaW50V2l0aFZpZGVv
T3V0cHV0KEdyYXBoaWNzQ29udGV4dCogYwogCiAjZW5kaWYKIAorI2lmIEVOQUJMRShFTkNSWVBU
RURfTUVESUEpCisKK3N0YXRpYyBib29sIGV4dHJhY3RLZXlVUklLZXlJZEFuZENlcnRpZmljYXRl
RnJvbUluaXREYXRhKFVpbnQ4QXJyYXkqIGluaXREYXRhLCBTdHJpbmcmIGtleVVSSSwgU3RyaW5n
JiBrZXlJZCwgUmVmUHRyPFVpbnQ4QXJyYXk+JiBjZXJ0aWZpY2F0ZSkKK3sKKyAgICAvLyBpbml0
RGF0YSBzaG91bGQgaGF2ZSB0aGUgZm9sbG93aW5nIGxheW91dDoKKyAgICAvLyBbNCBieXRlczog
a2V5VVJJIGxlbmd0aF1bTiBieXRlczoga2V5VVJJXVs0IGJ5dGVzOiBjb250ZW50SWQgbGVuZ3Ro
XSwgW04gYnl0ZXM6IGNvbnRlbnRJZF0sIFs0IGJ5dGVzOiBjZXJ0aWZpY2F0ZSBsZW5ndGhdW04g
Ynl0ZXM6IGNlcnRpZmljYXRlXQorICAgIGlmIChpbml0RGF0YS0+Ynl0ZUxlbmd0aCgpIDwgNCkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBpbml0RGF0
YUJ1ZmZlciA9IGluaXREYXRhLT5idWZmZXIoKTsKKworICAgIC8vIFVzZSBhIERhdGFWaWV3IHRv
IHJlYWQgdWludDMyIHZhbHVlcyBmcm9tIHRoZSBidWZmZXIsIGFzIFVpbnQzMkFycmF5IHJlcXVp
cmVzIHRoZSByZWFkcyBiZSBhbGlnbmVkIG9uIDQtYnl0ZSBib3VuZGFyaWVzLiAKKyAgICBSZWZQ
dHI8RGF0YVZpZXc+IGluaXREYXRhVmlldyA9IERhdGFWaWV3OjpjcmVhdGUoaW5pdERhdGFCdWZm
ZXIsIDAsIGluaXREYXRhQnVmZmVyLT5ieXRlTGVuZ3RoKCkpOworICAgIHVpbnQzMl90IG9mZnNl
dCA9IDA7CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisKKyAgICB1aW50MzJfdCBrZXlVUklM
ZW5ndGggPSBpbml0RGF0YVZpZXctPmdldFVpbnQzMihvZmZzZXQsIHRydWUsIGVjKTsKKyAgICBv
ZmZzZXQgKz0gNDsKKyAgICBpZiAoZWMgfHwgb2Zmc2V0ICsga2V5VVJJTGVuZ3RoID4gaW5pdERh
dGEtPmxlbmd0aCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBSZWZQdHI8VWludDE2
QXJyYXk+IGtleVVSSUFycmF5ID0gVWludDE2QXJyYXk6OmNyZWF0ZShpbml0RGF0YUJ1ZmZlciwg
b2Zmc2V0LCBrZXlVUklMZW5ndGgpOworICAgIGlmICgha2V5VVJJQXJyYXkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGtleVVSSSA9IFN0cmluZyhrZXlVUklBcnJheS0+ZGF0YSgpLCBr
ZXlVUklMZW5ndGggLyBzaXplb2YodW5zaWduZWQgc2hvcnQpKTsKKyAgICBvZmZzZXQgKz0ga2V5
VVJJTGVuZ3RoOworCisgICAgdWludDMyX3Qga2V5SWRMZW5ndGggPSBpbml0RGF0YVZpZXctPmdl
dFVpbnQzMihvZmZzZXQsIHRydWUsIGVjKTsKKyAgICBvZmZzZXQgKz0gNDsKKyAgICBpZiAoZWMg
fHwgb2Zmc2V0ICsga2V5SWRMZW5ndGggPiBpbml0RGF0YS0+bGVuZ3RoKCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIFJlZlB0cjxVaW50MTZBcnJheT4ga2V5SWRBcnJheSA9IFVpbnQx
NkFycmF5OjpjcmVhdGUoaW5pdERhdGFCdWZmZXIsIG9mZnNldCwga2V5SWRMZW5ndGgpOworICAg
IGlmICgha2V5SWRBcnJheSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAga2V5SWQgPSBT
dHJpbmcoa2V5SWRBcnJheS0+ZGF0YSgpLCBrZXlJZExlbmd0aCAvIHNpemVvZih1bnNpZ25lZCBz
aG9ydCkpOworICAgIG9mZnNldCArPSBrZXlJZExlbmd0aDsKKworICAgIHVpbnQzMl90IGNlcnRp
ZmljYXRlTGVuZ3RoID0gaW5pdERhdGFWaWV3LT5nZXRVaW50MzIob2Zmc2V0LCB0cnVlLCBlYyk7
CisgICAgb2Zmc2V0ICs9IDQ7CisgICAgaWYgKGVjIHx8IG9mZnNldCArIGNlcnRpZmljYXRlTGVu
Z3RoID4gaW5pdERhdGEtPmxlbmd0aCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBj
ZXJ0aWZpY2F0ZSA9IFVpbnQ4QXJyYXk6OmNyZWF0ZShpbml0RGF0YUJ1ZmZlciwgb2Zmc2V0LCBj
ZXJ0aWZpY2F0ZUxlbmd0aCk7CisgICAgaWYgKCFjZXJ0aWZpY2F0ZSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK01lZGlhUGxheWVyOjpNZWRpYUtleUV4
Y2VwdGlvbiBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpnZW5lcmF0ZUtleVJl
cXVlc3QoY29uc3QgU3RyaW5nJiBrZXlTeXN0ZW0sIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGluaXRE
YXRhUHRyLCB1bnNpZ25lZCBpbml0RGF0YUxlbmd0aCkKK3sKKyAgICBpZiAoIWtleVN5c3RlbUlz
U3VwcG9ydGVkKGtleVN5c3RlbSkpCisgICAgICAgIHJldHVybiBNZWRpYVBsYXllcjo6S2V5U3lz
dGVtTm90U3VwcG9ydGVkOworCisgICAgUmVmUHRyPFVpbnQ4QXJyYXk+IGluaXREYXRhID0gVWlu
dDhBcnJheTo6Y3JlYXRlKGluaXREYXRhUHRyLCBpbml0RGF0YUxlbmd0aCk7CisgICAgU3RyaW5n
IGtleVVSSTsKKyAgICBTdHJpbmcga2V5SWQ7CisgICAgUmVmUHRyPFVpbnQ4QXJyYXk+IGNlcnRp
ZmljYXRlOworICAgIGlmICghZXh0cmFjdEtleVVSSUtleUlkQW5kQ2VydGlmaWNhdGVGcm9tSW5p
dERhdGEoaW5pdERhdGEuZ2V0KCksIGtleVVSSSwga2V5SWQsIGNlcnRpZmljYXRlKSkKKyAgICAg
ICAgcmV0dXJuIE1lZGlhUGxheWVyOjpJbnZhbGlkUGxheWVyU3RhdGU7CisKKyAgICBpZiAoIW1f
a2V5VVJJVG9SZXF1ZXN0TWFwLmNvbnRhaW5zKGtleVVSSSkpCisgICAgICAgIHJldHVybiBNZWRp
YVBsYXllcjo6SW52YWxpZFBsYXllclN0YXRlOworCisgICAgU3RyaW5nIHNlc3Npb25JZCA9IGNy
ZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmcoKTsKKworICAgIFJldGFpblB0cjxBVkFzc2V0UmVzb3Vy
Y2VMb2FkaW5nUmVxdWVzdD4gYXZSZXF1ZXN0ID0gbV9rZXlVUklUb1JlcXVlc3RNYXAuZ2V0KGtl
eVVSSSk7CisKKyAgICBSZXRhaW5QdHI8TlNEYXRhPiBjZXJ0aWZpY2F0ZURhdGEgPSBhZG9wdE5T
KFtbTlNEYXRhIGFsbG9jXSBpbml0V2l0aEJ5dGVzOmNlcnRpZmljYXRlLT5iYXNlQWRkcmVzcygp
IGxlbmd0aDpjZXJ0aWZpY2F0ZS0+Ynl0ZUxlbmd0aCgpXSk7CisgICAgTlNTdHJpbmcqIGFzc2V0
U3RyID0ga2V5SWQ7CisgICAgUmV0YWluUHRyPE5TRGF0YT4gYXNzZXRJZCA9IFtOU0RhdGEgZGF0
YVdpdGhCeXRlczogW2Fzc2V0U3RyIGNTdHJpbmdVc2luZ0VuY29kaW5nOk5TVVRGOFN0cmluZ0Vu
Y29kaW5nXSBsZW5ndGg6W2Fzc2V0U3RyIGxlbmd0aE9mQnl0ZXNVc2luZ0VuY29kaW5nOk5TVVRG
OFN0cmluZ0VuY29kaW5nXV07CisgICAgTlNFcnJvciogZXJyb3IgPSAwOworICAgIFJldGFpblB0
cjxOU0RhdGE+IGtleVJlcXVlc3QgPSBbYXZSZXF1ZXN0LmdldCgpIHN0cmVhbWluZ0NvbnRlbnRL
ZXlSZXF1ZXN0RGF0YUZvckFwcDpjZXJ0aWZpY2F0ZURhdGEuZ2V0KCkgY29udGVudElkZW50aWZp
ZXI6YXNzZXRJZC5nZXQoKSBvcHRpb25zOm5pbCBlcnJvcjomZXJyb3JdOworCisgICAgaWYgKCFr
ZXlSZXF1ZXN0KSB7CisgICAgICAgIE5TRXJyb3IqIHVuZGVybHlpbmdFcnJvciA9IFtbZXJyb3Ig
dXNlckluZm9dIG9iamVjdEZvcktleTpOU1VuZGVybHlpbmdFcnJvcktleV07CisgICAgICAgIHBs
YXllcigpLT5rZXlFcnJvcihrZXlTeXN0ZW0sIHNlc3Npb25JZCwgTWVkaWFQbGF5ZXJDbGllbnQ6
OkRvbWFpbkVycm9yLCBbdW5kZXJseWluZ0Vycm9yIGNvZGVdKTsKKyAgICAgICAgcmV0dXJuIE1l
ZGlhUGxheWVyOjpOb0Vycm9yOworICAgIH0KKworICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4ga2V5
UmVxdWVzdEJ1ZmZlciA9IEFycmF5QnVmZmVyOjpjcmVhdGUoW2tleVJlcXVlc3QuZ2V0KCkgYnl0
ZXNdLCBba2V5UmVxdWVzdC5nZXQoKSBsZW5ndGhdKTsKKyAgICBSZWZQdHI8VWludDhBcnJheT4g
a2V5UmVxdWVzdEFycmF5ID0gVWludDhBcnJheTo6Y3JlYXRlKGtleVJlcXVlc3RCdWZmZXIsIDAs
IGtleVJlcXVlc3RCdWZmZXItPmJ5dGVMZW5ndGgoKSk7CisgICAgcGxheWVyKCktPmtleU1lc3Nh
Z2Uoa2V5U3lzdGVtLCBzZXNzaW9uSWQsIGtleVJlcXVlc3RBcnJheS0+ZGF0YSgpLCBrZXlSZXF1
ZXN0QXJyYXktPmJ5dGVMZW5ndGgoKSk7CisKKyAgICAvLyBNb3ZlIG93bmVyc2hpcCBvZiB0aGUg
QVZBc3NldFJlc291cmNlTG9hZGluZ1JlcXVlc3Rmcm9tIHRoZSBrZXlJZFRvUmVxdWVzdE1hcCB0
byB0aGUgc2Vzc2lvbklkVG9SZXF1ZXN0TWFwOgorICAgIG1fc2Vzc2lvbklkVG9SZXF1ZXN0TWFw
LnNldChzZXNzaW9uSWQsIGF2UmVxdWVzdCk7CisgICAgbV9rZXlVUklUb1JlcXVlc3RNYXAucmVt
b3ZlKGtleVVSSSk7CisKKyAgICByZXR1cm4gTWVkaWFQbGF5ZXI6Ok5vRXJyb3I7Cit9CisKK01l
ZGlhUGxheWVyOjpNZWRpYUtleUV4Y2VwdGlvbiBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRp
b25PYmpDOjphZGRLZXkoY29uc3QgU3RyaW5nJiBrZXlTeXN0ZW0sIGNvbnN0IHVuc2lnbmVkIGNo
YXIqIGtleVB0ciwgdW5zaWduZWQga2V5TGVuZ3RoLCBjb25zdCB1bnNpZ25lZCBjaGFyKiBpbml0
RGF0YVB0ciwgdW5zaWduZWQgaW5pdERhdGFMZW5ndGgsIGNvbnN0IFN0cmluZyYgc2Vzc2lvbklk
KQoreworICAgIGlmICgha2V5U3lzdGVtSXNTdXBwb3J0ZWQoa2V5U3lzdGVtKSkKKyAgICAgICAg
cmV0dXJuIE1lZGlhUGxheWVyOjpLZXlTeXN0ZW1Ob3RTdXBwb3J0ZWQ7CisKKyAgICBpZiAoIW1f
c2Vzc2lvbklkVG9SZXF1ZXN0TWFwLmNvbnRhaW5zKHNlc3Npb25JZCkpCisgICAgICAgIHJldHVy
biBNZWRpYVBsYXllcjo6SW52YWxpZFBsYXllclN0YXRlOworCisgICAgUmV0YWluUHRyPEFWQXNz
ZXRSZXNvdXJjZUxvYWRpbmdSZXF1ZXN0PiBhdlJlcXVlc3QgPSBtX3Nlc3Npb25JZFRvUmVxdWVz
dE1hcC5nZXQoc2Vzc2lvbklkKTsKKyAgICBSZXRhaW5QdHI8TlNEYXRhPiBrZXlEYXRhID0gYWRv
cHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlczprZXlQdHIgbGVuZ3RoOmtleUxlbmd0
aF0pOworICAgIFthdlJlcXVlc3QuZ2V0KCkgZmluaXNoTG9hZGluZ1dpdGhSZXNwb25zZTpuaWwg
ZGF0YTprZXlEYXRhLmdldCgpIHJlZGlyZWN0Om5pbF07CisgICAgbV9zZXNzaW9uSWRUb1JlcXVl
c3RNYXAucmVtb3ZlKHNlc3Npb25JZCk7CisKKyAgICBwbGF5ZXIoKS0+a2V5QWRkZWQoa2V5U3lz
dGVtLCBzZXNzaW9uSWQpOworCisgICAgVU5VU0VEX1BBUkFNKGluaXREYXRhUHRyKTsKKyAgICBV
TlVTRURfUEFSQU0oaW5pdERhdGFMZW5ndGgpOworICAgIHJldHVybiBNZWRpYVBsYXllcjo6Tm9F
cnJvcjsKK30KKworTWVkaWFQbGF5ZXI6Ok1lZGlhS2V5RXhjZXB0aW9uIE1lZGlhUGxheWVyUHJp
dmF0ZUFWRm91bmRhdGlvbk9iakM6OmNhbmNlbEtleVJlcXVlc3QoY29uc3QgU3RyaW5nJiBrZXlT
eXN0ZW0sIGNvbnN0IFN0cmluZyYgc2Vzc2lvbklkKQoreworICAgIGlmICgha2V5U3lzdGVtSXNT
dXBwb3J0ZWQoa2V5U3lzdGVtKSkKKyAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVyOjpLZXlTeXN0
ZW1Ob3RTdXBwb3J0ZWQ7CisKKyAgICBpZiAoIW1fc2Vzc2lvbklkVG9SZXF1ZXN0TWFwLmNvbnRh
aW5zKHNlc3Npb25JZCkpCisgICAgICAgIHJldHVybiBNZWRpYVBsYXllcjo6SW52YWxpZFBsYXll
clN0YXRlOworCisgICAgbV9zZXNzaW9uSWRUb1JlcXVlc3RNYXAucmVtb3ZlKHNlc3Npb25JZCk7
CisgICAgcmV0dXJuIE1lZGlhUGxheWVyOjpOb0Vycm9yOworfQorI2VuZGlmCisKIE5TQXJyYXkq
IGFzc2V0TWV0YWRhdGFLZXlOYW1lcygpCiB7CiAgICAgc3RhdGljIE5TQXJyYXkqIGtleXM7CkBA
IC0xMDM4LDQgKzEyNDEsMjYgQEAgTlNBcnJheSogaXRlbUtWT1Byb3BlcnRpZXMoKQogCiBAZW5k
CiAKKyNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKQorQGltcGxlbWVudGF0aW9uIFdlYkNvcmVB
VkZMb2FkZXJEZWxlZ2F0ZQorCistIChpZClpbml0V2l0aENhbGxiYWNrOihNZWRpYVBsYXllclBy
aXZhdGVBVkZvdW5kYXRpb25PYmpDKiljYWxsYmFjaworeworICAgIG1fY2FsbGJhY2sgPSBjYWxs
YmFjazsKKyAgICByZXR1cm4gW3N1cGVyIGluaXRdOworfQorCistIChCT09MKXJlc291cmNlTG9h
ZGVyOihBVkFzc2V0UmVzb3VyY2VMb2FkZXIgKilyZXNvdXJjZUxvYWRlciBzaG91bGRXYWl0Rm9y
TG9hZGluZ09mUmVxdWVzdGVkUmVzb3VyY2U6KEFWQXNzZXRSZXNvdXJjZUxvYWRpbmdSZXF1ZXN0
ICopbG9hZGluZ1JlcXVlc3QKK3sKKyAgICBVTlVTRURfUEFSQU0ocmVzb3VyY2VMb2FkZXIpOwor
ICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57CisgICAgICAg
IGlmICghbV9jYWxsYmFjay0+c2hvdWxkV2FpdEZvckxvYWRpbmdPZlJlc291cmNlKGxvYWRpbmdS
ZXF1ZXN0KSkKKyAgICAgICAgICAgIFtsb2FkaW5nUmVxdWVzdCBmaW5pc2hMb2FkaW5nV2l0aEVy
cm9yOm5pbF07CisgICAgfSk7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK0BlbmQKKyNlbmRpZgor
CiAjZW5kaWYK
</data>
<flag name="review"
          id="178942"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>