/usr/share/hyphy/ChartAddIns/Contigency Table is in hyphy-common 2.2.6+dfsg-3build3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
| 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 | if (NON_EMPTY_SELECTION)
{
	data_rows  	 = Columns 	(SELECTED_CHART_ROWS);
	if (data_rows % 2 == 0)
	{
		temp = -1;
		data_columns = -1;
		
		for (count = 0; count<data_rows; count = count+1)
		{
			temp2 = SELECTED_CHART_COLS[count];
			if (temp<0)
			{
				temp = temp2;
			}
			else
			{
				if (temp!=temp2)
				{
					if (data_columns<0)
					{
						data_columns = temp2;
					}
					else
					{
						if (temp2!=data_columns)
						{
							break;
						}
					}
				}
			}
		}
		
		if ((count == data_rows)&&(data_columns>=0)&&(temp>=0))
		{
			for (count = 0; count < data_rows; count = count+2)
			{
				if (SELECTED_CHART_ROWS[count]!=SELECTED_CHART_ROWS[count+1])
				{
					break;
				}
			}
		
			if (count==data_rows)
			{
			
				SELECTED_CHART_ROWS = {2,data_rows/2};
				for (count = 0; count < data_rows; count = count+2)
				{
					SELECTED_CHART_ROWS[0][count/2]=SELECTED_CHART_DATA[count];
					SELECTED_CHART_ROWS[1][count/2]=SELECTED_CHART_DATA[count+1];
				}
				SELECTED_CHART_DATA = SELECTED_CHART_ROWS;
				data_rows = data_rows/2;
				
				HASH_TABLE_1 = {};
				HASH_TABLE_2 = {};
				
				for (count = 0; count < data_rows; count = count+1)
				{
					value = SELECTED_CHART_ROWS[0][count];
					if (HASH_TABLE_1[value]==0)
					{
						HASH_TABLE_1[value] = Abs(HASH_TABLE_1)+1;
					}
					value = SELECTED_CHART_ROWS[1][count];
					if (HASH_TABLE_2[value]==0)
					{
						HASH_TABLE_2[value] = Abs(HASH_TABLE_2)+1;
					}
				}
				
				
				
				C_TABLE = {Abs(HASH_TABLE_1),Abs(HASH_TABLE_2)};
				
				for (count = 0; count < data_rows; count = count+1)
				{
					value = SELECTED_CHART_ROWS[0][count];
					value = HASH_TABLE_1[value]-1;
					value2 = SELECTED_CHART_ROWS[1][count];
					value2 = HASH_TABLE_2[value2]-1;
					C_TABLE[value][value2] = C_TABLE[value][value2] + 1;
				}
				
			    data_rows = Abs(HASH_TABLE_1);
				data_cols = Abs(HASH_TABLE_2);
				labels = {1,data_cols+1};
				
				keys = Rows (HASH_TABLE_2);
				
				for (count = 0; count < data_cols; count = count+1)
				{
					labels[count] = "" + keys[count];
				}
				keys = Rows (HASH_TABLE_1);
				firstString = "Categories";
				
				for (count = 0; count < data_rows; count = count+1)
				{
					firstString = firstString + ";"+ keys[count];
				}
				
				labels [data_cols] = firstString;
				
				fprintf (stdout, "\nFisher's exact p:", CChi2(C_TABLE,0), "\n");
				OpenWindow (CHARTWINDOW,{{"Contigency Table"}
								   {"labels"},
								   {"C_TABLE"},
								   {"None"},
								   {""},
								   {""},
								   {"Index"},
								   {""},
								   {"Value"},
								   {"0"}
								   {""}
								   {"-1;-1"}
								   {"10;1.309;0.785398"}
								   {"Times:12:0;Times:10:0;Times:12:2"}
								   {"0;0;16777215;1644825;0;0;6579300;11842740;13158600;14474460;0;3947580;4294967295;15670812;6845928;16771158;2984993;9199669;7018159;1460610;16748822;11184810;14173291"}
								   {"16"}
								   },
								   "SCREEN_WIDTH-60;SCREEN_HEIGHT-50;30;50");
								   
				return 0;
			}
		}
	}
	fprintf (stdout, "Please select two columns with the observations for two variables.\n");
}
else
{
	NON_EMPTY_SELECTION = -1;
}
 |