Skip to content
Snippets Groups Projects
Commit 0aa8dbe5 authored by David Bühler's avatar David Bühler
Browse files

[Eva] Ival: better print of integer sets when they represent intervals.

parent c611520d
No related branches found
No related tags found
No related merge requests found
......@@ -111,12 +111,56 @@ let compare s1 s2 =
let equal e1 e2 = compare e1 e2 = 0
(* Used to print a compact representation of large integer sets. *)
type set_or_itv =
| Set of Int.t array
| Itv of Int.t * Int.t
(* Converts a set into an ordered list of sets and intervals, fusing adjacent
integers into intervals. *)
let fuse_intervals s =
(* Add interval [b..e] to the list [acc]. The interval can be a singleton. *)
let add_itv acc (b, e) =
let nb = Int.to_int_exn (Int.sub e b) + 1 in
(* If the interval is too small, uses a Set instead of Itv. *)
if nb > 3
then Itv (b, e) :: acc
else
let a = Array.init nb (fun i -> Int.add b (Int.of_int i)) in
(* If the last element of [acc] is a Set, adds [a] at its end. *)
match acc with
| Set a' :: tl -> Set (Array.append a' a) :: tl
| _ -> Set a :: acc
in
(* [start..prev] is the current interval being built. *)
let f (acc, start, prev) curr =
if Int.equal prev (Int.pred curr)
then (acc, start, curr)
else (add_itv acc (start, prev), curr, curr)
in
let r = ref ([], s.(0), s.(0)) in
for i = 1 to Array.length s - 1 do
r := f !r s.(i)
done;
let list, start, curr = !r in
List.rev (add_itv list (start, curr))
let pretty_array =
Pretty_utils.pp_iter ~pre:"@[<hov 1>{" ~suf:"}@]" ~sep:";@ "
Array.iter Int.pretty
let pretty_set_or_itv fmt = function
| Set a -> pretty_array fmt a
| Itv (b, e) -> Format.fprintf fmt "[%a..%a]" Int.pretty b Int.pretty e
let pretty fmt s =
Pretty_utils.pp_iter
~pre:"@[<hov 1>{"
~suf:"}@]"
~sep:";@ "
Array.iter Int.pretty fmt s
if Array.length s < 10
then pretty_array fmt s
else
let union = Unicode.union_string () in
let sep = Scanf.format_from_string ("@ " ^ union ^ " ") "" in
Pretty_utils.pp_iter ~pre:"@[<hov 1>" ~suf:"@]" ~sep
List.iter pretty_set_or_itv fmt (fuse_intervals s)
include Datatype.Make_with_collections
(struct
......
......@@ -38,36 +38,9 @@
[eva] done for function main
[eva] ====== VALUES COMPUTED ======
[eva:final-states] Values at end of function input_data_post_func:
aorai_x1 ∈
{0; 1; 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12; 13; 14; 15; 16; 17; 18;
19; 20; 21; 22; 23; 24; 25; 26; 27; 28; 29; 30; 31; 32; 33; 34;
35; 36; 37; 38; 39; 40; 41; 42; 43; 44; 45; 46; 47; 48; 49; 50;
51; 52; 53; 54; 55; 56; 57; 58; 59; 60; 61; 62; 63; 64; 65; 66;
67; 68; 69; 70; 71; 72; 73; 74; 75; 76; 77; 78; 79; 80; 81; 82;
83; 84; 85; 86; 87; 88; 89; 90; 91; 92; 93; 94; 95; 96; 97; 98;
99; 100; 101; 102; 103; 104; 105; 106; 107; 108; 109; 110; 111;
112; 113; 114; 115; 116; 117; 118; 119; 120; 121; 122; 123; 124;
125; 126; 127}
aorai_x2 ∈
{0; 1; 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12; 13; 14; 15; 16; 17; 18;
19; 20; 21; 22; 23; 24; 25; 26; 27; 28; 29; 30; 31; 32; 33; 34;
35; 36; 37; 38; 39; 40; 41; 42; 43; 44; 45; 46; 47; 48; 49; 50;
51; 52; 53; 54; 55; 56; 57; 58; 59; 60; 61; 62; 63; 64; 65; 66;
67; 68; 69; 70; 71; 72; 73; 74; 75; 76; 77; 78; 79; 80; 81; 82;
83; 84; 85; 86; 87; 88; 89; 90; 91; 92; 93; 94; 95; 96; 97; 98;
99; 100; 101; 102; 103; 104; 105; 106; 107; 108; 109; 110; 111;
112; 113; 114; 115; 116; 117; 118; 119; 120; 121; 122; 123; 124;
125; 126; 127}
aorai_y1 ∈
{0; 1; 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12; 13; 14; 15; 16; 17; 18;
19; 20; 21; 22; 23; 24; 25; 26; 27; 28; 29; 30; 31; 32; 33; 34;
35; 36; 37; 38; 39; 40; 41; 42; 43; 44; 45; 46; 47; 48; 49; 50;
51; 52; 53; 54; 55; 56; 57; 58; 59; 60; 61; 62; 63; 64; 65; 66;
67; 68; 69; 70; 71; 72; 73; 74; 75; 76; 77; 78; 79; 80; 81; 82;
83; 84; 85; 86; 87; 88; 89; 90; 91; 92; 93; 94; 95; 96; 97; 98;
99; 100; 101; 102; 103; 104; 105; 106; 107; 108; 109; 110; 111;
112; 113; 114; 115; 116; 117; 118; 119; 120; 121; 122; 123; 124;
125; 126; 127}
aorai_x1 ∈ [0..127]
aorai_x2 ∈ [0..127]
aorai_y1 ∈ [0..127]
aorai_y2 ∈ [0..2147483647]
aorai_CurOperation ∈ {2}
aorai_CurOpStatus ∈ {1}
......@@ -82,36 +55,9 @@
aorai_StatesHistory_2 ∈ {14; 15; 16; 17; 18}
[eva:final-states] Values at end of function input_data:
Frama_C_entropy_source ∈ [--..--]
aorai_x1 ∈
{0; 1; 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12; 13; 14; 15; 16; 17; 18;
19; 20; 21; 22; 23; 24; 25; 26; 27; 28; 29; 30; 31; 32; 33; 34;
35; 36; 37; 38; 39; 40; 41; 42; 43; 44; 45; 46; 47; 48; 49; 50;
51; 52; 53; 54; 55; 56; 57; 58; 59; 60; 61; 62; 63; 64; 65; 66;
67; 68; 69; 70; 71; 72; 73; 74; 75; 76; 77; 78; 79; 80; 81; 82;
83; 84; 85; 86; 87; 88; 89; 90; 91; 92; 93; 94; 95; 96; 97; 98;
99; 100; 101; 102; 103; 104; 105; 106; 107; 108; 109; 110; 111;
112; 113; 114; 115; 116; 117; 118; 119; 120; 121; 122; 123; 124;
125; 126; 127}
aorai_x2 ∈
{0; 1; 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12; 13; 14; 15; 16; 17; 18;
19; 20; 21; 22; 23; 24; 25; 26; 27; 28; 29; 30; 31; 32; 33; 34;
35; 36; 37; 38; 39; 40; 41; 42; 43; 44; 45; 46; 47; 48; 49; 50;
51; 52; 53; 54; 55; 56; 57; 58; 59; 60; 61; 62; 63; 64; 65; 66;
67; 68; 69; 70; 71; 72; 73; 74; 75; 76; 77; 78; 79; 80; 81; 82;
83; 84; 85; 86; 87; 88; 89; 90; 91; 92; 93; 94; 95; 96; 97; 98;
99; 100; 101; 102; 103; 104; 105; 106; 107; 108; 109; 110; 111;
112; 113; 114; 115; 116; 117; 118; 119; 120; 121; 122; 123; 124;
125; 126; 127}
aorai_y1 ∈
{0; 1; 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12; 13; 14; 15; 16; 17; 18;
19; 20; 21; 22; 23; 24; 25; 26; 27; 28; 29; 30; 31; 32; 33; 34;
35; 36; 37; 38; 39; 40; 41; 42; 43; 44; 45; 46; 47; 48; 49; 50;
51; 52; 53; 54; 55; 56; 57; 58; 59; 60; 61; 62; 63; 64; 65; 66;
67; 68; 69; 70; 71; 72; 73; 74; 75; 76; 77; 78; 79; 80; 81; 82;
83; 84; 85; 86; 87; 88; 89; 90; 91; 92; 93; 94; 95; 96; 97; 98;
99; 100; 101; 102; 103; 104; 105; 106; 107; 108; 109; 110; 111;
112; 113; 114; 115; 116; 117; 118; 119; 120; 121; 122; 123; 124;
125; 126; 127}
aorai_x1 ∈ [0..127]
aorai_x2 ∈ [0..127]
aorai_y1 ∈ [0..127]
aorai_y2 ∈ [0..2147483647]
aorai_CurOperation ∈ {2}
aorai_CurOpStatus ∈ {1}
......@@ -121,7 +67,7 @@
[eva:final-states] Values at end of function input_status_post_func:
aorai_CurOperation ∈ {1}
aorai_CurOpStatus ∈ {1}
aorai_CurStates ∈ {8; 9; 10; 11; 12; 13; 19; 20; 21; 22; 23}
aorai_CurStates ∈ [8..13] ∪ [19..23]
aorai_StatesHistory_1 ∈ {14; 15; 16; 17; 18}
aorai_StatesHistory_2 ∈ {0; 19; 20; 21; 22; 23}
[eva:final-states] Values at end of function input_status_pre_func:
......@@ -129,12 +75,12 @@
aorai_CurOpStatus ∈ {0}
aorai_CurStates ∈ {14; 15; 16; 17; 18}
aorai_StatesHistory_1 ∈ {0; 19; 20; 21; 22; 23}
aorai_StatesHistory_2 ∈ {1; 2; 3; 4; 5; 6; 14; 15; 16; 17; 18; 19}
aorai_StatesHistory_2 ∈ [1..6] ∪ [14..19]
[eva:final-states] Values at end of function input_status:
Frama_C_entropy_source ∈ [--..--]
aorai_CurOperation ∈ {1}
aorai_CurOpStatus ∈ {1}
aorai_CurStates ∈ {8; 9; 10; 11; 12; 13; 19; 20; 21; 22; 23}
aorai_CurStates ∈ [8..13] ∪ [19..23]
aorai_StatesHistory_1 ∈ {14; 15; 16; 17; 18}
aorai_StatesHistory_2 ∈ {0; 19; 20; 21; 22; 23}
[eva:final-states] Values at end of function output_post_func:
......@@ -157,122 +103,33 @@
aorai_StatesHistory_2 ∈ {0}
[eva:final-states] Values at end of function read:
Frama_C_entropy_source ∈ [--..--]
s ∈
{0; 1; 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12; 13; 14; 15; 16; 17; 18; 19; 20;
21; 22; 23; 24; 25; 26; 27; 28; 29; 30; 31; 32; 33; 34; 35; 36; 37; 38;
39; 40; 41; 42; 43; 44; 45; 46; 47; 48; 49; 50; 51; 52; 53; 54; 55; 56;
57; 58; 59; 60; 61; 62; 63; 64; 65; 66; 67; 68; 69; 70; 71; 72; 73; 74;
75; 76; 77; 78; 79; 80; 81; 82; 83; 84; 85; 86; 87; 88; 89; 90; 91; 92;
93; 94; 95; 96; 97; 98; 99; 100; 101; 102; 103; 104; 105; 106; 107; 108;
109; 110; 111; 112; 113; 114; 115; 116; 117; 118; 119; 120; 121; 122;
123; 124; 125; 126; 127; 128; 129; 130; 131; 132; 133; 134; 135; 136;
137; 138; 139; 140; 141; 142; 143; 144; 145; 146; 147; 148; 149; 150;
151; 152; 153; 154; 155; 156; 157; 158; 159; 160; 161; 162; 163; 164;
165; 166; 167; 168; 169; 170; 171; 172; 173; 174; 175; 176; 177; 178;
179; 180; 181; 182; 183; 184; 185; 186; 187; 188; 189; 190; 191; 192;
193; 194; 195; 196; 197; 198; 199; 200; 201; 202; 203; 204; 205; 206;
207; 208; 209; 210; 211; 212; 213; 214; 215; 216; 217; 218; 219; 220;
221; 222; 223; 224; 225; 226; 227; 228; 229; 230; 231; 232; 233; 234;
235; 236; 237; 238; 239; 240; 241; 242; 243; 244; 245; 246; 247; 248;
249; 250; 251; 252; 253; 254; 255}
s ∈ [0..255]
status ∈ {0; 2; 4; 6; 8; 10; 12; 14} or UNINITIALIZED
__retres ∈ [-1..255]
aorai_x1 ∈
{0; 1; 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12; 13; 14; 15; 16; 17; 18;
19; 20; 21; 22; 23; 24; 25; 26; 27; 28; 29; 30; 31; 32; 33; 34;
35; 36; 37; 38; 39; 40; 41; 42; 43; 44; 45; 46; 47; 48; 49; 50;
51; 52; 53; 54; 55; 56; 57; 58; 59; 60; 61; 62; 63; 64; 65; 66;
67; 68; 69; 70; 71; 72; 73; 74; 75; 76; 77; 78; 79; 80; 81; 82;
83; 84; 85; 86; 87; 88; 89; 90; 91; 92; 93; 94; 95; 96; 97; 98;
99; 100; 101; 102; 103; 104; 105; 106; 107; 108; 109; 110; 111;
112; 113; 114; 115; 116; 117; 118; 119; 120; 121; 122; 123; 124;
125; 126; 127}
aorai_x2 ∈
{0; 1; 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12; 13; 14; 15; 16; 17; 18;
19; 20; 21; 22; 23; 24; 25; 26; 27; 28; 29; 30; 31; 32; 33; 34;
35; 36; 37; 38; 39; 40; 41; 42; 43; 44; 45; 46; 47; 48; 49; 50;
51; 52; 53; 54; 55; 56; 57; 58; 59; 60; 61; 62; 63; 64; 65; 66;
67; 68; 69; 70; 71; 72; 73; 74; 75; 76; 77; 78; 79; 80; 81; 82;
83; 84; 85; 86; 87; 88; 89; 90; 91; 92; 93; 94; 95; 96; 97; 98;
99; 100; 101; 102; 103; 104; 105; 106; 107; 108; 109; 110; 111;
112; 113; 114; 115; 116; 117; 118; 119; 120; 121; 122; 123; 124;
125; 126; 127}
aorai_y1 ∈
{0; 1; 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12; 13; 14; 15; 16; 17; 18;
19; 20; 21; 22; 23; 24; 25; 26; 27; 28; 29; 30; 31; 32; 33; 34;
35; 36; 37; 38; 39; 40; 41; 42; 43; 44; 45; 46; 47; 48; 49; 50;
51; 52; 53; 54; 55; 56; 57; 58; 59; 60; 61; 62; 63; 64; 65; 66;
67; 68; 69; 70; 71; 72; 73; 74; 75; 76; 77; 78; 79; 80; 81; 82;
83; 84; 85; 86; 87; 88; 89; 90; 91; 92; 93; 94; 95; 96; 97; 98;
99; 100; 101; 102; 103; 104; 105; 106; 107; 108; 109; 110; 111;
112; 113; 114; 115; 116; 117; 118; 119; 120; 121; 122; 123; 124;
125; 126; 127}
aorai_x1 ∈ [0..127]
aorai_x2 ∈ [0..127]
aorai_y1 ∈ [0..127]
aorai_y2 ∈ [0..2147483647]
aorai_CurOperation ∈ {1; 2}
aorai_CurOpStatus ∈ {1}
aorai_CurStates ∈ {0; 19; 20; 21; 22; 23}
aorai_StatesHistory_1 ∈ {1; 2; 3; 4; 5; 6; 14; 15; 16; 17; 18}
aorai_StatesHistory_2 ∈ {0; 8; 9; 10; 11; 12; 13; 19; 20; 21; 22; 23}
aorai_StatesHistory_1 ∈ [1..6] ∪ [14..18]
aorai_StatesHistory_2 ∈ {0} ∪ [8..13] ∪ [19..23]
[eva:final-states] Values at end of function main:
Frama_C_entropy_source ∈ [--..--]
buffer[0] ∈
{0; 128; 129; 130; 131; 132; 133; 134; 135; 136; 137; 138; 139; 140;
141; 142; 143; 144; 145; 146; 147; 148; 149; 150; 151; 152; 153;
154; 155; 156; 157; 158; 159; 160; 161; 162; 163; 164; 165; 166;
167; 168; 169; 170; 171; 172; 173; 174; 175; 176; 177; 178; 179;
180; 181; 182; 183; 184; 185; 186; 187; 188; 189; 190; 191; 192;
193; 194; 195; 196; 197; 198; 199; 200; 201; 202; 203; 204; 205;
206; 207; 208; 209; 210; 211; 212; 213; 214; 215; 216; 217; 218;
219; 220; 221; 222; 223; 224; 225; 226; 227; 228; 229; 230; 231;
232; 233; 234; 235; 236; 237; 238; 239; 240; 241; 242; 243; 244;
245; 246; 247; 248; 249; 250; 251; 252; 253; 254; 255}
[1..2] ∈
{0; 1; 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12; 13; 14; 15; 16; 17; 18;
19; 20; 21; 22; 23; 24; 25; 26; 27; 28; 29; 30; 31; 32; 33; 34; 35;
36; 37; 38; 39; 40; 41; 42; 43; 44; 45; 46; 47; 48; 49; 50; 51; 52;
53; 54; 55; 56; 57; 58; 59; 60; 61; 62; 63; 64; 65; 66; 67; 68; 69;
70; 71; 72; 73; 74; 75; 76; 77; 78; 79; 80; 81; 82; 83; 84; 85; 86;
87; 88; 89; 90; 91; 92; 93; 94; 95; 96; 97; 98; 99; 100; 101; 102;
103; 104; 105; 106; 107; 108; 109; 110; 111; 112; 113; 114; 115;
116; 117; 118; 119; 120; 121; 122; 123; 124; 125; 126; 127}
buffer[0] ∈ {0} ∪ [128..255]
[1..2] ∈ [0..127]
[3..4] ∈ [0..2147483647]
n ∈ {0; 1; 2; 3; 4}
aorai_x1 ∈
{0; 1; 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12; 13; 14; 15; 16; 17; 18;
19; 20; 21; 22; 23; 24; 25; 26; 27; 28; 29; 30; 31; 32; 33; 34;
35; 36; 37; 38; 39; 40; 41; 42; 43; 44; 45; 46; 47; 48; 49; 50;
51; 52; 53; 54; 55; 56; 57; 58; 59; 60; 61; 62; 63; 64; 65; 66;
67; 68; 69; 70; 71; 72; 73; 74; 75; 76; 77; 78; 79; 80; 81; 82;
83; 84; 85; 86; 87; 88; 89; 90; 91; 92; 93; 94; 95; 96; 97; 98;
99; 100; 101; 102; 103; 104; 105; 106; 107; 108; 109; 110; 111;
112; 113; 114; 115; 116; 117; 118; 119; 120; 121; 122; 123; 124;
125; 126; 127}
aorai_x2 ∈
{0; 1; 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12; 13; 14; 15; 16; 17; 18;
19; 20; 21; 22; 23; 24; 25; 26; 27; 28; 29; 30; 31; 32; 33; 34;
35; 36; 37; 38; 39; 40; 41; 42; 43; 44; 45; 46; 47; 48; 49; 50;
51; 52; 53; 54; 55; 56; 57; 58; 59; 60; 61; 62; 63; 64; 65; 66;
67; 68; 69; 70; 71; 72; 73; 74; 75; 76; 77; 78; 79; 80; 81; 82;
83; 84; 85; 86; 87; 88; 89; 90; 91; 92; 93; 94; 95; 96; 97; 98;
99; 100; 101; 102; 103; 104; 105; 106; 107; 108; 109; 110; 111;
112; 113; 114; 115; 116; 117; 118; 119; 120; 121; 122; 123; 124;
125; 126; 127}
aorai_y1 ∈
{0; 1; 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12; 13; 14; 15; 16; 17; 18;
19; 20; 21; 22; 23; 24; 25; 26; 27; 28; 29; 30; 31; 32; 33; 34;
35; 36; 37; 38; 39; 40; 41; 42; 43; 44; 45; 46; 47; 48; 49; 50;
51; 52; 53; 54; 55; 56; 57; 58; 59; 60; 61; 62; 63; 64; 65; 66;
67; 68; 69; 70; 71; 72; 73; 74; 75; 76; 77; 78; 79; 80; 81; 82;
83; 84; 85; 86; 87; 88; 89; 90; 91; 92; 93; 94; 95; 96; 97; 98;
99; 100; 101; 102; 103; 104; 105; 106; 107; 108; 109; 110; 111;
112; 113; 114; 115; 116; 117; 118; 119; 120; 121; 122; 123; 124;
125; 126; 127}
aorai_x1 ∈ [0..127]
aorai_x2 ∈ [0..127]
aorai_y1 ∈ [0..127]
aorai_y2 ∈ [0..2147483647]
aorai_CurOperation ∈ {0; 1; 2}
aorai_CurOpStatus ∈ {0; 1}
aorai_CurStates ∈ {0; 19; 20; 21; 22; 23}
aorai_StatesHistory_1 ∈ {1; 2; 3; 4; 5; 6; 14; 15; 16; 17; 18; 19}
aorai_StatesHistory_2 ∈ {0; 8; 9; 10; 11; 12; 13; 19; 20; 21; 22; 23}
aorai_StatesHistory_1 ∈ [1..6] ∪ [14..19]
aorai_StatesHistory_2 ∈ {0} ∪ [8..13] ∪ [19..23]
[eva:summary] ====== ANALYSIS SUMMARY ======
----------------------------------------------------------------------------
11 functions analyzed (out of 11): 100% coverage.
......
......@@ -58,7 +58,7 @@
[eva:final-states] Values at end of function main:
i ∈ {0; 1; 2; 3; 4; 5; 6; 7}
j ∈ [0..16]
k ∈ {0; 1; 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12; 13; 14; 15}
k ∈ [0..15]
l ∈ [--..--]
__retres ∈ [--..--]
[eva] Analyzing a complete application starting at main
......@@ -76,8 +76,8 @@
[eva] ====== VALUES COMPUTED ======
[eva:final-states] Values at end of function main:
i ∈ {0; 1; 2; 3; 4; 5; 6; 7}
j ∈ {0; 1; 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12; 13; 14; 15; 16}
k ∈ {0; 1; 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12; 13; 14; 15}
j ∈ [0..16]
k ∈ [0..15]
l ∈ {0; 1; 2; 3; 4; 6; 7; 8; 9}
__retres ∈ [0..47]
[eva] Analyzing a complete application starting at main
......@@ -95,10 +95,7 @@
[eva] ====== VALUES COMPUTED ======
[eva:final-states] Values at end of function main:
i ∈ {0; 1; 2; 3; 4; 5; 6; 7}
j ∈ {0; 1; 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12; 13; 14; 15; 16}
k ∈ {0; 1; 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12; 13; 14; 15}
j ∈ [0..16]
k ∈ [0..15]
l ∈ {0; 1; 2; 3; 4; 6; 7; 8; 9}
__retres ∈
{0; 1; 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12; 13; 14; 15; 16; 17; 18;
19; 20; 21; 22; 23; 24; 25; 26; 27; 28; 29; 30; 31; 32; 33; 34;
35; 36; 37; 38; 39; 40; 41; 42; 43; 44; 45; 46; 47}
__retres ∈ [0..47]
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment