Files
the-biergarten-app/pipeline/diagrams/planned/output/future_possible_architecture.svg
2026-04-22 13:51:53 -04:00

1 line
203 KiB
XML

<?plantuml 1.2026.2?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentStyleType="text/css" data-diagram-type="CLASS" height="4903px" preserveAspectRatio="none" style="width:2876px;height:4903px;background:#040404;" version="1.1" viewBox="0 0 2876 4903" width="2876px" zoomAndPan="magnify"><title>The Biergarten Data Pipeline &#8212; Planned Architecture</title><defs/><g><rect fill="#040404" height="4903" style="stroke:none;stroke-width:1;" width="2876" x="0" y="0"/><g class="title" data-source-line="42"><text fill="#EAEAEA" font-family="'Volkhov'" font-size="20" font-weight="bold" lengthAdjust="spacing" textLength="527.2599" x="1167.37" y="29.42">The Biergarten Data Pipeline &#8212; Planned Architecture</text></g><!--cluster Domain Models--><g class="cluster" data-qualified-name="Domain Models" data-source-line="47" id="ent0002"><path d="M1256.5,53.64 L1362.7827,53.64 A3.75,3.75 0 0 1 1365.2827,56.14 L1372.2827,77.868 L2711.31,77.868 A2.5,2.5 0 0 1 2713.81,80.368 L2713.81,1680.14 A2.5,2.5 0 0 1 2711.31,1682.64 L1256.5,1682.64 A2.5,2.5 0 0 1 1254,1680.14 L1254,56.14 A2.5,2.5 0 0 1 1256.5,53.64" fill="#191919" style="stroke:#AFAFAF;stroke-width:1.5;"/><line style="stroke:#AFAFAF;stroke-width:1.5;" x1="1254" x2="1372.2827" y1="77.868" y2="77.868"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="105.2827" x="1258" y="69.528">Domain Models</text></g><!--cluster Logging--><g class="cluster" data-qualified-name="Logging" data-source-line="193" id="ent0026"><path d="M740.69,2751.64 L795.5449,2751.64 A3.75,3.75 0 0 1 798.0449,2754.14 L805.0449,2775.868 L2714.97,2775.868 A2.5,2.5 0 0 1 2717.47,2778.368 L2717.47,3111.14 A2.5,2.5 0 0 1 2714.97,3113.64 L740.69,3113.64 A2.5,2.5 0 0 1 738.19,3111.14 L738.19,2754.14 A2.5,2.5 0 0 1 740.69,2751.64" fill="#191919" style="stroke:#AFAFAF;stroke-width:1.5;"/><line style="stroke:#AFAFAF;stroke-width:1.5;" x1="738.19" x2="805.0449" y1="2775.868" y2="2775.868"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="53.8549" x="742.19" y="2767.528">Logging</text></g><!--cluster Domain Policy--><g class="cluster" data-qualified-name="Domain Policy" data-source-line="249" id="ent0037"><path d="M1786.75,3424.64 L1884.983,3424.64 A3.75,3.75 0 0 1 1887.483,3427.14 L1894.483,3448.868 L2866.5,3448.868 A2.5,2.5 0 0 1 2869,3451.368 L2869,4154.14 A2.5,2.5 0 0 1 2866.5,4156.64 L1786.75,4156.64 A2.5,2.5 0 0 1 1784.25,4154.14 L1784.25,3427.14 A2.5,2.5 0 0 1 1786.75,3424.64" fill="#191919" style="stroke:#AFAFAF;stroke-width:1.5;"/><line style="stroke:#AFAFAF;stroke-width:1.5;" x1="1784.25" x2="1894.483" y1="3448.868" y2="3448.868"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="97.233" x="1788.25" y="3440.528">Domain Policy</text></g><!--cluster Orchestration--><g class="cluster" data-qualified-name="Orchestration" data-source-line="305" id="ent0047"><path d="M9.54,2256.64 L107.294,2256.64 A3.75,3.75 0 0 1 109.794,2259.14 L116.794,2280.868 L1148.62,2280.868 A2.5,2.5 0 0 1 1151.12,2283.368 L1151.12,2725.14 A2.5,2.5 0 0 1 1148.62,2727.64 L9.54,2727.64 A2.5,2.5 0 0 1 7.04,2725.14 L7.04,2259.14 A2.5,2.5 0 0 1 9.54,2256.64" fill="#191919" style="stroke:#AFAFAF;stroke-width:1.5;"/><line style="stroke:#AFAFAF;stroke-width:1.5;" x1="7.04" x2="116.794" y1="2280.868" y2="2280.868"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="96.754" x="11.04" y="2272.528">Orchestration</text></g><!--cluster Infrastructure: Preloading--><g class="cluster" data-qualified-name="Infrastructure. Preloading" data-source-line="344" id="ent0050"><path d="M1181.62,2406.64 L1359.4342,2406.64 A3.75,3.75 0 0 1 1361.9342,2409.14 L1368.9342,2430.868 L1753.75,2430.868 A2.5,2.5 0 0 1 1756.25,2433.368 L1756.25,2575.14 A2.5,2.5 0 0 1 1753.75,2577.64 L1181.62,2577.64 A2.5,2.5 0 0 1 1179.12,2575.14 L1179.12,2409.14 A2.5,2.5 0 0 1 1181.62,2406.64" fill="#191919" style="stroke:#AFAFAF;stroke-width:1.5;"/><line style="stroke:#AFAFAF;stroke-width:1.5;" x1="1179.12" x2="1368.9342" y1="2430.868" y2="2430.868"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="176.8142" x="1183.12" y="2422.528">Infrastructure: Preloading</text></g><!--cluster Infrastructure: Enrichment--><g class="cluster" data-qualified-name="Infrastructure. Enrichment" data-source-line="359" id="ent0052"><path d="M659.16,4180.64 L843.5514,4180.64 A3.75,3.75 0 0 1 846.0514,4183.14 L853.0514,4204.868 L2785.83,4204.868 A2.5,2.5 0 0 1 2788.33,4207.368 L2788.33,4369.14 A2.5,2.5 0 0 1 2785.83,4371.64 L659.16,4371.64 A2.5,2.5 0 0 1 656.66,4369.14 L656.66,4183.14 A2.5,2.5 0 0 1 659.16,4180.64" fill="#191919" style="stroke:#AFAFAF;stroke-width:1.5;"/><line style="stroke:#AFAFAF;stroke-width:1.5;" x1="656.66" x2="853.0514" y1="4204.868" y2="4204.868"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="183.3914" x="660.66" y="4196.528">Infrastructure: Enrichment</text></g><!--cluster Infrastructure: Generation--><g class="cluster" data-qualified-name="Infrastructure. Generation" data-source-line="388" id="ent0057"><path d="M661.6,1706.64 L843.5764,1706.64 A3.75,3.75 0 0 1 846.0764,1709.14 L853.0764,1730.868 L2764.26,1730.868 A2.5,2.5 0 0 1 2766.76,1733.368 L2766.76,2230.14 A2.5,2.5 0 0 1 2764.26,2232.64 L661.6,2232.64 A2.5,2.5 0 0 1 659.1,2230.14 L659.1,1709.14 A2.5,2.5 0 0 1 661.6,1706.64" fill="#191919" style="stroke:#AFAFAF;stroke-width:1.5;"/><line style="stroke:#AFAFAF;stroke-width:1.5;" x1="659.1" x2="853.0764" y1="1730.868" y2="1730.868"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="180.9764" x="663.1" y="1722.528">Infrastructure: Generation</text></g><!--cluster Infrastructure: Pipeline Channel--><g class="cluster" data-qualified-name="Infrastructure. Pipeline Channel" data-source-line="438" id="ent0063"><path d="M1901.5,3137.64 L2120.6676,3137.64 A3.75,3.75 0 0 1 2123.1676,3140.14 L2130.1676,3161.868 L2195.37,3161.868 A2.5,2.5 0 0 1 2197.87,3164.368 L2197.87,3398.14 A2.5,2.5 0 0 1 2195.37,3400.64 L1901.5,3400.64 A2.5,2.5 0 0 1 1899,3398.14 L1899,3140.14 A2.5,2.5 0 0 1 1901.5,3137.64" fill="#191919" style="stroke:#AFAFAF;stroke-width:1.5;"/><line style="stroke:#AFAFAF;stroke-width:1.5;" x1="1899" x2="2130.1676" y1="3161.868" y2="3161.868"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="218.1676" x="1903" y="3153.528">Infrastructure: Pipeline Channel</text></g><!--cluster Infrastructure: Export--><g class="cluster" data-qualified-name="Infrastructure. Export" data-source-line="458" id="ent0065"><path d="M611.43,4395.64 L761.6923,4395.64 A3.75,3.75 0 0 1 764.1923,4398.14 L771.1923,4419.868 L2732.94,4419.868 A2.5,2.5 0 0 1 2735.44,4422.368 L2735.44,4894.14 A2.5,2.5 0 0 1 2732.94,4896.64 L611.43,4896.64 A2.5,2.5 0 0 1 608.93,4894.14 L608.93,4398.14 A2.5,2.5 0 0 1 611.43,4395.64" fill="#191919" style="stroke:#AFAFAF;stroke-width:1.5;"/><line style="stroke:#AFAFAF;stroke-width:1.5;" x1="608.93" x2="771.1923" y1="4419.868" y2="4419.868"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="149.2623" x="612.93" y="4411.528">Infrastructure: Export</text></g><!--class Location--><g class="entity" data-qualified-name="Domain Models.Location" data-source-line="49" id="ent0003"><rect fill="#151515" height="191.824" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="288.1796" x="1904.35" y="760.73"/><rect fill="#333333" height="30" rx="2.5" ry="2.5" style="stroke:#333333;stroke-width:0.5;" width="288.1796" x="1904.35" y="760.73"/><rect fill="#333333" height="2.5" style="stroke:#333333;stroke-width:0.5;" width="288.1796" x="1904.35" y="788.23"/><rect fill="none" height="191.824" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="288.1796" x="1904.35" y="760.73"/><ellipse cx="2016.2035" cy="775.73" fill="#3D3D3D" rx="10" ry="10" style="stroke:#E7E7E7;stroke-width:1;"/><path d="M2018.0931,780.6861 Q2017.6146,780.9321 2017.0882,781.0552 Q2016.5619,781.1782 2015.9808,781.1782 Q2013.9164,781.1782 2012.8295,779.8179 Q2011.7425,778.4575 2011.7425,775.8872 Q2011.7425,773.3101 2012.8295,771.9497 Q2013.9164,770.5894 2015.9808,770.5894 Q2016.5619,770.5894 2017.0951,770.7124 Q2017.6283,770.8355 2018.0931,771.0816 L2018.0931,773.3237 Q2017.5736,772.8452 2017.0848,772.6231 Q2016.5961,772.4009 2016.0765,772.4009 Q2014.9691,772.4009 2014.4051,773.2793 Q2013.8412,774.1577 2013.8412,775.8872 Q2013.8412,777.6099 2014.4051,778.4883 Q2014.9691,779.3667 2016.0765,779.3667 Q2016.5961,779.3667 2017.0848,779.1446 Q2017.5736,778.9224 2018.0931,778.4439 Z " fill="#EAEAEA"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="56.4726" x="2035.2035" y="780.504">Location</text><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="1905.35" x2="2191.5296" y1="790.73" y2="790.73"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1915.35" cy="805.344" fill="none" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="98.7283" x="1923.35" y="808.618">city : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1915.35" cy="823.572" fill="none" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="173.8874" x="1923.35" y="826.846">state_province : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1915.35" cy="841.8" fill="none" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="140.3328" x="1923.35" y="845.074">iso3166_2 : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1915.35" cy="860.028" fill="none" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="124.9119" x="1923.35" y="863.302">country : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1915.35" cy="878.256" fill="none" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="136.6333" x="1923.35" y="881.53">iso3166_1 : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1915.35" cy="896.484" fill="none" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="263.1796" x="1923.35" y="899.758">local_languages : std::vector&lt;std::string&gt;</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1915.35" cy="914.712" fill="none" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="105.0526" x="1923.35" y="917.986">latitude : double</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1915.35" cy="932.94" fill="none" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="116.0916" x="1923.35" y="936.214">longitude : double</text><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="1905.35" x2="2191.5296" y1="944.554" y2="944.554"/></g><!--class LocationContext--><g class="entity" data-qualified-name="Domain Models.LocationContext" data-source-line="60" id="ent0004"><rect fill="#151515" height="173.596" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="221.5496" x="1937.66" y="1122.84"/><rect fill="#333333" height="30" rx="2.5" ry="2.5" style="stroke:#333333;stroke-width:0.5;" width="221.5496" x="1937.66" y="1122.84"/><rect fill="#333333" height="2.5" style="stroke:#333333;stroke-width:0.5;" width="221.5496" x="1937.66" y="1150.34"/><rect fill="none" height="173.596" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="221.5496" x="1937.66" y="1122.84"/><ellipse cx="1990.0745" cy="1137.84" fill="#3D3D3D" rx="10" ry="10" style="stroke:#E7E7E7;stroke-width:1;"/><path d="M1991.9641,1142.7961 Q1991.4856,1143.0421 1990.9592,1143.1652 Q1990.4329,1143.2882 1989.8518,1143.2882 Q1987.7873,1143.2882 1986.7004,1141.9279 Q1985.6135,1140.5675 1985.6135,1137.9972 Q1985.6135,1135.4201 1986.7004,1134.0597 Q1987.7873,1132.6994 1989.8518,1132.6994 Q1990.4329,1132.6994 1990.9661,1132.8224 Q1991.4993,1132.9455 1991.9641,1133.1916 L1991.9641,1135.4337 Q1991.4446,1134.9552 1990.9558,1134.7331 Q1990.467,1134.5109 1989.9475,1134.5109 Q1988.8401,1134.5109 1988.2761,1135.3893 Q1987.7122,1136.2677 1987.7122,1137.9972 Q1987.7122,1139.7199 1988.2761,1140.5983 Q1988.8401,1141.4767 1989.9475,1141.4767 Q1990.467,1141.4767 1990.9558,1141.2546 Q1991.4446,1141.0324 1991.9641,1140.5539 Z " fill="#EAEAEA"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="108.7207" x="2009.0745" y="1142.614">LocationContext</text><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="1938.66" x2="2158.2096" y1="1152.84" y2="1152.84"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1948.66" cy="1167.454" fill="none" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="99.9708" x="1956.66" y="1170.728">text : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1948.66" cy="1185.682" fill="none" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="196.5496" x="1956.66" y="1188.956">completeness : Completeness</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1948.66" cy="1203.91" fill="none" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="125.6922" x="1956.66" y="1207.184">char_count : size_t</text><line style="stroke:#AFAFAF;stroke-width:1;" x1="1938.66" x2="2158.2096" y1="1215.524" y2="1215.524"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="147.021" x="1943.66" y="1233.412">&#171;enum&#187; Completeness</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="21.763" x="1943.66" y="1251.64">Full</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="40.4986" x="1943.66" y="1269.868">Partial</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="46.571" x="1943.66" y="1288.096">Absent</text></g><!--class EnrichedCity--><g class="entity" data-qualified-name="Domain Models.EnrichedCity" data-source-line="71" id="ent0005"><rect fill="#151515" height="82.456" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="194.2043" x="1370.58" y="1150.41"/><rect fill="#333333" height="30" rx="2.5" ry="2.5" style="stroke:#333333;stroke-width:0.5;" width="194.2043" x="1370.58" y="1150.41"/><rect fill="#333333" height="2.5" style="stroke:#333333;stroke-width:0.5;" width="194.2043" x="1370.58" y="1177.91"/><rect fill="none" height="82.456" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="194.2043" x="1370.58" y="1150.41"/><ellipse cx="1421.7223" cy="1165.41" fill="#3D3D3D" rx="10" ry="10" style="stroke:#E7E7E7;stroke-width:1;"/><path d="M1423.612,1170.3661 Q1423.1335,1170.6121 1422.6071,1170.7352 Q1422.0807,1170.8582 1421.4997,1170.8582 Q1419.4352,1170.8582 1418.3483,1169.4979 Q1417.2614,1168.1375 1417.2614,1165.5672 Q1417.2614,1162.9901 1418.3483,1161.6297 Q1419.4352,1160.2694 1421.4997,1160.2694 Q1422.0807,1160.2694 1422.6139,1160.3924 Q1423.1471,1160.5155 1423.612,1160.7616 L1423.612,1163.0037 Q1423.0924,1162.5252 1422.6037,1162.3031 Q1422.1149,1162.0809 1421.5954,1162.0809 Q1420.488,1162.0809 1419.924,1162.9593 Q1419.36,1163.8377 1419.36,1165.5672 Q1419.36,1167.2899 1419.924,1168.1683 Q1420.488,1169.0467 1421.5954,1169.0467 Q1422.1149,1169.0467 1422.6037,1168.8246 Q1423.0924,1168.6024 1423.612,1168.1239 Z " fill="#EAEAEA"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="83.9196" x="1440.7223" y="1170.184">EnrichedCity</text><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="1371.58" x2="1563.7843" y1="1180.41" y2="1180.41"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1381.58" cy="1195.024" fill="none" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="118.9687" x="1389.58" y="1198.298">location : Location</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1381.58" cy="1213.252" fill="none" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="169.2043" x="1389.58" y="1216.526">context : LocationContext</text><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="1371.58" x2="1563.7843" y1="1224.866" y2="1224.866"/></g><!--class BeerStyle--><g class="entity" data-qualified-name="Domain Models.BeerStyle" data-source-line="76" id="ent0006"><rect fill="#151515" height="155.368" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="173.3408" x="1961.77" y="361.96"/><rect fill="#333333" height="30" rx="2.5" ry="2.5" style="stroke:#333333;stroke-width:0.5;" width="173.3408" x="1961.77" y="361.96"/><rect fill="#333333" height="2.5" style="stroke:#333333;stroke-width:0.5;" width="173.3408" x="1961.77" y="389.46"/><rect fill="none" height="155.368" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="173.3408" x="1961.77" y="361.96"/><ellipse cx="2013.4409" cy="376.96" fill="#3D3D3D" rx="10" ry="10" style="stroke:#E7E7E7;stroke-width:1;"/><path d="M2015.3305,381.9161 Q2014.852,382.1621 2014.3256,382.2852 Q2013.7993,382.4082 2013.2182,382.4082 Q2011.1538,382.4082 2010.0669,381.0479 Q2008.9799,379.6875 2008.9799,377.1172 Q2008.9799,374.5401 2010.0669,373.1797 Q2011.1538,371.8194 2013.2182,371.8194 Q2013.7993,371.8194 2014.3325,371.9424 Q2014.8657,372.0655 2015.3305,372.3116 L2015.3305,374.5537 Q2014.811,374.0752 2014.3222,373.8531 Q2013.8335,373.6309 2013.3139,373.6309 Q2012.2065,373.6309 2011.6425,374.5093 Q2011.0786,375.3877 2011.0786,377.1172 Q2011.0786,378.8399 2011.6425,379.7183 Q2012.2065,380.5967 2013.3139,380.5967 Q2013.8335,380.5967 2014.3222,380.3746 Q2014.811,380.1524 2015.3305,379.6739 Z " fill="#EAEAEA"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="61.9991" x="2032.4409" y="381.734">BeerStyle</text><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="1962.77" x2="2134.1108" y1="391.96" y2="391.96"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1972.77" cy="406.574" fill="none" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="110.1767" x="1980.77" y="409.848">name : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1972.77" cy="424.802" fill="none" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="148.3408" x="1980.77" y="428.076">description : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1972.77" cy="443.03" fill="none" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="96.4286" x="1980.77" y="446.304">min_abv : float</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1972.77" cy="461.258" fill="none" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="99.6136" x="1980.77" y="464.532">max_abv : float</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1972.77" cy="479.486" fill="none" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="80.388" x="1980.77" y="482.76">min_ibu : int</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1972.77" cy="497.714" fill="none" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="83.573" x="1980.77" y="500.988">max_ibu : int</text><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="1962.77" x2="2134.1108" y1="509.328" y2="509.328"/></g><!--class BreweryResult--><g class="entity" data-qualified-name="Domain Models.BreweryResult" data-source-line="85" id="ent0007"><rect fill="#151515" height="118.912" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="212.7578" x="1942.06" y="208.18"/><rect fill="#333333" height="30" rx="2.5" ry="2.5" style="stroke:#333333;stroke-width:0.5;" width="212.7578" x="1942.06" y="208.18"/><rect fill="#333333" height="2.5" style="stroke:#333333;stroke-width:0.5;" width="212.7578" x="1942.06" y="235.68"/><rect fill="none" height="118.912" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="212.7578" x="1942.06" y="208.18"/><ellipse cx="1997.8853" cy="223.18" fill="#3D3D3D" rx="10" ry="10" style="stroke:#E7E7E7;stroke-width:1;"/><path d="M1999.7749,228.1361 Q1999.2964,228.3821 1998.77,228.5052 Q1998.2437,228.6282 1997.6626,228.6282 Q1995.5982,228.6282 1994.5113,227.2679 Q1993.4243,225.9075 1993.4243,223.3372 Q1993.4243,220.7601 1994.5113,219.3997 Q1995.5982,218.0394 1997.6626,218.0394 Q1998.2437,218.0394 1998.7769,218.1624 Q1999.3101,218.2855 1999.7749,218.5316 L1999.7749,220.7737 Q1999.2554,220.2952 1998.7666,220.0731 Q1998.2779,219.8509 1997.7583,219.8509 Q1996.6509,219.8509 1996.0869,220.7293 Q1995.523,221.6077 1995.523,223.3372 Q1995.523,225.0599 1996.0869,225.9383 Q1996.6509,226.8167 1997.7583,226.8167 Q1998.2779,226.8167 1998.7666,226.5946 Q1999.2554,226.3724 1999.7749,225.8939 Z " fill="#EAEAEA"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="93.1072" x="2016.8853" y="227.954">BreweryResult</text><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="1943.06" x2="2153.8178" y1="238.18" y2="238.18"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1953.06" cy="252.794" fill="none" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="135.4047" x="1961.06" y="256.068">name_en : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1953.06" cy="271.022" fill="none" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="173.5688" x="1961.06" y="274.296">description_en : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1953.06" cy="289.25" fill="none" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="149.5937" x="1961.06" y="292.524">name_local : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1953.06" cy="307.478" fill="none" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="187.7578" x="1961.06" y="310.752">description_local : std::string</text><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="1943.06" x2="2153.8178" y1="319.092" y2="319.092"/></g><!--class BeerResult--><g class="entity" data-qualified-name="Domain Models.BeerResult" data-source-line="92" id="ent0008"><rect fill="#151515" height="173.596" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="212.7578" x="1942.06" y="551.84"/><rect fill="#333333" height="30" rx="2.5" ry="2.5" style="stroke:#333333;stroke-width:0.5;" width="212.7578" x="1942.06" y="551.84"/><rect fill="#333333" height="2.5" style="stroke:#333333;stroke-width:0.5;" width="212.7578" x="1942.06" y="579.34"/><rect fill="none" height="173.596" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="212.7578" x="1942.06" y="551.84"/><ellipse cx="2009.7048" cy="566.84" fill="#3D3D3D" rx="10" ry="10" style="stroke:#E7E7E7;stroke-width:1;"/><path d="M2011.5945,571.7961 Q2011.116,572.0421 2010.5896,572.1652 Q2010.0632,572.2882 2009.4822,572.2882 Q2007.4177,572.2882 2006.3308,570.9279 Q2005.2439,569.5675 2005.2439,566.9972 Q2005.2439,564.4201 2006.3308,563.0597 Q2007.4177,561.6994 2009.4822,561.6994 Q2010.0632,561.6994 2010.5964,561.8224 Q2011.1296,561.9455 2011.5945,562.1916 L2011.5945,564.4337 Q2011.075,563.9552 2010.5862,563.7331 Q2010.0974,563.5109 2009.5779,563.5109 Q2008.4705,563.5109 2007.9065,564.3893 Q2007.3425,565.2677 2007.3425,566.9972 Q2007.3425,568.7199 2007.9065,569.5983 Q2008.4705,570.4767 2009.5779,570.4767 Q2010.0974,570.4767 2010.5862,570.2546 Q2011.075,570.0324 2011.5945,569.5539 Z " fill="#EAEAEA"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="69.4681" x="2028.7048" y="571.614">BeerResult</text><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="1943.06" x2="2153.8178" y1="581.84" y2="581.84"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1953.06" cy="596.454" fill="none" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="135.4047" x="1961.06" y="599.728">name_en : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1953.06" cy="614.682" fill="none" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="173.5688" x="1961.06" y="617.956">description_en : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1953.06" cy="632.91" fill="none" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="149.5937" x="1961.06" y="636.184">name_local : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1953.06" cy="651.138" fill="none" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="187.7578" x="1961.06" y="654.412">description_local : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1953.06" cy="669.366" fill="none" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="105.4798" x="1961.06" y="672.64">style : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1953.06" cy="687.594" fill="none" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="63.3292" x="1961.06" y="690.868">abv : float</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1953.06" cy="705.822" fill="none" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="47.2886" x="1961.06" y="709.096">ibu : int</text><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="1943.06" x2="2153.8178" y1="717.436" y2="717.436"/></g><!--class UserResult--><g class="entity" data-qualified-name="Domain Models.UserResult" data-source-line="102" id="ent0009"><rect fill="#151515" height="100.684" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="165.5884" x="1965.64" y="987.3"/><rect fill="#333333" height="30" rx="2.5" ry="2.5" style="stroke:#333333;stroke-width:0.5;" width="165.5884" x="1965.64" y="987.3"/><rect fill="#333333" height="2.5" style="stroke:#333333;stroke-width:0.5;" width="165.5884" x="1965.64" y="1014.8"/><rect fill="none" height="100.684" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="165.5884" x="1965.64" y="987.3"/><ellipse cx="2009.7946" cy="1002.3" fill="#3D3D3D" rx="10" ry="10" style="stroke:#E7E7E7;stroke-width:1;"/><path d="M2011.6843,1007.2561 Q2011.2058,1007.5021 2010.6794,1007.6252 Q2010.153,1007.7482 2009.572,1007.7482 Q2007.5075,1007.7482 2006.4206,1006.3879 Q2005.3337,1005.0275 2005.3337,1002.4572 Q2005.3337,999.8801 2006.4206,998.5197 Q2007.5075,997.1594 2009.572,997.1594 Q2010.153,997.1594 2010.6862,997.2824 Q2011.2194,997.4055 2011.6843,997.6516 L2011.6843,999.8937 Q2011.1647,999.4152 2010.676,999.1931 Q2010.1872,998.9709 2009.6677,998.9709 Q2008.5602,998.9709 2007.9963,999.8493 Q2007.4323,1000.7277 2007.4323,1002.4572 Q2007.4323,1004.1799 2007.9963,1005.0583 Q2008.5602,1005.9367 2009.6677,1005.9367 Q2010.1872,1005.9367 2010.676,1005.7146 Q2011.1647,1005.4924 2011.6843,1005.0139 Z " fill="#EAEAEA"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="69.2791" x="2028.7946" y="1007.074">UserResult</text><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="1966.64" x2="2130.2284" y1="1017.3" y2="1017.3"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1976.64" cy="1031.914" fill="none" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="138.3658" x="1984.64" y="1035.188">username : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1976.64" cy="1050.142" fill="none" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="94.5283" x="1984.64" y="1053.416">bio : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1976.64" cy="1068.37" fill="none" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="140.5884" x="1984.64" y="1071.644">activity_weight : float</text><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="1966.64" x2="2130.2284" y1="1079.984" y2="1079.984"/></g><!--class CheckinResult--><g class="entity" data-qualified-name="Domain Models.CheckinResult" data-source-line="108" id="ent0010"><rect fill="#151515" height="82.456" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="197.8722" x="1949.5" y="1331.41"/><rect fill="#333333" height="30" rx="2.5" ry="2.5" style="stroke:#333333;stroke-width:0.5;" width="197.8722" x="1949.5" y="1331.41"/><rect fill="#333333" height="2.5" style="stroke:#333333;stroke-width:0.5;" width="197.8722" x="1949.5" y="1358.91"/><rect fill="none" height="82.456" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="197.8722" x="1949.5" y="1331.41"/><ellipse cx="1998.2238" cy="1346.41" fill="#3D3D3D" rx="10" ry="10" style="stroke:#E7E7E7;stroke-width:1;"/><path d="M2000.1134,1351.3661 Q1999.6349,1351.6121 1999.1086,1351.7352 Q1998.5822,1351.8582 1998.0011,1351.8582 Q1995.9367,1351.8582 1994.8498,1350.4979 Q1993.7629,1349.1375 1993.7629,1346.5672 Q1993.7629,1343.9901 1994.8498,1342.6297 Q1995.9367,1341.2694 1998.0011,1341.2694 Q1998.5822,1341.2694 1999.1154,1341.3924 Q1999.6486,1341.5155 2000.1134,1341.7616 L2000.1134,1344.0037 Q1999.5939,1343.5252 1999.1051,1343.3031 Q1998.6164,1343.0809 1998.0968,1343.0809 Q1996.9894,1343.0809 1996.4254,1343.9593 Q1995.8615,1344.8377 1995.8615,1346.5672 Q1995.8615,1348.2899 1996.4254,1349.1683 Q1996.9894,1350.0467 1998.0968,1350.0467 Q1998.6164,1350.0467 1999.1051,1349.8246 Q1999.5939,1349.6024 2000.1134,1349.1239 Z " fill="#EAEAEA"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="92.4246" x="2017.2238" y="1351.184">CheckinResult</text><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="1950.5" x2="2146.3722" y1="1361.41" y2="1361.41"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1960.5" cy="1376.024" fill="none" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="172.8722" x="1968.5" y="1379.298">checked_in_at : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1960.5" cy="1394.252" fill="none" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="103.8733" x="1968.5" y="1397.526">note : std::string</text><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="1950.5" x2="2146.3722" y1="1405.866" y2="1405.866"/></g><!--class RatingResult--><g class="entity" data-qualified-name="Domain Models.RatingResult" data-source-line="113" id="ent0011"><rect fill="#151515" height="82.456" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="128.8733" x="1984" y="90.41"/><rect fill="#333333" height="30" rx="2.5" ry="2.5" style="stroke:#333333;stroke-width:0.5;" width="128.8733" x="1984" y="90.41"/><rect fill="#333333" height="2.5" style="stroke:#333333;stroke-width:0.5;" width="128.8733" x="1984" y="117.91"/><rect fill="none" height="82.456" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="128.8733" x="1984" y="90.41"/><ellipse cx="2006.2443" cy="105.41" fill="#3D3D3D" rx="10" ry="10" style="stroke:#E7E7E7;stroke-width:1;"/><path d="M2008.1339,110.3661 Q2007.6554,110.6121 2007.129,110.7352 Q2006.6027,110.8582 2006.0216,110.8582 Q2003.9572,110.8582 2002.8703,109.4979 Q2001.7833,108.1375 2001.7833,105.5672 Q2001.7833,102.9901 2002.8703,101.6297 Q2003.9572,100.2694 2006.0216,100.2694 Q2006.6027,100.2694 2007.1359,100.3924 Q2007.6691,100.5155 2008.1339,100.7616 L2008.1339,103.0037 Q2007.6144,102.5252 2007.1256,102.3031 Q2006.6369,102.0809 2006.1173,102.0809 Q2005.0099,102.0809 2004.4459,102.9593 Q2003.882,103.8377 2003.882,105.5672 Q2003.882,107.2899 2004.4459,108.1683 Q2005.0099,109.0467 2006.1173,109.0467 Q2006.6369,109.0467 2007.1256,108.8246 Q2007.6144,108.6024 2008.1339,108.1239 Z " fill="#EAEAEA"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="80.5527" x="2021.0763" y="110.184">RatingResult</text><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="1985" x2="2111.8733" y1="120.41" y2="120.41"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1995" cy="135.024" fill="none" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="76.0377" x="2003" y="138.298">score : float</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1995" cy="153.252" fill="none" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="103.8733" x="2003" y="156.526">note : std::string</text><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="1985" x2="2111.8733" y1="164.866" y2="164.866"/></g><!--class GeneratedBrewery--><g class="entity" data-qualified-name="Domain Models.GeneratedBrewery" data-source-line="118" id="ent0012"><rect fill="#151515" height="137.14" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="395.3738" x="1270" y="607.07"/><rect fill="#333333" height="30" rx="2.5" ry="2.5" style="stroke:#333333;stroke-width:0.5;" width="395.3738" x="1270" y="607.07"/><rect fill="#333333" height="2.5" style="stroke:#333333;stroke-width:0.5;" width="395.3738" x="1270" y="634.57"/><rect fill="none" height="137.14" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="395.3738" x="1270" y="607.07"/><ellipse cx="1402.3178" cy="622.07" fill="#3D3D3D" rx="10" ry="10" style="stroke:#E7E7E7;stroke-width:1;"/><path d="M1404.2075,627.0261 Q1403.7289,627.2721 1403.2026,627.3952 Q1402.6762,627.5182 1402.0951,627.5182 Q1400.0307,627.5182 1398.9438,626.1579 Q1397.8569,624.7975 1397.8569,622.2272 Q1397.8569,619.6501 1398.9438,618.2897 Q1400.0307,616.9294 1402.0951,616.9294 Q1402.6762,616.9294 1403.2094,617.0524 Q1403.7426,617.1755 1404.2075,617.4216 L1404.2075,619.6637 Q1403.6879,619.1852 1403.1992,618.9631 Q1402.7104,618.7409 1402.1909,618.7409 Q1401.0834,618.7409 1400.5195,619.6193 Q1399.9555,620.4977 1399.9555,622.2272 Q1399.9555,623.9499 1400.5195,624.8283 Q1401.0834,625.7067 1402.1909,625.7067 Q1402.7104,625.7067 1403.1992,625.4846 Q1403.6879,625.2624 1404.2075,624.7839 Z " fill="#EAEAEA"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="122.7382" x="1421.3178" y="626.844">GeneratedBrewery</text><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="1271" x2="1664.3738" y1="637.07" y2="637.07"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1281" cy="651.684" fill="none" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="172.5466" x="1289" y="654.958">brewery_id : sqlite3_int64</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1281" cy="669.912" fill="none" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="118.9687" x="1289" y="673.186">location : Location</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1281" cy="688.14" fill="none" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="156.8774" x="1289" y="691.414">brewery : BreweryResult</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1281" cy="706.368" fill="none" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="370.3738" x="1289" y="709.642">context_completeness : LocationContext::Completeness</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1281" cy="724.596" fill="none" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="163.2088" x="1289" y="727.87">generated_at : std::string</text><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="1271" x2="1664.3738" y1="736.21" y2="736.21"/></g><!--class GeneratedBeer--><g class="entity" data-qualified-name="Domain Models.GeneratedBeer" data-source-line="126" id="ent0013"><rect fill="#151515" height="155.368" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="197.5466" x="1368.91" y="778.96"/><rect fill="#333333" height="30" rx="2.5" ry="2.5" style="stroke:#333333;stroke-width:0.5;" width="197.5466" x="1368.91" y="778.96"/><rect fill="#333333" height="2.5" style="stroke:#333333;stroke-width:0.5;" width="197.5466" x="1368.91" y="806.46"/><rect fill="none" height="155.368" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="197.5466" x="1368.91" y="778.96"/><ellipse cx="1414.1338" cy="793.96" fill="#3D3D3D" rx="10" ry="10" style="stroke:#E7E7E7;stroke-width:1;"/><path d="M1416.0234,798.9161 Q1415.5449,799.1621 1415.0185,799.2852 Q1414.4921,799.4082 1413.9111,799.4082 Q1411.8466,799.4082 1410.7597,798.0479 Q1409.6728,796.6875 1409.6728,794.1172 Q1409.6728,791.5401 1410.7597,790.1797 Q1411.8466,788.8194 1413.9111,788.8194 Q1414.4921,788.8194 1415.0254,788.9424 Q1415.5586,789.0655 1416.0234,789.3116 L1416.0234,791.5537 Q1415.5039,791.0752 1415.0151,790.8531 Q1414.5263,790.6309 1414.0068,790.6309 Q1412.8994,790.6309 1412.3354,791.5093 Q1411.7714,792.3877 1411.7714,794.1172 Q1411.7714,795.8399 1412.3354,796.7183 Q1412.8994,797.5967 1414.0068,797.5967 Q1414.5263,797.5967 1415.0151,797.3746 Q1415.5039,797.1524 1416.0234,796.6739 Z " fill="#EAEAEA"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="99.0991" x="1433.1338" y="798.734">GeneratedBeer</text><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="1369.91" x2="1565.4566" y1="808.96" y2="808.96"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1379.91" cy="823.574" fill="none" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="148.9075" x="1387.91" y="826.848">beer_id : sqlite3_int64</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1379.91" cy="841.802" fill="none" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="172.5466" x="1387.91" y="845.076">brewery_id : sqlite3_int64</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1379.91" cy="860.03" fill="none" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="118.9687" x="1387.91" y="863.304">location : Location</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1379.91" cy="878.258" fill="none" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="103.6527" x="1387.91" y="881.532">style : BeerStyle</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1379.91" cy="896.486" fill="none" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="109.5992" x="1387.91" y="899.76">beer : BeerResult</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1379.91" cy="914.714" fill="none" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="163.2088" x="1387.91" y="917.988">generated_at : std::string</text><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="1369.91" x2="1565.4566" y1="926.328" y2="926.328"/></g><!--class GeneratedUser--><g class="entity" data-qualified-name="Domain Models.GeneratedUser" data-source-line="135" id="ent0014"><rect fill="#151515" height="118.912" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="188.2088" x="1373.58" y="978.18"/><rect fill="#333333" height="30" rx="2.5" ry="2.5" style="stroke:#333333;stroke-width:0.5;" width="188.2088" x="1373.58" y="978.18"/><rect fill="#333333" height="2.5" style="stroke:#333333;stroke-width:0.5;" width="188.2088" x="1373.58" y="1005.68"/><rect fill="none" height="118.912" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="188.2088" x="1373.58" y="978.18"/><ellipse cx="1414.2644" cy="993.18" fill="#3D3D3D" rx="10" ry="10" style="stroke:#E7E7E7;stroke-width:1;"/><path d="M1416.1541,998.1361 Q1415.6755,998.3821 1415.1492,998.5052 Q1414.6228,998.6282 1414.0418,998.6282 Q1411.9773,998.6282 1410.8904,997.2679 Q1409.8035,995.9075 1409.8035,993.3372 Q1409.8035,990.7601 1410.8904,989.3997 Q1411.9773,988.0394 1414.0418,988.0394 Q1414.6228,988.0394 1415.156,988.1624 Q1415.6892,988.2855 1416.1541,988.5316 L1416.1541,990.7737 Q1415.6345,990.2952 1415.1458,990.0731 Q1414.657,989.8509 1414.1375,989.8509 Q1413.03,989.8509 1412.4661,990.7293 Q1411.9021,991.6077 1411.9021,993.3372 Q1411.9021,995.0599 1412.4661,995.9383 Q1413.03,996.8167 1414.1375,996.8167 Q1414.657,996.8167 1415.1458,996.5946 Q1415.6345,996.3724 1416.1541,995.8939 Z " fill="#EAEAEA"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="98.9101" x="1433.1943" y="997.954">GeneratedUser</text><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="1374.58" x2="1560.7888" y1="1008.18" y2="1008.18"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1384.58" cy="1022.794" fill="none" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="147.2381" x="1392.58" y="1026.068">user_id : sqlite3_int64</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1384.58" cy="1041.022" fill="none" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="118.9687" x="1392.58" y="1044.296">location : Location</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1384.58" cy="1059.25" fill="none" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="107.7407" x="1392.58" y="1062.524">user : UserResult</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1384.58" cy="1077.478" fill="none" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="163.2088" x="1392.58" y="1080.752">generated_at : std::string</text><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="1374.58" x2="1560.7888" y1="1089.092" y2="1089.092"/></g><!--class GeneratedCheckin--><g class="entity" data-qualified-name="Domain Models.GeneratedCheckin" data-source-line="142" id="ent0015"><rect fill="#151515" height="137.14" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="197.5466" x="1368.91" y="1353.07"/><rect fill="#333333" height="30" rx="2.5" ry="2.5" style="stroke:#333333;stroke-width:0.5;" width="197.5466" x="1368.91" y="1353.07"/><rect fill="#333333" height="2.5" style="stroke:#333333;stroke-width:0.5;" width="197.5466" x="1368.91" y="1380.57"/><rect fill="none" height="137.14" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="197.5466" x="1368.91" y="1353.07"/><ellipse cx="1403.381" cy="1368.07" fill="#3D3D3D" rx="10" ry="10" style="stroke:#E7E7E7;stroke-width:1;"/><path d="M1405.2706,1373.0261 Q1404.7921,1373.2721 1404.2657,1373.3952 Q1403.7394,1373.5182 1403.1583,1373.5182 Q1401.0939,1373.5182 1400.0069,1372.1579 Q1398.92,1370.7975 1398.92,1368.2272 Q1398.92,1365.6501 1400.0069,1364.2897 Q1401.0939,1362.9294 1403.1583,1362.9294 Q1403.7394,1362.9294 1404.2726,1363.0524 Q1404.8058,1363.1755 1405.2706,1363.4216 L1405.2706,1365.6637 Q1404.7511,1365.1852 1404.2623,1364.9631 Q1403.7735,1364.7409 1403.254,1364.7409 Q1402.1466,1364.7409 1401.5826,1365.6193 Q1401.0187,1366.4977 1401.0187,1368.2272 Q1401.0187,1369.9499 1401.5826,1370.8283 Q1402.1466,1371.7067 1403.254,1371.7067 Q1403.7735,1371.7067 1404.2623,1371.4846 Q1404.7511,1371.2624 1405.2706,1370.7839 Z " fill="#EAEAEA"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="122.0556" x="1420.9301" y="1372.844">GeneratedCheckin</text><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="1369.91" x2="1565.4566" y1="1383.07" y2="1383.07"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1379.91" cy="1397.684" fill="none" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="169.498" x="1387.91" y="1400.958">checkin_id : sqlite3_int64</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1379.91" cy="1415.912" fill="none" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="147.2381" x="1387.91" y="1419.186">user_id : sqlite3_int64</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1379.91" cy="1434.14" fill="none" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="172.5466" x="1387.91" y="1437.414">brewery_id : sqlite3_int64</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1379.91" cy="1452.368" fill="none" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="153.1462" x="1387.91" y="1455.642">checkin : CheckinResult</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1379.91" cy="1470.596" fill="none" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="163.2088" x="1387.91" y="1473.87">generated_at : std::string</text><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="1369.91" x2="1565.4566" y1="1482.21" y2="1482.21"/></g><!--class GeneratedRating--><g class="entity" data-qualified-name="Domain Models.GeneratedRating" data-source-line="150" id="ent0016"><rect fill="#151515" height="137.14" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="194.498" x="1370.44" y="91.07"/><rect fill="#333333" height="30" rx="2.5" ry="2.5" style="stroke:#333333;stroke-width:0.5;" width="194.498" x="1370.44" y="91.07"/><rect fill="#333333" height="2.5" style="stroke:#333333;stroke-width:0.5;" width="194.498" x="1370.44" y="118.57"/><rect fill="none" height="137.14" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="194.498" x="1370.44" y="91.07"/><ellipse cx="1408.8815" cy="106.07" fill="#3D3D3D" rx="10" ry="10" style="stroke:#E7E7E7;stroke-width:1;"/><path d="M1410.7711,111.0261 Q1410.2926,111.2721 1409.7662,111.3952 Q1409.2399,111.5182 1408.6588,111.5182 Q1406.5943,111.5182 1405.5074,110.1579 Q1404.4205,108.7975 1404.4205,106.2272 Q1404.4205,103.6501 1405.5074,102.2897 Q1406.5943,100.9294 1408.6588,100.9294 Q1409.2399,100.9294 1409.7731,101.0524 Q1410.3063,101.1755 1410.7711,101.4216 L1410.7711,103.6637 Q1410.2516,103.1852 1409.7628,102.9631 Q1409.274,102.7409 1408.7545,102.7409 Q1407.6471,102.7409 1407.0831,103.6193 Q1406.5192,104.4977 1406.5192,106.2272 Q1406.5192,107.9499 1407.0831,108.8283 Q1407.6471,109.7067 1408.7545,109.7067 Q1409.274,109.7067 1409.7628,109.4846 Q1410.2516,109.2624 1410.7711,108.7839 Z " fill="#EAEAEA"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="110.1837" x="1427.3129" y="110.844">GeneratedRating</text><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="1371.44" x2="1563.938" y1="121.07" y2="121.07"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1381.44" cy="135.684" fill="none" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="147.2381" x="1389.44" y="138.958">user_id : sqlite3_int64</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1381.44" cy="153.912" fill="none" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="148.9075" x="1389.44" y="157.186">beer_id : sqlite3_int64</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1381.44" cy="172.14" fill="none" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="169.498" x="1389.44" y="175.414">checkin_id : sqlite3_int64</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1381.44" cy="190.368" fill="none" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="128.2964" x="1389.44" y="193.642">rating : RatingResult</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1381.44" cy="208.596" fill="none" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="163.2088" x="1389.44" y="211.87">generated_at : std::string</text><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="1371.44" x2="1563.938" y1="220.21" y2="220.21"/></g><!--class SamplingOptions--><g class="entity" data-qualified-name="Domain Models.SamplingOptions" data-source-line="158" id="ent0017"><rect fill="#151515" height="137.14" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="186.0004" x="2511.81" y="1529.07"/><rect fill="#333333" height="30" rx="2.5" ry="2.5" style="stroke:#333333;stroke-width:0.5;" width="186.0004" x="2511.81" y="1529.07"/><rect fill="#333333" height="2.5" style="stroke:#333333;stroke-width:0.5;" width="186.0004" x="2511.81" y="1556.57"/><rect fill="none" height="137.14" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="186.0004" x="2511.81" y="1529.07"/><ellipse cx="2546.0086" cy="1544.07" fill="#3D3D3D" rx="10" ry="10" style="stroke:#E7E7E7;stroke-width:1;"/><path d="M2547.8983,1549.0261 Q2547.4197,1549.2721 2546.8934,1549.3952 Q2546.367,1549.5182 2545.786,1549.5182 Q2543.7215,1549.5182 2542.6346,1548.1579 Q2541.5477,1546.7975 2541.5477,1544.2272 Q2541.5477,1541.6501 2542.6346,1540.2897 Q2543.7215,1538.9294 2545.786,1538.9294 Q2546.367,1538.9294 2546.9002,1539.0524 Q2547.4334,1539.1755 2547.8983,1539.4216 L2547.8983,1541.6637 Q2547.3787,1541.1852 2546.89,1540.9631 Q2546.4012,1540.7409 2545.8817,1540.7409 Q2544.7742,1540.7409 2544.2103,1541.6193 Q2543.6463,1542.4977 2543.6463,1544.2272 Q2543.6463,1545.9499 2544.2103,1546.8283 Q2544.7742,1547.7067 2545.8817,1547.7067 Q2546.4012,1547.7067 2546.89,1547.4846 Q2547.3787,1547.2624 2547.8983,1546.7839 Z " fill="#EAEAEA"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="111.1145" x="2563.4972" y="1548.844">SamplingOptions</text><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="2512.81" x2="2696.8104" y1="1559.07" y2="1559.07"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="2522.81" cy="1573.684" fill="none" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="161.0004" x="2530.81" y="1576.958">temperature : float = 1.0F</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="2522.81" cy="1591.912" fill="none" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="132.4751" x="2530.81" y="1595.186">top_p : float = 0.95F</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="2522.81" cy="1610.14" fill="none" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="137.5396" x="2530.81" y="1613.414">top_k : uint32_t = 64</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="2522.81" cy="1628.368" fill="none" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="148.8377" x="2530.81" y="1631.642">n_ctx : uint32_t = 8192</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="2522.81" cy="1646.596" fill="none" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="85.9496" x="2530.81" y="1649.87">seed : int = -1</text><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="2512.81" x2="2696.8104" y1="1658.21" y2="1658.21"/></g><!--class GeneratorOptions--><g class="entity" data-qualified-name="Domain Models.GeneratorOptions" data-source-line="166" id="ent0018"><rect fill="#151515" height="100.684" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="244.5342" x="1926.17" y="1566.3"/><rect fill="#333333" height="30" rx="2.5" ry="2.5" style="stroke:#333333;stroke-width:0.5;" width="244.5342" x="1926.17" y="1566.3"/><rect fill="#333333" height="2.5" style="stroke:#333333;stroke-width:0.5;" width="244.5342" x="1926.17" y="1593.8"/><rect fill="none" height="100.684" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="244.5342" x="1926.17" y="1566.3"/><ellipse cx="1985.3693" cy="1581.3" fill="#3D3D3D" rx="10" ry="10" style="stroke:#E7E7E7;stroke-width:1;"/><path d="M1987.2589,1586.2561 Q1986.7804,1586.5021 1986.2541,1586.6252 Q1985.7277,1586.7482 1985.1466,1586.7482 Q1983.0822,1586.7482 1981.9953,1585.3879 Q1980.9083,1584.0275 1980.9083,1581.4572 Q1980.9083,1578.8801 1981.9953,1577.5197 Q1983.0822,1576.1594 1985.1466,1576.1594 Q1985.7277,1576.1594 1986.2609,1576.2824 Q1986.7941,1576.4055 1987.2589,1576.6516 L1987.2589,1578.8937 Q1986.7394,1578.4152 1986.2506,1578.1931 Q1985.7619,1577.9709 1985.2423,1577.9709 Q1984.1349,1577.9709 1983.5709,1578.8493 Q1983.007,1579.7277 1983.007,1581.4572 Q1983.007,1583.1799 1983.5709,1584.0583 Q1984.1349,1584.9367 1985.2423,1584.9367 Q1985.7619,1584.9367 1986.2506,1584.7146 Q1986.7394,1584.4924 1987.2589,1584.0139 Z " fill="#EAEAEA"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="118.1357" x="2004.3693" y="1586.074">GeneratorOptions</text><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="1927.17" x2="2169.7042" y1="1596.3" y2="1596.3"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1937.17" cy="1610.914" fill="none" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="219.5342" x="1945.17" y="1614.188">model_path : std::filesystem::path</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1937.17" cy="1629.142" fill="none" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="169.2461" x="1945.17" y="1632.416">use_mocked : bool = false</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1937.17" cy="1647.37" fill="none" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="179.5956" x="1945.17" y="1650.644">sampling : SamplingOptions</text><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="1927.17" x2="2169.7042" y1="1658.984" y2="1658.984"/></g><!--class PipelineOptions--><g class="entity" data-qualified-name="Domain Models.PipelineOptions" data-source-line="172" id="ent0019"><rect fill="#151515" height="82.456" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="247.9958" x="1924.44" y="1448.41"/><rect fill="#333333" height="30" rx="2.5" ry="2.5" style="stroke:#333333;stroke-width:0.5;" width="247.9958" x="1924.44" y="1448.41"/><rect fill="#333333" height="2.5" style="stroke:#333333;stroke-width:0.5;" width="247.9958" x="1924.44" y="1475.91"/><rect fill="none" height="82.456" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="247.9958" x="1924.44" y="1448.41"/><ellipse cx="1993.1979" cy="1463.41" fill="#3D3D3D" rx="10" ry="10" style="stroke:#E7E7E7;stroke-width:1;"/><path d="M1995.0876,1468.3661 Q1994.609,1468.6121 1994.0827,1468.7352 Q1993.5563,1468.8582 1992.9753,1468.8582 Q1990.9108,1468.8582 1989.8239,1467.4979 Q1988.737,1466.1375 1988.737,1463.5672 Q1988.737,1460.9901 1989.8239,1459.6297 Q1990.9108,1458.2694 1992.9753,1458.2694 Q1993.5563,1458.2694 1994.0895,1458.3924 Q1994.6227,1458.5155 1995.0876,1458.7616 L1995.0876,1461.0037 Q1994.568,1460.5252 1994.0793,1460.3031 Q1993.5905,1460.0809 1993.071,1460.0809 Q1991.9635,1460.0809 1991.3996,1460.9593 Q1990.8356,1461.8377 1990.8356,1463.5672 Q1990.8356,1465.2899 1991.3996,1466.1683 Q1991.9635,1467.0467 1993.071,1467.0467 Q1993.5905,1467.0467 1994.0793,1466.8246 Q1994.568,1466.6024 1995.0876,1466.1239 Z " fill="#EAEAEA"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="102.48" x="2012.1979" y="1468.184">PipelineOptions</text><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="1925.44" x2="2171.4358" y1="1478.41" y2="1478.41"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1935.44" cy="1493.024" fill="none" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="222.9958" x="1943.44" y="1496.298">output_path : std::filesystem::path</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1935.44" cy="1511.252" fill="none" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="198.1353" x="1943.44" y="1514.526">log_path : std::filesystem::path</text><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="1925.44" x2="2171.4358" y1="1522.866" y2="1522.866"/></g><!--class ApplicationOptions--><g class="entity" data-qualified-name="Domain Models.ApplicationOptions" data-source-line="177" id="ent0020"><rect fill="#151515" height="82.456" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="216.9194" x="1359.23" y="1575.41"/><rect fill="#333333" height="30" rx="2.5" ry="2.5" style="stroke:#333333;stroke-width:0.5;" width="216.9194" x="1359.23" y="1575.41"/><rect fill="#333333" height="2.5" style="stroke:#333333;stroke-width:0.5;" width="216.9194" x="1359.23" y="1602.91"/><rect fill="none" height="82.456" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="216.9194" x="1359.23" y="1575.41"/><ellipse cx="1400.7246" cy="1590.41" fill="#3D3D3D" rx="10" ry="10" style="stroke:#E7E7E7;stroke-width:1;"/><path d="M1402.6143,1595.3661 Q1402.1358,1595.6121 1401.6094,1595.7352 Q1401.083,1595.8582 1400.502,1595.8582 Q1398.4375,1595.8582 1397.3506,1594.4979 Q1396.2637,1593.1375 1396.2637,1590.5672 Q1396.2637,1587.9901 1397.3506,1586.6297 Q1398.4375,1585.2694 1400.502,1585.2694 Q1401.083,1585.2694 1401.6162,1585.3924 Q1402.1494,1585.5155 1402.6143,1585.7616 L1402.6143,1588.0037 Q1402.0948,1587.5252 1401.606,1587.3031 Q1401.1172,1587.0809 1400.5977,1587.0809 Q1399.4903,1587.0809 1398.9263,1587.9593 Q1398.3623,1588.8377 1398.3623,1590.5672 Q1398.3623,1592.2899 1398.9263,1593.1683 Q1399.4903,1594.0467 1400.5977,1594.0467 Q1401.1172,1594.0467 1401.606,1593.8246 Q1402.0948,1593.6024 1402.6143,1593.1239 Z " fill="#EAEAEA"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="125.9301" x="1419.7246" y="1595.184">ApplicationOptions</text><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="1360.23" x2="1575.1494" y1="1605.41" y2="1605.41"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1370.23" cy="1620.024" fill="none" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="191.9194" x="1378.23" y="1623.298">generator : GeneratorOptions</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1370.23" cy="1638.252" fill="none" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="164.0625" x="1378.23" y="1641.526">pipeline : PipelineOptions</text><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="1360.23" x2="1575.1494" y1="1649.866" y2="1649.866"/></g><!--class Completeness--><g class="entity" data-qualified-name="Domain Models.Completeness" data-source-line="186" id="ent0024"><rect fill="#151515" height="46" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="124.157" x="2542.73" y="1186.64"/><rect fill="#333333" height="30" rx="2.5" ry="2.5" style="stroke:#333333;stroke-width:0.5;" width="124.157" x="2542.73" y="1186.64"/><rect fill="#333333" height="2.5" style="stroke:#333333;stroke-width:0.5;" width="124.157" x="2542.73" y="1214.14"/><rect fill="none" height="46" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="124.157" x="2542.73" y="1186.64"/><ellipse cx="2556.73" cy="1201.64" fill="#3D3D3D" rx="10" ry="10" style="stroke:#E7E7E7;stroke-width:1;"/><path d="M2558.6196,1206.5961 Q2558.1411,1206.8421 2557.6148,1206.9652 Q2557.0884,1207.0882 2556.5073,1207.0882 Q2554.4429,1207.0882 2553.356,1205.7279 Q2552.2691,1204.3675 2552.2691,1201.7972 Q2552.2691,1199.2201 2553.356,1197.8597 Q2554.4429,1196.4994 2556.5073,1196.4994 Q2557.0884,1196.4994 2557.6216,1196.6224 Q2558.1548,1196.7455 2558.6196,1196.9916 L2558.6196,1199.2337 Q2558.1001,1198.7552 2557.6113,1198.5331 Q2557.1226,1198.3109 2556.603,1198.3109 Q2555.4956,1198.3109 2554.9317,1199.1893 Q2554.3677,1200.0677 2554.3677,1201.7972 Q2554.3677,1203.5199 2554.9317,1204.3983 Q2555.4956,1205.2767 2556.603,1205.2767 Q2557.1226,1205.2767 2557.6113,1205.0546 Q2558.1001,1204.8324 2558.6196,1204.3539 Z " fill="#EAEAEA"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="94.157" x="2569.73" y="1206.414">Completeness</text><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="2543.73" x2="2665.887" y1="1216.64" y2="1216.64"/><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="2543.73" x2="2665.887" y1="1224.64" y2="1224.64"/></g><!--class LogLevel--><g class="entity" data-qualified-name="Logging.LogLevel" data-source-line="195" id="ent0027"><rect fill="#151515" height="118.912" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="87.2636" x="2561.18" y="2979.18"/><rect fill="#333333" height="30" rx="2.5" ry="2.5" style="stroke:#333333;stroke-width:0.5;" width="87.2636" x="2561.18" y="2979.18"/><rect fill="#333333" height="2.5" style="stroke:#333333;stroke-width:0.5;" width="87.2636" x="2561.18" y="3006.68"/><rect fill="none" height="118.912" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="87.2636" x="2561.18" y="2979.18"/><ellipse cx="2575.18" cy="2994.18" fill="#545454" rx="10" ry="10" style="stroke:#E7E7E7;stroke-width:1;"/><path d="M2578.1859,2999.68 L2571.8284,2999.68 L2571.8284,2989.4739 L2578.1859,2989.4739 L2578.1859,2991.2513 L2573.845,2991.2513 L2573.845,2993.4525 L2577.7757,2993.4525 L2577.7757,2995.2298 L2573.845,2995.2298 L2573.845,2997.9027 L2578.1859,2997.9027 Z " fill="#EAEAEA"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="57.2636" x="2588.18" y="2998.954">LogLevel</text><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="2562.18" x2="2647.4436" y1="3009.18" y2="3009.18"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="42.1925" x="2567.18" y="3027.068">Debug</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="24.3636" x="2567.18" y="3045.296">Info</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="34.3736" x="2567.18" y="3063.524">Warn</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="31.7487" x="2567.18" y="3081.752">Error</text><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="2562.18" x2="2647.4436" y1="3090.092" y2="3090.092"/></g><!--class PipelinePhase--><g class="entity" data-qualified-name="Logging.PipelinePhase" data-source-line="202" id="ent0028"><rect fill="#151515" height="155.368" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="193.3283" x="2508.15" y="2788.96"/><rect fill="#333333" height="30" rx="2.5" ry="2.5" style="stroke:#333333;stroke-width:0.5;" width="193.3283" x="2508.15" y="2788.96"/><rect fill="#333333" height="2.5" style="stroke:#333333;stroke-width:0.5;" width="193.3283" x="2508.15" y="2816.46"/><rect fill="none" height="155.368" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="193.3283" x="2508.15" y="2788.96"/><ellipse cx="2556.0964" cy="2803.96" fill="#545454" rx="10" ry="10" style="stroke:#E7E7E7;stroke-width:1;"/><path d="M2559.1022,2809.46 L2552.7448,2809.46 L2552.7448,2799.2539 L2559.1022,2799.2539 L2559.1022,2801.0313 L2554.7614,2801.0313 L2554.7614,2803.2325 L2558.6921,2803.2325 L2558.6921,2805.0098 L2554.7614,2805.0098 L2554.7614,2807.6827 L2559.1022,2807.6827 Z " fill="#EAEAEA"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="89.4356" x="2575.0964" y="2808.734">PipelinePhase</text><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="2509.15" x2="2700.4783" y1="2818.96" y2="2818.96"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="48.6816" x="2514.15" y="2836.848">Startup</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="101.8642" x="2514.15" y="2855.076">UserGeneration</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="181.3283" x="2514.15" y="2873.304">BreweryAndBeerGeneration</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="125.0097" x="2514.15" y="2891.532">CheckinGeneration</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="113.1377" x="2514.15" y="2909.76">RatingGeneration</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="64.3931" x="2514.15" y="2927.988">Teardown</text><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="2509.15" x2="2700.4783" y1="2936.328" y2="2936.328"/></g><!--class LogEntry--><g class="entity" data-qualified-name="Logging.LogEntry" data-source-line="211" id="ent0029"><rect fill="#151515" height="173.596" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="353.9828" x="1871.44" y="2865.84"/><rect fill="#333333" height="30" rx="2.5" ry="2.5" style="stroke:#333333;stroke-width:0.5;" width="353.9828" x="1871.44" y="2865.84"/><rect fill="#333333" height="2.5" style="stroke:#333333;stroke-width:0.5;" width="353.9828" x="1871.44" y="2893.34"/><rect fill="none" height="173.596" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="353.9828" x="1871.44" y="2865.84"/><ellipse cx="2015.4933" cy="2880.84" fill="#3D3D3D" rx="10" ry="10" style="stroke:#E7E7E7;stroke-width:1;"/><path d="M2017.383,2885.7961 Q2016.9045,2886.0421 2016.3781,2886.1652 Q2015.8517,2886.2882 2015.2707,2886.2882 Q2013.2062,2886.2882 2012.1193,2884.9279 Q2011.0324,2883.5675 2011.0324,2880.9972 Q2011.0324,2878.4201 2012.1193,2877.0597 Q2013.2062,2875.6994 2015.2707,2875.6994 Q2015.8517,2875.6994 2016.3849,2875.8224 Q2016.9181,2875.9455 2017.383,2876.1916 L2017.383,2878.4337 Q2016.8634,2877.9552 2016.3747,2877.7331 Q2015.8859,2877.5109 2015.3664,2877.5109 Q2014.259,2877.5109 2013.695,2878.3893 Q2013.131,2879.2677 2013.131,2880.9972 Q2013.131,2882.7199 2013.695,2883.5983 Q2014.259,2884.4767 2015.3664,2884.4767 Q2015.8859,2884.4767 2016.3747,2884.2546 Q2016.8634,2884.0324 2017.383,2883.5539 Z " fill="#EAEAEA"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="57.8762" x="2034.4933" y="2885.614">LogEntry</text><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="1872.44" x2="2224.4228" y1="2895.84" y2="2895.84"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1882.44" cy="2910.454" fill="none" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="328.9828" x="1890.44" y="2913.728">timestamp : std::chrono::system_clock::time_point</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1882.44" cy="2928.682" fill="none" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="97.0657" x="1890.44" y="2931.956">level : LogLevel</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1882.44" cy="2946.91" fill="none" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="139.1286" x="1890.44" y="2950.184">phase : PipelinePhase</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1882.44" cy="2965.138" fill="none" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="131.9748" x="1890.44" y="2968.412">message : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1882.44" cy="2983.366" fill="none" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="194.0614" x="1890.44" y="2986.64">city : std::optional&lt;std::string&gt;</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1882.44" cy="3001.594" fill="none" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="228.9004" x="1890.44" y="3004.868">entity_id : std::optional&lt;std::string&gt;</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1882.44" cy="3019.822" fill="none" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="213.7805" x="1890.44" y="3023.096">worker : std::optional&lt;std::string&gt;</text><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="1872.44" x2="2224.4228" y1="3031.436" y2="3031.436"/></g><!--class Logger--><g class="entity" data-qualified-name="Logging.Logger" data-source-line="221" id="ent0030"><rect fill="#151515" height="98.912" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="216.7374" x="754.19" y="2893.18"/><rect fill="#333333" height="46.456" rx="2.5" ry="2.5" style="stroke:#333333;stroke-width:0.5;" width="216.7374" x="754.19" y="2893.18"/><rect fill="#333333" height="2.5" style="stroke:#333333;stroke-width:0.5;" width="216.7374" x="754.19" y="2937.136"/><rect fill="none" height="98.912" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="216.7374" x="754.19" y="2893.18"/><ellipse cx="824.9847" cy="2916.408" fill="#4E4E4E" rx="10" ry="10" style="stroke:#E7E7E7;stroke-width:1;"/><path d="M821.6605,2913.4793 L821.6605,2911.7019 L827.7376,2911.7019 L827.7376,2913.4793 L825.7073,2913.4793 L825.7073,2920.1307 L827.7376,2920.1307 L827.7376,2921.908 L821.6605,2921.908 L821.6605,2920.1307 L823.6907,2920.1307 L823.6907,2913.4793 Z " fill="#EAEAEA"/><text fill="#EAEAEA" font-family="DM Sans" font-size="14" font-style="italic" lengthAdjust="spacing" textLength="71.148" x="841.9847" y="2912.068">&#171;interface&#187;</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" font-style="italic" lengthAdjust="spacing" textLength="44.394" x="855.3617" y="2930.296">Logger</text><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="755.19" x2="969.9274" y1="2939.636" y2="2939.636"/><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="755.19" x2="969.9274" y1="2947.636" y2="2947.636"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="765.19" cy="2971.364" fill="#595959" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="170.6183" x="773.19" y="2965.524">Log(level, phase, message,</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="184.2894" x="780.638" y="2983.752">city, entity_id, worker) : void</text></g><!--class PipelineLogger--><g class="entity" data-qualified-name="Logging.PipelineLogger" data-source-line="225" id="ent0031"><rect fill="#151515" height="100.684" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="283.7412" x="1325.82" y="2997.3"/><rect fill="#333333" height="30" rx="2.5" ry="2.5" style="stroke:#333333;stroke-width:0.5;" width="283.7412" x="1325.82" y="2997.3"/><rect fill="#333333" height="2.5" style="stroke:#333333;stroke-width:0.5;" width="283.7412" x="1325.82" y="3024.8"/><rect fill="none" height="100.684" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="283.7412" x="1325.82" y="2997.3"/><ellipse cx="1416.1465" cy="3012.3" fill="#3D3D3D" rx="10" ry="10" style="stroke:#E7E7E7;stroke-width:1;"/><path d="M1418.0362,3017.2561 Q1417.5576,3017.5021 1417.0313,3017.6252 Q1416.5049,3017.7482 1415.9239,3017.7482 Q1413.8594,3017.7482 1412.7725,3016.3879 Q1411.6856,3015.0275 1411.6856,3012.4572 Q1411.6856,3009.8801 1412.7725,3008.5197 Q1413.8594,3007.1594 1415.9239,3007.1594 Q1416.5049,3007.1594 1417.0381,3007.2824 Q1417.5713,3007.4055 1418.0362,3007.6516 L1418.0362,3009.8937 Q1417.5166,3009.4152 1417.0279,3009.1931 Q1416.5391,3008.9709 1416.0196,3008.9709 Q1414.9121,3008.9709 1414.3482,3009.8493 Q1413.7842,3010.7277 1413.7842,3012.4572 Q1413.7842,3014.1799 1414.3482,3015.0583 Q1414.9121,3015.9367 1416.0196,3015.9367 Q1416.5391,3015.9367 1417.0279,3015.7146 Q1417.5166,3015.4924 1418.0362,3015.0139 Z " fill="#EAEAEA"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="95.0882" x="1435.1465" y="3017.074">PipelineLogger</text><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="1326.82" x2="1608.5612" y1="3027.3" y2="3027.3"/><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#A6A6A6;stroke-width:1;" width="6" x="1333.82" y="3038.914"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="258.7412" x="1344.82" y="3045.188">log_ch_ : BoundedChannel&lt;LogEntry&gt;&amp;</text><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="1326.82" x2="1608.5612" y1="3053.528" y2="3053.528"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="1336.82" cy="3077.256" fill="#595959" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="170.6183" x="1344.82" y="3071.416">Log(level, phase, message,</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="184.2894" x="1352.268" y="3089.644">city, entity_id, worker) : void</text></g><!--class LogWorker--><g class="entity" data-qualified-name="Logging.LogWorker" data-source-line="230" id="ent0032"><rect fill="#151515" height="137.14" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="329.9764" x="1302.7" y="2825.07"/><rect fill="#333333" height="30" rx="2.5" ry="2.5" style="stroke:#333333;stroke-width:0.5;" width="329.9764" x="1302.7" y="2825.07"/><rect fill="#333333" height="2.5" style="stroke:#333333;stroke-width:0.5;" width="329.9764" x="1302.7" y="2852.57"/><rect fill="none" height="137.14" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="329.9764" x="1302.7" y="2825.07"/><ellipse cx="1428.3346" cy="2840.07" fill="#3D3D3D" rx="10" ry="10" style="stroke:#E7E7E7;stroke-width:1;"/><path d="M1430.2243,2845.0261 Q1429.7458,2845.2721 1429.2194,2845.3952 Q1428.693,2845.5182 1428.112,2845.5182 Q1426.0475,2845.5182 1424.9606,2844.1579 Q1423.8737,2842.7975 1423.8737,2840.2272 Q1423.8737,2837.6501 1424.9606,2836.2897 Q1426.0475,2834.9294 1428.112,2834.9294 Q1428.693,2834.9294 1429.2262,2835.0524 Q1429.7594,2835.1755 1430.2243,2835.4216 L1430.2243,2837.6637 Q1429.7047,2837.1852 1429.216,2836.9631 Q1428.7272,2836.7409 1428.2077,2836.7409 Q1427.1002,2836.7409 1426.5363,2837.6193 Q1425.9723,2838.4977 1425.9723,2840.2272 Q1425.9723,2841.9499 1426.5363,2842.8283 Q1427.1002,2843.7067 1428.2077,2843.7067 Q1428.7272,2843.7067 1429.216,2843.4846 Q1429.7047,2843.2624 1430.2243,2842.7839 Z " fill="#EAEAEA"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="70.7072" x="1447.3346" y="2844.844">LogWorker</text><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="1303.7" x2="1631.6764" y1="2855.07" y2="2855.07"/><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#A6A6A6;stroke-width:1;" width="6" x="1310.7" y="2866.684"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="258.7412" x="1321.7" y="2872.958">log_ch_ : BoundedChannel&lt;LogEntry&gt;&amp;</text><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="1303.7" x2="1631.6764" y1="2881.298" y2="2881.298"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="1313.7" cy="2895.912" fill="#595959" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="72.8876" x="1321.7" y="2899.186">Run() : void</text><g data-visibility-modifier="PRIVATE_METHOD"><rect fill="#7F7F7F" height="6" style="stroke:#A6A6A6;stroke-width:1;" width="6" x="1310.7" y="2911.14"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="218.3549" x="1321.7" y="2917.414">FormatTimestamp(tp) : std::string</text><g data-visibility-modifier="PRIVATE_METHOD"><rect fill="#7F7F7F" height="6" style="stroke:#A6A6A6;stroke-width:1;" width="6" x="1310.7" y="2929.368"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="304.9764" x="1321.7" y="2935.642">ToSpdlogLevel(level) : spdlog::level::level_enum</text><g data-visibility-modifier="PRIVATE_METHOD"><rect fill="#7F7F7F" height="6" style="stroke:#A6A6A6;stroke-width:1;" width="6" x="1310.7" y="2947.596"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="178.0804" x="1321.7" y="2953.87">ToString(phase) : std::string</text></g><!--class ContextStrategy--><g class="entity" data-qualified-name="Domain Policy.ContextStrategy" data-source-line="251" id="ent0038"><rect fill="#151515" height="98.912" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="402.5143" x="1847.18" y="4042.18"/><rect fill="#333333" height="46.456" rx="2.5" ry="2.5" style="stroke:#333333;stroke-width:0.5;" width="402.5143" x="1847.18" y="4042.18"/><rect fill="#333333" height="2.5" style="stroke:#333333;stroke-width:0.5;" width="402.5143" x="1847.18" y="4086.136"/><rect fill="none" height="98.912" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="402.5143" x="1847.18" y="4042.18"/><ellipse cx="1990.6492" cy="4065.408" fill="#4E4E4E" rx="10" ry="10" style="stroke:#E7E7E7;stroke-width:1;"/><path d="M1987.325,4062.4793 L1987.325,4060.7019 L1993.4021,4060.7019 L1993.4021,4062.4793 L1991.3718,4062.4793 L1991.3718,4069.1307 L1993.4021,4069.1307 L1993.4021,4070.908 L1987.325,4070.908 L1987.325,4069.1307 L1989.3552,4069.1307 L1989.3552,4062.4793 Z " fill="#EAEAEA"/><text fill="#EAEAEA" font-family="DM Sans" font-size="14" font-style="italic" lengthAdjust="spacing" textLength="71.148" x="2027.8632" y="4061.068">&#171;interface&#187;</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" font-style="italic" lengthAdjust="spacing" textLength="107.576" x="2009.6492" y="4079.296">ContextStrategy</text><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="1848.18" x2="2248.6943" y1="4088.636" y2="4088.636"/><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="1848.18" x2="2248.6943" y1="4096.636" y2="4096.636"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="1858.18" cy="4111.25" fill="#595959" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="377.5143" x="1866.18" y="4114.524">QueriesFor(loc : const Location&amp;) : std::vector&lt;std::string&gt;</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="1858.18" cy="4129.478" fill="#595959" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="176.6942" x="1866.18" y="4132.752">MaxContextChars() : size_t</text></g><!--class BreweryContextStrategy--><g class="entity" data-qualified-name="Domain Policy.BreweryContextStrategy" data-source-line="256" id="ent0039"><rect fill="#151515" height="82.456" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="402.5143" x="2403.55" y="3941.41"/><rect fill="#333333" height="30" rx="2.5" ry="2.5" style="stroke:#333333;stroke-width:0.5;" width="402.5143" x="2403.55" y="3941.41"/><rect fill="#333333" height="2.5" style="stroke:#333333;stroke-width:0.5;" width="402.5143" x="2403.55" y="3968.91"/><rect fill="none" height="82.456" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="402.5143" x="2403.55" y="3941.41"/><ellipse cx="2520.3805" cy="3956.41" fill="#3D3D3D" rx="10" ry="10" style="stroke:#E7E7E7;stroke-width:1;"/><path d="M2522.2701,3961.3661 Q2521.7916,3961.6121 2521.2653,3961.7352 Q2520.7389,3961.8582 2520.1578,3961.8582 Q2518.0934,3961.8582 2517.0065,3960.4979 Q2515.9196,3959.1375 2515.9196,3956.5672 Q2515.9196,3953.9901 2517.0065,3952.6297 Q2518.0934,3951.2694 2520.1578,3951.2694 Q2520.7389,3951.2694 2521.2721,3951.3924 Q2521.8053,3951.5155 2522.2701,3951.7616 L2522.2701,3954.0037 Q2521.7506,3953.5252 2521.2618,3953.3031 Q2520.7731,3953.0809 2520.2535,3953.0809 Q2519.1461,3953.0809 2518.5822,3953.9593 Q2518.0182,3954.8377 2518.0182,3956.5672 Q2518.0182,3958.2899 2518.5822,3959.1683 Q2519.1461,3960.0467 2520.2535,3960.0467 Q2520.7731,3960.0467 2521.2618,3959.8246 Q2521.7506,3959.6024 2522.2701,3959.1239 Z " fill="#EAEAEA"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="160.8534" x="2539.3805" y="3961.184">BreweryContextStrategy</text><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="2404.55" x2="2805.0643" y1="3971.41" y2="3971.41"/><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="2404.55" x2="2805.0643" y1="3979.41" y2="3979.41"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="2414.55" cy="3994.024" fill="#595959" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="377.5143" x="2422.55" y="3997.298">QueriesFor(loc : const Location&amp;) : std::vector&lt;std::string&gt;</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="2414.55" cy="4012.252" fill="#595959" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="176.6942" x="2422.55" y="4015.526">MaxContextChars() : size_t</text></g><!--class BeerContextStrategy--><g class="entity" data-qualified-name="Domain Policy.BeerContextStrategy" data-source-line="261" id="ent0040"><rect fill="#151515" height="82.456" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="402.5143" x="2403.55" y="4058.41"/><rect fill="#333333" height="30" rx="2.5" ry="2.5" style="stroke:#333333;stroke-width:0.5;" width="402.5143" x="2403.55" y="4058.41"/><rect fill="#333333" height="2.5" style="stroke:#333333;stroke-width:0.5;" width="402.5143" x="2403.55" y="4085.91"/><rect fill="none" height="82.456" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="402.5143" x="2403.55" y="4058.41"/><ellipse cx="2532.2" cy="4073.41" fill="#3D3D3D" rx="10" ry="10" style="stroke:#E7E7E7;stroke-width:1;"/><path d="M2534.0897,4078.3661 Q2533.6112,4078.6121 2533.0848,4078.7352 Q2532.5584,4078.8582 2531.9774,4078.8582 Q2529.9129,4078.8582 2528.826,4077.4979 Q2527.7391,4076.1375 2527.7391,4073.5672 Q2527.7391,4070.9901 2528.826,4069.6297 Q2529.9129,4068.2694 2531.9774,4068.2694 Q2532.5584,4068.2694 2533.0916,4068.3924 Q2533.6248,4068.5155 2534.0897,4068.7616 L2534.0897,4071.0037 Q2533.5702,4070.5252 2533.0814,4070.3031 Q2532.5926,4070.0809 2532.0731,4070.0809 Q2530.9657,4070.0809 2530.4017,4070.9593 Q2529.8377,4071.8377 2529.8377,4073.5672 Q2529.8377,4075.2899 2530.4017,4076.1683 Q2530.9657,4077.0467 2532.0731,4077.0467 Q2532.5926,4077.0467 2533.0814,4076.8246 Q2533.5702,4076.6024 2534.0897,4076.1239 Z " fill="#EAEAEA"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="137.2143" x="2551.2" y="4078.184">BeerContextStrategy</text><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="2404.55" x2="2805.0643" y1="4088.41" y2="4088.41"/><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="2404.55" x2="2805.0643" y1="4096.41" y2="4096.41"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="2414.55" cy="4111.024" fill="#595959" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="377.5143" x="2422.55" y="4114.298">QueriesFor(loc : const Location&amp;) : std::vector&lt;std::string&gt;</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="2414.55" cy="4129.252" fill="#595959" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="176.6942" x="2422.55" y="4132.526">MaxContextChars() : size_t</text></g><!--class SamplingStrategy--><g class="entity" data-qualified-name="Domain Policy.SamplingStrategy" data-source-line="266" id="ent0041"><rect fill="#151515" height="80.684" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="496.3739" x="1800.25" y="3819.3"/><rect fill="#333333" height="46.456" rx="2.5" ry="2.5" style="stroke:#333333;stroke-width:0.5;" width="496.3739" x="1800.25" y="3819.3"/><rect fill="#333333" height="2.5" style="stroke:#333333;stroke-width:0.5;" width="496.3739" x="1800.25" y="3863.256"/><rect fill="none" height="80.684" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="496.3739" x="1800.25" y="3819.3"/><ellipse cx="1987.107" cy="3842.528" fill="#4E4E4E" rx="10" ry="10" style="stroke:#E7E7E7;stroke-width:1;"/><path d="M1983.7827,3839.5993 L1983.7827,3837.8219 L1989.8599,3837.8219 L1989.8599,3839.5993 L1987.8296,3839.5993 L1987.8296,3846.2507 L1989.8599,3846.2507 L1989.8599,3848.028 L1983.7827,3848.028 L1983.7827,3846.2507 L1985.813,3846.2507 L1985.813,3839.5993 Z " fill="#EAEAEA"/><text fill="#EAEAEA" font-family="DM Sans" font-size="14" font-style="italic" lengthAdjust="spacing" textLength="71.148" x="2027.8629" y="3838.188">&#171;interface&#187;</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" font-style="italic" lengthAdjust="spacing" textLength="114.66" x="2006.107" y="3856.416">SamplingStrategy</text><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="1801.25" x2="2295.6239" y1="3865.756" y2="3865.756"/><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="1801.25" x2="2295.6239" y1="3873.756" y2="3873.756"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="1811.25" cy="3888.37" fill="#595959" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="471.3739" x="1819.25" y="3891.644">Sample(locations : const std::vector&lt;Location&gt;&amp;) : std::vector&lt;Location&gt;</text></g><!--class UniformSamplingStrategy--><g class="entity" data-qualified-name="Domain Policy.UniformSamplingStrategy" data-source-line="270" id="ent0042"><rect fill="#151515" height="82.456" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="496.3739" x="2356.62" y="3824.41"/><rect fill="#333333" height="30" rx="2.5" ry="2.5" style="stroke:#333333;stroke-width:0.5;" width="496.3739" x="2356.62" y="3824.41"/><rect fill="#333333" height="2.5" style="stroke:#333333;stroke-width:0.5;" width="496.3739" x="2356.62" y="3851.91"/><rect fill="none" height="82.456" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="496.3739" x="2356.62" y="3824.41"/><ellipse cx="2517.8025" cy="3839.41" fill="#3D3D3D" rx="10" ry="10" style="stroke:#E7E7E7;stroke-width:1;"/><path d="M2519.6922,3844.3661 Q2519.2137,3844.6121 2518.6873,3844.7352 Q2518.1609,3844.8582 2517.5799,3844.8582 Q2515.5154,3844.8582 2514.4285,3843.4979 Q2513.3416,3842.1375 2513.3416,3839.5672 Q2513.3416,3836.9901 2514.4285,3835.6297 Q2515.5154,3834.2694 2517.5799,3834.2694 Q2518.1609,3834.2694 2518.6942,3834.3924 Q2519.2274,3834.5155 2519.6922,3834.7616 L2519.6922,3837.0037 Q2519.1727,3836.5252 2518.6839,3836.3031 Q2518.1951,3836.0809 2517.6756,3836.0809 Q2516.5682,3836.0809 2516.0042,3836.9593 Q2515.4402,3837.8377 2515.4402,3839.5672 Q2515.4402,3841.2899 2516.0042,3842.1683 Q2516.5682,3843.0467 2517.6756,3843.0467 Q2518.1951,3843.0467 2518.6839,3842.8246 Q2519.1727,3842.6024 2519.6922,3842.1239 Z " fill="#EAEAEA"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="166.0088" x="2536.8025" y="3844.184">UniformSamplingStrategy</text><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="2357.62" x2="2851.9939" y1="3854.41" y2="3854.41"/><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#A6A6A6;stroke-width:1;" width="6" x="2364.62" y="3866.024"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="139.972" x="2375.62" y="3872.298">sample_size_ : size_t</text><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="2357.62" x2="2851.9939" y1="3880.638" y2="3880.638"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="2367.62" cy="3895.252" fill="#595959" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="471.3739" x="2375.62" y="3898.526">Sample(locations : const std::vector&lt;Location&gt;&amp;) : std::vector&lt;Location&gt;</text></g><!--class BeerSelectionStrategy--><g class="entity" data-qualified-name="Domain Policy.BeerSelectionStrategy" data-source-line="275" id="ent0043"><rect fill="#151515" height="98.912" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="427.6163" x="1834.63" y="3471.18"/><rect fill="#333333" height="46.456" rx="2.5" ry="2.5" style="stroke:#333333;stroke-width:0.5;" width="427.6163" x="1834.63" y="3471.18"/><rect fill="#333333" height="2.5" style="stroke:#333333;stroke-width:0.5;" width="427.6163" x="1834.63" y="3515.136"/><rect fill="none" height="98.912" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="427.6163" x="1834.63" y="3471.18"/><ellipse cx="1971.7011" cy="3494.408" fill="#4E4E4E" rx="10" ry="10" style="stroke:#E7E7E7;stroke-width:1;"/><path d="M1968.3769,3491.4793 L1968.3769,3489.7019 L1974.4541,3489.7019 L1974.4541,3491.4793 L1972.4238,3491.4793 L1972.4238,3498.1307 L1974.4541,3498.1307 L1974.4541,3499.908 L1968.3769,3499.908 L1968.3769,3498.1307 L1970.4072,3498.1307 L1970.4072,3491.4793 Z " fill="#EAEAEA"/><text fill="#EAEAEA" font-family="DM Sans" font-size="14" font-style="italic" lengthAdjust="spacing" textLength="71.148" x="2027.8641" y="3490.068">&#171;interface&#187;</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" font-style="italic" lengthAdjust="spacing" textLength="145.474" x="1990.7011" y="3508.296">BeerSelectionStrategy</text><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="1835.63" x2="2261.2463" y1="3517.636" y2="3517.636"/><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="1835.63" x2="2261.2463" y1="3525.636" y2="3525.636"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="1845.63" cy="3549.364" fill="#595959" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="325.2627" x="1853.63" y="3543.524">SelectStyles(brewery : const GeneratedBrewery&amp;,</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="395.1683" x="1861.078" y="3561.752">palette : std::span&lt;const BeerStyle&gt;) : std::vector&lt;BeerStyle&gt;</text></g><!--class RandomBeerSelectionStrategy--><g class="entity" data-qualified-name="Domain Policy.RandomBeerSelectionStrategy" data-source-line="279" id="ent0044"><rect fill="#151515" height="137.14" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="427.6163" x="2391" y="3462.07"/><rect fill="#333333" height="30" rx="2.5" ry="2.5" style="stroke:#333333;stroke-width:0.5;" width="427.6163" x="2391" y="3462.07"/><rect fill="#333333" height="2.5" style="stroke:#333333;stroke-width:0.5;" width="427.6163" x="2391" y="3489.57"/><rect fill="none" height="137.14" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="427.6163" x="2391" y="3462.07"/><ellipse cx="2501.3975" cy="3477.07" fill="#3D3D3D" rx="10" ry="10" style="stroke:#E7E7E7;stroke-width:1;"/><path d="M2503.2872,3482.0261 Q2502.8086,3482.2721 2502.2823,3482.3952 Q2501.7559,3482.5182 2501.1749,3482.5182 Q2499.1104,3482.5182 2498.0235,3481.1579 Q2496.9366,3479.7975 2496.9366,3477.2272 Q2496.9366,3474.6501 2498.0235,3473.2897 Q2499.1104,3471.9294 2501.1749,3471.9294 Q2501.7559,3471.9294 2502.2891,3472.0524 Q2502.8223,3472.1755 2503.2872,3472.4216 L2503.2872,3474.6637 Q2502.7676,3474.1852 2502.2789,3473.9631 Q2501.7901,3473.7409 2501.2706,3473.7409 Q2500.1631,3473.7409 2499.5992,3474.6193 Q2499.0352,3475.4977 2499.0352,3477.2272 Q2499.0352,3478.9499 2499.5992,3479.8283 Q2500.1631,3480.7067 2501.2706,3480.7067 Q2501.7901,3480.7067 2502.2789,3480.4846 Q2502.7676,3480.2624 2503.2872,3479.7839 Z " fill="#EAEAEA"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="198.8213" x="2520.3975" y="3481.844">RandomBeerSelectionStrategy</text><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="2392" x2="2817.6163" y1="3492.07" y2="3492.07"/><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#A6A6A6;stroke-width:1;" width="6" x="2399" y="3503.684"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="123.1442" x="2410" y="3509.958">rng_ : std::mt19937</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#A6A6A6;stroke-width:1;" width="6" x="2399" y="3521.912"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="128.9889" x="2410" y="3528.186">min_beers_ : size_t</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#A6A6A6;stroke-width:1;" width="6" x="2399" y="3540.14"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="132.1739" x="2410" y="3546.414">max_beers_ : size_t</text><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="2392" x2="2817.6163" y1="3554.754" y2="3554.754"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="2402" cy="3578.482" fill="#595959" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="325.2627" x="2410" y="3572.642">SelectStyles(brewery : const GeneratedBrewery&amp;,</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="395.1683" x="2417.448" y="3590.87">palette : std::span&lt;const BeerStyle&gt;) : std::vector&lt;BeerStyle&gt;</text></g><!--class CheckinDistributionStrategy--><g class="entity" data-qualified-name="Domain Policy.CheckinDistributionStrategy" data-source-line="286" id="ent0045"><rect fill="#151515" height="153.596" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="458.7489" x="1819.06" y="3624.84"/><rect fill="#333333" height="46.456" rx="2.5" ry="2.5" style="stroke:#333333;stroke-width:0.5;" width="458.7489" x="1819.06" y="3624.84"/><rect fill="#333333" height="2.5" style="stroke:#333333;stroke-width:0.5;" width="458.7489" x="1819.06" y="3668.796"/><rect fill="none" height="153.596" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="458.7489" x="1819.06" y="3624.84"/><ellipse cx="1952.3634" cy="3648.068" fill="#4E4E4E" rx="10" ry="10" style="stroke:#E7E7E7;stroke-width:1;"/><path d="M1949.0392,3645.1393 L1949.0392,3643.3619 L1955.1164,3643.3619 L1955.1164,3645.1393 L1953.0861,3645.1393 L1953.0861,3651.7907 L1955.1164,3651.7907 L1955.1164,3653.568 L1949.0392,3653.568 L1949.0392,3651.7907 L1951.0695,3651.7907 L1951.0695,3645.1393 Z " fill="#EAEAEA"/><text fill="#EAEAEA" font-family="DM Sans" font-size="14" font-style="italic" lengthAdjust="spacing" textLength="71.148" x="2027.8604" y="3643.728">&#171;interface&#187;</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" font-style="italic" lengthAdjust="spacing" textLength="184.142" x="1971.3634" y="3661.956">CheckinDistributionStrategy</text><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="1820.06" x2="2276.8089" y1="3671.296" y2="3671.296"/><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="1820.06" x2="2276.8089" y1="3679.296" y2="3679.296"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="1830.06" cy="3693.91" fill="#595959" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="433.7489" x="1838.06" y="3697.184">AssignActivityWeights(users : std::vector&lt;GeneratedUser&gt;&amp;) : void</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="1830.06" cy="3721.252" fill="#595959" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="305.8166" x="1838.06" y="3715.412">CheckinsForUser(user : const GeneratedUser&amp;,</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="205.3172" x="1845.508" y="3733.64">brewery_count : size_t) : size_t</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="1830.06" cy="3757.708" fill="#595959" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="289.9755" x="1838.06" y="3751.868">TimestampFor(user : const GeneratedUser&amp;,</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="164.1328" x="1845.508" y="3770.096">index : size_t) : std::string</text></g><!--class JCurveCheckinStrategy--><g class="entity" data-qualified-name="Domain Policy.JCurveCheckinStrategy" data-source-line="292" id="ent0046"><rect fill="#151515" height="155.368" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="458.7489" x="2375.43" y="3633.96"/><rect fill="#333333" height="30" rx="2.5" ry="2.5" style="stroke:#333333;stroke-width:0.5;" width="458.7489" x="2375.43" y="3633.96"/><rect fill="#333333" height="2.5" style="stroke:#333333;stroke-width:0.5;" width="458.7489" x="2375.43" y="3661.46"/><rect fill="none" height="155.368" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="458.7489" x="2375.43" y="3633.96"/><ellipse cx="2524.0493" cy="3648.96" fill="#3D3D3D" rx="10" ry="10" style="stroke:#E7E7E7;stroke-width:1;"/><path d="M2525.939,3653.9161 Q2525.4604,3654.1621 2524.9341,3654.2852 Q2524.4077,3654.4082 2523.8267,3654.4082 Q2521.7622,3654.4082 2520.6753,3653.0479 Q2519.5884,3651.6875 2519.5884,3649.1172 Q2519.5884,3646.5401 2520.6753,3645.1797 Q2521.7622,3643.8194 2523.8267,3643.8194 Q2524.4077,3643.8194 2524.9409,3643.9424 Q2525.4741,3644.0655 2525.939,3644.3116 L2525.939,3646.5537 Q2525.4194,3646.0752 2524.9307,3645.8531 Q2524.4419,3645.6309 2523.9224,3645.6309 Q2522.8149,3645.6309 2522.251,3646.5093 Q2521.687,3647.3877 2521.687,3649.1172 Q2521.687,3650.8399 2522.251,3651.7183 Q2522.8149,3652.5967 2523.9224,3652.5967 Q2524.4419,3652.5967 2524.9307,3652.3746 Q2525.4194,3652.1524 2525.939,3651.6739 Z " fill="#EAEAEA"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="153.5103" x="2543.0493" y="3653.734">JCurveCheckinStrategy</text><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="2376.43" x2="2833.1789" y1="3663.96" y2="3663.96"/><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#A6A6A6;stroke-width:1;" width="6" x="2383.43" y="3675.574"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="123.1442" x="2394.43" y="3681.848">rng_ : std::mt19937</text><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="2376.43" x2="2833.1789" y1="3690.188" y2="3690.188"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="2386.43" cy="3704.802" fill="#595959" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="433.7489" x="2394.43" y="3708.076">AssignActivityWeights(users : std::vector&lt;GeneratedUser&gt;&amp;) : void</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="2386.43" cy="3732.144" fill="#595959" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="305.8166" x="2394.43" y="3726.304">CheckinsForUser(user : const GeneratedUser&amp;,</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="205.3172" x="2401.878" y="3744.532">brewery_count : size_t) : size_t</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="2386.43" cy="3768.6" fill="#595959" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="289.9755" x="2394.43" y="3762.76">TimestampFor(user : const GeneratedUser&amp;,</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="164.1328" x="2401.878" y="3780.988">index : size_t) : std::string</text></g><!--class DataPreloader--><g class="entity" data-qualified-name="Orchestration.DataPreloader" data-source-line="307" id="ent0048"><rect fill="#151515" height="135.368" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="545.1253" x="590" y="2434.96"/><rect fill="#333333" height="46.456" rx="2.5" ry="2.5" style="stroke:#333333;stroke-width:0.5;" width="545.1253" x="590" y="2434.96"/><rect fill="#333333" height="2.5" style="stroke:#333333;stroke-width:0.5;" width="545.1253" x="590" y="2478.916"/><rect fill="none" height="135.368" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="545.1253" x="590" y="2434.96"/><ellipse cx="812.0687" cy="2458.188" fill="#4E4E4E" rx="10" ry="10" style="stroke:#E7E7E7;stroke-width:1;"/><path d="M808.7444,2455.2593 L808.7444,2453.4819 L814.8216,2453.4819 L814.8216,2455.2593 L812.7913,2455.2593 L812.7913,2461.9107 L814.8216,2461.9107 L814.8216,2463.688 L808.7444,2463.688 L808.7444,2461.9107 L810.7747,2461.9107 L810.7747,2455.2593 Z " fill="#EAEAEA"/><text fill="#EAEAEA" font-family="DM Sans" font-size="14" font-style="italic" lengthAdjust="spacing" textLength="71.148" x="841.9887" y="2453.848">&#171;interface&#187;</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" font-style="italic" lengthAdjust="spacing" textLength="92.988" x="831.0687" y="2472.076">DataPreloader</text><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="591" x2="1134.1253" y1="2481.416" y2="2481.416"/><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="591" x2="1134.1253" y1="2489.416" y2="2489.416"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="601" cy="2504.03" fill="#595959" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="497.092" x="609" y="2507.304">LoadLocations(filepath : const std::filesystem::path&amp;) : std::vector&lt;Location&gt;</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="601" cy="2522.258" fill="#595959" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="508.1451" x="609" y="2525.532">LoadBeerStyles(filepath : const std::filesystem::path&amp;) : std::vector&lt;BeerStyle&gt;</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="601" cy="2540.486" fill="#595959" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="488.6291" x="609" y="2543.76">LoadPersonas(filepath : const std::filesystem::path&amp;) : std::vector&lt;Persona&gt;</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="601" cy="2558.714" fill="#595959" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="520.1253" x="609" y="2561.988">LoadNamesByCountry(filepath : const std::filesystem::path&amp;) : NamesByCountry</text></g><!--class BiergartenPipelineOrchestrator--><g class="entity" data-qualified-name="Orchestration.BiergartenPipelineOrchestrator" data-source-line="314" id="ent0049"><rect fill="#151515" height="418.56" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="506.9579" x="23.04" y="2293.36"/><rect fill="#333333" height="30" rx="2.5" ry="2.5" style="stroke:#333333;stroke-width:0.5;" width="506.9579" x="23.04" y="2293.36"/><rect fill="#333333" height="2.5" style="stroke:#333333;stroke-width:0.5;" width="506.9579" x="23.04" y="2320.86"/><rect fill="none" height="418.56" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="506.9579" x="23.04" y="2293.36"/><ellipse cx="171.5368" cy="2308.36" fill="#3D3D3D" rx="10" ry="10" style="stroke:#E7E7E7;stroke-width:1;"/><path d="M173.4264,2313.3161 Q172.9479,2313.5621 172.4215,2313.6852 Q171.8952,2313.8082 171.3141,2313.8082 Q169.2497,2313.8082 168.1627,2312.4479 Q167.0758,2311.0875 167.0758,2308.5172 Q167.0758,2305.9401 168.1627,2304.5797 Q169.2497,2303.2194 171.3141,2303.2194 Q171.8952,2303.2194 172.4284,2303.3424 Q172.9616,2303.4655 173.4264,2303.7116 L173.4264,2305.9537 Q172.9069,2305.4752 172.4181,2305.2531 Q171.9293,2305.0309 171.4098,2305.0309 Q170.3024,2305.0309 169.7384,2305.9093 Q169.1745,2306.7877 169.1745,2308.5172 Q169.1745,2310.2399 169.7384,2311.1183 Q170.3024,2311.9967 171.4098,2311.9967 Q171.9293,2311.9967 172.4181,2311.7746 Q172.9069,2311.5524 173.4264,2311.0739 Z " fill="#EAEAEA"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="201.9644" x="190.5368" y="2313.134">BiergartenPipelineOrchestrator</text><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="24.04" x2="528.9979" y1="2323.36" y2="2323.36"/><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#A6A6A6;stroke-width:1;" width="6" x="31.04" y="2334.974"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="290.1293" x="42.04" y="2341.248">preloader_ : std::unique_ptr&lt;DataPreloader&gt;</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#A6A6A6;stroke-width:1;" width="6" x="31.04" y="2353.202"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="387.7025" x="42.04" y="2359.476">enrichment_service_ : std::unique_ptr&lt;EnrichmentService&gt;</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#A6A6A6;stroke-width:1;" width="6" x="31.04" y="2371.43"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="294.8859" x="42.04" y="2377.704">generator_ : std::unique_ptr&lt;DataGenerator&gt;</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#A6A6A6;stroke-width:1;" width="6" x="31.04" y="2389.658"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="219.3033" x="42.04" y="2395.932">logger_ : std::unique_ptr&lt;Logger&gt;</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#A6A6A6;stroke-width:1;" width="6" x="31.04" y="2407.886"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="281.0119" x="42.04" y="2414.16">exporter_ : std::unique_ptr&lt;ExportService&gt;</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#A6A6A6;stroke-width:1;" width="6" x="31.04" y="2426.114"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="418.9296" x="42.04" y="2432.388">brewery_context_strategy_ : std::unique_ptr&lt;ContextStrategy&gt;</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#A6A6A6;stroke-width:1;" width="6" x="31.04" y="2444.342"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="371.235" x="42.04" y="2450.616">sampling_strategy_ : std::unique_ptr&lt;SamplingStrategy&gt;</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#A6A6A6;stroke-width:1;" width="6" x="31.04" y="2462.57"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="441.9316" x="42.04" y="2468.844">beer_selection_strategy_ : std::unique_ptr&lt;BeerSelectionStrategy&gt;</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#A6A6A6;stroke-width:1;" width="6" x="31.04" y="2480.798"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="432.6636" x="42.04" y="2487.072">checkin_strategy_ : std::unique_ptr&lt;CheckinDistributionStrategy&gt;</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#A6A6A6;stroke-width:1;" width="6" x="31.04" y="2499.026"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="292.2783" x="42.04" y="2505.3">beer_style_palette_ : std::vector&lt;BeerStyle&gt;</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#A6A6A6;stroke-width:1;" width="6" x="31.04" y="2517.254"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="194.7261" x="42.04" y="2523.528">options_ : ApplicationOptions</text><line style="stroke:#AFAFAF;stroke-width:1;" x1="24.04" x2="528.9979" y1="2531.868" y2="2531.868"/><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#A6A6A6;stroke-width:1;" width="6" x="31.04" y="2543.482"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="269.0068" x="42.04" y="2549.756">user_pool_ : std::vector&lt;GeneratedUser&gt;</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#A6A6A6;stroke-width:1;" width="6" x="31.04" y="2561.71"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="318.1435" x="42.04" y="2567.984">brewery_pool_ : std::vector&lt;GeneratedBrewery&gt;</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#A6A6A6;stroke-width:1;" width="6" x="31.04" y="2579.938"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="270.8652" x="42.04" y="2586.212">beer_pool_ : std::vector&lt;GeneratedBeer&gt;</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#A6A6A6;stroke-width:1;" width="6" x="31.04" y="2598.166"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="314.4123" x="42.04" y="2604.44">checkin_pool_ : std::vector&lt;GeneratedCheckin&gt;</text><line style="stroke:#AFAFAF;stroke-width:1;" x1="24.04" x2="528.9979" y1="2612.78" y2="2612.78"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="34.04" cy="2627.394" fill="#595959" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="73.5806" x="42.04" y="2630.668">Run() : bool</text><g data-visibility-modifier="PRIVATE_METHOD"><rect fill="#7F7F7F" height="6" style="stroke:#A6A6A6;stroke-width:1;" width="6" x="31.04" y="2642.622"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="402.4938" x="42.04" y="2648.896">RunUserPhase(locations : const std::vector&lt;Location&gt;&amp;) : void</text><g data-visibility-modifier="PRIVATE_METHOD"><rect fill="#7F7F7F" height="6" style="stroke:#A6A6A6;stroke-width:1;" width="6" x="31.04" y="2660.85"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="481.9579" x="42.04" y="2667.124">RunBreweryAndBeerPhase(locations : const std::vector&lt;Location&gt;&amp;) : void</text><g data-visibility-modifier="PRIVATE_METHOD"><rect fill="#7F7F7F" height="6" style="stroke:#A6A6A6;stroke-width:1;" width="6" x="31.04" y="2679.078"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="164.1467" x="42.04" y="2685.352">RunCheckinPhase() : void</text><g data-visibility-modifier="PRIVATE_METHOD"><rect fill="#7F7F7F" height="6" style="stroke:#A6A6A6;stroke-width:1;" width="6" x="31.04" y="2697.306"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="152.2748" x="42.04" y="2703.58">RunRatingPhase() : void</text></g><!--class JsonLoader--><g class="entity" data-qualified-name="Infrastructure. Preloading.JsonLoader" data-source-line="346" id="ent0051"><rect fill="#151515" height="118.912" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="545.1253" x="1195.12" y="2443.18"/><rect fill="#333333" height="30" rx="2.5" ry="2.5" style="stroke:#333333;stroke-width:0.5;" width="545.1253" x="1195.12" y="2443.18"/><rect fill="#333333" height="2.5" style="stroke:#333333;stroke-width:0.5;" width="545.1253" x="1195.12" y="2470.68"/><rect fill="none" height="118.912" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="545.1253" x="1195.12" y="2443.18"/><ellipse cx="1425.8896" cy="2458.18" fill="#3D3D3D" rx="10" ry="10" style="stroke:#E7E7E7;stroke-width:1;"/><path d="M1427.7792,2463.1361 Q1427.3007,2463.3821 1426.7744,2463.5052 Q1426.248,2463.6282 1425.6669,2463.6282 Q1423.6025,2463.6282 1422.5156,2462.2679 Q1421.4287,2460.9075 1421.4287,2458.3372 Q1421.4287,2455.7601 1422.5156,2454.3997 Q1423.6025,2453.0394 1425.6669,2453.0394 Q1426.248,2453.0394 1426.7812,2453.1624 Q1427.3144,2453.2855 1427.7792,2453.5316 L1427.7792,2455.7737 Q1427.2597,2455.2952 1426.7709,2455.0731 Q1426.2822,2454.8509 1425.7626,2454.8509 Q1424.6552,2454.8509 1424.0913,2455.7293 Q1423.5273,2456.6077 1423.5273,2458.3372 Q1423.5273,2460.0599 1424.0913,2460.9383 Q1424.6552,2461.8167 1425.7626,2461.8167 Q1426.2822,2461.8167 1426.7709,2461.5946 Q1427.2597,2461.3724 1427.7792,2460.8939 Z " fill="#EAEAEA"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="75.5861" x="1444.8896" y="2462.954">JsonLoader</text><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="1196.12" x2="1739.2453" y1="2473.18" y2="2473.18"/><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="1196.12" x2="1739.2453" y1="2481.18" y2="2481.18"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="1206.12" cy="2495.794" fill="#595959" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="497.092" x="1214.12" y="2499.068">LoadLocations(filepath : const std::filesystem::path&amp;) : std::vector&lt;Location&gt;</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="1206.12" cy="2514.022" fill="#595959" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="508.1451" x="1214.12" y="2517.296">LoadBeerStyles(filepath : const std::filesystem::path&amp;) : std::vector&lt;BeerStyle&gt;</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="1206.12" cy="2532.25" fill="#595959" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="488.6291" x="1214.12" y="2535.524">LoadPersonas(filepath : const std::filesystem::path&amp;) : std::vector&lt;Persona&gt;</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="1206.12" cy="2550.478" fill="#595959" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="520.1253" x="1214.12" y="2553.752">LoadNamesByCountry(filepath : const std::filesystem::path&amp;) : NamesByCountry</text></g><!--class EnrichmentService--><g class="entity" data-qualified-name="Infrastructure. Enrichment.EnrichmentService" data-source-line="361" id="ent0053"><rect fill="#151515" height="98.912" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="379.8097" x="672.66" y="4227.18"/><rect fill="#333333" height="46.456" rx="2.5" ry="2.5" style="stroke:#333333;stroke-width:0.5;" width="379.8097" x="672.66" y="4227.18"/><rect fill="#333333" height="2.5" style="stroke:#333333;stroke-width:0.5;" width="379.8097" x="672.66" y="4271.136"/><rect fill="none" height="98.912" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="379.8097" x="672.66" y="4227.18"/><ellipse cx="797.3639" cy="4250.408" fill="#4E4E4E" rx="10" ry="10" style="stroke:#E7E7E7;stroke-width:1;"/><path d="M794.0396,4247.4793 L794.0396,4245.7019 L800.1168,4245.7019 L800.1168,4247.4793 L798.0865,4247.4793 L798.0865,4254.1307 L800.1168,4254.1307 L800.1168,4255.908 L794.0396,4255.908 L794.0396,4254.1307 L796.0699,4254.1307 L796.0699,4247.4793 Z " fill="#EAEAEA"/><text fill="#EAEAEA" font-family="DM Sans" font-size="14" font-style="italic" lengthAdjust="spacing" textLength="71.148" x="841.9909" y="4246.068">&#171;interface&#187;</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" font-style="italic" lengthAdjust="spacing" textLength="122.402" x="816.3639" y="4264.296">EnrichmentService</text><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="673.66" x2="1051.4697" y1="4273.636" y2="4273.636"/><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="673.66" x2="1051.4697" y1="4281.636" y2="4281.636"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="683.66" cy="4305.364" fill="#595959" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="277.5645" x="691.66" y="4299.524">GetLocationContext(loc : const Location&amp;,</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="347.3617" x="699.108" y="4317.752">strategy : const ContextStrategy&amp;) : LocationContext</text></g><!--class WikipediaService--><g class="entity" data-qualified-name="Infrastructure. Enrichment.WikipediaService" data-source-line="365" id="ent0054"><rect fill="#151515" height="137.14" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="422.6147" x="1256.38" y="4218.07"/><rect fill="#333333" height="30" rx="2.5" ry="2.5" style="stroke:#333333;stroke-width:0.5;" width="422.6147" x="1256.38" y="4218.07"/><rect fill="#333333" height="2.5" style="stroke:#333333;stroke-width:0.5;" width="422.6147" x="1256.38" y="4245.57"/><rect fill="none" height="137.14" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="422.6147" x="1256.38" y="4218.07"/><ellipse cx="1407.822" cy="4233.07" fill="#3D3D3D" rx="10" ry="10" style="stroke:#E7E7E7;stroke-width:1;"/><path d="M1409.7117,4238.0261 Q1409.2332,4238.2721 1408.7068,4238.3952 Q1408.1804,4238.5182 1407.5994,4238.5182 Q1405.5349,4238.5182 1404.448,4237.1579 Q1403.3611,4235.7975 1403.3611,4233.2272 Q1403.3611,4230.6501 1404.448,4229.2897 Q1405.5349,4227.9294 1407.5994,4227.9294 Q1408.1804,4227.9294 1408.7136,4228.0524 Q1409.2468,4228.1755 1409.7117,4228.4216 L1409.7117,4230.6637 Q1409.1921,4230.1852 1408.7034,4229.9631 Q1408.2146,4229.7409 1407.6951,4229.7409 Q1406.5876,4229.7409 1406.0237,4230.6193 Q1405.4597,4231.4977 1405.4597,4233.2272 Q1405.4597,4234.9499 1406.0237,4235.8283 Q1406.5876,4236.7067 1407.6951,4236.7067 Q1408.2146,4236.7067 1408.7034,4236.4846 Q1409.1921,4236.2624 1409.7117,4235.7839 Z " fill="#EAEAEA"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="111.7306" x="1426.822" y="4237.844">WikipediaService</text><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="1257.38" x2="1677.9947" y1="4248.07" y2="4248.07"/><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#A6A6A6;stroke-width:1;" width="6" x="1264.38" y="4259.684"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="238.9101" x="1275.38" y="4265.958">client_ : std::unique_ptr&lt;WebClient&gt;</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#A6A6A6;stroke-width:1;" width="6" x="1264.38" y="4277.912"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="397.6147" x="1275.38" y="4284.186">extract_cache_ : std::unordered_map&lt;std::string, std::string&gt;</text><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="1257.38" x2="1677.9947" y1="4292.526" y2="4292.526"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="1267.38" cy="4316.254" fill="#595959" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="277.5645" x="1275.38" y="4310.414">GetLocationContext(loc : const Location&amp;,</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="347.3617" x="1282.828" y="4328.642">strategy : const ContextStrategy&amp;) : LocationContext</text><g data-visibility-modifier="PRIVATE_METHOD"><rect fill="#7F7F7F" height="6" style="stroke:#A6A6A6;stroke-width:1;" width="6" x="1264.38" y="4340.596"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="318.5638" x="1275.38" y="4346.87">FetchExtract(query : std::string_view) : std::string</text></g><!--class WebClient--><g class="entity" data-qualified-name="Infrastructure. Enrichment.WebClient" data-source-line="372" id="ent0055"><rect fill="#151515" height="98.912" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="335.0342" x="1880.92" y="4237.18"/><rect fill="#333333" height="46.456" rx="2.5" ry="2.5" style="stroke:#333333;stroke-width:0.5;" width="335.0342" x="1880.92" y="4237.18"/><rect fill="#333333" height="2.5" style="stroke:#333333;stroke-width:0.5;" width="335.0342" x="1880.92" y="4281.136"/><rect fill="none" height="98.912" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="335.0342" x="1880.92" y="4237.18"/><ellipse cx="2010.3261" cy="4260.408" fill="#4E4E4E" rx="10" ry="10" style="stroke:#E7E7E7;stroke-width:1;"/><path d="M2007.0019,4257.4793 L2007.0019,4255.7019 L2013.079,4255.7019 L2013.079,4257.4793 L2011.0488,4257.4793 L2011.0488,4264.1307 L2013.079,4264.1307 L2013.079,4265.908 L2007.0019,4265.908 L2007.0019,4264.1307 L2009.0322,4264.1307 L2009.0322,4257.4793 Z " fill="#EAEAEA"/><text fill="#EAEAEA" font-family="DM Sans" font-size="14" font-style="italic" lengthAdjust="spacing" textLength="71.148" x="2027.8631" y="4256.068">&#171;interface&#187;</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" font-style="italic" lengthAdjust="spacing" textLength="68.222" x="2029.3261" y="4274.296">WebClient</text><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="1881.92" x2="2214.9542" y1="4283.636" y2="4283.636"/><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="1881.92" x2="2214.9542" y1="4291.636" y2="4291.636"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="1891.92" cy="4306.25" fill="#595959" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="249.8552" x="1899.92" y="4309.524">Get(url : const std::string&amp;) : std::string</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="1891.92" cy="4324.478" fill="#595959" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="310.0342" x="1899.92" y="4327.752">UrlEncode(value : const std::string&amp;) : std::string</text></g><!--class CURLWebClient--><g class="entity" data-qualified-name="Infrastructure. Enrichment.CURLWebClient" data-source-line="377" id="ent0056"><rect fill="#151515" height="82.456" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="335.0342" x="2437.29" y="4245.41"/><rect fill="#333333" height="30" rx="2.5" ry="2.5" style="stroke:#333333;stroke-width:0.5;" width="335.0342" x="2437.29" y="4245.41"/><rect fill="#333333" height="2.5" style="stroke:#333333;stroke-width:0.5;" width="335.0342" x="2437.29" y="4272.91"/><rect fill="none" height="82.456" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="335.0342" x="2437.29" y="4245.41"/><ellipse cx="2549.2223" cy="4260.41" fill="#3D3D3D" rx="10" ry="10" style="stroke:#E7E7E7;stroke-width:1;"/><path d="M2551.112,4265.3661 Q2550.6335,4265.6121 2550.1071,4265.7352 Q2549.5807,4265.8582 2548.9997,4265.8582 Q2546.9352,4265.8582 2545.8483,4264.4979 Q2544.7614,4263.1375 2544.7614,4260.5672 Q2544.7614,4257.9901 2545.8483,4256.6297 Q2546.9352,4255.2694 2548.9997,4255.2694 Q2549.5807,4255.2694 2550.1139,4255.3924 Q2550.6472,4255.5155 2551.112,4255.7616 L2551.112,4258.0037 Q2550.5925,4257.5252 2550.1037,4257.3031 Q2549.6149,4257.0809 2549.0954,4257.0809 Q2547.988,4257.0809 2547.424,4257.9593 Q2546.86,4258.8377 2546.86,4260.5672 Q2546.86,4262.2899 2547.424,4263.1683 Q2547.988,4264.0467 2549.0954,4264.0467 Q2549.6149,4264.0467 2550.1037,4263.8246 Q2550.5925,4263.6024 2551.112,4263.1239 Z " fill="#EAEAEA"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="103.1695" x="2568.2223" y="4265.184">CURLWebClient</text><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="2438.29" x2="2771.3242" y1="4275.41" y2="4275.41"/><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="2438.29" x2="2771.3242" y1="4283.41" y2="4283.41"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="2448.29" cy="4298.024" fill="#595959" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="249.8552" x="2456.29" y="4301.298">Get(url : const std::string&amp;) : std::string</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="2448.29" cy="4316.252" fill="#595959" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="310.0342" x="2456.29" y="4319.526">UrlEncode(value : const std::string&amp;) : std::string</text></g><!--class DataGenerator--><g class="entity" data-qualified-name="Infrastructure. Generation.DataGenerator" data-source-line="390" id="ent0058"><rect fill="#151515" height="299.42" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="374.9307" x="675.1" y="1916.93"/><rect fill="#333333" height="46.456" rx="2.5" ry="2.5" style="stroke:#333333;stroke-width:0.5;" width="374.9307" x="675.1" y="1916.93"/><rect fill="#333333" height="2.5" style="stroke:#333333;stroke-width:0.5;" width="374.9307" x="675.1" y="1960.886"/><rect fill="none" height="299.42" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="374.9307" x="675.1" y="1916.93"/><ellipse cx="810.0343" cy="1940.158" fill="#4E4E4E" rx="10" ry="10" style="stroke:#E7E7E7;stroke-width:1;"/><path d="M806.7101,1937.2293 L806.7101,1935.4519 L812.7873,1935.4519 L812.7873,1937.2293 L810.757,1937.2293 L810.757,1943.8807 L812.7873,1943.8807 L812.7873,1945.658 L806.7101,1945.658 L806.7101,1943.8807 L808.7404,1943.8807 L808.7404,1937.2293 Z " fill="#EAEAEA"/><text fill="#EAEAEA" font-family="DM Sans" font-size="14" font-style="italic" lengthAdjust="spacing" textLength="71.148" x="841.9913" y="1935.818">&#171;interface&#187;</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" font-style="italic" lengthAdjust="spacing" textLength="97.062" x="829.0343" y="1954.046">DataGenerator</text><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="676.1" x2="1049.0307" y1="1963.386" y2="1963.386"/><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="676.1" x2="1049.0307" y1="1971.386" y2="1971.386"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="686.1" cy="1995.114" fill="#595959" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="291.5402" x="694.1" y="1989.274">GenerateBrewery(location : const Location&amp;,</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="328.6472" x="701.548" y="2007.502">context : const LocationContext&amp;) : BreweryResult</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="686.1" cy="2049.798" fill="#595959" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="270.6308" x="694.1" y="2025.73">GenerateBeer(brewery_id : sqlite3_int64,</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="172.3649" x="701.548" y="2043.958">location : const Location&amp;,</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="222.6004" x="701.548" y="2062.186">context : const LocationContext&amp;,</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="239.4564" x="701.548" y="2080.414">style : const BeerStyle&amp;) : BeerResult</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="686.1" cy="2095.368" fill="#595959" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="349.9307" x="694.1" y="2098.642">GenerateUser(location : const Location&amp;) : UserResult</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="686.1" cy="2131.824" fill="#595959" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="309.2605" x="694.1" y="2116.87">GenerateCheckin(user : const GeneratedUser&amp;,</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="239.9045" x="701.548" y="2135.098">brewery : const GeneratedBrewery&amp;,</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="303.5065" x="701.548" y="2153.326">timestamp : const std::string&amp;) : CheckinResult</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="686.1" cy="2186.508" fill="#595959" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="297.3886" x="694.1" y="2171.554">GenerateRating(user : const GeneratedUser&amp;,</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="192.6263" x="701.548" y="2189.782">beer : const GeneratedBeer&amp;,</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="265.5382" x="701.548" y="2208.01">checkin_id : sqlite3_int64) : RatingResult</text></g><!--class MockGenerator--><g class="entity" data-qualified-name="Infrastructure. Generation.MockGenerator" data-source-line="398" id="ent0059"><rect fill="#151515" height="155.368" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="374.5106" x="1280.43" y="1743.96"/><rect fill="#333333" height="30" rx="2.5" ry="2.5" style="stroke:#333333;stroke-width:0.5;" width="374.5106" x="1280.43" y="1743.96"/><rect fill="#333333" height="2.5" style="stroke:#333333;stroke-width:0.5;" width="374.5106" x="1280.43" y="1771.46"/><rect fill="none" height="155.368" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="374.5106" x="1280.43" y="1743.96"/><ellipse cx="1412.951" cy="1758.96" fill="#3D3D3D" rx="10" ry="10" style="stroke:#E7E7E7;stroke-width:1;"/><path d="M1414.8406,1763.9161 Q1414.3621,1764.1621 1413.8357,1764.2852 Q1413.3094,1764.4082 1412.7283,1764.4082 Q1410.6638,1764.4082 1409.5769,1763.0479 Q1408.49,1761.6875 1408.49,1759.1172 Q1408.49,1756.5401 1409.5769,1755.1797 Q1410.6638,1753.8194 1412.7283,1753.8194 Q1413.3094,1753.8194 1413.8426,1753.9424 Q1414.3758,1754.0655 1414.8406,1754.3116 L1414.8406,1756.5537 Q1414.3211,1756.0752 1413.8323,1755.8531 Q1413.3435,1755.6309 1412.824,1755.6309 Q1411.7166,1755.6309 1411.1526,1756.5093 Q1410.5887,1757.3877 1410.5887,1759.1172 Q1410.5887,1760.8399 1411.1526,1761.7183 Q1411.7166,1762.5967 1412.824,1762.5967 Q1413.3435,1762.5967 1413.8323,1762.3746 Q1414.3211,1762.1524 1414.8406,1761.6739 Z " fill="#EAEAEA"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="101.4686" x="1431.951" y="1763.734">MockGenerator</text><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="1281.43" x2="1653.9406" y1="1773.96" y2="1773.96"/><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="1281.43" x2="1653.9406" y1="1781.96" y2="1781.96"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="1291.43" cy="1796.574" fill="#595959" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="236.0966" x="1299.43" y="1799.848">GenerateBrewery(...) : BreweryResult</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="1291.43" cy="1814.802" fill="#595959" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="188.8183" x="1299.43" y="1818.076">GenerateBeer(...) : BeerResult</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="1291.43" cy="1833.03" fill="#595959" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="188.4403" x="1299.43" y="1836.304">GenerateUser(...) : UserResult</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="1291.43" cy="1851.258" fill="#595959" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="234.7313" x="1299.43" y="1854.532">GenerateCheckin(...) : CheckinResult</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="1291.43" cy="1869.486" fill="#595959" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="210.9875" x="1299.43" y="1872.76">GenerateRating(...) : RatingResult</text><g data-visibility-modifier="PRIVATE_METHOD"><rect fill="#7F7F7F" height="6" style="stroke:#A6A6A6;stroke-width:1;" width="6" x="1288.43" y="1884.714"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="349.5106" x="1299.43" y="1890.988">DeterministicHash(location : const Location&amp;) : size_t</text></g><!--class LlamaGenerator--><g class="entity" data-qualified-name="Infrastructure. Generation.LlamaGenerator" data-source-line="407" id="ent0060"><rect fill="#151515" height="282.964" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="393.869" x="1270.75" y="1934.16"/><rect fill="#333333" height="30" rx="2.5" ry="2.5" style="stroke:#333333;stroke-width:0.5;" width="393.869" x="1270.75" y="1934.16"/><rect fill="#333333" height="2.5" style="stroke:#333333;stroke-width:0.5;" width="393.869" x="1270.75" y="1961.66"/><rect fill="none" height="282.964" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="393.869" x="1270.75" y="1934.16"/><ellipse cx="1411.4224" cy="1949.16" fill="#3D3D3D" rx="10" ry="10" style="stroke:#E7E7E7;stroke-width:1;"/><path d="M1413.312,1954.1161 Q1412.8335,1954.3621 1412.3072,1954.4852 Q1411.7808,1954.6082 1411.1997,1954.6082 Q1409.1353,1954.6082 1408.0484,1953.2479 Q1406.9615,1951.8875 1406.9615,1949.3172 Q1406.9615,1946.7401 1408.0484,1945.3797 Q1409.1353,1944.0194 1411.1997,1944.0194 Q1411.7808,1944.0194 1412.314,1944.1424 Q1412.8472,1944.2655 1413.312,1944.5116 L1413.312,1946.7537 Q1412.7925,1946.2752 1412.3037,1946.0531 Q1411.815,1945.8309 1411.2954,1945.8309 Q1410.188,1945.8309 1409.6241,1946.7093 Q1409.0601,1947.5877 1409.0601,1949.3172 Q1409.0601,1951.0399 1409.6241,1951.9183 Q1410.188,1952.7967 1411.2954,1952.7967 Q1411.815,1952.7967 1412.3037,1952.5746 Q1412.7925,1952.3524 1413.312,1951.8739 Z " fill="#EAEAEA"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="104.5242" x="1430.4224" y="1953.934">LlamaGenerator</text><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="1271.75" x2="1663.619" y1="1964.16" y2="1964.16"/><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#A6A6A6;stroke-width:1;" width="6" x="1278.75" y="1975.774"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="145.1239" x="1289.75" y="1982.048">model_ : ModelHandle</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#A6A6A6;stroke-width:1;" width="6" x="1278.75" y="1994.002"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="167.0061" x="1289.75" y="2000.276">context_ : ContextHandle</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#A6A6A6;stroke-width:1;" width="6" x="1278.75" y="2012.23"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="368.869" x="1289.75" y="2018.504">prompt_formatter_ : std::unique_ptr&lt;PromptFormatter&gt;</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#A6A6A6;stroke-width:1;" width="6" x="1278.75" y="2030.458"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="123.1442" x="1289.75" y="2036.732">rng_ : std::mt19937</text><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="1271.75" x2="1663.619" y1="2045.072" y2="2045.072"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="1281.75" cy="2059.686" fill="#595959" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="236.0966" x="1289.75" y="2062.96">GenerateBrewery(...) : BreweryResult</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="1281.75" cy="2077.914" fill="#595959" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="188.8183" x="1289.75" y="2081.188">GenerateBeer(...) : BeerResult</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="1281.75" cy="2096.142" fill="#595959" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="188.4403" x="1289.75" y="2099.416">GenerateUser(...) : UserResult</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="1281.75" cy="2114.37" fill="#595959" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="234.7313" x="1289.75" y="2117.644">GenerateCheckin(...) : CheckinResult</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="1281.75" cy="2132.598" fill="#595959" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="210.9875" x="1289.75" y="2135.872">GenerateRating(...) : RatingResult</text><g data-visibility-modifier="PRIVATE_METHOD"><rect fill="#7F7F7F" height="6" style="stroke:#A6A6A6;stroke-width:1;" width="6" x="1278.75" y="2147.826"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="289.4364" x="1289.75" y="2154.1">Load(opts : const GeneratorOptions&amp;) : void</text><g data-visibility-modifier="PRIVATE_METHOD"><rect fill="#7F7F7F" height="6" style="stroke:#A6A6A6;stroke-width:1;" width="6" x="1278.75" y="2175.168"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="235.6307" x="1289.75" y="2172.328">Infer(system_prompt, user_prompt,</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="224.0844" x="1297.198" y="2190.556">max_tokens, grammar) : std::string</text><g data-visibility-modifier="PRIVATE_METHOD"><rect fill="#7F7F7F" height="6" style="stroke:#A6A6A6;stroke-width:1;" width="6" x="1278.75" y="2202.51"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="223.7098" x="1289.75" y="2208.784">ValidateModelArchitecture() : void</text></g><!--class PromptFormatter--><g class="entity" data-qualified-name="Infrastructure. Generation.PromptFormatter" data-source-line="422" id="ent0061"><rect fill="#151515" height="117.14" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="310.8771" x="1893" y="2017.07"/><rect fill="#333333" height="46.456" rx="2.5" ry="2.5" style="stroke:#333333;stroke-width:0.5;" width="310.8771" x="1893" y="2017.07"/><rect fill="#333333" height="2.5" style="stroke:#333333;stroke-width:0.5;" width="310.8771" x="1893" y="2061.026"/><rect fill="none" height="117.14" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="310.8771" x="1893" y="2017.07"/><ellipse cx="1987.8435" cy="2040.298" fill="#4E4E4E" rx="10" ry="10" style="stroke:#E7E7E7;stroke-width:1;"/><path d="M1984.5193,2037.3693 L1984.5193,2035.5919 L1990.5965,2035.5919 L1990.5965,2037.3693 L1988.5662,2037.3693 L1988.5662,2044.0207 L1990.5965,2044.0207 L1990.5965,2045.798 L1984.5193,2045.798 L1984.5193,2044.0207 L1986.5496,2044.0207 L1986.5496,2037.3693 Z " fill="#EAEAEA"/><text fill="#EAEAEA" font-family="DM Sans" font-size="14" font-style="italic" lengthAdjust="spacing" textLength="71.148" x="2027.8645" y="2035.958">&#171;interface&#187;</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" font-style="italic" lengthAdjust="spacing" textLength="113.19" x="2006.8435" y="2054.186">PromptFormatter</text><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="1894" x2="2202.8771" y1="2063.526" y2="2063.526"/><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="1894" x2="2202.8771" y1="2071.526" y2="2071.526"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="1904" cy="2095.254" fill="#595959" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="273.0074" x="1912" y="2089.414">Format(system_prompt : std::string_view,</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="278.429" x="1919.448" y="2107.642">user_prompt : std::string_view) : std::string</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="1904" cy="2122.596" fill="#595959" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="266.9034" x="1912" y="2125.87">ExpectedArchitecture() : std::string_view</text></g><!--class Gemma4JinjaPromptFormatter--><g class="entity" data-qualified-name="Infrastructure. Generation.Gemma4JinjaPromptFormatter" data-source-line="427" id="ent0062"><rect fill="#151515" height="82.456" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="291.9034" x="2458.86" y="2034.41"/><rect fill="#333333" height="30" rx="2.5" ry="2.5" style="stroke:#333333;stroke-width:0.5;" width="291.9034" x="2458.86" y="2034.41"/><rect fill="#333333" height="2.5" style="stroke:#333333;stroke-width:0.5;" width="291.9034" x="2458.86" y="2061.91"/><rect fill="none" height="82.456" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="291.9034" x="2458.86" y="2034.41"/><ellipse cx="2499.5665" cy="2049.41" fill="#3D3D3D" rx="10" ry="10" style="stroke:#E7E7E7;stroke-width:1;"/><path d="M2501.4561,2054.3661 Q2500.9776,2054.6121 2500.4512,2054.7352 Q2499.9249,2054.8582 2499.3438,2054.8582 Q2497.2794,2054.8582 2496.1924,2053.4979 Q2495.1055,2052.1375 2495.1055,2049.5672 Q2495.1055,2046.9901 2496.1924,2045.6297 Q2497.2794,2044.2694 2499.3438,2044.2694 Q2499.9249,2044.2694 2500.4581,2044.3924 Q2500.9913,2044.5155 2501.4561,2044.7616 L2501.4561,2047.0037 Q2500.9366,2046.5252 2500.4478,2046.3031 Q2499.9591,2046.0809 2499.4395,2046.0809 Q2498.3321,2046.0809 2497.7681,2046.9593 Q2497.2042,2047.8377 2497.2042,2049.5672 Q2497.2042,2051.2899 2497.7681,2052.1683 Q2498.3321,2053.0467 2499.4395,2053.0467 Q2499.9591,2053.0467 2500.4478,2052.8246 Q2500.9366,2052.6024 2501.4561,2052.1239 Z " fill="#EAEAEA"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="202.5557" x="2518.5012" y="2054.184">Gemma4JinjaPromptFormatter</text><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="2459.86" x2="2749.7634" y1="2064.41" y2="2064.41"/><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="2459.86" x2="2749.7634" y1="2072.41" y2="2072.41"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="2469.86" cy="2087.024" fill="#595959" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="139.4089" x="2477.86" y="2090.298">Format(...) : std::string</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="2469.86" cy="2105.252" fill="#595959" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="266.9034" x="2477.86" y="2108.526">ExpectedArchitecture() : std::string_view</text></g><!--class BoundedChannel--><g class="entity" data-qualified-name="Infrastructure. Pipeline Channel.BoundedChannel" data-source-line="440" id="ent0064"><rect fill="#151515" height="210.052" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="266.8711" x="1915" y="3174.61"/><rect fill="#333333" height="30" rx="2.5" ry="2.5" style="stroke:#333333;stroke-width:0.5;" width="266.8711" x="1915" y="3174.61"/><rect fill="#333333" height="2.5" style="stroke:#333333;stroke-width:0.5;" width="266.8711" x="1915" y="3202.11"/><rect fill="none" height="210.052" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="266.8711" x="1915" y="3174.61"/><ellipse cx="1982.939" cy="3189.61" fill="#3D3D3D" rx="10" ry="10" style="stroke:#E7E7E7;stroke-width:1;"/><path d="M1984.8287,3194.5661 Q1984.3502,3194.8121 1983.8238,3194.9352 Q1983.2974,3195.0582 1982.7164,3195.0582 Q1980.6519,3195.0582 1979.565,3193.6979 Q1978.4781,3192.3375 1978.4781,3189.7672 Q1978.4781,3187.1901 1979.565,3185.8297 Q1980.6519,3184.4694 1982.7164,3184.4694 Q1983.2974,3184.4694 1983.8306,3184.5924 Q1984.3638,3184.7155 1984.8287,3184.9616 L1984.8287,3187.2037 Q1984.3092,3186.7252 1983.8204,3186.5031 Q1983.3316,3186.2809 1982.8121,3186.2809 Q1981.7047,3186.2809 1981.1407,3187.1593 Q1980.5767,3188.0377 1980.5767,3189.7672 Q1980.5767,3191.4899 1981.1407,3192.3683 Q1981.7047,3193.2467 1982.8121,3193.2467 Q1983.3316,3193.2467 1983.8204,3193.0246 Q1984.3092,3192.8024 1984.8287,3192.3239 Z " fill="#EAEAEA"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="111.153" x="2001.939" y="3194.384">BoundedChannel</text><rect fill="#151515" height="20.228" style="stroke:#AFAFAF;stroke-width:1;stroke-dasharray:2,2;" width="9.84" x="2175.0311" y="3171.61"/><text fill="#EAEAEA" font-family="DM Sans" font-size="14" font-style="italic" lengthAdjust="spacing" textLength="7.84" x="2176.0311" y="3186.498">T</text><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="1916" x2="2180.8711" y1="3204.61" y2="3204.61"/><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#A6A6A6;stroke-width:1;" width="6" x="1923" y="3216.224"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="151.193" x="1934" y="3222.498">queue_ : std::queue&lt;T&gt;</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#A6A6A6;stroke-width:1;" width="6" x="1923" y="3234.452"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="128.233" x="1934" y="3240.726">mutex_ : std::mutex</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#A6A6A6;stroke-width:1;" width="6" x="1923" y="3252.68"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="218.4282" x="1934" y="3258.954">not_full_ : std::condition_variable</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#A6A6A6;stroke-width:1;" width="6" x="1923" y="3270.908"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="241.8711" x="1934" y="3277.182">not_empty_ : std::condition_variable</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#A6A6A6;stroke-width:1;" width="6" x="1923" y="3289.136"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="115.6436" x="1934" y="3295.41">capacity_ : size_t</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#A6A6A6;stroke-width:1;" width="6" x="1923" y="3307.364"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="91.217" x="1934" y="3313.638">closed_ : bool</text><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="1916" x2="2180.8711" y1="3321.978" y2="3321.978"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="1926" cy="3336.592" fill="#595959" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="128.7896" x="1934" y="3339.866">Send(item : T) : void</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="1926" cy="3354.82" fill="#595959" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="174.8077" x="1934" y="3358.094">Receive() : std::optional&lt;T&gt;</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="1926" cy="3373.048" fill="#595959" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="84.9696" x="1934" y="3376.322">Close() : void</text></g><!--class ExportService--><g class="entity" data-qualified-name="Infrastructure. Export.ExportService" data-source-line="460" id="ent0066"><rect fill="#151515" height="190.052" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="475.2584" x="624.93" y="4497.61"/><rect fill="#333333" height="46.456" rx="2.5" ry="2.5" style="stroke:#333333;stroke-width:0.5;" width="475.2584" x="624.93" y="4497.61"/><rect fill="#333333" height="2.5" style="stroke:#333333;stroke-width:0.5;" width="475.2584" x="624.93" y="4541.566"/><rect fill="none" height="190.052" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="475.2584" x="624.93" y="4497.61"/><ellipse cx="813.3112" cy="4520.838" fill="#4E4E4E" rx="10" ry="10" style="stroke:#E7E7E7;stroke-width:1;"/><path d="M809.987,4517.9093 L809.987,4516.1319 L816.0641,4516.1319 L816.0641,4517.9093 L814.0338,4517.9093 L814.0338,4524.5607 L816.0641,4524.5607 L816.0641,4526.338 L809.987,4526.338 L809.987,4524.5607 L812.0172,4524.5607 L812.0172,4517.9093 Z " fill="#EAEAEA"/><text fill="#EAEAEA" font-family="DM Sans" font-size="14" font-style="italic" lengthAdjust="spacing" textLength="71.148" x="841.9852" y="4516.498">&#171;interface&#187;</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" font-style="italic" lengthAdjust="spacing" textLength="90.496" x="832.3112" y="4534.726">ExportService</text><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="625.93" x2="1099.1884" y1="4544.066" y2="4544.066"/><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="625.93" x2="1099.1884" y1="4552.066" y2="4552.066"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="635.93" cy="4566.68" fill="#595959" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="100.4677" x="643.93" y="4569.954">Initialize() : void</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="635.93" cy="4584.908" fill="#595959" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="450.2584" x="643.93" y="4588.182">ProcessBrewery(brewery : const GeneratedBrewery&amp;) : sqlite3_int64</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="635.93" cy="4603.136" fill="#595959" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="379.341" x="643.93" y="4606.41">ProcessBeer(beer : const GeneratedBeer&amp;) : sqlite3_int64</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="635.93" cy="4621.364" fill="#595959" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="377.2935" x="643.93" y="4624.638">ProcessUser(user : const GeneratedUser&amp;) : sqlite3_int64</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="635.93" cy="4639.592" fill="#595959" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="445.8445" x="643.93" y="4642.866">ProcessCheckin(checkin : const GeneratedCheckin&amp;) : sqlite3_int64</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="635.93" cy="4657.82" fill="#595959" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="349.5317" x="643.93" y="4661.094">ProcessRating(rating : const GeneratedRating&amp;) : void</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="635.93" cy="4676.048" fill="#595959" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="95.8547" x="643.93" y="4679.322">Finalize() : void</text></g><!--class SqliteExportService--><g class="entity" data-qualified-name="Infrastructure. Export.SqliteExportService" data-source-line="470" id="ent0067"><rect fill="#151515" height="447.016" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="475.2584" x="1230.06" y="4433.13"/><rect fill="#333333" height="30" rx="2.5" ry="2.5" style="stroke:#333333;stroke-width:0.5;" width="475.2584" x="1230.06" y="4433.13"/><rect fill="#333333" height="2.5" style="stroke:#333333;stroke-width:0.5;" width="475.2584" x="1230.06" y="4460.63"/><rect fill="none" height="447.016" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="475.2584" x="1230.06" y="4433.13"/><ellipse cx="1400.0136" cy="4448.13" fill="#3D3D3D" rx="10" ry="10" style="stroke:#E7E7E7;stroke-width:1;"/><path d="M1401.9032,4453.0861 Q1401.4247,4453.3321 1400.8983,4453.4552 Q1400.372,4453.5782 1399.7909,4453.5782 Q1397.7265,4453.5782 1396.6396,4452.2179 Q1395.5526,4450.8575 1395.5526,4448.2872 Q1395.5526,4445.7101 1396.6396,4444.3497 Q1397.7265,4442.9894 1399.7909,4442.9894 Q1400.372,4442.9894 1400.9052,4443.1124 Q1401.4384,4443.2355 1401.9032,4443.4816 L1401.9032,4445.7237 Q1401.3837,4445.2452 1400.8949,4445.0231 Q1400.4062,4444.8009 1399.8866,4444.8009 Q1398.7792,4444.8009 1398.2152,4445.6793 Q1397.6513,4446.5577 1397.6513,4448.2872 Q1397.6513,4450.0099 1398.2152,4450.8883 Q1398.7792,4451.7667 1399.8866,4451.7667 Q1400.4062,4451.7667 1400.8949,4451.5446 Q1401.3837,4451.3224 1401.9032,4450.8439 Z " fill="#EAEAEA"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="127.3512" x="1419.0136" y="4452.904">SqliteExportService</text><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="1231.06" x2="1704.3184" y1="4463.13" y2="4463.13"/><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#A6A6A6;stroke-width:1;" width="6" x="1238.06" y="4474.744"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="383.7542" x="1249.06" y="4481.018">date_time_provider_ : std::unique_ptr&lt;DateTimeProvider&gt;</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#A6A6A6;stroke-width:1;" width="6" x="1238.06" y="4492.972"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="233.4325" x="1249.06" y="4499.246">db_handle_ : SqliteDatabaseHandle</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#A6A6A6;stroke-width:1;" width="6" x="1238.06" y="4511.2"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="308.1823" x="1249.06" y="4517.474">insert_location_stmt_ : SqliteStatementHandle</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#A6A6A6;stroke-width:1;" width="6" x="1238.06" y="4529.428"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="309.4563" x="1249.06" y="4535.702">insert_brewery_stmt_ : SqliteStatementHandle</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#A6A6A6;stroke-width:1;" width="6" x="1238.06" y="4547.656"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="285.8172" x="1249.06" y="4553.93">insert_beer_stmt_ : SqliteStatementHandle</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#A6A6A6;stroke-width:1;" width="6" x="1238.06" y="4565.884"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="284.1477" x="1249.06" y="4572.158">insert_user_stmt_ : SqliteStatementHandle</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#A6A6A6;stroke-width:1;" width="6" x="1238.06" y="4584.112"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="306.4077" x="1249.06" y="4590.386">insert_checkin_stmt_ : SqliteStatementHandle</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#A6A6A6;stroke-width:1;" width="6" x="1238.06" y="4602.34"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="293.4298" x="1249.06" y="4608.614">insert_rating_stmt_ : SqliteStatementHandle</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#A6A6A6;stroke-width:1;" width="6" x="1238.06" y="4620.568"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="164.4616" x="1249.06" y="4626.842">transaction_open_ : bool</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#A6A6A6;stroke-width:1;" width="6" x="1238.06" y="4638.796"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="426.7415" x="1249.06" y="4645.07">location_cache_ : std::unordered_map&lt;std::string, sqlite3_int64&gt;</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#A6A6A6;stroke-width:1;" width="6" x="1238.06" y="4657.024"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="428.0155" x="1249.06" y="4663.298">brewery_cache_ : std::unordered_map&lt;std::string, sqlite3_int64&gt;</text><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="1231.06" x2="1704.3184" y1="4671.638" y2="4671.638"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="1241.06" cy="4686.252" fill="#595959" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="100.4677" x="1249.06" y="4689.526">Initialize() : void</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="1241.06" cy="4704.48" fill="#595959" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="450.2584" x="1249.06" y="4707.754">ProcessBrewery(brewery : const GeneratedBrewery&amp;) : sqlite3_int64</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="1241.06" cy="4722.708" fill="#595959" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="379.341" x="1249.06" y="4725.982">ProcessBeer(beer : const GeneratedBeer&amp;) : sqlite3_int64</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="1241.06" cy="4740.936" fill="#595959" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="377.2935" x="1249.06" y="4744.21">ProcessUser(user : const GeneratedUser&amp;) : sqlite3_int64</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="1241.06" cy="4759.164" fill="#595959" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="445.8445" x="1249.06" y="4762.438">ProcessCheckin(checkin : const GeneratedCheckin&amp;) : sqlite3_int64</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="1241.06" cy="4777.392" fill="#595959" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="349.5317" x="1249.06" y="4780.666">ProcessRating(rating : const GeneratedRating&amp;) : void</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="1241.06" cy="4795.62" fill="#595959" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="95.8547" x="1249.06" y="4798.894">Finalize() : void</text><g data-visibility-modifier="PRIVATE_METHOD"><rect fill="#7F7F7F" height="6" style="stroke:#A6A6A6;stroke-width:1;" width="6" x="1238.06" y="4810.848"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="152.6842" x="1249.06" y="4817.122">InitializeSchema() : void</text><g data-visibility-modifier="PRIVATE_METHOD"><rect fill="#7F7F7F" height="6" style="stroke:#A6A6A6;stroke-width:1;" width="6" x="1238.06" y="4829.076"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="174.9303" x="1249.06" y="4835.35">PrepareStatements() : void</text><g data-visibility-modifier="PRIVATE_METHOD"><rect fill="#7F7F7F" height="6" style="stroke:#A6A6A6;stroke-width:1;" width="6" x="1238.06" y="4847.304"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="223.4263" x="1249.06" y="4853.578">RollbackAndCloseNoThrow() : void</text><g data-visibility-modifier="PRIVATE_METHOD"><rect fill="#7F7F7F" height="6" style="stroke:#A6A6A6;stroke-width:1;" width="6" x="1238.06" y="4865.532"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="171.4933" x="1249.06" y="4871.806">FinalizeStatements() : void</text></g><!--class DateTimeProvider--><g class="entity" data-qualified-name="Infrastructure. Export.DateTimeProvider" data-source-line="495" id="ent0068"><rect fill="#151515" height="80.684" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="229.2673" x="1933.8" y="4616.3"/><rect fill="#333333" height="46.456" rx="2.5" ry="2.5" style="stroke:#333333;stroke-width:0.5;" width="229.2673" x="1933.8" y="4616.3"/><rect fill="#333333" height="2.5" style="stroke:#333333;stroke-width:0.5;" width="229.2673" x="1933.8" y="4660.256"/><rect fill="none" height="80.684" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="229.2673" x="1933.8" y="4616.3"/><ellipse cx="1985.9907" cy="4639.528" fill="#4E4E4E" rx="10" ry="10" style="stroke:#E7E7E7;stroke-width:1;"/><path d="M1982.6664,4636.5993 L1982.6664,4634.8219 L1988.7436,4634.8219 L1988.7436,4636.5993 L1986.7133,4636.5993 L1986.7133,4643.2507 L1988.7436,4643.2507 L1988.7436,4645.028 L1982.6664,4645.028 L1982.6664,4643.2507 L1984.6967,4643.2507 L1984.6967,4636.5993 Z " fill="#EAEAEA"/><text fill="#EAEAEA" font-family="DM Sans" font-size="14" font-style="italic" lengthAdjust="spacing" textLength="71.148" x="2027.8597" y="4635.188">&#171;interface&#187;</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" font-style="italic" lengthAdjust="spacing" textLength="116.886" x="2004.9907" y="4653.416">DateTimeProvider</text><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="1934.8" x2="2162.0673" y1="4662.756" y2="4662.756"/><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="1934.8" x2="2162.0673" y1="4670.756" y2="4670.756"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="1944.8" cy="4685.37" fill="#595959" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="204.2673" x="1952.8" y="4688.644">GetUtcTimestamp() : std::string</text></g><!--class SystemDateTimeProvider--><g class="entity" data-qualified-name="Infrastructure. Export.SystemDateTimeProvider" data-source-line="499" id="ent0069"><rect fill="#151515" height="64.228" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="229.2673" x="2490.18" y="4624.53"/><rect fill="#333333" height="30" rx="2.5" ry="2.5" style="stroke:#333333;stroke-width:0.5;" width="229.2673" x="2490.18" y="4624.53"/><rect fill="#333333" height="2.5" style="stroke:#333333;stroke-width:0.5;" width="229.2673" x="2490.18" y="4652.03"/><rect fill="none" height="64.228" rx="2.5" ry="2.5" style="stroke:#AFAFAF;stroke-width:0.5;" width="229.2673" x="2490.18" y="4624.53"/><ellipse cx="2519.4094" cy="4639.53" fill="#3D3D3D" rx="10" ry="10" style="stroke:#E7E7E7;stroke-width:1;"/><path d="M2521.2991,4644.4861 Q2520.8206,4644.7321 2520.2942,4644.8552 Q2519.7678,4644.9782 2519.1868,4644.9782 Q2517.1223,4644.9782 2516.0354,4643.6179 Q2514.9485,4642.2575 2514.9485,4639.6872 Q2514.9485,4637.1101 2516.0354,4635.7497 Q2517.1223,4634.3894 2519.1868,4634.3894 Q2519.7678,4634.3894 2520.301,4634.5124 Q2520.8342,4634.6355 2521.2991,4634.8816 L2521.2991,4637.1237 Q2520.7796,4636.6452 2520.2908,4636.4231 Q2519.802,4636.2009 2519.2825,4636.2009 Q2518.1751,4636.2009 2517.6111,4637.0793 Q2517.0471,4637.9577 2517.0471,4639.6872 Q2517.0471,4641.4099 2517.6111,4642.2883 Q2518.1751,4643.1667 2519.2825,4643.1667 Q2519.802,4643.1667 2520.2908,4642.9446 Q2520.7796,4642.7224 2521.2991,4642.2439 Z " fill="#EAEAEA"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="165.4241" x="2535.7938" y="4644.304">SystemDateTimeProvider</text><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="2491.18" x2="2718.4473" y1="4654.53" y2="4654.53"/><line style="stroke:#AFAFAF;stroke-width:0.5;" x1="2491.18" x2="2718.4473" y1="4662.53" y2="4662.53"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="2501.18" cy="4677.144" fill="#595959" rx="3" ry="3" style="stroke:#ABABAB;stroke-width:1;"/></g><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="204.2673" x="2509.18" y="4680.418">GetUtcTimestamp() : std::string</text></g><!--reverse link ApplicationOptions to GeneratorOptions--><g class="link" data-entity-1="ent0020" data-entity-2="ent0018" data-link-type="composition" data-source-line="183" id="lnk21"><path codeLine="183" d="M1588.58,1616.64 C1687.85,1616.64 1822.35,1616.64 1925.73,1616.64" fill="none" id="ApplicationOptions-backto-GeneratorOptions" style="stroke:#9A9A9A;stroke-width:1;"/><polygon fill="#9A9A9A" points="1576.58,1616.64,1582.58,1620.64,1588.58,1616.64,1582.58,1612.64,1576.58,1616.64" style="stroke:#9A9A9A;stroke-width:1;"/></g><!--reverse link ApplicationOptions to PipelineOptions--><g class="link" data-entity-1="ent0020" data-entity-2="ent0019" data-link-type="composition" data-source-line="184" id="lnk22"><path codeLine="184" d="M1571,1563.01 C1571,1533.29 1571,1510.54 1571,1510.54 C1571,1510.54 1782.78,1510.54 1924.24,1510.54" fill="none" id="ApplicationOptions-backto-PipelineOptions" style="stroke:#9A9A9A;stroke-width:1;"/><polygon fill="#9A9A9A" points="1571,1575.01,1575,1569.01,1571,1563.01,1567,1569.01,1571,1575.01" style="stroke:#9A9A9A;stroke-width:1;"/></g><!--reverse link GeneratorOptions to SamplingOptions--><g class="link" data-entity-1="ent0018" data-entity-2="ent0017" data-link-type="composition" data-source-line="185" id="lnk23"><path codeLine="185" d="M2182.88,1616.25 C2285.58,1616.25 2418.07,1616.25 2511.58,1616.25" fill="none" id="GeneratorOptions-backto-SamplingOptions" style="stroke:#9A9A9A;stroke-width:1;"/><polygon fill="#9A9A9A" points="2170.88,1616.25,2176.88,1620.25,2182.88,1616.25,2176.88,1612.25,2170.88,1616.25" style="stroke:#9A9A9A;stroke-width:1;"/></g><!--reverse link LocationContext to Completeness--><g class="link" data-entity-1="ent0004" data-entity-2="ent0024" data-link-type="composition" data-source-line="186" id="lnk25"><path codeLine="186" d="M2171.69,1209.64 C2286.64,1209.64 2449.95,1209.64 2542.52,1209.64" fill="none" id="LocationContext-backto-Completeness" style="stroke:#9A9A9A;stroke-width:1;"/><polygon fill="#9A9A9A" points="2159.69,1209.64,2165.69,1213.64,2171.69,1209.64,2165.69,1205.64,2159.69,1209.64" style="stroke:#9A9A9A;stroke-width:1;"/></g><!--reverse link LogEntry to LogLevel--><g class="link" data-entity-1="ent0029" data-entity-2="ent0027" data-link-type="composition" data-source-line="239" id="lnk33"><path codeLine="239" d="M2237.62,3009.31 C2355.48,3009.31 2489.33,3009.31 2560.94,3009.31" fill="none" id="LogEntry-backto-LogLevel" style="stroke:#9A9A9A;stroke-width:1;"/><polygon fill="#9A9A9A" points="2225.62,3009.31,2231.62,3013.31,2237.62,3009.31,2231.62,3005.31,2225.62,3009.31" style="stroke:#9A9A9A;stroke-width:1;"/></g><!--reverse link LogEntry to PipelinePhase--><g class="link" data-entity-1="ent0029" data-entity-2="ent0028" data-link-type="composition" data-source-line="240" id="lnk34"><path codeLine="240" d="M2237.62,2905.08 C2331.15,2905.08 2430.29,2905.08 2507.98,2905.08" fill="none" id="LogEntry-backto-PipelinePhase" style="stroke:#9A9A9A;stroke-width:1;"/><polygon fill="#9A9A9A" points="2225.62,2905.08,2231.62,2909.08,2237.62,2905.08,2231.62,2901.08,2225.62,2905.08" style="stroke:#9A9A9A;stroke-width:1;"/></g><!--link PipelineLogger to LogEntry--><g class="link" data-entity-1="ent0031" data-entity-2="ent0029" data-link-type="dependency" data-source-line="241" id="lnk35"><path codeLine="241" d="M1609.75,3018.37 C1688.58,3018.37 1781.35,3018.37 1865.19,3018.37" fill="none" id="PipelineLogger-to-LogEntry" style="stroke:#9A9A9A;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="#9A9A9A" points="1871.19,3018.37,1862.19,3014.37,1866.19,3018.37,1862.19,3022.37,1871.19,3018.37" style="stroke:#9A9A9A;stroke-width:1;"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="36.2985" x="1703.47" y="3033.258">emits</text></g><!--link LogWorker to LogEntry--><g class="link" data-entity-1="ent0032" data-entity-2="ent0029" data-link-type="dependency" data-source-line="242" id="lnk36"><path codeLine="242" d="M1632.94,2914.03 C1707.38,2914.03 1789.38,2914.03 1865.19,2914.03" fill="none" id="LogWorker-to-LogEntry" style="stroke:#9A9A9A;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="#9A9A9A" points="1871.19,2914.03,1862.19,2910.03,1866.19,2914.03,1862.19,2918.03,1871.19,2914.03" style="stroke:#9A9A9A;stroke-width:1;"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="66.857" x="1685.06" y="2928.918">consumes</text></g><!--reverse link BiergartenPipelineOrchestrator to DataPreloader--><g class="link" data-entity-1="ent0049" data-entity-2="ent0048" data-link-type="composition" data-source-line="511" id="lnk70"><path codeLine="511" d="M542.16,2502.64 C561.95,2502.64 570,2502.64 589.91,2502.64" fill="none" id="BiergartenPipelineOrchestrator-backto-DataPreloader" style="stroke:#9A9A9A;stroke-width:1;"/><polygon fill="#9A9A9A" points="530.16,2502.64,536.16,2506.64,542.16,2502.64,536.16,2498.64,530.16,2502.64" style="stroke:#9A9A9A;stroke-width:1;"/></g><!--reverse link BiergartenPipelineOrchestrator to EnrichmentService--><g class="link" data-entity-1="ent0049" data-entity-2="ent0053" data-link-type="composition" data-source-line="512" id="lnk71"><path codeLine="512" d="M542.42,2671.46 C638.44,2671.46 713,2671.46 713,2671.46 C713,2671.46 713,3955.9 713,4226.84" fill="none" id="BiergartenPipelineOrchestrator-backto-EnrichmentService" style="stroke:#9A9A9A;stroke-width:1;"/><polygon fill="#9A9A9A" points="530.42,2671.46,536.42,2675.46,542.42,2671.46,536.42,2667.46,530.42,2671.46" style="stroke:#9A9A9A;stroke-width:1;"/></g><!--reverse link BiergartenPipelineOrchestrator to DataGenerator--><g class="link" data-entity-1="ent0049" data-entity-2="ent0058" data-link-type="composition" data-source-line="513" id="lnk72"><path codeLine="513" d="M542.35,2364.16 C700.85,2364.16 863,2364.16 863,2364.16 C863,2364.16 863,2290.65 863,2216.71" fill="none" id="BiergartenPipelineOrchestrator-backto-DataGenerator" style="stroke:#9A9A9A;stroke-width:1;"/><polygon fill="#9A9A9A" points="530.35,2364.16,536.35,2368.16,542.35,2364.16,536.35,2360.16,530.35,2364.16" style="stroke:#9A9A9A;stroke-width:1;"/></g><!--reverse link BiergartenPipelineOrchestrator to ExportService--><g class="link" data-entity-1="ent0049" data-entity-2="ent0066" data-link-type="composition" data-source-line="514" id="lnk73"><path codeLine="514" d="M542.37,2691.69 C608.21,2691.69 649,2691.69 649,2691.69 C649,2691.69 649,4112.39 649,4497.4" fill="none" id="BiergartenPipelineOrchestrator-backto-ExportService" style="stroke:#9A9A9A;stroke-width:1;"/><polygon fill="#9A9A9A" points="530.37,2691.69,536.37,2695.69,542.37,2691.69,536.37,2687.69,530.37,2691.69" style="stroke:#9A9A9A;stroke-width:1;"/></g><!--reverse link BiergartenPipelineOrchestrator to CheckinDistributionStrategy--><g class="link" data-entity-1="ent0049" data-entity-2="ent0045" data-link-type="composition" data-source-line="515" id="lnk74"><path codeLine="515" d="M542.38,2610.78 C982.12,2610.78 1827,2610.78 1827,2610.78 C1827,2610.78 1827,3375.74 1827,3624.5" fill="none" id="BiergartenPipelineOrchestrator-backto-CheckinDistributionStrategy" style="stroke:#9A9A9A;stroke-width:1;"/><polygon fill="#9A9A9A" points="530.38,2610.78,536.38,2614.78,542.38,2610.78,536.38,2606.78,530.38,2610.78" style="stroke:#9A9A9A;stroke-width:1;"/></g><!--reverse link BiergartenPipelineOrchestrator to SamplingStrategy--><g class="link" data-entity-1="ent0049" data-entity-2="ent0041" data-link-type="composition" data-source-line="516" id="lnk75"><path codeLine="516" d="M542.17,2631.01 C977.85,2631.01 1810,2631.01 1810,2631.01 C1810,2631.01 1810,3606.64 1810,3819.11" fill="none" id="BiergartenPipelineOrchestrator-backto-SamplingStrategy" style="stroke:#9A9A9A;stroke-width:1;"/><polygon fill="#9A9A9A" points="530.17,2631.01,536.17,2635.01,542.17,2631.01,536.17,2627.01,530.17,2631.01" style="stroke:#9A9A9A;stroke-width:1;"/></g><!--reverse link BiergartenPipelineOrchestrator to BeerSelectionStrategy--><g class="link" data-entity-1="ent0049" data-entity-2="ent0043" data-link-type="composition" data-source-line="517" id="lnk76"><path codeLine="517" d="M542.24,2590.55 C988.02,2590.55 1853,2590.55 1853,2590.55 C1853,2590.55 1853,3278.23 1853,3470.96" fill="none" id="BiergartenPipelineOrchestrator-backto-BeerSelectionStrategy" style="stroke:#9A9A9A;stroke-width:1;"/><polygon fill="#9A9A9A" points="530.24,2590.55,536.24,2594.55,542.24,2590.55,536.24,2586.55,530.24,2590.55" style="stroke:#9A9A9A;stroke-width:1;"/></g><!--reverse link BiergartenPipelineOrchestrator to ApplicationOptions--><g class="link" data-entity-1="ent0049" data-entity-2="ent0020" data-link-type="composition" data-source-line="518" id="lnk77"><path codeLine="518" d="M446,2280.95 C446,2018.96 446,1616.64 446,1616.64 C446,1616.64 1095.57,1616.64 1358.83,1616.64" fill="none" id="BiergartenPipelineOrchestrator-backto-ApplicationOptions" style="stroke:#9A9A9A;stroke-width:1;"/><polygon fill="#9A9A9A" points="446,2292.95,450,2286.95,446,2280.95,442,2286.95,446,2292.95" style="stroke:#9A9A9A;stroke-width:1;"/></g><!--reverse link BiergartenPipelineOrchestrator to Logger--><g class="link" data-entity-1="ent0049" data-entity-2="ent0030" data-link-type="composition" data-source-line="519" id="lnk78"><path codeLine="519" d="M542.35,2651.24 C700.85,2651.24 863,2651.24 863,2651.24 C863,2651.24 863,2809.65 863,2892.88" fill="none" id="BiergartenPipelineOrchestrator-backto-Logger" style="stroke:#9A9A9A;stroke-width:1;"/><polygon fill="#9A9A9A" points="530.35,2651.24,536.35,2655.24,542.35,2651.24,536.35,2647.24,530.35,2651.24" style="stroke:#9A9A9A;stroke-width:1;"/></g><!--reverse link BiergartenPipelineOrchestrator to GeneratedUser--><g class="link" data-entity-1="ent0049" data-entity-2="ent0014" data-link-type="composition" data-source-line="522" id="lnk79"><path codeLine="522" d="M277,2281.13 C277,1876.2 277,1037.64 277,1037.64 C277,1037.64 1091.64,1037.64 1373.26,1037.64" fill="none" id="BiergartenPipelineOrchestrator-backto-GeneratedUser" style="stroke:#9A9A9A;stroke-width:1;"/><polygon fill="#9A9A9A" points="277,2293.13,281,2287.13,277,2281.13,273,2287.13,277,2293.13" style="stroke:#9A9A9A;stroke-width:1;"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="75.1799" x="201" y="1132.138">user_pool_</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="21.84" x="1343.6057" y="1052.2831">0..*</text></g><!--reverse link BiergartenPipelineOrchestrator to GeneratedBrewery--><g class="link" data-entity-1="ent0049" data-entity-2="ent0012" data-link-type="composition" data-source-line="523" id="lnk80"><path codeLine="523" d="M108,2281.06 C108,1801.17 108,675.64 108,675.64 C108,675.64 892.36,675.64 1269.61,675.64" fill="none" id="BiergartenPipelineOrchestrator-backto-GeneratedBrewery" style="stroke:#9A9A9A;stroke-width:1;"/><polygon fill="#9A9A9A" points="108,2293.06,112,2287.06,108,2281.06,104,2287.06,108,2293.06" style="stroke:#9A9A9A;stroke-width:1;"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="100.4885" x="7" y="918.428">brewery_pool_</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="21.84" x="1240.4789" y="689.884">0..*</text></g><!--reverse link BiergartenPipelineOrchestrator to GeneratedBeer--><g class="link" data-entity-1="ent0049" data-entity-2="ent0013" data-link-type="composition" data-source-line="524" id="lnk81"><path codeLine="524" d="M192,2280.92 C192,1837.38 192,856.64 192,856.64 C192,856.64 1068.92,856.64 1368.65,856.64" fill="none" id="BiergartenPipelineOrchestrator-backto-GeneratedBeer" style="stroke:#9A9A9A;stroke-width:1;"/><polygon fill="#9A9A9A" points="192,2292.92,196,2286.92,192,2280.92,188,2286.92,192,2292.92" style="stroke:#9A9A9A;stroke-width:1;"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="76.8494" x="115" y="1001.338">beer_pool_</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="21.84" x="1338.955" y="871.254">0..*</text></g><!--reverse link BiergartenPipelineOrchestrator to GeneratedCheckin--><g class="link" data-entity-1="ent0049" data-entity-2="ent0015" data-link-type="composition" data-source-line="525" id="lnk82"><path codeLine="525" d="M361,2280.93 C361,1966.57 361,1421.64 361,1421.64 C361,1421.64 1096.86,1421.64 1368.5,1421.64" fill="none" id="BiergartenPipelineOrchestrator-backto-GeneratedCheckin" style="stroke:#9A9A9A;stroke-width:1;"/><polygon fill="#9A9A9A" points="361,2292.93,365,2286.93,361,2280.93,357,2286.93,361,2292.93" style="stroke:#9A9A9A;stroke-width:1;"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="97.4399" x="331.1" y="1436.528">checkin_pool_</text><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="21.84" x="1339.1345" y="1436.2258">0..*</text></g><!--reverse link DataPreloader to JsonLoader--><g class="link" data-entity-1="ent0048" data-entity-2="ent0051" data-link-type="extension" data-source-line="528" id="lnk83"><path codeLine="528" d="M1153.47,2502.64 C1173.22,2502.64 1175.14,2502.64 1194.88,2502.64" fill="none" id="DataPreloader-backto-JsonLoader" style="stroke:#9A9A9A;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="1135.47,2502.64,1153.47,2508.64,1153.47,2496.64,1135.47,2502.64" style="stroke:#9A9A9A;stroke-width:1;"/></g><!--reverse link Logger to PipelineLogger--><g class="link" data-entity-1="ent0030" data-entity-2="ent0031" data-link-type="extension" data-source-line="529" id="lnk84"><path codeLine="529" d="M989.15,2977.15 C1163.38,2977.15 1468,2977.15 1468,2977.15 C1468,2977.15 1468,2985.86 1468,2997.16" fill="none" id="Logger-backto-PipelineLogger" style="stroke:#9A9A9A;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="971.15,2977.15,989.15,2983.15,989.15,2971.15,971.15,2977.15" style="stroke:#9A9A9A;stroke-width:1;"/></g><!--reverse link ContextStrategy to BreweryContextStrategy--><g class="link" data-entity-1="ent0038" data-entity-2="ent0039" data-link-type="extension" data-source-line="530" id="lnk85"><path codeLine="530" d="M2268.15,4050.3 C2427.43,4050.3 2605,4050.3 2605,4050.3 C2605,4050.3 2605,4038.26 2605,4024.33" fill="none" id="ContextStrategy-backto-BreweryContextStrategy" style="stroke:#9A9A9A;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="2250.15,4050.3,2268.15,4056.3,2268.15,4044.3,2250.15,4050.3" style="stroke:#9A9A9A;stroke-width:1;"/></g><!--reverse link ContextStrategy to BeerContextStrategy--><g class="link" data-entity-1="ent0038" data-entity-2="ent0040" data-link-type="extension" data-source-line="531" id="lnk86"><path codeLine="531" d="M2268.09,4099.64 C2318,4099.64 2353.48,4099.64 2403.38,4099.64" fill="none" id="ContextStrategy-backto-BeerContextStrategy" style="stroke:#9A9A9A;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="2250.09,4099.64,2268.09,4105.64,2268.09,4093.64,2250.09,4099.64" style="stroke:#9A9A9A;stroke-width:1;"/></g><!--reverse link SamplingStrategy to UniformSamplingStrategy--><g class="link" data-entity-1="ent0041" data-entity-2="ent0042" data-link-type="extension" data-source-line="532" id="lnk87"><path codeLine="532" d="M2314.93,3862.2 C2334.62,3862.2 2336.51,3862.2 2356.2,3862.2" fill="none" id="SamplingStrategy-backto-UniformSamplingStrategy" style="stroke:#9A9A9A;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="2296.93,3862.2,2314.93,3868.2,2314.93,3856.2,2296.93,3862.2" style="stroke:#9A9A9A;stroke-width:1;"/></g><!--reverse link BeerSelectionStrategy to RandomBeerSelectionStrategy--><g class="link" data-entity-1="ent0043" data-entity-2="ent0044" data-link-type="extension" data-source-line="533" id="lnk88"><path codeLine="533" d="M2280.35,3520.64 C2322.46,3520.64 2348.66,3520.64 2390.78,3520.64" fill="none" id="BeerSelectionStrategy-backto-RandomBeerSelectionStrategy" style="stroke:#9A9A9A;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="2262.35,3520.64,2280.35,3526.64,2280.35,3514.64,2262.35,3520.64" style="stroke:#9A9A9A;stroke-width:1;"/></g><!--reverse link CheckinDistributionStrategy to JCurveCheckinStrategy--><g class="link" data-entity-1="ent0045" data-entity-2="ent0046" data-link-type="extension" data-source-line="534" id="lnk89"><path codeLine="534" d="M2295.95,3706.2 C2328.12,3706.2 2343.2,3706.2 2375.38,3706.2" fill="none" id="CheckinDistributionStrategy-backto-JCurveCheckinStrategy" style="stroke:#9A9A9A;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="2277.95,3706.2,2295.95,3712.2,2295.95,3700.2,2277.95,3706.2" style="stroke:#9A9A9A;stroke-width:1;"/></g><!--reverse link EnrichmentService to WikipediaService--><g class="link" data-entity-1="ent0053" data-entity-2="ent0054" data-link-type="extension" data-source-line="535" id="lnk90"><path codeLine="535" d="M1070.78,4276.64 C1135.32,4276.64 1189.81,4276.64 1255.92,4276.64" fill="none" id="EnrichmentService-backto-WikipediaService" style="stroke:#9A9A9A;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="1052.78,4276.64,1070.78,4282.64,1070.78,4270.64,1052.78,4276.64" style="stroke:#9A9A9A;stroke-width:1;"/></g><!--reverse link WebClient to CURLWebClient--><g class="link" data-entity-1="ent0055" data-entity-2="ent0056" data-link-type="extension" data-source-line="536" id="lnk91"><path codeLine="536" d="M2234.12,4286.64 C2304.03,4286.64 2367.06,4286.64 2436.99,4286.64" fill="none" id="WebClient-backto-CURLWebClient" style="stroke:#9A9A9A;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="2216.12,4286.64,2234.12,4292.64,2234.12,4280.64,2216.12,4286.64" style="stroke:#9A9A9A;stroke-width:1;"/></g><!--reverse link DataGenerator to MockGenerator--><g class="link" data-entity-1="ent0058" data-entity-2="ent0059" data-link-type="extension" data-source-line="537" id="lnk92"><path codeLine="537" d="M1068.39,1925.54 C1246.16,1925.54 1468,1925.54 1468,1925.54 C1468,1925.54 1468,1914.49 1468,1899.59" fill="none" id="DataGenerator-backto-MockGenerator" style="stroke:#9A9A9A;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="1050.39,1925.54,1068.39,1931.54,1068.39,1919.54,1050.39,1925.54" style="stroke:#9A9A9A;stroke-width:1;"/></g><!--reverse link DataGenerator to LlamaGenerator--><g class="link" data-entity-1="ent0058" data-entity-2="ent0060" data-link-type="extension" data-source-line="538" id="lnk93"><path codeLine="538" d="M1068.3,2075.25 C1138.22,2075.25 1199.76,2075.25 1270.5,2075.25" fill="none" id="DataGenerator-backto-LlamaGenerator" style="stroke:#9A9A9A;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="1050.3,2075.25,1068.3,2081.25,1068.3,2069.25,1050.3,2075.25" style="stroke:#9A9A9A;stroke-width:1;"/></g><!--reverse link PromptFormatter to Gemma4JinjaPromptFormatter--><g class="link" data-entity-1="ent0061" data-entity-2="ent0062" data-link-type="extension" data-source-line="539" id="lnk94"><path codeLine="539" d="M2222.16,2075.64 C2301.88,2075.64 2380.37,2075.64 2458.69,2075.64" fill="none" id="PromptFormatter-backto-Gemma4JinjaPromptFormatter" style="stroke:#9A9A9A;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="2204.16,2075.64,2222.16,2081.64,2222.16,2069.64,2204.16,2075.64" style="stroke:#9A9A9A;stroke-width:1;"/></g><!--reverse link ExportService to SqliteExportService--><g class="link" data-entity-1="ent0066" data-entity-2="ent0067" data-link-type="extension" data-source-line="540" id="lnk95"><path codeLine="540" d="M1118.42,4592.64 C1160.94,4592.64 1187.26,4592.64 1229.78,4592.64" fill="none" id="ExportService-backto-SqliteExportService" style="stroke:#9A9A9A;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="1100.42,4592.64,1118.42,4598.64,1118.42,4586.64,1100.42,4592.64" style="stroke:#9A9A9A;stroke-width:1;"/></g><!--reverse link DateTimeProvider to SystemDateTimeProvider--><g class="link" data-entity-1="ent0068" data-entity-2="ent0069" data-link-type="extension" data-source-line="541" id="lnk96"><path codeLine="541" d="M2181.38,4656.64 C2277,4656.64 2394.44,4656.64 2490.01,4656.64" fill="none" id="DateTimeProvider-backto-SystemDateTimeProvider" style="stroke:#9A9A9A;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="2163.38,4656.64,2181.38,4662.64,2181.38,4650.64,2163.38,4656.64" style="stroke:#9A9A9A;stroke-width:1;"/></g><!--reverse link WikipediaService to WebClient--><g class="link" data-entity-1="ent0054" data-entity-2="ent0055" data-link-type="composition" data-source-line="544" id="lnk97"><path codeLine="544" d="M1691.4,4286.64 C1757.7,4286.64 1817.9,4286.64 1880.73,4286.64" fill="none" id="WikipediaService-backto-WebClient" style="stroke:#9A9A9A;stroke-width:1;"/><polygon fill="#9A9A9A" points="1679.4,4286.64,1685.4,4290.64,1691.4,4286.64,1685.4,4282.64,1679.4,4286.64" style="stroke:#9A9A9A;stroke-width:1;"/></g><!--link WikipediaService to ContextStrategy--><g class="link" data-entity-1="ent0054" data-entity-2="ent0038" data-link-type="dependency" data-source-line="545" id="lnk98"><path codeLine="545" d="M1679.47,4227.63 C1773.81,4227.63 1864,4227.63 1864,4227.63 C1864,4227.63 1864,4186.31 1864,4147.5" fill="none" id="WikipediaService-to-ContextStrategy" style="stroke:#9A9A9A;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="#9A9A9A" points="1864,4141.5,1860,4150.5,1864,4146.5,1868,4150.5,1864,4141.5" style="stroke:#9A9A9A;stroke-width:1;"/></g><!--reverse link LlamaGenerator to PromptFormatter--><g class="link" data-entity-1="ent0060" data-entity-2="ent0061" data-link-type="composition" data-source-line="546" id="lnk99"><path codeLine="546" d="M1677.11,2075.64 C1751.43,2075.64 1822.82,2075.64 1892.8,2075.64" fill="none" id="LlamaGenerator-backto-PromptFormatter" style="stroke:#9A9A9A;stroke-width:1;"/><polygon fill="#9A9A9A" points="1665.11,2075.64,1671.11,2079.64,1677.11,2075.64,1671.11,2071.64,1665.11,2075.64" style="stroke:#9A9A9A;stroke-width:1;"/></g><!--link LlamaGenerator to GeneratorOptions--><g class="link" data-entity-1="ent0060" data-entity-2="ent0018" data-link-type="dependency" data-source-line="547" id="lnk100"><path codeLine="547" d="M1658,1933.72 C1658,1814.15 1658,1662.42 1658,1662.42 C1658,1662.42 1805.23,1662.42 1919.7,1662.42" fill="none" id="LlamaGenerator-to-GeneratorOptions" style="stroke:#9A9A9A;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="#9A9A9A" points="1925.7,1662.42,1916.7,1658.42,1920.7,1662.42,1916.7,1666.42,1925.7,1662.42" style="stroke:#9A9A9A;stroke-width:1;"/></g><!--reverse link SqliteExportService to DateTimeProvider--><g class="link" data-entity-1="ent0067" data-entity-2="ent0068" data-link-type="composition" data-source-line="548" id="lnk101"><path codeLine="548" d="M1717.57,4656.64 C1796.36,4656.64 1868.47,4656.64 1933.67,4656.64" fill="none" id="SqliteExportService-backto-DateTimeProvider" style="stroke:#9A9A9A;stroke-width:1;"/><polygon fill="#9A9A9A" points="1705.57,4656.64,1711.57,4660.64,1717.57,4656.64,1711.57,4652.64,1705.57,4656.64" style="stroke:#9A9A9A;stroke-width:1;"/></g><!--reverse link PipelineLogger to BoundedChannel--><g class="link" data-entity-1="ent0031" data-entity-2="ent0064" data-link-type="aggregation" data-source-line="551" id="lnk102"><path codeLine="551" d="M1622.02,3068.71 C1793.83,3068.71 2048,3068.71 2048,3068.71 C2048,3068.71 2048,3121.44 2048,3174.18" fill="none" id="PipelineLogger-backto-BoundedChannel" style="stroke:#9A9A9A;stroke-width:1;"/><polygon fill="none" points="1610.02,3068.71,1616.02,3072.71,1622.02,3068.71,1616.02,3064.71,1610.02,3068.71" style="stroke:#9A9A9A;stroke-width:1;"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="43.7816" x="1837.74" y="3083.598">logs to</text></g><!--reverse link LogWorker to BoundedChannel--><g class="link" data-entity-1="ent0032" data-entity-2="ent0064" data-link-type="aggregation" data-source-line="552" id="lnk103"><path codeLine="552" d="M1621,2974.65 C1621,3085.68 1621,3279.64 1621,3279.64 C1621,3279.64 1789.27,3279.64 1914.66,3279.64" fill="none" id="LogWorker-backto-BoundedChannel" style="stroke:#9A9A9A;stroke-width:1;"/><polygon fill="none" points="1621,2962.65,1617,2968.65,1621,2974.65,1625,2968.65,1621,2962.65" style="stroke:#9A9A9A;stroke-width:1;"/><text fill="#EAEAEA" font-family="'DM Sans'" font-size="14" lengthAdjust="spacing" textLength="74.4277" x="1546" y="3282.858">drains from</text></g><!--reverse link EnrichedCity to Location--><g class="link" data-entity-1="ent0005" data-entity-2="ent0003" data-link-type="composition" data-source-line="555" id="lnk104"><path codeLine="555" d="M1577.12,1177.9 C1709.53,1177.9 1918,1177.9 1918,1177.9 C1918,1177.9 1918,1047.66 1918,953.03" fill="none" id="EnrichedCity-backto-Location" style="stroke:#9A9A9A;stroke-width:1;"/><polygon fill="#9A9A9A" points="1565.12,1177.9,1571.12,1181.9,1577.12,1177.9,1571.12,1173.9,1565.12,1177.9" style="stroke:#9A9A9A;stroke-width:1;"/></g><!--reverse link EnrichedCity to LocationContext--><g class="link" data-entity-1="ent0005" data-entity-2="ent0004" data-link-type="composition" data-source-line="556" id="lnk105"><path codeLine="556" d="M1577.22,1205.38 C1680.04,1205.38 1829.73,1205.38 1937.39,1205.38" fill="none" id="EnrichedCity-backto-LocationContext" style="stroke:#9A9A9A;stroke-width:1;"/><polygon fill="#9A9A9A" points="1565.22,1205.38,1571.22,1209.38,1577.22,1205.38,1571.22,1201.38,1565.22,1205.38" style="stroke:#9A9A9A;stroke-width:1;"/></g><!--reverse link GeneratedBrewery to Location--><g class="link" data-entity-1="ent0012" data-entity-2="ent0003" data-link-type="composition" data-source-line="557" id="lnk106"><path codeLine="557" d="M1661,756.6 C1661,770.96 1661,769.84 1661,769.84 C1661,769.84 1793.79,769.84 1903.89,769.84" fill="none" id="GeneratedBrewery-backto-Location" style="stroke:#9A9A9A;stroke-width:1;"/><polygon fill="#9A9A9A" points="1661,744.6,1657,750.6,1661,756.6,1665,750.6,1661,744.6" style="stroke:#9A9A9A;stroke-width:1;"/></g><!--reverse link GeneratedBrewery to BreweryResult--><g class="link" data-entity-1="ent0012" data-entity-2="ent0007" data-link-type="composition" data-source-line="558" id="lnk107"><path codeLine="558" d="M1615,594.77 C1615,480.86 1615,277.65 1615,277.65 C1615,277.65 1813.23,277.65 1941.57,277.65" fill="none" id="GeneratedBrewery-backto-BreweryResult" style="stroke:#9A9A9A;stroke-width:1;"/><polygon fill="#9A9A9A" points="1615,606.77,1619,600.77,1615,594.77,1611,600.77,1615,606.77" style="stroke:#9A9A9A;stroke-width:1;"/></g><!--reverse link GeneratedBeer to Location--><g class="link" data-entity-1="ent0013" data-entity-2="ent0003" data-link-type="composition" data-source-line="559" id="lnk108"><path codeLine="559" d="M1578.86,895.48 C1671.51,895.48 1798.92,895.48 1903.94,895.48" fill="none" id="GeneratedBeer-backto-Location" style="stroke:#9A9A9A;stroke-width:1;"/><polygon fill="#9A9A9A" points="1566.86,895.48,1572.86,899.48,1578.86,895.48,1572.86,891.48,1566.86,895.48" style="stroke:#9A9A9A;stroke-width:1;"/></g><!--reverse link GeneratedBeer to BeerStyle--><g class="link" data-entity-1="ent0013" data-entity-2="ent0006" data-link-type="composition" data-source-line="560" id="lnk109"><path codeLine="560" d="M1578.65,817.8 C1663.45,817.8 1760,817.8 1760,817.8 C1760,817.8 1760,439.64 1760,439.64 C1760,439.64 1876.57,439.64 1961.5,439.64" fill="none" id="GeneratedBeer-backto-BeerStyle" style="stroke:#9A9A9A;stroke-width:1;"/><polygon fill="#9A9A9A" points="1566.65,817.8,1572.65,821.8,1578.65,817.8,1572.65,813.8,1566.65,817.8" style="stroke:#9A9A9A;stroke-width:1;"/></g><!--reverse link GeneratedBeer to BeerResult--><g class="link" data-entity-1="ent0013" data-entity-2="ent0008" data-link-type="composition" data-source-line="561" id="lnk110"><path codeLine="561" d="M1578.93,856.64 C1670.38,856.64 1780,856.64 1780,856.64 C1780,856.64 1780,666.25 1780,666.25 C1780,666.25 1866.71,666.25 1941.57,666.25" fill="none" id="GeneratedBeer-backto-BeerResult" style="stroke:#9A9A9A;stroke-width:1;"/><polygon fill="#9A9A9A" points="1566.93,856.64,1572.93,860.64,1578.93,856.64,1572.93,852.64,1566.93,856.64" style="stroke:#9A9A9A;stroke-width:1;"/></g><!--reverse link GeneratedUser to Location--><g class="link" data-entity-1="ent0014" data-entity-2="ent0003" data-link-type="composition" data-source-line="562" id="lnk111"><path codeLine="562" d="M1574.24,982.74 C1704.44,982.74 1911,982.74 1911,982.74 C1911,982.74 1911,970.12 1911,952.86" fill="none" id="GeneratedUser-backto-Location" style="stroke:#9A9A9A;stroke-width:1;"/><polygon fill="#9A9A9A" points="1562.24,982.74,1568.24,986.74,1574.24,982.74,1568.24,978.74,1562.24,982.74" style="stroke:#9A9A9A;stroke-width:1;"/></g><!--reverse link GeneratedUser to UserResult--><g class="link" data-entity-1="ent0014" data-entity-2="ent0009" data-link-type="composition" data-source-line="563" id="lnk112"><path codeLine="563" d="M1574.29,1037.64 C1686.14,1037.64 1858.53,1037.64 1965.18,1037.64" fill="none" id="GeneratedUser-backto-UserResult" style="stroke:#9A9A9A;stroke-width:1;"/><polygon fill="#9A9A9A" points="1562.29,1037.64,1568.29,1041.64,1574.29,1037.64,1568.29,1033.64,1562.29,1037.64" style="stroke:#9A9A9A;stroke-width:1;"/></g><!--reverse link GeneratedCheckin to CheckinResult--><g class="link" data-entity-1="ent0015" data-entity-2="ent0010" data-link-type="composition" data-source-line="564" id="lnk113"><path codeLine="564" d="M1578.86,1383.47 C1685.61,1383.47 1842.41,1383.47 1949.18,1383.47" fill="none" id="GeneratedCheckin-backto-CheckinResult" style="stroke:#9A9A9A;stroke-width:1;"/><polygon fill="#9A9A9A" points="1566.86,1383.47,1572.86,1387.47,1578.86,1383.47,1572.86,1379.47,1566.86,1383.47" style="stroke:#9A9A9A;stroke-width:1;"/></g><!--reverse link GeneratedRating to RatingResult--><g class="link" data-entity-1="ent0016" data-entity-2="ent0011" data-link-type="composition" data-source-line="565" id="lnk114"><path codeLine="565" d="M1577.22,131.97 C1696.27,131.97 1882.26,131.97 1983.89,131.97" fill="none" id="GeneratedRating-backto-RatingResult" style="stroke:#9A9A9A;stroke-width:1;"/><polygon fill="#9A9A9A" points="1565.22,131.97,1571.22,135.97,1577.22,131.97,1571.22,127.97,1565.22,131.97" style="stroke:#9A9A9A;stroke-width:1;"/></g><?plantuml-src xHljRkEuyR-VWaY1FUSk2JQRtRrR8nV0iPt41oTnRUUs1nGGQ8cnrSYYZfAIJQyBz27wX7sI3h_qGL6sxCrrYxREZzZYp70ud6zItw0V6tzQtw3UxSt5yF9kqfqDRs_GApIT_J8Qtbp2o1Pa0dAVe8GYvY-M2V9yHjp4fs4hVl3323EyGe4VakGv8eYoP4bRGFxmy13DdYEwO3XQFlEV1N2FtECqI2vecDpW5K5x_MiqnM6yPuUP-dybwFXjOJ3nau3aw3_Ju6597_Ti40BvpMlDqsL0vpX0FHfG5XjipR7xi60q3JqnZFvmqOE_x-rCAP3ZjyS_lExP9gu3w396dzJW-tVlBqvEMeLHDy1nZ7vh8NHkSZCu7_G69p1oHR17M6MyTzv_S_wEOr86u-hfs-wx7qw-XwUMUH6gClgvo4q4S-05iVFJFnyC-ltQ-JQG3cdokz1TqP2wIqP1BnXv92mchPRO4pHR4dJk4xR0B24XwkC4ex4V4Qwyw9z__mSQ1pWCYGUISfT-0agUCjBQpbI-GVtRw-xm1btVzWUZwNR8MjfxVRh2VeYkgKU2U0-a1CkMYZ6YBkQs9oI7q7V8zPDdr45nudKwSSBySA46uWGdn8aOVVH3brX1_9YU7Bz_xxonZhgm9GbxNejvR1qDWCd00M4kKbXEh64UGQAKdHRWppG2h2b9FSwbHzDvG392uQ8oyBagZHwe1FcKP48HF-nhMaK1WTqdCMUhL_Yf8PQOEMBfd03u3YSH8-0e-B_JKnAcgxEpAkf56WJYonZKoyVoUtSUap0fCpq8cUykYTVZE_TRGMHYNplPeZAMGxKSOxLbgkU4i6do792CPCXTeqq87ebTvaTgkkhuoWyTF7-4iVk0uaG_nPziJm7MdwVmr0-BaCLdHIuPUIBiUK9YyA8bJXqIRcAs3aIW2vtRIC4EPOZnFumxQSnyPsqZrIsf4VrTN5bP2ezgjMJkK_k44FiVGNMT9oBIWNpomcIz9N718nlpkVmfyHokNtRx545XpVPCm032XK4sTYaZXX0s4Re4msNW83sbaHcnkVpj-1v7_pM0E70232VltswqL8KA0oKrBzknOxWWmwWx7OjFMcXcRMApBWgqE5yH_AXVpXUiLojbvdeA4wh79GbilGokiYLbtOLBZWTFS_NVbHkbqsLjvkwlZgVr76yKlABFmrJHcdPbNvfEGt6krvcDAsTohax9NhTaV8h13k3fhV2DSI6sho9E8Crj7ls8ZezUNsW06ZbHOUZrqOTtnR4764k1svCt3X_Ec0uTD_bK7llX-CCRhUo4UDAjmlF3OwkGAJEPNV4CpebmijHBlVS34Z_7i8fEXp_FjyDPKUuT0N1EQG2ptECWrZOLAsd0g26OCYSwdpKPeMaIfKaJJWAws0HMcAyR0I_Itimf5reeGCaKa0A9TFRTCHdNiyYYhPWFema9n7pnqeza1OTiR7pBYxtgj3MGrUahUue4O5NwPXAg04j-7DQoRHqnkhsytBfIpog84LqiW4jLE_2S5VXSZA0W2jG6zSaybM5t6DvJyUKZPj9h3g1KP7eB1BAMptY9OvrYJXF8TDD8VEVkLKbCkruL1BkX24V6e79fnbFfBeo7CuAPHvz2C_LV34Hvala5VqMWvbb5Md5v4HXIS2v2UHqNGiH3fyF1d8ZcsMeWPDB9nADLKooqKrwujchOKYvbQuLHgCUeq14Ss4eUA0ju4YLTw2RW9yeUH1HR2oca0miZx1v3nSTL091EJxD7KBPeQS5WMwpyGAxqG2_guCyX4eiuo5ayK0pi0mUFrFViBaVD9sSu57x4NJey4U2rFO-VlBeEJlNEdRrwULw0r4Sfg-tPcAHXkq2L8rzGjiB9J6jMEudsBPj-Y6Pq6dc1KY2v5W4e7dOwue7wvt1poj44bRPOzhuz6aeFgEpPwlmoKv0VxdoAscmRDhNQsCEZexCANWUHbPz8XwU5B3vsO4XtunJajelhKosKyUresFlboreeOmhU_bcvmTmsbAy6yKCcidYkCP8_feJv90OjQ8FpK8jACeV_QdzpP-CQVr9pWTwnM2XOrbMe5iOcNr-34y9RRb-HZNoNTApTi4q2ZBHr2H1dV1LPqJoULPZCHenwEVJlmVmhF6Z78Z8ouWZUowsYb-Se5ucejKWW6_2Rv2BWH6KMj_FYL79Y5i2lXBEDCAGiXSevmk6fXC-Al3EJstp4hDL3Zwxi36iXid3XQ7AhvFZ31z7XvIEyiSIhaDWGxg5eBzb6lkA22uv5vZLzdslzF6smIzquzXTXLtLLFegcIjpcvPdPE2tLnL9hibZrdPwP6oSVRwkwrrWy7v8hr_LdkTUvRyeq2txSw3VHz270VYhJgYllVkgbx94efXlhnV-Sk7Q8dhUJtjLWEfD7VZj6pri6DNwSo2oy4ZtvoScO4QYllJK99lQq7ulRl8XKHMN14PgbvLf7g8bcrhSprPBzQh9ZK218gdScgl2B9FdPP7mECLsSesn3k8nfnEVi12khMRFDeddU6-dzoUme3VrVKwXz4dPQsi0pXK74kSGACcq7DFJHTuaDTP11JIMGHi_A_Re9iuBwB4_D5tR-P1gQCVOfeh1UA-H0Z1civBOgMwwnSYys0aQgSrQCxc25Qt7Dt22RdtVFOXtqrfAmXaTDH_VPrl9V7t3Ax725TrIuSzPRn26I9QQ8iDM6IV4yx50s4YDA0sUj_pMsPYs2Yj0b_jSZa7m6BRIr24fgPyMbv1KWxxyfQl28io_gfAtokK8L2JJAlP0lfQQubsIgmxABKXdzl4im6TvSJBeGJEvwixl9e8F6ay7ejjlVlJ4r3EyP1brDnUaw49HkAEzLgVG0dEb8nfV_HvJVAQAyW3eCRYR3tjNru6RsGkgGXvTArb69F3MPnoL9Z9QilLWLAPXshTcm4G-4yDOUl7_q7o0EUpxMNEa8x0O-ZwKMd_sHp7jYC8zmC9sRE2u6xrN04FTVYEUiS5IifG-GfR3-TonRzCH8uYu7ak4shCYy8U8y-kIf9lNFDpCJGVqcjbCMb3LR4dkrRssyth5W4BhK8-r77AIa8MRnpFfkCihP-WgCl80zNWvk1b-K-9lscFVYhLL0bjFLRgCCk2h-jGl7j3QrpE-wb4UL1WgnsSxMisd03xVh3rR575_8WZ8VUV9jT0eaV-QnjsPEb9dri-_R3garhehuJQlK3KsFub69NJTj9ywQbamlDhD2REDSEahGjOV8-zM3uuAPNbFt8LUxEaKxEZfgf2mQRkscAQ2DkwFW6WXFGLQEnmzHdu0LhVmGyddVlSBnSeFAs5guem2li2cZGtKO3JZY7FKAXvwwid6ONKuHT-B4rz9mnEWgIfnxSHnIKucD1So51ZdRsCdvhzaodfcreMAAJNNFpexD71wyBF2e3YQbS0zK8IL_S0FXVSw4Ff0mFa0BXbShpEodJp_ZmFU0KR6jnRkhRVEGB7VUncxLk6yvNcRK4kq5kmNs6oK4d3vKxy0fyIfCc-ZcTGiGnjkV_F0ls5o7mRdQj2-U-IKgf-5uC1hU353lgdjpCnYzLFsahr2eSyrI5RLdd7dEplOGZesJqCm_W2MdUVOfVW66TXufU8NSalalDH9Iy0nfa1VRO0EUBpeVZvZvU9wv4Gv9OBkUDuEw65RiAyXYzzyDQ0mPSR5Avut_q6l3DgxWySnez4w8I_p7mkPcn-SpdJhtE4t3M5wYEFhJ-7RoOeMHQ7HLYw9Y_wl6YeUXpoyaWnJRXcp0UbmInze3RymUzclkUsaw8lsgZ_iRq3VruJUWQvUUtvipY2Y0JNIKly_ki1bKvB1vd73XXnK95o-pYUdAcwNDZhjkHrvBuPVrwrksX1ykZ1MCjajlxYn5gEP8SXgUcCznJ4eXt0z1X8cZamadJbP9ZZBbBmlmqjg6enFgRL1aox4nl0WUMy3ddT76A78_6s50RHl6M3PlQKH2fzmJp6JOl5mlQbkbI_q5LFvlt5_Bk6KQfsK_1RvMs1mVCn9XbYjPN6dMqY3WBvrrGq_4e1iwMpBwLBc6fEQt4_fSASjBZgA-mNANkFdLfhMjaQb802kKjwArGq2z7DsUTqTeCXY9biRqQZZUyeqgzT9VwJWJTHSBHXQgzzvMxZZcBqVAxfTFudrnjMh3KPkuILKwIck4KUbZDfudAokQpLECDeqmrfmbDS8tpyCQ8LbFm1fXMawccg39myKcgY7V40J7trmVzbuV7NsxPxp282x4vUTakz0vpxntwGHj9r94ivGVhEr2fvUxukAHcnRiK3iTRbb3VX-AgxmIBPTc-HP1vNFwjwEZmZ5GIrrDhFi8yF8rnfPvZSs6OhzurmorUbEkLRakPi6hkLdMib-LAkEkkLJLMdVtA1EexTfDgtgqKkNQFETevRto-WqfzTHRvOwn7QFKtck4KUvsjSoEW0sble7GAkVezXajsNoh4XnjUDOmgWr6pybV7A2nBmtb5UeJo40z4heGbeJTL0wSoX_XutAPRu0MbtTD9JRwXyWsWoct3JXYdihh6BQoo9oeJbmzHkFuK0Whv4fOTjrN9F2WzB-7J3fqTJmtRZcR7oh2KRatqk6tL6AKq9PnwxaPiiSmb1_e7eIb-LONaxdCuJ-tES5RwQrWP9TvzcRRDi3wzAuIIjPDq0IutAYjX9TcvEk1yxSAcqARdEZOsuYJDS259d8b-5d0oxray_qx6qQff_ml?></g></svg>