From f971e6ca33965c147ca5ae9dd4ca372075403f4e Mon Sep 17 00:00:00 2001 From: Kyosuke Fujimoto Date: Sat, 17 Jan 2026 16:44:30 +0900 Subject: [PATCH 1/5] Add --max-count option --- src/git.rs | 15 ++++++++++++--- src/lib.rs | 7 ++++++- tests/graph.rs | 3 ++- 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/src/git.rs b/src/git.rs index dca8e68..713ce57 100644 --- a/src/git.rs +++ b/src/git.rs @@ -124,11 +124,11 @@ pub struct Repository { } impl Repository { - pub fn load(path: &Path, sort: SortCommit) -> Result { + pub fn load(path: &Path, sort: SortCommit, max_count: Option) -> Result { check_git_repository(path)?; let stashes = load_all_stashes(path); - let commits = load_all_commits(path, sort, &stashes); + let commits = load_all_commits(path, sort, &stashes, max_count); let commits = merge_stashes_to_commits(commits, stashes); let commit_hashes = commits.iter().map(|c| c.commit_hash.clone()).collect(); @@ -250,7 +250,12 @@ fn is_bare_repository(path: &Path) -> bool { output.status.success() && output.stdout == b"true\n" } -fn load_all_commits(path: &Path, sort: SortCommit, stashes: &[Commit]) -> Vec { +fn load_all_commits( + path: &Path, + sort: SortCommit, + stashes: &[Commit], + max_count: Option, +) -> Vec { let mut cmd = Command::new("git"); cmd.arg("log"); @@ -271,6 +276,10 @@ fn load_all_commits(path: &Path, sort: SortCommit, stashes: &[Commit]) -> Vec, + /// Image protocol to render graph [default: auto] #[arg(short, long, value_name = "TYPE")] protocol: Option, @@ -133,6 +137,7 @@ pub fn run() -> Result<()> { let (core_config, ui_config, graph_config, color_theme, key_bind_patch) = config::load()?; let key_bind = keybind::KeyBind::new(key_bind_patch); + let max_count = args.max_count; let image_protocol = args.protocol.or(core_config.option.protocol).into(); let order = args.order.or(core_config.option.order).into(); let graph_width = args.graph_width.or(core_config.option.graph_width); @@ -144,7 +149,7 @@ pub fn run() -> Result<()> { let graph_color_set = color::GraphColorSet::new(&graph_config.color); - let repository = git::Repository::load(Path::new("."), order)?; + let repository = git::Repository::load(Path::new("."), order, max_count)?; let graph = graph::calc_graph(&repository); diff --git a/tests/graph.rs b/tests/graph.rs index ca3b0ab..42f672a 100644 --- a/tests/graph.rs +++ b/tests/graph.rs @@ -1368,10 +1368,11 @@ fn generate_and_output_graph_images(repo_path: &Path, options: &[GenerateGraphOp fn generate_and_output_graph_image>(path: P, option: &GenerateGraphOption) { // Build graphs in the same way as application + let max_count = None; let graph_color_config = config::GraphColorConfig::default(); let graph_color_set = color::GraphColorSet::new(&graph_color_config); let cell_width_type = graph::CellWidthType::Double; - let repository = git::Repository::load(path.as_ref(), option.sort).unwrap(); + let repository = git::Repository::load(path.as_ref(), option.sort, max_count).unwrap(); let graph = graph::calc_graph(&repository); let image_params = graph::ImageParams::new(&graph_color_set, cell_width_type); let drawing_pixels = graph::DrawingPixels::new(&image_params); From 3621ad97bc0d8ec9ba51fccd7d63c0ec419d42b9 Mon Sep 17 00:00:00 2001 From: Kyosuke Fujimoto Date: Sat, 17 Jan 2026 17:22:50 +0900 Subject: [PATCH 2/5] Fix select_parent handling when parent commit does not exist --- src/widget/commit_list.rs | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/widget/commit_list.rs b/src/widget/commit_list.rs index 1391c48..8222621 100644 --- a/src/widget/commit_list.rs +++ b/src/widget/commit_list.rs @@ -9,7 +9,7 @@ use ratatui::{ text::{Line, Span}, widgets::{List, ListItem, StatefulWidget, Widget}, }; -use rustc_hash::FxHashMap; +use rustc_hash::{FxHashMap, FxHashSet}; use tui_input::{backend::crossterm::EventHandler, Input}; use crate::{ @@ -180,6 +180,7 @@ impl SearchMatcher { #[derive(Debug)] pub struct CommitListState<'a> { commits: Vec>, + commit_hash_set: FxHashSet<&'a CommitHash>, graph_image_manager: GraphImageManager<'a>, graph_cell_width: u16, head: &'a Head, @@ -210,8 +211,10 @@ impl<'a> CommitListState<'a> { default_fuzzy: bool, ) -> CommitListState<'a> { let total = commits.len(); + let commit_hash_set = commits.iter().map(|c| &c.commit.commit_hash).collect(); CommitListState { commits, + commit_hash_set, graph_image_manager, graph_cell_width, head, @@ -242,8 +245,10 @@ impl<'a> CommitListState<'a> { pub fn select_parent(&mut self) { if let Some(target_commit) = self.selected_commit_parent_hash().cloned() { - while target_commit.as_str() != self.selected_commit_hash().as_str() { - self.select_next(); + if self.commit_hash_set.contains(&target_commit) { + while target_commit.as_str() != self.selected_commit_hash().as_str() { + self.select_next(); + } } } } From 4bdb008ee2304e98b820f88ccad208c480e9c48f Mon Sep 17 00:00:00 2001 From: Kyosuke Fujimoto Date: Sat, 17 Jan 2026 23:46:06 +0900 Subject: [PATCH 3/5] Add graph tests --- tests/graph.rs | 31 +++++++++++++++++++++------ tests/graph/branch_001_max_count.png | Bin 0 -> 50845 bytes tests/graph/branch_002_max_count.png | Bin 0 -> 24608 bytes 3 files changed, 25 insertions(+), 6 deletions(-) create mode 100644 tests/graph/branch_001_max_count.png create mode 100644 tests/graph/branch_002_max_count.png diff --git a/tests/graph.rs b/tests/graph.rs index 42f672a..2b1d65d 100644 --- a/tests/graph.rs +++ b/tests/graph.rs @@ -114,6 +114,12 @@ fn branch_001() -> TestResult { git::SortCommit::Chronological, graph::GraphStyle::Angular, ), + GenerateGraphOption::new( + "branch_001_max_count", + git::SortCommit::Chronological, + graph::GraphStyle::Rounded, + ) + .with_max_count(10), ]; copy_git_dir(repo_path, "branch_001"); @@ -195,6 +201,12 @@ fn branch_002() -> TestResult { git::SortCommit::Chronological, graph::GraphStyle::Angular, ), + GenerateGraphOption::new( + "branch_002_max_count", + git::SortCommit::Chronological, + graph::GraphStyle::Rounded, + ) + .with_max_count(5), ]; copy_git_dir(repo_path, "branch_002"); @@ -1340,24 +1352,31 @@ fn parse_date(date: &str) -> DateTime { Utc.from_utc_datetime(&dt) } -struct GenerateGraphOption<'a> { - output_name: &'a str, +struct GenerateGraphOption { + output_name: &'static str, sort: git::SortCommit, style: graph::GraphStyle, + max_count: Option, } -impl GenerateGraphOption<'_> { +impl GenerateGraphOption { fn new( - output_name: &str, + output_name: &'static str, sort: git::SortCommit, style: graph::GraphStyle, - ) -> GenerateGraphOption<'_> { + ) -> GenerateGraphOption { GenerateGraphOption { output_name, sort, style, + max_count: None, } } + + fn with_max_count(mut self, max_count: usize) -> GenerateGraphOption { + self.max_count = Some(max_count); + self + } } fn generate_and_output_graph_images(repo_path: &Path, options: &[GenerateGraphOption]) { @@ -1368,7 +1387,7 @@ fn generate_and_output_graph_images(repo_path: &Path, options: &[GenerateGraphOp fn generate_and_output_graph_image>(path: P, option: &GenerateGraphOption) { // Build graphs in the same way as application - let max_count = None; + let max_count = option.max_count; let graph_color_config = config::GraphColorConfig::default(); let graph_color_set = color::GraphColorSet::new(&graph_color_config); let cell_width_type = graph::CellWidthType::Double; diff --git a/tests/graph/branch_001_max_count.png b/tests/graph/branch_001_max_count.png new file mode 100644 index 0000000000000000000000000000000000000000..f01d7bbc65fc3228cf6533b3bf111a05daff3785 GIT binary patch literal 50845 zcmeFadt8)t+CL7G;A%uXWwf3!({+tiTJe-3W2F(|#;&D2i85{_XfUFA0OW8(ZYyc4 zE@?EHOi!Y2vN#nnqjDHrHA}%+aRp(N88JbmX$FVG0CV_VhkFKecYAuC@Avom?(g~j z`U3-onfw0SpU-u8U+?REz5DBz!hMI180z8S;T!Sd{KXy~gSLBkcy}3l%|8M-a5#KsG8b2j2 z?u8fT|E_eue5iI&Ty*lLpBnqYfPp7+iS{N7|%b}W&0E;(1%)|n*SohaOmw2ZUjE9wSW&qUeI=x=yd z+$pTMW1Y1#_{y@hua2ajKXUE7S9)t+W^1I^xn&7j`k@eIy z@RoIxZao|NvipytS8Tc>JoYv{A?JjOjz~?%q3FUZQgvfb zTT}fr+5?1kX-RFx><~#a{?3WFQMl8h{A^iK*s_{rOE52ufG@lplVEyZ9%wl$wVf5t zhGfv~DVG*%))tlfnRU{R1=5cC(97`30AW*HW^!D`9||;%+~A&Eb@Pco*R^Ta7G+Ei zejC0IPHpSll97;L%*fI^@KJO(%PZi@tjc8x((B986rEe_9dvt7JKu(N4$f%3@@8jU zQAxLFCf~!p_%u_MZC`Ce%a^rbJ}ENXYtBUv;O#GQM#9fVSigg38?O@oh2xKRlMZ6Qp-z;kKl<-_UKW%)gMA{!Lz49ez!(4am3@F!w_r zT8nN~QB-e1RPUPn3wWoREBq38)Oi)tw73QfOunHvUkD;(EUBDn=0T;5{oiHz)hDvOqGjZUyk zf~}>r<5!b!x}UkxHf*Y;_{pY&{V&&Lw(){z738VxmvAfIZ5Z(N`f^-Z`4GqZ*LrU# zZpTP$k7TrM6Fy0@o1;340v+#Gbe@)6QfFEx?xW2octs>lS7?QO@wpwB{o89iczeiu zuFF5IvVD)A)ti{#iknUd3Xz`c`iViUxxJ&}c1h~bB226LRwXJtGW%#ZdZk~1m0KSn z9quo+)7gOg#tj+m1^e-Ql}X%V+kGN?W%=K9Ma4JASjH_YS{mq^-hD2;>fCpCgZtL% zq}3tyVHbx55_qtV=QX|(ghT|FOO4|X&KSNyzn!_*CRU6EcA z*a30H_0N+n=*A_f*is%V8EyTJk49B!J3U`7GhVuSkjd9JBg?3V-QTlkm$$Vk*zwx$ zf18qICQbCU)J}g;YfDf#VRdahNDTL${1x$ zbZlx&3sY#O1;33qePVAsKEO}9KiFu)Jud8z2O|rXtgW;6lY(8}RN?)b-&I)O6@1Mu z+Zn&$OpAF@Zsz%}aG?rT|9d=E>ovTfIVqFJj1AHFq&&T@jn2}>ILBUN-Hj9Jm*8b- zk-b09!Vm6Qoi*_FLJOX=O!#!X%gEjjtICF_$PDTUqqSAts`CAE1z9VN{Tqeto51QN z(JML??-(S1#f5K{-l+9+&fjnaf2thcx?#M1#=QC8y>+%7cEn}cuDZf2caF%MzVi}{ zv&;tk;9etrl^Mz>81E*k?=Dg$hgfE173>-m+lQADMqgufU2SyTTj8;T1@^4Koz44O z9g_e%F`~CEXVw^h#b|$NwdOCl5alz?*Le%NzsD_Dl9~lOVpsj%j$dZz1$9B5_u5-> z_BLC}9g}rZON62$LgGu$Ug3Lf*}`^Oz7Gms2QMP+T^9Os+*2WY<>wczKU?Gh4@6Jz&fD#O>q(%Iubxf}Q`E~F)C9U6o{Tc`9X3JDy8RYD7G{9f?7k7!01@GMB? zglN!u^EPVf?7;s?mF4?IoP(2pPG*7!(34(qAtd7D>b_HS!8+Wn>EGei#_osfTB=jp z@vZ}XZJlI&H^w!d-!ZQyTpL$h2agrjdPieSO?3E~1lnj*v~TqNlpd&oO!u2vc)&7$ zJ!w^dfh>%&u1)`ieL9)D>!G?L)taL6hoV1P4PVW3=%>2MBuhFOok#(#Q9C}A9`TJn zh2^ND)vhTjxyi4mN7;u5Qhz|M@J;W;pujf6tP2$c3mGvx9uKLn8Qp2paDS74+2sJ*_o# zOnTQwoXawKH#T%Vk9+f032(%u5t8Blk^^$7tS_E^UQCv^IJfUPcX=;(q;GeTC-?EvfVn!}RQhDo zCXTjJpP=1eo?XX2t$9HQc-sj{vc4l(yLRSiyl=bWoNjz@VKFr^3(kbcH%IC+_w(MM z$K?nzD4%R9J<(Ld23dOxU!BS4ZNG4e!j9?delf0MPKbWwtad!{Np>>kA9O@lriGtb z8<(jP&7!vX9V_j3l|9zK{n9=6Mln%j@1zI~+?y}OvK9M-GDm`4 z{+&_%xqSwH&Rap1@Z={7UlwS-soM2<#%pjiXK1G>wEAT=rY~z7!)x^P1j4;2aws~q zN9`T!lX4&@5kga_l=6r?eD=0zO0QsQqoluD(I_s7|@_gmeuG7d|-_DfhxUs3cO+8RYyMFVNarC zFq}h0$CcbL`1>$bR27~;Ie4pt_`_2zuaCD^r-wOLb99y?9Ko=mTG;I)*z>jz$RZpQ z$6AwlZ~L6YElztIV>vL*63@NPQx!ekVP|b~GRz6-eo8c@sR!$g0=2*Y520}$SZ=d{DGS??dR3rUOd*vF68#UD-;GQxrC4f2gR3EEr zQ-5AQ%=VD$s@1t2A?#Mla%k1cvwY&4yLp3h)VK0j%DVYwOXD)Nlo<`>h+x}qQ-Tbq zax1>B`?0sU$jxs5dPwyb^6uZV2+*EkBpd z*1U+4o|2Tq8245dv7aK>L&<V`a8hoGmNTj|JIldaAAzDFVL#eclgUB}Q7 zUTnV%o3juC-q`)<)gd{7KoSkS011k(ZCZ3$2V^Y=D2TCR%ovmHv*B!l&T*Rp3Yno0 zALG@~_X~FItB&(SxBB6AIs_H5O2tFzGn|8Tyb%N0SH8F9^Ixd5wP}nZLDV_RpLYgJBgw7nS1XnN6BN`Ef~!?DUbeJA<$ z_vHe+a|!0}0Uz)ALbt4xa1-Ilr<@P@IeLSyPz);hdaK3}c~(Di&)owt}L(m#6duNRFs-u0lzcwxB4H}vtb<1!n%qBC&Y zMCl;&)t@dN4QD_?zVOdWgR(R?7HkO8j&H543cXl-{d{r8%ymKY=9hJl2YoEdc(YP# zhPXC0Y^r6}XBR>;FiB0ec*sv&D4zRaz$IGtnc7?ACieMYe$k{M-w&3*+0ql`cY2+T z&NQu2UyL2KxcN<-zyea(FK%LWmXY$Bk0aiKolsLv4!yD?zEO zvRY$6GrM;1+FSLR6GMjk>n-T@CDj|Yh~cF$7^2Fm?G(YDa8qf6z4WLz#88C z7$ZQ+{-JP)^QmKPYwh^yD;!&C6~ntToE(}DTbY&@w03XD$F!RV^T8kUU=AJ@=g_B| zFZDlIed{Ty^H7uKYah*50j+3L$SDXNIwFJv3lloD$&mIFI- z!1zAK$zr$2TMhx{gCS%T8{ySsr^U0VU>O3pxVCz^sV zGaafKbk649q-`IBL6!t|83m@&XU%~Ix?BAXzUixU)8vo&rkm0GD4I)CU()+t8~XI$ z2Q(J2Sle2juSxPczo;=jgUs=@5&lZAvWLvGA#kE#H0DH8X?9HN&vc5@n$u$F zrKiwqP>L*n4J5oJ#`rgybuacF;CP23nV^TA*&GKh#0NgySxxS}%p=e?LOPya@;=)Q zGA$2-|A4&<8A&8TJ>iscZW`Vsxk@%*L5D%Lk=jw;ErR2iyYLNm*!UJz!PQ4 z7oU$|o$u0OXm8QO7qThB(VoLS@UHvM zjyn5>9NSV6W}RN~Vt;gJcixW=pIQ?9SNhAAyZ3)^*nJ=Tr~dbW>$Z$Len)Dg`^Vd( zd%WV5JrG^~YxiT}t8qC0gO`9`vqZb&eE(l8iJlw$!=LlX|406Kh~p8;6Uio_m+8c9 z)}K1sXEOLqfzC%Qe6sK0`L<(98s#Jm9GnsTOHhy!zC#zTrSBM~vQjcv&7j3xEAI3P zz&g<%gSViVXbhM>O2nEaf2EMDrDxzr3x~+vU&PQ|{|9~+&VLi*+juYapci}FC{|b< zo8t-$gg47$6&~b!c0k4@BW#R6Ep{YiL*Owe2`Jl?U@XekG!I@~G}a}@x}F9 zA!1r@IGC+yUeH|+iM$< zK3Nt=R?n)W1V^pC#Zg0PqU2ljPhgQxQFt=bTo2(zE!yDBPhB}%+YjDSUO5=qTp3_p9Xp>M;Yx!DO84Yts0x%l2o)$fhKZqIJb^B#w#xRY+qwx&v6A$*vb zqZt!1{`T?Mk=8Y_IaRhPhH?&i8Kw)d9LZ8Zg#fd`Qz{8%Z<;};gxnuMyL)Th7-G`c z)|5C$CuMW)k^v#8=c@n`RYUE9p5?xvwI%i|05kcoA4NHsW?4;i#FkHSUpUA^!&fYN zFo?4S@XQd4Y^tS{ma7<1GKlK|0%Za zLJTFI0DXtG9-)xAC{-1cdMT84e&$F6CwIrGE}}%-bBc~}SZVfo;WNSmGzMHluh4!_ zD<@I&WdQ)tG1+-!Y4ijzb$jman8R=bCG>AW0SV4FIdZ+LuoII2rvWYqqxXZfU?tgF zdP&_4&+!>w7VL6B@uooGprrEj(`7TYUArN!Fi=QmM^H%b4b>wqv)rchCNmV%HrZs2 zX1fI_cM;v}Ay^X*kHvgEi&s+o;OinlZ!646k>jcwD2k97O2vX9K)AoqnNGv9fITqP zHmo0Gpe-_D)>mHXTzg!^n^^_H|AniWUy=Q!D!~fzp&LrF;?rxu9z-#!0T#-y$@Ao~ zzWwV*1zua$$6MsH0?qcEx-~_{yL_effX$+D;(8j^Y#o>VZH&Iyg0RLzs7+z)d`pk5 z2#jU|m#MUfV%cZ&(LQ#(lj6ZP{3=}NN^4)vCAF9Y$%=)kR3AC9SE!GKiVIyI1-fXu zGNuD2tK{rxY>2a=YrW$DZ0c~GV-0{Wv}-41bVA}N%UXPX%DlQw>ITP05SZUO!Nvy) zgfS`!-vK1v@bPenx@pOzmgQ3|zSLg!j6}yhC!&BEE9f}Aj{(%ukM46T1FSh)-L&z&F2JR zvLmT1)(>n6r=S?zi3U^SWu{NWCEFMTWdu0da~rY9;xaynH64@%wurS!*WzJ`DIxX& zm4ZuB9I$$F`cB&{*<<|ZoAqO=G?!gKhY5j>eZo7mZIdFTqy3e3M!-bFh$YU&l=ciu zhmal%m{3&gOUQD2p$lDg;+FQ1_tesJuFc))ig;mv=?q>sa`MnmR@aP_LQ-0ftzDSy5-NrpSAc#)8q3Vy|5Ph(8oL zllx10JFx~a$Z>Md-4430$p*%`J1Hv>-LTR(ogj|%X@ELoS+WzKAe}zRn=|%jXu+O5 z1-adDC1CJ$iew(+GxivjH>8j&(xsOs3OftbU)b4i54Wy0l%^g=&qHrqHUmRv;b(8V zpxP|5&=ejI`z54p4P6%){0DG8Cq(~d$ zdlKwt4gL?jV{)SASNx74J8y3Fgh!AT-~4=*>0;G3K%Kk2A3xWAN)=q6`69pQeYvT6 z!=yvsE$oFegrK}kQ-vR^(*lM7P!iz*GT8YhZ%D4V6c2m{`sMOL@S_V=Ef#fi&u8{I zbkyq~cD_VqTjy9#`n)nMri|^WQ~I+D#{m}&#Lt1e5Djiz0DvDmqd84GS8|om9_Q1H zSYNn5MJoN1&2Mu{lCZBw@o{@-W0P7^Z3{TrUZR=TpX%7_AbW8RO?Gr0k;l7!=X{>L z#H&yu6n7dC1L9Y?fLI$N(+a+CMYV7cO+>HDv#EQcd(ri&FIHV=7X=X`hMG@v-h7@R zV00~aT-BO9=0ntZkFn8OQgv11duoZZ?OKmc(L6`!yPS?U1J1=6o+xy^S+XU858WD_ z0`L~+SV}!?E{OG7N>*^!}a36Zp#6>bLs-0R6@pej4m5nMRCx$bg z?RVO|v~ueNdzHu{a2e`zk(18JG)v+fgksueXx$8>G*8&gCW1j%A$yj)tSMV<&7dNSCTRhpsJHSpJt*&*cGqaitV{tll=6`UEV^m1xAC&gNP&jdboyY9!{}z;+i&&Fe#TZviJEqXqYJ}Lg zlwy!oQ!Pns@7TBPS-d$WK~3e9r1`fP3Z!D5%_o&9E~(dW#m5*f>K)T8&ykTBDeW5u zH9LDC6gdT8wFr5}Z5~QyGl>6ae0R%VY`En~zA_I>rcckCZ~M}yB#Wg`*=tmqZSiv| zzys0t`}d-y9>VDz%}etmYKr8kAH|pMjqh7)SeliS(n=}TFFbVTvK2SviKe^hZ#1u8 z385YO9TU|(;?tfE{)9~6+WZ{_rreHt3Lloqd&V;JtmT9vsR32Y8%2aR(CLtjaLN`$ zz;0ynisUx>bOe06uVxN0KWunndHYJk(g;67-d8|bhSK0HthPFoAKx_*N_ia<1IK|e zMDpm3K7qc8Tu}f$RXyG;xIE{FoEnZ{IuyNC62%`!#x)g^Wv1BdQrW{Q>By8{&tLwf z{bP>DIHK^->7NAihV+Bd>^hZwDg}=Xwqc1HqI}r)8dn$&CTboGo}VC#&IQOi0gc!% zD=C9mrJvlYq(4@A0Hg5ovNYMsJm*Rd+<~EpF&ZPn01V@IKMvPED!h;Tb>qzhAv?vB zOa%IybIF#EDn=e34hXBJq(F}}fC3HS96+Z@6duxUE6{uIk$;gf4jGsbmNkx~x&;8j zCd8_LiWycyIZ3k3ISbKm;t(`+g-o@`#@or|q*J8l9G>Hx z$7Hlal)E@@5R@I7NA)P@X*{HHv036VUC}v;R<-p9aqYd%dHr<|2DjH=5k91)!vl~S zhD&D=jq9;3A1f$$KN8uyRtIt3s&P$4%po4?(XL=>(I5f`Y{85PpP>4qHSi7@l5{#@ z2v4^#$_UgmNZXuT?{&S?`YRd+$2asK*xfFA{xCU_;HAij*#CO@V1?Q4`e&b zXvH^>H|mf5%2(ch1$=uVT$x;-`88se*sN2-0|02!F~K8v;O%Dn zcqz!TK?N5d2czy2=B|cYU^hx}NBk4S4eFJS3lWa)xywjR10;W^fTY1sY0-e3qYaJm zn5qqgG1n32zmADMkT#%Kuu^K$Mql^&0K#0EKu$No%OvY7PMIR!Jz2wAMpc;GLh)+} zLp9cDe$U+4UIg4Kpgvo$OJyf2l1Q;$sY|j@VHZLj{ot~0TCUBLZWRGfg|FmlmyS@G ztpr4tOvvyBgtn5HC?&v>T`<12&}ICUzGcaAnZw0j%82#Ag~v#*Jjk?>RDmA)k-UNK>@8N=zG3r&Pn#E*?A`FpX9eNqC ziSL1G1}Onoj5zB^TGf0G3akL8Xn2{Jt5uup0LW!_QHhdHo~a2ODOCWjogc1l2=nBP zNQElR{g^if4Tb#xYZ36(fXdc_N8Gtxcn30#ODfI2fNUc`g8LB;FWEe*vg=(6`do;H zp@t6IwCMC1+RcRpH#umSd$lV*{7g8|U?^8q*=KSL$lN+zWr7z2vAjv3rk(ucYk2}d zrx>XvF`_F4_?(WxKo0rSeh>SX63ie6M6r|*#bH!ctt7;NtksUMyG)$cBY;}dLjRvu zpUKQzWWI-UNJvKPx=I*kZKY3==_tTe59ES}Y*6ok-A8<2I=+d93=fJsu)qN4tJGB# zsO!O-6`{Bro=7DZI|`sYkLE_K)${oTPKGNhrS1jb6Y{PXIWpcI7@%-ksPw(oOBN6a znozqbD!E?U&`ys5()a!c_zPX&e}a(r!r=klSBy&f6)X{^f_zSv{-+T6l{bOoCH~0- z`(C5kO*r2YY?!a_R*Jj-yznvCD*l2%PG&!4-ycz;*rKIUN_2rT>gQbnq!?n)deVAw zy$={(ssbNMw3F7KZLbP_2xAmTBX;#7a;a<@Y{h>~Uu3l6dWG#5o{bxm*RhPS(HIEL zb?Uq0Ahqf5X;9MQ12>{jrkNH^tcqkPY}S2QyV=!f1T?Y_j7mZ&fDA>Sqq2)I2yK#v z(0Oqc!1iqh-k|nx%XEV)fEjKAj-O9;Trt8A6{RIzm%(@fLLJ%2&SON1v9=-2@=@59 zFophPtTJ%g{_4&6!5-?nWtqCJqTH}8NNY56%gC!g0FiUzXks=S;P0*U@DuadI|BbJ z^>9o!htk|aWK!AdD*MP17U9YyGKo=hK}Aaql`cS9&=pQ|4kbgM4p-8h9ww}D3@1Dk zEa#^AWnE~X8ix`FsLn(u75VpI^ngMG^K~osw{$envgv*h5Z_A0r=^BsZrd@7r6oK? zKB5g^EG61Y>1*piW1kM>|Ik2s)+;%UOQfxv`Rn=LWs23-KpT}`#WUjpobs6j);{)> zNJn-)gpqtNu`mdDT(Da%9SjAo)*5sa>BxsIj#Wx7bak&go8%?!L_3T$Psp@H>uOU0 z`>V*(lTK|bnxV(fu$4~s3|_IY=QbnL4Em0a%~^aNijYyfrx%=o~Fa zJx8b{oZ#x{}L+ysUyJmRgHZH6& znS(#G&jmOG?N!B{*8yGvWBL{2>KtmtIsQif^DC%7!J+8>A|vRZ%ss!myBStT8VvzyeF(O8LOyxGO@rF9=QeEkS^zD`dHV39e+Mi`esqa zOAKV6_Ij~5A^!qhS4qLH&+WeiulPZSi^@DGB9KAycdF9CFhlkTm^+rfp!$b-5YV)K zVkiah8%{w&7W^==FW0zDta1SnI5cnZ`C|o|<^}Ltg!eu4vOdg653=yNKiZ*z; z*!K3OV=(?wCV9PNnf*&+9&+1#xzlHI>+6tgmjez1nI;eciRWaGf6g|CQG>0V#QFVD zlncd&{S+EQzvfn;SwpubM-_^9&bvT#>fY%$!M#Egm0p15!EpPS`{4GFa&6R#Y0-AY z-4#h2o^xkY&XK={w{|{fvb-Ds5NMt5BSept#HdhQ>9*H#97=Iix|_Uw-YIsnvCpr! z&4euo?$Mh&e=_$2ix3gbwyJA(bOQQj5gtCY$ETz=zn#+ayZj!8#pkzTot6&?zpf

{=f54pi@EuZr1%XELp={{e@4QN=HM$)=L57{FjVQ6B7#?MGm{c z3$-skzh0LFM$OG#C-VvQ;#dzz1kxBqjNhJflkLNR9|})K1dsL?**$hF{Yimp3KZl{ z7i#|_c;xuJwwBR`ThTcP?v*cBC2i=E0-FLWomVRR-hk$aQhF9eKu@(ziI5(U=XNkV zypcCYV{XNW<8SoII4CRU-BBE3DGhlUqhj22+U5mgTgwwQ?-?JdOd^ne>xriF3HA>P z)T)fu zllS~6{tJ6Op!iBC?^Wy*4#cEVFBnj_sWy$)bIYFuGDwVn0UtNF|hXKTtz6F_7(vy(r{o*00P@2Hay#gvHdYD z%{L}bec8W#E@k+aLyvSb38N=^_r{On&sW_nV=r)Bw8KRuyY8#RHCAqg(kgM-zCZbW zEn9lYRf@-Ii3sx$Rak9ZSjpF;H9rLO^iqIP==K7vci0Fbs(#cN^e3_Tk1^XL%r|jJ zdylD~`H$|NPj@sAPEjaM-ZpL7{|FSW@{yMHekSB2?kYgVC2JDE-A+16I&6x&t6*kS>X`cwrS(Nq?>jK0WNxGTq*9 z!EjK*@}T*WO4ujVCr9=c(jNx_@emS|*pXLnN&Y>qf_Tk=yK)rJnxV>QVvZPX^!#>o zD|(>vL-&ZRuMnNTLpj#!XC{uciT+uC#hHM{qyzVL896CP(@y;>!|=j3f=>H&mHLlBYC}6yPx*iJSceyfOM9uv;@H+loi}2AGI#?a=u>7^bOq!% ze=F{A-0gsTK|vk;3%7L-5w!>=w;tkXnc}FE+aZ(1U2_LHcb0Km#7wq@Vj~KLEbU>E zO_#`6Lt*ZmRgO_PZ$f2B8GPN9{!ej+_Q;AFu3EMF; zar4N}Vrbkibuxv+Tt=%PPewDjjJ}&AHu<46N>-%!0)|YF@45T2o9^u9Rdx|2@3inS zn^iOS3PNF#gJ&S^4PMS31p;@XAN*rcm;Sh2WF$f?#0feeUW6+zUzqyqx=jLipaNEl z0wIr8QX2PA@F%V$Cvsp?K*4pfJ$hH>8M_U`Q0|6op%&p;HlbS;+S? z+x%(g`Y@;*>=RDWEp!0qq7CRcwGGkahNId=hAI#wl%Npf1+EOR^YWS64l?Cemi2+B zVfGH)UuYh<35;Qz7chcFca+hehKT%favX&N!CSmj5T^;Iwmt;i1W0NEA*sOxqnv4M zj$?3PuAW#7lIxf~I3LazoK4N|3bgk~HH=B@E8?P9RAtqhoYF!ewVG2E%ahuH@`*lps z^bP~u?h+RW(xsSKG`yr|!lxKIV>`Od==XzCSzcHa84KjU{tAQ>uSCN2} zKfWx$EejGKbUs&tpbn<8N?sROAYdGd+toIaD6s@ap_jS0NPvPd)5!EYXZUeA1%Pt^ zRCtI35iSr_*piN{N|k*Mq|I*5Pdj82@>#>%OsJ&6(Jmu526Oy?ZN@AH!zf*oph@ZWOAY`iBO|&6C)5hbTVf(ZQ#uS`n+%^ z%`zyRx)F4lNx)p+LHQG?WpMByZ+jX`JOpMd`GXGcQjDtj}BRxz% z`A`|Q51*s;D*jE6-)5{L_XH5@I;-Cn2K>=zqSCl&dk%Qt22~)&36nI{!_ z1bU81042ntOw>H2xXNJB@H|E`i|BNb5d){Gc#}Uz2pwCtF3#tXL*Q zfsLMO$;eU?_#Tsb7`W>t_GebqT_5`Eh4r`OM%*cJjyPs1d10V zjs_w-6((W-J)iv%p9AvWi(YYTrH$;qgHD38?;yIO|{pBgt;K5_52Yo3= zg5gwANuB4I2T?p`nz@cF!u3!=y>QE4`E8|yETNX%PZ-}~4o{DFNRv)uS|nKC{2--~LQ!R)OgY`z5MvUntJda-1=n)ujYnr1L$Zm2Wl#*uIu>}f1=4}4roq*LO1qE;00`4(LGb_O6Z0<@lgap>;yFa z7>YbsP&nV|*WL(d!a~|w(j16qCc=U<$w0G*^Lqtsw32RA3qBQZ6fhv66F&MFeKh9A z&@(7vFEyUSK$b=upAKIAkINm4zwO?$NVEjmT=1=H<4+3!*=D2}64Wz9zX>-?$$5SQoP8qFBda`u`H-q&A z&;f$ecc3bLWP|_~OONQ|Xtg~=r4WT_U=>&t?U5#ZD`ljC-*Ol6$J|AHi<*#~Q$O+VCLPIt3%4~1V|Pw@02zn$`@8>>Qjn-A0hspKfAczdz~UW%O#WI zo+Pv;3p8T4hHZv(Arsf-C;Hfd_qR|E?eD6jy7iA@*h3&|y1Pwbd&PNUqU4HT{U&NU z=tBWk3o&>RcL*Jl2{X(q9b37INuc6nN8kmJ!ie4P(;q+|kSDzl&Gs0NO5OdG8u%$7 zz7DSX?t`jlWg3?w<`bIhXTi_*D&y5r-1wg^DkJZ?5kz zFf_pqWvbZSTyd9T{#f~Z*0z3*4hTnSRT+a)4#2Oj*xG>UwP$hINmCz?3@9$n zU-KhN0?OXAevdf4(g$?XIP!?}7@9{6Nas|-RyOni!1;t@hYc67Y>31BzT(ZSXnWJP zcVShpI#3<-N@Wt1yNb)Z5z!3fEe_HzyHNTi7Tx+q^1qpQ%8DwXP*NfjI`Fm58Rjdv z{S$#N9uBmJZ7j#ZH6LYNln+E<+4ssRqKMKJ53z$X3_LPsgWOw2VKJ~ETFCkV=LhNC zQV`Pcg0`$Y(Y|7Kom1No<0Z^}@HBK(FoTDs4SS&yylK?c!Mi)^8FglI-Nx9B>JJt> z0LtagBGyYS%~FE)ETz8?P$XwyrgGtpW<8&JiYNv{lb)(}Etg?(pooeA*(ORj{O%&C z3UHnCG+DaPN-}%H+VOa6_;d%p7N&4^fMcAZ^Ye^ljU(}&%#mY5{`lnumM@utA{;BT za;$4~Oe~Pd`oISHX*UA}!%p%%Knd`0{63(%2%K*Ws3vMR1E>9ZWf6#P)==>9s)uTq zm*jLvedDd3udAR)qNNN^U+wiq^Av5@%GmiFPL=VJtWb5LH3bz^;NU36{QicOqd|;O zB)2J-OFb+W6R3*pm`Matdns8i53-xVbkFvqQrpu&5!Ue@`9Dj^S8zY8o719-fjFIR z2P#?2A|W*|&D-ZSm;0Y)vJ1;~o<*N_SYrG32vk4(Bt4&IUJ1_p@c13Q@n5hUaFs&J z>E_zpMsANEMm^))oqT`v7T*l~{x>Pl2pZzxmT|G>g_x};+LOzLneC^~3^U^<-f%_p zFU`&ud~^czAX2a7CQ#rxjVgg^mHj;onYe_lAO@N+xXGnj%ECgz@gEr=IiD8yIW5Z) zr}4kb;9uelCo4g3r#*+JLOeEt`kylRvkctxNZKRq&rx-f$@0)RaZS9W*NLMVuFE`7 zWgD%NLZm3=`je~D@F&|uv4!YpVG8bLasc@k23|uU2FoXg9~aU8{E?>+?^ArgL}UGJ zQ;$`Q_Xy&5iV_(vl^Dw>cNG*fT9$KT3j~7yf!?JR4^Q(6@;cvhkiW>7{c$p>}RlYaMbzMy_Yib{(6V& zGw8DZ<@DIa#mfJ$%E&X7pLzSj=Y)#5h+icP-~v?G?om`C^2b6ilLv>w0E@`hF~Cid z+-HZi6B;H~qFAXtp`B5@Ikq4w)Njo;iS6f7W|y2>pFTJt5F7zlPam*1En#LosA(gm6M6 z3jvcFen)NP&PN&3OJaN;Dh}v-TuSYwK=pE`2>|j*_qBljpnw{OWkWb3q56Ur%LT-U z5;X=Km}>|ildk}1pVD%%snao-L(#vlBM?WJ>K%&nRT}br%6U9jK=>n7Cxfs-TuF7# z_>{v`TLJc{KC)(QT-a6-Q$n&g1=>e+jFsNZzH4$6J!_LqUaS6O0EzX9Q6+ZpZ*hyaBK&Anju7K#?nf0R8Uo`E9Gx zDbY_AHGA8jbI;2J$rwf<;n3y^^5t%rvJl$dpC@Jj2_?kpx}rTLK)H(@VP&)cc%w*2 z`yL|VT98_J?yBP{x6TArih%Ocizmb0L9x!l-qkv(*GFWjl=IBoZ}siTlss z#z;CM@hHGPh^h6OeVA5g28WIh2^`m2m>Nc6pa*5lthsg`R`V&K#1b5wIt9CFWs1-2 zGbr%80_uPeiEBiWWbL7n&C6?~O!>?}dTtEY034gbMp_eNA2_r}33!I2x_Gn~uM8;s zko9MT5fFSTRc-uF5quV!bWl?6TQ*IkVi2A*0~8XUtpsKFmt2uNHkuqWYM>_~*q3n= zDhFxEK}+BH0Xdt6lO)$SU61ZpJ)iry75X$0*_F+sD4$72AP>^muUd+{PAMdZbnLvx zjB5o6SQDk{=O~X@m7-z`#oX@KKoMz}zdy8(`m&URo zVn_R7LNjhxrHkBGs(#G)?B0UG!II4+>X@7jpgCR&I|aFIufvX(86IZ`(D9KHkNL6cTfDh0T?|Jn((MP5BzifeRhEYG=X|3p%fDf z1hHXA0uH+%&jsg{rb&RN&W61B(&^)Nijq*`vzu2F2`RG%bm2%o;)9KCTn@@It{4Eb zi=rhz0%j*745xSh6lO2BtBgKsz)xXTz$c(uUCCBC*;=;!0`wAPwehZZ9JYso4;qR9! z)<$4|=|e^Ga8GqZCi~@SE}8!gy)sak!8k-^HvrkM!X()j-$y>d{^zRn1Zc8h=^jSW zJ>=iqLm`+Kmsv-t(~M}+_>|(vmf7Pf_V=s*{1|{8$oH&H^n-MJl#D~27_wM~Q(_wa zF#h{i8}9u625Mj`YScz$v)m<33bQD>x94bYNV~2R*&aOriF0VUHYO?>c}%rjz2^q0 z8u!>gRHFF}XiHV4Bd!b}cRDC|H2^+UH|bD1EH0=ze|NFPqHI3F__NNDkAmfyKLs5+ z663AxYC*IL%BHGd%(j~4ka$6h_-Gx_=1DHygVFTJ-cf+FmF+aD`9eX+9zEzRb0f&C z%ycePX};=$Y9uPB&xUg{%dOoG;5v4I+DS{ACL!Sl6=r9zxV~dLhwGrJDNy6GQ{4#O93t^u6|D)|q1T+I@PM(~$50g+ z5iLw~;RWvrBxEg&+vUUdJ6|BTp#yRRHPl&@RCG={ATOmIsSC~H&~I7MPI^U=*vEN) zxP8wyCM&5!&exJ?PZM~ewq#%+cFuujtbNY^_|dvGCn%N;2WgWd5WTr+_wE=O?zQpn zp!Ab>PL$mYb{zA}?D&=RWt;Zy|8RyqsSZIkd*b*EKR-8TKmJ~!3eaeh4hH4PNBxBZ za(X&JOo1x*z{iu|@BsmO{$rWuOQQxjP?+BoW_J$|Ot&nO_pHdRmpi_rdpr7g{ib)R$mIF#VIU-5c_qzg3lbi&2 zGUWr*;44AgXibD>uUvsd{>x;tVdfDTRlq-|qrL`MKP6ib(7r2{DLi81F${3dR^R0s z8gtR=L3*3yaDIe1yZ!e5io@1G1IgZs$_AP$QZ_h2vIvg6RNw=z&cA?+?{-ZU0lXVh z5ks*C-`xr78o%p zL2@+x*N29F7z7biI5C!>uZ%)ewEsA+>T5<+T}>DpG2OiCU^Qg`ydkT5p(e&l3R>35 z6y+S`0P+y?N7y^NOQm-g!XrXK zL?sEgk4LpENKTk^ODS@%y8rva?T9f+o5<98(Me8yf=ryG_pox3V?X#81-|*Jz9+Cb z7;6vWKS^G1{495~INayfcAS^=us>ktg=7V;zHXVJh^92^0$O_E3T=!@t*~0(>8hHD`q~3i^noIu* zV7avAza&|M_}ONBIG>`CpB_xN)l1J$IQXxqS;L7EuwkcKo@Ls`GB?CUzk3hQkmFbm z^kvx~l^46<>y!}>@qb!gYy5NIV2=RXdwOxj1Vlu2|zZ> zD45Em@%?$os=oO!_kuEK z0&xn?w)tn$yfl~@>8p!D>qbX5@2!OSsK;K}wg=Q8h_7*Ly9q~Jfo_g7%nt~vJB{&I zGhaZ;s}I(B{x^f;QyI;^ML4eTp|~kHJURQ{M#`h@ySngjt+1q%VGzi}n>s@X z@z@xl$NHFN(fl$xY!G@pZ1YJ&Ha+GQo5=$s11`~xx7>6^aTw#( zVV9(vT@M32nMkWNlM(1i!CMr$7S0Lc0LF!6{uqbu)$F{Fm(Cw1Y$dy*y*2Q|qVNAO zM)};BF{19!BKk2sCkEr~(s_JENgZ@W{90$>zb@UK?m_(WzbH2UHZ)J5{$v5lHP!gw zs0k#@bh!2Zr7eVOTEw10vKWoFks_Lm(As4LU#`-oTw(KJyqdnd4D)=jvV4l77!Zi( zcM|Eaz_M|Dk6vwSj~^=-5~nqYA7ihynO?)=)j}vn2enru$JC=1;FRcek~&F;DLI%X zgZu)3Yuu3kIWYfbb1okWGV;{CI6Fi$;`s1+fDA&1|6O1}LBExE7`25~^kEIYf-8t( z@kpdqK-&s^a)T`h#K0SYZz1qFRVl)itIK1l`&{Tmt7j4wZlF`WWLZ%@(`?1o-U@NR z4@`-wZ6Ngl+hVukI42qz5HyLOC9=Oj%NNjDE@S$DbO^JX#qpJ(;ALQSh~36IG35#1 zAOZAab$X%|D%`XjMgKdwwR4y~Mb#+q*i(_nDpMGq0ilv`hN=gAP38b(t4sq!xdhT$ zNR{a%!1M_NS^=Zg_|>I>^Ku--Sz><#-xV95&?7z|%FppL7bHYX2xvluHmXnpcyIW74?p@<9g>n?dD< z{En(X-Mj!sF8yeA9O&pEUIfzI=Y$4CD3*wV)T!XCLM(-xEc-9-e2#QnH8^0*J)o-{ zM{!s&s9UX zF<@x30B*qT_&t72O)@OyCRB*=Ll`n6UU;usd&TV zR7;>gI~>)yVde@byW}AqV{xRKh=EB~ z)WC$h1f3s)hH!P`GeAM28S_5iWPOL9$McAe>v3~pIdANkk3rCaY6Cx3)Q0D^Vhu6J zXSG{+T56`!(`hu}Id(g)BuIp*+a!QEL{vs7tzZ_cQRt)T48C7ruvjBQJ4I+Y$| zT0l)-+2jfJzX=&y!lHeqv?prdS?`md^TZGi2WP@fIlff`d<~^E?!7%##?vJ)Rq7cL z1Hc6zrwPQEIkW>+6 z2ZNzSu?v@Q10h$c~{1O^c{v0R>IZSZL`;kkwI0v?Agh+|(2X5TA;k zyN#$4PH#HiBy32(8lf8$MsC9cX4T?-sWTB)N`{Gk4_q56inaqWEPd42ahpRd+%}`m z*7LYwRXL0(oqf^rOBgK9W5QhnJ2@wQ{P^C0$}TXr#C-y~|4oo`BAkNTF?#}D?EQsK zd0O)qu2m%%kGMyRR2Q$H^7Dhk_LxCUJ8_CFHvNeK$%zn zw7l~d)Vb*xO`?%*A#CTPdP#kdUJ4rV^@YEex;P609?M?Un~x&;~27gE|Kf#1kdnp-4kR-1rk=24X#3!6k44 zXjh6tEaHX*l?iG>1F@*wu#vNv{eHzYzwww6gjHTeGtl`(};$6eh3$*?=mNF)$ZuD_r!o;V^bio$f*&2}5 z%mM}}wSmK!6)zJ|{Y7Oc6Ud3mgpF9hh9;wDXyJ4yiveEp3Ba|FOvuK&C`;hs?UdJeeZGUp$RNE^U2{MGt&)(lTq8ROv@fj;k4m|(d`75G}; z;(ldz%M-22RMgJerJDRh>NK_svCzr(4F2^Kbj(K*1KpVCSpnW?fXK}9P4zTB%Q=>| zp~L4S3OWBn7HM7&l7UjEF!}TX!!}bmW!dsa;!sBR6D^qRLkv}jaa{)Y-FZ5XeC!L?|pgScmKlaB|B5u;DmQ?@Nt0fgmjC;VGHEzZ$FjVh<=} zQt!B=4PS#ksTtm z){CY|GNCnXs%5F61O`Ix?zlu-x;{7dJiGzfR)*y(Ary5Xf=gAB-;0gcuJo}lr=^p| zud~=8OcEZSFkECdHXq;6)^+nh=YD6gv1RSg9^d$+!|@>QB$2ehJSRhQKo8#uV3FRGG#lY8c1} zLqoeU4$|x~Y9>L;Ah!_1L4AUADBbdQj?PJF4NSpbAnkgU)`89PANtp14RJ;SKvLf& zuW<;Jg{{yGT?b<=xJyFwn0xA*<`m|V1E;smf$42y_-GAxzpa>o>z~5_5ED=LG{^e} z$_dbvANwb_>lJs9^FPV<|L-8S4FFdP|I4hn|Fu7M&UA^(3fDLa0me)wjb#xDQM+zh z4Ps*u*S@4;oa`zN6#< z^v&I`aP?G)V8#9FSQKbxzuy1e%c+=Rg*GN4@PIxd6I1S+$c*8%tHJH`4$KL6jKSXg z1mjQ9mb?|@#}T*hs5bX#3p7ZQM;L8#`mK8xwvFM)FfHRQP>nGV|F zoNv<#_4C{A?Rtj_QSWVN{4&Fsu;MIjGdI#IG46rJN8rRz6M}7p7{bgn>xxRcUscwr zNgzH3))qohTMYEg11JiEUNUJ45n?II`8E~xK?>~ed-o-O*Sk-FpKHKe@LkGOWPL?b#qdg<>Jb4$kq=U# zJ+Fnth!wJ!P%vg2!I+7>s(z~7pxqtsRXu<$)zi$}O(u$8)zN%j&ickYSjGyDdnutW zk+q>?%On}y4>|@a5SR5~vm55eF!MXNVu09_nCHQGHwu>PyqVM$DFQKGsF=*LwbVCs zt4PxP_nL6Xi+q^1g*i(Z=uHhbW33;?juBo1Ar&sH5}FUnvtc^oZs^FCQVWO(`9Rgs zz;oM5WC}_Br0TFkSC6Q}tb)b98$Q4xR$p6TpetKrc(k zpA?b|W3gNqgYz~X9;9Qf4$zzreRgjgl>%&=1M*<*gQH3z$IX5!`);yRPrFKwnM@Mo9A5!)nhHAb z(A0^q>j73DaEnqCbiuFpB~7&yQO0-GJplWb*gmhyu<<7DZ=V-qkobObrw22aU~r0m zJM?U7cK7@8@v@<+NbIFNp#Of~=MZbKDA`9H^e~rhWw(od_td!9!w?ceJSEd9SOjVU zjFPs&+$ncH;wYn#x^_b55&*8- zU67Z%k<~&+a1Sga8dN9>BmSO##9z@2LdFNPD{#NKNlN7qHo|-eMh|BK90pzcoFq~N z*}!rPut~K$bCk{Cmhe#xOOZo$6ofNCZY-gnfOi$Y7126a@XIa@ju-@&K;-IEn1#6z z@VhO4<$w^x9nLSp{&@g8>ngYQRXEp11fI4q=^S-#b5gk7`<9$~>|cr7?t^{(z(Cq` zy$CWa8p3n}1mSAsJ-dPCWOxD|D~n-;{N}_RX93L<(VQX+AxLuJh}t z%_>!;2X-0CZu@z^1PmmQq+_;cg-OE`%RCcJgJ5(^h~;r0T$~GeKOW~zvhpUE;!Cr& zI3a62tZzikv4Wc-uzCsz%_!B8W>Io7<6Bk*`&_)Q?VwQqH^PAi^*6jTaT&mTWOBOJ zQEX>RbWSsi*E#0eva~e@B?bSbsbMe-Oy1*~Sw{_yfNqDR942dqlUe)0aE34R-kJMb zHnmacEM9|x>;62DPZ0G=eQnHh-vd&74BTRMc+o2`0HTGY_f7ZAYmsO{&o!Rt$jKn6 zVV}YK2p$a7H#!qYLNhJm37YU0zo|Lnq~r;v~L0QShT;e*nw1 zQMcn1S`EJ7XkgWgJb4_cr}#%B_43`HkJ@u-AW#G_7woqu2nn1)(M3HD;J8KWA4oH0 zAUkoMW_ny?FLao{-gkziY{{{d*g^MuHxm3D`DB0-VdDeueGwn^To?;4`Ks$Dx?t!G zongio&Oa0H1-Uk5g_B!1WMM1(t^z&JYw@;{pZcKV83?{SV~>b41l|e~2O>Pq{Q^B} z9eWdnKN#~w;vM$OlQL#zLWFRC5q*SiqDU|_oC;OO0M%5K+I<)Ki>w`?0NIr}YoQTL z0Ynz0@@4se%n|WeKIoVU*Mi;ljBp)+G7@)VN6%Z{DV!&=kK}8brXqYys$wTdM$CDE z`j$fTs880pim7*bRCN^-x1?|w81hq!E}T5Z$6e@k261}NuUyet#`RQCp>k=CBzr<< zNJ)XVhnCExmIcTZXbZZ;NXXW#)+q)Lv3?2#Jq*kOi!X?2@q=P~{cl*c%8p0*pD)HW zWlXgck{h4p_Zd*ehvMK=ARvje8c`5rH)0=Q4}F9MCb2dxea@AuC)7LMbY=Ex@`H;w zE>=Ok928iKN>;!$SCI$`=WM+T1`$h^`kRdN@`0HYp?_Zvb17jk2Iog{6)YLTpf1E- z*g61|24Ci*fgy;gcRcQTPZzZE}^8Gs)(-K1I7z~#e zM?^_3==p>aWLzYnDZ8MQq=Bppnap&cG*FBX&G-w69mBq4iqh37QwWOqi04{%Q@Gs?(`Fe=#N!3bP{t2n zpgoyE=yIZDf>UwlJbnX_Dj{G@zFr(>d5el)#R0m3M!(o8(8io`G^FU}MyT3T4=xz>)!x6gtzIv)H?m5+EBkBY0S;ZaRknsqg8vXa$w zRA0phmH`-xOP3KQObd(~gdTx*Dt2kllmi6IbK-DVGUpkjv37SQ-|HPv${T5YQ%ns; z%<5uwNzGqqL;QOU&)rGFi91?XZRI-c1CTq@52YmaDc9msY>OWm06Yn?N_Fq2Q4do* zKtXq5FI-Xu4zl@*s1r;-3_~UbSAYpJ3Rl;LjYu(x@J#zIYaEPwO4nm!$+!ag>ZedOfdz(TG%_91mNvT$fKZV ztmmMp$5%&u3oXohA!32uRVmel9*H3)EZs@BpP1&t4PZL_1t=eJ94AsW`e*!PDsxgs_O}ww8P`}^vKb69 z-In)GS7&zRR(JK?z5?t8Q0hlyQP>ZSd#6X#z3Up0v&`234d68{(I4Q zh3g!nU?6Cq_~bFDb^Zb!yueYJet@#NLwVwjz6>UX0BKmUs_$UxOX@*MB6)2qGlrHr ze8;_3*R_?l zBl-y`_l*r&EIME^&+?wjgb;u@JQ51f%qg=>%$S0LS)pUw7HrLMjK%}s%M#Si2X&Ik zpazLi#s(aQ!>X$ro5FLT84 zD_!yRju8Oc#1Qrd%$A+;%`u)pI>83iY33`U)B!ZNK$ke^8+?lA^N?#Y4{77yb`R2d zp$6VOF&z7htxEKcarAh+_gW3FFG#tO)n} zr829H<`D@k1b@RQkcs0OFLaqa-e^8n(2Y6ECnm^aN>4wX{-}8-c_=xFY;!s+p~(ju zAkzh`=3sUt;2z4C7xuiFZ!CcWc!I~g!0c7P1wf01FEsV=;`38r=I*uv&6GpmaeoeS z)pr)`@~()1*=tnI-f*@^C0SMzt*)(DR>KwUBH(dgoHr`Pgnbq;op%e2*nYhaM&k^e z%EOa(e3$RTS@ciCtQ(p13p>CQNNEDUmLEB3Rlxt#-n9ltSzh5yB8hS_rId-vC5oVv zQi&S5SYx&p5F(h=T1|nH;0Rf0SVD`Kgt)swN(E6-3dCqh96{qu3K40tLIN9XFjj~w zPzhm?4IoPiuA7+qWq13WbKcGFV(g5})ai8U4;d6T-+tfwz3(~Cc`hIj)n?crT&&P* z&(j)A7y)Zw7>0e=K2<(#WJ6h36g>Yru=8u|$Q~=GO-CpjZ$TVwk2RuI|5;Rdl&Iki zlMU^G0~CtjU9HSi*o*~!TR346H^fZvlGL$sR*kHQ2xdf})#;9AA3l&G0{!A6eIBpe z*S2XR`)!Im`F)NC6?x`x&s^M5_WhNUYn~0R1=lpCl-qroFEldQSni&amsj*!Z93Hn z81c}Prm?qbvtxH7+-gMjhg9i|9|JQri#W7}orF9hoBQE}372$v)^IsjU=9Yu(?~{s z&R4A`)8i|M2)UJrPg6&CxDj)D;#HbOFb&qsxKZHkIYW!2%hi;7e;T*3ubmgtyLWUf zn*<1{IXSVr@JQwGY(iN5?*rlNODzvis}ya;X=p=bXa|CF=Axb_+2>F%_BP96>e9{O~=#=QeCN2iWM;W>)Rgv~RWUza+ zTn3@UQ08^G`f*e>QaCtaL60-sLIq7IK{vzFzgrrPWrOnHT4B@>J zA<1Hnz&kFEuBdQY`fKEdJjg%AyC6vYQNXGK>xBT}s@F!!Lls?PIjCY&6nd6R>(0BJ zKg#mK75`6aIeNpchp8Z~A%D>FFJ+qX*5L4~GS)d5Y?nl@wRa91OqKX{XL(}_x>9;;vRy}dU-KVN%FLd= zA2hF~L#A8UpxOdy1-Hq}UZ@K(GQIYU^4)Pk*iGC8b_60kcZt*zT$Lqfev_M^6vE@& z!<*n%!mNd2h;)fl&!u;X+G6-CW`pv8&eK3DUb-&rA>=SnOLJ2vsKPyH0hA+;h?O3}^vJEPk8gUK5!u}A+Y)Q^ zCT79)PO?rvhEd4K#M0Up23E+%1g@T}2FvT|#fN{YxZWCs+ z5X`ifJP5nVM9o8#OD}9Y8-xGT-o^o9JMmNI*3=Cqgx+6n5#`%*z{T;?h3DFe z4A1o;)1ZZptX3}HH$;4NL?`ug*tBYHHVrWSHjZytDCn}xCZFTCe&DnUPM9!>o3m*>TVa~k^3oH>zNo}>BSXVlXxBf+9A`mdG&g^) zAq#TNo8KG6UyH^ms--jx?Og0xgzvd&8RRtMCE5WUCz0j8qK2mB%}qr9c@B>Kgz`*K z_Tg4X$XGWrq}MA{8TP$Hn@>q4^Kt>`vSNu<#++}ug<`BTG49ZymkVlU#iZ$biuKx8 zg-Zp(@OFT?87-QE7@Bj^&Hn0%8?udnq-KQKyDq zjD4P&FE9yUasS>e@S%|#!J2{&N4;_0u^HS&kV8L%ji5pV&?@S2W2AwGuEDk24aJjfRpC*<{RN2Fds*CTYLE%j9? zVr#5(*g@1~ULq=b=9clMHIRoF-d}N1=)InPX%mM^kxPcvTwzg@H0{e%3GMVvN*DE% z>7&h9E@0Jn(`&M!JWFq4ogL4qYmd~C=g<$wx}Q!zP=;Muv`1x{yZ^+Hn9uwVx)#2T zv9^k;8L*(x*t9UtvhW6H5o;Y?)0lVNk5u(El{V2i2SwadF&DOrm_Wn&EYUicc_%30 ze{Uait`wTLThFafaWVg9_h8pxCJ6F#FIrEj)7szHO{!t9oF@}G#XN4NZ zlS(gGv`&9%`#AT*C?dwX2U9F0za3?&`(Ab-?O=P{Qtxc}BytQYTmmnya_2A}(BCU^ zCOA-@CugAb%H%)$PU~erU8n~6%CN=@x_;0AM!SjyfES40{}ozHecX@Z5zc-4*hLI;$2HqQO|9ZlK+=cyq?^!=~bj{cfJzM9p;VC%tA*El<8sS33t z8?hUGJf3!PU(rBFAwWL%Rj4%IxLVQAv z4EKFJgJuN(3=(=3QrfZZ>x5<(6l?-ccE6o?HDM`5ja02U?3ZL&y%X3Hn}pzuQ4`Rv zd12;L$blu!BaVAI-|?lnz*J0$3};DBlAX&QyH5x)Se9-FSu?j}@(pO#o@8f{i(dz- z_nrKhy-$fmCp^gT*1kq;b-7JLV|vG1=YCX!9Qg{{>7mZN#B*4( z9n|aKUHUx^uK(YMUr7_Vg;5Akl(bvK-=CYyV$stdt0qcCX;h+8zOpnB><&%wlhn~*0F4Is zvPLGC2ze2%5uLovX^4V>JzWA?n^G}J?j59nXldqQBl1Tb1PzoI=troLo{ZA$&wYP{ zLO+q4#za}!q0y3f0%Z%2#vkYLZyPoDXt!}SydPp4qwB~jJ8=Mi906!jQkw;1-&LOytg8LPMVSG@m{7sE2r9&J2I{0*V;~WB??_&i=^4NV z7EENeU}lL@%_}yi0w{r`y#=;7jN}NE4f1F)>U?!b#xke?Gg`Va$U^K{+(0RaRA?@S zcUizZ&Gebyii<8H!{(XLP%Jay5ChFJKq03GmBLa8!~vIvo{=aEQU1~oW2dwH3WcoASO!`#;$riX6p^ixvtMyZ=&~J)jgq^nh+Wp{%iPf zkk%b`!1aiRu!pB!X4T}1Lu>ND#h_~1jJByDreV*x``4-An@Tj=vrVvk>NL)o=@@!5 zLb3zH4+y_G=coZg?#gQ)ib;c?uIV*hoOR(mX)`o@{TV%(Qs-6dg1_mR*A+kcR6CLo z7pGo>R|f*uTH!Kt+nN~`8BQ^35WaNPO;tj;%ky|@^+!7 zl(w?*T3Vp-T6A@L2S0%4@ue8K_nQa%4?eQcR-X>Ot1T0 zRUPUA7dmFlsMfJfO0qoI3D!kC^7~w#*`9mj?6&q@J6yC_Hg$M}@FKyW2diino$r`V z?dWtrX~VBo;LiJdjrt>kk>{q91LSF=EdYy0-Q}UpbK_x#njCW>JHwgf8+4bB-T!d< z@3o1rUb_(*5DJ$dT2qfCV9-((4}TEFKHvhxw3cff?*k+%Mr0he)RPqXNX%TA80`7{ z<2W2M^y(O0@I5AhhnUpu4;j0kqrBbspq4Mq5m57b5-oXuE7@JiT;hr&i*D8`V5y4> zkLzYsizD=e*nQt?)F0CzmhE(-ZQRLdGzllRuwp^_$5LM|AcmT)2CvPhs$b6L$f;tS z3?mVn=O^4agECJOi_~di&p3pc#^QjtjTv20D#cviAV07o=QdkSPI*Mj>`iCp9@F`l zU37bOVc_zZ5x2uvDF-NdbcX9licc@}GKJ@=N7Vnbk0EC`D)NEO!1;!uRG%S<5r z7x|7f=JEw&1%jow(dL^5l?i&x1HhZ;chHZyC-zO^utmvim@eKlB>sK4zJiZ}-Y-Ag z!-^E(4X!{lIwdnoI2b3Ia`Ooz`~yxXh~qdF%Wzq=#hY#y5+Us%&tNErS6TZ}JJ21y z>+9KSpmtr*jlM>1^r(Ov9X1n=L9V~W@jj8s<9@N5*q%2}Z<$OhbG4OeLK^^T&M7xR ziFIF`01Mjt;_Np~!DZ3|SToMhio@bg>NvA7%1dEk!(EBybO*-&`a&nOR-WL8f$_E+ z-u?3j<~LM;^^n5f9@+^yR=Ecj?1kmrb#HAh7N7SJB`W0=`Q5yRYc0BuLeXHigKa4Z{~wM4V=VXfsj)4>1g zw94)b9@QjRdjfbMA7Zw~BVPr`0!U}M)MTZH4DKNRQoe(b3}_8@yN_1EB5y&Wj~^|E z$JSrM6AOmIXKHX1(3z}*I!`P~TE+L##52)PK0|H zr><-Y)5JbefdnH|zxg76YNaO7t2d7n-TOtKe&Y_JHFrjH~nSL a(Ay?Icl7wB1qmAblQ=zT+OD53c=lg_B62GL literal 0 HcmV?d00001 diff --git a/tests/graph/branch_002_max_count.png b/tests/graph/branch_002_max_count.png new file mode 100644 index 0000000000000000000000000000000000000000..e0d58a0a95756d22a3ebf767fac4a63f00c4601b GIT binary patch literal 24608 zcmdsfeO#00*>(VdJ|ZIPEG<;AR_c@~t*BVV#BNwi@hQ)=%2QC{)(TaKv9$^aBv86a z>r?5dmPT9Bw~A~sOj{(;@{u@gT@}p40YZeNSfP<(g5e|IdC%)SZ;*EF-tBpR@B7>D z*&neZ$({SYKF;$vj`KLLH~!<9HGz{uC-Zo`!1$-)*70~=L-61Bd;H)vsjBuF9#7a8 zANRzw*6?W;QB=#$5X-_^G z_gdW%*<|h7w4|)vSy_o%_LFOWbMr*i$ZUh~iXz$Ey2K~soyFhttQ zULE_@*8OsKh0tCR6=?ok==@yR?0HmpCqj6q4PUR+7dL*hzww*1^*rIwYT?k9@)Cvp zgkrgSgK&7m1zXS%{+q+64>`l~T9fiyUt+iF*-;G7oyaZ~A>ZmaDzLpHuuan5gp2J@ zO=(Gz-kB@ClVG9Cc9u5U;q7;Xc6>W5dmzzvFwypHl>MV9JN|c$$bE=@q_pvpl7DkO z|7LB@aeQAib5%>m>hqWKdge-cgqGR%o+x)urB3nzyT+MAAwBGx-C@>D!$!kdO}g}A zW!}XspS&v}`B!p%jXUBjs9VKWx>6hUK+%E+UIW_`>QI` z(*)nH%vGInQKQT`!4~o~r0Os&BP2TLcFN(RV z@?hG8_GEl*i7kU)j>@m5SDd8F(fP(Qi7~-PFLGpMFO=VzC%@A<@l}(qbALd$k{XBe z+pU!L!O*VXaZ@L5RUE?=%5V&hP+JZ5^XdZRG# z(JAM0b&@Y&O6RJF@b#1^pN(*ag$JWq#T%S$#i3EUmg5~565U@XO12rYHdeK+@j2DT zPi|?)hs)6RS<2oWx&rG(1}E3xkk=-C=M*zTV2 z+RHYZ_Q{)qFRR1dZ}j?Ro7<&-IDN}=3V#j;92V5xjPgrmd0&?0y^`j>%$~xzG>F!I zVEuh&1J3J$f@14?6DG-RY^tB0J%H~Guxq(r#L074wRP&B>fBttQEy>`qrmY}NpLCp zC|vlr!1|?81;@0Xx;mVZPuYK_6QA3!85yPJ>hsFxtp2?Xe6MN2Q6fjBp!a!xTF8ec zhbdLjuJ(OfCJl5h(eBBJd$3Q2%fCSsVBMBFsk&C>*LWoTQ`c2Zx(|+9u4Qew<+1P@ z2iwK&_h2<|PAzWTKHO3&aXioOeSVLZz0q@fc(3b~0$d`-wosgL!@7$_{K0z#gITB9 z>Z|#cEoe{wKIuockn8rZAeR=I_?u{}^zpti9cruK_H(wy3d*T&6#RLvqq zZK0MX5M>k0siTxEdQ%6;a;dE({p^er+wsQQVHB_+(3pkFa^a0XM&ncDE`g zm==)EeT3V{XKCwcPo*ln~uzp&Z^d1M{{T-7L;GD;HJ9xnu|S}!Y}pGh|avJ(F*ZV zRRG_4kh@msvM+pa;!JVp6ViKyQdmY`rs&)!S@d{(kd6HXujGsi5e+{zx5~c6NUIuX z$Ay}L+q-6()Bm&KbAl_*NF3mkcInppUmx|8;J!gUJz)0 z4Cb~D_9l)H&1d0$7OtI}@ij%0vbFc6)VNZ9fHl)SeNO&;W>{?b5a$Q8I@;KVlr9dM zWmHAvPt{(4m{8XEO2$Ct!#%aM;8wLHu0EeDWka}7TTwgmcy+CITXp_383Vf(SsHSV zH^uI7REj)P%v;L$4`_ck^q9;>8}z|h(fYdYe4e*xSIDZCYNh&he=FOV`ts(qARBC$ zuT^Z@e63QtR%&v0vHX?((Vg(G+k!lC7V%EDB4@H;wNSmWqpBJY0rdVdv zykX3%=9SJ|e5BcJ=O$M0$n0(htlfJ(m^k=HLRicRX;6vsF;GG>V1c(?Sxrkw`di$= z3w3sOYoom#l9ZM;Qnp#seWWf-gI&pv8Qf%lRy%UF;-Jb6q58bKSC%QoAsDPFRJ++N`|Bir8unW&vul&RzV(j7!5AMl0}h*M;;;#B;Gl#qdslX$ zaR~mqmPh-#K>seJX_mdacuGNlH8gcnDc{cGDnGX&RUNX^hJuuw^4`4iv4)xnHooe%+4Qr#TwNA^!>& z=&~%o7|Qo_K~^#1LtWKWD+QNE+If&fmPccJ39m`6P7TdoU^trd5N1{thNiQ)Req(E zKG~Aq;oebDoV`saA7&w1?6bvDQ=s??vqzlS^a@76AROK^w>^0|z`kql zBk*B(Qb>W1$F7g7Uux!SvRH^@fp&XATW5mK9i|gsLT(n@8!j4^7x(?b=v=Ax0i5?=H93u6+*Iu zn8-tz`kc(Rl77oWqsXn5bc>$lr2UdG>$fzhfFjvCua4d|%AQPer0))9q@=3WLH3C= zhx{qtl&zcj*WF!u7&eHBL5O@5fw5NhrN$!+j7!5_^{i>Mjq*R&J9FhdVs}I0V@a+` z$nr4F)n2#-D@4+z<}L0bgvEojciiEZn#%lA;fGna2(L|5$fwrF&@Y$*oqN(6o4426 z`=e~7Q8^jqS2KJ}&Bz*p4|yu_=Xl}HP~jYaIp&zs?ojLPraZCXCxl?c5ypxLR}*bc z?GP8xbZ-@pUToqvVK3o`T8RAxDee8kx@+CO5`P26j?R&kc)N^pA*?=z-BUG1(Ux4? zL>mb`J(?7|Y<6m7w3>jTFM;E8kJe8&Z;2OJ-jG}0kOrE^2X)=WmvrJoGPQ*kadbXo z2!nt_Qh7BU-{t}`;ir|Qzgc{PHs^#tN{=F16YJ*A$qxz|zhXKAhzM}H*!%WvI-##~ zvG%9I(hp>eGkGF|or2M3_2|6b6P}&QEH4Ojjkit@lqp^9u~#udEivv=Eitl zv^t?BDgF2yitY_D7UqZ` zvks%tmXq1ycy)xaS|opaC@J>p-UjzPUDP|Wi%lkXDg2(w4>nuW0;6h?r6ziPsf02a z7iA$QsQqSo$G*^z>S4o_G^0KtLX7K#Q zt})anp9*xzTSqG(oM`4#dov7GUYQ<>LyKv^hcI`K;QcEHv>0RbepWVY>dUZaB!?px z<}=!uf}1>;fnfJu08j4@U6nh(lsm5wn{0=NS@v-N5E#Uzm0pPBjP>8_SWw|y;+c#S z)eQ-x4mau6MHVrx5i15s?}O|1q-3aQ4SS_vf{92JY|>rC*w^4vf8j)@%r=N%;&zCh8>Hboz5O zGlUR}kv9BsV`PE)tJS+AwR4PZO|h42x-Qn_$Lx$;6<0rmtN6Zxfg2jFd95-lhrh_O z?Bh$(2zs(CJlUB`H7nl>xq^5(#`Cnr=B(WJ>t$}-n=Tf1g6zl;%8dw~LaiA{+28uT zQ*ehpo42)B@A#?3JC8+WfptmaQ=5iOBN%WoDlBEgo!5_8=ux@Wv$r7?S7hoDDT4It zldoT_aXphZe|BRZLpajIeM8+`fSz1>z_M1B^L_}ekc`XtOt1g|k*Qv4{;>G; zi;gGgULd~7t?fLedQD3b0c;wdw;tf z;LmRgN|dgv&P$CcEkgXV(CbuNsgt z=HS6D0N_gXVU~wHlVA1lg536~>7J?d&*ywLW0)mU3%IF$KQ= zv1_SP-^)VKj+<`+)`eWgqPyy8`~8OeIVq`d}8n40t!RzK>7>4x~J@@X8=W4&C38Q`IyY8$6HTasfePkRVWb2_m*?{C_iMQlJVj zu#hR;C#}FYjf^gFu@o`X*!!MUga-_D0u(E4Ap`7Lli#J)Opo`$0ejhCtAmnhfZ%ctg%HhT_rVH_D zUUK_l@@j+3-v)2-)R<>Y&AR|<+e%9=H|fXZLlDB=;RNC`jDo71g>(*?uJ)tf(Au;AFfQ%W*R*FEV#oGl8Rnup&C7>vDo4x5eHK6d8z#KL#Hb=7v zey4-*Ru>~Yg{I!$e(c&1JlILG67}1>hE%}}$O7X+95N@h_t_0mf5mLff}xXPbvFw| zQU*8FW0dMQC-)ZO%3o&gC~b7$?mEnA@iN=yii0J+UW+WJ2R1|g5?UzMZ!xGua^B2O zQx($v{{N|H*GCv@3R7~92BZ&;NNtAuppP1r|F_=-xUPccj7#aZUS(9+zH*4+V_2&ZITxNia+L@a0y^Fj5<# znf>EuCBD219#tOrwk#?zZPKG6a6H8jvkc;=YbNY5kc_cy79B zfw2CXv+iKf?*0(r{*@vWohmWarJ96M5@|7P8M*p3e|p8 zLD*59zbCGKi3Z122vaO_R2TYlg{1D_!C5m=tl;lUN9}JEgmnEdGU0b*QVWJJ5X!PrL;VN_5s=5QX5!i-2=GEnx3YiR-g-#V{3Gs=c^ zu~!kukFwY6b{6^I&YshVvAUBHzx)wn1?>~<5RjlR!&ibX|Ha5{oVvxU(q^h$ZJ3LQ zq3Se6Ial(RqCU)~6Y4f5D6X{eDh_TgfNWOldK}>P#a$%$%WUhRWJcu-#zFnuCl213 z6(1F0yoM9CSbI=*aqZUQi`K_7xU(%joKpZ|zd=e0TaN`PrnxUFJwQ(n@c$1@&!)|f z_GR25x#bfsXoW|^|2>>;C!U;|3=o;suQI&y@E;}%foA-2>n>s^V%!35+5xTuBoG4y z-5>l?eXTOUxfUQLZ_btE+!=-}Zg>kxgM{K>I0TK81HdUmIsO6rIH_v7Qtg*5YYWx< zn_(;LVJ&XN1S+tI??%FW)j)|~V<@QRSjAjpQII+Ta!LaJB^UmJ8ES#?XnIXY1}WgLtQdk82|y`at|=&uu3S3N+(* zj>ZA~#v*M25BFLvA$JvVDW*e9RzwR!twy|}$e;osz|!wS7z3Sbo*F}OHwZ6|RLg8z z4CxGo&w8V+v!ACv$J8ge@1Xn})SNdF=-o%4*F;o!K3=b?@OfY+N}+B4QG zS^PQR6SxsjXoYzH-A8D9LTx3|&=4_0+oY9g`=VUP@?udBaKReIG(+naYQzE7Z;G!q zH!0p7T8Z?nl^|BUG{SgPWb%ecAmXz1LpTr+`Y{RCakZq}1p9nL!^6J``EU$2bzvmj zZurl*ysWfFu56Gi9n+{%G{QCKvvz&X)rV$Mg^Cjsp(O1~`>M2jX0RTV5|KlUzh8sX zQ5%sz-Q2Nhu%ndUhf(q{l%g@@EW3|=9Eg;a@f20>8HQ3mVKMkQ3@EaDPJZ?+@&qZz z-v)7GFEEN1S)O0C9)z=6C|HyM|!5kyq zrgvmQDsyt!uyEAxnNw|`dQdV^>eH4US@|{laEVV4riD=kJjXBBm%TtI3^Zew33QHZ zuiXn3O^l+LOT@am*i}$Y@>bAp+4K@A>`4tjV=PB{pbQIADG0GE=j11*bx(#mfv%pU zr+{x!?Z{2o3&P||xmJLf3=nSwbBD+ioRNptxszL>c?`sG;s+s;HTi4O}y73LCaQtB9EjFgFL*kHAvSNIeY$ z&w`+E_k$WxqdPfLDgCz|!4)j&pNVB6k28p1klsksPf!V{LMuq(r&~wXU^d`tZAqZ5 z%>+Dmg##L_Y}%^H^|_EK)xwW{Gl8O?2=V*=I&&bq7gL}cBkcXbn}#1mnFTyA#QW(j z&&)|lD@#aholHVKSLaX%9jYo<;5(>9y%%Em&e9zPXHUTJcV&V9E3?l(NPlTY{yT1> zf4Lvn2Nnj;R>V~mbtmgc6bI%;$da5t8QeBZ=HY5sLB!{7u5pGj9&`n^hY|POi(HUr zK8d?bno1!%=iPkbE=}j`IAhlhr{sjy18^aoCAhTnTaphr9&=+^<4<>z2z!`n*DFsS zyz}A7emB%bz_c-DQ79k{0yVHqwolc6#_NHFrIp18xJkBWoGib{yMKWC7O@ho5QsQQ ztJVRC$OaYGe2;>UiWOzIBMXPpDOXv`&vY&f?BAtxI%WO-5yi*mpXEoLrptvwz@B+BLS2TgbCyJ{Z5+Tiy zwm=A%MGxsC5X*<hHnhWmDA=tl)q zH;lbX;h&k8VvFuNynuJ7^+snOhx@%!DnX5tPuNJ!Dh+;(96lZWG(T_Yk$gzNP*=S} zHiJ>6YX!2VNRM}X`1D{gM-*5*lS5Ge3L$78Sb1$EWkL~)75e&{oSBB|eV{Aoq*y64 zady0wV5|afOmua7zsY;yn2QRkA!w;6qv{A~${m_qRa@%c(*#m!Xu*af0RNW2it7u3 zN@WDtMRZWXQyx>`WkH8vqJ$hu*inJbr8wyK&G*EUY^o_zyAwX&;HkvI#TpRHb#B1@ zNH4`M1S)|a0|5`P&d}9q#K;+m{8f|wq7?Fhg@C4l-Bh|H(w+#Y3l2te8cO3&*dPh<>K7s`8Ob71SY5lZSBTNH}+3!j~= zI~4L8)H>+0j&bJLtHR8x;z3EAZ>-FDCTM=ew^%M>hL&#;B}biR79W!3lU(u_97i+N zSnIlO$Lp|}rWhhJJizcVt6f38_0uB&3-k7*xtEwZksP6L*F~~G0}z!r|IQlAk>@K75z~oVmEWYqLqjs)iYE0VIZNlT#xe?s*~>9TfS`#6742Mh?St z=L$0w;?q6^#z%@?)dg~HIY275Yvat}#8?z#HjWeioQVk6iGx|Ign{V0tHALjmxwCb zQXMhF|7R5smH`rB@h*j4OAmM{dLQt-vd zrE8Kfoz@D@jAO9U7FiTIO1D_D$xUjMxteYmU z)Z?{&JH4}I5NM;}!IgTbJU<#l+yFo?8ydmN+1;=Af#>+kkpv$Bm%CCqf8a*YT2MpI z>}Px!_+;rTRRir**91b$l zs$*pL(gMw9d=7|iAF7J}%+T@+Od^R8QBU-+^Fomf78Y5@B zmq)9UTSierOp>A{IlWixC7%&24gAZP)$8K-j5|^I{mq7&**yw)Ot37WiwZpg`O0JM zZx(AWH{Ag5lSGE|!uh-l(3mlizTW57k}&Z zVpp?e#!I1+5gsoENlFlEz<4B5zmj$WFpyG>L)#d(W$BRy)c}Yxqo25zXwofCR-UJV z@{{K?bil-SgM&ISFD7VOa2;^=nw)3!GlETl^;6AnkL~K4zr~5>9EvuPdpfIvYEQML z0^DM(`zsj?e1?t>I##$&XrZ9>m*f>Y92uGN7poh2~$xj&%F z>l5FzZ!LILx{pPMX6c9c4@W3A4=b4OWQEjmwP{0Hm$g%fg?h$wZNO_hle63-m9q5D z25Z%;oI#kI<*lQxc9PdMm~1wtNwlbXUi8pD>Yz;B;fw*aX#Z$@Ss#IN9O0VhX|NtY60OEA3pH#E zcFUuFAjav_pzwhCw0?=!SX+qv->xsdxWQA^Wz)&i3c`erfb*W8OCL4@qrTiU>bG!^ z68FYZ5Jt6JuLGwjRM&PDXDgbVR4E7FGXwdlD`uw#oZbx%&$k9Pg91unP^3O|Y%EQ# z9%46Y@{L_~*UW_?^{&s0z#g_}-1mhEjz8sGiWi`)XkyXh1(X?46_A!U%4~>z?|@o8 zCajozA3f6CNXb0sc=0kU%!N<*qb=rQQ^|qi63hGxs_hGq?XI4FRN}iqxkDz_E)7qN;H8%e7m3v&OY&+vd{7 z<i~w3-_t&qdS6Y zZz){9J@eTLj*fbj?Z7EJZ)8Xdt>K!HL@=2t{NO91@_`0aZkFL*bM8))EH+==G}r<$ zWH(l#(1x?acV^RcFt|_ykE#&)+ixsuOZnTGibX5}eP??cB+H?y5HP{j1xcJOV1?hu z#EkB64y~4n=u;`c@FM{y5M*4~GayxOJ9!#w8Dgr*KtKz%_W%0+?vydfo%XE|9_EH- zA=r?aJodGmcuS?_qq^FIciI6qqDz_T$$H@sJ?B@Hh7cyX;n!GrOw|3yj9{CF z)tA|mdY@*|ub#((we5>`xA&l)3Ogtrh)}X^V=TlQEIXdzy$xvJtB3w5%*xd50fiVjl91k1Cob~My z(B3T%8C70ek7vq(ePGNRB{vs%E>~zAPwo8z;&X<3t2(egX6K(qbk`(YvrZ(#BjuMc zdCxaKUoiT+A;3If^f=SQ>H@%nV80`jeybQvVNjh|cQJ+N*``6LTL4GUex*Mc^+ebTWdLRe@GBF}!(Uh<#|aBKGZp2p1?g=6?n*}|&a zzr;+O%BA9UNCI0m;E>*-ivq(RYmOru4*{NH&m4sCAqF&Oo$xG1fYWyaca8cQ@wFdz zg?Z-UZa!%rx~dbktQ7up{eO2;8dYPk5``cdLHvyZ`Ev zwp~gSCj6T1VwAIbghtE}tO;gJ-7RA=Z?8FzuP65xXTJ(v);6JOfK@gWzF5dnpW`f5 z;Qx9vy^b@0LB|ZRc!+QYVjcgQTC?Ch-X#>G?EPTKYI44Zic4fU4GRXg^!UAYhIODs z%G9x{+L2aZ7GMlg5EJL%IMVtCAW<^gW4NJ6OMY+*C~eS@mYbX*XRRyH(%?QcC%+A< zGuyc_>DGur;Pkf+Fr06D5il=xSR`wh#}KFV)-sRzK$22qIii z%d5YK1Oza=g8R(EqHLlE@h^w*nH~RflL{K)ux2j}iF%dIx;^tB70QPYIA3NsRsIGv zfV<|B2?YE+UMdN5)Qo~h^#?R-UMcj$u92eWhWf>X6J%6z&^dFr%r?c41+p3HZB2Q| zb#t~+lLE|=*l?6t(h{JZgYj9eTh$0^ON&OlhV?Fv^(KqSsQ@j)2>QyTg{)N-`-ETa zXHY&LvN|9;uGp>Lt(aaa zII%J!f3f)r_!`D(0GZ}fXxU&-oC4fc$lOZ#djWHD$~E`fRRydtEe>>!)uIvd3_m&r zbkrrBa-HN-W4g=n+L1R9HO=#QBkIW)P|o`$lH3|E0PkWi_4BzQu*BHj#{ifwLnq@Ev2Z3d?kDW zy3QmsQYR_()H!prW75Q?Uvw==>}**}C(nwOf?EI`6P+W`nV!I?!|h-k2YnHUC$+bN ztB%uhGRU7}`4bctgkx3{)^dh@0-m2HIhi#1&cKaQZ1G(W#|d~&Vfa=XF6-TkeHbj5 z<$k_lg2PC^z^EwDV#aUxD<}IwAQIa;nXMZvL2PX%0d$cLCgST=aIF+YG;o&HUl5Bo zw-asO5)Zy9g%7HGsyk~D{da4MKrt5a;x90^c0*=sp$v;^_#)VxY|0ycRFVekUqxXT z1p}QB{WCq(M!%8czi^5G_?m!mp!NxOjaMe>(Gg1m!+k+-%gA7Fx=Rg1FWw`V#Gj$3(*dxx(s?Gz79M~py)1F3OGAt2)P)_ zhSngdPLtf^xt0iG#QrJZx5w{ex(>9OzmhvM7}iX z`ebYwp2D>ZFE)3v#!hrQ7c@B+8mND!cFxMDT8e0g@;GPL=eyo0HoZH<$C=)ulb-WI zM-a28=uF6_gFp~pkDrFc?g`D_sUL+k$HEHqgZ14(Qvmeh8pnk)67_GM@VtYt-Q#zc zl7v%}DjBrK)Q7UuJ*tQXI*ee6c6CdNHm#qU&}bY$IySkk4r937L2e~z z-v#d_Z7--Jq9pYS+$Z@ic+hwgj3ERjjQUkCaxJiB#JHd*zv3XIkP;N2P*bLcbkFOY z4R}Yj>y>#otGO`uh)&@1K4^MV&C^b1Kf1G@ra`N(2J<9Y@W@Lc7UhQgs4A^LP+aE6 zbtd=Pepc~qT5ke2$1fZY;Xf>jQ*pW26NfOi?+yw5(i0RZt|GeAf5qZcR-x%YvHW7w zDD_q6m@v;lWl?-+XhSLJTacGI`4Q7rR>I57Up3Rev2(;hnlZ`1J{J~Qs@TQUw?Dfr z=3xky&Ir~wPcI`&EMg2iAM$%~%qEZeyTWhgPlJUYFxTs4#xBGAgvbij(}Ot| zVlz0W8B7SsHWpg}GhlhbA0dh-)Oxbm3U$}*;EzRBmHNNI{qCE$C(gNKRmQ*rj9k7P zNvZ*7T#`>%FV&iKY*GiU`8`}Wv|%&jqoxN7MUJyF+vA+=wYq*9ZUtSbWIpQQ(BY2* zk^ZB4IHCsVV5Jo@PY1$_iasMpLXX3l?>1^%;4`Nyu7 z@sc5yd_0GxzB=v4u4wo)n7^1Noqe1gv+x})ItkACIKcQEtGocEn_)N`t6=RzTzhgS zw7^08k!TLJCp(vtGN2rg!!^MdJFlXC7zyP?HT4JG3lNi2J;dB9lR*8eDNJY4@zdEo z`LG=jX#j+9KO0xyjLW)gXr;^sUVF@A{~h-jPsdrn!6GhzzC*A-rWA6q@Z@QZO{V^o z`FR8v5{QLk`deSxI5%4C3w0_)L$=KF_?9(3;8P`~1=|9kPqyq+R|_!n8m@mx_=}y; zPITsc03l1Tc4aPgWHJX)Z{eW3iwKDffan7GWG1VNf5}OJ z2qm%B41V>Ards0F*p&l&8k_IVECH#8N^4ao_x>8(l<-{Od;dAXlf2F5(4Kdu|?`u!9w!<5tRe=cR2W4zXt)KbE1kj@oO=x2oo^zFADHhllJgG!VUIM zpN{p<`q|KK7DwBXiXw323d4s*WWa`IZCu8&a%~n@IVHHpy0W;#IiTMUsSVb(UXFz3 zWVAQPa-2*Y<3nh~_03FSZJp6bRp7D+EB}txK%HDcT;nC66s%eKT%gXcY;pqe58O!b z;_@tKkY=rDw;&UL2Zh~LxrXI$8DPQPOKwXP0ZukKBSD>I?CA6{y*IOUQ%Q_H#&f0R zjcm7v&_lpUCa&FJ=mL=u*|rpzFPtI<9yi9fK0c;~uS+9zCLoyV!}Q=Fjp$egqK(9^ z&X~Oky6GW}Y4Mx{Mu4~dA8cbkK>I79tkcCctGTQ24jv^5dWh3Gpz#KoO%}MW*sns> z1dh7l-_ zhcccKkz9)R|-6PZTd zz+cB4kR#R!9yT8J%2e-(%R_W6rK7->nwO%K0cUpMs?T&(qma)I;>lfe9(-bOCp(+^X5M-V{NoIN5x%o?_(ETlPuWkg)cAh{4hXLW?_<#!1>o+1);y$Bjm zh&~~CG~yPTS3sVTZcG-b)FLgN=&Nc7gRTYr98QiMJ zw#@vcV+SXU9}%~j+&azC@%Dw_Eu9{uY;drOGFa?tSOn=k&$zSTeqy#axdY4!{lVg- z8)xNh2#S7`mHQQgkis?%JGyKmnE$v#xnTdmNjLWsFYaD3d**o`^gHzN6i^`L?xKn* zP1I8H!98xDE_R@qdpf!pKoV*J6Gd)WIvxc@;{iuB{D8;my^xP;_dJ+wW`Wp+W8vBZ zwNkKpu)nbKlrHMtU~pDY<6N!R92eBP+EI^u_pVjzy$}%Aydk1j;H)nMV;C;mUiiH7 znD(nT6R7QlojY=%cyyd*&x;pg`x>;2JpnZ?Hs3*Tlmu(JlFfs%Z%Ns@#^e?U;N3Ih z92?x2__=Y8{buA2-)|glIQeG^ZoHWJo+rr7;m1~)ohwSX^@cDwNrGflXBdN2o`pYP$HJTPJFvAE6affNjEOKsF6^5BDhQPCAa<^)#eJzBi!#(l>Lk-*# z99l=~F@@5xol_YzQ;R2%`(G)u3bjhtW5gz5z=cB{rKwOG?Hqw)f_4?qS&S(;523QI zC^WrU4DyHKZod|4-49+Uy9md*z^>(ojz|^T0S^9jBG-Ajt2~ z%0x0hmH(l3qy@0TC$4DrHZxJo@COzQwYqg_lKzKnG^Qg98RjBV35>bMt zXqj!AVfXim?J@nAO(kH^WU3mwhZI{#6Npqw#?AR$LsDZX)JA5275>1$y-F#yVwH_i z+wUK|#W8}~d&Z91qQf$X#DH~Pec!~=;j8R`R@8Lm91=T@3F420hCIK-<(-Za4xFU* zEpizyNlA;?M|1k|qoP!Ta2O(2zQ>)Qg<8G$4EDm`jbKVNmaz{-7Fe?HxshXROs6x)Qvhg+HC^^(K27AdJ+fAK&4qUSy&3 z1XMZ4$M%~(01Sp>9R_QIU&7`N!Q=^lG{H%j(u*Vdu_Dqx=$C>z)W`qRoKl-Ga{-Q< z3Z;&#tP*KxqY#U9gaVcZ&KriakyxxzPshf+@sqE5A8#0CVv8CTCO8WZ+@&SG9jQ=o zqOu4$M?r7otWeDOUqu>vp{hqVC;zX|tVj~cx2%`Cl>a7lC+M-6q6Do;C2&Sn@L(HM zVZQTMr7H%bXeXS^*vC2o1=tkTl zuRv<}FL=VM@Xb1wkwvug=^wkOpee2ePRm1iXwx9HntRResT4_DnRM6h3699=ZBLiUGZ?j+l7$bw^liNu9Bjf`HC0Mao$v}tgQ;cuI~ zv52Sm@Q!JSDf9$tKOj%89TpKgs1YWd(F{V)M-XqqjlyXvVmP^zEsn)euMM;_`8-4< z_y*MkJ64ZE;b7vY>?iOWI}EiVH6C{jb}nz77~43dTcJSuGhNiVfGf$mLtg_ZPiB~7 ziusCC3dcibCD^O*%aL#tWjmz8uxmF3*BETfTS}cGoQw{Pi2*h(GHZYd;Bkd6rdFnn zdXnIXT;w~}tTEbi*wp(tx~rMpC|*t8Y^1c|&Cwn12jPrtb>PpUw>sj$dP%Sx#p8O_ zF})W^<PwF8i#yL6Ri~@G_02U567X=o zGvdIuy Date: Sun, 18 Jan 2026 10:12:28 +0900 Subject: [PATCH 4/5] Fix drawing edges when parent commit is not visible --- src/graph/calc.rs | 10 ++++++++++ tests/graph/branch_001_max_count.png | Bin 50845 -> 51217 bytes tests/graph/branch_002_max_count.png | Bin 24608 -> 24904 bytes 3 files changed, 10 insertions(+) diff --git a/src/graph/calc.rs b/src/graph/calc.rs index b58b4c6..2ca18a9 100644 --- a/src/graph/calc.rs +++ b/src/graph/calc.rs @@ -257,6 +257,16 @@ fn calc_edges( if max_pos_x < pos_x { max_pos_x = pos_x; } + + // draw down edge if has parent but parent not in the graph (when max_count is set) + if !commit.parent_commit_hashes.is_empty() + && repository.commit(&commit.parent_commit_hashes[0]).is_none() + { + edges[pos_y].push(WrappedEdge::new(EdgeType::Down, pos_x, pos_x, hash)); + ((pos_y + 1)..commits.len()).for_each(|y| { + edges[y].push(WrappedEdge::new(EdgeType::Vertical, pos_x, pos_x, hash)); + }); + } } for commit in commits { diff --git a/tests/graph/branch_001_max_count.png b/tests/graph/branch_001_max_count.png index f01d7bbc65fc3228cf6533b3bf111a05daff3785..5c0bdfa2cfc7ed3e2d9250b85d9aa3829979084c 100644 GIT binary patch delta 18689 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 delta 8649 zcmc&)e_Ye$z8@mc$q+ealq8gjq?Riul8RfWNDpE0Ix2DlWp+KV6vi|&K*zq2oetSK z(qSe|lld~#n>3dpn})Dalt%-192XF#Zec<{3hhEHsqsO6ZnIt5s7C{+4*^TW;0w zRrU=gpY8A8U}~7zuY^e^ zlwE?a5`A_UAf`-J*R!Wmcd7k`w%8z%!DD5d{TOc9^7Dt1Wiut|dXZot%izZ^T({Y- zYIbRXK^`VvoF!ISs^DtZKI6cN`jc+mi`L<{hyKbOaYbz{zmTRDrC}_&g@1)Or(ZiAFCR;zMEPe;UXgpl9jAP7i z%=V3u2RN6cGdEU@)0uGPN1DRna3ovJ0768^$!hZ_NxOUL|+-N1SS& zWX*)1o)>CPTQmc*7MPr~zGD2ss=R?>2G;aKj%}69wV}FYDJQ{PuVKiNG}D!7PAE&- zdck2}VO{K^OCt~r6bp`J7w~lD+IfICXu zvgdVw_B06PtXu&+dQxDidX#l^U)3FtUmXIi1_&X@R;*)3UUfeQ8`y+*@gn@hmTZoD zf>VqIsXj8wyYhFXFRXta*+vfg-DQlY^P#Ob3YZFKyw;JSTvx9Qm&BF`nOaLT&n4x# zp2w2&?#P!cvUaW?(L=lJzyZezdK87lwNFzDJ)hyV>I$VFKv!X&7{-tjj*6(Fn&3af+hHvk~&kQOawwff?l-}}F zI#d^bx^wf%Gj@WQqDU)QeQ4h4&Y?FRy`H1bU`7*}(Uo+M`0zM4vFN_XJnz&F<|E1?wdZkpL+J9hVV__tCm)oanNl6i#>ZxA zgk=QASK3(8RnhYvUq7a~M1D8n4C$$JEP?^9?|b|cMvOm8*KK%@$*|%a^Kx)auBR9j z)p2&*X>ArmI(2u*wyw-9AO81+H59k6rDt6Oeit3%Nk z*fu~R;5Cibk%LXe@4X(zz3BMC`r_&CcM?jQb2Z&$+e5{tE%E`r<65;Je;j!5aHAs$ zpga5>SCoT1DnIgEW8Ju)jMX#28BRtsx}=k)vY9O3!K;9phY>6$Z5fjsv(+zB3$V1(IL)KMisVvV&(=Rb2V8p zZXxd4|47hL#>)~dAtxOnT>+xT)ms_*ys#cFjQy2_OG$P!bgulLNVWM$ z_xJP7*qc>1oU2*zuyW_Jlp26u_D-vqYxI2r+^|9V&sS&8=9G11m3575dz`;V&}66U zqWOjhqvm9*31vi~w06$^rMx!$(6Ob_J=88f*zWxVBo*5~zm^V!B`rwX=_be>XTq|t zZ*+8lAdnvBPGfk@Aa-P~=WsW&5Q87z*qGh?c7bJAc7ePz+w&>tO8>{R%euwfz!rZP zlJ|A3NZp+q;j|E{cD-3^#`|XLGt}MJ0qlV?CFYuzMOt`-tQi3!@-$l%%^3xjG9V|89(`Z^RoPXC4hvVos^(_vS2E-Z zP)=~)5k4YP0d|2X>Ran|nd>1_aY;G!GP}&&E=HMIy15)jhjkX2KFeb2yH=*VsQ`Vm z99P}kwPj4N6|HPb2dc%J32Y*Y&_Yi!B|WC1PWP1$nc}S>vOr~HNHkrzvKtMe<#HY0 zO=;*S;131I)=;62d;iDg3M0zes&G`3!%VJX9TA?o(*XXHO2X;d>=c^v5JiqsCD4#i zw#a%}(O7d&nb4o-09R=2M|mStc_Yfwpq{Gc?gS2W-ZyxCdC%))ATK(IbIFtq#-4qM z8IBYukyd3MnV03$Agq;!6p1bDDS;&|%Q#Gq{ya*umr!3egn*t9g=jYIih;TzC2v8% z%G8Stl4nfE?{aQFR~|^x5+hKSq@@KP^{*Y*6gQr4N!A&Q4FeT3`=5UyKdy?YyhavX zQeSz+hhY07{||aWuVhBak+P?N=?CWJ+rC+T#lfeg>zNCv)k_6&{fPH65x_c6-6NCmdFhiZ_GY5Zx?%1|reGxg}IV59E#v;>5# zG!&6HWG+30U4SCFcj37QP)0Wksld5<@k8VV$w5K3vd5U`sSjCbJ6ds#Ho1X6h6pCZ z-CS2|euSv0+}IL}OY8?3gjx{hE#1F5j`>Bcx`~XLileSh!P*IQL%nZKlYdLCIOdxM~2;3pmIcV&d~bmu8NTCW}5r}iV}m$!Qtn3`HhOE%74{zv_8+?ZCD>~m1x^Elsa|DbYsznvR| z2RG0}`eS3tcFqneKzkS$z;S3_Y3nCT^3jpI;Xq?18t4~~LRKgzzA?J?i;r09)P zZ=MK9QDga}WgBfKMM@_z72>yHqCV7xELCx7G&OMs$@kbN z7lHFg=?BHBlB1I6_<`{UPpMrm$Y@Kql zNL%j$w9X{M zjXIiBz}xUj=@96=3~vE(#DT)fKq`us!BLYkuzFh;bAn<(Cn^Qwj|6&(D~9)0$}hH$ z(>S1X7-_5}S1J0~&SX}D?bLudr@kI(sW|^BTtrKs!-EVaVvrs~&o8vqle=l| ze0@j6LVRUrL>oJ%)o>BlDaLbb>T(@i6#k}S`3)3)K0?XL@VJMg`G;ieNbx1ItMP+; zD?>O~Gc7vaMkU9GKO?hGDlu0&f#yk1FcGLC0@Ix*E1g5_-YscHnpgO+#tz9eVd8gE zy-6<=SRNzN|E>AdqsSu>ndGECg5{ym3SMsGV~+C)mWhSILMlvSPmAUYJ*_g=64)q| zrst+$@f)fo^Japh()0z%TtJsXFdzz%&xmFqG}#p_9n=MX0sp^-7C1FHfypXfwjSgQ zgeS)KK^w3scA$ZMNVY}6G*{K>Txc=EL72xsV-_v6Z7K(p;F4z7CQRw3wp9bPj~Mnx;!zvKnc=(hN(4034;D0(~6|f zC)sRBTxb){E4R~TBR zq??DX0awt!o5}_YcwDHKIKtX@69klgc4=$eRE7+@{81Cu5u^%)ug@ld7j_Ei7VLcE z0elouy8CG=X*Zi12W>7s%^V=~`I%H2jnNvKRdocBAVFrSjIZbypc~8br9S{uyNTv2 z-h^+%&mQdH8dNO|1XCr+98GM=FpWF+jH{ZPvK10HnY6@%uheq3#Fl)&v$k14FIn}ghN!~ zFbg?MQQbn3>K>Te?oU30l1Y0CFx1pEt6$l4(sS^aa4;vqw>H)LcD|(1B1hd%l_G@w ztD{G{STfh#uDc=iL8?-8G$7Co@G*MP&s?xr=JPB)FA8{&D~LfR9n1>ylw9aJa!K_Hv`I2cmv_6zYpFrXu@6ld80!QIC#p( zAzzdHa7F~cF(~=f`I5g`lyp6UkEIZp5maD+y`r9M#O_W+hhN$)1VmFWCc1r}yU z5It)*L%OfRbpIdrCHQ2Wfbcg|n(rMS006?+5hc&+hSU{CSX6BC=#f5|Yl>;dZxOc6 zc%i-Oly4!CbYv1au9$WZNGie-+-mM13Ef+!gSDO^g6H3BnW|!rAz#$o#n@sRfJFo| z3>quc`x_td&!CBX1-{XC1ly%~B#2bd0?e{^5mzyLhqM{wSLrd-?OzZ^-T7?bB`it- z3JOMGGv5BCH**g%yUDesLwKz)7j5oNE5gbrw6-FUW(zQt*jD=k0-Xb2lgWevD<%>b zu5}2&va7>sTc~`!+TE_GQJfA+kwz!;G=!l{iLkZ`RnG!&K;vK*FuJZVg4YMH8I)ul z+ri5=V+fplL3g{tzro#q8$Ob#lrQa2vF=IR#D8Be^mc4QLH1 zojA>RQqMiIbqJhCtf7g~LXV^LR&HRp1SndU3q7m1ZPQQI^b#M{O!?I(c8QP z1$htN{S-bN1}o28bQtf(7XQm514ur;{J$I)FmPJ%|9M!zki(Gw@vvY$Rz-s_Fd3Y6 zC&{l&-4q^?oG5Z>(`_u-*&hh#Xr{H24Cs`v6GT}(bnKGmada!Fc*LqYI83Y>=*``^ zm^nyoIGhxM2o9bGn4v@KsgtWv_seFN{b%9gU6kf;15kBWbN9qlSd1>>XR9!rui9_# zj2`I**MHxqDqk|Q7e`YQBnUsvC?4HSleCP{cqkdwaincTP4`&ave*0g88y&IRJHzgj2y$)iiKWH$M zu~a`5%sYB}f*M*V%O^^`Y5Y;TXUY@?`0{V?T%B-vQz36+iI8?ZeRB)T+f(%mqA2FA zA2Dcmhs^9hE@ZlhXY-!6)Tn&RQw$@JcXg6c+qN`LaK`2?g506HsH6P`r2Q#|;!yR3 z)V6etE(9T0xRbpP>HfT{W^fj#Dzu47=|pLo9QBc`DaEk6G#ZZ=if!v>m({@O2gc|Z z+ap2{w|18vBXj-s*~bH@2uZ}*A3=?ojuKC#7sDtx%VeKdI%{EbGyI!tJ9kml=bit@rI$E)1KV=T(V!Fs z6T$AjmAXM&4cgyph?*i(t9O1Gf=cm*;vpK*#J4-fuSgysr()|zHk#I@MY+*znCdmN zNdvZ)V_KvV@(2klYP@Lp19qMAB=3%I8 zm9LA4;y~6EZ$t@+!JWnU2K#(qcwh-0TazP$Gz~rUwxJ>E;Pm<*uZ>F6L_WpI^Q6K_ z9|d*v4d>K##*jC`C~*dCt{fZN19)69Rb~9%VW3b*3PWUDPgO=*eCWBVy1%Bj?F!X& zOjA!Vb~F$gX5kVSq{4ytQti;b)z`5bif-)i?5^9YS4c(JH=0^mpw*T1|5=c}u Date: Sun, 18 Jan 2026 10:35:20 +0900 Subject: [PATCH 5/5] Update documents --- README.md | 1 + docs/src/getting-started/command-line-options.md | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/README.md b/README.md index 2a2dd6f..a2c8d50 100644 --- a/README.md +++ b/README.md @@ -69,6 +69,7 @@ Serie - A rich git commit graph in your terminal, like magic 📚 Usage: serie [OPTIONS] Options: + -n, --max-count Maximum number of commits to render -p, --protocol Image protocol to render graph [default: auto] [possible values: auto, iterm, kitty] -o, --order Commit ordering algorithm [default: chrono] [possible values: chrono, topo] -g, --graph-width Commit graph image cell width [default: auto] [possible values: auto, double, single] diff --git a/docs/src/getting-started/command-line-options.md b/docs/src/getting-started/command-line-options.md index c792cf3..c378415 100644 --- a/docs/src/getting-started/command-line-options.md +++ b/docs/src/getting-started/command-line-options.md @@ -1,5 +1,12 @@ # Command Line Options +## -n, --max-count \ + +Maximum number of commits to render. + +If not specified, all commits will be rendered. +It behaves similarly to the `--max-count` option of `git log`. + ## -p, --protocol \ A protocol type for rendering images of commit graphs.