youtube vet subtitles returning incorrectly

It seems as though the subtitles downloaded through youtube-dl from youtube are returned incorrectly. For example see this video - https://www.youtube.com/watch?v=aeh_lkAnxAU
And the following subtitles downloaded through youtube-dl. please notice the duplicate values (like the OK label appearing 5 times):
WEBVTT
Kind: captions
Language: en
Style:
::cue(c.colorCCCCCC) { color: rgb(204,204,204);
}
::cue(c.colorE5E5E5) { color: rgb(229,229,229);
}

00:00:01.210 --> 00:00:04.640 align:start position:0%
<c.colorCCCCCC>ok
00:00:04.640 --> 00:00:05.040 align:start position:0%
<c.colorCCCCCC>ok

00:00:05.040 --> 00:00:06.090 align:start position:0%
<c.colorCCCCCC>ok
in<00:00:05.180> this<c.colorE5E5E5><00:00:05.270> work<00:00:05.550> she<00:00:05.710> called<c.colorE5E5E5><00:00:06.090> large
00:00:06.090 --> 00:00:06.420 align:start position:0%
<c.colorCCCCCC>ok
in this<c.colorE5E5E5> work she called<c.colorE5E5E5> large

00:00:06.420 --> 00:00:08.280 align:start position:0%
<c.colorCCCCCC>ok
in this<c.colorE5E5E5> work she called<c.colorE5E5E5> large
table<c.colorE5E5E5><00:00:06.840> v.<00:00:07.050> look<c.colorCCCCCC><00:00:07.180> up<c.colorE5E5E5><00:00:07.660> we're<00:00:08.160> trying<00:00:08.280> to
00:00:08.280 --> 00:00:08.480 align:start position:0%
in this<c.colorE5E5E5> work she called<c.colorE5E5E5> large
table<c.colorE5E5E5> v. look<c.colorCCCCCC> up<c.colorE5E5E5> we're trying to

00:00:08.480 --> 00:00:10.160 align:start position:0%
in this<c.colorE5E5E5> work she called<c.colorE5E5E5> large
table<c.colorE5E5E5> v. look<c.colorCCCCCC> up<c.colorE5E5E5> we're trying to
look<00:00:08.540> up<00:00:08.730> a<00:00:08.780> tax<00:00:09.240> rate<00:00:09.610> from<00:00:10.110> a<00:00:10.160> table
00:00:10.160 --> 00:00:10.470 align:start position:0%
table<c.colorE5E5E5> v. look<c.colorCCCCCC> up<c.colorE5E5E5> we're trying to
look up a tax rate from a table
00:00:10.470 --> 00:00:11.730 align:start position:0%
table<c.colorE5E5E5> v. look<c.colorCCCCCC> up<c.colorE5E5E5> we're trying to
look up a tax rate from a table
<c.colorE5E5E5>that's<00:00:10.740> quite<c.colorE5E5E5><00:00:11.059> large<c.colorCCCCCC><00:00:11.510> by<00:00:11.730> most
00:00:11.730 --> 00:00:11.980 align:start position:0%
<c.colorE5E5E5>look up a tax rate from a table
<c.colorE5E5E5>that's quite<c.colorE5E5E5> large<c.colorCCCCCC> by most
00:00:11.980 --> 00:00:12.670 align:start position:0%
<c.colorE5E5E5>look up a tax rate from a table
<c.colorE5E5E5>that's quite<c.colorE5E5E5> large<c.colorCCCCCC> by most
<c.colorE5E5E5>people's<00:00:12.250> estimation
00:00:12.670 --> 00:00:13.070 align:start position:0%
<c.colorE5E5E5>that's quite<c.colorE5E5E5> large<c.colorCCCCCC> by most
<c.colorE5E5E5>people's estimation

00:00:13.070 --> 00:00:14.530 align:start position:0%
<c.colorE5E5E5>that's quite<c.colorE5E5E5> large<c.colorCCCCCC> by most
<c.colorE5E5E5>people's estimation
the<00:00:13.450> table<c.colorCCCCCC><00:00:13.750> was<c.colorE5E5E5><00:00:13.910> from<00:00:14.100> column<c.colorCCCCCC><00:00:14.500> F
00:00:14.530 --> 00:00:14.930 align:start position:0%
<c.colorE5E5E5>people's estimation
the table<c.colorCCCCCC> was<c.colorE5E5E5> from column<c.colorCCCCCC> F

00:00:14.930 --> 00:00:15.990 align:start position:0%
<c.colorE5E5E5>people's estimation
the table<c.colorCCCCCC> was<c.colorE5E5E5> from column<c.colorCCCCCC> F
<c.colorE5E5E5>overthrew<00:00:15.400> column<c.colorCCCCCC><00:00:15.860> him
00:00:15.990 --> 00:00:16.390 align:start position:0%
the table<c.colorCCCCCC> was<c.colorE5E5E5> from column<c.colorCCCCCC> F
<c.colorE5E5E5>overthrew column<c.colorCCCCCC> him

00:00:16.390 --> 00:00:18.810 align:start position:0%
the table<c.colorCCCCCC> was<c.colorE5E5E5> from column<c.colorCCCCCC> F
<c.colorE5E5E5>overthrew column<c.colorCCCCCC> him
goes<00:00:16.970> all<00:00:17.100> the<00:00:17.190> way<00:00:17.220> down<00:00:17.530> to<c.colorCCCCCC><00:00:17.640> row<00:00:18.110> 18
00:00:18.810 --> 00:00:19.210 align:start position:0%
<c.colorE5E5E5>overthrew column<c.colorCCCCCC> him
goes all the way down to<c.colorCCCCCC> row 18

00:00:19.210 --> 00:00:20.190 align:start position:0%
<c.colorE5E5E5>overthrew column<c.colorCCCCCC> him
goes all the way down to<c.colorCCCCCC> row 18
well<00:00:19.690> over<00:00:19.900> a<00:00:19.970> hundred<00:00:20.039> different
00:00:20.190 --> 00:00:20.590 align:start position:0%
<c.colorCCCCCC>goes all the way down to<c.colorCCCCCC> row 18
well over a hundred different

00:00:20.590 --> 00:00:21.230 align:start position:0%
<c.colorCCCCCC>goes all the way down to<c.colorCCCCCC> row 18
well over a hundred different
<c.colorE5E5E5>answers<c.colorCCCCCC><00:00:21.170> there
00:00:21.230 --> 00:00:21.630 align:start position:0%
<c.colorCCCCCC>well over a hundred different
<c.colorE5E5E5>answers<c.colorCCCCCC> there

00:00:21.630 --> 00:00:23.390 align:start position:0%
<c.colorCCCCCC>well over a hundred different
<c.colorE5E5E5>answers<c.colorCCCCCC> there
there<00:00:21.880> were<00:00:22.080> trying<00:00:22.420> to<00:00:22.490> do<00:00:23.060> is<00:00:23.390> to
00:00:23.390 --> 00:00:23.490 align:start position:0%
<c.colorE5E5E5>answers<c.colorCCCCCC> there
there were trying to do is to
00:00:23.490 --> 00:00:24.980 align:start position:0%
<c.colorE5E5E5>answers<c.colorCCCCCC> there
there were trying to do is to
<c.colorE5E5E5>look<c.colorCCCCCC><00:00:23.640> up<00:00:23.830> the<00:00:23.950> appropriate<c.colorCCCCCC><00:00:24.490> tax<00:00:24.660> rate
00:00:24.980 --> 00:00:25.380 align:start position:0%
<c.colorCCCCCC>there were trying to do is to
<c.colorE5E5E5>look<c.colorCCCCCC> up the appropriate<c.colorCCCCCC> tax rate

00:00:25.380 --> 00:00:27.450 align:start position:0%
<c.colorCCCCCC>there were trying to do is to
<c.colorE5E5E5>look<c.colorCCCCCC> up the appropriate<c.colorCCCCCC> tax rate
<c.colorE5E5E5>for<00:00:25.930> people's<00:00:26.360> whose<00:00:26.830> salaries<c.colorE5E5E5><00:00:27.450> are
00:00:27.450 --> 00:00:27.580 align:start position:0%
<c.colorE5E5E5>look<c.colorCCCCCC> up the appropriate<c.colorCCCCCC> tax rate
<c.colorE5E5E5>for people's whose salaries<c.colorE5E5E5> are

00:00:27.580 --> 00:00:28.180 align:start position:0%
<c.colorE5E5E5>look<c.colorCCCCCC> up the appropriate<c.colorCCCCCC> tax rate
<c.colorE5E5E5>for people's whose salaries<c.colorE5E5E5> are
in<00:00:27.690> column<c.colorCCCCCC><00:00:28.080> B
00:00:28.180 --> 00:00:28.580 align:start position:0%
<c.colorE5E5E5>for people's whose salaries<c.colorE5E5E5> are
in column<c.colorCCCCCC> B

00:00:28.580 --> 00:00:30.000 align:start position:0%
<c.colorE5E5E5>for people's whose salaries<c.colorE5E5E5> are
in column<c.colorCCCCCC> B
and<c.colorCCCCCC><00:00:29.110> their<00:00:29.210> dependents<00:00:29.910> are<00:00:30.000> listed
00:00:30.000 --> 00:00:30.370 align:start position:0%
<c.colorE5E5E5>in column<c.colorCCCCCC> B
and<c.colorCCCCCC> their dependents are listed
00:00:30.370 --> 00:00:32.790 align:start position:0%
<c.colorE5E5E5>in column<c.colorCCCCCC> B
and<c.colorCCCCCC> their dependents are listed
in<00:00:30.440> column<00:00:30.910> C<c.colorCCCCCC><00:00:31.550> so<00:00:32.210> we're<c.colorE5E5E5><00:00:32.379> using<00:00:32.739> a<c.colorCCCCCC><00:00:32.790> V
00:00:32.790 --> 00:00:32.969 align:start position:0%
and<c.colorCCCCCC> their dependents are listed
in column C<c.colorCCCCCC> so we're<c.colorE5E5E5> using a<c.colorCCCCCC> V

00:00:32.969 --> 00:00:34.190 align:start position:0%
and<c.colorCCCCCC> their dependents are listed
in column C<c.colorCCCCCC> so we're<c.colorE5E5E5> using a<c.colorCCCCCC> V
look<c.colorCCCCCC><00:00:33.250> appeared
00:00:34.190 --> 00:00:34.590 align:start position:0%
in column C<c.colorCCCCCC> so we're<c.colorE5E5E5> using a<c.colorCCCCCC> V
look<c.colorCCCCCC> appeared

00:00:34.590 --> 00:00:38.069 align:start position:0%
in column C<c.colorCCCCCC> so we're<c.colorE5E5E5> using a<c.colorCCCCCC> V
look<c.colorCCCCCC> appeared
amor<c.colorE5E5E5><00:00:36.700> first<00:00:37.039> comparing<00:00:37.600> the<00:00:37.829> salary
00:00:38.069 --> 00:00:38.469 align:start position:0%
look<c.colorCCCCCC> appeared
amor<c.colorE5E5E5> first comparing the salary
00:00:38.469 --> 00:00:39.470 align:start position:0%
look<c.colorCCCCCC> appeared
amor<c.colorE5E5E5> first comparing the salary
<c.colorCCCCCC>know<c.colorE5E5E5><00:00:38.609> this<00:00:38.760> will<00:00:39.019> not<00:00:39.280> be<00:00:39.339> an<00:00:39.449> exact
00:00:39.470 --> 00:00:39.870 align:start position:0%
<c.colorCCCCCC>amor<c.colorE5E5E5> first comparing the salary
<c.colorCCCCCC>know<c.colorE5E5E5> this will not be an exact
00:00:39.870 --> 00:00:41.290 align:start position:0%
<c.colorCCCCCC>amor<c.colorE5E5E5> first comparing the salary
<c.colorCCCCCC>know<c.colorE5E5E5> this will not be an exact
match<c.colorE5E5E5><00:00:40.019> will<00:00:40.379> be<c.colorCCCCCC><00:00:40.429> in<00:00:40.589> approx<00:00:41.019> a<c.colorE5E5E5><00:00:41.100> match
00:00:41.290 --> 00:00:41.690 align:start position:0%
<c.colorCCCCCC>know<c.colorE5E5E5> this will not be an exact
match<c.colorE5E5E5> will be<c.colorCCCCCC> in approx a<c.colorE5E5E5> match

00:00:41.690 --> 00:00:44.319 align:start position:0%
<c.colorCCCCCC>know<c.colorE5E5E5> this will not be an exact
match<c.colorE5E5E5> will be<c.colorCCCCCC> in approx a<c.colorE5E5E5> match
the<c.colorCCCCCC><00:00:42.039> salaries<00:00:42.539> in<c.colorE5E5E5><00:00:42.659> cell<00:00:42.920> b2<c.colorCCCCCC><00:00:43.920> comma
00:00:44.319 --> 00:00:44.719 align:start position:0%
match<c.colorE5E5E5> will be<c.colorCCCCCC> in approx a<c.colorE5E5E5> match
the<c.colorCCCCCC> salaries in<c.colorE5E5E5> cell b2<c.colorCCCCCC> comma

00:00:44.719 --> 00:00:45.979 align:start position:0%
match<c.colorE5E5E5> will be<c.colorCCCCCC> in approx a<c.colorE5E5E5> match
the<c.colorCCCCCC> salaries in<c.colorE5E5E5> cell b2<c.colorCCCCCC> comma
and<00:00:45.249> the<00:00:45.329> table<00:00:45.760> in<c.colorE5E5E5><00:00:45.870> question
00:00:45.979 --> 00:00:46.379 align:start position:0%
the<c.colorCCCCCC> salaries in<c.colorE5E5E5> cell b2<c.colorCCCCCC> comma
and the table in<c.colorE5E5E5> question

00:00:46.379 --> 00:00:47.830 align:start position:0%
the<c.colorCCCCCC> salaries in<c.colorE5E5E5> cell b2<c.colorCCCCCC> comma
and the table in<c.colorE5E5E5> question
extends<00:00:46.899> from<00:00:47.010> column<00:00:47.489> after<00:00:47.749> column
00:00:47.830 --> 00:00:48.230 align:start position:0%
and the table in<c.colorE5E5E5> question
extends from column after column
00:00:48.230 --> 00:00:48.490 align:start position:0%
and the table in<c.colorE5E5E5> question
extends from column after column
<c.colorCCCCCC>them
00:00:48.490 --> 00:00:48.890 align:start position:0%
<c.colorE5E5E5>extends from column after column
<c.colorCCCCCC>them

00:00:48.890 --> 00:00:50.499 align:start position:0%
<c.colorE5E5E5>extends from column after column
<c.colorCCCCCC>them
and<00:00:49.739> once<00:00:49.940> again<00:00:49.989> as<00:00:50.350> in<00:00:50.499> previous
00:00:50.499 --> 00:00:50.719 align:start position:0%
<c.colorCCCCCC>them
and once again as in previous
00:00:50.719 --> 00:00:52.489 align:start position:0%
<c.colorCCCCCC>them
and once again as in previous
examples<00:00:51.679> if<c.colorE5E5E5><00:00:52.129> there's<00:00:52.309> no<c.colorCCCCCC><00:00:52.489> other
00:00:52.489 --> 00:00:52.690 align:start position:0%
and once again as in previous
examples if<c.colorE5E5E5> there's no<c.colorCCCCCC> other

00:00:52.690 --> 00:00:54.010 align:start position:0%
and once again as in previous
examples if<c.colorE5E5E5> there's no<c.colorCCCCCC> other
data<c.colorE5E5E5><00:00:53.050> in<00:00:53.179> the<00:00:53.289> columns<00:00:53.920> it's<c.colorCCCCCC><00:00:54.010> going
00:00:54.010 --> 00:00:54.230 align:start position:0%
examples if<c.colorE5E5E5> there's no<c.colorCCCCCC> other
data<c.colorE5E5E5> in the columns it's<c.colorCCCCCC> going

00:00:54.230 --> 00:00:55.499 align:start position:0%
examples if<c.colorE5E5E5> there's no<c.colorCCCCCC> other
data<c.colorE5E5E5> in the columns it's<c.colorCCCCCC> going
to<00:00:54.309> be<00:00:54.379> simpler<00:00:54.920> to<00:00:55.059> use<00:00:55.499> the
00:00:55.499 --> 00:00:55.859 align:start position:0%
<c.colorCCCCCC>data<c.colorE5E5E5> in the columns it's<c.colorCCCCCC> going
to be simpler to use the
00:00:55.859 --> 00:00:57.550 align:start position:0%
<c.colorCCCCCC>data<c.colorE5E5E5> in the columns it's<c.colorCCCCCC> going
to be simpler to use the
column<00:00:56.280> references<00:00:57.069> in<00:00:57.550> their
00:00:57.550 --> 00:00:57.729 align:start position:0%
to be simpler to use the
column references in their
00:00:57.729 --> 00:00:59.749 align:start position:0%
to be simpler to use the
column references in their
entirety<00:00:58.519> it's<00:00:59.219> a<00:00:59.289> simple
00:00:59.749 --> 00:01:00.149 align:start position:0%
column references in their
entirety it's a simple
00:01:00.149 --> 00:01:02.069 align:start position:0%
column references in their
entirety it's a simple
display<c.colorE5E5E5><00:01:01.069> easy<00:01:01.469> to<00:01:01.569> read<c.colorE5E5E5><00:01:01.969> you<c.colorCCCCCC><00:01:02.069> don't
00:01:02.069 --> 00:01:02.210 align:start position:0%
entirety it's a simple
display<c.colorE5E5E5> easy to read<c.colorE5E5E5> you<c.colorCCCCCC> don't

00:01:02.210 --> 00:01:02.789 align:start position:0%
entirety it's a simple
display<c.colorE5E5E5> easy to read<c.colorE5E5E5> you<c.colorCCCCCC> don't
have<00:01:02.300> to<00:01:02.370> worry<c.colorE5E5E5><00:01:02.539> about<c.colorCCCCCC><00:01:02.789> absolute
00:01:02.789 --> 00:01:03.179 align:start position:0%
display<c.colorE5E5E5> easy to read<c.colorE5E5E5> you<c.colorCCCCCC> don't
have to worry<c.colorE5E5E5> about<c.colorCCCCCC> absolute

00:01:03.179 --> 00:01:03.489 align:start position:0%
display<c.colorE5E5E5> easy to read<c.colorE5E5E5> you<c.colorCCCCCC> don't
have to worry<c.colorE5E5E5> about<c.colorCCCCCC> absolute
<c.colorE5E5E5>addresses
00:01:03.489 --> 00:01:03.889 align:start position:0%
have to worry<c.colorE5E5E5> about<c.colorCCCCCC> absolute
<c.colorE5E5E5>addresses

00:01:03.889 --> 00:01:06.170 align:start position:0%
have to worry<c.colorE5E5E5> about<c.colorCCCCCC> absolute
<c.colorE5E5E5>addresses
the<00:01:04.620> tricky<00:01:04.909> part<00:01:05.229> comes<00:01:05.510> in<00:01:05.940> to<00:01:06.170> the
00:01:06.170 --> 00:01:06.270 align:start position:0%
<c.colorE5E5E5>addresses
the tricky part comes in to the
00:01:06.270 --> 00:01:06.860 align:start position:0%
<c.colorE5E5E5>addresses
the tricky part comes in to the
idea<c.colorE5E5E5><00:01:06.790> of
00:01:06.860 --> 00:01:07.260 align:start position:0%
the tricky part comes in to the
idea<c.colorE5E5E5> of

00:01:07.260 --> 00:01:08.490 align:start position:0%
the tricky part comes in to the
idea<c.colorE5E5E5> of
which<00:01:07.470> column<c.colorCCCCCC><00:01:08.090> will<00:01:08.250> have<00:01:08.490> the
00:01:08.490 --> 00:01:08.610 align:start position:0%
idea<c.colorE5E5E5> of
which column<c.colorCCCCCC> will have the
00:01:08.610 --> 00:01:10.790 align:start position:0%
idea<c.colorE5E5E5> of
which column<c.colorCCCCCC> will have the
answers<00:01:09.369> as<00:01:10.350> we<00:01:10.490> look<00:01:10.649> at<00:01:10.719> a<00:01:10.790> person
00:01:10.790 --> 00:01:11.170 align:start position:0%
which column<c.colorCCCCCC> will have the
answers as we look at a person
00:01:11.170 --> 00:01:11.910 align:start position:0%
which column<c.colorCCCCCC> will have the
answers as we look at a person
with<c.colorE5E5E5><00:01:11.280> one<00:01:11.479> dependent
00:01:11.910 --> 00:01:12.310 align:start position:0%
answers as we look at a person
with<c.colorE5E5E5> one dependent

00:01:12.310 --> 00:01:13.569 align:start position:0%
answers as we look at a person
with<c.colorE5E5E5> one dependent
if<00:01:12.439> we<00:01:12.540> look<00:01:12.689> at<00:01:12.759> the<00:01:12.890> table<c.colorCCCCCC><00:01:13.560> it's
00:01:13.569 --> 00:01:13.969 align:start position:0%
with<c.colorE5E5E5> one dependent
if we look at the table<c.colorCCCCCC> it's

00:01:13.969 --> 00:01:15.069 align:start position:0%
with<c.colorE5E5E5> one dependent
if we look at the table<c.colorCCCCCC> it's
<c.colorE5E5E5>going<00:01:14.049> to<00:01:14.170> come<00:01:14.299> out<00:01:14.439> a<00:01:14.479> column<00:01:14.930> H
00:01:15.069 --> 00:01:15.469 align:start position:0%
if we look at the table<c.colorCCCCCC> it's
<c.colorE5E5E5>going to come out a column H
00:01:15.469 --> 00:01:17.890 align:start position:0%
if we look at the table<c.colorCCCCCC> it's
<c.colorE5E5E5>going to come out a column H
looking<00:01:16.450> into<00:01:16.710> the<00:01:16.840> next<00:01:17.280> record<00:01:17.890> in
00:01:17.890 --> 00:01:18.020 align:start position:0%
<c.colorE5E5E5>going to come out a column H
looking into the next record in
00:01:18.020 --> 00:01:18.690 align:start position:0%
<c.colorE5E5E5>going to come out a column H
looking into the next record in
row<c.colorCCCCCC><00:01:18.210> three
00:01:18.690 --> 00:01:19.090 align:start position:0%
looking into the next record in
row<c.colorCCCCCC> three

00:01:19.090 --> 00:01:21.079 align:start position:0%
looking into the next record in
row<c.colorCCCCCC> three
if<c.colorE5E5E5><00:01:19.689> you<00:01:19.850> got<c.colorCCCCCC><00:01:20.119> three<00:01:20.430> dependence<c.colorE5E5E5><00:01:21.079> the
00:01:21.079 --> 00:01:21.340 align:start position:0%
row<c.colorCCCCCC> three
if<c.colorE5E5E5> you got<c.colorCCCCCC> three dependence<c.colorE5E5E5> the

00:01:21.340 --> 00:01:22.450 align:start position:0%
row<c.colorCCCCCC> three
if<c.colorE5E5E5> you got<c.colorCCCCCC> three dependence<c.colorE5E5E5> the
<c.colorCCCCCC>answers<00:01:21.729> are<c.colorE5E5E5><00:01:21.829> going<00:01:22.020> to<00:01:22.090> come<c.colorE5E5E5><00:01:22.229> out<00:01:22.450> a
00:01:22.450 --> 00:01:22.500 align:start position:0%
if<c.colorE5E5E5> you got<c.colorCCCCCC> three dependence<c.colorE5E5E5> the
<c.colorCCCCCC>answers are<c.colorE5E5E5> going to come<c.colorE5E5E5> out a
00:01:22.500 --> 00:01:23.100 align:start position:0%
if<c.colorE5E5E5> you got<c.colorCCCCCC> three dependence<c.colorE5E5E5> the
<c.colorCCCCCC>answers are<c.colorE5E5E5> going to come<c.colorE5E5E5> out a
column<00:01:22.920> J
00:01:23.100 --> 00:01:23.500 align:start position:0%
<c.colorCCCCCC>answers are<c.colorE5E5E5> going to come<c.colorE5E5E5> out a
column J
00:01:23.500 --> 00:01:25.259 align:start position:0%
<c.colorCCCCCC>answers are<c.colorE5E5E5> going to come<c.colorE5E5E5> out a
column J
but<c.colorE5E5E5><00:01:24.409> we<00:01:24.689> need<00:01:24.890> to<00:01:24.960> be<00:01:25.030> thinking<00:01:25.100> here
00:01:25.259 --> 00:01:25.659 align:start position:0%
column J
but<c.colorE5E5E5> we need to be thinking here
00:01:25.659 --> 00:01:27.450 align:start position:0%
column J
but<c.colorE5E5E5> we need to be thinking here
<c.colorE5E5E5>is<00:01:25.939> which<00:01:26.119> column<00:01:26.729> number<c.colorCCCCCC><00:01:27.240> the<00:01:27.450> table
00:01:27.450 --> 00:01:27.840 align:start position:0%
but<c.colorE5E5E5> we need to be thinking here
<c.colorE5E5E5>is which column number<c.colorCCCCCC> the table
00:01:27.840 --> 00:01:28.200 align:start position:0%
but<c.colorE5E5E5> we need to be thinking here
<c.colorE5E5E5>is which column number<c.colorCCCCCC> the table
do<00:01:27.950> we<00:01:28.060> need
00:01:28.200 --> 00:01:28.600 align:start position:0%
<c.colorE5E5E5>is which column number<c.colorCCCCCC> the table
do we need
00:01:28.600 --> 00:01:30.259 align:start position:0%
<c.colorE5E5E5>is which column number<c.colorCCCCCC> the table
do we need
if<00:01:28.990> a<00:01:29.020> person<00:01:29.430> has<00:01:29.640> one<c.colorE5E5E5><00:01:29.950> dependent
00:01:30.259 --> 00:01:30.659 align:start position:0%
do we need
if a person has one<c.colorE5E5E5> dependent

00:01:30.659 --> 00:01:31.759 align:start position:0%
do we need
if a person has one<c.colorE5E5E5> dependent
<c.colorCCCCCC>the<00:01:31.070> column<00:01:31.570> H
00:01:31.759 --> 00:01:32.159 align:start position:0%
if a person has one<c.colorE5E5E5> dependent
<c.colorCCCCCC>the column H
00:01:32.159 --> 00:01:33.369 align:start position:0%
if a person has one<c.colorE5E5E5> dependent
<c.colorCCCCCC>the column H
<c.colorE5E5E5>entries<00:01:32.719> are<00:01:32.890> going<00:01:33.200> to<00:01:33.289> be<00:01:33.369> the
00:01:33.369 --> 00:01:33.500 align:start position:0%
<c.colorCCCCCC>the column H
<c.colorE5E5E5>entries are going to be the
00:01:33.500 --> 00:01:35.259 align:start position:0%
<c.colorCCCCCC>the column H
<c.colorE5E5E5>entries are going to be the
source<c.colorCCCCCC><00:01:33.759> of<c.colorE5E5E5><00:01:34.030> the<00:01:34.149> answer<c.colorCCCCCC><00:01:34.799> book<c.colorE5E5E5><00:01:35.259> which
00:01:35.259 --> 00:01:35.450 align:start position:0%
<c.colorE5E5E5>entries are going to be the
source<c.colorCCCCCC> of<c.colorE5E5E5> the answer<c.colorCCCCCC> book<c.colorE5E5E5> which

00:01:35.450 --> 00:01:36.749 align:start position:0%
<c.colorE5E5E5>entries are going to be the
source<c.colorCCCCCC> of<c.colorE5E5E5> the answer<c.colorCCCCCC> book<c.colorE5E5E5> which
column<00:01:35.899> is<00:01:36.009> that<c.colorCCCCCC><00:01:36.149> in<c.colorE5E5E5><00:01:36.399> the<00:01:36.530> table
00:01:36.749 --> 00:01:37.149 align:start position:0%
source<c.colorCCCCCC> of<c.colorE5E5E5> the answer<c.colorCCCCCC> book<c.colorE5E5E5> which
column is that<c.colorCCCCCC> in<c.colorE5E5E5> the table
00:01:37.149 --> 00:01:39.530 align:start position:0%
source<c.colorCCCCCC> of<c.colorE5E5E5> the answer<c.colorCCCCCC> book<c.colorE5E5E5> which
column is that<c.colorCCCCCC> in<c.colorE5E5E5> the table
if<00:01:37.920> the<c.colorE5E5E5><00:01:38.020> table<00:01:38.399> begins<00:01:38.799> in<00:01:38.920> column<c.colorCCCCCC><00:01:39.340> F
00:01:39.530 --> 00:01:39.930 align:start position:0%
column is that<c.colorCCCCCC> in<c.colorE5E5E5> the table
if the<c.colorE5E5E5> table begins in column<c.colorCCCCCC> F

00:01:39.930 --> 00:01:40.850 align:start position:0%
column is that<c.colorCCCCCC> in<c.colorE5E5E5> the table
if the<c.colorE5E5E5> table begins in column<c.colorCCCCCC> F
in<00:01:40.439> column<00:01:40.850> H
00:01:40.850 --> 00:01:41.250 align:start position:0%
if the<c.colorE5E5E5> table begins in column<c.colorCCCCCC> F
in column H
00:01:41.250 --> 00:01:43.750 align:start position:0%
if the<c.colorE5E5E5> table begins in column<c.colorCCCCCC> F
in column H
is<00:01:41.369> the<00:01:41.560> third<00:01:42.039> column<00:01:42.759> so<c.colorCCCCCC><00:01:43.750> if
00:01:43.750 --> 00:01:44.060 align:start position:0%
<c.colorCCCCCC>in column H
is the third column so<c.colorCCCCCC> if

00:01:44.060 --> 00:01:45.420 align:start position:0%
<c.colorCCCCCC>in column H
is the third column so<c.colorCCCCCC> if
someone<00:01:44.390> has<00:01:44.609> one<00:01:44.939> dependent
00:01:45.420 --> 00:01:45.820 align:start position:0%
is the third column so<c.colorCCCCCC> if
someone has one dependent
00:01:45.820 --> 00:01:48.000 align:start position:0%
is the third column so<c.colorCCCCCC> if
someone has one dependent
then<00:01:47.229> we<c.colorCCCCCC><00:01:47.380> need<00:01:47.570> to<00:01:47.640> get<00:01:47.759> data<c.colorE5E5E5><00:01:48.000> from
00:01:48.000 --> 00:01:48.250 align:start position:0%
someone has one dependent
then we<c.colorCCCCCC> need to get data<c.colorE5E5E5> from

00:01:48.250 --> 00:01:49.109 align:start position:0%
someone has one dependent
then we<c.colorCCCCCC> need to get data<c.colorE5E5E5> from
the<c.colorE5E5E5><00:01:48.460> third<00:01:48.880> column
00:01:49.109 --> 00:01:49.509 align:start position:0%
then we<c.colorCCCCCC> need to get data<c.colorE5E5E5> from
the<c.colorE5E5E5> third column
00:01:49.509 --> 00:01:50.960 align:start position:0%
then we<c.colorCCCCCC> need to get data<c.colorE5E5E5> from
the<c.colorE5E5E5> third column
<c.colorE5E5E5>about<00:01:49.969> the<00:01:50.079> next<00:01:50.359> person<c.colorE5E5E5><00:01:50.600> has<c.colorCCCCCC><00:01:50.960> three
00:01:50.960 --> 00:01:51.310 align:start position:0%
the<c.colorE5E5E5> third column
<c.colorE5E5E5>about the next person<c.colorE5E5E5> has<c.colorCCCCCC> three

00:01:51.310 --> 00:01:53.340 align:start position:0%
the<c.colorE5E5E5> third column
<c.colorE5E5E5>about the next person<c.colorE5E5E5> has<c.colorCCCCCC> three
<c.colorE5E5E5>dependence<00:01:52.189> which<c.colorCCCCCC><00:01:52.789> column<00:01:53.240> at<c.colorE5E5E5><00:01:53.340> the
00:01:53.340 --> 00:01:53.420 align:start position:0%
<c.colorE5E5E5>about the next person<c.colorE5E5E5> has<c.colorCCCCCC> three
<c.colorE5E5E5>dependence which<c.colorCCCCCC> column at<c.colorE5E5E5> the

00:01:53.420 --> 00:01:54.910 align:start position:0%
<c.colorE5E5E5>about the next person<c.colorE5E5E5> has<c.colorCCCCCC> three
<c.colorE5E5E5>dependence which<c.colorCCCCCC> column at<c.colorE5E5E5> the
<c.colorCCCCCC>table<00:01:53.770> are<00:01:53.859> using<00:01:54.320> column<00:01:54.789> J
00:01:54.910 --> 00:01:55.310 align:start position:0%
<c.colorE5E5E5>dependence which<c.colorCCCCCC> column at<c.colorE5E5E5> the
<c.colorCCCCCC>table are using column J
00:01:55.310 --> 00:01:57.189 align:start position:0%
<c.colorE5E5E5>dependence which<c.colorCCCCCC> column at<c.colorE5E5E5> the
<c.colorCCCCCC>table are using column J
which<00:01:55.840> number<00:01:56.210> column<c.colorE5E5E5><00:01:56.539> is<00:01:56.770> that<00:01:57.189> as
00:01:57.189 --> 00:01:57.450 align:start position:0%
<c.colorCCCCCC>table are using column J
which number column<c.colorE5E5E5> is that as
00:01:57.450 --> 00:01:58.350 align:start position:0%
<c.colorCCCCCC>table are using column J
which number column<c.colorE5E5E5> is that as
we<00:01:57.619> read<00:01:57.880> from<00:01:58.109> the<c.colorE5E5E5><00:01:58.200> left
00:01:58.350 --> 00:01:58.750 align:start position:0%
which number column<c.colorE5E5E5> is that as
we read from the<c.colorE5E5E5> left

00:01:58.750 --> 00:02:01.819 align:start position:0%
which number column<c.colorE5E5E5> is that as
we read from the<c.colorE5E5E5> left
<c.colorCCCCCC>1,2,3,4,5<00:02:00.740> so<00:02:01.060> it<c.colorCCCCCC><00:02:01.329> looks<00:02:01.640> as<00:02:01.729> if
00:02:01.819 --> 00:02:02.219 align:start position:0%
we read from the<c.colorE5E5E5> left
<c.colorCCCCCC>1,2,3,4,5 so it<c.colorCCCCCC> looks as if
00:02:02.219 --> 00:02:04.779 align:start position:0%
we read from the<c.colorE5E5E5> left
<c.colorCCCCCC>1,2,3,4,5 so it<c.colorCCCCCC> looks as if
<c.colorE5E5E5>every<c.colorCCCCCC><00:02:02.719> time<00:02:03.009> we<00:02:03.170> need<00:02:03.350> a<00:02:03.390> column<c.colorCCCCCC><00:02:04.159> its
00:02:04.779 --> 00:02:05.179 align:start position:0%
<c.colorCCCCCC>1,2,3,4,5 so it<c.colorCCCCCC> looks as if
<c.colorE5E5E5>every<c.colorCCCCCC> time we need a column<c.colorCCCCCC> its

00:02:05.179 --> 00:02:06.259 align:start position:0%
<c.colorCCCCCC>1,2,3,4,5 so it<c.colorCCCCCC> looks as if
<c.colorE5E5E5>every<c.colorCCCCCC> time we need a column<c.colorCCCCCC> its
to<00:02:05.409> greater<00:02:05.960> than<00:02:06.170> the<00:02:06.259> actual
00:02:06.259 --> 00:02:06.530 align:start position:0%
<c.colorE5E5E5>every<c.colorCCCCCC> time we need a column<c.colorCCCCCC> its
to greater than the actual
00:02:06.530 --> 00:02:07.389 align:start position:0%
<c.colorE5E5E5>every<c.colorCCCCCC> time we need a column<c.colorCCCCCC> its
to greater than the actual
number<c.colorE5E5E5><00:02:06.950> dependence
00:02:07.389 --> 00:02:07.789 align:start position:0%
to greater than the actual
number<c.colorE5E5E5> dependence

00:02:07.789 --> 00:02:09.810 align:start position:0%
to greater than the actual
number<c.colorE5E5E5> dependence
if<c.colorCCCCCC><00:02:08.429> it's<00:02:08.600> one<00:02:08.899> dependent<00:02:09.610> we<00:02:09.810> get
00:02:09.810 --> 00:02:10.009 align:start position:0%
number<c.colorE5E5E5> dependence
if<c.colorCCCCCC> it's one dependent we get
00:02:10.009 --> 00:02:11.100 align:start position:0%
number<c.colorE5E5E5> dependence
if<c.colorCCCCCC> it's one dependent we get
data<00:02:10.310> from<00:02:10.350> the<00:02:10.560> third<00:02:10.890> column
00:02:11.100 --> 00:02:11.500 align:start position:0%
if<c.colorCCCCCC> it's one dependent we get
data from the third column
00:02:11.500 --> 00:02:13.159 align:start position:0%
if<c.colorCCCCCC> it's one dependent we get
data from the third column
<c.colorCCCCCC>if<00:02:11.920> it's<00:02:12.080> three<c.colorE5E5E5><00:02:12.400> dependence<c.colorCCCCCC><00:02:12.959> we<00:02:13.159> get
00:02:13.159 --> 00:02:13.379 align:start position:0%
data from the third column
<c.colorCCCCCC>if it's three<c.colorE5E5E5> dependence<c.colorCCCCCC> we get
00:02:13.379 --> 00:02:14.280 align:start position:0%
data from the third column
<c.colorCCCCCC>if it's three<c.colorE5E5E5> dependence<c.colorCCCCCC> we get
data<00:02:13.750> from<00:02:13.819> the
00:02:14.280 --> 00:02:14.680 align:start position:0%
<c.colorCCCCCC>if it's three<c.colorE5E5E5> dependence<c.colorCCCCCC> we get
data from the
00:02:14.680 --> 00:02:16.329 align:start position:0%
<c.colorCCCCCC>if it's three<c.colorE5E5E5> dependence<c.colorCCCCCC> we get
data from the
<c.colorCCCCCC>fifth<c.colorE5E5E5><00:02:15.000> column<00:02:15.609> that's<c.colorCCCCCC><00:02:16.019> all<c.colorE5E5E5><00:02:16.200> we<00:02:16.329> need
00:02:16.329 --> 00:02:16.439 align:start position:0%
data from the
<c.colorCCCCCC>fifth<c.colorE5E5E5> column that's<c.colorCCCCCC> all<c.colorE5E5E5> we need

00:02:16.439 --> 00:02:17.680 align:start position:0%
data from the
<c.colorCCCCCC>fifth<c.colorE5E5E5> column that's<c.colorCCCCCC> all<c.colorE5E5E5> we need
to<00:02:16.590> do<c.colorE5E5E5><00:02:16.629> here<00:02:17.099> to<00:02:17.359> pick<00:02:17.599> up<00:02:17.680> the
00:02:17.680 --> 00:02:17.870 align:start position:0%
<c.colorCCCCCC>fifth<c.colorE5E5E5> column that's<c.colorCCCCCC> all<c.colorE5E5E5> we need
to do<c.colorE5E5E5> here to pick up the
00:02:17.870 --> 00:02:18.619 align:start position:0%
<c.colorCCCCCC>fifth<c.colorE5E5E5> column that's<c.colorCCCCCC> all<c.colorE5E5E5> we need
to do<c.colorE5E5E5> here to pick up the
appropriate<00:02:18.409> column
00:02:18.619 --> 00:02:19.019 align:start position:0%
<c.colorE5E5E5>to do<c.colorE5E5E5> here to pick up the
appropriate column
00:02:19.019 --> 00:02:21.199 align:start position:0%
<c.colorE5E5E5>to do<c.colorE5E5E5> here to pick up the
appropriate column
is<00:02:19.650> to<00:02:19.780> take<00:02:20.060> the<c.colorCCCCCC><00:02:20.239> dependent<00:02:21.030> entry
00:02:21.199 --> 00:02:21.599 align:start position:0%
appropriate column
is to take the<c.colorCCCCCC> dependent entry
00:02:21.599 --> 00:02:21.759 align:start position:0%
appropriate column
is to take the<c.colorCCCCCC> dependent entry
this<c.colorE5E5E5><00:02:21.750> case
00:02:21.759 --> 00:02:22.159 align:start position:0%
is to take the<c.colorCCCCCC> dependent entry
this<c.colorE5E5E5> case

00:02:22.159 --> 00:02:25.129 align:start position:0%
is to take the<c.colorCCCCCC> dependent entry
this<c.colorE5E5E5> case
<c.colorCCCCCC>c2<c.colorE5E5E5><00:02:22.920> plus<c.colorCCCCCC><00:02:23.629> two<00:02:24.219> and<00:02:24.989> in<00:02:25.069> all<c.colorCCCCCC><00:02:25.129> other
00:02:25.129 --> 00:02:25.340 align:start position:0%
this<c.colorE5E5E5> case
<c.colorCCCCCC>c2<c.colorE5E5E5> plus<c.colorCCCCCC> two and in all<c.colorCCCCCC> other

00:02:25.340 --> 00:02:26.759 align:start position:0%
this<c.colorE5E5E5> case
<c.colorCCCCCC>c2<c.colorE5E5E5> plus<c.colorCCCCCC> two and in all<c.colorCCCCCC> other
cases<c.colorE5E5E5><00:02:25.640> as<00:02:26.049> we<c.colorE5E5E5><00:02:26.189> look<00:02:26.379> downward
00:02:26.759 --> 00:02:27.159 align:start position:0%
<c.colorCCCCCC>c2<c.colorE5E5E5> plus<c.colorCCCCCC> two and in all<c.colorCCCCCC> other
cases<c.colorE5E5E5> as we<c.colorE5E5E5> look downward
00:02:27.159 --> 00:02:28.530 align:start position:0%
<c.colorCCCCCC>c2<c.colorE5E5E5> plus<c.colorCCCCCC> two and in all<c.colorCCCCCC> other
cases<c.colorE5E5E5> as we<c.colorE5E5E5> look downward
<c.colorCCCCCC>and<00:02:27.519> start<00:02:27.760> comparing<00:02:28.129> this<00:02:28.489> list
00:02:28.530 --> 00:02:28.930 align:start position:0%
cases<c.colorE5E5E5> as we<c.colorE5E5E5> look downward
<c.colorCCCCCC>and start comparing this list
00:02:28.930 --> 00:02:29.880 align:start position:0%
cases<c.colorE5E5E5> as we<c.colorE5E5E5> look downward
<c.colorCCCCCC>and start comparing this list
with<c.colorCCCCCC><00:02:29.090> a<c.colorE5E5E5><00:02:29.159> number<00:02:29.400> dependence
00:02:29.880 --> 00:02:30.280 align:start position:0%
<c.colorCCCCCC>and start comparing this list
with<c.colorCCCCCC> a<c.colorE5E5E5> number dependence

00:02:30.280 --> 00:02:32.590 align:start position:0%
<c.colorCCCCCC>and start comparing this list
with<c.colorCCCCCC> a<c.colorE5E5E5> number dependence
the<00:02:30.650> column<00:02:31.129> we<00:02:31.250> need<c.colorE5E5E5><00:02:31.760> is<00:02:31.969> always<00:02:32.590> to
00:02:32.590 --> 00:02:32.829 align:start position:0%
with<c.colorCCCCCC> a<c.colorE5E5E5> number dependence
the column we need<c.colorE5E5E5> is always to
00:02:32.829 --> 00:02:33.130 align:start position:0%
with<c.colorCCCCCC> a<c.colorE5E5E5> number dependence
the column we need<c.colorE5E5E5> is always to
greater
00:02:33.130 --> 00:02:33.530 align:start position:0%
the column we need<c.colorE5E5E5> is always to
greater
00:02:33.530 --> 00:02:35.039 align:start position:0%
the column we need<c.colorE5E5E5> is always to
greater
<c.colorCCCCCC>the<00:02:33.889> actual<00:02:34.319> number<00:02:34.599> dependence
00:02:35.039 --> 00:02:35.439 align:start position:0%
greater
<c.colorCCCCCC>the actual number dependence
00:02:35.439 --> 00:02:36.670 align:start position:0%
greater
<c.colorCCCCCC>the actual number dependence
<c.colorCCCCCC>this<00:02:35.769> office<c.colorE5E5E5><00:02:36.120> is<c.colorCCCCCC><00:02:36.200> all<00:02:36.379> going<c.colorE5E5E5><00:02:36.560> to<00:02:36.670> be
00:02:36.670 --> 00:02:36.739 align:start position:0%
<c.colorCCCCCC>the actual number dependence
<c.colorCCCCCC>this office<c.colorE5E5E5> is<c.colorCCCCCC> all going<c.colorE5E5E5> to be
00:02:36.739 --> 00:02:37.399 align:start position:0%
<c.colorCCCCCC>the actual number dependence
<c.colorCCCCCC>this office<c.colorE5E5E5> is<c.colorCCCCCC> all going<c.colorE5E5E5> to be
working<00:02:36.950> properly
00:02:37.399 --> 00:02:37.799 align:start position:0%
<c.colorCCCCCC>this office<c.colorE5E5E5> is<c.colorCCCCCC> all going<c.colorE5E5E5> to be
working properly
00:02:37.799 --> 00:02:39.850 align:start position:0%
<c.colorCCCCCC>this office<c.colorE5E5E5> is<c.colorCCCCCC> all going<c.colorE5E5E5> to be
working properly
as<00:02:38.209> we<00:02:38.340> look<00:02:38.489> at<c.colorE5E5E5><00:02:38.560> this<c.colorCCCCCC><00:02:38.709> 46,000<c.colorE5E5E5><00:02:39.849> here
00:02:39.850 --> 00:02:40.250 align:start position:0%
working properly
as we look at<c.colorE5E5E5> this<c.colorCCCCCC> 46,000<c.colorE5E5E5> here

00:02:40.250 --> 00:02:42.059 align:start position:0%
working properly
as we look at<c.colorE5E5E5> this<c.colorCCCCCC> 46,000<c.colorE5E5E5> here
<c.colorCCCCCC>would<c.colorE5E5E5><00:02:40.769> be<c.colorCCCCCC><00:02:40.889> looking<00:02:41.260> in<c.colorE5E5E5><00:02:41.409> row<c.colorCCCCCC><00:02:41.689> 9<00:02:41.950> for
00:02:42.059 --> 00:02:42.459 align:start position:0%
as we look at<c.colorE5E5E5> this<c.colorCCCCCC> 46,000<c.colorE5E5E5> here
<c.colorCCCCCC>would<c.colorE5E5E5> be<c.colorCCCCCC> looking in<c.colorE5E5E5> row<c.colorCCCCCC> 9 for

00:02:42.459 --> 00:02:42.949 align:start position:0%
as we look at<c.colorE5E5E5> this<c.colorCCCCCC> 46,000<c.colorE5E5E5> here
<c.colorCCCCCC>would<c.colorE5E5E5> be<c.colorCCCCCC> looking in<c.colorE5E5E5> row<c.colorCCCCCC> 9 for
<c.colorE5E5E5>our<00:02:42.629> answers
00:02:42.949 --> 00:02:43.349 align:start position:0%
<c.colorCCCCCC>would<c.colorE5E5E5> be<c.colorCCCCCC> looking in<c.colorE5E5E5> row<c.colorCCCCCC> 9 for
<c.colorE5E5E5>our answers
00:02:43.349 --> 00:02:45.010 align:start position:0%
<c.colorCCCCCC>would<c.colorE5E5E5> be<c.colorCCCCCC> looking in<c.colorE5E5E5> row<c.colorCCCCCC> 9 for
<c.colorE5E5E5>our answers
<c.colorCCCCCC>and<00:02:44.209> because<00:02:44.540> this<00:02:44.859> is<00:02:45.010> one
00:02:45.010 --> 00:02:45.239 align:start position:0%
<c.colorE5E5E5>our answers
<c.colorCCCCCC>and because this is one
00:02:45.239 --> 00:02:46.159 align:start position:0%
<c.colorE5E5E5>our answers
<c.colorCCCCCC>and because this is one
dependent<00:02:45.689> we<00:02:45.829> should<00:02:46.079> be<00:02:46.159> getting
00:02:46.159 --> 00:02:46.400 align:start position:0%
<c.colorCCCCCC>and because this is one
dependent we should be getting
00:02:46.400 --> 00:02:47.800 align:start position:0%
<c.colorCCCCCC>and because this is one
dependent we should be getting
<c.colorCCCCCC>ten<00:02:46.769> point<00:02:47.180> four<00:02:47.439> percent<c.colorCCCCCC><00:02:47.510> here
00:02:47.800 --> 00:02:48.200 align:start position:0%
dependent we should be getting
<c.colorCCCCCC>ten point four percent<c.colorCCCCCC> here

00:02:48.200 --> 00:02:49.430 align:start position:0%
dependent we should be getting
<c.colorCCCCCC>ten point four percent<c.colorCCCCCC> here
and<00:02:48.709> that's<00:02:48.889> exactly<c.colorE5E5E5><00:02:48.980> what<c.colorCCCCCC><00:02:49.430> we're
00:02:49.430 --> 00:02:49.519 align:start position:0%
<c.colorCCCCCC>ten point four percent<c.colorCCCCCC> here
and that's exactly<c.colorE5E5E5> what<c.colorCCCCCC> we're

00:02:49.519 --> 00:02:51.169 align:start position:0%
<c.colorCCCCCC>ten point four percent<c.colorCCCCCC> here
and that's exactly<c.colorE5E5E5> what<c.colorCCCCCC> we're
<c.colorE5E5E5>getting<c.colorCCCCCC><00:02:49.989> looking<00:02:50.790> ahead<00:02:50.989> into<00:02:51.169> the
00:02:51.169 --> 00:02:51.280 align:start position:0%
and that's exactly<c.colorE5E5E5> what<c.colorCCCCCC> we're
<c.colorE5E5E5>getting<c.colorCCCCCC> looking ahead into the
00:02:51.280 --> 00:02:53.169 align:start position:0%
and that's exactly<c.colorE5E5E5> what<c.colorCCCCCC> we're
<c.colorE5E5E5>getting<c.colorCCCCCC> looking ahead into the
next<00:02:51.500> entry<00:02:51.879> for<c.colorE5E5E5><00:02:52.040> 56,000
00:02:53.169 --> 00:02:53.569 align:start position:0%
<c.colorE5E5E5>getting<c.colorCCCCCC> looking ahead into the
next entry for<c.colorE5E5E5> 56,000

00:02:53.569 --> 00:02:55.689 align:start position:0%
<c.colorE5E5E5>getting<c.colorCCCCCC> looking ahead into the
next entry for<c.colorE5E5E5> 56,000
<c.colorCCCCCC>and<00:02:54.099> three<c.colorE5E5E5><00:02:54.400> dependence<c.colorCCCCCC><00:02:55.340> we<00:02:55.689> be
00:02:55.689 --> 00:02:55.819 align:start position:0%
next entry for<c.colorE5E5E5> 56,000
<c.colorCCCCCC>and three<c.colorE5E5E5> dependence<c.colorCCCCCC> we be

00:02:55.819 --> 00:02:56.809 align:start position:0%
next entry for<c.colorE5E5E5> 56,000
<c.colorCCCCCC>and three<c.colorE5E5E5> dependence<c.colorCCCCCC> we be
looking<c.colorCCCCCC><00:02:55.980> in<c.colorE5E5E5><00:02:56.260> row<00:02:56.470> 11
00:02:56.809 --> 00:02:57.209 align:start position:0%
<c.colorCCCCCC>and three<c.colorE5E5E5> dependence<c.colorCCCCCC> we be
looking<c.colorCCCCCC> in<c.colorE5E5E5> row 11

00:02:57.209 --> 00:02:59.970 align:start position:0%
<c.colorCCCCCC>and three<c.colorE5E5E5> dependence<c.colorCCCCCC> we be
looking<c.colorCCCCCC> in<c.colorE5E5E5> row 11
<c.colorCCCCCC>free<00:02:57.579> dependence<00:02:58.220> 8.7<c.colorCCCCCC><00:02:59.150> percent<00:02:59.780> so
00:02:59.970 --> 00:03:00.370 align:start position:0%
looking<c.colorCCCCCC> in<c.colorE5E5E5> row 11
<c.colorCCCCCC>free dependence 8.7<c.colorCCCCCC> percent so

00:03:00.370 --> 00:03:00.940 align:start position:0%
looking<c.colorCCCCCC> in<c.colorE5E5E5> row 11
<c.colorCCCCCC>free dependence 8.7<c.colorCCCCCC> percent so
we'll<00:03:00.549> double<00:03:00.870> click
00:03:00.940 --> 00:03:01.340 align:start position:0%
<c.colorCCCCCC>free dependence 8.7<c.colorCCCCCC> percent so
we'll double click

00:03:01.340 --> 00:03:02.409 align:start position:0%
<c.colorCCCCCC>free dependence 8.7<c.colorCCCCCC> percent so
we'll double click
<c.colorE5E5E5>and<00:03:01.659> sure<00:03:01.849> enough<c.colorCCCCCC><00:03:01.879> for<00:03:02.180> getting<00:03:02.409> that
00:03:02.409 --> 00:03:02.540 align:start position:0%
<c.colorCCCCCC>we'll double click
<c.colorE5E5E5>and sure enough<c.colorCCCCCC> for getting that
00:03:02.540 --> 00:03:04.430 align:start position:0%
<c.colorCCCCCC>we'll double click
<c.colorE5E5E5>and sure enough<c.colorCCCCCC> for getting that
answer<00:03:03.090> as<00:03:03.150> well<00:03:03.590> so<00:03:04.099> you<00:03:04.180> can<00:03:04.269> see<00:03:04.430> in
00:03:04.430 --> 00:03:04.519 align:start position:0%
<c.colorE5E5E5>and sure enough<c.colorCCCCCC> for getting that
answer as well so you can see in
00:03:04.519 --> 00:03:05.400 align:start position:0%
<c.colorE5E5E5>and sure enough<c.colorCCCCCC> for getting that
answer as well so you can see in
these<00:03:04.669> examples<00:03:04.769> if<c.colorCCCCCC><00:03:05.299> you're<00:03:05.400> using
00:03:05.400 --> 00:03:05.680 align:start position:0%
answer as well so you can see in
these examples if<c.colorCCCCCC> you're using
00:03:05.680 --> 00:03:07.239 align:start position:0%
answer as well so you can see in
these examples if<c.colorCCCCCC> you're using
large<00:03:06.150> tables<c.colorE5E5E5><00:03:06.639> you<00:03:06.730> sometimes<00:03:07.239> need
00:03:07.239 --> 00:03:07.290 align:start position:0%
these examples if<c.colorCCCCCC> you're using
large tables<c.colorE5E5E5> you sometimes need
00:03:07.290 --> 00:03:08.870 align:start position:0%
these examples if<c.colorCCCCCC> you're using
large tables<c.colorE5E5E5> you sometimes need
<c.colorCCCCCC>additional<00:03:07.959> matters<c.colorE5E5E5><00:03:08.540> to<00:03:08.669> come<00:03:08.870> up
00:03:08.870 --> 00:03:09.010 align:start position:0%
large tables<c.colorE5E5E5> you sometimes need
<c.colorCCCCCC>additional matters<c.colorE5E5E5> to come up
00:03:09.010 --> 00:03:09.390 align:start position:0%
large tables<c.colorE5E5E5> you sometimes need
<c.colorCCCCCC>additional matters<c.colorE5E5E5> to come up
with<00:03:09.139> the<00:03:09.219> answers
00:03:09.390 --> 00:03:09.790 align:start position:0%
<c.colorCCCCCC>additional matters<c.colorE5E5E5> to come up
with the answers
00:03:09.790 --> 00:03:11.030 align:start position:0%
<c.colorCCCCCC>additional matters<c.colorE5E5E5> to come up
with the answers
<c.colorE5E5E5>and<00:03:10.439> depending<00:03:10.730> upon<00:03:10.819> the<00:03:11.030> nature
00:03:11.030 --> 00:03:11.150 align:start position:0%
with the answers
<c.colorE5E5E5>and depending upon the nature
00:03:11.150 --> 00:03:12.629 align:start position:0%
with the answers
<c.colorE5E5E5>and depending upon the nature
the<c.colorCCCCCC><00:03:11.489> data<c.colorE5E5E5><00:03:11.780> sometimes<00:03:12.340> these<c.colorE5E5E5><00:03:12.489> will<00:03:12.629> be
00:03:12.629 --> 00:03:12.680 align:start position:0%
<c.colorE5E5E5>and depending upon the nature
the<c.colorCCCCCC> data<c.colorE5E5E5> sometimes these<c.colorE5E5E5> will be
00:03:12.680 --> 00:03:14.080 align:start position:0%
<c.colorE5E5E5>and depending upon the nature
the<c.colorCCCCCC> data<c.colorE5E5E5> sometimes these<c.colorE5E5E5> will be
<c.colorE5E5E5>exact<c.colorCCCCCC><00:03:13.159> matches<c.colorE5E5E5><00:03:13.569> sometimes<c.colorCCCCCC><00:03:14.049> not
00:03:14.080 --> 00:03:14.480 align:start position:0%
the<c.colorCCCCCC> data<c.colorE5E5E5> sometimes these<c.colorE5E5E5> will be
<c.colorE5E5E5>exact<c.colorCCCCCC> matches<c.colorE5E5E5> sometimes<c.colorCCCCCC> not

00:03:14.480 --> 00:03:16.359 align:start position:0%
the<c.colorCCCCCC> data<c.colorE5E5E5> sometimes these<c.colorE5E5E5> will be
<c.colorE5E5E5>exact<c.colorCCCCCC> matches<c.colorE5E5E5> sometimes<c.colorCCCCCC> not
but<00:03:15.040> in<00:03:15.109> this<00:03:15.189> case<00:03:15.419> here<00:03:16.090> want<00:03:16.359> to
00:03:16.359 --> 00:03:16.419 align:start position:0%
<c.colorE5E5E5>exact<c.colorCCCCCC> matches<c.colorE5E5E5> sometimes<c.colorCCCCCC> not
but in this case here want to
00:03:16.419 --> 00:03:18.099 align:start position:0%
<c.colorE5E5E5>exact<c.colorCCCCCC> matches<c.colorE5E5E5> sometimes<c.colorCCCCCC> not
but in this case here want to
point<00:03:16.650> out<00:03:16.709> the<00:03:16.919> unusual<00:03:17.549> aspect<c.colorE5E5E5><00:03:18.099> a
00:03:18.099 --> 00:03:18.169 align:start position:0%
but in this case here want to
point out the unusual aspect<c.colorE5E5E5> a

00:03:18.169 --> 00:03:19.399 align:start position:0%
but in this case here want to
point out the unusual aspect<c.colorE5E5E5> a
particularly<00:03:18.680> large<00:03:18.940> table
00:03:19.399 --> 00:03:19.799 align:start position:0%
point out the unusual aspect<c.colorE5E5E5> a
particularly large table
00:03:19.799 --> 00:03:21.919 align:start position:0%
point out the unusual aspect<c.colorE5E5E5> a
particularly large table
and<00:03:20.199> also<00:03:20.370> perhaps<00:03:21.120> an<00:03:21.180> unusual<00:03:21.919> way
00:03:21.919 --> 00:03:22.099 align:start position:0%
particularly large table
and also perhaps an unusual way
00:03:22.099 --> 00:03:23.120 align:start position:0%
particularly large table
and also perhaps an unusual way
of<00:03:22.359> coming<00:03:22.720> up<00:03:22.859> with<00:03:23.120> the
00:03:23.120 --> 00:03:23.220 align:start position:0%
and also perhaps an unusual way
of coming up with the
00:03:23.220 --> 00:03:23.479 align:start position:0%
and also perhaps an unusual way
of coming up with the
appropriate
00:03:23.479 --> 00:03:23.879 align:start position:0%
of coming up with the
appropriate
00:03:23.879 --> 00:03:29.879 align:start position:0%
of coming up with the
appropriate
column<00:03:24.560> reference<00:03:25.329> for<c.colorCCCCCC><00:03:25.739> the<00:03:25.989> lookup

This is what served by YouTube itself. If you are not satisfied with their vtt download ttml and convert to str with --convert-subs.

how do I download ttml?

--sub-format


Stripe instructions not working.

Type: breaking
Describe the bug
In a new setup we cannot add Stripe according to the instructions mentioned.
Step 2 mentions you have to go to reaction classic running at localhost:3000. but this just returns "Cannot GET /"
To Reproduce
Steps to reproduce the behavior:

New installation of opencommerce
Go to localhost:3000
See error

Expected behavior
localhost:3000 to show the login page so we can complete the stripe process
OR
update the documentation.
(whichever is applicable)
Desktop (please complete the following information):

OS: Fedora 34
Browser Firefox
Version latest

the readme
Also worth noticing that in the admin panel localhost:4080 you can press enable in the payment methods section on "stripe card" but nothing happens.

So I see there is an issue open with Stripe that you are handling, great!
When the Strong Customer Authentication is in place, could you also update the readme so I (and every one after me) can implement it?
Thank you.

Hi @meiremans , the doc needs correction. You should find admin (step 2) at http://localhost:4080 and then proceed with enabling Payments and Shipping.

:tada: This issue has been resolved in version 5.0.1 :tada:
The release is available on GitHub release
Your semantic-release bot :package::rocket:


[FR] Filter commands by source

When looking for commands, it'll be great to be able to filter them by source, that'll be a time-saver:

It supports showing by default/user/extension source: @source:user. Feature request to show which extension contributed the keybinding: #121673

@usernamehw Thanks, but this design is quite hard to find, and typing @source doesn't trigger suggestions.


ARTEMIS-1654 - fix bridge reconnect logic

Make sure that if a bridge disconnects and there is no record in the topology that it uses the original bridge connector to reconnect
https://issues.apache.org/jira/browse/ARTEMIS-1654

@clebertsuconic  could you check this


Add cirun.io GPU runners.

This is a trial run of using cirun.io self-hosted runners to run tests on a real GPU.

Pull Request Test Coverage Report for Build 968225261

0 of 0   changed or added relevant lines in 0 files are covered.
No unchanged relevant lines lost coverage.
Overall coverage remained the same at 100.0%

Totals

Change from base Build 944397557:
0.0%

Covered Lines:
4

Relevant Lines:
4

💛  - Coveralls

@MrRobot2211 @jakelishman The self-host GPU runner appears to be working! Ready for review.
There is one minor issue I'm aware of -- coveralls is failing to find the git commit information to associate with the coverage upload. This happens because the NVidia AMI is based on Ubuntu 18.04 which comes with git 2.17. GitHub requires git >= 2.18 to do its fancy "single commit checkout" and falls back to creating just a tarball snapshot of the repository which doesn't contain the commit information.
We could try fix this in another PR by adding a step that does some version of:
sudo add-apt-repository ppa:git-core/ppa -y
sudo apt-get update
sudo apt-get install git -y
git --version

but I think that should either happen in another PR, or we should solve the issue by seeing if we can get an NVidia AMI based on Ubuntu 20.04.

@aktech Thanks for all your help. Looks like it's working nicely!
Do you perhaps know if there is an AMI we can use that gives us the NVidia drivers and Ubuntu 20.04?

@aktech Thanks for all your help. Looks like it's working nicely!
Do you perhaps know if there is an AMI we can use that gives us the NVidia drivers and Ubuntu 20.04?

This one seems to have what we need ami-0887cec38e5c0ab84

This one seems to have what we need ami-0887cec38e5c0ab84

@MrRobot2211 The last test run seems to have the same git version issue as before. What is the AMI you've switched to and do you have a link to a description of what is in it?

This one seems to have what we need ami-0887cec38e5c0ab84

@MrRobot2211 The last test run seems to have the same git version issue as before. What is the AMI you've switched to and do you have a link to a description of what is in it?

Sorry there
The descriptio og this one is
eep Learning AMI GPU CUDA 11.2.1 (Ubuntu 20.04) 20210625 - ami-0887cec38e5c0ab84
Built with NVIDIA CUDA, cuDNN, NCCL, GPU Driver, Docker, NVIDIA-Docker and EFA support. For a fully managed experience, check: https://aws.amazon.com/sagemaker
Tipo de dispositivo raíz: ebs Tipo de virtualización: hvm Habilitado para ENA: Sí
the links seem to be state-less so you will have to enter here
an then search ubuntu 20.04 nvidia. There are some more options but most of them come with som DL library pre-installed.

@MrRobot2211 Ah, that AMI is for us-east-2. I am trying the same AMI for eu-west-1.

Nice one guys in finding out the right AMI for Ubuntu! I'll add it to the docs in here.


[FEATURE] add filter events to collect javascript and less methods

At the moment is it not possible to remove javascript or less/css files which are added by plugins or even the core. These filter events solve this lack. In addition to removing files you can also reorder files with this events. This is pretty useful for javascript files.

Hi @Tombro, thanks for you contribution.
Can you elaborate your usecase a bit further.
This new event would expose some internal details that might change in the feature.
As of Shopware 5.0.2 we will also provide a way to modify jquery plugins, please see here: https://developers.shopware.com/designers-guide/modify-jquery-plugins/

Hey @bcremer,
we are using the plugin swag_advanced_cart which adds this javascript file:
"engine/Shopware/Plugins/Community/Frontend/SwagAdvancedCart/Views/responsive/frontend/_public/src/js/jquery.autocomplete.js"

This is used on the wishlist for adding articles.
Unfortunately the name "autocomplete" conflicts with jquery ui autocomplete, which we are using as well.
So i wanted to get rid of this plugin.
After this there is still the wrong call in the file:
"engine/Shopware/Plugins/Community/Frontend/SwagAdvancedCart/Views/responsive/frontend/_public/src/js/swag_advanced_cart.js"

        /**
         * Plugin constructor
         */
        init: function () {
            var me = this;

            me.applyDataAttributes();
            me.registerEvents();
            me.initSlider();

            // Account Article Autocomplete
            $(".add-article--text-field").autocomplete(jsUrlObject.search, {
                selectFirst: true,
                remoteDataType: 'json',
                processData: function(data) {
                    var i, processed = [];
                    for (i=0; i < data.length; i++) {
                        processed.push(data[i][1] + ' (' + data[i][0] + ')');
                    }
                    return processed;
                }
            });
        }

So i came up with my own solution for extending JS plugins, where i was going to do a second pull request. Obviously I dont need to do that anymore, because you are working on such a solution (very nice btw, we need that! when is 5.0.2 going to be released?)
This was my solution:
    $.plugin = function (name, plugin) {
        if ($['plugin_' + name] != undefined) {
            plugin = $.extend($['plugin_' + name], plugin);
        }
        $['plugin_' + name] = plugin;

        $.fn[name] = function (options) {
            return this.each(function () {
                var element = this,
                    pluginData = $.data(element, 'plugin_' + name);

                if (!pluginData) {
                    if (typeof plugin === 'function') {
                        pluginData = new plugin();
                    } else {
                        var Plugin = function () {
                            PluginBase.call(this, name, element, options);
                        };

                        Plugin.prototype = $.extend(Object.create(PluginBase.prototype), { constructor: Plugin }, plugin);

                        pluginData = new Plugin();
                    }

                    $.data(element, 'plugin_' + name, pluginData);
                }
            });
        };
    };

Its just the first 4 lines. I am saving the plugin objects globally in jQuery and extend it if defined. (Probably not the most beautiful solution)
So back to topic:
As you can see, an ability to extend SW js plugins ($.plugin) does not solve my problem completly, as I want to get rid of 3rd party libraries.

Thank you @Tombro for your very detailed response :+1:

Glad you like the upcoming jquery plugin extensions - 5.0.2 RC will be released soon
The duplicated name autocomplete hints to the bigger underlying problem: missing vendor namespace for (shopware-core-)jquery plugins. Don't know if that can be fixed
Nevertheless your usecase is valid - we have to find a solution for that

We might need a few days to think about a solution for that. We might use a filter-event as you proposed.

Hey @bcremer,
thanks for your reply.
I dont think you can do anything about this specific autocomplete name conflict, too. This is a jquery issue. For shopware plugins you could establish a convention to prefix them with a vendor. Like the core plugin imageSlider would become swagImageSlider or something.
Another approach to solve the lack of removing javascripts could be a second array in the Theme.php like it is now with $javascript, but only in reverse like $removeJavascript. But this is not as flexible as the events because you have to have a custom theme and you cant manipulate the ordering of the scripts.
Would be really nice if you could find a solution for this in 5.0.2 :)
Thanks, Thomas

Hey @Tombro.
We have two tickets in the current sprint covering this problem.

In ticket SW-11821 we will vendor prefix the jquery plugins. During the 5.0.* time there will be an alias to the old name. That alias will be removed in SW 5.1.0
In ticket SW-11750 we will refactor the StateManager Plugin Initialization so it should be possible to remove jquery plugins before they are getting executed

The new event is sill under consideration so I will leave this pull request open for the time being.

Shopware 5.0.2:

jQuery plugins prefixed, aliases added https://github.com/shopware/shopware/commit/bcd105d45104e1ecbacc2194cd9ae790f97fbea0
jQuery Plugin/Statemanager refactored https://github.com/shopware/shopware/commit/470b5f9587e365ffab3e3e61bd98c788ad533a1d

Shopware 5.1:

jQuery deprecated aliases removed https://github.com/shopware/shopware/commit/c9ece3a5902ab88fc9e1efbc9249d7ad2b601dfa

@Tombro
Is the new event stil relevant for you or will the above mentioned commits solve your problems?

I am closing this for now. If this did not solve your problem feel free to reopen. Thanks.

Hey @bcremer,
sorry i was on vacation.
I will check if these events could still be necessary and reopen this request in that case.
Thanks!

Hey folks,
i am reopening this one because i ran into another case in 5.1.4 which make these events necessary.
SwagAdvancedCart includes the JS lib jquery-ui.min.js but only some components of the lib. I need some other components.
Obviously StateManager.removePlugin() doesnt help here, because its no shopware-jquery-plugin.
Sure I could just include the new ui-widgets in my plugin and use the core of advancedcart, but this will crash if advancedcart will be uninstalled.
I still think these two events are really helpful to enable full control of JS-Files.

Hmm, i am just realizing, that its impossible to reopen a PR?
So I would make a new one (with new branches as well) if you consider merging it.
Please let me know

Hi @Tombro, sorry for my late response.
Please go ahead an open a updated pull request regarding this issue.


multi-tenant/auth

Use the users service, to convert a user-supplied SERVICE_TOKEN to an org_id (aka instance_id), and key all data on that.

Addressed in later PRs too numerous to enumerate.


npm install error

Hello!
npm install returns error due to a conflict between package.json primeicons version 6.0.1 and primeng 14.1.1 one which is 5.0.x
Updating package.json to primeng 14.1.2 solves the problem.
Hope to help!
Bye

Now the problem does not appear. Does your problem persist?

I could not reproduce the problem. Please reactivate the issue if the problem persists.
Thanks for reporting.


Jiaruifang/memcache

Debug for performance loss from commits!

Debug for performance loss from commits!

I have fixed this!


stdenv.hostPlatform != stdenv.buildPlatform ----> stdenv.isCrossCompiling

It think, there should be stdenv.isCrossCompiling to replace numerous stdenv.hostPlatform != stdenv.buildPlatform, stdenv.hostPlatform.system != stdenv.buildPlatform.system, stdenv.hostPlatform.config != stdenv.buildPlatform.config scattered across nixpkgs.
Besides the confusion of too  many forms to express the idea of cross-compilation, all of them are incorrect, because there is an exception of i686 compiled on x86_64, which is obviously not cross-compilation
So it should be something like
isCrossCompiling = stdenv.buildPlatform.system != stdenv.hostPlatform.system &&
  !(stdenv.buildPlatform.isx86_64 && stdenv.hostPlatform.i686);

@matthewbauer

I think this comparison was introduced by @Ericson2314 intentionally

Technically it (x86-64 to i686) is cross-compilation, but indeed it might be handy to handle that differently, because the binaries can run on 64-bit platforms.
Otherwise, this might be nice to have to make intentions more explicit.

I don't want this. I think people have many preconceived notions of cross compiling, it is better to be explicit. For example, for compilers we also do target != host checks, and then people will want a short-hand for that too, etc. etc.
For the second part, we have isCompatible https://github.com/NixOS/nixpkgs/blob/1c586291425a2e2c5683db88a829dbc419f23e45/lib/systems/parse.nix#L132-L215 to take those situations into account. But again, that is not always the notion one wants. For example, you can run 32-bit code on many 64-bit arches, but you cannot mix SOs between the two.
An isCrossCompiling that does or doesn't do the isCompatible thing will also create confusion in the case when it's choice is no appropriate.
Basically, foo != bar is short enough that clarity >>> brevity.


XIVY-13642 Add Combobox Component

I have implemented the first simple version of the combobox.

The next step will be to implement the properties itemsLabel and itemsValue (analogue Select --> Dynamic Options). Should I then add further properties to the combobox (e.g. scrollHeight, moreText, effect, maxResults)?
http://www.primefaces.org/showcase/ui/input/autoComplete.xhtml?jfwid=d1f17


{AKS} Fix workload identity update error after oidc issure GA in azure-cli

This checklist is used to make sure that common guidelines for a pull request are followed.

For new extensions:

[ ] My extension description/summary conforms to the Extension Summary Guidelines.

About Extension Publish
There is a pipeline to automatically build, upload and publish extension wheels.
Once your pull request is merged into main branch, a new pull request will be created to update src/index.json automatically.
The precondition is to put your code inside this repository and upgrade the version in the pull request but do not modify src/index.json.

AKS


Replaced Current TFM with STS in Readme.md

[X] You've read the Contributor Guide and Code of Conduct.
[X] You've included unit or integration tests for your change, where applicable.
[X] You've included inline docs for your change, where applicable.

Description
Readme.md is still referencing Current TFM when options only allow the selection of Standard-Term Support (STS)Detail 2

@mikeconjoice Thank you for updating the documentation. Will approve once the description is updated.

Thanks @vijayrkn, can you let me know what I need to add to the description please?

 Thank you for your submission, we really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.:x: mikeconjoice sign nowYou have signed the CLA already but the status is still pending? Let us recheck it.

Thanks @vijayrkn, can you let me know what I need to add to the description please?

Sorry I just realized today that I had not submitted my review. Thanks for taking care of it. Can you merge the main branch to get to the latest as well?

Merged from main

@mikeconjoice - Thanks for your contribution.


Network speed cap between Carla Client and Server

I have a Carla Imitation Learning Client(given in the carla repo) running on a Linux machine and the Carla Server.exe (Release 0.7.1) running on a Windows 10 machine. The Carla server is run with the fixed-time step set to fps=30.
.\CarlaUE4.exe /Game/Maps/Town01 -carla-server -benchmark -fps=30 -windowed -ResX=800 -ResY=600 -carla-settings=.\CarlaSettings.ini
The two machines are connected directly by a 1Gbit/s connection.  The machines are fast with good GPUs.
We are experiencing a network speed cap of about 80MBit/s which is causing the simulation on the server to lag. Is this a bug in the code or is there a way to increase the connection speed between the server and the client so that the simulation runs faster?

@jcyriac2 Are you sure you are using a CAT6 cable (atleast)? Can you confirm if the resource monitor recognises the connection as a gigabit connection?

Hi @jcyriac2,
There are ways to tune the network to get higher speeds, see for instance Network / TCP / UDP Tuning.
But could it be that the simulator is slow producing data? How many cameras you added? For instance, one image of 800x600 is about 15MB, at 5 FPS that makes ~75MB/s.

Thank you for the quick replies.
@YashBansod Yes I have tested the raw network speed between the 2 machines and it is around 935Mbit/s.
@nsubiron We are using the code from the imitation learning library at carla-simulator/imitation-learning. So that has one 800x600 rgb camera. Will just that one camera cause the simulator to run slowly? Also I have noticed that when I run the carla server at a lower fixed timestep (lowered from fps=30 to fps=15), the simulation seems to run faster. Does this fps value directly influence how many camera sensor images are sent to the client?
Thank you for your help

@jcyriac2 Yes, adding cameras slows down the simulation significantly. We have improved the performance of cameras for the 0.8.0 release (the release is not yet published but the master branch here in GitHub already has the changes).
Indeed, if you run with fixed time-step with lower FPS the simulation runs faster as it has to run less updates per second. We are writing the documentation for this, you can see the draft here.

Does this fps value directly influence how many camera sensor images are sent to the client per second?

The number of images per second that the simulator generates is (almost) constant, but the elapsed time in between images is higher.

Got it! Thanks alot for the help!

I have a Carla Imitation Learning Client(given in the carla repo) running on a Linux machine and the Carla Server.exe (Release 0.7.1) running on a Windows 10 machine. The Carla server is run with the fixed-time step set to fps=30.
.\CarlaUE4.exe /Game/Maps/Town01 -carla-server -benchmark -fps=30 -windowed -ResX=800 -ResY=600 -carla-settings=.\CarlaSettings.ini
The two machines are connected directly by a 1Gbit/s connection. The machines are fast with good GPUs.
We are experiencing a network speed cap of about 80MBit/s which is causing the simulation on the server to lag. Is this a bug in the code or is there a way to increase the connection speed between the server and the client so that the simulation runs faster?

Hi @jcyriac2,
I am trying to build the same set-up as yours on two separated laptops under the same WiFi environment:
Windows  (CARLA 0.9.5- server render machine) - Python 3.7.0
Linux  (CARLA 0.9.5- PythonAPI client manual_control.py) - Python 3.5
After I ran:
Windows:
.\CarlaUE4.exe  -carla-server
Linux:
python3 manual_control.py --host=<IP_ADDRESS>

The linux client could not connect to the server and giving a runtime error.  I've checked the bandwidth between two machines using iperf, which is around 10 Mbits/s. And I also checked connection from linux to <IP_ADDRESS>:2000 using telnet, which is fine. Could you please kindly tell me how you set up the two machines and get it working? Thanks in advance!!

Hey @cjerome0321
I haven't worked with CARLA 0.9.5. However, I believe that that in the older versions, you could pass in a command-line option to the client to specify the port number of the server using -p.
python3 manual_control.py --host=<IP_ADDRESS> -p 2000
You also might want to check if Windows Firewall is blocking the connection through that port and add an exception for the CarlaUE4.exe app.

Hey @cjerome0321
I haven't worked with CARLA 0.9.5. However, I believe that that in the older versions, you could pass in a command-line option to the client to specify the port number of the server using -p.
python3 manual_control.py --host=<IP_ADDRESS> -p 2000
You also might want to check if Windows Firewall is blocking the connection through that port and add an exception for the CarlaUE4.exe app.

Hi @jcyriac2 ,
It worked. Thanks.

although this thread is dead, i also wanted to add that for slow network speed, the time to transfer an OpenDrive .xodr file might be larger than 2 seconds and thus causing a time out error, which is quite misleading.
The fix to this is simply increasing the timeout to something like 5 or 10 seconds, depending on your wifi speed.


Something went wrong on playing

I'm constantly getting this error message on LavaLink. How should I fix it?
com.sedmelluq.discord.lavaplayer.tools.FriendlyException: Something went wrong when looking up the track
        at com.sedmelluq.discord.lavaplayer.tools.ExceptionTools.wrapUnfriendlyExceptions(ExceptionTools.java:45) ~[lavaplayer-2.0.4.jar!/:na]

This is neither a lavalink bug tracker nor did you include any helpful information on what the issue is you are describing

Well, I think this is the error that described with some latest issues on lavalink, I was using Lavaplayer of 4.0.1, which is not good at handling yt, so, thankk you for your support anyway.


Add examples that use a custom training loop

Add examples for MNIST, CIFAR, and ptb that use a custom training loop instead of trainer.
Such examples were in Chainer prior to the Trainer feature but were removed when that feature was added. This PR adds these examples back again.
Although these examples do not use trainer, they do use dataset iterators.

Thank you for this informative PR! I confirmed that these custom training examples successfully trained the models.
The final loss and accuracy on CIFAR10 (with modification on batchsize=64)
train mean loss=0.00535679790019989, accuracy=0.99872
test mean loss=0.4296657483577728, accuracy=0.9199

The final perplexities of PTB example (without any modification)
training perplexity:  3.5897860527038574
test
test perplexity: 4.462698653402887

So it definitely works correctly, but the batchsize in the CIFAR10 example might be too large. How about reducing the size to 64 (the current default is 128)?

OK, I reduced the batchsize to 64. I also made the learning rate adjustable as an argparse argument since for very small batchsizes, the user might need to also reduce the learning rate.

Thanks for your comments. I have made the changes.

Thank you for changes. I added another comments.

Thank you for fixes. There seems to be autopep8 related errors. To fix this, could you try merge or rebase current master branch?  (c.f. #2363)

Thank you. Now LGTM.

From the offline discussion, this is the reset method of SerialIterator:
https://github.com/pfnet/chainer/pull/2387
This has been merged to master branch, and will be released with the next version of Chainer (v1.23.0).

Thank you for suggesting reset() method of SerialIterator. I have modified the examples to use it.


Delay execution of dispatched events

Hi! 👋
Firstly, thanks for your work on this project! 🙂
Today I used patch-package to patch<EMAIL_ADDRESS>for the project I'm working on.
Events from server to client needs to have some delay to mimic network delay.
Here is the diff that solved my problem:
diff --git a/node_modules/mock-socket/dist/mock-socket.js b/node_modules/mock-socket/dist/mock-socket.js
index 2478234..414d406 100644
--- a/node_modules/mock-socket/dist/mock-socket.js
+++ b/node_modules/mock-socket/dist/mock-socket.js
@@ -793,13 +793,16 @@ EventTarget.prototype.dispatchEvent = function dispatchEvent (event) {
     return false;
   }

-  listeners.forEach(function (listener) {
-    if (customArguments.length > 0) {
-      listener.apply(this$1, customArguments);
-    } else {
-      listener.call(this$1, event);
-    }
-  });
+  delay(function()
+  {
+    listeners.forEach(function (listener) {
+      if (customArguments.length > 0) {
+        listener.apply(this$1, customArguments);
+      } else {
+        listener.call(this$1, event);
+      }
+    });
+  })

   return true;
 };

This issue body was partially generated by patch-package.

@piranna The dispatchEvent function is already called with the delay helper in the websocket. The server event can be called with delay manually in your code.
Can you please give more details of your problem, what the exact place you need the delay?

Just the part of the server event. I don't want to provide a manual delay on my code, I want the listeners to be executed at least in the next event loop when they are dispatched, not in the same one. This allows me to register some events in the WebSocket, as I would do normally in real code.

Make sense, you can create a PR, but add the delay in the server's methods where it's needed, not in the dispatchEvent;
It would be very helpful if you also provide a test or example that demonstrates the problem

I think the server method is send(). Why dispatchEvent() is not the correct place? All the server-to-client events are going throught there, so it makes sense to me to add the "network transmission delay" there...


more reliable ASC (Neurolucida) parser

Allow neurite token to start with lower case character
Allow soma token with whitespace: (Cell Body)
Allow neurite token to be represented as text for backward compatibility with old morphologies as mentioned in #300 .

Should I do anything with coverage? What is your plan here @mgeplf ?


Visualizations of Predictions for entire image

Describe the bug
Currently Not able to get the Visualizations of Predictions for the entire image.
To Reproduce
Re-trained the DeepForest model, using one image.

Here,
I am able to See the Precision, Recall Values, also able to see Visualizations for small crops in the pred_result folder.
Is there any way to get visualizations for an entire input image in addition to small crops?
Environment (please complete the following information):

OS: Used Google Colab
Python version and environment :

Screenshots
If applicable, add screenshots to help explain your problem.
Additional context
Add any other context about the problem here.

You should be able to use either predict_image() or predict_tile() to get the visualizations for the retrained model.
Also, just in the last week we've added the bounding box coordinates to the results["results"] object, so if you install the current version of main from the repository it will expose that information there as well:
pip install<EMAIL_ADDRESS>

Can we close here?

Yes, We can close this issue.

The issue is resolved so, closing the ticket.


Dropdown (allowAdditions): newly added items do not display correctly

Apologies if this is a duplicate.  I suspect the issue described below may be caused by an incorrect selectedIndex value, and I'm aware that there are already multiple similar issues that are currently being addressed via https://github.com/Semantic-Org/Semantic-UI-React/pull/2375; though I'm unsure if the issue below falls into the same category as those previous ones.
(Also note: I'm new to Semantic-UI-React; so it is entirely possible that this isn't a bug at all, and simply something wrong with the test case example).
Steps
(using the test case link below)
a) Select an existing item from the list:

Click the dropdown (to show the options list)
Select Arizona by clicking on it
Click the dropdown again (to show the options list again)

Note that:

The input area displays a blinking cursor and the text Arizona in grey (styled as placeholder text)
The corresponding Arizona item in the options list is highlighted with both a grey background and bold text

b) Add a new item to the list:

Click the dropdown (to show the options list)
Enter the text abcd and click the "Add abcd" option that appears
Click the dropdown again (to show the options list again)

Note that:

The input area shows a blinking cursor and the text Alabama in grey
The Alabama item in the options list is highlighted with a grey background
The abcd item in the options list is shown with bold text

Expected Result
Regardless of whether an existing item is selected or a new item is added, when the dropdown is opened a second time the behaviour should be the same:
✅ The input area displays the text of the currently selected option (in grey)
✅ The list highlights the currently selected option with a grey background
✅ The list highlights the currently selected option in bold
Actual Result
After entering a new item, when the dropdown is opened a second time:
❌ The input area reverts to display the text of the first option (in grey)
❌ The list highlights the first option with a grey background
✅ The list highlights the currently selected option in bold
Version
0.78.3
Testcase
https://codepen.io/anon/pen/aYbEXo?editors=0010

Yep, bug. Great report ❤, makes my day to see issues posted like this!
I've forked the test case to show print state to the DOM.  The data (options) and the value of the dropdown are both correct during this flow, however, the logic for setting the selected (highlighted) item is incorrect.  See https://codepen.io/anon/pen/EEzGyQ?editors=0010.
I believe this is a dupe of https://github.com/Semantic-Org/Semantic-UI-React/pull/2375 as you've pointed out.  I will close this in favor of that issue.  If we find differences, or the same issue in that PR let's address it there as well, please.  Thanks again.


Improvements to the network_fsm

This changeset adds the ability to set the dhcp hostname when configuring the WIFI network.  The default dhcp hostname is set to "atomvm".
These changes are made under the terms of the LGPL v2.1 (or any later version)
and Apache 2.0 licenses.

Restored sntp entry to start config.


Transformation skins can't use Ears mod features

Ears is a really cool mod by unascribed that adds customizable skin extensions compatible with just about every moddable Minecraft version. While Ears work perfectly untransformed, the EarsFeatureRenderer isn't applied to transformed Magical Mahou characters. Would it be possible to add support?

I am currently investigating a way to make this work. Magical Mahou doesn't use a PlayerSkinTexture because PlayerSkinTextures use a url as their source where as Magical Mahou loads transformed textures from a packet.
There are two approaches I can see to fix this. The first is to use a custom subclass of NativeImageBackedTexture that implements EarsFeatureHolder, but only when the Ears mod is loaded. The second approach is to use a custom subclass of PlayerSkinTexture that guts its skin-downloading functionality and instead uses a skin supplied to it, replicating much of the NativeImageBackedTexture functionality.
The second approach seems more promising, as it would not require custom functionality that is only present when another mod is loaded.

It turns out that Ears's MixinPlayerSkinTexture obtains the player skin texture by mixing into loadTexture. However, if I were to remove PlayerSkinTexture's url-loading functionality in a subclass, that subclass would never call loadTexture.
One aweful hack that might work is to use a mixin to invoke loadTexture using a serialized version of the NativeImage the custom player skin texture was created with.