<?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>157786</bug_id>
          
          <creation_ts>2016-05-16 22:44:33 -0700</creation_ts>
          <short_desc>Function with default parameter values that are arrow functions that capture this isn&apos;t working</short_desc>
          <delta_ts>2016-05-19 12:14:13 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</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>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>sukolsak</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1193750</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-05-16 22:44:33 -0700</bug_when>
    <thetext>I.e
function foo(x = ()=&gt;this) { return x() }</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1193755</commentid>
    <comment_count>1</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-05-16 23:03:25 -0700</bug_when>
    <thetext>This might actually be fixed on TOT. I&apos;ll check</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1193902</commentid>
    <comment_count>2</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-05-17 11:51:03 -0700</bug_when>
    <thetext>this is broken in ToT</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1193907</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2016-05-17 12:01:24 -0700</bug_when>
    <thetext>&lt;rdar://problem/26327329&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1193953</commentid>
    <comment_count>4</comment_count>
    <who name="GSkachkov">gskachkov</who>
    <bug_when>2016-05-17 13:08:27 -0700</bug_when>
    <thetext>Ups. 
Looks like very close to already fixed issue :-(
https://bugs.webkit.org/show_bug.cgi?id=157079
We did store of foo&apos;s &apos;this&apos; in lexical scope after we generate default values in initializeDefaultParameterValuesAndSetupFunctionScopeStack. So we need to store &apos;this&apos; earlier</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194514</commentid>
    <comment_count>5</comment_count>
      <attachid>279318</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-05-18 16:49:35 -0700</bug_when>
    <thetext>Created attachment 279318
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194515</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-05-18 16:50:36 -0700</bug_when>
    <thetext>Attachment 279318 did not pass style-queue:


ERROR: Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h:860:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:814:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:973:  Missing space before {  [whitespace/braces] [5]
Total errors found: 3 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194535</commentid>
    <comment_count>7</comment_count>
      <attachid>279318</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-05-18 17:19:00 -0700</bug_when>
    <thetext>Comment on attachment 279318
patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194545</commentid>
    <comment_count>8</comment_count>
      <attachid>279327</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-05-18 17:55:34 -0700</bug_when>
    <thetext>Created attachment 279327
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194546</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-05-18 17:56:32 -0700</bug_when>
    <thetext>Attachment 279327 did not pass style-queue:


ERROR: Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h:860:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:814:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:973:  Missing space before {  [whitespace/braces] [5]
Total errors found: 3 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194547</commentid>
    <comment_count>10</comment_count>
      <attachid>279328</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-05-18 17:56:35 -0700</bug_when>
    <thetext>Created attachment 279328
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194549</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-05-18 17:59:07 -0700</bug_when>
    <thetext>Attachment 279328 did not pass style-queue:


ERROR: Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h:860:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:813:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:972:  Missing space before {  [whitespace/braces] [5]
Total errors found: 3 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194560</commentid>
    <comment_count>12</comment_count>
      <attachid>279328</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-05-18 18:26:50 -0700</bug_when>
    <thetext>Comment on attachment 279328
patch for landing

Clearing flags on attachment: 279328

Committed r201122: &lt;http://trac.webkit.org/changeset/201122&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194561</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-05-18 18:26:54 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194623</commentid>
    <comment_count>14</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2016-05-18 21:34:02 -0700</bug_when>
    <thetext>There is a 7x regression in Sunspider&apos;s tofte. This patch is the only one in the range on Mozilla&apos;s bot.

Our bots also show the regression.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194796</commentid>
    <comment_count>15</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-05-19 09:58:57 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; There is a 7x regression in Sunspider&apos;s tofte. This patch is the only one in
&gt; the range on Mozilla&apos;s bot.
&gt; 
&gt; Our bots also show the regression.

Ok. I&apos;m fairly sure I know what would cause this.
I&apos;ll fix when I get into the office.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194798</commentid>
    <comment_count>16</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-05-19 10:08:42 -0700</bug_when>
    <thetext>We see a ~5% JetStream regression on iOS in this range.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194859</commentid>
    <comment_count>17</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-05-19 12:14:13 -0700</bug_when>
    <thetext>fixing regression in:
https://bugs.webkit.org/show_bug.cgi?id=157908</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>279318</attachid>
            <date>2016-05-18 16:49:35 -0700</date>
            <delta_ts>2016-05-18 17:55:34 -0700</delta_ts>
            <desc>patch</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>21711</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjAxMTE0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQzIEBA
CisyMDE2LTA1LTE4ICBTYWFtIGJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IEZ1bmN0aW9uIHdpdGggZGVmYXVsdCBwYXJhbWV0ZXIgdmFsdWVzIHRoYXQgYXJlIGFycm93IGZ1
bmN0aW9ucyB0aGF0IGNhcHR1cmUgdGhpcyBpc24ndCB3b3JraW5nCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTc3ODYKKyAgICAgICAgPHJkYXI6Ly9w
cm9ibGVtLzI2MzI3MzI5PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFRvIG1ha2UgdGhlIHNjb3BlcyBvcmRlcmVkIHByb3Blcmx5LCBJIG5lZWRlZCB0
byBpbml0aWFsaXplIHRoZSBhcnJvdyAKKyAgICAgICAgZnVuY3Rpb24gbGV4aWNhbCBlbnZpcm9u
bWVudCBiZWZvcmUgaW5pdGlhbGl6aW5nIGRlZmF1bHQgcGFyYW1ldGVyIHZhbHVlcy4KKyAgICAg
ICAgSSBhbHNvIG1hZGUgdGhlIGNvZGUgZWFzaWVyIHRvIHJlYXNvbiBhYm91dCBieSBuZXZlciBy
ZXVzaW5nIHRoZSBmdW5jdGlvbidzCisgICAgICAgIHZhciBsZXhpY2FsIGVudmlyb25tZW50IGZv
ciB0aGUgYXJyb3cgZnVuY3Rpb24gbGV4aWNhbCBlbnZpcm9ubWVudC4gVGhlCisgICAgICAgIHJl
YXNvbiBmb3IgdGhpcyBpcyB0aGF0IHRoYXQgY29kZSB3YXMgd3JvbmcsIGFuZCB3ZSBqdXN0IGRp
ZG4ndCBoYXZlIGNvZGUgdG8KKyAgICAgICAgdGhhdCBwcm9wZXJseSB0ZXN0ZWQgaXQuIEl0IHdh
cyBlYXN5IGZvciB0aGF0IGNvZGUgdG8gYmUgd3JvbmcgYmVjYXVzZQorICAgICAgICBzb21ldGlt
ZXMgdGhlIGZ1bmN0aW9uJ3MgbGV4aWNhbCBlbnZpcm9ubWVudCBpc24ndCB0aGUgdG9wLW1vc3Qg
c2NvcGUKKyAgICAgICAgKG5hbWVseSwgd2hlbiBhIGZ1bmN0aW9uJ3MgcGFyYW1ldGVyIGxpc3Qg
aXMgbm9uLXNpbXBsZSkgYW5kIHNvbWV0aW1lcworICAgICAgICBpdCBpcyAod2hlbiB0aGUgZnVu
Y3Rpb24ncyBwYXJhbWV0ZXIgbGlzdCBpcyBzaW1wbGUpLgorCisgICAgICAgIEFsc28sIGJlY2F1
c2UgYSBmdW5jdGlvbidzIGRlZmF1bHQgcGFyYW1ldGVyIHZhbHVlcyBtYXkgY2FwdHVyZSB0aGUK
KyAgICAgICAgJ2FyZ3VtZW50cycgdmFyaWFibGUgaW5zaWRlIGFuIGFycm93IGZ1bmN0aW9uLCBJ
IG5lZWRlZCB0byB0YWtlIGNhcmUKKyAgICAgICAgdG8gaW5pdGlhbGl6ZSB0aGUgJ2FyZ3VtZW50
cycgdmFyaWFibGUgYXMgcGFydCBvZiB3aGljaGV2ZXIgc2NvcGUKKyAgICAgICAgaXMgdGhlIHRv
cC1tb3N0IHNjb3BlLiBJdCdzIGVpdGhlciB0aGUgZnVuY3Rpb24ncyB2YXIgZW52aXJvbm1lbnQK
KyAgICAgICAgaWYgdGhlIHBhcmFtZXRlciBsaXN0IGlzIHNpbXBsZSwgb3IgaXQncyB0aGUgZnVu
Y3Rpb24ncyBwYXJhbWV0ZXIKKyAgICAgICAgZW52aXJvbm1lbnQgaWYgdGhlIHBhcmFtZXRlciBs
aXN0IGlzIG5vbi1zaW1wbGUuCisKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5l
cmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5l
cmF0b3IpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6aW5pdGlhbGl6ZURlZmF1
bHRQYXJhbWV0ZXJWYWx1ZXNBbmRTZXR1cEZ1bmN0aW9uU2NvcGVTdGFjayk6CisgICAgICAgIChK
U0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjppbml0aWFsaXplQXJyb3dGdW5jdGlvbkNvbnRleHRTY29w
ZUlmTmVlZGVkKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmluaXRpYWxpemVQ
YXJhbWV0ZXJzKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmluaXRpYWxpemVW
YXJMZXhpY2FsRW52aXJvbm1lbnQpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6
dmlzaWJsZU5hbWVGb3JQYXJhbWV0ZXIpOgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29k
ZUdlbmVyYXRvci5oOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9hcnJvdy1mdW5jdGlvbnMtYXMt
ZGVmYXVsdC1wYXJhbWV0ZXItdmFsdWVzLmpzOiBBZGRlZC4KKyAgICAgICAgKGFzc2VydCk6Cisg
ICAgICAgICh0ZXN0KToKKyAgICAgICAgKHRlc3QuZm9vKToKKyAgICAgICAgKiB0ZXN0cy9zdHJl
c3Mvb3AtcHVzaC1uYW1lLXNjb3BlLWNyYXNoZXMtcHJvZmlsZXIuanM6CisgICAgICAgICh0ZXN0
KToKKwogMjAxNi0wNS0xOCAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KIAog
ICAgICAgICByMTk5ODEyIGJyb2tlIHRlc3QyNjIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZp
c2lvbiAyMDEwNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVj
b2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIxLDE0ICszMjEsMTQgQEAgQnl0
ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogICAgICAgICBlbWl0UHVzaEZ1
bmN0aW9uTmFtZVNjb3BlKGZ1bmN0aW9uTm9kZS0+aWRlbnQoKSwgJm1fY2FsbGVlUmVnaXN0ZXIs
IG1hcmtBc0NhcHR1cmVkKTsKICAgICB9CiAKLSAgICBpZiAoc2hvdWxkQ2FwdHVyZVNvbWVPZlRo
ZVRoaW5ncykgeworICAgIGlmIChzaG91bGRDYXB0dXJlU29tZU9mVGhlVGhpbmdzKQogICAgICAg
ICBtX2xleGljYWxFbnZpcm9ubWVudFJlZ2lzdGVyID0gYWRkVmFyKCk7Ci0gICAgICAgIC8vIFdl
IGNhbiBhbGxvY2F0ZSB0aGUgInZhciIgZW52aXJvbm1lbnQgaWYgd2UgZG9uJ3QgaGF2ZSBkZWZh
dWx0IHBhcmFtZXRlciBleHByZXNzaW9ucy4gSWYgd2UgaGF2ZQotICAgICAgICAvLyBkZWZhdWx0
IHBhcmFtZXRlciBleHByZXNzaW9ucywgd2UgaGF2ZSB0byBob2xkIG9mZiBvbiBhbGxvY2F0aW5n
IHRoZSAidmFyIiBlbnZpcm9ubWVudCBiZWNhdXNlCi0gICAgICAgIC8vIHRoZSBwYXJlbnQgc2Nv
cGUgb2YgdGhlICJ2YXIiIGVudmlyb25tZW50IGlzIHRoZSBwYXJhbWV0ZXIgZW52aXJvbm1lbnQu
Ci0gICAgICAgIGlmIChpc1NpbXBsZVBhcmFtZXRlckxpc3QpCi0gICAgICAgICAgICBpbml0aWFs
aXplVmFyTGV4aWNhbEVudmlyb25tZW50KHN5bWJvbFRhYmxlQ29uc3RhbnRJbmRleCk7Ci0gICAg
fQorCisgICAgLy8gV2UgY2FuIGFsbG9jYXRlIHRoZSAidmFyIiBlbnZpcm9ubWVudCBpZiB3ZSBk
b24ndCBoYXZlIGRlZmF1bHQgcGFyYW1ldGVyIGV4cHJlc3Npb25zLiBJZiB3ZSBoYXZlCisgICAg
Ly8gZGVmYXVsdCBwYXJhbWV0ZXIgZXhwcmVzc2lvbnMsIHdlIGhhdmUgdG8gaG9sZCBvZmYgb24g
YWxsb2NhdGluZyB0aGUgInZhciIgZW52aXJvbm1lbnQgYmVjYXVzZQorICAgIC8vIHRoZSBwYXJl
bnQgc2NvcGUgb2YgdGhlICJ2YXIiIGVudmlyb25tZW50IGlzIHRoZSBwYXJhbWV0ZXIgZW52aXJv
bm1lbnQuCisgICAgaWYgKGlzU2ltcGxlUGFyYW1ldGVyTGlzdCkKKyAgICAgICAgaW5pdGlhbGl6
ZVZhckxleGljYWxFbnZpcm9ubWVudChzeW1ib2xUYWJsZUNvbnN0YW50SW5kZXgsIGZ1bmN0aW9u
U3ltYm9sVGFibGUsIHNob3VsZENhcHR1cmVTb21lT2ZUaGVUaGluZ3MpOwogCiAgICAgLy8gRmln
dXJlIG91dCBzb21lIGludGVyZXN0aW5nIGZhY3RzIGFib3V0IG91ciBhcmd1bWVudHMuCiAgICAg
Ym9vbCBjYXB0dXJlc0FueUFyZ3VtZW50QnlOYW1lID0gZmFsc2U7CkBAIC00NTIsMTkgKzQ1Miw2
IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYKICAgICAgICAgaW5z
dHJ1Y3Rpb25zKCkuYXBwZW5kKG1fYXJndW1lbnRzUmVnaXN0ZXItPmluZGV4KCkpOwogICAgIH0K
ICAgICAKLSAgICBmb3IgKEZ1bmN0aW9uTWV0YWRhdGFOb2RlKiBmdW5jdGlvbiA6IGZ1bmN0aW9u
Tm9kZS0+ZnVuY3Rpb25TdGFjaygpKSB7Ci0gICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50
ID0gZnVuY3Rpb24tPmlkZW50KCk7Ci0gICAgICAgIGNyZWF0ZVZhcmlhYmxlKGlkZW50LCB2YXJL
aW5kKGlkZW50LmltcGwoKSksIGZ1bmN0aW9uU3ltYm9sVGFibGUpOwotICAgICAgICBtX2Z1bmN0
aW9uc1RvSW5pdGlhbGl6ZS5hcHBlbmQoc3RkOjptYWtlX3BhaXIoZnVuY3Rpb24sIE5vcm1hbEZ1
bmN0aW9uVmFyaWFibGUpKTsKLSAgICB9Ci0gICAgZm9yIChhdXRvJiBlbnRyeSA6IGZ1bmN0aW9u
Tm9kZS0+dmFyRGVjbGFyYXRpb25zKCkpIHsKLSAgICAgICAgQVNTRVJUKCFlbnRyeS52YWx1ZS5p
c0xldCgpICYmICFlbnRyeS52YWx1ZS5pc0NvbnN0KCkpOwotICAgICAgICBpZiAoIWVudHJ5LnZh
bHVlLmlzVmFyKCkpIC8vIFRoaXMgaXMgZWl0aGVyIGEgcGFyYW1ldGVyIG9yIGNhbGxlZS4KLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAvLyBWYXJpYWJsZXMgbmFtZWQgImFyZ3VtZW50
cyIgYXJlIG5ldmVyIGNvbnN0LgotICAgICAgICBjcmVhdGVWYXJpYWJsZShJZGVudGlmaWVyOjpm
cm9tVWlkKG1fdm0sIGVudHJ5LmtleS5nZXQoKSksIHZhcktpbmQoZW50cnkua2V5LmdldCgpKSwg
ZnVuY3Rpb25TeW1ib2xUYWJsZSwgSWdub3JlRXhpc3RpbmcpOwotICAgIH0KLQogICAgIC8vIFRo
ZXJlIGFyZSBzb21lIHZhcmlhYmxlcyB0aGF0IG5lZWQgdG8gYmUgcHJlaW5pdGlhbGl6ZWQgdG8g
c29tZXRoaW5nIG90aGVyIHRoYW4gVW5kZWZpbmVkOgogICAgIC8vCiAgICAgLy8gLSAiYXJndW1l
bnRzIjogdW5sZXNzIGl0J3MgdXNlZCBhcyBhIGZ1bmN0aW9uIG9yIHBhcmFtZXRlciwgdGhpcyBz
aG91bGQgcmVmZXIgdG8gdGhlCkBAIC00ODYsNiArNDczLDcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6
OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogICAgIAogICAgIC8vIFRoaXMgaXMgb3VyIGZpbmFsIGFj
dCBvZiB3ZWlyZG5lc3MuICJhcmd1bWVudHMiIGlzIG92ZXJyaWRkZW4gYnkgZXZlcnl0aGluZyBl
eGNlcHQgdGhlCiAgICAgLy8gY2FsbGVlLiBXZSBhZGQgaXQgdG8gdGhlIHN5bWJvbCB0YWJsZSBp
ZiBpdCdzIG5vdCBhbHJlYWR5IHRoZXJlIGFuZCBpdCdzIG5vdCBhbiBhcmd1bWVudC4KKyAgICBi
b29sIHNob3VsZENyZWF0ZUFyZ3VtZW50c1ZhcmlhYmxlSW5QYXJhbWV0ZXJTY29wZSA9IGZhbHNl
OwogICAgIGlmIChuZWVkc0FyZ3VtZW50cykgewogICAgICAgICAvLyBJZiAiYXJndW1lbnRzIiBp
cyBvdmVycmlkZGVuIGJ5IGEgZnVuY3Rpb24gb3IgZGVzdHJ1Y3R1cmluZyBwYXJhbWV0ZXIgbmFt
ZSwgdGhlbiBpdCdzCiAgICAgICAgIC8vIE9LIGZvciB1cyB0byBjYWxsIGNyZWF0ZVZhcmlhYmxl
KCkgYmVjYXVzZSBpdCB3b24ndCBjaGFuZ2UgYW55dGhpbmcuIEl0J3MgYWxzbyBPSyBmb3IKQEAg
LTUwNCw4ICs0OTIsMTAgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZN
JgogICAgICAgICAgICAgfQogICAgICAgICB9CiAKKyAgICAgICAgYm9vbCBzaG91bGRDcmVhdGVB
cmd1bWVuc1ZhcmlhYmxlID0gIWhhdmVQYXJhbWV0ZXJOYW1lZEFyZ3VtZW50cyAmJiAhbV9jb2Rl
QmxvY2stPmlzQXJyb3dGdW5jdGlvbigpOworICAgICAgICBzaG91bGRDcmVhdGVBcmd1bWVudHNW
YXJpYWJsZUluUGFyYW1ldGVyU2NvcGUgPSBzaG91bGRDcmVhdGVBcmd1bWVuc1ZhcmlhYmxlICYm
ICFpc1NpbXBsZVBhcmFtZXRlckxpc3Q7CiAgICAgICAgIC8vIERvIG5vdCBjcmVhdGUgYXJndW1l
bnRzIHZhcmlhYmxlIGluIGNhc2Ugb2YgQXJyb3cgZnVuY3Rpb24uIFZhbHVlIHdpbGwgYmUgbG9h
ZGVkIGZyb20gcGFyZW50IHNjb3BlCi0gICAgICAgIGlmICghaGF2ZVBhcmFtZXRlck5hbWVkQXJn
dW1lbnRzICYmICFtX2NvZGVCbG9jay0+aXNBcnJvd0Z1bmN0aW9uKCkpIHsKKyAgICAgICAgaWYg
KHNob3VsZENyZWF0ZUFyZ3VtZW5zVmFyaWFibGUgJiYgIXNob3VsZENyZWF0ZUFyZ3VtZW50c1Zh
cmlhYmxlSW5QYXJhbWV0ZXJTY29wZSkgewogICAgICAgICAgICAgY3JlYXRlVmFyaWFibGUoCiAg
ICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cywgdmFyS2luZChwcm9wZXJ0
eU5hbWVzKCkuYXJndW1lbnRzLmltcGwoKSksIGZ1bmN0aW9uU3ltYm9sVGFibGUpOwogCkBAIC01
MTMsNiArNTAzLDIyIEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYK
ICAgICAgICAgfQogICAgIH0KIAorICAgIGZvciAoRnVuY3Rpb25NZXRhZGF0YU5vZGUqIGZ1bmN0
aW9uIDogZnVuY3Rpb25Ob2RlLT5mdW5jdGlvblN0YWNrKCkpIHsKKyAgICAgICAgY29uc3QgSWRl
bnRpZmllciYgaWRlbnQgPSBmdW5jdGlvbi0+aWRlbnQoKTsKKyAgICAgICAgY3JlYXRlVmFyaWFi
bGUoaWRlbnQsIHZhcktpbmQoaWRlbnQuaW1wbCgpKSwgZnVuY3Rpb25TeW1ib2xUYWJsZSk7Cisg
ICAgICAgIG1fZnVuY3Rpb25zVG9Jbml0aWFsaXplLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihmdW5j
dGlvbiwgTm9ybWFsRnVuY3Rpb25WYXJpYWJsZSkpOworICAgIH0KKyAgICBmb3IgKGF1dG8mIGVu
dHJ5IDogZnVuY3Rpb25Ob2RlLT52YXJEZWNsYXJhdGlvbnMoKSkgeworICAgICAgICBBU1NFUlQo
IWVudHJ5LnZhbHVlLmlzTGV0KCkgJiYgIWVudHJ5LnZhbHVlLmlzQ29uc3QoKSk7CisgICAgICAg
IGlmICghZW50cnkudmFsdWUuaXNWYXIoKSkgLy8gVGhpcyBpcyBlaXRoZXIgYSBwYXJhbWV0ZXIg
b3IgY2FsbGVlLgorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIC8vIFZhcmlhYmxlcyBu
YW1lZCAiYXJndW1lbnRzIiBhcmUgbmV2ZXIgY29uc3QuCisgICAgICAgIGlmIChzaG91bGRDcmVh
dGVBcmd1bWVudHNWYXJpYWJsZUluUGFyYW1ldGVyU2NvcGUgJiYgZW50cnkua2V5LmdldCgpID09
IHByb3BlcnR5TmFtZXMoKS5hcmd1bWVudHMuaW1wbCgpKQorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIGNyZWF0ZVZhcmlhYmxlKElkZW50aWZpZXI6OmZyb21VaWQobV92bSwgZW50cnku
a2V5LmdldCgpKSwgdmFyS2luZChlbnRyeS5rZXkuZ2V0KCkpLCBmdW5jdGlvblN5bWJvbFRhYmxl
LCBJZ25vcmVFeGlzdGluZyk7CisgICAgfQorCisKICAgICBtX25ld1RhcmdldFJlZ2lzdGVyID0g
YWRkVmFyKCk7CiAgICAgc3dpdGNoIChwYXJzZU1vZGUpIHsKICAgICBjYXNlIFNvdXJjZVBhcnNl
TW9kZTo6R2VuZXJhdG9yV3JhcHBlckZ1bmN0aW9uTW9kZTogewpAQCAtNTY5LDEwICs1NzUsMTcg
QEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogICAgICAgICAgICAg
ZW1pdExvYWROZXdUYXJnZXRGcm9tQXJyb3dGdW5jdGlvbkxleGljYWxFbnZpcm9ubWVudCgpOwog
ICAgIH0KIAorICAgIGlmIChuZWVkc1RvVXBkYXRlQXJyb3dGdW5jdGlvbkNvbnRleHQoKSAmJiAh
Y29kZUJsb2NrLT5pc0Fycm93RnVuY3Rpb24oKSkgeworICAgICAgICBpbml0aWFsaXplQXJyb3dG
dW5jdGlvbkNvbnRleHRTY29wZUlmTmVlZGVkKCk7CisgICAgICAgIGVtaXRQdXRUaGlzVG9BcnJv
d0Z1bmN0aW9uQ29udGV4dFNjb3BlKCk7CisgICAgICAgIGVtaXRQdXROZXdUYXJnZXRUb0Fycm93
RnVuY3Rpb25Db250ZXh0U2NvcGUoKTsKKyAgICAgICAgZW1pdFB1dERlcml2ZWRDb25zdHJ1Y3Rv
clRvQXJyb3dGdW5jdGlvbkNvbnRleHRTY29wZSgpOworICAgIH0KKwogICAgIC8vIEFsbCAiYWRk
VmFyKCkicyBuZWVkcyB0byBoYXBwZW4gYmVmb3JlICJpbml0aWFsaXplRGVmYXVsdFBhcmFtZXRl
clZhbHVlc0FuZFNldHVwRnVuY3Rpb25TY29wZVN0YWNrKCkiIGlzIGNhbGxlZAogICAgIC8vIGJl
Y2F1c2UgYSBmdW5jdGlvbidzIGRlZmF1bHQgcGFyYW1ldGVyIEV4cHJlc3Npb25Ob2RlcyB3aWxs
IHVzZSB0ZW1wb3JhcnkgcmVnaXN0ZXJzLgogICAgIHB1c2hURFpWYXJpYWJsZXMoKnBhcmVudFNj
b3BlVERaVmFyaWFibGVzLCBURFpDaGVja09wdGltaXphdGlvbjo6RG9Ob3RPcHRpbWl6ZSk7Ci0g
ICAgaW5pdGlhbGl6ZURlZmF1bHRQYXJhbWV0ZXJWYWx1ZXNBbmRTZXR1cEZ1bmN0aW9uU2NvcGVT
dGFjayhwYXJhbWV0ZXJzLCBpc1NpbXBsZVBhcmFtZXRlckxpc3QsIGZ1bmN0aW9uTm9kZSwgZnVu
Y3Rpb25TeW1ib2xUYWJsZSwgc3ltYm9sVGFibGVDb25zdGFudEluZGV4LCBjYXB0dXJlcyk7Cisg
ICAgaW5pdGlhbGl6ZURlZmF1bHRQYXJhbWV0ZXJWYWx1ZXNBbmRTZXR1cEZ1bmN0aW9uU2NvcGVT
dGFjayhwYXJhbWV0ZXJzLCBpc1NpbXBsZVBhcmFtZXRlckxpc3QsIGZ1bmN0aW9uTm9kZSwgZnVu
Y3Rpb25TeW1ib2xUYWJsZSwgc3ltYm9sVGFibGVDb25zdGFudEluZGV4LCBjYXB0dXJlcywgc2hv
dWxkQ3JlYXRlQXJndW1lbnRzVmFyaWFibGVJblBhcmFtZXRlclNjb3BlKTsKICAgICAKICAgICAv
LyBJZiB3ZSBkb24ndCBoYXZlICBkZWZhdWx0IHBhcmFtZXRlciBleHByZXNzaW9uLCB0aGVuIGxv
YWRpbmcgfHRoaXN8IGluc2lkZSBhbiBhcnJvdyBmdW5jdGlvbiBtdXN0IGJlIGRvbmUKICAgICAv
LyBhZnRlciBpbml0aWFsaXplRGVmYXVsdFBhcmFtZXRlclZhbHVlc0FuZFNldHVwRnVuY3Rpb25T
Y29wZVN0YWNrKCkgYmVjYXVzZSB0aGF0IGZ1bmN0aW9uIHNldHMgdXAgdGhlCkBAIC01ODUsMTMg
KzU5OCw2IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYKICAgICAg
ICAgICAgIGVtaXRMb2FkTmV3VGFyZ2V0RnJvbUFycm93RnVuY3Rpb25MZXhpY2FsRW52aXJvbm1l
bnQoKTsKICAgICB9CiAgICAgCi0gICAgaWYgKG5lZWRzVG9VcGRhdGVBcnJvd0Z1bmN0aW9uQ29u
dGV4dCgpICYmICFjb2RlQmxvY2stPmlzQXJyb3dGdW5jdGlvbigpKSB7Ci0gICAgICAgIGluaXRp
YWxpemVBcnJvd0Z1bmN0aW9uQ29udGV4dFNjb3BlSWZOZWVkZWQoZnVuY3Rpb25TeW1ib2xUYWJs
ZSk7Ci0gICAgICAgIGVtaXRQdXRUaGlzVG9BcnJvd0Z1bmN0aW9uQ29udGV4dFNjb3BlKCk7Ci0g
ICAgICAgIGVtaXRQdXROZXdUYXJnZXRUb0Fycm93RnVuY3Rpb25Db250ZXh0U2NvcGUoKTsKLSAg
ICAgICAgZW1pdFB1dERlcml2ZWRDb25zdHJ1Y3RvclRvQXJyb3dGdW5jdGlvbkNvbnRleHRTY29w
ZSgpOwotICAgIH0KLQogICAgIGJvb2wgc2hvdWxkSW5pdGlhbGl6ZUJsb2NrU2NvcGVkRnVuY3Rp
b25zID0gZmFsc2U7IC8vIFdlIGdlbmVyYXRlIHRvcC1sZXZlbCBmdW5jdGlvbiBkZWNsYXJhdGlv
bnMgaW4gOjpnZW5lcmF0ZSgpLgogICAgIHB1c2hMZXhpY2FsU2NvcGUobV9zY29wZU5vZGUsIFRE
WkNoZWNrT3B0aW1pemF0aW9uOjpPcHRpbWl6ZSwgTmVzdGVkU2NvcGVUeXBlOjpJc05vdE5lc3Rl
ZCwgbnVsbHB0ciwgc2hvdWxkSW5pdGlhbGl6ZUJsb2NrU2NvcGVkRnVuY3Rpb25zKTsKIH0KQEAg
LTgwNSw5ICs4MTEsMTAgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6On5CeXRlY29kZUdlbmVyYXRvcigp
CiAKIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmluaXRpYWxpemVEZWZhdWx0UGFyYW1ldGVyVmFs
dWVzQW5kU2V0dXBGdW5jdGlvblNjb3BlU3RhY2soCiAgICAgRnVuY3Rpb25QYXJhbWV0ZXJzJiBw
YXJhbWV0ZXJzLCBib29sIGlzU2ltcGxlUGFyYW1ldGVyTGlzdCwgRnVuY3Rpb25Ob2RlKiBmdW5j
dGlvbk5vZGUsIFN5bWJvbFRhYmxlKiBmdW5jdGlvblN5bWJvbFRhYmxlLCAKLSAgICBpbnQgc3lt
Ym9sVGFibGVDb25zdGFudEluZGV4LCBjb25zdCBzdGQ6OmZ1bmN0aW9uPGJvb2wgKFVuaXF1ZWRT
dHJpbmdJbXBsKik+JiBjYXB0dXJlcykKKyAgICBpbnQgc3ltYm9sVGFibGVDb25zdGFudEluZGV4
LCBjb25zdCBzdGQ6OmZ1bmN0aW9uPGJvb2wgKFVuaXF1ZWRTdHJpbmdJbXBsKik+JiBjYXB0dXJl
cywgYm9vbCBzaG91bGRDcmVhdGVBcmd1bWVudHNWYXJpYWJsZUluUGFyYW1ldGVyU2NvcGUpCiB7
CiAgICAgVmVjdG9yPHN0ZDo6cGFpcjxJZGVudGlmaWVyLCBSZWZQdHI8UmVnaXN0ZXJJRD4+PiB2
YWx1ZXNUb01vdmVJbnRvVmFyczsKKyAgICBSRUxFQVNFX0FTU0VSVCghKGlzU2ltcGxlUGFyYW1l
dGVyTGlzdCAmJiBzaG91bGRDcmVhdGVBcmd1bWVudHNWYXJpYWJsZUluUGFyYW1ldGVyU2NvcGUp
KTsKICAgICBpZiAoIWlzU2ltcGxlUGFyYW1ldGVyTGlzdCkgewogICAgICAgICAvLyBSZWZlciB0
byB0aGUgRVM2IHNwZWMgc2VjdGlvbiA5LjIuMTI6IGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlv
bmFsLm9yZy9lY21hLTI2Mi82LjAvaW5kZXguaHRtbCNzZWMtZnVuY3Rpb25kZWNsYXJhdGlvbmlu
c3RhbnRpYXRpb24KICAgICAgICAgLy8gVGhpcyBpbXBsZW1lbnRzIHN0ZXAgMjEuCkBAIC04MTUs
NiArODIyLDggQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6aW5pdGlhbGl6ZURlZmF1bAogICAg
ICAgICBWZWN0b3I8SWRlbnRpZmllcj4gYWxsUGFyYW1ldGVyTmFtZXM7IAogICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgcGFyYW1ldGVycy5zaXplKCk7IGkrKykKICAgICAgICAgICAg
IHBhcmFtZXRlcnMuYXQoaSkuZmlyc3QtPmNvbGxlY3RCb3VuZElkZW50aWZpZXJzKGFsbFBhcmFt
ZXRlck5hbWVzKTsKKyAgICAgICAgaWYgKHNob3VsZENyZWF0ZUFyZ3VtZW50c1ZhcmlhYmxlSW5Q
YXJhbWV0ZXJTY29wZSkKKyAgICAgICAgICAgIGFsbFBhcmFtZXRlck5hbWVzLmFwcGVuZChwcm9w
ZXJ0eU5hbWVzKCkuYXJndW1lbnRzKTsKICAgICAgICAgSWRlbnRpZmllclNldCBwYXJhbWV0ZXJT
ZXQ7CiAgICAgICAgIGZvciAoYXV0byYgaWRlbnQgOiBhbGxQYXJhbWV0ZXJOYW1lcykgewogICAg
ICAgICAgICAgcGFyYW1ldGVyU2V0LmFkZChpZGVudC5pbXBsKCkpOwpAQCAtODIzLDEwICs4MzIs
MTUgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6aW5pdGlhbGl6ZURlZmF1bAogICAgICAgICAg
ICAgaWYgKGNhcHR1cmVzKGlkZW50LmltcGwoKSkpCiAgICAgICAgICAgICAgICAgYWRkUmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZS5zZXRJc0NhcHR1cmVkKCk7CiAgICAgICAgIH0KLSAgICAgICAgCiAg
ICAgICAgIC8vIFRoaXMgaW1wbGVtZW50cyBzdGVwIDI1IG9mIHNlY3Rpb24gOS4yLjEyLgogICAg
ICAgICBwdXNoTGV4aWNhbFNjb3BlSW50ZXJuYWwoZW52aXJvbm1lbnQsIFREWkNoZWNrT3B0aW1p
emF0aW9uOjpPcHRpbWl6ZSwgTmVzdGVkU2NvcGVUeXBlOjpJc05vdE5lc3RlZCwgbnVsbHB0ciwg
VERaUmVxdWlyZW1lbnQ6OlVuZGVyVERaLCBTY29wZVR5cGU6OkxldENvbnN0U2NvcGUsIFNjb3Bl
UmVnaXN0ZXJUeXBlOjpCbG9jayk7CiAKKyAgICAgICAgaWYgKHNob3VsZENyZWF0ZUFyZ3VtZW50
c1ZhcmlhYmxlSW5QYXJhbWV0ZXJTY29wZSkgeworICAgICAgICAgICAgVmFyaWFibGUgYXJndW1l
bnRzVmFyaWFibGUgPSB2YXJpYWJsZShwcm9wZXJ0eU5hbWVzKCkuYXJndW1lbnRzKTsgCisgICAg
ICAgICAgICBpbml0aWFsaXplVmFyaWFibGUoYXJndW1lbnRzVmFyaWFibGUsIG1fYXJndW1lbnRz
UmVnaXN0ZXIpOworICAgICAgICAgICAgbGlmdFREWkNoZWNrSWZQb3NzaWJsZShhcmd1bWVudHNW
YXJpYWJsZSk7CisgICAgICAgIH0KKwogICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdGVtcCA9
IG5ld1RlbXBvcmFyeSgpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGFyYW1l
dGVycy5zaXplKCk7IGkrKykgewogICAgICAgICAgICAgc3RkOjpwYWlyPERlc3RydWN0dXJpbmdQ
YXR0ZXJuTm9kZSosIEV4cHJlc3Npb25Ob2RlKj4gcGFyYW1ldGVyID0gcGFyYW1ldGVycy5hdChp
KTsKQEAgLTg2NywxNiArODgxLDEwIEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmluaXRpYWxp
emVEZWZhdWwKICAgICAgICAgLy8gcmVjb3JkIGZvciBwYXJhbWV0ZXJzIGFuZCAidmFyInMuIFRo
ZSAidmFyIiBlbnZpcm9ubWVudCByZWNvcmQgbXVzdCBoYXZlIHRoZQogICAgICAgICAvLyBwYXJh
bWV0ZXIgZW52aXJvbm1lbnQgcmVjb3JkIGFzIGl0cyBwYXJlbnQuCiAgICAgICAgIC8vIFNlZSBz
dGVwIDI4IG9mIHNlY3Rpb24gOS4yLjEyLgotICAgICAgICBpZiAobV9sZXhpY2FsRW52aXJvbm1l
bnRSZWdpc3RlcikKLSAgICAgICAgICAgIGluaXRpYWxpemVWYXJMZXhpY2FsRW52aXJvbm1lbnQo
c3ltYm9sVGFibGVDb25zdGFudEluZGV4KTsKKyAgICAgICAgYm9vbCBoYXNDYXB0dXJlZFZhcmlh
YmxlcyA9ICEhbV9sZXhpY2FsRW52aXJvbm1lbnRSZWdpc3RlcjsgCisgICAgICAgIGluaXRpYWxp
emVWYXJMZXhpY2FsRW52aXJvbm1lbnQoc3ltYm9sVGFibGVDb25zdGFudEluZGV4LCBmdW5jdGlv
blN5bWJvbFRhYmxlLCBoYXNDYXB0dXJlZFZhcmlhYmxlcyk7CiAgICAgfQogCi0gICAgaWYgKG1f
bGV4aWNhbEVudmlyb25tZW50UmVnaXN0ZXIpCi0gICAgICAgIHB1c2hTY29wZWRDb250cm9sRmxv
d0NvbnRleHQoKTsKLSAgICBtX3N5bWJvbFRhYmxlU3RhY2suYXBwZW5kKFN5bWJvbFRhYmxlU3Rh
Y2tFbnRyeXsgZnVuY3Rpb25TeW1ib2xUYWJsZSwgbV9sZXhpY2FsRW52aXJvbm1lbnRSZWdpc3Rl
ciwgZmFsc2UsIHN5bWJvbFRhYmxlQ29uc3RhbnRJbmRleCB9KTsKLQotICAgIG1fdmFyU2NvcGVT
eW1ib2xUYWJsZUluZGV4ID0gbV9zeW1ib2xUYWJsZVN0YWNrLnNpemUoKSAtIDE7Ci0KICAgICAv
LyBUaGlzIGNvbXBsZXRlcyBzdGVwIDI4IG9mIHNlY3Rpb24gOS4yLjEyLgogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCB2YWx1ZXNUb01vdmVJbnRvVmFycy5zaXplKCk7IGkrKykgewogICAg
ICAgICBBU1NFUlQoIWlzU2ltcGxlUGFyYW1ldGVyTGlzdCk7CkBAIC04ODYsNDMgKzg5NCwxNiBA
QCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjppbml0aWFsaXplRGVmYXVsCiAgICAgfQogfQogCi12
b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjppbml0aWFsaXplQXJyb3dGdW5jdGlvbkNvbnRleHRTY29w
ZUlmTmVlZGVkKFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSkKK3ZvaWQgQnl0ZWNvZGVHZW5lcmF0
b3I6OmluaXRpYWxpemVBcnJvd0Z1bmN0aW9uQ29udGV4dFNjb3BlSWZOZWVkZWQoKQogewotICAg
IGlmIChtX2Fycm93RnVuY3Rpb25Db250ZXh0TGV4aWNhbEVudmlyb25tZW50UmVnaXN0ZXIgIT0g
bnVsbHB0cikKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGlmIChtX2xleGljYWxFbnZpcm9u
bWVudFJlZ2lzdGVyICE9IG51bGxwdHIpIHsKLSAgICAgICAgbV9hcnJvd0Z1bmN0aW9uQ29udGV4
dExleGljYWxFbnZpcm9ubWVudFJlZ2lzdGVyID0gbV9sZXhpY2FsRW52aXJvbm1lbnRSZWdpc3Rl
cjsKLSAgICAgICAgCi0gICAgICAgIGlmICghbV9jb2RlQmxvY2stPmlzQXJyb3dGdW5jdGlvbigp
KSB7Ci0gICAgICAgICAgICBTY29wZU9mZnNldCBvZmZzZXQ7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKENvbmN1cnJlbnRKSVRMb2NrZXI6Ok5v
TG9ja2luZ05lY2Vzc2FyeSk7Ci0gICAgICAgICAgICBpZiAoaXNUaGlzVXNlZEluSW5uZXJBcnJv
d0Z1bmN0aW9uKCkpIHsKLSAgICAgICAgICAgICAgICBvZmZzZXQgPSBzeW1ib2xUYWJsZS0+dGFr
ZU5leHRTY29wZU9mZnNldChsb2NrZXIpOwotICAgICAgICAgICAgICAgIHN5bWJvbFRhYmxlLT5z
ZXQobG9ja2VyLCBwcm9wZXJ0eU5hbWVzKCkudGhpc0lkZW50aWZpZXIuaW1wbCgpLCBTeW1ib2xU
YWJsZUVudHJ5KFZhck9mZnNldChvZmZzZXQpKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIGlmIChtX2NvZGVUeXBlID09IEZ1bmN0aW9uQ29kZSAmJiBpc05ld1RhcmdldFVzZWRJbklu
bmVyQXJyb3dGdW5jdGlvbigpKSB7Ci0gICAgICAgICAgICAgICAgb2Zmc2V0ID0gc3ltYm9sVGFi
bGUtPnRha2VOZXh0U2NvcGVPZmZzZXQoKTsKLSAgICAgICAgICAgICAgICBzeW1ib2xUYWJsZS0+
c2V0KGxvY2tlciwgcHJvcGVydHlOYW1lcygpLm5ld1RhcmdldExvY2FsUHJpdmF0ZU5hbWUuaW1w
bCgpLCBTeW1ib2xUYWJsZUVudHJ5KFZhck9mZnNldChvZmZzZXQpKSk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChpc0NvbnN0cnVjdG9yKCkgJiYgY29uc3Ry
dWN0b3JLaW5kKCkgPT0gQ29uc3RydWN0b3JLaW5kOjpEZXJpdmVkICYmIGlzU3VwZXJVc2VkSW5J
bm5lckFycm93RnVuY3Rpb24oKSkgewotICAgICAgICAgICAgICAgIG9mZnNldCA9IHN5bWJvbFRh
YmxlLT50YWtlTmV4dFNjb3BlT2Zmc2V0KGxvY2tlcik7Ci0gICAgICAgICAgICAgICAgc3ltYm9s
VGFibGUtPnNldChsb2NrZXIsIHByb3BlcnR5TmFtZXMoKS5kZXJpdmVkQ29uc3RydWN0b3JQcml2
YXRlTmFtZS5pbXBsKCksIFN5bWJvbFRhYmxlRW50cnkoVmFyT2Zmc2V0KG9mZnNldCkpKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgQVNT
RVJUKCFtX2Fycm93RnVuY3Rpb25Db250ZXh0TGV4aWNhbEVudmlyb25tZW50UmVnaXN0ZXIpOwog
CiAgICAgVmFyaWFibGVFbnZpcm9ubWVudCBlbnZpcm9ubWVudDsKIAogICAgIGlmIChpc1RoaXNV
c2VkSW5Jbm5lckFycm93RnVuY3Rpb24oKSkgewogICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IGVu
dmlyb25tZW50LmFkZChwcm9wZXJ0eU5hbWVzKCkudGhpc0lkZW50aWZpZXIpOwogICAgICAgICBh
ZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLnNldElzQ2FwdHVyZWQoKTsKLSAgICAgICAgYWRkUmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZS5zZXRJc0NvbnN0KCk7CisgICAgICAgIGFkZFJlc3VsdC5pdGVy
YXRvci0+dmFsdWUuc2V0SXNMZXQoKTsKICAgICB9CiAgICAgCiAgICAgaWYgKG1fY29kZVR5cGUg
PT0gRnVuY3Rpb25Db2RlICYmIGlzTmV3VGFyZ2V0VXNlZEluSW5uZXJBcnJvd0Z1bmN0aW9uKCkp
IHsKQEAgLTk3MiwxOCArOTUzLDI1IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmluaXRpYWxp
emVQYXJhbWUKICAgICB9CiB9CiAKLXZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmluaXRpYWxpemVW
YXJMZXhpY2FsRW52aXJvbm1lbnQoaW50IHN5bWJvbFRhYmxlQ29uc3RhbnRJbmRleCkKK3ZvaWQg
Qnl0ZWNvZGVHZW5lcmF0b3I6OmluaXRpYWxpemVWYXJMZXhpY2FsRW52aXJvbm1lbnQoaW50IHN5
bWJvbFRhYmxlQ29uc3RhbnRJbmRleCwgU3ltYm9sVGFibGUqIGZ1bmN0aW9uU3ltYm9sVGFibGUs
IGJvb2wgaGFzQ2FwdHVyZWRWYXJpYWJsZXMpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQobV9sZXhp
Y2FsRW52aXJvbm1lbnRSZWdpc3Rlcik7Ci0gICAgZW1pdE9wY29kZShvcF9jcmVhdGVfbGV4aWNh
bF9lbnZpcm9ubWVudCk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1fbGV4aWNhbEVudmly
b25tZW50UmVnaXN0ZXItPmluZGV4KCkpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzY29w
ZVJlZ2lzdGVyKCktPmluZGV4KCkpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzeW1ib2xU
YWJsZUNvbnN0YW50SW5kZXgpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25zdGFu
dFZhbHVlKGpzVW5kZWZpbmVkKCkpLT5pbmRleCgpKTsKKyAgICBpZiAoaGFzQ2FwdHVyZWRWYXJp
YWJsZXMpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9sZXhpY2FsRW52aXJvbm1lbnRSZWdp
c3Rlcik7CisgICAgICAgIGVtaXRPcGNvZGUob3BfY3JlYXRlX2xleGljYWxfZW52aXJvbm1lbnQp
OworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobV9sZXhpY2FsRW52aXJvbm1lbnRSZWdp
c3Rlci0+aW5kZXgoKSk7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzY29wZVJlZ2lz
dGVyKCktPmluZGV4KCkpOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc3ltYm9sVGFi
bGVDb25zdGFudEluZGV4KTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFkZENvbnN0
YW50VmFsdWUoanNVbmRlZmluZWQoKSktPmluZGV4KCkpOwogCi0gICAgZW1pdE9wY29kZShvcF9t
b3YpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzY29wZVJlZ2lzdGVyKCktPmluZGV4KCkp
OwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtX2xleGljYWxFbnZpcm9ubWVudFJlZ2lzdGVy
LT5pbmRleCgpKTsKKyAgICAgICAgZW1pdE9wY29kZShvcF9tb3YpOworICAgICAgICBpbnN0cnVj
dGlvbnMoKS5hcHBlbmQoc2NvcGVSZWdpc3RlcigpLT5pbmRleCgpKTsKKyAgICAgICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKG1fbGV4aWNhbEVudmlyb25tZW50UmVnaXN0ZXItPmluZGV4KCkpOwor
CisgICAgICAgIHB1c2hTY29wZWRDb250cm9sRmxvd0NvbnRleHQoKTsKKyAgICB9CisgICAgYm9v
bCBpc1dpdGhTY29wZSA9IGZhbHNlOworICAgIG1fc3ltYm9sVGFibGVTdGFjay5hcHBlbmQoU3lt
Ym9sVGFibGVTdGFja0VudHJ5eyBmdW5jdGlvblN5bWJvbFRhYmxlLCBtX2xleGljYWxFbnZpcm9u
bWVudFJlZ2lzdGVyLCBpc1dpdGhTY29wZSwgc3ltYm9sVGFibGVDb25zdGFudEluZGV4IH0pOwor
ICAgIG1fdmFyU2NvcGVTeW1ib2xUYWJsZUluZGV4ID0gbV9zeW1ib2xUYWJsZVN0YWNrLnNpemUo
KSAtIDE7CiB9CiAKIFVuaXF1ZWRTdHJpbmdJbXBsKiBCeXRlY29kZUdlbmVyYXRvcjo6dmlzaWJs
ZU5hbWVGb3JQYXJhbWV0ZXIoRGVzdHJ1Y3R1cmluZ1BhdHRlcm5Ob2RlKiBwYXR0ZXJuKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuaAkocmV2aXNpb24gMjAxMDcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC04NTYs
OSArODU2LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdExvZ1NoYWRvd0No
aWNrZW5UYWlsSWZOZWNlc3NhcnkoKTsKIAogICAgICAgICB2b2lkIGluaXRpYWxpemVQYXJhbWV0
ZXJzKEZ1bmN0aW9uUGFyYW1ldGVycyYpOwotICAgICAgICB2b2lkIGluaXRpYWxpemVWYXJMZXhp
Y2FsRW52aXJvbm1lbnQoaW50IHN5bWJvbFRhYmxlQ29uc3RhbnRJbmRleCk7Ci0gICAgICAgIHZv
aWQgaW5pdGlhbGl6ZURlZmF1bHRQYXJhbWV0ZXJWYWx1ZXNBbmRTZXR1cEZ1bmN0aW9uU2NvcGVT
dGFjayhGdW5jdGlvblBhcmFtZXRlcnMmLCBib29sIGlzU2ltcGxlUGFyYW1ldGVyTGlzdCwgRnVu
Y3Rpb25Ob2RlKiwgU3ltYm9sVGFibGUqLCBpbnQgc3ltYm9sVGFibGVDb25zdGFudEluZGV4LCBj
b25zdCBzdGQ6OmZ1bmN0aW9uPGJvb2wgKFVuaXF1ZWRTdHJpbmdJbXBsKik+JiBjYXB0dXJlcyk7
Ci0gICAgICAgIHZvaWQgaW5pdGlhbGl6ZUFycm93RnVuY3Rpb25Db250ZXh0U2NvcGVJZk5lZWRl
ZChTeW1ib2xUYWJsZSogPSBudWxscHRyKTsKKyAgICAgICAgdm9pZCBpbml0aWFsaXplVmFyTGV4
aWNhbEVudmlyb25tZW50KGludCBzeW1ib2xUYWJsZUNvbnN0YW50SW5kZXgsIFN5bWJvbFRhYmxl
KiBmdW5jdGlvblN5bWJvbFRhYmxlLCBib29sIGhhc0NhcHR1cmVkVmFyaWFibGVzKTsKKyAgICAg
ICAgdm9pZCBpbml0aWFsaXplRGVmYXVsdFBhcmFtZXRlclZhbHVlc0FuZFNldHVwRnVuY3Rpb25T
Y29wZVN0YWNrKEZ1bmN0aW9uUGFyYW1ldGVycyYsIGJvb2wgaXNTaW1wbGVQYXJhbWV0ZXJMaXN0
LCBGdW5jdGlvbk5vZGUqLCBTeW1ib2xUYWJsZSosIGludCBzeW1ib2xUYWJsZUNvbnN0YW50SW5k
ZXgsIGNvbnN0IHN0ZDo6ZnVuY3Rpb248Ym9vbCAoVW5pcXVlZFN0cmluZ0ltcGwqKT4mIGNhcHR1
cmVzLCBib29sIHNob3VsZENyZWF0ZUFyZ3VtZW50c1ZhcmlhYmxlSW5QYXJhbWV0ZXJTY29wZSk7
CisgICAgICAgIHZvaWQgaW5pdGlhbGl6ZUFycm93RnVuY3Rpb25Db250ZXh0U2NvcGVJZk5lZWRl
ZCgpOwogCiAgICAgcHVibGljOgogICAgICAgICBKU1N0cmluZyogYWRkU3RyaW5nQ29uc3RhbnQo
Y29uc3QgSWRlbnRpZmllciYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0
cmVzcy9hcnJvdy1mdW5jdGlvbnMtYXMtZGVmYXVsdC1wYXJhbWV0ZXItdmFsdWVzLmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvYXJyb3ctZnVuY3Rp
b25zLWFzLWRlZmF1bHQtcGFyYW1ldGVyLXZhbHVlcy5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvYXJyb3ctZnVuY3Rpb25zLWFzLWRlZmF1bHQt
cGFyYW1ldGVyLXZhbHVlcy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyNiBAQAorZnVu
Y3Rpb24gYXNzZXJ0KGIpIHsKKyAgICBpZiAoIWIpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigi
QmFkIGFzc2VydGlvbiIpCit9CitmdW5jdGlvbiB0ZXN0KGYsIG4gPSAxMDAwKSB7CisgICAgZm9y
IChsZXQgaSA9IDA7IGkgPCBuOyBpKyspCisgICAgICAgIGYoKTsKK30KKwordGVzdChmdW5jdGlv
bigpIHsKKyAgICBmdW5jdGlvbiBmb28oeCA9ICgpPT50aGlzKSB7CisgICAgICAgIHJldHVybiB4
KCk7CisgICAgfQorICAgIGxldCBvID0ge307CisgICAgYXNzZXJ0KGZvby5jYWxsKG8pID09PSBv
KTsKK30pCisKK3Rlc3QoZnVuY3Rpb24oKSB7CisgICAgZnVuY3Rpb24gZm9vKHggPSAoKT0+YXJn
dW1lbnRzKSB7CisgICAgICAgIGFzc2VydCh4KCkgPT09IGFyZ3VtZW50cyk7CisgICAgfQorICAg
IGZvbygpOworfSkKKwordGVzdChmdW5jdGlvbigpIHsKKyAgICBmdW5jdGlvbiBmb28oe3ggPSAo
KT0+YXJndW1lbnRzfSkgeworICAgICAgICBhc3NlcnQoeCgpID09PSBhcmd1bWVudHMpOworICAg
IH0KKyAgICBmb28oe3g6dW5kZWZpbmVkfSk7Cit9KQorCit0ZXN0KGZ1bmN0aW9uKCkgeworICAg
IGZ1bmN0aW9uIGZvbyh4ID0gKCk9PmFyZ3VtZW50cykgeworICAgICAgICBsZXQgYSA9IHgoKTsK
KyAgICAgICAgYXNzZXJ0KGEubGVuZ3RoID09PSAzKTsKKyAgICAgICAgYXNzZXJ0KGFbMF0gPT09
IHVuZGVmaW5lZCk7CisgICAgICAgIGFzc2VydChhWzFdID09PSAyMCk7CisgICAgICAgIGFzc2Vy
dChhWzJdID09PSA0MCk7CisgICAgfQorICAgIGZvbyh1bmRlZmluZWQsIDIwLCA0MCk7Cit9KQor
Cit0ZXN0KGZ1bmN0aW9uKCkgeworICAgIGZ1bmN0aW9uIGZvbyh4ID0gKCk9Pm5ldy50YXJnZXQp
IHsKKyAgICAgICAgYXNzZXJ0KHgoKSA9PT0gZm9vKTsKKyAgICB9CisgICAgbmV3IGZvbyh1bmRl
ZmluZWQpOworfSkKKwordGVzdChmdW5jdGlvbigpIHsKKyAgICBmdW5jdGlvbiBmb28oe3ggPSAo
KT0+bmV3LnRhcmdldH0pIHsKKyAgICAgICAgYXNzZXJ0KHgoKSA9PT0gZm9vKTsKKyAgICB9Cisg
ICAgbmV3IGZvbyh7fSk7Cit9KQorCit0ZXN0KGZ1bmN0aW9uKCkgeworICAgIGZ1bmN0aW9uIGZv
byh4ID0gKCk9PmFyZ3VtZW50cykgeworICAgICAgICB2YXIgYXJndW1lbnRzOworICAgICAgICBh
c3NlcnQoeCgpID09PSBhcmd1bWVudHMpOworICAgIH0KKyAgICBmb28odW5kZWZpbmVkKTsKK30p
OworCit0ZXN0KGZ1bmN0aW9uKCkgeworICAgIGZ1bmN0aW9uIGZvbyh4ID0gKCk9PmFyZ3VtZW50
cykgeworICAgICAgICB2YXIgYXJndW1lbnRzID0gMjU7CisgICAgICAgIGFzc2VydCh4KCkgPT09
IGFyZ3VtZW50cyk7CisgICAgfQorICAgIGZvbyh1bmRlZmluZWQpOworfSk7CisKK3Rlc3QoZnVu
Y3Rpb24oKSB7CisgICAgZnVuY3Rpb24gZm9vKHggPSAoeSA9ICgpPT5hcmd1bWVudHMpPT55KCkp
IHsKKyAgICAgICAgYXNzZXJ0KHgoKSA9PT0gYXJndW1lbnRzKTsKKyAgICB9CisgICAgZm9vKHVu
ZGVmaW5lZCk7Cit9KTsKKwordGVzdChmdW5jdGlvbigpIHsKKyAgICBmdW5jdGlvbiBmb28oe3gg
PSAoeSA9ICgpPT5hcmd1bWVudHMpPT55KCl9KSB7CisgICAgICAgIGFzc2VydCh4KCkgPT09IGFy
Z3VtZW50cyk7CisgICAgfQorICAgIGZvbyh7fSk7Cit9KTsKKwordGVzdChmdW5jdGlvbigpIHsK
KyAgICBmdW5jdGlvbiBmb28oeCA9ICh5ID0gKCk9PnRoaXMpPT55KCkpIHsKKyAgICAgICAgcmV0
dXJuIHgoKTsKKyAgICB9CisgICAgbGV0IG8gPSB7fTsKKyAgICBmb28uY2FsbChvKTsKK30pOwor
Cit0ZXN0KGZ1bmN0aW9uKCkgeworICAgIGZ1bmN0aW9uIGZvbyh4ID0gKHkgPSAoKT0+bmV3LnRh
cmdldCk9PnkoKSkgeworICAgICAgICBhc3NlcnQoeCgpID09PSBmb28pOworICAgIH0KKyAgICBu
ZXcgZm9vKCk7Cit9KTsKKwordGVzdChmdW5jdGlvbigpIHsKKyAgICBmdW5jdGlvbiBmb28oeCA9
ICh5ID0gKCk9Pm5ldy50YXJnZXQpPT55KCkpIHsKKyAgICAgICAgYXNzZXJ0KHgoKSA9PT0gdW5k
ZWZpbmVkKTsKKyAgICB9CisgICAgZm9vKCk7Cit9KTsKKworLy8gRklYTUU6IE91ciBwYXJzZXIg
dGhyb3dzIGEgc3ludGF4IGVycm9yIGhlcmUgYnV0IGl0IHNob3VsZCBub3QuCisvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU3ODcyCisvL3Rlc3QoZnVuY3Rpb24o
KSB7CisvLyAgICBjbGFzcyBDIHsKKy8vICAgICAgICBjb25zdHJ1Y3RvcigpIHsgdGhpcy5feCA9
IDQ1OyB9CisvLyAgICAgICAgZ2V0IGZvbygpIHsgcmV0dXJuIHRoaXMuX3g7fQorLy8gICAgfQor
Ly8gICAgY2xhc3MgRCBleHRlbmRzIEMgeworLy8gICAgICAgIC8vY29uc3RydWN0b3IoeCA9ICgp
PT5zdXBlci5mb28pIHsKKy8vICAgICAgICAvLyAgICBzdXBlcigpOworLy8gICAgICAgIC8vICAg
IGFzc2VydCh4KCkgPT09IDQ1KTsKKy8vICAgICAgICAvL30KKy8vICAgICAgICB4KHggPSAoKT0+
c3VwZXIuZm9vKSB7CisvLyAgICAgICAgICAgIHJldHVybiB4KCk7CisvLyAgICAgICAgfQorLy8g
ICAgfQorLy8gICAgLy8obmV3IEQpLngoKTsKKy8vfSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvdGVzdHMvc3RyZXNzL29wLXB1c2gtbmFtZS1zY29wZS1jcmFzaGVzLXByb2ZpbGVyLmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mvb3AtcHVz
aC1uYW1lLXNjb3BlLWNyYXNoZXMtcHJvZmlsZXIuanMJKHJldmlzaW9uIDIwMTA3MSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mvb3AtcHVzaC1uYW1lLXNjb3BlLWNyYXNo
ZXMtcHJvZmlsZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTgsMTAgKzgsMTAgQEAgZnVuY3Rpb24g
dGVzdCgpIHsKICAgICAgfSkoYXJndW1lbnRzWzBdKTsKIH0KIAotZm9yICh2YXIgaSA9IDA7IGkg
PCAxMDAwMDsgKytpKSB7Citmb3IgKHZhciBpID0gMDsgaSA8IDQwMDA7ICsraSkgewogICAgIGNv
dW50ZXIgPSAwOwogICAgIHRlc3QoMTAwKTsKICAgICBpZiAoY291bnRlciAhPT0gMTAxKSB7CiAg
ICAgICAgIHRocm93ICJPb3BzLCB0ZXN0KDEwMCkgPSAiICsgdGVzdCgxMDApICsgIiwgZXhwZWN0
ZWQgMTAxLiI7CiAgICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK30K
</data>
<flag name="review"
          id="303378"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>279327</attachid>
            <date>2016-05-18 17:55:34 -0700</date>
            <delta_ts>2016-05-18 17:56:35 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>21679</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjAxMTE0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQzIEBA
CisyMDE2LTA1LTE4ICBTYWFtIGJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IEZ1bmN0aW9uIHdpdGggZGVmYXVsdCBwYXJhbWV0ZXIgdmFsdWVzIHRoYXQgYXJlIGFycm93IGZ1
bmN0aW9ucyB0aGF0IGNhcHR1cmUgdGhpcyBpc24ndCB3b3JraW5nCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTc3ODYKKyAgICAgICAgPHJkYXI6Ly9w
cm9ibGVtLzI2MzI3MzI5PgorCisgICAgICAgIFJldmlld2VkIGJ5IEdlb2ZmcmV5IEdhcmVuLgor
CisgICAgICAgIFRvIG1ha2UgdGhlIHNjb3BlcyBvcmRlcmVkIHByb3Blcmx5LCBJIG5lZWRlZCB0
byBpbml0aWFsaXplIHRoZSBhcnJvdyAKKyAgICAgICAgZnVuY3Rpb24gbGV4aWNhbCBlbnZpcm9u
bWVudCBiZWZvcmUgaW5pdGlhbGl6aW5nIGRlZmF1bHQgcGFyYW1ldGVyIHZhbHVlcy4KKyAgICAg
ICAgSSBhbHNvIG1hZGUgdGhlIGNvZGUgZWFzaWVyIHRvIHJlYXNvbiBhYm91dCBieSBuZXZlciBy
ZXVzaW5nIHRoZSBmdW5jdGlvbidzCisgICAgICAgIHZhciBsZXhpY2FsIGVudmlyb25tZW50IGZv
ciB0aGUgYXJyb3cgZnVuY3Rpb24gbGV4aWNhbCBlbnZpcm9ubWVudC4gVGhlCisgICAgICAgIHJl
YXNvbiBmb3IgdGhpcyBpcyB0aGF0IHRoYXQgY29kZSB3YXMgd3JvbmcsIGFuZCB3ZSBqdXN0IGRp
ZG4ndCBoYXZlIGNvZGUgdG8KKyAgICAgICAgdGhhdCBwcm9wZXJseSB0ZXN0ZWQgaXQuIEl0IHdh
cyBlYXN5IGZvciB0aGF0IGNvZGUgdG8gYmUgd3JvbmcgYmVjYXVzZQorICAgICAgICBzb21ldGlt
ZXMgdGhlIGZ1bmN0aW9uJ3MgbGV4aWNhbCBlbnZpcm9ubWVudCBpc24ndCB0aGUgdG9wLW1vc3Qg
c2NvcGUKKyAgICAgICAgKG5hbWVseSwgd2hlbiBhIGZ1bmN0aW9uJ3MgcGFyYW1ldGVyIGxpc3Qg
aXMgbm9uLXNpbXBsZSkgYW5kIHNvbWV0aW1lcworICAgICAgICBpdCBpcyAod2hlbiB0aGUgZnVu
Y3Rpb24ncyBwYXJhbWV0ZXIgbGlzdCBpcyBzaW1wbGUpLgorCisgICAgICAgIEFsc28sIGJlY2F1
c2UgYSBmdW5jdGlvbidzIGRlZmF1bHQgcGFyYW1ldGVyIHZhbHVlcyBtYXkgY2FwdHVyZSB0aGUK
KyAgICAgICAgJ2FyZ3VtZW50cycgdmFyaWFibGUgaW5zaWRlIGFuIGFycm93IGZ1bmN0aW9uLCBJ
IG5lZWRlZCB0byB0YWtlIGNhcmUKKyAgICAgICAgdG8gaW5pdGlhbGl6ZSB0aGUgJ2FyZ3VtZW50
cycgdmFyaWFibGUgYXMgcGFydCBvZiB3aGljaGV2ZXIgc2NvcGUKKyAgICAgICAgaXMgdGhlIHRv
cC1tb3N0IHNjb3BlLiBJdCdzIGVpdGhlciB0aGUgZnVuY3Rpb24ncyB2YXIgZW52aXJvbm1lbnQK
KyAgICAgICAgaWYgdGhlIHBhcmFtZXRlciBsaXN0IGlzIHNpbXBsZSwgb3IgaXQncyB0aGUgZnVu
Y3Rpb24ncyBwYXJhbWV0ZXIKKyAgICAgICAgZW52aXJvbm1lbnQgaWYgdGhlIHBhcmFtZXRlciBs
aXN0IGlzIG5vbi1zaW1wbGUuCisKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5l
cmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5l
cmF0b3IpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6aW5pdGlhbGl6ZURlZmF1
bHRQYXJhbWV0ZXJWYWx1ZXNBbmRTZXR1cEZ1bmN0aW9uU2NvcGVTdGFjayk6CisgICAgICAgIChK
U0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjppbml0aWFsaXplQXJyb3dGdW5jdGlvbkNvbnRleHRTY29w
ZUlmTmVlZGVkKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmluaXRpYWxpemVQ
YXJhbWV0ZXJzKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmluaXRpYWxpemVW
YXJMZXhpY2FsRW52aXJvbm1lbnQpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6
dmlzaWJsZU5hbWVGb3JQYXJhbWV0ZXIpOgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29k
ZUdlbmVyYXRvci5oOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9hcnJvdy1mdW5jdGlvbnMtYXMt
ZGVmYXVsdC1wYXJhbWV0ZXItdmFsdWVzLmpzOiBBZGRlZC4KKyAgICAgICAgKGFzc2VydCk6Cisg
ICAgICAgICh0ZXN0KToKKyAgICAgICAgKHRlc3QuZm9vKToKKyAgICAgICAgKiB0ZXN0cy9zdHJl
c3Mvb3AtcHVzaC1uYW1lLXNjb3BlLWNyYXNoZXMtcHJvZmlsZXIuanM6CisgICAgICAgICh0ZXN0
KToKKwogMjAxNi0wNS0xOCAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KIAog
ICAgICAgICByMTk5ODEyIGJyb2tlIHRlc3QyNjIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZp
c2lvbiAyMDEwNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVj
b2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIxLDE0ICszMjEsMTQgQEAgQnl0
ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogICAgICAgICBlbWl0UHVzaEZ1
bmN0aW9uTmFtZVNjb3BlKGZ1bmN0aW9uTm9kZS0+aWRlbnQoKSwgJm1fY2FsbGVlUmVnaXN0ZXIs
IG1hcmtBc0NhcHR1cmVkKTsKICAgICB9CiAKLSAgICBpZiAoc2hvdWxkQ2FwdHVyZVNvbWVPZlRo
ZVRoaW5ncykgeworICAgIGlmIChzaG91bGRDYXB0dXJlU29tZU9mVGhlVGhpbmdzKQogICAgICAg
ICBtX2xleGljYWxFbnZpcm9ubWVudFJlZ2lzdGVyID0gYWRkVmFyKCk7Ci0gICAgICAgIC8vIFdl
IGNhbiBhbGxvY2F0ZSB0aGUgInZhciIgZW52aXJvbm1lbnQgaWYgd2UgZG9uJ3QgaGF2ZSBkZWZh
dWx0IHBhcmFtZXRlciBleHByZXNzaW9ucy4gSWYgd2UgaGF2ZQotICAgICAgICAvLyBkZWZhdWx0
IHBhcmFtZXRlciBleHByZXNzaW9ucywgd2UgaGF2ZSB0byBob2xkIG9mZiBvbiBhbGxvY2F0aW5n
IHRoZSAidmFyIiBlbnZpcm9ubWVudCBiZWNhdXNlCi0gICAgICAgIC8vIHRoZSBwYXJlbnQgc2Nv
cGUgb2YgdGhlICJ2YXIiIGVudmlyb25tZW50IGlzIHRoZSBwYXJhbWV0ZXIgZW52aXJvbm1lbnQu
Ci0gICAgICAgIGlmIChpc1NpbXBsZVBhcmFtZXRlckxpc3QpCi0gICAgICAgICAgICBpbml0aWFs
aXplVmFyTGV4aWNhbEVudmlyb25tZW50KHN5bWJvbFRhYmxlQ29uc3RhbnRJbmRleCk7Ci0gICAg
fQorCisgICAgLy8gV2UgY2FuIGFsbG9jYXRlIHRoZSAidmFyIiBlbnZpcm9ubWVudCBpZiB3ZSBk
b24ndCBoYXZlIGRlZmF1bHQgcGFyYW1ldGVyIGV4cHJlc3Npb25zLiBJZiB3ZSBoYXZlCisgICAg
Ly8gZGVmYXVsdCBwYXJhbWV0ZXIgZXhwcmVzc2lvbnMsIHdlIGhhdmUgdG8gaG9sZCBvZmYgb24g
YWxsb2NhdGluZyB0aGUgInZhciIgZW52aXJvbm1lbnQgYmVjYXVzZQorICAgIC8vIHRoZSBwYXJl
bnQgc2NvcGUgb2YgdGhlICJ2YXIiIGVudmlyb25tZW50IGlzIHRoZSBwYXJhbWV0ZXIgZW52aXJv
bm1lbnQuCisgICAgaWYgKGlzU2ltcGxlUGFyYW1ldGVyTGlzdCkKKyAgICAgICAgaW5pdGlhbGl6
ZVZhckxleGljYWxFbnZpcm9ubWVudChzeW1ib2xUYWJsZUNvbnN0YW50SW5kZXgsIGZ1bmN0aW9u
U3ltYm9sVGFibGUsIHNob3VsZENhcHR1cmVTb21lT2ZUaGVUaGluZ3MpOwogCiAgICAgLy8gRmln
dXJlIG91dCBzb21lIGludGVyZXN0aW5nIGZhY3RzIGFib3V0IG91ciBhcmd1bWVudHMuCiAgICAg
Ym9vbCBjYXB0dXJlc0FueUFyZ3VtZW50QnlOYW1lID0gZmFsc2U7CkBAIC00NTIsMTkgKzQ1Miw2
IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYKICAgICAgICAgaW5z
dHJ1Y3Rpb25zKCkuYXBwZW5kKG1fYXJndW1lbnRzUmVnaXN0ZXItPmluZGV4KCkpOwogICAgIH0K
ICAgICAKLSAgICBmb3IgKEZ1bmN0aW9uTWV0YWRhdGFOb2RlKiBmdW5jdGlvbiA6IGZ1bmN0aW9u
Tm9kZS0+ZnVuY3Rpb25TdGFjaygpKSB7Ci0gICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50
ID0gZnVuY3Rpb24tPmlkZW50KCk7Ci0gICAgICAgIGNyZWF0ZVZhcmlhYmxlKGlkZW50LCB2YXJL
aW5kKGlkZW50LmltcGwoKSksIGZ1bmN0aW9uU3ltYm9sVGFibGUpOwotICAgICAgICBtX2Z1bmN0
aW9uc1RvSW5pdGlhbGl6ZS5hcHBlbmQoc3RkOjptYWtlX3BhaXIoZnVuY3Rpb24sIE5vcm1hbEZ1
bmN0aW9uVmFyaWFibGUpKTsKLSAgICB9Ci0gICAgZm9yIChhdXRvJiBlbnRyeSA6IGZ1bmN0aW9u
Tm9kZS0+dmFyRGVjbGFyYXRpb25zKCkpIHsKLSAgICAgICAgQVNTRVJUKCFlbnRyeS52YWx1ZS5p
c0xldCgpICYmICFlbnRyeS52YWx1ZS5pc0NvbnN0KCkpOwotICAgICAgICBpZiAoIWVudHJ5LnZh
bHVlLmlzVmFyKCkpIC8vIFRoaXMgaXMgZWl0aGVyIGEgcGFyYW1ldGVyIG9yIGNhbGxlZS4KLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAvLyBWYXJpYWJsZXMgbmFtZWQgImFyZ3VtZW50
cyIgYXJlIG5ldmVyIGNvbnN0LgotICAgICAgICBjcmVhdGVWYXJpYWJsZShJZGVudGlmaWVyOjpm
cm9tVWlkKG1fdm0sIGVudHJ5LmtleS5nZXQoKSksIHZhcktpbmQoZW50cnkua2V5LmdldCgpKSwg
ZnVuY3Rpb25TeW1ib2xUYWJsZSwgSWdub3JlRXhpc3RpbmcpOwotICAgIH0KLQogICAgIC8vIFRo
ZXJlIGFyZSBzb21lIHZhcmlhYmxlcyB0aGF0IG5lZWQgdG8gYmUgcHJlaW5pdGlhbGl6ZWQgdG8g
c29tZXRoaW5nIG90aGVyIHRoYW4gVW5kZWZpbmVkOgogICAgIC8vCiAgICAgLy8gLSAiYXJndW1l
bnRzIjogdW5sZXNzIGl0J3MgdXNlZCBhcyBhIGZ1bmN0aW9uIG9yIHBhcmFtZXRlciwgdGhpcyBz
aG91bGQgcmVmZXIgdG8gdGhlCkBAIC00ODYsNiArNDczLDcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6
OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogICAgIAogICAgIC8vIFRoaXMgaXMgb3VyIGZpbmFsIGFj
dCBvZiB3ZWlyZG5lc3MuICJhcmd1bWVudHMiIGlzIG92ZXJyaWRkZW4gYnkgZXZlcnl0aGluZyBl
eGNlcHQgdGhlCiAgICAgLy8gY2FsbGVlLiBXZSBhZGQgaXQgdG8gdGhlIHN5bWJvbCB0YWJsZSBp
ZiBpdCdzIG5vdCBhbHJlYWR5IHRoZXJlIGFuZCBpdCdzIG5vdCBhbiBhcmd1bWVudC4KKyAgICBi
b29sIHNob3VsZENyZWF0ZUFyZ3VtZW50c1ZhcmlhYmxlSW5QYXJhbWV0ZXJTY29wZSA9IGZhbHNl
OwogICAgIGlmIChuZWVkc0FyZ3VtZW50cykgewogICAgICAgICAvLyBJZiAiYXJndW1lbnRzIiBp
cyBvdmVycmlkZGVuIGJ5IGEgZnVuY3Rpb24gb3IgZGVzdHJ1Y3R1cmluZyBwYXJhbWV0ZXIgbmFt
ZSwgdGhlbiBpdCdzCiAgICAgICAgIC8vIE9LIGZvciB1cyB0byBjYWxsIGNyZWF0ZVZhcmlhYmxl
KCkgYmVjYXVzZSBpdCB3b24ndCBjaGFuZ2UgYW55dGhpbmcuIEl0J3MgYWxzbyBPSyBmb3IKQEAg
LTUwNCw4ICs0OTIsMTAgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZN
JgogICAgICAgICAgICAgfQogICAgICAgICB9CiAKKyAgICAgICAgYm9vbCBzaG91bGRDcmVhdGVB
cmd1bWVuc1ZhcmlhYmxlID0gIWhhdmVQYXJhbWV0ZXJOYW1lZEFyZ3VtZW50cyAmJiAhbV9jb2Rl
QmxvY2stPmlzQXJyb3dGdW5jdGlvbigpOworICAgICAgICBzaG91bGRDcmVhdGVBcmd1bWVudHNW
YXJpYWJsZUluUGFyYW1ldGVyU2NvcGUgPSBzaG91bGRDcmVhdGVBcmd1bWVuc1ZhcmlhYmxlICYm
ICFpc1NpbXBsZVBhcmFtZXRlckxpc3Q7CiAgICAgICAgIC8vIERvIG5vdCBjcmVhdGUgYXJndW1l
bnRzIHZhcmlhYmxlIGluIGNhc2Ugb2YgQXJyb3cgZnVuY3Rpb24uIFZhbHVlIHdpbGwgYmUgbG9h
ZGVkIGZyb20gcGFyZW50IHNjb3BlCi0gICAgICAgIGlmICghaGF2ZVBhcmFtZXRlck5hbWVkQXJn
dW1lbnRzICYmICFtX2NvZGVCbG9jay0+aXNBcnJvd0Z1bmN0aW9uKCkpIHsKKyAgICAgICAgaWYg
KHNob3VsZENyZWF0ZUFyZ3VtZW5zVmFyaWFibGUgJiYgIXNob3VsZENyZWF0ZUFyZ3VtZW50c1Zh
cmlhYmxlSW5QYXJhbWV0ZXJTY29wZSkgewogICAgICAgICAgICAgY3JlYXRlVmFyaWFibGUoCiAg
ICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cywgdmFyS2luZChwcm9wZXJ0
eU5hbWVzKCkuYXJndW1lbnRzLmltcGwoKSksIGZ1bmN0aW9uU3ltYm9sVGFibGUpOwogCkBAIC01
MTMsNiArNTAzLDIyIEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYK
ICAgICAgICAgfQogICAgIH0KIAorICAgIGZvciAoRnVuY3Rpb25NZXRhZGF0YU5vZGUqIGZ1bmN0
aW9uIDogZnVuY3Rpb25Ob2RlLT5mdW5jdGlvblN0YWNrKCkpIHsKKyAgICAgICAgY29uc3QgSWRl
bnRpZmllciYgaWRlbnQgPSBmdW5jdGlvbi0+aWRlbnQoKTsKKyAgICAgICAgY3JlYXRlVmFyaWFi
bGUoaWRlbnQsIHZhcktpbmQoaWRlbnQuaW1wbCgpKSwgZnVuY3Rpb25TeW1ib2xUYWJsZSk7Cisg
ICAgICAgIG1fZnVuY3Rpb25zVG9Jbml0aWFsaXplLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihmdW5j
dGlvbiwgTm9ybWFsRnVuY3Rpb25WYXJpYWJsZSkpOworICAgIH0KKyAgICBmb3IgKGF1dG8mIGVu
dHJ5IDogZnVuY3Rpb25Ob2RlLT52YXJEZWNsYXJhdGlvbnMoKSkgeworICAgICAgICBBU1NFUlQo
IWVudHJ5LnZhbHVlLmlzTGV0KCkgJiYgIWVudHJ5LnZhbHVlLmlzQ29uc3QoKSk7CisgICAgICAg
IGlmICghZW50cnkudmFsdWUuaXNWYXIoKSkgLy8gVGhpcyBpcyBlaXRoZXIgYSBwYXJhbWV0ZXIg
b3IgY2FsbGVlLgorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIC8vIFZhcmlhYmxlcyBu
YW1lZCAiYXJndW1lbnRzIiBhcmUgbmV2ZXIgY29uc3QuCisgICAgICAgIGlmIChzaG91bGRDcmVh
dGVBcmd1bWVudHNWYXJpYWJsZUluUGFyYW1ldGVyU2NvcGUgJiYgZW50cnkua2V5LmdldCgpID09
IHByb3BlcnR5TmFtZXMoKS5hcmd1bWVudHMuaW1wbCgpKQorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIGNyZWF0ZVZhcmlhYmxlKElkZW50aWZpZXI6OmZyb21VaWQobV92bSwgZW50cnku
a2V5LmdldCgpKSwgdmFyS2luZChlbnRyeS5rZXkuZ2V0KCkpLCBmdW5jdGlvblN5bWJvbFRhYmxl
LCBJZ25vcmVFeGlzdGluZyk7CisgICAgfQorCisKICAgICBtX25ld1RhcmdldFJlZ2lzdGVyID0g
YWRkVmFyKCk7CiAgICAgc3dpdGNoIChwYXJzZU1vZGUpIHsKICAgICBjYXNlIFNvdXJjZVBhcnNl
TW9kZTo6R2VuZXJhdG9yV3JhcHBlckZ1bmN0aW9uTW9kZTogewpAQCAtNTY5LDEwICs1NzUsMTcg
QEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogICAgICAgICAgICAg
ZW1pdExvYWROZXdUYXJnZXRGcm9tQXJyb3dGdW5jdGlvbkxleGljYWxFbnZpcm9ubWVudCgpOwog
ICAgIH0KIAorICAgIGlmIChuZWVkc1RvVXBkYXRlQXJyb3dGdW5jdGlvbkNvbnRleHQoKSAmJiAh
Y29kZUJsb2NrLT5pc0Fycm93RnVuY3Rpb24oKSkgeworICAgICAgICBpbml0aWFsaXplQXJyb3dG
dW5jdGlvbkNvbnRleHRTY29wZUlmTmVlZGVkKCk7CisgICAgICAgIGVtaXRQdXRUaGlzVG9BcnJv
d0Z1bmN0aW9uQ29udGV4dFNjb3BlKCk7CisgICAgICAgIGVtaXRQdXROZXdUYXJnZXRUb0Fycm93
RnVuY3Rpb25Db250ZXh0U2NvcGUoKTsKKyAgICAgICAgZW1pdFB1dERlcml2ZWRDb25zdHJ1Y3Rv
clRvQXJyb3dGdW5jdGlvbkNvbnRleHRTY29wZSgpOworICAgIH0KKwogICAgIC8vIEFsbCAiYWRk
VmFyKCkicyBuZWVkcyB0byBoYXBwZW4gYmVmb3JlICJpbml0aWFsaXplRGVmYXVsdFBhcmFtZXRl
clZhbHVlc0FuZFNldHVwRnVuY3Rpb25TY29wZVN0YWNrKCkiIGlzIGNhbGxlZAogICAgIC8vIGJl
Y2F1c2UgYSBmdW5jdGlvbidzIGRlZmF1bHQgcGFyYW1ldGVyIEV4cHJlc3Npb25Ob2RlcyB3aWxs
IHVzZSB0ZW1wb3JhcnkgcmVnaXN0ZXJzLgogICAgIHB1c2hURFpWYXJpYWJsZXMoKnBhcmVudFNj
b3BlVERaVmFyaWFibGVzLCBURFpDaGVja09wdGltaXphdGlvbjo6RG9Ob3RPcHRpbWl6ZSk7Ci0g
ICAgaW5pdGlhbGl6ZURlZmF1bHRQYXJhbWV0ZXJWYWx1ZXNBbmRTZXR1cEZ1bmN0aW9uU2NvcGVT
dGFjayhwYXJhbWV0ZXJzLCBpc1NpbXBsZVBhcmFtZXRlckxpc3QsIGZ1bmN0aW9uTm9kZSwgZnVu
Y3Rpb25TeW1ib2xUYWJsZSwgc3ltYm9sVGFibGVDb25zdGFudEluZGV4LCBjYXB0dXJlcyk7Cisg
ICAgaW5pdGlhbGl6ZURlZmF1bHRQYXJhbWV0ZXJWYWx1ZXNBbmRTZXR1cEZ1bmN0aW9uU2NvcGVT
dGFjayhwYXJhbWV0ZXJzLCBpc1NpbXBsZVBhcmFtZXRlckxpc3QsIGZ1bmN0aW9uTm9kZSwgZnVu
Y3Rpb25TeW1ib2xUYWJsZSwgc3ltYm9sVGFibGVDb25zdGFudEluZGV4LCBjYXB0dXJlcywgc2hv
dWxkQ3JlYXRlQXJndW1lbnRzVmFyaWFibGVJblBhcmFtZXRlclNjb3BlKTsKICAgICAKICAgICAv
LyBJZiB3ZSBkb24ndCBoYXZlICBkZWZhdWx0IHBhcmFtZXRlciBleHByZXNzaW9uLCB0aGVuIGxv
YWRpbmcgfHRoaXN8IGluc2lkZSBhbiBhcnJvdyBmdW5jdGlvbiBtdXN0IGJlIGRvbmUKICAgICAv
LyBhZnRlciBpbml0aWFsaXplRGVmYXVsdFBhcmFtZXRlclZhbHVlc0FuZFNldHVwRnVuY3Rpb25T
Y29wZVN0YWNrKCkgYmVjYXVzZSB0aGF0IGZ1bmN0aW9uIHNldHMgdXAgdGhlCkBAIC01ODUsMTMg
KzU5OCw2IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYKICAgICAg
ICAgICAgIGVtaXRMb2FkTmV3VGFyZ2V0RnJvbUFycm93RnVuY3Rpb25MZXhpY2FsRW52aXJvbm1l
bnQoKTsKICAgICB9CiAgICAgCi0gICAgaWYgKG5lZWRzVG9VcGRhdGVBcnJvd0Z1bmN0aW9uQ29u
dGV4dCgpICYmICFjb2RlQmxvY2stPmlzQXJyb3dGdW5jdGlvbigpKSB7Ci0gICAgICAgIGluaXRp
YWxpemVBcnJvd0Z1bmN0aW9uQ29udGV4dFNjb3BlSWZOZWVkZWQoZnVuY3Rpb25TeW1ib2xUYWJs
ZSk7Ci0gICAgICAgIGVtaXRQdXRUaGlzVG9BcnJvd0Z1bmN0aW9uQ29udGV4dFNjb3BlKCk7Ci0g
ICAgICAgIGVtaXRQdXROZXdUYXJnZXRUb0Fycm93RnVuY3Rpb25Db250ZXh0U2NvcGUoKTsKLSAg
ICAgICAgZW1pdFB1dERlcml2ZWRDb25zdHJ1Y3RvclRvQXJyb3dGdW5jdGlvbkNvbnRleHRTY29w
ZSgpOwotICAgIH0KLQogICAgIGJvb2wgc2hvdWxkSW5pdGlhbGl6ZUJsb2NrU2NvcGVkRnVuY3Rp
b25zID0gZmFsc2U7IC8vIFdlIGdlbmVyYXRlIHRvcC1sZXZlbCBmdW5jdGlvbiBkZWNsYXJhdGlv
bnMgaW4gOjpnZW5lcmF0ZSgpLgogICAgIHB1c2hMZXhpY2FsU2NvcGUobV9zY29wZU5vZGUsIFRE
WkNoZWNrT3B0aW1pemF0aW9uOjpPcHRpbWl6ZSwgTmVzdGVkU2NvcGVUeXBlOjpJc05vdE5lc3Rl
ZCwgbnVsbHB0ciwgc2hvdWxkSW5pdGlhbGl6ZUJsb2NrU2NvcGVkRnVuY3Rpb25zKTsKIH0KQEAg
LTgwNSw5ICs4MTEsMTAgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6On5CeXRlY29kZUdlbmVyYXRvcigp
CiAKIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmluaXRpYWxpemVEZWZhdWx0UGFyYW1ldGVyVmFs
dWVzQW5kU2V0dXBGdW5jdGlvblNjb3BlU3RhY2soCiAgICAgRnVuY3Rpb25QYXJhbWV0ZXJzJiBw
YXJhbWV0ZXJzLCBib29sIGlzU2ltcGxlUGFyYW1ldGVyTGlzdCwgRnVuY3Rpb25Ob2RlKiBmdW5j
dGlvbk5vZGUsIFN5bWJvbFRhYmxlKiBmdW5jdGlvblN5bWJvbFRhYmxlLCAKLSAgICBpbnQgc3lt
Ym9sVGFibGVDb25zdGFudEluZGV4LCBjb25zdCBzdGQ6OmZ1bmN0aW9uPGJvb2wgKFVuaXF1ZWRT
dHJpbmdJbXBsKik+JiBjYXB0dXJlcykKKyAgICBpbnQgc3ltYm9sVGFibGVDb25zdGFudEluZGV4
LCBjb25zdCBzdGQ6OmZ1bmN0aW9uPGJvb2wgKFVuaXF1ZWRTdHJpbmdJbXBsKik+JiBjYXB0dXJl
cywgYm9vbCBzaG91bGRDcmVhdGVBcmd1bWVudHNWYXJpYWJsZUluUGFyYW1ldGVyU2NvcGUpCiB7
CiAgICAgVmVjdG9yPHN0ZDo6cGFpcjxJZGVudGlmaWVyLCBSZWZQdHI8UmVnaXN0ZXJJRD4+PiB2
YWx1ZXNUb01vdmVJbnRvVmFyczsKKyAgICBBU1NFUlQoIShpc1NpbXBsZVBhcmFtZXRlckxpc3Qg
JiYgc2hvdWxkQ3JlYXRlQXJndW1lbnRzVmFyaWFibGVJblBhcmFtZXRlclNjb3BlKSk7CiAgICAg
aWYgKCFpc1NpbXBsZVBhcmFtZXRlckxpc3QpIHsKICAgICAgICAgLy8gUmVmZXIgdG8gdGhlIEVT
NiBzcGVjIHNlY3Rpb24gOS4yLjEyOiBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcv
ZWNtYS0yNjIvNi4wL2luZGV4Lmh0bWwjc2VjLWZ1bmN0aW9uZGVjbGFyYXRpb25pbnN0YW50aWF0
aW9uCiAgICAgICAgIC8vIFRoaXMgaW1wbGVtZW50cyBzdGVwIDIxLgpAQCAtODE1LDYgKzgyMiw4
IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmluaXRpYWxpemVEZWZhdWwKICAgICAgICAgVmVj
dG9yPElkZW50aWZpZXI+IGFsbFBhcmFtZXRlck5hbWVzOyAKICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHBhcmFtZXRlcnMuc2l6ZSgpOyBpKyspCiAgICAgICAgICAgICBwYXJhbWV0
ZXJzLmF0KGkpLmZpcnN0LT5jb2xsZWN0Qm91bmRJZGVudGlmaWVycyhhbGxQYXJhbWV0ZXJOYW1l
cyk7CisgICAgICAgIGlmIChzaG91bGRDcmVhdGVBcmd1bWVudHNWYXJpYWJsZUluUGFyYW1ldGVy
U2NvcGUpCisgICAgICAgICAgICBhbGxQYXJhbWV0ZXJOYW1lcy5hcHBlbmQocHJvcGVydHlOYW1l
cygpLmFyZ3VtZW50cyk7CiAgICAgICAgIElkZW50aWZpZXJTZXQgcGFyYW1ldGVyU2V0OwogICAg
ICAgICBmb3IgKGF1dG8mIGlkZW50IDogYWxsUGFyYW1ldGVyTmFtZXMpIHsKICAgICAgICAgICAg
IHBhcmFtZXRlclNldC5hZGQoaWRlbnQuaW1wbCgpKTsKQEAgLTgyMywxMCArODMyLDE1IEBAIHZv
aWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmluaXRpYWxpemVEZWZhdWwKICAgICAgICAgICAgIGlmIChj
YXB0dXJlcyhpZGVudC5pbXBsKCkpKQogICAgICAgICAgICAgICAgIGFkZFJlc3VsdC5pdGVyYXRv
ci0+dmFsdWUuc2V0SXNDYXB0dXJlZCgpOwogICAgICAgICB9Ci0gICAgICAgIAogICAgICAgICAv
LyBUaGlzIGltcGxlbWVudHMgc3RlcCAyNSBvZiBzZWN0aW9uIDkuMi4xMi4KICAgICAgICAgcHVz
aExleGljYWxTY29wZUludGVybmFsKGVudmlyb25tZW50LCBURFpDaGVja09wdGltaXphdGlvbjo6
T3B0aW1pemUsIE5lc3RlZFNjb3BlVHlwZTo6SXNOb3ROZXN0ZWQsIG51bGxwdHIsIFREWlJlcXVp
cmVtZW50OjpVbmRlclREWiwgU2NvcGVUeXBlOjpMZXRDb25zdFNjb3BlLCBTY29wZVJlZ2lzdGVy
VHlwZTo6QmxvY2spOwogCisgICAgICAgIGlmIChzaG91bGRDcmVhdGVBcmd1bWVudHNWYXJpYWJs
ZUluUGFyYW1ldGVyU2NvcGUpIHsKKyAgICAgICAgICAgIFZhcmlhYmxlIGFyZ3VtZW50c1Zhcmlh
YmxlID0gdmFyaWFibGUocHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cyk7IAorICAgICAgICAgICAg
aW5pdGlhbGl6ZVZhcmlhYmxlKGFyZ3VtZW50c1ZhcmlhYmxlLCBtX2FyZ3VtZW50c1JlZ2lzdGVy
KTsKKyAgICAgICAgICAgIGxpZnRURFpDaGVja0lmUG9zc2libGUoYXJndW1lbnRzVmFyaWFibGUp
OworICAgICAgICB9CisKICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHRlbXAgPSBuZXdUZW1w
b3JhcnkoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBhcmFtZXRlcnMuc2l6
ZSgpOyBpKyspIHsKICAgICAgICAgICAgIHN0ZDo6cGFpcjxEZXN0cnVjdHVyaW5nUGF0dGVybk5v
ZGUqLCBFeHByZXNzaW9uTm9kZSo+IHBhcmFtZXRlciA9IHBhcmFtZXRlcnMuYXQoaSk7CkBAIC04
NjcsMTYgKzg4MSwxMCBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjppbml0aWFsaXplRGVmYXVs
CiAgICAgICAgIC8vIHJlY29yZCBmb3IgcGFyYW1ldGVycyBhbmQgInZhciJzLiBUaGUgInZhciIg
ZW52aXJvbm1lbnQgcmVjb3JkIG11c3QgaGF2ZSB0aGUKICAgICAgICAgLy8gcGFyYW1ldGVyIGVu
dmlyb25tZW50IHJlY29yZCBhcyBpdHMgcGFyZW50LgogICAgICAgICAvLyBTZWUgc3RlcCAyOCBv
ZiBzZWN0aW9uIDkuMi4xMi4KLSAgICAgICAgaWYgKG1fbGV4aWNhbEVudmlyb25tZW50UmVnaXN0
ZXIpCi0gICAgICAgICAgICBpbml0aWFsaXplVmFyTGV4aWNhbEVudmlyb25tZW50KHN5bWJvbFRh
YmxlQ29uc3RhbnRJbmRleCk7CisgICAgICAgIGJvb2wgaGFzQ2FwdHVyZWRWYXJpYWJsZXMgPSAh
IW1fbGV4aWNhbEVudmlyb25tZW50UmVnaXN0ZXI7IAorICAgICAgICBpbml0aWFsaXplVmFyTGV4
aWNhbEVudmlyb25tZW50KHN5bWJvbFRhYmxlQ29uc3RhbnRJbmRleCwgZnVuY3Rpb25TeW1ib2xU
YWJsZSwgaGFzQ2FwdHVyZWRWYXJpYWJsZXMpOwogICAgIH0KIAotICAgIGlmIChtX2xleGljYWxF
bnZpcm9ubWVudFJlZ2lzdGVyKQotICAgICAgICBwdXNoU2NvcGVkQ29udHJvbEZsb3dDb250ZXh0
KCk7Ci0gICAgbV9zeW1ib2xUYWJsZVN0YWNrLmFwcGVuZChTeW1ib2xUYWJsZVN0YWNrRW50cnl7
IGZ1bmN0aW9uU3ltYm9sVGFibGUsIG1fbGV4aWNhbEVudmlyb25tZW50UmVnaXN0ZXIsIGZhbHNl
LCBzeW1ib2xUYWJsZUNvbnN0YW50SW5kZXggfSk7Ci0KLSAgICBtX3ZhclNjb3BlU3ltYm9sVGFi
bGVJbmRleCA9IG1fc3ltYm9sVGFibGVTdGFjay5zaXplKCkgLSAxOwotCiAgICAgLy8gVGhpcyBj
b21wbGV0ZXMgc3RlcCAyOCBvZiBzZWN0aW9uIDkuMi4xMi4KICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgdmFsdWVzVG9Nb3ZlSW50b1ZhcnMuc2l6ZSgpOyBpKyspIHsKICAgICAgICAgQVNT
RVJUKCFpc1NpbXBsZVBhcmFtZXRlckxpc3QpOwpAQCAtODg2LDQzICs4OTQsMTYgQEAgdm9pZCBC
eXRlY29kZUdlbmVyYXRvcjo6aW5pdGlhbGl6ZURlZmF1bAogICAgIH0KIH0KIAotdm9pZCBCeXRl
Y29kZUdlbmVyYXRvcjo6aW5pdGlhbGl6ZUFycm93RnVuY3Rpb25Db250ZXh0U2NvcGVJZk5lZWRl
ZChTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUpCit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjppbml0
aWFsaXplQXJyb3dGdW5jdGlvbkNvbnRleHRTY29wZUlmTmVlZGVkKCkKIHsKLSAgICBpZiAobV9h
cnJvd0Z1bmN0aW9uQ29udGV4dExleGljYWxFbnZpcm9ubWVudFJlZ2lzdGVyICE9IG51bGxwdHIp
Ci0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBpZiAobV9sZXhpY2FsRW52aXJvbm1lbnRSZWdp
c3RlciAhPSBudWxscHRyKSB7Ci0gICAgICAgIG1fYXJyb3dGdW5jdGlvbkNvbnRleHRMZXhpY2Fs
RW52aXJvbm1lbnRSZWdpc3RlciA9IG1fbGV4aWNhbEVudmlyb25tZW50UmVnaXN0ZXI7Ci0gICAg
ICAgIAotICAgICAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0Fycm93RnVuY3Rpb24oKSkgewotICAg
ICAgICAgICAgU2NvcGVPZmZzZXQgb2Zmc2V0OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBD
b25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihDb25jdXJyZW50SklUTG9ja2VyOjpOb0xvY2tpbmdO
ZWNlc3NhcnkpOwotICAgICAgICAgICAgaWYgKGlzVGhpc1VzZWRJbklubmVyQXJyb3dGdW5jdGlv
bigpKSB7Ci0gICAgICAgICAgICAgICAgb2Zmc2V0ID0gc3ltYm9sVGFibGUtPnRha2VOZXh0U2Nv
cGVPZmZzZXQobG9ja2VyKTsKLSAgICAgICAgICAgICAgICBzeW1ib2xUYWJsZS0+c2V0KGxvY2tl
ciwgcHJvcGVydHlOYW1lcygpLnRoaXNJZGVudGlmaWVyLmltcGwoKSwgU3ltYm9sVGFibGVFbnRy
eShWYXJPZmZzZXQob2Zmc2V0KSkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAo
bV9jb2RlVHlwZSA9PSBGdW5jdGlvbkNvZGUgJiYgaXNOZXdUYXJnZXRVc2VkSW5Jbm5lckFycm93
RnVuY3Rpb24oKSkgewotICAgICAgICAgICAgICAgIG9mZnNldCA9IHN5bWJvbFRhYmxlLT50YWtl
TmV4dFNjb3BlT2Zmc2V0KCk7Ci0gICAgICAgICAgICAgICAgc3ltYm9sVGFibGUtPnNldChsb2Nr
ZXIsIHByb3BlcnR5TmFtZXMoKS5uZXdUYXJnZXRMb2NhbFByaXZhdGVOYW1lLmltcGwoKSwgU3lt
Ym9sVGFibGVFbnRyeShWYXJPZmZzZXQob2Zmc2V0KSkpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBpZiAoaXNDb25zdHJ1Y3RvcigpICYmIGNvbnN0cnVjdG9yS2lu
ZCgpID09IENvbnN0cnVjdG9yS2luZDo6RGVyaXZlZCAmJiBpc1N1cGVyVXNlZEluSW5uZXJBcnJv
d0Z1bmN0aW9uKCkpIHsKLSAgICAgICAgICAgICAgICBvZmZzZXQgPSBzeW1ib2xUYWJsZS0+dGFr
ZU5leHRTY29wZU9mZnNldChsb2NrZXIpOwotICAgICAgICAgICAgICAgIHN5bWJvbFRhYmxlLT5z
ZXQobG9ja2VyLCBwcm9wZXJ0eU5hbWVzKCkuZGVyaXZlZENvbnN0cnVjdG9yUHJpdmF0ZU5hbWUu
aW1wbCgpLCBTeW1ib2xUYWJsZUVudHJ5KFZhck9mZnNldChvZmZzZXQpKSk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIEFTU0VSVCghbV9h
cnJvd0Z1bmN0aW9uQ29udGV4dExleGljYWxFbnZpcm9ubWVudFJlZ2lzdGVyKTsKIAogICAgIFZh
cmlhYmxlRW52aXJvbm1lbnQgZW52aXJvbm1lbnQ7CiAKICAgICBpZiAoaXNUaGlzVXNlZEluSW5u
ZXJBcnJvd0Z1bmN0aW9uKCkpIHsKICAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBlbnZpcm9ubWVu
dC5hZGQocHJvcGVydHlOYW1lcygpLnRoaXNJZGVudGlmaWVyKTsKICAgICAgICAgYWRkUmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZS5zZXRJc0NhcHR1cmVkKCk7Ci0gICAgICAgIGFkZFJlc3VsdC5pdGVy
YXRvci0+dmFsdWUuc2V0SXNDb25zdCgpOworICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZh
bHVlLnNldElzTGV0KCk7CiAgICAgfQogICAgIAogICAgIGlmIChtX2NvZGVUeXBlID09IEZ1bmN0
aW9uQ29kZSAmJiBpc05ld1RhcmdldFVzZWRJbklubmVyQXJyb3dGdW5jdGlvbigpKSB7CkBAIC05
NzIsMTggKzk1MywyNSBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjppbml0aWFsaXplUGFyYW1l
CiAgICAgfQogfQogCi12b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjppbml0aWFsaXplVmFyTGV4aWNh
bEVudmlyb25tZW50KGludCBzeW1ib2xUYWJsZUNvbnN0YW50SW5kZXgpCit2b2lkIEJ5dGVjb2Rl
R2VuZXJhdG9yOjppbml0aWFsaXplVmFyTGV4aWNhbEVudmlyb25tZW50KGludCBzeW1ib2xUYWJs
ZUNvbnN0YW50SW5kZXgsIFN5bWJvbFRhYmxlKiBmdW5jdGlvblN5bWJvbFRhYmxlLCBib29sIGhh
c0NhcHR1cmVkVmFyaWFibGVzKQogewotICAgIFJFTEVBU0VfQVNTRVJUKG1fbGV4aWNhbEVudmly
b25tZW50UmVnaXN0ZXIpOwotICAgIGVtaXRPcGNvZGUob3BfY3JlYXRlX2xleGljYWxfZW52aXJv
bm1lbnQpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtX2xleGljYWxFbnZpcm9ubWVudFJl
Z2lzdGVyLT5pbmRleCgpKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc2NvcGVSZWdpc3Rl
cigpLT5pbmRleCgpKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc3ltYm9sVGFibGVDb25z
dGFudEluZGV4KTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29uc3RhbnRWYWx1ZShq
c1VuZGVmaW5lZCgpKS0+aW5kZXgoKSk7CisgICAgaWYgKGhhc0NhcHR1cmVkVmFyaWFibGVzKSB7
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fbGV4aWNhbEVudmlyb25tZW50UmVnaXN0ZXIpOwor
ICAgICAgICBlbWl0T3Bjb2RlKG9wX2NyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50KTsKKyAgICAg
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1fbGV4aWNhbEVudmlyb25tZW50UmVnaXN0ZXItPmlu
ZGV4KCkpOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc2NvcGVSZWdpc3RlcigpLT5p
bmRleCgpKTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHN5bWJvbFRhYmxlQ29uc3Rh
bnRJbmRleCk7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25zdGFudFZhbHVl
KGpzVW5kZWZpbmVkKCkpLT5pbmRleCgpKTsKIAotICAgIGVtaXRPcGNvZGUob3BfbW92KTsKLSAg
ICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc2NvcGVSZWdpc3RlcigpLT5pbmRleCgpKTsKLSAgICBp
bnN0cnVjdGlvbnMoKS5hcHBlbmQobV9sZXhpY2FsRW52aXJvbm1lbnRSZWdpc3Rlci0+aW5kZXgo
KSk7CisgICAgICAgIGVtaXRPcGNvZGUob3BfbW92KTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKHNjb3BlUmVnaXN0ZXIoKS0+aW5kZXgoKSk7CisgICAgICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZChtX2xleGljYWxFbnZpcm9ubWVudFJlZ2lzdGVyLT5pbmRleCgpKTsKKworICAgICAg
ICBwdXNoU2NvcGVkQ29udHJvbEZsb3dDb250ZXh0KCk7CisgICAgfQorICAgIGJvb2wgaXNXaXRo
U2NvcGUgPSBmYWxzZTsKKyAgICBtX3N5bWJvbFRhYmxlU3RhY2suYXBwZW5kKFN5bWJvbFRhYmxl
U3RhY2tFbnRyeXsgZnVuY3Rpb25TeW1ib2xUYWJsZSwgbV9sZXhpY2FsRW52aXJvbm1lbnRSZWdp
c3RlciwgaXNXaXRoU2NvcGUsIHN5bWJvbFRhYmxlQ29uc3RhbnRJbmRleCB9KTsKKyAgICBtX3Zh
clNjb3BlU3ltYm9sVGFibGVJbmRleCA9IG1fc3ltYm9sVGFibGVTdGFjay5zaXplKCkgLSAxOwog
fQogCiBVbmlxdWVkU3RyaW5nSW1wbCogQnl0ZWNvZGVHZW5lcmF0b3I6OnZpc2libGVOYW1lRm9y
UGFyYW1ldGVyKERlc3RydWN0dXJpbmdQYXR0ZXJuTm9kZSogcGF0dGVybikKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJh
dG9yLmgJKHJldmlzaW9uIDIwMTA3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtODU2LDkgKzg1Niw5
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRMb2dTaGFkb3dDaGlja2VuVGFp
bElmTmVjZXNzYXJ5KCk7CiAKICAgICAgICAgdm9pZCBpbml0aWFsaXplUGFyYW1ldGVycyhGdW5j
dGlvblBhcmFtZXRlcnMmKTsKLSAgICAgICAgdm9pZCBpbml0aWFsaXplVmFyTGV4aWNhbEVudmly
b25tZW50KGludCBzeW1ib2xUYWJsZUNvbnN0YW50SW5kZXgpOwotICAgICAgICB2b2lkIGluaXRp
YWxpemVEZWZhdWx0UGFyYW1ldGVyVmFsdWVzQW5kU2V0dXBGdW5jdGlvblNjb3BlU3RhY2soRnVu
Y3Rpb25QYXJhbWV0ZXJzJiwgYm9vbCBpc1NpbXBsZVBhcmFtZXRlckxpc3QsIEZ1bmN0aW9uTm9k
ZSosIFN5bWJvbFRhYmxlKiwgaW50IHN5bWJvbFRhYmxlQ29uc3RhbnRJbmRleCwgY29uc3Qgc3Rk
OjpmdW5jdGlvbjxib29sIChVbmlxdWVkU3RyaW5nSW1wbCopPiYgY2FwdHVyZXMpOwotICAgICAg
ICB2b2lkIGluaXRpYWxpemVBcnJvd0Z1bmN0aW9uQ29udGV4dFNjb3BlSWZOZWVkZWQoU3ltYm9s
VGFibGUqID0gbnVsbHB0cik7CisgICAgICAgIHZvaWQgaW5pdGlhbGl6ZVZhckxleGljYWxFbnZp
cm9ubWVudChpbnQgc3ltYm9sVGFibGVDb25zdGFudEluZGV4LCBTeW1ib2xUYWJsZSogZnVuY3Rp
b25TeW1ib2xUYWJsZSwgYm9vbCBoYXNDYXB0dXJlZFZhcmlhYmxlcyk7CisgICAgICAgIHZvaWQg
aW5pdGlhbGl6ZURlZmF1bHRQYXJhbWV0ZXJWYWx1ZXNBbmRTZXR1cEZ1bmN0aW9uU2NvcGVTdGFj
ayhGdW5jdGlvblBhcmFtZXRlcnMmLCBib29sIGlzU2ltcGxlUGFyYW1ldGVyTGlzdCwgRnVuY3Rp
b25Ob2RlKiwgU3ltYm9sVGFibGUqLCBpbnQgc3ltYm9sVGFibGVDb25zdGFudEluZGV4LCBjb25z
dCBzdGQ6OmZ1bmN0aW9uPGJvb2wgKFVuaXF1ZWRTdHJpbmdJbXBsKik+JiBjYXB0dXJlcywgYm9v
bCBzaG91bGRDcmVhdGVBcmd1bWVudHNWYXJpYWJsZUluUGFyYW1ldGVyU2NvcGUpOworICAgICAg
ICB2b2lkIGluaXRpYWxpemVBcnJvd0Z1bmN0aW9uQ29udGV4dFNjb3BlSWZOZWVkZWQoKTsKIAog
ICAgIHB1YmxpYzoKICAgICAgICAgSlNTdHJpbmcqIGFkZFN0cmluZ0NvbnN0YW50KGNvbnN0IElk
ZW50aWZpZXImKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvYXJy
b3ctZnVuY3Rpb25zLWFzLWRlZmF1bHQtcGFyYW1ldGVyLXZhbHVlcy5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2Fycm93LWZ1bmN0aW9ucy1hcy1k
ZWZhdWx0LXBhcmFtZXRlci12YWx1ZXMuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvdGVzdHMvc3RyZXNzL2Fycm93LWZ1bmN0aW9ucy1hcy1kZWZhdWx0LXBhcmFtZXRl
ci12YWx1ZXMuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjggQEAKK2Z1bmN0aW9uIGFz
c2VydChiKSB7CisgICAgaWYgKCFiKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJhZCBhc3Nl
cnRpb24iKQorfQorZnVuY3Rpb24gdGVzdChmLCBuID0gMTAwMCkgeworICAgIGZvciAobGV0IGkg
PSAwOyBpIDwgbjsgaSsrKQorICAgICAgICBmKCk7Cit9CisKK3Rlc3QoZnVuY3Rpb24oKSB7Cisg
ICAgZnVuY3Rpb24gZm9vKHggPSAoKT0+dGhpcykgeworICAgICAgICByZXR1cm4geCgpOworICAg
IH0KKyAgICBsZXQgbyA9IHt9OworICAgIGFzc2VydChmb28uY2FsbChvKSA9PT0gbyk7Cit9KQor
Cit0ZXN0KGZ1bmN0aW9uKCkgeworICAgIGZ1bmN0aW9uIGZvbyh4ID0gKCk9PmFyZ3VtZW50cykg
eworICAgICAgICBhc3NlcnQoeCgpID09PSBhcmd1bWVudHMpOworICAgIH0KKyAgICBmb28oKTsK
K30pCisKK3Rlc3QoZnVuY3Rpb24oKSB7CisgICAgZnVuY3Rpb24gZm9vKHt4ID0gKCk9PmFyZ3Vt
ZW50c30pIHsKKyAgICAgICAgYXNzZXJ0KHgoKSA9PT0gYXJndW1lbnRzKTsKKyAgICB9CisgICAg
Zm9vKHt4OnVuZGVmaW5lZH0pOworfSkKKwordGVzdChmdW5jdGlvbigpIHsKKyAgICBmdW5jdGlv
biBmb28oeCA9ICgpPT5hcmd1bWVudHMpIHsKKyAgICAgICAgbGV0IGEgPSB4KCk7CisgICAgICAg
IGFzc2VydChhLmxlbmd0aCA9PT0gMyk7CisgICAgICAgIGFzc2VydChhWzBdID09PSB1bmRlZmlu
ZWQpOworICAgICAgICBhc3NlcnQoYVsxXSA9PT0gMjApOworICAgICAgICBhc3NlcnQoYVsyXSA9
PT0gNDApOworICAgIH0KKyAgICBmb28odW5kZWZpbmVkLCAyMCwgNDApOworfSkKKwordGVzdChm
dW5jdGlvbigpIHsKKyAgICBmdW5jdGlvbiBmb28oeCA9ICgpPT5uZXcudGFyZ2V0KSB7CisgICAg
ICAgIGFzc2VydCh4KCkgPT09IGZvbyk7CisgICAgfQorICAgIG5ldyBmb28odW5kZWZpbmVkKTsK
K30pCisKK3Rlc3QoZnVuY3Rpb24oKSB7CisgICAgZnVuY3Rpb24gZm9vKHt4ID0gKCk9Pm5ldy50
YXJnZXR9KSB7CisgICAgICAgIGFzc2VydCh4KCkgPT09IGZvbyk7CisgICAgfQorICAgIG5ldyBm
b28oe30pOworfSkKKwordGVzdChmdW5jdGlvbigpIHsKKyAgICBmdW5jdGlvbiBmb28oeCA9ICgp
PT5hcmd1bWVudHMpIHsKKyAgICAgICAgdmFyIGFyZ3VtZW50czsKKyAgICAgICAgYXNzZXJ0KHgo
KSA9PT0gYXJndW1lbnRzKTsKKyAgICB9CisgICAgZm9vKHVuZGVmaW5lZCk7Cit9KTsKKwordGVz
dChmdW5jdGlvbigpIHsKKyAgICBmdW5jdGlvbiBmb28oeCA9ICgpPT5hcmd1bWVudHMpIHsKKyAg
ICAgICAgdmFyIGFyZ3VtZW50cyA9IDI1OworICAgICAgICBhc3NlcnQoeCgpID09PSBhcmd1bWVu
dHMpOworICAgIH0KKyAgICBmb28odW5kZWZpbmVkKTsKK30pOworCit0ZXN0KGZ1bmN0aW9uKCkg
eworICAgIGZ1bmN0aW9uIGZvbyh4ID0gKHkgPSAoKT0+YXJndW1lbnRzKT0+eSgpKSB7CisgICAg
ICAgIGFzc2VydCh4KCkgPT09IGFyZ3VtZW50cyk7CisgICAgfQorICAgIGZvbyh1bmRlZmluZWQp
OworfSk7CisKK3Rlc3QoZnVuY3Rpb24oKSB7CisgICAgZnVuY3Rpb24gZm9vKHt4ID0gKHkgPSAo
KT0+YXJndW1lbnRzKT0+eSgpfSkgeworICAgICAgICBhc3NlcnQoeCgpID09PSBhcmd1bWVudHMp
OworICAgIH0KKyAgICBmb28oe30pOworfSk7CisKK3Rlc3QoZnVuY3Rpb24oKSB7CisgICAgZnVu
Y3Rpb24gZm9vKHggPSAoeSA9ICgpPT50aGlzKT0+eSgpKSB7CisgICAgICAgIHJldHVybiB4KCk7
CisgICAgfQorICAgIGxldCBvID0ge307CisgICAgZm9vLmNhbGwobyk7Cit9KTsKKwordGVzdChm
dW5jdGlvbigpIHsKKyAgICBmdW5jdGlvbiBmb28oeCA9ICh5ID0gKCk9Pm5ldy50YXJnZXQpPT55
KCkpIHsKKyAgICAgICAgYXNzZXJ0KHgoKSA9PT0gZm9vKTsKKyAgICB9CisgICAgbmV3IGZvbygp
OworfSk7CisKK3Rlc3QoZnVuY3Rpb24oKSB7CisgICAgZnVuY3Rpb24gZm9vKHggPSAoeSA9ICgp
PT5uZXcudGFyZ2V0KT0+eSgpKSB7CisgICAgICAgIGFzc2VydCh4KCkgPT09IHVuZGVmaW5lZCk7
CisgICAgfQorICAgIGZvbygpOworfSk7CisKKy8vIEZJWE1FOiBPdXIgcGFyc2VyIHRocm93cyBh
IHN5bnRheCBlcnJvciBoZXJlIGJ1dCBpdCBzaG91bGQgbm90LgorLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1Nzg3MgorLyoKK3Rlc3QoZnVuY3Rpb24oKSB7Cisg
ICAgY2xhc3MgQyB7CisgICAgICAgIGNvbnN0cnVjdG9yKCkgeyB0aGlzLl94ID0gNDU7IH0KKyAg
ICAgICAgZ2V0IGZvbygpIHsgcmV0dXJuIHRoaXMuX3g7fQorICAgIH0KKyAgICBjbGFzcyBEIGV4
dGVuZHMgQyB7CisgICAgICAgIC8vY29uc3RydWN0b3IoeCA9ICgpPT5zdXBlci5mb28pIHsKKyAg
ICAgICAgLy8gICAgc3VwZXIoKTsKKyAgICAgICAgLy8gICAgYXNzZXJ0KHgoKSA9PT0gNDUpOwor
ICAgICAgICAvL30KKyAgICAgICAgeCh4ID0gKCk9PnN1cGVyLmZvbykgeworICAgICAgICAgICAg
cmV0dXJuIHgoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAvLyhuZXcgRCkueCgpOworfSk7Cisq
LwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9vcC1wdXNoLW5hbWUt
c2NvcGUtY3Jhc2hlcy1wcm9maWxlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvdGVzdHMvc3RyZXNzL29wLXB1c2gtbmFtZS1zY29wZS1jcmFzaGVzLXByb2ZpbGVyLmpz
CShyZXZpc2lvbiAyMDEwNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNz
L29wLXB1c2gtbmFtZS1zY29wZS1jcmFzaGVzLXByb2ZpbGVyLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC04LDEwICs4LDEwIEBAIGZ1bmN0aW9uIHRlc3QoKSB7CiAgICAgIH0pKGFyZ3VtZW50c1swXSk7
CiB9CiAKLWZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworZm9yICh2YXIgaSA9IDA7
IGkgPCAxMDAwOyArK2kpIHsKICAgICBjb3VudGVyID0gMDsKICAgICB0ZXN0KDEwMCk7CiAgICAg
aWYgKGNvdW50ZXIgIT09IDEwMSkgewogICAgICAgICB0aHJvdyAiT29wcywgdGVzdCgxMDApID0g
IiArIHRlc3QoMTAwKSArICIsIGV4cGVjdGVkIDEwMS4iOwogICAgIH0KLX0KXCBObyBuZXdsaW5l
IGF0IGVuZCBvZiBmaWxlCit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>279328</attachid>
            <date>2016-05-18 17:56:35 -0700</date>
            <delta_ts>2016-05-18 18:26:50 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>21622</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjAxMTE0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQzIEBA
CisyMDE2LTA1LTE4ICBTYWFtIGJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IEZ1bmN0aW9uIHdpdGggZGVmYXVsdCBwYXJhbWV0ZXIgdmFsdWVzIHRoYXQgYXJlIGFycm93IGZ1
bmN0aW9ucyB0aGF0IGNhcHR1cmUgdGhpcyBpc24ndCB3b3JraW5nCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTc3ODYKKyAgICAgICAgPHJkYXI6Ly9w
cm9ibGVtLzI2MzI3MzI5PgorCisgICAgICAgIFJldmlld2VkIGJ5IEdlb2ZmcmV5IEdhcmVuLgor
CisgICAgICAgIFRvIG1ha2UgdGhlIHNjb3BlcyBvcmRlcmVkIHByb3Blcmx5LCBJIG5lZWRlZCB0
byBpbml0aWFsaXplIHRoZSBhcnJvdyAKKyAgICAgICAgZnVuY3Rpb24gbGV4aWNhbCBlbnZpcm9u
bWVudCBiZWZvcmUgaW5pdGlhbGl6aW5nIGRlZmF1bHQgcGFyYW1ldGVyIHZhbHVlcy4KKyAgICAg
ICAgSSBhbHNvIG1hZGUgdGhlIGNvZGUgZWFzaWVyIHRvIHJlYXNvbiBhYm91dCBieSBuZXZlciBy
ZXVzaW5nIHRoZSBmdW5jdGlvbidzCisgICAgICAgIHZhciBsZXhpY2FsIGVudmlyb25tZW50IGZv
ciB0aGUgYXJyb3cgZnVuY3Rpb24gbGV4aWNhbCBlbnZpcm9ubWVudC4gVGhlCisgICAgICAgIHJl
YXNvbiBmb3IgdGhpcyBpcyB0aGF0IHRoYXQgY29kZSB3YXMgd3JvbmcsIGFuZCB3ZSBqdXN0IGRp
ZG4ndCBoYXZlIGNvZGUgdG8KKyAgICAgICAgdGhhdCBwcm9wZXJseSB0ZXN0ZWQgaXQuIEl0IHdh
cyBlYXN5IGZvciB0aGF0IGNvZGUgdG8gYmUgd3JvbmcgYmVjYXVzZQorICAgICAgICBzb21ldGlt
ZXMgdGhlIGZ1bmN0aW9uJ3MgbGV4aWNhbCBlbnZpcm9ubWVudCBpc24ndCB0aGUgdG9wLW1vc3Qg
c2NvcGUKKyAgICAgICAgKG5hbWVseSwgd2hlbiBhIGZ1bmN0aW9uJ3MgcGFyYW1ldGVyIGxpc3Qg
aXMgbm9uLXNpbXBsZSkgYW5kIHNvbWV0aW1lcworICAgICAgICBpdCBpcyAod2hlbiB0aGUgZnVu
Y3Rpb24ncyBwYXJhbWV0ZXIgbGlzdCBpcyBzaW1wbGUpLgorCisgICAgICAgIEFsc28sIGJlY2F1
c2UgYSBmdW5jdGlvbidzIGRlZmF1bHQgcGFyYW1ldGVyIHZhbHVlcyBtYXkgY2FwdHVyZSB0aGUK
KyAgICAgICAgJ2FyZ3VtZW50cycgdmFyaWFibGUgaW5zaWRlIGFuIGFycm93IGZ1bmN0aW9uLCBJ
IG5lZWRlZCB0byB0YWtlIGNhcmUKKyAgICAgICAgdG8gaW5pdGlhbGl6ZSB0aGUgJ2FyZ3VtZW50
cycgdmFyaWFibGUgYXMgcGFydCBvZiB3aGljaGV2ZXIgc2NvcGUKKyAgICAgICAgaXMgdGhlIHRv
cC1tb3N0IHNjb3BlLiBJdCdzIGVpdGhlciB0aGUgZnVuY3Rpb24ncyB2YXIgZW52aXJvbm1lbnQK
KyAgICAgICAgaWYgdGhlIHBhcmFtZXRlciBsaXN0IGlzIHNpbXBsZSwgb3IgaXQncyB0aGUgZnVu
Y3Rpb24ncyBwYXJhbWV0ZXIKKyAgICAgICAgZW52aXJvbm1lbnQgaWYgdGhlIHBhcmFtZXRlciBs
aXN0IGlzIG5vbi1zaW1wbGUuCisKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5l
cmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5l
cmF0b3IpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6aW5pdGlhbGl6ZURlZmF1
bHRQYXJhbWV0ZXJWYWx1ZXNBbmRTZXR1cEZ1bmN0aW9uU2NvcGVTdGFjayk6CisgICAgICAgIChK
U0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjppbml0aWFsaXplQXJyb3dGdW5jdGlvbkNvbnRleHRTY29w
ZUlmTmVlZGVkKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmluaXRpYWxpemVQ
YXJhbWV0ZXJzKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmluaXRpYWxpemVW
YXJMZXhpY2FsRW52aXJvbm1lbnQpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6
dmlzaWJsZU5hbWVGb3JQYXJhbWV0ZXIpOgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29k
ZUdlbmVyYXRvci5oOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9hcnJvdy1mdW5jdGlvbnMtYXMt
ZGVmYXVsdC1wYXJhbWV0ZXItdmFsdWVzLmpzOiBBZGRlZC4KKyAgICAgICAgKGFzc2VydCk6Cisg
ICAgICAgICh0ZXN0KToKKyAgICAgICAgKHRlc3QuZm9vKToKKyAgICAgICAgKiB0ZXN0cy9zdHJl
c3Mvb3AtcHVzaC1uYW1lLXNjb3BlLWNyYXNoZXMtcHJvZmlsZXIuanM6CisgICAgICAgICh0ZXN0
KToKKwogMjAxNi0wNS0xOCAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KIAog
ICAgICAgICByMTk5ODEyIGJyb2tlIHRlc3QyNjIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZp
c2lvbiAyMDEwNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVj
b2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIxLDE0ICszMjEsMTQgQEAgQnl0
ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogICAgICAgICBlbWl0UHVzaEZ1
bmN0aW9uTmFtZVNjb3BlKGZ1bmN0aW9uTm9kZS0+aWRlbnQoKSwgJm1fY2FsbGVlUmVnaXN0ZXIs
IG1hcmtBc0NhcHR1cmVkKTsKICAgICB9CiAKLSAgICBpZiAoc2hvdWxkQ2FwdHVyZVNvbWVPZlRo
ZVRoaW5ncykgeworICAgIGlmIChzaG91bGRDYXB0dXJlU29tZU9mVGhlVGhpbmdzKQogICAgICAg
ICBtX2xleGljYWxFbnZpcm9ubWVudFJlZ2lzdGVyID0gYWRkVmFyKCk7Ci0gICAgICAgIC8vIFdl
IGNhbiBhbGxvY2F0ZSB0aGUgInZhciIgZW52aXJvbm1lbnQgaWYgd2UgZG9uJ3QgaGF2ZSBkZWZh
dWx0IHBhcmFtZXRlciBleHByZXNzaW9ucy4gSWYgd2UgaGF2ZQotICAgICAgICAvLyBkZWZhdWx0
IHBhcmFtZXRlciBleHByZXNzaW9ucywgd2UgaGF2ZSB0byBob2xkIG9mZiBvbiBhbGxvY2F0aW5n
IHRoZSAidmFyIiBlbnZpcm9ubWVudCBiZWNhdXNlCi0gICAgICAgIC8vIHRoZSBwYXJlbnQgc2Nv
cGUgb2YgdGhlICJ2YXIiIGVudmlyb25tZW50IGlzIHRoZSBwYXJhbWV0ZXIgZW52aXJvbm1lbnQu
Ci0gICAgICAgIGlmIChpc1NpbXBsZVBhcmFtZXRlckxpc3QpCi0gICAgICAgICAgICBpbml0aWFs
aXplVmFyTGV4aWNhbEVudmlyb25tZW50KHN5bWJvbFRhYmxlQ29uc3RhbnRJbmRleCk7Ci0gICAg
fQorCisgICAgLy8gV2UgY2FuIGFsbG9jYXRlIHRoZSAidmFyIiBlbnZpcm9ubWVudCBpZiB3ZSBk
b24ndCBoYXZlIGRlZmF1bHQgcGFyYW1ldGVyIGV4cHJlc3Npb25zLiBJZiB3ZSBoYXZlCisgICAg
Ly8gZGVmYXVsdCBwYXJhbWV0ZXIgZXhwcmVzc2lvbnMsIHdlIGhhdmUgdG8gaG9sZCBvZmYgb24g
YWxsb2NhdGluZyB0aGUgInZhciIgZW52aXJvbm1lbnQgYmVjYXVzZQorICAgIC8vIHRoZSBwYXJl
bnQgc2NvcGUgb2YgdGhlICJ2YXIiIGVudmlyb25tZW50IGlzIHRoZSBwYXJhbWV0ZXIgZW52aXJv
bm1lbnQuCisgICAgaWYgKGlzU2ltcGxlUGFyYW1ldGVyTGlzdCkKKyAgICAgICAgaW5pdGlhbGl6
ZVZhckxleGljYWxFbnZpcm9ubWVudChzeW1ib2xUYWJsZUNvbnN0YW50SW5kZXgsIGZ1bmN0aW9u
U3ltYm9sVGFibGUsIHNob3VsZENhcHR1cmVTb21lT2ZUaGVUaGluZ3MpOwogCiAgICAgLy8gRmln
dXJlIG91dCBzb21lIGludGVyZXN0aW5nIGZhY3RzIGFib3V0IG91ciBhcmd1bWVudHMuCiAgICAg
Ym9vbCBjYXB0dXJlc0FueUFyZ3VtZW50QnlOYW1lID0gZmFsc2U7CkBAIC00NTIsMTkgKzQ1Miw2
IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYKICAgICAgICAgaW5z
dHJ1Y3Rpb25zKCkuYXBwZW5kKG1fYXJndW1lbnRzUmVnaXN0ZXItPmluZGV4KCkpOwogICAgIH0K
ICAgICAKLSAgICBmb3IgKEZ1bmN0aW9uTWV0YWRhdGFOb2RlKiBmdW5jdGlvbiA6IGZ1bmN0aW9u
Tm9kZS0+ZnVuY3Rpb25TdGFjaygpKSB7Ci0gICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50
ID0gZnVuY3Rpb24tPmlkZW50KCk7Ci0gICAgICAgIGNyZWF0ZVZhcmlhYmxlKGlkZW50LCB2YXJL
aW5kKGlkZW50LmltcGwoKSksIGZ1bmN0aW9uU3ltYm9sVGFibGUpOwotICAgICAgICBtX2Z1bmN0
aW9uc1RvSW5pdGlhbGl6ZS5hcHBlbmQoc3RkOjptYWtlX3BhaXIoZnVuY3Rpb24sIE5vcm1hbEZ1
bmN0aW9uVmFyaWFibGUpKTsKLSAgICB9Ci0gICAgZm9yIChhdXRvJiBlbnRyeSA6IGZ1bmN0aW9u
Tm9kZS0+dmFyRGVjbGFyYXRpb25zKCkpIHsKLSAgICAgICAgQVNTRVJUKCFlbnRyeS52YWx1ZS5p
c0xldCgpICYmICFlbnRyeS52YWx1ZS5pc0NvbnN0KCkpOwotICAgICAgICBpZiAoIWVudHJ5LnZh
bHVlLmlzVmFyKCkpIC8vIFRoaXMgaXMgZWl0aGVyIGEgcGFyYW1ldGVyIG9yIGNhbGxlZS4KLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAvLyBWYXJpYWJsZXMgbmFtZWQgImFyZ3VtZW50
cyIgYXJlIG5ldmVyIGNvbnN0LgotICAgICAgICBjcmVhdGVWYXJpYWJsZShJZGVudGlmaWVyOjpm
cm9tVWlkKG1fdm0sIGVudHJ5LmtleS5nZXQoKSksIHZhcktpbmQoZW50cnkua2V5LmdldCgpKSwg
ZnVuY3Rpb25TeW1ib2xUYWJsZSwgSWdub3JlRXhpc3RpbmcpOwotICAgIH0KLQogICAgIC8vIFRo
ZXJlIGFyZSBzb21lIHZhcmlhYmxlcyB0aGF0IG5lZWQgdG8gYmUgcHJlaW5pdGlhbGl6ZWQgdG8g
c29tZXRoaW5nIG90aGVyIHRoYW4gVW5kZWZpbmVkOgogICAgIC8vCiAgICAgLy8gLSAiYXJndW1l
bnRzIjogdW5sZXNzIGl0J3MgdXNlZCBhcyBhIGZ1bmN0aW9uIG9yIHBhcmFtZXRlciwgdGhpcyBz
aG91bGQgcmVmZXIgdG8gdGhlCkBAIC00ODYsNiArNDczLDcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6
OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogICAgIAogICAgIC8vIFRoaXMgaXMgb3VyIGZpbmFsIGFj
dCBvZiB3ZWlyZG5lc3MuICJhcmd1bWVudHMiIGlzIG92ZXJyaWRkZW4gYnkgZXZlcnl0aGluZyBl
eGNlcHQgdGhlCiAgICAgLy8gY2FsbGVlLiBXZSBhZGQgaXQgdG8gdGhlIHN5bWJvbCB0YWJsZSBp
ZiBpdCdzIG5vdCBhbHJlYWR5IHRoZXJlIGFuZCBpdCdzIG5vdCBhbiBhcmd1bWVudC4KKyAgICBi
b29sIHNob3VsZENyZWF0ZUFyZ3VtZW50c1ZhcmlhYmxlSW5QYXJhbWV0ZXJTY29wZSA9IGZhbHNl
OwogICAgIGlmIChuZWVkc0FyZ3VtZW50cykgewogICAgICAgICAvLyBJZiAiYXJndW1lbnRzIiBp
cyBvdmVycmlkZGVuIGJ5IGEgZnVuY3Rpb24gb3IgZGVzdHJ1Y3R1cmluZyBwYXJhbWV0ZXIgbmFt
ZSwgdGhlbiBpdCdzCiAgICAgICAgIC8vIE9LIGZvciB1cyB0byBjYWxsIGNyZWF0ZVZhcmlhYmxl
KCkgYmVjYXVzZSBpdCB3b24ndCBjaGFuZ2UgYW55dGhpbmcuIEl0J3MgYWxzbyBPSyBmb3IKQEAg
LTUwNCw4ICs0OTIsMTAgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZN
JgogICAgICAgICAgICAgfQogICAgICAgICB9CiAKKyAgICAgICAgYm9vbCBzaG91bGRDcmVhdGVB
cmd1bWVuc1ZhcmlhYmxlID0gIWhhdmVQYXJhbWV0ZXJOYW1lZEFyZ3VtZW50cyAmJiAhbV9jb2Rl
QmxvY2stPmlzQXJyb3dGdW5jdGlvbigpOworICAgICAgICBzaG91bGRDcmVhdGVBcmd1bWVudHNW
YXJpYWJsZUluUGFyYW1ldGVyU2NvcGUgPSBzaG91bGRDcmVhdGVBcmd1bWVuc1ZhcmlhYmxlICYm
ICFpc1NpbXBsZVBhcmFtZXRlckxpc3Q7CiAgICAgICAgIC8vIERvIG5vdCBjcmVhdGUgYXJndW1l
bnRzIHZhcmlhYmxlIGluIGNhc2Ugb2YgQXJyb3cgZnVuY3Rpb24uIFZhbHVlIHdpbGwgYmUgbG9h
ZGVkIGZyb20gcGFyZW50IHNjb3BlCi0gICAgICAgIGlmICghaGF2ZVBhcmFtZXRlck5hbWVkQXJn
dW1lbnRzICYmICFtX2NvZGVCbG9jay0+aXNBcnJvd0Z1bmN0aW9uKCkpIHsKKyAgICAgICAgaWYg
KHNob3VsZENyZWF0ZUFyZ3VtZW5zVmFyaWFibGUgJiYgIXNob3VsZENyZWF0ZUFyZ3VtZW50c1Zh
cmlhYmxlSW5QYXJhbWV0ZXJTY29wZSkgewogICAgICAgICAgICAgY3JlYXRlVmFyaWFibGUoCiAg
ICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cywgdmFyS2luZChwcm9wZXJ0
eU5hbWVzKCkuYXJndW1lbnRzLmltcGwoKSksIGZ1bmN0aW9uU3ltYm9sVGFibGUpOwogCkBAIC01
MTMsNiArNTAzLDIxIEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYK
ICAgICAgICAgfQogICAgIH0KIAorICAgIGZvciAoRnVuY3Rpb25NZXRhZGF0YU5vZGUqIGZ1bmN0
aW9uIDogZnVuY3Rpb25Ob2RlLT5mdW5jdGlvblN0YWNrKCkpIHsKKyAgICAgICAgY29uc3QgSWRl
bnRpZmllciYgaWRlbnQgPSBmdW5jdGlvbi0+aWRlbnQoKTsKKyAgICAgICAgY3JlYXRlVmFyaWFi
bGUoaWRlbnQsIHZhcktpbmQoaWRlbnQuaW1wbCgpKSwgZnVuY3Rpb25TeW1ib2xUYWJsZSk7Cisg
ICAgICAgIG1fZnVuY3Rpb25zVG9Jbml0aWFsaXplLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihmdW5j
dGlvbiwgTm9ybWFsRnVuY3Rpb25WYXJpYWJsZSkpOworICAgIH0KKyAgICBmb3IgKGF1dG8mIGVu
dHJ5IDogZnVuY3Rpb25Ob2RlLT52YXJEZWNsYXJhdGlvbnMoKSkgeworICAgICAgICBBU1NFUlQo
IWVudHJ5LnZhbHVlLmlzTGV0KCkgJiYgIWVudHJ5LnZhbHVlLmlzQ29uc3QoKSk7CisgICAgICAg
IGlmICghZW50cnkudmFsdWUuaXNWYXIoKSkgLy8gVGhpcyBpcyBlaXRoZXIgYSBwYXJhbWV0ZXIg
b3IgY2FsbGVlLgorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChzaG91bGRDcmVh
dGVBcmd1bWVudHNWYXJpYWJsZUluUGFyYW1ldGVyU2NvcGUgJiYgZW50cnkua2V5LmdldCgpID09
IHByb3BlcnR5TmFtZXMoKS5hcmd1bWVudHMuaW1wbCgpKQorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIGNyZWF0ZVZhcmlhYmxlKElkZW50aWZpZXI6OmZyb21VaWQobV92bSwgZW50cnku
a2V5LmdldCgpKSwgdmFyS2luZChlbnRyeS5rZXkuZ2V0KCkpLCBmdW5jdGlvblN5bWJvbFRhYmxl
LCBJZ25vcmVFeGlzdGluZyk7CisgICAgfQorCisKICAgICBtX25ld1RhcmdldFJlZ2lzdGVyID0g
YWRkVmFyKCk7CiAgICAgc3dpdGNoIChwYXJzZU1vZGUpIHsKICAgICBjYXNlIFNvdXJjZVBhcnNl
TW9kZTo6R2VuZXJhdG9yV3JhcHBlckZ1bmN0aW9uTW9kZTogewpAQCAtNTY5LDEwICs1NzQsMTcg
QEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogICAgICAgICAgICAg
ZW1pdExvYWROZXdUYXJnZXRGcm9tQXJyb3dGdW5jdGlvbkxleGljYWxFbnZpcm9ubWVudCgpOwog
ICAgIH0KIAorICAgIGlmIChuZWVkc1RvVXBkYXRlQXJyb3dGdW5jdGlvbkNvbnRleHQoKSAmJiAh
Y29kZUJsb2NrLT5pc0Fycm93RnVuY3Rpb24oKSkgeworICAgICAgICBpbml0aWFsaXplQXJyb3dG
dW5jdGlvbkNvbnRleHRTY29wZUlmTmVlZGVkKCk7CisgICAgICAgIGVtaXRQdXRUaGlzVG9BcnJv
d0Z1bmN0aW9uQ29udGV4dFNjb3BlKCk7CisgICAgICAgIGVtaXRQdXROZXdUYXJnZXRUb0Fycm93
RnVuY3Rpb25Db250ZXh0U2NvcGUoKTsKKyAgICAgICAgZW1pdFB1dERlcml2ZWRDb25zdHJ1Y3Rv
clRvQXJyb3dGdW5jdGlvbkNvbnRleHRTY29wZSgpOworICAgIH0KKwogICAgIC8vIEFsbCAiYWRk
VmFyKCkicyBuZWVkcyB0byBoYXBwZW4gYmVmb3JlICJpbml0aWFsaXplRGVmYXVsdFBhcmFtZXRl
clZhbHVlc0FuZFNldHVwRnVuY3Rpb25TY29wZVN0YWNrKCkiIGlzIGNhbGxlZAogICAgIC8vIGJl
Y2F1c2UgYSBmdW5jdGlvbidzIGRlZmF1bHQgcGFyYW1ldGVyIEV4cHJlc3Npb25Ob2RlcyB3aWxs
IHVzZSB0ZW1wb3JhcnkgcmVnaXN0ZXJzLgogICAgIHB1c2hURFpWYXJpYWJsZXMoKnBhcmVudFNj
b3BlVERaVmFyaWFibGVzLCBURFpDaGVja09wdGltaXphdGlvbjo6RG9Ob3RPcHRpbWl6ZSk7Ci0g
ICAgaW5pdGlhbGl6ZURlZmF1bHRQYXJhbWV0ZXJWYWx1ZXNBbmRTZXR1cEZ1bmN0aW9uU2NvcGVT
dGFjayhwYXJhbWV0ZXJzLCBpc1NpbXBsZVBhcmFtZXRlckxpc3QsIGZ1bmN0aW9uTm9kZSwgZnVu
Y3Rpb25TeW1ib2xUYWJsZSwgc3ltYm9sVGFibGVDb25zdGFudEluZGV4LCBjYXB0dXJlcyk7Cisg
ICAgaW5pdGlhbGl6ZURlZmF1bHRQYXJhbWV0ZXJWYWx1ZXNBbmRTZXR1cEZ1bmN0aW9uU2NvcGVT
dGFjayhwYXJhbWV0ZXJzLCBpc1NpbXBsZVBhcmFtZXRlckxpc3QsIGZ1bmN0aW9uTm9kZSwgZnVu
Y3Rpb25TeW1ib2xUYWJsZSwgc3ltYm9sVGFibGVDb25zdGFudEluZGV4LCBjYXB0dXJlcywgc2hv
dWxkQ3JlYXRlQXJndW1lbnRzVmFyaWFibGVJblBhcmFtZXRlclNjb3BlKTsKICAgICAKICAgICAv
LyBJZiB3ZSBkb24ndCBoYXZlICBkZWZhdWx0IHBhcmFtZXRlciBleHByZXNzaW9uLCB0aGVuIGxv
YWRpbmcgfHRoaXN8IGluc2lkZSBhbiBhcnJvdyBmdW5jdGlvbiBtdXN0IGJlIGRvbmUKICAgICAv
LyBhZnRlciBpbml0aWFsaXplRGVmYXVsdFBhcmFtZXRlclZhbHVlc0FuZFNldHVwRnVuY3Rpb25T
Y29wZVN0YWNrKCkgYmVjYXVzZSB0aGF0IGZ1bmN0aW9uIHNldHMgdXAgdGhlCkBAIC01ODUsMTMg
KzU5Nyw2IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYKICAgICAg
ICAgICAgIGVtaXRMb2FkTmV3VGFyZ2V0RnJvbUFycm93RnVuY3Rpb25MZXhpY2FsRW52aXJvbm1l
bnQoKTsKICAgICB9CiAgICAgCi0gICAgaWYgKG5lZWRzVG9VcGRhdGVBcnJvd0Z1bmN0aW9uQ29u
dGV4dCgpICYmICFjb2RlQmxvY2stPmlzQXJyb3dGdW5jdGlvbigpKSB7Ci0gICAgICAgIGluaXRp
YWxpemVBcnJvd0Z1bmN0aW9uQ29udGV4dFNjb3BlSWZOZWVkZWQoZnVuY3Rpb25TeW1ib2xUYWJs
ZSk7Ci0gICAgICAgIGVtaXRQdXRUaGlzVG9BcnJvd0Z1bmN0aW9uQ29udGV4dFNjb3BlKCk7Ci0g
ICAgICAgIGVtaXRQdXROZXdUYXJnZXRUb0Fycm93RnVuY3Rpb25Db250ZXh0U2NvcGUoKTsKLSAg
ICAgICAgZW1pdFB1dERlcml2ZWRDb25zdHJ1Y3RvclRvQXJyb3dGdW5jdGlvbkNvbnRleHRTY29w
ZSgpOwotICAgIH0KLQogICAgIGJvb2wgc2hvdWxkSW5pdGlhbGl6ZUJsb2NrU2NvcGVkRnVuY3Rp
b25zID0gZmFsc2U7IC8vIFdlIGdlbmVyYXRlIHRvcC1sZXZlbCBmdW5jdGlvbiBkZWNsYXJhdGlv
bnMgaW4gOjpnZW5lcmF0ZSgpLgogICAgIHB1c2hMZXhpY2FsU2NvcGUobV9zY29wZU5vZGUsIFRE
WkNoZWNrT3B0aW1pemF0aW9uOjpPcHRpbWl6ZSwgTmVzdGVkU2NvcGVUeXBlOjpJc05vdE5lc3Rl
ZCwgbnVsbHB0ciwgc2hvdWxkSW5pdGlhbGl6ZUJsb2NrU2NvcGVkRnVuY3Rpb25zKTsKIH0KQEAg
LTgwNSw5ICs4MTAsMTAgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6On5CeXRlY29kZUdlbmVyYXRvcigp
CiAKIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmluaXRpYWxpemVEZWZhdWx0UGFyYW1ldGVyVmFs
dWVzQW5kU2V0dXBGdW5jdGlvblNjb3BlU3RhY2soCiAgICAgRnVuY3Rpb25QYXJhbWV0ZXJzJiBw
YXJhbWV0ZXJzLCBib29sIGlzU2ltcGxlUGFyYW1ldGVyTGlzdCwgRnVuY3Rpb25Ob2RlKiBmdW5j
dGlvbk5vZGUsIFN5bWJvbFRhYmxlKiBmdW5jdGlvblN5bWJvbFRhYmxlLCAKLSAgICBpbnQgc3lt
Ym9sVGFibGVDb25zdGFudEluZGV4LCBjb25zdCBzdGQ6OmZ1bmN0aW9uPGJvb2wgKFVuaXF1ZWRT
dHJpbmdJbXBsKik+JiBjYXB0dXJlcykKKyAgICBpbnQgc3ltYm9sVGFibGVDb25zdGFudEluZGV4
LCBjb25zdCBzdGQ6OmZ1bmN0aW9uPGJvb2wgKFVuaXF1ZWRTdHJpbmdJbXBsKik+JiBjYXB0dXJl
cywgYm9vbCBzaG91bGRDcmVhdGVBcmd1bWVudHNWYXJpYWJsZUluUGFyYW1ldGVyU2NvcGUpCiB7
CiAgICAgVmVjdG9yPHN0ZDo6cGFpcjxJZGVudGlmaWVyLCBSZWZQdHI8UmVnaXN0ZXJJRD4+PiB2
YWx1ZXNUb01vdmVJbnRvVmFyczsKKyAgICBBU1NFUlQoIShpc1NpbXBsZVBhcmFtZXRlckxpc3Qg
JiYgc2hvdWxkQ3JlYXRlQXJndW1lbnRzVmFyaWFibGVJblBhcmFtZXRlclNjb3BlKSk7CiAgICAg
aWYgKCFpc1NpbXBsZVBhcmFtZXRlckxpc3QpIHsKICAgICAgICAgLy8gUmVmZXIgdG8gdGhlIEVT
NiBzcGVjIHNlY3Rpb24gOS4yLjEyOiBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcv
ZWNtYS0yNjIvNi4wL2luZGV4Lmh0bWwjc2VjLWZ1bmN0aW9uZGVjbGFyYXRpb25pbnN0YW50aWF0
aW9uCiAgICAgICAgIC8vIFRoaXMgaW1wbGVtZW50cyBzdGVwIDIxLgpAQCAtODE1LDYgKzgyMSw4
IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmluaXRpYWxpemVEZWZhdWwKICAgICAgICAgVmVj
dG9yPElkZW50aWZpZXI+IGFsbFBhcmFtZXRlck5hbWVzOyAKICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHBhcmFtZXRlcnMuc2l6ZSgpOyBpKyspCiAgICAgICAgICAgICBwYXJhbWV0
ZXJzLmF0KGkpLmZpcnN0LT5jb2xsZWN0Qm91bmRJZGVudGlmaWVycyhhbGxQYXJhbWV0ZXJOYW1l
cyk7CisgICAgICAgIGlmIChzaG91bGRDcmVhdGVBcmd1bWVudHNWYXJpYWJsZUluUGFyYW1ldGVy
U2NvcGUpCisgICAgICAgICAgICBhbGxQYXJhbWV0ZXJOYW1lcy5hcHBlbmQocHJvcGVydHlOYW1l
cygpLmFyZ3VtZW50cyk7CiAgICAgICAgIElkZW50aWZpZXJTZXQgcGFyYW1ldGVyU2V0OwogICAg
ICAgICBmb3IgKGF1dG8mIGlkZW50IDogYWxsUGFyYW1ldGVyTmFtZXMpIHsKICAgICAgICAgICAg
IHBhcmFtZXRlclNldC5hZGQoaWRlbnQuaW1wbCgpKTsKQEAgLTgyMywxMCArODMxLDE1IEBAIHZv
aWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmluaXRpYWxpemVEZWZhdWwKICAgICAgICAgICAgIGlmIChj
YXB0dXJlcyhpZGVudC5pbXBsKCkpKQogICAgICAgICAgICAgICAgIGFkZFJlc3VsdC5pdGVyYXRv
ci0+dmFsdWUuc2V0SXNDYXB0dXJlZCgpOwogICAgICAgICB9Ci0gICAgICAgIAogICAgICAgICAv
LyBUaGlzIGltcGxlbWVudHMgc3RlcCAyNSBvZiBzZWN0aW9uIDkuMi4xMi4KICAgICAgICAgcHVz
aExleGljYWxTY29wZUludGVybmFsKGVudmlyb25tZW50LCBURFpDaGVja09wdGltaXphdGlvbjo6
T3B0aW1pemUsIE5lc3RlZFNjb3BlVHlwZTo6SXNOb3ROZXN0ZWQsIG51bGxwdHIsIFREWlJlcXVp
cmVtZW50OjpVbmRlclREWiwgU2NvcGVUeXBlOjpMZXRDb25zdFNjb3BlLCBTY29wZVJlZ2lzdGVy
VHlwZTo6QmxvY2spOwogCisgICAgICAgIGlmIChzaG91bGRDcmVhdGVBcmd1bWVudHNWYXJpYWJs
ZUluUGFyYW1ldGVyU2NvcGUpIHsKKyAgICAgICAgICAgIFZhcmlhYmxlIGFyZ3VtZW50c1Zhcmlh
YmxlID0gdmFyaWFibGUocHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cyk7IAorICAgICAgICAgICAg
aW5pdGlhbGl6ZVZhcmlhYmxlKGFyZ3VtZW50c1ZhcmlhYmxlLCBtX2FyZ3VtZW50c1JlZ2lzdGVy
KTsKKyAgICAgICAgICAgIGxpZnRURFpDaGVja0lmUG9zc2libGUoYXJndW1lbnRzVmFyaWFibGUp
OworICAgICAgICB9CisKICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHRlbXAgPSBuZXdUZW1w
b3JhcnkoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBhcmFtZXRlcnMuc2l6
ZSgpOyBpKyspIHsKICAgICAgICAgICAgIHN0ZDo6cGFpcjxEZXN0cnVjdHVyaW5nUGF0dGVybk5v
ZGUqLCBFeHByZXNzaW9uTm9kZSo+IHBhcmFtZXRlciA9IHBhcmFtZXRlcnMuYXQoaSk7CkBAIC04
NjcsMTYgKzg4MCwxMCBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjppbml0aWFsaXplRGVmYXVs
CiAgICAgICAgIC8vIHJlY29yZCBmb3IgcGFyYW1ldGVycyBhbmQgInZhciJzLiBUaGUgInZhciIg
ZW52aXJvbm1lbnQgcmVjb3JkIG11c3QgaGF2ZSB0aGUKICAgICAgICAgLy8gcGFyYW1ldGVyIGVu
dmlyb25tZW50IHJlY29yZCBhcyBpdHMgcGFyZW50LgogICAgICAgICAvLyBTZWUgc3RlcCAyOCBv
ZiBzZWN0aW9uIDkuMi4xMi4KLSAgICAgICAgaWYgKG1fbGV4aWNhbEVudmlyb25tZW50UmVnaXN0
ZXIpCi0gICAgICAgICAgICBpbml0aWFsaXplVmFyTGV4aWNhbEVudmlyb25tZW50KHN5bWJvbFRh
YmxlQ29uc3RhbnRJbmRleCk7CisgICAgICAgIGJvb2wgaGFzQ2FwdHVyZWRWYXJpYWJsZXMgPSAh
IW1fbGV4aWNhbEVudmlyb25tZW50UmVnaXN0ZXI7IAorICAgICAgICBpbml0aWFsaXplVmFyTGV4
aWNhbEVudmlyb25tZW50KHN5bWJvbFRhYmxlQ29uc3RhbnRJbmRleCwgZnVuY3Rpb25TeW1ib2xU
YWJsZSwgaGFzQ2FwdHVyZWRWYXJpYWJsZXMpOwogICAgIH0KIAotICAgIGlmIChtX2xleGljYWxF
bnZpcm9ubWVudFJlZ2lzdGVyKQotICAgICAgICBwdXNoU2NvcGVkQ29udHJvbEZsb3dDb250ZXh0
KCk7Ci0gICAgbV9zeW1ib2xUYWJsZVN0YWNrLmFwcGVuZChTeW1ib2xUYWJsZVN0YWNrRW50cnl7
IGZ1bmN0aW9uU3ltYm9sVGFibGUsIG1fbGV4aWNhbEVudmlyb25tZW50UmVnaXN0ZXIsIGZhbHNl
LCBzeW1ib2xUYWJsZUNvbnN0YW50SW5kZXggfSk7Ci0KLSAgICBtX3ZhclNjb3BlU3ltYm9sVGFi
bGVJbmRleCA9IG1fc3ltYm9sVGFibGVTdGFjay5zaXplKCkgLSAxOwotCiAgICAgLy8gVGhpcyBj
b21wbGV0ZXMgc3RlcCAyOCBvZiBzZWN0aW9uIDkuMi4xMi4KICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgdmFsdWVzVG9Nb3ZlSW50b1ZhcnMuc2l6ZSgpOyBpKyspIHsKICAgICAgICAgQVNT
RVJUKCFpc1NpbXBsZVBhcmFtZXRlckxpc3QpOwpAQCAtODg2LDQzICs4OTMsMTYgQEAgdm9pZCBC
eXRlY29kZUdlbmVyYXRvcjo6aW5pdGlhbGl6ZURlZmF1bAogICAgIH0KIH0KIAotdm9pZCBCeXRl
Y29kZUdlbmVyYXRvcjo6aW5pdGlhbGl6ZUFycm93RnVuY3Rpb25Db250ZXh0U2NvcGVJZk5lZWRl
ZChTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUpCit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjppbml0
aWFsaXplQXJyb3dGdW5jdGlvbkNvbnRleHRTY29wZUlmTmVlZGVkKCkKIHsKLSAgICBpZiAobV9h
cnJvd0Z1bmN0aW9uQ29udGV4dExleGljYWxFbnZpcm9ubWVudFJlZ2lzdGVyICE9IG51bGxwdHIp
Ci0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBpZiAobV9sZXhpY2FsRW52aXJvbm1lbnRSZWdp
c3RlciAhPSBudWxscHRyKSB7Ci0gICAgICAgIG1fYXJyb3dGdW5jdGlvbkNvbnRleHRMZXhpY2Fs
RW52aXJvbm1lbnRSZWdpc3RlciA9IG1fbGV4aWNhbEVudmlyb25tZW50UmVnaXN0ZXI7Ci0gICAg
ICAgIAotICAgICAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0Fycm93RnVuY3Rpb24oKSkgewotICAg
ICAgICAgICAgU2NvcGVPZmZzZXQgb2Zmc2V0OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBD
b25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihDb25jdXJyZW50SklUTG9ja2VyOjpOb0xvY2tpbmdO
ZWNlc3NhcnkpOwotICAgICAgICAgICAgaWYgKGlzVGhpc1VzZWRJbklubmVyQXJyb3dGdW5jdGlv
bigpKSB7Ci0gICAgICAgICAgICAgICAgb2Zmc2V0ID0gc3ltYm9sVGFibGUtPnRha2VOZXh0U2Nv
cGVPZmZzZXQobG9ja2VyKTsKLSAgICAgICAgICAgICAgICBzeW1ib2xUYWJsZS0+c2V0KGxvY2tl
ciwgcHJvcGVydHlOYW1lcygpLnRoaXNJZGVudGlmaWVyLmltcGwoKSwgU3ltYm9sVGFibGVFbnRy
eShWYXJPZmZzZXQob2Zmc2V0KSkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAo
bV9jb2RlVHlwZSA9PSBGdW5jdGlvbkNvZGUgJiYgaXNOZXdUYXJnZXRVc2VkSW5Jbm5lckFycm93
RnVuY3Rpb24oKSkgewotICAgICAgICAgICAgICAgIG9mZnNldCA9IHN5bWJvbFRhYmxlLT50YWtl
TmV4dFNjb3BlT2Zmc2V0KCk7Ci0gICAgICAgICAgICAgICAgc3ltYm9sVGFibGUtPnNldChsb2Nr
ZXIsIHByb3BlcnR5TmFtZXMoKS5uZXdUYXJnZXRMb2NhbFByaXZhdGVOYW1lLmltcGwoKSwgU3lt
Ym9sVGFibGVFbnRyeShWYXJPZmZzZXQob2Zmc2V0KSkpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBpZiAoaXNDb25zdHJ1Y3RvcigpICYmIGNvbnN0cnVjdG9yS2lu
ZCgpID09IENvbnN0cnVjdG9yS2luZDo6RGVyaXZlZCAmJiBpc1N1cGVyVXNlZEluSW5uZXJBcnJv
d0Z1bmN0aW9uKCkpIHsKLSAgICAgICAgICAgICAgICBvZmZzZXQgPSBzeW1ib2xUYWJsZS0+dGFr
ZU5leHRTY29wZU9mZnNldChsb2NrZXIpOwotICAgICAgICAgICAgICAgIHN5bWJvbFRhYmxlLT5z
ZXQobG9ja2VyLCBwcm9wZXJ0eU5hbWVzKCkuZGVyaXZlZENvbnN0cnVjdG9yUHJpdmF0ZU5hbWUu
aW1wbCgpLCBTeW1ib2xUYWJsZUVudHJ5KFZhck9mZnNldChvZmZzZXQpKSk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIEFTU0VSVCghbV9h
cnJvd0Z1bmN0aW9uQ29udGV4dExleGljYWxFbnZpcm9ubWVudFJlZ2lzdGVyKTsKIAogICAgIFZh
cmlhYmxlRW52aXJvbm1lbnQgZW52aXJvbm1lbnQ7CiAKICAgICBpZiAoaXNUaGlzVXNlZEluSW5u
ZXJBcnJvd0Z1bmN0aW9uKCkpIHsKICAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBlbnZpcm9ubWVu
dC5hZGQocHJvcGVydHlOYW1lcygpLnRoaXNJZGVudGlmaWVyKTsKICAgICAgICAgYWRkUmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZS5zZXRJc0NhcHR1cmVkKCk7Ci0gICAgICAgIGFkZFJlc3VsdC5pdGVy
YXRvci0+dmFsdWUuc2V0SXNDb25zdCgpOworICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZh
bHVlLnNldElzTGV0KCk7CiAgICAgfQogICAgIAogICAgIGlmIChtX2NvZGVUeXBlID09IEZ1bmN0
aW9uQ29kZSAmJiBpc05ld1RhcmdldFVzZWRJbklubmVyQXJyb3dGdW5jdGlvbigpKSB7CkBAIC05
NzIsMTggKzk1MiwyNSBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjppbml0aWFsaXplUGFyYW1l
CiAgICAgfQogfQogCi12b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjppbml0aWFsaXplVmFyTGV4aWNh
bEVudmlyb25tZW50KGludCBzeW1ib2xUYWJsZUNvbnN0YW50SW5kZXgpCit2b2lkIEJ5dGVjb2Rl
R2VuZXJhdG9yOjppbml0aWFsaXplVmFyTGV4aWNhbEVudmlyb25tZW50KGludCBzeW1ib2xUYWJs
ZUNvbnN0YW50SW5kZXgsIFN5bWJvbFRhYmxlKiBmdW5jdGlvblN5bWJvbFRhYmxlLCBib29sIGhh
c0NhcHR1cmVkVmFyaWFibGVzKQogewotICAgIFJFTEVBU0VfQVNTRVJUKG1fbGV4aWNhbEVudmly
b25tZW50UmVnaXN0ZXIpOwotICAgIGVtaXRPcGNvZGUob3BfY3JlYXRlX2xleGljYWxfZW52aXJv
bm1lbnQpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtX2xleGljYWxFbnZpcm9ubWVudFJl
Z2lzdGVyLT5pbmRleCgpKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc2NvcGVSZWdpc3Rl
cigpLT5pbmRleCgpKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc3ltYm9sVGFibGVDb25z
dGFudEluZGV4KTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29uc3RhbnRWYWx1ZShq
c1VuZGVmaW5lZCgpKS0+aW5kZXgoKSk7CisgICAgaWYgKGhhc0NhcHR1cmVkVmFyaWFibGVzKSB7
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fbGV4aWNhbEVudmlyb25tZW50UmVnaXN0ZXIpOwor
ICAgICAgICBlbWl0T3Bjb2RlKG9wX2NyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50KTsKKyAgICAg
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1fbGV4aWNhbEVudmlyb25tZW50UmVnaXN0ZXItPmlu
ZGV4KCkpOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc2NvcGVSZWdpc3RlcigpLT5p
bmRleCgpKTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHN5bWJvbFRhYmxlQ29uc3Rh
bnRJbmRleCk7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25zdGFudFZhbHVl
KGpzVW5kZWZpbmVkKCkpLT5pbmRleCgpKTsKIAotICAgIGVtaXRPcGNvZGUob3BfbW92KTsKLSAg
ICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc2NvcGVSZWdpc3RlcigpLT5pbmRleCgpKTsKLSAgICBp
bnN0cnVjdGlvbnMoKS5hcHBlbmQobV9sZXhpY2FsRW52aXJvbm1lbnRSZWdpc3Rlci0+aW5kZXgo
KSk7CisgICAgICAgIGVtaXRPcGNvZGUob3BfbW92KTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKHNjb3BlUmVnaXN0ZXIoKS0+aW5kZXgoKSk7CisgICAgICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZChtX2xleGljYWxFbnZpcm9ubWVudFJlZ2lzdGVyLT5pbmRleCgpKTsKKworICAgICAg
ICBwdXNoU2NvcGVkQ29udHJvbEZsb3dDb250ZXh0KCk7CisgICAgfQorICAgIGJvb2wgaXNXaXRo
U2NvcGUgPSBmYWxzZTsKKyAgICBtX3N5bWJvbFRhYmxlU3RhY2suYXBwZW5kKFN5bWJvbFRhYmxl
U3RhY2tFbnRyeXsgZnVuY3Rpb25TeW1ib2xUYWJsZSwgbV9sZXhpY2FsRW52aXJvbm1lbnRSZWdp
c3RlciwgaXNXaXRoU2NvcGUsIHN5bWJvbFRhYmxlQ29uc3RhbnRJbmRleCB9KTsKKyAgICBtX3Zh
clNjb3BlU3ltYm9sVGFibGVJbmRleCA9IG1fc3ltYm9sVGFibGVTdGFjay5zaXplKCkgLSAxOwog
fQogCiBVbmlxdWVkU3RyaW5nSW1wbCogQnl0ZWNvZGVHZW5lcmF0b3I6OnZpc2libGVOYW1lRm9y
UGFyYW1ldGVyKERlc3RydWN0dXJpbmdQYXR0ZXJuTm9kZSogcGF0dGVybikKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJh
dG9yLmgJKHJldmlzaW9uIDIwMTA3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtODU2LDkgKzg1Niw5
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRMb2dTaGFkb3dDaGlja2VuVGFp
bElmTmVjZXNzYXJ5KCk7CiAKICAgICAgICAgdm9pZCBpbml0aWFsaXplUGFyYW1ldGVycyhGdW5j
dGlvblBhcmFtZXRlcnMmKTsKLSAgICAgICAgdm9pZCBpbml0aWFsaXplVmFyTGV4aWNhbEVudmly
b25tZW50KGludCBzeW1ib2xUYWJsZUNvbnN0YW50SW5kZXgpOwotICAgICAgICB2b2lkIGluaXRp
YWxpemVEZWZhdWx0UGFyYW1ldGVyVmFsdWVzQW5kU2V0dXBGdW5jdGlvblNjb3BlU3RhY2soRnVu
Y3Rpb25QYXJhbWV0ZXJzJiwgYm9vbCBpc1NpbXBsZVBhcmFtZXRlckxpc3QsIEZ1bmN0aW9uTm9k
ZSosIFN5bWJvbFRhYmxlKiwgaW50IHN5bWJvbFRhYmxlQ29uc3RhbnRJbmRleCwgY29uc3Qgc3Rk
OjpmdW5jdGlvbjxib29sIChVbmlxdWVkU3RyaW5nSW1wbCopPiYgY2FwdHVyZXMpOwotICAgICAg
ICB2b2lkIGluaXRpYWxpemVBcnJvd0Z1bmN0aW9uQ29udGV4dFNjb3BlSWZOZWVkZWQoU3ltYm9s
VGFibGUqID0gbnVsbHB0cik7CisgICAgICAgIHZvaWQgaW5pdGlhbGl6ZVZhckxleGljYWxFbnZp
cm9ubWVudChpbnQgc3ltYm9sVGFibGVDb25zdGFudEluZGV4LCBTeW1ib2xUYWJsZSogZnVuY3Rp
b25TeW1ib2xUYWJsZSwgYm9vbCBoYXNDYXB0dXJlZFZhcmlhYmxlcyk7CisgICAgICAgIHZvaWQg
aW5pdGlhbGl6ZURlZmF1bHRQYXJhbWV0ZXJWYWx1ZXNBbmRTZXR1cEZ1bmN0aW9uU2NvcGVTdGFj
ayhGdW5jdGlvblBhcmFtZXRlcnMmLCBib29sIGlzU2ltcGxlUGFyYW1ldGVyTGlzdCwgRnVuY3Rp
b25Ob2RlKiwgU3ltYm9sVGFibGUqLCBpbnQgc3ltYm9sVGFibGVDb25zdGFudEluZGV4LCBjb25z
dCBzdGQ6OmZ1bmN0aW9uPGJvb2wgKFVuaXF1ZWRTdHJpbmdJbXBsKik+JiBjYXB0dXJlcywgYm9v
bCBzaG91bGRDcmVhdGVBcmd1bWVudHNWYXJpYWJsZUluUGFyYW1ldGVyU2NvcGUpOworICAgICAg
ICB2b2lkIGluaXRpYWxpemVBcnJvd0Z1bmN0aW9uQ29udGV4dFNjb3BlSWZOZWVkZWQoKTsKIAog
ICAgIHB1YmxpYzoKICAgICAgICAgSlNTdHJpbmcqIGFkZFN0cmluZ0NvbnN0YW50KGNvbnN0IElk
ZW50aWZpZXImKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvYXJy
b3ctZnVuY3Rpb25zLWFzLWRlZmF1bHQtcGFyYW1ldGVyLXZhbHVlcy5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2Fycm93LWZ1bmN0aW9ucy1hcy1k
ZWZhdWx0LXBhcmFtZXRlci12YWx1ZXMuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvdGVzdHMvc3RyZXNzL2Fycm93LWZ1bmN0aW9ucy1hcy1kZWZhdWx0LXBhcmFtZXRl
ci12YWx1ZXMuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjggQEAKK2Z1bmN0aW9uIGFz
c2VydChiKSB7CisgICAgaWYgKCFiKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJhZCBhc3Nl
cnRpb24iKQorfQorZnVuY3Rpb24gdGVzdChmLCBuID0gMTAwMCkgeworICAgIGZvciAobGV0IGkg
PSAwOyBpIDwgbjsgaSsrKQorICAgICAgICBmKCk7Cit9CisKK3Rlc3QoZnVuY3Rpb24oKSB7Cisg
ICAgZnVuY3Rpb24gZm9vKHggPSAoKT0+dGhpcykgeworICAgICAgICByZXR1cm4geCgpOworICAg
IH0KKyAgICBsZXQgbyA9IHt9OworICAgIGFzc2VydChmb28uY2FsbChvKSA9PT0gbyk7Cit9KQor
Cit0ZXN0KGZ1bmN0aW9uKCkgeworICAgIGZ1bmN0aW9uIGZvbyh4ID0gKCk9PmFyZ3VtZW50cykg
eworICAgICAgICBhc3NlcnQoeCgpID09PSBhcmd1bWVudHMpOworICAgIH0KKyAgICBmb28oKTsK
K30pCisKK3Rlc3QoZnVuY3Rpb24oKSB7CisgICAgZnVuY3Rpb24gZm9vKHt4ID0gKCk9PmFyZ3Vt
ZW50c30pIHsKKyAgICAgICAgYXNzZXJ0KHgoKSA9PT0gYXJndW1lbnRzKTsKKyAgICB9CisgICAg
Zm9vKHt4OnVuZGVmaW5lZH0pOworfSkKKwordGVzdChmdW5jdGlvbigpIHsKKyAgICBmdW5jdGlv
biBmb28oeCA9ICgpPT5hcmd1bWVudHMpIHsKKyAgICAgICAgbGV0IGEgPSB4KCk7CisgICAgICAg
IGFzc2VydChhLmxlbmd0aCA9PT0gMyk7CisgICAgICAgIGFzc2VydChhWzBdID09PSB1bmRlZmlu
ZWQpOworICAgICAgICBhc3NlcnQoYVsxXSA9PT0gMjApOworICAgICAgICBhc3NlcnQoYVsyXSA9
PT0gNDApOworICAgIH0KKyAgICBmb28odW5kZWZpbmVkLCAyMCwgNDApOworfSkKKwordGVzdChm
dW5jdGlvbigpIHsKKyAgICBmdW5jdGlvbiBmb28oeCA9ICgpPT5uZXcudGFyZ2V0KSB7CisgICAg
ICAgIGFzc2VydCh4KCkgPT09IGZvbyk7CisgICAgfQorICAgIG5ldyBmb28odW5kZWZpbmVkKTsK
K30pCisKK3Rlc3QoZnVuY3Rpb24oKSB7CisgICAgZnVuY3Rpb24gZm9vKHt4ID0gKCk9Pm5ldy50
YXJnZXR9KSB7CisgICAgICAgIGFzc2VydCh4KCkgPT09IGZvbyk7CisgICAgfQorICAgIG5ldyBm
b28oe30pOworfSkKKwordGVzdChmdW5jdGlvbigpIHsKKyAgICBmdW5jdGlvbiBmb28oeCA9ICgp
PT5hcmd1bWVudHMpIHsKKyAgICAgICAgdmFyIGFyZ3VtZW50czsKKyAgICAgICAgYXNzZXJ0KHgo
KSA9PT0gYXJndW1lbnRzKTsKKyAgICB9CisgICAgZm9vKHVuZGVmaW5lZCk7Cit9KTsKKwordGVz
dChmdW5jdGlvbigpIHsKKyAgICBmdW5jdGlvbiBmb28oeCA9ICgpPT5hcmd1bWVudHMpIHsKKyAg
ICAgICAgdmFyIGFyZ3VtZW50cyA9IDI1OworICAgICAgICBhc3NlcnQoeCgpID09PSBhcmd1bWVu
dHMpOworICAgIH0KKyAgICBmb28odW5kZWZpbmVkKTsKK30pOworCit0ZXN0KGZ1bmN0aW9uKCkg
eworICAgIGZ1bmN0aW9uIGZvbyh4ID0gKHkgPSAoKT0+YXJndW1lbnRzKT0+eSgpKSB7CisgICAg
ICAgIGFzc2VydCh4KCkgPT09IGFyZ3VtZW50cyk7CisgICAgfQorICAgIGZvbyh1bmRlZmluZWQp
OworfSk7CisKK3Rlc3QoZnVuY3Rpb24oKSB7CisgICAgZnVuY3Rpb24gZm9vKHt4ID0gKHkgPSAo
KT0+YXJndW1lbnRzKT0+eSgpfSkgeworICAgICAgICBhc3NlcnQoeCgpID09PSBhcmd1bWVudHMp
OworICAgIH0KKyAgICBmb28oe30pOworfSk7CisKK3Rlc3QoZnVuY3Rpb24oKSB7CisgICAgZnVu
Y3Rpb24gZm9vKHggPSAoeSA9ICgpPT50aGlzKT0+eSgpKSB7CisgICAgICAgIHJldHVybiB4KCk7
CisgICAgfQorICAgIGxldCBvID0ge307CisgICAgZm9vLmNhbGwobyk7Cit9KTsKKwordGVzdChm
dW5jdGlvbigpIHsKKyAgICBmdW5jdGlvbiBmb28oeCA9ICh5ID0gKCk9Pm5ldy50YXJnZXQpPT55
KCkpIHsKKyAgICAgICAgYXNzZXJ0KHgoKSA9PT0gZm9vKTsKKyAgICB9CisgICAgbmV3IGZvbygp
OworfSk7CisKK3Rlc3QoZnVuY3Rpb24oKSB7CisgICAgZnVuY3Rpb24gZm9vKHggPSAoeSA9ICgp
PT5uZXcudGFyZ2V0KT0+eSgpKSB7CisgICAgICAgIGFzc2VydCh4KCkgPT09IHVuZGVmaW5lZCk7
CisgICAgfQorICAgIGZvbygpOworfSk7CisKKy8vIEZJWE1FOiBPdXIgcGFyc2VyIHRocm93cyBh
IHN5bnRheCBlcnJvciBoZXJlIGJ1dCBpdCBzaG91bGQgbm90LgorLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1Nzg3MgorLyoKK3Rlc3QoZnVuY3Rpb24oKSB7Cisg
ICAgY2xhc3MgQyB7CisgICAgICAgIGNvbnN0cnVjdG9yKCkgeyB0aGlzLl94ID0gNDU7IH0KKyAg
ICAgICAgZ2V0IGZvbygpIHsgcmV0dXJuIHRoaXMuX3g7fQorICAgIH0KKyAgICBjbGFzcyBEIGV4
dGVuZHMgQyB7CisgICAgICAgIC8vY29uc3RydWN0b3IoeCA9ICgpPT5zdXBlci5mb28pIHsKKyAg
ICAgICAgLy8gICAgc3VwZXIoKTsKKyAgICAgICAgLy8gICAgYXNzZXJ0KHgoKSA9PT0gNDUpOwor
ICAgICAgICAvL30KKyAgICAgICAgeCh4ID0gKCk9PnN1cGVyLmZvbykgeworICAgICAgICAgICAg
cmV0dXJuIHgoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAvLyhuZXcgRCkueCgpOworfSk7Cisq
LwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9vcC1wdXNoLW5hbWUt
c2NvcGUtY3Jhc2hlcy1wcm9maWxlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvdGVzdHMvc3RyZXNzL29wLXB1c2gtbmFtZS1zY29wZS1jcmFzaGVzLXByb2ZpbGVyLmpz
CShyZXZpc2lvbiAyMDEwNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNz
L29wLXB1c2gtbmFtZS1zY29wZS1jcmFzaGVzLXByb2ZpbGVyLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC04LDEwICs4LDEwIEBAIGZ1bmN0aW9uIHRlc3QoKSB7CiAgICAgIH0pKGFyZ3VtZW50c1swXSk7
CiB9CiAKLWZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworZm9yICh2YXIgaSA9IDA7
IGkgPCAxMDAwOyArK2kpIHsKICAgICBjb3VudGVyID0gMDsKICAgICB0ZXN0KDEwMCk7CiAgICAg
aWYgKGNvdW50ZXIgIT09IDEwMSkgewogICAgICAgICB0aHJvdyAiT29wcywgdGVzdCgxMDApID0g
IiArIHRlc3QoMTAwKSArICIsIGV4cGVjdGVkIDEwMS4iOwogICAgIH0KLX0KXCBObyBuZXdsaW5l
IGF0IGVuZCBvZiBmaWxlCit9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>