<?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>162887</bug_id>
          
          <creation_ts>2016-10-03 21:00:55 -0700</creation_ts>
          <short_desc>String.prototype.toLowerCase should be a DFG/FTL intrinsic</short_desc>
          <delta_ts>2016-10-04 23:18:53 -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 Local 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>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>ticaiolima</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1236060</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-10-03 21:00:55 -0700</bug_when>
    <thetext>This is around a 7% speedup on ES6SampleBench/Basic. I also suspect it might help other things like Dromaeo.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1236061</commentid>
    <comment_count>1</comment_count>
      <attachid>290563</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-10-03 21:01:46 -0700</bug_when>
    <thetext>Created attachment 290563
WIP

This is the gist of the patch, but needs some cleanup and possibly some better rules for Clobberize. I think it&apos;s probably valid to CSE toLowerCase().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1236430</commentid>
    <comment_count>2</comment_count>
      <attachid>290662</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-10-04 16:18:31 -0700</bug_when>
    <thetext>Created attachment 290662
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1236442</commentid>
    <comment_count>3</comment_count>
      <attachid>290666</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-10-04 16:29:59 -0700</bug_when>
    <thetext>Created attachment 290666
patch

rebased</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1236444</commentid>
    <comment_count>4</comment_count>
      <attachid>290662</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-10-04 16:32:38 -0700</bug_when>
    <thetext>Comment on attachment 290662
patch

What happens when code does: String.prototype.toLowerCase = function() { return this; };</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1236447</commentid>
    <comment_count>5</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-10-04 16:36:52 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Comment on attachment 290662 [details]
&gt; patch
&gt; 
&gt; What happens when code does: String.prototype.toLowerCase = function() {
&gt; return this; };

The intrinsic is tied to the primordial function we instantiate for this property, not the property path &quot;String.prototype.toLowerCase&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1236453</commentid>
    <comment_count>6</comment_count>
      <attachid>290666</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-10-04 16:46:03 -0700</bug_when>
    <thetext>Comment on attachment 290666
patch

so awesome.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1236462</commentid>
    <comment_count>7</comment_count>
      <attachid>290666</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-10-04 17:05:22 -0700</bug_when>
    <thetext>Comment on attachment 290666
patch

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

r=me too.

&gt; Source/JavaScriptCore/ChangeLog:8
&gt; +        This patch makes ToLowerCase an intrinsic in the DFG/FTL. On the fast

It is nice if we can handle the similar intrinsic in toUpperCase() in the separated patch.

&gt; Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h:1010
&gt; +        break;

OK, target is already filtered with SpecString. So it does not clobber.

&gt; Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h:1011
&gt; +    }

And we have a chance to emit LazyJSValue if the given child is constant-folded in StrengthReduction phase.

&gt; Source/JavaScriptCore/dfg/DFGClobberize.h:1297
&gt; +        return;

Nice.

&gt; Source/WTF/wtf/text/StringImpl.h:685
&gt; +    WTF_EXPORT_STRING_API Ref&lt;StringImpl&gt; convertToLowercaseWithoutLocaleStartingAtFailingIndex(unsigned);

Let&apos;s include some word indicating that this function is only effective for 8bit. Maybe, &quot;8Bit&quot; ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1236493</commentid>
    <comment_count>8</comment_count>
      <attachid>290666</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-10-04 18:17:22 -0700</bug_when>
    <thetext>Comment on attachment 290666
patch

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

&gt;&gt; Source/WTF/wtf/text/StringImpl.h:685
&gt;&gt; +    WTF_EXPORT_STRING_API Ref&lt;StringImpl&gt; convertToLowercaseWithoutLocaleStartingAtFailingIndex(unsigned);
&gt; 
&gt; Let&apos;s include some word indicating that this function is only effective for 8bit. Maybe, &quot;8Bit&quot; ?

Sounds good. I&apos;ll make it: convertToLowercaseWithoutLocaleStartingAtFailingIndex8Bit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1236495</commentid>
    <comment_count>9</comment_count>
      <attachid>290676</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-10-04 18:27:34 -0700</bug_when>
    <thetext>Created attachment 290676
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1236496</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-10-04 18:29:21 -0700</bug_when>
    <thetext>Attachment 290676 did not pass style-queue:


ERROR: Source/JavaScriptCore/ChangeLog:7:  Line contains tab character.  [whitespace/tab] [5]
Total errors found: 1 in 29 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>1236535</commentid>
    <comment_count>11</comment_count>
      <attachid>290689</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-10-04 22:31:50 -0700</bug_when>
    <thetext>Created attachment 290689
patch for landing v2

Fix changelog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1236540</commentid>
    <comment_count>12</comment_count>
      <attachid>290689</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-10-04 23:18:47 -0700</bug_when>
    <thetext>Comment on attachment 290689
patch for landing v2

Clearing flags on attachment: 290689

Committed r206804: &lt;http://trac.webkit.org/changeset/206804&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1236541</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-10-04 23:18:53 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>290563</attachid>
            <date>2016-10-03 21:01:46 -0700</date>
            <delta_ts>2016-10-04 16:18:31 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>17434</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvRVM2U2FtcGxlQmVuY2gvY2xpLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFBlcmZvcm1hbmNlVGVzdHMvRVM2U2FtcGxlQmVuY2gvY2xpLmpzCShyZXZpc2lvbiAyMDY3
NjQpCisrKyBQZXJmb3JtYW5jZVRlc3RzL0VTNlNhbXBsZUJlbmNoL2NsaS5qcwkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDQgQEAKIGNvbnN0IGlzSW5Ccm93c2VyID0gZmFsc2U7Ci0KIGZ1bmN0
aW9uIG1ha2VCZW5jaG1hcmtSdW5uZXIoc291cmNlcywgYmVuY2htYXJrQ29uc3RydWN0b3IpIHsK
ICAgICBsZXQgc291cmNlID0gIid1c2Ugc3RyaWN0JzsiCiAgICAgZm9yIChsZXQgZmlsZSBvZiBz
b3VyY2VzKSB7CkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0VTNlNhbXBsZUJlbmNoL2dsdWUuanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9FUzZTYW1wbGVCZW5jaC9nbHVlLmpzCShy
ZXZpc2lvbiAyMDY3NjQpCisrKyBQZXJmb3JtYW5jZVRlc3RzL0VTNlNhbXBsZUJlbmNoL2dsdWUu
anMJKHdvcmtpbmcgY29weSkKQEAgLTM1LDUgKzM1LDUgQEAgZnVuY3Rpb24gcmVwb3J0UmVzdWx0
KC4uLmFyZ3MpIHsKICAgICBkcml2ZXIucmVwb3J0UmVzdWx0KC4uLmFyZ3MpOwogfQogCi1kcml2
ZXIuYWRkQmVuY2htYXJrKEFpckJlbmNobWFya1J1bm5lcik7CisvL2RyaXZlci5hZGRCZW5jaG1h
cmsoQWlyQmVuY2htYXJrUnVubmVyKTsKIGRyaXZlci5hZGRCZW5jaG1hcmsoQmFzaWNCZW5jaG1h
cmtSdW5uZXIpOwpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9FUzZTYW1wbGVCZW5jaC9CYXNpYy9z
dHJlc3MtdGVzdC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0VTNlNhbXBsZUJl
bmNoL0Jhc2ljL3N0cmVzcy10ZXN0LmpzCShyZXZpc2lvbiAyMDY3NjQpCisrKyBQZXJmb3JtYW5j
ZVRlc3RzL0VTNlNhbXBsZUJlbmNoL0Jhc2ljL3N0cmVzcy10ZXN0LmpzCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDQgKzEsNSBAQAogLyoKKyAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklu
bGluZXMuaAkocmV2aXNpb24gMjA2NzY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDA1LDYg
KzEwMDUsMTIgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAg
ICAgICBicmVhazsKICAgICB9CiAKKyAgICBjYXNlIFRvTG93ZXJDYXNlOiB7CisgICAgICAgIGNs
b2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7CisgICAgICAg
IGZvck5vZGUobm9kZSkuc2V0VHlwZShtX2dyYXBoLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorCiAgICAgY2FzZSBMb2FkRnJvbUpTTWFwQnVja2V0OgogICAgICAgICBmb3JO
b2RlKG5vZGUpLm1ha2VIZWFwVG9wKCk7CiAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDIw
Njc2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNTgwLDYgKzI1ODAsMTcgQEAgYm9vbCBCeXRlQ29kZVBhcnNl
cjo6aGFuZGxlSW50cmluc2ljQ2FsbAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKKyAg
ICBjYXNlIFRvTG93ZXJDYXNlSW50cmluc2ljOiB7CisgICAgICAgIGlmIChhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyAhPSAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAg
IGluc2VydENoZWNrcygpOworICAgICAgICBOb2RlKiB0aGlzU3RyaW5nID0gZ2V0KHZpcnR1YWxS
ZWdpc3RlckZvckFyZ3VtZW50KDAsIHJlZ2lzdGVyT2Zmc2V0KSk7CisgICAgICAgIE5vZGUqIHJl
c3VsdCA9IGFkZFRvR3JhcGgoVG9Mb3dlckNhc2UsIHRoaXNTdHJpbmcpOworICAgICAgICBzZXQo
VmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLCByZXN1bHQpOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHJldmlz
aW9uIDIwNjc2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjg5LDYgKzEyODksMTIgQEAgdm9pZCBjbG9iYmVyaXplKEdy
YXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgICAgICByZWFkKE1pc2NGaWVsZHMpOwogICAgICAg
ICBkZWYoSGVhcExvY2F0aW9uKE1hcEhhc0xvYywgTWlzY0ZpZWxkcywgbm9kZS0+Y2hpbGQxKCkp
LCBMYXp5Tm9kZShub2RlKSk7CiAgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgVG9Mb3dlckNh
c2U6CisgICAgICAgIC8vIEZJWE1FOiB0aGlzIGlzIG5vdCB0cnVlLgorICAgICAgICByZWFkKFdv
cmxkKTsKKyAgICAgICAgd3JpdGUoSGVhcCk7CisgICAgICAgIHJldHVybjsKICAgICAgICAgCiAg
ICAgY2FzZSBMYXN0Tm9kZVR5cGU6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCShyZXZpc2lv
biAyMDY3NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI5MCw2ICsyOTAsNyBAQCBib29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgs
IE5vZGUqIG5vZGUpCiAgICAgY2FzZSBTdHJpbmdSZXBsYWNlOgogICAgIGNhc2UgU3RyaW5nUmVw
bGFjZVJlZ0V4cDoKICAgICBjYXNlIENyZWF0ZVJlc3Q6CisgICAgY2FzZSBUb0xvd2VyQ2FzZToK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIAogICAgIGNhc2UgTXVsdGlQdXRCeU9mZnNl
dDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAko
cmV2aXNpb24gMjA2NzY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBo
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY0OSw2ICsxNjQ5LDExIEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCisgICAgICAgIGNhc2UgVG9Mb3dlckNhc2U6
IHsKKyAgICAgICAgICAgIGZpeEVkZ2U8U3RyaW5nVXNlPihub2RlLT5jaGlsZDEoKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgICAg
ICAvLyBIYXZlIHRoZXNlIG5vLW9wIGNhc2VzIGhlcmUgdG8gZW5zdXJlIHRoYXQgbm9ib2R5IGZv
cmdldHMgdG8gYWRkIGhhbmRsZXJzIGZvciBuZXcgb3Bjb2Rlcy4KICAgICAgICAgY2FzZSBTZXRB
cmd1bWVudDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJl
dmlzaW9uIDIwNjc2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMzk0LDYgKzM5NCw4IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKICAgICBtYWNybyhHZXRNYXBCdWNrZXQsIE5vZGVSZXN1bHRKUykgXAogICAg
IG1hY3JvKExvYWRGcm9tSlNNYXBCdWNrZXQsIE5vZGVSZXN1bHRKUykgXAogICAgIG1hY3JvKElz
Tm9uRW1wdHlNYXBCdWNrZXQsIE5vZGVSZXN1bHRCb29sZWFuKSBcCisgICAgXAorICAgIG1hY3Jv
KFRvTG93ZXJDYXNlLCBOb2RlUmVzdWx0SlMpIFwKIAogLy8gVGhpcyBlbnVtIGdlbmVyYXRlcyBh
IG1vbm90b25pY2FsbHkgaW5jcmVhc2luZyBpZCBmb3IgYWxsIE5vZGUgdHlwZXMsCiAvLyBhbmQg
aXMgdXNlZCBieSB0aGUgc3Vic2VxdWVudCBlbnVtIHRvIGZpbGwgb3V0IHRoZSBpZCAoYXMgYWNj
ZXNzZWQgdmlhIHRoZSBOb2RlSWRNYXNrKS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjA2NzY0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQyMSw2
ICsxNDIxLDIxIEBAIFN0cmluZ0ltcGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVzb2wKICAg
ICByZXR1cm4gc3RyaW5nLT52YWx1ZShleGVjKS5pbXBsKCk7CiB9CiAKK1N0cmluZ0ltcGwqIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uVG9Mb3dlckNhc2UoRXhlY1N0YXRlKiBleGVjLCBKU1N0cmlu
Zyogc3RyaW5nKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworCisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworCisgICAgY29uc3QgU3RyaW5nJiBzID0gc3RyaW5nLT52YWx1ZShl
eGVjKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKKyAgICBTdHJp
bmcgbG93ZXJjYXNlZFN0cmluZyA9IHMuY29udmVydFRvTG93ZXJjYXNlV2l0aG91dExvY2FsZSgp
OworICAgIGlmIChsb3dlcmNhc2VkU3RyaW5nLmltcGwoKSA9PSBzLmltcGwoKSkKKyAgICAgICAg
cmV0dXJuIGJpdHdpc2VfY2FzdDxTdHJpbmdJbXBsKj4oc3RyaW5nKTsKKyAgICByZXR1cm4gYml0
d2lzZV9jYXN0PFN0cmluZ0ltcGwqPihqc1N0cmluZyhleGVjLCBsb3dlcmNhc2VkU3RyaW5nKSk7
Cit9CisKIEpTU3RyaW5nKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblNpbmdsZUNoYXJhY3RlclN0
cmluZyhFeGVjU3RhdGUqIGV4ZWMsIGludDMyX3QgY2hhcmFjdGVyKQogewogICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlv
bnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlv
bnMuaAkocmV2aXNpb24gMjA2NzY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
cGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0Nyw2ICsxNDcsOSBAQCBjaGFyKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZUFycmF5CiBTdHJpbmdJbXBsKiBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblJlc29sdmVSb3BlKEV4ZWNTdGF0ZSosIEpTU3RyaW5nKik7CiBKU1N0cmluZyog
SklUX09QRVJBVElPTiBvcGVyYXRpb25TaW5nbGVDaGFyYWN0ZXJTdHJpbmcoRXhlY1N0YXRlKiwg
aW50MzJfdCk7CiAKKy8vIEZJWE1FOiBMaWUgYWJvdXQgcmV0dXJuIHR5cGUgZm9yIG5vdworU3Ry
aW5nSW1wbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25Ub0xvd2VyQ2FzZShFeGVjU3RhdGUqLCBK
U1N0cmluZyopOworCiBpbnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTWFwSGFzaChFeGVj
U3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBpbnB1dCk7CiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uSlNNYXBGaW5kQnVja2V0KEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVl
LCBpbnQzMl90KTsKIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25KU1NldEZpbmRCdWNr
ZXQoRXhlY1N0YXRlKiwgSlNDZWxsKiwgRW5jb2RlZEpTVmFsdWUsIGludDMyX3QpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9u
UHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDIwNjc2NCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03NTQsNiArNzU0LDExIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBzZXRQcmVkaWN0
aW9uKFNwZWNJbnQzMk9ubHkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKworICAg
ICAgICBjYXNlIFRvTG93ZXJDYXNlOgorICAgICAgICAgICAgc2V0UHJlZGljdGlvbihTcGVjU3Ry
aW5nKTsKKyAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAgIGNhc2UgQXJpdGhQb3c6CiAgICAg
ICAgIGNhc2UgQXJpdGhTcXJ0OgogICAgICAgICBjYXNlIEFyaXRoRlJvdW5kOgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHJldmlzaW9uIDIw
Njc2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNTksNiArMzU5LDcgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3Ry
YWN0U3RhdGVUeXBlJiBzdAogICAgIGNhc2UgUHV0RHluYW1pY1ZhcjoKICAgICBjYXNlIFJlc29s
dmVTY29wZToKICAgICBjYXNlIE1hcEhhc2g6CisgICAgY2FzZSBUb0xvd2VyQ2FzZToKICAgICBj
YXNlIEdldE1hcEJ1Y2tldDoKICAgICBjYXNlIExvYWRGcm9tSlNNYXBCdWNrZXQ6CiAgICAgY2Fz
ZSBJc05vbkVtcHR5TWFwQnVja2V0OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAyMDY3NjQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00ODc4LDYgKzQ4NzgsNTcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAgICB9CiAKKyAgICBjYXNlIFRvTG93ZXJDYXNl
OiB7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHN0cmluZyh0aGlzLCBub2RlLT5jaGls
ZDEoKSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOworICAgICAgICBHUFJUZW1w
b3JhcnkgaW5kZXgodGhpcyk7CisgICAgICAgIEdQUlRlbXBvcmFyeSBjaGFyUmVnKHRoaXMpOwor
CisgICAgICAgIEdQUlJlZyBzdHJpbmdHUFIgPSBzdHJpbmcuZ3ByKCk7CisgICAgICAgIEdQUlJl
ZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGkgPSBpbmRleC5ncHIoKTsK
KyAgICAgICAgR1BSUmVnIGNoYXJHUFIgPSBjaGFyUmVnLmdwcigpOworCisgICAgICAgIHNwZWN1
bGF0ZVN0cmluZyhub2RlLT5jaGlsZDEoKSwgc3RyaW5nR1BSKTsKKworICAgICAgICBDQ2FsbEhl
bHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOworCisgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc3RyaW5nR1BSLCBKU1N0cmluZzo6b2Zmc2V0T2ZWYWx1ZSgpKSwg
dGVtcEdQUik7CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0UHRyKE1h
Y3JvQXNzZW1ibGVyOjpaZXJvLCB0ZW1wR1BSKSk7CisKKyAgICAgICAgc2xvd1BhdGguYXBwZW5k
KG1faml0LmJyYW5jaFRlc3QzMigKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wR1BSLCBTdHJpbmdJbXBsOjpmbGFnc09mZnNldCgp
KSwKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoU3RyaW5nSW1wbDo6
ZmxhZ0lzOEJpdCgpKSkpOworICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3ModGVtcEdQUiwgU3RyaW5nSW1wbDo6bGVuZ3RoTWVtb3J5T2Zmc2V0KCkpLCBpKTsKKyAg
ICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wR1BSLCBTdHJp
bmdJbXBsOjpkYXRhT2Zmc2V0KCkpLCB0ZW1wR1BSKTsKKworICAgICAgICBhdXRvIGxvb3BTdGFy
dCA9IG1faml0LmxhYmVsKCk7CisgICAgICAgIGF1dG8gbG9vcERvbmUgPSBtX2ppdC5icmFuY2hU
ZXN0MzIoQ0NhbGxIZWxwZXJzOjpaZXJvLCBpKTsKKyAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3Rl
ZEltbTMyKDEpLCBpKTsKKyAgICAgICAgbV9qaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJ
bmRleCh0ZW1wR1BSLCBpLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNPbmUpLCBjaGFyR1BSKTsKKyAg
ICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaFRlc3QzMihDQ2FsbEhlbHBlcnM6Ok5v
blplcm8sCisgICAgICAgICAgICBjaGFyR1BSLCBUcnVzdGVkSW1tMzIofjB4N0YpKSk7CisgICAg
ICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMignQScpLCBjaGFyR1BSKTsKKyAgICAgICAgc2xv
d1BhdGguYXBwZW5kKG1faml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QmVsb3dPckVxdWFsLAor
ICAgICAgICAgICAgY2hhckdQUiwgVHJ1c3RlZEltbTMyKCdaJyAtICdBJykpKTsKKworICAgICAg
ICBtX2ppdC5qdW1wKCkubGlua1RvKGxvb3BTdGFydCwgJm1faml0KTsKKyAgICAgICAgCisgICAg
ICAgIHNsb3dQYXRoLmxpbmsoJm1faml0KTsKKyAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3Rl
cnMoaSk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVG9Mb3dlckNhc2UsIGksIHN0
cmluZ0dQUik7CisgICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMoaSk7CisgICAgICAgIG1f
aml0LmV4Y2VwdGlvbkNoZWNrKCk7CisgICAgICAgIGF1dG8gZG9uZSA9IG1faml0Lmp1bXAoKTsK
KworICAgICAgICBsb29wRG9uZS5saW5rKCZtX2ppdCk7CisgICAgICAgIG1faml0Lm1vdmUoc3Ry
aW5nR1BSLCBpKTsKKworICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICAgICAgY2VsbFJl
c3VsdChpLCBub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCiAgICAgY2FzZSBJc09iamVj
dDogewogICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7
CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgUmV1c2UsIHZhbHVlKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVw
b3NpdG9yeS5oCShyZXZpc2lvbiAyMDY3NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDYgKzEw
MSw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKICAgICBtYWNybyhTY29wZWRB
cmd1bWVudHNUYWJsZV9sZW5ndGgsIFNjb3BlZEFyZ3VtZW50c1RhYmxlOjpvZmZzZXRPZkxlbmd0
aCgpKSBcCiAgICAgbWFjcm8oU3RyaW5nSW1wbF9kYXRhLCBTdHJpbmdJbXBsOjpkYXRhT2Zmc2V0
KCkpIFwKICAgICBtYWNybyhTdHJpbmdJbXBsX2hhc2hBbmRGbGFncywgU3RyaW5nSW1wbDo6Zmxh
Z3NPZmZzZXQoKSkgXAorICAgIG1hY3JvKFN0cmluZ0ltcGxfbGVuZ3RoLCBTdHJpbmdJbXBsOjps
ZW5ndGhNZW1vcnlPZmZzZXQoKSkgXAogICAgIG1hY3JvKFN0cnVjdHVyZV9jbGFzc0luZm8sIFN0
cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpIFwKICAgICBtYWNybyhTdHJ1Y3R1cmVfZ2xvYmFs
T2JqZWN0LCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSBcCiAgICAgbWFjcm8oU3Ry
dWN0dXJlX3Byb3RvdHlwZSwgU3RydWN0dXJlOjpwcm90b3R5cGVPZmZzZXQoKSkgXApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNp
b24gMjA2NzY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjMsNiArMjYzLDcgQEAgaW5saW5lIENhcGFiaWxpdHlM
ZXZlbCBjYW5Db21waWxlKE5vZGUqIAogICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXI6CiAgICAgY2Fz
ZSBDb21wYXJlR3JlYXRlckVxOgogICAgIGNhc2UgQ29tcGFyZVN0cmljdEVxOgorICAgIGNhc2Ug
VG9Mb3dlckNhc2U6CiAgICAgICAgIC8vIFRoZXNlIGFyZSBPSy4KICAgICAgICAgYnJlYWs7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJ
KHJldmlzaW9uIDIwNjc2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJE
RkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAzNyw2ICsxMDM3LDkgQEAgcHJpdmF0ZToK
ICAgICAgICAgY2FzZSBVbnJlYWNoYWJsZToKICAgICAgICAgICAgIGNvbXBpbGVVbnJlYWNoYWJs
ZSgpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVG9Mb3dlckNhc2U6CisgICAg
ICAgICAgICBjb21waWxlVG9Mb3dlckNhc2UoKTsKKyAgICAgICAgICAgIGJyZWFrOwogCiAgICAg
ICAgIGNhc2UgUGhhbnRvbUxvY2FsOgogICAgICAgICBjYXNlIExvb3BIaW50OgpAQCAtODU1Miw2
ICs4NTU1LDYxIEBAIHByaXZhdGU6CiAgICAgICAgIG5vblNwZWN1bGF0aXZlQ29tcGFyZShpbnRG
dW5jdG9yLCBmYWxsYmFja0Z1bmN0aW9uKTsKICAgICB9CiAKKyAgICB2b2lkIGNvbXBpbGVUb0xv
d2VyQ2FzZSgpCisgICAgeworICAgICAgICBMQmFzaWNCbG9jayBub3RSb3BlID0gbV9vdXQubmV3
QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgaXM4Qml0ID0gbV9vdXQubmV3QmxvY2soKTsK
KyAgICAgICAgTEJhc2ljQmxvY2sgbG9vcFRvcCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAg
IExCYXNpY0Jsb2NrIGxvb3BCb2R5ID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2lj
QmxvY2sgdmFsaWRSYW5nZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2Nr
IHNsb3dQYXRoID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGlu
dWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKKworICAgICAgICBMVmFsdWUgc3RyaW5nID0gbG93
U3RyaW5nKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBMVmFsdWUgaW1wbCA9IG1fb3V0Lmxv
YWRQdHIoc3RyaW5nLCBtX2hlYXBzLkpTU3RyaW5nX3ZhbHVlKTsKKyAgICAgICAgbV9vdXQuYnJh
bmNoKG1fb3V0LmlzWmVybzY0KGltcGwpLAorICAgICAgICAgICAgdW5zdXJlKHNsb3dQYXRoKSwg
dW5zdXJlKG5vdFJvcGUpKTsKKworICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0
LmFwcGVuZFRvKG5vdFJvcGUsIGlzOEJpdCk7CisKKyAgICAgICAgbV9vdXQuYnJhbmNoKAorICAg
ICAgICAgICAgbV9vdXQudGVzdElzWmVybzMyKAorICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQz
MihpbXBsLCBtX2hlYXBzLlN0cmluZ0ltcGxfaGFzaEFuZEZsYWdzKSwKKyAgICAgICAgICAgICAg
ICBtX291dC5jb25zdEludDMyKFN0cmluZ0ltcGw6OmZsYWdJczhCaXQoKSkpLAorICAgICAgICAg
ICAgdW5zdXJlKHNsb3dQYXRoKSwgdW5zdXJlKGlzOEJpdCkpOworCisgICAgICAgIG1fb3V0LmFw
cGVuZFRvKGlzOEJpdCwgbG9vcFRvcCk7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIGxlbmd0aCA9
IG1fb3V0LmFuY2hvcihtX291dC5sb2FkMzIoaW1wbCwgbV9oZWFwcy5TdHJpbmdJbXBsX2xlbmd0
aCkpOworICAgICAgICBMVmFsdWUgYnVmZmVyID0gbV9vdXQubG9hZFB0cihpbXBsLCBtX2hlYXBz
LlN0cmluZ0ltcGxfZGF0YSk7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RSZXN1bHQgPSBt
X291dC5hbmNob3Ioc3RyaW5nKTsKKyAgICAgICAgbV9vdXQuanVtcChsb29wVG9wKTsKKworICAg
ICAgICBtX291dC5hcHBlbmRUbyhsb29wVG9wLCBsb29wQm9keSk7CisgICAgICAgIExWYWx1ZSBp
bmRleEF0TG9vcFRvcCA9IG1fb3V0LnBoaShJbnQzMiwgbGVuZ3RoKTsKKyAgICAgICAgbV9vdXQu
YnJhbmNoKG1fb3V0Lm5vdFplcm8zMihpbmRleEF0TG9vcFRvcCksCisgICAgICAgICAgICB1bnN1
cmUobG9vcEJvZHkpLCB1bnN1cmUoY29udGludWF0aW9uKSk7CisKKyAgICAgICAgbV9vdXQuYXBw
ZW5kVG8obG9vcEJvZHksIHZhbGlkUmFuZ2UpOworICAgICAgICBMVmFsdWUgaW5kZXggPSBtX291
dC5zdWIoaW5kZXhBdExvb3BUb3AsIG1fb3V0LmludDMyT25lKTsKKyAgICAgICAgbV9vdXQuYWRk
SW5jb21pbmdUb1BoaShpbmRleEF0TG9vcFRvcCwgbV9vdXQuYW5jaG9yKGluZGV4KSk7CisKKyAg
ICAgICAgTFZhbHVlIGJ5dGUgPSBtX291dC5sb2FkOFplcm9FeHQzMihtX291dC5iYXNlSW5kZXgo
bV9oZWFwcy5jaGFyYWN0ZXJzOCwgYnVmZmVyLCBtX291dC56ZXJvRXh0UHRyKGluZGV4KSkpOwor
CisgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5ub3RaZXJvMzIobV9vdXQuYml0QW5kKGJ5dGUs
IG1fb3V0LmNvbnN0SW50MzIofjB4N0YpKSksCisgICAgICAgICAgICB1bnN1cmUoc2xvd1BhdGgp
LCB1bnN1cmUodmFsaWRSYW5nZSkpOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKHZhbGlkUmFu
Z2UsIHNsb3dQYXRoKTsKKyAgICAgICAgTFZhbHVlIGlzVXBwZXJDYXNlID0gbV9vdXQuYmVsb3dP
ckVxdWFsKG1fb3V0LnN1YihieXRlLCBtX291dC5jb25zdEludDMyKCdBJykpLCBtX291dC5jb25z
dEludDMyKCdaJyAtICdBJykpOworICAgICAgICBtX291dC5icmFuY2goaXNVcHBlckNhc2UsIHVu
c3VyZShzbG93UGF0aCksIHVuc3VyZShsb29wVG9wKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5k
VG8oc2xvd1BhdGgsIGNvbnRpbnVhdGlvbik7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dS
ZXN1bHQgPSBtX291dC5hbmNob3Iodm1DYWxsKHBvaW50ZXJUeXBlKCksIG1fb3V0Lm9wZXJhdGlv
bihvcGVyYXRpb25Ub0xvd2VyQ2FzZSksIG1fY2FsbEZyYW1lLCBzdHJpbmcpKTsKKyAgICAgICAg
bV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRp
bnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBoaShwb2ludGVy
VHlwZSgpLCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0KSk7CisgICAgfQorCiAgICAgdm9pZCBjb21w
aWxlUmVzb2x2ZVNjb3BlKCkKICAgICB7CiAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQg
PSBtX2dyYXBoLmlkZW50aWZpZXJzKClbbV9ub2RlLT5pZGVudGlmaWVyTnVtYmVyKCldOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50cmluc2ljLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50cmluc2ljLmgJKHJldmlzaW9uIDIw
Njc2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludHJpbnNpYy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02NSw2ICs2NSw3IEBAIGVudW0gSlNfRVhQT1JUX1BSSVZBVEUgSW50cmlu
c2ljIHsKICAgICBKU01hcEhhc0ludHJpbnNpYywKICAgICBKU1NldEhhc0ludHJpbnNpYywKICAg
ICBIYXNPd25Qcm9wZXJ0eUludHJpbnNpYywKKyAgICBUb0xvd2VyQ2FzZUludHJpbnNpYywKIAog
ICAgIC8vIEdldHRlciBpbnRyaW5zaWNzLgogICAgIFR5cGVkQXJyYXlMZW5ndGhJbnRyaW5zaWMs
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3Rv
dHlwZS5jcHAJKHJldmlzaW9uIDIwNjc2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0Miw3ICsxNDIsNyBA
QCB2b2lkIFN0cmluZ1Byb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mCiAgICAgSlNDX05BVElW
RV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04oInNsaWNlIiwgc3RyaW5nUHJvdG9GdW5jU2xp
Y2UsIERvbnRFbnVtLCAyKTsKICAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJ
VElPTigic3Vic3RyIiwgc3RyaW5nUHJvdG9GdW5jU3Vic3RyLCBEb250RW51bSwgMik7CiAgICAg
SlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04oInN1YnN0cmluZyIsIHN0cmlu
Z1Byb3RvRnVuY1N1YnN0cmluZywgRG9udEVudW0sIDIpOwotICAgIEpTQ19OQVRJVkVfRlVOQ1RJ
T05fV0lUSE9VVF9UUkFOU0lUSU9OKCJ0b0xvd2VyQ2FzZSIsIHN0cmluZ1Byb3RvRnVuY1RvTG93
ZXJDYXNlLCBEb250RW51bSwgMCk7CisgICAgSlNDX05BVElWRV9JTlRSSU5TSUNfRlVOQ1RJT05f
V0lUSE9VVF9UUkFOU0lUSU9OKCJ0b0xvd2VyQ2FzZSIsIHN0cmluZ1Byb3RvRnVuY1RvTG93ZXJD
YXNlLCBEb250RW51bSwgMCwgVG9Mb3dlckNhc2VJbnRyaW5zaWMpOwogICAgIEpTQ19OQVRJVkVf
RlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKCJ0b1VwcGVyQ2FzZSIsIHN0cmluZ1Byb3RvRnVu
Y1RvVXBwZXJDYXNlLCBEb250RW51bSwgMCk7CiAjaWYgRU5BQkxFKElOVEwpCiAgICAgSlNDX0JV
SUxUSU5fRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKCJsb2NhbGVDb21wYXJlIiwgc3RyaW5n
UHJvdG90eXBlTG9jYWxlQ29tcGFyZUNvZGVHZW5lcmF0b3IsIERvbnRFbnVtKTsKQEAgLTEzNDMs
MTQgKzEzNDMsMjggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwog
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogCisgICAgLy9zdGF0aWMgZG91YmxlIG51bUVudHJ5ID0gMC4wOworICAgIC8v
c3RhdGljIGRvdWJsZSBudW1TYW1lID0gMC4wOworICAgIC8vc3RhdGljIGRvdWJsZSBudW1Sb3Bl
ID0gMC4wOworICAgIC8vKytudW1FbnRyeTsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMt
PnRoaXNWYWx1ZSgpOwogICAgIGlmICghY2hlY2tPYmplY3RDb2VyY2libGUodGhpc1ZhbHVlKSkK
ICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOworICAgIC8vaWYg
KHRoaXNWYWx1ZS5pc1N0cmluZygpKSB7CisgICAgLy8gICAgSlNTdHJpbmcqIHMgPSBqc0Nhc3Q8
SlNTdHJpbmcqPih0aGlzVmFsdWUpOworICAgIC8vICAgIGlmICghcy0+dHJ5R2V0VmFsdWVJbXBs
KCkpIHsKKyAgICAvLyAgICAgICAgKytudW1Sb3BlOworICAgIC8vICAgICAgICBkYXRhTG9nKCJy
b3BlIHJhdGlvOiAiLCBudW1Sb3BlL251bUVudHJ5LCAiXG4iKTsKKyAgICAvLyAgICB9IAorICAg
IC8vfQogICAgIEpTU3RyaW5nKiBzVmFsID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpOwogICAg
IGNvbnN0IFN0cmluZyYgcyA9IHNWYWwtPnZhbHVlKGV4ZWMpOwogICAgIFN0cmluZyBsb3dlcmNh
c2VkU3RyaW5nID0gcy5jb252ZXJ0VG9Mb3dlcmNhc2VXaXRob3V0TG9jYWxlKCk7Ci0gICAgaWYg
KGxvd2VyY2FzZWRTdHJpbmcuaW1wbCgpID09IHMuaW1wbCgpKQorICAgIGlmIChsb3dlcmNhc2Vk
U3RyaW5nLmltcGwoKSA9PSBzLmltcGwoKSkgeworICAgICAgICAvL251bVNhbWUrKzsKKyAgICAg
ICAgLy9kYXRhTG9nKCJyYXRpbzogIiwgbnVtU2FtZS9udW1FbnRyeSwgIlxuIik7CiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoc1ZhbCk7CisgICAgfQogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNTdHJpbmcoZXhlYywgbG93ZXJjYXNlZFN0cmluZykpOwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>290662</attachid>
            <date>2016-10-04 16:18:31 -0700</date>
            <delta_ts>2016-10-04 16:29:59 -0700</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>30647</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMDY3OTApCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE4IEBACisyMDE2LTEwLTA0ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFN0cmluZy5wcm90b3R5cGUudG9Mb3dlckNhc2Ugc2hvdWxkIGJlIGEg
REZHL0ZUTCBpbnRyaW5zaWMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE2Mjg4NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogbWljcm9iZW5jaG1hcmtzL3RvLWxvd2VyLWNhc2UuanM6IEFkZGVkLgorICAg
ICAgICAoYXNzZXJ0KToKKyAgICAgICAgKGZvbyk6CisgICAgICAgIChiYXIpOgorICAgICAgICAq
IHN0cmVzcy90by1sb3dlci1jYXNlLmpzOiBBZGRlZC4KKyAgICAgICAgKGFzc2VydCk6CisgICAg
ICAgIChmb28pOgorCiAyMDE2LTEwLTAzICBKRiBCYXN0aWVuICA8amZiYXN0aWVuQGFwcGxlLmNv
bT4KIAogICAgICAgICBBdXRvLWdlbmVyYXRlIFdBU01PcHMuaCwgc2hhcmUgd2l0aCB0ZXN0aW5n
IEpTT04gZmlsZQpJbmRleDogSlNUZXN0cy9taWNyb2JlbmNobWFya3MvdG8tbG93ZXItY2FzZS5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy90by1sb3dlci1jYXNlLmpz
CShub25leGlzdGVudCkKKysrIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL3RvLWxvd2VyLWNhc2Uu
anMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNiBAQAorZnVuY3Rpb24gYXNzZXJ0KGIpIHsK
KyAgICBpZiAoIWIpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiQmFkIGFzc2VydGlvbiIpOwor
fQorbm9JbmxpbmUoYXNzZXJ0KTsKKworbGV0IHRlc3RzID0gWworICAgIFsiZm9vIiwgImZvbyJd
LAorICAgIFsiZm9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vIiwgImZvb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vbyJdLAorXTsKKworZnVuY3Rpb24gZm9vKGEpIHsKKyAgICBy
ZXR1cm4gYS50b0xvd2VyQ2FzZSgpOworfQorbm9JbmxpbmUoZm9vKTsKKworZnVuY3Rpb24gYmFy
KGEpIHsKKyAgICBhLnRvTG93ZXJDYXNlKCk7CisgICAgYXNzZXJ0KHRydWUpOyAvLyBzaWRlIGVm
ZmVjdHMKKyAgICBhLnRvTG93ZXJDYXNlKCk7Cit9Citub0lubGluZShiYXIpOworCitsZXQgc3Rh
cnQgPSBEYXRlLm5vdygpOworZm9yIChsZXQgaSA9IDA7IGkgPCA1MDAwMDA7IGkrKykgeworICAg
IGZvciAobGV0IGkgPSAwOyBpIDwgdGVzdHMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgbGV0IHRl
c3QgPSB0ZXN0c1tpXVswXTsKKyAgICAgICAgbGV0IHJlc3VsdCA9IHRlc3RzW2ldWzFdOworICAg
ICAgICBhc3NlcnQoZm9vKHRlc3QpID09PSByZXN1bHQpOworICAgICAgICBiYXIodGVzdCk7Cisg
ICAgfQorfQorCitjb25zdCB2ZXJib3NlID0gdHJ1ZTsKK2lmICh2ZXJib3NlKQorICAgIHByaW50
KERhdGUubm93KCkgLSBzdGFydCk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy90by1sb3dlci1jYXNl
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL3RvLWxvd2VyLWNhc2UuanMJKG5vbmV4
aXN0ZW50KQorKysgSlNUZXN0cy9zdHJlc3MvdG8tbG93ZXItY2FzZS5qcwkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDMwIEBACitmdW5jdGlvbiBhc3NlcnQoYikgeworICAgIGlmICghYikKKyAg
ICAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQgYXNzZXJ0aW9uIik7Cit9CisKK2xldCB0ZXN0cyA9
IFsKKyAgICBbIkZPTyIsICJmb28iXSwKKyAgICBbImZmZlx1MDBDMiIsICJmZmZcdTAwRTIiXSwK
KyAgICBbImZvbyIsICJmb28iXSwKKyAgICBbImZvb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vbyIsICJmb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb28iXSwKKyAgICBbIkJhUiIs
ICJiYXIiXSwKKyAgICBbIkZPT1x1MDBBOSIsICJmb29cdTAwQTkiXSwKKyAgICBbIiMkIyQiLCAi
IyQjJCJdLAorICAgIFsiJiYmXHUwMEE5IiwgIiYmJlx1MDBBOSJdLAorICAgIFsiJiYmXHUwMEMy
IiwgIiYmJlx1MDBFMiJdLAorICAgIFsiQUJDXHUwMTAwIiwgImFiY1x1MDEwMSJdLAorXTsKKwor
ZnVuY3Rpb24gZm9vKGEpIHsKKyAgICByZXR1cm4gYS50b0xvd2VyQ2FzZSgpOworfQorbm9Jbmxp
bmUoZm9vKTsKKworZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwMDsgaSsrKSB7CisgICAgZm9yIChs
ZXQgaSA9IDA7IGkgPCB0ZXN0cy5sZW5ndGg7IGkrKykgeworICAgICAgICBsZXQgdGVzdCA9IHRl
c3RzW2ldWzBdOworICAgICAgICBsZXQgcmVzdWx0ID0gdGVzdHNbaV1bMV07CisgICAgICAgIGFz
c2VydChmb28odGVzdCkgPT09IHJlc3VsdCk7CisgICAgfQorfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Q2hhbmdlTG9nCShyZXZpc2lvbiAyMDY3NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTIgQEAKKzIwMTYtMTAtMDQgIFNhYW0g
QmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CisKKyAgICAgICAgU3RyaW5nLnByb3RvdHlwZS50
b0xvd2VyQ2FzZSBzaG91bGQgYmUgYSBERkcvRlRMIGludHJpbnNpYworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyODg3CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBtYWtlcyBUb0xvd2Vy
Q2FzZSBhbiBpbnRyaW5zaWMgaW4gdGhlIERGRy9GVEwuIE9uIHRoZSBmYXN0CisgICAgICAgIHBh
dGgsIHRoZSBpbnRyaW5zaWMgd2lsbCBsb29wIG92ZXIgYW4gOC1iaXQgc3RyaW5nIGVuc3VyaW5n
IGl0J3MgYWxyZWFkeQorICAgICAgICBsb3dlciBjYXNlLCBhbmQgc2ltcGx5IHJldHVybiB0aGUg
c3RyaW5nLiBJbiB0aGUgc2xvdyBwYXRoLCBpdCdsbCBjYWxsCisgICAgICAgIGludG8gQyBjb2Rl
IHRvIG1ha2UgYSBuZXcgc3RyaW5nLgorCisgICAgICAgIFRoaXMgaXMgYSA3LTglIHNwZWVkdXAg
b24gRVM2U2FtcGxlQmVuY2gvQmFzaWMuCisKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRl
cnByZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVy
PEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAqIGRmZy9ERkdC
eXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6Omhh
bmRsZUludHJpbnNpY0NhbGwpOgorICAgICAgICAqIGRmZy9ERkdDbG9iYmVyaXplLmg6CisgICAg
ICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6CisgICAgICAgICogZGZnL0RGR0RvZXNHQy5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6ZG9lc0dDKToKKyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFz
ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Zml4dXBOb2RlKToKKyAgICAg
ICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6
CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBkZmcvREZHUHJlZGlj
dGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdTYWZlVG9FeGVjdXRl
Lmg6CisgICAgICAgIChKU0M6OkRGRzo6c2FmZVRvRXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZVRvTG93ZXJDYXNlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2FsbE9wZXJhdGlvbik6CisgICAg
ICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgor
ICAgICAgICAqIGZ0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5Lmg6CisgICAgICAgICogZnRs
L0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6Cisg
ICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZH
OjpMb3dlckRGR1RvQjM6OmNvbXBpbGVOb2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxv
d2VyREZHVG9CMzo6Y29tcGlsZVRvTG93ZXJDYXNlKToKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0
aW9ucy5oOgorICAgICAgICAqIHJ1bnRpbWUvSW50cmluc2ljLmg6CisgICAgICAgICogcnVudGlt
ZS9TdHJpbmdQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpTdHJpbmdQcm90b3R5cGU6OmZp
bmlzaENyZWF0aW9uKToKKwogMjAxNi0xMC0wMyAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxl
LmNvbT4KIAogICAgICAgICBHZXRNYXBCdWNrZXQgbm9kZSBzaG91bGQgc3BlY3VsYXRlIG9uIHRo
ZSB0eXBlIG9mIGl0cyAna2V5JyBjaGlsZApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2aXNp
b24gMjA2NzY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVy
cHJldGVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDA1LDYgKzEwMDUsMTEgQEAgYm9v
bCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBicmVhazsKICAg
ICB9CiAKKyAgICBjYXNlIFRvTG93ZXJDYXNlOiB7CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0
VHlwZShtX2dyYXBoLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCiAgICAg
Y2FzZSBMb2FkRnJvbUpTTWFwQnVja2V0OgogICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VIZWFw
VG9wKCk7CiAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDIwNjc2NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNTgwLDYgKzI1ODAsMjAgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2lj
Q2FsbAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKKyAgICBjYXNlIFRvTG93ZXJDYXNl
SW50cmluc2ljOiB7CisgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAhPSAx
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmIChtX2lubGluZVN0YWNr
VG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRUeXBlKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBpbnNlcnRDaGVja3MoKTsKKyAg
ICAgICAgTm9kZSogdGhpc1N0cmluZyA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgw
LCByZWdpc3Rlck9mZnNldCkpOworICAgICAgICBOb2RlKiByZXN1bHQgPSBhZGRUb0dyYXBoKFRv
TG93ZXJDYXNlLCB0aGlzU3RyaW5nKTsKKyAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1
bHRPcGVyYW5kKSwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCiAgICAg
ZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCShyZXZpc2lvbiAyMDY3NjQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAt
MTI4OSw2ICsxMjg5LDEwIEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5v
ZGUKICAgICAgICAgcmVhZChNaXNjRmllbGRzKTsKICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihN
YXBIYXNMb2MsIE1pc2NGaWVsZHMsIG5vZGUtPmNoaWxkMSgpKSwgTGF6eU5vZGUobm9kZSkpOwog
ICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIFRvTG93ZXJDYXNlOgorICAgICAgICBkZWYoUHVy
ZVZhbHVlKG5vZGUpKTsKKyAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIExhc3RO
b2RlVHlwZToKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJKHJldmlzaW9uIDIwNjc2NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjkwLDYgKzI5MCw3IEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkK
ICAgICBjYXNlIFN0cmluZ1JlcGxhY2U6CiAgICAgY2FzZSBTdHJpbmdSZXBsYWNlUmVnRXhwOgog
ICAgIGNhc2UgQ3JlYXRlUmVzdDoKKyAgICBjYXNlIFRvTG93ZXJDYXNlOgogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgCiAgICAgY2FzZSBNdWx0aVB1dEJ5T2Zmc2V0OgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAyMDY3
NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNjQ5LDYgKzE2NDksMTUgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAKKyAgICAgICAgY2FzZSBUb0xvd2VyQ2FzZTogeworICAgICAgICAg
ICAgLy8gV2UgY3VycmVudGx5IG9ubHkgc3VwcG9ydCBTdHJpbmdVc2Ugc2luY2UgdGhhdCB3aWxs
IGVuc3VyZSB0aGF0CisgICAgICAgICAgICAvLyBUb0xvd2VyQ2FzZSBpcyBhIHB1cmUgb3BlcmF0
aW9uLiBJZiB3ZSBkZWNpZGUgdG8gdXBkYXRlIHRoaXMgd2l0aAorICAgICAgICAgICAgLy8gbW9y
ZSB0eXBlcyBpbiB0aGUgZnV0dXJlLCB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBjbG9iYmVy
aXplIHJ1bGVzCisgICAgICAgICAgICAvLyBhcmUgY29ycmVjdC4KKyAgICAgICAgICAgIGZpeEVk
Z2U8U3RyaW5nVXNlPihub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgICAgICAvLyBIYXZlIHRoZXNlIG5vLW9w
IGNhc2VzIGhlcmUgdG8gZW5zdXJlIHRoYXQgbm9ib2R5IGZvcmdldHMgdG8gYWRkIGhhbmRsZXJz
IGZvciBuZXcgb3Bjb2Rlcy4KICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDoKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDIwNjc2NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAt
Mzk0LDYgKzM5NCw4IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNy
byhHZXRNYXBCdWNrZXQsIE5vZGVSZXN1bHRKUykgXAogICAgIG1hY3JvKExvYWRGcm9tSlNNYXBC
dWNrZXQsIE5vZGVSZXN1bHRKUykgXAogICAgIG1hY3JvKElzTm9uRW1wdHlNYXBCdWNrZXQsIE5v
ZGVSZXN1bHRCb29sZWFuKSBcCisgICAgXAorICAgIG1hY3JvKFRvTG93ZXJDYXNlLCBOb2RlUmVz
dWx0SlMpIFwKIAogLy8gVGhpcyBlbnVtIGdlbmVyYXRlcyBhIG1vbm90b25pY2FsbHkgaW5jcmVh
c2luZyBpZCBmb3IgYWxsIE5vZGUgdHlwZXMsCiAvLyBhbmQgaXMgdXNlZCBieSB0aGUgc3Vic2Vx
dWVudCBlbnVtIHRvIGZpbGwgb3V0IHRoZSBpZCAoYXMgYWNjZXNzZWQgdmlhIHRoZSBOb2RlSWRN
YXNrKS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNw
cAkocmV2aXNpb24gMjA2NzY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVy
YXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQyMSw2ICsxNDIxLDIyIEBAIFN0cmluZ0lt
cGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVzb2wKICAgICByZXR1cm4gc3RyaW5nLT52YWx1
ZShleGVjKS5pbXBsKCk7CiB9CiAKK0pTU3RyaW5nKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRv
TG93ZXJDYXNlKEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIHN0cmluZywgdWludDMyX3QgZmFp
bGluZ0luZGV4KQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworCisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworCisgICAgY29uc3QgU3RyaW5nJiBpbnB1dFN0cmluZyA9IHN0cmlu
Zy0+dmFsdWUoZXhlYyk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7
CisgICAgU3RyaW5nIGxvd2VyY2FzZWRTdHJpbmcgPSBpbnB1dFN0cmluZy5pczhCaXQoKSA/IGlu
cHV0U3RyaW5nLmNvbnZlcnRUb0xvd2VyY2FzZVdpdGhvdXRMb2NhbGVTdGFydGluZ0F0RmFpbGlu
Z0luZGV4KGZhaWxpbmdJbmRleCkgOiBpbnB1dFN0cmluZy5jb252ZXJ0VG9Mb3dlcmNhc2VXaXRo
b3V0TG9jYWxlKCk7CisgICAgaWYgKGxvd2VyY2FzZWRTdHJpbmcuaW1wbCgpID09IGlucHV0U3Ry
aW5nLmltcGwoKSkKKyAgICAgICAgcmV0dXJuIHN0cmluZzsKKyAgICBzY29wZS5yZWxlYXNlKCk7
CisgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIGxvd2VyY2FzZWRTdHJpbmcpOworfQorCiBKU1N0
cmluZyogSklUX09QRVJBVElPTiBvcGVyYXRpb25TaW5nbGVDaGFyYWN0ZXJTdHJpbmcoRXhlY1N0
YXRlKiBleGVjLCBpbnQzMl90IGNoYXJhY3RlcikKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHJldmlz
aW9uIDIwNjc2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNDcsNiArMTQ3LDggQEAgY2hhciogSklUX09QRVJBVElPTiBv
cGVyYXRpb25FbnN1cmVBcnJheQogU3RyaW5nSW1wbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25S
ZXNvbHZlUm9wZShFeGVjU3RhdGUqLCBKU1N0cmluZyopOwogSlNTdHJpbmcqIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKEV4ZWNTdGF0ZSosIGludDMyX3QpOwog
CitKU1N0cmluZyogSklUX09QRVJBVElPTiBvcGVyYXRpb25Ub0xvd2VyQ2FzZShFeGVjU3RhdGUq
LCBKU1N0cmluZyosIHVpbnQzMl90KTsKKwogaW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bk1hcEhhc2goRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgaW5wdXQpOwogSlNDZWxsKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkpTTWFwRmluZEJ1Y2tldChFeGVjU3RhdGUqLCBKU0NlbGwqLCBF
bmNvZGVkSlNWYWx1ZSwgaW50MzJfdCk7CiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
SlNTZXRGaW5kQnVja2V0KEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVlLCBpbnQz
Ml90KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3Bh
Z2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAyMDY3NjQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzU0LDYgKzc1NCwxMSBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgc2V0UHJlZGljdGlvbihTcGVjSW50MzJPbmx5KTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CisKKyAgICAgICAgY2FzZSBUb0xvd2VyQ2FzZToKKyAgICAgICAgICAgIHNldFByZWRp
Y3Rpb24oU3BlY1N0cmluZyk7CisgICAgICAgICAgICBicmVhazsKKwogICAgICAgICBjYXNlIEFy
aXRoUG93OgogICAgICAgICBjYXNlIEFyaXRoU3FydDoKICAgICAgICAgY2FzZSBBcml0aEZSb3Vu
ZDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5o
CShyZXZpc2lvbiAyMDY3NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVU
b0V4ZWN1dGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzU5LDYgKzM1OSw3IEBAIGJvb2wgc2FmZVRv
RXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICBjYXNlIFB1dER5bmFtaWNWYXI6CiAg
ICAgY2FzZSBSZXNvbHZlU2NvcGU6CiAgICAgY2FzZSBNYXBIYXNoOgorICAgIGNhc2UgVG9Mb3dl
ckNhc2U6CiAgICAgY2FzZSBHZXRNYXBCdWNrZXQ6CiAgICAgY2FzZSBMb2FkRnJvbUpTTWFwQnVj
a2V0OgogICAgIGNhc2UgSXNOb25FbXB0eU1hcEJ1Y2tldDoKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNp
b24gMjA2NzY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjY3OCw2ICsyNjc4LDExIEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgfSB9CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KKyAgICAKKyAgICBjYXNlIFRvTG93ZXJDYXNlOiB7CisgICAgICAgIGNvbXBp
bGVUb0xvd2VyQ2FzZShub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQogCiAgICAgY2FzZSBH
ZXRCeVZhbFdpdGhUaGlzOiB7CiAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbm9k
ZS0+Y2hpbGQxKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAyMDY3NjQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
ODc4LDYgKzQ4NzgsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2Rl
KQogICAgICAgICBicmVhazsKICAgICB9CiAKKyAgICBjYXNlIFRvTG93ZXJDYXNlOiB7CisgICAg
ICAgIGNvbXBpbGVUb0xvd2VyQ2FzZShub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCiAg
ICAgY2FzZSBJc09iamVjdDogewogICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBu
b2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgUmV1c2Us
IHZhbHVlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuY3BwCShyZXZpc2lvbiAyMDY3NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ5MCw2ICsxNDkw
LDYwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZUJvb2wKICAgICBqdW1w
KG5vdFRha2VuKTsKIH0KIAordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVRvTG93ZXJDYXNl
KE5vZGUqIG5vZGUpCit7CisgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gVG9Mb3dlckNhc2UpOwor
ICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHN0cmluZyh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Cisg
ICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CisgICAgR1BSVGVtcG9yYXJ5IGluZGV4KHRoaXMp
OworICAgIEdQUlRlbXBvcmFyeSBjaGFyUmVnKHRoaXMpOworICAgIEdQUlRlbXBvcmFyeSBsZW5n
dGgodGhpcyk7CisKKyAgICBHUFJSZWcgc3RyaW5nR1BSID0gc3RyaW5nLmdwcigpOworICAgIEdQ
UlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKKyAgICBHUFJSZWcgaW5kZXhHUFIgPSBpbmRleC5n
cHIoKTsKKyAgICBHUFJSZWcgY2hhckdQUiA9IGNoYXJSZWcuZ3ByKCk7CisgICAgR1BSUmVnIGxl
bmd0aEdQUiA9IGxlbmd0aC5ncHIoKTsKKworICAgIHNwZWN1bGF0ZVN0cmluZyhub2RlLT5jaGls
ZDEoKSwgc3RyaW5nR1BSKTsKKworICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7
CisKKyAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoMCksIGluZGV4R1BSKTsKKworICAgIG1f
aml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RyaW5nR1BSLCBKU1N0cmluZzo6
b2Zmc2V0T2ZWYWx1ZSgpKSwgdGVtcEdQUik7CisgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJy
YW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHRlbXBHUFIpKTsKKworICAgIHNsb3dQ
YXRoLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0MzIoCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpa
ZXJvLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wR1BSLCBTdHJpbmdJbXBsOjpmbGFnc09m
ZnNldCgpKSwKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihTdHJpbmdJbXBs
OjpmbGFnSXM4Qml0KCkpKSk7CisgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHRlbXBHUFIsIFN0cmluZ0ltcGw6Omxlbmd0aE1lbW9yeU9mZnNldCgpKSwgbGVuZ3RoR1BS
KTsKKyAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXBHUFIsIFN0
cmluZ0ltcGw6OmRhdGFPZmZzZXQoKSksIHRlbXBHUFIpOworCisgICAgYXV0byBsb29wU3RhcnQg
PSBtX2ppdC5sYWJlbCgpOworICAgIGF1dG8gbG9vcERvbmUgPSBtX2ppdC5icmFuY2gzMihDQ2Fs
bEhlbHBlcnM6OkFib3ZlT3JFcXVhbCwgaW5kZXhHUFIsIGxlbmd0aEdQUik7CisgICAgbV9qaXQu
bG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleCh0ZW1wR1BSLCBpbmRleEdQUiwgTWFjcm9B
c3NlbWJsZXI6OlRpbWVzT25lKSwgY2hhckdQUik7CisgICAgc2xvd1BhdGguYXBwZW5kKG1faml0
LmJyYW5jaFRlc3QzMihDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIGNoYXJHUFIsIFRydXN0ZWRJbW0z
Mih+MHg3RikpKTsKKyAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoJ0EnKSwgY2hhckdQUik7
CisgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QmVsb3dP
ckVxdWFsLCBjaGFyR1BSLCBUcnVzdGVkSW1tMzIoJ1onIC0gJ0EnKSkpOworCisgICAgbV9qaXQu
YWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBpbmRleEdQUik7CisgICAgbV9qaXQuanVtcCgpLmxpbmtU
byhsb29wU3RhcnQsICZtX2ppdCk7CisgICAgCisgICAgc2xvd1BhdGgubGluaygmbV9qaXQpOwor
ICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKGxlbmd0aEdQUik7CisgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25Ub0xvd2VyQ2FzZSwgbGVuZ3RoR1BSLCBzdHJpbmdHUFIsIGluZGV4R1BSKTsK
KyAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKGxlbmd0aEdQUik7CisgICAgbV9qaXQuZXhjZXB0
aW9uQ2hlY2soKTsKKyAgICBhdXRvIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisKKyAgICBsb29wRG9u
ZS5saW5rKCZtX2ppdCk7CisgICAgbV9qaXQubW92ZShzdHJpbmdHUFIsIGxlbmd0aEdQUik7CisK
KyAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICBjZWxsUmVzdWx0KGxlbmd0aEdQUiwgbm9kZSk7
Cit9CisKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZUludDMyQnJhbmNoKE5v
ZGUqIG5vZGUsIE5vZGUqIGJyYW5jaE5vZGUsIEpJVENvbXBpbGVyOjpSZWxhdGlvbmFsQ29uZGl0
aW9uIGNvbmRpdGlvbikKIHsKICAgICBCYXNpY0Jsb2NrKiB0YWtlbiA9IGJyYW5jaE5vZGUtPmJy
YW5jaERhdGEoKS0+dGFrZW4uYmxvY2s7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAyMDY3NjQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTkz
OCw2ICs5MzgsMTEgQEAgcHVibGljOgogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUoY2VsbCk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsU2V0UmVzdWx0KG9wZXJh
dGlvbiwgcmVzdWx0KTsKICAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlv
bihKc3NfSklUT3BlcmF0aW9uX0VKc3NVaSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJl
ZyBhcmcxLCBHUFJSZWcgYXJnMikKKyAgICB7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRz
V2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxTZXRS
ZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOworICAgIH0KICAgICBKSVRDb21waWxlcjo6Q2FsbCBj
YWxsT3BlcmF0aW9uKFBfSklUT3BlcmF0aW9uX0VPIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwg
R1BSUmVnIG9iamVjdCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZShvYmplY3QpOwpAQCAtMjU3MCw2ICsyNTc1LDcgQEAgcHVibGljOgogICAgIHZvaWQg
Y29tcGlsZUdldER5bmFtaWNWYXIoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZVB1dER5bmFtaWNW
YXIoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUNvbXBhcmVFcVB0cihOb2RlKik7CisgICAgdm9p
ZCBjb21waWxlVG9Mb3dlckNhc2UoTm9kZSopOwogCiAgICAgdm9pZCBtb3ZlVHJ1ZVRvKEdQUlJl
Zyk7CiAgICAgdm9pZCBtb3ZlRmFsc2VUbyhHUFJSZWcpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgJKHJldmlz
aW9uIDIwNjc2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFw
UmVwb3NpdG9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsNiArMTAxLDcgQEAgbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBGVEwgewogICAgIG1hY3JvKFNjb3BlZEFyZ3VtZW50c1RhYmxlX2xl
bmd0aCwgU2NvcGVkQXJndW1lbnRzVGFibGU6Om9mZnNldE9mTGVuZ3RoKCkpIFwKICAgICBtYWNy
byhTdHJpbmdJbXBsX2RhdGEsIFN0cmluZ0ltcGw6OmRhdGFPZmZzZXQoKSkgXAogICAgIG1hY3Jv
KFN0cmluZ0ltcGxfaGFzaEFuZEZsYWdzLCBTdHJpbmdJbXBsOjpmbGFnc09mZnNldCgpKSBcCisg
ICAgbWFjcm8oU3RyaW5nSW1wbF9sZW5ndGgsIFN0cmluZ0ltcGw6Omxlbmd0aE1lbW9yeU9mZnNl
dCgpKSBcCiAgICAgbWFjcm8oU3RydWN0dXJlX2NsYXNzSW5mbywgU3RydWN0dXJlOjpjbGFzc0lu
Zm9PZmZzZXQoKSkgXAogICAgIG1hY3JvKFN0cnVjdHVyZV9nbG9iYWxPYmplY3QsIFN0cnVjdHVy
ZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpIFwKICAgICBtYWNybyhTdHJ1Y3R1cmVfcHJvdG90eXBl
LCBTdHJ1Y3R1cmU6OnByb3RvdHlwZU9mZnNldCgpKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAyMDY3NjQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI2Myw2ICsyNjMsNyBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGUo
Tm9kZSogCiAgICAgY2FzZSBDb21wYXJlR3JlYXRlcjoKICAgICBjYXNlIENvbXBhcmVHcmVhdGVy
RXE6CiAgICAgY2FzZSBDb21wYXJlU3RyaWN0RXE6CisgICAgY2FzZSBUb0xvd2VyQ2FzZToKICAg
ICAgICAgLy8gVGhlc2UgYXJlIE9LLgogICAgICAgICBicmVhazsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjA2NzY0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDM3LDYgKzEwMzcsOSBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFVu
cmVhY2hhYmxlOgogICAgICAgICAgICAgY29tcGlsZVVucmVhY2hhYmxlKCk7CiAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBUb0xvd2VyQ2FzZToKKyAgICAgICAgICAgIGNvbXBpbGVU
b0xvd2VyQ2FzZSgpOworICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBQaGFudG9t
TG9jYWw6CiAgICAgICAgIGNhc2UgTG9vcEhpbnQ6CkBAIC04NTUyLDYgKzg1NTUsNjAgQEAgcHJp
dmF0ZToKICAgICAgICAgbm9uU3BlY3VsYXRpdmVDb21wYXJlKGludEZ1bmN0b3IsIGZhbGxiYWNr
RnVuY3Rpb24pOwogICAgIH0KIAorICAgIHZvaWQgY29tcGlsZVRvTG93ZXJDYXNlKCkKKyAgICB7
CisgICAgICAgIExCYXNpY0Jsb2NrIG5vdFJvcGUgPSBtX291dC5uZXdCbG9jaygpOworICAgICAg
ICBMQmFzaWNCbG9jayBpczhCaXQgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNC
bG9jayBsb29wVG9wID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgbG9v
cEJvZHkgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBzbG93UGF0aCA9
IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1f
b3V0Lm5ld0Jsb2NrKCk7CisKKyAgICAgICAgTFZhbHVlIHN0cmluZyA9IGxvd1N0cmluZyhtX25v
ZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgc3RhcnRJbmRleCA9IG1fb3V0
LmFuY2hvcihtX291dC5jb25zdEludDMyKDApKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgc3Rh
cnRJbmRleEZvckNhbGwgPSBtX291dC5hbmNob3IobV9vdXQuY29uc3RJbnQzMigwKSk7CisgICAg
ICAgIExWYWx1ZSBpbXBsID0gbV9vdXQubG9hZFB0cihzdHJpbmcsIG1faGVhcHMuSlNTdHJpbmdf
dmFsdWUpOworICAgICAgICBtX291dC5icmFuY2gobV9vdXQuaXNaZXJvNjQoaW1wbCksCisgICAg
ICAgICAgICB1bnN1cmUoc2xvd1BhdGgpLCB1bnN1cmUobm90Um9wZSkpOworCisgICAgICAgIExC
YXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8obm90Um9wZSwgaXM4Qml0KTsKKwor
ICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICBtX291dC50ZXN0SXNaZXJvMzIoCisg
ICAgICAgICAgICAgICAgbV9vdXQubG9hZDMyKGltcGwsIG1faGVhcHMuU3RyaW5nSW1wbF9oYXNo
QW5kRmxhZ3MpLAorICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoU3RyaW5nSW1wbDo6
ZmxhZ0lzOEJpdCgpKSksCisgICAgICAgICAgICB1bnN1cmUoc2xvd1BhdGgpLCB1bnN1cmUoaXM4
Qml0KSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oaXM4Qml0LCBsb29wVG9wKTsKKyAgICAg
ICAgTFZhbHVlIGxlbmd0aCA9IG1fb3V0LmxvYWQzMihpbXBsLCBtX2hlYXBzLlN0cmluZ0ltcGxf
bGVuZ3RoKTsKKyAgICAgICAgTFZhbHVlIGJ1ZmZlciA9IG1fb3V0LmxvYWRQdHIoaW1wbCwgbV9o
ZWFwcy5TdHJpbmdJbXBsX2RhdGEpOworICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0UmVzdWx0
ID0gbV9vdXQuYW5jaG9yKHN0cmluZyk7CisgICAgICAgIG1fb3V0Lmp1bXAobG9vcFRvcCk7CisK
KyAgICAgICAgbV9vdXQuYXBwZW5kVG8obG9vcFRvcCwgbG9vcEJvZHkpOworICAgICAgICBMVmFs
dWUgaW5kZXggPSBtX291dC5waGkoSW50MzIsIHN0YXJ0SW5kZXgpOworICAgICAgICBWYWx1ZUZy
b21CbG9jayBpbmRleEZyb21CbG9jayA9IG1fb3V0LmFuY2hvcihpbmRleCk7CisgICAgICAgIG1f
b3V0LmJyYW5jaChtX291dC5iZWxvdyhpbmRleCwgbGVuZ3RoKSwKKyAgICAgICAgICAgIHVuc3Vy
ZShsb29wQm9keSksIHVuc3VyZShjb250aW51YXRpb24pKTsKKworICAgICAgICBtX291dC5hcHBl
bmRUbyhsb29wQm9keSwgc2xvd1BhdGgpOworCisgICAgICAgIExWYWx1ZSBieXRlID0gbV9vdXQu
bG9hZDhaZXJvRXh0MzIobV9vdXQuYmFzZUluZGV4KG1faGVhcHMuY2hhcmFjdGVyczgsIGJ1ZmZl
ciwgbV9vdXQuemVyb0V4dFB0cihpbmRleCkpKTsKKyAgICAgICAgTFZhbHVlIGlzSW52YWxpZEFz
Y2lpUmFuZ2UgPSBtX291dC5iaXRBbmQoYnl0ZSwgbV9vdXQuY29uc3RJbnQzMih+MHg3RikpOwor
ICAgICAgICBMVmFsdWUgaXNVcHBlckNhc2UgPSBtX291dC5iZWxvd09yRXF1YWwobV9vdXQuc3Vi
KGJ5dGUsIG1fb3V0LmNvbnN0SW50MzIoJ0EnKSksIG1fb3V0LmNvbnN0SW50MzIoJ1onIC0gJ0En
KSk7CisgICAgICAgIExWYWx1ZSBpc0JhZENoYXJhY3RlciA9IG1fb3V0LmJpdE9yKGlzSW52YWxp
ZEFzY2lpUmFuZ2UsIGlzVXBwZXJDYXNlKTsKKyAgICAgICAgbV9vdXQuYWRkSW5jb21pbmdUb1Bo
aShpbmRleCwgbV9vdXQuYW5jaG9yKG1fb3V0LmFkZChpbmRleCwgbV9vdXQuaW50MzJPbmUpKSk7
CisgICAgICAgIG1fb3V0LmJyYW5jaChpc0JhZENoYXJhY3RlciwgdW5zdXJlKHNsb3dQYXRoKSwg
dW5zdXJlKGxvb3BUb3ApKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93UGF0aCwgY29u
dGludWF0aW9uKTsKKyAgICAgICAgTFZhbHVlIHNsb3dQYXRoSW5kZXggPSBtX291dC5waGkoSW50
MzIsIHN0YXJ0SW5kZXhGb3JDYWxsLCBpbmRleEZyb21CbG9jayk7CisgICAgICAgIFZhbHVlRnJv
bUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3Iodm1DYWxsKHBvaW50ZXJUeXBlKCksIG1f
b3V0Lm9wZXJhdGlvbihvcGVyYXRpb25Ub0xvd2VyQ2FzZSksIG1fY2FsbEZyYW1lLCBzdHJpbmcs
IHNsb3dQYXRoSW5kZXgpKTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisg
ICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICBz
ZXRKU1ZhbHVlKG1fb3V0LnBoaShwb2ludGVyVHlwZSgpLCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0
KSk7CisgICAgfQorCiAgICAgdm9pZCBjb21waWxlUmVzb2x2ZVNjb3BlKCkKICAgICB7CiAgICAg
ICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBtX2dyYXBoLmlkZW50aWZpZXJzKClbbV9ub2Rl
LT5pZGVudGlmaWVyTnVtYmVyKCldOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGVyYXRpb25zLmgJKHJldmlzaW9uIDIwNjc2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOTksNiArMjk5LDcgQEAg
dHlwZWRlZiBTbG93UGF0aFJldHVyblR5cGUgKEpJVF9PUEVSQVRJTwogdHlwZWRlZiBTdHJpbmdJ
bXBsKiAoSklUX09QRVJBVElPTiAqVF9KSVRPcGVyYXRpb25fRUpzcykoRXhlY1N0YXRlKiwgSlNT
dHJpbmcqKTsKIHR5cGVkZWYgSlNTdHJpbmcqIChKSVRfT1BFUkFUSU9OICpKc3NfSklUT3BlcmF0
aW9uX0VaKShFeGVjU3RhdGUqLCBpbnQzMl90KTsKIHR5cGVkZWYgSlNTdHJpbmcqIChKSVRfT1BF
UkFUSU9OICpKc3NfSklUT3BlcmF0aW9uX0VKSkopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpOwordHlwZWRlZiBKU1N0cmluZyogKEpJ
VF9PUEVSQVRJT04gKkpzc19KSVRPcGVyYXRpb25fRUpzc1VpKShFeGVjU3RhdGUqLCBKU1N0cmlu
ZyosIHVpbnQzMl90KTsKIAogLy8gVGhpcyBtZXRob2QgaXMgdXNlZCB0byBsb29rdXAgYW4gZXhj
ZXB0aW9uIGhhbmRlciwga2V5ZWQgYnkgZmF1bHRMb2NhdGlvbiwgd2hpY2ggaXMKIC8vIHRoZSBy
ZXR1cm4gbG9jYXRpb24gZnJvbSBvbmUgb2YgdGhlIGNhbGxzIG91dCB0byBvbmUgb2YgdGhlIGhl
bHBlciBvcGVyYXRpb25zIGFib3ZlLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50cmluc2ljLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50cmluc2ljLmgJKHJldmlzaW9uIDIwNjc2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludHJpbnNpYy5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSw2ICs2NSw3IEBAIGVu
dW0gSlNfRVhQT1JUX1BSSVZBVEUgSW50cmluc2ljIHsKICAgICBKU01hcEhhc0ludHJpbnNpYywK
ICAgICBKU1NldEhhc0ludHJpbnNpYywKICAgICBIYXNPd25Qcm9wZXJ0eUludHJpbnNpYywKKyAg
ICBUb0xvd2VyQ2FzZUludHJpbnNpYywKIAogICAgIC8vIEdldHRlciBpbnRyaW5zaWNzLgogICAg
IFR5cGVkQXJyYXlMZW5ndGhJbnRyaW5zaWMsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAJKHJldmlzaW9uIDIwNjc2NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE0Miw3ICsxNDIsNyBAQCB2b2lkIFN0cmluZ1Byb3RvdHlwZTo6ZmluaXNo
Q3JlYXRpb24oVk0mCiAgICAgSlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04o
InNsaWNlIiwgc3RyaW5nUHJvdG9GdW5jU2xpY2UsIERvbnRFbnVtLCAyKTsKICAgICBKU0NfTkFU
SVZFX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTigic3Vic3RyIiwgc3RyaW5nUHJvdG9GdW5j
U3Vic3RyLCBEb250RW51bSwgMik7CiAgICAgSlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RS
QU5TSVRJT04oInN1YnN0cmluZyIsIHN0cmluZ1Byb3RvRnVuY1N1YnN0cmluZywgRG9udEVudW0s
IDIpOwotICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKCJ0b0xvd2Vy
Q2FzZSIsIHN0cmluZ1Byb3RvRnVuY1RvTG93ZXJDYXNlLCBEb250RW51bSwgMCk7CisgICAgSlND
X05BVElWRV9JTlRSSU5TSUNfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKCJ0b0xvd2VyQ2Fz
ZSIsIHN0cmluZ1Byb3RvRnVuY1RvTG93ZXJDYXNlLCBEb250RW51bSwgMCwgVG9Mb3dlckNhc2VJ
bnRyaW5zaWMpOwogICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKCJ0
b1VwcGVyQ2FzZSIsIHN0cmluZ1Byb3RvRnVuY1RvVXBwZXJDYXNlLCBEb250RW51bSwgMCk7CiAj
aWYgRU5BQkxFKElOVEwpCiAgICAgSlNDX0JVSUxUSU5fRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lU
SU9OKCJsb2NhbGVDb21wYXJlIiwgc3RyaW5nUHJvdG90eXBlTG9jYWxlQ29tcGFyZUNvZGVHZW5l
cmF0b3IsIERvbnRFbnVtKTsKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDY3NjQpCisrKyBTb3VyY2UvV1RG
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0IEBACisyMDE2LTEwLTA0ICBT
YWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIFN0cmluZy5wcm90b3R5
cGUudG9Mb3dlckNhc2Ugc2hvdWxkIGJlIGEgREZHL0ZUTCBpbnRyaW5zaWMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2Mjg4NworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCQkKKyAgICAgICAgVGhpcyBwYXRjaCBleHBvc2Vz
IGEgbmV3IFN0cmluZ0ltcGwgZnVuY3Rpb24gY2FsbGVkIGNvbnZlcnRUb0xvd2VyY2FzZVdpdGhv
dXRMb2NhbGVTdGFydGluZ0F0RmFpbGluZ0luZGV4CisgICAgICAgIHdoaWNoIGV4dHJhY3RzIHNs
b3cgcGF0aCBmb3IgdGhlIDgtYml0IHBhcnQgb2YgY29udmVydFRvTG93ZXJjYXNlV2l0aG91dExv
Y2FsZQorICAgICAgICBpbnRvIGEgaGVscGVyIGZ1bmN0aW9uLiBJIGRlY2lkZWQgdG8gZXh0cmFj
dCB0aGlzIGludG8gaXRzIG93biBmdW5jdGlvbiBiZWNhdXNlCisgICAgICAgIGl0IG1heSBiZSB0
aGUgY2FzZSB0aGF0IEpTQ3MgSklUcyB3aWxsIHdhbnQgdG8gY29udGludWUgdGhlIG9wZXJhdGlv
bgorICAgICAgICBhZnRlciBpdCBoYXMgYWxyZWFkeSBlbnN1cmVkIHRoYXQgcGFydCBvZiBhbiA4
LWJpdCBzdHJpbmcgaXMgbG93ZXIgY2FzZS4KKworICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0lt
cGwuY3BwOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpjb252ZXJ0VG9Mb3dlcmNhc2VXaXRo
b3V0TG9jYWxlKToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6Y29udmVydFRvTG93ZXJjYXNl
V2l0aG91dExvY2FsZVN0YXJ0aW5nQXRGYWlsaW5nSW5kZXgpOgorICAgICAgICAqIHd0Zi90ZXh0
L1N0cmluZ0ltcGwuaDoKKyAgICAgICAgKiB3dGYvdGV4dC9XVEZTdHJpbmcuY3BwOgorICAgICAg
ICAoV1RGOjpTdHJpbmc6OmNvbnZlcnRUb0xvd2VyY2FzZVdpdGhvdXRMb2NhbGVTdGFydGluZ0F0
RmFpbGluZ0luZGV4KToKKyAgICAgICAgKiB3dGYvdGV4dC9XVEZTdHJpbmcuaDoKKwogMjAxNi0x
MC0wMyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBzdXBw
b3J0IGZvciBLZXlib2FyZEV2ZW50LmtleSBhdHRyaWJ1dGUKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L3RleHQvU3RyaW5nSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9T
dHJpbmdJbXBsLmNwcAkocmV2aXNpb24gMjA2NzY0KQorKysgU291cmNlL1dURi93dGYvdGV4dC9T
dHJpbmdJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYzLDM5ICszNjMsMjAgQEAgVUNoYXIz
MiBTdHJpbmdJbXBsOjpjaGFyYWN0ZXJTdGFydGluZ0F0KAogUmVmPFN0cmluZ0ltcGw+IFN0cmlu
Z0ltcGw6OmNvbnZlcnRUb0xvd2VyY2FzZVdpdGhvdXRMb2NhbGUoKQogewogICAgIC8vIE5vdGU6
IEF0IG9uZSB0aW1lIHRoaXMgd2FzIGEgaG90IGZ1bmN0aW9uIGluIHRoZSBEcm9tYWVvIGJlbmNo
bWFyaywgc3BlY2lmaWNhbGx5IHRoZQotICAgIC8vIG5vLW9wIGNvZGUgcGF0aCB1cCB0aHJvdWdo
IHRoZSBmaXJzdCAncmV0dXJuJyBzdGF0ZW1lbnQuCisgICAgLy8gbm8tb3AgY29kZSBwYXRoIHRo
YXQgbWF5IHJldHVybiBvdXJzZWxmIGlmIHdlIGZpbmQgbm8gdXBwZXIgY2FzZSBsZXR0ZXJzIGFu
ZCBubyBpbnZhbGlkCisgICAgLy8gQVNDSUkgbGV0dGVycy4KIAogICAgIC8vIEZpcnN0IHNjYW4g
dGhlIHN0cmluZyBmb3IgdXBwZXJjYXNlIGFuZCBub24tQVNDSUkgY2hhcmFjdGVyczoKICAgICBp
ZiAoaXM4Qml0KCkpIHsKLSAgICAgICAgdW5zaWduZWQgZmFpbGluZ0luZGV4OwogICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9sZW5ndGg7ICsraSkgewogICAgICAgICAgICAgTENo
YXIgY2hhcmFjdGVyID0gbV9kYXRhOFtpXTsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWSgoY2hh
cmFjdGVyICYgfjB4N0YpIHx8IGlzQVNDSUlVcHBlcihjaGFyYWN0ZXIpKSkgewotICAgICAgICAg
ICAgICAgIGZhaWxpbmdJbmRleCA9IGk7Ci0gICAgICAgICAgICAgICAgZ290byBTbG93UGF0aDsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gKnRoaXM7Ci0KLVNsb3dQ
YXRoOgotICAgICAgICBMQ2hhciogZGF0YTg7Ci0gICAgICAgIGF1dG8gbmV3SW1wbCA9IGNyZWF0
ZVVuaW5pdGlhbGl6ZWRJbnRlcm5hbE5vbkVtcHR5KG1fbGVuZ3RoLCBkYXRhOCk7Ci0KLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZhaWxpbmdJbmRleDsgKytpKQotICAgICAgICAg
ICAgZGF0YThbaV0gPSBtX2RhdGE4W2ldOwotCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IGZh
aWxpbmdJbmRleDsgaSA8IG1fbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIExDaGFyIGNoYXJh
Y3RlciA9IG1fZGF0YThbaV07Ci0gICAgICAgICAgICBpZiAoIShjaGFyYWN0ZXIgJiB+MHg3Rikp
Ci0gICAgICAgICAgICAgICAgZGF0YThbaV0gPSB0b0FTQ0lJTG93ZXIoY2hhcmFjdGVyKTsKLSAg
ICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIEFTU0VSVCh1X3RvbG93ZXIoY2hhcmFj
dGVyKSA8PSAweEZGKTsKLSAgICAgICAgICAgICAgICBkYXRhOFtpXSA9IHN0YXRpY19jYXN0PExD
aGFyPih1X3RvbG93ZXIoY2hhcmFjdGVyKSk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBp
ZiAoVU5MSUtFTFkoKGNoYXJhY3RlciAmIH4weDdGKSB8fCBpc0FTQ0lJVXBwZXIoY2hhcmFjdGVy
KSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb0xvd2VyY2FzZVdpdGhvdXRMb2Nh
bGVTdGFydGluZ0F0RmFpbGluZ0luZGV4KGkpOwogICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJu
IG5ld0ltcGw7CisgICAgICAgIHJldHVybiAqdGhpczsKICAgICB9CisKICAgICBib29sIG5vVXBw
ZXIgPSB0cnVlOwogICAgIHVuc2lnbmVkIG9yZWQgPSAwOwogCkBAIC00NDEsNiArNDIyLDMwIEBA
IFNsb3dQYXRoOgogICAgIHJldHVybiBuZXdJbXBsOwogfQogCitSZWY8U3RyaW5nSW1wbD4gU3Ry
aW5nSW1wbDo6Y29udmVydFRvTG93ZXJjYXNlV2l0aG91dExvY2FsZVN0YXJ0aW5nQXRGYWlsaW5n
SW5kZXgodW5zaWduZWQgZmFpbGluZ0luZGV4KQoreworICAgIEFTU0VSVChpczhCaXQoKSk7Cisg
ICAgTENoYXIqIGRhdGE4OworICAgIGF1dG8gbmV3SW1wbCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWRJ
bnRlcm5hbE5vbkVtcHR5KG1fbGVuZ3RoLCBkYXRhOCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgZmFpbGluZ0luZGV4OyArK2kpIHsKKyAgICAgICAgQVNTRVJUKCEobV9kYXRhOFtp
XSAmIH4weDdGKSAmJiAhaXNBU0NJSVVwcGVyKG1fZGF0YThbaV0pKTsKKyAgICAgICAgZGF0YThb
aV0gPSBtX2RhdGE4W2ldOworICAgIH0KKworICAgIGZvciAodW5zaWduZWQgaSA9IGZhaWxpbmdJ
bmRleDsgaSA8IG1fbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgTENoYXIgY2hhcmFjdGVyID0gbV9k
YXRhOFtpXTsKKyAgICAgICAgaWYgKCEoY2hhcmFjdGVyICYgfjB4N0YpKQorICAgICAgICAgICAg
ZGF0YThbaV0gPSB0b0FTQ0lJTG93ZXIoY2hhcmFjdGVyKTsKKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICBBU1NFUlQodV90b2xvd2VyKGNoYXJhY3RlcikgPD0gMHhGRik7CisgICAgICAgICAg
ICBkYXRhOFtpXSA9IHN0YXRpY19jYXN0PExDaGFyPih1X3RvbG93ZXIoY2hhcmFjdGVyKSk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gbmV3SW1wbDsKK30KKwogUmVmPFN0cmluZ0lt
cGw+IFN0cmluZ0ltcGw6OmNvbnZlcnRUb1VwcGVyY2FzZVdpdGhvdXRMb2NhbGUoKQogewogICAg
IC8vIFRoaXMgZnVuY3Rpb24gY291bGQgYmUgb3B0aW1pemVkIGZvciBuby1vcCBjYXNlcyB0aGUg
d2F5CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuaAkocmV2aXNpb24gMjA2NzY0KQorKysg
U291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4Miw2
ICs2ODIsNyBAQCBwdWJsaWM6CiAgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFJlZjxTdHJpbmdJ
bXBsPiBjb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpOwogICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQ
SSBSZWY8U3RyaW5nSW1wbD4gY29udmVydFRvQVNDSUlVcHBlcmNhc2UoKTsKICAgICBXVEZfRVhQ
T1JUX1NUUklOR19BUEkgUmVmPFN0cmluZ0ltcGw+IGNvbnZlcnRUb0xvd2VyY2FzZVdpdGhvdXRM
b2NhbGUoKTsKKyAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgUmVmPFN0cmluZ0ltcGw+IGNvbnZl
cnRUb0xvd2VyY2FzZVdpdGhvdXRMb2NhbGVTdGFydGluZ0F0RmFpbGluZ0luZGV4KHVuc2lnbmVk
KTsKICAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgUmVmPFN0cmluZ0ltcGw+IGNvbnZlcnRUb1Vw
cGVyY2FzZVdpdGhvdXRMb2NhbGUoKTsKICAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgUmVmPFN0
cmluZ0ltcGw+IGNvbnZlcnRUb0xvd2VyY2FzZVdpdGhMb2NhbGUoY29uc3QgQXRvbWljU3RyaW5n
JiBsb2NhbGVJZGVudGlmaWVyKTsKICAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgUmVmPFN0cmlu
Z0ltcGw+IGNvbnZlcnRUb1VwcGVyY2FzZVdpdGhMb2NhbGUoY29uc3QgQXRvbWljU3RyaW5nJiBs
b2NhbGVJZGVudGlmaWVyKTsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5jcHAJKHJldmlz
aW9uIDIwNjc2NCkKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzU4LDYgKzM1OCwxMyBAQCBTdHJpbmcgU3RyaW5nOjpjb252ZXJ0VG9Mb3dl
cmNhc2VXaXRob3V0CiAgICAgcmV0dXJuIG1faW1wbC0+Y29udmVydFRvTG93ZXJjYXNlV2l0aG91
dExvY2FsZSgpOwogfQogCitTdHJpbmcgU3RyaW5nOjpjb252ZXJ0VG9Mb3dlcmNhc2VXaXRob3V0
TG9jYWxlU3RhcnRpbmdBdEZhaWxpbmdJbmRleCh1bnNpZ25lZCBmYWlsaW5nSW5kZXgpIGNvbnN0
Cit7CisgICAgaWYgKCFtX2ltcGwpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICByZXR1
cm4gbV9pbXBsLT5jb252ZXJ0VG9Mb3dlcmNhc2VXaXRob3V0TG9jYWxlU3RhcnRpbmdBdEZhaWxp
bmdJbmRleChmYWlsaW5nSW5kZXgpOworfQorCiBTdHJpbmcgU3RyaW5nOjpjb252ZXJ0VG9VcHBl
cmNhc2VXaXRob3V0TG9jYWxlKCkgY29uc3QKIHsKICAgICBpZiAoIW1faW1wbCkKSW5kZXg6IFNv
dXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93
dGYvdGV4dC9XVEZTdHJpbmcuaAkocmV2aXNpb24gMjA2NzY0KQorKysgU291cmNlL1dURi93dGYv
dGV4dC9XVEZTdHJpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMzMwLDYgKzMzMCw3IEBAIHB1Ymxp
YzoKICAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgU3RyaW5nIGNvbnZlcnRUb0FTQ0lJTG93ZXJj
YXNlKCkgY29uc3Q7CiAgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFN0cmluZyBjb252ZXJ0VG9B
U0NJSVVwcGVyY2FzZSgpIGNvbnN0OwogICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBTdHJpbmcg
Y29udmVydFRvTG93ZXJjYXNlV2l0aG91dExvY2FsZSgpIGNvbnN0OworICAgIFdURl9FWFBPUlRf
U1RSSU5HX0FQSSBTdHJpbmcgY29udmVydFRvTG93ZXJjYXNlV2l0aG91dExvY2FsZVN0YXJ0aW5n
QXRGYWlsaW5nSW5kZXgodW5zaWduZWQpIGNvbnN0OwogICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQ
SSBTdHJpbmcgY29udmVydFRvVXBwZXJjYXNlV2l0aG91dExvY2FsZSgpIGNvbnN0OwogICAgIFdU
Rl9FWFBPUlRfU1RSSU5HX0FQSSBTdHJpbmcgY29udmVydFRvTG93ZXJjYXNlV2l0aExvY2FsZShj
b25zdCBBdG9taWNTdHJpbmcmIGxvY2FsZUlkZW50aWZpZXIpIGNvbnN0OwogICAgIFdURl9FWFBP
UlRfU1RSSU5HX0FQSSBTdHJpbmcgY29udmVydFRvVXBwZXJjYXNlV2l0aExvY2FsZShjb25zdCBB
dG9taWNTdHJpbmcmIGxvY2FsZUlkZW50aWZpZXIpIGNvbnN0Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>290666</attachid>
            <date>2016-10-04 16:29:59 -0700</date>
            <delta_ts>2016-10-04 18:27:34 -0700</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>30725</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMDY3OTQpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE4IEBACisyMDE2LTEwLTA0ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFN0cmluZy5wcm90b3R5cGUudG9Mb3dlckNhc2Ugc2hvdWxkIGJlIGEg
REZHL0ZUTCBpbnRyaW5zaWMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE2Mjg4NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogbWljcm9iZW5jaG1hcmtzL3RvLWxvd2VyLWNhc2UuanM6IEFkZGVkLgorICAg
ICAgICAoYXNzZXJ0KToKKyAgICAgICAgKGZvbyk6CisgICAgICAgIChiYXIpOgorICAgICAgICAq
IHN0cmVzcy90by1sb3dlci1jYXNlLmpzOiBBZGRlZC4KKyAgICAgICAgKGFzc2VydCk6CisgICAg
ICAgIChmb28pOgorCiAyMDE2LTEwLTA0ICBKRiBCYXN0aWVuICA8amZiYXN0aWVuQGFwcGxlLmNv
bT4KIAogICAgICAgICBXZWJBc3NlbWJseTogaGFuZGxlIGEgZmV3IGNvcm5lciBjYXNlcwpJbmRl
eDogSlNUZXN0cy9taWNyb2JlbmNobWFya3MvdG8tbG93ZXItY2FzZS5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy90by1sb3dlci1jYXNlLmpzCShub25leGlzdGVudCkK
KysrIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL3RvLWxvd2VyLWNhc2UuanMJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwzNiBAQAorZnVuY3Rpb24gYXNzZXJ0KGIpIHsKKyAgICBpZiAoIWIpCisg
ICAgICAgIHRocm93IG5ldyBFcnJvcigiQmFkIGFzc2VydGlvbiIpOworfQorbm9JbmxpbmUoYXNz
ZXJ0KTsKKworbGV0IHRlc3RzID0gWworICAgIFsiZm9vIiwgImZvbyJdLAorICAgIFsiZm9vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vIiwgImZvb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vbyJdLAorXTsKKworZnVuY3Rpb24gZm9vKGEpIHsKKyAgICByZXR1cm4gYS50b0xvd2Vy
Q2FzZSgpOworfQorbm9JbmxpbmUoZm9vKTsKKworZnVuY3Rpb24gYmFyKGEpIHsKKyAgICBhLnRv
TG93ZXJDYXNlKCk7CisgICAgYXNzZXJ0KHRydWUpOyAvLyBzaWRlIGVmZmVjdHMKKyAgICBhLnRv
TG93ZXJDYXNlKCk7Cit9Citub0lubGluZShiYXIpOworCitsZXQgc3RhcnQgPSBEYXRlLm5vdygp
OworZm9yIChsZXQgaSA9IDA7IGkgPCA1MDAwMDA7IGkrKykgeworICAgIGZvciAobGV0IGkgPSAw
OyBpIDwgdGVzdHMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgbGV0IHRlc3QgPSB0ZXN0c1tpXVsw
XTsKKyAgICAgICAgbGV0IHJlc3VsdCA9IHRlc3RzW2ldWzFdOworICAgICAgICBhc3NlcnQoZm9v
KHRlc3QpID09PSByZXN1bHQpOworICAgICAgICBiYXIodGVzdCk7CisgICAgfQorfQorCitjb25z
dCB2ZXJib3NlID0gZmFsc2U7CitpZiAodmVyYm9zZSkKKyAgICBwcmludChEYXRlLm5vdygpIC0g
c3RhcnQpOwpJbmRleDogSlNUZXN0cy9zdHJlc3MvdG8tbG93ZXItY2FzZS5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBKU1Rlc3RzL3N0cmVzcy90by1sb3dlci1jYXNlLmpzCShub25leGlzdGVudCkKKysrIEpT
VGVzdHMvc3RyZXNzL3RvLWxvd2VyLWNhc2UuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwz
MCBAQAorZnVuY3Rpb24gYXNzZXJ0KGIpIHsKKyAgICBpZiAoIWIpCisgICAgICAgIHRocm93IG5l
dyBFcnJvcigiQmFkIGFzc2VydGlvbiIpOworfQorCitsZXQgdGVzdHMgPSBbCisgICAgWyJGT08i
LCAiZm9vIl0sCisgICAgWyJmZmZcdTAwQzIiLCAiZmZmXHUwMEUyIl0sCisgICAgWyJmb28iLCAi
Zm9vIl0sCisgICAgWyJmb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb28iLCAiZm9vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vIl0sCisgICAgWyJCYVIiLCAiYmFyIl0sCisgICAg
WyJGT09cdTAwQTkiLCAiZm9vXHUwMEE5Il0sCisgICAgWyIjJCMkIiwgIiMkIyQiXSwKKyAgICBb
IiYmJlx1MDBBOSIsICImJiZcdTAwQTkiXSwKKyAgICBbIiYmJlx1MDBDMiIsICImJiZcdTAwRTIi
XSwKKyAgICBbIkFCQ1x1MDEwMCIsICJhYmNcdTAxMDEiXSwKK107CisKK2Z1bmN0aW9uIGZvbyhh
KSB7CisgICAgcmV0dXJuIGEudG9Mb3dlckNhc2UoKTsKK30KK25vSW5saW5lKGZvbyk7CisKK2Zv
ciAobGV0IGkgPSAwOyBpIDwgMTAwMDA7IGkrKykgeworICAgIGZvciAobGV0IGkgPSAwOyBpIDwg
dGVzdHMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgbGV0IHRlc3QgPSB0ZXN0c1tpXVswXTsKKyAg
ICAgICAgbGV0IHJlc3VsdCA9IHRlc3RzW2ldWzFdOworICAgICAgICBhc3NlcnQoZm9vKHRlc3Qp
ID09PSByZXN1bHQpOworICAgIH0KK30KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2
aXNpb24gMjA2NzkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDUyIEBACisyMDE2LTEwLTA0ICBTYWFtIEJhcmF0aSAgPHNiYXJh
dGlAYXBwbGUuY29tPgorCisgICAgICAgIFN0cmluZy5wcm90b3R5cGUudG9Mb3dlckNhc2Ugc2hv
dWxkIGJlIGEgREZHL0ZUTCBpbnRyaW5zaWMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE2Mjg4NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggbWFrZXMgVG9Mb3dlckNhc2UgYW4gaW50cmlu
c2ljIGluIHRoZSBERkcvRlRMLiBPbiB0aGUgZmFzdAorICAgICAgICBwYXRoLCB0aGUgaW50cmlu
c2ljIHdpbGwgbG9vcCBvdmVyIGFuIDgtYml0IHN0cmluZyBlbnN1cmluZyBpdCdzIGFscmVhZHkK
KyAgICAgICAgbG93ZXIgY2FzZSwgYW5kIHNpbXBseSByZXR1cm4gdGhlIHN0cmluZy4gSW4gdGhl
IHNsb3cgcGF0aCwgaXQnbGwgY2FsbAorICAgICAgICBpbnRvIEMgY29kZSB0byBtYWtlIGEgbmV3
IHN0cmluZy4KKworICAgICAgICBUaGlzIGlzIGEgNy04JSBzcGVlZHVwIG9uIEVTNlNhbXBsZUJl
bmNoL0Jhc2ljLgorCisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVz
Lmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRl
VHlwZT46OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWND
YWxsKToKKyAgICAgICAgKiBkZmcvREZHQ2xvYmJlcml6ZS5oOgorICAgICAgICAoSlNDOjpERkc6
OmNsb2JiZXJpemUpOgorICAgICAgICAqIGRmZy9ERkdEb2VzR0MuY3BwOgorICAgICAgICAoSlND
OjpERkc6OmRvZXNHQyk6CisgICAgICAgICogZGZnL0RGR0ZpeHVwUGhhc2UuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmZpeHVwTm9kZSk6CisgICAgICAgICogZGZnL0RGR05v
ZGVUeXBlLmg6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGRm
Zy9ERkdPcGVyYXRpb25zLmg6CisgICAgICAgICogZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlv
blBoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHU2FmZVRvRXhlY3V0ZS5oOgorICAgICAgICAo
SlNDOjpERkc6OnNhZmVUb0V4ZWN1dGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVUb0xvd2Vy
Q2FzZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNhbGxPcGVyYXRpb24pOgorICAgICAgICAqIGRmZy9ERkdT
cGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBmdGwv
RlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oOgorICAgICAgICAqIGZ0bC9GVExDYXBhYmlsaXRp
ZXMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmNhbkNvbXBpbGUpOgorICAgICAgICAqIGZ0bC9G
VExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0Iz
Ojpjb21waWxlTm9kZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNv
bXBpbGVUb0xvd2VyQ2FzZSk6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuaDoKKyAgICAg
ICAgKiBydW50aW1lL0ludHJpbnNpYy5oOgorICAgICAgICAqIHJ1bnRpbWUvU3RyaW5nUHJvdG90
eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6U3RyaW5nUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbik6
CisKIDIwMTYtMTAtMDQgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CiAK
ICAgICAgICAgUkVHUkVTU0lPTiAocjIwNjc3OCk6IFJlbGVhc2UgSlNDIHRlc3QgQ2hha3JhQ29y
ZS55YW1sL0NoYWtyYUNvcmUvdGVzdC9FcnJvci92YWxpZGF0ZV9saW5lX2NvbHVtbi5qcy5kZWZh
dWx0IGZhaWxpbmcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJ
bnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDIwNjc5MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMTAwNSw2ICsxMDA1LDExIEBAIGJvb2wgQWJzdHJhY3RJbnRl
cnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgYnJlYWs7CiAgICAgfQogCisgICAgY2Fz
ZSBUb0xvd2VyQ2FzZTogeworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUobV9ncmFwaCwg
U3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwogICAgIGNhc2UgTG9hZEZyb21K
U01hcEJ1Y2tldDoKICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlSGVhcFRvcCgpOwogICAgICAg
ICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJz
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNv
ZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAyMDY3OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU4MCw2ICsyNTgw
LDIwIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpY0NhbGwKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogCisgICAgY2FzZSBUb0xvd2VyQ2FzZUludHJpbnNpYzogewor
ICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgIT0gMSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgICAgICBpZiAobV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJv
ZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkVHlwZSkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7CisgICAgICAgIE5vZGUqIHRo
aXNTdHJpbmcgPSBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCwgcmVnaXN0ZXJPZmZz
ZXQpKTsKKyAgICAgICAgTm9kZSogcmVzdWx0ID0gYWRkVG9HcmFwaChUb0xvd2VyQ2FzZSwgdGhp
c1N0cmluZyk7CisgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksIHJl
c3VsdCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwogICAgIGRlZmF1bHQ6CiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMjA2NzkzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyOTEsNiArMTI5MSwx
MCBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAgIHJl
YWQoTWlzY0ZpZWxkcyk7CiAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oTWFwSGFzTG9jLCBNaXNj
RmllbGRzLCBub2RlLT5jaGlsZDEoKSksIExhenlOb2RlKG5vZGUpKTsKICAgICAgICAgcmV0dXJu
OworCisgICAgY2FzZSBUb0xvd2VyQ2FzZToKKyAgICAgICAgZGVmKFB1cmVWYWx1ZShub2RlKSk7
CisgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBMYXN0Tm9kZVR5cGU6CiAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdEb2VzR0MuY3BwCShyZXZpc2lvbiAyMDY3OTMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5Miw2ICsyOTIs
NyBAQCBib29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAgICAgY2FzZSBTdHJp
bmdSZXBsYWNlOgogICAgIGNhc2UgU3RyaW5nUmVwbGFjZVJlZ0V4cDoKICAgICBjYXNlIENyZWF0
ZVJlc3Q6CisgICAgY2FzZSBUb0xvd2VyQ2FzZToKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ICAgIAogICAgIGNhc2UgTXVsdGlQdXRCeU9mZnNldDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMjA2NzkzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTY3Myw2ICsxNjczLDE1IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogCisgICAgICAgIGNhc2UgVG9Mb3dlckNhc2U6IHsKKyAgICAgICAgICAgIC8vIFdlIGN1cnJl
bnRseSBvbmx5IHN1cHBvcnQgU3RyaW5nVXNlIHNpbmNlIHRoYXQgd2lsbCBlbnN1cmUgdGhhdAor
ICAgICAgICAgICAgLy8gVG9Mb3dlckNhc2UgaXMgYSBwdXJlIG9wZXJhdGlvbi4gSWYgd2UgZGVj
aWRlIHRvIHVwZGF0ZSB0aGlzIHdpdGgKKyAgICAgICAgICAgIC8vIG1vcmUgdHlwZXMgaW4gdGhl
IGZ1dHVyZSwgd2UgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgY2xvYmJlcml6ZSBydWxlcworICAg
ICAgICAgICAgLy8gYXJlIGNvcnJlY3QuCisgICAgICAgICAgICBmaXhFZGdlPFN0cmluZ1VzZT4o
bm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwogICAgICAg
ICBjYXNlIERlZmluZUFjY2Vzc29yUHJvcGVydHk6IHsKICAgICAgICAgICAgIGZpeEVkZ2U8Q2Vs
bFVzZT4obV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7CiAgICAgICAgICAgICBFZGdlJiBw
cm9wZXJ0eUVkZ2UgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMjA2NzkzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
OTYsNiArMzk2LDggQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3Jv
KEdldE1hcEJ1Y2tldCwgTm9kZVJlc3VsdEpTKSBcCiAgICAgbWFjcm8oTG9hZEZyb21KU01hcEJ1
Y2tldCwgTm9kZVJlc3VsdEpTKSBcCiAgICAgbWFjcm8oSXNOb25FbXB0eU1hcEJ1Y2tldCwgTm9k
ZVJlc3VsdEJvb2xlYW4pIFwKKyAgICBcCisgICAgbWFjcm8oVG9Mb3dlckNhc2UsIE5vZGVSZXN1
bHRKUykgXAogCiAvLyBUaGlzIGVudW0gZ2VuZXJhdGVzIGEgbW9ub3RvbmljYWxseSBpbmNyZWFz
aW5nIGlkIGZvciBhbGwgTm9kZSB0eXBlcywKIC8vIGFuZCBpcyB1c2VkIGJ5IHRoZSBzdWJzZXF1
ZW50IGVudW0gdG8gZmlsbCBvdXQgdGhlIGlkIChhcyBhY2Nlc3NlZCB2aWEgdGhlIE5vZGVJZE1h
c2spLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3Bw
CShyZXZpc2lvbiAyMDY3OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJh
dGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTE0LDYgKzE1MTQsMjIgQEAgU3RyaW5nSW1w
bCogSklUX09QRVJBVElPTiBvcGVyYXRpb25SZXNvbAogICAgIHJldHVybiBzdHJpbmctPnZhbHVl
KGV4ZWMpLmltcGwoKTsKIH0KIAorSlNTdHJpbmcqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVG9M
b3dlckNhc2UoRXhlY1N0YXRlKiBleGVjLCBKU1N0cmluZyogc3RyaW5nLCB1aW50MzJfdCBmYWls
aW5nSW5kZXgpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisKKyAgICBjb25zdCBTdHJpbmcmIGlucHV0U3RyaW5nID0gc3RyaW5n
LT52YWx1ZShleGVjKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsK
KyAgICBTdHJpbmcgbG93ZXJjYXNlZFN0cmluZyA9IGlucHV0U3RyaW5nLmlzOEJpdCgpID8gaW5w
dXRTdHJpbmcuY29udmVydFRvTG93ZXJjYXNlV2l0aG91dExvY2FsZVN0YXJ0aW5nQXRGYWlsaW5n
SW5kZXgoZmFpbGluZ0luZGV4KSA6IGlucHV0U3RyaW5nLmNvbnZlcnRUb0xvd2VyY2FzZVdpdGhv
dXRMb2NhbGUoKTsKKyAgICBpZiAobG93ZXJjYXNlZFN0cmluZy5pbXBsKCkgPT0gaW5wdXRTdHJp
bmcuaW1wbCgpKQorICAgICAgICByZXR1cm4gc3RyaW5nOworICAgIHNjb3BlLnJlbGVhc2UoKTsK
KyAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgbG93ZXJjYXNlZFN0cmluZyk7Cit9CisKIEpTU3Ry
aW5nKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblNpbmdsZUNoYXJhY3RlclN0cmluZyhFeGVjU3Rh
dGUqIGV4ZWMsIGludDMyX3QgY2hhcmFjdGVyKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkocmV2aXNp
b24gMjA2NzkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE1NSw2ICsxNTUsOCBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkVuc3VyZUFycmF5CiBTdHJpbmdJbXBsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJl
c29sdmVSb3BlKEV4ZWNTdGF0ZSosIEpTU3RyaW5nKik7CiBKU1N0cmluZyogSklUX09QRVJBVElP
TiBvcGVyYXRpb25TaW5nbGVDaGFyYWN0ZXJTdHJpbmcoRXhlY1N0YXRlKiwgaW50MzJfdCk7CiAK
K0pTU3RyaW5nKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRvTG93ZXJDYXNlKEV4ZWNTdGF0ZSos
IEpTU3RyaW5nKiwgdWludDMyX3QpOworCiBpbnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
TWFwSGFzaChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBpbnB1dCk7CiBKU0NlbGwqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uSlNNYXBGaW5kQnVja2V0KEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEVu
Y29kZWRKU1ZhbHVlLCBpbnQzMl90KTsKIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25K
U1NldEZpbmRCdWNrZXQoRXhlY1N0YXRlKiwgSlNDZWxsKiwgRW5jb2RlZEpTVmFsdWUsIGludDMy
X3QpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFn
YXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDIwNjc5MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03NTQsNiArNzU0LDExIEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBzZXRQcmVkaWN0aW9uKFNwZWNJbnQzMk9ubHkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KKworICAgICAgICBjYXNlIFRvTG93ZXJDYXNlOgorICAgICAgICAgICAgc2V0UHJlZGlj
dGlvbihTcGVjU3RyaW5nKTsKKyAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAgIGNhc2UgQXJp
dGhQb3c6CiAgICAgICAgIGNhc2UgQXJpdGhTcXJ0OgogICAgICAgICBjYXNlIEFyaXRoRlJvdW5k
OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJ
KHJldmlzaW9uIDIwNjc5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRv
RXhlY3V0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNjEsNiArMzYxLDcgQEAgYm9vbCBzYWZlVG9F
eGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdAogICAgIGNhc2UgUHV0RHluYW1pY1ZhcjoKICAg
ICBjYXNlIFJlc29sdmVTY29wZToKICAgICBjYXNlIE1hcEhhc2g6CisgICAgY2FzZSBUb0xvd2Vy
Q2FzZToKICAgICBjYXNlIEdldE1hcEJ1Y2tldDoKICAgICBjYXNlIExvYWRGcm9tSlNNYXBCdWNr
ZXQ6CiAgICAgY2FzZSBJc05vbkVtcHR5TWFwQnVja2V0OgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lv
biAyMDY3OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
MzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjc4LDYgKzI2NzgsMTEgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICB9IH0KICAgICAgICAgYnJl
YWs7CiAgICAgfQorICAgIAorICAgIGNhc2UgVG9Mb3dlckNhc2U6IHsKKyAgICAgICAgY29tcGls
ZVRvTG93ZXJDYXNlKG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CiAKICAgICBjYXNlIEdl
dEJ5VmFsV2l0aFRoaXM6IHsKICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBub2Rl
LT5jaGlsZDEoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDIwNjc5MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4
ODgsNiArNDg4OCwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUp
CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAorICAgIGNhc2UgVG9Mb3dlckNhc2U6IHsKKyAgICAg
ICAgY29tcGlsZVRvTG93ZXJDYXNlKG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisKICAg
ICBjYXNlIElzT2JqZWN0OiB7CiAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5v
ZGUtPmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBSZXVzZSwg
dmFsdWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5jcHAJKHJldmlzaW9uIDIwNjc5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDkwLDYgKzE0OTAs
NjAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlQm9vbAogICAgIGp1bXAo
bm90VGFrZW4pOwogfQogCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVG9Mb3dlckNhc2Uo
Tm9kZSogbm9kZSkKK3sKKyAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBUb0xvd2VyQ2FzZSk7Cisg
ICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgc3RyaW5nKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAg
ICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKKyAgICBHUFJUZW1wb3JhcnkgaW5kZXgodGhpcyk7
CisgICAgR1BSVGVtcG9yYXJ5IGNoYXJSZWcodGhpcyk7CisgICAgR1BSVGVtcG9yYXJ5IGxlbmd0
aCh0aGlzKTsKKworICAgIEdQUlJlZyBzdHJpbmdHUFIgPSBzdHJpbmcuZ3ByKCk7CisgICAgR1BS
UmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOworICAgIEdQUlJlZyBpbmRleEdQUiA9IGluZGV4Lmdw
cigpOworICAgIEdQUlJlZyBjaGFyR1BSID0gY2hhclJlZy5ncHIoKTsKKyAgICBHUFJSZWcgbGVu
Z3RoR1BSID0gbGVuZ3RoLmdwcigpOworCisgICAgc3BlY3VsYXRlU3RyaW5nKG5vZGUtPmNoaWxk
MSgpLCBzdHJpbmdHUFIpOworCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsK
KworICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cigwKSwgaW5kZXhHUFIpOworCisgICAgbV9q
aXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdHJpbmdHUFIsIEpTU3RyaW5nOjpv
ZmZzZXRPZlZhbHVlKCkpLCB0ZW1wR1BSKTsKKyAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJh
bmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgdGVtcEdQUikpOworCisgICAgc2xvd1Bh
dGguYXBwZW5kKG1faml0LmJyYW5jaFRlc3QzMigKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Olpl
cm8sIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXBHUFIsIFN0cmluZ0ltcGw6OmZsYWdzT2Zm
c2V0KCkpLAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKFN0cmluZ0ltcGw6
OmZsYWdJczhCaXQoKSkpKTsKKyAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3ModGVtcEdQUiwgU3RyaW5nSW1wbDo6bGVuZ3RoTWVtb3J5T2Zmc2V0KCkpLCBsZW5ndGhHUFIp
OworICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcEdQUiwgU3Ry
aW5nSW1wbDo6ZGF0YU9mZnNldCgpKSwgdGVtcEdQUik7CisKKyAgICBhdXRvIGxvb3BTdGFydCA9
IG1faml0LmxhYmVsKCk7CisgICAgYXV0byBsb29wRG9uZSA9IG1faml0LmJyYW5jaDMyKENDYWxs
SGVscGVyczo6QWJvdmVPckVxdWFsLCBpbmRleEdQUiwgbGVuZ3RoR1BSKTsKKyAgICBtX2ppdC5s
b2FkOChNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHRlbXBHUFIsIGluZGV4R1BSLCBNYWNyb0Fz
c2VtYmxlcjo6VGltZXNPbmUpLCBjaGFyR1BSKTsKKyAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQu
YnJhbmNoVGVzdDMyKENDYWxsSGVscGVyczo6Tm9uWmVybywgY2hhckdQUiwgVHJ1c3RlZEltbTMy
KH4weDdGKSkpOworICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMignQScpLCBjaGFyR1BSKTsK
KyAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpCZWxvd09y
RXF1YWwsIGNoYXJHUFIsIFRydXN0ZWRJbW0zMignWicgLSAnQScpKSk7CisKKyAgICBtX2ppdC5h
ZGQzMihUcnVzdGVkSW1tMzIoMSksIGluZGV4R1BSKTsKKyAgICBtX2ppdC5qdW1wKCkubGlua1Rv
KGxvb3BTdGFydCwgJm1faml0KTsKKyAgICAKKyAgICBzbG93UGF0aC5saW5rKCZtX2ppdCk7Cisg
ICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMobGVuZ3RoR1BSKTsKKyAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblRvTG93ZXJDYXNlLCBsZW5ndGhHUFIsIHN0cmluZ0dQUiwgaW5kZXhHUFIpOwor
ICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMobGVuZ3RoR1BSKTsKKyAgICBtX2ppdC5leGNlcHRp
b25DaGVjaygpOworICAgIGF1dG8gZG9uZSA9IG1faml0Lmp1bXAoKTsKKworICAgIGxvb3BEb25l
LmxpbmsoJm1faml0KTsKKyAgICBtX2ppdC5tb3ZlKHN0cmluZ0dQUiwgbGVuZ3RoR1BSKTsKKwor
ICAgIGRvbmUubGluaygmbV9qaXQpOworICAgIGNlbGxSZXN1bHQobGVuZ3RoR1BSLCBub2RlKTsK
K30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlSW50MzJCcmFuY2goTm9k
ZSogbm9kZSwgTm9kZSogYnJhbmNoTm9kZSwgSklUQ29tcGlsZXI6OlJlbGF0aW9uYWxDb25kaXRp
b24gY29uZGl0aW9uKQogewogICAgIEJhc2ljQmxvY2sqIHRha2VuID0gYnJhbmNoTm9kZS0+YnJh
bmNoRGF0YSgpLT50YWtlbi5ibG9jazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDIwNjc5MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtOTM4
LDYgKzkzOCwxMSBAQCBwdWJsaWM6CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZShjZWxsKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxTZXRSZXN1bHQob3BlcmF0
aW9uLCByZXN1bHQpOwogICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9u
KEpzc19KSVRPcGVyYXRpb25fRUpzc1VpIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVn
IGFyZzEsIEdQUlJlZyBhcmcyKQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNX
aXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFNldFJl
c3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgfQogICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oUF9KSVRPcGVyYXRpb25fRU8gb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBH
UFJSZWcgb2JqZWN0KQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhl
Y1N0YXRlKG9iamVjdCk7CkBAIC0yNjUxLDYgKzI2NTYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBj
b21waWxlQ29tcGFyZUVxUHRyKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVEZWZpbmVEYXRhUHJv
cGVydHkoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZURlZmluZUFjY2Vzc29yUHJvcGVydHkoTm9k
ZSopOworICAgIHZvaWQgY29tcGlsZVRvTG93ZXJDYXNlKE5vZGUqKTsKIAogICAgIHZvaWQgbW92
ZVRydWVUbyhHUFJSZWcpOwogICAgIHZvaWQgbW92ZUZhbHNlVG8oR1BSUmVnKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3Np
dG9yeS5oCShyZXZpc2lvbiAyMDY3OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDYgKzEwMSw3
IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKICAgICBtYWNybyhTY29wZWRBcmd1
bWVudHNUYWJsZV9sZW5ndGgsIFNjb3BlZEFyZ3VtZW50c1RhYmxlOjpvZmZzZXRPZkxlbmd0aCgp
KSBcCiAgICAgbWFjcm8oU3RyaW5nSW1wbF9kYXRhLCBTdHJpbmdJbXBsOjpkYXRhT2Zmc2V0KCkp
IFwKICAgICBtYWNybyhTdHJpbmdJbXBsX2hhc2hBbmRGbGFncywgU3RyaW5nSW1wbDo6ZmxhZ3NP
ZmZzZXQoKSkgXAorICAgIG1hY3JvKFN0cmluZ0ltcGxfbGVuZ3RoLCBTdHJpbmdJbXBsOjpsZW5n
dGhNZW1vcnlPZmZzZXQoKSkgXAogICAgIG1hY3JvKFN0cnVjdHVyZV9jbGFzc0luZm8sIFN0cnVj
dHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpIFwKICAgICBtYWNybyhTdHJ1Y3R1cmVfZ2xvYmFsT2Jq
ZWN0LCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSBcCiAgICAgbWFjcm8oU3RydWN0
dXJlX3Byb3RvdHlwZSwgU3RydWN0dXJlOjpwcm90b3R5cGVPZmZzZXQoKSkgXApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24g
MjA2NzkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNjUsNiArMjY1LDcgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZl
bCBjYW5Db21waWxlKE5vZGUqIAogICAgIGNhc2UgQ29tcGFyZVN0cmljdEVxOgogICAgIGNhc2Ug
RGVmaW5lRGF0YVByb3BlcnR5OgogICAgIGNhc2UgRGVmaW5lQWNjZXNzb3JQcm9wZXJ0eToKKyAg
ICBjYXNlIFRvTG93ZXJDYXNlOgogICAgICAgICAvLyBUaGVzZSBhcmUgT0suCiAgICAgICAgIGJy
ZWFrOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
QjMuY3BwCShyZXZpc2lvbiAyMDY3OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNDMsNiArMTA0Myw5IEBAIHBy
aXZhdGU6CiAgICAgICAgIGNhc2UgVW5yZWFjaGFibGU6CiAgICAgICAgICAgICBjb21waWxlVW5y
ZWFjaGFibGUoKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFRvTG93ZXJDYXNl
OgorICAgICAgICAgICAgY29tcGlsZVRvTG93ZXJDYXNlKCk7CisgICAgICAgICAgICBicmVhazsK
IAogICAgICAgICBjYXNlIFBoYW50b21Mb2NhbDoKICAgICAgICAgY2FzZSBMb29wSGludDoKQEAg
LTg2MjMsNiArODYyNiw2MCBAQCBwcml2YXRlOgogICAgICAgICBub25TcGVjdWxhdGl2ZUNvbXBh
cmUoaW50RnVuY3RvciwgZmFsbGJhY2tGdW5jdGlvbik7CiAgICAgfQogCisgICAgdm9pZCBjb21w
aWxlVG9Mb3dlckNhc2UoKQorICAgIHsKKyAgICAgICAgTEJhc2ljQmxvY2sgbm90Um9wZSA9IG1f
b3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIGlzOEJpdCA9IG1fb3V0Lm5ld0Js
b2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIGxvb3BUb3AgPSBtX291dC5uZXdCbG9jaygpOwor
ICAgICAgICBMQmFzaWNCbG9jayBsb29wQm9keSA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAg
IExCYXNpY0Jsb2NrIHNsb3dQYXRoID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2lj
QmxvY2sgY29udGludWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKKworICAgICAgICBMVmFsdWUg
c3RyaW5nID0gbG93U3RyaW5nKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBWYWx1ZUZyb21C
bG9jayBzdGFydEluZGV4ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmNvbnN0SW50MzIoMCkpOworICAg
ICAgICBWYWx1ZUZyb21CbG9jayBzdGFydEluZGV4Rm9yQ2FsbCA9IG1fb3V0LmFuY2hvcihtX291
dC5jb25zdEludDMyKDApKTsKKyAgICAgICAgTFZhbHVlIGltcGwgPSBtX291dC5sb2FkUHRyKHN0
cmluZywgbV9oZWFwcy5KU1N0cmluZ192YWx1ZSk7CisgICAgICAgIG1fb3V0LmJyYW5jaChtX291
dC5pc1plcm82NChpbXBsKSwKKyAgICAgICAgICAgIHVuc3VyZShzbG93UGF0aCksIHVuc3VyZShu
b3RSb3BlKSk7CisKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRU
byhub3RSb3BlLCBpczhCaXQpOworCisgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAg
IG1fb3V0LnRlc3RJc1plcm8zMigKKyAgICAgICAgICAgICAgICBtX291dC5sb2FkMzIoaW1wbCwg
bV9oZWFwcy5TdHJpbmdJbXBsX2hhc2hBbmRGbGFncyksCisgICAgICAgICAgICAgICAgbV9vdXQu
Y29uc3RJbnQzMihTdHJpbmdJbXBsOjpmbGFnSXM4Qml0KCkpKSwKKyAgICAgICAgICAgIHVuc3Vy
ZShzbG93UGF0aCksIHVuc3VyZShpczhCaXQpKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhp
czhCaXQsIGxvb3BUb3ApOworICAgICAgICBMVmFsdWUgbGVuZ3RoID0gbV9vdXQubG9hZDMyKGlt
cGwsIG1faGVhcHMuU3RyaW5nSW1wbF9sZW5ndGgpOworICAgICAgICBMVmFsdWUgYnVmZmVyID0g
bV9vdXQubG9hZFB0cihpbXBsLCBtX2hlYXBzLlN0cmluZ0ltcGxfZGF0YSk7CisgICAgICAgIFZh
bHVlRnJvbUJsb2NrIGZhc3RSZXN1bHQgPSBtX291dC5hbmNob3Ioc3RyaW5nKTsKKyAgICAgICAg
bV9vdXQuanVtcChsb29wVG9wKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhsb29wVG9wLCBs
b29wQm9keSk7CisgICAgICAgIExWYWx1ZSBpbmRleCA9IG1fb3V0LnBoaShJbnQzMiwgc3RhcnRJ
bmRleCk7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIGluZGV4RnJvbUJsb2NrID0gbV9vdXQuYW5j
aG9yKGluZGV4KTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmJlbG93KGluZGV4LCBsZW5n
dGgpLAorICAgICAgICAgICAgdW5zdXJlKGxvb3BCb2R5KSwgdW5zdXJlKGNvbnRpbnVhdGlvbikp
OworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGxvb3BCb2R5LCBzbG93UGF0aCk7CisKKyAgICAg
ICAgTFZhbHVlIGJ5dGUgPSBtX291dC5sb2FkOFplcm9FeHQzMihtX291dC5iYXNlSW5kZXgobV9o
ZWFwcy5jaGFyYWN0ZXJzOCwgYnVmZmVyLCBtX291dC56ZXJvRXh0UHRyKGluZGV4KSkpOworICAg
ICAgICBMVmFsdWUgaXNJbnZhbGlkQXNjaWlSYW5nZSA9IG1fb3V0LmJpdEFuZChieXRlLCBtX291
dC5jb25zdEludDMyKH4weDdGKSk7CisgICAgICAgIExWYWx1ZSBpc1VwcGVyQ2FzZSA9IG1fb3V0
LmJlbG93T3JFcXVhbChtX291dC5zdWIoYnl0ZSwgbV9vdXQuY29uc3RJbnQzMignQScpKSwgbV9v
dXQuY29uc3RJbnQzMignWicgLSAnQScpKTsKKyAgICAgICAgTFZhbHVlIGlzQmFkQ2hhcmFjdGVy
ID0gbV9vdXQuYml0T3IoaXNJbnZhbGlkQXNjaWlSYW5nZSwgaXNVcHBlckNhc2UpOworICAgICAg
ICBtX291dC5hZGRJbmNvbWluZ1RvUGhpKGluZGV4LCBtX291dC5hbmNob3IobV9vdXQuYWRkKGlu
ZGV4LCBtX291dC5pbnQzMk9uZSkpKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKGlzQmFkQ2hhcmFj
dGVyLCB1bnN1cmUoc2xvd1BhdGgpLCB1bnN1cmUobG9vcFRvcCkpOworCisgICAgICAgIG1fb3V0
LmFwcGVuZFRvKHNsb3dQYXRoLCBjb250aW51YXRpb24pOworICAgICAgICBMVmFsdWUgc2xvd1Bh
dGhJbmRleCA9IG1fb3V0LnBoaShJbnQzMiwgc3RhcnRJbmRleEZvckNhbGwsIGluZGV4RnJvbUJs
b2NrKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcih2
bUNhbGwocG9pbnRlclR5cGUoKSwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvblRvTG93ZXJDYXNl
KSwgbV9jYWxsRnJhbWUsIHN0cmluZywgc2xvd1BhdGhJbmRleCkpOworICAgICAgICBtX291dC5q
dW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9u
LCBsYXN0TmV4dCk7CisgICAgICAgIHNldEpTVmFsdWUobV9vdXQucGhpKHBvaW50ZXJUeXBlKCks
IGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpKTsKKyAgICB9CisKICAgICB2b2lkIGNvbXBpbGVSZXNv
bHZlU2NvcGUoKQogICAgIHsKICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IG1fZ3Jh
cGguaWRlbnRpZmllcnMoKVttX25vZGUtPmlkZW50aWZpZXJOdW1iZXIoKV07CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkocmV2aXNpb24gMjA2NzkzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMwOSw2ICszMDksNyBAQCB0eXBlZGVmIFNsb3dQYXRoUmV0dXJuVHlwZSAoSklUX09Q
RVJBVElPCiB0eXBlZGVmIFN0cmluZ0ltcGwqIChKSVRfT1BFUkFUSU9OICpUX0pJVE9wZXJhdGlv
bl9FSnNzKShFeGVjU3RhdGUqLCBKU1N0cmluZyopOwogdHlwZWRlZiBKU1N0cmluZyogKEpJVF9P
UEVSQVRJT04gKkpzc19KSVRPcGVyYXRpb25fRVopKEV4ZWNTdGF0ZSosIGludDMyX3QpOwogdHlw
ZWRlZiBKU1N0cmluZyogKEpJVF9PUEVSQVRJT04gKkpzc19KSVRPcGVyYXRpb25fRUpKSikoRXhl
Y1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSk7
Cit0eXBlZGVmIEpTU3RyaW5nKiAoSklUX09QRVJBVElPTiAqSnNzX0pJVE9wZXJhdGlvbl9FSnNz
VWkpKEV4ZWNTdGF0ZSosIEpTU3RyaW5nKiwgdWludDMyX3QpOwogCiAvLyBUaGlzIG1ldGhvZCBp
cyB1c2VkIHRvIGxvb2t1cCBhbiBleGNlcHRpb24gaGFuZGVyLCBrZXllZCBieSBmYXVsdExvY2F0
aW9uLCB3aGljaCBpcwogLy8gdGhlIHJldHVybiBsb2NhdGlvbiBmcm9tIG9uZSBvZiB0aGUgY2Fs
bHMgb3V0IHRvIG9uZSBvZiB0aGUgaGVscGVyIG9wZXJhdGlvbnMgYWJvdmUuCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRyaW5zaWMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRyaW5zaWMuaAkocmV2aXNpb24gMjA2NzkzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50cmluc2ljLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTY1LDYgKzY1LDcgQEAgZW51bSBKU19FWFBPUlRfUFJJVkFURSBJbnRyaW5zaWMgewog
ICAgIEpTTWFwSGFzSW50cmluc2ljLAogICAgIEpTU2V0SGFzSW50cmluc2ljLAogICAgIEhhc093
blByb3BlcnR5SW50cmluc2ljLAorICAgIFRvTG93ZXJDYXNlSW50cmluc2ljLAogCiAgICAgLy8g
R2V0dGVyIGludHJpbnNpY3MuCiAgICAgVHlwZWRBcnJheUxlbmd0aEludHJpbnNpYywKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNw
cAkocmV2aXNpb24gMjA2NzkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
aW5nUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQyLDcgKzE0Miw3IEBAIHZvaWQg
U3RyaW5nUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYKICAgICBKU0NfTkFUSVZFX0ZVTkNU
SU9OX1dJVEhPVVRfVFJBTlNJVElPTigic2xpY2UiLCBzdHJpbmdQcm90b0Z1bmNTbGljZSwgRG9u
dEVudW0sIDIpOwogICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKCJz
dWJzdHIiLCBzdHJpbmdQcm90b0Z1bmNTdWJzdHIsIERvbnRFbnVtLCAyKTsKICAgICBKU0NfTkFU
SVZFX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTigic3Vic3RyaW5nIiwgc3RyaW5nUHJvdG9G
dW5jU3Vic3RyaW5nLCBEb250RW51bSwgMik7Ci0gICAgSlNDX05BVElWRV9GVU5DVElPTl9XSVRI
T1VUX1RSQU5TSVRJT04oInRvTG93ZXJDYXNlIiwgc3RyaW5nUHJvdG9GdW5jVG9Mb3dlckNhc2Us
IERvbnRFbnVtLCAwKTsKKyAgICBKU0NfTkFUSVZFX0lOVFJJTlNJQ19GVU5DVElPTl9XSVRIT1VU
X1RSQU5TSVRJT04oInRvTG93ZXJDYXNlIiwgc3RyaW5nUHJvdG9GdW5jVG9Mb3dlckNhc2UsIERv
bnRFbnVtLCAwLCBUb0xvd2VyQ2FzZUludHJpbnNpYyk7CiAgICAgSlNDX05BVElWRV9GVU5DVElP
Tl9XSVRIT1VUX1RSQU5TSVRJT04oInRvVXBwZXJDYXNlIiwgc3RyaW5nUHJvdG9GdW5jVG9VcHBl
ckNhc2UsIERvbnRFbnVtLCAwKTsKICNpZiBFTkFCTEUoSU5UTCkKICAgICBKU0NfQlVJTFRJTl9G
VU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04oImxvY2FsZUNvbXBhcmUiLCBzdHJpbmdQcm90b3R5
cGVMb2NhbGVDb21wYXJlQ29kZUdlbmVyYXRvciwgRG9udEVudW0pOwpJbmRleDogU291cmNlL1dU
Ri9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9u
IDIwNjc5MykKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMjQgQEAKKzIwMTYtMTAtMDQgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CisK
KyAgICAgICAgU3RyaW5nLnByb3RvdHlwZS50b0xvd2VyQ2FzZSBzaG91bGQgYmUgYSBERkcvRlRM
IGludHJpbnNpYworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTYyODg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGhpcyBwYXRjaCBleHBvc2VzIGEgbmV3IFN0cmluZ0ltcGwgZnVuY3Rpb24gY2FsbGVkIGNv
bnZlcnRUb0xvd2VyY2FzZVdpdGhvdXRMb2NhbGVTdGFydGluZ0F0RmFpbGluZ0luZGV4CisgICAg
ICAgIHdoaWNoIGV4dHJhY3RzIHNsb3cgcGF0aCBmb3IgdGhlIDgtYml0IHBhcnQgb2YgY29udmVy
dFRvTG93ZXJjYXNlV2l0aG91dExvY2FsZQorICAgICAgICBpbnRvIGEgaGVscGVyIGZ1bmN0aW9u
LiBJIGRlY2lkZWQgdG8gZXh0cmFjdCB0aGlzIGludG8gaXRzIG93biBmdW5jdGlvbiBiZWNhdXNl
CisgICAgICAgIGl0IG1heSBiZSB0aGUgY2FzZSB0aGF0IEpTQ3MgSklUcyB3aWxsIHdhbnQgdG8g
Y29udGludWUgdGhlIG9wZXJhdGlvbgorICAgICAgICBhZnRlciBpdCBoYXMgYWxyZWFkeSBlbnN1
cmVkIHRoYXQgcGFydCBvZiBhbiA4LWJpdCBzdHJpbmcgaXMgbG93ZXIgY2FzZS4KKworICAgICAg
ICAqIHd0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpj
b252ZXJ0VG9Mb3dlcmNhc2VXaXRob3V0TG9jYWxlKToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1w
bDo6Y29udmVydFRvTG93ZXJjYXNlV2l0aG91dExvY2FsZVN0YXJ0aW5nQXRGYWlsaW5nSW5kZXgp
OgorICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0ltcGwuaDoKKyAgICAgICAgKiB3dGYvdGV4dC9X
VEZTdHJpbmcuY3BwOgorICAgICAgICAoV1RGOjpTdHJpbmc6OmNvbnZlcnRUb0xvd2VyY2FzZVdp
dGhvdXRMb2NhbGVTdGFydGluZ0F0RmFpbGluZ0luZGV4KToKKyAgICAgICAgKiB3dGYvdGV4dC9X
VEZTdHJpbmcuaDoKKwogMjAxNi0xMC0wMyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29t
PgogCiAgICAgICAgIEFkZCBzdXBwb3J0IGZvciBLZXlib2FyZEV2ZW50LmtleSBhdHRyaWJ1dGUK
SW5kZXg6IFNvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmNwcAkocmV2aXNpb24gMjA2NzkzKQorKysg
U291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYz
LDM5ICszNjMsMjAgQEAgVUNoYXIzMiBTdHJpbmdJbXBsOjpjaGFyYWN0ZXJTdGFydGluZ0F0KAog
UmVmPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OmNvbnZlcnRUb0xvd2VyY2FzZVdpdGhvdXRMb2Nh
bGUoKQogewogICAgIC8vIE5vdGU6IEF0IG9uZSB0aW1lIHRoaXMgd2FzIGEgaG90IGZ1bmN0aW9u
IGluIHRoZSBEcm9tYWVvIGJlbmNobWFyaywgc3BlY2lmaWNhbGx5IHRoZQotICAgIC8vIG5vLW9w
IGNvZGUgcGF0aCB1cCB0aHJvdWdoIHRoZSBmaXJzdCAncmV0dXJuJyBzdGF0ZW1lbnQuCisgICAg
Ly8gbm8tb3AgY29kZSBwYXRoIHRoYXQgbWF5IHJldHVybiBvdXJzZWxmIGlmIHdlIGZpbmQgbm8g
dXBwZXIgY2FzZSBsZXR0ZXJzIGFuZCBubyBpbnZhbGlkCisgICAgLy8gQVNDSUkgbGV0dGVycy4K
IAogICAgIC8vIEZpcnN0IHNjYW4gdGhlIHN0cmluZyBmb3IgdXBwZXJjYXNlIGFuZCBub24tQVND
SUkgY2hhcmFjdGVyczoKICAgICBpZiAoaXM4Qml0KCkpIHsKLSAgICAgICAgdW5zaWduZWQgZmFp
bGluZ0luZGV4OwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9sZW5ndGg7ICsr
aSkgewogICAgICAgICAgICAgTENoYXIgY2hhcmFjdGVyID0gbV9kYXRhOFtpXTsKLSAgICAgICAg
ICAgIGlmIChVTkxJS0VMWSgoY2hhcmFjdGVyICYgfjB4N0YpIHx8IGlzQVNDSUlVcHBlcihjaGFy
YWN0ZXIpKSkgewotICAgICAgICAgICAgICAgIGZhaWxpbmdJbmRleCA9IGk7Ci0gICAgICAgICAg
ICAgICAgZ290byBTbG93UGF0aDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gKnRoaXM7Ci0KLVNsb3dQYXRoOgotICAgICAgICBMQ2hhciogZGF0YTg7Ci0gICAgICAg
IGF1dG8gbmV3SW1wbCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWRJbnRlcm5hbE5vbkVtcHR5KG1fbGVu
Z3RoLCBkYXRhOCk7Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZhaWxpbmdJ
bmRleDsgKytpKQotICAgICAgICAgICAgZGF0YThbaV0gPSBtX2RhdGE4W2ldOwotCi0gICAgICAg
IGZvciAodW5zaWduZWQgaSA9IGZhaWxpbmdJbmRleDsgaSA8IG1fbGVuZ3RoOyArK2kpIHsKLSAg
ICAgICAgICAgIExDaGFyIGNoYXJhY3RlciA9IG1fZGF0YThbaV07Ci0gICAgICAgICAgICBpZiAo
IShjaGFyYWN0ZXIgJiB+MHg3RikpCi0gICAgICAgICAgICAgICAgZGF0YThbaV0gPSB0b0FTQ0lJ
TG93ZXIoY2hhcmFjdGVyKTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIEFT
U0VSVCh1X3RvbG93ZXIoY2hhcmFjdGVyKSA8PSAweEZGKTsKLSAgICAgICAgICAgICAgICBkYXRh
OFtpXSA9IHN0YXRpY19jYXN0PExDaGFyPih1X3RvbG93ZXIoY2hhcmFjdGVyKSk7Ci0gICAgICAg
ICAgICB9CisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoKGNoYXJhY3RlciAmIH4weDdGKSB8fCBp
c0FTQ0lJVXBwZXIoY2hhcmFjdGVyKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRU
b0xvd2VyY2FzZVdpdGhvdXRMb2NhbGVTdGFydGluZ0F0RmFpbGluZ0luZGV4KGkpOwogICAgICAg
ICB9CiAKLSAgICAgICAgcmV0dXJuIG5ld0ltcGw7CisgICAgICAgIHJldHVybiAqdGhpczsKICAg
ICB9CisKICAgICBib29sIG5vVXBwZXIgPSB0cnVlOwogICAgIHVuc2lnbmVkIG9yZWQgPSAwOwog
CkBAIC00NDEsNiArNDIyLDMwIEBAIFNsb3dQYXRoOgogICAgIHJldHVybiBuZXdJbXBsOwogfQog
CitSZWY8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y29udmVydFRvTG93ZXJjYXNlV2l0aG91dExv
Y2FsZVN0YXJ0aW5nQXRGYWlsaW5nSW5kZXgodW5zaWduZWQgZmFpbGluZ0luZGV4KQoreworICAg
IEFTU0VSVChpczhCaXQoKSk7CisgICAgTENoYXIqIGRhdGE4OworICAgIGF1dG8gbmV3SW1wbCA9
IGNyZWF0ZVVuaW5pdGlhbGl6ZWRJbnRlcm5hbE5vbkVtcHR5KG1fbGVuZ3RoLCBkYXRhOCk7CisK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZmFpbGluZ0luZGV4OyArK2kpIHsKKyAgICAg
ICAgQVNTRVJUKCEobV9kYXRhOFtpXSAmIH4weDdGKSAmJiAhaXNBU0NJSVVwcGVyKG1fZGF0YThb
aV0pKTsKKyAgICAgICAgZGF0YThbaV0gPSBtX2RhdGE4W2ldOworICAgIH0KKworICAgIGZvciAo
dW5zaWduZWQgaSA9IGZhaWxpbmdJbmRleDsgaSA8IG1fbGVuZ3RoOyArK2kpIHsKKyAgICAgICAg
TENoYXIgY2hhcmFjdGVyID0gbV9kYXRhOFtpXTsKKyAgICAgICAgaWYgKCEoY2hhcmFjdGVyICYg
fjB4N0YpKQorICAgICAgICAgICAgZGF0YThbaV0gPSB0b0FTQ0lJTG93ZXIoY2hhcmFjdGVyKTsK
KyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQodV90b2xvd2VyKGNoYXJhY3Rlcikg
PD0gMHhGRik7CisgICAgICAgICAgICBkYXRhOFtpXSA9IHN0YXRpY19jYXN0PExDaGFyPih1X3Rv
bG93ZXIoY2hhcmFjdGVyKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gbmV3SW1w
bDsKK30KKwogUmVmPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OmNvbnZlcnRUb1VwcGVyY2FzZVdp
dGhvdXRMb2NhbGUoKQogewogICAgIC8vIFRoaXMgZnVuY3Rpb24gY291bGQgYmUgb3B0aW1pemVk
IGZvciBuby1vcCBjYXNlcyB0aGUgd2F5CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmlu
Z0ltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuaAko
cmV2aXNpb24gMjA2NzkzKQorKysgU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmgJKHdv
cmtpbmcgY29weSkKQEAgLTY4Miw2ICs2ODIsNyBAQCBwdWJsaWM6CiAgICAgV1RGX0VYUE9SVF9T
VFJJTkdfQVBJIFJlZjxTdHJpbmdJbXBsPiBjb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpOwogICAg
IFdURl9FWFBPUlRfU1RSSU5HX0FQSSBSZWY8U3RyaW5nSW1wbD4gY29udmVydFRvQVNDSUlVcHBl
cmNhc2UoKTsKICAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgUmVmPFN0cmluZ0ltcGw+IGNvbnZl
cnRUb0xvd2VyY2FzZVdpdGhvdXRMb2NhbGUoKTsKKyAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkg
UmVmPFN0cmluZ0ltcGw+IGNvbnZlcnRUb0xvd2VyY2FzZVdpdGhvdXRMb2NhbGVTdGFydGluZ0F0
RmFpbGluZ0luZGV4KHVuc2lnbmVkKTsKICAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgUmVmPFN0
cmluZ0ltcGw+IGNvbnZlcnRUb1VwcGVyY2FzZVdpdGhvdXRMb2NhbGUoKTsKICAgICBXVEZfRVhQ
T1JUX1NUUklOR19BUEkgUmVmPFN0cmluZ0ltcGw+IGNvbnZlcnRUb0xvd2VyY2FzZVdpdGhMb2Nh
bGUoY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbGVJZGVudGlmaWVyKTsKICAgICBXVEZfRVhQT1JU
X1NUUklOR19BUEkgUmVmPFN0cmluZ0ltcGw+IGNvbnZlcnRUb1VwcGVyY2FzZVdpdGhMb2NhbGUo
Y29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbGVJZGVudGlmaWVyKTsKSW5kZXg6IFNvdXJjZS9XVEYv
d3RmL3RleHQvV1RGU3RyaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi90ZXh0
L1dURlN0cmluZy5jcHAJKHJldmlzaW9uIDIwNjc5MykKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQv
V1RGU3RyaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzU4LDYgKzM1OCwxMyBAQCBTdHJpbmcg
U3RyaW5nOjpjb252ZXJ0VG9Mb3dlcmNhc2VXaXRob3V0CiAgICAgcmV0dXJuIG1faW1wbC0+Y29u
dmVydFRvTG93ZXJjYXNlV2l0aG91dExvY2FsZSgpOwogfQogCitTdHJpbmcgU3RyaW5nOjpjb252
ZXJ0VG9Mb3dlcmNhc2VXaXRob3V0TG9jYWxlU3RhcnRpbmdBdEZhaWxpbmdJbmRleCh1bnNpZ25l
ZCBmYWlsaW5nSW5kZXgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2ltcGwpCisgICAgICAgIHJldHVy
biBTdHJpbmcoKTsKKyAgICByZXR1cm4gbV9pbXBsLT5jb252ZXJ0VG9Mb3dlcmNhc2VXaXRob3V0
TG9jYWxlU3RhcnRpbmdBdEZhaWxpbmdJbmRleChmYWlsaW5nSW5kZXgpOworfQorCiBTdHJpbmcg
U3RyaW5nOjpjb252ZXJ0VG9VcHBlcmNhc2VXaXRob3V0TG9jYWxlKCkgY29uc3QKIHsKICAgICBp
ZiAoIW1faW1wbCkKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuaAkocmV2aXNpb24gMjA2Nzkz
KQorKysgU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuaAkod29ya2luZyBjb3B5KQpAQCAt
MzMwLDYgKzMzMCw3IEBAIHB1YmxpYzoKICAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgU3RyaW5n
IGNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCkgY29uc3Q7CiAgICAgV1RGX0VYUE9SVF9TVFJJTkdf
QVBJIFN0cmluZyBjb252ZXJ0VG9BU0NJSVVwcGVyY2FzZSgpIGNvbnN0OwogICAgIFdURl9FWFBP
UlRfU1RSSU5HX0FQSSBTdHJpbmcgY29udmVydFRvTG93ZXJjYXNlV2l0aG91dExvY2FsZSgpIGNv
bnN0OworICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBTdHJpbmcgY29udmVydFRvTG93ZXJjYXNl
V2l0aG91dExvY2FsZVN0YXJ0aW5nQXRGYWlsaW5nSW5kZXgodW5zaWduZWQpIGNvbnN0OwogICAg
IFdURl9FWFBPUlRfU1RSSU5HX0FQSSBTdHJpbmcgY29udmVydFRvVXBwZXJjYXNlV2l0aG91dExv
Y2FsZSgpIGNvbnN0OwogICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBTdHJpbmcgY29udmVydFRv
TG93ZXJjYXNlV2l0aExvY2FsZShjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsZUlkZW50aWZpZXIp
IGNvbnN0OwogICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBTdHJpbmcgY29udmVydFRvVXBwZXJj
YXNlV2l0aExvY2FsZShjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsZUlkZW50aWZpZXIpIGNvbnN0
Owo=
</data>
<flag name="review"
          id="313831"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>290676</attachid>
            <date>2016-10-04 18:27:34 -0700</date>
            <delta_ts>2016-10-04 22:31:50 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>31207</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMDY4MDEpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDMzIEBACisyMDE2LTEwLTA0ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFN0cmluZy5wcm90b3R5cGUudG9Mb3dlckNhc2Ugc2hvdWxkIGJlIGEg
REZHL0ZUTCBpbnRyaW5zaWMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE2Mjg4NworCisgICAgICAgIFJldmlld2VkIGJ5IEZpbGlwIFBpemxvIGFuZCBZ
dXN1a2UgU3V6dWtpLgorCisgICAgICAgICogbWljcm9iZW5jaG1hcmtzL3RvLWxvd2VyLWNhc2Uu
anM6IEFkZGVkLgorICAgICAgICAoYXNzZXJ0KToKKyAgICAgICAgKGZvbyk6CisgICAgICAgIChi
YXIpOgorICAgICAgICAqIHN0cmVzcy90by1sb3dlci1jYXNlLmpzOiBBZGRlZC4KKyAgICAgICAg
KGFzc2VydCk6CisgICAgICAgIChmb28pOgorCisyMDE2LTEwLTA0ICBTYWFtIEJhcmF0aSAgPHNi
YXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIFN0cmluZy5wcm90b3R5cGUudG9Mb3dlckNhc2Ug
c2hvdWxkIGJlIGEgREZHL0ZUTCBpbnRyaW5zaWMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE2Mjg4NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogbWljcm9iZW5jaG1hcmtzL3RvLWxvd2VyLWNhc2UuanM6
IEFkZGVkLgorICAgICAgICAoYXNzZXJ0KToKKyAgICAgICAgKGZvbyk6CisgICAgICAgIChiYXIp
OgorICAgICAgICAqIHN0cmVzcy90by1sb3dlci1jYXNlLmpzOiBBZGRlZC4KKyAgICAgICAgKGFz
c2VydCk6CisgICAgICAgIChmb28pOgorCiAyMDE2LTEwLTA0ICBKRiBCYXN0aWVuICA8amZiYXN0
aWVuQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWJBc3NlbWJseTogaGFuZGxlIGEgZmV3IGNvcm5l
ciBjYXNlcwpJbmRleDogSlNUZXN0cy9taWNyb2JlbmNobWFya3MvdG8tbG93ZXItY2FzZS5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy90by1sb3dlci1jYXNlLmpzCShu
b25leGlzdGVudCkKKysrIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL3RvLWxvd2VyLWNhc2UuanMJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNiBAQAorZnVuY3Rpb24gYXNzZXJ0KGIpIHsKKyAg
ICBpZiAoIWIpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiQmFkIGFzc2VydGlvbiIpOworfQor
bm9JbmxpbmUoYXNzZXJ0KTsKKworbGV0IHRlc3RzID0gWworICAgIFsiZm9vIiwgImZvbyJdLAor
ICAgIFsiZm9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vIiwgImZvb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vbyJdLAorXTsKKworZnVuY3Rpb24gZm9vKGEpIHsKKyAgICByZXR1
cm4gYS50b0xvd2VyQ2FzZSgpOworfQorbm9JbmxpbmUoZm9vKTsKKworZnVuY3Rpb24gYmFyKGEp
IHsKKyAgICBhLnRvTG93ZXJDYXNlKCk7CisgICAgYXNzZXJ0KHRydWUpOyAvLyBzaWRlIGVmZmVj
dHMKKyAgICBhLnRvTG93ZXJDYXNlKCk7Cit9Citub0lubGluZShiYXIpOworCitsZXQgc3RhcnQg
PSBEYXRlLm5vdygpOworZm9yIChsZXQgaSA9IDA7IGkgPCA1MDAwMDA7IGkrKykgeworICAgIGZv
ciAobGV0IGkgPSAwOyBpIDwgdGVzdHMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgbGV0IHRlc3Qg
PSB0ZXN0c1tpXVswXTsKKyAgICAgICAgbGV0IHJlc3VsdCA9IHRlc3RzW2ldWzFdOworICAgICAg
ICBhc3NlcnQoZm9vKHRlc3QpID09PSByZXN1bHQpOworICAgICAgICBiYXIodGVzdCk7CisgICAg
fQorfQorCitjb25zdCB2ZXJib3NlID0gZmFsc2U7CitpZiAodmVyYm9zZSkKKyAgICBwcmludChE
YXRlLm5vdygpIC0gc3RhcnQpOwpJbmRleDogSlNUZXN0cy9zdHJlc3MvdG8tbG93ZXItY2FzZS5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy90by1sb3dlci1jYXNlLmpzCShub25leGlz
dGVudCkKKysrIEpTVGVzdHMvc3RyZXNzL3RvLWxvd2VyLWNhc2UuanMJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwzMCBAQAorZnVuY3Rpb24gYXNzZXJ0KGIpIHsKKyAgICBpZiAoIWIpCisgICAg
ICAgIHRocm93IG5ldyBFcnJvcigiQmFkIGFzc2VydGlvbiIpOworfQorCitsZXQgdGVzdHMgPSBb
CisgICAgWyJGT08iLCAiZm9vIl0sCisgICAgWyJmZmZcdTAwQzIiLCAiZmZmXHUwMEUyIl0sCisg
ICAgWyJmb28iLCAiZm9vIl0sCisgICAgWyJmb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b28iLCAiZm9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vIl0sCisgICAgWyJCYVIiLCAi
YmFyIl0sCisgICAgWyJGT09cdTAwQTkiLCAiZm9vXHUwMEE5Il0sCisgICAgWyIjJCMkIiwgIiMk
IyQiXSwKKyAgICBbIiYmJlx1MDBBOSIsICImJiZcdTAwQTkiXSwKKyAgICBbIiYmJlx1MDBDMiIs
ICImJiZcdTAwRTIiXSwKKyAgICBbIkFCQ1x1MDEwMCIsICJhYmNcdTAxMDEiXSwKK107CisKK2Z1
bmN0aW9uIGZvbyhhKSB7CisgICAgcmV0dXJuIGEudG9Mb3dlckNhc2UoKTsKK30KK25vSW5saW5l
KGZvbyk7CisKK2ZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDA7IGkrKykgeworICAgIGZvciAobGV0
IGkgPSAwOyBpIDwgdGVzdHMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgbGV0IHRlc3QgPSB0ZXN0
c1tpXVswXTsKKyAgICAgICAgbGV0IHJlc3VsdCA9IHRlc3RzW2ldWzFdOworICAgICAgICBhc3Nl
cnQoZm9vKHRlc3QpID09PSByZXN1bHQpOworICAgIH0KK30KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwkocmV2aXNpb24gMjA2NzkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUyIEBACisyMDE2LTEwLTA0ICBTYWFtIEJh
cmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIFN0cmluZy5wcm90b3R5cGUudG9M
b3dlckNhc2Ugc2hvdWxkIGJlIGEgREZHL0ZUTCBpbnRyaW5zaWMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2Mjg4NworCisgICAgICAgIFJldmlld2Vk
IGJ5IEZpbGlwIFBpemxvIGFuZCBZdXN1a2UgU3V6dWtpLgorCQorICAgICAgICBUaGlzIHBhdGNo
IG1ha2VzIFRvTG93ZXJDYXNlIGFuIGludHJpbnNpYyBpbiB0aGUgREZHL0ZUTC4gT24gdGhlIGZh
c3QKKyAgICAgICAgcGF0aCwgdGhlIGludHJpbnNpYyB3aWxsIGxvb3Agb3ZlciBhbiA4LWJpdCBz
dHJpbmcgZW5zdXJpbmcgaXQncyBhbHJlYWR5CisgICAgICAgIGxvd2VyIGNhc2UsIGFuZCBzaW1w
bHkgcmV0dXJuIHRoZSBzdHJpbmcuIEluIHRoZSBzbG93IHBhdGgsIGl0J2xsIGNhbGwKKyAgICAg
ICAgaW50byBDIGNvZGUgdG8gbWFrZSBhIG5ldyBzdHJpbmcuCisKKyAgICAgICAgVGhpcyBpcyBh
IDctOCUgc3BlZWR1cCBvbiBFUzZTYW1wbGVCZW5jaC9CYXNpYy4KKworICAgICAgICAqIGRmZy9E
RkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3Ry
YWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyk6CisgICAg
ICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljQ2FsbCk6CisgICAgICAgICogZGZnL0RGR0Nsb2Ji
ZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXplKToKKyAgICAgICAgKiBkZmcv
REZHRG9lc0dDLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpkb2VzR0MpOgorICAgICAgICAqIGRm
Zy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpmaXh1
cE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdOb2RlVHlwZS5oOgorICAgICAgICAqIGRmZy9ERkdP
cGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5oOgorICAgICAgICAq
IGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RG
R1NhZmVUb0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpzYWZlVG9FeGVjdXRlKToKKyAg
ICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlVG9Mb3dlckNhc2UpOgorICAgICAgICAqIGRmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5oOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjYWxsT3Bl
cmF0aW9uKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaDoK
KyAgICAgICAgKiBmdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpj
YW5Db21waWxlKToKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0IzLmNwcDoKKyAgICAgICAg
KEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZU5vZGUpOgorICAgICAgICAoSlND
OjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlVG9Mb3dlckNhc2UpOgorICAgICAgICAq
IGppdC9KSVRPcGVyYXRpb25zLmg6CisgICAgICAgICogcnVudGltZS9JbnRyaW5zaWMuaDoKKyAg
ICAgICAgKiBydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OlN0cmlu
Z1Byb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24pOgorCiAyMDE2LTEwLTA0ICBZdXN1a2UgU3V6dWtp
ICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIyMDY3Nzgp
OiBSZWxlYXNlIEpTQyB0ZXN0IENoYWtyYUNvcmUueWFtbC9DaGFrcmFDb3JlL3Rlc3QvRXJyb3Iv
dmFsaWRhdGVfbGluZV9jb2x1bW4uanMuZGVmYXVsdCBmYWlsaW5nCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5s
aW5lcy5oCShyZXZpc2lvbiAyMDY3OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMDUsNiAr
MTAwNSwxMSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KIAorICAgIGNhc2UgVG9Mb3dlckNhc2U6IHsKKyAgICAgICAgZm9y
Tm9kZShub2RlKS5zZXRUeXBlKG1fZ3JhcGgsIFNwZWNTdHJpbmcpOworICAgICAgICBicmVhazsK
KyAgICB9CisKICAgICBjYXNlIExvYWRGcm9tSlNNYXBCdWNrZXQ6CiAgICAgICAgIGZvck5vZGUo
bm9kZSkubWFrZUhlYXBUb3AoKTsKICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMjA2Nzkz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI1ODAsNiArMjU4MCwyMCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpo
YW5kbGVJbnRyaW5zaWNDYWxsCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAorICAgIGNh
c2UgVG9Mb3dlckNhc2VJbnRyaW5zaWM6IHsKKyAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzICE9IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYg
KG1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5k
ZXgsIEJhZFR5cGUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGluc2Vy
dENoZWNrcygpOworICAgICAgICBOb2RlKiB0aGlzU3RyaW5nID0gZ2V0KHZpcnR1YWxSZWdpc3Rl
ckZvckFyZ3VtZW50KDAsIHJlZ2lzdGVyT2Zmc2V0KSk7CisgICAgICAgIE5vZGUqIHJlc3VsdCA9
IGFkZFRvR3JhcGgoVG9Mb3dlckNhc2UsIHRoaXNTdHJpbmcpOworICAgICAgICBzZXQoVmlydHVh
bFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLCByZXN1bHQpOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHJldmlzaW9uIDIw
Njc5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjkxLDYgKzEyOTEsMTAgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBn
cmFwaCwgTm9kZSogbm9kZQogICAgICAgICByZWFkKE1pc2NGaWVsZHMpOwogICAgICAgICBkZWYo
SGVhcExvY2F0aW9uKE1hcEhhc0xvYywgTWlzY0ZpZWxkcywgbm9kZS0+Y2hpbGQxKCkpLCBMYXp5
Tm9kZShub2RlKSk7CiAgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgVG9Mb3dlckNhc2U6Cisg
ICAgICAgIGRlZihQdXJlVmFsdWUobm9kZSkpOworICAgICAgICByZXR1cm47CiAgICAgICAgIAog
ICAgIGNhc2UgTGFzdE5vZGVUeXBlOgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAkocmV2aXNp
b24gMjA2NzkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yOTIsNiArMjkyLDcgQEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBo
LCBOb2RlKiBub2RlKQogICAgIGNhc2UgU3RyaW5nUmVwbGFjZToKICAgICBjYXNlIFN0cmluZ1Jl
cGxhY2VSZWdFeHA6CiAgICAgY2FzZSBDcmVhdGVSZXN0OgorICAgIGNhc2UgVG9Mb3dlckNhc2U6
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAKICAgICBjYXNlIE11bHRpUHV0QnlPZmZz
ZXQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJ
KHJldmlzaW9uIDIwNjc5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQ
aGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NzMsNiArMTY3MywxNSBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAorICAgICAgICBjYXNlIFRvTG93ZXJDYXNl
OiB7CisgICAgICAgICAgICAvLyBXZSBjdXJyZW50bHkgb25seSBzdXBwb3J0IFN0cmluZ1VzZSBz
aW5jZSB0aGF0IHdpbGwgZW5zdXJlIHRoYXQKKyAgICAgICAgICAgIC8vIFRvTG93ZXJDYXNlIGlz
IGEgcHVyZSBvcGVyYXRpb24uIElmIHdlIGRlY2lkZSB0byB1cGRhdGUgdGhpcyB3aXRoCisgICAg
ICAgICAgICAvLyBtb3JlIHR5cGVzIGluIHRoZSBmdXR1cmUsIHdlIG5lZWQgdG8gZW5zdXJlIHRo
YXQgdGhlIGNsb2JiZXJpemUgcnVsZXMKKyAgICAgICAgICAgIC8vIGFyZSBjb3JyZWN0LgorICAg
ICAgICAgICAgZml4RWRnZTxTdHJpbmdVc2U+KG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisKICAgICAgICAgY2FzZSBEZWZpbmVBY2Nlc3NvclByb3BlcnR5
OiB7CiAgICAgICAgICAgICBmaXhFZGdlPENlbGxVc2U+KG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9k
ZSwgMCkpOwogICAgICAgICAgICAgRWRnZSYgcHJvcGVydHlFZGdlID0gbV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAxKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5
cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBl
LmgJKHJldmlzaW9uIDIwNjc5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzk2LDYgKzM5Niw4IEBAIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhHZXRNYXBCdWNrZXQsIE5vZGVSZXN1bHRKUykg
XAogICAgIG1hY3JvKExvYWRGcm9tSlNNYXBCdWNrZXQsIE5vZGVSZXN1bHRKUykgXAogICAgIG1h
Y3JvKElzTm9uRW1wdHlNYXBCdWNrZXQsIE5vZGVSZXN1bHRCb29sZWFuKSBcCisgICAgXAorICAg
IG1hY3JvKFRvTG93ZXJDYXNlLCBOb2RlUmVzdWx0SlMpIFwKIAogLy8gVGhpcyBlbnVtIGdlbmVy
YXRlcyBhIG1vbm90b25pY2FsbHkgaW5jcmVhc2luZyBpZCBmb3IgYWxsIE5vZGUgdHlwZXMsCiAv
LyBhbmQgaXMgdXNlZCBieSB0aGUgc3Vic2VxdWVudCBlbnVtIHRvIGZpbGwgb3V0IHRoZSBpZCAo
YXMgYWNjZXNzZWQgdmlhIHRoZSBOb2RlSWRNYXNrKS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjA2NzkzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTUxNCw2ICsxNTE0LDIyIEBAIFN0cmluZ0ltcGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVz
b2wKICAgICByZXR1cm4gc3RyaW5nLT52YWx1ZShleGVjKS5pbXBsKCk7CiB9CiAKK0pTU3RyaW5n
KiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRvTG93ZXJDYXNlKEV4ZWNTdGF0ZSogZXhlYywgSlNT
dHJpbmcqIHN0cmluZywgdWludDMyX3QgZmFpbGluZ0luZGV4KQoreworICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwor
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgY29uc3Qg
U3RyaW5nJiBpbnB1dFN0cmluZyA9IHN0cmluZy0+dmFsdWUoZXhlYyk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CisgICAgU3RyaW5nIGxvd2VyY2FzZWRTdHJpbmcg
PSBpbnB1dFN0cmluZy5pczhCaXQoKSA/IGlucHV0U3RyaW5nLmNvbnZlcnRUb0xvd2VyY2FzZVdp
dGhvdXRMb2NhbGVTdGFydGluZ0F0RmFpbGluZ0luZGV4OEJpdChmYWlsaW5nSW5kZXgpIDogaW5w
dXRTdHJpbmcuY29udmVydFRvTG93ZXJjYXNlV2l0aG91dExvY2FsZSgpOworICAgIGlmIChsb3dl
cmNhc2VkU3RyaW5nLmltcGwoKSA9PSBpbnB1dFN0cmluZy5pbXBsKCkpCisgICAgICAgIHJldHVy
biBzdHJpbmc7CisgICAgc2NvcGUucmVsZWFzZSgpOworICAgIHJldHVybiBqc1N0cmluZyhleGVj
LCBsb3dlcmNhc2VkU3RyaW5nKTsKK30KKwogSlNTdHJpbmcqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgaW50MzJfdCBjaGFyYWN0
ZXIpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAyMDY3OTMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTU1LDYg
KzE1NSw4IEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlQXJyYXkKIFN0cmlu
Z0ltcGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVzb2x2ZVJvcGUoRXhlY1N0YXRlKiwgSlNT
dHJpbmcqKTsKIEpTU3RyaW5nKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblNpbmdsZUNoYXJhY3Rl
clN0cmluZyhFeGVjU3RhdGUqLCBpbnQzMl90KTsKIAorSlNTdHJpbmcqIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uVG9Mb3dlckNhc2UoRXhlY1N0YXRlKiwgSlNTdHJpbmcqLCB1aW50MzJfdCk7CisK
IGludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25NYXBIYXNoKEV4ZWNTdGF0ZSosIEVuY29k
ZWRKU1ZhbHVlIGlucHV0KTsKIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25KU01hcEZp
bmRCdWNrZXQoRXhlY1N0YXRlKiwgSlNDZWxsKiwgRW5jb2RlZEpTVmFsdWUsIGludDMyX3QpOwog
SlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkpTU2V0RmluZEJ1Y2tldChFeGVjU3RhdGUq
LCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSwgaW50MzJfdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBo
YXNlLmNwcAkocmV2aXNpb24gMjA2NzkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc1NCw2
ICs3NTQsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHNldFByZWRpY3Rpb24oU3BlY0ludDMy
T25seSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorCisgICAgICAgIGNhc2UgVG9M
b3dlckNhc2U6CisgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNTdHJpbmcpOworICAgICAg
ICAgICAgYnJlYWs7CisKICAgICAgICAgY2FzZSBBcml0aFBvdzoKICAgICAgICAgY2FzZSBBcml0
aFNxcnQ6CiAgICAgICAgIGNhc2UgQXJpdGhGUm91bmQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkocmV2aXNpb24gMjA2NzkzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM2MSw2ICszNjEsNyBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUm
IHN0CiAgICAgY2FzZSBQdXREeW5hbWljVmFyOgogICAgIGNhc2UgUmVzb2x2ZVNjb3BlOgogICAg
IGNhc2UgTWFwSGFzaDoKKyAgICBjYXNlIFRvTG93ZXJDYXNlOgogICAgIGNhc2UgR2V0TWFwQnVj
a2V0OgogICAgIGNhc2UgTG9hZEZyb21KU01hcEJ1Y2tldDoKICAgICBjYXNlIElzTm9uRW1wdHlN
YXBCdWNrZXQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDIwNjc5MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI2NzgsNiArMjY3OCwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUq
IG5vZGUpCiAgICAgICAgIH0gfQogICAgICAgICBicmVhazsKICAgICB9CisgICAgCisgICAgY2Fz
ZSBUb0xvd2VyQ2FzZTogeworICAgICAgICBjb21waWxlVG9Mb3dlckNhc2Uobm9kZSk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KIAogICAgIGNhc2UgR2V0QnlWYWxXaXRoVGhpczogewogICAgICAg
ICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2
aXNpb24gMjA2NzkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDg4OCw2ICs0ODg4LDExIEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQog
CisgICAgY2FzZSBUb0xvd2VyQ2FzZTogeworICAgICAgICBjb21waWxlVG9Mb3dlckNhc2Uobm9k
ZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwogICAgIGNhc2UgSXNPYmplY3Q6IHsKICAgICAg
ICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBH
UFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIFJldXNlLCB2YWx1ZSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMjA2
NzkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE0OTAsNiArMTQ5MCw2MCBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlUGVlcEhvbGVCb29sCiAgICAganVtcChub3RUYWtlbik7CiB9CiAKK3ZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVUb0xvd2VyQ2FzZShOb2RlKiBub2RlKQoreworICAgIEFTU0VS
VChub2RlLT5vcCgpID09IFRvTG93ZXJDYXNlKTsKKyAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBz
dHJpbmcodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMp
OworICAgIEdQUlRlbXBvcmFyeSBpbmRleCh0aGlzKTsKKyAgICBHUFJUZW1wb3JhcnkgY2hhclJl
Zyh0aGlzKTsKKyAgICBHUFJUZW1wb3JhcnkgbGVuZ3RoKHRoaXMpOworCisgICAgR1BSUmVnIHN0
cmluZ0dQUiA9IHN0cmluZy5ncHIoKTsKKyAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7
CisgICAgR1BSUmVnIGluZGV4R1BSID0gaW5kZXguZ3ByKCk7CisgICAgR1BSUmVnIGNoYXJHUFIg
PSBjaGFyUmVnLmdwcigpOworICAgIEdQUlJlZyBsZW5ndGhHUFIgPSBsZW5ndGguZ3ByKCk7CisK
KyAgICBzcGVjdWxhdGVTdHJpbmcobm9kZS0+Y2hpbGQxKCksIHN0cmluZ0dQUik7CisKKyAgICBD
Q2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOworCisgICAgbV9qaXQubW92ZShUcnVzdGVk
SW1tUHRyKDApLCBpbmRleEdQUik7CisKKyAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHN0cmluZ0dQUiwgSlNTdHJpbmc6Om9mZnNldE9mVmFsdWUoKSksIHRlbXBHUFIp
OworICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVy
OjpaZXJvLCB0ZW1wR1BSKSk7CisKKyAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoVGVz
dDMyKAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6WmVybywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3ModGVtcEdQUiwgU3RyaW5nSW1wbDo6ZmxhZ3NPZmZzZXQoKSksCisgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIoU3RyaW5nSW1wbDo6ZmxhZ0lzOEJpdCgpKSkpOworICAgIG1f
aml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wR1BSLCBTdHJpbmdJbXBsOjps
ZW5ndGhNZW1vcnlPZmZzZXQoKSksIGxlbmd0aEdQUik7CisgICAgbV9qaXQubG9hZFB0cihNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wR1BSLCBTdHJpbmdJbXBsOjpkYXRhT2Zmc2V0KCkpLCB0
ZW1wR1BSKTsKKworICAgIGF1dG8gbG9vcFN0YXJ0ID0gbV9qaXQubGFiZWwoKTsKKyAgICBhdXRv
IGxvb3BEb25lID0gbV9qaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpBYm92ZU9yRXF1YWwsIGlu
ZGV4R1BSLCBsZW5ndGhHUFIpOworICAgIG1faml0LmxvYWQ4KE1hY3JvQXNzZW1ibGVyOjpCYXNl
SW5kZXgodGVtcEdQUiwgaW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc09uZSksIGNoYXJH
UFIpOworICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0MzIoQ0NhbGxIZWxwZXJz
OjpOb25aZXJvLCBjaGFyR1BSLCBUcnVzdGVkSW1tMzIofjB4N0YpKSk7CisgICAgbV9qaXQuc3Vi
MzIoVHJ1c3RlZEltbTMyKCdBJyksIGNoYXJHUFIpOworICAgIHNsb3dQYXRoLmFwcGVuZChtX2pp
dC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkJlbG93T3JFcXVhbCwgY2hhckdQUiwgVHJ1c3RlZElt
bTMyKCdaJyAtICdBJykpKTsKKworICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgaW5k
ZXhHUFIpOworICAgIG1faml0Lmp1bXAoKS5saW5rVG8obG9vcFN0YXJ0LCAmbV9qaXQpOworICAg
IAorICAgIHNsb3dQYXRoLmxpbmsoJm1faml0KTsKKyAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVy
cyhsZW5ndGhHUFIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVG9Mb3dlckNhc2UsIGxl
bmd0aEdQUiwgc3RyaW5nR1BSLCBpbmRleEdQUik7CisgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVy
cyhsZW5ndGhHUFIpOworICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CisgICAgYXV0byBkb25l
ID0gbV9qaXQuanVtcCgpOworCisgICAgbG9vcERvbmUubGluaygmbV9qaXQpOworICAgIG1faml0
Lm1vdmUoc3RyaW5nR1BSLCBsZW5ndGhHUFIpOworCisgICAgZG9uZS5saW5rKCZtX2ppdCk7Cisg
ICAgY2VsbFJlc3VsdChsZW5ndGhHUFIsIG5vZGUpOworfQorCiB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlUGVlcEhvbGVJbnQzMkJyYW5jaChOb2RlKiBub2RlLCBOb2RlKiBicmFuY2hOb2Rl
LCBKSVRDb21waWxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCiB7CiAgICAgQmFz
aWNCbG9jayogdGFrZW4gPSBicmFuY2hOb2RlLT5icmFuY2hEYXRhKCktPnRha2VuLmJsb2NrOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAko
cmV2aXNpb24gMjA2NzkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC05MzgsNiArOTM4LDExIEBAIHB1YmxpYzoKICAg
ICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGNlbGwpOwogICAgICAgICBy
ZXR1cm4gYXBwZW5kQ2FsbFNldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQorICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSnNzX0pJVE9wZXJhdGlvbl9FSnNzVWkg
b3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCisgICAg
eworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMik7
CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsK
KyAgICB9CiAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0pJVE9wZXJhdGlv
bl9FTyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBvYmplY3QpCiAgICAgewogICAg
ICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUob2JqZWN0KTsKQEAgLTI2NTEs
NiArMjY1Niw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbXBpbGVDb21wYXJlRXFQdHIoTm9kZSop
OwogICAgIHZvaWQgY29tcGlsZURlZmluZURhdGFQcm9wZXJ0eShOb2RlKik7CiAgICAgdm9pZCBj
b21waWxlRGVmaW5lQWNjZXNzb3JQcm9wZXJ0eShOb2RlKik7CisgICAgdm9pZCBjb21waWxlVG9M
b3dlckNhc2UoTm9kZSopOwogCiAgICAgdm9pZCBtb3ZlVHJ1ZVRvKEdQUlJlZyk7CiAgICAgdm9p
ZCBtb3ZlRmFsc2VUbyhHUFJSZWcpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgJKHJldmlzaW9uIDIwNjc5MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsNiArMTAxLDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBGVEwgewogICAgIG1hY3JvKFNjb3BlZEFyZ3VtZW50c1RhYmxlX2xlbmd0aCwgU2NvcGVk
QXJndW1lbnRzVGFibGU6Om9mZnNldE9mTGVuZ3RoKCkpIFwKICAgICBtYWNybyhTdHJpbmdJbXBs
X2RhdGEsIFN0cmluZ0ltcGw6OmRhdGFPZmZzZXQoKSkgXAogICAgIG1hY3JvKFN0cmluZ0ltcGxf
aGFzaEFuZEZsYWdzLCBTdHJpbmdJbXBsOjpmbGFnc09mZnNldCgpKSBcCisgICAgbWFjcm8oU3Ry
aW5nSW1wbF9sZW5ndGgsIFN0cmluZ0ltcGw6Omxlbmd0aE1lbW9yeU9mZnNldCgpKSBcCiAgICAg
bWFjcm8oU3RydWN0dXJlX2NsYXNzSW5mbywgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSkg
XAogICAgIG1hY3JvKFN0cnVjdHVyZV9nbG9iYWxPYmplY3QsIFN0cnVjdHVyZTo6Z2xvYmFsT2Jq
ZWN0T2Zmc2V0KCkpIFwKICAgICBtYWNybyhTdHJ1Y3R1cmVfcHJvdG90eXBlLCBTdHJ1Y3R1cmU6
OnByb3RvdHlwZU9mZnNldCgpKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TENhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAyMDY3OTMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2NSw2
ICsyNjUsNyBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGUoTm9kZSogCiAgICAg
Y2FzZSBDb21wYXJlU3RyaWN0RXE6CiAgICAgY2FzZSBEZWZpbmVEYXRhUHJvcGVydHk6CiAgICAg
Y2FzZSBEZWZpbmVBY2Nlc3NvclByb3BlcnR5OgorICAgIGNhc2UgVG9Mb3dlckNhc2U6CiAgICAg
ICAgIC8vIFRoZXNlIGFyZSBPSy4KICAgICAgICAgYnJlYWs7CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHJldmlzaW9uIDIwNjc5MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTA0Myw2ICsxMDQzLDkgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBVbnJl
YWNoYWJsZToKICAgICAgICAgICAgIGNvbXBpbGVVbnJlYWNoYWJsZSgpOwogICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgVG9Mb3dlckNhc2U6CisgICAgICAgICAgICBjb21waWxlVG9M
b3dlckNhc2UoKTsKKyAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgUGhhbnRvbUxv
Y2FsOgogICAgICAgICBjYXNlIExvb3BIaW50OgpAQCAtODYyMyw2ICs4NjI2LDYwIEBAIHByaXZh
dGU6CiAgICAgICAgIG5vblNwZWN1bGF0aXZlQ29tcGFyZShpbnRGdW5jdG9yLCBmYWxsYmFja0Z1
bmN0aW9uKTsKICAgICB9CiAKKyAgICB2b2lkIGNvbXBpbGVUb0xvd2VyQ2FzZSgpCisgICAgewor
ICAgICAgICBMQmFzaWNCbG9jayBub3RSb3BlID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAg
TEJhc2ljQmxvY2sgaXM4Qml0ID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxv
Y2sgbG9vcFRvcCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIGxvb3BC
b2R5ID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBt
X291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBtX291
dC5uZXdCbG9jaygpOworCisgICAgICAgIExWYWx1ZSBzdHJpbmcgPSBsb3dTdHJpbmcobV9ub2Rl
LT5jaGlsZDEoKSk7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIHN0YXJ0SW5kZXggPSBtX291dC5h
bmNob3IobV9vdXQuY29uc3RJbnQzMigwKSk7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIHN0YXJ0
SW5kZXhGb3JDYWxsID0gbV9vdXQuYW5jaG9yKG1fb3V0LmNvbnN0SW50MzIoMCkpOworICAgICAg
ICBMVmFsdWUgaW1wbCA9IG1fb3V0LmxvYWRQdHIoc3RyaW5nLCBtX2hlYXBzLkpTU3RyaW5nX3Zh
bHVlKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmlzWmVybzY0KGltcGwpLAorICAgICAg
ICAgICAgdW5zdXJlKHNsb3dQYXRoKSwgdW5zdXJlKG5vdFJvcGUpKTsKKworICAgICAgICBMQmFz
aWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKG5vdFJvcGUsIGlzOEJpdCk7CisKKyAg
ICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgbV9vdXQudGVzdElzWmVybzMyKAorICAg
ICAgICAgICAgICAgIG1fb3V0LmxvYWQzMihpbXBsLCBtX2hlYXBzLlN0cmluZ0ltcGxfaGFzaEFu
ZEZsYWdzKSwKKyAgICAgICAgICAgICAgICBtX291dC5jb25zdEludDMyKFN0cmluZ0ltcGw6OmZs
YWdJczhCaXQoKSkpLAorICAgICAgICAgICAgdW5zdXJlKHNsb3dQYXRoKSwgdW5zdXJlKGlzOEJp
dCkpOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGlzOEJpdCwgbG9vcFRvcCk7CisgICAgICAg
IExWYWx1ZSBsZW5ndGggPSBtX291dC5sb2FkMzIoaW1wbCwgbV9oZWFwcy5TdHJpbmdJbXBsX2xl
bmd0aCk7CisgICAgICAgIExWYWx1ZSBidWZmZXIgPSBtX291dC5sb2FkUHRyKGltcGwsIG1faGVh
cHMuU3RyaW5nSW1wbF9kYXRhKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdFJlc3VsdCA9
IG1fb3V0LmFuY2hvcihzdHJpbmcpOworICAgICAgICBtX291dC5qdW1wKGxvb3BUb3ApOworCisg
ICAgICAgIG1fb3V0LmFwcGVuZFRvKGxvb3BUb3AsIGxvb3BCb2R5KTsKKyAgICAgICAgTFZhbHVl
IGluZGV4ID0gbV9vdXQucGhpKEludDMyLCBzdGFydEluZGV4KTsKKyAgICAgICAgVmFsdWVGcm9t
QmxvY2sgaW5kZXhGcm9tQmxvY2sgPSBtX291dC5hbmNob3IoaW5kZXgpOworICAgICAgICBtX291
dC5icmFuY2gobV9vdXQuYmVsb3coaW5kZXgsIGxlbmd0aCksCisgICAgICAgICAgICB1bnN1cmUo
bG9vcEJvZHkpLCB1bnN1cmUoY29udGludWF0aW9uKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5k
VG8obG9vcEJvZHksIHNsb3dQYXRoKTsKKworICAgICAgICBMVmFsdWUgYnl0ZSA9IG1fb3V0Lmxv
YWQ4WmVyb0V4dDMyKG1fb3V0LmJhc2VJbmRleChtX2hlYXBzLmNoYXJhY3RlcnM4LCBidWZmZXIs
IG1fb3V0Lnplcm9FeHRQdHIoaW5kZXgpKSk7CisgICAgICAgIExWYWx1ZSBpc0ludmFsaWRBc2Np
aVJhbmdlID0gbV9vdXQuYml0QW5kKGJ5dGUsIG1fb3V0LmNvbnN0SW50MzIofjB4N0YpKTsKKyAg
ICAgICAgTFZhbHVlIGlzVXBwZXJDYXNlID0gbV9vdXQuYmVsb3dPckVxdWFsKG1fb3V0LnN1Yihi
eXRlLCBtX291dC5jb25zdEludDMyKCdBJykpLCBtX291dC5jb25zdEludDMyKCdaJyAtICdBJykp
OworICAgICAgICBMVmFsdWUgaXNCYWRDaGFyYWN0ZXIgPSBtX291dC5iaXRPcihpc0ludmFsaWRB
c2NpaVJhbmdlLCBpc1VwcGVyQ2FzZSk7CisgICAgICAgIG1fb3V0LmFkZEluY29taW5nVG9QaGko
aW5kZXgsIG1fb3V0LmFuY2hvcihtX291dC5hZGQoaW5kZXgsIG1fb3V0LmludDMyT25lKSkpOwor
ICAgICAgICBtX291dC5icmFuY2goaXNCYWRDaGFyYWN0ZXIsIHVuc3VyZShzbG93UGF0aCksIHVu
c3VyZShsb29wVG9wKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIGNvbnRp
bnVhdGlvbik7CisgICAgICAgIExWYWx1ZSBzbG93UGF0aEluZGV4ID0gbV9vdXQucGhpKEludDMy
LCBzdGFydEluZGV4Rm9yQ2FsbCwgaW5kZXhGcm9tQmxvY2spOworICAgICAgICBWYWx1ZUZyb21C
bG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKHZtQ2FsbChwb2ludGVyVHlwZSgpLCBtX291
dC5vcGVyYXRpb24ob3BlcmF0aW9uVG9Mb3dlckNhc2UpLCBtX2NhbGxGcmFtZSwgc3RyaW5nLCBz
bG93UGF0aEluZGV4KSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKworICAg
ICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgc2V0
SlNWYWx1ZShtX291dC5waGkocG9pbnRlclR5cGUoKSwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCkp
OworICAgIH0KKwogICAgIHZvaWQgY29tcGlsZVJlc29sdmVTY29wZSgpCiAgICAgewogICAgICAg
ICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0gbV9ncmFwaC5pZGVudGlmaWVycygpW21fbm9kZS0+
aWRlbnRpZmllck51bWJlcigpXTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3BlcmF0aW9ucy5oCShyZXZpc2lvbiAyMDY3OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzA5LDYgKzMwOSw3IEBAIHR5
cGVkZWYgU2xvd1BhdGhSZXR1cm5UeXBlIChKSVRfT1BFUkFUSU8KIHR5cGVkZWYgU3RyaW5nSW1w
bCogKEpJVF9PUEVSQVRJT04gKlRfSklUT3BlcmF0aW9uX0VKc3MpKEV4ZWNTdGF0ZSosIEpTU3Ry
aW5nKik7CiB0eXBlZGVmIEpTU3RyaW5nKiAoSklUX09QRVJBVElPTiAqSnNzX0pJVE9wZXJhdGlv
bl9FWikoRXhlY1N0YXRlKiwgaW50MzJfdCk7CiB0eXBlZGVmIEpTU3RyaW5nKiAoSklUX09QRVJB
VElPTiAqSnNzX0pJVE9wZXJhdGlvbl9FSkpKKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKTsKK3R5cGVkZWYgSlNTdHJpbmcqIChKSVRf
T1BFUkFUSU9OICpKc3NfSklUT3BlcmF0aW9uX0VKc3NVaSkoRXhlY1N0YXRlKiwgSlNTdHJpbmcq
LCB1aW50MzJfdCk7CiAKIC8vIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gbG9va3VwIGFuIGV4Y2Vw
dGlvbiBoYW5kZXIsIGtleWVkIGJ5IGZhdWx0TG9jYXRpb24sIHdoaWNoIGlzCiAvLyB0aGUgcmV0
dXJuIGxvY2F0aW9uIGZyb20gb25lIG9mIHRoZSBjYWxscyBvdXQgdG8gb25lIG9mIHRoZSBoZWxw
ZXIgb3BlcmF0aW9ucyBhYm92ZS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludHJpbnNpYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludHJpbnNpYy5oCShyZXZpc2lvbiAyMDY3OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRyaW5zaWMuaAkod29ya2luZyBjb3B5KQpAQCAtNjUsNiArNjUsNyBAQCBlbnVt
IEpTX0VYUE9SVF9QUklWQVRFIEludHJpbnNpYyB7CiAgICAgSlNNYXBIYXNJbnRyaW5zaWMsCiAg
ICAgSlNTZXRIYXNJbnRyaW5zaWMsCiAgICAgSGFzT3duUHJvcGVydHlJbnRyaW5zaWMsCisgICAg
VG9Mb3dlckNhc2VJbnRyaW5zaWMsCiAKICAgICAvLyBHZXR0ZXIgaW50cmluc2ljcy4KICAgICBU
eXBlZEFycmF5TGVuZ3RoSW50cmluc2ljLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMDY3OTMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNDIsNyArMTQyLDcgQEAgdm9pZCBTdHJpbmdQcm90b3R5cGU6OmZpbmlzaENy
ZWF0aW9uKFZNJgogICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKCJz
bGljZSIsIHN0cmluZ1Byb3RvRnVuY1NsaWNlLCBEb250RW51bSwgMik7CiAgICAgSlNDX05BVElW
RV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04oInN1YnN0ciIsIHN0cmluZ1Byb3RvRnVuY1N1
YnN0ciwgRG9udEVudW0sIDIpOwogICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9UUkFO
U0lUSU9OKCJzdWJzdHJpbmciLCBzdHJpbmdQcm90b0Z1bmNTdWJzdHJpbmcsIERvbnRFbnVtLCAy
KTsKLSAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTigidG9Mb3dlckNh
c2UiLCBzdHJpbmdQcm90b0Z1bmNUb0xvd2VyQ2FzZSwgRG9udEVudW0sIDApOworICAgIEpTQ19O
QVRJVkVfSU5UUklOU0lDX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTigidG9Mb3dlckNhc2Ui
LCBzdHJpbmdQcm90b0Z1bmNUb0xvd2VyQ2FzZSwgRG9udEVudW0sIDAsIFRvTG93ZXJDYXNlSW50
cmluc2ljKTsKICAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTigidG9V
cHBlckNhc2UiLCBzdHJpbmdQcm90b0Z1bmNUb1VwcGVyQ2FzZSwgRG9udEVudW0sIDApOwogI2lm
IEVOQUJMRShJTlRMKQogICAgIEpTQ19CVUlMVElOX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElP
TigibG9jYWxlQ29tcGFyZSIsIHN0cmluZ1Byb3RvdHlwZUxvY2FsZUNvbXBhcmVDb2RlR2VuZXJh
dG9yLCBEb250RW51bSk7CkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMjA2NzkzKQorKysgU291cmNlL1dURi9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyNCBAQAorMjAxNi0xMC0wNCAgU2Fh
bSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAgICBTdHJpbmcucHJvdG90eXBl
LnRvTG93ZXJDYXNlIHNob3VsZCBiZSBhIERGRy9GVEwgaW50cmluc2ljCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI4ODcKKworICAgICAgICBSZXZp
ZXdlZCBieSBGaWxpcCBQaXpsbyBhbmQgWXVzdWtlIFN1enVraS4KKworICAgICAgICBUaGlzIHBh
dGNoIGV4cG9zZXMgYSBuZXcgU3RyaW5nSW1wbCBmdW5jdGlvbiBjYWxsZWQgY29udmVydFRvTG93
ZXJjYXNlV2l0aG91dExvY2FsZVN0YXJ0aW5nQXRGYWlsaW5nSW5kZXg4Qml0CisgICAgICAgIHdo
aWNoIGV4dHJhY3RzIHNsb3cgcGF0aCBmb3IgdGhlIDgtYml0IHBhcnQgb2YgY29udmVydFRvTG93
ZXJjYXNlV2l0aG91dExvY2FsZQorICAgICAgICBpbnRvIGEgaGVscGVyIGZ1bmN0aW9uLiBJIGRl
Y2lkZWQgdG8gZXh0cmFjdCB0aGlzIGludG8gaXRzIG93biBmdW5jdGlvbiBiZWNhdXNlCisgICAg
ICAgIGl0IG1heSBiZSB0aGUgY2FzZSB0aGF0IEpTQ3MgSklUcyB3aWxsIHdhbnQgdG8gY29udGlu
dWUgdGhlIG9wZXJhdGlvbgorICAgICAgICBhZnRlciBpdCBoYXMgYWxyZWFkeSBlbnN1cmVkIHRo
YXQgcGFydCBvZiBhbiA4LWJpdCBzdHJpbmcgaXMgbG93ZXIgY2FzZS4KKworICAgICAgICAqIHd0
Zi90ZXh0L1N0cmluZ0ltcGwuY3BwOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpjb252ZXJ0
VG9Mb3dlcmNhc2VXaXRob3V0TG9jYWxlKToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6Y29u
dmVydFRvTG93ZXJjYXNlV2l0aG91dExvY2FsZVN0YXJ0aW5nQXRGYWlsaW5nSW5kZXg4Qml0KToK
KyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdJbXBsLmg6CisgICAgICAgICogd3RmL3RleHQvV1RG
U3RyaW5nLmNwcDoKKyAgICAgICAgKFdURjo6U3RyaW5nOjpjb252ZXJ0VG9Mb3dlcmNhc2VXaXRo
b3V0TG9jYWxlU3RhcnRpbmdBdEZhaWxpbmdJbmRleDhCaXQpOgorICAgICAgICAqIHd0Zi90ZXh0
L1dURlN0cmluZy5oOgorCiAyMDE2LTEwLTAzICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5j
b20+CiAKICAgICAgICAgQWRkIHN1cHBvcnQgZm9yIEtleWJvYXJkRXZlbnQua2V5IGF0dHJpYnV0
ZQpJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwCShyZXZpc2lvbiAyMDY3OTMpCisr
KyBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NjMsMzkgKzM2MywyMCBAQCBVQ2hhcjMyIFN0cmluZ0ltcGw6OmNoYXJhY3RlclN0YXJ0aW5nQXQo
CiBSZWY8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y29udmVydFRvTG93ZXJjYXNlV2l0aG91dExv
Y2FsZSgpCiB7CiAgICAgLy8gTm90ZTogQXQgb25lIHRpbWUgdGhpcyB3YXMgYSBob3QgZnVuY3Rp
b24gaW4gdGhlIERyb21hZW8gYmVuY2htYXJrLCBzcGVjaWZpY2FsbHkgdGhlCi0gICAgLy8gbm8t
b3AgY29kZSBwYXRoIHVwIHRocm91Z2ggdGhlIGZpcnN0ICdyZXR1cm4nIHN0YXRlbWVudC4KKyAg
ICAvLyBuby1vcCBjb2RlIHBhdGggdGhhdCBtYXkgcmV0dXJuIG91cnNlbGYgaWYgd2UgZmluZCBu
byB1cHBlciBjYXNlIGxldHRlcnMgYW5kIG5vIGludmFsaWQKKyAgICAvLyBBU0NJSSBsZXR0ZXJz
LgogCiAgICAgLy8gRmlyc3Qgc2NhbiB0aGUgc3RyaW5nIGZvciB1cHBlcmNhc2UgYW5kIG5vbi1B
U0NJSSBjaGFyYWN0ZXJzOgogICAgIGlmIChpczhCaXQoKSkgewotICAgICAgICB1bnNpZ25lZCBm
YWlsaW5nSW5kZXg7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2xlbmd0aDsg
KytpKSB7CiAgICAgICAgICAgICBMQ2hhciBjaGFyYWN0ZXIgPSBtX2RhdGE4W2ldOwotICAgICAg
ICAgICAgaWYgKFVOTElLRUxZKChjaGFyYWN0ZXIgJiB+MHg3RikgfHwgaXNBU0NJSVVwcGVyKGNo
YXJhY3RlcikpKSB7Ci0gICAgICAgICAgICAgICAgZmFpbGluZ0luZGV4ID0gaTsKLSAgICAgICAg
ICAgICAgICBnb3RvIFNsb3dQYXRoOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAg
IHJldHVybiAqdGhpczsKLQotU2xvd1BhdGg6Ci0gICAgICAgIExDaGFyKiBkYXRhODsKLSAgICAg
ICAgYXV0byBuZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXplZEludGVybmFsTm9uRW1wdHkobV9s
ZW5ndGgsIGRhdGE4KTsKLQotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZmFpbGlu
Z0luZGV4OyArK2kpCi0gICAgICAgICAgICBkYXRhOFtpXSA9IG1fZGF0YThbaV07Ci0KLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gZmFpbGluZ0luZGV4OyBpIDwgbV9sZW5ndGg7ICsraSkgewot
ICAgICAgICAgICAgTENoYXIgY2hhcmFjdGVyID0gbV9kYXRhOFtpXTsKLSAgICAgICAgICAgIGlm
ICghKGNoYXJhY3RlciAmIH4weDdGKSkKLSAgICAgICAgICAgICAgICBkYXRhOFtpXSA9IHRvQVND
SUlMb3dlcihjaGFyYWN0ZXIpOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAg
QVNTRVJUKHVfdG9sb3dlcihjaGFyYWN0ZXIpIDw9IDB4RkYpOwotICAgICAgICAgICAgICAgIGRh
dGE4W2ldID0gc3RhdGljX2Nhc3Q8TENoYXI+KHVfdG9sb3dlcihjaGFyYWN0ZXIpKTsKLSAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmIChVTkxJS0VMWSgoY2hhcmFjdGVyICYgfjB4N0YpIHx8
IGlzQVNDSUlVcHBlcihjaGFyYWN0ZXIpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gY29udmVy
dFRvTG93ZXJjYXNlV2l0aG91dExvY2FsZVN0YXJ0aW5nQXRGYWlsaW5nSW5kZXg4Qml0KGkpOwog
ICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJuIG5ld0ltcGw7CisgICAgICAgIHJldHVybiAqdGhp
czsKICAgICB9CisKICAgICBib29sIG5vVXBwZXIgPSB0cnVlOwogICAgIHVuc2lnbmVkIG9yZWQg
PSAwOwogCkBAIC00NDEsNiArNDIyLDMwIEBAIFNsb3dQYXRoOgogICAgIHJldHVybiBuZXdJbXBs
OwogfQogCitSZWY8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y29udmVydFRvTG93ZXJjYXNlV2l0
aG91dExvY2FsZVN0YXJ0aW5nQXRGYWlsaW5nSW5kZXg4Qml0KHVuc2lnbmVkIGZhaWxpbmdJbmRl
eCkKK3sKKyAgICBBU1NFUlQoaXM4Qml0KCkpOworICAgIExDaGFyKiBkYXRhODsKKyAgICBhdXRv
IG5ld0ltcGwgPSBjcmVhdGVVbmluaXRpYWxpemVkSW50ZXJuYWxOb25FbXB0eShtX2xlbmd0aCwg
ZGF0YTgpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZhaWxpbmdJbmRleDsgKytp
KSB7CisgICAgICAgIEFTU0VSVCghKG1fZGF0YThbaV0gJiB+MHg3RikgJiYgIWlzQVNDSUlVcHBl
cihtX2RhdGE4W2ldKSk7CisgICAgICAgIGRhdGE4W2ldID0gbV9kYXRhOFtpXTsKKyAgICB9CisK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSBmYWlsaW5nSW5kZXg7IGkgPCBtX2xlbmd0aDsgKytpKSB7
CisgICAgICAgIExDaGFyIGNoYXJhY3RlciA9IG1fZGF0YThbaV07CisgICAgICAgIGlmICghKGNo
YXJhY3RlciAmIH4weDdGKSkKKyAgICAgICAgICAgIGRhdGE4W2ldID0gdG9BU0NJSUxvd2VyKGNo
YXJhY3Rlcik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKHVfdG9sb3dlcihj
aGFyYWN0ZXIpIDw9IDB4RkYpOworICAgICAgICAgICAgZGF0YThbaV0gPSBzdGF0aWNfY2FzdDxM
Q2hhcj4odV90b2xvd2VyKGNoYXJhY3RlcikpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0
dXJuIG5ld0ltcGw7Cit9CisKIFJlZjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpjb252ZXJ0VG9V
cHBlcmNhc2VXaXRob3V0TG9jYWxlKCkKIHsKICAgICAvLyBUaGlzIGZ1bmN0aW9uIGNvdWxkIGJl
IG9wdGltaXplZCBmb3Igbm8tb3AgY2FzZXMgdGhlIHdheQpJbmRleDogU291cmNlL1dURi93dGYv
dGV4dC9TdHJpbmdJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9TdHJp
bmdJbXBsLmgJKHJldmlzaW9uIDIwNjc5MykKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5n
SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC02ODIsNiArNjgyLDcgQEAgcHVibGljOgogICAgIFdU
Rl9FWFBPUlRfU1RSSU5HX0FQSSBSZWY8U3RyaW5nSW1wbD4gY29udmVydFRvQVNDSUlMb3dlcmNh
c2UoKTsKICAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgUmVmPFN0cmluZ0ltcGw+IGNvbnZlcnRU
b0FTQ0lJVXBwZXJjYXNlKCk7CiAgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFJlZjxTdHJpbmdJ
bXBsPiBjb252ZXJ0VG9Mb3dlcmNhc2VXaXRob3V0TG9jYWxlKCk7CisgICAgV1RGX0VYUE9SVF9T
VFJJTkdfQVBJIFJlZjxTdHJpbmdJbXBsPiBjb252ZXJ0VG9Mb3dlcmNhc2VXaXRob3V0TG9jYWxl
U3RhcnRpbmdBdEZhaWxpbmdJbmRleDhCaXQodW5zaWduZWQpOwogICAgIFdURl9FWFBPUlRfU1RS
SU5HX0FQSSBSZWY8U3RyaW5nSW1wbD4gY29udmVydFRvVXBwZXJjYXNlV2l0aG91dExvY2FsZSgp
OwogICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBSZWY8U3RyaW5nSW1wbD4gY29udmVydFRvTG93
ZXJjYXNlV2l0aExvY2FsZShjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsZUlkZW50aWZpZXIpOwog
ICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBSZWY8U3RyaW5nSW1wbD4gY29udmVydFRvVXBwZXJj
YXNlV2l0aExvY2FsZShjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsZUlkZW50aWZpZXIpOwpJbmRl
eDogU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmNwcAkocmV2aXNpb24gMjA2NzkzKQorKysgU291cmNl
L1dURi93dGYvdGV4dC9XVEZTdHJpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTgsNiArMzU4
LDEzIEBAIFN0cmluZyBTdHJpbmc6OmNvbnZlcnRUb0xvd2VyY2FzZVdpdGhvdXQKICAgICByZXR1
cm4gbV9pbXBsLT5jb252ZXJ0VG9Mb3dlcmNhc2VXaXRob3V0TG9jYWxlKCk7CiB9CiAKK1N0cmlu
ZyBTdHJpbmc6OmNvbnZlcnRUb0xvd2VyY2FzZVdpdGhvdXRMb2NhbGVTdGFydGluZ0F0RmFpbGlu
Z0luZGV4OEJpdCh1bnNpZ25lZCBmYWlsaW5nSW5kZXgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2lt
cGwpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICByZXR1cm4gbV9pbXBsLT5jb252ZXJ0
VG9Mb3dlcmNhc2VXaXRob3V0TG9jYWxlU3RhcnRpbmdBdEZhaWxpbmdJbmRleDhCaXQoZmFpbGlu
Z0luZGV4KTsKK30KKwogU3RyaW5nIFN0cmluZzo6Y29udmVydFRvVXBwZXJjYXNlV2l0aG91dExv
Y2FsZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2ltcGwpCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90
ZXh0L1dURlN0cmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3Ry
aW5nLmgJKHJldmlzaW9uIDIwNjc5MykKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5n
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzMCw2ICszMzAsNyBAQCBwdWJsaWM6CiAgICAgV1RGX0VY
UE9SVF9TVFJJTkdfQVBJIFN0cmluZyBjb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpIGNvbnN0Owog
ICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBTdHJpbmcgY29udmVydFRvQVNDSUlVcHBlcmNhc2Uo
KSBjb25zdDsKICAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgU3RyaW5nIGNvbnZlcnRUb0xvd2Vy
Y2FzZVdpdGhvdXRMb2NhbGUoKSBjb25zdDsKKyAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgU3Ry
aW5nIGNvbnZlcnRUb0xvd2VyY2FzZVdpdGhvdXRMb2NhbGVTdGFydGluZ0F0RmFpbGluZ0luZGV4
OEJpdCh1bnNpZ25lZCkgY29uc3Q7CiAgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFN0cmluZyBj
b252ZXJ0VG9VcHBlcmNhc2VXaXRob3V0TG9jYWxlKCkgY29uc3Q7CiAgICAgV1RGX0VYUE9SVF9T
VFJJTkdfQVBJIFN0cmluZyBjb252ZXJ0VG9Mb3dlcmNhc2VXaXRoTG9jYWxlKGNvbnN0IEF0b21p
Y1N0cmluZyYgbG9jYWxlSWRlbnRpZmllcikgY29uc3Q7CiAgICAgV1RGX0VYUE9SVF9TVFJJTkdf
QVBJIFN0cmluZyBjb252ZXJ0VG9VcHBlcmNhc2VXaXRoTG9jYWxlKGNvbnN0IEF0b21pY1N0cmlu
ZyYgbG9jYWxlSWRlbnRpZmllcikgY29uc3Q7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>290689</attachid>
            <date>2016-10-04 22:31:50 -0700</date>
            <delta_ts>2016-10-04 23:18:47 -0700</delta_ts>
            <desc>patch for landing v2</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>30810</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMDY4MDEpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE4IEBACisyMDE2LTEwLTA0ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFN0cmluZy5wcm90b3R5cGUudG9Mb3dlckNhc2Ugc2hvdWxkIGJlIGEg
REZHL0ZUTCBpbnRyaW5zaWMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE2Mjg4NworCisgICAgICAgIFJldmlld2VkIGJ5IEZpbGlwIFBpemxvIGFuZCBZ
dXN1a2UgU3V6dWtpLgorCisgICAgICAgICogbWljcm9iZW5jaG1hcmtzL3RvLWxvd2VyLWNhc2Uu
anM6IEFkZGVkLgorICAgICAgICAoYXNzZXJ0KToKKyAgICAgICAgKGZvbyk6CisgICAgICAgIChi
YXIpOgorICAgICAgICAqIHN0cmVzcy90by1sb3dlci1jYXNlLmpzOiBBZGRlZC4KKyAgICAgICAg
KGFzc2VydCk6CisgICAgICAgIChmb28pOgorCiAyMDE2LTEwLTA0ICBKRiBCYXN0aWVuICA8amZi
YXN0aWVuQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWJBc3NlbWJseTogaGFuZGxlIGEgZmV3IGNv
cm5lciBjYXNlcwpJbmRleDogSlNUZXN0cy9taWNyb2JlbmNobWFya3MvdG8tbG93ZXItY2FzZS5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy90by1sb3dlci1jYXNlLmpz
CShub25leGlzdGVudCkKKysrIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL3RvLWxvd2VyLWNhc2Uu
anMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNiBAQAorZnVuY3Rpb24gYXNzZXJ0KGIpIHsK
KyAgICBpZiAoIWIpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiQmFkIGFzc2VydGlvbiIpOwor
fQorbm9JbmxpbmUoYXNzZXJ0KTsKKworbGV0IHRlc3RzID0gWworICAgIFsiZm9vIiwgImZvbyJd
LAorICAgIFsiZm9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vIiwgImZvb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vbyJdLAorXTsKKworZnVuY3Rpb24gZm9vKGEpIHsKKyAgICBy
ZXR1cm4gYS50b0xvd2VyQ2FzZSgpOworfQorbm9JbmxpbmUoZm9vKTsKKworZnVuY3Rpb24gYmFy
KGEpIHsKKyAgICBhLnRvTG93ZXJDYXNlKCk7CisgICAgYXNzZXJ0KHRydWUpOyAvLyBzaWRlIGVm
ZmVjdHMKKyAgICBhLnRvTG93ZXJDYXNlKCk7Cit9Citub0lubGluZShiYXIpOworCitsZXQgc3Rh
cnQgPSBEYXRlLm5vdygpOworZm9yIChsZXQgaSA9IDA7IGkgPCA1MDAwMDA7IGkrKykgeworICAg
IGZvciAobGV0IGkgPSAwOyBpIDwgdGVzdHMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgbGV0IHRl
c3QgPSB0ZXN0c1tpXVswXTsKKyAgICAgICAgbGV0IHJlc3VsdCA9IHRlc3RzW2ldWzFdOworICAg
ICAgICBhc3NlcnQoZm9vKHRlc3QpID09PSByZXN1bHQpOworICAgICAgICBiYXIodGVzdCk7Cisg
ICAgfQorfQorCitjb25zdCB2ZXJib3NlID0gZmFsc2U7CitpZiAodmVyYm9zZSkKKyAgICBwcmlu
dChEYXRlLm5vdygpIC0gc3RhcnQpOwpJbmRleDogSlNUZXN0cy9zdHJlc3MvdG8tbG93ZXItY2Fz
ZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy90by1sb3dlci1jYXNlLmpzCShub25l
eGlzdGVudCkKKysrIEpTVGVzdHMvc3RyZXNzL3RvLWxvd2VyLWNhc2UuanMJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwzMCBAQAorZnVuY3Rpb24gYXNzZXJ0KGIpIHsKKyAgICBpZiAoIWIpCisg
ICAgICAgIHRocm93IG5ldyBFcnJvcigiQmFkIGFzc2VydGlvbiIpOworfQorCitsZXQgdGVzdHMg
PSBbCisgICAgWyJGT08iLCAiZm9vIl0sCisgICAgWyJmZmZcdTAwQzIiLCAiZmZmXHUwMEUyIl0s
CisgICAgWyJmb28iLCAiZm9vIl0sCisgICAgWyJmb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb28iLCAiZm9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29v
b29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vIl0sCisgICAgWyJCYVIi
LCAiYmFyIl0sCisgICAgWyJGT09cdTAwQTkiLCAiZm9vXHUwMEE5Il0sCisgICAgWyIjJCMkIiwg
IiMkIyQiXSwKKyAgICBbIiYmJlx1MDBBOSIsICImJiZcdTAwQTkiXSwKKyAgICBbIiYmJlx1MDBD
MiIsICImJiZcdTAwRTIiXSwKKyAgICBbIkFCQ1x1MDEwMCIsICJhYmNcdTAxMDEiXSwKK107CisK
K2Z1bmN0aW9uIGZvbyhhKSB7CisgICAgcmV0dXJuIGEudG9Mb3dlckNhc2UoKTsKK30KK25vSW5s
aW5lKGZvbyk7CisKK2ZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDA7IGkrKykgeworICAgIGZvciAo
bGV0IGkgPSAwOyBpIDwgdGVzdHMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgbGV0IHRlc3QgPSB0
ZXN0c1tpXVswXTsKKyAgICAgICAgbGV0IHJlc3VsdCA9IHRlc3RzW2ldWzFdOworICAgICAgICBh
c3NlcnQoZm9vKHRlc3QpID09PSByZXN1bHQpOworICAgIH0KK30KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L0NoYW5nZUxvZwkocmV2aXNpb24gMjA2NzkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUyIEBACisyMDE2LTEwLTA0ICBTYWFt
IEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIFN0cmluZy5wcm90b3R5cGUu
dG9Mb3dlckNhc2Ugc2hvdWxkIGJlIGEgREZHL0ZUTCBpbnRyaW5zaWMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2Mjg4NworCisgICAgICAgIFJldmll
d2VkIGJ5IEZpbGlwIFBpemxvIGFuZCBZdXN1a2UgU3V6dWtpLgorCisgICAgICAgIFRoaXMgcGF0
Y2ggbWFrZXMgVG9Mb3dlckNhc2UgYW4gaW50cmluc2ljIGluIHRoZSBERkcvRlRMLiBPbiB0aGUg
ZmFzdAorICAgICAgICBwYXRoLCB0aGUgaW50cmluc2ljIHdpbGwgbG9vcCBvdmVyIGFuIDgtYml0
IHN0cmluZyBlbnN1cmluZyBpdCdzIGFscmVhZHkKKyAgICAgICAgbG93ZXIgY2FzZSwgYW5kIHNp
bXBseSByZXR1cm4gdGhlIHN0cmluZy4gSW4gdGhlIHNsb3cgcGF0aCwgaXQnbGwgY2FsbAorICAg
ICAgICBpbnRvIEMgY29kZSB0byBtYWtlIGEgbmV3IHN0cmluZy4KKworICAgICAgICBUaGlzIGlz
IGEgNy04JSBzcGVlZHVwIG9uIEVTNlNhbXBsZUJlbmNoL0Jhc2ljLgorCisgICAgICAgICogZGZn
L0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJz
dHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKToKKyAg
ICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5
dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWNDYWxsKToKKyAgICAgICAgKiBkZmcvREZHQ2xv
YmJlcml6ZS5oOgorICAgICAgICAoSlNDOjpERkc6OmNsb2JiZXJpemUpOgorICAgICAgICAqIGRm
Zy9ERkdEb2VzR0MuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmRvZXNHQyk6CisgICAgICAgICog
ZGZnL0RGR0ZpeHVwUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmZp
eHVwTm9kZSk6CisgICAgICAgICogZGZnL0RGR05vZGVUeXBlLmg6CisgICAgICAgICogZGZnL0RG
R09wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmg6CisgICAgICAg
ICogZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcv
REZHU2FmZVRvRXhlY3V0ZS5oOgorICAgICAgICAoSlNDOjpERkc6OnNhZmVUb0V4ZWN1dGUpOgor
ICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVUb0xvd2VyQ2FzZSk6CisgICAgICAgICogZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmg6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNhbGxP
cGVyYXRpb24pOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZn
L0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjb21waWxlKToKKyAgICAgICAgKiBmdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5o
OgorICAgICAgICAqIGZ0bC9GVExDYXBhYmlsaXRpZXMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6
OmNhbkNvbXBpbGUpOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAg
ICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlTm9kZSk6CisgICAgICAgIChK
U0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVUb0xvd2VyQ2FzZSk6CisgICAgICAg
ICogaml0L0pJVE9wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBydW50aW1lL0ludHJpbnNpYy5oOgor
ICAgICAgICAqIHJ1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6U3Ry
aW5nUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbik6CisKIDIwMTYtMTAtMDQgIFl1c3VrZSBTdXp1
a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTiAocjIwNjc3
OCk6IFJlbGVhc2UgSlNDIHRlc3QgQ2hha3JhQ29yZS55YW1sL0NoYWtyYUNvcmUvdGVzdC9FcnJv
ci92YWxpZGF0ZV9saW5lX2NvbHVtbi5qcy5kZWZhdWx0IGZhaWxpbmcKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJ
bmxpbmVzLmgJKHJldmlzaW9uIDIwNjc5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTAwNSw2
ICsxMDA1LDExIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogCisgICAgY2FzZSBUb0xvd2VyQ2FzZTogeworICAgICAgICBm
b3JOb2RlKG5vZGUpLnNldFR5cGUobV9ncmFwaCwgU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKwogICAgIGNhc2UgTG9hZEZyb21KU01hcEJ1Y2tldDoKICAgICAgICAgZm9yTm9k
ZShub2RlKS5tYWtlSGVhcFRvcCgpOwogICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAyMDY3
OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjU4MCw2ICsyNTgwLDIwIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6
OmhhbmRsZUludHJpbnNpY0NhbGwKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCisgICAg
Y2FzZSBUb0xvd2VyQ2FzZUludHJpbnNpYzogeworICAgICAgICBpZiAoYXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMgIT0gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBp
ZiAobV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJ
bmRleCwgQmFkVHlwZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaW5z
ZXJ0Q2hlY2tzKCk7CisgICAgICAgIE5vZGUqIHRoaXNTdHJpbmcgPSBnZXQodmlydHVhbFJlZ2lz
dGVyRm9yQXJndW1lbnQoMCwgcmVnaXN0ZXJPZmZzZXQpKTsKKyAgICAgICAgTm9kZSogcmVzdWx0
ID0gYWRkVG9HcmFwaChUb0xvd2VyQ2FzZSwgdGhpc1N0cmluZyk7CisgICAgICAgIHNldChWaXJ0
dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksIHJlc3VsdCk7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24g
MjA2NzkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEyOTEsNiArMTI5MSwxMCBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgm
IGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAgIHJlYWQoTWlzY0ZpZWxkcyk7CiAgICAgICAgIGRl
ZihIZWFwTG9jYXRpb24oTWFwSGFzTG9jLCBNaXNjRmllbGRzLCBub2RlLT5jaGlsZDEoKSksIExh
enlOb2RlKG5vZGUpKTsKICAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBUb0xvd2VyQ2FzZToK
KyAgICAgICAgZGVmKFB1cmVWYWx1ZShub2RlKSk7CisgICAgICAgIHJldHVybjsKICAgICAgICAg
CiAgICAgY2FzZSBMYXN0Tm9kZVR5cGU6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCShyZXZp
c2lvbiAyMDY3OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI5Miw2ICsyOTIsNyBAQCBib29sIGRvZXNHQyhHcmFwaCYgZ3Jh
cGgsIE5vZGUqIG5vZGUpCiAgICAgY2FzZSBTdHJpbmdSZXBsYWNlOgogICAgIGNhc2UgU3RyaW5n
UmVwbGFjZVJlZ0V4cDoKICAgICBjYXNlIENyZWF0ZVJlc3Q6CisgICAgY2FzZSBUb0xvd2VyQ2Fz
ZToKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIAogICAgIGNhc2UgTXVsdGlQdXRCeU9m
ZnNldDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNw
cAkocmV2aXNpb24gMjA2NzkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1
cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY3Myw2ICsxNjczLDE1IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCisgICAgICAgIGNhc2UgVG9Mb3dlckNh
c2U6IHsKKyAgICAgICAgICAgIC8vIFdlIGN1cnJlbnRseSBvbmx5IHN1cHBvcnQgU3RyaW5nVXNl
IHNpbmNlIHRoYXQgd2lsbCBlbnN1cmUgdGhhdAorICAgICAgICAgICAgLy8gVG9Mb3dlckNhc2Ug
aXMgYSBwdXJlIG9wZXJhdGlvbi4gSWYgd2UgZGVjaWRlIHRvIHVwZGF0ZSB0aGlzIHdpdGgKKyAg
ICAgICAgICAgIC8vIG1vcmUgdHlwZXMgaW4gdGhlIGZ1dHVyZSwgd2UgbmVlZCB0byBlbnN1cmUg
dGhhdCB0aGUgY2xvYmJlcml6ZSBydWxlcworICAgICAgICAgICAgLy8gYXJlIGNvcnJlY3QuCisg
ICAgICAgICAgICBmaXhFZGdlPFN0cmluZ1VzZT4obm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKwogICAgICAgICBjYXNlIERlZmluZUFjY2Vzc29yUHJvcGVy
dHk6IHsKICAgICAgICAgICAgIGZpeEVkZ2U8Q2VsbFVzZT4obV9ncmFwaC52YXJBcmdDaGlsZChu
b2RlLCAwKSk7CiAgICAgICAgICAgICBFZGdlJiBwcm9wZXJ0eUVkZ2UgPSBtX2dyYXBoLnZhckFy
Z0NoaWxkKG5vZGUsIDEpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
VHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5
cGUuaAkocmV2aXNpb24gMjA2NzkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOTYsNiArMzk2LDggQEAgbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKEdldE1hcEJ1Y2tldCwgTm9kZVJlc3VsdEpT
KSBcCiAgICAgbWFjcm8oTG9hZEZyb21KU01hcEJ1Y2tldCwgTm9kZVJlc3VsdEpTKSBcCiAgICAg
bWFjcm8oSXNOb25FbXB0eU1hcEJ1Y2tldCwgTm9kZVJlc3VsdEJvb2xlYW4pIFwKKyAgICBcCisg
ICAgbWFjcm8oVG9Mb3dlckNhc2UsIE5vZGVSZXN1bHRKUykgXAogCiAvLyBUaGlzIGVudW0gZ2Vu
ZXJhdGVzIGEgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nIGlkIGZvciBhbGwgTm9kZSB0eXBlcywK
IC8vIGFuZCBpcyB1c2VkIGJ5IHRoZSBzdWJzZXF1ZW50IGVudW0gdG8gZmlsbCBvdXQgdGhlIGlk
IChhcyBhY2Nlc3NlZCB2aWEgdGhlIE5vZGVJZE1hc2spLgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyMDY3OTMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNTE0LDYgKzE1MTQsMjIgQEAgU3RyaW5nSW1wbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25S
ZXNvbAogICAgIHJldHVybiBzdHJpbmctPnZhbHVlKGV4ZWMpLmltcGwoKTsKIH0KIAorSlNTdHJp
bmcqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVG9Mb3dlckNhc2UoRXhlY1N0YXRlKiBleGVjLCBK
U1N0cmluZyogc3RyaW5nLCB1aW50MzJfdCBmYWlsaW5nSW5kZXgpCit7CisgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7
CisKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBjb25z
dCBTdHJpbmcmIGlucHV0U3RyaW5nID0gc3RyaW5nLT52YWx1ZShleGVjKTsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKKyAgICBTdHJpbmcgbG93ZXJjYXNlZFN0cmlu
ZyA9IGlucHV0U3RyaW5nLmlzOEJpdCgpID8gaW5wdXRTdHJpbmcuY29udmVydFRvTG93ZXJjYXNl
V2l0aG91dExvY2FsZVN0YXJ0aW5nQXRGYWlsaW5nSW5kZXg4Qml0KGZhaWxpbmdJbmRleCkgOiBp
bnB1dFN0cmluZy5jb252ZXJ0VG9Mb3dlcmNhc2VXaXRob3V0TG9jYWxlKCk7CisgICAgaWYgKGxv
d2VyY2FzZWRTdHJpbmcuaW1wbCgpID09IGlucHV0U3RyaW5nLmltcGwoKSkKKyAgICAgICAgcmV0
dXJuIHN0cmluZzsKKyAgICBzY29wZS5yZWxlYXNlKCk7CisgICAgcmV0dXJuIGpzU3RyaW5nKGV4
ZWMsIGxvd2VyY2FzZWRTdHJpbmcpOworfQorCiBKU1N0cmluZyogSklUX09QRVJBVElPTiBvcGVy
YXRpb25TaW5nbGVDaGFyYWN0ZXJTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBpbnQzMl90IGNoYXJh
Y3RlcikKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHJldmlzaW9uIDIwNjc5MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTUs
NiArMTU1LDggQEAgY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25FbnN1cmVBcnJheQogU3Ry
aW5nSW1wbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25SZXNvbHZlUm9wZShFeGVjU3RhdGUqLCBK
U1N0cmluZyopOwogSlNTdHJpbmcqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU2luZ2xlQ2hhcmFj
dGVyU3RyaW5nKEV4ZWNTdGF0ZSosIGludDMyX3QpOwogCitKU1N0cmluZyogSklUX09QRVJBVElP
TiBvcGVyYXRpb25Ub0xvd2VyQ2FzZShFeGVjU3RhdGUqLCBKU1N0cmluZyosIHVpbnQzMl90KTsK
KwogaW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk1hcEhhc2goRXhlY1N0YXRlKiwgRW5j
b2RlZEpTVmFsdWUgaW5wdXQpOwogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkpTTWFw
RmluZEJ1Y2tldChFeGVjU3RhdGUqLCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSwgaW50MzJfdCk7
CiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSlNTZXRGaW5kQnVja2V0KEV4ZWNTdGF0
ZSosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVlLCBpbnQzMl90KTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9u
UGhhc2UuY3BwCShyZXZpc2lvbiAyMDY3OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzU0
LDYgKzc1NCwxMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgc2V0UHJlZGljdGlvbihTcGVjSW50
MzJPbmx5KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisKKyAgICAgICAgY2FzZSBU
b0xvd2VyQ2FzZToKKyAgICAgICAgICAgIHNldFByZWRpY3Rpb24oU3BlY1N0cmluZyk7CisgICAg
ICAgICAgICBicmVhazsKKwogICAgICAgICBjYXNlIEFyaXRoUG93OgogICAgICAgICBjYXNlIEFy
aXRoU3FydDoKICAgICAgICAgY2FzZSBBcml0aEZSb3VuZDoKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCShyZXZpc2lvbiAyMDY3OTMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMzYxLDYgKzM2MSw3IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlw
ZSYgc3QKICAgICBjYXNlIFB1dER5bmFtaWNWYXI6CiAgICAgY2FzZSBSZXNvbHZlU2NvcGU6CiAg
ICAgY2FzZSBNYXBIYXNoOgorICAgIGNhc2UgVG9Mb3dlckNhc2U6CiAgICAgY2FzZSBHZXRNYXBC
dWNrZXQ6CiAgICAgY2FzZSBMb2FkRnJvbUpTTWFwQnVja2V0OgogICAgIGNhc2UgSXNOb25FbXB0
eU1hcEJ1Y2tldDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMjA2NzkzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjY3OCw2ICsyNjc4LDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSogbm9kZSkKICAgICAgICAgfSB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KKyAgICAKKyAgICBj
YXNlIFRvTG93ZXJDYXNlOiB7CisgICAgICAgIGNvbXBpbGVUb0xvd2VyQ2FzZShub2RlKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQogCiAgICAgY2FzZSBHZXRCeVZhbFdpdGhUaGlzOiB7CiAgICAg
ICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShy
ZXZpc2lvbiAyMDY3OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00ODg4LDYgKzQ4ODgsMTEgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAgICB9
CiAKKyAgICBjYXNlIFRvTG93ZXJDYXNlOiB7CisgICAgICAgIGNvbXBpbGVUb0xvd2VyQ2FzZShu
b2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCiAgICAgY2FzZSBJc09iamVjdDogewogICAg
ICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAg
IEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgUmV1c2UsIHZhbHVlKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAy
MDY3OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTQ5MCw2ICsxNDkwLDYwIEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVQZWVwSG9sZUJvb2wKICAgICBqdW1wKG5vdFRha2VuKTsKIH0KIAordm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVRvTG93ZXJDYXNlKE5vZGUqIG5vZGUpCit7CisgICAgQVNT
RVJUKG5vZGUtPm9wKCkgPT0gVG9Mb3dlckNhc2UpOworICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5k
IHN0cmluZyh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhp
cyk7CisgICAgR1BSVGVtcG9yYXJ5IGluZGV4KHRoaXMpOworICAgIEdQUlRlbXBvcmFyeSBjaGFy
UmVnKHRoaXMpOworICAgIEdQUlRlbXBvcmFyeSBsZW5ndGgodGhpcyk7CisKKyAgICBHUFJSZWcg
c3RyaW5nR1BSID0gc3RyaW5nLmdwcigpOworICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIo
KTsKKyAgICBHUFJSZWcgaW5kZXhHUFIgPSBpbmRleC5ncHIoKTsKKyAgICBHUFJSZWcgY2hhckdQ
UiA9IGNoYXJSZWcuZ3ByKCk7CisgICAgR1BSUmVnIGxlbmd0aEdQUiA9IGxlbmd0aC5ncHIoKTsK
KworICAgIHNwZWN1bGF0ZVN0cmluZyhub2RlLT5jaGlsZDEoKSwgc3RyaW5nR1BSKTsKKworICAg
IENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7CisKKyAgICBtX2ppdC5tb3ZlKFRydXN0
ZWRJbW1QdHIoMCksIGluZGV4R1BSKTsKKworICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Moc3RyaW5nR1BSLCBKU1N0cmluZzo6b2Zmc2V0T2ZWYWx1ZSgpKSwgdGVtcEdQ
Uik7CisgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJs
ZXI6Olplcm8sIHRlbXBHUFIpKTsKKworICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2hU
ZXN0MzIoCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyh0ZW1wR1BSLCBTdHJpbmdJbXBsOjpmbGFnc09mZnNldCgpKSwKKyAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW0zMihTdHJpbmdJbXBsOjpmbGFnSXM4Qml0KCkpKSk7CisgICAg
bV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXBHUFIsIFN0cmluZ0ltcGw6
Omxlbmd0aE1lbW9yeU9mZnNldCgpKSwgbGVuZ3RoR1BSKTsKKyAgICBtX2ppdC5sb2FkUHRyKE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXBHUFIsIFN0cmluZ0ltcGw6OmRhdGFPZmZzZXQoKSks
IHRlbXBHUFIpOworCisgICAgYXV0byBsb29wU3RhcnQgPSBtX2ppdC5sYWJlbCgpOworICAgIGF1
dG8gbG9vcERvbmUgPSBtX2ppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkFib3ZlT3JFcXVhbCwg
aW5kZXhHUFIsIGxlbmd0aEdQUik7CisgICAgbV9qaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkJh
c2VJbmRleCh0ZW1wR1BSLCBpbmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzT25lKSwgY2hh
ckdQUik7CisgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaFRlc3QzMihDQ2FsbEhlbHBl
cnM6Ok5vblplcm8sIGNoYXJHUFIsIFRydXN0ZWRJbW0zMih+MHg3RikpKTsKKyAgICBtX2ppdC5z
dWIzMihUcnVzdGVkSW1tMzIoJ0EnKSwgY2hhckdQUik7CisgICAgc2xvd1BhdGguYXBwZW5kKG1f
aml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6QmVsb3dPckVxdWFsLCBjaGFyR1BSLCBUcnVzdGVk
SW1tMzIoJ1onIC0gJ0EnKSkpOworCisgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBp
bmRleEdQUik7CisgICAgbV9qaXQuanVtcCgpLmxpbmtUbyhsb29wU3RhcnQsICZtX2ppdCk7Cisg
ICAgCisgICAgc2xvd1BhdGgubGluaygmbV9qaXQpOworICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0
ZXJzKGxlbmd0aEdQUik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Ub0xvd2VyQ2FzZSwg
bGVuZ3RoR1BSLCBzdHJpbmdHUFIsIGluZGV4R1BSKTsKKyAgICBzaWxlbnRGaWxsQWxsUmVnaXN0
ZXJzKGxlbmd0aEdQUik7CisgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKKyAgICBhdXRvIGRv
bmUgPSBtX2ppdC5qdW1wKCk7CisKKyAgICBsb29wRG9uZS5saW5rKCZtX2ppdCk7CisgICAgbV9q
aXQubW92ZShzdHJpbmdHUFIsIGxlbmd0aEdQUik7CisKKyAgICBkb25lLmxpbmsoJm1faml0KTsK
KyAgICBjZWxsUmVzdWx0KGxlbmd0aEdQUiwgbm9kZSk7Cit9CisKIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVQZWVwSG9sZUludDMyQnJhbmNoKE5vZGUqIG5vZGUsIE5vZGUqIGJyYW5jaE5v
ZGUsIEpJVENvbXBpbGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKIHsKICAgICBC
YXNpY0Jsb2NrKiB0YWtlbiA9IGJyYW5jaE5vZGUtPmJyYW5jaERhdGEoKS0+dGFrZW4uYmxvY2s7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5o
CShyZXZpc2lvbiAyMDY3OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTkzOCw2ICs5MzgsMTEgQEAgcHVibGljOgog
ICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoY2VsbCk7CiAgICAgICAg
IHJldHVybiBhcHBlbmRDYWxsU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Cisg
ICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKc3NfSklUT3BlcmF0aW9uX0VKc3NV
aSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKKyAg
ICB7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcy
KTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQp
OworICAgIH0KICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfSklUT3BlcmF0
aW9uX0VPIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIG9iamVjdCkKICAgICB7CiAg
ICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShvYmplY3QpOwpAQCAtMjY1
MSw2ICsyNjU2LDcgQEAgcHVibGljOgogICAgIHZvaWQgY29tcGlsZUNvbXBhcmVFcVB0cihOb2Rl
Kik7CiAgICAgdm9pZCBjb21waWxlRGVmaW5lRGF0YVByb3BlcnR5KE5vZGUqKTsKICAgICB2b2lk
IGNvbXBpbGVEZWZpbmVBY2Nlc3NvclByb3BlcnR5KE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVU
b0xvd2VyQ2FzZShOb2RlKik7CiAKICAgICB2b2lkIG1vdmVUcnVlVG8oR1BSUmVnKTsKICAgICB2
b2lkIG1vdmVGYWxzZVRvKEdQUlJlZyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaAkocmV2aXNpb24gMjA2Nzkz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMSw2ICsxMDEsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEZUTCB7CiAgICAgbWFjcm8oU2NvcGVkQXJndW1lbnRzVGFibGVfbGVuZ3RoLCBTY29w
ZWRBcmd1bWVudHNUYWJsZTo6b2Zmc2V0T2ZMZW5ndGgoKSkgXAogICAgIG1hY3JvKFN0cmluZ0lt
cGxfZGF0YSwgU3RyaW5nSW1wbDo6ZGF0YU9mZnNldCgpKSBcCiAgICAgbWFjcm8oU3RyaW5nSW1w
bF9oYXNoQW5kRmxhZ3MsIFN0cmluZ0ltcGw6OmZsYWdzT2Zmc2V0KCkpIFwKKyAgICBtYWNybyhT
dHJpbmdJbXBsX2xlbmd0aCwgU3RyaW5nSW1wbDo6bGVuZ3RoTWVtb3J5T2Zmc2V0KCkpIFwKICAg
ICBtYWNybyhTdHJ1Y3R1cmVfY2xhc3NJbmZvLCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgp
KSBcCiAgICAgbWFjcm8oU3RydWN0dXJlX2dsb2JhbE9iamVjdCwgU3RydWN0dXJlOjpnbG9iYWxP
YmplY3RPZmZzZXQoKSkgXAogICAgIG1hY3JvKFN0cnVjdHVyZV9wcm90b3R5cGUsIFN0cnVjdHVy
ZTo6cHJvdG90eXBlT2Zmc2V0KCkpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDIwNjc5MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjY1
LDYgKzI2NSw3IEBAIGlubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShOb2RlKiAKICAg
ICBjYXNlIENvbXBhcmVTdHJpY3RFcToKICAgICBjYXNlIERlZmluZURhdGFQcm9wZXJ0eToKICAg
ICBjYXNlIERlZmluZUFjY2Vzc29yUHJvcGVydHk6CisgICAgY2FzZSBUb0xvd2VyQ2FzZToKICAg
ICAgICAgLy8gVGhlc2UgYXJlIE9LLgogICAgICAgICBicmVhazsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjA2Nzkz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDQzLDYgKzEwNDMsOSBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFVu
cmVhY2hhYmxlOgogICAgICAgICAgICAgY29tcGlsZVVucmVhY2hhYmxlKCk7CiAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBUb0xvd2VyQ2FzZToKKyAgICAgICAgICAgIGNvbXBpbGVU
b0xvd2VyQ2FzZSgpOworICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBQaGFudG9t
TG9jYWw6CiAgICAgICAgIGNhc2UgTG9vcEhpbnQ6CkBAIC04NjIzLDYgKzg2MjYsNjAgQEAgcHJp
dmF0ZToKICAgICAgICAgbm9uU3BlY3VsYXRpdmVDb21wYXJlKGludEZ1bmN0b3IsIGZhbGxiYWNr
RnVuY3Rpb24pOwogICAgIH0KIAorICAgIHZvaWQgY29tcGlsZVRvTG93ZXJDYXNlKCkKKyAgICB7
CisgICAgICAgIExCYXNpY0Jsb2NrIG5vdFJvcGUgPSBtX291dC5uZXdCbG9jaygpOworICAgICAg
ICBMQmFzaWNCbG9jayBpczhCaXQgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNC
bG9jayBsb29wVG9wID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgbG9v
cEJvZHkgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBzbG93UGF0aCA9
IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1f
b3V0Lm5ld0Jsb2NrKCk7CisKKyAgICAgICAgTFZhbHVlIHN0cmluZyA9IGxvd1N0cmluZyhtX25v
ZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgc3RhcnRJbmRleCA9IG1fb3V0
LmFuY2hvcihtX291dC5jb25zdEludDMyKDApKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgc3Rh
cnRJbmRleEZvckNhbGwgPSBtX291dC5hbmNob3IobV9vdXQuY29uc3RJbnQzMigwKSk7CisgICAg
ICAgIExWYWx1ZSBpbXBsID0gbV9vdXQubG9hZFB0cihzdHJpbmcsIG1faGVhcHMuSlNTdHJpbmdf
dmFsdWUpOworICAgICAgICBtX291dC5icmFuY2gobV9vdXQuaXNaZXJvNjQoaW1wbCksCisgICAg
ICAgICAgICB1bnN1cmUoc2xvd1BhdGgpLCB1bnN1cmUobm90Um9wZSkpOworCisgICAgICAgIExC
YXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8obm90Um9wZSwgaXM4Qml0KTsKKwor
ICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICBtX291dC50ZXN0SXNaZXJvMzIoCisg
ICAgICAgICAgICAgICAgbV9vdXQubG9hZDMyKGltcGwsIG1faGVhcHMuU3RyaW5nSW1wbF9oYXNo
QW5kRmxhZ3MpLAorICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoU3RyaW5nSW1wbDo6
ZmxhZ0lzOEJpdCgpKSksCisgICAgICAgICAgICB1bnN1cmUoc2xvd1BhdGgpLCB1bnN1cmUoaXM4
Qml0KSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oaXM4Qml0LCBsb29wVG9wKTsKKyAgICAg
ICAgTFZhbHVlIGxlbmd0aCA9IG1fb3V0LmxvYWQzMihpbXBsLCBtX2hlYXBzLlN0cmluZ0ltcGxf
bGVuZ3RoKTsKKyAgICAgICAgTFZhbHVlIGJ1ZmZlciA9IG1fb3V0LmxvYWRQdHIoaW1wbCwgbV9o
ZWFwcy5TdHJpbmdJbXBsX2RhdGEpOworICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0UmVzdWx0
ID0gbV9vdXQuYW5jaG9yKHN0cmluZyk7CisgICAgICAgIG1fb3V0Lmp1bXAobG9vcFRvcCk7CisK
KyAgICAgICAgbV9vdXQuYXBwZW5kVG8obG9vcFRvcCwgbG9vcEJvZHkpOworICAgICAgICBMVmFs
dWUgaW5kZXggPSBtX291dC5waGkoSW50MzIsIHN0YXJ0SW5kZXgpOworICAgICAgICBWYWx1ZUZy
b21CbG9jayBpbmRleEZyb21CbG9jayA9IG1fb3V0LmFuY2hvcihpbmRleCk7CisgICAgICAgIG1f
b3V0LmJyYW5jaChtX291dC5iZWxvdyhpbmRleCwgbGVuZ3RoKSwKKyAgICAgICAgICAgIHVuc3Vy
ZShsb29wQm9keSksIHVuc3VyZShjb250aW51YXRpb24pKTsKKworICAgICAgICBtX291dC5hcHBl
bmRUbyhsb29wQm9keSwgc2xvd1BhdGgpOworCisgICAgICAgIExWYWx1ZSBieXRlID0gbV9vdXQu
bG9hZDhaZXJvRXh0MzIobV9vdXQuYmFzZUluZGV4KG1faGVhcHMuY2hhcmFjdGVyczgsIGJ1ZmZl
ciwgbV9vdXQuemVyb0V4dFB0cihpbmRleCkpKTsKKyAgICAgICAgTFZhbHVlIGlzSW52YWxpZEFz
Y2lpUmFuZ2UgPSBtX291dC5iaXRBbmQoYnl0ZSwgbV9vdXQuY29uc3RJbnQzMih+MHg3RikpOwor
ICAgICAgICBMVmFsdWUgaXNVcHBlckNhc2UgPSBtX291dC5iZWxvd09yRXF1YWwobV9vdXQuc3Vi
KGJ5dGUsIG1fb3V0LmNvbnN0SW50MzIoJ0EnKSksIG1fb3V0LmNvbnN0SW50MzIoJ1onIC0gJ0En
KSk7CisgICAgICAgIExWYWx1ZSBpc0JhZENoYXJhY3RlciA9IG1fb3V0LmJpdE9yKGlzSW52YWxp
ZEFzY2lpUmFuZ2UsIGlzVXBwZXJDYXNlKTsKKyAgICAgICAgbV9vdXQuYWRkSW5jb21pbmdUb1Bo
aShpbmRleCwgbV9vdXQuYW5jaG9yKG1fb3V0LmFkZChpbmRleCwgbV9vdXQuaW50MzJPbmUpKSk7
CisgICAgICAgIG1fb3V0LmJyYW5jaChpc0JhZENoYXJhY3RlciwgdW5zdXJlKHNsb3dQYXRoKSwg
dW5zdXJlKGxvb3BUb3ApKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93UGF0aCwgY29u
dGludWF0aW9uKTsKKyAgICAgICAgTFZhbHVlIHNsb3dQYXRoSW5kZXggPSBtX291dC5waGkoSW50
MzIsIHN0YXJ0SW5kZXhGb3JDYWxsLCBpbmRleEZyb21CbG9jayk7CisgICAgICAgIFZhbHVlRnJv
bUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3Iodm1DYWxsKHBvaW50ZXJUeXBlKCksIG1f
b3V0Lm9wZXJhdGlvbihvcGVyYXRpb25Ub0xvd2VyQ2FzZSksIG1fY2FsbEZyYW1lLCBzdHJpbmcs
IHNsb3dQYXRoSW5kZXgpKTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisg
ICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICBz
ZXRKU1ZhbHVlKG1fb3V0LnBoaShwb2ludGVyVHlwZSgpLCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0
KSk7CisgICAgfQorCiAgICAgdm9pZCBjb21waWxlUmVzb2x2ZVNjb3BlKCkKICAgICB7CiAgICAg
ICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBtX2dyYXBoLmlkZW50aWZpZXJzKClbbV9ub2Rl
LT5pZGVudGlmaWVyTnVtYmVyKCldOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGVyYXRpb25zLmgJKHJldmlzaW9uIDIwNjc5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMDksNiArMzA5LDcgQEAg
dHlwZWRlZiBTbG93UGF0aFJldHVyblR5cGUgKEpJVF9PUEVSQVRJTwogdHlwZWRlZiBTdHJpbmdJ
bXBsKiAoSklUX09QRVJBVElPTiAqVF9KSVRPcGVyYXRpb25fRUpzcykoRXhlY1N0YXRlKiwgSlNT
dHJpbmcqKTsKIHR5cGVkZWYgSlNTdHJpbmcqIChKSVRfT1BFUkFUSU9OICpKc3NfSklUT3BlcmF0
aW9uX0VaKShFeGVjU3RhdGUqLCBpbnQzMl90KTsKIHR5cGVkZWYgSlNTdHJpbmcqIChKSVRfT1BF
UkFUSU9OICpKc3NfSklUT3BlcmF0aW9uX0VKSkopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpOwordHlwZWRlZiBKU1N0cmluZyogKEpJ
VF9PUEVSQVRJT04gKkpzc19KSVRPcGVyYXRpb25fRUpzc1VpKShFeGVjU3RhdGUqLCBKU1N0cmlu
ZyosIHVpbnQzMl90KTsKIAogLy8gVGhpcyBtZXRob2QgaXMgdXNlZCB0byBsb29rdXAgYW4gZXhj
ZXB0aW9uIGhhbmRlciwga2V5ZWQgYnkgZmF1bHRMb2NhdGlvbiwgd2hpY2ggaXMKIC8vIHRoZSBy
ZXR1cm4gbG9jYXRpb24gZnJvbSBvbmUgb2YgdGhlIGNhbGxzIG91dCB0byBvbmUgb2YgdGhlIGhl
bHBlciBvcGVyYXRpb25zIGFib3ZlLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50cmluc2ljLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50cmluc2ljLmgJKHJldmlzaW9uIDIwNjc5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludHJpbnNpYy5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSw2ICs2NSw3IEBAIGVu
dW0gSlNfRVhQT1JUX1BSSVZBVEUgSW50cmluc2ljIHsKICAgICBKU01hcEhhc0ludHJpbnNpYywK
ICAgICBKU1NldEhhc0ludHJpbnNpYywKICAgICBIYXNPd25Qcm9wZXJ0eUludHJpbnNpYywKKyAg
ICBUb0xvd2VyQ2FzZUludHJpbnNpYywKIAogICAgIC8vIEdldHRlciBpbnRyaW5zaWNzLgogICAg
IFR5cGVkQXJyYXlMZW5ndGhJbnRyaW5zaWMsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAJKHJldmlzaW9uIDIwNjc5MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE0Miw3ICsxNDIsNyBAQCB2b2lkIFN0cmluZ1Byb3RvdHlwZTo6ZmluaXNo
Q3JlYXRpb24oVk0mCiAgICAgSlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04o
InNsaWNlIiwgc3RyaW5nUHJvdG9GdW5jU2xpY2UsIERvbnRFbnVtLCAyKTsKICAgICBKU0NfTkFU
SVZFX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTigic3Vic3RyIiwgc3RyaW5nUHJvdG9GdW5j
U3Vic3RyLCBEb250RW51bSwgMik7CiAgICAgSlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RS
QU5TSVRJT04oInN1YnN0cmluZyIsIHN0cmluZ1Byb3RvRnVuY1N1YnN0cmluZywgRG9udEVudW0s
IDIpOwotICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKCJ0b0xvd2Vy
Q2FzZSIsIHN0cmluZ1Byb3RvRnVuY1RvTG93ZXJDYXNlLCBEb250RW51bSwgMCk7CisgICAgSlND
X05BVElWRV9JTlRSSU5TSUNfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKCJ0b0xvd2VyQ2Fz
ZSIsIHN0cmluZ1Byb3RvRnVuY1RvTG93ZXJDYXNlLCBEb250RW51bSwgMCwgVG9Mb3dlckNhc2VJ
bnRyaW5zaWMpOwogICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKCJ0
b1VwcGVyQ2FzZSIsIHN0cmluZ1Byb3RvRnVuY1RvVXBwZXJDYXNlLCBEb250RW51bSwgMCk7CiAj
aWYgRU5BQkxFKElOVEwpCiAgICAgSlNDX0JVSUxUSU5fRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lU
SU9OKCJsb2NhbGVDb21wYXJlIiwgc3RyaW5nUHJvdG90eXBlTG9jYWxlQ29tcGFyZUNvZGVHZW5l
cmF0b3IsIERvbnRFbnVtKTsKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDY3OTMpCisrKyBTb3VyY2UvV1RG
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0IEBACisyMDE2LTEwLTA0ICBT
YWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIFN0cmluZy5wcm90b3R5
cGUudG9Mb3dlckNhc2Ugc2hvdWxkIGJlIGEgREZHL0ZUTCBpbnRyaW5zaWMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2Mjg4NworCisgICAgICAgIFJl
dmlld2VkIGJ5IEZpbGlwIFBpemxvIGFuZCBZdXN1a2UgU3V6dWtpLgorCisgICAgICAgIFRoaXMg
cGF0Y2ggZXhwb3NlcyBhIG5ldyBTdHJpbmdJbXBsIGZ1bmN0aW9uIGNhbGxlZCBjb252ZXJ0VG9M
b3dlcmNhc2VXaXRob3V0TG9jYWxlU3RhcnRpbmdBdEZhaWxpbmdJbmRleDhCaXQKKyAgICAgICAg
d2hpY2ggZXh0cmFjdHMgc2xvdyBwYXRoIGZvciB0aGUgOC1iaXQgcGFydCBvZiBjb252ZXJ0VG9M
b3dlcmNhc2VXaXRob3V0TG9jYWxlCisgICAgICAgIGludG8gYSBoZWxwZXIgZnVuY3Rpb24uIEkg
ZGVjaWRlZCB0byBleHRyYWN0IHRoaXMgaW50byBpdHMgb3duIGZ1bmN0aW9uIGJlY2F1c2UKKyAg
ICAgICAgaXQgbWF5IGJlIHRoZSBjYXNlIHRoYXQgSlNDcyBKSVRzIHdpbGwgd2FudCB0byBjb250
aW51ZSB0aGUgb3BlcmF0aW9uCisgICAgICAgIGFmdGVyIGl0IGhhcyBhbHJlYWR5IGVuc3VyZWQg
dGhhdCBwYXJ0IG9mIGFuIDgtYml0IHN0cmluZyBpcyBsb3dlciBjYXNlLgorCisgICAgICAgICog
d3RmL3RleHQvU3RyaW5nSW1wbC5jcHA6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OmNvbnZl
cnRUb0xvd2VyY2FzZVdpdGhvdXRMb2NhbGUpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpj
b252ZXJ0VG9Mb3dlcmNhc2VXaXRob3V0TG9jYWxlU3RhcnRpbmdBdEZhaWxpbmdJbmRleDhCaXQp
OgorICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0ltcGwuaDoKKyAgICAgICAgKiB3dGYvdGV4dC9X
VEZTdHJpbmcuY3BwOgorICAgICAgICAoV1RGOjpTdHJpbmc6OmNvbnZlcnRUb0xvd2VyY2FzZVdp
dGhvdXRMb2NhbGVTdGFydGluZ0F0RmFpbGluZ0luZGV4OEJpdCk6CisgICAgICAgICogd3RmL3Rl
eHQvV1RGU3RyaW5nLmg6CisKIDIwMTYtMTAtMDMgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxl
LmNvbT4KIAogICAgICAgICBBZGQgc3VwcG9ydCBmb3IgS2V5Ym9hcmRFdmVudC5rZXkgYXR0cmli
dXRlCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5jcHAJKHJldmlzaW9uIDIwNjc5MykK
KysrIFNvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM2MywzOSArMzYzLDIwIEBAIFVDaGFyMzIgU3RyaW5nSW1wbDo6Y2hhcmFjdGVyU3RhcnRpbmdB
dCgKIFJlZjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpjb252ZXJ0VG9Mb3dlcmNhc2VXaXRob3V0
TG9jYWxlKCkKIHsKICAgICAvLyBOb3RlOiBBdCBvbmUgdGltZSB0aGlzIHdhcyBhIGhvdCBmdW5j
dGlvbiBpbiB0aGUgRHJvbWFlbyBiZW5jaG1hcmssIHNwZWNpZmljYWxseSB0aGUKLSAgICAvLyBu
by1vcCBjb2RlIHBhdGggdXAgdGhyb3VnaCB0aGUgZmlyc3QgJ3JldHVybicgc3RhdGVtZW50Lgor
ICAgIC8vIG5vLW9wIGNvZGUgcGF0aCB0aGF0IG1heSByZXR1cm4gb3Vyc2VsZiBpZiB3ZSBmaW5k
IG5vIHVwcGVyIGNhc2UgbGV0dGVycyBhbmQgbm8gaW52YWxpZAorICAgIC8vIEFTQ0lJIGxldHRl
cnMuCiAKICAgICAvLyBGaXJzdCBzY2FuIHRoZSBzdHJpbmcgZm9yIHVwcGVyY2FzZSBhbmQgbm9u
LUFTQ0lJIGNoYXJhY3RlcnM6CiAgICAgaWYgKGlzOEJpdCgpKSB7Ci0gICAgICAgIHVuc2lnbmVk
IGZhaWxpbmdJbmRleDsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbGVuZ3Ro
OyArK2kpIHsKICAgICAgICAgICAgIExDaGFyIGNoYXJhY3RlciA9IG1fZGF0YThbaV07Ci0gICAg
ICAgICAgICBpZiAoVU5MSUtFTFkoKGNoYXJhY3RlciAmIH4weDdGKSB8fCBpc0FTQ0lJVXBwZXIo
Y2hhcmFjdGVyKSkpIHsKLSAgICAgICAgICAgICAgICBmYWlsaW5nSW5kZXggPSBpOwotICAgICAg
ICAgICAgICAgIGdvdG8gU2xvd1BhdGg7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuICp0aGlzOwotCi1TbG93UGF0aDoKLSAgICAgICAgTENoYXIqIGRhdGE4OwotICAg
ICAgICBhdXRvIG5ld0ltcGwgPSBjcmVhdGVVbmluaXRpYWxpemVkSW50ZXJuYWxOb25FbXB0eSht
X2xlbmd0aCwgZGF0YTgpOwotCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmYWls
aW5nSW5kZXg7ICsraSkKLSAgICAgICAgICAgIGRhdGE4W2ldID0gbV9kYXRhOFtpXTsKLQotICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBmYWlsaW5nSW5kZXg7IGkgPCBtX2xlbmd0aDsgKytpKSB7
Ci0gICAgICAgICAgICBMQ2hhciBjaGFyYWN0ZXIgPSBtX2RhdGE4W2ldOwotICAgICAgICAgICAg
aWYgKCEoY2hhcmFjdGVyICYgfjB4N0YpKQotICAgICAgICAgICAgICAgIGRhdGE4W2ldID0gdG9B
U0NJSUxvd2VyKGNoYXJhY3Rlcik7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAg
ICBBU1NFUlQodV90b2xvd2VyKGNoYXJhY3RlcikgPD0gMHhGRik7Ci0gICAgICAgICAgICAgICAg
ZGF0YThbaV0gPSBzdGF0aWNfY2FzdDxMQ2hhcj4odV90b2xvd2VyKGNoYXJhY3RlcikpOwotICAg
ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKChjaGFyYWN0ZXIgJiB+MHg3Rikg
fHwgaXNBU0NJSVVwcGVyKGNoYXJhY3RlcikpKQorICAgICAgICAgICAgICAgIHJldHVybiBjb252
ZXJ0VG9Mb3dlcmNhc2VXaXRob3V0TG9jYWxlU3RhcnRpbmdBdEZhaWxpbmdJbmRleDhCaXQoaSk7
CiAgICAgICAgIH0KIAotICAgICAgICByZXR1cm4gbmV3SW1wbDsKKyAgICAgICAgcmV0dXJuICp0
aGlzOwogICAgIH0KKwogICAgIGJvb2wgbm9VcHBlciA9IHRydWU7CiAgICAgdW5zaWduZWQgb3Jl
ZCA9IDA7CiAKQEAgLTQ0MSw2ICs0MjIsMzAgQEAgU2xvd1BhdGg6CiAgICAgcmV0dXJuIG5ld0lt
cGw7CiB9CiAKK1JlZjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpjb252ZXJ0VG9Mb3dlcmNhc2VX
aXRob3V0TG9jYWxlU3RhcnRpbmdBdEZhaWxpbmdJbmRleDhCaXQodW5zaWduZWQgZmFpbGluZ0lu
ZGV4KQoreworICAgIEFTU0VSVChpczhCaXQoKSk7CisgICAgTENoYXIqIGRhdGE4OworICAgIGF1
dG8gbmV3SW1wbCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWRJbnRlcm5hbE5vbkVtcHR5KG1fbGVuZ3Ro
LCBkYXRhOCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZmFpbGluZ0luZGV4OyAr
K2kpIHsKKyAgICAgICAgQVNTRVJUKCEobV9kYXRhOFtpXSAmIH4weDdGKSAmJiAhaXNBU0NJSVVw
cGVyKG1fZGF0YThbaV0pKTsKKyAgICAgICAgZGF0YThbaV0gPSBtX2RhdGE4W2ldOworICAgIH0K
KworICAgIGZvciAodW5zaWduZWQgaSA9IGZhaWxpbmdJbmRleDsgaSA8IG1fbGVuZ3RoOyArK2kp
IHsKKyAgICAgICAgTENoYXIgY2hhcmFjdGVyID0gbV9kYXRhOFtpXTsKKyAgICAgICAgaWYgKCEo
Y2hhcmFjdGVyICYgfjB4N0YpKQorICAgICAgICAgICAgZGF0YThbaV0gPSB0b0FTQ0lJTG93ZXIo
Y2hhcmFjdGVyKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQodV90b2xvd2Vy
KGNoYXJhY3RlcikgPD0gMHhGRik7CisgICAgICAgICAgICBkYXRhOFtpXSA9IHN0YXRpY19jYXN0
PExDaGFyPih1X3RvbG93ZXIoY2hhcmFjdGVyKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBy
ZXR1cm4gbmV3SW1wbDsKK30KKwogUmVmPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OmNvbnZlcnRU
b1VwcGVyY2FzZVdpdGhvdXRMb2NhbGUoKQogewogICAgIC8vIFRoaXMgZnVuY3Rpb24gY291bGQg
YmUgb3B0aW1pemVkIGZvciBuby1vcCBjYXNlcyB0aGUgd2F5CkluZGV4OiBTb3VyY2UvV1RGL3d0
Zi90ZXh0L1N0cmluZ0ltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0
cmluZ0ltcGwuaAkocmV2aXNpb24gMjA2NzkzKQorKysgU291cmNlL1dURi93dGYvdGV4dC9TdHJp
bmdJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4Miw2ICs2ODIsNyBAQCBwdWJsaWM6CiAgICAg
V1RGX0VYUE9SVF9TVFJJTkdfQVBJIFJlZjxTdHJpbmdJbXBsPiBjb252ZXJ0VG9BU0NJSUxvd2Vy
Y2FzZSgpOwogICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBSZWY8U3RyaW5nSW1wbD4gY29udmVy
dFRvQVNDSUlVcHBlcmNhc2UoKTsKICAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgUmVmPFN0cmlu
Z0ltcGw+IGNvbnZlcnRUb0xvd2VyY2FzZVdpdGhvdXRMb2NhbGUoKTsKKyAgICBXVEZfRVhQT1JU
X1NUUklOR19BUEkgUmVmPFN0cmluZ0ltcGw+IGNvbnZlcnRUb0xvd2VyY2FzZVdpdGhvdXRMb2Nh
bGVTdGFydGluZ0F0RmFpbGluZ0luZGV4OEJpdCh1bnNpZ25lZCk7CiAgICAgV1RGX0VYUE9SVF9T
VFJJTkdfQVBJIFJlZjxTdHJpbmdJbXBsPiBjb252ZXJ0VG9VcHBlcmNhc2VXaXRob3V0TG9jYWxl
KCk7CiAgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFJlZjxTdHJpbmdJbXBsPiBjb252ZXJ0VG9M
b3dlcmNhc2VXaXRoTG9jYWxlKGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxlSWRlbnRpZmllcik7
CiAgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFJlZjxTdHJpbmdJbXBsPiBjb252ZXJ0VG9VcHBl
cmNhc2VXaXRoTG9jYWxlKGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxlSWRlbnRpZmllcik7Cklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuY3BwCShyZXZpc2lvbiAyMDY3OTMpCisrKyBTb3Vy
Y2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1OCw2ICsz
NTgsMTMgQEAgU3RyaW5nIFN0cmluZzo6Y29udmVydFRvTG93ZXJjYXNlV2l0aG91dAogICAgIHJl
dHVybiBtX2ltcGwtPmNvbnZlcnRUb0xvd2VyY2FzZVdpdGhvdXRMb2NhbGUoKTsKIH0KIAorU3Ry
aW5nIFN0cmluZzo6Y29udmVydFRvTG93ZXJjYXNlV2l0aG91dExvY2FsZVN0YXJ0aW5nQXRGYWls
aW5nSW5kZXg4Qml0KHVuc2lnbmVkIGZhaWxpbmdJbmRleCkgY29uc3QKK3sKKyAgICBpZiAoIW1f
aW1wbCkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIHJldHVybiBtX2ltcGwtPmNvbnZl
cnRUb0xvd2VyY2FzZVdpdGhvdXRMb2NhbGVTdGFydGluZ0F0RmFpbGluZ0luZGV4OEJpdChmYWls
aW5nSW5kZXgpOworfQorCiBTdHJpbmcgU3RyaW5nOjpjb252ZXJ0VG9VcHBlcmNhc2VXaXRob3V0
TG9jYWxlKCkgY29uc3QKIHsKICAgICBpZiAoIW1faW1wbCkKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L3RleHQvV1RGU3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9XVEZT
dHJpbmcuaAkocmV2aXNpb24gMjA2NzkzKQorKysgU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJp
bmcuaAkod29ya2luZyBjb3B5KQpAQCAtMzMwLDYgKzMzMCw3IEBAIHB1YmxpYzoKICAgICBXVEZf
RVhQT1JUX1NUUklOR19BUEkgU3RyaW5nIGNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCkgY29uc3Q7
CiAgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFN0cmluZyBjb252ZXJ0VG9BU0NJSVVwcGVyY2Fz
ZSgpIGNvbnN0OwogICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBTdHJpbmcgY29udmVydFRvTG93
ZXJjYXNlV2l0aG91dExvY2FsZSgpIGNvbnN0OworICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBT
dHJpbmcgY29udmVydFRvTG93ZXJjYXNlV2l0aG91dExvY2FsZVN0YXJ0aW5nQXRGYWlsaW5nSW5k
ZXg4Qml0KHVuc2lnbmVkKSBjb25zdDsKICAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgU3RyaW5n
IGNvbnZlcnRUb1VwcGVyY2FzZVdpdGhvdXRMb2NhbGUoKSBjb25zdDsKICAgICBXVEZfRVhQT1JU
X1NUUklOR19BUEkgU3RyaW5nIGNvbnZlcnRUb0xvd2VyY2FzZVdpdGhMb2NhbGUoY29uc3QgQXRv
bWljU3RyaW5nJiBsb2NhbGVJZGVudGlmaWVyKSBjb25zdDsKICAgICBXVEZfRVhQT1JUX1NUUklO
R19BUEkgU3RyaW5nIGNvbnZlcnRUb1VwcGVyY2FzZVdpdGhMb2NhbGUoY29uc3QgQXRvbWljU3Ry
aW5nJiBsb2NhbGVJZGVudGlmaWVyKSBjb25zdDsK
</data>

          </attachment>
      

    </bug>

</bugzilla>