function [S,Co]=fullAdder16F4(A,B,Ci,faulty)
% Fault insertable Full Adder function
% StuckFaultList=[0 0 0 1 1] 0:Faultyfree 1:Faulty
% StuckFaultType=[0 0 0 1 1] 0:Stuck_0 1:Stuck_1
if (faulty==1)
%StuckFaultList1=[ 0 0 0 1 0];
%StuckFaultList2=[ 0 0 0 0 0];
%StuckFaultList3=[ 0 0 0 0 0];
%StuckFaultList4=[ 0 0 0 0 0];
%StuckFaultList5=[ 0 0 0 0 0];
%StuckFaultList6=[ 0 0 0 0 0];
%StuckFaultList7=[ 0 0 0 0 0];
%StuckFaultList8=[ 0 1 0 0 0];
%StuckFaultList9=[ 0 0 0 0 0];
%StuckFaultList10=[ 0 0 0 0 0];
%StuckFaultList11=[ 0 0 0 0 0];
%StuckFaultList12=[ 0 0 0 0 0];
%StuckFaultList13=[ 0 0 0 0 0];
%StuckFaultList14=[ 0 0 0 1 0];
%StuckFaultList15=[ 0 0 0 0 0];
%StuckFaultList16=[ 0 0 0 0 0];
%StuckFaultType1=[ 0 0 0 0 0];
%StuckFaultType2=[ 1 1 1 1 1];
%StuckFaultType3=[ 1 1 1 1 1];
%StuckFaultType4=[ 0 1 0 0 0];
%StuckFaultType5=[ 0 1 0 1 0];
%StuckFaultType6=[ 1 0 0 1 0];
%StuckFaultType7=[ 0 1 1 0 0];
%StuckFaultType8=[ 1 0 1 1 0];
%StuckFaultType9=[ 0 1 0 1 0];
%StuckFaultType10=[ 0 1 0 0 0];
%StuckFaultType11=[ 0 1 1 1 0];
%StuckFaultType12=[ 1 0 1 0 0];
%StuckFaultType13=[ 0 1 1 1 0];
%StuckFaultType14=[ 1 0 1 0 1];
%StuckFaultType15=[ 1 1 0 1 1];
%StuckFaultType16=[ 1 1 1 1 1];
StuckFaultList1=[ 0 0 0 0 0];
StuckFaultList2=[ 0 0 1 0 0];
StuckFaultList3=[ 0 0 0 0 0];
StuckFaultList4=[ 0 0 0 0 0];
StuckFaultList5=[ 0 0 0 0 0];
StuckFaultList6=[ 0 0 0 0 0];
StuckFaultList7=[ 0 0 0 0 0];
StuckFaultList8=[ 0 0 0 0 0];
StuckFaultList9=[ 0 0 1 0 0];
StuckFaultList10=[ 0 0 0 0 0];
StuckFaultList11=[ 0 0 0 0 0];
StuckFaultList12=[ 0 0 0 0 0];
StuckFaultList13=[ 0 0 0 0 0];
StuckFaultList14=[ 0 0 0 0 0];
StuckFaultList15=[ 0 0 0 0 0];
StuckFaultList16=[ 0 1 0 0 0];
StuckFaultType1=[ 0 0 0 0 0];
StuckFaultType2=[ 1 1 1 1 1];
StuckFaultType3=[ 1 1 1 1 1];
StuckFaultType4=[ 0 1 0 0 0];
StuckFaultType5=[ 0 1 0 1 0];
StuckFaultType6=[ 1 0 0 1 0];
StuckFaultType7=[ 0 1 1 0 0];
StuckFaultType8=[ 1 0 1 1 0];
StuckFaultType9=[ 0 1 0 1 0];
StuckFaultType10=[ 0 1 0 0 0];
StuckFaultType11=[ 0 1 1 1 0];
StuckFaultType12=[ 1 0 1 0 0];
StuckFaultType13=[ 0 1 1 1 0];
StuckFaultType14=[ 1 0 1 0 1];
StuckFaultType15=[ 1 1 0 1 1];
StuckFaultType16=[ 1 1 1 1 1];
else
StuckFaultList1=[ 0 0 0 0 0];
StuckFaultList2=[ 0 0 0 0 0];
StuckFaultList3=[ 0 0 0 0 0];
StuckFaultList4=[ 0 0 0 0 0];
StuckFaultList5=[ 0 0 0 0 0];
StuckFaultList6=[ 0 0 0 0 0];
StuckFaultList2=[ 0 0 0 0 0];
StuckFaultList7=[ 0 0 0 0 0];
StuckFaultList8=[ 0 0 0 0 0];
StuckFaultList9=[ 0 0 0 0 0];
StuckFaultList10=[ 0 0 0 0 0];
StuckFaultList11=[ 0 0 0 0 0];
StuckFaultList12=[ 0 0 0 0 0];
StuckFaultList13=[ 0 0 0 0 0];
StuckFaultList14=[ 0 0 0 0 0];
StuckFaultList15=[ 0 0 0 0 0];
StuckFaultList16=[ 0 0 0 0 0];
StuckFaultType1=[ 0 0 0 0 0];
StuckFaultType2=[ 0 0 0 0 0];
StuckFaultType3=[ 0 0 0 0 0];
StuckFaultType4=[ 0 0 0 0 0];
StuckFaultType5=[ 0 0 0 0 0];
StuckFaultType6=[ 0 0 0 0 0];
StuckFaultType2=[ 0 0 0 0 0];
StuckFaultType7=[ 0 0 0 0 0];
StuckFaultType8=[ 0 0 0 0 0];
StuckFaultType9=[ 0 0 0 0 0];
StuckFaultType10=[ 0 0 0 0 0];
StuckFaultType11=[ 0 0 0 0 0];
StuckFaultType12=[ 0 0 0 0 0];
StuckFaultType13=[ 0 0 0 0 0];
StuckFaultType14=[ 0 0 0 0 0];
StuckFaultType15=[ 0 0 0 0 0];
StuckFaultType16=[ 0 0 0 0 0];
end
[net1,C1]=fullAdder(A(1),B(1),Ci,StuckFaultList1,StuckFaultType1);
%net1=1;
%C1=0;
[net2,C2]=fullAdder(A(2),B(2),C1,StuckFaultList2,StuckFaultType2);
%net2=1;
%C2=0;
[net3,C3]=fullAdder(A(3),B(3),C2,StuckFaultList3,StuckFaultType3);
%net3=1;
%C3=0;
[net4,C4]=fullAdder(A(4),B(4),C3,StuckFaultList4,StuckFaultType4);
%net4=1;
%C4=0;
[net5,C5]=fullAdder(A(5),B(5),C4,StuckFaultList5,StuckFaultType5);
%net5=1;
%C5=0;
[net6,C6]=fullAdder(A(6),B(6),C5,StuckFaultList6,StuckFaultType6);
%net6=1;
%C6=0;
[net7,C7]=fullAdder(A(7),B(7),C6,StuckFaultList7,StuckFaultType7);
%net7=1;
%C7=0;
[net8,C8]=fullAdder(A(8),B(8),C7,StuckFaultList8,StuckFaultType8);
%net8=1;
%C8=0;
[net9,C9]=fullAdder(A(9),B(9),C8,StuckFaultList9,StuckFaultType9);
%net9=1;
%C9=0;
[net10,C10]=fullAdder(A(10),B(10),C9,StuckFaultList10,StuckFaultType10);
%net10=1;
%C10=0;
[net11,C11]=fullAdder(A(11),B(11),C10,StuckFaultList11,StuckFaultType11);
%net11=1;
%C11=0;
[net12,C12]=fullAdder(A(12),B(12),C11,StuckFaultList12,StuckFaultType12);
%net12=1;
%C12=0;
[net13,C13]=fullAdder(A(13),B(13),C12,StuckFaultList13,StuckFaultType13);
%net13=1;
%C13=0;
[net14,C14]=fullAdder(A(14),B(14),C13,StuckFaultList14,StuckFaultType14);
%net14=1;
%C14=0;
[net15,C15]=fullAdder(A(15),B(15),C14,StuckFaultList15,StuckFaultType15);
%net15=1;
%C15=0;
[net16,C16]=fullAdder(A(16),B(16),C15,StuckFaultList16,StuckFaultType16);
%net16=1;
%C16=0;
S=[net1 net2 net3 net4 net5 net6 net7 net8 net9 net10 net11 net12 net13 net14 net15 net16];
Co=C16;