<?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>126552</bug_id>
          
          <creation_ts>2014-01-06 17:05:07 -0800</creation_ts>
          <short_desc>Marking should be generational</short_desc>
          <delta_ts>2014-01-13 08:09:30 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>126704</dependson>
          <blocked>121074</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Hahnenberg">mhahnenberg</reporter>
          <assigned_to name="Mark Hahnenberg">mhahnenberg</assigned_to>
          <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>koivisto</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>964819</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-01-06 17:05:07 -0800</bug_when>
    <thetext>Re-marking the same objects over and over is a waste of effort. We should use the stick mark bit algorithm along with our already-present write barriers to reduce overhead during garbage collection caused by rescanning objects.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>965251</commentid>
    <comment_count>1</comment_count>
      <attachid>220569</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-01-07 16:49:10 -0800</bug_when>
    <thetext>Created attachment 220569
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>965269</commentid>
    <comment_count>2</comment_count>
      <attachid>220569</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-01-07 17:34:33 -0800</bug_when>
    <thetext>Comment on attachment 220569
Patch

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

r=me

&gt; Source/JavaScriptCore/heap/MarkedBlock.h:76
&gt; -        static const size_t atomSize = 8; // bytes
&gt; +        static const size_t atomSize = 16; // bytes

Why 16 byte atoms? Won&apos;t this mean that 24 byte objects grow to be 32 bytes? Seems like a memory use regression.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>965749</commentid>
    <comment_count>3</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-01-08 19:45:52 -0800</bug_when>
    <thetext>Committed r161540: &lt;http://trac.webkit.org/changeset/161540&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>965932</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-01-09 09:10:48 -0800</bug_when>
    <thetext>This change caused assertion failures on multiple tests, most commonly these:

fast/dom/NodeList/5725058-crash-scenario-1.htmlcrashhistory
fast/dom/text-node-append-data-remove-crash.htmlcrashhistory
fast/dom/window-load-crash.htmlcrashhistory
fast/xpath/xpath-iterator-result-should-mark-its-nodeset.htmlcrashhistory
fast/xpath/xpath-other-nodeset-result-should-mark-its-nodeset.htm

See &lt;http://build.webkit.org/results/Apple%20MountainLion%20Debug%20WK2%20(Tests)/r161553%20(15185)/results.html&gt; for the crash logs.

Rolling out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>965934</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-01-09 09:12:27 -0800</bug_when>
    <thetext>Re-opened since this is blocked by bug 126704</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>966162</commentid>
    <comment_count>6</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-01-09 18:25:42 -0800</bug_when>
    <thetext>Committed r161615: &lt;http://trac.webkit.org/changeset/161615&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>967303</commentid>
    <comment_count>7</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-01-13 07:39:19 -0800</bug_when>
    <thetext>This seems to have significantly (&gt;10%) regressed number of Dromaeo tests:

https://perf.webkit.org/#mode=charts&amp;chartList=%5B%5B%22mac-mavericks%22%2C%22Dromaeo%2Fdromaeo-core-eval%3ARuns%22%5D%2C%5B%22mac-mavericks%22%2C%22Dromaeo%2Fjslib-attr-prototype%3ARuns%22%5D%2C%5B%22mac-mavericks%22%2C%22Dromaeo%2Fjslib-event-prototype%3ARuns%22%5D%5D&amp;days=17

Note how rollout fixes the regression and the relanding brings it back.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>967310</commentid>
    <comment_count>8</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-01-13 07:51:28 -0800</bug_when>
    <thetext>Filed https://bugs.webkit.org/show_bug.cgi?id=126902 for that</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>967312</commentid>
    <comment_count>9</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-01-13 07:51:56 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; This seems to have significantly (&gt;10%) regressed number of Dromaeo tests:
&gt; 
&gt; https://perf.webkit.org/#mode=charts&amp;chartList=%5B%5B%22mac-mavericks%22%2C%22Dromaeo%2Fdromaeo-core-eval%3ARuns%22%5D%2C%5B%22mac-mavericks%22%2C%22Dromaeo%2Fjslib-attr-prototype%3ARuns%22%5D%2C%5B%22mac-mavericks%22%2C%22Dromaeo%2Fjslib-event-prototype%3ARuns%22%5D%5D&amp;days=17
&gt; 
&gt; Note how rollout fixes the regression and the relanding brings it back.

Theoretically this patch should have been performance neutral (which it was as far as I measured). When enabled I&apos;ve measured generational collection as ~8% progression on dromaeo. This regression is probably due to some overhead that we&apos;re incurring despite GGC being disabled. I can see a few options:

(1) Ignore this because as soon as we turn GGC on in ToT this regression will disappear. 
(2) I can try to fix the regression in ToT by disabling more things that were landed as part of this patch. This might be valuable since we may want to keep the ability to disable/enable GGC as a method for debugging, at least in the near future.
(3) Roll it out again. This is my least favorite option since it mostly just creates more work for me :-/

I&apos;m going to start doing (2). As part of this, I&apos;ve filed bug 126901.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>967316</commentid>
    <comment_count>10</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2014-01-13 08:09:30 -0800</bug_when>
    <thetext>Sounds like (2) will be a good balance between the two.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>220569</attachid>
            <date>2014-01-07 16:49:10 -0800</date>
            <delta_ts>2014-01-07 17:34:33 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-126552-20140107164909.patch</filename>
            <type>text/plain</type>
            <size>54725</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYxNDcwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExOCBA
QAorMjAxNC0wMS0wNyAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgor
CisgICAgICAgIE1hcmtpbmcgc2hvdWxkIGJlIGdlbmVyYXRpb25hbAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI2NTUyCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmUtbWFya2luZyB0aGUgc2FtZSBvYmpl
Y3RzIG92ZXIgYW5kIG92ZXIgaXMgYSB3YXN0ZSBvZiBlZmZvcnQuIFRoaXMgcGF0Y2ggaW1wbGVt
ZW50cyAKKyAgICAgICAgdGhlIHN0aWNreSBtYXJrIGJpdCBhbGdvcml0aG0gKGFsb25nIHdpdGgg
b3VyIGFscmVhZHktcHJlc2VudCB3cml0ZSBiYXJyaWVycykgdG8gcmVkdWNlIAorICAgICAgICBv
dmVyaGVhZCBkdXJpbmcgZ2FyYmFnZSBjb2xsZWN0aW9uIGNhdXNlZCBieSByZXNjYW5uaW5nIG9i
amVjdHMuCisKKyAgICAgICAgVGhlcmUgYXJlIG5vdyB0d28gY29sbGVjdGlvbiBtb2RlcywgRWRl
bkNvbGxlY3Rpb24gYW5kIEZ1bGxDb2xsZWN0aW9uLiBFZGVuQ29sbGVjdGlvbnMKKyAgICAgICAg
b25seSB2aXNpdCBuZXcgb2JqZWN0cyBvciBvYmplY3RzIHRoYXQgd2VyZSBhZGRlZCB0byB0aGUg
cmVtZW1iZXJlZCBzZXQgYnkgYSB3cml0ZSBiYXJyaWVyLgorICAgICAgICBGdWxsQ29sbGVjdGlv
bnMgYXJlIG5vcm1hbCBjb2xsZWN0aW9ucyB0aGF0IHZpc2l0IGFsbCBvYmplY3RzIHJlZ2FyZGxl
c3Mgb2YgdGhlaXIgCisgICAgICAgIGdlbmVyYXRpb24uCisKKyAgICAgICAgSW4gdGhpcyBwYXRj
aCBFZGVuQ29sbGVjdGlvbnMgZG8gbm90IGRvIGFueXRoaW5nIGluIENvcGllZFNwYWNlLiBUaGlz
IHdpbGwgYmUgZml4ZWQgaW4gCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMjY1NTUuCisKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnZpc2l0QWdncmVnYXRlKToKKyAgICAgICAgKiBieXRl
Y29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrU2V0OjptYXJrKToKKyAg
ICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogaGVhcC9Db2RlQmxvY2tT
ZXQuY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2tTZXQ6OmFkZCk6CisgICAgICAgIChKU0M6
OkNvZGVCbG9ja1NldDo6dHJhY2VNYXJrZWQpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2tTZXQ6
OnJlbWVtYmVyQ3VycmVudGx5RXhlY3V0aW5nQ29kZUJsb2Nrcyk6CisgICAgICAgICogaGVhcC9D
b2RlQmxvY2tTZXQuaDoKKyAgICAgICAgKiBoZWFwL0NvcGllZEJsb2NrSW5saW5lcy5oOgorICAg
ICAgICAoSlNDOjpDb3BpZWRCbG9jazo6cmVwb3J0TGl2ZUJ5dGVzKToKKyAgICAgICAgKiBoZWFw
L0NvcGllZFNwYWNlLmNwcDoKKyAgICAgICAgKEpTQzo6Q29waWVkU3BhY2U6OmRpZFN0YXJ0RnVs
bENvbGxlY3Rpb24pOgorICAgICAgICAqIGhlYXAvQ29waWVkU3BhY2UuaDoKKyAgICAgICAgKEpT
Qzo6Q29waWVkU3BhY2U6OmhlYXApOgorICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAg
IChKU0M6OkhlYXA6OkhlYXApOgorICAgICAgICAoSlNDOjpIZWFwOjpkaWRBYmFuZG9uKToKKyAg
ICAgICAgKEpTQzo6SGVhcDo6bWFya1Jvb3RzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6Y29weUJh
Y2tpbmdTdG9yZXMpOgorICAgICAgICAoSlNDOjpIZWFwOjphZGRUb1JlbWVtYmVyZWRTZXQpOgor
ICAgICAgICAoSlNDOjpIZWFwOjpjb2xsZWN0QWxsR2FyYmFnZSk6CisgICAgICAgIChKU0M6Okhl
YXA6OmNvbGxlY3QpOgorICAgICAgICAoSlNDOjpIZWFwOjpkaWRBbGxvY2F0ZSk6CisgICAgICAg
IChKU0M6OkhlYXA6OndyaXRlQmFycmllcik6CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAg
ICAgIChKU0M6OkhlYXA6OmlzSW5SZW1lbWJlcmVkU2V0KToKKyAgICAgICAgKEpTQzo6SGVhcDo6
b3BlcmF0aW9uSW5Qcm9ncmVzcyk6CisgICAgICAgIChKU0M6OkhlYXA6OnNob3VsZENvbGxlY3Qp
OgorICAgICAgICAoSlNDOjpIZWFwOjppc0NvbGxlY3RpbmcpOgorICAgICAgICAoSlNDOjpIZWFw
Ojppc1dyaXRlQmFycmllckVuYWJsZWQpOgorICAgICAgICAoSlNDOjpIZWFwOjp3cml0ZUJhcnJp
ZXIpOgorICAgICAgICAqIGhlYXAvSGVhcE9wZXJhdGlvbi5oOgorICAgICAgICAqIGhlYXAvTWFy
a1N0YWNrLmNwcDoKKyAgICAgICAgKEpTQzo6TWFya1N0YWNrQXJyYXk6On5NYXJrU3RhY2tBcnJh
eSk6CisgICAgICAgIChKU0M6Ok1hcmtTdGFja0FycmF5OjpjbGVhcik6CisgICAgICAgIChKU0M6
Ok1hcmtTdGFja0FycmF5OjpmaWxsVmVjdG9yKToKKyAgICAgICAgKiBoZWFwL01hcmtTdGFjay5o
OgorICAgICAgICAqIGhlYXAvTWFya2VkQWxsb2NhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6aXNM
aXN0UGFnZWRPdXQpOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OmlzUGFnZWRPdXQp
OgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlSGVscGVyKToKKyAg
ICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjphZGRCbG9jayk6CisgICAgICAgIChKU0M6Ok1h
cmtlZEFsbG9jYXRvcjo6cmVtb3ZlQmxvY2spOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0
b3I6OnJlc2V0KToKKyAgICAgICAgKiBoZWFwL01hcmtlZEFsbG9jYXRvci5oOgorICAgICAgICAo
SlNDOjpNYXJrZWRBbGxvY2F0b3I6Ok1hcmtlZEFsbG9jYXRvcik6CisgICAgICAgICogaGVhcC9N
YXJrZWRCbG9jay5jcHA6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpjbGVhck1hcmtzKToK
KyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OmNsZWFyUmVtZW1iZXJlZFNldCk6CisgICAgICAg
IChKU0M6Ok1hcmtlZEJsb2NrOjpjbGVhck1hcmtzV2l0aENvbGxlY3Rpb25UeXBlKToKKyAgICAg
ICAgKEpTQzo6TWFya2VkQmxvY2s6Omxhc3RDaGFuY2VUb0ZpbmFsaXplKToKKyAgICAgICAgKiBo
ZWFwL01hcmtlZEJsb2NrLmg6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpkaWRDb25zdW1l
RW1wdHlGcmVlTGlzdCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpzZXRSZW1lbWJlcmVk
KToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OmNsZWFyUmVtZW1iZXJlZCk6CisgICAgICAg
IChKU0M6Ok1hcmtlZEJsb2NrOjphdG9taWNDbGVhclJlbWVtYmVyZWQpOgorICAgICAgICAoSlND
OjpNYXJrZWRCbG9jazo6aXNSZW1lbWJlcmVkKToKKyAgICAgICAgKiBoZWFwL01hcmtlZFNwYWNl
LmNwcDoKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6On5NYXJrZWRTcGFjZSk6CisgICAgICAg
IChKU0M6Ok1hcmtlZFNwYWNlOjpyZXNldEFsbG9jYXRvcnMpOgorICAgICAgICAoSlNDOjpNYXJr
ZWRTcGFjZTo6dmlzaXRXZWFrU2V0cyk6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjpyZWFw
V2Vha1NldHMpOgorICAgICAgICAoSlNDOjpWZXJpZnlNYXJrZWQ6Om9wZXJhdG9yKCkpOgorICAg
ICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6Y2xlYXJNYXJrcyk6CisgICAgICAgICogaGVhcC9NYXJr
ZWRTcGFjZS5oOgorICAgICAgICAoSlNDOjpDbGVhck1hcmtzOjpvcGVyYXRvcigpKToKKyAgICAg
ICAgKEpTQzo6Q2xlYXJSZW1lbWJlcmVkU2V0OjpvcGVyYXRvcigpKToKKyAgICAgICAgKEpTQzo6
TWFya2VkU3BhY2U6OmRpZEFsbG9jYXRlSW5CbG9jayk6CisgICAgICAgIChKU0M6Ok1hcmtlZFNw
YWNlOjpjbGVhclJlbWVtYmVyZWRTZXQpOgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3IuY3Bw
OgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6flNsb3RWaXNpdG9yKToKKyAgICAgICAgKEpT
Qzo6U2xvdFZpc2l0b3I6OmNsZWFyTWFya1N0YWNrKToKKyAgICAgICAgKiBoZWFwL1Nsb3RWaXNp
dG9yLmg6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjptYXJrU3RhY2spOgorICAgICAgICAo
SlNDOjpTbG90VmlzaXRvcjo6c2hhcmVkRGF0YSk6CisgICAgICAgICogaGVhcC9TbG90VmlzaXRv
cklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmludGVybmFsQXBwZW5kKToK
KyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OnVuY29uZGl0aW9uYWxseUFwcGVuZCk6CisgICAg
ICAgIChKU0M6OlNsb3RWaXNpdG9yOjpjb3B5TGF0ZXIpOgorICAgICAgICAoSlNDOjpTbG90Vmlz
aXRvcjo6cmVwb3J0RXh0cmFNZW1vcnlVc2FnZSk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9y
OjpoZWFwKToKKyAgICAgICAgKiBqaXQvUmVwYXRjaC5jcHA6CisgICAgICAgICogcnVudGltZS9K
U0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaDoKKyAgICAgICAgKEpTQzo6SlNHZW5lcmlj
VHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAqIHJ1bnRp
bWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5oOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVSYXJl
RGF0YTo6c2V0RW51bWVyYXRpb25DYWNoZSk6CisgICAgICAgICogcnVudGltZS9KU1N0cmluZy5j
cHA6CisgICAgICAgIChKU0M6OkpTU3RyaW5nOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBy
dW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1
cmVSYXJlRGF0YTo6c2V0UHJldmlvdXNJRCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVJhcmVE
YXRhOjpzZXRPYmplY3RUb1N0cmluZ1ZhbHVlKToKKyAgICAgICAgKiBydW50aW1lL1dlYWtNYXBE
YXRhLmNwcDoKKyAgICAgICAgKEpTQzo6V2Vha01hcERhdGE6OnZpc2l0Q2hpbGRyZW4pOgorCiAy
MDE0LTAxLTA3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgREZH
IGZpeHVwIHBoYXNlIHNob3VsZCBiZSByZXNwb25zaWJsZSBmb3IgaW5zZXJ0aW5nIFZhbHVlVG9J
bnQzMidzIGFzIG5lZWRlZCBhbmQgaXQgc2hvdWxkIHVzZSBQaGFudG9tIHRvIGtlZXAgdGhlIG9y
aWdpbmFsIHZhbHVlcyBhbGl2ZSBpbiBjYXNlIG9mIE9TUiBleGl0CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTYxNDU4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE5NTQsMTUgKzE5NTQsMTUgQEAgdm9pZCBDb2RlQmxvY2s6OnZpc2l0QWdncmVn
YXRlKFNsb3RWaXNpdAogICAgIGlmIChDb2RlQmxvY2sqIG90aGVyQmxvY2sgPSBzcGVjaWFsT1NS
RW50cnlCbG9ja09yTnVsbCgpKQogICAgICAgICBvdGhlckJsb2NrLT52aXNpdEFnZ3JlZ2F0ZSh2
aXNpdG9yKTsKIAotICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlVc2FnZShzaXplb2YoQ29k
ZUJsb2NrKSk7CisgICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVVzYWdlKG93bmVyRXhlY3V0
YWJsZSgpLCBzaXplb2YoQ29kZUJsb2NrKSk7CiAgICAgaWYgKG1faml0Q29kZSkKLSAgICAgICAg
dmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVVzYWdlKG1faml0Q29kZS0+c2l6ZSgpKTsKKyAgICAg
ICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVVzYWdlKG93bmVyRXhlY3V0YWJsZSgpLCBtX2pp
dENvZGUtPnNpemUoKSk7CiAgICAgaWYgKG1faW5zdHJ1Y3Rpb25zLnNpemUoKSkgewogICAgICAg
ICAvLyBEaXZpZGUgYnkgcmVmQ291bnQoKSBiZWNhdXNlIG1faW5zdHJ1Y3Rpb25zIHBvaW50cyB0
byBzb21ldGhpbmcgdGhhdCBpcyBzaGFyZWQKICAgICAgICAgLy8gYnkgbXVsdGlwbGUgQ29kZUJs
b2NrcywgYW5kIHdlIG9ubHkgd2FudCB0byBjb3VudCBpdCB0b3dhcmRzIHRoZSBoZWFwIHNpemUg
b25jZS4KICAgICAgICAgLy8gSGF2aW5nIGVhY2ggQ29kZUJsb2NrIHJlcG9ydCBvbmx5IGl0cyBw
cm9wb3J0aW9uYWwgc2hhcmUgb2YgdGhlIHNpemUgaXMgb25lIHdheQogICAgICAgICAvLyBvZiBh
Y2NvbXBsaXNoaW5nIHRoaXMuCi0gICAgICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlVc2Fn
ZShtX2luc3RydWN0aW9ucy5zaXplKCkgKiBzaXplb2YoSW5zdHJ1Y3Rpb24pIC8gbV9pbnN0cnVj
dGlvbnMucmVmQ291bnQoKSk7CisgICAgICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlVc2Fn
ZShvd25lckV4ZWN1dGFibGUoKSwgbV9pbnN0cnVjdGlvbnMuc2l6ZSgpICogc2l6ZW9mKEluc3Ry
dWN0aW9uKSAvIG1faW5zdHJ1Y3Rpb25zLnJlZkNvdW50KCkpOwogICAgIH0KIAogICAgIHZpc2l0
b3IuYXBwZW5kKCZtX3VubGlua2VkQ29kZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAxNjE0NTgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNjksNiAr
MTI2OSw3IEBAIGlubGluZSB2b2lkIENvZGVCbG9ja1NldDo6bWFyayh2b2lkKiBjYW4KICAgICAg
ICAgcmV0dXJuOwogICAgIAogICAgICgqaXRlciktPm1fbWF5QmVFeGVjdXRpbmcgPSB0cnVlOwor
ICAgIG1fY3VycmVudGx5RXhlY3V0aW5nLmFwcGVuZChzdGF0aWNfY2FzdDxDb2RlQmxvY2sqPihj
YW5kaWRhdGVDb2RlQmxvY2spKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE2MTQ1
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTg1MCw2ICs4NTAsNyBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
blJlYWxsb2NhdGVCCiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMp
OwogCiAgICAgQVNTRVJUKCFvYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgp
KTsKKyAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgQnV0dGVyZmx5KiByZXN1bHQg
PSBvYmplY3QtPmdyb3dPdXRPZkxpbmVTdG9yYWdlKHZtLCAwLCBpbml0aWFsT3V0T2ZMaW5lQ2Fw
YWNpdHkpOwogICAgIG9iamVjdC0+c2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJl
KHZtLCByZXN1bHQpOwogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihyZXN1bHQp
OwpAQCAtODYwLDYgKzg2MSw3IEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxv
Y2F0ZUIKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIoJnZtLCBleGVjKTsKIAorICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAg
ICBCdXR0ZXJmbHkqIHJlc3VsdCA9IG9iamVjdC0+Z3Jvd091dE9mTGluZVN0b3JhZ2Uodm0sIG9i
amVjdC0+c3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIG5ld1NpemUpOwogICAgIG9i
amVjdC0+c2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJlKHZtLCByZXN1bHQpOwog
ICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihyZXN1bHQpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db2RlQmxvY2tTZXQuY3BwCShyZXZpc2lvbiAxNjE0NTgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db2RlQmxvY2tTZXQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00NSw3ICs0NSw4IEBAIENvZGVCbG9ja1NldDo6fkNvZGVCbG9ja1NldCgpCiAK
IHZvaWQgQ29kZUJsb2NrU2V0OjphZGQoUGFzc1JlZlB0cjxDb2RlQmxvY2s+IGNvZGVCbG9jaykK
IHsKLSAgICBib29sIGlzTmV3RW50cnkgPSBtX3NldC5hZGQoY29kZUJsb2NrLmxlYWtSZWYoKSku
aXNOZXdFbnRyeTsKKyAgICBDb2RlQmxvY2sqIGJsb2NrID0gY29kZUJsb2NrLmxlYWtSZWYoKTsK
KyAgICBib29sIGlzTmV3RW50cnkgPSBtX3NldC5hZGQoYmxvY2spLmlzTmV3RW50cnk7CiAgICAg
QVNTRVJUX1VOVVNFRChpc05ld0VudHJ5LCBpc05ld0VudHJ5KTsKIH0KIApAQCAtMTAxLDkgKzEw
MiwxNiBAQCB2b2lkIENvZGVCbG9ja1NldDo6dHJhY2VNYXJrZWQoU2xvdFZpc2l0CiAgICAgICAg
IENvZGVCbG9jayogY29kZUJsb2NrID0gKml0ZXI7CiAgICAgICAgIGlmICghY29kZUJsb2NrLT5t
X21heUJlRXhlY3V0aW5nKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGNvZGVCbG9j
ay0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CisgICAgICAgIGNvZGVCbG9jay0+b3duZXJFeGVj
dXRhYmxlKCktPnZpc2l0Q2hpbGRyZW4oY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgdmlz
aXRvcik7CiAgICAgfQogfQogCit2b2lkIENvZGVCbG9ja1NldDo6cmVtZW1iZXJDdXJyZW50bHlF
eGVjdXRpbmdDb2RlQmxvY2tzKEhlYXAqIGhlYXApCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX2N1cnJlbnRseUV4ZWN1dGluZy5zaXplKCk7ICsraSkKKyAgICAgICAgaGVhcC0+YWRk
VG9SZW1lbWJlcmVkU2V0KG1fY3VycmVudGx5RXhlY3V0aW5nW2ldLT5vd25lckV4ZWN1dGFibGUo
KSk7CisgICAgbV9jdXJyZW50bHlFeGVjdXRpbmcuY2xlYXIoKTsKK30KKwogfSAvLyBuYW1lc3Bh
Y2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVCbG9ja1NldC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVCbG9ja1NldC5o
CShyZXZpc2lvbiAxNjE0NTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db2RlQmxv
Y2tTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTAgKzMwLDEyIEBACiAjaW5jbHVkZSA8d3Rm
L05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsK
IAogY2xhc3MgQ29kZUJsb2NrOworY2xhc3MgSGVhcDsKIGNsYXNzIFNsb3RWaXNpdG9yOwogCiAv
LyBDb2RlQmxvY2tTZXQgdHJhY2tzIGFsbCBDb2RlQmxvY2tzLiBFdmVyeSBDb2RlQmxvY2sgc3Rh
cnRzIG91dCB3aXRoIG9uZQpAQCAtNjUsMTEgKzY3LDE2IEBAIHB1YmxpYzoKICAgICAvLyBtYXlC
ZUV4ZWN1dGluZy4KICAgICB2b2lkIHRyYWNlTWFya2VkKFNsb3RWaXNpdG9yJik7CiAKKyAgICAv
LyBBZGQgYWxsIGN1cnJlbnRseSBleGVjdXRpbmcgQ29kZUJsb2NrcyB0byB0aGUgcmVtZW1iZXJl
ZCBzZXQgdG8gYmUgCisgICAgLy8gcmUtc2Nhbm5lZCBkdXJpbmcgdGhlIG5leHQgY29sbGVjdGlv
bi4KKyAgICB2b2lkIHJlbWVtYmVyQ3VycmVudGx5RXhlY3V0aW5nQ29kZUJsb2NrcyhIZWFwKik7
CisKIHByaXZhdGU6CiAgICAgLy8gVGhpcyBpcyBub3QgYSBzZXQgb2YgUmVmUHRyPENvZGVCbG9j
az4gYmVjYXVzZSB3ZSBuZWVkIHRvIGJlIGFibGUgdG8gZmluZAogICAgIC8vIGFyYml0cmFyeSBi
b2d1cyBwb2ludGVycy4gSSBjb3VsZCBoYXZlIHdyaXR0ZW4gYSB0aGluZ3kgdGhhdCBoYWQgcGVl
ayB0eXBlcwogICAgIC8vIGFuZCBhbGwsIGJ1dCB0aGF0IHNlZW1lZCBsaWtlIG92ZXJraWxsLgog
ICAgIEhhc2hTZXQ8Q29kZUJsb2NrKiA+IG1fc2V0OworICAgIFZlY3RvcjxDb2RlQmxvY2sqPiBt
X2N1cnJlbnRseUV4ZWN1dGluZzsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkQmxvY2tJbmxpbmVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkQmxvY2tJbmxpbmVzLmgJKHJldmlz
aW9uIDE2MTQ1OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZEJsb2NrSW5s
aW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw5IEBAIGlubGluZSB2b2lkIENvcGll
ZEJsb2NrOjpyZXBvcnRMaXZlQnl0ZXMKICNlbmRpZgogICAgIG1fbGl2ZUJ5dGVzICs9IGJ5dGVz
OwogCisgICAgaWYgKGlzUGlubmVkKCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGlmICghc2hv
dWxkRXZhY3VhdGUoKSkgewogICAgICAgICBwaW4oKTsKICAgICAgICAgcmV0dXJuOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlLmNwcAkocmV2aXNpb24gMTYx
NDU4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMTYsNCArMzE2LDE3IEBAIGJvb2wgQ29waWVkU3BhY2U6OmlzUGFnZWRP
dXQoZG91YmxlIGRlYWQKICAgICAgICAgfHwgaXNCbG9ja0xpc3RQYWdlZE91dChkZWFkbGluZSwg
Jm1fb3ZlcnNpemVCbG9ja3MpOwogfQogCit2b2lkIENvcGllZFNwYWNlOjpkaWRTdGFydEZ1bGxD
b2xsZWN0aW9uKCkKK3sKKyAgICBBU1NFUlQoaGVhcCgpLT5vcGVyYXRpb25JblByb2dyZXNzKCkg
PT0gRnVsbENvbGxlY3Rpb24pOworCisgICAgQVNTRVJUKG1fZnJvbVNwYWNlLT5pc0VtcHR5KCkp
OworCisgICAgZm9yIChDb3BpZWRCbG9jayogYmxvY2sgPSBtX3RvU3BhY2UtPmhlYWQoKTsgYmxv
Y2s7IGJsb2NrID0gYmxvY2stPm5leHQoKSkKKyAgICAgICAgYmxvY2stPmRpZFN1cnZpdmVHQygp
OworCisgICAgZm9yIChDb3BpZWRCbG9jayogYmxvY2sgPSBtX292ZXJzaXplQmxvY2tzLmhlYWQo
KTsgYmxvY2s7IGJsb2NrID0gYmxvY2stPm5leHQoKSkKKyAgICAgICAgYmxvY2stPmRpZFN1cnZp
dmVHQygpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0NvcGllZFNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvQ29waWVkU3BhY2UuaAkocmV2aXNpb24gMTYxNDU4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsNiArNjAs
OCBAQCBwdWJsaWM6CiAgICAgCiAgICAgQ29waWVkQWxsb2NhdG9yJiBhbGxvY2F0b3IoKSB7IHJl
dHVybiBtX2FsbG9jYXRvcjsgfQogCisgICAgdm9pZCBkaWRTdGFydEZ1bGxDb2xsZWN0aW9uKCk7
CisKICAgICB2b2lkIHN0YXJ0ZWRDb3B5aW5nKCk7CiAgICAgdm9pZCBkb25lQ29weWluZygpOwog
ICAgIGJvb2wgaXNJbkNvcHlQaGFzZSgpIHsgcmV0dXJuIG1faW5Db3B5aW5nUGhhc2U7IH0KQEAg
LTgwLDYgKzgyLDggQEAgcHVibGljOgogCiAgICAgc3RhdGljIENvcGllZEJsb2NrKiBibG9ja0Zv
cih2b2lkKik7CiAKKyAgICBIZWFwKiBoZWFwKCkgY29uc3QgeyByZXR1cm4gbV9oZWFwOyB9CisK
IHByaXZhdGU6CiAgICAgc3RhdGljIGJvb2wgaXNPdmVyc2l6ZShzaXplX3QpOwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMTYxNDU4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1Myw5ICsy
NTMsMTEgQEAgSGVhcDo6SGVhcChWTSogdm0sIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgICwgbV9y
YW1TaXplKHJhbVNpemUoKSkKICAgICAsIG1fbWluQnl0ZXNQZXJDeWNsZShtaW5IZWFwU2l6ZSht
X2hlYXBUeXBlLCBtX3JhbVNpemUpKQogICAgICwgbV9zaXplQWZ0ZXJMYXN0Q29sbGVjdCgwKQot
ICAgICwgbV9ieXRlc0FsbG9jYXRlZExpbWl0KG1fbWluQnl0ZXNQZXJDeWNsZSkKLSAgICAsIG1f
Ynl0ZXNBbGxvY2F0ZWQoMCkKLSAgICAsIG1fYnl0ZXNBYmFuZG9uZWQoMCkKKyAgICAsIG1fYnl0
ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUoMCkKKyAgICAsIG1fYnl0ZXNBYmFuZG9uZWRUaGlzQ3ljbGUo
MCkKKyAgICAsIG1fbWF4RWRlblNpemUobV9taW5CeXRlc1BlckN5Y2xlKQorICAgICwgbV9tYXhI
ZWFwU2l6ZShtX21pbkJ5dGVzUGVyQ3ljbGUpCisgICAgLCBtX3Nob3VsZERvRnVsbENvbGxlY3Rp
b24oZmFsc2UpCiAgICAgLCBtX3RvdGFsQnl0ZXNWaXNpdGVkKDApCiAgICAgLCBtX3RvdGFsQnl0
ZXNDb3BpZWQoMCkKICAgICAsIG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyhOb09wZXJhdGlvbikKQEAg
LTI2OSw3ICsyNzEsNyBAQCBIZWFwOjpIZWFwKFZNKiB2bSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAg
ICAgLCBtX2NvcHlWaXNpdG9yKG1fc2hhcmVkRGF0YSkKICAgICAsIG1faGFuZGxlU2V0KHZtKQog
ICAgICwgbV9pc1NhZmVUb0NvbGxlY3QoZmFsc2UpCi0gICAgLCBtX3dyaXRlQmFycmllckJ1ZmZl
cigxMjgpCisgICAgLCBtX3dyaXRlQmFycmllckJ1ZmZlcigyNTYpCiAgICAgLCBtX3ZtKHZtKQog
ICAgICwgbV9sYXN0R0NMZW5ndGgoMCkKICAgICAsIG1fbGFzdENvZGVEaXNjYXJkVGltZShXVEY6
Om1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpKQpAQCAtMzMyLDggKzMzNCw4IEBAIHZvaWQg
SGVhcDo6cmVwb3J0QWJhbmRvbmVkT2JqZWN0R3JhcGgoKQogdm9pZCBIZWFwOjpkaWRBYmFuZG9u
KHNpemVfdCBieXRlcykKIHsKICAgICBpZiAobV9hY3Rpdml0eUNhbGxiYWNrKQotICAgICAgICBt
X2FjdGl2aXR5Q2FsbGJhY2stPmRpZEFsbG9jYXRlKG1fYnl0ZXNBbGxvY2F0ZWQgKyBtX2J5dGVz
QWJhbmRvbmVkKTsKLSAgICBtX2J5dGVzQWJhbmRvbmVkICs9IGJ5dGVzOworICAgICAgICBtX2Fj
dGl2aXR5Q2FsbGJhY2stPmRpZEFsbG9jYXRlKG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUgKyBt
X2J5dGVzQWJhbmRvbmVkVGhpc0N5Y2xlKTsKKyAgICBtX2J5dGVzQWJhbmRvbmVkVGhpc0N5Y2xl
ICs9IGJ5dGVzOwogfQogCiB2b2lkIEhlYXA6OnByb3RlY3QoSlNWYWx1ZSBrKQpAQCAtNDg3LDYg
KzQ4OSw5IEBAIHZvaWQgSGVhcDo6bWFya1Jvb3RzKCkKICAgICB2aXNpdG9yLnNldHVwKCk7CiAg
ICAgSGVhcFJvb3RWaXNpdG9yIGhlYXBSb290VmlzaXRvcih2aXNpdG9yKTsKIAorICAgIFZlY3Rv
cjxjb25zdCBKU0NlbGwqPiByZW1lbWJlcmVkU2V0KG1fc2xvdFZpc2l0b3IubWFya1N0YWNrKCku
c2l6ZSgpKTsKKyAgICBtX3Nsb3RWaXNpdG9yLm1hcmtTdGFjaygpLmZpbGxWZWN0b3IocmVtZW1i
ZXJlZFNldCk7CisKICAgICB7CiAgICAgICAgIFBhcmFsbGVsTW9kZUVuYWJsZXIgZW5hYmxlcih2
aXNpdG9yKTsKIApAQCAtNTkwLDYgKzU5NSwxNCBAQCB2b2lkIEhlYXA6Om1hcmtSb290cygpCiAg
ICAgICAgIH0KICAgICB9CiAKKyAgICB7CisgICAgICAgIEdDUEhBU0UoQ2xlYXJSZW1lbWJlcmVk
U2V0KTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlbWVtYmVyZWRTZXQuc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGNvbnN0IEpTQ2VsbCogY2VsbCA9IHJlbWVtYmVyZWRT
ZXRbaV07CisgICAgICAgICAgICBNYXJrZWRCbG9jazo6YmxvY2tGb3IoY2VsbCktPmNsZWFyUmVt
ZW1iZXJlZChjZWxsKTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIEdDQ09VTlRFUihWaXNpdGVk
VmFsdWVDb3VudCwgdmlzaXRvci52aXNpdENvdW50KCkpOwogCiAgICAgbV9zaGFyZWREYXRhLmRp
ZEZpbmlzaE1hcmtpbmcoKTsKQEAgLTYwMSw4ICs2MTQsMTQgQEAgdm9pZCBIZWFwOjptYXJrUm9v
dHMoKQogICAgIE1BUktfTE9HX01FU1NBR0UyKCJcbk51bWJlciBvZiBsaXZlIE9iamVjdHMgYWZ0
ZXIgZnVsbCBHQyAlbHUsIHRvb2sgJS42ZiBzZWNzXG4iLCB2aXNpdENvdW50LCBXVEY6Om1vbm90
b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpIC0gZ2NTdGFydFRpbWUpOwogI2VuZGlmCiAKLSAgICBt
X3RvdGFsQnl0ZXNWaXNpdGVkID0gdmlzaXRvci5ieXRlc1Zpc2l0ZWQoKTsKLSAgICBtX3RvdGFs
Qnl0ZXNDb3BpZWQgPSB2aXNpdG9yLmJ5dGVzQ29waWVkKCk7CisgICAgaWYgKG1fb3BlcmF0aW9u
SW5Qcm9ncmVzcyA9PSBFZGVuQ29sbGVjdGlvbikgeworICAgICAgICBtX3RvdGFsQnl0ZXNWaXNp
dGVkICs9IHZpc2l0b3IuYnl0ZXNWaXNpdGVkKCk7CisgICAgICAgIG1fdG90YWxCeXRlc0NvcGll
ZCArPSB2aXNpdG9yLmJ5dGVzQ29waWVkKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJU
KG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBGdWxsQ29sbGVjdGlvbik7CisgICAgICAgIG1fdG90
YWxCeXRlc1Zpc2l0ZWQgPSB2aXNpdG9yLmJ5dGVzVmlzaXRlZCgpOworICAgICAgICBtX3RvdGFs
Qnl0ZXNDb3BpZWQgPSB2aXNpdG9yLmJ5dGVzQ29waWVkKCk7CisgICAgfQogI2lmIEVOQUJMRShQ
QVJBTExFTF9HQykKICAgICBtX3RvdGFsQnl0ZXNWaXNpdGVkICs9IG1fc2hhcmVkRGF0YS5jaGls
ZEJ5dGVzVmlzaXRlZCgpOwogICAgIG1fdG90YWxCeXRlc0NvcGllZCArPSBtX3NoYXJlZERhdGEu
Y2hpbGRCeXRlc0NvcGllZCgpOwpAQCAtNjE1LDggKzYzNCwxMiBAQCB2b2lkIEhlYXA6Om1hcmtS
b290cygpCiAgICAgbV9zaGFyZWREYXRhLnJlc2V0KCk7CiB9CiAKK3RlbXBsYXRlIDxIZWFwT3Bl
cmF0aW9uIGNvbGxlY3Rpb25UeXBlPgogdm9pZCBIZWFwOjpjb3B5QmFja2luZ1N0b3JlcygpCiB7
CisgICAgaWYgKGNvbGxlY3Rpb25UeXBlID09IEVkZW5Db2xsZWN0aW9uKQorICAgICAgICByZXR1
cm47CisKICAgICBtX3N0b3JhZ2VTcGFjZS5zdGFydGVkQ29weWluZygpOwogICAgIGlmIChtX3N0
b3JhZ2VTcGFjZS5zaG91bGREb0NvcHlQaGFzZSgpKSB7CiAgICAgICAgIG1fc2hhcmVkRGF0YS5k
aWRTdGFydENvcHlpbmcoKTsKQEAgLTYyNyw3ICs2NTAsNyBAQCB2b2lkIEhlYXA6OmNvcHlCYWNr
aW5nU3RvcmVzKCkKICAgICAgICAgLy8gYmVmb3JlIHNpZ25hbGluZyB0aGF0IHRoZSBwaGFzZSBp
cyBjb21wbGV0ZS4KICAgICAgICAgbV9zdG9yYWdlU3BhY2UuZG9uZUNvcHlpbmcoKTsKICAgICAg
ICAgbV9zaGFyZWREYXRhLmRpZEZpbmlzaENvcHlpbmcoKTsKLSAgICB9IGVsc2UgCisgICAgfSBl
bHNlCiAgICAgICAgIG1fc3RvcmFnZVNwYWNlLmRvbmVDb3B5aW5nKCk7CiB9CiAKQEAgLTcyMywx
MSArNzQ2LDIzIEBAIHZvaWQgSGVhcDo6ZGVsZXRlVW5tYXJrZWRDb21waWxlZENvZGUoKQogICAg
IG1faml0U3R1YlJvdXRpbmVzLmRlbGV0ZVVubWFya2VkSmV0dGlzb25lZFN0dWJSb3V0aW5lcygp
OwogfQogCit2b2lkIEhlYXA6OmFkZFRvUmVtZW1iZXJlZFNldChjb25zdCBKU0NlbGwqIGNlbGwp
Cit7CisgICAgQVNTRVJUKGNlbGwpOworICAgIEFTU0VSVCghT3B0aW9uczo6ZW5hYmxlQ29uY3Vy
cmVudEpJVCgpIHx8ICFpc0NvbXBpbGF0aW9uVGhyZWFkKCkpOworICAgIEFTU0VSVChpc01hcmtl
ZChjZWxsKSk7CisgICAgaWYgKGlzSW5SZW1lbWJlcmVkU2V0KGNlbGwpKQorICAgICAgICByZXR1
cm47CisgICAgTWFya2VkQmxvY2s6OmJsb2NrRm9yKGNlbGwpLT5zZXRSZW1lbWJlcmVkKGNlbGwp
OworICAgIG1fc2xvdFZpc2l0b3IudW5jb25kaXRpb25hbGx5QXBwZW5kKGNvbnN0X2Nhc3Q8SlND
ZWxsKj4oY2VsbCkpOworfQorCiB2b2lkIEhlYXA6OmNvbGxlY3RBbGxHYXJiYWdlKCkKIHsKICAg
ICBpZiAoIW1faXNTYWZlVG9Db2xsZWN0KQogICAgICAgICByZXR1cm47CiAKKyAgICBtX3Nob3Vs
ZERvRnVsbENvbGxlY3Rpb24gPSB0cnVlOwogICAgIGNvbGxlY3QoKTsKIAogICAgIFNhbXBsaW5n
UmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJHYXJiYWdlIENvbGxlY3Rpb246IFN3ZWVwaW5nIik7CkBA
IC03NjQsOSArNzk5LDI4IEBAIHZvaWQgSGVhcDo6Y29sbGVjdCgpCiAgICAgICAgIFJlY3Vyc2l2
ZUFsbG9jYXRpb25TY29wZSBzY29wZSgqdGhpcyk7CiAgICAgICAgIG1fdm0tPnByZXBhcmVUb0Rp
c2NhcmRDb2RlKCk7CiAgICAgfQotICAgIAotICAgIG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9IENv
bGxlY3Rpb247Ci0gICAgbV9leHRyYU1lbW9yeVVzYWdlID0gMDsKKworICAgIGJvb2wgaXNGdWxs
Q29sbGVjdGlvbiA9IG1fc2hvdWxkRG9GdWxsQ29sbGVjdGlvbjsKKyAgICBpZiAoaXNGdWxsQ29s
bGVjdGlvbikgeworICAgICAgICBtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPSBGdWxsQ29sbGVjdGlv
bjsKKyAgICAgICAgbV9zbG90VmlzaXRvci5jbGVhck1hcmtTdGFjaygpOworICAgICAgICBtX3No
b3VsZERvRnVsbENvbGxlY3Rpb24gPSBmYWxzZTsKKyAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dD
KCkpCisgICAgICAgICAgICBkYXRhTG9nKCJGdWxsQ29sbGVjdGlvbiwgIik7CisgICAgfSBlbHNl
IHsKKyNpZiBFTkFCTEUoR0dDKQorICAgICAgICBtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPSBFZGVu
Q29sbGVjdGlvbjsKKyAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCisgICAgICAgICAgICBk
YXRhTG9nKCJFZGVuQ29sbGVjdGlvbiwgIik7CisjZWxzZQorICAgICAgICBtX29wZXJhdGlvbklu
UHJvZ3Jlc3MgPSBGdWxsQ29sbGVjdGlvbjsKKyAgICAgICAgbV9zbG90VmlzaXRvci5jbGVhck1h
cmtTdGFjaygpOworICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKKyAgICAgICAgICAgIGRh
dGFMb2coIkZ1bGxDb2xsZWN0aW9uLCAiKTsKKyNlbmRpZgorICAgIH0KKyAgICBpZiAobV9vcGVy
YXRpb25JblByb2dyZXNzID09IEZ1bGxDb2xsZWN0aW9uKQorICAgICAgICBtX2V4dHJhTWVtb3J5
VXNhZ2UgPSAwOwogCiAgICAgaWYgKG1fYWN0aXZpdHlDYWxsYmFjaykKICAgICAgICAgbV9hY3Rp
dml0eUNhbGxiYWNrLT53aWxsQ29sbGVjdCgpOwpAQCAtNzgwLDYgKzgzNCwxNiBAQCB2b2lkIEhl
YXA6OmNvbGxlY3QoKQogICAgIHsKICAgICAgICAgR0NQSEFTRShTdG9wQWxsb2NhdGlvbik7CiAg
ICAgICAgIG1fb2JqZWN0U3BhY2Uuc3RvcEFsbG9jYXRpbmcoKTsKKyAgICAgICAgaWYgKG1fb3Bl
cmF0aW9uSW5Qcm9ncmVzcyA9PSBGdWxsQ29sbGVjdGlvbikKKyAgICAgICAgICAgIG1fc3RvcmFn
ZVNwYWNlLmRpZFN0YXJ0RnVsbENvbGxlY3Rpb24oKTsKKyAgICB9CisKKyAgICB7CisgICAgICAg
IEdDUEhBU0UoRmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIpOworICAgICAgICBpZiAobV9vcGVyYXRp
b25JblByb2dyZXNzID09IEVkZW5Db2xsZWN0aW9uKQorICAgICAgICAgICAgbV93cml0ZUJhcnJp
ZXJCdWZmZXIuZmx1c2goKnRoaXMpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX3dyaXRl
QmFycmllckJ1ZmZlci5yZXNldCgpOwogICAgIH0KIAogICAgIG1hcmtSb290cygpOwpAQCAtNzk2
LDEzICs4NjAsMTYgQEAgdm9pZCBIZWFwOjpjb2xsZWN0KCkKICAgICAgICAgbV9hcnJheUJ1ZmZl
cnMuc3dlZXAoKTsKICAgICB9CiAKLSAgICB7CisgICAgaWYgKG1fb3BlcmF0aW9uSW5Qcm9ncmVz
cyA9PSBGdWxsQ29sbGVjdGlvbikgewogICAgICAgICBtX2Jsb2NrU25hcHNob3QucmVzaXplKG1f
b2JqZWN0U3BhY2UuYmxvY2tzKCkuc2V0KCkuc2l6ZSgpKTsKICAgICAgICAgTWFya2VkQmxvY2tT
bmFwc2hvdEZ1bmN0b3IgZnVuY3RvcihtX2Jsb2NrU25hcHNob3QpOwogICAgICAgICBtX29iamVj
dFNwYWNlLmZvckVhY2hCbG9jayhmdW5jdG9yKTsKICAgICB9CiAKLSAgICBjb3B5QmFja2luZ1N0
b3JlcygpOworICAgIGlmIChtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPT0gRnVsbENvbGxlY3Rpb24p
CisgICAgICAgIGNvcHlCYWNraW5nU3RvcmVzPEZ1bGxDb2xsZWN0aW9uPigpOworICAgIGVsc2UK
KyAgICAgICAgY29weUJhY2tpbmdTdG9yZXM8RWRlbkNvbGxlY3Rpb24+KCk7CiAKICAgICB7CiAg
ICAgICAgIEdDUEhBU0UoRmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycyk7CkBAIC04MTks
OCArODg2LDE1IEBAIHZvaWQgSGVhcDo6Y29sbGVjdCgpCiAgICAgICAgIG1fdm0tPmNsZWFyU291
cmNlUHJvdmlkZXJDYWNoZXMoKTsKICAgICB9CiAKLSAgICBtX3N3ZWVwZXItPnN0YXJ0U3dlZXBp
bmcobV9ibG9ja1NuYXBzaG90KTsKLSAgICBtX2J5dGVzQWJhbmRvbmVkID0gMDsKKyAgICBpZiAo
bV9vcGVyYXRpb25JblByb2dyZXNzID09IEZ1bGxDb2xsZWN0aW9uKQorICAgICAgICBtX3N3ZWVw
ZXItPnN0YXJ0U3dlZXBpbmcobV9ibG9ja1NuYXBzaG90KTsKKworICAgIHsKKyAgICAgICAgR0NQ
SEFTRShBZGRDdXJyZW50bHlFeGVjdXRpbmdDb2RlQmxvY2tzVG9SZW1lbWJlcmVkU2V0KTsKKyAg
ICAgICAgbV9jb2RlQmxvY2tzLnJlbWVtYmVyQ3VycmVudGx5RXhlY3V0aW5nQ29kZUJsb2Nrcyh0
aGlzKTsKKyAgICB9CisKKyAgICBtX2J5dGVzQWJhbmRvbmVkVGhpc0N5Y2xlID0gMDsKIAogICAg
IHsKICAgICAgICAgR0NQSEFTRShSZXNldEFsbG9jYXRvcnMpOwpAQCAtODMxLDIxICs5MDUsMzIg
QEAgdm9pZCBIZWFwOjpjb2xsZWN0KCkKICAgICBpZiAoT3B0aW9uczo6Z2NNYXhIZWFwU2l6ZSgp
ICYmIGN1cnJlbnRIZWFwU2l6ZSA+IE9wdGlvbnM6OmdjTWF4SGVhcFNpemUoKSkKICAgICAgICAg
SGVhcFN0YXRpc3RpY3M6OmV4aXRXaXRoRmFpbHVyZSgpOwogCi0gICAgbV9zaXplQWZ0ZXJMYXN0
Q29sbGVjdCA9IGN1cnJlbnRIZWFwU2l6ZTsKKyAgICBpZiAobV9vcGVyYXRpb25JblByb2dyZXNz
ID09IEZ1bGxDb2xsZWN0aW9uKSB7CisgICAgICAgIC8vIFRvIGF2b2lkIHBhdGhvbG9naWNhbCBH
QyBjaHVybiBpbiB2ZXJ5IHNtYWxsIGFuZCB2ZXJ5IGxhcmdlIGhlYXBzLCB3ZSBzZXQKKyAgICAg
ICAgLy8gdGhlIG5ldyBhbGxvY2F0aW9uIGxpbWl0IGJhc2VkIG9uIHRoZSBjdXJyZW50IHNpemUg
b2YgdGhlIGhlYXAsIHdpdGggYQorICAgICAgICAvLyBmaXhlZCBtaW5pbXVtLgorICAgICAgICBt
X21heEhlYXBTaXplID0gbWF4KG1pbkhlYXBTaXplKG1faGVhcFR5cGUsIG1fcmFtU2l6ZSksIHBy
b3BvcnRpb25hbEhlYXBTaXplKGN1cnJlbnRIZWFwU2l6ZSwgbV9yYW1TaXplKSk7CisgICAgICAg
IG1fbWF4RWRlblNpemUgPSBtX21heEhlYXBTaXplIC0gY3VycmVudEhlYXBTaXplOworICAgIH0g
ZWxzZSB7CisgICAgICAgIEFTU0VSVChjdXJyZW50SGVhcFNpemUgPj0gbV9zaXplQWZ0ZXJMYXN0
Q29sbGVjdCk7CisgICAgICAgIG1fbWF4RWRlblNpemUgPSBtX21heEhlYXBTaXplIC0gY3VycmVu
dEhlYXBTaXplOworICAgICAgICBkb3VibGUgZWRlblRvT2xkR2VuZXJhdGlvblJhdGlvID0gKGRv
dWJsZSltX21heEVkZW5TaXplIC8gKGRvdWJsZSltX21heEhlYXBTaXplOworICAgICAgICBkb3Vi
bGUgbWluRWRlblRvT2xkR2VuZXJhdGlvblJhdGlvID0gMS4wIC8gMy4wOworICAgICAgICBpZiAo
ZWRlblRvT2xkR2VuZXJhdGlvblJhdGlvIDwgbWluRWRlblRvT2xkR2VuZXJhdGlvblJhdGlvKQor
ICAgICAgICAgICAgbV9zaG91bGREb0Z1bGxDb2xsZWN0aW9uID0gdHJ1ZTsKKyAgICAgICAgbV9t
YXhIZWFwU2l6ZSArPSBjdXJyZW50SGVhcFNpemUgLSBtX3NpemVBZnRlckxhc3RDb2xsZWN0Owor
ICAgICAgICBtX21heEVkZW5TaXplID0gbV9tYXhIZWFwU2l6ZSAtIGN1cnJlbnRIZWFwU2l6ZTsK
KyAgICB9CiAKLSAgICAvLyBUbyBhdm9pZCBwYXRob2xvZ2ljYWwgR0MgY2h1cm4gaW4gdmVyeSBz
bWFsbCBhbmQgdmVyeSBsYXJnZSBoZWFwcywgd2Ugc2V0Ci0gICAgLy8gdGhlIG5ldyBhbGxvY2F0
aW9uIGxpbWl0IGJhc2VkIG9uIHRoZSBjdXJyZW50IHNpemUgb2YgdGhlIGhlYXAsIHdpdGggYQot
ICAgIC8vIGZpeGVkIG1pbmltdW0uCi0gICAgc2l6ZV90IG1heEhlYXBTaXplID0gbWF4KG1pbkhl
YXBTaXplKG1faGVhcFR5cGUsIG1fcmFtU2l6ZSksIHByb3BvcnRpb25hbEhlYXBTaXplKGN1cnJl
bnRIZWFwU2l6ZSwgbV9yYW1TaXplKSk7Ci0gICAgbV9ieXRlc0FsbG9jYXRlZExpbWl0ID0gbWF4
SGVhcFNpemUgLSBjdXJyZW50SGVhcFNpemU7CisgICAgbV9zaXplQWZ0ZXJMYXN0Q29sbGVjdCA9
IGN1cnJlbnRIZWFwU2l6ZTsKIAotICAgIG1fYnl0ZXNBbGxvY2F0ZWQgPSAwOworICAgIG1fYnl0
ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUgPSAwOwogICAgIGRvdWJsZSBsYXN0R0NFbmRUaW1lID0gV1RG
Ojptb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKTsKICAgICBtX2xhc3RHQ0xlbmd0aCA9IGxh
c3RHQ0VuZFRpbWUgLSBsYXN0R0NTdGFydFRpbWU7CiAKICAgICBpZiAoT3B0aW9uczo6cmVjb3Jk
R0NQYXVzZVRpbWVzKCkpCiAgICAgICAgIEhlYXBTdGF0aXN0aWNzOjpyZWNvcmRHQ1BhdXNlVGlt
ZShsYXN0R0NTdGFydFRpbWUsIGxhc3RHQ0VuZFRpbWUpOwotICAgIFJFTEVBU0VfQVNTRVJUKG1f
b3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBDb2xsZWN0aW9uKTsKKyAgICBSRUxFQVNFX0FTU0VSVCht
X29wZXJhdGlvbkluUHJvZ3Jlc3MgPT0gRWRlbkNvbGxlY3Rpb24gfHwgbV9vcGVyYXRpb25JblBy
b2dyZXNzID09IEZ1bGxDb2xsZWN0aW9uKTsKIAogICAgIG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9
IE5vT3BlcmF0aW9uOwogICAgIEpBVkFTQ1JJUFRDT1JFX0dDX0VORCgpOwpAQCAtODYzLDEwICs5
NDgsNiBAQCB2b2lkIEhlYXA6OmNvbGxlY3QoKQogICAgICAgICBkb3VibGUgYWZ0ZXIgPSBjdXJy
ZW50VGltZU1TKCk7CiAgICAgICAgIGRhdGFMb2coYWZ0ZXIgLSBiZWZvcmUsICIgbXMsICIsIGN1
cnJlbnRIZWFwU2l6ZSAvIDEwMjQsICIga2JdXG4iKTsKICAgICB9Ci0KLSNpZiBFTkFCTEUoQUxM
T0NBVElPTl9MT0dHSU5HKQotICAgIGRhdGFMb2dGKCJKU0MgR0MgZmluaXNoaW5nIGNvbGxlY3Rp
b24uXG4iKTsKLSNlbmRpZgogfQogCiBib29sIEhlYXA6OmNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVm
ZXIoKQpAQCAtOTE2LDggKzk5Nyw4IEBAIHZvaWQgSGVhcDo6c2V0R2FyYmFnZUNvbGxlY3Rpb25U
aW1lckVuYWIKIHZvaWQgSGVhcDo6ZGlkQWxsb2NhdGUoc2l6ZV90IGJ5dGVzKQogewogICAgIGlm
IChtX2FjdGl2aXR5Q2FsbGJhY2spCi0gICAgICAgIG1fYWN0aXZpdHlDYWxsYmFjay0+ZGlkQWxs
b2NhdGUobV9ieXRlc0FsbG9jYXRlZCArIG1fYnl0ZXNBYmFuZG9uZWQpOwotICAgIG1fYnl0ZXNB
bGxvY2F0ZWQgKz0gYnl0ZXM7CisgICAgICAgIG1fYWN0aXZpdHlDYWxsYmFjay0+ZGlkQWxsb2Nh
dGUobV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZSArIG1fYnl0ZXNBYmFuZG9uZWRUaGlzQ3ljbGUp
OworICAgIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUgKz0gYnl0ZXM7CiB9CiAKIGJvb2wgSGVh
cDo6aXNWYWxpZEFsbG9jYXRpb24oc2l6ZV90KQpAQCAtOTk0LDYgKzEwNzUsMTUgQEAgdm9pZCBI
ZWFwOjpkZWNyZW1lbnREZWZlcnJhbERlcHRoQW5kR0NJZgogICAgIGNvbGxlY3RJZk5lY2Vzc2Fy
eU9yRGVmZXIoKTsKIH0KIAordm9pZCBIZWFwOjp3cml0ZUJhcnJpZXIoY29uc3QgSlNDZWxsKiBm
cm9tKQoreworICAgIEFTU0VSVF9HQ19PQkpFQ1RfTE9PS1NfVkFMSUQoY29uc3RfY2FzdDxKU0Nl
bGwqPihmcm9tKSk7CisgICAgaWYgKCFmcm9tIHx8ICFpc01hcmtlZChmcm9tKSkKKyAgICAgICAg
cmV0dXJuOworICAgIEhlYXAqIGhlYXAgPSBIZWFwOjpoZWFwKGZyb20pOworICAgIGhlYXAtPmFk
ZFRvUmVtZW1iZXJlZFNldChmcm9tKTsKK30KKwogdm9pZCBIZWFwOjpmbHVzaFdyaXRlQmFycmll
ckJ1ZmZlcihKU0NlbGwqIGNlbGwpCiB7CiAjaWYgRU5BQkxFKEdHQykKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDE2MTQ1OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtOTQsMTEgKzk0LDE3IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgYm9vbCB0ZXN0QW5kU2V0TWFya2VkKGNvbnN0IHZv
aWQqKTsKICAgICAgICAgc3RhdGljIHZvaWQgc2V0TWFya2VkKGNvbnN0IHZvaWQqKTsKIAorICAg
ICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFkZFRvUmVtZW1iZXJlZFNldChjb25zdCBKU0Nl
bGwqKTsKKyAgICAgICAgYm9vbCBpc0luUmVtZW1iZXJlZFNldChjb25zdCBKU0NlbGwqIGNlbGwp
IGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChjZWxsKTsKKyAgICAgICAgICAg
IEFTU0VSVCghT3B0aW9uczo6ZW5hYmxlQ29uY3VycmVudEpJVCgpIHx8ICFpc0NvbXBpbGF0aW9u
VGhyZWFkKCkpOworICAgICAgICAgICAgcmV0dXJuIE1hcmtlZEJsb2NrOjpibG9ja0ZvcihjZWxs
KS0+aXNSZW1lbWJlcmVkKGNlbGwpOworICAgICAgICB9CiAgICAgICAgIHN0YXRpYyBib29sIGlz
V3JpdGVCYXJyaWVyRW5hYmxlZCgpOwotICAgICAgICBzdGF0aWMgdm9pZCB3cml0ZUJhcnJpZXIo
Y29uc3QgSlNDZWxsKik7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHdy
aXRlQmFycmllcihjb25zdCBKU0NlbGwqKTsKICAgICAgICAgc3RhdGljIHZvaWQgd3JpdGVCYXJy
aWVyKGNvbnN0IEpTQ2VsbCosIEpTVmFsdWUpOwogICAgICAgICBzdGF0aWMgdm9pZCB3cml0ZUJh
cnJpZXIoY29uc3QgSlNDZWxsKiwgSlNDZWxsKik7Ci0gICAgICAgIHN0YXRpYyB1aW50OF90KiBh
ZGRyZXNzT2ZDYXJkRm9yKEpTQ2VsbCopOwogCiAgICAgICAgIFdyaXRlQmFycmllckJ1ZmZlciYg
d3JpdGVCYXJyaWVyQnVmZmVyKCkgeyByZXR1cm4gbV93cml0ZUJhcnJpZXJCdWZmZXI7IH0KICAg
ICAgICAgdm9pZCBmbHVzaFdyaXRlQmFycmllckJ1ZmZlcihKU0NlbGwqKTsKQEAgLTEyMCw2ICsx
MjYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICAvLyB0cnVlIGlmIGNvbGxlY3Rpb24g
aXMgaW4gcHJvZ3Jlc3MKICAgICAgICAgaW5saW5lIGJvb2wgaXNDb2xsZWN0aW5nKCk7CisgICAg
ICAgIGlubGluZSBIZWFwT3BlcmF0aW9uIG9wZXJhdGlvbkluUHJvZ3Jlc3MoKSB7IHJldHVybiBt
X29wZXJhdGlvbkluUHJvZ3Jlc3M7IH0KICAgICAgICAgLy8gdHJ1ZSBpZiBhbiBhbGxvY2F0aW9u
IG9yIGNvbGxlY3Rpb24gaXMgaW4gcHJvZ3Jlc3MKICAgICAgICAgaW5saW5lIGJvb2wgaXNCdXN5
KCk7CiAgICAgICAgIApAQCAtMjM2LDYgKzI0Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICB2b2lkIG1hcmtSb290cygpOwogICAgICAgICB2b2lkIG1hcmtQcm90ZWN0ZWRPYmplY3RzKEhl
YXBSb290VmlzaXRvciYpOwogICAgICAgICB2b2lkIG1hcmtUZW1wU29ydFZlY3RvcnMoSGVhcFJv
b3RWaXNpdG9yJik7CisgICAgICAgIHRlbXBsYXRlIDxIZWFwT3BlcmF0aW9uIGNvbGxlY3Rpb25U
eXBlPgogICAgICAgICB2b2lkIGNvcHlCYWNraW5nU3RvcmVzKCk7CiAgICAgICAgIHZvaWQgaGFy
dmVzdFdlYWtSZWZlcmVuY2VzKCk7CiAgICAgICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFs
RmluYWxpemVycygpOwpAQCAtMjU3LDEwICsyNjUsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIGNvbnN0IHNpemVfdCBtX21pbkJ5dGVzUGVyQ3ljbGU7CiAgICAgICAgIHNpemVfdCBtX3Np
emVBZnRlckxhc3RDb2xsZWN0OwogCi0gICAgICAgIHNpemVfdCBtX2J5dGVzQWxsb2NhdGVkTGlt
aXQ7Ci0gICAgICAgIHNpemVfdCBtX2J5dGVzQWxsb2NhdGVkOwotICAgICAgICBzaXplX3QgbV9i
eXRlc0FiYW5kb25lZDsKLQorICAgICAgICBzaXplX3QgbV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNs
ZTsKKyAgICAgICAgc2l6ZV90IG1fYnl0ZXNBYmFuZG9uZWRUaGlzQ3ljbGU7CisgICAgICAgIHNp
emVfdCBtX21heEVkZW5TaXplOworICAgICAgICBzaXplX3QgbV9tYXhIZWFwU2l6ZTsKKyAgICAg
ICAgYm9vbCBtX3Nob3VsZERvRnVsbENvbGxlY3Rpb247CiAgICAgICAgIHNpemVfdCBtX3RvdGFs
Qnl0ZXNWaXNpdGVkOwogICAgICAgICBzaXplX3QgbV90b3RhbEJ5dGVzQ29waWVkOwogICAgICAg
ICAKQEAgLTI3MSw2ICsyODAsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgR0NJbmNvbWlu
Z1JlZkNvdW50ZWRTZXQ8QXJyYXlCdWZmZXI+IG1fYXJyYXlCdWZmZXJzOwogICAgICAgICBzaXpl
X3QgbV9leHRyYU1lbW9yeVVzYWdlOwogCisgICAgICAgIEhhc2hTZXQ8Y29uc3QgSlNDZWxsKj4g
bV9jb3B5aW5nUmVtZW1iZXJlZFNldDsKKwogICAgICAgICBQcm90ZWN0Q291bnRTZXQgbV9wcm90
ZWN0ZWRWYWx1ZXM7CiAgICAgICAgIFZlY3RvcjxWZWN0b3I8VmFsdWVTdHJpbmdQYWlyLCAwLCBV
bnNhZmVWZWN0b3JPdmVyZmxvdz4qID4gbV90ZW1wU29ydGluZ1ZlY3RvcnM7CiAgICAgICAgIE93
blB0cjxIYXNoU2V0PE1hcmtlZEFyZ3VtZW50QnVmZmVyKj4+IG1fbWFya0xpc3RTZXQ7CkBAIC0z
MjIsOCArMzMzLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGlmIChpc0RlZmVycmVkKCkp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlmIChPcHRpb25zOjpnY01heEhl
YXBTaXplKCkpCi0gICAgICAgICAgICByZXR1cm4gbV9ieXRlc0FsbG9jYXRlZCA+IE9wdGlvbnM6
OmdjTWF4SGVhcFNpemUoKSAmJiBtX2lzU2FmZVRvQ29sbGVjdCAmJiBtX29wZXJhdGlvbkluUHJv
Z3Jlc3MgPT0gTm9PcGVyYXRpb247Ci0gICAgICAgIHJldHVybiBtX2J5dGVzQWxsb2NhdGVkID4g
bV9ieXRlc0FsbG9jYXRlZExpbWl0ICYmIG1faXNTYWZlVG9Db2xsZWN0ICYmIG1fb3BlcmF0aW9u
SW5Qcm9ncmVzcyA9PSBOb09wZXJhdGlvbjsKKyAgICAgICAgICAgIHJldHVybiBtX2J5dGVzQWxs
b2NhdGVkVGhpc0N5Y2xlID4gT3B0aW9uczo6Z2NNYXhIZWFwU2l6ZSgpICYmIG1faXNTYWZlVG9D
b2xsZWN0ICYmIG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBOb09wZXJhdGlvbjsKKyAgICAgICAg
cmV0dXJuIG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGUgPiBtX21heEVkZW5TaXplICYmIG1faXNT
YWZlVG9Db2xsZWN0ICYmIG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBOb09wZXJhdGlvbjsKICAg
ICB9CiAKICAgICBib29sIEhlYXA6OmlzQnVzeSgpCkBAIC0zMzMsNyArMzQ0LDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAKICAgICBib29sIEhlYXA6OmlzQ29sbGVjdGluZygpCiAgICAgewotICAgICAg
ICByZXR1cm4gbV9vcGVyYXRpb25JblByb2dyZXNzID09IENvbGxlY3Rpb247CisgICAgICAgIHJl
dHVybiBtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPT0gRnVsbENvbGxlY3Rpb24gfHwgbV9vcGVyYXRp
b25JblByb2dyZXNzID09IEVkZW5Db2xsZWN0aW9uOwogICAgIH0KIAogICAgIGlubGluZSBIZWFw
KiBIZWFwOjpoZWFwKGNvbnN0IEpTQ2VsbCogY2VsbCkKQEAgLTM3MCwyNiArMzgxLDMzIEBAIG5h
bWVzcGFjZSBKU0MgewogCiAgICAgaW5saW5lIGJvb2wgSGVhcDo6aXNXcml0ZUJhcnJpZXJFbmFi
bGVkKCkKICAgICB7Ci0jaWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQorI2lmIEVO
QUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElORykgfHwgRU5BQkxFKEdHQykKICAgICAgICAgcmV0
dXJuIHRydWU7CiAjZWxzZQogICAgICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKICAgICB9CiAK
LSAgICBpbmxpbmUgdm9pZCBIZWFwOjp3cml0ZUJhcnJpZXIoY29uc3QgSlNDZWxsKikKLSAgICB7
Ci0gICAgICAgIFdyaXRlQmFycmllckNvdW50ZXJzOjpjb3VudFdyaXRlQmFycmllcigpOwotICAg
IH0KLQotICAgIGlubGluZSB2b2lkIEhlYXA6OndyaXRlQmFycmllcihjb25zdCBKU0NlbGwqLCBK
U0NlbGwqKQorICAgIGlubGluZSB2b2lkIEhlYXA6OndyaXRlQmFycmllcihjb25zdCBKU0NlbGwq
IGZyb20sIEpTQ2VsbCogdG8pCiAgICAgeworI2lmIEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJ
TElORykKICAgICAgICAgV3JpdGVCYXJyaWVyQ291bnRlcnM6OmNvdW50V3JpdGVCYXJyaWVyKCk7
CisjZW5kaWYKKyAgICAgICAgaWYgKCFmcm9tIHx8ICFpc01hcmtlZChmcm9tKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgaWYgKCF0byB8fCBpc01hcmtlZCh0bykpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIEhlYXA6OmhlYXAoZnJvbSktPmFkZFRvUmVtZW1iZXJlZFNldChm
cm9tKTsKICAgICB9CiAKLSAgICBpbmxpbmUgdm9pZCBIZWFwOjp3cml0ZUJhcnJpZXIoY29uc3Qg
SlNDZWxsKiwgSlNWYWx1ZSkKKyAgICBpbmxpbmUgdm9pZCBIZWFwOjp3cml0ZUJhcnJpZXIoY29u
c3QgSlNDZWxsKiBmcm9tLCBKU1ZhbHVlIHRvKQogICAgIHsKKyNpZiBFTkFCTEUoV1JJVEVfQkFS
UklFUl9QUk9GSUxJTkcpCiAgICAgICAgIFdyaXRlQmFycmllckNvdW50ZXJzOjpjb3VudFdyaXRl
QmFycmllcigpOworI2VuZGlmCisgICAgICAgIGlmICghdG8uaXNDZWxsKCkpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIHdyaXRlQmFycmllcihmcm9tLCB0by5hc0NlbGwoKSk7CiAgICAg
fQogCiAgICAgaW5saW5lIHZvaWQgSGVhcDo6cmVwb3J0RXh0cmFNZW1vcnlDb3N0KHNpemVfdCBj
b3N0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcE9wZXJhdGlvbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBPcGVyYXRpb24uaAko
cmV2aXNpb24gMTYxNDU4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcE9wZXJh
dGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAKIG5hbWVzcGFjZSBKU0Mg
ewogCi1lbnVtIEhlYXBPcGVyYXRpb24geyBOb09wZXJhdGlvbiwgQWxsb2NhdGlvbiwgQ29sbGVj
dGlvbiB9OworZW51bSBIZWFwT3BlcmF0aW9uIHsgTm9PcGVyYXRpb24sIEFsbG9jYXRpb24sIEZ1
bGxDb2xsZWN0aW9uLCBFZGVuQ29sbGVjdGlvbiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2suY3BwCShyZXZpc2lvbiAx
NjE0NTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2suY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01Nyw4ICs1NywyOSBAQCBNYXJrU3RhY2tBcnJheTo6TWFya1N0YWNrQXJy
YXkoQmxvY2tBbGxvCiAKIE1hcmtTdGFja0FycmF5Ojp+TWFya1N0YWNrQXJyYXkoKQogewotICAg
IEFTU0VSVChtX251bWJlck9mU2VnbWVudHMgPT0gMSAmJiBtX3NlZ21lbnRzLnNpemUoKSA9PSAx
KTsKKyAgICBBU1NFUlQobV9udW1iZXJPZlNlZ21lbnRzID09IDEpOworICAgIEFTU0VSVChtX3Nl
Z21lbnRzLnNpemUoKSA9PSAxKTsKICAgICBtX2Jsb2NrQWxsb2NhdG9yLmRlYWxsb2NhdGUoTWFy
a1N0YWNrU2VnbWVudDo6ZGVzdHJveShtX3NlZ21lbnRzLnJlbW92ZUhlYWQoKSkpOworICAgIG1f
bnVtYmVyT2ZTZWdtZW50cy0tOworICAgIEFTU0VSVCghbV9udW1iZXJPZlNlZ21lbnRzKTsKKyAg
ICBBU1NFUlQoIW1fc2VnbWVudHMuc2l6ZSgpKTsKK30KKwordm9pZCBNYXJrU3RhY2tBcnJheTo6
Y2xlYXIoKQoreworICAgIGlmICghbV9zZWdtZW50cy5oZWFkKCkpCisgICAgICAgIHJldHVybjsK
KyAgICBNYXJrU3RhY2tTZWdtZW50KiBuZXh0OworICAgIGZvciAoTWFya1N0YWNrU2VnbWVudCog
Y3VycmVudCA9IG1fc2VnbWVudHMuaGVhZCgpOyBjdXJyZW50LT5uZXh0KCk7IGN1cnJlbnQgPSBu
ZXh0KSB7CisgICAgICAgIG5leHQgPSBjdXJyZW50LT5uZXh0KCk7CisgICAgICAgIG1fc2VnbWVu
dHMucmVtb3ZlKGN1cnJlbnQpOworICAgICAgICBtX2Jsb2NrQWxsb2NhdG9yLmRlYWxsb2NhdGUo
TWFya1N0YWNrU2VnbWVudDo6ZGVzdHJveShjdXJyZW50KSk7CisgICAgfQorICAgIG1fdG9wID0g
MDsKKyAgICBtX251bWJlck9mU2VnbWVudHMgPSAxOworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAg
ICBtX3NlZ21lbnRzLmhlYWQoKS0+bV90b3AgPSAwOworI2VuZGlmCiB9CiAKIHZvaWQgTWFya1N0
YWNrQXJyYXk6OmV4cGFuZCgpCkBAIC0xNjcsNCArMTg4LDI4IEBAIHZvaWQgTWFya1N0YWNrQXJy
YXk6OnN0ZWFsU29tZUNlbGxzRnJvbSgKICAgICAgICAgYXBwZW5kKG90aGVyLnJlbW92ZUxhc3Qo
KSk7CiB9CiAKK3ZvaWQgTWFya1N0YWNrQXJyYXk6OmZpbGxWZWN0b3IoVmVjdG9yPGNvbnN0IEpT
Q2VsbCo+JiB2ZWN0b3IpCit7CisgICAgQVNTRVJUKHZlY3Rvci5zaXplKCkgPT0gc2l6ZSgpKTsK
KworICAgIE1hcmtTdGFja1NlZ21lbnQqIGN1cnJlbnRTZWdtZW50ID0gbV9zZWdtZW50cy5oZWFk
KCk7CisgICAgaWYgKCFjdXJyZW50U2VnbWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgdW5z
aWduZWQgY291bnQgPSAwOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3RvcDsgKytp
KSB7CisgICAgICAgIEFTU0VSVChjdXJyZW50U2VnbWVudC0+ZGF0YSgpW2ldKTsKKyAgICAgICAg
dmVjdG9yW2NvdW50KytdID0gY3VycmVudFNlZ21lbnQtPmRhdGEoKVtpXTsKKyAgICB9CisKKyAg
ICBjdXJyZW50U2VnbWVudCA9IGN1cnJlbnRTZWdtZW50LT5uZXh0KCk7CisgICAgd2hpbGUgKGN1
cnJlbnRTZWdtZW50KSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzX3NlZ21l
bnRDYXBhY2l0eTsgKytpKSB7CisgICAgICAgICAgICBBU1NFUlQoY3VycmVudFNlZ21lbnQtPmRh
dGEoKVtpXSk7CisgICAgICAgICAgICB2ZWN0b3JbY291bnQrK10gPSBjdXJyZW50U2VnbWVudC0+
ZGF0YSgpW2ldOworICAgICAgICB9CisgICAgICAgIGN1cnJlbnRTZWdtZW50ID0gY3VycmVudFNl
Z21lbnQtPm5leHQoKTsKKyAgICB9Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmgJKHJldmlzaW9uIDE2MTQ1OCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC01
Miw2ICs1Miw3IEBACiAKICNpbmNsdWRlICJIZWFwQmxvY2suaCIKICNpbmNsdWRlIDx3dGYvU3Rk
TGliRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsK
IApAQCAtMTAwLDYgKzEwMSw5IEBAIHB1YmxpYzoKICAgICBzaXplX3Qgc2l6ZSgpOwogICAgIGJv
b2wgaXNFbXB0eSgpOwogCisgICAgdm9pZCBmaWxsVmVjdG9yKFZlY3Rvcjxjb25zdCBKU0NlbGwq
PiYpOworICAgIHZvaWQgY2xlYXIoKTsKKwogcHJpdmF0ZToKICAgICB0ZW1wbGF0ZSA8c2l6ZV90
IHNpemU+IHN0cnVjdCBDYXBhY2l0eUZyb21TaXplIHsKICAgICAgICAgc3RhdGljIGNvbnN0IHNp
emVfdCB2YWx1ZSA9IChzaXplIC0gc2l6ZW9mKE1hcmtTdGFja1NlZ21lbnQpKSAvIHNpemVvZihj
b25zdCBKU0NlbGwqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFs
bG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a2VkQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMTYxNDU4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAsMTAgKzEw
LDEwIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1ib29sIE1hcmtlZEFsbG9jYXRvcjo6aXNQYWdl
ZE91dChkb3VibGUgZGVhZGxpbmUpCitzdGF0aWMgYm9vbCBpc0xpc3RQYWdlZE91dChkb3VibGUg
ZGVhZGxpbmUsIERvdWJseUxpbmtlZExpc3Q8TWFya2VkQmxvY2s+JiBsaXN0KQogewogICAgIHVu
c2lnbmVkIGl0ZXJzU2luY2VMYXN0VGltZUNoZWNrID0gMDsKLSAgICBNYXJrZWRCbG9jayogYmxv
Y2sgPSBtX2Jsb2NrTGlzdC5oZWFkKCk7CisgICAgTWFya2VkQmxvY2sqIGJsb2NrID0gbGlzdC5o
ZWFkKCk7CiAgICAgd2hpbGUgKGJsb2NrKSB7CiAgICAgICAgIGJsb2NrID0gYmxvY2stPm5leHQo
KTsKICAgICAgICAgKytpdGVyc1NpbmNlTGFzdFRpbWVDaGVjazsKQEAgLTI0LDcgKzI0LDEzIEBA
IGJvb2wgTWFya2VkQWxsb2NhdG9yOjppc1BhZ2VkT3V0KGRvdWJsZSAKICAgICAgICAgICAgIGl0
ZXJzU2luY2VMYXN0VGltZUNoZWNrID0gMDsKICAgICAgICAgfQogICAgIH0KKyAgICByZXR1cm4g
ZmFsc2U7Cit9CiAKK2Jvb2wgTWFya2VkQWxsb2NhdG9yOjppc1BhZ2VkT3V0KGRvdWJsZSBkZWFk
bGluZSkKK3sKKyAgICBpZiAoaXNMaXN0UGFnZWRPdXQoZGVhZGxpbmUsIG1fYmxvY2tMaXN0KSkK
KyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC0zNiwxNSAr
NDIsMjMgQEAgaW5saW5lIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdAogICAgIHdo
aWxlICghbV9mcmVlTGlzdC5oZWFkKSB7CiAgICAgICAgIERlbGF5ZWRSZWxlYXNlU2NvcGUgZGVs
YXllZFJlbGVhc2VTY29wZSgqbV9tYXJrZWRTcGFjZSk7CiAgICAgICAgIGlmIChtX2N1cnJlbnRC
bG9jaykgewotICAgICAgICAgICAgQVNTRVJUKG1fY3VycmVudEJsb2NrID09IG1fYmxvY2tzVG9T
d2VlcCk7CisgICAgICAgICAgICBBU1NFUlQobV9jdXJyZW50QmxvY2sgPT0gbV9uZXh0QmxvY2tU
b1N3ZWVwKTsKICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5kaWRDb25zdW1lRnJlZUxpc3Qo
KTsKLSAgICAgICAgICAgIG1fYmxvY2tzVG9Td2VlcCA9IG1fY3VycmVudEJsb2NrLT5uZXh0KCk7
CisgICAgICAgICAgICBtX25leHRCbG9ja1RvU3dlZXAgPSBtX2N1cnJlbnRCbG9jay0+bmV4dCgp
OwogICAgICAgICB9CiAKLSAgICAgICAgZm9yIChNYXJrZWRCbG9jayomIGJsb2NrID0gbV9ibG9j
a3NUb1N3ZWVwOyBibG9jazsgYmxvY2sgPSBibG9jay0+bmV4dCgpKSB7CisgICAgICAgIE1hcmtl
ZEJsb2NrKiBuZXh0OworICAgICAgICBmb3IgKE1hcmtlZEJsb2NrKiYgYmxvY2sgPSBtX25leHRC
bG9ja1RvU3dlZXA7IGJsb2NrOyBibG9jayA9IG5leHQpIHsKKyAgICAgICAgICAgIG5leHQgPSBi
bG9jay0+bmV4dCgpOworCiAgICAgICAgICAgICBNYXJrZWRCbG9jazo6RnJlZUxpc3QgZnJlZUxp
c3QgPSBibG9jay0+c3dlZXAoTWFya2VkQmxvY2s6OlN3ZWVwVG9GcmVlTGlzdCk7CisgICAgICAg
ICAgICAKICAgICAgICAgICAgIGlmICghZnJlZUxpc3QuaGVhZCkgewogICAgICAgICAgICAgICAg
IGJsb2NrLT5kaWRDb25zdW1lRW1wdHlGcmVlTGlzdCgpOworICAgICAgICAgICAgICAgIG1fYmxv
Y2tMaXN0LnJlbW92ZShibG9jayk7CisgICAgICAgICAgICAgICAgbV9ibG9ja0xpc3QucHVzaChi
bG9jayk7CisgICAgICAgICAgICAgICAgaWYgKCFtX2xhc3RGdWxsQmxvY2spCisgICAgICAgICAg
ICAgICAgICAgIG1fbGFzdEZ1bGxCbG9jayA9IGJsb2NrOwogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgfQogCkBAIC02OCw2ICs4Miw3IEBAIGlubGluZSB2b2lkKiBNYXJr
ZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXQKICAgICBNYXJrZWRCbG9jazo6RnJlZUNlbGwqIGhlYWQg
PSBtX2ZyZWVMaXN0LmhlYWQ7CiAgICAgbV9mcmVlTGlzdC5oZWFkID0gaGVhZC0+bmV4dDsKICAg
ICBBU1NFUlQoaGVhZCk7CisgICAgbV9tYXJrZWRTcGFjZS0+ZGlkQWxsb2NhdGVJbkJsb2NrKG1f
Y3VycmVudEJsb2NrKTsKICAgICByZXR1cm4gaGVhZDsKIH0KICAgICAKQEAgLTEzNiw3ICsxNTEs
NyBAQCB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6YWRkQmxvY2soTWFya2VkQmxvCiAgICAgQVNTRVJU
KCFtX2ZyZWVMaXN0LmhlYWQpOwogICAgIAogICAgIG1fYmxvY2tMaXN0LmFwcGVuZChibG9jayk7
Ci0gICAgbV9ibG9ja3NUb1N3ZWVwID0gbV9jdXJyZW50QmxvY2sgPSBibG9jazsKKyAgICBtX25l
eHRCbG9ja1RvU3dlZXAgPSBtX2N1cnJlbnRCbG9jayA9IGJsb2NrOwogICAgIG1fZnJlZUxpc3Qg
PSBibG9jay0+c3dlZXAoTWFya2VkQmxvY2s6OlN3ZWVwVG9GcmVlTGlzdCk7CiAgICAgbV9tYXJr
ZWRTcGFjZS0+ZGlkQWRkQmxvY2soYmxvY2spOwogfQpAQCAtMTQ3LDkgKzE2MiwyNyBAQCB2b2lk
IE1hcmtlZEFsbG9jYXRvcjo6cmVtb3ZlQmxvY2soTWFya2VkCiAgICAgICAgIG1fY3VycmVudEJs
b2NrID0gbV9jdXJyZW50QmxvY2stPm5leHQoKTsKICAgICAgICAgbV9mcmVlTGlzdCA9IE1hcmtl
ZEJsb2NrOjpGcmVlTGlzdCgpOwogICAgIH0KLSAgICBpZiAobV9ibG9ja3NUb1N3ZWVwID09IGJs
b2NrKQotICAgICAgICBtX2Jsb2Nrc1RvU3dlZXAgPSBtX2Jsb2Nrc1RvU3dlZXAtPm5leHQoKTsK
KyAgICBpZiAobV9uZXh0QmxvY2tUb1N3ZWVwID09IGJsb2NrKQorICAgICAgICBtX25leHRCbG9j
a1RvU3dlZXAgPSBtX25leHRCbG9ja1RvU3dlZXAtPm5leHQoKTsKKworICAgIGlmIChibG9jayA9
PSBtX2xhc3RGdWxsQmxvY2spCisgICAgICAgIG1fbGFzdEZ1bGxCbG9jayA9IG1fbGFzdEZ1bGxC
bG9jay0+cHJldigpOworICAgIAogICAgIG1fYmxvY2tMaXN0LnJlbW92ZShibG9jayk7CiB9CiAK
K3ZvaWQgTWFya2VkQWxsb2NhdG9yOjpyZXNldCgpCit7CisgICAgbV9sYXN0QWN0aXZlQmxvY2sg
PSAwOworICAgIG1fY3VycmVudEJsb2NrID0gMDsKKyAgICBtX2ZyZWVMaXN0ID0gTWFya2VkQmxv
Y2s6OkZyZWVMaXN0KCk7CisgICAgaWYgKG1faGVhcC0+b3BlcmF0aW9uSW5Qcm9ncmVzcygpID09
IEZ1bGxDb2xsZWN0aW9uKQorICAgICAgICBtX2xhc3RGdWxsQmxvY2sgPSAwOworCisgICAgaWYg
KG1fbGFzdEZ1bGxCbG9jaykKKyAgICAgICAgbV9uZXh0QmxvY2tUb1N3ZWVwID0gbV9sYXN0RnVs
bEJsb2NrLT5uZXh0KCkgPyBtX2xhc3RGdWxsQmxvY2stPm5leHQoKSA6IG1fbGFzdEZ1bGxCbG9j
azsKKyAgICBlbHNlCisgICAgICAgIG1fbmV4dEJsb2NrVG9Td2VlcCA9IG1fYmxvY2tMaXN0Lmhl
YWQoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuaAkocmV2aXNpb24gMTYxNDU4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAg
LTUyLDcgKzUyLDggQEAgcHJpdmF0ZToKICAgICBNYXJrZWRCbG9jazo6RnJlZUxpc3QgbV9mcmVl
TGlzdDsKICAgICBNYXJrZWRCbG9jayogbV9jdXJyZW50QmxvY2s7CiAgICAgTWFya2VkQmxvY2sq
IG1fbGFzdEFjdGl2ZUJsb2NrOwotICAgIE1hcmtlZEJsb2NrKiBtX2Jsb2Nrc1RvU3dlZXA7Cisg
ICAgTWFya2VkQmxvY2sqIG1fbmV4dEJsb2NrVG9Td2VlcDsKKyAgICBNYXJrZWRCbG9jayogbV9s
YXN0RnVsbEJsb2NrOwogICAgIERvdWJseUxpbmtlZExpc3Q8TWFya2VkQmxvY2s+IG1fYmxvY2tM
aXN0OwogICAgIHNpemVfdCBtX2NlbGxTaXplOwogICAgIE1hcmtlZEJsb2NrOjpEZXN0cnVjdG9y
VHlwZSBtX2Rlc3RydWN0b3JUeXBlOwpAQCAtNjgsNyArNjksOCBAQCBpbmxpbmUgcHRyZGlmZl90
IE1hcmtlZEFsbG9jYXRvcjo6b2Zmc2V0CiBpbmxpbmUgTWFya2VkQWxsb2NhdG9yOjpNYXJrZWRB
bGxvY2F0b3IoKQogICAgIDogbV9jdXJyZW50QmxvY2soMCkKICAgICAsIG1fbGFzdEFjdGl2ZUJs
b2NrKDApCi0gICAgLCBtX2Jsb2Nrc1RvU3dlZXAoMCkKKyAgICAsIG1fbmV4dEJsb2NrVG9Td2Vl
cCgwKQorICAgICwgbV9sYXN0RnVsbEJsb2NrKDApCiAgICAgLCBtX2NlbGxTaXplKDApCiAgICAg
LCBtX2Rlc3RydWN0b3JUeXBlKE1hcmtlZEJsb2NrOjpOb25lKQogICAgICwgbV9oZWFwKDApCkBA
IC0xMDIsMTQgKzEwNCw2IEBAIGlubGluZSB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRl
KHMKICAgICByZXR1cm4gaGVhZDsKIH0KIAotaW5saW5lIHZvaWQgTWFya2VkQWxsb2NhdG9yOjpy
ZXNldCgpCi17Ci0gICAgbV9sYXN0QWN0aXZlQmxvY2sgPSAwOwotICAgIG1fY3VycmVudEJsb2Nr
ID0gMDsKLSAgICBtX2ZyZWVMaXN0ID0gTWFya2VkQmxvY2s6OkZyZWVMaXN0KCk7Ci0gICAgbV9i
bG9ja3NUb1N3ZWVwID0gbV9ibG9ja0xpc3QuaGVhZCgpOwotfQotCiBpbmxpbmUgdm9pZCBNYXJr
ZWRBbGxvY2F0b3I6OnN0b3BBbGxvY2F0aW5nKCkKIHsKICAgICBBU1NFUlQoIW1fbGFzdEFjdGl2
ZUJsb2NrKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5j
cHAJKHJldmlzaW9uIDE2MTQ1OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtl
ZEJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk3LDYgKzE5Nyw0NSBAQCB2b2lkIE1hcmtl
ZEJsb2NrOjpzdG9wQWxsb2NhdGluZyhjb25zdCBGCiAgICAgbV9zdGF0ZSA9IE1hcmtlZDsKIH0K
IAordm9pZCBNYXJrZWRCbG9jazo6Y2xlYXJNYXJrcygpCit7CisgICAgaWYgKGhlYXAoKS0+b3Bl
cmF0aW9uSW5Qcm9ncmVzcygpID09IEpTQzo6RWRlbkNvbGxlY3Rpb24pCisgICAgICAgIHRoaXMt
PmNsZWFyTWFya3NXaXRoQ29sbGVjdGlvblR5cGU8RWRlbkNvbGxlY3Rpb24+KCk7CisgICAgZWxz
ZQorICAgICAgICB0aGlzLT5jbGVhck1hcmtzV2l0aENvbGxlY3Rpb25UeXBlPEZ1bGxDb2xsZWN0
aW9uPigpOworfQorCit2b2lkIE1hcmtlZEJsb2NrOjpjbGVhclJlbWVtYmVyZWRTZXQoKQorewor
ICAgIG1fcmVtZW1iZXJlZFNldC5jbGVhckFsbCgpOworfQorCit0ZW1wbGF0ZSA8SGVhcE9wZXJh
dGlvbiBjb2xsZWN0aW9uVHlwZT4KK3ZvaWQgTWFya2VkQmxvY2s6OmNsZWFyTWFya3NXaXRoQ29s
bGVjdGlvblR5cGUoKQoreworICAgIEFTU0VSVChjb2xsZWN0aW9uVHlwZSA9PSBGdWxsQ29sbGVj
dGlvbiB8fCBjb2xsZWN0aW9uVHlwZSA9PSBFZGVuQ29sbGVjdGlvbik7CisgICAgSEVBUF9MT0df
QkxPQ0tfU1RBVEVfVFJBTlNJVElPTih0aGlzKTsKKworICAgIEFTU0VSVChtX3N0YXRlICE9IE5l
dyAmJiBtX3N0YXRlICE9IEZyZWVMaXN0ZWQpOworICAgIGlmIChjb2xsZWN0aW9uVHlwZSA9PSBG
dWxsQ29sbGVjdGlvbikgeworICAgICAgICBtX21hcmtzLmNsZWFyQWxsKCk7CisgICAgICAgIG1f
cmVtZW1iZXJlZFNldC5jbGVhckFsbCgpOworICAgIH0KKworICAgIC8vIFRoaXMgd2lsbCBiZWNv
bWUgdHJ1ZSBhdCB0aGUgZW5kIG9mIHRoZSBtYXJrIHBoYXNlLiBXZSBzZXQgaXQgbm93IHRvCisg
ICAgLy8gYXZvaWQgYW4gZXh0cmEgcGFzcyB0byBkbyBzbyBsYXRlci4KKyAgICBtX3N0YXRlID0g
TWFya2VkOworfQorCit2b2lkIE1hcmtlZEJsb2NrOjpsYXN0Q2hhbmNlVG9GaW5hbGl6ZSgpCit7
CisgICAgbV93ZWFrU2V0Lmxhc3RDaGFuY2VUb0ZpbmFsaXplKCk7CisKKyAgICBjbGVhck5ld2x5
QWxsb2NhdGVkKCk7CisgICAgY2xlYXJNYXJrc1dpdGhDb2xsZWN0aW9uVHlwZTxGdWxsQ29sbGVj
dGlvbj4oKTsKKyAgICBzd2VlcCgpOworfQorCiBNYXJrZWRCbG9jazo6RnJlZUxpc3QgTWFya2Vk
QmxvY2s6OnJlc3VtZUFsbG9jYXRpbmcoKQogewogICAgIEhFQVBfTE9HX0JMT0NLX1NUQVRFX1RS
QU5TSVRJT04odGhpcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRC
bG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJs
b2NrLmgJKHJldmlzaW9uIDE2MTQ1OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtlZEJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlICJC
bG9ja0FsbG9jYXRvci5oIgogI2luY2x1ZGUgIkhlYXBCbG9jay5oIgogCisjaW5jbHVkZSAiSGVh
cE9wZXJhdGlvbi5oIgogI2luY2x1ZGUgIldlYWtTZXQuaCIKICNpbmNsdWRlIDx3dGYvQml0bWFw
Lmg+CiAjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KQEAgLTcyLDcgKzczLDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAKICAg
ICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgYXRvbVNpemUgPSA4OyAvLyBi
eXRlcworICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGF0b21TaXplID0gMTY7IC8vIGJ5dGVz
CiAgICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgYXRvbVNoaWZ0QW1vdW50ID0gNDsgLy8gbG9n
XzIoYXRvbVNpemUpIEZJWE1FOiBDaGFuZ2UgYXRvbVNpemUgdG8gMTYuCiAgICAgICAgIHN0YXRp
YyBjb25zdCBzaXplX3QgYmxvY2tTaXplID0gNjQgKiBLQjsKICAgICAgICAgc3RhdGljIGNvbnN0
IHNpemVfdCBibG9ja01hc2sgPSB+KGJsb2NrU2l6ZSAtIDEpOyAvLyBibG9ja1NpemUgbXVzdCBi
ZSBhIHBvd2VyIG9mIHR3by4KQEAgLTE0MCwxMSArMTQxLDE2IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICB2b2lkIHN0b3BBbGxvY2F0aW5nKGNvbnN0IEZyZWVMaXN0Jik7CiAgICAgICAgIEZy
ZWVMaXN0IHJlc3VtZUFsbG9jYXRpbmcoKTsgLy8gQ2FsbCB0aGlzIGlmIHlvdSBjYW5vbmljYWxp
emVkIGEgYmxvY2sgZm9yIHNvbWUgbm9uLWNvbGxlY3Rpb24gcmVsYXRlZCBwdXJwb3NlLgogICAg
ICAgICB2b2lkIGRpZENvbnN1bWVFbXB0eUZyZWVMaXN0KCk7IC8vIENhbGwgdGhpcyBpZiB5b3Ug
c3dlZXAgYSBibG9jaywgYnV0IHRoZSByZXR1cm5lZCBGcmVlTGlzdCBpcyBlbXB0eS4KKyAgICAg
ICAgdm9pZCBkaWRTd2VlcFRvTm9BdmFpbCgpOyAvLyBDYWxsIHRoaXMgaWYgeW91IHN3ZWVwIGEg
YmxvY2sgYW5kIGdldCBhbiBlbXB0eSBmcmVlIGxpc3QgYmFjay4KIAogICAgICAgICAvLyBSZXR1
cm5zIHRydWUgaWYgdGhlICJuZXdseSBhbGxvY2F0ZWQiIGJpdG1hcCB3YXMgbm9uLW51bGwgCiAg
ICAgICAgIC8vIGFuZCB3YXMgc3VjY2Vzc2Z1bGx5IGNsZWFyZWQgYW5kIGZhbHNlIG90aGVyd2lz
ZS4KICAgICAgICAgYm9vbCBjbGVhck5ld2x5QWxsb2NhdGVkKCk7CiAgICAgICAgIHZvaWQgY2xl
YXJNYXJrcygpOworICAgICAgICB2b2lkIGNsZWFyUmVtZW1iZXJlZFNldCgpOworICAgICAgICB0
ZW1wbGF0ZSA8SGVhcE9wZXJhdGlvbiBjb2xsZWN0aW9uVHlwZT4KKyAgICAgICAgdm9pZCBjbGVh
ck1hcmtzV2l0aENvbGxlY3Rpb25UeXBlKCk7CisKICAgICAgICAgc2l6ZV90IG1hcmtDb3VudCgp
OwogICAgICAgICBib29sIGlzRW1wdHkoKTsKIApAQCAtMTYxLDYgKzE2NywxMSBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgdm9pZCBzZXRNYXJrZWQoY29uc3Qgdm9pZCopOwogICAgICAgICB2
b2lkIGNsZWFyTWFya2VkKGNvbnN0IHZvaWQqKTsKIAorICAgICAgICB2b2lkIHNldFJlbWVtYmVy
ZWQoY29uc3Qgdm9pZCopOworICAgICAgICB2b2lkIGNsZWFyUmVtZW1iZXJlZChjb25zdCB2b2lk
Kik7CisgICAgICAgIHZvaWQgYXRvbWljQ2xlYXJSZW1lbWJlcmVkKGNvbnN0IHZvaWQqKTsKKyAg
ICAgICAgYm9vbCBpc1JlbWVtYmVyZWQoY29uc3Qgdm9pZCopOworCiAgICAgICAgIGJvb2wgaXNO
ZXdseUFsbG9jYXRlZChjb25zdCB2b2lkKik7CiAgICAgICAgIHZvaWQgc2V0TmV3bHlBbGxvY2F0
ZWQoY29uc3Qgdm9pZCopOwogICAgICAgICB2b2lkIGNsZWFyTmV3bHlBbGxvY2F0ZWQoY29uc3Qg
dm9pZCopOwpAQCAtMTkwLDkgKzIwMSwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc2l6
ZV90IG1fYXRvbXNQZXJDZWxsOwogICAgICAgICBzaXplX3QgbV9lbmRBdG9tOyAvLyBUaGlzIGlz
IGEgZnV6enkgZW5kLiBBbHdheXMgdGVzdCBmb3IgPCBtX2VuZEF0b20uCiAjaWYgRU5BQkxFKFBB
UkFMTEVMX0dDKQotICAgICAgICBXVEY6OkJpdG1hcDxhdG9tc1BlckJsb2NrLCBXVEY6OkJpdG1h
cEF0b21pYz4gbV9tYXJrczsKKyAgICAgICAgV1RGOjpCaXRtYXA8YXRvbXNQZXJCbG9jaywgV1RG
OjpCaXRtYXBBdG9taWMsIHVpbnQ4X3Q+IG1fbWFya3M7CisgICAgICAgIFdURjo6Qml0bWFwPGF0
b21zUGVyQmxvY2ssIFdURjo6Qml0bWFwQXRvbWljLCB1aW50OF90PiBtX3JlbWVtYmVyZWRTZXQ7
CiAjZWxzZQotICAgICAgICBXVEY6OkJpdG1hcDxhdG9tc1BlckJsb2NrLCBXVEY6OkJpdG1hcE5v
dEF0b21pYz4gbV9tYXJrczsKKyAgICAgICAgV1RGOjpCaXRtYXA8YXRvbXNQZXJCbG9jaywgV1RG
OjpCaXRtYXBOb3RBdG9taWMsIHVpbnQ4X3Q+IG1fbWFya3M7CisgICAgICAgIFdURjo6Qml0bWFw
PGF0b21zUGVyQmxvY2ssIFdURjo6Qml0bWFwTm90QXRvbWljLCB1aW50OF90PiBtX3JlbWVtYmVy
ZWRTZXQ7CiAjZW5kaWYKICAgICAgICAgT3duUHRyPFdURjo6Qml0bWFwPGF0b21zUGVyQmxvY2s+
PiBtX25ld2x5QWxsb2NhdGVkOwogCkBAIC0yMzQsMTUgKzI0Nyw2IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxNYXJrZWRCbG9jayo+KHJlaW50ZXJw
cmV0X2Nhc3Q8Qml0cz4ocCkgJiBibG9ja01hc2spOwogICAgIH0KIAotICAgIGlubGluZSB2b2lk
IE1hcmtlZEJsb2NrOjpsYXN0Q2hhbmNlVG9GaW5hbGl6ZSgpCi0gICAgewotICAgICAgICBtX3dl
YWtTZXQubGFzdENoYW5jZVRvRmluYWxpemUoKTsKLQotICAgICAgICBjbGVhck5ld2x5QWxsb2Nh
dGVkKCk7Ci0gICAgICAgIGNsZWFyTWFya3MoKTsKLSAgICAgICAgc3dlZXAoKTsKLSAgICB9Ci0K
ICAgICBpbmxpbmUgTWFya2VkQWxsb2NhdG9yKiBNYXJrZWRCbG9jazo6YWxsb2NhdG9yKCkgY29u
c3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX2FsbG9jYXRvcjsKQEAgLTI5MSwyNiArMjk1LDEw
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBIRUFQX0xPR19CTE9DS19TVEFURV9UUkFOU0lU
SU9OKHRoaXMpOwogCiAgICAgICAgIEFTU0VSVCghbV9uZXdseUFsbG9jYXRlZCk7Ci0jaWZuZGVm
IE5ERUJVRwotICAgICAgICBmb3IgKHNpemVfdCBpID0gZmlyc3RBdG9tKCk7IGkgPCBtX2VuZEF0
b207IGkgKz0gbV9hdG9tc1BlckNlbGwpCi0gICAgICAgICAgICBBU1NFUlQobV9tYXJrcy5nZXQo
aSkpOwotI2VuZGlmCiAgICAgICAgIEFTU0VSVChtX3N0YXRlID09IEZyZWVMaXN0ZWQpOwogICAg
ICAgICBtX3N0YXRlID0gTWFya2VkOwogICAgIH0KIAotICAgIGlubGluZSB2b2lkIE1hcmtlZEJs
b2NrOjpjbGVhck1hcmtzKCkKLSAgICB7Ci0gICAgICAgIEhFQVBfTE9HX0JMT0NLX1NUQVRFX1RS
QU5TSVRJT04odGhpcyk7Ci0KLSAgICAgICAgQVNTRVJUKG1fc3RhdGUgIT0gTmV3ICYmIG1fc3Rh
dGUgIT0gRnJlZUxpc3RlZCk7Ci0gICAgICAgIG1fbWFya3MuY2xlYXJBbGwoKTsKLQotICAgICAg
ICAvLyBUaGlzIHdpbGwgYmVjb21lIHRydWUgYXQgdGhlIGVuZCBvZiB0aGUgbWFyayBwaGFzZS4g
V2Ugc2V0IGl0IG5vdyB0bwotICAgICAgICAvLyBhdm9pZCBhbiBleHRyYSBwYXNzIHRvIGRvIHNv
IGxhdGVyLgotICAgICAgICBtX3N0YXRlID0gTWFya2VkOwotICAgIH0KLQogICAgIGlubGluZSBz
aXplX3QgTWFya2VkQmxvY2s6Om1hcmtDb3VudCgpCiAgICAgewogICAgICAgICByZXR1cm4gbV9t
YXJrcy5jb3VudCgpOwpAQCAtMzQ2LDYgKzMzNCwyNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgcmV0dXJuIChyZWludGVycHJldF9jYXN0PEJpdHM+KHApIC0gcmVpbnRlcnByZXRfY2FzdDxC
aXRzPih0aGlzKSkgLyBhdG9tU2l6ZTsKICAgICB9CiAKKyAgICBpbmxpbmUgdm9pZCBNYXJrZWRC
bG9jazo6c2V0UmVtZW1iZXJlZChjb25zdCB2b2lkKiBwKQorICAgIHsKKyAgICAgICAgbV9yZW1l
bWJlcmVkU2V0LnNldChhdG9tTnVtYmVyKHApKTsKKyAgICB9CisKKyAgICBpbmxpbmUgdm9pZCBN
YXJrZWRCbG9jazo6Y2xlYXJSZW1lbWJlcmVkKGNvbnN0IHZvaWQqIHApCisgICAgeworICAgICAg
ICBtX3JlbWVtYmVyZWRTZXQuY2xlYXIoYXRvbU51bWJlcihwKSk7CisgICAgfQorCisgICAgaW5s
aW5lIHZvaWQgTWFya2VkQmxvY2s6OmF0b21pY0NsZWFyUmVtZW1iZXJlZChjb25zdCB2b2lkKiBw
KQorICAgIHsKKyAgICAgICAgbV9yZW1lbWJlcmVkU2V0LmNvbmN1cnJlbnRUZXN0QW5kQ2xlYXIo
YXRvbU51bWJlcihwKSk7CisgICAgfQorCisgICAgaW5saW5lIGJvb2wgTWFya2VkQmxvY2s6Omlz
UmVtZW1iZXJlZChjb25zdCB2b2lkKiBwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcmVtZW1i
ZXJlZFNldC5nZXQoYXRvbU51bWJlcihwKSk7CisgICAgfQorCiAgICAgaW5saW5lIGJvb2wgTWFy
a2VkQmxvY2s6OmlzTWFya2VkKGNvbnN0IHZvaWQqIHApCiAgICAgewogICAgICAgICByZXR1cm4g
bV9tYXJrcy5nZXQoYXRvbU51bWJlcihwKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJrZWRTcGFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2VkU3BhY2UuY3BwCShyZXZpc2lvbiAxNjE0NTgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw2ICsx
MDUsNyBAQCBNYXJrZWRTcGFjZTo6fk1hcmtlZFNwYWNlKCkKIHsKICAgICBGcmVlIGZyZWUoRnJl
ZTo6RnJlZUFsbCwgdGhpcyk7CiAgICAgZm9yRWFjaEJsb2NrKGZyZWUpOworICAgIEFTU0VSVCgh
bV9ibG9ja3Muc2V0KCkuc2l6ZSgpKTsKIH0KIAogc3RydWN0IExhc3RDaGFuY2VUb0ZpbmFsaXpl
IDogTWFya2VkQmxvY2s6OlZvaWRGdW5jdG9yIHsKQEAgLTE0MywxNyArMTQ0LDI3IEBAIHZvaWQg
TWFya2VkU3BhY2U6OnJlc2V0QWxsb2NhdG9ycygpCiAgICAgbV9ub3JtYWxTcGFjZS5sYXJnZUFs
bG9jYXRvci5yZXNldCgpOwogICAgIG1fbm9ybWFsRGVzdHJ1Y3RvclNwYWNlLmxhcmdlQWxsb2Nh
dG9yLnJlc2V0KCk7CiAgICAgbV9pbW1vcnRhbFN0cnVjdHVyZURlc3RydWN0b3JTcGFjZS5sYXJn
ZUFsbG9jYXRvci5yZXNldCgpOworCisgICAgbV9ibG9ja3NXaXRoTmV3T2JqZWN0cy5jbGVhcigp
OwogfQogCiB2b2lkIE1hcmtlZFNwYWNlOjp2aXNpdFdlYWtTZXRzKEhlYXBSb290VmlzaXRvciYg
aGVhcFJvb3RWaXNpdG9yKQogewogICAgIFZpc2l0V2Vha1NldCB2aXNpdFdlYWtTZXQoaGVhcFJv
b3RWaXNpdG9yKTsKLSAgICBmb3JFYWNoQmxvY2sodmlzaXRXZWFrU2V0KTsKKyAgICBpZiAobV9o
ZWFwLT5vcGVyYXRpb25JblByb2dyZXNzKCkgPT0gRWRlbkNvbGxlY3Rpb24pIHsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYmxvY2tzV2l0aE5ld09iamVjdHMuc2l6ZSgpOyAr
K2kpCisgICAgICAgICAgICB2aXNpdFdlYWtTZXQobV9ibG9ja3NXaXRoTmV3T2JqZWN0c1tpXSk7
CisgICAgfSBlbHNlCisgICAgICAgIGZvckVhY2hCbG9jayh2aXNpdFdlYWtTZXQpOwogfQogCiB2
b2lkIE1hcmtlZFNwYWNlOjpyZWFwV2Vha1NldHMoKQogewotICAgIGZvckVhY2hCbG9jazxSZWFw
V2Vha1NldD4oKTsKKyAgICBpZiAobV9oZWFwLT5vcGVyYXRpb25JblByb2dyZXNzKCkgPT0gRWRl
bkNvbGxlY3Rpb24pIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYmxvY2tz
V2l0aE5ld09iamVjdHMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBtX2Jsb2Nrc1dpdGhOZXdP
YmplY3RzW2ldLT5yZWFwV2Vha1NldCgpOworICAgIH0gZWxzZQorICAgICAgICBmb3JFYWNoQmxv
Y2s8UmVhcFdlYWtTZXQ+KCk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9yPgpAQCAt
MzA1LDYgKzMxNiwyNCBAQCB2b2lkIE1hcmtlZFNwYWNlOjpjbGVhck5ld2x5QWxsb2NhdGVkKCkK
ICNlbmRpZgogfQogCisjaWZuZGVmIE5ERUJVRworc3RydWN0IFZlcmlmeU1hcmtlZCA6IE1hcmtl
ZEJsb2NrOjpWb2lkRnVuY3RvciB7CisgICAgdm9pZCBvcGVyYXRvcigpKE1hcmtlZEJsb2NrKiBi
bG9jaykgeyBBU1NFUlQoYmxvY2stPm5lZWRzU3dlZXBpbmcoKSk7IH0KK307CisjZW5kaWYKKwor
dm9pZCBNYXJrZWRTcGFjZTo6Y2xlYXJNYXJrcygpCit7CisgICAgaWYgKG1faGVhcC0+b3BlcmF0
aW9uSW5Qcm9ncmVzcygpID09IEVkZW5Db2xsZWN0aW9uKSB7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBtX2Jsb2Nrc1dpdGhOZXdPYmplY3RzLnNpemUoKTsgKytpKQorICAgICAg
ICAgICAgbV9ibG9ja3NXaXRoTmV3T2JqZWN0c1tpXS0+Y2xlYXJNYXJrcygpOworICAgIH0gZWxz
ZQorICAgICAgICBmb3JFYWNoQmxvY2s8Q2xlYXJNYXJrcz4oKTsKKyNpZm5kZWYgTkRFQlVHCisg
ICAgZm9yRWFjaEJsb2NrPFZlcmlmeU1hcmtlZD4oKTsKKyNlbmRpZgorfQorCiB2b2lkIE1hcmtl
ZFNwYWNlOjp3aWxsU3RhcnRJdGVyYXRpbmcoKQogewogICAgIEFTU0VSVCghaXNJdGVyYXRpbmco
KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgJKHJldmlz
aW9uIDE2MTQ1OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDE3IEBAIGNsYXNzIFdlYWtHQ0hhbmRsZTsKIGNs
YXNzIFNsb3RWaXNpdG9yOwogCiBzdHJ1Y3QgQ2xlYXJNYXJrcyA6IE1hcmtlZEJsb2NrOjpWb2lk
RnVuY3RvciB7Ci0gICAgdm9pZCBvcGVyYXRvcigpKE1hcmtlZEJsb2NrKiBibG9jaykgeyBibG9j
ay0+Y2xlYXJNYXJrcygpOyB9CisgICAgdm9pZCBvcGVyYXRvcigpKE1hcmtlZEJsb2NrKiBibG9j
aykKKyAgICB7CisgICAgICAgIGJsb2NrLT5jbGVhck1hcmtzKCk7CisgICAgfQorfTsKKworc3Ry
dWN0IENsZWFyUmVtZW1iZXJlZFNldCA6IE1hcmtlZEJsb2NrOjpWb2lkRnVuY3RvciB7CisgICAg
dm9pZCBvcGVyYXRvcigpKE1hcmtlZEJsb2NrKiBibG9jaykKKyAgICB7CisgICAgICAgIGJsb2Nr
LT5jbGVhclJlbWVtYmVyZWRTZXQoKTsKKyAgICB9CiB9OwogCiBzdHJ1Y3QgU3dlZXAgOiBNYXJr
ZWRCbG9jazo6Vm9pZEZ1bmN0b3IgewpAQCAtMTA1LDggKzExNSwxMCBAQCBwdWJsaWM6CiAKICAg
ICB2b2lkIGRpZEFkZEJsb2NrKE1hcmtlZEJsb2NrKik7CiAgICAgdm9pZCBkaWRDb25zdW1lRnJl
ZUxpc3QoTWFya2VkQmxvY2sqKTsKKyAgICB2b2lkIGRpZEFsbG9jYXRlSW5CbG9jayhNYXJrZWRC
bG9jayopOwogCiAgICAgdm9pZCBjbGVhck1hcmtzKCk7CisgICAgdm9pZCBjbGVhclJlbWVtYmVy
ZWRTZXQoKTsKICAgICB2b2lkIGNsZWFyTmV3bHlBbGxvY2F0ZWQoKTsKICAgICB2b2lkIHN3ZWVw
KCk7CiAgICAgc2l6ZV90IG9iamVjdENvdW50KCk7CkBAIC0xNTAsNiArMTYyLDcgQEAgcHJpdmF0
ZToKICAgICBzaXplX3QgbV9jYXBhY2l0eTsKICAgICBib29sIG1faXNJdGVyYXRpbmc7CiAgICAg
TWFya2VkQmxvY2tTZXQgbV9ibG9ja3M7CisgICAgVmVjdG9yPE1hcmtlZEJsb2NrKj4gbV9ibG9j
a3NXaXRoTmV3T2JqZWN0czsKIAogICAgIERlbGF5ZWRSZWxlYXNlU2NvcGUqIG1fY3VycmVudERl
bGF5ZWRSZWxlYXNlU2NvcGU7CiB9OwpAQCAtMjYyLDkgKzI3NSwxNCBAQCBpbmxpbmUgdm9pZCBN
YXJrZWRTcGFjZTo6ZGlkQWRkQmxvY2soTWFyCiAgICAgbV9ibG9ja3MuYWRkKGJsb2NrKTsKIH0K
IAotaW5saW5lIHZvaWQgTWFya2VkU3BhY2U6OmNsZWFyTWFya3MoKQoraW5saW5lIHZvaWQgTWFy
a2VkU3BhY2U6OmRpZEFsbG9jYXRlSW5CbG9jayhNYXJrZWRCbG9jayogYmxvY2spCit7CisgICAg
bV9ibG9ja3NXaXRoTmV3T2JqZWN0cy5hcHBlbmQoYmxvY2spOworfQorCitpbmxpbmUgdm9pZCBN
YXJrZWRTcGFjZTo6Y2xlYXJSZW1lbWJlcmVkU2V0KCkKIHsKLSAgICBmb3JFYWNoQmxvY2s8Q2xl
YXJNYXJrcz4oKTsKKyAgICBmb3JFYWNoQmxvY2s8Q2xlYXJSZW1lbWJlcmVkU2V0PigpOwogfQog
CiBpbmxpbmUgc2l6ZV90IE1hcmtlZFNwYWNlOjpvYmplY3RDb3VudCgpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCShyZXZpc2lvbiAxNjE0NTgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMzLDcgKzMzLDcgQEAgU2xvdFZpc2l0b3I6OlNsb3RWaXNpdG9yKEdDVGhyZWFkU2hh
cmVkRAogCiBTbG90VmlzaXRvcjo6flNsb3RWaXNpdG9yKCkKIHsKLSAgICBBU1NFUlQobV9zdGFj
ay5pc0VtcHR5KCkpOworICAgIGNsZWFyTWFya1N0YWNrKCk7CiB9CiAKIHZvaWQgU2xvdFZpc2l0
b3I6OnNldHVwKCkKQEAgLTYzLDYgKzYzLDExIEBAIHZvaWQgU2xvdFZpc2l0b3I6OnJlc2V0KCkK
ICAgICB9CiB9CiAKK3ZvaWQgU2xvdFZpc2l0b3I6OmNsZWFyTWFya1N0YWNrKCkKK3sKKyAgICBt
X3N0YWNrLmNsZWFyKCk7Cit9CisKIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZChDb25zZXJ2YXRp
dmVSb290cyYgY29uc2VydmF0aXZlUm9vdHMpCiB7CiAgICAgU3RhY2tTdGF0czo6cHJvYmUoKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAkocmV2aXNpb24g
MTYxNDU4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAkod29y
a2luZyBjb3B5KQpAQCAtNDksNiArNDksMTAgQEAgcHVibGljOgogICAgIFNsb3RWaXNpdG9yKEdD
VGhyZWFkU2hhcmVkRGF0YSYpOwogICAgIH5TbG90VmlzaXRvcigpOwogCisgICAgTWFya1N0YWNr
QXJyYXkmIG1hcmtTdGFjaygpIHsgcmV0dXJuIG1fc3RhY2s7IH0KKworICAgIEhlYXAqIGhlYXAo
KSBjb25zdDsKKwogICAgIHZvaWQgYXBwZW5kKENvbnNlcnZhdGl2ZVJvb3RzJik7CiAgICAgCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBhcHBlbmQoSklUV3JpdGVCYXJyaWVyPFQ+Kik7
CkBAIC02MSwxNyArNjUsMTkgQEAgcHVibGljOgogICAgIHZvaWQgYXBwZW5kVW5iYXJyaWVyZWRW
YWx1ZShKU1ZhbHVlKik7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICB2b2lkIGFwcGVu
ZFVuYmFycmllcmVkV2VhayhXZWFrPFQ+Kik7CisgICAgdm9pZCB1bmNvbmRpdGlvbmFsbHlBcHBl
bmQoSlNDZWxsKik7CiAgICAgCiAgICAgdm9pZCBhZGRPcGFxdWVSb290KHZvaWQqKTsKICAgICBi
b29sIGNvbnRhaW5zT3BhcXVlUm9vdCh2b2lkKik7CiAgICAgVHJpU3RhdGUgY29udGFpbnNPcGFx
dWVSb290VHJpU3RhdGUodm9pZCopOwogICAgIGludCBvcGFxdWVSb290Q291bnQoKTsKIAotICAg
IEdDVGhyZWFkU2hhcmVkRGF0YSYgc2hhcmVkRGF0YSgpIHsgcmV0dXJuIG1fc2hhcmVkOyB9Cisg
ICAgR0NUaHJlYWRTaGFyZWREYXRhJiBzaGFyZWREYXRhKCkgY29uc3QgeyByZXR1cm4gbV9zaGFy
ZWQ7IH0KICAgICBib29sIGlzRW1wdHkoKSB7IHJldHVybiBtX3N0YWNrLmlzRW1wdHkoKTsgfQog
CiAgICAgdm9pZCBzZXR1cCgpOwogICAgIHZvaWQgcmVzZXQoKTsKKyAgICB2b2lkIGNsZWFyTWFy
a1N0YWNrKCk7CiAKICAgICBzaXplX3QgYnl0ZXNWaXNpdGVkKCkgY29uc3QgeyByZXR1cm4gbV9i
eXRlc1Zpc2l0ZWQ7IH0KICAgICBzaXplX3QgYnl0ZXNDb3BpZWQoKSBjb25zdCB7IHJldHVybiBt
X2J5dGVzQ29waWVkOyB9CkBAIC04OSw3ICs5NSw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgY29w
eUxhdGVyKEpTQ2VsbCosIENvcHlUb2tlbiwgdm9pZCosIHNpemVfdCk7CiAgICAgCi0gICAgdm9p
ZCByZXBvcnRFeHRyYU1lbW9yeVVzYWdlKHNpemVfdCBzaXplKTsKKyAgICB2b2lkIHJlcG9ydEV4
dHJhTWVtb3J5VXNhZ2UoSlNDZWxsKiBvd25lciwgc2l6ZV90KTsKICAgICAKICAgICB2b2lkIGFk
ZFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIoV2Vha1JlZmVyZW5jZUhhcnZlc3RlciopOwogICAgIHZv
aWQgYWRkVW5jb25kaXRpb25hbEZpbmFsaXplcihVbmNvbmRpdGlvbmFsRmluYWxpemVyKik7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZXMu
aAkocmV2aXNpb24gMTYxNDU4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZp
c2l0b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw2ICsxMDUsMTQgQEAgQUxXQVlT
X0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjppbnRlcm5hbAogICAgICAgICAKICAgICBNQVJLX0xP
R19DSElMRCgqdGhpcywgY2VsbCk7CiAKKyAgICB1bmNvbmRpdGlvbmFsbHlBcHBlbmQoY2VsbCk7
Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6dW5jb25kaXRpb25hbGx5QXBw
ZW5kKEpTQ2VsbCogY2VsbCkKK3sKKyAgICBBU1NFUlQoSGVhcDo6aXNNYXJrZWQoY2VsbCkpOwor
ICAgIG1fdmlzaXRDb3VudCsrOworICAgICAgICAKICAgICAvLyBTaG91bGQgbmV2ZXIgYXR0ZW1w
dCB0byBtYXJrIHNvbWV0aGluZyB0aGF0IGlzIHphcHBlZC4KICAgICBBU1NFUlQoIWNlbGwtPmlz
WmFwcGVkKCkpOwogICAgICAgICAKQEAgLTIxOCw2ICsyMjYsMTAgQEAgaW5saW5lIHZvaWQgU2xv
dFZpc2l0b3I6OmRvbmF0ZUFuZERyYWluKAogaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OmNvcHlM
YXRlcihKU0NlbGwqIG93bmVyLCBDb3B5VG9rZW4gdG9rZW4sIHZvaWQqIHB0ciwgc2l6ZV90IGJ5
dGVzKQogewogICAgIEFTU0VSVChieXRlcyk7CisgICAgLy8gV2UgZG9uJ3QgZG8gYW55IGNvcHlp
bmcgZHVyaW5nIEVkZW5Db2xsZWN0aW9ucy4KKyAgICBpZiAoaGVhcCgpLT5vcGVyYXRpb25JblBy
b2dyZXNzKCkgPT0gRWRlbkNvbGxlY3Rpb24pCisgICAgICAgIHJldHVybjsKKwogICAgIG1fYnl0
ZXNDb3BpZWQgKz0gYnl0ZXM7CiAKICAgICBDb3BpZWRCbG9jayogYmxvY2sgPSBDb3BpZWRTcGFj
ZTo6YmxvY2tGb3IocHRyKTsKQEAgLTIyNiwxNCArMjM4LDE1IEBAIGlubGluZSB2b2lkIFNsb3RW
aXNpdG9yOjpjb3B5TGF0ZXIoSlNDZWwKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlm
IChibG9jay0+aXNQaW5uZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgYmxvY2stPnJlcG9y
dExpdmVCeXRlcyhvd25lciwgdG9rZW4sIGJ5dGVzKTsKIH0KICAgICAKLWlubGluZSB2b2lkIFNs
b3RWaXNpdG9yOjpyZXBvcnRFeHRyYU1lbW9yeVVzYWdlKHNpemVfdCBzaXplKQoraW5saW5lIHZv
aWQgU2xvdFZpc2l0b3I6OnJlcG9ydEV4dHJhTWVtb3J5VXNhZ2UoSlNDZWxsKiBvd25lciwgc2l6
ZV90IHNpemUpCiB7CisgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBkb3VibGUtY291bnQgdGhlIGV4
dHJhIG1lbW9yeSB0aGF0IHdhcyByZXBvcnRlZCBpbiBwcmV2aW91cyBjb2xsZWN0aW9ucy4KKyAg
ICBpZiAoaGVhcCgpLT5vcGVyYXRpb25JblByb2dyZXNzKCkgPT0gRWRlbkNvbGxlY3Rpb24gJiYg
TWFya2VkQmxvY2s6OmJsb2NrRm9yKG93bmVyKS0+aXNSZW1lbWJlcmVkKG93bmVyKSkKKyAgICAg
ICAgcmV0dXJuOworCiAgICAgc2l6ZV90KiBjb3VudGVyID0gJm1fc2hhcmVkLm1fdm0tPmhlYXAu
bV9leHRyYU1lbW9yeVVzYWdlOwogICAgIAogI2lmIEVOQUJMRShDT01QQVJFX0FORF9TV0FQKQpA
QCAtMjQ3LDYgKzI2MCwxMSBAQCBpbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6cmVwb3J0RXh0cmFN
ZW1vCiAjZW5kaWYKIH0KIAoraW5saW5lIEhlYXAqIFNsb3RWaXNpdG9yOjpoZWFwKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gJnNoYXJlZERhdGEoKS5tX3ZtLT5oZWFwOworfQorCiB9IC8vIG5hbWVz
cGFjZSBKU0MKIAogI2VuZGlmIC8vIFNsb3RWaXNpdG9ySW5saW5lc19oCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJldmlzaW9uIDE2MTQ1OCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5
LDcgQEAKICNpbmNsdWRlICJQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmgiCiAjaW5jbHVkZSAiUmVw
YXRjaEJ1ZmZlci5oIgogI2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIgorI2lu
Y2x1ZGUgIlN0YWNrQWxpZ25tZW50LmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlUmFyZURhdGFJbmxp
bmVzLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5oIgogI2lu
Y2x1ZGUgIlRodW5rR2VuZXJhdG9ycy5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVz
LmgJKHJldmlzaW9uIDE2MTQ1OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00NDcsNyAr
NDQ3LDcgQEAgdm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6dgogICAgIH0K
ICAgICAgICAgCiAgICAgY2FzZSBPdmVyc2l6ZVR5cGVkQXJyYXk6IHsKLSAgICAgICAgdmlzaXRv
ci5yZXBvcnRFeHRyYU1lbW9yeVVzYWdlKHRoaXNPYmplY3QtPmJ5dGVTaXplKCkpOworICAgICAg
ICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5VXNhZ2UodGhpc09iamVjdCwgdGhpc09iamVjdC0+
Ynl0ZVNpemUoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVy
YXRvci5oCShyZXZpc2lvbiAxNjE0NTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwOSw5ICsxMDks
OSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgcmV0dXJuIG1fZW51bWVyYXRpb25DYWNoZS5n
ZXQoKTsKICAgICB9CiAgICAgCi0gICAgaW5saW5lIHZvaWQgU3RydWN0dXJlUmFyZURhdGE6OnNl
dEVudW1lcmF0aW9uQ2FjaGUoVk0mIHZtLCBjb25zdCBTdHJ1Y3R1cmUqIG93bmVyLCBKU1Byb3Bl
cnR5TmFtZUl0ZXJhdG9yKiB2YWx1ZSkKKyAgICBpbmxpbmUgdm9pZCBTdHJ1Y3R1cmVSYXJlRGF0
YTo6c2V0RW51bWVyYXRpb25DYWNoZShWTSYgdm0sIGNvbnN0IFN0cnVjdHVyZSosIEpTUHJvcGVy
dHlOYW1lSXRlcmF0b3IqIHZhbHVlKQogICAgIHsKLSAgICAgICAgbV9lbnVtZXJhdGlvbkNhY2hl
LnNldCh2bSwgb3duZXIsIHZhbHVlKTsKKyAgICAgICAgbV9lbnVtZXJhdGlvbkNhY2hlLnNldCh2
bSwgdGhpcywgdmFsdWUpOwogICAgIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCShyZXZpc2lvbiAxNjE0NTgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTcyLDcgKzcyLDcgQEAgdm9pZCBKU1N0cmluZzo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqIGNlbAogICAgIGVsc2UgewogICAgICAgICBTdHJpbmdJbXBsKiBpbXBsID0gdGhpc09iamVj
dC0+bV92YWx1ZS5pbXBsKCk7CiAgICAgICAgIEFTU0VSVChpbXBsKTsKLSAgICAgICAgdmlzaXRv
ci5yZXBvcnRFeHRyYU1lbW9yeVVzYWdlKGltcGwtPmNvc3REdXJpbmdHQygpKTsKKyAgICAgICAg
dmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVVzYWdlKHRoaXNPYmplY3QsIGltcGwtPmNvc3REdXJp
bmdHQygpKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cnVjdHVyZVJhcmVEYXRhSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhSW5saW5lcy5oCShyZXZpc2lvbiAxNjE0
NTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YUlu
bGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsOSArMzUsOSBAQCBpbmxpbmUgU3RydWN0dXJl
KiBTdHJ1Y3R1cmVSYXJlRGF0YTo6cHJlCiAgICAgcmV0dXJuIG1fcHJldmlvdXMuZ2V0KCk7CiB9
CiAKLWlubGluZSB2b2lkIFN0cnVjdHVyZVJhcmVEYXRhOjpzZXRQcmV2aW91c0lEKFZNJiB2bSwg
U3RydWN0dXJlKiB0cmFuc2l0aW9uLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK2lubGluZSB2b2lk
IFN0cnVjdHVyZVJhcmVEYXRhOjpzZXRQcmV2aW91c0lEKFZNJiB2bSwgU3RydWN0dXJlKiwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCiB7Ci0gICAgbV9wcmV2aW91cy5zZXQodm0sIHRyYW5zaXRpb24s
IHN0cnVjdHVyZSk7CisgICAgbV9wcmV2aW91cy5zZXQodm0sIHRoaXMsIHN0cnVjdHVyZSk7CiB9
CiAKIGlubGluZSB2b2lkIFN0cnVjdHVyZVJhcmVEYXRhOjpjbGVhclByZXZpb3VzSUQoKQpAQCAt
NTAsOSArNTAsOSBAQCBpbmxpbmUgSlNTdHJpbmcqIFN0cnVjdHVyZVJhcmVEYXRhOjpvYmplCiAg
ICAgcmV0dXJuIG1fb2JqZWN0VG9TdHJpbmdWYWx1ZS5nZXQoKTsKIH0KIAotaW5saW5lIHZvaWQg
U3RydWN0dXJlUmFyZURhdGE6OnNldE9iamVjdFRvU3RyaW5nVmFsdWUoVk0mIHZtLCBjb25zdCBK
U0NlbGwqIG93bmVyLCBKU1N0cmluZyogdmFsdWUpCitpbmxpbmUgdm9pZCBTdHJ1Y3R1cmVSYXJl
RGF0YTo6c2V0T2JqZWN0VG9TdHJpbmdWYWx1ZShWTSYgdm0sIGNvbnN0IEpTQ2VsbCosIEpTU3Ry
aW5nKiB2YWx1ZSkKIHsKLSAgICBtX29iamVjdFRvU3RyaW5nVmFsdWUuc2V0KHZtLCBvd25lciwg
dmFsdWUpOworICAgIG1fb2JqZWN0VG9TdHJpbmdWYWx1ZS5zZXQodm0sIHRoaXMsIHZhbHVlKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9XZWFrTWFwRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvV2Vha01hcERhdGEuY3BwCShyZXZpc2lvbiAxNjE0NTgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9XZWFrTWFwRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0
LDcgKzY0LDcgQEAgdm9pZCBXZWFrTWFwRGF0YTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIAogICAg
IC8vIFJvdWdoIGFwcHJveGltYXRpb24gb2YgdGhlIGV4dGVybmFsIHN0b3JhZ2UgbmVlZGVkIGZv
ciB0aGUgaGFzaHRhYmxlLgogICAgIC8vIFRoaXMgaXNuJ3QgZXhhY3QsIGJ1dCBpdCBpcyBjbG9z
ZSBlbm91Z2gsIGFuZCBwcm9wb3J0aW9uYWwgdG8gdGhlIGFjdHVhbAogICAgIC8vIGV4dGVybmFs
IG1lcm1vcnkgdXNhZ2UuCi0gICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVVzYWdlKHRoaXNP
YmotPm1fbWFwLmNhcGFjaXR5KCkgKiAoc2l6ZW9mKEpTT2JqZWN0KikgKyBzaXplb2YoV3JpdGVC
YXJyaWVyPFVua25vd24+KSkpOworICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlVc2FnZSh0
aGlzT2JqLCB0aGlzT2JqLT5tX21hcC5jYXBhY2l0eSgpICogKHNpemVvZihKU09iamVjdCopICsg
c2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpKTsKIH0KIAogdm9pZCBXZWFrTWFwRGF0YTo6
c2V0KFZNJiB2bSwgSlNPYmplY3QqIGtleSwgSlNWYWx1ZSB2YWx1ZSkKSW5kZXg6IFNvdXJjZS9X
VEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lv
biAxNjE0NzApCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE0IEBACisyMDE0LTAxLTA3ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBs
ZS5jb20+CisKKyAgICAgICAgTWFya2luZyBzaG91bGQgYmUgZ2VuZXJhdGlvbmFsCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjY1NTIKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHd0Zi9CaXRtYXAuaDoK
KyAgICAgICAgKFdURjo6V29yZFR5cGU+Ojpjb3VudCk6IEFkZGVkIGEgY2FzdCB0aGF0IGJlY2Ft
ZSBuZWNlc3Nhcnkgd2hlbiBCaXRtYXAKKyAgICAgICAgaXMgdXNlZCB3aXRoIHNtYWxsZXIgdHlw
ZXMgdGhhbiBpbnQzMl90LgorCiAyMDE0LTAxLTA3ICBEYXZpZCBGYXJsZXIgIDxkZmFybGVyQGFw
cGxlLmNvbT4KIAogICAgICAgICBbQVNBTl0gQnVpbGRpbmcgd2l0aCB0cnVuayBjbGFuZyBjb3Jy
dXB0cyBzYW5kYm94IHByb2ZpbGUgd2l0aCBjb21tZW50IGZyb20gQ29tcGlsZXIuaApJbmRleDog
U291cmNlL1dURi93dGYvQml0bWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQml0
bWFwLmgJKHJldmlzaW9uIDE2MTQ1OCkKKysrIFNvdXJjZS9XVEYvd3RmL0JpdG1hcC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xOTYsNyArMTk2LDcgQEAgaW5saW5lIHNpemVfdCBCaXRtYXA8c2l6ZSwg
YXRvbWljTW9kZSwgVwogICAgICAgICAgICAgKytyZXN1bHQ7CiAgICAgfQogICAgIGZvciAoc2l6
ZV90IGkgPSBzdGFydCAvIHdvcmRTaXplOyBpIDwgd29yZHM7ICsraSkKLSAgICAgICAgcmVzdWx0
ICs9IFdURjo6Yml0Q291bnQoYml0c1tpXSk7CisgICAgICAgIHJlc3VsdCArPSBXVEY6OmJpdENv
dW50KHN0YXRpY19jYXN0PHVuc2lnbmVkPihiaXRzW2ldKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAo=
</data>
<flag name="review"
          id="244309"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>