mirror of
https://github.com/aaronpo97/the-biergarten-app.git
synced 2026-07-16 09:37:23 +00:00
1 line
240 KiB
XML
1 line
240 KiB
XML
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentStyleType="text/css" data-diagram-type="CLASS" height="3502px" preserveAspectRatio="none" style="width:19140px;height:3502px;background:#FCFCF7;" version="1.1" viewBox="0 0 19140 3502" width="19140px" zoomAndPan="magnify"><?plantuml 1.2026.3?><defs/><g><rect fill="#FCFCF7" height="3502" style="stroke:none;stroke-width:1;" width="19140" x="0" y="0"/><g class="title" data-source-line="10"><text fill="#14180C" font-family="'Volkhov'" font-size="30" font-weight="700" lengthAdjust="spacing" textLength="625.41" x="9253.795" y="39.13">Biergarten Data Pipeline — Class Diagram</text></g><!--cluster Domain: Models--><g class="cluster" data-qualified-name="Domain. Models" data-source-line="12" id="ent0002"><rect fill="#F1F3EA" height="2046.6" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:1.5;" width="5424" x="7" y="962.15"/><text fill="#14180C" font-family="'DM Sans'" font-size="25" font-weight="700" lengthAdjust="spacing" textLength="194.3639" x="2621.8181" y="988.95">Domain: Models</text></g><!--cluster Domain: Application Configuration--><g class="cluster" data-qualified-name="Domain. Application Configuration" data-source-line="196" id="ent0031"><rect fill="#F1F3EA" height="1364.32" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:1.5;" width="1001" x="6745" y="2075.2"/><text fill="#14180C" font-family="'DM Sans'" font-size="25" font-weight="700" lengthAdjust="spacing" textLength="422.3181" x="7034.3409" y="2102">Domain: Application Configuration</text></g><!--cluster Domain: Policy--><g class="cluster" data-qualified-name="Domain. Policy" data-source-line="226" id="ent0039"><rect fill="#F1F3EA" height="751.62" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:1.5;" width="7127" x="9998" y="2736.73"/><text fill="#14180C" font-family="'DM Sans'" font-size="25" font-weight="700" lengthAdjust="spacing" textLength="179.9894" x="13471.5053" y="2763.53">Domain: Policy</text></g><!--cluster Infrastructure: Logging--><g class="cluster" data-qualified-name="Infrastructure. Logging" data-source-line="304" id="ent0053"><rect fill="#F1F3EA" height="2712.12" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:1.5;" width="1143" x="17983" y="361.73"/><text fill="#14180C" font-family="'DM Sans'" font-size="25" font-weight="700" lengthAdjust="spacing" textLength="281.1926" x="18413.9037" y="388.53">Infrastructure: Logging</text></g><!--cluster Infrastructure: Pipeline Channel--><g class="cluster" data-qualified-name="Infrastructure. Pipeline Channel" data-source-line="352" id="ent0065"><rect fill="#F1F3EA" height="418.5" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:1.5;" width="492" x="5455" y="2687.9"/><text fill="#14180C" font-family="'DM Sans'" font-size="25" font-weight="700" lengthAdjust="spacing" textLength="389.5849" x="5506.2076" y="2714.7">Infrastructure: Pipeline Channel</text></g><!--cluster Infrastructure: Data Preloading--><g class="cluster" data-qualified-name="Infrastructure. Data Preloading" data-source-line="368" id="ent0067"><rect fill="#F1F3EA" height="1148.95" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:1.5;" width="4518" x="10261" y="1165.73"/><text fill="#14180C" font-family="'DM Sans'" font-size="25" font-weight="700" lengthAdjust="spacing" textLength="379.4096" x="12330.2952" y="1192.53">Infrastructure: Data Preloading</text></g><!--cluster Infrastructure: Enrichment--><g class="cluster" data-qualified-name="Infrastructure. Enrichment" data-source-line="409" id="ent0077"><rect fill="#F1F3EA" height="2176.15" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:1.5;" width="772" x="9202" y="1214.55"/><text fill="#14180C" font-family="'DM Sans'" font-size="25" font-weight="700" lengthAdjust="spacing" textLength="327.4847" x="9424.2577" y="1241.35">Infrastructure: Enrichment</text></g><!--cluster Infrastructure: Prompting--><g class="cluster" data-qualified-name="Infrastructure. Prompting" data-source-line="434" id="ent0082"><rect fill="#F1F3EA" height="621.42" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:1.5;" width="750" x="5971" y="2801.83"/><text fill="#14180C" font-family="'DM Sans'" font-size="25" font-weight="700" lengthAdjust="spacing" textLength="313.7122" x="6189.1439" y="2828.63">Infrastructure: Prompting</text></g><!--cluster Infrastructure: Data Generation--><g class="cluster" data-qualified-name="Infrastructure. Data Generation" data-source-line="450" id="ent0086"><rect fill="#F1F3EA" height="2387.72" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:1.5;" width="1408" x="7770" y="1002.98"/><text fill="#14180C" font-family="'DM Sans'" font-size="25" font-weight="700" lengthAdjust="spacing" textLength="386.8423" x="8280.5789" y="1029.78">Infrastructure: Data Generation</text></g><!--cluster Infrastructure: Data Export--><g class="cluster" data-qualified-name="Infrastructure. Data Export" data-source-line="497" id="ent0092"><rect fill="#F1F3EA" height="2257.53" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:1.5;" width="810" x="17149" y="1116.9"/><text fill="#14180C" font-family="'DM Sans'" font-size="25" font-weight="700" lengthAdjust="spacing" textLength="330.2099" x="17388.895" y="1143.7">Infrastructure: Data Export</text></g><!--class Location--><g class="entity" data-qualified-name="Domain. Models.Location" data-source-line="14" id="ent0003"><rect fill="#EBECE3" height="318.95" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="498.9635" x="1867.52" y="2028.55"/><ellipse cx="2061.5798" cy="2049.825" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M2065.2756,2058.5501 Q2064.4211,2058.9896 2063.4812,2059.2093 Q2062.5412,2059.429 2061.5036,2059.429 Q2057.8171,2059.429 2055.8762,2056.9998 Q2053.9353,2054.5706 2053.9353,2049.9808 Q2053.9353,2045.3787 2055.8762,2042.9495 Q2057.8171,2040.5203 2061.5036,2040.5203 Q2062.5412,2040.5203 2063.4934,2040.74 Q2064.4455,2040.9598 2065.2756,2041.3992 L2065.2756,2045.4031 Q2064.3479,2044.5486 2063.4751,2044.1519 Q2062.6022,2043.7552 2061.6745,2043.7552 Q2059.697,2043.7552 2058.6899,2045.3238 Q2057.6828,2046.8924 2057.6828,2049.9808 Q2057.6828,2053.0569 2058.6899,2054.6255 Q2059.697,2056.1941 2061.6745,2056.1941 Q2062.6022,2056.1941 2063.4751,2055.7974 Q2064.3479,2055.4007 2065.2756,2054.5462 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="100.8439" x="2086.5798" y="2058.35">Location</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="1868.52" x2="2365.4835" y1="2071.1" y2="2071.1"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1878.52" cy="2092.875" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="176.3005" x="1890.52" y="2099.9">city : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1878.52" cy="2125.425" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="310.5132" x="1890.52" y="2132.45">state_province : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1878.52" cy="2157.975" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="250.5943" x="1890.52" y="2165">iso3166_2 : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1878.52" cy="2190.525" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="223.0569" x="1890.52" y="2197.55">country : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1878.52" cy="2223.075" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="243.9881" x="1890.52" y="2230.1">iso3166_1 : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1878.52" cy="2255.625" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="469.9635" x="1890.52" y="2262.65">local_languages : std::vector<std::string></text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1878.52" cy="2288.175" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="187.5939" x="1890.52" y="2295.2">latitude : double</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1878.52" cy="2320.725" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="207.3065" x="1890.52" y="2327.75">longitude : double</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="1868.52" x2="2365.4835" y1="2339.5" y2="2339.5"/></g><!--class LocationContext--><g class="entity" data-qualified-name="Domain. Models.LocationContext" data-source-line="25" id="ent0004"><rect fill="#EBECE3" height="156.2" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="379.9814" x="980.01" y="2109.93"/><ellipse cx="1067.9287" cy="2131.205" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M1071.6245,2139.9301 Q1070.77,2140.3696 1069.83,2140.5893 Q1068.8901,2140.809 1067.8525,2140.809 Q1064.166,2140.809 1062.2251,2138.3798 Q1060.2841,2135.9506 1060.2841,2131.3608 Q1060.2841,2126.7587 1062.2251,2124.3295 Q1064.166,2121.9003 1067.8525,2121.9003 Q1068.8901,2121.9003 1069.8423,2122.12 Q1070.7944,2122.3398 1071.6245,2122.7792 L1071.6245,2126.7831 Q1070.6967,2125.9286 1069.8239,2125.5319 Q1068.9511,2125.1352 1068.0234,2125.1352 Q1066.0459,2125.1352 1065.0388,2126.7038 Q1064.0317,2128.2724 1064.0317,2131.3608 Q1064.0317,2134.4369 1065.0388,2136.0055 Q1066.0459,2137.5741 1068.0234,2137.5741 Q1068.9511,2137.5741 1069.8239,2137.1774 Q1070.6967,2136.7807 1071.6245,2135.9262 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="194.144" x="1092.9287" y="2139.73">LocationContext</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="981.01" x2="1358.9914" y1="2152.48" y2="2152.48"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="991.01" cy="2174.255" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="178.5193" x="1003.01" y="2181.28">text : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="991.01" cy="2206.805" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="350.9814" x="1003.01" y="2213.83">completeness : Completeness</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="991.01" cy="2239.355" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="224.4503" x="1003.01" y="2246.38">char_count : size_t</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="981.01" x2="1358.9914" y1="2258.13" y2="2258.13"/></g><!--class Completeness--><g class="entity" data-qualified-name="Domain. Models.Completeness" data-source-line="31" id="ent0005"><rect fill="#EBECE3" height="156.2" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="206.1375" x="1066.93" y="2836.55"/><ellipse cx="1084.93" cy="2857.825" fill="#EB937F" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M1090.8333,2867.325 L1079.4808,2867.325 L1079.4808,2849.0999 L1090.8333,2849.0999 L1090.8333,2852.2737 L1083.0819,2852.2737 L1083.0819,2856.2044 L1090.1009,2856.2044 L1090.1009,2859.3782 L1083.0819,2859.3782 L1083.0819,2864.1512 L1090.8333,2864.1512 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="168.1375" x="1101.93" y="2866.35">Completeness</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="1067.93" x2="1272.0675" y1="2879.1" y2="2879.1"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="38.8626" x="1072.93" y="2907.9">Full</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="72.319" x="1072.93" y="2940.45">Partial</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="83.1626" x="1072.93" y="2973">Absent</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="1067.93" x2="1272.0675" y1="2984.75" y2="2984.75"/></g><!--class EnrichedCity--><g class="entity" data-qualified-name="Domain. Models.EnrichedCity" data-source-line="37" id="ent0006"><rect fill="#EBECE3" height="123.65" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="331.1505" x="1004.42" y="1281.83"/><ellipse cx="1090.067" cy="1303.105" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M1093.7628,1311.8301 Q1092.9083,1312.2696 1091.9684,1312.4893 Q1091.0284,1312.709 1089.9908,1312.709 Q1086.3043,1312.709 1084.3634,1310.2798 Q1082.4225,1307.8506 1082.4225,1303.2608 Q1082.4225,1298.6587 1084.3634,1296.2295 Q1086.3043,1293.8003 1089.9908,1293.8003 Q1091.0284,1293.8003 1091.9806,1294.02 Q1092.9327,1294.2398 1093.7628,1294.6792 L1093.7628,1298.6831 Q1092.8351,1297.8286 1091.9623,1297.4319 Q1091.0895,1297.0352 1090.1617,1297.0352 Q1088.1842,1297.0352 1087.1771,1298.6038 Q1086.17,1300.1724 1086.17,1303.2608 Q1086.17,1306.3369 1087.1771,1307.9055 Q1088.1842,1309.4741 1090.1617,1309.4741 Q1091.0895,1309.4741 1091.9623,1309.0774 Q1092.8351,1308.6807 1093.7628,1307.8262 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="149.8564" x="1115.067" y="1311.63">EnrichedCity</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="1005.42" x2="1334.5705" y1="1324.38" y2="1324.38"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1015.42" cy="1346.155" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="212.4442" x="1027.42" y="1353.18">location : Location</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1015.42" cy="1378.705" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="302.1505" x="1027.42" y="1385.73">context : LocationContext</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="1005.42" x2="1334.5705" y1="1397.48" y2="1397.48"/></g><!--class BeerStyle--><g class="entity" data-qualified-name="Domain. Models.BeerStyle" data-source-line="42" id="ent0007"><rect fill="#EBECE3" height="253.85" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="293.8943" x="2900.05" y="2061.1"/><ellipse cx="2986.6408" cy="2082.375" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M2990.3366,2091.1001 Q2989.4822,2091.5396 2988.5422,2091.7593 Q2987.6023,2091.979 2986.5647,2091.979 Q2982.8781,2091.979 2980.9372,2089.5498 Q2978.9963,2087.1206 2978.9963,2082.5308 Q2978.9963,2077.9287 2980.9372,2075.4995 Q2982.8781,2073.0703 2986.5647,2073.0703 Q2987.6023,2073.0703 2988.5544,2073.29 Q2989.5066,2073.5098 2990.3366,2073.9492 L2990.3366,2077.9531 Q2989.4089,2077.0986 2988.5361,2076.7019 Q2987.6633,2076.3052 2986.7356,2076.3052 Q2984.758,2076.3052 2983.751,2077.8738 Q2982.7439,2079.4424 2982.7439,2082.5308 Q2982.7439,2085.6069 2983.751,2087.1755 Q2984.758,2088.7441 2986.7356,2088.7441 Q2987.6633,2088.7441 2988.5361,2088.3474 Q2989.4089,2087.9507 2990.3366,2087.0962 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="110.7127" x="3011.6408" y="2090.9">BeerStyle</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="2901.05" x2="3192.9443" y1="2103.65" y2="2103.65"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="2911.05" cy="2125.425" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="196.7442" x="2923.05" y="2132.45">name : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="2911.05" cy="2157.975" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="264.8943" x="2923.05" y="2165">description : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="2911.05" cy="2190.525" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="172.194" x="2923.05" y="2197.55">min_abv : float</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="2911.05" cy="2223.075" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="177.8814" x="2923.05" y="2230.1">max_abv : float</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="2911.05" cy="2255.625" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="143.55" x="2923.05" y="2262.65">min_ibu : int</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="2911.05" cy="2288.175" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="149.2375" x="2923.05" y="2295.2">max_ibu : int</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="2901.05" x2="3192.9443" y1="2306.95" y2="2306.95"/></g><!--class BreweryResult--><g class="entity" data-qualified-name="Domain. Models.BreweryResult" data-source-line="51" id="ent0008"><rect fill="#EBECE3" height="188.75" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="364.2819" x="2500.86" y="2093.65"/><ellipse cx="2594.8695" cy="2114.925" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M2598.5653,2123.6501 Q2597.7108,2124.0896 2596.7709,2124.3093 Q2595.8309,2124.529 2594.7933,2124.529 Q2591.1068,2124.529 2589.1659,2122.0998 Q2587.225,2119.6706 2587.225,2115.0808 Q2587.225,2110.4787 2589.1659,2108.0495 Q2591.1068,2105.6203 2594.7933,2105.6203 Q2595.8309,2105.6203 2596.7831,2105.84 Q2597.7352,2106.0598 2598.5653,2106.4992 L2598.5653,2110.5031 Q2597.6376,2109.6486 2596.7648,2109.2519 Q2595.892,2108.8552 2594.9642,2108.8552 Q2592.9867,2108.8552 2591.9796,2110.4238 Q2590.9725,2111.9924 2590.9725,2115.0808 Q2590.9725,2118.1569 2591.9796,2119.7255 Q2592.9867,2121.2941 2594.9642,2121.2941 Q2595.892,2121.2941 2596.7648,2120.8974 Q2597.6376,2120.5007 2598.5653,2119.6462 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="166.2629" x="2619.8695" y="2123.45">BreweryResult</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="2501.86" x2="2864.1419" y1="2136.2" y2="2136.2"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="2511.86" cy="2157.975" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="241.7941" x="2523.86" y="2165">name_en : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="2511.86" cy="2190.525" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="309.9443" x="2523.86" y="2197.55">description_en : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="2511.86" cy="2223.075" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="267.1317" x="2523.86" y="2230.1">name_local : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="2511.86" cy="2255.625" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="335.2819" x="2523.86" y="2262.65">description_local : std::string</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="2501.86" x2="2864.1419" y1="2274.4" y2="2274.4"/></g><!--class BeerResult--><g class="entity" data-qualified-name="Domain. Models.BeerResult" data-source-line="58" id="ent0009"><rect fill="#EBECE3" height="286.4" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="364.2819" x="3228.86" y="2044.83"/><ellipse cx="3343.9758" cy="2066.105" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M3347.6716,2074.8301 Q3346.8171,2075.2696 3345.8772,2075.4893 Q3344.9373,2075.709 3343.8997,2075.709 Q3340.2131,2075.709 3338.2722,2073.2798 Q3336.3313,2070.8506 3336.3313,2066.2608 Q3336.3313,2061.6587 3338.2722,2059.2295 Q3340.2131,2056.8003 3343.8997,2056.8003 Q3344.9373,2056.8003 3345.8894,2057.02 Q3346.8416,2057.2398 3347.6716,2057.6792 L3347.6716,2061.6831 Q3346.7439,2060.8286 3345.8711,2060.4319 Q3344.9983,2060.0352 3344.0706,2060.0352 Q3342.093,2060.0352 3341.0859,2061.6038 Q3340.0789,2063.1724 3340.0789,2066.2608 Q3340.0789,2069.3369 3341.0859,2070.9055 Q3342.093,2072.4741 3344.0706,2072.4741 Q3344.9983,2072.4741 3345.8711,2072.0774 Q3346.7439,2071.6807 3347.6716,2070.8262 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="124.0502" x="3368.9758" y="2074.63">BeerResult</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="3229.86" x2="3592.1419" y1="2087.38" y2="2087.38"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="3239.86" cy="2109.155" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="241.7941" x="3251.86" y="2116.18">name_en : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="3239.86" cy="2141.705" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="309.9443" x="3251.86" y="2148.73">description_en : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="3239.86" cy="2174.255" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="267.1317" x="3251.86" y="2181.28">name_local : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="3239.86" cy="2206.805" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="335.2819" x="3251.86" y="2213.83">description_local : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="3239.86" cy="2239.355" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="188.3568" x="3251.86" y="2246.38">style : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="3239.86" cy="2271.905" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="113.0878" x="3251.86" y="2278.93">abv : float</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="3239.86" cy="2304.455" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="84.4439" x="3251.86" y="2311.48">ibu : int</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="3229.86" x2="3592.1419" y1="2323.23" y2="2323.23"/></g><!--class UserResult--><g class="entity" data-qualified-name="Domain. Models.UserResult" data-source-line="68" id="ent0010"><rect fill="#EBECE3" height="253.85" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="288.3318" x="1426.83" y="2061.1"/><ellipse cx="1504.1395" cy="2082.375" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M1507.8353,2091.1001 Q1506.9808,2091.5396 1506.0409,2091.7593 Q1505.101,2091.979 1504.0634,2091.979 Q1500.3768,2091.979 1498.4359,2089.5498 Q1496.495,2087.1206 1496.495,2082.5308 Q1496.495,2077.9287 1498.4359,2075.4995 Q1500.3768,2073.0703 1504.0634,2073.0703 Q1505.101,2073.0703 1506.0531,2073.29 Q1507.0053,2073.5098 1507.8353,2073.9492 L1507.8353,2077.9531 Q1506.9076,2077.0986 1506.0348,2076.7019 Q1505.162,2076.3052 1504.2343,2076.3052 Q1502.2567,2076.3052 1501.2496,2077.8738 Q1500.2426,2079.4424 1500.2426,2082.5308 Q1500.2426,2085.6069 1501.2496,2087.1755 Q1502.2567,2088.7441 1504.2343,2088.7441 Q1505.162,2088.7441 1506.0348,2088.3474 Q1506.9076,2087.9507 1507.8353,2087.0962 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="123.7127" x="1529.1395" y="2090.9">UserResult</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="1427.83" x2="1714.1618" y1="2103.65" y2="2103.65"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1437.83" cy="2125.425" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="259.3318" x="1449.83" y="2132.45">first_name : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1437.83" cy="2157.975" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="254.7817" x="1449.83" y="2165">last_name : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1437.83" cy="2190.525" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="213.9318" x="1449.83" y="2197.55">gender : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1437.83" cy="2223.075" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="247.0818" x="1449.83" y="2230.1">username : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1437.83" cy="2255.625" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="168.8004" x="1449.83" y="2262.65">bio : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1437.83" cy="2288.175" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="251.0506" x="1449.83" y="2295.2">activity_weight : float</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="1427.83" x2="1714.1618" y1="2306.95" y2="2306.95"/></g><!--class Name--><g class="entity" data-qualified-name="Domain. Models.Name" data-source-line="77" id="ent0011"><rect fill="#EBECE3" height="156.2" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="288.3318" x="22.83" y="2109.93"/><ellipse cx="128.3209" cy="2131.205" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M132.0167,2139.9301 Q131.1622,2140.3696 130.2223,2140.5893 Q129.2823,2140.809 128.2447,2140.809 Q124.5582,2140.809 122.6173,2138.3798 Q120.6764,2135.9506 120.6764,2131.3608 Q120.6764,2126.7587 122.6173,2124.3295 Q124.5582,2121.9003 128.2447,2121.9003 Q129.2823,2121.9003 130.2345,2122.12 Q131.1866,2122.3398 132.0167,2122.7792 L132.0167,2126.7831 Q131.089,2125.9286 130.2162,2125.5319 Q129.3434,2125.1352 128.4156,2125.1352 Q126.4381,2125.1352 125.431,2126.7038 Q124.4239,2128.2724 124.4239,2131.3608 Q124.4239,2134.4369 125.431,2136.0055 Q126.4381,2137.5741 128.4156,2137.5741 Q129.3434,2137.5741 130.2162,2137.1774 Q131.089,2136.7807 132.0167,2135.9262 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="67.35" x="153.3209" y="2139.73">Name</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="23.83" x2="310.1618" y1="2152.48" y2="2152.48"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="33.83" cy="2174.255" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="259.3318" x="45.83" y="2181.28">first_name : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="33.83" cy="2206.805" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="254.7817" x="45.83" y="2213.83">last_name : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="33.83" cy="2239.355" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="213.9318" x="45.83" y="2246.38">gender : std::string</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="23.83" x2="310.1618" y1="2258.13" y2="2258.13"/></g><!--class ForenameEntry--><g class="entity" data-qualified-name="Domain. Models.ForenameEntry" data-source-line="83" id="ent0012"><rect fill="#EBECE3" height="123.65" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="242.9318" x="22.53" y="1281.83"/><ellipse cx="52.8742" cy="1303.105" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M56.57,1311.8301 Q55.7155,1312.2696 54.7756,1312.4893 Q53.8356,1312.709 52.798,1312.709 Q49.1115,1312.709 47.1706,1310.2798 Q45.2297,1307.8506 45.2297,1303.2608 Q45.2297,1298.6587 47.1706,1296.2295 Q49.1115,1293.8003 52.798,1293.8003 Q53.8356,1293.8003 54.7878,1294.02 Q55.7399,1294.2398 56.57,1294.6792 L56.57,1298.6831 Q55.6423,1297.8286 54.7695,1297.4319 Q53.8967,1297.0352 52.9689,1297.0352 Q50.9914,1297.0352 49.9843,1298.6038 Q48.9772,1300.1724 48.9772,1303.2608 Q48.9772,1306.3369 49.9843,1307.9055 Q50.9914,1309.4741 52.9689,1309.4741 Q53.8967,1309.4741 54.7695,1309.0774 Q55.6423,1308.6807 56.57,1307.8262 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="177.5003" x="72.6173" y="1311.63">ForenameEntry</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="23.53" x2="264.4618" y1="1324.38" y2="1324.38"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="33.53" cy="1346.155" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="196.7442" x="45.53" y="1353.18">name : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="33.53" cy="1378.705" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="213.9318" x="45.53" y="1385.73">gender : std::string</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="23.53" x2="264.4618" y1="1397.48" y2="1397.48"/></g><g class="entity" data-qualified-name="Domain. Models.GMN13" data-source-line="89" id="ent0014"><path d="M300.35,1013.15 L300.35,1339.65 L265.79,1343.65 L300.35,1347.65 L300.35,1674.15 A0,0 0 0 0 300.35,1674.15 L969.6562,1674.15 A0,0 0 0 0 969.6562,1674.15 L969.6562,1023.15 L959.6562,1013.15 L300.35,1013.15 A0,0 0 0 0 300.35,1013.15" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><path d="M959.6562,1013.15 L959.6562,1023.15 L969.6562,1023.15 L959.6562,1013.15" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="616.6007" x="306.35" y="1042.95">forename_list = std::unordered_set<ForenameEntry></text><text fill="#14180C" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="542.4258" x="306.35" y="1075.5">surname_list = std::unordered_set<std::string></text><text fill="#14180C" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="524.2569" x="306.35" y="1108.05">(aliases declared in curated_data_service.h).</text><text fill="#14180C" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="594.8633" x="306.35" y="1140.6">ICuratedDataService::LoadForenamesByCountry() /</text><text fill="#14180C" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="519.6198" x="306.35" y="1173.15">LoadSurnamesByCountry() each return a flat</text><text fill="#14180C" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="552.2133" x="306.35" y="1205.7">std::unordered_map<std::string, forename_list></text><text fill="#14180C" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="494.1944" x="306.35" y="1238.25">or <std::string, surname_list> keyed by ISO</text><text fill="#14180C" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="517.7883" x="306.35" y="1270.8">3166-1 country code -- no NamesByCountry</text><text fill="#14180C" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="617.6506" x="306.35" y="1303.35">wrapper class. SampleName(forenames_by_country,</text><text fill="#14180C" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="545.5947" x="306.35" y="1335.9">surnames_by_country, iso3166_1, rng) is a free</text><text fill="#14180C" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="522.8508" x="306.35" y="1368.45">function, not a method, so it can be called by</text><text fill="#14180C" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="535.645" x="306.35" y="1401">any per-city worker without owning the maps.</text><text fill="#14180C" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="594.7695" x="306.35" y="1433.55">Sourced from popular-names-by-country-dataset</text><text fill="#14180C" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="648.3062" x="306.35" y="1466.1">(CC0) -- see ETHICS-AND-KNOWN-ISSUES.md. Gender</text><text fill="#14180C" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="562.2759" x="306.35" y="1498.65">is preserved per forename so it can be threaded</text><text fill="#14180C" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="585.1638" x="306.35" y="1531.2">through to persona/bio generation later; surnames</text><text fill="#14180C" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="491.0262" x="306.35" y="1563.75">carry no gender in the source data. Pairing</text><text fill="#14180C" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="565.1822" x="306.35" y="1596.3">happens at sample time, not at fixture-authoring</text><text fill="#14180C" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="555.5637" x="306.35" y="1628.85">time, so no information from the source dataset</text><text fill="#14180C" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="247.0692" x="306.35" y="1661.4">is discarded up front.</text></g><!--class CheckinResult--><g class="entity" data-qualified-name="Domain. Models.CheckinResult" data-source-line="113" id="ent0017"><rect fill="#EBECE3" height="123.65" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="337.7003" x="4013.15" y="2126.2"/><ellipse cx="4094.4782" cy="2147.475" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M4098.174,2156.2001 Q4097.3195,2156.6396 4096.3796,2156.8593 Q4095.4396,2157.079 4094.4021,2157.079 Q4090.7155,2157.079 4088.7746,2154.6498 Q4086.8337,2152.2206 4086.8337,2147.6308 Q4086.8337,2143.0287 4088.7746,2140.5995 Q4090.7155,2138.1703 4094.4021,2138.1703 Q4095.4396,2138.1703 4096.3918,2138.39 Q4097.3439,2138.6098 4098.174,2139.0492 L4098.174,2143.0531 Q4097.2463,2142.1986 4096.3735,2141.8019 Q4095.5007,2141.4052 4094.573,2141.4052 Q4092.5954,2141.4052 4091.5883,2142.9738 Q4090.5813,2144.5424 4090.5813,2147.6308 Q4090.5813,2150.7069 4091.5883,2152.2755 Q4092.5954,2153.8441 4094.573,2153.8441 Q4095.5007,2153.8441 4096.3735,2153.4474 Q4097.2463,2153.0507 4098.174,2152.1962 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="165.0439" x="4119.4782" y="2156">CheckinResult</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="4014.15" x2="4349.8503" y1="2168.75" y2="2168.75"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="4024.15" cy="2190.525" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="308.7003" x="4036.15" y="2197.55">checked_in_at : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="4024.15" cy="2223.075" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="185.488" x="4036.15" y="2230.1">note : std::string</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="4014.15" x2="4349.8503" y1="2241.85" y2="2241.85"/></g><!--class RatingResult--><g class="entity" data-qualified-name="Domain. Models.RatingResult" data-source-line="118" id="ent0018"><rect fill="#EBECE3" height="123.65" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="214.488" x="4594.76" y="2126.2"/><ellipse cx="4627.4498" cy="2147.475" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M4631.1456,2156.2001 Q4630.2911,2156.6396 4629.3512,2156.8593 Q4628.4112,2157.079 4627.3736,2157.079 Q4623.6871,2157.079 4621.7462,2154.6498 Q4619.8053,2152.2206 4619.8053,2147.6308 Q4619.8053,2143.0287 4621.7462,2140.5995 Q4623.6871,2138.1703 4627.3736,2138.1703 Q4628.4112,2138.1703 4629.3634,2138.39 Q4630.3155,2138.6098 4631.1456,2139.0492 L4631.1456,2143.0531 Q4630.2179,2142.1986 4629.3451,2141.8019 Q4628.4723,2141.4052 4627.5445,2141.4052 Q4625.567,2141.4052 4624.5599,2142.9738 Q4623.5528,2144.5424 4623.5528,2147.6308 Q4623.5528,2150.7069 4624.5599,2152.2755 Q4625.567,2153.8441 4627.5445,2153.8441 Q4628.4723,2153.8441 4629.3451,2153.4474 Q4630.2179,2153.0507 4631.1456,2152.1962 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="143.8441" x="4647.7142" y="2156">RatingResult</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="4595.76" x2="4808.248" y1="2168.75" y2="2168.75"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="4605.76" cy="2190.525" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="135.7816" x="4617.76" y="2197.55">score : float</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="4605.76" cy="2223.075" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="185.488" x="4617.76" y="2230.1">note : std::string</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="4595.76" x2="4808.248" y1="2241.85" y2="2241.85"/></g><!--class GenerationMetadata--><g class="entity" data-qualified-name="Domain. Models.GenerationMetadata" data-source-line="123" id="ent0019"><rect fill="#EBECE3" height="188.75" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="349.3068" x="3628.35" y="2093.65"/><ellipse cx="3678.0638" cy="2114.925" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M3681.7596,2123.6501 Q3680.9052,2124.0896 3679.9652,2124.3093 Q3679.0253,2124.529 3677.9877,2124.529 Q3674.3011,2124.529 3672.3602,2122.0998 Q3670.4193,2119.6706 3670.4193,2115.0808 Q3670.4193,2110.4787 3672.3602,2108.0495 Q3674.3011,2105.6203 3677.9877,2105.6203 Q3679.0253,2105.6203 3679.9774,2105.84 Q3680.9296,2106.0598 3681.7596,2106.4992 L3681.7596,2110.5031 Q3680.8319,2109.6486 3679.9591,2109.2519 Q3679.0863,2108.8552 3678.1586,2108.8552 Q3676.181,2108.8552 3675.1739,2110.4238 Q3674.1669,2111.9924 3674.1669,2115.0808 Q3674.1669,2118.1569 3675.1739,2119.7255 Q3676.181,2121.2941 3678.1586,2121.2941 Q3679.0863,2121.2941 3679.9591,2120.8974 Q3680.8319,2120.5007 3681.7596,2119.6462 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="240.8316" x="3702.1114" y="2123.45">GenerationMetadata</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="3629.35" x2="3976.6568" y1="2136.2" y2="2136.2"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="3639.35" cy="2157.975" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="282.6502" x="3651.35" y="2165">generation_id : uint64_t</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="3639.35" cy="2190.525" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="320.3068" x="3651.35" y="2197.55">generated_time : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="3639.35" cy="2223.075" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="279.8627" x="3651.35" y="2230.1">context_provided : bool</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="3639.35" cy="2255.625" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="317.2507" x="3651.35" y="2262.65">generated_with : std::string</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="3629.35" x2="3976.6568" y1="2274.4" y2="2274.4"/></g><!--class GeneratedBrewery--><g class="entity" data-qualified-name="Domain. Models.GeneratedBrewery" data-source-line="130" id="ent0020"><rect fill="#EBECE3" height="221.3" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="690.3818" x="2467.81" y="1233"/><ellipse cx="2698.4132" cy="1254.275" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M2702.109,1263.0001 Q2701.2545,1263.4396 2700.3146,1263.6593 Q2699.3746,1263.879 2698.337,1263.879 Q2694.6505,1263.879 2692.7096,1261.4498 Q2690.7687,1259.0206 2690.7687,1254.4308 Q2690.7687,1249.8287 2692.7096,1247.3995 Q2694.6505,1244.9703 2698.337,1244.9703 Q2699.3746,1244.9703 2700.3268,1245.19 Q2701.2789,1245.4098 2702.109,1245.8492 L2702.109,1249.8531 Q2701.1813,1248.9986 2700.3085,1248.6019 Q2699.4356,1248.2052 2698.5079,1248.2052 Q2696.5304,1248.2052 2695.5233,1249.7738 Q2694.5162,1251.3424 2694.5162,1254.4308 Q2694.5162,1257.5069 2695.5233,1259.0755 Q2696.5304,1260.6441 2698.5079,1260.6441 Q2699.4356,1260.6441 2700.3085,1260.2474 Q2701.1813,1259.8507 2702.109,1258.9962 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="219.1754" x="2723.4132" y="1262.8">GeneratedBrewery</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="2468.81" x2="3157.1918" y1="1275.55" y2="1275.55"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="2478.81" cy="1297.325" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="253.6877" x="2490.81" y="1304.35">brewery_id : uint64_t</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="2478.81" cy="1329.875" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="212.4442" x="2490.81" y="1336.9">location : Location</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="2478.81" cy="1362.425" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="280.1382" x="2490.81" y="1369.45">brewery : BreweryResult</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="2478.81" cy="1394.975" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="661.3818" x="2490.81" y="1402">context_completeness : LocationContext::Completeness</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="2478.81" cy="1427.525" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="371.738" x="2490.81" y="1434.55">metadata : GenerationMetadata</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="2468.81" x2="3157.1918" y1="1446.3" y2="1446.3"/></g><!--class GeneratedBeer--><g class="entity" data-qualified-name="Domain. Models.GeneratedBeer" data-source-line="138" id="ent0021"><rect fill="#EBECE3" height="253.85" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="400.738" x="3193.63" y="1216.73"/><ellipse cx="3300.5176" cy="1238.005" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M3304.2134,1246.7301 Q3303.3589,1247.1696 3302.419,1247.3893 Q3301.4791,1247.609 3300.4415,1247.609 Q3296.7549,1247.609 3294.814,1245.1798 Q3292.8731,1242.7506 3292.8731,1238.1608 Q3292.8731,1233.5587 3294.814,1231.1295 Q3296.7549,1228.7003 3300.4415,1228.7003 Q3301.4791,1228.7003 3302.4312,1228.92 Q3303.3834,1229.1398 3304.2134,1229.5792 L3304.2134,1233.5831 Q3303.2857,1232.7286 3302.4129,1232.3319 Q3301.5401,1231.9352 3300.6124,1231.9352 Q3298.6348,1231.9352 3297.6277,1233.5038 Q3296.6207,1235.0724 3296.6207,1238.1608 Q3296.6207,1241.2369 3297.6277,1242.8055 Q3298.6348,1244.3741 3300.6124,1244.3741 Q3301.5401,1244.3741 3302.4129,1243.9774 Q3303.2857,1243.5807 3304.2134,1242.7262 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="176.9627" x="3325.5176" y="1246.53">GeneratedBeer</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="3194.63" x2="3593.368" y1="1259.28" y2="1259.28"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="3204.63" cy="1281.055" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="211.475" x="3216.63" y="1288.08">beer_id : uint64_t</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="3204.63" cy="1313.605" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="253.6877" x="3216.63" y="1320.63">brewery_id : uint64_t</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="3204.63" cy="1346.155" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="212.4442" x="3216.63" y="1353.18">location : Location</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="3204.63" cy="1378.705" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="185.0941" x="3216.63" y="1385.73">style : BeerStyle</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="3204.63" cy="1411.255" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="195.7128" x="3216.63" y="1418.28">beer : BeerResult</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="3204.63" cy="1443.805" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="371.738" x="3216.63" y="1450.83">metadata : GenerationMetadata</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="3194.63" x2="3593.368" y1="1462.58" y2="1462.58"/></g><!--class GeneratedUser--><g class="entity" data-qualified-name="Domain. Models.GeneratedUser" data-source-line="147" id="ent0022"><rect fill="#EBECE3" height="286.4" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="400.738" x="1370.63" y="1200.45"/><ellipse cx="1477.6864" cy="1221.725" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M1481.3822,1230.4501 Q1480.5277,1230.8896 1479.5877,1231.1093 Q1478.6478,1231.329 1477.6102,1231.329 Q1473.9237,1231.329 1471.9828,1228.8998 Q1470.0418,1226.4706 1470.0418,1221.8808 Q1470.0418,1217.2787 1471.9828,1214.8495 Q1473.9237,1212.4203 1477.6102,1212.4203 Q1478.6478,1212.4203 1479.5999,1212.64 Q1480.5521,1212.8598 1481.3822,1213.2992 L1481.3822,1217.3031 Q1480.4544,1216.4486 1479.5816,1216.0519 Q1478.7088,1215.6552 1477.7811,1215.6552 Q1475.8036,1215.6552 1474.7965,1217.2238 Q1473.7894,1218.7924 1473.7894,1221.8808 Q1473.7894,1224.9569 1474.7965,1226.5255 Q1475.8036,1228.0941 1477.7811,1228.0941 Q1478.7088,1228.0941 1479.5816,1227.6974 Q1480.4544,1227.3007 1481.3822,1226.4462 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="176.6252" x="1502.6864" y="1230.25">GeneratedUser</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="1371.63" x2="1770.368" y1="1243" y2="1243"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1381.63" cy="1264.775" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="208.4938" x="1393.63" y="1271.8">user_id : uint64_t</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1381.63" cy="1297.325" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="212.4442" x="1393.63" y="1304.35">location : Location</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1381.63" cy="1329.875" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="192.3941" x="1393.63" y="1336.9">user : UserResult</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1381.63" cy="1362.425" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="193.9692" x="1393.63" y="1369.45">email : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1381.63" cy="1394.975" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="296.9943" x="1393.63" y="1402">date_of_birth : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1381.63" cy="1427.525" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="245.5132" x="1393.63" y="1434.55">password : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1381.63" cy="1460.075" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="371.738" x="1393.63" y="1467.1">metadata : GenerationMetadata</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="1371.63" x2="1770.368" y1="1478.85" y2="1478.85"/></g><g class="entity" data-qualified-name="Domain. Models.GMN23" data-source-line="158" id="ent0024"><path d="M1806.77,1257.28 L1806.77,1339.65 L1771.78,1343.65 L1806.77,1347.65 L1806.77,1430.03 A0,0 0 0 0 1806.77,1430.03 L2433.2334,1430.03 A0,0 0 0 0 2433.2334,1430.03 L2433.2334,1267.28 L2423.2334,1257.28 L1806.77,1257.28 A0,0 0 0 0 1806.77,1257.28" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><path d="M2423.2334,1257.28 L2423.2334,1267.28 L2433.2334,1267.28 L2423.2334,1257.28" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="455.8943" x="1812.77" y="1287.08">email, date_of_birth, and password are</text><text fill="#14180C" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="563.1824" x="1812.77" y="1319.63">programmatically generated by the orchestrator</text><text fill="#14180C" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="605.4634" x="1812.77" y="1352.18">(not LLM-authored) so a downstream auth-account</text><text fill="#14180C" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="583.8323" x="1812.77" y="1384.73">seeding consumer can register real accounts from</text><text fill="#14180C" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="383.8003" x="1812.77" y="1417.28">this export. See ROADMAP.md §1.</text></g><!--class GeneratedCheckin--><g class="entity" data-qualified-name="Domain. Models.GeneratedCheckin" data-source-line="165" id="ent0026"><rect fill="#EBECE3" height="221.3" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="400.738" x="3629.63" y="1233"/><ellipse cx="3716.0208" cy="1254.275" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M3719.7166,1263.0001 Q3718.8621,1263.4396 3717.9221,1263.6593 Q3716.9822,1263.879 3715.9446,1263.879 Q3712.2581,1263.879 3710.3172,1261.4498 Q3708.3762,1259.0206 3708.3762,1254.4308 Q3708.3762,1249.8287 3710.3172,1247.3995 Q3712.2581,1244.9703 3715.9446,1244.9703 Q3716.9822,1244.9703 3717.9343,1245.19 Q3718.8865,1245.4098 3719.7166,1245.8492 L3719.7166,1249.8531 Q3718.7888,1248.9986 3717.916,1248.6019 Q3717.0432,1248.2052 3716.1155,1248.2052 Q3714.138,1248.2052 3713.1309,1249.7738 Q3712.1238,1251.3424 3712.1238,1254.4308 Q3712.1238,1257.5069 3713.1309,1259.0755 Q3714.138,1260.6441 3716.1155,1260.6441 Q3717.0432,1260.6441 3717.916,1260.2474 Q3718.7888,1259.8507 3719.7166,1258.9962 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="217.9564" x="3741.0208" y="1262.8">GeneratedCheckin</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="3630.63" x2="4029.368" y1="1275.55" y2="1275.55"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="3640.63" cy="1297.325" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="248.2438" x="3652.63" y="1304.35">checkin_id : uint64_t</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="3640.63" cy="1329.875" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="208.4938" x="3652.63" y="1336.9">user_id : uint64_t</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="3640.63" cy="1362.425" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="253.6877" x="3652.63" y="1369.45">brewery_id : uint64_t</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="3640.63" cy="1394.975" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="273.4753" x="3652.63" y="1402">checkin : CheckinResult</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="3640.63" cy="1427.525" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="371.738" x="3652.63" y="1434.55">metadata : GenerationMetadata</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="3630.63" x2="4029.368" y1="1446.3" y2="1446.3"/></g><!--class GeneratedRating--><g class="entity" data-qualified-name="Domain. Models.GeneratedRating" data-source-line="173" id="ent0027"><rect fill="#EBECE3" height="221.3" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="400.738" x="4501.63" y="1233"/><ellipse cx="4598.6207" cy="1254.275" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M4602.3165,1263.0001 Q4601.462,1263.4396 4600.5221,1263.6593 Q4599.5821,1263.879 4598.5445,1263.879 Q4594.858,1263.879 4592.9171,1261.4498 Q4590.9762,1259.0206 4590.9762,1254.4308 Q4590.9762,1249.8287 4592.9171,1247.3995 Q4594.858,1244.9703 4598.5445,1244.9703 Q4599.5821,1244.9703 4600.5343,1245.19 Q4601.4864,1245.4098 4602.3165,1245.8492 L4602.3165,1249.8531 Q4601.3888,1248.9986 4600.516,1248.6019 Q4599.6432,1248.2052 4598.7154,1248.2052 Q4596.7379,1248.2052 4595.7308,1249.7738 Q4594.7237,1251.3424 4594.7237,1254.4308 Q4594.7237,1257.5069 4595.7308,1259.0755 Q4596.7379,1260.6441 4598.7154,1260.6441 Q4599.6432,1260.6441 4600.516,1260.2474 Q4601.3888,1259.8507 4602.3165,1258.9962 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="196.7566" x="4623.6207" y="1262.8">GeneratedRating</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="4502.63" x2="4901.368" y1="1275.55" y2="1275.55"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="4512.63" cy="1297.325" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="208.4938" x="4524.63" y="1304.35">user_id : uint64_t</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="4512.63" cy="1329.875" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="211.475" x="4524.63" y="1336.9">beer_id : uint64_t</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="4512.63" cy="1362.425" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="248.2438" x="4524.63" y="1369.45">checkin_id : uint64_t</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="4512.63" cy="1394.975" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="229.1006" x="4524.63" y="1402">rating : RatingResult</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="4512.63" cy="1427.525" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="371.738" x="4524.63" y="1434.55">metadata : GenerationMetadata</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="4502.63" x2="4901.368" y1="1446.3" y2="1446.3"/></g><!--class GeneratedFollow--><g class="entity" data-qualified-name="Domain. Models.GeneratedFollow" data-source-line="181" id="ent0028"><rect fill="#EBECE3" height="156.2" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="400.738" x="4065.63" y="1265.55"/><ellipse cx="4162.2551" cy="1286.825" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M4165.9509,1295.5501 Q4165.0964,1295.9896 4164.1564,1296.2093 Q4163.2165,1296.429 4162.1789,1296.429 Q4158.4924,1296.429 4156.5515,1293.9998 Q4154.6105,1291.5706 4154.6105,1286.9808 Q4154.6105,1282.3787 4156.5515,1279.9495 Q4158.4924,1277.5203 4162.1789,1277.5203 Q4163.2165,1277.5203 4164.1687,1277.74 Q4165.1208,1277.9598 4165.9509,1278.3992 L4165.9509,1282.4031 Q4165.0231,1281.5486 4164.1503,1281.1519 Q4163.2775,1280.7552 4162.3498,1280.7552 Q4160.3723,1280.7552 4159.3652,1282.3238 Q4158.3581,1283.8924 4158.3581,1286.9808 Q4158.3581,1290.0569 4159.3652,1291.6255 Q4160.3723,1293.1941 4162.3498,1293.1941 Q4163.2775,1293.1941 4164.1503,1292.7974 Q4165.0231,1292.4007 4165.9509,1291.5462 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="197.4878" x="4187.2551" y="1295.35">GeneratedFollow</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="4066.63" x2="4465.368" y1="1308.1" y2="1308.1"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="4076.63" cy="1329.875" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="249.9815" x="4088.63" y="1336.9">follower_id : uint64_t</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="4076.63" cy="1362.425" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="256.4127" x="4088.63" y="1369.45">followed_id : uint64_t</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="4076.63" cy="1394.975" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="371.738" x="4088.63" y="1402">metadata : GenerationMetadata</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="4066.63" x2="4465.368" y1="1413.75" y2="1413.75"/></g><!--class UserPersona--><g class="entity" data-qualified-name="Domain. Models.UserPersona" data-source-line="187" id="ent0029"><rect fill="#EBECE3" height="156.2" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="477.8261" x="4937.09" y="1265.55"/><ellipse cx="5098.1623" cy="1286.825" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M5101.8581,1295.5501 Q5101.0036,1295.9896 5100.0637,1296.2093 Q5099.1237,1296.429 5098.0861,1296.429 Q5094.3996,1296.429 5092.4587,1293.9998 Q5090.5178,1291.5706 5090.5178,1286.9808 Q5090.5178,1282.3787 5092.4587,1279.9495 Q5094.3996,1277.5203 5098.0861,1277.5203 Q5099.1237,1277.5203 5100.0759,1277.74 Q5101.028,1277.9598 5101.8581,1278.3992 L5101.8581,1282.4031 Q5100.9304,1281.5486 5100.0576,1281.1519 Q5099.1848,1280.7552 5098.257,1280.7552 Q5096.2795,1280.7552 5095.2724,1282.3238 Q5094.2653,1283.8924 5094.2653,1286.9808 Q5094.2653,1290.0569 5095.2724,1291.6255 Q5096.2795,1293.1941 5098.257,1293.1941 Q5099.1848,1293.1941 5100.0576,1292.7974 Q5100.9304,1292.4007 5101.8581,1291.5462 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="145.6815" x="5123.1623" y="1295.35">UserPersona</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="4938.09" x2="5413.9161" y1="1308.1" y2="1308.1"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="4948.09" cy="1329.875" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="190.0942" x="4960.09" y="1336.9">name: std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="4948.09" cy="1362.425" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="258.2444" x="4960.09" y="1369.45">description: std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="4948.09" cy="1394.975" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="448.8261" x="4960.09" y="1402">style_affinities: std::vector<std::string></text><line style="stroke:#4A5837;stroke-width:0.5;" x1="4938.09" x2="5413.9161" y1="1413.75" y2="1413.75"/></g><!--class SamplingOptions--><g class="entity" data-qualified-name="Domain. Application Configuration.SamplingOptions" data-source-line="197" id="ent0032"><rect fill="#EBECE3" height="221.3" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="309.8506" x="7318.07" y="3202.23"/><ellipse cx="7369.1143" cy="3223.505" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M7372.8101,3232.2301 Q7371.9556,3232.6696 7371.0156,3232.8893 Q7370.0757,3233.109 7369.0381,3233.109 Q7365.3516,3233.109 7363.4107,3230.6798 Q7361.4697,3228.2506 7361.4697,3223.6608 Q7361.4697,3219.0587 7363.4107,3216.6295 Q7365.3516,3214.2003 7369.0381,3214.2003 Q7370.0757,3214.2003 7371.0279,3214.42 Q7371.98,3214.6398 7372.8101,3215.0792 L7372.8101,3219.0831 Q7371.8823,3218.2286 7371.0095,3217.8319 Q7370.1367,3217.4352 7369.209,3217.4352 Q7367.2315,3217.4352 7366.2244,3219.0038 Q7365.2173,3220.5724 7365.2173,3223.6608 Q7365.2173,3226.7369 7366.2244,3228.3055 Q7367.2315,3229.8741 7369.209,3229.8741 Q7370.1367,3229.8741 7371.0095,3229.4774 Q7371.8823,3229.0807 7372.8101,3228.2262 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="198.4188" x="7393.4575" y="3232.03">SamplingOptions</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="7319.07" x2="7626.9206" y1="3244.78" y2="3244.78"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="7329.07" cy="3266.555" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="280.8506" x="7341.07" y="3273.58">temperature: float = 1.0F</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="7329.07" cy="3299.105" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="229.9126" x="7341.07" y="3306.13">top_p: float = 0.95F</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="7329.07" cy="3331.655" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="238.9564" x="7341.07" y="3338.68">top_k: uint32_t = 64</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="7329.07" cy="3364.205" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="259.1315" x="7341.07" y="3371.23">n_ctx: uint32_t = 8192</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="7329.07" cy="3396.755" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="146.8315" x="7341.07" y="3403.78">seed: int = -1</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="7319.07" x2="7626.9206" y1="3415.53" y2="3415.53"/></g><!--class GeneratorOptions--><g class="entity" data-qualified-name="Domain. Application Configuration.GeneratorOptions" data-source-line="205" id="ent0033"><rect fill="#EBECE3" height="156.2" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="513.2943" x="7216.35" y="2836.55"/><ellipse cx="7362.5189" cy="2857.825" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M7366.2147,2866.5501 Q7365.3602,2866.9896 7364.4202,2867.2093 Q7363.4803,2867.429 7362.4427,2867.429 Q7358.7562,2867.429 7356.8152,2864.9998 Q7354.8743,2862.5706 7354.8743,2857.9808 Q7354.8743,2853.3787 7356.8152,2850.9495 Q7358.7562,2848.5203 7362.4427,2848.5203 Q7363.4803,2848.5203 7364.4324,2848.74 Q7365.3846,2848.9598 7366.2147,2849.3992 L7366.2147,2853.4031 Q7365.2869,2852.5486 7364.4141,2852.1519 Q7363.5413,2851.7552 7362.6136,2851.7552 Q7360.636,2851.7552 7359.629,2853.3238 Q7358.6219,2854.8924 7358.6219,2857.9808 Q7358.6219,2861.0569 7359.629,2862.6255 Q7360.636,2864.1941 7362.6136,2864.1941 Q7363.5413,2864.1941 7364.4141,2863.7974 Q7365.2869,2863.4007 7366.2147,2862.5462 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="210.9565" x="7387.5189" y="2866.35">GeneratorOptions</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="7217.35" x2="7728.6443" y1="2879.1" y2="2879.1"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="7227.35" cy="2900.875" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="385.3754" x="7239.35" y="2907.9">model_path: std::filesystem::path</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="7227.35" cy="2933.425" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="295.5751" x="7239.35" y="2940.45">use_mocked: bool = false</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="7227.35" cy="2965.975" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="484.2943" x="7239.35" y="2973">sampling: std::optional<SamplingOptions></text><line style="stroke:#4A5837;stroke-width:0.5;" x1="7217.35" x2="7728.6443" y1="2984.75" y2="2984.75"/></g><!--class PipelineOptions--><g class="entity" data-qualified-name="Domain. Application Configuration.PipelineOptions" data-source-line="211" id="ent0034"><rect fill="#EBECE3" height="123.65" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="420.5569" x="6760.72" y="2852.83"/><ellipse cx="6874.4984" cy="2874.105" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M6878.1942,2882.8301 Q6877.3397,2883.2696 6876.3998,2883.4893 Q6875.4598,2883.709 6874.4222,2883.709 Q6870.7357,2883.709 6868.7948,2881.2798 Q6866.8539,2878.8506 6866.8539,2874.2608 Q6866.8539,2869.6587 6868.7948,2867.2295 Q6870.7357,2864.8003 6874.4222,2864.8003 Q6875.4598,2864.8003 6876.412,2865.02 Q6877.3641,2865.2398 6878.1942,2865.6792 L6878.1942,2869.6831 Q6877.2665,2868.8286 6876.3937,2868.4319 Q6875.5209,2868.0352 6874.5931,2868.0352 Q6872.6156,2868.0352 6871.6085,2869.6038 Q6870.6014,2871.1724 6870.6014,2874.2608 Q6870.6014,2877.3369 6871.6085,2878.9055 Q6872.6156,2880.4741 6874.5931,2880.4741 Q6875.5209,2880.4741 6876.3937,2880.0774 Q6877.2665,2879.6807 6878.1942,2878.8262 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="183" x="6899.4984" y="2882.63">PipelineOptions</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="6761.72" x2="7180.2769" y1="2895.38" y2="2895.38"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="6771.72" cy="2917.155" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="391.5569" x="6783.72" y="2924.18">output_path: std::filesystem::path</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="6771.72" cy="2949.705" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="347.1631" x="6783.72" y="2956.73">log_path: std::filesystem::path</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="6761.72" x2="7180.2769" y1="2968.48" y2="2968.48"/></g><!--class ApplicationOptions--><g class="entity" data-qualified-name="Domain. Application Configuration.ApplicationOptions" data-source-line="216" id="ent0035"><rect fill="#EBECE3" height="123.65" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="365.0632" x="7290.47" y="2126.2"/><ellipse cx="7355.564" cy="2147.475" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M7359.2598,2156.2001 Q7358.4053,2156.6396 7357.4654,2156.8593 Q7356.5255,2157.079 7355.4879,2157.079 Q7351.8013,2157.079 7349.8604,2154.6498 Q7347.9195,2152.2206 7347.9195,2147.6308 Q7347.9195,2143.0287 7349.8604,2140.5995 Q7351.8013,2138.1703 7355.4879,2138.1703 Q7356.5255,2138.1703 7357.4776,2138.39 Q7358.4297,2138.6098 7359.2598,2139.0492 L7359.2598,2143.0531 Q7358.3321,2142.1986 7357.4593,2141.8019 Q7356.5865,2141.4052 7355.6588,2141.4052 Q7353.6812,2141.4052 7352.6741,2142.9738 Q7351.6671,2144.5424 7351.6671,2147.6308 Q7351.6671,2150.7069 7352.6741,2152.2755 Q7353.6812,2153.8441 7355.6588,2153.8441 Q7356.5865,2153.8441 7357.4593,2153.4474 Q7358.3321,2153.0507 7359.2598,2152.1962 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="224.8751" x="7380.564" y="2156">ApplicationOptions</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="7291.47" x2="7654.5332" y1="2168.75" y2="2168.75"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="7301.47" cy="2190.525" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="336.0632" x="7313.47" y="2197.55">generator: GeneratorOptions</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="7301.47" cy="2223.075" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="286.3188" x="7313.47" y="2230.1">pipeline: PipelineOptions</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="7291.47" x2="7654.5332" y1="2241.85" y2="2241.85"/></g><!--class ContextStrategy--><g class="entity" data-qualified-name="Domain. Policy.ContextStrategy" data-source-line="228" id="ent0040"><rect fill="#EBECE3" height="156.2" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="703.1327" x="10014.43" y="2836.55"/><ellipse cx="10264.9463" cy="2874.1" fill="#B4A7E5" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M10259.546,2868.5487 L10259.546,2865.3749 L10270.398,2865.3749 L10270.398,2868.5487 L10266.7725,2868.5487 L10266.7725,2880.4262 L10270.398,2880.4262 L10270.398,2883.6 L10259.546,2883.6 L10259.546,2880.4262 L10263.1714,2880.4262 L10263.1714,2868.5487 Z " fill="#14180C"/><text fill="#4A5837" font-family="DM Sans" font-size="25" font-style="italic" lengthAdjust="spacing" textLength="127.05" x="10322.4713" y="2866.35">«interface»</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" font-style="italic" lengthAdjust="spacing" textLength="192.1" x="10289.9463" y="2898.9">ContextStrategy</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="10015.43" x2="10716.5627" y1="2911.65" y2="2911.65"/><line style="stroke:#4A5837;stroke-width:0.5;" x1="10015.43" x2="10716.5627" y1="2919.65" y2="2919.65"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="10025.43" cy="2941.425" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="674.1327" x="10037.43" y="2948.45">QueriesFor(loc : const Location&) : std::vector<std::string></text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="10025.43" cy="2973.975" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="315.5253" x="10037.43" y="2981">MaxContextChars() : size_t</text></g><!--class BreweryContextStrategy--><g class="entity" data-qualified-name="Domain. Policy.BreweryContextStrategy" data-source-line="233" id="ent0041"><rect fill="#EBECE3" height="123.65" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="703.1327" x="10014.43" y="3251.05"/><ellipse cx="10217.3773" cy="3272.325" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M10221.0731,3281.0501 Q10220.2186,3281.4896 10219.2786,3281.7093 Q10218.3387,3281.929 10217.3011,3281.929 Q10213.6146,3281.929 10211.6736,3279.4998 Q10209.7327,3277.0706 10209.7327,3272.4808 Q10209.7327,3267.8787 10211.6736,3265.4495 Q10213.6146,3263.0203 10217.3011,3263.0203 Q10218.3387,3263.0203 10219.2908,3263.24 Q10220.243,3263.4598 10221.0731,3263.8992 L10221.0731,3267.9031 Q10220.1453,3267.0486 10219.2725,3266.6519 Q10218.3997,3266.2552 10217.472,3266.2552 Q10215.4944,3266.2552 10214.4874,3267.8238 Q10213.4803,3269.3924 10213.4803,3272.4808 Q10213.4803,3275.5569 10214.4874,3277.1255 Q10215.4944,3278.6941 10217.472,3278.6941 Q10218.3997,3278.6941 10219.2725,3278.2974 Q10220.1453,3277.9007 10221.0731,3277.0462 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="287.2382" x="10242.3773" y="3280.85">BreweryContextStrategy</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="10015.43" x2="10716.5627" y1="3293.6" y2="3293.6"/><line style="stroke:#4A5837;stroke-width:0.5;" x1="10015.43" x2="10716.5627" y1="3301.6" y2="3301.6"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="10025.43" cy="3323.375" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="674.1327" x="10037.43" y="3330.4">QueriesFor(loc : const Location&) : std::vector<std::string></text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="10025.43" cy="3355.925" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="315.5253" x="10037.43" y="3362.95">MaxContextChars() : size_t</text></g><!--class BeerContextStrategy--><g class="entity" data-qualified-name="Domain. Policy.BeerContextStrategy" data-source-line="238" id="ent0042"><rect fill="#EBECE3" height="123.65" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="703.1327" x="10752.43" y="3251.05"/><ellipse cx="10976.4836" cy="3272.325" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M10980.1794,3281.0501 Q10979.3249,3281.4896 10978.385,3281.7093 Q10977.445,3281.929 10976.4074,3281.929 Q10972.7209,3281.929 10970.78,3279.4998 Q10968.8391,3277.0706 10968.8391,3272.4808 Q10968.8391,3267.8787 10970.78,3265.4495 Q10972.7209,3263.0203 10976.4074,3263.0203 Q10977.445,3263.0203 10978.3972,3263.24 Q10979.3493,3263.4598 10980.1794,3263.8992 L10980.1794,3267.9031 Q10979.2517,3267.0486 10978.3789,3266.6519 Q10977.5061,3266.2552 10976.5783,3266.2552 Q10974.6008,3266.2552 10973.5937,3267.8238 Q10972.5866,3269.3924 10972.5866,3272.4808 Q10972.5866,3275.5569 10973.5937,3277.1255 Q10974.6008,3278.6941 10976.5783,3278.6941 Q10977.5061,3278.6941 10978.3789,3278.2974 Q10979.2517,3277.9007 10980.1794,3277.0462 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="245.0255" x="11001.4836" y="3280.85">BeerContextStrategy</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="10753.43" x2="11454.5627" y1="3293.6" y2="3293.6"/><line style="stroke:#4A5837;stroke-width:0.5;" x1="10753.43" x2="11454.5627" y1="3301.6" y2="3301.6"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="10763.43" cy="3323.375" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="674.1327" x="10775.43" y="3330.4">QueriesFor(loc : const Location&) : std::vector<std::string></text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="10763.43" cy="3355.925" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="315.5253" x="10775.43" y="3362.95">MaxContextChars() : size_t</text></g><!--class SamplingStrategy--><g class="entity" data-qualified-name="Domain. Policy.SamplingStrategy" data-source-line="243" id="ent0043"><rect fill="#EBECE3" height="123.65" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="870.7391" x="10937.63" y="2852.83"/><ellipse cx="11265.6245" cy="2890.38" fill="#B4A7E5" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M11260.2242,2884.8287 L11260.2242,2881.6549 L11271.0762,2881.6549 L11271.0762,2884.8287 L11267.4507,2884.8287 L11267.4507,2896.7062 L11271.0762,2896.7062 L11271.0762,2899.88 L11260.2242,2899.88 L11260.2242,2896.7062 L11263.8496,2896.7062 L11263.8496,2884.8287 Z " fill="#14180C"/><text fill="#4A5837" font-family="DM Sans" font-size="25" font-style="italic" lengthAdjust="spacing" textLength="127.05" x="11329.4745" y="2882.63">«interface»</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" font-style="italic" lengthAdjust="spacing" textLength="204.75" x="11290.6245" y="2915.18">SamplingStrategy</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="10938.63" x2="11807.3691" y1="2927.93" y2="2927.93"/><line style="stroke:#4A5837;stroke-width:0.5;" x1="10938.63" x2="11807.3691" y1="2935.93" y2="2935.93"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="10948.63" cy="2957.705" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="841.7391" x="10960.63" y="2964.73">Sample(locations : const std::vector<Location>&) : std::vector<Location></text></g><!--class UniformSamplingStrategy--><g class="entity" data-qualified-name="Domain. Policy.UniformSamplingStrategy" data-source-line="247" id="ent0044"><rect fill="#EBECE3" height="123.65" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="870.7391" x="11490.63" y="3251.05"/><ellipse cx="11772.7774" cy="3272.325" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M11776.4732,3281.0501 Q11775.6187,3281.4896 11774.6788,3281.7093 Q11773.7388,3281.929 11772.7012,3281.929 Q11769.0147,3281.929 11767.0738,3279.4998 Q11765.1329,3277.0706 11765.1329,3272.4808 Q11765.1329,3267.8787 11767.0738,3265.4495 Q11769.0147,3263.0203 11772.7012,3263.0203 Q11773.7388,3263.0203 11774.691,3263.24 Q11775.6431,3263.4598 11776.4732,3263.8992 L11776.4732,3267.9031 Q11775.5455,3267.0486 11774.6726,3266.6519 Q11773.7998,3266.2552 11772.8721,3266.2552 Q11770.8946,3266.2552 11769.8875,3267.8238 Q11768.8804,3269.3924 11768.8804,3272.4808 Q11768.8804,3275.5569 11769.8875,3277.1255 Q11770.8946,3278.6941 11772.8721,3278.6941 Q11773.7998,3278.6941 11774.6726,3278.2974 Q11775.5455,3277.9007 11776.4732,3277.0462 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="296.4443" x="11797.7774" y="3280.85">UniformSamplingStrategy</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="11491.63" x2="12360.3691" y1="3293.6" y2="3293.6"/><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="11498.63" y="3312.375"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="249.9499" x="11513.63" y="3322.4">sample_size_ : size_t</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="11491.63" x2="12360.3691" y1="3334.15" y2="3334.15"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="11501.63" cy="3355.925" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="841.7391" x="11513.63" y="3362.95">Sample(locations : const std::vector<Location>&) : std::vector<Location></text></g><!--class BeerSelectionStrategy--><g class="entity" data-qualified-name="Domain. Policy.BeerSelectionStrategy" data-source-line="252" id="ent0045"><rect fill="#EBECE3" height="156.2" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="747.9575" x="12212.02" y="2836.55"/><ellipse cx="12451.1113" cy="2874.1" fill="#B4A7E5" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M12445.7109,2868.5487 L12445.7109,2865.3749 L12456.5629,2865.3749 L12456.5629,2868.5487 L12452.9374,2868.5487 L12452.9374,2880.4262 L12456.5629,2880.4262 L12456.5629,2883.6 L12445.7109,2883.6 L12445.7109,2880.4262 L12449.3364,2880.4262 L12449.3364,2868.5487 Z " fill="#14180C"/><text fill="#4A5837" font-family="DM Sans" font-size="25" font-style="italic" lengthAdjust="spacing" textLength="127.05" x="12542.4738" y="2866.35">«interface»</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" font-style="italic" lengthAdjust="spacing" textLength="259.775" x="12476.1113" y="2898.9">BeerSelectionStrategy</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="12213.02" x2="12958.9775" y1="2911.65" y2="2911.65"/><line style="stroke:#4A5837;stroke-width:0.5;" x1="12213.02" x2="12958.9775" y1="2919.65" y2="2919.65"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="12223.02" cy="2957.7" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="580.8262" x="12235.02" y="2948.45">SelectStyles(brewery : const GeneratedBrewery&,</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="705.6575" x="12248.32" y="2981">palette : std::span<const BeerStyle>) : std::vector<BeerStyle></text></g><!--class RandomBeerSelectionStrategy--><g class="entity" data-qualified-name="Domain. Policy.RandomBeerSelectionStrategy" data-source-line="256" id="ent0046"><rect fill="#EBECE3" height="221.3" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="747.9575" x="12396.02" y="3202.23"/><ellipse cx="12587.4797" cy="3223.505" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M12591.1755,3232.2301 Q12590.321,3232.6696 12589.3811,3232.8893 Q12588.4412,3233.109 12587.4036,3233.109 Q12583.717,3233.109 12581.7761,3230.6798 Q12579.8352,3228.2506 12579.8352,3223.6608 Q12579.8352,3219.0587 12581.7761,3216.6295 Q12583.717,3214.2003 12587.4036,3214.2003 Q12588.4412,3214.2003 12589.3933,3214.42 Q12590.3455,3214.6398 12591.1755,3215.0792 L12591.1755,3219.0831 Q12590.2478,3218.2286 12589.375,3217.8319 Q12588.5022,3217.4352 12587.5745,3217.4352 Q12585.5969,3217.4352 12584.5898,3219.0038 Q12583.5828,3220.5724 12583.5828,3223.6608 Q12583.5828,3226.7369 12584.5898,3228.3055 Q12585.5969,3229.8741 12587.5745,3229.8741 Q12588.5022,3229.8741 12589.375,3229.4774 Q12590.2478,3229.0807 12591.1755,3228.2262 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="355.0381" x="12612.4797" y="3232.03">RandomBeerSelectionStrategy</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="12397.02" x2="13142.9775" y1="3244.78" y2="3244.78"/><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="12404.02" y="3263.555"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="219.9004" x="12419.02" y="3273.58">rng_ : std::mt19937</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="12404.02" y="3296.105"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="230.3374" x="12419.02" y="3306.13">min_beers_ : size_t</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="12404.02" y="3328.655"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="236.0249" x="12419.02" y="3338.68">max_beers_ : size_t</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="12397.02" x2="13142.9775" y1="3350.43" y2="3350.43"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="12407.02" cy="3388.48" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="580.8262" x="12419.02" y="3379.23">SelectStyles(brewery : const GeneratedBrewery&,</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="705.6575" x="12432.32" y="3411.78">palette : std::span<const BeerStyle>) : std::vector<BeerStyle></text></g><!--class CheckinDistributionStrategy--><g class="entity" data-qualified-name="Domain. Policy.CheckinDistributionStrategy" data-source-line="263" id="ent0047"><rect fill="#EBECE3" height="253.85" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="803.5516" x="13179.22" y="2787.73"/><ellipse cx="13411.5833" cy="2825.28" fill="#B4A7E5" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M13406.1829,2819.7287 L13406.1829,2816.5549 L13417.035,2816.5549 L13417.035,2819.7287 L13413.4095,2819.7287 L13413.4095,2831.6062 L13417.035,2831.6062 L13417.035,2834.78 L13406.1829,2834.78 L13406.1829,2831.6062 L13409.8084,2831.6062 L13409.8084,2819.7287 Z " fill="#14180C"/><text fill="#4A5837" font-family="DM Sans" font-size="25" font-style="italic" lengthAdjust="spacing" textLength="127.05" x="13537.4708" y="2817.53">«interface»</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" font-style="italic" lengthAdjust="spacing" textLength="328.825" x="13436.5833" y="2850.08">CheckinDistributionStrategy</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="13180.22" x2="13981.7716" y1="2862.83" y2="2862.83"/><line style="stroke:#4A5837;stroke-width:0.5;" x1="13180.22" x2="13981.7716" y1="2870.83" y2="2870.83"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="13190.22" cy="2892.605" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="774.5516" x="13202.22" y="2899.63">AssignActivityWeights(users : std::vector<GeneratedUser>&) : void</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="13190.22" cy="2941.43" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="546.101" x="13202.22" y="2932.18">CheckinsForUser(user : const GeneratedUser&,</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="366.638" x="13215.52" y="2964.73">brewery_count : size_t) : size_t</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="13190.22" cy="3006.53" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="517.8133" x="13202.22" y="2997.28">TimestampFor(user : const GeneratedUser&,</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="293.0942" x="13215.52" y="3029.83">index : size_t) : std::string</text></g><!--class JCurveCheckinStrategy--><g class="entity" data-qualified-name="Domain. Policy.JCurveCheckinStrategy" data-source-line="269" id="ent0048"><rect fill="#EBECE3" height="253.85" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="803.5516" x="13179.22" y="3185.95"/><ellipse cx="13438.933" cy="3207.225" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M13442.6288,3215.9501 Q13441.7743,3216.3896 13440.8344,3216.6093 Q13439.8945,3216.829 13438.8569,3216.829 Q13435.1703,3216.829 13433.2294,3214.3998 Q13431.2885,3211.9706 13431.2885,3207.3808 Q13431.2885,3202.7787 13433.2294,3200.3495 Q13435.1703,3197.9203 13438.8569,3197.9203 Q13439.8945,3197.9203 13440.8466,3198.14 Q13441.7988,3198.3598 13442.6288,3198.7992 L13442.6288,3202.8031 Q13441.7011,3201.9486 13440.8283,3201.5519 Q13439.9555,3201.1552 13439.0278,3201.1552 Q13437.0502,3201.1552 13436.0431,3202.7238 Q13435.0361,3204.2924 13435.0361,3207.3808 Q13435.0361,3210.4569 13436.0431,3212.0255 Q13437.0502,3213.5941 13439.0278,3213.5941 Q13439.9555,3213.5941 13440.8283,3213.1974 Q13441.7011,3212.8007 13442.6288,3211.9462 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="274.1255" x="13463.933" y="3215.75">JCurveCheckinStrategy</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="13180.22" x2="13981.7716" y1="3228.5" y2="3228.5"/><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="13187.22" y="3247.275"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="219.9004" x="13202.22" y="3257.3">rng_ : std::mt19937</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="13180.22" x2="13981.7716" y1="3269.05" y2="3269.05"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="13190.22" cy="3290.825" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="774.5516" x="13202.22" y="3297.85">AssignActivityWeights(users : std::vector<GeneratedUser>&) : void</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="13190.22" cy="3339.65" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="546.101" x="13202.22" y="3330.4">CheckinsForUser(user : const GeneratedUser&,</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="366.638" x="13215.52" y="3362.95">brewery_count : size_t) : size_t</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="13190.22" cy="3404.75" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="517.8133" x="13202.22" y="3395.5">TimestampFor(user : const GeneratedUser&,</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="293.0942" x="13215.52" y="3428.05">index : size_t) : std::string</text></g><!--class RandomCheckinStrategy--><g class="entity" data-qualified-name="Domain. Policy.RandomCheckinStrategy" data-source-line="276" id="ent0049"><rect fill="#EBECE3" height="318.95" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="803.5516" x="14018.22" y="3153.4"/><ellipse cx="14270.8456" cy="3174.675" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M14274.5414,3183.4001 Q14273.6869,3183.8396 14272.747,3184.0593 Q14271.807,3184.279 14270.7694,3184.279 Q14267.0829,3184.279 14265.142,3181.8498 Q14263.2011,3179.4206 14263.2011,3174.8308 Q14263.2011,3170.2287 14265.142,3167.7995 Q14267.0829,3165.3703 14270.7694,3165.3703 Q14271.807,3165.3703 14272.7592,3165.59 Q14273.7113,3165.8098 14274.5414,3166.2492 L14274.5414,3170.2531 Q14273.6137,3169.3986 14272.7409,3169.0019 Q14271.8681,3168.6052 14270.9403,3168.6052 Q14268.9628,3168.6052 14267.9557,3170.1738 Q14266.9486,3171.7424 14266.9486,3174.8308 Q14266.9486,3177.9069 14267.9557,3179.4755 Q14268.9628,3181.0441 14270.9403,3181.0441 Q14271.8681,3181.0441 14272.7409,3180.6474 Q14273.6137,3180.2507 14274.5414,3179.3962 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="288.3004" x="14295.8456" y="3183.2">RandomCheckinStrategy</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="14019.22" x2="14820.7716" y1="3195.95" y2="3195.95"/><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="14026.22" y="3214.725"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="219.9004" x="14041.22" y="3224.75">rng_ : std::mt19937</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="14026.22" y="3247.275"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="267.1062" x="14041.22" y="3257.3">min_checkins_ : size_t</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="14026.22" y="3279.825"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="272.7936" x="14041.22" y="3289.85">max_checkins_ : size_t</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="14019.22" x2="14820.7716" y1="3301.6" y2="3301.6"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="14029.22" cy="3323.375" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="774.5516" x="14041.22" y="3330.4">AssignActivityWeights(users : std::vector<GeneratedUser>&) : void</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="14029.22" cy="3372.2" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="546.101" x="14041.22" y="3362.95">CheckinsForUser(user : const GeneratedUser&,</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="366.638" x="14054.52" y="3395.5">brewery_count : size_t) : size_t</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="14029.22" cy="3437.3" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="517.8133" x="14041.22" y="3428.05">TimestampFor(user : const GeneratedUser&,</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="293.0942" x="14054.52" y="3460.6">index : size_t) : std::string</text></g><!--class FollowGenerationStrategy--><g class="entity" data-qualified-name="Domain. Policy.FollowGenerationStrategy" data-source-line="285" id="ent0050"><rect fill="#EBECE3" height="123.65" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="1108.7897" x="14856.61" y="2852.83"/><ellipse cx="15254.9548" cy="2890.38" fill="#B4A7E5" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M15249.5545,2884.8287 L15249.5545,2881.6549 L15260.4065,2881.6549 L15260.4065,2884.8287 L15256.781,2884.8287 L15256.781,2896.7062 L15260.4065,2896.7062 L15260.4065,2899.88 L15249.5545,2899.88 L15249.5545,2896.7062 L15253.1799,2896.7062 L15253.1799,2884.8287 Z " fill="#14180C"/><text fill="#4A5837" font-family="DM Sans" font-size="25" font-style="italic" lengthAdjust="spacing" textLength="127.05" x="15367.4798" y="2882.63">«interface»</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" font-style="italic" lengthAdjust="spacing" textLength="302.1" x="15279.9548" y="2915.18">FollowGenerationStrategy</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="14857.61" x2="15964.3997" y1="2927.93" y2="2927.93"/><line style="stroke:#4A5837;stroke-width:0.5;" x1="14857.61" x2="15964.3997" y1="2935.93" y2="2935.93"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="14867.61" cy="2957.705" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="1079.7897" x="14879.61" y="2964.73">GenerateFollows(users : const std::vector<GeneratedUser>&) : std::vector<GeneratedFollow></text></g><!--class RandomFollowStrategy--><g class="entity" data-qualified-name="Domain. Policy.RandomFollowStrategy" data-source-line="289" id="ent0051"><rect fill="#EBECE3" height="188.75" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="1108.7897" x="14856.61" y="3218.5"/><ellipse cx="15272.089" cy="3239.775" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M15275.7848,3248.5001 Q15274.9303,3248.9396 15273.9903,3249.1593 Q15273.0504,3249.379 15272.0128,3249.379 Q15268.3263,3249.379 15266.3853,3246.9498 Q15264.4444,3244.5206 15264.4444,3239.9308 Q15264.4444,3235.3287 15266.3853,3232.8995 Q15268.3263,3230.4703 15272.0128,3230.4703 Q15273.0504,3230.4703 15274.0025,3230.69 Q15274.9547,3230.9098 15275.7848,3231.3492 L15275.7848,3235.3531 Q15274.857,3234.4986 15273.9842,3234.1019 Q15273.1114,3233.7052 15272.1837,3233.7052 Q15270.2061,3233.7052 15269.1991,3235.2738 Q15268.192,3236.8424 15268.192,3239.9308 Q15268.192,3243.0069 15269.1991,3244.5755 Q15270.2061,3246.1441 15272.1837,3246.1441 Q15273.1114,3246.1441 15273.9842,3245.7474 Q15274.857,3245.3507 15275.7848,3244.4962 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="267.8318" x="15297.089" y="3248.3">RandomFollowStrategy</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="14857.61" x2="15964.3997" y1="3261.05" y2="3261.05"/><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="14864.61" y="3279.825"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="219.9004" x="14879.61" y="3289.85">rng_ : std::mt19937</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="14864.61" y="3312.375"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="245.3938" x="14879.61" y="3322.4">min_follows_ : size_t</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="14864.61" y="3344.925"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="251.0813" x="14879.61" y="3354.95">max_follows_ : size_t</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="14857.61" x2="15964.3997" y1="3366.7" y2="3366.7"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="14867.61" cy="3388.475" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="1079.7897" x="14879.61" y="3395.5">GenerateFollows(users : const std::vector<GeneratedUser>&) : std::vector<GeneratedFollow></text></g><!--class ActivityWeightedFollowStrategy--><g class="entity" data-qualified-name="Domain. Policy.ActivityWeightedFollowStrategy" data-source-line="296" id="ent0052"><rect fill="#EBECE3" height="188.75" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="1108.7897" x="16000.61" y="3218.5"/><ellipse cx="16362.9263" cy="3239.775" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M16366.6221,3248.5001 Q16365.7676,3248.9396 16364.8277,3249.1593 Q16363.8877,3249.379 16362.8501,3249.379 Q16359.1636,3249.379 16357.2227,3246.9498 Q16355.2818,3244.5206 16355.2818,3239.9308 Q16355.2818,3235.3287 16357.2227,3232.8995 Q16359.1636,3230.4703 16362.8501,3230.4703 Q16363.8877,3230.4703 16364.8399,3230.69 Q16365.792,3230.9098 16366.6221,3231.3492 L16366.6221,3235.3531 Q16365.6944,3234.4986 16364.8216,3234.1019 Q16363.9488,3233.7052 16363.021,3233.7052 Q16361.0435,3233.7052 16360.0364,3235.2738 Q16359.0293,3236.8424 16359.0293,3239.9308 Q16359.0293,3243.0069 16360.0364,3244.5755 Q16361.0435,3246.1441 16363.021,3246.1441 Q16363.9488,3246.1441 16364.8216,3245.7474 Q16365.6944,3245.3507 16366.6221,3244.4962 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="374.1571" x="16387.9263" y="3248.3">ActivityWeightedFollowStrategy</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="16001.61" x2="17108.3997" y1="3261.05" y2="3261.05"/><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="16008.61" y="3279.825"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="219.9004" x="16023.61" y="3289.85">rng_ : std::mt19937</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="16008.61" y="3312.375"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="245.3938" x="16023.61" y="3322.4">min_follows_ : size_t</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="16008.61" y="3344.925"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="251.0813" x="16023.61" y="3354.95">max_follows_ : size_t</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="16001.61" x2="17108.3997" y1="3366.7" y2="3366.7"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="16011.61" cy="3388.475" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="1079.7897" x="16023.61" y="3395.5">GenerateFollows(users : const std::vector<GeneratedUser>&) : std::vector<GeneratedFollow></text></g><!--class LogLevel--><g class="entity" data-qualified-name="Infrastructure. Logging.LogLevel" data-source-line="305" id="ent0054"><rect fill="#EBECE3" height="188.75" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="140.2564" x="18391.87" y="2820.28"/><ellipse cx="18409.87" cy="2841.555" fill="#EB937F" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M18415.7733,2851.055 L18404.4208,2851.055 L18404.4208,2832.8299 L18415.7733,2832.8299 L18415.7733,2836.0037 L18408.0219,2836.0037 L18408.0219,2839.9344 L18415.0409,2839.9344 L18415.0409,2843.1082 L18408.0219,2843.1082 L18408.0219,2847.8812 L18415.7733,2847.8812 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="102.2564" x="18426.87" y="2850.08">LogLevel</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="18392.87" x2="18531.1264" y1="2862.83" y2="2862.83"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="75.3437" x="18397.87" y="2891.63">Debug</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="43.5064" x="18397.87" y="2924.18">Info</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="61.3814" x="18397.87" y="2956.73">Warn</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="56.694" x="18397.87" y="2989.28">Error</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="18392.87" x2="18531.1264" y1="3001.03" y2="3001.03"/></g><!--class PipelinePhase--><g class="entity" data-qualified-name="Infrastructure. Logging.PipelinePhase" data-source-line="312" id="ent0055"><rect fill="#EBECE3" height="286.4" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="335.8006" x="18567.1" y="2771.45"/><ellipse cx="18650.1471" cy="2792.725" fill="#EB937F" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M18656.0504,2802.225 L18644.6979,2802.225 L18644.6979,2783.9999 L18656.0504,2783.9999 L18656.0504,2787.1737 L18648.299,2787.1737 L18648.299,2791.1044 L18655.318,2791.1044 L18655.318,2794.2782 L18648.299,2794.2782 L18648.299,2799.0512 L18656.0504,2799.0512 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="159.7064" x="18675.1471" y="2801.25">PipelinePhase</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="18568.1" x2="18901.9006" y1="2814" y2="2814"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="86.9315" x="18573.1" y="2842.8">Startup</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="181.9003" x="18573.1" y="2875.35">UserGeneration</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="323.8006" x="18573.1" y="2907.9">BreweryAndBeerGeneration</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="223.2315" x="18573.1" y="2940.45">CheckinGeneration</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="202.0317" x="18573.1" y="2973">RatingGeneration</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="202.7629" x="18573.1" y="3005.55">FollowGeneration</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="114.9877" x="18573.1" y="3038.1">Teardown</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="18568.1" x2="18901.9006" y1="3049.85" y2="3049.85"/></g><!--class LogEntry--><g class="entity" data-qualified-name="Infrastructure. Logging.LogEntry" data-source-line="322" id="ent0056"><rect fill="#EBECE3" height="221.3" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="616.4693" x="18256.77" y="2077.38"/><ellipse cx="18508.3295" cy="2098.655" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M18512.0253,2107.3801 Q18511.1708,2107.8196 18510.2309,2108.0393 Q18509.2909,2108.259 18508.2533,2108.259 Q18504.5668,2108.259 18502.6259,2105.8298 Q18500.685,2103.4006 18500.685,2098.8108 Q18500.685,2094.2087 18502.6259,2091.7795 Q18504.5668,2089.3503 18508.2533,2089.3503 Q18509.2909,2089.3503 18510.2431,2089.57 Q18511.1952,2089.7898 18512.0253,2090.2292 L18512.0253,2094.2331 Q18511.0976,2093.3786 18510.2248,2092.9819 Q18509.352,2092.5852 18508.4242,2092.5852 Q18506.4467,2092.5852 18505.4396,2094.1538 Q18504.4325,2095.7224 18504.4325,2098.8108 Q18504.4325,2101.8869 18505.4396,2103.4555 Q18506.4467,2105.0241 18508.4242,2105.0241 Q18509.352,2105.0241 18510.2248,2104.6274 Q18511.0976,2104.2307 18512.0253,2103.3762 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="103.3503" x="18533.3295" y="2107.18">LogEntry</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="18257.77" x2="18872.2393" y1="2119.93" y2="2119.93"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="18267.77" cy="2141.705" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="587.4693" x="18279.77" y="2148.73">timestamp : std::chrono::system_clock::time_point</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="18267.77" cy="2174.255" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="173.3316" x="18279.77" y="2181.28">level : LogLevel</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="18267.77" cy="2206.805" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="248.444" x="18279.77" y="2213.83">phase : PipelinePhase</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="18267.77" cy="2239.355" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="235.6693" x="18279.77" y="2246.38">message : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="18267.77" cy="2271.905" fill="none" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="381.751" x="18279.77" y="2278.93">worker : std::optional<std::string></text><line style="stroke:#4A5837;stroke-width:0.5;" x1="18257.77" x2="18872.2393" y1="2290.68" y2="2290.68"/></g><!--class ILogger--><g class="entity" data-qualified-name="Infrastructure. Logging.ILogger" data-source-line="330" id="ent0057"><rect fill="#EBECE3" height="123.65" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="431.551" x="18034.22" y="412.73"/><ellipse cx="18183.4705" cy="450.28" fill="#B4A7E5" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M18178.0701,444.7287 L18178.0701,441.5549 L18188.9222,441.5549 L18188.9222,444.7287 L18185.2967,444.7287 L18185.2967,456.6062 L18188.9222,456.6062 L18188.9222,459.78 L18178.0701,459.78 L18178.0701,456.6062 L18181.6956,456.6062 L18181.6956,444.7287 Z " fill="#14180C"/><text fill="#4A5837" font-family="DM Sans" font-size="25" font-style="italic" lengthAdjust="spacing" textLength="127.05" x="18206.4705" y="442.53">«interface»</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" font-style="italic" lengthAdjust="spacing" textLength="85.15" x="18227.4205" y="475.08">ILogger</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="18035.22" x2="18464.771" y1="487.83" y2="487.83"/><line style="stroke:#4A5837;stroke-width:0.5;" x1="18035.22" x2="18464.771" y1="495.83" y2="495.83"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="18045.22" cy="517.605" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="402.551" x="18057.22" y="524.63">Log(entry : const LogEntry&) : void</text></g><!--class LogProducer--><g class="entity" data-qualified-name="Infrastructure. Logging.LogProducer" data-source-line="334" id="ent0058"><rect fill="#EBECE3" height="123.65" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="502.2441" x="17998.88" y="1281.83"/><ellipse cx="18170.8675" cy="1303.105" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M18174.5633,1311.8301 Q18173.7088,1312.2696 18172.7689,1312.4893 Q18171.829,1312.709 18170.7914,1312.709 Q18167.1048,1312.709 18165.1639,1310.2798 Q18163.223,1307.8506 18163.223,1303.2608 Q18163.223,1298.6587 18165.1639,1296.2295 Q18167.1048,1293.8003 18170.7914,1293.8003 Q18171.829,1293.8003 18172.7811,1294.02 Q18173.7333,1294.2398 18174.5633,1294.6792 L18174.5633,1298.6831 Q18173.6356,1297.8286 18172.7628,1297.4319 Q18171.89,1297.0352 18170.9623,1297.0352 Q18168.9847,1297.0352 18167.9776,1298.6038 Q18166.9706,1300.1724 18166.9706,1303.2608 Q18166.9706,1306.3369 18167.9776,1307.9055 Q18168.9847,1309.4741 18170.9623,1309.4741 Q18171.89,1309.4741 18172.7628,1309.0774 Q18173.6356,1308.6807 18174.5633,1307.8262 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="148.2691" x="18195.8675" y="1311.63">LogProducer</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="17999.88" x2="18500.1241" y1="1324.38" y2="1324.38"/><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="18006.88" y="1343.155"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="473.2441" x="18021.88" y="1353.18">channel_ : BoundedChannel<LogEntry>&</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="17999.88" x2="18500.1241" y1="1364.93" y2="1364.93"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="18009.88" cy="1386.705" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="402.551" x="18021.88" y="1393.73">Log(entry : const LogEntry&) : void</text></g><!--class LogDispatcher--><g class="entity" data-qualified-name="Infrastructure. Logging.LogDispatcher" data-source-line="339" id="ent0059"><rect fill="#EBECE3" height="156.2" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="573.6006" x="18536.2" y="1265.55"/><ellipse cx="18733.5752" cy="1286.825" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M18737.271,1295.5501 Q18736.4165,1295.9896 18735.4765,1296.2093 Q18734.5366,1296.429 18733.499,1296.429 Q18729.8125,1296.429 18727.8716,1293.9998 Q18725.9306,1291.5706 18725.9306,1286.9808 Q18725.9306,1282.3787 18727.8716,1279.9495 Q18729.8125,1277.5203 18733.499,1277.5203 Q18734.5366,1277.5203 18735.4887,1277.74 Q18736.4409,1277.9598 18737.271,1278.3992 L18737.271,1282.4031 Q18736.3432,1281.5486 18735.4704,1281.1519 Q18734.5976,1280.7552 18733.6699,1280.7552 Q18731.6924,1280.7552 18730.6853,1282.3238 Q18729.6782,1283.8924 18729.6782,1286.9808 Q18729.6782,1290.0569 18730.6853,1291.6255 Q18731.6924,1293.1941 18733.6699,1293.1941 Q18734.5976,1293.1941 18735.4704,1292.7974 Q18736.3432,1292.4007 18737.271,1291.5462 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="168.8502" x="18758.5752" y="1295.35">LogDispatcher</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="18537.2" x2="19108.8006" y1="1308.1" y2="1308.1"/><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="18544.2" y="1326.875"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="473.2441" x="18559.2" y="1336.9">channel_ : BoundedChannel<LogEntry>&</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="18537.2" x2="19108.8006" y1="1348.65" y2="1348.65"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="18547.2" cy="1370.425" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="130.1564" x="18559.2" y="1377.45">Run() : void</text><g data-visibility-modifier="PRIVATE_METHOD"><rect fill="#F24D5C" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="18544.2" y="1399.975"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="544.6006" x="18559.2" y="1410">ToSpdlogLevel(level) : spdlog::level::level_enum</text></g><!--class BoundedChannel--><g class="entity" data-qualified-name="Infrastructure. Pipeline Channel.BoundedChannel" data-source-line="354" id="ent0066"><rect fill="#EBECE3" height="351.5" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="460.9128" x="5470.54" y="2738.9"/><ellipse cx="5587.7526" cy="2760.175" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M5591.4484,2768.9001 Q5590.5939,2769.3396 5589.654,2769.5593 Q5588.7141,2769.779 5587.6765,2769.779 Q5583.9899,2769.779 5582.049,2767.3498 Q5580.1081,2764.9206 5580.1081,2760.3308 Q5580.1081,2755.7287 5582.049,2753.2995 Q5583.9899,2750.8703 5587.6765,2750.8703 Q5588.7141,2750.8703 5589.6662,2751.09 Q5590.6184,2751.3098 5591.4484,2751.7492 L5591.4484,2755.7531 Q5590.5207,2754.8986 5589.6479,2754.5019 Q5588.7751,2754.1052 5587.8474,2754.1052 Q5585.8698,2754.1052 5584.8627,2755.6738 Q5583.8557,2757.2424 5583.8557,2760.3308 Q5583.8557,2763.4069 5584.8627,2764.9755 Q5585.8698,2766.5441 5587.8474,2766.5441 Q5588.7751,2766.5441 5589.6479,2766.1474 Q5590.5207,2765.7507 5591.4484,2764.8962 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="198.4876" x="5612.7526" y="2768.7">BoundedChannel</text><rect fill="#EBECE3" height="34.55" style="stroke:#4A5837;stroke-width:1;stroke-dasharray:2,2;" width="16" x="5918.4528" y="2735.9"/><text fill="#4A5837" font-family="DM Sans" font-size="25" font-style="italic" lengthAdjust="spacing" textLength="14" x="5919.4528" y="2761.7">T</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="5471.54" x2="5930.4528" y1="2781.45" y2="2781.45"/><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="5478.54" y="2800.225"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="269.9875" x="5493.54" y="2810.25">queue_ : std::queue<T></text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="5478.54" y="2832.775"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="228.9875" x="5493.54" y="2842.8">mutex_ : std::mutex</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="5478.54" y="2865.325"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="390.0504" x="5493.54" y="2875.35">not_full_ : std::condition_variable</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="5478.54" y="2897.875"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="431.9128" x="5493.54" y="2907.9">not_empty_ : std::condition_variable</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="5478.54" y="2930.425"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="206.5063" x="5493.54" y="2940.45">capacity_ : size_t</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="5478.54" y="2962.975"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="162.8875" x="5493.54" y="2973">closed_ : bool</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="5471.54" x2="5930.4528" y1="2984.75" y2="2984.75"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="5481.54" cy="3006.525" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="229.9814" x="5493.54" y="3013.55">Send(item : T) : void</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="5481.54" cy="3039.075" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="312.1567" x="5493.54" y="3046.1">Receive() : std::optional<T></text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="5481.54" cy="3071.625" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="151.7314" x="5493.54" y="3078.65">Close() : void</text></g><!--class ICuratedDataService--><g class="entity" data-qualified-name="Infrastructure. Data Preloading.ICuratedDataService" data-source-line="370" id="ent0068"><rect fill="#EBECE3" height="253.85" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="1586.5524" x="10276.72" y="1216.73"/><ellipse cx="10944.2337" cy="1254.28" fill="#B4A7E5" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M10938.8333,1248.7287 L10938.8333,1245.5549 L10949.6853,1245.5549 L10949.6853,1248.7287 L10946.0599,1248.7287 L10946.0599,1260.6062 L10949.6853,1260.6062 L10949.6853,1263.78 L10938.8333,1263.78 L10938.8333,1260.6062 L10942.4588,1260.6062 L10942.4588,1248.7287 Z " fill="#14180C"/><text fill="#4A5837" font-family="DM Sans" font-size="25" font-style="italic" lengthAdjust="spacing" textLength="127.05" x="11026.4712" y="1246.53">«interface»</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" font-style="italic" lengthAdjust="spacing" textLength="241.525" x="10969.2337" y="1279.08">ICuratedDataService</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="10277.72" x2="11862.2724" y1="1291.83" y2="1291.83"/><line style="stroke:#4A5837;stroke-width:0.5;" x1="10277.72" x2="11862.2724" y1="1299.83" y2="1299.83"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="10287.72" cy="1321.605" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="978.4644" x="10299.72" y="1328.63">LoadLocations(filepath : const std::filesystem::path&) : const std::vector<Location>&</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="10287.72" cy="1354.155" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="998.2018" x="10299.72" y="1361.18">LoadBeerStyles(filepath : const std::filesystem::path&) : const std::vector<BeerStyle>&</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="10287.72" cy="1386.705" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="1015.7458" x="10299.72" y="1393.73">LoadPersonas(filepath : const std::filesystem::path&) : const std::vector<UserPersona>&</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="10287.72" cy="1419.255" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="1557.5524" x="10299.72" y="1426.28">LoadForenamesByCountry(forenames_filepath : const std::filesystem::path&) : const std::unordered_map<std::string, forename_list>&</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="10287.72" cy="1451.805" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="1522.6647" x="10299.72" y="1458.83">LoadSurnamesByCountry(surnames_filepath : const std::filesystem::path&) : const std::unordered_map<std::string, surname_list>&</text></g><!--class JsonLoader--><g class="entity" data-qualified-name="Infrastructure. Data Preloading.JsonLoader" data-source-line="378" id="ent0069"><rect fill="#EBECE3" height="221.3" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="1586.5524" x="10276.72" y="2077.38"/><ellipse cx="10997.5086" cy="2098.655" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M11001.2044,2107.3801 Q11000.3499,2107.8196 10999.41,2108.0393 Q10998.47,2108.259 10997.4324,2108.259 Q10993.7459,2108.259 10991.805,2105.8298 Q10989.8641,2103.4006 10989.8641,2098.8108 Q10989.8641,2094.2087 10991.805,2091.7795 Q10993.7459,2089.3503 10997.4324,2089.3503 Q10998.47,2089.3503 10999.4222,2089.57 Q11000.3743,2089.7898 11001.2044,2090.2292 L11001.2044,2094.2331 Q11000.2767,2093.3786 10999.4039,2092.9819 Q10998.5311,2092.5852 10997.6033,2092.5852 Q10995.6258,2092.5852 10994.6187,2094.1538 Q10993.6116,2095.7224 10993.6116,2098.8108 Q10993.6116,2101.8869 10994.6187,2103.4555 Q10995.6258,2105.0241 10997.6033,2105.0241 Q10998.5311,2105.0241 10999.4039,2104.6274 Q11000.2767,2104.2307 11001.2044,2103.3762 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="134.9752" x="11022.5086" y="2107.18">JsonLoader</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="10277.72" x2="11862.2724" y1="2119.93" y2="2119.93"/><line style="stroke:#4A5837;stroke-width:0.5;" x1="10277.72" x2="11862.2724" y1="2127.93" y2="2127.93"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="10287.72" cy="2149.705" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="978.4644" x="10299.72" y="2156.73">LoadLocations(filepath : const std::filesystem::path&) : const std::vector<Location>&</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="10287.72" cy="2182.255" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="998.2018" x="10299.72" y="2189.28">LoadBeerStyles(filepath : const std::filesystem::path&) : const std::vector<BeerStyle>&</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="10287.72" cy="2214.805" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="1015.7458" x="10299.72" y="2221.83">LoadPersonas(filepath : const std::filesystem::path&) : const std::vector<UserPersona>&</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="10287.72" cy="2247.355" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="1557.5524" x="10299.72" y="2254.38">LoadForenamesByCountry(forenames_filepath : const std::filesystem::path&) : const std::unordered_map<std::string, forename_list>&</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="10287.72" cy="2279.905" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="1522.6647" x="10299.72" y="2286.93">LoadSurnamesByCountry(surnames_filepath : const std::filesystem::path&) : const std::unordered_map<std::string, surname_list>&</text></g><g class="entity" data-qualified-name="Infrastructure. Data Preloading.GMN70" data-source-line="387" id="ent0071"><path d="M11897.79,2134.2 L11897.79,2184.03 L11863.74,2188.03 L11897.79,2192.03 L11897.79,2241.85 A0,0 0 0 0 11897.79,2241.85 L12478.2034,2241.85 A0,0 0 0 0 12478.2034,2241.85 L12478.2034,2144.2 L12468.2034,2134.2 L11897.79,2134.2 A0,0 0 0 0 11897.79,2134.2" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><path d="M12468.2034,2134.2 L12468.2034,2144.2 L12478.2034,2144.2 L12468.2034,2134.2" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="480.4885" x="11903.79" y="2164">Each Load* call is memoized after its first</text><text fill="#14180C" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="544.3882" x="11903.79" y="2196.55">parse -- implemented today, ahead of the rest</text><text fill="#14180C" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="559.4134" x="11903.79" y="2229.1">of this package (LoadBeerStyles is still planned).</text></g><!--class MockCuratedDataService--><g class="entity" data-qualified-name="Infrastructure. Data Preloading.MockCuratedDataService" data-source-line="392" id="ent0073"><rect fill="#EBECE3" height="221.3" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="1586.5524" x="12512.72" y="2077.38"/><ellipse cx="13152.3117" cy="2098.655" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M13156.0075,2107.3801 Q13155.153,2107.8196 13154.213,2108.0393 Q13153.2731,2108.259 13152.2355,2108.259 Q13148.549,2108.259 13146.608,2105.8298 Q13144.6671,2103.4006 13144.6671,2098.8108 Q13144.6671,2094.2087 13146.608,2091.7795 Q13148.549,2089.3503 13152.2355,2089.3503 Q13153.2731,2089.3503 13154.2252,2089.57 Q13155.1774,2089.7898 13156.0075,2090.2292 L13156.0075,2094.2331 Q13155.0797,2093.3786 13154.2069,2092.9819 Q13153.3341,2092.5852 13152.4064,2092.5852 Q13150.4288,2092.5852 13149.4218,2094.1538 Q13148.4147,2095.7224 13148.4147,2098.8108 Q13148.4147,2101.8869 13149.4218,2103.4555 Q13150.4288,2105.0241 13152.4064,2105.0241 Q13153.3341,2105.0241 13154.2069,2104.6274 Q13155.0797,2104.2307 13156.0075,2103.3762 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="297.369" x="13177.3117" y="2107.18">MockCuratedDataService</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="12513.72" x2="14098.2724" y1="2119.93" y2="2119.93"/><line style="stroke:#4A5837;stroke-width:0.5;" x1="12513.72" x2="14098.2724" y1="2127.93" y2="2127.93"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="12523.72" cy="2149.705" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="978.4644" x="12535.72" y="2156.73">LoadLocations(filepath : const std::filesystem::path&) : const std::vector<Location>&</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="12523.72" cy="2182.255" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="998.2018" x="12535.72" y="2189.28">LoadBeerStyles(filepath : const std::filesystem::path&) : const std::vector<BeerStyle>&</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="12523.72" cy="2214.805" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="1015.7458" x="12535.72" y="2221.83">LoadPersonas(filepath : const std::filesystem::path&) : const std::vector<UserPersona>&</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="12523.72" cy="2247.355" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="1557.5524" x="12535.72" y="2254.38">LoadForenamesByCountry(forenames_filepath : const std::filesystem::path&) : const std::unordered_map<std::string, forename_list>&</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="12523.72" cy="2279.905" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="1522.6647" x="12535.72" y="2286.93">LoadSurnamesByCountry(surnames_filepath : const std::filesystem::path&) : const std::unordered_map<std::string, surname_list>&</text></g><g class="entity" data-qualified-name="Infrastructure. Data Preloading.GMN74" data-source-line="401" id="ent0075"><path d="M14134.59,2117.93 L14134.59,2184.03 L14099.63,2188.03 L14134.59,2192.03 L14134.59,2258.13 A0,0 0 0 0 14134.59,2258.13 L14763.4032,2258.13 A0,0 0 0 0 14763.4032,2258.13 L14763.4032,2127.93 L14753.4032,2117.93 L14134.59,2117.93 A0,0 0 0 0 14134.59,2117.93" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><path d="M14753.4032,2117.93 L14753.4032,2127.93 L14763.4032,2127.93 L14753.4032,2117.93" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="590.9502" x="14140.59" y="2147.73">Fixed in-memory dataset used in --mocked mode,</text><text fill="#14180C" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="513.3569" x="14140.59" y="2180.28">implemented today for Locations/Personas/</text><text fill="#14180C" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="607.8132" x="14140.59" y="2212.83">Forenames/Surnames; would need a LoadBeerStyles</text><text fill="#14180C" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="527.8945" x="14140.59" y="2245.38">fixture too once that method is implemented.</text></g><!--class EnrichmentService--><g class="entity" data-qualified-name="Infrastructure. Enrichment.EnrichmentService" data-source-line="411" id="ent0078"><rect fill="#EBECE3" height="156.2" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="662.5888" x="9236.71" y="1265.55"/><ellipse cx="9453.7169" cy="1303.1" fill="#B4A7E5" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M9448.3165,1297.5487 L9448.3165,1294.3749 L9459.1686,1294.3749 L9459.1686,1297.5487 L9455.5431,1297.5487 L9455.5431,1309.4262 L9459.1686,1309.4262 L9459.1686,1312.6 L9448.3165,1312.6 L9448.3165,1309.4262 L9451.942,1309.4262 L9451.942,1297.5487 Z " fill="#14180C"/><text fill="#4A5837" font-family="DM Sans" font-size="25" font-style="italic" lengthAdjust="spacing" textLength="127.05" x="9524.4794" y="1295.35">«interface»</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" font-style="italic" lengthAdjust="spacing" textLength="218.575" x="9478.7169" y="1327.9">EnrichmentService</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="9237.71" x2="9898.2988" y1="1340.65" y2="1340.65"/><line style="stroke:#4A5837;stroke-width:0.5;" x1="9237.71" x2="9898.2988" y1="1348.65" y2="1348.65"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="9247.71" cy="1386.7" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="495.6509" x="9259.71" y="1377.45">GetLocationContext(loc : const Location&,</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="620.2888" x="9273.01" y="1410">strategy : const ContextStrategy&) : LocationContext</text></g><!--class WikipediaService--><g class="entity" data-qualified-name="Infrastructure. Enrichment.WikipediaService" data-source-line="415" id="ent0079"><rect fill="#EBECE3" height="221.3" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="739.0262" x="9218.49" y="2077.38"/><ellipse cx="9483.2436" cy="2098.655" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M9486.9394,2107.3801 Q9486.0849,2107.8196 9485.145,2108.0393 Q9484.205,2108.259 9483.1675,2108.259 Q9479.4809,2108.259 9477.54,2105.8298 Q9475.5991,2103.4006 9475.5991,2098.8108 Q9475.5991,2094.2087 9477.54,2091.7795 Q9479.4809,2089.3503 9483.1675,2089.3503 Q9484.205,2089.3503 9485.1572,2089.57 Q9486.1093,2089.7898 9486.9394,2090.2292 L9486.9394,2094.2331 Q9486.0117,2093.3786 9485.1389,2092.9819 Q9484.2661,2092.5852 9483.3384,2092.5852 Q9481.3608,2092.5852 9480.3537,2094.1538 Q9479.3467,2095.7224 9479.3467,2098.8108 Q9479.3467,2101.8869 9480.3537,2103.4555 Q9481.3608,2105.0241 9483.3384,2105.0241 Q9484.2661,2105.0241 9485.1389,2104.6274 Q9486.0117,2104.2307 9486.9394,2103.3762 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="199.5189" x="9508.2436" y="2107.18">WikipediaService</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="9219.49" x2="9956.5162" y1="2119.93" y2="2119.93"/><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="9226.49" y="2138.705"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="426.6252" x="9241.49" y="2148.73">client_ : std::unique_ptr<WebClient></text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="9226.49" y="2171.255"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="710.0262" x="9241.49" y="2181.28">extract_cache_ : std::unordered_map<std::string, std::string></text><line style="stroke:#4A5837;stroke-width:0.5;" x1="9219.49" x2="9956.5162" y1="2193.03" y2="2193.03"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="9229.49" cy="2231.08" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="495.6509" x="9241.49" y="2221.83">GetLocationContext(loc : const Location&,</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="620.2888" x="9254.79" y="2254.38">strategy : const ContextStrategy&) : LocationContext</text><g data-visibility-modifier="PRIVATE_METHOD"><rect fill="#F24D5C" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="9226.49" y="2276.905"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="568.864" x="9241.49" y="2286.93">FetchExtract(query : std::string_view) : std::string</text></g><!--class WebClient--><g class="entity" data-qualified-name="Infrastructure. Enrichment.WebClient" data-source-line="422" id="ent0080"><rect fill="#EBECE3" height="156.2" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="582.6328" x="9296.68" y="2836.55"/><ellipse cx="9521.4714" cy="2874.1" fill="#B4A7E5" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M9516.071,2868.5487 L9516.071,2865.3749 L9526.923,2865.3749 L9526.923,2868.5487 L9523.2975,2868.5487 L9523.2975,2880.4262 L9526.923,2880.4262 L9526.923,2883.6 L9516.071,2883.6 L9516.071,2880.4262 L9519.6965,2880.4262 L9519.6965,2868.5487 Z " fill="#14180C"/><text fill="#4A5837" font-family="DM Sans" font-size="25" font-style="italic" lengthAdjust="spacing" textLength="127.05" x="9544.4714" y="2866.35">«interface»</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" font-style="italic" lengthAdjust="spacing" textLength="121.825" x="9547.0839" y="2898.9">WebClient</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="9297.68" x2="9878.3128" y1="2911.65" y2="2911.65"/><line style="stroke:#4A5837;stroke-width:0.5;" x1="9297.68" x2="9878.3128" y1="2919.65" y2="2919.65"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="9307.68" cy="2941.425" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="446.1701" x="9319.68" y="2948.45">Get(url : const std::string&) : std::string</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="9307.68" cy="2973.975" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="553.6328" x="9319.68" y="2981">UrlEncode(value : const std::string&) : std::string</text></g><!--class HttpWebClient--><g class="entity" data-qualified-name="Infrastructure. Enrichment.HttpWebClient" data-source-line="427" id="ent0081"><rect fill="#EBECE3" height="123.65" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="582.6328" x="9296.68" y="3251.05"/><ellipse cx="9495.9182" cy="3272.325" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M9499.614,3281.0501 Q9498.7595,3281.4896 9497.8195,3281.7093 Q9496.8796,3281.929 9495.842,3281.929 Q9492.1555,3281.929 9490.2146,3279.4998 Q9488.2736,3277.0706 9488.2736,3272.4808 Q9488.2736,3267.8787 9490.2146,3265.4495 Q9492.1555,3263.0203 9495.842,3263.0203 Q9496.8796,3263.0203 9497.8317,3263.24 Q9498.7839,3263.4598 9499.614,3263.8992 L9499.614,3267.9031 Q9498.6862,3267.0486 9497.8134,3266.6519 Q9496.9406,3266.2552 9496.0129,3266.2552 Q9494.0354,3266.2552 9493.0283,3267.8238 Q9492.0212,3269.3924 9492.0212,3272.4808 Q9492.0212,3275.5569 9493.0283,3277.1255 Q9494.0354,3278.6941 9496.0129,3278.6941 Q9496.9406,3278.6941 9497.8134,3278.2974 Q9498.6862,3277.9007 9499.614,3277.0462 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="174.1564" x="9520.9182" y="3280.85">HttpWebClient</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="9297.68" x2="9878.3128" y1="3293.6" y2="3293.6"/><line style="stroke:#4A5837;stroke-width:0.5;" x1="9297.68" x2="9878.3128" y1="3301.6" y2="3301.6"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="9307.68" cy="3323.375" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="446.1701" x="9319.68" y="3330.4">Get(url : const std::string&) : std::string</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="9307.68" cy="3355.925" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="553.6328" x="9319.68" y="3362.95">UrlEncode(value : const std::string&) : std::string</text></g><!--class IPromptDirectory--><g class="entity" data-qualified-name="Infrastructure. Prompting.IPromptDirectory" data-source-line="436" id="ent0083"><rect fill="#EBECE3" height="123.65" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="479.1885" x="6195.41" y="2852.83"/><ellipse cx="6329.5668" cy="2890.38" fill="#B4A7E5" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M6324.1664,2884.8287 L6324.1664,2881.6549 L6335.0184,2881.6549 L6335.0184,2884.8287 L6331.3929,2884.8287 L6331.3929,2896.7062 L6335.0184,2896.7062 L6335.0184,2899.88 L6324.1664,2899.88 L6324.1664,2896.7062 L6327.7919,2896.7062 L6327.7919,2884.8287 Z " fill="#14180C"/><text fill="#4A5837" font-family="DM Sans" font-size="25" font-style="italic" lengthAdjust="spacing" textLength="127.05" x="6391.4793" y="2882.63">«interface»</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" font-style="italic" lengthAdjust="spacing" textLength="200.875" x="6354.5668" y="2915.18">IPromptDirectory</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="6196.41" x2="6673.5985" y1="2927.93" y2="2927.93"/><line style="stroke:#4A5837;stroke-width:0.5;" x1="6196.41" x2="6673.5985" y1="2935.93" y2="2935.93"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="6206.41" cy="2957.705" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="450.1885" x="6218.41" y="2964.73">Load(key : std::string_view) : std::string</text></g><!--class PromptDirectory--><g class="entity" data-qualified-name="Infrastructure. Prompting.PromptDirectory" data-source-line="440" id="ent0084"><rect fill="#EBECE3" height="188.75" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="717.8574" x="5987.07" y="3218.5"/><ellipse cx="6243.4892" cy="3239.775" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M6247.185,3248.5001 Q6246.3305,3248.9396 6245.3905,3249.1593 Q6244.4506,3249.379 6243.413,3249.379 Q6239.7265,3249.379 6237.7856,3246.9498 Q6235.8446,3244.5206 6235.8446,3239.9308 Q6235.8446,3235.3287 6237.7856,3232.8995 Q6239.7265,3230.4703 6243.413,3230.4703 Q6244.4506,3230.4703 6245.4027,3230.69 Q6246.3549,3230.9098 6247.185,3231.3492 L6247.185,3235.3531 Q6246.2572,3234.4986 6245.3844,3234.1019 Q6244.5116,3233.7052 6243.5839,3233.7052 Q6241.6064,3233.7052 6240.5993,3235.2738 Q6239.5922,3236.8424 6239.5922,3239.9308 Q6239.5922,3243.0069 6240.5993,3244.5755 Q6241.6064,3246.1441 6243.5839,3246.1441 Q6244.5116,3246.1441 6245.3844,3245.7474 Q6246.2572,3245.3507 6247.185,3244.4962 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="195.019" x="6268.4892" y="3248.3">PromptDirectory</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="5988.07" x2="6703.9274" y1="3261.05" y2="3261.05"/><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="5995.07" y="3279.825"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="400.9191" x="6010.07" y="3289.85">prompt_dir_ : std::filesystem::path</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="5995.07" y="3312.375"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="610.1761" x="6010.07" y="3322.4">cache_ : std::unordered_map<std::string, std::string></text><line style="stroke:#4A5837;stroke-width:0.5;" x1="5988.07" x2="6703.9274" y1="3334.15" y2="3334.15"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="5998.07" cy="3355.925" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="688.8574" x="6010.07" y="3362.95">PromptDirectory(prompt_dir : const std::filesystem::path&)</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="5998.07" cy="3388.475" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="450.1885" x="6010.07" y="3395.5">Load(key : std::string_view) : std::string</text></g><!--class DataGenerator--><g class="entity" data-qualified-name="Infrastructure. Data Generation.DataGenerator" data-source-line="452" id="ent0087"><rect fill="#EBECE3" height="579.35" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="629.1699" x="8150.42" y="1053.98"/><ellipse cx="8373.3424" cy="1091.53" fill="#B4A7E5" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M8367.942,1085.9787 L8367.942,1082.8049 L8378.7941,1082.8049 L8378.7941,1085.9787 L8375.1686,1085.9787 L8375.1686,1097.8562 L8378.7941,1097.8562 L8378.7941,1101.03 L8367.942,1101.03 L8367.942,1097.8562 L8371.5675,1097.8562 L8371.5675,1085.9787 Z " fill="#14180C"/><text fill="#4A5837" font-family="DM Sans" font-size="25" font-style="italic" lengthAdjust="spacing" textLength="127.05" x="8421.4799" y="1083.78">«interface»</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" font-style="italic" lengthAdjust="spacing" textLength="173.325" x="8398.3424" y="1116.33">DataGenerator</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="8151.42" x2="8778.5899" y1="1129.08" y2="1129.08"/><line style="stroke:#4A5837;stroke-width:0.5;" x1="8151.42" x2="8778.5899" y1="1137.08" y2="1137.08"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="8161.42" cy="1175.13" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="520.6074" x="8173.42" y="1165.88">GenerateBrewery(location : const Location&,</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="586.8698" x="8186.72" y="1198.43">context : const LocationContext&) : BreweryResult</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="8161.42" cy="1272.78" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="428.8381" x="8173.42" y="1230.98">GenerateBeer(brewery_id : uint64_t,</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="307.7944" x="8186.72" y="1263.53">location : const Location&,</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="397.5007" x="8186.72" y="1296.08">context : const LocationContext&,</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="427.6008" x="8186.72" y="1328.63">style : const BeerStyle&) : BeerResult</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="8161.42" cy="1386.705" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="477.7946" x="8173.42" y="1361.18">GenerateUser(city : const EnrichedCity&,</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="353.8195" x="8186.72" y="1393.73">persona : const UserPersona&,</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="392.288" x="8186.72" y="1426.28">name : const Name&) : UserResult</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="8161.42" cy="1484.355" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="552.251" x="8173.42" y="1458.83">GenerateCheckin(user : const GeneratedUser&,</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="428.401" x="8186.72" y="1491.38">brewery : const GeneratedBrewery&,</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="541.976" x="8186.72" y="1523.93">timestamp : const std::string&) : CheckinResult</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="8161.42" cy="1582.005" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="531.051" x="8173.42" y="1556.48">GenerateRating(user : const GeneratedUser&,</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="343.9756" x="8186.72" y="1589.03">beer : const GeneratedBeer&,</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="419.7442" x="8186.72" y="1621.58">checkin_id : uint64_t) : RatingResult</text></g><!--class MockGenerator--><g class="entity" data-qualified-name="Infrastructure. Data Generation.MockGenerator" data-source-line="460" id="ent0088"><rect fill="#EBECE3" height="253.85" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="653.1259" x="7786.44" y="2061.1"/><ellipse cx="8017.406" cy="2082.375" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M8021.1018,2091.1001 Q8020.2473,2091.5396 8019.3073,2091.7593 Q8018.3674,2091.979 8017.3298,2091.979 Q8013.6433,2091.979 8011.7023,2089.5498 Q8009.7614,2087.1206 8009.7614,2082.5308 Q8009.7614,2077.9287 8011.7023,2075.4995 Q8013.6433,2073.0703 8017.3298,2073.0703 Q8018.3674,2073.0703 8019.3195,2073.29 Q8020.2717,2073.5098 8021.1018,2073.9492 L8021.1018,2077.9531 Q8020.174,2077.0986 8019.3012,2076.7019 Q8018.4284,2076.3052 8017.5007,2076.3052 Q8015.5231,2076.3052 8014.5161,2077.8738 Q8013.509,2079.4424 8013.509,2082.5308 Q8013.509,2085.6069 8014.5161,2087.1755 Q8015.5231,2088.7441 8017.5007,2088.7441 Q8018.4284,2088.7441 8019.3012,2088.3474 Q8020.174,2087.9507 8021.1018,2087.0962 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="181.194" x="8042.406" y="2090.9">MockGenerator</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="7787.44" x2="8438.5659" y1="2103.65" y2="2103.65"/><line style="stroke:#4A5837;stroke-width:0.5;" x1="7787.44" x2="8438.5659" y1="2111.65" y2="2111.65"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="7797.44" cy="2133.425" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="421.601" x="7809.44" y="2140.45">GenerateBrewery(...) : BreweryResult</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="7797.44" cy="2165.975" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="337.1756" x="7809.44" y="2173">GenerateBeer(...) : BeerResult</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="7797.44" cy="2198.525" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="336.5006" x="7809.44" y="2205.55">GenerateUser(...) : UserResult</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="7797.44" cy="2231.075" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="419.163" x="7809.44" y="2238.1">GenerateCheckin(...) : CheckinResult</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="7797.44" cy="2263.625" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="376.7633" x="7809.44" y="2270.65">GenerateRating(...) : RatingResult</text><g data-visibility-modifier="PRIVATE_METHOD"><rect fill="#F24D5C" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="7794.44" y="2293.175"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="624.1259" x="7809.44" y="2303.2">DeterministicHash(location : const Location&) : size_t</text></g><!--class LlamaGenerator--><g class="entity" data-qualified-name="Infrastructure. Data Generation.LlamaGenerator" data-source-line="469" id="ent0089"><rect fill="#EBECE3" height="514.25" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="687.6946" x="8474.15" y="1930.9"/><ellipse cx="8719.6722" cy="1952.175" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M8723.368,1960.9001 Q8722.5135,1961.3396 8721.5735,1961.5593 Q8720.6336,1961.779 8719.596,1961.779 Q8715.9095,1961.779 8713.9685,1959.3498 Q8712.0276,1956.9206 8712.0276,1952.3308 Q8712.0276,1947.7287 8713.9685,1945.2995 Q8715.9095,1942.8703 8719.596,1942.8703 Q8720.6336,1942.8703 8721.5857,1943.09 Q8722.5379,1943.3098 8723.368,1943.7492 L8723.368,1947.7531 Q8722.4402,1946.8986 8721.5674,1946.5019 Q8720.6946,1946.1052 8719.7669,1946.1052 Q8717.7893,1946.1052 8716.7823,1947.6738 Q8715.7752,1949.2424 8715.7752,1952.3308 Q8715.7752,1955.4069 8716.7823,1956.9755 Q8717.7893,1958.5441 8719.7669,1958.5441 Q8720.6946,1958.5441 8721.5674,1958.1474 Q8722.4402,1957.7507 8723.368,1956.8962 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="186.6503" x="8744.6722" y="1960.7">LlamaGenerator</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="8475.15" x2="9160.8446" y1="1973.45" y2="1973.45"/><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="8482.15" y="1992.225"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="259.1498" x="8497.15" y="2002.25">model_ : ModelHandle</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="8482.15" y="2024.775"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="298.2252" x="8497.15" y="2034.8">context_ : ContextHandle</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="8482.15" y="2057.325"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="658.6946" x="8497.15" y="2067.35">prompt_formatter_ : std::unique_ptr<PromptFormatter></text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="8482.15" y="2089.875"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="652.5506" x="8497.15" y="2099.9">prompt_directory_ : std::unique_ptr<IPromptDirectory></text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="8482.15" y="2122.425"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="219.9004" x="8497.15" y="2132.45">rng_ : std::mt19937</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="8475.15" x2="9160.8446" y1="2144.2" y2="2144.2"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="8485.15" cy="2165.975" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="421.601" x="8497.15" y="2173">GenerateBrewery(...) : BreweryResult</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="8485.15" cy="2198.525" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="337.1756" x="8497.15" y="2205.55">GenerateBeer(...) : BeerResult</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="8485.15" cy="2231.075" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="336.5006" x="8497.15" y="2238.1">GenerateUser(...) : UserResult</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="8485.15" cy="2263.625" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="419.163" x="8497.15" y="2270.65">GenerateCheckin(...) : CheckinResult</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="8485.15" cy="2296.175" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="376.7633" x="8497.15" y="2303.2">GenerateRating(...) : RatingResult</text><g data-visibility-modifier="PRIVATE_METHOD"><rect fill="#F24D5C" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="8482.15" y="2325.725"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="516.8508" x="8497.15" y="2335.75">Load(opts : const GeneratorOptions&) : void</text><g data-visibility-modifier="PRIVATE_METHOD"><rect fill="#F24D5C" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="8482.15" y="2374.55"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="420.7691" x="8497.15" y="2368.3">Infer(system_prompt, user_prompt,</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="400.1508" x="8510.45" y="2400.85">max_tokens, grammar) : std::string</text><g data-visibility-modifier="PRIVATE_METHOD"><rect fill="#F24D5C" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="8482.15" y="2423.375"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="399.4818" x="8497.15" y="2433.4">ValidateModelArchitecture() : void</text></g><!--class PromptFormatter--><g class="entity" data-qualified-name="Infrastructure. Data Generation.PromptFormatter" data-source-line="485" id="ent0090"><rect fill="#EBECE3" height="188.75" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="539.4949" x="8548.25" y="2820.28"/><ellipse cx="8711.9349" cy="2857.83" fill="#B4A7E5" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M8706.5346,2852.2787 L8706.5346,2849.1049 L8717.3866,2849.1049 L8717.3866,2852.2787 L8713.7611,2852.2787 L8713.7611,2864.1562 L8717.3866,2864.1562 L8717.3866,2867.33 L8706.5346,2867.33 L8706.5346,2864.1562 L8710.16,2864.1562 L8710.16,2852.2787 Z " fill="#14180C"/><text fill="#4A5837" font-family="DM Sans" font-size="25" font-style="italic" lengthAdjust="spacing" textLength="127.05" x="8774.4724" y="2850.08">«interface»</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" font-style="italic" lengthAdjust="spacing" textLength="202.125" x="8736.9349" y="2882.63">PromptFormatter</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="8549.25" x2="9086.7449" y1="2895.38" y2="2895.38"/><line style="stroke:#4A5837;stroke-width:0.5;" x1="8549.25" x2="9086.7449" y1="2903.38" y2="2903.38"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="8559.25" cy="2941.43" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="487.5133" x="8571.25" y="2932.18">Format(system_prompt : std::string_view,</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="497.1948" x="8584.55" y="2964.73">user_prompt : std::string_view) : std::string</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="8559.25" cy="2990.255" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="476.6135" x="8571.25" y="2997.28">ExpectedArchitecture() : std::string_view</text></g><!--class Gemma4JinjaPromptFormatter--><g class="entity" data-qualified-name="Infrastructure. Data Generation.Gemma4JinjaPromptFormatter" data-source-line="490" id="ent0091"><rect fill="#EBECE3" height="123.65" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="505.6135" x="8565.19" y="3251.05"/><ellipse cx="8632.1434" cy="3272.325" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M8635.8392,3281.0501 Q8634.9847,3281.4896 8634.0448,3281.7093 Q8633.1048,3281.929 8632.0672,3281.929 Q8628.3807,3281.929 8626.4398,3279.4998 Q8624.4989,3277.0706 8624.4989,3272.4808 Q8624.4989,3267.8787 8626.4398,3265.4495 Q8628.3807,3263.0203 8632.0672,3263.0203 Q8633.1048,3263.0203 8634.057,3263.24 Q8635.0091,3263.4598 8635.8392,3263.8992 L8635.8392,3267.9031 Q8634.9115,3267.0486 8634.0386,3266.6519 Q8633.1658,3266.2552 8632.2381,3266.2552 Q8630.2606,3266.2552 8629.2535,3267.8238 Q8628.2464,3269.3924 8628.2464,3272.4808 Q8628.2464,3275.5569 8629.2535,3277.1255 Q8630.2606,3278.6941 8632.2381,3278.6941 Q8633.1658,3278.6941 8634.0386,3278.2974 Q8634.9115,3277.9007 8635.8392,3277.0462 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="361.7067" x="8657.1434" y="3280.85">Gemma4JinjaPromptFormatter</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="8566.19" x2="9069.8035" y1="3293.6" y2="3293.6"/><line style="stroke:#4A5837;stroke-width:0.5;" x1="8566.19" x2="9069.8035" y1="3301.6" y2="3301.6"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="8576.19" cy="3323.375" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="248.9445" x="8588.19" y="3330.4">Format(...) : std::string</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="8576.19" cy="3355.925" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="476.6135" x="8588.19" y="3362.95">ExpectedArchitecture() : std::string_view</text></g><!--class ExportService--><g class="entity" data-qualified-name="Infrastructure. Data Export.ExportService" data-source-line="499" id="ent0093"><rect fill="#EBECE3" height="351.5" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="778.6015" x="17164.7" y="1167.9"/><ellipse cx="17468.2007" cy="1205.45" fill="#B4A7E5" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M17462.8004,1199.8987 L17462.8004,1196.7249 L17473.6524,1196.7249 L17473.6524,1199.8987 L17470.0269,1199.8987 L17470.0269,1211.7762 L17473.6524,1211.7762 L17473.6524,1214.95 L17462.8004,1214.95 L17462.8004,1211.7762 L17466.4258,1211.7762 L17466.4258,1199.8987 Z " fill="#14180C"/><text fill="#4A5837" font-family="DM Sans" font-size="25" font-style="italic" lengthAdjust="spacing" textLength="127.05" x="17510.4757" y="1197.7">«interface»</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" font-style="italic" lengthAdjust="spacing" textLength="161.6" x="17493.2007" y="1230.25">ExportService</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="17165.7" x2="17942.3015" y1="1243" y2="1243"/><line style="stroke:#4A5837;stroke-width:0.5;" x1="17165.7" x2="17942.3015" y1="1251" y2="1251"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="17175.7" cy="1272.775" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="179.4066" x="17187.7" y="1279.8">Initialize() : void</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="17175.7" cy="1305.325" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="749.6015" x="17187.7" y="1312.35">ProcessBrewery(brewery : const GeneratedBrewery&) : uint64_t</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="17175.7" cy="1337.875" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="622.9633" x="17187.7" y="1344.9">ProcessBeer(beer : const GeneratedBeer&) : uint64_t</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="17175.7" cy="1370.425" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="619.3073" x="17187.7" y="1377.45">ProcessUser(user : const GeneratedUser&) : uint64_t</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="17175.7" cy="1402.975" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="741.7197" x="17187.7" y="1410">ProcessCheckin(checkin : const GeneratedCheckin&) : uint64_t</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="17175.7" cy="1435.525" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="624.1639" x="17187.7" y="1442.55">ProcessRating(rating : const GeneratedRating&) : void</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="17175.7" cy="1468.075" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="627.0888" x="17187.7" y="1475.1">ProcessFollow(follow : const GeneratedFollow&) : void</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="17175.7" cy="1500.625" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="171.169" x="17187.7" y="1507.65">Finalize() : void</text></g><!--class SqliteExportService--><g class="entity" data-qualified-name="Infrastructure. Data Export.SqliteExportService" data-source-line="510" id="ent0094"><rect fill="#EBECE3" height="839.75" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="766.7638" x="17170.62" y="1768.15"/><ellipse cx="17435.2955" cy="1789.425" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M17438.9913,1798.1501 Q17438.1368,1798.5896 17437.1968,1798.8093 Q17436.2569,1799.029 17435.2193,1799.029 Q17431.5328,1799.029 17429.5918,1796.5998 Q17427.6509,1794.1706 17427.6509,1789.5808 Q17427.6509,1784.9787 17429.5918,1782.5495 Q17431.5328,1780.1203 17435.2193,1780.1203 Q17436.2569,1780.1203 17437.209,1780.34 Q17438.1612,1780.5598 17438.9913,1780.9992 L17438.9913,1785.0031 Q17438.0635,1784.1486 17437.1907,1783.7519 Q17436.3179,1783.3552 17435.3902,1783.3552 Q17433.4126,1783.3552 17432.4056,1784.9238 Q17431.3985,1786.4924 17431.3985,1789.5808 Q17431.3985,1792.6569 17432.4056,1794.2255 Q17433.4126,1795.7941 17435.3902,1795.7941 Q17436.3179,1795.7941 17437.1907,1795.3974 Q17438.0635,1795.0007 17438.9913,1794.1462 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="227.4129" x="17460.2955" y="1797.95">SqliteExportService</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="17171.62" x2="17936.3838" y1="1810.7" y2="1810.7"/><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="17178.62" y="1829.475"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="685.2754" x="17193.62" y="1839.5">date_time_provider_ : std::unique_ptr<DateTimeProvider></text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="17178.62" y="1862.025"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="416.8437" x="17193.62" y="1872.05">db_handle_ : SqliteDatabaseHandle</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="17178.62" y="1894.575"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="550.3255" x="17193.62" y="1904.6">insert_location_stmt_ : SqliteStatementHandle</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="17178.62" y="1927.125"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="552.6006" x="17193.62" y="1937.15">insert_brewery_stmt_ : SqliteStatementHandle</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="17178.62" y="1959.675"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="510.3878" x="17193.62" y="1969.7">insert_beer_stmt_ : SqliteStatementHandle</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="17178.62" y="1992.225"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="507.4067" x="17193.62" y="2002.25">insert_user_stmt_ : SqliteStatementHandle</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="17178.62" y="2024.775"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="547.1567" x="17193.62" y="2034.8">insert_checkin_stmt_ : SqliteStatementHandle</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="17178.62" y="2057.325"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="523.9818" x="17193.62" y="2067.35">insert_rating_stmt_ : SqliteStatementHandle</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="17178.62" y="2089.875"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="525.4443" x="17193.62" y="2099.9">insert_follow_stmt_ : SqliteStatementHandle</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="17178.62" y="2122.425"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="293.6815" x="17193.62" y="2132.45">transaction_open_ : bool</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="17178.62" y="2154.975"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="707.607" x="17193.62" y="2165">location_cache_ : std::unordered_map<std::string, uint64_t></text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="17178.62" y="2187.525"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="709.882" x="17193.62" y="2197.55">brewery_cache_ : std::unordered_map<std::string, uint64_t></text><line style="stroke:#4A5837;stroke-width:0.5;" x1="17171.62" x2="17936.3838" y1="2209.3" y2="2209.3"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="17181.62" cy="2231.075" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="179.4066" x="17193.62" y="2238.1">Initialize() : void</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="17181.62" cy="2263.625" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="737.7638" x="17193.62" y="2270.65">ProcessRecord(brewery : const GeneratedBrewery&) : uint64_t</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="17181.62" cy="2296.175" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="653.3384" x="17193.62" y="2303.2">ProcessRecord(beer : const GeneratedBeer&) : uint64_t</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="17181.62" cy="2328.725" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="650.0197" x="17193.62" y="2335.75">ProcessRecord(user : const GeneratedUser&) : uint64_t</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="17181.62" cy="2361.275" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="731.101" x="17193.62" y="2368.3">ProcessRecord(checkin : const GeneratedCheckin&) : uint64_t</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="17181.62" cy="2393.825" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="634.7451" x="17193.62" y="2400.85">ProcessRecord(rating : const GeneratedRating&) : void</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="17181.62" cy="2426.375" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="636.9388" x="17193.62" y="2433.4">ProcessRecord(follow : const GeneratedFollow&) : void</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="17181.62" cy="2458.925" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="171.169" x="17193.62" y="2465.95">Finalize() : void</text><g data-visibility-modifier="PRIVATE_METHOD"><rect fill="#F24D5C" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="17178.62" y="2488.475"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="272.6504" x="17193.62" y="2498.5">InitializeSchema() : void</text><g data-visibility-modifier="PRIVATE_METHOD"><rect fill="#F24D5C" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="17178.62" y="2521.025"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="312.3755" x="17193.62" y="2531.05">PrepareStatements() : void</text><g data-visibility-modifier="PRIVATE_METHOD"><rect fill="#F24D5C" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="17178.62" y="2553.575"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="398.9756" x="17193.62" y="2563.6">RollbackAndCloseNoThrow() : void</text><g data-visibility-modifier="PRIVATE_METHOD"><rect fill="#F24D5C" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="17178.62" y="2586.125"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="306.238" x="17193.62" y="2596.15">FinalizeStatements() : void</text></g><!--class DateTimeProvider--><g class="entity" data-qualified-name="Infrastructure. Data Export.DateTimeProvider" data-source-line="537" id="ent0095"><rect fill="#EBECE3" height="123.65" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="393.7631" x="17357.12" y="2852.83"/><ellipse cx="17444.6391" cy="2890.38" fill="#B4A7E5" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M17439.2387,2884.8287 L17439.2387,2881.6549 L17450.0907,2881.6549 L17450.0907,2884.8287 L17446.4652,2884.8287 L17446.4652,2896.7062 L17450.0907,2896.7062 L17450.0907,2899.88 L17439.2387,2899.88 L17439.2387,2896.7062 L17442.8642,2896.7062 L17442.8642,2884.8287 Z " fill="#14180C"/><text fill="#4A5837" font-family="DM Sans" font-size="25" font-style="italic" lengthAdjust="spacing" textLength="127.05" x="17510.4766" y="2882.63">«interface»</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" font-style="italic" lengthAdjust="spacing" textLength="208.725" x="17469.6391" y="2915.18">DateTimeProvider</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="17358.12" x2="17749.8831" y1="2927.93" y2="2927.93"/><line style="stroke:#4A5837;stroke-width:0.5;" x1="17358.12" x2="17749.8831" y1="2935.93" y2="2935.93"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="17368.12" cy="2957.705" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="364.7631" x="17380.12" y="2964.73">GetUtcTimestamp() : std::string</text></g><!--class SystemDateTimeProvider--><g class="entity" data-qualified-name="Infrastructure. Data Export.SystemDateTimeProvider" data-source-line="541" id="ent0096"><rect fill="#EBECE3" height="91.1" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="393.7631" x="17357.12" y="3267.32"/><ellipse cx="17402.2833" cy="3288.595" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M17405.9791,3297.3201 Q17405.1246,3297.7596 17404.1847,3297.9793 Q17403.2447,3298.199 17402.2071,3298.199 Q17398.5206,3298.199 17396.5797,3295.7698 Q17394.6388,3293.3406 17394.6388,3288.7508 Q17394.6388,3284.1487 17396.5797,3281.7195 Q17398.5206,3279.2903 17402.2071,3279.2903 Q17403.2447,3279.2903 17404.1969,3279.51 Q17405.149,3279.7298 17405.9791,3280.1692 L17405.9791,3284.1731 Q17405.0514,3283.3186 17404.1786,3282.9219 Q17403.3058,3282.5252 17402.378,3282.5252 Q17400.4005,3282.5252 17399.3934,3284.0938 Q17398.3863,3285.6624 17398.3863,3288.7508 Q17398.3863,3291.8269 17399.3934,3293.3955 Q17400.4005,3294.9641 17402.378,3294.9641 Q17403.3058,3294.9641 17404.1786,3294.5674 Q17405.0514,3294.1707 17405.9791,3293.3162 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="295.4002" x="17425.3196" y="3297.12">SystemDateTimeProvider</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="17358.12" x2="17749.8831" y1="3309.87" y2="3309.87"/><line style="stroke:#4A5837;stroke-width:0.5;" x1="17358.12" x2="17749.8831" y1="3317.87" y2="3317.87"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="17368.12" cy="3339.645" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="364.7631" x="17380.12" y="3346.67">GetUtcTimestamp() : std::string</text></g><!--class BiergartenPipelineOrchestrator--><g class="entity" data-qualified-name="BiergartenPipelineOrchestrator" data-source-line="547" id="ent0097"><rect fill="#EBECE3" height="815.2" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="889.639" x="8020.18" y="66.95"/><ellipse cx="8279.6742" cy="88.225" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M8283.37,96.9501 Q8282.5155,97.3896 8281.5755,97.6093 Q8280.6356,97.829 8279.598,97.829 Q8275.9115,97.829 8273.9705,95.3998 Q8272.0296,92.9706 8272.0296,88.3808 Q8272.0296,83.7787 8273.9705,81.3495 Q8275.9115,78.9203 8279.598,78.9203 Q8280.6356,78.9203 8281.5877,79.14 Q8282.5399,79.3598 8283.37,79.7992 L8283.37,83.8031 Q8282.4422,82.9486 8281.5694,82.5519 Q8280.6966,82.1552 8279.7689,82.1552 Q8277.7913,82.1552 8276.7843,83.7238 Q8275.7772,85.2924 8275.7772,88.3808 Q8275.7772,91.4569 8276.7843,93.0255 Q8277.7913,94.5941 8279.7689,94.5941 Q8280.6966,94.5941 8281.5694,94.1974 Q8282.4422,93.8007 8283.37,92.9462 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="360.6507" x="8304.6742" y="96.75">BiergartenPipelineOrchestrator</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="8021.18" x2="8908.819" y1="109.5" y2="109.5"/><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="8028.18" y="128.275"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="741.4819" x="8043.18" y="138.3">curated_data_service_ : std::unique_ptr<ICuratedDataService></text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="8028.18" y="160.825"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="692.3258" x="8043.18" y="170.85">enrichment_service_ : std::unique_ptr<EnrichmentService></text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="8028.18" y="193.375"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="526.5819" x="8043.18" y="203.4">generator_ : std::unique_ptr<DataGenerator></text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="8028.18" y="225.925"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="391.613" x="8043.18" y="235.95">logger_ : std::unique_ptr<Logger></text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="8028.18" y="258.475"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="501.8068" x="8043.18" y="268.5">exporter_ : std::unique_ptr<ExportService></text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="8028.18" y="291.025"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="748.0886" x="8043.18" y="301.05">brewery_context_strategy_ : std::unique_ptr<ContextStrategy></text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="8028.18" y="323.575"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="662.9197" x="8043.18" y="333.6">sampling_strategy_ : std::unique_ptr<SamplingStrategy></text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="8028.18" y="356.125"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="789.1635" x="8043.18" y="366.15">beer_selection_strategy_ : std::unique_ptr<BeerSelectionStrategy></text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="8028.18" y="388.675"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="772.6134" x="8043.18" y="398.7">checkin_strategy_ : std::unique_ptr<CheckinDistributionStrategy></text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="8028.18" y="421.225"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="724.2263" x="8043.18" y="431.25">follow_strategy_ : std::unique_ptr<FollowGenerationStrategy></text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="8028.18" y="453.775"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="521.9255" x="8043.18" y="463.8">beer_style_palette_ : std::vector<BeerStyle></text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="8028.18" y="486.325"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="347.7252" x="8043.18" y="496.35">options_ : ApplicationOptions</text><line style="stroke:#4A5837;stroke-width:1;" x1="8021.18" x2="8908.819" y1="508.1" y2="508.1"/><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="8028.18" y="526.875"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="480.3693" x="8043.18" y="536.9">user_pool_ : std::vector<GeneratedUser></text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="8028.18" y="559.425"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="568.1133" x="8043.18" y="569.45">brewery_pool_ : std::vector<GeneratedBrewery></text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="8028.18" y="591.975"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="483.688" x="8043.18" y="602">beer_pool_ : std::vector<GeneratedBeer></text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="8028.18" y="624.525"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="561.4505" x="8043.18" y="634.55">checkin_pool_ : std::vector<GeneratedCheckin></text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="8028.18" y="657.075"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="519.2695" x="8043.18" y="667.1">follow_pool_ : std::vector<GeneratedFollow></text><line style="stroke:#4A5837;stroke-width:1;" x1="8021.18" x2="8908.819" y1="678.85" y2="678.85"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="8031.18" cy="700.625" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1;"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="131.3939" x="8043.18" y="707.65">Run() : bool</text><g data-visibility-modifier="PRIVATE_METHOD"><rect fill="#F24D5C" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="8028.18" y="730.175"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="718.7388" x="8043.18" y="740.2">RunUserPhase(locations : const std::vector<Location>&) : void</text><g data-visibility-modifier="PRIVATE_METHOD"><rect fill="#F24D5C" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="8028.18" y="762.725"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="860.639" x="8043.18" y="772.75">RunBreweryAndBeerPhase(locations : const std::vector<Location>&) : void</text><g data-visibility-modifier="PRIVATE_METHOD"><rect fill="#F24D5C" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="8028.18" y="795.275"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="293.119" x="8043.18" y="805.3">RunCheckinPhase() : void</text><g data-visibility-modifier="PRIVATE_METHOD"><rect fill="#F24D5C" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="8028.18" y="827.825"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="271.9192" x="8043.18" y="837.85">RunRatingPhase() : void</text><g data-visibility-modifier="PRIVATE_METHOD"><rect fill="#F24D5C" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="8028.18" y="860.375"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="272.6505" x="8043.18" y="870.4">RunFollowPhase() : void</text></g><!--class Logger--><g class="entity" data-qualified-name="Logger" data-source-line="585" id="ent0107"><rect fill="#EBECE3" height="58.55" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="117.3315" x="6884.33" y="1314.38"/><ellipse cx="6902.33" cy="1335.655" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M6906.0258,1344.3801 Q6905.1713,1344.8196 6904.2314,1345.0393 Q6903.2914,1345.259 6902.2538,1345.259 Q6898.5673,1345.259 6896.6264,1342.8298 Q6894.6855,1340.4006 6894.6855,1335.8108 Q6894.6855,1331.2087 6896.6264,1328.7795 Q6898.5673,1326.3503 6902.2538,1326.3503 Q6903.2914,1326.3503 6904.2436,1326.57 Q6905.1957,1326.7898 6906.0258,1327.2292 L6906.0258,1331.2331 Q6905.0981,1330.3786 6904.2253,1329.9819 Q6903.3525,1329.5852 6902.4247,1329.5852 Q6900.4472,1329.5852 6899.4401,1331.1538 Q6898.433,1332.7224 6898.433,1335.8108 Q6898.433,1338.8869 6899.4401,1340.4555 Q6900.4472,1342.0241 6902.4247,1342.0241 Q6903.3525,1342.0241 6904.2253,1341.6274 Q6905.0981,1341.2307 6906.0258,1340.3762 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="79.3315" x="6919.33" y="1344.18">Logger</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="6885.33" x2="7000.6615" y1="1356.93" y2="1356.93"/><line style="stroke:#4A5837;stroke-width:0.5;" x1="6885.33" x2="7000.6615" y1="1364.93" y2="1364.93"/></g><!--class PipelineLogger--><g class="entity" data-qualified-name="PipelineLogger" data-source-line="597" id="ent0116"><rect fill="#EBECE3" height="58.55" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="207.8003" x="5597.1" y="2158.75"/><ellipse cx="5615.1" cy="2180.025" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M5618.7958,2188.7501 Q5617.9413,2189.1896 5617.0014,2189.4093 Q5616.0614,2189.629 5615.0238,2189.629 Q5611.3373,2189.629 5609.3964,2187.1998 Q5607.4555,2184.7706 5607.4555,2180.1808 Q5607.4555,2175.5787 5609.3964,2173.1495 Q5611.3373,2170.7203 5615.0238,2170.7203 Q5616.0614,2170.7203 5617.0136,2170.94 Q5617.9657,2171.1598 5618.7958,2171.5992 L5618.7958,2175.6031 Q5617.8681,2174.7486 5616.9953,2174.3519 Q5616.1225,2173.9552 5615.1947,2173.9552 Q5613.2172,2173.9552 5612.2101,2175.5238 Q5611.203,2177.0924 5611.203,2180.1808 Q5611.203,2183.2569 5612.2101,2184.8255 Q5613.2172,2186.3941 5615.1947,2186.3941 Q5616.1225,2186.3941 5616.9953,2185.9974 Q5617.8681,2185.6007 5618.7958,2184.7462 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="169.8003" x="5632.1" y="2188.55">PipelineLogger</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="5598.1" x2="5803.9003" y1="2201.3" y2="2201.3"/><line style="stroke:#4A5837;stroke-width:0.5;" x1="5598.1" x2="5803.9003" y1="2209.3" y2="2209.3"/></g><!--class LogWorker--><g class="entity" data-qualified-name="LogWorker" data-source-line="624" id="ent0140"><rect fill="#EBECE3" height="58.55" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="164.2628" x="5839.87" y="2158.75"/><ellipse cx="5857.87" cy="2180.025" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M5861.5658,2188.7501 Q5860.7113,2189.1896 5859.7714,2189.4093 Q5858.8314,2189.629 5857.7938,2189.629 Q5854.1073,2189.629 5852.1664,2187.1998 Q5850.2255,2184.7706 5850.2255,2180.1808 Q5850.2255,2175.5787 5852.1664,2173.1495 Q5854.1073,2170.7203 5857.7938,2170.7203 Q5858.8314,2170.7203 5859.7836,2170.94 Q5860.7357,2171.1598 5861.5658,2171.5992 L5861.5658,2175.6031 Q5860.6381,2174.7486 5859.7653,2174.3519 Q5858.8925,2173.9552 5857.9647,2173.9552 Q5855.9872,2173.9552 5854.9801,2175.5238 Q5853.973,2177.0924 5853.973,2180.1808 Q5853.973,2183.2569 5854.9801,2184.8255 Q5855.9872,2186.3941 5857.9647,2186.3941 Q5858.8925,2186.3941 5859.7653,2185.9974 Q5860.6381,2185.6007 5861.5658,2184.7462 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="126.2628" x="5874.87" y="2188.55">LogWorker</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="5840.87" x2="6003.1328" y1="2201.3" y2="2201.3"/><line style="stroke:#4A5837;stroke-width:0.5;" x1="5840.87" x2="6003.1328" y1="2209.3" y2="2209.3"/></g><!--link ForenameEntry to Name--><g class="link" data-entity-1="ent0012" data-entity-2="ent0011" data-link-type="dependency" data-source-line="111" id="lnk16"><path codeLine="111" d="M145.67,1405.91 C149.78,1556.31 160.186,1937.5522 164.726,2103.5722" fill="none" id="ForenameEntry-to-Name" style="stroke:#656F33;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="#656F33" points="164.89,2109.57,168.6425,2100.464,164.7533,2104.5719,160.6455,2100.6827,164.89,2109.57" style="stroke:#656F33;stroke-width:1;"/><text fill="#14180C" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="289.2501" x="155.12" y="1729.95">SampleName() produces</text></g><!--reverse link LocationContext to Completeness--><g class="link" data-entity-1="ent0004" data-entity-2="ent0005" data-link-type="composition" data-source-line="193" id="lnk30"><path codeLine="193" d="M1170,2278.57 C1170,2417.86 1170,2696.83 1170,2836.11" fill="none" id="LocationContext-backto-Completeness" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="1170,2266.57,1166,2272.57,1170,2278.57,1174,2272.57,1170,2266.57" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link ApplicationOptions to GeneratorOptions--><g class="link" data-entity-1="ent0035" data-entity-2="ent0033" data-link-type="composition" data-source-line="221" id="lnk36"><path codeLine="221" d="M7473,2262.18 C7473,2393.72 7473,2691.3 7473,2836.25" fill="none" id="ApplicationOptions-backto-GeneratorOptions" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="7473,2250.18,7469,2256.18,7473,2262.18,7477,2256.18,7473,2250.18" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link ApplicationOptions to PipelineOptions--><g class="link" data-entity-1="ent0035" data-entity-2="ent0034" data-link-type="composition" data-source-line="222" id="lnk37"><path codeLine="222" d="M7423.7963,2260.0441 C7329.1263,2396.6941 7108.16,2715.66 7013.43,2852.4" fill="none" id="ApplicationOptions-backto-PipelineOptions" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="7430.63,2250.18,7423.9251,2252.8341,7423.7963,2260.0441,7430.5011,2257.39,7430.63,2250.18" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link GeneratorOptions to SamplingOptions--><g class="link" data-entity-1="ent0033" data-entity-2="ent0032" data-link-type="aggregation" data-source-line="223" id="lnk38"><path codeLine="223" d="M7473,3004.99 C7473,3064.44 7473,3135.37 7473,3201.75" fill="none" id="GeneratorOptions-backto-SamplingOptions" style="stroke:#656F33;stroke-width:1;"/><polygon fill="none" points="7473,2992.99,7469,2998.99,7473,3004.99,7477,2998.99,7473,2992.99" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link LogEntry to LogLevel--><g class="link" data-entity-1="ent0056" data-entity-2="ent0054" data-link-type="composition" data-source-line="345" id="lnk60"><path codeLine="345" d="M18547.6708,2310.9605 C18527.4608,2453.1005 18494.33,2686.18 18475.33,2819.89" fill="none" id="LogEntry-backto-LogLevel" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="18549.36,2299.08,18544.5552,2304.4572,18547.6708,2310.9605,18552.4756,2305.5833,18549.36,2299.08" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link LogEntry to PipelinePhase--><g class="link" data-entity-1="ent0056" data-entity-2="ent0055" data-link-type="composition" data-source-line="346" id="lnk61"><path codeLine="346" d="M18593.5611,2310.7627 C18623.1711,2436.9627 18669.05,2632.54 18701.54,2771.02" fill="none" id="LogEntry-backto-PipelinePhase" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="18590.82,2299.08,18588.2963,2305.8351,18593.5611,2310.7627,18596.0848,2304.0077,18590.82,2299.08" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link ILogger to LogProducer--><g class="link" data-entity-1="ent0057" data-entity-2="ent0058" data-link-type="extension" data-source-line="347" id="lnk62"><path codeLine="347" d="M18250,554.87 C18250,714.27 18250,1122.33 18250,1281.52" fill="none" id="ILogger-backto-LogProducer" style="stroke:#656F33;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="18250,536.87,18244,554.87,18256,554.87,18250,536.87" style="stroke:#656F33;stroke-width:1;"/></g><!--link LogProducer to LogEntry--><g class="link" data-entity-1="ent0058" data-entity-2="ent0056" data-link-type="dependency" data-source-line="348" id="lnk63"><path codeLine="348" d="M18272.91,1405.91 C18325.75,1547.22 18454.6784,1892.0001 18521.8184,2071.5401" fill="none" id="LogProducer-to-LogEntry" style="stroke:#656F33;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="#656F33" points="18523.92,2077.16,18524.5142,2067.3291,18522.1687,2072.4767,18517.021,2070.1312,18523.92,2077.16" style="stroke:#656F33;stroke-width:1;"/><text fill="#14180C" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="64.8188" x="18389.64" y="1729.95">emits</text></g><!--link LogDispatcher to LogEntry--><g class="link" data-entity-1="ent0059" data-entity-2="ent0056" data-link-type="dependency" data-source-line="349" id="lnk64"><path codeLine="349" d="M18799.31,1422.01 C18753.28,1572.3 18653.407,1898.363 18600.407,2071.423" fill="none" id="LogDispatcher-to-LogEntry" style="stroke:#656F33;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="#656F33" points="18598.65,2077.16,18605.1101,2069.7258,18600.1141,2072.3792,18597.4608,2067.3832,18598.65,2077.16" style="stroke:#656F33;stroke-width:1;"/><text fill="#14180C" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="119.3876" x="18710.45" y="1729.95">consumes</text></g><!--reverse link IPromptDirectory to PromptDirectory--><g class="link" data-entity-1="ent0083" data-entity-2="ent0084" data-link-type="extension" data-source-line="447" id="lnk85"><path codeLine="447" d="M6417.3455,2994.2525 C6402.8655,3058.7225 6383.79,3143.62 6367.02,3218.31" fill="none" id="IPromptDirectory-backto-PromptDirectory" style="stroke:#656F33;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="6421.29,2976.69,6411.4913,2992.9376,6423.1996,2995.5673,6421.29,2976.69" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link BiergartenPipelineOrchestrator to ICuratedDataService--><g class="link" data-entity-1="ent0097" data-entity-2="ent0068" data-link-type="composition" data-source-line="576" id="lnk98"><path codeLine="576" d="M8921.8297,555.379 C9288.5497,626.639 9806.7,744.45 10250,912.15 C10467.87,994.57 10701.76,1121.58 10863.77,1216.31" fill="none" id="BiergartenPipelineOrchestrator-backto-ICuratedDataService" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="8910.05,553.09,8915.1768,558.1611,8921.8297,555.379,8916.7028,550.3079,8910.05,553.09" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link BiergartenPipelineOrchestrator to EnrichmentService--><g class="link" data-entity-1="ent0097" data-entity-2="ent0078" data-link-type="composition" data-source-line="577" id="lnk99"><path codeLine="577" d="M8919.955,761.8188 C9010.935,824.2388 9094.45,885.57 9178,954.15 C9298.41,1052.99 9423.6,1183.46 9498.66,1265.22" fill="none" id="BiergartenPipelineOrchestrator-backto-EnrichmentService" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="8910.06,755.03,8912.7446,761.7228,8919.955,761.8188,8917.2705,755.1261,8910.06,755.03" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link BiergartenPipelineOrchestrator to DataGenerator--><g class="link" data-entity-1="ent0097" data-entity-2="ent0087" data-link-type="composition" data-source-line="578" id="lnk100"><path codeLine="578" d="M8465,894.44 C8465,952.19 8465,998.58 8465,1053.48" fill="none" id="BiergartenPipelineOrchestrator-backto-DataGenerator" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="8465,882.44,8461,888.44,8465,894.44,8469,888.44,8465,882.44" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link BiergartenPipelineOrchestrator to ExportService--><g class="link" data-entity-1="ent0097" data-entity-2="ent0093" data-link-type="composition" data-source-line="579" id="lnk101"><path codeLine="579" d="M8921.8612,500.2107 C9954.6012,558.0207 12582.08,717.34 14779,954.15 C15632.67,1046.17 16628.3,1195.97 17164.34,1280.14" fill="none" id="BiergartenPipelineOrchestrator-backto-ExportService" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="8909.88,499.54,8915.6471,503.8691,8921.8612,500.2107,8916.0942,495.8816,8909.88,499.54" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link BiergartenPipelineOrchestrator to CheckinDistributionStrategy--><g class="link" data-entity-1="ent0097" data-entity-2="ent0047" data-link-type="composition" data-source-line="580" id="lnk102"><path codeLine="580" d="M8921.7843,524.1042 C9254.2943,576.3942 9695.67,684.16 10032,912.15 C10051.42,925.32 10055.64,932.22 10064,954.15 C10132.24,1133.02 10057.65,2541.7 10198,2671.9 C10212.15,2685.03 12958.03,2676.33 12977,2679.9 C13092.06,2701.56 13213.44,2744.27 13316.97,2787.32" fill="none" id="BiergartenPipelineOrchestrator-backto-CheckinDistributionStrategy" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="8909.93,522.24,8915.2358,527.1235,8921.7843,524.1042,8916.4786,519.2207,8909.93,522.24" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link BiergartenPipelineOrchestrator to FollowGenerationStrategy--><g class="link" data-entity-1="ent0097" data-entity-2="ent0050" data-link-type="composition" data-source-line="581" id="lnk103"><path codeLine="581" d="M8922.0412,531.3135 C9375.1012,598.2335 10012.4,730 10109,954.15 C10182.03,1123.61 10125.88,2482.23 10261,2607.9 C10337.06,2678.65 13896.56,2670.39 14000,2679.9 C14389.44,2715.72 14833.76,2795.94 15118.04,2852.37" fill="none" id="BiergartenPipelineOrchestrator-backto-FollowGenerationStrategy" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="8910.17,529.56,8915.5211,534.3938,8922.0412,531.3135,8916.6901,526.4797,8910.17,529.56" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link BiergartenPipelineOrchestrator to SamplingStrategy--><g class="link" data-entity-1="ent0097" data-entity-2="ent0043" data-link-type="composition" data-source-line="582" id="lnk104"><path codeLine="582" d="M8921.6206,560.9714 C9317.7306,644.6914 9842.61,783.34 9974,954.15 C10090.5,1105.6 9918.48,2539.24 10056,2671.9 C10069.58,2685 10716.45,2676.5 10735,2679.9 C10918.9,2713.65 11119.65,2795.21 11245.89,2852.44" fill="none" id="BiergartenPipelineOrchestrator-backto-SamplingStrategy" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="8909.88,558.49,8914.9232,563.6443,8921.6206,560.9714,8916.5775,555.8172,8909.88,558.49" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link BiergartenPipelineOrchestrator to BeerSelectionStrategy--><g class="link" data-entity-1="ent0097" data-entity-2="ent0045" data-link-type="composition" data-source-line="583" id="lnk105"><path codeLine="583" d="M8921.8567,541.7923 C9346.4967,614.7623 9923.93,749 10022,954.15 C10104.47,1126.67 9988.03,2540.55 10127,2671.9 C10135.57,2680 11814.34,2678.12 11826,2679.9 C12022.85,2709.96 12239.16,2780.36 12390.5,2836.1" fill="none" id="BiergartenPipelineOrchestrator-backto-BeerSelectionStrategy" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="8910.03,539.76,8915.2659,544.7184,8921.8567,541.7923,8916.6208,536.8339,8910.03,539.76" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link BiergartenPipelineOrchestrator to ApplicationOptions--><g class="link" data-entity-1="ent0097" data-entity-2="ent0035" data-link-type="composition" data-source-line="584" id="lnk106"><path codeLine="584" d="M8010.1626,717.0392 C7915.9226,784.7092 7835.13,859.37 7770,954.15 C7505.03,1339.73 7475.31,1934.68 7472.86,2125.73" fill="none" id="BiergartenPipelineOrchestrator-backto-ApplicationOptions" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="8019.91,710.04,8012.7032,710.2905,8010.1626,717.0392,8017.3694,716.7887,8019.91,710.04" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link BiergartenPipelineOrchestrator to Logger--><g class="link" data-entity-1="ent0097" data-entity-2="ent0107" data-link-type="composition" data-source-line="585" id="lnk108"><path codeLine="585" d="M8009.1279,684.9569 C7865.8279,754.6269 7718.59,830.42 7578,912.15 C7342.53,1049.04 7078.05,1241.94 6981.17,1314.01" fill="none" id="BiergartenPipelineOrchestrator-backto-Logger" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="8019.92,679.71,8012.775,678.7361,8009.1279,684.9569,8016.2729,685.9308,8019.92,679.71" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link BiergartenPipelineOrchestrator to GeneratedUser--><g class="link" data-entity-1="ent0097" data-entity-2="ent0022" data-link-type="composition" data-source-line="588" id="lnk109"><path codeLine="588" d="M8007.8723,483.4548 C6599.2623,511.0248 2312.97,621.62 1789,954.15 C1701.33,1009.79 1645.66,1113.91 1612.54,1200.37" fill="none" id="BiergartenPipelineOrchestrator-backto-GeneratedUser" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="8019.87,483.22,8013.7929,479.3382,8007.8723,483.4548,8013.9494,487.3366,8019.87,483.22" style="stroke:#656F33;stroke-width:1;"/><text fill="#14180C" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="134.2499" x="1834.09" y="937.95">user_pool_</text><text fill="#14180C" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="39" x="1575.8001" y="1184.4744">0..*</text></g><!--reverse link BiergartenPipelineOrchestrator to GeneratedBrewery--><g class="link" data-entity-1="ent0097" data-entity-2="ent0020" data-link-type="composition" data-source-line="589" id="lnk110"><path codeLine="589" d="M8007.7302,475.6081 C6893.4002,481.9281 4024.91,539.06 3176,954.15 C3049.95,1015.78 2945.61,1141.19 2881.64,1232.91" fill="none" id="BiergartenPipelineOrchestrator-backto-GeneratedBrewery" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="8019.73,475.54,8013.7074,471.5741,8007.7302,475.6081,8013.7528,479.574,8019.73,475.54" style="stroke:#656F33;stroke-width:1;"/><text fill="#14180C" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="179.4438" x="3244.35" y="937.95">brewery_pool_</text><text fill="#14180C" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="39" x="2847.0087" y="1217.2131">0..*</text></g><!--reverse link BiergartenPipelineOrchestrator to GeneratedBeer--><g class="link" data-entity-1="ent0097" data-entity-2="ent0021" data-link-type="composition" data-source-line="590" id="lnk111"><path codeLine="590" d="M8007.8888,548.0201 C7288.8288,658.3601 5838.15,865.51 4590,946.15 C4576.44,947.03 3623.69,947.24 3612,954.15 C3516.46,1010.62 3459.53,1125.85 3427.94,1216.23" fill="none" id="BiergartenPipelineOrchestrator-backto-GeneratedBeer" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="8019.75,546.2,8013.2127,543.1563,8007.8888,548.0201,8014.4261,551.0638,8019.75,546.2" style="stroke:#656F33;stroke-width:1;"/><text fill="#14180C" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="137.2311" x="5013.11" y="937.95">beer_pool_</text><text fill="#14180C" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="39" x="3390.7844" y="1201.2015">0..*</text></g><!--reverse link BiergartenPipelineOrchestrator to GeneratedCheckin--><g class="link" data-entity-1="ent0097" data-entity-2="ent0026" data-link-type="composition" data-source-line="591" id="lnk112"><path codeLine="591" d="M8008.17,588.6527 C7515.79,704.6927 6708.85,877.06 5992,946.15 C5978.56,947.45 4059.64,947.3 4048,954.15 C3946.34,1013.96 3888.44,1140.37 3858.24,1232.82" fill="none" id="BiergartenPipelineOrchestrator-backto-GeneratedCheckin" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="8019.85,585.9,8013.0924,583.383,8008.17,588.6527,8014.9275,591.1697,8019.85,585.9" style="stroke:#656F33;stroke-width:1;"/><text fill="#14180C" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="173.9999" x="6264.18" y="937.95">checkin_pool_</text><text fill="#14180C" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="39" x="3820.8945" y="1217.1171">0..*</text></g><!--reverse link BiergartenPipelineOrchestrator to GeneratedFollow--><g class="link" data-entity-1="ent0097" data-entity-2="ent0028" data-link-type="composition" data-source-line="592" id="lnk113"><path codeLine="592" d="M8008.5075,642.7592 C7681.3675,753.8692 7234.65,887.17 6819,946.15 C6802.95,948.43 4497.98,945.93 4484,954.15 C4369.82,1021.27 4310.85,1172.44 4284.32,1265.17" fill="none" id="BiergartenPipelineOrchestrator-backto-GeneratedFollow" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="8019.87,638.9,8012.9024,637.0421,8008.5075,642.7592,8015.4751,644.6171,8019.87,638.9" style="stroke:#656F33;stroke-width:1;"/><text fill="#14180C" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="152.2875" x="7002.94" y="937.95">follow_pool_</text><text fill="#14180C" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="39" x="4246.3046" y="1249.8743">0..*</text></g><!--reverse link ICuratedDataService to JsonLoader--><g class="link" data-entity-1="ent0068" data-entity-2="ent0069" data-link-type="extension" data-source-line="595" id="lnk114"><path codeLine="595" d="M11070,1488.76 C11070,1653.42 11070,1920.99 11070,2077.18" fill="none" id="ICuratedDataService-backto-JsonLoader" style="stroke:#656F33;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="11070,1470.76,11064,1488.76,11076,1488.76,11070,1470.76" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link ICuratedDataService to MockCuratedDataService--><g class="link" data-entity-1="ent0068" data-entity-2="ent0073" data-link-type="extension" data-source-line="596" id="lnk115"><path codeLine="596" d="M11597.2861,1475.688 C11872.8361,1550.188 12199.11,1648.54 12496,1768.15 C12716.45,1856.96 12956.9,1985.66 13118.08,2076.92" fill="none" id="ICuratedDataService-backto-MockCuratedDataService" style="stroke:#656F33;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="11579.91,1470.99,11595.7201,1481.48,11598.8521,1469.8959,11579.91,1470.99" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link Logger to PipelineLogger--><g class="link" data-entity-1="ent0107" data-entity-2="ent0116" data-link-type="extension" data-source-line="597" id="lnk117"><path codeLine="597" d="M6865.9327,1350.5656 C6680.4027,1367.2856 6122.38,1442.72 5822,1768.15 C5716.24,1882.73 5702.34,2084.14 5700.94,2158.44" fill="none" id="Logger-backto-PipelineLogger" style="stroke:#656F33;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="6883.86,1348.95,6865.3941,1344.5898,6866.4712,1356.5414,6883.86,1348.95" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link ContextStrategy to BreweryContextStrategy--><g class="link" data-entity-1="ent0040" data-entity-2="ent0041" data-link-type="extension" data-source-line="598" id="lnk118"><path codeLine="598" d="M10366,3010.99 C10366,3086.32 10366,3181.33 10366,3250.63" fill="none" id="ContextStrategy-backto-BreweryContextStrategy" style="stroke:#656F33;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="10366,2992.99,10360,3010.99,10372,3010.99,10366,2992.99" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link ContextStrategy to BeerContextStrategy--><g class="link" data-entity-1="ent0040" data-entity-2="ent0042" data-link-type="extension" data-source-line="599" id="lnk119"><path codeLine="599" d="M10526.3389,3001.7345 C10666.6089,3077.0445 10860.82,3181.32 10989.78,3250.55" fill="none" id="ContextStrategy-backto-BeerContextStrategy" style="stroke:#656F33;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="10510.48,2993.22,10523.5007,3007.0208,10529.177,2996.4482,10510.48,2993.22" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link SamplingStrategy to UniformSamplingStrategy--><g class="link" data-entity-1="ent0043" data-entity-2="ent0044" data-link-type="extension" data-source-line="600" id="lnk120"><path codeLine="600" d="M11473.1318,2987.3938 C11577.1218,3061.9038 11736.96,3176.43 11840.81,3250.84" fill="none" id="SamplingStrategy-backto-UniformSamplingStrategy" style="stroke:#656F33;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="11458.5,2976.91,11469.6372,2992.2711,11476.6264,2982.5166,11458.5,2976.91" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link BeerSelectionStrategy to RandomBeerSelectionStrategy--><g class="link" data-entity-1="ent0045" data-entity-2="ent0046" data-link-type="extension" data-source-line="601" id="lnk121"><path codeLine="601" d="M12629.4919,3009.3153 C12657.1019,3068.7653 12688.03,3135.37 12718.86,3201.75" fill="none" id="BeerSelectionStrategy-backto-RandomBeerSelectionStrategy" style="stroke:#656F33;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="12621.91,2992.99,12624.0501,3011.8426,12634.9336,3006.788,12621.91,2992.99" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link CheckinDistributionStrategy to JCurveCheckinStrategy--><g class="link" data-entity-1="ent0047" data-entity-2="ent0048" data-link-type="extension" data-source-line="602" id="lnk122"><path codeLine="602" d="M13581,3059.83 C13581,3105.82 13581,3139.79 13581,3185.77" fill="none" id="CheckinDistributionStrategy-backto-JCurveCheckinStrategy" style="stroke:#656F33;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="13581,3041.83,13575,3059.83,13587,3059.83,13581,3041.83" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link CheckinDistributionStrategy to RandomCheckinStrategy--><g class="link" data-entity-1="ent0047" data-entity-2="ent0049" data-link-type="extension" data-source-line="603" id="lnk123"><path codeLine="603" d="M13864.7565,3049.6562 C13939.4665,3084.9362 14005.33,3116.04 14083.47,3152.94" fill="none" id="CheckinDistributionStrategy-backto-RandomCheckinStrategy" style="stroke:#656F33;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="13848.48,3041.97,13862.1944,3055.0816,13867.3185,3044.2307,13848.48,3041.97" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link FollowGenerationStrategy to RandomFollowStrategy--><g class="link" data-entity-1="ent0050" data-entity-2="ent0051" data-link-type="extension" data-source-line="604" id="lnk124"><path codeLine="604" d="M15411,2994.69 C15411,3059.16 15411,3143.62 15411,3218.31" fill="none" id="FollowGenerationStrategy-backto-RandomFollowStrategy" style="stroke:#656F33;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="15411,2976.69,15405,2994.69,15417,2994.69,15411,2976.69" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link FollowGenerationStrategy to ActivityWeightedFollowStrategy--><g class="link" data-entity-1="ent0050" data-entity-2="ent0052" data-link-type="extension" data-source-line="605" id="lnk125"><path codeLine="605" d="M15604.8786,2982.8012 C15790.8386,3047.2112 16068.74,3143.46 16284.06,3218.03" fill="none" id="FollowGenerationStrategy-backto-ActivityWeightedFollowStrategy" style="stroke:#656F33;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="15587.87,2976.91,15602.9149,2988.4707,15606.8424,2977.1316,15587.87,2976.91" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link EnrichmentService to WikipediaService--><g class="link" data-entity-1="ent0078" data-entity-2="ent0079" data-link-type="extension" data-source-line="606" id="lnk126"><path codeLine="606" d="M9570.2663,1440.005 C9573.8263,1590.295 9581.28,1904.1 9585.39,2077.16" fill="none" id="EnrichmentService-backto-WikipediaService" style="stroke:#656F33;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="9569.84,1422.01,9564.2679,1440.147,9576.2646,1439.8629,9569.84,1422.01" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link WebClient to HttpWebClient--><g class="link" data-entity-1="ent0080" data-entity-2="ent0081" data-link-type="extension" data-source-line="607" id="lnk127"><path codeLine="607" d="M9588,3010.99 C9588,3086.32 9588,3181.33 9588,3250.63" fill="none" id="WebClient-backto-HttpWebClient" style="stroke:#656F33;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="9588,2992.99,9582,3010.99,9594,3010.99,9588,2992.99" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link DataGenerator to MockGenerator--><g class="link" data-entity-1="ent0087" data-entity-2="ent0088" data-link-type="extension" data-source-line="608" id="lnk128"><path codeLine="608" d="M8337.2901,1650.2684 C8276.4501,1795.8684 8212.76,1948.3 8165.72,2060.86" fill="none" id="DataGenerator-backto-MockGenerator" style="stroke:#656F33;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="8344.23,1633.66,8331.754,1647.9551,8342.8262,1652.5817,8344.23,1633.66" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link DataGenerator to LlamaGenerator--><g class="link" data-entity-1="ent0087" data-entity-2="ent0089" data-link-type="extension" data-source-line="609" id="lnk129"><path codeLine="609" d="M8593.0669,1650.2612 C8633.4769,1746.6912 8671.24,1836.8 8710.54,1930.58" fill="none" id="DataGenerator-backto-LlamaGenerator" style="stroke:#656F33;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="8586.11,1633.66,8587.5332,1652.5802,8598.6007,1647.9423,8586.11,1633.66" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link PromptFormatter to Gemma4JinjaPromptFormatter--><g class="link" data-entity-1="ent0090" data-entity-2="ent0091" data-link-type="extension" data-source-line="610" id="lnk130"><path codeLine="610" d="M8818,3027.3 C8818,3101.89 8818,3186.16 8818,3250.63" fill="none" id="PromptFormatter-backto-Gemma4JinjaPromptFormatter" style="stroke:#656F33;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="8818,3009.3,8812,3027.3,8824,3027.3,8818,3009.3" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link ExportService to SqliteExportService--><g class="link" data-entity-1="ent0093" data-entity-2="ent0094" data-link-type="extension" data-source-line="611" id="lnk131"><path codeLine="611" d="M17554,1537.7 C17554,1610.37 17554,1680.1 17554,1767.72" fill="none" id="ExportService-backto-SqliteExportService" style="stroke:#656F33;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="17554,1519.7,17548,1537.7,17560,1537.7,17554,1519.7" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link DateTimeProvider to SystemDateTimeProvider--><g class="link" data-entity-1="ent0095" data-entity-2="ent0096" data-link-type="extension" data-source-line="612" id="lnk132"><path codeLine="612" d="M17554,2994.69 C17554,3074.9 17554,3195.91 17554,3267.08" fill="none" id="DateTimeProvider-backto-SystemDateTimeProvider" style="stroke:#656F33;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="17554,2976.69,17548,2994.69,17560,2994.69,17554,2976.69" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link WikipediaService to WebClient--><g class="link" data-entity-1="ent0079" data-entity-2="ent0080" data-link-type="composition" data-source-line="615" id="lnk133"><path codeLine="615" d="M9588,2311.08 C9588,2459.25 9588,2707.17 9588,2836.31" fill="none" id="WikipediaService-backto-WebClient" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="9588,2299.08,9584,2305.08,9588,2311.08,9592,2305.08,9588,2299.08" style="stroke:#656F33;stroke-width:1;"/></g><!--link WikipediaService to ContextStrategy--><g class="link" data-entity-1="ent0079" data-entity-2="ent0040" data-link-type="dependency" data-source-line="616" id="lnk134"><path codeLine="616" d="M9662.57,2298.68 C9736.58,2402.49 9857.15,2558.85 9985,2671.9 C10056.45,2735.08 10140.9216,2789.8267 10215.3216,2833.0367" fill="none" id="WikipediaService-to-ContextStrategy" style="stroke:#656F33;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="#656F33" points="10220.51,2836.05,10214.7362,2828.071,10216.1863,2833.5389,10210.7185,2834.989,10220.51,2836.05" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link LlamaGenerator to PromptFormatter--><g class="link" data-entity-1="ent0089" data-entity-2="ent0090" data-link-type="composition" data-source-line="617" id="lnk135"><path codeLine="617" d="M8818,2457.52 C8818,2587.6 8818,2725.63 8818,2820.05" fill="none" id="LlamaGenerator-backto-PromptFormatter" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="8818,2445.52,8814,2451.52,8818,2457.52,8822,2451.52,8818,2445.52" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link LlamaGenerator to IPromptDirectory--><g class="link" data-entity-1="ent0089" data-entity-2="ent0083" data-link-type="composition" data-source-line="618" id="lnk136"><path codeLine="618" d="M8646.3642,2454.7769 C8591.8942,2519.0869 8533.15,2571.04 8457,2607.9 C8371.31,2649.37 6834.62,2647.79 6745,2679.9 C6645.06,2715.71 6550.75,2795.93 6492.98,2852.37" fill="none" id="LlamaGenerator-backto-IPromptDirectory" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="8654.12,2445.62,8647.1898,2447.6132,8646.3642,2454.7769,8653.2944,2452.7837,8654.12,2445.62" style="stroke:#656F33;stroke-width:1;"/></g><!--link LlamaGenerator to GeneratorOptions--><g class="link" data-entity-1="ent0089" data-entity-2="ent0033" data-link-type="dependency" data-source-line="619" id="lnk137"><path codeLine="619" d="M8646.59,2445.56 C8593,2507.84 8528.83,2567.93 8457,2607.9 C8296.99,2696.93 8232.33,2655.03 8050,2671.9 C8019.01,2674.77 7799.26,2669.3 7770,2679.9 C7681.63,2711.93 7603.4256,2777.0805 7547.9256,2831.9805" fill="none" id="LlamaGenerator-to-GeneratorOptions" style="stroke:#656F33;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="#656F33" points="7543.66,2836.2,7552.8715,2832.7145,7547.2147,2832.6837,7547.2454,2827.027,7543.66,2836.2" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link SqliteExportService to DateTimeProvider--><g class="link" data-entity-1="ent0094" data-entity-2="ent0095" data-link-type="composition" data-source-line="620" id="lnk138"><path codeLine="620" d="M17554,2620.18 C17554,2716.49 17554,2795.3 17554,2852.47" fill="none" id="SqliteExportService-backto-DateTimeProvider" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="17554,2608.18,17550,2614.18,17554,2620.18,17558,2614.18,17554,2608.18" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link PipelineLogger to BoundedChannel--><g class="link" data-entity-1="ent0116" data-entity-2="ent0066" data-link-type="aggregation" data-source-line="623" id="lnk139"><path codeLine="623" d="M5701,2229.43 C5701,2314.73 5701,2561.66 5701,2738.53" fill="none" id="PipelineLogger-backto-BoundedChannel" style="stroke:#656F33;stroke-width:1;"/><polygon fill="none" points="5701,2217.43,5697,2223.43,5701,2229.43,5705,2223.43,5701,2217.43" style="stroke:#656F33;stroke-width:1;"/><text fill="#14180C" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="78.1815" x="5702" y="2663.7">logs to</text></g><!--reverse link LogWorker to BoundedChannel--><g class="link" data-entity-1="ent0140" data-entity-2="ent0066" data-link-type="aggregation" data-source-line="624" id="lnk141"><path codeLine="624" d="M5914.3763,2229.3845 C5901.2563,2297.6845 5867.49,2463.69 5822,2607.9 C5808.47,2650.77 5791.82,2696.2 5775.24,2738.56" fill="none" id="LogWorker-backto-BoundedChannel" style="stroke:#656F33;stroke-width:1;"/><polygon fill="none" points="5916.64,2217.6,5911.5799,2222.7377,5914.3763,2229.3845,5919.4363,2224.2469,5916.64,2217.6" style="stroke:#656F33;stroke-width:1;"/><text fill="#14180C" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="132.9065" x="5811.87" y="2663.7">drains from</text></g><!--reverse link EnrichedCity to Location--><g class="link" data-entity-1="ent0006" data-entity-2="ent0003" data-link-type="composition" data-source-line="627" id="lnk142"><path codeLine="627" d="M1191.0338,1417.1176 C1215.4538,1491.9276 1263.62,1605.75 1353,1674.15 C1491.17,1779.88 1583.39,1679.35 1733,1768.15 C1842.55,1833.17 1939.28,1939.17 2008.25,2028.26" fill="none" id="EnrichedCity-backto-Location" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="1187.31,1405.71,1185.3693,1412.6551,1191.0338,1417.1176,1192.9744,1410.1726,1187.31,1405.71" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link EnrichedCity to LocationContext--><g class="link" data-entity-1="ent0006" data-entity-2="ent0004" data-link-type="composition" data-source-line="628" id="lnk143"><path codeLine="628" d="M1170,1417.91 C1170,1568.31 1170,1943.55 1170,2109.57" fill="none" id="EnrichedCity-backto-LocationContext" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="1170,1405.91,1166,1411.91,1170,1417.91,1174,1411.91,1170,1405.91" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link GeneratedBrewery to Location--><g class="link" data-entity-1="ent0020" data-entity-2="ent0003" data-link-type="composition" data-source-line="629" id="lnk144"><path codeLine="629" d="M2714.3664,1464.0307 C2593.4164,1610.4107 2386.52,1860.82 2248.11,2028.34" fill="none" id="GeneratedBrewery-backto-Location" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="2722.01,1454.78,2715.1046,1456.8575,2714.3664,1464.0307,2721.2718,1461.9532,2722.01,1454.78" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link GeneratedBrewery to BreweryResult--><g class="link" data-entity-1="ent0020" data-entity-2="ent0008" data-link-type="composition" data-source-line="630" id="lnk145"><path codeLine="630" d="M2794.1698,1466.6396 C2768.3798,1633.7596 2721.64,1936.66 2697.45,2093.41" fill="none" id="GeneratedBrewery-backto-BreweryResult" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="2796,1454.78,2791.1317,1460.0997,2794.1698,1466.6396,2799.0381,1461.3199,2796,1454.78" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link GeneratedBrewery to GenerationMetadata--><g class="link" data-entity-1="ent0020" data-entity-2="ent0019" data-link-type="composition" data-source-line="631" id="lnk146"><path codeLine="631" d="M2913.74,1463.5271 C2981.3,1536.7071 3070.98,1620.15 3176,1674.15 C3351.9,1764.6 3456.82,1644.25 3611,1768.15 C3712.49,1849.7 3762.54,1996.86 3785.53,2093.24" fill="none" id="GeneratedBrewery-backto-GenerationMetadata" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="2905.6,1454.71,2906.731,1461.8319,2913.74,1463.5271,2912.609,1456.4052,2905.6,1454.71" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link GeneratedBeer to Location--><g class="link" data-entity-1="ent0021" data-entity-2="ent0003" data-link-type="composition" data-source-line="632" id="lnk147"><path codeLine="632" d="M3337.269,1481.3959 C3301.389,1552.9159 3251.67,1626.65 3176,1674.15 C2912.75,1839.4 2756.7,1620.84 2483,1768.15 C2371.5,1828.16 2278.2,1936.59 2213.7,2028.09" fill="none" id="GeneratedBeer-backto-Location" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="3342.65,1470.67,3336.3842,1474.2393,3337.269,1481.3959,3343.5348,1477.8266,3342.65,1470.67" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link GeneratedBeer to BeerStyle--><g class="link" data-entity-1="ent0021" data-entity-2="ent0007" data-link-type="composition" data-source-line="633" id="lnk148"><path codeLine="633" d="M3333.3767,1481.628 C3296.5167,1565.598 3252.39,1667.61 3211,1768.15 C3170.72,1866 3127.13,1977.62 3095.03,2061.02" fill="none" id="GeneratedBeer-backto-BeerStyle" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="3338.2,1470.64,3332.1257,1474.5262,3333.3767,1481.628,3339.451,1477.7418,3338.2,1470.64" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link GeneratedBeer to BeerResult--><g class="link" data-entity-1="ent0021" data-entity-2="ent0009" data-link-type="composition" data-source-line="634" id="lnk149"><path codeLine="634" d="M3396.7919,1482.7576 C3399.8919,1636.5176 3404.88,1883.71 3408.12,2044.53" fill="none" id="GeneratedBeer-backto-BeerResult" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="3396.55,1470.76,3392.6718,1476.8394,3396.7919,1482.7576,3400.6701,1476.6782,3396.55,1470.76" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link GeneratedBeer to GenerationMetadata--><g class="link" data-entity-1="ent0021" data-entity-2="ent0019" data-link-type="composition" data-source-line="635" id="lnk150"><path codeLine="635" d="M3466.0486,1481.5102 C3509.7586,1565.3302 3562.14,1667.43 3611,1768.15 C3664.77,1878.99 3723.33,2008.06 3761.46,2093.31" fill="none" id="GeneratedBeer-backto-GenerationMetadata" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="3460.5,1470.87,3459.7276,1478.0396,3466.0486,1481.5102,3466.821,1474.3406,3460.5,1470.87" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link GeneratedUser to Location--><g class="link" data-entity-1="ent0022" data-entity-2="ent0003" data-link-type="composition" data-source-line="636" id="lnk151"><path codeLine="636" d="M1669.8372,1497.1396 C1766.9972,1647.0296 1913.04,1872.35 2014.03,2028.16" fill="none" id="GeneratedUser-backto-Location" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="1663.31,1487.07,1663.2171,1494.2805,1669.8372,1497.1396,1669.9301,1489.9291,1663.31,1487.07" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link GeneratedUser to UserResult--><g class="link" data-entity-1="ent0022" data-entity-2="ent0010" data-link-type="composition" data-source-line="637" id="lnk152"><path codeLine="637" d="M1571,1499.07 C1571,1659.87 1571,1907.06 1571,2060.85" fill="none" id="GeneratedUser-backto-UserResult" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="1571,1487.07,1567,1493.07,1571,1499.07,1575,1493.07,1571,1487.07" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link GeneratedUser to GenerationMetadata--><g class="link" data-entity-1="ent0022" data-entity-2="ent0019" data-link-type="composition" data-source-line="638" id="lnk153"><path codeLine="638" d="M1633.6456,1497.9576 C1669.1356,1566.8476 1716.48,1632.73 1789,1674.15 C1833.01,1699.28 3569.07,1739.69 3611,1768.15 C3720.05,1842.16 3768.26,1994.39 3788.77,2093.52" fill="none" id="GeneratedUser-backto-GenerationMetadata" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="1628.15,1487.29,1627.3419,1494.4557,1633.6456,1497.9576,1634.4537,1490.7919,1628.15,1487.29" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link GeneratedCheckin to CheckinResult--><g class="link" data-entity-1="ent0026" data-entity-2="ent0017" data-link-type="composition" data-source-line="639" id="lnk154"><path codeLine="639" d="M3880.6465,1465.8523 C3955.6965,1645.4623 4097.38,1984.52 4156.4,2125.77" fill="none" id="GeneratedCheckin-backto-CheckinResult" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="3876.02,1454.78,3874.6425,1461.8583,3880.6465,1465.8523,3882.024,1458.774,3876.02,1454.78" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link GeneratedCheckin to GenerationMetadata--><g class="link" data-entity-1="ent0026" data-entity-2="ent0019" data-link-type="composition" data-source-line="640" id="lnk155"><path codeLine="640" d="M3826.0853,1466.7738 C3820.7253,1633.8938 3811.02,1936.66 3806,2093.41" fill="none" id="GeneratedCheckin-backto-GenerationMetadata" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="3826.47,1454.78,3822.2797,1460.6487,3826.0853,1466.7738,3830.2756,1460.9051,3826.47,1454.78" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link GeneratedRating to RatingResult--><g class="link" data-entity-1="ent0027" data-entity-2="ent0018" data-link-type="composition" data-source-line="641" id="lnk156"><path codeLine="641" d="M4702,1466.78 C4702,1646.39 4702,1984.52 4702,2125.77" fill="none" id="GeneratedRating-backto-RatingResult" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="4702,1454.78,4698,1460.78,4702,1466.78,4706,1460.78,4702,1454.78" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link GeneratedRating to GenerationMetadata--><g class="link" data-entity-1="ent0027" data-entity-2="ent0019" data-link-type="composition" data-source-line="642" id="lnk157"><path codeLine="642" d="M4651.6474,1465.4445 C4615.7074,1539.0945 4563.46,1621.15 4484,1674.15 C4300.26,1796.72 4169.86,1631.92 3996,1768.15 C3893.27,1848.65 3843.12,1996.45 3820.23,2093.22" fill="none" id="GeneratedRating-backto-GenerationMetadata" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="4656.91,1454.66,4650.6839,1458.298,4651.6474,1465.4445,4657.8735,1461.8064,4656.91,1454.66" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link GeneratedFollow to GenerationMetadata--><g class="link" data-entity-1="ent0028" data-entity-2="ent0019" data-link-type="composition" data-source-line="643" id="lnk158"><path codeLine="643" d="M4205.443,1431.85 C4148.453,1515.31 4064.2,1643.21 3996,1768.15 C3936.63,1876.91 3878.51,2007.24 3841.83,2093.32" fill="none" id="GeneratedFollow-backto-GenerationMetadata" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="4212.21,1421.94,4205.5232,1424.6393,4205.443,1431.85,4212.1299,1429.1507,4212.21,1421.94" style="stroke:#656F33;stroke-width:1;"/></g><?plantuml-src xJpjSkEuaV_r5BZvuPKtbcPcTxDtepYkyihsZ9Fvy5cUcxgggs9192GXfaW606qhoLRb8V8EUOzxb7kIQtoH10XIj7t9tbrMDLLZ4TsDxaQZqOrkwYlqwy6VqLTe_kdZnUNRpzUdDvUVFg83jBZvz_UN7z_2o2F8_1FDuhHC29fENoufOMlC1CaczuJ-0VuJ6x8bqwBSfYD-IxC2Cxn5SOevFnM2qMKfo4MUYGK0epSDa8IiS9cAQkoRNpO61HLfZVRjgz58FK4_LDEZCommkg85IMb6q7_z-IzeBYT5PnIlWSHeLE3u5gy9Ud6MRp7DPkX3df2Klq1_78sGvX2zpsCiQ9x1CmIVNw2OYXsQ8IwIsOm3-zdQ37211OaAbj-1DaWGXFByszVVVnzz4noDyp8JRDUB-JeucWAJQPJYR5s2FDp2t95OvEou0NzY4K0c8HTiXfAyNAQa8fIjMmC_jhKn1yMJ1r4fHNq9oxGjKWAhGRXaQzxuQY4sc4LAT4a05ZCITawIbLi7nSntKQQf-kCA5ffY_VVfafDCkEoUPup66vBCvPhziQ4ijQApIfoAsSm8uidfKls14BOGEp0sIpB3s_229uJ7Z1PcklRubcOHNjx1s2hDiR1FyKFeAS32Pe6dD6j2DfyrkMJadh3TDU6mXnnE8vBjOxOBHA4hQzjB8GpbgV5_6NTw6ykL3OsqbwH3zPzvIx8LPLn4dNO2Q3sZQv8bX0M7IfYg4sz9yx0WiQ1ti2KYSD3hZMW8rH3YewJwjsI_CTT5peX4FrV-R--kwYEOvO8WfiJALovXXRqoJwAKSe5-hKcKMSw08aaYJiInWwGz9Y_P7gIMantZb68EpZWX82I0WPsWk6HmI2HH0aSJeB4x6fFfvd2gC2xdUbIUMmizDfkzpt5Y6U8_xERwZ1WVefSAHmulD7FEAC7n1Z4YO0XXM5vZiXxZMrmq6JzojQFbo1boOPgwE46tP0UYBNVeSl59mSjZQlAwEinYE5BHP0BheYogPb81tpDS5B2KoWocQ86bhvTmOyi9ZvQxo10xQgw5Cr2VZqU8PUj3-2x5PaGVRAioY-MsFvBc0GDR8ZPv0gBaY0eKummj2VoNfaeKXOAp7GBE9kguly_PBN1vJm6j1CEwpq0J2E8QSC05rwkto4iM0_wAvLjKv4K9YpvHZ4wMkubXT28N7in5MyXy_kfGweOJWivltbtE5vFJZsUJttxyzENZv7An-7o-c6wJANghx5tXW5m58z9oO2gfEQidLnQnOGGd954uy2KlrniaSed1ymo_b9u1TX5X-YG4yo3iLvLc5LQC6InVbjlT1jOh1UPAJ2JbcCBvIwjjkP4hcO7Q1U9g6I54snAZSG4Uv06CaKnm2Jgia3G8i0xpq0nasMg6b1AzwQpQG0K9vS0Uo8VAGi9cOgh2XKHjV-a6N8yodPveVpPhcjWXg39FoXW4hZpHV4DYY34zxntBfx1Vv6aTZdEKs-dnSDSWLxRsoF8OkFIEb7s4tbQhze48BFLIaQiNDA89q2ZXOFh-kqYumo26r7f7jAR27Ht4IlNEq3BFqnO1kH46C4aI4uHKB2xrzo1_tN6PmO819wZncFP2JI-4cyq2iUVMgd0Mq6kNI12srFB0bw0mJnFKnXvLXDcOnZnsH7yA_p8ugVYNuSCZUPGeyBIESSnp0YbKHzmbyw9y5Iqf2vYDX2Y0G_2nIJX67YAaU-mxmYeoYhiZbvKZSF99FJUSqGeKZ5-cXz8JoIDXLzkzFEQaKyePE0JW4KDsfJsvT7BlttymteqaXzAdOKYXxZE08v2lof49ZjKve8ynGX9vYe3vyd8hpq1mtOoiuLI5Bu2J8WFEbJiqhXoy7taeSYRWj8HZu_hJwTc7qoiu9j1__lMrxmMzfJVEpNLhDEmjEYsZpx8DGPdeDVteCwnL-ytzzjgv4VjaP9hupF7Eps3s8a_J_BuEcjNN3hxCO18SVCJaqiAlzAdk1Cvx4g3Ep2V2gnNDgA24zzuYA1Rywu2l8PXntEoFWKkMqw98gV4kWBYYwr8B-489eCLInpHCzKbnoniN3Tj2wWD22NDkGZZ-UlhgmexdHLJK8w-cRtxP7BhLglxscqYEVl-TLLWKYmTdw5zUl_d6gWKsgahouF7aTN3fS-RpkPKtIL61nSPeSKLJmdUmjxUpcNnS6tIqpMLmeOzQc6E5KsuTFpTgC4HoDGjEZptrdBXSsJildoc8NOjI3E0gpTTxe1gpDTRJdt1jrJDhQSfwViFgp6VQpX6WBgqiGAu3iastjMWvW7aQ3LhkLGuJxCpr81W4OIiCmQcn_eKy4CXwXuwFgx6JaqeN_reI1fiA0jCn7AwmiwNZ5zKMEZZSVslt0J-OkUORpFZui7LZvbpz-7pz59o0M_v9sQXNoIxmdcNI-S7OnZ-yugl9YkNnfCLaDU9vwOpAvAR5WvvrOZAcIF7UbE5lmL6j4XLcafIet7YVNXIS2ahvk0x8DIT-l7zmz1yP158Ope56DbFWx5Z3L_7jYSzjFUBdJrcIRyCCMoL2uXzPSbln-isRR__PZCYhKnaXS4-v4tM16Xhv2GLkE1OTkvnHhiia-rVfb7EwpaxD_TuNTRt7np9gyei2JeYihUOkfucXOsQMcrEEZqtGxmalXxJaDYXqx_4FVPtUGEB91TYptFJxQD8i8GykhQvyypVpajqHm_HWk_Y7LPVUJ8zLbzv69fuExwIEmNz0HTURM2S5THY_PmVR2JLQhQEsomzeAZYiAGNzgHvwf0Nep2Li0E6nlvjKhe5PeF_pyZLZqSjinJ3OMXdh7EXzlbw3tUdSIHLCuSbxSaTI8-uPMPOwmmFKNFtn1JDzctFEcBh1gAkjDbg-sc1kopyBWPae2_MtvBgsPVN8786dcReQymRDXlMUwdpRU-Xl5FNmXc0cRr7yClJQBHK9ku6jEkCDoxCSTgLAMw8OegVRsKo2HKLUrqzJfQXPfJERbIZfPwusgjoSSxaIeGpQr0dyR2sKEjSEub8k8M25_G4CZebf2x01iXQ-wHjTtLpfQsrM6NoymLa6-QYyGmHFcCYh8FNas18xENZ6V12WG5e8plz9CrwNsTXnynDqao-A93LhCbQBf3QAUZYRgGVclqYQRNqVOUn2VsJwrrpQqB2_n7OrpEVuJzDfKwMQIgLW-CZQWazvXiYM2gw16zhf03PNWBnterUDB4QHJfVA2q_9DoSl4EQUwgl5-Nr9Ib9vGFKDCAoRAo6VgjsZ_6P6ibn4gp9Dgq7WEw6gtd276SMsZKH3acqXTlj1OmmIKmFPTBUmPJb98hS4iI1PCgQme-7nZHSRN9EOq3ioFcpjlnkRByubpR5hntqwrnr4ZAGvJeoJTRTkksBRkOrnOZCnFfONAl8YnJqX_6iMjU7wKhq6xIgDU2RnEXrfKZSNZC-atRYgTAW7ojjrzVTfCmukSJVvQDVHgrBp_pWNJX7zmCjcG4EIdqQTvcVp-TbyzfkFMmIhpKZ7Uh8ZH7x_MdKwo3BwbcnpSBa9mYjPSwAoqYGRVNGP33EkEZUel7xQGam0W29FyEu8uGt1YPn3LiCOCHZgksnGCEvqx5gMd94B2bCNgJoFaiDmkUe3X6e1l_hpLlXvApnrAuHDIcSTz46rPataPe2Op7IQoCACwjYQJ7HvHbLqT0DIQqD8JLJtrlobNUEN9gqn2_3IQkLNa2UKAPWzaLlFCphThwIRPO1wZdBPJ2msM9Yk9RcD6XouUwWlcD7Di1Ah5SVKG_rHp5iYl99V-EfUtPDmctRROQyGeDQujz7s2xs5e3UXdW-GiI45NglWiime1B5H8TZn5xASgq4RpW9HXcCHnU3-I0EZsvxQPOQ_XzYIrmi2QSAvPdWC4lczuD4T9VTxBvmg5NGluhXagRl1DB63ms1Q-vcbvvbiv1lVuRGa0p4R2_bEYA9cwoTWf3UnOZcaAi7mNW-TKQRSxgudjX_VaaSibYdJUjIjTHVgUPHGLjbhi4uhawUd6xKt-xYUTPzhVhBORNtAxDfxk3yXgw-8MYicnwloxfuRLdDlDMwqEeNsS_rIW3jgjgwojr1RMZKDkFPni6b6aN_cxCRbwBOnhzQaMVDxnYnVwlxSlCoY4PjlIvY2bcaiiH2Dk4C3c1PjFIgRAjMShTumEwUv3HnwRR-dtDQyz0lxWL0NagMbxo3tiq92urAhPe52_KM7xPwY7zq0jpRIBhESJgU3JCl2zQwp0TgxC0PkWDuCPAjpQeBE2EovBSqW7gFnEymtFJkigs_WVOgtsDVHn7JL8FEYrZkS9VKzaka2LIyPgJ-TOUFTT8Sny1UA7RGZkh0W9orth1rK2DNtR2TxIu__RvPR7GDv8RY_Iwh-cWFlTXUSEl1eRkQrTezqPv_v8lULhBQ8_9Pa_0ZfTamMYWacwDzmIcLRfpA9KnPlg23gj1ZxzzNrCU6jTCT1eSTTHWE7dMAtmVwWyr3IFtyeW5EIj9ZsqVsUCr36Tx-XsU-mBuV7kLcqPy-yzqG-LnsfxRH2FUvFAIvbho4iuH_8sBlF1U5YmhdT87lFXCDs7wKbeOxWRaVUZRcloDoDQRTOtHBhuHk07X9cwrLTgXu1FNmGrfekferrlRADguTzt0kQjLQYONYBtwTWBEwYMi-i6gjrUKs_En3qi60iHDRQhmoCTPF9CjeeRosHz3JIhfQGYJjUd6QWT17PyoJYOYjgb8Ly0LSciI4S6u4z1aNs53y2Nlc0Hy3RqE4HADeM7eEXBM0G1kIT6SUgjohA2v8vjPT95QaEJwMjMTjbhhendaPWWBEu9Z4GUuwli1IUuYqCxfFyXS5zZhlG59xaBWpkyzs5Fj_jAYr0d2tsnwyOAJ2hZP3x0DSmtH8EdDCiKHMxZ_dDXe4tyy3i_652FxOoGyVrT5-EV1PnrGyqxatW5oeoQ55-52tuPrfbgnykg3gM6w-PAAAJuFkZmNYqVTjveWYGwgQl3xrr7wYHgtRk3jzUH-mQFbMbz12mBh8RbjI14ePp3XiDNhTqwO3VthU5qBshDqt0zjJtOlgTkcPkTIBO1jHU0i5MLKsbzlizd7UtVceYbL_lfj7LUTQKHRtoOVfMexxMr0dIvNJL-zHkjPSG4mMc8s4uDgBUpZvdBNl1ZSzkSDqFJYnrg-TUSADeHwcz27LZbXAuxbynH-L4Fb0N9RAZv55jsyPpAGfkLzNpQ1aPDH5_K9yBuJ4jgpS67kiha7s2QlyaS_lJzPgHjU5lRBOibxyeeysE4YvVTfwCzZWwrPKJy5-3y5gEQn2Muxg6pTFqIuCmUZRq8FokpJm8sVTcWv227cmGPi0z347JXy8Gwz9zER3VXflKYrVJwTSllDTWLVTLxR2UGkU7AjHqdDcJI17BKktbda9dNiUGJG_u55BcZKRvZdh3DTebkhG1bDpcbxOcQHP9hakeFwhnKTV_ZJQ58U0TfLotQw_rqOK68xMnC_-zf11A-4sgOQZjLvz6hVT_0dWThmgDmk--kBWzRycC-bucgTOYz1x58CpWAmMZpjxt5izkf_OWnFvcxr6xfjtMjLzW7jL5ocupSegP8xVY5CPmBlm7ORZttoF_dY-4qdqjE7AlRC8p1YvtHgtC9eGNp86iXx1pofU2SqwrPpX0PwIGFogInH0KA4VHglIx7tKyr3hV0wsQRFsjvrKKK6W6Nsz3SFoR_tr8YhdMswkXgpL_fYuTprdE-KHfE9EMwnwLxqYQe6ko8WpKRKCmrnEsUCpLyU_s3izaDiUHoAMh_QBxt8EVC7B2CCtC3naOllLRjMgXu7-vKHLlpc-seR3Igv-aU0omxRLe7Trz4mm1TcisGp02B_Mtee1XN7K3rxyXCXIw9K0tU9y0Dh8Q940FSADwDGIyZoKR4GNGtDhN48o-YSpFLOJGdDBP48I-UMnSDWpjlm40?></g></svg> |