From 2ae273a75ce029992af3d839e1369254c57c4d87 Mon Sep 17 00:00:00 2001 From: Mike Lang Date: Tue, 14 Nov 2023 00:20:26 +1100 Subject: [PATCH] bus_analyzer: Parse the final odo digit --- bus_analyzer/bus_analyzer/extract.py | 21 +++++++++++++----- .../prototypes/odo-last-digit/0.0.png | Bin 0 -> 664 bytes .../prototypes/odo-last-digit/0.125.png | Bin 0 -> 641 bytes .../prototypes/odo-last-digit/0.25.png | Bin 0 -> 639 bytes .../prototypes/odo-last-digit/0.375.png | Bin 0 -> 689 bytes .../prototypes/odo-last-digit/0.5.png | Bin 0 -> 652 bytes .../prototypes/odo-last-digit/0.625.png | Bin 0 -> 538 bytes .../prototypes/odo-last-digit/0.75.png | Bin 0 -> 427 bytes .../prototypes/odo-last-digit/0.875.png | Bin 0 -> 501 bytes .../prototypes/odo-last-digit/1.0.png | Bin 0 -> 518 bytes .../prototypes/odo-last-digit/1.125.png | Bin 0 -> 511 bytes .../prototypes/odo-last-digit/1.25.png | Bin 0 -> 501 bytes .../prototypes/odo-last-digit/1.375.png | Bin 0 -> 638 bytes .../prototypes/odo-last-digit/1.5.png | Bin 0 -> 640 bytes .../prototypes/odo-last-digit/1.625.png | Bin 0 -> 716 bytes .../prototypes/odo-last-digit/1.75.png | Bin 0 -> 753 bytes .../prototypes/odo-last-digit/1.875.png | Bin 0 -> 736 bytes .../prototypes/odo-last-digit/2.0.png | Bin 0 -> 722 bytes .../prototypes/odo-last-digit/2.125.png | Bin 0 -> 711 bytes .../prototypes/odo-last-digit/2.25.png | Bin 0 -> 728 bytes .../prototypes/odo-last-digit/2.375.png | Bin 0 -> 709 bytes .../prototypes/odo-last-digit/2.5.png | Bin 0 -> 723 bytes .../prototypes/odo-last-digit/2.625.png | Bin 0 -> 706 bytes .../prototypes/odo-last-digit/2.75.png | Bin 0 -> 707 bytes .../prototypes/odo-last-digit/2.875.png | Bin 0 -> 760 bytes .../prototypes/odo-last-digit/3.0.png | Bin 0 -> 736 bytes .../prototypes/odo-last-digit/3.125.png | Bin 0 -> 679 bytes .../prototypes/odo-last-digit/3.25.png | Bin 0 -> 772 bytes .../prototypes/odo-last-digit/3.375.png | Bin 0 -> 716 bytes .../prototypes/odo-last-digit/3.5.png | Bin 0 -> 714 bytes .../prototypes/odo-last-digit/3.625.png | Bin 0 -> 695 bytes .../prototypes/odo-last-digit/3.75.png | Bin 0 -> 677 bytes .../prototypes/odo-last-digit/3.875.png | Bin 0 -> 739 bytes .../prototypes/odo-last-digit/4.0.png | Bin 0 -> 686 bytes .../prototypes/odo-last-digit/4.125.png | Bin 0 -> 639 bytes .../prototypes/odo-last-digit/4.25.png | Bin 0 -> 677 bytes .../prototypes/odo-last-digit/4.375.png | Bin 0 -> 687 bytes .../prototypes/odo-last-digit/4.5.png | Bin 0 -> 703 bytes .../prototypes/odo-last-digit/4.625.png | Bin 0 -> 713 bytes .../prototypes/odo-last-digit/4.75.png | Bin 0 -> 710 bytes .../prototypes/odo-last-digit/4.875.png | Bin 0 -> 780 bytes .../prototypes/odo-last-digit/5.0.png | Bin 0 -> 727 bytes .../prototypes/odo-last-digit/5.125.png | Bin 0 -> 710 bytes .../prototypes/odo-last-digit/5.25.png | Bin 0 -> 723 bytes .../prototypes/odo-last-digit/5.375.png | Bin 0 -> 727 bytes .../prototypes/odo-last-digit/5.5.png | Bin 0 -> 726 bytes .../prototypes/odo-last-digit/5.625.png | Bin 0 -> 762 bytes .../prototypes/odo-last-digit/5.75.png | Bin 0 -> 720 bytes .../prototypes/odo-last-digit/5.875.png | Bin 0 -> 767 bytes .../prototypes/odo-last-digit/6.0.png | Bin 0 -> 741 bytes .../prototypes/odo-last-digit/6.125.png | Bin 0 -> 693 bytes .../prototypes/odo-last-digit/6.25.png | Bin 0 -> 721 bytes .../prototypes/odo-last-digit/6.375.png | Bin 0 -> 744 bytes .../prototypes/odo-last-digit/6.5.png | Bin 0 -> 727 bytes .../prototypes/odo-last-digit/6.625.png | Bin 0 -> 633 bytes .../prototypes/odo-last-digit/6.75.png | Bin 0 -> 612 bytes .../prototypes/odo-last-digit/6.875.png | Bin 0 -> 604 bytes .../prototypes/odo-last-digit/7.0.png | Bin 0 -> 605 bytes .../prototypes/odo-last-digit/7.125.png | Bin 0 -> 539 bytes .../prototypes/odo-last-digit/7.25.png | Bin 0 -> 569 bytes .../prototypes/odo-last-digit/7.375.png | Bin 0 -> 676 bytes .../prototypes/odo-last-digit/7.5.png | Bin 0 -> 680 bytes .../prototypes/odo-last-digit/7.625.png | Bin 0 -> 735 bytes .../prototypes/odo-last-digit/7.75.png | Bin 0 -> 690 bytes .../prototypes/odo-last-digit/7.875.png | Bin 0 -> 721 bytes .../prototypes/odo-last-digit/8.0.png | Bin 0 -> 763 bytes .../prototypes/odo-last-digit/8.125.png | Bin 0 -> 686 bytes .../prototypes/odo-last-digit/8.25.png | Bin 0 -> 757 bytes .../prototypes/odo-last-digit/8.375.png | Bin 0 -> 750 bytes .../prototypes/odo-last-digit/8.5.png | Bin 0 -> 767 bytes .../prototypes/odo-last-digit/8.625.png | Bin 0 -> 720 bytes .../prototypes/odo-last-digit/8.75.png | Bin 0 -> 709 bytes .../prototypes/odo-last-digit/8.875.png | Bin 0 -> 758 bytes .../prototypes/odo-last-digit/9.0.png | Bin 0 -> 751 bytes .../prototypes/odo-last-digit/9.125.png | Bin 0 -> 678 bytes .../prototypes/odo-last-digit/9.25.png | Bin 0 -> 739 bytes .../prototypes/odo-last-digit/9.375.png | Bin 0 -> 757 bytes .../prototypes/odo-last-digit/9.5.png | Bin 0 -> 733 bytes .../prototypes/odo-last-digit/9.625.png | Bin 0 -> 682 bytes .../prototypes/odo-last-digit/9.75.png | Bin 0 -> 661 bytes .../prototypes/odo-last-digit/9.875.png | Bin 0 -> 681 bytes 81 files changed, 15 insertions(+), 6 deletions(-) create mode 100644 bus_analyzer/prototypes/odo-last-digit/0.0.png create mode 100644 bus_analyzer/prototypes/odo-last-digit/0.125.png create mode 100644 bus_analyzer/prototypes/odo-last-digit/0.25.png create mode 100644 bus_analyzer/prototypes/odo-last-digit/0.375.png create mode 100644 bus_analyzer/prototypes/odo-last-digit/0.5.png create mode 100644 bus_analyzer/prototypes/odo-last-digit/0.625.png create mode 100644 bus_analyzer/prototypes/odo-last-digit/0.75.png create mode 100644 bus_analyzer/prototypes/odo-last-digit/0.875.png create mode 100644 bus_analyzer/prototypes/odo-last-digit/1.0.png create mode 100644 bus_analyzer/prototypes/odo-last-digit/1.125.png create mode 100644 bus_analyzer/prototypes/odo-last-digit/1.25.png create mode 100644 bus_analyzer/prototypes/odo-last-digit/1.375.png create mode 100644 bus_analyzer/prototypes/odo-last-digit/1.5.png create mode 100644 bus_analyzer/prototypes/odo-last-digit/1.625.png create mode 100644 bus_analyzer/prototypes/odo-last-digit/1.75.png create mode 100644 bus_analyzer/prototypes/odo-last-digit/1.875.png create mode 100644 bus_analyzer/prototypes/odo-last-digit/2.0.png create mode 100644 bus_analyzer/prototypes/odo-last-digit/2.125.png create mode 100644 bus_analyzer/prototypes/odo-last-digit/2.25.png create mode 100644 bus_analyzer/prototypes/odo-last-digit/2.375.png create mode 100644 bus_analyzer/prototypes/odo-last-digit/2.5.png create mode 100644 bus_analyzer/prototypes/odo-last-digit/2.625.png create mode 100644 bus_analyzer/prototypes/odo-last-digit/2.75.png create mode 100644 bus_analyzer/prototypes/odo-last-digit/2.875.png create mode 100644 bus_analyzer/prototypes/odo-last-digit/3.0.png create mode 100644 bus_analyzer/prototypes/odo-last-digit/3.125.png create mode 100644 bus_analyzer/prototypes/odo-last-digit/3.25.png create mode 100644 bus_analyzer/prototypes/odo-last-digit/3.375.png create mode 100644 bus_analyzer/prototypes/odo-last-digit/3.5.png create mode 100644 bus_analyzer/prototypes/odo-last-digit/3.625.png create mode 100644 bus_analyzer/prototypes/odo-last-digit/3.75.png create mode 100644 bus_analyzer/prototypes/odo-last-digit/3.875.png create mode 100644 bus_analyzer/prototypes/odo-last-digit/4.0.png create mode 100644 bus_analyzer/prototypes/odo-last-digit/4.125.png create mode 100644 bus_analyzer/prototypes/odo-last-digit/4.25.png create mode 100644 bus_analyzer/prototypes/odo-last-digit/4.375.png create mode 100644 bus_analyzer/prototypes/odo-last-digit/4.5.png create mode 100644 bus_analyzer/prototypes/odo-last-digit/4.625.png create mode 100644 bus_analyzer/prototypes/odo-last-digit/4.75.png create mode 100644 bus_analyzer/prototypes/odo-last-digit/4.875.png create mode 100644 bus_analyzer/prototypes/odo-last-digit/5.0.png create mode 100644 bus_analyzer/prototypes/odo-last-digit/5.125.png create mode 100644 bus_analyzer/prototypes/odo-last-digit/5.25.png create mode 100644 bus_analyzer/prototypes/odo-last-digit/5.375.png create mode 100644 bus_analyzer/prototypes/odo-last-digit/5.5.png create mode 100644 bus_analyzer/prototypes/odo-last-digit/5.625.png create mode 100644 bus_analyzer/prototypes/odo-last-digit/5.75.png create mode 100644 bus_analyzer/prototypes/odo-last-digit/5.875.png create mode 100644 bus_analyzer/prototypes/odo-last-digit/6.0.png create mode 100644 bus_analyzer/prototypes/odo-last-digit/6.125.png create mode 100644 bus_analyzer/prototypes/odo-last-digit/6.25.png create mode 100644 bus_analyzer/prototypes/odo-last-digit/6.375.png create mode 100644 bus_analyzer/prototypes/odo-last-digit/6.5.png create mode 100644 bus_analyzer/prototypes/odo-last-digit/6.625.png create mode 100644 bus_analyzer/prototypes/odo-last-digit/6.75.png create mode 100644 bus_analyzer/prototypes/odo-last-digit/6.875.png create mode 100644 bus_analyzer/prototypes/odo-last-digit/7.0.png create mode 100644 bus_analyzer/prototypes/odo-last-digit/7.125.png create mode 100644 bus_analyzer/prototypes/odo-last-digit/7.25.png create mode 100644 bus_analyzer/prototypes/odo-last-digit/7.375.png create mode 100644 bus_analyzer/prototypes/odo-last-digit/7.5.png create mode 100644 bus_analyzer/prototypes/odo-last-digit/7.625.png create mode 100644 bus_analyzer/prototypes/odo-last-digit/7.75.png create mode 100644 bus_analyzer/prototypes/odo-last-digit/7.875.png create mode 100644 bus_analyzer/prototypes/odo-last-digit/8.0.png create mode 100644 bus_analyzer/prototypes/odo-last-digit/8.125.png create mode 100644 bus_analyzer/prototypes/odo-last-digit/8.25.png create mode 100644 bus_analyzer/prototypes/odo-last-digit/8.375.png create mode 100644 bus_analyzer/prototypes/odo-last-digit/8.5.png create mode 100644 bus_analyzer/prototypes/odo-last-digit/8.625.png create mode 100644 bus_analyzer/prototypes/odo-last-digit/8.75.png create mode 100644 bus_analyzer/prototypes/odo-last-digit/8.875.png create mode 100644 bus_analyzer/prototypes/odo-last-digit/9.0.png create mode 100644 bus_analyzer/prototypes/odo-last-digit/9.125.png create mode 100644 bus_analyzer/prototypes/odo-last-digit/9.25.png create mode 100644 bus_analyzer/prototypes/odo-last-digit/9.375.png create mode 100644 bus_analyzer/prototypes/odo-last-digit/9.5.png create mode 100644 bus_analyzer/prototypes/odo-last-digit/9.625.png create mode 100644 bus_analyzer/prototypes/odo-last-digit/9.75.png create mode 100644 bus_analyzer/prototypes/odo-last-digit/9.875.png diff --git a/bus_analyzer/bus_analyzer/extract.py b/bus_analyzer/bus_analyzer/extract.py index 971caac..d719b1c 100644 --- a/bus_analyzer/bus_analyzer/extract.py +++ b/bus_analyzer/bus_analyzer/extract.py @@ -110,9 +110,14 @@ def recognize_digit(prototypes, image): all_scores is for debugging. If the most likely detection is NOT a number, None is returned instead. """ + def maybeFloat(n): + try: + return float(n) + except ValueError: + return None scores = sorted([ - (compare_images(prototype, image), int(n) if n.isdigit() else None) - for n, prototype in prototypes["odo-digits"].items() + (compare_images(prototype, image), maybeFloat(n)) + for n, prototype in prototypes.items() ], reverse=True) best_score, number = scores[0] runner_up_score, _ = scores[1] @@ -148,7 +153,7 @@ def read_digit(digit, prototypes_path="./prototypes", verbose=False): """For debugging. Compares an extracted digit image to each prototype and prints scores.""" prototypes = load_prototypes(prototypes_path) digit = Image.open(digit) - guess, score, all_scores = recognize_digit(prototypes, digit) + guess, score, all_scores = recognize_digit(prototypes["odo-digits"], digit) print("Digit = {} with score {}".format(guess, score)) if verbose: all_scores.sort(key=lambda x: x[1]) @@ -162,13 +167,17 @@ def recognize_odometer(prototypes, frame): digits is for debugging. """ odo = extract_odo(frame) - digits = extract_digits(odo, include_last=False) - digits = [recognize_digit(prototypes, digit) for digit in digits] + digits = extract_digits(odo, include_last=True) + digits = [ + recognize_digit(prototypes["odo-digits"], digit) for digit in digits[:-1] + ] + [ + recognize_digit(prototypes["odo-last-digit"], digits[-1]) + ] # If any digit is None, report whole thing as None. Otherwise, calculate the number. if any(digit is None for digit, _, _ in digits): value = None else: - value = sum(digit * 10.**i for i, (digit, _, _) in enumerate(digits[::-1])) + value = sum(digit * 10.**i for i, (digit, _, _) in zip(range(3, -2, -1), digits)) # Use average score of digits as frame score score = sum(score for _, score, _ in digits) / len(digits) return value, score, digits diff --git a/bus_analyzer/prototypes/odo-last-digit/0.0.png b/bus_analyzer/prototypes/odo-last-digit/0.0.png new file mode 100644 index 0000000000000000000000000000000000000000..e6acb1ef53beb672a445c82c9c768d72bf86be9b GIT binary patch literal 664 zcmV;J0%!e+P)0d!KW2lWsd=MGwHwJPjxPW69>2*UoCy{Y<%!Kk(RML39QuPHud5~EJw%yV`0$NriXHO7tT;f1e$e>sC{$3 z8~5EKEn;E2>vCA$8&t1Pe?7l`ZOUwEm3>?d8QSipBlgu0SgN&g##vTCJ{otBhCPervTF`WU*tIlEDm zoJtLaoQI!0IoKp4Y=8Lb+O7*zg>60l{K>xW7Dm(IcYn4h3sa4uy!qk%j8`E`K6<#A zqKr_Rg2n=P}}w#_i87*pDol3CDDYHV@Zt^me?092!rqz!W`1}OvzdhZ4dfx#wi zktk#v3Jr-@gB=bcCox{ZT{Zi-jhP$V(oT1J<>bFQvG5m9c3T{QsV8{D??Qg%Q@(1jysFAdsY?! zG6rVAAQ4v0Li^ABe+i2~lahuJMh1Zc%T%)Em^+WNAI;xSR9Ag^`9{0V`w0>xQj(VI yiP}niHC-CQ&>&JWS$`_MJ!d=3*QL`SiS)mbP#ReTJ0?%cSTl_;|iB^ybY#UzeH zVv?JC&iT4r+{6i3i(Yh5MRim9{rm6!gjgxtRLjM%z1&E8`6ahw4Q{xfzV`UKOe@kd z}>b{~OgCjta9AfO&$q*7U zkRb_5xaQL0Y<_V*3IT}#O*UQ()JOHsI93yO07w-GY-9JrHl%?FHAJ|&JW)^uH>x2_ zckeFN2SFJK33|=v2^!X`wXU`TgwtSe|2lj)gy(zVqo0op)F6qVE`I&t>A^uge-P90 zPftYzkg}rt6Lj{d+ zRz8zlF7E;wWMo@Y{?fvIC)-h`?5cUn#|d_MmkhAHTjU=g-5hHH5=K2UpWk}zUL=qu bdW(Mn8jVy)XJ{CW00000NkvXXu0mjf#d8t_5XFCIcJCLC?LcBBE+Wz(LQeytp@_t@@Bq9G4etOALZTo*L=}(#5s`)n%Lpqr z{1&nB1t^0QwyZSUbHhyDGd$3~0$ z_wmN9)oO1N&VKLi&38trWuMIf%V~ETRm6g+`Y!MS$*d?VSE$qxD z98v@}!YD$LNy=%Jo55uh4jDN?8rhn5V}QWMM8x<;ZEmoO0FVR-05(@!QeXqojVZh2 z0LnNJ7)4?W&w6+={=vwSwvi+}snn{}6 zUIabf{^&&D(W(@f!8ac?dVA}@&9brW0=ZB>2S#3 z>Zr@G9p5NSNv1=iuH9=iXe`BO&wh0KEMw$AS#2pMUYglQ%wi_~Fot0@MIp!pBb@pS;+6^WAw@*=dgpY*?M2uj=giAFJp? zX09qJWD&#B@y@+pC-cqeMSseWrgEr2aP`} Z@gKKlN?CWR5$6B^002ovPDHLkV1oDFHo^b^ literal 0 HcmV?d00001 diff --git a/bus_analyzer/prototypes/odo-last-digit/0.375.png b/bus_analyzer/prototypes/odo-last-digit/0.375.png new file mode 100644 index 0000000000000000000000000000000000000000..39c9a93025dccb15b7d882b2227e2c45ea895f0c GIT binary patch literal 689 zcmV;i0#5yjP)g zvPH%&7?UzU5UI+QVid_H31>l|WuIfzIEUJ6#CyUACa?qDr#kOmTxO*?ib??#j#>SJq(@82qBz5g^?0=BZ z{EwGiv-Q!PD;WfWn-?12-$C6~tIeiC#>TEy9eo-#sPC~$UrnU~N?M4zFcli+?X$GHbux+oo#Rom10ll?LHr z6cLeN)!oeccz>AlAoVv{2^kcrVM1ko=abXJ!Sw#_B$p!DcEz}AT#kM@ayL6Zo92rW z30EpMrfp|s>~ZtzXqjJPQ;Uq`;QI9HL2Wm83Q16osF)&&hj3?oDhZq19qrP#hOgQBc%>;oRTlFK{A)V?`{TbRvi%bz(!?n8e21 za&tf4_w421-lU>y`mD3h+I#8CZ@)jQ-M!C0xE5ZFM`w#~zJ7KdJ0E`WR{ivsA1LLu z_ut+kvvm8@kAM7CjP8B17yGY-Qa-C)F4X3Wd1{r(B(i3UFvI=vjkAmDHk#g_!a&Pb zm%Zz9_VdxxTYty%{b4eE_dCsQMOC(F&(2S_`+79az5Z|o%C@C?q1|~Yxjaqd1yj3< zEQD+K#+&tIH)#k$k|$h zZ6-HI)-u|B)Mpg|gR{!ft1D>@navs~;5HB?BqA_XIHk_EafCtB+&nAKi}i zD_#!d`GbcXu5Ny|75qn$nbfM}e*;Y+m(y9x;41if3lQ`#rb&2nx=V%xn(VA^_-}@Y zAhyRrUB_CpL`WqvGosW@5ijEhLfQAKn<9P5ON}U#(fp)UBg`N}CUl-r`k~Qvbx4I< zTX$}9aWoW*bgNH7WtCPzPSnnhcW&%lzqWdOULPv75=A9jAJHHGxp(`;_|5n1g8r45ng%k=Q5+xdLWtjIaU- zaQ;QZ*v4R2`+7qg-3SxN7GRHr9symAJW3fkhX@x?+}N4ea%hl=E6!=*I>W>`fyzWS zSsKnSySlx%tC|Ll$^hKG|M+e9=*e-Zx|M`r`Q~-Eb-eR9>aBzXvHWnlRc2=`E0G%s zLFs?1&vj=9|5U1k+j@;|j|`S6OiW)Avm%1)40R(B3(8C-*xVUUFQ*jMFnytgu_Yk;R^<_9 zk{Y1E>!Ah~x?al&D~d79N|i;!G*DJpUzDxB%~PsBY#K?+a0I$IE%&qRU47oKZ-s^g zTP~qI|FSsTnjiF^7WJJRm!eqC0@+>754P*>)k)M7LywD13d`BjZMme>GmG@}x+!Px cKH8A+2VFuJy&?sf82|tP07*qoM6N<$g5Hwz!vFvP literal 0 HcmV?d00001 diff --git a/bus_analyzer/prototypes/odo-last-digit/0.75.png b/bus_analyzer/prototypes/odo-last-digit/0.75.png new file mode 100644 index 0000000000000000000000000000000000000000..74802168f41c9d42e7964d266f1d6a281478b425 GIT binary patch literal 427 zcmV;c0aX5pP)iHis2SrSmdhv&;clKrxl)A9<^PPmezj{{hMt Vwo-fhrLNcwhRSe1JUSg=b)cmTO8Fu03I(LVlHj2nb}Ar$RJzTxUQ`s+(w!( zVPt2^Y6)wO2{5*;!Khk227x6oBdm!~#RfN}0E7ao093#hOk3D?NVqzYJcUP6uDYw) z@twJ<1=INmTz~xV>G;v}XHmx{x0>PN?YqzO)7MX;ZYQuac4uGv{_H#*-VJC%t}fSj zST|Q|RJN)kD!HgQ#&PdcK#g>ibZ~PS<4n_R4yA+jx1@cO!C}XE9O^Bu8_&f-TLvFW z`o{s|OWFDaQtlXaUw#LgQr;HhzmnUa8^Ea(2iT4V;Hj3iXHB)V1!{MTSpmt85hrg= zWPe>0V^W0#nav5#&5$C8hzgQ{f>lr%PM-3sdvI?tuP7P+1C)ZrgIABgT|Ru-FKQSY zE3wmd%wKdDS4XE`mNk?fz+)1}Chq5^Ta}}zqFB>sZ#jhJyxR}x2e_cb$f5*;<9E3} rKdJBCJo7R)SQcfbq4#E4R^R^s^WOOW$|G*{00000NkvXXu0mjfs6pyd literal 0 HcmV?d00001 diff --git a/bus_analyzer/prototypes/odo-last-digit/1.0.png b/bus_analyzer/prototypes/odo-last-digit/1.0.png new file mode 100644 index 0000000000000000000000000000000000000000..d7537a016f1fde527796bcffa415c991442688b1 GIT binary patch literal 518 zcmV+h0{Q)kP)-D(aql&i$#<%cHL8)>n$!LO??_HJ!t+)TjQGn?uZ+kZU?EG*IcQ);h~N3snoH zgdJ_zuEosBlpzta@R$DDtuO^6$uuNVz|q&k?+1?_T#u3vAOazQf4q2gvV8meX;VN( z0K&j<{QCW|jvqgX!ekZ*8TMnZ)>Bi!$c#jwjTt7Ko>&3{a<Cf#Q?MM1ooC;z~t27wl7U<3=k-G3Or}!pG4a@0dYzA1pZgh z6sAsgdYG;k1tWAhWV|V>aNfQhsd3R|tkd6BWYGmk{p^M^)uD5OsqWy};zRRr?$8SD z%){=_KEHcY?%%z)+=UED)>Ze@x35OKBRIZ}nnknpUJTYsn#PgaNf_g%AlcwaRv8wg zO&MR*vSK`Fut-tTk|3?HOhSsprpzIY`-maPc2J~Q@Ab8m7(dETN_A69%~>5vw^(J- z$8@^HNz?W@ugZ*dx8E<1n3Y3kw6n6#p=Tk>-C1{MPR&1m0W7ToQzzmt=l}o!07*qo IM6N<$f`;?iq;s{8bf{>6SaTWps?%@PtB)~$3U9aDJ(?#(1@0pH9 z-Cb4PU89fnPgth$CN83BMrmXcm_o!u+~jD!MNh}tiZ zekmgXfiOv?D9uG=MA!(8e72$V4HHn=g(VV#P)HFKjJHFekPuQx2dF@d%CZF2Y(OAU zL?Do)*rUYsUGJu?EyV$9Pdmm2gGsdKenx32RPWe|Sw=0_|aEj+pWc;6TA9$x)<^-}2X?h*~DiedTvw!b); z%@0b6sKR|;+OfKNKqv?!3aOjgG%bO#io!N^YK3Xw5cb`b6Js|OAS7w~nZ~09Lzjjc zKHw9wDFvsfOr2-skWlSHdt=9m=mJ7P9~V002ovPDHLkV1gss B?-2k1 literal 0 HcmV?d00001 diff --git a/bus_analyzer/prototypes/odo-last-digit/1.25.png b/bus_analyzer/prototypes/odo-last-digit/1.25.png new file mode 100644 index 0000000000000000000000000000000000000000..7a75a33da997dd5890f85ad900d366255de2a1b1 GIT binary patch literal 501 zcmV36J9WppadnZW;ek8f0u`U zSzy<`O;`7HRrQQs&w^%_G03JJZe<;R*&okJZ0+8Qx090VRWUp(-OXW{?Y;XpbB>zE<3wT{g1|aSBU71x+W+`&!)A#zgwk= z7K#v%A}%&EFOVvQkznMlV)?EVD|g;s#!8lM>lH2KRzBd z&P!gc5^g`ftLP5j?;kDd!EU=XJ?LI!bbB9u9?WOi{ZrdKJAYUQaq#`*@0`Z`T5H_? rIX-FPcuEZDe@7KkvCGCr^ELhfa^~N4D}H|^00000NkvXXu0mjf_Cx3h literal 0 HcmV?d00001 diff --git a/bus_analyzer/prototypes/odo-last-digit/1.375.png b/bus_analyzer/prototypes/odo-last-digit/1.375.png new file mode 100644 index 0000000000000000000000000000000000000000..504c4baf16f26f8d6509143ac04bb1adeb63590a GIT binary patch literal 638 zcmV-^0)hRBP)BcvmEZ~3AhBeJ6p2-kqObsCupwg` z|4cl$yNksglQ^{0>XxdjPMtcfua;NKgAd0BXs2u4%OAcyB0YTa^yBp9`Mf;X9+{$W zO6{YqpO46+$DeBc;!X=#UAb_$_(+KWB0M@}#P7fZw!vbLUi~TdrK1tH$O315|+%FdWXiv?%kn9wI z%Bq&%60A26YODTNE1FW1kluD^86-8yx@~)Zfn!;~(GOIdkxOl9tyc##hbW_$lf4IsS`(!Zul5 zwiT6|lVwVq_hzM(z5qnHt$nX(e0i~!c0TJCFHirt=ui+rKmYA2=UD4TiT&B)$?5rJ zOQVS3)r;?+yNov*r={*~Y~<@qL@1`+;rcVCWqiI+8mVn+Lq$TG#@?*e(!8Ed(&TS< zZLKCO!u5DQn*9mocqbh`Z#NqOC}<}9a@_5Wy_TQd*VkuF^hm=1Chh6zuV=;M?d`39 Y0m>pIvuJyZN&o-=07*qoM6N<$f>$Lw+5i9m literal 0 HcmV?d00001 diff --git a/bus_analyzer/prototypes/odo-last-digit/1.5.png b/bus_analyzer/prototypes/odo-last-digit/1.5.png new file mode 100644 index 0000000000000000000000000000000000000000..97dcc3d9420eac788cc9884f3d7f03d7378ed7b7 GIT binary patch literal 640 zcmV-`0)PF9P)_)Qb;@?N#KRdaqgHJwxnqMN;k(#tmvE>E8?(*H_+F`d(u{4eY`Ri}X^~S>pf@pF- zC|tu;WcTLcO}ePq|_E_f|0fT!NB2sO7{-^TUX`9ckWl*&7daTH4*UeYY aU;PKH)G1Su9o0wx0000 literal 0 HcmV?d00001 diff --git a/bus_analyzer/prototypes/odo-last-digit/1.625.png b/bus_analyzer/prototypes/odo-last-digit/1.625.png new file mode 100644 index 0000000000000000000000000000000000000000..b1903d5f133dac845d513e95b14d90dd3e03485e GIT binary patch literal 716 zcmV;-0yF)IP)Z?|r|S`4~zg2(*L*t0o#kC<%%GKzH~9+2P(lVBENI0Vc+UX=I@$rI^xo zn0BV~ee=EVJuaq!#oe6e}oslhlLf72 z&oO>PvW&K#+>zt;i=(t2f}ku=e;ZrseJ8$w&)@vBf;Hm`peWf)WH4RyBai9R|AsE7 zoZSrM`*)p;$%c{N`0Bf}PuFGw+k$A0{&=~lh>(2pzOZm|)peg`|wOTPGSTeAt#asX>dCbmNLja!Kn9|Z-9#$ZR3Lg%BeOsagv!lu5 zWBvYbF{p^X`unGYVl|W!=#y@B8O|^Uyqh1-ssNA#NznmJCX(mXIg&LkC#5VbXHTSJ z?+Z)5?w3}#9^ARR9m85?X5uhB*w6HNzYdM|A3vE?RsqRf7qijVXY!M{zU(!oj z2wKC%MQyD5)^z8vUY^DBTAKt&5g6q-Z+ky2-YRQ3V4hHGsVX&Utw?_OzBWFprw2!7 y6}1G5hP8sp|9sa@iVvqJUE7$VmKaKrB>WFF1%s+-rK8IL0000Z1!5QMAx?U~ux4}Zk59S14o05V)SzzK;19Fh1*{3?C`5)$Gb1d1RCC9$m-$M|E{ z>z$o>-!2Y|4=t7I=~7E2HNS7Swg^fJg+P;hJ!`JUE&r&-4Fw4jK@jBGhvoFJ^(U4X zERx_4sBJYF)t*qS03caF05DG0%iT<8AWRz%AOJ&^>Z(*`Mv?>okN_BBs6&_;Hzz>b zP_jX7ghSXQAW{!mjs)KT=wS#z6aW_}K-w4tM1x?E|Gz94v{4L#32;e@Ad~|ku$H+< zLT*+9_kUmQtD+zt8_Hnrfa~tOtp9m&@&s}Zq$|q$7M(c;!R3r<tv@abne`OVIB`~5Jftxk3`y1K|ip9`Hw z2jz>R>UiB1a@5Sv8)%3Ua0Tnp(o?PLyCtixTg>}V(*;npXGNiemFs0ciykNVO(2(eXWAUb%FP%Ki?RpBr@17>6PYP6_+o6 z+FAz)bndSF_~{`%BB!jk?3)OHKCLQS+Ww-gJ;(HJp^N)}={8uhajMgDd~o}D<2}Z! zgnWI+!gWd}ca3*f%j?Q7yHt%600bH{fNsdEcdt4>UD&h*Oav()O!T&%y<7RKoAH!1 j6KwM@3Z!b>zPA4WLkx-0-P%3W00000NkvXXu0mjf>{e#G literal 0 HcmV?d00001 diff --git a/bus_analyzer/prototypes/odo-last-digit/1.875.png b/bus_analyzer/prototypes/odo-last-digit/1.875.png new file mode 100644 index 0000000000000000000000000000000000000000..c6c5a4a07e4ff4736db1344b4dbf8887536cfd92 GIT binary patch literal 736 zcmV<60w4W}P)QBUz!D803Od9eK>Sf?C=e171vFG3g%nZj2q%v1*xt2w z_j@mADAqL7%;*_uq~Xt3%Q#@R005IqH+jloUXZzlG6{hY34k(C0WKhc6o9qhJ_na* zgh}_75P$^1*N6rH0tf;CMaY3ffe-)yA^?B}IT;XXYv=zyA?Q(OrH;4Knomy%STjIg z-aLCVde}{x45DIM!(uglyeaSh{NePyZo>*8Fj}he>*d~e-d!*-4c@E`RPw5+}#^Brrm5@TtB;8rLYEge)h-N!UfM~t&WyAo2#93#+-h@AgN?cj*dY0;EZ}Ji@`yxmXaBHULwMX)vzCoaYM)f*^ryXrJei^WmqjS62%rlNt&_!XT}d%dtQBVs!QP_=aX7 zM2=QkN}GpY4xQ!rbsL;6lYwBXQnXTcAAK+xvR?Iu+;t=&gUo6T4hJUAdxKfx{Y_*N zBP&h8l_6SdAsGy$B!EEb{b|5z@={4A7zF@PInVw}q|}C^WhKb<^@vsnrThn-siFcD Sw~}%I0000BDZW^>kd zAzqvTNR3i}xd{|ZA(lojHuLpFcGBSQ)`2^35n4RDs@{L|y`9N)v3sMbm+Q0V`gh+E zQ-%wN?|%58ES56v_Y&CFz44Nv6|A!S@*Deu;*!7!k?>4Hg)WvBe+~CG*YpfY)(*2N zfWY|pvqLvuq>_74p+U0~qHubXzj=K0@K$wF$Qsa8gI!8DuL{JEz>osetHsH_^0Iq&J!dRSDQgZrKvVzw-WWg>j(l2><{907*qoM6N<$ Eg5oJ)MgRZ+ literal 0 HcmV?d00001 diff --git a/bus_analyzer/prototypes/odo-last-digit/2.125.png b/bus_analyzer/prototypes/odo-last-digit/2.125.png new file mode 100644 index 0000000000000000000000000000000000000000..5cb84e4fa6be858600f9db24661506ccce0d1265 GIT binary patch literal 711 zcmV;&0yzDNP)KSN=k=*aE+pbwLDq+?zjigvg z`sVUtGil>V9@7{9OzN49KcH|5}qH0REEp<+={a;cOcD)%3fUQWM#G3~Fe zCPkUZOlfD4k3Tnh_u2lN_qbi}c>sV?7{A8D2LS7Ash&tTGm$_*75$*li%t4YXk;Nk zKu`iGaL_zR0|h`JL literal 0 HcmV?d00001 diff --git a/bus_analyzer/prototypes/odo-last-digit/2.25.png b/bus_analyzer/prototypes/odo-last-digit/2.25.png new file mode 100644 index 0000000000000000000000000000000000000000..c637bb65cc2fe26c75ed9d451084733890fe7319 GIT binary patch literal 728 zcmV;}0w?{6P)ra15!_nZZ z(3;xqhc6xjfqIy|eD~!p2V0}_X-d&l{NtOKff7dZ$+tUuIq!_xmR9KM$3dVJ$PXuz z$@2VY7m@(dM49ps@`*=x63`H{LXt3fC-Vfa%W0q*ZoHol#?2IUNL!RW6}KW8bG-l6TDPPTOU>$R>wUBE4(f;BI-2 zZuj?lp7MN_Qc705n_(!gO}OW>lEVWc^{-Nt#2JpQDP1PA+WwaUs`+f9^uy?&5nPW%^-piy)DgG z>ipXFJDjoKKWg{;Fp5ToV#?;P(dNTy#{M+a8EK0@L($Qz>_NtPAxIh{dO=PYNf}&B z1VMwrg8%`^AiB`Q0R%+>q6h$l91wy86p#QBFcN^%3&py0FwK@=z~tS*TT zx)wVuVirTeMWWz8!6Hlq;8GDT&Ek?EGBF%d;8L|fNG{+`ioX9pl#C?2fBb?MD;vWO z;MEal)B47H@R#3zHJc7@4!Wz(C^2atynDa)lUL8j^nvs01QlF>Tb8_9uBiTmgcfBO z0{`A?+<(PJdnOS`03leYv;Oc^@)!H18U_GZG8#d)$Jd(nsr?I=(N@r>29#a^0000< KMNUMnLSTaIMPCm9 literal 0 HcmV?d00001 diff --git a/bus_analyzer/prototypes/odo-last-digit/2.375.png b/bus_analyzer/prototypes/odo-last-digit/2.375.png new file mode 100644 index 0000000000000000000000000000000000000000..e4993759ce4d8eb638cd3c50f71e7ede7f8d5cda GIT binary patch literal 709 zcmV;$0y_PPP){r$)z zi|*O=o#Q(rc$Z+`T}UF-6rNaG2I2C@4=EtiSX?%okPZ4YHpBCD{X0GvglIxH)W zRe>qXL=#9ik=FkG^5JA_oQVhlU1$q(Mvij${kuo?wb21WP+*q*)BSK2Zo$iYKN{^o z83wS88{4;g$EeN&h6~B?1ONmn?LUF}JjSu;K!Qd9Lda0eNv}^nU!1oWO%g#;5@3FO z1hRShG}5cHSt){$A`{7PeY~C7FEf(bt^gc=$S zJ^XC{&t};f%m{OzUIcJ)2Kdg&aI%<9bE279s@h+En4@$pI>+8-9=Dg-=_z?C&koyr z(Oo}$%Nzr2X`4A&GLn4fkE(9t+Tz8AXOwU)J<$k~Ef)PKZKQeSdD%n|Fv6TEpX>Oy zwm|>vmH+zkGC;smN|mMMdWnK7B;QDv^A&3-x rM#a47%%4jzfIycAsc=R%gfagM=Yee5Swbfn00000NkvXXu0mjf$W}(I literal 0 HcmV?d00001 diff --git a/bus_analyzer/prototypes/odo-last-digit/2.5.png b/bus_analyzer/prototypes/odo-last-digit/2.5.png new file mode 100644 index 0000000000000000000000000000000000000000..c9047ff2fa09814d1818b7b7b501ba11ee50231c GIT binary patch literal 723 zcmV;^0xbQBP)Y~o)%gODcsd!zm^D1`)DYNyXpc8`>-gujY|8?j69hmBO44Uk(PnB?zKZKgN#^!uP&-@HVP) zjc&%2Xo`$0_FBpD`Sbw3ZPC-0lhxr-GyZ4MuU!l*QIAItz6Cjz zv3~!4l-6b}xv0(9s&0KMav`D0tI7#v6iHn&cpb(TMWG-_kfdluAQBxQoR9#427<|A zV?_cYB|rfq2m*iugaARpW*7hna6s5dViQ3(SGp-}NZ|%>{1<*ie6;%Ci$D>K@XaeC zAOM5}QYy8aR(R1vG6ZCVf^rFhqd8glaG7k=2b9jXQ*Y;P^7(I1Pj_}3CIFxbuygC* zfBc<%_Trc0^ob$SP(`elGOVl5dfy~pPv0(Zosy9NR5DC=IthZ&NbcO})oV6gqQ|=J+AuSk^-{_g$I~pS4*AxrXBXozOYo}p>gxFA zTwpbTy!q?tNo69eO75whUe1{4O=te$?C1>$Gb2_8)~hf}XqVy5vWo%$BpHSVU|xIQ zlOJ9V2L_sCAiz=x8;;I?Z~S<^1A>$!5>yCfu; literal 0 HcmV?d00001 diff --git a/bus_analyzer/prototypes/odo-last-digit/2.625.png b/bus_analyzer/prototypes/odo-last-digit/2.625.png new file mode 100644 index 0000000000000000000000000000000000000000..f12039ea434f3f3e0b9894f4644e9f1c3a502dfb GIT binary patch literal 706 zcmV;z0zLhSP)qzE<$Da))P!G;wtz#@;8SI8@{;0-{Lkx&G-M3e+$ zW7#tv&-MK|r;Ek4lwOupU#Y8`7q4EvkJ%y&rcw$7g!%HP7me3nJUvR)oR+*O@)#=P z%sx3#a(?;a=5974h#?SdkI0oh{Hh__vCCUmAs`qj5J+~g6C4D9Z3bXqstrH@O5z}Z z%prgRNl1Xq=n^2&005u}5C8=i073XT1OY*QFY4X|fe;|TCq)7P88|Tkz#$?~AOZ{v za59q)h;fe)GdNiZc#t9tL;(bH%1eTqKmZUO_jwXP&^Z)Vp-`F&0a&rIAd&F?{F=FM z3)~V_kXEHy`0nRN@Xg6@(7zWq6@-{j)nf7Kv+v-W_rJCuuCGfiD5fq_Re#nzPrhB9 zeApIpq|pJ~6_OS=k$mxR*&diDOEl1U*0lldr&9UeH$S``(_kbC0Go^B%cR}~U)r;; zJA`an57qJ2cFYRFdGMqybW@NDM7i2+of6=%G|Mxu^H8NuL#Ud^bRi#C@3w726z6EX z%gsNlS&#ty{N(jInxP--p#yR>r>DIOAiRI`OKVL#j*(+jL4Dg+0!jK}dwNzUmK-Em z0%KMp6X<(~%WT~BDBupWHtX9g(GBj8o}SJ29@HpctsIws{I!wMX`UW`f0O2oQ`3{Z zy?wW40tM$$1KQjOBf$7}b-M1N9n`Og6|M+m?iLVbzdedNuXEC1b!)f$EXta6N@L__?S ouKc_*GP+U#t6VwLXzEhp|KPfJ3DbahVE_OC07*qoM6N<$f;O~0R{#J2 literal 0 HcmV?d00001 diff --git a/bus_analyzer/prototypes/odo-last-digit/2.75.png b/bus_analyzer/prototypes/odo-last-digit/2.75.png new file mode 100644 index 0000000000000000000000000000000000000000..b0e23c012fdc7565d8919adbba3bcd68539b3218 GIT binary patch literal 707 zcmV;!0zCbRP)bLO5Itw^yys^pj$3G=NL^H-l@RQZx?#+X8qJwAA4i(umwD1W4MUHzvPM+)z7_d)?4LKM2SWfb^&kkbNJu*5 zLQc>C2oL~)08q$IB?|<1@Xmu0yhy;FOaKH$h;WdM9Tk8~01PtFcN=h@0<|lJYzF|l z*l-`y?r{>>8vwvc+0WVc6busJ21ye6PMJu{KoT7hA`Ju}f`C*JC~&_k3RX#`5M+pA zby1Q$=JPz-Y)cIal68@eraX9j0-yf;%eJ{*_6e040U)ZQ`uO=NefH;fv$tIZ1<3#e zRj2hy^C_HZ`CpHkQtY*N7ilq-d2{k)wX(y3#kQjRW|5tNl!89~@QY6_51VnV4Ak}V zuUD^^9(5Jw<7W@n!*NanH1Bn{^8Kl$Liw+GP|q=vESvt(w8^!Gmg>}lJaq-xuy ziD~`MAFsDY67bPS&74O^gHf9~Fx#Gev$<(m3gCQrl;Or631%rD|NZ;CAm<3v)in}~ zGyt%g&n8(#B0P=P>sxcbgQRLwU0n2GGy}c6_+dJURa*gI8l}zoWt%{fe*N3GFJ)2% zQRax*zp^9d49 literal 0 HcmV?d00001 diff --git a/bus_analyzer/prototypes/odo-last-digit/2.875.png b/bus_analyzer/prototypes/odo-last-digit/2.875.png new file mode 100644 index 0000000000000000000000000000000000000000..c507ef906b340eeaa8a4980cb4a571e5c9b7f6b9 GIT binary patch literal 760 zcmVdL?3=%N_IP=I z)nyb(wWXg_*Ryu->jQXqdU$??Ep)k%cTs6=y0`H?yjjDt9k*=EqtgxNW5Kf1HR$#I zFQ#Mluo`WcSTmWwc-xOc(*j;U{O(iR_^?^zsAAHt{y2PknzC1-H~Z7&X1h_MNMfBH z?Yul{az>$>-P@gD)TG6jOKsY{7eytCyAKi7s;_R^ah@vp$vbli5?$BxzB_+e>bAd~ z*le1gzfw>j{pz>F^VQXH*LoI{Ps{mVkw^pm?D>ypa|ab5>DDU{W)^b#>YBZAI+zhE zlRzd&!0Y{ow{7!aV_Zg^EY07XT_pjG@b!;>_;Psv!KN>IPgc!;fAVZq7!rJ=*;&-7 zt=9)p$%aQf`MXdcT-w@ZJ@GsZSYosO)vx~ugqiz*@GjC4MX)B_tn#&of^=S9E^l&I z#vBCd$;FFfh*3y?`}E1hsw{dh1mP)8PiH*>l3yM@K5Ke9LJ}NNnzdu=$0Co^-Sn{G zZihW0W|xf`6?*f*CwwnYIW{S7shZJt)4calf$x2mk9M6ouT>gubJgUssABW;(gp5H23{iks1eYlA(NJK9V38RH0~{5d;M{F2sM-jemi=Y_v;3A*N6iT5XMTNn#R` z`*l9v_Zb&KI@{lFnBjLJegF|~!p;<>a9y${d_xid8UYRjdI}-v-a?KPX$ z<94rIFi=vqW)xgdKG0Xx$-rrvpUt-S?v$X_JnWu#O;P+pROd-#CYZurFsWO_eJ~}!v zCPQ+SMqUyP#;owg{AOSZCA!ZqSJ4N}%!1bZeR9zjxmEDHUyjeaVX$P$-ICVVa{+ZS z`5$LLz0M*@1IH1d9KEa(eW%I)>K^^fj89^aM#1q2CIT{h#vry1;C z{`l9S5cj=_bqY*|-LKOQmv@(&eNrfv7_t;YnG`=0hoGNTHAjy5T_>0 S3pgwQ0000o?EyJQ{=uqj*(s-c`+@uFS0*x=D6(W)fuGIJbw|LAS47KRgYt8nfhG zO6Be@R~ZG8YhRyl{l#Rjf%V3Eme-jP0K9*{$$I*IkU5E-v@N1b3c#G3_ic~%(8d!5 zn8p{6U?AX(HL7Z}iV}2{G~OcRAVEiY*j?^EeQYdn1|i)(ihuy$k7oAVPQkjfGu7pB zw@rmKz{}{|5A`q#dnAC9_HGH#1ZUs%b;UXf3P~^K)1?RkKDqvG;j?%brOzllm0Zfob*LHt@XsTR|`-7BTj;c&U5xji(b!$k35rFJ@k$Y#} znfYOLut9k`R7$jD`0KtM?IOY88|~NQ{kzRrDGlMV*bSyE^9!S=*>tfCl3f^3nCTixmV40B9nSZG0|q zwR}FTc~pP)apl8TS2foHbb`dt9;r^o4G5li00pJ0H=`6G>4Z@Ldb;Uo`IixtAkcN_ za3-GS9V_K%M*LqKOvif;K_vJk@;I0PJ+i?+9}WN_L@0~C38V`4Uk^b=gu?F(9MT9# zkN^l#dM5ZEq%|}GAxRLj0tC$O6C?w^AOu2W$rJz6h?DI?5Ctmh$v>naZAD};nL7Xg N002ovPDHLkV1lC{JX-(& literal 0 HcmV?d00001 diff --git a/bus_analyzer/prototypes/odo-last-digit/3.25.png b/bus_analyzer/prototypes/odo-last-digit/3.25.png new file mode 100644 index 0000000000000000000000000000000000000000..cce314ea6dc1690ab17b55a46d308077a48f6d98 GIT binary patch literal 772 zcmV+f1N;1mP)|jCA<*s2YE`I!`KXrx+jq{CICd;@ZdW@bF|B-|EEZ zN&;a0^IyMvRI2&qH!Hs2Nut2o01#{}RljYNYOUYOylyqfIGQwE0MIao0D5OGx($2D z<z@zXD>qxmg**iJPgkZ-Dn4m_B%35+M*i+`qrGeDLBRiF4@{)M;n$ObrW#!S^5j zu$AU@ftUc2wc~}Nmjk0$dw-wVL~s-W#0!K_){~219_Cufh}W}o2$G-(*6hv`-udM2 z_K0hpX{>8O62-Y@cb)LJ8+N#wWQj$ok_4cNx{?8$sEoml0#KO&6;UAo32=5alCc)NK0I#JVR1fy00E76 z^Dtdl>IV12pQ_g42cEsQ8ed-gSl#;Qp853U{iFW!7o7~K0?F}O<%mEke{c^T}zWcvi||bE^))d{d2Pb0000Tb`&uUN)7jtmMI#D)zLdp-u%{1rR+hDdBsK#H&kkswZpVna+OV|%9C z{kXRdi-{GBl1e4jsq;|rr{nKW-!!PfaanJ)zI_fK^6s}^ui5>bgT>?d;^ns8(fpvl zIC$_|?x04rkssFEIcnlXzS<6#?{Cgu{;;+Ig%P<&Zm4L_G3)dy%&O=~w^0SDHl6Qqhm< zCe_%z7s#%AKHESW2?!94MK_E`o72eN(-4p%0A_#zc3qgU4{RZ3l3LLKC|d|hG^Y>& z@TR5U9t9Xzr?)Bq{&teL0f7KP$OyjM0(?smVE>ncv@%5iBg?$0wKA zyZ;I7^~3KL@xx|)B0{A6kt55UV6*6JZ&J(f z()Y_@cc)QG4gyzg+zMeWrC?1)M!H_Maj;TGvZ|&)yWF(Xy3e$JeztSLQ85bh)}~wK zM*p<7XU*1fyq}+S`-?KOkEF<&r_PNji*(%hLB*hC={8@7|y*F6(Tdh0sjFcPIV240*zh(0000Z1k5UlFgGdrGLXX5~hVjwvng-8S>gv1dp9QhCYJ-Bh_!T}@{kP;+N9D%KT7&+LE zKXx}e-kJBhIIJD|)KXPfmAd%t?xKC~no1o6fu{fQhi9FQKl$ck|LXISkbGkhKr_E6 zJI`pFUw-kHZ#W#ZB!C8ReEmk#6O#(Qn$0E^GLyR{OZnuF7a7V6CGXDnyPZ*$WS$zY zyS?9@ye7cf{pj)cPYy<{TS{)`()JjXY=E<_5A614+B9%4SnG4yHj$JmSx({2O0s0 zu%s;-R%C}9BTzyC0FbmoTBe&EP(%p{0AZvn1h_z~pQIo_fR=y&9P1%S8ZKjkcmokh z#HAt#P;deQAduh{4*+26RhPPJni&B28+ZMGkwF0tFghUBYm^jFPyt{sAtYWJz(mwy z8R+HYAhn}O!z;CNbh<5X65Ng-bi>w1ciz4Va`yA1roDatE`9OmcZdFd+<0dlkn`sc ze|b6mtiDS>`1|o8cJF)&Pym6`M-Otd`5|G;K0D&IBoQE{tr`2p9JEa*S`R8n0Z1E- zC6r9q7|Yz6Bq>BteUu0)U`0Lplp<6VL6#wx5HP@wY=XWTK_(eUvnmmY6@1$(X7-1# zCK;y6yH`WKuGdE?qx8E!9o`)IysoN$9_|hzFoK&v^?Ui(n{9JiSH9fa?=M?E#$;~g zWEoA>#1O7o&wye`ex_^xCJietFdha$G@6jlH+{Cs*=QD_W$gihtQ4!K^p_p#*2xH| w5on?+uet;JUyEBlCLqu(m?)MQHT~ZFKP!M$R&_T*#Q*>R07*qoM6N<$f`VK+z5oCK literal 0 HcmV?d00001 diff --git a/bus_analyzer/prototypes/odo-last-digit/3.625.png b/bus_analyzer/prototypes/odo-last-digit/3.625.png new file mode 100644 index 0000000000000000000000000000000000000000..8b996d01cd83654a0f9fbe12515aa558fbd7c8da GIT binary patch literal 695 zcmV;o0!aOdP)z)#~JAkk4r42Y0GBG4+N4Z%$x zcH>84-+Rwq3~ZpB$5h>nzW52Zfe;`As7V-00AHf5)Q%u2`~TkKZ z@o$m-`v`%)8UDdrNf`hKKuP}tgtkcWW{Lm_ioWUB8=1{0ITVVG*v3FXB@poFL_rj{ zOHr1|2)fpVJ#`Lo16K$nl5n0sW<9tu5=BCc{Oa{tHM+SAk0;;F7yDn_my7_hdilez zzwCZ=?=F1u_~CeZbN|B;NC9Y19z6VOxVUzoJ{ccB=kueJt0DoQ$LX_fHkkreLZ)V^ zjUK>m-8s7!uxwRj#=H%|(yEgbfY)dvC82PmvEwzR*dl>>sKyB=7vGq~bb9sc-?5+HaWgXNFK>e`LI zJk?K+Pbdgo<%$N@OeQ)W4(EiuJx`q(RN!G5AOl!73cw;jK%iG2e6@Jgy#!%7qtov4 zv<*^;Uf=q3e4D?^n9Nen{=$#fAVlxodGDuN^Uphgr0?y{e?C1T0K#3@KkF@e5?VD) z-A{Yhugn6akuMbTz5qI`s&d=1UI;PWb0~DmC_qY{qq|t6?(Ot@(}5pG7ng_vcygGX zo!O|$<>|qRAE1;AgaEQyHR*D>O#3^v{yg&og_`Zb4(D^r38TbVJgNOR2xWVlZ=KK7 d-+?I5@HeiWX_Lq^>y-ci002ovPDHLkV1kcGKv@6) literal 0 HcmV?d00001 diff --git a/bus_analyzer/prototypes/odo-last-digit/3.75.png b/bus_analyzer/prototypes/odo-last-digit/3.75.png new file mode 100644 index 0000000000000000000000000000000000000000..b7fb2ea945264429c5b301d6289a503dbc3834d3 GIT binary patch literal 677 zcmV;W0$TlvP)6WOL=58~N@mQ>B%Rpl z{=Tn{iw>i;D~j`+qUz|=``xvp6kwMmL*13PU##nTKJRu%;}&@60jk2zNiW?Q6CnVz zDuYmlWmBsbuy9!56h<90RKt+H+(iB&W?{pU4wNf?qPsFf`VBLbht+Io=vpMTI#58hj| zWC_n-y*}me@gwE!Phb4q?L6Dx7*@#cgL-xVf(uKP%fpST+7qbqsem7wejTY)*ZGXQNeKh<@x^Y8RPA} zdeJvihNKzQ>(74Nx;%T7ll?sXZLzv$5=GISzKT2lE>Ef3UPvh0T1F9@H*OlJ4%fqv za{cIolbh*e`c`)8$GM!J%~UJk0vaI=@C#t(yRGgHet&zr9{R*o%$ppU?jVd92> literal 0 HcmV?d00001 diff --git a/bus_analyzer/prototypes/odo-last-digit/3.875.png b/bus_analyzer/prototypes/odo-last-digit/3.875.png new file mode 100644 index 0000000000000000000000000000000000000000..56cd0a4a054f4b73cae476e9358c8fb49420829c GIT binary patch literal 739 zcmV<90v!E`P)pV7zsp3)Bu9e zeJ{pPp~MvKm}p1x%}<@Bj;?g*9QP#fOU=Vtve-8_!k zc&kAg5zU4n72ps^+ejK1Emb6xsamY2X|%`$$RIPJBrVMqrpzQ0Fq0G+om?2bFaJFiBu;0=*ckhfR7p`9GQv{-& z{PLjIw?BIw-`xJ;Sxu`OAp-!txP2QQT>08u8oF4V zwf_fLyy7ZdM0(lVIq7WPBBp|jVQ;7R3m3y&Mr-r1oqVpfD4Die`EJ*W(;~>CR;yW7 z&2{5*n;SS(i1o0DMYd3>>Iz0p8P>?@;iK8-$E(e()2B8Tu*B&~iFW_HC(9>yFAsL` z@ZSBk1EgbfBcJ^E>+brmBNrhE!wl6Z;na;=h9c#E`IoIoThH5 zgU9CGzke&|RPKHhg+oL_3O>E``*}Gh*5l#if+VA;{<~F}uwpQtg#(zZce9EmQZa|+ zvQu(yL;Z2zikAXTE;N#fDAXJxsuh`;%)Fk>bEKeFm{zO9_ah9G%WEkn0U-r;^vU7K zYe$mD#yrlCVM?=u{p-u)?eHb(>+O(XP)Z5XO}cvg>T105B0O4)Ohqc^LTTcS%e$K` zYFfSYj;&Y_3DBGAIhlq(ed)W?RD5iWkSnQiQmB3UPqpj&g_qh$4a2mq)7}ca<$nd; VgD|tIkB|TW002ovPDHLkV1jpKc#{AC literal 0 HcmV?d00001 diff --git a/bus_analyzer/prototypes/odo-last-digit/4.0.png b/bus_analyzer/prototypes/odo-last-digit/4.0.png new file mode 100644 index 0000000000000000000000000000000000000000..c0150842882911995c8494eccd2b63caadb1defe GIT binary patch literal 686 zcmV;f0#W^mP)RFJHr{IFmp?R2&732x>YZoy7jJ z`lsrvd(U=IO*pUz8_t2Xj=tF|F>Y67tO{cr+%vLwosuk=rmmDJh)`rVgDwfOlEvvR zIl#s)rMA|hY()^zvurahV(43K{(RPk;r@Hh5E<3$lNT>z|Koeq>EU-*)7{U$JOEK5 z+a|9rk#9(=wp$r0((M?YNZN@p}N~|tGvind~B;}Kbo3}2WZN_1y$H(h1*i}PF{p9=Kmlx01 z<9uF@j}d?>HBrBL^7njm-D;`1feZ|_l$LYmvwpSBoY0tHoKS~*2mW`wzr0QprLsC{ z1_X6@@aai^=V?B5a9#@-19Am&G}|7jl_8f~23ZKaHe%jYjw=N}yn zqp~$p7FdZy+bSpCUJn&81V#jgm=&=h&`ok{8jD?~6d83Rz2U+jyHsdaE!uUr005H- zl(pD?b4&t(ZOir4rUSB&fTYW9t9kvg>|O0yUsoLUc2qaHW-iu1kq8%fldM$8OYeFZy@nSd>g# zXvV1-H4km;*ELL$vWRhpIGCzIX%b%*P@KK}Jo>Jh*x1?t5)Vs=vo}?B%_m9_8i3-J`SgEH!|8+3E8n&BFynHnq2ze3A)AY-#Q+UuAp4l*lqLL!9Qs?9l^1k4n> zF?y5b3I6kThdeeZp*eT5c^LFiAqL}wAx=yj`A7Iy`~niD3?RWM+5yByqf%Z< zEo~q5ecgNZa&Yb&?ZIAqeP#2(lV2C$C$~S}zPz507UPF6meaXy?_Bopk6zB%eE8Xq z+X~Qh{P*6`LK}B~xa2o44JWpK_2a9a7cizP-#pz5p8NLxz*CFFYI6Fv7CMl5_aKG& z$UC>DBImC*ooy8o<_K(o{VnSe=N zUEF>HRy2krShbuZF=xSto1ey6lR%?M!f5{0Se%|3;WLmfN)h?@T3rp$We`Mog2&`0Uor3h#Z70Lv^EODh1(HHVQ^S5ed?4 z*`nAm2LlX<4gjba6bLwoVu1iibhTyB8=@cqQe{TUyZz-I_?wrHf9o2D)J8;*K<;?3yi@zhc=s3ctob-FI-@WI!=*c9+v#3QCzf)BQ_rAVyExg(}H*1=9Z!w=%b>+VQ&9IL4quJA6 zVlqc>NHJNjRu47?^sv~ualN}4&73)eW_tANk3T%5CyXh42e#}|Yjh#}$_1>R^yZ)i z3cRUuK{mrC#~TOdWk3;v#R*FVjwqSn^M7eD2SN@LkQ}g-N-EDD)1eFm02pM1T!6fc z3U&SI2s*6})2uZZWpD}F3Ni_P@x61sc9)(UFC=a0{ZBufUis`Wof>YN5&-VqjL(kmZGExic^Jc*>xpqZYWa}-Sw1d0H{(>)#LoZPv#$we_;x{hRrqTUw9%GeA zLS)u+$-Xj41(kbFJ1z*wg=K9XPg4r0tou?tF#*mZi7DbyKvm>%BNG9*i4cc`{{U*| VZ9qrt;b#B<002ovPDHLkV1g(9JFfr$ literal 0 HcmV?d00001 diff --git a/bus_analyzer/prototypes/odo-last-digit/4.5.png b/bus_analyzer/prototypes/odo-last-digit/4.5.png new file mode 100644 index 0000000000000000000000000000000000000000..76dd910637a491846650ef89c8e3defb301d16dc GIT binary patch literal 703 zcmV;w0zmzVP)+PmAGoq1gZGq%XORjsOObv3^`U)NtBOa?BgvZzmf{^6hbIY)0l@NY9$?w_Zwe6t|K|iGGE^m&SG+Nv~OBEqQ3Ul4Z<-f+n0X(-fp&-zbgeS zbat>jVmQ~Yl&hl;7t6)yPynE2#d!t!csSUG-}&f^35@*-W@3O|Oeb~N?5GMgIRpSk zq#@-yH$s2>HR8Tq3v{DS=Z6o*;n;3z_0yl8BlHMnm8JG{e)rX9r5C&G9w)z#9M~xU zMC)lW`grCU9%dd}NGSE-7>NYZXL>*{()_2%Dv{Vb+-_p1;6RFE5pXbG?w-v9ogRNjAZ zM0d5nKqQ000Dnoc;Re*pF`=CC&j- z5Z5N4Teg>x`vW-sPeD+RwTf+e6bK0C~}nu5@C9L{rG4ApFaNK)%gO-RrdF4h*CV+egBIG z@Y#>wj;5Vi@}hVoB0x_3kL}OtdNZ1pE1=HJa)R~HOnw16i*i*n_pSr7FyH&~^t4}3qlpmgM&znZUNBmf!{bl47yTU}1kuFQ z%6+R`X*F4(n_Et1RHy@TlA|b7+q^!Tj%Uq$mJ79^^Xl5c9eBWswmti9Zrwr?a3tes zc>A+kmGiQNYx?Mwp()3~5x`_G`yZcpicU%~SrS0or~{b%@0W|#^R@lyj53l0g=+bx zZDanP^dcSY4(t{fk2cQw2mkmv>Q^y%wy-rLJ%=Q=r11F|4k zCD~#1)3d>#iWH9i5C9Z1I)Izc%RGOPYn9$4z$Cz+2GHmNJ)~xI-uQ2c>v!3l_mkiA vLF0q^=N*5zc{+e3f#)ON>58`oXMg<*cUxfsq1jV800000NkvXXu0mjf0GLWe literal 0 HcmV?d00001 diff --git a/bus_analyzer/prototypes/odo-last-digit/4.75.png b/bus_analyzer/prototypes/odo-last-digit/4.75.png new file mode 100644 index 0000000000000000000000000000000000000000..75803cada3b27ad8b188f1e4a70c67fcc974349a GIT binary patch literal 710 zcmV;%0y+JOP)07$2lWq>OOL};cbhLn}&DtqVfxO(27tqyqFt=zLTE&CT#ck57I z9{uw4>Hd4|+G}Sh^4MKwJNWDnKK=3Ile~LeO`stp1p_>2zk!!$k6(=S6U&Jt$N*6I z&WAyd%S9}6v+^M~Fqm0ARc{{(4$%kh-TJb+8cNVihQ9ge6VQo8sPBFC-AeNYMnh4b z-n|PrONq35?~9N3atYFiz-e{RWw;bM54LJD_NE-gQlnj4lEEcPe)-o)Ykgk==9**F zjXQ7wu=&xiS6$`*P^n5h=iI)32d*q=c-S9xbu%WW+I5cQ=J;*nRH}2VOA?s_DN&0L zcR$_Kp1QZDv!&kEQkVeC^IRBxRp9Lh{dCG@vru)ov0OYmn=4dVUVZ&}e_Uy}sAwQ+ z{QlDmRMjAPb#s4n+gfZO0&K=~1Y(t2c=A#EB=$+tJmni5W1eiGYZy*#30UnEE#{M# znY1^+@s; zs@4|e^=!qOrDR{Gi%De(N&t%hdh(`>qaUZ85iS@dSP=ttNt`cM{#zUlJ4P9m1W_`d sns&Uu@%vY++cgLhub$A9YWsWrFDYSgp&iki=>Px#07*qoM6N<$f&iXG!~g&Q literal 0 HcmV?d00001 diff --git a/bus_analyzer/prototypes/odo-last-digit/4.875.png b/bus_analyzer/prototypes/odo-last-digit/4.875.png new file mode 100644 index 0000000000000000000000000000000000000000..55201f1d2494648fddfc70c6e6264c73188660cd GIT binary patch literal 780 zcmV+n1M~ceP)kdYapfX$of*=XP zG9>`GAl(vr?B=qK?=aV|Z{Atf!OW_~gNFH~Ncw=frwZ=ly2w z?!Ei4{Np#vUz%ol$_e&op*g|2(a~Lo%^rPqxq$Sm);LyQD!h%!i_q(hFx9o; zdOgfe&f8nffsC)&Kuw|?+&J2@wOWcv!%CqroEN&HEo5nx;hp%iutDt#a!; zOR~4`eOyGOwvkdYQ)EwSkv!U7PbY)yMO6i&LteDyx)~yf`j5xAb-C)F(L*%ah>dGv z$dSO~`IGD8wENwfs1}jex8C`DV9afYc=hyhIGGJ=v@I2s*Xqy0m?JE8mtzDjfGjQw zzjA?X?Y>^04By)OtC^<&WOUIga^7zHR=u099&Ya(d@^y5((L4?r!BnE6%0qWR%Zvw zzB6<%!1uk`GcTkIH*D|gay>wJa-n`yKYX4QL3p#WY7K4_9);*0h%wLr{Uj$ zpqaSupa1+qfFQ!ge?FNs&jJw}g?M|j{51wG@?2n7-+p~MXmWM{h}hH9rjZmY(Cqgg zR{b&}herSxaABd|0XE#)sT(n?gaqJV;hHx00W03iv$NfNklNfKS}N6~ ziKi#Y*|+a|mxDx{t_wVahhIjuI;eLinG^&HK)q?tTCpY7m)gKowgQbt17POHpe3e6 z$w8Qi9_EB+b$QliB6nRDNlI%h_jk;3{M+&E(~Gh1&bQ|PD5PB7`D8D=|Nfho-BAly zs8AB%lluLgL-XPBcbk?>k^q1Zq11i&VCMPkqDQI$giQbfkSuLSbJb1jiSwI_G@XV3 z32xP4qN4!x+n;{C?;fBjhJi62Hu4k@{O*JM*CT^wD8tASyOo?~ChY9jOe#fiIzn*B zAt1(+^)NE8d#ffOGMg&kkd!Ze`1<+&c6~P3a^-3Q8|HPoK6SCK!z(0E1gyDco1LHZe{Yo)iGQhLy}_ zMR;}h^R?!Ci$;+FCYQ#(RQD5k_WWfxU+gxiWI!}U9wRk3yNd0Q!OBGe5J*UpRb9n4 zuH*y%_YeT+0x0Oe00v#HTrpY&#N~wuFbY7yeaHyH06>5dFo3C490CfV0D|BIK?wo) zvy^DUC7&b#bbw>{qb3no4Nz19fgl0@xiXe3IzW^nciAje{{jP_fjuRAkf8to002ov JPDHLkV1hP|N-F>W literal 0 HcmV?d00001 diff --git a/bus_analyzer/prototypes/odo-last-digit/5.125.png b/bus_analyzer/prototypes/odo-last-digit/5.125.png new file mode 100644 index 0000000000000000000000000000000000000000..f16b3e7e32195cf02bc923d3c939d39acb9d94fa GIT binary patch literal 710 zcmV;%0y+JOP)Z+;u0o>e{d57Z6Zodab~dnA;_BwSAM4W-dFOAwQyYb% zrs=R(1~D(;vvgZN+}D+U9cE!&W+P)Ck-l-#&x4<0WPkOm5}yqhvq^mwiAeT1(?R~x zEDlHYc%Z%s$OQEJ45)mxksj6CA8+gWr|qYtyHfLEoYN_BJm%TZ$40--@a*EL>t0t|L#uq@`qMaHZti{|w1(Kg-PWAN{T zS%w*am_D5z??1nDxW!(0M1A_`SYjp-%b)K(y|+A`XM}r%YcWOVr2wJ*Z%dmpL)S_I z0HAbpDnetB03hHTNh~^J^lpA~G6exBB>@C0+r8$B>c$s`yC49k(E(^VY4riXvlpkm zYilbZuEz4&Qkx-8QViPp7670GSrFDuB5LO)2S5@qaYkG^Qv!fNB!M7wPLL7;kRU`L za1j%NB>}($0tf=S5QMFak^m8S`93Z~5QzUl0FYAHh1g3S5)j3rl$5%JNE%63{Aorz zKTH^qsW!Xf9(U<9qXDhj>;PCol1Kbz$W$hfNF^X-m!2(NJ6-AVKl$oa+|>S)UjP6A07*qoM6N<$g0s*_G5`Po literal 0 HcmV?d00001 diff --git a/bus_analyzer/prototypes/odo-last-digit/5.25.png b/bus_analyzer/prototypes/odo-last-digit/5.25.png new file mode 100644 index 0000000000000000000000000000000000000000..3b85e88b7c431660934391781a8a4b5aa345bffb GIT binary patch literal 723 zcmV;^0xbQBP)v0s%5e#7U52 zT&ql&tEQW{O-wz2js%cOynwTeMW!(sv`3J_nzz%@=U}K z9g7H33* zY3TNG_|C+<<^Yt%_rL9TYhQE!px(w_8h`S!Ifs-(!~B&3RnU_6qUT2+nP*JaZJi>+ zJW?rL1BiE;LQfALFJ8>vbkJ0 zo$QfE>mOdSxGBl6zx(O$vrRwboY1jK>-i;&AmQnk&zm;FvH@W#0nwstt+?z`Vc94_ zMG+ujxq#k2dOE+fkpwzg%O%ogsowX6Bo^YPacpmJdGwxoMk?<=kHT z9=0(}-6mF5njBVO7b;4KRT^`RDG`DZ7GNtOAOI4SNB{&0I1q{wQDNy-O{l9Nf)HDU z1V99c9d54xK=?ld14w|pWl2f^Utd9hc7_r~;nr}+77-#r5`b@5(RS*c!gQ1EBZYRG zZkkC5nn7-xiy?M}VIV-Usb-@oyj`CCTh>e>1c(gFt2@Vcr*QoF#j`X|m2Rx6L8J5i zCr^(CfA#A(&$%)OAwjH4R83xvPLiMh^=uIUbu*kI*k3-Mzu}kHmMY%l?-rMc?&^;N z|Ghu%yJ8@rKv3+WPJ8W-Gk@8P$4ti8|0bK}E^|K3{{iSnaK74^9B=>t002ovPDHLk FV1l>+Q9%Fz literal 0 HcmV?d00001 diff --git a/bus_analyzer/prototypes/odo-last-digit/5.375.png b/bus_analyzer/prototypes/odo-last-digit/5.375.png new file mode 100644 index 0000000000000000000000000000000000000000..cfc6f8f86c46009d70affe995a5d3bd205b47dbd GIT binary patch literal 727 zcmV;|0x127P)Nklh=`PwJ&>|g8YfH~>BQHtd1b*IV7_@gT=a*N%&LmCV2|!SK_w&Lo5$Zy-hFnKM7Ln2 z%%*JsjG+JXjczRmB@q0RVM@^kxWv_+N?_{jUqxk^~?q zmjV)yq_wC^fTZlmr5MdXCInG#$SJRy%@BZb*mHDCt1ChBuzWOY7Q8BGk-5t>9dGVm z=^tz)U;OgTaK6|}GnQ<$nA&zL>>Pc58-9BH{U3GPcwJD=(~2OCJlp*^dNVm0UdYm+ zvey6o>G;6MGgK|AcV=5vv@Rzypomv`t<#4v79zy6;|b>x%E-q`qfLE zuW?D&!lL;m`9tg~+APOQ3C?euR_$oe^H@<)<=!Fg*W{??~oYYKq z4zmy4{r|PR=){YHRke!62UYxRG{WlMcB4YjQh)f}FLS1}^WLlewZLk<8L1fPsXMi! zYpVI+t3Cg;%P=#DkO=J_|9BYk`wv&W69aw!vQDPV8p~Nx7<`?szHN`DmoYMjd7Tdb zI4NLc3(t=auh0K|ehoNNs;lQOP6#P1eDU+Qmq!;@a+u{*rFuFuS?U1q&wl!6ZeS0Z zU{;}th?M{xlaY@+K~j|g^hUf=y*?@Q=HQFtws@7BT9N`?V6WbK0D5zvi@Qx_xi%ma z5|!9&7`W`avZ`lyORR6A8)K%{j@Jn@%Am zPiyx0F~ROsw3RkE@3Z@@6O_i9RRZWYkPZ_#aDSzZ1Jdiw!w4DA(AVn z8?QZln{LY`V)1PLWJTADfMispH=8$-8@w21hsU+r9umk9r}w^W>^#PFPtniknE(kS zg`b^v{(E<)${M6^BED z@Iu1>&I1rZ0iXafUesJB3IhI%L|CE0O$8DGU9AuzB7t(|3XTv!0HR{vmQr$L zIjl;;yq#BpZkhoFqN)fufUtJ&!D27!JI_1_l_RsD`WE*9+7)n)JLc)9%YkN^Mx07*qoM6N<$g03TUv;Y7A literal 0 HcmV?d00001 diff --git a/bus_analyzer/prototypes/odo-last-digit/5.75.png b/bus_analyzer/prototypes/odo-last-digit/5.75.png new file mode 100644 index 0000000000000000000000000000000000000000..c0a6c6a1866af40113fa4a2cbd00ed981ffa8d69 GIT binary patch literal 720 zcmV;>0x$iEP)`C?t_+s6cWp}y6@V^4hLv_P z8d?R<&wo9-zqZxn!R)Y+B{_~x$8X=c6MpgA*RM|2?%g`gWjO$h#O#dsKlxnV{`q7f z{NA7dE;mqtcKQ%<)uSANuFeG=3}A>XOTkf9U{w!ytWU41io$sp>A|kxQt3F}dH17w z(NEV9^7*`}9_)!ul4#!h^uwmKM{A`A)WdIWK@KGEx%qJ07U>;_Kts<2!UUR@hx;d` z8sufRs`8X@-U&`1*gkta-(C0IS~IBF%~!fdbvUSCK6w1y`o{QnSEY#lax$#7CkG^` z-Opt(sxu*VVO~%6;DA9)Vk(Q7i3vFf9)o_>LEG6~Dot0^`@hA-%8ENB2ycD-+4)KS zerSF5^B?Dzton_1|%Ay6+xP5rJSDnem^dy z7?Tkt3QS_njn^+)e;M1WeMgv?

eruv(9&fBgqd&xUt&jn?)60000q7gNbx@@eO<~0S} zfx+EJqpR_uZZ~yyJdFqpP{OP8;Hxk6{QB>1H%|U|K7$pHP=K)Z{m(wNab7fQVZ8g> zkqKZ>IDqDz&DMt6FB`EWZz zx%U9@Gx<239$TUZ_EIAC}Zh*Pd{|7}alrCKXE5!f+002ovPDHLkV1jy~ZB_sP literal 0 HcmV?d00001 diff --git a/bus_analyzer/prototypes/odo-last-digit/6.0.png b/bus_analyzer/prototypes/odo-last-digit/6.0.png new file mode 100644 index 0000000000000000000000000000000000000000..8e73c455d42ba19d34104f7de6d562d332de8103 GIT binary patch literal 741 zcmVB&O5O zWaj?(zW2CDx95T9Ssgz5Yqxn>mfe0z$Or&snAWZ}xLS?8?b?2p>IA`n5^f0rZdicQ zMw8q?5X2zDBfKo1ZBw33YlM#g6-K+Rn!}yqn}E8Ikq2FM@L3;Oa#v)fIJ^ydkdoiI zcZgweUXR8$^kt`d>jCHh*j0Bv`KS!%7vs@hz3$dtzws{R5`oFv_dh6k*rYUJ-*0P7 z>H;^?I6F8rgEfGeH`6Es1Sd(neDX_mP<+ZdFV>1xiTgF3AZ+#H^84fY@eJeD(--ZK z&G5cE0I@8#nYT{IS=&`FK;x5l+zG&|vJ7;aK9>T*3Jxy&i33nTtgEy^?o-wGQ0j-E z1Cnfhd@?OpJ!t9j*)>QJ4gegVe)?d#Jrl>&qpu%lf;Ak1RQBKdc>3b`Ok)hUetu|( zaJc};507^nYbGp6GcN{&=pcdGu9mZ?%Fu3yKhFyZNUi{ofA5~2yw;p~Szmqkj|4=( zqbTC~x4(Znnva$T7XLk7DJ&#-iXO_i9u@{9w{{a2eUZVNok_{B?y1uwVxeY!jQYnS8fz zl4OK{2}oKNNeXN`k~9Jm0fq^|K$y2iBZ2@3Kqd$gp!|H#6Zz^SB0vEIDc?^95(EI= z5EB4`xz($UqyRvWAj11i7A1&^qHH1v5TO4`h*2bk3IY;%Q}u86JTV{?frO&mSS|hs XjG2m`8`%mX00000NkvXXu0mjfarsep literal 0 HcmV?d00001 diff --git a/bus_analyzer/prototypes/odo-last-digit/6.125.png b/bus_analyzer/prototypes/odo-last-digit/6.125.png new file mode 100644 index 0000000000000000000000000000000000000000..6496bcee82aa28590695af5f0c9f959f8272762b GIT binary patch literal 693 zcmV;m0!safP)3{Dcs1vCT{6a-falI*e(f1myax9+kD2yP@`P*Elw%_OEX z_FTIAyS%4d7_}$0tg7>z;=xy6KW{S9#liA)SeMCJ;pyzdFFtP_SrOd(IWk683eAe&0 zJt+_@i{iqt1?T{PYW?fw%hjklJr45%o0n(rP0b+)@l*cet?_tai{t(FuL`U7&OJGV zU_Slju@8sy>E`HCcl4$@zHyHZ2n?O{ChCQ3PCQ{6qpckPr5FvXyjo-ob{D5TO7>0V z3JR#Me>~`y>TK7(|LvfS+z<{3D6ikSJME6Wo9>+Le{2pWeuQ^sN@(&M7khE|?`fI(m4kPBv-$y9d9w zRvRF1yDq0VI)3z^Fft8o(Fu?MSC+^II7IRQJly-X72tz%FkafM%;+Qf92=o2(`0J! zo%h@2VpUlek>$zIEdRVxT)S=L=E+IdH><7*gTVkq-f-{gesWxxL>Sda4&+RrEKiD2 zO>)x$Zh(}f$c9Lu8<1R}K>(1jB}y(Ri-r(H2|yRIu0{nN0AYj$C=x)Sv*^2$TnVp< z5Ct=55<+@q0)Sv3L*Du;2f)984zNhRuF3Qo(g7xMgCJuY2p9;8ks;}S82&4HzX>RB zM??bw<`4fF5Zecdj~{?HwMv3xw*?B6@#!KW{I_XwEx}UU4@#L?F$olwJ)Ury5Xz znk%=BE93WtCfBI22fA

KHq!(0*Od)m_gRLnwfVU#O7{pKnO_=foMigcXlGZu*9nN z2vTyiEi4^0|+>Iufp|Tx4@qL8xZ1b43zO69T-r{l(eZQ9L&zVb-QrMJx~QtchoTPU`hvW`mG{ zO0C+KTNisbKHN_n)2yu~r@=`=0+ctqos9AT($;Lf5Y1>5lFW<=oGp(4K!73uiOZk} z3IGL2D-Z$EDQL+6xZ*Vi^? literal 0 HcmV?d00001 diff --git a/bus_analyzer/prototypes/odo-last-digit/6.375.png b/bus_analyzer/prototypes/odo-last-digit/6.375.png new file mode 100644 index 0000000000000000000000000000000000000000..5aa02afb64e39d736716abc970a49abc8bfc9477 GIT binary patch literal 744 zcmVP)0Pg3b76 zJTu)reQzBeJg-%%?|f1n{`c)S@63)*>t=%GY`j^#{;N%P@2jsHZ+ijN!IQ^T%x+F5 zi#I>dI|D1hha8YU{NiL**AtG)@9SqEQWBgb#hs5ntvggZp7V>T$)pIU8CBwT;Jo$y z1Z}FOgG}KGAUDsyo9`|c?FSVWKh7hO1@t;HF}(lb>abgu5##E`Z79J2_tJ~j|GU~9 zZn;TK%)3A`cX)O3==^QTU4I>cTy1h28gVpoId%@aWRtP#!ZFN-VY!%AM-N>-eEj9x zi_=LPC8d!iO4sW$J^kDV_p`}*{$R9@pr%5Art_VHV~|}8xdf36NQh{y!Lk_}3tLGl zN~BQ$fG}86gew3M5`zE%NR%MD2r_~IL;@f|NPq*7Ko9^$2nLc8-2{=k%OSO;0x}TT zUJ=-eLk2x*2SfZPI{V zE?;-Ep6zZfk>&fVv7c}1y`v-e^5w5reH;D0Br)B)a;4Su!zV}Z?vL*;+Y$*zDH&nI z@nwD1J%#s+H}C3x@MH#npz&fb?E|jKeINRi5KM3%`fk|=*Fz+qe)4po?6L8>85(cj z|M{|28OD+P;IpPpP1UWe9`z&7|I8LQ5qVrHF9%K7#PcA6sByObWm83$+p(|dR1TRF zvi&Z^@8F{LSJ%li2qZT%D>vuW;cjm9>~H_6t5Uvu zBSDq*LVKJ}+UJ%3M(14v%t)0oL^EiZGx@m_1*DTGL0GCx*0y`umjXrO*rZmp5m|(G ax#ItT%a7Z?BNkl13M7=_n*_j^8)nACiksyHYLm1@y}IIJk>#6KYT*98AVhE7x}&Lk8>5laXSHA>Um zdXsz4J!kLzE(g7?;d)pPi{Bo9zf5}%KE3~TBFCcTkKg>#kGDVj`p7>%DN{H4ojY6E zng&fi>Q$IN`kcPKwXx*#*_b#j%g&CE85U{0{?~niM7#V+oAdH``*3e|GEW9BZ+5(4 zfa%HcNndc$c(=H^jL?+Z);Ci?!*G3SQil>XL;>jBt=}DNWbJcdm_^74?>3@(zjwHb zuIo3a8~}klDQFv%`v+hAJpx@C4FCgmv@!PIOTn^yIy_6>-Bc#fKt@{CSKmAkbF8%L zdsYAd2naAT#Ib}LNQAhi0%;K*01F@x00fW(AkYDjS`!d}L`sr_Nd%=ecvQXwAb@~V`o9t+!4MD=>3}K}k&M#X38M+F$c!?WrIcQp zh>{u$dMsyBeh!c%h_@)toBkld^ZD! zlGwignix}E-tw{vNmBw1GDmvjR%)x|n;kEuR+u$rL8`|1>(IBQVXkgXs@2$7Z5Yat zXSpdMCb+c{l7X#27;t#A=<9^meatkZW@HPk(gue`?Kf*XTyFWPHi9 z?{0wy1;d60Knn^@MKlD*ozV#AvZG<9W1p13r3Ipr^sELGIREHu90ceDLQCy3p;TdF zFz4J{v3P(1E{n?n&k#$?LcMS@Bmk^)lL17P0i*#+DWRN)q@+v$0SS~UATx(3SV5&B zAOj<^R&NB5*{3-p5gLy5;o^pbMw8Ook8k7gMxNaPqI>sdcy{M<+pgA0*N!HC9rpX) z-+p`zF@E*O;j4eIp7+toNxy>W>m&7_@mALn<)4?wc>VFh_txT|?@KQ*%Hca8I$N*i z)4deoY-lEUzp+L{y*WNS?l(`nHYC_EJR}h?kOE*%Gg51#fGZ8kI)IRd;|goM)ii$sz&b{F T!S@}T00000NkvXXu0mjfwoV;M literal 0 HcmV?d00001 diff --git a/bus_analyzer/prototypes/odo-last-digit/6.75.png b/bus_analyzer/prototypes/odo-last-digit/6.75.png new file mode 100644 index 0000000000000000000000000000000000000000..bd99609b1dbfb21743ef0fa03a7336618f84b0fa GIT binary patch literal 612 zcmV-q0-ODbP)fTHU9sPF2^ZZ{8h$mH-$4q^e$h?)vp@I~kYDTX6_QEA`Ek8HhW}V518WO};DH z#&XVMn^l~nhA^o(zY9!OE zP6{9>a|kyfDk_o7%GQ>45aBY{NwV8cj!#B_!t|l48#`04f4e;1oSp5fVYzK$e$)EN z<0s1g-M9Oz;mgPSYN1&77t__N(~Ga3KUHoo&oBOd`2MHKrgwJQ?|Syt({yehJlyGW zA2qkwmM}5;h-;C@&%Qo?b3JLt(eS(1yZ76U+Uf}M=-KJjlMioqlN8ynKJ0(^{?DOe z6+MSXk34@~Gnkd$ZO*=U{c5N#lwmx&g|YGdll7-Zf=&^K&vA9DO5^rw3e`MsNF$&e zMo4NyrrqaRxlAt*mTaWVZrA9rZ7@h(&9=)v%5mEz~#FD(gN>^8}7ic zw7?L_wn9RnSTph1A{Hwu5t{KF8V@}Kop=7l(YJQGNBu^Bf`5W zTvb?$<q5ct82>!T7xO?D)k{Ge`^)n_ y#_>J>Jm-(Qbxf)#qS03U-9NkjW%Dm}GiGTjNMmLI0000IG6)2)+UWFbHlH<25oG}cK=0~1V^bkaWsN{2 z+78GDfI>$553Po1vSlFYQN}`UZbMB49u!dHq6&hf$p-hpg+*ahfU{+8XQ#(=io{hm zhVH2(-@abI`SRi4DCJ%k^C|0_U3+$%ZS(5eUr$aR{1p-E!S=zyusS<`{Nj1E?N8tT z%*wm+ZZ{}W1bO-B+1Ip__rG7a_k}4Nq0Er~JTJBL+2^av-)e_3x`N0Xu*ESkT%e7l;uM4M>--8cP;$+Xi_N7Ul8zKA9ic>Tj4qD`P> z-jG_VXUG^H$Az(_CMMx1yTAx?2B@G#x`G5uk6?%?WkR%s(I5#SCLZUa(aCJ2cDjeYI-FRR6`1#Rdd5}4@1gJ^_MT(;r(|6m4PgSE(A*k_kwNLYQ z<4>k)1tj_)f8hC(!;KG>E%&!b5C~Y#Zx`!bizZ-ec>sbCRW+YwzgAlTSC;#zXq4r{ q>19v1AAz;$3b2gIv8>&0a{UkQOe4L1sdC%^0000+P)NhL)=*oi8f+Ee z%%S&Kwt9bY+OLnEH+x89B#n0)eZF$t{PXMj?C{IdJ@&Lw6z8yb@`Y>v^M|wdi-VH3 zr4r@(Mo-37d#O5H{BfR?MGF5CEiQY>2%9BY}1=f!L$aB+A?H}9QmY*#m literal 0 HcmV?d00001 diff --git a/bus_analyzer/prototypes/odo-last-digit/7.125.png b/bus_analyzer/prototypes/odo-last-digit/7.125.png new file mode 100644 index 0000000000000000000000000000000000000000..05df0f8b0d638a5f62a2641f450e3fbb9a8a7b08 GIT binary patch literal 539 zcmV+$0_6RPP)ncxg_){c9cFi5zM3)~9gU5Mlt3*$eK=;AdrO(alf$+*gvV0O z747G{Hy?jEhd$)~+5EOdT(jKEa_Fhn=DaaDKOo<>E1i@+ER2yEmo0Fi(Su(2>r zApnTgWz1?;Ed+HbZH}>9Gt{Nz3w0`?b(RqVED$WJ2}SA#5I9-1P(+X$-ny2x=p=z0 z*K$D2hOyQ8nFui0W}U{pgBZIB=W29g0Ukd470ZLCt@4VpvhBWjaQLmBgHA!47OVCw z_x}97Pu;9xTk~^o8`6M;u(dMVi)NbuBnh;_8JIOJWn2fYp%|ww8fv{6SN8^ZV=WMh zawTx>w*nI~)vvk&gx2_8i6tW>E07@yR8l%FYFs`5S0-Q?BSX2$Y8af$?tY$7$VF9k zvqMyj`MLM1#EMSY=G`P) z&2A(`5QM+T%5LnjXU9IQz#!nl%6nJ|$p<73=KXjTo`VzOfW#3A*~T(RnEkVMJTu!> z!J&I*+?Q%q))$qLnWZ29d*t(O<0F@nQSdK6|GDDX_dlHEceLd(t>{0&FXxSudjMryF{L*!w%}L{AEZ@vc3&zsY9o zy)4n32&%>bXcm$XZd3BLj?(~vv>nXc+~3trzc?HSBqZZ>l%tZv?N2w)`}skgrpm^- z{^H_W^6}=^zt=-w#-2&7!Do->^H<8%_3gjIpvj&Z!f)4cx9alsyH#~a0mznwhmV`} z!z}-L_;m4r6t-}61VPtd{n6*|?+$bBYBf!dP+cqC^0)Rs*)|ymZN3c^00000NkvXX Hu0mjfW55+z literal 0 HcmV?d00001 diff --git a/bus_analyzer/prototypes/odo-last-digit/7.375.png b/bus_analyzer/prototypes/odo-last-digit/7.375.png new file mode 100644 index 0000000000000000000000000000000000000000..82d49e4f25efdb664ab268060097a955038f03c3 GIT binary patch literal 676 zcmV;V0$crwP)>O^4FWM^I+Q=0o2?8J{1QTG;t<$Zg`T;^9!3Ex;0zg!(3=#;}e=>l8O*$`9K+e&K&{(YB z>9V0V$${5y0D$P`wc~IP*?}N$WdP9cK301(dmP3afc#(B@}HZ&eLndt(?_>EP*HNGO6L z1o$0a0Pl7T0{|b}0ww}rAd$flqL2YrW1x+(B47k^lu{%>0trDw0CcdFLUBU_#6*P= z#Q>KXO_nPr6CjwOhql&m*eq6SpUq!73`CTWezM8*QF8wB^@+ zKZL(H{`Pc{>-kic00L3s(vRNjD?dA3ZiYNu11XsRn4#G2#nql$zgWp^d{cvzrO+x5 zgV#-p;`5L1PtMMc8fkrgoPpeQ?zP{`Yy0T)r|rpVm$}+}ckvt`YWMA8SxS9)^#1Z1k5UlFgvopI{JB}?y2E=E8Ah<-p4GD4Lz#Z{F_-EXZP|jSqARz-%1Thw1mJslI zzh>ThT^we?sY@TKt5sdy{5)?tpG|#2OQty3KK%A4sCo6%`~Dd$ZQEOI6HE!}R_PZA z?SoJ5`F$l6Yn+f^u=cGP!`e4qpZkq)5KT0D>kV0*hf=&T|WDrNv_D%me9A&uK zkTMVeK@#L>atsGPD(sm&M41FQMQ{w|W*iB~A;}2h+1)DuI4mMDMiT-EB0y(2KrbL= zd)7z*7Vxy|>(EV20waP3lOP2h%g4K?vpe&3Ob=8`0A-hIclX$RIQ!yB?oQ?l;V42^ zEl^56{qSS>_J@ZH^TWgIQd2cV6HwLZOO&rKe_w;EKLWK9Bqf@qRfVgstSB?@xGSkK zT=g}SbEeM@j-LdN-??{E|LVKOS7&F1nnVZRZLV^fyz9LxY%} zfA_uVP${C%UtS34DxKa8n%GdXcLf$DW|N+^BR#X-mHg zW$|O&x!rn$^6NL3GNp~t%Qh;uJiqYiq#Cte{9O{QN^WY)M(gwOY9w=3N}Tq|w-L1o zi53U|L<;6%v3|~f9*$<$l$pRmAfzyxm&ZH5$hUI`7;hdYnsiXV|LtEVTWJyBgbWt| O0000WKpFgliLPAso z0s(dBeBvh>I}bn8sw~UkYwx{}F*0PIZXN;lVei~TAW;|q7X{#`-fGI#l{+iJ5&{YW zfBy6_(tfW`6nKLjWcFOd8r$HmCYE-sclAPU3f91*UDB!HBJM2h_V6BPk8 z&>$fMaVj7rkXV8M6w2P=K{p_?c`o(Uo9-Qp~ILgNNqBBkd z%)>`||Fd62^vSdW4W3agX}o9S(F{vXdmY-9HVwf*I4|#h{7L`#_;G$E?>-wknS-DS z7`(0B{vsWXw-w8SZ@)R5g8&Rv5WTG{aZqi?I_VvLw+}}F45F~4(+%Pp4Wc}qlqI7A zFleBL>CrH?6fyeZpsW#XQ3_GviT@#6>)dqwbML3!Sw?YyiGaZVA8EeP$ypa+e}>4I zTvVwM8qNztEVVILP=f*%A<&5av5!ba1!)Wr2Ea-J>e{RQYbURgjBa&Q0tz41gaDK6 z`&%EpJd}3o=Rba5IZ=vQN~bl_?Va{DwhTofzwL=exYUFKy3Nh&t|e7fYxmaRWekB% z^{C2PXl`7MGM~=`lrv={{qCoRa2H+ RiXi|1002ovPDHLkV1ja@PN4t* literal 0 HcmV?d00001 diff --git a/bus_analyzer/prototypes/odo-last-digit/7.75.png b/bus_analyzer/prototypes/odo-last-digit/7.75.png new file mode 100644 index 0000000000000000000000000000000000000000..8e81bf4c0b76aa22575a039252e5c6e0833209e8 GIT binary patch literal 690 zcmV;j0!{siP)GBB^th+* zy>(cOV^0>fId#4&sZR0h7(D|hK}04%2AC{|Z`apl5hTSd@0|BE7S2q@OY7Xg35u6bz77 zpmQkhmk4%x+;qMDLFWpNlv!m%9s6HA@*)56-POD|Q&)_phf;dpwQVm?;wL_&zkjTn zn2-mf2M4LWeARd&%pL`)WHLrht5wRHv0E+*7f3!Qk|Fp=f zlcU$k+-+X6c~km+I0@_3{PaS)9SBgq!5ek__9BdXV{@qX zO4A*sSfBm1nrk+&eD-P?2{<4K4z$I|y){>d!`1c0@x{$c2ExPPKel7yC#EL_7K9Hud+(I%8gzY0(In?fw7qZ|cT%7UbR?WgCH2DY^~=Nm Y0mI~jhl0;?7XSbN07*qoM6N<$g7DBnGXMYp literal 0 HcmV?d00001 diff --git a/bus_analyzer/prototypes/odo-last-digit/7.875.png b/bus_analyzer/prototypes/odo-last-digit/7.875.png new file mode 100644 index 0000000000000000000000000000000000000000..9f967bd1fcdaa5158501bcab2215e9d6620e6e5f GIT binary patch literal 721 zcmV;?0xtcDP) zTTdKU5QMAx^vv$;1@D4wEEE)CiwGrBl!qt}`2+duc@I(|M_6Vd24h3GEbPwAIbC^J z_I}r*0NGPQ+75ZVHt8pU!r{0Pw%ztcGO+x|@0Du5yR1Wa83mE@P z5yX(7uB}hz z6ZL>XAP5t^YT#Hbuo&--S_uM3spOcxd@YZw-`l5hKFtucIli=ITLZ-7>Wg zfJe9P48!L~%{_Y#ef?K|K@~_Y8jD5;hg-|SDtSJ=yi9^6IYJ8C`R=Fb!zz4SwWH&{ zE+XU*ButLJwa?2*{VbhT)gVifd{a^Xem;$KpRahgIM1Pok{ke;R&Q-m*SA$F<)SD| z5*#3quTRUYDyv}~tCNQk2@o8BXt&3IjD|y|L08VMwV8thu$24hRO=-$uG&qNzy{c1 zu=|y|zIl4qd}`XuIsm{0L)h*&Uk@zzYufgwn=1-{To5Ls!|z{{1gYEOSyMy+4gqcO z#Sf)Z<5sUvFIN>eKpKJ9&TsJiH1i1RloIa!s z8U=KJwt(14p2k}x;=JoX8iB1}7a3MWc(wOt@lFx~F<|A@s5bJ6? zP00&d5CjQA86VfBw3*l+_$7maXhtK&#j=Z5CEN6G=yH1w>#&?{00000NkvXXu0mjf DYE@8E literal 0 HcmV?d00001 diff --git a/bus_analyzer/prototypes/odo-last-digit/8.0.png b/bus_analyzer/prototypes/odo-last-digit/8.0.png new file mode 100644 index 0000000000000000000000000000000000000000..b47ed13b1620e39888ea61fdbe07391d3ddd1a47 GIT binary patch literal 763 zcmVAnY<8j7MqF4eHAPNyuqzJOY60qe@@CVs~gxJ9X5C{=VBt$mxBQ}X` z?6K$3^XPkug(GVFsr1#RxI2mKDh4ybNB|+)Y_%NE`#e_&Gzb6?88D#Nnl#B<)2pIF z2COWSG_Mu#TAso?`@dh@u~uSdxz~rzPR2^3s=M()ay#g=TsN)yI;3#i> z{y;u__S@MAtKB3kD#fe`#B~1G=9lJ+#pNLM+8qQ!0syHwpSusoQw40PlYmJxOa1F{ zMzZCqaKcmeyAL1VK0o@Nv3&PnXISKvCuYZ~oZg2u%`S#;` z)>`S(+lAIVXA*D#AT&5@JG$moOolVy4I*Ry_cw z{$!~d{_*o}!vqNq5XeU_8(&#|-YqTi4M@dOLfWFvx>MS+XJ8Wk5Dx)DlR+K(jPIe*S7y=giVij|U+_geycF{cyOq)oO1p zr;EK`&J96G&UtNU&v%b*FW=fg@nUzl$iny(@Z>(L=F!ZCtjbw;IzfnNRY`6uoBwoa zr36jWRAuT^7p-^SGkE!E_;mf>D<&)?f$H?Cm+SW)5$+%LKHNSy0wMt*J!e;pQMM@UdoZR)Gbsl(ytlj3D<`^K%k8`J4{vcKcz<*hGHx)?5pG{(2zU+?25#onl;VKmKVK%l547Nt3Px_(Qg^)~Cltn{8hD2lp#oZszFZf-V>&AvY9$wUgw zSuUUbu{GVkGjB>B|9tAGf&vMAm|xI5xuCGDO`<9Y5N1};eAeWs?S+IV1OQoYzdb%a zZu_n6S0~T=YF@68Y45><-B*YG<<8pd;H&4Qx+P&iY43mf(KKsc$BVz7eEXZ3I|Krs z-hFc#79&c(dAc#Gl-Ed$S+ti6#hCVFdGk>25LRW~=`W8icc@`BJbZdC%QS*+S%&=S z%XVvTYp%J5@8=a?TsYx55S;(oXnpiIo!UX5%Pxp^XZvhSQyzp8)T01yj>r; z*;zmWhGa-)Da=h4o~D9?gusxwVKM@xXPShu3Ue7i7-r@MXa!bjA^_R-0K9I2z=UM~ z0T8Qk{wKmf>HpqmhHQndSLj;BRUw3M18{+1T)z=ck{|>!OqkWxUw?uMBveGI$Gta% z#bfZ2xjLcDVSxms$3uuw+LbA)Ls#V(viK3XONL?QQYCHWa=b()lvlD-o>vC^1A{bC U;0k~5O8@`>07*qoM6N<$f`2Db%K!iX literal 0 HcmV?d00001 diff --git a/bus_analyzer/prototypes/odo-last-digit/8.25.png b/bus_analyzer/prototypes/odo-last-digit/8.25.png new file mode 100644 index 0000000000000000000000000000000000000000..c1e296ce484381de5a967a59585f433aaac53046 GIT binary patch literal 757 zcmVZ{=qFu+|#NH2ma?w!i;#QmSLC-E6EyN$;Gty9v4C!mn)xQD-mqudjG2%9tM> z=gwFz%o!^Nz4+xpcjwxMPwe2QCrFl%HND6|)#r!Pi?_GHNo?#DQi?`-0wop4MVTKf zRh2IQAu1*}QWP+#>bZHlC(a;)1XlO?fP3}{4>L2$s3Of+zb02lzk0f0;dB#Hop<$wbuWDud{3vr1J zAeSvD;<6@4hoDQvRW4q+(vl=Xfaz+R9zDS*7yv;qN+bn%Wk88qMv|bwsz9);L9bt* z6k=v`xET$B<*3=Q;b!L3`#-#7Z@WKYMpy`5FJ|8D?XEYyI=c5)%lA5Sfv|wEh_URh zr!O-{ab9^j_2u1nX literal 0 HcmV?d00001 diff --git a/bus_analyzer/prototypes/odo-last-digit/8.375.png b/bus_analyzer/prototypes/odo-last-digit/8.375.png new file mode 100644 index 0000000000000000000000000000000000000000..6c9bd7709cdd6133f406debf7f55489a43957f7d GIT binary patch literal 750 zcmVs-2fy8lxwCWuJvN?)liJpKHOS=+O6C(oD7#;6>f9K!7GXP=JUl2L=ngHPJ? z>iE{CFCI-Vi~*y=DE9Av^zmp~Pt&?hcMfKOoML=oUoJY)a+1?%JidPN{pi-@$y?3U*`q(RS=So8 zsjFoyr;C%)bN;rQRh2AIwFY0>Bu_)?=DF+5GlG(cTJXWW_ivi#eeWbDfXHDf?SEk5 z8}Dp3el#o_oMXC;=h>K;+$WVQfNBD1xwnfix)f)q#~HKp+GF zBnX-*%ekV&s!t+d$^aZ7u-X9ducU(he+&o^;UJ(F-}J(!1j0b@rQk~i9tn~V#D6)8 z5}jGH6%!Ev2m=5(2!@bEFi5S|1koc2^FDH)fPsP{X9E*FnnnG?Mu`ND`j)GvZMx<9 zcw-0N9)9!JkDI#+s(p2s=SQ=7wY#5sNvU#}WEJ#J1RPYpqM{PuasSJb3lJQy*;k|@-Ves zMt{QVlj049%^tUYJS}Vu?a{35#NODJbDv~rdeHgbT_;M1&07*qoM6N<$g69!$@c;k- literal 0 HcmV?d00001 diff --git a/bus_analyzer/prototypes/odo-last-digit/8.5.png b/bus_analyzer/prototypes/odo-last-digit/8.5.png new file mode 100644 index 0000000000000000000000000000000000000000..85ba6a98746170d3157a163e7b303c670d1bd96c GIT binary patch literal 767 zcmV#Sd;}4XC?Mg;Ku9ol zNDLm^n(;jDELwCS+_cngq!=2EjrevL^j@?|eKoj@dkZa1upB zYiiY|S{Hww4R38*|IU1V^za#|NI{H4G4jySqv+D>PBMbvi2(v8 zh{$zMBbvAfy&6Rk=q`{|5@)E?FnM%7sdmv8WjS6kp2nGUA>7!5>65R1>6N<`)wW)1 z!~CFb`}MH*?pwj;e;*#^*{?;v_0e$EOjG9rl$#q=J3hIHY1I^yj^}L$0X#^5H6iS3 zGIbHnA+c#-A!8k*dhM{6vzCf-|4x3jJm^)L9sRXHm)vP1186(@pNy`ipAOhNy+2=| ztp^O23l+UL-rw7ZwbKX7?9o%eMk3Zg!QOadGYh#0rMflB+E7&qR?{dvxxaN&q|D;- z^7rS=gT-!T6jGMo9v!^Bjoo5-_VkCtj@~Rt%QV58=FiKAC0@y=7Z=YjU0BC#U@8er z+MG@_{J}+w)*_<}^0x$iEP)5?Wc#$p`0V4>K`RU_dW;Gzm!4!-0A`T~4 zKbPcrwS+6`kySo&bgTAh-#1+ZeMc)`G~SzT4%eqSy2Yb!Px7Llg!yhNK-&NC&7H}Z zF#Y=7y%Pn;0Uwzm4Q{=EunxFcdbRoHFnQ%UTyV4-%T}qf(8>qv!y06c@C5|5KU_QA z-l$k*G~fRg3}rK4l>n}mU*DO+cGjxq;{LRtDgwFji`8c&zoy*0NvWOP$RRT(9 zjm`uDf#j4$ll}VZHy8HDqTbd#My#v(GMAE!Nj^OI*xKW(-HBz5>cRN$!=D~YLQTi+ z2cxt1)+P+|ZR^vM>67D>BV^u9H)=3dsW0x4xp}dp5+xV8uhn4yN>S+|QmS^Zof?&s zpXHoE_TSHD*^HEd{k zS=#OlGz+^;&)nL!?Nl5L$Gu+OZ#FN^R!Si&k=)EAKKkT~gHZvG*B8J3bgG#5y5N8! z?1Qhros^6zHCOGk%&QQUCF|ze13TiNQA?fXp7%cRyFfrWqEcQDFARA_E#|-uTQnDS~v4}q5Y%W#t%2^ zl=p6;Y?NF2r%OidsfQmm=uf7tqV+Sw^Os9$Pc_p|dy~MVg4y7&c?~6n;PuO&Pi8l7Ha#ip0G}+c zL@)*T;`q2}rfn6$^XD9yxJk)Obj-qk^00000NkvXXu0mjf+=W%# literal 0 HcmV?d00001 diff --git a/bus_analyzer/prototypes/odo-last-digit/8.875.png b/bus_analyzer/prototypes/odo-last-digit/8.875.png new file mode 100644 index 0000000000000000000000000000000000000000..74441b6f80625a9daa5d917f9843c1e9990b9a8d GIT binary patch literal 758 zcmVcmpqWzGU6g#;7; z#0fByR_G`M0SHw9I-S%2(;^TGgj6R02#g4zK>!Cp016QhDk2~Z03b!^6caK~1R$Zt zMG4}S0t>!wf~`3eqDmOkS+^<`hy8i_;a;`&Wrq?W%gd1CqhF80;Hn?xY2F_-;|F9~ zix1YHMZ5jw`@@^MRS0t54C}0EqANR}eHBgi|G4fv3|dj5zAMS;a*18S2AWFHX7s*R zgHmDkqPV(T=9(5w2^~Lua&I)M@}mFwufrs@ScD<>1%vHpJKIYGcu70YpP$_2QKXo= z)3No%?xq4{dT+7!(p{4Dpg-BGmfNJd+8iCvvpGl_djk33 z$FruL0uNVT+?@hWI1E8Wc(Hd-rCA%c#;55*NC#kCZYD&3ek*Qk)WGO51GON0kvCxK3zj=ID#~=_00QWriH=9p-+IV}uF)$Sc1OPzK@o?i~ zacT3U9lk9E03is9>0rZqxlN_%RNe{zfFeo=KDV36VjSiFxBqAgO;_xnR3;fz;k!w~ oZM0P`j6b0aO?z>ghZrkcu={Ug5E=v3jdUw;q^ZoSvL1=Y+gm zZ_V4|QQPPG?&tTDH&0G3w|&!WgCPo+l2{#$!hLsjy@^;Z)1dNH3bhPV%*^S4LaYz( zy|+`R$ldebuiD0~F*zbKs^hOed%Lz|_4>Dylk;LQ!VNjh?|u1TjLcNEqxj=hmRZnY zH2C42TYGscbT~S`5m0I(IhicF=Re|P6@emsX#)&t9L&g zJbi1jcZs?l4jY`Ez5o@Vd^q{){mCaE@Bf#o$_K;p^vCa~i~#A)-Te=~IcVDZ4hyAn zJN@~S_YmpY+c^xgT@aw)JRH*i0NzK)=bf=Kh!}6DuN8&>ynnUq&!!u%#I%j{@cM^m zf_XB!9{n==HL9j-nR@A+cy>Xh+7i4w{cg53gM=XP7jv;(wXMOg`gT5u009$0F}TY< z6OIqRc(T`8K!C_(+H8(r4sU1o$^Omriw{rFgM7X#hX~0fCZocqj)+ zP$U5XfGI?GTeC(80%3TAhAe|VTcb)D005CNl<0u2RQ@%XU>hEm|3j= h5GV>Lh)n|X@PFf6tl{yNf%*Ud002ovPDHLkV1gFOTr&Uw literal 0 HcmV?d00001 diff --git a/bus_analyzer/prototypes/odo-last-digit/9.125.png b/bus_analyzer/prototypes/odo-last-digit/9.125.png new file mode 100644 index 0000000000000000000000000000000000000000..6ec49bad67de029193f35a46999a83812c55344a GIT binary patch literal 678 zcmV;X0$KfuP){4EEobJzN`2veuZD-gAcy>0pbVvkRXT=q69)n7Bst) z&CYCQ=HAm?K8zbo`laYDs+ww=e}4D`yHS4vR}zKmF$0>Ic23{=HkD-Yi8n zA0FTTWr0@e98Mw8fA;0qH_|qGYkc<8lLcA#D9@DGefarDU08F&!NWNWtb!wwh|T2~ zo3YkDiU|N9dZwuJU-xJA#ky;UT>UkGU;qvhw!U}%^zG%k9}Z?0f1g8yvN%dt>hSW9 zlUa;FSL^!JL^6wK*KrNwa#=7iNx&!|;kEz+>kCE;)`f&e;Q>KA6 z>PX>iL#bkP_;P#t&mN$Zgv^v-64(amA8m5cJukN<#&)AQ0Vz{fWK3HZIK>uFNR$A;RAewfNQW{6 z0U)73il9&pE`b06?ARTOO5Z77E6RvW-zoG4M_{+{O%*7h_*JJ@^DFe%{P^E@3QBY7 zf0hD8kOYx#NJ)YK0wP!-kRHy=Y|2++DpyG$9?Emk^U81W}~gFv6_(BANujfK-yC+NOczzpO-bJKzSAFaQ7m M07*qoM6N<$f|hSUn*aa+ literal 0 HcmV?d00001 diff --git a/bus_analyzer/prototypes/odo-last-digit/9.25.png b/bus_analyzer/prototypes/odo-last-digit/9.25.png new file mode 100644 index 0000000000000000000000000000000000000000..e87c656a91dc21e9fc09fb20246cecd7f05fe631 GIT binary patch literal 739 zcmV<90v!E`P)K|oUz!5nPQ4z24)z3``tH(+28&Aqw6L2VW+#_e|5L3qYplN)n19So__iL z8@XVdeDd0@OSQ!K_9q|O#%O84`fPfV;iZ}Pqov8F4bw6$)`y;Qzy0;Im7X}Z&9!^e zBcln5TqJ1r!%phEXniu-zu#Il8+**pa#sV7o9Ox$8f@smQO%7pSOzT*V}`Z@Y&te@ zqeHQN^LpQ%4liO+W6jed?-?X9M=Wi=QC=z^UwQ1wkcRUoKmXXU=2AR#?bD+R{o89N zql9YF{>T9e zK1#{@d(&u*BBTEH$7y}=XNb1!zOwrCr)jY;64Cwg<=#;X19R!jMqNWjIKk-mw`T!2 zP(5iK9h8)T(1pvbjkR!Rsuc#SqSpe2U%S1!e>G;w-K=2XwKm?QO9W4+zaH#tjT;|? z=UUBkUZ~)`H;ql1S2$2BNC8Ba%vNYzh=2qZ7)1b}fC>hcYo@~}^c5fo1H2+YL!tzd z14t49kj4NF5C~B?4-qf`0l**u0G|^905FgQAp8#j5)>r#qW8bF5CBC=FUSI_jB&oB zqMq*&?0Ff4stmQ1pdd)Of)0i;a(movl*6;3M6n|Gvc%D3B}Li0KfCgD=Y$~WhElSx z>g8KEJ@Vgo4)=~`eTCC#sI}M{uG&_LeD{mp9smg%B!NtR^!j2w9`1D+1|!cOfCTx; z?!hE}Ki=?$1|uO=Nh VXgE5|drSZT002ovPDHLkV1fjpT>k(7 literal 0 HcmV?d00001 diff --git a/bus_analyzer/prototypes/odo-last-digit/9.375.png b/bus_analyzer/prototypes/odo-last-digit/9.375.png new file mode 100644 index 0000000000000000000000000000000000000000..da0ae49609f28210749df730e4452a0e6bbf5a9f GIT binary patch literal 757 zcmV-?(x) zoF+1M*r8RGT{`j52{ewnT8kTg6?ISxlRmjcy;_{P3IyU5sH{{VfYJ%VK^2OqxELS+KtQOjpo+K%K~oSAB&fhafI@|UFzh-) zg1AHMWIG%Q{+|$l3!oyqM}oVvs}r!h3A@!hv{2jw41j3EVm^Ped3ZhV_XkxuM(@x1>~?hW z(LQYQ^S3X~wyP91mNn?-$$h-{?%}D}>d_CEE6_WEEF^##SYCG@s@m*)u_;ooWkjw* z(Eg@HsJgAHRUrmX!~1UzwW&nI{PEu&r5q{DNKZWd&bB$#3_PW(ZB_Shi$EpOFRPR7@Q}}!@0)!^sB`NtIaO9CXWhlQX00000NkvXXu0mjfCL3oR literal 0 HcmV?d00001 diff --git a/bus_analyzer/prototypes/odo-last-digit/9.5.png b/bus_analyzer/prototypes/odo-last-digit/9.5.png new file mode 100644 index 0000000000000000000000000000000000000000..eeca7c5f33d1524bf125f52b3a5ddf7e2aff83ef GIT binary patch literal 733 zcmV<30wVp1P)|3c!*jT2HLP>{?aiXlLZ zBVh;Iv9sQ_cXrlCU{VimsgD>eA!!Ir--7i~mIra(Pwx&+mC-)K=QfAC`fQx-=76uApEHM|@?K02+weDB4Z1k?EwTiw1(_vha{!_ABJLx4F%v()`O z+`=9D^v~Us8_#}=8goIQF_p>i=tIHJ$Ax3gF+%_dI7_g+dM!Dki_ZG}p%SZTb2ELF z4OT&(tmlR4-WO$dabi`|>^v&UsSb0M$R%w(_&hEzj(e-?dGPeC3RA8;GKHo4pT476 z-o~=eKYI5sM6GVg6$V%@^_beEuGRWRC06xHo zEJc6C+$_O*^_`jqnt`h^ZwjsFW}=d_Q7%!sXw}Vu%=RLAZcTlk@Apk)u%zQMELLB< z?EBxddbm8ed@^!D5o}KeTc_1#w_kjxU0X_n`San`3&hKnt(9scUYz|4GO}cSprP=# P00000NkvXXu0mjfjFVu2 literal 0 HcmV?d00001 diff --git a/bus_analyzer/prototypes/odo-last-digit/9.625.png b/bus_analyzer/prototypes/odo-last-digit/9.625.png new file mode 100644 index 0000000000000000000000000000000000000000..ccb37b899fc9cb15174821ffb8c9dfbcf253a0d5 GIT binary patch literal 682 zcmV;b0#*HqP)hQ|5QV=p_rBfr+M8foNDd%FLqUZU{s9uAqCxyjN|2DKC@E+tK%j_NA_>BT7(2$h z@4b8HP;3-2(iAh&ob!#2F2DKm@^)%>=2a=8tUmbci;dc!Pv+-0*Ed7KAOwrj&Oh25 zXg8-lz8H@N009~fUM@~Mx=Tbh41WC$ev?_jTG3u>laoff1p zMk)Z*KJNNz&@1kcnT!~MI$!>BdwO_yfR?dj%pvb~&vW(88Fjk&`nRLa=FK6Fj_q-r zrrYTv&OSb)-aY#6aSV(5tL5gT_3b$AZs!;42WOv9r$7FhO50v{trpR?NfNF5%G7LB zJL+-Wxu-BthqBD5sHfwN_aB~I|9c(eyPX77vZ&YlDEf|(%ZeuIMz~OsmfeM9+1a-YStkJupEjLGzkrb+; zn>rLtOwNUfD9IdB1qju3hO1J{yV?7ADoBJ@MZHoo<_wFF9gXIsmzMH$x#>SJd7InR%P) z(A+dbHrm+g<-9)3<#=%~dMz1UH?gsf^J%L;P4|ey@%ybK21I|d`Ec7GOus&>Kktt3 ztMdEUiw6VK@YZ%(UOy`JX?nU#gyt-XbudGaGK!RHm>E;>vKOoj$p3%2B Q!~g&Q07*qoM6N<$f&$k=R{#J2 literal 0 HcmV?d00001 diff --git a/bus_analyzer/prototypes/odo-last-digit/9.75.png b/bus_analyzer/prototypes/odo-last-digit/9.75.png new file mode 100644 index 0000000000000000000000000000000000000000..3a7ad17beed9776a0d7afeed443f4754d8e47e74 GIT binary patch literal 661 zcmV;G0&4wS12 zbXzc~*E&_&N450T)x{$MAP5Nn+&9ChKdxUqEdU6#okD%`pp~bRyW;zbP%vd}(`r83 z9c__msyWr#+c;pr|M5~_HtDWAz#t<~h9HzsLneKHO%{e0f-2v?vmIV7S2r|Ew5j3aIimL zT7e7G!0Jt_$Fr!@#W&|?PmZ4bIe+-hP-69aF8&_-yPus%~xymX9AEJuaKu zUlzTT!w(KlsBceyKA*Mq%V{yb9I~^y-3;sb)u*DiHyf{lb@SbAF?OegR~;%=DV--D zJ-wTXi1XL0sg&7l8Y`gAvoAhBUM}XegYUol;kt!14b^1!;o~nq8K*X6JbG{M^ope8 zuoG+cV2s(pIG^+3$#KDCp&CQfjfU(IK^yh~6I1}|n1cc&Afg1t3IL76UIF25XIHwE zwv$sjL_&18)f!t)SKEf1wsus8S`y)syI=MKfC$$CD+nAr$7SzK44|rP7vLPVvm&Y` z5j&Lbqa{Viu4Ry-u0G?8`VQ;!xpX2eq`^k-avo#{HBFQQWYe%^KUQr z4-c-g>+JPumx{ZpB#JM8dNIt$wKHxPe;Fx74V#jAyHSZIDK{l)y%*JWs|A(P=mfQw van?7memkp|n+HyW94Z9rl%9Lb=kNaug0xViF;HKb00000NkvXXu0mjfh3qs` literal 0 HcmV?d00001 diff --git a/bus_analyzer/prototypes/odo-last-digit/9.875.png b/bus_analyzer/prototypes/odo-last-digit/9.875.png new file mode 100644 index 0000000000000000000000000000000000000000..be0ce54677233734d6c2686a3e4cdb6d12751873 GIT binary patch literal 681 zcmV;a0#^NrP)47(6h`6o?r)zn z3I#XLrBqoI*nlkLNT_UxE`-6z7B0I7n!C%!vcbX<5dfO$)$f}OAP^d=WvBNA(d zN$)B>{_2a5c0I(w(;t6$(Jf8ubXoIo_U-4Jni?_u(|&(34;T_$ZtM4ICoe%ieSBrrZe=cUW2LEgJElqpOLb(Ypt z+{=W+HV7KsI4A;a9EwmtNDZNGI{<8#t#Geymld||U-orb)N4Jk^;&!$ITMril+opj{6wMint!^3CG=0ol4^^M1)5x`KkD=0J0 zV`{@H3%g7&u&u#Nx#aEkniB<-z^(->RNm$