blob: e80bd8e5405a5bcda17b9c8e322cdf9b3cfcbb08 [file] [log] [blame]
create schema bfv_aggregate;
set search_path=bfv_aggregate;
--
-- Window function with outer references in PARTITION BY/ORDER BY clause
--
-- SETUP
create table x_outer (a int, b int, c int);
NOTICE: Table doesn't have 'DISTRIBUTED BY' clause -- Using column named 'a' as the Apache Cloudberry data distribution key for this table.
HINT: The 'DISTRIBUTED BY' clause determines the distribution of data. Make sure column(s) chosen are the optimal data distribution key to minimize skew.
create table y_inner (d int, e int);
NOTICE: Table doesn't have 'DISTRIBUTED BY' clause -- Using column named 'd' as the Apache Cloudberry data distribution key for this table.
HINT: The 'DISTRIBUTED BY' clause determines the distribution of data. Make sure column(s) chosen are the optimal data distribution key to minimize skew.
insert into x_outer select i%3, i, i from generate_series(1,10) i;
insert into y_inner select i%3, i from generate_series(1,10) i;
analyze x_outer;
analyze y_inner;
-- TEST
select * from x_outer where a in (select row_number() over(partition by a) from y_inner) order by 1, 2;
a | b | c
---+----+----
1 | 1 | 1
1 | 4 | 4
1 | 7 | 7
1 | 10 | 10
2 | 2 | 2
2 | 5 | 5
2 | 8 | 8
(7 rows)
select * from x_outer where a in (select rank() over(order by a) from y_inner) order by 1, 2;
a | b | c
---+----+----
1 | 1 | 1
1 | 4 | 4
1 | 7 | 7
1 | 10 | 10
(4 rows)
select * from x_outer where a not in (select rank() over(order by a) from y_inner) order by 1, 2;
a | b | c
---+---+---
0 | 3 | 3
0 | 6 | 6
0 | 9 | 9
2 | 2 | 2
2 | 5 | 5
2 | 8 | 8
(6 rows)
select * from x_outer where exists (select rank() over(order by a) from y_inner where d = a) order by 1, 2;
a | b | c
---+----+----
0 | 3 | 3
0 | 6 | 6
0 | 9 | 9
1 | 1 | 1
1 | 4 | 4
1 | 7 | 7
1 | 10 | 10
2 | 2 | 2
2 | 5 | 5
2 | 8 | 8
(10 rows)
select * from x_outer where not exists (select rank() over(order by a) from y_inner where d = a) order by 1, 2;
a | b | c
---+---+---
(0 rows)
select * from x_outer where a in (select last_value(d) over(partition by b order by e rows between e preceding and e+1 following) from y_inner) order by 1, 2;
a | b | c
---+----+----
0 | 3 | 3
0 | 6 | 6
0 | 9 | 9
1 | 1 | 1
1 | 4 | 4
1 | 7 | 7
1 | 10 | 10
2 | 2 | 2
2 | 5 | 5
2 | 8 | 8
(10 rows)
--
-- Testing aggregation in a query
--
-- SETUP
create table d (col1 timestamp, col2 int);
NOTICE: Table doesn't have 'DISTRIBUTED BY' clause -- Using column named 'col1' as the Apache Cloudberry data distribution key for this table.
HINT: The 'DISTRIBUTED BY' clause determines the distribution of data. Make sure column(s) chosen are the optimal data distribution key to minimize skew.
insert into d select to_date('2014-01-01', 'YYYY-DD-MM'), generate_series(1,100);
-- TEST
select 1, to_char(col1, 'YYYY'), median(col2) from d group by 1, 2;
?column? | to_char | median
----------+---------+--------
1 | 2014 | 50.5
(1 row)
--
-- Testing if aggregate derived window function produces incorrect results
--
-- SETUP
create table toy(id,val) as select i,i from generate_series(1,5) i;
NOTICE: Table doesn't have 'DISTRIBUTED BY' clause -- Using column(s) named 'id' as the Apache Cloudberry data distribution key for this table.
HINT: The 'DISTRIBUTED BY' clause determines the distribution of data. Make sure column(s) chosen are the optimal data distribution key to minimize skew.
create aggregate mysum1(int4) (sfunc = int4_sum, combinefunc=int8pl, stype=bigint);
create aggregate mysum2(int4) (sfunc = int4_sum, stype=bigint);
-- TEST
select
id, val,
sum(val) over (w),
mysum1(val) over (w),
mysum2(val) over (w)
from toy
window w as (order by id rows 2 preceding);
id | val | sum | mysum1 | mysum2
----+-----+-----+--------+--------
1 | 1 | 1 | 1 | 1
2 | 2 | 3 | 3 | 3
3 | 3 | 6 | 6 | 6
4 | 4 | 9 | 9 | 9
5 | 5 | 12 | 12 | 12
(5 rows)
--
-- Error executing for aggregate with anyarray as return type
--
-- SETUP
CREATE OR REPLACE FUNCTION tfp(anyarray,anyelement) RETURNS anyarray AS
'select $1 || $2' LANGUAGE SQL;
CREATE OR REPLACE FUNCTION ffp(anyarray) RETURNS anyarray AS
'select $1' LANGUAGE SQL;
CREATE AGGREGATE myaggp20a(BASETYPE = anyelement, SFUNC = tfp,
STYPE = anyarray, FINALFUNC = ffp, INITCOND = '{}');
-- Adding a sql function to sory the array
CREATE OR REPLACE FUNCTION array_sort (ANYARRAY)
RETURNS ANYARRAY LANGUAGE SQL
AS $$
SELECT ARRAY(SELECT unnest($1) ORDER BY 1)
$$;
create temp table t(f1 int, f2 int[], f3 text);
NOTICE: Table doesn't have 'DISTRIBUTED BY' clause -- Using column named 'f1' as the Apache Cloudberry data distribution key for this table.
HINT: The 'DISTRIBUTED BY' clause determines the distribution of data. Make sure column(s) chosen are the optimal data distribution key to minimize skew.
-- TEST
insert into t values(1,array[1],'a');
insert into t values(1,array[11],'b');
insert into t values(1,array[111],'c');
insert into t values(2,array[2],'a');
insert into t values(2,array[22],'b');
insert into t values(2,array[222],'c');
insert into t values(3,array[3],'a');
insert into t values(3,array[3],'b');
select f3, array_sort(myaggp20a(f1)) from t group by f3 order by f3;
f3 | array_sort
----+------------
a | {1,2,3}
b | {1,2,3}
c | {1,2}
(3 rows)
-- start_ignore
create language plpython3u;
-- end_ignore
create or replace function count_operator(query text, operator text) returns int as
$$
rv = plpy.execute('EXPLAIN ' + query)
search_text = operator
result = 0
for i in range(len(rv)):
cur_line = rv[i]['QUERY PLAN']
if search_text.lower() in cur_line.lower():
result = result+1
return result
$$
language plpython3u;
--
-- Testing adding a traceflag to favor multi-stage aggregation
--
-- SETUP
create table multi_stage_test(a int, b int);
NOTICE: Table doesn't have 'DISTRIBUTED BY' clause -- Using column named 'a' as the Apache Cloudberry data distribution key for this table.
HINT: The 'DISTRIBUTED BY' clause determines the distribution of data. Make sure column(s) chosen are the optimal data distribution key to minimize skew.
insert into multi_stage_test select i, i%4 from generate_series(1,10) i;
analyze multi_stage_test;
-- TEST
set optimizer_segments=2;
set optimizer_force_multistage_agg = on;
select count_operator('select count(*) from multi_stage_test group by b;','GroupAggregate');
count_operator
----------------
0
(1 row)
set optimizer_force_multistage_agg = off;
select count_operator('select count(*) from multi_stage_test group by b;','GroupAggregate');
count_operator
----------------
0
(1 row)
--CLEANUP
reset optimizer_segments;
reset optimizer_force_multistage_agg;
-- Testing not picking HashAgg for aggregates without combine functions
-- In previous version, a HashAggregate is not chosen when an aggregate misses
-- combine functions in GPDB Hybrid Hash Agg. HashAggregate can spill to disk,
-- and it requires the combine function for that(combine function is used to
-- deserialize the aggregate states loaded from the spill file). But that got
-- reverted in current version. Currently, this does choose a Hash Agg, because
-- we spill the raw tuple rather than transvalue to disk now.
-- SETUP
set optimizer_print_missing_stats = off;
CREATE TABLE attribute_table (product_id integer, attribute_id integer,attribute text, attribute2 text,attribute_ref_lists text,short_name text,attribute6 text,attribute5 text,measure double precision,unit character varying(60)) DISTRIBUTED BY (product_id ,attribute_id);
-- create the transition function
CREATE OR REPLACE FUNCTION do_concat(text,text)
RETURNS text
--concatenates 2 strings
AS 'SELECT CASE WHEN $1 IS NULL THEN $2
WHEN $2 IS NULL THEN $1
ELSE $1 || $2 END;'
LANGUAGE SQL
IMMUTABLE
RETURNS NULL ON NULL INPUT;
-- UDA definition. No COMBINEFUNC exists
CREATE AGGREGATE concat(text) (
--text/string concatenation
SFUNC = do_concat, --Function to call for each string that builds the aggregate
STYPE = text,--FINALFUNC=final_func, --Function to call after everything has been aggregated
INITCOND = '' --Initialize as an empty string when starting
);
-- TEST
-- cook some stats
set allow_system_table_mods=true;
UPDATE pg_class set reltuples=524592::real, relpages=2708::integer where oid = 'attribute_table'::regclass;
select count_operator('select product_id,concat(E''#attribute_''||attribute_id::varchar||E'':''||attribute) as attr FROM attribute_table GROUP BY product_id;','HashAggregate');
count_operator
----------------
1
(1 row)
-- CLEANUP
--
-- Testing fallback to planner when the agg used in window does not have
-- a combine function.
--
-- SETUP
create table foo(a int, b text) distributed by (a);
-- TEST
insert into foo values (1,'aaa'), (2,'bbb'), (3,'ccc');
-- should fall back
select string_agg(b, '') over (partition by a) from foo order by 1;
string_agg
------------
aaa
bbb
ccc
(3 rows)
select string_agg(b, '') over (partition by a,b) from foo order by 1;
string_agg
------------
aaa
bbb
ccc
(3 rows)
-- should not fall back
select max(b) over (partition by a) from foo order by 1;
max
-----
aaa
bbb
ccc
(3 rows)
select count_operator('select max(b) over (partition by a) from foo order by 1;', 'GPORCA');
count_operator
----------------
0
(1 row)
-- fall back
select string_agg(b, '') over (partition by a+1) from foo order by 1;
string_agg
------------
aaa
bbb
ccc
(3 rows)
select string_agg(b || 'txt', '') over (partition by a) from foo order by 1;
string_agg
------------
aaatxt
bbbtxt
ccctxt
(3 rows)
select string_agg(b || 'txt', '') over (partition by a+1) from foo order by 1;
string_agg
------------
aaatxt
bbbtxt
ccctxt
(3 rows)
-- fall back
select string_agg(b, '') over (partition by a order by a) from foo order by 1;
string_agg
------------
aaa
bbb
ccc
(3 rows)
select string_agg(b || 'txt', '') over (partition by a,b order by a,b) from foo order by 1;
string_agg
------------
aaatxt
bbbtxt
ccctxt
(3 rows)
select '1' || string_agg(b, '') over (partition by a+1 order by a+1) from foo;
?column?
----------
1aaa
1bbb
1ccc
(3 rows)
-- Test for a bug in memtuple compute_null_save() function, where the result value
-- was a 16-bit integer, which overflowed with a tuple with enough NULL attributes.
-- That bug wasn't related to aggregates per se, but this is one way to construct
-- such a memtuple, and seems useful to test a query that has a huge number of
-- aggregates anyway.
create temporary table mtup1(
c0 text,
c1 text,
c3 int,
c4 int
)
with (appendonly = true, compresstype=zlib)
distributed by (c0, c3);
insert into mtup1 values
('foo', '2015-09-1.1', 1),
('foo', '2015-09-1.1', 2),
('foo', '2015-09-1.1', 3),
('foo', '2015-09-1.1', 4),
('foo', '2015-09-1.1', 5),
('foo', '2015-09-1.1', 6),
('foo', '2015-09-1.1', 7),
('foo', '2015-09-1.1', 8),
('foo', '2015-09-1.1', 9);
-- The number of SUMs is a chosen so that it it's enough to trigger the bug with NULL
-- attributes, but not much more than that. There's some O(n^2) code in ExecInitAgg
-- to detect duplicate AggRefs, so this starts to get really slow as you add more
-- aggregates.
-- we use MinimalTuples in Motions now, and the support for passing around MemTuples
-- in TupleTableSlots was removed, so it no longer can exercise the original bug.
-- In GPDB6, it generates a multiphase agg plan in default, but it will get an error
-- from exceeding the limit in GPDB7 with that plan(a MinimalTuple has a limit of 1600
-- columns). So set the parameter to off to prevent error happens.
set gp_enable_multiphase_agg=off;
select c0, c1, array_length(ARRAY[
SUM(c4 % 2), SUM(c4 % 3), SUM(c4 % 4),
SUM(c4 % 5), SUM(c4 % 6), SUM(c4 % 7), SUM(c4 % 8), SUM(c4 % 9),
SUM(c4 % 10), SUM(c4 % 11), SUM(c4 % 12), SUM(c4 % 13), SUM(c4 % 14),
SUM(c4 % 15), SUM(c4 % 16), SUM(c4 % 17), SUM(c4 % 18), SUM(c4 % 19),
SUM(c4 % 20), SUM(c4 % 21), SUM(c4 % 22), SUM(c4 % 23), SUM(c4 % 24),
SUM(c4 % 25), SUM(c4 % 26), SUM(c4 % 27), SUM(c4 % 28), SUM(c4 % 29),
SUM(c4 % 30), SUM(c4 % 31), SUM(c4 % 32), SUM(c4 % 33), SUM(c4 % 34),
SUM(c4 % 35), SUM(c4 % 36), SUM(c4 % 37), SUM(c4 % 38), SUM(c4 % 39),
SUM(c4 % 40), SUM(c4 % 41), SUM(c4 % 42), SUM(c4 % 43), SUM(c4 % 44),
SUM(c4 % 45), SUM(c4 % 46), SUM(c4 % 47), SUM(c4 % 48), SUM(c4 % 49),
SUM(c4 % 50), SUM(c4 % 51), SUM(c4 % 52), SUM(c4 % 53), SUM(c4 % 54),
SUM(c4 % 55), SUM(c4 % 56), SUM(c4 % 57), SUM(c4 % 58), SUM(c4 % 59),
SUM(c4 % 60), SUM(c4 % 61), SUM(c4 % 62), SUM(c4 % 63), SUM(c4 % 64),
SUM(c4 % 65), SUM(c4 % 66), SUM(c4 % 67), SUM(c4 % 68), SUM(c4 % 69),
SUM(c4 % 70), SUM(c4 % 71), SUM(c4 % 72), SUM(c4 % 73), SUM(c4 % 74),
SUM(c4 % 75), SUM(c4 % 76), SUM(c4 % 77), SUM(c4 % 78), SUM(c4 % 79),
SUM(c4 % 80), SUM(c4 % 81), SUM(c4 % 82), SUM(c4 % 83), SUM(c4 % 84),
SUM(c4 % 85), SUM(c4 % 86), SUM(c4 % 87), SUM(c4 % 88), SUM(c4 % 89),
SUM(c4 % 90), SUM(c4 % 91), SUM(c4 % 92), SUM(c4 % 93), SUM(c4 % 94),
SUM(c4 % 95), SUM(c4 % 96), SUM(c4 % 97), SUM(c4 % 98), SUM(c4 % 99),
SUM(c4 % 100), SUM(c4 % 101), SUM(c4 % 102), SUM(c4 % 103), SUM(c4 % 104),
SUM(c4 % 105), SUM(c4 % 106), SUM(c4 % 107), SUM(c4 % 108), SUM(c4 % 109),
SUM(c4 % 110), SUM(c4 % 111), SUM(c4 % 112), SUM(c4 % 113), SUM(c4 % 114),
SUM(c4 % 115), SUM(c4 % 116), SUM(c4 % 117), SUM(c4 % 118), SUM(c4 % 119),
SUM(c4 % 120), SUM(c4 % 121), SUM(c4 % 122), SUM(c4 % 123), SUM(c4 % 124),
SUM(c4 % 125), SUM(c4 % 126), SUM(c4 % 127), SUM(c4 % 128), SUM(c4 % 129),
SUM(c4 % 130), SUM(c4 % 131), SUM(c4 % 132), SUM(c4 % 133), SUM(c4 % 134),
SUM(c4 % 135), SUM(c4 % 136), SUM(c4 % 137), SUM(c4 % 138), SUM(c4 % 139),
SUM(c4 % 140), SUM(c4 % 141), SUM(c4 % 142), SUM(c4 % 143), SUM(c4 % 144),
SUM(c4 % 145), SUM(c4 % 146), SUM(c4 % 147), SUM(c4 % 148), SUM(c4 % 149),
SUM(c4 % 150), SUM(c4 % 151), SUM(c4 % 152), SUM(c4 % 153), SUM(c4 % 154),
SUM(c4 % 155), SUM(c4 % 156), SUM(c4 % 157), SUM(c4 % 158), SUM(c4 % 159),
SUM(c4 % 160), SUM(c4 % 161), SUM(c4 % 162), SUM(c4 % 163), SUM(c4 % 164),
SUM(c4 % 165), SUM(c4 % 166), SUM(c4 % 167), SUM(c4 % 168), SUM(c4 % 169),
SUM(c4 % 170), SUM(c4 % 171), SUM(c4 % 172), SUM(c4 % 173), SUM(c4 % 174),
SUM(c4 % 175), SUM(c4 % 176), SUM(c4 % 177), SUM(c4 % 178), SUM(c4 % 179),
SUM(c4 % 180), SUM(c4 % 181), SUM(c4 % 182), SUM(c4 % 183), SUM(c4 % 184),
SUM(c4 % 185), SUM(c4 % 186), SUM(c4 % 187), SUM(c4 % 188), SUM(c4 % 189),
SUM(c4 % 190), SUM(c4 % 191), SUM(c4 % 192), SUM(c4 % 193), SUM(c4 % 194),
SUM(c4 % 195), SUM(c4 % 196), SUM(c4 % 197), SUM(c4 % 198), SUM(c4 % 199),
SUM(c4 % 200), SUM(c4 % 201), SUM(c4 % 202), SUM(c4 % 203), SUM(c4 % 204),
SUM(c4 % 205), SUM(c4 % 206), SUM(c4 % 207), SUM(c4 % 208), SUM(c4 % 209),
SUM(c4 % 210), SUM(c4 % 211), SUM(c4 % 212), SUM(c4 % 213), SUM(c4 % 214),
SUM(c4 % 215), SUM(c4 % 216), SUM(c4 % 217), SUM(c4 % 218), SUM(c4 % 219),
SUM(c4 % 220), SUM(c4 % 221), SUM(c4 % 222), SUM(c4 % 223), SUM(c4 % 224),
SUM(c4 % 225), SUM(c4 % 226), SUM(c4 % 227), SUM(c4 % 228), SUM(c4 % 229),
SUM(c4 % 230), SUM(c4 % 231), SUM(c4 % 232), SUM(c4 % 233), SUM(c4 % 234),
SUM(c4 % 235), SUM(c4 % 236), SUM(c4 % 237), SUM(c4 % 238), SUM(c4 % 239),
SUM(c4 % 240), SUM(c4 % 241), SUM(c4 % 242), SUM(c4 % 243), SUM(c4 % 244),
SUM(c4 % 245), SUM(c4 % 246), SUM(c4 % 247), SUM(c4 % 248), SUM(c4 % 249),
SUM(c4 % 250), SUM(c4 % 251), SUM(c4 % 252), SUM(c4 % 253), SUM(c4 % 254),
SUM(c4 % 255), SUM(c4 % 256), SUM(c4 % 257), SUM(c4 % 258), SUM(c4 % 259),
SUM(c4 % 260), SUM(c4 % 261), SUM(c4 % 262), SUM(c4 % 263), SUM(c4 % 264),
SUM(c4 % 265), SUM(c4 % 266), SUM(c4 % 267), SUM(c4 % 268), SUM(c4 % 269),
SUM(c4 % 270), SUM(c4 % 271), SUM(c4 % 272), SUM(c4 % 273), SUM(c4 % 274),
SUM(c4 % 275), SUM(c4 % 276), SUM(c4 % 277), SUM(c4 % 278), SUM(c4 % 279),
SUM(c4 % 280), SUM(c4 % 281), SUM(c4 % 282), SUM(c4 % 283), SUM(c4 % 284),
SUM(c4 % 285), SUM(c4 % 286), SUM(c4 % 287), SUM(c4 % 288), SUM(c4 % 289),
SUM(c4 % 290), SUM(c4 % 291), SUM(c4 % 292), SUM(c4 % 293), SUM(c4 % 294),
SUM(c4 % 295), SUM(c4 % 296), SUM(c4 % 297), SUM(c4 % 298), SUM(c4 % 299),
SUM(c4 % 300), SUM(c4 % 301), SUM(c4 % 302), SUM(c4 % 303), SUM(c4 % 304),
SUM(c4 % 305), SUM(c4 % 306), SUM(c4 % 307), SUM(c4 % 308), SUM(c4 % 309),
SUM(c4 % 310), SUM(c4 % 311), SUM(c4 % 312), SUM(c4 % 313), SUM(c4 % 314),
SUM(c4 % 315), SUM(c4 % 316), SUM(c4 % 317), SUM(c4 % 318), SUM(c4 % 319),
SUM(c4 % 320), SUM(c4 % 321), SUM(c4 % 322), SUM(c4 % 323), SUM(c4 % 324),
SUM(c4 % 325), SUM(c4 % 326), SUM(c4 % 327), SUM(c4 % 328), SUM(c4 % 329),
SUM(c4 % 330), SUM(c4 % 331), SUM(c4 % 332), SUM(c4 % 333), SUM(c4 % 334),
SUM(c4 % 335), SUM(c4 % 336), SUM(c4 % 337), SUM(c4 % 338), SUM(c4 % 339),
SUM(c4 % 340), SUM(c4 % 341), SUM(c4 % 342), SUM(c4 % 343), SUM(c4 % 344),
SUM(c4 % 345), SUM(c4 % 346), SUM(c4 % 347), SUM(c4 % 348), SUM(c4 % 349),
SUM(c4 % 350), SUM(c4 % 351), SUM(c4 % 352), SUM(c4 % 353), SUM(c4 % 354),
SUM(c4 % 355), SUM(c4 % 356), SUM(c4 % 357), SUM(c4 % 358), SUM(c4 % 359),
SUM(c4 % 360), SUM(c4 % 361), SUM(c4 % 362), SUM(c4 % 363), SUM(c4 % 364),
SUM(c4 % 365), SUM(c4 % 366), SUM(c4 % 367), SUM(c4 % 368), SUM(c4 % 369),
SUM(c4 % 370), SUM(c4 % 371), SUM(c4 % 372), SUM(c4 % 373), SUM(c4 % 374),
SUM(c4 % 375), SUM(c4 % 376), SUM(c4 % 377), SUM(c4 % 378), SUM(c4 % 379),
SUM(c4 % 380), SUM(c4 % 381), SUM(c4 % 382), SUM(c4 % 383), SUM(c4 % 384),
SUM(c4 % 385), SUM(c4 % 386), SUM(c4 % 387), SUM(c4 % 388), SUM(c4 % 389),
SUM(c4 % 390), SUM(c4 % 391), SUM(c4 % 392), SUM(c4 % 393), SUM(c4 % 394),
SUM(c4 % 395), SUM(c4 % 396), SUM(c4 % 397), SUM(c4 % 398), SUM(c4 % 399),
SUM(c4 % 400), SUM(c4 % 401), SUM(c4 % 402), SUM(c4 % 403), SUM(c4 % 404),
SUM(c4 % 405), SUM(c4 % 406), SUM(c4 % 407), SUM(c4 % 408), SUM(c4 % 409),
SUM(c4 % 410), SUM(c4 % 411), SUM(c4 % 412), SUM(c4 % 413), SUM(c4 % 414),
SUM(c4 % 415), SUM(c4 % 416), SUM(c4 % 417), SUM(c4 % 418), SUM(c4 % 419),
SUM(c4 % 420), SUM(c4 % 421), SUM(c4 % 422), SUM(c4 % 423), SUM(c4 % 424),
SUM(c4 % 425), SUM(c4 % 426), SUM(c4 % 427), SUM(c4 % 428), SUM(c4 % 429),
SUM(c4 % 430), SUM(c4 % 431), SUM(c4 % 432), SUM(c4 % 433), SUM(c4 % 434),
SUM(c4 % 435), SUM(c4 % 436), SUM(c4 % 437), SUM(c4 % 438), SUM(c4 % 439),
SUM(c4 % 440), SUM(c4 % 441), SUM(c4 % 442), SUM(c4 % 443), SUM(c4 % 444),
SUM(c4 % 445), SUM(c4 % 446), SUM(c4 % 447), SUM(c4 % 448), SUM(c4 % 449),
SUM(c4 % 450), SUM(c4 % 451), SUM(c4 % 452), SUM(c4 % 453), SUM(c4 % 454),
SUM(c4 % 455), SUM(c4 % 456), SUM(c4 % 457), SUM(c4 % 458), SUM(c4 % 459),
SUM(c4 % 460), SUM(c4 % 461), SUM(c4 % 462), SUM(c4 % 463), SUM(c4 % 464),
SUM(c4 % 465), SUM(c4 % 466), SUM(c4 % 467), SUM(c4 % 468), SUM(c4 % 469),
SUM(c4 % 470), SUM(c4 % 471), SUM(c4 % 472), SUM(c4 % 473), SUM(c4 % 474),
SUM(c4 % 475), SUM(c4 % 476), SUM(c4 % 477), SUM(c4 % 478), SUM(c4 % 479),
SUM(c4 % 480), SUM(c4 % 481), SUM(c4 % 482), SUM(c4 % 483), SUM(c4 % 484),
SUM(c4 % 485), SUM(c4 % 486), SUM(c4 % 487), SUM(c4 % 488), SUM(c4 % 489),
SUM(c4 % 490), SUM(c4 % 491), SUM(c4 % 492), SUM(c4 % 493), SUM(c4 % 494),
SUM(c4 % 495), SUM(c4 % 496), SUM(c4 % 497), SUM(c4 % 498), SUM(c4 % 499),
SUM(c4 % 500), SUM(c4 % 501), SUM(c4 % 502), SUM(c4 % 503), SUM(c4 % 504),
SUM(c4 % 505), SUM(c4 % 506), SUM(c4 % 507), SUM(c4 % 508), SUM(c4 % 509),
SUM(c4 % 510), SUM(c4 % 511), SUM(c4 % 512), SUM(c4 % 513), SUM(c4 % 514),
SUM(c4 % 515), SUM(c4 % 516), SUM(c4 % 517), SUM(c4 % 518), SUM(c4 % 519),
SUM(c4 % 520), SUM(c4 % 521), SUM(c4 % 522), SUM(c4 % 523), SUM(c4 % 524),
SUM(c4 % 525), SUM(c4 % 526), SUM(c4 % 527), SUM(c4 % 528), SUM(c4 % 529),
SUM(c4 % 530), SUM(c4 % 531), SUM(c4 % 532), SUM(c4 % 533), SUM(c4 % 534),
SUM(c4 % 535), SUM(c4 % 536), SUM(c4 % 537), SUM(c4 % 538), SUM(c4 % 539),
SUM(c4 % 540), SUM(c4 % 541), SUM(c4 % 542), SUM(c4 % 543), SUM(c4 % 544),
SUM(c4 % 545), SUM(c4 % 546), SUM(c4 % 547), SUM(c4 % 548), SUM(c4 % 549),
SUM(c4 % 550), SUM(c4 % 551), SUM(c4 % 552), SUM(c4 % 553), SUM(c4 % 554),
SUM(c4 % 555), SUM(c4 % 556), SUM(c4 % 557), SUM(c4 % 558), SUM(c4 % 559),
SUM(c4 % 560), SUM(c4 % 561), SUM(c4 % 562), SUM(c4 % 563), SUM(c4 % 564),
SUM(c4 % 565), SUM(c4 % 566), SUM(c4 % 567), SUM(c4 % 568), SUM(c4 % 569),
SUM(c4 % 570), SUM(c4 % 571), SUM(c4 % 572), SUM(c4 % 573), SUM(c4 % 574),
SUM(c4 % 575), SUM(c4 % 576), SUM(c4 % 577), SUM(c4 % 578), SUM(c4 % 579),
SUM(c4 % 580), SUM(c4 % 581), SUM(c4 % 582), SUM(c4 % 583), SUM(c4 % 584),
SUM(c4 % 585), SUM(c4 % 586), SUM(c4 % 587), SUM(c4 % 588), SUM(c4 % 589),
SUM(c4 % 590), SUM(c4 % 591), SUM(c4 % 592), SUM(c4 % 593), SUM(c4 % 594),
SUM(c4 % 595), SUM(c4 % 596), SUM(c4 % 597), SUM(c4 % 598), SUM(c4 % 599),
SUM(c4 % 600), SUM(c4 % 601), SUM(c4 % 602), SUM(c4 % 603), SUM(c4 % 604),
SUM(c4 % 605), SUM(c4 % 606), SUM(c4 % 607), SUM(c4 % 608), SUM(c4 % 609),
SUM(c4 % 610), SUM(c4 % 611), SUM(c4 % 612), SUM(c4 % 613), SUM(c4 % 614),
SUM(c4 % 615), SUM(c4 % 616), SUM(c4 % 617), SUM(c4 % 618), SUM(c4 % 619),
SUM(c4 % 620), SUM(c4 % 621), SUM(c4 % 622), SUM(c4 % 623), SUM(c4 % 624),
SUM(c4 % 625), SUM(c4 % 626), SUM(c4 % 627), SUM(c4 % 628), SUM(c4 % 629),
SUM(c4 % 630), SUM(c4 % 631), SUM(c4 % 632), SUM(c4 % 633), SUM(c4 % 634),
SUM(c4 % 635), SUM(c4 % 636), SUM(c4 % 637), SUM(c4 % 638), SUM(c4 % 639),
SUM(c4 % 640), SUM(c4 % 641), SUM(c4 % 642), SUM(c4 % 643), SUM(c4 % 644),
SUM(c4 % 645), SUM(c4 % 646), SUM(c4 % 647), SUM(c4 % 648), SUM(c4 % 649),
SUM(c4 % 650), SUM(c4 % 651), SUM(c4 % 652), SUM(c4 % 653), SUM(c4 % 654),
SUM(c4 % 655), SUM(c4 % 656), SUM(c4 % 657), SUM(c4 % 658), SUM(c4 % 659),
SUM(c4 % 660), SUM(c4 % 661), SUM(c4 % 662), SUM(c4 % 663), SUM(c4 % 664),
SUM(c4 % 665), SUM(c4 % 666), SUM(c4 % 667), SUM(c4 % 668), SUM(c4 % 669),
SUM(c4 % 670), SUM(c4 % 671), SUM(c4 % 672), SUM(c4 % 673), SUM(c4 % 674),
SUM(c4 % 675), SUM(c4 % 676), SUM(c4 % 677), SUM(c4 % 678), SUM(c4 % 679),
SUM(c4 % 680), SUM(c4 % 681), SUM(c4 % 682), SUM(c4 % 683), SUM(c4 % 684),
SUM(c4 % 685), SUM(c4 % 686), SUM(c4 % 687), SUM(c4 % 688), SUM(c4 % 689),
SUM(c4 % 690), SUM(c4 % 691), SUM(c4 % 692), SUM(c4 % 693), SUM(c4 % 694),
SUM(c4 % 695), SUM(c4 % 696), SUM(c4 % 697), SUM(c4 % 698), SUM(c4 % 699),
SUM(c4 % 700), SUM(c4 % 701), SUM(c4 % 702), SUM(c4 % 703), SUM(c4 % 704),
SUM(c4 % 705), SUM(c4 % 706), SUM(c4 % 707), SUM(c4 % 708), SUM(c4 % 709),
SUM(c4 % 710), SUM(c4 % 711), SUM(c4 % 712), SUM(c4 % 713), SUM(c4 % 714),
SUM(c4 % 715), SUM(c4 % 716), SUM(c4 % 717), SUM(c4 % 718), SUM(c4 % 719),
SUM(c4 % 720), SUM(c4 % 721), SUM(c4 % 722), SUM(c4 % 723), SUM(c4 % 724),
SUM(c4 % 725), SUM(c4 % 726), SUM(c4 % 727), SUM(c4 % 728), SUM(c4 % 729),
SUM(c4 % 730), SUM(c4 % 731), SUM(c4 % 732), SUM(c4 % 733), SUM(c4 % 734),
SUM(c4 % 735), SUM(c4 % 736), SUM(c4 % 737), SUM(c4 % 738), SUM(c4 % 739),
SUM(c4 % 740), SUM(c4 % 741), SUM(c4 % 742), SUM(c4 % 743), SUM(c4 % 744),
SUM(c4 % 745), SUM(c4 % 746), SUM(c4 % 747), SUM(c4 % 748), SUM(c4 % 749),
SUM(c4 % 750), SUM(c4 % 751), SUM(c4 % 752), SUM(c4 % 753), SUM(c4 % 754),
SUM(c4 % 755), SUM(c4 % 756), SUM(c4 % 757), SUM(c4 % 758), SUM(c4 % 759),
SUM(c4 % 760), SUM(c4 % 761), SUM(c4 % 762), SUM(c4 % 763), SUM(c4 % 764),
SUM(c4 % 765), SUM(c4 % 766), SUM(c4 % 767), SUM(c4 % 768), SUM(c4 % 769),
SUM(c4 % 770), SUM(c4 % 771), SUM(c4 % 772), SUM(c4 % 773), SUM(c4 % 774),
SUM(c4 % 775), SUM(c4 % 776), SUM(c4 % 777), SUM(c4 % 778), SUM(c4 % 779),
SUM(c4 % 780), SUM(c4 % 781), SUM(c4 % 782), SUM(c4 % 783), SUM(c4 % 784),
SUM(c4 % 785), SUM(c4 % 786), SUM(c4 % 787), SUM(c4 % 788), SUM(c4 % 789),
SUM(c4 % 790), SUM(c4 % 791), SUM(c4 % 792), SUM(c4 % 793), SUM(c4 % 794),
SUM(c4 % 795), SUM(c4 % 796), SUM(c4 % 797), SUM(c4 % 798), SUM(c4 % 799),
SUM(c4 % 800), SUM(c4 % 801), SUM(c4 % 802), SUM(c4 % 803), SUM(c4 % 804),
SUM(c4 % 805), SUM(c4 % 806), SUM(c4 % 807), SUM(c4 % 808), SUM(c4 % 809),
SUM(c4 % 810), SUM(c4 % 811), SUM(c4 % 812), SUM(c4 % 813), SUM(c4 % 814),
SUM(c4 % 815), SUM(c4 % 816), SUM(c4 % 817), SUM(c4 % 818), SUM(c4 % 819),
SUM(c4 % 820), SUM(c4 % 821), SUM(c4 % 822), SUM(c4 % 823), SUM(c4 % 824),
SUM(c4 % 825), SUM(c4 % 826), SUM(c4 % 827), SUM(c4 % 828), SUM(c4 % 829),
SUM(c4 % 830), SUM(c4 % 831), SUM(c4 % 832), SUM(c4 % 833), SUM(c4 % 834),
SUM(c4 % 835), SUM(c4 % 836), SUM(c4 % 837), SUM(c4 % 838), SUM(c4 % 839),
SUM(c4 % 840), SUM(c4 % 841), SUM(c4 % 842), SUM(c4 % 843), SUM(c4 % 844),
SUM(c4 % 845), SUM(c4 % 846), SUM(c4 % 847), SUM(c4 % 848), SUM(c4 % 849),
SUM(c4 % 850), SUM(c4 % 851), SUM(c4 % 852), SUM(c4 % 853), SUM(c4 % 854),
SUM(c4 % 855), SUM(c4 % 856), SUM(c4 % 857), SUM(c4 % 858), SUM(c4 % 859),
SUM(c4 % 860), SUM(c4 % 861), SUM(c4 % 862), SUM(c4 % 863), SUM(c4 % 864),
SUM(c4 % 865), SUM(c4 % 866), SUM(c4 % 867), SUM(c4 % 868), SUM(c4 % 869),
SUM(c4 % 870), SUM(c4 % 871), SUM(c4 % 872), SUM(c4 % 873), SUM(c4 % 874),
SUM(c4 % 875), SUM(c4 % 876), SUM(c4 % 877), SUM(c4 % 878), SUM(c4 % 879),
SUM(c4 % 880), SUM(c4 % 881), SUM(c4 % 882), SUM(c4 % 883), SUM(c4 % 884),
SUM(c4 % 885), SUM(c4 % 886), SUM(c4 % 887), SUM(c4 % 888), SUM(c4 % 889),
SUM(c4 % 890), SUM(c4 % 891), SUM(c4 % 892), SUM(c4 % 893), SUM(c4 % 894),
SUM(c4 % 895), SUM(c4 % 896), SUM(c4 % 897), SUM(c4 % 898), SUM(c4 % 899),
SUM(c4 % 900), SUM(c4 % 901), SUM(c4 % 902), SUM(c4 % 903), SUM(c4 % 904),
SUM(c4 % 905), SUM(c4 % 906), SUM(c4 % 907), SUM(c4 % 908), SUM(c4 % 909),
SUM(c4 % 910), SUM(c4 % 911), SUM(c4 % 912), SUM(c4 % 913), SUM(c4 % 914),
SUM(c4 % 915), SUM(c4 % 916), SUM(c4 % 917), SUM(c4 % 918), SUM(c4 % 919),
SUM(c4 % 920), SUM(c4 % 921), SUM(c4 % 922), SUM(c4 % 923), SUM(c4 % 924),
SUM(c4 % 925), SUM(c4 % 926), SUM(c4 % 927), SUM(c4 % 928), SUM(c4 % 929),
SUM(c4 % 930), SUM(c4 % 931), SUM(c4 % 932), SUM(c4 % 933), SUM(c4 % 934),
SUM(c4 % 935), SUM(c4 % 936), SUM(c4 % 937), SUM(c4 % 938), SUM(c4 % 939),
SUM(c4 % 940), SUM(c4 % 941), SUM(c4 % 942), SUM(c4 % 943), SUM(c4 % 944),
SUM(c4 % 945), SUM(c4 % 946), SUM(c4 % 947), SUM(c4 % 948), SUM(c4 % 949),
SUM(c4 % 950), SUM(c4 % 951), SUM(c4 % 952), SUM(c4 % 953), SUM(c4 % 954),
SUM(c4 % 955), SUM(c4 % 956), SUM(c4 % 957), SUM(c4 % 958), SUM(c4 % 959),
SUM(c4 % 960), SUM(c4 % 961), SUM(c4 % 962), SUM(c4 % 963), SUM(c4 % 964),
SUM(c4 % 965), SUM(c4 % 966), SUM(c4 % 967), SUM(c4 % 968), SUM(c4 % 969),
SUM(c4 % 970), SUM(c4 % 971), SUM(c4 % 972), SUM(c4 % 973), SUM(c4 % 974),
SUM(c4 % 975), SUM(c4 % 976), SUM(c4 % 977), SUM(c4 % 978), SUM(c4 % 979),
SUM(c4 % 980), SUM(c4 % 981), SUM(c4 % 982), SUM(c4 % 983), SUM(c4 % 984),
SUM(c4 % 985), SUM(c4 % 986), SUM(c4 % 987), SUM(c4 % 988), SUM(c4 % 989),
SUM(c4 % 990), SUM(c4 % 991), SUM(c4 % 992), SUM(c4 % 993), SUM(c4 % 994),
SUM(c4 % 995), SUM(c4 % 996), SUM(c4 % 997), SUM(c4 % 998), SUM(c4 % 999),
SUM(c4 % 1000), SUM(c4 % 1001), SUM(c4 % 1002), SUM(c4 % 1003), SUM(c4 % 1004),
SUM(c4 % 1005), SUM(c4 % 1006), SUM(c4 % 1007), SUM(c4 % 1008), SUM(c4 % 1009),
SUM(c4 % 1010), SUM(c4 % 1011), SUM(c4 % 1012), SUM(c4 % 1013), SUM(c4 % 1014),
SUM(c4 % 1015), SUM(c4 % 1016), SUM(c4 % 1017), SUM(c4 % 1018), SUM(c4 % 1019),
SUM(c4 % 1020), SUM(c4 % 1021), SUM(c4 % 1022), SUM(c4 % 1023), SUM(c4 % 1024),
SUM(c4 % 1025), SUM(c4 % 1026), SUM(c4 % 1027), SUM(c4 % 1028), SUM(c4 % 1029),
SUM(c4 % 1030), SUM(c4 % 1031), SUM(c4 % 1032), SUM(c4 % 1033), SUM(c4 % 1034),
SUM(c4 % 1035), SUM(c4 % 1036), SUM(c4 % 1037), SUM(c4 % 1038), SUM(c4 % 1039),
SUM(c4 % 1040), SUM(c4 % 1041), SUM(c4 % 1042), SUM(c4 % 1043), SUM(c4 % 1044),
SUM(c4 % 1045), SUM(c4 % 1046), SUM(c4 % 1047), SUM(c4 % 1048), SUM(c4 % 1049),
SUM(c4 % 1050), SUM(c4 % 1051), SUM(c4 % 1052), SUM(c4 % 1053), SUM(c4 % 1054),
SUM(c4 % 1055), SUM(c4 % 1056), SUM(c4 % 1057), SUM(c4 % 1058), SUM(c4 % 1059),
SUM(c4 % 1060), SUM(c4 % 1061), SUM(c4 % 1062), SUM(c4 % 1063), SUM(c4 % 1064),
SUM(c4 % 1065), SUM(c4 % 1066), SUM(c4 % 1067), SUM(c4 % 1068), SUM(c4 % 1069),
SUM(c4 % 1070), SUM(c4 % 1071), SUM(c4 % 1072), SUM(c4 % 1073), SUM(c4 % 1074),
SUM(c4 % 1075), SUM(c4 % 1076), SUM(c4 % 1077), SUM(c4 % 1078), SUM(c4 % 1079),
SUM(c4 % 1080), SUM(c4 % 1081), SUM(c4 % 1082), SUM(c4 % 1083), SUM(c4 % 1084),
SUM(c4 % 1085), SUM(c4 % 1086), SUM(c4 % 1087), SUM(c4 % 1088), SUM(c4 % 1089),
SUM(c4 % 1090), SUM(c4 % 1091), SUM(c4 % 1092), SUM(c4 % 1093), SUM(c4 % 1094),
SUM(c4 % 1095), SUM(c4 % 1096), SUM(c4 % 1097), SUM(c4 % 1098), SUM(c4 % 1099),
SUM(c4 % 1100), SUM(c4 % 1101), SUM(c4 % 1102), SUM(c4 % 1103), SUM(c4 % 1104),
SUM(c4 % 1105), SUM(c4 % 1106), SUM(c4 % 1107), SUM(c4 % 1108), SUM(c4 % 1109),
SUM(c4 % 1110), SUM(c4 % 1111), SUM(c4 % 1112), SUM(c4 % 1113), SUM(c4 % 1114),
SUM(c4 % 1115), SUM(c4 % 1116), SUM(c4 % 1117), SUM(c4 % 1118), SUM(c4 % 1119),
SUM(c4 % 1120), SUM(c4 % 1121), SUM(c4 % 1122), SUM(c4 % 1123), SUM(c4 % 1124),
SUM(c4 % 1125), SUM(c4 % 1126), SUM(c4 % 1127), SUM(c4 % 1128), SUM(c4 % 1129),
SUM(c4 % 1130), SUM(c4 % 1131), SUM(c4 % 1132), SUM(c4 % 1133), SUM(c4 % 1134),
SUM(c4 % 1135), SUM(c4 % 1136), SUM(c4 % 1137), SUM(c4 % 1138), SUM(c4 % 1139),
SUM(c4 % 1140), SUM(c4 % 1141), SUM(c4 % 1142), SUM(c4 % 1143), SUM(c4 % 1144),
SUM(c4 % 1145), SUM(c4 % 1146), SUM(c4 % 1147), SUM(c4 % 1148), SUM(c4 % 1149),
SUM(c4 % 1150), SUM(c4 % 1151), SUM(c4 % 1152), SUM(c4 % 1153), SUM(c4 % 1154),
SUM(c4 % 1155), SUM(c4 % 1156), SUM(c4 % 1157), SUM(c4 % 1158), SUM(c4 % 1159),
SUM(c4 % 1160), SUM(c4 % 1161), SUM(c4 % 1162), SUM(c4 % 1163), SUM(c4 % 1164),
SUM(c4 % 1165), SUM(c4 % 1166), SUM(c4 % 1167), SUM(c4 % 1168), SUM(c4 % 1169),
SUM(c4 % 1170), SUM(c4 % 1171), SUM(c4 % 1172), SUM(c4 % 1173), SUM(c4 % 1174),
SUM(c4 % 1175), SUM(c4 % 1176), SUM(c4 % 1177), SUM(c4 % 1178), SUM(c4 % 1179),
SUM(c4 % 1180), SUM(c4 % 1181), SUM(c4 % 1182), SUM(c4 % 1183), SUM(c4 % 1184),
SUM(c4 % 1185), SUM(c4 % 1186), SUM(c4 % 1187), SUM(c4 % 1188), SUM(c4 % 1189),
SUM(c4 % 1190), SUM(c4 % 1191), SUM(c4 % 1192), SUM(c4 % 1193), SUM(c4 % 1194),
SUM(c4 % 1195), SUM(c4 % 1196), SUM(c4 % 1197), SUM(c4 % 1198), SUM(c4 % 1199),
SUM(c4 % 1200), SUM(c4 % 1201), SUM(c4 % 1202), SUM(c4 % 1203), SUM(c4 % 1204),
SUM(c4 % 1205), SUM(c4 % 1206), SUM(c4 % 1207), SUM(c4 % 1208), SUM(c4 % 1209),
SUM(c4 % 1210), SUM(c4 % 1211), SUM(c4 % 1212), SUM(c4 % 1213), SUM(c4 % 1214),
SUM(c4 % 1215), SUM(c4 % 1216), SUM(c4 % 1217), SUM(c4 % 1218), SUM(c4 % 1219),
SUM(c4 % 1220), SUM(c4 % 1221), SUM(c4 % 1222), SUM(c4 % 1223), SUM(c4 % 1224),
SUM(c4 % 1225), SUM(c4 % 1226), SUM(c4 % 1227), SUM(c4 % 1228), SUM(c4 % 1229),
SUM(c4 % 1230), SUM(c4 % 1231), SUM(c4 % 1232), SUM(c4 % 1233), SUM(c4 % 1234),
SUM(c4 % 1235), SUM(c4 % 1236), SUM(c4 % 1237), SUM(c4 % 1238), SUM(c4 % 1239),
SUM(c4 % 1240), SUM(c4 % 1241), SUM(c4 % 1242), SUM(c4 % 1243), SUM(c4 % 1244),
SUM(c4 % 1245), SUM(c4 % 1246), SUM(c4 % 1247), SUM(c4 % 1248), SUM(c4 % 1249),
SUM(c4 % 1250), SUM(c4 % 1251), SUM(c4 % 1252), SUM(c4 % 1253), SUM(c4 % 1254),
SUM(c4 % 1255), SUM(c4 % 1256), SUM(c4 % 1257), SUM(c4 % 1258), SUM(c4 % 1259),
SUM(c4 % 1260), SUM(c4 % 1261), SUM(c4 % 1262), SUM(c4 % 1263), SUM(c4 % 1264),
SUM(c4 % 1265), SUM(c4 % 1266), SUM(c4 % 1267), SUM(c4 % 1268), SUM(c4 % 1269),
SUM(c4 % 1270), SUM(c4 % 1271), SUM(c4 % 1272), SUM(c4 % 1273), SUM(c4 % 1274),
SUM(c4 % 1275), SUM(c4 % 1276), SUM(c4 % 1277), SUM(c4 % 1278), SUM(c4 % 1279),
SUM(c4 % 1280), SUM(c4 % 1281), SUM(c4 % 1282), SUM(c4 % 1283), SUM(c4 % 1284),
SUM(c4 % 1285), SUM(c4 % 1286), SUM(c4 % 1287), SUM(c4 % 1288), SUM(c4 % 1289),
SUM(c4 % 1290), SUM(c4 % 1291), SUM(c4 % 1292), SUM(c4 % 1293), SUM(c4 % 1294),
SUM(c4 % 1295), SUM(c4 % 1296), SUM(c4 % 1297), SUM(c4 % 1298), SUM(c4 % 1299),
SUM(c4 % 1300), SUM(c4 % 1301), SUM(c4 % 1302), SUM(c4 % 1303), SUM(c4 % 1304),
SUM(c4 % 1305), SUM(c4 % 1306), SUM(c4 % 1307), SUM(c4 % 1308), SUM(c4 % 1309),
SUM(c4 % 1310), SUM(c4 % 1311), SUM(c4 % 1312), SUM(c4 % 1313), SUM(c4 % 1314),
SUM(c4 % 1315), SUM(c4 % 1316), SUM(c4 % 1317), SUM(c4 % 1318), SUM(c4 % 1319),
SUM(c4 % 1320), SUM(c4 % 1321), SUM(c4 % 1322), SUM(c4 % 1323), SUM(c4 % 1324),
SUM(c4 % 1325), SUM(c4 % 1326), SUM(c4 % 1327), SUM(c4 % 1328), SUM(c4 % 1329),
SUM(c4 % 1330), SUM(c4 % 1331), SUM(c4 % 1332), SUM(c4 % 1333), SUM(c4 % 1334),
SUM(c4 % 1335), SUM(c4 % 1336), SUM(c4 % 1337), SUM(c4 % 1338), SUM(c4 % 1339),
SUM(c4 % 1340), SUM(c4 % 1341), SUM(c4 % 1342), SUM(c4 % 1343), SUM(c4 % 1344),
SUM(c4 % 1345), SUM(c4 % 1346), SUM(c4 % 1347), SUM(c4 % 1348), SUM(c4 % 1349),
SUM(c4 % 1350), SUM(c4 % 1351), SUM(c4 % 1352), SUM(c4 % 1353), SUM(c4 % 1354),
SUM(c4 % 1355), SUM(c4 % 1356), SUM(c4 % 1357), SUM(c4 % 1358), SUM(c4 % 1359),
SUM(c4 % 1360), SUM(c4 % 1361), SUM(c4 % 1362), SUM(c4 % 1363), SUM(c4 % 1364),
SUM(c4 % 1365), SUM(c4 % 1366), SUM(c4 % 1367), SUM(c4 % 1368), SUM(c4 % 1369),
SUM(c4 % 1370), SUM(c4 % 1371), SUM(c4 % 1372), SUM(c4 % 1373), SUM(c4 % 1374),
SUM(c4 % 1375), SUM(c4 % 1376), SUM(c4 % 1377), SUM(c4 % 1378), SUM(c4 % 1379),
SUM(c4 % 1380), SUM(c4 % 1381), SUM(c4 % 1382), SUM(c4 % 1383), SUM(c4 % 1384),
SUM(c4 % 1385), SUM(c4 % 1386), SUM(c4 % 1387), SUM(c4 % 1388), SUM(c4 % 1389),
SUM(c4 % 1390), SUM(c4 % 1391), SUM(c4 % 1392), SUM(c4 % 1393), SUM(c4 % 1394),
SUM(c4 % 1395), SUM(c4 % 1396), SUM(c4 % 1397), SUM(c4 % 1398), SUM(c4 % 1399),
SUM(c4 % 1400), SUM(c4 % 1401), SUM(c4 % 1402), SUM(c4 % 1403), SUM(c4 % 1404),
SUM(c4 % 1405), SUM(c4 % 1406), SUM(c4 % 1407), SUM(c4 % 1408), SUM(c4 % 1409),
SUM(c4 % 1410), SUM(c4 % 1411), SUM(c4 % 1412), SUM(c4 % 1413), SUM(c4 % 1414),
SUM(c4 % 1415), SUM(c4 % 1416), SUM(c4 % 1417), SUM(c4 % 1418), SUM(c4 % 1419),
SUM(c4 % 1420), SUM(c4 % 1421), SUM(c4 % 1422), SUM(c4 % 1423), SUM(c4 % 1424),
SUM(c4 % 1425), SUM(c4 % 1426), SUM(c4 % 1427), SUM(c4 % 1428), SUM(c4 % 1429),
SUM(c4 % 1430), SUM(c4 % 1431), SUM(c4 % 1432), SUM(c4 % 1433), SUM(c4 % 1434),
SUM(c4 % 1435), SUM(c4 % 1436), SUM(c4 % 1437), SUM(c4 % 1438), SUM(c4 % 1439),
SUM(c4 % 1440), SUM(c4 % 1441), SUM(c4 % 1442), SUM(c4 % 1443), SUM(c4 % 1444),
SUM(c4 % 1445), SUM(c4 % 1446), SUM(c4 % 1447), SUM(c4 % 1448), SUM(c4 % 1449),
SUM(c4 % 1450), SUM(c4 % 1451), SUM(c4 % 1452), SUM(c4 % 1453), SUM(c4 % 1454),
SUM(c4 % 1455), SUM(c4 % 1456), SUM(c4 % 1457), SUM(c4 % 1458), SUM(c4 % 1459),
SUM(c4 % 1460), SUM(c4 % 1461), SUM(c4 % 1462), SUM(c4 % 1463), SUM(c4 % 1464),
SUM(c4 % 1465), SUM(c4 % 1466), SUM(c4 % 1467), SUM(c4 % 1468), SUM(c4 % 1469),
SUM(c4 % 1470), SUM(c4 % 1471), SUM(c4 % 1472), SUM(c4 % 1473), SUM(c4 % 1474),
SUM(c4 % 1475), SUM(c4 % 1476), SUM(c4 % 1477), SUM(c4 % 1478), SUM(c4 % 1479),
SUM(c4 % 1480), SUM(c4 % 1481), SUM(c4 % 1482), SUM(c4 % 1483), SUM(c4 % 1484),
SUM(c4 % 1485), SUM(c4 % 1486), SUM(c4 % 1487), SUM(c4 % 1488), SUM(c4 % 1489),
SUM(c4 % 1490), SUM(c4 % 1491), SUM(c4 % 1492), SUM(c4 % 1493), SUM(c4 % 1494),
SUM(c4 % 1495), SUM(c4 % 1496), SUM(c4 % 1497), SUM(c4 % 1498), SUM(c4 % 1499),
SUM(c4 % 1500), SUM(c4 % 1501), SUM(c4 % 1502), SUM(c4 % 1503), SUM(c4 % 1504),
SUM(c4 % 1505), SUM(c4 % 1506), SUM(c4 % 1507), SUM(c4 % 1508), SUM(c4 % 1509),
SUM(c4 % 1510), SUM(c4 % 1511), SUM(c4 % 1512), SUM(c4 % 1513), SUM(c4 % 1514),
SUM(c4 % 1515), SUM(c4 % 1516), SUM(c4 % 1517), SUM(c4 % 1518), SUM(c4 % 1519),
SUM(c4 % 1520), SUM(c4 % 1521), SUM(c4 % 1522), SUM(c4 % 1523), SUM(c4 % 1524),
SUM(c4 % 1525), SUM(c4 % 1526), SUM(c4 % 1527), SUM(c4 % 1528), SUM(c4 % 1529),
SUM(c4 % 1530), SUM(c4 % 1531), SUM(c4 % 1532), SUM(c4 % 1533), SUM(c4 % 1534),
SUM(c4 % 1535), SUM(c4 % 1536), SUM(c4 % 1537), SUM(c4 % 1538), SUM(c4 % 1539),
SUM(c4 % 1540), SUM(c4 % 1541), SUM(c4 % 1542), SUM(c4 % 1543), SUM(c4 % 1544),
SUM(c4 % 1545), SUM(c4 % 1546), SUM(c4 % 1547), SUM(c4 % 1548), SUM(c4 % 1549),
SUM(c4 % 1550), SUM(c4 % 1551), SUM(c4 % 1552), SUM(c4 % 1553), SUM(c4 % 1554),
SUM(c4 % 1555), SUM(c4 % 1556), SUM(c4 % 1557), SUM(c4 % 1558), SUM(c4 % 1559),
SUM(c4 % 1560), SUM(c4 % 1561), SUM(c4 % 1562), SUM(c4 % 1563), SUM(c4 % 1564),
SUM(c4 % 1565), SUM(c4 % 1566), SUM(c4 % 1567), SUM(c4 % 1568), SUM(c4 % 1569),
SUM(c4 % 1570), SUM(c4 % 1571), SUM(c4 % 1572), SUM(c4 % 1573), SUM(c4 % 1574),
SUM(c4 % 1575), SUM(c4 % 1576), SUM(c4 % 1577), SUM(c4 % 1578), SUM(c4 % 1579),
SUM(c4 % 1580), SUM(c4 % 1581), SUM(c4 % 1582), SUM(c4 % 1583), SUM(c4 % 1584),
SUM(c4 % 1585), SUM(c4 % 1586), SUM(c4 % 1587), SUM(c4 % 1588), SUM(c4 % 1589),
SUM(c4 % 1590), SUM(c4 % 1591), SUM(c4 % 1592), SUM(c4 % 1593), SUM(c4 % 1594),
SUM(c4 % 1595), SUM(c4 % 1596), SUM(c4 % 1597), SUM(c4 % 1598), SUM(c4 % 1599),
SUM(c4 % 1600), SUM(c4 % 1601), SUM(c4 % 1602), SUM(c4 % 1603), SUM(c4 % 1604),
SUM(c4 % 1605), SUM(c4 % 1606), SUM(c4 % 1607), SUM(c4 % 1608), SUM(c4 % 1609),
SUM(c4 % 1610), SUM(c4 % 1611), SUM(c4 % 1612), SUM(c4 % 1613), SUM(c4 % 1614),
SUM(c4 % 1615), SUM(c4 % 1616), SUM(c4 % 1617), SUM(c4 % 1618), SUM(c4 % 1619),
SUM(c4 % 1620), SUM(c4 % 1621), SUM(c4 % 1622), SUM(c4 % 1623), SUM(c4 % 1624),
SUM(c4 % 1625), SUM(c4 % 1626), SUM(c4 % 1627), SUM(c4 % 1628), SUM(c4 % 1629),
SUM(c4 % 1630), SUM(c4 % 1631), SUM(c4 % 1632), SUM(c4 % 1633), SUM(c4 % 1634),
SUM(c4 % 1635), SUM(c4 % 1636), SUM(c4 % 1637), SUM(c4 % 1638), SUM(c4 % 1639),
SUM(c4 % 1640), SUM(c4 % 1641), SUM(c4 % 1642), SUM(c4 % 1643), SUM(c4 % 1644),
SUM(c4 % 1645), SUM(c4 % 1646), SUM(c4 % 1647), SUM(c4 % 1648), SUM(c4 % 1649),
SUM(c4 % 1650), SUM(c4 % 1651), SUM(c4 % 1652), SUM(c4 % 1653), SUM(c4 % 1654),
SUM(c4 % 1655), SUM(c4 % 1656), SUM(c4 % 1657), SUM(c4 % 1658), SUM(c4 % 1659),
SUM(c4 % 1660), SUM(c4 % 1661), SUM(c4 % 1662), SUM(c4 % 1663), SUM(c4 % 1664),
SUM(c4 % 1665), SUM(c4 % 1666), SUM(c4 % 1667), SUM(c4 % 1668), SUM(c4 % 1669),
SUM(c4 % 1670), SUM(c4 % 1671), SUM(c4 % 1672), SUM(c4 % 1673), SUM(c4 % 1674),
SUM(c4 % 1675), SUM(c4 % 1676), SUM(c4 % 1677), SUM(c4 % 1678), SUM(c4 % 1679),
SUM(c4 % 1680), SUM(c4 % 1681), SUM(c4 % 1682), SUM(c4 % 1683), SUM(c4 % 1684),
SUM(c4 % 1685), SUM(c4 % 1686), SUM(c4 % 1687), SUM(c4 % 1688), SUM(c4 % 1689),
SUM(c4 % 1690), SUM(c4 % 1691), SUM(c4 % 1692), SUM(c4 % 1693), SUM(c4 % 1694),
SUM(c4 % 1695), SUM(c4 % 1696), SUM(c4 % 1697), SUM(c4 % 1698), SUM(c4 % 1699),
SUM(c4 % 1700), SUM(c4 % 1701), SUM(c4 % 1702), SUM(c4 % 1703), SUM(c4 % 1704),
SUM(c4 % 1705), SUM(c4 % 1706), SUM(c4 % 1707), SUM(c4 % 1708), SUM(c4 % 1709),
SUM(c4 % 1710), SUM(c4 % 1711), SUM(c4 % 1712), SUM(c4 % 1713), SUM(c4 % 1714),
SUM(c4 % 1715), SUM(c4 % 1716), SUM(c4 % 1717), SUM(c4 % 1718), SUM(c4 % 1719),
SUM(c4 % 1720), SUM(c4 % 1721), SUM(c4 % 1722), SUM(c4 % 1723), SUM(c4 % 1724),
SUM(c4 % 1725), SUM(c4 % 1726), SUM(c4 % 1727), SUM(c4 % 1728), SUM(c4 % 1729),
SUM(c4 % 1730), SUM(c4 % 1731), SUM(c4 % 1732), SUM(c4 % 1733), SUM(c4 % 1734),
SUM(c4 % 1735), SUM(c4 % 1736), SUM(c4 % 1737), SUM(c4 % 1738), SUM(c4 % 1739),
SUM(c4 % 1740), SUM(c4 % 1741), SUM(c4 % 1742), SUM(c4 % 1743), SUM(c4 % 1744),
SUM(c4 % 1745), SUM(c4 % 1746), SUM(c4 % 1747), SUM(c4 % 1748), SUM(c4 % 1749),
SUM(c4 % 1750), SUM(c4 % 1751), SUM(c4 % 1752), SUM(c4 % 1753), SUM(c4 % 1754),
SUM(c4 % 1755), SUM(c4 % 1756), SUM(c4 % 1757), SUM(c4 % 1758), SUM(c4 % 1759),
SUM(c4 % 1760), SUM(c4 % 1761), SUM(c4 % 1762), SUM(c4 % 1763), SUM(c4 % 1764),
SUM(c4 % 1765), SUM(c4 % 1766), SUM(c4 % 1767), SUM(c4 % 1768), SUM(c4 % 1769),
SUM(c4 % 1770), SUM(c4 % 1771), SUM(c4 % 1772), SUM(c4 % 1773), SUM(c4 % 1774),
SUM(c4 % 1775), SUM(c4 % 1776), SUM(c4 % 1777), SUM(c4 % 1778), SUM(c4 % 1779),
SUM(c4 % 1780), SUM(c4 % 1781), SUM(c4 % 1782), SUM(c4 % 1783), SUM(c4 % 1784),
SUM(c4 % 1785), SUM(c4 % 1786), SUM(c4 % 1787), SUM(c4 % 1788), SUM(c4 % 1789),
SUM(c4 % 1790), SUM(c4 % 1791), SUM(c4 % 1792), SUM(c4 % 1793), SUM(c4 % 1794),
SUM(c4 % 1795), SUM(c4 % 1796), SUM(c4 % 1797), SUM(c4 % 1798), SUM(c4 % 1799),
SUM(c4 % 1800), SUM(c4 % 1801), SUM(c4 % 1802), SUM(c4 % 1803), SUM(c4 % 1804),
SUM(c4 % 1805), SUM(c4 % 1806), SUM(c4 % 1807), SUM(c4 % 1808), SUM(c4 % 1809),
SUM(c4 % 1810), SUM(c4 % 1811), SUM(c4 % 1812), SUM(c4 % 1813), SUM(c4 % 1814),
SUM(c4 % 1815), SUM(c4 % 1816), SUM(c4 % 1817), SUM(c4 % 1818), SUM(c4 % 1819),
SUM(c4 % 1820), SUM(c4 % 1821), SUM(c4 % 1822), SUM(c4 % 1823), SUM(c4 % 1824),
SUM(c4 % 1825), SUM(c4 % 1826), SUM(c4 % 1827), SUM(c4 % 1828), SUM(c4 % 1829),
SUM(c4 % 1830), SUM(c4 % 1831), SUM(c4 % 1832), SUM(c4 % 1833), SUM(c4 % 1834),
SUM(c4 % 1835), SUM(c4 % 1836), SUM(c4 % 1837), SUM(c4 % 1838), SUM(c4 % 1839),
SUM(c4 % 1840), SUM(c4 % 1841), SUM(c4 % 1842), SUM(c4 % 1843), SUM(c4 % 1844),
SUM(c4 % 1845), SUM(c4 % 1846), SUM(c4 % 1847), SUM(c4 % 1848), SUM(c4 % 1849),
SUM(c4 % 1850), SUM(c4 % 1851), SUM(c4 % 1852), SUM(c4 % 1853), SUM(c4 % 1854),
SUM(c4 % 1855), SUM(c4 % 1856), SUM(c4 % 1857), SUM(c4 % 1858), SUM(c4 % 1859),
SUM(c4 % 1860), SUM(c4 % 1861), SUM(c4 % 1862), SUM(c4 % 1863), SUM(c4 % 1864),
SUM(c4 % 1865), SUM(c4 % 1866), SUM(c4 % 1867), SUM(c4 % 1868), SUM(c4 % 1869),
SUM(c4 % 1870), SUM(c4 % 1871), SUM(c4 % 1872), SUM(c4 % 1873), SUM(c4 % 1874),
SUM(c4 % 1875), SUM(c4 % 1876), SUM(c4 % 1877), SUM(c4 % 1878), SUM(c4 % 1879),
SUM(c4 % 1880), SUM(c4 % 1881), SUM(c4 % 1882), SUM(c4 % 1883), SUM(c4 % 1884),
SUM(c4 % 1885), SUM(c4 % 1886), SUM(c4 % 1887), SUM(c4 % 1888), SUM(c4 % 1889),
SUM(c4 % 1890), SUM(c4 % 1891), SUM(c4 % 1892), SUM(c4 % 1893), SUM(c4 % 1894),
SUM(c4 % 1895), SUM(c4 % 1896), SUM(c4 % 1897), SUM(c4 % 1898), SUM(c4 % 1899),
SUM(c4 % 1900), SUM(c4 % 1901), SUM(c4 % 1902), SUM(c4 % 1903), SUM(c4 % 1904),
SUM(c4 % 1905), SUM(c4 % 1906), SUM(c4 % 1907), SUM(c4 % 1908), SUM(c4 % 1909),
SUM(c4 % 1910), SUM(c4 % 1911), SUM(c4 % 1912), SUM(c4 % 1913), SUM(c4 % 1914),
SUM(c4 % 1915), SUM(c4 % 1916), SUM(c4 % 1917), SUM(c4 % 1918), SUM(c4 % 1919),
SUM(c4 % 1920), SUM(c4 % 1921), SUM(c4 % 1922), SUM(c4 % 1923), SUM(c4 % 1924),
SUM(c4 % 1925), SUM(c4 % 1926), SUM(c4 % 1927), SUM(c4 % 1928), SUM(c4 % 1929),
SUM(c4 % 1930), SUM(c4 % 1931), SUM(c4 % 1932), SUM(c4 % 1933), SUM(c4 % 1934),
SUM(c4 % 1935), SUM(c4 % 1936), SUM(c4 % 1937), SUM(c4 % 1938), SUM(c4 % 1939),
SUM(c4 % 1940), SUM(c4 % 1941), SUM(c4 % 1942), SUM(c4 % 1943), SUM(c4 % 1944),
SUM(c4 % 1945), SUM(c4 % 1946), SUM(c4 % 1947), SUM(c4 % 1948), SUM(c4 % 1949),
SUM(c4 % 1950), SUM(c4 % 1951), SUM(c4 % 1952), SUM(c4 % 1953), SUM(c4 % 1954),
SUM(c4 % 1955), SUM(c4 % 1956), SUM(c4 % 1957), SUM(c4 % 1958), SUM(c4 % 1959),
SUM(c4 % 1960), SUM(c4 % 1961), SUM(c4 % 1962), SUM(c4 % 1963), SUM(c4 % 1964),
SUM(c4 % 1965), SUM(c4 % 1966), SUM(c4 % 1967), SUM(c4 % 1968), SUM(c4 % 1969),
SUM(c4 % 1970), SUM(c4 % 1971), SUM(c4 % 1972), SUM(c4 % 1973), SUM(c4 % 1974),
SUM(c4 % 1975), SUM(c4 % 1976), SUM(c4 % 1977), SUM(c4 % 1978), SUM(c4 % 1979),
SUM(c4 % 1980), SUM(c4 % 1981), SUM(c4 % 1982), SUM(c4 % 1983), SUM(c4 % 1984),
SUM(c4 % 1985), SUM(c4 % 1986), SUM(c4 % 1987), SUM(c4 % 1988), SUM(c4 % 1989),
SUM(c4 % 1990), SUM(c4 % 1991), SUM(c4 % 1992), SUM(c4 % 1993), SUM(c4 % 1994),
SUM(c4 % 1995), SUM(c4 % 1996), SUM(c4 % 1997), SUM(c4 % 1998), SUM(c4 % 1999),
SUM(c4 % 2000), SUM(c4 % 2001), SUM(c4 % 2002), SUM(c4 % 2003), SUM(c4 % 2004),
SUM(c4 % 2005), SUM(c4 % 2006), SUM(c4 % 2007), SUM(c4 % 2008), SUM(c4 % 2009),
SUM(c4 % 2010), SUM(c4 % 2011), SUM(c4 % 2012), SUM(c4 % 2013), SUM(c4 % 2014),
SUM(c4 % 2015), SUM(c4 % 2016), SUM(c4 % 2017), SUM(c4 % 2018), SUM(c4 % 2019),
SUM(c4 % 2020), SUM(c4 % 2021), SUM(c4 % 2022), SUM(c4 % 2023), SUM(c4 % 2024),
SUM(c4 % 2025), SUM(c4 % 2026), SUM(c4 % 2027), SUM(c4 % 2028), SUM(c4 % 2029),
SUM(c4 % 2030), SUM(c4 % 2031), SUM(c4 % 2032), SUM(c4 % 2033), SUM(c4 % 2034),
SUM(c4 % 2035), SUM(c4 % 2036), SUM(c4 % 2037), SUM(c4 % 2038), SUM(c4 % 2039),
SUM(c4 % 2040), SUM(c4 % 2041), SUM(c4 % 2042), SUM(c4 % 2043), SUM(c4 % 2044),
SUM(c4 % 2045), SUM(c4 % 2046), SUM(c4 % 2047), SUM(c4 % 2048), SUM(c4 % 2049),
SUM(c4 % 2050), SUM(c4 % 2051), SUM(c4 % 2052), SUM(c4 % 2053), SUM(c4 % 2054),
SUM(c4 % 2055), SUM(c4 % 2056), SUM(c4 % 2057), SUM(c4 % 2058), SUM(c4 % 2059),
SUM(c4 % 2060), SUM(c4 % 2061), SUM(c4 % 2062), SUM(c4 % 2063), SUM(c4 % 2064),
SUM(c4 % 2065), SUM(c4 % 2066), SUM(c4 % 2067), SUM(c4 % 2068), SUM(c4 % 2069),
SUM(c4 % 2070), SUM(c4 % 2071), SUM(c4 % 2072), SUM(c4 % 2073), SUM(c4 % 2074),
SUM(c4 % 2075), SUM(c4 % 2076), SUM(c4 % 2077), SUM(c4 % 2078), SUM(c4 % 2079),
SUM(c4 % 2080), SUM(c4 % 2081), SUM(c4 % 2082), SUM(c4 % 2083), SUM(c4 % 2084),
SUM(c4 % 2085), SUM(c4 % 2086), SUM(c4 % 2087), SUM(c4 % 2088), SUM(c4 % 2089),
SUM(c4 % 2090), SUM(c4 % 2091), SUM(c4 % 2092), SUM(c4 % 2093), SUM(c4 % 2094),
SUM(c4 % 2095), SUM(c4 % 2096), SUM(c4 % 2097), SUM(c4 % 2098), SUM(c4 % 2099),
SUM(c4 % 2100), SUM(c4 % 2101), SUM(c4 % 2102), SUM(c4 % 2103), SUM(c4 % 2104),
SUM(c4 % 2105), SUM(c4 % 2106), SUM(c4 % 2107), SUM(c4 % 2108), SUM(c4 % 2109),
SUM(c4 % 2110), SUM(c4 % 2111), SUM(c4 % 2112), SUM(c4 % 2113), SUM(c4 % 2114),
SUM(c4 % 2115), SUM(c4 % 2116), SUM(c4 % 2117), SUM(c4 % 2118), SUM(c4 % 2119),
SUM(c4 % 2120), SUM(c4 % 2121), SUM(c4 % 2122), SUM(c4 % 2123), SUM(c4 % 2124),
SUM(c4 % 2125), SUM(c4 % 2126), SUM(c4 % 2127), SUM(c4 % 2128), SUM(c4 % 2129),
SUM(c4 % 2130), SUM(c4 % 2131), SUM(c4 % 2132), SUM(c4 % 2133), SUM(c4 % 2134),
SUM(c4 % 2135), SUM(c4 % 2136), SUM(c4 % 2137), SUM(c4 % 2138), SUM(c4 % 2139),
SUM(c4 % 2140), SUM(c4 % 2141), SUM(c4 % 2142), SUM(c4 % 2143), SUM(c4 % 2144),
SUM(c4 % 2145), SUM(c4 % 2146), SUM(c4 % 2147), SUM(c4 % 2148), SUM(c4 % 2149),
SUM(c4 % 2150), SUM(c4 % 2151), SUM(c4 % 2152), SUM(c4 % 2153), SUM(c4 % 2154),
SUM(c4 % 2155), SUM(c4 % 2156), SUM(c4 % 2157), SUM(c4 % 2158), SUM(c4 % 2159),
SUM(c4 % 2160), SUM(c4 % 2161), SUM(c4 % 2162), SUM(c4 % 2163), SUM(c4 % 2164),
SUM(c4 % 2165), SUM(c4 % 2166), SUM(c4 % 2167), SUM(c4 % 2168), SUM(c4 % 2169),
SUM(c4 % 2170), SUM(c4 % 2171), SUM(c4 % 2172), SUM(c4 % 2173), SUM(c4 % 2174),
SUM(c4 % 2175), SUM(c4 % 2176), SUM(c4 % 2177), SUM(c4 % 2178), SUM(c4 % 2179),
SUM(c4 % 2180), SUM(c4 % 2181), SUM(c4 % 2182), SUM(c4 % 2183), SUM(c4 % 2184),
SUM(c4 % 2185), SUM(c4 % 2186), SUM(c4 % 2187), SUM(c4 % 2188), SUM(c4 % 2189),
SUM(c4 % 2190), SUM(c4 % 2191), SUM(c4 % 2192), SUM(c4 % 2193), SUM(c4 % 2194),
SUM(c4 % 2195), SUM(c4 % 2196), SUM(c4 % 2197), SUM(c4 % 2198), SUM(c4 % 2199),
SUM(c4 % 2200), SUM(c4 % 2201), SUM(c4 % 2202), SUM(c4 % 2203), SUM(c4 % 2204),
SUM(c4 % 2205), SUM(c4 % 2206), SUM(c4 % 2207), SUM(c4 % 2208), SUM(c4 % 2209),
SUM(c4 % 2210), SUM(c4 % 2211), SUM(c4 % 2212), SUM(c4 % 2213), SUM(c4 % 2214),
SUM(c4 % 2215), SUM(c4 % 2216), SUM(c4 % 2217), SUM(c4 % 2218), SUM(c4 % 2219),
SUM(c4 % 2220), SUM(c4 % 2221), SUM(c4 % 2222), SUM(c4 % 2223), SUM(c4 % 2224),
SUM(c4 % 2225), SUM(c4 % 2226), SUM(c4 % 2227), SUM(c4 % 2228), SUM(c4 % 2229),
SUM(c4 % 2230), SUM(c4 % 2231), SUM(c4 % 2232), SUM(c4 % 2233), SUM(c4 % 2234),
SUM(c4 % 2235), SUM(c4 % 2236), SUM(c4 % 2237), SUM(c4 % 2238), SUM(c4 % 2239),
SUM(c4 % 2240), SUM(c4 % 2241), SUM(c4 % 2242), SUM(c4 % 2243), SUM(c4 % 2244),
SUM(c4 % 2245), SUM(c4 % 2246), SUM(c4 % 2247), SUM(c4 % 2248), SUM(c4 % 2249),
SUM(c4 % 2250), SUM(c4 % 2251), SUM(c4 % 2252), SUM(c4 % 2253), SUM(c4 % 2254),
SUM(c4 % 2255), SUM(c4 % 2256), SUM(c4 % 2257), SUM(c4 % 2258), SUM(c4 % 2259),
SUM(c4 % 2260), SUM(c4 % 2261), SUM(c4 % 2262), SUM(c4 % 2263), SUM(c4 % 2264),
SUM(c4 % 2265), SUM(c4 % 2266), SUM(c4 % 2267), SUM(c4 % 2268), SUM(c4 % 2269),
SUM(c4 % 2270), SUM(c4 % 2271), SUM(c4 % 2272), SUM(c4 % 2273), SUM(c4 % 2274),
SUM(c4 % 2275), SUM(c4 % 2276), SUM(c4 % 2277), SUM(c4 % 2278), SUM(c4 % 2279),
SUM(c4 % 2280), SUM(c4 % 2281), SUM(c4 % 2282), SUM(c4 % 2283), SUM(c4 % 2284),
SUM(c4 % 2285), SUM(c4 % 2286), SUM(c4 % 2287), SUM(c4 % 2288), SUM(c4 % 2289),
SUM(c4 % 2290), SUM(c4 % 2291), SUM(c4 % 2292), SUM(c4 % 2293), SUM(c4 % 2294),
SUM(c4 % 2295), SUM(c4 % 2296), SUM(c4 % 2297), SUM(c4 % 2298), SUM(c4 % 2299),
SUM(c4 % 2300), SUM(c4 % 2301), SUM(c4 % 2302), SUM(c4 % 2303), SUM(c4 % 2304),
SUM(c4 % 2305), SUM(c4 % 2306), SUM(c4 % 2307), SUM(c4 % 2308), SUM(c4 % 2309),
SUM(c4 % 2310), SUM(c4 % 2311), SUM(c4 % 2312), SUM(c4 % 2313), SUM(c4 % 2314),
SUM(c4 % 2315), SUM(c4 % 2316), SUM(c4 % 2317), SUM(c4 % 2318), SUM(c4 % 2319),
SUM(c4 % 2320), SUM(c4 % 2321), SUM(c4 % 2322), SUM(c4 % 2323), SUM(c4 % 2324),
SUM(c4 % 2325), SUM(c4 % 2326), SUM(c4 % 2327), SUM(c4 % 2328), SUM(c4 % 2329),
SUM(c4 % 2330), SUM(c4 % 2331), SUM(c4 % 2332), SUM(c4 % 2333), SUM(c4 % 2334),
SUM(c4 % 2335), SUM(c4 % 2336), SUM(c4 % 2337), SUM(c4 % 2338), SUM(c4 % 2339),
SUM(c4 % 2340), SUM(c4 % 2341), SUM(c4 % 2342), SUM(c4 % 2343), SUM(c4 % 2344),
SUM(c4 % 2345), SUM(c4 % 2346), SUM(c4 % 2347), SUM(c4 % 2348), SUM(c4 % 2349),
SUM(c4 % 2350), SUM(c4 % 2351), SUM(c4 % 2352), SUM(c4 % 2353), SUM(c4 % 2354),
SUM(c4 % 2355), SUM(c4 % 2356), SUM(c4 % 2357), SUM(c4 % 2358), SUM(c4 % 2359),
SUM(c4 % 2360), SUM(c4 % 2361), SUM(c4 % 2362), SUM(c4 % 2363), SUM(c4 % 2364),
SUM(c4 % 2365), SUM(c4 % 2366), SUM(c4 % 2367), SUM(c4 % 2368), SUM(c4 % 2369),
SUM(c4 % 2370), SUM(c4 % 2371), SUM(c4 % 2372), SUM(c4 % 2373), SUM(c4 % 2374),
SUM(c4 % 2375), SUM(c4 % 2376), SUM(c4 % 2377), SUM(c4 % 2378), SUM(c4 % 2379),
SUM(c4 % 2380), SUM(c4 % 2381), SUM(c4 % 2382), SUM(c4 % 2383), SUM(c4 % 2384),
SUM(c4 % 2385), SUM(c4 % 2386), SUM(c4 % 2387), SUM(c4 % 2388), SUM(c4 % 2389),
SUM(c4 % 2390), SUM(c4 % 2391), SUM(c4 % 2392), SUM(c4 % 2393), SUM(c4 % 2394),
SUM(c4 % 2395), SUM(c4 % 2396), SUM(c4 % 2397), SUM(c4 % 2398), SUM(c4 % 2399),
SUM(c4 % 2400), SUM(c4 % 2401), SUM(c4 % 2402), SUM(c4 % 2403), SUM(c4 % 2404),
SUM(c4 % 2405), SUM(c4 % 2406), SUM(c4 % 2407), SUM(c4 % 2408), SUM(c4 % 2409),
SUM(c4 % 2410), SUM(c4 % 2411), SUM(c4 % 2412), SUM(c4 % 2413), SUM(c4 % 2414),
SUM(c4 % 2415), SUM(c4 % 2416), SUM(c4 % 2417), SUM(c4 % 2418), SUM(c4 % 2419),
SUM(c4 % 2420), SUM(c4 % 2421), SUM(c4 % 2422), SUM(c4 % 2423), SUM(c4 % 2424),
SUM(c4 % 2425), SUM(c4 % 2426), SUM(c4 % 2427), SUM(c4 % 2428), SUM(c4 % 2429),
SUM(c4 % 2430), SUM(c4 % 2431), SUM(c4 % 2432), SUM(c4 % 2433), SUM(c4 % 2434),
SUM(c4 % 2435), SUM(c4 % 2436), SUM(c4 % 2437), SUM(c4 % 2438), SUM(c4 % 2439),
SUM(c4 % 2440), SUM(c4 % 2441), SUM(c4 % 2442), SUM(c4 % 2443), SUM(c4 % 2444),
SUM(c4 % 2445), SUM(c4 % 2446), SUM(c4 % 2447), SUM(c4 % 2448), SUM(c4 % 2449),
SUM(c4 % 2450), SUM(c4 % 2451), SUM(c4 % 2452), SUM(c4 % 2453), SUM(c4 % 2454),
SUM(c4 % 2455), SUM(c4 % 2456), SUM(c4 % 2457), SUM(c4 % 2458), SUM(c4 % 2459),
SUM(c4 % 2460), SUM(c4 % 2461), SUM(c4 % 2462), SUM(c4 % 2463), SUM(c4 % 2464),
SUM(c4 % 2465), SUM(c4 % 2466), SUM(c4 % 2467), SUM(c4 % 2468), SUM(c4 % 2469),
SUM(c4 % 2470), SUM(c4 % 2471), SUM(c4 % 2472), SUM(c4 % 2473), SUM(c4 % 2474),
SUM(c4 % 2475), SUM(c4 % 2476), SUM(c4 % 2477), SUM(c4 % 2478), SUM(c4 % 2479),
SUM(c4 % 2480), SUM(c4 % 2481), SUM(c4 % 2482), SUM(c4 % 2483), SUM(c4 % 2484),
SUM(c4 % 2485), SUM(c4 % 2486), SUM(c4 % 2487), SUM(c4 % 2488), SUM(c4 % 2489),
SUM(c4 % 2490), SUM(c4 % 2491), SUM(c4 % 2492), SUM(c4 % 2493), SUM(c4 % 2494),
SUM(c4 % 2495), SUM(c4 % 2496), SUM(c4 % 2497), SUM(c4 % 2498), SUM(c4 % 2499),
SUM(c4 % 2500), SUM(c4 % 2501), SUM(c4 % 2502), SUM(c4 % 2503), SUM(c4 % 2504),
SUM(c4 % 2505), SUM(c4 % 2506), SUM(c4 % 2507), SUM(c4 % 2508), SUM(c4 % 2509),
SUM(c4 % 2510), SUM(c4 % 2511), SUM(c4 % 2512), SUM(c4 % 2513), SUM(c4 % 2514),
SUM(c4 % 2515), SUM(c4 % 2516), SUM(c4 % 2517), SUM(c4 % 2518), SUM(c4 % 2519),
SUM(c4 % 2520), SUM(c4 % 2521), SUM(c4 % 2522), SUM(c4 % 2523), SUM(c4 % 2524),
SUM(c4 % 2525), SUM(c4 % 2526), SUM(c4 % 2527), SUM(c4 % 2528), SUM(c4 % 2529),
SUM(c4 % 2530), SUM(c4 % 2531), SUM(c4 % 2532), SUM(c4 % 2533), SUM(c4 % 2534),
SUM(c4 % 2535), SUM(c4 % 2536), SUM(c4 % 2537), SUM(c4 % 2538), SUM(c4 % 2539),
SUM(c4 % 2540), SUM(c4 % 2541), SUM(c4 % 2542), SUM(c4 % 2543), SUM(c4 % 2544),
SUM(c4 % 2545), SUM(c4 % 2546), SUM(c4 % 2547), SUM(c4 % 2548), SUM(c4 % 2549),
SUM(c4 % 2550), SUM(c4 % 2551), SUM(c4 % 2552), SUM(c4 % 2553), SUM(c4 % 2554),
SUM(c4 % 2555), SUM(c4 % 2556), SUM(c4 % 2557), SUM(c4 % 2558), SUM(c4 % 2559),
SUM(c4 % 2560), SUM(c4 % 2561), SUM(c4 % 2562), SUM(c4 % 2563), SUM(c4 % 2564),
SUM(c4 % 2565), SUM(c4 % 2566), SUM(c4 % 2567), SUM(c4 % 2568), SUM(c4 % 2569),
SUM(c4 % 2570), SUM(c4 % 2571), SUM(c4 % 2572), SUM(c4 % 2573), SUM(c4 % 2574),
SUM(c4 % 2575), SUM(c4 % 2576), SUM(c4 % 2577), SUM(c4 % 2578), SUM(c4 % 2579),
SUM(c4 % 2580), SUM(c4 % 2581), SUM(c4 % 2582), SUM(c4 % 2583), SUM(c4 % 2584),
SUM(c4 % 2585), SUM(c4 % 2586), SUM(c4 % 2587), SUM(c4 % 2588), SUM(c4 % 2589),
SUM(c4 % 2590), SUM(c4 % 2591), SUM(c4 % 2592), SUM(c4 % 2593), SUM(c4 % 2594),
SUM(c4 % 2595), SUM(c4 % 2596), SUM(c4 % 2597), SUM(c4 % 2598), SUM(c4 % 2599),
SUM(c4 % 2600), SUM(c4 % 2601), SUM(c4 % 2602), SUM(c4 % 2603), SUM(c4 % 2604),
SUM(c4 % 2605), SUM(c4 % 2606), SUM(c4 % 2607), SUM(c4 % 2608), SUM(c4 % 2609),
SUM(c4 % 2610), SUM(c4 % 2611), SUM(c4 % 2612), SUM(c4 % 2613), SUM(c4 % 2614),
SUM(c4 % 2615), SUM(c4 % 2616), SUM(c4 % 2617), SUM(c4 % 2618), SUM(c4 % 2619),
SUM(c4 % 2620), SUM(c4 % 2621), SUM(c4 % 2622), SUM(c4 % 2623), SUM(c4 % 2624),
SUM(c4 % 2625), SUM(c4 % 2626), SUM(c4 % 2627), SUM(c4 % 2628), SUM(c4 % 2629),
SUM(c4 % 2630), SUM(c4 % 2631), SUM(c4 % 2632), SUM(c4 % 2633), SUM(c4 % 2634),
SUM(c4 % 2635), SUM(c4 % 2636), SUM(c4 % 2637), SUM(c4 % 2638), SUM(c4 % 2639),
SUM(c4 % 2640), SUM(c4 % 2641), SUM(c4 % 2642), SUM(c4 % 2643), SUM(c4 % 2644),
SUM(c4 % 2645), SUM(c4 % 2646), SUM(c4 % 2647), SUM(c4 % 2648), SUM(c4 % 2649),
SUM(c4 % 2650), SUM(c4 % 2651), SUM(c4 % 2652), SUM(c4 % 2653), SUM(c4 % 2654),
SUM(c4 % 2655), SUM(c4 % 2656), SUM(c4 % 2657), SUM(c4 % 2658), SUM(c4 % 2659),
SUM(c4 % 2660), SUM(c4 % 2661), SUM(c4 % 2662), SUM(c4 % 2663), SUM(c4 % 2664),
SUM(c4 % 2665), SUM(c4 % 2666), SUM(c4 % 2667), SUM(c4 % 2668), SUM(c4 % 2669),
SUM(c4 % 2670), SUM(c4 % 2671), SUM(c4 % 2672), SUM(c4 % 2673), SUM(c4 % 2674),
SUM(c4 % 2675), SUM(c4 % 2676), SUM(c4 % 2677), SUM(c4 % 2678), SUM(c4 % 2679),
SUM(c4 % 2680), SUM(c4 % 2681), SUM(c4 % 2682), SUM(c4 % 2683), SUM(c4 % 2684),
SUM(c4 % 2685), SUM(c4 % 2686), SUM(c4 % 2687), SUM(c4 % 2688), SUM(c4 % 2689),
SUM(c4 % 2690), SUM(c4 % 2691), SUM(c4 % 2692), SUM(c4 % 2693), SUM(c4 % 2694),
SUM(c4 % 2695), SUM(c4 % 2696), SUM(c4 % 2697), SUM(c4 % 2698), SUM(c4 % 2699),
SUM(c4 % 2700), SUM(c4 % 2701), SUM(c4 % 2702), SUM(c4 % 2703), SUM(c4 % 2704),
SUM(c4 % 2705), SUM(c4 % 2706), SUM(c4 % 2707), SUM(c4 % 2708), SUM(c4 % 2709),
SUM(c4 % 2710), SUM(c4 % 2711), SUM(c4 % 2712), SUM(c4 % 2713), SUM(c4 % 2714),
SUM(c4 % 2715), SUM(c4 % 2716), SUM(c4 % 2717), SUM(c4 % 2718), SUM(c4 % 2719),
SUM(c4 % 2720), SUM(c4 % 2721), SUM(c4 % 2722), SUM(c4 % 2723), SUM(c4 % 2724),
SUM(c4 % 2725), SUM(c4 % 2726), SUM(c4 % 2727), SUM(c4 % 2728), SUM(c4 % 2729),
SUM(c4 % 2730), SUM(c4 % 2731), SUM(c4 % 2732), SUM(c4 % 2733), SUM(c4 % 2734),
SUM(c4 % 2735), SUM(c4 % 2736), SUM(c4 % 2737), SUM(c4 % 2738), SUM(c4 % 2739),
SUM(c4 % 2740), SUM(c4 % 2741), SUM(c4 % 2742), SUM(c4 % 2743), SUM(c4 % 2744),
SUM(c4 % 2745), SUM(c4 % 2746), SUM(c4 % 2747), SUM(c4 % 2748), SUM(c4 % 2749),
SUM(c4 % 2750), SUM(c4 % 2751), SUM(c4 % 2752), SUM(c4 % 2753), SUM(c4 % 2754),
SUM(c4 % 2755), SUM(c4 % 2756), SUM(c4 % 2757), SUM(c4 % 2758), SUM(c4 % 2759),
SUM(c4 % 2760), SUM(c4 % 2761), SUM(c4 % 2762), SUM(c4 % 2763), SUM(c4 % 2764),
SUM(c4 % 2765), SUM(c4 % 2766), SUM(c4 % 2767), SUM(c4 % 2768), SUM(c4 % 2769),
SUM(c4 % 2770), SUM(c4 % 2771), SUM(c4 % 2772), SUM(c4 % 2773), SUM(c4 % 2774),
SUM(c4 % 2775), SUM(c4 % 2776), SUM(c4 % 2777), SUM(c4 % 2778), SUM(c4 % 2779),
SUM(c4 % 2780), SUM(c4 % 2781), SUM(c4 % 2782), SUM(c4 % 2783), SUM(c4 % 2784),
SUM(c4 % 2785), SUM(c4 % 2786), SUM(c4 % 2787), SUM(c4 % 2788), SUM(c4 % 2789),
SUM(c4 % 2790), SUM(c4 % 2791), SUM(c4 % 2792), SUM(c4 % 2793), SUM(c4 % 2794),
SUM(c4 % 2795), SUM(c4 % 2796), SUM(c4 % 2797), SUM(c4 % 2798), SUM(c4 % 2799),
SUM(c4 % 2800), SUM(c4 % 2801), SUM(c4 % 2802), SUM(c4 % 2803), SUM(c4 % 2804),
SUM(c4 % 2805), SUM(c4 % 2806), SUM(c4 % 2807), SUM(c4 % 2808), SUM(c4 % 2809),
SUM(c4 % 2810), SUM(c4 % 2811), SUM(c4 % 2812), SUM(c4 % 2813), SUM(c4 % 2814),
SUM(c4 % 2815), SUM(c4 % 2816), SUM(c4 % 2817), SUM(c4 % 2818), SUM(c4 % 2819),
SUM(c4 % 2820), SUM(c4 % 2821), SUM(c4 % 2822), SUM(c4 % 2823), SUM(c4 % 2824),
SUM(c4 % 2825), SUM(c4 % 2826), SUM(c4 % 2827), SUM(c4 % 2828), SUM(c4 % 2829),
SUM(c4 % 2830), SUM(c4 % 2831), SUM(c4 % 2832), SUM(c4 % 2833), SUM(c4 % 2834),
SUM(c4 % 2835), SUM(c4 % 2836), SUM(c4 % 2837), SUM(c4 % 2838), SUM(c4 % 2839),
SUM(c4 % 2840), SUM(c4 % 2841), SUM(c4 % 2842), SUM(c4 % 2843), SUM(c4 % 2844),
SUM(c4 % 2845), SUM(c4 % 2846), SUM(c4 % 2847), SUM(c4 % 2848), SUM(c4 % 2849),
SUM(c4 % 2850), SUM(c4 % 2851), SUM(c4 % 2852), SUM(c4 % 2853), SUM(c4 % 2854),
SUM(c4 % 2855), SUM(c4 % 2856), SUM(c4 % 2857), SUM(c4 % 2858), SUM(c4 % 2859),
SUM(c4 % 2860), SUM(c4 % 2861), SUM(c4 % 2862), SUM(c4 % 2863), SUM(c4 % 2864),
SUM(c4 % 2865), SUM(c4 % 2866), SUM(c4 % 2867), SUM(c4 % 2868), SUM(c4 % 2869),
SUM(c4 % 2870), SUM(c4 % 2871), SUM(c4 % 2872), SUM(c4 % 2873), SUM(c4 % 2874),
SUM(c4 % 2875), SUM(c4 % 2876), SUM(c4 % 2877), SUM(c4 % 2878), SUM(c4 % 2879),
SUM(c4 % 2880), SUM(c4 % 2881), SUM(c4 % 2882), SUM(c4 % 2883), SUM(c4 % 2884),
SUM(c4 % 2885), SUM(c4 % 2886), SUM(c4 % 2887), SUM(c4 % 2888), SUM(c4 % 2889),
SUM(c4 % 2890), SUM(c4 % 2891), SUM(c4 % 2892), SUM(c4 % 2893), SUM(c4 % 2894),
SUM(c4 % 2895), SUM(c4 % 2896), SUM(c4 % 2897), SUM(c4 % 2898), SUM(c4 % 2899),
SUM(c4 % 2900), SUM(c4 % 2901), SUM(c4 % 2902), SUM(c4 % 2903), SUM(c4 % 2904),
SUM(c4 % 2905), SUM(c4 % 2906), SUM(c4 % 2907), SUM(c4 % 2908), SUM(c4 % 2909),
SUM(c4 % 2910), SUM(c4 % 2911), SUM(c4 % 2912), SUM(c4 % 2913), SUM(c4 % 2914),
SUM(c4 % 2915), SUM(c4 % 2916), SUM(c4 % 2917), SUM(c4 % 2918), SUM(c4 % 2919),
SUM(c4 % 2920), SUM(c4 % 2921), SUM(c4 % 2922), SUM(c4 % 2923), SUM(c4 % 2924),
SUM(c4 % 2925), SUM(c4 % 2926), SUM(c4 % 2927), SUM(c4 % 2928), SUM(c4 % 2929),
SUM(c4 % 2930), SUM(c4 % 2931), SUM(c4 % 2932), SUM(c4 % 2933), SUM(c4 % 2934),
SUM(c4 % 2935), SUM(c4 % 2936), SUM(c4 % 2937), SUM(c4 % 2938), SUM(c4 % 2939),
SUM(c4 % 2940), SUM(c4 % 2941), SUM(c4 % 2942), SUM(c4 % 2943), SUM(c4 % 2944),
SUM(c4 % 2945), SUM(c4 % 2946), SUM(c4 % 2947), SUM(c4 % 2948), SUM(c4 % 2949),
SUM(c4 % 2950), SUM(c4 % 2951), SUM(c4 % 2952), SUM(c4 % 2953), SUM(c4 % 2954),
SUM(c4 % 2955), SUM(c4 % 2956), SUM(c4 % 2957), SUM(c4 % 2958), SUM(c4 % 2959),
SUM(c4 % 2960), SUM(c4 % 2961), SUM(c4 % 2962), SUM(c4 % 2963), SUM(c4 % 2964),
SUM(c4 % 2965), SUM(c4 % 2966), SUM(c4 % 2967), SUM(c4 % 2968), SUM(c4 % 2969),
SUM(c4 % 2970), SUM(c4 % 2971), SUM(c4 % 2972), SUM(c4 % 2973), SUM(c4 % 2974),
SUM(c4 % 2975), SUM(c4 % 2976), SUM(c4 % 2977), SUM(c4 % 2978), SUM(c4 % 2979),
SUM(c4 % 2980), SUM(c4 % 2981), SUM(c4 % 2982), SUM(c4 % 2983), SUM(c4 % 2984),
SUM(c4 % 2985), SUM(c4 % 2986), SUM(c4 % 2987), SUM(c4 % 2988), SUM(c4 % 2989),
SUM(c4 % 2990), SUM(c4 % 2991), SUM(c4 % 2992), SUM(c4 % 2993), SUM(c4 % 2994),
SUM(c4 % 2995), SUM(c4 % 2996), SUM(c4 % 2997), SUM(c4 % 2998), SUM(c4 % 2999),
SUM(c4 % 3000), SUM(c4 % 3001), SUM(c4 % 3002), SUM(c4 % 3003), SUM(c4 % 3004),
SUM(c4 % 3005), SUM(c4 % 3006), SUM(c4 % 3007), SUM(c4 % 3008), SUM(c4 % 3009),
SUM(c4 % 3010), SUM(c4 % 3011), SUM(c4 % 3012), SUM(c4 % 3013), SUM(c4 % 3014),
SUM(c4 % 3015), SUM(c4 % 3016), SUM(c4 % 3017), SUM(c4 % 3018), SUM(c4 % 3019),
SUM(c4 % 3020), SUM(c4 % 3021), SUM(c4 % 3022), SUM(c4 % 3023), SUM(c4 % 3024),
SUM(c4 % 3025), SUM(c4 % 3026), SUM(c4 % 3027), SUM(c4 % 3028), SUM(c4 % 3029),
SUM(c4 % 3030), SUM(c4 % 3031), SUM(c4 % 3032), SUM(c4 % 3033), SUM(c4 % 3034),
SUM(c4 % 3035), SUM(c4 % 3036), SUM(c4 % 3037), SUM(c4 % 3038), SUM(c4 % 3039),
SUM(c4 % 3040), SUM(c4 % 3041), SUM(c4 % 3042), SUM(c4 % 3043), SUM(c4 % 3044),
SUM(c4 % 3045), SUM(c4 % 3046), SUM(c4 % 3047), SUM(c4 % 3048), SUM(c4 % 3049),
SUM(c4 % 3050), SUM(c4 % 3051), SUM(c4 % 3052), SUM(c4 % 3053), SUM(c4 % 3054),
SUM(c4 % 3055), SUM(c4 % 3056), SUM(c4 % 3057), SUM(c4 % 3058), SUM(c4 % 3059),
SUM(c4 % 3060), SUM(c4 % 3061), SUM(c4 % 3062), SUM(c4 % 3063), SUM(c4 % 3064),
SUM(c4 % 3065), SUM(c4 % 3066), SUM(c4 % 3067), SUM(c4 % 3068), SUM(c4 % 3069),
SUM(c4 % 3070), SUM(c4 % 3071), SUM(c4 % 3072), SUM(c4 % 3073), SUM(c4 % 3074),
SUM(c4 % 3075), SUM(c4 % 3076), SUM(c4 % 3077), SUM(c4 % 3078), SUM(c4 % 3079),
SUM(c4 % 3080), SUM(c4 % 3081), SUM(c4 % 3082), SUM(c4 % 3083), SUM(c4 % 3084),
SUM(c4 % 3085), SUM(c4 % 3086), SUM(c4 % 3087), SUM(c4 % 3088), SUM(c4 % 3089),
SUM(c4 % 3090), SUM(c4 % 3091), SUM(c4 % 3092), SUM(c4 % 3093), SUM(c4 % 3094),
SUM(c4 % 3095), SUM(c4 % 3096), SUM(c4 % 3097), SUM(c4 % 3098), SUM(c4 % 3099),
SUM(c4 % 3100), SUM(c4 % 3101), SUM(c4 % 3102), SUM(c4 % 3103), SUM(c4 % 3104),
SUM(c4 % 3105), SUM(c4 % 3106), SUM(c4 % 3107), SUM(c4 % 3108), SUM(c4 % 3109),
SUM(c4 % 3110), SUM(c4 % 3111), SUM(c4 % 3112), SUM(c4 % 3113), SUM(c4 % 3114),
SUM(c4 % 3115), SUM(c4 % 3116), SUM(c4 % 3117), SUM(c4 % 3118), SUM(c4 % 3119),
SUM(c4 % 3120), SUM(c4 % 3121), SUM(c4 % 3122), SUM(c4 % 3123), SUM(c4 % 3124),
SUM(c4 % 3125), SUM(c4 % 3126), SUM(c4 % 3127), SUM(c4 % 3128), SUM(c4 % 3129),
SUM(c4 % 3130), SUM(c4 % 3131), SUM(c4 % 3132), SUM(c4 % 3133), SUM(c4 % 3134),
SUM(c4 % 3135), SUM(c4 % 3136), SUM(c4 % 3137), SUM(c4 % 3138), SUM(c4 % 3139),
SUM(c4 % 3140), SUM(c4 % 3141), SUM(c4 % 3142), SUM(c4 % 3143), SUM(c4 % 3144),
SUM(c4 % 3145), SUM(c4 % 3146), SUM(c4 % 3147), SUM(c4 % 3148), SUM(c4 % 3149),
SUM(c4 % 3150), SUM(c4 % 3151), SUM(c4 % 3152), SUM(c4 % 3153), SUM(c4 % 3154),
SUM(c4 % 3155), SUM(c4 % 3156), SUM(c4 % 3157), SUM(c4 % 3158), SUM(c4 % 3159),
SUM(c4 % 3160), SUM(c4 % 3161), SUM(c4 % 3162), SUM(c4 % 3163), SUM(c4 % 3164),
SUM(c4 % 3165), SUM(c4 % 3166), SUM(c4 % 3167), SUM(c4 % 3168), SUM(c4 % 3169),
SUM(c4 % 3170), SUM(c4 % 3171), SUM(c4 % 3172), SUM(c4 % 3173), SUM(c4 % 3174),
SUM(c4 % 3175), SUM(c4 % 3176), SUM(c4 % 3177), SUM(c4 % 3178), SUM(c4 % 3179),
SUM(c4 % 3180), SUM(c4 % 3181), SUM(c4 % 3182), SUM(c4 % 3183), SUM(c4 % 3184),
SUM(c4 % 3185), SUM(c4 % 3186), SUM(c4 % 3187), SUM(c4 % 3188), SUM(c4 % 3189),
SUM(c4 % 3190), SUM(c4 % 3191), SUM(c4 % 3192), SUM(c4 % 3193), SUM(c4 % 3194),
SUM(c4 % 3195), SUM(c4 % 3196), SUM(c4 % 3197), SUM(c4 % 3198), SUM(c4 % 3199),
SUM(c4 % 3200), SUM(c4 % 3201), SUM(c4 % 3202), SUM(c4 % 3203), SUM(c4 % 3204),
SUM(c4 % 3205), SUM(c4 % 3206), SUM(c4 % 3207), SUM(c4 % 3208), SUM(c4 % 3209),
SUM(c4 % 3210), SUM(c4 % 3211), SUM(c4 % 3212), SUM(c4 % 3213), SUM(c4 % 3214),
SUM(c4 % 3215), SUM(c4 % 3216), SUM(c4 % 3217), SUM(c4 % 3218), SUM(c4 % 3219),
SUM(c4 % 3220), SUM(c4 % 3221), SUM(c4 % 3222), SUM(c4 % 3223), SUM(c4 % 3224),
SUM(c4 % 3225), SUM(c4 % 3226), SUM(c4 % 3227), SUM(c4 % 3228), SUM(c4 % 3229),
SUM(c4 % 3230), SUM(c4 % 3231), SUM(c4 % 3232), SUM(c4 % 3233), SUM(c4 % 3234),
SUM(c4 % 3235), SUM(c4 % 3236), SUM(c4 % 3237), SUM(c4 % 3238), SUM(c4 % 3239),
SUM(c4 % 3240), SUM(c4 % 3241), SUM(c4 % 3242), SUM(c4 % 3243), SUM(c4 % 3244),
SUM(c4 % 3245), SUM(c4 % 3246), SUM(c4 % 3247), SUM(c4 % 3248), SUM(c4 % 3249),
SUM(c4 % 3250), SUM(c4 % 3251), SUM(c4 % 3252), SUM(c4 % 3253), SUM(c4 % 3254),
SUM(c4 % 3255), SUM(c4 % 3256), SUM(c4 % 3257), SUM(c4 % 3258), SUM(c4 % 3259),
SUM(c4 % 3260), SUM(c4 % 3261), SUM(c4 % 3262), SUM(c4 % 3263), SUM(c4 % 3264),
SUM(c4 % 3265), SUM(c4 % 3266), SUM(c4 % 3267), SUM(c4 % 3268), SUM(c4 % 3269),
SUM(c4 % 3270), SUM(c4 % 3271), SUM(c4 % 3272), SUM(c4 % 3273), SUM(c4 % 3274),
SUM(c4 % 3275), SUM(c4 % 3276), SUM(c4 % 3277), SUM(c4 % 3278), SUM(c4 % 3279),
SUM(c4 % 3280), SUM(c4 % 3281), SUM(c4 % 3282), SUM(c4 % 3283), SUM(c4 % 3284),
SUM(c4 % 3285), SUM(c4 % 3286), SUM(c4 % 3287), SUM(c4 % 3288), SUM(c4 % 3289),
SUM(c4 % 3290), SUM(c4 % 3291), SUM(c4 % 3292), SUM(c4 % 3293), SUM(c4 % 3294),
SUM(c4 % 3295), SUM(c4 % 3296), SUM(c4 % 3297), SUM(c4 % 3298), SUM(c4 % 3299),
SUM(c4 % 3300), SUM(c4 % 3301), SUM(c4 % 3302), SUM(c4 % 3303), SUM(c4 % 3304),
SUM(c4 % 3305), SUM(c4 % 3306), SUM(c4 % 3307), SUM(c4 % 3308), SUM(c4 % 3309),
SUM(c4 % 3310), SUM(c4 % 3311), SUM(c4 % 3312), SUM(c4 % 3313), SUM(c4 % 3314),
SUM(c4 % 3315), SUM(c4 % 3316), SUM(c4 % 3317), SUM(c4 % 3318), SUM(c4 % 3319),
SUM(c4 % 3320), SUM(c4 % 3321), SUM(c4 % 3322), SUM(c4 % 3323), SUM(c4 % 3324),
SUM(c4 % 3325), SUM(c4 % 3326), SUM(c4 % 3327), SUM(c4 % 3328), SUM(c4 % 3329),
SUM(c4 % 3330), SUM(c4 % 3331), SUM(c4 % 3332), SUM(c4 % 3333), SUM(c4 % 3334),
SUM(c4 % 3335), SUM(c4 % 3336), SUM(c4 % 3337), SUM(c4 % 3338), SUM(c4 % 3339),
SUM(c4 % 3340), SUM(c4 % 3341), SUM(c4 % 3342), SUM(c4 % 3343), SUM(c4 % 3344),
SUM(c4 % 3345), SUM(c4 % 3346), SUM(c4 % 3347), SUM(c4 % 3348), SUM(c4 % 3349),
SUM(c4 % 3350), SUM(c4 % 3351), SUM(c4 % 3352), SUM(c4 % 3353), SUM(c4 % 3354),
SUM(c4 % 3355), SUM(c4 % 3356), SUM(c4 % 3357), SUM(c4 % 3358), SUM(c4 % 3359),
SUM(c4 % 3360), SUM(c4 % 3361), SUM(c4 % 3362), SUM(c4 % 3363), SUM(c4 % 3364),
SUM(c4 % 3365), SUM(c4 % 3366), SUM(c4 % 3367), SUM(c4 % 3368), SUM(c4 % 3369),
SUM(c4 % 3370), SUM(c4 % 3371), SUM(c4 % 3372), SUM(c4 % 3373), SUM(c4 % 3374),
SUM(c4 % 3375), SUM(c4 % 3376), SUM(c4 % 3377), SUM(c4 % 3378), SUM(c4 % 3379),
SUM(c4 % 3380), SUM(c4 % 3381), SUM(c4 % 3382), SUM(c4 % 3383), SUM(c4 % 3384),
SUM(c4 % 3385), SUM(c4 % 3386), SUM(c4 % 3387), SUM(c4 % 3388), SUM(c4 % 3389),
SUM(c4 % 3390), SUM(c4 % 3391), SUM(c4 % 3392), SUM(c4 % 3393), SUM(c4 % 3394),
SUM(c4 % 3395), SUM(c4 % 3396), SUM(c4 % 3397), SUM(c4 % 3398), SUM(c4 % 3399),
SUM(c4 % 3400), SUM(c4 % 3401), SUM(c4 % 3402), SUM(c4 % 3403), SUM(c4 % 3404),
SUM(c4 % 3405), SUM(c4 % 3406), SUM(c4 % 3407), SUM(c4 % 3408), SUM(c4 % 3409),
SUM(c4 % 3410), SUM(c4 % 3411), SUM(c4 % 3412), SUM(c4 % 3413), SUM(c4 % 3414),
SUM(c4 % 3415), SUM(c4 % 3416), SUM(c4 % 3417), SUM(c4 % 3418), SUM(c4 % 3419),
SUM(c4 % 3420), SUM(c4 % 3421), SUM(c4 % 3422), SUM(c4 % 3423), SUM(c4 % 3424),
SUM(c4 % 3425), SUM(c4 % 3426), SUM(c4 % 3427), SUM(c4 % 3428), SUM(c4 % 3429),
SUM(c4 % 3430), SUM(c4 % 3431), SUM(c4 % 3432), SUM(c4 % 3433), SUM(c4 % 3434),
SUM(c4 % 3435), SUM(c4 % 3436), SUM(c4 % 3437), SUM(c4 % 3438), SUM(c4 % 3439),
SUM(c4 % 3440), SUM(c4 % 3441), SUM(c4 % 3442), SUM(c4 % 3443), SUM(c4 % 3444),
SUM(c4 % 3445), SUM(c4 % 3446), SUM(c4 % 3447), SUM(c4 % 3448), SUM(c4 % 3449),
SUM(c4 % 3450), SUM(c4 % 3451), SUM(c4 % 3452), SUM(c4 % 3453), SUM(c4 % 3454),
SUM(c4 % 3455), SUM(c4 % 3456), SUM(c4 % 3457), SUM(c4 % 3458), SUM(c4 % 3459),
SUM(c4 % 3460), SUM(c4 % 3461), SUM(c4 % 3462), SUM(c4 % 3463), SUM(c4 % 3464),
SUM(c4 % 3465), SUM(c4 % 3466), SUM(c4 % 3467), SUM(c4 % 3468), SUM(c4 % 3469),
SUM(c4 % 3470), SUM(c4 % 3471), SUM(c4 % 3472), SUM(c4 % 3473), SUM(c4 % 3474),
SUM(c4 % 3475), SUM(c4 % 3476), SUM(c4 % 3477), SUM(c4 % 3478), SUM(c4 % 3479),
SUM(c4 % 3480), SUM(c4 % 3481), SUM(c4 % 3482), SUM(c4 % 3483), SUM(c4 % 3484),
SUM(c4 % 3485), SUM(c4 % 3486), SUM(c4 % 3487), SUM(c4 % 3488), SUM(c4 % 3489),
SUM(c4 % 3490), SUM(c4 % 3491), SUM(c4 % 3492), SUM(c4 % 3493), SUM(c4 % 3494),
SUM(c4 % 3495), SUM(c4 % 3496), SUM(c4 % 3497), SUM(c4 % 3498), SUM(c4 % 3499),
SUM(c4 % 3500), SUM(c4 % 3501), SUM(c4 % 3502), SUM(c4 % 3503), SUM(c4 % 3504),
SUM(c4 % 3505), SUM(c4 % 3506), SUM(c4 % 3507), SUM(c4 % 3508), SUM(c4 % 3509),
SUM(c4 % 3510), SUM(c4 % 3511), SUM(c4 % 3512), SUM(c4 % 3513), SUM(c4 % 3514),
SUM(c4 % 3515), SUM(c4 % 3516), SUM(c4 % 3517), SUM(c4 % 3518), SUM(c4 % 3519),
SUM(c4 % 3520), SUM(c4 % 3521), SUM(c4 % 3522), SUM(c4 % 3523), SUM(c4 % 3524),
SUM(c4 % 3525), SUM(c4 % 3526), SUM(c4 % 3527), SUM(c4 % 3528), SUM(c4 % 3529),
SUM(c4 % 3530), SUM(c4 % 3531), SUM(c4 % 3532), SUM(c4 % 3533), SUM(c4 % 3534),
SUM(c4 % 3535), SUM(c4 % 3536), SUM(c4 % 3537), SUM(c4 % 3538), SUM(c4 % 3539),
SUM(c4 % 3540), SUM(c4 % 3541), SUM(c4 % 3542), SUM(c4 % 3543), SUM(c4 % 3544),
SUM(c4 % 3545), SUM(c4 % 3546), SUM(c4 % 3547), SUM(c4 % 3548), SUM(c4 % 3549),
SUM(c4 % 3550), SUM(c4 % 3551), SUM(c4 % 3552), SUM(c4 % 3553), SUM(c4 % 3554),
SUM(c4 % 3555), SUM(c4 % 3556), SUM(c4 % 3557), SUM(c4 % 3558), SUM(c4 % 3559),
SUM(c4 % 3560), SUM(c4 % 3561), SUM(c4 % 3562), SUM(c4 % 3563), SUM(c4 % 3564),
SUM(c4 % 3565), SUM(c4 % 3566), SUM(c4 % 3567), SUM(c4 % 3568), SUM(c4 % 3569),
SUM(c4 % 3570), SUM(c4 % 3571), SUM(c4 % 3572), SUM(c4 % 3573), SUM(c4 % 3574),
SUM(c4 % 3575), SUM(c4 % 3576), SUM(c4 % 3577), SUM(c4 % 3578), SUM(c4 % 3579),
SUM(c4 % 3580), SUM(c4 % 3581), SUM(c4 % 3582), SUM(c4 % 3583), SUM(c4 % 3584),
SUM(c4 % 3585), SUM(c4 % 3586), SUM(c4 % 3587), SUM(c4 % 3588), SUM(c4 % 3589),
SUM(c4 % 3590), SUM(c4 % 3591), SUM(c4 % 3592), SUM(c4 % 3593), SUM(c4 % 3594),
SUM(c4 % 3595), SUM(c4 % 3596), SUM(c4 % 3597), SUM(c4 % 3598), SUM(c4 % 3599),
SUM(c4 % 3600), SUM(c4 % 3601), SUM(c4 % 3602), SUM(c4 % 3603), SUM(c4 % 3604),
SUM(c4 % 3605), SUM(c4 % 3606), SUM(c4 % 3607), SUM(c4 % 3608), SUM(c4 % 3609),
SUM(c4 % 3610), SUM(c4 % 3611), SUM(c4 % 3612), SUM(c4 % 3613), SUM(c4 % 3614),
SUM(c4 % 3615), SUM(c4 % 3616), SUM(c4 % 3617), SUM(c4 % 3618), SUM(c4 % 3619),
SUM(c4 % 3620), SUM(c4 % 3621), SUM(c4 % 3622), SUM(c4 % 3623), SUM(c4 % 3624),
SUM(c4 % 3625), SUM(c4 % 3626), SUM(c4 % 3627), SUM(c4 % 3628), SUM(c4 % 3629),
SUM(c4 % 3630), SUM(c4 % 3631), SUM(c4 % 3632), SUM(c4 % 3633), SUM(c4 % 3634),
SUM(c4 % 3635), SUM(c4 % 3636), SUM(c4 % 3637), SUM(c4 % 3638), SUM(c4 % 3639),
SUM(c4 % 3640), SUM(c4 % 3641), SUM(c4 % 3642), SUM(c4 % 3643), SUM(c4 % 3644),
SUM(c4 % 3645), SUM(c4 % 3646), SUM(c4 % 3647), SUM(c4 % 3648), SUM(c4 % 3649),
SUM(c4 % 3650), SUM(c4 % 3651), SUM(c4 % 3652), SUM(c4 % 3653), SUM(c4 % 3654),
SUM(c4 % 3655), SUM(c4 % 3656), SUM(c4 % 3657), SUM(c4 % 3658), SUM(c4 % 3659),
SUM(c4 % 3660), SUM(c4 % 3661), SUM(c4 % 3662), SUM(c4 % 3663), SUM(c4 % 3664),
SUM(c4 % 3665), SUM(c4 % 3666), SUM(c4 % 3667), SUM(c4 % 3668), SUM(c4 % 3669),
SUM(c4 % 3670), SUM(c4 % 3671), SUM(c4 % 3672), SUM(c4 % 3673), SUM(c4 % 3674),
SUM(c4 % 3675), SUM(c4 % 3676), SUM(c4 % 3677), SUM(c4 % 3678), SUM(c4 % 3679),
SUM(c4 % 3680), SUM(c4 % 3681), SUM(c4 % 3682), SUM(c4 % 3683), SUM(c4 % 3684),
SUM(c4 % 3685), SUM(c4 % 3686), SUM(c4 % 3687), SUM(c4 % 3688), SUM(c4 % 3689),
SUM(c4 % 3690), SUM(c4 % 3691), SUM(c4 % 3692), SUM(c4 % 3693), SUM(c4 % 3694),
SUM(c4 % 3695), SUM(c4 % 3696), SUM(c4 % 3697), SUM(c4 % 3698), SUM(c4 % 3699),
SUM(c4 % 3700), SUM(c4 % 3701), SUM(c4 % 3702), SUM(c4 % 3703), SUM(c4 % 3704),
SUM(c4 % 3705), SUM(c4 % 3706), SUM(c4 % 3707), SUM(c4 % 3708), SUM(c4 % 3709),
SUM(c4 % 3710), SUM(c4 % 3711), SUM(c4 % 3712), SUM(c4 % 3713), SUM(c4 % 3714),
SUM(c4 % 3715), SUM(c4 % 3716), SUM(c4 % 3717), SUM(c4 % 3718), SUM(c4 % 3719),
SUM(c4 % 3720), SUM(c4 % 3721), SUM(c4 % 3722), SUM(c4 % 3723), SUM(c4 % 3724),
SUM(c4 % 3725), SUM(c4 % 3726), SUM(c4 % 3727), SUM(c4 % 3728), SUM(c4 % 3729),
SUM(c4 % 3730), SUM(c4 % 3731), SUM(c4 % 3732), SUM(c4 % 3733), SUM(c4 % 3734),
SUM(c4 % 3735), SUM(c4 % 3736), SUM(c4 % 3737), SUM(c4 % 3738), SUM(c4 % 3739),
SUM(c4 % 3740), SUM(c4 % 3741), SUM(c4 % 3742), SUM(c4 % 3743), SUM(c4 % 3744),
SUM(c4 % 3745), SUM(c4 % 3746), SUM(c4 % 3747), SUM(c4 % 3748), SUM(c4 % 3749),
SUM(c4 % 3750), SUM(c4 % 3751), SUM(c4 % 3752), SUM(c4 % 3753), SUM(c4 % 3754),
SUM(c4 % 3755), SUM(c4 % 3756), SUM(c4 % 3757), SUM(c4 % 3758), SUM(c4 % 3759),
SUM(c4 % 3760), SUM(c4 % 3761), SUM(c4 % 3762), SUM(c4 % 3763), SUM(c4 % 3764),
SUM(c4 % 3765), SUM(c4 % 3766), SUM(c4 % 3767), SUM(c4 % 3768), SUM(c4 % 3769),
SUM(c4 % 3770), SUM(c4 % 3771), SUM(c4 % 3772), SUM(c4 % 3773), SUM(c4 % 3774),
SUM(c4 % 3775), SUM(c4 % 3776), SUM(c4 % 3777), SUM(c4 % 3778), SUM(c4 % 3779),
SUM(c4 % 3780), SUM(c4 % 3781), SUM(c4 % 3782), SUM(c4 % 3783), SUM(c4 % 3784),
SUM(c4 % 3785), SUM(c4 % 3786), SUM(c4 % 3787), SUM(c4 % 3788), SUM(c4 % 3789),
SUM(c4 % 3790), SUM(c4 % 3791), SUM(c4 % 3792), SUM(c4 % 3793), SUM(c4 % 3794),
SUM(c4 % 3795), SUM(c4 % 3796), SUM(c4 % 3797), SUM(c4 % 3798), SUM(c4 % 3799),
SUM(c4 % 3800), SUM(c4 % 3801), SUM(c4 % 3802), SUM(c4 % 3803), SUM(c4 % 3804),
SUM(c4 % 3805), SUM(c4 % 3806), SUM(c4 % 3807), SUM(c4 % 3808), SUM(c4 % 3809),
SUM(c4 % 3810), SUM(c4 % 3811), SUM(c4 % 3812), SUM(c4 % 3813), SUM(c4 % 3814),
SUM(c4 % 3815), SUM(c4 % 3816), SUM(c4 % 3817), SUM(c4 % 3818), SUM(c4 % 3819),
SUM(c4 % 3820), SUM(c4 % 3821), SUM(c4 % 3822), SUM(c4 % 3823), SUM(c4 % 3824),
SUM(c4 % 3825), SUM(c4 % 3826), SUM(c4 % 3827), SUM(c4 % 3828), SUM(c4 % 3829),
SUM(c4 % 3830), SUM(c4 % 3831), SUM(c4 % 3832), SUM(c4 % 3833), SUM(c4 % 3834),
SUM(c4 % 3835), SUM(c4 % 3836), SUM(c4 % 3837), SUM(c4 % 3838), SUM(c4 % 3839),
SUM(c4 % 3840), SUM(c4 % 3841), SUM(c4 % 3842), SUM(c4 % 3843), SUM(c4 % 3844),
SUM(c4 % 3845), SUM(c4 % 3846), SUM(c4 % 3847), SUM(c4 % 3848), SUM(c4 % 3849),
SUM(c4 % 3850), SUM(c4 % 3851), SUM(c4 % 3852), SUM(c4 % 3853), SUM(c4 % 3854),
SUM(c4 % 3855), SUM(c4 % 3856), SUM(c4 % 3857), SUM(c4 % 3858), SUM(c4 % 3859),
SUM(c4 % 3860), SUM(c4 % 3861), SUM(c4 % 3862), SUM(c4 % 3863), SUM(c4 % 3864),
SUM(c4 % 3865), SUM(c4 % 3866), SUM(c4 % 3867), SUM(c4 % 3868), SUM(c4 % 3869),
SUM(c4 % 3870), SUM(c4 % 3871), SUM(c4 % 3872), SUM(c4 % 3873), SUM(c4 % 3874),
SUM(c4 % 3875), SUM(c4 % 3876), SUM(c4 % 3877), SUM(c4 % 3878), SUM(c4 % 3879),
SUM(c4 % 3880), SUM(c4 % 3881), SUM(c4 % 3882), SUM(c4 % 3883), SUM(c4 % 3884),
SUM(c4 % 3885), SUM(c4 % 3886), SUM(c4 % 3887), SUM(c4 % 3888), SUM(c4 % 3889),
SUM(c4 % 3890), SUM(c4 % 3891), SUM(c4 % 3892), SUM(c4 % 3893), SUM(c4 % 3894),
SUM(c4 % 3895), SUM(c4 % 3896), SUM(c4 % 3897), SUM(c4 % 3898), SUM(c4 % 3899),
SUM(c4 % 3900), SUM(c4 % 3901), SUM(c4 % 3902), SUM(c4 % 3903), SUM(c4 % 3904),
SUM(c4 % 3905), SUM(c4 % 3906), SUM(c4 % 3907), SUM(c4 % 3908), SUM(c4 % 3909),
SUM(c4 % 3910), SUM(c4 % 3911), SUM(c4 % 3912), SUM(c4 % 3913), SUM(c4 % 3914),
SUM(c4 % 3915), SUM(c4 % 3916), SUM(c4 % 3917), SUM(c4 % 3918), SUM(c4 % 3919),
SUM(c4 % 3920), SUM(c4 % 3921), SUM(c4 % 3922), SUM(c4 % 3923), SUM(c4 % 3924),
SUM(c4 % 3925), SUM(c4 % 3926), SUM(c4 % 3927), SUM(c4 % 3928), SUM(c4 % 3929),
SUM(c4 % 3930), SUM(c4 % 3931), SUM(c4 % 3932), SUM(c4 % 3933), SUM(c4 % 3934),
SUM(c4 % 3935), SUM(c4 % 3936), SUM(c4 % 3937), SUM(c4 % 3938), SUM(c4 % 3939),
SUM(c4 % 3940), SUM(c4 % 3941), SUM(c4 % 3942), SUM(c4 % 3943), SUM(c4 % 3944),
SUM(c4 % 3945), SUM(c4 % 3946), SUM(c4 % 3947), SUM(c4 % 3948), SUM(c4 % 3949),
SUM(c4 % 3950), SUM(c4 % 3951), SUM(c4 % 3952), SUM(c4 % 3953), SUM(c4 % 3954),
SUM(c4 % 3955), SUM(c4 % 3956), SUM(c4 % 3957), SUM(c4 % 3958), SUM(c4 % 3959),
SUM(c4 % 3960), SUM(c4 % 3961), SUM(c4 % 3962), SUM(c4 % 3963), SUM(c4 % 3964),
SUM(c4 % 3965), SUM(c4 % 3966), SUM(c4 % 3967), SUM(c4 % 3968), SUM(c4 % 3969),
SUM(c4 % 3970), SUM(c4 % 3971), SUM(c4 % 3972), SUM(c4 % 3973), SUM(c4 % 3974),
SUM(c4 % 3975), SUM(c4 % 3976), SUM(c4 % 3977), SUM(c4 % 3978), SUM(c4 % 3979),
SUM(c4 % 3980), SUM(c4 % 3981), SUM(c4 % 3982), SUM(c4 % 3983), SUM(c4 % 3984),
SUM(c4 % 3985), SUM(c4 % 3986), SUM(c4 % 3987), SUM(c4 % 3988), SUM(c4 % 3989),
SUM(c4 % 3990), SUM(c4 % 3991), SUM(c4 % 3992), SUM(c4 % 3993), SUM(c4 % 3994),
SUM(c4 % 3995), SUM(c4 % 3996), SUM(c4 % 3997), SUM(c4 % 3998), SUM(c4 % 3999),
SUM(c4 % 4000), SUM(c4 % 4001), SUM(c4 % 4002), SUM(c4 % 4003), SUM(c4 % 4004),
SUM(c4 % 4005), SUM(c4 % 4006), SUM(c4 % 4007), SUM(c4 % 4008), SUM(c4 % 4009),
SUM(c4 % 4010), SUM(c4 % 4011), SUM(c4 % 4012), SUM(c4 % 4013), SUM(c4 % 4014),
SUM(c4 % 4015), SUM(c4 % 4016), SUM(c4 % 4017), SUM(c4 % 4018), SUM(c4 % 4019),
SUM(c4 % 4020), SUM(c4 % 4021), SUM(c4 % 4022), SUM(c4 % 4023), SUM(c4 % 4024),
SUM(c4 % 4025), SUM(c4 % 4026), SUM(c4 % 4027), SUM(c4 % 4028), SUM(c4 % 4029),
SUM(c4 % 4030), SUM(c4 % 4031), SUM(c4 % 4032), SUM(c4 % 4033), SUM(c4 % 4034),
SUM(c4 % 4035), SUM(c4 % 4036), SUM(c4 % 4037), SUM(c4 % 4038), SUM(c4 % 4039),
SUM(c4 % 4040), SUM(c4 % 4041), SUM(c4 % 4042), SUM(c4 % 4043), SUM(c4 % 4044),
SUM(c4 % 4045), SUM(c4 % 4046), SUM(c4 % 4047), SUM(c4 % 4048), SUM(c4 % 4049),
SUM(c4 % 4050), SUM(c4 % 4051), SUM(c4 % 4052), SUM(c4 % 4053), SUM(c4 % 4054),
SUM(c4 % 4055), SUM(c4 % 4056), SUM(c4 % 4057), SUM(c4 % 4058), SUM(c4 % 4059),
SUM(c4 % 4060), SUM(c4 % 4061), SUM(c4 % 4062), SUM(c4 % 4063), SUM(c4 % 4064),
SUM(c4 % 4065), SUM(c4 % 4066), SUM(c4 % 4067), SUM(c4 % 4068), SUM(c4 % 4069),
SUM(c4 % 4070), SUM(c4 % 4071), SUM(c4 % 4072), SUM(c4 % 4073), SUM(c4 % 4074),
SUM(c4 % 4075), SUM(c4 % 4076), SUM(c4 % 4077), SUM(c4 % 4078), SUM(c4 % 4079),
SUM(c4 % 4080), SUM(c4 % 4081), SUM(c4 % 4082), SUM(c4 % 4083), SUM(c4 % 4084),
SUM(c4 % 4085), SUM(c4 % 4086), SUM(c4 % 4087), SUM(c4 % 4088), SUM(c4 % 4089),
SUM(c4 % 4090), SUM(c4 % 4091), SUM(c4 % 4092), SUM(c4 % 4093), SUM(c4 % 4094),
SUM(c4 % 4095), SUM(c4 % 4096), SUM(c4 % 4097), SUM(c4 % 4098), SUM(c4 % 4099),
SUM(c4 % 4100), SUM(c4 % 4101), SUM(c4 % 4102), SUM(c4 % 4103), SUM(c4 % 4104),
SUM(c4 % 4105), SUM(c4 % 4106), SUM(c4 % 4107), SUM(c4 % 4108), SUM(c4 % 4109),
SUM(c4 % 4110), SUM(c4 % 4111), SUM(c4 % 4112), SUM(c4 % 4113), SUM(c4 % 4114),
SUM(c4 % 4115), SUM(c4 % 4116), SUM(c4 % 4117), SUM(c4 % 4118), SUM(c4 % 4119),
SUM(c4 % 4120), SUM(c4 % 4121), SUM(c4 % 4122), SUM(c4 % 4123), SUM(c4 % 4124),
SUM(c4 % 4125), SUM(c4 % 4126), SUM(c4 % 4127), SUM(c4 % 4128), SUM(c4 % 4129),
SUM(c4 % 4130), SUM(c4 % 4131), SUM(c4 % 4132), SUM(c4 % 4133), SUM(c4 % 4134),
SUM(c4 % 4135), SUM(c4 % 4136), SUM(c4 % 4137), SUM(c4 % 4138), SUM(c4 % 4139),
SUM(c4 % 4140), SUM(c4 % 4141), SUM(c4 % 4142), SUM(c4 % 4143), SUM(c4 % 4144),
SUM(c4 % 4145), SUM(c4 % 4146), SUM(c4 % 4147), SUM(c4 % 4148), SUM(c4 % 4149),
SUM(c4 % 4150), SUM(c4 % 4151), SUM(c4 % 4152), SUM(c4 % 4153), SUM(c4 % 4154),
SUM(c4 % 4155), SUM(c4 % 4156), SUM(c4 % 4157), SUM(c4 % 4158), SUM(c4 % 4159),
SUM(c4 % 4160), SUM(c4 % 4161), SUM(c4 % 4162), SUM(c4 % 4163), SUM(c4 % 4164),
SUM(c4 % 4165), SUM(c4 % 4166), SUM(c4 % 4167), SUM(c4 % 4168), SUM(c4 % 4169),
SUM(c4 % 4170), SUM(c4 % 4171), SUM(c4 % 4172), SUM(c4 % 4173), SUM(c4 % 4174),
SUM(c4 % 4175), SUM(c4 % 4176), SUM(c4 % 4177), SUM(c4 % 4178), SUM(c4 % 4179),
SUM(c4 % 4180), SUM(c4 % 4181), SUM(c4 % 4182), SUM(c4 % 4183), SUM(c4 % 4184),
SUM(c4 % 4185), SUM(c4 % 4186), SUM(c4 % 4187), SUM(c4 % 4188), SUM(c4 % 4189),
SUM(c4 % 4190), SUM(c4 % 4191), SUM(c4 % 4192), SUM(c4 % 4193), SUM(c4 % 4194),
SUM(c4 % 4195), SUM(c4 % 4196), SUM(c4 % 4197), SUM(c4 % 4198), SUM(c4 % 4199),
SUM(c4 % 4200), SUM(c4 % 4201), SUM(c4 % 4202), SUM(c4 % 4203), SUM(c4 % 4204),
SUM(c4 % 4205), SUM(c4 % 4206), SUM(c4 % 4207), SUM(c4 % 4208), SUM(c4 % 4209),
SUM(c4 % 4210), SUM(c4 % 4211), SUM(c4 % 4212), SUM(c4 % 4213), SUM(c4 % 4214),
SUM(c4 % 4215), SUM(c4 % 4216), SUM(c4 % 4217), SUM(c4 % 4218), SUM(c4 % 4219),
SUM(c4 % 4220), SUM(c4 % 4221), SUM(c4 % 4222), SUM(c4 % 4223), SUM(c4 % 4224),
SUM(c4 % 4225), SUM(c4 % 4226), SUM(c4 % 4227), SUM(c4 % 4228), SUM(c4 % 4229),
SUM(c4 % 4230), SUM(c4 % 4231), SUM(c4 % 4232), SUM(c4 % 4233), SUM(c4 % 4234),
SUM(c4 % 4235), SUM(c4 % 4236), SUM(c4 % 4237), SUM(c4 % 4238), SUM(c4 % 4239),
SUM(c4 % 4240), SUM(c4 % 4241), SUM(c4 % 4242), SUM(c4 % 4243), SUM(c4 % 4244),
SUM(c4 % 4245), SUM(c4 % 4246), SUM(c4 % 4247), SUM(c4 % 4248), SUM(c4 % 4249),
SUM(c4 % 4250), SUM(c4 % 4251), SUM(c4 % 4252), SUM(c4 % 4253), SUM(c4 % 4254),
SUM(c4 % 4255), SUM(c4 % 4256), SUM(c4 % 4257), SUM(c4 % 4258), SUM(c4 % 4259),
SUM(c4 % 4260), SUM(c4 % 4261), SUM(c4 % 4262), SUM(c4 % 4263), SUM(c4 % 4264),
SUM(c4 % 4265), SUM(c4 % 4266), SUM(c4 % 4267), SUM(c4 % 4268), SUM(c4 % 4269),
SUM(c4 % 4270), SUM(c4 % 4271), SUM(c4 % 4272), SUM(c4 % 4273), SUM(c4 % 4274),
SUM(c4 % 4275), SUM(c4 % 4276), SUM(c4 % 4277), SUM(c4 % 4278), SUM(c4 % 4279),
SUM(c4 % 4280), SUM(c4 % 4281), SUM(c4 % 4282), SUM(c4 % 4283), SUM(c4 % 4284),
SUM(c4 % 4285), SUM(c4 % 4286), SUM(c4 % 4287), SUM(c4 % 4288), SUM(c4 % 4289),
SUM(c4 % 4290), SUM(c4 % 4291), SUM(c4 % 4292), SUM(c4 % 4293), SUM(c4 % 4294),
SUM(c4 % 4295), SUM(c4 % 4296), SUM(c4 % 4297), SUM(c4 % 4298), SUM(c4 % 4299),
SUM(c4 % 4300), SUM(c4 % 4301), SUM(c4 % 4302), SUM(c4 % 4303), SUM(c4 % 4304),
SUM(c4 % 4305), SUM(c4 % 4306), SUM(c4 % 4307), SUM(c4 % 4308), SUM(c4 % 4309),
SUM(c4 % 4310), SUM(c4 % 4311), SUM(c4 % 4312), SUM(c4 % 4313), SUM(c4 % 4314),
SUM(c4 % 4315), SUM(c4 % 4316), SUM(c4 % 4317), SUM(c4 % 4318), SUM(c4 % 4319),
SUM(c4 % 4320), SUM(c4 % 4321), SUM(c4 % 4322), SUM(c4 % 4323), SUM(c4 % 4324),
SUM(c4 % 4325), SUM(c4 % 4326), SUM(c4 % 4327), SUM(c4 % 4328), SUM(c4 % 4329),
SUM(c4 % 4330), SUM(c4 % 4331), SUM(c4 % 4332), SUM(c4 % 4333), SUM(c4 % 4334),
SUM(c4 % 4335), SUM(c4 % 4336), SUM(c4 % 4337), SUM(c4 % 4338), SUM(c4 % 4339),
SUM(c4 % 4340), SUM(c4 % 4341), SUM(c4 % 4342), SUM(c4 % 4343), SUM(c4 % 4344),
SUM(c4 % 4345), SUM(c4 % 4346), SUM(c4 % 4347), SUM(c4 % 4348), SUM(c4 % 4349),
SUM(c4 % 4350), SUM(c4 % 4351), SUM(c4 % 4352), SUM(c4 % 4353), SUM(c4 % 4354),
SUM(c4 % 4355), SUM(c4 % 4356), SUM(c4 % 4357), SUM(c4 % 4358), SUM(c4 % 4359),
SUM(c4 % 4360), SUM(c4 % 4361), SUM(c4 % 4362), SUM(c4 % 4363), SUM(c4 % 4364),
SUM(c4 % 4365), SUM(c4 % 4366), SUM(c4 % 4367), SUM(c4 % 4368), SUM(c4 % 4369),
SUM(c4 % 4370), SUM(c4 % 4371), SUM(c4 % 4372), SUM(c4 % 4373), SUM(c4 % 4374),
SUM(c4 % 4375), SUM(c4 % 4376), SUM(c4 % 4377), SUM(c4 % 4378), SUM(c4 % 4379),
SUM(c4 % 4380), SUM(c4 % 4381), SUM(c4 % 4382), SUM(c4 % 4383), SUM(c4 % 4384),
SUM(c4 % 4385), SUM(c4 % 4386), SUM(c4 % 4387), SUM(c4 % 4388), SUM(c4 % 4389),
SUM(c4 % 4390), SUM(c4 % 4391), SUM(c4 % 4392), SUM(c4 % 4393), SUM(c4 % 4394),
SUM(c4 % 4395), SUM(c4 % 4396), SUM(c4 % 4397), SUM(c4 % 4398), SUM(c4 % 4399),
SUM(c4 % 4400), SUM(c4 % 4401), SUM(c4 % 4402), SUM(c4 % 4403), SUM(c4 % 4404),
SUM(c4 % 4405), SUM(c4 % 4406), SUM(c4 % 4407), SUM(c4 % 4408), SUM(c4 % 4409),
SUM(c4 % 4410), SUM(c4 % 4411), SUM(c4 % 4412), SUM(c4 % 4413), SUM(c4 % 4414),
SUM(c4 % 4415), SUM(c4 % 4416), SUM(c4 % 4417), SUM(c4 % 4418), SUM(c4 % 4419),
SUM(c4 % 4420), SUM(c4 % 4421), SUM(c4 % 4422), SUM(c4 % 4423), SUM(c4 % 4424),
SUM(c4 % 4425), SUM(c4 % 4426), SUM(c4 % 4427), SUM(c4 % 4428), SUM(c4 % 4429),
SUM(c4 % 4430), SUM(c4 % 4431), SUM(c4 % 4432), SUM(c4 % 4433), SUM(c4 % 4434),
SUM(c4 % 4435), SUM(c4 % 4436), SUM(c4 % 4437), SUM(c4 % 4438), SUM(c4 % 4439),
SUM(c4 % 4440), SUM(c4 % 4441), SUM(c4 % 4442), SUM(c4 % 4443), SUM(c4 % 4444),
SUM(c4 % 4445), SUM(c4 % 4446), SUM(c4 % 4447), SUM(c4 % 4448), SUM(c4 % 4449),
SUM(c4 % 4450), SUM(c4 % 4451), SUM(c4 % 4452), SUM(c4 % 4453), SUM(c4 % 4454),
SUM(c4 % 4455), SUM(c4 % 4456), SUM(c4 % 4457), SUM(c4 % 4458), SUM(c4 % 4459),
SUM(c4 % 4460), SUM(c4 % 4461), SUM(c4 % 4462), SUM(c4 % 4463), SUM(c4 % 4464),
SUM(c4 % 4465), SUM(c4 % 4466), SUM(c4 % 4467), SUM(c4 % 4468), SUM(c4 % 4469),
SUM(c4 % 4470), SUM(c4 % 4471), SUM(c4 % 4472), SUM(c4 % 4473), SUM(c4 % 4474),
SUM(c4 % 4475), SUM(c4 % 4476), SUM(c4 % 4477), SUM(c4 % 4478), SUM(c4 % 4479),
SUM(c4 % 4480), SUM(c4 % 4481), SUM(c4 % 4482), SUM(c4 % 4483), SUM(c4 % 4484),
SUM(c4 % 4485), SUM(c4 % 4486), SUM(c4 % 4487), SUM(c4 % 4488), SUM(c4 % 4489),
SUM(c4 % 4490), SUM(c4 % 4491), SUM(c4 % 4492), SUM(c4 % 4493), SUM(c4 % 4494),
SUM(c4 % 4495), SUM(c4 % 4496), SUM(c4 % 4497), SUM(c4 % 4498), SUM(c4 % 4499),
SUM(c4 % 4500), SUM(c4 % 4501), SUM(c4 % 4502), SUM(c4 % 4503), SUM(c4 % 4504),
SUM(c4 % 4505), SUM(c4 % 4506), SUM(c4 % 4507), SUM(c4 % 4508), SUM(c4 % 4509),
SUM(c4 % 4510), SUM(c4 % 4511), SUM(c4 % 4512), SUM(c4 % 4513), SUM(c4 % 4514),
SUM(c4 % 4515), SUM(c4 % 4516), SUM(c4 % 4517), SUM(c4 % 4518), SUM(c4 % 4519),
SUM(c4 % 4520), SUM(c4 % 4521), SUM(c4 % 4522), SUM(c4 % 4523), SUM(c4 % 4524),
SUM(c4 % 4525), SUM(c4 % 4526), SUM(c4 % 4527), SUM(c4 % 4528), SUM(c4 % 4529),
SUM(c4 % 4530), SUM(c4 % 4531), SUM(c4 % 4532), SUM(c4 % 4533), SUM(c4 % 4534),
SUM(c4 % 4535), SUM(c4 % 4536), SUM(c4 % 4537), SUM(c4 % 4538), SUM(c4 % 4539),
SUM(c4 % 4540), SUM(c4 % 4541), SUM(c4 % 4542), SUM(c4 % 4543), SUM(c4 % 4544),
SUM(c4 % 4545), SUM(c4 % 4546), SUM(c4 % 4547), SUM(c4 % 4548), SUM(c4 % 4549),
SUM(c4 % 4550), SUM(c4 % 4551), SUM(c4 % 4552), SUM(c4 % 4553), SUM(c4 % 4554),
SUM(c4 % 4555), SUM(c4 % 4556), SUM(c4 % 4557), SUM(c4 % 4558), SUM(c4 % 4559),
SUM(c4 % 4560), SUM(c4 % 4561), SUM(c4 % 4562), SUM(c4 % 4563), SUM(c4 % 4564),
SUM(c4 % 4565), SUM(c4 % 4566), SUM(c4 % 4567), SUM(c4 % 4568), SUM(c4 % 4569),
SUM(c4 % 4570), SUM(c4 % 4571), SUM(c4 % 4572), SUM(c4 % 4573), SUM(c4 % 4574),
SUM(c4 % 4575), SUM(c4 % 4576), SUM(c4 % 4577), SUM(c4 % 4578), SUM(c4 % 4579),
SUM(c4 % 4580), SUM(c4 % 4581), SUM(c4 % 4582), SUM(c4 % 4583), SUM(c4 % 4584),
SUM(c4 % 4585), SUM(c4 % 4586), SUM(c4 % 4587), SUM(c4 % 4588), SUM(c4 % 4589),
SUM(c4 % 4590), SUM(c4 % 4591), SUM(c4 % 4592), SUM(c4 % 4593), SUM(c4 % 4594),
SUM(c4 % 4595), SUM(c4 % 4596), SUM(c4 % 4597), SUM(c4 % 4598), SUM(c4 % 4599),
SUM(c4 % 4600), SUM(c4 % 4601), SUM(c4 % 4602), SUM(c4 % 4603), SUM(c4 % 4604),
SUM(c4 % 4605), SUM(c4 % 4606), SUM(c4 % 4607), SUM(c4 % 4608), SUM(c4 % 4609),
SUM(c4 % 4610), SUM(c4 % 4611), SUM(c4 % 4612), SUM(c4 % 4613), SUM(c4 % 4614),
SUM(c4 % 4615), SUM(c4 % 4616), SUM(c4 % 4617), SUM(c4 % 4618), SUM(c4 % 4619),
SUM(c4 % 4620), SUM(c4 % 4621), SUM(c4 % 4622), SUM(c4 % 4623), SUM(c4 % 4624),
SUM(c4 % 4625), SUM(c4 % 4626), SUM(c4 % 4627), SUM(c4 % 4628), SUM(c4 % 4629),
SUM(c4 % 4630), SUM(c4 % 4631), SUM(c4 % 4632), SUM(c4 % 4633), SUM(c4 % 4634),
SUM(c4 % 4635), SUM(c4 % 4636), SUM(c4 % 4637), SUM(c4 % 4638), SUM(c4 % 4639),
SUM(c4 % 4640), SUM(c4 % 4641), SUM(c4 % 4642), SUM(c4 % 4643), SUM(c4 % 4644),
SUM(c4 % 4645), SUM(c4 % 4646), SUM(c4 % 4647), SUM(c4 % 4648), SUM(c4 % 4649),
SUM(c4 % 4650), SUM(c4 % 4651), SUM(c4 % 4652), SUM(c4 % 4653), SUM(c4 % 4654),
SUM(c4 % 4655), SUM(c4 % 4656), SUM(c4 % 4657), SUM(c4 % 4658), SUM(c4 % 4659),
SUM(c4 % 4660), SUM(c4 % 4661), SUM(c4 % 4662), SUM(c4 % 4663), SUM(c4 % 4664),
SUM(c4 % 4665), SUM(c4 % 4666), SUM(c4 % 4667), SUM(c4 % 4668), SUM(c4 % 4669),
SUM(c4 % 4670), SUM(c4 % 4671), SUM(c4 % 4672), SUM(c4 % 4673), SUM(c4 % 4674),
SUM(c4 % 4675), SUM(c4 % 4676), SUM(c4 % 4677), SUM(c4 % 4678), SUM(c4 % 4679),
SUM(c4 % 4680), SUM(c4 % 4681), SUM(c4 % 4682), SUM(c4 % 4683), SUM(c4 % 4684),
SUM(c4 % 4685), SUM(c4 % 4686), SUM(c4 % 4687), SUM(c4 % 4688), SUM(c4 % 4689),
SUM(c4 % 4690), SUM(c4 % 4691), SUM(c4 % 4692), SUM(c4 % 4693), SUM(c4 % 4694),
SUM(c4 % 4695), SUM(c4 % 4696), SUM(c4 % 4697), SUM(c4 % 4698), SUM(c4 % 4699),
SUM(c4 % 4700), SUM(c4 % 4701), SUM(c4 % 4702), SUM(c4 % 4703), SUM(c4 % 4704),
SUM(c4 % 4705), SUM(c4 % 4706), SUM(c4 % 4707), SUM(c4 % 4708), SUM(c4 % 4709),
SUM(c4 % 4710), SUM(c4 % 4711), SUM(c4 % 4712), SUM(c4 % 4713), SUM(c4 % 4714),
SUM(c4 % 4715), SUM(c4 % 4716), SUM(c4 % 4717), SUM(c4 % 4718), SUM(c4 % 4719),
SUM(c4 % 4720), SUM(c4 % 4721), SUM(c4 % 4722), SUM(c4 % 4723), SUM(c4 % 4724),
SUM(c4 % 4725), SUM(c4 % 4726), SUM(c4 % 4727), SUM(c4 % 4728), SUM(c4 % 4729),
SUM(c4 % 4730), SUM(c4 % 4731), SUM(c4 % 4732), SUM(c4 % 4733), SUM(c4 % 4734),
SUM(c4 % 4735), SUM(c4 % 4736), SUM(c4 % 4737), SUM(c4 % 4738), SUM(c4 % 4739),
SUM(c4 % 4740), SUM(c4 % 4741), SUM(c4 % 4742), SUM(c4 % 4743), SUM(c4 % 4744),
SUM(c4 % 4745), SUM(c4 % 4746), SUM(c4 % 4747), SUM(c4 % 4748), SUM(c4 % 4749),
SUM(c4 % 4750), SUM(c4 % 4751), SUM(c4 % 4752), SUM(c4 % 4753), SUM(c4 % 4754),
SUM(c4 % 4755), SUM(c4 % 4756), SUM(c4 % 4757), SUM(c4 % 4758), SUM(c4 % 4759),
SUM(c4 % 4760), SUM(c4 % 4761), SUM(c4 % 4762), SUM(c4 % 4763), SUM(c4 % 4764),
SUM(c4 % 4765), SUM(c4 % 4766), SUM(c4 % 4767), SUM(c4 % 4768), SUM(c4 % 4769),
SUM(c4 % 4770), SUM(c4 % 4771), SUM(c4 % 4772), SUM(c4 % 4773), SUM(c4 % 4774),
SUM(c4 % 4775), SUM(c4 % 4776), SUM(c4 % 4777), SUM(c4 % 4778), SUM(c4 % 4779),
SUM(c4 % 4780), SUM(c4 % 4781), SUM(c4 % 4782), SUM(c4 % 4783), SUM(c4 % 4784),
SUM(c4 % 4785), SUM(c4 % 4786), SUM(c4 % 4787), SUM(c4 % 4788), SUM(c4 % 4789),
SUM(c4 % 4790), SUM(c4 % 4791), SUM(c4 % 4792), SUM(c4 % 4793), SUM(c4 % 4794),
SUM(c4 % 4795), SUM(c4 % 4796), SUM(c4 % 4797), SUM(c4 % 4798), SUM(c4 % 4799),
SUM(c4 % 4800), SUM(c4 % 4801), SUM(c4 % 4802), SUM(c4 % 4803), SUM(c4 % 4804),
SUM(c4 % 4805), SUM(c4 % 4806), SUM(c4 % 4807), SUM(c4 % 4808), SUM(c4 % 4809),
SUM(c4 % 4810), SUM(c4 % 4811), SUM(c4 % 4812), SUM(c4 % 4813), SUM(c4 % 4814),
SUM(c4 % 4815), SUM(c4 % 4816), SUM(c4 % 4817), SUM(c4 % 4818), SUM(c4 % 4819),
SUM(c4 % 4820), SUM(c4 % 4821), SUM(c4 % 4822), SUM(c4 % 4823), SUM(c4 % 4824),
SUM(c4 % 4825), SUM(c4 % 4826), SUM(c4 % 4827), SUM(c4 % 4828), SUM(c4 % 4829),
SUM(c4 % 4830), SUM(c4 % 4831), SUM(c4 % 4832), SUM(c4 % 4833), SUM(c4 % 4834),
SUM(c4 % 4835), SUM(c4 % 4836), SUM(c4 % 4837), SUM(c4 % 4838), SUM(c4 % 4839),
SUM(c4 % 4840), SUM(c4 % 4841), SUM(c4 % 4842), SUM(c4 % 4843), SUM(c4 % 4844),
SUM(c4 % 4845), SUM(c4 % 4846), SUM(c4 % 4847), SUM(c4 % 4848), SUM(c4 % 4849),
SUM(c4 % 4850), SUM(c4 % 4851), SUM(c4 % 4852), SUM(c4 % 4853), SUM(c4 % 4854),
SUM(c4 % 4855), SUM(c4 % 4856), SUM(c4 % 4857), SUM(c4 % 4858), SUM(c4 % 4859),
SUM(c4 % 4860), SUM(c4 % 4861), SUM(c4 % 4862), SUM(c4 % 4863), SUM(c4 % 4864),
SUM(c4 % 4865), SUM(c4 % 4866), SUM(c4 % 4867), SUM(c4 % 4868), SUM(c4 % 4869),
SUM(c4 % 4870), SUM(c4 % 4871), SUM(c4 % 4872), SUM(c4 % 4873), SUM(c4 % 4874),
SUM(c4 % 4875), SUM(c4 % 4876), SUM(c4 % 4877), SUM(c4 % 4878), SUM(c4 % 4879),
SUM(c4 % 4880), SUM(c4 % 4881), SUM(c4 % 4882), SUM(c4 % 4883), SUM(c4 % 4884),
SUM(c4 % 4885), SUM(c4 % 4886), SUM(c4 % 4887), SUM(c4 % 4888), SUM(c4 % 4889),
SUM(c4 % 4890), SUM(c4 % 4891), SUM(c4 % 4892), SUM(c4 % 4893), SUM(c4 % 4894),
SUM(c4 % 4895), SUM(c4 % 4896), SUM(c4 % 4897), SUM(c4 % 4898), SUM(c4 % 4899),
SUM(c4 % 4900), SUM(c4 % 4901), SUM(c4 % 4902), SUM(c4 % 4903), SUM(c4 % 4904),
SUM(c4 % 4905), SUM(c4 % 4906), SUM(c4 % 4907), SUM(c4 % 4908), SUM(c4 % 4909),
SUM(c4 % 4910), SUM(c4 % 4911), SUM(c4 % 4912), SUM(c4 % 4913), SUM(c4 % 4914),
SUM(c4 % 4915), SUM(c4 % 4916), SUM(c4 % 4917), SUM(c4 % 4918), SUM(c4 % 4919),
SUM(c4 % 4920), SUM(c4 % 4921), SUM(c4 % 4922), SUM(c4 % 4923), SUM(c4 % 4924),
SUM(c4 % 4925), SUM(c4 % 4926), SUM(c4 % 4927), SUM(c4 % 4928), SUM(c4 % 4929),
SUM(c4 % 4930), SUM(c4 % 4931), SUM(c4 % 4932), SUM(c4 % 4933), SUM(c4 % 4934),
SUM(c4 % 4935), SUM(c4 % 4936), SUM(c4 % 4937), SUM(c4 % 4938), SUM(c4 % 4939),
SUM(c4 % 4940), SUM(c4 % 4941), SUM(c4 % 4942), SUM(c4 % 4943), SUM(c4 % 4944),
SUM(c4 % 4945), SUM(c4 % 4946), SUM(c4 % 4947), SUM(c4 % 4948), SUM(c4 % 4949),
SUM(c4 % 4950), SUM(c4 % 4951), SUM(c4 % 4952), SUM(c4 % 4953), SUM(c4 % 4954),
SUM(c4 % 4955), SUM(c4 % 4956), SUM(c4 % 4957), SUM(c4 % 4958), SUM(c4 % 4959),
SUM(c4 % 4960), SUM(c4 % 4961), SUM(c4 % 4962), SUM(c4 % 4963), SUM(c4 % 4964),
SUM(c4 % 4965), SUM(c4 % 4966), SUM(c4 % 4967), SUM(c4 % 4968), SUM(c4 % 4969),
SUM(c4 % 4970), SUM(c4 % 4971), SUM(c4 % 4972), SUM(c4 % 4973), SUM(c4 % 4974),
SUM(c4 % 4975), SUM(c4 % 4976), SUM(c4 % 4977), SUM(c4 % 4978), SUM(c4 % 4979),
SUM(c4 % 4980), SUM(c4 % 4981), SUM(c4 % 4982), SUM(c4 % 4983), SUM(c4 % 4984),
SUM(c4 % 4985), SUM(c4 % 4986), SUM(c4 % 4987), SUM(c4 % 4988), SUM(c4 % 4989),
SUM(c4 % 4990), SUM(c4 % 4991), SUM(c4 % 4992), SUM(c4 % 4993), SUM(c4 % 4994),
SUM(c4 % 4995), SUM(c4 % 4996), SUM(c4 % 4997), SUM(c4 % 4998), SUM(c4 % 4999),
SUM(c4 % 5000), SUM(c4 % 5001), SUM(c4 % 5002), SUM(c4 % 5003), SUM(c4 % 5004),
SUM(c4 % 5005), SUM(c4 % 5006), SUM(c4 % 5007), SUM(c4 % 5008), SUM(c4 % 5009),
SUM(c4 % 5010), SUM(c4 % 5011), SUM(c4 % 5012), SUM(c4 % 5013), SUM(c4 % 5014),
SUM(c4 % 5015), SUM(c4 % 5016), SUM(c4 % 5017), SUM(c4 % 5018), SUM(c4 % 5019),
SUM(c4 % 5020), SUM(c4 % 5021), SUM(c4 % 5022), SUM(c4 % 5023), SUM(c4 % 5024),
SUM(c4 % 5025), SUM(c4 % 5026), SUM(c4 % 5027), SUM(c4 % 5028), SUM(c4 % 5029),
SUM(c4 % 5030), SUM(c4 % 5031), SUM(c4 % 5032), SUM(c4 % 5033), SUM(c4 % 5034),
SUM(c4 % 5035), SUM(c4 % 5036), SUM(c4 % 5037), SUM(c4 % 5038), SUM(c4 % 5039),
SUM(c4 % 5040), SUM(c4 % 5041), SUM(c4 % 5042), SUM(c4 % 5043), SUM(c4 % 5044),
SUM(c4 % 5045), SUM(c4 % 5046), SUM(c4 % 5047), SUM(c4 % 5048), SUM(c4 % 5049),
SUM(c4 % 5050), SUM(c4 % 5051), SUM(c4 % 5052), SUM(c4 % 5053), SUM(c4 % 5054),
SUM(c4 % 5055), SUM(c4 % 5056), SUM(c4 % 5057), SUM(c4 % 5058), SUM(c4 % 5059),
SUM(c4 % 5060), SUM(c4 % 5061), SUM(c4 % 5062), SUM(c4 % 5063), SUM(c4 % 5064),
SUM(c4 % 5065), SUM(c4 % 5066), SUM(c4 % 5067), SUM(c4 % 5068), SUM(c4 % 5069),
SUM(c4 % 5070), SUM(c4 % 5071), SUM(c4 % 5072), SUM(c4 % 5073), SUM(c4 % 5074),
SUM(c4 % 5075), SUM(c4 % 5076), SUM(c4 % 5077), SUM(c4 % 5078), SUM(c4 % 5079),
SUM(c4 % 5080), SUM(c4 % 5081), SUM(c4 % 5082), SUM(c4 % 5083), SUM(c4 % 5084),
SUM(c4 % 5085), SUM(c4 % 5086), SUM(c4 % 5087), SUM(c4 % 5088), SUM(c4 % 5089),
SUM(c4 % 5090), SUM(c4 % 5091), SUM(c4 % 5092), SUM(c4 % 5093), SUM(c4 % 5094),
SUM(c4 % 5095), SUM(c4 % 5096), SUM(c4 % 5097), SUM(c4 % 5098), SUM(c4 % 5099),
SUM(c4 % 5100), SUM(c4 % 5101), SUM(c4 % 5102), SUM(c4 % 5103), SUM(c4 % 5104),
SUM(c4 % 5105), SUM(c4 % 5106), SUM(c4 % 5107), SUM(c4 % 5108), SUM(c4 % 5109),
SUM(c4 % 5110), SUM(c4 % 5111), SUM(c4 % 5112), SUM(c4 % 5113), SUM(c4 % 5114),
SUM(c4 % 5115), SUM(c4 % 5116), SUM(c4 % 5117), SUM(c4 % 5118), SUM(c4 % 5119),
SUM(c4 % 5120), SUM(c4 % 5121), SUM(c4 % 5122), SUM(c4 % 5123), SUM(c4 % 5124),
SUM(c4 % 5125), SUM(c4 % 5126), SUM(c4 % 5127), SUM(c4 % 5128), SUM(c4 % 5129),
SUM(c4 % 5130), SUM(c4 % 5131), SUM(c4 % 5132), SUM(c4 % 5133), SUM(c4 % 5134),
SUM(c4 % 5135), SUM(c4 % 5136), SUM(c4 % 5137), SUM(c4 % 5138), SUM(c4 % 5139),
SUM(c4 % 5140), SUM(c4 % 5141), SUM(c4 % 5142), SUM(c4 % 5143), SUM(c4 % 5144),
SUM(c4 % 5145), SUM(c4 % 5146), SUM(c4 % 5147), SUM(c4 % 5148), SUM(c4 % 5149),
SUM(c4 % 5150), SUM(c4 % 5151), SUM(c4 % 5152), SUM(c4 % 5153), SUM(c4 % 5154),
SUM(c4 % 5155), SUM(c4 % 5156), SUM(c4 % 5157), SUM(c4 % 5158), SUM(c4 % 5159),
SUM(c4 % 5160), SUM(c4 % 5161), SUM(c4 % 5162), SUM(c4 % 5163), SUM(c4 % 5164),
SUM(c4 % 5165), SUM(c4 % 5166), SUM(c4 % 5167), SUM(c4 % 5168), SUM(c4 % 5169),
SUM(c4 % 5170), SUM(c4 % 5171), SUM(c4 % 5172), SUM(c4 % 5173), SUM(c4 % 5174),
SUM(c4 % 5175), SUM(c4 % 5176), SUM(c4 % 5177), SUM(c4 % 5178), SUM(c4 % 5179),
SUM(c4 % 5180), SUM(c4 % 5181), SUM(c4 % 5182), SUM(c4 % 5183), SUM(c4 % 5184),
SUM(c4 % 5185), SUM(c4 % 5186), SUM(c4 % 5187), SUM(c4 % 5188), SUM(c4 % 5189),
SUM(c4 % 5190), SUM(c4 % 5191), SUM(c4 % 5192), SUM(c4 % 5193), SUM(c4 % 5194),
SUM(c4 % 5195), SUM(c4 % 5196), SUM(c4 % 5197), SUM(c4 % 5198), SUM(c4 % 5199),
SUM(c4 % 5200), SUM(c4 % 5201), SUM(c4 % 5202), SUM(c4 % 5203), SUM(c4 % 5204),
SUM(c4 % 5205), SUM(c4 % 5206), SUM(c4 % 5207), SUM(c4 % 5208), SUM(c4 % 5209),
SUM(c4 % 5210), SUM(c4 % 5211), SUM(c4 % 5212), SUM(c4 % 5213), SUM(c4 % 5214),
SUM(c4 % 5215), SUM(c4 % 5216), SUM(c4 % 5217), SUM(c4 % 5218), SUM(c4 % 5219),
SUM(c4 % 5220), SUM(c4 % 5221), SUM(c4 % 5222), SUM(c4 % 5223), SUM(c4 % 5224),
SUM(c4 % 5225), SUM(c4 % 5226), SUM(c4 % 5227), SUM(c4 % 5228), SUM(c4 % 5229),
SUM(c4 % 5230), SUM(c4 % 5231), SUM(c4 % 5232), SUM(c4 % 5233), SUM(c4 % 5234),
SUM(c4 % 5235), SUM(c4 % 5236), SUM(c4 % 5237), SUM(c4 % 5238), SUM(c4 % 5239),
SUM(c4 % 5240), SUM(c4 % 5241), SUM(c4 % 5242), SUM(c4 % 5243), SUM(c4 % 5244),
SUM(c4 % 5245), SUM(c4 % 5246), SUM(c4 % 5247), SUM(c4 % 5248), SUM(c4 % 5249),
SUM(c4 % 5250), SUM(c4 % 5251), SUM(c4 % 5252), SUM(c4 % 5253), SUM(c4 % 5254),
SUM(c4 % 5255), SUM(c4 % 5256), SUM(c4 % 5257), SUM(c4 % 5258), SUM(c4 % 5259),
SUM(c4 % 5260), SUM(c4 % 5261), SUM(c4 % 5262), SUM(c4 % 5263), SUM(c4 % 5264),
SUM(c4 % 5265), SUM(c4 % 5266), SUM(c4 % 5267), SUM(c4 % 5268), SUM(c4 % 5269),
SUM(c4 % 5270), SUM(c4 % 5271), SUM(c4 % 5272), SUM(c4 % 5273), SUM(c4 % 5274),
SUM(c4 % 5275), SUM(c4 % 5276), SUM(c4 % 5277), SUM(c4 % 5278), SUM(c4 % 5279),
SUM(c4 % 5280), SUM(c4 % 5281), SUM(c4 % 5282), SUM(c4 % 5283), SUM(c4 % 5284),
SUM(c4 % 5285), SUM(c4 % 5286), SUM(c4 % 5287), SUM(c4 % 5288), SUM(c4 % 5289),
SUM(c4 % 5290), SUM(c4 % 5291), SUM(c4 % 5292), SUM(c4 % 5293), SUM(c4 % 5294),
SUM(c4 % 5295), SUM(c4 % 5296), SUM(c4 % 5297), SUM(c4 % 5298), SUM(c4 % 5299),
SUM(c4 % 5300), SUM(c4 % 5301), SUM(c4 % 5302), SUM(c4 % 5303), SUM(c4 % 5304),
SUM(c4 % 5305), SUM(c4 % 5306), SUM(c4 % 5307), SUM(c4 % 5308), SUM(c4 % 5309),
SUM(c4 % 5310), SUM(c4 % 5311), SUM(c4 % 5312), SUM(c4 % 5313), SUM(c4 % 5314),
SUM(c4 % 5315), SUM(c4 % 5316), SUM(c4 % 5317), SUM(c4 % 5318), SUM(c4 % 5319),
SUM(c4 % 5320), SUM(c4 % 5321), SUM(c4 % 5322), SUM(c4 % 5323), SUM(c4 % 5324),
SUM(c4 % 5325), SUM(c4 % 5326), SUM(c4 % 5327), SUM(c4 % 5328), SUM(c4 % 5329),
SUM(c4 % 5330), SUM(c4 % 5331), SUM(c4 % 5332), SUM(c4 % 5333), SUM(c4 % 5334),
SUM(c4 % 5335), SUM(c4 % 5336), SUM(c4 % 5337), SUM(c4 % 5338), SUM(c4 % 5339),
SUM(c4 % 5340), SUM(c4 % 5341), SUM(c4 % 5342), SUM(c4 % 5343), SUM(c4 % 5344),
SUM(c4 % 5345), SUM(c4 % 5346), SUM(c4 % 5347), SUM(c4 % 5348), SUM(c4 % 5349),
SUM(c4 % 5350), SUM(c4 % 5351), SUM(c4 % 5352), SUM(c4 % 5353), SUM(c4 % 5354),
SUM(c4 % 5355), SUM(c4 % 5356), SUM(c4 % 5357), SUM(c4 % 5358), SUM(c4 % 5359),
SUM(c4 % 5360), SUM(c4 % 5361), SUM(c4 % 5362), SUM(c4 % 5363), SUM(c4 % 5364),
SUM(c4 % 5365), SUM(c4 % 5366), SUM(c4 % 5367), SUM(c4 % 5368), SUM(c4 % 5369),
SUM(c4 % 5370), SUM(c4 % 5371), SUM(c4 % 5372), SUM(c4 % 5373), SUM(c4 % 5374),
SUM(c4 % 5375), SUM(c4 % 5376), SUM(c4 % 5377), SUM(c4 % 5378), SUM(c4 % 5379),
SUM(c4 % 5380), SUM(c4 % 5381), SUM(c4 % 5382), SUM(c4 % 5383), SUM(c4 % 5384),
SUM(c4 % 5385), SUM(c4 % 5386), SUM(c4 % 5387), SUM(c4 % 5388), SUM(c4 % 5389),
SUM(c4 % 5390), SUM(c4 % 5391), SUM(c4 % 5392), SUM(c4 % 5393), SUM(c4 % 5394),
SUM(c4 % 5395), SUM(c4 % 5396), SUM(c4 % 5397), SUM(c4 % 5398), SUM(c4 % 5399),
SUM(c4 % 5400), SUM(c4 % 5401), SUM(c4 % 5402), SUM(c4 % 5403), SUM(c4 % 5404),
SUM(c4 % 5405), SUM(c4 % 5406), SUM(c4 % 5407), SUM(c4 % 5408), SUM(c4 % 5409),
SUM(c4 % 5410), SUM(c4 % 5411), SUM(c4 % 5412), SUM(c4 % 5413), SUM(c4 % 5414),
SUM(c4 % 5415), SUM(c4 % 5416), SUM(c4 % 5417), SUM(c4 % 5418), SUM(c4 % 5419),
SUM(c4 % 5420), SUM(c4 % 5421), SUM(c4 % 5422), SUM(c4 % 5423), SUM(c4 % 5424),
SUM(c4 % 5425), SUM(c4 % 5426), SUM(c4 % 5427), SUM(c4 % 5428), SUM(c4 % 5429),
SUM(c4 % 5430), SUM(c4 % 5431), SUM(c4 % 5432), SUM(c4 % 5433), SUM(c4 % 5434),
SUM(c4 % 5435), SUM(c4 % 5436), SUM(c4 % 5437), SUM(c4 % 5438), SUM(c4 % 5439),
SUM(c4 % 5440), SUM(c4 % 5441), SUM(c4 % 5442), SUM(c4 % 5443), SUM(c4 % 5444),
SUM(c4 % 5445), SUM(c4 % 5446), SUM(c4 % 5447), SUM(c4 % 5448), SUM(c4 % 5449),
SUM(c4 % 5450), SUM(c4 % 5451), SUM(c4 % 5452), SUM(c4 % 5453), SUM(c4 % 5454),
SUM(c4 % 5455), SUM(c4 % 5456), SUM(c4 % 5457), SUM(c4 % 5458), SUM(c4 % 5459),
SUM(c4 % 5460), SUM(c4 % 5461), SUM(c4 % 5462), SUM(c4 % 5463), SUM(c4 % 5464),
SUM(c4 % 5465), SUM(c4 % 5466), SUM(c4 % 5467), SUM(c4 % 5468), SUM(c4 % 5469),
SUM(c4 % 5470), SUM(c4 % 5471), SUM(c4 % 5472), SUM(c4 % 5473), SUM(c4 % 5474),
SUM(c4 % 5475), SUM(c4 % 5476), SUM(c4 % 5477), SUM(c4 % 5478), SUM(c4 % 5479),
SUM(c4 % 5480), SUM(c4 % 5481), SUM(c4 % 5482), SUM(c4 % 5483), SUM(c4 % 5484),
SUM(c4 % 5485), SUM(c4 % 5486), SUM(c4 % 5487), SUM(c4 % 5488), SUM(c4 % 5489),
SUM(c4 % 5490), SUM(c4 % 5491), SUM(c4 % 5492), SUM(c4 % 5493), SUM(c4 % 5494),
SUM(c4 % 5495), SUM(c4 % 5496), SUM(c4 % 5497), SUM(c4 % 5498), SUM(c4 % 5499),
SUM(c4 % 5500), SUM(c4 % 5501), SUM(c4 % 5502), SUM(c4 % 5503), SUM(c4 % 5504),
SUM(c4 % 5505), SUM(c4 % 5506), SUM(c4 % 5507), SUM(c4 % 5508), SUM(c4 % 5509),
SUM(c4 % 5510), SUM(c4 % 5511), SUM(c4 % 5512), SUM(c4 % 5513), SUM(c4 % 5514),
SUM(c4 % 5515), SUM(c4 % 5516), SUM(c4 % 5517), SUM(c4 % 5518), SUM(c4 % 5519),
SUM(c4 % 5520), SUM(c4 % 5521), SUM(c4 % 5522), SUM(c4 % 5523), SUM(c4 % 5524),
SUM(c4 % 5525), SUM(c4 % 5526), SUM(c4 % 5527), SUM(c4 % 5528), SUM(c4 % 5529),
SUM(c4 % 5530), SUM(c4 % 5531), SUM(c4 % 5532), SUM(c4 % 5533), SUM(c4 % 5534),
SUM(c4 % 5535), SUM(c4 % 5536), SUM(c4 % 5537), SUM(c4 % 5538), SUM(c4 % 5539),
SUM(c4 % 5540), SUM(c4 % 5541), SUM(c4 % 5542), SUM(c4 % 5543), SUM(c4 % 5544),
SUM(c4 % 5545), SUM(c4 % 5546), SUM(c4 % 5547), SUM(c4 % 5548), SUM(c4 % 5549),
SUM(c4 % 5550), SUM(c4 % 5551), SUM(c4 % 5552), SUM(c4 % 5553), SUM(c4 % 5554),
SUM(c4 % 5555), SUM(c4 % 5556), SUM(c4 % 5557), SUM(c4 % 5558), SUM(c4 % 5559),
SUM(c4 % 5560), SUM(c4 % 5561), SUM(c4 % 5562), SUM(c4 % 5563), SUM(c4 % 5564),
SUM(c4 % 5565), SUM(c4 % 5566), SUM(c4 % 5567), SUM(c4 % 5568), SUM(c4 % 5569),
SUM(c4 % 5570), SUM(c4 % 5571), SUM(c4 % 5572), SUM(c4 % 5573), SUM(c4 % 5574),
SUM(c4 % 5575), SUM(c4 % 5576), SUM(c4 % 5577), SUM(c4 % 5578), SUM(c4 % 5579),
SUM(c4 % 5580), SUM(c4 % 5581), SUM(c4 % 5582), SUM(c4 % 5583), SUM(c4 % 5584),
SUM(c4 % 5585), SUM(c4 % 5586), SUM(c4 % 5587), SUM(c4 % 5588), SUM(c4 % 5589),
SUM(c4 % 5590), SUM(c4 % 5591), SUM(c4 % 5592), SUM(c4 % 5593), SUM(c4 % 5594),
SUM(c4 % 5595), SUM(c4 % 5596), SUM(c4 % 5597), SUM(c4 % 5598), SUM(c4 % 5599),
SUM(c4 % 5600), SUM(c4 % 5601), SUM(c4 % 5602), SUM(c4 % 5603), SUM(c4 % 5604),
SUM(c4 % 5605), SUM(c4 % 5606), SUM(c4 % 5607), SUM(c4 % 5608), SUM(c4 % 5609),
SUM(c4 % 5610), SUM(c4 % 5611), SUM(c4 % 5612), SUM(c4 % 5613), SUM(c4 % 5614),
SUM(c4 % 5615), SUM(c4 % 5616), SUM(c4 % 5617), SUM(c4 % 5618), SUM(c4 % 5619),
SUM(c4 % 5620), SUM(c4 % 5621), SUM(c4 % 5622), SUM(c4 % 5623), SUM(c4 % 5624),
SUM(c4 % 5625), SUM(c4 % 5626), SUM(c4 % 5627), SUM(c4 % 5628), SUM(c4 % 5629),
SUM(c4 % 5630), SUM(c4 % 5631), SUM(c4 % 5632), SUM(c4 % 5633), SUM(c4 % 5634),
SUM(c4 % 5635), SUM(c4 % 5636), SUM(c4 % 5637), SUM(c4 % 5638), SUM(c4 % 5639),
SUM(c4 % 5640), SUM(c4 % 5641), SUM(c4 % 5642), SUM(c4 % 5643), SUM(c4 % 5644),
SUM(c4 % 5645), SUM(c4 % 5646), SUM(c4 % 5647), SUM(c4 % 5648), SUM(c4 % 5649),
SUM(c4 % 5650), SUM(c4 % 5651), SUM(c4 % 5652), SUM(c4 % 5653), SUM(c4 % 5654),
SUM(c4 % 5655), SUM(c4 % 5656), SUM(c4 % 5657), SUM(c4 % 5658), SUM(c4 % 5659),
SUM(c4 % 5660), SUM(c4 % 5661), SUM(c4 % 5662), SUM(c4 % 5663), SUM(c4 % 5664),
SUM(c4 % 5665), SUM(c4 % 5666), SUM(c4 % 5667), SUM(c4 % 5668), SUM(c4 % 5669),
SUM(c4 % 5670), SUM(c4 % 5671)], 1)
from mtup1 where c0 = 'foo' group by c0, c1 limit 10;
c0 | c1 | array_length
-----+-------------+--------------
foo | 2015-09-1.1 | 5670
(1 row)
reset gp_enable_multiphase_agg;
-- MPP-29042 Multistage aggregation plans should have consistent targetlists in
-- case of same column aliases and grouping on them.
DROP TABLE IF EXISTS t1;
NOTICE: table "t1" does not exist, skipping
CREATE TABLE t1 (a varchar, b character varying) DISTRIBUTED RANDOMLY;
INSERT INTO t1 VALUES ('aaaaaaa', 'cccccccccc');
INSERT INTO t1 VALUES ('aaaaaaa', 'ddddd');
INSERT INTO t1 VALUES ('bbbbbbb', 'eeee');
INSERT INTO t1 VALUES ('bbbbbbb', 'eeef');
INSERT INTO t1 VALUES ('bbbbb', 'dfafa');
SELECT substr(a, 1) as a FROM (SELECT ('-'||a)::varchar as a FROM (SELECT a FROM t1) t2) t3 GROUP BY a ORDER BY a;
a
----------
-aaaaaaa
-bbbbb
-bbbbbbb
(3 rows)
SELECT array_agg(f ORDER BY f) FROM (SELECT b::text as f FROM t1 GROUP BY b ORDER BY b) q;
array_agg
------------------------------------
{cccccccccc,ddddd,dfafa,eeee,eeef}
(1 row)
-- Check that ORDER BY NULLS FIRST/LAST in an aggregate is respected (these are
-- variants of similar query in PostgreSQL's aggregates test)
create temporary table aggordertest (a int4, b int4) distributed by (a);
insert into aggordertest values (1,1), (2,2), (1,3), (3,4), (null,5), (2,null);
select array_agg(a order by a nulls first) from aggordertest;
array_agg
------------------
{NULL,1,1,2,2,3}
(1 row)
select array_agg(a order by a nulls last) from aggordertest;
array_agg
------------------
{1,1,2,2,3,NULL}
(1 row)
select array_agg(a order by a desc nulls first) from aggordertest;
array_agg
------------------
{NULL,3,2,2,1,1}
(1 row)
select array_agg(a order by a desc nulls last) from aggordertest;
array_agg
------------------
{3,2,2,1,1,NULL}
(1 row)
select array_agg(a order by b nulls first) from aggordertest;
array_agg
------------------
{2,1,2,1,3,NULL}
(1 row)
select array_agg(a order by b nulls last) from aggordertest;
array_agg
------------------
{1,2,1,3,NULL,2}
(1 row)
select array_agg(a order by b desc nulls first) from aggordertest;
array_agg
------------------
{2,NULL,3,1,2,1}
(1 row)
select array_agg(a order by b desc nulls last) from aggordertest;
array_agg
------------------
{NULL,3,1,2,1,2}
(1 row)
-- begin MPP-14125: if combine function is missing, do not choose hash agg.
-- Like in the 'attribute_table' and 'concat' test earlier in this file, a
-- Hash Agg is currently OK, since we lost the Hybrid Hash Agg spilling code
-- in the merge.
create temp table mpp14125 as select repeat('a', a) a, a % 10 b from generate_series(1, 100)a;
NOTICE: Table doesn't have 'DISTRIBUTED BY' clause -- Using column(s) named 'a' as the Apache Cloudberry data distribution key for this table.
HINT: The 'DISTRIBUTED BY' clause determines the distribution of data. Make sure column(s) chosen are the optimal data distribution key to minimize skew.
explain select string_agg(a, '') from mpp14125 group by b;
QUERY PLAN
------------------------------------------------------------------------------------------------
Gather Motion 3:1 (slice1; segments: 3) (cost=6.50..6.83 rows=10 width=36)
-> HashAggregate (cost=6.50..6.62 rows=4 width=36)
Group Key: b
-> Redistribute Motion 3:3 (slice2; segments: 3) (cost=0.00..6.00 rows=34 width=55)
Hash Key: b
-> Seq Scan on mpp14125 (cost=0.00..4.00 rows=34 width=55)
Optimizer: Postgres query optimizer
(7 rows)
-- end MPP-14125
-- Test that integer AVG() aggregate is accurate with large values. We used to
-- use float8 to hold the running sums, which did not have enough precision
-- for this.
select avg('1000000000000000000'::int8) from generate_series(1, 100000);
avg
---------------------
1000000000000000000
(1 row)
-- Test cases where the planner would like to distribute on a column, to implement
-- grouping or distinct, but can't because the datatype isn't GPDB-hashable.
-- These are all variants of the same issue; all of these used to miss the
-- check on whether the column is GPDB_hashble, producing an assertion failure.
create table int2vectortab (distkey int, t int2vector,t2 int2vector) distributed by (distkey);
insert into int2vectortab values
(1, '1', '1'),
(2, '1 2', '1 2'),
(3, '1 2 3', '1 2 3'),
(22,'22', '1 2 3 4'),
(22,'1 2', '1 2 3 4 5');
select distinct t from int2vectortab group by distkey, t;
t
-------
1
1 2
1 2 3
22
(4 rows)
select t from int2vectortab union select t from int2vectortab;
t
-------
1
1 2
1 2 3
22
(4 rows)
select count(*) over (partition by t) from int2vectortab;
count
-------
1
1
1
2
2
(5 rows)
select count(distinct t) from int2vectortab;
count
-------
4
(1 row)
select count(distinct t), count(distinct t2) from int2vectortab;
count | count
-------+-------
4 | 5
(1 row)
--
-- Testing aggregate above FULL JOIN
--
-- SETUP
CREATE TABLE pagg_tab1(x int, y int) DISTRIBUTED BY (x);
CREATE TABLE pagg_tab2(x int, y int) DISTRIBUTED BY (x);
INSERT INTO pagg_tab1 SELECT i % 30, i % 20 FROM generate_series(0, 299, 2) i;
INSERT INTO pagg_tab2 SELECT i % 20, i % 30 FROM generate_series(0, 299, 3) i;
ANALYZE pagg_tab1;
ANALYZE pagg_tab2;
-- TEST
-- should have Redistribute Motion above the FULL JOIN
EXPLAIN (COSTS OFF)
SELECT a.x, sum(b.x) FROM pagg_tab1 a FULL OUTER JOIN pagg_tab2 b ON a.x = b.y GROUP BY a.x ORDER BY 1 NULLS LAST;
QUERY PLAN
------------------------------------------------------------------------------------------
Gather Motion 3:1 (slice1; segments: 3)
Merge Key: a.x
-> Sort
Sort Key: a.x
-> Finalize HashAggregate
Group Key: a.x
-> Redistribute Motion 3:3 (slice2; segments: 3)
Hash Key: a.x
-> Partial HashAggregate
Group Key: a.x
-> Hash Full Join
Hash Cond: (a.x = b.y)
-> Seq Scan on pagg_tab1 a
-> Hash
-> Redistribute Motion 3:3 (slice3; segments: 3)
Hash Key: b.y
-> Seq Scan on pagg_tab2 b
Optimizer: Postgres query optimizer
(16 rows)
SELECT a.x, sum(b.x) FROM pagg_tab1 a FULL OUTER JOIN pagg_tab2 b ON a.x = b.y GROUP BY a.x ORDER BY 1 NULLS LAST;
x | sum
----+------
0 | 500
2 |
4 |
6 | 1100
8 |
10 |
12 | 700
14 |
16 |
18 | 1300
20 |
22 |
24 | 900
26 |
28 |
| 500
(16 rows)
EXPLAIN (COSTS OFF)
SELECT a.x, b.y, count(*) FROM pagg_tab1 a FULL JOIN pagg_tab2 b ON a.x = b.y GROUP BY a.x, b.y;
QUERY PLAN
------------------------------------------------------------------------------
Gather Motion 3:1 (slice1; segments: 3)
-> HashAggregate
Group Key: a.x, b.y
-> Redistribute Motion 3:3 (slice2; segments: 3)
Hash Key: a.x, b.y
-> Hash Full Join
Hash Cond: (a.x = b.y)
-> Seq Scan on pagg_tab1 a
-> Hash
-> Redistribute Motion 3:3 (slice3; segments: 3)
Hash Key: b.y
-> Seq Scan on pagg_tab2 b
Optimizer: Postgres query optimizer
(13 rows)
SELECT a.x, b.y, count(*) FROM pagg_tab1 a FULL JOIN pagg_tab2 b ON a.x = b.y GROUP BY a.x, b.y;
x | y | count
----+----+-------
26 | | 10
28 | | 10
4 | | 10
| 15 | 10
6 | 6 | 100
8 | | 10
2 | | 10
22 | | 10
10 | | 10
| 9 | 10
| 21 | 10
0 | 0 | 100
14 | | 10
12 | 12 | 100
| 3 | 10
16 | | 10
| 27 | 10
18 | 18 | 100
20 | | 10
24 | 24 | 100
(20 rows)
--
-- Test GROUP BY with a constant
--
create temp table group_by_const (col1 int, col2 int);
NOTICE: Table doesn't have 'DISTRIBUTED BY' clause -- Using column named 'col1' as the Apache Cloudberry data distribution key for this table.
HINT: The 'DISTRIBUTED BY' clause determines the distribution of data. Make sure column(s) chosen are the optimal data distribution key to minimize skew.
insert into group_by_const select i from generate_series(1, 1000) i;
analyze group_by_const;
explain (costs off)
select 1, sum(col1) from group_by_const group by 1;
QUERY PLAN
------------------------------------------------
Finalize GroupAggregate
Group Key: 1
-> Gather Motion 3:1 (slice1; segments: 3)
-> Partial GroupAggregate
Group Key: 1
-> Seq Scan on group_by_const
Optimizer: Postgres query optimizer
(7 rows)
select 1, sum(col1) from group_by_const group by 1;
?column? | sum
----------+--------
1 | 500500
(1 row)
-- Same, but using an aggregate that doesn't have a combine function, so
-- that you get a one-phase aggregate plan.
explain (costs off)
select 1, median(col1) from group_by_const group by 1;
QUERY PLAN
------------------------------------------------------------
Gather Motion 3:1 (slice1; segments: 3)
-> GroupAggregate
Group Key: 1
-> Redistribute Motion 3:3 (slice2; segments: 3)
Hash Key: 1
-> Seq Scan on group_by_const
Optimizer: Postgres query optimizer
(7 rows)
select 1, median(col1) from group_by_const group by 1;
?column? | median
----------+--------
1 | 500.5
(1 row)
-- Test GROUP BY with a RelabelType
create table tx (c1 text);
NOTICE: Table doesn't have 'DISTRIBUTED BY' clause -- Using column named 'c1' as the Greenplum Database data distribution key for this table.
HINT: The 'DISTRIBUTED BY' clause determines the distribution of data. Make sure column(s) chosen are the optimal data distribution key to minimize skew.
insert into tx values('hello');
EXPLAIN (COSTS OFF, VERBOSE ON)
SELECT MIN(tx.c1) FROM tx GROUP BY (tx.c1)::VARCHAR;
QUERY PLAN
----------------------------------------------------
Gather Motion 3:1 (slice1; segments: 3)
Output: (min(c1)), ((c1)::character varying)
-> HashAggregate
Output: min(c1), ((c1)::character varying)
Group Key: (tx.c1)::character varying
-> Seq Scan on bfv_aggregate.tx
Output: (c1)::character varying, c1
Optimizer: Postgres query optimizer
Settings: optimizer = 'off'
(9 rows)
SELECT MIN(tx.c1) FROM tx GROUP BY (tx.c1)::VARCHAR;
min
-------
hello
(1 row)
drop table tx;
-- ORCA should pick singlestage-agg plan when multistage-agg guc is true
-- and distribution type is universal/replicated
set optimizer_force_multistage_agg to on;
create table t1_replicated(a int, b int, c float, d float) distributed replicated;
create table t2_replicated(a int, b int) distributed replicated;
explain select distinct b from t1_replicated;
QUERY PLAN
-----------------------------------------------------------------------------------
Gather Motion 1:1 (slice1; segments: 1) (cost=867.50..867.50 rows=1000 width=4)
-> HashAggregate (cost=857.50..867.50 rows=1000 width=4)
Group Key: b
-> Seq Scan on t1_replicated (cost=0.00..706.00 rows=60600 width=4)
Optimizer: Postgres query optimizer
(5 rows)
explain select sum(a), avg(b) from t1_replicated;
QUERY PLAN
------------------------------------------------------------------------------------------
Aggregate (cost=1009.00..1009.01 rows=1 width=40)
-> Gather Motion 1:1 (slice1; segments: 1) (cost=706.00..706.00 rows=60600 width=8)
-> Seq Scan on t1_replicated (cost=0.00..706.00 rows=60600 width=8)
Optimizer: Postgres query optimizer
(4 rows)
explain select count(distinct b) from t1_replicated group by a;
QUERY PLAN
--------------------------------------------------------------------------------------
Gather Motion 1:1 (slice1; segments: 1) (cost=5984.27..5984.27 rows=1000 width=12)
-> GroupAggregate (cost=5519.77..5984.27 rows=1000 width=12)
Group Key: a
-> Sort (cost=5519.77..5671.27 rows=60600 width=8)
Sort Key: a
-> Seq Scan on t1_replicated (cost=0.00..706.00 rows=60600 width=8)
Optimizer: Postgres query optimizer
(7 rows)
explain select a, sum(mc) from (select a, b, max(c) mc from t1_replicated group by a,b) t group by a;
QUERY PLAN
--------------------------------------------------------------------------------------
Gather Motion 1:1 (slice1; segments: 1) (cost=1322.00..1322.00 rows=1000 width=12)
-> HashAggregate (cost=1312.00..1322.00 rows=1000 width=12)
Group Key: t1_replicated.a
-> HashAggregate (cost=1160.50..1221.10 rows=6060 width=16)
Group Key: t1_replicated.a, t1_replicated.b
-> Seq Scan on t1_replicated (cost=0.00..706.00 rows=60600 width=16)
Optimizer: Postgres query optimizer
(7 rows)
explain SELECT t1.a, sum(c) from t1_replicated as t1 join t2_replicated as t2 on t1.a = t2.a group by t1.a;
QUERY PLAN
-----------------------------------------------------------------------------------------------
Gather Motion 1:1 (slice1; segments: 1) (cost=733122.15..733122.15 rows=1000 width=12)
-> HashAggregate (cost=733112.15..733122.15 rows=1000 width=12)
Group Key: t1.a
-> Hash Join (cost=1463.50..707023.85 rows=5217660 width=12)
Hash Cond: (t2.a = t1.a)
-> Seq Scan on t2_replicated t2 (cost=0.00..961.00 rows=86100 width=4)
-> Hash (cost=706.00..706.00 rows=60600 width=12)
-> Seq Scan on t1_replicated t1 (cost=0.00..706.00 rows=60600 width=12)
Optimizer: Postgres query optimizer
(9 rows)
explain select count(a) from t1_replicated where c < (select sum(b) from t2_replicated);
QUERY PLAN
--------------------------------------------------------------------------------------------------
Aggregate (cost=1059.50..1059.51 rows=1 width=8)
InitPlan 1 (returns $0) (slice2)
-> Aggregate (cost=1176.25..1176.26 rows=1 width=8)
-> Gather Motion 1:1 (slice3; segments: 1) (cost=961.00..961.00 rows=86100 width=4)
-> Seq Scan on t2_replicated (cost=0.00..961.00 rows=86100 width=4)
-> Gather Motion 1:1 (slice1; segments: 1) (cost=1009.00..1009.00 rows=20200 width=4)
-> Seq Scan on t1_replicated (cost=0.00..1009.00 rows=20200 width=4)
Filter: (c < ($0)::double precision)
Optimizer: Postgres query optimizer
(9 rows)
explain SELECT DISTINCT g%10 FROM generate_series(0, 100) g;
QUERY PLAN
------------------------------------------------------------------------------
HashAggregate (cost=1.52..2.78 rows=101 width=4)
Group Key: (g % 10)
-> Function Scan on generate_series g (cost=0.00..1.26 rows=101 width=4)
Optimizer: Postgres query optimizer
(4 rows)
explain select count(*) from generate_series(0, 100) g;
QUERY PLAN
------------------------------------------------------------------------------
Aggregate (cost=1.26..1.27 rows=1 width=8)
-> Function Scan on generate_series g (cost=0.00..1.01 rows=101 width=0)
Optimizer: Postgres query optimizer
(3 rows)
explain select g%10 as c1, sum(g::numeric)as c2, count(*) as c3 from generate_series(1, 99) g group by g%10;
QUERY PLAN
-----------------------------------------------------------------------------
HashAggregate (cost=2.23..3.72 rows=99 width=44)
Group Key: (g % 10)
-> Function Scan on generate_series g (cost=0.00..1.24 rows=99 width=8)
Optimizer: Postgres query optimizer
(4 rows)
reset optimizer_force_multistage_agg;
-- Eliminate unuseful columns of targetlist in multistage-agg
create table ex1(a int, b int, c int);
NOTICE: Table doesn't have 'DISTRIBUTED BY' clause -- Using column named 'a' as the Apache Cloudberry data distribution key for this table.
HINT: The 'DISTRIBUTED BY' clause determines the distribution of data. Make sure column(s) chosen are the optimal data distribution key to minimize skew.
create table ex2(a int, b int, c int);
NOTICE: Table doesn't have 'DISTRIBUTED BY' clause -- Using column named 'a' as the Apache Cloudberry data distribution key for this table.
HINT: The 'DISTRIBUTED BY' clause determines the distribution of data. Make sure column(s) chosen are the optimal data distribution key to minimize skew.
insert into ex1 select i,i,i from generate_series(1, 10) i;
insert into ex2 select i,i,i from generate_series(1, 10) i;
explain (verbose on, costs off) select ex2.b/2, sum(ex1.a) from ex1, (select a, coalesce(b, 1) b from ex2) ex2 where ex1.a = ex2.a group by ex2.b/2;
QUERY PLAN
----------------------------------------------------------------------------
Gather Motion 3:1 (slice1; segments: 3)
Output: ((COALESCE(ex2.b, 1) / 2)), (sum(ex1.a))
-> Finalize HashAggregate
Output: ((COALESCE(ex2.b, 1) / 2)), sum(ex1.a)
Group Key: ((COALESCE(ex2.b, 1) / 2))
-> Redistribute Motion 3:3 (slice2; segments: 3)
Output: ((COALESCE(ex2.b, 1) / 2)), (PARTIAL sum(ex1.a))
Hash Key: ((COALESCE(ex2.b, 1) / 2))
-> Partial HashAggregate
Output: ((COALESCE(ex2.b, 1) / 2)), PARTIAL sum(ex1.a)
Group Key: (COALESCE(ex2.b, 1) / 2)
-> Hash Join
Output: (COALESCE(ex2.b, 1) / 2), ex1.a
Hash Cond: (ex1.a = ex2.a)
-> Seq Scan on bfv_aggregate.ex1
Output: ex1.a, ex1.b, ex1.c
-> Hash
Output: ex2.b, ex2.a
-> Seq Scan on bfv_aggregate.ex2
Output: ex2.b, ex2.a
Settings: optimizer = 'off'
Optimizer: Postgres query optimizer
(22 rows)
select ex2.b/2, sum(ex1.a) from ex1, (select a, coalesce(b, 1) b from ex2) ex2 where ex1.a = ex2.a group by ex2.b/2;
?column? | sum
----------+-----
4 | 17
2 | 9
3 | 13
1 | 5
0 | 1
5 | 10
(6 rows)
explain (verbose on, costs off) SELECT b/2, sum(b) * (b/2) FROM ex1 GROUP BY b/2;
QUERY PLAN
------------------------------------------------------------
Gather Motion 3:1 (slice1; segments: 3)
Output: ((b / 2)), ((sum(b) * ((b / 2))))
-> Finalize HashAggregate
Output: ((b / 2)), (sum(b) * ((b / 2)))
Group Key: ((ex1.b / 2))
-> Redistribute Motion 3:3 (slice2; segments: 3)
Output: ((b / 2)), (PARTIAL sum(b))
Hash Key: ((b / 2))
-> Partial HashAggregate
Output: ((b / 2)), PARTIAL sum(b)
Group Key: (ex1.b / 2)
-> Seq Scan on bfv_aggregate.ex1
Output: (b / 2), b
Settings: optimizer = 'off'
Optimizer: Postgres query optimizer
(15 rows)
SELECT b/2, sum(b) * (b/2) FROM ex1 GROUP BY b/2;
?column? | ?column?
----------+----------
5 | 50
4 | 68
2 | 18
3 | 39
1 | 5
0 | 0
(6 rows)
-- Test if Motion is placed between the "group by clauses"
drop table if exists t;
create table t(a int, b int, c int) distributed by (a);
insert into t select 1, i, i from generate_series(1, 10)i;
insert into t select 1, i, i from generate_series(1, 10)i;
insert into t select 1, i, i from generate_series(1, 10)i;
insert into t select 1, i, i from generate_series(1, 10)i;
analyze t;
explain (costs off) select count(distinct(b)), gp_segment_id from t group by gp_segment_id;
QUERY PLAN
------------------------------------------------------------------
Gather Motion 3:1 (slice1; segments: 3)
-> HashAggregate
Group Key: gp_segment_id
-> HashAggregate
Group Key: gp_segment_id, b
-> Redistribute Motion 3:3 (slice2; segments: 3)
Hash Key: gp_segment_id
-> Streaming HashAggregate
Group Key: gp_segment_id, b
-> Seq Scan on t
Optimizer: Postgres query optimizer
(11 rows)
select count(distinct(b)), gp_segment_id from t group by gp_segment_id;
count | gp_segment_id
-------+---------------
10 | 1
(1 row)
-- The cost of multistage agg is higher than hash agg
set optimizer_force_multistage_agg to on;
explain (costs off) select count(distinct(b)), gp_segment_id from t group by gp_segment_id;
QUERY PLAN
------------------------------------------------------------------
Gather Motion 3:1 (slice1; segments: 3)
-> HashAggregate
Group Key: gp_segment_id
-> HashAggregate
Group Key: gp_segment_id, b
-> Redistribute Motion 3:3 (slice2; segments: 3)
Hash Key: gp_segment_id
-> Streaming HashAggregate
Group Key: gp_segment_id, b
-> Seq Scan on t
Optimizer: Postgres query optimizer
(11 rows)
select count(distinct(b)), gp_segment_id from t group by gp_segment_id;
count | gp_segment_id
-------+---------------
10 | 1
(1 row)
reset optimizer_force_multistage_agg;
drop table t;
-- Test defferral keyword on primary/unique key
-- When the grouping columns include a key, the GbAgg operator can be transformed to a Select,
-- resulting in the dropping of grouping columns. However, it is important to note that if a primary
-- or unique key has the deferral keyword, ORCA should not optimize (drop grouping columns) in such cases.
drop table if exists t1, t2, t3, t4, t5, t6;
NOTICE: table "t2" does not exist, skipping
NOTICE: table "t3" does not exist, skipping
NOTICE: table "t4" does not exist, skipping
NOTICE: table "t5" does not exist, skipping
NOTICE: table "t6" does not exist, skipping
create table t1 (a int, b int, c int, primary key(a, b));
create table t2 (a int, b int, c int, primary key(a, b) deferrable);
create table t3 (a int, b int, c int, primary key(a, b) deferrable initially deferred);
create table t4 (a int, b int, c int, unique(a, b));
create table t5 (a int, b int, c int, unique(a, b) deferrable);
create table t6 (a int, b int, c int, unique(a, b) deferrable initially deferred);
explain (costs off) select * from t1 group by a, b, c;
QUERY PLAN
------------------------------------------
Gather Motion 3:1 (slice1; segments: 3)
-> HashAggregate
Group Key: a, b
-> Seq Scan on t1
Optimizer: Postgres query optimizer
(5 rows)
explain (costs off) select * from t2 group by a, b, c;
QUERY PLAN
------------------------------------------
Gather Motion 3:1 (slice1; segments: 3)
-> HashAggregate
Group Key: a, b, c
-> Seq Scan on t2
Optimizer: Postgres query optimizer
(5 rows)
explain (costs off) select * from t3 group by a, b, c;
QUERY PLAN
------------------------------------------
Gather Motion 3:1 (slice1; segments: 3)
-> HashAggregate
Group Key: a, b, c
-> Seq Scan on t3
Optimizer: Postgres query optimizer
(5 rows)
explain (costs off) select * from t4 group by a, b, c;
QUERY PLAN
------------------------------------------
Gather Motion 3:1 (slice1; segments: 3)
-> HashAggregate
Group Key: a, b, c
-> Seq Scan on t4
Optimizer: Postgres query optimizer
(5 rows)
explain (costs off) select * from t5 group by a, b, c;
QUERY PLAN
------------------------------------------
Gather Motion 3:1 (slice1; segments: 3)
-> HashAggregate
Group Key: a, b, c
-> Seq Scan on t5
Optimizer: Postgres query optimizer
(5 rows)
explain (costs off) select * from t6 group by a, b, c;
QUERY PLAN
------------------------------------------
Gather Motion 3:1 (slice1; segments: 3)
-> HashAggregate
Group Key: a, b, c
-> Seq Scan on t6
Optimizer: Postgres query optimizer
(5 rows)
explain (costs off) with cte1 as (select * from t3 group by a, b, c) select * from cte1;
QUERY PLAN
------------------------------------------
Gather Motion 3:1 (slice1; segments: 3)
-> HashAggregate
Group Key: t3.a, t3.b, t3.c
-> Seq Scan on t3
Optimizer: Postgres query optimizer
(5 rows)
begin;
insert into t3 values (1, 1, 1), (1, 1, 1), (1, 2, 1), (1, 3, 1), (1, 2, 1);
select * from t3 group by a, b, c;
a | b | c
---+---+---
1 | 2 | 1
1 | 3 | 1
1 | 1 | 1
(3 rows)
commit;
ERROR: duplicate key value violates unique constraint "t3_pkey" (seg1 127.0.0.1:7003 pid=86457)
DETAIL: Key (a, b)=(1, 1) already exists.
drop table t1, t2, t3, t4, t5, t6;
-- CLEANUP
set client_min_messages='warning';
drop schema bfv_aggregate cascade;