<?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>141273</bug_id>
          
          <creation_ts>2015-02-04 16:19:51 -0800</creation_ts>
          <short_desc>Avoid copying std::functions across threads in NetworkCacheStorage</short_desc>
          <delta_ts>2015-02-05 06:32:10 -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>Page Loading</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>psolanki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1066979</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-02-04 16:19:51 -0800</bug_when>
    <thetext>The current behavior is bug-prone.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1066985</commentid>
    <comment_count>1</comment_count>
      <attachid>246066</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-02-04 16:38:00 -0800</bug_when>
    <thetext>Created attachment 246066
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1066986</commentid>
    <comment_count>2</comment_count>
      <attachid>246067</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-02-04 16:45:33 -0800</bug_when>
    <thetext>Created attachment 246067
rebased</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1066987</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-02-04 16:48:01 -0800</bug_when>
    <thetext>Attachment 246067 did not pass style-queue:


ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheStorage.h:167:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheStorage.h:174:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheStorageCocoa.mm:410:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 3 in 4 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1066988</commentid>
    <comment_count>4</comment_count>
      <attachid>246067</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2015-02-04 16:49:12 -0800</bug_when>
    <thetext>Comment on attachment 246067
rebased

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

r=me

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheStorageCocoa.mm:359
&gt; +    auto&amp; retrieve = *retrieveOperation;

Whenever I see code like this it makes me wonder if we should have a never-null unique_ptr.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067087</commentid>
    <comment_count>5</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-02-05 06:32:10 -0800</bug_when>
    <thetext>https://trac.webkit.org/r179690</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246066</attachid>
            <date>2015-02-04 16:38:00 -0800</date>
            <delta_ts>2015-02-04 16:45:33 -0800</delta_ts>
            <desc>patch</desc>
            <filename>disk-cache-functions.patch</filename>
            <type>text/plain</type>
            <size>16966</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3OTY0NSkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM5IEBACisyMDE1LTAyLTA0ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBBdm9pZCBjb3B5aW5nIHN0ZDo6
ZnVuY3Rpb25zIGFjcm9zcyB0aHJlYWRzIGluIE5ldHdvcmtDYWNoZVN0b3JhZ2UKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTI3MworCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBjdXJyZW50IGFwcHJv
YWNoIGlzIHJpc2t5LiBUaGVyZSBpcyBwb3NzaWJsaXR5IHRoYXQgY2FwdHVyZWQgdmFyaWFibGVz
IGFyZQorICAgICAgICBkZWxldGVkIGluIGFuIHVuZXhwZWN0ZWQgdGhyZWFkLgorCisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya0NhY2hlOjpyZXRyaWV2ZSk6CisKKyAgICAgICAgICAgIFRoZSBjYXB0dXJlIHRy
aWNrIGhlcmUgaXMgbm8gbG9uZ2VyIG5lZWRlZC4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuaDoKKworICAgICAgICAgICAgRm9yIGVhY2ggY2Fj
aGUgb3BlcmF0aW9uIHdlIGNyZWF0ZSBSZXRyaXZlL1N0b3JlL1VwZGF0ZU9wZXJhdGlvbiBvYmpl
Y3Qga2VwdCBhbGl2ZSBieSB0aGUgYWN0aXZlIG9wZXJhdGlvbiBtYXAuCisgICAgICAgICAgICBU
aGlzIG9iamVjdCBjYXB0dXJlcyBhbGwgcGFyYW1ldGVycyBvZiB0aGUgb3BlcmF0aW9uIGluY2x1
ZGluZyB0aGUgbGFtYmRhLiBXaGVuIG9wZXJhdGlvbiBjb21wbGV0ZXMKKyAgICAgICAgICAgIHRo
ZSBvYmplY3QgaXMgcmVtb3ZlZCBmcm9tIHRoZSBtYXAgaW4gdGhlIG1haW4gdGhyZWFkIGVuc3Vy
aW5nIHNhZmUgZGVzdHJ1Y3Rpb24uCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9O
ZXR3b3JrQ2FjaGVTdG9yYWdlQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNo
ZVN0b3JhZ2U6OmRpc3BhdGNoUmV0cmlldmVPcGVyYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrQ2FjaGVTdG9yYWdlOjpkaXNwYXRjaFBlbmRpbmdSZXRyaWV2ZU9wZXJhdGlvbnMpOgor
ICAgICAgICAoV2ViS2l0OjpyZXRyaWV2ZUFjdGl2ZSk6CisKKyAgICAgICAgICAgIEluc3RlYWQg
b2YgbWFpbnRhaW5pbmcgYSBzZXBhcmF0ZSB3cml0ZSBjYWNoZSB3ZSBqdXN0IGxvb2sgdGhyb3Vn
aCB0aGUgYWN0aXZlIHdyaXRlIGFuZCB1cGRhdGUgbWFwcy4KKworICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrQ2FjaGVTdG9yYWdlOjpyZXRyaWV2ZSk6CisKKyAgICAgICAgICAgIFVzZSBmaXhlZCBz
aXplZCBwcmlvcml0eSBhcnJheSByYXRoZXIgdGhhbiBhIGR5bmFtaWMgb25lLiBWZWN0b3I8RGVx
dWU8c3RkOjp1bmlxdWVfcHRyPj4gZG9lc24ndCBxdWl0ZSB3b3JrLgorCisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtDYWNoZVN0b3JhZ2U6OnN0b3JlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a0NhY2hlU3RvcmFnZTo6dXBkYXRlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlU3Rv
cmFnZTo6Y2xlYXIpOgorCiAyMDE1LTAyLTA0ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJA
YXBwbGUuY29tPgogCiAgICAgICAgIFtpT1MgV0syXSBMYXllcnMgdGhhdCBhcmUgY3JlYXRlZCBh
bmQgZGVzdHJveWVkIGluIHRoZSBzYW1lIHRyYW5zYWN0aW9uIHNob3VsZG4ndCBiZSBlbmNvZGVk
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZS5jcHAJKHJldmlzaW9uIDE3OTU0NykKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNiwz
MSArMjI2LDIyIEBAIHZvaWQgTmV0d29ya0NhY2hlOjpyZXRyaWV2ZShjb25zdCBXZWJDb3IKICAg
ICB9CiAKICAgICBhdXRvIHN0YXJ0VGltZSA9IHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6Om5v
dygpOwotCiAgICAgTmV0d29ya0NhY2hlS2V5IHN0b3JhZ2VLZXkgPSBtYWtlQ2FjaGVLZXkob3Jp
Z2luYWxSZXF1ZXN0KTsKICAgICB1bnNpZ25lZCBwcmlvcml0eSA9IG9yaWdpbmFsUmVxdWVzdC5w
cmlvcml0eSgpOwogCi0gICAgLy8gQ2FwdHVyZWQgZGF0YSBpcyBnb2luZyB0byBiZSBzaHVmZmxl
ZCBhcm91bmQgdGhyZWFkcy4gQXZvaWQgdW5zYWZlIGNvcHlpbmcuCi0gICAgc3RydWN0IENhcHR1
cmUgewotICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Qgb3JpZ2luYWxSZXF1ZXN0Owot
ICAgICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQgKHN0ZDo6dW5pcXVlX3B0cjxFbnRyeT4pPiBjb21w
bGV0aW9uSGFuZGxlcjsKLSAgICB9OwotICAgIC8vIEZJWE1FOiBXaXRoIEMrKzE0IHRoaXMgY291
bGQgdXNlIHVuaXF1ZV9wdHIgYW5kIGluaXRpYWxpemVkIGxhbWJkYSBjYXB0dXJlCi0gICAgYXV0
byBjYXB0dXJlID0gc3RkOjptYWtlX3NoYXJlZDxDYXB0dXJlPihDYXB0dXJlIHsgb3JpZ2luYWxS
ZXF1ZXN0LCBjb21wbGV0aW9uSGFuZGxlciB9KTsKLQotICAgIG1fc3RvcmFnZS0+cmV0cmlldmUo
c3RvcmFnZUtleSwgcHJpb3JpdHksIFt0aGlzLCBjYXB0dXJlLCBzdGFydFRpbWVdKHN0ZDo6dW5p
cXVlX3B0cjxOZXR3b3JrQ2FjaGVTdG9yYWdlOjpFbnRyeT4gZW50cnkpIHsKKyAgICBtX3N0b3Jh
Z2UtPnJldHJpZXZlKHN0b3JhZ2VLZXksIHByaW9yaXR5LCBbdGhpcywgb3JpZ2luYWxSZXF1ZXN0
LCBjb21wbGV0aW9uSGFuZGxlciwgc3RhcnRUaW1lXShzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya0Nh
Y2hlU3RvcmFnZTo6RW50cnk+IGVudHJ5KSB7CiAgICAgICAgIGlmICghZW50cnkpIHsKICAgICAg
ICAgICAgIExPRyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpIG5vdCBmb3VuZCBpbiBz
dG9yYWdlIik7Ci0gICAgICAgICAgICBjYXB0dXJlLT5jb21wbGV0aW9uSGFuZGxlcihudWxscHRy
KTsKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIpOwogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgIGF1dG8gZGVjb2RlZEVudHJ5ID0gZGVj
b2RlU3RvcmFnZUVudHJ5KCplbnRyeSwgY2FwdHVyZS0+b3JpZ2luYWxSZXF1ZXN0KTsKKyAgICAg
ICAgYXV0byBkZWNvZGVkRW50cnkgPSBkZWNvZGVTdG9yYWdlRW50cnkoKmVudHJ5LCBvcmlnaW5h
bFJlcXVlc3QpOwogICAgICAgICBib29sIHN1Y2Nlc3MgPSAhIWRlY29kZWRFbnRyeTsKICNpZiAh
TE9HX0RJU0FCTEVECiAgICAgICAgIGF1dG8gZWxhcHNlZE1TID0gc3RkOjpjaHJvbm86OmR1cmF0
aW9uX2Nhc3Q8c3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcz4oc3RkOjpjaHJvbm86OnN5c3RlbV9j
bG9jazo6bm93KCkgLSBzdGFydFRpbWUpLmNvdW50KCk7CiAjZW5kaWYKLSAgICAgICAgTE9HKE5l
dHdvcmtDYWNoZSwgIihOZXR3b3JrUHJvY2VzcykgcmV0cmlldmUgY29tcGxldGUgc3VjY2Vzcz0l
ZCBwcmlvcml0eT0lZCB0aW1lPSVsbGRtcyIsIHN1Y2Nlc3MsIGNhcHR1cmUtPm9yaWdpbmFsUmVx
dWVzdC5wcmlvcml0eSgpLCBlbGFwc2VkTVMpOwotICAgICAgICBjYXB0dXJlLT5jb21wbGV0aW9u
SGFuZGxlcihXVEY6Om1vdmUoZGVjb2RlZEVudHJ5KSk7CisgICAgICAgIExPRyhOZXR3b3JrQ2Fj
aGUsICIoTmV0d29ya1Byb2Nlc3MpIHJldHJpZXZlIGNvbXBsZXRlIHN1Y2Nlc3M9JWQgcHJpb3Jp
dHk9JWQgdGltZT0lbGxkbXMiLCBzdWNjZXNzLCBvcmlnaW5hbFJlcXVlc3QucHJpb3JpdHkoKSwg
ZWxhcHNlZE1TKTsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGOjptb3ZlKGRlY29kZWRF
bnRyeSkpOwogICAgICAgICByZXR1cm4gc3VjY2VzczsKICAgICB9KTsKIH0KSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGVTdG9yYWdlLmgJKHJldmlzaW9uIDE3OTU0NykKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzIs
NiArMzIsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXNwb25zZS5oPgogI2luY2x1
ZGUgPHd0Zi9CbG9vbUZpbHRlci5oPgogI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgorI2luY2x1ZGUg
PHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKQEAgLTE1Nyw5ICsxNTgsMjIgQEAgcHJpdmF0ZToKICAgICAgICAgTmV0
d29ya0NhY2hlS2V5IGtleTsKICAgICAgICAgc3RkOjpmdW5jdGlvbjxib29sIChzdGQ6OnVuaXF1
ZV9wdHI8RW50cnk+KT4gY29tcGxldGlvbkhhbmRsZXI7CiAgICAgfTsKLSAgICB2b2lkIGRpc3Bh
dGNoUmV0cmlldmVPcGVyYXRpb24oY29uc3QgUmV0cmlldmVPcGVyYXRpb24mKTsKKyAgICB2b2lk
IGRpc3BhdGNoUmV0cmlldmVPcGVyYXRpb24oc3RkOjp1bmlxdWVfcHRyPGNvbnN0IFJldHJpZXZl
T3BlcmF0aW9uPik7CiAgICAgdm9pZCBkaXNwYXRjaFBlbmRpbmdSZXRyaWV2ZU9wZXJhdGlvbnMo
KTsKIAorICAgIHN0cnVjdCBTdG9yZU9wZXJhdGlvbiB7CisgICAgICAgIE5ldHdvcmtDYWNoZUtl
eSBrZXk7CisgICAgICAgIEVudHJ5IGVudHJ5OworICAgICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQg
KGJvb2wgc3VjY2Vzcyk+IGNvbXBsZXRpb25IYW5kbGVyOworICAgIH07CisKKyAgICBzdHJ1Y3Qg
VXBkYXRlT3BlcmF0aW9uIHsKKyAgICAgICAgTmV0d29ya0NhY2hlS2V5IGtleTsKKyAgICAgICAg
RW50cnkgZW50cnk7CisgICAgICAgIEVudHJ5IGV4aXN0aW5nRW50cnk7CisgICAgICAgIHN0ZDo6
ZnVuY3Rpb248dm9pZCAoYm9vbCBzdWNjZXNzKT4gY29tcGxldGlvbkhhbmRsZXI7CisgICAgfTsK
KwogICAgIGNvbnN0IFN0cmluZyBtX2RpcmVjdG9yeVBhdGg7CiAKICAgICBzaXplX3QgbV9tYXhp
bXVtU2l6ZSB7IHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCkgfTsKQEAgLTE2OCwx
MSArMTgyLDEyIEBAIHByaXZhdGU6CiAgICAgc3RkOjphdG9taWM8c2l6ZV90PiBtX2FwcHJveGlt
YXRlRW50cnlDb3VudCB7IDAgfTsKICAgICBzdGQ6OmF0b21pYzxib29sPiBtX3Nocmlua0luUHJv
Z3Jlc3MgeyBmYWxzZSB9OwogCi0gICAgVmVjdG9yPERlcXVlPFJldHJpZXZlT3BlcmF0aW9uPj4g
bV9wZW5kaW5nUmV0cmlldmVPcGVyYXRpb25zQnlQcmlvcml0eTsKLSAgICB1bnNpZ25lZCBtX2Fj
dGl2ZVJldHJpZXZlT3BlcmF0aW9uQ291bnQgeyAwIH07CisgICAgc3RhdGljIGNvbnN0IGludCBt
YXhpbXVtUmV0cmlldmVQcmlvcml0eSA9IDQ7CisgICAgRGVxdWU8c3RkOjp1bmlxdWVfcHRyPGNv
bnN0IFJldHJpZXZlT3BlcmF0aW9uPj4gbV9wZW5kaW5nUmV0cmlldmVPcGVyYXRpb25zQnlQcmlv
cml0eVttYXhpbXVtUmV0cmlldmVQcmlvcml0eSArIDFdOwogCi0gICAgdHlwZWRlZiBzdGQ6OnBh
aXI8TmV0d29ya0NhY2hlS2V5LCBFbnRyeT4gS2V5RW50cnlQYWlyOwotICAgIEhhc2hNYXA8TmV0
d29ya0NhY2hlS2V5OjpIYXNoVHlwZSwgc3RkOjpzaGFyZWRfcHRyPEtleUVudHJ5UGFpcj4sIEFs
cmVhZHlIYXNoZWQ+IG1fd3JpdGVDYWNoZTsKKyAgICBIYXNoU2V0PHN0ZDo6dW5pcXVlX3B0cjxj
b25zdCBSZXRyaWV2ZU9wZXJhdGlvbj4+IG1fYWN0aXZlUmV0cmlldmVPcGVyYXRpb25zOworICAg
IEhhc2hTZXQ8c3RkOjp1bmlxdWVfcHRyPGNvbnN0IFN0b3JlT3BlcmF0aW9uPj4gbV9hY3RpdmVT
dG9yZU9wZXJhdGlvbnM7CisgICAgSGFzaFNldDxzdGQ6OnVuaXF1ZV9wdHI8Y29uc3QgVXBkYXRl
T3BlcmF0aW9uPj4gbV9hY3RpdmVVcGRhdGVPcGVyYXRpb25zOwogCiAjaWYgUExBVEZPUk0oQ09D
T0EpCiAgICAgbXV0YWJsZSBEaXNwYXRjaFB0cjxkaXNwYXRjaF9xdWV1ZV90PiBtX2lvUXVldWU7
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVT
dG9yYWdlQ29jb2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZUNvY29hLm1tCShyZXZpc2lvbiAxNzk1NDcpCisr
KyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdl
Q29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTM1MiwyOSArMzUyLDMwIEBAIHZvaWQgTmV0d29y
a0NhY2hlU3RvcmFnZTo6cmVtb3ZlRW50cnkoY28KICAgICB9KTsKIH0KIAotdm9pZCBOZXR3b3Jr
Q2FjaGVTdG9yYWdlOjpkaXNwYXRjaFJldHJpZXZlT3BlcmF0aW9uKGNvbnN0IFJldHJpZXZlT3Bl
cmF0aW9uJiByZXRyaWV2ZSkKK3ZvaWQgTmV0d29ya0NhY2hlU3RvcmFnZTo6ZGlzcGF0Y2hSZXRy
aWV2ZU9wZXJhdGlvbihzdGQ6OnVuaXF1ZV9wdHI8Y29uc3QgUmV0cmlldmVPcGVyYXRpb24+IHJl
dHJpZXZlT3BlcmF0aW9uKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKLSAg
ICArK21fYWN0aXZlUmV0cmlldmVPcGVyYXRpb25Db3VudDsKKyAgICBhdXRvJiByZXRyaWV2ZSA9
ICpyZXRyaWV2ZU9wZXJhdGlvbjsKKyAgICBtX2FjdGl2ZVJldHJpZXZlT3BlcmF0aW9ucy5hZGQo
V1RGOjptb3ZlKHJldHJpZXZlT3BlcmF0aW9uKSk7CiAKICAgICBTdHJpbmdDYXB0dXJlIGNhY2hl
UGF0aENhcHR1cmUobV9kaXJlY3RvcnlQYXRoKTsKLSAgICBkaXNwYXRjaF9hc3luYyhtX2lvUXVl
dWUuZ2V0KCksIFt0aGlzLCByZXRyaWV2ZSwgY2FjaGVQYXRoQ2FwdHVyZV0geworICAgIGRpc3Bh
dGNoX2FzeW5jKG1faW9RdWV1ZS5nZXQoKSwgW3RoaXMsICZyZXRyaWV2ZSwgY2FjaGVQYXRoQ2Fw
dHVyZV0gewogICAgICAgICBpbnQgZmQ7CiAgICAgICAgIGF1dG8gY2hhbm5lbCA9IG9wZW5GaWxl
Rm9yS2V5KHJldHJpZXZlLmtleSwgRmlsZU9wZW5UeXBlOjpSZWFkLCBjYWNoZVBhdGhDYXB0dXJl
LnN0cmluZygpLCBmZCk7CiAKICAgICAgICAgYm9vbCBkaWRDYWxsQ29tcGxldGlvbkhhbmRsZXIg
PSBmYWxzZTsKLSAgICAgICAgZGlzcGF0Y2hfaW9fcmVhZChjaGFubmVsLmdldCgpLCAwLCBzdGQ6
Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpLCBkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgp
LCBbdGhpcywgZmQsIHJldHJpZXZlLCBkaWRDYWxsQ29tcGxldGlvbkhhbmRsZXJdKGJvb2wgZG9u
ZSwgZGlzcGF0Y2hfZGF0YV90IGZpbGVEYXRhLCBpbnQgZXJyb3IpIG11dGFibGUgeworICAgICAg
ICBkaXNwYXRjaF9pb19yZWFkKGNoYW5uZWwuZ2V0KCksIDAsIHN0ZDo6bnVtZXJpY19saW1pdHM8
c2l6ZV90Pjo6bWF4KCksIGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFt0aGlzLCBmZCwgJnJl
dHJpZXZlLCBkaWRDYWxsQ29tcGxldGlvbkhhbmRsZXJdKGJvb2wgZG9uZSwgZGlzcGF0Y2hfZGF0
YV90IGZpbGVEYXRhLCBpbnQgZXJyb3IpIG11dGFibGUgewogICAgICAgICAgICAgaWYgKGRvbmUp
IHsKLSAgICAgICAgICAgICAgICBBU1NFUlQobV9hY3RpdmVSZXRyaWV2ZU9wZXJhdGlvbkNvdW50
KTsKLSAgICAgICAgICAgICAgICAtLW1fYWN0aXZlUmV0cmlldmVPcGVyYXRpb25Db3VudDsKLSAg
ICAgICAgICAgICAgICBkaXNwYXRjaFBlbmRpbmdSZXRyaWV2ZU9wZXJhdGlvbnMoKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGlmIChkb25lKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFk
aWRDYWxsQ29tcGxldGlvbkhhbmRsZXIpCi0gICAgICAgICAgICAgICAgICAgIHJldHJpZXZlLmNv
bXBsZXRpb25IYW5kbGVyKG51bGxwdHIpOwogICAgICAgICAgICAgICAgIGlmIChlcnJvcikKICAg
ICAgICAgICAgICAgICAgICAgcmVtb3ZlRW50cnkocmV0cmlldmUua2V5KTsKKworICAgICAgICAg
ICAgICAgIGlmICghZGlkQ2FsbENvbXBsZXRpb25IYW5kbGVyKQorICAgICAgICAgICAgICAgICAg
ICByZXRyaWV2ZS5jb21wbGV0aW9uSGFuZGxlcihudWxscHRyKTsKKworICAgICAgICAgICAgICAg
IEFTU0VSVChtX2FjdGl2ZVJldHJpZXZlT3BlcmF0aW9ucy5jb250YWlucygmcmV0cmlldmUpKTsK
KyAgICAgICAgICAgICAgICBtX2FjdGl2ZVJldHJpZXZlT3BlcmF0aW9ucy5yZW1vdmUoJnJldHJp
ZXZlKTsKKyAgICAgICAgICAgICAgICBkaXNwYXRjaFBlbmRpbmdSZXRyaWV2ZU9wZXJhdGlvbnMo
KTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBB
U1NFUlQoIWRpZENhbGxDb21wbGV0aW9uSGFuZGxlcik7IC8vIFdlIGFyZSByZXF1ZXN0aW5nIG1h
eGltdW0gc2l6ZWQgY2h1bmsgc28gd2Ugc2hvdWxkIG5ldmVyIGdldCBjYWxsZWQgbW9yZSB0aGFu
IG9uY2Ugd2l0aCBkYXRhLgpAQCAtMzkyLDEwICszOTMsMTAgQEAgdm9pZCBOZXR3b3JrQ2FjaGVT
dG9yYWdlOjpkaXNwYXRjaFBlbmRpbgogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7
CiAKLSAgICBjb25zdCB1bnNpZ25lZCBtYXhpbXVtQWN0aXZlUmV0cmlldmVPcGVyYXRpb25Db3Vu
dCA9IDU7CisgICAgY29uc3QgaW50IG1heGltdW1BY3RpdmVSZXRyaWV2ZU9wZXJhdGlvbkNvdW50
ID0gNTsKIAotICAgIGZvciAoaW50IHByaW9yaXR5ID0gbV9wZW5kaW5nUmV0cmlldmVPcGVyYXRp
b25zQnlQcmlvcml0eS5zaXplKCkgLSAxOyBwcmlvcml0eSA+PSAwOyAtLXByaW9yaXR5KSB7Ci0g
ICAgICAgIGlmIChtX2FjdGl2ZVJldHJpZXZlT3BlcmF0aW9uQ291bnQgPiBtYXhpbXVtQWN0aXZl
UmV0cmlldmVPcGVyYXRpb25Db3VudCkgeworICAgIGZvciAoaW50IHByaW9yaXR5ID0gbWF4aW11
bVJldHJpZXZlUHJpb3JpdHk7IHByaW9yaXR5ID49IDA7IC0tcHJpb3JpdHkpIHsKKyAgICAgICAg
aWYgKG1fYWN0aXZlUmV0cmlldmVPcGVyYXRpb25zLnNpemUoKSA+IG1heGltdW1BY3RpdmVSZXRy
aWV2ZU9wZXJhdGlvbkNvdW50KSB7CiAgICAgICAgICAgICBMT0coTmV0d29ya0NhY2hlU3RvcmFn
ZSwgIihOZXR3b3JrUHJvY2VzcykgbGltaXRpbmcgcGFyYWxsZWwgcmV0cmlldmVzIik7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTQwNiwzMCArNDA3LDM4IEBAIHZvaWQgTmV0
d29ya0NhY2hlU3RvcmFnZTo6ZGlzcGF0Y2hQZW5kaW4KICAgICB9CiB9CiAKK3RlbXBsYXRlIDxj
bGFzcyBUPiBib29sIHJldHJpZXZlQWN0aXZlKGNvbnN0IFQmIG9wZXJhdGlvbnMsIGNvbnN0IE5l
dHdvcmtDYWNoZUtleSYga2V5LCBzdGQ6OmZ1bmN0aW9uPGJvb2wgKHN0ZDo6dW5pcXVlX3B0cjxO
ZXR3b3JrQ2FjaGVTdG9yYWdlOjpFbnRyeT4pPiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAg
Zm9yIChhdXRvJiBvcGVyYXRpb24gOiBvcGVyYXRpb25zKSB7CisgICAgICAgIGlmIChvcGVyYXRp
b24tPmtleSA9PSBrZXkpIHsKKyAgICAgICAgICAgIExPRyhOZXR3b3JrQ2FjaGVTdG9yYWdlLCAi
KE5ldHdvcmtQcm9jZXNzKSBmb3VuZCBzdG9yZSBvcGVyYXRpb24gaW4gcHJvZ3Jlc3MiKTsKKyAg
ICAgICAgICAgIGF1dG8gZW50cnkgPSBvcGVyYXRpb24tPmVudHJ5OworICAgICAgICAgICAgZGlz
cGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW2VudHJ5LCBjb21wbGV0aW9u
SGFuZGxlcl0geworICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHN0ZDo6bWFrZV91
bmlxdWU8TmV0d29ya0NhY2hlU3RvcmFnZTo6RW50cnk+KGVudHJ5KSk7CisgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVy
biBmYWxzZTsKK30KKwogdm9pZCBOZXR3b3JrQ2FjaGVTdG9yYWdlOjpyZXRyaWV2ZShjb25zdCBO
ZXR3b3JrQ2FjaGVLZXkmIGtleSwgdW5zaWduZWQgcHJpb3JpdHksIHN0ZDo6ZnVuY3Rpb248Ym9v
bCAoc3RkOjp1bmlxdWVfcHRyPEVudHJ5Pik+IGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFT
U0VSVChSdW5Mb29wOjppc01haW4oKSk7CisgICAgQVNTRVJUKHByaW9yaXR5IDw9IG1heGltdW1S
ZXRyaWV2ZVByaW9yaXR5KTsKIAogICAgIGlmICghbV9jb250ZW50c0ZpbHRlci5tYXlDb250YWlu
KGtleS5oYXNoKCkpKSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQorICAgIC8vIFNlZSBpZiB3ZSBoYXZlIHRoZSByZXNvdXJjZSBp
biBtZW1vcnkuCisgICAgaWYgKHJldHJpZXZlQWN0aXZlKG1fYWN0aXZlU3RvcmVPcGVyYXRpb25z
LCBrZXksIGNvbXBsZXRpb25IYW5kbGVyKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChyZXRy
aWV2ZUFjdGl2ZShtX2FjdGl2ZVVwZGF0ZU9wZXJhdGlvbnMsIGtleSwgY29tcGxldGlvbkhhbmRs
ZXIpKQorICAgICAgICByZXR1cm47CiAKLSAgICAvLyBXcml0ZSBjYWNoZSBpcyBhIHRlbXBvcmFy
eSBtZW1vcnkgY2FjaGUgdXNlZCB0byByZXNwb25kIHRvIHJlcXVlc3RzIHdoaWxlIGEgd3JpdGUg
aXMgcGVuZGluZy4KLSAgICBpZiAoYXV0byBrZXlFbnRyeVBhaXIgPSBtX3dyaXRlQ2FjaGUuZ2V0
KGtleS5oYXNoKCkpKSB7Ci0gICAgICAgIGlmIChrZXlFbnRyeVBhaXItPmZpcnN0ID09IGtleSkg
ewotICAgICAgICAgICAgTE9HKE5ldHdvcmtDYWNoZVN0b3JhZ2UsICIoTmV0d29ya1Byb2Nlc3Mp
IGZvdW5kIGZyb20gdGhlIHdyaXRlIGNhY2hlIik7Ci0gICAgICAgICAgICBkaXNwYXRjaF9hc3lu
YyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBba2V5RW50cnlQYWlyLCBjb21wbGV0aW9uSGFu
ZGxlcl0gewotICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHN0ZDo6bWFrZV91bmlx
dWU8RW50cnk+KGtleUVudHJ5UGFpci0+c2Vjb25kKSk7Ci0gICAgICAgICAgICB9KTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChtX3BlbmRpbmdSZXRy
aWV2ZU9wZXJhdGlvbnNCeVByaW9yaXR5LnNpemUoKSA8IHByaW9yaXR5ICsgMSkKLSAgICAgICAg
bV9wZW5kaW5nUmV0cmlldmVPcGVyYXRpb25zQnlQcmlvcml0eS5ncm93KHByaW9yaXR5ICsgMSk7
Ci0gICAgbV9wZW5kaW5nUmV0cmlldmVPcGVyYXRpb25zQnlQcmlvcml0eVtwcmlvcml0eV0uYXBw
ZW5kKFJldHJpZXZlT3BlcmF0aW9uIHsga2V5LCBjb21wbGV0aW9uSGFuZGxlciB9KTsKLQorICAg
IC8vIEZldGNoIGZyb20gZGlzay4KKyAgICBtX3BlbmRpbmdSZXRyaWV2ZU9wZXJhdGlvbnNCeVBy
aW9yaXR5W3ByaW9yaXR5XS5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxSZXRyaWV2ZU9wZXJhdGlv
bj4oUmV0cmlldmVPcGVyYXRpb24geyBrZXksIGNvbXBsZXRpb25IYW5kbGVyIH0pKTsKICAgICBk
aXNwYXRjaFBlbmRpbmdSZXRyaWV2ZU9wZXJhdGlvbnMoKTsKIH0KIApAQCAtNDQwLDI2ICs0NDks
MjkgQEAgdm9pZCBOZXR3b3JrQ2FjaGVTdG9yYWdlOjpzdG9yZShjb25zdCBOZQogICAgIG1fY29u
dGVudHNGaWx0ZXIuYWRkKGtleS5oYXNoKCkpOwogICAgICsrbV9hcHByb3hpbWF0ZUVudHJ5Q291
bnQ7CiAKLSAgICBtX3dyaXRlQ2FjaGUuc2V0KGtleS5oYXNoKCksIHN0ZDo6bWFrZV9zaGFyZWQ8
S2V5RW50cnlQYWlyPihrZXksIGVudHJ5KSk7CisgICAgYXV0byBzdG9yZU9wZXJhdGlvbiA9IHN0
ZDo6bWFrZV91bmlxdWU8U3RvcmVPcGVyYXRpb24+KFN0b3JlT3BlcmF0aW9uIHsga2V5LCBlbnRy
eSwgY29tcGxldGlvbkhhbmRsZXIgfSk7CisgICAgYXV0byYgc3RvcmUgPSAqc3RvcmVPcGVyYXRp
b247CisgICAgbV9hY3RpdmVTdG9yZU9wZXJhdGlvbnMuYWRkKFdURjo6bW92ZShzdG9yZU9wZXJh
dGlvbikpOwogCiAgICAgU3RyaW5nQ2FwdHVyZSBjYWNoZVBhdGhDYXB0dXJlKG1fZGlyZWN0b3J5
UGF0aCk7Ci0gICAgZGlzcGF0Y2hfYXN5bmMobV9iYWNrZ3JvdW5kSU9RdWV1ZS5nZXQoKSwgW3Ro
aXMsIGtleSwgZW50cnksIGNhY2hlUGF0aENhcHR1cmUsIGNvbXBsZXRpb25IYW5kbGVyXSB7Ci0g
ICAgICAgIGF1dG8gZGF0YSA9IGVuY29kZUVudHJ5KGtleSwgZW50cnkpOworICAgIGRpc3BhdGNo
X2FzeW5jKG1fYmFja2dyb3VuZElPUXVldWUuZ2V0KCksIFt0aGlzLCAmc3RvcmUsIGNhY2hlUGF0
aENhcHR1cmVdIHsKKyAgICAgICAgYXV0byBkYXRhID0gZW5jb2RlRW50cnkoc3RvcmUua2V5LCBz
dG9yZS5lbnRyeSk7CiAKICAgICAgICAgaW50IGZkOwotICAgICAgICBhdXRvIGNoYW5uZWwgPSBv
cGVuRmlsZUZvcktleShrZXksIEZpbGVPcGVuVHlwZTo6Q3JlYXRlLCBjYWNoZVBhdGhDYXB0dXJl
LnN0cmluZygpLCBmZCk7Ci0gICAgICAgIGRpc3BhdGNoX2lvX3dyaXRlKGNoYW5uZWwuZ2V0KCks
IDAsIGRhdGEuZ2V0KCksIGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFt0aGlzLCBrZXksIGNv
bXBsZXRpb25IYW5kbGVyXShib29sIGRvbmUsIGRpc3BhdGNoX2RhdGFfdCwgaW50IGVycm9yKSB7
CisgICAgICAgIGF1dG8gY2hhbm5lbCA9IG9wZW5GaWxlRm9yS2V5KHN0b3JlLmtleSwgRmlsZU9w
ZW5UeXBlOjpDcmVhdGUsIGNhY2hlUGF0aENhcHR1cmUuc3RyaW5nKCksIGZkKTsKKyAgICAgICAg
ZGlzcGF0Y2hfaW9fd3JpdGUoY2hhbm5lbC5nZXQoKSwgMCwgZGF0YS5nZXQoKSwgZGlzcGF0Y2hf
Z2V0X21haW5fcXVldWUoKSwgW3RoaXMsICZzdG9yZV0oYm9vbCBkb25lLCBkaXNwYXRjaF9kYXRh
X3QsIGludCBlcnJvcikgewogICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChkb25lLCBkb25lKTsK
ICAgICAgICAgICAgIExPRyhOZXR3b3JrQ2FjaGVTdG9yYWdlLCAiKE5ldHdvcmtQcm9jZXNzKSB3
cml0ZSBjb21wbGV0ZSBlcnJvcj0lZCIsIGVycm9yKTsKICAgICAgICAgICAgIGlmIChlcnJvcikg
ewotICAgICAgICAgICAgICAgIGlmIChtX2NvbnRlbnRzRmlsdGVyLm1heUNvbnRhaW4oa2V5Lmhh
c2goKSkpCi0gICAgICAgICAgICAgICAgICAgIG1fY29udGVudHNGaWx0ZXIucmVtb3ZlKGtleS5o
YXNoKCkpOworICAgICAgICAgICAgICAgIGlmIChtX2NvbnRlbnRzRmlsdGVyLm1heUNvbnRhaW4o
c3RvcmUua2V5Lmhhc2goKSkpCisgICAgICAgICAgICAgICAgICAgIG1fY29udGVudHNGaWx0ZXIu
cmVtb3ZlKHN0b3JlLmtleS5oYXNoKCkpOwogICAgICAgICAgICAgICAgIGlmIChtX2FwcHJveGlt
YXRlRW50cnlDb3VudCkKICAgICAgICAgICAgICAgICAgICAgLS1tX2FwcHJveGltYXRlRW50cnlD
b3VudDsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fd3JpdGVDYWNoZS5yZW1vdmUoa2V5
Lmhhc2goKSk7CiAKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCFlcnJvcik7CisgICAg
ICAgICAgICBzdG9yZS5jb21wbGV0aW9uSGFuZGxlcighZXJyb3IpOworCisgICAgICAgICAgICBt
X2FjdGl2ZVN0b3JlT3BlcmF0aW9ucy5yZW1vdmUoJnN0b3JlKTsKICAgICAgICAgfSk7CiAgICAg
fSk7CiAKQEAgLTQ3NiwzNCArNDg4LDQxIEBAIHZvaWQgTmV0d29ya0NhY2hlU3RvcmFnZTo6dXBk
YXRlKGNvbnN0IE4KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fd3JpdGVDYWNoZS5z
ZXQoa2V5Lmhhc2goKSwgc3RkOjptYWtlX3NoYXJlZDxLZXlFbnRyeVBhaXI+KGtleSwgdXBkYXRl
RW50cnkpKTsKKyAgICBhdXRvIHVwZGF0ZU9wZXJhdGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8VXBk
YXRlT3BlcmF0aW9uPihVcGRhdGVPcGVyYXRpb24geyBrZXksIHVwZGF0ZUVudHJ5LCBleGlzdGlu
Z0VudHJ5LCBjb21wbGV0aW9uSGFuZGxlciB9KTsKKyAgICBhdXRvJiB1cGRhdGUgPSAqdXBkYXRl
T3BlcmF0aW9uOworICAgIG1fYWN0aXZlVXBkYXRlT3BlcmF0aW9ucy5hZGQoV1RGOjptb3ZlKHVw
ZGF0ZU9wZXJhdGlvbikpOwogCiAgICAgLy8gVHJ5IHRvIHVwZGF0ZSB0aGUgaGVhZGVyIG9mIGFu
IGV4aXN0aW5nIGVudHJ5LgogICAgIFN0cmluZ0NhcHR1cmUgY2FjaGVQYXRoQ2FwdHVyZShtX2Rp
cmVjdG9yeVBhdGgpOwotICAgIGRpc3BhdGNoX2FzeW5jKG1fYmFja2dyb3VuZElPUXVldWUuZ2V0
KCksIFt0aGlzLCBrZXksIHVwZGF0ZUVudHJ5LCBleGlzdGluZ0VudHJ5LCBjYWNoZVBhdGhDYXB0
dXJlLCBjb21wbGV0aW9uSGFuZGxlcl0gewotICAgICAgICBhdXRvIGhlYWRlckRhdGEgPSBlbmNv
ZGVFbnRyeUhlYWRlcihrZXksIHVwZGF0ZUVudHJ5KTsKLSAgICAgICAgYXV0byBleGlzdGluZ0hl
YWRlckRhdGEgPSBlbmNvZGVFbnRyeUhlYWRlcihrZXksIGV4aXN0aW5nRW50cnkpOworICAgIGRp
c3BhdGNoX2FzeW5jKG1fYmFja2dyb3VuZElPUXVldWUuZ2V0KCksIFt0aGlzLCAmdXBkYXRlLCBj
YWNoZVBhdGhDYXB0dXJlXSB7CisgICAgICAgIGF1dG8gaGVhZGVyRGF0YSA9IGVuY29kZUVudHJ5
SGVhZGVyKHVwZGF0ZS5rZXksIHVwZGF0ZS5lbnRyeSk7CisgICAgICAgIGF1dG8gZXhpc3RpbmdI
ZWFkZXJEYXRhID0gZW5jb2RlRW50cnlIZWFkZXIodXBkYXRlLmtleSwgdXBkYXRlLmV4aXN0aW5n
RW50cnkpOwogCiAgICAgICAgIGJvb2wgcGFnZVJvdW5kZWRIZWFkZXJTaXplQ2hhbmdlZCA9IGRp
c3BhdGNoX2RhdGFfZ2V0X3NpemUoaGVhZGVyRGF0YS5nZXQoKSkgIT0gZGlzcGF0Y2hfZGF0YV9n
ZXRfc2l6ZShleGlzdGluZ0hlYWRlckRhdGEuZ2V0KCkpOwogICAgICAgICBpZiAocGFnZVJvdW5k
ZWRIZWFkZXJTaXplQ2hhbmdlZCkgewogICAgICAgICAgICAgTE9HKE5ldHdvcmtDYWNoZVN0b3Jh
Z2UsICIoTmV0d29ya1Byb2Nlc3MpIHBhZ2Utcm91bmRlZCBoZWFkZXIgc2l6ZSBjaGFuZ2VkLCBz
dG9yaW5nIGZ1bGwgZW50cnkiKTsKLSAgICAgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNo
X2dldF9tYWluX3F1ZXVlKCksIFt0aGlzLCBrZXksIHVwZGF0ZUVudHJ5LCBjb21wbGV0aW9uSGFu
ZGxlcl0gewotICAgICAgICAgICAgICAgIHN0b3JlKGtleSwgdXBkYXRlRW50cnksIGNvbXBsZXRp
b25IYW5kbGVyKTsKKyAgICAgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWlu
X3F1ZXVlKCksIFt0aGlzLCAmdXBkYXRlXSB7CisgICAgICAgICAgICAgICAgc3RvcmUodXBkYXRl
LmtleSwgdXBkYXRlLmVudHJ5LCB1cGRhdGUuY29tcGxldGlvbkhhbmRsZXIpOworCisgICAgICAg
ICAgICAgICAgQVNTRVJUKG1fYWN0aXZlVXBkYXRlT3BlcmF0aW9ucy5jb250YWlucygmdXBkYXRl
KSk7CisgICAgICAgICAgICAgICAgbV9hY3RpdmVVcGRhdGVPcGVyYXRpb25zLnJlbW92ZSgmdXBk
YXRlKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAK
ICAgICAgICAgaW50IGZkOwotICAgICAgICBhdXRvIGNoYW5uZWwgPSBvcGVuRmlsZUZvcktleShr
ZXksIEZpbGVPcGVuVHlwZTo6V3JpdGUsIGNhY2hlUGF0aENhcHR1cmUuc3RyaW5nKCksIGZkKTsK
LSAgICAgICAgZGlzcGF0Y2hfaW9fd3JpdGUoY2hhbm5lbC5nZXQoKSwgMCwgaGVhZGVyRGF0YS5n
ZXQoKSwgZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3RoaXMsIGtleSwgY29tcGxldGlvbkhh
bmRsZXJdKGJvb2wgZG9uZSwgZGlzcGF0Y2hfZGF0YV90LCBpbnQgZXJyb3IpIHsKKyAgICAgICAg
YXV0byBjaGFubmVsID0gb3BlbkZpbGVGb3JLZXkodXBkYXRlLmtleSwgRmlsZU9wZW5UeXBlOjpX
cml0ZSwgY2FjaGVQYXRoQ2FwdHVyZS5zdHJpbmcoKSwgZmQpOworICAgICAgICBkaXNwYXRjaF9p
b193cml0ZShjaGFubmVsLmdldCgpLCAwLCBoZWFkZXJEYXRhLmdldCgpLCBkaXNwYXRjaF9nZXRf
bWFpbl9xdWV1ZSgpLCBbdGhpcywgJnVwZGF0ZV0oYm9vbCBkb25lLCBkaXNwYXRjaF9kYXRhX3Qs
IGludCBlcnJvcikgewogICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChkb25lLCBkb25lKTsKICAg
ICAgICAgICAgIExPRyhOZXR3b3JrQ2FjaGVTdG9yYWdlLCAiKE5ldHdvcmtQcm9jZXNzKSB1cGRh
dGUgY29tcGxldGUgZXJyb3I9JWQiLCBlcnJvcik7CiAKICAgICAgICAgICAgIGlmIChlcnJvcikK
LSAgICAgICAgICAgICAgICByZW1vdmVFbnRyeShrZXkpOwotICAgICAgICAgICAgbV93cml0ZUNh
Y2hlLnJlbW92ZShrZXkuaGFzaCgpKTsKKyAgICAgICAgICAgICAgICByZW1vdmVFbnRyeSh1cGRh
dGUua2V5KTsKKworICAgICAgICAgICAgdXBkYXRlLmNvbXBsZXRpb25IYW5kbGVyKCFlcnJvcik7
CiAKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCFlcnJvcik7CisgICAgICAgICAgICBB
U1NFUlQobV9hY3RpdmVVcGRhdGVPcGVyYXRpb25zLmNvbnRhaW5zKCZ1cGRhdGUpKTsKKyAgICAg
ICAgICAgIG1fYWN0aXZlVXBkYXRlT3BlcmF0aW9ucy5yZW1vdmUoJnVwZGF0ZSk7CiAgICAgICAg
IH0pOwogICAgIH0pOwogfQpAQCAtNTIxLDcgKzU0MCw2IEBAIHZvaWQgTmV0d29ya0NhY2hlU3Rv
cmFnZTo6Y2xlYXIoKQogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgTE9HKE5l
dHdvcmtDYWNoZVN0b3JhZ2UsICIoTmV0d29ya1Byb2Nlc3MpIGNsZWFyaW5nIGNhY2hlIik7CiAK
LSAgICBtX3dyaXRlQ2FjaGUuY2xlYXIoKTsKICAgICBtX2NvbnRlbnRzRmlsdGVyLmNsZWFyKCk7
CiAgICAgbV9hcHByb3hpbWF0ZUVudHJ5Q291bnQgPSAwOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246067</attachid>
            <date>2015-02-04 16:45:33 -0800</date>
            <delta_ts>2015-02-04 16:49:12 -0800</delta_ts>
            <desc>rebased</desc>
            <filename>disk-cache-functions-2.patch</filename>
            <type>text/plain</type>
            <size>16966</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3OTY1MSkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM5IEBACisyMDE1LTAyLTA0ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBBdm9pZCBjb3B5aW5nIHN0ZDo6
ZnVuY3Rpb25zIGFjcm9zcyB0aHJlYWRzIGluIE5ldHdvcmtDYWNoZVN0b3JhZ2UKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTI3MworCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBjdXJyZW50IGFwcHJv
YWNoIGlzIHJpc2t5LiBUaGVyZSBpcyBwb3NzaWJsaXR5IHRoYXQgY2FwdHVyZWQgdmFyaWFibGVz
IGFyZQorICAgICAgICBkZWxldGVkIGluIGFuIHVuZXhwZWN0ZWQgdGhyZWFkLgorCisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya0NhY2hlOjpyZXRyaWV2ZSk6CisKKyAgICAgICAgICAgIFRoZSBjYXB0dXJlIHRy
aWNrIGhlcmUgaXMgbm8gbG9uZ2VyIG5lZWRlZC4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuaDoKKworICAgICAgICAgICAgRm9yIGVhY2ggY2Fj
aGUgb3BlcmF0aW9uIHdlIGNyZWF0ZSBSZXRyaXZlL1N0b3JlL1VwZGF0ZU9wZXJhdGlvbiBvYmpl
Y3Qga2VwdCBhbGl2ZSBieSB0aGUgYWN0aXZlIG9wZXJhdGlvbiBtYXAuCisgICAgICAgICAgICBU
aGlzIG9iamVjdCBjYXB0dXJlcyBhbGwgcGFyYW1ldGVycyBvZiB0aGUgb3BlcmF0aW9uIGluY2x1
ZGluZyB0aGUgbGFtYmRhLiBXaGVuIG9wZXJhdGlvbiBjb21wbGV0ZXMKKyAgICAgICAgICAgIHRo
ZSBvYmplY3QgaXMgcmVtb3ZlZCBmcm9tIHRoZSBtYXAgaW4gdGhlIG1haW4gdGhyZWFkIGVuc3Vy
aW5nIHNhZmUgZGVzdHJ1Y3Rpb24uCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9O
ZXR3b3JrQ2FjaGVTdG9yYWdlQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNo
ZVN0b3JhZ2U6OmRpc3BhdGNoUmV0cmlldmVPcGVyYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrQ2FjaGVTdG9yYWdlOjpkaXNwYXRjaFBlbmRpbmdSZXRyaWV2ZU9wZXJhdGlvbnMpOgor
ICAgICAgICAoV2ViS2l0OjpyZXRyaWV2ZUFjdGl2ZSk6CisKKyAgICAgICAgICAgIEluc3RlYWQg
b2YgbWFpbnRhaW5pbmcgYSBzZXBhcmF0ZSB3cml0ZSBjYWNoZSB3ZSBqdXN0IGxvb2sgdGhyb3Vn
aCB0aGUgYWN0aXZlIHdyaXRlIGFuZCB1cGRhdGUgbWFwcy4KKworICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrQ2FjaGVTdG9yYWdlOjpyZXRyaWV2ZSk6CisKKyAgICAgICAgICAgIFVzZSBmaXhlZCBz
aXplZCBwcmlvcml0eSBhcnJheSByYXRoZXIgdGhhbiBhIGR5bmFtaWMgb25lLiBWZWN0b3I8RGVx
dWU8c3RkOjp1bmlxdWVfcHRyPj4gZG9lc24ndCBxdWl0ZSB3b3JrLgorCisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtDYWNoZVN0b3JhZ2U6OnN0b3JlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a0NhY2hlU3RvcmFnZTo6dXBkYXRlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlU3Rv
cmFnZTo6Y2xlYXIpOgorCiAyMDE1LTAyLTA0ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJA
YXBwbGUuY29tPgogCiAgICAgICAgIFtpT1MgV0syXSBMYXllcnMgdGhhdCBhcmUgY3JlYXRlZCBh
bmQgZGVzdHJveWVkIGluIHRoZSBzYW1lIHRyYW5zYWN0aW9uIHNob3VsZG4ndCBiZSBlbmNvZGVk
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZS5jcHAJKHJldmlzaW9uIDE3OTY1MSkKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNiwz
MSArMjI2LDIyIEBAIHZvaWQgTmV0d29ya0NhY2hlOjpyZXRyaWV2ZShjb25zdCBXZWJDb3IKICAg
ICB9CiAKICAgICBhdXRvIHN0YXJ0VGltZSA9IHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6Om5v
dygpOwotCiAgICAgTmV0d29ya0NhY2hlS2V5IHN0b3JhZ2VLZXkgPSBtYWtlQ2FjaGVLZXkob3Jp
Z2luYWxSZXF1ZXN0KTsKICAgICB1bnNpZ25lZCBwcmlvcml0eSA9IG9yaWdpbmFsUmVxdWVzdC5w
cmlvcml0eSgpOwogCi0gICAgLy8gQ2FwdHVyZWQgZGF0YSBpcyBnb2luZyB0byBiZSBzaHVmZmxl
ZCBhcm91bmQgdGhyZWFkcy4gQXZvaWQgdW5zYWZlIGNvcHlpbmcuCi0gICAgc3RydWN0IENhcHR1
cmUgewotICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Qgb3JpZ2luYWxSZXF1ZXN0Owot
ICAgICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQgKHN0ZDo6dW5pcXVlX3B0cjxFbnRyeT4pPiBjb21w
bGV0aW9uSGFuZGxlcjsKLSAgICB9OwotICAgIC8vIEZJWE1FOiBXaXRoIEMrKzE0IHRoaXMgY291
bGQgdXNlIHVuaXF1ZV9wdHIgYW5kIGluaXRpYWxpemVkIGxhbWJkYSBjYXB0dXJlCi0gICAgYXV0
byBjYXB0dXJlID0gc3RkOjptYWtlX3NoYXJlZDxDYXB0dXJlPihDYXB0dXJlIHsgb3JpZ2luYWxS
ZXF1ZXN0LCBjb21wbGV0aW9uSGFuZGxlciB9KTsKLQotICAgIG1fc3RvcmFnZS0+cmV0cmlldmUo
c3RvcmFnZUtleSwgcHJpb3JpdHksIFt0aGlzLCBjYXB0dXJlLCBzdGFydFRpbWVdKHN0ZDo6dW5p
cXVlX3B0cjxOZXR3b3JrQ2FjaGVTdG9yYWdlOjpFbnRyeT4gZW50cnkpIHsKKyAgICBtX3N0b3Jh
Z2UtPnJldHJpZXZlKHN0b3JhZ2VLZXksIHByaW9yaXR5LCBbdGhpcywgb3JpZ2luYWxSZXF1ZXN0
LCBjb21wbGV0aW9uSGFuZGxlciwgc3RhcnRUaW1lXShzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya0Nh
Y2hlU3RvcmFnZTo6RW50cnk+IGVudHJ5KSB7CiAgICAgICAgIGlmICghZW50cnkpIHsKICAgICAg
ICAgICAgIExPRyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpIG5vdCBmb3VuZCBpbiBz
dG9yYWdlIik7Ci0gICAgICAgICAgICBjYXB0dXJlLT5jb21wbGV0aW9uSGFuZGxlcihudWxscHRy
KTsKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIpOwogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgIGF1dG8gZGVjb2RlZEVudHJ5ID0gZGVj
b2RlU3RvcmFnZUVudHJ5KCplbnRyeSwgY2FwdHVyZS0+b3JpZ2luYWxSZXF1ZXN0KTsKKyAgICAg
ICAgYXV0byBkZWNvZGVkRW50cnkgPSBkZWNvZGVTdG9yYWdlRW50cnkoKmVudHJ5LCBvcmlnaW5h
bFJlcXVlc3QpOwogICAgICAgICBib29sIHN1Y2Nlc3MgPSAhIWRlY29kZWRFbnRyeTsKICNpZiAh
TE9HX0RJU0FCTEVECiAgICAgICAgIGF1dG8gZWxhcHNlZE1TID0gc3RkOjpjaHJvbm86OmR1cmF0
aW9uX2Nhc3Q8c3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcz4oc3RkOjpjaHJvbm86OnN5c3RlbV9j
bG9jazo6bm93KCkgLSBzdGFydFRpbWUpLmNvdW50KCk7CiAjZW5kaWYKLSAgICAgICAgTE9HKE5l
dHdvcmtDYWNoZSwgIihOZXR3b3JrUHJvY2VzcykgcmV0cmlldmUgY29tcGxldGUgc3VjY2Vzcz0l
ZCBwcmlvcml0eT0ldSB0aW1lPSVsbGRtcyIsIHN1Y2Nlc3MsIGNhcHR1cmUtPm9yaWdpbmFsUmVx
dWVzdC5wcmlvcml0eSgpLCBlbGFwc2VkTVMpOwotICAgICAgICBjYXB0dXJlLT5jb21wbGV0aW9u
SGFuZGxlcihXVEY6Om1vdmUoZGVjb2RlZEVudHJ5KSk7CisgICAgICAgIExPRyhOZXR3b3JrQ2Fj
aGUsICIoTmV0d29ya1Byb2Nlc3MpIHJldHJpZXZlIGNvbXBsZXRlIHN1Y2Nlc3M9JWQgcHJpb3Jp
dHk9JXUgdGltZT0lbGxkbXMiLCBzdWNjZXNzLCBvcmlnaW5hbFJlcXVlc3QucHJpb3JpdHkoKSwg
ZWxhcHNlZE1TKTsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGOjptb3ZlKGRlY29kZWRF
bnRyeSkpOwogICAgICAgICByZXR1cm4gc3VjY2VzczsKICAgICB9KTsKIH0KSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGVTdG9yYWdlLmgJKHJldmlzaW9uIDE3OTY1MSkKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzIs
NiArMzIsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXNwb25zZS5oPgogI2luY2x1
ZGUgPHd0Zi9CbG9vbUZpbHRlci5oPgogI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgorI2luY2x1ZGUg
PHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKQEAgLTE1Nyw5ICsxNTgsMjIgQEAgcHJpdmF0ZToKICAgICAgICAgTmV0
d29ya0NhY2hlS2V5IGtleTsKICAgICAgICAgc3RkOjpmdW5jdGlvbjxib29sIChzdGQ6OnVuaXF1
ZV9wdHI8RW50cnk+KT4gY29tcGxldGlvbkhhbmRsZXI7CiAgICAgfTsKLSAgICB2b2lkIGRpc3Bh
dGNoUmV0cmlldmVPcGVyYXRpb24oY29uc3QgUmV0cmlldmVPcGVyYXRpb24mKTsKKyAgICB2b2lk
IGRpc3BhdGNoUmV0cmlldmVPcGVyYXRpb24oc3RkOjp1bmlxdWVfcHRyPGNvbnN0IFJldHJpZXZl
T3BlcmF0aW9uPik7CiAgICAgdm9pZCBkaXNwYXRjaFBlbmRpbmdSZXRyaWV2ZU9wZXJhdGlvbnMo
KTsKIAorICAgIHN0cnVjdCBTdG9yZU9wZXJhdGlvbiB7CisgICAgICAgIE5ldHdvcmtDYWNoZUtl
eSBrZXk7CisgICAgICAgIEVudHJ5IGVudHJ5OworICAgICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQg
KGJvb2wgc3VjY2Vzcyk+IGNvbXBsZXRpb25IYW5kbGVyOworICAgIH07CisKKyAgICBzdHJ1Y3Qg
VXBkYXRlT3BlcmF0aW9uIHsKKyAgICAgICAgTmV0d29ya0NhY2hlS2V5IGtleTsKKyAgICAgICAg
RW50cnkgZW50cnk7CisgICAgICAgIEVudHJ5IGV4aXN0aW5nRW50cnk7CisgICAgICAgIHN0ZDo6
ZnVuY3Rpb248dm9pZCAoYm9vbCBzdWNjZXNzKT4gY29tcGxldGlvbkhhbmRsZXI7CisgICAgfTsK
KwogICAgIGNvbnN0IFN0cmluZyBtX2RpcmVjdG9yeVBhdGg7CiAKICAgICBzaXplX3QgbV9tYXhp
bXVtU2l6ZSB7IHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCkgfTsKQEAgLTE2OCwx
MSArMTgyLDEyIEBAIHByaXZhdGU6CiAgICAgc3RkOjphdG9taWM8c2l6ZV90PiBtX2FwcHJveGlt
YXRlRW50cnlDb3VudCB7IDAgfTsKICAgICBzdGQ6OmF0b21pYzxib29sPiBtX3Nocmlua0luUHJv
Z3Jlc3MgeyBmYWxzZSB9OwogCi0gICAgVmVjdG9yPERlcXVlPFJldHJpZXZlT3BlcmF0aW9uPj4g
bV9wZW5kaW5nUmV0cmlldmVPcGVyYXRpb25zQnlQcmlvcml0eTsKLSAgICB1bnNpZ25lZCBtX2Fj
dGl2ZVJldHJpZXZlT3BlcmF0aW9uQ291bnQgeyAwIH07CisgICAgc3RhdGljIGNvbnN0IGludCBt
YXhpbXVtUmV0cmlldmVQcmlvcml0eSA9IDQ7CisgICAgRGVxdWU8c3RkOjp1bmlxdWVfcHRyPGNv
bnN0IFJldHJpZXZlT3BlcmF0aW9uPj4gbV9wZW5kaW5nUmV0cmlldmVPcGVyYXRpb25zQnlQcmlv
cml0eVttYXhpbXVtUmV0cmlldmVQcmlvcml0eSArIDFdOwogCi0gICAgdHlwZWRlZiBzdGQ6OnBh
aXI8TmV0d29ya0NhY2hlS2V5LCBFbnRyeT4gS2V5RW50cnlQYWlyOwotICAgIEhhc2hNYXA8TmV0
d29ya0NhY2hlS2V5OjpIYXNoVHlwZSwgc3RkOjpzaGFyZWRfcHRyPEtleUVudHJ5UGFpcj4sIEFs
cmVhZHlIYXNoZWQ+IG1fd3JpdGVDYWNoZTsKKyAgICBIYXNoU2V0PHN0ZDo6dW5pcXVlX3B0cjxj
b25zdCBSZXRyaWV2ZU9wZXJhdGlvbj4+IG1fYWN0aXZlUmV0cmlldmVPcGVyYXRpb25zOworICAg
IEhhc2hTZXQ8c3RkOjp1bmlxdWVfcHRyPGNvbnN0IFN0b3JlT3BlcmF0aW9uPj4gbV9hY3RpdmVT
dG9yZU9wZXJhdGlvbnM7CisgICAgSGFzaFNldDxzdGQ6OnVuaXF1ZV9wdHI8Y29uc3QgVXBkYXRl
T3BlcmF0aW9uPj4gbV9hY3RpdmVVcGRhdGVPcGVyYXRpb25zOwogCiAjaWYgUExBVEZPUk0oQ09D
T0EpCiAgICAgbXV0YWJsZSBEaXNwYXRjaFB0cjxkaXNwYXRjaF9xdWV1ZV90PiBtX2lvUXVldWU7
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVT
dG9yYWdlQ29jb2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZUNvY29hLm1tCShyZXZpc2lvbiAxNzk2NTEpCisr
KyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdl
Q29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTM1MiwyOSArMzUyLDMwIEBAIHZvaWQgTmV0d29y
a0NhY2hlU3RvcmFnZTo6cmVtb3ZlRW50cnkoY28KICAgICB9KTsKIH0KIAotdm9pZCBOZXR3b3Jr
Q2FjaGVTdG9yYWdlOjpkaXNwYXRjaFJldHJpZXZlT3BlcmF0aW9uKGNvbnN0IFJldHJpZXZlT3Bl
cmF0aW9uJiByZXRyaWV2ZSkKK3ZvaWQgTmV0d29ya0NhY2hlU3RvcmFnZTo6ZGlzcGF0Y2hSZXRy
aWV2ZU9wZXJhdGlvbihzdGQ6OnVuaXF1ZV9wdHI8Y29uc3QgUmV0cmlldmVPcGVyYXRpb24+IHJl
dHJpZXZlT3BlcmF0aW9uKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKLSAg
ICArK21fYWN0aXZlUmV0cmlldmVPcGVyYXRpb25Db3VudDsKKyAgICBhdXRvJiByZXRyaWV2ZSA9
ICpyZXRyaWV2ZU9wZXJhdGlvbjsKKyAgICBtX2FjdGl2ZVJldHJpZXZlT3BlcmF0aW9ucy5hZGQo
V1RGOjptb3ZlKHJldHJpZXZlT3BlcmF0aW9uKSk7CiAKICAgICBTdHJpbmdDYXB0dXJlIGNhY2hl
UGF0aENhcHR1cmUobV9kaXJlY3RvcnlQYXRoKTsKLSAgICBkaXNwYXRjaF9hc3luYyhtX2lvUXVl
dWUuZ2V0KCksIFt0aGlzLCByZXRyaWV2ZSwgY2FjaGVQYXRoQ2FwdHVyZV0geworICAgIGRpc3Bh
dGNoX2FzeW5jKG1faW9RdWV1ZS5nZXQoKSwgW3RoaXMsICZyZXRyaWV2ZSwgY2FjaGVQYXRoQ2Fw
dHVyZV0gewogICAgICAgICBpbnQgZmQ7CiAgICAgICAgIGF1dG8gY2hhbm5lbCA9IG9wZW5GaWxl
Rm9yS2V5KHJldHJpZXZlLmtleSwgRmlsZU9wZW5UeXBlOjpSZWFkLCBjYWNoZVBhdGhDYXB0dXJl
LnN0cmluZygpLCBmZCk7CiAKICAgICAgICAgYm9vbCBkaWRDYWxsQ29tcGxldGlvbkhhbmRsZXIg
PSBmYWxzZTsKLSAgICAgICAgZGlzcGF0Y2hfaW9fcmVhZChjaGFubmVsLmdldCgpLCAwLCBzdGQ6
Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpLCBkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgp
LCBbdGhpcywgZmQsIHJldHJpZXZlLCBkaWRDYWxsQ29tcGxldGlvbkhhbmRsZXJdKGJvb2wgZG9u
ZSwgZGlzcGF0Y2hfZGF0YV90IGZpbGVEYXRhLCBpbnQgZXJyb3IpIG11dGFibGUgeworICAgICAg
ICBkaXNwYXRjaF9pb19yZWFkKGNoYW5uZWwuZ2V0KCksIDAsIHN0ZDo6bnVtZXJpY19saW1pdHM8
c2l6ZV90Pjo6bWF4KCksIGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFt0aGlzLCBmZCwgJnJl
dHJpZXZlLCBkaWRDYWxsQ29tcGxldGlvbkhhbmRsZXJdKGJvb2wgZG9uZSwgZGlzcGF0Y2hfZGF0
YV90IGZpbGVEYXRhLCBpbnQgZXJyb3IpIG11dGFibGUgewogICAgICAgICAgICAgaWYgKGRvbmUp
IHsKLSAgICAgICAgICAgICAgICBBU1NFUlQobV9hY3RpdmVSZXRyaWV2ZU9wZXJhdGlvbkNvdW50
KTsKLSAgICAgICAgICAgICAgICAtLW1fYWN0aXZlUmV0cmlldmVPcGVyYXRpb25Db3VudDsKLSAg
ICAgICAgICAgICAgICBkaXNwYXRjaFBlbmRpbmdSZXRyaWV2ZU9wZXJhdGlvbnMoKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGlmIChkb25lKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFk
aWRDYWxsQ29tcGxldGlvbkhhbmRsZXIpCi0gICAgICAgICAgICAgICAgICAgIHJldHJpZXZlLmNv
bXBsZXRpb25IYW5kbGVyKG51bGxwdHIpOwogICAgICAgICAgICAgICAgIGlmIChlcnJvcikKICAg
ICAgICAgICAgICAgICAgICAgcmVtb3ZlRW50cnkocmV0cmlldmUua2V5KTsKKworICAgICAgICAg
ICAgICAgIGlmICghZGlkQ2FsbENvbXBsZXRpb25IYW5kbGVyKQorICAgICAgICAgICAgICAgICAg
ICByZXRyaWV2ZS5jb21wbGV0aW9uSGFuZGxlcihudWxscHRyKTsKKworICAgICAgICAgICAgICAg
IEFTU0VSVChtX2FjdGl2ZVJldHJpZXZlT3BlcmF0aW9ucy5jb250YWlucygmcmV0cmlldmUpKTsK
KyAgICAgICAgICAgICAgICBtX2FjdGl2ZVJldHJpZXZlT3BlcmF0aW9ucy5yZW1vdmUoJnJldHJp
ZXZlKTsKKyAgICAgICAgICAgICAgICBkaXNwYXRjaFBlbmRpbmdSZXRyaWV2ZU9wZXJhdGlvbnMo
KTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBB
U1NFUlQoIWRpZENhbGxDb21wbGV0aW9uSGFuZGxlcik7IC8vIFdlIGFyZSByZXF1ZXN0aW5nIG1h
eGltdW0gc2l6ZWQgY2h1bmsgc28gd2Ugc2hvdWxkIG5ldmVyIGdldCBjYWxsZWQgbW9yZSB0aGFu
IG9uY2Ugd2l0aCBkYXRhLgpAQCAtMzkyLDEwICszOTMsMTAgQEAgdm9pZCBOZXR3b3JrQ2FjaGVT
dG9yYWdlOjpkaXNwYXRjaFBlbmRpbgogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7
CiAKLSAgICBjb25zdCB1bnNpZ25lZCBtYXhpbXVtQWN0aXZlUmV0cmlldmVPcGVyYXRpb25Db3Vu
dCA9IDU7CisgICAgY29uc3QgaW50IG1heGltdW1BY3RpdmVSZXRyaWV2ZU9wZXJhdGlvbkNvdW50
ID0gNTsKIAotICAgIGZvciAoaW50IHByaW9yaXR5ID0gbV9wZW5kaW5nUmV0cmlldmVPcGVyYXRp
b25zQnlQcmlvcml0eS5zaXplKCkgLSAxOyBwcmlvcml0eSA+PSAwOyAtLXByaW9yaXR5KSB7Ci0g
ICAgICAgIGlmIChtX2FjdGl2ZVJldHJpZXZlT3BlcmF0aW9uQ291bnQgPiBtYXhpbXVtQWN0aXZl
UmV0cmlldmVPcGVyYXRpb25Db3VudCkgeworICAgIGZvciAoaW50IHByaW9yaXR5ID0gbWF4aW11
bVJldHJpZXZlUHJpb3JpdHk7IHByaW9yaXR5ID49IDA7IC0tcHJpb3JpdHkpIHsKKyAgICAgICAg
aWYgKG1fYWN0aXZlUmV0cmlldmVPcGVyYXRpb25zLnNpemUoKSA+IG1heGltdW1BY3RpdmVSZXRy
aWV2ZU9wZXJhdGlvbkNvdW50KSB7CiAgICAgICAgICAgICBMT0coTmV0d29ya0NhY2hlU3RvcmFn
ZSwgIihOZXR3b3JrUHJvY2VzcykgbGltaXRpbmcgcGFyYWxsZWwgcmV0cmlldmVzIik7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTQwNiwzMCArNDA3LDM4IEBAIHZvaWQgTmV0
d29ya0NhY2hlU3RvcmFnZTo6ZGlzcGF0Y2hQZW5kaW4KICAgICB9CiB9CiAKK3RlbXBsYXRlIDxj
bGFzcyBUPiBib29sIHJldHJpZXZlQWN0aXZlKGNvbnN0IFQmIG9wZXJhdGlvbnMsIGNvbnN0IE5l
dHdvcmtDYWNoZUtleSYga2V5LCBzdGQ6OmZ1bmN0aW9uPGJvb2wgKHN0ZDo6dW5pcXVlX3B0cjxO
ZXR3b3JrQ2FjaGVTdG9yYWdlOjpFbnRyeT4pPiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAg
Zm9yIChhdXRvJiBvcGVyYXRpb24gOiBvcGVyYXRpb25zKSB7CisgICAgICAgIGlmIChvcGVyYXRp
b24tPmtleSA9PSBrZXkpIHsKKyAgICAgICAgICAgIExPRyhOZXR3b3JrQ2FjaGVTdG9yYWdlLCAi
KE5ldHdvcmtQcm9jZXNzKSBmb3VuZCBzdG9yZSBvcGVyYXRpb24gaW4gcHJvZ3Jlc3MiKTsKKyAg
ICAgICAgICAgIGF1dG8gZW50cnkgPSBvcGVyYXRpb24tPmVudHJ5OworICAgICAgICAgICAgZGlz
cGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW2VudHJ5LCBjb21wbGV0aW9u
SGFuZGxlcl0geworICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHN0ZDo6bWFrZV91
bmlxdWU8TmV0d29ya0NhY2hlU3RvcmFnZTo6RW50cnk+KGVudHJ5KSk7CisgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVy
biBmYWxzZTsKK30KKwogdm9pZCBOZXR3b3JrQ2FjaGVTdG9yYWdlOjpyZXRyaWV2ZShjb25zdCBO
ZXR3b3JrQ2FjaGVLZXkmIGtleSwgdW5zaWduZWQgcHJpb3JpdHksIHN0ZDo6ZnVuY3Rpb248Ym9v
bCAoc3RkOjp1bmlxdWVfcHRyPEVudHJ5Pik+IGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFT
U0VSVChSdW5Mb29wOjppc01haW4oKSk7CisgICAgQVNTRVJUKHByaW9yaXR5IDw9IG1heGltdW1S
ZXRyaWV2ZVByaW9yaXR5KTsKIAogICAgIGlmICghbV9jb250ZW50c0ZpbHRlci5tYXlDb250YWlu
KGtleS5oYXNoKCkpKSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQorICAgIC8vIFNlZSBpZiB3ZSBoYXZlIHRoZSByZXNvdXJjZSBp
biBtZW1vcnkuCisgICAgaWYgKHJldHJpZXZlQWN0aXZlKG1fYWN0aXZlU3RvcmVPcGVyYXRpb25z
LCBrZXksIGNvbXBsZXRpb25IYW5kbGVyKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChyZXRy
aWV2ZUFjdGl2ZShtX2FjdGl2ZVVwZGF0ZU9wZXJhdGlvbnMsIGtleSwgY29tcGxldGlvbkhhbmRs
ZXIpKQorICAgICAgICByZXR1cm47CiAKLSAgICAvLyBXcml0ZSBjYWNoZSBpcyBhIHRlbXBvcmFy
eSBtZW1vcnkgY2FjaGUgdXNlZCB0byByZXNwb25kIHRvIHJlcXVlc3RzIHdoaWxlIGEgd3JpdGUg
aXMgcGVuZGluZy4KLSAgICBpZiAoYXV0byBrZXlFbnRyeVBhaXIgPSBtX3dyaXRlQ2FjaGUuZ2V0
KGtleS5oYXNoKCkpKSB7Ci0gICAgICAgIGlmIChrZXlFbnRyeVBhaXItPmZpcnN0ID09IGtleSkg
ewotICAgICAgICAgICAgTE9HKE5ldHdvcmtDYWNoZVN0b3JhZ2UsICIoTmV0d29ya1Byb2Nlc3Mp
IGZvdW5kIGZyb20gdGhlIHdyaXRlIGNhY2hlIik7Ci0gICAgICAgICAgICBkaXNwYXRjaF9hc3lu
YyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBba2V5RW50cnlQYWlyLCBjb21wbGV0aW9uSGFu
ZGxlcl0gewotICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHN0ZDo6bWFrZV91bmlx
dWU8RW50cnk+KGtleUVudHJ5UGFpci0+c2Vjb25kKSk7Ci0gICAgICAgICAgICB9KTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChtX3BlbmRpbmdSZXRy
aWV2ZU9wZXJhdGlvbnNCeVByaW9yaXR5LnNpemUoKSA8IHByaW9yaXR5ICsgMSkKLSAgICAgICAg
bV9wZW5kaW5nUmV0cmlldmVPcGVyYXRpb25zQnlQcmlvcml0eS5ncm93KHByaW9yaXR5ICsgMSk7
Ci0gICAgbV9wZW5kaW5nUmV0cmlldmVPcGVyYXRpb25zQnlQcmlvcml0eVtwcmlvcml0eV0uYXBw
ZW5kKFJldHJpZXZlT3BlcmF0aW9uIHsga2V5LCBjb21wbGV0aW9uSGFuZGxlciB9KTsKLQorICAg
IC8vIEZldGNoIGZyb20gZGlzay4KKyAgICBtX3BlbmRpbmdSZXRyaWV2ZU9wZXJhdGlvbnNCeVBy
aW9yaXR5W3ByaW9yaXR5XS5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxSZXRyaWV2ZU9wZXJhdGlv
bj4oUmV0cmlldmVPcGVyYXRpb24geyBrZXksIGNvbXBsZXRpb25IYW5kbGVyIH0pKTsKICAgICBk
aXNwYXRjaFBlbmRpbmdSZXRyaWV2ZU9wZXJhdGlvbnMoKTsKIH0KIApAQCAtNDQwLDI2ICs0NDks
MjkgQEAgdm9pZCBOZXR3b3JrQ2FjaGVTdG9yYWdlOjpzdG9yZShjb25zdCBOZQogICAgIG1fY29u
dGVudHNGaWx0ZXIuYWRkKGtleS5oYXNoKCkpOwogICAgICsrbV9hcHByb3hpbWF0ZUVudHJ5Q291
bnQ7CiAKLSAgICBtX3dyaXRlQ2FjaGUuc2V0KGtleS5oYXNoKCksIHN0ZDo6bWFrZV9zaGFyZWQ8
S2V5RW50cnlQYWlyPihrZXksIGVudHJ5KSk7CisgICAgYXV0byBzdG9yZU9wZXJhdGlvbiA9IHN0
ZDo6bWFrZV91bmlxdWU8U3RvcmVPcGVyYXRpb24+KFN0b3JlT3BlcmF0aW9uIHsga2V5LCBlbnRy
eSwgY29tcGxldGlvbkhhbmRsZXIgfSk7CisgICAgYXV0byYgc3RvcmUgPSAqc3RvcmVPcGVyYXRp
b247CisgICAgbV9hY3RpdmVTdG9yZU9wZXJhdGlvbnMuYWRkKFdURjo6bW92ZShzdG9yZU9wZXJh
dGlvbikpOwogCiAgICAgU3RyaW5nQ2FwdHVyZSBjYWNoZVBhdGhDYXB0dXJlKG1fZGlyZWN0b3J5
UGF0aCk7Ci0gICAgZGlzcGF0Y2hfYXN5bmMobV9iYWNrZ3JvdW5kSU9RdWV1ZS5nZXQoKSwgW3Ro
aXMsIGtleSwgZW50cnksIGNhY2hlUGF0aENhcHR1cmUsIGNvbXBsZXRpb25IYW5kbGVyXSB7Ci0g
ICAgICAgIGF1dG8gZGF0YSA9IGVuY29kZUVudHJ5KGtleSwgZW50cnkpOworICAgIGRpc3BhdGNo
X2FzeW5jKG1fYmFja2dyb3VuZElPUXVldWUuZ2V0KCksIFt0aGlzLCAmc3RvcmUsIGNhY2hlUGF0
aENhcHR1cmVdIHsKKyAgICAgICAgYXV0byBkYXRhID0gZW5jb2RlRW50cnkoc3RvcmUua2V5LCBz
dG9yZS5lbnRyeSk7CiAKICAgICAgICAgaW50IGZkOwotICAgICAgICBhdXRvIGNoYW5uZWwgPSBv
cGVuRmlsZUZvcktleShrZXksIEZpbGVPcGVuVHlwZTo6Q3JlYXRlLCBjYWNoZVBhdGhDYXB0dXJl
LnN0cmluZygpLCBmZCk7Ci0gICAgICAgIGRpc3BhdGNoX2lvX3dyaXRlKGNoYW5uZWwuZ2V0KCks
IDAsIGRhdGEuZ2V0KCksIGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFt0aGlzLCBrZXksIGNv
bXBsZXRpb25IYW5kbGVyXShib29sIGRvbmUsIGRpc3BhdGNoX2RhdGFfdCwgaW50IGVycm9yKSB7
CisgICAgICAgIGF1dG8gY2hhbm5lbCA9IG9wZW5GaWxlRm9yS2V5KHN0b3JlLmtleSwgRmlsZU9w
ZW5UeXBlOjpDcmVhdGUsIGNhY2hlUGF0aENhcHR1cmUuc3RyaW5nKCksIGZkKTsKKyAgICAgICAg
ZGlzcGF0Y2hfaW9fd3JpdGUoY2hhbm5lbC5nZXQoKSwgMCwgZGF0YS5nZXQoKSwgZGlzcGF0Y2hf
Z2V0X21haW5fcXVldWUoKSwgW3RoaXMsICZzdG9yZV0oYm9vbCBkb25lLCBkaXNwYXRjaF9kYXRh
X3QsIGludCBlcnJvcikgewogICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChkb25lLCBkb25lKTsK
ICAgICAgICAgICAgIExPRyhOZXR3b3JrQ2FjaGVTdG9yYWdlLCAiKE5ldHdvcmtQcm9jZXNzKSB3
cml0ZSBjb21wbGV0ZSBlcnJvcj0lZCIsIGVycm9yKTsKICAgICAgICAgICAgIGlmIChlcnJvcikg
ewotICAgICAgICAgICAgICAgIGlmIChtX2NvbnRlbnRzRmlsdGVyLm1heUNvbnRhaW4oa2V5Lmhh
c2goKSkpCi0gICAgICAgICAgICAgICAgICAgIG1fY29udGVudHNGaWx0ZXIucmVtb3ZlKGtleS5o
YXNoKCkpOworICAgICAgICAgICAgICAgIGlmIChtX2NvbnRlbnRzRmlsdGVyLm1heUNvbnRhaW4o
c3RvcmUua2V5Lmhhc2goKSkpCisgICAgICAgICAgICAgICAgICAgIG1fY29udGVudHNGaWx0ZXIu
cmVtb3ZlKHN0b3JlLmtleS5oYXNoKCkpOwogICAgICAgICAgICAgICAgIGlmIChtX2FwcHJveGlt
YXRlRW50cnlDb3VudCkKICAgICAgICAgICAgICAgICAgICAgLS1tX2FwcHJveGltYXRlRW50cnlD
b3VudDsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fd3JpdGVDYWNoZS5yZW1vdmUoa2V5
Lmhhc2goKSk7CiAKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCFlcnJvcik7CisgICAg
ICAgICAgICBzdG9yZS5jb21wbGV0aW9uSGFuZGxlcighZXJyb3IpOworCisgICAgICAgICAgICBt
X2FjdGl2ZVN0b3JlT3BlcmF0aW9ucy5yZW1vdmUoJnN0b3JlKTsKICAgICAgICAgfSk7CiAgICAg
fSk7CiAKQEAgLTQ3NiwzNCArNDg4LDQxIEBAIHZvaWQgTmV0d29ya0NhY2hlU3RvcmFnZTo6dXBk
YXRlKGNvbnN0IE4KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fd3JpdGVDYWNoZS5z
ZXQoa2V5Lmhhc2goKSwgc3RkOjptYWtlX3NoYXJlZDxLZXlFbnRyeVBhaXI+KGtleSwgdXBkYXRl
RW50cnkpKTsKKyAgICBhdXRvIHVwZGF0ZU9wZXJhdGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8VXBk
YXRlT3BlcmF0aW9uPihVcGRhdGVPcGVyYXRpb24geyBrZXksIHVwZGF0ZUVudHJ5LCBleGlzdGlu
Z0VudHJ5LCBjb21wbGV0aW9uSGFuZGxlciB9KTsKKyAgICBhdXRvJiB1cGRhdGUgPSAqdXBkYXRl
T3BlcmF0aW9uOworICAgIG1fYWN0aXZlVXBkYXRlT3BlcmF0aW9ucy5hZGQoV1RGOjptb3ZlKHVw
ZGF0ZU9wZXJhdGlvbikpOwogCiAgICAgLy8gVHJ5IHRvIHVwZGF0ZSB0aGUgaGVhZGVyIG9mIGFu
IGV4aXN0aW5nIGVudHJ5LgogICAgIFN0cmluZ0NhcHR1cmUgY2FjaGVQYXRoQ2FwdHVyZShtX2Rp
cmVjdG9yeVBhdGgpOwotICAgIGRpc3BhdGNoX2FzeW5jKG1fYmFja2dyb3VuZElPUXVldWUuZ2V0
KCksIFt0aGlzLCBrZXksIHVwZGF0ZUVudHJ5LCBleGlzdGluZ0VudHJ5LCBjYWNoZVBhdGhDYXB0
dXJlLCBjb21wbGV0aW9uSGFuZGxlcl0gewotICAgICAgICBhdXRvIGhlYWRlckRhdGEgPSBlbmNv
ZGVFbnRyeUhlYWRlcihrZXksIHVwZGF0ZUVudHJ5KTsKLSAgICAgICAgYXV0byBleGlzdGluZ0hl
YWRlckRhdGEgPSBlbmNvZGVFbnRyeUhlYWRlcihrZXksIGV4aXN0aW5nRW50cnkpOworICAgIGRp
c3BhdGNoX2FzeW5jKG1fYmFja2dyb3VuZElPUXVldWUuZ2V0KCksIFt0aGlzLCAmdXBkYXRlLCBj
YWNoZVBhdGhDYXB0dXJlXSB7CisgICAgICAgIGF1dG8gaGVhZGVyRGF0YSA9IGVuY29kZUVudHJ5
SGVhZGVyKHVwZGF0ZS5rZXksIHVwZGF0ZS5lbnRyeSk7CisgICAgICAgIGF1dG8gZXhpc3RpbmdI
ZWFkZXJEYXRhID0gZW5jb2RlRW50cnlIZWFkZXIodXBkYXRlLmtleSwgdXBkYXRlLmV4aXN0aW5n
RW50cnkpOwogCiAgICAgICAgIGJvb2wgcGFnZVJvdW5kZWRIZWFkZXJTaXplQ2hhbmdlZCA9IGRp
c3BhdGNoX2RhdGFfZ2V0X3NpemUoaGVhZGVyRGF0YS5nZXQoKSkgIT0gZGlzcGF0Y2hfZGF0YV9n
ZXRfc2l6ZShleGlzdGluZ0hlYWRlckRhdGEuZ2V0KCkpOwogICAgICAgICBpZiAocGFnZVJvdW5k
ZWRIZWFkZXJTaXplQ2hhbmdlZCkgewogICAgICAgICAgICAgTE9HKE5ldHdvcmtDYWNoZVN0b3Jh
Z2UsICIoTmV0d29ya1Byb2Nlc3MpIHBhZ2Utcm91bmRlZCBoZWFkZXIgc2l6ZSBjaGFuZ2VkLCBz
dG9yaW5nIGZ1bGwgZW50cnkiKTsKLSAgICAgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNo
X2dldF9tYWluX3F1ZXVlKCksIFt0aGlzLCBrZXksIHVwZGF0ZUVudHJ5LCBjb21wbGV0aW9uSGFu
ZGxlcl0gewotICAgICAgICAgICAgICAgIHN0b3JlKGtleSwgdXBkYXRlRW50cnksIGNvbXBsZXRp
b25IYW5kbGVyKTsKKyAgICAgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWlu
X3F1ZXVlKCksIFt0aGlzLCAmdXBkYXRlXSB7CisgICAgICAgICAgICAgICAgc3RvcmUodXBkYXRl
LmtleSwgdXBkYXRlLmVudHJ5LCB1cGRhdGUuY29tcGxldGlvbkhhbmRsZXIpOworCisgICAgICAg
ICAgICAgICAgQVNTRVJUKG1fYWN0aXZlVXBkYXRlT3BlcmF0aW9ucy5jb250YWlucygmdXBkYXRl
KSk7CisgICAgICAgICAgICAgICAgbV9hY3RpdmVVcGRhdGVPcGVyYXRpb25zLnJlbW92ZSgmdXBk
YXRlKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAK
ICAgICAgICAgaW50IGZkOwotICAgICAgICBhdXRvIGNoYW5uZWwgPSBvcGVuRmlsZUZvcktleShr
ZXksIEZpbGVPcGVuVHlwZTo6V3JpdGUsIGNhY2hlUGF0aENhcHR1cmUuc3RyaW5nKCksIGZkKTsK
LSAgICAgICAgZGlzcGF0Y2hfaW9fd3JpdGUoY2hhbm5lbC5nZXQoKSwgMCwgaGVhZGVyRGF0YS5n
ZXQoKSwgZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3RoaXMsIGtleSwgY29tcGxldGlvbkhh
bmRsZXJdKGJvb2wgZG9uZSwgZGlzcGF0Y2hfZGF0YV90LCBpbnQgZXJyb3IpIHsKKyAgICAgICAg
YXV0byBjaGFubmVsID0gb3BlbkZpbGVGb3JLZXkodXBkYXRlLmtleSwgRmlsZU9wZW5UeXBlOjpX
cml0ZSwgY2FjaGVQYXRoQ2FwdHVyZS5zdHJpbmcoKSwgZmQpOworICAgICAgICBkaXNwYXRjaF9p
b193cml0ZShjaGFubmVsLmdldCgpLCAwLCBoZWFkZXJEYXRhLmdldCgpLCBkaXNwYXRjaF9nZXRf
bWFpbl9xdWV1ZSgpLCBbdGhpcywgJnVwZGF0ZV0oYm9vbCBkb25lLCBkaXNwYXRjaF9kYXRhX3Qs
IGludCBlcnJvcikgewogICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChkb25lLCBkb25lKTsKICAg
ICAgICAgICAgIExPRyhOZXR3b3JrQ2FjaGVTdG9yYWdlLCAiKE5ldHdvcmtQcm9jZXNzKSB1cGRh
dGUgY29tcGxldGUgZXJyb3I9JWQiLCBlcnJvcik7CiAKICAgICAgICAgICAgIGlmIChlcnJvcikK
LSAgICAgICAgICAgICAgICByZW1vdmVFbnRyeShrZXkpOwotICAgICAgICAgICAgbV93cml0ZUNh
Y2hlLnJlbW92ZShrZXkuaGFzaCgpKTsKKyAgICAgICAgICAgICAgICByZW1vdmVFbnRyeSh1cGRh
dGUua2V5KTsKKworICAgICAgICAgICAgdXBkYXRlLmNvbXBsZXRpb25IYW5kbGVyKCFlcnJvcik7
CiAKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCFlcnJvcik7CisgICAgICAgICAgICBB
U1NFUlQobV9hY3RpdmVVcGRhdGVPcGVyYXRpb25zLmNvbnRhaW5zKCZ1cGRhdGUpKTsKKyAgICAg
ICAgICAgIG1fYWN0aXZlVXBkYXRlT3BlcmF0aW9ucy5yZW1vdmUoJnVwZGF0ZSk7CiAgICAgICAg
IH0pOwogICAgIH0pOwogfQpAQCAtNTIxLDcgKzU0MCw2IEBAIHZvaWQgTmV0d29ya0NhY2hlU3Rv
cmFnZTo6Y2xlYXIoKQogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgTE9HKE5l
dHdvcmtDYWNoZVN0b3JhZ2UsICIoTmV0d29ya1Byb2Nlc3MpIGNsZWFyaW5nIGNhY2hlIik7CiAK
LSAgICBtX3dyaXRlQ2FjaGUuY2xlYXIoKTsKICAgICBtX2NvbnRlbnRzRmlsdGVyLmNsZWFyKCk7
CiAgICAgbV9hcHByb3hpbWF0ZUVudHJ5Q291bnQgPSAwOwogCg==
</data>
<flag name="review"
          id="271007"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
      

    </bug>

</bugzilla>