%------------------------------------------------------------------------------ % File : lazyCoP---0.1 % Problem : SWV286-2 : TPTP v8.1.0. Released v3.2.0. % Transfm : none % Format : tptp:raw % Command : vampire -t 0 --mode clausify %d -updr off -nm 2 -erd input_only -icip on | lazycop % Computer : n021.cluster.edu % Model : x86_64 x86_64 % CPU : Intel(R) Xeon(R) CPU E5-2620 v4 2.10GHz % Memory : 8042.1875MB % OS : Linux 3.10.0-693.el7.x86_64 % CPULimit : 300s % WCLimit : 600s % DateTime : Wed Jul 20 19:46:14 EDT 2022 % Result : Unsatisfiable 0.14s 0.36s % Output : Assurance 0s % Verified : % SZS Type : - % Comments : %------------------------------------------------------------------------------ %----No solution output by system %------------------------------------------------------------------------------ %----ORIGINAL SYSTEM OUTPUT % 0.08/0.13 % Problem : SWV286-2 : TPTP v8.1.0. Released v3.2.0. % 0.08/0.14 % Command : vampire -t 0 --mode clausify %d -updr off -nm 2 -erd input_only -icip on | lazycop % 0.14/0.35 % Computer : n021.cluster.edu % 0.14/0.35 % Model : x86_64 x86_64 % 0.14/0.35 % CPU : Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz % 0.14/0.35 % Memory : 8042.1875MB % 0.14/0.35 % OS : Linux 3.10.0-693.el7.x86_64 % 0.14/0.35 % CPULimit : 300 % 0.14/0.35 % WCLimit : 600 % 0.14/0.35 % DateTime : Thu Jun 16 04:33:14 EDT 2022 % 0.14/0.36 % CPUTime : % 0.14/0.36 % SZS status Unsatisfiable % 0.14/0.36 % SZS output begin IncompleteProof % 0.14/0.36 cnf(c0, axiom, % 0.14/0.36 c_in(v_evs,c_OtwayRees_Ootway,tc_List_Olist(tc_Event_Oevent))). % 0.14/0.36 cnf(c1, plain, % 0.14/0.36 c_in(v_evs,c_OtwayRees_Ootway,tc_List_Olist(tc_Event_Oevent)), % 0.14/0.36 inference(start, [], [c0])). % 0.14/0.36 % 0.14/0.36 cnf(c2, axiom, % 0.14/0.36 c_in(c_Event_Oevent_OSays(X0,c_Message_Oagent_OServer,c_Message_Omsg_OMPair(X1,c_Message_Omsg_OMPair(c_Message_Omsg_OAgent(X2),c_Message_Omsg_OMPair(c_Message_Omsg_OAgent(X0),c_Message_Omsg_OMPair(v_sko__vEb(X2,X0,X1,X3,X4),c_Message_Omsg_OCrypt(c_Public_OshrK(X0),c_Message_Omsg_OMPair(X1,c_Message_Omsg_OMPair(X3,c_Message_Omsg_OMPair(c_Message_Omsg_OAgent(X2),c_Message_Omsg_OAgent(X0)))))))))),c_List_Oset(X4,tc_Event_Oevent),tc_Event_Oevent) | c_in(X0,c_Event_Obad,tc_Message_Oagent) | ~c_in(c_Event_Oevent_OSays(c_Message_Oagent_OServer,X0,c_Message_Omsg_OMPair(X1,c_Message_Omsg_OMPair(c_Message_Omsg_OCrypt(c_Public_OshrK(X2),c_Message_Omsg_OMPair(X1,c_Message_Omsg_OKey(X5))),c_Message_Omsg_OCrypt(c_Public_OshrK(X0),c_Message_Omsg_OMPair(X3,c_Message_Omsg_OKey(X5)))))),c_List_Oset(X4,tc_Event_Oevent),tc_Event_Oevent) | ~c_in(X4,c_OtwayRees_Ootway,tc_List_Olist(tc_Event_Oevent))). % 0.14/0.36 cnf(a0, assumption, % 0.14/0.36 v_evs = X4). % 0.14/0.36 cnf(a1, assumption, % 0.14/0.36 c_OtwayRees_Ootway = c_OtwayRees_Ootway). % 0.14/0.36 cnf(a2, assumption, % 0.14/0.36 tc_List_Olist(tc_Event_Oevent) = tc_List_Olist(tc_Event_Oevent)). % 0.14/0.36 cnf(c3, plain, % 0.14/0.36 $false, % 0.14/0.36 inference(strict_predicate_extension, [assumptions([a0, a1, a2])], [c1, c2])). % 0.14/0.36 cnf(c4, plain, % 0.14/0.36 c_in(c_Event_Oevent_OSays(X0,c_Message_Oagent_OServer,c_Message_Omsg_OMPair(X1,c_Message_Omsg_OMPair(c_Message_Omsg_OAgent(X2),c_Message_Omsg_OMPair(c_Message_Omsg_OAgent(X0),c_Message_Omsg_OMPair(v_sko__vEb(X2,X0,X1,X3,X4),c_Message_Omsg_OCrypt(c_Public_OshrK(X0),c_Message_Omsg_OMPair(X1,c_Message_Omsg_OMPair(X3,c_Message_Omsg_OMPair(c_Message_Omsg_OAgent(X2),c_Message_Omsg_OAgent(X0)))))))))),c_List_Oset(X4,tc_Event_Oevent),tc_Event_Oevent) | c_in(X0,c_Event_Obad,tc_Message_Oagent) | ~c_in(c_Event_Oevent_OSays(c_Message_Oagent_OServer,X0,c_Message_Omsg_OMPair(X1,c_Message_Omsg_OMPair(c_Message_Omsg_OCrypt(c_Public_OshrK(X2),c_Message_Omsg_OMPair(X1,c_Message_Omsg_OKey(X5))),c_Message_Omsg_OCrypt(c_Public_OshrK(X0),c_Message_Omsg_OMPair(X3,c_Message_Omsg_OKey(X5)))))),c_List_Oset(X4,tc_Event_Oevent),tc_Event_Oevent), % 0.14/0.36 inference(strict_predicate_extension, [assumptions([a0, a1, a2])], [c1, c2])). % 0.14/0.36 % 0.14/0.36 cnf(c5, axiom, % 0.14/0.36 ~c_in(c_Event_Oevent_OSays(v_B,c_Message_Oagent_OServer,c_Message_Omsg_OMPair(v_NA,c_Message_Omsg_OMPair(c_Message_Omsg_OAgent(v_A),c_Message_Omsg_OMPair(c_Message_Omsg_OAgent(v_B),c_Message_Omsg_OMPair(X6,c_Message_Omsg_OCrypt(c_Public_OshrK(v_B),c_Message_Omsg_OMPair(v_NA,c_Message_Omsg_OMPair(X7,c_Message_Omsg_OMPair(c_Message_Omsg_OAgent(v_A),c_Message_Omsg_OAgent(v_B)))))))))),c_List_Oset(v_evs,tc_Event_Oevent),tc_Event_Oevent)). % 0.14/0.36 cnf(a3, assumption, % 0.14/0.36 c_Event_Oevent_OSays(X0,c_Message_Oagent_OServer,c_Message_Omsg_OMPair(X1,c_Message_Omsg_OMPair(c_Message_Omsg_OAgent(X2),c_Message_Omsg_OMPair(c_Message_Omsg_OAgent(X0),c_Message_Omsg_OMPair(v_sko__vEb(X2,X0,X1,X3,X4),c_Message_Omsg_OCrypt(c_Public_OshrK(X0),c_Message_Omsg_OMPair(X1,c_Message_Omsg_OMPair(X3,c_Message_Omsg_OMPair(c_Message_Omsg_OAgent(X2),c_Message_Omsg_OAgent(X0)))))))))) = c_Event_Oevent_OSays(v_B,c_Message_Oagent_OServer,c_Message_Omsg_OMPair(v_NA,c_Message_Omsg_OMPair(c_Message_Omsg_OAgent(v_A),c_Message_Omsg_OMPair(c_Message_Omsg_OAgent(v_B),c_Message_Omsg_OMPair(X6,c_Message_Omsg_OCrypt(c_Public_OshrK(v_B),c_Message_Omsg_OMPair(v_NA,c_Message_Omsg_OMPair(X7,c_Message_Omsg_OMPair(c_Message_Omsg_OAgent(v_A),c_Message_Omsg_OAgent(v_B))))))))))). % 0.14/0.36 cnf(a4, assumption, % 0.14/0.36 c_List_Oset(X4,tc_Event_Oevent) = c_List_Oset(v_evs,tc_Event_Oevent)). % 0.14/0.36 cnf(a5, assumption, % 0.14/0.36 tc_Event_Oevent = tc_Event_Oevent). % 0.14/0.36 cnf(c6, plain, % 0.14/0.36 c_in(X0,c_Event_Obad,tc_Message_Oagent) | ~c_in(c_Event_Oevent_OSays(c_Message_Oagent_OServer,X0,c_Message_Omsg_OMPair(X1,c_Message_Omsg_OMPair(c_Message_Omsg_OCrypt(c_Public_OshrK(X2),c_Message_Omsg_OMPair(X1,c_Message_Omsg_OKey(X5))),c_Message_Omsg_OCrypt(c_Public_OshrK(X0),c_Message_Omsg_OMPair(X3,c_Message_Omsg_OKey(X5)))))),c_List_Oset(X4,tc_Event_Oevent),tc_Event_Oevent), % 0.14/0.36 inference(strict_predicate_extension, [assumptions([a3, a4, a5])], [c4, c5])). % 0.14/0.36 cnf(c7, plain, % 0.14/0.36 $false, % 0.14/0.36 inference(strict_predicate_extension, [assumptions([a3, a4, a5])], [c4, c5])). % 0.14/0.36 % 0.14/0.36 cnf(c8, axiom, % 0.14/0.36 ~c_in(v_B,c_Event_Obad,tc_Message_Oagent)). % 0.14/0.36 cnf(a6, assumption, % 0.14/0.36 X0 = v_B). % 0.14/0.36 cnf(a7, assumption, % 0.14/0.36 c_Event_Obad = c_Event_Obad). % 0.14/0.36 cnf(a8, assumption, % 0.14/0.36 tc_Message_Oagent = tc_Message_Oagent). % 0.14/0.36 cnf(c9, plain, % 0.14/0.36 ~c_in(c_Event_Oevent_OSays(c_Message_Oagent_OServer,X0,c_Message_Omsg_OMPair(X1,c_Message_Omsg_OMPair(c_Message_Omsg_OCrypt(c_Public_OshrK(X2),c_Message_Omsg_OMPair(X1,c_Message_Omsg_OKey(X5))),c_Message_Omsg_OCrypt(c_Public_OshrK(X0),c_Message_Omsg_OMPair(X3,c_Message_Omsg_OKey(X5)))))),c_List_Oset(X4,tc_Event_Oevent),tc_Event_Oevent), % 0.14/0.36 inference(strict_predicate_extension, [assumptions([a6, a7, a8])], [c6, c8])). % 0.14/0.36 cnf(c10, plain, % 0.14/0.36 $false, % 0.14/0.36 inference(strict_predicate_extension, [assumptions([a6, a7, a8])], [c6, c8])). % 0.14/0.36 % 0.14/0.36 cnf(c11, axiom, % 0.14/0.36 c_in(c_Event_Oevent_OSays(c_Message_Oagent_OServer,X8,c_Message_Omsg_OMPair(X9,c_Message_Omsg_OMPair(c_Message_Omsg_OCrypt(c_Public_OshrK(X10),c_Message_Omsg_OMPair(X9,c_Message_Omsg_OKey(X11))),c_Message_Omsg_OCrypt(c_Public_OshrK(X8),c_Message_Omsg_OMPair(v_sko__u8o(X10,X8,X11,X9,X12),c_Message_Omsg_OKey(X11)))))),c_List_Oset(X12,tc_Event_Oevent),tc_Event_Oevent) | c_in(X10,c_Event_Obad,tc_Message_Oagent) | ~c_in(c_Event_Oevent_OSays(X10,X8,c_Message_Omsg_OMPair(X9,c_Message_Omsg_OMPair(c_Message_Omsg_OAgent(X10),c_Message_Omsg_OMPair(c_Message_Omsg_OAgent(X8),c_Message_Omsg_OCrypt(c_Public_OshrK(X10),c_Message_Omsg_OMPair(X9,c_Message_Omsg_OMPair(c_Message_Omsg_OAgent(X10),c_Message_Omsg_OAgent(X8)))))))),c_List_Oset(X12,tc_Event_Oevent),tc_Event_Oevent) | ~c_in(c_Event_Oevent_OSays(X13,X10,c_Message_Omsg_OMPair(X9,c_Message_Omsg_OCrypt(c_Public_OshrK(X10),c_Message_Omsg_OMPair(X9,c_Message_Omsg_OKey(X11))))),c_List_Oset(X12,tc_Event_Oevent),tc_Event_Oevent) | ~c_in(X12,c_OtwayRees_Ootway,tc_List_Olist(tc_Event_Oevent))). % 0.14/0.36 cnf(a9, assumption, % 0.14/0.36 c_Event_Oevent_OSays(c_Message_Oagent_OServer,X0,c_Message_Omsg_OMPair(X1,c_Message_Omsg_OMPair(c_Message_Omsg_OCrypt(c_Public_OshrK(X2),c_Message_Omsg_OMPair(X1,c_Message_Omsg_OKey(X5))),c_Message_Omsg_OCrypt(c_Public_OshrK(X0),c_Message_Omsg_OMPair(X3,c_Message_Omsg_OKey(X5)))))) = c_Event_Oevent_OSays(c_Message_Oagent_OServer,X8,c_Message_Omsg_OMPair(X9,c_Message_Omsg_OMPair(c_Message_Omsg_OCrypt(c_Public_OshrK(X10),c_Message_Omsg_OMPair(X9,c_Message_Omsg_OKey(X11))),c_Message_Omsg_OCrypt(c_Public_OshrK(X8),c_Message_Omsg_OMPair(v_sko__u8o(X10,X8,X11,X9,X12),c_Message_Omsg_OKey(X11))))))). % 0.14/0.36 cnf(a10, assumption, % 0.14/0.36 c_List_Oset(X4,tc_Event_Oevent) = c_List_Oset(X12,tc_Event_Oevent)). % 0.14/0.36 cnf(a11, assumption, % 0.14/0.36 tc_Event_Oevent = tc_Event_Oevent). % 0.14/0.36 cnf(c12, plain, % 0.14/0.36 $false, % 0.14/0.36 inference(strict_predicate_extension, [assumptions([a9, a10, a11])], [c9, c11])). % 0.14/0.36 cnf(c13, plain, % 0.14/0.36 c_in(X10,c_Event_Obad,tc_Message_Oagent) | ~c_in(c_Event_Oevent_OSays(X10,X8,c_Message_Omsg_OMPair(X9,c_Message_Omsg_OMPair(c_Message_Omsg_OAgent(X10),c_Message_Omsg_OMPair(c_Message_Omsg_OAgent(X8),c_Message_Omsg_OCrypt(c_Public_OshrK(X10),c_Message_Omsg_OMPair(X9,c_Message_Omsg_OMPair(c_Message_Omsg_OAgent(X10),c_Message_Omsg_OAgent(X8)))))))),c_List_Oset(X12,tc_Event_Oevent),tc_Event_Oevent) | ~c_in(c_Event_Oevent_OSays(X13,X10,c_Message_Omsg_OMPair(X9,c_Message_Omsg_OCrypt(c_Public_OshrK(X10),c_Message_Omsg_OMPair(X9,c_Message_Omsg_OKey(X11))))),c_List_Oset(X12,tc_Event_Oevent),tc_Event_Oevent) | ~c_in(X12,c_OtwayRees_Ootway,tc_List_Olist(tc_Event_Oevent)), % 0.14/0.36 inference(strict_predicate_extension, [assumptions([a9, a10, a11])], [c9, c11])). % 0.14/0.36 % 0.14/0.36 cnf(c14, axiom, % 0.14/0.36 ~c_in(v_A,c_Event_Obad,tc_Message_Oagent)). % 0.14/0.36 cnf(a12, assumption, % 0.14/0.36 X10 = v_A). % 0.14/0.36 cnf(a13, assumption, % 0.14/0.36 c_Event_Obad = c_Event_Obad). % 0.14/0.36 cnf(a14, assumption, % 0.14/0.36 tc_Message_Oagent = tc_Message_Oagent). % 0.14/0.36 cnf(c15, plain, % 0.14/0.36 ~c_in(c_Event_Oevent_OSays(X10,X8,c_Message_Omsg_OMPair(X9,c_Message_Omsg_OMPair(c_Message_Omsg_OAgent(X10),c_Message_Omsg_OMPair(c_Message_Omsg_OAgent(X8),c_Message_Omsg_OCrypt(c_Public_OshrK(X10),c_Message_Omsg_OMPair(X9,c_Message_Omsg_OMPair(c_Message_Omsg_OAgent(X10),c_Message_Omsg_OAgent(X8)))))))),c_List_Oset(X12,tc_Event_Oevent),tc_Event_Oevent) | ~c_in(c_Event_Oevent_OSays(X13,X10,c_Message_Omsg_OMPair(X9,c_Message_Omsg_OCrypt(c_Public_OshrK(X10),c_Message_Omsg_OMPair(X9,c_Message_Omsg_OKey(X11))))),c_List_Oset(X12,tc_Event_Oevent),tc_Event_Oevent) | ~c_in(X12,c_OtwayRees_Ootway,tc_List_Olist(tc_Event_Oevent)), % 0.14/0.36 inference(strict_predicate_extension, [assumptions([a12, a13, a14])], [c13, c14])). % 0.14/0.36 cnf(c16, plain, % 0.14/0.36 $false, % 0.14/0.36 inference(strict_predicate_extension, [assumptions([a12, a13, a14])], [c13, c14])). % 0.14/0.36 % 0.14/0.36 cnf(c17, axiom, % 0.14/0.36 c_in(c_Event_Oevent_OSays(v_A,v_B,c_Message_Omsg_OMPair(v_NA,c_Message_Omsg_OMPair(c_Message_Omsg_OAgent(v_A),c_Message_Omsg_OMPair(c_Message_Omsg_OAgent(v_B),c_Message_Omsg_OCrypt(c_Public_OshrK(v_A),c_Message_Omsg_OMPair(v_NA,c_Message_Omsg_OMPair(c_Message_Omsg_OAgent(v_A),c_Message_Omsg_OAgent(v_B)))))))),c_List_Oset(v_evs,tc_Event_Oevent),tc_Event_Oevent)). % 0.14/0.36 cnf(a15, assumption, % 0.14/0.36 c_Event_Oevent_OSays(X10,X8,c_Message_Omsg_OMPair(X9,c_Message_Omsg_OMPair(c_Message_Omsg_OAgent(X10),c_Message_Omsg_OMPair(c_Message_Omsg_OAgent(X8),c_Message_Omsg_OCrypt(c_Public_OshrK(X10),c_Message_Omsg_OMPair(X9,c_Message_Omsg_OMPair(c_Message_Omsg_OAgent(X10),c_Message_Omsg_OAgent(X8)))))))) = c_Event_Oevent_OSays(v_A,v_B,c_Message_Omsg_OMPair(v_NA,c_Message_Omsg_OMPair(c_Message_Omsg_OAgent(v_A),c_Message_Omsg_OMPair(c_Message_Omsg_OAgent(v_B),c_Message_Omsg_OCrypt(c_Public_OshrK(v_A),c_Message_Omsg_OMPair(v_NA,c_Message_Omsg_OMPair(c_Message_Omsg_OAgent(v_A),c_Message_Omsg_OAgent(v_B))))))))). % 0.14/0.36 cnf(a16, assumption, % 0.14/0.36 c_List_Oset(X12,tc_Event_Oevent) = c_List_Oset(v_evs,tc_Event_Oevent)). % 0.14/0.36 cnf(a17, assumption, % 0.14/0.36 tc_Event_Oevent = tc_Event_Oevent). % 0.14/0.36 cnf(c18, plain, % 0.14/0.36 ~c_in(c_Event_Oevent_OSays(X13,X10,c_Message_Omsg_OMPair(X9,c_Message_Omsg_OCrypt(c_Public_OshrK(X10),c_Message_Omsg_OMPair(X9,c_Message_Omsg_OKey(X11))))),c_List_Oset(X12,tc_Event_Oevent),tc_Event_Oevent) | ~c_in(X12,c_OtwayRees_Ootway,tc_List_Olist(tc_Event_Oevent)), % 0.14/0.36 inference(strict_predicate_extension, [assumptions([a15, a16, a17])], [c15, c17])). % 0.14/0.36 cnf(c19, plain, % 0.14/0.36 $false, % 0.14/0.36 inference(strict_predicate_extension, [assumptions([a15, a16, a17])], [c15, c17])). % 0.14/0.36 % 0.14/0.36 cnf(c20, axiom, % 0.14/0.36 c_in(c_Event_Oevent_OSays(v_B_H,v_A,c_Message_Omsg_OMPair(v_NA,c_Message_Omsg_OCrypt(c_Public_OshrK(v_A),c_Message_Omsg_OMPair(v_NA,c_Message_Omsg_OKey(v_K))))),c_List_Oset(v_evs,tc_Event_Oevent),tc_Event_Oevent)). % 0.14/0.36 cnf(a18, assumption, % 0.14/0.36 c_Event_Oevent_OSays(X13,X10,c_Message_Omsg_OMPair(X9,c_Message_Omsg_OCrypt(c_Public_OshrK(X10),c_Message_Omsg_OMPair(X9,c_Message_Omsg_OKey(X11))))) = c_Event_Oevent_OSays(v_B_H,v_A,c_Message_Omsg_OMPair(v_NA,c_Message_Omsg_OCrypt(c_Public_OshrK(v_A),c_Message_Omsg_OMPair(v_NA,c_Message_Omsg_OKey(v_K)))))). % 0.14/0.36 cnf(a19, assumption, % 0.14/0.36 c_List_Oset(X12,tc_Event_Oevent) = c_List_Oset(v_evs,tc_Event_Oevent)). % 0.14/0.36 cnf(a20, assumption, % 0.14/0.36 tc_Event_Oevent = tc_Event_Oevent). % 0.14/0.36 cnf(c21, plain, % 0.14/0.36 ~c_in(X12,c_OtwayRees_Ootway,tc_List_Olist(tc_Event_Oevent)), % 0.14/0.36 inference(strict_predicate_extension, [assumptions([a18, a19, a20])], [c18, c20])). % 0.14/0.36 cnf(c22, plain, % 0.14/0.36 $false, % 0.14/0.36 inference(strict_predicate_extension, [assumptions([a18, a19, a20])], [c18, c20])). % 0.14/0.36 % 0.14/0.36 cnf(c23, plain, % 0.14/0.36 c_in(v_evs,c_OtwayRees_Ootway,tc_List_Olist(tc_Event_Oevent))). % 0.14/0.36 cnf(a21, assumption, % 0.14/0.36 X12 = v_evs). % 0.14/0.36 cnf(a22, assumption, % 0.14/0.36 c_OtwayRees_Ootway = c_OtwayRees_Ootway). % 0.14/0.36 cnf(a23, assumption, % 0.14/0.36 tc_List_Olist(tc_Event_Oevent) = tc_List_Olist(tc_Event_Oevent)). % 0.14/0.36 cnf(c24, plain, % 0.14/0.36 $false, % 0.14/0.36 inference(predicate_reduction, [assumptions([a21, a22, a23])], [c21, c23])). % 0.14/0.36 % 0.14/0.36 cnf(c25, plain, % 0.14/0.36 $false, % 0.14/0.36 inference(constraint_solving, [ % 0.14/0.36 bind(X0, v_B), % 0.14/0.36 bind(X1, v_NA), % 0.14/0.36 bind(X2, v_A), % 0.14/0.36 bind(X3, v_sko__u8o(X10,X8,X11,X9,X12)), % 0.14/0.36 bind(X4, v_evs), % 0.14/0.36 bind(X5, v_K), % 0.14/0.36 bind(X6, v_sko__vEb(X2,X0,X1,X3,X4)), % 0.14/0.36 bind(X7, v_sko__u8o(X10,X8,X11,X9,X12)), % 0.14/0.36 bind(X8, v_B), % 0.14/0.36 bind(X9, v_NA), % 0.14/0.36 bind(X10, v_A), % 0.14/0.36 bind(X11, v_K), % 0.14/0.36 bind(X12, v_evs), % 0.14/0.36 bind(X13, v_B_H) % 0.14/0.36 ], % 0.14/0.36 [a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23])). % 0.14/0.36 % 0.14/0.36 % SZS output end IncompleteProof %------------------------------------------------------------------------------