<?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>143052</bug_id>
          
          <creation_ts>2015-03-25 10:27:46 -0700</creation_ts>
          <short_desc>Separate entry decoding from validation</short_desc>
          <delta_ts>2015-03-25 14:21:51 -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>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>cdumez</cc>
    
    <cc>commit-queue</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1079975</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-03-25 10:27:46 -0700</bug_when>
    <thetext>Factor encoding and decoding related code to a class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079981</commentid>
    <comment_count>1</comment_count>
      <attachid>249412</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-03-25 10:42:30 -0700</bug_when>
    <thetext>Created attachment 249412
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079983</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-25 10:44:30 -0700</bug_when>
    <thetext>Attachment 249412 did not pass style-queue:


ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCache.cpp:40:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheEntry.cpp:30:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheEntry.cpp:31:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 3 in 11 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>1079985</commentid>
    <comment_count>3</comment_count>
      <attachid>249413</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-03-25 10:49:43 -0700</bug_when>
    <thetext>Created attachment 249413
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080020</commentid>
    <comment_count>4</comment_count>
      <attachid>249413</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-03-25 13:21:31 -0700</bug_when>
    <thetext>Comment on attachment 249413
patch

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

r=me with comments.

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCache.cpp:115
&gt; +    varyValue.split(&apos;,&apos;, false, varyingHeaderNames);

Could you add an inline comment to indicate for /false/ stands for? It is really not clear unfortunately (I hate those bool arguments).

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCache.cpp:120
&gt; +        varyingRequestHeaders.append(std::make_pair(headerName, headerValue));

Probably not worth it but we could reserve capacity for varyingRequestHeaders.

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCache.cpp:248
&gt; +        return useDecision &lt;= UseDecision::Validate;

nit: I think (useDecision == Use || useDecision == Validate) would be more readable. It is only 2 values to check so it is not too long.

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheEntry.cpp:43
&gt; +Entry::Entry(const Key&amp; key, const WebCore::ResourceResponse&amp; response, RefPtr&lt;WebCore::SharedBuffer&gt;&amp;&amp; buffer, Vector&lt;std::pair&lt;String, String&gt;&gt; varyingRequestHeaders)

We probably want to pass varyingRequestHeaders as a const reference.

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheEntry.cpp:81
&gt; +    std::unique_ptr&lt;Entry&gt; entry(new Entry(storageEntry));

nit: I still prefer make_unique() and auto for the variable type.

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheEntry.cpp:91
&gt; +    if (!decoder.decode(hasVaryingRequestHeaders))

We may want to add a LOG() for this.

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheEntry.cpp:95
&gt; +        if (!decoder.decode(entry-&gt;m_varyingRequestHeaders))

We may want to add a LOG() for this.

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheEntry.cpp:149
&gt; +bool Entry::asJSON(StringBuilder&amp; json)

We never return false so why bother returning a boolean? This way we don&apos;t need error handling as the call site.

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheEntry.cpp:151
&gt; +    json.append(&quot;{\n&quot;);

Most of those should use appendLiteral(), not append().

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheEntry.cpp:176
&gt; +    json.append(&quot;}&quot;);

append(&apos;}&apos;) is better.

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheEntry.h:56
&gt; +    const Vector&lt;std::pair&lt;String, String&gt;&gt; varyingRequestHeaders() const { return m_varyingRequestHeaders; }

const Vector&lt;std::pair&lt;String, String&gt;&gt;&amp; ? (missing ref)

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheEntry.h:68
&gt; +    bool asJSON(StringBuilder&amp; json);

Looks like this should be a const method?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080021</commentid>
    <comment_count>5</comment_count>
      <attachid>249413</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-03-25 13:24:05 -0700</bug_when>
    <thetext>Comment on attachment 249413
patch

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

&gt;&gt; Source/WebKit2/NetworkProcess/cache/NetworkCache.cpp:248
&gt;&gt; +        return useDecision &lt;= UseDecision::Validate;
&gt; 
&gt; nit: I think (useDecision == Use || useDecision == Validate) would be more readable. It is only 2 values to check so it is not too long.

Actually, returning false here will cause the Storage to remove the entry. We probably only want to do this if the useDecision is UseDecision::NoDueToDecodeFailure?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080023</commentid>
    <comment_count>6</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-03-25 13:35:47 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Comment on attachment 249413 [details]
&gt; nit: I still prefer make_unique() and auto for the variable type.

Me too, unfortunately make_unique does not work with private constructor and I think that is a preferable feature here.

&gt; We never return false so why bother returning a boolean? This way we don&apos;t
&gt; need error handling as the call site.

Good point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080038</commentid>
    <comment_count>7</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-03-25 14:21:51 -0700</bug_when>
    <thetext>https://trac.webkit.org/r181970</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>249412</attachid>
            <date>2015-03-25 10:42:30 -0700</date>
            <delta_ts>2015-03-25 10:49:43 -0700</delta_ts>
            <desc>patch</desc>
            <filename>disk-cache-validation-factor-3.patch</filename>
            <type>text/plain</type>
            <size>44289</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MTk2MykKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU3IEBACisyMDE1LTAzLTI1ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBTZXBhcmF0ZSBlbnRyeSBkZWNv
ZGluZyBmcm9tIHZhbGlkYXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE0MzA1MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIE1ha2UgTmV0d29ya0NhY2hlOjpDYWNoZSBhIGNsYXNzIGFuZCBtb3ZlIGl0
IHRvIGEgZmlsZSBvZiBpdHMgb3duLgorICAgICAgICBNb3ZlIHRoZSBlbmNvZGluZy9kZWNvZGlu
ZyBjb2RlIHRoZXJlLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3Mu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpmZXRjaERpc2tDYWNoZUVudHJpZXMpOgorICAgICAgICAo
V2ViS2l0OjpjbGVhckRpc2tDYWNoZUVudHJpZXMpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNz
L05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OnNlbmRSZXBseVRv
U3luY2hyb25vdXNSZXF1ZXN0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9h
ZGVyOjpzdGFydCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c2Vu
ZEJ1ZmZlck1heWJlQWJvcnRpbmcpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VM
b2FkZXI6OmRpZFJldHJpZXZlQ2FjaGVFbnRyeSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtS
ZXNvdXJjZUxvYWRlcjo6dmFsaWRhdGVDYWNoZUVudHJ5KToKKyAgICAgICAgKiBOZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9j
YWNoZS9OZXR3b3JrQ2FjaGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OmNv
bGxlY3RWYXJ5aW5nUmVxdWVzdEhlYWRlcnMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2Fj
aGU6OmNhblVzZSk6CisKKyAgICAgICAgICAgIEZvY3VzZWQgZnVuY3Rpb24gZm9yIGRlY2lkaW5n
IGlmIHdlIGNhbiB1c2UgYSBjYWNoZSBlbnRyeSBhbmQgaWYgaXQgbmVlZHMgdmFsaWRhdGlvbi4K
KworICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkNhY2hlOjpyZXRyaWV2ZSk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6Q2FjaGU6OnN0b3JlKToKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya0NhY2hlOjpDYWNoZTo6dXBkYXRlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a0NhY2hlOjpDYWNoZTo6dHJhdmVyc2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6
OmVuY29kZVN0b3JhZ2VFbnRyeSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtD
YWNoZTo6ZGVjb2RlU3RvcmFnZUVudHJ5KTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9OZXR3b3JrQ2FjaGVFbnRyeS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
Q2FjaGU6OkVudHJ5OjpFbnRyeSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RW50
cnk6OmVuY29kZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RW50cnk6OmRlY29k
ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RW50cnk6OmluaXRpYWxpemVCdWZm
ZXJGcm9tU3RvcmFnZUVudHJ5KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpFbnRy
eTo6YnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpFbnRyeTo6c2hhcmVh
YmxlUmVzb3VyY2VIYW5kbGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkVudHJ5
OjpuZWVkc1ZhbGlkYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkVudHJ5
OjpzZXROZWVkc1ZhbGlkYXRpb24pOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZUVudHJ5Lmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6
OkVudHJ5OjprZXkpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkVudHJ5Ojp0aW1l
U3RhbXApOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkVudHJ5OjpyZXNwb25zZSk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RW50cnk6OnZhcnlpbmdSZXF1ZXN0SGVh
ZGVycyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RW50cnk6OnNvdXJjZVN0b3Jh
Z2VFbnRyeSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3Rh
dGlzdGljcy5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0
YXRpc3RpY3NDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpjYWNoZWRF
bnRyeVJldXNlRmFpbHVyZVRvRGlhZ25vc3RpY0tleSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtDYWNoZTo6U3RhdGlzdGljczo6cmVjb3JkUmV0cmlldmVkQ2FjaGVkRW50cnkpOgorICAgICAg
ICAqIFdlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKwogMjAxNS0wMy0yNSAgRGF2
aWQgSHlhdHQgIDxoeWF0dEBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIGEgcHJlZiB0byBlbmFi
bGUgdGhlIG5ldyBibG9jay1pbnNpZGUtaW5saW5lIG1vZGVsCkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCShyZXZpc2lvbiAxODE5
NTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI4Nyw3ICsyODcsNyBAQCBzdGF0aWMgdm9pZCBmZXRjaERpc2tD
YWNoZUVudHJpZXMoU2Vzc2lvCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICBvcmlnaW5zLT5hZGQoU2VjdXJpdHlPcmlnaW46OmNyZWF0ZShlbnRy
eS0+cmVzcG9uc2UudXJsKCkpKTsKKyAgICAgICAgICAgIG9yaWdpbnMtPmFkZChTZWN1cml0eU9y
aWdpbjo6Y3JlYXRlKGVudHJ5LT5yZXNwb25zZSgpLnVybCgpKSk7CiAgICAgICAgIH0pOwogCiAg
ICAgICAgIHJldHVybjsKQEAgLTM3OSw4ICszNzksOCBAQCBzdGF0aWMgdm9pZCBjbGVhckRpc2tD
YWNoZUVudHJpZXMoY29uc3QgCiAgICAgICAgIE5ldHdvcmtDYWNoZTo6c2luZ2xldG9uKCkudHJh
dmVyc2UoW2NvbXBsZXRpb25IYW5kbGVyLCBvcmlnaW5zVG9EZWxldGUsIGNhY2hlS2V5c1RvRGVs
ZXRlXShjb25zdCBOZXR3b3JrQ2FjaGU6OkVudHJ5ICplbnRyeSkgewogCiAgICAgICAgICAgICBp
ZiAoZW50cnkpIHsKLSAgICAgICAgICAgICAgICBpZiAob3JpZ2luc1RvRGVsZXRlLT5jb250YWlu
cyhTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKGVudHJ5LT5yZXNwb25zZS51cmwoKSkpKQotICAgICAg
ICAgICAgICAgICAgICBjYWNoZUtleXNUb0RlbGV0ZS0+YXBwZW5kKGVudHJ5LT5zdG9yYWdlRW50
cnkua2V5KTsKKyAgICAgICAgICAgICAgICBpZiAob3JpZ2luc1RvRGVsZXRlLT5jb250YWlucyhT
ZWN1cml0eU9yaWdpbjo6Y3JlYXRlKGVudHJ5LT5yZXNwb25zZSgpLnVybCgpKSkpCisgICAgICAg
ICAgICAgICAgICAgIGNhY2hlS2V5c1RvRGVsZXRlLT5hcHBlbmQoZW50cnktPmtleSgpKTsKICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmNw
cAkocmV2aXNpb24gMTgxOTU3KQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0
d29ya1Jlc291cmNlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjksNyArNjksNyBAQCBz
dHJ1Y3QgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpTeW5jaHJvbm91CiAgICAgV2ViQ29yZTo6UmVz
b3VyY2VFcnJvciBlcnJvcjsKIH07CiAKLXN0YXRpYyB2b2lkIHNlbmRSZXBseVRvU3luY2hyb25v
dXNSZXF1ZXN0KE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6U3luY2hyb25vdXNMb2FkRGF0YSYgZGF0
YSwgV2ViQ29yZTo6U2hhcmVkQnVmZmVyKiBidWZmZXIpCitzdGF0aWMgdm9pZCBzZW5kUmVwbHlU
b1N5bmNocm9ub3VzUmVxdWVzdChOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OlN5bmNocm9ub3VzTG9h
ZERhdGEmIGRhdGEsIGNvbnN0IFdlYkNvcmU6OlNoYXJlZEJ1ZmZlciogYnVmZmVyKQogewogICAg
IEFTU0VSVChkYXRhLmRlbGF5ZWRSZXBseSk7CiAgICAgQVNTRVJUKCFkYXRhLnJlc3BvbnNlLmlz
TnVsbCgpIHx8ICFkYXRhLmVycm9yLmlzTnVsbCgpKTsKQEAgLTE1MCwxMSArMTUwLDExIEBAIHZv
aWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpzdGFydCgpCiAgICAgICAgICAgICBsb2FkZXItPnN0
YXJ0TmV0d29ya0xvYWQoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAg
ICBpZiAobG9hZGVyLT5tX3BhcmFtZXRlcnMubmVlZHNDZXJ0aWZpY2F0ZUluZm8gJiYgIWVudHJ5
LT5yZXNwb25zZS5jb250YWluc0NlcnRpZmljYXRlSW5mbygpKSB7CisgICAgICAgIGlmIChsb2Fk
ZXItPm1fcGFyYW1ldGVycy5uZWVkc0NlcnRpZmljYXRlSW5mbyAmJiAhZW50cnktPnJlc3BvbnNl
KCkuY29udGFpbnNDZXJ0aWZpY2F0ZUluZm8oKSkgewogICAgICAgICAgICAgbG9hZGVyLT5zdGFy
dE5ldHdvcmtMb2FkKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAg
aWYgKGVudHJ5LT5uZWVkc1JldmFsaWRhdGlvbikgeworICAgICAgICBpZiAoZW50cnktPm5lZWRz
VmFsaWRhdGlvbigpKSB7CiAgICAgICAgICAgICBsb2FkZXItPnZhbGlkYXRlQ2FjaGVFbnRyeShX
VEY6Om1vdmUoZW50cnkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtNTI5
LDEzICs1MjksMTMgQEAgdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmJ1ZmZlcmluZ1RpbQog
ICAgIHNlbmRBYm9ydGluZ09uRmFpbHVyZShNZXNzYWdlczo6V2ViUmVzb3VyY2VMb2FkZXI6OkRp
ZFJlY2VpdmVEYXRhKGRhdGFSZWZlcmVuY2UsIGVuY29kZWRMZW5ndGgpKTsKIH0KIAotYm9vbCBO
ZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnNlbmRCdWZmZXJNYXliZUFib3J0aW5nKFdlYkNvcmU6OlNo
YXJlZEJ1ZmZlciYgYnVmZmVyLCBzaXplX3QgZW5jb2RlZERhdGFMZW5ndGgpCitib29sIE5ldHdv
cmtSZXNvdXJjZUxvYWRlcjo6c2VuZEJ1ZmZlck1heWJlQWJvcnRpbmcoY29uc3QgV2ViQ29yZTo6
U2hhcmVkQnVmZmVyJiBidWZmZXIsIHNpemVfdCBlbmNvZGVkRGF0YUxlbmd0aCkKIHsKICAgICBB
U1NFUlQoIWlzU3luY2hyb25vdXMoKSk7CiAKICNpZiBQTEFURk9STShDT0NPQSkKICAgICBTaGFy
ZWFibGVSZXNvdXJjZTo6SGFuZGxlIHNoYXJlYWJsZVJlc291cmNlSGFuZGxlOwotICAgIE5ldHdv
cmtSZXNvdXJjZUxvYWRlcjo6dHJ5R2V0U2hhcmVhYmxlSGFuZGxlRnJvbVNoYXJlZEJ1ZmZlcihz
aGFyZWFibGVSZXNvdXJjZUhhbmRsZSwgYnVmZmVyKTsKKyAgICBOZXR3b3JrUmVzb3VyY2VMb2Fk
ZXI6OnRyeUdldFNoYXJlYWJsZUhhbmRsZUZyb21TaGFyZWRCdWZmZXIoc2hhcmVhYmxlUmVzb3Vy
Y2VIYW5kbGUsIGNvbnN0X2Nhc3Q8V2ViQ29yZTo6U2hhcmVkQnVmZmVyJj4oYnVmZmVyKSk7CiAg
ICAgaWYgKCFzaGFyZWFibGVSZXNvdXJjZUhhbmRsZS5pc051bGwoKSkgewogICAgICAgICBzZW5k
KE1lc3NhZ2VzOjpXZWJSZXNvdXJjZUxvYWRlcjo6RGlkUmVjZWl2ZVJlc291cmNlKHNoYXJlYWJs
ZVJlc291cmNlSGFuZGxlLCBjdXJyZW50VGltZSgpKSk7CiAgICAgICAgIGFib3J0KCk7CkBAIC01
NDMsNyArNTQzLDcgQEAgYm9vbCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnNlbmRCdWZmZXJNYQog
ICAgIH0KICNlbmRpZgogCi0gICAgSVBDOjpTaGFyZWRCdWZmZXJEYXRhUmVmZXJlbmNlIGRhdGFS
ZWZlcmVuY2UoJmJ1ZmZlcik7CisgICAgSVBDOjpTaGFyZWRCdWZmZXJEYXRhUmVmZXJlbmNlIGRh
dGFSZWZlcmVuY2UoJmNvbnN0X2Nhc3Q8V2ViQ29yZTo6U2hhcmVkQnVmZmVyJj4oYnVmZmVyKSk7
CiAgICAgcmV0dXJuIHNlbmRBYm9ydGluZ09uRmFpbHVyZShNZXNzYWdlczo6V2ViUmVzb3VyY2VM
b2FkZXI6OkRpZFJlY2VpdmVEYXRhKGRhdGFSZWZlcmVuY2UsIGVuY29kZWREYXRhTGVuZ3RoKSk7
CiB9CiAKQEAgLTU1MSwxNyArNTUxLDE3IEBAIGJvb2wgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpz
ZW5kQnVmZmVyTWEKIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRSZXRyaWV2ZUNhY2hl
RW50cnkoc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtDYWNoZTo6RW50cnk+IGVudHJ5KQogewogICAg
IGlmIChpc1N5bmNocm9ub3VzKCkpIHsKLSAgICAgICAgbV9zeW5jaHJvbm91c0xvYWREYXRhLT5y
ZXNwb25zZSA9IGVudHJ5LT5yZXNwb25zZTsKLSAgICAgICAgc2VuZFJlcGx5VG9TeW5jaHJvbm91
c1JlcXVlc3QoKm1fc3luY2hyb25vdXNMb2FkRGF0YSwgZW50cnktPmJ1ZmZlci5nZXQoKSk7Cisg
ICAgICAgIG1fc3luY2hyb25vdXNMb2FkRGF0YS0+cmVzcG9uc2UgPSBlbnRyeS0+cmVzcG9uc2Uo
KTsKKyAgICAgICAgc2VuZFJlcGx5VG9TeW5jaHJvbm91c1JlcXVlc3QoKm1fc3luY2hyb25vdXNM
b2FkRGF0YSwgZW50cnktPmJ1ZmZlcigpKTsKICAgICB9IGVsc2UgewotICAgICAgICBzZW5kQWJv
cnRpbmdPbkZhaWx1cmUoTWVzc2FnZXM6OldlYlJlc291cmNlTG9hZGVyOjpEaWRSZWNlaXZlUmVz
cG9uc2UoZW50cnktPnJlc3BvbnNlLCBtX3BhcmFtZXRlcnMuaXNNYWluUmVzb3VyY2UpKTsKKyAg
ICAgICAgc2VuZEFib3J0aW5nT25GYWlsdXJlKE1lc3NhZ2VzOjpXZWJSZXNvdXJjZUxvYWRlcjo6
RGlkUmVjZWl2ZVJlc3BvbnNlKGVudHJ5LT5yZXNwb25zZSgpLCBtX3BhcmFtZXRlcnMuaXNNYWlu
UmVzb3VyY2UpKTsKIAogI2lmIEVOQUJMRShTSEFSRUFCTEVfUkVTT1VSQ0UpCi0gICAgICAgIGlm
ICghZW50cnktPnNoYXJlYWJsZVJlc291cmNlSGFuZGxlLmlzTnVsbCgpKQotICAgICAgICAgICAg
c2VuZChNZXNzYWdlczo6V2ViUmVzb3VyY2VMb2FkZXI6OkRpZFJlY2VpdmVSZXNvdXJjZShlbnRy
eS0+c2hhcmVhYmxlUmVzb3VyY2VIYW5kbGUsIGN1cnJlbnRUaW1lKCkpKTsKKyAgICAgICAgaWYg
KCFlbnRyeS0+c2hhcmVhYmxlUmVzb3VyY2VIYW5kbGUoKS5pc051bGwoKSkKKyAgICAgICAgICAg
IHNlbmQoTWVzc2FnZXM6OldlYlJlc291cmNlTG9hZGVyOjpEaWRSZWNlaXZlUmVzb3VyY2UoZW50
cnktPnNoYXJlYWJsZVJlc291cmNlSGFuZGxlKCksIGN1cnJlbnRUaW1lKCkpKTsKICAgICAgICAg
ZWxzZSB7CiAjZW5kaWYKLSAgICAgICAgICAgIGJvb2wgc2hvdWxkQ29udGludWUgPSBzZW5kQnVm
ZmVyTWF5YmVBYm9ydGluZygqZW50cnktPmJ1ZmZlciwgZW50cnktPmJ1ZmZlci0+c2l6ZSgpKTsK
KyAgICAgICAgICAgIGJvb2wgc2hvdWxkQ29udGludWUgPSBzZW5kQnVmZmVyTWF5YmVBYm9ydGlu
ZygqZW50cnktPmJ1ZmZlcigpLCBlbnRyeS0+YnVmZmVyKCktPnNpemUoKSk7CiAgICAgICAgICAg
ICBpZiAoIXNob3VsZENvbnRpbnVlKQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
ICAgIHNlbmQoTWVzc2FnZXM6OldlYlJlc291cmNlTG9hZGVyOjpEaWRGaW5pc2hSZXNvdXJjZUxv
YWQoY3VycmVudFRpbWUoKSkpOwpAQCAtNTc3LDggKzU3Nyw4IEBAIHZvaWQgTmV0d29ya1Jlc291
cmNlTG9hZGVyOjp2YWxpZGF0ZUNhY2gKIHsKICAgICBBU1NFUlQoIW1faGFuZGxlKTsKIAotICAg
IFN0cmluZyBlVGFnID0gZW50cnktPnJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZChXZWJDb3JlOjpI
VFRQSGVhZGVyTmFtZTo6RVRhZyk7Ci0gICAgU3RyaW5nIGxhc3RNb2RpZmllZCA9IGVudHJ5LT5y
ZXNwb25zZS5odHRwSGVhZGVyRmllbGQoV2ViQ29yZTo6SFRUUEhlYWRlck5hbWU6Okxhc3RNb2Rp
ZmllZCk7CisgICAgU3RyaW5nIGVUYWcgPSBlbnRyeS0+cmVzcG9uc2UoKS5odHRwSGVhZGVyRmll
bGQoV2ViQ29yZTo6SFRUUEhlYWRlck5hbWU6OkVUYWcpOworICAgIFN0cmluZyBsYXN0TW9kaWZp
ZWQgPSBlbnRyeS0+cmVzcG9uc2UoKS5odHRwSGVhZGVyRmllbGQoV2ViQ29yZTo6SFRUUEhlYWRl
ck5hbWU6Okxhc3RNb2RpZmllZCk7CiAgICAgaWYgKCFlVGFnLmlzRW1wdHkoKSkKICAgICAgICAg
bV9jdXJyZW50UmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQoV2ViQ29yZTo6SFRUUEhlYWRlck5h
bWU6OklmTm9uZU1hdGNoLCBlVGFnKTsKICAgICBpZiAoIWxhc3RNb2RpZmllZC5pc0VtcHR5KCkp
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2Fk
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
UmVzb3VyY2VMb2FkZXIuaAkocmV2aXNpb24gMTgxOTU3KQorKysgU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2
MSw3ICsxNjEsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBzdGFydEJ1ZmZlcmluZ1RpbWVySWZO
ZWVkZWQoKTsKICAgICB2b2lkIGJ1ZmZlcmluZ1RpbWVyRmlyZWQoKTsKLSAgICBib29sIHNlbmRC
dWZmZXJNYXliZUFib3J0aW5nKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlciYsIHNpemVfdCBlbmNvZGVk
RGF0YUxlbmd0aCk7CisgICAgYm9vbCBzZW5kQnVmZmVyTWF5YmVBYm9ydGluZyhjb25zdCBXZWJD
b3JlOjpTaGFyZWRCdWZmZXImLCBzaXplX3QgZW5jb2RlZERhdGFMZW5ndGgpOwogCiAgICAgYm9v
bCBpc1N5bmNocm9ub3VzKCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmNwcAkocmV2aXNpb24gMTgxOTU3
KQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjksMjEgKzI5LDE3IEBACiAjaWYgRU5BQkxFKE5FVFdPUktf
Q0FDSEUpCiAKICNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiTmV0d29ya0NhY2hlQ29k
ZXJzLmgiCiAjaW5jbHVkZSAiTmV0d29ya0NhY2hlU3RhdGlzdGljcy5oIgogI2luY2x1ZGUgIk5l
dHdvcmtDYWNoZVN0b3JhZ2UuaCIKLSNpbmNsdWRlICJOZXR3b3JrUmVzb3VyY2VMb2FkZXIuaCIK
LSNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9KU09OT2JqZWN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9DYWNoZVZhbGlkYXRpb24uaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVTeXN0ZW0uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0hUVFBI
ZWFkZXJOYW1lcy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUNvb2tpZUphci5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvUmVzb3VyY2VSZXNwb25zZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TaGFyZWRCdWZmZXIuaD4KICNpbmNsdWRlIDx3dGYvTmV2
ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvU3RyaW5nSGFzaGVyLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiAjaWYgUExBVEZPUk0oQ09DT0EpCkBAIC0xMTAs
MzcgKzEwNiwyMCBAQCBzdGF0aWMgU3RyaW5nIGhlYWRlclZhbHVlRm9yVmFyeShjb25zdCBXCiAg
ICAgcmV0dXJuIHJlcXVlc3QuaHR0cEhlYWRlckZpZWxkKGhlYWRlck5hbWUpOwogfQogCi1zdGF0
aWMgU3RvcmFnZTo6RW50cnkgZW5jb2RlU3RvcmFnZUVudHJ5KGNvbnN0IFdlYkNvcmU6OlJlc291
cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYgcmVz
cG9uc2UsIFBhc3NSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiByZXNwb25zZURhdGEpCitz
dGF0aWMgVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4+IGNvbGxlY3RWYXJ5aW5nUmVx
dWVzdEhlYWRlcnMoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25z
dCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKIHsKLSAgICBFbmNvZGVyIGVu
Y29kZXI7Ci0gICAgZW5jb2RlciA8PCByZXNwb25zZTsKLQogICAgIFN0cmluZyB2YXJ5VmFsdWUg
PSByZXNwb25zZS5odHRwSGVhZGVyRmllbGQoV2ViQ29yZTo6SFRUUEhlYWRlck5hbWU6OlZhcnkp
OwotICAgIGJvb2wgaGFzVmFyeWluZ1JlcXVlc3RIZWFkZXJzID0gIXZhcnlWYWx1ZS5pc0VtcHR5
KCk7Ci0KLSAgICBlbmNvZGVyIDw8IGhhc1ZhcnlpbmdSZXF1ZXN0SGVhZGVyczsKLQotICAgIGlm
IChoYXNWYXJ5aW5nUmVxdWVzdEhlYWRlcnMpIHsKLSAgICAgICAgVmVjdG9yPFN0cmluZz4gdmFy
eWluZ0hlYWRlck5hbWVzOwotICAgICAgICB2YXJ5VmFsdWUuc3BsaXQoJywnLCBmYWxzZSwgdmFy
eWluZ0hlYWRlck5hbWVzKTsKLQotICAgICAgICBWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgU3Ry
aW5nPj4gdmFyeWluZ1JlcXVlc3RIZWFkZXJzOwotICAgICAgICBmb3IgKGF1dG8mIHZhcnlIZWFk
ZXJOYW1lIDogdmFyeWluZ0hlYWRlck5hbWVzKSB7Ci0gICAgICAgICAgICBTdHJpbmcgaGVhZGVy
TmFtZSA9IHZhcnlIZWFkZXJOYW1lLnN0cmlwV2hpdGVTcGFjZSgpOwotICAgICAgICAgICAgU3Ry
aW5nIGhlYWRlclZhbHVlID0gaGVhZGVyVmFsdWVGb3JWYXJ5KHJlcXVlc3QsIGhlYWRlck5hbWUp
OwotICAgICAgICAgICAgdmFyeWluZ1JlcXVlc3RIZWFkZXJzLmFwcGVuZChzdGQ6Om1ha2VfcGFp
cihoZWFkZXJOYW1lLCBoZWFkZXJWYWx1ZSkpOwotICAgICAgICB9Ci0gICAgICAgIGVuY29kZXIg
PDwgdmFyeWluZ1JlcXVlc3RIZWFkZXJzOworICAgIGlmICh2YXJ5VmFsdWUuaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm4geyB9OworICAgIFZlY3RvcjxTdHJpbmc+IHZhcnlpbmdIZWFkZXJOYW1l
czsKKyAgICB2YXJ5VmFsdWUuc3BsaXQoJywnLCBmYWxzZSwgdmFyeWluZ0hlYWRlck5hbWVzKTsK
KyAgICBWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPj4gdmFyeWluZ1JlcXVlc3RIZWFk
ZXJzOworICAgIGZvciAoYXV0byYgdmFyeUhlYWRlck5hbWUgOiB2YXJ5aW5nSGVhZGVyTmFtZXMp
IHsKKyAgICAgICAgU3RyaW5nIGhlYWRlck5hbWUgPSB2YXJ5SGVhZGVyTmFtZS5zdHJpcFdoaXRl
U3BhY2UoKTsKKyAgICAgICAgU3RyaW5nIGhlYWRlclZhbHVlID0gaGVhZGVyVmFsdWVGb3JWYXJ5
KHJlcXVlc3QsIGhlYWRlck5hbWUpOworICAgICAgICB2YXJ5aW5nUmVxdWVzdEhlYWRlcnMuYXBw
ZW5kKHN0ZDo6bWFrZV9wYWlyKGhlYWRlck5hbWUsIGhlYWRlclZhbHVlKSk7CiAgICAgfQotICAg
IGVuY29kZXIuZW5jb2RlQ2hlY2tzdW0oKTsKLQotICAgIGF1dG8gdGltZVN0YW1wID0gc3RkOjpj
aHJvbm86OmR1cmF0aW9uX2Nhc3Q8c3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcz4oc3RkOjpjaHJv
bm86OnN5c3RlbV9jbG9jazo6bm93KCkudGltZV9zaW5jZV9lcG9jaCgpKTsKLSAgICBEYXRhIGhl
YWRlcihlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSk7Ci0gICAgRGF0YSBi
b2R5OwotICAgIGlmIChyZXNwb25zZURhdGEpCi0gICAgICAgIGJvZHkgPSB7IHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHJlc3BvbnNlRGF0YS0+ZGF0YSgpKSwgcmVzcG9uc2VEYXRh
LT5zaXplKCkgfTsKLQotICAgIHJldHVybiB7IG1ha2VDYWNoZUtleShyZXF1ZXN0KSwgdGltZVN0
YW1wLCBoZWFkZXIsIGJvZHkgfTsKKyAgICByZXR1cm4gdmFyeWluZ1JlcXVlc3RIZWFkZXJzOwog
fQogCiBzdGF0aWMgYm9vbCB2ZXJpZnlWYXJ5aW5nUmVxdWVzdEhlYWRlcnMoY29uc3QgVmVjdG9y
PHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4+JiB2YXJ5aW5nUmVxdWVzdEhlYWRlcnMsIGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKQEAgLTE3MCw3NyArMTQ5LDI5IEBA
IHN0YXRpYyBib29sIGNhY2hlUG9saWN5QWxsb3dzRXhwaXJlZChXZWIKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLXN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8RW50cnk+IGRlY29kZVN0b3JhZ2VFbnRy
eShjb25zdCBTdG9yYWdlOjpFbnRyeSYgc3RvcmFnZUVudHJ5LCBjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3QmIHJlcXVlc3QsIENhY2hlZEVudHJ5UmV1c2VGYWlsdXJlJiBmYWlsdXJlKQor
c3RhdGljIFVzZURlY2lzaW9uIGNhblVzZShjb25zdCBFbnRyeSYgZW50cnksIGNvbnN0IFdlYkNv
cmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKIHsKLSAgICBEZWNvZGVyIGRlY29kZXIoc3Rv
cmFnZUVudHJ5LmhlYWRlci5kYXRhKCksIHN0b3JhZ2VFbnRyeS5oZWFkZXIuc2l6ZSgpKTsKLQot
ICAgIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UgY2FjaGVkUmVzcG9uc2U7Ci0gICAgaWYgKCFk
ZWNvZGVyLmRlY29kZShjYWNoZWRSZXNwb25zZSkpIHsKLSAgICAgICAgTE9HKE5ldHdvcmtDYWNo
ZSwgIihOZXR3b3JrUHJvY2VzcykgcmVzcG9uc2UgZGVjb2RpbmcgZmFpbGVkXG4iKTsKLSAgICAg
ICAgZmFpbHVyZSA9IENhY2hlZEVudHJ5UmV1c2VGYWlsdXJlOjpPdGhlcjsKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgYm9vbCBoYXNWYXJ5aW5nUmVxdWVzdEhlYWRlcnM7
Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShoYXNWYXJ5aW5nUmVxdWVzdEhlYWRlcnMpKSB7Ci0g
ICAgICAgIGZhaWx1cmUgPSBDYWNoZWRFbnRyeVJldXNlRmFpbHVyZTo6T3RoZXI7Ci0gICAgICAg
IHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIGlmIChoYXNWYXJ5aW5nUmVxdWVzdEhlYWRl
cnMpIHsKLSAgICAgICAgVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4+IHZhcnlpbmdS
ZXF1ZXN0SGVhZGVyczsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh2YXJ5aW5nUmVxdWVz
dEhlYWRlcnMpKSB7Ci0gICAgICAgICAgICBmYWlsdXJlID0gQ2FjaGVkRW50cnlSZXVzZUZhaWx1
cmU6Ok90aGVyOwotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAoIXZlcmlmeVZhcnlpbmdSZXF1ZXN0SGVhZGVycyh2YXJ5aW5nUmVxdWVzdEhlYWRl
cnMsIHJlcXVlc3QpKSB7Ci0gICAgICAgICAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQ
cm9jZXNzKSB2YXJ5aW5nIGhlYWRlciBtaXNtYXRjaFxuIik7Ci0gICAgICAgICAgICBmYWlsdXJl
ID0gQ2FjaGVkRW50cnlSZXVzZUZhaWx1cmU6OlZhcnlpbmdIZWFkZXJNaXNtYXRjaDsKLSAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmICghZGVjb2Rl
ci52ZXJpZnlDaGVja3N1bSgpKSB7Ci0gICAgICAgIExPRyhOZXR3b3JrQ2FjaGUsICIoTmV0d29y
a1Byb2Nlc3MpIGNoZWNrc3VtIHZlcmlmaWNhdGlvbiBmYWlsdXJlXG4iKTsKLSAgICAgICAgZmFp
bHVyZSA9IENhY2hlZEVudHJ5UmV1c2VGYWlsdXJlOjpPdGhlcjsKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgaWYgKCF2ZXJpZnlWYXJ5aW5nUmVxdWVzdEhlYWRlcnMoZW50cnkudmFyeWlu
Z1JlcXVlc3RIZWFkZXJzKCksIHJlcXVlc3QpKSB7CisgICAgICAgIExPRyhOZXR3b3JrQ2FjaGUs
ICIoTmV0d29ya1Byb2Nlc3MpIHZhcnlpbmcgaGVhZGVyIG1pc21hdGNoXG4iKTsKKyAgICAgICAg
cmV0dXJuIFVzZURlY2lzaW9uOjpOb0R1ZVRvVmFyeWluZ0hlYWRlck1pc21hdGNoOwogICAgIH0K
IAogICAgIGJvb2wgYWxsb3dFeHBpcmVkID0gY2FjaGVQb2xpY3lBbGxvd3NFeHBpcmVkKHJlcXVl
c3QuY2FjaGVQb2xpY3koKSk7Ci0gICAgYXV0byB0aW1lU3RhbXAgPSBzdGQ6OmNocm9ubzo6ZHVy
YXRpb25fY2FzdDxzdGQ6OmNocm9ubzo6ZHVyYXRpb248ZG91YmxlPj4oc3RvcmFnZUVudHJ5LnRp
bWVTdGFtcCk7Ci0gICAgZG91YmxlIGFnZSA9IFdlYkNvcmU6OmNvbXB1dGVDdXJyZW50QWdlKGNh
Y2hlZFJlc3BvbnNlLCB0aW1lU3RhbXAuY291bnQoKSk7Ci0gICAgZG91YmxlIGxpZmV0aW1lID0g
V2ViQ29yZTo6Y29tcHV0ZUZyZXNobmVzc0xpZmV0aW1lRm9ySFRUUEZhbWlseShjYWNoZWRSZXNw
b25zZSwgdGltZVN0YW1wLmNvdW50KCkpOworICAgIGF1dG8gZG91YmxlVGltZVN0YW1wID0gc3Rk
OjpjaHJvbm86OmR1cmF0aW9uPGRvdWJsZT4oZW50cnkudGltZVN0YW1wKCkpOworICAgIGRvdWJs
ZSBhZ2UgPSBXZWJDb3JlOjpjb21wdXRlQ3VycmVudEFnZShlbnRyeS5yZXNwb25zZSgpLCBkb3Vi
bGVUaW1lU3RhbXAuY291bnQoKSk7CisgICAgZG91YmxlIGxpZmV0aW1lID0gV2ViQ29yZTo6Y29t
cHV0ZUZyZXNobmVzc0xpZmV0aW1lRm9ySFRUUEZhbWlseShlbnRyeS5yZXNwb25zZSgpLCBkb3Vi
bGVUaW1lU3RhbXAuY291bnQoKSk7CiAgICAgYm9vbCBpc0V4cGlyZWQgPSBhZ2UgPiBsaWZldGlt
ZTsKICAgICAvLyBXZSBuZXZlciByZXZhbGlkYXRlIGluIHRoZSBjYXNlIG9mIGEgaGlzdG9yeSBu
YXZpZ2F0aW9uIChpLmUuIGFsbG93RXhwaXJlZCBpcyB0cnVlKS4KLSAgICBib29sIG5lZWRzUmV2
YWxpZGF0aW9uID0gIWFsbG93RXhwaXJlZCAmJiAoY2FjaGVkUmVzcG9uc2UuY2FjaGVDb250cm9s
Q29udGFpbnNOb0NhY2hlKCkgfHwgaXNFeHBpcmVkKTsKLQotICAgIGlmIChuZWVkc1JldmFsaWRh
dGlvbikgewotICAgICAgICBib29sIGhhc1ZhbGlkYXRvckZpZWxkcyA9IGNhY2hlZFJlc3BvbnNl
Lmhhc0NhY2hlVmFsaWRhdG9yRmllbGRzKCk7Ci0gICAgICAgIExPRyhOZXR3b3JrQ2FjaGUsICIo
TmV0d29ya1Byb2Nlc3MpIG5lZWRzUmV2YWxpZGF0aW9uIGhhc1ZhbGlkYXRvckZpZWxkcz0lZCBp
c0V4cGlyZWQ9JWQgYWdlPSVmIGxpZmV0aW1lPSVmIiwgaXNFeHBpcmVkLCBoYXNWYWxpZGF0b3JG
aWVsZHMsIGFnZSwgbGlmZXRpbWUpOwotICAgICAgICBpZiAoIWhhc1ZhbGlkYXRvckZpZWxkcykg
ewotICAgICAgICAgICAgZmFpbHVyZSA9IENhY2hlZEVudHJ5UmV1c2VGYWlsdXJlOjpNaXNzaW5n
VmFsaWRhdG9yRmllbGRzOwotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBhdXRvIGVudHJ5ID0gc3RkOjptYWtlX3VuaXF1ZTxFbnRyeT4oKTsKLSAg
ICBlbnRyeS0+c3RvcmFnZUVudHJ5ID0gc3RvcmFnZUVudHJ5OwotICAgIGVudHJ5LT5uZWVkc1Jl
dmFsaWRhdGlvbiA9IG5lZWRzUmV2YWxpZGF0aW9uOworICAgIGJvb2wgbmVlZHNSZXZhbGlkYXRp
b24gPSAhYWxsb3dFeHBpcmVkICYmIChlbnRyeS5yZXNwb25zZSgpLmNhY2hlQ29udHJvbENvbnRh
aW5zTm9DYWNoZSgpIHx8IGlzRXhwaXJlZCk7CisgICAgaWYgKCFuZWVkc1JldmFsaWRhdGlvbikK
KyAgICAgICAgcmV0dXJuIFVzZURlY2lzaW9uOjpVc2U7CisKKyAgICBib29sIGhhc1ZhbGlkYXRv
ckZpZWxkcyA9IGVudHJ5LnJlc3BvbnNlKCkuaGFzQ2FjaGVWYWxpZGF0b3JGaWVsZHMoKTsKKyAg
ICBMT0coTmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQcm9jZXNzKSBuZWVkc1JldmFsaWRhdGlvbiBo
YXNWYWxpZGF0b3JGaWVsZHM9JWQgaXNFeHBpcmVkPSVkIGFnZT0lZiBsaWZldGltZT0lZiIsIGlz
RXhwaXJlZCwgaGFzVmFsaWRhdG9yRmllbGRzLCBhZ2UsIGxpZmV0aW1lKTsKKyAgICBpZiAoIWhh
c1ZhbGlkYXRvckZpZWxkcykKKyAgICAgICAgcmV0dXJuIFVzZURlY2lzaW9uOjpOb0R1ZVRvTWlz
c2luZ1ZhbGlkYXRvckZpZWxkczsKIAotICAgIGNhY2hlZFJlc3BvbnNlLnNldFNvdXJjZShuZWVk
c1JldmFsaWRhdGlvbiA/IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2U6OlNvdXJjZTo6RGlza0Nh
Y2hlQWZ0ZXJWYWxpZGF0aW9uIDogV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZTo6U291cmNlOjpE
aXNrQ2FjaGUpOwotICAgIGVudHJ5LT5yZXNwb25zZSA9IGNhY2hlZFJlc3BvbnNlOwotCi0jaWYg
RU5BQkxFKFNIQVJFQUJMRV9SRVNPVVJDRSkKLSAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBzaGFy
ZWRNZW1vcnkgPSBzdG9yYWdlRW50cnkuYm9keS5pc01hcCgpID8gU2hhcmVkTWVtb3J5OjpjcmVh
dGVGcm9tVk1CdWZmZXIoY29uc3RfY2FzdDx1aW50OF90Kj4oc3RvcmFnZUVudHJ5LmJvZHkuZGF0
YSgpKSwgc3RvcmFnZUVudHJ5LmJvZHkuc2l6ZSgpKSA6IG51bGxwdHI7Ci0gICAgUmVmUHRyPFNo
YXJlYWJsZVJlc291cmNlPiBzaGFyZWFibGVSZXNvdXJjZSA9IHNoYXJlZE1lbW9yeSA/IFNoYXJl
YWJsZVJlc291cmNlOjpjcmVhdGUoc2hhcmVkTWVtb3J5LnJlbGVhc2UoKSwgMCwgc3RvcmFnZUVu
dHJ5LmJvZHkuc2l6ZSgpKSA6IG51bGxwdHI7Ci0KLSAgICBpZiAoc2hhcmVhYmxlUmVzb3VyY2Ug
JiYgc2hhcmVhYmxlUmVzb3VyY2UtPmNyZWF0ZUhhbmRsZShlbnRyeS0+c2hhcmVhYmxlUmVzb3Vy
Y2VIYW5kbGUpKQotICAgICAgICBlbnRyeS0+YnVmZmVyID0gZW50cnktPnNoYXJlYWJsZVJlc291
cmNlSGFuZGxlLnRyeVdyYXBJblNoYXJlZEJ1ZmZlcigpOwotICAgIGVsc2UKLSNlbmRpZgotICAg
ICAgICBlbnRyeS0+YnVmZmVyID0gV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpjcmVhdGUoc3RvcmFn
ZUVudHJ5LmJvZHkuZGF0YSgpLCBzdG9yYWdlRW50cnkuYm9keS5zaXplKCkpOwotCi0gICAgcmV0
dXJuIGVudHJ5OworICAgIHJldHVybiBVc2VEZWNpc2lvbjo6VmFsaWRhdGU7CiB9CiAKIHN0YXRp
YyBSZXRyaWV2ZURlY2lzaW9uIGNhblJldHJpZXZlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdCYgcmVxdWVzdCkKQEAgLTI4MCw4ICsyMTEsOCBAQCB2b2lkIENhY2hlOjpyZXRyaWV2ZShj
b25zdCBXZWJDb3JlOjpSZXNvCiAgICAgYXV0byBzdGFydFRpbWUgPSBzdGQ6OmNocm9ubzo6c3lz
dGVtX2Nsb2NrOjpub3coKTsKICAgICB1bnNpZ25lZCBwcmlvcml0eSA9IG9yaWdpbmFsUmVxdWVz
dC5wcmlvcml0eSgpOwogCi0gICAgbV9zdG9yYWdlLT5yZXRyaWV2ZShzdG9yYWdlS2V5LCBwcmlv
cml0eSwgW3RoaXMsIG9yaWdpbmFsUmVxdWVzdCwgY29tcGxldGlvbkhhbmRsZXIsIHN0YXJ0VGlt
ZSwgc3RvcmFnZUtleSwgd2ViUGFnZUlEXShzdGQ6OnVuaXF1ZV9wdHI8U3RvcmFnZTo6RW50cnk+
IGVudHJ5KSB7Ci0gICAgICAgIGlmICghZW50cnkpIHsKKyAgICBtX3N0b3JhZ2UtPnJldHJpZXZl
KHN0b3JhZ2VLZXksIHByaW9yaXR5LCBbdGhpcywgb3JpZ2luYWxSZXF1ZXN0LCBjb21wbGV0aW9u
SGFuZGxlciwgc3RhcnRUaW1lLCBzdG9yYWdlS2V5LCB3ZWJQYWdlSURdKHN0ZDo6dW5pcXVlX3B0
cjxTdG9yYWdlOjpFbnRyeT4gc3RvcmFnZUVudHJ5KSB7CisgICAgICAgIGlmICghc3RvcmFnZUVu
dHJ5KSB7CiAgICAgICAgICAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQcm9jZXNzKSBu
b3QgZm91bmQgaW4gc3RvcmFnZSIpOwogCiAgICAgICAgICAgICBpZiAobV9zdGF0aXN0aWNzKQpA
QCAtMjkwLDIwICsyMjEsMzEgQEAgdm9pZCBDYWNoZTo6cmV0cmlldmUoY29uc3QgV2ViQ29yZTo6
UmVzbwogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIobnVsbHB0cik7CiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgQVNTRVJUKGVudHJ5LT5rZXkgPT0g
c3RvcmFnZUtleSk7CiAKLSAgICAgICAgQ2FjaGVkRW50cnlSZXVzZUZhaWx1cmUgZmFpbHVyZSA9
IENhY2hlZEVudHJ5UmV1c2VGYWlsdXJlOjpOb25lOwotICAgICAgICBhdXRvIGRlY29kZWRFbnRy
eSA9IGRlY29kZVN0b3JhZ2VFbnRyeSgqZW50cnksIG9yaWdpbmFsUmVxdWVzdCwgZmFpbHVyZSk7
Ci0gICAgICAgIGJvb2wgc3VjY2VzcyA9ICEhZGVjb2RlZEVudHJ5OwotICAgICAgICBpZiAobV9z
dGF0aXN0aWNzKQotICAgICAgICAgICAgbV9zdGF0aXN0aWNzLT5yZWNvcmRSZXRyaWV2ZWRDYWNo
ZWRFbnRyeSh3ZWJQYWdlSUQsIHN0b3JhZ2VLZXksIG9yaWdpbmFsUmVxdWVzdCwgZmFpbHVyZSk7
CisgICAgICAgIEFTU0VSVChzdG9yYWdlRW50cnktPmtleSA9PSBzdG9yYWdlS2V5KTsKKworICAg
ICAgICBhdXRvIGNhY2hlRW50cnkgPSBFbnRyeTo6ZGVjb2RlKCpzdG9yYWdlRW50cnkpOworCisg
ICAgICAgIGF1dG8gdXNlRGVjaXNpb24gPSBjYWNoZUVudHJ5ID8gY2FuVXNlKCpjYWNoZUVudHJ5
LCBvcmlnaW5hbFJlcXVlc3QpIDogVXNlRGVjaXNpb246Ok5vRHVlVG9EZWNvZGVGYWlsdXJlOwor
ICAgICAgICBzd2l0Y2ggKHVzZURlY2lzaW9uKSB7CisgICAgICAgIGNhc2UgVXNlRGVjaXNpb246
OlVzZToKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFVzZURlY2lzaW9uOjpWYWxp
ZGF0ZToKKyAgICAgICAgICAgIGNhY2hlRW50cnktPnNldE5lZWRzVmFsaWRhdGlvbigpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBjYWNoZUVudHJ5
ID0gbnVsbHB0cjsKKyAgICAgICAgfTsKIAogI2lmICFMT0dfRElTQUJMRUQKICAgICAgICAgYXV0
byBlbGFwc2VkTVMgPSBzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxzdGQ6OmNocm9ubzo6bWls
bGlzZWNvbmRzPihzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjpub3coKSAtIHN0YXJ0VGltZSku
Y291bnQoKTsKICNlbmRpZgotICAgICAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQcm9j
ZXNzKSByZXRyaWV2ZSBjb21wbGV0ZSBzdWNjZXNzPSVkIHByaW9yaXR5PSV1IHRpbWU9JWxsZG1z
Iiwgc3VjY2Vzcywgb3JpZ2luYWxSZXF1ZXN0LnByaW9yaXR5KCksIGVsYXBzZWRNUyk7Ci0gICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURjo6bW92ZShkZWNvZGVkRW50cnkpKTsKLSAgICAgICAg
cmV0dXJuIHN1Y2Nlc3M7CisgICAgICAgIExPRyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nl
c3MpIHJldHJpZXZlIGNvbXBsZXRlIHVzZURlY2lzaW9uPSVkIHByaW9yaXR5PSV1IHRpbWU9JWxs
ZG1zIiwgdXNlRGVjaXNpb24sIG9yaWdpbmFsUmVxdWVzdC5wcmlvcml0eSgpLCBlbGFwc2VkTVMp
OworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEY6Om1vdmUoY2FjaGVFbnRyeSkpOworCisg
ICAgICAgIGlmIChtX3N0YXRpc3RpY3MpCisgICAgICAgICAgICBtX3N0YXRpc3RpY3MtPnJlY29y
ZFJldHJpZXZlZENhY2hlZEVudHJ5KHdlYlBhZ2VJRCwgc3RvcmFnZUtleSwgb3JpZ2luYWxSZXF1
ZXN0LCB1c2VEZWNpc2lvbik7CisgICAgICAgIHJldHVybiB1c2VEZWNpc2lvbiA8PSBVc2VEZWNp
c2lvbjo6VmFsaWRhdGU7CiAgICAgfSk7CiB9CiAKQEAgLTM1Niw3ICsyOTgsOSBAQCB2b2lkIENh
Y2hlOjpzdG9yZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBhdXRvIHN0b3JhZ2VFbnRyeSA9IGVuY29kZVN0b3JhZ2VFbnRyeShvcmlnaW5hbFJl
cXVlc3QsIHJlc3BvbnNlLCBXVEY6Om1vdmUocmVzcG9uc2VEYXRhKSk7CisgICAgRW50cnkgY2Fj
aGVFbnRyeShtYWtlQ2FjaGVLZXkob3JpZ2luYWxSZXF1ZXN0KSwgcmVzcG9uc2UsIFdURjo6bW92
ZShyZXNwb25zZURhdGEpLCBjb2xsZWN0VmFyeWluZ1JlcXVlc3RIZWFkZXJzKG9yaWdpbmFsUmVx
dWVzdCwgcmVzcG9uc2UpKTsKKworICAgIGF1dG8gc3RvcmFnZUVudHJ5ID0gY2FjaGVFbnRyeS5l
bmNvZGUoKTsKIAogICAgIG1fc3RvcmFnZS0+c3RvcmUoc3RvcmFnZUVudHJ5LCBbY29tcGxldGlv
bkhhbmRsZXJdKGJvb2wgc3VjY2VzcywgY29uc3QgRGF0YSYgYm9keURhdGEpIHsKICAgICAgICAg
TWFwcGVkQm9keSBtYXBwZWRCb2R5OwpAQCAtMzczLDE2ICszMTcsMTggQEAgdm9pZCBDYWNoZTo6
c3RvcmUoY29uc3QgV2ViQ29yZTo6UmVzb3VyYwogICAgIH0pOwogfQogCi12b2lkIENhY2hlOjp1
cGRhdGUoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiBvcmlnaW5hbFJlcXVlc3QsIGNv
bnN0IEVudHJ5JiBlbnRyeSwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYgdmFsaWRh
dGluZ1Jlc3BvbnNlKQordm9pZCBDYWNoZTo6dXBkYXRlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
UmVxdWVzdCYgb3JpZ2luYWxSZXF1ZXN0LCBjb25zdCBFbnRyeSYgZXhpc3RpbmdFbnRyeSwgY29u
c3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYgdmFsaWRhdGluZ1Jlc3BvbnNlKQogewogICAg
IExPRyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpIHVwZGF0aW5nICVzIiwgb3JpZ2lu
YWxSZXF1ZXN0LnVybCgpLnN0cmluZygpLmxhdGluMSgpLmRhdGEoKSk7CiAKLSAgICBXZWJDb3Jl
OjpSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlID0gZW50cnkucmVzcG9uc2U7CisgICAgV2ViQ29y
ZTo6UmVzb3VyY2VSZXNwb25zZSByZXNwb25zZSA9IGV4aXN0aW5nRW50cnkucmVzcG9uc2UoKTsK
ICAgICBXZWJDb3JlOjp1cGRhdGVSZXNwb25zZUhlYWRlcnNBZnRlclJldmFsaWRhdGlvbihyZXNw
b25zZSwgdmFsaWRhdGluZ1Jlc3BvbnNlKTsKIAotICAgIGF1dG8gdXBkYXRlRW50cnkgPSBlbmNv
ZGVTdG9yYWdlRW50cnkob3JpZ2luYWxSZXF1ZXN0LCByZXNwb25zZSwgZW50cnkuYnVmZmVyKTsK
KyAgICBFbnRyeSB1cGRhdGVFbnRyeShleGlzdGluZ0VudHJ5LmtleSgpLCByZXNwb25zZSwgZXhp
c3RpbmdFbnRyeS5idWZmZXIoKSwgY29sbGVjdFZhcnlpbmdSZXF1ZXN0SGVhZGVycyhvcmlnaW5h
bFJlcXVlc3QsIHJlc3BvbnNlKSk7CiAKLSAgICBtX3N0b3JhZ2UtPnVwZGF0ZSh1cGRhdGVFbnRy
eSwgZW50cnkuc3RvcmFnZUVudHJ5LCBbXShib29sIHN1Y2Nlc3MsIGNvbnN0IERhdGEmKSB7Cisg
ICAgYXV0byB1cGRhdGVTdG9yYWdlRW50cnkgPSB1cGRhdGVFbnRyeS5lbmNvZGUoKTsKKworICAg
IG1fc3RvcmFnZS0+dXBkYXRlKHVwZGF0ZVN0b3JhZ2VFbnRyeSwgZXhpc3RpbmdFbnRyeS5zb3Vy
Y2VTdG9yYWdlRW50cnkoKSwgW10oYm9vbCBzdWNjZXNzLCBjb25zdCBEYXRhJikgewogICAgICAg
ICBMT0coTmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQcm9jZXNzKSB1cGRhdGVkLCBzdWNjZXNzPSVk
Iiwgc3VjY2Vzcyk7CiAgICAgfSk7CiB9CkBAIC0zOTgsMjAgKzM0NCwxNyBAQCB2b2lkIENhY2hl
Ojp0cmF2ZXJzZShzdGQ6OmZ1bmN0aW9uPHZvaWQgCiB7CiAgICAgQVNTRVJUKGlzRW5hYmxlZCgp
KTsKIAotICAgIG1fc3RvcmFnZS0+dHJhdmVyc2UoW3RyYXZlcnNlSGFuZGxlcl0oY29uc3QgU3Rv
cmFnZTo6RW50cnkqIGVudHJ5KSB7Ci0gICAgICAgIGlmICghZW50cnkpIHsKKyAgICBtX3N0b3Jh
Z2UtPnRyYXZlcnNlKFt0cmF2ZXJzZUhhbmRsZXJdKGNvbnN0IFN0b3JhZ2U6OkVudHJ5KiBzdG9y
YWdlRW50cnkpIHsKKyAgICAgICAgaWYgKCFzdG9yYWdlRW50cnkpIHsKICAgICAgICAgICAgIHRy
YXZlcnNlSGFuZGxlcihudWxscHRyKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
Ci0gICAgICAgIEVudHJ5IGNhY2hlRW50cnk7Ci0gICAgICAgIGNhY2hlRW50cnkuc3RvcmFnZUVu
dHJ5ID0gKmVudHJ5OwotCi0gICAgICAgIERlY29kZXIgZGVjb2RlcihjYWNoZUVudHJ5LnN0b3Jh
Z2VFbnRyeS5oZWFkZXIuZGF0YSgpLCBjYWNoZUVudHJ5LnN0b3JhZ2VFbnRyeS5oZWFkZXIuc2l6
ZSgpKTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShjYWNoZUVudHJ5LnJlc3BvbnNlKSkK
KyAgICAgICAgYXV0byBjYWNoZUVudHJ5ID0gRW50cnk6OmRlY29kZSgqc3RvcmFnZUVudHJ5KTsK
KyAgICAgICAgaWYgKCFjYWNoZUVudHJ5KQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAg
IHRyYXZlcnNlSGFuZGxlcigmY2FjaGVFbnRyeSk7CisgICAgICAgIHRyYXZlcnNlSGFuZGxlcihj
YWNoZUVudHJ5LmdldCgpKTsKICAgICB9KTsKIH0KIApAQCAtNDIwLDQxICszNjMsNiBAQCBTdHJp
bmcgQ2FjaGU6OmR1bXBGaWxlUGF0aCgpIGNvbnN0CiAgICAgcmV0dXJuIFdlYkNvcmU6OnBhdGhC
eUFwcGVuZGluZ0NvbXBvbmVudChtX3N0b3JhZ2UtPmJhc2VEaXJlY3RvcnlQYXRoKCksICJkdW1w
Lmpzb24iKTsKIH0KIAotc3RhdGljIGJvb2wgZW50cnlBc0pTT04oU3RyaW5nQnVpbGRlciYganNv
biwgY29uc3QgU3RvcmFnZTo6RW50cnkmIGVudHJ5KQotewotICAgIERlY29kZXIgZGVjb2Rlcihl
bnRyeS5oZWFkZXIuZGF0YSgpLCBlbnRyeS5oZWFkZXIuc2l6ZSgpKTsKLSAgICBXZWJDb3JlOjpS
ZXNvdXJjZVJlc3BvbnNlIGNhY2hlZFJlc3BvbnNlOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
Y2FjaGVkUmVzcG9uc2UpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAganNvbi5hcHBlbmQo
IntcbiIpOwotICAgIGpzb24uYXBwZW5kKCJcImhhc2hcIjogIik7Ci0gICAgSlNDOjphcHBlbmRR
dW90ZWRKU09OU3RyaW5nVG9CdWlsZGVyKGpzb24sIGVudHJ5LmtleS5oYXNoQXNTdHJpbmcoKSk7
Ci0gICAganNvbi5hcHBlbmQoIixcbiIpOwotICAgIGpzb24uYXBwZW5kKCJcInBhcnRpdGlvblwi
OiAiKTsKLSAgICBKU0M6OmFwcGVuZFF1b3RlZEpTT05TdHJpbmdUb0J1aWxkZXIoanNvbiwgZW50
cnkua2V5LnBhcnRpdGlvbigpKTsKLSAgICBqc29uLmFwcGVuZCgiLFxuIik7Ci0gICAganNvbi5h
cHBlbmQoIlwidGltZXN0YW1wXCI6ICIpOwotICAgIGpzb24uYXBwZW5kTnVtYmVyKGVudHJ5LnRp
bWVTdGFtcC5jb3VudCgpKTsKLSAgICBqc29uLmFwcGVuZCgiLFxuIik7Ci0gICAganNvbi5hcHBl
bmQoIlwiVVJMXCI6ICIpOwotICAgIEpTQzo6YXBwZW5kUXVvdGVkSlNPTlN0cmluZ1RvQnVpbGRl
cihqc29uLCBjYWNoZWRSZXNwb25zZS51cmwoKS5zdHJpbmcoKSk7Ci0gICAganNvbi5hcHBlbmQo
IixcbiIpOwotICAgIGpzb24uYXBwZW5kKCJcImhlYWRlcnNcIjoge1xuIik7Ci0gICAgYm9vbCBm
aXJzdEhlYWRlciA9IHRydWU7Ci0gICAgZm9yIChhdXRvJiBoZWFkZXIgOiBjYWNoZWRSZXNwb25z
ZS5odHRwSGVhZGVyRmllbGRzKCkpIHsKLSAgICAgICAgaWYgKCFmaXJzdEhlYWRlcikKLSAgICAg
ICAgICAgIGpzb24uYXBwZW5kKCIsXG4iKTsKLSAgICAgICAgZmlyc3RIZWFkZXIgPSBmYWxzZTsK
LSAgICAgICAganNvbi5hcHBlbmQoIiAgICAiKTsKLSAgICAgICAgSlNDOjphcHBlbmRRdW90ZWRK
U09OU3RyaW5nVG9CdWlsZGVyKGpzb24sIGhlYWRlci5rZXkpOwotICAgICAgICBqc29uLmFwcGVu
ZCgiOiAiKTsKLSAgICAgICAgSlNDOjphcHBlbmRRdW90ZWRKU09OU3RyaW5nVG9CdWlsZGVyKGpz
b24sIGhlYWRlci52YWx1ZSk7Ci0gICAgfQotICAgIGpzb24uYXBwZW5kKCJcbn1cbiIpOwotICAg
IGpzb24uYXBwZW5kKCJ9Iik7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIHZvaWQgQ2FjaGU6OmR1
bXBDb250ZW50c1RvRmlsZSgpCiB7CiAgICAgaWYgKCFtX3N0b3JhZ2UpCkBAIC00NzAsOCArMzc4
LDExIEBAIHZvaWQgQ2FjaGU6OmR1bXBDb250ZW50c1RvRmlsZSgpCiAgICAgICAgICAgICBXZWJD
b3JlOjpjbG9zZUZpbGUoaGFuZGxlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQor
ICAgICAgICBhdXRvIGNhY2hlRW50cnkgPSBFbnRyeTo6ZGVjb2RlKCplbnRyeSk7CisgICAgICAg
IGlmICghY2FjaGVFbnRyeSkKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgU3RyaW5nQnVp
bGRlciBqc29uOwotICAgICAgICBpZiAoIWVudHJ5QXNKU09OKGpzb24sICplbnRyeSkpCisgICAg
ICAgIGlmICghY2FjaGVFbnRyeS0+YXNKU09OKGpzb24pKQogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICBqc29uLmFwcGVuZCgiLFxuIik7CiAgICAgICAgIGF1dG8gd3JpdGVEYXRhID0ganNv
bi50b1N0cmluZygpLnV0ZjgoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5oCShyZXZpc2lvbiAxODE5NTcpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCiAKKyNp
bmNsdWRlICJOZXR3b3JrQ2FjaGVFbnRyeS5oIgogI2luY2x1ZGUgIk5ldHdvcmtDYWNoZVN0b3Jh
Z2UuaCIKICNpbmNsdWRlICJTaGFyZWFibGVSZXNvdXJjZS5oIgogI2luY2x1ZGUgPFdlYkNvcmUv
UmVzb3VyY2VSZXNwb25zZS5oPgpAQCAtNTQsMTYgKzU1LDYgQEAgc3RydWN0IE1hcHBlZEJvZHkg
ewogI2VuZGlmCiB9OwogCi1zdHJ1Y3QgRW50cnkgewotICAgIFN0b3JhZ2U6OkVudHJ5IHN0b3Jh
Z2VFbnRyeTsKLSAgICBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlOwotICAgIFJl
ZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+IGJ1ZmZlcjsKLSNpZiBFTkFCTEUoU0hBUkVBQkxF
X1JFU09VUkNFKQotICAgIFNoYXJlYWJsZVJlc291cmNlOjpIYW5kbGUgc2hhcmVhYmxlUmVzb3Vy
Y2VIYW5kbGU7Ci0jZW5kaWYKLSAgICBib29sIG5lZWRzUmV2YWxpZGF0aW9uOwotfTsKLQogZW51
bSBjbGFzcyBSZXRyaWV2ZURlY2lzaW9uIHsKICAgICBZZXMsCiAgICAgTm9EdWVUb0hUVFBNZXRo
b2QsCkBAIC04MCwxMSArNzEsMTIgQEAgZW51bSBjbGFzcyBTdG9yZURlY2lzaW9uIHsKICAgICBO
b0R1ZVRvSFRUUFN0YXR1c0NvZGUKIH07CiAKLWVudW0gY2xhc3MgQ2FjaGVkRW50cnlSZXVzZUZh
aWx1cmUgewotICAgIE5vbmUsCi0gICAgVmFyeWluZ0hlYWRlck1pc21hdGNoLAotICAgIE1pc3Np
bmdWYWxpZGF0b3JGaWVsZHMsCi0gICAgT3RoZXIsCitlbnVtIGNsYXNzIFVzZURlY2lzaW9uIHsK
KyAgICBVc2UsCisgICAgVmFsaWRhdGUsCisgICAgTm9EdWVUb1ZhcnlpbmdIZWFkZXJNaXNtYXRj
aCwKKyAgICBOb0R1ZVRvTWlzc2luZ1ZhbGlkYXRvckZpZWxkcywKKyAgICBOb0R1ZVRvRGVjb2Rl
RmFpbHVyZSwKIH07CiAKIGNsYXNzIENhY2hlIHsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUVudHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVFbnRyeS5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3Jr
Q2FjaGVFbnRyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxODMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTmV0d29ya0NhY2hlLmgiCisKKyNp
bmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiTmV0d29ya0NhY2hlRW5jb2Rlci5oIgorI2lu
Y2x1ZGUgIk5ldHdvcmtDYWNoZURlY29kZXIuaCIKKyNpbmNsdWRlICJOZXR3b3JrQ2FjaGVDb2Rl
cnMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU09OT2JqZWN0Lmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NoYXJlZEJ1ZmZl
ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKworI2lmIEVOQUJMRShO
RVRXT1JLX0NBQ0hFKQorCituYW1lc3BhY2UgV2ViS2l0IHsKK25hbWVzcGFjZSBOZXR3b3JrQ2Fj
aGUgeworCitFbnRyeTo6RW50cnkoY29uc3QgS2V5JiBrZXksIGNvbnN0IFdlYkNvcmU6OlJlc291
cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiYmIGJ1
ZmZlciwgVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4+IHZhcnlpbmdSZXF1ZXN0SGVh
ZGVycykKKyAgICA6IG1fa2V5KGtleSkKKyAgICAsIG1fdGltZVN0YW1wKHN0ZDo6Y2hyb25vOjpk
dXJhdGlvbl9jYXN0PHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM+KHN0ZDo6Y2hyb25vOjpzeXN0
ZW1fY2xvY2s6Om5vdygpLnRpbWVfc2luY2VfZXBvY2goKSkpCisgICAgLCBtX3Jlc3BvbnNlKHJl
c3BvbnNlKQorICAgICwgbV92YXJ5aW5nUmVxdWVzdEhlYWRlcnModmFyeWluZ1JlcXVlc3RIZWFk
ZXJzKQorICAgICwgbV9idWZmZXIoV1RGOjptb3ZlKGJ1ZmZlcikpCit7Cit9CisKK0VudHJ5OjpF
bnRyeShjb25zdCBTdG9yYWdlOjpFbnRyeSYgc3RvcmFnZUVudHJ5KQorICAgIDogbV9rZXkoc3Rv
cmFnZUVudHJ5LmtleSkKKyAgICAsIG1fdGltZVN0YW1wKHN0b3JhZ2VFbnRyeS50aW1lU3RhbXAp
CisgICAgLCBtX3NvdXJjZVN0b3JhZ2VFbnRyeShzdG9yYWdlRW50cnkpCit7Cit9CisKK1N0b3Jh
Z2U6OkVudHJ5IEVudHJ5OjplbmNvZGUoKSBjb25zdAoreworICAgIEVuY29kZXIgZW5jb2RlcjsK
KyAgICBlbmNvZGVyIDw8IG1fcmVzcG9uc2U7CisKKyAgICBib29sIGhhc1ZhcnlpbmdSZXF1ZXN0
SGVhZGVycyA9ICFtX3ZhcnlpbmdSZXF1ZXN0SGVhZGVycy5pc0VtcHR5KCk7CisgICAgZW5jb2Rl
ciA8PCBoYXNWYXJ5aW5nUmVxdWVzdEhlYWRlcnM7CisgICAgaWYgKGhhc1ZhcnlpbmdSZXF1ZXN0
SGVhZGVycykKKyAgICAgICAgZW5jb2RlciA8PCBtX3ZhcnlpbmdSZXF1ZXN0SGVhZGVyczsKKwor
ICAgIGVuY29kZXIuZW5jb2RlQ2hlY2tzdW0oKTsKKworICAgIERhdGEgaGVhZGVyKGVuY29kZXIu
YnVmZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6ZSgpKTsKKyAgICBEYXRhIGJvZHk7CisgICAgaWYg
KG1fYnVmZmVyKQorICAgICAgICBib2R5ID0geyByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4
X3QqPihtX2J1ZmZlci0+ZGF0YSgpKSwgbV9idWZmZXItPnNpemUoKSB9OworCisgICAgcmV0dXJu
IHsgbV9rZXksIG1fdGltZVN0YW1wLCBoZWFkZXIsIGJvZHkgfTsKK30KKworc3RkOjp1bmlxdWVf
cHRyPEVudHJ5PiBFbnRyeTo6ZGVjb2RlKGNvbnN0IFN0b3JhZ2U6OkVudHJ5JiBzdG9yYWdlRW50
cnkpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPEVudHJ5PiBlbnRyeShuZXcgRW50cnkoc3RvcmFn
ZUVudHJ5KSk7CisKKyAgICBEZWNvZGVyIGRlY29kZXIoc3RvcmFnZUVudHJ5LmhlYWRlci5kYXRh
KCksIHN0b3JhZ2VFbnRyeS5oZWFkZXIuc2l6ZSgpKTsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KGVudHJ5LT5tX3Jlc3BvbnNlKSkgeworICAgICAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5ldHdv
cmtQcm9jZXNzKSByZXNwb25zZSBkZWNvZGluZyBmYWlsZWRcbiIpOworICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICB9CisgICAgZW50cnktPm1fcmVzcG9uc2Uuc2V0U291cmNlKFdlYkNvcmU6
OlJlc291cmNlUmVzcG9uc2U6OlNvdXJjZTo6RGlza0NhY2hlKTsKKworICAgIGJvb2wgaGFzVmFy
eWluZ1JlcXVlc3RIZWFkZXJzOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaGFzVmFyeWluZ1Jl
cXVlc3RIZWFkZXJzKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBpZiAoaGFzVmFy
eWluZ1JlcXVlc3RIZWFkZXJzKSB7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZW50cnkt
Pm1fdmFyeWluZ1JlcXVlc3RIZWFkZXJzKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIH0KKworICAgIGlmICghZGVjb2Rlci52ZXJpZnlDaGVja3N1bSgpKSB7CisgICAgICAgIExP
RyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpIGNoZWNrc3VtIHZlcmlmaWNhdGlvbiBm
YWlsdXJlXG4iKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgcmV0dXJu
IGVudHJ5OworfQorCit2b2lkIEVudHJ5Ojppbml0aWFsaXplQnVmZmVyRnJvbVN0b3JhZ2VFbnRy
eSgpIGNvbnN0Cit7CisgICAgYXV0byogZGF0YSA9IG1fc291cmNlU3RvcmFnZUVudHJ5LmJvZHku
ZGF0YSgpOworICAgIHNpemVfdCBzaXplID0gbV9zb3VyY2VTdG9yYWdlRW50cnkuYm9keS5zaXpl
KCk7CisjaWYgRU5BQkxFKFNIQVJFQUJMRV9SRVNPVVJDRSkKKyAgICBSZWZQdHI8U2hhcmVkTWVt
b3J5PiBzaGFyZWRNZW1vcnkgPSBtX3NvdXJjZVN0b3JhZ2VFbnRyeS5ib2R5LmlzTWFwKCkgPyBT
aGFyZWRNZW1vcnk6OmNyZWF0ZUZyb21WTUJ1ZmZlcihjb25zdF9jYXN0PHVpbnQ4X3QqPihkYXRh
KSwgc2l6ZSkgOiBudWxscHRyOworICAgIFJlZlB0cjxTaGFyZWFibGVSZXNvdXJjZT4gc2hhcmVh
YmxlUmVzb3VyY2UgPSBzaGFyZWRNZW1vcnkgPyBTaGFyZWFibGVSZXNvdXJjZTo6Y3JlYXRlKHNo
YXJlZE1lbW9yeS5yZWxlYXNlKCksIDAsIG1fc291cmNlU3RvcmFnZUVudHJ5LmJvZHkuc2l6ZSgp
KSA6IG51bGxwdHI7CisKKyAgICBpZiAoc2hhcmVhYmxlUmVzb3VyY2UgJiYgc2hhcmVhYmxlUmVz
b3VyY2UtPmNyZWF0ZUhhbmRsZShtX3NoYXJlYWJsZVJlc291cmNlSGFuZGxlKSkKKyAgICAgICAg
bV9idWZmZXIgPSBtX3NoYXJlYWJsZVJlc291cmNlSGFuZGxlLnRyeVdyYXBJblNoYXJlZEJ1ZmZl
cigpOworI2VuZGlmCisgICAgaWYgKCFtX2J1ZmZlcikKKyAgICAgICAgbV9idWZmZXIgPSBXZWJD
b3JlOjpTaGFyZWRCdWZmZXI6OmNyZWF0ZShkYXRhLCBzaXplKTsKK30KKworV2ViQ29yZTo6U2hh
cmVkQnVmZmVyKiBFbnRyeTo6YnVmZmVyKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fYnVmZmVyKQor
ICAgICAgICBpbml0aWFsaXplQnVmZmVyRnJvbVN0b3JhZ2VFbnRyeSgpOworCisgICAgcmV0dXJu
IG1fYnVmZmVyLmdldCgpOworfQorCitTaGFyZWFibGVSZXNvdXJjZTo6SGFuZGxlJiBFbnRyeTo6
c2hhcmVhYmxlUmVzb3VyY2VIYW5kbGUoKSBjb25zdAoreworICAgIGlmICghbV9idWZmZXIpCisg
ICAgICAgIGluaXRpYWxpemVCdWZmZXJGcm9tU3RvcmFnZUVudHJ5KCk7CisKKyAgICByZXR1cm4g
bV9zaGFyZWFibGVSZXNvdXJjZUhhbmRsZTsKK30KKworYm9vbCBFbnRyeTo6bmVlZHNWYWxpZGF0
aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9yZXNwb25zZS5zb3VyY2UoKSA9PSBXZWJDb3Jl
OjpSZXNvdXJjZVJlc3BvbnNlOjpTb3VyY2U6OkRpc2tDYWNoZUFmdGVyVmFsaWRhdGlvbjsKK30K
Kwordm9pZCBFbnRyeTo6c2V0TmVlZHNWYWxpZGF0aW9uKCkKK3sKKyAgICBBU1NFUlQobV9yZXNw
b25zZS5zb3VyY2UoKSA9PSBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlOjpTb3VyY2U6OkRpc2tD
YWNoZSk7CisgICAgbV9yZXNwb25zZS5zZXRTb3VyY2UoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25z
ZTo6U291cmNlOjpEaXNrQ2FjaGVBZnRlclZhbGlkYXRpb24pOworfQorCitib29sIEVudHJ5Ojph
c0pTT04oU3RyaW5nQnVpbGRlciYganNvbikKK3sKKyAgICBqc29uLmFwcGVuZCgie1xuIik7Cisg
ICAganNvbi5hcHBlbmQoIlwiaGFzaFwiOiAiKTsKKyAgICBKU0M6OmFwcGVuZFF1b3RlZEpTT05T
dHJpbmdUb0J1aWxkZXIoanNvbiwgbV9rZXkuaGFzaEFzU3RyaW5nKCkpOworICAgIGpzb24uYXBw
ZW5kKCIsXG4iKTsKKyAgICBqc29uLmFwcGVuZCgiXCJwYXJ0aXRpb25cIjogIik7CisgICAgSlND
OjphcHBlbmRRdW90ZWRKU09OU3RyaW5nVG9CdWlsZGVyKGpzb24sIG1fa2V5LnBhcnRpdGlvbigp
KTsKKyAgICBqc29uLmFwcGVuZCgiLFxuIik7CisgICAganNvbi5hcHBlbmQoIlwidGltZXN0YW1w
XCI6ICIpOworICAgIGpzb24uYXBwZW5kTnVtYmVyKG1fdGltZVN0YW1wLmNvdW50KCkpOworICAg
IGpzb24uYXBwZW5kKCIsXG4iKTsKKyAgICBqc29uLmFwcGVuZCgiXCJVUkxcIjogIik7CisgICAg
SlNDOjphcHBlbmRRdW90ZWRKU09OU3RyaW5nVG9CdWlsZGVyKGpzb24sIG1fcmVzcG9uc2UudXJs
KCkuc3RyaW5nKCkpOworICAgIGpzb24uYXBwZW5kKCIsXG4iKTsKKyAgICBqc29uLmFwcGVuZCgi
XCJoZWFkZXJzXCI6IHtcbiIpOworICAgIGJvb2wgZmlyc3RIZWFkZXIgPSB0cnVlOworICAgIGZv
ciAoYXV0byYgaGVhZGVyIDogbV9yZXNwb25zZS5odHRwSGVhZGVyRmllbGRzKCkpIHsKKyAgICAg
ICAgaWYgKCFmaXJzdEhlYWRlcikKKyAgICAgICAgICAgIGpzb24uYXBwZW5kKCIsXG4iKTsKKyAg
ICAgICAgZmlyc3RIZWFkZXIgPSBmYWxzZTsKKyAgICAgICAganNvbi5hcHBlbmQoIiAgICAiKTsK
KyAgICAgICAgSlNDOjphcHBlbmRRdW90ZWRKU09OU3RyaW5nVG9CdWlsZGVyKGpzb24sIGhlYWRl
ci5rZXkpOworICAgICAgICBqc29uLmFwcGVuZCgiOiAiKTsKKyAgICAgICAgSlNDOjphcHBlbmRR
dW90ZWRKU09OU3RyaW5nVG9CdWlsZGVyKGpzb24sIGhlYWRlci52YWx1ZSk7CisgICAgfQorICAg
IGpzb24uYXBwZW5kKCJcbn1cbiIpOworICAgIGpzb24uYXBwZW5kKCJ9Iik7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK30KK30KKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVFbnRyeS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUVudHJ5LmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVF
bnRyeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIE5ldHdvcmtDYWNoZUVudHJ5X2gKKyNkZWZpbmUgTmV0d29ya0NhY2hlRW50cnlfaAorCisj
aWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCisKKyNpbmNsdWRlICJOZXR3b3JrQ2FjaGVTdG9yYWdl
LmgiCisjaW5jbHVkZSAiU2hhcmVhYmxlUmVzb3VyY2UuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1Jl
c291cmNlUmVzcG9uc2UuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgUmVz
b3VyY2VSZXF1ZXN0OworY2xhc3MgU2hhcmVkQnVmZmVyOworfQorCituYW1lc3BhY2UgV2ViS2l0
IHsKK25hbWVzcGFjZSBOZXR3b3JrQ2FjaGUgeworCitjbGFzcyBFbnRyeSB7CisgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoRW50cnkpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoK
KyAgICBFbnRyeShjb25zdCBLZXkmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiwg
UmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4mJiwgVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcs
IFN0cmluZz4+IHZhcnlpbmdSZXF1ZXN0SGVhZGVycyk7CisKKyAgICBTdG9yYWdlOjpFbnRyeSBl
bmNvZGUoKSBjb25zdDsKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEVudHJ5PiBkZWNvZGUo
Y29uc3QgU3RvcmFnZTo6RW50cnkmKTsKKworICAgIGNvbnN0IEtleSYga2V5KCkgY29uc3QgeyBy
ZXR1cm4gbV9rZXk7IH0KKyAgICBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIHRpbWVTdGFtcCgp
IGNvbnN0IHsgcmV0dXJuIG1fdGltZVN0YW1wOyB9CisgICAgY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXNwb25zZSYgcmVzcG9uc2UoKSBjb25zdCB7IHJldHVybiBtX3Jlc3BvbnNlOyB9CisgICAg
Y29uc3QgVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4+IHZhcnlpbmdSZXF1ZXN0SGVh
ZGVycygpIGNvbnN0IHsgcmV0dXJuIG1fdmFyeWluZ1JlcXVlc3RIZWFkZXJzOyB9CisKKyAgICBX
ZWJDb3JlOjpTaGFyZWRCdWZmZXIqIGJ1ZmZlcigpIGNvbnN0OworI2lmIEVOQUJMRShTSEFSRUFC
TEVfUkVTT1VSQ0UpCisgICAgU2hhcmVhYmxlUmVzb3VyY2U6OkhhbmRsZSYgc2hhcmVhYmxlUmVz
b3VyY2VIYW5kbGUoKSBjb25zdDsKKyNlbmRpZgorCisgICAgYm9vbCBuZWVkc1ZhbGlkYXRpb24o
KSBjb25zdDsKKyAgICB2b2lkIHNldE5lZWRzVmFsaWRhdGlvbigpOworCisgICAgY29uc3QgU3Rv
cmFnZTo6RW50cnkmIHNvdXJjZVN0b3JhZ2VFbnRyeSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNl
U3RvcmFnZUVudHJ5OyB9CisKKyAgICBib29sIGFzSlNPTihTdHJpbmdCdWlsZGVyJiBqc29uKTsK
KworcHJpdmF0ZToKKyAgICBFbnRyeShjb25zdCBTdG9yYWdlOjpFbnRyeSYpOworICAgIHZvaWQg
aW5pdGlhbGl6ZUJ1ZmZlckZyb21TdG9yYWdlRW50cnkoKSBjb25zdDsKKworICAgIEtleSBtX2tl
eTsKKyAgICBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIG1fdGltZVN0YW1wOworICAgIFdlYkNv
cmU6OlJlc291cmNlUmVzcG9uc2UgbV9yZXNwb25zZTsKKyAgICBWZWN0b3I8c3RkOjpwYWlyPFN0
cmluZywgU3RyaW5nPj4gbV92YXJ5aW5nUmVxdWVzdEhlYWRlcnM7CisKKyAgICBtdXRhYmxlIFJl
ZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+IG1fYnVmZmVyOworI2lmIEVOQUJMRShTSEFSRUFC
TEVfUkVTT1VSQ0UpCisgICAgbXV0YWJsZSBTaGFyZWFibGVSZXNvdXJjZTo6SGFuZGxlIG1fc2hh
cmVhYmxlUmVzb3VyY2VIYW5kbGU7CisjZW5kaWYKKworICAgIFN0b3JhZ2U6OkVudHJ5IG1fc291
cmNlU3RvcmFnZUVudHJ5IHsgfTsKK307CisKK30KK30KKworI2VuZGlmCisjZW5kaWYKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0YXRpc3Rp
Y3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9O
ZXR3b3JrQ2FjaGVTdGF0aXN0aWNzLmgJKHJldmlzaW9uIDE4MTk1NykKKysrIFNvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0YXRpc3RpY3MuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCByZWNvcmROb3RDYWNo
aW5nUmVzcG9uc2UoY29uc3QgS2V5JiwgU3RvcmVEZWNpc2lvbik7CiAgICAgdm9pZCByZWNvcmRO
b3RVc2luZ0NhY2hlRm9yUmVxdWVzdCh1aW50NjRfdCB3ZWJQYWdlSUQsIGNvbnN0IEtleSYsIGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIFJldHJpZXZlRGVjaXNpb24pOwogICAgIHZv
aWQgcmVjb3JkUmV0cmlldmFsRmFpbHVyZSh1aW50NjRfdCB3ZWJQYWdlSUQsIGNvbnN0IEtleSYs
IGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpOwotICAgIHZvaWQgcmVjb3JkUmV0cmll
dmVkQ2FjaGVkRW50cnkodWludDY0X3Qgd2ViUGFnZUlELCBjb25zdCBLZXkmLCBjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBDYWNoZWRFbnRyeVJldXNlRmFpbHVyZSk7CisgICAgdm9p
ZCByZWNvcmRSZXRyaWV2ZWRDYWNoZWRFbnRyeSh1aW50NjRfdCB3ZWJQYWdlSUQsIGNvbnN0IEtl
eSYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIFVzZURlY2lzaW9uKTsKIAogcHJp
dmF0ZToKICAgICBleHBsaWNpdCBTdGF0aXN0aWNzKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VQYXRo
KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNo
ZVN0YXRpc3RpY3NDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdGF0aXN0aWNzQ29jb2EubW0JKHJldmlzaW9uIDE4
MTk1NykKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNo
ZVN0YXRpc3RpY3NDb2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtMjYyLDMyICsyNjIsMzMgQEAg
dm9pZCBTdGF0aXN0aWNzOjpyZWNvcmRSZXRyaWV2YWxGYWlsdXJlKAogICAgIH0pOwogfQogCi1z
dGF0aWMgU3RyaW5nIGNhY2hlZEVudHJ5UmV1c2VGYWlsdXJlVG9EaWFnbm9zdGljS2V5KENhY2hl
ZEVudHJ5UmV1c2VGYWlsdXJlIGZhaWx1cmUpCitzdGF0aWMgU3RyaW5nIGNhY2hlZEVudHJ5UmV1
c2VGYWlsdXJlVG9EaWFnbm9zdGljS2V5KFVzZURlY2lzaW9uIGRlY2lzaW9uKQogewotICAgIHN3
aXRjaCAoZmFpbHVyZSkgewotICAgIGNhc2UgQ2FjaGVkRW50cnlSZXVzZUZhaWx1cmU6OlZhcnlp
bmdIZWFkZXJNaXNtYXRjaDoKKyAgICBzd2l0Y2ggKGRlY2lzaW9uKSB7CisgICAgY2FzZSBVc2VE
ZWNpc2lvbjo6Tm9EdWVUb1ZhcnlpbmdIZWFkZXJNaXNtYXRjaDoKICAgICAgICAgcmV0dXJuIFdl
YkNvcmU6OkRpYWdub3N0aWNMb2dnaW5nS2V5czo6dmFyeWluZ0hlYWRlck1pc21hdGNoS2V5KCk7
Ci0gICAgY2FzZSBDYWNoZWRFbnRyeVJldXNlRmFpbHVyZTo6TWlzc2luZ1ZhbGlkYXRvckZpZWxk
czoKKyAgICBjYXNlIFVzZURlY2lzaW9uOjpOb0R1ZVRvTWlzc2luZ1ZhbGlkYXRvckZpZWxkczoK
ICAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkRpYWdub3N0aWNMb2dnaW5nS2V5czo6bWlzc2luZ1Zh
bGlkYXRvckZpZWxkc0tleSgpOwotICAgIGNhc2UgQ2FjaGVkRW50cnlSZXVzZUZhaWx1cmU6Ok90
aGVyOgorICAgIGNhc2UgVXNlRGVjaXNpb246Ok5vRHVlVG9EZWNvZGVGYWlsdXJlOgogICAgICAg
ICByZXR1cm4gV2ViQ29yZTo6RGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpvdGhlcktleSgpOwotICAg
IGNhc2UgQ2FjaGVkRW50cnlSZXVzZUZhaWx1cmU6Ok5vbmU6CisgICAgY2FzZSBVc2VEZWNpc2lv
bjo6VXNlOgorICAgIGNhc2UgVXNlRGVjaXNpb246OlZhbGlkYXRlOgogICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBlbXB0eVN0
cmluZygpOwogfQogCi12b2lkIFN0YXRpc3RpY3M6OnJlY29yZFJldHJpZXZlZENhY2hlZEVudHJ5
KHVpbnQ2NF90IHdlYlBhZ2VJRCwgY29uc3QgS2V5JiBrZXksIGNvbnN0IFdlYkNvcmU6OlJlc291
cmNlUmVxdWVzdCYgcmVxdWVzdCwgQ2FjaGVkRW50cnlSZXVzZUZhaWx1cmUgZmFpbHVyZSkKK3Zv
aWQgU3RhdGlzdGljczo6cmVjb3JkUmV0cmlldmVkQ2FjaGVkRW50cnkodWludDY0X3Qgd2ViUGFn
ZUlELCBjb25zdCBLZXkmIGtleSwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1
ZXN0LCBVc2VEZWNpc2lvbiBkZWNpc2lvbikKIHsKICAgICBXZWJDb3JlOjpVUkwgcmVxdWVzdFVS
TCA9IHJlcXVlc3QudXJsKCk7Ci0gICAgaWYgKGZhaWx1cmUgPT0gQ2FjaGVkRW50cnlSZXVzZUZh
aWx1cmU6Ok5vbmUpIHsKKyAgICBpZiAoZGVjaXNpb24gPT0gVXNlRGVjaXNpb246OlVzZSB8fCBk
ZWNpc2lvbiA9PSBVc2VEZWNpc2lvbjo6VmFsaWRhdGUpIHsKICAgICAgICAgTE9HKE5ldHdvcmtD
YWNoZSwgIihOZXR3b3JrUHJvY2Vzcykgd2ViUGFnZUlEICVsbHU6ICVzIGlzIGluIHRoZSBjYWNo
ZSBhbmQgaXMgdXNlZCIsIHdlYlBhZ2VJRCwgcmVxdWVzdFVSTC5zdHJpbmcoKS5hc2NpaSgpLmRh
dGEoKSk7CiAgICAgICAgIE5ldHdvcmtQcm9jZXNzOjpzaW5nbGV0b24oKS5sb2dEaWFnbm9zdGlj
TWVzc2FnZVdpdGhSZXN1bHQod2ViUGFnZUlELCBXZWJDb3JlOjpEaWFnbm9zdGljTG9nZ2luZ0tl
eXM6Om5ldHdvcmtDYWNoZUtleSgpLCBXZWJDb3JlOjpEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnJl
dHJpZXZhbEtleSgpLCBXZWJDb3JlOjpEaWFnbm9zdGljTG9nZ2luZ1Jlc3VsdFBhc3MsIFdlYkNv
cmU6OlNob3VsZFNhbXBsZTo6WWVzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFN0
cmluZyBkaWFnbm9zdGljS2V5ID0gY2FjaGVkRW50cnlSZXVzZUZhaWx1cmVUb0RpYWdub3N0aWNL
ZXkoZmFpbHVyZSk7CisgICAgU3RyaW5nIGRpYWdub3N0aWNLZXkgPSBjYWNoZWRFbnRyeVJldXNl
RmFpbHVyZVRvRGlhZ25vc3RpY0tleShkZWNpc2lvbik7CiAgICAgTE9HKE5ldHdvcmtDYWNoZSwg
IihOZXR3b3JrUHJvY2Vzcykgd2ViUGFnZUlEICVsbHU6ICVzIGlzIGluIHRoZSBjYWNoZSBidXQg
d2Fzbid0IHVzZWQsIHJlYXNvbjogJXMiLCB3ZWJQYWdlSUQsIHJlcXVlc3RVUkwuc3RyaW5nKCku
YXNjaWkoKS5kYXRhKCksIGRpYWdub3N0aWNLZXkudXRmOCgpLmRhdGEoKSk7CiAgICAgTmV0d29y
a1Byb2Nlc3M6OnNpbmdsZXRvbigpLmxvZ0RpYWdub3N0aWNNZXNzYWdlV2l0aFZhbHVlKHdlYlBh
Z2VJRCwgV2ViQ29yZTo6RGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpuZXR3b3JrQ2FjaGVLZXkoKSwg
V2ViQ29yZTo6RGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjp1bnVzYWJsZUNhY2hlZEVudHJ5S2V5KCks
IGRpYWdub3N0aWNLZXksIFdlYkNvcmU6OlNob3VsZFNhbXBsZTo6WWVzKTsKIH0KSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJl
dmlzaW9uIDE4MTk1NykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTc2Niw2ICsxNzY2LDggQEAKIAkJRTFFNTUy
QzUxNkFFMDY1RjAwNEVENjUzIC8qIFNhbmRib3hJbml0aWFsaXphdGlvblBhcmFtZXRlcnMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxRTU1MkMzMTZB
RTA2NUUwMDRFRDY1MyAvKiBTYW5kYm94SW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzLmggKi87IH07
CiAJCUUxRUU1M0UzMTFGOENGQzAwMENDQkVFNCAvKiBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JD
bGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUx
RUU1M0RDMTFGOENGOUYwMENDQkVFNCAvKiBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQu
aCAqLzsgfTsKIAkJRTFFRTUzRTcxMUY4Q0ZGQjAwQ0NCRUU0IC8qIEluamVjdGVkQnVuZGxlUGFn
ZUVkaXRvckNsaWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFMUVFNTNFNjExRjhDRkZCMDBDQ0JFRTQgLyogSW5qZWN0ZWRCdW5kbGVQYWdlRWRp
dG9yQ2xpZW50LmNwcCAqLzsgfTsKKwkJRTQxM0Y1OUQxQUMxQURDNDAwMzQ1MzYwIC8qIE5ldHdv
cmtDYWNoZUVudHJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFNDEzRjU5QjFBQzFBREI2MDAzNDUzNjAgLyogTmV0d29ya0NhY2hlRW50cnkuaCAqLzsg
fTsKKwkJRTQxM0Y1OUYxQUMxQUY5RDAwMzQ1MzYwIC8qIE5ldHdvcmtDYWNoZUVudHJ5LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0MTNGNTlFMUFD
MUFGOUQwMDM0NTM2MCAvKiBOZXR3b3JrQ2FjaGVFbnRyeS5jcHAgKi87IH07CiAJCUU0MkUwNjBG
MUFBNzUyMzQwMEIxMTY5OSAvKiBOZXR3b3JrQ2FjaGVJT0NoYW5uZWxDb2NvYS5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0MkUwNjBEMUFBNzUwRTUw
MEIxMTY5OSAvKiBOZXR3b3JrQ2FjaGVJT0NoYW5uZWxDb2NvYS5tbSAqLzsgfTsKIAkJRTQyRTA2
MTAxQUE3NTIzQjAwQjExNjk5IC8qIE5ldHdvcmtDYWNoZUlPQ2hhbm5lbC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQyRTA2MEIxQUE3NDQwRDAwQjEx
Njk5IC8qIE5ldHdvcmtDYWNoZUlPQ2hhbm5lbC5oICovOyB9OwogCQlFNDJFMDYxMjFBQTc1QUJE
MDBCMTE2OTkgLyogTmV0d29ya0NhY2hlRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTQyRTA2MTExQUE3NUFCRDAwQjExNjk5IC8qIE5ldHdvcmtD
YWNoZURhdGEuaCAqLzsgfTsKQEAgLTQwMTUsNiArNDAxNyw4IEBACiAJCUUxRUU1M0U2MTFGOENG
RkIwMENDQkVFNCAvKiBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xp
ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTFGRUYzOUExOTBGNzZGMzAw
NzMxNjU4IC8qIGNvbS5hcHBsZS5XZWJLaXQuRGF0YWJhc2VzLnNiLmluICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IGNvbS5hcHBs
ZS5XZWJLaXQuRGF0YWJhc2VzLnNiLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlF
MUZFRjM5QzE5MEY3OTFDMDA3MzE2NTggLyogRGF0YWJhc2VQcm9jZXNzSU9TLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRGF0YWJhc2VQcm9jZXNzSU9TLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNDEzRjU5QjFBQzFBREI2MDAzNDUzNjAgLyog
TmV0d29ya0NhY2hlRW50cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmV0
d29ya0NhY2hlRW50cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTQxM0Y1OUUx
QUMxQUY5RDAwMzQ1MzYwIC8qIE5ldHdvcmtDYWNoZUVudHJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5ldHdvcmtDYWNoZUVudHJ5LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRTQyRTA2MEIxQUE3NDQwRDAwQjExNjk5IC8qIE5ldHdvcmtDYWNo
ZUlPQ2hhbm5lbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOZXR3b3JrQ2Fj
aGVJT0NoYW5uZWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQyRTA2MEQxQUE3
NTBFNTAwQjExNjk5IC8qIE5ldHdvcmtDYWNoZUlPQ2hhbm5lbENvY29hLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gTmV0d29ya0NhY2hlSU9DaGFubmVsQ29jb2Eu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0MkUwNjExMUFBNzVBQkQwMEIxMTY5
OSAvKiBOZXR3b3JrQ2FjaGVEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IE5ldHdvcmtDYWNoZURhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTc0NzAs
NiArNzQ3NCw4IEBACiAJCQkJRTQ4OUQyODcxQTBBMkRCODAwNzhDMDZBIC8qIE5ldHdvcmtDYWNo
ZURlY29kZXIuaCAqLywKIAkJCQlFNDg5RDI4ODFBMEEyREI4MDA3OEMwNkEgLyogTmV0d29ya0Nh
Y2hlRW5jb2Rlci5jcHAgKi8sCiAJCQkJRTQ4OUQyODkxQTBBMkRCODAwNzhDMDZBIC8qIE5ldHdv
cmtDYWNoZUVuY29kZXIuaCAqLywKKwkJCQlFNDEzRjU5RTFBQzFBRjlEMDAzNDUzNjAgLyogTmV0
d29ya0NhY2hlRW50cnkuY3BwICovLAorCQkJCUU0MTNGNTlCMUFDMUFEQjYwMDM0NTM2MCAvKiBO
ZXR3b3JrQ2FjaGVFbnRyeS5oICovLAogCQkJCTgzNEIyNTBFMUE4MzFBOEQwMENGQjE1MCAvKiBO
ZXR3b3JrQ2FjaGVGaWxlU3lzdGVtUG9zaXguaCAqLywKIAkJCQlFNDJFMDYwQjFBQTc0NDBEMDBC
MTE2OTkgLyogTmV0d29ya0NhY2hlSU9DaGFubmVsLmggKi8sCiAJCQkJRTQyRTA2MEQxQUE3NTBF
NTAwQjExNjk5IC8qIE5ldHdvcmtDYWNoZUlPQ2hhbm5lbENvY29hLm1tICovLApAQCAtNzgyOSw2
ICs3ODM1LDcgQEAKIAkJCQkxQTRBOUYzMzEyQjg0NEUyMDA4RkU5ODQgLyogUGx1Z2luUXVpcmtz
LmggaW4gSGVhZGVycyAqLywKIAkJCQk3Q0Q2MjI3ODE3MzlEODYzMDA1QkQ3RkYgLyogUGx1Z2lu
U2FuZGJveFByb2ZpbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNkZCN0FGMTFFNjRCNjgwMERC
MTM3MSAvKiBQbHVnaW5WaWV3LmggaW4gSGVhZGVycyAqLywKKwkJCQlFNDEzRjU5RDFBQzFBREM0
MDAzNDUzNjAgLyogTmV0d29ya0NhY2hlRW50cnkuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxQ0Mx
QjkwMTJEN0VBREYwMDYyNTgzOCAvKiBQcmludEluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTg2
Rjk1MzY1MThGRjU4RjUwMDFEQjJFRiAvKiBQcm9jZXNzQXNzZXJ0aW9uLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzFBN0M1ODExMzZFMTlDMDBGQjcxNjcgLyogUHJvY2Vzc0xhdW5jaGVyLmggaW4g
SGVhZGVycyAqLywKQEAgLTkzODMsNiArOTM5MCw3IEBACiAJCQkJMUEyRDk1NzAxMjg0ODU2NDAw
MUVCOTYyIC8qIENoaWxkUHJvY2Vzcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzgyODM3QjE2
QjM2QTRGMDBBMjc4RkUgLyogQ2hpbGRQcm9jZXNzRW50cnlQb2ludC5tbSBpbiBTb3VyY2VzICov
LAogCQkJCUE3RTkzQ0VEMTkyNTMzMTEwMEExREM0OCAvKiBDaGlsZFByb2Nlc3NJT1MubW0gaW4g
U291cmNlcyAqLywKKwkJCQlFNDEzRjU5RjFBQzFBRjlEMDAzNDUzNjAgLyogTmV0d29ya0NhY2hl
RW50cnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOUY1NEY4OEYxNjQ4OEU4NzAwN0RGODFBIC8q
IENoaWxkUHJvY2Vzc01hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUUxNTEzQzY2MTY2RUFCQjIw
MDE0OUZDQiAvKiBDaGlsZFByb2Nlc3NQcm94eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTJB
NEIwRTE1ODZBMjI0MDA5MEM5RTkgLyogQ29sb3JTcGFjZURhdGEubW0gaW4gU291cmNlcyAqLywK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>249413</attachid>
            <date>2015-03-25 10:49:43 -0700</date>
            <delta_ts>2015-03-25 13:21:31 -0700</delta_ts>
            <desc>patch</desc>
            <filename>disk-cache-validation-factor-4.patch</filename>
            <type>text/plain</type>
            <size>44289</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MTk2MykKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU3IEBACisyMDE1LTAzLTI1ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBTZXBhcmF0ZSBlbnRyeSBkZWNv
ZGluZyBmcm9tIHZhbGlkYXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE0MzA1MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIE1ha2UgTmV0d29ya0NhY2hlOjpDYWNoZSBhIGNsYXNzIGFuZCBtb3ZlIGl0
IHRvIGEgZmlsZSBvZiBpdHMgb3duLgorICAgICAgICBNb3ZlIHRoZSBlbmNvZGluZy9kZWNvZGlu
ZyBjb2RlIHRoZXJlLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3Mu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpmZXRjaERpc2tDYWNoZUVudHJpZXMpOgorICAgICAgICAo
V2ViS2l0OjpjbGVhckRpc2tDYWNoZUVudHJpZXMpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNz
L05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OnNlbmRSZXBseVRv
U3luY2hyb25vdXNSZXF1ZXN0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9h
ZGVyOjpzdGFydCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c2Vu
ZEJ1ZmZlck1heWJlQWJvcnRpbmcpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VM
b2FkZXI6OmRpZFJldHJpZXZlQ2FjaGVFbnRyeSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtS
ZXNvdXJjZUxvYWRlcjo6dmFsaWRhdGVDYWNoZUVudHJ5KToKKyAgICAgICAgKiBOZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9j
YWNoZS9OZXR3b3JrQ2FjaGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OmNv
bGxlY3RWYXJ5aW5nUmVxdWVzdEhlYWRlcnMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2Fj
aGU6OmNhblVzZSk6CisKKyAgICAgICAgICAgIEZvY3VzZWQgZnVuY3Rpb24gZm9yIGRlY2lkaW5n
IGlmIHdlIGNhbiB1c2UgYSBjYWNoZSBlbnRyeSBhbmQgaWYgaXQgbmVlZHMgdmFsaWRhdGlvbi4K
KworICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkNhY2hlOjpyZXRyaWV2ZSk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6Q2FjaGU6OnN0b3JlKToKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya0NhY2hlOjpDYWNoZTo6dXBkYXRlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a0NhY2hlOjpDYWNoZTo6dHJhdmVyc2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6
OmVuY29kZVN0b3JhZ2VFbnRyeSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtD
YWNoZTo6ZGVjb2RlU3RvcmFnZUVudHJ5KTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9OZXR3b3JrQ2FjaGVFbnRyeS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
Q2FjaGU6OkVudHJ5OjpFbnRyeSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RW50
cnk6OmVuY29kZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RW50cnk6OmRlY29k
ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RW50cnk6OmluaXRpYWxpemVCdWZm
ZXJGcm9tU3RvcmFnZUVudHJ5KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpFbnRy
eTo6YnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpFbnRyeTo6c2hhcmVh
YmxlUmVzb3VyY2VIYW5kbGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkVudHJ5
OjpuZWVkc1ZhbGlkYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkVudHJ5
OjpzZXROZWVkc1ZhbGlkYXRpb24pOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZUVudHJ5Lmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6
OkVudHJ5OjprZXkpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkVudHJ5Ojp0aW1l
U3RhbXApOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkVudHJ5OjpyZXNwb25zZSk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RW50cnk6OnZhcnlpbmdSZXF1ZXN0SGVh
ZGVycyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6RW50cnk6OnNvdXJjZVN0b3Jh
Z2VFbnRyeSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3Rh
dGlzdGljcy5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0
YXRpc3RpY3NDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpjYWNoZWRF
bnRyeVJldXNlRmFpbHVyZVRvRGlhZ25vc3RpY0tleSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtDYWNoZTo6U3RhdGlzdGljczo6cmVjb3JkUmV0cmlldmVkQ2FjaGVkRW50cnkpOgorICAgICAg
ICAqIFdlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKwogMjAxNS0wMy0yNSAgRGF2
aWQgSHlhdHQgIDxoeWF0dEBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIGEgcHJlZiB0byBlbmFi
bGUgdGhlIG5ldyBibG9jay1pbnNpZGUtaW5saW5lIG1vZGVsCkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCShyZXZpc2lvbiAxODE5
NTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI4Nyw3ICsyODcsNyBAQCBzdGF0aWMgdm9pZCBmZXRjaERpc2tD
YWNoZUVudHJpZXMoU2Vzc2lvCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICBvcmlnaW5zLT5hZGQoU2VjdXJpdHlPcmlnaW46OmNyZWF0ZShlbnRy
eS0+cmVzcG9uc2UudXJsKCkpKTsKKyAgICAgICAgICAgIG9yaWdpbnMtPmFkZChTZWN1cml0eU9y
aWdpbjo6Y3JlYXRlKGVudHJ5LT5yZXNwb25zZSgpLnVybCgpKSk7CiAgICAgICAgIH0pOwogCiAg
ICAgICAgIHJldHVybjsKQEAgLTM3OSw4ICszNzksOCBAQCBzdGF0aWMgdm9pZCBjbGVhckRpc2tD
YWNoZUVudHJpZXMoY29uc3QgCiAgICAgICAgIE5ldHdvcmtDYWNoZTo6c2luZ2xldG9uKCkudHJh
dmVyc2UoW2NvbXBsZXRpb25IYW5kbGVyLCBvcmlnaW5zVG9EZWxldGUsIGNhY2hlS2V5c1RvRGVs
ZXRlXShjb25zdCBOZXR3b3JrQ2FjaGU6OkVudHJ5ICplbnRyeSkgewogCiAgICAgICAgICAgICBp
ZiAoZW50cnkpIHsKLSAgICAgICAgICAgICAgICBpZiAob3JpZ2luc1RvRGVsZXRlLT5jb250YWlu
cyhTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKGVudHJ5LT5yZXNwb25zZS51cmwoKSkpKQotICAgICAg
ICAgICAgICAgICAgICBjYWNoZUtleXNUb0RlbGV0ZS0+YXBwZW5kKGVudHJ5LT5zdG9yYWdlRW50
cnkua2V5KTsKKyAgICAgICAgICAgICAgICBpZiAob3JpZ2luc1RvRGVsZXRlLT5jb250YWlucyhT
ZWN1cml0eU9yaWdpbjo6Y3JlYXRlKGVudHJ5LT5yZXNwb25zZSgpLnVybCgpKSkpCisgICAgICAg
ICAgICAgICAgICAgIGNhY2hlS2V5c1RvRGVsZXRlLT5hcHBlbmQoZW50cnktPmtleSgpKTsKICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmNw
cAkocmV2aXNpb24gMTgxOTU3KQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0
d29ya1Jlc291cmNlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjksNyArNjksNyBAQCBz
dHJ1Y3QgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpTeW5jaHJvbm91CiAgICAgV2ViQ29yZTo6UmVz
b3VyY2VFcnJvciBlcnJvcjsKIH07CiAKLXN0YXRpYyB2b2lkIHNlbmRSZXBseVRvU3luY2hyb25v
dXNSZXF1ZXN0KE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6U3luY2hyb25vdXNMb2FkRGF0YSYgZGF0
YSwgV2ViQ29yZTo6U2hhcmVkQnVmZmVyKiBidWZmZXIpCitzdGF0aWMgdm9pZCBzZW5kUmVwbHlU
b1N5bmNocm9ub3VzUmVxdWVzdChOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OlN5bmNocm9ub3VzTG9h
ZERhdGEmIGRhdGEsIGNvbnN0IFdlYkNvcmU6OlNoYXJlZEJ1ZmZlciogYnVmZmVyKQogewogICAg
IEFTU0VSVChkYXRhLmRlbGF5ZWRSZXBseSk7CiAgICAgQVNTRVJUKCFkYXRhLnJlc3BvbnNlLmlz
TnVsbCgpIHx8ICFkYXRhLmVycm9yLmlzTnVsbCgpKTsKQEAgLTE1MCwxMSArMTUwLDExIEBAIHZv
aWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpzdGFydCgpCiAgICAgICAgICAgICBsb2FkZXItPnN0
YXJ0TmV0d29ya0xvYWQoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAg
ICBpZiAobG9hZGVyLT5tX3BhcmFtZXRlcnMubmVlZHNDZXJ0aWZpY2F0ZUluZm8gJiYgIWVudHJ5
LT5yZXNwb25zZS5jb250YWluc0NlcnRpZmljYXRlSW5mbygpKSB7CisgICAgICAgIGlmIChsb2Fk
ZXItPm1fcGFyYW1ldGVycy5uZWVkc0NlcnRpZmljYXRlSW5mbyAmJiAhZW50cnktPnJlc3BvbnNl
KCkuY29udGFpbnNDZXJ0aWZpY2F0ZUluZm8oKSkgewogICAgICAgICAgICAgbG9hZGVyLT5zdGFy
dE5ldHdvcmtMb2FkKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAg
aWYgKGVudHJ5LT5uZWVkc1JldmFsaWRhdGlvbikgeworICAgICAgICBpZiAoZW50cnktPm5lZWRz
VmFsaWRhdGlvbigpKSB7CiAgICAgICAgICAgICBsb2FkZXItPnZhbGlkYXRlQ2FjaGVFbnRyeShX
VEY6Om1vdmUoZW50cnkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtNTI5
LDEzICs1MjksMTMgQEAgdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmJ1ZmZlcmluZ1RpbQog
ICAgIHNlbmRBYm9ydGluZ09uRmFpbHVyZShNZXNzYWdlczo6V2ViUmVzb3VyY2VMb2FkZXI6OkRp
ZFJlY2VpdmVEYXRhKGRhdGFSZWZlcmVuY2UsIGVuY29kZWRMZW5ndGgpKTsKIH0KIAotYm9vbCBO
ZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnNlbmRCdWZmZXJNYXliZUFib3J0aW5nKFdlYkNvcmU6OlNo
YXJlZEJ1ZmZlciYgYnVmZmVyLCBzaXplX3QgZW5jb2RlZERhdGFMZW5ndGgpCitib29sIE5ldHdv
cmtSZXNvdXJjZUxvYWRlcjo6c2VuZEJ1ZmZlck1heWJlQWJvcnRpbmcoY29uc3QgV2ViQ29yZTo6
U2hhcmVkQnVmZmVyJiBidWZmZXIsIHNpemVfdCBlbmNvZGVkRGF0YUxlbmd0aCkKIHsKICAgICBB
U1NFUlQoIWlzU3luY2hyb25vdXMoKSk7CiAKICNpZiBQTEFURk9STShDT0NPQSkKICAgICBTaGFy
ZWFibGVSZXNvdXJjZTo6SGFuZGxlIHNoYXJlYWJsZVJlc291cmNlSGFuZGxlOwotICAgIE5ldHdv
cmtSZXNvdXJjZUxvYWRlcjo6dHJ5R2V0U2hhcmVhYmxlSGFuZGxlRnJvbVNoYXJlZEJ1ZmZlcihz
aGFyZWFibGVSZXNvdXJjZUhhbmRsZSwgYnVmZmVyKTsKKyAgICBOZXR3b3JrUmVzb3VyY2VMb2Fk
ZXI6OnRyeUdldFNoYXJlYWJsZUhhbmRsZUZyb21TaGFyZWRCdWZmZXIoc2hhcmVhYmxlUmVzb3Vy
Y2VIYW5kbGUsIGNvbnN0X2Nhc3Q8V2ViQ29yZTo6U2hhcmVkQnVmZmVyJj4oYnVmZmVyKSk7CiAg
ICAgaWYgKCFzaGFyZWFibGVSZXNvdXJjZUhhbmRsZS5pc051bGwoKSkgewogICAgICAgICBzZW5k
KE1lc3NhZ2VzOjpXZWJSZXNvdXJjZUxvYWRlcjo6RGlkUmVjZWl2ZVJlc291cmNlKHNoYXJlYWJs
ZVJlc291cmNlSGFuZGxlLCBjdXJyZW50VGltZSgpKSk7CiAgICAgICAgIGFib3J0KCk7CkBAIC01
NDMsNyArNTQzLDcgQEAgYm9vbCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnNlbmRCdWZmZXJNYQog
ICAgIH0KICNlbmRpZgogCi0gICAgSVBDOjpTaGFyZWRCdWZmZXJEYXRhUmVmZXJlbmNlIGRhdGFS
ZWZlcmVuY2UoJmJ1ZmZlcik7CisgICAgSVBDOjpTaGFyZWRCdWZmZXJEYXRhUmVmZXJlbmNlIGRh
dGFSZWZlcmVuY2UoJmNvbnN0X2Nhc3Q8V2ViQ29yZTo6U2hhcmVkQnVmZmVyJj4oYnVmZmVyKSk7
CiAgICAgcmV0dXJuIHNlbmRBYm9ydGluZ09uRmFpbHVyZShNZXNzYWdlczo6V2ViUmVzb3VyY2VM
b2FkZXI6OkRpZFJlY2VpdmVEYXRhKGRhdGFSZWZlcmVuY2UsIGVuY29kZWREYXRhTGVuZ3RoKSk7
CiB9CiAKQEAgLTU1MSwxNyArNTUxLDE3IEBAIGJvb2wgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpz
ZW5kQnVmZmVyTWEKIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRSZXRyaWV2ZUNhY2hl
RW50cnkoc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtDYWNoZTo6RW50cnk+IGVudHJ5KQogewogICAg
IGlmIChpc1N5bmNocm9ub3VzKCkpIHsKLSAgICAgICAgbV9zeW5jaHJvbm91c0xvYWREYXRhLT5y
ZXNwb25zZSA9IGVudHJ5LT5yZXNwb25zZTsKLSAgICAgICAgc2VuZFJlcGx5VG9TeW5jaHJvbm91
c1JlcXVlc3QoKm1fc3luY2hyb25vdXNMb2FkRGF0YSwgZW50cnktPmJ1ZmZlci5nZXQoKSk7Cisg
ICAgICAgIG1fc3luY2hyb25vdXNMb2FkRGF0YS0+cmVzcG9uc2UgPSBlbnRyeS0+cmVzcG9uc2Uo
KTsKKyAgICAgICAgc2VuZFJlcGx5VG9TeW5jaHJvbm91c1JlcXVlc3QoKm1fc3luY2hyb25vdXNM
b2FkRGF0YSwgZW50cnktPmJ1ZmZlcigpKTsKICAgICB9IGVsc2UgewotICAgICAgICBzZW5kQWJv
cnRpbmdPbkZhaWx1cmUoTWVzc2FnZXM6OldlYlJlc291cmNlTG9hZGVyOjpEaWRSZWNlaXZlUmVz
cG9uc2UoZW50cnktPnJlc3BvbnNlLCBtX3BhcmFtZXRlcnMuaXNNYWluUmVzb3VyY2UpKTsKKyAg
ICAgICAgc2VuZEFib3J0aW5nT25GYWlsdXJlKE1lc3NhZ2VzOjpXZWJSZXNvdXJjZUxvYWRlcjo6
RGlkUmVjZWl2ZVJlc3BvbnNlKGVudHJ5LT5yZXNwb25zZSgpLCBtX3BhcmFtZXRlcnMuaXNNYWlu
UmVzb3VyY2UpKTsKIAogI2lmIEVOQUJMRShTSEFSRUFCTEVfUkVTT1VSQ0UpCi0gICAgICAgIGlm
ICghZW50cnktPnNoYXJlYWJsZVJlc291cmNlSGFuZGxlLmlzTnVsbCgpKQotICAgICAgICAgICAg
c2VuZChNZXNzYWdlczo6V2ViUmVzb3VyY2VMb2FkZXI6OkRpZFJlY2VpdmVSZXNvdXJjZShlbnRy
eS0+c2hhcmVhYmxlUmVzb3VyY2VIYW5kbGUsIGN1cnJlbnRUaW1lKCkpKTsKKyAgICAgICAgaWYg
KCFlbnRyeS0+c2hhcmVhYmxlUmVzb3VyY2VIYW5kbGUoKS5pc051bGwoKSkKKyAgICAgICAgICAg
IHNlbmQoTWVzc2FnZXM6OldlYlJlc291cmNlTG9hZGVyOjpEaWRSZWNlaXZlUmVzb3VyY2UoZW50
cnktPnNoYXJlYWJsZVJlc291cmNlSGFuZGxlKCksIGN1cnJlbnRUaW1lKCkpKTsKICAgICAgICAg
ZWxzZSB7CiAjZW5kaWYKLSAgICAgICAgICAgIGJvb2wgc2hvdWxkQ29udGludWUgPSBzZW5kQnVm
ZmVyTWF5YmVBYm9ydGluZygqZW50cnktPmJ1ZmZlciwgZW50cnktPmJ1ZmZlci0+c2l6ZSgpKTsK
KyAgICAgICAgICAgIGJvb2wgc2hvdWxkQ29udGludWUgPSBzZW5kQnVmZmVyTWF5YmVBYm9ydGlu
ZygqZW50cnktPmJ1ZmZlcigpLCBlbnRyeS0+YnVmZmVyKCktPnNpemUoKSk7CiAgICAgICAgICAg
ICBpZiAoIXNob3VsZENvbnRpbnVlKQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
ICAgIHNlbmQoTWVzc2FnZXM6OldlYlJlc291cmNlTG9hZGVyOjpEaWRGaW5pc2hSZXNvdXJjZUxv
YWQoY3VycmVudFRpbWUoKSkpOwpAQCAtNTc3LDggKzU3Nyw4IEBAIHZvaWQgTmV0d29ya1Jlc291
cmNlTG9hZGVyOjp2YWxpZGF0ZUNhY2gKIHsKICAgICBBU1NFUlQoIW1faGFuZGxlKTsKIAotICAg
IFN0cmluZyBlVGFnID0gZW50cnktPnJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZChXZWJDb3JlOjpI
VFRQSGVhZGVyTmFtZTo6RVRhZyk7Ci0gICAgU3RyaW5nIGxhc3RNb2RpZmllZCA9IGVudHJ5LT5y
ZXNwb25zZS5odHRwSGVhZGVyRmllbGQoV2ViQ29yZTo6SFRUUEhlYWRlck5hbWU6Okxhc3RNb2Rp
ZmllZCk7CisgICAgU3RyaW5nIGVUYWcgPSBlbnRyeS0+cmVzcG9uc2UoKS5odHRwSGVhZGVyRmll
bGQoV2ViQ29yZTo6SFRUUEhlYWRlck5hbWU6OkVUYWcpOworICAgIFN0cmluZyBsYXN0TW9kaWZp
ZWQgPSBlbnRyeS0+cmVzcG9uc2UoKS5odHRwSGVhZGVyRmllbGQoV2ViQ29yZTo6SFRUUEhlYWRl
ck5hbWU6Okxhc3RNb2RpZmllZCk7CiAgICAgaWYgKCFlVGFnLmlzRW1wdHkoKSkKICAgICAgICAg
bV9jdXJyZW50UmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQoV2ViQ29yZTo6SFRUUEhlYWRlck5h
bWU6OklmTm9uZU1hdGNoLCBlVGFnKTsKICAgICBpZiAoIWxhc3RNb2RpZmllZC5pc0VtcHR5KCkp
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2Fk
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
UmVzb3VyY2VMb2FkZXIuaAkocmV2aXNpb24gMTgxOTU3KQorKysgU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2
MSw3ICsxNjEsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBzdGFydEJ1ZmZlcmluZ1RpbWVySWZO
ZWVkZWQoKTsKICAgICB2b2lkIGJ1ZmZlcmluZ1RpbWVyRmlyZWQoKTsKLSAgICBib29sIHNlbmRC
dWZmZXJNYXliZUFib3J0aW5nKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlciYsIHNpemVfdCBlbmNvZGVk
RGF0YUxlbmd0aCk7CisgICAgYm9vbCBzZW5kQnVmZmVyTWF5YmVBYm9ydGluZyhjb25zdCBXZWJD
b3JlOjpTaGFyZWRCdWZmZXImLCBzaXplX3QgZW5jb2RlZERhdGFMZW5ndGgpOwogCiAgICAgYm9v
bCBpc1N5bmNocm9ub3VzKCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmNwcAkocmV2aXNpb24gMTgxOTU3
KQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjksMjEgKzI5LDE3IEBACiAjaWYgRU5BQkxFKE5FVFdPUktf
Q0FDSEUpCiAKICNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiTmV0d29ya0NhY2hlQ29k
ZXJzLmgiCiAjaW5jbHVkZSAiTmV0d29ya0NhY2hlU3RhdGlzdGljcy5oIgogI2luY2x1ZGUgIk5l
dHdvcmtDYWNoZVN0b3JhZ2UuaCIKLSNpbmNsdWRlICJOZXR3b3JrUmVzb3VyY2VMb2FkZXIuaCIK
LSNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9KU09OT2JqZWN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9DYWNoZVZhbGlkYXRpb24uaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVTeXN0ZW0uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0hUVFBI
ZWFkZXJOYW1lcy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUNvb2tpZUphci5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvUmVzb3VyY2VSZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlc3BvbnNl
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TaGFyZWRCdWZmZXIuaD4KICNpbmNsdWRlIDx3dGYvTmV2
ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvU3RyaW5nSGFzaGVyLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiAjaWYgUExBVEZPUk0oQ09DT0EpCkBAIC0xMTAs
MzcgKzEwNiwyMCBAQCBzdGF0aWMgU3RyaW5nIGhlYWRlclZhbHVlRm9yVmFyeShjb25zdCBXCiAg
ICAgcmV0dXJuIHJlcXVlc3QuaHR0cEhlYWRlckZpZWxkKGhlYWRlck5hbWUpOwogfQogCi1zdGF0
aWMgU3RvcmFnZTo6RW50cnkgZW5jb2RlU3RvcmFnZUVudHJ5KGNvbnN0IFdlYkNvcmU6OlJlc291
cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYgcmVz
cG9uc2UsIFBhc3NSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiByZXNwb25zZURhdGEpCitz
dGF0aWMgVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4+IGNvbGxlY3RWYXJ5aW5nUmVx
dWVzdEhlYWRlcnMoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25z
dCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKIHsKLSAgICBFbmNvZGVyIGVu
Y29kZXI7Ci0gICAgZW5jb2RlciA8PCByZXNwb25zZTsKLQogICAgIFN0cmluZyB2YXJ5VmFsdWUg
PSByZXNwb25zZS5odHRwSGVhZGVyRmllbGQoV2ViQ29yZTo6SFRUUEhlYWRlck5hbWU6OlZhcnkp
OwotICAgIGJvb2wgaGFzVmFyeWluZ1JlcXVlc3RIZWFkZXJzID0gIXZhcnlWYWx1ZS5pc0VtcHR5
KCk7Ci0KLSAgICBlbmNvZGVyIDw8IGhhc1ZhcnlpbmdSZXF1ZXN0SGVhZGVyczsKLQotICAgIGlm
IChoYXNWYXJ5aW5nUmVxdWVzdEhlYWRlcnMpIHsKLSAgICAgICAgVmVjdG9yPFN0cmluZz4gdmFy
eWluZ0hlYWRlck5hbWVzOwotICAgICAgICB2YXJ5VmFsdWUuc3BsaXQoJywnLCBmYWxzZSwgdmFy
eWluZ0hlYWRlck5hbWVzKTsKLQotICAgICAgICBWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgU3Ry
aW5nPj4gdmFyeWluZ1JlcXVlc3RIZWFkZXJzOwotICAgICAgICBmb3IgKGF1dG8mIHZhcnlIZWFk
ZXJOYW1lIDogdmFyeWluZ0hlYWRlck5hbWVzKSB7Ci0gICAgICAgICAgICBTdHJpbmcgaGVhZGVy
TmFtZSA9IHZhcnlIZWFkZXJOYW1lLnN0cmlwV2hpdGVTcGFjZSgpOwotICAgICAgICAgICAgU3Ry
aW5nIGhlYWRlclZhbHVlID0gaGVhZGVyVmFsdWVGb3JWYXJ5KHJlcXVlc3QsIGhlYWRlck5hbWUp
OwotICAgICAgICAgICAgdmFyeWluZ1JlcXVlc3RIZWFkZXJzLmFwcGVuZChzdGQ6Om1ha2VfcGFp
cihoZWFkZXJOYW1lLCBoZWFkZXJWYWx1ZSkpOwotICAgICAgICB9Ci0gICAgICAgIGVuY29kZXIg
PDwgdmFyeWluZ1JlcXVlc3RIZWFkZXJzOworICAgIGlmICh2YXJ5VmFsdWUuaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm4geyB9OworICAgIFZlY3RvcjxTdHJpbmc+IHZhcnlpbmdIZWFkZXJOYW1l
czsKKyAgICB2YXJ5VmFsdWUuc3BsaXQoJywnLCBmYWxzZSwgdmFyeWluZ0hlYWRlck5hbWVzKTsK
KyAgICBWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPj4gdmFyeWluZ1JlcXVlc3RIZWFk
ZXJzOworICAgIGZvciAoYXV0byYgdmFyeUhlYWRlck5hbWUgOiB2YXJ5aW5nSGVhZGVyTmFtZXMp
IHsKKyAgICAgICAgU3RyaW5nIGhlYWRlck5hbWUgPSB2YXJ5SGVhZGVyTmFtZS5zdHJpcFdoaXRl
U3BhY2UoKTsKKyAgICAgICAgU3RyaW5nIGhlYWRlclZhbHVlID0gaGVhZGVyVmFsdWVGb3JWYXJ5
KHJlcXVlc3QsIGhlYWRlck5hbWUpOworICAgICAgICB2YXJ5aW5nUmVxdWVzdEhlYWRlcnMuYXBw
ZW5kKHN0ZDo6bWFrZV9wYWlyKGhlYWRlck5hbWUsIGhlYWRlclZhbHVlKSk7CiAgICAgfQotICAg
IGVuY29kZXIuZW5jb2RlQ2hlY2tzdW0oKTsKLQotICAgIGF1dG8gdGltZVN0YW1wID0gc3RkOjpj
aHJvbm86OmR1cmF0aW9uX2Nhc3Q8c3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcz4oc3RkOjpjaHJv
bm86OnN5c3RlbV9jbG9jazo6bm93KCkudGltZV9zaW5jZV9lcG9jaCgpKTsKLSAgICBEYXRhIGhl
YWRlcihlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSk7Ci0gICAgRGF0YSBi
b2R5OwotICAgIGlmIChyZXNwb25zZURhdGEpCi0gICAgICAgIGJvZHkgPSB7IHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHJlc3BvbnNlRGF0YS0+ZGF0YSgpKSwgcmVzcG9uc2VEYXRh
LT5zaXplKCkgfTsKLQotICAgIHJldHVybiB7IG1ha2VDYWNoZUtleShyZXF1ZXN0KSwgdGltZVN0
YW1wLCBoZWFkZXIsIGJvZHkgfTsKKyAgICByZXR1cm4gdmFyeWluZ1JlcXVlc3RIZWFkZXJzOwog
fQogCiBzdGF0aWMgYm9vbCB2ZXJpZnlWYXJ5aW5nUmVxdWVzdEhlYWRlcnMoY29uc3QgVmVjdG9y
PHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4+JiB2YXJ5aW5nUmVxdWVzdEhlYWRlcnMsIGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKQEAgLTE3MCw3NyArMTQ5LDI5IEBA
IHN0YXRpYyBib29sIGNhY2hlUG9saWN5QWxsb3dzRXhwaXJlZChXZWIKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLXN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8RW50cnk+IGRlY29kZVN0b3JhZ2VFbnRy
eShjb25zdCBTdG9yYWdlOjpFbnRyeSYgc3RvcmFnZUVudHJ5LCBjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3QmIHJlcXVlc3QsIENhY2hlZEVudHJ5UmV1c2VGYWlsdXJlJiBmYWlsdXJlKQor
c3RhdGljIFVzZURlY2lzaW9uIGNhblVzZShjb25zdCBFbnRyeSYgZW50cnksIGNvbnN0IFdlYkNv
cmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKIHsKLSAgICBEZWNvZGVyIGRlY29kZXIoc3Rv
cmFnZUVudHJ5LmhlYWRlci5kYXRhKCksIHN0b3JhZ2VFbnRyeS5oZWFkZXIuc2l6ZSgpKTsKLQot
ICAgIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UgY2FjaGVkUmVzcG9uc2U7Ci0gICAgaWYgKCFk
ZWNvZGVyLmRlY29kZShjYWNoZWRSZXNwb25zZSkpIHsKLSAgICAgICAgTE9HKE5ldHdvcmtDYWNo
ZSwgIihOZXR3b3JrUHJvY2VzcykgcmVzcG9uc2UgZGVjb2RpbmcgZmFpbGVkXG4iKTsKLSAgICAg
ICAgZmFpbHVyZSA9IENhY2hlZEVudHJ5UmV1c2VGYWlsdXJlOjpPdGhlcjsKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgYm9vbCBoYXNWYXJ5aW5nUmVxdWVzdEhlYWRlcnM7
Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShoYXNWYXJ5aW5nUmVxdWVzdEhlYWRlcnMpKSB7Ci0g
ICAgICAgIGZhaWx1cmUgPSBDYWNoZWRFbnRyeVJldXNlRmFpbHVyZTo6T3RoZXI7Ci0gICAgICAg
IHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIGlmIChoYXNWYXJ5aW5nUmVxdWVzdEhlYWRl
cnMpIHsKLSAgICAgICAgVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4+IHZhcnlpbmdS
ZXF1ZXN0SGVhZGVyczsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh2YXJ5aW5nUmVxdWVz
dEhlYWRlcnMpKSB7Ci0gICAgICAgICAgICBmYWlsdXJlID0gQ2FjaGVkRW50cnlSZXVzZUZhaWx1
cmU6Ok90aGVyOwotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAoIXZlcmlmeVZhcnlpbmdSZXF1ZXN0SGVhZGVycyh2YXJ5aW5nUmVxdWVzdEhlYWRl
cnMsIHJlcXVlc3QpKSB7Ci0gICAgICAgICAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQ
cm9jZXNzKSB2YXJ5aW5nIGhlYWRlciBtaXNtYXRjaFxuIik7Ci0gICAgICAgICAgICBmYWlsdXJl
ID0gQ2FjaGVkRW50cnlSZXVzZUZhaWx1cmU6OlZhcnlpbmdIZWFkZXJNaXNtYXRjaDsKLSAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmICghZGVjb2Rl
ci52ZXJpZnlDaGVja3N1bSgpKSB7Ci0gICAgICAgIExPRyhOZXR3b3JrQ2FjaGUsICIoTmV0d29y
a1Byb2Nlc3MpIGNoZWNrc3VtIHZlcmlmaWNhdGlvbiBmYWlsdXJlXG4iKTsKLSAgICAgICAgZmFp
bHVyZSA9IENhY2hlZEVudHJ5UmV1c2VGYWlsdXJlOjpPdGhlcjsKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgaWYgKCF2ZXJpZnlWYXJ5aW5nUmVxdWVzdEhlYWRlcnMoZW50cnkudmFyeWlu
Z1JlcXVlc3RIZWFkZXJzKCksIHJlcXVlc3QpKSB7CisgICAgICAgIExPRyhOZXR3b3JrQ2FjaGUs
ICIoTmV0d29ya1Byb2Nlc3MpIHZhcnlpbmcgaGVhZGVyIG1pc21hdGNoXG4iKTsKKyAgICAgICAg
cmV0dXJuIFVzZURlY2lzaW9uOjpOb0R1ZVRvVmFyeWluZ0hlYWRlck1pc21hdGNoOwogICAgIH0K
IAogICAgIGJvb2wgYWxsb3dFeHBpcmVkID0gY2FjaGVQb2xpY3lBbGxvd3NFeHBpcmVkKHJlcXVl
c3QuY2FjaGVQb2xpY3koKSk7Ci0gICAgYXV0byB0aW1lU3RhbXAgPSBzdGQ6OmNocm9ubzo6ZHVy
YXRpb25fY2FzdDxzdGQ6OmNocm9ubzo6ZHVyYXRpb248ZG91YmxlPj4oc3RvcmFnZUVudHJ5LnRp
bWVTdGFtcCk7Ci0gICAgZG91YmxlIGFnZSA9IFdlYkNvcmU6OmNvbXB1dGVDdXJyZW50QWdlKGNh
Y2hlZFJlc3BvbnNlLCB0aW1lU3RhbXAuY291bnQoKSk7Ci0gICAgZG91YmxlIGxpZmV0aW1lID0g
V2ViQ29yZTo6Y29tcHV0ZUZyZXNobmVzc0xpZmV0aW1lRm9ySFRUUEZhbWlseShjYWNoZWRSZXNw
b25zZSwgdGltZVN0YW1wLmNvdW50KCkpOworICAgIGF1dG8gZG91YmxlVGltZVN0YW1wID0gc3Rk
OjpjaHJvbm86OmR1cmF0aW9uPGRvdWJsZT4oZW50cnkudGltZVN0YW1wKCkpOworICAgIGRvdWJs
ZSBhZ2UgPSBXZWJDb3JlOjpjb21wdXRlQ3VycmVudEFnZShlbnRyeS5yZXNwb25zZSgpLCBkb3Vi
bGVUaW1lU3RhbXAuY291bnQoKSk7CisgICAgZG91YmxlIGxpZmV0aW1lID0gV2ViQ29yZTo6Y29t
cHV0ZUZyZXNobmVzc0xpZmV0aW1lRm9ySFRUUEZhbWlseShlbnRyeS5yZXNwb25zZSgpLCBkb3Vi
bGVUaW1lU3RhbXAuY291bnQoKSk7CiAgICAgYm9vbCBpc0V4cGlyZWQgPSBhZ2UgPiBsaWZldGlt
ZTsKICAgICAvLyBXZSBuZXZlciByZXZhbGlkYXRlIGluIHRoZSBjYXNlIG9mIGEgaGlzdG9yeSBu
YXZpZ2F0aW9uIChpLmUuIGFsbG93RXhwaXJlZCBpcyB0cnVlKS4KLSAgICBib29sIG5lZWRzUmV2
YWxpZGF0aW9uID0gIWFsbG93RXhwaXJlZCAmJiAoY2FjaGVkUmVzcG9uc2UuY2FjaGVDb250cm9s
Q29udGFpbnNOb0NhY2hlKCkgfHwgaXNFeHBpcmVkKTsKLQotICAgIGlmIChuZWVkc1JldmFsaWRh
dGlvbikgewotICAgICAgICBib29sIGhhc1ZhbGlkYXRvckZpZWxkcyA9IGNhY2hlZFJlc3BvbnNl
Lmhhc0NhY2hlVmFsaWRhdG9yRmllbGRzKCk7Ci0gICAgICAgIExPRyhOZXR3b3JrQ2FjaGUsICIo
TmV0d29ya1Byb2Nlc3MpIG5lZWRzUmV2YWxpZGF0aW9uIGhhc1ZhbGlkYXRvckZpZWxkcz0lZCBp
c0V4cGlyZWQ9JWQgYWdlPSVmIGxpZmV0aW1lPSVmIiwgaXNFeHBpcmVkLCBoYXNWYWxpZGF0b3JG
aWVsZHMsIGFnZSwgbGlmZXRpbWUpOwotICAgICAgICBpZiAoIWhhc1ZhbGlkYXRvckZpZWxkcykg
ewotICAgICAgICAgICAgZmFpbHVyZSA9IENhY2hlZEVudHJ5UmV1c2VGYWlsdXJlOjpNaXNzaW5n
VmFsaWRhdG9yRmllbGRzOwotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBhdXRvIGVudHJ5ID0gc3RkOjptYWtlX3VuaXF1ZTxFbnRyeT4oKTsKLSAg
ICBlbnRyeS0+c3RvcmFnZUVudHJ5ID0gc3RvcmFnZUVudHJ5OwotICAgIGVudHJ5LT5uZWVkc1Jl
dmFsaWRhdGlvbiA9IG5lZWRzUmV2YWxpZGF0aW9uOworICAgIGJvb2wgbmVlZHNSZXZhbGlkYXRp
b24gPSAhYWxsb3dFeHBpcmVkICYmIChlbnRyeS5yZXNwb25zZSgpLmNhY2hlQ29udHJvbENvbnRh
aW5zTm9DYWNoZSgpIHx8IGlzRXhwaXJlZCk7CisgICAgaWYgKCFuZWVkc1JldmFsaWRhdGlvbikK
KyAgICAgICAgcmV0dXJuIFVzZURlY2lzaW9uOjpVc2U7CisKKyAgICBib29sIGhhc1ZhbGlkYXRv
ckZpZWxkcyA9IGVudHJ5LnJlc3BvbnNlKCkuaGFzQ2FjaGVWYWxpZGF0b3JGaWVsZHMoKTsKKyAg
ICBMT0coTmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQcm9jZXNzKSBuZWVkc1JldmFsaWRhdGlvbiBo
YXNWYWxpZGF0b3JGaWVsZHM9JWQgaXNFeHBpcmVkPSVkIGFnZT0lZiBsaWZldGltZT0lZiIsIGlz
RXhwaXJlZCwgaGFzVmFsaWRhdG9yRmllbGRzLCBhZ2UsIGxpZmV0aW1lKTsKKyAgICBpZiAoIWhh
c1ZhbGlkYXRvckZpZWxkcykKKyAgICAgICAgcmV0dXJuIFVzZURlY2lzaW9uOjpOb0R1ZVRvTWlz
c2luZ1ZhbGlkYXRvckZpZWxkczsKIAotICAgIGNhY2hlZFJlc3BvbnNlLnNldFNvdXJjZShuZWVk
c1JldmFsaWRhdGlvbiA/IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2U6OlNvdXJjZTo6RGlza0Nh
Y2hlQWZ0ZXJWYWxpZGF0aW9uIDogV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZTo6U291cmNlOjpE
aXNrQ2FjaGUpOwotICAgIGVudHJ5LT5yZXNwb25zZSA9IGNhY2hlZFJlc3BvbnNlOwotCi0jaWYg
RU5BQkxFKFNIQVJFQUJMRV9SRVNPVVJDRSkKLSAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBzaGFy
ZWRNZW1vcnkgPSBzdG9yYWdlRW50cnkuYm9keS5pc01hcCgpID8gU2hhcmVkTWVtb3J5OjpjcmVh
dGVGcm9tVk1CdWZmZXIoY29uc3RfY2FzdDx1aW50OF90Kj4oc3RvcmFnZUVudHJ5LmJvZHkuZGF0
YSgpKSwgc3RvcmFnZUVudHJ5LmJvZHkuc2l6ZSgpKSA6IG51bGxwdHI7Ci0gICAgUmVmUHRyPFNo
YXJlYWJsZVJlc291cmNlPiBzaGFyZWFibGVSZXNvdXJjZSA9IHNoYXJlZE1lbW9yeSA/IFNoYXJl
YWJsZVJlc291cmNlOjpjcmVhdGUoc2hhcmVkTWVtb3J5LnJlbGVhc2UoKSwgMCwgc3RvcmFnZUVu
dHJ5LmJvZHkuc2l6ZSgpKSA6IG51bGxwdHI7Ci0KLSAgICBpZiAoc2hhcmVhYmxlUmVzb3VyY2Ug
JiYgc2hhcmVhYmxlUmVzb3VyY2UtPmNyZWF0ZUhhbmRsZShlbnRyeS0+c2hhcmVhYmxlUmVzb3Vy
Y2VIYW5kbGUpKQotICAgICAgICBlbnRyeS0+YnVmZmVyID0gZW50cnktPnNoYXJlYWJsZVJlc291
cmNlSGFuZGxlLnRyeVdyYXBJblNoYXJlZEJ1ZmZlcigpOwotICAgIGVsc2UKLSNlbmRpZgotICAg
ICAgICBlbnRyeS0+YnVmZmVyID0gV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpjcmVhdGUoc3RvcmFn
ZUVudHJ5LmJvZHkuZGF0YSgpLCBzdG9yYWdlRW50cnkuYm9keS5zaXplKCkpOwotCi0gICAgcmV0
dXJuIGVudHJ5OworICAgIHJldHVybiBVc2VEZWNpc2lvbjo6VmFsaWRhdGU7CiB9CiAKIHN0YXRp
YyBSZXRyaWV2ZURlY2lzaW9uIGNhblJldHJpZXZlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdCYgcmVxdWVzdCkKQEAgLTI4MCw4ICsyMTEsOCBAQCB2b2lkIENhY2hlOjpyZXRyaWV2ZShj
b25zdCBXZWJDb3JlOjpSZXNvCiAgICAgYXV0byBzdGFydFRpbWUgPSBzdGQ6OmNocm9ubzo6c3lz
dGVtX2Nsb2NrOjpub3coKTsKICAgICB1bnNpZ25lZCBwcmlvcml0eSA9IG9yaWdpbmFsUmVxdWVz
dC5wcmlvcml0eSgpOwogCi0gICAgbV9zdG9yYWdlLT5yZXRyaWV2ZShzdG9yYWdlS2V5LCBwcmlv
cml0eSwgW3RoaXMsIG9yaWdpbmFsUmVxdWVzdCwgY29tcGxldGlvbkhhbmRsZXIsIHN0YXJ0VGlt
ZSwgc3RvcmFnZUtleSwgd2ViUGFnZUlEXShzdGQ6OnVuaXF1ZV9wdHI8U3RvcmFnZTo6RW50cnk+
IGVudHJ5KSB7Ci0gICAgICAgIGlmICghZW50cnkpIHsKKyAgICBtX3N0b3JhZ2UtPnJldHJpZXZl
KHN0b3JhZ2VLZXksIHByaW9yaXR5LCBbdGhpcywgb3JpZ2luYWxSZXF1ZXN0LCBjb21wbGV0aW9u
SGFuZGxlciwgc3RhcnRUaW1lLCBzdG9yYWdlS2V5LCB3ZWJQYWdlSURdKHN0ZDo6dW5pcXVlX3B0
cjxTdG9yYWdlOjpFbnRyeT4gc3RvcmFnZUVudHJ5KSB7CisgICAgICAgIGlmICghc3RvcmFnZUVu
dHJ5KSB7CiAgICAgICAgICAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQcm9jZXNzKSBu
b3QgZm91bmQgaW4gc3RvcmFnZSIpOwogCiAgICAgICAgICAgICBpZiAobV9zdGF0aXN0aWNzKQpA
QCAtMjkwLDIwICsyMjEsMzEgQEAgdm9pZCBDYWNoZTo6cmV0cmlldmUoY29uc3QgV2ViQ29yZTo6
UmVzbwogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIobnVsbHB0cik7CiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgQVNTRVJUKGVudHJ5LT5rZXkgPT0g
c3RvcmFnZUtleSk7CiAKLSAgICAgICAgQ2FjaGVkRW50cnlSZXVzZUZhaWx1cmUgZmFpbHVyZSA9
IENhY2hlZEVudHJ5UmV1c2VGYWlsdXJlOjpOb25lOwotICAgICAgICBhdXRvIGRlY29kZWRFbnRy
eSA9IGRlY29kZVN0b3JhZ2VFbnRyeSgqZW50cnksIG9yaWdpbmFsUmVxdWVzdCwgZmFpbHVyZSk7
Ci0gICAgICAgIGJvb2wgc3VjY2VzcyA9ICEhZGVjb2RlZEVudHJ5OwotICAgICAgICBpZiAobV9z
dGF0aXN0aWNzKQotICAgICAgICAgICAgbV9zdGF0aXN0aWNzLT5yZWNvcmRSZXRyaWV2ZWRDYWNo
ZWRFbnRyeSh3ZWJQYWdlSUQsIHN0b3JhZ2VLZXksIG9yaWdpbmFsUmVxdWVzdCwgZmFpbHVyZSk7
CisgICAgICAgIEFTU0VSVChzdG9yYWdlRW50cnktPmtleSA9PSBzdG9yYWdlS2V5KTsKKworICAg
ICAgICBhdXRvIGNhY2hlRW50cnkgPSBFbnRyeTo6ZGVjb2RlKCpzdG9yYWdlRW50cnkpOworCisg
ICAgICAgIGF1dG8gdXNlRGVjaXNpb24gPSBjYWNoZUVudHJ5ID8gY2FuVXNlKCpjYWNoZUVudHJ5
LCBvcmlnaW5hbFJlcXVlc3QpIDogVXNlRGVjaXNpb246Ok5vRHVlVG9EZWNvZGVGYWlsdXJlOwor
ICAgICAgICBzd2l0Y2ggKHVzZURlY2lzaW9uKSB7CisgICAgICAgIGNhc2UgVXNlRGVjaXNpb246
OlVzZToKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFVzZURlY2lzaW9uOjpWYWxp
ZGF0ZToKKyAgICAgICAgICAgIGNhY2hlRW50cnktPnNldE5lZWRzVmFsaWRhdGlvbigpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBjYWNoZUVudHJ5
ID0gbnVsbHB0cjsKKyAgICAgICAgfTsKIAogI2lmICFMT0dfRElTQUJMRUQKICAgICAgICAgYXV0
byBlbGFwc2VkTVMgPSBzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxzdGQ6OmNocm9ubzo6bWls
bGlzZWNvbmRzPihzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjpub3coKSAtIHN0YXJ0VGltZSku
Y291bnQoKTsKICNlbmRpZgotICAgICAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQcm9j
ZXNzKSByZXRyaWV2ZSBjb21wbGV0ZSBzdWNjZXNzPSVkIHByaW9yaXR5PSV1IHRpbWU9JWxsZG1z
Iiwgc3VjY2Vzcywgb3JpZ2luYWxSZXF1ZXN0LnByaW9yaXR5KCksIGVsYXBzZWRNUyk7Ci0gICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURjo6bW92ZShkZWNvZGVkRW50cnkpKTsKLSAgICAgICAg
cmV0dXJuIHN1Y2Nlc3M7CisgICAgICAgIExPRyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nl
c3MpIHJldHJpZXZlIGNvbXBsZXRlIHVzZURlY2lzaW9uPSVkIHByaW9yaXR5PSV1IHRpbWU9JWxs
ZG1zIiwgdXNlRGVjaXNpb24sIG9yaWdpbmFsUmVxdWVzdC5wcmlvcml0eSgpLCBlbGFwc2VkTVMp
OworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEY6Om1vdmUoY2FjaGVFbnRyeSkpOworCisg
ICAgICAgIGlmIChtX3N0YXRpc3RpY3MpCisgICAgICAgICAgICBtX3N0YXRpc3RpY3MtPnJlY29y
ZFJldHJpZXZlZENhY2hlZEVudHJ5KHdlYlBhZ2VJRCwgc3RvcmFnZUtleSwgb3JpZ2luYWxSZXF1
ZXN0LCB1c2VEZWNpc2lvbik7CisgICAgICAgIHJldHVybiB1c2VEZWNpc2lvbiA8PSBVc2VEZWNp
c2lvbjo6VmFsaWRhdGU7CiAgICAgfSk7CiB9CiAKQEAgLTM1Niw3ICsyOTgsOSBAQCB2b2lkIENh
Y2hlOjpzdG9yZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBhdXRvIHN0b3JhZ2VFbnRyeSA9IGVuY29kZVN0b3JhZ2VFbnRyeShvcmlnaW5hbFJl
cXVlc3QsIHJlc3BvbnNlLCBXVEY6Om1vdmUocmVzcG9uc2VEYXRhKSk7CisgICAgRW50cnkgY2Fj
aGVFbnRyeShtYWtlQ2FjaGVLZXkob3JpZ2luYWxSZXF1ZXN0KSwgcmVzcG9uc2UsIFdURjo6bW92
ZShyZXNwb25zZURhdGEpLCBjb2xsZWN0VmFyeWluZ1JlcXVlc3RIZWFkZXJzKG9yaWdpbmFsUmVx
dWVzdCwgcmVzcG9uc2UpKTsKKworICAgIGF1dG8gc3RvcmFnZUVudHJ5ID0gY2FjaGVFbnRyeS5l
bmNvZGUoKTsKIAogICAgIG1fc3RvcmFnZS0+c3RvcmUoc3RvcmFnZUVudHJ5LCBbY29tcGxldGlv
bkhhbmRsZXJdKGJvb2wgc3VjY2VzcywgY29uc3QgRGF0YSYgYm9keURhdGEpIHsKICAgICAgICAg
TWFwcGVkQm9keSBtYXBwZWRCb2R5OwpAQCAtMzczLDE2ICszMTcsMTggQEAgdm9pZCBDYWNoZTo6
c3RvcmUoY29uc3QgV2ViQ29yZTo6UmVzb3VyYwogICAgIH0pOwogfQogCi12b2lkIENhY2hlOjp1
cGRhdGUoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiBvcmlnaW5hbFJlcXVlc3QsIGNv
bnN0IEVudHJ5JiBlbnRyeSwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYgdmFsaWRh
dGluZ1Jlc3BvbnNlKQordm9pZCBDYWNoZTo6dXBkYXRlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
UmVxdWVzdCYgb3JpZ2luYWxSZXF1ZXN0LCBjb25zdCBFbnRyeSYgZXhpc3RpbmdFbnRyeSwgY29u
c3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYgdmFsaWRhdGluZ1Jlc3BvbnNlKQogewogICAg
IExPRyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpIHVwZGF0aW5nICVzIiwgb3JpZ2lu
YWxSZXF1ZXN0LnVybCgpLnN0cmluZygpLmxhdGluMSgpLmRhdGEoKSk7CiAKLSAgICBXZWJDb3Jl
OjpSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlID0gZW50cnkucmVzcG9uc2U7CisgICAgV2ViQ29y
ZTo6UmVzb3VyY2VSZXNwb25zZSByZXNwb25zZSA9IGV4aXN0aW5nRW50cnkucmVzcG9uc2UoKTsK
ICAgICBXZWJDb3JlOjp1cGRhdGVSZXNwb25zZUhlYWRlcnNBZnRlclJldmFsaWRhdGlvbihyZXNw
b25zZSwgdmFsaWRhdGluZ1Jlc3BvbnNlKTsKIAotICAgIGF1dG8gdXBkYXRlRW50cnkgPSBlbmNv
ZGVTdG9yYWdlRW50cnkob3JpZ2luYWxSZXF1ZXN0LCByZXNwb25zZSwgZW50cnkuYnVmZmVyKTsK
KyAgICBFbnRyeSB1cGRhdGVFbnRyeShleGlzdGluZ0VudHJ5LmtleSgpLCByZXNwb25zZSwgZXhp
c3RpbmdFbnRyeS5idWZmZXIoKSwgY29sbGVjdFZhcnlpbmdSZXF1ZXN0SGVhZGVycyhvcmlnaW5h
bFJlcXVlc3QsIHJlc3BvbnNlKSk7CiAKLSAgICBtX3N0b3JhZ2UtPnVwZGF0ZSh1cGRhdGVFbnRy
eSwgZW50cnkuc3RvcmFnZUVudHJ5LCBbXShib29sIHN1Y2Nlc3MsIGNvbnN0IERhdGEmKSB7Cisg
ICAgYXV0byB1cGRhdGVTdG9yYWdlRW50cnkgPSB1cGRhdGVFbnRyeS5lbmNvZGUoKTsKKworICAg
IG1fc3RvcmFnZS0+dXBkYXRlKHVwZGF0ZVN0b3JhZ2VFbnRyeSwgZXhpc3RpbmdFbnRyeS5zb3Vy
Y2VTdG9yYWdlRW50cnkoKSwgW10oYm9vbCBzdWNjZXNzLCBjb25zdCBEYXRhJikgewogICAgICAg
ICBMT0coTmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQcm9jZXNzKSB1cGRhdGVkLCBzdWNjZXNzPSVk
Iiwgc3VjY2Vzcyk7CiAgICAgfSk7CiB9CkBAIC0zOTgsMjAgKzM0NCwxNyBAQCB2b2lkIENhY2hl
Ojp0cmF2ZXJzZShzdGQ6OmZ1bmN0aW9uPHZvaWQgCiB7CiAgICAgQVNTRVJUKGlzRW5hYmxlZCgp
KTsKIAotICAgIG1fc3RvcmFnZS0+dHJhdmVyc2UoW3RyYXZlcnNlSGFuZGxlcl0oY29uc3QgU3Rv
cmFnZTo6RW50cnkqIGVudHJ5KSB7Ci0gICAgICAgIGlmICghZW50cnkpIHsKKyAgICBtX3N0b3Jh
Z2UtPnRyYXZlcnNlKFt0cmF2ZXJzZUhhbmRsZXJdKGNvbnN0IFN0b3JhZ2U6OkVudHJ5KiBzdG9y
YWdlRW50cnkpIHsKKyAgICAgICAgaWYgKCFzdG9yYWdlRW50cnkpIHsKICAgICAgICAgICAgIHRy
YXZlcnNlSGFuZGxlcihudWxscHRyKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
Ci0gICAgICAgIEVudHJ5IGNhY2hlRW50cnk7Ci0gICAgICAgIGNhY2hlRW50cnkuc3RvcmFnZUVu
dHJ5ID0gKmVudHJ5OwotCi0gICAgICAgIERlY29kZXIgZGVjb2RlcihjYWNoZUVudHJ5LnN0b3Jh
Z2VFbnRyeS5oZWFkZXIuZGF0YSgpLCBjYWNoZUVudHJ5LnN0b3JhZ2VFbnRyeS5oZWFkZXIuc2l6
ZSgpKTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShjYWNoZUVudHJ5LnJlc3BvbnNlKSkK
KyAgICAgICAgYXV0byBjYWNoZUVudHJ5ID0gRW50cnk6OmRlY29kZSgqc3RvcmFnZUVudHJ5KTsK
KyAgICAgICAgaWYgKCFjYWNoZUVudHJ5KQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAg
IHRyYXZlcnNlSGFuZGxlcigmY2FjaGVFbnRyeSk7CisgICAgICAgIHRyYXZlcnNlSGFuZGxlcihj
YWNoZUVudHJ5LmdldCgpKTsKICAgICB9KTsKIH0KIApAQCAtNDIwLDQxICszNjMsNiBAQCBTdHJp
bmcgQ2FjaGU6OmR1bXBGaWxlUGF0aCgpIGNvbnN0CiAgICAgcmV0dXJuIFdlYkNvcmU6OnBhdGhC
eUFwcGVuZGluZ0NvbXBvbmVudChtX3N0b3JhZ2UtPmJhc2VEaXJlY3RvcnlQYXRoKCksICJkdW1w
Lmpzb24iKTsKIH0KIAotc3RhdGljIGJvb2wgZW50cnlBc0pTT04oU3RyaW5nQnVpbGRlciYganNv
biwgY29uc3QgU3RvcmFnZTo6RW50cnkmIGVudHJ5KQotewotICAgIERlY29kZXIgZGVjb2Rlcihl
bnRyeS5oZWFkZXIuZGF0YSgpLCBlbnRyeS5oZWFkZXIuc2l6ZSgpKTsKLSAgICBXZWJDb3JlOjpS
ZXNvdXJjZVJlc3BvbnNlIGNhY2hlZFJlc3BvbnNlOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
Y2FjaGVkUmVzcG9uc2UpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAganNvbi5hcHBlbmQo
IntcbiIpOwotICAgIGpzb24uYXBwZW5kKCJcImhhc2hcIjogIik7Ci0gICAgSlNDOjphcHBlbmRR
dW90ZWRKU09OU3RyaW5nVG9CdWlsZGVyKGpzb24sIGVudHJ5LmtleS5oYXNoQXNTdHJpbmcoKSk7
Ci0gICAganNvbi5hcHBlbmQoIixcbiIpOwotICAgIGpzb24uYXBwZW5kKCJcInBhcnRpdGlvblwi
OiAiKTsKLSAgICBKU0M6OmFwcGVuZFF1b3RlZEpTT05TdHJpbmdUb0J1aWxkZXIoanNvbiwgZW50
cnkua2V5LnBhcnRpdGlvbigpKTsKLSAgICBqc29uLmFwcGVuZCgiLFxuIik7Ci0gICAganNvbi5h
cHBlbmQoIlwidGltZXN0YW1wXCI6ICIpOwotICAgIGpzb24uYXBwZW5kTnVtYmVyKGVudHJ5LnRp
bWVTdGFtcC5jb3VudCgpKTsKLSAgICBqc29uLmFwcGVuZCgiLFxuIik7Ci0gICAganNvbi5hcHBl
bmQoIlwiVVJMXCI6ICIpOwotICAgIEpTQzo6YXBwZW5kUXVvdGVkSlNPTlN0cmluZ1RvQnVpbGRl
cihqc29uLCBjYWNoZWRSZXNwb25zZS51cmwoKS5zdHJpbmcoKSk7Ci0gICAganNvbi5hcHBlbmQo
IixcbiIpOwotICAgIGpzb24uYXBwZW5kKCJcImhlYWRlcnNcIjoge1xuIik7Ci0gICAgYm9vbCBm
aXJzdEhlYWRlciA9IHRydWU7Ci0gICAgZm9yIChhdXRvJiBoZWFkZXIgOiBjYWNoZWRSZXNwb25z
ZS5odHRwSGVhZGVyRmllbGRzKCkpIHsKLSAgICAgICAgaWYgKCFmaXJzdEhlYWRlcikKLSAgICAg
ICAgICAgIGpzb24uYXBwZW5kKCIsXG4iKTsKLSAgICAgICAgZmlyc3RIZWFkZXIgPSBmYWxzZTsK
LSAgICAgICAganNvbi5hcHBlbmQoIiAgICAiKTsKLSAgICAgICAgSlNDOjphcHBlbmRRdW90ZWRK
U09OU3RyaW5nVG9CdWlsZGVyKGpzb24sIGhlYWRlci5rZXkpOwotICAgICAgICBqc29uLmFwcGVu
ZCgiOiAiKTsKLSAgICAgICAgSlNDOjphcHBlbmRRdW90ZWRKU09OU3RyaW5nVG9CdWlsZGVyKGpz
b24sIGhlYWRlci52YWx1ZSk7Ci0gICAgfQotICAgIGpzb24uYXBwZW5kKCJcbn1cbiIpOwotICAg
IGpzb24uYXBwZW5kKCJ9Iik7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIHZvaWQgQ2FjaGU6OmR1
bXBDb250ZW50c1RvRmlsZSgpCiB7CiAgICAgaWYgKCFtX3N0b3JhZ2UpCkBAIC00NzAsOCArMzc4
LDExIEBAIHZvaWQgQ2FjaGU6OmR1bXBDb250ZW50c1RvRmlsZSgpCiAgICAgICAgICAgICBXZWJD
b3JlOjpjbG9zZUZpbGUoaGFuZGxlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQor
ICAgICAgICBhdXRvIGNhY2hlRW50cnkgPSBFbnRyeTo6ZGVjb2RlKCplbnRyeSk7CisgICAgICAg
IGlmICghY2FjaGVFbnRyeSkKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgU3RyaW5nQnVp
bGRlciBqc29uOwotICAgICAgICBpZiAoIWVudHJ5QXNKU09OKGpzb24sICplbnRyeSkpCisgICAg
ICAgIGlmICghY2FjaGVFbnRyeS0+YXNKU09OKGpzb24pKQogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICBqc29uLmFwcGVuZCgiLFxuIik7CiAgICAgICAgIGF1dG8gd3JpdGVEYXRhID0ganNv
bi50b1N0cmluZygpLnV0ZjgoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5oCShyZXZpc2lvbiAxODE5NTcpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCiAKKyNp
bmNsdWRlICJOZXR3b3JrQ2FjaGVFbnRyeS5oIgogI2luY2x1ZGUgIk5ldHdvcmtDYWNoZVN0b3Jh
Z2UuaCIKICNpbmNsdWRlICJTaGFyZWFibGVSZXNvdXJjZS5oIgogI2luY2x1ZGUgPFdlYkNvcmUv
UmVzb3VyY2VSZXNwb25zZS5oPgpAQCAtNTQsMTYgKzU1LDYgQEAgc3RydWN0IE1hcHBlZEJvZHkg
ewogI2VuZGlmCiB9OwogCi1zdHJ1Y3QgRW50cnkgewotICAgIFN0b3JhZ2U6OkVudHJ5IHN0b3Jh
Z2VFbnRyeTsKLSAgICBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlOwotICAgIFJl
ZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+IGJ1ZmZlcjsKLSNpZiBFTkFCTEUoU0hBUkVBQkxF
X1JFU09VUkNFKQotICAgIFNoYXJlYWJsZVJlc291cmNlOjpIYW5kbGUgc2hhcmVhYmxlUmVzb3Vy
Y2VIYW5kbGU7Ci0jZW5kaWYKLSAgICBib29sIG5lZWRzUmV2YWxpZGF0aW9uOwotfTsKLQogZW51
bSBjbGFzcyBSZXRyaWV2ZURlY2lzaW9uIHsKICAgICBZZXMsCiAgICAgTm9EdWVUb0hUVFBNZXRo
b2QsCkBAIC04MCwxMSArNzEsMTIgQEAgZW51bSBjbGFzcyBTdG9yZURlY2lzaW9uIHsKICAgICBO
b0R1ZVRvSFRUUFN0YXR1c0NvZGUKIH07CiAKLWVudW0gY2xhc3MgQ2FjaGVkRW50cnlSZXVzZUZh
aWx1cmUgewotICAgIE5vbmUsCi0gICAgVmFyeWluZ0hlYWRlck1pc21hdGNoLAotICAgIE1pc3Np
bmdWYWxpZGF0b3JGaWVsZHMsCi0gICAgT3RoZXIsCitlbnVtIGNsYXNzIFVzZURlY2lzaW9uIHsK
KyAgICBVc2UsCisgICAgVmFsaWRhdGUsCisgICAgTm9EdWVUb1ZhcnlpbmdIZWFkZXJNaXNtYXRj
aCwKKyAgICBOb0R1ZVRvTWlzc2luZ1ZhbGlkYXRvckZpZWxkcywKKyAgICBOb0R1ZVRvRGVjb2Rl
RmFpbHVyZSwKIH07CiAKIGNsYXNzIENhY2hlIHsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUVudHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVFbnRyeS5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3Jr
Q2FjaGVFbnRyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxODMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTmV0d29ya0NhY2hlLmgiCisKKyNp
bmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiTmV0d29ya0NhY2hlQ29kZXJzLmgiCisjaW5j
bHVkZSAiTmV0d29ya0NhY2hlRGVjb2Rlci5oIgorI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUVuY29k
ZXIuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU09OT2JqZWN0Lmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NoYXJlZEJ1ZmZl
ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKworI2lmIEVOQUJMRShO
RVRXT1JLX0NBQ0hFKQorCituYW1lc3BhY2UgV2ViS2l0IHsKK25hbWVzcGFjZSBOZXR3b3JrQ2Fj
aGUgeworCitFbnRyeTo6RW50cnkoY29uc3QgS2V5JiBrZXksIGNvbnN0IFdlYkNvcmU6OlJlc291
cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiYmIGJ1
ZmZlciwgVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4+IHZhcnlpbmdSZXF1ZXN0SGVh
ZGVycykKKyAgICA6IG1fa2V5KGtleSkKKyAgICAsIG1fdGltZVN0YW1wKHN0ZDo6Y2hyb25vOjpk
dXJhdGlvbl9jYXN0PHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM+KHN0ZDo6Y2hyb25vOjpzeXN0
ZW1fY2xvY2s6Om5vdygpLnRpbWVfc2luY2VfZXBvY2goKSkpCisgICAgLCBtX3Jlc3BvbnNlKHJl
c3BvbnNlKQorICAgICwgbV92YXJ5aW5nUmVxdWVzdEhlYWRlcnModmFyeWluZ1JlcXVlc3RIZWFk
ZXJzKQorICAgICwgbV9idWZmZXIoV1RGOjptb3ZlKGJ1ZmZlcikpCit7Cit9CisKK0VudHJ5OjpF
bnRyeShjb25zdCBTdG9yYWdlOjpFbnRyeSYgc3RvcmFnZUVudHJ5KQorICAgIDogbV9rZXkoc3Rv
cmFnZUVudHJ5LmtleSkKKyAgICAsIG1fdGltZVN0YW1wKHN0b3JhZ2VFbnRyeS50aW1lU3RhbXAp
CisgICAgLCBtX3NvdXJjZVN0b3JhZ2VFbnRyeShzdG9yYWdlRW50cnkpCit7Cit9CisKK1N0b3Jh
Z2U6OkVudHJ5IEVudHJ5OjplbmNvZGUoKSBjb25zdAoreworICAgIEVuY29kZXIgZW5jb2RlcjsK
KyAgICBlbmNvZGVyIDw8IG1fcmVzcG9uc2U7CisKKyAgICBib29sIGhhc1ZhcnlpbmdSZXF1ZXN0
SGVhZGVycyA9ICFtX3ZhcnlpbmdSZXF1ZXN0SGVhZGVycy5pc0VtcHR5KCk7CisgICAgZW5jb2Rl
ciA8PCBoYXNWYXJ5aW5nUmVxdWVzdEhlYWRlcnM7CisgICAgaWYgKGhhc1ZhcnlpbmdSZXF1ZXN0
SGVhZGVycykKKyAgICAgICAgZW5jb2RlciA8PCBtX3ZhcnlpbmdSZXF1ZXN0SGVhZGVyczsKKwor
ICAgIGVuY29kZXIuZW5jb2RlQ2hlY2tzdW0oKTsKKworICAgIERhdGEgaGVhZGVyKGVuY29kZXIu
YnVmZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6ZSgpKTsKKyAgICBEYXRhIGJvZHk7CisgICAgaWYg
KG1fYnVmZmVyKQorICAgICAgICBib2R5ID0geyByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4
X3QqPihtX2J1ZmZlci0+ZGF0YSgpKSwgbV9idWZmZXItPnNpemUoKSB9OworCisgICAgcmV0dXJu
IHsgbV9rZXksIG1fdGltZVN0YW1wLCBoZWFkZXIsIGJvZHkgfTsKK30KKworc3RkOjp1bmlxdWVf
cHRyPEVudHJ5PiBFbnRyeTo6ZGVjb2RlKGNvbnN0IFN0b3JhZ2U6OkVudHJ5JiBzdG9yYWdlRW50
cnkpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPEVudHJ5PiBlbnRyeShuZXcgRW50cnkoc3RvcmFn
ZUVudHJ5KSk7CisKKyAgICBEZWNvZGVyIGRlY29kZXIoc3RvcmFnZUVudHJ5LmhlYWRlci5kYXRh
KCksIHN0b3JhZ2VFbnRyeS5oZWFkZXIuc2l6ZSgpKTsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KGVudHJ5LT5tX3Jlc3BvbnNlKSkgeworICAgICAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5ldHdv
cmtQcm9jZXNzKSByZXNwb25zZSBkZWNvZGluZyBmYWlsZWRcbiIpOworICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICB9CisgICAgZW50cnktPm1fcmVzcG9uc2Uuc2V0U291cmNlKFdlYkNvcmU6
OlJlc291cmNlUmVzcG9uc2U6OlNvdXJjZTo6RGlza0NhY2hlKTsKKworICAgIGJvb2wgaGFzVmFy
eWluZ1JlcXVlc3RIZWFkZXJzOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaGFzVmFyeWluZ1Jl
cXVlc3RIZWFkZXJzKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBpZiAoaGFzVmFy
eWluZ1JlcXVlc3RIZWFkZXJzKSB7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZW50cnkt
Pm1fdmFyeWluZ1JlcXVlc3RIZWFkZXJzKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIH0KKworICAgIGlmICghZGVjb2Rlci52ZXJpZnlDaGVja3N1bSgpKSB7CisgICAgICAgIExP
RyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpIGNoZWNrc3VtIHZlcmlmaWNhdGlvbiBm
YWlsdXJlXG4iKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgcmV0dXJu
IGVudHJ5OworfQorCit2b2lkIEVudHJ5Ojppbml0aWFsaXplQnVmZmVyRnJvbVN0b3JhZ2VFbnRy
eSgpIGNvbnN0Cit7CisgICAgYXV0byogZGF0YSA9IG1fc291cmNlU3RvcmFnZUVudHJ5LmJvZHku
ZGF0YSgpOworICAgIHNpemVfdCBzaXplID0gbV9zb3VyY2VTdG9yYWdlRW50cnkuYm9keS5zaXpl
KCk7CisjaWYgRU5BQkxFKFNIQVJFQUJMRV9SRVNPVVJDRSkKKyAgICBSZWZQdHI8U2hhcmVkTWVt
b3J5PiBzaGFyZWRNZW1vcnkgPSBtX3NvdXJjZVN0b3JhZ2VFbnRyeS5ib2R5LmlzTWFwKCkgPyBT
aGFyZWRNZW1vcnk6OmNyZWF0ZUZyb21WTUJ1ZmZlcihjb25zdF9jYXN0PHVpbnQ4X3QqPihkYXRh
KSwgc2l6ZSkgOiBudWxscHRyOworICAgIFJlZlB0cjxTaGFyZWFibGVSZXNvdXJjZT4gc2hhcmVh
YmxlUmVzb3VyY2UgPSBzaGFyZWRNZW1vcnkgPyBTaGFyZWFibGVSZXNvdXJjZTo6Y3JlYXRlKHNo
YXJlZE1lbW9yeS5yZWxlYXNlKCksIDAsIG1fc291cmNlU3RvcmFnZUVudHJ5LmJvZHkuc2l6ZSgp
KSA6IG51bGxwdHI7CisKKyAgICBpZiAoc2hhcmVhYmxlUmVzb3VyY2UgJiYgc2hhcmVhYmxlUmVz
b3VyY2UtPmNyZWF0ZUhhbmRsZShtX3NoYXJlYWJsZVJlc291cmNlSGFuZGxlKSkKKyAgICAgICAg
bV9idWZmZXIgPSBtX3NoYXJlYWJsZVJlc291cmNlSGFuZGxlLnRyeVdyYXBJblNoYXJlZEJ1ZmZl
cigpOworI2VuZGlmCisgICAgaWYgKCFtX2J1ZmZlcikKKyAgICAgICAgbV9idWZmZXIgPSBXZWJD
b3JlOjpTaGFyZWRCdWZmZXI6OmNyZWF0ZShkYXRhLCBzaXplKTsKK30KKworV2ViQ29yZTo6U2hh
cmVkQnVmZmVyKiBFbnRyeTo6YnVmZmVyKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fYnVmZmVyKQor
ICAgICAgICBpbml0aWFsaXplQnVmZmVyRnJvbVN0b3JhZ2VFbnRyeSgpOworCisgICAgcmV0dXJu
IG1fYnVmZmVyLmdldCgpOworfQorCitTaGFyZWFibGVSZXNvdXJjZTo6SGFuZGxlJiBFbnRyeTo6
c2hhcmVhYmxlUmVzb3VyY2VIYW5kbGUoKSBjb25zdAoreworICAgIGlmICghbV9idWZmZXIpCisg
ICAgICAgIGluaXRpYWxpemVCdWZmZXJGcm9tU3RvcmFnZUVudHJ5KCk7CisKKyAgICByZXR1cm4g
bV9zaGFyZWFibGVSZXNvdXJjZUhhbmRsZTsKK30KKworYm9vbCBFbnRyeTo6bmVlZHNWYWxpZGF0
aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9yZXNwb25zZS5zb3VyY2UoKSA9PSBXZWJDb3Jl
OjpSZXNvdXJjZVJlc3BvbnNlOjpTb3VyY2U6OkRpc2tDYWNoZUFmdGVyVmFsaWRhdGlvbjsKK30K
Kwordm9pZCBFbnRyeTo6c2V0TmVlZHNWYWxpZGF0aW9uKCkKK3sKKyAgICBBU1NFUlQobV9yZXNw
b25zZS5zb3VyY2UoKSA9PSBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlOjpTb3VyY2U6OkRpc2tD
YWNoZSk7CisgICAgbV9yZXNwb25zZS5zZXRTb3VyY2UoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25z
ZTo6U291cmNlOjpEaXNrQ2FjaGVBZnRlclZhbGlkYXRpb24pOworfQorCitib29sIEVudHJ5Ojph
c0pTT04oU3RyaW5nQnVpbGRlciYganNvbikKK3sKKyAgICBqc29uLmFwcGVuZCgie1xuIik7Cisg
ICAganNvbi5hcHBlbmQoIlwiaGFzaFwiOiAiKTsKKyAgICBKU0M6OmFwcGVuZFF1b3RlZEpTT05T
dHJpbmdUb0J1aWxkZXIoanNvbiwgbV9rZXkuaGFzaEFzU3RyaW5nKCkpOworICAgIGpzb24uYXBw
ZW5kKCIsXG4iKTsKKyAgICBqc29uLmFwcGVuZCgiXCJwYXJ0aXRpb25cIjogIik7CisgICAgSlND
OjphcHBlbmRRdW90ZWRKU09OU3RyaW5nVG9CdWlsZGVyKGpzb24sIG1fa2V5LnBhcnRpdGlvbigp
KTsKKyAgICBqc29uLmFwcGVuZCgiLFxuIik7CisgICAganNvbi5hcHBlbmQoIlwidGltZXN0YW1w
XCI6ICIpOworICAgIGpzb24uYXBwZW5kTnVtYmVyKG1fdGltZVN0YW1wLmNvdW50KCkpOworICAg
IGpzb24uYXBwZW5kKCIsXG4iKTsKKyAgICBqc29uLmFwcGVuZCgiXCJVUkxcIjogIik7CisgICAg
SlNDOjphcHBlbmRRdW90ZWRKU09OU3RyaW5nVG9CdWlsZGVyKGpzb24sIG1fcmVzcG9uc2UudXJs
KCkuc3RyaW5nKCkpOworICAgIGpzb24uYXBwZW5kKCIsXG4iKTsKKyAgICBqc29uLmFwcGVuZCgi
XCJoZWFkZXJzXCI6IHtcbiIpOworICAgIGJvb2wgZmlyc3RIZWFkZXIgPSB0cnVlOworICAgIGZv
ciAoYXV0byYgaGVhZGVyIDogbV9yZXNwb25zZS5odHRwSGVhZGVyRmllbGRzKCkpIHsKKyAgICAg
ICAgaWYgKCFmaXJzdEhlYWRlcikKKyAgICAgICAgICAgIGpzb24uYXBwZW5kKCIsXG4iKTsKKyAg
ICAgICAgZmlyc3RIZWFkZXIgPSBmYWxzZTsKKyAgICAgICAganNvbi5hcHBlbmQoIiAgICAiKTsK
KyAgICAgICAgSlNDOjphcHBlbmRRdW90ZWRKU09OU3RyaW5nVG9CdWlsZGVyKGpzb24sIGhlYWRl
ci5rZXkpOworICAgICAgICBqc29uLmFwcGVuZCgiOiAiKTsKKyAgICAgICAgSlNDOjphcHBlbmRR
dW90ZWRKU09OU3RyaW5nVG9CdWlsZGVyKGpzb24sIGhlYWRlci52YWx1ZSk7CisgICAgfQorICAg
IGpzb24uYXBwZW5kKCJcbn1cbiIpOworICAgIGpzb24uYXBwZW5kKCJ9Iik7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK30KK30KKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVFbnRyeS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUVudHJ5LmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVF
bnRyeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIE5ldHdvcmtDYWNoZUVudHJ5X2gKKyNkZWZpbmUgTmV0d29ya0NhY2hlRW50cnlfaAorCisj
aWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCisKKyNpbmNsdWRlICJOZXR3b3JrQ2FjaGVTdG9yYWdl
LmgiCisjaW5jbHVkZSAiU2hhcmVhYmxlUmVzb3VyY2UuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1Jl
c291cmNlUmVzcG9uc2UuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgUmVz
b3VyY2VSZXF1ZXN0OworY2xhc3MgU2hhcmVkQnVmZmVyOworfQorCituYW1lc3BhY2UgV2ViS2l0
IHsKK25hbWVzcGFjZSBOZXR3b3JrQ2FjaGUgeworCitjbGFzcyBFbnRyeSB7CisgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoRW50cnkpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoK
KyAgICBFbnRyeShjb25zdCBLZXkmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiwg
UmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4mJiwgVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcs
IFN0cmluZz4+IHZhcnlpbmdSZXF1ZXN0SGVhZGVycyk7CisKKyAgICBTdG9yYWdlOjpFbnRyeSBl
bmNvZGUoKSBjb25zdDsKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEVudHJ5PiBkZWNvZGUo
Y29uc3QgU3RvcmFnZTo6RW50cnkmKTsKKworICAgIGNvbnN0IEtleSYga2V5KCkgY29uc3QgeyBy
ZXR1cm4gbV9rZXk7IH0KKyAgICBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIHRpbWVTdGFtcCgp
IGNvbnN0IHsgcmV0dXJuIG1fdGltZVN0YW1wOyB9CisgICAgY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXNwb25zZSYgcmVzcG9uc2UoKSBjb25zdCB7IHJldHVybiBtX3Jlc3BvbnNlOyB9CisgICAg
Y29uc3QgVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4+IHZhcnlpbmdSZXF1ZXN0SGVh
ZGVycygpIGNvbnN0IHsgcmV0dXJuIG1fdmFyeWluZ1JlcXVlc3RIZWFkZXJzOyB9CisKKyAgICBX
ZWJDb3JlOjpTaGFyZWRCdWZmZXIqIGJ1ZmZlcigpIGNvbnN0OworI2lmIEVOQUJMRShTSEFSRUFC
TEVfUkVTT1VSQ0UpCisgICAgU2hhcmVhYmxlUmVzb3VyY2U6OkhhbmRsZSYgc2hhcmVhYmxlUmVz
b3VyY2VIYW5kbGUoKSBjb25zdDsKKyNlbmRpZgorCisgICAgYm9vbCBuZWVkc1ZhbGlkYXRpb24o
KSBjb25zdDsKKyAgICB2b2lkIHNldE5lZWRzVmFsaWRhdGlvbigpOworCisgICAgY29uc3QgU3Rv
cmFnZTo6RW50cnkmIHNvdXJjZVN0b3JhZ2VFbnRyeSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNl
U3RvcmFnZUVudHJ5OyB9CisKKyAgICBib29sIGFzSlNPTihTdHJpbmdCdWlsZGVyJiBqc29uKTsK
KworcHJpdmF0ZToKKyAgICBFbnRyeShjb25zdCBTdG9yYWdlOjpFbnRyeSYpOworICAgIHZvaWQg
aW5pdGlhbGl6ZUJ1ZmZlckZyb21TdG9yYWdlRW50cnkoKSBjb25zdDsKKworICAgIEtleSBtX2tl
eTsKKyAgICBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIG1fdGltZVN0YW1wOworICAgIFdlYkNv
cmU6OlJlc291cmNlUmVzcG9uc2UgbV9yZXNwb25zZTsKKyAgICBWZWN0b3I8c3RkOjpwYWlyPFN0
cmluZywgU3RyaW5nPj4gbV92YXJ5aW5nUmVxdWVzdEhlYWRlcnM7CisKKyAgICBtdXRhYmxlIFJl
ZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+IG1fYnVmZmVyOworI2lmIEVOQUJMRShTSEFSRUFC
TEVfUkVTT1VSQ0UpCisgICAgbXV0YWJsZSBTaGFyZWFibGVSZXNvdXJjZTo6SGFuZGxlIG1fc2hh
cmVhYmxlUmVzb3VyY2VIYW5kbGU7CisjZW5kaWYKKworICAgIFN0b3JhZ2U6OkVudHJ5IG1fc291
cmNlU3RvcmFnZUVudHJ5IHsgfTsKK307CisKK30KK30KKworI2VuZGlmCisjZW5kaWYKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0YXRpc3Rp
Y3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9O
ZXR3b3JrQ2FjaGVTdGF0aXN0aWNzLmgJKHJldmlzaW9uIDE4MTk1NykKKysrIFNvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0YXRpc3RpY3MuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCByZWNvcmROb3RDYWNo
aW5nUmVzcG9uc2UoY29uc3QgS2V5JiwgU3RvcmVEZWNpc2lvbik7CiAgICAgdm9pZCByZWNvcmRO
b3RVc2luZ0NhY2hlRm9yUmVxdWVzdCh1aW50NjRfdCB3ZWJQYWdlSUQsIGNvbnN0IEtleSYsIGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIFJldHJpZXZlRGVjaXNpb24pOwogICAgIHZv
aWQgcmVjb3JkUmV0cmlldmFsRmFpbHVyZSh1aW50NjRfdCB3ZWJQYWdlSUQsIGNvbnN0IEtleSYs
IGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpOwotICAgIHZvaWQgcmVjb3JkUmV0cmll
dmVkQ2FjaGVkRW50cnkodWludDY0X3Qgd2ViUGFnZUlELCBjb25zdCBLZXkmLCBjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBDYWNoZWRFbnRyeVJldXNlRmFpbHVyZSk7CisgICAgdm9p
ZCByZWNvcmRSZXRyaWV2ZWRDYWNoZWRFbnRyeSh1aW50NjRfdCB3ZWJQYWdlSUQsIGNvbnN0IEtl
eSYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIFVzZURlY2lzaW9uKTsKIAogcHJp
dmF0ZToKICAgICBleHBsaWNpdCBTdGF0aXN0aWNzKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VQYXRo
KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNo
ZVN0YXRpc3RpY3NDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdGF0aXN0aWNzQ29jb2EubW0JKHJldmlzaW9uIDE4
MTk1NykKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNo
ZVN0YXRpc3RpY3NDb2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtMjYyLDMyICsyNjIsMzMgQEAg
dm9pZCBTdGF0aXN0aWNzOjpyZWNvcmRSZXRyaWV2YWxGYWlsdXJlKAogICAgIH0pOwogfQogCi1z
dGF0aWMgU3RyaW5nIGNhY2hlZEVudHJ5UmV1c2VGYWlsdXJlVG9EaWFnbm9zdGljS2V5KENhY2hl
ZEVudHJ5UmV1c2VGYWlsdXJlIGZhaWx1cmUpCitzdGF0aWMgU3RyaW5nIGNhY2hlZEVudHJ5UmV1
c2VGYWlsdXJlVG9EaWFnbm9zdGljS2V5KFVzZURlY2lzaW9uIGRlY2lzaW9uKQogewotICAgIHN3
aXRjaCAoZmFpbHVyZSkgewotICAgIGNhc2UgQ2FjaGVkRW50cnlSZXVzZUZhaWx1cmU6OlZhcnlp
bmdIZWFkZXJNaXNtYXRjaDoKKyAgICBzd2l0Y2ggKGRlY2lzaW9uKSB7CisgICAgY2FzZSBVc2VE
ZWNpc2lvbjo6Tm9EdWVUb1ZhcnlpbmdIZWFkZXJNaXNtYXRjaDoKICAgICAgICAgcmV0dXJuIFdl
YkNvcmU6OkRpYWdub3N0aWNMb2dnaW5nS2V5czo6dmFyeWluZ0hlYWRlck1pc21hdGNoS2V5KCk7
Ci0gICAgY2FzZSBDYWNoZWRFbnRyeVJldXNlRmFpbHVyZTo6TWlzc2luZ1ZhbGlkYXRvckZpZWxk
czoKKyAgICBjYXNlIFVzZURlY2lzaW9uOjpOb0R1ZVRvTWlzc2luZ1ZhbGlkYXRvckZpZWxkczoK
ICAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkRpYWdub3N0aWNMb2dnaW5nS2V5czo6bWlzc2luZ1Zh
bGlkYXRvckZpZWxkc0tleSgpOwotICAgIGNhc2UgQ2FjaGVkRW50cnlSZXVzZUZhaWx1cmU6Ok90
aGVyOgorICAgIGNhc2UgVXNlRGVjaXNpb246Ok5vRHVlVG9EZWNvZGVGYWlsdXJlOgogICAgICAg
ICByZXR1cm4gV2ViQ29yZTo6RGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpvdGhlcktleSgpOwotICAg
IGNhc2UgQ2FjaGVkRW50cnlSZXVzZUZhaWx1cmU6Ok5vbmU6CisgICAgY2FzZSBVc2VEZWNpc2lv
bjo6VXNlOgorICAgIGNhc2UgVXNlRGVjaXNpb246OlZhbGlkYXRlOgogICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBlbXB0eVN0
cmluZygpOwogfQogCi12b2lkIFN0YXRpc3RpY3M6OnJlY29yZFJldHJpZXZlZENhY2hlZEVudHJ5
KHVpbnQ2NF90IHdlYlBhZ2VJRCwgY29uc3QgS2V5JiBrZXksIGNvbnN0IFdlYkNvcmU6OlJlc291
cmNlUmVxdWVzdCYgcmVxdWVzdCwgQ2FjaGVkRW50cnlSZXVzZUZhaWx1cmUgZmFpbHVyZSkKK3Zv
aWQgU3RhdGlzdGljczo6cmVjb3JkUmV0cmlldmVkQ2FjaGVkRW50cnkodWludDY0X3Qgd2ViUGFn
ZUlELCBjb25zdCBLZXkmIGtleSwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1
ZXN0LCBVc2VEZWNpc2lvbiBkZWNpc2lvbikKIHsKICAgICBXZWJDb3JlOjpVUkwgcmVxdWVzdFVS
TCA9IHJlcXVlc3QudXJsKCk7Ci0gICAgaWYgKGZhaWx1cmUgPT0gQ2FjaGVkRW50cnlSZXVzZUZh
aWx1cmU6Ok5vbmUpIHsKKyAgICBpZiAoZGVjaXNpb24gPT0gVXNlRGVjaXNpb246OlVzZSB8fCBk
ZWNpc2lvbiA9PSBVc2VEZWNpc2lvbjo6VmFsaWRhdGUpIHsKICAgICAgICAgTE9HKE5ldHdvcmtD
YWNoZSwgIihOZXR3b3JrUHJvY2Vzcykgd2ViUGFnZUlEICVsbHU6ICVzIGlzIGluIHRoZSBjYWNo
ZSBhbmQgaXMgdXNlZCIsIHdlYlBhZ2VJRCwgcmVxdWVzdFVSTC5zdHJpbmcoKS5hc2NpaSgpLmRh
dGEoKSk7CiAgICAgICAgIE5ldHdvcmtQcm9jZXNzOjpzaW5nbGV0b24oKS5sb2dEaWFnbm9zdGlj
TWVzc2FnZVdpdGhSZXN1bHQod2ViUGFnZUlELCBXZWJDb3JlOjpEaWFnbm9zdGljTG9nZ2luZ0tl
eXM6Om5ldHdvcmtDYWNoZUtleSgpLCBXZWJDb3JlOjpEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnJl
dHJpZXZhbEtleSgpLCBXZWJDb3JlOjpEaWFnbm9zdGljTG9nZ2luZ1Jlc3VsdFBhc3MsIFdlYkNv
cmU6OlNob3VsZFNhbXBsZTo6WWVzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFN0
cmluZyBkaWFnbm9zdGljS2V5ID0gY2FjaGVkRW50cnlSZXVzZUZhaWx1cmVUb0RpYWdub3N0aWNL
ZXkoZmFpbHVyZSk7CisgICAgU3RyaW5nIGRpYWdub3N0aWNLZXkgPSBjYWNoZWRFbnRyeVJldXNl
RmFpbHVyZVRvRGlhZ25vc3RpY0tleShkZWNpc2lvbik7CiAgICAgTE9HKE5ldHdvcmtDYWNoZSwg
IihOZXR3b3JrUHJvY2Vzcykgd2ViUGFnZUlEICVsbHU6ICVzIGlzIGluIHRoZSBjYWNoZSBidXQg
d2Fzbid0IHVzZWQsIHJlYXNvbjogJXMiLCB3ZWJQYWdlSUQsIHJlcXVlc3RVUkwuc3RyaW5nKCku
YXNjaWkoKS5kYXRhKCksIGRpYWdub3N0aWNLZXkudXRmOCgpLmRhdGEoKSk7CiAgICAgTmV0d29y
a1Byb2Nlc3M6OnNpbmdsZXRvbigpLmxvZ0RpYWdub3N0aWNNZXNzYWdlV2l0aFZhbHVlKHdlYlBh
Z2VJRCwgV2ViQ29yZTo6RGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpuZXR3b3JrQ2FjaGVLZXkoKSwg
V2ViQ29yZTo6RGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjp1bnVzYWJsZUNhY2hlZEVudHJ5S2V5KCks
IGRpYWdub3N0aWNLZXksIFdlYkNvcmU6OlNob3VsZFNhbXBsZTo6WWVzKTsKIH0KSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJl
dmlzaW9uIDE4MTk1NykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTc2Niw2ICsxNzY2LDggQEAKIAkJRTFFNTUy
QzUxNkFFMDY1RjAwNEVENjUzIC8qIFNhbmRib3hJbml0aWFsaXphdGlvblBhcmFtZXRlcnMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxRTU1MkMzMTZB
RTA2NUUwMDRFRDY1MyAvKiBTYW5kYm94SW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzLmggKi87IH07
CiAJCUUxRUU1M0UzMTFGOENGQzAwMENDQkVFNCAvKiBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JD
bGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUx
RUU1M0RDMTFGOENGOUYwMENDQkVFNCAvKiBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQu
aCAqLzsgfTsKIAkJRTFFRTUzRTcxMUY4Q0ZGQjAwQ0NCRUU0IC8qIEluamVjdGVkQnVuZGxlUGFn
ZUVkaXRvckNsaWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFMUVFNTNFNjExRjhDRkZCMDBDQ0JFRTQgLyogSW5qZWN0ZWRCdW5kbGVQYWdlRWRp
dG9yQ2xpZW50LmNwcCAqLzsgfTsKKwkJRTQxM0Y1OUQxQUMxQURDNDAwMzQ1MzYwIC8qIE5ldHdv
cmtDYWNoZUVudHJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFNDEzRjU5QjFBQzFBREI2MDAzNDUzNjAgLyogTmV0d29ya0NhY2hlRW50cnkuaCAqLzsg
fTsKKwkJRTQxM0Y1OUYxQUMxQUY5RDAwMzQ1MzYwIC8qIE5ldHdvcmtDYWNoZUVudHJ5LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0MTNGNTlFMUFD
MUFGOUQwMDM0NTM2MCAvKiBOZXR3b3JrQ2FjaGVFbnRyeS5jcHAgKi87IH07CiAJCUU0MkUwNjBG
MUFBNzUyMzQwMEIxMTY5OSAvKiBOZXR3b3JrQ2FjaGVJT0NoYW5uZWxDb2NvYS5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0MkUwNjBEMUFBNzUwRTUw
MEIxMTY5OSAvKiBOZXR3b3JrQ2FjaGVJT0NoYW5uZWxDb2NvYS5tbSAqLzsgfTsKIAkJRTQyRTA2
MTAxQUE3NTIzQjAwQjExNjk5IC8qIE5ldHdvcmtDYWNoZUlPQ2hhbm5lbC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQyRTA2MEIxQUE3NDQwRDAwQjEx
Njk5IC8qIE5ldHdvcmtDYWNoZUlPQ2hhbm5lbC5oICovOyB9OwogCQlFNDJFMDYxMjFBQTc1QUJE
MDBCMTE2OTkgLyogTmV0d29ya0NhY2hlRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTQyRTA2MTExQUE3NUFCRDAwQjExNjk5IC8qIE5ldHdvcmtD
YWNoZURhdGEuaCAqLzsgfTsKQEAgLTQwMTUsNiArNDAxNyw4IEBACiAJCUUxRUU1M0U2MTFGOENG
RkIwMENDQkVFNCAvKiBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xp
ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTFGRUYzOUExOTBGNzZGMzAw
NzMxNjU4IC8qIGNvbS5hcHBsZS5XZWJLaXQuRGF0YWJhc2VzLnNiLmluICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IGNvbS5hcHBs
ZS5XZWJLaXQuRGF0YWJhc2VzLnNiLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlF
MUZFRjM5QzE5MEY3OTFDMDA3MzE2NTggLyogRGF0YWJhc2VQcm9jZXNzSU9TLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRGF0YWJhc2VQcm9jZXNzSU9TLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNDEzRjU5QjFBQzFBREI2MDAzNDUzNjAgLyog
TmV0d29ya0NhY2hlRW50cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmV0
d29ya0NhY2hlRW50cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTQxM0Y1OUUx
QUMxQUY5RDAwMzQ1MzYwIC8qIE5ldHdvcmtDYWNoZUVudHJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5ldHdvcmtDYWNoZUVudHJ5LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRTQyRTA2MEIxQUE3NDQwRDAwQjExNjk5IC8qIE5ldHdvcmtDYWNo
ZUlPQ2hhbm5lbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOZXR3b3JrQ2Fj
aGVJT0NoYW5uZWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQyRTA2MEQxQUE3
NTBFNTAwQjExNjk5IC8qIE5ldHdvcmtDYWNoZUlPQ2hhbm5lbENvY29hLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gTmV0d29ya0NhY2hlSU9DaGFubmVsQ29jb2Eu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0MkUwNjExMUFBNzVBQkQwMEIxMTY5
OSAvKiBOZXR3b3JrQ2FjaGVEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IE5ldHdvcmtDYWNoZURhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTc0NzAs
NiArNzQ3NCw4IEBACiAJCQkJRTQ4OUQyODcxQTBBMkRCODAwNzhDMDZBIC8qIE5ldHdvcmtDYWNo
ZURlY29kZXIuaCAqLywKIAkJCQlFNDg5RDI4ODFBMEEyREI4MDA3OEMwNkEgLyogTmV0d29ya0Nh
Y2hlRW5jb2Rlci5jcHAgKi8sCiAJCQkJRTQ4OUQyODkxQTBBMkRCODAwNzhDMDZBIC8qIE5ldHdv
cmtDYWNoZUVuY29kZXIuaCAqLywKKwkJCQlFNDEzRjU5RTFBQzFBRjlEMDAzNDUzNjAgLyogTmV0
d29ya0NhY2hlRW50cnkuY3BwICovLAorCQkJCUU0MTNGNTlCMUFDMUFEQjYwMDM0NTM2MCAvKiBO
ZXR3b3JrQ2FjaGVFbnRyeS5oICovLAogCQkJCTgzNEIyNTBFMUE4MzFBOEQwMENGQjE1MCAvKiBO
ZXR3b3JrQ2FjaGVGaWxlU3lzdGVtUG9zaXguaCAqLywKIAkJCQlFNDJFMDYwQjFBQTc0NDBEMDBC
MTE2OTkgLyogTmV0d29ya0NhY2hlSU9DaGFubmVsLmggKi8sCiAJCQkJRTQyRTA2MEQxQUE3NTBF
NTAwQjExNjk5IC8qIE5ldHdvcmtDYWNoZUlPQ2hhbm5lbENvY29hLm1tICovLApAQCAtNzgyOSw2
ICs3ODM1LDcgQEAKIAkJCQkxQTRBOUYzMzEyQjg0NEUyMDA4RkU5ODQgLyogUGx1Z2luUXVpcmtz
LmggaW4gSGVhZGVycyAqLywKIAkJCQk3Q0Q2MjI3ODE3MzlEODYzMDA1QkQ3RkYgLyogUGx1Z2lu
U2FuZGJveFByb2ZpbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNkZCN0FGMTFFNjRCNjgwMERC
MTM3MSAvKiBQbHVnaW5WaWV3LmggaW4gSGVhZGVycyAqLywKKwkJCQlFNDEzRjU5RDFBQzFBREM0
MDAzNDUzNjAgLyogTmV0d29ya0NhY2hlRW50cnkuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxQ0Mx
QjkwMTJEN0VBREYwMDYyNTgzOCAvKiBQcmludEluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTg2
Rjk1MzY1MThGRjU4RjUwMDFEQjJFRiAvKiBQcm9jZXNzQXNzZXJ0aW9uLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzFBN0M1ODExMzZFMTlDMDBGQjcxNjcgLyogUHJvY2Vzc0xhdW5jaGVyLmggaW4g
SGVhZGVycyAqLywKQEAgLTkzODMsNiArOTM5MCw3IEBACiAJCQkJMUEyRDk1NzAxMjg0ODU2NDAw
MUVCOTYyIC8qIENoaWxkUHJvY2Vzcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzgyODM3QjE2
QjM2QTRGMDBBMjc4RkUgLyogQ2hpbGRQcm9jZXNzRW50cnlQb2ludC5tbSBpbiBTb3VyY2VzICov
LAogCQkJCUE3RTkzQ0VEMTkyNTMzMTEwMEExREM0OCAvKiBDaGlsZFByb2Nlc3NJT1MubW0gaW4g
U291cmNlcyAqLywKKwkJCQlFNDEzRjU5RjFBQzFBRjlEMDAzNDUzNjAgLyogTmV0d29ya0NhY2hl
RW50cnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOUY1NEY4OEYxNjQ4OEU4NzAwN0RGODFBIC8q
IENoaWxkUHJvY2Vzc01hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUUxNTEzQzY2MTY2RUFCQjIw
MDE0OUZDQiAvKiBDaGlsZFByb2Nlc3NQcm94eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTJB
NEIwRTE1ODZBMjI0MDA5MEM5RTkgLyogQ29sb3JTcGFjZURhdGEubW0gaW4gU291cmNlcyAqLywK
</data>
<flag name="review"
          id="274222"
          type_id="1"
          status="+"
          setter="cdumez"
    />
          </attachment>
      

    </bug>

</bugzilla>