<?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>141321</bug_id>
          
          <creation_ts>2015-02-05 20:23:21 -0800</creation_ts>
          <short_desc>Add Vector::removeFirstMatching() / removeAllMatching() methods taking lambda functions</short_desc>
          <delta_ts>2015-02-10 20:45:16 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Template Framework</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>141192</dependson>
          <blocked>141460</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>andersca</cc>
    
    <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>koivisto</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1067297</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-02-05 20:23:21 -0800</bug_when>
    <thetext>Add Vector::removeFirstIf() / removeAllIf() methods taking lambda functions to match the element(s) to remove.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067309</commentid>
    <comment_count>1</comment_count>
      <attachid>246149</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-02-05 22:10:56 -0800</bug_when>
    <thetext>Created attachment 246149
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067310</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-02-05 22:13:10 -0800</bug_when>
    <thetext>Attachment 246149 did not pass style-queue:


ERROR: Tools/TestWebKitAPI/Tests/WTF/Vector.cpp:470:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Vector.cpp:471:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Vector.cpp:472:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Vector.cpp:476:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Vector.cpp:478:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Vector.cpp:480:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Vector.cpp:483:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Vector.cpp:486:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Vector.cpp:495:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Vector.cpp:496:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Vector.cpp:497:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Vector.cpp:501:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Vector.cpp:503:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Vector.cpp:505:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Vector.cpp:510:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Vector.cpp:513:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Vector.cpp:516:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 17 in 23 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>1067363</commentid>
    <comment_count>3</comment_count>
      <attachid>246163</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-02-06 09:20:43 -0800</bug_when>
    <thetext>Created attachment 246163
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067364</commentid>
    <comment_count>4</comment_count>
      <attachid>246163</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2015-02-06 09:25:05 -0800</bug_when>
    <thetext>Comment on attachment 246163
Patch

I don&apos;t like the name removeAllIf; it sounds like it&apos;ll clear the vector if the lambda returns true.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067365</commentid>
    <comment_count>5</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-02-06 09:26:52 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; Comment on attachment 246163 [details]
&gt; Patch
&gt; 
&gt; I don&apos;t like the name removeAllIf; it sounds like it&apos;ll clear the vector if
&gt; the lambda returns true.

No argument there. We need to find better names for removeFirst(value) / removeFirstIf(lambda), removeAll(value) / removeAllIf(lambda). Do you have any suggestion?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067367</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-02-06 09:30:12 -0800</bug_when>
    <thetext>Attachment 246163 did not pass style-queue:


ERROR: Tools/TestWebKitAPI/Tests/WTF/Vector.cpp:470:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Vector.cpp:471:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Vector.cpp:472:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Vector.cpp:476:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Vector.cpp:478:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Vector.cpp:480:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Vector.cpp:483:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Vector.cpp:486:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Vector.cpp:495:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Vector.cpp:496:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Vector.cpp:497:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Vector.cpp:501:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Vector.cpp:503:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Vector.cpp:505:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Vector.cpp:510:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Vector.cpp:513:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Vector.cpp:516:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 17 in 23 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>1067449</commentid>
    <comment_count>7</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-02-06 16:03:34 -0800</bug_when>
    <thetext>I have the following naming proposal:
- removeAt(index)
- removeSingle(value) // first occurrence
- removeSingleIf(lambda) // first match
- remove(value) // every occurrence
- removeIf(lamba) // every match

Any thoughts?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067544</commentid>
    <comment_count>8</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-02-07 11:12:55 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; I have the following naming proposal:
&gt; - removeAt(index)
&gt; - removeSingle(value) // first occurrence
&gt; - removeSingleIf(lambda) // first match
&gt; - remove(value) // every occurrence
&gt; - removeIf(lamba) // every match
&gt; 
&gt; Any thoughts?

Darin, what do you think about this naming? Do you have a better proposal?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067547</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-02-07 11:36:53 -0800</bug_when>
    <thetext>I am trying to find some prior art. I think I prefer &quot;First&quot; to &quot;Single&quot; but there is something that rubs me the wrong way about using &quot;if&quot; to mean &quot;based on a predicate&quot;, because &quot;if&quot; sounds like it’s the entire function that’s conditional, not just something the function does.

I would never say “remove all if equal to 5”, I would say “remove all that are equal to 5” or “remove all if there was a problem”.

I am trying to find some prior art on naming functions that take predicates. Even better if it was in a project that used a sort of “literate” naming style reminiscent to the one from Cocoa, which inspires a lot of our function naming in WebKit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067549</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-02-07 11:39:49 -0800</bug_when>
    <thetext>Cocoa uses the words “using block” and “passing test” in their NSArray functions. Neither seems terse enough for our purposes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067550</commentid>
    <comment_count>11</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-02-07 11:43:06 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; I am trying to find some prior art. I think I prefer &quot;First&quot; to &quot;Single&quot; but
&gt; there is something that rubs me the wrong way about using &quot;if&quot; to mean
&gt; &quot;based on a predicate&quot;, because &quot;if&quot; sounds like it’s the entire function
&gt; that’s conditional, not just something the function does.
&gt; 
&gt; I would never say “remove all if equal to 5”, I would say “remove all that
&gt; are equal to 5” or “remove all if there was a problem”.
&gt; 
&gt; I am trying to find some prior art on naming functions that take predicates.
&gt; Even better if it was in a project that used a sort of “literate” naming
&gt; style reminiscent to the one from Cocoa, which inspires a lot of our
&gt; function naming in WebKit.

Well, STL has remove_if:
http://en.cppreference.com/w/cpp/algorithm/remove

I agree that removeAllIf() is confusing, which is why my latest proposal is removeIf().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067591</commentid>
    <comment_count>12</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-02-07 15:52:52 -0800</bug_when>
    <thetext>For the lambda function, we could also use a method name with &quot;Matching&quot; in the name, e.g.:
removeFirstMatching(lambda) / removeAllMatching(lambda)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067594</commentid>
    <comment_count>13</comment_count>
      <attachid>246224</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-02-07 16:02:56 -0800</bug_when>
    <thetext>Created attachment 246224
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067595</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-02-07 16:04:21 -0800</bug_when>
    <thetext>Attachment 246224 did not pass style-queue:


ERROR: Tools/TestWebKitAPI/Tests/WTF/Vector.cpp:470:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Vector.cpp:471:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Vector.cpp:472:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Vector.cpp:476:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Vector.cpp:478:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Vector.cpp:480:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Vector.cpp:483:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Vector.cpp:486:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Vector.cpp:495:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Vector.cpp:496:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Vector.cpp:497:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Vector.cpp:501:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Vector.cpp:503:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Vector.cpp:505:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Vector.cpp:510:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Vector.cpp:513:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Vector.cpp:516:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 17 in 23 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>1067610</commentid>
    <comment_count>15</comment_count>
      <attachid>246224</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-02-07 17:13:39 -0800</bug_when>
    <thetext>Comment on attachment 246224
Patch

I like these “matching” names. And they are nice and long and easy to globally replace if we get another naming idea.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067623</commentid>
    <comment_count>16</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2015-02-07 17:48:04 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; Comment on attachment 246224 [details]
&gt; Patch
&gt; 
&gt; I like these “matching” names. And they are nice and long and easy to
&gt; globally replace if we get another naming idea.

I agree.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067624</commentid>
    <comment_count>17</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-02-07 17:48:38 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; (In reply to comment #15)
&gt; &gt; Comment on attachment 246224 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; I like these “matching” names. And they are nice and long and easy to
&gt; &gt; globally replace if we get another naming idea.
&gt; 
&gt; I agree.

\o/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067629</commentid>
    <comment_count>18</comment_count>
      <attachid>246224</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-02-07 18:28:54 -0800</bug_when>
    <thetext>Comment on attachment 246224
Patch

Clearing flags on attachment: 246224

Committed r179791: &lt;http://trac.webkit.org/changeset/179791&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067630</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-02-07 18:29:00 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246149</attachid>
            <date>2015-02-05 22:10:56 -0800</date>
            <delta_ts>2015-02-06 09:20:38 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-141321-20150205221054.patch</filename>
            <type>text/plain</type>
            <size>24966</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc5NzM3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
MjZmN2ZhMjNkZDVjMDRhMzJkZDFhOGU2Zjk4Y2FkMjhmY2I0YjlhLi5kNDNhZTQ1NjEwMjUwM2Jk
NzNkOWI4Y2QwYjczZmMyNmQzZGFhNWQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMiBAQAorMjAxNS0wMi0wNSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgor
CisgICAgICAgIEFkZCBWZWN0b3I6OnJlbW92ZUZpcnN0SWYoKSAvIHJlbW92ZUFsbElmKCkgbWV0
aG9kcyB0YWtpbmcgbGFtYmRhIGZ1bmN0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxMzIxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVXNlIG5ldyBWZWN0b3I6OnJlbW92ZUZpcnN0SWYoKSAvIHJl
bW92ZUFsbElmKCkgbWV0aG9kcy4KKwogMjAxNS0wMi0wNSAgTWljaGFlbCBTYWJvZmYgIDxtc2Fi
b2ZmQGFwcGxlLmNvbT4KIAogICAgICAgICBDb2RlQ2FjaGUgaXMgbm90IHRocmVhZCBzYWZlIHdo
ZW4gYWRkaW5nIHRoZSBzYW1lIHNvdXJjZSBmcm9tIHR3byBkaWZmZXJlbnQgdGhyZWFkcwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwppbmRl
eCA0M2RhZmJlYjU4Y2JkNjAwMjlmMjYxN2U4NDQ1MmI3ZDhiNzFlYjRlLi41ZjUwNTgwYzNkYWRj
NjQwMGEyMWQxMTYxNWQyMDhmNWNjN2EwYTM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDE1LTAy
LTA1ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIFZlY3Rv
cjo6cmVtb3ZlRmlyc3RJZigpIC8gcmVtb3ZlQWxsSWYoKSBtZXRob2RzIHRha2luZyBsYW1iZGEg
ZnVuY3Rpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNDEzMjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGQgVmVjdG9yOjpyZW1vdmVGaXJzdElmKCkgLyByZW1vdmVBbGxJZigpIG1ldGhvZHMgdGFr
aW5nIGxhbWJkYQorICAgICAgICBmdW5jdGlvbnMgdG8gbWF0Y2ggdGhlIGVsZW1lbnQocykgdG8g
cmVtb3ZlLiBUaGlzIHNpbXBsaWZpZXMgdGhlIGNvZGUKKyAgICAgICAgYSBiaXQuIFZlY3Rvcjo6
cmVtb3ZlQWxsSWYoKSBpcyBhbHNvIG1vcmUgZWZmaWNpZW50IHRoYW4gdGhlIG1hbnVhbAorICAg
ICAgICByZW1vdmFsIGFsdGVybmF0aXZlLgorCisgICAgICAgICogd3RmL1ZlY3Rvci5oOgorICAg
ICAgICAoV1RGOjpPdmVyZmxvd0hhbmRsZXI+OjpyZW1vdmVGaXJzdCk6CisgICAgICAgIChXVEY6
Ok92ZXJmbG93SGFuZGxlcj46OnJlbW92ZUZpcnN0SWYpOgorICAgICAgICAoV1RGOjpPdmVyZmxv
d0hhbmRsZXI+OjpyZW1vdmVBbGwpOgorICAgICAgICAoV1RGOjpPdmVyZmxvd0hhbmRsZXI+Ojpy
ZW1vdmVBbGxJZik6CisKIDIwMTUtMDItMDUgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm4uZmFibGV0
QGNyZi5jYW5vbi5mcj4gYW5kIFhhYmllciBSb2RyaWd1ZXogQ2FsdmFyIDxjYWx2YXJpc0BpZ2Fs
aWEuY29tPgogCiAgICAgICAgIFtTdHJlYW1zIEFQSV0gSW1wbGVtZW50IGEgYmFyZWJvbmUgUmVh
ZGFibGVTdHJlYW0gaW50ZXJmYWNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2Q1ZTdiNjU0NWFjNzRlOGFjZjZj
MWZhMjI3NDE1NGE4ZTI2ZmY5OS4uZjgyZDhjMjQxMWRkZTU3ZDc0NzllMDNmYzI3NTM2ZTk4Zjcw
OGY1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDE1LTAyLTA1ICBDaHJpcyBEdW1l
eiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIFZlY3Rvcjo6cmVtb3ZlRmlyc3RJ
ZigpIC8gcmVtb3ZlQWxsSWYoKSBtZXRob2RzIHRha2luZyBsYW1iZGEgZnVuY3Rpb25zCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDEzMjEKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVc2UgbmV3IFZlY3Rv
cjo6cmVtb3ZlRmlyc3RJZigpIC8gcmVtb3ZlQWxsSWYoKSBtZXRob2RzLgorCiAyMDE1LTAyLTA1
ICBBbmRyZWFzIEtsaW5nICA8YWtsaW5nQGFwcGxlLmNvbT4KIAogICAgICAgICBbaU9TXSBSdW4g
YSBmdWxsIGdhcmJhZ2UgY29sbGVjdGlvbiBvbiBtZW1vcnkgd2FybmluZy4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxv
ZwppbmRleCA4NGEwODhhY2I3MTU0ODg1MzU4NjhkNmFjMGJjN2MwMmY1MTc2MDkzLi40OTE3YjA3
ZTI2M2JjY2IxOTIyMmI3NDE5MjU0MzRhYTdmNmY1MWM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L3dpbi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTIgQEAKKzIwMTUtMDItMDUgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4K
KworICAgICAgICBBZGQgVmVjdG9yOjpyZW1vdmVGaXJzdElmKCkgLyByZW1vdmVBbGxJZigpIG1l
dGhvZHMgdGFraW5nIGxhbWJkYSBmdW5jdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTMyMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFVzZSBuZXcgVmVjdG9yOjpyZW1vdmVGaXJzdElmKCkgLyBy
ZW1vdmVBbGxJZigpIG1ldGhvZHMuCisKIDIwMTUtMDItMDIgIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KIAogICAgICAgICBBY2Nlc3MgTWVtb3J5Q2FjaGUgc2luZ2xldG9uIHVzaW5n
IE1lbW9yeUNhY2hlOjpzaW5nbGV0b24oKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IGI3ZTFiNWIyMzM4NWZmYjhk
MzJhMWMyNzc4YzM1NjJkZTlkNWUzOTMuLjg4NmI0YzcxNjdhNmNmOWZmY2Y5NGQ1MzEwYjQ4OWRk
M2ZkMmFjZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAxNS0wMi0wNSAgQ2hyaXMg
RHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBWZWN0b3I6OnJlbW92ZUZp
cnN0SWYoKSAvIHJlbW92ZUFsbElmKCkgbWV0aG9kcyB0YWtpbmcgbGFtYmRhIGZ1bmN0aW9ucwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxMzIxCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXNlIG5ldyBW
ZWN0b3I6OnJlbW92ZUZpcnN0SWYoKSAvIHJlbW92ZUFsbElmKCkgbWV0aG9kcy4KKwogMjAxNS0w
Mi0wNSAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBO
dWxsIGRlcmVmIGluIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6YmVnaW5Td2lwZUdlc3R1cmUgd2hl
biBzd2lwaW5nIHdoaWxlIHNjcmlwdCBpcyBuYXZpZ2F0aW5nCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZU5vZGUuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVOb2RlLmNwcAppbmRleCAyNjVjZGRkMGVmNzg4MzNmNjFi
NTcxMTE5Y2ZkNzcyMGZkNDZkMTU3Li5jZmE3M2E4ZDczYzczMjRmMTJjYTEzOGU4NmRmMjg0OGRl
YTNhYjk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmls
ZU5vZGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlTm9k
ZS5jcHAKQEAgLTc1LDEyICs3NSw5IEBAIHZvaWQgUHJvZmlsZU5vZGU6OnJlbW92ZUNoaWxkKFBy
b2ZpbGVOb2RlKiBub2RlKQogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2NoaWxkcmVuLnNpemUoKTsgKytpKSB7Ci0gICAgICAg
IGlmICgqbm9kZSA9PSBtX2NoaWxkcmVuW2ldLmdldCgpKSB7Ci0gICAgICAgICAgICBtX2NoaWxk
cmVuLnJlbW92ZShpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQorICAg
IG1fY2hpbGRyZW4ucmVtb3ZlRmlyc3RJZihbbm9kZV0gKGNvbnN0IFJlZlB0cjxQcm9maWxlTm9k
ZT4mIGN1cnJlbnQpIHsKKyAgICAgICAgcmV0dXJuICpub2RlID09IGN1cnJlbnQuZ2V0KCk7Cisg
ICAgfSk7CiAKICNpZm5kZWYgTkRFQlVHCiAgICAgc2l6ZV90IHNpemUgPSBtX2NoaWxkcmVuLnNp
emUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1ZlY3Rvci5oIGIvU291cmNlL1dURi93
dGYvVmVjdG9yLmgKaW5kZXggYTRjNDM1OTQ0NmFhYjNlOTZkNGIxYWUxZjg1M2UxZTQ5YWU4ZjU0
Zi4uOGI4N2Y3NGFmNjhhZWMyNjI0OTJhYWZjNmViZWIzNGI0YjVmZTkyYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dURi93dGYvVmVjdG9yLmgKKysrIGIvU291cmNlL1dURi93dGYvVmVjdG9yLmgKQEAg
LTczNiw3ICs3MzYsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCByZW1vdmUoc2l6ZV90IHBvc2l0aW9u
KTsKICAgICB2b2lkIHJlbW92ZShzaXplX3QgcG9zaXRpb24sIHNpemVfdCBsZW5ndGgpOwogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFU+IGJvb2wgcmVtb3ZlRmlyc3QoY29uc3QgVSYpOworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIE1hdGNoRnVuY3Rpb24+IGJvb2wgcmVtb3ZlRmlyc3RJZihjb25zdCBN
YXRjaEZ1bmN0aW9uJik7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gdW5zaWduZWQgcmVtb3Zl
QWxsKGNvbnN0IFUmKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXRjaEZ1bmN0aW9uPiB1bnNp
Z25lZCByZW1vdmVBbGxJZihjb25zdCBNYXRjaEZ1bmN0aW9uJik7CiAKICAgICB2b2lkIHJlbW92
ZUxhc3QoKSAKICAgICB7CkBAIC0xMzE0LDEwICsxMzE2LDIwIEBAIHRlbXBsYXRlPHR5cGVuYW1l
IFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgogdGVt
cGxhdGU8dHlwZW5hbWUgVT4KIGlubGluZSBib29sIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwg
T3ZlcmZsb3dIYW5kbGVyPjo6cmVtb3ZlRmlyc3QoY29uc3QgVSYgdmFsdWUpCiB7Ci0gICAgc2l6
ZV90IGluZGV4ID0gZmluZCh2YWx1ZSk7Ci0gICAgaWYgKGluZGV4ICE9IG5vdEZvdW5kKSB7Ci0g
ICAgICAgIHJlbW92ZShpbmRleCk7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBy
ZW1vdmVGaXJzdElmKFsmdmFsdWVdIChjb25zdCBUJiBjdXJyZW50KSB7CisgICAgICAgIHJldHVy
biBjdXJyZW50ID09IHZhbHVlOworICAgIH0pOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBz
aXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KK3RlbXBsYXRl
PHR5cGVuYW1lIE1hdGNoRnVuY3Rpb24+CitpbmxpbmUgYm9vbCBWZWN0b3I8VCwgaW5saW5lQ2Fw
YWNpdHksIE92ZXJmbG93SGFuZGxlcj46OnJlbW92ZUZpcnN0SWYoY29uc3QgTWF0Y2hGdW5jdGlv
biYgbWF0Y2hlcykKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemUoKTsgKytpKSB7
CisgICAgICAgIGlmIChtYXRjaGVzKGF0KGkpKSkgeworICAgICAgICAgICAgcmVtb3ZlKGkpOwor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIGZh
bHNlOwogfQpAQCAtMTMyNiwxMSArMTMzOCwyMCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXpl
X3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KIHRlbXBsYXRlPHR5
cGVuYW1lIFU+CiBpbmxpbmUgdW5zaWduZWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVy
Zmxvd0hhbmRsZXI+OjpyZW1vdmVBbGwoY29uc3QgVSYgdmFsdWUpCiB7CisgICAgcmV0dXJuIHJl
bW92ZUFsbElmKFsmdmFsdWVdIChjb25zdCBUJiBjdXJyZW50KSB7CisgICAgICAgIHJldHVybiBj
dXJyZW50ID09IHZhbHVlOworICAgIH0pOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXpl
X3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KK3RlbXBsYXRlPHR5
cGVuYW1lIE1hdGNoRnVuY3Rpb24+CitpbmxpbmUgdW5zaWduZWQgVmVjdG9yPFQsIGlubGluZUNh
cGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+OjpyZW1vdmVBbGxJZihjb25zdCBNYXRjaEZ1bmN0aW9u
JiBtYXRjaGVzKQorewogICAgIGl0ZXJhdG9yIGhvbGVCZWdpbiA9IGVuZCgpOwogICAgIGl0ZXJh
dG9yIGhvbGVFbmQgPSBlbmQoKTsKICAgICB1bnNpZ25lZCBtYXRjaENvdW50ID0gMDsKICAgICBm
b3IgKGF1dG8gaXQgPSBiZWdpbigpLCBpdEVuZCA9IGVuZCgpOyBpdCAhPSBpdEVuZDsgKytpdCkg
ewotICAgICAgICBpZiAoKml0ID09IHZhbHVlKSB7CisgICAgICAgIGlmIChtYXRjaGVzKCppdCkp
IHsKICAgICAgICAgICAgIGlmIChob2xlQmVnaW4gPT0gZW5kKCkpCiAgICAgICAgICAgICAgICAg
aG9sZUJlZ2luID0gaXQ7CiAgICAgICAgICAgICBlbHNlIGlmIChob2xlRW5kICE9IGl0KSB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NQYXJzZXIuY3BwCmluZGV4IDQ4YTY2NzNiODk4NGUwMzllNDUyMzhkOThmZGQy
ZWYwYTc3N2ZjNzIuLmJlMTYyMjQyYWEyZTZjOGFlNmJjOGJkMjNmYWJmMWQ5ZDNiZDM4MDcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCkBAIC0xMjA3NywxNCArMTIwNzcsOSBAQCB2b2lkIENT
U1BhcnNlcjo6ZW5kRGVjbGFyYXRpb25zRm9yTWFyZ2luQm94KCkKIHZvaWQgQ1NTUGFyc2VyOjpk
ZWxldGVGb250RmFjZU9ubHlWYWx1ZXMoKQogewogICAgIEFTU0VSVChtX2hhc0ZvbnRGYWNlT25s
eVZhbHVlcyk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcGFyc2VkUHJvcGVydGll
cy5zaXplKCk7KSB7Ci0gICAgICAgIENTU1Byb3BlcnR5JiBwcm9wZXJ0eSA9IG1fcGFyc2VkUHJv
cGVydGllc1tpXTsKLSAgICAgICAgaWYgKHByb3BlcnR5LmlkKCkgPT0gQ1NTUHJvcGVydHlGb250
VmFyaWFudCAmJiBwcm9wZXJ0eS52YWx1ZSgpLT5pc1ZhbHVlTGlzdCgpKSB7Ci0gICAgICAgICAg
ICBtX3BhcnNlZFByb3BlcnRpZXMucmVtb3ZlKGkpOwotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIH0KLSAgICAgICAgKytpOwotICAgIH0KKyAgICBtX3BhcnNlZFByb3BlcnRpZXMucmVt
b3ZlQWxsSWYoW10gKGNvbnN0IENTU1Byb3BlcnR5JiBwcm9wZXJ0eSkgeworICAgICAgICByZXR1
cm4gcHJvcGVydHkuaWQoKSA9PSBDU1NQcm9wZXJ0eUZvbnRWYXJpYW50ICYmIHByb3BlcnR5LnZh
bHVlKCktPmlzVmFsdWVMaXN0KCk7CisgICAgfSk7CiB9CiAKIFBhc3NSZWZQdHI8U3R5bGVLZXlm
cmFtZT4gQ1NTUGFyc2VyOjpjcmVhdGVLZXlmcmFtZShDU1NQYXJzZXJWYWx1ZUxpc3QmIGtleXMp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVMaXN0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZUxpc3QuY3BwCmluZGV4IDkxMTg0NGU2OWIwMjY5ODU3ZDIy
OTcxMzM4OThiYTU2ZTVmNzE5NzcuLmIxYWE0YzMwNGJiNTAyN2Q1NTM1M2IzNjc4YTBjYzMwYTYw
NTYzYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZUxpc3QuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZUxpc3QuY3BwCkBAIC01MCwyMSArNTAsMTUg
QEAgQ1NTVmFsdWVMaXN0OjpDU1NWYWx1ZUxpc3QoQ1NTUGFyc2VyVmFsdWVMaXN0JiBwYXJzZXJW
YWx1ZXMpCiAgICAgfQogfQogCi1ib29sIENTU1ZhbHVlTGlzdDo6cmVtb3ZlQWxsKENTU1ZhbHVl
KiB2YWwpCitib29sIENTU1ZhbHVlTGlzdDo6cmVtb3ZlQWxsKENTU1ZhbHVlKiB2YWx1ZSkKIHsK
ICAgICAvLyBGSVhNRTogV2h5IGV2ZW4gdGFrZSBhIHBvaW50ZXI/Ci0gICAgaWYgKCF2YWwpCisg
ICAgaWYgKCF2YWx1ZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYm9vbCBmb3VuZCA9
IGZhbHNlOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3ZhbHVlcy5zaXplKCk7ICsr
aSkgewotICAgICAgICBpZiAobV92YWx1ZXNbaV0uZ2V0KCkuZXF1YWxzKCp2YWwpKSB7Ci0gICAg
ICAgICAgICBtX3ZhbHVlcy5yZW1vdmUoaSk7Ci0gICAgICAgICAgICBmb3VuZCA9IHRydWU7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gZm91bmQ7CisgICAgcmV0dXJuIG1fdmFsdWVz
LnJlbW92ZUFsbElmKFt2YWx1ZV0gKGNvbnN0IFJlZjxDU1NWYWx1ZT4mIGN1cnJlbnQpIHsKKyAg
ICAgICAgcmV0dXJuIGN1cnJlbnQtPmVxdWFscygqdmFsdWUpOworICAgIH0pID4gMDsKIH0KIAog
Ym9vbCBDU1NWYWx1ZUxpc3Q6Omhhc1ZhbHVlKENTU1ZhbHVlKiB2YWwpIGNvbnN0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFMaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9NZWRpYUxpc3QuY3BwCmluZGV4IGVlNjY3MTIwNDI0MjYwZThkYjM1ZjUyMjhhM2U0NWVhYzEz
MjMyMDEuLmUxODc2ZDM5NmI2NDY1NzQ5NmI2N2NiOWMwYTVjYmNkZWU5NGE5NTUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYUxpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9NZWRpYUxpc3QuY3BwCkBAIC0xODUsMTQgKzE4NSw5IEBAIGJvb2wgTWVkaWFRdWVyeVNl
dDo6cmVtb3ZlKGNvbnN0IFN0cmluZyYgcXVlcnlTdHJpbmdUb1JlbW92ZSkKICAgICBpZiAoIXBh
cnNlZFF1ZXJ5KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtX3F1ZXJpZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgTWVkaWFRdWVyeSog
cXVlcnkgPSBtX3F1ZXJpZXNbaV0uZ2V0KCk7Ci0gICAgICAgIGlmICgqcXVlcnkgPT0gKnBhcnNl
ZFF1ZXJ5KSB7Ci0gICAgICAgICAgICBtX3F1ZXJpZXMucmVtb3ZlKGkpOwotICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJl
dHVybiBtX3F1ZXJpZXMucmVtb3ZlRmlyc3RJZihbJnBhcnNlZFF1ZXJ5XSAoY29uc3Qgc3RkOjp1
bmlxdWVfcHRyPE1lZGlhUXVlcnk+JiBxdWVyeSkgeworICAgICAgICByZXR1cm4gKnF1ZXJ5ID09
ICpwYXJzZWRRdWVyeTsKKyAgICB9KTsKIH0KIAogdm9pZCBNZWRpYVF1ZXJ5U2V0OjphZGRNZWRp
YVF1ZXJ5KHN0ZDo6dW5pcXVlX3B0cjxNZWRpYVF1ZXJ5PiBtZWRpYVF1ZXJ5KQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlNYXRjaGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9NZWRpYVF1ZXJ5TWF0Y2hlci5jcHAKaW5kZXggZGI2YmZiN2Y2Njg4MDg2MjljNGUy
Y2VhYzY2YWUzYWYzMTNjNjAzOS4uNzJiOTcyOGQ2YTRlMWMxMzI2MTUxMjQxMWRkYzQ3Yjc3MWI4
ODIwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlNYXRjaGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeU1hdGNoZXIuY3BwCkBAIC0xMzAs
MTIgKzEzMCw5IEBAIHZvaWQgTWVkaWFRdWVyeU1hdGNoZXI6OnJlbW92ZUxpc3RlbmVyKE1lZGlh
UXVlcnlMaXN0TGlzdGVuZXIqIGxpc3RlbmVyLCBNZWRpYVF1CiAgICAgaWYgKCFtX2RvY3VtZW50
KQogICAgICAgICByZXR1cm47CiAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fbGlzdGVu
ZXJzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmICgqbV9saXN0ZW5lcnNbaV0tPmxpc3RlbmVy
KCkgPT0gKmxpc3RlbmVyICYmIG1fbGlzdGVuZXJzW2ldLT5xdWVyeSgpID09IHF1ZXJ5KSB7Ci0g
ICAgICAgICAgICBtX2xpc3RlbmVycy5yZW1vdmUoaSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICB9CisgICAgbV9saXN0ZW5lcnMucmVtb3ZlRmlyc3RJZihbbGlzdGVuZXIs
IHF1ZXJ5XSAoY29uc3Qgc3RkOjp1bmlxdWVfcHRyPExpc3RlbmVyPiYgY3VycmVudCkgeworICAg
ICAgICByZXR1cm4gKmN1cnJlbnQtPmxpc3RlbmVyKCkgPT0gKmxpc3RlbmVyICYmIGN1cnJlbnQt
PnF1ZXJ5KCkgPT0gcXVlcnk7CisgICAgfSk7CiB9CiAKIHZvaWQgTWVkaWFRdWVyeU1hdGNoZXI6
OnN0eWxlUmVzb2x2ZXJDaGFuZ2VkKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9T
dHlsZVJlc29sdmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcApp
bmRleCAyM2YzNGU1ZDQ1Y2U0ZjMxYTkzNDdhODE4Yzk2YzkwZDVmMTA2NDM0Li45NDdkYTY3NDU5
MTBjMTc0NjU5MzMyMjMzMWEwOTkyMTc1OTIxYTAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVz
b2x2ZXIuY3BwCkBAIC0xMTkxLDEwICsxMTkxLDkgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphZGp1
c3RTdHlsZUZvck1hc2tJbWFnZXMoKQogICAgICAgICB9CiAKICAgICAgICAgVmVjdG9yPFJlZlB0
cjxNYXNrSW1hZ2VPcGVyYXRpb24+PiYgcGVuZGluZ1Jlc291cmNlcyA9IG1fc3RhdGUubWFza0lt
YWdlc1dpdGhQZW5kaW5nU1ZHRG9jdW1lbnRzKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSBwZW5k
aW5nUmVzb3VyY2VzLnNpemUoKSAtIDE7IGkgPj0gMDsgaS0tKSB7Ci0gICAgICAgICAgICBpZiAo
cmVtb3ZlZEV4dGVybmFsUmVzb3VyY2VzLmNvbnRhaW5zKHBlbmRpbmdSZXNvdXJjZXNbaV0pKQot
ICAgICAgICAgICAgICAgIHBlbmRpbmdSZXNvdXJjZXMucmVtb3ZlKGkpOwotICAgICAgICB9Cisg
ICAgICAgIHBlbmRpbmdSZXNvdXJjZXMucmVtb3ZlQWxsSWYoWyZyZW1vdmVkRXh0ZXJuYWxSZXNv
dXJjZXNdIChjb25zdCBSZWZQdHI8TWFza0ltYWdlT3BlcmF0aW9uPiYgcmVzb3VyY2UpIHsKKyAg
ICAgICAgICAgIHJldHVybiByZW1vdmVkRXh0ZXJuYWxSZXNvdXJjZXMuY29udGFpbnMocmVzb3Vy
Y2UpOworICAgICAgICB9KTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAppbmRleCA5
ZDgxNWJjMDY4ZjYzMDg2MmU4ZmNkMWZiOGYwYjFlMmFjZGIxNTcyLi5kNTdkM2YxNjhmN2E3YWRj
NTJlMmZlNmIwYjY2NjExMzY3ZTYwZmUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20v
RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCkBAIC0yOTY1
LDE2ICsyOTY1LDEzIEBAIHZvaWQgRWxlbWVudDo6ZGV0YWNoQXR0ck5vZGVGcm9tRWxlbWVudFdp
dGhWYWx1ZShBdHRyKiBhdHRyTm9kZSwgY29uc3QgQXRvbWljU3RyCiAgICAgQVNTRVJUKGhhc1N5
bnRoZXRpY0F0dHJDaGlsZE5vZGVzKCkpOwogICAgIGF0dHJOb2RlLT5kZXRhY2hGcm9tRWxlbWVu
dFdpdGhWYWx1ZSh2YWx1ZSk7CiAKLSAgICBhdXRvKiBhdHRyTm9kZUxpc3QgPSBhdHRyTm9kZUxp
c3RGb3JFbGVtZW50KCp0aGlzKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXR0ck5v
ZGVMaXN0LT5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAoYXR0ck5vZGVMaXN0LT5hdChpKS0+
cXVhbGlmaWVkTmFtZSgpID09IGF0dHJOb2RlLT5xdWFsaWZpZWROYW1lKCkpIHsKLSAgICAgICAg
ICAgIGF0dHJOb2RlTGlzdC0+cmVtb3ZlKGkpOwotICAgICAgICAgICAgaWYgKGF0dHJOb2RlTGlz
dC0+aXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIHJlbW92ZUF0dHJOb2RlTGlzdEZvckVsZW1l
bnQoKnRoaXMpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIGF1dG8mIGF0dHJOb2RlTGlzdCA9ICphdHRyTm9kZUxp
c3RGb3JFbGVtZW50KCp0aGlzKTsKKyAgICBib29sIGZvdW5kID0gYXR0ck5vZGVMaXN0LnJlbW92
ZUZpcnN0SWYoW2F0dHJOb2RlXSAoY29uc3QgUmVmUHRyPEF0dHI+JiBhdHRyaWJ1dGUpIHsKKyAg
ICAgICAgcmV0dXJuIGF0dHJpYnV0ZS0+cXVhbGlmaWVkTmFtZSgpID09IGF0dHJOb2RlLT5xdWFs
aWZpZWROYW1lKCk7CisgICAgfSk7CisgICAgQVNTRVJUX1VOVVNFRChmb3VuZCwgZm91bmQpOwor
ICAgIGlmIChhdHRyTm9kZUxpc3QuaXNFbXB0eSgpKQorICAgICAgICByZW1vdmVBdHRyTm9kZUxp
c3RGb3JFbGVtZW50KCp0aGlzKTsKIH0KIAogdm9pZCBFbGVtZW50OjpkZXRhY2hBbGxBdHRyTm9k
ZXNGcm9tRWxlbWVudCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRMaXN0
ZW5lck1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRMaXN0ZW5lck1hcC5jcHAKaW5k
ZXggYjYwNTM1YmI2Nzk2Mjc1MmQ1MzVlZjgzNWIwMzAyZTUzMTk4MTgyZS4uYzQwOTE5YjZlYTY0
ZTQyNTM5ZWNiZTAzYzE2OTVlN2U3ZmE5YjlkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZG9tL0V2ZW50TGlzdGVuZXJNYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudExp
c3RlbmVyTWFwLmNwcApAQCAtMTU2LDIxICsxNTYsMTQgQEAgRXZlbnRMaXN0ZW5lclZlY3Rvciog
RXZlbnRMaXN0ZW5lck1hcDo6ZmluZChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSkKICAg
ICAgICAgICAgIHJldHVybiBtX2VudHJpZXNbaV0uc2Vjb25kLmdldCgpOwogICAgIH0KIAotICAg
IHJldHVybiAwOworICAgIHJldHVybiBudWxscHRyOwogfQogCi1zdGF0aWMgdm9pZCByZW1vdmVG
aXJzdExpc3RlbmVyQ3JlYXRlZEZyb21NYXJrdXAoRXZlbnRMaXN0ZW5lclZlY3RvciogbGlzdGVu
ZXJWZWN0b3IpCitzdGF0aWMgdm9pZCByZW1vdmVGaXJzdExpc3RlbmVyQ3JlYXRlZEZyb21NYXJr
dXAoRXZlbnRMaXN0ZW5lclZlY3RvciYgbGlzdGVuZXJWZWN0b3IpCiB7Ci0gICAgYm9vbCBmb3Vu
ZExpc3RlbmVyID0gZmFsc2U7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpc3RlbmVy
VmVjdG9yLT5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAoIWxpc3RlbmVyVmVjdG9yLT5hdChp
KS5saXN0ZW5lci0+d2FzQ3JlYXRlZEZyb21NYXJrdXAoKSkKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICBmb3VuZExpc3RlbmVyID0gdHJ1ZTsKLSAgICAgICAgbGlzdGVuZXJWZWN0b3It
PnJlbW92ZShpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCisgICAgYm9vbCBmb3VuZExpc3Rl
bmVyID0gbGlzdGVuZXJWZWN0b3IucmVtb3ZlRmlyc3RJZihbXSAoY29uc3QgUmVnaXN0ZXJlZEV2
ZW50TGlzdGVuZXImIGxpc3RlbmVyKSB7CisgICAgICAgIHJldHVybiBsaXN0ZW5lci5saXN0ZW5l
ci0+d2FzQ3JlYXRlZEZyb21NYXJrdXAoKTsKKyAgICB9KTsKICAgICBBU1NFUlRfVU5VU0VEKGZv
dW5kTGlzdGVuZXIsIGZvdW5kTGlzdGVuZXIpOwogfQogCkBAIC0xODAsNyArMTczLDcgQEAgdm9p
ZCBFdmVudExpc3RlbmVyTWFwOjpyZW1vdmVGaXJzdEV2ZW50TGlzdGVuZXJDcmVhdGVkRnJvbU1h
cmt1cChjb25zdCBBdG9taWNTdHIKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2Vu
dHJpZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgaWYgKG1fZW50cmllc1tpXS5maXJzdCA9PSBl
dmVudFR5cGUpIHsKLSAgICAgICAgICAgIHJlbW92ZUZpcnN0TGlzdGVuZXJDcmVhdGVkRnJvbU1h
cmt1cChtX2VudHJpZXNbaV0uc2Vjb25kLmdldCgpKTsKKyAgICAgICAgICAgIHJlbW92ZUZpcnN0
TGlzdGVuZXJDcmVhdGVkRnJvbU1hcmt1cCgqbV9lbnRyaWVzW2ldLnNlY29uZCk7CiAgICAgICAg
ICAgICBpZiAobV9lbnRyaWVzW2ldLnNlY29uZC0+aXNFbXB0eSgpKQogICAgICAgICAgICAgICAg
IG1fZW50cmllcy5yZW1vdmUoaSk7CiAgICAgICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAK
aW5kZXggOWNjM2FiZTU3Mjg1MzljODVhZGFjOWUyZmQ1MDQ3YWIxMjdkYjgwNi4uY2EzYzFkNTM0
ZjdmMjM4OTY2NDM1Yzk0MDU5YTM0ODMwNGRjOTZmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL05vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcApAQCAtMTk1
MiwxMiArMTk1Miw5IEBAIHZvaWQgTm9kZTo6dW5yZWdpc3Rlck11dGF0aW9uT2JzZXJ2ZXIoTXV0
YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbiogcmVnaXN0cmF0aW9uCiAgICAgaWYgKCFyZWdpc3Ry
eSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZWdpc3Ry
eS0+c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKHJlZ2lzdHJ5LT5hdChpKS5nZXQoKSA9PSBy
ZWdpc3RyYXRpb24pIHsKLSAgICAgICAgICAgIHJlZ2lzdHJ5LT5yZW1vdmUoaSk7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9CisgICAgcmVnaXN0cnktPnJlbW92ZUZpcnN0
SWYoW3JlZ2lzdHJhdGlvbl0gKGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxNdXRhdGlvbk9ic2VydmVy
UmVnaXN0cmF0aW9uPiYgY3VycmVudCkgeworICAgICAgICByZXR1cm4gY3VycmVudC5nZXQoKSA9
PSByZWdpc3RyYXRpb247CisgICAgfSk7CiB9CiAKIHZvaWQgTm9kZTo6cmVnaXN0ZXJUcmFuc2ll
bnRNdXRhdGlvbk9ic2VydmVyKE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24qIHJlZ2lzdHJh
dGlvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVp
bGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3Bw
CmluZGV4IDA0MmNhMGVjOTE0MWM3MzY0MTRkYWZiNTA0NDFkN2Y2MmMxODBlOTUuLmNhYTkzNjgz
OGMyYzE5MGMwN2ZlYjA0NzIzNDQwZTkzOTg2NGIyMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcApAQCAtNDQxLDExICs0NDEsMTAgQEAgdm9p
ZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NGYWtlUEVuZFRhZ0lmUEluQnV0dG9uU2NvcGUoKQog
VmVjdG9yPEF0dHJpYnV0ZT4gSFRNTFRyZWVCdWlsZGVyOjphdHRyaWJ1dGVzRm9ySXNpbmRleElu
cHV0KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiB7CiAgICAgVmVjdG9yPEF0dHJpYnV0ZT4gYXR0
cmlidXRlcyA9IHRva2VuLmF0dHJpYnV0ZXMoKTsKLSAgICBmb3IgKGludCBpID0gYXR0cmlidXRl
cy5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgewotICAgICAgICBjb25zdCBRdWFsaWZpZWROYW1l
JiBuYW1lID0gYXR0cmlidXRlcy5hdChpKS5uYW1lKCk7Ci0gICAgICAgIGlmIChuYW1lLm1hdGNo
ZXMobmFtZUF0dHIpIHx8IG5hbWUubWF0Y2hlcyhhY3Rpb25BdHRyKSB8fCBuYW1lLm1hdGNoZXMo
cHJvbXB0QXR0cikpCi0gICAgICAgICAgICBhdHRyaWJ1dGVzLnJlbW92ZShpKTsKLSAgICB9Cisg
ICAgYXR0cmlidXRlcy5yZW1vdmVBbGxJZihbXSAoY29uc3QgQXR0cmlidXRlJiBhdHRyaWJ1dGUp
IHsKKyAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSA9IGF0dHJpYnV0ZS5uYW1lKCk7
CisgICAgICAgIHJldHVybiBuYW1lLm1hdGNoZXMobmFtZUF0dHIpIHx8IG5hbWUubWF0Y2hlcyhh
Y3Rpb25BdHRyKSB8fCBuYW1lLm1hdGNoZXMocHJvbXB0QXR0cik7CisgICAgfSk7CiAKICAgICBh
dHRyaWJ1dGVzLmFwcGVuZChBdHRyaWJ1dGUobmFtZUF0dHIsIGlzaW5kZXhUYWcubG9jYWxOYW1l
KCkpKTsKICAgICByZXR1cm4gYXR0cmlidXRlczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0
aW9uLmNwcAppbmRleCBjMTQ0ZDA1NWUwZGY3NmU5OTM4OTVmMjNhNjZjYmQyYWZkNzM4YWI3Li4w
OTJjOWFhZmQ2MDMxMTJmZTliOTEwOGE2ODZmZTM0NWU0MWM1OGZlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1hdGlv
bi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1
cmVNYXBwZXJBbmltYXRpb24uY3BwCkBAIC0zNjUsMTggKzM2NSwxNiBAQCB2b2lkIFRleHR1cmVN
YXBwZXJBbmltYXRpb25zOjpyZXN1bWUoKQogCiB2b2lkIFRleHR1cmVNYXBwZXJBbmltYXRpb25z
OjpyZW1vdmUoY29uc3QgU3RyaW5nJiBuYW1lKQogewotICAgIGZvciAoaW50IGkgPSBtX2FuaW1h
dGlvbnMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKLSAgICAgICAgaWYgKG1fYW5pbWF0aW9u
c1tpXS5uYW1lKCkgPT0gbmFtZSkKLSAgICAgICAgICAgIG1fYW5pbWF0aW9ucy5yZW1vdmUoaSk7
Ci0gICAgfQorICAgIG1fYW5pbWF0aW9ucy5yZW1vdmVBbGxJZihbJm5hbWVdIChjb25zdCBUZXh0
dXJlTWFwcGVyQW5pbWF0aW9uJiBhbmltYXRpb24pIHsKKyAgICAgICAgcmV0dXJuIGFuaW1hdGlv
bi5uYW1lKCkgPT0gbmFtZTsKKyAgICB9KTsKIH0KIAogdm9pZCBUZXh0dXJlTWFwcGVyQW5pbWF0
aW9uczo6cmVtb3ZlKGNvbnN0IFN0cmluZyYgbmFtZSwgQW5pbWF0ZWRQcm9wZXJ0eUlEIHByb3Bl
cnR5KQogewotICAgIGZvciAoaW50IGkgPSBtX2FuaW1hdGlvbnMuc2l6ZSgpIC0gMTsgaSA+PSAw
OyAtLWkpIHsKLSAgICAgICAgaWYgKG1fYW5pbWF0aW9uc1tpXS5uYW1lKCkgPT0gbmFtZSAmJiBt
X2FuaW1hdGlvbnNbaV0ucHJvcGVydHkoKSA9PSBwcm9wZXJ0eSkKLSAgICAgICAgICAgIG1fYW5p
bWF0aW9ucy5yZW1vdmUoaSk7Ci0gICAgfQorICAgIG1fYW5pbWF0aW9ucy5yZW1vdmVBbGxJZihb
Jm5hbWUsIHByb3BlcnR5XSAoY29uc3QgVGV4dHVyZU1hcHBlckFuaW1hdGlvbiYgYW5pbWF0aW9u
KSB7CisgICAgICAgIHJldHVybiBhbmltYXRpb24ubmFtZSgpID09IG5hbWUgJiYgYW5pbWF0aW9u
LnByb3BlcnR5KCkgPT0gcHJvcGVydHk7CisgICAgfSk7CiB9CiAKIHZvaWQgVGV4dHVyZU1hcHBl
ckFuaW1hdGlvbnM6OmFwcGx5KFRleHR1cmVNYXBwZXJBbmltYXRpb246OkNsaWVudCogY2xpZW50
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcApp
bmRleCBiZDE0YTdiOTBjYjljZjA1MDRiYWI4YjEwZGI3MTc0OTVmYjg0YmQyLi4wYjdiNGIxZTMx
MzYwMzE3N2JhYmQ2NWFiZWU5ZmUzZWNiYWQ0MmQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcApAQCAtMjE0LDEwICsyMTQsOSBAQCBzdGF0
aWMgaW5saW5lIFF1YWxpZmllZE5hbWUgY29uc3RydWN0UXVhbGlmaWVkTmFtZShjb25zdCBTVkdF
bGVtZW50KiBzdmdFbGVtZW50LAogCiBzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJUaW1lc1dpdGhE
eW5hbWljT3JpZ2lucyhWZWN0b3I8U01JTFRpbWVXaXRoT3JpZ2luPiYgdGltZUxpc3QpCiB7Ci0g
ICAgZm9yIChpbnQgaSA9IHRpbWVMaXN0LnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7Ci0gICAg
ICAgIGlmICh0aW1lTGlzdFtpXS5vcmlnaW5Jc1NjcmlwdCgpKQotICAgICAgICAgICAgdGltZUxp
c3QucmVtb3ZlKGkpOwotICAgIH0KKyAgICB0aW1lTGlzdC5yZW1vdmVBbGxJZihbXSAoY29uc3Qg
U01JTFRpbWVXaXRoT3JpZ2luJiB0aW1lKSB7CisgICAgICAgIHJldHVybiB0aW1lLm9yaWdpbklz
U2NyaXB0KCk7CisgICAgfSk7CiB9CiAKIHZvaWQgU1ZHU01JTEVsZW1lbnQ6OnJlc2V0KCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYk5vdGlmaWNhdGlvbkNlbnRlci5jcHAgYi9T
b3VyY2UvV2ViS2l0L3dpbi9XZWJOb3RpZmljYXRpb25DZW50ZXIuY3BwCmluZGV4IDhmODU3NmY4
NGJkODE5Njk3OWIyZmZkOTQ0OTA3OWNiYzE2Y2FkOTUuLjk2NzJiNzA4OWY0ZWNlMGY5YjMzMDk0
NGMwNzEwMDQ1NTJkYWUwODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYk5vdGlm
aWNhdGlvbkNlbnRlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC93aW4vV2ViTm90aWZpY2F0aW9u
Q2VudGVyLmNwcApAQCAtMjAwLDE1ICsyMDAsMTEgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQ
RSBXZWJOb3RpZmljYXRpb25DZW50ZXI6OnJlbW92ZU9ic2VydmVyKAogICAgIE9iamVjdE9ic2Vy
dmVyTGlzdCYgb2JzZXJ2ZXJMaXN0ID0gaXQtPnZhbHVlOwogICAgIE9ic2VydmVyTGlzdEl0ZXJh
dG9yIGVuZCA9IG9ic2VydmVyTGlzdC5lbmQoKTsKIAotICAgIGludCBpID0gMDsKLSAgICBmb3Ig
KE9ic2VydmVyTGlzdEl0ZXJhdG9yIGl0MiA9IG9ic2VydmVyTGlzdC5iZWdpbigpOyBpdDIgIT0g
ZW5kOyArK2l0MiwgKytpKSB7Ci0gICAgICAgIElVbmtub3duKiBvYnNlcnZlZE9iamVjdCA9IGl0
Mi0+Zmlyc3QuZ2V0KCk7Ci0gICAgICAgIElXZWJOb3RpZmljYXRpb25PYnNlcnZlciogb2JzZXJ2
ZXIgPSBpdDItPnNlY29uZC5nZXQoKTsKLSAgICAgICAgaWYgKG9ic2VydmVyID09IGFuT2JzZXJ2
ZXIgJiYgKCFhbk9iamVjdCB8fCBhbk9iamVjdCA9PSBvYnNlcnZlZE9iamVjdCkpIHsKLSAgICAg
ICAgICAgIG9ic2VydmVyTGlzdC5yZW1vdmUoaSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgIH0KKyAgICBvYnNlcnZlckxpc3QucmVtb3ZlRmlyc3RJZihbYW5PYmplY3RdIChj
b25zdCBPYmplY3RPYnNlcnZlclBhaXImIHBhaXIpIHsKKyAgICAgICAgSVVua25vd24qIG9ic2Vy
dmVkT2JqZWN0ID0gcGFpci5maXJzdC5nZXQoKTsKKyAgICAgICAgSVdlYk5vdGlmaWNhdGlvbk9i
c2VydmVyKiBvYnNlcnZlciA9IHBhaXIuc2Vjb25kLmdldCgpOworICAgICAgICByZXR1cm4gb2Jz
ZXJ2ZXIgPT0gYW5PYnNlcnZlciAmJiAoIWFuT2JqZWN0IHx8IGFuT2JqZWN0ID09IG9ic2VydmVk
T2JqZWN0KTsKKyAgICB9KTsKIAogICAgIGlmIChvYnNlcnZlckxpc3QuaXNFbXB0eSgpKQogICAg
ICAgICBkLT5tX21hcHBlZE9ic2VydmVycy5yZW1vdmUobmFtZSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1BsYXRmb3JtQ0FMYXllclJlbW90ZS5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1BsYXRmb3JtQ0FMYXll
clJlbW90ZS5jcHAKaW5kZXggOGIwZGEzYTI2Y2U5YWJjZWMzZmUwM2Y2N2M3NWYwZmIyMDYyNGIz
MC4uZTc0YTQ0Zjg3N2JhNTFkODRjMTM0MTY0MjNjMGI1NDBmMjViN2I3YyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9QbGF0Zm9ybUNBTGF5ZXJSZW1v
dGUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUGxhdGZv
cm1DQUxheWVyUmVtb3RlLmNwcApAQCAtMzUwLDEyICszNTAsOSBAQCB2b2lkIFBsYXRmb3JtQ0FM
YXllclJlbW90ZTo6YWRkQW5pbWF0aW9uRm9yS2V5KGNvbnN0IFN0cmluZyYga2V5LCBQbGF0Zm9y
bUNBQW5pbQogdm9pZCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OnJlbW92ZUFuaW1hdGlvbkZvcktl
eShjb25zdCBTdHJpbmcmIGtleSkKIHsKICAgICBpZiAobV9hbmltYXRpb25zLnJlbW92ZShrZXkp
KSB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9wcm9wZXJ0aWVzLmFkZGVkQW5p
bWF0aW9ucy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgaWYgKG1fcHJvcGVydGllcy5hZGRl
ZEFuaW1hdGlvbnNbaV0uZmlyc3QgPT0ga2V5KSB7Ci0gICAgICAgICAgICAgICAgbV9wcm9wZXJ0
aWVzLmFkZGVkQW5pbWF0aW9ucy5yZW1vdmUoaSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgbV9wcm9wZXJ0aWVzLmFkZGVkQW5pbWF0
aW9ucy5yZW1vdmVGaXJzdElmKFsma2V5XSAoY29uc3Qgc3RkOjpwYWlyPFN0cmluZywgUGxhdGZv
cm1DQUFuaW1hdGlvblJlbW90ZTo6UHJvcGVydGllcz4mIHBhaXIpIHsKKyAgICAgICAgICAgIHJl
dHVybiBwYWlyLmZpcnN0ID09IGtleTsKKyAgICAgICAgfSk7CiAgICAgfQogICAgIG1fcHJvcGVy
dGllcy5rZXlQYXRoc09mQW5pbWF0aW9uc1RvUmVtb3ZlLmFkZChrZXkpOwogICAgIG1fcHJvcGVy
dGllcy5ub3RlUHJvcGVydGllc0NoYW5nZWQoUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OkFu
aW1hdGlvbnNDaGFuZ2VkKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0No
YW5nZUxvZwppbmRleCBlOTY0NDg1ZTA1MjlkYTJhNWM2ODc4M2ExZDJkNjEwMzYwZDc3ODFlLi4z
OTRhMWJhYzc3YzcyNzI1NWEyMDEyNmI3YmY2MzNkOTA1MDExN2E4IDEwMDY0NAotLS0gYS9Ub29s
cy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTUt
MDItMDUgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgVmVj
dG9yOjpyZW1vdmVGaXJzdElmKCkgLyByZW1vdmVBbGxJZigpIG1ldGhvZHMgdGFraW5nIGxhbWJk
YSBmdW5jdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE0MTMyMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFVzZSBuZXcgVmVjdG9yOjpyZW1vdmVGaXJzdElmKCkgLyByZW1vdmVBbGxJZigpIG1ldGhv
ZHMuCisKIDIwMTUtMDItMDUgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CiAK
ICAgICAgICAgRGFzaGJvYXJkIGRvZXNuJ3QgY29uc2lkZXIgYnVpbGRpbmcgQVNhbiBhIHByb2R1
Y3RpdmUgc3RlcApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVmVj
dG9yLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1ZlY3Rvci5jcHAKaW5kZXgg
Njc1OTZhYzQ5Yjg3ZWRhOTgxOTg4NDJjMTQ3YzJlZDgyMDY3NTE5ZS4uZjQ3MmM2NGFiMDdlOTY2
ZGExYzc1OTI1MWZkMWQ4MzY2ODc2NGRiYyAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XVEYvVmVjdG9yLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dU
Ri9WZWN0b3IuY3BwCkBAIC00NjMsNCArNDYzLDU4IEBAIFRFU1QoV1RGX1ZlY3RvciwgUmVtb3Zl
QWxsKQogICAgIEVYUEVDVF9UUlVFKHYyID09IHZFeHBlY3RlZCk7CiB9CiAKK1RFU1QoV1RGX1Zl
Y3RvciwgUmVtb3ZlRmlyc3RJZikKK3sKKyAgICBWZWN0b3I8aW50PiB2OworICAgIEVYUEVDVF9U
UlVFKHYuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfRkFMU0Uodi5yZW1vdmVGaXJzdElmKFtdIChp
bnQgdmFsdWUpIHsgcmV0dXJuIHZhbHVlID4gMDsgfSkpOworICAgIEVYUEVDVF9GQUxTRSh2LnJl
bW92ZUZpcnN0SWYoW10gKGludCkgeyByZXR1cm4gdHJ1ZTsgfSkpOworICAgIEVYUEVDVF9GQUxT
RSh2LnJlbW92ZUZpcnN0SWYoW10gKGludCkgeyByZXR1cm4gZmFsc2U7IH0pKTsKKworICAgIHYg
PSB7MywgMSwgMiwgMSwgMiwgMSwgMiwgMiwgMSwgMSwgMSwgM307CisgICAgRVhQRUNUX0VRKDEy
VSwgdi5zaXplKCkpOworICAgIEVYUEVDVF9GQUxTRSh2LnJlbW92ZUZpcnN0SWYoW10gKGludCkg
eyByZXR1cm4gZmFsc2U7IH0pKTsKKyAgICBFWFBFQ1RfRVEoMTJVLCB2LnNpemUoKSk7CisgICAg
RVhQRUNUX0ZBTFNFKHYucmVtb3ZlRmlyc3RJZihbXSAoaW50IHZhbHVlKSB7IHJldHVybiB2YWx1
ZSA8IDA7IH0pKTsKKyAgICBFWFBFQ1RfRVEoMTJVLCB2LnNpemUoKSk7CisgICAgRVhQRUNUX1RS
VUUodi5yZW1vdmVGaXJzdElmKFtdIChpbnQgdmFsdWUpIHsgcmV0dXJuIHZhbHVlIDwgMzsgfSkp
OworICAgIEVYUEVDVF9FUSgxMVUsIHYuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfVFJVRSh2ID09IFZl
Y3RvcjxpbnQ+KHszLCAyLCAxLCAyLCAxLCAyLCAyLCAxLCAxLCAxLCAzfSkpOworICAgIEVYUEVD
VF9UUlVFKHYucmVtb3ZlRmlyc3RJZihbXSAoaW50IHZhbHVlKSB7IHJldHVybiB2YWx1ZSA+IDI7
IH0pKTsKKyAgICBFWFBFQ1RfRVEoMTBVLCB2LnNpemUoKSk7CisgICAgRVhQRUNUX1RSVUUodiA9
PSBWZWN0b3I8aW50Pih7MiwgMSwgMiwgMSwgMiwgMiwgMSwgMSwgMSwgM30pKTsKKyAgICBFWFBF
Q1RfVFJVRSh2LnJlbW92ZUZpcnN0SWYoW10gKGludCB2YWx1ZSkgeyByZXR1cm4gdmFsdWUgPiAy
OyB9KSk7CisgICAgRVhQRUNUX0VRKDlVLCB2LnNpemUoKSk7CisgICAgRVhQRUNUX1RSVUUodiA9
PSBWZWN0b3I8aW50Pih7MiwgMSwgMiwgMSwgMiwgMiwgMSwgMSwgMX0pKTsKK30KKworVEVTVChX
VEZfVmVjdG9yLCBSZW1vdmVBbGxJZikKK3sKKyAgICBWZWN0b3I8aW50PiB2OworICAgIEVYUEVD
VF9UUlVFKHYuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfRkFMU0Uodi5yZW1vdmVBbGxJZihbXSAo
aW50IHZhbHVlKSB7IHJldHVybiB2YWx1ZSA+IDA7IH0pKTsKKyAgICBFWFBFQ1RfRkFMU0Uodi5y
ZW1vdmVBbGxJZihbXSAoaW50KSB7IHJldHVybiB0cnVlOyB9KSk7CisgICAgRVhQRUNUX0ZBTFNF
KHYucmVtb3ZlQWxsSWYoW10gKGludCkgeyByZXR1cm4gZmFsc2U7IH0pKTsKKworICAgIHYgPSB7
MywgMSwgMiwgMSwgMiwgMSwgMiwgMiwgMSwgMSwgMSwgM307CisgICAgRVhQRUNUX0VRKDEyVSwg
di5zaXplKCkpOworICAgIEVYUEVDVF9FUSgwVSwgdi5yZW1vdmVBbGxJZihbXSAoaW50KSB7IHJl
dHVybiBmYWxzZTsgfSkpOworICAgIEVYUEVDVF9FUSgxMlUsIHYuc2l6ZSgpKTsKKyAgICBFWFBF
Q1RfRVEoMFUsIHYucmVtb3ZlQWxsSWYoW10gKGludCB2YWx1ZSkgeyByZXR1cm4gdmFsdWUgPCAw
OyB9KSk7CisgICAgRVhQRUNUX0VRKDEyVSwgdi5zaXplKCkpOworICAgIEVYUEVDVF9FUSgxMlUs
IHYucmVtb3ZlQWxsSWYoW10gKGludCB2YWx1ZSkgeyByZXR1cm4gdmFsdWUgPiAwOyB9KSk7Cisg
ICAgRVhQRUNUX1RSVUUodi5pc0VtcHR5KCkpOworCisgICAgdiA9IHszLCAxLCAyLCAxLCAyLCAx
LCAzLCAyLCAyLCAxLCAxLCAxLCAzfTsKKyAgICBFWFBFQ1RfRVEoMTNVLCB2LnNpemUoKSk7Cisg
ICAgRVhQRUNUX0VRKDNVLCB2LnJlbW92ZUFsbElmKFtdIChpbnQgdmFsdWUpIHsgcmV0dXJuIHZh
bHVlID4gMjsgfSkpOworICAgIEVYUEVDVF9FUSgxMFUsIHYuc2l6ZSgpKTsKKyAgICBFWFBFQ1Rf
VFJVRSh2ID09IFZlY3RvcjxpbnQ+KHsxLCAyLCAxLCAyLCAxLCAyLCAyLCAxLCAxLCAxfSkpOwor
ICAgIEVYUEVDVF9FUSg2VSwgdi5yZW1vdmVBbGxJZihbXSAoaW50IHZhbHVlKSB7IHJldHVybiB2
YWx1ZSAhPSAyOyB9KSk7CisgICAgRVhQRUNUX0VRKDRVLCB2LnNpemUoKSk7CisgICAgRVhQRUNU
X1RSVUUodiA9PSBWZWN0b3I8aW50Pih7MiwgMiwgMiwgMn0pKTsKKyAgICBFWFBFQ1RfRVEoNFUs
IHYucmVtb3ZlQWxsSWYoW10gKGludCB2YWx1ZSkgeyByZXR1cm4gdmFsdWUgPT0gMjsgfSkpOwor
ICAgIEVYUEVDVF9UUlVFKHYuaXNFbXB0eSgpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgVGVzdFdl
YktpdEFQSQpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS9JbmplY3RlZEJ1bmRsZS5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL0luamVjdGVkQnVuZGxlLmNwcAppbmRleCA0NGVhMzkxNTBjYmQ4MmEyNTcwM2MzNmNmYjkw
MjgxM2QyZmM3N2UyLi5kM2ViNWRlN2Q1NDgxZjhkYmYxMTVjOWEwYTQ3MjA5NTU5ZDNiZDc4IDEw
MDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVk
QnVuZGxlLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0lu
amVjdGVkQnVuZGxlLmNwcApAQCAtMTA5LDEzICsxMDksOSBAQCB2b2lkIEluamVjdGVkQnVuZGxl
OjpkaWRDcmVhdGVQYWdlKFdLQnVuZGxlUGFnZVJlZiBwYWdlKQogCiB2b2lkIEluamVjdGVkQnVu
ZGxlOjp3aWxsRGVzdHJveVBhZ2UoV0tCdW5kbGVQYWdlUmVmIHBhZ2UpCiB7Ci0gICAgc2l6ZV90
IHNpemUgPSBtX3BhZ2VzLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7
ICsraSkgewotICAgICAgICBpZiAobV9wYWdlc1tpXS0+cGFnZSgpID09IHBhZ2UpIHsKLSAgICAg
ICAgICAgIG1fcGFnZXMucmVtb3ZlKGkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICB9CisgICAgbV9wYWdlcy5yZW1vdmVGaXJzdElmKFtwYWdlXSAoY29uc3Qgc3RkOjp1bmlx
dWVfcHRyPEluamVjdGVkQnVuZGxlUGFnZT4mIGN1cnJlbnQpIHsKKyAgICAgICAgcmV0dXJuIGN1
cnJlbnQtPnBhZ2UoKSA9PSBwYWdlOworICAgIH0pOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxl
OjpkaWRJbml0aWFsaXplUGFnZUdyb3VwKFdLQnVuZGxlUGFnZUdyb3VwUmVmIHBhZ2VHcm91cCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246163</attachid>
            <date>2015-02-06 09:20:43 -0800</date>
            <delta_ts>2015-02-07 16:02:49 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-141321-20150206092041.patch</filename>
            <type>text/plain</type>
            <size>24966</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc5NzQwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
MjZmN2ZhMjNkZDVjMDRhMzJkZDFhOGU2Zjk4Y2FkMjhmY2I0YjlhLi5kNDNhZTQ1NjEwMjUwM2Jk
NzNkOWI4Y2QwYjczZmMyNmQzZGFhNWQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMiBAQAorMjAxNS0wMi0wNSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgor
CisgICAgICAgIEFkZCBWZWN0b3I6OnJlbW92ZUZpcnN0SWYoKSAvIHJlbW92ZUFsbElmKCkgbWV0
aG9kcyB0YWtpbmcgbGFtYmRhIGZ1bmN0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxMzIxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVXNlIG5ldyBWZWN0b3I6OnJlbW92ZUZpcnN0SWYoKSAvIHJl
bW92ZUFsbElmKCkgbWV0aG9kcy4KKwogMjAxNS0wMi0wNSAgTWljaGFlbCBTYWJvZmYgIDxtc2Fi
b2ZmQGFwcGxlLmNvbT4KIAogICAgICAgICBDb2RlQ2FjaGUgaXMgbm90IHRocmVhZCBzYWZlIHdo
ZW4gYWRkaW5nIHRoZSBzYW1lIHNvdXJjZSBmcm9tIHR3byBkaWZmZXJlbnQgdGhyZWFkcwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwppbmRl
eCA0M2RhZmJlYjU4Y2JkNjAwMjlmMjYxN2U4NDQ1MmI3ZDhiNzFlYjRlLi41ZjUwNTgwYzNkYWRj
NjQwMGEyMWQxMTYxNWQyMDhmNWNjN2EwYTM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDE1LTAy
LTA1ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIFZlY3Rv
cjo6cmVtb3ZlRmlyc3RJZigpIC8gcmVtb3ZlQWxsSWYoKSBtZXRob2RzIHRha2luZyBsYW1iZGEg
ZnVuY3Rpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNDEzMjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGQgVmVjdG9yOjpyZW1vdmVGaXJzdElmKCkgLyByZW1vdmVBbGxJZigpIG1ldGhvZHMgdGFr
aW5nIGxhbWJkYQorICAgICAgICBmdW5jdGlvbnMgdG8gbWF0Y2ggdGhlIGVsZW1lbnQocykgdG8g
cmVtb3ZlLiBUaGlzIHNpbXBsaWZpZXMgdGhlIGNvZGUKKyAgICAgICAgYSBiaXQuIFZlY3Rvcjo6
cmVtb3ZlQWxsSWYoKSBpcyBhbHNvIG1vcmUgZWZmaWNpZW50IHRoYW4gdGhlIG1hbnVhbAorICAg
ICAgICByZW1vdmFsIGFsdGVybmF0aXZlLgorCisgICAgICAgICogd3RmL1ZlY3Rvci5oOgorICAg
ICAgICAoV1RGOjpPdmVyZmxvd0hhbmRsZXI+OjpyZW1vdmVGaXJzdCk6CisgICAgICAgIChXVEY6
Ok92ZXJmbG93SGFuZGxlcj46OnJlbW92ZUZpcnN0SWYpOgorICAgICAgICAoV1RGOjpPdmVyZmxv
d0hhbmRsZXI+OjpyZW1vdmVBbGwpOgorICAgICAgICAoV1RGOjpPdmVyZmxvd0hhbmRsZXI+Ojpy
ZW1vdmVBbGxJZik6CisKIDIwMTUtMDItMDUgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm4uZmFibGV0
QGNyZi5jYW5vbi5mcj4gYW5kIFhhYmllciBSb2RyaWd1ZXogQ2FsdmFyIDxjYWx2YXJpc0BpZ2Fs
aWEuY29tPgogCiAgICAgICAgIFtTdHJlYW1zIEFQSV0gSW1wbGVtZW50IGEgYmFyZWJvbmUgUmVh
ZGFibGVTdHJlYW0gaW50ZXJmYWNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2E3NTZlMGI1ZDJmYjMyNWQyZDk4
YzQ1OWI5MDRkYzNlNTgxNGYxOC4uYzY0M2U3YjkwYTg3NDU3NTEwZjgxYmQ2ZTU3NWQyNTE2MWMy
Mzc1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDE1LTAyLTA1ICBDaHJpcyBEdW1l
eiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIFZlY3Rvcjo6cmVtb3ZlRmlyc3RJ
ZigpIC8gcmVtb3ZlQWxsSWYoKSBtZXRob2RzIHRha2luZyBsYW1iZGEgZnVuY3Rpb25zCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDEzMjEKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVc2UgbmV3IFZlY3Rv
cjo6cmVtb3ZlRmlyc3RJZigpIC8gcmVtb3ZlQWxsSWYoKSBtZXRob2RzLgorCiAyMDE1LTAyLTA1
ICBEaGkgQXVycmFobWFuICA8ZGlvcmFobWFuQHJvY2t5YmFycy5jb20+CiAKICAgICAgICAgUmVt
b3ZlIGR1cGxpY2F0ZSBsb29wIGFmdGVyIHIxNzk1MzIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvd2luL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwppbmRleCA4NGEw
ODhhY2I3MTU0ODg1MzU4NjhkNmFjMGJjN2MwMmY1MTc2MDkzLi40OTE3YjA3ZTI2M2JjY2IxOTIy
MmI3NDE5MjU0MzRhYTdmNmY1MWM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAK
KzIwMTUtMDItMDUgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBB
ZGQgVmVjdG9yOjpyZW1vdmVGaXJzdElmKCkgLyByZW1vdmVBbGxJZigpIG1ldGhvZHMgdGFraW5n
IGxhbWJkYSBmdW5jdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE0MTMyMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFVzZSBuZXcgVmVjdG9yOjpyZW1vdmVGaXJzdElmKCkgLyByZW1vdmVBbGxJZigp
IG1ldGhvZHMuCisKIDIwMTUtMDItMDIgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4K
IAogICAgICAgICBBY2Nlc3MgTWVtb3J5Q2FjaGUgc2luZ2xldG9uIHVzaW5nIE1lbW9yeUNhY2hl
OjpzaW5nbGV0b24oKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IGI3ZTFiNWIyMzM4NWZmYjhkMzJhMWMyNzc4YzM1
NjJkZTlkNWUzOTMuLjg4NmI0YzcxNjdhNmNmOWZmY2Y5NGQ1MzEwYjQ4OWRkM2ZkMmFjZTUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAxNS0wMi0wNSAgQ2hyaXMgRHVtZXogIDxjZHVt
ZXpAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBWZWN0b3I6OnJlbW92ZUZpcnN0SWYoKSAvIHJl
bW92ZUFsbElmKCkgbWV0aG9kcyB0YWtpbmcgbGFtYmRhIGZ1bmN0aW9ucworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxMzIxCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXNlIG5ldyBWZWN0b3I6OnJlbW92
ZUZpcnN0SWYoKSAvIHJlbW92ZUFsbElmKCkgbWV0aG9kcy4KKwogMjAxNS0wMi0wNSAgVGltIEhv
cnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBOdWxsIGRlcmVmIGlu
IFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6YmVnaW5Td2lwZUdlc3R1cmUgd2hlbiBzd2lwaW5nIHdo
aWxlIHNjcmlwdCBpcyBuYXZpZ2F0aW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcHJvZmlsZXIvUHJvZmlsZU5vZGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2Zp
bGVyL1Byb2ZpbGVOb2RlLmNwcAppbmRleCAyNjVjZGRkMGVmNzg4MzNmNjFiNTcxMTE5Y2ZkNzcy
MGZkNDZkMTU3Li5jZmE3M2E4ZDczYzczMjRmMTJjYTEzOGU4NmRmMjg0OGRlYTNhYjk2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZU5vZGUuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlTm9kZS5jcHAKQEAgLTc1
LDEyICs3NSw5IEBAIHZvaWQgUHJvZmlsZU5vZGU6OnJlbW92ZUNoaWxkKFByb2ZpbGVOb2RlKiBu
b2RlKQogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtX2NoaWxkcmVuLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmICgqbm9kZSA9
PSBtX2NoaWxkcmVuW2ldLmdldCgpKSB7Ci0gICAgICAgICAgICBtX2NoaWxkcmVuLnJlbW92ZShp
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQorICAgIG1fY2hpbGRyZW4u
cmVtb3ZlRmlyc3RJZihbbm9kZV0gKGNvbnN0IFJlZlB0cjxQcm9maWxlTm9kZT4mIGN1cnJlbnQp
IHsKKyAgICAgICAgcmV0dXJuICpub2RlID09IGN1cnJlbnQuZ2V0KCk7CisgICAgfSk7CiAKICNp
Zm5kZWYgTkRFQlVHCiAgICAgc2l6ZV90IHNpemUgPSBtX2NoaWxkcmVuLnNpemUoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XVEYvd3RmL1ZlY3Rvci5oIGIvU291cmNlL1dURi93dGYvVmVjdG9yLmgK
aW5kZXggYTRjNDM1OTQ0NmFhYjNlOTZkNGIxYWUxZjg1M2UxZTQ5YWU4ZjU0Zi4uOGI4N2Y3NGFm
NjhhZWMyNjI0OTJhYWZjNmViZWIzNGI0YjVmZTkyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93
dGYvVmVjdG9yLmgKKysrIGIvU291cmNlL1dURi93dGYvVmVjdG9yLmgKQEAgLTczNiw3ICs3MzYs
OSBAQCBwdWJsaWM6CiAgICAgdm9pZCByZW1vdmUoc2l6ZV90IHBvc2l0aW9uKTsKICAgICB2b2lk
IHJlbW92ZShzaXplX3QgcG9zaXRpb24sIHNpemVfdCBsZW5ndGgpOwogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFU+IGJvb2wgcmVtb3ZlRmlyc3QoY29uc3QgVSYpOworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIE1hdGNoRnVuY3Rpb24+IGJvb2wgcmVtb3ZlRmlyc3RJZihjb25zdCBNYXRjaEZ1bmN0aW9u
Jik7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gdW5zaWduZWQgcmVtb3ZlQWxsKGNvbnN0IFUm
KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXRjaEZ1bmN0aW9uPiB1bnNpZ25lZCByZW1vdmVB
bGxJZihjb25zdCBNYXRjaEZ1bmN0aW9uJik7CiAKICAgICB2b2lkIHJlbW92ZUxhc3QoKSAKICAg
ICB7CkBAIC0xMzE0LDEwICsxMzE2LDIwIEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBp
bmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgogdGVtcGxhdGU8dHlwZW5h
bWUgVT4KIGlubGluZSBib29sIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5k
bGVyPjo6cmVtb3ZlRmlyc3QoY29uc3QgVSYgdmFsdWUpCiB7Ci0gICAgc2l6ZV90IGluZGV4ID0g
ZmluZCh2YWx1ZSk7Ci0gICAgaWYgKGluZGV4ICE9IG5vdEZvdW5kKSB7Ci0gICAgICAgIHJlbW92
ZShpbmRleCk7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiByZW1vdmVGaXJzdElm
KFsmdmFsdWVdIChjb25zdCBUJiBjdXJyZW50KSB7CisgICAgICAgIHJldHVybiBjdXJyZW50ID09
IHZhbHVlOworICAgIH0pOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5l
Q2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KK3RlbXBsYXRlPHR5cGVuYW1lIE1h
dGNoRnVuY3Rpb24+CitpbmxpbmUgYm9vbCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJm
bG93SGFuZGxlcj46OnJlbW92ZUZpcnN0SWYoY29uc3QgTWF0Y2hGdW5jdGlvbiYgbWF0Y2hlcykK
K3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemUoKTsgKytpKSB7CisgICAgICAgIGlm
IChtYXRjaGVzKGF0KGkpKSkgeworICAgICAgICAgICAgcmVtb3ZlKGkpOworICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwogfQpAQCAt
MTMyNiwxMSArMTMzOCwyMCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2Fw
YWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KIHRlbXBsYXRlPHR5cGVuYW1lIFU+CiBp
bmxpbmUgdW5zaWduZWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+
OjpyZW1vdmVBbGwoY29uc3QgVSYgdmFsdWUpCiB7CisgICAgcmV0dXJuIHJlbW92ZUFsbElmKFsm
dmFsdWVdIChjb25zdCBUJiBjdXJyZW50KSB7CisgICAgICAgIHJldHVybiBjdXJyZW50ID09IHZh
bHVlOworICAgIH0pOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2Fw
YWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KK3RlbXBsYXRlPHR5cGVuYW1lIE1hdGNo
RnVuY3Rpb24+CitpbmxpbmUgdW5zaWduZWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVy
Zmxvd0hhbmRsZXI+OjpyZW1vdmVBbGxJZihjb25zdCBNYXRjaEZ1bmN0aW9uJiBtYXRjaGVzKQor
ewogICAgIGl0ZXJhdG9yIGhvbGVCZWdpbiA9IGVuZCgpOwogICAgIGl0ZXJhdG9yIGhvbGVFbmQg
PSBlbmQoKTsKICAgICB1bnNpZ25lZCBtYXRjaENvdW50ID0gMDsKICAgICBmb3IgKGF1dG8gaXQg
PSBiZWdpbigpLCBpdEVuZCA9IGVuZCgpOyBpdCAhPSBpdEVuZDsgKytpdCkgewotICAgICAgICBp
ZiAoKml0ID09IHZhbHVlKSB7CisgICAgICAgIGlmIChtYXRjaGVzKCppdCkpIHsKICAgICAgICAg
ICAgIGlmIChob2xlQmVnaW4gPT0gZW5kKCkpCiAgICAgICAgICAgICAgICAgaG9sZUJlZ2luID0g
aXQ7CiAgICAgICAgICAgICBlbHNlIGlmIChob2xlRW5kICE9IGl0KSB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQ
YXJzZXIuY3BwCmluZGV4IDQ4YTY2NzNiODk4NGUwMzllNDUyMzhkOThmZGQyZWYwYTc3N2ZjNzIu
LmJlMTYyMjQyYWEyZTZjOGFlNmJjOGJkMjNmYWJmMWQ5ZDNiZDM4MDcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NQYXJzZXIuY3BwCkBAIC0xMjA3NywxNCArMTIwNzcsOSBAQCB2b2lkIENTU1BhcnNlcjo6ZW5k
RGVjbGFyYXRpb25zRm9yTWFyZ2luQm94KCkKIHZvaWQgQ1NTUGFyc2VyOjpkZWxldGVGb250RmFj
ZU9ubHlWYWx1ZXMoKQogewogICAgIEFTU0VSVChtX2hhc0ZvbnRGYWNlT25seVZhbHVlcyk7Ci0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcGFyc2VkUHJvcGVydGllcy5zaXplKCk7KSB7
Ci0gICAgICAgIENTU1Byb3BlcnR5JiBwcm9wZXJ0eSA9IG1fcGFyc2VkUHJvcGVydGllc1tpXTsK
LSAgICAgICAgaWYgKHByb3BlcnR5LmlkKCkgPT0gQ1NTUHJvcGVydHlGb250VmFyaWFudCAmJiBw
cm9wZXJ0eS52YWx1ZSgpLT5pc1ZhbHVlTGlzdCgpKSB7Ci0gICAgICAgICAgICBtX3BhcnNlZFBy
b3BlcnRpZXMucmVtb3ZlKGkpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAg
ICAgICAgKytpOwotICAgIH0KKyAgICBtX3BhcnNlZFByb3BlcnRpZXMucmVtb3ZlQWxsSWYoW10g
KGNvbnN0IENTU1Byb3BlcnR5JiBwcm9wZXJ0eSkgeworICAgICAgICByZXR1cm4gcHJvcGVydHku
aWQoKSA9PSBDU1NQcm9wZXJ0eUZvbnRWYXJpYW50ICYmIHByb3BlcnR5LnZhbHVlKCktPmlzVmFs
dWVMaXN0KCk7CisgICAgfSk7CiB9CiAKIFBhc3NSZWZQdHI8U3R5bGVLZXlmcmFtZT4gQ1NTUGFy
c2VyOjpjcmVhdGVLZXlmcmFtZShDU1NQYXJzZXJWYWx1ZUxpc3QmIGtleXMpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVMaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NWYWx1ZUxpc3QuY3BwCmluZGV4IDkxMTg0NGU2OWIwMjY5ODU3ZDIyOTcxMzM4OThiYTU2
ZTVmNzE5NzcuLmIxYWE0YzMwNGJiNTAyN2Q1NTM1M2IzNjc4YTBjYzMwYTYwNTYzYTUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZUxpc3QuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NWYWx1ZUxpc3QuY3BwCkBAIC01MCwyMSArNTAsMTUgQEAgQ1NTVmFsdWVM
aXN0OjpDU1NWYWx1ZUxpc3QoQ1NTUGFyc2VyVmFsdWVMaXN0JiBwYXJzZXJWYWx1ZXMpCiAgICAg
fQogfQogCi1ib29sIENTU1ZhbHVlTGlzdDo6cmVtb3ZlQWxsKENTU1ZhbHVlKiB2YWwpCitib29s
IENTU1ZhbHVlTGlzdDo6cmVtb3ZlQWxsKENTU1ZhbHVlKiB2YWx1ZSkKIHsKICAgICAvLyBGSVhN
RTogV2h5IGV2ZW4gdGFrZSBhIHBvaW50ZXI/Ci0gICAgaWYgKCF2YWwpCisgICAgaWYgKCF2YWx1
ZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYm9vbCBmb3VuZCA9IGZhbHNlOwotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3ZhbHVlcy5zaXplKCk7ICsraSkgewotICAgICAg
ICBpZiAobV92YWx1ZXNbaV0uZ2V0KCkuZXF1YWxzKCp2YWwpKSB7Ci0gICAgICAgICAgICBtX3Zh
bHVlcy5yZW1vdmUoaSk7Ci0gICAgICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICByZXR1cm4gZm91bmQ7CisgICAgcmV0dXJuIG1fdmFsdWVzLnJlbW92ZUFsbElm
KFt2YWx1ZV0gKGNvbnN0IFJlZjxDU1NWYWx1ZT4mIGN1cnJlbnQpIHsKKyAgICAgICAgcmV0dXJu
IGN1cnJlbnQtPmVxdWFscygqdmFsdWUpOworICAgIH0pID4gMDsKIH0KIAogYm9vbCBDU1NWYWx1
ZUxpc3Q6Omhhc1ZhbHVlKENTU1ZhbHVlKiB2YWwpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvTWVkaWFMaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYUxpc3Qu
Y3BwCmluZGV4IGVlNjY3MTIwNDI0MjYwZThkYjM1ZjUyMjhhM2U0NWVhYzEzMjMyMDEuLmUxODc2
ZDM5NmI2NDY1NzQ5NmI2N2NiOWMwYTVjYmNkZWU5NGE5NTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9NZWRpYUxpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYUxp
c3QuY3BwCkBAIC0xODUsMTQgKzE4NSw5IEBAIGJvb2wgTWVkaWFRdWVyeVNldDo6cmVtb3ZlKGNv
bnN0IFN0cmluZyYgcXVlcnlTdHJpbmdUb1JlbW92ZSkKICAgICBpZiAoIXBhcnNlZFF1ZXJ5KQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X3F1ZXJpZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgTWVkaWFRdWVyeSogcXVlcnkgPSBtX3F1
ZXJpZXNbaV0uZ2V0KCk7Ci0gICAgICAgIGlmICgqcXVlcnkgPT0gKnBhcnNlZFF1ZXJ5KSB7Ci0g
ICAgICAgICAgICBtX3F1ZXJpZXMucmVtb3ZlKGkpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBtX3F1ZXJp
ZXMucmVtb3ZlRmlyc3RJZihbJnBhcnNlZFF1ZXJ5XSAoY29uc3Qgc3RkOjp1bmlxdWVfcHRyPE1l
ZGlhUXVlcnk+JiBxdWVyeSkgeworICAgICAgICByZXR1cm4gKnF1ZXJ5ID09ICpwYXJzZWRRdWVy
eTsKKyAgICB9KTsKIH0KIAogdm9pZCBNZWRpYVF1ZXJ5U2V0OjphZGRNZWRpYVF1ZXJ5KHN0ZDo6
dW5pcXVlX3B0cjxNZWRpYVF1ZXJ5PiBtZWRpYVF1ZXJ5KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvY3NzL01lZGlhUXVlcnlNYXRjaGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRp
YVF1ZXJ5TWF0Y2hlci5jcHAKaW5kZXggZGI2YmZiN2Y2Njg4MDg2MjljNGUyY2VhYzY2YWUzYWYz
MTNjNjAzOS4uNzJiOTcyOGQ2YTRlMWMxMzI2MTUxMjQxMWRkYzQ3Yjc3MWI4ODIwNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlNYXRjaGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeU1hdGNoZXIuY3BwCkBAIC0xMzAsMTIgKzEzMCw5IEBA
IHZvaWQgTWVkaWFRdWVyeU1hdGNoZXI6OnJlbW92ZUxpc3RlbmVyKE1lZGlhUXVlcnlMaXN0TGlz
dGVuZXIqIGxpc3RlbmVyLCBNZWRpYVF1CiAgICAgaWYgKCFtX2RvY3VtZW50KQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fbGlzdGVuZXJzLnNpemUoKTsg
KytpKSB7Ci0gICAgICAgIGlmICgqbV9saXN0ZW5lcnNbaV0tPmxpc3RlbmVyKCkgPT0gKmxpc3Rl
bmVyICYmIG1fbGlzdGVuZXJzW2ldLT5xdWVyeSgpID09IHF1ZXJ5KSB7Ci0gICAgICAgICAgICBt
X2xpc3RlbmVycy5yZW1vdmUoaSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAg
ICB9CisgICAgbV9saXN0ZW5lcnMucmVtb3ZlRmlyc3RJZihbbGlzdGVuZXIsIHF1ZXJ5XSAoY29u
c3Qgc3RkOjp1bmlxdWVfcHRyPExpc3RlbmVyPiYgY3VycmVudCkgeworICAgICAgICByZXR1cm4g
KmN1cnJlbnQtPmxpc3RlbmVyKCkgPT0gKmxpc3RlbmVyICYmIGN1cnJlbnQtPnF1ZXJ5KCkgPT0g
cXVlcnk7CisgICAgfSk7CiB9CiAKIHZvaWQgTWVkaWFRdWVyeU1hdGNoZXI6OnN0eWxlUmVzb2x2
ZXJDaGFuZ2VkKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAppbmRleCAyM2YzNGU1
ZDQ1Y2U0ZjMxYTkzNDdhODE4Yzk2YzkwZDVmMTA2NDM0Li45NDdkYTY3NDU5MTBjMTc0NjU5MzMy
MjMzMWEwOTkyMTc1OTIxYTAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVS
ZXNvbHZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCkBA
IC0xMTkxLDEwICsxMTkxLDkgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphZGp1c3RTdHlsZUZvck1h
c2tJbWFnZXMoKQogICAgICAgICB9CiAKICAgICAgICAgVmVjdG9yPFJlZlB0cjxNYXNrSW1hZ2VP
cGVyYXRpb24+PiYgcGVuZGluZ1Jlc291cmNlcyA9IG1fc3RhdGUubWFza0ltYWdlc1dpdGhQZW5k
aW5nU1ZHRG9jdW1lbnRzKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSBwZW5kaW5nUmVzb3VyY2Vz
LnNpemUoKSAtIDE7IGkgPj0gMDsgaS0tKSB7Ci0gICAgICAgICAgICBpZiAocmVtb3ZlZEV4dGVy
bmFsUmVzb3VyY2VzLmNvbnRhaW5zKHBlbmRpbmdSZXNvdXJjZXNbaV0pKQotICAgICAgICAgICAg
ICAgIHBlbmRpbmdSZXNvdXJjZXMucmVtb3ZlKGkpOwotICAgICAgICB9CisgICAgICAgIHBlbmRp
bmdSZXNvdXJjZXMucmVtb3ZlQWxsSWYoWyZyZW1vdmVkRXh0ZXJuYWxSZXNvdXJjZXNdIChjb25z
dCBSZWZQdHI8TWFza0ltYWdlT3BlcmF0aW9uPiYgcmVzb3VyY2UpIHsKKyAgICAgICAgICAgIHJl
dHVybiByZW1vdmVkRXh0ZXJuYWxSZXNvdXJjZXMuY29udGFpbnMocmVzb3VyY2UpOworICAgICAg
ICB9KTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAppbmRleCA5ZDgxNWJjMDY4ZjYz
MDg2MmU4ZmNkMWZiOGYwYjFlMmFjZGIxNTcyLi5kNTdkM2YxNjhmN2E3YWRjNTJlMmZlNmIwYjY2
NjExMzY3ZTYwZmUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCkBAIC0yOTY1LDE2ICsyOTY1LDEz
IEBAIHZvaWQgRWxlbWVudDo6ZGV0YWNoQXR0ck5vZGVGcm9tRWxlbWVudFdpdGhWYWx1ZShBdHRy
KiBhdHRyTm9kZSwgY29uc3QgQXRvbWljU3RyCiAgICAgQVNTRVJUKGhhc1N5bnRoZXRpY0F0dHJD
aGlsZE5vZGVzKCkpOwogICAgIGF0dHJOb2RlLT5kZXRhY2hGcm9tRWxlbWVudFdpdGhWYWx1ZSh2
YWx1ZSk7CiAKLSAgICBhdXRvKiBhdHRyTm9kZUxpc3QgPSBhdHRyTm9kZUxpc3RGb3JFbGVtZW50
KCp0aGlzKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXR0ck5vZGVMaXN0LT5zaXpl
KCk7ICsraSkgewotICAgICAgICBpZiAoYXR0ck5vZGVMaXN0LT5hdChpKS0+cXVhbGlmaWVkTmFt
ZSgpID09IGF0dHJOb2RlLT5xdWFsaWZpZWROYW1lKCkpIHsKLSAgICAgICAgICAgIGF0dHJOb2Rl
TGlzdC0+cmVtb3ZlKGkpOwotICAgICAgICAgICAgaWYgKGF0dHJOb2RlTGlzdC0+aXNFbXB0eSgp
KQotICAgICAgICAgICAgICAgIHJlbW92ZUF0dHJOb2RlTGlzdEZvckVsZW1lbnQoKnRoaXMpOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIGF1dG8mIGF0dHJOb2RlTGlzdCA9ICphdHRyTm9kZUxpc3RGb3JFbGVtZW50
KCp0aGlzKTsKKyAgICBib29sIGZvdW5kID0gYXR0ck5vZGVMaXN0LnJlbW92ZUZpcnN0SWYoW2F0
dHJOb2RlXSAoY29uc3QgUmVmUHRyPEF0dHI+JiBhdHRyaWJ1dGUpIHsKKyAgICAgICAgcmV0dXJu
IGF0dHJpYnV0ZS0+cXVhbGlmaWVkTmFtZSgpID09IGF0dHJOb2RlLT5xdWFsaWZpZWROYW1lKCk7
CisgICAgfSk7CisgICAgQVNTRVJUX1VOVVNFRChmb3VuZCwgZm91bmQpOworICAgIGlmIChhdHRy
Tm9kZUxpc3QuaXNFbXB0eSgpKQorICAgICAgICByZW1vdmVBdHRyTm9kZUxpc3RGb3JFbGVtZW50
KCp0aGlzKTsKIH0KIAogdm9pZCBFbGVtZW50OjpkZXRhY2hBbGxBdHRyTm9kZXNGcm9tRWxlbWVu
dCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRMaXN0ZW5lck1hcC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRMaXN0ZW5lck1hcC5jcHAKaW5kZXggYjYwNTM1YmI2
Nzk2Mjc1MmQ1MzVlZjgzNWIwMzAyZTUzMTk4MTgyZS4uYzQwOTE5YjZlYTY0ZTQyNTM5ZWNiZTAz
YzE2OTVlN2U3ZmE5YjlkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50TGlz
dGVuZXJNYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudExpc3RlbmVyTWFwLmNw
cApAQCAtMTU2LDIxICsxNTYsMTQgQEAgRXZlbnRMaXN0ZW5lclZlY3RvciogRXZlbnRMaXN0ZW5l
ck1hcDo6ZmluZChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSkKICAgICAgICAgICAgIHJl
dHVybiBtX2VudHJpZXNbaV0uc2Vjb25kLmdldCgpOwogICAgIH0KIAotICAgIHJldHVybiAwOwor
ICAgIHJldHVybiBudWxscHRyOwogfQogCi1zdGF0aWMgdm9pZCByZW1vdmVGaXJzdExpc3RlbmVy
Q3JlYXRlZEZyb21NYXJrdXAoRXZlbnRMaXN0ZW5lclZlY3RvciogbGlzdGVuZXJWZWN0b3IpCitz
dGF0aWMgdm9pZCByZW1vdmVGaXJzdExpc3RlbmVyQ3JlYXRlZEZyb21NYXJrdXAoRXZlbnRMaXN0
ZW5lclZlY3RvciYgbGlzdGVuZXJWZWN0b3IpCiB7Ci0gICAgYm9vbCBmb3VuZExpc3RlbmVyID0g
ZmFsc2U7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpc3RlbmVyVmVjdG9yLT5zaXpl
KCk7ICsraSkgewotICAgICAgICBpZiAoIWxpc3RlbmVyVmVjdG9yLT5hdChpKS5saXN0ZW5lci0+
d2FzQ3JlYXRlZEZyb21NYXJrdXAoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBm
b3VuZExpc3RlbmVyID0gdHJ1ZTsKLSAgICAgICAgbGlzdGVuZXJWZWN0b3ItPnJlbW92ZShpKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotCisgICAgYm9vbCBmb3VuZExpc3RlbmVyID0gbGlzdGVu
ZXJWZWN0b3IucmVtb3ZlRmlyc3RJZihbXSAoY29uc3QgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIm
IGxpc3RlbmVyKSB7CisgICAgICAgIHJldHVybiBsaXN0ZW5lci5saXN0ZW5lci0+d2FzQ3JlYXRl
ZEZyb21NYXJrdXAoKTsKKyAgICB9KTsKICAgICBBU1NFUlRfVU5VU0VEKGZvdW5kTGlzdGVuZXIs
IGZvdW5kTGlzdGVuZXIpOwogfQogCkBAIC0xODAsNyArMTczLDcgQEAgdm9pZCBFdmVudExpc3Rl
bmVyTWFwOjpyZW1vdmVGaXJzdEV2ZW50TGlzdGVuZXJDcmVhdGVkRnJvbU1hcmt1cChjb25zdCBB
dG9taWNTdHIKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2VudHJpZXMuc2l6ZSgp
OyArK2kpIHsKICAgICAgICAgaWYgKG1fZW50cmllc1tpXS5maXJzdCA9PSBldmVudFR5cGUpIHsK
LSAgICAgICAgICAgIHJlbW92ZUZpcnN0TGlzdGVuZXJDcmVhdGVkRnJvbU1hcmt1cChtX2VudHJp
ZXNbaV0uc2Vjb25kLmdldCgpKTsKKyAgICAgICAgICAgIHJlbW92ZUZpcnN0TGlzdGVuZXJDcmVh
dGVkRnJvbU1hcmt1cCgqbV9lbnRyaWVzW2ldLnNlY29uZCk7CiAgICAgICAgICAgICBpZiAobV9l
bnRyaWVzW2ldLnNlY29uZC0+aXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIG1fZW50cmllcy5y
ZW1vdmUoaSk7CiAgICAgICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKaW5kZXggOWNjM2Fi
ZTU3Mjg1MzljODVhZGFjOWUyZmQ1MDQ3YWIxMjdkYjgwNi4uY2EzYzFkNTM0ZjdmMjM4OTY2NDM1
Yzk0MDU5YTM0ODMwNGRjOTZmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcApAQCAtMTk1MiwxMiArMTk1Miw5
IEBAIHZvaWQgTm9kZTo6dW5yZWdpc3Rlck11dGF0aW9uT2JzZXJ2ZXIoTXV0YXRpb25PYnNlcnZl
clJlZ2lzdHJhdGlvbiogcmVnaXN0cmF0aW9uCiAgICAgaWYgKCFyZWdpc3RyeSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZWdpc3RyeS0+c2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgaWYgKHJlZ2lzdHJ5LT5hdChpKS5nZXQoKSA9PSByZWdpc3RyYXRpb24p
IHsKLSAgICAgICAgICAgIHJlZ2lzdHJ5LT5yZW1vdmUoaSk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICB9CisgICAgcmVnaXN0cnktPnJlbW92ZUZpcnN0SWYoW3JlZ2lzdHJh
dGlvbl0gKGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9u
PiYgY3VycmVudCkgeworICAgICAgICByZXR1cm4gY3VycmVudC5nZXQoKSA9PSByZWdpc3RyYXRp
b247CisgICAgfSk7CiB9CiAKIHZvaWQgTm9kZTo6cmVnaXN0ZXJUcmFuc2llbnRNdXRhdGlvbk9i
c2VydmVyKE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24qIHJlZ2lzdHJhdGlvbikKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwCmluZGV4IDA0MmNh
MGVjOTE0MWM3MzY0MTRkYWZiNTA0NDFkN2Y2MmMxODBlOTUuLmNhYTkzNjgzOGMyYzE5MGMwN2Zl
YjA0NzIzNDQwZTkzOTg2NGIyMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFy
c2VyL0hUTUxUcmVlQnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIv
SFRNTFRyZWVCdWlsZGVyLmNwcApAQCAtNDQxLDExICs0NDEsMTAgQEAgdm9pZCBIVE1MVHJlZUJ1
aWxkZXI6OnByb2Nlc3NGYWtlUEVuZFRhZ0lmUEluQnV0dG9uU2NvcGUoKQogVmVjdG9yPEF0dHJp
YnV0ZT4gSFRNTFRyZWVCdWlsZGVyOjphdHRyaWJ1dGVzRm9ySXNpbmRleElucHV0KEF0b21pY0hU
TUxUb2tlbiYgdG9rZW4pCiB7CiAgICAgVmVjdG9yPEF0dHJpYnV0ZT4gYXR0cmlidXRlcyA9IHRv
a2VuLmF0dHJpYnV0ZXMoKTsKLSAgICBmb3IgKGludCBpID0gYXR0cmlidXRlcy5zaXplKCkgLSAx
OyBpID49IDA7IC0taSkgewotICAgICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lID0gYXR0
cmlidXRlcy5hdChpKS5uYW1lKCk7Ci0gICAgICAgIGlmIChuYW1lLm1hdGNoZXMobmFtZUF0dHIp
IHx8IG5hbWUubWF0Y2hlcyhhY3Rpb25BdHRyKSB8fCBuYW1lLm1hdGNoZXMocHJvbXB0QXR0cikp
Ci0gICAgICAgICAgICBhdHRyaWJ1dGVzLnJlbW92ZShpKTsKLSAgICB9CisgICAgYXR0cmlidXRl
cy5yZW1vdmVBbGxJZihbXSAoY29uc3QgQXR0cmlidXRlJiBhdHRyaWJ1dGUpIHsKKyAgICAgICAg
Y29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSA9IGF0dHJpYnV0ZS5uYW1lKCk7CisgICAgICAgIHJl
dHVybiBuYW1lLm1hdGNoZXMobmFtZUF0dHIpIHx8IG5hbWUubWF0Y2hlcyhhY3Rpb25BdHRyKSB8
fCBuYW1lLm1hdGNoZXMocHJvbXB0QXR0cik7CisgICAgfSk7CiAKICAgICBhdHRyaWJ1dGVzLmFw
cGVuZChBdHRyaWJ1dGUobmFtZUF0dHIsIGlzaW5kZXhUYWcubG9jYWxOYW1lKCkpKTsKICAgICBy
ZXR1cm4gYXR0cmlidXRlczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmNwcAppbmRl
eCBjMTQ0ZDA1NWUwZGY3NmU5OTM4OTVmMjNhNjZjYmQyYWZkNzM4YWI3Li4wOTJjOWFhZmQ2MDMx
MTJmZTliOTEwOGE2ODZmZTM0NWU0MWM1OGZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJBbmlt
YXRpb24uY3BwCkBAIC0zNjUsMTggKzM2NSwxNiBAQCB2b2lkIFRleHR1cmVNYXBwZXJBbmltYXRp
b25zOjpyZXN1bWUoKQogCiB2b2lkIFRleHR1cmVNYXBwZXJBbmltYXRpb25zOjpyZW1vdmUoY29u
c3QgU3RyaW5nJiBuYW1lKQogewotICAgIGZvciAoaW50IGkgPSBtX2FuaW1hdGlvbnMuc2l6ZSgp
IC0gMTsgaSA+PSAwOyAtLWkpIHsKLSAgICAgICAgaWYgKG1fYW5pbWF0aW9uc1tpXS5uYW1lKCkg
PT0gbmFtZSkKLSAgICAgICAgICAgIG1fYW5pbWF0aW9ucy5yZW1vdmUoaSk7Ci0gICAgfQorICAg
IG1fYW5pbWF0aW9ucy5yZW1vdmVBbGxJZihbJm5hbWVdIChjb25zdCBUZXh0dXJlTWFwcGVyQW5p
bWF0aW9uJiBhbmltYXRpb24pIHsKKyAgICAgICAgcmV0dXJuIGFuaW1hdGlvbi5uYW1lKCkgPT0g
bmFtZTsKKyAgICB9KTsKIH0KIAogdm9pZCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uczo6cmVtb3Zl
KGNvbnN0IFN0cmluZyYgbmFtZSwgQW5pbWF0ZWRQcm9wZXJ0eUlEIHByb3BlcnR5KQogewotICAg
IGZvciAoaW50IGkgPSBtX2FuaW1hdGlvbnMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKLSAg
ICAgICAgaWYgKG1fYW5pbWF0aW9uc1tpXS5uYW1lKCkgPT0gbmFtZSAmJiBtX2FuaW1hdGlvbnNb
aV0ucHJvcGVydHkoKSA9PSBwcm9wZXJ0eSkKLSAgICAgICAgICAgIG1fYW5pbWF0aW9ucy5yZW1v
dmUoaSk7Ci0gICAgfQorICAgIG1fYW5pbWF0aW9ucy5yZW1vdmVBbGxJZihbJm5hbWUsIHByb3Bl
cnR5XSAoY29uc3QgVGV4dHVyZU1hcHBlckFuaW1hdGlvbiYgYW5pbWF0aW9uKSB7CisgICAgICAg
IHJldHVybiBhbmltYXRpb24ubmFtZSgpID09IG5hbWUgJiYgYW5pbWF0aW9uLnByb3BlcnR5KCkg
PT0gcHJvcGVydHk7CisgICAgfSk7CiB9CiAKIHZvaWQgVGV4dHVyZU1hcHBlckFuaW1hdGlvbnM6
OmFwcGx5KFRleHR1cmVNYXBwZXJBbmltYXRpb246OkNsaWVudCogY2xpZW50KQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcAppbmRleCBiZDE0YTdi
OTBjYjljZjA1MDRiYWI4YjEwZGI3MTc0OTVmYjg0YmQyLi4wYjdiNGIxZTMxMzYwMzE3N2JhYmQ2
NWFiZWU5ZmUzZWNiYWQ0MmQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0
aW9uL1NWR1NNSUxFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9u
L1NWR1NNSUxFbGVtZW50LmNwcApAQCAtMjE0LDEwICsyMTQsOSBAQCBzdGF0aWMgaW5saW5lIFF1
YWxpZmllZE5hbWUgY29uc3RydWN0UXVhbGlmaWVkTmFtZShjb25zdCBTVkdFbGVtZW50KiBzdmdF
bGVtZW50LAogCiBzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJUaW1lc1dpdGhEeW5hbWljT3JpZ2lu
cyhWZWN0b3I8U01JTFRpbWVXaXRoT3JpZ2luPiYgdGltZUxpc3QpCiB7Ci0gICAgZm9yIChpbnQg
aSA9IHRpbWVMaXN0LnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7Ci0gICAgICAgIGlmICh0aW1l
TGlzdFtpXS5vcmlnaW5Jc1NjcmlwdCgpKQotICAgICAgICAgICAgdGltZUxpc3QucmVtb3ZlKGkp
OwotICAgIH0KKyAgICB0aW1lTGlzdC5yZW1vdmVBbGxJZihbXSAoY29uc3QgU01JTFRpbWVXaXRo
T3JpZ2luJiB0aW1lKSB7CisgICAgICAgIHJldHVybiB0aW1lLm9yaWdpbklzU2NyaXB0KCk7Cisg
ICAgfSk7CiB9CiAKIHZvaWQgU1ZHU01JTEVsZW1lbnQ6OnJlc2V0KCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvd2luL1dlYk5vdGlmaWNhdGlvbkNlbnRlci5jcHAgYi9Tb3VyY2UvV2ViS2l0
L3dpbi9XZWJOb3RpZmljYXRpb25DZW50ZXIuY3BwCmluZGV4IDhmODU3NmY4NGJkODE5Njk3OWIy
ZmZkOTQ0OTA3OWNiYzE2Y2FkOTUuLjI1YWI3ZDA2M2JhNzQ1OGYzYmFjNmJiNjkyZTAwMzZlNmRl
YTU5NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYk5vdGlmaWNhdGlvbkNlbnRl
ci5jcHAKKysrIGIvU291cmNlL1dlYktpdC93aW4vV2ViTm90aWZpY2F0aW9uQ2VudGVyLmNwcApA
QCAtMjAwLDE1ICsyMDAsMTEgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJOb3RpZmlj
YXRpb25DZW50ZXI6OnJlbW92ZU9ic2VydmVyKAogICAgIE9iamVjdE9ic2VydmVyTGlzdCYgb2Jz
ZXJ2ZXJMaXN0ID0gaXQtPnZhbHVlOwogICAgIE9ic2VydmVyTGlzdEl0ZXJhdG9yIGVuZCA9IG9i
c2VydmVyTGlzdC5lbmQoKTsKIAotICAgIGludCBpID0gMDsKLSAgICBmb3IgKE9ic2VydmVyTGlz
dEl0ZXJhdG9yIGl0MiA9IG9ic2VydmVyTGlzdC5iZWdpbigpOyBpdDIgIT0gZW5kOyArK2l0Miwg
KytpKSB7Ci0gICAgICAgIElVbmtub3duKiBvYnNlcnZlZE9iamVjdCA9IGl0Mi0+Zmlyc3QuZ2V0
KCk7Ci0gICAgICAgIElXZWJOb3RpZmljYXRpb25PYnNlcnZlciogb2JzZXJ2ZXIgPSBpdDItPnNl
Y29uZC5nZXQoKTsKLSAgICAgICAgaWYgKG9ic2VydmVyID09IGFuT2JzZXJ2ZXIgJiYgKCFhbk9i
amVjdCB8fCBhbk9iamVjdCA9PSBvYnNlcnZlZE9iamVjdCkpIHsKLSAgICAgICAgICAgIG9ic2Vy
dmVyTGlzdC5yZW1vdmUoaSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0K
KyAgICBvYnNlcnZlckxpc3QucmVtb3ZlRmlyc3RJZihbYW5PYmplY3QsIGFuT2JzZXJ2ZXJdIChj
b25zdCBPYmplY3RPYnNlcnZlclBhaXImIHBhaXIpIHsKKyAgICAgICAgSVVua25vd24qIG9ic2Vy
dmVkT2JqZWN0ID0gcGFpci5maXJzdC5nZXQoKTsKKyAgICAgICAgSVdlYk5vdGlmaWNhdGlvbk9i
c2VydmVyKiBvYnNlcnZlciA9IHBhaXIuc2Vjb25kLmdldCgpOworICAgICAgICByZXR1cm4gb2Jz
ZXJ2ZXIgPT0gYW5PYnNlcnZlciAmJiAoIWFuT2JqZWN0IHx8IGFuT2JqZWN0ID09IG9ic2VydmVk
T2JqZWN0KTsKKyAgICB9KTsKIAogICAgIGlmIChvYnNlcnZlckxpc3QuaXNFbXB0eSgpKQogICAg
ICAgICBkLT5tX21hcHBlZE9ic2VydmVycy5yZW1vdmUobmFtZSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1BsYXRmb3JtQ0FMYXllclJlbW90ZS5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1BsYXRmb3JtQ0FMYXll
clJlbW90ZS5jcHAKaW5kZXggOGIwZGEzYTI2Y2U5YWJjZWMzZmUwM2Y2N2M3NWYwZmIyMDYyNGIz
MC4uZTc0YTQ0Zjg3N2JhNTFkODRjMTM0MTY0MjNjMGI1NDBmMjViN2I3YyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9QbGF0Zm9ybUNBTGF5ZXJSZW1v
dGUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUGxhdGZv
cm1DQUxheWVyUmVtb3RlLmNwcApAQCAtMzUwLDEyICszNTAsOSBAQCB2b2lkIFBsYXRmb3JtQ0FM
YXllclJlbW90ZTo6YWRkQW5pbWF0aW9uRm9yS2V5KGNvbnN0IFN0cmluZyYga2V5LCBQbGF0Zm9y
bUNBQW5pbQogdm9pZCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OnJlbW92ZUFuaW1hdGlvbkZvcktl
eShjb25zdCBTdHJpbmcmIGtleSkKIHsKICAgICBpZiAobV9hbmltYXRpb25zLnJlbW92ZShrZXkp
KSB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9wcm9wZXJ0aWVzLmFkZGVkQW5p
bWF0aW9ucy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgaWYgKG1fcHJvcGVydGllcy5hZGRl
ZEFuaW1hdGlvbnNbaV0uZmlyc3QgPT0ga2V5KSB7Ci0gICAgICAgICAgICAgICAgbV9wcm9wZXJ0
aWVzLmFkZGVkQW5pbWF0aW9ucy5yZW1vdmUoaSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgbV9wcm9wZXJ0aWVzLmFkZGVkQW5pbWF0
aW9ucy5yZW1vdmVGaXJzdElmKFsma2V5XSAoY29uc3Qgc3RkOjpwYWlyPFN0cmluZywgUGxhdGZv
cm1DQUFuaW1hdGlvblJlbW90ZTo6UHJvcGVydGllcz4mIHBhaXIpIHsKKyAgICAgICAgICAgIHJl
dHVybiBwYWlyLmZpcnN0ID09IGtleTsKKyAgICAgICAgfSk7CiAgICAgfQogICAgIG1fcHJvcGVy
dGllcy5rZXlQYXRoc09mQW5pbWF0aW9uc1RvUmVtb3ZlLmFkZChrZXkpOwogICAgIG1fcHJvcGVy
dGllcy5ub3RlUHJvcGVydGllc0NoYW5nZWQoUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OkFu
aW1hdGlvbnNDaGFuZ2VkKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0No
YW5nZUxvZwppbmRleCBlOTY0NDg1ZTA1MjlkYTJhNWM2ODc4M2ExZDJkNjEwMzYwZDc3ODFlLi4z
OTRhMWJhYzc3YzcyNzI1NWEyMDEyNmI3YmY2MzNkOTA1MDExN2E4IDEwMDY0NAotLS0gYS9Ub29s
cy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTUt
MDItMDUgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgVmVj
dG9yOjpyZW1vdmVGaXJzdElmKCkgLyByZW1vdmVBbGxJZigpIG1ldGhvZHMgdGFraW5nIGxhbWJk
YSBmdW5jdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE0MTMyMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFVzZSBuZXcgVmVjdG9yOjpyZW1vdmVGaXJzdElmKCkgLyByZW1vdmVBbGxJZigpIG1ldGhv
ZHMuCisKIDIwMTUtMDItMDUgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CiAK
ICAgICAgICAgRGFzaGJvYXJkIGRvZXNuJ3QgY29uc2lkZXIgYnVpbGRpbmcgQVNhbiBhIHByb2R1
Y3RpdmUgc3RlcApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVmVj
dG9yLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1ZlY3Rvci5jcHAKaW5kZXgg
Njc1OTZhYzQ5Yjg3ZWRhOTgxOTg4NDJjMTQ3YzJlZDgyMDY3NTE5ZS4uZjQ3MmM2NGFiMDdlOTY2
ZGExYzc1OTI1MWZkMWQ4MzY2ODc2NGRiYyAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XVEYvVmVjdG9yLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dU
Ri9WZWN0b3IuY3BwCkBAIC00NjMsNCArNDYzLDU4IEBAIFRFU1QoV1RGX1ZlY3RvciwgUmVtb3Zl
QWxsKQogICAgIEVYUEVDVF9UUlVFKHYyID09IHZFeHBlY3RlZCk7CiB9CiAKK1RFU1QoV1RGX1Zl
Y3RvciwgUmVtb3ZlRmlyc3RJZikKK3sKKyAgICBWZWN0b3I8aW50PiB2OworICAgIEVYUEVDVF9U
UlVFKHYuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfRkFMU0Uodi5yZW1vdmVGaXJzdElmKFtdIChp
bnQgdmFsdWUpIHsgcmV0dXJuIHZhbHVlID4gMDsgfSkpOworICAgIEVYUEVDVF9GQUxTRSh2LnJl
bW92ZUZpcnN0SWYoW10gKGludCkgeyByZXR1cm4gdHJ1ZTsgfSkpOworICAgIEVYUEVDVF9GQUxT
RSh2LnJlbW92ZUZpcnN0SWYoW10gKGludCkgeyByZXR1cm4gZmFsc2U7IH0pKTsKKworICAgIHYg
PSB7MywgMSwgMiwgMSwgMiwgMSwgMiwgMiwgMSwgMSwgMSwgM307CisgICAgRVhQRUNUX0VRKDEy
VSwgdi5zaXplKCkpOworICAgIEVYUEVDVF9GQUxTRSh2LnJlbW92ZUZpcnN0SWYoW10gKGludCkg
eyByZXR1cm4gZmFsc2U7IH0pKTsKKyAgICBFWFBFQ1RfRVEoMTJVLCB2LnNpemUoKSk7CisgICAg
RVhQRUNUX0ZBTFNFKHYucmVtb3ZlRmlyc3RJZihbXSAoaW50IHZhbHVlKSB7IHJldHVybiB2YWx1
ZSA8IDA7IH0pKTsKKyAgICBFWFBFQ1RfRVEoMTJVLCB2LnNpemUoKSk7CisgICAgRVhQRUNUX1RS
VUUodi5yZW1vdmVGaXJzdElmKFtdIChpbnQgdmFsdWUpIHsgcmV0dXJuIHZhbHVlIDwgMzsgfSkp
OworICAgIEVYUEVDVF9FUSgxMVUsIHYuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfVFJVRSh2ID09IFZl
Y3RvcjxpbnQ+KHszLCAyLCAxLCAyLCAxLCAyLCAyLCAxLCAxLCAxLCAzfSkpOworICAgIEVYUEVD
VF9UUlVFKHYucmVtb3ZlRmlyc3RJZihbXSAoaW50IHZhbHVlKSB7IHJldHVybiB2YWx1ZSA+IDI7
IH0pKTsKKyAgICBFWFBFQ1RfRVEoMTBVLCB2LnNpemUoKSk7CisgICAgRVhQRUNUX1RSVUUodiA9
PSBWZWN0b3I8aW50Pih7MiwgMSwgMiwgMSwgMiwgMiwgMSwgMSwgMSwgM30pKTsKKyAgICBFWFBF
Q1RfVFJVRSh2LnJlbW92ZUZpcnN0SWYoW10gKGludCB2YWx1ZSkgeyByZXR1cm4gdmFsdWUgPiAy
OyB9KSk7CisgICAgRVhQRUNUX0VRKDlVLCB2LnNpemUoKSk7CisgICAgRVhQRUNUX1RSVUUodiA9
PSBWZWN0b3I8aW50Pih7MiwgMSwgMiwgMSwgMiwgMiwgMSwgMSwgMX0pKTsKK30KKworVEVTVChX
VEZfVmVjdG9yLCBSZW1vdmVBbGxJZikKK3sKKyAgICBWZWN0b3I8aW50PiB2OworICAgIEVYUEVD
VF9UUlVFKHYuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfRkFMU0Uodi5yZW1vdmVBbGxJZihbXSAo
aW50IHZhbHVlKSB7IHJldHVybiB2YWx1ZSA+IDA7IH0pKTsKKyAgICBFWFBFQ1RfRkFMU0Uodi5y
ZW1vdmVBbGxJZihbXSAoaW50KSB7IHJldHVybiB0cnVlOyB9KSk7CisgICAgRVhQRUNUX0ZBTFNF
KHYucmVtb3ZlQWxsSWYoW10gKGludCkgeyByZXR1cm4gZmFsc2U7IH0pKTsKKworICAgIHYgPSB7
MywgMSwgMiwgMSwgMiwgMSwgMiwgMiwgMSwgMSwgMSwgM307CisgICAgRVhQRUNUX0VRKDEyVSwg
di5zaXplKCkpOworICAgIEVYUEVDVF9FUSgwVSwgdi5yZW1vdmVBbGxJZihbXSAoaW50KSB7IHJl
dHVybiBmYWxzZTsgfSkpOworICAgIEVYUEVDVF9FUSgxMlUsIHYuc2l6ZSgpKTsKKyAgICBFWFBF
Q1RfRVEoMFUsIHYucmVtb3ZlQWxsSWYoW10gKGludCB2YWx1ZSkgeyByZXR1cm4gdmFsdWUgPCAw
OyB9KSk7CisgICAgRVhQRUNUX0VRKDEyVSwgdi5zaXplKCkpOworICAgIEVYUEVDVF9FUSgxMlUs
IHYucmVtb3ZlQWxsSWYoW10gKGludCB2YWx1ZSkgeyByZXR1cm4gdmFsdWUgPiAwOyB9KSk7Cisg
ICAgRVhQRUNUX1RSVUUodi5pc0VtcHR5KCkpOworCisgICAgdiA9IHszLCAxLCAyLCAxLCAyLCAx
LCAzLCAyLCAyLCAxLCAxLCAxLCAzfTsKKyAgICBFWFBFQ1RfRVEoMTNVLCB2LnNpemUoKSk7Cisg
ICAgRVhQRUNUX0VRKDNVLCB2LnJlbW92ZUFsbElmKFtdIChpbnQgdmFsdWUpIHsgcmV0dXJuIHZh
bHVlID4gMjsgfSkpOworICAgIEVYUEVDVF9FUSgxMFUsIHYuc2l6ZSgpKTsKKyAgICBFWFBFQ1Rf
VFJVRSh2ID09IFZlY3RvcjxpbnQ+KHsxLCAyLCAxLCAyLCAxLCAyLCAyLCAxLCAxLCAxfSkpOwor
ICAgIEVYUEVDVF9FUSg2VSwgdi5yZW1vdmVBbGxJZihbXSAoaW50IHZhbHVlKSB7IHJldHVybiB2
YWx1ZSAhPSAyOyB9KSk7CisgICAgRVhQRUNUX0VRKDRVLCB2LnNpemUoKSk7CisgICAgRVhQRUNU
X1RSVUUodiA9PSBWZWN0b3I8aW50Pih7MiwgMiwgMiwgMn0pKTsKKyAgICBFWFBFQ1RfRVEoNFUs
IHYucmVtb3ZlQWxsSWYoW10gKGludCB2YWx1ZSkgeyByZXR1cm4gdmFsdWUgPT0gMjsgfSkpOwor
ICAgIEVYUEVDVF9UUlVFKHYuaXNFbXB0eSgpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgVGVzdFdl
YktpdEFQSQpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS9JbmplY3RlZEJ1bmRsZS5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL0luamVjdGVkQnVuZGxlLmNwcAppbmRleCA0NGVhMzkxNTBjYmQ4MmEyNTcwM2MzNmNmYjkw
MjgxM2QyZmM3N2UyLi5kM2ViNWRlN2Q1NDgxZjhkYmYxMTVjOWEwYTQ3MjA5NTU5ZDNiZDc4IDEw
MDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVk
QnVuZGxlLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0lu
amVjdGVkQnVuZGxlLmNwcApAQCAtMTA5LDEzICsxMDksOSBAQCB2b2lkIEluamVjdGVkQnVuZGxl
OjpkaWRDcmVhdGVQYWdlKFdLQnVuZGxlUGFnZVJlZiBwYWdlKQogCiB2b2lkIEluamVjdGVkQnVu
ZGxlOjp3aWxsRGVzdHJveVBhZ2UoV0tCdW5kbGVQYWdlUmVmIHBhZ2UpCiB7Ci0gICAgc2l6ZV90
IHNpemUgPSBtX3BhZ2VzLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7
ICsraSkgewotICAgICAgICBpZiAobV9wYWdlc1tpXS0+cGFnZSgpID09IHBhZ2UpIHsKLSAgICAg
ICAgICAgIG1fcGFnZXMucmVtb3ZlKGkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICB9CisgICAgbV9wYWdlcy5yZW1vdmVGaXJzdElmKFtwYWdlXSAoY29uc3Qgc3RkOjp1bmlx
dWVfcHRyPEluamVjdGVkQnVuZGxlUGFnZT4mIGN1cnJlbnQpIHsKKyAgICAgICAgcmV0dXJuIGN1
cnJlbnQtPnBhZ2UoKSA9PSBwYWdlOworICAgIH0pOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxl
OjpkaWRJbml0aWFsaXplUGFnZUdyb3VwKFdLQnVuZGxlUGFnZUdyb3VwUmVmIHBhZ2VHcm91cCkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246224</attachid>
            <date>2015-02-07 16:02:56 -0800</date>
            <delta_ts>2015-02-07 18:28:54 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-141321-20150207160255.patch</filename>
            <type>text/plain</type>
            <size>25059</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc5Nzg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBk
ZTBiNjk5Y2MxMjMzYzhlNmFhYzdkNmFmMGE5ZjUyMDdmZmVlNDVjLi4yNTkxNzZjNDAwNTBhZjA5
NjYyZmE2YTNkMjI5ZGNhMDA1ZDE5MTJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMiBAQAorMjAxNS0wMi0wNSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgor
CisgICAgICAgIEFkZCBWZWN0b3I6OnJlbW92ZUZpcnN0TWF0Y2hpbmcoKSAvIHJlbW92ZUFsbE1h
dGNoaW5nKCkgbWV0aG9kcyB0YWtpbmcgbGFtYmRhIGZ1bmN0aW9ucworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxMzIxCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXNlIG5ldyBWZWN0b3I6OnJlbW92ZUZp
cnN0TWF0Y2hpbmcoKSAvIHJlbW92ZUFsbE1hdGNoaW5nKCkgbWV0aG9kcy4KKwogMjAxNS0wMi0w
NiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIERGRyBTU0Egc2hv
dWxkbid0IGhhdmUgU2V0QXJndW1lbnQgbm9kZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggZWU1MGEzNzhjM2Y3OTM4Y2ZkZWI3
ZmVjMzk1Mzg3NzhkNjhlYjI4Yy4uY2EyNmVmMzA5OTAzMjg3OTQzM2UxZWMwMTFmZTc1M2I5Yzc4
ODY3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dURi9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxNS0wMi0wNSAgQ2hyaXMgRHVtZXogIDxjZHVt
ZXpAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBWZWN0b3I6OnJlbW92ZUZpcnN0TWF0Y2hpbmco
KSAvIHJlbW92ZUFsbE1hdGNoaW5nKCkgbWV0aG9kcyB0YWtpbmcgbGFtYmRhIGZ1bmN0aW9ucwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxMzIxCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIFZlY3Rv
cjo6cmVtb3ZlRmlyc3RNYXRjaGluZygpIC8gcmVtb3ZlQWxsTWF0Y2hpbmcoKSBtZXRob2RzIHRh
a2luZworICAgICAgICBsYW1iZGEgZnVuY3Rpb25zIHRvIG1hdGNoIHRoZSBlbGVtZW50KHMpIHRv
IHJlbW92ZS4gVGhpcyBzaW1wbGlmaWVzIHRoZQorICAgICAgICBjb2RlIGEgYml0LiBWZWN0b3I6
OnJlbW92ZUFsbE1hdGNoaW5nKCkgaXMgYWxzbyBtb3JlIGVmZmljaWVudCB0aGFuIHRoZQorICAg
ICAgICBtYW51YWwgcmVtb3ZhbCBhbHRlcm5hdGl2ZS4KKworICAgICAgICAqIHd0Zi9WZWN0b3Iu
aDoKKwogMjAxNS0wMi0wNiAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+
CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjE3OTc0My4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRl
eCBkZGZmZDY4MjMxNDBiOWM2N2U1ZGIzMGEwZTVkNGNkYzNjMjdmYzFkLi5jNTRjMzhlMWIxMjg0
MDQ4YTJkZjZmOWUwMjBjMmRjMjI0ZGJhNGY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAK
KzIwMTUtMDItMDUgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBB
ZGQgVmVjdG9yOjpyZW1vdmVGaXJzdE1hdGNoaW5nKCkgLyByZW1vdmVBbGxNYXRjaGluZygpIG1l
dGhvZHMgdGFraW5nIGxhbWJkYSBmdW5jdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTMyMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFVzZSBuZXcgVmVjdG9yOjpyZW1vdmVGaXJzdE1hdGNoaW5n
KCkgLyByZW1vdmVBbGxNYXRjaGluZygpIG1ldGhvZHMuCisKIDIwMTUtMDItMDcgIEplciBOb2Js
ZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CiAKICAgICAgICAgW01hY10gU2V0IC1jb250ZW50c1Nj
YWxlIG9uIEFWUGxheWVyTGF5ZXIgdG8gYWxsb3cgQVZQbGF5ZXIgdG8gc2VsZWN0IHRoZSBhcHBy
b3ByaWF0ZSBITFMgdmFyaWFudC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwppbmRleCA4NGEwODhhY2I3MTU0ODg1
MzU4NjhkNmFjMGJjN2MwMmY1MTc2MDkzLi45MGIxZDU3OGMwYjQ3MjMwM2E3NmY1MTdjMzAxYTFk
MDdmMzIyZTYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTUtMDItMDUg
IENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgVmVjdG9yOjpy
ZW1vdmVGaXJzdE1hdGNoaW5nKCkgLyByZW1vdmVBbGxNYXRjaGluZygpIG1ldGhvZHMgdGFraW5n
IGxhbWJkYSBmdW5jdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE0MTMyMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFVzZSBuZXcgVmVjdG9yOjpyZW1vdmVGaXJzdE1hdGNoaW5nKCkgLyByZW1vdmVB
bGxNYXRjaGluZygpIG1ldGhvZHMuCisKIDIwMTUtMDItMDIgIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KIAogICAgICAgICBBY2Nlc3MgTWVtb3J5Q2FjaGUgc2luZ2xldG9uIHVzaW5n
IE1lbW9yeUNhY2hlOjpzaW5nbGV0b24oKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDI2MTMwMjBhOWU2YzZjYjdl
ZjBmNDBkOTgxMTRlMmEwODQyODdjNmQuLjJjOGI1OGM2NmM3Y2NkYTNhODc0N2VlNmRmNDY1ZGQ1
ZjAzZjU0MTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAxNS0wMi0wNSAgQ2hyaXMg
RHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBWZWN0b3I6OnJlbW92ZUZp
cnN0TWF0Y2hpbmcoKSAvIHJlbW92ZUFsbE1hdGNoaW5nKCkgbWV0aG9kcyB0YWtpbmcgbGFtYmRh
IGZ1bmN0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTQxMzIxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVXNlIG5ldyBWZWN0b3I6OnJlbW92ZUZpcnN0TWF0Y2hpbmcoKSAvIHJlbW92ZUFsbE1hdGNo
aW5nKCkgbWV0aG9kcy4KKwogMjAxNS0wMi0wNyAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBs
ZS5jb20+CiAKICAgICAgICAgQW5kIGFzIGEgZnVydGhlciBmb2xsb3d1cCByZXN0b3JlIHRoZSA4
Yml0IHRlc3QgdG9vLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVy
L1Byb2ZpbGVOb2RlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxl
Tm9kZS5jcHAKaW5kZXggMjY1Y2RkZDBlZjc4ODMzZjYxYjU3MTExOWNmZDc3MjBmZDQ2ZDE1Ny4u
OWJjZjM3NTg2YzYwMDNlZGFmMzlhYWY4MzQ2MTlhY2U0ZWRmMjQ3ZCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVOb2RlLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZU5vZGUuY3BwCkBAIC03NSwxMiArNzUsOSBA
QCB2b2lkIFByb2ZpbGVOb2RlOjpyZW1vdmVDaGlsZChQcm9maWxlTm9kZSogbm9kZSkKICAgICBp
ZiAoIW5vZGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bV9jaGlsZHJlbi5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAoKm5vZGUgPT0gbV9jaGlsZHJl
bltpXS5nZXQoKSkgewotICAgICAgICAgICAgbV9jaGlsZHJlbi5yZW1vdmUoaSk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KKyAgICBtX2NoaWxkcmVuLnJlbW92ZUZpcnN0
TWF0Y2hpbmcoW25vZGVdIChjb25zdCBSZWZQdHI8UHJvZmlsZU5vZGU+JiBjdXJyZW50KSB7Cisg
ICAgICAgIHJldHVybiAqbm9kZSA9PSBjdXJyZW50LmdldCgpOworICAgIH0pOwogCiAjaWZuZGVm
IE5ERUJVRwogICAgIHNpemVfdCBzaXplID0gbV9jaGlsZHJlbi5zaXplKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaCBiL1NvdXJjZS9XVEYvd3RmL1ZlY3Rvci5oCmluZGV4
IGE0YzQzNTk0NDZhYWIzZTk2ZDRiMWFlMWY4NTNlMWU0OWFlOGY1NGYuLjdkODQyYTg2YTRhNmM3
OTRmZmRhZTUwODdiYzFiNGIwYmJkODg4MjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1Zl
Y3Rvci5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1ZlY3Rvci5oCkBAIC03MzYsNyArNzM2LDkgQEAg
cHVibGljOgogICAgIHZvaWQgcmVtb3ZlKHNpemVfdCBwb3NpdGlvbik7CiAgICAgdm9pZCByZW1v
dmUoc2l6ZV90IHBvc2l0aW9uLCBzaXplX3QgbGVuZ3RoKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBVPiBib29sIHJlbW92ZUZpcnN0KGNvbnN0IFUmKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBN
YXRjaEZ1bmN0aW9uPiBib29sIHJlbW92ZUZpcnN0TWF0Y2hpbmcoY29uc3QgTWF0Y2hGdW5jdGlv
biYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHVuc2lnbmVkIHJlbW92ZUFsbChjb25zdCBV
Jik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWF0Y2hGdW5jdGlvbj4gdW5zaWduZWQgcmVtb3Zl
QWxsTWF0Y2hpbmcoY29uc3QgTWF0Y2hGdW5jdGlvbiYpOwogCiAgICAgdm9pZCByZW1vdmVMYXN0
KCkgCiAgICAgewpAQCAtMTMxNCwxMCArMTMxNiwyMCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBz
aXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KIHRlbXBsYXRl
PHR5cGVuYW1lIFU+CiBpbmxpbmUgYm9vbCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJm
bG93SGFuZGxlcj46OnJlbW92ZUZpcnN0KGNvbnN0IFUmIHZhbHVlKQogewotICAgIHNpemVfdCBp
bmRleCA9IGZpbmQodmFsdWUpOwotICAgIGlmIChpbmRleCAhPSBub3RGb3VuZCkgewotICAgICAg
ICByZW1vdmUoaW5kZXgpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gcmVtb3Zl
Rmlyc3RNYXRjaGluZyhbJnZhbHVlXSAoY29uc3QgVCYgY3VycmVudCkgeworICAgICAgICByZXR1
cm4gY3VycmVudCA9PSB2YWx1ZTsKKyAgICB9KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwg
c2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBNYXRjaEZ1bmN0aW9uPgoraW5saW5lIGJvb2wgVmVjdG9yPFQsIGlubGluZUNh
cGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+OjpyZW1vdmVGaXJzdE1hdGNoaW5nKGNvbnN0IE1hdGNo
RnVuY3Rpb24mIG1hdGNoZXMpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplKCk7
ICsraSkgeworICAgICAgICBpZiAobWF0Y2hlcyhhdChpKSkpIHsKKyAgICAgICAgICAgIHJlbW92
ZShpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CiAgICAgfQogICAgIHJl
dHVybiBmYWxzZTsKIH0KQEAgLTEzMjYsMTEgKzEzMzgsMjAgQEAgdGVtcGxhdGU8dHlwZW5hbWUg
VCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+CiB0ZW1w
bGF0ZTx0eXBlbmFtZSBVPgogaW5saW5lIHVuc2lnbmVkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0
eSwgT3ZlcmZsb3dIYW5kbGVyPjo6cmVtb3ZlQWxsKGNvbnN0IFUmIHZhbHVlKQogeworICAgIHJl
dHVybiByZW1vdmVBbGxNYXRjaGluZyhbJnZhbHVlXSAoY29uc3QgVCYgY3VycmVudCkgeworICAg
ICAgICByZXR1cm4gY3VycmVudCA9PSB2YWx1ZTsKKyAgICB9KTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBNYXRjaEZ1bmN0aW9uPgoraW5saW5lIHVuc2lnbmVkIFZlY3Rv
cjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6cmVtb3ZlQWxsTWF0Y2hpbmco
Y29uc3QgTWF0Y2hGdW5jdGlvbiYgbWF0Y2hlcykKK3sKICAgICBpdGVyYXRvciBob2xlQmVnaW4g
PSBlbmQoKTsKICAgICBpdGVyYXRvciBob2xlRW5kID0gZW5kKCk7CiAgICAgdW5zaWduZWQgbWF0
Y2hDb3VudCA9IDA7CiAgICAgZm9yIChhdXRvIGl0ID0gYmVnaW4oKSwgaXRFbmQgPSBlbmQoKTsg
aXQgIT0gaXRFbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKCppdCA9PSB2YWx1ZSkgeworICAgICAg
ICBpZiAobWF0Y2hlcygqaXQpKSB7CiAgICAgICAgICAgICBpZiAoaG9sZUJlZ2luID09IGVuZCgp
KQogICAgICAgICAgICAgICAgIGhvbGVCZWdpbiA9IGl0OwogICAgICAgICAgICAgZWxzZSBpZiAo
aG9sZUVuZCAhPSBpdCkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAppbmRleCA0OGE2NjczYjg5
ODRlMDM5ZTQ1MjM4ZDk4ZmRkMmVmMGE3NzdmYzcyLi42MmI4NzkwZDVmNTQxMDljMmJlMDZhYzFm
YjBhN2UxYmI3NzFiZjhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2Vy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcApAQCAtMTIwNzcsMTQg
KzEyMDc3LDkgQEAgdm9pZCBDU1NQYXJzZXI6OmVuZERlY2xhcmF0aW9uc0Zvck1hcmdpbkJveCgp
CiB2b2lkIENTU1BhcnNlcjo6ZGVsZXRlRm9udEZhY2VPbmx5VmFsdWVzKCkKIHsKICAgICBBU1NF
UlQobV9oYXNGb250RmFjZU9ubHlWYWx1ZXMpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX3BhcnNlZFByb3BlcnRpZXMuc2l6ZSgpOykgewotICAgICAgICBDU1NQcm9wZXJ0eSYgcHJv
cGVydHkgPSBtX3BhcnNlZFByb3BlcnRpZXNbaV07Ci0gICAgICAgIGlmIChwcm9wZXJ0eS5pZCgp
ID09IENTU1Byb3BlcnR5Rm9udFZhcmlhbnQgJiYgcHJvcGVydHkudmFsdWUoKS0+aXNWYWx1ZUxp
c3QoKSkgewotICAgICAgICAgICAgbV9wYXJzZWRQcm9wZXJ0aWVzLnJlbW92ZShpKTsKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgICsraTsKLSAgICB9CisgICAgbV9w
YXJzZWRQcm9wZXJ0aWVzLnJlbW92ZUFsbE1hdGNoaW5nKFtdIChjb25zdCBDU1NQcm9wZXJ0eSYg
cHJvcGVydHkpIHsKKyAgICAgICAgcmV0dXJuIHByb3BlcnR5LmlkKCkgPT0gQ1NTUHJvcGVydHlG
b250VmFyaWFudCAmJiBwcm9wZXJ0eS52YWx1ZSgpLT5pc1ZhbHVlTGlzdCgpOworICAgIH0pOwog
fQogCiBQYXNzUmVmUHRyPFN0eWxlS2V5ZnJhbWU+IENTU1BhcnNlcjo6Y3JlYXRlS2V5ZnJhbWUo
Q1NTUGFyc2VyVmFsdWVMaXN0JiBrZXlzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1ZhbHVlTGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVMaXN0LmNwcApp
bmRleCA5MTE4NDRlNjliMDI2OTg1N2QyMjk3MTMzODk4YmE1NmU1ZjcxOTc3Li44Y2U2OWNhNTc4
OGY3YzdjNGJjMTUxYmE2MTNiNjlhZDUzOWRlYjc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTVmFsdWVMaXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVM
aXN0LmNwcApAQCAtNTAsMjEgKzUwLDE1IEBAIENTU1ZhbHVlTGlzdDo6Q1NTVmFsdWVMaXN0KENT
U1BhcnNlclZhbHVlTGlzdCYgcGFyc2VyVmFsdWVzKQogICAgIH0KIH0KIAotYm9vbCBDU1NWYWx1
ZUxpc3Q6OnJlbW92ZUFsbChDU1NWYWx1ZSogdmFsKQorYm9vbCBDU1NWYWx1ZUxpc3Q6OnJlbW92
ZUFsbChDU1NWYWx1ZSogdmFsdWUpCiB7CiAgICAgLy8gRklYTUU6IFdoeSBldmVuIHRha2UgYSBw
b2ludGVyPwotICAgIGlmICghdmFsKQorICAgIGlmICghdmFsdWUpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV92YWx1ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1fdmFsdWVzW2ldLmdl
dCgpLmVxdWFscygqdmFsKSkgewotICAgICAgICAgICAgbV92YWx1ZXMucmVtb3ZlKGkpOwotICAg
ICAgICAgICAgZm91bmQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGZv
dW5kOworICAgIHJldHVybiBtX3ZhbHVlcy5yZW1vdmVBbGxNYXRjaGluZyhbdmFsdWVdIChjb25z
dCBSZWY8Q1NTVmFsdWU+JiBjdXJyZW50KSB7CisgICAgICAgIHJldHVybiBjdXJyZW50LT5lcXVh
bHMoKnZhbHVlKTsKKyAgICB9KSA+IDA7CiB9CiAKIGJvb2wgQ1NTVmFsdWVMaXN0OjpoYXNWYWx1
ZShDU1NWYWx1ZSogdmFsKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL01l
ZGlhTGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFMaXN0LmNwcAppbmRleCBlZTY2
NzEyMDQyNDI2MGU4ZGIzNWY1MjI4YTNlNDVlYWMxMzIzMjAxLi4zNzYyN2RhZDhiMGU3NDFlZTZh
ZDJhMDA4N2UwOGEwMDE0Mjk2Zjc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVk
aWFMaXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFMaXN0LmNwcApAQCAtMTg1
LDE0ICsxODUsOSBAQCBib29sIE1lZGlhUXVlcnlTZXQ6OnJlbW92ZShjb25zdCBTdHJpbmcmIHF1
ZXJ5U3RyaW5nVG9SZW1vdmUpCiAgICAgaWYgKCFwYXJzZWRRdWVyeSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9xdWVyaWVzLnNpemUo
KTsgKytpKSB7Ci0gICAgICAgIE1lZGlhUXVlcnkqIHF1ZXJ5ID0gbV9xdWVyaWVzW2ldLmdldCgp
OwotICAgICAgICBpZiAoKnF1ZXJ5ID09ICpwYXJzZWRRdWVyeSkgewotICAgICAgICAgICAgbV9x
dWVyaWVzLnJlbW92ZShpKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0g
ICAgfQotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gbV9xdWVyaWVzLnJlbW92ZUZpcnN0
TWF0Y2hpbmcoWyZwYXJzZWRRdWVyeV0gKGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxNZWRpYVF1ZXJ5
PiYgcXVlcnkpIHsKKyAgICAgICAgcmV0dXJuICpxdWVyeSA9PSAqcGFyc2VkUXVlcnk7CisgICAg
fSk7CiB9CiAKIHZvaWQgTWVkaWFRdWVyeVNldDo6YWRkTWVkaWFRdWVyeShzdGQ6OnVuaXF1ZV9w
dHI8TWVkaWFRdWVyeT4gbWVkaWFRdWVyeSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9NZWRpYVF1ZXJ5TWF0Y2hlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeU1h
dGNoZXIuY3BwCmluZGV4IGRiNmJmYjdmNjY4ODA4NjI5YzRlMmNlYWM2NmFlM2FmMzEzYzYwMzku
LmVkYTFkMmY1MGU0MGU0NWQ0NWVlMmMyM2YyYTNlZGNkYjQ4ODZhNDIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5TWF0Y2hlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL01lZGlhUXVlcnlNYXRjaGVyLmNwcApAQCAtMTMwLDEyICsxMzAsOSBAQCB2b2lkIE1l
ZGlhUXVlcnlNYXRjaGVyOjpyZW1vdmVMaXN0ZW5lcihNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKiBs
aXN0ZW5lciwgTWVkaWFRdQogICAgIGlmICghbV9kb2N1bWVudCkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2xpc3RlbmVycy5zaXplKCk7ICsraSkgewot
ICAgICAgICBpZiAoKm1fbGlzdGVuZXJzW2ldLT5saXN0ZW5lcigpID09ICpsaXN0ZW5lciAmJiBt
X2xpc3RlbmVyc1tpXS0+cXVlcnkoKSA9PSBxdWVyeSkgewotICAgICAgICAgICAgbV9saXN0ZW5l
cnMucmVtb3ZlKGkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQorICAg
IG1fbGlzdGVuZXJzLnJlbW92ZUZpcnN0TWF0Y2hpbmcoW2xpc3RlbmVyLCBxdWVyeV0gKGNvbnN0
IHN0ZDo6dW5pcXVlX3B0cjxMaXN0ZW5lcj4mIGN1cnJlbnQpIHsKKyAgICAgICAgcmV0dXJuICpj
dXJyZW50LT5saXN0ZW5lcigpID09ICpsaXN0ZW5lciAmJiBjdXJyZW50LT5xdWVyeSgpID09IHF1
ZXJ5OworICAgIH0pOwogfQogCiB2b2lkIE1lZGlhUXVlcnlNYXRjaGVyOjpzdHlsZVJlc29sdmVy
Q2hhbmdlZCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKaW5kZXggMjNmMzRlNWQ0
NWNlNGYzMWE5MzQ3YTgxOGM5NmM5MGQ1ZjEwNjQzNC4uMTEzNjkxZWY0ZjMwMDc5YTUxZjNhYWFm
NzM3ZDFiODdmODA2MzdlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVz
b2x2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcApAQCAt
MTE5MSwxMCArMTE5MSw5IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YWRqdXN0U3R5bGVGb3JNYXNr
SW1hZ2VzKCkKICAgICAgICAgfQogCiAgICAgICAgIFZlY3RvcjxSZWZQdHI8TWFza0ltYWdlT3Bl
cmF0aW9uPj4mIHBlbmRpbmdSZXNvdXJjZXMgPSBtX3N0YXRlLm1hc2tJbWFnZXNXaXRoUGVuZGlu
Z1NWR0RvY3VtZW50cygpOwotICAgICAgICBmb3IgKGludCBpID0gcGVuZGluZ1Jlc291cmNlcy5z
aXplKCkgLSAxOyBpID49IDA7IGktLSkgewotICAgICAgICAgICAgaWYgKHJlbW92ZWRFeHRlcm5h
bFJlc291cmNlcy5jb250YWlucyhwZW5kaW5nUmVzb3VyY2VzW2ldKSkKLSAgICAgICAgICAgICAg
ICBwZW5kaW5nUmVzb3VyY2VzLnJlbW92ZShpKTsKLSAgICAgICAgfQorICAgICAgICBwZW5kaW5n
UmVzb3VyY2VzLnJlbW92ZUFsbE1hdGNoaW5nKFsmcmVtb3ZlZEV4dGVybmFsUmVzb3VyY2VzXSAo
Y29uc3QgUmVmUHRyPE1hc2tJbWFnZU9wZXJhdGlvbj4mIHJlc291cmNlKSB7CisgICAgICAgICAg
ICByZXR1cm4gcmVtb3ZlZEV4dGVybmFsUmVzb3VyY2VzLmNvbnRhaW5zKHJlc291cmNlKTsKKyAg
ICAgICAgfSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxl
bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKaW5kZXggM2MwZGJkMTM2
NTFiNjE4OWZmNzM5OTBjZjQ4MjlmODdkY2RjZDJhMC4uNjRmZDc5NTc4NTZjNmI2ZTQ2MWRmZjI5
NmIwYjU2M2NkZmQwNzZkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcApAQCAtMjk2NSwxNiArMjk2
NSwxMyBAQCB2b2lkIEVsZW1lbnQ6OmRldGFjaEF0dHJOb2RlRnJvbUVsZW1lbnRXaXRoVmFsdWUo
QXR0ciogYXR0ck5vZGUsIGNvbnN0IEF0b21pY1N0cgogICAgIEFTU0VSVChoYXNTeW50aGV0aWNB
dHRyQ2hpbGROb2RlcygpKTsKICAgICBhdHRyTm9kZS0+ZGV0YWNoRnJvbUVsZW1lbnRXaXRoVmFs
dWUodmFsdWUpOwogCi0gICAgYXV0byogYXR0ck5vZGVMaXN0ID0gYXR0ck5vZGVMaXN0Rm9yRWxl
bWVudCgqdGhpcyk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGF0dHJOb2RlTGlzdC0+
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKGF0dHJOb2RlTGlzdC0+YXQoaSktPnF1YWxpZmll
ZE5hbWUoKSA9PSBhdHRyTm9kZS0+cXVhbGlmaWVkTmFtZSgpKSB7Ci0gICAgICAgICAgICBhdHRy
Tm9kZUxpc3QtPnJlbW92ZShpKTsKLSAgICAgICAgICAgIGlmIChhdHRyTm9kZUxpc3QtPmlzRW1w
dHkoKSkKLSAgICAgICAgICAgICAgICByZW1vdmVBdHRyTm9kZUxpc3RGb3JFbGVtZW50KCp0aGlz
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICBhdXRvJiBhdHRyTm9kZUxpc3QgPSAqYXR0ck5vZGVMaXN0Rm9yRWxl
bWVudCgqdGhpcyk7CisgICAgYm9vbCBmb3VuZCA9IGF0dHJOb2RlTGlzdC5yZW1vdmVGaXJzdE1h
dGNoaW5nKFthdHRyTm9kZV0gKGNvbnN0IFJlZlB0cjxBdHRyPiYgYXR0cmlidXRlKSB7CisgICAg
ICAgIHJldHVybiBhdHRyaWJ1dGUtPnF1YWxpZmllZE5hbWUoKSA9PSBhdHRyTm9kZS0+cXVhbGlm
aWVkTmFtZSgpOworICAgIH0pOworICAgIEFTU0VSVF9VTlVTRUQoZm91bmQsIGZvdW5kKTsKKyAg
ICBpZiAoYXR0ck5vZGVMaXN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmVtb3ZlQXR0ck5vZGVMaXN0
Rm9yRWxlbWVudCgqdGhpcyk7CiB9CiAKIHZvaWQgRWxlbWVudDo6ZGV0YWNoQWxsQXR0ck5vZGVz
RnJvbUVsZW1lbnQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50TGlzdGVu
ZXJNYXAuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50TGlzdGVuZXJNYXAuY3BwCmluZGV4
IGI2MDUzNWJiNjc5NjI3NTJkNTM1ZWY4MzViMDMwMmU1MzE5ODE4MmUuLmYwOWFiYmVhYjBmM2Ux
MDQyYTJkMDRkNjFhNzI4MGRjMzBlZTgzYjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9FdmVudExpc3RlbmVyTWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRMaXN0
ZW5lck1hcC5jcHAKQEAgLTE1NiwyMSArMTU2LDE0IEBAIEV2ZW50TGlzdGVuZXJWZWN0b3IqIEV2
ZW50TGlzdGVuZXJNYXA6OmZpbmQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUpCiAgICAg
ICAgICAgICByZXR1cm4gbV9lbnRyaWVzW2ldLnNlY29uZC5nZXQoKTsKICAgICB9CiAKLSAgICBy
ZXR1cm4gMDsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotc3RhdGljIHZvaWQgcmVtb3ZlRmly
c3RMaXN0ZW5lckNyZWF0ZWRGcm9tTWFya3VwKEV2ZW50TGlzdGVuZXJWZWN0b3IqIGxpc3RlbmVy
VmVjdG9yKQorc3RhdGljIHZvaWQgcmVtb3ZlRmlyc3RMaXN0ZW5lckNyZWF0ZWRGcm9tTWFya3Vw
KEV2ZW50TGlzdGVuZXJWZWN0b3ImIGxpc3RlbmVyVmVjdG9yKQogewotICAgIGJvb2wgZm91bmRM
aXN0ZW5lciA9IGZhbHNlOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0ZW5lclZl
Y3Rvci0+c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKCFsaXN0ZW5lclZlY3Rvci0+YXQoaSku
bGlzdGVuZXItPndhc0NyZWF0ZWRGcm9tTWFya3VwKCkpCi0gICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgZm91bmRMaXN0ZW5lciA9IHRydWU7Ci0gICAgICAgIGxpc3RlbmVyVmVjdG9yLT5y
ZW1vdmUoaSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQorICAgIGJvb2wgZm91bmRMaXN0ZW5l
ciA9IGxpc3RlbmVyVmVjdG9yLnJlbW92ZUZpcnN0TWF0Y2hpbmcoW10gKGNvbnN0IFJlZ2lzdGVy
ZWRFdmVudExpc3RlbmVyJiBsaXN0ZW5lcikgeworICAgICAgICByZXR1cm4gbGlzdGVuZXIubGlz
dGVuZXItPndhc0NyZWF0ZWRGcm9tTWFya3VwKCk7CisgICAgfSk7CiAgICAgQVNTRVJUX1VOVVNF
RChmb3VuZExpc3RlbmVyLCBmb3VuZExpc3RlbmVyKTsKIH0KIApAQCAtMTgwLDcgKzE3Myw3IEBA
IHZvaWQgRXZlbnRMaXN0ZW5lck1hcDo6cmVtb3ZlRmlyc3RFdmVudExpc3RlbmVyQ3JlYXRlZEZy
b21NYXJrdXAoY29uc3QgQXRvbWljU3RyCiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bV9lbnRyaWVzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIGlmIChtX2VudHJpZXNbaV0uZmlyc3Qg
PT0gZXZlbnRUeXBlKSB7Ci0gICAgICAgICAgICByZW1vdmVGaXJzdExpc3RlbmVyQ3JlYXRlZEZy
b21NYXJrdXAobV9lbnRyaWVzW2ldLnNlY29uZC5nZXQoKSk7CisgICAgICAgICAgICByZW1vdmVG
aXJzdExpc3RlbmVyQ3JlYXRlZEZyb21NYXJrdXAoKm1fZW50cmllc1tpXS5zZWNvbmQpOwogICAg
ICAgICAgICAgaWYgKG1fZW50cmllc1tpXS5zZWNvbmQtPmlzRW1wdHkoKSkKICAgICAgICAgICAg
ICAgICBtX2VudHJpZXMucmVtb3ZlKGkpOwogICAgICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUu
Y3BwCmluZGV4IDljYzNhYmU1NzI4NTM5Yzg1YWRhYzllMmZkNTA0N2FiMTI3ZGI4MDYuLmViZjQ2
MTg3ZmI3ZmFkNDhhYjg4NDhlOWFiMDQwNDU0ZjhjOTUwODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Ob2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKQEAg
LTE5NTIsMTIgKzE5NTIsOSBAQCB2b2lkIE5vZGU6OnVucmVnaXN0ZXJNdXRhdGlvbk9ic2VydmVy
KE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24qIHJlZ2lzdHJhdGlvbgogICAgIGlmICghcmVn
aXN0cnkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVn
aXN0cnktPnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChyZWdpc3RyeS0+YXQoaSkuZ2V0KCkg
PT0gcmVnaXN0cmF0aW9uKSB7Ci0gICAgICAgICAgICByZWdpc3RyeS0+cmVtb3ZlKGkpOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQorICAgIHJlZ2lzdHJ5LT5yZW1vdmVG
aXJzdE1hdGNoaW5nKFtyZWdpc3RyYXRpb25dIChjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8TXV0YXRp
b25PYnNlcnZlclJlZ2lzdHJhdGlvbj4mIGN1cnJlbnQpIHsKKyAgICAgICAgcmV0dXJuIGN1cnJl
bnQuZ2V0KCkgPT0gcmVnaXN0cmF0aW9uOworICAgIH0pOwogfQogCiB2b2lkIE5vZGU6OnJlZ2lz
dGVyVHJhbnNpZW50TXV0YXRpb25PYnNlcnZlcihNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9u
KiByZWdpc3RyYXRpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9I
VE1MVHJlZUJ1aWxkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVC
dWlsZGVyLmNwcAppbmRleCAwNDJjYTBlYzkxNDFjNzM2NDE0ZGFmYjUwNDQxZDdmNjJjMTgwZTk1
Li42M2IyYzM3MGJlMmRjOGJkYTllZjNjOTRmYjY4YjFhOGI5Yzc3MGU4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAKQEAgLTQ0MSwxMSArNDQx
LDEwIEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRmFrZVBFbmRUYWdJZlBJbkJ1dHRv
blNjb3BlKCkKIFZlY3RvcjxBdHRyaWJ1dGU+IEhUTUxUcmVlQnVpbGRlcjo6YXR0cmlidXRlc0Zv
cklzaW5kZXhJbnB1dChBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogewogICAgIFZlY3RvcjxBdHRy
aWJ1dGU+IGF0dHJpYnV0ZXMgPSB0b2tlbi5hdHRyaWJ1dGVzKCk7Ci0gICAgZm9yIChpbnQgaSA9
IGF0dHJpYnV0ZXMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKLSAgICAgICAgY29uc3QgUXVh
bGlmaWVkTmFtZSYgbmFtZSA9IGF0dHJpYnV0ZXMuYXQoaSkubmFtZSgpOwotICAgICAgICBpZiAo
bmFtZS5tYXRjaGVzKG5hbWVBdHRyKSB8fCBuYW1lLm1hdGNoZXMoYWN0aW9uQXR0cikgfHwgbmFt
ZS5tYXRjaGVzKHByb21wdEF0dHIpKQotICAgICAgICAgICAgYXR0cmlidXRlcy5yZW1vdmUoaSk7
Ci0gICAgfQorICAgIGF0dHJpYnV0ZXMucmVtb3ZlQWxsTWF0Y2hpbmcoW10gKGNvbnN0IEF0dHJp
YnV0ZSYgYXR0cmlidXRlKSB7CisgICAgICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUgPSBh
dHRyaWJ1dGUubmFtZSgpOworICAgICAgICByZXR1cm4gbmFtZS5tYXRjaGVzKG5hbWVBdHRyKSB8
fCBuYW1lLm1hdGNoZXMoYWN0aW9uQXR0cikgfHwgbmFtZS5tYXRjaGVzKHByb21wdEF0dHIpOwor
ICAgIH0pOwogCiAgICAgYXR0cmlidXRlcy5hcHBlbmQoQXR0cmlidXRlKG5hbWVBdHRyLCBpc2lu
ZGV4VGFnLmxvY2FsTmFtZSgpKSk7CiAgICAgcmV0dXJuIGF0dHJpYnV0ZXM7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckFu
aW1hdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlckFuaW1hdGlvbi5jcHAKaW5kZXggYzE0NGQwNTVlMGRmNzZlOTkzODk1ZjIzYTY2
Y2JkMmFmZDczOGFiNy4uZmI0YTYzOTA1YjMyZmI0OTQyZmQyOWNkZGUxZTkyODMzNDZmMWU0OCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1
cmVNYXBwZXJBbmltYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmNwcApAQCAtMzY1LDE4ICszNjUsMTYg
QEAgdm9pZCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uczo6cmVzdW1lKCkKIAogdm9pZCBUZXh0dXJl
TWFwcGVyQW5pbWF0aW9uczo6cmVtb3ZlKGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKLSAgICBmb3Ig
KGludCBpID0gbV9hbmltYXRpb25zLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7Ci0gICAgICAg
IGlmIChtX2FuaW1hdGlvbnNbaV0ubmFtZSgpID09IG5hbWUpCi0gICAgICAgICAgICBtX2FuaW1h
dGlvbnMucmVtb3ZlKGkpOwotICAgIH0KKyAgICBtX2FuaW1hdGlvbnMucmVtb3ZlQWxsTWF0Y2hp
bmcoWyZuYW1lXSAoY29uc3QgVGV4dHVyZU1hcHBlckFuaW1hdGlvbiYgYW5pbWF0aW9uKSB7Cisg
ICAgICAgIHJldHVybiBhbmltYXRpb24ubmFtZSgpID09IG5hbWU7CisgICAgfSk7CiB9CiAKIHZv
aWQgVGV4dHVyZU1hcHBlckFuaW1hdGlvbnM6OnJlbW92ZShjb25zdCBTdHJpbmcmIG5hbWUsIEFu
aW1hdGVkUHJvcGVydHlJRCBwcm9wZXJ0eSkKIHsKLSAgICBmb3IgKGludCBpID0gbV9hbmltYXRp
b25zLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7Ci0gICAgICAgIGlmIChtX2FuaW1hdGlvbnNb
aV0ubmFtZSgpID09IG5hbWUgJiYgbV9hbmltYXRpb25zW2ldLnByb3BlcnR5KCkgPT0gcHJvcGVy
dHkpCi0gICAgICAgICAgICBtX2FuaW1hdGlvbnMucmVtb3ZlKGkpOwotICAgIH0KKyAgICBtX2Fu
aW1hdGlvbnMucmVtb3ZlQWxsTWF0Y2hpbmcoWyZuYW1lLCBwcm9wZXJ0eV0gKGNvbnN0IFRleHR1
cmVNYXBwZXJBbmltYXRpb24mIGFuaW1hdGlvbikgeworICAgICAgICByZXR1cm4gYW5pbWF0aW9u
Lm5hbWUoKSA9PSBuYW1lICYmIGFuaW1hdGlvbi5wcm9wZXJ0eSgpID09IHByb3BlcnR5OworICAg
IH0pOwogfQogCiB2b2lkIFRleHR1cmVNYXBwZXJBbmltYXRpb25zOjphcHBseShUZXh0dXJlTWFw
cGVyQW5pbWF0aW9uOjpDbGllbnQqIGNsaWVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL2Fu
aW1hdGlvbi9TVkdTTUlMRWxlbWVudC5jcHAKaW5kZXggYmQxNGE3YjkwY2I5Y2YwNTA0YmFiOGIx
MGRiNzE3NDk1ZmI4NGJkMi4uZDVhMzgzYzZhOTA3NDI4NmM5ODUwZDYyNjM4OTQzNzNmYjY3MzFh
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5j
cHAKQEAgLTIxNCwxMCArMjE0LDkgQEAgc3RhdGljIGlubGluZSBRdWFsaWZpZWROYW1lIGNvbnN0
cnVjdFF1YWxpZmllZE5hbWUoY29uc3QgU1ZHRWxlbWVudCogc3ZnRWxlbWVudCwKIAogc3RhdGlj
IGlubGluZSB2b2lkIGNsZWFyVGltZXNXaXRoRHluYW1pY09yaWdpbnMoVmVjdG9yPFNNSUxUaW1l
V2l0aE9yaWdpbj4mIHRpbWVMaXN0KQogewotICAgIGZvciAoaW50IGkgPSB0aW1lTGlzdC5zaXpl
KCkgLSAxOyBpID49IDA7IC0taSkgewotICAgICAgICBpZiAodGltZUxpc3RbaV0ub3JpZ2luSXNT
Y3JpcHQoKSkKLSAgICAgICAgICAgIHRpbWVMaXN0LnJlbW92ZShpKTsKLSAgICB9CisgICAgdGlt
ZUxpc3QucmVtb3ZlQWxsTWF0Y2hpbmcoW10gKGNvbnN0IFNNSUxUaW1lV2l0aE9yaWdpbiYgdGlt
ZSkgeworICAgICAgICByZXR1cm4gdGltZS5vcmlnaW5Jc1NjcmlwdCgpOworICAgIH0pOwogfQog
CiB2b2lkIFNWR1NNSUxFbGVtZW50OjpyZXNldCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L3dpbi9XZWJOb3RpZmljYXRpb25DZW50ZXIuY3BwIGIvU291cmNlL1dlYktpdC93aW4vV2ViTm90
aWZpY2F0aW9uQ2VudGVyLmNwcAppbmRleCA4Zjg1NzZmODRiZDgxOTY5NzliMmZmZDk0NDkwNzlj
YmMxNmNhZDk1Li5jNjU2YTBiNDYwMjBkZWU0MmQwMDc5MThlOGU2ODlkNDk4NTIyYjBkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJOb3RpZmljYXRpb25DZW50ZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvd2luL1dlYk5vdGlmaWNhdGlvbkNlbnRlci5jcHAKQEAgLTIwMCwxNSAr
MjAwLDExIEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViTm90aWZpY2F0aW9uQ2VudGVy
OjpyZW1vdmVPYnNlcnZlcigKICAgICBPYmplY3RPYnNlcnZlckxpc3QmIG9ic2VydmVyTGlzdCA9
IGl0LT52YWx1ZTsKICAgICBPYnNlcnZlckxpc3RJdGVyYXRvciBlbmQgPSBvYnNlcnZlckxpc3Qu
ZW5kKCk7CiAKLSAgICBpbnQgaSA9IDA7Ci0gICAgZm9yIChPYnNlcnZlckxpc3RJdGVyYXRvciBp
dDIgPSBvYnNlcnZlckxpc3QuYmVnaW4oKTsgaXQyICE9IGVuZDsgKytpdDIsICsraSkgewotICAg
ICAgICBJVW5rbm93biogb2JzZXJ2ZWRPYmplY3QgPSBpdDItPmZpcnN0LmdldCgpOwotICAgICAg
ICBJV2ViTm90aWZpY2F0aW9uT2JzZXJ2ZXIqIG9ic2VydmVyID0gaXQyLT5zZWNvbmQuZ2V0KCk7
Ci0gICAgICAgIGlmIChvYnNlcnZlciA9PSBhbk9ic2VydmVyICYmICghYW5PYmplY3QgfHwgYW5P
YmplY3QgPT0gb2JzZXJ2ZWRPYmplY3QpKSB7Ci0gICAgICAgICAgICBvYnNlcnZlckxpc3QucmVt
b3ZlKGkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9CisgICAgb2JzZXJ2
ZXJMaXN0LnJlbW92ZUZpcnN0TWF0Y2hpbmcoW2FuT2JqZWN0LCBhbk9ic2VydmVyXSAoY29uc3Qg
T2JqZWN0T2JzZXJ2ZXJQYWlyJiBwYWlyKSB7CisgICAgICAgIElVbmtub3duKiBvYnNlcnZlZE9i
amVjdCA9IHBhaXIuZmlyc3QuZ2V0KCk7CisgICAgICAgIElXZWJOb3RpZmljYXRpb25PYnNlcnZl
ciogb2JzZXJ2ZXIgPSBwYWlyLnNlY29uZC5nZXQoKTsKKyAgICAgICAgcmV0dXJuIG9ic2VydmVy
ID09IGFuT2JzZXJ2ZXIgJiYgKCFhbk9iamVjdCB8fCBhbk9iamVjdCA9PSBvYnNlcnZlZE9iamVj
dCk7CisgICAgfSk7CiAKICAgICBpZiAob2JzZXJ2ZXJMaXN0LmlzRW1wdHkoKSkKICAgICAgICAg
ZC0+bV9tYXBwZWRPYnNlcnZlcnMucmVtb3ZlKG5hbWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9QbGF0Zm9ybUNBTGF5ZXJSZW1vdGUuY3BwIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9QbGF0Zm9ybUNBTGF5ZXJSZW1v
dGUuY3BwCmluZGV4IDhiMGRhM2EyNmNlOWFiY2VjM2ZlMDNmNjdjNzVmMGZiMjA2MjRiMzAuLjlj
NDcwNDBmMDQyMzI3OGU4YTM0OWI4MjAxNjY5ZDhlM2QxYmM2M2QgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUGxhdGZvcm1DQUxheWVyUmVtb3RlLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1BsYXRmb3JtQ0FM
YXllclJlbW90ZS5jcHAKQEAgLTM1MCwxMiArMzUwLDkgQEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXJS
ZW1vdGU6OmFkZEFuaW1hdGlvbkZvcktleShjb25zdCBTdHJpbmcmIGtleSwgUGxhdGZvcm1DQUFu
aW0KIHZvaWQgUGxhdGZvcm1DQUxheWVyUmVtb3RlOjpyZW1vdmVBbmltYXRpb25Gb3JLZXkoY29u
c3QgU3RyaW5nJiBrZXkpCiB7CiAgICAgaWYgKG1fYW5pbWF0aW9ucy5yZW1vdmUoa2V5KSkgewot
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcHJvcGVydGllcy5hZGRlZEFuaW1hdGlv
bnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGlmIChtX3Byb3BlcnRpZXMuYWRkZWRBbmlt
YXRpb25zW2ldLmZpcnN0ID09IGtleSkgewotICAgICAgICAgICAgICAgIG1fcHJvcGVydGllcy5h
ZGRlZEFuaW1hdGlvbnMucmVtb3ZlKGkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgfQotICAgICAgICB9CisgICAgICAgIG1fcHJvcGVydGllcy5hZGRlZEFuaW1hdGlvbnMu
cmVtb3ZlRmlyc3RNYXRjaGluZyhbJmtleV0gKGNvbnN0IHN0ZDo6cGFpcjxTdHJpbmcsIFBsYXRm
b3JtQ0FBbmltYXRpb25SZW1vdGU6OlByb3BlcnRpZXM+JiBwYWlyKSB7CisgICAgICAgICAgICBy
ZXR1cm4gcGFpci5maXJzdCA9PSBrZXk7CisgICAgICAgIH0pOwogICAgIH0KICAgICBtX3Byb3Bl
cnRpZXMua2V5UGF0aHNPZkFuaW1hdGlvbnNUb1JlbW92ZS5hZGQoa2V5KTsKICAgICBtX3Byb3Bl
cnRpZXMubm90ZVByb3BlcnRpZXNDaGFuZ2VkKFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpB
bmltYXRpb25zQ2hhbmdlZCk7CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9D
aGFuZ2VMb2cKaW5kZXggMTcwYjE1ZDZkYWM4YmYxZmU3ZWZhYjg3Yjk3NDRiOTc1ZDBhYjQzOC4u
MmRjNGFlNWIxNjM0ZjA1MWRkYjdiZDAxMGRhN2Q1ODQ5ZTcyMjAyYSAxMDA2NDQKLS0tIGEvVG9v
bHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDE1
LTAyLTA1ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIFZl
Y3Rvcjo6cmVtb3ZlRmlyc3RNYXRjaGluZygpIC8gcmVtb3ZlQWxsTWF0Y2hpbmcoKSBtZXRob2Rz
IHRha2luZyBsYW1iZGEgZnVuY3Rpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNDEzMjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBVc2UgbmV3IFZlY3Rvcjo6cmVtb3ZlRmlyc3RNYXRjaGluZygpIC8g
cmVtb3ZlQWxsTWF0Y2hpbmcoKSBtZXRob2RzLgorCiAyMDE1LTAyLTA3ICBDc2FiYSBPc3p0cm9n
b27DoWMgIDxvc3N5QHdlYmtpdC5vcmc+CiAKICAgICAgICAgcnVuLWpzYy1zdHJlc3MtdGVzdHMg
LS1yZW1vdGUgc2hvdWxkIHVzZSB0aGUgZGVmYXVsdCBzc2ggcG9ydApkaWZmIC0tZ2l0IGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVmVjdG9yLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV1RGL1ZlY3Rvci5jcHAKaW5kZXggNjc1OTZhYzQ5Yjg3ZWRhOTgxOTg4NDJjMTQ3
YzJlZDgyMDY3NTE5ZS4uMjYyMmQwOWUyMjViZTJhOTdjZDY0MWZhMjgyODQ0ZTU4ZWIxYmQ0MSAx
MDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVmVjdG9yLmNwcAorKysg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9WZWN0b3IuY3BwCkBAIC00NjMsNCArNDYz
LDU4IEBAIFRFU1QoV1RGX1ZlY3RvciwgUmVtb3ZlQWxsKQogICAgIEVYUEVDVF9UUlVFKHYyID09
IHZFeHBlY3RlZCk7CiB9CiAKK1RFU1QoV1RGX1ZlY3RvciwgUmVtb3ZlRmlyc3RNYXRjaGluZykK
K3sKKyAgICBWZWN0b3I8aW50PiB2OworICAgIEVYUEVDVF9UUlVFKHYuaXNFbXB0eSgpKTsKKyAg
ICBFWFBFQ1RfRkFMU0Uodi5yZW1vdmVGaXJzdE1hdGNoaW5nKFtdIChpbnQgdmFsdWUpIHsgcmV0
dXJuIHZhbHVlID4gMDsgfSkpOworICAgIEVYUEVDVF9GQUxTRSh2LnJlbW92ZUZpcnN0TWF0Y2hp
bmcoW10gKGludCkgeyByZXR1cm4gdHJ1ZTsgfSkpOworICAgIEVYUEVDVF9GQUxTRSh2LnJlbW92
ZUZpcnN0TWF0Y2hpbmcoW10gKGludCkgeyByZXR1cm4gZmFsc2U7IH0pKTsKKworICAgIHYgPSB7
MywgMSwgMiwgMSwgMiwgMSwgMiwgMiwgMSwgMSwgMSwgM307CisgICAgRVhQRUNUX0VRKDEyVSwg
di5zaXplKCkpOworICAgIEVYUEVDVF9GQUxTRSh2LnJlbW92ZUZpcnN0TWF0Y2hpbmcoW10gKGlu
dCkgeyByZXR1cm4gZmFsc2U7IH0pKTsKKyAgICBFWFBFQ1RfRVEoMTJVLCB2LnNpemUoKSk7Cisg
ICAgRVhQRUNUX0ZBTFNFKHYucmVtb3ZlRmlyc3RNYXRjaGluZyhbXSAoaW50IHZhbHVlKSB7IHJl
dHVybiB2YWx1ZSA8IDA7IH0pKTsKKyAgICBFWFBFQ1RfRVEoMTJVLCB2LnNpemUoKSk7CisgICAg
RVhQRUNUX1RSVUUodi5yZW1vdmVGaXJzdE1hdGNoaW5nKFtdIChpbnQgdmFsdWUpIHsgcmV0dXJu
IHZhbHVlIDwgMzsgfSkpOworICAgIEVYUEVDVF9FUSgxMVUsIHYuc2l6ZSgpKTsKKyAgICBFWFBF
Q1RfVFJVRSh2ID09IFZlY3RvcjxpbnQ+KHszLCAyLCAxLCAyLCAxLCAyLCAyLCAxLCAxLCAxLCAz
fSkpOworICAgIEVYUEVDVF9UUlVFKHYucmVtb3ZlRmlyc3RNYXRjaGluZyhbXSAoaW50IHZhbHVl
KSB7IHJldHVybiB2YWx1ZSA+IDI7IH0pKTsKKyAgICBFWFBFQ1RfRVEoMTBVLCB2LnNpemUoKSk7
CisgICAgRVhQRUNUX1RSVUUodiA9PSBWZWN0b3I8aW50Pih7MiwgMSwgMiwgMSwgMiwgMiwgMSwg
MSwgMSwgM30pKTsKKyAgICBFWFBFQ1RfVFJVRSh2LnJlbW92ZUZpcnN0TWF0Y2hpbmcoW10gKGlu
dCB2YWx1ZSkgeyByZXR1cm4gdmFsdWUgPiAyOyB9KSk7CisgICAgRVhQRUNUX0VRKDlVLCB2LnNp
emUoKSk7CisgICAgRVhQRUNUX1RSVUUodiA9PSBWZWN0b3I8aW50Pih7MiwgMSwgMiwgMSwgMiwg
MiwgMSwgMSwgMX0pKTsKK30KKworVEVTVChXVEZfVmVjdG9yLCBSZW1vdmVBbGxNYXRjaGluZykK
K3sKKyAgICBWZWN0b3I8aW50PiB2OworICAgIEVYUEVDVF9UUlVFKHYuaXNFbXB0eSgpKTsKKyAg
ICBFWFBFQ1RfRkFMU0Uodi5yZW1vdmVBbGxNYXRjaGluZyhbXSAoaW50IHZhbHVlKSB7IHJldHVy
biB2YWx1ZSA+IDA7IH0pKTsKKyAgICBFWFBFQ1RfRkFMU0Uodi5yZW1vdmVBbGxNYXRjaGluZyhb
XSAoaW50KSB7IHJldHVybiB0cnVlOyB9KSk7CisgICAgRVhQRUNUX0ZBTFNFKHYucmVtb3ZlQWxs
TWF0Y2hpbmcoW10gKGludCkgeyByZXR1cm4gZmFsc2U7IH0pKTsKKworICAgIHYgPSB7MywgMSwg
MiwgMSwgMiwgMSwgMiwgMiwgMSwgMSwgMSwgM307CisgICAgRVhQRUNUX0VRKDEyVSwgdi5zaXpl
KCkpOworICAgIEVYUEVDVF9FUSgwVSwgdi5yZW1vdmVBbGxNYXRjaGluZyhbXSAoaW50KSB7IHJl
dHVybiBmYWxzZTsgfSkpOworICAgIEVYUEVDVF9FUSgxMlUsIHYuc2l6ZSgpKTsKKyAgICBFWFBF
Q1RfRVEoMFUsIHYucmVtb3ZlQWxsTWF0Y2hpbmcoW10gKGludCB2YWx1ZSkgeyByZXR1cm4gdmFs
dWUgPCAwOyB9KSk7CisgICAgRVhQRUNUX0VRKDEyVSwgdi5zaXplKCkpOworICAgIEVYUEVDVF9F
USgxMlUsIHYucmVtb3ZlQWxsTWF0Y2hpbmcoW10gKGludCB2YWx1ZSkgeyByZXR1cm4gdmFsdWUg
PiAwOyB9KSk7CisgICAgRVhQRUNUX1RSVUUodi5pc0VtcHR5KCkpOworCisgICAgdiA9IHszLCAx
LCAyLCAxLCAyLCAxLCAzLCAyLCAyLCAxLCAxLCAxLCAzfTsKKyAgICBFWFBFQ1RfRVEoMTNVLCB2
LnNpemUoKSk7CisgICAgRVhQRUNUX0VRKDNVLCB2LnJlbW92ZUFsbE1hdGNoaW5nKFtdIChpbnQg
dmFsdWUpIHsgcmV0dXJuIHZhbHVlID4gMjsgfSkpOworICAgIEVYUEVDVF9FUSgxMFUsIHYuc2l6
ZSgpKTsKKyAgICBFWFBFQ1RfVFJVRSh2ID09IFZlY3RvcjxpbnQ+KHsxLCAyLCAxLCAyLCAxLCAy
LCAyLCAxLCAxLCAxfSkpOworICAgIEVYUEVDVF9FUSg2VSwgdi5yZW1vdmVBbGxNYXRjaGluZyhb
XSAoaW50IHZhbHVlKSB7IHJldHVybiB2YWx1ZSAhPSAyOyB9KSk7CisgICAgRVhQRUNUX0VRKDRV
LCB2LnNpemUoKSk7CisgICAgRVhQRUNUX1RSVUUodiA9PSBWZWN0b3I8aW50Pih7MiwgMiwgMiwg
Mn0pKTsKKyAgICBFWFBFQ1RfRVEoNFUsIHYucmVtb3ZlQWxsTWF0Y2hpbmcoW10gKGludCB2YWx1
ZSkgeyByZXR1cm4gdmFsdWUgPT0gMjsgfSkpOworICAgIEVYUEVDVF9UUlVFKHYuaXNFbXB0eSgp
KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQpkaWZmIC0tZ2l0IGEvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAgYi9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAppbmRl
eCA0NGVhMzkxNTBjYmQ4MmEyNTcwM2MzNmNmYjkwMjgxM2QyZmM3N2UyLi5mMDlhYTI2YzI5Yzlm
MjJkNDM3MDlmYzBlNTQ4MDQyODQwNmViY2IxIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAorKysgYi9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcApAQCAtMTA5LDEz
ICsxMDksOSBAQCB2b2lkIEluamVjdGVkQnVuZGxlOjpkaWRDcmVhdGVQYWdlKFdLQnVuZGxlUGFn
ZVJlZiBwYWdlKQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjp3aWxsRGVzdHJveVBhZ2UoV0tCdW5k
bGVQYWdlUmVmIHBhZ2UpCiB7Ci0gICAgc2l6ZV90IHNpemUgPSBtX3BhZ2VzLnNpemUoKTsKLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBpZiAobV9wYWdl
c1tpXS0+cGFnZSgpID09IHBhZ2UpIHsKLSAgICAgICAgICAgIG1fcGFnZXMucmVtb3ZlKGkpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9CisgICAgbV9wYWdlcy5yZW1vdmVG
aXJzdE1hdGNoaW5nKFtwYWdlXSAoY29uc3Qgc3RkOjp1bmlxdWVfcHRyPEluamVjdGVkQnVuZGxl
UGFnZT4mIGN1cnJlbnQpIHsKKyAgICAgICAgcmV0dXJuIGN1cnJlbnQtPnBhZ2UoKSA9PSBwYWdl
OworICAgIH0pOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpkaWRJbml0aWFsaXplUGFnZUdy
b3VwKFdLQnVuZGxlUGFnZUdyb3VwUmVmIHBhZ2VHcm91cCkK
</data>

          </attachment>
      

    </bug>

</bugzilla>