Files
the-biergarten-app/docs/pipeline/diagrams/planned/output/class.svg
2026-06-21 11:59:55 -04:00

1 line
234 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="3420px" preserveAspectRatio="none" style="width:19902px;height:3420px;background:#FCFCF7;" version="1.1" viewBox="0 0 19902 3420" width="19902px" zoomAndPan="magnify"><?plantuml 1.2026.3?><defs/><g><rect fill="#FCFCF7" height="3420" style="stroke:none;stroke-width:1;" width="19902" 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="9634.795" y="39.13">Biergarten Data Pipeline &#8212; 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="1843.02" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:1.5;" width="6186" x="7" y="1084.08"/><text fill="#14180C" font-family="'DM Sans'" font-size="25" font-weight="700" lengthAdjust="spacing" textLength="194.3639" x="3002.8181" y="1110.88">Domain: Models</text></g><!--cluster Domain: Application Configuration--><g class="cluster" data-qualified-name="Domain. Application Configuration" data-source-line="193" id="ent0033"><rect fill="#F1F3EA" height="1364.32" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:1.5;" width="1001" x="7507" y="1993.55"/><text fill="#14180C" font-family="'DM Sans'" font-size="25" font-weight="700" lengthAdjust="spacing" textLength="422.3181" x="7796.3409" y="2020.35">Domain: Application Configuration</text></g><!--cluster Domain: Policy--><g class="cluster" data-qualified-name="Domain. Policy" data-source-line="223" id="ent0041"><rect fill="#F1F3EA" height="751.62" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:1.5;" width="7127" x="10760" y="2655.08"/><text fill="#14180C" font-family="'DM Sans'" font-size="25" font-weight="700" lengthAdjust="spacing" textLength="179.9894" x="14233.5053" y="2681.88">Domain: Policy</text></g><!--cluster Infrastructure: Logging--><g class="cluster" data-qualified-name="Infrastructure. Logging" data-source-line="301" id="ent0055"><rect fill="#F1F3EA" height="2630.47" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:1.5;" width="1143" x="18745" y="361.73"/><text fill="#14180C" font-family="'DM Sans'" font-size="25" font-weight="700" lengthAdjust="spacing" textLength="281.1926" x="19175.9037" y="388.53">Infrastructure: Logging</text></g><!--cluster Infrastructure: Pipeline Channel--><g class="cluster" data-qualified-name="Infrastructure. Pipeline Channel" data-source-line="349" id="ent0067"><rect fill="#F1F3EA" height="418.5" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:1.5;" width="492" x="6217" y="2606.25"/><text fill="#14180C" font-family="'DM Sans'" font-size="25" font-weight="700" lengthAdjust="spacing" textLength="389.5849" x="6268.2076" y="2633.05">Infrastructure: Pipeline Channel</text></g><!--cluster Infrastructure: Data Preloading--><g class="cluster" data-qualified-name="Infrastructure. Data Preloading" data-source-line="365" id="ent0069"><rect fill="#F1F3EA" height="1108.13" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:1.5;" width="986" x="11023" y="1124.9"/><text fill="#14180C" font-family="'DM Sans'" font-size="25" font-weight="700" lengthAdjust="spacing" textLength="379.4096" x="11326.2952" y="1151.7">Infrastructure: Data Preloading</text></g><!--cluster Infrastructure: Enrichment--><g class="cluster" data-qualified-name="Infrastructure. Enrichment" data-source-line="383" id="ent0072"><rect fill="#F1F3EA" height="2135.32" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:1.5;" width="772" x="9964" y="1173.73"/><text fill="#14180C" font-family="'DM Sans'" font-size="25" font-weight="700" lengthAdjust="spacing" textLength="327.4847" x="10186.2577" y="1200.53">Infrastructure: Enrichment</text></g><!--cluster Infrastructure: Prompting--><g class="cluster" data-qualified-name="Infrastructure. Prompting" data-source-line="408" id="ent0077"><rect fill="#F1F3EA" height="621.42" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:1.5;" width="750" x="6733" y="2720.18"/><text fill="#14180C" font-family="'DM Sans'" font-size="25" font-weight="700" lengthAdjust="spacing" textLength="313.7122" x="6951.1439" y="2746.98">Infrastructure: Prompting</text></g><!--cluster Infrastructure: Data Generation--><g class="cluster" data-qualified-name="Infrastructure. Data Generation" data-source-line="424" id="ent0081"><rect fill="#F1F3EA" height="2346.9" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:1.5;" width="1408" x="8532" y="962.15"/><text fill="#14180C" font-family="'DM Sans'" font-size="25" font-weight="700" lengthAdjust="spacing" textLength="386.8423" x="9042.5789" y="988.95">Infrastructure: Data Generation</text></g><!--cluster Infrastructure: Data Export--><g class="cluster" data-qualified-name="Infrastructure. Data Export" data-source-line="471" id="ent0087"><rect fill="#F1F3EA" height="2216.7" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:1.5;" width="810" x="17911" y="1076.08"/><text fill="#14180C" font-family="'DM Sans'" font-size="25" font-weight="700" lengthAdjust="spacing" textLength="330.2099" x="18150.895" y="1102.88">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="2651.52" y="1946.9"/><ellipse cx="2845.5798" cy="1968.175" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M2849.2756,1976.9001 Q2848.4211,1977.3396 2847.4812,1977.5593 Q2846.5412,1977.779 2845.5036,1977.779 Q2841.8171,1977.779 2839.8762,1975.3498 Q2837.9353,1972.9206 2837.9353,1968.3308 Q2837.9353,1963.7287 2839.8762,1961.2995 Q2841.8171,1958.8703 2845.5036,1958.8703 Q2846.5412,1958.8703 2847.4934,1959.09 Q2848.4455,1959.3098 2849.2756,1959.7492 L2849.2756,1963.7531 Q2848.3479,1962.8986 2847.4751,1962.5019 Q2846.6022,1962.1052 2845.6745,1962.1052 Q2843.697,1962.1052 2842.6899,1963.6738 Q2841.6828,1965.2424 2841.6828,1968.3308 Q2841.6828,1971.4069 2842.6899,1972.9755 Q2843.697,1974.5441 2845.6745,1974.5441 Q2846.6022,1974.5441 2847.4751,1974.1474 Q2848.3479,1973.7507 2849.2756,1972.8962 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="100.8439" x="2870.5798" y="1976.7">Location</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="2652.52" x2="3149.4835" y1="1989.45" y2="1989.45"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="2662.52" cy="2011.225" 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="2674.52" y="2018.25">city : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="2662.52" cy="2043.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="310.5132" x="2674.52" y="2050.8">state_province : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="2662.52" cy="2076.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="250.5943" x="2674.52" y="2083.35">iso3166_2 : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="2662.52" cy="2108.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="223.0569" x="2674.52" y="2115.9">country : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="2662.52" cy="2141.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="243.9881" x="2674.52" y="2148.45">iso3166_1 : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="2662.52" cy="2173.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="469.9635" x="2674.52" y="2181">local_languages : std::vector&lt;std::string&gt;</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="2662.52" cy="2206.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="187.5939" x="2674.52" y="2213.55">latitude : double</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="2662.52" cy="2239.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="207.3065" x="2674.52" y="2246.1">longitude : double</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="2652.52" x2="3149.4835" y1="2257.85" y2="2257.85"/></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="1742.01" y="2028.28"/><ellipse cx="1829.9287" cy="2049.555" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M1833.6245,2058.2801 Q1832.77,2058.7196 1831.83,2058.9393 Q1830.8901,2059.159 1829.8525,2059.159 Q1826.166,2059.159 1824.2251,2056.7298 Q1822.2841,2054.3006 1822.2841,2049.7108 Q1822.2841,2045.1087 1824.2251,2042.6795 Q1826.166,2040.2503 1829.8525,2040.2503 Q1830.8901,2040.2503 1831.8423,2040.47 Q1832.7944,2040.6898 1833.6245,2041.1292 L1833.6245,2045.1331 Q1832.6967,2044.2786 1831.8239,2043.8819 Q1830.9511,2043.4852 1830.0234,2043.4852 Q1828.0459,2043.4852 1827.0388,2045.0538 Q1826.0317,2046.6224 1826.0317,2049.7108 Q1826.0317,2052.7869 1827.0388,2054.3555 Q1828.0459,2055.9241 1830.0234,2055.9241 Q1830.9511,2055.9241 1831.8239,2055.5274 Q1832.6967,2055.1307 1833.6245,2054.2762 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="194.144" x="1854.9287" y="2058.08">LocationContext</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="1743.01" x2="2120.9914" y1="2070.83" y2="2070.83"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1753.01" cy="2092.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="178.5193" x="1765.01" y="2099.63">text : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1753.01" cy="2125.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="350.9814" x="1765.01" y="2132.18">completeness : Completeness</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1753.01" cy="2157.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="224.4503" x="1765.01" y="2164.73">char_count : size_t</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="1743.01" x2="2120.9914" y1="2176.48" y2="2176.48"/></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="1828.93" y="2754.9"/><ellipse cx="1846.93" cy="2776.175" fill="#EB937F" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M1852.8333,2785.675 L1841.4808,2785.675 L1841.4808,2767.4499 L1852.8333,2767.4499 L1852.8333,2770.6237 L1845.0819,2770.6237 L1845.0819,2774.5544 L1852.1009,2774.5544 L1852.1009,2777.7282 L1845.0819,2777.7282 L1845.0819,2782.5012 L1852.8333,2782.5012 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="168.1375" x="1863.93" y="2784.7">Completeness</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="1829.93" x2="2034.0675" y1="2797.45" y2="2797.45"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="38.8626" x="1834.93" y="2826.25">Full</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="72.319" x="1834.93" y="2858.8">Partial</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="83.1626" x="1834.93" y="2891.35">Absent</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="1829.93" x2="2034.0675" y1="2903.1" y2="2903.1"/></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="1766.42" y="1241"/><ellipse cx="1852.067" cy="1262.275" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M1855.7628,1271.0001 Q1854.9083,1271.4396 1853.9684,1271.6593 Q1853.0284,1271.879 1851.9908,1271.879 Q1848.3043,1271.879 1846.3634,1269.4498 Q1844.4225,1267.0206 1844.4225,1262.4308 Q1844.4225,1257.8287 1846.3634,1255.3995 Q1848.3043,1252.9703 1851.9908,1252.9703 Q1853.0284,1252.9703 1853.9806,1253.19 Q1854.9327,1253.4098 1855.7628,1253.8492 L1855.7628,1257.8531 Q1854.8351,1256.9986 1853.9623,1256.6019 Q1853.0895,1256.2052 1852.1617,1256.2052 Q1850.1842,1256.2052 1849.1771,1257.7738 Q1848.17,1259.3424 1848.17,1262.4308 Q1848.17,1265.5069 1849.1771,1267.0755 Q1850.1842,1268.6441 1852.1617,1268.6441 Q1853.0895,1268.6441 1853.9623,1268.2474 Q1854.8351,1267.8507 1855.7628,1266.9962 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="149.8564" x="1877.067" y="1270.8">EnrichedCity</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="1767.42" x2="2096.5705" y1="1283.55" y2="1283.55"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1777.42" cy="1305.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="1789.42" y="1312.35">location : Location</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="1777.42" cy="1337.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="302.1505" x="1789.42" y="1344.9">context : LocationContext</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="1767.42" x2="2096.5705" y1="1356.65" y2="1356.65"/></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="3662.05" y="1979.45"/><ellipse cx="3748.6408" cy="2000.725" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M3752.3366,2009.4501 Q3751.4822,2009.8896 3750.5422,2010.1093 Q3749.6023,2010.329 3748.5647,2010.329 Q3744.8781,2010.329 3742.9372,2007.8998 Q3740.9963,2005.4706 3740.9963,2000.8808 Q3740.9963,1996.2787 3742.9372,1993.8495 Q3744.8781,1991.4203 3748.5647,1991.4203 Q3749.6023,1991.4203 3750.5544,1991.64 Q3751.5066,1991.8598 3752.3366,1992.2992 L3752.3366,1996.3031 Q3751.4089,1995.4486 3750.5361,1995.0519 Q3749.6633,1994.6552 3748.7356,1994.6552 Q3746.758,1994.6552 3745.751,1996.2238 Q3744.7439,1997.7924 3744.7439,2000.8808 Q3744.7439,2003.9569 3745.751,2005.5255 Q3746.758,2007.0941 3748.7356,2007.0941 Q3749.6633,2007.0941 3750.5361,2006.6974 Q3751.4089,2006.3007 3752.3366,2005.4462 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="110.7127" x="3773.6408" y="2009.25">BeerStyle</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="3663.05" x2="3954.9443" y1="2022" y2="2022"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="3673.05" cy="2043.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="196.7442" x="3685.05" y="2050.8">name : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="3673.05" cy="2076.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="264.8943" x="3685.05" y="2083.35">description : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="3673.05" cy="2108.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="172.194" x="3685.05" y="2115.9">min_abv : float</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="3673.05" cy="2141.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="177.8814" x="3685.05" y="2148.45">max_abv : float</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="3673.05" cy="2173.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="143.55" x="3685.05" y="2181">min_ibu : int</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="3673.05" cy="2206.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="149.2375" x="3685.05" y="2213.55">max_ibu : int</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="3663.05" x2="3954.9443" y1="2225.3" y2="2225.3"/></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="3262.86" y="2012"/><ellipse cx="3356.8695" cy="2033.275" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M3360.5653,2042.0001 Q3359.7108,2042.4396 3358.7709,2042.6593 Q3357.8309,2042.879 3356.7933,2042.879 Q3353.1068,2042.879 3351.1659,2040.4498 Q3349.225,2038.0206 3349.225,2033.4308 Q3349.225,2028.8287 3351.1659,2026.3995 Q3353.1068,2023.9703 3356.7933,2023.9703 Q3357.8309,2023.9703 3358.7831,2024.19 Q3359.7352,2024.4098 3360.5653,2024.8492 L3360.5653,2028.8531 Q3359.6376,2027.9986 3358.7648,2027.6019 Q3357.892,2027.2052 3356.9642,2027.2052 Q3354.9867,2027.2052 3353.9796,2028.7738 Q3352.9725,2030.3424 3352.9725,2033.4308 Q3352.9725,2036.5069 3353.9796,2038.0755 Q3354.9867,2039.6441 3356.9642,2039.6441 Q3357.892,2039.6441 3358.7648,2039.2474 Q3359.6376,2038.8507 3360.5653,2037.9962 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="166.2629" x="3381.8695" y="2041.8">BreweryResult</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="3263.86" x2="3626.1419" y1="2054.55" y2="2054.55"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="3273.86" cy="2076.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="241.7941" x="3285.86" y="2083.35">name_en : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="3273.86" cy="2108.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="309.9443" x="3285.86" y="2115.9">description_en : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="3273.86" cy="2141.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="267.1317" x="3285.86" y="2148.45">name_local : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="3273.86" cy="2173.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="335.2819" x="3285.86" y="2181">description_local : std::string</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="3263.86" x2="3626.1419" y1="2192.75" y2="2192.75"/></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="3990.86" y="1963.18"/><ellipse cx="4105.9758" cy="1984.455" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M4109.6716,1993.1801 Q4108.8171,1993.6196 4107.8772,1993.8393 Q4106.9373,1994.059 4105.8997,1994.059 Q4102.2131,1994.059 4100.2722,1991.6298 Q4098.3313,1989.2006 4098.3313,1984.6108 Q4098.3313,1980.0087 4100.2722,1977.5795 Q4102.2131,1975.1503 4105.8997,1975.1503 Q4106.9373,1975.1503 4107.8894,1975.37 Q4108.8416,1975.5898 4109.6716,1976.0292 L4109.6716,1980.0331 Q4108.7439,1979.1786 4107.8711,1978.7819 Q4106.9983,1978.3852 4106.0706,1978.3852 Q4104.093,1978.3852 4103.0859,1979.9538 Q4102.0789,1981.5224 4102.0789,1984.6108 Q4102.0789,1987.6869 4103.0859,1989.2555 Q4104.093,1990.8241 4106.0706,1990.8241 Q4106.9983,1990.8241 4107.8711,1990.4274 Q4108.7439,1990.0307 4109.6716,1989.1762 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="124.0502" x="4130.9758" y="1992.98">BeerResult</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="3991.86" x2="4354.1419" y1="2005.73" y2="2005.73"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="4001.86" cy="2027.505" 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="4013.86" y="2034.53">name_en : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="4001.86" cy="2060.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="309.9443" x="4013.86" y="2067.08">description_en : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="4001.86" cy="2092.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="267.1317" x="4013.86" y="2099.63">name_local : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="4001.86" cy="2125.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="335.2819" x="4013.86" y="2132.18">description_local : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="4001.86" cy="2157.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="188.3568" x="4013.86" y="2164.73">style : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="4001.86" cy="2190.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="113.0878" x="4013.86" y="2197.28">abv : float</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="4001.86" cy="2222.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="84.4439" x="4013.86" y="2229.83">ibu : int</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="3991.86" x2="4354.1419" y1="2241.58" y2="2241.58"/></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="2188.83" y="1979.45"/><ellipse cx="2266.1395" cy="2000.725" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M2269.8353,2009.4501 Q2268.9808,2009.8896 2268.0409,2010.1093 Q2267.101,2010.329 2266.0634,2010.329 Q2262.3768,2010.329 2260.4359,2007.8998 Q2258.495,2005.4706 2258.495,2000.8808 Q2258.495,1996.2787 2260.4359,1993.8495 Q2262.3768,1991.4203 2266.0634,1991.4203 Q2267.101,1991.4203 2268.0531,1991.64 Q2269.0053,1991.8598 2269.8353,1992.2992 L2269.8353,1996.3031 Q2268.9076,1995.4486 2268.0348,1995.0519 Q2267.162,1994.6552 2266.2343,1994.6552 Q2264.2567,1994.6552 2263.2496,1996.2238 Q2262.2426,1997.7924 2262.2426,2000.8808 Q2262.2426,2003.9569 2263.2496,2005.5255 Q2264.2567,2007.0941 2266.2343,2007.0941 Q2267.162,2007.0941 2268.0348,2006.6974 Q2268.9076,2006.3007 2269.8353,2005.4462 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="123.7127" x="2291.1395" y="2009.25">UserResult</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="2189.83" x2="2476.1618" y1="2022" y2="2022"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="2199.83" cy="2043.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="259.3318" x="2211.83" y="2050.8">first_name : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="2199.83" cy="2076.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="254.7817" x="2211.83" y="2083.35">last_name : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="2199.83" cy="2108.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="213.9318" x="2211.83" y="2115.9">gender : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="2199.83" cy="2141.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="247.0818" x="2211.83" y="2148.45">username : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="2199.83" cy="2173.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="168.8004" x="2211.83" y="2181">bio : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="2199.83" cy="2206.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="251.0506" x="2211.83" y="2213.55">activity_weight : float</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="2189.83" x2="2476.1618" y1="2225.3" y2="2225.3"/></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="235.83" y="2028.28"/><ellipse cx="341.3209" cy="2049.555" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M345.0167,2058.2801 Q344.1622,2058.7196 343.2223,2058.9393 Q342.2823,2059.159 341.2447,2059.159 Q337.5582,2059.159 335.6173,2056.7298 Q333.6764,2054.3006 333.6764,2049.7108 Q333.6764,2045.1087 335.6173,2042.6795 Q337.5582,2040.2503 341.2447,2040.2503 Q342.2823,2040.2503 343.2345,2040.47 Q344.1866,2040.6898 345.0167,2041.1292 L345.0167,2045.1331 Q344.089,2044.2786 343.2162,2043.8819 Q342.3434,2043.4852 341.4156,2043.4852 Q339.4381,2043.4852 338.431,2045.0538 Q337.4239,2046.6224 337.4239,2049.7108 Q337.4239,2052.7869 338.431,2054.3555 Q339.4381,2055.9241 341.4156,2055.9241 Q342.3434,2055.9241 343.2162,2055.5274 Q344.089,2055.1307 345.0167,2054.2762 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="67.35" x="366.3209" y="2058.08">Name</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="236.83" x2="523.1618" y1="2070.83" y2="2070.83"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="246.83" cy="2092.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="259.3318" x="258.83" y="2099.63">first_name : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="246.83" cy="2125.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="254.7817" x="258.83" y="2132.18">last_name : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="246.83" cy="2157.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="258.83" y="2164.73">gender : std::string</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="236.83" x2="523.1618" y1="2176.48" y2="2176.48"/></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="559.53" y="2044.55"/><ellipse cx="589.8742" cy="2065.825" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M593.57,2074.5501 Q592.7155,2074.9896 591.7756,2075.2093 Q590.8356,2075.429 589.798,2075.429 Q586.1115,2075.429 584.1706,2072.9998 Q582.2297,2070.5706 582.2297,2065.9808 Q582.2297,2061.3787 584.1706,2058.9495 Q586.1115,2056.5203 589.798,2056.5203 Q590.8356,2056.5203 591.7878,2056.74 Q592.7399,2056.9598 593.57,2057.3992 L593.57,2061.4031 Q592.6423,2060.5486 591.7695,2060.1519 Q590.8967,2059.7552 589.9689,2059.7552 Q587.9914,2059.7552 586.9843,2061.3238 Q585.9772,2062.8924 585.9772,2065.9808 Q585.9772,2069.0569 586.9843,2070.6255 Q587.9914,2072.1941 589.9689,2072.1941 Q590.8967,2072.1941 591.7695,2071.7974 Q592.6423,2071.4007 593.57,2070.5462 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="177.5003" x="609.6173" y="2074.35">ForenameEntry</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="560.53" x2="801.4618" y1="2087.1" y2="2087.1"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="570.53" cy="2108.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="196.7442" x="582.53" y="2115.9">name : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="570.53" cy="2141.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="213.9318" x="582.53" y="2148.45">gender : std::string</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="560.53" x2="801.4618" y1="2160.2" y2="2160.2"/></g><!--class NamesByCountry--><g class="entity" data-qualified-name="Domain. Models.NamesByCountry" data-source-line="88" id="ent0013"><rect fill="#EBECE3" height="188.75" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="1060.1702" x="22.91" y="1208.45"/><ellipse cx="446.3637" cy="1229.725" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M450.0595,1238.4501 Q449.205,1238.8896 448.2651,1239.1093 Q447.3252,1239.329 446.2876,1239.329 Q442.601,1239.329 440.6601,1236.8998 Q438.7192,1234.4706 438.7192,1229.8808 Q438.7192,1225.2787 440.6601,1222.8495 Q442.601,1220.4203 446.2876,1220.4203 Q447.3252,1220.4203 448.2773,1220.64 Q449.2295,1220.8598 450.0595,1221.2992 L450.0595,1225.3031 Q449.1318,1224.4486 448.259,1224.0519 Q447.3862,1223.6552 446.4585,1223.6552 Q444.4809,1223.6552 443.4738,1225.2238 Q442.4668,1226.7924 442.4668,1229.8808 Q442.4668,1232.9569 443.4738,1234.5255 Q444.4809,1236.0941 446.4585,1236.0941 Q447.3862,1236.0941 448.259,1235.6974 Q449.1318,1235.3007 450.0595,1234.4462 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="203.2627" x="471.3637" y="1238.25">NamesByCountry</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="23.91" x2="1082.0802" y1="1251" y2="1251"/><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="30.91" y="1269.775"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="1031.1702" x="45.91" y="1279.8">forenames_by_country_ : std::unordered_map&lt;std::string, std::vector&lt;ForenameEntry&gt;&gt;</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="30.91" y="1302.325"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="956.9952" x="45.91" y="1312.35">surnames_by_country_ : std::unordered_map&lt;std::string, std::vector&lt;std::string&gt;&gt;</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="23.91" x2="1082.0802" y1="1324.1" y2="1324.1"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="33.91" cy="1362.15" 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="501.8259" x="45.91" y="1352.9">SampleName(iso3166_1 : const std::string&amp;,</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="486.9758" x="59.21" y="1385.45">rng : std::mt19937&amp;) : std::optional&lt;Name&gt;</text></g><g class="entity" data-qualified-name="Domain. Models.GMN14" data-source-line="95" id="ent0015"><path d="M1118.09,1135.08 L1118.09,1298.83 L1083.52,1302.83 L1118.09,1306.83 L1118.09,1470.58 A0,0 0 0 0 1118.09,1470.58 L1731.9157,1470.58 A0,0 0 0 0 1731.9157,1470.58 L1731.9157,1145.08 L1721.9157,1135.08 L1118.09,1135.08 A0,0 0 0 0 1118.09,1135.08" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><path d="M1721.9157,1135.08 L1721.9157,1145.08 L1731.9157,1145.08 L1721.9157,1135.08" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="433.0255" x="1124.09" y="1164.88">Backed by two source-shaped maps,</text><text fill="#14180C" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="402.7254" x="1124.09" y="1197.43">keyed by ISO 3166-1 country code,</text><text fill="#14180C" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="592.8257" x="1124.09" y="1229.98">sourced from popular-names-by-country-dataset</text><text fill="#14180C" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="555.0311" x="1124.09" y="1262.53">(CC0) -- see ETHICS-AND-KNOWN-ISSUES.md.</text><text fill="#14180C" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="505.6133" x="1124.09" y="1295.08">Gender is preserved per forename so it can</text><text fill="#14180C" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="550.5884" x="1124.09" y="1327.63">be threaded through to persona/bio generation</text><text fill="#14180C" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="526.9886" x="1124.09" y="1360.18">later; surnames carry no gender in the source</text><text fill="#14180C" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="508.6509" x="1124.09" y="1392.73">data. Pairing happens at sample time, not at</text><text fill="#14180C" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="533.6326" x="1124.09" y="1425.28">fixture-authoring time, so no information from</text><text fill="#14180C" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="474.0822" x="1124.09" y="1457.83">the source dataset is discarded up front.</text></g><!--class CheckinResult--><g class="entity" data-qualified-name="Domain. Models.CheckinResult" data-source-line="110" id="ent0019"><rect fill="#EBECE3" height="123.65" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="337.7003" x="4775.15" y="2044.55"/><ellipse cx="4856.4782" cy="2065.825" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M4860.174,2074.5501 Q4859.3195,2074.9896 4858.3796,2075.2093 Q4857.4396,2075.429 4856.4021,2075.429 Q4852.7155,2075.429 4850.7746,2072.9998 Q4848.8337,2070.5706 4848.8337,2065.9808 Q4848.8337,2061.3787 4850.7746,2058.9495 Q4852.7155,2056.5203 4856.4021,2056.5203 Q4857.4396,2056.5203 4858.3918,2056.74 Q4859.3439,2056.9598 4860.174,2057.3992 L4860.174,2061.4031 Q4859.2463,2060.5486 4858.3735,2060.1519 Q4857.5007,2059.7552 4856.573,2059.7552 Q4854.5954,2059.7552 4853.5883,2061.3238 Q4852.5813,2062.8924 4852.5813,2065.9808 Q4852.5813,2069.0569 4853.5883,2070.6255 Q4854.5954,2072.1941 4856.573,2072.1941 Q4857.5007,2072.1941 4858.3735,2071.7974 Q4859.2463,2071.4007 4860.174,2070.5462 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="165.0439" x="4881.4782" y="2074.35">CheckinResult</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="4776.15" x2="5111.8503" y1="2087.1" y2="2087.1"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="4786.15" cy="2108.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="308.7003" x="4798.15" y="2115.9">checked_in_at : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="4786.15" cy="2141.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="185.488" x="4798.15" y="2148.45">note : std::string</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="4776.15" x2="5111.8503" y1="2160.2" y2="2160.2"/></g><!--class RatingResult--><g class="entity" data-qualified-name="Domain. Models.RatingResult" data-source-line="115" id="ent0020"><rect fill="#EBECE3" height="123.65" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="214.488" x="5356.76" y="2044.55"/><ellipse cx="5389.4498" cy="2065.825" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M5393.1456,2074.5501 Q5392.2911,2074.9896 5391.3512,2075.2093 Q5390.4112,2075.429 5389.3736,2075.429 Q5385.6871,2075.429 5383.7462,2072.9998 Q5381.8053,2070.5706 5381.8053,2065.9808 Q5381.8053,2061.3787 5383.7462,2058.9495 Q5385.6871,2056.5203 5389.3736,2056.5203 Q5390.4112,2056.5203 5391.3634,2056.74 Q5392.3155,2056.9598 5393.1456,2057.3992 L5393.1456,2061.4031 Q5392.2179,2060.5486 5391.3451,2060.1519 Q5390.4723,2059.7552 5389.5445,2059.7552 Q5387.567,2059.7552 5386.5599,2061.3238 Q5385.5528,2062.8924 5385.5528,2065.9808 Q5385.5528,2069.0569 5386.5599,2070.6255 Q5387.567,2072.1941 5389.5445,2072.1941 Q5390.4723,2072.1941 5391.3451,2071.7974 Q5392.2179,2071.4007 5393.1456,2070.5462 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="143.8441" x="5409.7142" y="2074.35">RatingResult</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="5357.76" x2="5570.248" y1="2087.1" y2="2087.1"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="5367.76" cy="2108.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="135.7816" x="5379.76" y="2115.9">score : float</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="5367.76" cy="2141.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="185.488" x="5379.76" y="2148.45">note : std::string</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="5357.76" x2="5570.248" y1="2160.2" y2="2160.2"/></g><!--class GenerationMetadata--><g class="entity" data-qualified-name="Domain. Models.GenerationMetadata" data-source-line="120" id="ent0021"><rect fill="#EBECE3" height="188.75" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="349.3068" x="4390.35" y="2012"/><ellipse cx="4440.0638" cy="2033.275" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M4443.7596,2042.0001 Q4442.9052,2042.4396 4441.9652,2042.6593 Q4441.0253,2042.879 4439.9877,2042.879 Q4436.3011,2042.879 4434.3602,2040.4498 Q4432.4193,2038.0206 4432.4193,2033.4308 Q4432.4193,2028.8287 4434.3602,2026.3995 Q4436.3011,2023.9703 4439.9877,2023.9703 Q4441.0253,2023.9703 4441.9774,2024.19 Q4442.9296,2024.4098 4443.7596,2024.8492 L4443.7596,2028.8531 Q4442.8319,2027.9986 4441.9591,2027.6019 Q4441.0863,2027.2052 4440.1586,2027.2052 Q4438.181,2027.2052 4437.1739,2028.7738 Q4436.1669,2030.3424 4436.1669,2033.4308 Q4436.1669,2036.5069 4437.1739,2038.0755 Q4438.181,2039.6441 4440.1586,2039.6441 Q4441.0863,2039.6441 4441.9591,2039.2474 Q4442.8319,2038.8507 4443.7596,2037.9962 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="240.8316" x="4464.1114" y="2041.8">GenerationMetadata</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="4391.35" x2="4738.6568" y1="2054.55" y2="2054.55"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="4401.35" cy="2076.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="282.6502" x="4413.35" y="2083.35">generation_id : uint64_t</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="4401.35" cy="2108.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="320.3068" x="4413.35" y="2115.9">generated_time : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="4401.35" cy="2141.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="279.8627" x="4413.35" y="2148.45">context_provided : bool</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="4401.35" cy="2173.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="317.2507" x="4413.35" y="2181">generated_with : std::string</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="4391.35" x2="4738.6568" y1="2192.75" y2="2192.75"/></g><!--class GeneratedBrewery--><g class="entity" data-qualified-name="Domain. Models.GeneratedBrewery" data-source-line="127" id="ent0022"><rect fill="#EBECE3" height="221.3" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="690.3818" x="3229.81" y="1192.18"/><ellipse cx="3460.4132" cy="1213.455" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M3464.109,1222.1801 Q3463.2545,1222.6196 3462.3146,1222.8393 Q3461.3746,1223.059 3460.337,1223.059 Q3456.6505,1223.059 3454.7096,1220.6298 Q3452.7687,1218.2006 3452.7687,1213.6108 Q3452.7687,1209.0087 3454.7096,1206.5795 Q3456.6505,1204.1503 3460.337,1204.1503 Q3461.3746,1204.1503 3462.3268,1204.37 Q3463.2789,1204.5898 3464.109,1205.0292 L3464.109,1209.0331 Q3463.1813,1208.1786 3462.3085,1207.7819 Q3461.4356,1207.3852 3460.5079,1207.3852 Q3458.5304,1207.3852 3457.5233,1208.9538 Q3456.5162,1210.5224 3456.5162,1213.6108 Q3456.5162,1216.6869 3457.5233,1218.2555 Q3458.5304,1219.8241 3460.5079,1219.8241 Q3461.4356,1219.8241 3462.3085,1219.4274 Q3463.1813,1219.0307 3464.109,1218.1762 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="219.1754" x="3485.4132" y="1221.98">GeneratedBrewery</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="3230.81" x2="3919.1918" y1="1234.73" y2="1234.73"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="3240.81" cy="1256.505" 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="3252.81" y="1263.53">brewery_id : uint64_t</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="3240.81" cy="1289.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="212.4442" x="3252.81" y="1296.08">location : Location</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="3240.81" cy="1321.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="280.1382" x="3252.81" y="1328.63">brewery : BreweryResult</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="3240.81" cy="1354.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="661.3818" x="3252.81" y="1361.18">context_completeness : LocationContext::Completeness</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="3240.81" cy="1386.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="371.738" x="3252.81" y="1393.73">metadata : GenerationMetadata</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="3230.81" x2="3919.1918" y1="1405.48" y2="1405.48"/></g><!--class GeneratedBeer--><g class="entity" data-qualified-name="Domain. Models.GeneratedBeer" data-source-line="135" id="ent0023"><rect fill="#EBECE3" height="253.85" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="400.738" x="3955.63" y="1175.9"/><ellipse cx="4062.5176" cy="1197.175" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M4066.2134,1205.9001 Q4065.3589,1206.3396 4064.419,1206.5593 Q4063.4791,1206.779 4062.4415,1206.779 Q4058.7549,1206.779 4056.814,1204.3498 Q4054.8731,1201.9206 4054.8731,1197.3308 Q4054.8731,1192.7287 4056.814,1190.2995 Q4058.7549,1187.8703 4062.4415,1187.8703 Q4063.4791,1187.8703 4064.4312,1188.09 Q4065.3834,1188.3098 4066.2134,1188.7492 L4066.2134,1192.7531 Q4065.2857,1191.8986 4064.4129,1191.5019 Q4063.5401,1191.1052 4062.6124,1191.1052 Q4060.6348,1191.1052 4059.6277,1192.6738 Q4058.6207,1194.2424 4058.6207,1197.3308 Q4058.6207,1200.4069 4059.6277,1201.9755 Q4060.6348,1203.5441 4062.6124,1203.5441 Q4063.5401,1203.5441 4064.4129,1203.1474 Q4065.2857,1202.7507 4066.2134,1201.8962 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="176.9627" x="4087.5176" y="1205.7">GeneratedBeer</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="3956.63" x2="4355.368" y1="1218.45" y2="1218.45"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="3966.63" cy="1240.225" 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="3978.63" y="1247.25">beer_id : uint64_t</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="3966.63" cy="1272.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="253.6877" x="3978.63" y="1279.8">brewery_id : uint64_t</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="3966.63" cy="1305.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="3978.63" y="1312.35">location : Location</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="3966.63" cy="1337.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="185.0941" x="3978.63" y="1344.9">style : BeerStyle</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="3966.63" cy="1370.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="195.7128" x="3978.63" y="1377.45">beer : BeerResult</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="3966.63" cy="1402.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="3978.63" y="1410">metadata : GenerationMetadata</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="3956.63" x2="4355.368" y1="1421.75" y2="1421.75"/></g><!--class GeneratedUser--><g class="entity" data-qualified-name="Domain. Models.GeneratedUser" data-source-line="144" id="ent0024"><rect fill="#EBECE3" height="286.4" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="400.738" x="2132.63" y="1159.63"/><ellipse cx="2239.6864" cy="1180.905" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M2243.3822,1189.6301 Q2242.5277,1190.0696 2241.5877,1190.2893 Q2240.6478,1190.509 2239.6102,1190.509 Q2235.9237,1190.509 2233.9828,1188.0798 Q2232.0418,1185.6506 2232.0418,1181.0608 Q2232.0418,1176.4587 2233.9828,1174.0295 Q2235.9237,1171.6003 2239.6102,1171.6003 Q2240.6478,1171.6003 2241.5999,1171.82 Q2242.5521,1172.0398 2243.3822,1172.4792 L2243.3822,1176.4831 Q2242.4544,1175.6286 2241.5816,1175.2319 Q2240.7088,1174.8352 2239.7811,1174.8352 Q2237.8036,1174.8352 2236.7965,1176.4038 Q2235.7894,1177.9724 2235.7894,1181.0608 Q2235.7894,1184.1369 2236.7965,1185.7055 Q2237.8036,1187.2741 2239.7811,1187.2741 Q2240.7088,1187.2741 2241.5816,1186.8774 Q2242.4544,1186.4807 2243.3822,1185.6262 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="176.6252" x="2264.6864" y="1189.43">GeneratedUser</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="2133.63" x2="2532.368" y1="1202.18" y2="1202.18"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="2143.63" cy="1223.955" 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="2155.63" y="1230.98">user_id : uint64_t</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="2143.63" cy="1256.505" 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="2155.63" y="1263.53">location : Location</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="2143.63" cy="1289.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="192.3941" x="2155.63" y="1296.08">user : UserResult</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="2143.63" cy="1321.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="193.9692" x="2155.63" y="1328.63">email : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="2143.63" cy="1354.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="296.9943" x="2155.63" y="1361.18">date_of_birth : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="2143.63" cy="1386.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="245.5132" x="2155.63" y="1393.73">password : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="2143.63" cy="1419.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="371.738" x="2155.63" y="1426.28">metadata : GenerationMetadata</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="2133.63" x2="2532.368" y1="1438.03" y2="1438.03"/></g><g class="entity" data-qualified-name="Domain. Models.GMN25" data-source-line="155" id="ent0026"><path d="M2568.77,1216.45 L2568.77,1298.83 L2533.78,1302.83 L2568.77,1306.83 L2568.77,1389.2 A0,0 0 0 0 2568.77,1389.2 L3195.2334,1389.2 A0,0 0 0 0 3195.2334,1389.2 L3195.2334,1226.45 L3185.2334,1216.45 L2568.77,1216.45 A0,0 0 0 0 2568.77,1216.45" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><path d="M3185.2334,1216.45 L3185.2334,1226.45 L3195.2334,1226.45 L3185.2334,1216.45" 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="2574.77" y="1246.25">email, date_of_birth, and password are</text><text fill="#14180C" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="563.1824" x="2574.77" y="1278.8">programmatically generated by the orchestrator</text><text fill="#14180C" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="605.4634" x="2574.77" y="1311.35">(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="2574.77" y="1343.9">seeding consumer can register real accounts from</text><text fill="#14180C" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="383.8003" x="2574.77" y="1376.45">this export. See ROADMAP.md &#167;1.</text></g><!--class GeneratedCheckin--><g class="entity" data-qualified-name="Domain. Models.GeneratedCheckin" data-source-line="162" id="ent0028"><rect fill="#EBECE3" height="221.3" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="400.738" x="4391.63" y="1192.18"/><ellipse cx="4478.0208" cy="1213.455" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M4481.7166,1222.1801 Q4480.8621,1222.6196 4479.9221,1222.8393 Q4478.9822,1223.059 4477.9446,1223.059 Q4474.2581,1223.059 4472.3172,1220.6298 Q4470.3762,1218.2006 4470.3762,1213.6108 Q4470.3762,1209.0087 4472.3172,1206.5795 Q4474.2581,1204.1503 4477.9446,1204.1503 Q4478.9822,1204.1503 4479.9343,1204.37 Q4480.8865,1204.5898 4481.7166,1205.0292 L4481.7166,1209.0331 Q4480.7888,1208.1786 4479.916,1207.7819 Q4479.0432,1207.3852 4478.1155,1207.3852 Q4476.138,1207.3852 4475.1309,1208.9538 Q4474.1238,1210.5224 4474.1238,1213.6108 Q4474.1238,1216.6869 4475.1309,1218.2555 Q4476.138,1219.8241 4478.1155,1219.8241 Q4479.0432,1219.8241 4479.916,1219.4274 Q4480.7888,1219.0307 4481.7166,1218.1762 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="217.9564" x="4503.0208" y="1221.98">GeneratedCheckin</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="4392.63" x2="4791.368" y1="1234.73" y2="1234.73"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="4402.63" cy="1256.505" 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="4414.63" y="1263.53">checkin_id : uint64_t</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="4402.63" cy="1289.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="208.4938" x="4414.63" y="1296.08">user_id : uint64_t</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="4402.63" cy="1321.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="4414.63" y="1328.63">brewery_id : uint64_t</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="4402.63" cy="1354.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="273.4753" x="4414.63" y="1361.18">checkin : CheckinResult</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="4402.63" cy="1386.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="371.738" x="4414.63" y="1393.73">metadata : GenerationMetadata</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="4392.63" x2="4791.368" y1="1405.48" y2="1405.48"/></g><!--class GeneratedRating--><g class="entity" data-qualified-name="Domain. Models.GeneratedRating" data-source-line="170" id="ent0029"><rect fill="#EBECE3" height="221.3" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="400.738" x="5263.63" y="1192.18"/><ellipse cx="5360.6207" cy="1213.455" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M5364.3165,1222.1801 Q5363.462,1222.6196 5362.5221,1222.8393 Q5361.5821,1223.059 5360.5445,1223.059 Q5356.858,1223.059 5354.9171,1220.6298 Q5352.9762,1218.2006 5352.9762,1213.6108 Q5352.9762,1209.0087 5354.9171,1206.5795 Q5356.858,1204.1503 5360.5445,1204.1503 Q5361.5821,1204.1503 5362.5343,1204.37 Q5363.4864,1204.5898 5364.3165,1205.0292 L5364.3165,1209.0331 Q5363.3888,1208.1786 5362.516,1207.7819 Q5361.6432,1207.3852 5360.7154,1207.3852 Q5358.7379,1207.3852 5357.7308,1208.9538 Q5356.7237,1210.5224 5356.7237,1213.6108 Q5356.7237,1216.6869 5357.7308,1218.2555 Q5358.7379,1219.8241 5360.7154,1219.8241 Q5361.6432,1219.8241 5362.516,1219.4274 Q5363.3888,1219.0307 5364.3165,1218.1762 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="196.7566" x="5385.6207" y="1221.98">GeneratedRating</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="5264.63" x2="5663.368" y1="1234.73" y2="1234.73"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="5274.63" cy="1256.505" 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="5286.63" y="1263.53">user_id : uint64_t</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="5274.63" cy="1289.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="5286.63" y="1296.08">beer_id : uint64_t</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="5274.63" cy="1321.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="248.2438" x="5286.63" y="1328.63">checkin_id : uint64_t</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="5274.63" cy="1354.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="229.1006" x="5286.63" y="1361.18">rating : RatingResult</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="5274.63" cy="1386.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="371.738" x="5286.63" y="1393.73">metadata : GenerationMetadata</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="5264.63" x2="5663.368" y1="1405.48" y2="1405.48"/></g><!--class GeneratedFollow--><g class="entity" data-qualified-name="Domain. Models.GeneratedFollow" data-source-line="178" id="ent0030"><rect fill="#EBECE3" height="156.2" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="400.738" x="4827.63" y="1224.73"/><ellipse cx="4924.2551" cy="1246.005" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M4927.9509,1254.7301 Q4927.0964,1255.1696 4926.1564,1255.3893 Q4925.2165,1255.609 4924.1789,1255.609 Q4920.4924,1255.609 4918.5515,1253.1798 Q4916.6105,1250.7506 4916.6105,1246.1608 Q4916.6105,1241.5587 4918.5515,1239.1295 Q4920.4924,1236.7003 4924.1789,1236.7003 Q4925.2165,1236.7003 4926.1687,1236.92 Q4927.1208,1237.1398 4927.9509,1237.5792 L4927.9509,1241.5831 Q4927.0231,1240.7286 4926.1503,1240.3319 Q4925.2775,1239.9352 4924.3498,1239.9352 Q4922.3723,1239.9352 4921.3652,1241.5038 Q4920.3581,1243.0724 4920.3581,1246.1608 Q4920.3581,1249.2369 4921.3652,1250.8055 Q4922.3723,1252.3741 4924.3498,1252.3741 Q4925.2775,1252.3741 4926.1503,1251.9774 Q4927.0231,1251.5807 4927.9509,1250.7262 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="197.4878" x="4949.2551" y="1254.53">GeneratedFollow</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="4828.63" x2="5227.368" y1="1267.28" y2="1267.28"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="4838.63" cy="1289.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="249.9815" x="4850.63" y="1296.08">follower_id : uint64_t</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="4838.63" cy="1321.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="256.4127" x="4850.63" y="1328.63">followed_id : uint64_t</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="4838.63" cy="1354.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="371.738" x="4850.63" y="1361.18">metadata : GenerationMetadata</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="4828.63" x2="5227.368" y1="1372.93" y2="1372.93"/></g><!--class UserPersona--><g class="entity" data-qualified-name="Domain. Models.UserPersona" data-source-line="184" id="ent0031"><rect fill="#EBECE3" height="156.2" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="477.8261" x="5699.09" y="1224.73"/><ellipse cx="5860.1623" cy="1246.005" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M5863.8581,1254.7301 Q5863.0036,1255.1696 5862.0637,1255.3893 Q5861.1237,1255.609 5860.0861,1255.609 Q5856.3996,1255.609 5854.4587,1253.1798 Q5852.5178,1250.7506 5852.5178,1246.1608 Q5852.5178,1241.5587 5854.4587,1239.1295 Q5856.3996,1236.7003 5860.0861,1236.7003 Q5861.1237,1236.7003 5862.0759,1236.92 Q5863.028,1237.1398 5863.8581,1237.5792 L5863.8581,1241.5831 Q5862.9304,1240.7286 5862.0576,1240.3319 Q5861.1848,1239.9352 5860.257,1239.9352 Q5858.2795,1239.9352 5857.2724,1241.5038 Q5856.2653,1243.0724 5856.2653,1246.1608 Q5856.2653,1249.2369 5857.2724,1250.8055 Q5858.2795,1252.3741 5860.257,1252.3741 Q5861.1848,1252.3741 5862.0576,1251.9774 Q5862.9304,1251.5807 5863.8581,1250.7262 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="145.6815" x="5885.1623" y="1254.53">UserPersona</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="5700.09" x2="6175.9161" y1="1267.28" y2="1267.28"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="5710.09" cy="1289.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="190.0942" x="5722.09" y="1296.08">name: std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="5710.09" cy="1321.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="258.2444" x="5722.09" y="1328.63">description: std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="5710.09" cy="1354.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="448.8261" x="5722.09" y="1361.18">style_affinities: std::vector&lt;std::string&gt;</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="5700.09" x2="6175.9161" y1="1372.93" y2="1372.93"/></g><!--class SamplingOptions--><g class="entity" data-qualified-name="Domain. Application Configuration.SamplingOptions" data-source-line="194" id="ent0034"><rect fill="#EBECE3" height="221.3" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="309.8506" x="8080.07" y="3120.58"/><ellipse cx="8131.1143" cy="3141.855" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M8134.8101,3150.5801 Q8133.9556,3151.0196 8133.0156,3151.2393 Q8132.0757,3151.459 8131.0381,3151.459 Q8127.3516,3151.459 8125.4107,3149.0298 Q8123.4697,3146.6006 8123.4697,3142.0108 Q8123.4697,3137.4087 8125.4107,3134.9795 Q8127.3516,3132.5503 8131.0381,3132.5503 Q8132.0757,3132.5503 8133.0279,3132.77 Q8133.98,3132.9898 8134.8101,3133.4292 L8134.8101,3137.4331 Q8133.8823,3136.5786 8133.0095,3136.1819 Q8132.1367,3135.7852 8131.209,3135.7852 Q8129.2315,3135.7852 8128.2244,3137.3538 Q8127.2173,3138.9224 8127.2173,3142.0108 Q8127.2173,3145.0869 8128.2244,3146.6555 Q8129.2315,3148.2241 8131.209,3148.2241 Q8132.1367,3148.2241 8133.0095,3147.8274 Q8133.8823,3147.4307 8134.8101,3146.5762 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="198.4188" x="8155.4575" y="3150.38">SamplingOptions</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="8081.07" x2="8388.9206" y1="3163.13" y2="3163.13"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="8091.07" cy="3184.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="280.8506" x="8103.07" y="3191.93">temperature: float = 1.0F</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="8091.07" cy="3217.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="229.9126" x="8103.07" y="3224.48">top_p: float = 0.95F</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="8091.07" cy="3250.005" 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="8103.07" y="3257.03">top_k: uint32_t = 64</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="8091.07" cy="3282.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="259.1315" x="8103.07" y="3289.58">n_ctx: uint32_t = 8192</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="8091.07" cy="3315.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="146.8315" x="8103.07" y="3322.13">seed: int = -1</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="8081.07" x2="8388.9206" y1="3333.88" y2="3333.88"/></g><!--class GeneratorOptions--><g class="entity" data-qualified-name="Domain. Application Configuration.GeneratorOptions" data-source-line="202" id="ent0035"><rect fill="#EBECE3" height="156.2" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="513.2943" x="7978.35" y="2754.9"/><ellipse cx="8124.5189" cy="2776.175" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M8128.2147,2784.9001 Q8127.3602,2785.3396 8126.4202,2785.5593 Q8125.4803,2785.779 8124.4427,2785.779 Q8120.7562,2785.779 8118.8152,2783.3498 Q8116.8743,2780.9206 8116.8743,2776.3308 Q8116.8743,2771.7287 8118.8152,2769.2995 Q8120.7562,2766.8703 8124.4427,2766.8703 Q8125.4803,2766.8703 8126.4324,2767.09 Q8127.3846,2767.3098 8128.2147,2767.7492 L8128.2147,2771.7531 Q8127.2869,2770.8986 8126.4141,2770.5019 Q8125.5413,2770.1052 8124.6136,2770.1052 Q8122.636,2770.1052 8121.629,2771.6738 Q8120.6219,2773.2424 8120.6219,2776.3308 Q8120.6219,2779.4069 8121.629,2780.9755 Q8122.636,2782.5441 8124.6136,2782.5441 Q8125.5413,2782.5441 8126.4141,2782.1474 Q8127.2869,2781.7507 8128.2147,2780.8962 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="210.9565" x="8149.5189" y="2784.7">GeneratorOptions</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="7979.35" x2="8490.6443" y1="2797.45" y2="2797.45"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="7989.35" cy="2819.225" 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="8001.35" y="2826.25">model_path: std::filesystem::path</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="7989.35" cy="2851.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="295.5751" x="8001.35" y="2858.8">use_mocked: bool = false</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="7989.35" cy="2884.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="484.2943" x="8001.35" y="2891.35">sampling: std::optional&lt;SamplingOptions&gt;</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="7979.35" x2="8490.6443" y1="2903.1" y2="2903.1"/></g><!--class PipelineOptions--><g class="entity" data-qualified-name="Domain. Application Configuration.PipelineOptions" data-source-line="208" id="ent0036"><rect fill="#EBECE3" height="123.65" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="420.5569" x="7522.72" y="2771.18"/><ellipse cx="7636.4984" cy="2792.455" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M7640.1942,2801.1801 Q7639.3397,2801.6196 7638.3998,2801.8393 Q7637.4598,2802.059 7636.4222,2802.059 Q7632.7357,2802.059 7630.7948,2799.6298 Q7628.8539,2797.2006 7628.8539,2792.6108 Q7628.8539,2788.0087 7630.7948,2785.5795 Q7632.7357,2783.1503 7636.4222,2783.1503 Q7637.4598,2783.1503 7638.412,2783.37 Q7639.3641,2783.5898 7640.1942,2784.0292 L7640.1942,2788.0331 Q7639.2665,2787.1786 7638.3937,2786.7819 Q7637.5209,2786.3852 7636.5931,2786.3852 Q7634.6156,2786.3852 7633.6085,2787.9538 Q7632.6014,2789.5224 7632.6014,2792.6108 Q7632.6014,2795.6869 7633.6085,2797.2555 Q7634.6156,2798.8241 7636.5931,2798.8241 Q7637.5209,2798.8241 7638.3937,2798.4274 Q7639.2665,2798.0307 7640.1942,2797.1762 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="183" x="7661.4984" y="2800.98">PipelineOptions</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="7523.72" x2="7942.2769" y1="2813.73" y2="2813.73"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="7533.72" cy="2835.505" 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="7545.72" y="2842.53">output_path: std::filesystem::path</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="7533.72" cy="2868.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="347.1631" x="7545.72" y="2875.08">log_path: std::filesystem::path</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="7523.72" x2="7942.2769" y1="2886.83" y2="2886.83"/></g><!--class ApplicationOptions--><g class="entity" data-qualified-name="Domain. Application Configuration.ApplicationOptions" data-source-line="213" id="ent0037"><rect fill="#EBECE3" height="123.65" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="365.0632" x="8052.47" y="2044.55"/><ellipse cx="8117.564" cy="2065.825" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M8121.2598,2074.5501 Q8120.4053,2074.9896 8119.4654,2075.2093 Q8118.5255,2075.429 8117.4879,2075.429 Q8113.8013,2075.429 8111.8604,2072.9998 Q8109.9195,2070.5706 8109.9195,2065.9808 Q8109.9195,2061.3787 8111.8604,2058.9495 Q8113.8013,2056.5203 8117.4879,2056.5203 Q8118.5255,2056.5203 8119.4776,2056.74 Q8120.4297,2056.9598 8121.2598,2057.3992 L8121.2598,2061.4031 Q8120.3321,2060.5486 8119.4593,2060.1519 Q8118.5865,2059.7552 8117.6588,2059.7552 Q8115.6812,2059.7552 8114.6741,2061.3238 Q8113.6671,2062.8924 8113.6671,2065.9808 Q8113.6671,2069.0569 8114.6741,2070.6255 Q8115.6812,2072.1941 8117.6588,2072.1941 Q8118.5865,2072.1941 8119.4593,2071.7974 Q8120.3321,2071.4007 8121.2598,2070.5462 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="224.8751" x="8142.564" y="2074.35">ApplicationOptions</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="8053.47" x2="8416.5332" y1="2087.1" y2="2087.1"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="8063.47" cy="2108.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="336.0632" x="8075.47" y="2115.9">generator: GeneratorOptions</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="8063.47" cy="2141.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="286.3188" x="8075.47" y="2148.45">pipeline: PipelineOptions</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="8053.47" x2="8416.5332" y1="2160.2" y2="2160.2"/></g><!--class ContextStrategy--><g class="entity" data-qualified-name="Domain. Policy.ContextStrategy" data-source-line="225" id="ent0042"><rect fill="#EBECE3" height="156.2" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="703.1327" x="10776.43" y="2754.9"/><ellipse cx="11026.9463" cy="2792.45" fill="#B4A7E5" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M11021.546,2786.8987 L11021.546,2783.7249 L11032.398,2783.7249 L11032.398,2786.8987 L11028.7725,2786.8987 L11028.7725,2798.7762 L11032.398,2798.7762 L11032.398,2801.95 L11021.546,2801.95 L11021.546,2798.7762 L11025.1714,2798.7762 L11025.1714,2786.8987 Z " fill="#14180C"/><text fill="#4A5837" font-family="DM Sans" font-size="25" font-style="italic" lengthAdjust="spacing" textLength="127.05" x="11084.4713" y="2784.7">&#171;interface&#187;</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" font-style="italic" lengthAdjust="spacing" textLength="192.1" x="11051.9463" y="2817.25">ContextStrategy</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="10777.43" x2="11478.5627" y1="2830" y2="2830"/><line style="stroke:#4A5837;stroke-width:0.5;" x1="10777.43" x2="11478.5627" y1="2838" y2="2838"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="10787.43" cy="2859.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="674.1327" x="10799.43" y="2866.8">QueriesFor(loc : const Location&amp;) : std::vector&lt;std::string&gt;</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="10787.43" cy="2892.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="315.5253" x="10799.43" y="2899.35">MaxContextChars() : size_t</text></g><!--class BreweryContextStrategy--><g class="entity" data-qualified-name="Domain. Policy.BreweryContextStrategy" data-source-line="230" id="ent0043"><rect fill="#EBECE3" height="123.65" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="703.1327" x="10776.43" y="3169.4"/><ellipse cx="10979.3773" cy="3190.675" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M10983.0731,3199.4001 Q10982.2186,3199.8396 10981.2786,3200.0593 Q10980.3387,3200.279 10979.3011,3200.279 Q10975.6146,3200.279 10973.6736,3197.8498 Q10971.7327,3195.4206 10971.7327,3190.8308 Q10971.7327,3186.2287 10973.6736,3183.7995 Q10975.6146,3181.3703 10979.3011,3181.3703 Q10980.3387,3181.3703 10981.2908,3181.59 Q10982.243,3181.8098 10983.0731,3182.2492 L10983.0731,3186.2531 Q10982.1453,3185.3986 10981.2725,3185.0019 Q10980.3997,3184.6052 10979.472,3184.6052 Q10977.4944,3184.6052 10976.4874,3186.1738 Q10975.4803,3187.7424 10975.4803,3190.8308 Q10975.4803,3193.9069 10976.4874,3195.4755 Q10977.4944,3197.0441 10979.472,3197.0441 Q10980.3997,3197.0441 10981.2725,3196.6474 Q10982.1453,3196.2507 10983.0731,3195.3962 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="287.2382" x="11004.3773" y="3199.2">BreweryContextStrategy</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="10777.43" x2="11478.5627" y1="3211.95" y2="3211.95"/><line style="stroke:#4A5837;stroke-width:0.5;" x1="10777.43" x2="11478.5627" y1="3219.95" y2="3219.95"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="10787.43" cy="3241.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="674.1327" x="10799.43" y="3248.75">QueriesFor(loc : const Location&amp;) : std::vector&lt;std::string&gt;</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="10787.43" cy="3274.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="315.5253" x="10799.43" y="3281.3">MaxContextChars() : size_t</text></g><!--class BeerContextStrategy--><g class="entity" data-qualified-name="Domain. Policy.BeerContextStrategy" data-source-line="235" id="ent0044"><rect fill="#EBECE3" height="123.65" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="703.1327" x="11514.43" y="3169.4"/><ellipse cx="11738.4836" cy="3190.675" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M11742.1794,3199.4001 Q11741.3249,3199.8396 11740.385,3200.0593 Q11739.445,3200.279 11738.4074,3200.279 Q11734.7209,3200.279 11732.78,3197.8498 Q11730.8391,3195.4206 11730.8391,3190.8308 Q11730.8391,3186.2287 11732.78,3183.7995 Q11734.7209,3181.3703 11738.4074,3181.3703 Q11739.445,3181.3703 11740.3972,3181.59 Q11741.3493,3181.8098 11742.1794,3182.2492 L11742.1794,3186.2531 Q11741.2517,3185.3986 11740.3789,3185.0019 Q11739.5061,3184.6052 11738.5783,3184.6052 Q11736.6008,3184.6052 11735.5937,3186.1738 Q11734.5866,3187.7424 11734.5866,3190.8308 Q11734.5866,3193.9069 11735.5937,3195.4755 Q11736.6008,3197.0441 11738.5783,3197.0441 Q11739.5061,3197.0441 11740.3789,3196.6474 Q11741.2517,3196.2507 11742.1794,3195.3962 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="245.0255" x="11763.4836" y="3199.2">BeerContextStrategy</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="11515.43" x2="12216.5627" y1="3211.95" y2="3211.95"/><line style="stroke:#4A5837;stroke-width:0.5;" x1="11515.43" x2="12216.5627" y1="3219.95" y2="3219.95"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="11525.43" cy="3241.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="674.1327" x="11537.43" y="3248.75">QueriesFor(loc : const Location&amp;) : std::vector&lt;std::string&gt;</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="11525.43" cy="3274.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="315.5253" x="11537.43" y="3281.3">MaxContextChars() : size_t</text></g><!--class SamplingStrategy--><g class="entity" data-qualified-name="Domain. Policy.SamplingStrategy" data-source-line="240" id="ent0045"><rect fill="#EBECE3" height="123.65" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="870.7391" x="11699.63" y="2771.18"/><ellipse cx="12027.6245" cy="2808.73" fill="#B4A7E5" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M12022.2242,2803.1787 L12022.2242,2800.0049 L12033.0762,2800.0049 L12033.0762,2803.1787 L12029.4507,2803.1787 L12029.4507,2815.0562 L12033.0762,2815.0562 L12033.0762,2818.23 L12022.2242,2818.23 L12022.2242,2815.0562 L12025.8496,2815.0562 L12025.8496,2803.1787 Z " fill="#14180C"/><text fill="#4A5837" font-family="DM Sans" font-size="25" font-style="italic" lengthAdjust="spacing" textLength="127.05" x="12091.4745" y="2800.98">&#171;interface&#187;</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" font-style="italic" lengthAdjust="spacing" textLength="204.75" x="12052.6245" y="2833.53">SamplingStrategy</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="11700.63" x2="12569.3691" y1="2846.28" y2="2846.28"/><line style="stroke:#4A5837;stroke-width:0.5;" x1="11700.63" x2="12569.3691" y1="2854.28" y2="2854.28"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="11710.63" cy="2876.055" 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="11722.63" y="2883.08">Sample(locations : const std::vector&lt;Location&gt;&amp;) : std::vector&lt;Location&gt;</text></g><!--class UniformSamplingStrategy--><g class="entity" data-qualified-name="Domain. Policy.UniformSamplingStrategy" data-source-line="244" id="ent0046"><rect fill="#EBECE3" height="123.65" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="870.7391" x="12252.63" y="3169.4"/><ellipse cx="12534.7774" cy="3190.675" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M12538.4732,3199.4001 Q12537.6187,3199.8396 12536.6788,3200.0593 Q12535.7388,3200.279 12534.7012,3200.279 Q12531.0147,3200.279 12529.0738,3197.8498 Q12527.1329,3195.4206 12527.1329,3190.8308 Q12527.1329,3186.2287 12529.0738,3183.7995 Q12531.0147,3181.3703 12534.7012,3181.3703 Q12535.7388,3181.3703 12536.691,3181.59 Q12537.6431,3181.8098 12538.4732,3182.2492 L12538.4732,3186.2531 Q12537.5455,3185.3986 12536.6726,3185.0019 Q12535.7998,3184.6052 12534.8721,3184.6052 Q12532.8946,3184.6052 12531.8875,3186.1738 Q12530.8804,3187.7424 12530.8804,3190.8308 Q12530.8804,3193.9069 12531.8875,3195.4755 Q12532.8946,3197.0441 12534.8721,3197.0441 Q12535.7998,3197.0441 12536.6726,3196.6474 Q12537.5455,3196.2507 12538.4732,3195.3962 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="296.4443" x="12559.7774" y="3199.2">UniformSamplingStrategy</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="12253.63" x2="13122.3691" y1="3211.95" y2="3211.95"/><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="12260.63" y="3230.725"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="249.9499" x="12275.63" y="3240.75">sample_size_ : size_t</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="12253.63" x2="13122.3691" y1="3252.5" y2="3252.5"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="12263.63" cy="3274.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="841.7391" x="12275.63" y="3281.3">Sample(locations : const std::vector&lt;Location&gt;&amp;) : std::vector&lt;Location&gt;</text></g><!--class BeerSelectionStrategy--><g class="entity" data-qualified-name="Domain. Policy.BeerSelectionStrategy" data-source-line="249" id="ent0047"><rect fill="#EBECE3" height="156.2" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="747.9575" x="12974.02" y="2754.9"/><ellipse cx="13213.1113" cy="2792.45" fill="#B4A7E5" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M13207.7109,2786.8987 L13207.7109,2783.7249 L13218.5629,2783.7249 L13218.5629,2786.8987 L13214.9374,2786.8987 L13214.9374,2798.7762 L13218.5629,2798.7762 L13218.5629,2801.95 L13207.7109,2801.95 L13207.7109,2798.7762 L13211.3364,2798.7762 L13211.3364,2786.8987 Z " fill="#14180C"/><text fill="#4A5837" font-family="DM Sans" font-size="25" font-style="italic" lengthAdjust="spacing" textLength="127.05" x="13304.4738" y="2784.7">&#171;interface&#187;</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" font-style="italic" lengthAdjust="spacing" textLength="259.775" x="13238.1113" y="2817.25">BeerSelectionStrategy</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="12975.02" x2="13720.9775" y1="2830" y2="2830"/><line style="stroke:#4A5837;stroke-width:0.5;" x1="12975.02" x2="13720.9775" y1="2838" y2="2838"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="12985.02" cy="2876.05" 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="12997.02" y="2866.8">SelectStyles(brewery : const GeneratedBrewery&amp;,</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="705.6575" x="13010.32" y="2899.35">palette : std::span&lt;const BeerStyle&gt;) : std::vector&lt;BeerStyle&gt;</text></g><!--class RandomBeerSelectionStrategy--><g class="entity" data-qualified-name="Domain. Policy.RandomBeerSelectionStrategy" data-source-line="253" id="ent0048"><rect fill="#EBECE3" height="221.3" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="747.9575" x="13158.02" y="3120.58"/><ellipse cx="13349.4797" cy="3141.855" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M13353.1755,3150.5801 Q13352.321,3151.0196 13351.3811,3151.2393 Q13350.4412,3151.459 13349.4036,3151.459 Q13345.717,3151.459 13343.7761,3149.0298 Q13341.8352,3146.6006 13341.8352,3142.0108 Q13341.8352,3137.4087 13343.7761,3134.9795 Q13345.717,3132.5503 13349.4036,3132.5503 Q13350.4412,3132.5503 13351.3933,3132.77 Q13352.3455,3132.9898 13353.1755,3133.4292 L13353.1755,3137.4331 Q13352.2478,3136.5786 13351.375,3136.1819 Q13350.5022,3135.7852 13349.5745,3135.7852 Q13347.5969,3135.7852 13346.5898,3137.3538 Q13345.5828,3138.9224 13345.5828,3142.0108 Q13345.5828,3145.0869 13346.5898,3146.6555 Q13347.5969,3148.2241 13349.5745,3148.2241 Q13350.5022,3148.2241 13351.375,3147.8274 Q13352.2478,3147.4307 13353.1755,3146.5762 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="355.0381" x="13374.4797" y="3150.38">RandomBeerSelectionStrategy</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="13159.02" x2="13904.9775" y1="3163.13" y2="3163.13"/><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="13166.02" y="3181.905"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="219.9004" x="13181.02" y="3191.93">rng_ : std::mt19937</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="13166.02" y="3214.455"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="230.3374" x="13181.02" y="3224.48">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="13166.02" y="3247.005"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="236.0249" x="13181.02" y="3257.03">max_beers_ : size_t</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="13159.02" x2="13904.9775" y1="3268.78" y2="3268.78"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="13169.02" cy="3306.83" 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="13181.02" y="3297.58">SelectStyles(brewery : const GeneratedBrewery&amp;,</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="705.6575" x="13194.32" y="3330.13">palette : std::span&lt;const BeerStyle&gt;) : std::vector&lt;BeerStyle&gt;</text></g><!--class CheckinDistributionStrategy--><g class="entity" data-qualified-name="Domain. Policy.CheckinDistributionStrategy" data-source-line="260" id="ent0049"><rect fill="#EBECE3" height="253.85" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="803.5516" x="13941.22" y="2706.08"/><ellipse cx="14173.5833" cy="2743.63" fill="#B4A7E5" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M14168.1829,2738.0787 L14168.1829,2734.9049 L14179.035,2734.9049 L14179.035,2738.0787 L14175.4095,2738.0787 L14175.4095,2749.9562 L14179.035,2749.9562 L14179.035,2753.13 L14168.1829,2753.13 L14168.1829,2749.9562 L14171.8084,2749.9562 L14171.8084,2738.0787 Z " fill="#14180C"/><text fill="#4A5837" font-family="DM Sans" font-size="25" font-style="italic" lengthAdjust="spacing" textLength="127.05" x="14299.4708" y="2735.88">&#171;interface&#187;</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" font-style="italic" lengthAdjust="spacing" textLength="328.825" x="14198.5833" y="2768.43">CheckinDistributionStrategy</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="13942.22" x2="14743.7716" y1="2781.18" y2="2781.18"/><line style="stroke:#4A5837;stroke-width:0.5;" x1="13942.22" x2="14743.7716" y1="2789.18" y2="2789.18"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="13952.22" cy="2810.955" 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="13964.22" y="2817.98">AssignActivityWeights(users : std::vector&lt;GeneratedUser&gt;&amp;) : void</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="13952.22" cy="2859.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="546.101" x="13964.22" y="2850.53">CheckinsForUser(user : const GeneratedUser&amp;,</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="366.638" x="13977.52" y="2883.08">brewery_count : size_t) : size_t</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="13952.22" cy="2924.88" 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="13964.22" y="2915.63">TimestampFor(user : const GeneratedUser&amp;,</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="293.0942" x="13977.52" y="2948.18">index : size_t) : std::string</text></g><!--class JCurveCheckinStrategy--><g class="entity" data-qualified-name="Domain. Policy.JCurveCheckinStrategy" data-source-line="266" id="ent0050"><rect fill="#EBECE3" height="253.85" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="803.5516" x="13941.22" y="3104.3"/><ellipse cx="14200.933" cy="3125.575" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M14204.6288,3134.3001 Q14203.7743,3134.7396 14202.8344,3134.9593 Q14201.8945,3135.179 14200.8569,3135.179 Q14197.1703,3135.179 14195.2294,3132.7498 Q14193.2885,3130.3206 14193.2885,3125.7308 Q14193.2885,3121.1287 14195.2294,3118.6995 Q14197.1703,3116.2703 14200.8569,3116.2703 Q14201.8945,3116.2703 14202.8466,3116.49 Q14203.7988,3116.7098 14204.6288,3117.1492 L14204.6288,3121.1531 Q14203.7011,3120.2986 14202.8283,3119.9019 Q14201.9555,3119.5052 14201.0278,3119.5052 Q14199.0502,3119.5052 14198.0431,3121.0738 Q14197.0361,3122.6424 14197.0361,3125.7308 Q14197.0361,3128.8069 14198.0431,3130.3755 Q14199.0502,3131.9441 14201.0278,3131.9441 Q14201.9555,3131.9441 14202.8283,3131.5474 Q14203.7011,3131.1507 14204.6288,3130.2962 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="274.1255" x="14225.933" y="3134.1">JCurveCheckinStrategy</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="13942.22" x2="14743.7716" y1="3146.85" y2="3146.85"/><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="13949.22" y="3165.625"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="219.9004" x="13964.22" y="3175.65">rng_ : std::mt19937</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="13942.22" x2="14743.7716" y1="3187.4" y2="3187.4"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="13952.22" cy="3209.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="774.5516" x="13964.22" y="3216.2">AssignActivityWeights(users : std::vector&lt;GeneratedUser&gt;&amp;) : void</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="13952.22" cy="3258" 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="13964.22" y="3248.75">CheckinsForUser(user : const GeneratedUser&amp;,</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="366.638" x="13977.52" y="3281.3">brewery_count : size_t) : size_t</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="13952.22" cy="3323.1" 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="13964.22" y="3313.85">TimestampFor(user : const GeneratedUser&amp;,</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="293.0942" x="13977.52" y="3346.4">index : size_t) : std::string</text></g><!--class RandomCheckinStrategy--><g class="entity" data-qualified-name="Domain. Policy.RandomCheckinStrategy" data-source-line="273" id="ent0051"><rect fill="#EBECE3" height="318.95" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="803.5516" x="14780.22" y="3071.75"/><ellipse cx="15032.8456" cy="3093.025" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M15036.5414,3101.7501 Q15035.6869,3102.1896 15034.747,3102.4093 Q15033.807,3102.629 15032.7694,3102.629 Q15029.0829,3102.629 15027.142,3100.1998 Q15025.2011,3097.7706 15025.2011,3093.1808 Q15025.2011,3088.5787 15027.142,3086.1495 Q15029.0829,3083.7203 15032.7694,3083.7203 Q15033.807,3083.7203 15034.7592,3083.94 Q15035.7113,3084.1598 15036.5414,3084.5992 L15036.5414,3088.6031 Q15035.6137,3087.7486 15034.7409,3087.3519 Q15033.8681,3086.9552 15032.9403,3086.9552 Q15030.9628,3086.9552 15029.9557,3088.5238 Q15028.9486,3090.0924 15028.9486,3093.1808 Q15028.9486,3096.2569 15029.9557,3097.8255 Q15030.9628,3099.3941 15032.9403,3099.3941 Q15033.8681,3099.3941 15034.7409,3098.9974 Q15035.6137,3098.6007 15036.5414,3097.7462 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="288.3004" x="15057.8456" y="3101.55">RandomCheckinStrategy</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="14781.22" x2="15582.7716" y1="3114.3" y2="3114.3"/><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="14788.22" y="3133.075"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="219.9004" x="14803.22" y="3143.1">rng_ : std::mt19937</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="14788.22" y="3165.625"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="267.1062" x="14803.22" y="3175.65">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="14788.22" y="3198.175"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="272.7936" x="14803.22" y="3208.2">max_checkins_ : size_t</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="14781.22" x2="15582.7716" y1="3219.95" y2="3219.95"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="14791.22" cy="3241.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="774.5516" x="14803.22" y="3248.75">AssignActivityWeights(users : std::vector&lt;GeneratedUser&gt;&amp;) : void</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="14791.22" cy="3290.55" 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="14803.22" y="3281.3">CheckinsForUser(user : const GeneratedUser&amp;,</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="366.638" x="14816.52" y="3313.85">brewery_count : size_t) : size_t</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="14791.22" cy="3355.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="517.8133" x="14803.22" y="3346.4">TimestampFor(user : const GeneratedUser&amp;,</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="293.0942" x="14816.52" y="3378.95">index : size_t) : std::string</text></g><!--class FollowGenerationStrategy--><g class="entity" data-qualified-name="Domain. Policy.FollowGenerationStrategy" data-source-line="282" id="ent0052"><rect fill="#EBECE3" height="123.65" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="1108.7897" x="15618.61" y="2771.18"/><ellipse cx="16016.9548" cy="2808.73" fill="#B4A7E5" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M16011.5545,2803.1787 L16011.5545,2800.0049 L16022.4065,2800.0049 L16022.4065,2803.1787 L16018.781,2803.1787 L16018.781,2815.0562 L16022.4065,2815.0562 L16022.4065,2818.23 L16011.5545,2818.23 L16011.5545,2815.0562 L16015.1799,2815.0562 L16015.1799,2803.1787 Z " fill="#14180C"/><text fill="#4A5837" font-family="DM Sans" font-size="25" font-style="italic" lengthAdjust="spacing" textLength="127.05" x="16129.4798" y="2800.98">&#171;interface&#187;</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" font-style="italic" lengthAdjust="spacing" textLength="302.1" x="16041.9548" y="2833.53">FollowGenerationStrategy</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="15619.61" x2="16726.3997" y1="2846.28" y2="2846.28"/><line style="stroke:#4A5837;stroke-width:0.5;" x1="15619.61" x2="16726.3997" y1="2854.28" y2="2854.28"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="15629.61" cy="2876.055" 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="15641.61" y="2883.08">GenerateFollows(users : const std::vector&lt;GeneratedUser&gt;&amp;) : std::vector&lt;GeneratedFollow&gt;</text></g><!--class RandomFollowStrategy--><g class="entity" data-qualified-name="Domain. Policy.RandomFollowStrategy" data-source-line="286" id="ent0053"><rect fill="#EBECE3" height="188.75" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="1108.7897" x="15618.61" y="3136.85"/><ellipse cx="16034.089" cy="3158.125" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M16037.7848,3166.8501 Q16036.9303,3167.2896 16035.9903,3167.5093 Q16035.0504,3167.729 16034.0128,3167.729 Q16030.3263,3167.729 16028.3853,3165.2998 Q16026.4444,3162.8706 16026.4444,3158.2808 Q16026.4444,3153.6787 16028.3853,3151.2495 Q16030.3263,3148.8203 16034.0128,3148.8203 Q16035.0504,3148.8203 16036.0025,3149.04 Q16036.9547,3149.2598 16037.7848,3149.6992 L16037.7848,3153.7031 Q16036.857,3152.8486 16035.9842,3152.4519 Q16035.1114,3152.0552 16034.1837,3152.0552 Q16032.2061,3152.0552 16031.1991,3153.6238 Q16030.192,3155.1924 16030.192,3158.2808 Q16030.192,3161.3569 16031.1991,3162.9255 Q16032.2061,3164.4941 16034.1837,3164.4941 Q16035.1114,3164.4941 16035.9842,3164.0974 Q16036.857,3163.7007 16037.7848,3162.8462 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="267.8318" x="16059.089" y="3166.65">RandomFollowStrategy</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="15619.61" x2="16726.3997" y1="3179.4" y2="3179.4"/><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="15626.61" y="3198.175"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="219.9004" x="15641.61" y="3208.2">rng_ : std::mt19937</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="15626.61" y="3230.725"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="245.3938" x="15641.61" y="3240.75">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="15626.61" y="3263.275"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="251.0813" x="15641.61" y="3273.3">max_follows_ : size_t</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="15619.61" x2="16726.3997" y1="3285.05" y2="3285.05"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="15629.61" cy="3306.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="1079.7897" x="15641.61" y="3313.85">GenerateFollows(users : const std::vector&lt;GeneratedUser&gt;&amp;) : std::vector&lt;GeneratedFollow&gt;</text></g><!--class ActivityWeightedFollowStrategy--><g class="entity" data-qualified-name="Domain. Policy.ActivityWeightedFollowStrategy" data-source-line="293" id="ent0054"><rect fill="#EBECE3" height="188.75" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="1108.7897" x="16762.61" y="3136.85"/><ellipse cx="17124.9263" cy="3158.125" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M17128.6221,3166.8501 Q17127.7676,3167.2896 17126.8277,3167.5093 Q17125.8877,3167.729 17124.8501,3167.729 Q17121.1636,3167.729 17119.2227,3165.2998 Q17117.2818,3162.8706 17117.2818,3158.2808 Q17117.2818,3153.6787 17119.2227,3151.2495 Q17121.1636,3148.8203 17124.8501,3148.8203 Q17125.8877,3148.8203 17126.8399,3149.04 Q17127.792,3149.2598 17128.6221,3149.6992 L17128.6221,3153.7031 Q17127.6944,3152.8486 17126.8216,3152.4519 Q17125.9488,3152.0552 17125.021,3152.0552 Q17123.0435,3152.0552 17122.0364,3153.6238 Q17121.0293,3155.1924 17121.0293,3158.2808 Q17121.0293,3161.3569 17122.0364,3162.9255 Q17123.0435,3164.4941 17125.021,3164.4941 Q17125.9488,3164.4941 17126.8216,3164.0974 Q17127.6944,3163.7007 17128.6221,3162.8462 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="374.1571" x="17149.9263" y="3166.65">ActivityWeightedFollowStrategy</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="16763.61" x2="17870.3997" y1="3179.4" y2="3179.4"/><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="16770.61" y="3198.175"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="219.9004" x="16785.61" y="3208.2">rng_ : std::mt19937</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="16770.61" y="3230.725"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="245.3938" x="16785.61" y="3240.75">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="16770.61" y="3263.275"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="251.0813" x="16785.61" y="3273.3">max_follows_ : size_t</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="16763.61" x2="17870.3997" y1="3285.05" y2="3285.05"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="16773.61" cy="3306.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="1079.7897" x="16785.61" y="3313.85">GenerateFollows(users : const std::vector&lt;GeneratedUser&gt;&amp;) : std::vector&lt;GeneratedFollow&gt;</text></g><!--class LogLevel--><g class="entity" data-qualified-name="Infrastructure. Logging.LogLevel" data-source-line="302" id="ent0056"><rect fill="#EBECE3" height="188.75" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="140.2564" x="19153.87" y="2738.63"/><ellipse cx="19171.87" cy="2759.905" fill="#EB937F" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M19177.7733,2769.405 L19166.4208,2769.405 L19166.4208,2751.1799 L19177.7733,2751.1799 L19177.7733,2754.3537 L19170.0219,2754.3537 L19170.0219,2758.2844 L19177.0409,2758.2844 L19177.0409,2761.4582 L19170.0219,2761.4582 L19170.0219,2766.2312 L19177.7733,2766.2312 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="102.2564" x="19188.87" y="2768.43">LogLevel</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="19154.87" x2="19293.1264" y1="2781.18" y2="2781.18"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="75.3437" x="19159.87" y="2809.98">Debug</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="43.5064" x="19159.87" y="2842.53">Info</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="61.3814" x="19159.87" y="2875.08">Warn</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="56.694" x="19159.87" y="2907.63">Error</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="19154.87" x2="19293.1264" y1="2919.38" y2="2919.38"/></g><!--class PipelinePhase--><g class="entity" data-qualified-name="Infrastructure. Logging.PipelinePhase" data-source-line="309" id="ent0057"><rect fill="#EBECE3" height="286.4" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="335.8006" x="19329.1" y="2689.8"/><ellipse cx="19412.1471" cy="2711.075" fill="#EB937F" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M19418.0504,2720.575 L19406.6979,2720.575 L19406.6979,2702.3499 L19418.0504,2702.3499 L19418.0504,2705.5237 L19410.299,2705.5237 L19410.299,2709.4544 L19417.318,2709.4544 L19417.318,2712.6282 L19410.299,2712.6282 L19410.299,2717.4012 L19418.0504,2717.4012 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="159.7064" x="19437.1471" y="2719.6">PipelinePhase</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="19330.1" x2="19663.9006" y1="2732.35" y2="2732.35"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="86.9315" x="19335.1" y="2761.15">Startup</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="181.9003" x="19335.1" y="2793.7">UserGeneration</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="323.8006" x="19335.1" y="2826.25">BreweryAndBeerGeneration</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="223.2315" x="19335.1" y="2858.8">CheckinGeneration</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="202.0317" x="19335.1" y="2891.35">RatingGeneration</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="202.7629" x="19335.1" y="2923.9">FollowGeneration</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="114.9877" x="19335.1" y="2956.45">Teardown</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="19330.1" x2="19663.9006" y1="2968.2" y2="2968.2"/></g><!--class LogEntry--><g class="entity" data-qualified-name="Infrastructure. Logging.LogEntry" data-source-line="319" id="ent0058"><rect fill="#EBECE3" height="221.3" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="616.4693" x="19018.77" y="1995.73"/><ellipse cx="19270.3295" cy="2017.005" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M19274.0253,2025.7301 Q19273.1708,2026.1696 19272.2309,2026.3893 Q19271.2909,2026.609 19270.2533,2026.609 Q19266.5668,2026.609 19264.6259,2024.1798 Q19262.685,2021.7506 19262.685,2017.1608 Q19262.685,2012.5587 19264.6259,2010.1295 Q19266.5668,2007.7003 19270.2533,2007.7003 Q19271.2909,2007.7003 19272.2431,2007.92 Q19273.1952,2008.1398 19274.0253,2008.5792 L19274.0253,2012.5831 Q19273.0976,2011.7286 19272.2248,2011.3319 Q19271.352,2010.9352 19270.4242,2010.9352 Q19268.4467,2010.9352 19267.4396,2012.5038 Q19266.4325,2014.0724 19266.4325,2017.1608 Q19266.4325,2020.2369 19267.4396,2021.8055 Q19268.4467,2023.3741 19270.4242,2023.3741 Q19271.352,2023.3741 19272.2248,2022.9774 Q19273.0976,2022.5807 19274.0253,2021.7262 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="103.3503" x="19295.3295" y="2025.53">LogEntry</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="19019.77" x2="19634.2393" y1="2038.28" y2="2038.28"/><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="19029.77" cy="2060.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="587.4693" x="19041.77" y="2067.08">timestamp : std::chrono::system_clock::time_point</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="19029.77" cy="2092.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="173.3316" x="19041.77" y="2099.63">level : LogLevel</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="19029.77" cy="2125.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="248.444" x="19041.77" y="2132.18">phase : PipelinePhase</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="19029.77" cy="2157.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="235.6693" x="19041.77" y="2164.73">message : std::string</text><g data-visibility-modifier="PUBLIC_FIELD"><ellipse cx="19029.77" cy="2190.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="381.751" x="19041.77" y="2197.28">worker : std::optional&lt;std::string&gt;</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="19019.77" x2="19634.2393" y1="2209.03" y2="2209.03"/></g><!--class ILogger--><g class="entity" data-qualified-name="Infrastructure. Logging.ILogger" data-source-line="327" id="ent0059"><rect fill="#EBECE3" height="123.65" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="431.551" x="18796.22" y="412.73"/><ellipse cx="18945.4705" cy="450.28" fill="#B4A7E5" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M18940.0701,444.7287 L18940.0701,441.5549 L18950.9222,441.5549 L18950.9222,444.7287 L18947.2967,444.7287 L18947.2967,456.6062 L18950.9222,456.6062 L18950.9222,459.78 L18940.0701,459.78 L18940.0701,456.6062 L18943.6956,456.6062 L18943.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="18968.4705" y="442.53">&#171;interface&#187;</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" font-style="italic" lengthAdjust="spacing" textLength="85.15" x="18989.4205" y="475.08">ILogger</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="18797.22" x2="19226.771" y1="487.83" y2="487.83"/><line style="stroke:#4A5837;stroke-width:0.5;" x1="18797.22" x2="19226.771" y1="495.83" y2="495.83"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="18807.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="18819.22" y="524.63">Log(entry : const LogEntry&amp;) : void</text></g><!--class LogProducer--><g class="entity" data-qualified-name="Infrastructure. Logging.LogProducer" data-source-line="331" id="ent0060"><rect fill="#EBECE3" height="123.65" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="502.2441" x="18760.88" y="1241"/><ellipse cx="18932.8675" cy="1262.275" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M18936.5633,1271.0001 Q18935.7088,1271.4396 18934.7689,1271.6593 Q18933.829,1271.879 18932.7914,1271.879 Q18929.1048,1271.879 18927.1639,1269.4498 Q18925.223,1267.0206 18925.223,1262.4308 Q18925.223,1257.8287 18927.1639,1255.3995 Q18929.1048,1252.9703 18932.7914,1252.9703 Q18933.829,1252.9703 18934.7811,1253.19 Q18935.7333,1253.4098 18936.5633,1253.8492 L18936.5633,1257.8531 Q18935.6356,1256.9986 18934.7628,1256.6019 Q18933.89,1256.2052 18932.9623,1256.2052 Q18930.9847,1256.2052 18929.9776,1257.7738 Q18928.9706,1259.3424 18928.9706,1262.4308 Q18928.9706,1265.5069 18929.9776,1267.0755 Q18930.9847,1268.6441 18932.9623,1268.6441 Q18933.89,1268.6441 18934.7628,1268.2474 Q18935.6356,1267.8507 18936.5633,1266.9962 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="148.2691" x="18957.8675" y="1270.8">LogProducer</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="18761.88" x2="19262.1241" y1="1283.55" y2="1283.55"/><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="18768.88" y="1302.325"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="473.2441" x="18783.88" y="1312.35">channel_ : BoundedChannel&lt;LogEntry&gt;&amp;</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="18761.88" x2="19262.1241" y1="1324.1" y2="1324.1"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="18771.88" cy="1345.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="402.551" x="18783.88" y="1352.9">Log(entry : const LogEntry&amp;) : void</text></g><!--class LogDispatcher--><g class="entity" data-qualified-name="Infrastructure. Logging.LogDispatcher" data-source-line="336" id="ent0061"><rect fill="#EBECE3" height="156.2" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="573.6006" x="19298.2" y="1224.73"/><ellipse cx="19495.5752" cy="1246.005" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M19499.271,1254.7301 Q19498.4165,1255.1696 19497.4765,1255.3893 Q19496.5366,1255.609 19495.499,1255.609 Q19491.8125,1255.609 19489.8716,1253.1798 Q19487.9306,1250.7506 19487.9306,1246.1608 Q19487.9306,1241.5587 19489.8716,1239.1295 Q19491.8125,1236.7003 19495.499,1236.7003 Q19496.5366,1236.7003 19497.4887,1236.92 Q19498.4409,1237.1398 19499.271,1237.5792 L19499.271,1241.5831 Q19498.3432,1240.7286 19497.4704,1240.3319 Q19496.5976,1239.9352 19495.6699,1239.9352 Q19493.6924,1239.9352 19492.6853,1241.5038 Q19491.6782,1243.0724 19491.6782,1246.1608 Q19491.6782,1249.2369 19492.6853,1250.8055 Q19493.6924,1252.3741 19495.6699,1252.3741 Q19496.5976,1252.3741 19497.4704,1251.9774 Q19498.3432,1251.5807 19499.271,1250.7262 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="168.8502" x="19520.5752" y="1254.53">LogDispatcher</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="19299.2" x2="19870.8006" y1="1267.28" y2="1267.28"/><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="19306.2" y="1286.055"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="473.2441" x="19321.2" y="1296.08">channel_ : BoundedChannel&lt;LogEntry&gt;&amp;</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="19299.2" x2="19870.8006" y1="1307.83" y2="1307.83"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="19309.2" cy="1329.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="130.1564" x="19321.2" y="1336.63">Run() : void</text><g data-visibility-modifier="PRIVATE_METHOD"><rect fill="#F24D5C" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="19306.2" y="1359.155"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="544.6006" x="19321.2" y="1369.18">ToSpdlogLevel(level) : spdlog::level::level_enum</text></g><!--class BoundedChannel--><g class="entity" data-qualified-name="Infrastructure. Pipeline Channel.BoundedChannel" data-source-line="351" id="ent0068"><rect fill="#EBECE3" height="351.5" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="460.9128" x="6232.54" y="2657.25"/><ellipse cx="6349.7526" cy="2678.525" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M6353.4484,2687.2501 Q6352.5939,2687.6896 6351.654,2687.9093 Q6350.7141,2688.129 6349.6765,2688.129 Q6345.9899,2688.129 6344.049,2685.6998 Q6342.1081,2683.2706 6342.1081,2678.6808 Q6342.1081,2674.0787 6344.049,2671.6495 Q6345.9899,2669.2203 6349.6765,2669.2203 Q6350.7141,2669.2203 6351.6662,2669.44 Q6352.6184,2669.6598 6353.4484,2670.0992 L6353.4484,2674.1031 Q6352.5207,2673.2486 6351.6479,2672.8519 Q6350.7751,2672.4552 6349.8474,2672.4552 Q6347.8698,2672.4552 6346.8627,2674.0238 Q6345.8557,2675.5924 6345.8557,2678.6808 Q6345.8557,2681.7569 6346.8627,2683.3255 Q6347.8698,2684.8941 6349.8474,2684.8941 Q6350.7751,2684.8941 6351.6479,2684.4974 Q6352.5207,2684.1007 6353.4484,2683.2462 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="198.4876" x="6374.7526" y="2687.05">BoundedChannel</text><rect fill="#EBECE3" height="34.55" style="stroke:#4A5837;stroke-width:1;stroke-dasharray:2,2;" width="16" x="6680.4528" y="2654.25"/><text fill="#4A5837" font-family="DM Sans" font-size="25" font-style="italic" lengthAdjust="spacing" textLength="14" x="6681.4528" y="2680.05">T</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="6233.54" x2="6692.4528" y1="2699.8" y2="2699.8"/><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="6240.54" y="2718.575"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="269.9875" x="6255.54" y="2728.6">queue_ : std::queue&lt;T&gt;</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="6240.54" y="2751.125"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="228.9875" x="6255.54" y="2761.15">mutex_ : std::mutex</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="6240.54" y="2783.675"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="390.0504" x="6255.54" y="2793.7">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="6240.54" y="2816.225"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="431.9128" x="6255.54" y="2826.25">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="6240.54" y="2848.775"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="206.5063" x="6255.54" y="2858.8">capacity_ : size_t</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="6240.54" y="2881.325"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="162.8875" x="6255.54" y="2891.35">closed_ : bool</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="6233.54" x2="6692.4528" y1="2903.1" y2="2903.1"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="6243.54" cy="2924.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="229.9814" x="6255.54" y="2931.9">Send(item : T) : void</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="6243.54" cy="2957.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="312.1567" x="6255.54" y="2964.45">Receive() : std::optional&lt;T&gt;</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="6243.54" cy="2989.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="151.7314" x="6255.54" y="2997">Close() : void</text></g><!--class DataPreloader--><g class="entity" data-qualified-name="Infrastructure. Data Preloading.DataPreloader" data-source-line="367" id="ent0070"><rect fill="#EBECE3" height="253.85" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="953.9456" x="11039.03" y="1175.9"/><ellipse cx="11427.9778" cy="1213.45" fill="#B4A7E5" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M11422.5774,1207.8987 L11422.5774,1204.7249 L11433.4295,1204.7249 L11433.4295,1207.8987 L11429.804,1207.8987 L11429.804,1219.7762 L11433.4295,1219.7762 L11433.4295,1222.95 L11422.5774,1222.95 L11422.5774,1219.7762 L11426.2029,1219.7762 L11426.2029,1207.8987 Z " fill="#14180C"/><text fill="#4A5837" font-family="DM Sans" font-size="25" font-style="italic" lengthAdjust="spacing" textLength="127.05" x="11472.4778" y="1205.7">&#171;interface&#187;</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" font-style="italic" lengthAdjust="spacing" textLength="166.05" x="11452.9778" y="1238.25">DataPreloader</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="11040.03" x2="11991.9756" y1="1251" y2="1251"/><line style="stroke:#4A5837;stroke-width:0.5;" x1="11040.03" x2="11991.9756" y1="1259" y2="1259"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="11050.03" cy="1280.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="887.6642" x="11062.03" y="1287.8">LoadLocations(filepath : const std::filesystem::path&amp;) : std::vector&lt;Location&gt;</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="11050.03" cy="1313.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="907.4017" x="11062.03" y="1320.35">LoadBeerStyles(filepath : const std::filesystem::path&amp;) : std::vector&lt;BeerStyle&gt;</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="11050.03" cy="1345.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="924.9456" x="11062.03" y="1352.9">LoadPersonas(filepath : const std::filesystem::path&amp;) : std::vector&lt;UserPersona&gt;</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="11050.03" cy="1394.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="842.6949" x="11062.03" y="1385.45">LoadNamesByCountry(forenames_filepath : const std::filesystem::path&amp;,</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="788.5637" x="11075.33" y="1418">surnames_filepath : const std::filesystem::path&amp;) : NamesByCountry</text></g><!--class JsonLoader--><g class="entity" data-qualified-name="Infrastructure. Data Preloading.JsonLoader" data-source-line="374" id="ent0071"><rect fill="#EBECE3" height="221.3" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="953.9456" x="11039.03" y="1995.73"/><ellipse cx="11443.5152" cy="2017.005" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M11447.211,2025.7301 Q11446.3565,2026.1696 11445.4166,2026.3893 Q11444.4766,2026.609 11443.439,2026.609 Q11439.7525,2026.609 11437.8116,2024.1798 Q11435.8707,2021.7506 11435.8707,2017.1608 Q11435.8707,2012.5587 11437.8116,2010.1295 Q11439.7525,2007.7003 11443.439,2007.7003 Q11444.4766,2007.7003 11445.4288,2007.92 Q11446.3809,2008.1398 11447.211,2008.5792 L11447.211,2012.5831 Q11446.2833,2011.7286 11445.4105,2011.3319 Q11444.5377,2010.9352 11443.6099,2010.9352 Q11441.6324,2010.9352 11440.6253,2012.5038 Q11439.6182,2014.0724 11439.6182,2017.1608 Q11439.6182,2020.2369 11440.6253,2021.8055 Q11441.6324,2023.3741 11443.6099,2023.3741 Q11444.5377,2023.3741 11445.4105,2022.9774 Q11446.2833,2022.5807 11447.211,2021.7262 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="134.9752" x="11468.5152" y="2025.53">JsonLoader</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="11040.03" x2="11991.9756" y1="2038.28" y2="2038.28"/><line style="stroke:#4A5837;stroke-width:0.5;" x1="11040.03" x2="11991.9756" y1="2046.28" y2="2046.28"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="11050.03" cy="2068.055" 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="887.6642" x="11062.03" y="2075.08">LoadLocations(filepath : const std::filesystem::path&amp;) : std::vector&lt;Location&gt;</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="11050.03" cy="2100.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="907.4017" x="11062.03" y="2107.63">LoadBeerStyles(filepath : const std::filesystem::path&amp;) : std::vector&lt;BeerStyle&gt;</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="11050.03" cy="2133.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="924.9456" x="11062.03" y="2140.18">LoadPersonas(filepath : const std::filesystem::path&amp;) : std::vector&lt;UserPersona&gt;</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="11050.03" cy="2181.98" 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="842.6949" x="11062.03" y="2172.73">LoadNamesByCountry(forenames_filepath : const std::filesystem::path&amp;,</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="788.5637" x="11075.33" y="2205.28">surnames_filepath : const std::filesystem::path&amp;) : NamesByCountry</text></g><!--class EnrichmentService--><g class="entity" data-qualified-name="Infrastructure. Enrichment.EnrichmentService" data-source-line="385" id="ent0073"><rect fill="#EBECE3" height="156.2" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="662.5888" x="9998.71" y="1224.73"/><ellipse cx="10215.7169" cy="1262.28" fill="#B4A7E5" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M10210.3165,1256.7287 L10210.3165,1253.5549 L10221.1686,1253.5549 L10221.1686,1256.7287 L10217.5431,1256.7287 L10217.5431,1268.6062 L10221.1686,1268.6062 L10221.1686,1271.78 L10210.3165,1271.78 L10210.3165,1268.6062 L10213.942,1268.6062 L10213.942,1256.7287 Z " fill="#14180C"/><text fill="#4A5837" font-family="DM Sans" font-size="25" font-style="italic" lengthAdjust="spacing" textLength="127.05" x="10286.4794" y="1254.53">&#171;interface&#187;</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" font-style="italic" lengthAdjust="spacing" textLength="218.575" x="10240.7169" y="1287.08">EnrichmentService</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="9999.71" x2="10660.2988" y1="1299.83" y2="1299.83"/><line style="stroke:#4A5837;stroke-width:0.5;" x1="9999.71" x2="10660.2988" y1="1307.83" y2="1307.83"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="10009.71" cy="1345.88" 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="10021.71" y="1336.63">GetLocationContext(loc : const Location&amp;,</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="620.2888" x="10035.01" y="1369.18">strategy : const ContextStrategy&amp;) : LocationContext</text></g><!--class WikipediaService--><g class="entity" data-qualified-name="Infrastructure. Enrichment.WikipediaService" data-source-line="389" id="ent0074"><rect fill="#EBECE3" height="221.3" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="739.0262" x="9980.49" y="1995.73"/><ellipse cx="10245.2436" cy="2017.005" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M10248.9394,2025.7301 Q10248.0849,2026.1696 10247.145,2026.3893 Q10246.205,2026.609 10245.1675,2026.609 Q10241.4809,2026.609 10239.54,2024.1798 Q10237.5991,2021.7506 10237.5991,2017.1608 Q10237.5991,2012.5587 10239.54,2010.1295 Q10241.4809,2007.7003 10245.1675,2007.7003 Q10246.205,2007.7003 10247.1572,2007.92 Q10248.1093,2008.1398 10248.9394,2008.5792 L10248.9394,2012.5831 Q10248.0117,2011.7286 10247.1389,2011.3319 Q10246.2661,2010.9352 10245.3384,2010.9352 Q10243.3608,2010.9352 10242.3537,2012.5038 Q10241.3467,2014.0724 10241.3467,2017.1608 Q10241.3467,2020.2369 10242.3537,2021.8055 Q10243.3608,2023.3741 10245.3384,2023.3741 Q10246.2661,2023.3741 10247.1389,2022.9774 Q10248.0117,2022.5807 10248.9394,2021.7262 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="199.5189" x="10270.2436" y="2025.53">WikipediaService</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="9981.49" x2="10718.5162" y1="2038.28" y2="2038.28"/><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="9988.49" y="2057.055"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="426.6252" x="10003.49" y="2067.08">client_ : std::unique_ptr&lt;WebClient&gt;</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="9988.49" y="2089.605"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="710.0262" x="10003.49" y="2099.63">extract_cache_ : std::unordered_map&lt;std::string, std::string&gt;</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="9981.49" x2="10718.5162" y1="2111.38" y2="2111.38"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="9991.49" cy="2149.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="495.6509" x="10003.49" y="2140.18">GetLocationContext(loc : const Location&amp;,</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="620.2888" x="10016.79" y="2172.73">strategy : const ContextStrategy&amp;) : LocationContext</text><g data-visibility-modifier="PRIVATE_METHOD"><rect fill="#F24D5C" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="9988.49" y="2195.255"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="568.864" x="10003.49" y="2205.28">FetchExtract(query : std::string_view) : std::string</text></g><!--class WebClient--><g class="entity" data-qualified-name="Infrastructure. Enrichment.WebClient" data-source-line="396" id="ent0075"><rect fill="#EBECE3" height="156.2" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="582.6328" x="10058.68" y="2754.9"/><ellipse cx="10283.4714" cy="2792.45" fill="#B4A7E5" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M10278.071,2786.8987 L10278.071,2783.7249 L10288.923,2783.7249 L10288.923,2786.8987 L10285.2975,2786.8987 L10285.2975,2798.7762 L10288.923,2798.7762 L10288.923,2801.95 L10278.071,2801.95 L10278.071,2798.7762 L10281.6965,2798.7762 L10281.6965,2786.8987 Z " fill="#14180C"/><text fill="#4A5837" font-family="DM Sans" font-size="25" font-style="italic" lengthAdjust="spacing" textLength="127.05" x="10306.4714" y="2784.7">&#171;interface&#187;</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" font-style="italic" lengthAdjust="spacing" textLength="121.825" x="10309.0839" y="2817.25">WebClient</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="10059.68" x2="10640.3128" y1="2830" y2="2830"/><line style="stroke:#4A5837;stroke-width:0.5;" x1="10059.68" x2="10640.3128" y1="2838" y2="2838"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="10069.68" cy="2859.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="446.1701" x="10081.68" y="2866.8">Get(url : const std::string&amp;) : std::string</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="10069.68" cy="2892.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="553.6328" x="10081.68" y="2899.35">UrlEncode(value : const std::string&amp;) : std::string</text></g><!--class HttpWebClient--><g class="entity" data-qualified-name="Infrastructure. Enrichment.HttpWebClient" data-source-line="401" id="ent0076"><rect fill="#EBECE3" height="123.65" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="582.6328" x="10058.68" y="3169.4"/><ellipse cx="10257.9182" cy="3190.675" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M10261.614,3199.4001 Q10260.7595,3199.8396 10259.8195,3200.0593 Q10258.8796,3200.279 10257.842,3200.279 Q10254.1555,3200.279 10252.2146,3197.8498 Q10250.2736,3195.4206 10250.2736,3190.8308 Q10250.2736,3186.2287 10252.2146,3183.7995 Q10254.1555,3181.3703 10257.842,3181.3703 Q10258.8796,3181.3703 10259.8317,3181.59 Q10260.7839,3181.8098 10261.614,3182.2492 L10261.614,3186.2531 Q10260.6862,3185.3986 10259.8134,3185.0019 Q10258.9406,3184.6052 10258.0129,3184.6052 Q10256.0354,3184.6052 10255.0283,3186.1738 Q10254.0212,3187.7424 10254.0212,3190.8308 Q10254.0212,3193.9069 10255.0283,3195.4755 Q10256.0354,3197.0441 10258.0129,3197.0441 Q10258.9406,3197.0441 10259.8134,3196.6474 Q10260.6862,3196.2507 10261.614,3195.3962 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="174.1564" x="10282.9182" y="3199.2">HttpWebClient</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="10059.68" x2="10640.3128" y1="3211.95" y2="3211.95"/><line style="stroke:#4A5837;stroke-width:0.5;" x1="10059.68" x2="10640.3128" y1="3219.95" y2="3219.95"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="10069.68" cy="3241.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="446.1701" x="10081.68" y="3248.75">Get(url : const std::string&amp;) : std::string</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="10069.68" cy="3274.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="553.6328" x="10081.68" y="3281.3">UrlEncode(value : const std::string&amp;) : std::string</text></g><!--class IPromptDirectory--><g class="entity" data-qualified-name="Infrastructure. Prompting.IPromptDirectory" data-source-line="410" id="ent0078"><rect fill="#EBECE3" height="123.65" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="479.1885" x="6957.41" y="2771.18"/><ellipse cx="7091.5668" cy="2808.73" fill="#B4A7E5" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M7086.1664,2803.1787 L7086.1664,2800.0049 L7097.0184,2800.0049 L7097.0184,2803.1787 L7093.3929,2803.1787 L7093.3929,2815.0562 L7097.0184,2815.0562 L7097.0184,2818.23 L7086.1664,2818.23 L7086.1664,2815.0562 L7089.7919,2815.0562 L7089.7919,2803.1787 Z " fill="#14180C"/><text fill="#4A5837" font-family="DM Sans" font-size="25" font-style="italic" lengthAdjust="spacing" textLength="127.05" x="7153.4793" y="2800.98">&#171;interface&#187;</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" font-style="italic" lengthAdjust="spacing" textLength="200.875" x="7116.5668" y="2833.53">IPromptDirectory</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="6958.41" x2="7435.5985" y1="2846.28" y2="2846.28"/><line style="stroke:#4A5837;stroke-width:0.5;" x1="6958.41" x2="7435.5985" y1="2854.28" y2="2854.28"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="6968.41" cy="2876.055" 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="6980.41" y="2883.08">Load(key : std::string_view) : std::string</text></g><!--class PromptDirectory--><g class="entity" data-qualified-name="Infrastructure. Prompting.PromptDirectory" data-source-line="414" id="ent0079"><rect fill="#EBECE3" height="188.75" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="717.8574" x="6749.07" y="3136.85"/><ellipse cx="7005.4892" cy="3158.125" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M7009.185,3166.8501 Q7008.3305,3167.2896 7007.3905,3167.5093 Q7006.4506,3167.729 7005.413,3167.729 Q7001.7265,3167.729 6999.7856,3165.2998 Q6997.8446,3162.8706 6997.8446,3158.2808 Q6997.8446,3153.6787 6999.7856,3151.2495 Q7001.7265,3148.8203 7005.413,3148.8203 Q7006.4506,3148.8203 7007.4027,3149.04 Q7008.3549,3149.2598 7009.185,3149.6992 L7009.185,3153.7031 Q7008.2572,3152.8486 7007.3844,3152.4519 Q7006.5116,3152.0552 7005.5839,3152.0552 Q7003.6064,3152.0552 7002.5993,3153.6238 Q7001.5922,3155.1924 7001.5922,3158.2808 Q7001.5922,3161.3569 7002.5993,3162.9255 Q7003.6064,3164.4941 7005.5839,3164.4941 Q7006.5116,3164.4941 7007.3844,3164.0974 Q7008.2572,3163.7007 7009.185,3162.8462 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="195.019" x="7030.4892" y="3166.65">PromptDirectory</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="6750.07" x2="7465.9274" y1="3179.4" y2="3179.4"/><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="6757.07" y="3198.175"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="400.9191" x="6772.07" y="3208.2">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="6757.07" y="3230.725"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="610.1761" x="6772.07" y="3240.75">cache_ : std::unordered_map&lt;std::string, std::string&gt;</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="6750.07" x2="7465.9274" y1="3252.5" y2="3252.5"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="6760.07" cy="3274.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="688.8574" x="6772.07" y="3281.3">PromptDirectory(prompt_dir : const std::filesystem::path&amp;)</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="6760.07" cy="3306.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="450.1885" x="6772.07" y="3313.85">Load(key : std::string_view) : std::string</text></g><!--class DataGenerator--><g class="entity" data-qualified-name="Infrastructure. Data Generation.DataGenerator" data-source-line="426" id="ent0082"><rect fill="#EBECE3" height="579.35" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="629.1699" x="8912.42" y="1013.15"/><ellipse cx="9135.3424" cy="1050.7" fill="#B4A7E5" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M9129.942,1045.1487 L9129.942,1041.9749 L9140.7941,1041.9749 L9140.7941,1045.1487 L9137.1686,1045.1487 L9137.1686,1057.0262 L9140.7941,1057.0262 L9140.7941,1060.2 L9129.942,1060.2 L9129.942,1057.0262 L9133.5675,1057.0262 L9133.5675,1045.1487 Z " fill="#14180C"/><text fill="#4A5837" font-family="DM Sans" font-size="25" font-style="italic" lengthAdjust="spacing" textLength="127.05" x="9183.4799" y="1042.95">&#171;interface&#187;</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" font-style="italic" lengthAdjust="spacing" textLength="173.325" x="9160.3424" y="1075.5">DataGenerator</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="8913.42" x2="9540.5899" y1="1088.25" y2="1088.25"/><line style="stroke:#4A5837;stroke-width:0.5;" x1="8913.42" x2="9540.5899" y1="1096.25" y2="1096.25"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="8923.42" cy="1134.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="520.6074" x="8935.42" y="1125.05">GenerateBrewery(location : const Location&amp;,</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="586.8698" x="8948.72" y="1157.6">context : const LocationContext&amp;) : BreweryResult</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="8923.42" cy="1231.95" 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="8935.42" y="1190.15">GenerateBeer(brewery_id : uint64_t,</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="307.7944" x="8948.72" y="1222.7">location : const Location&amp;,</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="397.5007" x="8948.72" y="1255.25">context : const LocationContext&amp;,</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="427.6008" x="8948.72" y="1287.8">style : const BeerStyle&amp;) : BeerResult</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="8923.42" cy="1345.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="477.7946" x="8935.42" y="1320.35">GenerateUser(city : const EnrichedCity&amp;,</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="353.8195" x="8948.72" y="1352.9">persona : const UserPersona&amp;,</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="392.288" x="8948.72" y="1385.45">name : const Name&amp;) : UserResult</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="8923.42" cy="1443.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="552.251" x="8935.42" y="1418">GenerateCheckin(user : const GeneratedUser&amp;,</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="428.401" x="8948.72" y="1450.55">brewery : const GeneratedBrewery&amp;,</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="541.976" x="8948.72" y="1483.1">timestamp : const std::string&amp;) : CheckinResult</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="8923.42" cy="1541.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="531.051" x="8935.42" y="1515.65">GenerateRating(user : const GeneratedUser&amp;,</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="343.9756" x="8948.72" y="1548.2">beer : const GeneratedBeer&amp;,</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="419.7442" x="8948.72" y="1580.75">checkin_id : uint64_t) : RatingResult</text></g><!--class MockGenerator--><g class="entity" data-qualified-name="Infrastructure. Data Generation.MockGenerator" data-source-line="434" id="ent0083"><rect fill="#EBECE3" height="253.85" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="653.1259" x="8548.44" y="1979.45"/><ellipse cx="8779.406" cy="2000.725" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M8783.1018,2009.4501 Q8782.2473,2009.8896 8781.3073,2010.1093 Q8780.3674,2010.329 8779.3298,2010.329 Q8775.6433,2010.329 8773.7023,2007.8998 Q8771.7614,2005.4706 8771.7614,2000.8808 Q8771.7614,1996.2787 8773.7023,1993.8495 Q8775.6433,1991.4203 8779.3298,1991.4203 Q8780.3674,1991.4203 8781.3195,1991.64 Q8782.2717,1991.8598 8783.1018,1992.2992 L8783.1018,1996.3031 Q8782.174,1995.4486 8781.3012,1995.0519 Q8780.4284,1994.6552 8779.5007,1994.6552 Q8777.5231,1994.6552 8776.5161,1996.2238 Q8775.509,1997.7924 8775.509,2000.8808 Q8775.509,2003.9569 8776.5161,2005.5255 Q8777.5231,2007.0941 8779.5007,2007.0941 Q8780.4284,2007.0941 8781.3012,2006.6974 Q8782.174,2006.3007 8783.1018,2005.4462 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="181.194" x="8804.406" y="2009.25">MockGenerator</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="8549.44" x2="9200.5659" y1="2022" y2="2022"/><line style="stroke:#4A5837;stroke-width:0.5;" x1="8549.44" x2="9200.5659" y1="2030" y2="2030"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="8559.44" cy="2051.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="421.601" x="8571.44" y="2058.8">GenerateBrewery(...) : BreweryResult</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="8559.44" cy="2084.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="337.1756" x="8571.44" y="2091.35">GenerateBeer(...) : BeerResult</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="8559.44" cy="2116.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="336.5006" x="8571.44" y="2123.9">GenerateUser(...) : UserResult</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="8559.44" cy="2149.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="419.163" x="8571.44" y="2156.45">GenerateCheckin(...) : CheckinResult</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="8559.44" cy="2181.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="376.7633" x="8571.44" y="2189">GenerateRating(...) : RatingResult</text><g data-visibility-modifier="PRIVATE_METHOD"><rect fill="#F24D5C" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="8556.44" y="2211.525"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="624.1259" x="8571.44" y="2221.55">DeterministicHash(location : const Location&amp;) : size_t</text></g><!--class LlamaGenerator--><g class="entity" data-qualified-name="Infrastructure. Data Generation.LlamaGenerator" data-source-line="443" id="ent0084"><rect fill="#EBECE3" height="514.25" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="687.6946" x="9236.15" y="1849.25"/><ellipse cx="9481.6722" cy="1870.525" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M9485.368,1879.2501 Q9484.5135,1879.6896 9483.5735,1879.9093 Q9482.6336,1880.129 9481.596,1880.129 Q9477.9095,1880.129 9475.9685,1877.6998 Q9474.0276,1875.2706 9474.0276,1870.6808 Q9474.0276,1866.0787 9475.9685,1863.6495 Q9477.9095,1861.2203 9481.596,1861.2203 Q9482.6336,1861.2203 9483.5857,1861.44 Q9484.5379,1861.6598 9485.368,1862.0992 L9485.368,1866.1031 Q9484.4402,1865.2486 9483.5674,1864.8519 Q9482.6946,1864.4552 9481.7669,1864.4552 Q9479.7893,1864.4552 9478.7823,1866.0238 Q9477.7752,1867.5924 9477.7752,1870.6808 Q9477.7752,1873.7569 9478.7823,1875.3255 Q9479.7893,1876.8941 9481.7669,1876.8941 Q9482.6946,1876.8941 9483.5674,1876.4974 Q9484.4402,1876.1007 9485.368,1875.2462 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="186.6503" x="9506.6722" y="1879.05">LlamaGenerator</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="9237.15" x2="9922.8446" y1="1891.8" y2="1891.8"/><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="9244.15" y="1910.575"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="259.1498" x="9259.15" y="1920.6">model_ : ModelHandle</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="9244.15" y="1943.125"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="298.2252" x="9259.15" y="1953.15">context_ : ContextHandle</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="9244.15" y="1975.675"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="658.6946" x="9259.15" y="1985.7">prompt_formatter_ : std::unique_ptr&lt;PromptFormatter&gt;</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="9244.15" y="2008.225"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="652.5506" x="9259.15" y="2018.25">prompt_directory_ : std::unique_ptr&lt;IPromptDirectory&gt;</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="9244.15" y="2040.775"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="219.9004" x="9259.15" y="2050.8">rng_ : std::mt19937</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="9237.15" x2="9922.8446" y1="2062.55" y2="2062.55"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="9247.15" cy="2084.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="421.601" x="9259.15" y="2091.35">GenerateBrewery(...) : BreweryResult</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="9247.15" cy="2116.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="337.1756" x="9259.15" y="2123.9">GenerateBeer(...) : BeerResult</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="9247.15" cy="2149.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="336.5006" x="9259.15" y="2156.45">GenerateUser(...) : UserResult</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="9247.15" cy="2181.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="419.163" x="9259.15" y="2189">GenerateCheckin(...) : CheckinResult</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="9247.15" cy="2214.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="376.7633" x="9259.15" y="2221.55">GenerateRating(...) : RatingResult</text><g data-visibility-modifier="PRIVATE_METHOD"><rect fill="#F24D5C" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="9244.15" y="2244.075"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="516.8508" x="9259.15" y="2254.1">Load(opts : const GeneratorOptions&amp;) : void</text><g data-visibility-modifier="PRIVATE_METHOD"><rect fill="#F24D5C" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="9244.15" y="2292.9"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="420.7691" x="9259.15" y="2286.65">Infer(system_prompt, user_prompt,</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="400.1508" x="9272.45" y="2319.2">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="9244.15" y="2341.725"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="399.4818" x="9259.15" y="2351.75">ValidateModelArchitecture() : void</text></g><!--class PromptFormatter--><g class="entity" data-qualified-name="Infrastructure. Data Generation.PromptFormatter" data-source-line="459" id="ent0085"><rect fill="#EBECE3" height="188.75" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="539.4949" x="9310.25" y="2738.63"/><ellipse cx="9473.9349" cy="2776.18" fill="#B4A7E5" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M9468.5346,2770.6287 L9468.5346,2767.4549 L9479.3866,2767.4549 L9479.3866,2770.6287 L9475.7611,2770.6287 L9475.7611,2782.5062 L9479.3866,2782.5062 L9479.3866,2785.68 L9468.5346,2785.68 L9468.5346,2782.5062 L9472.16,2782.5062 L9472.16,2770.6287 Z " fill="#14180C"/><text fill="#4A5837" font-family="DM Sans" font-size="25" font-style="italic" lengthAdjust="spacing" textLength="127.05" x="9536.4724" y="2768.43">&#171;interface&#187;</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" font-style="italic" lengthAdjust="spacing" textLength="202.125" x="9498.9349" y="2800.98">PromptFormatter</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="9311.25" x2="9848.7449" y1="2813.73" y2="2813.73"/><line style="stroke:#4A5837;stroke-width:0.5;" x1="9311.25" x2="9848.7449" y1="2821.73" y2="2821.73"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="9321.25" cy="2859.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="487.5133" x="9333.25" y="2850.53">Format(system_prompt : std::string_view,</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="497.1948" x="9346.55" y="2883.08">user_prompt : std::string_view) : std::string</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="9321.25" cy="2908.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="476.6135" x="9333.25" y="2915.63">ExpectedArchitecture() : std::string_view</text></g><!--class Gemma4JinjaPromptFormatter--><g class="entity" data-qualified-name="Infrastructure. Data Generation.Gemma4JinjaPromptFormatter" data-source-line="464" id="ent0086"><rect fill="#EBECE3" height="123.65" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="505.6135" x="9327.19" y="3169.4"/><ellipse cx="9394.1434" cy="3190.675" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M9397.8392,3199.4001 Q9396.9847,3199.8396 9396.0448,3200.0593 Q9395.1048,3200.279 9394.0672,3200.279 Q9390.3807,3200.279 9388.4398,3197.8498 Q9386.4989,3195.4206 9386.4989,3190.8308 Q9386.4989,3186.2287 9388.4398,3183.7995 Q9390.3807,3181.3703 9394.0672,3181.3703 Q9395.1048,3181.3703 9396.057,3181.59 Q9397.0091,3181.8098 9397.8392,3182.2492 L9397.8392,3186.2531 Q9396.9115,3185.3986 9396.0386,3185.0019 Q9395.1658,3184.6052 9394.2381,3184.6052 Q9392.2606,3184.6052 9391.2535,3186.1738 Q9390.2464,3187.7424 9390.2464,3190.8308 Q9390.2464,3193.9069 9391.2535,3195.4755 Q9392.2606,3197.0441 9394.2381,3197.0441 Q9395.1658,3197.0441 9396.0386,3196.6474 Q9396.9115,3196.2507 9397.8392,3195.3962 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="361.7067" x="9419.1434" y="3199.2">Gemma4JinjaPromptFormatter</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="9328.19" x2="9831.8035" y1="3211.95" y2="3211.95"/><line style="stroke:#4A5837;stroke-width:0.5;" x1="9328.19" x2="9831.8035" y1="3219.95" y2="3219.95"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="9338.19" cy="3241.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="248.9445" x="9350.19" y="3248.75">Format(...) : std::string</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="9338.19" cy="3274.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="476.6135" x="9350.19" y="3281.3">ExpectedArchitecture() : std::string_view</text></g><!--class ExportService--><g class="entity" data-qualified-name="Infrastructure. Data Export.ExportService" data-source-line="473" id="ent0088"><rect fill="#EBECE3" height="351.5" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="778.6015" x="17926.7" y="1127.08"/><ellipse cx="18230.2007" cy="1164.63" fill="#B4A7E5" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M18224.8004,1159.0787 L18224.8004,1155.9049 L18235.6524,1155.9049 L18235.6524,1159.0787 L18232.0269,1159.0787 L18232.0269,1170.9562 L18235.6524,1170.9562 L18235.6524,1174.13 L18224.8004,1174.13 L18224.8004,1170.9562 L18228.4258,1170.9562 L18228.4258,1159.0787 Z " fill="#14180C"/><text fill="#4A5837" font-family="DM Sans" font-size="25" font-style="italic" lengthAdjust="spacing" textLength="127.05" x="18272.4757" y="1156.88">&#171;interface&#187;</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" font-style="italic" lengthAdjust="spacing" textLength="161.6" x="18255.2007" y="1189.43">ExportService</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="17927.7" x2="18704.3015" y1="1202.18" y2="1202.18"/><line style="stroke:#4A5837;stroke-width:0.5;" x1="17927.7" x2="18704.3015" y1="1210.18" y2="1210.18"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="17937.7" cy="1231.955" 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="17949.7" y="1238.98">Initialize() : void</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="17937.7" cy="1264.505" 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="17949.7" y="1271.53">ProcessBrewery(brewery : const GeneratedBrewery&amp;) : uint64_t</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="17937.7" cy="1297.055" 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="17949.7" y="1304.08">ProcessBeer(beer : const GeneratedBeer&amp;) : uint64_t</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="17937.7" cy="1329.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="619.3073" x="17949.7" y="1336.63">ProcessUser(user : const GeneratedUser&amp;) : uint64_t</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="17937.7" cy="1362.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="741.7197" x="17949.7" y="1369.18">ProcessCheckin(checkin : const GeneratedCheckin&amp;) : uint64_t</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="17937.7" cy="1394.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="624.1639" x="17949.7" y="1401.73">ProcessRating(rating : const GeneratedRating&amp;) : void</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="17937.7" cy="1427.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="627.0888" x="17949.7" y="1434.28">ProcessFollow(follow : const GeneratedFollow&amp;) : void</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="17937.7" cy="1459.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="171.169" x="17949.7" y="1466.83">Finalize() : void</text></g><!--class SqliteExportService--><g class="entity" data-qualified-name="Infrastructure. Data Export.SqliteExportService" data-source-line="484" id="ent0089"><rect fill="#EBECE3" height="839.75" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="766.7638" x="17932.62" y="1686.5"/><ellipse cx="18197.2955" cy="1707.775" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M18200.9913,1716.5001 Q18200.1368,1716.9396 18199.1968,1717.1593 Q18198.2569,1717.379 18197.2193,1717.379 Q18193.5328,1717.379 18191.5918,1714.9498 Q18189.6509,1712.5206 18189.6509,1707.9308 Q18189.6509,1703.3287 18191.5918,1700.8995 Q18193.5328,1698.4703 18197.2193,1698.4703 Q18198.2569,1698.4703 18199.209,1698.69 Q18200.1612,1698.9098 18200.9913,1699.3492 L18200.9913,1703.3531 Q18200.0635,1702.4986 18199.1907,1702.1019 Q18198.3179,1701.7052 18197.3902,1701.7052 Q18195.4126,1701.7052 18194.4056,1703.2738 Q18193.3985,1704.8424 18193.3985,1707.9308 Q18193.3985,1711.0069 18194.4056,1712.5755 Q18195.4126,1714.1441 18197.3902,1714.1441 Q18198.3179,1714.1441 18199.1907,1713.7474 Q18200.0635,1713.3507 18200.9913,1712.4962 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="227.4129" x="18222.2955" y="1716.3">SqliteExportService</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="17933.62" x2="18698.3838" y1="1729.05" y2="1729.05"/><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="17940.62" y="1747.825"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="685.2754" x="17955.62" y="1757.85">date_time_provider_ : std::unique_ptr&lt;DateTimeProvider&gt;</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="17940.62" y="1780.375"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="416.8437" x="17955.62" y="1790.4">db_handle_ : SqliteDatabaseHandle</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="17940.62" y="1812.925"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="550.3255" x="17955.62" y="1822.95">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="17940.62" y="1845.475"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="552.6006" x="17955.62" y="1855.5">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="17940.62" y="1878.025"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="510.3878" x="17955.62" y="1888.05">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="17940.62" y="1910.575"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="507.4067" x="17955.62" y="1920.6">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="17940.62" y="1943.125"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="547.1567" x="17955.62" y="1953.15">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="17940.62" y="1975.675"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="523.9818" x="17955.62" y="1985.7">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="17940.62" y="2008.225"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="525.4443" x="17955.62" y="2018.25">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="17940.62" y="2040.775"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="293.6815" x="17955.62" y="2050.8">transaction_open_ : bool</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="17940.62" y="2073.325"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="707.607" x="17955.62" y="2083.35">location_cache_ : std::unordered_map&lt;std::string, uint64_t&gt;</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="17940.62" y="2105.875"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="709.882" x="17955.62" y="2115.9">brewery_cache_ : std::unordered_map&lt;std::string, uint64_t&gt;</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="17933.62" x2="18698.3838" y1="2127.65" y2="2127.65"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="17943.62" cy="2149.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="179.4066" x="17955.62" y="2156.45">Initialize() : void</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="17943.62" cy="2181.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="737.7638" x="17955.62" y="2189">ProcessRecord(brewery : const GeneratedBrewery&amp;) : uint64_t</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="17943.62" cy="2214.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="653.3384" x="17955.62" y="2221.55">ProcessRecord(beer : const GeneratedBeer&amp;) : uint64_t</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="17943.62" cy="2247.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="650.0197" x="17955.62" y="2254.1">ProcessRecord(user : const GeneratedUser&amp;) : uint64_t</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="17943.62" cy="2279.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="731.101" x="17955.62" y="2286.65">ProcessRecord(checkin : const GeneratedCheckin&amp;) : uint64_t</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="17943.62" cy="2312.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="634.7451" x="17955.62" y="2319.2">ProcessRecord(rating : const GeneratedRating&amp;) : void</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="17943.62" cy="2344.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="636.9388" x="17955.62" y="2351.75">ProcessRecord(follow : const GeneratedFollow&amp;) : void</text><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="17943.62" cy="2377.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="171.169" x="17955.62" y="2384.3">Finalize() : void</text><g data-visibility-modifier="PRIVATE_METHOD"><rect fill="#F24D5C" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="17940.62" y="2406.825"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="272.6504" x="17955.62" y="2416.85">InitializeSchema() : void</text><g data-visibility-modifier="PRIVATE_METHOD"><rect fill="#F24D5C" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="17940.62" y="2439.375"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="312.3755" x="17955.62" y="2449.4">PrepareStatements() : void</text><g data-visibility-modifier="PRIVATE_METHOD"><rect fill="#F24D5C" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="17940.62" y="2471.925"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="398.9756" x="17955.62" y="2481.95">RollbackAndCloseNoThrow() : void</text><g data-visibility-modifier="PRIVATE_METHOD"><rect fill="#F24D5C" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="17940.62" y="2504.475"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="306.238" x="17955.62" y="2514.5">FinalizeStatements() : void</text></g><!--class DateTimeProvider--><g class="entity" data-qualified-name="Infrastructure. Data Export.DateTimeProvider" data-source-line="511" id="ent0090"><rect fill="#EBECE3" height="123.65" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="393.7631" x="18119.12" y="2771.18"/><ellipse cx="18206.6391" cy="2808.73" fill="#B4A7E5" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M18201.2387,2803.1787 L18201.2387,2800.0049 L18212.0907,2800.0049 L18212.0907,2803.1787 L18208.4652,2803.1787 L18208.4652,2815.0562 L18212.0907,2815.0562 L18212.0907,2818.23 L18201.2387,2818.23 L18201.2387,2815.0562 L18204.8642,2815.0562 L18204.8642,2803.1787 Z " fill="#14180C"/><text fill="#4A5837" font-family="DM Sans" font-size="25" font-style="italic" lengthAdjust="spacing" textLength="127.05" x="18272.4766" y="2800.98">&#171;interface&#187;</text><text fill="#3F4724" font-family="'DM Sans'" font-size="25" font-style="italic" lengthAdjust="spacing" textLength="208.725" x="18231.6391" y="2833.53">DateTimeProvider</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="18120.12" x2="18511.8831" y1="2846.28" y2="2846.28"/><line style="stroke:#4A5837;stroke-width:0.5;" x1="18120.12" x2="18511.8831" y1="2854.28" y2="2854.28"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="18130.12" cy="2876.055" 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="18142.12" y="2883.08">GetUtcTimestamp() : std::string</text></g><!--class SystemDateTimeProvider--><g class="entity" data-qualified-name="Infrastructure. Data Export.SystemDateTimeProvider" data-source-line="515" id="ent0091"><rect fill="#EBECE3" height="91.1" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="393.7631" x="18119.12" y="3185.67"/><ellipse cx="18164.2833" cy="3206.945" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M18167.9791,3215.6701 Q18167.1246,3216.1096 18166.1847,3216.3293 Q18165.2447,3216.549 18164.2071,3216.549 Q18160.5206,3216.549 18158.5797,3214.1198 Q18156.6388,3211.6906 18156.6388,3207.1008 Q18156.6388,3202.4987 18158.5797,3200.0695 Q18160.5206,3197.6403 18164.2071,3197.6403 Q18165.2447,3197.6403 18166.1969,3197.86 Q18167.149,3198.0798 18167.9791,3198.5192 L18167.9791,3202.5231 Q18167.0514,3201.6686 18166.1786,3201.2719 Q18165.3058,3200.8752 18164.378,3200.8752 Q18162.4005,3200.8752 18161.3934,3202.4438 Q18160.3863,3204.0124 18160.3863,3207.1008 Q18160.3863,3210.1769 18161.3934,3211.7455 Q18162.4005,3213.3141 18164.378,3213.3141 Q18165.3058,3213.3141 18166.1786,3212.9174 Q18167.0514,3212.5207 18167.9791,3211.6662 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="295.4002" x="18187.3196" y="3215.47">SystemDateTimeProvider</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="18120.12" x2="18511.8831" y1="3228.22" y2="3228.22"/><line style="stroke:#4A5837;stroke-width:0.5;" x1="18120.12" x2="18511.8831" y1="3236.22" y2="3236.22"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="18130.12" cy="3257.995" 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="18142.12" y="3265.02">GetUtcTimestamp() : std::string</text></g><!--class BiergartenPipelineOrchestrator--><g class="entity" data-qualified-name="BiergartenPipelineOrchestrator" data-source-line="521" id="ent0092"><rect fill="#EBECE3" height="815.2" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="889.639" x="8782.18" y="66.95"/><ellipse cx="9041.6742" cy="88.225" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M9045.37,96.9501 Q9044.5155,97.3896 9043.5755,97.6093 Q9042.6356,97.829 9041.598,97.829 Q9037.9115,97.829 9035.9705,95.3998 Q9034.0296,92.9706 9034.0296,88.3808 Q9034.0296,83.7787 9035.9705,81.3495 Q9037.9115,78.9203 9041.598,78.9203 Q9042.6356,78.9203 9043.5877,79.14 Q9044.5399,79.3598 9045.37,79.7992 L9045.37,83.8031 Q9044.4422,82.9486 9043.5694,82.5519 Q9042.6966,82.1552 9041.7689,82.1552 Q9039.7913,82.1552 9038.7843,83.7238 Q9037.7772,85.2924 9037.7772,88.3808 Q9037.7772,91.4569 9038.7843,93.0255 Q9039.7913,94.5941 9041.7689,94.5941 Q9042.6966,94.5941 9043.5694,94.1974 Q9044.4422,93.8007 9045.37,92.9462 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="360.6507" x="9066.6742" y="96.75">BiergartenPipelineOrchestrator</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="8783.18" x2="9670.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="8790.18" y="128.275"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="518.0879" x="8805.18" y="138.3">preloader_ : std::unique_ptr&lt;DataPreloader&gt;</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="8790.18" y="160.825"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="692.3258" x="8805.18" y="170.85">enrichment_service_ : std::unique_ptr&lt;EnrichmentService&gt;</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="8790.18" y="193.375"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="526.5819" x="8805.18" y="203.4">generator_ : std::unique_ptr&lt;DataGenerator&gt;</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="8790.18" y="225.925"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="391.613" x="8805.18" y="235.95">logger_ : std::unique_ptr&lt;Logger&gt;</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="8790.18" y="258.475"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="501.8068" x="8805.18" y="268.5">exporter_ : std::unique_ptr&lt;ExportService&gt;</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="8790.18" y="291.025"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="748.0886" x="8805.18" y="301.05">brewery_context_strategy_ : std::unique_ptr&lt;ContextStrategy&gt;</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="8790.18" y="323.575"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="662.9197" x="8805.18" y="333.6">sampling_strategy_ : std::unique_ptr&lt;SamplingStrategy&gt;</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="8790.18" y="356.125"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="789.1635" x="8805.18" y="366.15">beer_selection_strategy_ : std::unique_ptr&lt;BeerSelectionStrategy&gt;</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="8790.18" y="388.675"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="772.6134" x="8805.18" y="398.7">checkin_strategy_ : std::unique_ptr&lt;CheckinDistributionStrategy&gt;</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="8790.18" y="421.225"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="724.2263" x="8805.18" y="431.25">follow_strategy_ : std::unique_ptr&lt;FollowGenerationStrategy&gt;</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="8790.18" y="453.775"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="521.9255" x="8805.18" y="463.8">beer_style_palette_ : std::vector&lt;BeerStyle&gt;</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="8790.18" y="486.325"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="347.7252" x="8805.18" y="496.35">options_ : ApplicationOptions</text><line style="stroke:#4A5837;stroke-width:1;" x1="8783.18" x2="9670.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="8790.18" y="526.875"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="480.3693" x="8805.18" y="536.9">user_pool_ : std::vector&lt;GeneratedUser&gt;</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="8790.18" y="559.425"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="568.1133" x="8805.18" y="569.45">brewery_pool_ : std::vector&lt;GeneratedBrewery&gt;</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="8790.18" y="591.975"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="483.688" x="8805.18" y="602">beer_pool_ : std::vector&lt;GeneratedBeer&gt;</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="8790.18" y="624.525"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="561.4505" x="8805.18" y="634.55">checkin_pool_ : std::vector&lt;GeneratedCheckin&gt;</text><g data-visibility-modifier="PRIVATE_FIELD"><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="8790.18" y="657.075"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="519.2695" x="8805.18" y="667.1">follow_pool_ : std::vector&lt;GeneratedFollow&gt;</text><line style="stroke:#4A5837;stroke-width:1;" x1="8783.18" x2="9670.819" y1="678.85" y2="678.85"/><g data-visibility-modifier="PUBLIC_METHOD"><ellipse cx="8793.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="8805.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="8790.18" y="730.175"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="718.7388" x="8805.18" y="740.2">RunUserPhase(locations : const std::vector&lt;Location&gt;&amp;) : void</text><g data-visibility-modifier="PRIVATE_METHOD"><rect fill="#F24D5C" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="8790.18" y="762.725"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="860.639" x="8805.18" y="772.75">RunBreweryAndBeerPhase(locations : const std::vector&lt;Location&gt;&amp;) : void</text><g data-visibility-modifier="PRIVATE_METHOD"><rect fill="#F24D5C" height="6" style="stroke:#C82930;stroke-width:1;" width="6" x="8790.18" y="795.275"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="293.119" x="8805.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="8790.18" y="827.825"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="271.9192" x="8805.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="8790.18" y="860.375"/></g><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="272.6505" x="8805.18" y="870.4">RunFollowPhase() : void</text></g><!--class Logger--><g class="entity" data-qualified-name="Logger" data-source-line="559" id="ent0102"><rect fill="#EBECE3" height="58.55" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="117.3315" x="7646.33" y="1273.55"/><ellipse cx="7664.33" cy="1294.825" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M7668.0258,1303.5501 Q7667.1713,1303.9896 7666.2314,1304.2093 Q7665.2914,1304.429 7664.2538,1304.429 Q7660.5673,1304.429 7658.6264,1301.9998 Q7656.6855,1299.5706 7656.6855,1294.9808 Q7656.6855,1290.3787 7658.6264,1287.9495 Q7660.5673,1285.5203 7664.2538,1285.5203 Q7665.2914,1285.5203 7666.2436,1285.74 Q7667.1957,1285.9598 7668.0258,1286.3992 L7668.0258,1290.4031 Q7667.0981,1289.5486 7666.2253,1289.1519 Q7665.3525,1288.7552 7664.4247,1288.7552 Q7662.4472,1288.7552 7661.4401,1290.3238 Q7660.433,1291.8924 7660.433,1294.9808 Q7660.433,1298.0569 7661.4401,1299.6255 Q7662.4472,1301.1941 7664.4247,1301.1941 Q7665.3525,1301.1941 7666.2253,1300.7974 Q7667.0981,1300.4007 7668.0258,1299.5462 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="79.3315" x="7681.33" y="1303.35">Logger</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="7647.33" x2="7762.6615" y1="1316.1" y2="1316.1"/><line style="stroke:#4A5837;stroke-width:0.5;" x1="7647.33" x2="7762.6615" y1="1324.1" y2="1324.1"/></g><!--class PipelineLogger--><g class="entity" data-qualified-name="PipelineLogger" data-source-line="570" id="ent0110"><rect fill="#EBECE3" height="58.55" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="207.8003" x="6359.1" y="2077.1"/><ellipse cx="6377.1" cy="2098.375" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M6380.7958,2107.1001 Q6379.9413,2107.5396 6379.0014,2107.7593 Q6378.0614,2107.979 6377.0238,2107.979 Q6373.3373,2107.979 6371.3964,2105.5498 Q6369.4555,2103.1206 6369.4555,2098.5308 Q6369.4555,2093.9287 6371.3964,2091.4995 Q6373.3373,2089.0703 6377.0238,2089.0703 Q6378.0614,2089.0703 6379.0136,2089.29 Q6379.9657,2089.5098 6380.7958,2089.9492 L6380.7958,2093.9531 Q6379.8681,2093.0986 6378.9953,2092.7019 Q6378.1225,2092.3052 6377.1947,2092.3052 Q6375.2172,2092.3052 6374.2101,2093.8738 Q6373.203,2095.4424 6373.203,2098.5308 Q6373.203,2101.6069 6374.2101,2103.1755 Q6375.2172,2104.7441 6377.1947,2104.7441 Q6378.1225,2104.7441 6378.9953,2104.3474 Q6379.8681,2103.9507 6380.7958,2103.0962 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="169.8003" x="6394.1" y="2106.9">PipelineLogger</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="6360.1" x2="6565.9003" y1="2119.65" y2="2119.65"/><line style="stroke:#4A5837;stroke-width:0.5;" x1="6360.1" x2="6565.9003" y1="2127.65" y2="2127.65"/></g><!--class LogWorker--><g class="entity" data-qualified-name="LogWorker" data-source-line="597" id="ent0134"><rect fill="#EBECE3" height="58.55" rx="2.5" ry="2.5" style="stroke:#4A5837;stroke-width:0.5;" width="164.2628" x="6601.87" y="2077.1"/><ellipse cx="6619.87" cy="2098.375" fill="#ADD1B2" rx="14" ry="14" style="stroke:#181818;stroke-width:1;"/><path d="M6623.5658,2107.1001 Q6622.7113,2107.5396 6621.7714,2107.7593 Q6620.8314,2107.979 6619.7938,2107.979 Q6616.1073,2107.979 6614.1664,2105.5498 Q6612.2255,2103.1206 6612.2255,2098.5308 Q6612.2255,2093.9287 6614.1664,2091.4995 Q6616.1073,2089.0703 6619.7938,2089.0703 Q6620.8314,2089.0703 6621.7836,2089.29 Q6622.7357,2089.5098 6623.5658,2089.9492 L6623.5658,2093.9531 Q6622.6381,2093.0986 6621.7653,2092.7019 Q6620.8925,2092.3052 6619.9647,2092.3052 Q6617.9872,2092.3052 6616.9801,2093.8738 Q6615.973,2095.4424 6615.973,2098.5308 Q6615.973,2101.6069 6616.9801,2103.1755 Q6617.9872,2104.7441 6619.9647,2104.7441 Q6620.8925,2104.7441 6621.7653,2104.3474 Q6622.6381,2103.9507 6623.5658,2103.0962 Z " fill="#14180C"/><text fill="#3F4724" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="126.2628" x="6636.87" y="2106.9">LogWorker</text><line style="stroke:#4A5837;stroke-width:0.5;" x1="6602.87" x2="6765.1328" y1="2119.65" y2="2119.65"/><line style="stroke:#4A5837;stroke-width:0.5;" x1="6602.87" x2="6765.1328" y1="2127.65" y2="2127.65"/></g><!--reverse link NamesByCountry to ForenameEntry--><g class="link" data-entity-1="ent0013" data-entity-2="ent0012" data-link-type="composition" data-source-line="107" id="lnk17"><path codeLine="107" d="M569.8227,1409.1898 C596.3227,1575.0998 648.96,1904.73 671.22,2044.1" fill="none" id="NamesByCountry-backto-ForenameEntry" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="567.93,1397.34,564.9264,1403.8958,569.8227,1409.1898,572.8263,1402.634,567.93,1397.34" style="stroke:#656F33;stroke-width:1;"/><text fill="#14180C" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="39" x="630.304" y="2028.8563">0..*</text></g><!--link NamesByCountry to Name--><g class="link" data-entity-1="ent0013" data-entity-2="ent0011" data-link-type="dependency" data-source-line="108" id="lnk18"><path codeLine="108" d="M532.82,1397.34 C498.32,1557.16 429.936,1874.0251 397.976,2022.0851" fill="none" id="NamesByCountry-to-Name" style="stroke:#656F33;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="#656F33" points="396.71,2027.95,402.5189,2019.9966,397.765,2023.0626,394.699,2018.3086,396.71,2027.95" style="stroke:#656F33;stroke-width:1;"/><text fill="#14180C" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="110.8001" x="483" y="1648.3">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="190" id="lnk32"><path codeLine="190" d="M1932,2196.92 C1932,2336.21 1932,2615.18 1932,2754.46" fill="none" id="LocationContext-backto-Completeness" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="1932,2184.92,1928,2190.92,1932,2196.92,1936,2190.92,1932,2184.92" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link ApplicationOptions to GeneratorOptions--><g class="link" data-entity-1="ent0037" data-entity-2="ent0035" data-link-type="composition" data-source-line="218" id="lnk38"><path codeLine="218" d="M8235,2180.53 C8235,2312.07 8235,2609.65 8235,2754.6" fill="none" id="ApplicationOptions-backto-GeneratorOptions" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="8235,2168.53,8231,2174.53,8235,2180.53,8239,2174.53,8235,2168.53" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link ApplicationOptions to PipelineOptions--><g class="link" data-entity-1="ent0037" data-entity-2="ent0036" data-link-type="composition" data-source-line="219" id="lnk39"><path codeLine="219" d="M8185.7963,2178.3941 C8091.1263,2315.0441 7870.16,2634.01 7775.43,2770.75" fill="none" id="ApplicationOptions-backto-PipelineOptions" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="8192.63,2168.53,8185.9251,2171.1841,8185.7963,2178.3941,8192.5011,2175.74,8192.63,2168.53" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link GeneratorOptions to SamplingOptions--><g class="link" data-entity-1="ent0035" data-entity-2="ent0034" data-link-type="aggregation" data-source-line="220" id="lnk40"><path codeLine="220" d="M8235,2923.34 C8235,2982.79 8235,3053.72 8235,3120.1" fill="none" id="GeneratorOptions-backto-SamplingOptions" style="stroke:#656F33;stroke-width:1;"/><polygon fill="none" points="8235,2911.34,8231,2917.34,8235,2923.34,8239,2917.34,8235,2911.34" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link LogEntry to LogLevel--><g class="link" data-entity-1="ent0058" data-entity-2="ent0056" data-link-type="composition" data-source-line="342" id="lnk62"><path codeLine="342" d="M19309.6708,2229.3105 C19289.4608,2371.4505 19256.33,2604.53 19237.33,2738.24" fill="none" id="LogEntry-backto-LogLevel" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="19311.36,2217.43,19306.5552,2222.8072,19309.6708,2229.3105,19314.4756,2223.9333,19311.36,2217.43" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link LogEntry to PipelinePhase--><g class="link" data-entity-1="ent0058" data-entity-2="ent0057" data-link-type="composition" data-source-line="343" id="lnk63"><path codeLine="343" d="M19355.5611,2229.1127 C19385.1711,2355.3127 19431.05,2550.89 19463.54,2689.37" fill="none" id="LogEntry-backto-PipelinePhase" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="19352.82,2217.43,19350.2963,2224.1851,19355.5611,2229.1127,19358.0848,2222.3577,19352.82,2217.43" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link ILogger to LogProducer--><g class="link" data-entity-1="ent0059" data-entity-2="ent0060" data-link-type="extension" data-source-line="344" id="lnk64"><path codeLine="344" d="M19012,554.64 C19012,707.62 19012,1087.82 19012,1240.77" fill="none" id="ILogger-backto-LogProducer" style="stroke:#656F33;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="19012,536.64,19006,554.64,19018,554.64,19012,536.64" style="stroke:#656F33;stroke-width:1;"/></g><!--link LogProducer to LogEntry--><g class="link" data-entity-1="ent0060" data-entity-2="ent0058" data-link-type="dependency" data-source-line="345" id="lnk65"><path codeLine="345" d="M19036.06,1365.06 C19089.06,1499.92 19214.2854,1818.5557 19281.5454,1989.7057" fill="none" id="LogProducer-to-LogEntry" style="stroke:#656F33;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="#656F33" points="19283.74,1995.29,19284.171,1985.4506,19281.9112,1990.6365,19276.7253,1988.3766,19283.74,1995.29" style="stroke:#656F33;stroke-width:1;"/><text fill="#14180C" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="64.8188" x="19142.29" y="1648.3">emits</text></g><!--link LogDispatcher to LogEntry--><g class="link" data-entity-1="ent0061" data-entity-2="ent0058" data-link-type="dependency" data-source-line="346" id="lnk66"><path codeLine="346" d="M19560.03,1381.41 C19513.93,1524.62 19417.2084,1825.1286 19364.2384,1989.6886" fill="none" id="LogDispatcher-to-LogEntry" style="stroke:#656F33;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="#656F33" points="19362.4,1995.4,19368.9653,1988.0585,19363.932,1990.6405,19361.3501,1985.6073,19362.4,1995.4" style="stroke:#656F33;stroke-width:1;"/><text fill="#14180C" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="119.3876" x="19480.11" y="1648.3">consumes</text></g><!--reverse link IPromptDirectory to PromptDirectory--><g class="link" data-entity-1="ent0078" data-entity-2="ent0079" data-link-type="extension" data-source-line="421" id="lnk80"><path codeLine="421" d="M7179.3455,2912.6025 C7164.8655,2977.0725 7145.79,3061.97 7129.02,3136.66" fill="none" id="IPromptDirectory-backto-PromptDirectory" style="stroke:#656F33;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="7183.29,2895.04,7173.4913,2911.2876,7185.1996,2913.9173,7183.29,2895.04" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link BiergartenPipelineOrchestrator to DataPreloader--><g class="link" data-entity-1="ent0092" data-entity-2="ent0070" data-link-type="composition" data-source-line="550" id="lnk93"><path codeLine="550" d="M9684.1117,533.5306 C10056.2517,592.5806 10581.79,704.85 11012,912.15 C11151.37,979.31 11288.9,1089.41 11385,1175.48" fill="none" id="BiergartenPipelineOrchestrator-backto-DataPreloader" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="9672.26,531.65,9677.559,536.5409,9684.1117,533.5306,9678.8127,528.6397,9672.26,531.65" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link BiergartenPipelineOrchestrator to EnrichmentService--><g class="link" data-entity-1="ent0092" data-entity-2="ent0073" data-link-type="composition" data-source-line="551" id="lnk94"><path codeLine="551" d="M9681.9224,767.3334 C9772.2324,828.9534 9855.47,888.6 9940,954.15 C10052.18,1041.14 10172.95,1151.71 10249.89,1224.51" fill="none" id="BiergartenPipelineOrchestrator-backto-EnrichmentService" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="9672.01,760.57,9674.7117,767.2559,9681.9224,767.3334,9679.2207,760.6476,9672.01,760.57" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link BiergartenPipelineOrchestrator to DataGenerator--><g class="link" data-entity-1="ent0092" data-entity-2="ent0082" data-link-type="composition" data-source-line="552" id="lnk95"><path codeLine="552" d="M9227,894.64 C9227,938.63 9227,970.72 9227,1012.9" fill="none" id="BiergartenPipelineOrchestrator-backto-DataGenerator" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="9227,882.64,9223,888.64,9227,894.64,9231,888.64,9227,882.64" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link BiergartenPipelineOrchestrator to ExportService--><g class="link" data-entity-1="ent0092" data-entity-2="ent0088" data-link-type="composition" data-source-line="553" id="lnk96"><path codeLine="553" d="M9684.2607,517.1165 C11246.9607,659.1865 16453.99,1132.55 17926.29,1266.4" fill="none" id="BiergartenPipelineOrchestrator-backto-ExportService" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="9672.31,516.03,9677.9232,520.5568,9684.2607,517.1165,9678.6475,512.5897,9672.31,516.03" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link BiergartenPipelineOrchestrator to CheckinDistributionStrategy--><g class="link" data-entity-1="ent0092" data-entity-2="ent0049" data-link-type="composition" data-source-line="554" id="lnk97"><path codeLine="554" d="M9683.9338,524.2376 C10016.1938,576.5876 10457.04,684.37 10793,912.15 C10812.42,925.32 10816.59,932.24 10825,954.15 C10890.4,1124.43 10826,2466.49 10960,2590.25 C10974.18,2603.34 13720.03,2594.68 13739,2598.25 C13854.06,2619.91 13975.44,2662.62 14078.97,2705.67" fill="none" id="BiergartenPipelineOrchestrator-backto-CheckinDistributionStrategy" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="9672.08,522.37,9677.3843,527.2551,9683.9338,524.2376,9678.6294,519.3526,9672.08,522.37" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link BiergartenPipelineOrchestrator to FollowGenerationStrategy--><g class="link" data-entity-1="ent0092" data-entity-2="ent0052" data-link-type="composition" data-source-line="555" id="lnk98"><path codeLine="555" d="M9683.9882,527.8825 C10022.8382,582.2925 10477.98,691.04 10833,912.15 C11139.57,1103.08 10757.88,2280.99 11023,2526.25 C11099.25,2596.79 14658.56,2588.74 14762,2598.25 C15151.44,2634.07 15595.76,2714.29 15880.04,2770.72" fill="none" id="BiergartenPipelineOrchestrator-backto-FollowGenerationStrategy" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="9672.14,525.98,9677.4299,530.8807,9683.9882,527.8825,9678.6983,522.9818,9672.14,525.98" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link BiergartenPipelineOrchestrator to SamplingStrategy--><g class="link" data-entity-1="ent0092" data-entity-2="ent0045" data-link-type="composition" data-source-line="556" id="lnk99"><path codeLine="556" d="M9684.0001,561.1441 C10080.0001,644.9341 10604.46,783.57 10736,954.15 C10847.15,1098.29 10686.85,2464.03 10818,2590.25 C10831.59,2603.33 11478.45,2594.85 11497,2598.25 C11680.9,2632 11881.65,2713.56 12007.89,2770.79" fill="none" id="BiergartenPipelineOrchestrator-backto-SamplingStrategy" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="9672.26,558.66,9677.302,563.8154,9684.0001,561.1441,9678.9581,555.9887,9672.26,558.66" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link BiergartenPipelineOrchestrator to BeerSelectionStrategy--><g class="link" data-entity-1="ent0092" data-entity-2="ent0047" data-link-type="composition" data-source-line="557" id="lnk100"><path codeLine="557" d="M9683.877,541.6905 C10108.497,614.5905 10685.74,748.77 10783,954.15 C10860.97,1118.79 10756.38,2465.36 10889,2590.25 C10897.59,2598.34 12576.34,2596.47 12588,2598.25 C12784.85,2628.31 13001.16,2698.71 13152.5,2754.45" fill="none" id="BiergartenPipelineOrchestrator-backto-BeerSelectionStrategy" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="9672.05,539.66,9677.2867,544.6176,9683.877,541.6905,9678.6403,536.7329,9672.05,539.66" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link BiergartenPipelineOrchestrator to ApplicationOptions--><g class="link" data-entity-1="ent0092" data-entity-2="ent0037" data-link-type="composition" data-source-line="558" id="lnk101"><path codeLine="558" d="M8772.355,718.4525 C8678.405,785.9625 8597.68,860.19 8532,954.15 C8282.46,1311.1 8242.51,1861.71 8236.17,2044.25" fill="none" id="BiergartenPipelineOrchestrator-backto-ApplicationOptions" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="8782.1,711.45,8774.8933,711.7029,8772.355,718.4525,8779.5617,718.1996,8782.1,711.45" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link BiergartenPipelineOrchestrator to Logger--><g class="link" data-entity-1="ent0092" data-entity-2="ent0102" data-link-type="composition" data-source-line="559" id="lnk103"><path codeLine="559" d="M8771.0371,689.9059 C8628.4571,759.5359 8481.66,834.04 8340,912.15 C8112.05,1037.84 7850.06,1206.73 7748.43,1273.23" fill="none" id="BiergartenPipelineOrchestrator-backto-Logger" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="8781.82,684.64,8774.6733,683.6787,8771.0371,689.9059,8778.1839,690.8672,8781.82,684.64" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link BiergartenPipelineOrchestrator to GeneratedUser--><g class="link" data-entity-1="ent0092" data-entity-2="ent0024" data-link-type="composition" data-source-line="562" id="lnk104"><path codeLine="562" d="M8769.9129,484.5525 C7362.6329,515.3425 3082.83,634.52 2551,954.15 C2474.21,1000.3 2420.26,1085 2385.24,1159.24" fill="none" id="BiergartenPipelineOrchestrator-backto-GeneratedUser" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="8781.91,484.29,8775.8239,480.4222,8769.9129,484.5525,8775.9989,488.4203,8781.91,484.29" style="stroke:#656F33;stroke-width:1;"/><text fill="#14180C" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="134.2499" x="2596.64" y="937.95">user_pool_</text><text fill="#14180C" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="39" x="2348.9798" y="1143.8253">0..*</text></g><!--reverse link BiergartenPipelineOrchestrator to GeneratedBrewery--><g class="link" data-entity-1="ent0092" data-entity-2="ent0022" data-link-type="composition" data-source-line="563" id="lnk105"><path codeLine="563" d="M8769.7908,478.52 C7657.6708,491.5 4797.77,562.92 3938,954.15 C3822.83,1006.56 3721.67,1111.14 3655.6,1191.97" fill="none" id="BiergartenPipelineOrchestrator-backto-GeneratedBrewery" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="8781.79,478.38,8775.7437,474.4503,8769.7908,478.52,8775.8371,482.4498,8781.79,478.38" style="stroke:#656F33;stroke-width:1;"/><text fill="#14180C" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="179.4438" x="4007.16" y="937.95">brewery_pool_</text><text fill="#14180C" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="39" x="3621.7723" y="1176.2651">0..*</text></g><!--reverse link BiergartenPipelineOrchestrator to GeneratedBeer--><g class="link" data-entity-1="ent0092" data-entity-2="ent0023" data-link-type="composition" data-source-line="564" id="lnk106"><path codeLine="564" d="M8769.8888,548.0201 C8050.8288,658.3601 6600.15,865.51 5352,946.15 C5338.44,947.03 4385.86,947.53 4374,954.15 C4289.41,1001.41 4233.17,1096.57 4199.04,1175.41" fill="none" id="BiergartenPipelineOrchestrator-backto-GeneratedBeer" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="8781.75,546.2,8775.2127,543.1563,8769.8888,548.0201,8776.4261,551.0638,8781.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="5775.11" y="937.95">beer_pool_</text><text fill="#14180C" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="39" x="4162.4588" y="1159.9347">0..*</text></g><!--reverse link BiergartenPipelineOrchestrator to GeneratedCheckin--><g class="link" data-entity-1="ent0092" data-entity-2="ent0028" data-link-type="composition" data-source-line="565" id="lnk107"><path codeLine="565" d="M8770.17,588.6527 C8277.79,704.6927 7470.85,877.06 6754,946.15 C6727.12,948.74 4833.6,941.03 4810,954.15 C4719.25,1004.61 4661.17,1110.31 4627.98,1191.99" fill="none" id="BiergartenPipelineOrchestrator-backto-GeneratedCheckin" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="8781.85,585.9,8775.0924,583.383,8770.17,588.6527,8776.9275,591.1697,8781.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="7026.18" y="937.95">checkin_pool_</text><text fill="#14180C" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="39" x="4591.1545" y="1176.2864">0..*</text></g><!--reverse link BiergartenPipelineOrchestrator to GeneratedFollow--><g class="link" data-entity-1="ent0092" data-entity-2="ent0030" data-link-type="composition" data-source-line="566" id="lnk108"><path codeLine="566" d="M8770.5075,642.7592 C8443.3675,753.8692 7996.65,887.17 7581,946.15 C7564.95,948.43 5260.17,946.28 5246,954.15 C5142.62,1011.58 5081.65,1140.72 5051.55,1224.42" fill="none" id="BiergartenPipelineOrchestrator-backto-GeneratedFollow" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="8781.87,638.9,8774.9024,637.0421,8770.5075,642.7592,8777.4751,644.6171,8781.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="7764.94" y="937.95">follow_pool_</text><text fill="#14180C" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="39" x="5013.9999" y="1208.8361">0..*</text></g><!--reverse link DataPreloader to JsonLoader--><g class="link" data-entity-1="ent0070" data-entity-2="ent0071" data-link-type="extension" data-source-line="569" id="lnk109"><path codeLine="569" d="M11516,1447.95 C11516,1603.58 11516,1847.67 11516,1995.44" fill="none" id="DataPreloader-backto-JsonLoader" style="stroke:#656F33;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="11516,1429.95,11510,1447.95,11522,1447.95,11516,1429.95" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link Logger to PipelineLogger--><g class="link" data-entity-1="ent0102" data-entity-2="ent0110" data-link-type="extension" data-source-line="570" id="lnk111"><path codeLine="570" d="M7628.023,1306.68 C7442.923,1316.05 6886.07,1369.65 6584,1686.5 C6476.27,1799.5 6463.59,2002.31 6462.73,2076.87" fill="none" id="Logger-backto-PipelineLogger" style="stroke:#656F33;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="7646,1305.77,7627.7197,1300.6877,7628.3264,1312.6723,7646,1305.77" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link ContextStrategy to BreweryContextStrategy--><g class="link" data-entity-1="ent0042" data-entity-2="ent0043" data-link-type="extension" data-source-line="571" id="lnk112"><path codeLine="571" d="M11128,2929.34 C11128,3004.67 11128,3099.68 11128,3168.98" fill="none" id="ContextStrategy-backto-BreweryContextStrategy" style="stroke:#656F33;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="11128,2911.34,11122,2929.34,11134,2929.34,11128,2911.34" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link ContextStrategy to BeerContextStrategy--><g class="link" data-entity-1="ent0042" data-entity-2="ent0044" data-link-type="extension" data-source-line="572" id="lnk113"><path codeLine="572" d="M11288.3389,2920.0845 C11428.6089,2995.3945 11622.82,3099.67 11751.78,3168.9" fill="none" id="ContextStrategy-backto-BeerContextStrategy" style="stroke:#656F33;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="11272.48,2911.57,11285.5007,2925.3708,11291.177,2914.7982,11272.48,2911.57" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link SamplingStrategy to UniformSamplingStrategy--><g class="link" data-entity-1="ent0045" data-entity-2="ent0046" data-link-type="extension" data-source-line="573" id="lnk114"><path codeLine="573" d="M12235.1318,2905.7438 C12339.1218,2980.2538 12498.96,3094.78 12602.81,3169.19" fill="none" id="SamplingStrategy-backto-UniformSamplingStrategy" style="stroke:#656F33;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="12220.5,2895.26,12231.6372,2910.6211,12238.6264,2900.8666,12220.5,2895.26" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link BeerSelectionStrategy to RandomBeerSelectionStrategy--><g class="link" data-entity-1="ent0047" data-entity-2="ent0048" data-link-type="extension" data-source-line="574" id="lnk115"><path codeLine="574" d="M13391.4919,2927.6653 C13419.1019,2987.1153 13450.03,3053.72 13480.86,3120.1" fill="none" id="BeerSelectionStrategy-backto-RandomBeerSelectionStrategy" style="stroke:#656F33;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="13383.91,2911.34,13386.0501,2930.1926,13396.9336,2925.138,13383.91,2911.34" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link CheckinDistributionStrategy to JCurveCheckinStrategy--><g class="link" data-entity-1="ent0049" data-entity-2="ent0050" data-link-type="extension" data-source-line="575" id="lnk116"><path codeLine="575" d="M14343,2978.18 C14343,3024.17 14343,3058.14 14343,3104.12" fill="none" id="CheckinDistributionStrategy-backto-JCurveCheckinStrategy" style="stroke:#656F33;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="14343,2960.18,14337,2978.18,14349,2978.18,14343,2960.18" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link CheckinDistributionStrategy to RandomCheckinStrategy--><g class="link" data-entity-1="ent0049" data-entity-2="ent0051" data-link-type="extension" data-source-line="576" id="lnk117"><path codeLine="576" d="M14626.7565,2968.0062 C14701.4665,3003.2862 14767.33,3034.39 14845.47,3071.29" fill="none" id="CheckinDistributionStrategy-backto-RandomCheckinStrategy" style="stroke:#656F33;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="14610.48,2960.32,14624.1944,2973.4316,14629.3185,2962.5807,14610.48,2960.32" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link FollowGenerationStrategy to RandomFollowStrategy--><g class="link" data-entity-1="ent0052" data-entity-2="ent0053" data-link-type="extension" data-source-line="577" id="lnk118"><path codeLine="577" d="M16173,2913.04 C16173,2977.51 16173,3061.97 16173,3136.66" fill="none" id="FollowGenerationStrategy-backto-RandomFollowStrategy" style="stroke:#656F33;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="16173,2895.04,16167,2913.04,16179,2913.04,16173,2895.04" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link FollowGenerationStrategy to ActivityWeightedFollowStrategy--><g class="link" data-entity-1="ent0052" data-entity-2="ent0054" data-link-type="extension" data-source-line="578" id="lnk119"><path codeLine="578" d="M16366.8786,2901.1512 C16552.8386,2965.5612 16830.74,3061.81 17046.06,3136.38" fill="none" id="FollowGenerationStrategy-backto-ActivityWeightedFollowStrategy" style="stroke:#656F33;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="16349.87,2895.26,16364.9149,2906.8207,16368.8424,2895.4816,16349.87,2895.26" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link EnrichmentService to WikipediaService--><g class="link" data-entity-1="ent0073" data-entity-2="ent0074" data-link-type="extension" data-source-line="579" id="lnk120"><path codeLine="579" d="M10332.3886,1399.4044 C10335.9586,1542.6144 10343.15,1830.84 10347.26,1995.4" fill="none" id="EnrichmentService-backto-WikipediaService" style="stroke:#656F33;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="10331.94,1381.41,10326.3904,1399.5539,10338.3867,1399.2549,10331.94,1381.41" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link WebClient to HttpWebClient--><g class="link" data-entity-1="ent0075" data-entity-2="ent0076" data-link-type="extension" data-source-line="580" id="lnk121"><path codeLine="580" d="M10350,2929.34 C10350,3004.67 10350,3099.68 10350,3168.98" fill="none" id="WebClient-backto-HttpWebClient" style="stroke:#656F33;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="10350,2911.34,10344,2929.34,10356,2929.34,10350,2911.34" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link DataGenerator to MockGenerator--><g class="link" data-entity-1="ent0082" data-entity-2="ent0083" data-link-type="extension" data-source-line="581" id="lnk122"><path codeLine="581" d="M9092.803,1609.4011 C9034.603,1741.9411 8975.86,1875.71 8930.46,1979.07" fill="none" id="DataGenerator-backto-MockGenerator" style="stroke:#656F33;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="9100.04,1592.92,9087.3093,1606.9887,9098.2966,1611.8134,9100.04,1592.92" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link DataGenerator to LlamaGenerator--><g class="link" data-entity-1="ent0082" data-entity-2="ent0084" data-link-type="extension" data-source-line="582" id="lnk123"><path codeLine="582" d="M9361.5749,1609.3932 C9398.4149,1693.0432 9431.1,1767.27 9467,1848.79" fill="none" id="DataGenerator-backto-LlamaGenerator" style="stroke:#656F33;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="9354.32,1592.92,9356.0838,1611.8115,9367.066,1606.9749,9354.32,1592.92" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link PromptFormatter to Gemma4JinjaPromptFormatter--><g class="link" data-entity-1="ent0085" data-entity-2="ent0086" data-link-type="extension" data-source-line="583" id="lnk124"><path codeLine="583" d="M9580,2945.65 C9580,3020.24 9580,3104.51 9580,3168.98" fill="none" id="PromptFormatter-backto-Gemma4JinjaPromptFormatter" style="stroke:#656F33;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="9580,2927.65,9574,2945.65,9586,2945.65,9580,2927.65" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link ExportService to SqliteExportService--><g class="link" data-entity-1="ent0088" data-entity-2="ent0089" data-link-type="extension" data-source-line="584" id="lnk125"><path codeLine="584" d="M18316,1496.74 C18316,1558.58 18316,1613.07 18316,1686.38" fill="none" id="ExportService-backto-SqliteExportService" style="stroke:#656F33;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="18316,1478.74,18310,1496.74,18322,1496.74,18316,1478.74" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link DateTimeProvider to SystemDateTimeProvider--><g class="link" data-entity-1="ent0090" data-entity-2="ent0091" data-link-type="extension" data-source-line="585" id="lnk126"><path codeLine="585" d="M18316,2913.04 C18316,2993.25 18316,3114.26 18316,3185.43" fill="none" id="DateTimeProvider-backto-SystemDateTimeProvider" style="stroke:#656F33;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="18316,2895.04,18310,2913.04,18322,2913.04,18316,2895.04" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link WikipediaService to WebClient--><g class="link" data-entity-1="ent0074" data-entity-2="ent0075" data-link-type="composition" data-source-line="588" id="lnk127"><path codeLine="588" d="M10350,2229.43 C10350,2377.6 10350,2625.52 10350,2754.66" fill="none" id="WikipediaService-backto-WebClient" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="10350,2217.43,10346,2223.43,10350,2229.43,10354,2223.43,10350,2217.43" style="stroke:#656F33;stroke-width:1;"/></g><!--link WikipediaService to ContextStrategy--><g class="link" data-entity-1="ent0074" data-entity-2="ent0042" data-link-type="dependency" data-source-line="589" id="lnk128"><path codeLine="589" d="M10424.57,2217.03 C10498.58,2320.84 10619.15,2477.2 10747,2590.25 C10818.45,2653.43 10902.9216,2708.1767 10977.3216,2751.3867" fill="none" id="WikipediaService-to-ContextStrategy" style="stroke:#656F33;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="#656F33" points="10982.51,2754.4,10976.7362,2746.421,10978.1863,2751.8889,10972.7185,2753.339,10982.51,2754.4" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link LlamaGenerator to PromptFormatter--><g class="link" data-entity-1="ent0084" data-entity-2="ent0085" data-link-type="composition" data-source-line="590" id="lnk129"><path codeLine="590" d="M9580,2375.87 C9580,2505.95 9580,2643.98 9580,2738.4" fill="none" id="LlamaGenerator-backto-PromptFormatter" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="9580,2363.87,9576,2369.87,9580,2375.87,9584,2369.87,9580,2363.87" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link LlamaGenerator to IPromptDirectory--><g class="link" data-entity-1="ent0084" data-entity-2="ent0078" data-link-type="composition" data-source-line="591" id="lnk130"><path codeLine="591" d="M9408.3642,2373.1269 C9353.8942,2437.4369 9295.15,2489.39 9219,2526.25 C9133.31,2567.72 7596.62,2566.14 7507,2598.25 C7407.06,2634.06 7312.75,2714.28 7254.98,2770.72" fill="none" id="LlamaGenerator-backto-IPromptDirectory" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="9416.12,2363.97,9409.1898,2365.9632,9408.3642,2373.1269,9415.2944,2371.1337,9416.12,2363.97" style="stroke:#656F33;stroke-width:1;"/></g><!--link LlamaGenerator to GeneratorOptions--><g class="link" data-entity-1="ent0084" data-entity-2="ent0035" data-link-type="dependency" data-source-line="592" id="lnk131"><path codeLine="592" d="M9408.59,2363.91 C9355,2426.19 9290.83,2486.28 9219,2526.25 C9058.99,2615.28 8994.33,2573.38 8812,2590.25 C8781.01,2593.12 8561.26,2587.65 8532,2598.25 C8443.63,2630.28 8365.4256,2695.4305 8309.9256,2750.3305" fill="none" id="LlamaGenerator-to-GeneratorOptions" style="stroke:#656F33;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="#656F33" points="8305.66,2754.55,8314.8715,2751.0645,8309.2147,2751.0337,8309.2454,2745.377,8305.66,2754.55" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link SqliteExportService to DateTimeProvider--><g class="link" data-entity-1="ent0089" data-entity-2="ent0090" data-link-type="composition" data-source-line="593" id="lnk132"><path codeLine="593" d="M18316,2538.53 C18316,2634.84 18316,2713.65 18316,2770.82" fill="none" id="SqliteExportService-backto-DateTimeProvider" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="18316,2526.53,18312,2532.53,18316,2538.53,18320,2532.53,18316,2526.53" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link PipelineLogger to BoundedChannel--><g class="link" data-entity-1="ent0110" data-entity-2="ent0068" data-link-type="aggregation" data-source-line="596" id="lnk133"><path codeLine="596" d="M6463,2147.78 C6463,2233.08 6463,2480.01 6463,2656.88" fill="none" id="PipelineLogger-backto-BoundedChannel" style="stroke:#656F33;stroke-width:1;"/><polygon fill="none" points="6463,2135.78,6459,2141.78,6463,2147.78,6467,2141.78,6463,2135.78" style="stroke:#656F33;stroke-width:1;"/><text fill="#14180C" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="78.1815" x="6464" y="2582.05">logs to</text></g><!--reverse link LogWorker to BoundedChannel--><g class="link" data-entity-1="ent0134" data-entity-2="ent0068" data-link-type="aggregation" data-source-line="597" id="lnk135"><path codeLine="597" d="M6676.3763,2147.7345 C6663.2563,2216.0345 6629.49,2382.04 6584,2526.25 C6570.47,2569.12 6553.82,2614.55 6537.24,2656.91" fill="none" id="LogWorker-backto-BoundedChannel" style="stroke:#656F33;stroke-width:1;"/><polygon fill="none" points="6678.64,2135.95,6673.5799,2141.0877,6676.3763,2147.7345,6681.4363,2142.5969,6678.64,2135.95" style="stroke:#656F33;stroke-width:1;"/><text fill="#14180C" font-family="'DM Sans'" font-size="25" lengthAdjust="spacing" textLength="132.9065" x="6573.87" y="2582.05">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="600" id="lnk136"><path codeLine="600" d="M1959.1768,1376.1063 C1986.7868,1442.3463 2035.31,1535.11 2115,1592.5 C2256.18,1694.18 2344.17,1599.79 2495,1686.5 C2608.26,1751.61 2710.47,1857.47 2784,1946.47" fill="none" id="EnrichedCity-backto-Location" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="1954.56,1365.03,1953.1763,1372.1071,1959.1768,1376.1063,1960.5605,1369.0292,1954.56,1365.03" 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="601" id="lnk137"><path codeLine="601" d="M1932,1377.06 C1932,1521.07 1932,1869.01 1932,2027.9" fill="none" id="EnrichedCity-backto-LocationContext" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="1932,1365.06,1928,1371.06,1932,1377.06,1936,1371.06,1932,1365.06" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link GeneratedBrewery to Location--><g class="link" data-entity-1="ent0022" data-entity-2="ent0003" data-link-type="composition" data-source-line="602" id="lnk138"><path codeLine="602" d="M3471.1063,1422.8056 C3404.8863,1498.9656 3322.95,1593.87 3245,1686.5 C3173.2,1771.82 3094.16,1867.9 3029.97,1946.5" fill="none" id="GeneratedBrewery-backto-Location" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="3478.98,1413.75,3472.0246,1415.6532,3471.1063,1422.8056,3478.0617,1420.9024,3478.98,1413.75" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link GeneratedBrewery to BreweryResult--><g class="link" data-entity-1="ent0022" data-entity-2="ent0008" data-link-type="composition" data-source-line="603" id="lnk139"><path codeLine="603" d="M3555.2782,1425.4451 C3529.5582,1583.9751 3484.4,1862.47 3460.22,2011.56" fill="none" id="GeneratedBrewery-backto-BreweryResult" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="3557.2,1413.6,3552.2907,1418.882,3555.2782,1425.4451,3560.1875,1420.1631,3557.2,1413.6" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link GeneratedBrewery to GenerationMetadata--><g class="link" data-entity-1="ent0022" data-entity-2="ent0021" data-link-type="composition" data-source-line="604" id="lnk140"><path codeLine="604" d="M3693.9414,1421.7098 C3761.5714,1483.1598 3844.13,1548.04 3938,1592.5 C4116.76,1677.17 4218.82,1562.6 4373,1686.5 C4474.49,1768.05 4524.54,1915.21 4547.53,2011.59" fill="none" id="GeneratedBrewery-backto-GenerationMetadata" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="3685.06,1413.64,3686.8108,1420.6353,3693.9414,1421.7098,3692.1906,1414.7144,3685.06,1413.64" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link GeneratedBeer to Location--><g class="link" data-entity-1="ent0023" data-entity-2="ent0003" data-link-type="composition" data-source-line="605" id="lnk141"><path codeLine="605" d="M4085.0548,1440.369 C4048.2248,1499.359 4002.78,1554.6 3938,1592.5 C3669.73,1749.47 3516.41,1535.03 3245,1686.5 C3137.25,1746.63 3049.63,1855.06 2989.79,1946.53" fill="none" id="GeneratedBeer-backto-Location" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="4091.41,1430.19,4084.8394,1433.1611,4085.0548,1440.369,4091.6254,1437.3979,4091.41,1430.19" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link GeneratedBeer to BeerStyle--><g class="link" data-entity-1="ent0023" data-entity-2="ent0007" data-link-type="composition" data-source-line="606" id="lnk142"><path codeLine="606" d="M4087.5797,1440.6509 C4051.1797,1514.7609 4010.61,1599.87 3973,1686.5 C3930.78,1783.75 3887.22,1895.64 3855.61,1979.31" fill="none" id="GeneratedBeer-backto-BeerStyle" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="4092.87,1429.88,4086.6346,1433.502,4087.5797,1440.6509,4093.8152,1437.0289,4092.87,1429.88" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link GeneratedBeer to BeerResult--><g class="link" data-entity-1="ent0023" data-entity-2="ent0009" data-link-type="composition" data-source-line="607" id="lnk143"><path codeLine="607" d="M4158.9245,1441.9473 C4161.9945,1586.6673 4166.77,1811.44 4169.98,1962.75" fill="none" id="GeneratedBeer-backto-BeerResult" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="4158.67,1429.95,4154.7982,1436.0335,4158.9245,1441.9473,4162.7964,1435.8638,4158.67,1429.95" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link GeneratedBeer to GenerationMetadata--><g class="link" data-entity-1="ent0023" data-entity-2="ent0021" data-link-type="composition" data-source-line="608" id="lnk144"><path codeLine="608" d="M4237.1571,1440.255 C4280.2771,1514.165 4328.48,1599.47 4373,1686.5 C4429.19,1796.36 4487.38,1925.9 4524.75,2011.53" fill="none" id="GeneratedBeer-backto-GenerationMetadata" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="4231.11,1429.89,4230.6785,1437.0882,4237.1571,1440.255,4237.5885,1433.0568,4231.11,1429.89" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link GeneratedUser to Location--><g class="link" data-entity-1="ent0024" data-entity-2="ent0003" data-link-type="composition" data-source-line="609" id="lnk145"><path codeLine="609" d="M2440.8285,1455.9907 C2540.2985,1596.3507 2685.05,1800.63 2788.39,1946.46" fill="none" id="GeneratedUser-backto-Location" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="2433.89,1446.2,2434.0957,1453.4082,2440.8285,1455.9907,2440.6228,1448.7825,2433.89,1446.2" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link GeneratedUser to UserResult--><g class="link" data-entity-1="ent0024" data-entity-2="ent0010" data-link-type="composition" data-source-line="610" id="lnk146"><path codeLine="610" d="M2333,1458.2 C2333,1609.47 2333,1834.36 2333,1979.16" fill="none" id="GeneratedUser-backto-UserResult" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="2333,1446.2,2329,1452.2,2333,1458.2,2337,1452.2,2333,1446.2" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link GeneratedUser to GenerationMetadata--><g class="link" data-entity-1="ent0024" data-entity-2="ent0021" data-link-type="composition" data-source-line="611" id="lnk147"><path codeLine="611" d="M2411.5579,1456.522 C2447.4279,1512.092 2489.84,1560.05 2551,1592.5 C2595.77,1616.25 4331.07,1658.04 4373,1686.5 C4482.05,1760.51 4530.26,1912.74 4550.77,2011.87" fill="none" id="GeneratedUser-backto-GenerationMetadata" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="2405.05,1446.44,2404.9433,1453.6503,2411.5579,1456.522,2411.6646,1449.3117,2405.05,1446.44" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link GeneratedCheckin to CheckinResult--><g class="link" data-entity-1="ent0028" data-entity-2="ent0019" data-link-type="composition" data-source-line="612" id="lnk148"><path codeLine="612" d="M4645.0347,1424.5873 C4720.1547,1595.6573 4857.86,1909.23 4917.12,2044.16" fill="none" id="GeneratedCheckin-backto-CheckinResult" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="4640.21,1413.6,4638.9599,1420.7019,4645.0347,1424.5873,4646.2848,1417.4854,4640.21,1413.6" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link GeneratedCheckin to GenerationMetadata--><g class="link" data-entity-1="ent0028" data-entity-2="ent0021" data-link-type="composition" data-source-line="613" id="lnk149"><path codeLine="613" d="M4587.896,1425.5932 C4582.556,1584.1232 4573.18,1862.47 4568.16,2011.56" fill="none" id="GeneratedCheckin-backto-GenerationMetadata" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="4588.3,1413.6,4584.1003,1419.4619,4587.896,1425.5932,4592.0957,1419.7313,4588.3,1413.6" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link GeneratedRating to RatingResult--><g class="link" data-entity-1="ent0029" data-entity-2="ent0020" data-link-type="composition" data-source-line="614" id="lnk150"><path codeLine="614" d="M5464,1425.6 C5464,1596.67 5464,1909.23 5464,2044.16" fill="none" id="GeneratedRating-backto-RatingResult" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="5464,1413.6,5460,1419.6,5464,1425.6,5468,1419.6,5464,1413.6" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link GeneratedRating to GenerationMetadata--><g class="link" data-entity-1="ent0029" data-entity-2="ent0021" data-link-type="composition" data-source-line="615" id="lnk151"><path codeLine="615" d="M5401.4978,1424.0429 C5364.0178,1486.1229 5315.16,1549.41 5246,1592.5 C5058.53,1709.29 4931.86,1550.27 4758,1686.5 C4655.27,1767 4605.12,1914.8 4582.23,2011.57" fill="none" id="GeneratedRating-backto-GenerationMetadata" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="5407.7,1413.77,5401.1746,1416.8391,5401.4978,1424.0429,5408.0232,1420.9739,5407.7,1413.77" style="stroke:#656F33;stroke-width:1;"/></g><!--reverse link GeneratedFollow to GenerationMetadata--><g class="link" data-entity-1="ent0030" data-entity-2="ent0021" data-link-type="composition" data-source-line="616" id="lnk152"><path codeLine="616" d="M4979.1117,1391.5853 C4940.5117,1455.5753 4884.58,1534.69 4810,1592.5 C4782.6,1613.74 4761.88,1597.37 4738,1622.5 C4634.93,1730.94 4592.64,1905.01 4575.74,2011.87" fill="none" id="GeneratedFollow-backto-GenerationMetadata" style="stroke:#656F33;stroke-width:1;"/><polygon fill="#656F33" points="4985.31,1381.31,4978.7858,1384.3816,4979.1117,1391.5853,4985.636,1388.5137,4985.31,1381.31" style="stroke:#656F33;stroke-width:1;"/></g><?plantuml-src xHpjSjkuyR-U0isFd7oDr3YvInirvnb7jXDVy-5QJZETwGm78Y49DKNo0D2ExtepVOY-Gz-ZZz8dwUAB942GeksvZ_QgoOmbOdUnkm3s2yjyXhuQ_1bzXkRltvsSllfmVdXn-luTUeWM5tz-S_hk5OpSWiolQ1QdPKBGTFgR9ILiZPaWsUIQq6_XZzYGBPaMvJOTyKkQ5PZXBOfJpFcX48mkIq5Eyami01WzRu0aP8NBL5HZJxvi30egqXhjwUFHI3r1BwlfqH4M69tHWgGq8-ZVV_y7cij9qH75Qo0n6XKuliHhWXuSvLjCinbwcoSavG_GTwCHqXoYDtcC1SqpU8RWysiKKt63PeYBP3RZm7wsDWDSO46YWkLNe0qI1A4yVxh_x5dq93WQvsKcs4qlvdvmD0KcqoZ5sRe4URY5kIAnoDcB1lo1HG2PX5om6KhoSfcIYb2sRWrytzR671HFFebAAUf7MAPjaH9O3S8bM_F6JmknmInIeai2i9YHi7EIhDmwA6Q-ap9DrPSpM6YAzVV39IUPSDazpXYDDoIPopNxhg4ijQApIfoAsSm8uidfKdr925k86zXibcI6j-45JmYF6ItCTEtnBSqYlBo2iLMQOs6Vua-Xfm0BXmMUqgm9sNpMv9AHQy9kpWc7C-Hm6f5i5xDT80fTxRQT5C9GdXf_PjpfOonNDZJINf8ErN_WBSbMb74HTUuJGEiPNPCi8ImuLC9KdNXBceS5YGMzWYCHWO5URqH3g8OGxoJL7vBznbmdEICI_LZPlvsdQZT1oJn_UJCt5bLJdA2LcOT7ovl8cDl8qYcpd05PaaHRN3IDvYF7cZgy7XmOohnazoNSDDFMJY-mD7vIcd7J0u2Xug8f_SD7VyaGOjdQphaL-y-VF_tjmptx85Vx7gSl9B43gwqi5mGnjGdobQSrnS9BS94aGSiR9AvpnFEInMJ2DxY0Xo0DVwIWBicD1ZfTl4UIoyb-vSrYyAaQIcCdQCNoBIhoeamncoYjJPOt4mC_IS1hSw9Fs7W-Vxo79g1UGj3nnUlJ-M9o-EveyeTtxp--cvmk5X-E5zDjCbN0h_Ike1mLZC2nk8Af2dXW5ntcHrIW66jploH8R1Z12O31bxnSRv389GO7FVr6dXtOPuJL3WAS9c6_hvOQA36GByljVgGP4296J8KXPPc2bw9oZH1ehI0PHnYMJgqh135RyaWk0Z8cPKK_YPAH2Ix59bT86WHOXtbe1h9ijVEIIbGezPJ8g4wg8A4Ss9EobOM4pSHKETH4BRbSUk-8V0vQVl1uEltyWNiQsv3JwO4s3ZDGT9wKCU7rmPjlI0mnccVzOlaKzh_qTk4uGMt4dWDz3b9dQuyiZu5JpoJl8lIgMjEtH62fiOfSlTmHJO162ORzsHUHS8T13Bac7T6E2XTq42YLFqFBF4zR1Awfs0nWaYJ6YLSiBlNl87_TSOt1WW4dAF2Oza8rBmIQpGAnszQgS1RGQvT8uFPhUU17K9Yx2MfzTnMXDQOnZntHxyA_TEuL_zBztf97YG9FwnZ1F2UGWdJ4BJAlo5VHahB0jf4G1N1u3Kuc76CE4T9r18wmYepYxf7BoYE4mPvKSsEcrGsRNwPNqav1Z9NUrFjUkH4mLpa3Wm0yOd1xsivB4_ZcpLjZzqYo9oqUXXJa6XmT6EajaYCJ72ileRq98OaqaD8NbblGAHXsnCYQSh3Iy0N2EmFEcyOIR2FvLEHCJD42dChv-yEZjuTdu4JGl_wvxzj8R-cDSNFD6WrRYywTqRUp3K6PA3Njw3rsgxQRk_Thvq7iav5fuZF7Ej-3sPCyJVFhEkXKFpluCeD9SF0MayiTVgPzlXDuxaWWEZE72AzMDAE24jwRXIiM_7HQEc77p7uVA58S5aLAZNK1n1LTbrh01qe0BPOA766gzufRtaZKjuNK1mGPnc-Yhz3-zF697S-BgAX77a-VVzaSkjIgVleaagFFlh0AYsBnoHdwtVxp9rOjS51LaWIF9_l1fS-Pp-TMLcAY0ekDqUAAfeJVmDdUpcRoSRsXesqkWmljQc6E5KwvDVpSgC4FWZtr7BXSsPgHprHUYg8K0xXAy_KEgCPiZVNq9rnRzSnQchAMtx0wyvcsSmIeorqM8DS1sQRRMhGSm3oD1dVkMGuJt9Zo6cm8mbOOmbQp-nVI8P3r3NhneXexEAXqySUIC3XK49oEmRbMIP0zGdMcqrtrUei_cRdc6ypuUAzLSN9A9pvVFmKdO9P_KZRgLR8Bl6EPTCOwjl4FTxDLmuhbyQ35P3NYMUcCojIdnODDx7K-5IdUcpBy41pLAb5X9aa13iPtwKN1gQ2KZ-k0N7FYn_iwdIym-856DbFWx8M6h-BR0v_RUiJFdx8atuOPjafasJhowWTcH9OUPOJ0FULEL04oDF8J2jmmB3fsEQ9SNpFiNgL3pkawEpJriO-gFCR7CchoY-fEYAntpLLE4qF7p2mFfnmVcw3V4ruEQSbjKEZMmVTydLv0uia5x6Tvw7VHf5b2FhcqklBDh-SbkoA6wS7xuXUhBdsORgikVOnCF1q-IHs3lq15ruTO9mLr6B_Z1Di9DLgjexR93sWgEAmf1Usf7hhb3j2PItW3XCT-DAdS3MQ1_klbQyQYfzcAOTXhPQnpe3VvUWtxJkTEwi8HdhmXLoGruXwHPQapF43DrPUFcEbgpZ5Zge9HtrRQQFbiWxczFba8p4HPgE-IwrTkMTcumCDCbSQyGNDWlQSwt_OU-WT5FRmWcCagYd-DktQlMeGzm5QTyORbMGwdKgKjKGpHq-Li9i6Y8g_l7rEbg5cbCvkLAEbdhZQgt9npkHAX3FewPvVrnKwLhOLIvzf0dCeb1AomFO31CJ7NwZP0ri8tRQEhcpDTrcRLXeytECiW7vKrHB24YIm5gISlBB63X_UO3m8KI0l1-DzfnlCo6pjcVe8kyaMHf6PDncgHr45H3sSpzS3yYUIshUiHPb_eZqp_caiR6lQNsAw6-RpustJQLAccKYaOFl8wmQSyGsHB1TV03Urq09iI8Eyzw5KZY56aq-Nnm5FonS43XBcd-cfnlYb9IIeBg7u1XZLp9UHJjNcKlyn8bejeLQPfDGXy9rJTDrnXHh5jmz2GP5k8czsWCGQ9gO5icbiuifmaaNi5iI1PCgPmek7nXHSRd9EOq2ioRbyPNjXySIvfZjrztATptO73I9hZn1XPv-ZASJFSSu1nOdCmFfQb55b2SNs3Ns3fJU8iqIfpk3DL9_UmP4qnySv46mN99bdt4cvStsGFd4Q5NjKjzIruQrqAD_C6uFADNhp_BzVFTxdwZgXkaTg2osgTpdfeGTWLXITT8RVm2jdXWfIMoGQJTjWhRoaXUjklFj9BCEK9nPQhocUc57Xjj5rGCCrH8TYBZsGvLuFMI0DHXcCHnHZyok163RTuzcE8BNaz8U3yZZN3Ov38xn2ChYYvtfb6LIheNiHnoT9WSybUC5ZxmDBZJ7PtZAzmMfA1c8s5V2r4KRFr4p3I6owm71nmo6cTwg4ZofG5kEdnM-DBSel5CfSF7dMxkmlrF4eeg_PhyFP1XWHttzJUxEDwrbssvyvYj_KfOqRluUumeqvyWc56TMcnesvWih5num8_T9xhLb5tr1nTjTz2pHRLDE2Bni6hO4N-dhCRawER8RmAgcRDxuImVAcga6bnreZD7bfJfZNNfHQYuG8rW6dSqwFI8QavMnqFTawJumujHkqe8ZTJsR0T2DsjMrewizxD2WcDIwsQ1GhTck-rRyeRv_ujPDZr9ktQbjFfTD3Mid2zwso0TYwCWHkWDmFPwWUOe2C2PsvBCye5ZLzZlkavOLstOMzIlCM-ZYRchXYPzltNE4lgxCZqDgdMS_NL6JRMJNVL0N-Xs44ReXCBSj0onzf0XL1zotQmiw3-FxFSoWr00idzKrBT6Z_qQXPWr857Ks_Isdsa-rNC3tckP0rHv9Sauu-GRZ9YePXWWlw4KogRbTIME6Jn1f9UvIt6VXMcTXFUIdSu2ZtkCXfmTehT1lk3_A6aV_of04v9qcBQH_SxAK0PNtnDixzYNmwFSxDezvvvfqS-LdrMxRH2FUvFAKvb1mqiuRTax5KfGBYOS6uFo4wViDVk3h8ab0lkDkJTcBkkJhenxH6h6xqyV0FGGy8SlQhtoYEWXn-6jQPBn6DTXM_Zwc4VzuHchPLeRBp5Dobi5dTHhMLMxOAwQAmxOeCM5ZOBaJT8PmR6ciba6MsKjPP8UXgvhvQO4yUAqmoKBYBhJo8kjg96MSZNicGI6yAn4TXjK6Idt2tWbGsu1RmD7Mw1elV2RJ3q3XY40Nbdnh7g68ZoWcHEHN5IHQh3KscxhUqoLtUCToCmm5YSanY8tSTMM0ftiHO6zqxsmk3Unrne2dSo5mRt_kP2-tUxIWiGPulzyJD62ipgJSXzW7EORWaEvp1BL1twNNwnOM3DF30xVvZGzwtCq34ztSMH3oAkRhd7lGdyGaK6BSgteWN_J0DOzJfhrOVNQ9vMH6KiQahe7TQrhh4VA7XI5VOYhYrs2B5L_jF8LKzYrsHLeAVXKtKV50BMDqM69UK_md2ERz7WTL-2ZkzjUIs4xbNQD07R6DgBwRURcRcL0x1TLBq4WlrMcafjvdiux-vVqaGgCzvDewjzeYcBwbispLTHNz5yWlITaBh0R_UBIeY90jE1BtY9gBSznLdBNd1ZeXjSzuCJIztgkHVSADfHQYz2tLsW1AulOOrddCW7gYuYhqLlrNje39MYuBO6t8-MaL4JyGUr6mYFQLczCJ1Gdu7i4rIR8vdA7wxNZAmDVsDpPBdyRmNqjgE4o_Vv9gCTTarTBJkMQn16osGDdgSoMiFcQLgaGHWzHtaGVjSn7eJisx51I47RDGWpO1Y6e6btC6HVwMjbE6d3DvDvjT5zYqir3zIcwYvqNbOnfMF6xaIAM9Pg-tONElCwM6pQlhkGCY_ao5Si6qRHBj6fZPJa0J-LJTRov9b5aklYNk-tFghENryXZzpEaJ2uPTri5hytFeGIxkOVXjfkln-rUj03U1tjwgDm_xMBszEfFUfhQAuK6khb7OGPR6iTTVPVjdXskmK78VOt78xQDz1jNVlNmQFwIh5x6pbNZoFtVYYCuPJd1s6urUgHNvKBeNGNyKPkWIKyOw0KCshb8I6yOCPYZxcTKxwObdEgZ_T3T4GA-Tfx5eDFLwUzTI_lVfIDhtM-0rerUlb7pwl_ez0Cljw6uFXr-br8YhdM6rIXGfW_KvUEvopdVA8qdCcTw_gxroHDq3bP4GRgjX6KQmbRFERAXxlzQpEPZ74aScbgF-fUo-0dZ9mmJ3FpCgtXMx_PfHOA_ig3gdXp_jyT55PwzLhqRO1jPqJB__PDC0JOlM4PWX5uiRJboeTnrGrSlyS-5BebG3Tudm0sF1eaG0zmuwvf27WVIpQi2Q2vDrL3CFecCgzCXz2SYwuX27tpsE1g6Df_0000?></g></svg>