%------------------------------------------------------------------------------
% File : Vampire-SAT---5.0.1
% Problem : GEO177+2 : TPTP v9.3.1. Released v3.3.0.
% Transfm : none
% Format : tptp:raw
% Command : run_vampire /export/starexec/sandbox2/benchmark/theBenchmark.p 300 SAT
% Computer : n019.cluster.edu
% Model : x86_64 x86_64
% CPU : Intel(R) Xeon(R) CPU E5-2620 v4 2.10GHz
% Memory : 8046.5625MB
% OS : Linux 6.8.0-71-generic
% CPULimit : 300s
% WCLimit : 300s
% DateTime : Tue Sep 29 09:53:48 AM UTC 2026
% Result : Theorem 0.11s 0.45s
% Output : Refutation 0.11s
% Verified :
% SZS Type : Refutation
% Derivation depth : 18
% Number of leaves : 11
% Syntax : Number of formulae : 82 ( 16 unt; 5 def)
% Number of atoms : 248 ( 0 equ)
% Maximal formula atoms : 6 ( 3 avg)
% Number of connectives : 245 ( 79 ~; 138 |; 14 &)
% ( 5 <=>; 9 =>; 0 <=; 0 <~>)
% Maximal formula depth : 11 ( 5 avg)
% Maximal term depth : 2 ( 1 avg)
% Number of predicates : 9 ( 8 usr; 6 prp; 0-2 aty)
% Number of functors : 5 ( 5 usr; 4 con; 0-2 aty)
% Number of variables : 91 ( 0 sgn 83 !; 8 ?)
% Comments :
%------------------------------------------------------------------------------
fof(f1,axiom,
! [X0] : ~ distinct_points(X0,X0),
file('/export/starexec/sandbox2/benchmark/Axioms/GEO008+0.ax',apart1) ).
fof(f4,axiom,
! [X0,X1,X2] :
( distinct_points(X0,X1)
=> ( distinct_points(X0,X2)
| distinct_points(X1,X2) ) ),
file('/export/starexec/sandbox2/benchmark/Axioms/GEO008+0.ax',apart4) ).
fof(f7,axiom,
! [X0,X1,X2] :
( distinct_points(X0,X1)
=> ( apart_point_and_line(X2,line_connecting(X0,X1))
=> ( distinct_points(X2,X0)
& distinct_points(X2,X1) ) ) ),
file('/export/starexec/sandbox2/benchmark/Axioms/GEO008+0.ax',con1) ).
fof(f9,axiom,
! [X0,X1,X2,X3] :
( ( distinct_points(X0,X1)
& distinct_lines(X2,X3) )
=> ( apart_point_and_line(X0,X2)
| apart_point_and_line(X0,X3)
| apart_point_and_line(X1,X2)
| apart_point_and_line(X1,X3) ) ),
file('/export/starexec/sandbox2/benchmark/Axioms/GEO008+0.ax',cu1) ).
fof(f11,axiom,
! [X0,X1,X2] :
( apart_point_and_line(X0,X1)
=> ( distinct_lines(X1,X2)
| apart_point_and_line(X0,X2) ) ),
file('/export/starexec/sandbox2/benchmark/Axioms/GEO008+0.ax',ceq2) ).
fof(f13,conjecture,
! [X0,X1,X2,X3] :
( ( distinct_points(X0,X1)
& distinct_points(X2,X3) )
=> ( ( apart_point_and_line(X0,line_connecting(X2,X3))
| apart_point_and_line(X1,line_connecting(X2,X3)) )
=> ( apart_point_and_line(X2,line_connecting(X0,X1))
| apart_point_and_line(X3,line_connecting(X0,X1)) ) ) ),
file('/export/starexec/sandbox2/benchmark/theBenchmark.p',con) ).
fof(f14,negated_conjecture,
~ ! [X0,X1,X2,X3] :
( ( distinct_points(X0,X1)
& distinct_points(X2,X3) )
=> ( ( apart_point_and_line(X0,line_connecting(X2,X3))
| apart_point_and_line(X1,line_connecting(X2,X3)) )
=> ( apart_point_and_line(X2,line_connecting(X0,X1))
| apart_point_and_line(X3,line_connecting(X0,X1)) ) ) ),
inference(negated_conjecture,[status(cth)],[f13]) ).
fof(f15,plain,
! [X0,X1,X2] :
( distinct_points(X0,X2)
| distinct_points(X1,X2)
| ~ distinct_points(X0,X1) ),
inference(ennf_transformation,[],[f4]) ).
fof(f16,plain,
! [X0,X1,X2] :
( distinct_points(X0,X2)
| distinct_points(X1,X2)
| ~ distinct_points(X0,X1) ),
inference(flattening,[],[f15]) ).
fof(f21,plain,
! [X0,X1,X2] :
( ( distinct_points(X2,X0)
& distinct_points(X2,X1) )
| ~ apart_point_and_line(X2,line_connecting(X0,X1))
| ~ distinct_points(X0,X1) ),
inference(ennf_transformation,[],[f7]) ).
fof(f22,plain,
! [X0,X1,X2] :
( ( distinct_points(X2,X0)
& distinct_points(X2,X1) )
| ~ apart_point_and_line(X2,line_connecting(X0,X1))
| ~ distinct_points(X0,X1) ),
inference(flattening,[],[f21]) ).
fof(f25,plain,
! [X0,X1,X2,X3] :
( apart_point_and_line(X0,X2)
| apart_point_and_line(X0,X3)
| apart_point_and_line(X1,X2)
| apart_point_and_line(X1,X3)
| ~ distinct_points(X0,X1)
| ~ distinct_lines(X2,X3) ),
inference(ennf_transformation,[],[f9]) ).
fof(f26,plain,
! [X0,X1,X2,X3] :
( apart_point_and_line(X0,X2)
| apart_point_and_line(X0,X3)
| apart_point_and_line(X1,X2)
| apart_point_and_line(X1,X3)
| ~ distinct_points(X0,X1)
| ~ distinct_lines(X2,X3) ),
inference(flattening,[],[f25]) ).
fof(f29,plain,
! [X0,X1,X2] :
( distinct_lines(X1,X2)
| apart_point_and_line(X0,X2)
| ~ apart_point_and_line(X0,X1) ),
inference(ennf_transformation,[],[f11]) ).
fof(f30,plain,
! [X0,X1,X2] :
( distinct_lines(X1,X2)
| apart_point_and_line(X0,X2)
| ~ apart_point_and_line(X0,X1) ),
inference(flattening,[],[f29]) ).
fof(f32,plain,
? [X0,X1,X2,X3] :
( ~ apart_point_and_line(X2,line_connecting(X0,X1))
& ~ apart_point_and_line(X3,line_connecting(X0,X1))
& ( apart_point_and_line(X0,line_connecting(X2,X3))
| apart_point_and_line(X1,line_connecting(X2,X3)) )
& distinct_points(X0,X1)
& distinct_points(X2,X3) ),
inference(ennf_transformation,[],[f14]) ).
fof(f33,plain,
? [X0,X1,X2,X3] :
( ~ apart_point_and_line(X2,line_connecting(X0,X1))
& ~ apart_point_and_line(X3,line_connecting(X0,X1))
& ( apart_point_and_line(X0,line_connecting(X2,X3))
| apart_point_and_line(X1,line_connecting(X2,X3)) )
& distinct_points(X0,X1)
& distinct_points(X2,X3) ),
inference(flattening,[],[f32]) ).
fof(f34,plain,
! [X0] : ~ distinct_points(X0,X0),
inference(cnf_transformation,[],[f1]) ).
fof(f37,plain,
! [X2,X0,X1] :
( ~ distinct_points(X0,X1)
| distinct_points(X1,X2)
| distinct_points(X0,X2) ),
inference(cnf_transformation,[],[f16]) ).
fof(f40,plain,
! [X2,X0,X1] :
( ~ apart_point_and_line(X2,line_connecting(X0,X1))
| ~ distinct_points(X0,X1)
| distinct_points(X2,X1) ),
inference(cnf_transformation,[],[f22]) ).
fof(f41,plain,
! [X2,X0,X1] :
( ~ apart_point_and_line(X2,line_connecting(X0,X1))
| ~ distinct_points(X0,X1)
| distinct_points(X2,X0) ),
inference(cnf_transformation,[],[f22]) ).
fof(f44,plain,
! [X2,X3,X0,X1] :
( ~ distinct_lines(X2,X3)
| ~ distinct_points(X0,X1)
| apart_point_and_line(X1,X3)
| apart_point_and_line(X1,X2)
| apart_point_and_line(X0,X3)
| apart_point_and_line(X0,X2) ),
inference(cnf_transformation,[],[f26]) ).
fof(f46,plain,
! [X2,X0,X1] :
( ~ apart_point_and_line(X0,X1)
| apart_point_and_line(X0,X2)
| distinct_lines(X1,X2) ),
inference(cnf_transformation,[],[f30]) ).
fof(f48,plain,
( apart_point_and_line(sK1,line_connecting(sK2,sK3))
| apart_point_and_line(sK0,line_connecting(sK2,sK3)) ),
inference(cnf_transformation,[],[f33]) ).
fof(f49,plain,
distinct_points(sK2,sK3),
inference(cnf_transformation,[],[f33]) ).
fof(f50,plain,
distinct_points(sK0,sK1),
inference(cnf_transformation,[],[f33]) ).
fof(f51,plain,
~ apart_point_and_line(sK3,line_connecting(sK0,sK1)),
inference(cnf_transformation,[],[f33]) ).
fof(f52,plain,
~ apart_point_and_line(sK2,line_connecting(sK0,sK1)),
inference(cnf_transformation,[],[f33]) ).
fof(f55,plain,
! [X2,X3,X0,X1] :
( ~ distinct_points(X0,X1)
| distinct_lines(X2,X3)
| apart_point_and_line(X1,X3)
| apart_point_and_line(X1,X2)
| apart_point_and_line(X0,X3)
| apart_point_and_line(X0,X2) ),
inference(consistent_polarity_flipping,[],[f44]) ).
fof(f56,plain,
! [X2,X0,X1] :
( ~ apart_point_and_line(X0,X1)
| apart_point_and_line(X0,X2)
| ~ distinct_lines(X1,X2) ),
inference(consistent_polarity_flipping,[],[f46]) ).
fof(f59,definition,
( spl4_1
<=> apart_point_and_line(sK0,line_connecting(sK2,sK3)) ),
introduced(definition,[new_symbols(definition,[spl4_1])],[avatar_definition]) ).
fof(f61,plain,
( apart_point_and_line(sK0,line_connecting(sK2,sK3))
| ~ spl4_1 ),
inference(avatar_component_clause,[],[f59]) ).
fof(f63,definition,
( spl4_2
<=> apart_point_and_line(sK1,line_connecting(sK2,sK3)) ),
introduced(definition,[new_symbols(definition,[spl4_2])],[avatar_definition]) ).
fof(f65,plain,
( apart_point_and_line(sK1,line_connecting(sK2,sK3))
| ~ spl4_2 ),
inference(avatar_component_clause,[],[f63]) ).
fof(f66,plain,
( spl4_1
| spl4_2 ),
inference(avatar_split_clause,[],[f48,f63,f59]) ).
fof(f68,plain,
! [X0] :
( distinct_points(sK1,X0)
| distinct_points(sK0,X0) ),
inference(resolution,[],[f37,f50]) ).
fof(f73,plain,
( ! [X0] :
( ~ distinct_lines(line_connecting(sK2,sK3),X0)
| apart_point_and_line(sK1,X0) )
| ~ spl4_2 ),
inference(resolution,[],[f56,f65]) ).
fof(f86,plain,
! [X0,X1] :
( distinct_lines(X0,X1)
| apart_point_and_line(sK3,X1)
| apart_point_and_line(sK3,X0)
| apart_point_and_line(sK2,X1)
| apart_point_and_line(sK2,X0) ),
inference(resolution,[],[f55,f49]) ).
fof(f105,plain,
( ! [X0] :
( apart_point_and_line(sK3,X0)
| apart_point_and_line(sK3,line_connecting(sK2,sK3))
| apart_point_and_line(sK2,X0)
| apart_point_and_line(sK2,line_connecting(sK2,sK3))
| apart_point_and_line(sK1,X0) )
| ~ spl4_2 ),
inference(resolution,[],[f86,f73]) ).
fof(f107,definition,
( spl4_3
<=> apart_point_and_line(sK2,line_connecting(sK2,sK3)) ),
introduced(definition,[new_symbols(definition,[spl4_3])],[avatar_definition]) ).
fof(f108,plain,
( ~ apart_point_and_line(sK2,line_connecting(sK2,sK3))
| spl4_3 ),
inference(avatar_component_clause,[],[f107]) ).
fof(f109,plain,
( apart_point_and_line(sK2,line_connecting(sK2,sK3))
| ~ spl4_3 ),
inference(avatar_component_clause,[],[f107]) ).
fof(f111,definition,
( spl4_4
<=> apart_point_and_line(sK3,line_connecting(sK2,sK3)) ),
introduced(definition,[new_symbols(definition,[spl4_4])],[avatar_definition]) ).
fof(f112,plain,
( ~ apart_point_and_line(sK3,line_connecting(sK2,sK3))
| spl4_4 ),
inference(avatar_component_clause,[],[f111]) ).
fof(f113,plain,
( apart_point_and_line(sK3,line_connecting(sK2,sK3))
| ~ spl4_4 ),
inference(avatar_component_clause,[],[f111]) ).
fof(f115,definition,
( spl4_5
<=> ! [X0] :
( apart_point_and_line(sK3,X0)
| apart_point_and_line(sK1,X0)
| apart_point_and_line(sK2,X0) ) ),
introduced(definition,[new_symbols(definition,[spl4_5])],[avatar_definition]) ).
fof(f116,plain,
( ! [X0] :
( apart_point_and_line(sK3,X0)
| apart_point_and_line(sK1,X0)
| apart_point_and_line(sK2,X0) )
| ~ spl4_5 ),
inference(avatar_component_clause,[],[f115]) ).
fof(f117,plain,
( spl4_3
| spl4_4
| spl4_5
| ~ spl4_2 ),
inference(avatar_split_clause,[],[f105,f63,f115,f111,f107]) ).
fof(f121,plain,
( ~ distinct_points(sK2,sK3)
| distinct_points(sK2,sK2)
| ~ spl4_3 ),
inference(resolution,[],[f109,f41]) ).
fof(f125,plain,
( distinct_points(sK2,sK2)
| ~ spl4_3 ),
inference(forward_subsumption_resolution,[],[f121,f49]) ).
fof(f126,plain,
( $false
| ~ spl4_3 ),
inference(forward_subsumption_resolution,[],[f125,f34]) ).
fof(f127,plain,
~ spl4_3,
inference(avatar_contradiction_clause,[],[f126]) ).
fof(f130,plain,
( ~ distinct_points(sK2,sK3)
| distinct_points(sK3,sK3)
| ~ spl4_4 ),
inference(resolution,[],[f113,f40]) ).
fof(f133,plain,
( distinct_points(sK3,sK3)
| ~ spl4_4 ),
inference(forward_subsumption_resolution,[],[f130,f49]) ).
fof(f135,plain,
( $false
| ~ spl4_4 ),
inference(forward_subsumption_resolution,[],[f133,f34]) ).
fof(f136,plain,
~ spl4_4,
inference(avatar_contradiction_clause,[],[f135]) ).
fof(f166,plain,
( apart_point_and_line(sK1,line_connecting(sK0,sK1))
| apart_point_and_line(sK2,line_connecting(sK0,sK1))
| ~ spl4_5 ),
inference(resolution,[],[f116,f51]) ).
fof(f172,plain,
( apart_point_and_line(sK1,line_connecting(sK0,sK1))
| ~ spl4_5 ),
inference(forward_subsumption_resolution,[],[f166,f52]) ).
fof(f174,plain,
( ~ distinct_points(sK0,sK1)
| distinct_points(sK1,sK1)
| ~ spl4_5 ),
inference(resolution,[],[f172,f40]) ).
fof(f177,plain,
( distinct_points(sK1,sK1)
| ~ spl4_5 ),
inference(forward_subsumption_resolution,[],[f174,f68]) ).
fof(f179,plain,
( $false
| ~ spl4_5 ),
inference(forward_subsumption_resolution,[],[f177,f34]) ).
fof(f180,plain,
~ spl4_5,
inference(avatar_contradiction_clause,[],[f179]) ).
fof(f183,plain,
( ! [X0] :
( ~ distinct_lines(line_connecting(sK2,sK3),X0)
| apart_point_and_line(sK0,X0) )
| ~ spl4_1 ),
inference(resolution,[],[f61,f56]) ).
fof(f192,plain,
( ! [X0] :
( apart_point_and_line(sK0,X0)
| apart_point_and_line(sK3,X0)
| apart_point_and_line(sK3,line_connecting(sK2,sK3))
| apart_point_and_line(sK2,X0)
| apart_point_and_line(sK2,line_connecting(sK2,sK3)) )
| ~ spl4_1 ),
inference(resolution,[],[f183,f86]) ).
fof(f195,plain,
( ! [X0] :
( apart_point_and_line(sK0,X0)
| apart_point_and_line(sK3,X0)
| apart_point_and_line(sK2,X0)
| apart_point_and_line(sK2,line_connecting(sK2,sK3)) )
| ~ spl4_1
| spl4_4 ),
inference(forward_subsumption_resolution,[],[f192,f112]) ).
fof(f196,plain,
( ! [X0] :
( apart_point_and_line(sK3,X0)
| apart_point_and_line(sK0,X0)
| apart_point_and_line(sK2,X0) )
| ~ spl4_1
| spl4_3
| spl4_4 ),
inference(forward_subsumption_resolution,[],[f195,f108]) ).
fof(f222,plain,
( apart_point_and_line(sK0,line_connecting(sK0,sK1))
| apart_point_and_line(sK2,line_connecting(sK0,sK1))
| ~ spl4_1
| spl4_3
| spl4_4 ),
inference(resolution,[],[f196,f51]) ).
fof(f228,plain,
( apart_point_and_line(sK0,line_connecting(sK0,sK1))
| ~ spl4_1
| spl4_3
| spl4_4 ),
inference(forward_subsumption_resolution,[],[f222,f52]) ).
fof(f234,plain,
( ~ distinct_points(sK0,sK1)
| distinct_points(sK0,sK0)
| ~ spl4_1
| spl4_3
| spl4_4 ),
inference(resolution,[],[f228,f41]) ).
fof(f238,plain,
( distinct_points(sK0,sK0)
| ~ spl4_1
| spl4_3
| spl4_4 ),
inference(forward_subsumption_resolution,[],[f234,f50]) ).
fof(f239,plain,
( $false
| ~ spl4_1
| spl4_3
| spl4_4 ),
inference(forward_subsumption_resolution,[],[f238,f34]) ).
fof(f240,plain,
( ~ spl4_1
| spl4_3
| spl4_4 ),
inference(avatar_contradiction_clause,[],[f239]) ).
cnf(s1,plain,
( spl4_1
| spl4_2 ),
inference(sat_conversion,[],[f66]) ).
cnf(s2,plain,
( ~ spl4_2
| spl4_3
| spl4_4
| spl4_5 ),
inference(sat_conversion,[],[f117]) ).
cnf(s3,plain,
~ spl4_3,
inference(sat_conversion,[],[f127]) ).
cnf(s4,plain,
~ spl4_4,
inference(sat_conversion,[],[f136]) ).
cnf(s5,plain,
~ spl4_5,
inference(sat_conversion,[],[f180]) ).
cnf(s6,plain,
( ~ spl4_1
| spl4_3
| spl4_4 ),
inference(sat_conversion,[],[f240]) ).
cnf(s7,plain,
~ spl4_1,
inference(rat,[],[s6,s4,s3]) ).
cnf(s8,plain,
~ spl4_2,
inference(rat,[],[s2,s5,s4,s3]) ).
cnf(s9,plain,
$false,
inference(rat,[],[s1,s8,s7]) ).
fof(f241,plain,
$false,
inference(avatar_sat_refutation,[],[s9]) ).
%------------------------------------------------------------------------------
%----ORIGINAL SYSTEM OUTPUT
% 0.00/0.02 % Problem : GEO177+2 : TPTP v9.3.1. Released v3.3.0.
% 0.00/0.05 % Command : run_vampire /export/starexec/sandbox2/benchmark/theBenchmark.p 300 SAT
% 0.11/0.36 % Computer : n019.cluster.edu
% 0.11/0.36 % Model : x86_64 x86_64
% 0.11/0.36 % CPU : Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz
% 0.11/0.36 % Memory : 8046.5625MB
% 0.11/0.36 % OS : Linux 6.8.0-71-generic
% 0.11/0.36 % CPULimit : 300
% 0.11/0.36 % WCLimit : 300
% 0.11/0.36 % DateTime : Sun Sep 27 07:24:48 UTC 2026
% 0.11/0.36 % CPUTime :
% 0.11/0.36 Running run_vampire /export/starexec/sandbox2/benchmark/theBenchmark.p 300 SAT
% 0.11/0.40 Running first-order model finding
% 0.11/0.40 Running: /export/starexec/sandbox2/solver/bin/vampire-ho --input_syntax tptp --output_axiom_names on --mode casc --intent sat -m 16384 --cores 7 -t 300 /export/starexec/sandbox2/benchmark/theBenchmark.p
% 0.11/0.45 % (2762712)Will run a generic schedule for satisfiability detection.
% 0.11/0.45 % (2762717)fmb+10_1_sas=cadical:bce=on:rp=on:random_seed=1265855439_2999 on theBenchmark for (2999ds/0Mi)
% 0.11/0.45 % TRYING [1]
% 0.11/0.45 % TRYING [2]
% 0.11/0.45 % TRYING [3]
% 0.11/0.45 % TRYING [4]
% 0.11/0.45 % TRYING [5]
% 0.11/0.45 % TRYING [6]
% 0.11/0.45 % (2762718)% WARNING: option uhcvi not known.
% 0.11/0.45 % TRYING [7]
% 0.11/0.45 % (2762719)dis+10_161_sil=256000:plsq=on:plsqr=61199697,1048576:gs=on:alpa=true:sac=on:slsq=on:cn=on:random_seed=307709810:i=88024:add=on:rawr=on_2999 on theBenchmark for (2999ds/88024Mi)
% 0.11/0.45 % (2762723)ott-3_16_to=lpo:sil=16000:sp=arity:fd=off:rp=on:random_seed=431662582:i=159:bs=unit_only:nicw=on:fsr=off:amm=off_2999 on theBenchmark for (2999ds/159Mi)
% 0.11/0.45 % (2762720)dis+10_1_sil=32000:sp=arity:random_seed=774142788:i=103:fgj=on_2999 on theBenchmark for (2999ds/103Mi)
% 0.11/0.45 % (2762721)ott+31_1_sil=16000:lcm=predicate:bce=on:newcnf=on:random_seed=3470606464:i=116_2999 on theBenchmark for (2999ds/116Mi)
% 0.11/0.45 % (2762722)ott+1_1_to=lpo:sil=16000:sp=reverse_arity:erd=off:random_seed=1338074553:i=131_2999 on theBenchmark for (2999ds/131Mi)
% 0.11/0.45 % TRYING [8]
% 0.11/0.45 % (2762718)dis+11_61:31_drc=ordering:lsd=5:bsr=unit_only:rp=on:newcnf=on:random_seed=395428723:i=135531:add=off:rawr=on_2999 on theBenchmark for (2999ds/135531Mi)
% 0.11/0.45 % TRYING [9]
% 0.11/0.45 % TRYING [10]
% 0.11/0.45 % (2762718) found proof, printing to "/export/starexec/sandbox2/tmp/vampire-proof-2762712-2762718"...
% 0.11/0.45 % (2762718)...printing done.
% 0.11/0.45 % (2762718)Refutation found. Thanks to Tanya!
% 0.11/0.45 % SZS status Theorem for theBenchmark
% 0.11/0.45 % SZS output start Proof for theBenchmark
% See solution above
% 0.11/0.45 % (2762718)------------------------------
% 0.11/0.45 % (2762718)Version: Vampire 5.0.1 (Release build, commit 5ef7c2677 on 2026-07-16 16:54:09 +0200)
% 0.11/0.45 % (2762718)Linked with Z3 4.14.0.0 3c47fd96cf5645d0c42b2c819d9e9a84380aa721 z3-4.8.4-9178-g3c47fd96c
% 0.11/0.45 % (2762718)CaDiCaL version: 2.1.3
% 0.11/0.45 % (2762718)Termination reason: Refutation
% 0.11/0.45 % (2762718)Time elapsed: 0.007 s
% 0.11/0.45 % (2762718)Peak memory usage: 12 MB
% 0.11/0.45 % (2762718)Instructions burned: 8 (million)
% 0.11/0.45 % (2762712)Success in time 0.046 s
% 0.11/0.45 % Vampire exiting
%------------------------------------------------------------------------------