From c8e9ae5e6d3ee1549281122e8cab337aa9e2bdbb Mon Sep 17 00:00:00 2001 From: Crzyrndm Date: Wed, 26 Apr 2017 07:20:07 +1200 Subject: [PATCH] Clean up category node a little --- FilterExtension/CategoryInstance.cs | 2 +- FilterExtension/ConfigNodes/CategoryNode.cs | 161 ++++++++---------- .../ConfigNodes/SubCategoryItem.cs | 9 +- FilterExtension/Editor.cs | 4 +- FilterExtension/LoadAndProcess.cs | 2 +- .../000_FilterExtensions/FilterExtensions.dll | Bin 65024 -> 65024 bytes 6 files changed, 76 insertions(+), 102 deletions(-) diff --git a/FilterExtension/CategoryInstance.cs b/FilterExtension/CategoryInstance.cs index 78b36d68..3c48a1f9 100644 --- a/FilterExtension/CategoryInstance.cs +++ b/FilterExtension/CategoryInstance.cs @@ -54,7 +54,7 @@ public void Initialise() return; } - if (Type == CategoryNode.CategoryType.New) + if (Type == CategoryNode.CategoryType.NEW) { RUI.Icons.Selectable.Icon icon = LoadAndProcess.GetIcon(Icon); PartCategorizer.Category category = PartCategorizer.AddCustomFilter(Name, icon, Colour); diff --git a/FilterExtension/ConfigNodes/CategoryNode.cs b/FilterExtension/ConfigNodes/CategoryNode.cs index ed6b4b1d..6f65e1ee 100644 --- a/FilterExtension/ConfigNodes/CategoryNode.cs +++ b/FilterExtension/ConfigNodes/CategoryNode.cs @@ -11,119 +11,55 @@ public class CategoryNode : IEquatable { public enum CategoryType { - New = 0, // new category - Stock, // modification to stock category - Mod // modification to a mod cateogry + NEW = 0, // new category + STOCK, // modification to stock category + MOD // modification to a mod cateogry } public enum CategoryBehaviour { - Add = 1, // only add to existing categories - Replace = 2, // wipe existing categories - Engines = 4 // generate unique engine types + Add = 0, // only add to existing categories + Replace, // wipe existing categories + Engines // generate unique engine types } public string CategoryName { get; } public string IconName { get; } public Color Colour { get; } - public CategoryType Type { get; } - public CategoryBehaviour Behaviour { get; } - public bool All { get; } // has an all parts subCategory - public List SubCategories { get; } // array of subcategories + public CategoryType Type { get; } = CategoryType.NEW; + public CategoryBehaviour Behaviour { get; } = CategoryBehaviour.Add; + public bool All { get; } = false; // has an all parts subCategory + public List SubCategories { get; } = new List(); // array of subcategories public List Templates { get; } // Checks to add to every Filter in a category with the template tag public CategoryNode(ConfigNode node, LoadAndProcess data) { - string tmpStr = string.Empty; - CategoryName = node.GetValue("name"); IconName = node.GetValue("icon"); Colour = GUIUtils.ConvertToColor(node.GetValue("colour")); ConfigNode[] filtNodes = node.GetNodes("FILTER"); - if (filtNodes == null) - { - return; - } - Templates = new List(); - foreach (ConfigNode n in filtNodes) + if (filtNodes != null) { - Templates.Add(new FilterNode(n)); + Templates = new List(); + foreach (ConfigNode n in filtNodes) + { + Templates.Add(new FilterNode(n)); + } } if (bool.TryParse(node.GetValue("all"), out bool tmpBool)) { All = tmpBool; } - - ConfigNode[] subcategoryList = node.GetNodes("SUBCATEGORIES"); - SubCategories = new List(); - if (subcategoryList != null) + LoadSubcategoryItems(node.GetNodes("SUBCATEGORIES"), SubCategories); + string tmpStr = string.Empty; + if (node.TryGetValue("type", ref tmpStr)) { - var unorderedSubCats = new List(); - var stringList = new List(); - for (int i = 0; i < subcategoryList.Length; i++) - { - stringList.AddRange(subcategoryList[i].GetValues()); - } - SubCategoryItem[] subs = new SubCategoryItem[1000]; - for (int i = 0; i < stringList.Count; i++) + try { - string[] indexAndValue = stringList[i].Split(',').Select(s => s.Trim()).ToArray(); - - var newSubItem = new SubCategoryItem(); - if (int.TryParse(indexAndValue[0], out int index)) // has position index - { - if (indexAndValue.Length >= 2) - { - newSubItem.SubcategoryName = indexAndValue[1]; - } - if (string.IsNullOrEmpty(newSubItem.SubcategoryName)) - { - continue; - } - if (indexAndValue.Length >= 3 && string.Equals(indexAndValue[2], "dont template", StringComparison.CurrentCultureIgnoreCase)) - { - newSubItem.ApplyTemplate = false; - } - subs[index] = newSubItem; - } - else // no valid position index - { - newSubItem.SubcategoryName = indexAndValue[0]; - if (string.IsNullOrEmpty(newSubItem.SubcategoryName)) - { - continue; - } - if (indexAndValue.Length >= 2 && string.Equals(indexAndValue[1], "dont template", StringComparison.CurrentCultureIgnoreCase)) - { - newSubItem.ApplyTemplate = false; - } - unorderedSubCats.Add(newSubItem); - } + Type = (CategoryType)Enum.Parse(typeof(CategoryType), tmpStr.ToUpperInvariant()); } - SubCategories = subs.Distinct().ToList(); // no duplicates and no gaps in a single line. Yay - SubCategories.AddUniqueRange(unorderedSubCats); // tack unordered subcats on to the end - SubCategories.RemoveAll(s => s == null); - } - - if (node.TryGetValue("type", ref tmpStr)) - { - tmpStr = tmpStr.ToLower(); - } - switch (tmpStr) - { - case "stock": - Type = CategoryType.Stock; - break; - - case "mod": - Type = CategoryType.Mod; - break; - - case "new": - default: - Type = CategoryType.New; - break; + catch {} // leave as default } if (node.TryGetValue("value", ref tmpStr)) { @@ -141,10 +77,6 @@ public CategoryNode(ConfigNode node, LoadAndProcess data) SubCategories.AddUnique(new SubCategoryItem(subcatName)); } } - else - { - Behaviour = CategoryBehaviour.Add; - } } } @@ -153,6 +85,54 @@ public bool HasSubCategories() return (SubCategories?.Count ?? 0) > 0; } + public static void LoadSubcategoryItems(ConfigNode[] nodes, List loadTo) + { + if (nodes == null || nodes.Length == 0) + { + return; + } + var stringList = new List(); + foreach (ConfigNode node in nodes) + { + stringList.AddUniqueRange(node.GetValues()); + } + SubCategoryItem[] subs = new SubCategoryItem[1000]; + var unorderedSubCats = new List(); + foreach (string s in stringList) + { + int splitIndex = s.IndexOf(','); + if (splitIndex == -1 || splitIndex == s.Length) // just the category name + { + unorderedSubCats.AddUnique(new SubCategoryItem(s)); + } + else // atleast two items + { + string firstSplit = s.Substring(0, splitIndex); + if (!int.TryParse(s.Substring(0, splitIndex), out int index)) // name + "dont template" + { + unorderedSubCats.AddUnique(new SubCategoryItem(s.Substring(0, splitIndex), + !string.Equals(s.Substring(splitIndex, s.Length - splitIndex - 1), "dont template", StringComparison.OrdinalIgnoreCase))); + } + else // has position index + { + int lastSplitIndex = s.LastIndexOf(','); + if (lastSplitIndex == splitIndex) // only 2 items, index + cat name + { + subs[index] = new SubCategoryItem(s.Substring(splitIndex + 1)); + } + else // three items, index + name + "dont template" + { + subs[index] = new SubCategoryItem(s.Substring(splitIndex + 1, lastSplitIndex - splitIndex - 1), + !string.Equals(s.Substring(lastSplitIndex + 1), "dont template", StringComparison.OrdinalIgnoreCase)); + } + } + } + } + loadTo = subs.Distinct().ToList(); // no duplicates and no gaps in a single line. Yay + loadTo.AddUniqueRange(unorderedSubCats); // tack unordered subcats on to the end + loadTo.RemoveAll(s => s == null); + } + public override bool Equals(object obj) { if (ReferenceEquals(null, obj)) @@ -180,7 +160,6 @@ public bool Equals(CategoryNode C) { return true; } - return CategoryName.Equals(C.CategoryName); } diff --git a/FilterExtension/ConfigNodes/SubCategoryItem.cs b/FilterExtension/ConfigNodes/SubCategoryItem.cs index 40e98636..14740236 100644 --- a/FilterExtension/ConfigNodes/SubCategoryItem.cs +++ b/FilterExtension/ConfigNodes/SubCategoryItem.cs @@ -4,13 +4,8 @@ namespace FilterExtensions.ConfigNodes { public class SubCategoryItem : IEquatable { - public string SubcategoryName { get; set; } - public bool ApplyTemplate { get; set; } - - public SubCategoryItem() - { - ApplyTemplate = true; - } + public string SubcategoryName { get; } + public bool ApplyTemplate { get; } public SubCategoryItem(string name, bool useTemplate = true) { diff --git a/FilterExtension/Editor.cs b/FilterExtension/Editor.cs index 8ad727c5..55a6291d 100644 --- a/FilterExtension/Editor.cs +++ b/FilterExtension/Editor.cs @@ -40,7 +40,7 @@ public IEnumerator EditorInit() foreach (CategoryInstance c in LoadAndProcess.Categories) // all non mod specific FE categories { - if ((c.Type == CategoryNode.CategoryType.New || c.Type == CategoryNode.CategoryType.Stock) + if ((c.Type == CategoryNode.CategoryType.NEW || c.Type == CategoryNode.CategoryType.STOCK) && (settings.replaceFbM || !string.Equals(c.Name, "Filter by Manufacturer", StringComparison.OrdinalIgnoreCase))) { c.Initialise(); @@ -56,7 +56,7 @@ public IEnumerator EditorInit() // this is to be used for altering subcategories in a category added by another mod foreach (CategoryInstance c in LoadAndProcess.Categories) { - if (c.Type == CategoryNode.CategoryType.Mod) + if (c.Type == CategoryNode.CategoryType.MOD) { c.Initialise(); } diff --git a/FilterExtension/LoadAndProcess.cs b/FilterExtension/LoadAndProcess.cs index 21ea9395..66a06c9e 100644 --- a/FilterExtension/LoadAndProcess.cs +++ b/FilterExtension/LoadAndProcess.cs @@ -213,7 +213,7 @@ private void ProcessFilterDefinitions() } CategoryNode Cat = CategoryNodes.Find(C => C.CategoryName == "Filter by Resource"); - if (Cat != null && Cat.Type == CategoryNode.CategoryType.Stock) + if (Cat != null && Cat.Type == CategoryNode.CategoryType.STOCK) { foreach (string s in resources) { diff --git a/GameData/000_FilterExtensions/FilterExtensions.dll b/GameData/000_FilterExtensions/FilterExtensions.dll index 21fe372a35e1362a58e599895a8c82331fd77153..3a855173e4aa5cc79afbc3bc78987ee9464dd571 100644 GIT binary patch delta 20318 zcmch933wD`w)Xj|x+}e<)7?or3E8@{Hc1FOvWWx(f-JHGSw&D#z(_-a3nF$RhzO`; z3UP2y!R3lqP#`0MD=09oBaV(UDmsA6=zt22j2pszx6pmXp4{Lg=X=E+;%d(QdJ z`PNfkRhQFnQg1k^uUe*OZ#dnwB3G?xdUTwsHkFF0hs;J5%ep>Y5&s*EKaK3PXCYC; zS|Vj`{plQYq&9F^9gz{qC2}o-rA^bL^$;x5tnz#=>sI+1F59f~wOqDyxjv7p8Yt?~ z>&-)2d(SNBI_PQTO0WM-b5Ji^GsW|rpR1k^iXrmXN+>--+^NJ-{<~nCy z8Y`kxEyb-Zia$E@)C%)UX9wjlvt2pr8ndTs{^+OJt0P!{C9I46j_6EWBgaGn*!)5w61z?Q*;`t7}8>YQbzr3^OWoS-0Ps|^%KUsz82clWWPrYD#mib zoZ{}NZa436SE==VlAl=x3gvErpjfBh*EFYYf0%AG~n=5syk zRR`{lG&R+3bt&k#OLr`x;q=>rek1POba|htJX6DHsbM74Nb=kK_MkthrOH3OPpccu z$5XZkZbztq7Qqm>qFjzFZNAp`2VFVMerdVN)jTN75 zMOYv$ei7EpvpD3biGvNnZ9lh zt73C|w~#6^|I%%!`9xQHx}mTD8Zd7*o7Wb(ny9?2zSQj7eW;3<%eoh+_RWuV|D&$T z%o}=LtIEyey$V%Db9(PSw%j~zVJWJWU93fNFc_M?s038AEn=y8N53BCOa0DO9ZhxK z-Kvwh_Pi7AblQM@R!-#C>Tg1oMIE^U*ES#QUmbH973XNOa28=v*o@?0s;xW^Q+H3Q zU5lVghTmR)GcM7tXtdv!F`oB@^Nv|vKG5qzIW#xg8S;RNbi<`0NlRK(2{(G(b2g~D zK&C}_e?@Kt-1HLSd-S?&JIxJf(eBX3DvGuJeUU06J-{5%bAXYafQMPQr~h64wcqc=vgdvv2bGt=!(y0q*#40>V4MmT z5M@WPPhAJf&@hFeCHgZJd`G$uRHJG&;x`ISAev}-EAC(`36|RO6+9MCs7eu35n`!=u6HN1I|bi zTy*Gz8ZBz1s1{Ft$ApXtQm3v*>tqB^se}P6pDYdO%l%Jv`CWcT*Nh}TXF*5C_~>zj zvs&^%dAC+ETeUdmgcvvcl^748ySOR1dMBMeecGC$tkx+?ir^ko9>L9}+^6&l9TD7G z%JrLW!wM` ziXCQ@U8{G{f@PZCRm&*TBAjsbC}Xq?Udp;aWKOBh8lBonqbaC}h3k)R=lUvGEb5Gi zdfjN=T)czaK~H&3lH;DpcKAqkR(LdCzlJk907{IP$B~5X_>o>W#eB88;G#;ns|%oV z{Su6U%cz@zvKGPOHr&{!=c7^-oy5juFVSjnPkB1B>p+x};r4qL`R)5^AM(IH^E zV5Q4q6*5qqBFZ`0lv~nMs%(mW4F*=LNY?cEUTiuovdla(Fek<#bl#~(R}7@|V3>Gq zEp}~Z$@M6UBDl$yM{o!!#|kV9@=nueBzl2t=MN?hg1g+0;o(8>7>;N;t`j-04ML&A zXIMq*RPX{amk#ndIeKzHj|?~OAC%h@v-KUoQf>%YE=O5+!zQ4XlccGS?5u zGXocNA8|X}wPXYyAxQ|Sos!6@h`PXgORlf`n3F2!+eMfMj5kKzN~)2)n63)Hrq|V) zcU=%tOU>;U^vq$$&NIoob*UWE>;A)Z4en67jh9#j{7KdeW(0!~xkXDGwFuYe>~BsP zoLkJXtgw1?C6~K#6Lh&9FY0cU?=aU7&Qx8^QA5%PN#kUp8Fde2^9tlzalukql6SCx z$H@v6or6xeu@qG#iV_djVl!<>U)327Bc)u&Cg%44VOTqa0z0#XhlKNfwMEvTT$bHQC*%l1r!e$92(n~5K5~-3royrFU<5??zmexb9gQ_j^!w1?WsF zh!xlUQ8XB-wwkhbb?-w{Rsi4YphVorFYhM;|l+c-Gy;G zM{bK*dG5~;EUpRcb;vRc~(!5AEYNC^Q~bSozLL`v_?B2 zD@&@D+??kR&{r_2IV4aZa+5%ZQwWQ+HCR$M9R140yPC%!n&gc?D)q z@>B1<$Y(t#;{IvW^=uVB#lnFi9AJKOQTy2BR@LpSGDLMnt1!mG;{c=X`c~mQ79J4c zs#f9UEc}BAc@0}_7|X(KBII>y32}R)p7)B-k=|Or7fY9kG}GKLvY!f>2S=vG*0mb^ z6Vuf*Ukv`ERro0jT_W7lD*Ouzu{Y7^r(1=uu<)P=_q7V2Vc}~ce79A&nT5FfqxvVY zR_XmL-2l+)--4=4tAEG3AR4pxt;>hj<)C%>*t&dXUB0j`@Wd4!ur3cNwY0k zmL0fai3u2u;uR!mmfKY}`>gofnaITePO!YLe%)eR+~SjeYcW1<@iecaUw1MgZo-T5 z*DWT-E%-blZ9WbG<|Ogf5E&jf;{AWNZUj+Gy25$jY~`qU#R0#f!y}Q@dx9gM6>v;k z#|h+YT}@nfMXPRd>%Am0B(CIq!cW$m8RIuNTjYYclJm-0%3$P*xRSSOVn}n|*rJQR zfpQUsito!v6~-dm&unE_Fm}S&(79N#@j_lR`e^r zwd)eiItu4n&UJnaHM*w6=Tz=_)?)ysL8ArebbmBF-cCMf<@+bPQP;e0T;`;U!94*j zG7i@c?tp$O{Xz_uv)r2m;dltg*Ru)laWT<@B25zjFskVSEGMsIBq&a8>u2rUg zd}?R{#KyFcsYp$9C1s3vCrLwGT|PF-D(g>?Sv|hL8erZs{tu-SVR}PlJs!J_1}r*T z*&yqYvaS;IBwa4MS&vRK>nC(q=bMjC7#663A{e~ghZV#xdyKke=7x#cX2Hap)IOBv zX{Ykcv`K>sCd2bh7*p56N&sGK;(pG`jS59SF-gY%R0In zt%nCZHyaK7C|?%T(@~%;RR!d;Ko7I!E?;^Q#y8lH^RA&O7Q1F zc{Z+>lBZX~#EMh-zBy(MRc0+!Ewz;|d0Biy@807$cluI;5BE}3#L-+vQm_qaz zjTP6g*%o^PbXz;3r>G{tm9O@5BMK4Bp!FWcn=mQ?8lA-MdWMMJrf=Z-ZR%@h1ajTk*G?RpfmVvr^S_%|>2!-+N;)JL?F5aw38 z5RD7a{6fYzrB6dJDh4f=26d7VI-34@dVumWc`EPn?8`9d=>Xe2gi#F8+r_8z&R73H zR|B*{XN);APUm6Jf?oTWxMFd!*KSZm`np}J()2)>%e~O0`_+Rn%$Ao{dl!4hs4u)k z?P!<%vpj=lq2FG*D#%X%Rm?N}vP{9Q+_%%c^rFs^ky+fc>tuvJ!(;{MEy4R;T>e(d zon^jX!gvH|j5KAognv}V@=qBtR-7-hI46(Gi_#d+5w%AuN3ujx!Z=J^-z@HyOL>yG zyIg`zl3wnRa*_DCFqLaPCw`(*s}3U7Qp9p+<%@C<||<~h<3+>njxka z&>mrbFJ?BF{vhmUsW^mQ6&6Ln>9~EpA*>R8+C)QXzpz`-iA^*NiI)fe1Jv7ubMCvs z>av)Pp!bBe&t!HH9Uwf+`^b^XbR_*vlp1=miAK?3Va38m)2G7Daj|X;eJ(5`ommYX zA*GP-(U{#dmcEkSe}qx1qKRNIrKMP1RWzASk{oT zN~jgn%bB&BUO|TFI$+6FVO2PVogY-Ah7>PdF)$P<%g=v4%Y~Th5;}?!cy5KO5qmp)q=w9R0=-{8tSQn~zKDwp$~!z8v;pdd}Gn{!7CjBk(`+3n9tlj>TxKBO|3VO>9>R5lLS^lYalQ z$17nOCgm&#p6BcetaJ7O9&xh#aj9k1eMq!3B(Uy!4WqSOY~BH0+>m6Sty(aaNX{;Y z=_v;X$aPi6tNnXNXV+~B@IT0732ixJY8VgO_c||bSe3_t`=&E?5_~#PjRsA0@@R3t zyQ)9ihNSeM1-20w-aXowl$N@$1ty_ZaR%f4?IxutI+n5*KWMBenu^Jqo_D#_id~6n zifSRM&6wZDNYPkQL;$6hBlVkNYXQxkBb zS_k|z1F za+$@x3wc+O<@a!BF)OV@W~+C=^H zmm3b+)rr|s`YuP2gQ`0-TSJZM9eobk5ob50clSA|Qy11XQd3&c=cWc>OX;%obA29q zQkY4v1qS-O^m;2B?(@;$u3T>^Mom#_j5Z2w%Iu!K+(@NEmXdBZesreNi58anqce>> z-K>B^3l!d{%#5>%!gdQ=N~RHp?wvThE0x*bEhYie>1$#89J8?!(kb?@IQ=1=>CbW2 zJ#&DbPKw{j&_2g)?s2|!vc=g)A$FP+XZ9f1^ID9)GcJK;3p?q##Fs(*yA!<7s)8$h zS=1@cit^_8+EGt_b<{E#*>sh#MjR8a^JUXbmQL1e4lT8GjtOXJ4&4!FyFFpbp*3-q z8(!qgq5Iq{^yF%8V~u3$kE$!bK1Y%S4xB9ERz3*uZ)`Ftfb`6z6#nEXRF#B@KsW6AFEz* z>0w_-dO6NA(vSMOP`AF8PAfg?>qdqBEH*#+1YYD#21EQclrK1j$``!k??;_R zS*DfVqrUz$EY5C8KI$7l*T-3*`-HEWUXHV9;R)Yh8Zg?b_d(#OZy1e?v%0LKz7aGv z&e~@l^^K&B%wh=dNImKsO`pe=6#<98hIWmy+>9v=`X|u%8jG2spnozQi?hEM2mO~) z?O03qvMcDnjOb#Ebw~;NXV98Bo0@yVH5jJCL6_y3lr;>b<(ncC>>OtIh6 zOrc9@RNq9stUjFzlZ)T3>giLSx3j>6<6i`!+$STPq!M%jk%Au2*Xr(j`{DS z%o(g(>R5%;yPiUE#^bx5`12^%jSj8yua8luI34Q_(|YPDtkLmi$tnMO>L1r#g+#ob z##>DKw4ScMLfnAqfep0DV$#D0srpLRt)T*sJMbXw5w?_W2>r?b2=$!Fx<;A;_9(?( zj??$E{^Wm*I?ZAw4|jH8GYuDJExpHSqOc_nZ$6HobXlD32s4{)F=^W4v@%|ghx-Y7 z%VLgGwyEj~`l~Q&VxFKwvAF3#4E`3U=7A@s<=veFO7MTrpFl%;vRZA&Q|4x1A8b^%a&_sW@;p`m-^1N z*!%9zfqk@5*b>LQ((?kZ(-w=##Jo-~3)?5Fb*s;GmFK;zum_4ZF)Pw^d0)j zV&e4OHkR+wi3H2PkgtwAVRh-fHkR*EhNYA7eV@7ri&>@z+L#`oUJ0fjQcZ%>ztJRN z)>!)(!SX155x0!-uKcQv=~r|t!Srjw?Xh)8kGHWrP994qL;4Mc6D+@NWBD!d zXQZ6gdHbHAel331|R!Ss8Y)M5(DAKO^|NS7s8{>1+AZ(lNZ>1Vo5bVyfu zliWX3EYA4u@H5>ijHfWR*Z(tZ6uO$S@&*P@k!?P^Sxr^N!vm*@KjCDSoj*K4YFM1T z7#!UZalK6k-`?!AGOmd4mG1yXUAKk`N9sV)p$g6sq5p6 zO2T0MuHy)Yob8Kn|8uE97FAc_@#2i~DkxoQxah3#t~TLaYJ%t%<6Y^K{>`@XL$9y zZemuRO~lGmpa0!19YFd$6{#dtbk8#jq7%#_0?0=zBt>R zc3ewS2ZUK86KoScs6H3nV*I9bZ6K(Q#o1Q1D3GDPkF!tIl0YV&N*8i37SsE*B9PU_ zO*@qw*A-|#I?u4@s7=Kp zwKiUHxti&3t1DLb$8{^UaGS!e+bN|p+ZwSmuq2U$y+3|GkiXc2B)!nYq+JX(`>QqAptB@nH=~6 z37lAdsDSITM8)V8v`*3IZZ_>HjTk3r1?Dy?c{ifP+ivxsGvpd=Eg`&saR=Dua4}0h z4QOXc3Z+XfG*=@h>=ivK5&3DZMFFRfUbd!U2F^)39Nss-xq|=^!pkwuj(Cm&#x$5wn`8D zW~dQ9J%Yq4UzmTU+)-AzCI8UQa(wy&`!ZR)gJf-4%baaEBKwy$7o&$|cW#q4X_
y*ISy7{QHX*N&nik@qba$ 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