<?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>154017</bug_id>
          
          <creation_ts>2016-02-08 16:21:32 -0800</creation_ts>
          <short_desc>JSC SamplingProfiler: Use a thread + sleep loop instead of WTF::WorkQueue for taking samples</short_desc>
          <delta_ts>2016-04-05 20:55:19 -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>JavaScriptCore</component>
          <version>WebKit 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="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>joepeck</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>sukolsak</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1163055</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-02-08 16:21:32 -0800</bug_when>
    <thetext>This is a cleaner design.
We will also take better control of keeping consistent sample times closer to 1ms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1163075</commentid>
    <comment_count>1</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-02-08 17:14:12 -0800</bug_when>
    <thetext>We would ask WorkQueue to wake us up in 1ms and regularly be woken up in 1.7ms.
We&apos;re getting wake up times much closer to what we ask for from just using
sleep. There is also less overhead from time when woken up to time when doing
work by not using GCD.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1163141</commentid>
    <comment_count>2</comment_count>
      <attachid>270911</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-02-08 21:49:26 -0800</bug_when>
    <thetext>Created attachment 270911
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1163142</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-02-08 21:51:39 -0800</bug_when>
    <thetext>Attachment 270911 did not pass style-queue:


ERROR: Source/JavaScriptCore/runtime/SamplingProfiler.cpp:212:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 1 in 5 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>1163234</commentid>
    <comment_count>4</comment_count>
      <attachid>270911</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2016-02-09 11:10:17 -0800</bug_when>
    <thetext>Comment on attachment 270911
patch

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

&gt; Source/JavaScriptCore/runtime/SamplingProfiler.cpp:188
&gt;      , m_timingInterval(std::chrono::microseconds(1000))

This could be: std::chrono::milliseconds(1)

&gt; Source/JavaScriptCore/runtime/VM.cpp:320
&gt; +        RefPtr&lt;Stopwatch&gt; stopwatch = Stopwatch::create();

Might be clearer if this is a Ref&lt;&gt; and not a RefPtr&lt;&gt; since there is only this instance that will be moved.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1179665</commentid>
    <comment_count>5</comment_count>
      <attachid>270911</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-03-31 16:25:20 -0700</bug_when>
    <thetext>Comment on attachment 270911
patch

I&apos;m going to rebase a modern version of this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1180855</commentid>
    <comment_count>6</comment_count>
      <attachid>275672</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-04-05 09:58:32 -0700</bug_when>
    <thetext>Created attachment 275672
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1180882</commentid>
    <comment_count>7</comment_count>
      <attachid>275672</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-04-05 11:08:35 -0700</bug_when>
    <thetext>Comment on attachment 275672
patch

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

r=me

&gt; Source/JavaScriptCore/ChangeLog:16
&gt; +        higher rates, this patch is a performance regression. It&apos;s slower because
&gt; +        we&apos;re sampling more frequently.

You should state the magnitude here.

&gt; Source/JavaScriptCore/runtime/SamplingProfiler.cpp:209
&gt; +        ref(); // Matching deref() is timerLoop() when we shut down.
&gt; +        m_threadIdentifier = createThread(createThreadCallback, this, &quot;jsc.sampling-profiler.thread&quot;);

You can avoid manual ref/deref and manual casting, which are anti-patterns, by using the lambda version of createThread:

if (m_threadIdentifier)
    return;

RefPtr&lt;SamplingProfiler&gt; profiler = this;
createThread(&quot;jsc.sampling-profiler.thread&quot;, [profiler]() { 
    profiler-&gt;timerLoop()
});

&gt; Source/JavaScriptCore/runtime/SamplingProfiler.cpp:235
&gt; +        std::this_thread::sleep_for(m_timingInterval &gt; stackTraceProcessingTime ? m_timingInterval - stackTraceProcessingTime : m_timingInterval);

I think you want m_timingInterval - std::min(m_timingInterval, stackTraceProcessingTime).

Otherwise, if sampling takes 0.99ms, you&apos;ll delay 0.01ms, but if it takes 1.0ms, you&apos;ll delay 1.0ms.

Alternatively, you could do 1.0ms unconditionally, based on your argument that execution is paused during (most of) stack processing time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1181126</commentid>
    <comment_count>8</comment_count>
      <attachid>275672</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-04-05 19:19:51 -0700</bug_when>
    <thetext>Comment on attachment 275672
patch

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

&gt;&gt; Source/JavaScriptCore/ChangeLog:16
&gt;&gt; +        we&apos;re sampling more frequently.
&gt; 
&gt; You should state the magnitude here.

Will do.

&gt;&gt; Source/JavaScriptCore/runtime/SamplingProfiler.cpp:209
&gt;&gt; +        m_threadIdentifier = createThread(createThreadCallback, this, &quot;jsc.sampling-profiler.thread&quot;);
&gt; 
&gt; You can avoid manual ref/deref and manual casting, which are anti-patterns, by using the lambda version of createThread:
&gt; 
&gt; if (m_threadIdentifier)
&gt;     return;
&gt; 
&gt; RefPtr&lt;SamplingProfiler&gt; profiler = this;
&gt; createThread(&quot;jsc.sampling-profiler.thread&quot;, [profiler]() { 
&gt;     profiler-&gt;timerLoop()
&gt; });

This is much nicer. I didn&apos;t know we had this API. I&apos;ve updated to use it.

&gt;&gt; Source/JavaScriptCore/runtime/SamplingProfiler.cpp:235
&gt;&gt; +        std::this_thread::sleep_for(m_timingInterval &gt; stackTraceProcessingTime ? m_timingInterval - stackTraceProcessingTime : m_timingInterval);
&gt; 
&gt; I think you want m_timingInterval - std::min(m_timingInterval, stackTraceProcessingTime).
&gt; 
&gt; Otherwise, if sampling takes 0.99ms, you&apos;ll delay 0.01ms, but if it takes 1.0ms, you&apos;ll delay 1.0ms.
&gt; 
&gt; Alternatively, you could do 1.0ms unconditionally, based on your argument that execution is paused during (most of) stack processing time.

I&apos;m going with your &quot;m_timingInterval - std::min(m_timingInterval, stackTraceProcessingTime)&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1181128</commentid>
    <comment_count>9</comment_count>
      <attachid>275738</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-04-05 19:20:54 -0700</bug_when>
    <thetext>Created attachment 275738
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1181143</commentid>
    <comment_count>10</comment_count>
      <attachid>275738</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-04-05 20:55:14 -0700</bug_when>
    <thetext>Comment on attachment 275738
patch for landing

Clearing flags on attachment: 275738

Committed r199092: &lt;http://trac.webkit.org/changeset/199092&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1181144</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-04-05 20:55:19 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>270911</attachid>
            <date>2016-02-08 21:49:26 -0800</date>
            <delta_ts>2016-04-05 09:58:32 -0700</delta_ts>
            <desc>patch</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>18772</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk2MzA0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUwIEBA
CisyMDE2LTAyLTA4ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IEpTQyBTYW1wbGluZ1Byb2ZpbGVyOiBVc2UgYSB0aHJlYWQgKyBzbGVlcCBsb29wIGluc3RlYWQg
b2YgV1RGOjpXb3JrUXVldWUgZm9yIHRha2luZyBzYW1wbGVzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTQwMTcKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCeSBtb3ZpbmcgdG8gYW4gZXhwbGljaXRseSBj
cmVhdGVkIHNlcGVyYXRlIHRocmVhZCArIHNhbXBsZS10aGVuLXNsZWVwCisgICAgICAgIGxvb3As
IHdlIGNhbiByZW1vdmUgYSBsb3Qgb2YgdGhlIGNydWZ0eSBjb2RlIGFyb3VuZCBXb3JrUXVldWUu
CisgICAgICAgIE1vdmluZyB0byBhIHNhbXBsZS10aGVuLXNsZWVwIGxvb3AsIHdlIGFsc28gaGF2
ZSBsZXNzIG92ZXJoZWFkCisgICAgICAgIGZyb20gdGhlIHRpbWUgdGhlIHRocmVhZCB3YWtlcyB1
cCB0byB3aGVuIGl0IGJlZ2lucyBleGVjdXRpb24uCisgICAgICAgIFdlJ3JlIGFsc28gZ2V0dGlu
ZyBzYW1wbGUgcmF0ZXMgdGhhdCBhcmUgbXVjaCBjbG9zZXIgdG8gd2hhdCB3ZSdyZQorICAgICAg
ICBhc2tpbmcgdGhlIE9TIGZvci4gV2hlbiB0aGUgc2FtcGxpbmcgaGFuZGxlciB3YXMgYnVpbHQg
b2ZmIG9mIFdvcmtRdWV1ZSwKKyAgICAgICAgd2UnZCBvZnRlbiBnZXQgc2FtcGxlIHJhdGVzIG11
Y2ggaGlnaGVyIHRoYW4gdGhlIDFtcyB3ZSBhc2tlZCBmb3IuIE9uIEtyYWtlbiwKKyAgICAgICAg
d2Ugd291bGQgYXZlcmFnZSBhYm91dCAxLjdtcyBzYW1wbGUgcmF0ZXMsIGV2ZW4gdGhvdWdoIHdl
J2QgYXNrIGZvciBhIDFtcyByYXRlLgorICAgICAgICBOb3csIG9uIEtyYWtlbiwgd2UncmUgZ2V0
dGluZyBhYm91dCAxLjJtcyByYXRlcy4gQmVjYXVzZSB3ZSdyZSBnZXR0aW5nCisgICAgICAgIGhp
Z2hlciByYXRlcywgdGhpcyBwYXRjaCBpcyBhIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24uIEl0J3Mg
c2xvd2VyIG9ubHkKKyAgICAgICAgYmVjYXVzZSB3ZSdyZSBzYW1wbGluZyBtb3JlIGZyZXF1ZW50
bHkuIEkgdmVyaWZpZWQgdGhpcyBieSBtb3ZpbmcgdGhlCisgICAgICAgIHNhbXBsZSBzbGVlcCB0
aW1lIHRvIGJlIGEgbnVtYmVyIHRoYXQgaXMgaGlnaGVyIGFuZCBtb3JlIHJlcHJlc2VudGF0aXZl
CisgICAgICAgIG9mIHdoYXQgd2Ugc2F3IHdpdGggV29ya1F1ZXVlLCBhbmQgdGhlIHBlcmZvcm1h
bmNlIHdhcyBuZXV0cmFsLgorCisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JT
Y3JpcHRQcm9maWxlckFnZW50LmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yU2Ny
aXB0UHJvZmlsZXJBZ2VudDo6dHJhY2tpbmdDb21wbGV0ZSk6CisgICAgICAgICogcnVudGltZS9T
YW1wbGluZ1Byb2ZpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6U2Ft
cGxpbmdQcm9maWxlcik6CisgICAgICAgIChKU0M6OlNhbXBsaW5nUHJvZmlsZXI6On5TYW1wbGlu
Z1Byb2ZpbGVyKToKKyAgICAgICAgKEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6Y3JlYXRlVGhyZWFk
Q2FsbGJhY2spOgorICAgICAgICAoSlNDOjpTYW1wbGluZ1Byb2ZpbGVyOjp0aW1lckxvb3ApOgor
ICAgICAgICAoSlNDOjpTYW1wbGluZ1Byb2ZpbGVyOjp0YWtlU2FtcGxlKToKKyAgICAgICAgKEpT
Qzo6dHJ5R2V0Qnl0ZWNvZGVJbmRleCk6CisgICAgICAgIChKU0M6OlNhbXBsaW5nUHJvZmlsZXI6
OnNodXRkb3duKToKKyAgICAgICAgKEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6c3RhcnQpOgorICAg
ICAgICAoSlNDOjpTYW1wbGluZ1Byb2ZpbGVyOjpwYXVzZSk6CisgICAgICAgIChKU0M6OlNhbXBs
aW5nUHJvZmlsZXI6Om5vdGljZUN1cnJlbnRUaHJlYWRBc0pTQ0V4ZWN1dGlvblRocmVhZCk6Cisg
ICAgICAgIChKU0M6OlNhbXBsaW5nUHJvZmlsZXI6OmNyZWF0ZVRocmVhZElmTmVjZXNzYXJ5KToK
KyAgICAgICAgKEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6bm90aWNlSlNMb2NrQWNxdWlzaXRpb24p
OgorICAgICAgICAoSlNDOjpTYW1wbGluZ1Byb2ZpbGVyOjpub3RpY2VWTUVudHJ5KToKKyAgICAg
ICAgKEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6Y2xlYXJEYXRhKToKKyAgICAgICAgKEpTQzo6U2Ft
cGxpbmdQcm9maWxlcjo6c3RvcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlNhbXBsaW5nUHJv
ZmlsZXI6OmRpc3BhdGNoSWZOZWNlc3NhcnkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTYW1w
bGluZ1Byb2ZpbGVyOjpkaXNwYXRjaEZ1bmN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50
aW1lL1NhbXBsaW5nUHJvZmlsZXIuaDoKKyAgICAgICAgKEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6
c2V0VGltaW5nSW50ZXJ2YWwpOgorICAgICAgICAoSlNDOjpTYW1wbGluZ1Byb2ZpbGVyOjpzZXRT
dG9wV2F0Y2gpOgorICAgICAgICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6
Vk0pOgorCiAyMDE2LTAyLTA4ICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29t
PgogCiAgICAgICAgIEVycm9yIGNvbnN0cnVjdGlvbiBmb3IgaW5saW5lZCBvcGVyYXRpb25zIHNo
b3VsZCBub3QgdXNlIHRoZSBpbmxpbmVyJ3MgQ29kZUJsb2NrCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JTY3JpcHRQcm9maWxlckFnZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JTY3JpcHRQcm9maWxlckFnZW50LmNwcAkocmV2aXNpb24gMTk2MjQzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yU2NyaXB0UHJvZmls
ZXJBZ2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMyw3ICsyMDMsNyBAQCB2b2lkIEluc3Bl
Y3RvclNjcmlwdFByb2ZpbGVyQWdlbnQ6OnRyYWNrCiAgICAgICAgIFNhbXBsaW5nUHJvZmlsZXIq
IHNhbXBsaW5nUHJvZmlsZXIgPSBtX2Vudmlyb25tZW50LnNjcmlwdERlYnVnU2VydmVyKCkudm0o
KS5zYW1wbGluZ1Byb2ZpbGVyKCk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNhbXBsaW5nUHJv
ZmlsZXIpOwogICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihzYW1wbGluZ1Byb2ZpbGVyLT5nZXRM
b2NrKCkpOwotICAgICAgICBzYW1wbGluZ1Byb2ZpbGVyLT5zdG9wKGxvY2tlcik7CisgICAgICAg
IHNhbXBsaW5nUHJvZmlsZXItPnBhdXNlKGxvY2tlcik7CiAgICAgICAgIFZlY3RvcjxTYW1wbGlu
Z1Byb2ZpbGVyOjpTdGFja1RyYWNlPiBzdGFja1RyYWNlcyA9IHNhbXBsaW5nUHJvZmlsZXItPnJl
bGVhc2VTdGFja1RyYWNlcyhsb2NrZXIpOwogICAgICAgICBSZWY8UHJvdG9jb2w6OlNjcmlwdFBy
b2ZpbGVyOjpTYW1wbGVzPiBzYW1wbGVzID0gYnVpbGRTYW1wbGVzKG1fZW52aXJvbm1lbnQuc2Ny
aXB0RGVidWdTZXJ2ZXIoKS52bSgpLCBXVEZNb3ZlKHN0YWNrVHJhY2VzKSwgc2FtcGxpbmdQcm9m
aWxlci0+dG90YWxUaW1lKGxvY2tlcikpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAkocmV2aXNpb24gMTk2MjQzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE4MCwxNSArMTgwLDE0IEBAIHByaXZhdGU6CiB9OwogCiBTYW1wbGlu
Z1Byb2ZpbGVyOjpTYW1wbGluZ1Byb2ZpbGVyKFZNJiB2bSwgUmVmUHRyPFN0b3B3YXRjaD4mJiBz
dG9wd2F0Y2gpCi0gICAgOiBtX3ZtKHZtKQorICAgIDogbV90aHJlYWRJZGVudGlmaWVyKDApCisg
ICAgLCBtX2lzUGF1c2VkKGZhbHNlKQorICAgICwgbV9pc1NodXREb3duKGZhbHNlKQorICAgICwg
bV92bSh2bSkKICAgICAsIG1fc3RvcHdhdGNoKFdURk1vdmUoc3RvcHdhdGNoKSkKICAgICAsIG1f
dGltaW5nSW50ZXJ2YWwoc3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kcygxMDAwKSkKICAgICAsIG1f
dG90YWxUaW1lKDApCi0gICAgLCBtX3RpbWVyUXVldWUoV29ya1F1ZXVlOjpjcmVhdGUoImpzYy5z
YW1wbGluZy1wcm9maWxlci5xdWV1ZSIsIFdvcmtRdWV1ZTo6VHlwZTo6U2VyaWFsLCBXb3JrUXVl
dWU6OlFPUzo6VXNlckludGVyYWN0aXZlKSkKICAgICAsIG1fanNjRXhlY3V0aW9uVGhyZWFkKG51
bGxwdHIpCi0gICAgLCBtX2lzQWN0aXZlKGZhbHNlKQotICAgICwgbV9pc1BhdXNlZChmYWxzZSkK
LSAgICAsIG1faGFzRGlzcGF0Y2hlZEZ1bmN0aW9uKGZhbHNlKQogewogICAgIGlmIChzUmVwb3J0
U3RhdHMpIHsKICAgICAgICAgc051bVRvdGFsV2Fsa3MgPSAwOwpAQCAtMTk2LDk5ICsxOTUsMTE2
IEBAIFNhbXBsaW5nUHJvZmlsZXI6OlNhbXBsaW5nUHJvZmlsZXIoVk0mIHYKICAgICB9CiAKICAg
ICBtX2N1cnJlbnRGcmFtZXMuZ3JvdygyNTYpOworfQogCi0gICAgbV9oYW5kbGVyID0gW3RoaXNd
ICgpIHsKLSAgICAgICAgTG9ja0hvbGRlciBzYW1wbGluZ1Byb2ZpbGVyTG9ja2VyKG1fbG9jayk7
Ci0gICAgICAgIGlmICghbV9pc0FjdGl2ZSB8fCAhbV9qc2NFeGVjdXRpb25UaHJlYWQgfHwgbV9p
c1BhdXNlZCkgewotICAgICAgICAgICAgbV9oYXNEaXNwYXRjaGVkRnVuY3Rpb24gPSBmYWxzZTsK
LSAgICAgICAgICAgIGRlcmVmKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KK1Nh
bXBsaW5nUHJvZmlsZXI6On5TYW1wbGluZ1Byb2ZpbGVyKCkKK3sKK30KIAotICAgICAgICBpZiAo
bV92bS5lbnRyeVNjb3BlKSB7Ci0gICAgICAgICAgICBkb3VibGUgbm93VGltZSA9IG1fc3RvcHdh
dGNoLT5lbGFwc2VkVGltZSgpOwordm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjpjcmVhdGVUaHJlYWRD
YWxsYmFjayh2b2lkKiBzYW1wbGluZ1Byb2ZpbGVyKQoreworICAgIHN0YXRpY19jYXN0PFNhbXBs
aW5nUHJvZmlsZXIqPihzYW1wbGluZ1Byb2ZpbGVyKS0+dGltZXJMb29wKCk7Cit9CiAKLSAgICAg
ICAgICAgIExvY2tIb2xkZXIgbWFjaGluZVRocmVhZHNMb2NrZXIobV92bS5oZWFwLm1hY2hpbmVU
aHJlYWRzKCkuZ2V0TG9jaygpKTsKLSAgICAgICAgICAgIExvY2tIb2xkZXIgY29kZUJsb2NrU2V0
TG9ja2VyKG1fdm0uaGVhcC5jb2RlQmxvY2tTZXQoKS5nZXRMb2NrKCkpOwotICAgICAgICAgICAg
TG9ja0hvbGRlciBleGVjdXRhYmxlQWxsb2NhdG9yTG9ja2VyKG1fdm0uZXhlY3V0YWJsZUFsbG9j
YXRvci5nZXRMb2NrKCkpOwotCi0gICAgICAgICAgICBib29sIGRpZFN1c3BlbmQgPSBtX2pzY0V4
ZWN1dGlvblRocmVhZC0+c3VzcGVuZCgpOwotICAgICAgICAgICAgaWYgKGRpZFN1c3BlbmQpIHsK
LSAgICAgICAgICAgICAgICAvLyBXaGlsZSB0aGUgSlNDIHRocmVhZCBpcyBzdXNwZW5kZWQsIHdl
IGNhbid0IGRvIHRoaW5ncyBsaWtlIG1hbGxvYyBiZWNhdXNlIHRoZSBKU0MgdGhyZWFkCi0gICAg
ICAgICAgICAgICAgLy8gbWF5IGJlIGhvbGRpbmcgdGhlIG1hbGxvYyBsb2NrLgotICAgICAgICAg
ICAgICAgIEV4ZWNTdGF0ZSogY2FsbEZyYW1lOwotICAgICAgICAgICAgICAgIHZvaWQqIG1hY2hp
bmVQQzsKLSAgICAgICAgICAgICAgICBib29sIHRvcEZyYW1lSXNMTEludCA9IGZhbHNlOwotICAg
ICAgICAgICAgICAgIHZvaWQqIGxsaW50UEM7Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICBNYWNoaW5lVGhyZWFkczo6VGhyZWFkOjpSZWdpc3RlcnMgcmVnaXN0ZXJzOwot
ICAgICAgICAgICAgICAgICAgICBtX2pzY0V4ZWN1dGlvblRocmVhZC0+Z2V0UmVnaXN0ZXJzKHJl
Z2lzdGVycyk7Ci0gICAgICAgICAgICAgICAgICAgIGNhbGxGcmFtZSA9IHN0YXRpY19jYXN0PEV4
ZWNTdGF0ZSo+KHJlZ2lzdGVycy5mcmFtZVBvaW50ZXIoKSk7Ci0gICAgICAgICAgICAgICAgICAg
IG1hY2hpbmVQQyA9IHJlZ2lzdGVycy5pbnN0cnVjdGlvblBvaW50ZXIoKTsKLSAgICAgICAgICAg
ICAgICAgICAgbGxpbnRQQyA9IHJlZ2lzdGVycy5sbGludFBDKCk7Ci0gICAgICAgICAgICAgICAg
ICAgIG1fanNjRXhlY3V0aW9uVGhyZWFkLT5mcmVlUmVnaXN0ZXJzKHJlZ2lzdGVycyk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBMZXRzIGhhdmUgYSB3YXkg
b2YgZGV0ZWN0aW5nIHdoZW4gd2UncmUgcGFyc2luZyBjb2RlLgotICAgICAgICAgICAgICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTI3NjEKLSAgICAgICAg
ICAgICAgICBpZiAobV92bS5leGVjdXRhYmxlQWxsb2NhdG9yLmlzVmFsaWRFeGVjdXRhYmxlTWVt
b3J5KGV4ZWN1dGFibGVBbGxvY2F0b3JMb2NrZXIsIG1hY2hpbmVQQykpIHsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKG1fdm0uaXNFeGVjdXRpbmdJblJlZ0V4cEpJVCkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gRklYTUU6IFdlJ3JlIGV4ZWN1dGluZyBhIHJlZ2V4cC4gTGV0cyBnYXRo
ZXIgbW9yZSBpbnRlcnN0aW5nIGRhdGEuCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUyNzI5Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBjYWxsRnJhbWUgPSBtX3ZtLnRvcENhbGxGcmFtZTsgLy8gV2UgbmVlZCB0byBk
byB0aGlzIG9yIGVsc2Ugd2UnZCBmYWlsIG91ciBiYWNrdHJhY2UgdmFsaWRhdGlvbiBiL2MgdGhp
cyBpc24ndCBhIEpTIGZyYW1lLgotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgfSBlbHNlIGlmIChMTEludDo6aXNMTEludFBDKG1hY2hpbmVQQykpIHsKLSAgICAgICAgICAg
ICAgICAgICAgdG9wRnJhbWVJc0xMSW50ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgLy8g
V2UncmUgb2theSB0byB0YWtlIGEgbm9ybWFsIHN0YWNrIHRyYWNlIHdoZW4gdGhlIFBDCi0gICAg
ICAgICAgICAgICAgICAgIC8vIGlzIGluIExMSW50IGNvZGUuCi0gICAgICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gV2UgcmVzb3J0IHRvIHRvcENhbGxGcmFtZSB0
byBzZWUgaWYgd2UgY2FuIGdldCBhbnl0aGluZwotICAgICAgICAgICAgICAgICAgICAvLyB1c2Vm
dWwuIFdlIHVzdWFsbHkgZ2V0IGhlcmUgd2hlbiB3ZSdyZSBleGVjdXRpbmcgQyBjb2RlLgotICAg
ICAgICAgICAgICAgICAgICBjYWxsRnJhbWUgPSBtX3ZtLnRvcENhbGxGcmFtZTsKLSAgICAgICAg
ICAgICAgICB9Cit2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnRpbWVyTG9vcCgpCit7CisgICAgd2hp
bGUgKHRydWUpIHsKKyAgICAgICAgeworICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9s
b2NrKTsKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShtX2lzU2h1dERvd24pKSB7CisgICAgICAg
ICAgICAgICAgbG9ja2VyLnVubG9ja0Vhcmx5KCk7CisgICAgICAgICAgICAgICAgZGVyZWYoKTsK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAg
ICBzaXplX3Qgd2Fsa1NpemU7Ci0gICAgICAgICAgICAgICAgYm9vbCB3YXNWYWxpZFdhbGs7Ci0g
ICAgICAgICAgICAgICAgYm9vbCBkaWRSdW5PdXRPZlZlY3RvclNwYWNlOwotICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgRnJhbWVXYWxrZXIgd2Fsa2VyKGNhbGxGcmFtZSwg
bV92bSwgY29kZUJsb2NrU2V0TG9ja2VyLCBtYWNoaW5lVGhyZWFkc0xvY2tlcik7Ci0gICAgICAg
ICAgICAgICAgICAgIHdhbGtTaXplID0gd2Fsa2VyLndhbGsobV9jdXJyZW50RnJhbWVzLCBkaWRS
dW5PdXRPZlZlY3RvclNwYWNlKTsKLSAgICAgICAgICAgICAgICAgICAgd2FzVmFsaWRXYWxrID0g
d2Fsa2VyLndhc1ZhbGlkV2FsaygpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
ICghbV9pc1BhdXNlZCAmJiBtX2pzY0V4ZWN1dGlvblRocmVhZCkKKyAgICAgICAgICAgICAgICB0
YWtlU2FtcGxlKGxvY2tlcik7CisgICAgICAgICAgICBtX2xhc3RUaW1lID0gbV9zdG9wd2F0Y2gt
PmVsYXBzZWRUaW1lKCk7CisgICAgICAgIH0KKworICAgICAgICBzdGQ6OnRoaXNfdGhyZWFkOjpz
bGVlcF9mb3IobV90aW1pbmdJbnRlcnZhbCk7CisgICAgfQorfQogCi0gICAgICAgICAgICAgICAg
bV9qc2NFeGVjdXRpb25UaHJlYWQtPnJlc3VtZSgpOwordm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjp0
YWtlU2FtcGxlKGNvbnN0IExvY2tIb2xkZXImKQoreworICAgIEFTU0VSVCghbV9pc1BhdXNlZCAm
JiBtX2pzY0V4ZWN1dGlvblRocmVhZCAmJiBtX2xvY2suaXNMb2NrZWQoKSk7CiAKLSAgICAgICAg
ICAgICAgICAvLyBXZSBjYW4gbm93IHVzZSBkYXRhIHN0cnVjdHVyZXMgdGhhdCBtYWxsb2MsIGFu
ZCBkbyBvdGhlciBpbnRlcmVzdGluZyB0aGluZ3MsIGFnYWluLgorICAgIGlmIChtX3ZtLmVudHJ5
U2NvcGUpIHsKKyAgICAgICAgZG91YmxlIG5vd1RpbWUgPSBtX3N0b3B3YXRjaC0+ZWxhcHNlZFRp
bWUoKTsKKworICAgICAgICBMb2NrSG9sZGVyIG1hY2hpbmVUaHJlYWRzTG9ja2VyKG1fdm0uaGVh
cC5tYWNoaW5lVGhyZWFkcygpLmdldExvY2soKSk7CisgICAgICAgIExvY2tIb2xkZXIgY29kZUJs
b2NrU2V0TG9ja2VyKG1fdm0uaGVhcC5jb2RlQmxvY2tTZXQoKS5nZXRMb2NrKCkpOworICAgICAg
ICBMb2NrSG9sZGVyIGV4ZWN1dGFibGVBbGxvY2F0b3JMb2NrZXIobV92bS5leGVjdXRhYmxlQWxs
b2NhdG9yLmdldExvY2soKSk7CisKKyAgICAgICAgYm9vbCBkaWRTdXNwZW5kID0gbV9qc2NFeGVj
dXRpb25UaHJlYWQtPnN1c3BlbmQoKTsKKyAgICAgICAgaWYgKGRpZFN1c3BlbmQpIHsKKyAgICAg
ICAgICAgIC8vIFdoaWxlIHRoZSBKU0MgdGhyZWFkIGlzIHN1c3BlbmRlZCwgd2UgY2FuJ3QgZG8g
dGhpbmdzIGxpa2UgbWFsbG9jIGJlY2F1c2UgdGhlIEpTQyB0aHJlYWQKKyAgICAgICAgICAgIC8v
IG1heSBiZSBob2xkaW5nIHRoZSBtYWxsb2MgbG9jay4KKyAgICAgICAgICAgIEV4ZWNTdGF0ZSog
Y2FsbEZyYW1lOworICAgICAgICAgICAgdm9pZCogbWFjaGluZVBDOworICAgICAgICAgICAgYm9v
bCB0b3BGcmFtZUlzTExJbnQgPSBmYWxzZTsKKyAgICAgICAgICAgIHZvaWQqIGxsaW50UEM7Cisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTWFjaGluZVRocmVhZHM6OlRocmVhZDo6UmVn
aXN0ZXJzIHJlZ2lzdGVyczsKKyAgICAgICAgICAgICAgICBtX2pzY0V4ZWN1dGlvblRocmVhZC0+
Z2V0UmVnaXN0ZXJzKHJlZ2lzdGVycyk7CisgICAgICAgICAgICAgICAgY2FsbEZyYW1lID0gc3Rh
dGljX2Nhc3Q8RXhlY1N0YXRlKj4ocmVnaXN0ZXJzLmZyYW1lUG9pbnRlcigpKTsKKyAgICAgICAg
ICAgICAgICBtYWNoaW5lUEMgPSByZWdpc3RlcnMuaW5zdHJ1Y3Rpb25Qb2ludGVyKCk7CisgICAg
ICAgICAgICAgICAgbGxpbnRQQyA9IHJlZ2lzdGVycy5sbGludFBDKCk7CisgICAgICAgICAgICAg
ICAgbV9qc2NFeGVjdXRpb25UaHJlYWQtPmZyZWVSZWdpc3RlcnMocmVnaXN0ZXJzKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIC8vIEZJWE1FOiBMZXRzIGhhdmUgYSB3YXkgb2YgZGV0ZWN0
aW5nIHdoZW4gd2UncmUgcGFyc2luZyBjb2RlLgorICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1Mjc2MQorICAgICAgICAgICAgaWYgKG1fdm0u
ZXhlY3V0YWJsZUFsbG9jYXRvci5pc1ZhbGlkRXhlY3V0YWJsZU1lbW9yeShleGVjdXRhYmxlQWxs
b2NhdG9yTG9ja2VyLCBtYWNoaW5lUEMpKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fdm0uaXNF
eGVjdXRpbmdJblJlZ0V4cEpJVCkgeworICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2Un
cmUgZXhlY3V0aW5nIGEgcmVnZXhwLiBMZXRzIGdhdGhlciBtb3JlIGludGVyc3RpbmcgZGF0YS4K
KyAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE1MjcyOQorICAgICAgICAgICAgICAgICAgICBjYWxsRnJhbWUgPSBtX3ZtLnRvcENh
bGxGcmFtZTsgLy8gV2UgbmVlZCB0byBkbyB0aGlzIG9yIGVsc2Ugd2UnZCBmYWlsIG91ciBiYWNr
dHJhY2UgdmFsaWRhdGlvbiBiL2MgdGhpcyBpc24ndCBhIEpTIGZyYW1lLgorICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAoTExJbnQ6OmlzTExJbnRQQyhtYWNoaW5lUEMp
KSB7CisgICAgICAgICAgICAgICAgdG9wRnJhbWVJc0xMSW50ID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICAvLyBXZSdyZSBva2F5IHRvIHRha2UgYSBub3JtYWwgc3RhY2sgdHJhY2Ugd2hlbiB0aGUg
UEMKKyAgICAgICAgICAgICAgICAvLyBpcyBpbiBMTEludCBjb2RlLgorICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAvLyBXZSByZXNvcnQgdG8gdG9wQ2FsbEZyYW1lIHRvIHNl
ZSBpZiB3ZSBjYW4gZ2V0IGFueXRoaW5nCisgICAgICAgICAgICAgICAgLy8gdXNlZnVsLiBXZSB1
c3VhbGx5IGdldCBoZXJlIHdoZW4gd2UncmUgZXhlY3V0aW5nIEMgY29kZS4KKyAgICAgICAgICAg
ICAgICBjYWxsRnJhbWUgPSBtX3ZtLnRvcENhbGxGcmFtZTsKKyAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgICAgIC8vIEZJWE1FOiBJdCdkIGJlIGludGVyZXN0aW5nIHRvIHRha2UgZGF0YSBh
Ym91dCB0aGUgcHJvZ3JhbSdzIHN0YXRlIHdoZW4KLSAgICAgICAgICAgICAgICAvLyB3ZSBmYWls
IHRvIHRha2UgYSBzdGFjayB0cmFjZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE1Mjc1OAotICAgICAgICAgICAgICAgIGlmICh3YXNWYWxpZFdhbGsgJiYgd2Fsa1Np
emUpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHNSZXBvcnRTdGF0cykKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHNOdW1Ub3RhbFN0YWNrVHJhY2VzKys7Ci0gICAgICAgICAgICAgICAgICAg
IFZlY3RvcjxVbnByb2Nlc3NlZFN0YWNrRnJhbWU+IHN0YWNrVHJhY2U7Ci0gICAgICAgICAgICAg
ICAgICAgIHN0YWNrVHJhY2UucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSh3YWxrU2l6ZSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd2Fsa1NpemU7IGkrKykgewot
ICAgICAgICAgICAgICAgICAgICAgICAgVW5wcm9jZXNzZWRTdGFja0ZyYW1lIGZyYW1lID0gbV9j
dXJyZW50RnJhbWVzW2ldOwotICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tUcmFjZS51bmNo
ZWNrZWRBcHBlbmQoZnJhbWUpOwotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBz
aXplX3Qgd2Fsa1NpemU7CisgICAgICAgICAgICBib29sIHdhc1ZhbGlkV2FsazsKKyAgICAgICAg
ICAgIGJvb2wgZGlkUnVuT3V0T2ZWZWN0b3JTcGFjZTsKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBGcmFtZVdhbGtlciB3YWxrZXIoY2FsbEZyYW1lLCBtX3ZtLCBjb2RlQmxvY2tTZXRM
b2NrZXIsIG1hY2hpbmVUaHJlYWRzTG9ja2VyKTsKKyAgICAgICAgICAgICAgICB3YWxrU2l6ZSA9
IHdhbGtlci53YWxrKG1fY3VycmVudEZyYW1lcywgZGlkUnVuT3V0T2ZWZWN0b3JTcGFjZSk7Cisg
ICAgICAgICAgICAgICAgd2FzVmFsaWRXYWxrID0gd2Fsa2VyLndhc1ZhbGlkV2FsaygpOworICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgIG1fdW5wcm9jZXNzZWRTdGFja1RyYWNl
cy5hcHBlbmQoVW5wcm9jZXNzZWRTdGFja1RyYWNlIHsgbm93VGltZSwgbWFjaGluZVBDLCB0b3BG
cmFtZUlzTExJbnQsIGxsaW50UEMsIFdURk1vdmUoc3RhY2tUcmFjZSkgfSk7CisgICAgICAgICAg
ICBtX2pzY0V4ZWN1dGlvblRocmVhZC0+cmVzdW1lKCk7CiAKLSAgICAgICAgICAgICAgICAgICAg
aWYgKGRpZFJ1bk91dE9mVmVjdG9yU3BhY2UpCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2N1
cnJlbnRGcmFtZXMuZ3JvdyhtX2N1cnJlbnRGcmFtZXMuc2l6ZSgpICogMS4yNSk7CisgICAgICAg
ICAgICAvLyBXZSBjYW4gbm93IHVzZSBkYXRhIHN0cnVjdHVyZXMgdGhhdCBtYWxsb2MsIGFuZCBk
byBvdGhlciBpbnRlcmVzdGluZyB0aGluZ3MsIGFnYWluLgogCi0gICAgICAgICAgICAgICAgICAg
IG1fdG90YWxUaW1lICs9IG5vd1RpbWUgLSBtX2xhc3RUaW1lOworICAgICAgICAgICAgLy8gRklY
TUU6IEl0J2QgYmUgaW50ZXJlc3RpbmcgdG8gdGFrZSBkYXRhIGFib3V0IHRoZSBwcm9ncmFtJ3Mg
c3RhdGUgd2hlbgorICAgICAgICAgICAgLy8gd2UgZmFpbCB0byB0YWtlIGEgc3RhY2sgdHJhY2U6
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTI3NTgKKyAgICAgICAg
ICAgIGlmICh3YXNWYWxpZFdhbGsgJiYgd2Fsa1NpemUpIHsKKyAgICAgICAgICAgICAgICBpZiAo
c1JlcG9ydFN0YXRzKQorICAgICAgICAgICAgICAgICAgICBzTnVtVG90YWxTdGFja1RyYWNlcysr
OworICAgICAgICAgICAgICAgIFZlY3RvcjxVbnByb2Nlc3NlZFN0YWNrRnJhbWU+IHN0YWNrVHJh
Y2U7CisgICAgICAgICAgICAgICAgc3RhY2tUcmFjZS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHdh
bGtTaXplKTsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHdhbGtTaXpl
OyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgVW5wcm9jZXNzZWRTdGFja0ZyYW1lIGZyYW1l
ID0gbV9jdXJyZW50RnJhbWVzW2ldOworICAgICAgICAgICAgICAgICAgICBzdGFja1RyYWNlLnVu
Y2hlY2tlZEFwcGVuZChmcmFtZSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
ICAgICAgICB9CiAKLSAgICAgICAgbV9sYXN0VGltZSA9IG1fc3RvcHdhdGNoLT5lbGFwc2VkVGlt
ZSgpOworICAgICAgICAgICAgICAgIG1fdW5wcm9jZXNzZWRTdGFja1RyYWNlcy5hcHBlbmQoVW5w
cm9jZXNzZWRTdGFja1RyYWNlIHsgbm93VGltZSwgbWFjaGluZVBDLCB0b3BGcmFtZUlzTExJbnQs
IGxsaW50UEMsIFdURk1vdmUoc3RhY2tUcmFjZSkgfSk7CiAKLSAgICAgICAgZGlzcGF0Y2hGdW5j
dGlvbihzYW1wbGluZ1Byb2ZpbGVyTG9ja2VyKTsKLSAgICB9OwotfQorICAgICAgICAgICAgICAg
IGlmIChkaWRSdW5PdXRPZlZlY3RvclNwYWNlKQorICAgICAgICAgICAgICAgICAgICBtX2N1cnJl
bnRGcmFtZXMuZ3JvdyhtX2N1cnJlbnRGcmFtZXMuc2l6ZSgpICogMS4yNSk7CiAKLVNhbXBsaW5n
UHJvZmlsZXI6On5TYW1wbGluZ1Byb2ZpbGVyKCkKLXsKKyAgICAgICAgICAgICAgICBtX3RvdGFs
VGltZSArPSBub3dUaW1lIC0gbV9sYXN0VGltZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KIH0KIAogc3RhdGljIEFMV0FZU19JTkxJTkUgdW5zaWduZWQgdHJ5R2V0Qnl0ZWNvZGVJ
bmRleCh1bnNpZ25lZCBsbGludFBDLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgYm9vbCYgaXNWYWxp
ZCkKQEAgLTQ4NCw3ICs1MDAsOCBAQCB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnZpc2l0KFNsb3RW
aXNpdG9yCiAKIHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6c2h1dGRvd24oKQogewotICAgIHN0b3Ao
KTsKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOworICAgIG1faXNTaHV0RG93biA9IHRy
dWU7CiB9CiAKIHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6c3RhcnQoKQpAQCAtNDk2LDI2ICs1MTMs
MTMgQEAgdm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjpzdGFydCgpCiB2b2lkIFNhbXBsaW5nUHJvZmls
ZXI6OnN0YXJ0KGNvbnN0IExvY2tIb2xkZXImIGxvY2tlcikKIHsKICAgICBBU1NFUlQobV9sb2Nr
LmlzTG9ja2VkKCkpOwotICAgIG1faXNBY3RpdmUgPSB0cnVlOwotICAgIGRpc3BhdGNoSWZOZWNl
c3NhcnkobG9ja2VyKTsKLX0KLQotdm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjpzdG9wKCkKLXsKLSAg
ICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOwotICAgIHN0b3AobG9ja2VyKTsKKyAgICBtX2lz
UGF1c2VkID0gZmFsc2U7CisgICAgY3JlYXRlVGhyZWFkSWZOZWNlc3NhcnkobG9ja2VyKTsKIH0K
IAotdm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjpzdG9wKGNvbnN0IExvY2tIb2xkZXImKQordm9pZCBT
YW1wbGluZ1Byb2ZpbGVyOjpwYXVzZShjb25zdCBMb2NrSG9sZGVyJikKIHsKICAgICBBU1NFUlQo
bV9sb2NrLmlzTG9ja2VkKCkpOwotICAgIG1faXNBY3RpdmUgPSBmYWxzZTsKLSAgICByZXBvcnRT
dGF0cygpOwotfQotCi12b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnBhdXNlKCkKLXsKLSAgICBMb2Nr
SG9sZGVyIGxvY2tlcihtX2xvY2spOwogICAgIG1faXNQYXVzZWQgPSB0cnVlOwogICAgIHJlcG9y
dFN0YXRzKCk7CiB9CkBAIC01MzIsMjIgKzUzNiwxNCBAQCB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6
Om5vdGljZUN1cnJlbnRUaHJlCiAgICAgbm90aWNlQ3VycmVudFRocmVhZEFzSlNDRXhlY3V0aW9u
VGhyZWFkKGxvY2tlcik7CiB9CiAKLXZvaWQgU2FtcGxpbmdQcm9maWxlcjo6ZGlzcGF0Y2hJZk5l
Y2Vzc2FyeShjb25zdCBMb2NrSG9sZGVyJiBsb2NrZXIpCit2b2lkIFNhbXBsaW5nUHJvZmlsZXI6
OmNyZWF0ZVRocmVhZElmTmVjZXNzYXJ5KGNvbnN0IExvY2tIb2xkZXImKQogewotICAgIGlmICht
X2lzQWN0aXZlICYmICFtX2hhc0Rpc3BhdGNoZWRGdW5jdGlvbiAmJiBtX2pzY0V4ZWN1dGlvblRo
cmVhZCAmJiBtX3ZtLmVudHJ5U2NvcGUpIHsKLSAgICAgICAgcmVmKCk7IC8vIE1hdGNoaW5nIGRl
cmVmKCkgaXMgaW5zaWRlIG1faGFuZGxlciB3aGVuIG1faGFuZGxlciBzdG9wcyByZWN1cnNpbmcu
Ci0gICAgICAgIGRpc3BhdGNoRnVuY3Rpb24obG9ja2VyKTsKKyAgICBpZiAoIW1fdGhyZWFkSWRl
bnRpZmllcikgeworICAgICAgICByZWYoKTsgLy8gTWF0Y2hpbmcgZGVyZWYoKSBpcyB0aW1lckxv
b3AoKSB3aGVuIHdlIHNodXQgZG93bi4KKyAgICAgICAgbV90aHJlYWRJZGVudGlmaWVyID0gY3Jl
YXRlVGhyZWFkKGNyZWF0ZVRocmVhZENhbGxiYWNrLCB0aGlzLCAianNjLnNhbXBsaW5nLXByb2Zp
bGVyLnRocmVhZCIpOwogICAgIH0KIH0KIAotdm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjpkaXNwYXRj
aEZ1bmN0aW9uKGNvbnN0IExvY2tIb2xkZXImKQotewotICAgIG1faGFzRGlzcGF0Y2hlZEZ1bmN0
aW9uID0gdHJ1ZTsKLSAgICBtX2lzUGF1c2VkID0gZmFsc2U7Ci0gICAgbV9sYXN0VGltZSA9IG1f
c3RvcHdhdGNoLT5lbGFwc2VkVGltZSgpOwotICAgIG1fdGltZXJRdWV1ZS0+ZGlzcGF0Y2hBZnRl
cihtX3RpbWluZ0ludGVydmFsLCBtX2hhbmRsZXIpOwotfQotCiB2b2lkIFNhbXBsaW5nUHJvZmls
ZXI6Om5vdGljZUpTTG9ja0FjcXVpc2l0aW9uKCkKIHsKICAgICBMb2NrSG9sZGVyIGxvY2tlciht
X2xvY2spOwpAQCAtNTYwLDcgKzU1Niw3IEBAIHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6bm90aWNl
Vk1FbnRyeSgpCiAgICAgQVNTRVJUKG1fdm0uZW50cnlTY29wZSk7CiAgICAgbm90aWNlQ3VycmVu
dFRocmVhZEFzSlNDRXhlY3V0aW9uVGhyZWFkKGxvY2tlcik7CiAgICAgbV9sYXN0VGltZSA9IG1f
c3RvcHdhdGNoLT5lbGFwc2VkVGltZSgpOwotICAgIGRpc3BhdGNoSWZOZWNlc3NhcnkobG9ja2Vy
KTsKKyAgICBjcmVhdGVUaHJlYWRJZk5lY2Vzc2FyeShsb2NrZXIpOwogfQogCiB2b2lkIFNhbXBs
aW5nUHJvZmlsZXI6OmNsZWFyRGF0YShjb25zdCBMb2NrSG9sZGVyJikKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmgJKHJldmlzaW9u
IDE5NjI0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmls
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNiBAQAogI2luY2x1ZGUgPHd0Zi9Mb2Nr
Lmg+CiAjaW5jbHVkZSA8d3RmL1N0b3B3YXRjaC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
LSNpbmNsdWRlIDx3dGYvV29ya1F1ZXVlLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0xMjks
OCArMTI4LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0VGltaW5nSW50ZXJ2YWwoc3RkOjpjaHJv
bm86Om1pY3Jvc2Vjb25kcyBpbnRlcnZhbCkgeyBtX3RpbWluZ0ludGVydmFsID0gaW50ZXJ2YWw7
IH0KICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHN0YXJ0KCk7CiAgICAgdm9pZCBzdGFydChj
b25zdCBMb2NrSG9sZGVyJik7Ci0gICAgdm9pZCBzdG9wKCk7Ci0gICAgdm9pZCBzdG9wKGNvbnN0
IExvY2tIb2xkZXImKTsKKyAgICB2b2lkIHBhdXNlKGNvbnN0IExvY2tIb2xkZXImKTsKICAgICBW
ZWN0b3I8U3RhY2tUcmFjZT4gcmVsZWFzZVN0YWNrVHJhY2VzKGNvbnN0IExvY2tIb2xkZXImKTsK
ICAgICBKU19FWFBPUlRfUFJJVkFURSBTdHJpbmcgc3RhY2tUcmFjZXNBc0pTT04oKTsKICAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkIG5vdGljZUN1cnJlbnRUaHJlYWRBc0pTQ0V4ZWN1dGlvblRo
cmVhZCgpOwpAQCAtMTQwLDExICsxMzgsMTcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0U3RvcFdh
dGNoKGNvbnN0IExvY2tIb2xkZXImLCBSZWY8U3RvcHdhdGNoPiYmIHN0b3B3YXRjaCkgeyBtX3N0
b3B3YXRjaCA9IFdURk1vdmUoc3RvcHdhdGNoKTsgfQogCiBwcml2YXRlOgotICAgIHZvaWQgZGlz
cGF0Y2hJZk5lY2Vzc2FyeShjb25zdCBMb2NrSG9sZGVyJik7CisgICAgc3RhdGljIHZvaWQgY3Jl
YXRlVGhyZWFkQ2FsbGJhY2sodm9pZCogc2FtcGxpbmdQcm9maWxlcik7CisgICAgdm9pZCB0aW1l
ckxvb3AoKTsKKyAgICB2b2lkIGNyZWF0ZVRocmVhZElmTmVjZXNzYXJ5KGNvbnN0IExvY2tIb2xk
ZXImKTsKICAgICB2b2lkIGRpc3BhdGNoRnVuY3Rpb24oY29uc3QgTG9ja0hvbGRlciYpOwotICAg
IHZvaWQgcGF1c2UoKTsKICAgICB2b2lkIGNsZWFyRGF0YShjb25zdCBMb2NrSG9sZGVyJik7Cisg
ICAgdm9pZCB0YWtlU2FtcGxlKGNvbnN0IExvY2tIb2xkZXImKTsKIAorICAgIFRocmVhZElkZW50
aWZpZXIgbV90aHJlYWRJZGVudGlmaWVyOworICAgIGJvb2wgbV9pc1BhdXNlZDsKKyAgICBib29s
IG1faXNTaHV0RG93bjsKKyAgICBMb2NrIG1fbG9jazsKICAgICBWTSYgbV92bTsKICAgICBSZWZQ
dHI8U3RvcHdhdGNoPiBtX3N0b3B3YXRjaDsKICAgICBWZWN0b3I8U3RhY2tUcmFjZT4gbV9zdGFj
a1RyYWNlczsKQEAgLTE1MiwxMyArMTU2LDcgQEAgcHJpdmF0ZToKICAgICBzdGQ6OmNocm9ubzo6
bWljcm9zZWNvbmRzIG1fdGltaW5nSW50ZXJ2YWw7CiAgICAgZG91YmxlIG1fbGFzdFRpbWU7CiAg
ICAgZG91YmxlIG1fdG90YWxUaW1lOwotICAgIFJlZjxXb3JrUXVldWU+IG1fdGltZXJRdWV1ZTsK
LSAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IG1faGFuZGxlcjsKLSAgICBMb2NrIG1fbG9jazsK
ICAgICBNYWNoaW5lVGhyZWFkczo6VGhyZWFkKiBtX2pzY0V4ZWN1dGlvblRocmVhZDsKLSAgICBi
b29sIG1faXNBY3RpdmU7Ci0gICAgYm9vbCBtX2lzUGF1c2VkOwotICAgIGJvb2wgbV9oYXNEaXNw
YXRjaGVkRnVuY3Rpb247CiAgICAgSGFzaFNldDxKU0NlbGwqPiBtX2xpdmVDZWxsUG9pbnRlcnM7
CiAgICAgVmVjdG9yPFVucHJvY2Vzc2VkU3RhY2tGcmFtZT4gbV9jdXJyZW50RnJhbWVzOwogfTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJldmlzaW9uIDE5NjI0MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzE3LDcgKzMxNyw5IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlw
ZSkKICNpZiBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCiAgICAgaWYgKE9wdGlvbnM6OnVzZVNh
bXBsaW5nUHJvZmlsZXIoKSkgewogICAgICAgICBzZXRTaG91bGRCdWlsZFBDVG9Db2RlT3JpZ2lu
TWFwcGluZygpOwotICAgICAgICBtX3NhbXBsaW5nUHJvZmlsZXIgPSBhZG9wdFJlZihuZXcgU2Ft
cGxpbmdQcm9maWxlcigqdGhpcywgU3RvcHdhdGNoOjpjcmVhdGUoKSkpOworICAgICAgICBSZWZQ
dHI8U3RvcHdhdGNoPiBzdG9wd2F0Y2ggPSBTdG9wd2F0Y2g6OmNyZWF0ZSgpOworICAgICAgICBz
dG9wd2F0Y2gtPnN0YXJ0KCk7CisgICAgICAgIG1fc2FtcGxpbmdQcm9maWxlciA9IGFkb3B0UmVm
KG5ldyBTYW1wbGluZ1Byb2ZpbGVyKCp0aGlzLCBXVEZNb3ZlKHN0b3B3YXRjaCkpKTsKICAgICAg
ICAgbV9zYW1wbGluZ1Byb2ZpbGVyLT5zdGFydCgpOwogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUo
U0FNUExJTkdfUFJPRklMRVIpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>275672</attachid>
            <date>2016-04-05 09:58:32 -0700</date>
            <delta_ts>2016-04-05 19:20:54 -0700</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>18557</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk5MDYyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ2IEBA
CisyMDE2LTA0LTA1ICBTYWFtIGJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IEpTQyBTYW1wbGluZ1Byb2ZpbGVyOiBVc2UgYSB0aHJlYWQgKyBzbGVlcCBsb29wIGluc3RlYWQg
b2YgV1RGOjpXb3JrUXVldWUgZm9yIHRha2luZyBzYW1wbGVzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTQwMTcKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCeSBtb3ZpbmcgdG8gYW4gZXhwbGljaXRseSBj
cmVhdGVkIHNlcGVyYXRlIHRocmVhZCArIHNhbXBsZS10aGVuLXNsZWVwCisgICAgICAgIGxvb3As
IHdlIGNhbiByZW1vdmUgYSBsb3Qgb2YgdGhlIGNydWZ0eSBjb2RlIGFyb3VuZCBXb3JrUXVldWUu
CisgICAgICAgIFdlJ3JlIGFsc28gZ2V0dGluZyBzYW1wbGUgcmF0ZXMgdGhhdCBhcmUgbXVjaCBj
bG9zZXIgdG8gd2hhdCB3ZSdyZQorICAgICAgICBhc2tpbmcgdGhlIE9TIGZvci4gV2hlbiB0aGUg
c2FtcGxpbmcgaGFuZGxlciB3YXMgYnVpbHQgb2ZmIG9mIFdvcmtRdWV1ZSwKKyAgICAgICAgd2Un
ZCBvZnRlbiBnZXQgc2FtcGxlIHJhdGVzIG11Y2ggaGlnaGVyIHRoYW4gdGhlIDFtcyB3ZSBhc2tl
ZCBmb3IuIE9uIEtyYWtlbiwKKyAgICAgICAgd2Ugd291bGQgYXZlcmFnZSBhYm91dCAxLjdtcyBz
YW1wbGUgcmF0ZXMsIGV2ZW4gdGhvdWdoIHdlJ2QgYXNrIGZvciBhIDFtcyByYXRlLgorICAgICAg
ICBOb3csIG9uIEtyYWtlbiwgd2UncmUgZ2V0dGluZyBhYm91dCAxLjJtcyByYXRlcy4gQmVjYXVz
ZSB3ZSdyZSBnZXR0aW5nCisgICAgICAgIGhpZ2hlciByYXRlcywgdGhpcyBwYXRjaCBpcyBhIHBl
cmZvcm1hbmNlIHJlZ3Jlc3Npb24uIEl0J3Mgc2xvd2VyIGJlY2F1c2UKKyAgICAgICAgd2UncmUg
c2FtcGxpbmcgbW9yZSBmcmVxdWVudGx5LgorCisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JTY3JpcHRQcm9maWxlckFnZW50LmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5z
cGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2VudDo6dHJhY2tpbmdDb21wbGV0ZSk6CisgICAgICAgICog
cnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6U2FtcGxpbmdQcm9m
aWxlcjo6U2FtcGxpbmdQcm9maWxlcik6CisgICAgICAgIChKU0M6OlNhbXBsaW5nUHJvZmlsZXI6
On5TYW1wbGluZ1Byb2ZpbGVyKToKKyAgICAgICAgKEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6Y3Jl
YXRlVGhyZWFkSWZOZWNlc3NhcnkpOgorICAgICAgICAoSlNDOjpTYW1wbGluZ1Byb2ZpbGVyOjpj
cmVhdGVUaHJlYWRDYWxsYmFjayk6CisgICAgICAgIChKU0M6OlNhbXBsaW5nUHJvZmlsZXI6OnRp
bWVyTG9vcCk6CisgICAgICAgIChKU0M6OlNhbXBsaW5nUHJvZmlsZXI6OnRha2VTYW1wbGUpOgor
ICAgICAgICAoSlNDOjp0cnlHZXRCeXRlY29kZUluZGV4KToKKyAgICAgICAgKEpTQzo6U2FtcGxp
bmdQcm9maWxlcjo6c2h1dGRvd24pOgorICAgICAgICAoSlNDOjpTYW1wbGluZ1Byb2ZpbGVyOjpz
dGFydCk6CisgICAgICAgIChKU0M6OlNhbXBsaW5nUHJvZmlsZXI6OnBhdXNlKToKKyAgICAgICAg
KEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6bm90aWNlQ3VycmVudFRocmVhZEFzSlNDRXhlY3V0aW9u
VGhyZWFkKToKKyAgICAgICAgKEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6bm90aWNlSlNMb2NrQWNx
dWlzaXRpb24pOgorICAgICAgICAoSlNDOjpTYW1wbGluZ1Byb2ZpbGVyOjpub3RpY2VWTUVudHJ5
KToKKyAgICAgICAgKEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6Y2xlYXJEYXRhKToKKyAgICAgICAg
KEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6c3RvcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlNh
bXBsaW5nUHJvZmlsZXI6OmRpc3BhdGNoSWZOZWNlc3NhcnkpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpTYW1wbGluZ1Byb2ZpbGVyOjpkaXNwYXRjaEZ1bmN0aW9uKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuaDoKKyAgICAgICAgKEpTQzo6U2FtcGxpbmdQ
cm9maWxlcjo6c2V0VGltaW5nSW50ZXJ2YWwpOgorICAgICAgICAoSlNDOjpTYW1wbGluZ1Byb2Zp
bGVyOjpzZXRTdG9wV2F0Y2gpOgorICAgICAgICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAo
SlNDOjpWTTo6Vk0pOgorCiAyMDE2LTA0LTA1ICBBbnRvaW5lIFF1aW50ICA8Z3Jhb3V0c0BhcHBs
ZS5jb20+CiAKICAgICAgICAgW1dlYkdMMl0gVHVybiB0aGUgRU5BQkxFX1dFQkdMMiBmbGFnIG9u
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JT
Y3JpcHRQcm9maWxlckFnZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JTY3JpcHRQcm9maWxlckFnZW50LmNwcAkocmV2
aXNpb24gMTk5MDE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMiw3
ICsyMDIsNyBAQCB2b2lkIEluc3BlY3RvclNjcmlwdFByb2ZpbGVyQWdlbnQ6OnRyYWNrCiAgICAg
ICAgIFNhbXBsaW5nUHJvZmlsZXIqIHNhbXBsaW5nUHJvZmlsZXIgPSBtX2Vudmlyb25tZW50LnNj
cmlwdERlYnVnU2VydmVyKCkudm0oKS5zYW1wbGluZ1Byb2ZpbGVyKCk7CiAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKHNhbXBsaW5nUHJvZmlsZXIpOwogICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihz
YW1wbGluZ1Byb2ZpbGVyLT5nZXRMb2NrKCkpOwotICAgICAgICBzYW1wbGluZ1Byb2ZpbGVyLT5z
dG9wKGxvY2tlcik7CisgICAgICAgIHNhbXBsaW5nUHJvZmlsZXItPnBhdXNlKGxvY2tlcik7CiAg
ICAgICAgIFZlY3RvcjxTYW1wbGluZ1Byb2ZpbGVyOjpTdGFja1RyYWNlPiBzdGFja1RyYWNlcyA9
IHNhbXBsaW5nUHJvZmlsZXItPnJlbGVhc2VTdGFja1RyYWNlcyhsb2NrZXIpOwogICAgICAgICBS
ZWY8UHJvdG9jb2w6OlNjcmlwdFByb2ZpbGVyOjpTYW1wbGVzPiBzYW1wbGVzID0gYnVpbGRTYW1w
bGVzKG1fZW52aXJvbm1lbnQuc2NyaXB0RGVidWdTZXJ2ZXIoKS52bSgpLCBXVEZNb3ZlKHN0YWNr
VHJhY2VzKSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5n
UHJvZmlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1NhbXBsaW5nUHJvZmlsZXIuY3BwCShyZXZpc2lvbiAxOTkwMTcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTg2LDExICsxODYsOSBAQCBTYW1wbGluZ1Byb2ZpbGVyOjpTYW1wbGluZ1Byb2ZpbGVyKFZNJiB2
CiAgICAgOiBtX3ZtKHZtKQogICAgICwgbV9zdG9wd2F0Y2goV1RGTW92ZShzdG9wd2F0Y2gpKQog
ICAgICwgbV90aW1pbmdJbnRlcnZhbChzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzKDEwMDApKQot
ICAgICwgbV90aW1lclF1ZXVlKFdvcmtRdWV1ZTo6Y3JlYXRlKCJqc2Muc2FtcGxpbmctcHJvZmls
ZXIucXVldWUiLCBXb3JrUXVldWU6OlR5cGU6OlNlcmlhbCwgV29ya1F1ZXVlOjpRT1M6OlVzZXJJ
bnRlcmFjdGl2ZSkpCiAgICAgLCBtX2pzY0V4ZWN1dGlvblRocmVhZChudWxscHRyKQotICAgICwg
bV9pc0FjdGl2ZShmYWxzZSkKICAgICAsIG1faXNQYXVzZWQoZmFsc2UpCi0gICAgLCBtX2hhc0Rp
c3BhdGNoZWRGdW5jdGlvbihmYWxzZSkKKyAgICAsIG1faXNTaHV0RG93bihmYWxzZSkKIHsKICAg
ICBpZiAoc1JlcG9ydFN0YXRzKSB7CiAgICAgICAgIHNOdW1Ub3RhbFdhbGtzID0gMDsKQEAgLTE5
OCw5NyArMTk2LDEyNiBAQCBTYW1wbGluZ1Byb2ZpbGVyOjpTYW1wbGluZ1Byb2ZpbGVyKFZNJiB2
CiAgICAgfQogCiAgICAgbV9jdXJyZW50RnJhbWVzLmdyb3coMjU2KTsKK30KKworU2FtcGxpbmdQ
cm9maWxlcjo6flNhbXBsaW5nUHJvZmlsZXIoKQoreworfQorCit2b2lkIFNhbXBsaW5nUHJvZmls
ZXI6OmNyZWF0ZVRocmVhZElmTmVjZXNzYXJ5KGNvbnN0IExvY2tIb2xkZXImKQoreworICAgIGlm
ICghbV90aHJlYWRJZGVudGlmaWVyKSB7CisgICAgICAgIHJlZigpOyAvLyBNYXRjaGluZyBkZXJl
ZigpIGlzIHRpbWVyTG9vcCgpIHdoZW4gd2Ugc2h1dCBkb3duLgorICAgICAgICBtX3RocmVhZElk
ZW50aWZpZXIgPSBjcmVhdGVUaHJlYWQoY3JlYXRlVGhyZWFkQ2FsbGJhY2ssIHRoaXMsICJqc2Mu
c2FtcGxpbmctcHJvZmlsZXIudGhyZWFkIik7CisgICAgfQorfQordm9pZCBTYW1wbGluZ1Byb2Zp
bGVyOjpjcmVhdGVUaHJlYWRDYWxsYmFjayh2b2lkKiBzYW1wbGluZ1Byb2ZpbGVyKQoreworICAg
IHN0YXRpY19jYXN0PFNhbXBsaW5nUHJvZmlsZXIqPihzYW1wbGluZ1Byb2ZpbGVyKS0+dGltZXJM
b29wKCk7Cit9CisKK3ZvaWQgU2FtcGxpbmdQcm9maWxlcjo6dGltZXJMb29wKCkKK3sKKyAgICB3
aGlsZSAodHJ1ZSkgeworICAgICAgICBzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzIHN0YWNrVHJh
Y2VQcm9jZXNzaW5nVGltZSA9IHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uZHMoMCk7CisgICAgICAg
IHsKKyAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CisgICAgICAgICAgICBp
ZiAoVU5MSUtFTFkobV9pc1NodXREb3duKSkgeworICAgICAgICAgICAgICAgIGxvY2tlci51bmxv
Y2tFYXJseSgpOworICAgICAgICAgICAgICAgIGRlcmVmKCk7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIW1faXNQYXVzZWQgJiYgbV9q
c2NFeGVjdXRpb25UaHJlYWQpCisgICAgICAgICAgICAgICAgdGFrZVNhbXBsZShsb2NrZXIsIHN0
YWNrVHJhY2VQcm9jZXNzaW5nVGltZSk7CiAKLSAgICBtX2hhbmRsZXIgPSBbdGhpc10gKCkgewot
ICAgICAgICBMb2NrSG9sZGVyIHNhbXBsaW5nUHJvZmlsZXJMb2NrZXIobV9sb2NrKTsKLSAgICAg
ICAgaWYgKCFtX2lzQWN0aXZlIHx8ICFtX2pzY0V4ZWN1dGlvblRocmVhZCB8fCBtX2lzUGF1c2Vk
KSB7Ci0gICAgICAgICAgICBtX2hhc0Rpc3BhdGNoZWRGdW5jdGlvbiA9IGZhbHNlOwotICAgICAg
ICAgICAgZGVyZWYoKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIG1fbGFzdFRp
bWUgPSBtX3N0b3B3YXRjaC0+ZWxhcHNlZFRpbWUoKTsKICAgICAgICAgfQogCi0gICAgICAgIGlm
IChtX3ZtLmVudHJ5U2NvcGUpIHsKLSAgICAgICAgICAgIGRvdWJsZSBub3dUaW1lID0gbV9zdG9w
d2F0Y2gtPmVsYXBzZWRUaW1lKCk7CisgICAgICAgIHN0ZDo6dGhpc190aHJlYWQ6OnNsZWVwX2Zv
cihtX3RpbWluZ0ludGVydmFsID4gc3RhY2tUcmFjZVByb2Nlc3NpbmdUaW1lID8gbV90aW1pbmdJ
bnRlcnZhbCAtIHN0YWNrVHJhY2VQcm9jZXNzaW5nVGltZSA6IG1fdGltaW5nSW50ZXJ2YWwpOwor
ICAgIH0KK30KIAotICAgICAgICAgICAgTG9ja0hvbGRlciBtYWNoaW5lVGhyZWFkc0xvY2tlciht
X3ZtLmhlYXAubWFjaGluZVRocmVhZHMoKS5nZXRMb2NrKCkpOwotICAgICAgICAgICAgTG9ja0hv
bGRlciBjb2RlQmxvY2tTZXRMb2NrZXIobV92bS5oZWFwLmNvZGVCbG9ja1NldCgpLmdldExvY2so
KSk7Ci0gICAgICAgICAgICBMb2NrSG9sZGVyIGV4ZWN1dGFibGVBbGxvY2F0b3JMb2NrZXIobV92
bS5leGVjdXRhYmxlQWxsb2NhdG9yLmdldExvY2soKSk7Ci0KLSAgICAgICAgICAgIGJvb2wgZGlk
U3VzcGVuZCA9IG1fanNjRXhlY3V0aW9uVGhyZWFkLT5zdXNwZW5kKCk7Ci0gICAgICAgICAgICBp
ZiAoZGlkU3VzcGVuZCkgewotICAgICAgICAgICAgICAgIC8vIFdoaWxlIHRoZSBKU0MgdGhyZWFk
IGlzIHN1c3BlbmRlZCwgd2UgY2FuJ3QgZG8gdGhpbmdzIGxpa2UgbWFsbG9jIGJlY2F1c2UgdGhl
IEpTQyB0aHJlYWQKLSAgICAgICAgICAgICAgICAvLyBtYXkgYmUgaG9sZGluZyB0aGUgbWFsbG9j
IGxvY2suCi0gICAgICAgICAgICAgICAgRXhlY1N0YXRlKiBjYWxsRnJhbWU7Ci0gICAgICAgICAg
ICAgICAgdm9pZCogbWFjaGluZVBDOwotICAgICAgICAgICAgICAgIGJvb2wgdG9wRnJhbWVJc0xM
SW50ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgdm9pZCogbGxpbnRQQzsKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIE1hY2hpbmVUaHJlYWRzOjpUaHJlYWQ6OlJlZ2lz
dGVycyByZWdpc3RlcnM7Ci0gICAgICAgICAgICAgICAgICAgIG1fanNjRXhlY3V0aW9uVGhyZWFk
LT5nZXRSZWdpc3RlcnMocmVnaXN0ZXJzKTsKLSAgICAgICAgICAgICAgICAgICAgY2FsbEZyYW1l
ID0gc3RhdGljX2Nhc3Q8RXhlY1N0YXRlKj4ocmVnaXN0ZXJzLmZyYW1lUG9pbnRlcigpKTsKLSAg
ICAgICAgICAgICAgICAgICAgbWFjaGluZVBDID0gcmVnaXN0ZXJzLmluc3RydWN0aW9uUG9pbnRl
cigpOwotICAgICAgICAgICAgICAgICAgICBsbGludFBDID0gcmVnaXN0ZXJzLmxsaW50UEMoKTsK
LSAgICAgICAgICAgICAgICAgICAgbV9qc2NFeGVjdXRpb25UaHJlYWQtPmZyZWVSZWdpc3RlcnMo
cmVnaXN0ZXJzKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6
IExldHMgaGF2ZSBhIHdheSBvZiBkZXRlY3Rpbmcgd2hlbiB3ZSdyZSBwYXJzaW5nIGNvZGUuCi0g
ICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE1Mjc2MQotICAgICAgICAgICAgICAgIGlmIChtX3ZtLmV4ZWN1dGFibGVBbGxvY2F0b3IuaXNW
YWxpZEV4ZWN1dGFibGVNZW1vcnkoZXhlY3V0YWJsZUFsbG9jYXRvckxvY2tlciwgbWFjaGluZVBD
KSkgewotICAgICAgICAgICAgICAgICAgICBpZiAobV92bS5pc0V4ZWN1dGluZ0luUmVnRXhwSklU
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2UncmUgZXhlY3V0aW5nIGEg
cmVnZXhwLiBMZXRzIGdhdGhlciBtb3JlIGludGVyc3RpbmcgZGF0YS4KLSAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTI3
MjkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxGcmFtZSA9IG1fdm0udG9wQ2FsbEZyYW1l
OyAvLyBXZSBuZWVkIHRvIGRvIHRoaXMgb3IgZWxzZSB3ZSdkIGZhaWwgb3VyIGJhY2t0cmFjZSB2
YWxpZGF0aW9uIGIvYyB0aGlzIGlzbid0IGEgSlMgZnJhbWUuCi0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKExMSW50Ojppc0xMSW50UEMobWFjaGluZVBD
KSkgewotICAgICAgICAgICAgICAgICAgICB0b3BGcmFtZUlzTExJbnQgPSB0cnVlOwotICAgICAg
ICAgICAgICAgICAgICAvLyBXZSdyZSBva2F5IHRvIHRha2UgYSBub3JtYWwgc3RhY2sgdHJhY2Ug
d2hlbiB0aGUgUEMKLSAgICAgICAgICAgICAgICAgICAgLy8gaXMgaW4gTExJbnQgY29kZS4KLSAg
ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAvLyBXZSByZXNvcnQg
dG8gdG9wQ2FsbEZyYW1lIHRvIHNlZSBpZiB3ZSBjYW4gZ2V0IGFueXRoaW5nCi0gICAgICAgICAg
ICAgICAgICAgIC8vIHVzZWZ1bC4gV2UgdXN1YWxseSBnZXQgaGVyZSB3aGVuIHdlJ3JlIGV4ZWN1
dGluZyBDIGNvZGUuCi0gICAgICAgICAgICAgICAgICAgIGNhbGxGcmFtZSA9IG1fdm0udG9wQ2Fs
bEZyYW1lOwotICAgICAgICAgICAgICAgIH0KK3ZvaWQgU2FtcGxpbmdQcm9maWxlcjo6dGFrZVNh
bXBsZShjb25zdCBMb2NrSG9sZGVyJiwgc3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kcyYgc3RhY2tU
cmFjZVByb2Nlc3NpbmdUaW1lKQoreworICAgIEFTU0VSVChtX2xvY2suaXNMb2NrZWQoKSk7Cisg
ICAgaWYgKG1fdm0uZW50cnlTY29wZSkgeworICAgICAgICBkb3VibGUgbm93VGltZSA9IG1fc3Rv
cHdhdGNoLT5lbGFwc2VkVGltZSgpOwogCi0gICAgICAgICAgICAgICAgc2l6ZV90IHdhbGtTaXpl
OwotICAgICAgICAgICAgICAgIGJvb2wgd2FzVmFsaWRXYWxrOwotICAgICAgICAgICAgICAgIGJv
b2wgZGlkUnVuT3V0T2ZWZWN0b3JTcGFjZTsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIEZyYW1lV2Fsa2VyIHdhbGtlcihjYWxsRnJhbWUsIG1fdm0sIGNvZGVCbG9ja1Nl
dExvY2tlciwgbWFjaGluZVRocmVhZHNMb2NrZXIpOwotICAgICAgICAgICAgICAgICAgICB3YWxr
U2l6ZSA9IHdhbGtlci53YWxrKG1fY3VycmVudEZyYW1lcywgZGlkUnVuT3V0T2ZWZWN0b3JTcGFj
ZSk7Ci0gICAgICAgICAgICAgICAgICAgIHdhc1ZhbGlkV2FsayA9IHdhbGtlci53YXNWYWxpZFdh
bGsoKTsKKyAgICAgICAgTG9ja0hvbGRlciBtYWNoaW5lVGhyZWFkc0xvY2tlcihtX3ZtLmhlYXAu
bWFjaGluZVRocmVhZHMoKS5nZXRMb2NrKCkpOworICAgICAgICBMb2NrSG9sZGVyIGNvZGVCbG9j
a1NldExvY2tlcihtX3ZtLmhlYXAuY29kZUJsb2NrU2V0KCkuZ2V0TG9jaygpKTsKKyAgICAgICAg
TG9ja0hvbGRlciBleGVjdXRhYmxlQWxsb2NhdG9yTG9ja2VyKG1fdm0uZXhlY3V0YWJsZUFsbG9j
YXRvci5nZXRMb2NrKCkpOworCisgICAgICAgIGJvb2wgZGlkU3VzcGVuZCA9IG1fanNjRXhlY3V0
aW9uVGhyZWFkLT5zdXNwZW5kKCk7CisgICAgICAgIGlmIChkaWRTdXNwZW5kKSB7CisgICAgICAg
ICAgICAvLyBXaGlsZSB0aGUgSlNDIHRocmVhZCBpcyBzdXNwZW5kZWQsIHdlIGNhbid0IGRvIHRo
aW5ncyBsaWtlIG1hbGxvYyBiZWNhdXNlIHRoZSBKU0MgdGhyZWFkCisgICAgICAgICAgICAvLyBt
YXkgYmUgaG9sZGluZyB0aGUgbWFsbG9jIGxvY2suCisgICAgICAgICAgICBFeGVjU3RhdGUqIGNh
bGxGcmFtZTsKKyAgICAgICAgICAgIHZvaWQqIG1hY2hpbmVQQzsKKyAgICAgICAgICAgIGJvb2wg
dG9wRnJhbWVJc0xMSW50ID0gZmFsc2U7CisgICAgICAgICAgICB2b2lkKiBsbGludFBDOworICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIE1hY2hpbmVUaHJlYWRzOjpUaHJlYWQ6OlJlZ2lz
dGVycyByZWdpc3RlcnM7CisgICAgICAgICAgICAgICAgbV9qc2NFeGVjdXRpb25UaHJlYWQtPmdl
dFJlZ2lzdGVycyhyZWdpc3RlcnMpOworICAgICAgICAgICAgICAgIGNhbGxGcmFtZSA9IHN0YXRp
Y19jYXN0PEV4ZWNTdGF0ZSo+KHJlZ2lzdGVycy5mcmFtZVBvaW50ZXIoKSk7CisgICAgICAgICAg
ICAgICAgbWFjaGluZVBDID0gcmVnaXN0ZXJzLmluc3RydWN0aW9uUG9pbnRlcigpOworICAgICAg
ICAgICAgICAgIGxsaW50UEMgPSByZWdpc3RlcnMubGxpbnRQQygpOworICAgICAgICAgICAgICAg
IG1fanNjRXhlY3V0aW9uVGhyZWFkLT5mcmVlUmVnaXN0ZXJzKHJlZ2lzdGVycyk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAvLyBGSVhNRTogTGV0cyBoYXZlIGEgd2F5IG9mIGRldGVjdGlu
ZyB3aGVuIHdlJ3JlIHBhcnNpbmcgY29kZS4KKyAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTI3NjEKKyAgICAgICAgICAgIGlmIChtX3ZtLmV4
ZWN1dGFibGVBbGxvY2F0b3IuaXNWYWxpZEV4ZWN1dGFibGVNZW1vcnkoZXhlY3V0YWJsZUFsbG9j
YXRvckxvY2tlciwgbWFjaGluZVBDKSkgeworICAgICAgICAgICAgICAgIGlmIChtX3ZtLmlzRXhl
Y3V0aW5nSW5SZWdFeHBKSVQpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlJ3Jl
IGV4ZWN1dGluZyBhIHJlZ2V4cC4gTGV0cyBnYXRoZXIgbW9yZSBpbnRlcnN0aW5nIGRhdGEuCisg
ICAgICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNTI3MjkKKyAgICAgICAgICAgICAgICAgICAgY2FsbEZyYW1lID0gbV92bS50b3BDYWxs
RnJhbWU7IC8vIFdlIG5lZWQgdG8gZG8gdGhpcyBvciBlbHNlIHdlJ2QgZmFpbCBvdXIgYmFja3Ry
YWNlIHZhbGlkYXRpb24gYi9jIHRoaXMgaXNuJ3QgYSBKUyBmcmFtZS4KICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKExMSW50Ojppc0xMSW50UEMobWFjaGluZVBDKSkg
eworICAgICAgICAgICAgICAgIHRvcEZyYW1lSXNMTEludCA9IHRydWU7CisgICAgICAgICAgICAg
ICAgLy8gV2UncmUgb2theSB0byB0YWtlIGEgbm9ybWFsIHN0YWNrIHRyYWNlIHdoZW4gdGhlIFBD
CisgICAgICAgICAgICAgICAgLy8gaXMgaW4gTExJbnQgY29kZS4KKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgLy8gV2UgcmVzb3J0IHRvIHRvcENhbGxGcmFtZSB0byBzZWUg
aWYgd2UgY2FuIGdldCBhbnl0aGluZworICAgICAgICAgICAgICAgIC8vIHVzZWZ1bC4gV2UgdXN1
YWxseSBnZXQgaGVyZSB3aGVuIHdlJ3JlIGV4ZWN1dGluZyBDIGNvZGUuCisgICAgICAgICAgICAg
ICAgY2FsbEZyYW1lID0gbV92bS50b3BDYWxsRnJhbWU7CisgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgICAgICBtX2pzY0V4ZWN1dGlvblRocmVhZC0+cmVzdW1lKCk7Ci0KLSAgICAgICAgICAg
ICAgICAvLyBXZSBjYW4gbm93IHVzZSBkYXRhIHN0cnVjdHVyZXMgdGhhdCBtYWxsb2MsIGFuZCBk
byBvdGhlciBpbnRlcmVzdGluZyB0aGluZ3MsIGFnYWluLgorICAgICAgICAgICAgc2l6ZV90IHdh
bGtTaXplOworICAgICAgICAgICAgYm9vbCB3YXNWYWxpZFdhbGs7CisgICAgICAgICAgICBib29s
IGRpZFJ1bk91dE9mVmVjdG9yU3BhY2U7CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
RnJhbWVXYWxrZXIgd2Fsa2VyKGNhbGxGcmFtZSwgbV92bSwgY29kZUJsb2NrU2V0TG9ja2VyLCBt
YWNoaW5lVGhyZWFkc0xvY2tlcik7CisgICAgICAgICAgICAgICAgd2Fsa1NpemUgPSB3YWxrZXIu
d2FsayhtX2N1cnJlbnRGcmFtZXMsIGRpZFJ1bk91dE9mVmVjdG9yU3BhY2UpOworICAgICAgICAg
ICAgICAgIHdhc1ZhbGlkV2FsayA9IHdhbGtlci53YXNWYWxpZFdhbGsoKTsKKyAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJdCdkIGJlIGludGVyZXN0aW5nIHRvIHRh
a2UgZGF0YSBhYm91dCB0aGUgcHJvZ3JhbSdzIHN0YXRlIHdoZW4KLSAgICAgICAgICAgICAgICAv
LyB3ZSBmYWlsIHRvIHRha2UgYSBzdGFjayB0cmFjZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE1Mjc1OAotICAgICAgICAgICAgICAgIGlmICh3YXNWYWxpZFdhbGsg
JiYgd2Fsa1NpemUpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHNSZXBvcnRTdGF0cykKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHNOdW1Ub3RhbFN0YWNrVHJhY2VzKys7Ci0gICAgICAgICAg
ICAgICAgICAgIFZlY3RvcjxVbnByb2Nlc3NlZFN0YWNrRnJhbWU+IHN0YWNrVHJhY2U7Ci0gICAg
ICAgICAgICAgICAgICAgIHN0YWNrVHJhY2UucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSh3YWxrU2l6
ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd2Fsa1NpemU7
IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgVW5wcm9jZXNzZWRTdGFja0ZyYW1lIGZy
YW1lID0gbV9jdXJyZW50RnJhbWVzW2ldOwotICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tU
cmFjZS51bmNoZWNrZWRBcHBlbmQoZnJhbWUpOwotICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICBtX2pzY0V4ZWN1dGlvblRocmVhZC0+cmVzdW1lKCk7CiAKLSAgICAgICAgICAgICAg
ICAgICAgbV91bnByb2Nlc3NlZFN0YWNrVHJhY2VzLmFwcGVuZChVbnByb2Nlc3NlZFN0YWNrVHJh
Y2UgeyBub3dUaW1lLCBtYWNoaW5lUEMsIHRvcEZyYW1lSXNMTEludCwgbGxpbnRQQywgV1RGTW92
ZShzdGFja1RyYWNlKSB9KTsKKyAgICAgICAgICAgIGF1dG8gc3RhcnRUaW1lID0gc3RkOjpjaHJv
bm86OnN0ZWFkeV9jbG9jazo6bm93KCk7CisgICAgICAgICAgICAvLyBXZSBjYW4gbm93IHVzZSBk
YXRhIHN0cnVjdHVyZXMgdGhhdCBtYWxsb2MsIGFuZCBkbyBvdGhlciBpbnRlcmVzdGluZyB0aGlu
Z3MsIGFnYWluLgogCi0gICAgICAgICAgICAgICAgICAgIGlmIChkaWRSdW5PdXRPZlZlY3RvclNw
YWNlKQotICAgICAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50RnJhbWVzLmdyb3cobV9jdXJy
ZW50RnJhbWVzLnNpemUoKSAqIDEuMjUpOworICAgICAgICAgICAgLy8gRklYTUU6IEl0J2QgYmUg
aW50ZXJlc3RpbmcgdG8gdGFrZSBkYXRhIGFib3V0IHRoZSBwcm9ncmFtJ3Mgc3RhdGUgd2hlbgor
ICAgICAgICAgICAgLy8gd2UgZmFpbCB0byB0YWtlIGEgc3RhY2sgdHJhY2U6IGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTI3NTgKKyAgICAgICAgICAgIGlmICh3YXNW
YWxpZFdhbGsgJiYgd2Fsa1NpemUpIHsKKyAgICAgICAgICAgICAgICBpZiAoc1JlcG9ydFN0YXRz
KQorICAgICAgICAgICAgICAgICAgICBzTnVtVG90YWxTdGFja1RyYWNlcysrOworICAgICAgICAg
ICAgICAgIFZlY3RvcjxVbnByb2Nlc3NlZFN0YWNrRnJhbWU+IHN0YWNrVHJhY2U7CisgICAgICAg
ICAgICAgICAgc3RhY2tUcmFjZS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHdhbGtTaXplKTsKKyAg
ICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHdhbGtTaXplOyBpKyspIHsKKyAg
ICAgICAgICAgICAgICAgICAgVW5wcm9jZXNzZWRTdGFja0ZyYW1lIGZyYW1lID0gbV9jdXJyZW50
RnJhbWVzW2ldOworICAgICAgICAgICAgICAgICAgICBzdGFja1RyYWNlLnVuY2hlY2tlZEFwcGVu
ZChmcmFtZSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9CiAK
LSAgICAgICAgbV9sYXN0VGltZSA9IG1fc3RvcHdhdGNoLT5lbGFwc2VkVGltZSgpOworICAgICAg
ICAgICAgICAgIG1fdW5wcm9jZXNzZWRTdGFja1RyYWNlcy5hcHBlbmQoVW5wcm9jZXNzZWRTdGFj
a1RyYWNlIHsgbm93VGltZSwgbWFjaGluZVBDLCB0b3BGcmFtZUlzTExJbnQsIGxsaW50UEMsIFdU
Rk1vdmUoc3RhY2tUcmFjZSkgfSk7CiAKLSAgICAgICAgZGlzcGF0Y2hGdW5jdGlvbihzYW1wbGlu
Z1Byb2ZpbGVyTG9ja2VyKTsKLSAgICB9OwotfQorICAgICAgICAgICAgICAgIGlmIChkaWRSdW5P
dXRPZlZlY3RvclNwYWNlKQorICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRGcmFtZXMuZ3Jv
dyhtX2N1cnJlbnRGcmFtZXMuc2l6ZSgpICogMS4yNSk7CisgICAgICAgICAgICB9CiAKLVNhbXBs
aW5nUHJvZmlsZXI6On5TYW1wbGluZ1Byb2ZpbGVyKCkKLXsKKyAgICAgICAgICAgIGF1dG8gZW5k
VGltZSA9IHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6Om5vdygpOworICAgICAgICAgICAgc3Rh
Y2tUcmFjZVByb2Nlc3NpbmdUaW1lID0gc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8c3RkOjpj
aHJvbm86Om1pY3Jvc2Vjb25kcz4oZW5kVGltZSAtIHN0YXJ0VGltZSk7CisgICAgICAgIH0KKyAg
ICB9CiB9CiAKIHN0YXRpYyBBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIHRyeUdldEJ5dGVjb2RlSW5k
ZXgodW5zaWduZWQgbGxpbnRQQywgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGJvb2wmIGlzVmFsaWQp
CkBAIC00ODYsNyArNTEzLDggQEAgdm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjp2aXNpdChTbG90Vmlz
aXRvcgogCiB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnNodXRkb3duKCkKIHsKLSAgICBzdG9wKCk7
CisgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsKKyAgICBtX2lzU2h1dERvd24gPSB0cnVl
OwogfQogCiB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnN0YXJ0KCkKQEAgLTQ5OCwyNiArNTI2LDEz
IEBAIHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6c3RhcnQoKQogdm9pZCBTYW1wbGluZ1Byb2ZpbGVy
OjpzdGFydChjb25zdCBMb2NrSG9sZGVyJiBsb2NrZXIpCiB7CiAgICAgQVNTRVJUKG1fbG9jay5p
c0xvY2tlZCgpKTsKLSAgICBtX2lzQWN0aXZlID0gdHJ1ZTsKLSAgICBkaXNwYXRjaElmTmVjZXNz
YXJ5KGxvY2tlcik7Ci19Ci0KLXZvaWQgU2FtcGxpbmdQcm9maWxlcjo6c3RvcCgpCi17Ci0gICAg
TG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsKLSAgICBzdG9wKGxvY2tlcik7CisgICAgbV9pc1Bh
dXNlZCA9IGZhbHNlOworICAgIGNyZWF0ZVRocmVhZElmTmVjZXNzYXJ5KGxvY2tlcik7CiB9CiAK
LXZvaWQgU2FtcGxpbmdQcm9maWxlcjo6c3RvcChjb25zdCBMb2NrSG9sZGVyJikKK3ZvaWQgU2Ft
cGxpbmdQcm9maWxlcjo6cGF1c2UoY29uc3QgTG9ja0hvbGRlciYpCiB7CiAgICAgQVNTRVJUKG1f
bG9jay5pc0xvY2tlZCgpKTsKLSAgICBtX2lzQWN0aXZlID0gZmFsc2U7Ci0gICAgcmVwb3J0U3Rh
dHMoKTsKLX0KLQotdm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjpwYXVzZSgpCi17Ci0gICAgTG9ja0hv
bGRlciBsb2NrZXIobV9sb2NrKTsKICAgICBtX2lzUGF1c2VkID0gdHJ1ZTsKICAgICByZXBvcnRT
dGF0cygpOwogfQpAQCAtNTM0LDIyICs1NDksNiBAQCB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6Om5v
dGljZUN1cnJlbnRUaHJlCiAgICAgbm90aWNlQ3VycmVudFRocmVhZEFzSlNDRXhlY3V0aW9uVGhy
ZWFkKGxvY2tlcik7CiB9CiAKLXZvaWQgU2FtcGxpbmdQcm9maWxlcjo6ZGlzcGF0Y2hJZk5lY2Vz
c2FyeShjb25zdCBMb2NrSG9sZGVyJiBsb2NrZXIpCi17Ci0gICAgaWYgKG1faXNBY3RpdmUgJiYg
IW1faGFzRGlzcGF0Y2hlZEZ1bmN0aW9uICYmIG1fanNjRXhlY3V0aW9uVGhyZWFkICYmIG1fdm0u
ZW50cnlTY29wZSkgewotICAgICAgICByZWYoKTsgLy8gTWF0Y2hpbmcgZGVyZWYoKSBpcyBpbnNp
ZGUgbV9oYW5kbGVyIHdoZW4gbV9oYW5kbGVyIHN0b3BzIHJlY3Vyc2luZy4KLSAgICAgICAgZGlz
cGF0Y2hGdW5jdGlvbihsb2NrZXIpOwotICAgIH0KLX0KLQotdm9pZCBTYW1wbGluZ1Byb2ZpbGVy
OjpkaXNwYXRjaEZ1bmN0aW9uKGNvbnN0IExvY2tIb2xkZXImKQotewotICAgIG1faGFzRGlzcGF0
Y2hlZEZ1bmN0aW9uID0gdHJ1ZTsKLSAgICBtX2lzUGF1c2VkID0gZmFsc2U7Ci0gICAgbV9sYXN0
VGltZSA9IG1fc3RvcHdhdGNoLT5lbGFwc2VkVGltZSgpOwotICAgIG1fdGltZXJRdWV1ZS0+ZGlz
cGF0Y2hBZnRlcihtX3RpbWluZ0ludGVydmFsLCBtX2hhbmRsZXIpOwotfQotCiB2b2lkIFNhbXBs
aW5nUHJvZmlsZXI6Om5vdGljZUpTTG9ja0FjcXVpc2l0aW9uKCkKIHsKICAgICBMb2NrSG9sZGVy
IGxvY2tlcihtX2xvY2spOwpAQCAtNTYyLDcgKzU2MSw3IEBAIHZvaWQgU2FtcGxpbmdQcm9maWxl
cjo6bm90aWNlVk1FbnRyeSgpCiAgICAgQVNTRVJUKG1fdm0uZW50cnlTY29wZSk7CiAgICAgbm90
aWNlQ3VycmVudFRocmVhZEFzSlNDRXhlY3V0aW9uVGhyZWFkKGxvY2tlcik7CiAgICAgbV9sYXN0
VGltZSA9IG1fc3RvcHdhdGNoLT5lbGFwc2VkVGltZSgpOwotICAgIGRpc3BhdGNoSWZOZWNlc3Nh
cnkobG9ja2VyKTsKKyAgICBjcmVhdGVUaHJlYWRJZk5lY2Vzc2FyeShsb2NrZXIpOwogfQogCiB2
b2lkIFNhbXBsaW5nUHJvZmlsZXI6OmNsZWFyRGF0YShjb25zdCBMb2NrSG9sZGVyJikKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmgJ
KHJldmlzaW9uIDE5OTAxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBs
aW5nUHJvZmlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTI5LDIwICsxMjksMjAgQEAgcHVibGlj
OgogICAgIHZvaWQgc2V0VGltaW5nSW50ZXJ2YWwoc3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kcyBp
bnRlcnZhbCkgeyBtX3RpbWluZ0ludGVydmFsID0gaW50ZXJ2YWw7IH0KICAgICBKU19FWFBPUlRf
UFJJVkFURSB2b2lkIHN0YXJ0KCk7CiAgICAgdm9pZCBzdGFydChjb25zdCBMb2NrSG9sZGVyJik7
Ci0gICAgdm9pZCBzdG9wKCk7Ci0gICAgdm9pZCBzdG9wKGNvbnN0IExvY2tIb2xkZXImKTsKICAg
ICBWZWN0b3I8U3RhY2tUcmFjZT4gcmVsZWFzZVN0YWNrVHJhY2VzKGNvbnN0IExvY2tIb2xkZXIm
KTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBTdHJpbmcgc3RhY2tUcmFjZXNBc0pTT04oKTsKICAg
ICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIG5vdGljZUN1cnJlbnRUaHJlYWRBc0pTQ0V4ZWN1dGlv
blRocmVhZCgpOwogICAgIHZvaWQgbm90aWNlQ3VycmVudFRocmVhZEFzSlNDRXhlY3V0aW9uVGhy
ZWFkKGNvbnN0IExvY2tIb2xkZXImKTsKICAgICB2b2lkIHByb2Nlc3NVbnZlcmlmaWVkU3RhY2tU
cmFjZXMoKTsgLy8gWW91IHNob3VsZCBjYWxsIHRoaXMgb25seSBhZnRlciBhY3F1aXJpbmcgdGhl
IGxvY2suCiAgICAgdm9pZCBzZXRTdG9wV2F0Y2goY29uc3QgTG9ja0hvbGRlciYsIFJlZjxTdG9w
d2F0Y2g+JiYgc3RvcHdhdGNoKSB7IG1fc3RvcHdhdGNoID0gV1RGTW92ZShzdG9wd2F0Y2gpOyB9
CisgICAgdm9pZCBwYXVzZShjb25zdCBMb2NrSG9sZGVyJik7CiAKIHByaXZhdGU6Ci0gICAgdm9p
ZCBkaXNwYXRjaElmTmVjZXNzYXJ5KGNvbnN0IExvY2tIb2xkZXImKTsKLSAgICB2b2lkIGRpc3Bh
dGNoRnVuY3Rpb24oY29uc3QgTG9ja0hvbGRlciYpOwotICAgIHZvaWQgcGF1c2UoKTsKICAgICB2
b2lkIGNsZWFyRGF0YShjb25zdCBMb2NrSG9sZGVyJik7CisgICAgc3RhdGljIHZvaWQgY3JlYXRl
VGhyZWFkQ2FsbGJhY2sodm9pZCogc2FtcGxpbmdQcm9maWxlcik7CisgICAgdm9pZCBjcmVhdGVU
aHJlYWRJZk5lY2Vzc2FyeShjb25zdCBMb2NrSG9sZGVyJik7CisgICAgdm9pZCB0aW1lckxvb3Ao
KTsKKyAgICB2b2lkIHRha2VTYW1wbGUoY29uc3QgTG9ja0hvbGRlciYsIHN0ZDo6Y2hyb25vOjpt
aWNyb3NlY29uZHMmIHN0YWNrVHJhY2VQcm9jZXNzaW5nVGltZSk7CiAKICAgICBWTSYgbV92bTsK
ICAgICBSZWZQdHI8U3RvcHdhdGNoPiBtX3N0b3B3YXRjaDsKQEAgLTE1MCwxMyArMTUwLDExIEBA
IHByaXZhdGU6CiAgICAgVmVjdG9yPFVucHJvY2Vzc2VkU3RhY2tUcmFjZT4gbV91bnByb2Nlc3Nl
ZFN0YWNrVHJhY2VzOwogICAgIHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uZHMgbV90aW1pbmdJbnRl
cnZhbDsKICAgICBkb3VibGUgbV9sYXN0VGltZTsKLSAgICBSZWY8V29ya1F1ZXVlPiBtX3RpbWVy
UXVldWU7Ci0gICAgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBtX2hhbmRsZXI7CiAgICAgTG9jayBt
X2xvY2s7CisgICAgVGhyZWFkSWRlbnRpZmllciBtX3RocmVhZElkZW50aWZpZXI7CiAgICAgTWFj
aGluZVRocmVhZHM6OlRocmVhZCogbV9qc2NFeGVjdXRpb25UaHJlYWQ7Ci0gICAgYm9vbCBtX2lz
QWN0aXZlOwogICAgIGJvb2wgbV9pc1BhdXNlZDsKLSAgICBib29sIG1faGFzRGlzcGF0Y2hlZEZ1
bmN0aW9uOworICAgIGJvb2wgbV9pc1NodXREb3duOwogICAgIEhhc2hTZXQ8SlNDZWxsKj4gbV9s
aXZlQ2VsbFBvaW50ZXJzOwogICAgIFZlY3RvcjxVbnByb2Nlc3NlZFN0YWNrRnJhbWU+IG1fY3Vy
cmVudEZyYW1lczsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCShy
ZXZpc2lvbiAxOTkwMTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMxNiw3ICszMTYsOSBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwg
SGVhcFR5cGUgaGVhcFR5cGUpCiAjaWYgRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQogICAgIGlm
IChPcHRpb25zOjp1c2VTYW1wbGluZ1Byb2ZpbGVyKCkpIHsKICAgICAgICAgc2V0U2hvdWxkQnVp
bGRQQ1RvQ29kZU9yaWdpbk1hcHBpbmcoKTsKLSAgICAgICAgbV9zYW1wbGluZ1Byb2ZpbGVyID0g
YWRvcHRSZWYobmV3IFNhbXBsaW5nUHJvZmlsZXIoKnRoaXMsIFN0b3B3YXRjaDo6Y3JlYXRlKCkp
KTsKKyAgICAgICAgUmVmPFN0b3B3YXRjaD4gc3RvcHdhdGNoID0gU3RvcHdhdGNoOjpjcmVhdGUo
KTsKKyAgICAgICAgc3RvcHdhdGNoLT5zdGFydCgpOworICAgICAgICBtX3NhbXBsaW5nUHJvZmls
ZXIgPSBhZG9wdFJlZihuZXcgU2FtcGxpbmdQcm9maWxlcigqdGhpcywgV1RGTW92ZShzdG9wd2F0
Y2gpKSk7CiAgICAgICAgIG1fc2FtcGxpbmdQcm9maWxlci0+c3RhcnQoKTsKICAgICB9CiAjZW5k
aWYgLy8gRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQo=
</data>
<flag name="review"
          id="299984"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>275738</attachid>
            <date>2016-04-05 19:20:54 -0700</date>
            <delta_ts>2016-04-05 20:55:14 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>18754</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk5MDkwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYwIEBA
CisyMDE2LTA0LTA1ICBTYWFtIGJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IEpTQyBTYW1wbGluZ1Byb2ZpbGVyOiBVc2UgYSB0aHJlYWQgKyBzbGVlcCBsb29wIGluc3RlYWQg
b2YgV1RGOjpXb3JrUXVldWUgZm9yIHRha2luZyBzYW1wbGVzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTQwMTcKKworICAgICAgICBSZXZpZXdlZCBi
eSBHZW9mZnJleSBHYXJlbi4KKworICAgICAgICBCeSBtb3ZpbmcgdG8gYW4gZXhwbGljaXRseSBj
cmVhdGVkIHNlcGVyYXRlIHRocmVhZCArIHNhbXBsZS10aGVuLXNsZWVwCisgICAgICAgIGxvb3As
IHdlIGNhbiByZW1vdmUgYSBsb3Qgb2YgdGhlIGNydWZ0eSBjb2RlIGFyb3VuZCBXb3JrUXVldWUu
CisgICAgICAgIFdlJ3JlIGFsc28gZ2V0dGluZyBzYW1wbGUgcmF0ZXMgdGhhdCBhcmUgbXVjaCBj
bG9zZXIgdG8gd2hhdCB3ZSdyZQorICAgICAgICBhc2tpbmcgdGhlIE9TIGZvci4gV2hlbiB0aGUg
c2FtcGxpbmcgaGFuZGxlciB3YXMgYnVpbHQgb2ZmIG9mIFdvcmtRdWV1ZSwKKyAgICAgICAgd2Un
ZCBvZnRlbiBnZXQgc2FtcGxlIHJhdGVzIG11Y2ggaGlnaGVyIHRoYW4gdGhlIDFtcyB3ZSBhc2tl
ZCBmb3IuIE9uIEtyYWtlbiwKKyAgICAgICAgd2Ugd291bGQgYXZlcmFnZSBhYm91dCAxLjdtcyBz
YW1wbGUgcmF0ZXMsIGV2ZW4gdGhvdWdoIHdlJ2QgYXNrIGZvciBhIDFtcyByYXRlLgorICAgICAg
ICBOb3csIG9uIEtyYWtlbiwgd2UncmUgZ2V0dGluZyBhYm91dCAxLjJtcyByYXRlcy4gQmVjYXVz
ZSB3ZSdyZSBnZXR0aW5nCisgICAgICAgIGhpZ2hlciByYXRlcywgdGhpcyBwYXRjaCBpcyBhIHBl
cmZvcm1hbmNlIHJlZ3Jlc3Npb24uIEl0J3Mgc2xvd2VyIGJlY2F1c2UKKyAgICAgICAgd2UncmUg
c2FtcGxpbmcgbW9yZSBmcmVxdWVudGx5LgorCisgICAgICAgIEJlZm9yZSB0aGlzIHBhdGNoLCB0
aGUgc2FtcGxpbmcgcHJvZmlsZXIgaGFkIHRoZSBmb2xsb3dpbmcgb3ZlcmhlYWQ6CisgICAgICAg
IC0gMTAlIG9uIEtyYWtlbgorICAgICAgICAtIDEyJSBvbiBvY3RhbmUKKyAgICAgICAgLSAxNSUg
b24gQXNtQmVuY2gKKworICAgICAgICBXaXRoIHRoaXMgcGF0Y2gsIHRoZSBzYW1wbGluZyBwcm9m
aWxlciBoYXMgdGhlIGZvbGxvd2luZyBvdmVyaGVhZDoKKyAgICAgICAgLSAxNiUgb24gS3Jha2Vu
CisgICAgICAgIC0gMTclIG9uIE9jdGFuZQorICAgICAgICAtIDMwJSBvbiBBc21CZW5jaAorCisg
ICAgICAgIENvbXBhcmF0aXZlbHksIHRoaXMgbmV3IHBhdGNoIGhhcyB0aGUgZm9sbG93aW5nIG92
ZXJoZWFkIG92ZXIgdGhlIG9sZCBzYW1wbGluZyBwcm9maWxlcjoKKyAgICAgICAgLSA1JSBvbiBL
cmFrZW4KKyAgICAgICAgLSAzLjUlIG9uIE9jdGFuZQorICAgICAgICAtIDEzJSBzbG93ZXIgb24g
QXNtQmVuY2gKKworICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yU2NyaXB0UHJv
ZmlsZXJBZ2VudC5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvclNjcmlwdFByb2Zp
bGVyQWdlbnQ6OnRyYWNraW5nQ29tcGxldGUpOgorICAgICAgICAqIHJ1bnRpbWUvU2FtcGxpbmdQ
cm9maWxlci5jcHA6CisgICAgICAgIChKU0M6OlNhbXBsaW5nUHJvZmlsZXI6OlNhbXBsaW5nUHJv
ZmlsZXIpOgorICAgICAgICAoSlNDOjpTYW1wbGluZ1Byb2ZpbGVyOjp+U2FtcGxpbmdQcm9maWxl
cik6CisgICAgICAgIChKU0M6OlNhbXBsaW5nUHJvZmlsZXI6OmNyZWF0ZVRocmVhZElmTmVjZXNz
YXJ5KToKKyAgICAgICAgKEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6dGltZXJMb29wKToKKyAgICAg
ICAgKEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6dGFrZVNhbXBsZSk6CisgICAgICAgIChKU0M6OnRy
eUdldEJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpTYW1wbGluZ1Byb2ZpbGVyOjpzaHV0
ZG93bik6CisgICAgICAgIChKU0M6OlNhbXBsaW5nUHJvZmlsZXI6OnN0YXJ0KToKKyAgICAgICAg
KEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6cGF1c2UpOgorICAgICAgICAoSlNDOjpTYW1wbGluZ1By
b2ZpbGVyOjpub3RpY2VDdXJyZW50VGhyZWFkQXNKU0NFeGVjdXRpb25UaHJlYWQpOgorICAgICAg
ICAoSlNDOjpTYW1wbGluZ1Byb2ZpbGVyOjpub3RpY2VKU0xvY2tBY3F1aXNpdGlvbik6CisgICAg
ICAgIChKU0M6OlNhbXBsaW5nUHJvZmlsZXI6Om5vdGljZVZNRW50cnkpOgorICAgICAgICAoSlND
OjpTYW1wbGluZ1Byb2ZpbGVyOjpjbGVhckRhdGEpOgorICAgICAgICAoSlNDOjpTYW1wbGluZ1By
b2ZpbGVyOjpzdG9wKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6
ZGlzcGF0Y2hJZk5lY2Vzc2FyeSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlNhbXBsaW5nUHJv
ZmlsZXI6OmRpc3BhdGNoRnVuY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvU2Ft
cGxpbmdQcm9maWxlci5oOgorICAgICAgICAoSlNDOjpTYW1wbGluZ1Byb2ZpbGVyOjpzZXRUaW1p
bmdJbnRlcnZhbCk6CisgICAgICAgIChKU0M6OlNhbXBsaW5nUHJvZmlsZXI6OnNldFN0b3BXYXRj
aCk6CisgICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6OlZNOjpWTSk6CisK
IDIwMTYtMDQtMDUgIENvbW1pdCBRdWV1ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJraXQub3JnPgogCiAg
ICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxOTkwNzMuCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JTY3JpcHRQcm9maWxlckFnZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JTY3JpcHRQcm9maWxlckFnZW50LmNwcAkocmV2aXNpb24gMTk5MDE3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yU2NyaXB0UHJv
ZmlsZXJBZ2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMiw3ICsyMDIsNyBAQCB2b2lkIElu
c3BlY3RvclNjcmlwdFByb2ZpbGVyQWdlbnQ6OnRyYWNrCiAgICAgICAgIFNhbXBsaW5nUHJvZmls
ZXIqIHNhbXBsaW5nUHJvZmlsZXIgPSBtX2Vudmlyb25tZW50LnNjcmlwdERlYnVnU2VydmVyKCku
dm0oKS5zYW1wbGluZ1Byb2ZpbGVyKCk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNhbXBsaW5n
UHJvZmlsZXIpOwogICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihzYW1wbGluZ1Byb2ZpbGVyLT5n
ZXRMb2NrKCkpOwotICAgICAgICBzYW1wbGluZ1Byb2ZpbGVyLT5zdG9wKGxvY2tlcik7CisgICAg
ICAgIHNhbXBsaW5nUHJvZmlsZXItPnBhdXNlKGxvY2tlcik7CiAgICAgICAgIFZlY3RvcjxTYW1w
bGluZ1Byb2ZpbGVyOjpTdGFja1RyYWNlPiBzdGFja1RyYWNlcyA9IHNhbXBsaW5nUHJvZmlsZXIt
PnJlbGVhc2VTdGFja1RyYWNlcyhsb2NrZXIpOwogICAgICAgICBSZWY8UHJvdG9jb2w6OlNjcmlw
dFByb2ZpbGVyOjpTYW1wbGVzPiBzYW1wbGVzID0gYnVpbGRTYW1wbGVzKG1fZW52aXJvbm1lbnQu
c2NyaXB0RGVidWdTZXJ2ZXIoKS52bSgpLCBXVEZNb3ZlKHN0YWNrVHJhY2VzKSk7CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIu
Y3BwCShyZXZpc2lvbiAxOTkwMTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
YW1wbGluZ1Byb2ZpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg2LDExICsxODYsMTAgQEAg
U2FtcGxpbmdQcm9maWxlcjo6U2FtcGxpbmdQcm9maWxlcihWTSYgdgogICAgIDogbV92bSh2bSkK
ICAgICAsIG1fc3RvcHdhdGNoKFdURk1vdmUoc3RvcHdhdGNoKSkKICAgICAsIG1fdGltaW5nSW50
ZXJ2YWwoc3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kcygxMDAwKSkKLSAgICAsIG1fdGltZXJRdWV1
ZShXb3JrUXVldWU6OmNyZWF0ZSgianNjLnNhbXBsaW5nLXByb2ZpbGVyLnF1ZXVlIiwgV29ya1F1
ZXVlOjpUeXBlOjpTZXJpYWwsIFdvcmtRdWV1ZTo6UU9TOjpVc2VySW50ZXJhY3RpdmUpKQorICAg
ICwgbV90aHJlYWRJZGVudGlmaWVyKDApCiAgICAgLCBtX2pzY0V4ZWN1dGlvblRocmVhZChudWxs
cHRyKQotICAgICwgbV9pc0FjdGl2ZShmYWxzZSkKICAgICAsIG1faXNQYXVzZWQoZmFsc2UpCi0g
ICAgLCBtX2hhc0Rpc3BhdGNoZWRGdW5jdGlvbihmYWxzZSkKKyAgICAsIG1faXNTaHV0RG93bihm
YWxzZSkKIHsKICAgICBpZiAoc1JlcG9ydFN0YXRzKSB7CiAgICAgICAgIHNOdW1Ub3RhbFdhbGtz
ID0gMDsKQEAgLTE5OCw5NyArMTk3LDEyNCBAQCBTYW1wbGluZ1Byb2ZpbGVyOjpTYW1wbGluZ1By
b2ZpbGVyKFZNJiB2CiAgICAgfQogCiAgICAgbV9jdXJyZW50RnJhbWVzLmdyb3coMjU2KTsKK30K
IAotICAgIG1faGFuZGxlciA9IFt0aGlzXSAoKSB7Ci0gICAgICAgIExvY2tIb2xkZXIgc2FtcGxp
bmdQcm9maWxlckxvY2tlcihtX2xvY2spOwotICAgICAgICBpZiAoIW1faXNBY3RpdmUgfHwgIW1f
anNjRXhlY3V0aW9uVGhyZWFkIHx8IG1faXNQYXVzZWQpIHsKLSAgICAgICAgICAgIG1faGFzRGlz
cGF0Y2hlZEZ1bmN0aW9uID0gZmFsc2U7Ci0gICAgICAgICAgICBkZXJlZigpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9CitTYW1wbGluZ1Byb2ZpbGVyOjp+U2FtcGxpbmdQcm9maWxl
cigpCit7Cit9CiAKLSAgICAgICAgaWYgKG1fdm0uZW50cnlTY29wZSkgewotICAgICAgICAgICAg
ZG91YmxlIG5vd1RpbWUgPSBtX3N0b3B3YXRjaC0+ZWxhcHNlZFRpbWUoKTsKK3ZvaWQgU2FtcGxp
bmdQcm9maWxlcjo6Y3JlYXRlVGhyZWFkSWZOZWNlc3NhcnkoY29uc3QgTG9ja0hvbGRlciYpCit7
CisgICAgQVNTRVJUKG1fbG9jay5pc0xvY2tlZCgpKTsKIAotICAgICAgICAgICAgTG9ja0hvbGRl
ciBtYWNoaW5lVGhyZWFkc0xvY2tlcihtX3ZtLmhlYXAubWFjaGluZVRocmVhZHMoKS5nZXRMb2Nr
KCkpOwotICAgICAgICAgICAgTG9ja0hvbGRlciBjb2RlQmxvY2tTZXRMb2NrZXIobV92bS5oZWFw
LmNvZGVCbG9ja1NldCgpLmdldExvY2soKSk7Ci0gICAgICAgICAgICBMb2NrSG9sZGVyIGV4ZWN1
dGFibGVBbGxvY2F0b3JMb2NrZXIobV92bS5leGVjdXRhYmxlQWxsb2NhdG9yLmdldExvY2soKSk7
Ci0KLSAgICAgICAgICAgIGJvb2wgZGlkU3VzcGVuZCA9IG1fanNjRXhlY3V0aW9uVGhyZWFkLT5z
dXNwZW5kKCk7Ci0gICAgICAgICAgICBpZiAoZGlkU3VzcGVuZCkgewotICAgICAgICAgICAgICAg
IC8vIFdoaWxlIHRoZSBKU0MgdGhyZWFkIGlzIHN1c3BlbmRlZCwgd2UgY2FuJ3QgZG8gdGhpbmdz
IGxpa2UgbWFsbG9jIGJlY2F1c2UgdGhlIEpTQyB0aHJlYWQKLSAgICAgICAgICAgICAgICAvLyBt
YXkgYmUgaG9sZGluZyB0aGUgbWFsbG9jIGxvY2suCi0gICAgICAgICAgICAgICAgRXhlY1N0YXRl
KiBjYWxsRnJhbWU7Ci0gICAgICAgICAgICAgICAgdm9pZCogbWFjaGluZVBDOwotICAgICAgICAg
ICAgICAgIGJvb2wgdG9wRnJhbWVJc0xMSW50ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgdm9p
ZCogbGxpbnRQQzsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIE1hY2hp
bmVUaHJlYWRzOjpUaHJlYWQ6OlJlZ2lzdGVycyByZWdpc3RlcnM7Ci0gICAgICAgICAgICAgICAg
ICAgIG1fanNjRXhlY3V0aW9uVGhyZWFkLT5nZXRSZWdpc3RlcnMocmVnaXN0ZXJzKTsKLSAgICAg
ICAgICAgICAgICAgICAgY2FsbEZyYW1lID0gc3RhdGljX2Nhc3Q8RXhlY1N0YXRlKj4ocmVnaXN0
ZXJzLmZyYW1lUG9pbnRlcigpKTsKLSAgICAgICAgICAgICAgICAgICAgbWFjaGluZVBDID0gcmVn
aXN0ZXJzLmluc3RydWN0aW9uUG9pbnRlcigpOwotICAgICAgICAgICAgICAgICAgICBsbGludFBD
ID0gcmVnaXN0ZXJzLmxsaW50UEMoKTsKLSAgICAgICAgICAgICAgICAgICAgbV9qc2NFeGVjdXRp
b25UaHJlYWQtPmZyZWVSZWdpc3RlcnMocmVnaXN0ZXJzKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgLy8gRklYTUU6IExldHMgaGF2ZSBhIHdheSBvZiBkZXRlY3Rpbmcgd2hl
biB3ZSdyZSBwYXJzaW5nIGNvZGUuCi0gICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1Mjc2MQotICAgICAgICAgICAgICAgIGlmIChtX3Zt
LmV4ZWN1dGFibGVBbGxvY2F0b3IuaXNWYWxpZEV4ZWN1dGFibGVNZW1vcnkoZXhlY3V0YWJsZUFs
bG9jYXRvckxvY2tlciwgbWFjaGluZVBDKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAobV92
bS5pc0V4ZWN1dGluZ0luUmVnRXhwSklUKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBG
SVhNRTogV2UncmUgZXhlY3V0aW5nIGEgcmVnZXhwLiBMZXRzIGdhdGhlciBtb3JlIGludGVyc3Rp
bmcgZGF0YS4KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNTI3MjkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxG
cmFtZSA9IG1fdm0udG9wQ2FsbEZyYW1lOyAvLyBXZSBuZWVkIHRvIGRvIHRoaXMgb3IgZWxzZSB3
ZSdkIGZhaWwgb3VyIGJhY2t0cmFjZSB2YWxpZGF0aW9uIGIvYyB0aGlzIGlzbid0IGEgSlMgZnJh
bWUuCi0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKExM
SW50Ojppc0xMSW50UEMobWFjaGluZVBDKSkgewotICAgICAgICAgICAgICAgICAgICB0b3BGcmFt
ZUlzTExJbnQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAvLyBXZSdyZSBva2F5IHRvIHRh
a2UgYSBub3JtYWwgc3RhY2sgdHJhY2Ugd2hlbiB0aGUgUEMKLSAgICAgICAgICAgICAgICAgICAg
Ly8gaXMgaW4gTExJbnQgY29kZS4KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgICAgICAvLyBXZSByZXNvcnQgdG8gdG9wQ2FsbEZyYW1lIHRvIHNlZSBpZiB3ZSBjYW4g
Z2V0IGFueXRoaW5nCi0gICAgICAgICAgICAgICAgICAgIC8vIHVzZWZ1bC4gV2UgdXN1YWxseSBn
ZXQgaGVyZSB3aGVuIHdlJ3JlIGV4ZWN1dGluZyBDIGNvZGUuCi0gICAgICAgICAgICAgICAgICAg
IGNhbGxGcmFtZSA9IG1fdm0udG9wQ2FsbEZyYW1lOwotICAgICAgICAgICAgICAgIH0KKyAgICBp
ZiAobV90aHJlYWRJZGVudGlmaWVyKQorICAgICAgICByZXR1cm47CiAKLSAgICAgICAgICAgICAg
ICBzaXplX3Qgd2Fsa1NpemU7Ci0gICAgICAgICAgICAgICAgYm9vbCB3YXNWYWxpZFdhbGs7Ci0g
ICAgICAgICAgICAgICAgYm9vbCBkaWRSdW5PdXRPZlZlY3RvclNwYWNlOwotICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgRnJhbWVXYWxrZXIgd2Fsa2VyKGNhbGxGcmFtZSwg
bV92bSwgY29kZUJsb2NrU2V0TG9ja2VyLCBtYWNoaW5lVGhyZWFkc0xvY2tlcik7Ci0gICAgICAg
ICAgICAgICAgICAgIHdhbGtTaXplID0gd2Fsa2VyLndhbGsobV9jdXJyZW50RnJhbWVzLCBkaWRS
dW5PdXRPZlZlY3RvclNwYWNlKTsKLSAgICAgICAgICAgICAgICAgICAgd2FzVmFsaWRXYWxrID0g
d2Fsa2VyLndhc1ZhbGlkV2FsaygpOwotICAgICAgICAgICAgICAgIH0KKyAgICBSZWZQdHI8U2Ft
cGxpbmdQcm9maWxlcj4gcHJvZmlsZXIgPSB0aGlzOworICAgIG1fdGhyZWFkSWRlbnRpZmllciA9
IGNyZWF0ZVRocmVhZCgianNjLnNhbXBsaW5nLXByb2ZpbGVyLnRocmVhZCIsIFtwcm9maWxlcl0g
eworICAgICAgICBwcm9maWxlci0+dGltZXJMb29wKCk7CisgICAgfSk7Cit9CisKK3ZvaWQgU2Ft
cGxpbmdQcm9maWxlcjo6dGltZXJMb29wKCkKK3sKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAg
ICBzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzIHN0YWNrVHJhY2VQcm9jZXNzaW5nVGltZSA9IHN0
ZDo6Y2hyb25vOjptaWNyb3NlY29uZHMoMCk7CisgICAgICAgIHsKKyAgICAgICAgICAgIExvY2tI
b2xkZXIgbG9ja2VyKG1fbG9jayk7CisgICAgICAgICAgICBpZiAoVU5MSUtFTFkobV9pc1NodXRE
b3duKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgICAgICAgICBtX2pzY0V4
ZWN1dGlvblRocmVhZC0+cmVzdW1lKCk7CisgICAgICAgICAgICBpZiAoIW1faXNQYXVzZWQgJiYg
bV9qc2NFeGVjdXRpb25UaHJlYWQpCisgICAgICAgICAgICAgICAgdGFrZVNhbXBsZShsb2NrZXIs
IHN0YWNrVHJhY2VQcm9jZXNzaW5nVGltZSk7CiAKLSAgICAgICAgICAgICAgICAvLyBXZSBjYW4g
bm93IHVzZSBkYXRhIHN0cnVjdHVyZXMgdGhhdCBtYWxsb2MsIGFuZCBkbyBvdGhlciBpbnRlcmVz
dGluZyB0aGluZ3MsIGFnYWluLgorICAgICAgICAgICAgbV9sYXN0VGltZSA9IG1fc3RvcHdhdGNo
LT5lbGFwc2VkVGltZSgpOworICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTog
SXQnZCBiZSBpbnRlcmVzdGluZyB0byB0YWtlIGRhdGEgYWJvdXQgdGhlIHByb2dyYW0ncyBzdGF0
ZSB3aGVuCi0gICAgICAgICAgICAgICAgLy8gd2UgZmFpbCB0byB0YWtlIGEgc3RhY2sgdHJhY2U6
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTI3NTgKLSAgICAgICAg
ICAgICAgICBpZiAod2FzVmFsaWRXYWxrICYmIHdhbGtTaXplKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChzUmVwb3J0U3RhdHMpCi0gICAgICAgICAgICAgICAgICAgICAgICBzTnVtVG90YWxT
dGFja1RyYWNlcysrOwotICAgICAgICAgICAgICAgICAgICBWZWN0b3I8VW5wcm9jZXNzZWRTdGFj
a0ZyYW1lPiBzdGFja1RyYWNlOwotICAgICAgICAgICAgICAgICAgICBzdGFja1RyYWNlLnJlc2Vy
dmVJbml0aWFsQ2FwYWNpdHkod2Fsa1NpemUpOwotICAgICAgICAgICAgICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHdhbGtTaXplOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IFVucHJvY2Vzc2VkU3RhY2tGcmFtZSBmcmFtZSA9IG1fY3VycmVudEZyYW1lc1tpXTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YWNrVHJhY2UudW5jaGVja2VkQXBwZW5kKGZyYW1lKTsKLSAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICBzdGQ6OnRoaXNfdGhyZWFkOjpzbGVlcF9mb3Io
bV90aW1pbmdJbnRlcnZhbCAtIHN0ZDo6bWluKG1fdGltaW5nSW50ZXJ2YWwsIHN0YWNrVHJhY2VQ
cm9jZXNzaW5nVGltZSkpOworICAgIH0KK30KIAotICAgICAgICAgICAgICAgICAgICBtX3VucHJv
Y2Vzc2VkU3RhY2tUcmFjZXMuYXBwZW5kKFVucHJvY2Vzc2VkU3RhY2tUcmFjZSB7IG5vd1RpbWUs
IG1hY2hpbmVQQywgdG9wRnJhbWVJc0xMSW50LCBsbGludFBDLCBXVEZNb3ZlKHN0YWNrVHJhY2Up
IH0pOwordm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjp0YWtlU2FtcGxlKGNvbnN0IExvY2tIb2xkZXIm
LCBzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzJiBzdGFja1RyYWNlUHJvY2Vzc2luZ1RpbWUpCit7
CisgICAgQVNTRVJUKG1fbG9jay5pc0xvY2tlZCgpKTsKKyAgICBpZiAobV92bS5lbnRyeVNjb3Bl
KSB7CisgICAgICAgIGRvdWJsZSBub3dUaW1lID0gbV9zdG9wd2F0Y2gtPmVsYXBzZWRUaW1lKCk7
CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKGRpZFJ1bk91dE9mVmVjdG9yU3BhY2UpCi0gICAg
ICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRGcmFtZXMuZ3JvdyhtX2N1cnJlbnRGcmFtZXMu
c2l6ZSgpICogMS4yNSk7CisgICAgICAgIExvY2tIb2xkZXIgbWFjaGluZVRocmVhZHNMb2NrZXIo
bV92bS5oZWFwLm1hY2hpbmVUaHJlYWRzKCkuZ2V0TG9jaygpKTsKKyAgICAgICAgTG9ja0hvbGRl
ciBjb2RlQmxvY2tTZXRMb2NrZXIobV92bS5oZWFwLmNvZGVCbG9ja1NldCgpLmdldExvY2soKSk7
CisgICAgICAgIExvY2tIb2xkZXIgZXhlY3V0YWJsZUFsbG9jYXRvckxvY2tlcihtX3ZtLmV4ZWN1
dGFibGVBbGxvY2F0b3IuZ2V0TG9jaygpKTsKKworICAgICAgICBib29sIGRpZFN1c3BlbmQgPSBt
X2pzY0V4ZWN1dGlvblRocmVhZC0+c3VzcGVuZCgpOworICAgICAgICBpZiAoZGlkU3VzcGVuZCkg
eworICAgICAgICAgICAgLy8gV2hpbGUgdGhlIEpTQyB0aHJlYWQgaXMgc3VzcGVuZGVkLCB3ZSBj
YW4ndCBkbyB0aGluZ3MgbGlrZSBtYWxsb2MgYmVjYXVzZSB0aGUgSlNDIHRocmVhZAorICAgICAg
ICAgICAgLy8gbWF5IGJlIGhvbGRpbmcgdGhlIG1hbGxvYyBsb2NrLgorICAgICAgICAgICAgRXhl
Y1N0YXRlKiBjYWxsRnJhbWU7CisgICAgICAgICAgICB2b2lkKiBtYWNoaW5lUEM7CisgICAgICAg
ICAgICBib29sIHRvcEZyYW1lSXNMTEludCA9IGZhbHNlOworICAgICAgICAgICAgdm9pZCogbGxp
bnRQQzsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBNYWNoaW5lVGhyZWFkczo6VGhy
ZWFkOjpSZWdpc3RlcnMgcmVnaXN0ZXJzOworICAgICAgICAgICAgICAgIG1fanNjRXhlY3V0aW9u
VGhyZWFkLT5nZXRSZWdpc3RlcnMocmVnaXN0ZXJzKTsKKyAgICAgICAgICAgICAgICBjYWxsRnJh
bWUgPSBzdGF0aWNfY2FzdDxFeGVjU3RhdGUqPihyZWdpc3RlcnMuZnJhbWVQb2ludGVyKCkpOwor
ICAgICAgICAgICAgICAgIG1hY2hpbmVQQyA9IHJlZ2lzdGVycy5pbnN0cnVjdGlvblBvaW50ZXIo
KTsKKyAgICAgICAgICAgICAgICBsbGludFBDID0gcmVnaXN0ZXJzLmxsaW50UEMoKTsKKyAgICAg
ICAgICAgICAgICBtX2pzY0V4ZWN1dGlvblRocmVhZC0+ZnJlZVJlZ2lzdGVycyhyZWdpc3RlcnMp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gRklYTUU6IExldHMgaGF2ZSBhIHdheSBv
ZiBkZXRlY3Rpbmcgd2hlbiB3ZSdyZSBwYXJzaW5nIGNvZGUuCisgICAgICAgICAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUyNzYxCisgICAgICAgICAgICBp
ZiAobV92bS5leGVjdXRhYmxlQWxsb2NhdG9yLmlzVmFsaWRFeGVjdXRhYmxlTWVtb3J5KGV4ZWN1
dGFibGVBbGxvY2F0b3JMb2NrZXIsIG1hY2hpbmVQQykpIHsKKyAgICAgICAgICAgICAgICBpZiAo
bV92bS5pc0V4ZWN1dGluZ0luUmVnRXhwSklUKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEZJ
WE1FOiBXZSdyZSBleGVjdXRpbmcgYSByZWdleHAuIExldHMgZ2F0aGVyIG1vcmUgaW50ZXJzdGlu
ZyBkYXRhLgorICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTUyNzI5CisgICAgICAgICAgICAgICAgICAgIGNhbGxGcmFtZSA9IG1f
dm0udG9wQ2FsbEZyYW1lOyAvLyBXZSBuZWVkIHRvIGRvIHRoaXMgb3IgZWxzZSB3ZSdkIGZhaWwg
b3VyIGJhY2t0cmFjZSB2YWxpZGF0aW9uIGIvYyB0aGlzIGlzbid0IGEgSlMgZnJhbWUuCiAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChMTEludDo6aXNMTEludFBDKG1h
Y2hpbmVQQykpIHsKKyAgICAgICAgICAgICAgICB0b3BGcmFtZUlzTExJbnQgPSB0cnVlOworICAg
ICAgICAgICAgICAgIC8vIFdlJ3JlIG9rYXkgdG8gdGFrZSBhIG5vcm1hbCBzdGFjayB0cmFjZSB3
aGVuIHRoZSBQQworICAgICAgICAgICAgICAgIC8vIGlzIGluIExMSW50IGNvZGUuCisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIFdlIHJlc29ydCB0byB0b3BDYWxsRnJh
bWUgdG8gc2VlIGlmIHdlIGNhbiBnZXQgYW55dGhpbmcKKyAgICAgICAgICAgICAgICAvLyB1c2Vm
dWwuIFdlIHVzdWFsbHkgZ2V0IGhlcmUgd2hlbiB3ZSdyZSBleGVjdXRpbmcgQyBjb2RlLgorICAg
ICAgICAgICAgICAgIGNhbGxGcmFtZSA9IG1fdm0udG9wQ2FsbEZyYW1lOwogICAgICAgICAgICAg
fQotICAgICAgICB9CiAKLSAgICAgICAgbV9sYXN0VGltZSA9IG1fc3RvcHdhdGNoLT5lbGFwc2Vk
VGltZSgpOworICAgICAgICAgICAgc2l6ZV90IHdhbGtTaXplOworICAgICAgICAgICAgYm9vbCB3
YXNWYWxpZFdhbGs7CisgICAgICAgICAgICBib29sIGRpZFJ1bk91dE9mVmVjdG9yU3BhY2U7Cisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRnJhbWVXYWxrZXIgd2Fsa2VyKGNhbGxGcmFt
ZSwgbV92bSwgY29kZUJsb2NrU2V0TG9ja2VyLCBtYWNoaW5lVGhyZWFkc0xvY2tlcik7CisgICAg
ICAgICAgICAgICAgd2Fsa1NpemUgPSB3YWxrZXIud2FsayhtX2N1cnJlbnRGcmFtZXMsIGRpZFJ1
bk91dE9mVmVjdG9yU3BhY2UpOworICAgICAgICAgICAgICAgIHdhc1ZhbGlkV2FsayA9IHdhbGtl
ci53YXNWYWxpZFdhbGsoKTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICBkaXNwYXRjaEZ1bmN0
aW9uKHNhbXBsaW5nUHJvZmlsZXJMb2NrZXIpOwotICAgIH07Ci19CisgICAgICAgICAgICBtX2pz
Y0V4ZWN1dGlvblRocmVhZC0+cmVzdW1lKCk7CiAKLVNhbXBsaW5nUHJvZmlsZXI6On5TYW1wbGlu
Z1Byb2ZpbGVyKCkKLXsKKyAgICAgICAgICAgIGF1dG8gc3RhcnRUaW1lID0gc3RkOjpjaHJvbm86
OnN0ZWFkeV9jbG9jazo6bm93KCk7CisgICAgICAgICAgICAvLyBXZSBjYW4gbm93IHVzZSBkYXRh
IHN0cnVjdHVyZXMgdGhhdCBtYWxsb2MsIGFuZCBkbyBvdGhlciBpbnRlcmVzdGluZyB0aGluZ3Ms
IGFnYWluLgorCisgICAgICAgICAgICAvLyBGSVhNRTogSXQnZCBiZSBpbnRlcmVzdGluZyB0byB0
YWtlIGRhdGEgYWJvdXQgdGhlIHByb2dyYW0ncyBzdGF0ZSB3aGVuCisgICAgICAgICAgICAvLyB3
ZSBmYWlsIHRvIHRha2UgYSBzdGFjayB0cmFjZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE1Mjc1OAorICAgICAgICAgICAgaWYgKHdhc1ZhbGlkV2FsayAmJiB3YWxr
U2l6ZSkgeworICAgICAgICAgICAgICAgIGlmIChzUmVwb3J0U3RhdHMpCisgICAgICAgICAgICAg
ICAgICAgIHNOdW1Ub3RhbFN0YWNrVHJhY2VzKys7CisgICAgICAgICAgICAgICAgVmVjdG9yPFVu
cHJvY2Vzc2VkU3RhY2tGcmFtZT4gc3RhY2tUcmFjZTsKKyAgICAgICAgICAgICAgICBzdGFja1Ry
YWNlLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkod2Fsa1NpemUpOworICAgICAgICAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgd2Fsa1NpemU7IGkrKykgeworICAgICAgICAgICAgICAgICAg
ICBVbnByb2Nlc3NlZFN0YWNrRnJhbWUgZnJhbWUgPSBtX2N1cnJlbnRGcmFtZXNbaV07CisgICAg
ICAgICAgICAgICAgICAgIHN0YWNrVHJhY2UudW5jaGVja2VkQXBwZW5kKGZyYW1lKTsKKyAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBtX3VucHJvY2Vzc2VkU3RhY2tUcmFjZXMu
YXBwZW5kKFVucHJvY2Vzc2VkU3RhY2tUcmFjZSB7IG5vd1RpbWUsIG1hY2hpbmVQQywgdG9wRnJh
bWVJc0xMSW50LCBsbGludFBDLCBXVEZNb3ZlKHN0YWNrVHJhY2UpIH0pOworCisgICAgICAgICAg
ICAgICAgaWYgKGRpZFJ1bk91dE9mVmVjdG9yU3BhY2UpCisgICAgICAgICAgICAgICAgICAgIG1f
Y3VycmVudEZyYW1lcy5ncm93KG1fY3VycmVudEZyYW1lcy5zaXplKCkgKiAxLjI1KTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgYXV0byBlbmRUaW1lID0gc3RkOjpjaHJvbm86OnN0ZWFk
eV9jbG9jazo6bm93KCk7CisgICAgICAgICAgICBzdGFja1RyYWNlUHJvY2Vzc2luZ1RpbWUgPSBz
dGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzPihlbmRU
aW1lIC0gc3RhcnRUaW1lKTsKKyAgICAgICAgfQorICAgIH0KIH0KIAogc3RhdGljIEFMV0FZU19J
TkxJTkUgdW5zaWduZWQgdHJ5R2V0Qnl0ZWNvZGVJbmRleCh1bnNpZ25lZCBsbGludFBDLCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgYm9vbCYgaXNWYWxpZCkKQEAgLTQ4Niw3ICs1MTIsOCBAQCB2b2lk
IFNhbXBsaW5nUHJvZmlsZXI6OnZpc2l0KFNsb3RWaXNpdG9yCiAKIHZvaWQgU2FtcGxpbmdQcm9m
aWxlcjo6c2h1dGRvd24oKQogewotICAgIHN0b3AoKTsKKyAgICBMb2NrSG9sZGVyIGxvY2tlciht
X2xvY2spOworICAgIG1faXNTaHV0RG93biA9IHRydWU7CiB9CiAKIHZvaWQgU2FtcGxpbmdQcm9m
aWxlcjo6c3RhcnQoKQpAQCAtNDk4LDI2ICs1MjUsMTMgQEAgdm9pZCBTYW1wbGluZ1Byb2ZpbGVy
OjpzdGFydCgpCiB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnN0YXJ0KGNvbnN0IExvY2tIb2xkZXIm
IGxvY2tlcikKIHsKICAgICBBU1NFUlQobV9sb2NrLmlzTG9ja2VkKCkpOwotICAgIG1faXNBY3Rp
dmUgPSB0cnVlOwotICAgIGRpc3BhdGNoSWZOZWNlc3NhcnkobG9ja2VyKTsKLX0KLQotdm9pZCBT
YW1wbGluZ1Byb2ZpbGVyOjpzdG9wKCkKLXsKLSAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2sp
OwotICAgIHN0b3AobG9ja2VyKTsKKyAgICBtX2lzUGF1c2VkID0gZmFsc2U7CisgICAgY3JlYXRl
VGhyZWFkSWZOZWNlc3NhcnkobG9ja2VyKTsKIH0KIAotdm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjpz
dG9wKGNvbnN0IExvY2tIb2xkZXImKQordm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjpwYXVzZShjb25z
dCBMb2NrSG9sZGVyJikKIHsKICAgICBBU1NFUlQobV9sb2NrLmlzTG9ja2VkKCkpOwotICAgIG1f
aXNBY3RpdmUgPSBmYWxzZTsKLSAgICByZXBvcnRTdGF0cygpOwotfQotCi12b2lkIFNhbXBsaW5n
UHJvZmlsZXI6OnBhdXNlKCkKLXsKLSAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOwogICAg
IG1faXNQYXVzZWQgPSB0cnVlOwogICAgIHJlcG9ydFN0YXRzKCk7CiB9CkBAIC01MzQsMjIgKzU0
OCw2IEBAIHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6bm90aWNlQ3VycmVudFRocmUKICAgICBub3Rp
Y2VDdXJyZW50VGhyZWFkQXNKU0NFeGVjdXRpb25UaHJlYWQobG9ja2VyKTsKIH0KIAotdm9pZCBT
YW1wbGluZ1Byb2ZpbGVyOjpkaXNwYXRjaElmTmVjZXNzYXJ5KGNvbnN0IExvY2tIb2xkZXImIGxv
Y2tlcikKLXsKLSAgICBpZiAobV9pc0FjdGl2ZSAmJiAhbV9oYXNEaXNwYXRjaGVkRnVuY3Rpb24g
JiYgbV9qc2NFeGVjdXRpb25UaHJlYWQgJiYgbV92bS5lbnRyeVNjb3BlKSB7Ci0gICAgICAgIHJl
ZigpOyAvLyBNYXRjaGluZyBkZXJlZigpIGlzIGluc2lkZSBtX2hhbmRsZXIgd2hlbiBtX2hhbmRs
ZXIgc3RvcHMgcmVjdXJzaW5nLgotICAgICAgICBkaXNwYXRjaEZ1bmN0aW9uKGxvY2tlcik7Ci0g
ICAgfQotfQotCi12b2lkIFNhbXBsaW5nUHJvZmlsZXI6OmRpc3BhdGNoRnVuY3Rpb24oY29uc3Qg
TG9ja0hvbGRlciYpCi17Ci0gICAgbV9oYXNEaXNwYXRjaGVkRnVuY3Rpb24gPSB0cnVlOwotICAg
IG1faXNQYXVzZWQgPSBmYWxzZTsKLSAgICBtX2xhc3RUaW1lID0gbV9zdG9wd2F0Y2gtPmVsYXBz
ZWRUaW1lKCk7Ci0gICAgbV90aW1lclF1ZXVlLT5kaXNwYXRjaEFmdGVyKG1fdGltaW5nSW50ZXJ2
YWwsIG1faGFuZGxlcik7Ci19Ci0KIHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6bm90aWNlSlNMb2Nr
QWNxdWlzaXRpb24oKQogewogICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CkBAIC01NjIs
NyArNTYwLDcgQEAgdm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjpub3RpY2VWTUVudHJ5KCkKICAgICBB
U1NFUlQobV92bS5lbnRyeVNjb3BlKTsKICAgICBub3RpY2VDdXJyZW50VGhyZWFkQXNKU0NFeGVj
dXRpb25UaHJlYWQobG9ja2VyKTsKICAgICBtX2xhc3RUaW1lID0gbV9zdG9wd2F0Y2gtPmVsYXBz
ZWRUaW1lKCk7Ci0gICAgZGlzcGF0Y2hJZk5lY2Vzc2FyeShsb2NrZXIpOworICAgIGNyZWF0ZVRo
cmVhZElmTmVjZXNzYXJ5KGxvY2tlcik7CiB9CiAKIHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6Y2xl
YXJEYXRhKGNvbnN0IExvY2tIb2xkZXImKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU2FtcGxpbmdQcm9maWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuaAkocmV2aXNpb24gMTk5MDE3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMjksMjAgKzEyOSwxOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRUaW1pbmdJbnRl
cnZhbChzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzIGludGVydmFsKSB7IG1fdGltaW5nSW50ZXJ2
YWwgPSBpbnRlcnZhbDsgfQogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgc3RhcnQoKTsKICAg
ICB2b2lkIHN0YXJ0KGNvbnN0IExvY2tIb2xkZXImKTsKLSAgICB2b2lkIHN0b3AoKTsKLSAgICB2
b2lkIHN0b3AoY29uc3QgTG9ja0hvbGRlciYpOwogICAgIFZlY3RvcjxTdGFja1RyYWNlPiByZWxl
YXNlU3RhY2tUcmFjZXMoY29uc3QgTG9ja0hvbGRlciYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRF
IFN0cmluZyBzdGFja1RyYWNlc0FzSlNPTigpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQg
bm90aWNlQ3VycmVudFRocmVhZEFzSlNDRXhlY3V0aW9uVGhyZWFkKCk7CiAgICAgdm9pZCBub3Rp
Y2VDdXJyZW50VGhyZWFkQXNKU0NFeGVjdXRpb25UaHJlYWQoY29uc3QgTG9ja0hvbGRlciYpOwog
ICAgIHZvaWQgcHJvY2Vzc1VudmVyaWZpZWRTdGFja1RyYWNlcygpOyAvLyBZb3Ugc2hvdWxkIGNh
bGwgdGhpcyBvbmx5IGFmdGVyIGFjcXVpcmluZyB0aGUgbG9jay4KICAgICB2b2lkIHNldFN0b3BX
YXRjaChjb25zdCBMb2NrSG9sZGVyJiwgUmVmPFN0b3B3YXRjaD4mJiBzdG9wd2F0Y2gpIHsgbV9z
dG9wd2F0Y2ggPSBXVEZNb3ZlKHN0b3B3YXRjaCk7IH0KKyAgICB2b2lkIHBhdXNlKGNvbnN0IExv
Y2tIb2xkZXImKTsKIAogcHJpdmF0ZToKLSAgICB2b2lkIGRpc3BhdGNoSWZOZWNlc3NhcnkoY29u
c3QgTG9ja0hvbGRlciYpOwotICAgIHZvaWQgZGlzcGF0Y2hGdW5jdGlvbihjb25zdCBMb2NrSG9s
ZGVyJik7Ci0gICAgdm9pZCBwYXVzZSgpOwogICAgIHZvaWQgY2xlYXJEYXRhKGNvbnN0IExvY2tI
b2xkZXImKTsKKyAgICB2b2lkIGNyZWF0ZVRocmVhZElmTmVjZXNzYXJ5KGNvbnN0IExvY2tIb2xk
ZXImKTsKKyAgICB2b2lkIHRpbWVyTG9vcCgpOworICAgIHZvaWQgdGFrZVNhbXBsZShjb25zdCBM
b2NrSG9sZGVyJiwgc3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kcyYgc3RhY2tUcmFjZVByb2Nlc3Np
bmdUaW1lKTsKIAogICAgIFZNJiBtX3ZtOwogICAgIFJlZlB0cjxTdG9wd2F0Y2g+IG1fc3RvcHdh
dGNoOwpAQCAtMTUwLDEzICsxNDksMTEgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8VW5wcm9jZXNz
ZWRTdGFja1RyYWNlPiBtX3VucHJvY2Vzc2VkU3RhY2tUcmFjZXM7CiAgICAgc3RkOjpjaHJvbm86
Om1pY3Jvc2Vjb25kcyBtX3RpbWluZ0ludGVydmFsOwogICAgIGRvdWJsZSBtX2xhc3RUaW1lOwot
ICAgIFJlZjxXb3JrUXVldWU+IG1fdGltZXJRdWV1ZTsKLSAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQg
KCk+IG1faGFuZGxlcjsKICAgICBMb2NrIG1fbG9jazsKKyAgICBUaHJlYWRJZGVudGlmaWVyIG1f
dGhyZWFkSWRlbnRpZmllcjsKICAgICBNYWNoaW5lVGhyZWFkczo6VGhyZWFkKiBtX2pzY0V4ZWN1
dGlvblRocmVhZDsKLSAgICBib29sIG1faXNBY3RpdmU7CiAgICAgYm9vbCBtX2lzUGF1c2VkOwot
ICAgIGJvb2wgbV9oYXNEaXNwYXRjaGVkRnVuY3Rpb247CisgICAgYm9vbCBtX2lzU2h1dERvd247
CiAgICAgSGFzaFNldDxKU0NlbGwqPiBtX2xpdmVDZWxsUG9pbnRlcnM7CiAgICAgVmVjdG9yPFVu
cHJvY2Vzc2VkU3RhY2tGcmFtZT4gbV9jdXJyZW50RnJhbWVzOwogfTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJldmlzaW9uIDE5OTAxNykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzE2LDcgKzMxNiw5
IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICNpZiBFTkFCTEUo
U0FNUExJTkdfUFJPRklMRVIpCiAgICAgaWYgKE9wdGlvbnM6OnVzZVNhbXBsaW5nUHJvZmlsZXIo
KSkgewogICAgICAgICBzZXRTaG91bGRCdWlsZFBDVG9Db2RlT3JpZ2luTWFwcGluZygpOwotICAg
ICAgICBtX3NhbXBsaW5nUHJvZmlsZXIgPSBhZG9wdFJlZihuZXcgU2FtcGxpbmdQcm9maWxlcigq
dGhpcywgU3RvcHdhdGNoOjpjcmVhdGUoKSkpOworICAgICAgICBSZWY8U3RvcHdhdGNoPiBzdG9w
d2F0Y2ggPSBTdG9wd2F0Y2g6OmNyZWF0ZSgpOworICAgICAgICBzdG9wd2F0Y2gtPnN0YXJ0KCk7
CisgICAgICAgIG1fc2FtcGxpbmdQcm9maWxlciA9IGFkb3B0UmVmKG5ldyBTYW1wbGluZ1Byb2Zp
bGVyKCp0aGlzLCBXVEZNb3ZlKHN0b3B3YXRjaCkpKTsKICAgICAgICAgbV9zYW1wbGluZ1Byb2Zp
bGVyLT5zdGFydCgpOwogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIp
Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>