479:(a draft in progress, but I think very relevant), "Multiple source code implementations are not appropriate unless they contrast specific aspects of the code and that contrast is important to the encyclopedic content of the article. If possible, accentuate differences by providing the alternate implementation in the same language as the original." The article had three implementations, not very different; I kept the most compact of them (the Python), modified the most different of them to be even more different (the C++, which uses numeric arguments rather than strings, and which I modified to take time proportional to the number of differing bits rather than the total bitlength of the arguments to further differentiate it from the Python), and removed the third example (Javascript) which I think does not add anything vis-a-vis the other two: it is not significantly different algorithmically from the Python, and its added length relative to the Python has more to do with Javascript programming than anything relevant to Hamming distance. For reference, here is the removed code:
151:
74:
53:
22:
428:
and functions with that property are often called distances. Second, the difference of A and B is a quantity that, when added back to B, gives A again; that is, it is inverse to addition. Hamming distance doesn't have that property, so it doesn't make sense to call it a difference. One function that
1473:
Hamming distance between two strings of equal length is the number of positions at which the corresponding symbols are different. In other words, it measures the minimum number of substitutions required to change one string into the other, or the minimum number of errors that could have transformed
1468:
Hamming distance between two strings of equal length is the number of positions at which the corresponding symbols are different. In other words, it measures the minimum number of substitutions required to change one string into the other, or the minimum number of errors that could have transformed
1408:
That algorithm is suitable for quantities representable in machine arithmetic values (int, long, or long long). It is very standard to assume in algorithm analysis that single bitwise operations on machine words take a single unit of time. This is in the RAM model of computing, which matches pretty
1258:
In the article currently: "For a fixed length n, the
Hamming distance is a metric on the vector space of the words of length n (also known as a Hamming space), as it fulfills the conditions of non-negativity, identity of indiscernibles and symmetry, and it can be shown by complete induction that it
635:
Not only do we have
Hamming distance 1 equivalent to single rook move, but more generally, Hamming distance measures the number of rook moves required. This seems like a good intuitive connection, so I made the change. I didn't explicitly mention that it remains true in more than two dimensions,
482:
function hamdist(s1, s2) { // We alert user if the two strings differ in length. if (s1.length != s2.length) { alert("Both sequence must be of the same length!"); return -1; } var distance = 0; // zero = no difference between two strings. // Match the two strings,
1238:
The hamming distance is more general than just string difference calculations. It can be thought of more generally as the number of differences of some attribute between two objects. This allows for the string distance currently shown as well as distances between nodes as shown in the figures. I
1319:
The article currently states that the running time of the C function hamming_distance is proportional to the
Hamming distance of its inputs rather than the number of bits in the inputs—in other words, proportional to the output, dist. This appears to be incorrect. Unless the /= and :
172:
656:, graphs that can be labeled by bitvectors so that graph distance equals Hamming distance, and with that labeling the 1-ball of a point is its von Neumann neighborhood. I suspect it would be more confusing than helpful to say that in the article, though. —
516:
Someone added a C# implementation, and incorrectly copied its running time from the C implementation; I corrected this (and also clarified the Python description). I question whether we even want this third example in a different language, though.
1469:
one string into the other. In a more general context, the
Hamming distance is one of several string metrics for measuring the edit distance between two sequences. It is named after the American mathematician Richard Hamming. Hamming distance
604:-- for large maps in N binary variables (N = 6 variables to get a map the size of a chessboard), those N "neighboring" points may appear to be quite far away (in Euclidean distance) -- is there a name for this kind of neighborhood?
1474:
one string into the other. In a more general context, the
Hamming distance is one of several string metrics for measuring the edit distance between two sequences. It is named after the American mathematician Richard Hamming.
476:
651:
I think your recent edits are definitely an improvement, but there is a real sense in which the sentence at the top of this talk section about the von
Neumann neighborhood is correct. Namely, grid graphs are examples of
822:
Google lists 400K hits for "Hamming distance", and 4K hits for "Humming distance", about half of which are obvious typos or OCR errors. There are only 1K hits for "Hemming distance", which all seem to be errors.
818:
The phrase appears in print fairly often, but mostly seems to be in translated far-east work, for example "Manufacturing
Challenges in Electronic Packaging", edited by Yung-Cheng Lee, W.T. Chen, page 249.
483:
character by character. If they are NOT // identical, increment distance by 1. for(var i = 0; i < s1.length; i++) if (s1.charAt(i) != s2.charAt(i)) distance++; return distance; }
1300:
Doesn't the same problem apply to the phrase in the beginning of the article: "block codes, in which the equal-length strings are vectors "? It seems to me that the word "vector" is misused here.
1263:
satisfying the requirements of being a metric gives you a metric space, but not necessarily a vector space (after all
Levenshtein distance is also a metric - satisfies triangle inequality etc).
1270:
If this is correct it should be stated explicitly; right now it sounds like
Hamming distance always gives you a vector space and that this is merely because it fulfills the metric conditions.
196:
1363:
336:
1266:
Hamming distance gives you a vector space only for binary strings; otherwise the
Hamming space is a metric space with the Hamming distance as a metric (but surely not a vector space?)
636:
because that would seem to require defining the rook as a piece that changes exactly one dimension at a time, and ultimately this is just a restatement of Hamming distance anyway.
253:
191:
1527:
114:
124:
1389:
1532:
1522:
591:
If we represent the points with a 2 symbol string ("a1", "h7", etc.), then points on a chessboard with a Hamming distance of 1 from that point represent possible
1259:
satisfies the triangle inequality as well. ". I'm not confident enough in my understanding to alter this but I believe that it's not quite right. Specifically:
600:
If we represent the points with a bit string, then points on a chessboard with a Hamming distance of 1 from that point represent various 2x1 "boxes" used in a
1409:
well what actual computers do. What model of computing are you using that can run C code and yet takes a non-constant amount of time for an equality test? —
1239:
suggest that the page be made more general with a listing of applications to include the string differences and graph applications, along with some others.
90:
298:
272:
815:
I've found quite a few references to "Humming distance", and I'm not sure if these are just typos or some subtle variation on Hamming distance.
137:
81:
58:
361:
1478:
463:
532:
I have removed it, as I don't think it adds anything useful — for numeric input, the algorithm of the C implementation is always better. —
749:
415:
244:
1271:
827:
622:
225:
1218:
The Hamming distance between two lists of things is the number of things that are different. The things do not have to be bits. —
723:
317:
677:
712:
424:
I don't know the historical reasons, but I can think of a couple of plausible explanations. First, Hamming distance forms a
1285:
You're right, it's not in general a vector space (e.g. not for alphabets of size six). I changed "vector space" to "set". —
1444:
587:
but that begs the question: What are the points on a chessboard with a Hamming distance of 1 from some particular point?
282:
163:
33:
795:
A nonzero value. And this article is not the place to discuss the basic syntax of a widely used programming language. —
292:
206:
676:
I've removed the new section on error detection. Firstly, it is unsourced; it should at the very least refer to the
1324:
680:
article. Secondly, it confuses the general concept of Hamming distances with the more specific concept of the the
327:
89:
related articles on Knowledge. If you would like to participate, please visit the project page, where you can join
708:
354:
1414:
1290:
1223:
800:
661:
617:-- seem like they might give yet another set of points with a Hamming distance of 1 from some particular point.
579:
558:
537:
1482:
459:
21:
753:
684:
of an error-detecting code. Thirdly, it is incorrect; an error-detecting code with minimal Hamming distance
411:
1275:
831:
455:
1244:
626:
407:
263:
39:
1432:
1398:
1394:
745:
727:
506:
500:
451:
430:
425:
403:
637:
518:
1410:
1286:
1240:
1219:
796:
785:
657:
641:
533:
522:
487:
434:
1457:
496:
1504:
1440:
1305:
566:
That seems incorrect to me. Would it be best to simply delete this sentence from the article?
399:
Why the difference between the bits called as "Hamming distance" and not "Hamming difference"
182:
1321:
operators are assumed to require 0 time, the running time would appear to be proportional to
1368:
997:
609:
Other ways of representing points, such as the bit string representing the distance along a
234:
86:
826:
My operating assumption is that "Humming distance" is just a typo for "Hamming distance".
614:
781:
557:
On a grid (such as a chessboard), the points at a Hamming distance of 1 constitute the
308:
150:
173:
Requested articles/Applied arts and sciences/Computer science, computing, and Internet
1516:
1453:
621:
Do any of these neighborhoods really help this article explain "Hamming distance"? --
610:
592:
495:
I also note that the C implementation is buggy. The numbers should be unsigned ints.
1500:
1436:
1301:
653:
601:
575:
1209:
448:
What about the hamming distance between two points in a 2-D graph for example?
972:
But that simply tells us how many characters are different (that is, how many
1429:
This article would benefit from a definition section with proper references.
981:
215:
73:
52:
1508:
1486:
1461:
1418:
1402:
1309:
1294:
1279:
1248:
1227:
1212:
835:
804:
789:
757:
731:
716:
665:
645:
630:
541:
526:
510:
490:
437:
477:
Knowledge:WikiProject Computer science/Manual of style (computer science)
429:
is called a difference and is closely related to Hamming distance is the
996:
is 14; the true distance is 37. Therefore I am replacing the code in
1496:
There is no mention of "relative Hamming Distance", defined as
980:
are different. I discovered this discrepancy as I was solving
291:
Find pictures for the biographies of computer scientists (see
15:
1026:#Return the Hamming distance between equal-length sequences
871:#Return the Hamming distance between equal-length sequences
1371:
1327:
722:
I've added a referenced version. Your math is wrong.
85:, a collaborative effort to improve the coverage of
1383:
1357:
574:On a grid (such as a chessboard), the points at a
197:Computer science articles needing expert attention
595:single-move destinations of a rook on that point.
988:function says that the Hamming distance between
742:The link for original Hamming article is dead.
768:I'm 10 years out of practice with C. What does
1358:{\displaystyle \lfloor \ln(x\oplus y)\rfloor }
337:WikiProject Computer science/Unreferenced BLPs
8:
1352:
1328:
1068:"Undefined for sequences of unequal length"
913:"Undefined for sequences of unequal length"
254:Computer science articles without infoboxes
192:Computer science articles needing attention
19:
1430:
158:Here are some tasks awaiting attention:
132:
47:
1528:High-importance Computer science articles
1370:
1326:
613:covering the chess board -- as used in a
780:? May want to clarify in the article. --
49:
1254:Metric space rather than vector space?
99:Knowledge:WikiProject Computer science
1533:WikiProject Computer science articles
1523:Start-Class Computer science articles
102:Template:WikiProject Computer science
7:
1452:Done (section and one ref, anyway).
845:The current Python example code is:
79:This article is within the scope of
38:It is of interest to the following
273:Timeline of computing 2020–present
14:
299:Computing articles needing images
772:check for? A non-zero value for
149:
72:
51:
20:
119:This article has been rated as
1349:
1337:
976:are difference), not how many
805:05:14, 23 September 2013 (UTC)
790:22:28, 22 September 2013 (UTC)
678:Error detection and correction
1:
1487:00:48, 16 February 2022 (UTC)
836:05:11, 10 December 2013 (UTC)
631:01:39, 30 December 2009 (UTC)
353:Tag all relevant articles in
93:and see a list of open tasks.
1228:20:40, 15 October 2014 (UTC)
1213:20:35, 15 October 2014 (UTC)
1208:and I welcome improvements.
841:correction to Python example
569:I temporarily fixed this to
362:WikiProject Computer science
138:WikiProject Computer science
82:WikiProject Computer science
1310:19:55, 18 August 2022 (UTC)
1295:06:10, 5 October 2015 (UTC)
1280:05:35, 5 October 2015 (UTC)
776:? A non-negative value for
438:04:53, 5 January 2007 (UTC)
293:List of computer scientists
1549:
1419:03:40, 25 March 2019 (UTC)
1403:22:44, 24 March 2019 (UTC)
717:15:05, 21 March 2011 (UTC)
691:can reliably detect up to
511:03:06, 5 August 2008 (UTC)
125:project's importance scale
1509:03:54, 9 April 2024 (UTC)
1462:05:03, 13 June 2020 (UTC)
1249:16:24, 7 April 2015 (UTC)
982:a cryptographic challenge
666:20:15, 21 July 2013 (UTC)
646:19:48, 21 July 2013 (UTC)
552:The article once claimed
542:00:44, 20 July 2013 (UTC)
527:00:09, 20 July 2013 (UTC)
355:Category:Computer science
131:
118:
105:Computer science articles
67:
46:
1002:
847:
758:12:07, 1 June 2011 (UTC)
682:minimal Hamming distance
580:von Neumann neighborhood
559:von Neumann neighborhood
491:06:46, 8 June 2007 (UTC)
357:and sub-categories with
1384:{\displaystyle x\neq y}
732:02:46, 2 May 2015 (UTC)
395:Distance vs. difference
1385:
1359:
318:Computer science stubs
28:This article is rated
1386:
1360:
509:comment was added at
454:comment was added by
1369:
1325:
1210:Sumana Harihareswara
578:of 1 constitute the
431:symmetric difference
136:Things you can help
811:"Humming" Distance?
699:errors and correct
615:map of the internet
1381:
1355:
34:content assessment
1498:HD(a, b) / length
1477:Hamming distance
1448:
1435:comment added by
748:comment added by
513:
467:
420:
406:comment added by
392:
391:
388:
387:
384:
383:
380:
379:
376:
375:
1540:
1499:
1390:
1388:
1387:
1382:
1364:
1362:
1361:
1356:
1204:
1201:
1198:
1195:
1192:
1189:
1186:
1183:
1180:
1177:
1174:
1171:
1168:
1165:
1162:
1159:
1156:
1153:
1150:
1147:
1144:
1141:
1138:
1135:
1132:
1129:
1126:
1123:
1120:
1117:
1114:
1111:
1108:
1105:
1102:
1099:
1096:
1093:
1090:
1087:
1084:
1081:
1078:
1075:
1072:
1069:
1066:
1063:
1060:
1057:
1054:
1051:
1048:
1045:
1042:
1039:
1036:
1033:
1030:
1027:
1024:
1021:
1018:
1015:
1012:
1009:
1008:hamming_distance
1006:
998:Hamming distance
995:
991:
987:
986:hamming_distance
968:
965:
962:
959:
956:
953:
950:
947:
944:
941:
938:
935:
932:
929:
926:
923:
920:
917:
914:
911:
908:
905:
902:
899:
896:
893:
890:
887:
884:
881:
878:
875:
872:
869:
866:
863:
860:
857:
854:
853:hamming_distance
851:
760:
504:
449:
419:
400:
366:
360:
235:Computer science
164:Article requests
153:
146:
145:
133:
107:
106:
103:
100:
97:
96:Computer science
87:Computer science
76:
69:
68:
63:
59:Computer science
55:
48:
31:
25:
24:
16:
1548:
1547:
1543:
1542:
1541:
1539:
1538:
1537:
1513:
1512:
1497:
1494:
1471:
1427:
1395:P. N. Hilfinger
1367:
1366:
1323:
1322:
1317:
1256:
1236:
1206:
1205:
1202:
1199:
1196:
1193:
1190:
1187:
1184:
1181:
1178:
1175:
1172:
1169:
1166:
1163:
1160:
1157:
1154:
1151:
1148:
1145:
1142:
1139:
1136:
1133:
1130:
1127:
1124:
1121:
1118:
1115:
1112:
1109:
1106:
1103:
1100:
1097:
1094:
1091:
1088:
1085:
1082:
1079:
1076:
1073:
1070:
1067:
1064:
1061:
1058:
1055:
1052:
1049:
1046:
1043:
1040:
1037:
1034:
1031:
1028:
1025:
1022:
1019:
1016:
1013:
1010:
1007:
1004:
993:
989:
985:
970:
969:
966:
963:
960:
957:
954:
951:
948:
945:
942:
939:
936:
933:
930:
927:
924:
921:
918:
915:
912:
909:
906:
903:
900:
897:
894:
891:
888:
885:
882:
879:
876:
873:
870:
867:
864:
861:
858:
855:
852:
849:
843:
813:
766:
743:
740:
704:
696:
689:
674:
672:Error detection
550:
484:
473:
450:—The preceding
446:
401:
397:
372:
369:
364:
358:
346:Project-related
341:
322:
303:
277:
258:
239:
220:
201:
177:
121:High-importance
104:
101:
98:
95:
94:
62:High‑importance
61:
32:on Knowledge's
29:
12:
11:
5:
1546:
1544:
1536:
1535:
1530:
1525:
1515:
1514:
1493:
1490:
1479:223.186.35.189
1470:
1466:
1465:
1464:
1426:
1423:
1422:
1421:
1411:David Eppstein
1380:
1377:
1374:
1354:
1351:
1348:
1345:
1342:
1339:
1336:
1333:
1330:
1316:
1313:
1298:
1297:
1287:David Eppstein
1268:
1267:
1264:
1255:
1252:
1235:
1232:
1231:
1230:
1220:David Eppstein
1003:
994:wokka wokka!!!
990:this is a test
848:
842:
839:
812:
809:
808:
807:
797:David Eppstein
765:
762:
739:
736:
735:
734:
702:
694:
687:
673:
670:
669:
668:
658:David Eppstein
619:
618:
606:
605:
597:
596:
585:
584:
582:of that point.
564:
563:
561:of that point.
549:
546:
545:
544:
534:David Eppstein
488:David Eppstein
481:
472:
469:
456:128.200.69.104
445:
442:
441:
440:
435:David Eppstein
396:
393:
390:
389:
386:
385:
382:
381:
378:
377:
374:
373:
371:
370:
368:
367:
350:
342:
340:
339:
333:
323:
321:
320:
314:
304:
302:
301:
296:
288:
278:
276:
275:
269:
259:
257:
256:
250:
240:
238:
237:
231:
221:
219:
218:
212:
202:
200:
199:
194:
188:
178:
176:
175:
169:
157:
155:
154:
142:
141:
129:
128:
117:
111:
110:
108:
91:the discussion
77:
65:
64:
56:
44:
43:
37:
26:
13:
10:
9:
6:
4:
3:
2:
1545:
1534:
1531:
1529:
1526:
1524:
1521:
1520:
1518:
1511:
1510:
1506:
1502:
1492:Normalized HD
1491:
1489:
1488:
1484:
1480:
1475:
1467:
1463:
1459:
1455:
1451:
1450:
1449:
1446:
1442:
1438:
1434:
1424:
1420:
1416:
1412:
1407:
1406:
1405:
1404:
1400:
1396:
1392:
1378:
1375:
1372:
1346:
1343:
1340:
1334:
1331:
1314:
1312:
1311:
1307:
1303:
1296:
1292:
1288:
1284:
1283:
1282:
1281:
1277:
1273:
1265:
1262:
1261:
1260:
1253:
1251:
1250:
1246:
1242:
1233:
1229:
1225:
1221:
1217:
1216:
1215:
1214:
1211:
1001:
999:
983:
979:
975:
846:
840:
838:
837:
833:
829:
824:
820:
816:
810:
806:
802:
798:
794:
793:
792:
791:
787:
783:
779:
775:
771:
763:
761:
759:
755:
751:
750:189.35.30.138
747:
737:
733:
729:
725:
721:
720:
719:
718:
714:
710:
706:
698:
690:
683:
679:
671:
667:
663:
659:
655:
654:partial cubes
650:
649:
648:
647:
643:
639:
633:
632:
628:
624:
616:
612:
611:Hilbert curve
608:
607:
603:
599:
598:
594:
590:
589:
588:
583:
581:
577:
572:
571:
570:
567:
562:
560:
555:
554:
553:
547:
543:
539:
535:
531:
530:
529:
528:
524:
520:
514:
512:
508:
502:
498:
497:Dr Tom Conway
493:
492:
489:
480:
478:
470:
468:
465:
461:
457:
453:
443:
439:
436:
432:
427:
423:
422:
421:
417:
413:
409:
408:163.152.45.51
405:
394:
363:
356:
352:
351:
349:
347:
343:
338:
335:
334:
332:
330:
329:
324:
319:
316:
315:
313:
311:
310:
305:
300:
297:
294:
290:
289:
287:
285:
284:
279:
274:
271:
270:
268:
266:
265:
260:
255:
252:
251:
249:
247:
246:
241:
236:
233:
232:
230:
228:
227:
222:
217:
214:
213:
211:
209:
208:
203:
198:
195:
193:
190:
189:
187:
185:
184:
179:
174:
171:
170:
168:
166:
165:
160:
159:
156:
152:
148:
147:
144:
143:
139:
135:
134:
130:
126:
122:
116:
113:
112:
109:
92:
88:
84:
83:
78:
75:
71:
70:
66:
60:
57:
54:
50:
45:
41:
35:
27:
23:
18:
17:
1495:
1476:
1472:
1431:— Preceding
1428:
1393:
1318:
1299:
1272:118.209.2.85
1269:
1257:
1237:
1207:
984:. The given
977:
973:
971:
844:
828:137.229.78.7
825:
821:
817:
814:
777:
773:
769:
767:
744:— Preceding
741:
700:
692:
685:
681:
675:
634:
620:
602:Karnaugh map
593:rook's graph
586:
576:Lee distance
573:
568:
565:
556:
551:
515:
494:
485:
474:
447:
398:
345:
344:
328:Unreferenced
326:
325:
307:
306:
281:
280:
262:
261:
243:
242:
224:
223:
205:
204:
181:
180:
162:
161:
120:
80:
40:WikiProjects
623:68.0.124.33
505:—Preceding
471:Source code
402:—Preceding
30:Start-class
1517:Categories
1425:Definition
1315:Complexity
1234:Too Narrow
1062:ValueError
907:ValueError
770:while(val)
764:while(val)
724:5.12.85.61
1098:bytearray
1086:bytearray
782:1000Faces
738:Dead link
707:errors.
638:Joule36e5
548:on a grid
519:Joule36e5
444:2-D graph
216:Computing
1454:Dicklyon
1445:contribs
1433:unsigned
1241:Cephaeus
746:unsigned
464:contribs
452:unsigned
416:contribs
404:unsigned
264:Maintain
207:Copyedit
1501:Rudxain
1437:AVM2019
1302:Helenuh
507:undated
245:Infobox
183:Cleanup
123:on the
1200:return
1179:bytes2
1173:bytes1
1155:bytes2
1149:bytes1
1140:bytes1
1080:bytes2
1074:bytes1
1000:with:
919:return
426:metric
226:Expand
36:scale.
1188:count
1128:range
1059:raise
974:bytes
904:raise
309:Stubs
283:Photo
140:with:
1505:talk
1483:talk
1458:talk
1441:talk
1415:talk
1399:talk
1365:for
1306:talk
1291:talk
1276:talk
1245:talk
1224:talk
1203:diff
1161:diff
1110:diff
992:and
978:bits
832:talk
801:talk
786:talk
754:talk
728:talk
713:talk
662:talk
642:talk
627:talk
538:talk
523:talk
501:talk
475:Per
460:talk
412:talk
115:High
1320:-->
1194:"1"
1167:bin
1143:)):
1134:len
1119:for
1047:len
1032:len
1005:def
952:zip
946:ch2
940:ch1
937:for
934:ch2
928:ch1
922:sum
892:len
877:len
850:def
778:val
774:val
709:DES
705:- 2
703:min
697:- 1
695:min
688:min
503:)
433:. —
1519::
1507:)
1485:)
1460:)
1447:)
1443:•
1417:)
1401:)
1391:.
1376:≠
1353:⌋
1344:⊕
1335:
1332:ln
1329:⌊
1308:)
1293:)
1278:)
1247:)
1226:)
1164:+=
1152:!=
1146:if
1125:in
1104:s2
1095:),
1092:s1
1056:):
1053:s2
1044:!=
1038:s1
1029:if
1023:):
1020:s2
1014:s1
967:))
964:s2
958:s1
949:in
931:!=
901:):
898:s2
889:!=
883:s1
874:if
868:):
865:s2
859:s1
834:)
803:)
788:)
756:)
730:)
715:)
664:)
644:)
629:)
540:)
525:)
466:).
462:•
418:)
414:•
365:}}
359:{{
1503:(
1481:(
1456:(
1439:(
1413:(
1397:(
1379:y
1373:x
1350:)
1347:y
1341:x
1338:(
1304:(
1289:(
1274:(
1243:(
1222:(
1197:)
1191:(
1185:.
1182:)
1176:^
1170:(
1158::
1137:(
1131:(
1122:i
1116:0
1113:=
1107:)
1101:(
1089:(
1083:=
1077:,
1071:)
1065:(
1050:(
1041:)
1035:(
1017:,
1011:(
961:,
955:(
943:,
925:(
916:)
910:(
895:(
886:)
880:(
862:,
856:(
830:(
799:(
784:(
752:(
726:(
711:(
701:d
693:d
686:d
660:(
640:(
625:(
536:(
521:(
499:(
486:—
458:(
410:(
348::
331::
312::
295:)
286::
267::
248::
229::
210::
186::
167::
127:.
42::
Text is available under the Creative Commons Attribution-ShareAlike License. Additional terms may apply.