From d832b8c5524a546217d88e76efce19282e861cdd Mon Sep 17 00:00:00 2001 From: Arman Hossain Date: Mon, 15 Dec 2025 13:42:10 +0100 Subject: [PATCH 1/2] feat(tls): implement global TLS session caching for improved performance - Added global session cache to store and retrieve TLS sessions for async requests. - Implemented locking mechanisms for thread safety across platforms. - Introduced functions to get and put sessions in the global cache with expiration handling. - Enhanced client session caching with methods to store and retrieve sessions, supporting HTTP/2. - Updated the TLS connection function to utilize cached sessions for faster reconnections. feat(async_client): enhance AsyncClient with thread pool fallback and improved documentation - Refactored AsyncClient to use true async I/O with a fallback to a thread pool if async bindings are unavailable. - Improved documentation for AsyncClient and its methods, clarifying usage and functionality. - Added support for concurrent requests using asyncio.gather. - Updated request handling to manage headers and body more effectively. feat(client_c): add connection pooling and pre-warming capabilities - Introduced methods for pre-warming connections to reduce latency on subsequent requests. - Added configuration options for connection pooling, including idle timeout and max connections. - Implemented statistics retrieval for connection pools and cleanup of idle connections. --- .../results/darwin/0.2.9/benchmark.json | 4187 +++++++++++++++++ benchmarks/results/darwin/0.2.9/benchmark.md | 133 + .../graphics/01_sequential_all_latest.png | Bin 0 -> 81864 bytes .../graphics/02_concurrent_all_latest.png | Bin 0 -> 71829 bytes .../0.2.9/graphics/03_async_all_latest.png | Bin 0 -> 59885 bytes .../darwin/0.2.9/graphics/04_http2_latest.png | Bin 0 -> 59202 bytes .../0.2.9/graphics/05_stability_latest.png | Bin 0 -> 80264 bytes .../0.2.9/graphics/06_trends_latest.png | Bin 0 -> 79296 bytes .../darwin/0.2.9/graphics/07_proxy_latest.png | Bin 0 -> 87159 bytes .../0.2.9/graphics/08_heatmap_latest.png | Bin 0 -> 127749 bytes .../0.2.9/graphics/09_ranking_latest.png | Bin 0 -> 67859 bytes include/httpmorph.h | 57 + pyproject.toml | 2 +- src/bindings/_async.pyx | 207 +- src/bindings/_httpmorph.pyx | 91 + src/core/async_request.c | 1118 ++++- src/core/async_request.h | 45 +- src/core/async_request_manager.c | 79 +- src/core/async_request_manager.h | 15 + src/core/buffer_pool.c | 20 +- src/core/buffer_pool.h | 18 +- src/core/client.c | 54 +- src/core/connection_pool.c | 280 +- src/core/connection_pool.h | 47 + src/core/core.c | 143 +- src/core/http2_logic.c | 91 +- src/core/internal/internal.h | 18 + src/core/internal/network.h | 17 + src/core/internal/tls.h | 39 + src/core/network.c | 521 +- src/core/tls.c | 396 ++ src/httpmorph/_async_client.py | 282 +- src/httpmorph/_client_c.py | 68 + 33 files changed, 7310 insertions(+), 618 deletions(-) create mode 100644 benchmarks/results/darwin/0.2.9/benchmark.json create mode 100644 benchmarks/results/darwin/0.2.9/benchmark.md create mode 100644 benchmarks/results/darwin/0.2.9/graphics/01_sequential_all_latest.png create mode 100644 benchmarks/results/darwin/0.2.9/graphics/02_concurrent_all_latest.png create mode 100644 benchmarks/results/darwin/0.2.9/graphics/03_async_all_latest.png create mode 100644 benchmarks/results/darwin/0.2.9/graphics/04_http2_latest.png create mode 100644 benchmarks/results/darwin/0.2.9/graphics/05_stability_latest.png create mode 100644 benchmarks/results/darwin/0.2.9/graphics/06_trends_latest.png create mode 100644 benchmarks/results/darwin/0.2.9/graphics/07_proxy_latest.png create mode 100644 benchmarks/results/darwin/0.2.9/graphics/08_heatmap_latest.png create mode 100644 benchmarks/results/darwin/0.2.9/graphics/09_ranking_latest.png diff --git a/benchmarks/results/darwin/0.2.9/benchmark.json b/benchmarks/results/darwin/0.2.9/benchmark.json new file mode 100644 index 0000000..829588a --- /dev/null +++ b/benchmarks/results/darwin/0.2.9/benchmark.json @@ -0,0 +1,4187 @@ +{ + "metadata": { + "timestamp": "2025-12-15T01:10:09.648388", + "version": "0.2.9", + "num_sequential": 25, + "num_concurrent": 25, + "concurrent_workers": 5, + "warmup_requests": 5, + "library_versions": { + "httpmorph": "0.2.9", + "requests": "2.31.0", + "httpx": "0.28.1", + "aiohttp": "3.13.2", + "urllib3": "1.26.16", + "urllib": "built-in (Python 3.11.5)", + "pycurl": "PycURL/7.45.2 libcurl/8.7.1 (SecureTransport) LibreSSL/3.3.6 zlib/1.2.12 nghttp2/1.64.0", + "curl_cffi": "0.13.0" + }, + "os": "Darwin", + "os_version": "Darwin Kernel Version 24.6.0: Mon Jul 14 11:30:30 PDT 2025; root:xnu-11417.140.69~1/RELEASE_ARM64_T6020", + "platform": "macOS-15.6-arm64-arm-64bit", + "processor": "arm", + "python_version": "3.11.5", + "python_implementation": "CPython", + "cpu_count": 10, + "memory_gb": 16.0 + }, + "results": { + "httpmorph": { + "seq_local_http": { + "mean_ms": 0.144250076264143, + "median_ms": 0.12904219329357147, + "min_ms": 0.11579087004065514, + "max_ms": 0.37025008350610733, + "stdev_ms": 0.05006722647617671, + "p50_ms": 0.12904219329357147, + "p95_ms": 0.16645900905132294, + "p99_ms": 0.37025008350610733, + "timings": [ + 0.17029186710715294, + 0.16429228708148003, + 0.1776670105755329, + 0.14312518760561943, + 0.13950001448392868, + 0.128250103443861, + 0.13416633009910583, + 0.13083405792713165, + 0.1261672005057335, + 0.141083262860775, + 0.12629199773073196, + 0.12641586363315582, + 0.12524984776973724, + 0.12908270582556725, + 0.12191710993647575, + 0.12904219329357147, + 0.1215832307934761, + 0.11700019240379333, + 0.12075016275048256, + 0.13066595420241356, + 0.11579087004065514, + 0.12687500566244125, + 0.12350035831332207, + 0.16645900905132294, + 0.37025008350610733 + ], + "q1_avg_ms": 0.1538544117162625, + "q2_avg_ms": 0.13082645212610564, + "q3_avg_ms": 0.12397921333710353, + "q4_avg_ms": 0.16489877764667785, + "trend_slope_ms_per_req": 0.0010403414041950153, + "cv_pct": 34.70863085333577, + "first_avg_ms": 0.1538544117162625, + "last_avg_ms": 0.16489877764667785 + }, + "seq_remote_http": { + "mean_ms": 189.6774117462337, + "median_ms": 189.84154192730784, + "min_ms": 188.34858387708664, + "max_ms": 190.50570763647556, + "stdev_ms": 0.6530622394955856, + "p50_ms": 189.84154192730784, + "p95_ms": 189.54333383589983, + "p99_ms": 190.50570763647556, + "timings": [ + 189.57120925188065, + 190.06854109466076, + 190.25241630151868, + 190.05720876157284, + 189.47750004008412, + 190.02050021663308, + 188.34858387708664, + 190.18229190260172, + 188.38083278387785, + 190.4080407693982, + 190.07949996739626, + 189.25416702404618, + 189.39574994146824, + 190.27758296579123, + 188.4126248769462, + 189.49566688388586, + 189.84154192730784, + 190.24679204449058, + 190.50570763647556, + 190.1871250011027, + 190.33454218879342, + 189.04987536370754, + 188.8714167289436, + 189.54333383589983, + 189.67254227027297 + ], + "q1_avg_ms": 189.9078959443917, + "q2_avg_ms": 189.44223605406782, + "q3_avg_ms": 189.61165977331498, + "q4_avg_ms": 189.73779186074222, + "trend_slope_ms_per_req": -0.00411841946725662, + "cv_pct": 0.34430153463360563, + "first_avg_ms": 189.9078959443917, + "last_avg_ms": 189.73779186074222 + }, + "seq_remote_https": { + "mean_ms": 188.4381414949894, + "median_ms": 188.4418330155313, + "min_ms": 187.0090840384364, + "max_ms": 190.81912469118834, + "stdev_ms": 0.8449359190350675, + "p50_ms": 188.4418330155313, + "p95_ms": 188.58520779758692, + "p99_ms": 190.81912469118834, + "timings": [ + 187.90966598317027, + 188.4943749755621, + 188.6577089317143, + 187.94995779171586, + 188.89924976974726, + 188.62583301961422, + 188.53712501004338, + 188.2600407116115, + 188.573291990906, + 188.48320841789246, + 188.1528333760798, + 187.53720773383975, + 188.2349168881774, + 188.58583364635706, + 188.69404215365648, + 188.18883318454027, + 188.33008268848062, + 187.0090840384364, + 187.34895810484886, + 188.4418330155313, + 188.44058271497488, + 190.73612475767732, + 190.81912469118834, + 188.58520779758692, + 187.45841598138213 + ], + "q1_avg_ms": 188.42279841192067, + "q2_avg_ms": 188.25728454006216, + "q3_avg_ms": 188.17379876660803, + "q4_avg_ms": 188.83289243759853, + "trend_slope_ms_per_req": 0.01862136969486108, + "cv_pct": 0.4483890110206455, + "first_avg_ms": 188.42279841192067, + "last_avg_ms": 188.83289243759853 + }, + "seq_remote_http2": { + "mean_ms": 187.654005009681, + "median_ms": 187.54591699689627, + "min_ms": 186.04316702112556, + "max_ms": 189.89283312112093, + "stdev_ms": 0.8082841150545461, + "p50_ms": 187.54591699689627, + "p95_ms": 187.16995883733034, + "p99_ms": 189.89283312112093, + "timings": [ + 187.36383318901062, + 189.50912496075034, + 188.3255410939455, + 187.7267910167575, + 187.10925010964274, + 187.79466673731804, + 187.92762514203787, + 187.27683322504163, + 188.14404215663671, + 187.2760420665145, + 187.47183308005333, + 187.0649168267846, + 187.55004182457924, + 187.54591699689627, + 188.11724986881018, + 186.8582502938807, + 187.73358268663287, + 187.18333402648568, + 186.04316702112556, + 187.8428333438933, + 188.31029068678617, + 187.43020901456475, + 186.6819579154253, + 187.16995883733034, + 189.89283312112093 + ], + "q1_avg_ms": 187.97153451790413, + "q2_avg_ms": 187.52688208284476, + "q3_avg_ms": 187.49806261621416, + "q4_avg_ms": 187.62446427717805, + "trend_slope_ms_per_req": -0.013415408678925954, + "cv_pct": 0.43073107606354955, + "first_avg_ms": 187.97153451790413, + "last_avg_ms": 187.62446427717805 + }, + "seq_proxy_http": { + "mean_ms": 1170.2142515033484, + "median_ms": 726.183167193085, + "min_ms": 603.3246251754463, + "max_ms": 5809.221083763987, + "stdev_ms": 1386.2637330171565, + "p50_ms": 726.183167193085, + "p95_ms": 884.1561251319945, + "p99_ms": 5809.221083763987, + "timings": [ + 693.8903327099979, + 726.183167193085, + 948.5019580461085, + 607.7698329463601, + 612.3942909762263, + 746.2264588102698, + 610.6534576974809, + 625.8991663344204, + 903.435249812901, + 643.5836660675704, + 5809.221083763987, + 1468.1351245380938, + 840.0403331033885, + 709.55054089427, + 5656.697084195912, + 608.6151250638068, + 679.5627907849848, + 955.5643331259489, + 607.0230002515018, + 603.3246251754463, + 906.0230422765017, + 921.511874999851, + 798.9799580536783, + 884.1561251319945, + 688.4136656299233 + ], + "q1_avg_ms": 722.4943401136746, + "q2_avg_ms": 1676.8212913690757, + "q3_avg_ms": 1575.0050345280517, + "q4_avg_ms": 772.7760416455567, + "trend_slope_ms_per_req": 3.008979333278078, + "cv_pct": 118.46238680107118, + "first_avg_ms": 722.4943401136746, + "last_avg_ms": 772.7760416455567 + }, + "seq_proxy_https": { + "mean_ms": 2048.5309833846986, + "median_ms": 1359.2293746769428, + "min_ms": 1184.538250323385, + "max_ms": 6690.919375047088, + "stdev_ms": 1749.1460291239796, + "p50_ms": 1359.2293746769428, + "p95_ms": 1606.7098332569003, + "p99_ms": 6690.919375047088, + "timings": [ + 1601.1774577200413, + 1250.220709014684, + 1195.6598344258964, + 6690.919375047088, + 6411.0235422849655, + 1467.7027082070708, + 1192.6315841265023, + 1390.3912920504808, + 1498.8950416445732, + 1213.4404159151018, + 1209.4079586677253, + 1628.278583753854, + 1190.7485420815647, + 1184.538250323385, + 1559.113415889442, + 1233.0532502382994, + 1228.1472496688366, + 1290.6245831400156, + 1453.4712908789515, + 3490.8317080698907, + 6485.494750086218, + 1359.2293746769428, + 1194.4374996237457, + 1606.7098332569003, + 1187.1263338252902 + ], + "q1_avg_ms": 3102.783937783291, + "q2_avg_ms": 1355.5074793597062, + "q3_avg_ms": 1281.0375485569239, + "q4_avg_ms": 2396.7572557739913, + "trend_slope_ms_per_req": -26.145593229179774, + "cv_pct": 85.38538315070743, + "first_avg_ms": 3102.783937783291, + "last_avg_ms": 2396.7572557739913 + }, + "seq_proxy_http2": { + "mean_ms": 1782.8064450621605, + "median_ms": 1332.3746249079704, + "min_ms": 1150.150750298053, + "max_ms": 6502.383749932051, + "stdev_ms": 1431.3320620736904, + "p50_ms": 1332.3746249079704, + "p95_ms": 1212.6606251113117, + "p99_ms": 6502.383749932051, + "timings": [ + 1220.32504202798, + 1213.3909589610994, + 1243.8919167034328, + 1475.500916596502, + 1150.150750298053, + 1513.5972923599184, + 1658.949709031731, + 1290.150625165552, + 1202.7312079444528, + 1348.8140418194234, + 1457.295374944806, + 1227.6534168049693, + 1390.6690408475697, + 1332.3746249079704, + 1564.1718748956919, + 1578.7571663968265, + 1285.4978749528527, + 1187.6254589296877, + 6471.038791816682, + 1190.9928331151605, + 6502.383749932051, + 1427.2542502731085, + 2136.7144999094307, + 1212.6606251113117, + 1287.5690828077495 + ], + "q1_avg_ms": 1302.8094794911642, + "q2_avg_ms": 1364.2657292851557, + "q3_avg_ms": 1389.8493401550998, + "q4_avg_ms": 2889.801976137928, + "trend_slope_ms_per_req": 61.193701807552806, + "cv_pct": 80.28533136830704, + "first_avg_ms": 1302.8094794911642, + "last_avg_ms": 2889.801976137928 + }, + "conc_local_http": { + "total_time_s": 0.008241292089223862, + "req_per_sec": 3033.504907888105, + "avg_ms": 0.32965168356895447, + "mean_completion_ms": 6.249804683029652, + "median_completion_ms": 6.365000270307064, + "min_completion_ms": 3.773665986955166, + "max_completion_ms": 8.106666151434183, + "p95_completion_ms": 8.044333197176456, + "completion_times": [ + 3.773665986955166, + 4.105375148355961, + 4.315875004976988, + 4.575291182845831, + 4.865041002631187, + 5.09420782327652, + 5.2305408753454685, + 5.391540937125683, + 5.51295792683959, + 5.707832984626293, + 5.903500132262707, + 6.156166084110737, + 6.365000270307064, + 6.536958273500204, + 6.728624925017357, + 6.937915924936533, + 7.076832931488752, + 7.300457917153835, + 7.491915952414274, + 7.588500156998634, + 7.706833072006702, + 7.783208042383194, + 7.94587517157197, + 8.044333197176456, + 8.106666151434183 + ], + "trend_slope_ms_per_req": 0.18136907906199878, + "cv_pct": 21.46897278090493, + "first_avg_ms": 4.454909358173609, + "last_avg_ms": 7.809618820569345 + }, + "conc_remote_http": { + "total_time_s": 1.1501105413772166, + "req_per_sec": 21.737041006565672, + "avg_ms": 46.00442165508866, + "mean_completion_ms": 758.9461722224951, + "median_completion_ms": 758.1484173424542, + "min_completion_ms": 375.79300021752715, + "max_completion_ms": 1149.6657920069993, + "p95_completion_ms": 1149.5833341032267, + "completion_times": [ + 375.79300021752715, + 376.00608402863145, + 380.2274172194302, + 382.4120839126408, + 383.81112506613135, + 565.1902090758085, + 565.404792316258, + 568.838834296912, + 573.9950840361416, + 574.2766670882702, + 753.0818339437246, + 753.2144170254469, + 758.1484173424542, + 765.6166669912636, + 765.8257503062487, + 940.0669173337519, + 940.3072502464056, + 947.1647092141211, + 957.3477092199028, + 957.5368342921138, + 1126.8273340538144, + 1126.9627502188087, + 1136.3492920063436, + 1149.5833341032267, + 1149.6657920069993 + ], + "trend_slope_ms_per_req": 36.60950032277749, + "cv_pct": 36.05815041461019, + "first_avg_ms": 410.57331992002827, + "last_avg_ms": 1086.3247208430298 + }, + "conc_remote_https": { + "total_time_s": 1.4320545829832554, + "req_per_sec": 17.457435140439976, + "avg_ms": 57.282183319330215, + "mean_completion_ms": 956.723891440779, + "median_completion_ms": 941.660207696259, + "min_completion_ms": 560.4509576223791, + "max_completion_ms": 1431.7953325808048, + "p95_completion_ms": 1317.345999646932, + "completion_times": [ + 560.4509576223791, + 567.9397499188781, + 568.0558327585459, + 569.3518328480422, + 614.0013327822089, + 746.5834999457002, + 754.400166682899, + 754.4672917574644, + 754.8355418257415, + 820.2426247298717, + 933.7103329598904, + 941.5214997716248, + 941.660207696259, + 941.7423750273883, + 1024.9482919462025, + 1120.8506668917835, + 1128.59204178676, + 1128.7249997258186, + 1128.7957075983286, + 1227.4528327398002, + 1306.8758328445256, + 1316.4625419303775, + 1317.2897920012474, + 1317.345999646932, + 1431.7953325808048 + ], + "trend_slope_ms_per_req": 37.32479019663655, + "cv_pct": 28.978534315576947, + "first_avg_ms": 604.3972009792924, + "last_avg_ms": 1292.2882913345736 + }, + "conc_remote_http2": { + "total_time_s": 1.3584012500941753, + "req_per_sec": 18.403987774795407, + "avg_ms": 54.33605000376701, + "mean_completion_ms": 955.9186600707471, + "median_completion_ms": 962.1397918090224, + "min_completion_ms": 564.5022499375045, + "max_completion_ms": 1357.9008746892214, + "p95_completion_ms": 1346.47799981758, + "completion_times": [ + 564.5022499375045, + 568.516374565661, + 579.2411249130964, + 581.0591247864068, + 585.0832499563694, + 751.1947499588132, + 755.3754169493914, + 770.4078336246312, + 772.0770416781306, + 779.1688339784741, + 938.2739588618279, + 943.2995417155325, + 962.1397918090224, + 962.5814999453723, + 971.3900838978589, + 1126.114041544497, + 1131.1677498742938, + 1153.9336666464806, + 1154.0567916817963, + 1164.1076668165624, + 1314.206708688289, + 1319.3555418401957, + 1346.3345835916698, + 1346.47799981758, + 1357.9008746892214 + ], + "trend_slope_ms_per_req": 36.91520913862265, + "cv_pct": 28.760881837557694, + "first_avg_ms": 604.9328123529752, + "last_avg_ms": 1286.062881017902 + }, + "conc_proxy_http": { + "total_time_s": 12.430236999876797, + "req_per_sec": 2.011224725662736, + "avg_ms": 497.2094799950719, + "mean_completion_ms": 5036.29699524492, + "median_completion_ms": 5786.063958890736, + "min_completion_ms": 614.9575840681791, + "max_completion_ms": 12429.302708711475, + "p95_completion_ms": 8746.669666841626, + "completion_times": [ + 614.9575840681791, + 725.1000837422907, + 1369.175999891013, + 1405.7828336954117, + 1979.6370416879654, + 2020.957708824426, + 2804.2382919229567, + 2861.907749902457, + 3500.7834169082344, + 4147.429083939642, + 4856.2532919459045, + 5687.37025000155, + 5786.063958890736, + 5809.135999996215, + 5829.319499898702, + 6291.447292082012, + 6502.3774998262525, + 6514.0215419232845, + 6615.033541806042, + 7128.095333930105, + 7204.497749917209, + 7227.4817088618875, + 7850.38504190743, + 8746.669666841626, + 12429.302708711475 + ], + "trend_slope_ms_per_req": 374.1517737149619, + "cv_pct": 56.87621170204801, + "first_avg_ms": 1352.6018753182143, + "last_avg_ms": 8171.637964567968 + }, + "conc_proxy_https": { + "total_time_s": 20.445954207796603, + "req_per_sec": 1.2227357914392087, + "avg_ms": 817.8381683118641, + "mean_completion_ms": 6897.201451789588, + "median_completion_ms": 6959.186541847885, + "min_completion_ms": 1190.3670001775026, + "max_completion_ms": 20445.160792209208, + "p95_completion_ms": 11888.901041820645, + "completion_times": [ + 1190.3670001775026, + 1191.6307918727398, + 1298.0802082456648, + 1434.6318752504885, + 2393.1604172103107, + 2623.5165828838944, + 2637.129125185311, + 3399.977874942124, + 3776.343416888267, + 5048.391167074442, + 5441.192917060107, + 6714.169625192881, + 6959.186541847885, + 8106.24362481758, + 8575.574582908303, + 8988.61641716212, + 9057.52612510696, + 9295.74149986729, + 9733.438916970044, + 10278.099916875362, + 10299.92025019601, + 10723.808832932264, + 10929.22675004229, + 11888.901041820645, + 20445.160792209208 + ], + "trend_slope_ms_per_req": 583.1851069865605, + "cv_pct": 66.17997839347146, + "first_avg_ms": 1688.5644792734336, + "last_avg_ms": 12042.650928720832 + }, + "conc_proxy_http2": { + "total_time_s": 35.1433290829882, + "req_per_sec": 0.7113725606633472, + "avg_ms": 1405.733163319528, + "mean_completion_ms": 13965.175486691296, + "median_completion_ms": 12849.97829189524, + "min_completion_ms": 1189.2949999310076, + "max_completion_ms": 35142.593207769096, + "p95_completion_ms": 31500.604500062764, + "completion_times": [ + 1189.2949999310076, + 3261.0407499596477, + 3263.406875077635, + 3266.8745829723775, + 3288.0373750813305, + 3299.7741671279073, + 6053.9959580637515, + 6407.765166833997, + 8988.040249794722, + 9319.094167090952, + 9650.663542095572, + 11162.34558308497, + 12849.97829189524, + 13428.79920778796, + 13430.737666785717, + 17468.075667042285, + 17833.929541986436, + 19290.80795776099, + 19817.63087492436, + 21332.81487505883, + 23597.013750113547, + 24300.268666818738, + 29985.799542162567, + 31500.604500062764, + 35142.593207769096 + ], + "trend_slope_ms_per_req": 1292.2742124037961, + "cv_pct": 69.87367229137426, + "first_avg_ms": 2928.0714583583176, + "last_avg_ms": 26525.246488129986 + }, + "async_local_http": { + "total_time_s": 0.12917670886963606, + "req_per_sec": 193.53334063673793, + "avg_ms": 5.167068354785442 + }, + "async_remote_http": { + "total_time_s": 0.5212441668845713, + "req_per_sec": 47.96216742227105, + "avg_ms": 20.849766675382853 + }, + "async_remote_https": { + "total_time_s": 2.5816080840304494, + "req_per_sec": 9.683886626574854, + "avg_ms": 103.26432336121798 + }, + "async_remote_http2": { + "total_time_s": 1.618254499975592, + "req_per_sec": 15.448744310846703, + "avg_ms": 64.73017999902368 + }, + "async_proxy_http": { + "total_time_s": 7.851042291149497, + "req_per_sec": 3.1842905786130555, + "avg_ms": 314.0416916459799 + }, + "async_proxy_https": { + "total_time_s": 13.718291707802564, + "req_per_sec": 1.8223843414687508, + "avg_ms": 548.7316683121026 + }, + "async_proxy_http2": { + "total_time_s": 16.658585249911994, + "req_per_sec": 1.5007276803492104, + "avg_ms": 666.3434099964797 + } + }, + "requests": { + "seq_local_http": { + "mean_ms": 1.162621658295393, + "median_ms": 1.1517498642206192, + "min_ms": 0.8187079802155495, + "max_ms": 1.607667189091444, + "stdev_ms": 0.2367250209985829, + "p50_ms": 1.1517498642206192, + "p95_ms": 0.9412080980837345, + "p99_ms": 1.607667189091444, + "timings": [ + 1.607667189091444, + 1.5984168276190758, + 1.5465840697288513, + 1.4682910405099392, + 1.325125340372324, + 1.2163748033344746, + 1.232209149748087, + 1.3577500358223915, + 1.265041995793581, + 1.3229581527411938, + 1.1517498642206192, + 1.0377909056842327, + 0.9905421175062656, + 1.1203750036656857, + 1.1984161101281643, + 1.002333126962185, + 1.0020830668509007, + 1.272125169634819, + 1.054458785802126, + 0.9314999915659428, + 0.9075826965272427, + 0.8313748985528946, + 0.8648750372231007, + 0.9412080980837345, + 0.8187079802155495 + ], + "q1_avg_ms": 1.4604098784426849, + "q2_avg_ms": 1.2279166840016842, + "q3_avg_ms": 1.0976457657913368, + "q4_avg_ms": 0.9071010697100844, + "trend_slope_ms_per_req": -0.02916386745010431, + "cv_pct": 20.361311808491788, + "first_avg_ms": 1.4604098784426849, + "last_avg_ms": 0.9071010697100844 + }, + "seq_remote_http": { + "mean_ms": 194.141895044595, + "median_ms": 194.07758302986622, + "min_ms": 193.15520906820893, + "max_ms": 195.61712490394711, + "stdev_ms": 0.6475938580391262, + "p50_ms": 194.07758302986622, + "p95_ms": 193.83454183116555, + "p99_ms": 195.61712490394711, + "timings": [ + 193.48191563040018, + 194.66241681948304, + 195.61712490394711, + 194.39070811495185, + 194.07758302986622, + 193.70295805856586, + 193.15520906820893, + 195.0382092036307, + 193.23345785960555, + 193.90970841050148, + 195.41391590610147, + 194.07766731455922, + 194.34408331289887, + 193.95612506195903, + 193.64558393135667, + 193.4145838022232, + 193.7164170667529, + 194.5770001038909, + 194.56291664391756, + 193.4233750216663, + 194.54329181462526, + 193.73075012117624, + 194.41454112529755, + 193.83454183116555, + 194.62329195812345 + ], + "q1_avg_ms": 194.3221177595357, + "q2_avg_ms": 194.13802796043456, + "q3_avg_ms": 193.94229887984693, + "q4_avg_ms": 194.1618155022817, + "trend_slope_ms_per_req": -0.006675786840227934, + "cv_pct": 0.3335672899918752, + "first_avg_ms": 194.3221177595357, + "last_avg_ms": 194.1618155022817 + }, + "seq_remote_https": { + "mean_ms": 189.34633834287524, + "median_ms": 189.25187503919005, + "min_ms": 186.9304170832038, + "max_ms": 191.19833270087838, + "stdev_ms": 1.4190377948842643, + "p50_ms": 189.25187503919005, + "p95_ms": 191.08545826748013, + "p99_ms": 191.19833270087838, + "timings": [ + 190.2975421398878, + 191.19833270087838, + 190.98633294925094, + 189.18370781466365, + 189.9540419690311, + 190.76808309182525, + 190.99600007757545, + 188.31366673111916, + 190.59329200536013, + 188.37895896285772, + 187.13808292523026, + 187.50762520357966, + 189.25187503919005, + 189.20129211619496, + 189.77133370935917, + 187.24083295091987, + 186.9304170832038, + 188.3756248280406, + 187.3988751322031, + 188.7110830284655, + 189.60237503051758, + 191.0811671987176, + 190.8788327127695, + 191.08545826748013, + 188.81362490355968 + ], + "q1_avg_ms": 190.39800677758953, + "q2_avg_ms": 188.82127098428705, + "q3_avg_ms": 188.46189595448473, + "q4_avg_ms": 189.6530594676733, + "trend_slope_ms_per_req": -0.04049038299574302, + "cv_pct": 0.7494403151935366, + "first_avg_ms": 190.39800677758953, + "last_avg_ms": 189.6530594676733 + }, + "seq_proxy_http": { + "mean_ms": 374.34930488467216, + "median_ms": 343.79641618579626, + "min_ms": 338.35229091346264, + "max_ms": 710.8548749238253, + "stdev_ms": 83.11094633081758, + "p50_ms": 343.79641618579626, + "p95_ms": 338.35229091346264, + "p99_ms": 710.8548749238253, + "timings": [ + 345.59070877730846, + 375.2997498959303, + 710.8548749238253, + 339.50154203921556, + 340.71462508291006, + 341.75066696479917, + 560.012917034328, + 340.3382087126374, + 339.2547909170389, + 341.5122078731656, + 341.1340001039207, + 342.60529186576605, + 350.6572498008609, + 352.4147910065949, + 344.2087909206748, + 342.1781659126282, + 341.5150409564376, + 343.0377501063049, + 357.1142079308629, + 388.4467501193285, + 383.2957921549678, + 391.486959066242, + 363.65883285179734, + 338.35229091346264, + 343.79641618579626 + ], + "q1_avg_ms": 408.9520279473315, + "q2_avg_ms": 377.4762360844761, + "q3_avg_ms": 345.6686314505835, + "q4_avg_ms": 366.5930356032082, + "trend_slope_ms_per_req": -3.0318614625586915, + "cv_pct": 22.20144267569083, + "first_avg_ms": 408.9520279473315, + "last_avg_ms": 366.5930356032082 + }, + "seq_proxy_https": { + "mean_ms": 467.72862343117595, + "median_ms": 466.43858309835196, + "min_ms": 461.4193341694772, + "max_ms": 481.95466585457325, + "stdev_ms": 5.364563121218678, + "p50_ms": 466.43858309835196, + "p95_ms": 462.1134172193706, + "p99_ms": 481.95466585457325, + "timings": [ + 464.2585003748536, + 463.7600420974195, + 463.9688339084387, + 463.8784169219434, + 464.7005000151694, + 464.82954174280167, + 466.4679584093392, + 475.748083088547, + 467.6550840958953, + 471.13495925441384, + 478.0935407616198, + 467.06933388486505, + 469.9390409514308, + 466.53375029563904, + 466.8558747507632, + 466.43858309835196, + 469.89633282646537, + 481.95466585457325, + 464.8527908138931, + 462.784459348768, + 465.11879190802574, + 477.7865828946233, + 465.95716709271073, + 462.1134172193706, + 461.4193341694772 + ], + "q1_avg_ms": 464.23263917677104, + "q2_avg_ms": 471.02815991578, + "q3_avg_ms": 470.2697079628706, + "q4_avg_ms": 465.7189347781241, + "trend_slope_ms_per_req": 0.05777813458385376, + "cv_pct": 1.1469392405077061, + "first_avg_ms": 464.23263917677104, + "last_avg_ms": 465.7189347781241 + }, + "conc_local_http": { + "total_time_s": 0.0320713329128921, + "req_per_sec": 779.5123473009894, + "avg_ms": 1.2828533165156841, + "mean_completion_ms": 22.000511698424816, + "median_completion_ms": 22.65175012871623, + "min_completion_ms": 9.591124951839447, + "max_completion_ms": 31.860291957855225, + "p95_completion_ms": 31.748208217322826, + "completion_times": [ + 9.591124951839447, + 10.614583268761635, + 11.199875269085169, + 13.327416963875294, + 14.236750081181526, + 14.63312515988946, + 16.057082917541265, + 17.561625223606825, + 18.169499933719635, + 18.97616731002927, + 20.617333240807056, + 21.22312504798174, + 22.65175012871623, + 23.834249936044216, + 25.24866722524166, + 25.517582893371582, + 25.77975019812584, + 27.556207962334156, + 27.97050029039383, + 28.893208131194115, + 30.0288749858737, + 31.037208158522844, + 31.67858300730586, + 31.748208217322826, + 31.860291957855225 + ], + "trend_slope_ms_per_req": 0.9795577809787713, + "cv_pct": 32.913939840430984, + "first_avg_ms": 12.267145949105421, + "last_avg_ms": 30.459553535495484 + }, + "conc_remote_http": { + "total_time_s": 1.2554045412689447, + "req_per_sec": 19.913899606202126, + "avg_ms": 50.21618165075779, + "mean_completion_ms": 861.0089987702668, + "median_completion_ms": 858.4204171784222, + "min_completion_ms": 480.38833402097225, + "max_completion_ms": 1255.0359591841698, + "p95_completion_ms": 1254.586084280163, + "completion_times": [ + 480.38833402097225, + 482.00216703116894, + 482.2643343359232, + 484.6918750554323, + 484.9491249769926, + 667.0025000348687, + 671.023459173739, + 671.65237525478, + 672.5266673602164, + 673.0480422265828, + 852.3957920260727, + 858.1953751854599, + 858.4204171784222, + 858.6158752441406, + 859.0717501938343, + 1039.291167166084, + 1047.6448340341449, + 1047.982667107135, + 1048.2062501832843, + 1048.5362503677607, + 1233.4962501190603, + 1239.8400423116982, + 1254.3573752045631, + 1254.586084280163, + 1255.0359591841698 + ], + "trend_slope_ms_per_req": 36.71407263260335, + "cv_pct": 31.934627656537295, + "first_avg_ms": 513.549722575893, + "last_avg_ms": 1190.5797445215285 + }, + "conc_remote_https": { + "total_time_s": 1.499727957881987, + "req_per_sec": 16.66968990516561, + "avg_ms": 59.989118315279484, + "mean_completion_ms": 1098.4988186694682, + "median_completion_ms": 1092.557500116527, + "min_completion_ms": 707.098042126745, + "max_completion_ms": 1499.4230838492513, + "p95_completion_ms": 1499.2259168066084, + "completion_times": [ + 707.098042126745, + 714.6909171715379, + 716.8205841444433, + 725.8779588155448, + 726.6138340346515, + 895.92200005427, + 902.0840837620199, + 904.6392501331866, + 919.0196669660509, + 919.3126247264445, + 1083.4755841642618, + 1091.6536669246852, + 1092.557500116527, + 1112.3007917776704, + 1112.6601248979568, + 1271.09833387658, + 1280.0137088634074, + 1280.3832087665796, + 1305.7246669195592, + 1306.115083862096, + 1458.8102921843529, + 1468.101624865085, + 1468.8479169271886, + 1499.2259168066084, + 1499.4230838492513 + ], + "trend_slope_ms_per_req": 36.88146758788767, + "cv_pct": 25.015687841777957, + "first_avg_ms": 747.8372227245321, + "last_avg_ms": 1429.4640836305916 + }, + "conc_proxy_http": { + "total_time_s": 2.747519333381206, + "req_per_sec": 9.099117045787631, + "avg_ms": 109.90077333524823, + "mean_completion_ms": 1738.8073234446347, + "median_completion_ms": 1749.8945835977793, + "min_completion_ms": 723.8233336247504, + "max_completion_ms": 2747.2244589589536, + "p95_completion_ms": 2570.418749935925, + "completion_times": [ + 723.8233336247504, + 755.3478749468923, + 915.943874977529, + 1063.1399168632925, + 1068.4638335369527, + 1083.6860835552216, + 1331.1335416510701, + 1386.5827918052673, + 1403.8180415518582, + 1412.417999934405, + 1559.4637915492058, + 1741.6587499901652, + 1749.8945835977793, + 1753.3540837466717, + 1946.8824588693678, + 2043.4417915530503, + 2084.626874886453, + 2085.2319998666644, + 2149.986374657601, + 2417.5295839086175, + 2426.7602916806936, + 2506.848916877061, + 2542.503083590418, + 2570.418749935925, + 2747.2244589589536 + ], + "trend_slope_ms_per_req": 82.70618830592586, + "cv_pct": 35.167211700600596, + "first_avg_ms": 935.0674862507731, + "last_avg_ms": 2480.181637087039 + }, + "conc_proxy_https": { + "total_time_s": 6.691830916330218, + "req_per_sec": 3.735898338224889, + "avg_ms": 267.67323665320873, + "mean_completion_ms": 2560.768060274422, + "median_completion_ms": 2436.846250202507, + "min_completion_ms": 1391.1971668712795, + "max_completion_ms": 6691.3318750448525, + "p95_completion_ms": 3417.9582921788096, + "completion_times": [ + 1391.1971668712795, + 1440.7239998690784, + 1444.1177500411868, + 1560.2547922171652, + 1739.7855841554701, + 1836.554542183876, + 1839.6731251850724, + 1900.6149591878057, + 2086.212874855846, + 2234.7519588656723, + 2235.510875005275, + 2238.982167094946, + 2436.846250202507, + 2624.4825422763824, + 2627.954500261694, + 2628.6772922612727, + 2783.0972499214113, + 2966.9690001755953, + 3022.9071248322725, + 3023.2123751193285, + 3124.4583749212325, + 3306.691417004913, + 3416.2354171276093, + 3417.9582921788096, + 6691.3318750448525 + ], + "trend_slope_ms_per_req": 121.34243268698741, + "cv_pct": 41.90622382857742, + "first_avg_ms": 1568.772305889676, + "last_avg_ms": 3714.684982318431 + } + }, + "httpx": { + "seq_local_http": { + "mean_ms": 0.6146181933581829, + "median_ms": 0.582708977162838, + "min_ms": 0.5057081580162048, + "max_ms": 0.783165916800499, + "stdev_ms": 0.08507179217609606, + "p50_ms": 0.582708977162838, + "p95_ms": 0.5557090044021606, + "p99_ms": 0.783165916800499, + "timings": [ + 0.7401658222079277, + 0.5959169939160347, + 0.6492915563285351, + 0.559207983314991, + 0.5920836701989174, + 0.5772081203758717, + 0.6303749978542328, + 0.7438329048454762, + 0.7316656410694122, + 0.5925842560827732, + 0.5452092736959457, + 0.7187081500887871, + 0.5554161034524441, + 0.5806246772408485, + 0.5510407499969006, + 0.5311667919158936, + 0.5163326859474182, + 0.5057081580162048, + 0.5374159663915634, + 0.582708977162838, + 0.5526668392121792, + 0.6792498752474785, + 0.783165916800499, + 0.5557090044021606, + 0.7579997181892395 + ], + "q1_avg_ms": 0.6189790243903796, + "q2_avg_ms": 0.6603958706061045, + "q3_avg_ms": 0.540048194428285, + "q4_avg_ms": 0.635559471057994, + "trend_slope_ms_per_req": -0.0007741321594669268, + "cv_pct": 13.841404809590221, + "first_avg_ms": 0.6189790243903796, + "last_avg_ms": 0.635559471057994 + }, + "seq_remote_http": { + "mean_ms": 381.1719783395529, + "median_ms": 378.83100006729364, + "min_ms": 374.8513753525913, + "max_ms": 409.5292501151562, + "stdev_ms": 8.03819985590015, + "p50_ms": 378.83100006729364, + "p95_ms": 379.1756662540138, + "p99_ms": 409.5292501151562, + "timings": [ + 376.10104167833924, + 374.87895879894495, + 376.8551661632955, + 380.7047917507589, + 388.5894166305661, + 374.8513753525913, + 379.80725010856986, + 400.7198750041425, + 381.85454113408923, + 378.2685003243387, + 375.95529202371836, + 377.3219999857247, + 378.83100006729364, + 380.412541795522, + 378.5457918420434, + 376.87495816498995, + 381.06341706588864, + 375.9500002488494, + 384.07258316874504, + 375.4000002518296, + 385.3447078727186, + 380.1126657053828, + 409.5292501151562, + 379.1756662540138, + 378.07866698130965 + ], + "q1_avg_ms": 378.66345839574933, + "q2_avg_ms": 382.3212430967639, + "q3_avg_ms": 378.6129515307645, + "q4_avg_ms": 384.53050576416507, + "trend_slope_ms_per_req": 0.2099682602028434, + "cv_pct": 2.10881185204533, + "first_avg_ms": 378.66345839574933, + "last_avg_ms": 384.53050576416507 + }, + "seq_remote_https": { + "mean_ms": 571.5474549867213, + "median_ms": 566.8797078542411, + "min_ms": 559.4729580916464, + "max_ms": 610.7578752562404, + "stdev_ms": 13.014390710056453, + "p50_ms": 566.8797078542411, + "p95_ms": 565.4296670109034, + "p99_ms": 610.7578752562404, + "timings": [ + 582.60487485677, + 610.7578752562404, + 566.1199167370796, + 565.0218329392374, + 564.3547498621047, + 568.0108750239015, + 562.5335001386702, + 563.532792031765, + 567.9453327320516, + 568.1814588606358, + 568.6119580641389, + 568.1808749213815, + 566.5722922421992, + 559.4729580916464, + 581.2791250646114, + 566.6352910920978, + 562.7827080897987, + 569.7320420295, + 579.0415829978883, + 566.8797078542411, + 560.7340829446912, + 565.740458201617, + 608.6095003411174, + 565.4296670109034, + 579.9209172837436 + ], + "q1_avg_ms": 576.1450207792222, + "q2_avg_ms": 566.4976527914405, + "q3_avg_ms": 567.7457361016423, + "q4_avg_ms": 575.1937023763146, + "trend_slope_ms_per_req": -0.011504354815070447, + "cv_pct": 2.2770446437135856, + "first_avg_ms": 576.1450207792222, + "last_avg_ms": 575.1937023763146 + }, + "seq_remote_http2": { + "mean_ms": 571.0760398767889, + "median_ms": 567.0302920043468, + "min_ms": 554.7492909245193, + "max_ms": 607.4514579959214, + "stdev_ms": 12.567179897533938, + "p50_ms": 567.0302920043468, + "p95_ms": 566.9469167478383, + "p99_ms": 607.4514579959214, + "timings": [ + 567.4522500485182, + 562.6826668158174, + 607.4514579959214, + 568.7822080217302, + 570.7910000346601, + 578.7093746475875, + 566.7615826241672, + 576.9869997166097, + 567.4616666510701, + 554.7492909245193, + 563.6603748425841, + 589.3772500567138, + 561.4455416798592, + 566.9951657764614, + 567.0302920043468, + 565.7539172098041, + 573.530875146389, + 604.4112504459918, + 563.7029581703246, + 565.7110000029206, + 565.5832076445222, + 557.2130410000682, + 572.8112086653709, + 566.9469167478383, + 570.8995000459254 + ], + "q1_avg_ms": 575.9781595940391, + "q2_avg_ms": 569.8328608026108, + "q3_avg_ms": 573.1945070438087, + "q4_avg_ms": 566.1239760395672, + "trend_slope_ms_per_req": -0.2572955685452773, + "cv_pct": 2.2006141074042156, + "first_avg_ms": 575.9781595940391, + "last_avg_ms": 566.1239760395672 + }, + "seq_proxy_http": { + "mean_ms": 490.3380333632231, + "median_ms": 479.16570771485567, + "min_ms": 475.59129213914275, + "max_ms": 564.8164167068899, + "stdev_ms": 24.858640547046548, + "p50_ms": 479.16570771485567, + "p95_ms": 479.53725000843406, + "p99_ms": 564.8164167068899, + "timings": [ + 517.9494158364832, + 475.59129213914275, + 564.8164167068899, + 476.5935828909278, + 477.20266599208117, + 476.2202091515064, + 506.44433312118053, + 476.08595760539174, + 477.24570892751217, + 477.0802496932447, + 477.52062510699034, + 483.128750231117, + 542.9926668293774, + 481.38904199004173, + 540.9164582379162, + 480.3975000977516, + 477.56033297628164, + 477.8032498434186, + 476.3242918998003, + 480.38133420050144, + 479.16570771485567, + 498.8085418008268, + 480.2562091499567, + 479.53725000843406, + 477.039041928947 + ], + "q1_avg_ms": 498.06226378617185, + "q2_avg_ms": 482.9176041142394, + "q3_avg_ms": 500.17654166246456, + "q4_avg_ms": 481.6446252433317, + "trend_slope_ms_per_req": -0.8340198209939095, + "cv_pct": 5.069694548583436, + "first_avg_ms": 498.06226378617185, + "last_avg_ms": 481.6446252433317 + }, + "seq_proxy_https": { + "mean_ms": 343.6147982813418, + "median_ms": 341.88474994152784, + "min_ms": 338.13483314588666, + "max_ms": 360.92987516894937, + "stdev_ms": 5.495510738827074, + "p50_ms": 341.88474994152784, + "p95_ms": 340.39041586220264, + "p99_ms": 360.92987516894937, + "timings": [ + 348.4135000035167, + 342.4807502888143, + 339.33679200708866, + 340.82579240202904, + 341.88474994152784, + 345.38650000467896, + 338.13483314588666, + 347.02929109334946, + 339.2225420102477, + 339.59729177877307, + 341.71987511217594, + 338.5527920909226, + 344.50691705569625, + 341.71695820987225, + 342.84354094415903, + 339.63937498629093, + 342.54316659644246, + 357.00987512245774, + 349.7429583221674, + 342.8590833209455, + 340.73495771735907, + 360.92987516894937, + 341.67070779949427, + 340.39041586220264, + 343.19741604849696 + ], + "q1_avg_ms": 343.05468077460927, + "q2_avg_ms": 340.70943753855926, + "q3_avg_ms": 344.70997215248644, + "q4_avg_ms": 345.64648774851645, + "trend_slope_ms_per_req": 0.17705452234412616, + "cv_pct": 1.5993230694120193, + "first_avg_ms": 343.05468077460927, + "last_avg_ms": 345.64648774851645 + }, + "seq_proxy_http2": { + "mean_ms": 320.45710830017924, + "median_ms": 319.1261668689549, + "min_ms": 317.2134580090642, + "max_ms": 352.8759158216417, + "stdev_ms": 6.955205121251149, + "p50_ms": 319.1261668689549, + "p95_ms": 319.2277499474585, + "p99_ms": 352.8759158216417, + "timings": [ + 317.72354105487466, + 317.2134580090642, + 317.41050025448203, + 319.1261668689549, + 319.58324974402785, + 321.30695786327124, + 317.4769161269069, + 319.29191714152694, + 324.7182094492018, + 352.8759158216417, + 317.4085416831076, + 319.8814997449517, + 317.2643752768636, + 319.11487504839897, + 320.4940417781472, + 318.3346656151116, + 318.99158423766494, + 319.53166611492634, + 320.58624969795346, + 317.2926250845194, + 318.6951670795679, + 319.84295789152384, + 317.83641688525677, + 319.2277499474585, + 320.19845908507705 + ], + "q1_avg_ms": 318.7273122991125, + "q2_avg_ms": 325.2754999945561, + "q3_avg_ms": 318.95520134518546, + "q4_avg_ms": 319.0970893816224, + "trend_slope_ms_per_req": -0.05685354403864879, + "cv_pct": 2.1704012615429504, + "first_avg_ms": 318.7273122991125, + "last_avg_ms": 319.0970893816224 + }, + "conc_local_http": { + "total_time_s": 0.03221816709265113, + "req_per_sec": 775.9597226032895, + "avg_ms": 1.2887266837060452, + "mean_completion_ms": 22.20360368490219, + "median_completion_ms": 23.036791943013668, + "min_completion_ms": 7.621416822075844, + "max_completion_ms": 32.014042139053345, + "p95_completion_ms": 31.973250210285187, + "completion_times": [ + 7.621416822075844, + 9.725125040858984, + 10.380084160715342, + 13.0004589445889, + 14.657834079116583, + 15.423750039190054, + 16.68725023046136, + 17.985458951443434, + 18.604500219225883, + 19.67150019481778, + 21.953499875962734, + 22.605834063142538, + 23.036791943013668, + 23.80745904520154, + 24.630750063806772, + 26.019874960184097, + 27.13941689580679, + 27.47595915570855, + 28.334209229797125, + 29.549541883170605, + 30.050292145460844, + 31.031916849315166, + 31.709874980151653, + 31.973250210285187, + 32.014042139053345 + ], + "trend_slope_ms_per_req": 1.0093209914003427, + "cv_pct": 33.81033277883096, + "first_avg_ms": 11.801444847757617, + "last_avg_ms": 30.66616106246199 + }, + "conc_remote_http": { + "total_time_s": 2.035670042037964, + "req_per_sec": 12.28096866571354, + "avg_ms": 81.42680168151855, + "mean_completion_ms": 1250.9295987896621, + "median_completion_ms": 1247.6750840432942, + "min_completion_ms": 482.53112519159913, + "max_completion_ms": 2035.4810003191233, + "p95_completion_ms": 2003.299292176962, + "completion_times": [ + 482.53112519159913, + 493.34445921704173, + 493.67558397352695, + 494.01062494143844, + 494.3019999191165, + 861.3035841844976, + 867.4752502702177, + 870.4380840063095, + 870.9079171530902, + 901.4416253194213, + 1241.3514172658324, + 1247.4858341738582, + 1247.6750840432942, + 1253.4254170022905, + 1278.3475001342595, + 1613.5767921805382, + 1622.6228340528905, + 1622.9075421579182, + 1628.4165000542998, + 1660.2505003102124, + 1983.5512503050268, + 2002.695667091757, + 2002.7230842970312, + 2003.299292176962, + 2035.4810003191233 + ], + "trend_slope_ms_per_req": 73.05488936065768, + "cv_pct": 43.66650952672528, + "first_avg_ms": 553.1945629045367, + "last_avg_ms": 1902.3453277934875 + }, + "conc_remote_https": { + "total_time_s": 2.871707458049059, + "req_per_sec": 8.705622130808601, + "avg_ms": 114.86829832196236, + "mean_completion_ms": 1716.189413163811, + "median_completion_ms": 1701.6520001925528, + "min_completion_ms": 566.4597083814442, + "max_completion_ms": 2871.370416134596, + "p95_completion_ms": 2871.1399999447167, + "completion_times": [ + 566.4597083814442, + 566.7588752694428, + 567.1262913383543, + 569.7116660885513, + 570.3260833397508, + 1138.7155000120401, + 1139.1475000418723, + 1139.543415978551, + 1147.5361250340939, + 1178.2409162260592, + 1697.2417500801384, + 1701.2752913869917, + 1701.6520001925528, + 1705.2632910199463, + 1745.1604162342846, + 2264.7251253947616, + 2293.154790997505, + 2303.9809581823647, + 2305.0588332116604, + 2305.476250126958, + 2831.7517079412937, + 2860.0987503305078, + 2863.8196662068367, + 2871.1399999447167, + 2871.370416134596 + ], + "trend_slope_ms_per_req": 110.46590534791063, + "cv_pct": 48.1907027351706, + "first_avg_ms": 663.183020738264, + "last_avg_ms": 2701.2450891280814 + }, + "conc_remote_http2": { + "total_time_s": 2.9270690409466624, + "req_per_sec": 8.540966970807968, + "avg_ms": 117.0827616378665, + "mean_completion_ms": 1735.4421179555357, + "median_completion_ms": 1740.551124792546, + "min_completion_ms": 576.339874882251, + "max_completion_ms": 2926.4712911099195, + "p95_completion_ms": 2889.430457726121, + "completion_times": [ + 576.339874882251, + 577.7048747986555, + 578.3334579318762, + 580.7773750275373, + 604.4803750701249, + 1147.3385831341147, + 1148.4840409830213, + 1170.7557081244886, + 1183.9007907547057, + 1187.7169581130147, + 1705.9116656892002, + 1713.679582811892, + 1740.551124792546, + 1748.7967908382416, + 1750.3707497380674, + 2273.2749581336975, + 2293.901375029236, + 2319.5207910612226, + 2320.2683748677373, + 2355.111749842763, + 2842.1848327852786, + 2861.7996657267213, + 2888.9474999159575, + 2889.430457726121, + 2926.4712911099195 + ], + "trend_slope_ms_per_req": 110.93630031001969, + "cv_pct": 47.767679278761186, + "first_avg_ms": 677.4957568074266, + "last_avg_ms": 2726.3162674249284 + }, + "conc_proxy_http": { + "total_time_s": 8.390083624981344, + "req_per_sec": 2.979708083667115, + "avg_ms": 335.60334499925375, + "mean_completion_ms": 1843.9417900517583, + "median_completion_ms": 1725.5583330988884, + "min_completion_ms": 697.7480831556022, + "max_completion_ms": 8389.556417241693, + "p95_completion_ms": 2519.8098751716316, + "completion_times": [ + 697.7480831556022, + 698.6715001985431, + 699.7227082028985, + 721.8263330869377, + 1040.3051669709384, + 1041.7484170757234, + 1042.2688331454992, + 1083.238000050187, + 1383.6532919667661, + 1384.162874892354, + 1384.415457956493, + 1436.5587919019163, + 1725.5583330988884, + 1726.3384582474828, + 1727.1680003032088, + 1796.7199170961976, + 2067.1963752247393, + 2068.5226251371205, + 2075.153958052397, + 2152.0905420184135, + 2410.176625009626, + 2410.3437080048025, + 2415.590458083898, + 2519.8098751716316, + 8389.556417241693 + ], + "trend_slope_ms_per_req": 138.07060356251895, + "cv_pct": 80.64192748975951, + "first_avg_ms": 816.6703681151072, + "last_avg_ms": 3196.103083368923 + }, + "conc_proxy_https": { + "total_time_s": 6.48180487472564, + "req_per_sec": 3.8569504147651767, + "avg_ms": 259.2721949890256, + "mean_completion_ms": 2655.1821528188884, + "median_completion_ms": 2557.821874972433, + "min_completion_ms": 1193.9187906682491, + "max_completion_ms": 6481.073040980846, + "p95_completion_ms": 6130.551415961236, + "completion_times": [ + 1193.9187906682491, + 1195.5946660600603, + 1195.9520410746336, + 1535.7682909816504, + 1537.5807080417871, + 1538.0339156836271, + 1877.0221658051014, + 1878.957665991038, + 1879.3992497958243, + 2217.318832874298, + 2217.7995829842985, + 2219.156624749303, + 2557.821874972433, + 2559.1471660882235, + 2560.4269579052925, + 2899.254416115582, + 2900.8426247164607, + 2901.259457692504, + 3241.9867496937513, + 3242.3172499984503, + 3249.334457796067, + 3584.406916052103, + 3584.6289577893913, + 6130.551415961236, + 6481.073040980846 + ], + "trend_slope_ms_per_req": 158.56694414316175, + "cv_pct": 49.95356576845873, + "first_avg_ms": 1366.1414020850013, + "last_avg_ms": 4216.328398324549 + }, + "conc_proxy_http2": { + "total_time_s": 6.525823541916907, + "req_per_sec": 3.8309341096061043, + "avg_ms": 261.0329416766763, + "mean_completion_ms": 3026.4459631219506, + "median_completion_ms": 2935.4410832747817, + "min_completion_ms": 1199.1271250881255, + "max_completion_ms": 6524.457124993205, + "p95_completion_ms": 4251.225000247359, + "completion_times": [ + 1199.1271250881255, + 1522.7824160829186, + 1664.092875085771, + 1943.9759580418468, + 2088.2399161346257, + 2090.542041230947, + 2091.4449160918593, + 2511.6744581609964, + 2512.1427080594003, + 2512.5317913480103, + 2933.1620410084724, + 2934.9041250534356, + 2935.4410832747817, + 2936.1920412629843, + 3356.461958028376, + 3358.8502909988165, + 3359.7506252117455, + 3360.567250289023, + 3829.2914582416415, + 3830.5009161122143, + 3831.546708010137, + 3832.642999943346, + 4249.601250048727, + 4251.225000247359, + 6524.457124993205 + ], + "trend_slope_ms_per_req": 141.8037693399506, + "cv_pct": 37.15636907024675, + "first_avg_ms": 1751.4600552773725, + "last_avg_ms": 4335.609351085232 + }, + "async_local_http": { + "total_time_s": 0.19016412505879998, + "req_per_sec": 131.4653854520133, + "avg_ms": 7.606565002351999, + "mean_completion_ms": 93.39868193492293, + "median_completion_ms": 88.63500040024519, + "min_completion_ms": 27.795917354524136, + "max_completion_ms": 190.02650026232004, + "p95_completion_ms": 189.98958310112357, + "completion_times": [ + 27.795917354524136, + 27.992583345621824, + 29.197792056947947, + 29.857792425900698, + 30.366625171154737, + 30.44287534430623, + 57.26229213178158, + 57.73229245096445, + 58.29633306711912, + 58.95137507468462, + 59.19529218226671, + 88.0445004440844, + 88.63500040024519, + 89.007125236094, + 89.800167363137, + 90.6827081926167, + 129.015083424747, + 132.942917291075, + 133.15783301368356, + 133.19008331745863, + 133.7546673603356, + 189.70445822924376, + 189.92525013163686, + 189.98958310112357, + 190.02650026232004 + ], + "trend_slope_ms_per_req": 7.3789470030281405, + "cv_pct": 60.178625530669436, + "first_avg_ms": 29.27559761640926, + "last_avg_ms": 165.67833934511458 + }, + "async_remote_http": { + "total_time_s": 0.482210208196193, + "req_per_sec": 51.84460962267404, + "avg_ms": 19.28840832784772, + "mean_completion_ms": 458.77365509048104, + "median_completion_ms": 458.5516252554953, + "min_completion_ms": 449.795083142817, + "max_completion_ms": 482.118375133723, + "p95_completion_ms": 473.1633332557976, + "completion_times": [ + 449.795083142817, + 452.3600419051945, + 452.36937515437603, + 452.3756252601743, + 452.3820001631975, + 452.3885832168162, + 453.5429999232292, + 453.55566684156656, + 454.0818752720952, + 454.09000013023615, + 454.0968332439661, + 454.20899987220764, + 458.5516252554953, + 459.09058302640915, + 459.2828331515193, + 460.1447922177613, + 460.1532919332385, + 460.15908289700747, + 460.7438752427697, + 462.5040418468416, + 462.51116693019867, + 462.5174170359969, + 473.1538752093911, + 473.1633332557976, + 482.118375133723 + ], + "trend_slope_ms_per_req": 0.9243110291516552, + "cv_pct": 1.6868176295204387, + "first_avg_ms": 451.94511814042926, + "last_avg_ms": 468.1017263792455 + }, + "async_remote_https": { + "total_time_s": 2.6665787091478705, + "req_per_sec": 9.375309235851875, + "avg_ms": 106.66314836591482, + "mean_completion_ms": 1553.9703128300607, + "median_completion_ms": 1622.3161658272147, + "min_completion_ms": 621.8785000964999, + "max_completion_ms": 2666.53358284384, + "p95_completion_ms": 2665.8854577690363, + "completion_times": [ + 621.8785000964999, + 636.6559159941971, + 637.0737077668309, + 638.1292911246419, + 642.496207728982, + 643.9977078698575, + 645.0526658445597, + 646.2044157087803, + 664.6817079745233, + 1616.923457942903, + 1621.0041660815477, + 1621.0899157449603, + 1622.3161658272147, + 1624.0316247567534, + 1624.4483748450875, + 1624.4607497937977, + 1630.781332962215, + 1660.6664159335196, + 2611.4574996754527, + 2620.299458038062, + 2620.3378327190876, + 2621.2348747067153, + 2621.6167910024524, + 2665.8854577690363, + 2666.53358284384 + ], + "trend_slope_ms_per_req": 103.82707061102757, + "cv_pct": 52.02262117897608, + "first_avg_ms": 636.7052217635015, + "last_avg_ms": 2632.4807852506638 + }, + "async_remote_http2": { + "total_time_s": 1.6199876246973872, + "req_per_sec": 15.43221665330313, + "avg_ms": 64.79950498789549, + "mean_completion_ms": 1015.8615619689226, + "median_completion_ms": 615.4024167917669, + "min_completion_ms": 607.4495841749012, + "max_completion_ms": 1619.9393747374415, + "p95_completion_ms": 1619.3881668150425, + "completion_times": [ + 607.4495841749012, + 608.4080417640507, + 608.4314589388669, + 608.727834187448, + 614.1685000620782, + 614.1839171759784, + 614.6569168195128, + 614.6689588204026, + 614.973499905318, + 614.9811251088977, + 614.9872089736164, + 614.9933338165283, + 615.4024167917669, + 615.6444167718291, + 635.5451671406627, + 1615.6112500466406, + 1616.5800420567393, + 1617.9264998063445, + 1617.9443751461804, + 1617.9607091471553, + 1617.9747921414673, + 1617.9872918874025, + 1618.0041669867933, + 1619.3881668150425, + 1619.9393747374415 + ], + "trend_slope_ms_per_req": 58.14823456932432, + "cv_pct": 49.391640270845315, + "first_avg_ms": 610.2282227172205, + "last_avg_ms": 1618.4569824087832 + }, + "async_proxy_http": { + "total_time_s": 10.211201500147581, + "req_per_sec": 2.4482917117675798, + "avg_ms": 408.44806000590324, + "mean_completion_ms": 2605.8473515696824, + "median_completion_ms": 830.1948327571154, + "min_completion_ms": 646.6014580801129, + "max_completion_ms": 10211.054749786854, + "p95_completion_ms": 5925.437666941434, + "completion_times": [ + 646.6014580801129, + 646.6517918743193, + 648.0003749020398, + 648.0425829067826, + 649.7467500157654, + 655.3172077983618, + 709.6520001068711, + 739.160249941051, + 758.9775831438601, + 765.6225827522576, + 781.3366670161486, + 794.0517920069396, + 830.1948327571154, + 934.7008327022195, + 1128.9137918502092, + 1280.4350000806153, + 1343.3512919582427, + 5770.093000028282, + 5837.619333062321, + 5838.377375155687, + 5841.302624903619, + 5873.142041731626, + 5888.400207739323, + 5925.437666941434, + 10211.054749786854 + ], + "trend_slope_ms_per_req": 315.94157606184194, + "cv_pct": 107.01120819983475, + "first_avg_ms": 649.0600275962303, + "last_avg_ms": 6487.904857045838 + }, + "async_proxy_https": { + "total_time_s": 9.389842166565359, + "req_per_sec": 2.6624515680378646, + "avg_ms": 375.59368666261435, + "mean_completion_ms": 2589.5948897860944, + "median_completion_ms": 1484.0411669574678, + "min_completion_ms": 1248.2671667821705, + "max_completion_ms": 9389.763707760721, + "p95_completion_ms": 6766.011958010495, + "completion_times": [ + 1248.2671667821705, + 1250.7442496716976, + 1250.763749703765, + 1253.201249986887, + 1255.7337079197168, + 1271.3755830191076, + 1315.3173327445984, + 1315.4632919467986, + 1355.2738330326974, + 1417.8436668589711, + 1477.9754998162389, + 1478.531874716282, + 1484.0411669574678, + 1484.871749766171, + 1494.7943328879774, + 1495.8564168773592, + 1603.5692496225238, + 1669.343332760036, + 1814.27212478593, + 2077.471874654293, + 6500.267124734819, + 6529.980166815221, + 6539.1378328204155, + 6766.011958010495, + 9389.763707760721 + ], + "trend_slope_ms_per_req": 240.2845555046, + "cv_pct": 92.23658276456618, + "first_avg_ms": 1255.0142845138907, + "last_avg_ms": 5659.557827083127 + }, + "async_proxy_http2": { + "total_time_s": 10.31532825017348, + "req_per_sec": 2.4235777469882804, + "avg_ms": 412.6131300069392, + "mean_completion_ms": 2399.30708296597, + "median_completion_ms": 1357.419665902853, + "min_completion_ms": 1318.0975830182433, + "max_completion_ms": 10315.248374827206, + "p95_completion_ms": 6653.170874807984, + "completion_times": [ + 1318.0975830182433, + 1335.2675000205636, + 1345.1139577664435, + 1347.3623329773545, + 1349.6247911825776, + 1351.699666120112, + 1353.5969578661025, + 1356.3418327830732, + 1356.6933749243617, + 1356.9194581359625, + 1356.9536660797894, + 1357.1347501128912, + 1357.419665902853, + 1384.491499979049, + 1474.5117910206318, + 1502.730708103627, + 1517.9669577628374, + 1593.6719998717308, + 1601.343791000545, + 1730.5996660143137, + 1777.4664578028023, + 6236.10133305192, + 6653.148083016276, + 6653.170874807984, + 10315.248374827206 + ], + "trend_slope_ms_per_req": 210.48838855770344, + "cv_pct": 98.29550726330825, + "first_avg_ms": 1341.1943051808823, + "last_avg_ms": 4995.296940074435 + } + }, + "aiohttp": { + "async_local_http": { + "total_time_s": 0.21341962506994605, + "req_per_sec": 117.14011769914089, + "avg_ms": 8.536785002797842, + "mean_completion_ms": 132.24309977144003, + "median_completion_ms": 151.4206249266863, + "min_completion_ms": 29.856250155717134, + "max_completion_ms": 213.3849998936057, + "p95_completion_ms": 213.24712503701448, + "completion_times": [ + 29.856250155717134, + 29.930375050753355, + 30.32712498679757, + 30.68150021135807, + 31.073333229869604, + 31.26629116013646, + 118.78129094839096, + 119.0579580143094, + 119.30279107764363, + 119.47462521493435, + 119.59516583010554, + 150.9495829232037, + 151.4206249266863, + 151.43195819109678, + 151.44483326002955, + 151.6826250590384, + 182.57220787927508, + 183.15491592511535, + 183.7512501515448, + 184.04779117554426, + 184.1592499986291, + 212.57741609588265, + 212.90620788931847, + 213.24712503701448, + 213.3849998936057 + ], + "trend_slope_ms_per_req": 8.538483903528405, + "cv_pct": 49.784098543180015, + "first_avg_ms": 30.5224791324387, + "last_avg_ms": 200.58200574879135 + }, + "async_remote_http": { + "total_time_s": 0.4215480419807136, + "req_per_sec": 59.30522149393303, + "avg_ms": 16.861921679228544, + "mean_completion_ms": 392.28296311572194, + "median_completion_ms": 388.63666635006666, + "min_completion_ms": 388.0120003595948, + "max_completion_ms": 421.47316597402096, + "p95_completion_ms": 409.00958329439163, + "completion_times": [ + 388.0120003595948, + 388.2742081768811, + 388.29654129222035, + 388.31870816648006, + 388.33941612392664, + 388.3762499317527, + 388.3964163251221, + 388.4143750183284, + 388.4293753653765, + 388.44554126262665, + 388.5473753325641, + 388.6189581826329, + 388.63666635006666, + 388.77379102632403, + 391.11920818686485, + 391.19454100728035, + 391.21720800176263, + 391.32625004276633, + 391.92850003018975, + 393.3120830915868, + 394.7809161618352, + 394.813165999949, + 399.019833188504, + 409.00958329439163, + 421.47316597402096 + ], + "trend_slope_ms_per_req": 0.724490531720221, + "cv_pct": 1.95045494553597, + "first_avg_ms": 388.2695206751426, + "last_avg_ms": 400.6196068200682 + }, + "async_remote_https": { + "total_time_s": 1.6158367497846484, + "req_per_sec": 15.47186001514812, + "avg_ms": 64.63346999138594, + "mean_completion_ms": 1159.7812111489475, + "median_completion_ms": 1589.3306657671928, + "min_completion_ms": 568.5832076705992, + "max_completion_ms": 1615.781500004232, + "p95_completion_ms": 1613.6688748374581, + "completion_times": [ + 568.5832076705992, + 575.41837496683, + 577.3831657133996, + 592.7950828336179, + 592.8545407950878, + 595.2245825901628, + 595.2372499741614, + 595.274040941149, + 595.2835828065872, + 595.2931656502187, + 599.8523747548461, + 1581.9223746657372, + 1589.3306657671928, + 1589.3724579364061, + 1612.9894158802927, + 1613.4798326529562, + 1613.4955827146769, + 1613.5116247460246, + 1613.5251657105982, + 1613.5426657274365, + 1613.5546248406172, + 1613.5722496546805, + 1613.5838748887181, + 1613.6688748374581, + 1615.781500004232 + ], + "trend_slope_ms_per_req": 60.91693187204118, + "cv_pct": 44.50362549503791, + "first_avg_ms": 583.7098257616162, + "last_avg_ms": 1613.8898508091058 + }, + "async_proxy_http": { + "total_time_s": 5.904115791898221, + "req_per_sec": 4.234334298508448, + "avg_ms": 236.16463167592883, + "mean_completion_ms": 2048.6131764762104, + "median_completion_ms": 774.0246248431504, + "min_completion_ms": 632.8567918390036, + "max_completion_ms": 5904.020332731307, + "p95_completion_ms": 5903.692207764834, + "completion_times": [ + 632.8567918390036, + 632.9407077282667, + 632.9738749191165, + 635.7389576733112, + 642.1393747441471, + 650.9516667574644, + 682.5956250540912, + 730.5844170041382, + 739.3889999948442, + 743.0541249923408, + 765.9283326938748, + 771.01029176265, + 774.0246248431504, + 797.0921667292714, + 797.9625826701522, + 895.3044996596873, + 989.6402079612017, + 1809.5812499523163, + 1900.5636246874928, + 5733.172792010009, + 5733.925458043814, + 5817.1743750572205, + 5899.012124631554, + 5903.692207764834, + 5904.020332731307 + ], + "trend_slope_ms_per_req": 239.29697329321732, + "cv_pct": 107.05462929423612, + "first_avg_ms": 637.9335622768849, + "last_avg_ms": 5270.222987846604 + }, + "async_proxy_https": { + "total_time_s": 7.96602529194206, + "req_per_sec": 3.1383279720801864, + "avg_ms": 318.6410116776824, + "mean_completion_ms": 2490.202595219016, + "median_completion_ms": 1423.9390003494918, + "min_completion_ms": 1203.7602923810482, + "max_completion_ms": 7965.972583275288, + "p95_completion_ms": 6735.114125069231, + "completion_times": [ + 1203.7602923810482, + 1254.8653334379196, + 1276.1284583248198, + 1276.1530419811606, + 1276.2054172344506, + 1276.2223333120346, + 1276.2425001710653, + 1276.2601249851286, + 1276.2791672721505, + 1279.595167376101, + 1358.1022080034018, + 1401.8202084116638, + 1423.9390003494918, + 1441.0105422139168, + 1467.8540001623333, + 1497.6643333211541, + 1574.2304581217468, + 1645.939042326063, + 1681.3912922516465, + 1884.2778750695288, + 6209.998750127852, + 6622.415000107139, + 6673.623625189066, + 6735.114125069231, + 7965.972583275288 + ], + "trend_slope_ms_per_req": 225.8702483572639, + "cv_pct": 90.05119678966697, + "first_avg_ms": 1260.5558127785723, + "last_avg_ms": 5396.11332158425 + } + }, + "urllib3": { + "seq_local_http": { + "mean_ms": 0.5624216794967651, + "median_ms": 0.5249171517789364, + "min_ms": 0.3837086260318756, + "max_ms": 1.2374999932944775, + "stdev_ms": 0.18805148123385393, + "p50_ms": 0.5249171517789364, + "p95_ms": 0.9387503378093243, + "p99_ms": 1.2374999932944775, + "timings": [ + 0.6048749200999737, + 0.5457079969346523, + 0.5479161627590656, + 0.47075003385543823, + 0.5249171517789364, + 0.7149581797420979, + 0.6451248191297054, + 0.5600829608738422, + 0.5676252767443657, + 0.6465422920882702, + 0.5159997381269932, + 0.5292501300573349, + 0.46633370220661163, + 0.516749918460846, + 0.5060830153524876, + 0.46733301132917404, + 0.4310416989028454, + 0.39633363485336304, + 0.38529234007000923, + 0.3837086260318756, + 0.39900001138448715, + 0.391125213354826, + 1.2374999932944775, + 0.9387503378093243, + 0.6675408221781254 + ], + "q1_avg_ms": 0.5681874075283607, + "q2_avg_ms": 0.5774375361700853, + "q3_avg_ms": 0.4639791635175546, + "q4_avg_ms": 0.6289881920175893, + "trend_slope_ms_per_req": 0.0034111924469470978, + "cv_pct": 33.436029955693684, + "first_avg_ms": 0.5681874075283607, + "last_avg_ms": 0.6289881920175893 + }, + "seq_remote_http": { + "mean_ms": 202.21201665699482, + "median_ms": 201.9270001910627, + "min_ms": 200.3970411606133, + "max_ms": 205.46783320605755, + "stdev_ms": 1.0926398440888088, + "p50_ms": 201.9270001910627, + "p95_ms": 204.20779194682837, + "p99_ms": 205.46783320605755, + "timings": [ + 202.48795906081796, + 201.8296248279512, + 201.51087502017617, + 201.82095794007182, + 202.91941706091166, + 203.45320785418153, + 201.49012515321374, + 202.06466736271977, + 205.46783320605755, + 201.19391614571214, + 203.04204197600484, + 201.5861668623984, + 202.6051669381559, + 201.15595823153853, + 201.9270001910627, + 201.98974991217256, + 200.3970411606133, + 202.15758262202144, + 200.79408306628466, + 201.84249989688396, + 201.68716693297029, + 201.8344160169363, + 203.2661670818925, + 204.20779194682837, + 202.56899995729327 + ], + "q1_avg_ms": 202.33700696068504, + "q2_avg_ms": 202.4741251176844, + "q3_avg_ms": 201.70541650926074, + "q4_avg_ms": 202.3144464141556, + "trend_slope_ms_per_req": -0.0004570920450183061, + "cv_pct": 0.5403436759854958, + "first_avg_ms": 202.33700696068504, + "last_avg_ms": 202.3144464141556 + }, + "seq_remote_https": { + "mean_ms": 202.19380328431726, + "median_ms": 201.42233418300748, + "min_ms": 200.35016676411033, + "max_ms": 218.91854098066688, + "stdev_ms": 3.57429787345547, + "p50_ms": 201.42233418300748, + "p95_ms": 202.11349986493587, + "p99_ms": 218.91854098066688, + "timings": [ + 202.10095774382353, + 201.29474997520447, + 201.11049991101027, + 218.91854098066688, + 200.56112483143806, + 200.7400831207633, + 201.2667078524828, + 201.5883750282228, + 202.0352091640234, + 201.600749976933, + 200.95358276739717, + 200.5977090448141, + 200.60375006869435, + 201.5494997613132, + 201.30016608163714, + 200.980625115335, + 201.85337495058775, + 203.7824997678399, + 203.21529172360897, + 201.20508316904306, + 202.25545903667808, + 201.44504122436047, + 201.42233418300748, + 202.11349986493587, + 200.35016676411033 + ], + "q1_avg_ms": 204.12099276048443, + "q2_avg_ms": 201.3403889723122, + "q3_avg_ms": 201.67831929090121, + "q4_avg_ms": 201.71526799510633, + "trend_slope_ms_per_req": -0.09816719326548852, + "cv_pct": 1.7677583661797132, + "first_avg_ms": 204.12099276048443, + "last_avg_ms": 201.71526799510633 + }, + "seq_proxy_http": { + "mean_ms": 339.93284683674574, + "median_ms": 337.8008343279362, + "min_ms": 334.16762482374907, + "max_ms": 365.05004204809666, + "stdev_ms": 6.245216494684107, + "p50_ms": 337.8008343279362, + "p95_ms": 336.02654188871384, + "p99_ms": 365.05004204809666, + "timings": [ + 335.2159592323005, + 336.50970878079534, + 338.7751253321767, + 337.8148339688778, + 336.12237544730306, + 335.8867079950869, + 340.7305418513715, + 337.4489997513592, + 340.7715829089284, + 344.86491698771715, + 336.09929168596864, + 337.7392082475126, + 344.437625259161, + 338.9486246742308, + 348.49445801228285, + 337.8008343279362, + 336.6945837624371, + 340.5514173209667, + 341.96558268740773, + 334.16762482374907, + 336.71416714787483, + 365.05004204809666, + 337.49483386054635, + 336.02654188871384, + 341.99558291584253 + ], + "q1_avg_ms": 336.72078512609005, + "q2_avg_ms": 339.6090902388096, + "q3_avg_ms": 341.1545905595024, + "q4_avg_ms": 341.91633933889017, + "trend_slope_ms_per_req": 0.24036707320752052, + "cv_pct": 1.8371912431526218, + "first_avg_ms": 336.72078512609005, + "last_avg_ms": 341.91633933889017 + }, + "seq_proxy_https": { + "mean_ms": 483.13734345138073, + "median_ms": 462.7290000207722, + "min_ms": 458.35587475448847, + "max_ms": 565.0391662493348, + "stdev_ms": 37.05839680844899, + "p50_ms": 462.7290000207722, + "p95_ms": 458.8861670345068, + "p99_ms": 565.0391662493348, + "timings": [ + 496.95016676560044, + 458.873167168349, + 470.44454189017415, + 495.74270797893405, + 527.7360840700567, + 459.54233407974243, + 565.0391662493348, + 459.7725421190262, + 563.5908339172602, + 471.2948747910559, + 538.4571668691933, + 458.83895829319954, + 477.3300001397729, + 462.99579180777073, + 459.6104579977691, + 459.96362483128905, + 462.7290000207722, + 458.35587475448847, + 562.9274169914424, + 460.4739579372108, + 465.88895888999104, + 461.0756658948958, + 460.8398340642452, + 458.8861670345068, + 461.07429172843695 + ], + "q1_avg_ms": 484.8815003254761, + "q2_avg_ms": 509.4989237065117, + "q3_avg_ms": 463.49745825864375, + "q4_avg_ms": 475.88089893438985, + "trend_slope_ms_per_req": -1.4903116118735993, + "cv_pct": 7.670364816703154, + "first_avg_ms": 484.8815003254761, + "last_avg_ms": 475.88089893438985 + }, + "conc_local_http": { + "total_time_s": 0.01977804210036993, + "req_per_sec": 1264.028050558776, + "avg_ms": 0.7911216840147972, + "mean_completion_ms": 13.146789744496346, + "median_completion_ms": 13.113458175212145, + "min_completion_ms": 6.018000189214945, + "max_completion_ms": 19.601957872509956, + "p95_completion_ms": 19.50625004246831, + "completion_times": [ + 6.018000189214945, + 7.15795811265707, + 7.912457920610905, + 8.11962503939867, + 8.793666027486324, + 9.478708263486624, + 10.05245791748166, + 10.564208030700684, + 11.38029107823968, + 11.998999863862991, + 12.399707920849323, + 12.850165832787752, + 13.113458175212145, + 13.82108312100172, + 14.206749852746725, + 14.60366602987051, + 15.17158281058073, + 15.330333262681961, + 15.717290807515383, + 16.336875036358833, + 16.606749966740608, + 18.874875269830227, + 19.0526251681149, + 19.50625004246831, + 19.601957872509956 + ], + "trend_slope_ms_per_req": 0.5407178899846398, + "cv_pct": 30.43424291392943, + "first_avg_ms": 7.913402592142423, + "last_avg_ms": 17.956660594791174 + }, + "conc_remote_http": { + "total_time_s": 1.1989072081632912, + "req_per_sec": 20.852322706691908, + "avg_ms": 47.95628832653165, + "mean_completion_ms": 764.6720764413476, + "median_completion_ms": 748.5269997268915, + "min_completion_ms": 373.6220826394856, + "max_completion_ms": 1198.4162498265505, + "p95_completion_ms": 1168.795249890536, + "completion_times": [ + 373.6220826394856, + 376.2627076357603, + 376.9802078604698, + 391.94404194131494, + 400.99316695705056, + 560.905082616955, + 561.919666826725, + 562.5566248781979, + 585.4334998875856, + 600.8043326437473, + 746.2936248630285, + 748.0386248789728, + 748.5269997268915, + 780.0892917439342, + 799.3145827203989, + 932.9338748939335, + 934.4347496517003, + 934.7534580156207, + 973.5362916253507, + 998.6367500387132, + 1118.446874897927, + 1121.5474996715784, + 1121.6163747012615, + 1168.795249890536, + 1198.4162498265505 + ], + "trend_slope_ms_per_req": 37.14854016720962, + "cv_pct": 36.07042073919766, + "first_avg_ms": 413.4512149418394, + "last_avg_ms": 1100.1421843788453 + }, + "conc_remote_https": { + "total_time_s": 1.4661937500350177, + "req_per_sec": 17.05095250842729, + "avg_ms": 58.64775000140071, + "mean_completion_ms": 1070.2128170989454, + "median_completion_ms": 1071.4379590936005, + "min_completion_ms": 685.2652090601623, + "max_completion_ms": 1465.9126671031117, + "p95_completion_ms": 1463.3434168063104, + "completion_times": [ + 685.2652090601623, + 686.1725421622396, + 692.7249999716878, + 693.99966718629, + 694.5221251808107, + 873.7644171342254, + 874.3844591081142, + 882.2842920199037, + 885.7282497920096, + 886.0562918707728, + 1060.8346248045564, + 1061.6000001318753, + 1071.4379590936005, + 1077.165000140667, + 1077.8535841964185, + 1247.9533338919282, + 1248.470709193498, + 1260.210709180683, + 1267.783250194043, + 1268.6426672153175, + 1437.0504589751363, + 1439.5088339224458, + 1452.6509591378272, + 1463.3434168063104, + 1465.9126671031117 + ], + "trend_slope_ms_per_req": 36.743195650454325, + "cv_pct": 25.642951251551644, + "first_avg_ms": 721.0748267825693, + "last_avg_ms": 1399.2703219077416 + }, + "conc_proxy_http": { + "total_time_s": 5.7845485410653055, + "req_per_sec": 4.32185845144553, + "avg_ms": 231.38194164261222, + "mean_completion_ms": 1834.0126021392643, + "median_completion_ms": 1665.2789590880275, + "min_completion_ms": 616.2888752296567, + "max_completion_ms": 5783.991834148765, + "p95_completion_ms": 2849.0627091377974, + "completion_times": [ + 616.2888752296567, + 674.5618339627981, + 748.0967501178384, + 851.0247091762722, + 959.7282921895385, + 1050.0080841593444, + 1171.1456249468029, + 1257.7097918838263, + 1299.3655418977141, + 1399.741125293076, + 1590.0729172863066, + 1637.930542230606, + 1665.2789590880275, + 1745.3333749435842, + 1976.4662091620266, + 2012.0421671308577, + 2095.3133748844266, + 2105.9883339330554, + 2318.3787502348423, + 2429.831333924085, + 2435.2206252515316, + 2518.8755840063095, + 2658.85770926252, + 2849.0627091377974, + 5783.991834148765 + ], + "trend_slope_ms_per_req": 121.95276103663043, + "cv_pct": 57.46672946469322, + "first_avg_ms": 816.6180908059081, + "last_avg_ms": 2999.1740779951215 + }, + "conc_proxy_https": { + "total_time_s": 3.587047250010073, + "req_per_sec": 6.969520683043636, + "avg_ms": 143.48189000040293, + "mean_completion_ms": 2472.0581077970564, + "median_completion_ms": 2461.682708002627, + "min_completion_ms": 1385.937666054815, + "max_completion_ms": 3586.7230826988816, + "p95_completion_ms": 3376.4963326975703, + "completion_times": [ + 1385.937666054815, + 1505.9927497059107, + 1623.2648747973144, + 1738.4528326801956, + 1777.830165810883, + 1855.638540815562, + 2042.5391658209264, + 2077.1466246806085, + 2155.413749627769, + 2195.5562909133732, + 2322.4742906168103, + 2416.499000042677, + 2461.682708002627, + 2535.940165631473, + 2536.530874669552, + 2779.9618747085333, + 2847.8661659173667, + 2882.068374659866, + 2910.159124992788, + 3089.5186658017337, + 3119.761500041932, + 3273.0372077785432, + 3304.960665758699, + 3376.4963326975703, + 3586.7230826988816 + ], + "trend_slope_ms_per_req": 85.60515577081017, + "cv_pct": 25.55362767520155, + "first_avg_ms": 1647.8528049774468, + "last_avg_ms": 3237.2366542528785 + } + }, + "urllib": { + "seq_local_http": { + "mean_ms": 14.932354912161827, + "median_ms": 14.410082716494799, + "min_ms": 14.175374992191792, + "max_ms": 23.65033281967044, + "stdev_ms": 1.8797077590410405, + "p50_ms": 14.410082716494799, + "p95_ms": 14.175374992191792, + "p99_ms": 23.65033281967044, + "timings": [ + 15.000249724835157, + 15.788166783750057, + 15.973750036209822, + 15.429999679327011, + 14.543750323355198, + 14.263750053942204, + 14.58995882421732, + 23.65033281967044, + 14.325916301459074, + 14.737874735146761, + 14.388041105121374, + 14.479625038802624, + 14.268042054027319, + 14.22491716220975, + 14.410082716494799, + 14.532207977026701, + 14.352291822433472, + 14.421708881855011, + 14.212541282176971, + 14.276624657213688, + 14.182457700371742, + 14.573040883988142, + 14.243749901652336, + 14.175374992191792, + 14.264417346566916 + ], + "q1_avg_ms": 15.166611100236574, + "q2_avg_ms": 16.028624804069597, + "q3_avg_ms": 14.368208435674509, + "q4_avg_ms": 14.27545810916594, + "trend_slope_ms_per_req": -0.07962561176659969, + "cv_pct": 12.588153510268437, + "first_avg_ms": 15.166611100236574, + "last_avg_ms": 14.27545810916594 + }, + "seq_remote_http": { + "mean_ms": 380.1023116707802, + "median_ms": 375.8959583938122, + "min_ms": 371.15683406591415, + "max_ms": 415.49850022420287, + "stdev_ms": 10.937976123655908, + "p50_ms": 375.8959583938122, + "p95_ms": 377.0570829510689, + "p99_ms": 415.49850022420287, + "timings": [ + 375.8959583938122, + 375.05024997517467, + 374.8935000039637, + 380.1189581863582, + 378.1010829843581, + 410.52262485027313, + 373.89466585591435, + 373.946875333786, + 415.49850022420287, + 373.45212511718273, + 377.406416926533, + 373.82599990814924, + 374.5895423926413, + 391.6604579426348, + 377.7974173426628, + 385.10729232802987, + 373.87854093685746, + 385.15533274039626, + 375.5887080915272, + 371.15683406591415, + 382.492917124182, + 373.88062523677945, + 376.673833001405, + 377.0570829510689, + 374.91224985569715 + ], + "q1_avg_ms": 382.43039573232335, + "q2_avg_ms": 381.33743056096137, + "q3_avg_ms": 381.36476394720376, + "q4_avg_ms": 375.9660357609391, + "trend_slope_ms_per_req": -0.2424524652843292, + "cv_pct": 2.8776399900271246, + "first_avg_ms": 382.43039573232335, + "last_avg_ms": 375.9660357609391 + }, + "seq_remote_https": { + "mean_ms": 612.1495017036796, + "median_ms": 601.925958879292, + "min_ms": 583.0909172073007, + "max_ms": 696.0085830651224, + "stdev_ms": 29.19412351512955, + "p50_ms": 601.925958879292, + "p95_ms": 594.6044172160327, + "p99_ms": 696.0085830651224, + "timings": [ + 603.2500420697033, + 618.884667288512, + 598.2629577629268, + 597.6477079093456, + 656.276916153729, + 592.3334578983486, + 632.5445421971381, + 587.508250027895, + 645.4014577902853, + 603.5224171355367, + 608.7909997440875, + 603.3863751217723, + 601.925958879292, + 649.2458330467343, + 587.3315827921033, + 607.0994162000716, + 588.1905420683324, + 599.134000018239, + 696.0085830651224, + 594.4484169594944, + 601.3451251201332, + 585.5836668051779, + 667.919292114675, + 594.6044172160327, + 583.0909172073007 + ], + "q1_avg_ms": 611.1092915137609, + "q2_avg_ms": 613.5256736694524, + "q3_avg_ms": 605.4878888341287, + "q4_avg_ms": 617.5714883554194, + "trend_slope_ms_per_req": -0.09377995147728004, + "cv_pct": 4.769116602052128, + "first_avg_ms": 611.1092915137609, + "last_avg_ms": 617.5714883554194 + }, + "seq_proxy_http": { + "mean_ms": 1240.0643916986883, + "median_ms": 765.8068751916289, + "min_ms": 610.2143749594688, + "max_ms": 5991.093832999468, + "stdev_ms": 1465.9272357244781, + "p50_ms": 765.8068751916289, + "p95_ms": 659.4701670110226, + "p99_ms": 5991.093832999468, + "timings": [ + 2623.1370838359, + 5850.762374699116, + 633.8357920758426, + 617.8620001301169, + 5991.093832999468, + 877.5814999826252, + 610.2143749594688, + 617.946042213589, + 926.3353338465095, + 903.6799166351557, + 801.665416918695, + 632.4535408057272, + 896.4083748869598, + 884.3156667426229, + 612.0118326507509, + 652.3267910815775, + 765.8068751916289, + 638.2649159058928, + 616.9637497514486, + 659.0578341856599, + 767.6654593087733, + 1304.5009169727564, + 683.3074996247888, + 659.4701670110226, + 774.942500051111 + ], + "q1_avg_ms": 2765.712097287178, + "q2_avg_ms": 748.7157708965242, + "q3_avg_ms": 741.5224094099054, + "q4_avg_ms": 780.8440181293657, + "trend_slope_ms_per_req": -90.2359248074488, + "cv_pct": 118.21379966538626, + "first_avg_ms": 2765.712097287178, + "last_avg_ms": 780.8440181293657 + }, + "seq_proxy_https": { + "mean_ms": 2550.2425799146295, + "median_ms": 1371.4374997653067, + "min_ms": 1227.7850829996169, + "max_ms": 10202.50212494284, + "stdev_ms": 2505.7410621589042, + "p50_ms": 1371.4374997653067, + "p95_ms": 1274.2490423843265, + "p99_ms": 10202.50212494284, + "timings": [ + 1284.3333752825856, + 1579.5296248979867, + 1269.868833012879, + 1264.7038749419153, + 1274.2294161580503, + 1255.6849168613553, + 1227.7850829996169, + 1417.9071672260761, + 1494.5885417982936, + 10202.50212494284, + 1521.3278750889003, + 1246.7147093266249, + 6540.199666749686, + 1368.3451251126826, + 6231.276582926512, + 6730.226790998131, + 1528.1623327173293, + 6668.873999733478, + 1663.6435412801802, + 1371.4374997653067, + 1488.8023328967392, + 1298.6952918581665, + 1272.7477080188692, + 1274.2490423843265, + 1280.2290408872068 + ], + "q1_avg_ms": 1321.3916735257953, + "q2_avg_ms": 2851.804250230392, + "q3_avg_ms": 4844.514083039637, + "q4_avg_ms": 1378.5434938701135, + "trend_slope_ms_per_req": 21.217851078209396, + "cv_pct": 98.25500844091408, + "first_avg_ms": 1321.3916735257953, + "last_avg_ms": 1378.5434938701135 + }, + "conc_local_http": { + "total_time_s": 1.0157771250233054, + "req_per_sec": 24.611698161076834, + "avg_ms": 40.63108500093222, + "mean_completion_ms": 623.663721550256, + "median_completion_ms": 621.0865001194179, + "min_completion_ms": 206.81333309039474, + "max_completion_ms": 1015.644125174731, + "p95_completion_ms": 1014.6595831029117, + "completion_times": [ + 206.81333309039474, + 212.69987523555756, + 220.37987504154444, + 233.73145796358585, + 246.20041623711586, + 397.05416606739163, + 422.0190830528736, + 428.9832911454141, + 434.0740409679711, + 466.14025020971894, + 620.5192501656711, + 620.8686660975218, + 621.0865001194179, + 621.1574580520391, + 637.8520000725985, + 809.5738752745092, + 818.8529582694173, + 837.9576252773404, + 837.9857083782554, + 850.9937082417309, + 995.9820001386106, + 1007.2150412015617, + 1013.1487501785159, + 1014.6595831029117, + 1015.644125174731 + ], + "trend_slope_ms_per_req": 38.259568474828626, + "cv_pct": 45.7149946768937, + "first_avg_ms": 252.81318727259836, + "last_avg_ms": 962.2327023451882 + }, + "conc_remote_http": { + "total_time_s": 2.0494123329408467, + "req_per_sec": 12.198618890970433, + "avg_ms": 81.97649331763387, + "mean_completion_ms": 1242.0638162828982, + "median_completion_ms": 1232.519708108157, + "min_completion_ms": 478.47879119217396, + "max_completion_ms": 2048.6070411279798, + "p95_completion_ms": 2001.97449978441, + "completion_times": [ + 478.47879119217396, + 480.62995774671435, + 481.22974997386336, + 481.42829118296504, + 493.8067081384361, + 855.1221657544374, + 858.0002500675619, + 858.2492908462882, + 867.8534161299467, + 884.5066661015153, + 1228.6344161257148, + 1231.5363329835236, + 1232.519708108157, + 1253.5496661439538, + 1259.3323751352727, + 1604.903208091855, + 1605.1859580911696, + 1605.4079998284578, + 1627.3798327893019, + 1662.9373328760266, + 1979.6191658824682, + 1980.9778751805425, + 1989.724707789719, + 2001.97449978441, + 2048.6070411279798 + ], + "trend_slope_ms_per_req": 73.26494670293938, + "cv_pct": 44.07170879000787, + "first_avg_ms": 545.1159439980984, + "last_avg_ms": 1898.745779347207 + }, + "conc_remote_https": { + "total_time_s": 3.543331833090633, + "req_per_sec": 7.055506279860337, + "avg_ms": 141.73327332362533, + "mean_completion_ms": 2126.570554804057, + "median_completion_ms": 2140.277750324458, + "min_completion_ms": 762.042332906276, + "max_completion_ms": 3543.061458040029, + "p95_completion_ms": 3531.765416264534, + "completion_times": [ + 762.042332906276, + 791.9388329610229, + 792.3171250149608, + 792.4045412801206, + 803.0451661907136, + 1408.77650026232, + 1484.9971663206816, + 1485.0766249001026, + 1497.0557503402233, + 1518.8227081671357, + 2023.5767080448568, + 2140.180583111942, + 2140.277750324458, + 2140.400041360408, + 2143.2806253433228, + 2626.358333043754, + 2821.1793331429362, + 2822.265415918082, + 2822.4452501162887, + 2835.134624969214, + 3210.72879107669, + 3496.2633750401437, + 3530.869415961206, + 3531.765416264534, + 3543.061458040029 + ], + "trend_slope_ms_per_req": 129.2660855075631, + "cv_pct": 45.305361352507816, + "first_avg_ms": 891.754083102569, + "last_avg_ms": 3281.4669044954435 + }, + "conc_proxy_http": { + "total_time_s": 7.825866166967899, + "req_per_sec": 3.1945345686490514, + "avg_ms": 313.03464667871594, + "mean_completion_ms": 2591.4228267781436, + "median_completion_ms": 2315.0492082349956, + "min_completion_ms": 603.4224173054099, + "max_completion_ms": 7824.781833216548, + "p95_completion_ms": 4378.424708265811, + "completion_times": [ + 603.4224173054099, + 630.5331671610475, + 635.5810002423823, + 802.929375320673, + 1376.1951671913266, + 1452.4950003251433, + 1458.364250138402, + 1627.37483298406, + 1702.9037922620773, + 1988.087042234838, + 2072.8607079945505, + 2178.937958087772, + 2315.0492082349956, + 2407.9808332026005, + 2868.3845419436693, + 3091.773417312652, + 3109.0322080999613, + 3130.2000833675265, + 3548.624583054334, + 3722.394958138466, + 3755.376750137657, + 3771.4945832267404, + 4332.368250004947, + 4378.424708265811, + 7824.781833216548 + ], + "trend_slope_ms_per_req": 197.924756354724, + "cv_pct": 61.49606748322161, + "first_avg_ms": 916.8593545909971, + "last_avg_ms": 4476.209380863501 + }, + "conc_proxy_https": { + "total_time_s": 17.57506762491539, + "req_per_sec": 1.4224696333207056, + "avg_ms": 703.0027049966156, + "mean_completion_ms": 8077.9043699242175, + "median_completion_ms": 8346.526166424155, + "min_completion_ms": 1704.5877082273364, + "max_completion_ms": 17574.569333344698, + "p95_completion_ms": 16405.033791437745, + "completion_times": [ + 1704.5877082273364, + 1760.8432504348457, + 2077.870791312307, + 2972.895957995206, + 3229.762333445251, + 3320.3327911905944, + 4389.670625329018, + 4627.27175001055, + 6079.474916215986, + 6869.677500333637, + 6873.066000174731, + 7538.573125377297, + 8346.526166424155, + 9022.682125214487, + 9661.797833163291, + 9665.366291068494, + 10626.62220839411, + 10643.153000157326, + 10919.285875279456, + 10950.075041037053, + 11930.500291287899, + 12103.980000130832, + 12653.990541119128, + 16405.033791437745, + 17574.569333344698 + ], + "trend_slope_ms_per_req": 588.7501959219718, + "cv_pct": 54.686236848083404, + "first_avg_ms": 2511.048805434257, + "last_avg_ms": 13219.633553376687 + } + }, + "pycurl": { + "seq_local_http": { + "mean_ms": 0.2880200557410717, + "median_ms": 0.2683750353753567, + "min_ms": 0.23633381351828575, + "max_ms": 0.5250419490039349, + "stdev_ms": 0.05796656962583238, + "p50_ms": 0.2683750353753567, + "p95_ms": 0.28170784935355186, + "p99_ms": 0.5250419490039349, + "timings": [ + 0.30083395540714264, + 0.33304188400506973, + 0.25475025177001953, + 0.25508319959044456, + 0.26445789262652397, + 0.26475032791495323, + 0.25475025177001953, + 0.25025010108947754, + 0.24529127404093742, + 0.23633381351828575, + 0.28837472200393677, + 0.5250419490039349, + 0.2683750353753567, + 0.26449980214238167, + 0.2509169280529022, + 0.3246660344302654, + 0.244916882365942, + 0.24308310821652412, + 0.32112468034029007, + 0.3072922118008137, + 0.2954592928290367, + 0.29799994081258774, + 0.286999624222517, + 0.28170784935355186, + 0.3405003808438778 + ], + "q1_avg_ms": 0.2788195852190256, + "q2_avg_ms": 0.3000070185710986, + "q3_avg_ms": 0.266076298430562, + "q4_avg_ms": 0.3044405686003821, + "trend_slope_ms_per_req": 0.0011202495974990039, + "cv_pct": 20.125879594282136, + "first_avg_ms": 0.2788195852190256, + "last_avg_ms": 0.3044405686003821 + }, + "seq_remote_http": { + "mean_ms": 380.54755818098783, + "median_ms": 375.2424167469144, + "min_ms": 369.9572500772774, + "max_ms": 403.8451253436506, + "stdev_ms": 10.979382322842143, + "p50_ms": 375.2424167469144, + "p95_ms": 403.8451253436506, + "p99_ms": 403.8451253436506, + "timings": [ + 396.96575002744794, + 375.71941688656807, + 376.8006251193583, + 375.19295793026686, + 373.92666656523943, + 375.14254078269005, + 378.7165000103414, + 374.5987918227911, + 403.699291869998, + 375.14775013551116, + 373.5132906585932, + 373.8865409977734, + 401.4611658640206, + 373.8992912694812, + 373.09237476438284, + 379.99429227784276, + 369.9572500772774, + 373.93629224970937, + 371.3171659037471, + 375.2424167469144, + 375.48974994570017, + 376.77220860496163, + 385.5167906731367, + 403.8451253436506, + 399.8547079972923 + ], + "q1_avg_ms": 378.9579928852618, + "q2_avg_ms": 379.92702758250135, + "q3_avg_ms": 378.723444417119, + "q4_avg_ms": 384.00545217362895, + "trend_slope_ms_per_req": 0.2228175956182755, + "cv_pct": 2.8851537966301617, + "first_avg_ms": 378.9579928852618, + "last_avg_ms": 384.00545217362895 + }, + "seq_remote_https": { + "mean_ms": 583.3836384117603, + "median_ms": 575.0361662358046, + "min_ms": 564.4924999214709, + "max_ms": 615.2714998461306, + "stdev_ms": 17.86315907449909, + "p50_ms": 575.0361662358046, + "p95_ms": 575.0361662358046, + "p99_ms": 615.2714998461306, + "timings": [ + 610.3364578448236, + 571.4919166639447, + 569.3374169059098, + 584.6563749946654, + 569.648708216846, + 601.5578340739012, + 568.9098751172423, + 567.7964589558542, + 564.9615828879178, + 596.8181248754263, + 570.1627917587757, + 612.6052499748766, + 575.1003343611956, + 572.2347497940063, + 581.2487090006471, + 612.9242503084242, + 564.4924999214709, + 615.2714998461306, + 569.9759996496141, + 572.3182079382241, + 576.6047919169068, + 611.2745832651854, + 570.297583937645, + 575.0361662358046, + 599.5287918485701 + ], + "q1_avg_ms": 584.5047847833484, + "q2_avg_ms": 580.2090139283488, + "q3_avg_ms": 586.8786738719791, + "q4_avg_ms": 582.1480178274214, + "trend_slope_ms_per_req": 0.21649762701529723, + "cv_pct": 3.061991783508166, + "first_avg_ms": 584.5047847833484, + "last_avg_ms": 582.1480178274214 + }, + "seq_remote_http2": { + "mean_ms": 580.408303309232, + "median_ms": 573.1371659785509, + "min_ms": 566.9875000603497, + "max_ms": 621.8092497438192, + "stdev_ms": 17.561358506789308, + "p50_ms": 573.1371659785509, + "p95_ms": 568.6986250802875, + "p99_ms": 621.8092497438192, + "timings": [ + 621.8092497438192, + 570.1999999582767, + 570.6767924129963, + 569.3883751519024, + 568.7210001051426, + 573.1371659785509, + 573.1798750348389, + 587.415708694607, + 570.7633337005973, + 570.6502916291356, + 574.1010410711169, + 573.039208073169, + 575.9791252203286, + 574.7553752735257, + 581.7242078483105, + 618.354625068605, + 579.8855000175536, + 571.5117501094937, + 567.2774161212146, + 570.2675003558397, + 578.4142077900469, + 616.9910002499819, + 566.9875000603497, + 568.6986250802875, + 616.2787079811096 + ], + "q1_avg_ms": 578.9887638917813, + "q2_avg_ms": 574.8582430339108, + "q3_avg_ms": 583.7017639229695, + "q4_avg_ms": 583.55927966269, + "trend_slope_ms_per_req": 0.344412845845979, + "cv_pct": 3.02569043321093, + "first_avg_ms": 578.9887638917813, + "last_avg_ms": 583.55927966269 + }, + "seq_proxy_http": { + "mean_ms": 1535.4359816759825, + "median_ms": 765.1534168981016, + "min_ms": 605.4785843007267, + "max_ms": 5801.800208166242, + "stdev_ms": 1881.4423962679093, + "p50_ms": 765.1534168981016, + "p95_ms": 885.2386251091957, + "p99_ms": 5801.800208166242, + "timings": [ + 1108.948958106339, + 871.2106668390334, + 624.9956251122057, + 765.1534168981016, + 605.4785843007267, + 625.4166248254478, + 5737.1033327654, + 770.022832788527, + 621.9656248576939, + 902.0647080615163, + 5736.001666169614, + 617.0050827786326, + 5724.141040816903, + 620.8550003357232, + 609.0219579637051, + 823.6126671545208, + 607.8788749873638, + 626.9608750008047, + 735.9892092645168, + 5801.800208166242, + 616.9680831953883, + 782.8748752363026, + 867.0775420032442, + 885.2386251091957, + 698.1134591624141 + ], + "q1_avg_ms": 766.867312680309, + "q2_avg_ms": 2397.3605412368975, + "q3_avg_ms": 1502.0784027098368, + "q4_avg_ms": 1484.0088574481863, + "trend_slope_ms_per_req": -5.486624791430166, + "cv_pct": 122.5347340248109, + "first_avg_ms": 766.867312680309, + "last_avg_ms": 1484.0088574481863 + }, + "seq_proxy_https": { + "error": "error: (16, '')" + }, + "seq_proxy_http2": { + "mean_ms": 3263.551684971899, + "median_ms": 1440.7617920078337, + "min_ms": 1122.6772079244256, + "max_ms": 6672.611416783184, + "stdev_ms": 2464.5479923338844, + "p50_ms": 1440.7617920078337, + "p95_ms": 2082.0863330736756, + "p99_ms": 6672.611416783184, + "timings": [ + 1321.456584148109, + 1122.6772079244256, + 6364.369582850486, + 1216.124167200178, + 1197.0895417034626, + 1295.781624969095, + 6637.7994157373905, + 6672.611416783184, + 6461.835207883269, + 3501.6964161768556, + 6123.4892080537975, + 6412.524334155023, + 6206.941207870841, + 1337.8892499022186, + 1240.5212922021747, + 1222.2664998844266, + 6476.74833284691, + 1188.488541636616, + 1323.6009166575968, + 1440.7617920078337, + 1272.8248750790954, + 6446.727709379047, + 1284.488458186388, + 2082.0863330736756, + 1737.9922079853714 + ], + "q1_avg_ms": 2086.2497847992927, + "q2_avg_ms": 5968.325999798253, + "q3_avg_ms": 2945.475854057198, + "q4_avg_ms": 2226.926041767001, + "trend_slope_ms_per_req": -51.90440092558185, + "cv_pct": 75.51735747537597, + "first_avg_ms": 2086.2497847992927, + "last_avg_ms": 2226.926041767001 + }, + "conc_local_http": { + "total_time_s": 0.013084417209029198, + "req_per_sec": 1910.6697379496723, + "avg_ms": 0.5233766883611679, + "mean_completion_ms": 9.678313620388508, + "median_completion_ms": 9.75870806723833, + "min_completion_ms": 5.847332999110222, + "max_completion_ms": 12.762542348355055, + "p95_completion_ms": 12.630833312869072, + "completion_times": [ + 5.847332999110222, + 6.1217499896883965, + 6.592791993170977, + 6.947042420506477, + 7.4067083187401295, + 7.696458138525486, + 7.993667386472225, + 8.2246670499444, + 8.547750301659107, + 8.913875091820955, + 9.297167416661978, + 9.445375297218561, + 9.75870806723833, + 9.971917141228914, + 10.342042427510023, + 10.65037539228797, + 11.122625321149826, + 11.365750338882208, + 11.588457971811295, + 11.89466705545783, + 12.089875061064959, + 12.276292312890291, + 12.469167355448008, + 12.630833312869072, + 12.762542348355055 + ], + "trend_slope_ms_per_req": 0.29504744658389914, + "cv_pct": 22.515268361823683, + "first_avg_ms": 6.768680643290281, + "last_avg_ms": 12.24454791684236 + }, + "conc_remote_http": { + "total_time_s": 3.0425543752498925, + "req_per_sec": 8.216780019895845, + "avg_ms": 121.7021750099957, + "mean_completion_ms": 1417.55238218233, + "median_completion_ms": 1269.39691696316, + "min_completion_ms": 481.17300029844046, + "max_completion_ms": 3041.79545911029, + "p95_completion_ms": 3030.783375259489, + "completion_times": [ + 481.17300029844046, + 484.15575036779046, + 494.9099593795836, + 496.18604220449924, + 497.94675037264824, + 853.9111251011491, + 858.668084256351, + 893.3056253008544, + 895.2763341367245, + 895.7586670294404, + 1226.8716669641435, + 1230.8359593153, + 1269.39691696316, + 1269.482500385493, + 1296.2890840135515, + 1612.328584305942, + 1612.3998751863837, + 1646.4685420505702, + 1647.1682921983302, + 1668.7861671671271, + 2027.9570841230452, + 2986.039042007178, + 3020.9156670607626, + 3030.783375259489, + 3041.79545911029 + ], + "trend_slope_ms_per_req": 106.18908964742262, + "cv_pct": 58.95459759318125, + "first_avg_ms": 551.3804379540185, + "last_avg_ms": 2489.0635838466033 + }, + "conc_remote_https": { + "total_time_s": 2.9093551663681865, + "req_per_sec": 8.592969428070228, + "avg_ms": 116.37420665472746, + "mean_completion_ms": 1723.1765486486256, + "median_completion_ms": 1719.26608402282, + "min_completion_ms": 570.5572501756251, + "max_completion_ms": 2908.943541813642, + "p95_completion_ms": 2886.560416780412, + "completion_times": [ + 570.5572501756251, + 571.5868747793138, + 571.6156670823693, + 572.7415420114994, + 573.1095001101494, + 1139.8689169436693, + 1141.6332921944559, + 1144.2639171145856, + 1144.5742091163993, + 1156.5547091886401, + 1708.4065419621766, + 1708.5704999044538, + 1719.26608402282, + 1725.167625118047, + 1747.8585420176387, + 2286.8176670745015, + 2288.01479190588, + 2291.214333847165, + 2292.892166879028, + 2310.978792142123, + 2865.351791959256, + 2876.3842498883605, + 2876.480792183429, + 2886.560416780412, + 2908.943541813642 + ], + "trend_slope_ms_per_req": 111.18834246666385, + "cv_pct": 48.337527733184615, + "first_avg_ms": 666.5799585171044, + "last_avg_ms": 2716.79882166375 + }, + "conc_remote_http2": { + "total_time_s": 3.879673750139773, + "req_per_sec": 6.443840799525817, + "avg_ms": 155.18695000559092, + "mean_completion_ms": 2288.308186493814, + "median_completion_ms": 2265.338416211307, + "min_completion_ms": 571.5217082761228, + "max_completion_ms": 3879.410750232637, + "p95_completion_ms": 3446.368332952261, + "completion_times": [ + 571.5217082761228, + 576.428750064224, + 1137.6590831205249, + 1159.003249835223, + 1572.956415824592, + 1584.7585001029074, + 1587.4188332818449, + 1701.976666226983, + 1736.9628329761326, + 2135.6914578936994, + 2140.7986250706017, + 2144.857124891132, + 2265.338416211307, + 2301.597374957055, + 2716.0697081126273, + 2733.5578752681613, + 2739.7807082161307, + 2840.222083032131, + 2881.338416133076, + 3305.400375276804, + 3307.394875213504, + 3317.5658332183957, + 3423.626665957272, + 3446.368332952261, + 3879.410750232637 + ], + "trend_slope_ms_per_req": 123.10587811212127, + "cv_pct": 40.116262498090215, + "first_avg_ms": 1100.3879512039323, + "last_avg_ms": 3365.8721784262784 + }, + "conc_proxy_http": { + "total_time_s": 11.653687625192106, + "req_per_sec": 2.1452437034571608, + "avg_ms": 466.14750500768423, + "mean_completion_ms": 4136.942556519061, + "median_completion_ms": 3168.070917017758, + "min_completion_ms": 608.4578330628574, + "max_completion_ms": 11652.40416675806, + "p95_completion_ms": 11036.64437495172, + "completion_times": [ + 608.4578330628574, + 748.7189997918904, + 765.5088747851551, + 868.9369997009635, + 1356.5062079578638, + 1363.8713327236474, + 1756.2726670876145, + 1966.27016691491, + 1969.3028749898076, + 2556.2081248499453, + 2575.595374684781, + 2828.1164579093456, + 3168.070917017758, + 3337.372582871467, + 3703.5469580441713, + 3944.1361669451, + 4322.103082668036, + 5227.417499758303, + 5808.322957716882, + 6261.643792036921, + 7052.350624930114, + 8971.100667025894, + 9574.684207793325, + 11036.64437495172, + 11652.40416675806 + ], + "trend_slope_ms_per_req": 418.0885435959611, + "cv_pct": 79.40581732420195, + "first_avg_ms": 952.000041337063, + "last_avg_ms": 8622.450113030416 + }, + "conc_proxy_https": { + "total_time_s": 14.08548037474975, + "req_per_sec": 1.7748773442484855, + "avg_ms": 563.41921498999, + "mean_completion_ms": 5823.7887299619615, + "median_completion_ms": 6155.681374948472, + "min_completion_ms": 1194.1050831228495, + "max_completion_ms": 14082.68995815888, + "p95_completion_ms": 12739.582082722336, + "completion_times": [ + 1194.1050831228495, + 1317.5367498770356, + 1351.895249914378, + 2325.6242498755455, + 2518.798958044499, + 2550.3752077929676, + 3546.8856249935925, + 3709.734042175114, + 3989.805541932583, + 4757.377041969448, + 5030.552042182535, + 5975.52275005728, + 6155.681374948472, + 6181.051833089441, + 6218.954333104193, + 6236.739874817431, + 7160.739500075579, + 7428.932167124003, + 7429.760333150625, + 7622.992624994367, + 8527.968707960099, + 8651.950791943818, + 8889.462125021964, + 12739.582082722336, + 14082.68995815888 + ], + "trend_slope_ms_per_req": 429.0747704467951, + "cv_pct": 56.72391918188233, + "first_avg_ms": 1876.3892497712125, + "last_avg_ms": 9706.343803421727 + }, + "conc_proxy_http2": { + "total_time_s": 10.376577708870173, + "req_per_sec": 2.4092721802323456, + "avg_ms": 415.0631083548069, + "mean_completion_ms": 5344.439408518374, + "median_completion_ms": 5153.064749669284, + "min_completion_ms": 1179.5270419679582, + "max_completion_ms": 10375.620916951448, + "p95_completion_ms": 9338.71224988252, + "completion_times": [ + 1179.5270419679582, + 1195.1772086322308, + 1223.026541993022, + 2438.4946250356734, + 2447.613624855876, + 2704.1394589468837, + 2782.1962917223573, + 3668.5329587198794, + 3789.712083991617, + 3950.0215416774154, + 4984.246458858252, + 5040.991708636284, + 5153.064749669284, + 6184.060291852802, + 6335.5468339286745, + 6353.23949996382, + 6405.824542045593, + 7537.335249595344, + 7610.849583987147, + 7654.41833389923, + 7668.517249636352, + 8739.371124655008, + 8850.74504185468, + 9338.71224988252, + 10375.620916951448 + ], + "trend_slope_ms_per_req": 368.59382370773415, + "cv_pct": 51.09274417000369, + "first_avg_ms": 1864.6630835719407, + "last_avg_ms": 8605.46207155234 + } + }, + "curl_cffi": { + "seq_local_http": { + "mean_ms": 0.5624417588114738, + "median_ms": 0.5514589138329029, + "min_ms": 0.39900001138448715, + "max_ms": 1.1769160628318787, + "stdev_ms": 0.15901581824897093, + "p50_ms": 0.5514589138329029, + "p95_ms": 0.4516672343015671, + "p99_ms": 1.1769160628318787, + "timings": [ + 0.5941670387983322, + 0.6845002062618732, + 0.5880827084183693, + 0.6336248479783535, + 0.6862920708954334, + 1.1769160628318787, + 0.5934587679803371, + 0.5634166300296783, + 0.563083216547966, + 0.6381249986588955, + 0.749833881855011, + 0.5599171854555607, + 0.477583147585392, + 0.44229207560420036, + 0.432540662586689, + 0.41354214772582054, + 0.49966713413596153, + 0.4526660777628422, + 0.4120422527194023, + 0.39900001138448715, + 0.5000829696655273, + 0.5035838112235069, + 0.49349991604685783, + 0.4516672343015671, + 0.5514589138329029 + ], + "q1_avg_ms": 0.7272638225307068, + "q2_avg_ms": 0.6113057800879081, + "q3_avg_ms": 0.45304854090015095, + "q4_avg_ms": 0.4730478727391788, + "trend_slope_ms_per_req": -0.0118821683841256, + "cv_pct": 28.27240612165709, + "first_avg_ms": 0.7272638225307068, + "last_avg_ms": 0.4730478727391788 + }, + "seq_remote_http": { + "mean_ms": 380.1794267632067, + "median_ms": 378.81650030612946, + "min_ms": 371.0857923142612, + "max_ms": 405.3025422617793, + "stdev_ms": 8.298586822789632, + "p50_ms": 378.81650030612946, + "p95_ms": 371.0857923142612, + "p99_ms": 405.3025422617793, + "timings": [ + 375.50458312034607, + 380.69816725328565, + 371.3766671717167, + 405.3025422617793, + 374.69249963760376, + 379.02950029820204, + 374.95904229581356, + 384.1810836456716, + 373.4695836901665, + 387.60833302512765, + 383.74224957078695, + 376.9395831041038, + 375.77350018545985, + 402.95241633430123, + 380.63337514176965, + 379.10808296874166, + 377.7794996276498, + 379.74562495946884, + 375.153916887939, + 373.07879189029336, + 382.75908306241035, + 382.46425008401275, + 377.63100024312735, + 371.0857923142612, + 378.81650030612946 + ], + "q1_avg_ms": 381.1006599571556, + "q2_avg_ms": 380.149979221945, + "q3_avg_ms": 382.6654165362318, + "q4_avg_ms": 377.2841906840248, + "trend_slope_ms_per_req": -0.15045442797530156, + "cv_pct": 2.182807968711672, + "first_avg_ms": 381.1006599571556, + "last_avg_ms": 377.2841906840248 + }, + "seq_remote_https": { + "mean_ms": 571.3390984013677, + "median_ms": 563.6767921969295, + "min_ms": 556.7320422269404, + "max_ms": 620.1510829851031, + "stdev_ms": 17.667430470845954, + "p50_ms": 563.6767921969295, + "p95_ms": 562.1430408209562, + "p99_ms": 620.1510829851031, + "timings": [ + 592.3169157467782, + 607.2264998219907, + 571.2571670301259, + 563.6767921969295, + 613.8969589956105, + 561.2424169667065, + 578.305333852768, + 569.1782496869564, + 561.3300413824618, + 562.0789588429034, + 564.0962081961334, + 563.4558750316501, + 561.7363341152668, + 558.6694171652198, + 556.7320422269404, + 566.1347918212414, + 572.9974168352783, + 560.976667329669, + 620.1510829851031, + 566.9485828839242, + 562.0126659050584, + 564.9406253360212, + 559.2929171398282, + 562.1430408209562, + 562.6804577186704 + ], + "q1_avg_ms": 584.9361251263568, + "q2_avg_ms": 566.4074444988122, + "q3_avg_ms": 562.8744449156026, + "q4_avg_ms": 571.1670532556517, + "trend_slope_ms_per_req": -0.8350507195035999, + "cv_pct": 3.0922845154970515, + "first_avg_ms": 584.9361251263568, + "last_avg_ms": 571.1670532556517 + }, + "seq_remote_http2": { + "mean_ms": 582.555721681565, + "median_ms": 570.3217918053269, + "min_ms": 562.6535001210868, + "max_ms": 684.3861658126116, + "stdev_ms": 27.255888371497974, + "p50_ms": 570.3217918053269, + "p95_ms": 605.9830840677023, + "p99_ms": 684.3861658126116, + "timings": [ + 684.3861658126116, + 608.0547906458378, + 570.3217918053269, + 568.9463750459254, + 611.1752497963607, + 568.2052080519497, + 564.2247921787202, + 573.0979172512889, + 566.4841248653829, + 576.7792081460357, + 566.6257501579821, + 608.2053752616048, + 575.5722089670599, + 578.861374873668, + 586.1636251211166, + 567.7833752706647, + 567.2371247783303, + 577.2121250629425, + 568.6510419473052, + 562.6535001210868, + 615.4867908917367, + 563.6113747023046, + 564.2476249486208, + 605.9830840677023, + 563.923042267561 + ], + "q1_avg_ms": 601.8482635263354, + "q2_avg_ms": 575.9028613101691, + "q3_avg_ms": 575.471639012297, + "q4_avg_ms": 577.7937798494739, + "trend_slope_ms_per_req": -1.1912213577530706, + "cv_pct": 4.678674907324404, + "first_avg_ms": 601.8482635263354, + "last_avg_ms": 577.7937798494739 + }, + "seq_proxy_http": { + "mean_ms": 1165.6250498630106, + "median_ms": 744.1465831361711, + "min_ms": 601.0421668179333, + "max_ms": 5888.546749949455, + "stdev_ms": 1401.6250295889404, + "p50_ms": 744.1465831361711, + "p95_ms": 614.3972910940647, + "p99_ms": 5888.546749949455, + "timings": [ + 616.1560001783073, + 620.5280418507755, + 760.0191659294069, + 1495.6742501817644, + 794.5214998908341, + 621.5407908894122, + 725.2401658333838, + 740.5819999985397, + 796.0197501815856, + 645.3184997662902, + 682.6708330772817, + 924.7033749707043, + 5673.706749919802, + 799.7364168986678, + 609.6012918278575, + 801.8259587697685, + 601.0421668179333, + 610.0050415843725, + 937.6442497596145, + 765.4841253533959, + 951.8513330258429, + 744.1465831361711, + 5888.546749949455, + 614.3972910940647, + 719.6639156900346 + ], + "q1_avg_ms": 818.07329148675, + "q2_avg_ms": 752.4224373046309, + "q3_avg_ms": 1515.9862709697336, + "q4_avg_ms": 1517.3906068583685, + "trend_slope_ms_per_req": 36.92497791185115, + "cv_pct": 120.24664618812588, + "first_avg_ms": 818.07329148675, + "last_avg_ms": 1517.3906068583685 + }, + "seq_proxy_https": { + "mean_ms": 1866.4429666660726, + "median_ms": 1329.8462498933077, + "min_ms": 1154.3512078933418, + "max_ms": 6762.83249957487, + "stdev_ms": 1495.4344600088891, + "p50_ms": 1329.8462498933077, + "p95_ms": 1154.3512078933418, + "p99_ms": 6762.83249957487, + "timings": [ + 1195.3115831129253, + 1639.6879171952605, + 1237.990166991949, + 1203.2567500136793, + 1189.4224169664085, + 1234.1289576143026, + 6722.263416741043, + 2011.8272500112653, + 1326.1238751001656, + 1715.4888329096138, + 2085.1569999940693, + 1196.9604580663145, + 1354.3100417591631, + 1232.2926670312881, + 1329.8462498933077, + 1225.3061668016016, + 1646.3916250504553, + 1834.6211249008775, + 1372.5951667875051, + 1927.3037500679493, + 1199.292792007327, + 1206.714958883822, + 6762.83249957487, + 1154.3512078933418, + 1657.5972912833095 + ], + "q1_avg_ms": 1283.2996319824208, + "q2_avg_ms": 2509.636805470412, + "q3_avg_ms": 1437.127979239449, + "q4_avg_ms": 2182.9553809283034, + "trend_slope_ms_per_req": 19.823578487580214, + "cv_pct": 80.12216214032534, + "first_avg_ms": 1283.2996319824208, + "last_avg_ms": 2182.9553809283034 + }, + "seq_proxy_http2": { + "error": "SSLError: Failed to perform, curl: (35) TLS connect error: error:00000000:invalid library (0):OPENSSL_internal" + }, + "conc_local_http": { + "total_time_s": 0.017612124793231487, + "req_per_sec": 1419.4766556280447, + "avg_ms": 0.7044849917292595, + "mean_completion_ms": 13.563212919980288, + "median_completion_ms": 13.60995788127184, + "min_completion_ms": 7.8477500937879086, + "max_completion_ms": 17.492915969341993, + "p95_completion_ms": 17.433166038244963, + "completion_times": [ + 7.8477500937879086, + 9.218832943588495, + 10.011999867856503, + 10.148707777261734, + 10.354749858379364, + 10.936957783997059, + 11.08558289706707, + 11.507082730531693, + 12.097958009690046, + 12.207624968141317, + 12.830332852900028, + 13.431999832391739, + 13.60995788127184, + 14.112166129052639, + 14.572457876056433, + 15.058707911521196, + 15.54741570726037, + 15.649874694645405, + 16.184499952942133, + 16.43120776861906, + 16.892832703888416, + 17.172665800899267, + 17.242874950170517, + 17.433166038244963, + 17.492915969341993 + ], + "trend_slope_ms_per_req": 0.39247030643029857, + "cv_pct": 21.438846291150234, + "first_avg_ms": 9.75316638747851, + "last_avg_ms": 16.978594740586622 + }, + "conc_remote_http": { + "total_time_s": 2.050203041639179, + "req_per_sec": 12.193914208620036, + "avg_ms": 82.00812166556716, + "mean_completion_ms": 1246.3426682911813, + "median_completion_ms": 1235.9148329123855, + "min_completion_ms": 479.86604180186987, + "max_completion_ms": 2049.610166810453, + "p95_completion_ms": 2012.426916975528, + "completion_times": [ + 479.86604180186987, + 481.2311250716448, + 483.4908749908209, + 484.4029168598354, + 486.16237472742796, + 853.843207936734, + 857.0875418372452, + 858.9340830221772, + 863.902083132416, + 892.3684167675674, + 1233.04787511006, + 1235.5849579907954, + 1235.9148329123855, + 1238.437124993652, + 1290.528167039156, + 1612.525667063892, + 1613.413707818836, + 1613.764917012304, + 1641.0584580153227, + 1673.44258306548, + 1987.6301251351833, + 1989.9090831167996, + 1989.983458071947, + 2012.426916975528, + 2049.610166810453 + ], + "trend_slope_ms_per_req": 73.69062525757516, + "cv_pct": 44.166953636104715, + "first_avg_ms": 544.8327568980554, + "last_avg_ms": 1906.2943987415306 + }, + "conc_remote_https": { + "total_time_s": 2.9040484577417374, + "req_per_sec": 8.608671777963595, + "avg_ms": 116.1619383096695, + "mean_completion_ms": 1730.5925779789686, + "median_completion_ms": 1719.4635830819607, + "min_completion_ms": 571.5185827575624, + "max_completion_ms": 2903.605666011572, + "p95_completion_ms": 2891.220999881625, + "completion_times": [ + 571.5185827575624, + 572.7196247316897, + 572.9410001076758, + 578.3980409614742, + 619.8765407316387, + 1127.440500073135, + 1134.3674999661744, + 1135.6560410931706, + 1179.6164577826858, + 1187.042708043009, + 1718.2629159651697, + 1719.208249822259, + 1719.4635830819607, + 1744.2582910880446, + 1744.4159160368145, + 2290.528249926865, + 2290.868000127375, + 2301.7396247014403, + 2326.20804104954, + 2330.38437506184, + 2858.017874881625, + 2859.4006658531725, + 2887.6549997366965, + 2891.220999881625, + 2903.605666011572 + ], + "trend_slope_ms_per_req": 111.0036473423959, + "cv_pct": 47.96075959403321, + "first_avg_ms": 673.8157148938626, + "last_avg_ms": 2722.356088925153 + }, + "conc_remote_http2": { + "total_time_s": 2.847100625280291, + "req_per_sec": 8.780862811105878, + "avg_ms": 113.88402501121163, + "mean_completion_ms": 1703.793304655701, + "median_completion_ms": 1710.8856248669326, + "min_completion_ms": 562.2637080959976, + "max_completion_ms": 2846.3324159383774, + "p95_completion_ms": 2838.7306248769164, + "completion_times": [ + 562.2637080959976, + 568.3424999006093, + 568.6114160344005, + 569.4256657734513, + 569.7839157655835, + 1126.8286248669028, + 1131.2648328021169, + 1135.7222497463226, + 1136.3937500864267, + 1136.7704160511494, + 1700.913957785815, + 1709.6965829841793, + 1710.8856248669326, + 1711.0978327691555, + 1711.3303747028112, + 2267.3174580559134, + 2268.1510411202908, + 2273.058250080794, + 2273.8898750394583, + 2275.8955829776824, + 2828.871415928006, + 2835.77875001356, + 2837.47575012967, + 2838.7306248769164, + 2846.3324159383774 + ], + "trend_slope_ms_per_req": 109.28339869607814, + "cv_pct": 48.10034632223804, + "first_avg_ms": 660.8759717394909, + "last_avg_ms": 2676.7106307005242 + }, + "conc_proxy_http": { + "total_time_s": 6.561570833902806, + "req_per_sec": 3.8100632657698617, + "avg_ms": 262.46283335611224, + "mean_completion_ms": 2788.9822751656175, + "median_completion_ms": 2844.2582921124995, + "min_completion_ms": 643.2352080009878, + "max_completion_ms": 6561.265416909009, + "p95_completion_ms": 5786.245875060558, + "completion_times": [ + 643.2352080009878, + 699.2527502588928, + 749.2761253379285, + 779.2860832996666, + 1442.0457081869245, + 1463.3205831050873, + 1465.7873753458261, + 1593.6621250584722, + 2048.7527921795845, + 2141.8533753603697, + 2264.5381670445204, + 2402.820042334497, + 2844.2582921124995, + 2860.8196252025664, + 2874.6625422500074, + 3011.444792151451, + 3612.0213330723345, + 3612.928833346814, + 3703.898624982685, + 3943.124750163406, + 4238.238832913339, + 4341.830958146602, + 4639.986667316407, + 5786.245875060558, + 6561.265416909009 + ], + "trend_slope_ms_per_req": 209.02812932832882, + "cv_pct": 56.71814254862295, + "first_avg_ms": 962.7360763649145, + "last_avg_ms": 4744.941589356001 + }, + "conc_proxy_https": { + "total_time_s": 10.171413416042924, + "req_per_sec": 2.4578688307535113, + "avg_ms": 406.85653664171696, + "mean_completion_ms": 5804.943978432566, + "median_completion_ms": 6338.456416968256, + "min_completion_ms": 1183.2412090152502, + "max_completion_ms": 10170.695041771978, + "p95_completion_ms": 10113.213791977614, + "completion_times": [ + 1183.2412090152502, + 1187.4786247499287, + 1213.105583563447, + 1434.1049999929965, + 2392.0932495966554, + 2661.535083781928, + 2732.1890415623784, + 3673.6652916297317, + 3980.868374928832, + 4301.366874948144, + 4922.313416842371, + 6120.528624858707, + 6338.456416968256, + 6456.787083763629, + 7301.339124795049, + 7540.051249787211, + 7679.361291695386, + 8123.896166682243, + 8523.241333663464, + 8748.688499908894, + 9236.901458818465, + 9267.159541603178, + 9821.318083908409, + 10113.213791977614, + 10170.695041771978 + ], + "trend_slope_ms_per_req": 420.4480700703481, + "cv_pct": 53.706632203724105, + "first_avg_ms": 1678.593125116701, + "last_avg_ms": 9411.602535950286 + }, + "conc_proxy_http2": { + "total_time_s": 15.620816332753748, + "req_per_sec": 1.6004285222648684, + "avg_ms": 624.8326533101499, + "mean_completion_ms": 6544.1935268417, + "median_completion_ms": 6566.163084004074, + "min_completion_ms": 1191.7932499200106, + "max_completion_ms": 15620.49866700545, + "p95_completion_ms": 14219.555874820799, + "completion_times": [ + 1191.7932499200106, + 1199.3380840867758, + 1527.489583939314, + 1665.1389999315143, + 2383.0537917092443, + 2762.737416662276, + 2986.717708874494, + 4186.366624664515, + 4667.628834024072, + 5411.118916701525, + 5966.009374707937, + 6493.437249679118, + 6566.163084004074, + 7181.451125070453, + 7662.826041691005, + 7724.672958720475, + 8123.108999803662, + 8523.124958854169, + 9055.551124736667, + 9056.86316685751, + 9352.335083764046, + 9784.980083815753, + 10292.877166997641, + 14219.555874820799, + 15620.49866700545 + ], + "trend_slope_ms_per_req": 507.5795838777692, + "cv_pct": 58.93259247115205, + "first_avg_ms": 1788.2585210415225, + "last_avg_ms": 11054.665881142553 + } + } + } +} \ No newline at end of file diff --git a/benchmarks/results/darwin/0.2.9/benchmark.md b/benchmarks/results/darwin/0.2.9/benchmark.md new file mode 100644 index 0000000..cd3f0d3 --- /dev/null +++ b/benchmarks/results/darwin/0.2.9/benchmark.md @@ -0,0 +1,133 @@ +# httpmorph Benchmark Results + +**Version:** 0.2.9 | **Generated:** 2025-12-15 + +## System Information + +| Property | Value | +|----------|-------| +| **OS** | Darwin (macOS-15.6-arm64-arm-64bit) | +| **Processor** | arm | +| **CPU Cores** | 10 | +| **Memory** | 16.0 GB | +| **Python** | 3.11.5 (CPython) | + +## Test Configuration + +- **Sequential Requests:** 25 (warmup: 5) +- **Concurrent Requests:** 25 (workers: 5) + +## Library Versions + +| Library | Version | Status | +|---------|---------|--------| +| **httpmorph** | `0.2.9` | Installed | +| **requests** | `2.31.0` | Installed | +| **httpx** | `0.28.1` | Installed | +| **aiohttp** | `3.13.2` | Installed | +| **urllib3** | `1.26.16` | Installed | +| **urllib** | `built-in (Python 3.11.5)` | Installed | +| **pycurl** | `PycURL/7.45.2 libcurl/8.7.1 (SecureTransport) LibreSSL/3.3.6 zlib/1.2.12 nghttp2/1.64.0` | Installed | +| **curl_cffi** | `0.13.0` | Installed | + +## Sequential Tests (Lower is Better) + +Mean response time in milliseconds + +| Library | Local HTTP | Proxy HTTP | Proxy HTTP2 | Proxy HTTPs | Remote HTTP | Remote HTTP2 | Remote HTTPs | +|---------|--------:|--------:|--------:|--------:|--------:|--------:|--------:| +| **curl_cffi** | 0.56ms | 1165.63ms | ERROR | 1866.44ms | 380.18ms | 582.56ms | 571.34ms | +| **httpmorph** | 0.14ms | 1170.21ms | 1782.81ms | 2048.53ms | 189.68ms | 187.65ms | 188.44ms | +| **httpx** | 0.61ms | 490.34ms | 320.46ms | 343.61ms | 381.17ms | 571.08ms | 571.55ms | +| **pycurl** | 0.29ms | 1535.44ms | 3263.55ms | ERROR | 380.55ms | 580.41ms | 583.38ms | +| **requests** | 1.16ms | 374.35ms | N/A | 467.73ms | 194.14ms | N/A | 189.35ms | +| **urllib** | 14.93ms | 1240.06ms | N/A | 2550.24ms | 380.10ms | N/A | 612.15ms | +| **urllib3** | 0.56ms | 339.93ms | N/A | 483.14ms | 202.21ms | N/A | 202.19ms | + +**Winners (Sequential):** +- Local HTTP: **httpmorph** (0.14ms) +- Proxy HTTP: **urllib3** (339.93ms) +- Proxy HTTP2: **httpx** (320.46ms) +- Proxy HTTPs: **httpx** (343.61ms) +- Remote HTTP: **httpmorph** (189.68ms) +- Remote HTTP2: **httpmorph** (187.65ms) +- Remote HTTPs: **httpmorph** (188.44ms) + +## Concurrent Tests (Higher is Better) + +Throughput in requests per second + +| Library | Local HTTP | Proxy HTTP | Proxy HTTP2 | Proxy HTTPs | Remote HTTP | Remote HTTP2 | Remote HTTPs | +|---------|--------:|--------:|--------:|--------:|--------:|--------:|--------:| +| **curl_cffi** | 1419.48 | 3.81 | 1.60 | 2.46 | 12.19 | 8.78 | 8.61 | +| **httpmorph** | 3033.50 | 2.01 | 0.71 | 1.22 | 21.74 | 18.40 | 17.46 | +| **httpx** | 775.96 | 2.98 | 3.83 | 3.86 | 12.28 | 8.54 | 8.71 | +| **pycurl** | 1910.67 | 2.15 | 2.41 | 1.77 | 8.22 | 6.44 | 8.59 | +| **requests** | 779.51 | 9.10 | N/A | 3.74 | 19.91 | N/A | 16.67 | +| **urllib** | 24.61 | 3.19 | N/A | 1.42 | 12.20 | N/A | 7.06 | +| **urllib3** | 1264.03 | 4.32 | N/A | 6.97 | 20.85 | N/A | 17.05 | + +**Winners (Concurrent):** +- Local HTTP: **httpmorph** (3033.50 req/s) +- Proxy HTTP: **requests** (9.10 req/s) +- Proxy HTTP2: **httpx** (3.83 req/s) +- Proxy HTTPs: **urllib3** (6.97 req/s) +- Remote HTTP: **httpmorph** (21.74 req/s) +- Remote HTTP2: **httpmorph** (18.40 req/s) +- Remote HTTPs: **httpmorph** (17.46 req/s) + +## Async Tests (Higher is Better) + +Throughput in requests per second + +| Library | Local HTTP | Proxy HTTP | Proxy HTTP2 | Proxy HTTPs | Remote HTTP | Remote HTTP2 | Remote HTTPs | +|---------|--------:|--------:|--------:|--------:|--------:|--------:|--------:| +| **aiohttp** | 117.14 | 4.23 | N/A | 3.14 | 59.31 | N/A | 15.47 | +| **httpmorph** | 193.53 | 3.18 | 1.50 | 1.82 | 47.96 | 15.45 | 9.68 | +| **httpx** | 131.47 | 2.45 | 2.42 | 2.66 | 51.84 | 15.43 | 9.38 | + +**Winners (Async):** +- Local HTTP: **httpmorph** (193.53 req/s) +- Proxy HTTP: **aiohttp** (4.23 req/s) +- Proxy HTTP2: **httpx** (2.42 req/s) +- Proxy HTTPs: **aiohttp** (3.14 req/s) +- Remote HTTP: **aiohttp** (59.31 req/s) +- Remote HTTP2: **httpmorph** (15.45 req/s) +- Remote HTTPs: **aiohttp** (15.47 req/s) + +## Overall Performance Summary + +### Sequential Tests: httpmorph vs requests Speedup + +| Test | httpmorph | requests | Speedup | +|------|----------:|---------:|--------:| +| Local HTTP | 0.14ms | 1.16ms | **8.06x** faster | +| Proxy HTTP | 1170.21ms | 374.35ms | 0.32x slower | +| Proxy HTTPs | 2048.53ms | 467.73ms | 0.23x slower | +| Remote HTTP | 189.68ms | 194.14ms | **1.02x** faster | +| Remote HTTPs | 188.44ms | 189.35ms | **1.00x** faster | + +### Concurrent Tests: httpmorph vs requests Speedup + +| Test | httpmorph | requests | Speedup | +|------|----------:|---------:|--------:| +| Local HTTP | 3033.50 req/s | 779.51 req/s | **3.89x** faster | +| Proxy HTTP | 2.01 req/s | 9.10 req/s | 0.22x slower | +| Proxy HTTPs | 1.22 req/s | 3.74 req/s | 0.33x slower | +| Remote HTTP | 21.74 req/s | 19.91 req/s | **1.09x** faster | +| Remote HTTPs | 17.46 req/s | 16.67 req/s | **1.05x** faster | + +### Async Tests: httpmorph vs httpx Speedup + +| Test | httpmorph | httpx | Speedup | +|------|----------:|------:|--------:| +| Local HTTP | 193.53 req/s | 131.47 req/s | **1.47x** faster | +| Proxy HTTP | 3.18 req/s | 2.45 req/s | **1.30x** faster | +| Proxy HTTP2 | 1.50 req/s | 2.42 req/s | 0.62x slower | +| Proxy HTTPs | 1.82 req/s | 2.66 req/s | 0.68x slower | +| Remote HTTP | 47.96 req/s | 51.84 req/s | 0.93x slower | +| Remote HTTP2 | 15.45 req/s | 15.43 req/s | **1.00x** faster | +| Remote HTTPs | 9.68 req/s | 9.38 req/s | **1.03x** faster | + +--- +*Generated by httpmorph benchmark suite* diff --git a/benchmarks/results/darwin/0.2.9/graphics/01_sequential_all_latest.png b/benchmarks/results/darwin/0.2.9/graphics/01_sequential_all_latest.png new file mode 100644 index 0000000000000000000000000000000000000000..1b75e4c630653c2f9bab902cc613591aaa9c3cf6 GIT binary patch literal 81864 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 literal 0 HcmV?d00001 diff --git a/benchmarks/results/darwin/0.2.9/graphics/03_async_all_latest.png b/benchmarks/results/darwin/0.2.9/graphics/03_async_all_latest.png new file mode 100644 index 0000000000000000000000000000000000000000..3e2d7c8f2c148e2ad965dc648f50e959af2002b2 GIT binary patch literal 59885 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�>&Rc5G@k14Z2W+KuK2L9$Gq5NB$V7xs>cxhcO*dZzWh z`_g^0p7b`1W{XZ_jcD~2yp46Et2;KCH%MSPBj*~{D@cZ%ZB*d-ZX zkU4&Aov-FvRu8dO3A#S!Q=ZCr)B>I>>y85S+tLZ)rrC+v;{sj+*At-=jm!dw=2Qv7 zDwiSiB4Sp-fTSSjVm^XmjHN7@@#2vxPMWp1tB)q{f*~H~H0=xoeGB2`yTc_3$CygR zA=;<}qf}p_E`op3!E#T(j}eF@mFTH(=)La45o($hjSf`(Mm)K80d*(<#&!R_goB`0 zqqEQqK+nZd)@u+^X1?OSvtfoNM(Q03r_}e5iJZIj$O}4a396)cOA6~coI=(uWtT}D z-Fl%HmP^m0$5lzwJZGAB#SGyl%{DQULr4{asO_SPgMEA3ra~`dVDH&?+d>!0J}U&7 zKyt*Q33*45;5r$+N8VpP2nzL+dqddBxyvV}QB%r{Wr##e{{BJ-F7OM}3teOR*8Ujn zCru=&!%5+TvnTBKL-xaCjcV`^Jn^j4;MIIM2+jaiG3SO{L|Kx}N>xTT-4PkH5|Fjs9r7R?V zfjH$?5^q6%MzLsTB)ZB3Fi9*NAr#zuKDaj!Y)vqBuqLHs7mjgq99DcvTc`)?V+&H* zGYf*%muXp`+1!c_OY)?oE*eU=sl%08ZfHtvtGh#(tU1~4_jWYG&n{q@D<{mwF9Djp z1*!$*w)nWFKX^Aj@$oxxhIcX3DM>wrnwL(@bXJ4+OcOPC_MGNI%q^8pRAU)>%%n~O1*BL|;GUDobu(9c1rEVo`mgnI#L8CUx!P@R`} zpD)?;UPNm@DkuSRkfwtK2beJFEe@ikZQf~i>>oQp=pXvKkrS1@jp2;`Zk_S( zdnv85&0QE)B{hlFvX{ZepPd|#V3j@lM>4s^Z8oN~w@IgON*M!-=VvtK?JW9$rNX~# zNKP-6a#wR~D%6!<#eJ@DD)uZyZEFpKkkiEbx5T-8=Zeb>I200 zlUpTKtdE<>P#U?IQFW(A^})g6bMZBt)wZs)#Rf ztzOiEk3REor2FdpqL`X88{pi*4EuMg+t?k4cq0M5+zINbHPp&~J5h>JH4HY6dgis7 zQ{~oAz#nSIKr%ojDHm?)Q}I*OpiH&{GNu{Kcu5E}w|;Qotaes4tU%33KbqL;yQ^S` z8u(Nys9Y{wa_j0G$Yu4&(h1x2a=qa{;dGJ_>I!LazFpOHG^$RKx?Xa^7Hl&qq5}@= zasJJqzG?{g)bfZC}+rX zyrdXm4^`xY8i>JXnQeVQ_-2s@H#wSC5>E%@#M2WfaOmNyD8{29cP)F?wbr|bkP`zP zNVgYjf@({wB`XQiN{|uD5hTP-sKJ8a0#Qs7EcBAdeFBFjDeJ7u3J+@xW_{fBYzoU; zC>B&`P%RoA&8c@ExW=}74j|mlLI%$Or?lfX$ggLy*8d58ZOg~+3$zCeA^VT-~B64=0u-eH@cI1wP4=y#IeOC$H_%|-CnaN9+U^S5#(TRD3{N%~VGCsVYJn$P z(}Zw>2qks6*R`G)o0v>;Rs`qSwJ;kX1TnAo+rzsUu(r4ZZFKMusPuF8SZQDJ`y{v;J!> zf^Dz$Zk$~nHaO6|RhrlFX-r#hu0(9l$^!`OELN|vU5k;@k(BUoxv?Q(?c4I@5>N8q zN)>F>KhS@-Ir8gpRljw;C!xV2BU`_3nK|Y!FXrYOCOxbf)$n}YB(tEV-RSIWJWN^o z=AxZKE>D7^UnTAAHA!xGqdSk6<;+IxXqW$glk+l6%q~kRUz@0Rfu!yfnQ~H53a6pB zzKA-Ip2<8gOE^Vn8M^4@faPo7TY(N02Ej#FA4$b+AjO%n>{nuCXf2UShsaiIn(+(T zZ_7-!@Y8z&^J>?Zzb`I=ZbJ+aZ39Jgwi5F4@_j!&sAfT@4{Man*xlA_;moc-s|O~u zj@5ph1@UK`*XRhzqsn38_%aW%e>sg`XssY*7eCb}u?MQ(5LQhv3;I%?|K7?DzXlq> zat)F@Q4VHx7DD&p_4O(hw!~%D!K2+@bp`u9MvnH4occai`>8pae3@nw>gXh{8_8R!I5Zs}ZR@+l@Md9uck>1fh(`UTeFY(ozh%>q<4*G&xIvN57YKiN zsZ=GTtEzzBphX8^E%6>u%>zEq$=sSK3YMfC4d<}}E*?PMpd=mS5nfR?<`e)FWwJJ5 zgl3}Z$|O~oi{VXlTHX*{hBuTKW^M){(S)l(NZP+CY9%d^Dy>B70zZ*6O+YK6D=`udlzvCU1@!qz`xOR4*(i##c5e0d8DB4u~!YJ|Jk3x%|0L8@h zGnOW2Y$4{6#VXT{8RKo6Y#uiQq(DUV0nyvlJF?kPiDs$wEl(^I@DVtL{>ndQ;FpM_?n>D0G%N49*)F5ME$N(BCfiR`bzrAH2mj<#Ej`cp)u z9T)$xkCKb zS~?94ZO%qUMun6^(&P`c!^wp4h{C=BXzv{gkn!6SpT66#G?J1%BQ?~60;bX>95`RJ zj?xTIx2^`2vU8BDE)Ig-2dNI7a<)yhBUMR1I#K(Jdd)rBM zD(SzC5=%+mMbyewz=OxXmraI&E!4uMdo-Ga98t^E=Nk3=L34vH41N^fL6Se}m>r3F z@7Wn&io}jETq?mR9s$s`r|B31Z6Zc<69BxYR27ViQB7Pld~&8OZ{=v(=~P+aIWkwu zjvnhi-QOBDTVwAU^&eaN26h^M)n)ojykntyTnB0;YVf2ML{^nhQxSPjL)FN-g~k{) z+JfzE(a0+e*2)IUR03`w@cSQC(e z3*?bWRXTJ}@#Af)6JseJuHwAc42ST*0G3c3H1)3$Mks#T z$CbU2Jh-j;wjdP0KSmX|dNwRJ)RIB#-RZ8q<@rrhikxd6yuvvl(bSa3L;sDn%#GZj z@rS8HUop>mjqy(ys>aG)o(m8_mnOJGuq6PAEJ@T*hFi_+znkB_S&j0p%9uZ6FJGLd zXv9mh7_Ae4-YqOV7S%)%z(rrxr-w~=9y2uEU^YAN35`mcmRAVva1^j#s|B* zd$mRbXi%QTlels5kyH5{hM*gJ^cE>BtA9yL0PABMA@aP$-MJ6qFn<31h~+4`-c>nr zs(Wphg%x*ZvGE^N;RB*_9Tu=U2vFtlfdI7VNkNf8sejZ_sa(Jdy&_^r>>ECVq**u@ z@re1MJu(f!num(=@)yA>E#cuPII7dA6P4Iy1Uwl=3;AA>^WiZ+h_$ccLmIW0*nehI zQHL^h6rlx^=>;OX1=U3SKUQWOl?v%qC*zl3D+rJ&DAb)YOjFS9t;tl=Q4Atio(&r6 z+!eQiIa}%f^G-LsMfENFC!C5l_Rs$!v6_Jl;`xD~S^$bVPm5^_f%7-!1Ic4)io7-U z!GH@|A$z{TJN`5g;B-!{1+K<)f}`O_7OU~RVbv)J^)nvDkVb%2H(Sd&Nv0u&UpN&3Mwpo8?+B%^<7nvF8F)f!{aFw!Mp z!je31h4@r$l`z+)VS!}M+v@v?NX_r}Hi)09 z@{Swu5vIEd{GKB< zjcv0x!4czphQ3h9?zaGmO3)K0gx)eUMTZ7;(m%YtAf3GUX5ZrsR}(CsnIDu;44Nru z(OTW0YR~eF08$g;8**u5_1p_a3F79vF)n%u*)UPFQ$zIQ>7OKaBQFX@t)+TO2;+YI zj%{{AKdf=+=_|uyC$PLDEUA46yr#+|-YrV0hrgTKZoBkD;#Lun(XDw;CM=m%50Qz< z{u`k^$CgdlM+%4wo&b6UqF&dI$p>yecllmDYD`wCifHln?JLacY9Fpn^$e|@e+uIY zfsGx>%bM!l^Kr#iR;g6gx%Gc`BLB=X`a+vgPHJzL&q}v=@z8mq>PHTBKnysLDUUVR zw{kGn`8_n2ZPWK_hPMRbNx6JJe)Y!!iWgZ)Um)b2MTB*f;mz#Nj7`>Bu@hTsr2X{9 zv@@$xvoq!%hr+m}7Ej%cl7Oseb8%x0T;+`v)c>7yxUc_#@Nc3#)vkCdB`5_`_lrNg zV`H8voO4*x-EQZo&$ySXtkqFz74rqU`1CI<$``D%DBqLWT*n~CHf#)jVF z@AzC0u1aVeEaj=1Zht-UAujyG{WeJ`OYb>s07`!(aw44%at*AenC)|{5|&J zq1hM8@{}X#93yj&kG-E!R2*B}05y&Brg-s%X@>FQ<{5x56}uj+mL0ZEdZhGr@{MvE`u!f=K47ZBkCKbVpjt}47 zP6VPP$I>OYK2$sgdU#GJ=_xt@F6;0>wezI+DUKgX-K`K4lcp|b+McIhS#_68A%4#n zW@)9yI(=^Wjb(6M?K2uUBL>B8d6tlBB_*Q*4XBCE&^lC8gPBvj_`Pf4YE|d>JOgh` zyOMPhxt7r;7530QacGR?7v?4g<&@*r}IbfZqb=rgfxc+*7W!tLc` z%s^5j5vMx1_1zA7A!@6C%?}G%eVgMtYKJz<5-%6VLjBHEY@REB9}}_?>Ahsc;|aQL zmSFcCFiT!w&$6vc+!lvLM`qLaVd;dsrKOaHi21Z`);W+=j=w!OO0(tVfR( zzK?aXRY=28(DF+=bQ7V$x1`MXkA$_H|3q$(El!UUyqru!HjeRwtp20Cj%nt`&Lvc< z#c$`gcr_$@FJPUeAB1R(r3h6N_QI9$I&g3C`s9~DhMSvHcjl^}(rZ7vcD{>I2WFlb zw@zNpVo+EAH+vo&j?{yv<`KA3 z0wvoL22|z~I0s+5LXq|T@a7}&;d4trBU9z_1+U(@;;tPN@fzxOAEWkePuTkLjmVvh ztLMHPN{17O`!!T{ZTmgPoP7MS3DJf>Qq{$O+zjPk9)y$Y%@COxqqJ^mGY7#E-s)Tf zGi~LTaBC}cj*|1-u_ScsWeu;E7(dNm1V~Mc%@z}8U>SN(v?wJ$T6N=2L5JWXXqxkz zfPFsa7lx9JyC zJCKMO%K<>lsD%HIh{3uo#(sRq)*0u${DyG)tU7OMZy72pSy>oCA3w~{kD434tsxPf2)ERHX#AVs<9F`AODRw~ zQ}V|YUZ*dX-(2}82q67TJoS3qL^Aa7+!@~32j5pu%$nPV%hzp(tqIn=?c&Xo{}gBm z^DS!sI`2~@dTZT1qtgGxO{j;YX)dyH3qn}3{Ax6h`0VS@V@6(N ziBpwmI45!IW}lQgHx0g2-F>0q$|@d`9_9cJN-JCTETsR+*gL-rDNXkFl{Giu6G$*T zEpG08UDM@LEV;#%4|V}re!J7^+b=qnS7g^vwRCcp>Vh#WBL`pa|Eswx|A#t{|D)E{ zj$_+gIjYrC#@&HsON`o-Fv+AGg^rDu4rB@0YN(V@N^%xqil}TUMTlxK8;+MyzafHSQubvO`WdE30UFHjN9n~iX#$nRtH?#NBQked#xp!7Kpz|8y#!Sm0{&i zR?MvzR3WSF^qyy^8kY_2Q}4BjdchEZ7? zEoGa!;)>x1zQjH3mr+={;2izn%s!6iM5Z}aY=lknP#Hl$R!5W>a5bql*>8`$fbGTGsZRYbT&UeY$^BMcIio?xA z+|w@z03)`5DfG`q=^rLA+xY3G;{dnEW39dy-0i{dzh2SG1~9W!Jv)ZRH4wHuy0B1# zGF?3nX`W1YSA-7Li8+eUB#QqbG(uk~sXLwuU@~L9Qwo!0WuLAqo-3(BO=`=ES%qgQ zDnzJlq;cii6+P=epET^7#h-L$PxN;d17tUmvQ@9%0ozz5np8z3OWtccaP?(U2C|br z?x2G{l+zINKqf2dFiaLzL@H1<{!ZtBvaZ8KT3Me=bh*EsNV)=+%RGleuii%0A z2O>T$99T31wIS6el=-W6&~|gATvR>wN9(bgSC}T4P;4s^0RpDm-70bM`GC9J>~zD_ zQMB8_eV230%HQ|HAd@3ppshDA>&G%wRwr#HWf{vYPdBq-&##{0ZLOrsDUQ+C zrD2j_33Wc~+bw(&vo_;fR>51cv(L}EOhpEQznJg6$E8?&}gBAcOr0o!A>EectV~iz)TZj9xJSlFrjY_P|c9_}W-xf3cQwiD# ziWL=)ajJP*5>AtiLO$ElgkuN;82`9Ef~0*?tuZe$&zj<&D!D z*mHAY*m`WwWTB<>SQ7_r%WCozjEWSeARoh$9 zM6|RxU(DYciqlujD@Ow$Pnvw#$h$TQOkbctnMR%tAy>w$HsN`yxq+TDF2q|4(FX;Y z2hyAUfwu^6h7QgL{iV})KT*G?L>affrm@1{8mxx?Qo6D)nNVH`;V%`~RS7!Aloq8q z;>*%CQ-~jT{-*TH!%0Q?$v2m@AUWlvQt~8#i8#29qH(PJRn=!f)gEz}J)4_xSVqs~ zuOrmL^2K-|p+{7Vv~iUywubcE%3e6XMh**UJCpx}+e7pyTGy0N^L+!DqNYk)$%o^R zkWSF7+6YZXLm_xvWE(%7EEfwS3BSKEtbw09PT69lM%9IXgp#sdebfcc=!QpH)||zL z3c8&jynVj!HI4V88irv00;~jnXf4XrR4Zv>G)Z+(WV`N0k@l+h3TfRSNM0zNS#*HH z&Pf)sif{LG`~-dL^ayz#J|9XovvU?1WEhT!lYyS>giE|r6ohq2-lO1WxH{wnX=RX7 zO@Xrip5(Z%lErrH^s5<+GFfEh#l&`ST`{p=isQ>*slJn4TFz7z@ndqH|7ouj`f7$QS{0Y1(AY}4Ox0D!KFYlq6nrPV( z^{fRSk;~Cv;P3Pd?X63^kV*`{)=qhEYmZ3(AL>v$2AS`DD+T|%aKkT`<;|@X6shoY z%~UTu0X2{VCCd*QkLU2L67B79Y$cj(U$3w)fNHxM!;xZrfr>-8Q6a}h!8tX!Cub;6 zsTS*9p~Rsv0%0@fpuI{vF}^oMh86ZJ4s_}r4Xsuz8H5@{sPq92H)Uql3(9A51-cff z#~*P4^0BKc!v9X(aBHTq0--N7T*@!xHq(I557aVR)C%RbCq(BDqUyccOeNh`H|A*w zRO(F8Z@7_%Zn1rTx%>$@gKWj0-^j;I*@E*%xvn^GiZ{)4in*YhQPhTf@2M1aCwsN_ z(gUvWQ~dMee{por_~tpIwYK>%ouy^Ye9}Z6qj^;YX85<#4>%pKPkD;{N%?mStw5Oz zBPv-IR+o`&(|Pj)#Sa(r76lS6*rT+`TB;V+q_8sn?M0i$X%4URiFut#xp@TGQ&znx zR|cmmWiX?Clt+S@pDef9?x{OK5Oqnult-iED$pwq3}`e~}dY962jtjCl{No;*>njUy$f z!W0bVCq^5Oh*)({s)r@EcaEXZw5R;3w#!*Xa5`f-Z>67haB&`hTd@W5wF}n)R<*- zYHzQ^=cNwz9Y8rN@OI^B)Z+6~-0uV__wNJynoe2r4kB!C2YH93M*u@T`Pl`689*=zRmb!+vNi== zM&?{s)X@g9KHuB=(94f0jsfWiB<2V9WsY%zk|#rz$O4}e?g4(Wo z>IJoCuRDj_6O{mATxOtKavFd@yT_l-PLFUr-G;6wioA_;!3B;!U&5@|bi*tg{w->O z81xo(3k3^T()<9rmB3Fa6`+R}{osl-pL)=1IyOFY>Wbx97v))f=ek~y@)8{;Z1hDn zOVrmr!`=S`%w0Rh<>T+h2A)|n0#O$92tvR{-$hk6gWM;}OW*^LauSy9K-s(ukgMP8 zgN}tdH44Wab1xX4az$cgdtk}PGqv=HhUi(68%a7gYOSCWCx3uB9ZXG@WooadYkpVZ zKj>%;T0b`6PW=q#c{<_OdF@6>3ZMaz>uq#N?L#SdwIU2SdVMzRd)9;1OE;&tnX(Gk z56AN+Yi3AAI%LT@U__eV!dKF!OYUt@lH!Hcb!Kh}8T|wuhCG@F!%)l2 z@3HB{l=wn%4iulGw(B|`m)OOtjrwXTycl&)(B>PjeQBD2J5IK48k)dJm)AM1Oo1Di z4#8$_ju~s@NLq~E*di+>khAm|)~niXnyvX^=>xDlGcalvXxhD630A{G zPD?PAoI+Qx^-s|97neMYzL>_#QGe!hswp0qr!66%i8j6EWY~1g3<&GpQU%nhT#B+< z@+P}%-F&7@S|CPEu#@!5?X@}t8FqK-Z zn@(D!RykfFWhV zLg^kqhnx;m`7=U;(Y4v>JiDI47u*^U_oq+^Huf|B` z>3|lC_)Bg`cz-G^g8|ZvIXA}WQ0l;$Sv|5kMqQxD-WKud2@QB4@loDm7R&ESFpC$J zS>fN--iC!)bB6Av%p{mA5{FxM;efqRO860mnw) zPXn6x0u=%W{=i9cL7)50G$Os8TFDTb4?aEc_U8R~RHhCA|B!35C(mm<5aktr`fI2V z@;)V&$#~h$efHx3n)AC5gl&XXuSn?R9EmX=ztMcjjMjqCUTQ?ud}wur*Y!Y9h!t8#d#E|^B$d&18!idwvMiK~@Qr8y5NPN|IoSCz@)IWYOU!$=j<_ZC+sG{sB@w#Kib zAj;2>kf@L*0R@uQ4gXhhI+ehd0#b}@SP97%6D{-x0AF-h(P$MSQuHO9V)n_t+Sh@P ztHwvu!RtC;=Pe}V9B2Fb3V7upa#a{o z6`aRhyp6acOa!G?9{2ML5r!(cBIm>Oo?*!6K04R>JIJ0+f>JEVGcGHu-E!I%e;Klu z<&uR|b9^?-(Fts<(UUis&1_M!lRk_(kLa9T^utGOB00KINSjk)e`|BIs^aU zBEsZ?>_6)SR_SUjh#R5VB?n1r1ja#?+?BUkUO*Gyx(wQIWe(w(!&k!$Y>4~Yh^g}k zqj97(IWXC!nGQ9laNBJRV?aNQCq%tiXnM{+3q)M2i8e)EZwrAJ(=*T(l0@z1H_L!g06_4 zs|idIfJw1%-b9wJ?)VBx-qGsyXZ04P8f{zCxYVi%mCX$raK09Za0iN+ztaW8aHfcs zE2vTi9;flcHX zLe3VVko(dZ`X3NTx#VJ>9*;o~5ZxO|Z_`Yh4}a=1$svG3cPXk3aA{530WLcj8ii{0gO0b_fV1Df)oTn$jERPz zNQqpI!@V|~G0|9*xeXisjU4Retvc9Zi@`r9habrR7FtYWLZK&-0ZDIDJ=lVe zLx&RED^W1?zs3$Xp(bVRZ^;4ebg}|VL_)Mwg}|YU0l|?3o{WqXr9q~~t>|3BQlIapHxF-$>fT!uw5&MphBpD2 zh)XTm`UDev1&nDGP)1=#d=u?_kP}tohWe20kkHzi~ z=|p2}^pCJq7SSo(4&orO4(OIl;?j z;$NzOf6%BYMlubH=~RL9I_cNLyJw!#d%XQAPFX`GmaA1#?Tt#YP}NbdgI&0x1xS>0BlCNQx+B ztpDpnOEZJ8Ol$v-R%}&y;T(GYRR6mk^?WbyP$+pAF}7Km5;*QsHyIaZ^7VDDokq{g$lgKFb7jF;U^iZd0s6$vgaWws83CFJd*u;-u0100mYBiS1#Eizem7nyJ)2$?9k9 zO|1V(FqMcF+U+#5CR$<5TJ`adS&O@PR>Fop?72?Sie4>;Z1o?|=+Rf&>^>!f@Tsrp z3`Dg}c{apgwYPp552T>knb?)=^aDikUpq^)5IvC?Rg_pxPGnkDl!myN?GeG9{I51x z_{-jb30mpYtJ6F)0^IW|46&k$aT*R6)p75!s8WGtMuO!JnxV$k#+ zFH)Q*j}rdtm&Mba7ns`;Lt?bT^t5;p4u^JjCEVz1rnV?Uv+m-S_Rl8S)j3?h<~&;-dC$O3YdAUWqC8Jf^amYhLS z3kXPTa+CYbjsCuSt6sf&x4!%Sd$+4j9S*1Iy?d=S=Nx0qF}L4SIcZX28e$?MBGN|> zB@~H>PID0v9bGzo5`Lrgy0;zvC15A1Zl`2zWap@FYe*!kZ}-x|+RnoC`4tC4Ta>A_ z)jf93JM6r-ub9}`y+jFca9IA=JJ_vljX9p=UsZ-rIrH+N28xJ?`U3LL5#zXSxYl&; zBZ>RUuc8=n`*KO4t>_DJKqag<0*h8)ji6GMx?*19n2h|S3+ z@#{#ooAA3ay|@yN*-O#rpQ>LaZn0`lWWQT2-YctEeNNza{GOnWeVM~znyR*SO<{};(r*&Y2vp})BPSU zwH~q`(CHDzk0^EDmAWh^y1%}TA?$O6TaJ5Cx91I(nr_PpZ}f6Gt^TrW7~v-;tWAyxXSv--^;6?lrem;eV%qlDahiz< z7uj2`Rir*eG#%;uZZ%!{=GJ*1o0k9HSLhRHdBr1 zY3I^8PN52pZ@oFvBdGf7ZuKLqjIPV~t8e&wli36-tJTJN3%$s5KF8tXA~L5|%#c2v zrIaSO?J>YJZ1K^ma-~68K|!Iw`RA6N2487dEun2PSX4w$bZ=JPqnWfZ{+hYo+)*Mn zy$XlLRq^H_*Nr~4*L`URh9R>)R79J`;47T72R8lBRp|g$d@iQordF8xuB-&bPe;o zoLa|DL16jov7YEl!p?R>hT%FarP995K3fNQ)jMYH`*;kYtu|^dF_+t)|&h= zsT;n{KU&x;ZsVdbyQ8?rI?+^Y2aNUnEG*vxa$N9BplT2V@=<3puNq1gdh3eB>L8tt77fZ2pdBLl9c?T-;gM01IHXP`s zhi6`nW-t?EH!UYiFc2MnH5rJijV!mXIddZ!R+Bx(VaU{pVD@-QJ6!GD1VPs#X{^eH z+HG`&z{Su_?Ycb`&c7_Gn>yFGJ0swvuc_Q@V3F1{GeAHsAXNXv0AyJJFsd{&Mgd4 z6grty@DpxZ4ztsjw^}w6>%zW2&5OxctB@e^e|4UY%)4LRAW-Nwi}=J*7M80Mi7YH? z6BE~2NG4v(7UlZlUM_z-HG?r8cz5QaZHlyVW!(uCpN7TUO(s& zi4GnZGS7=?mTfa&-E2vVb!N#apN@2LP5!51y;~+gH#c0*ogc$d_Vdk~%bE%4H)BNH zoQL3$sW5Qm!`+F*#WCN>9b~UuuKC<9+BI=q^QQMqoQH_$*BJup>ycB*n~TF~^SKr5 zveA6`z4b>t|5XgWzOwM`aRJr@27GL+XZIfaJFxpQA&OC{ab4O7%T?2vD^EO zQmp$fT~0vQ%zb^Ru^pP)6k`)AytE;rzJ561=`=V~Md~?V=pn6Hm zsytn7`C&BMCC%72do$@SlcG?2 zuJ4!k#2?jli}(W5TQa-iy8N#y>gdAWb}QeLS^09Cr6938yOa6WX3TTeqH~!!+^5*I zlw+l?Nv8i`2@K<4S?z$VzenI4aTvBtVOP{B_VoMIL%wiT{20-vQrkS~)5bCOs#Erk z$3KZ||N3a^L+_BT8h3s^@FWF!)Adx6oGz6xKZ#(BD^=wi&|7 zc|zcgQRdDCgR!jpA2^lXu1P+gj*8gTXt`Hj=G>04|`|8i=oP%B#XQ_Kf7e>2IaoY%AK zl3dGI8$8&cci}Fbft37N>y|`7{sY2m%)v&U@#Q9pM(Op%UC5|HjJurHpRR5a9!{!n z?6xh6be`|R>MvNc=9WFDx${iS%mP)=kzLTt;v_ggHFA*>yS8Kr86&S5U96E~Ah-E>8IoD*M|lx`+<=1G zdC2H4)Jx>Fia5$dtMMCKmp930Au<~O^-(^E zu)597imP0cn<}dHA&Z+@hXn2z>yVKW7P)9^3FyRW>{VRoO_>C3g@&Q`G~AiCkseUg z?*+!)(SN`&Q00R6H|jDhtU*2E0pu^xK)Q(;=Faswrn!~P7y&dNoAlnHJSC#nZj`FXv? zqP@kV;(G`7i}wIFx6E&fuyRWX;9S!2uKy8KN5qg6Q#2-^Pym3qA94{ANv6@LPt zlwzxJbcwk**RR2yTE>H?8bMHozu0cM;YY(gCTq&h(F^=?D_wSM45DW}SPAxMEvno) z@G_Npe<@^!)dI7%wBklQT(V4C$CHcJAroHjY@U*h6)Jze{PSCAi^V{$PO%$@t~8^Y zUDYuAX2(XqR^DnUruP=yPB%n~pTkw2az1$K4T3x~(U2W8jGB?vIXD zE~uoMIg>NLMm#11d8gMNj*nd2wP-^*?r{XKJ#l5feIv*(vnLy%$F*I0tOsGg*%07e zR$=ktk@#r9=$67Y8pbgy8o98jMbEA1Z0gASmTpW4T+b~espT29>+#RS9H86Xu9Vn+ zx-rexs<#no^--25BLd(`&U`iG?bTvU{h=~4fAiIv4c$tss*QfLHLhPGiPbKPHG2qF zWzD-h$&mk&Q4JLrh^=~=M}^l|aZwrNrJdAVoe1E_Rfmeqf@>q5XWhH5rem*CylsSc zc66W&8~%Xy=ifh9xaRV%>_)CLj&?pB9h0;)o*2NM=}3=4cet*8zd?zl?P7cCT>NCk z{-U)R5%F#$%nTje5SO_UeDdAa`5UUpY5+EA)y8`dI3Ag4p>2}v84Aa%j^vQQZmqxUcQ^W+OUa$yc}B< z73>MTuFGQR!0wm}PUT!cz%*UGPzlOI2hO`RX?~du5>y?#Embd`@ZJVh z0hm=KmzCwz+>nDp(5w0#V$6Q>qmQeka(!4n7TTTlStT1>6@HpFd8>V;9B9AO9(%>Y zzaDvf-m!2{gm93Fp040L2o-nve!jaX7m-1Slxz2wj7N^D9AkLCPp$h(e~Q$`H8*2! z^Sv9NRT=T{z0Cx5$8jm64q<$>>4Cc5aZQS8%!EJd>M_Eb)17?y5fm$+m`by?wl+W! zUY43_UMg)k5kcN>a5_gIik)5^r|Ub*{==fMjm6qza^H(uH=W0Q@QZ%&0Y~I8%32@$ ze%~=flIlBUaefD7yPlU}+hd(Z%~riZj|rh&0Pm_n0jmJ$QT)GevCJAbX6GIg+4-I1 zpA;m3)RO&qy<+w>&i4I60Y{z}jI8xI^>n_h#gUUlZC=jry8EwE&|Ir4#*g^=bb8_N zQP{oI)%yn8r(z&uhLX*g?YeupU0Eugh~0(LlC=fF1J)})E!KZ`h2l@Id?=h2q3x-EyOW8R@|vZY z*SxzllgKF{^o8Bxt;r?wU8#h#D!2_JW35&{{xc>K!?>qd9Qknh`P=07q62y!Zd0|* zWw=qJC`*=kk>{eB=16q!0qg9ToDdP%oHDtj{OUJjqtr+o)g0*@iHWae(ZSBV+L8=t zDF(SRzEV`2?zN=6+4wR3YM0|%)JKyH4$^sV9zT&&+^>1>1X-J@SnWb9_PiHr>R%al z4V+#5X%pZ5!p@)97}TZR?(0`b#ymN0qe5Dg$q}zFH)lIB@?~$eWoBi?MP$8GJaku? z?y7>1(rE_Y27Z)nE0=^0#!@JmLuf15c`lPQInj0HnebfT1f8&;kqQ|_qpd|=jrguK zgVT#tQ=0i`Eo|{a@p*K>zMxc$@wkVr<-pa>3#UzpjIx*$jqIMcsrB8gpH?O(r`|qx z@@&)OWa4dxSN%oX(@_Jv%PH*SA=+5ko$NYNkG}MuzV1O$DIetoZedSLJ-hFgTeUeP zq^B*>=YYC2!F`K&e$kL?x#Yoi&ScqVo^gIC%X4S~-rCtg2g zVy>Ki+fXB-=kK!2Gi9z3$mfM9->KD+!H0Gj9A<$H1iVbaieKx&T8=bNLZKX*O;TA30f zdp7uIVS@l(b(D8f%FV$YZaaG+)P@)9ipps*$wqk? z9OwEp;W*+vpR*=Je*P3uTj*iLNO(6!@b-(QO^iQ0zSm$oQH|m8+6@`X#bqrWv)2iy zEGU)S%#Gw3eD+p|{Y}w4`dn0xd8PMpuDW6iZB+YQB=2TzS*dli`S-H4tReOIpFQ%T zIcIl#eYQ{qY}0kw?gOb?=Qj2kRD#2s<`jnWHBZ0ty?rjQyn{khvT+_gpBrUbT^7tS za$O-1yMp3=-Fk|6r_9et|&saBc z_MErhFCqV+Fo>m5Y7_gAi7{l-dNiVD4PvD|Lsp=DyXAXNZ^gYJFN^cs_sGR%x=MO= zbcxzz)~8gltUJ`^a*3E6MBKnH9(}sjAi}4Bciq( zoG~wKpfOJlRn@$OpWpcTmQ3{=BQWns03k~R93o=akD+(SEY5lrNE4R22DB{`^GbgE zWOsUKS@!FB>^GZc`d81FKt|qkS{TgF7(_cPM($>itghW zJu1sSaxl;5?B%;H8;g)m%dNjh67Nd;iYS=J(q_tC+)r&-;TKFK`%zQL=&@%L(?jpE zw~}Ew{F!5zcz@X)@ZT&1OFGZeTvlE?E`J|bK=H}YG*0~MA=mXT>Cm_&LQMk~@9vZJ zJevJ7@2!IqD+Hzz%V=?TAQT;3?n6bUv)^yTwZ@sp8ca`*XsKkECSb4&zV4sJvjumq zSrNlB*cY3>tKm<3$?h*AZa&XZmfyY~m_UIs*u&;IRT7DzQW+AqKth_Y08oFWEu&1A zef_oWfE&TuV|REY&vgsXh{`;d4OVBMN^;yib$b8R$S}oH2mwbp$ZMbfl3E0CaN4|G zga6kD@zp9fC0&`Nq8>R@Q1s$VUyUf`0FJqq)e}LF+NGb{6(+{N$&Y3$8GN3)V&mZg zP;RDUvLR501G8sqcAIz9PRSkDlO|v7k#TEjQeJ4K?j+lMdQwpHhBf#81U2R%y`V#D z+&rsGZ*4CRp~HQ%uxQMAeyW3a?3DqFw3kbqcmKt`t;yiRJ?sU15^62V3K*0r6p3il zJ)yPMkEQnFt&eo%#w*F~?NK*#n7D4+l+dx&cEyIV@Btq%0+;%@K-`rKR6 zUCt;FCiHw~q{wa8!P{{v_f< zW25Au%sD_#mNhwnewjc`$>v4un|?Z7CLwX63O|-bw>g69n8Kfq@FmF}Lc}Sgdyu#G z+}276S`4AoukBTWC|LZ>!m2Xu`!&+qohC~&cJ`xc5KwLhQd|lgeTP&Z=M#wH{xMsy zc@8blkOepAaN!OJM}Is;KhU`;hO+3k4& zD^+!UuVy!n)I7GA2?HQE*L*JdJwgt8<4pG)p$W!vYG$b|uXb5-;L` z2g?uM2N1`nzjuRpSi=W<#@vW~#q0*+c6m2&+54d_2%<7zkg?Y=`fO`T5g#0(TFF>g)})SqUH^Wk*-1zIv%VaEyRnYMi9W|FZWgLW`KR z%00^*-B1~J+df9h;19@A7{pJgXUUA*XgHw2$UI@h3kQw^pNC-5Q5%){B>aXY@mpuK zMN$MW!+N8eh1>AWp!%JLdK;Ai8%?u6r&wY#{`93Rd9FQwbT|LLED7lcvwN?Wf1YGB zcbK=G;AM|KwF$(|8P|5TjJIF;k|9MKF$h;>a_%i3)B>G4b)&77{AF{}iB0#9nviXq5`g z_|eur9X>W)PD$o9$t=i{keSP&`Ib6ye)6@p(0R+u^y&1yOqy|qZ|wQ<4Wti+Ox`#B ziX0YfrhiRMsxZJ~{rlJwx^<~qEy7){MPWchaZr>-K(=lFrlwkbdA!-z=E}A9sH;OH zlpnn;b+96LD&}(|7xh82c}&_Du`6czT#v)|r)L9K>FyKdmoY9&<^0c>tilY2sS-Dm zR@2TGEic!S&HPN>(!Rv_?VOhZnzOws(CK#HwF5G#`DjGCuL31uHrQj&z`g$9GS(O* z<|a1MNnC@r@tz12mS?$N{Rrg>-s#Eg$5pwf%RQ_@=NxYrWo9~85)q~Jjm(iVYe|f} zZEX`@`cYn;E3h9u5xpq~AoL!ZgjZTf$$ zF$fms8Bmaz^u_E=ag?(soPX6FF*8!Gl8IH&Im#B}c{0Aw@03Caac%(S_z?Urm~r2lm!vS`()0JZr{g@q7@dsA!9-42ngwM9B9pU};p6%4i^II1&dI0jAgpbk?U#2s2;O&Z-8A~1U zNs0<=>O6n>V&bs3N&ZF33tgcPE1A`;deapG`<*i~n}WzO9(!2-+hOE)X=!;_tj@e(WQN{yflKjP~wF_8BjG;bHf&aTqn7%nr8Rq3sVyouLULra>byT z1I7IyFN36n{l=q2Q)#`h;ImA1#X8ypJf$uL<>ef=v@1Fu(MuSZ$>EQ;>4`C^&Yw}j)Mu{5)oFxreNjB1Xz#oH>*$~W>iBGxMNpyz<6kIKL zj^k&0uXXoJUX$pfqU>TxRL|Uer17weYPKrT{PlVAfUz_suv`9ox*qRrva>y*JPe7!^w1|j<8tQjQomam^ zisB%iImN@y<7t$MhHjakHk4+?@(gsxKrxvF>sD%Kg(I%{;nolS%_wKa-=K_6kxma= zV{{yLpY(ZpWsb^HNO*YLtkJz@=^|!Q6mKXmoi3Q(9MO8LaOV7Hk3?o>Xi}1dQhEgD zEMt<4XvWKh@x1FJIwm$s19nI?4ZW*U5pk3#GF)-sszhqpg8}`n@K@qE(=1(S>fF4^ zNVcV6^NV;=ulebQ${PXfozv^p$xq1?)adIz-BPj*_>ro54u8B5J!W}}c-L$ssgL@F z^6#PK>1qK$!^hdYntrK;L*Lgm)k-Du!MJ+1wYI(%_j-lT&RouP$yj#$`MN$xcaRdJ zU{Aw$8rlMzj&t3x=byUL?1uOqKucjExMAJ!+~1uuPu@_;kuiA>;{WDMCTZVXWUlfd z%o8|5O0?li@)6d>Eo@&`RhI1Xj|&r03Hfg>CyL@VHfAZw8m_jf`HIvhiWa`X?oIP< z?}Iednzz&Y{@oZvCMtQy5$hI?w5&B}_!olRu~?$z9_-Tr+1oIu=g4C&Rj6Lz<@gJT&4S zhu4anCnJ!A9`jl_IaSm_@rD}F%9{OqGLMjkv|V8+Y2;ra9N-A6U%+}2ugMeHz=x+2 zPq6;3u~Bu&%qYzCtilm4n~6G2);>59*iMwAcq;2A?h;03+*RRW%o!psj;W`?=LaeP zsy&|)AA9wcE9+FyN+);sD{2dHm4upRUA>ve6Ec<6>AwwD8$+|(A)|Nhrg$MX4&#c5 z7^}Xythc`CKn)!d-Y`Y%#a7E0DU?DP_50m2gleX)kUx2vUV)fp*0S<9KR4A~O3do` z{Wvd`Z;2QmB+J&Up_S^zS6a71?*NEb6XQbHSbT!L&S?&WK$nj=1FuQpB`<$_*Z!2{ zD3R5stD(a=nK$)x?2`k>f$i8E@|F~4w%nRQze@$N{6#I>acrMT_?@(w5$}Z#FH<9K zoqUhR(?&O6Sg3}J$y|#+63<}J@cuhlBXfampNd+JePo&XP2~p?k2A^?Oj@n3BmMl5 zApu2uN%N&l-qn?DgvMJ{J$G(y&aAu4yA!~ZjT0g!P?ue57r&+>X#9@ zvta6>tj!TBHkk*XCVj64rBmh5Q+LS=Zzu;51@%tZB=toQ^Oj$gdLNPGzDK-YT;GNT zdyc|(CmZ^*FV41K!#Gq2V+0Kz8~5LIY%foe(tHBCtg-0L7vzH&5Yp}dgfxiCrXyFO zKf=wlxi7;-WjFuooQy$4((aouu?$p6{Y!lk$^{x{?ylJh}b3z@2KCv9XD?#miir(&N`%UtR zp;_otJoaI9e{~?(uk^b*hjaeHM5J)R1F0X-H&}{h%6Zv_w9=>V_O&{zrN8wxAA&Y% z`RZz4+s#6kzuqiFTr4_D_3iOGH^+1#g_ zSCMpkp1}I`x7D4yMGXfuWbdz@7GA>6H+!nvGX}7qB-XKN_v34rWVpHHg@6;~$2KAX zKMMxWqL)`Ddus53W#j65QH;?P@al|chppxD!f1CO(Ct0! z&}}c&$psCCuY(p>c){@2C)Vb{r%2w3ok1GSs7RzKWBWq~ZI_`AK81NV*@!y{&m9(k z)r7WiRHE(YRlADK2h3`RN-VW(pf%Tzeh;Rt%;!LIGI-qZOQWpL>%SGcQe~r>^%sXr z<4nh3BXcK=MRzr(xE6GHCH_+I)7|yBthKApVq33 ziGVa?ds1by_u`k^ zPakNi6QBdBZn*{Pp^*=er(=DTq(um8K+_OfS^ zGwm^1mbfjQOn)3CXUXx1>^#?xH{^3iPI~PZg3%%`DOd#E??j7UoEyd)ZS3|tjAc2w zmqX*lwwz=Vv7_y=L~|@*2nPb;*v>@_y=@R#ay|!PkhX8ZS^F65v>l^~FSJgWI%r$` zQA(E3_VlitP>&jROMQk&^3e|PDY2$|u=pyLqhJ_$64MeHg|ZgkZ1YZ^SI^q<;M9!~ zuy4lL^sUW34`5SWffi6(|4t?Y*@{lq0b#x`Yv4&^E$plMye$Y@gq`_3wN`MRgzma# zSG-(u2ma5R2FlVrOE@_pmJ-*yYQHe$5(!chG-qOl-Hayc{QBnHpKDR~)6Z8yn~B94 zzZ63V68OUZBYbWsNF_J{I`lcKgT9m3msW@;pYKCDb;xOfY*LX$uVfRaS{644@Qod% z(>NO}dZ6Bg@gOv>xcYNHx_mnF z*e)}kor8e>tgg&8I0M=Cm&uE1+#Dp$`+T{AR42*#X~}oURnX9{|FuBkb#o~*QBp$U zz0|z#>tm;;`&(>uD7%u#owNo7ND@=EYf(X<5qj_A!m|4kQ%5ykG<(w zr0Lhs-{mIlO1OzCdRY!cNRi*aY0D&rkqvJ^TZi{;8o%lBg5KA6#$?>)+X-qeQ-0<( z>164^b&LEq$Uk8oc$04wyYdn$)XbO`6^SM3$Qs`#!HbtdhC>dxHRGgPa`;lC6eXe? z%b5z2>UiFxq>5_%3nW^0o0QMb1V3LoX2alTK^&5k(y1cHzj#mO9=r0QRpJ#z8Y;!J z4K4{Jfej*fo?_^M^XPz1=cMoAWb@2xyTU6!&A%IG*>+UU0 zoTP)7x_jHFv_PAs;MRXuv>F}X-=^&%PJFqPJLJr~Il0A1JL)Y_o+zpGM5#FR5vNDv z7FP42lFQH6r`r1ph&=msf}eIm#&m6?_>s%J=%$Tj2gSEsjwv@F(a^yzfLy0UvUv~b zaHbkYJB~S(%Q5GsB~2M?2iJ2OX!A;6Z}@#f_`r(TCWi7dO`>2W;z~0P^j)MJcm|e4 z!*(9kwMgM5jR}#1UM2aqfdc4G4l{*O8U{Xbs8?=wc?0oRay*~yYK7QBUWnaO6!Xw<~P zt)Ra2mVn)Wbf18*iI9yeA_LchQks~_H>eei&(A~+T7^tqE75YrpzHAOU6z}^(zFCm z7QVz$&iMaOC_ClvlBi)H($o7~)YqkL&^S?qqxs@6*IiGElCPOR)*~l)1J~?&Q=~@q zM+Vpt$BIV~%JGvic)QC*uFpmJv!U&MZx@C9_~$N7UHP@8eFLl?aOr`y4pBXv`#shW z`UD8P^k9F1fb>THCrKdh5?Bg7c&7PF6E?nvlwX_sp5%UWu52=zrl+@cL?Ii?8B|;vj`0S|fK)42ykpOVVPgHPQgx&1|~+A||3*zQ2ohI|_lx_VvhH*(HAJx|tsHO5f+ zjnoOUWx_@m&8THvv9$7t^feX`ztg3O%>2!F!HLA~5ev?yb5tg`yVxX{Zeq$sr~Sn8 z2Iabhje0p7YNu=|U$d_~6M928q3#eBJC}qwheoTy>I3%#EK=ayhu}MF7iKO74 zCXxgQ@K0#Ir&Nid4}IN5PTV6BTT5m*l0GjWy7Zd%UPMBQUn^C}tvjtOv=+A{e>Uks zV%g)rTX)(hzW22l;_^J8`y3H}4e0h$pNHaRv?+#&aZRV@@Ru0LO z5cr8~!(TsrY?JGUes?y>L5)HfW{H$pc_;K?xiqv1W}H^Cvqv|6~9o#X8)gI79z6?oqv7}!!Pte zwg0@tevtpa{yGNfzZ8}Pd|Md(xW)ti*u63E^1#8;q-cb$Wek^Y9*g65d- zg!f*3`g7!5%J|^h3Dn5_75=50s>lue*Ecj>IYNr;zW`7n=q&Cl0c7hrN^<*yDoAtd zKB9XG{j)fzf<-G0v}uSIFaQHEJ?RQbb2`#RuLi-Gp_HdvwJM;hVHj!$H6=ODeJ8`O zn)2@jiY(X!;`O1YbvPpfFve;Q1~7&I2XsSy?*>{I(hi2{&#A#z-XV2C7>t0X`x^uD zQC4VEXK?s+BZC&~<-h*b99RL%V=5RbSOYI{G9zvwr-O(2wsqvv$#4MKRFst|#-on@ z-MN--k>a1NXAw%(gXkVehxHg~roWh1WXF}qZN)FwR#{4H2?G(s#`{aE|6Z3 zXJfV}&99p6KYK64b~k<;{Nrsn#K27>U}r+ZZ~LNn1yRe;bD3G)h(l!0ktsqSQc{No zy;))11({#$x0%!RLse8Wc=X<9na7@A`}=W3IYRN{kZxLWa5)zk%Ryz@5!y zKi6yb{aSc3s-6GFBHZQSX*+i6+!L(pnry5)yd?+q*-Ol)Y47QstZlQXG!fREBE_6q zETHJk~E&c1=!jv1ol5d%&|X z*T>2R%x@Nmbo)0_#13?D_V4|Eilh3RkYGNL8yW}Qb?oPc#xKax5r!$HzSQ8e=j^vP zhppFKO07mSb8Zye@8#CBTmW%nZ#^O1ekrkjPT0K(V(Jov~ul(fiCX4Y~-h77txM5U4GZEo=3L#k)B~Oo!59) zF52v>E9>8{XdsndTyA)fLS*E@qC{_7YdA{(fH~h-TW(^WI>c&n=tqFKWHplI+9ad{Y?sgeml;@bgz-6?xlSV--tbtEG>U*Pr-HNSUI*suQIcOozDS2XLpF*> zax3-kbvp}+j(YmwKfBRqX!4&MjRe!v-=F_i z>frxF)jTYZ5I^EYm-ioM1av0m2)UWLGY%YlRHROk%o?;vftYK49EI6W>6J9;QeEP+ zc4x%b5*&llOqJr6VHf9K- zoMGU)EP^=aQeK_hmGi6XNQXYN0o&vs)mnAKTYaf{keUUo8 zzl)DsG=#qvlevC4-D^VG4~3x!^7CP_#elQ*BQPk{nRVoB=G5MhkBvqqANQPsg*PJ> zZTCP(d-C=aS?uCATsgk@4`wPNZe(z=NV+|f8fDe|`uy9Iq>uM^Hq1X6BKLRCT&v{{ za-VZAq1MmffqxYqq9#u&*~8`ZJc*PaXE0hQ`JAKg&aGGykZvi1o9>2QMYK_CL$-;l8L!QVonGoB-!1n-s{Vzf2G z>Z%~eo1#nx*}j_(94{hHc1_1o`yROC$S`31>rki=WrsE9)r8+H*vn+W^Ya9z;N0Ja zmv%p9?GxAoaq}_E^TNW)KAy6g3R(+8pJvm`^G-E^pU#|O05oxxIcBk}$ub0i zDX6@-g3J+^5nD#R$bc&ov9$t^iqnPC-J2vGJR)1SAh7VIw)^!dhKQYw`EUWprRa*N zEpV1cRebS%<_+xepDIAevWgDy$0k894v$0-fqYKg3qg5Dh}RP4x>rzShw*QjN5Im zfj_(JcS~?KsXip=z-kNR%DI2Sto6YQIp1e*Q^GV^EX&5d1FQGIKy?@6INP1l6^^WM zTj*gVc%F3NCI4|5Y+^m>EwMb7nl#*I$_JHDbb03rkh9AVLx*y$0fz3k?xgwp=9dJ5#YntbT!W67%%TFJ0 z+o$0$gzBMXK!JQ~g>xQosEdoTT7rw8MD{yW8P6P(U zO-@0|5|jDoZ!B)YAoX6P4ip>Xw`uf1nc!eYm~Mem8HNDoAG*A7(IO+uKVSCn3rGHc zk^ukDhaihd^uJOA#x*-mw^r&kJ&?g<*V_)S1TipW9;aDG?>NGF>T+)pWULOZ1<*j`k%TojQjQve zUGE0(R2%}@?GWD{`BkZ85cb=-I*`1Gv=~8M7EKA{8M=w!^~2~#;4mnMv(cz_(*oRo ziWQqm0GWxe=Nl2XomN{kU_Q}P_in>9Fk<3-0-3s{b`tf%We~X2noBT)Fw4v~7z(?g zFBpzw-($4MsFBbf=(Ue%Exz0r00FHBVQMq~skbz_^$z@;707tPo;y6sK=tIkcOby> z(%W_3H(mYpeKs>IHf@47dfiQOCLet_o41w3ztgS@_B_ zWJ1eg2bBP*+PJFkEC3Qp=WzwAi+y_`jAEsMhwO&2yKgR143L+nxA}^WoP??u0@sQy zhk4i#kK*sngbYXASYPU8QFm8B!J0@!Yr?pjk!AyUUt_T_8>VHsCBsprZ0V|kWPAj% zIs+cRx(jYHt(jGzOt7e-M@YS#=At;J&v43%Bk->H zoCnOFDaMJob;GO*4KRw_2j@w9i&ob&QrI5^^gA{bDN-lYn+Fjl=^SNSY}Dx576(xy z+-!|HHe5cFRv=Ae=u|j>OaZqjW)`KH4vWvW2yGry0NZl#%!~F>SvqhM&q5cgWfFNT z#yW7FP|#Zbyu{3#JD-Mw%a$1dujQ=1h~h;Gt^p)2f};eAm#Fk$u*T9oc;Rfq9eMrg zrmZ_!PDWGzHyXqpXij*9l&tsWdXCo_HL*@@aJNAfseL0s!f>~IOOdK5zNHt&$aR|~ z1KK*D#<}nBOyT`5-k8S2g#QelOk^v*fA;DfCUn$cr|j)TW>0;f^;wS9HOo-IGS5_> z_%QXvB*{aU=rN*{>_A8wMoL`Ex}gHkIApqg4>0rob9y18x^QY_B>0?KC7GU7CAFPue5D01`?;2ua_x-xFdm z8>*v$NcO-GSPz`fSm?9(*ukHs`1|{Fxo$02MrTr~KYMKlTqg}_Cxa73&J@NgO+h<) z0=dm2610bN|N83xz5dq)(~u*i^Vx-R0-)CPK&Ztal;<#_*mcmq#JmuZGdRHNx)~a# z8dtfHF|~6qeh=mwoU`MDaO?(_q&AOs0DIaxtjn*~bBOog+#7Y9ddeOqAG&`xAqJUU zwf0q$6zk_q-qZumT7cG!N=Wsyy;)&9-E#{qrLc(c{PeZKm-T zFVrA_0(mA3l39yD2uTKp{!2|q4q~d=)XZfcV0QH4U69hQBJ)$GppZO*_>-%0-gt~C zH_iZ4rdNmIsED=nRQDd9g=~uj8Dw-sx~dc5g|#F<&Y4HWqm=kSQRxLZe+S?yAK2r zE}$kF?T$#+g1s@$9q@qdoq6UB0hof2S2k!dI&B@6s3Fs|BIp;+JRw~i&dP>#oK5M}t@;PW>gJ4|hfy@$xP~qtN%m+vsQZ&>0Lvo7j5ZSD~x)Vli zNBSgWLlT$}58}0(^zg1vH=wfzuep`4$HUV1$UiBX8*DmvuQ-V02{(D_%0bT?-s-ACk^HeBGL44Xfl47W}RRn4^DLT2I-7KW%Y&7;lq=2!-yRhF=^KEt3R<)L?JOMGwZ$!ee4$ zu%ZywnvK-n(gRd*3ttI;DEn879Y|QL6$vK3fa`zZZ6+I15S2f51&X<=J7Nf@EsjQ3 zJNi%kj3A|?q?`resVxpMm7Z+tDYeEH)ey5DKJx|orDmxsND;+>9A)~e8(65=8u+E) z6XLx)M0RiQZ{&H%!gES8c=li>=n=RfUOGd7^e_k9{uhZzv&lHX7e!!vNNWS2lWNF- zJhxy!!XW4oqP|TnLmIt?j8Gt&kSy}-jgM|OkTtbBR1)B)`tzU3y-8_RxADlMVX&u2 zX_WaFl0V8lhV8ZAfgFCAjSjXNMGtv5Qu_Iun9$x^;QCPl2xhD51+rA>kO1^yA`uZA zY0-S{$3Xc^0hD#m*zx9ZVdS|}h{BkGnt^Bf%;(8Nlw~4OcGU4Z+=E!w`6FjSG!jxX zYoAAcfqa(ZxB&bnpZ65_|OD5lfK2{NGkw{?CW}?`l^6t1DQ*`6NY>5)=_G@%TDCAc8teombQse1^Ni9^ca zeU3hIsFdST_J6?J)02^0W>@asfx!TeM~EdclFL*P(Swjf9KcqhuKDcs2?R!?O1u%V z;uOC&(6Ct;ev}b**?fWkB!TG&1KX4Tsr2#oro+l4BGAh0zT0y9<1sJ-_+6A2;za1x zDUM1ALntGaOlSlhEDi+UFd~*EJK%XUVm^q5*Wm&Dfk%b>?^pBer|LZagA#d2 z(K^!9f)Qll!x(~&=A%)xeU|;srE271I7s=1iL$H0Fi>TRj4rnP*W!dLITYmZsy`3}=x~3fAzvAs#HN|QXw8Hb_#m99>2rB1x zA>H(xq_y~91w&Ko0CZEKfCyS54_E^Cl*#%Apq3d^cqYPQKnsuH(P0)H+_sXSEcr>KQf#Cq_0c+V*koJp{r-MT+T$ zu0=F<5_gGV(m>$w)^5SAfxGgPsh8AC}ZL!*=okz`IONu^RDQ-#nV8PeWJiflAb zLNg%>g)&rVpwUp-ZBi-95Gtv@%q; zVrz-_5=q{&u%9jGxkFIYD0cdacuYLKS1mCqTQZ);6Za{r{DR-4Ubb7d>ORp<#aSEu zmB*?rILNKl+id6sl-sHI#zEkIGCCp7_=s)*p28%e;r{n!XV<_s#DC88h1pCvw!Rz? z3fuPzg#SbHk>|S2Qy*hy7wzx3?$3m?gECp)jU3Dxu8u=v7z~@^)ILv%+uQbqH@0G( zjO^yQcPYps%d3v*Hv8g*We*{dn^v|P?LtY#>nap;dYC4ToBr_?uJ+++S5&gW*%0EP zpeS%$xysk`zNI}l zDsk#DMnWsbto;|tUq+Q6eaZA6NI5NaI9iCgGy;X>i{306fV%hbmP`AQqvI_%ZM_tC z6Te8L2Az$5KyAd| zz^Z1(j`}wsB*;vbwK%B>bVsNU{)_#yO_#a9Ha=hq^mU9n zzv+)WCQIbvha21^mXJ<+JmwP=G*RfGHDMFcsY?Wt%=5;ZQdCY^Z`A)c=D`%}9wgSJ z>k%{R4}`T60`F) z@!QgaCT41izF3svhL7qvUT@2Ei|g}5{vDxN)ZkyC9#PXW=kbnb$x^Oag#zAD>{ubb z7t0-#O6tHf?rTcxaxp-5~M4 zg>%N^6^0RKM|wTHFv3b>LDk`T!w$|p@LTo!-X~tEg7B4bZM*UItWUs=OnI`QMBGxx zW}yc(u78am)%Gzd@$j^1B{?e~1K74xcSS&mWO}WCe6G-2$j+Ky>ejc(<-_0m0{(*# z-;~UNYvs z)SZ^{wni;2pg-`9hg+VEwsQO%hBg`_7geV3D+XCwgkGew=XmUAkDA1B7)_Z=BE;p} z3JI=x4eJi#H3EGTyTJs*u>0IQ0TL;;C4eRy=~O*G>Qa9)@`<@e?;L#VV1qn(slS1j zh$n)LiffO7O^Kj_r{u3R``buQdFq2o1}2MyI9acwz9wubNad!EgucO2Z7Tv)9pGOB z1hbXqJ=IY`hzdcCFaVa&-%>88%uRZ3m4ZiBYUtx{4Xf6d55e07$u7LDmrl)v#HO(2 zFTBra73!{aSn%;KBDv+e8-2FO9aZe9@#RD1oaO_qNV3%)hp~chm1+K~-8wHi8Uhve zub*2&x(QN;#&=E;ZZ(hM<=9}$4! zmq9vV8CYQWi*0kNLC`ak*@s$5Lq|3({}z_z3P7+Kbuxa*_ zm+3wMB}}MP3GSkZ@o@7Yl_(%`G8nZF2ovx~71^FfKJSk~-Z$TU7hNQR)#g9W0Y+=u z@FDJ;z}-y)kro#H8bahHG-gTB7Q?&Q<}>*y_dgpw_sbrMKYCQlDTvBMzC!4K@<(3* zgNFs|BWH~N*A9~va631KzAzV?HxEyw4#$|ic6y94M zlvJSzNk&_&Zkvu-uIR_rhazV0iE*6Xc$m2H`8BhqC)RAguw3$+=r3tnf$2+Iahd;lob!lKFGoZv&()uY6$jS$&~k#F_`AT=SYMD0OPIK5O587X`&hJlp7G z;8}iAN8u~Hf)1umvR-j2UTTYC9%LKa8mnSDY>^e+tkpMRVZ24>aIW(G^g|d=7}I;w zh0FK))}hMFeIX%JFgDHKOXP6bf@r;?mGDj~rV|415+_Py=-td=?1i0tas`$bFoh$) z4dw$#L05!VLEI8CQfw%9Wc;e@4t1DscUzJ(!pe4$1g2zDogu%@vW|+5o~?ciu~=t=Dlcg(zmg zlS@W3pq48}>k%^2e!>02hlW|i6+Tl%bzQM=lNku*k^9KV7g&lb&%X}{DDj zQU}8fsbBC3VmbQw6)|Tk)~d#=`OdQkeeI?%e`QSnk<%`G{s4{s*o*;^>T!`vB8YwS=$~Ya|3%q46DGn8$L%7LBu_1!@=MOIyaXk|=x8b` z$igt-(0;(~^H$!5{3V6mC1E0#Qqfn|LVCeY&p7oUs1K4%iF*3|LH1}i5=k8(nkU_U zBQ!}>P%(rBK|Ow#xv>^y+)}Uvc3)f;hi9U|oL&5p@XBNuTIak!xlF5dy?g0KK-{I> zCF`%CAE|bj5&^*E3zAB0Ljmbu&2*=pGxI>_I(=&39jZnPGe6m$2G+&6*QYoel8nGO zeMvQUgJJs2o$rHayi&W;YiXZB72B~jqVSQYW!QxD8S3?36xE-;1x#y4Zg{zT;-E{O zUSFRqaSe9KzYZ_h>Pbp?4-d8ew!08?i^0Q%&~n)(5zg}>a!!mMm*%wBEfd68cSTQR zy~6Waa#+ey=i)LsXZ=Ah1!697ez{E|EDbIob!Ax)aV^NB+hHBx)}?e}bPDXxLAA$m zA1R|?BMVw@B8yNowhjs|%b7F+{LZXpowx3RukzD+Ue?A7K(6et9&#^z#K&K`aa#)_ z`O5m&YqR_t#(LTm4?BvV%W>O-jTcc;Z>^<^L%Z<<-|iM>PQ z5nF@ri&z{#+e`gDXxS_a%47?cvPwXcxHBhsn9QmwiXuzk1*7SZ<0oH-GF=Di1wC*~ zIy8^6uS~Z!Az-e3B&AEh?D6y+H!kX71K4=#(EVHSfW$naZrj|OLWPY+ewSL&@yaAe z4K0Oo*yCg>0!x?N1#xs{?2#Sx)A){CWnMx}hKMp0gK##f!vY9Czo7z&&kp3QU9uX# zSzV3VVJTR#kZNbue3p2A!oMqb$uyV3K*&VsfqMTH z0~4W3jt=GA{>FYzym2sG)Tw%Kd>OLX7FvX?fI`s%b9cq7VFFmOk`b#wtsTQaOKFKJ za8)B`(B`x>dk(0&I(q$d8$cZRQ4TBrWPsp18_J?9+Z$c$C=#THSP}VasAH18;G@)j zLgO#XOZYbD z`!3$*v;oY9jD`=#PuTw6O|;h_zso3EYFDmbM`)x7#Fo>cOu$9Q44q`)E5PrkZ^Rph3PUP_{9X65Y6xeJF4D=;*1R;4Jc zhQC(ZOZyOU;S3ZbxWzg5;VNHPf+>BY;S7nkqFn&eS6D!N;%*rzD0lo0q0*8Ugp4GS zKwapvn2^@OUHMTD1~%TO4_-WUdAZF+YGfmYm`#>D5#gsU@_?8wrzMHCC_Lz7%gCph zhR?2NVZhhl=wc_vH&N|Fi34$Koiby(RsNk-zo_6t_dnZwK|&LU~r(hSEPT^(rCu--k?q#DW+f7kSq!3Uqr&QuF0Z z`8o|muHTsf%u(S11@OY;E)ar+Nj?lHe%d7iG?8)YP?2A73c+>EAk7RG{YKmd0yh@R zweJ(v`b|tKh|_!mrbs=geu#Q}nfjpjtZ>Dzn&G9|N2H*$jmKdhP>AiUgOExWcvalA z4(>Ok1i zGg!p>^cTbCRWVJ%HG2$hqx?-87p}hk;a^gD14YNgEDb&hQDOi+)henp8R(3L^VZ8< z`Ico-NG_H01rY67eQ+N1cA)W7=D9neSP`;70nxk{cX?KuDO}If~O@y1clvE*gcPnvk7U^3~ps zwb)1}tSki+?%$6&oh<;uju%wOx&^z@dz;Cw}7Qi&TO$NLZ4JnSsCdV1DKJzwVf(O_! zY0Zz8Pj!g6$}Y=!scOaPW{Se20F-hX=^z$5(&^De17AVt(Y5jn1+R~BXS z)Kk(^GL|6`Q_dHI7IJgy+LC9&DtRP2ilzJy?~KjfpHwXcGCf&(p{Q*ig7&1--1$oq z%TITFiM8m#J0s#P-K7}Zo+BUYm&Vwl9jvfh`#!LcVn_!Ak#m9s;i|Kd4u2V6@XiEC z)7y7yMLO1iN;Trnq}P2p!tl@&`?NDrOQ{q|644Tl*r$8<@kn6CayIbAJ@&CTcI5_=$;*~R z?(hm=UMq0kiv7NnZL5=K{7Z(@UtHPoABx-1052rn>U27Y+mlRwSE-Np5>c1MD&~H3 zoO~ZI4rArb2WgWis0r{2+l^@2IVurF+)Jnl`GX$cll2!C5vGM6!X}YTBEM|2@#@QX z(i~k-$cMeR*?C42euc#2Gt&7CHjLNopiWo@;@Tw1^w%Y;&u{QaIm>&U2>UpJpORhd zyOb(ava(Kp&DUpqrDt`Lw@@WL#LWr~fUJfE0n*m`eS4v=E=F%-k}MQ-iQ^()!QV3e zhm?fmqT|w5waHz;sLOLmX+Li^?IyZ>*>-3*`caeSVH#!IO%$rBHC=^m@?^Hy4kE&C zm&Sd1jws}lqJWo19&*D`EGxjN>2*cA@xKWo{DVlkiDi|rd4Ik1eqRneaYd3k=aPO> zx|=WxBmWm*#c!S=wFMobgb9qdtz! z5@a3t{0KM{#m7d3&;9U=k>PIgZFBmiT7IcKS>aP~e>lfYGmeCn{ z{;Sx?X-dbWG#szhXdvYkLwp!Sy)`HrA7Lgc(hGRPbn2*CEnQ2?=e(Q1M*<%?!G@F& z@U1Y;Vl~c06mHOH;WjN$n`*9o9~mKBaXgv85+sNpuJg0@;xHJ~72=|JiQE}ZbvF00 zr6)-dX*0U$S;QVY+J_Y7V{bNwsTLn-$tn~gPc1fAuVftp1$BLxR=v7R&{}Gy*k5wg zL|XcE?*Y@{Z|sAJwyunlG~yytbTTXPuG+d=L+$ULSfpyrJdu(y@;f)M zMf%%~uPCIbuE9#^5_w9!7-Fx`|0XyA$>dw04km6|4Phrx{ZuPyUfyr|K+fc4`^k^v zY799=fAmJV-CyhdnQ4Nv5m)M4_o4I_wfLKSSS4Vr>Jo%=Sb22){L|{psn0A=Ri2x( z1pnYsrUc4OG~yatLPCyNlYbElZ!yDJk7AmFlwt%{BLv(Ud$&WcP`3YV89?QNh3^Dm z$A|>^Bacq^KZk`mA%i!{#bC%>QM5D;hT8Wp1PssZn{>g`0=2RIDCxPQ|9x`6W!vf+ z>;Ki@Kq>ToMu=-hSL=nkc8w_oTo$XBOANj%#<^Jw0NTZ)Q6gyal5A&pO$Ou`II9$* zbQdJ0_`p->f+}cKNFDlI=|J01(~PzDR3l%2-#7V(pBbAQ8oojNf0Xy^X)D_GKauyG z>aD&PU_#xA#nQp&+@=E*U!=lTq2Nbxl zG>c$7Jb#P?b5k3ZVp(Lh=!nTcb(0?Pta1e>Og%o5{ zVdH)6@#FAWu@Jhb1L(3MP9YfRr2Ln1sNnN=44yE|2s?;VHPm01e#VhTo%^turJ~(Evavvppi|;1+?Tt`cYm%bO`1 zjs?whv6lpG_#Lg-CW}tW!ikhp%oYQ!vldx@N(t-W`u|vBtT4Koemj9VRL(ZZ^%0BT z-CzldgeeHz0m~DYF+%;O?_YC%yc$4xTD(g-Ay=V!1xe1)n>>F>Hi!-y%L8@xxUocI zPF=Z$5LDe?^Ti%1tKt1U(z0$lS#=ZLu{s?|qGnI4J|qekpNX4GM_|JQd#)Tctk~EE zk@HR0Fimf@1;N06yN|9vuNbEf7}}{>e9)Ld63VnO_z#6ssup97ZLe;koz43@1JiNO zIVENKn+kV|ke})PYfyUw3Nho*iQn%Z)jeb@4lCaVfqyOI`!#=mm|%DDG>XdR+*{=>$k<}Aq+S^8zS`H z7O<8_6<7>C;|U&!Vt-$@?cN9X=9|KX=T=kmuVT4>Kw=ni1l z6-(SvtZP`kL2z+g!=pt0I=mkm`O{S{<#fF11J< zV=?IQH2#sA`hw1Y>I7`$*4f{0_s8X1?S{$6=UQO|x^CTbNEZEg>V$L2^2H`%qcL3+ z-n0dcibkZ2+MET?#8Y~$vFDKOi3^PG%83;TFy$Z=w(J~cb%_#CSk`E$IE)&Fw(!10|QWJ6PJHIgk4jggGA ztFBw2XLWE`;)kPloI!Xd)%if9F(jbs;*5~;q}m&sEqrgjwiSEu5=&BHBqkZr@8U?4 zhES677SCpZOo~MtF_W%u{#J8%mB6A)?ySj!gFFFf!E z3ii^G3kFreQ!YGgA6FIznD=^m{`pqT2A#)JN)#GHn}7)Cv^!peN+2GMs#{3>igym5 zOybm!{2Wn$3&In}2=gP2lk0OU3b1j1Q$8H@pc72=1h zF4|4KzV6A-VFfAQn>HIa^-;WVc^;?8Hfp@gJTjyhmBs2V@U;3&)+XCH<|{!iVm^{f zTJr*$?bdeT1fYmMOT8K=$mDMrJ7aA35rhDD*DCfu?l1|T#v^zX9-_uM8)pggKvu5H zoDjy5Y4AO5MX;i}UMR-2h`}>^vgNoWHQawV6VU;Sjp~bhf+&T}Xa*${IKHC;Fv$OQ z(7_HvZJSSiU}VgHxoG58KOU-%o~^e0i0K9Hjlj2CnsM99?Q{?dtmZaOg#zm z`tN_RZ*MhOakPzI0;^53_QLaB#m0{N54H>2x!8du&k#nhVWy@-?0Rdt>9T=?BnG0s zPWv+`)WZ|nC{6ufwedV-we;zrZbJjDcABR_Chs^9q}K9*!DIh>T9?8{cYLoAubIa8BadNls#|H9M-jBMHQLSTYW)gAZ2p5 z@Al_-jUGvC6dX^TP-fL$9G~qwD)fK^8LVQnMgQETpA1{p;2NLCNxY+3UfP~P6T6Qx zz%Z52$EIB*XyiHzPNL+^qw{_%iH(f8lV_YXJJ`Q635vYMiTu zP?!~@4ONbOh5NmXMFVG7iXePDp{RI|a(~Wt3e^-u2ucDzPRijI(n>OS$`mCq9|CO7 zW~v@%_QnfvadM1@C(BrJJ{Bd8B+-E@YG0MJ*A`tVjF3=?_0R*s6LPese?IR)tefN6?Vur#lY*G1AK&i9eQZ2)EIy z!rcb{SYQFQtgDs~h0LJF0FZ#i34s(CmrE-t{6$^~?v>p^T< zBxge8D~?RU0NFHUEg3t4KN_ z#^*ZJ!&(5xD8f+&!f-w;F%)Buh#V%n-qGGR{O6h?nkgD`5!GyJw@i<2J&NY_Q!aT^ z&22@#g3pPjJS@t8csop>eIZ9)R~j^dL4MOXfu*C3xS&WogQjmH&ft!@Tl^rI$IcZ| zU59?@SyUJQu|#`5&MtHe96|zA%woih?f)zl9{|i&kJI{+kWBpAIfRdSV{4X*QgTcz zupY#$bTc_6E^mhM2FPNVAX6R2dUB{;BX?b?C)siBTqD581I;C zx`s{9I4*bs6rDBsX}gge<>5(qRv?NfMMVSo)j&~T(<~0-{={H7epf*8KJ*Jb)cR6D z>Y06QXRjCIH;Z`3*}8Thc5Qi_cbW2;17b7fC~qETKlmiP>^b?U|$1cG5zdc}Y0F97ILVY19&r za^SzUEnS0)P@{a^(p3+;Yd|VVqm+OfU+|XNK6Q>f1$b~CuhzH>S`k{uoSrhP1KNdU zG_X$jH0WUg3Vh9c&Q~7Z2XLVdCV#@26Gw#cu;jR|JOTvon%Q~Y@sJ}ltD&5Q^UcD% zcgTz#HqvZGW0-_ERK?NRi(y(?i$$0)3$BPG51>fd=gzQ4Xhyl~vu%t-OsE4iui~PL z7ka1_T{Bah`QHV(p_@zb0)A;vS&`gdlxDE++tmIXS&ualst%k<#=k$lE9Xxx^63`< z+74H)@b!s6Lm({7`-Ascq!(Ukw|(CqzYWCybR{UPHsz-Y_+O8WHs_8_OPCt@iosvd zf&Vk`G{+7~aFb5@3FY*wF3e#nPR^YF)fbw}XHL)j3lCM}RVF{V(`VQG6gyGyHgRi5 zPGjy$qp=660RxnPCGzB37N2; zslup-B;k5;gu=urmndrWSlm^W{po16nr_G**SyljJca!6*6}rBv3%FP1rJHH>RCKN zI39=hk%CQl?|^b3T?g=;0mzgcu%SEjSsjjI`+sKkJfG3zp!Soo>88dRFzeWwldqu4ykin(F3V>sj^(&n z>=B_N4%mh=ev%6xwTD_MRwECXFT#2V;Sdh8?y=zP3^4jU)>;S5o;fiNAAydHZ6vPZ2YrBTTWt60nIO zU9^-qbE7+Ny{#3lox`A5d;_8xO^L(Rfy&Cilu*?Sn%A0 zHDXl?LhxdkaOOan@*9T$1B&K$6s9)kk#0?^N97}u>_5_x{% zfGCc1UK~kJb;m^ySV0gP#zt^S6vwf`5B7WS&a!7ek9FP!7Mf7?3>K*vp`p{}DCxPFT z%sJKNxz}k;h+BK}>5f8|8tS3uJaL%4*eW*+sANr~AKs}zEk(s7BS_`e$9XCJMcLti zDO6av1K;u(EHQhxGi5yXq8sBROFqKUT$bg3{BxOA^Q`6$6$&a_GqC!_u)x@~IWH!itxoxkatNat&LEwm!L0vMBkTpTMO4zkaLru|lbp<1GIrK| zvywSb)OHPi<$F6c`G3p;S$ zSHl|dL6@Wv5n| z^Xw-#%cTrc$$OVC!vQGPm@;uOXhN)>{cO~N+jCRBz8~#l@71VAF7ic0Cu%SQfe*2- z!peRatbiZ&7`(yu2DY{^NXjv0bqsGj4VkHyt&Fo5+<4s9WiugL>%IZQwN$X9p*+3= zaVBOpR%of(%)hDfM$w<^0(fToJca9x6Kd3F-3Jc5qTz$A?+h7&SE;iE#l}PUIqvUp zquXBM-TuAUE3;%1BM1Phg?`D;dc23`wGL#DF!7o4iO?_)S-vZ#x>X|x2}=?WU2xdL z2%W~NCTfW_6tlS0NwIJ^hy(n!o}+q8ZP#x6a~;0Fx!{T^m<@}=3;-H(>w*5pS0q*> zHSU)A4`O4g# z`H4`(VRf7qT2eqHZ&s#;mN!nYzlw^ywsAT+O^(v!I83i^LYGkzn)=_`EKPke(fj^R z2aEhq&(GDpP>IWNyD@`=%GKboXTp$lsP`NC43U{}vdE$cvo)p-bq3d{u4 zLTV+On#k&#)Br#bw!(?7<}-<;tR8~YgnT@t`3pSuJ=P4iV zr9-PaAo;FYX+i>-h=-{l$CNRL4@wa+=@1{Dt&s5nmviiI(M4y@KgO)DdOhV&k*Nw8 zu=}s3rmsxyUGmP9}?3Be- zX`2ARw}&42a1jq3r}c0$B;wJIUrAabVXH98r6##wx4>&wZs>24ro;6ekzo zDy+`N;tc39L6`|bAu^$z{9b`2nrr5>$QTZd!5&gx7@>qK&r+XBX|}BS-9N5gvEE$@ zD_y~#s+NpS4zhuYPjpJ-oa2^$D5@_^`vFk>Q8y`Ocsg`G&i;rCi6wO4nxcV8F=y2B z(^{K(lWWc@b(aKIa{f#9$Zc=jrwoVgp{tycJNfXj;XsMLJUsVDg1-FCD`B+2!Wohs zw>V}{s74`^U}FWqcUtf53-;;I=Y_m5=~`hh5$eOKjucx&w(X)p<|12MC!{Z@QFA45l;3|_igKieB1 zF^UPcw%u1^f6Nn`BUX*>FR3mE{%*6|-YB!9ey8wa?c8B6Rq$Vtl9)!Z(Id^j^w!w^ z&z%yedUDn>=Tz^BvXFu|NIh02PXqbS0-yzw7;05awmwG*K-#T{Pq4EQ4vxZ1?|-$x z8*E^tLm9FiY{Og(u3~gRJY^}bKoRHXI*jK4d``x>%10d81m!d#WoujK;Dujc%88C~ z(@*u14M%__r)@D4vkmf>n6hzbbk|$-wS9|~znhv$G%`VytHYT!z!-vGVkGv(toUh5 z@+%BTqG)3I{h216!e|q_ndnKBdKH9pm!$oYAag1Ci}JXOm%Z+If*dq87}8CQbqxfn zzn;fTBmtwgZwgJg@q*{u>3%O5*8f6%&fA>r|%Zu`wddi5M+Jao{kX_sruk`#L` z|B^lUwpYmWk>4a&mGqoCY>et}C7HJBW?tj17j79eOQGAk<7V>~^fZpDYCWCu`E=@( z$z$Z49tXeLce?h*llRlwS}t#FXb<1EuU|msK~HMMP_aoevPS z3-Lg8UCjBABvKq+&cu^j(U^<>6$yBA&~u#02Kd{)+j~8BYrisTWYm=~a($GNI=ruc zYz#XhISYjxGo#OF!hO(C-?R+mPy4-qFzv+oncwP)C&CBAxKWsd4k+m>igMA5u6P8V zO?%1X%z{zWcz-}w_U#51ZqpMxU3NE-Yc)WP=*zyh=^n) zDn*y{a)c@$sK8tHUe~k5KYNVVdo)qH;5#%~AXXa<11XDO>(`&+%aS)06B9Qslv(xh!Y=K_53MI;<<_-9Nk+0ggJPxKD z(lypOGJxl7F1g5GE|&<_a12L099OecHXPumbY?AVw|zL({Ks4$zdVj(W}`s1O2}m; z$}c|M(?8x!`~J);ovH#KbJYCm#w?b$AHLp1KOsq@A1QdVCf)sQ zL!hfLol4Km9YMPn9r%dnO39Ign5NtNpODT!uNl?z5GtF?_U$)zRGo!kikpQ`vhsMXp`ws3kyhuJ z^J{Ju3aKwG`v6EYWXPzZD<?y9;*9#S7w1jO@4lfeN5ca@%py5U~i~TqrP`tc}V1%a4%ZK(oB(?G{0aMlUJvl*r zXtdoJqwe!}=PT>?I&rceC6_Z>Us}PgD;H5d6B#<vG;VuFbV4ByX2kGy!%iJ z8p@t|Mf~xDYW!fXKBwx#oJeC1*Up5Bc?cSneW@y3RdL%lEU}H_bc5e{$^JlyCyJDq z%)1Y`YxPv+h3}pwHno9nQk*y=8UAuBeS*r#?FOD(bSxn$eMU&sjoWF)t(2q<*Zfb+pKuC53OFWym#;SGNsSx7Jcw{3OhxQO~ZR?}KowMm>=L zZN1X!N5#&AxmY7Q)}pU|l*`)CZQs`gp43~?uN9c*8iS1#K)!n)!i90G0&wOz?Eltw zHq3!3hi3jt8BL)!1> zA}x8*X0T}9)>ALkj=w9iaN6kCHdyl3_va7nTwU~TDjxg(^jq@HwCI=qi}u;NI@RPo zS|Lb^)t?{qgk?}B0_#~o#ycRef1~oQczD}>jGeDCGD5O9$rRASR+4y!}4iq zVY`6NRH5L_&A`5NXE>VKCRm8#erO+>pdJ-JzR1g$niDGj624NT!6STkKt#O|kKEDm zE|#>kOC8edqZLb|xHb>nBx9@ameHLpi?^VCoO)8in|=bf-s8!HPn;qI0gn-QypU2&B$wy*tq!2Q zwLAE@lnB}J6Qb%Su!Bu_bI|Wj!IcfUy`)!KW`NU}bnOZEz}FXmUWOp2{>&VDj`QY+ zSf2&5pW?6zRL18k7i0I)>H*0`3kvyd3wR>H(Bbh4nH4;!-WIJO`~1|9`xS)z1JRRS zOiJI?p4Cu_6{!dzYItmg8PLMvRk1(w383f4gC+YOy0)f^FZ0 zPHi24UT?_joYJ3NMd6%9O?D-bxrj||G`GI8__*}cr(n%*XMd}gM%)U*K}l?SUA}8D zf$Et!adJZdxDy+d{jBFo+IAvH3_(hsFW2N7*RwmKf#I`iS zgt=>~uLi35rjj8b>+>_t*#dXi0cAmTv&-yg=1qR7FUT#aezXnk@sE(z{+_K{mz8gP z644&Me;bZksKWK+ekf128v-n9Z(50*U19&h55sDoa95C2M-8MWXr6a^p5h%3VHwu$-9)m|rcd+ENU?GYYCMFZL`9+ASwounqAP1_t|7f{l zJrS2|-1m2~U?Sr`qDahSm?50Y)6%D2n`&1y4yvO;2<=CZ!ES7M)(5Zj&-4?h)P5XH z`~=G80X!4LX>Rx)%|apitwUNJ0RNuk!gTcP(+0bCz>@1w$oMpb@DpmC`uPbbW&HRo zIp_3_YzaaC@a$d-xcH_kz?xDVRG1ClH>aE87uxm_$`BEyJE-=Cq7ZOqkS)YhY5_`N zL*wSVufP^~6ItWT=(gEUpc4M@3?l`wcsu z60p^%QO``KgSM z`0X{whGV3i_<(u1$YoW%`9WCqL^{n znU6bQc)BZ01RclpQzrD0qp{55lRBWW^1}bkVVb7-@j0vqlXBRCj|L>}jY9u=wkp^) zAF59_J`R&$mfJ2K_L7?a|(NT)y7?;r6y&%}E7=U-6$9NNUIPqGU0`lMxXa{_G zJ1+v78SFk2zbkHwf-rKC_h5kg#{)B<8?(V-A3mJPY(%07+bcBdl)OJv)?IiAghVFW z+KJ)LMi)!Aqo=`2**l0k+qx1k-pqDQ;Woty+hy`-o`3-@_x2OMOdd^}-HnRwktSJ< zSKav$FT4tW6)~3T+R^x{cGiji^UwcZxF>d(e;4JTnkAT+Lg;yHG2;nMk6cE2K1LlR zQT^(xZ~I%*;=04AmuW6O*bzz}gNQ?Z2>iC}L39-bxhmPq7&-W*7qH>%A8BCqZQ!Nt zwxlpt2IXjO&;~n%JgFEFkxAQ6b}*Dkw=+z3y|$|a5TgBAK^sc!L*rcYV#}U zdSBE>A-{zdT$V#0I*i!b2UwWjal1DB899cjPkD@4)9e`Z^~8lNTgU2K{VY#Klr%BJ zBOFLvCkHTpWCKoo-PHD9?In}krKHPPiHyfJQAjr6vz8tM;>P-bohv23o_U!c zJY`}4GFlhbzt@5x64u@&3$bSYhFT@iXUtUFZEE5w1D7y7hqpfS+aimh=7wgWyd43gsar|R`UgN&v zk}_ve!MnAB4tth1`+wdIJuUSAxdXKCkHfY7du#Ivvx0e7_raFO?F9&E$#*xM>x|az zaY6R?#^}&uWZ-ou=r3K}{ImY`@YI<%e}S-LP=wbsQ-)gmg8J24@9_i2zG6@C=@J>m z*qk)w+6MMNpODC~h=ZP;m!J-Db3>K!0FBU!ln#PGP{qnyq}YoSZ9KNl7j%Q>*G%+! z>}nD%=AiDH0o~l^HWc=^*Ps5i)Fi#JMn8f)&f4GpY`@8EB(`9jTN3z9Ue|vpOB!0x zt|J0S9UhXyFwDrVK-!x{z&xzP&ZfMy@lX zDb2LUAHtf5UxWf26{{e~+z&`JJ1=-juJa+hvS9lXp ztkOl&4*;;uu($Ar$W)~$3D#6TWar?kI+!7V2x=juh%?iS@Zz}BT?O;r-b@PCL<2Qc z*DmLz`&4%=_`SadL~s;J9LFSUS-ievQ&%TAtPuJyM%J8C3A%h7(sCdgOOtq#W0ohz znz+$G*ua+>l6CNx@P;YXq>@yl4TsC3at2^R=qPHZ1<~bEpFUToAN*}=;)dbMg`OW` zw31U&?e@6nmH!)PY&SJ<$<$1e6SVRQ{UH8#Uhc+7#Ha6(gh?~v;(KamCjs9E^ zC-i%bgzHUweWh8;G>}5(YpOj_iY~ zyHi^CerGM9uH_?Hb%*XQY6R9f|B7*VIPsszZo#1J-(&x?q9jah2_(U%p@KCqrZH!> z569zbwMFfjcg+ zA>a~LvcvPa9kwwj|5)~JJwAp+P8S!p{PB&p;6 zU5n;BB?Gz^U(LGz5ge(RsK4?PWRF?UhzzBP4A9NtNiY=8Bz``px>4v_T@CQwR#k=kd; zawbqr0C;IQ)lmF=YXryfMM_rl9jPN!pHe7VDb1hkfQod}|!n)S0EmQSQlJH8y-uV`pdChZrovv+jt%egP-G^;#z8egVZnO(V4 zZot+7y31}JC@OB0^N-g37AhHs^FQBI0|~MuKm~;5>VNmBR$xNmGpv$N5MKO%mUhV{ zA#+@)byp>WZ>G+t&iOoxYg>YAkGNsYD@Rw7_4lh!MLzB* zglKvON14LTqh{anaO~ksl!{d#0FPsfuiQEd?Za!(JU#>*P2s6#3th** ziv<1qH~ydT3?9F|!M>Ak9?$pvdT>T}e*+c-J}*HYN>FG4{y9L75*6!7DSi(C#zndh zTI^9YWN~ErN0p%-V71s1VY51Y zD1hSmQr&dAVP{{4Z5ySaCBfp*Vib=-HJ z_9!%ls|fiQo?Ym31M#t!Y@~0LRs*8B4+eN;ajb(l9nMJ)x>=q4KI?8DkMH_Y-Ew%H zdcyVo@%^FI2)`Rktv;=_c*-Mf>gJ~xfT&OZ+y+RrUFoKl+W2WjBD$LRL&Hiy3&zcQ!m z*YZ~VL5R8J4B~?E?PcNfk}xd}`1EQe=ZC?x^ss?tk=t#9?)6Wh)fh?9fO{u^0O4AG zd+8$^Nax$<7%p?1EOYGg4Tv>+%C1pOMZsM)J)>2h_C`D4;qic{O_f*TXbEEbc4E3w z-%P{$74Ms%-9E-w#DAewxB3X&Xiwbe;Df)#$pS|@j%=Zcp8oa^r~08M;gdIqjBg8+ zfYR(wsTkUUBQCQ*Xa?r$)Q?;9DeiAyqjH6giUgDMxAubc`KbkSWfO988L9N z$LGPq+Vm(Iv{+~{T>b$i?o!NW+Hz0-+ID2 zglEe%YW9@QvWU>am$!wjwXf$7`PeR=J2rOE0lSD7CZ^`& z125?ndCj}q$4t{`AP=}x#TD{ICmZ;_Bmp?gqFF)4dtDw8PThjih;D|gJR+NoZ)EeIDIT+mXNnw@_}phC+mZ|8zo>&w2LfH~n)eJZGQVO7Iw4Lx7Vb$h*E5XI{=i6) zH}xJo&%`Bf#j@GrXq7rgL230+cCXJ|?dD(+|HW9r%YJTjtYFXAb5h=UWKHTNNp)>l zY51Rm;*Hnu7AZr)^7&e_R-)eYZFXXLEMJ~Haz(XOUA1EJ*`U^#QyvSOQOMN{S}I@g z*CJJTAf3(r<~)BVOgm~)@6uA0ke~F96J=FM5a$rWH{9GAx6OO5*O!5Qe-4x{pEbLG z^q2*zuGePNpPg|}rk89{AD;zSSCejN*%m}r#85*~kv<7U6YaJ>@7vH85ZTt3R+S+?34T(NhwHQlxLR<81jcsxS=PJ0xJHFHB7) zaEjPX&4})uQb%=Um5dgjR5L18jSn8S?H`Xr(~&Xu$_89nHV0j=<+ZQm2%D^Zr8KT& zr^`sn$&$U(?C*|U$L51GF|>{gtRkjg|=j%9IC_vS{qkOtvyjz2Z`3H(QzJS zJh~(G$1ce~LKoFhbmO*Q;bE~+jss=BuBx+EJ!Y!=#}TYyhlnxrzYZE!_qTCqk2uTM zeGIkmXD0r*W)8BojVjb0RSqLQry5&@;lXORcv>HwKJD`~{2ZPeO}05U_31-=8jYJA zPH-J|WK2&bv#%AmUbiJLeGwhMFM4NCj(zmf4_~&I0D9beD&Wc;5W5*Q(?T2?i!_sI zk3($W&w-b{jOH}Y>1>+Aik-N%lgQ+h`>pv&fs4$dwtOgAq=E@Wsw?!|^9@H+HqvYo zznVu{Iu2x^p%E0A{*Ue-x71(T0KaWrWj<%PNYg}L z5f>~%F2s6-EzuM56A|`9FMZJs*WUeh$&2lEwTNBQNvmO*J3Rj9qVkAO&;@4$$R3Qe z=w?2rN67Ab z2~L4k@f`#G=qValy`+spG8$EF@XpH8yz6D$IFUQxsIi0Mr^!82^cvz@wx7~HAERa# z-+z7Ij_AUnbrZHg4ir}wdqe5kO_aNr7PaaBapa3`@~of?n^lyaJ1nzPH`-yf`{9xg z#eMF=Iv|q)_12Rge-5%sPnT)>c=wi3#uxY>&o~}QA4maveYfY^dkM;sOWosdM}OlC zzRKhgCl*b`v(|HK|4}wxBzmkbEKPkys`+18U+wuNafY|khkXn;?vy1WZ7Hpoe;%B7 zdG(;drQ5FXD5hFT-Me0XJ7&60mXV*9`(@ypnEvTjA-$DSqSc#MrX}e*)kR;s3N2vG z6$|2>=_eGg#S--*X3iP$*8o=X%X^MmQ>Y1sCUw7FgWT*dQAZo<2dKxZZ_fE{u%XUq zvW)-SZv{On^(9-ePZqx!lop?%D=SNAP;;Bp*PTNC=kzO*tNPNrKJYeEZa!W%T6+WP zq<_yxcbEJwddIaH?5gqYIjC*>p-KsB<3L zDo9 z{Cx{j(ILF%d;ysCdt_$sL73JTGNy}3PnItp<=>VDbHK!eOQCy4|5J|KeVziWipuC| zDaZ^%IRx~yECPVM`3*R<^#%2;NV}s$I9X8~1Fg$}5l8MsB(cUH>8_}vjz(gQYF%Z< z{>BmX_`HXPA#^oM%0~5~?>)q3L{h$M+As%G{RwLpV6d_u1y1IdM%VkG5iMy!{8=^$ zYT2a8kY7laV|?)bJpi5Iqfc_M{vN80)6a(Y7=R+c$zi|zWV6|keUxrNLON158b{Wg`55CYa@>8G)!ukh4F#G z)*2%He(o!U!!x>R)}!-gtVeZ9gd7aTA80Ao88 z5WAJ5-gP>1)3~S>9E2A}KLe|;YVUJKiM5zu19<)8R6mlouJu*EmTRoL8BccyDu!&h zhzzCIGY^n7c@V3%igNf#XL>2^-9Nqg2`%M`8!*IcK562?PgGnT+s6}A1>h8w(kIT3 zUbm_?U)$l`p!9V!$bm=g6-binFm;l*j{*U4*40g#0VMUeV6eO?OxFL{Ej(C9`D!Rv z7C~2=``KKiWzNqhDvAH@e%(jid9dU^dvxb|LgzX4B0PpPdz*!9QgM-9@@axnud%da z(wta>(@jQjI;`{)#BmnsN7`Nu*l%|2iOAQv^%si{=vi>E`8XBT)Ga_>@o4J@_kWA<4U5 zgm$0w=A=Ym_4hOBI(HAN$5x{saa{8Oh5F-WUyK@GEUU#5^r1$d3esM`$rhy+Dfa4? zzwdWLjm$xj>iBc3>%V4$Z@l|+q4DhAZy_RmJbhJsj}e%W;hCqGmhFF2eE!A<0epo8 zz~?qfOb3m~T9d`|3B(WTOy8-Uf9QUeV22-%jStWT9$eURF2Z0;HK5 zeNN4fa^T)(&rCs3+%r85hm$JK&~CM4Y6|)WdTkD&tl`swDfKY z{C*RD^$)0_p<5+9!+N=`U-(_)*tiQ9udT^Mb`HK?S1uy#Q50iwnpmS)r%Li)x?ldQ z=-7%+Yvp>47Q+B|3&1@my9hu1kP6Jkr7EreDzacl@Rc%FRNKn(zI1O|dCN_A{HWpz zKRe$`<6f?bR&!=4>r^|QLzM2%&DR~9`dKai!&HESw-TRQuW-AmetpaC8M;n~yY(|I zk2|bxBXjJij?>3*r^gy8zsVZi8S9_G!oUWDILBDh_MU)7Xn*O9z~1A6GD;$hRtM@H ziEYbepWM93srMKAev33gB79;|$PA|3%sO!9k)eK6)e9*s%G4-NTECk&^)`W?TM$=DHQluvjJA(`=|u;HBv1lb zkfK$2^bmVkZN9?r%#7y0NtKoxNxGb~E1`2j}23>%O4 z5>NbIvCA&KM!nfOX^!3>86}NH2Mqcy8fT}KULsbknH;}O&uEX{fW`7dG><*h*(zZ+ zqpss4N7vdd6%s?r*4exEQ)mh*TUFmlm~!u>7f3TFt)~dJTJ-pz1;BXUJA==OC>22W zeg5w!VH#HpFnMtgNP^`E_^DY>N5`Gez-df6!U!1+p|>AxT&z3)IWS-t)cwbAHDGc> z`F^a&cM2~|KHyBz%nFC1^WZfP0SC@=t;9*!Los@8ma-p^Sl?Wwt4r5HdHtjz=`9wQ zeBs1DzL!^WPWli^^o#<~&G)F;UzY*;NcMW-FlCE3?FoBOr1eEbFAru=dFs>6u9vs7 z9iE4f)sF|-@a%5Of70vHlhaUlL?)cR@b{eVjHQMa_`^);&NXXn>#=Ql-ukxtqdNu? z9wpZ8Hg2J$`H861uin9NB>SwJ&*RwKz!bd~F{E`gksjR)E<0O7T->C!$n?$+@$$tx z8gt%2DSXj>3K@T(4%ZTvT3N&_A6~aFB=iG7JzrABXob&m&;?BFUdtV;*K}0>1t|Od zTe`Pu1T7jD?S3Im{r_t3%fD*g-}ZM%hJzv@O-g7`Bveu%rE;Q)A`Q|}(Qztar-?Xd zuq$OtqqNf?(TPMUl%bIZhXxewO(^Y3nxE_5KA-RU{_y+>&snS0S~*hh_v>{J*L_{r z-F+~6=pW5gcjVtfe?DL;S>m8Tk-eJD%rOrVnZ6%5bZSI*C!=28H=QYGcQro(v8Pw})^o`BU9cls`zO1p z3FHD7@XRU|$wVMW((}g9FzJ@qx6Ib=&-6cVIs49?cfwUF)$VcJY#gioN!!$8*Cr)v zUOT8P8`tFNt294|?7QE4TyZvGxq>HAd7_v&G==K-;qv6s=hHZx2M)n{wod?3y$hTn zm3kW|u2_r6vk-654tc}BOw2a=u0qJ^NN%N>-2r!*2Qk`yKr*=f=q9VC;_7xT4qfZ~ z*+|V-LP=%ydRz3RLvJ37jwJ8heHT}npEv&$nhfygpBAIDx;Fu-)E6yLY( zPGRSQHWR-UkeFn9|8Z2Zt*_E?EbmG81djn^xhF{c!^CZsxnlj>#wzuJ+u#pr+Y&ze z1eDCV#2KAANg_lvvt*)#gXD=Aqn>p2{OAUDD`ee+0i8U{-Ksxa$#O)dFrJ%EJ!Pd| zE2F{uSNCK+(`(W)b+1VmmvtodPUs8+rZG^C4t6}s#V?#S z+KpcE5h=X~$Z5!ItT5#PP@0|72q^6OBH{X=BHz*DOyls{-mZs7tqvX~_o_cxnX|~4 zZ#sGQZ-s+S?NKJGDhW_gY{(>9Fqid``h{hoA+(;1Ur8UolK5=Nl*{e1J%hp$W7sb= zj~FX0D@jK{%Ou>BTzK=s-GG5ajGh>$O5nj2({KAQW2&kY6p{sWootG8Wx|hPDx7^% zH1qfLe%AUQwvA->ap(&E^fU@{2}selw{M#qo9&lu^PA*v(mMHBqntH6cfT(>X5Z6x zZK$WTy%*P4f_xQQmegk>f1XAGF^?FvBfTVWoO^vhah?D;q8mjYu0Ue19EcgS>QWZl zJ~gX0aV;p>M3l*{c*TkK*$fg{4Mz?s^c9gb>|tAV3zh!z@BXwvhz9h7y5zY`^CkAg zlZt!1#$FSSO-V}#3IPa6@X@`-f{>q!y}3P5wmk@k6o2lwb~yA{D1 z9JDO_m!jqMqVE1FC{6t?Ks+?y7 zk(t&^Wp)wNh#d$9X?(y;yRIIZl+uU0_1}*%QT(<;wXM>sZCT@DvHS#OArt?rC${$j{bG6gc1N82f04wi;a^yld>x~CM6M1K@ejMK^ zS21h5d!XL?aq)@MiLgqVcBnrHkbsNbOoO`t8sM zP>5J@tM+qUPF%Kp?*!0q%z?LM^fkK5*(Bra8V8?_-M!iBoo#W@q!e8|0{WoG&~;9s z^kn9X(%HFw>7P&@OVft7Sz5F*=fOjga=*QpS3ud0T7xkrvFvGtv+%BXnid)?Z{w9~ z6DL)bv~pZ4TFey`aI|jg-fJguB)Ke!jF7)2v&o`=ATz)m_AlfyoaN-yzxA(_BjiB3 zpb29>79{>xl((Q}VHv}Q+Pk?3pfc^$$?oFyh#+^LkK@> zdlRJA5?_jye^ojJ(V)`l1dOkG%Da{+6x&X?bdp&H9B@{1TkazcPDi_K_Vyz8)p1N; zv+fiFyk@FZ<>$Z;$aXN( zTN-OcsvJEIk#fyv9a*M%99)QVbOq;uxf{uJIt@FV@z_oy&E~v-{HiDrFP>n3rm%0y5vHbg*WAT7^J)@( zhD~~_32*2jy(e7Lee4%hN4Xt5-p@qy+}44>O0TwuEwJeW3Y0iFq5n zDh5k~sG!k~JX)j8Yp_iYH1~P5gFRsunW8zIssCbp#vw!ZGHL7K{LxaZPQ4M(pRqSy?g}lNLESlzTtP3`o;x z&&=H|_3&&{Q~Ysr0SI#spi->KuS}+zcKZ59#*8KuYCGLffI4Fgv%CoPMep+UN6|v^ z>hvjfjWJO;_O{Nuc$kb#uxDe(Gfysg&^Hd@imql~X$B3~d+I%yL8tx&4`8k@1Z8Rz z)xRSK@&ZUIKuJUIDPaZu4~7PV52;t`l=Ks~%rgtg`7~|h%1OQ-6yIFnc}B4jLC7Qj z0=kH$1-Ag<2k`Qu8k?IP$N20=7{?Xb-k2NQ4PadYDT^}kGW0#RT6Jx5@&Zi_%02Rl zI$HuYvdw~nCKa~v>yIA^d`BmEM9})>=)Cd#9z^`=pr4Or`59NOHNIfXmZ6+`54#IL z@>vA)qbhuYpI;W?>j3qdHoux6Fg*XZjq~##odyj#$50C zLDI?%Ungd_jqCGyoBMxUGF6p@n2}j#B>8O;WxCRK!UU-`z(<(VqB*iDz>y@}RzB_n zv+8-=A#xUNLv4FQCw<86+`AF(+S4FK-dlmO$m~6<8-m>X3<0}%50eMPbg(#gx1nOG zZMGa%zEh3fd7c2tlXQVP_W7HuKf%y2uz^FsXkwNy1!my%#VYN`<6ues+~@*=$yq!P(n<5I?;X;x9S=Js~po zD&zWue?ZY=!DUpb1o-)4*X)X~e;;C_=+AY%yzUMmNffMWTN8%v=Z_HxfMcLXHd(qm zzmcbnzkR=jcbrilv-T z6f!?(lpRH2csf4TJ_UA(+q%cKjyF40)1(Y;?m2#y=6|S66e4-xM6E>}J^5fC@C=MD`()frE>v@VnI`uRZi@-L zxZi#3iH6WS!{|5cARyOA-5@R`{~t6QRyX9zmEp!D$=U*M%b^L{%#3UA9VORWkYink z#ozDi!nAI`DCmgO2X7&Lu6Ht{FeaaXy`~u zXT0BW+{RaJ!xRCm)Imd-|D1G*#8Z%Gh1 zoOePao~xrKtZZ5M42wk;qm?fn=>%CNXV&kfkIWXd5;C(DxHnNM{4dz-zAxBYw_=6x z%oC>(KY1TT5(+tD;+gxtw9L}LwwiF%XBuMwz@FeBUpBip21BWHh;*G_oEC9rKcnhx zW>+=jtup~LOBr4o4$CeK5&N8^dHdGk7EI3UJ|rkj38D^$9~lILk4cLdrdy?il*4`@ z#1x5t&a~V(QB#xb)*_Oj9^dWu>bhMU*!;EnfG}36W4^PCSh&*w`zv3EtM_SmNviP+ zPi!6l<$dn1d^ZbQyszoBL!)ts5b%5BBd;Du-|$POP4FARDV>h^tn!pwy1j@s%=Rg?WSo%{ai7O;m4n+ahGF906|;qPL64MMV14@x8aXb zyaEW%E>_YT(7&?-TWqSf4Th^ zmz1|F`pjEtAv60yiS?Z>IC5AevDIUpe(&AAMCoz9);3$;y!*}%NB8g%HJ+ji6eFrE z&`mX_cpEwifrh2GCVlpG024u7-JzpSJ-XyG0ztugTAO2U#02!^IDVCfg7an|~ZT9G0aAmUZ zaI{se43Im1gaO_9I9w_2mhnyMvx8=<%N-Pc1&y5n@2EW@T4ZC!ny0*Xo`#(<_uqg#&|*APa}0sb_#_O z)y4rND*Krlu9woCHua-8ta}xyQUGC$xXBSw>|ZQqdbp z3;YWbxgJ=_83O9`NKmN$hkfUok8f8?p=$EP&I{HWn0~UVHk`A*SOoGNv*t}I;m0D2 z$g)5;dPPM09=y;BziPqAxl{k!Oo_z*Jny4jeQql#xx5Cu>I2S1#eyqJQ=auJJ-~o)@`|V_|UyNQc|VPyPa5bAf1xbcj!|-j84X z8gn47wy~sh4+7>&9p6rI+@}k2lNd9e0Q%lzvxbkcM2%}qeNnB_Plw+&risXJm~v^S z*T+pgGOHpCbpXy2k;)4l)2sQbE%scl_okxeDJQQ3cCEHaM~ih(I`GAe8Nq{eA@C+m zH=Ul`8Hihu*4I*>rxE(qDh!N%MjoJoF*9@fn+a0L9vB zquZIMMl1|yrR zU}a81?;g|x9m7@dt0@Dl>o7Nbi|Z2r1s^1NTNLH%1NKY4iFu%^QsbMMBNT(U2MRXz zfhZ<-?Go-c>R}zbcWwyWLrK))NBuE%?tzh!B6T@GF^avks?~B$Gm$H4tT+t7mCcOP ziEgSeT5?hpMj^OJm9sWyF6JXG$p~&__rob;+onmR$&r_lKs+N5f+L!d1m{wSsL4>? z7iz^6pV#ZMu>m3!9Aw?v;-oZB_(z12RJ?Yr3hG_dx(uh6IA;ZTuXR>ePWUOdZtd@C zT}Oz47I52MDK;R_2%2<~u^a7<{{U;T$^~ATbG9Tt#@OmA9B~8(lIW#Fk$3LYiH_AojUCwiW6EvL4hRbQS8NanvHYk{)2O z7C{dvz$L-**!$z_8=IhyR+&%1BPu6BAki3Q?7$&7YAua`I)VTaj(K?z5GH5E`! z2KVJXf`Cy2DS*hQ@ov;AQeIe!GK_Ate8diqH+dXPh=p+v87Vi2r5G1}I@G%AACpQ= z)^^F2Q73=P^shzX99_VvV<|B#5(@G_)h@hVOEgkmDb^Y8Yt**J3Ilt)je@XsXtkB?9IT!yuFXF%!2G41y+y+If`M$Sq%Y zv`dO0Arid7pl>b_Mc{$vm(-gUB|)sBzOQdqmEZ)`X4hEk>5tZDFe1Aa)wAuvS=?*0 zBK6+hH_s3*Hp9!3B&dlzz54Y_46xA!IrxuUDe}2U)qhdjX^7 z4bV9o`MO^}42vqba)!zi<20H=Ex*fy_Ml_z#}SiYFur@%CEO%r0cE&K4>d7CgElc; z+V#b*(~RsfwkSM2NYitp2@`4V2bMbu>6nYBCRb!#inxQlTxBSPl6bjWX-a<=mJj4S zCE#)7uKSb{!uK~MjKg89eO}4gb90t*JFgfrY%;lwYV(ngL8X}=HS}``4Xn~CQ=u;kE(fC=mIu$_ z)??a09k^y4V6BT*qWi^q~2EYO0cB{i>Ga6#k$y;gi{#sWW1>t}OjdqDlw= z;*Cwxn9HpU7A?;fk;|$*#Kht@0oe4vO}YddGkVFiqI($4SQ%ImqQt_m(^tW_{ys|Y zo8g3CD1H9EW6-m?psUdi{tnE(4Dr|g_IhEt=yrQ{d0rH`?a#EPUIBuK`GmJ@IJ-EJ z2YCH?_wl|@i>8nSYep~~REDzVc3!B0Y^YF(rbas|`^u{-mP*eA;~Gi9xW>rFI!GTv zZaQ7pVM;)aONZ}gf3xL^>ZEp;oQAZ9Z5WF+w_nQ=nVrQx4AsUTH1n$scmu~Ba!reH zGL&QzgNQo-Z@lwhs8#!Pb@CtvVRWLB#;2?cFANfe<7wKR5rMvRikKm|9Ubh z;b>riPe0cvYu>aa`YVlx7*t z<#GElGUlruCeoh3Y89;x+t@rUI+`+ujI&^n5?oHYE#DR~W2q?CFh-DBMhEb3G5Wzb z$EWEifF-hVsATnoX(mw-TK| zZ4sid(Vm4l_x zJA~Q98dl`8ESYe@5DB6SKbbg-faJxo(R8vTmk16R7h+^zau@Z&MK-RyxZLNjwnx*| ztG?7vIoEVjjI@+^vg=kNeqLRMzveVm@QWCDO3t;E*2{pFpTC93(b}bv+()`3A4{y{ z0}`rMQ~=-Zi-yB;{3S~G_+-8G$_X8|(GDrJxL{WZ3oC?j3rMZy_EYeFm!a6Q3lX?} z(KMljP4~!JRPb}oMg-BFzY<&(ny8Yj1QsK7U+0=qNMqoS{nZGfJ7QWmir}mk zHvOvB%jjDKD?-9$`X{<_YAeZ(v@$>me`;`g4(ct2tvBkQ>&V&hwjPr+AR%BNEhQkKgect|g3=|WG!{|<2Ho8uEl4OK$|j_dRMJg1 zZ1T>9zVEm(zITi}?(dJ^9^;(D@ZjFhUe8){eri5`itope-4?(cPQf>!o#~Kaa+|n zW_Fh# zVKLpFEY)vYv)eHdZV(seJnFZ)y-<@b)>-Yb-IZ|r#XFh7cooxFC-q2|h6!wXJUh4C zAcv@&P+sM7=j!~>&2EDHnmt#+?b#xgcoB~dX_nj&ay`fPch+fc8}rzN7evxehMY9E z=E_DU*OHXI`^Yi2@v3tT6b7=VFYvLted! zxP+UEPe0AqcX6%|!;T%<-+QvPSV!Cm7a5hN5Fh8chnrgcelL)8ttj(r~UR7TU;NoO=m0ZV{n@3VdHpkM0Zp;j?+-=JKsvp z{w~Lm^H`vHe$~1(hP6nRir1p6Qr~J*+~427LrIDzG(RBraliSBV`N6WNo!2xi~9y1 zYid*i_75xmBn5N`&g8t`TiD;@kc;NaZH@Pm7js_Gd9)CsB7g1dFaLe(D{zMt!jI$O zP2-~-m(bI2`;X`@Rsq|sVG!FJQ0xAyN5@ufCcnnhb!Vy3)bhgi-uA+bV|hZ}5Uhyt z`g^@kkL3nzKFtZ~T_L9?O~Lin?1i@SkG*!OVp^-!w#*HMi%WmEO-hT~9@!W9`%y2x zuDHSxdAc=a>$R=3wc4qGIi=$=5!y-XHv3jx*RG+f(q+Z{>#o~ERk*(MZ|~LCn+qvN zzvO+Ij}m-5t7)Q{E+0E-rmwV?R9tF3kcMmD-57~KcIy0_Hd=PJrexc)p~vQ(ayMFL z$Pc{=7Tx1Vx3ejQ;v+vlvz0RURE&dsGRZk;#fkCc|2&>*j4T@#Z||^Np79kL~PnB#@>Dg3wNq@!wYVe7(sBTiKxU@9TCXneJY59kBidj>9ffsd|rp zUe2vr?>EOyge#onsC=Ytmgub<&1Y?IzJX6H#0f_#M|OWJY6~{5gV!t(jbI8noA$WN zI=1ub5ZpF3kt;m~J6xi>tDWZZs=YduUi*74eJ0V?>c8zw<2@dGH{OXDub9cp=G;m2 zq0L&xJ%LZ<>iqgMUCHUeBgq|g$1YgCkr!I3=W$*A!#qWID0(?xvNFx^&yPfNSm~yPCsqmt z)&_PBWX7&P8cRvrNZV-gWsW!{^-JVvsEzJsTe~Vq6-Bv|O>ND}@qHA*o^7%x#RNBW1&`mO=VHn}e%!12@{r z?8d(0xP`Kvt}T38sKyN3lBFZSd+>8KVGpWBbcG}K-IUj4q-omkI-hiGXSzmt%tH0H zjo{wqm`X6MaK}3t_Q;VL=eDt;@)6JNR02Bp4^6#U6%&DTxZ+NE41vp7Nw9~ekW@?y z?LZ$LS?Zolfc2#?HyhuLbvR85(N=}`EPC_wJcl0aCcSHg>y9J-95$SW@!FHFQ6H*s z%I0hd)zH^6iE@rxZWZ0%Ig!5|Zs4hfbqJys;5tps&$)nkK&Q0h5;Vu3rMm-lO)bxI z_5nszVKzWqRl~RKZZk_(ZOHxw9+rZI94jwveJc)BeLbxoe0tq0C~~8K&TqRQUu5|k zFzfqZn0H65|JRon z+3xI6zmECCF|>eV*}_1tXs-puBjC>K^VbJft_cT6=}KGvEHn~Z~!${udi9*z;k zE-CslN{vA@rsb`tsd$(KVR-_sD8%U+(#CtNYk6Zg25f7RUJwap^jkAct_?c0k(F2v zlr~LOuJ>EA=*>ItH!18dV>mPf@<*p$Z{$`&Yf1gO;KAAn?b9EMzgBWDeQ9oTut-Ji z;-;=@8T-U(I+04Vx02+UOZHz2LnvlEe?24U`Lm=~;dsq;e|N)jr$3llpwP_ka#)7F z=goymhtzy6Ik`x#)C`xEN#jYEvA`SZ0v^WO-W~b4S@(H)L2OFWoj|IVWnRmXYLE5| zrDW#jF%B=BOeB_y&q{L@!%-6wc|||IqZ3MIu~|pTJ>#^WMgeS1vPE#W)t&S5tGBYu zR$6YvPZWOL+Y8gN$y~C0GM$-DzBbdF-@j`nS6^MUBV?p$KK3<`rT_km(-xJv8l^S) zeo;1zXRpXISqy%(^WIp5@{sRX-6p#4-VQ)OHF<6V^{a^)m7&Y)91hD7%lS`sgrmC0 zqIk@e9e;aMs8_T)R4lNpLkUrhuxXCCUW5yRqS&B{Fqy>=b9RpM2&h&M2k29kaGQCAu%rqL9RcdwK}J z>6F{}Td9t|f(IEjNvOy6ekwunS+y#MPGDTfZ#M$hzK+>)w6b!&T1>no~<4m zLpOFw3uKiHM@IuV^4eG1PmE_}=WU6%3D}L+@3;hTZ8$Ku9t-wAc4OH2L13B}ta<0F z3pSd`){GKlK}=)@p#atrI=GiiO}9C`?x0N@KdoHZ+devx6u_R<&PQjODK+sFigju8 zB0>bl^HOU8Q}JHa%^%=0^O|?BsidWZ>$_%-d(Li41yZS5XTM|mIZ|ZWX2B92k|%Bd z`4GW)4I3}%z#?31_~fgM56f_=X)bKT`_2jv4D|MFZD-4p{BOG~^-Fd8w~1_9g{=g; z*j8ZEuqD0vGAq)vDn`+PyK6ZT-G1*CM9RO;1(=wQP^if!DU0K#0q}p0F&FX)1|*%K z9HJvK_L`gd)ILhHA?xdI14{;V|27$nXRY%El+v~m%2 zja}Smm!gXuNLNkge@VhdpOh*UG98Q`*sjr7KAh+eYP1dmeoG@bPdiy|1?zH9)n?m)=^_~p1 z*Ln@SJoaMF1z7X1w`Av6y9SnynR%0L*E{cyIS78TcCcWmaf_P{ZQ;pV_i_P$Kh<7_6Hfs&z`C^QjudVuOIlx}M=Y`M z%<4pVqM*`V`Hqmn&ADQ&(imTi{LMMl#K9ea#oC4yP%#|iien;%TtZ9dN(a=L81-HC zl8fC#f;og+fQRVvd}1#je|G{?y0MnfqcxA6xM3eHFp}y zwpXz#TrB`MR1??kVR!cdKxi6LCP_+Q+svJ(VxKe#N$CQG;KcN@vrEx9skYOpy$?Iv z-k-3#X?9#C)GR=`+FD#rtt75nufNz_WfcftSqCoED|pm?B2+^?g1t0xxl^rY?}2>3 zTXXA!B;k8Fb!K6=^_(Bm;|P?`=i!*XBS)3UUN&2o$CC^TC=lEMyt|kziJxiV&Yw- zkI}eJ$a^hR-z-RQI)iIt>{J&iKaTnv z&o@Rch3neibKPC*WhqYdoeHpEv^(a3wZNN556C(+k^Qn>P($4%xzIYbl1bcP%OhYa zcp5KN()+o9aB_`1%iD|urSMT+0L8&9mBi4m?nfE|k8K$k%F!=c?mnjvobeqWPii){ zK60r6F~xUt#qLgln=v7It!LDvnsgjmcpaP~`tkxept(OrkT?=c>$&+`Ymdfns$#W6 zrgKoy(@hi#VF&EjxDEV?aPHP=j+)r+)Qpfb-FnR1F(F>WqebTj%(1qv5Uq818XZu61|sS3g`x4Zb@vBbSCEx#93O7<0%{1++4 zq{F9z)~Qyab4&Y~!zDO|uFwxRj&7v5fAS0D>o*IV7-CV;vh*V)Z_Wg1MdN%=vQ)5i zdZ79x_&W05X#8-)O~?i#6M41 z-#3}6%CmAdo|A84u?bWZxu~QsH-cGiq8ohuSynG=mNx)@DwHNB_q!$e1WqP=FL+}y zHC(?bU+0LtzvRtCeok6zvZMxy;%(nHt=XCElXq3g^8|pOE6dd}*k#(>3|y4KwK?ed z_5K=vufTrxM1YLlBKvw7X^?+!g6&9kdBZ(xKlPjK%IT|*Hvrm&2zeEl1$KUVvaqwG zRzmRopH)wpTFVCq#P=FQFM=x5& zsEN35E)LG@fI1|rq35I)N^lVqUw-pyQt8r zW^Wx1&LU53_>#|mYZJiU_(nnTvf4?DtU{7{fKPml1Rh2|n*y?^Lo;U+RIQ@B5p`ra z6+pYh8=2=m;TNS&pUJwa)a^k^!$;_8-}J@+wfbYUcZe`iX%ES`|DVWd9VrsCQh zP}Xw$TdENmY@|U*wUA*~dUkb>@9W67<-GFAC~Y@lleMj0Z?OTBCa<)aEp8$_ytPQA zX>#_~-`?l%6eh~5|5<7GG__LHmHa`>aXJE@rU798%UT(z1LU124HsZ*7j~FzK2i5T z^EHdtFFvB_7TY9m3G9ndJCk{!*zaDPw!8AUK(h?#OhIvstuNVz?j-a z*yatGa|bmkcTpsiC}nN-XHl)=MEW(NW1;aHa>L2fA$cJx;RAMZ`}2}Ap@go3Al6~` zL2|SI#wf-;QI^S{QQb)Ewv%YV%d7NrWO#WyP;{BLd3r7Xq<3jc$iA!w*+pO?CUQvG z&2U00Kw#Pcf~}{rXD@EdQr~^u@kb?1_8NDNL5*iQ!486I2w%B#rdO;VE)x8+^!0+R z>iIp8NYwZ*7B(?wcTL~^@sl^bjb`D?Ap&YelfIh0wfqxvR~`>J^$u!3l&`KjC%B`VL(uV$qTvo~UR~@MVm&A7CR42M=(#~_V?MnDkO0sXVc0p1SH5!} zD&g0J%1-+!-dc+6XUX{>#(YG{LbPeAv6ReozEP{ET|U`;ATm+hC(J$16zan)FYC*V zik&Yl%Z3^K>OU=k%;rxhZ#!&7Ne=jR9O!#MzC#B&@|qO|b4cjJIy%pVFLTt;WzOP8 z3+%$&`T6sqMo;v(eu`h4QxB9JvUSU)jVyLG@+OuM`?MW5k_Dw=&CKsJ z`%>ALoBhz4=j?HezBXi&%ojq;qpD^{fQJ{s`%mbkOta%;AySr)6Dsd8AH@?3iRH+D z&=^Gair03yvi3t(>;2qWR?M>S_p$q}ndxy+ld8s5gFrcVPSo)YSQYVbw6xBs>leo| z(fIl%+{L}Ha_F~7>N8J|RZn~_Nqxj0KegN2X!MtpEVog;uSMN;;7aD~Sp9y)hK4~9 zK5=<{?6YfP`C{!!jA}ihUD^|zwUCHq!yE@{q|Y#BQ=It{OpL=m%QNZ~uHp;BRhUx& z<^jYcU$??U@%BI-NWB{8oFo?Qy-W}gkX_Pj8GG{yyTd*-vb@!c4%S-MCEXps3AIi7 zfVRciRO2R34d;&ga!2K!m_WHE&9f6~>{WZDz;+n9p4Q7D-M%ERO!nxz8!-XYDX zP644`5`yz%XH2(kfgj^o2aUtDuJBs+u+j~>fNsGYqc&7*-dQ~Kct9;e!`SqFeP8U^Jz6hl zq-EijJH?@Q#Y;b9*69;`*-j+N5mPnJoC{~#Fwpvtq7W})EQX)z_Ox-#ZEbqZCyb-i z$IO_NU{$(p8z8GR2q@nN#6W-hNkt$tmS9U=92B=g&unupz$M1+Dwuos zRTpNc@S2^=;oclP1(l$68QL5=Lm=|t!l&)|Pb{)e`V4(S2lXEW@-n{` zUGICaGINGZ94XN|R9$O_I;ZOoea)CBwU%RuAtBgG67_g_ZWQl9WsMSPihKD6pLPHE zKmjo&kC~$2#-Ia6wrDKq=46|$)y;N!dLrep{B=^(c@1*U$blvTzR~+jNLTLxZJw%) zv2{Fu_Oqio>7_o4?A+zKjF+VG-W{WB{_CO_tc#V1p4LxYXTA~Alc)Ddx=vn97EmFO7`3)}suD)i{DJVT~DYAb2wwiHz_SigN{JEl*B#j@z^_Sb$z&kKH>O0(i) zwwf+b<|Vy%n~cNt)YCd{9myKC6;tK*4Wld|x-LRATm$Ox<=e0NY}M8`nAX2Hj9&Ml z^K`ZmJ?9l45T3Z{Ao3~LZ^Exhti2~$(>-m}>pAGzEDINs*QDKhj6~0GN22EJ^KjG- zpMXfV-9G{y^+zDlRz9`0X zuB11QGe;v|pDfO;flPyyTMmRre-NFxFgQA=E+w)_Cv+wv=AnKt|JTooVs-n|m8nvK z`3c*Zd8E;Y*43#b(!aR*-}d0FIKriO64-kcj`+ zQvp{|mVsBJo-Rv!(1t!eo---mxjFkmJQ61h<;={ROg$obu4d=4dS`Fql^NxJAeEv6 z3u{nyGz^7-z>ocmk^+I-ANokuPyJz|f_XsXy=L;V|CRp8;$LKeS(foVRVJMM@=An& zgGu0eU@8Z&Fva#x1yQ{T`#BKsLq+mT+v1GVJ^_|yiDlP+;mpCZ0tO#Bv~c^Ps@93J zv8Z{Ksd~8^L#l?u*K>;3fSZ?=b<%n5*p-GG%a^_V$XdBr8)}28^C8Y}ANdqDOF%5T zv#2F9?@ghghf_Y5K$kv(P)~IHEDT)JT`VxOx4-*RIVaJiJ?4-cL?|&&)Z3 z3?x&_Ev9gz3=jpgSN*-=1UTnUoDTmp5ad}DW!J)^$a&V{8QisZ)>Z~K&iF&+$Gn}M#>*W z%DT51vn)e6RP>o>!D(^tu~SP*@mlreU~AP5VkWY?Vz2fXPP6;u+73gOqpnl88d=W@ zbZt4f30{Gdq@lz~MzY3atdrgu{G1k=Kktl; z@f?G6S#-v0f6*uXqV0&jg@)xjWWiDXbNPkp8eS5(Hha~{3>yQ0 zZ>kChRHX+nkT@1Trg@?^IR*zfFd8)R0Np6p(Rx1|o>;NJ?~4E>dl4e(R^}t5)(lBj zE+K86pd>roo9eJWAsxW=XQ`5u`6DQV_V; z3*y6rR@+il-K%99>-de{XMB0oo1tkD)M&2VIa@DG{=JaV;KEs6QUc*%{!w3dyy9Y} zqjYSCEmT7CgYlJ=1Vx$>rLHY1h~O^Sa<{*_*iTyjtc+=(8uXmWwX9iTU1&@WkxTqc z{13mqS#4s;A9o5W94%;RcuY>9k-X|@O;?{~P1xhXAV6z6D3^l8~k|59;460PyM zW^JU_x>;uu-HXcUydL^*SeIgo!T+>~uJWvji~Zj)5lrtO}#zfrTF8o*w` zL|{D1O_zV$X>$B}fn0s5ebcq{@yE1Cso$f!SQ^FRo-hJ;>Wl_)r&O6sM0k&D_N$;H|U+I0eSeQkGj9) zw~Is;_$%pz_F+U@68A43j_dZm11MsetOpCc8}D2QKTBCL|9hu!y~pql_-pry`>)L{ zc5%^lW*MQq+HXS04IfOGJb|(tmy?9WV+;kIrn?52Q+B>YGR4vue|;v(-ft)o z;KP(nr|-49Ht1>u`W9H@$C}g3QqQuL`Llr}g9U{)J{<#Zvi9sC+i@9HR%98d{friB z>qzU=gNJ~UbU)x=oWOHqX&tRW@YfoI)Lm% zZ9l^=Nrw_^KG__(;(Gn5=pQh{n<+q6c+8tKfdlZQsK8@0$e&x>Azf}%hn(k9unb+Q z?!p(sW4%RnE;P^kKUoq*yaU4n{h$A@Arzjt-jg3LA_Zj&-1g2BEIFL{6#vP*O!g^= z?uLNx`j*!9PonC8s#yd9Lo+8>KrU714?YbKZ_y{%%WL`j)lBw`ADqPJG)$Z~hMr8V zCH?!~pQ({pqoSvj2w&;o^*@DY_gqbgoe>bo9 zB{kn%{EdYhDCe=g9xEgBp9s&%w4+ykJo;%Ip1M9a&}LuJNarQwLkVi&dqiT2`z^93 ze%sy55(X9VqCuHOH*<@eq@*P7@XGs9X{LWyQDph-I8RrX!TwgSy9XpALSIsfwZ#c{ zf(ss%S23N%0~o*&?EALRiAa7sqb=xmoeMSlA{ueT76W1@*+R&*9=@eMW6_n-Ua3$0 z_f7AMv_I14xJ4fcW|u3h@XDOtlcAE@%~3;$;l#3FxF39dy$W0JI5($3G>ERyALBc~ z?u{%n|N90{qcra`^GK+9^JnzKdKQBRk`AeyG%|I~#AY4x;B^c-=*@hJ zlYc)jf|!-_*{hY-oB7SV(DdkIJ-4tpW!Bb<#G&4lVwf;C7398uv>WSqdHk$By6a!({~{zwCof>&XyHp@RI6lFr7j2t-2`7JT2@&ODVA(5!nUR zQB9;YBZDcveHe^R_eijWPxqcb(S~kA8P@OY)yXDC@Npx01O5fUx}N_LBxx+35vx;e zi*;xfFo(>L9BeRqi{VNan;Uje3saCEvxH(!$eLv4v0E%#)tcuNWvMzHK3w{5>y!7L zIIZ^69>b;ru6HLG7*YE0Wx7DuDh9GRWoJk3qK2BTyWac9XOUu15_$mzSeWTFpbw#fkq9bkG}qHidGr0i0?3zAcM?Spx^H||wnn>TkG zdqd;PDz+W*)aUqDu5JZ(&)lkmrSEt{FWvznMANB#=xm)(0AqCS&VC#VGKWLULJ5*m zK+R(M@9fhxl5s0AOwKQ{iNRmq#ame9a`NpcGefN(H* zV~E4{SK{|sS0Y3_wo)Dh30%d&&w1D$Tf;f-OUH+j=-AJ`Sb z)*pYrT6w5Perah-D&jZvEQMZO2RZMhHlY<+Pr84fl2J45gz@9;(PY$fn=2`2sM{Fv zicgb^4r|*BUMFqWPAcRSFWB4NPS-H-;4Mq_y;u*7n7NrVymDt5gWCe9FVk@c;Ewk1 zs%Q}pS14-P2Qjn(71q)|BlBqM(rb|#E)e)J)rR+10mjq;A&iJtV7mu_xnrlPQi@sy zvwM0`9X2m&;gbPiVMg>|^-nt^d_(I{`J3Qz4=$&GN8zGJ4tGPhAj$C~V_NxaAx0UT zLHncc;Cd&?&r8vHI1cOo`(BezVD&!lTqFAB6D+coai_B_Mt~b)2OMQ5%;A6#iOm9^ z!9rlL`L|ETAI1LDHwNFV1NB=41#-fCdwni?Zz~@gQ^0%%Er0EO3!?K7QT!*a3)r*pon?MEZ#-BRisNG&CSyBbx5DY zFK~d5Xq<)v#CIS>I>L3N;uG;F^z?$fhFnKNHrFNZ;L?cG3oX_9*c{cQPE zoXfC+@S19F{=dfac`!u`|L8SlGHRe`Sa>IS2!1xrF#;nFbT5bOT_=?5cf^DHkaEOA zagxc-DU?p7e|nzcPB3k(;FI~70g;!mF+S85BYh+{UutPZ@`B&8>)Lc^ezLN}64#wg zL)hW>TB3NPCn}R&8^F7Kcc5`XpG<+ISNQAg$!J>(JGQ?|g*Pek?AQtQV)H(bxmPZ` zFEvnPLRJn7Em|H06)Rw?ILP=w*mxD7z!dZazhB~;K%!TijJr=KotCs_@vP3kQ_^4h zFlvrcChjz3R3^sb-`=9~a~BG38=C;I!gyOBmb{M)DB7dm3qn1>_1Ij4%1}V@A3FbX_^x6 zwI>i?On}#LgeoE*X%5EB>=NhiL*}zBmj(*C5Jvs9Wq#G;>L5OH(&tQb5bw=jn+Wv! zCU%6g6r2{Wu{e+QpIn`ee}2&C8?ZL!^h`iWg}|B<^H~$Zw@+iCpXcWPJpm{4P@5k~ zB^FxzjDnb zi4v;^cKz?AP1wwZJ-wIXIK)mYxdRHkMoD|Q7}{rL7lL^ZxfwS^32ppir@oOxiSfM zy+D4?_;?znUHZ6_c+x6RHO~6AKEo$SL+uB3D_mpGT@w^ayec?$-xG_!he|r_6A<1e zOV29xXF*az;MQV?49CR9TdG2Y*WtKuC?G*?y1&G7kF*SSO!+zW)jd~02Bwx;$*k)8 zd%G+&Wnh}5qs+}NWNq4Rdq?cYxy?uJ|NgWw?AD2(v5Z+R7+sfx1psk4@cIC>Wko4s zbBIwX0P?|zN_#P|S1&^#n4m=K7++f8 z@JG}XYz|TEKWW^bUfMSec?H~Qx+Wvy0|bfFgxC8RW1V`mjK9u7BnOKkp5gph&T7m0 zxlQYutm#v!sD}ESA9ec#KlSzzo4AUpbS{Ggn2gMq55aL^FyDeyb7fQ=4In zGBB~!Vq~&|W3DP7a`?2}9UY-YP~sxe1HFDQ)RT}=LE^WDtCOSf8$&r+1Gu?S^UyXO zyVW!%i~}E^14qK>yCbQQZ=t?Y0Ryu(D_kOuuJI)M$Amlkmk#48igrJy?AzS`w7Nfh zeHUt8xYv(WaYk4vucdvj7~dOKeIKM7rHntq8!=ed?5^WBuq0Q{eqGqMptiuz9SD5N#wSUejd6+z_BTv|a& zQn|GDOW#8fSf4|425?n6L{dJRbCs)40>NZWljHk&X$`j}zAr?iV;uoiOf^}P3i`^ZvIVU?9DDpSE4lyCOY(WxI9=%q z@m*!MBRo)}R#DatMf~m%d`6N3bySdl0|Z8m?`a;6sFB!SH8ZCS)oI!f`hjQ#op(zgYc1ensZpL812|VTk_r;?re<;P!194>wpFr2N{)5y4Sf5lc@Qv&y2XQ$k}94-hLI~ zrAtgJi52E3o8MAfng9h7-dLdo=7B0d3+-4Qh|Hs{Hm|++C=fN+#GV#;{lOg|*-CLH5EjJ()0c(z zIcg<50(4~A3BaJG9oy4#!*6fsv8W56YzooEa|a2~kZUUT15qdrZ%FFgZ&lRN0aB2L zarZamH|*;#L4`_R>(SvL4*1oj?=}~zGlD`r4(2UPM-HD}+&{a2NpcHTd9sn~gHi`? zQ}wG3D7^$P;NJmlG5&N%MhTuW;a@QHnXV5eZm?z<^}%$Q8o)ZNsZcwL(LP4gRzIFg1rh|@IEv=r7e4Agq=CToC#;-FZDXN&TH*A||F zMjPy1T)HXm@0|(NmFNHc5@<6;DxA5R=8u42(xLG)A&>N-W^o*0H_dw(8fdg<$^xJ^ zn({j14=322)G_zJ{MG=`ysJBo`CO`qg0 zKp4LKgE}a2I|)+3v{*PUwje^}+e?-)2Jtf-Xj>CQFrTA5nP8%7$5aY6Ck?7R(_B%T zh=7m>@a&0;5~@$}COI^8?IgABzh7PvNvIrs&j=a0;#DXEQ{?CD-0Du>$SD*Q_Z_+Z zcZ}p^=IHo1L}z-xyDEM>P{tyHyPcpsCH@BWr^WPEPHDe|Qw8AhTZRG33wGD60or{J zpLU1Y9*D#8`h3J&DMJ!Rtk)jS9HQuuW+XX!jjq5H3=0ALXC}`l+v2bpQHU1cvN_rk77Y#H3tqNkFsWtI}ks1h{kMsFvy4amWGo) z^j#-~b`?E?!R*{aGT_srDW_&3V)I_+)}7#frUhrfPpUe{_*#<)QQoCG1Tmh8Ur5mS z@C)kAlMYZy;uKuZgAGH==dwILSiv=41_(wE6p2iT(P9Bku$sRphx3;TzK@8{1%_G0 z$c*|$z!9qFX;%X6STzqu+@>S@nei{=vaEhM3cF%_D@&%bt?U?i%gp7cM?2tv#iYr{ zMgbjBH`IMe1o5(pRm8ec3AxlvlBE4mHTt#mJ17K^2N^;`rE6UBc`(}{&X#}NTOOGg z2QLdN*k1Ao^G9M3BB?uJ=hjH`q&f6FvfR14FE+lWeD4Xxsu&ouy1)X8R>eCm!G_C! z*az?CVEi48n6&l=)+V7?(7}tB{EIiBvv5i@T#=5b@F~$h2`@TO_b7&fH93Gagq!*eT3K-rv5Rrm~*Y5(IkU^r>L3u>yfJ;wRpGmKQeh^wHHX}KxDe)DIa-|@P z6Bv;3%6+zoUaE6sWH>c*b|kE>to^q?${w`PWC~gAFc)V{fiON^^Ob{01p8**q0d5s zd&23|YAF|YL0~&TA{V??CR$sgmA0BPlyKP^K`~Uy^OV1CUY~ ziQM4mgf2)?#(XrO2xt1OQYoA2a{~lwHqa}~fhx)Y*|6|7emyMy);FL-VNo~|%ioa4>hFnTVfagFI`2F{4@m8MS!aq6% zBE~nvS3vWG^kBiszKX6ibK??rcdpdp+g+nm_PtdHV;amaX_^A0iAl|TT_j3;vJels ztVZuIX`95|Cd92#<=e|a?K1urCpcN&e&<4H`^Sp?=^Sx;AM^JQA5Tb`ky-9P%`o&`o57DrMW5oVgMAQ*x?8&NM2O0AanVfK zh-Y?TQXQ%|CnR6;iyaXWLsBN_O5p}&Xr7Zm$aP~LXx(%O6`$(Ie^(T-afFJAA5F*z z0wd^z${5ZLIc0ah7qjgQMlf(FgF?gF58p~Q9ia--GKn1IOM-@&6j~43UJTtn+<=tU z*qiAv$;IhIvbQrO8vc^9R#}EEG)Q1F!V!3PTTkH~rx(t{V#I zV$WhYUbc0BC)~kw*Nr4R<-{xVlv)@LLtyhmosiBy)ddfP1Z7oOe)zKv*o863pVWuj zwF>)w9D^JZl$Rakqd$Cfp=v{4+c;Fs-s#n{k?wh6S4SeAO28zzJv1U>*pK3+rQzJq zNx(_6P91}^Ygj47?|I5XiL@ki{4(y4-hT65Uho>QuiS?f=V|Bo8D>c_RQXug#P1DO zK1%!7~;QsmIM}06DX2AA{o^$IjT1q))q!Yg&~!Pjd5tb2aL;w3OWokGjr1% zO;&aY2?4GSc70Sn#D~A1=&V1qx0O)wM$#CiR@{#-Y2S&U*I&u7DgX+b!md}*^}7Rg zLwKp?8Isi{{*pN92Ts`a5zqPZsbwd-89xwb$6qX|>7nq1&=5?xMCE%y!u-SvQhGX{ zvui)Lf*M}Fd#BPyiRNG3zpqbXcE7q1B=_*lk0gh@fqDs-y^9cXS!SiHffU=+OcPNT zwfoc^iS5d&zaprD#7v?6AjC*LoJkI%r0W;{f|D=eD@33BFJt61Z-U}k(I zy?)URKPj53t=sek zl{1<<`uq&PlgcvZEgEw!?oyVSz+YgL3X(mz)1V7=0-o0A+C|~PMkMPZn=2E7E17T$ z%@M=}CMS*X*}b(_=aG(-jz*9We3=6RS>93$^5Xj*DDA5t4Wu3Y0?Cz*Yw0oXS|M>? z3}kw$i41xaCjTe&(1RIhG>+@KJ}Zz6+`u{;$(To_{iXBK{LSVBC`s+LF z1wN|?z=qY1u!fTuP+((;`#1m{Wx}wxIdnuO?tMZT2^nvsDd>SMn+bEsE`3OcRR=0j ze9>2(24Q-lV2SKNAgscHbfO|9V96nxhPEE!H(;m!Ep1PaYQ9Ly_}->lG8tt#IRh=V ztjQb=QzOyO_6Z0+bj9g59)S7|ECWR4^K@^`9kkB0nF}edrV06R;F7fA@(!ssiaZxk zeLpth(4-{!_nZIEBm99=Ylm+onnBBAX6}&sca9TCGXCRg;r;)94!~zCS73}PU=ehJ zpQOPx3s_hIOskAX0y8;9S+N?g^Jneskd`Y<(E~g9gvyvp)!)lriT)?IsS3_Rj8Gat zrvCTcjzpg(B-J9!$<93swWT>64p&#l8GJzR|DI29pYIe%wH{zJVj;>T3*}MAd&x4V z;LgEBpHK~MGO(2jf?uDPO)ioSZ5SPL4gcCSw^!Pv}&g-BsOu zF`G+c4nJ#<3Y$L3h|~YM3bUB{-;DSAORb})Y5-6o}R)ii5qiIT4D0~)9 zKhe#c&IYgP>cJxzQr^oq)m&@1?3wRZnrY_-+bdLr-Sa(ic3mNjV7V#;-$-F^*CajG zB0YCz*7<)pJDFKScM8ntFFXqx9qCYq<#cQnm{P?F9>Tk2tZJ6<3vM18ZmaJ>aLe)a ztPt88;K~+*WtRe@IVos94^98VF4n-E{PiGMIP6Xkb!5fkIqk`%rHN~YPc3=dLobqn zfRr4_k+%0T=xYx(fVf@CbN}Q-y zVZ9Ws4UY+6rlAPEiiY;zZKsM8hr%f|PzFW518EHkR}Q>W^pJ=_v2{Sr8EeJ_cnO|o zVBsV#zeIWzmFOfYECf@@)3;up_piA)55&nFg!C4IJp&+~T)|+~*dADYh1L9*9-&7T zAb(SM@iV@_MG}TTk5Hs6&KrP+kv4!HnMqOuqcMz@wE%#l<((uk$s;^sDLb&b3&_2i zSQL{zi%_e(=wTAl9AEG^H;pv6_CV{gm-JhnI5{Ts2hn*O$QNiIz^$iSX8+}xhH#J^ zTw&{Wq9Gq$<07u53-U1$XVrL3FK6-BPe8a`&Os*zLPF{BY3Shz@q;SE2dx^$YpB{d zgdtUmz?7FK(LgCg^)f#M?*oihrS9Or(y$wfs*Y#|=9;0CR0C46j@Q`~pW@5k-B zSEn)Vk*_(t=(Dbe5OKUDG?3u+Gn%M71)+T+T*Yvnfi#mkE!!InYotD9- z(N?RSZxzb%x2qV5)E1}_?E8C;&DR@K&=CJa{dUjappIr03yK3@#O(0#+^D~IvtSU_ zZvFU*Gu?D(*zNvfs9GEdYod;g!`ycPN4*m6CYkghc96l0Uy=DRB`p{hn0+Tn(i7Lq z7x(o)IU#wGzF#3k-$yf#P$dUAZc)q=)kxoE&!w&U@QzV^AEo0A%xZASc#Dk<$1m9} z-vyDs6NKt`S|}~lX1)ox4#*KaHX>tjGef8XT;xwmBMSA z#awpw&FC>OsA1?{=1IE=70hAV_n=+Gcf%>T5ksyh09fYj>JM0Vp+5pp%0sZ_&1Zeno=nAdmaNR<5wLho&gGLiMIB^ zYEIrj)-rn5#DSeDPGILZ@*1KU%X1wyHK9EqobP-ZLNZD6iPOm46$Bg1fpZkXqq3k1 ztI_0uowfG%#OZS}cV9Ms**MT2;n%T{Wij=hK7l3-1vh`aaPWRc(s@8_(8=EiD^mqz zk>y47s1M|7l<8{1cA7GCK~72xttebn2QWFsGz$rLyMP{IG%&E0j67RDu%)R#AHaK% zU7~#&DZbrplFIhe3^Vefw!iC&bl2}SOl!UHxSV%(O3NJcH$cHfc|?~!KojwxUS_{@ ziF056j-Dg1Uxz_SHqIKV!KE*%Bh;&3lEA^)rRKn(u?sr7wsv@s4RX(ftY-TP1UT&g zB&0#Wq}NQJlp!PMl)(`O#I+s4^gFOxP>L9FfNzE`)8ky332vZq9BLz`Qh;aUij7E> zqweu-l#ubyP+mfG1?oIUjS1;>1s|(K}&x#jwMpns$Upb2LpN zjqQIhRBv{7LE?#-rW!QL$y?$_t}s+S0)=CI`Xm^oU(rKJ%2y3ga6yPYOGDy&wb#xV z-9f-OUtE?>?E-)+9j*l=9mK*@whn@fffsJb!(^YiXDq{?iwErD!+rnvRv>ifnP{rs z22&R7f(%_jh-K_tPz4*=A@zqDjU9mH(9A4!oG0I#0{4trpo8IARJqHy#8pW>;6^Rm zK7oQzHhl^#Jj9}w8g$iSbo25W2b&|gJO8vNugt;IfyVK>Ico}$)R;D7n(w~iZipDu zxwxZM6B5RVL+X<9WW~SA@Q3CeKDmAl>7&TW+^X5%uHk{8Cs)mqM7KBLZ3%B5k}t2! zw3dL$PK>-7wNpC8`}2s{uZqV(|Y$ItK6i|MJAQ6Y5GzN)=Eh zJHWOG34_od!sm!Uq(bI|6CxCn2Q*|Q0L8CRPKsD$GofSY{Z)n5F(AgV3jpa`aGrX) zXi2#+s_w{?umI3@U_$|1S23gnXgT1Bo@3RmuEU0=tJuKGH3$DzZg*=<21#o)HO~*e zKb-ZnrAmFgy{Eu&pYwe9L)>Om`|`LsAY}yvA?RPBX-t%rl#AiNeh^1Pod8KT?qn7b zG_XzN4zf^&P>~(cBgu%I>o<+Y8iU)yojv>!pT?pX6)N_Sv}NOtAN?UwfD9kDg8DN^ zA;F?qD|8Ay^H9=17Al!b6jG0@KYTeR(Deh9?BW)_fs`;doivbwScTWRRIo7LB?FIW z(WI&R_hh}#&+kIXDu#8PWL)%VA+T<4V;ghN2C+V44BogQkpHR|E z6ePXtdrQ1I`6Gk4+CfkXd|r5pnIcLtp&2U&$ybEz5+50APf-}S+X*h!pT!7yLPQ(u zcQq~|dF@{yG{YZtH$pBUn5xKxv>Gx?a!5=FfqKik0<&v670qQVEkZ~KNcVCrlFYJ& zRC^}rvncB?GhaY7yIkxxQr@9AD;ewf0%V~_2>}%6a@j+Jtb)Iu;@hje*t(=GkAf+1 z5Uzo;;pWl@_Df7Y%gMJA+5XN$e{UzA#e3AeGFVB10Pmo!g_^CM(&hWGTz4U-a~GcZ zU_%9-Eb`tukm55yFJb&*nT!~DGsN`@(R^%R2YH%9nMP%W?KrQ5@pGhp>QHgszeU6a z`8#%V2uRC8*5v!|075)upk<0!{P?wB!h0YcJH5OCU0ftM96cKnUYaB*$dGhK><>(< z2huqpxreh3?4Ky{Qw;>88=zAc{~zqVc~p*j|37+fHnt%tV`)I8R7i>n6{UGpDM>Wg z4TvU0CEJ#Yil}5N(L9L^rDCfzqES@X8r@}T(kSQkzADe&-}U>Rb=EoGb^bW#cdutX z%ck!8y07aqyx*_sgRFwqk_pr}M-*awucf7%jm=XZ0`HPM+|q0}tiW;LU>Dub`Hjns zK=H1P-|=8pr2t0Ty@?AuqIO_-H>CeZQzsj~?O|6LT|W$GRwdRa*Ma~n+$~lWgH4e9 zyhv-|Qs+CjeT(V=;R#4jV_xnXF@CzS;k9%?u@?I@*xz8&p9@w1yAP34p;R-MNhfJ1 zV)|FKbt}6c0Mob$-s&5K3Vim5sWhL!VR+RFy(}ArZ&%pXo7 z)65k0rl$v&jovNgPxfZo-N()E5DEz~#YooE-~m7q+5)CE!`7E7NeVWtYM$WPNO0`M zw;IE^?-;GJ_U2xE8Y(x7P%HF7Yy_4_;vVh8ZlL$0@7RxU+I%qLa(eLG;|NGMyrI_8 zKDxrQSa&z$0abzi_vE)5t~LI1cEEO%3#RL{Z?jZ%Rcrou&0!`fM$oYvgi5XT*b5qd zisz#QxX^bZ&+C_gK}sW};IGgs${}k$NF6JN`(+|Zrd4f#8&jmJ%%Ai#9VpyAg9LWI zTaH06Fo-28vi9^C1YIpO0ke#j#!rwav+1!A?0s@8*J5-2y|;^(iuBoJ*!yl#XfspSrL*dD|T(i4V(Ka@m95EQZm5C*%%M8KH^=__U%F zBmJa<${;EjD!rSi6&9!cz%)Gf5>>bxP-?(yV=H4j*LWQz0J_VK2>cUlqHU>`+CqdQ zVkau8>4vV>OxlZvA3@86ntjG?wJ==NnqH;1E(UTN(G(;M9YZ~h$(GSoA`wTRu#*0- z62!ysWxRs6)5z-(R+d<(@@`UH^c{GoE`Hj}o1E`w-<`rfqX7Kf#d77+(Hm(HEF&hq zBQi468dBJ@T4I$#tI8l44iwm+@Gj`YQ|HG5t)}I>>+$3DiL z*K}Q&$I_XDE3np+w3yayW_b==c=X}LN9db`_UF-U$bENvw>BXU^ommBTfA}?WsMGE z(Wq)JK3_%mEN%Xjk+T>#F+lUIe`@rlBFkN(eW;8`fq@_a4cv1_yWF{&` z(CX;Tr#*7yM&J6e=cbds1B_BnVAdD#&I0N0s z)^(r$dxzI@v}MdovS?nsavn)zN#L_?GY1rJc zUz}$6`w5FyNPl@P{v9~oOLu<#n}myqFe&gXI_Rzj~nH9r8zY zz?!vH{uwHpYiV{SR~Khv`>omP1cQ`_WA78)ycVC-$_1S zBBhdX*&eM{;LphK$5#^WANQU0{siniTNPIP!BNl@pn_)DO@rKWsH;?FuBWiG-2&ZY z!RP?X^zb>cF3fA5Er-zt6Jujzb_>Ao(k4?ZrXg0KkzV9oTD$++8nk+zLrOme^iO(F zVKi_AMf}C2jg*W^N_!DEO*###!N?#5l+<$I;Ea`@2#X=ZC1P_gws@kn?{Nc% z8^&`GxC?|)Fs_+)bc{`9sYkQzeYW6Jja$7bU7u{^RAx&b_a$d1b*1vv2ap~3+$EQA zx!gII(Y!JH0HE0r-nHLWjV&Z%2$HyXlFEMq^M6yk;#R5Y013>M8y;lixStGGbc3VA zvat_tpMQLEd_F2zMl?cnx(wvQG7xHqI1?Akl%TNet}g5j9zaE~rWbcEENrYqjPf?@ z5GWZyPgn&D$kqL8v1>5u7SieViDEO}u44f=C<*di`NI4T&IJ;E^xC*3eC|{kWqE?z znJ+@Bb7&YVPU)a&)Y7)VM=0y~M5zS18m3Lbh1y#9+Bw^Buwj3X{-BWA!{7*jV(<#5~AwWJ^7;i7Y3=(}C1y9192g$8M?d z=97~zo8IBnAj2`Lr~Q#+ z8$+42*zy>?+8e0d*bs(kP!N1OaGD45W3;mXIgnhFOiE01M{3*4{;%P8JtG5xTskjSCn97bH!&NI;JR=sz}$f?MkJUG?*eHfK4TB6k3qD+BVVP*o`>Xb|Lr*(&`YL$lCo_x z7UcLe^f=q{SC-E}CB@98BJr23b#WN3F_dFJTYvqkPvjgNCQT`^Y-G>9iJBr7)u22X zu-I^OYLN50C7TSLjBAx@D3VIClkYs&T5g_kQF{+VF7%!zmh9H!1#6uw+96UPUlOS> zd8KVNud=-;cwA_A4s>cpU^QLktSQX?xE~Uc z<-eosV*|sCOzQZJ?o{u|(a#bS)FPac^k(^@i(Ktw1{Bv*SsJ;TE$?JD6L1Q049#5n2dJJMuRY7SyFP+Za} z6VGaRNXMvP$qd8zM@%H@JTYSb$imKcF9?&>pg#K2 zdJmTot6M;46Ofve0FSxrQPitGlXQMA62A!!k1Y`^X4`*&;XC)O?Rj0TM5dA@L4D}+ zZp=}ATBrcx-|6~pnRBE?oD*xnP6d2XE%8ma{>}m$=dv(_07KJG62Z^RRy7I!S|k+Q z{Iv`c)3Zy##gP@W;kNL-hgjCDKgg5*Jp;VJ&4ZunVyI#bs--~_CGaaRN!^%o7f|Zz z$Ty^IHc{Ad;Ygq$$BpWa<5L7K(y=I6mN~#^>;}tdPz*Ie!HzDS8)C(|ibyU|Is@czZC5Xy0dQKobU4vd z>^hR)*jSb|h_st2^AV3>_fulB*_d#}O?$ZQ{e1G_Hoc@j>j7|SN3Q`|b=!5L7JIMv z4@oB6yTt;^vkq{S>tcXB&0_t&Ffat@Qq`K zNJO>AgV~bXw?)18nK)B}Bn}jd(9P)yD7#rwaJEwQUPzDzT%f6M+m*)zn5-#5Xj~Wx zd9uuK7}Ks_xc4oh^^`By39}SknGrA2a>)(T-5)>e5Y;`z(#Seg3Ll%#17`#s2c*@? zRnrz7s+v(NG0(1C{lE~>=_3NO-<_hAOE<72&(HVXJg|AXKP|!NVq^jrtXhI0>b3hR zA}6gbLzt%+DLHHL$!(cvMY{SvkGm<|AN0@|>RmJ%+CrHL_b*&D$~n?o5-wK7o8yQ_ zHxe)Rbzyko6);N!Tdvyc8#Zi7Gedh{2^Q({N`p{b;2Lr+h}7$3*q=FgI%aeEQgb=q z_%5y*rNr6q!YL0@22WSP!UZ4Yb7YRa944vbK1)(c-SxmHJkGwI&#lcI1EhOVYVnj= zL?>CKNYzEnSt#ph%%tg%O6$b5Rf^(1#*hZ;74H)`3h8Y4OWN0VDRN@ou~@rhVWMz{ z$o}11@|59&uSooHVW!NSQ-f>K_lJmcke18o_?EYr#pj(s^D!1cN{+IsNL?cCm;W7} zw40-@ZE7-=H_VVxefJu;bDQAy#=W5*4B?D3FgmeL@nZYs6K<(yi`-CFzQJUtX~R*m z)fz&{B&iW}@p{<6Q!;K_5wQS0Tlh@GhMDhl!khYJ##miCMM@qLA;-{YrNa&qAZBww zDjfkVrP&se_*V0NsOP^SVOp>hW7m8Urhw<=Vr;R2qwexITO zS0cL_gdZW}WZsFzqAM3UX*$bwNu4%wLvrgn4R>G1(i<8S{H5YQ4j}z`e)WhSv*BN{ zf%(#@GEvMG&`%rD zph8%>lxZ!O&wxHN&AFO`@6GD$Ya@3C3C0B;0p*EhJP0FsSZ^XmzTJNmgH0#>=DvKw z(Fsr`MRY835|pOQC;EP|XDzhY)ADE;YE|zRE;sO;#VledV~gLPw5}L(#cHjKW#$}; z1F8Da8h`i^rN-XGeG!^6KYI8eBzsy8}W;7e6S7S)KmHX7J17sVl8CF0srKkyvb5Fi#Sm0dt6gq+ZBzzRiE=0Ost z^6LT=BU@b_W>fl?pmO4Ka&{03!uPuve;E1GjzEskzANFEc>N`E^G&9b9_7(&I^P6D z979_XcZ5q@Zn}_k!LDFB@|Js{J$9{-Mwo&m$+{e{4axOgfGNxtw&Kj)0!GjU6qS6FbOtb`CLNs%aK7W^;KAuuHv+rb3|FRWN>MiL1&Aa z2j5;x%X_{=Y6&T0t1GvRA|vi^T^b3sV${G`dJD>j9j2!zv#MSH*ELe8-og!KU=3e4OiohZI(!&lUC9gyusNdm zN|>Po!sR57yh&v~t^ePlqt!uDfijI}*W$9q$1219#~|;Hg_d+Vr-YLsSBhA)&QhGW zK@ghDt6d}lz=&X@-Y831+IZ}Ir6NW+?f)d_jVgJpk{Q)P9{3yRp`Tt*p```VNBGErmh+RkR0} zdQe&f`^@U+8sKRiiLN&S$K*OGk%|sfG^u)H*(LK--FfZB?vbP6&H{vVJ&I)rCgjnu z(YP{lhFt#nET61O{1)GB$u$T!$ROQO2PHlnG?R6PfijM?kzN>L38*>P@Zyx^9qsvG zXjh6L1-zywW^NUfA2g->T|F{rC@$>6GE!{98@*qarMx4+(SS=?Y~FGqLY;dsCEC8t zxno1e=^>U+k8(AfuFtjd?T;KKY%X$2$XvLG$|sIeKJQEGTe%EqJgZPJ$ zO6}O{=Qx9|xRRD+!nvu6S^tFu9sqTN5Q%t4*RBpmFd z1*T-mTx8uezJ5r% zx_Clpaf>)H5uEN(DxoU@?Oqr%iA38#3zIf&pfhFi`vF@oC7dC39tSJF5WepK&x8`x zm^*F^j9P!w5Vprgk2sXaDC{A9(#bPcC&1t0k_Ux;QM_sD%dZf3-K6n{io`}_cVr%x z%4@Vhlqv-SxiNL}J39`N-rALTM>&t+2hzk*Rx`t7{{HMz3<<^|SlyRtt#W219Zsc1 z2F@DZ=#^tcAB%oDY&L18sBEL=IpRIx1+@?crS>?}h#?JEB`SF{S~<$>CLi*Ys#!b5 z>sA%D!t^qel8_+_pXv4on7G=$1j3Wj4AQ=>9gYMlv6hsvyqZdfC zW~x8V=a;qd*0z*UHfRt0Bh@WNWADW3HMnYGKmH#VjebIdkN@DZUm$m27YSD!cUuxX zpM^jZrZe^%QOdHZrz0r+ zl$rVHRFqt$tU^t;YEsZH(e>@<+07x@Bf7df17nk7q?ptopaL$W?_uyHH3-T8M<8a=jfF2SVut|qNPqA1A7|*ltsk4_h8>pl|$f2kZVydU` z(CwNJea+}g(*C%wHDA-uI^|seYPzOzrKDC+dndA5I z@gG?6UV_?i!_w7OPcBjn;T?m}>bpc;#}#Bw%Y*A=&Dwd;%rUQvoHExs^j|%2rpBdv z{BNVAIVAYUWIZe?&Z*<0<$oT{mAO{0-w*L@4Dr%l=!FIjLO2&wMRYht3A!Hb9J^AV zNz2Q>;<3xpP(U6keQ;koWW0)m?wd)=uCc4Zp(sKWBG+f}N0=v&-*RZ%MFH z*@0kE=H=rt$Nm9kkxR`<3|JZ9D$cGQ4pesG1XEejf>? zYCp)6oR-g#E^?Y!`7O9YVkw&f&G&|56@*%e2}7|g?)vE8%`nQ@4VjzrjPy5zGBI1T z^2r8EUe>n1RosySczGfR6lzuqH~_2NZ3o^bO7Y^J<)YLe${?}L4WP`6lsH;%`c;Tk zB`5uUN;@C;GZ5Z{R|xH7vOnOv_+37Y45rLsvS>Ekvxp}(*jaXW%T%(9QH9#|dL~?w zS_+W1R8k+h-OzY91z&GJO<&>cX7^&bWlgj_5H0mdu3{*>P^^l-x zp)J@~2NjqW`VhyO#3we^W@nPLFd`LjaAD=nk*;uX+1nX;g;<8Nil;|fDVrYSNIV&% zOvBEs;rT-mNq<3dWE>K>BB@81t| zE+Y)Zd~lg5li~D6fuO;;0;`cdvp!WC{^rtPC4j&r=ICz0_E*}pLRe`Jt$go`X)iubS5VWP`a(p z(PvMxVEU`hg_|>c4`Wu6X)VGD_NVpUBwj^igHs(eO^l?DrUzvYx`ExGxfEJvM`Bo@ z1X?Gia6VryNnIAZI|X}%hdJIniZy|wLa2)}7wi_1B8XE$TwDuiaM67-tr7sk$jnwV z97SswttW`pRG2c?{NCP(f3--tz?@00TKY-oAnGxTh{fW|$<@BQbu~`Rl0j4Dk%8Wa zWpJ$Qu5un(Zpj5tX>xqles4pNnXr`!?gNXxj+y+2J5JI zzlmGCflj9-Nv+2#Ky;VM9mhBgPy#=?IsfmEs$|<{;q)WWI3pf68F?Y>+6eiMR4<<*Un0fK*68)2Nobyi zP~}^jQr3ULv9rdD%Vv@EG6Uzi+=TjU1*v*>n;ZWLSTP0tEZKMnb&|gL?|{(7&6vm5xcl zSkrH3zI17%gP$1N44{Z}NwObF0*tf6m})aMWLC{Wy8S)0A!GB4CA>l}T=d!=)s6e2$c$9WTD4?Q3bD zRS>O}Pa;P`ltZix`IltaS45W#sKzfgx2YB`zXjv?R)t|;HkxGgg%YxfFL~-68+P@I z8ufepyEazYwithT6|V9rA$-X1a+I>`K+-SF;kuYMkz?_bX^hLSOc$X4;oKmpC%D~LVN<(O4Hk}3ieg`OPhBzE z^kB`{b==ouxw#q%PT4erkq@N9#3X`$W?(hS%3l8riqIra&y3{XWF6LW)rch~HQWMR zS@z!C!06r0{YGB4^}o!MsZ!MK4f2w&zJ?3DIH;F+sQtZnnxgl+_~2ua?JbJY0=fE9 zY1O4(fBsX(Q)A-pTQ0Rc3PHyq_1lp}6GL_wD;nduBdF68XRL;s1E5N+*nj-)1}A-? z^jg0&4XXrMTEtf;$I{MA=f%sceQpn%rC=B354&ied7yOgOiAI~U6^iT&Wz2rXikr0spG^;ZCk#@Bi1Lq31? zz>}$L2+*~#YiiTR#t@efZ7a@yIb(GAplJFEg-lxqww|pE)~q}3o3+NJxyUmIleM{{ z_1WdNzY9>OUxFRP<7%tIJ4A)3nw>=#U&xm@H%bt#X z=yK-|ISVZuy8UAso)^GKN9~5CrxX!5s(Y>l|-^sA9Hb7m@hh|0`eq5OSb%6=4UMlMth(uynpH&drV$Uq-xtnltP#Ree%nF@JW9l}mA@ju{P^f6Dh5M}hjH zW^|Ae8@eu+n#tpmSm+8>c2jCE-y-|^d!HoZh?ZxHsbB6ZE!i~3xz!~j%~u;zN?b!M(2crRxM*g}TS!S%OlX8lLKl78 z50w`@Q#y&VmOrxh$|s8&o);|lHy47@&fHkud+QHZLQ}wm-=R1oEN3&fo^#;p93;RI(2^iM@m`8j;u>M_*Cm| zOy^i)q)#o3-azFfUe#+SdCd6;tyzkJITpaLFjpXsuWs2V>_Kb@#3Xs%f`M|Q(^-x| zBTP6| znQ%$J!fQXOvVItRTH9x&2M<%3MCJ}y*iI3XAl{YI=Wjo5Lmdii%0n)}vUy z2z8z%+buov%$hk=36P_TV)GdfPm8CGMcGk&gh*cW4$N}TbCfHkunp%q&?}xJ(1;%d zr+6m69dCH<&d|;Cwh5CMfl_i3N;gjw6GIo%|D*7&myf2&)nlxYgGdVU4>%bsHWCAH zHadEjh@WAF{U6qWe=YFmmHg}NjaBht;=EE}X16A-+pKYGkza-11o1_V)>Aea?K<@1 zMUJg$Sk`ar);;XbUEi0v+U|3X>+cZ*2M@L$df^X5;3-mEtGMQdh!`S|{}sADn{OXq zJEK-tC3XHcY8okb@-SL(Olw||LPqEzfO0>}3FnRU0CV7fW>p*_;;<+hz5!<(37ros zfXU+EG3l+iOnEu@VKV<5k)J9}oePkz`(%0Dn(4)TSmU{d6BZv2_o<8a1VTQ8EDx`h{?!g$UVer%8&6}2nIMs(;33M>cvB~xVy*mAD9Ci11>XtDnrVj)TyQMtg_BG4~AF#VrX56ArCQWZcLjW z<*2E*G#4e64Ki!k8Bf8|o&nqyYn%TrA1nO)M?-JEG(yp!tFQVNBBw^qWBn=$1)c3W z=&QXk#0$Y#@X$g=Ig3F!)yC~YFF0E{mEf60?kx%}`CXK|knnI+&Ej)K3fg6R>_QE= zC5Bibd)8&zy1m1U+Q6}P82dsXbyDQxTp2NwCrWG5m~Y63V-Fgs3M@S#9pu$hx73(0lkf=&a_zK}i?05QEfQ@(u^)|8v)7Z=mQ=b5pYrSG%$pbci?3~oKecCs%+=@_{bJxSk)zme23Ddo zmt^Hg;L3MKY+#Bd_ixcHviz7`a zuiA}R$*M1nVS*-J?lc7s!=F~QD38V~t=*FarYifY+xOFP_cN7TG4E0jUZyJkFJJV` z^3<$7K+!H;L*yx5@fkGl5Lw^{e7q2-iFqZp)P+#+HKF?nLJ)e)K2jSga1_wuks$W+ zCLl!iZB%4Wu>cE#&IzDxkFpkMI`S;M{+{GBr_z>f#Tw$4gSvW4z5B;ktCssxHr9W> z>dPzgu9aN#sj?3WyA~d9>QaxEI2vIj*w0n*OsfoeNr&Q|6-oQd4$)tx`iLVj2lk&E zQBhINN2JYFmPF*)ZAK1M0J+v8+Q%k>vDWGNEA`Yhc0M>@wH`2uA-0|^_eF(P3IBD{ zqq{XULnIt6=l3n5LgAaGrB#+p)ngeaEEA=v*N-|-JN5pa+7)E8KMZk16&FtcZoJ(p z^k4B<^#1b&wm?~FP1eaCF03vZ;f=HX&O5wCJ>UNT`%n{zo?s%Iaz3H%4FI*OhB>bl zRE0meZGflVjToi4#s0R5{#d&5VLhKqdkfYL44fTUQj0d=W-ealLW}`uP^47<*kD!9H`_VB!Z*)G zMha4-Go81SXp%G!yQZG{ezCAK8M(vu9mPG|4AR{YIovGju&dGZ(Vz*XGQ`AYu;RIe zWP~@KL?2!Nb;E4xJQOymgiIJ}68y1%NTcF|K+Mxo<3FXu@`TjUsiYi3TEM$bcM$M& z;Y{`|1uO^4+;b=tcEZ`&$9(~KJ`EAk*1G!!MJU@~EymtXg<)*p?$!XU1How`_HggH z@wa2KGI{OIuG+r6W;-@jSw)w?gEOyNI(?$Ycuk&t6}lGxVFfGH*n9J#(SKpF76}Q- z&?3Xmf^^gwb0*wTA}KpNn@%<>xp8#t$COu0<|V>AwH^Q;x4oE?gv5Bs$ST^=!fn3* zD!(kJ@~FSG_Km;uTyA?gvI|#__t95w8QOrD;COnWp)V`Zp71UI(nSaI(t-lo;_JgdAE#x3f=oW$Ol)un~wdBvPk&Oit)>5 znUO?c^mW$#CqVC$Y_y^3P(Rj-0>Ihx$+hnP5phlkHcMPwEGaI7|DHJeAh zN2wM}iz;-YFSGV>k24)C7o(@KR}O$+ieN1@D{|>Jp;_{Wcv%&z zwGH$NtANAlxR29PMK#KKgd|R0Fal;+4FEzkc14GyD2^%*Y zYP4hg>$u34OQBMGg{N$TDpc7TpKfKBd32VyCMGk08 z2Q5Q&PEc|LLcUjkUPXF*0<#vGPUO%uup0Qf$z?+)`jWJaPk&6B-iTtO*tmA=cKTRw z$dIjvI?@Xk?+9pTF9k6D=t7+nSP_RJtAUEK(jQv6kaT4g>Z%+>Ni^6q2+nRkmf1j5 z(obJ_f4f7Tj$Oo9pOZw0CD5+KfO{LsOYgExK{eJkwB9WFgEp)PY z*vP7NF#R7!qtEQUM7{3tMixk%<_}w~01}sHXVCySTZK+nfU*HH--5`cyg}Xr51=*D zs>4ZM{G^(V2!43Dv$4NrjB~Ych=XGN-97X1$js83f}q~} zo(&RTvE#K0ek9&UIj<|^I>)i@%kP*)2hu{*E4Zd~wEBf;wi+?9_Rx7PRLRBVE!0Ea z+-zoDE0UiyY0@fWme3ig+IK~TmKZlE-n4^UbUMm)QeO|lU)Yw)t^loK)Z8SMHh zRQ4|3#6mTPoIzOYeGG@Ebl8vH#!eKd1sGxr$4i9HQ%b{&bG#5X!|b9}%!H1w#8SKf zX?NnXw>L>I|A0Ej1_!RNr!FgQK@H@cVidT-?A9WN_L_0d^Xd6B`LDr^^sJ_0_tmUK z^+}q(as((>?Z)cZ2^CE~(A~>Rht98_6jH$#q7*>4&g>Y1GW7GN(3%Y)e|QEbkMzxE z7b2?-c`4SMm?~=ux@bwK{Tp~-pc2g6?0f!rw{<9!cu40!=a2Fnh6I*n?9L;2-O8lB zHcgNS$sZryKrSJk#b631C0LfRxeHX}9PN7mW~=tWCu)^b(XKqJajF7f;6@Vk@Qj)S zBT+JzAI8qR*6b0kv}oVlHJendA@}U01CA+2tsf4E%6l;QzQPc1LS$Hc5wpJ=PsQf0 z8TW^Vp0K7`VOeRZM3wiRy41tXzEC=u1eTCRF;u!-3YC37`6ef$9TExn(XYE@n7&$- z$3jlzw@UwTrWN^d;&RJuIZ{)ap>8_^E)Qf#&Py+nm%HU)V5S|sOdS&HmN0=k5C%GI zcM&Ykn1@KMmyz9bpA_R(p&zGUX6^@&QgyO@qbf8m^J>A?q#H{wCa@ z-DF5%Yc4DPz)7U@AWu0yecQ%h5IsJLu@)0KaQL;F0=J6vl039}JGiY;5N}q9$%j34 z0Y=e^7c1~6kKj-S4c-~LxqCI9d!nSYu|ROFgH*<=M78@`Z})J3rVA{z1iMEqaA&y+ zX90?)N{_qPreF3<=U_#3ErdXTb{>SdZb{rQu=jU_moRhW%X|RT3PDA(NKln|-xtAzhAH;3hTux=feJKsAh#G^fXf+g4-b zv97P2j+)IY6wsv|PQS1cuRz{K7K!*0i_M4e6UxaARe1F?=Ok9g|S14Zr6+ra@>* zyzy~gfL&`h7#)BXPE%z@vB61AI2V1~S9|t<-D0PJeN>i0wkGq1SVf-}5!y*O%WlQb zP#Djl$QcC%l`hNW6;PY@d@LF7SU83?@ZMMur%&LZbFmasRI&M&bl{n|JPF8K)7I7& zcf)G#i{sx_NTr;Jq!LHtQ$XD|kY_WfZZvy|r5wrub;ParBCclo&;*n4Z_6iIcNI>m za{G{in7Y+KSVhvl$q^2n7f0c>HE+?G!CUN@*(=C0(?8U@IkdYpI^Z)6&&)Zfa-uwE z@X1MG&zp;}y39d4wqHxloD#OFqjx5#%}8rKiqE7C&p*Dta|7w55_d%lNgP#@@`L$e z2J=W$6Iz6}vg+Id#G?uV&Rpprh=)|%g4~Tlup{$O!I)Sg#3273(FG_}z)a@DeT%eHy(EqFslibFQhLF5f1@OSkg7Ls~(gt(po{JSK zt4P~*6Gi9!)lza`S2mOgs{sCVJ+nD4(7KOU2YC9+=ydaZoTAu z%RG1dwY0(}2IHR@=vi&3Ua)Zr{~SC6y?Q#Jy}xwl$d=ZoD5!gY0qf_V%Xx;fyFFb&L<`*W)@qx-Z&c zlKyZt2{TE0`L`f6Q3o1fjh_uBpqfTBtpGFl6=XmbP(vPs>eKdLZ5iN!IV6oC$jBLI zc&K5;-dfj+t}k%)b2*_mOpK$t>)6GzT=czTKYxIBNhdChrolaU*&EUIohAtZ|6lJh zeTx3oNzmM9%gly|2uB)fJMG6k$QpmPXD_4cGrMi83HL{wPW{W&9qZnVf_#{&x;)q& zaCiuPi+}1J z0m8eVunNmIq8%MF#0*MQdeC00U`~WmG%(F{gryb$6}}eq_5g~O0-7q+L}424{@164 zoP7cmY5|4#6I_csm{GZg01A|i`2ch0krMA;H$fO@$Sj~MNB1Fz)59|9v6Nk2yOIhl z%or~|aCXj+@2H{Ll778>?5iybpUB}aoQ&r$dUL$Tf1KEyc6$sFXGKAWG5%z>jpb?M zzl#)piXD|-a$(&YeccZFU$)E*7=LIUNxdk&@ABU8y<*ya89jMJ#15>eAB7H#FVIP(pzPsOC%B`CXg@ z|MBRLGGNf9(#I^z%^^Z>!7~(icim7XToL4A*`8`YcamIYYSh+dEgZf6J+l7=F{3oo#hUIhRl1n2rR{F<&nZME>gE-T;K0sT#4Dsj!yeChd z1cw;hHHI%fo_q(VQJ$mq2RJ%7{p7B1s-UnNsbr@~ZS(zCpOV;y2^=7BqC-R?svHJ7 zlD3Cjzo-Z2E)ZCWk~?EFqa`{jY7z7dv#>9Ia=h;WVCn|OGQnu6y@#pZ$7U}?!Z1Ch zb2=u!uri|>Vy`gWkhbi(U*{r~haXyv?I@ask{T4JuCK=YB%y=l7*Hg32=>i0D5N$6 ztla8x)TJJDJl~_inzYKOCzmK~1IRXPpqrW4k>6e;SwfGREVjlhmO*If_NeRFb=X@z z=FiqYL-K7>m{}egjUF+$j)Rs3sm$p?0zYc6N0pz7WoFYD+>5%@87}eU-owxni)ChG zX@80pU=|&$Mc#L|%-hlTx7w`YJEORI$LQu`ODU88>|0E;Ht_e^^*NEJzNKnG($(dU@+ zdA~{F6raSUO~-xVt0qA6d@Lt8mdIEx)4tPkuSukZqVV!R8xr2F@jD)V)2g2#uwD)& zLl)`KY@psA{Hw1QYJ%8zX&*tIb-dogD)Pp%=!t&H8DYx##F|*{+;R5$Mcc*9+Zyly zTo)yIrSCknuIEjXBkWp7&HOVv|9a2P&Dt#98cEtBx>s!}Qzj$9$$BInwb zMT3wR=j(fSowo;tJ`4=#4Dk#QUIxn{3sd|<#RTQKGi0dgUxnh>O)bJ6J&doxAgwMWVKnhmc06n z1C~2aI$zfrj+&>aOczqP3Mh!B?JrXv)_IZqU&noXp)D#@-xts;E*M!NBR~ag4!@bSiE- zTGpp%bTae`A7OG4^{_JYExwA&;W^CvDyNFQI4^rzL^KSHfKm`lgoTJsipDf*>9LQR zHkp@HlVB#_^st`!);MY!TD1lj5gWh2ik(n_%aSeF% zUg|WUCnWp73tP$f!tk_*c0Pjk15zqWl$4av`k1zdXK-0Dm*cZnVcTk+>+h+|rB$=13H^%z9XD-v4O_-pv7n0<|{`y77v` z$Y?0x)6raWxKQVc>ANLZ~jce@<<{iB^B>O!4Eobi8-!9oFu(Mj%0hi;UgkV)hri&;XT;5L$IYeoss)+c&K zH~T1DI|rAtMsA@-Yz9r?H5%_0*-hji@!&8@onRmcK-Vh7&#M(r?}M4-4CHKuG>>%- z;^VNIMh3-~!?^}T@B0zKl@WIm&Hfko(3hss0(x)JdD&xq58o9)HYA9>&IamL*AqRQ zE>0!>DAr2UA{BsA`)Juezan1&c*7pXVcxUmksdK6(b>VHlgZd?;h^m^P{(VZ!=g{1%ix=0 zBJeW2FiTe*8yV&(w<$Wu92Fmp-O!=ZejoN7F4EAe4NfvvWY|5=ZU12RTpp%j8Ct&s z+t>4!gQK!cI@B%KNU@Xiw?73yEUBuZ8t1Cs$-Q+xdVhXZDEG{Y1@?KS8#hj${1^aXbCR>jSCa2Z}Q-3Nx z$We7qRH)#e=#j#aQNh{c!E4F#IGcmx;O$njA+;Z^p|XMMl?QNI5#jJ|QQt4}TnyP+ zWuUUn6Y#poPPqxm_Wx-fOSEo06jqTH@$OC98FTlh8Ml^3Hjq9F-|lhQxN&2`cRE^N z0UX=wF~HeUI&>x{bSLtJW!wD?dpf;LOgye8zs7Lc(q}ZhK~s859tFVsrT$y!`tq~c zv(C?d35~f8t&E=z(lctp%BMeDi2_40keHzz}F;lO-Z!ZNjIbG%o zg;h`Qg>m-u*rI}-1)?Hj}HfYX6`cn?{NSau&6Uc zmJsDnnh^*gXA!rKF_K!n2K*iaEkIw%P0~hY#UOU<>gP5D$NCdniJxBkRcQ1ri#nHy zQYvFA4A%9;RBPW2HR;;?9BY)Bz?+Fag0?tez5-1pL+>DUg1*uRC^4wMs~~^SW$GTU z;jBxtTA{xaB|L8O92{S=Ep~_`1YGpQO9x1Uk5{vOlodrHAGr~@#ynx)4isHybxCs< zlx>iVt)v3xYMH+eV8tyM2i+(rxdJ(^ZkKIkPLYqFjx2kH68z=i;U`a?$bl|uqN@7@ z*XT!NCR@N00W!T7JRV(#rh$EyR7 zIIxh!Uc-p^55_ZA14dVJ_Z_ZGxn&&HAK&3)t1K-6(Na*E`xwF zXV`7k&{NeO{zwW@@))}*JZpYcoLgKBmg)79N72CPLu&wo+MtB10DaOkI1b_Ms|7sY zb5AxCBuo{jFhN@`9b{WF7?`m@Y7vz*ZY8CZoIr;}Fi#Xrib%b%(1w`{*GPU(ZbV0S z8tDp8q2Rpp(gvsN%JCm}894AOOLHXKz-m-8I8o^3VzK}ai85_2iVArZ$1iOBhTryRz0lr2`aWBB)6&duroO$YiE(@T& z<^p7%q*!z-P5v@}|;)YkS3svqrA9MIY5lP2edZ=RbDcMD} z$J9jxUsIiJNoVaT=;lLlY)DO0ozix@r9Ew=Lo3^b zZ*V`0RC;7w59(Nu8I>+nE-0tl)|J=_H&Y~FEuc+)j)iM193D3R=}%qMgd@KJw4KNS z6ioZXwB700g{I4}&bo(iPD7)z5XKojb!#z!x>fQMt?{0ECyxF%K&XLZZi$heyvT;< z6kB8YqaxTlqhv^1&E2eOJ)vpJPCO8PTEO;EFqvF>y8 z9hNTN(Sw|Rhl~jJ<#gMj-q14V5%6xYc9l!_H_(ya@#t$&!K@+?S7@um&d$|%T;dgfL!$DkmC6}))a)= z(?we!mBtE#D%?66pMMa;t8mIgn*V86$jBR%mF$IiROge=ZUJUtHgK#}NLhhqQt0Kw z{mkXwT2q`6R^0Y#bgXHFsbX$azIb&$LF#C4`&?2O9ckPpeZ-cee@L|PgI_4AS+3as zSg|uo`x7Deng;>fL`+`9O;iE8+(Oc+3(RLNvI7u9sE^ldH)Pq9N|%em=M(DJf?0NJ z{_53~2 zaPS^{qF3FvWI3Vyoy-pRbH^R}dye8~QfB2ug0sK%!u#W()u0W;Y;%UrcZChZk!Stz+42UPCzJ-L zU(^`%MsQC)GSg=R`}#b&LzKDw$y(0Dzm4f*w^hlMO7LPMKGMg@B84fp=HW#=pT)O{ zYcUxN=uqe5$QO5B7c&4t#MSOo!ca1;6Lml^ezAq^I3U9^@a_^)rx++(^8j=^ap4#` zmnQQ8qvAz9TB9{YXAH0hfh|2hFv>ikbGv_`^fwM7Ulp#F0$?pY ziI+|rG`U9yjj~@fL1jAlSMc%M4)ZRnn;6fHTqkR;9@=g4?4V(b@n3D0CdsoMRa>Ie z9{b)e8CshP$OKKNxB}c`vmVV3xjwKHI4t`eeXqIjJa0z(Lem_+a=Hs(+{>;t`SeG z;Nc!p^u>bw*AT~hoB9#9j|ra&TwX{%na{_t1vxJN`1-N5$R38z8q4f$j` zla!qW5{`$xcI+LS6G1)+TOCJD7#e$}AL?uV2s(RlGc_4l`+`YsOscTdgGHxN_7_sn zouxP0Fw-nA%1X&XmDkcRPH+_MqoIY5A%PSr+2S=c;~ODNI*r}B5KQ1~T9goVxy+|Q;MuLrMECi;u1B(H)Tm=Eoyp)mYDNG#^BQfn2E~f}Xx03M=%je7#UOMmd z6^Sum;T3myh~54M1X~RIIrbLkcM41aRk*(aJ5fws2p2EWJ6#V@fithDfMwyzDv-0! znKS2t;}8(oMgloK8pfZ4LBR#>sO#W}J3*@Dqr@+1`a1Tz%5zO~*3Ya%8$e#I%3k7v z8M4$4q`j$y^X7=*$_#m<=f zbNxJf8MG(JyLI_!(3-$T1khlojsxR45TV^N)E^MDJo<{7Mqefx7we2<^Dqnj2^^?K z{Q(_bsQoD(HBrr+#JiP_eOE)px7z*C*e@%KgjM{Ubjn*N@dhm4ktIWlb)b6wbYu^G zFfbDF%B7C1mX^@ERuGSVs3GL( z6l-c*mi`oZ+WMd2IQ|v2_fukDnt3pIf{*wN6y&j&UWj4p_I z`sm8i{8o%#H}u}5UAltvX`O+KsasiD)onF4o#O1zFE8l#GJ?By8 zzrr7R0JF~iOBPI;zeTlXhz{Ez}OF^mkZ&sd!Wb`dM zv4f;IKZJB&nrs2Me=q(8g)v%7LPjteZO}R=H7s?&$O4J}yc}ffKL(_9&1!db>WCR6 zpF9c~z5tFklVSnJq0<23*7N7QCwKw2ltN;EsNVY5rwK1UNt%ivh4y#~Qo|jzkJ(4N z4ag^daD$R4{Vx6MCTLJoLsw2Ge3RdR9?M0{1DqkKL{zjKP^2c1TY;#FcHiDUc7K%N zbmi7G!}G_1(qn(;V^X|xx5W4lm~hB6fIV}D3+5^15ypNZeAsOWg0%~F_s4$)U?E8a zh@qj>Ihq^0>qK9#cs)YI1NLpGZpZhVX2+=aq-R3e@Bl>14HWdd>*!Qyhu^F_8w*x} zX&7gTA=6Dd?u%)o4t)q8(q%d_-Vsob;DFOWu`Za_{__Gb5AfyYLa?+g?mLQ~3!lS3 zj-ur>2_eEGgV>HXoMcOs0Z@>&ha<;-pN~_9?i6NZ_la-1PiA0R*8lA_KKESKms50G zA^P!K&#(L14%t4!j0^wQ$AiZ)RMuW2gqy#d@Y``mvl0e(7xU^Jz;*0{qUh&UP&SG)DBrQctlIxJn|74Fs5l7ulY^I{(s1F}b6}NhC^wLtD!~W+{C`%yrL70Y z|NXzwb|f>Q%ghhi^8d7(Eb0KUIQII#EgSiN>8-D}&wX?J%GR&@Uf+L~Huqe3UtZsf zq$^b@})1-rkfSO)qHJ4*B{ ze*Ne`=;c~5aWSt$TC0BC9ubpe4#?<>+YU!TrIyH&=DSbnmWE+oNH4rK>noG@GvhP2Bm-R&` zAc3p&-d3R{wR`^T<4U@&CRuMDXtvfd-#md!WQu{%hvd6zS+HrBzg*grNcl!O%+t$*mzA|F#;O8#K{CAFfw{eo^EID-2=wxL8^*qw z|7`ypqqkz;UE_Bga?1E_h({o(`&uY>Alp6RUhBT4YE94VE;#)7BSyCAQ+Tj=P1tbd zmvVNx-`sbc$=??J*sjIjd`x>=O8X(3ZC{i|`i?pm^l1+y^)FA4%`%y~CqE!UYG3a=*pGOJSMv- z(Civ-`k6ki(!+x1wg`pYP?K!(%9nntezV%IC7%A4{&5+-b-pzH4V0d=~Pbl`v z_Nwx(c&gTTY(njyHxw_-k!vDt^;GD?Z)c9-XAlss~IaW z*g-n4WB%=w8o#1m-t;HGWCx4IGNZ}QBJDrp&iYL}*Pa-)3w+9f{erU5F13Dphqv1l z&U_f#f$aZ6-+PUcOKd9>NBqi~M+Q0+BAz7<-g+|Kc8ADj>zrdVWoy~iKjQ}*X0*g|3)4wS;@AK)iE$%+DA+o;X&6I!7n2EAWV$_3I@DKU!eYp0V!8?;ap7;JN!C@TUU;%Cq~8VX%1(SQ~y23JOyT!Sti>*@Vi zbBk#+yLG&|Ep4d211xm1dx<{;J+c1>dv6|A^V{|duc9JKQqrUhk&+Azq&cB7tkOWE zWN4m4r9m@Ep(R5aMXlyE4-yH5l2jT{p^_4s$M9*?S-RefNI`DiF#H6&-r1)zSJ+ea{ydZfY0e3*q2}o#)C;hYQ(>*MFpFG7;rW!nLqrmb z;$`!_gRv{uM?0!kP0X?A5mxWEd55FQ>Ow=$3Bdh~6mrPf#OJI=$R$g6o+K~?+NJx% z@vPYbmE_IKgM*l_@C@WnO!mXM5Bd1Tr6ACEK z+9nr}_e)($JdAOSW#HvR)@(|94gIwsA!t+b(QYS!88VD?Su*$j#DX>eRy{gz96h}S zo~ic>QL_`hJ3c~UxF98MBA}W%Qxq6?PBNgJd;)V0B{F(Z=k0#tenMFLRaXtt5jp{U zx<4rd{`hC??9}=)i5;&2sA-#r&lSIM^5lx*K0rhyajLu+CbhQ7Rc)@T8$?LoNl5Q0 zq{UnU?@Hw6oj{;8{aI_oQRz8Io+e6fqPi>u16c2dF0YG#?6?~giQneUv$-n}v4P+c zS?5W;NC*4a>JGwn+y0#;2hSv9Bw82iQmA)O^=L(a{`@7WQTmjnhLx{!NLpM z)7YxNulnj3?%GbID_NoAxL*-)ylmZESR=`o(J;d2c#Nn40FD*3O)kPBRitM&eIOTF zc{emAPZ571K-Ar2{1NoDrHx+XgSqNukek05t5RA0w*ejnl7NvI^svc21*EzZ(AkE! ziY$VzRNYj40uh+h=R0;hCVe7Wy?6mn@{?vR{kcZm-*He}0w#ZbK0BFx6T|}{AwNml zYs1STcAZKG@87qR0pLQ-l1=g$Ky}hg2go#?mH&;Wj4Wet&6fybMoevRlBPvGLm(?v z|Ia-|t+;Bn7Qt~xoTuU2(u%_VQ;9Z5i;<{EHOFRGOu6>ED0u!K#8`9=ZUP5`^SmpTfKHpyg)7% z-u&DdGWVateK(xvnogOlfrB$r^jjT!$Mulk1vztSQA;>=FR@$|3WpiXiKD`AzkXrohFkjGbWMy z#d%VcefJzw`fm*9kADE6tbH@Hjk_wLtvCi%N$(eIHXcc>p{+#2^z-4|`o}`swAAwO zYk=))}fQ)MHLxp{1WJP(mP#F zy%1V*CWne0Q`DAP)=;LDuJFM5$cTIFC@=|q;U`{@OMZb$)R>{ z^1n;Ci7M$S)(wK9tO9RgU~TqL;{8eYKU5k#8~gkhgE-jd&#p0Oj^3ksFR^BmFX1S? z@i{5_TaiPP|9padl0NeU<_ZCP$5H?PNXYoNR`t(GitqSetFrLG|Fa9@BK$w}ZvCHQ z3772O@?ZXU0ne=iBvXQPM<`@$-03wtlR_yoasz2Ivtx|AM!?4+!r9)}a&4a3~P|bhk<3 zt^qv{Ap?2}7=aI8F2l>rIsb=vjo5-MAOs|L6>2)8d;JF?>RAExo7`|E`V&IRlODY) z6RK}#a~(-bGQDEIadnd@QJ2(>kk*`RGtAE=scw~d1T{}oV9k7PbIytkkrNG zmcKRY@k(_b6D~rNO+oOx>9-dLSAgGzrH zK>2!sTSlPa*$rii2gyq#DkR#-PCyl1M7xZMDjUllg36g|!{DMPIRv}# zJzHlEV>^1e`A-)^9UxLJB2gf!pf@C?q6lK;u8)|2-~q;J=C{}=f&~6H=gws?&yiVo z@gMO1xhodTnZT5b`fzv?C45o~vYhxxM>q>OH-xw{vPKF zhDt;)CT#7G{eD}(!aYzuFuU-m)6Gfhn)2PcHJSQ!iT6r7UenixJE@Bg#4ffeES@$H z8TUE-vpeE@tib&={qIk{O%%&%v0hIbnk~w8v?@-kb+PuERg$fAv9_AIx^;BbYDsIZ z>oYsJcAIm3j+*YKrY9SI=Aq5Z9==r|b@5mAOmwpL;fd~uAtiT#kIQLg90ropW=pj~ zS69!7uC`99eN}IFqHK28uVu;Ek7t}}4SI=XvhGMs#?!!dApsx4c8K8 z1E($CzLE`t0$Azfx$SF6+yIdU65q0QFXDqF$2`x?5 zQy91MmUOrCF&H$7)El1q)|=C5lOLD-J@e-;%)(MxzVQf0Q&>sH%T}|xUcct#iQP#p z%%w7MFXMym$b8&z+0t`YO1_WR&&;#V)z?l8JmFQ6TO*TM;GUAdYF2ro26UbIBXX7qt&iAJlAU3mHE*?r^I)nWy+pF*vY;Dg#|B-@^^ z+gkrvWXp8TlA5;Q{e2G0!@kLEdN=Z}RMKMPF@eteWj_+={F?T*-A`AwuGFF1b(XKM z`Yj}H_SIsj{egp2Te5jdzREI|r_l~kugr^NUd*cfn$0d9Eq7O1>CqjJkK0{wZEfh6 zFo&O`WAp)@6D{Qx1z`!lS(1F%f6LtBx5$^6tTpdGI1=*J#W2cxvT6A;3;jf1eA{l7 zSKGgrC2Ho0ln=#Dmp|)#Fn*#>t^3x}J6f|D7o0-ZR7FmYnix|h6I=sBR%FF}FP}O? zU+PrJ$}-keAF|$H;})A_BU<+Ew6T^$YaZU;y%DhZ+^=(BL*R#*`!)8TR!sI+zAZjK zr>@q%_5^^QJ2K`WIRZL>b|=0jgtd1R(>PB0s_D@YDyy!D`dd>VD zwj9JLRqWlBF575h8kciG_Db?~1G}W63o@0Z%I_7!UtaOqc`_-VzPYL4kiyDT;Pk{- z2-sft$H%m(snj8t{dbC!HQ$Bky<7M{zHd$d$)Ef60}K#|g}Gl?{nxes{`!y0e62?M zn7jKGo;-R~%we(No;GXUbv}k7tv`#I zl1wGqRb-c~CV2-$Ms^GZ|3xt9a~YKH27Z&k9Fhe~!l8CgvL27Yqf!n^1=D>6k>f2)+^g;DrrSli#cPkHU{d3f!A|tXo#8VvU?;jt3 z*y(G0Z@04j--DPE!Hq!|e8g@*kUjD?kePK@{mjDWtF7mMUir5vi+fCxG3PRMoN+jG zqB#pEZ#G(ovM(1mPY8nc)gP2x``Gy24km`i^^6#*3@B!?s=i21EF%CcbpRPsB zm^gg)C{1X4xI^+24v2l-CR8D2`ivX!q=)_mFCSHh`uq^Y8)XS449Cg8`TzZa5pG1a zL$to?XXZWE!AoZT6W)e{UW`{!kyqv+0;GPTVyPk#GX&Qp{*~T-V))x+Qe27B;}{ts z)=Cueb9xDOx@n1b<6yL3$P`J#w-hoCSQdWhGxh1rU^uTWfrB^|*B1oceh>jH|!xd;RjeB3t z8Q6Tk+$5l#=!4^DpCKo)^1o*_?tWlQBcFlb#LqM3lP0zxyS5;ypP08Spqze#z~@U! zsFaUBu~D$})|D>L>|s~tPS{ORiXbC zjrQk>FJX4xrovBtQqgs&i1X}c$@sT5Qd7|Tg_A1#&S_#f=Ixz>m#E`&C4ZkSWH=E0 zgcDbaF+S@PEvJY|uZaXB79a5AAUal9Q4{CNX%y54#<@uxS)4Ph_Xk}28YMte@glgu z0V4JE-&+WM1rZj6SEa^(--$Ote{pU8Q&`$RA-6)V(Z?q)kQhZsvx+Mw7wAS48yLov zl7I<2zSEk!k8KEDEAS5PHuCoQt|Q#U%NJl0mjDA*!}xe6D6*0U~Bdoo~7cw@|@`e7N23oibbB z5e%W!T=E!^Jc2GfQ97$UPKIoEV$~mzM1El8Q)Eje{ofSD zBf;&)<(aGd6bRmTW4qHaIk_jKFS|HE*eq(rpB78^23~?ZiSSXHd|yjqAFW!+!Y3KQ z;>9-jPGu&NcI_)r?@>3EZ0$_~R2yrsM9AuLA|5wF2Vp{rw?`2PT}NEIuIniI$XH3% z7S_-W;-$X4jj(uQe@klV;ONGxkMu!r}s3;!X=0;ngOFqBB#IHOuX(SfBdZsp75XD zl)n;=W0Jll(nRJCx@zn;+PgNhBFiksw@@}pmN)#9)a1MIZ;~5%tl*!c zBBjy)>mI$|lYcC{gZ{k#2`|O!QQkn(i!2D=jeT_wyrjpVL9=PUkF6RpqLgJ-=H*f|<-e>5G64#1jWxYtP}1mXKgj77$lx-1fmsg?bY*%k1Vt-635_NN0iGX{DU~D-+(}d!T6J0e{8f{8H5t| zpVUj56z8^0EIj_wxqi9LT&J9;UyEAUODy=sdoJ%>U-p|)Y4bL1rGMRYs3i5?`Y$9&SqEYVWrN^a$uq|D;zKuQkh24oc^Dknkmx5&!i~7%R z^d%%69HcA*?P^xO~pQ2Z#`k+G3J1JTB19Kk=q=fWax%N_ad#u9}**6 zrrRt|GtkrWR~l(k=Nz`py;EPI*RpI879Z zT=R-V*CBn4pC}KCMwcb8Ac|%ZAqm&;GI9|?5p5wzcp=bjEjt7710=ghzh#!-U(k>~ z!?t^~!t_szrH8C%>be(Ew?J3APkle7l-iR)`67Drz)3O#{80){o4NW3WDOUdNi5F< zW>~&+hd-bs<{{I)`GSDC)Hv4uy`zX)6o*ey23-K6vfww7eMR57)PPb8Q(OST*=IJ28kbI5B&*u|FZ` zMKVSZEAv9Lzz#geocj^Apuqu!zm%6V-rDCI#1KRRL2$({;)cI(N0jg+S{id!42o(= ze$1S!FdzD9MZr9CLa$;8UmE)BB6%*zh|iVKx&u*pJqK4D| zI$(*XlazjLlOS~84nu?!Wxwcn_`mH)09BpFZ}6;& zQX5XgUO-Sr^S`$e#rgJI`YIM^oes>Ei1vqcb#tp)VQ2c6>E_E{C=D0x-vR#(>-8-l zI(LF1q6)h_7XUnB>U*{-Sb&pQ=7=zsyIsNAxKHJGB7Gd*-npv}#9RyvQy`%R*-`CD zm2O7J2daiWq%WFFM8-9+K;^;RuKxEC$@So7I*3b(F!m$``5BgYCs}$Vy@qgzV-VML zL12{8v*|A_s7zZ|m*w{~lxHqqv<4ry5gDiTIiEx+!m-Oi%6r(&5*a=J#y3#(ZYw`w zB{B~rS=ti~MDGx%_}r+U;lYk4;&K1Hg9v`SovcR9;);5G_{>Pv2mzt_!$z1>bE%c*d&v(b3`=vob{Gh-utq3>q z@)x?2R}C-@at@M!AXY4{_hI?)Z9P{WQGXJ`_3(0tUH*>nhy3n*ZOU!zH*1G@p zf5#7aGyh1{ArbU1vR0((w8bpG`RDeAglGw_KJgKlVCI(<`E<@8^e1up@51mkUX6u8 za+IO_j(F|$o0KI-5C>v> zL62MBjQv48E9&njPtDUq$8$W9v=PYD>H<4RGUqFa?T<{TCVd29k^x`GiWi6e^QfdR z|EvexQlWDJu|(!ZJVTZUwi1AWW-ggZ-^fny%|GrcU$OmvVFN-#{plU%p3oOYxxdd$ z`F}w#{y7@e_r(FmthxMHYy%s_#0HPBrQs&<7)M)o8JlJmFK0v-R9EGdC{*~# zRJZRSSe%GK8pR_*x(>qEcsLcYtxrjS43TK^S#Q>vmo;_j8urx#eNV_${U)>CK>2jF z_%97gR?O9{SI=cF$SQsy9$KC(0LBG@AkrjKZ44O(x^GP8<-Ek!u>yVnY+~T zhR?DP+DCLP%1piJt>wgy|0+7p>8$y9@e9uoa`M1#d~HVJ>fXnTA2#`ZUtLE@yN2Yy zjL*)$Y95Y-R+D){bBy>Ys-Rngwi8-~=tFR~mw#KHhNhFw%=a)m3WbIq^J zal9uSg7?=OM7!2&^olypj{3~F}jyn0NNb9n;z>_XNCMbmPU(WtH%DUJ2sA+Tw_E{eJ7D>Aaj!)ITSQR+Z>h zadmH)9`t^{-WyuDXFt40OXh}^d#j9-M0%q2or_>x!awyZxJ~!m?gr$Mb>RhslgTT+ zLQ7CmHd~kb4kpe29Q5TQ&)Uq%&c3H__Yr|;uiUsJ!*e#`ktBDLh>++yGtK2b<~J>o zOi*kO$ZKNsIjO&4JiNXwYgKSGFghoaQciv>BQhW& zjl64ilCj9$`6+q;GTKM;<0-Nakpg&uwDM)m-2rXH4G9gzCF15)xUzcTE^pMLR$e6E zosZmS#N4XN77;j~&v&ba;#v|dL}Wk;HFD!>!gE?*9Gh>rSZ5D>u4 zhZ{JoecNb@CsCz`-%IHxq71}JnmMz*tizAjUACKMXT#0D zB?f$7Z6u~OBK`#=x~Dw(6^l?tJVY zpZJjR+p~6s-Hn?r@&g68YxkXc{qoe;aF;ta?xvXrD685ahO%YbYTve9T%7Gw{ii3F z=_^~yeSD(OKn$*k`<4^H=c^Uo$jvGrv)$=&x^Ypx-N%RRGzp_dFQjIj);Po!(Xet| zJhQNqCTC{@<&n}|BdW)?ru{5=GzftsZtrlpN4siZ){2uSC^psT5KY|RG+chpkW@Nj z5$7|h4|2>?9=b5iXHb1ac4H{F_{rO$F`5cu&q>D8papo-EGMQ%Nn~h^{6ijP3s((@Lq> zx(PLj4J+3B_9$j8W=`NXts9GT_sg96{OZomrgxcUAN|;|L$C=MGlp!kmH;2U-ylho zJGCy(-T&(XK5?m2B#tp{;@VgC54Z?vZnVZ#tVWZcmUZ(fKgP!O$xQng?rk$y+-L=_ zb_vS&R7Kirj?d7%8M0lv5A+4@Pi82T68(}^ZGr4>blAtPyc^^QN@t~E2wXyr`mz8|??EozfQ!KTjzzofwHeoP6 zD|cxzvjDgCSy;c*`24Gw^J3matM;)f?HP<`N|yxoEV5{SA4RQTGs7+=L8{oxI7+10 zGqKJ6;mUsJ*Qv5851A!U`!<9z(Vr(ErRLe?ydD0pw@As}z{ppv82RxdlZ&zLDub2h z`Tk~=wp`_igQ``c4**e6>@tI7mCyxtdnc~`YP(2D@NaodP{}RzwJ3qENU*wI)8P-H z50LDs)+RUKBZ<4&T0?YI4R!1Hui9X@x<|;j=RW7pmd$k%7XVKm-YHHCF@<0s3qkKv zx7g;CSHT!ETJe?tmj7`mQY*aAP=4---`k$m*b(q?SA$a6qJ(OvTW5Nx2|7ud3#VEc z3nRF8Z}*-mOqbLx6Io$Rz40O{r189e<4P6pS{0tn4Kce}c*M4(N38YjNuuZQEz`NT z&ua224j(tvxPv=lf2gq;Vp@Cin<_!dl}wy{jh8i}HtLxeR-Dp1NllV{wJup4s z+mRYr*lZqnG+E`;s!L0-cr@pKG85NLj!5Fmb5Fj_iTd(1L8aelX@)Wf^5vYW9YBur zBJnlprct-%FED2omLqfYmhZzT()8&98H%o*iXN|Sm`bLb#7eG{I>{Qc8G7+5{p+|+ z4i;(JNohVjH_kcqgTb+b>G#_i7cbpHjo(bK#HCgyzf6=70A*u)d!bzE6dEJj*YQqk z!SI}3^Z?S60A63Mz38!?m^0fcT3^#PXEu8;0$Lz{pc#8Cy|^FQS`RB>cuS% zb&3IEQkHj?3W$s8r&)ISi|N{&qdv!d7_U0d*Jt08z?t#83HI9bwtBRHZ8)}06lA%% zY!yA65`VP9F9YHK6TYZNft;A zfs*MDO0uUiguGVFFCM>}r5Yi$WXgrx*A{~}`L`YqVY(;ZUe~bBpIy@bBa5&zli9P1 z+S!aqo54OH2ia_zdY29j;)m7Uh?CjID$;X$7?n`^#!^G7d-35n#cnpOx9i%>fduNm z(HJ^srmpkONXFrVEjM2doIgi>midMjG=`MP;IPW}1m3i9#SYIA+Y;BMo_3sfLwQ&a zLiD%sgSQWbCwPRtI!e-kI}yQmHeFAEn|%J&UF#r`J$*v#j+JGtii9h-Gu4Jw@5-gJ z<=PyoJVoG<%(+)m)?S)TeY1e#6f*raJy6BbDNbz<&8Yr2M(L@QSiMKkz>0Wg2`<-b znlwJ$7b+qj1Jo7>|LV;%fk(keAel9EqWNnztwyKjn@eV9tc^>B&kO{OM|QH(LiM;= z9xqlNs+)Qg&fwvdYMj`jk<92%-)i|l+3Ux&%hVpFa6p1W$6oGn^;De=aG%dHE_INa z#N^emEC#he8xW)Ag5kp>CwTyD5w!CUs@rSs)7)Ofr0h~kmI%GQ_DZe8uFNYWPJ6gsmMvySH~1qEpHFv1p$c93>;tRr7^^F@5~#bwj1#zHX96 z-zAjLuNkk<#~PBfcqZjXIxGfH^+f1+IZ5x{Xk1wLn1?($7W+^9C33xS3F)F)i4>R>^TldG!)1ZYc z8Bj@1zhi$q^?0c&+bu~);f1@D(zi*)Qn{Jag>ns2G~eDboBxc`uYnMOx2kLpb)I0~ zIyK32iCei-HICuY5kLMw6pgIwx%?yb8@?uf4xtN5A==< zBir51KK=;{&8xAiSo#VyZG)pJYt#Ie0OZMMrBYTKVc7GwknJVF_ZUK+?IR)}b*^4&BNoy84e`!N2)u|b^$u3<|`ZXm)(Rx`tD_e_2 z-8p4$Vd-+=28wYD*U6U=tNi=LE!pA~7N)D~s>_YoD4kAL>0Wi~P>(9J@2*|wb3`Ub*)CSY9K2qr{0&ZRPYGEDzyv$2x&n)0HEO5ascUdXb&ySQjrGHgYxxY-AAEE zfurD?1C$6NtBQb|g4%Gwoy%9U0M54PQpPs;xK_dKo9@_eOi9}|1Tz;2!{lnoIiVG; z#IJn(;{yQ(8rsfi*4CLW^d zcV8DLWFN&VlQ}siT@8Gjb1ZY7W4yq2M`0<;I$_W0Zg^Csyr<6c^ZSvMATgc0dqrVp zi$^~dh!38ps}HB>0&YoD`JwXJX-UXG%jy6HTBNC=WPBx*o4*%Yh8_(3TZjY zD{9F!AylS(Vg?z;$-vj+fw#kmq4u9Y`T&OOL4?ZTlc4|dJ(<|R+V}jt z`_2*c4{z2`*5AR`pG&;7yIP1IKfkI@6p($qT60lU?=rWS?3z#&qWM@ym<3p!KfI? zy7o{<0j30(oAJ{O_a>hb@$KQTWs3hbD7UX}U1IgaZ^HG#w>nv+laJq)S+1XU*u1L- zk=bc&i5~A6Lf91}?}m#F8`E_+oPp7IXLN%x8G`2I9m~GP9yooUL(#c$X9I{+J*SY{ zx(VxgWJkKC@AJD^ez8Jh)F<#0Tet)u5d5*`uBMbj&)9jSOq1`X3TZXOXu2@l$yhHQ z2L=8_X^#t=g5=pp3x&7#9@S14ZumW;8pH>=jkR4y!$W3e*CVKV#ewBS_XQkHjz64z zOy+=YhVhQw$tvjstjjlAPV%9=R$Y8+ee%1=$NLP=^rWfwOO|13X2r;6>1Si9RDbX5 zGaJTs+3*Qp8Q>Z8Kbk< zOeG^F%^uc)qgg42`ZtUvdwgp>pt9U-6_HgIiHkRK+-x{N!nWgqk!`5zvX<3DhPUUd zJ~O&) ziQM^RA@lWk?ez>bg5ji?!Vl6VN$)o9qZK~nQU3fh)8W-T%}CLu#URI3;WlFP0!-L( z{d!Ex2SvnVI_1Y6{lTzzs_@%<^{*pbt9o03XNt%t)4A3 z_d_Rwuzv?W6QEpCccILFc<3|hJ=s=1o2n2XmNRzyVDS;6{wN7cKh1ede15mk%)KP< zpqV61+PAb>CCx{SSN3qXx$e}l6UjZWfKH899c#Q>bs65kW{))^eWqQ3_9s)VLu1V- zC^Nn`+|^iC;Mk#>niFT#WLoUn+XnrCt?UNrk987#pqt+-1{xIDo1}h-0O29dmR@~@ zJ~&_4qjwmxCs!xjW$?9;T7g0p76@>5-MbmEmXXK5^cAQKA$;4e7w$ zom-zJm!-So@J)I5oV=(7%)C>3Xr`JswBC*d|O%F_c5 z#l7nc5_T;lbwe@Y(wdueRrSj6`X3%|nOjfkTQMSYL;m5Ug3}32g;wFHxEQU&%IPQ?PV-b^}{!j%CIk<|+Zbc*zBnaj0PKP+cRMBGY&o1O; znSvu&MwU9vEV#XA#NVDoakr9`sW9GcRqS$ZW5_J~5HRzA63sGO++;HYKK{Wo-QILf znpk7GVa0kq6OQSEMqXCEa6akkhX*_MwwLa^C6%IZ3e52768gFEUz^k~axI)FU?|+4 zftZEcLYDn;MFEWqQDWu1lJtvb4ilFLLVf_AYO*YYt54*K)6t0_FH zSq^1lN>;HIKQzRo(su;2uj00jz(L>gl@q}PIbN)9_|#aUij&gE10i!s2>;4NXHWGC zfpDR1(F?%nCBxR;0L}XBX5p{SeHz>pWAK z2zG22(ywkIJj<96`q5?3a~Z*-`V~Y!-Fj0vgERsgB zT!pfHhD!ZwVP<6#KhKj^$^E)ti|B`av5Zf6W}_&Sx)$3g?dpRv^LF7|E-4*QlZM z?SwTQEmX=J)Z>}k>Gk|2GW>blsTcNo#V*-~=4!Q>@v^hC#rng`1$SGjsc;+W&Kwa* zOw~(0c_MMROzy5OBH(JGt~oL%MEaC3S-JWgesV|lV+YQ$`pk*sZ)_9B9qaWxH|X3A zxxMwoMW%IbI}bH0Q&wNo+yQd1!d}kGP8(^$gJW^u7T=QX(RV}k=l5*jINU~Dbp0ge zSAx3srsnJ0D;vV9QGm8i0T8X5EUQ{TyVP_(anpX#>os(Ft0kR?CCwdI{jSM|WXlMz z3@RBElm7J15^aW%hmD1|j6@^i+-j@2`WFsKu<7ci z9G=&ehu##czT@TcZfH|IA9QrH=9G_(_ns}j;11ybu)F1OpN=?Xq%`1^xGdfyFElQXi3**?a_D0&sw zpyH=_km&&ym)2L*N^cTfk+grlnZ07htR&@%TERLu7sK;RuNJww7=DTK559y!mk*w3 z4&V2Jv+6ayAucP|{*=v3{5L0Sqof~8KEyF{DCjPK2$(+qblua1Ok6{^K9-!xr1`Gg z;rw}rxO9(xzF0}5sP(B z*l^H_MXuGjO2zwqY&Hpq@=0v$4wrRP?znBf7fr-KeD`7HBzz3tg?yhcKPNZ}@(4R+ zJ}GtVGsn3$=mek@6a+hyIrD3h1P`Ldx~kvr~$vZ z{4*L5a1g1tHQ~=C#N3~PstNJFE2?7@JbU1tS|o_hDrT0E!eivPZw%a$T`3X^)OzqF zTVe`O9cKI5e0+2V&%JDwl8Y z{f$b#Fd*HmToD<#+gf!SDu|nHMy8<-h}mrc!Wrcs4ViYMTuFE7em%lh8>{4F2?aE1 z9HoiT&vPSMxp<_rL=P)q>S~2LCdKr-qZgXkbDN#QS&n7i+GohZo)A9q16s=f|3x!- z18QuDT40+-(Y-~6gFA#z@!Z)<{`&=uzl{^6PU)-(<#jEf0xSMt9=V1%{~DCgt4wE@ zDL;RJ$sio>#v!P=f(c_(2eC?*yyH{}bskHk@{mr5O7P{D%qdwvz`>^*`|SokmVf-pi!Geh?Z=1qMo}hKt_A(=C9+kc3?Txb#zeb6M%Qvv52F(6 zf#9t`b_xeafPRLtd*f(~ctZq=u@$u}9PeG9$7RPkf2ocKE?7Bch&KF5@QvUlLhMQz zM-Rcl_T5GJlq(K6iSh@VY)W@s;2a@gwYlT|Jn~tKgZT1o-*d8Wv%DPt z4EYZH-UB#2(h{_Cj=%VxFXH?Brex1>+W2EwCtvSu$UV2xh})g{Qfu?^VOihD^783u+;)YSsqt7uD>_|2qKW{U8)MflDlB*_=yraBxxx%EVKBy-_hD?1 zxlJUNdkJuvpiwExuKZ6i6}Vi+*bg3iMz(~DqV+ODmh6#QwhR%3G;D~HG*i5d$+L)S zdGvZCu$ynlDCh#1`~&r3cT2uq-_}#F&o#EqSN;qY?5>ngw|@isXoIG{jTDsF#7uBr z_wP66XT%LS)k;-!%;uOXf-%%D)vWxXxN)JQ-}D{I>sT2UuDzm|?7P!zA~%esMYN&M zG?)#y+SL-!vL?s_Ho3A|{ktc2{4cmP$K&q-%6h+@h+JZ%Pf|k8p=odd$dWVa^J*TZ zarQvK?ABN+JmwD1=Xd4bI4n=^P4VAvw|!#Eo&^dFSG0mJ-4ePau;Z6fFdu=pn*eO> zd~RHFI$aCX4jHGVDVvymC@F3Lhj(sVd=ohV1s=oJ2HD5d&kXfwH^r&UL(lr-{qI`0 zM_GV1cHRJmo+7A;Hi}i6G!P?e+>U6*+Stc?kwI=pk~O5v>TYy4aexv$gGXkj@042d zW|T3+m{qt9aqQj0+ortleqC|P!17hXgC*%IL*bj}alD5wKwI?ejpleY7KrVYqSo!_ zGeF$d&a=kFt|?yo3)W%s7_UK!j>zN>Y&nH6D736rHD{3!0O;`bfw!W=jIt}5K0iAd zRPsG>C=Hs;ncoB@RNce@5#+y^l3=qkK3wh+H82pH#9>+x3`Z{ktT-ScIK~BT;;|a4 z|5tvw%Dpr(z3po?hL;O_So&w-#;`{UMg}&Q(>FeeOOI2Zz%pSI5724r;bfKIs0!*6 zfQz;)k=-Tk3x%EPXVg-3l5D->eky0431hfr03>urpx^#t#{}%4|9g za7nCitSk^g!!Jix<*wA$OD2-Ys!<8Ehi!TG?Jag6O5g8~k$=y~L0R2|fl$53<&;RR z<}^MyWni4kn6Rwmf-=`Hhi0*PnVX*g^XyWbopO=&nK@T*`~{~hLcSJlNp8S~;6;Yb zTGdKY<9zk(>&yeMz7~_ne5!71yOwfA>-KpJ(exMF*0Vg1k*&pc$UF!eY&7@Dx}fvb z`}(ePgLa#!3iiOAM7l!nCzXQuDHo}rvD$ZEHFKB7zj}J~>3Xmp z$KOU*gmYVqCvMJdd1+}&Ev#U5(bh3~I7c>fwQZa_UKf`DH5~#cp$4S8bBMXNVGsEdU%gHqZvDdRJkXcwWW!4zd zT3gPz+cbJEM=5ua?fb1wC1)H;xRZX_8;YJa6t?WrW?9{+_RAQ{TU!JzCdh!z&gknaWMv zf@uw(THo~KpT=3RaRGy{$5>u~=_Eu)vEuq^H}Yb&lbF*5iP5?|y&;Yxpo&d!-+Xat zN{A`zzP>u`-}CeW4*9C|Eed1kzIBLtg`v<@^ahxD)y3En+;HgUrEBT-?(a`=buqHJ z8V7Z?k@!W@&&}Kxb40gK;~L`Ax9NlC^y!J$(eE)B;ftTHHHG5@3Of$3(?3247Jt2E zqly~YW-J@v_uCnF5?CdQ0x%whUI3E2`MV}zM(ADvlFtLO%^K5DoCBdhTa?a?IVPiX zk4IJ4TuwB7V-K;eRf^aY$e^atXM$?hKaMYo)qJAsOT00WRsXfvm0<0)B*PF|A{p2 z0Ek=`dQOu)VF(h0%CU#!fP~RrdeQ^_5j7md8gb>6M^8E1WCvp>!_gxyk;Z{l<$IA^ zJP3vEvXx4HE*AkgiPSkP5neU6r4!z&tSv`zh@DdC#-dyVhn;u>c6llSyVS^t*e$gv zlaxA#&oDch<7iwrWjNxw6w=%NBYhWq#51zbZ(|qE(T-;b(Ltx@28rz%qJeaQoAH*OgZ70UAT8|=^S!4%Mxmo> zW)mAOGpJb@CRBVx8akKMnS|Siid94|Emb~VA7+&o_Qq~~yC3!T26q7S{mUcmsreYk zC2}yPt-73G>{X2IrTQW~3K>SU31e=PUtemv5t6rlQhw|=WtSo?c=R2YZlJoXsPuv4 zPQOOJ7%}PO6Yq#TGp)f9($Et3l-A~oyoJ6!yzBjF+*2R?%p@%p;;jj+o9(2mxB7Q? ztx(3y=WZ@B$;_YglwG$QJf(f=YVkP>eNDRG-4Q|E^Bu9erg2;6ahTY!mEDtGLd|Rb zozlP|z@HlxKfV8z0%e!Xho9#~lT344_R2ed4#9;p8GB`%d-IcL)A9{Em5TKHNwbC= zEHpHJtL_=Tl7~mE@uVt$5W<17Gr2b&-fTRecYBds+xLc)Yy3*yrQ+HN0VM0TDiU93V)HPYguxp*bR10CwNGgD(u;FW`AC=3ThkPcS@hX1VJ9Fg|u;);J#PymGr^9A>$t z+p+cxu0qaP2OE>mf*oLu`*z&Ft!t=E3HflFBm3Fn_NzKHW(hu2HWnp_8mD2`X@8R zr00*Wnqo>vB&u}jWrja>i6b?|h|R;LF@3!R^AxkM=?BfNM9z15ERHj?*sH(%;jyQz zMxx(a@@lFjr=vIzP&k$JtbQ&VZI)QgWli1T&J-ubY?&jpSh_M$W|^`p#=2E&tJ@kTyA{G57UZK0l( zw!7v2UwI+aA_K{ct3Pc;DQ}XX#62Am=f5CuInIj{;WlelZD&r_41LUwG&L9C)=p58 zWxuLw?wW5gpX2?|twuvN+6n^fcHF~2ou?S|_K}@8H-pN=tbIeJBe=Q2Ta`b895@#@ zk*eVSljo!uY|*zms7i~~{kEgo`*AoApH?n=3PL?wi(KyOom={qL-}*4f@Iw}Ro(Xe z>5}hq?BP$%&`r@9aYsXD63EKkhCuccv8f)R4i{eBpzIP7lBd%4<~?|8dK@5qJ1BEY zPYyn{p@UEeb;jn#3csWn^ChE`*i1Xwz@MvAqq!~h$1o^nlMLgcHt4enM&0l3aZ~)u zc9*aFT78G6(igU08mzU*rtIq89-lMFx@|lrH{0w-v3p96z1-afwtaR|J!^cmf@Rp> zd8^81xgGij{E7nHKxMpEVS8V|8bCjZE5 z*)xTLc)32+y{Ax2?rgV*0DAZZn!z-BLj)9+D`oz35Y0_|(jq`t__o zaM&t*d3Nn6AVePB^PphrJ7U#upvHl{d3A(oKKl3k>P5v8Db9A^cBIJK=pC)Q=evB7 zhrcAKxUosDvjnbbM^u>!$dvwA&Ir{^8{uDf`s$Qf!hxe19pV#u&23!>2DJ^xp53Lo zyJqQ@t}d*PlGL~j8@xL)SE%4Ntz~hDO-$VFC{_(ID!5up3+?kg(6-gJV|&tXPgg$A z*g^HT*ZHRZj;J^avI7SheF1(Jq+=o~WMMM;xpu9MjY1BkKZDvI>$<%F1F~)?ll9Z; zp62XCLB*=m$W%Tu{Jc5%5}kt(PK&fNOv_s6g=AK322^<84H&ieawoc7(LBG7DFwN; zOBb!F{E&JHk`Uey96@FmI7N<4?K8;-EakuR^!FP^ImZ{`#$#QItF+75>j&*v!~AkU za~+CJa=vvPPk<+ME|#9U7Rx4_;{|PIqvuv^h8@pbyHr90o8y^>A2uFSo^>@^P578d zog^Lwp+`x3?AGe0s1)3t5o`FA{bIqc_35&@7u309xQ=32l;ie>xF^hd){tv_GS1x- z|72mELK|LbnB-76#{DKQqAqa4{osOCm)CK*{w6DupB`nKT zqSos!)SO&;%iyeBv+nSEpkGbn0CnExvxYD__48UP#tjFyoIu>j4u8Y9mCF}PTgEy= zd~A<`a|^x9GWJlvt6sY~5G~xZqEBD1;b0i5>gQn=d*M3xNhJ!oQ{)tl646?2wB3>+ zPId&kXb467WJXXlrUjJB2t4hMI@W!IY&&XJC)$CF?+N3Mu|Fc#bC=Bz$8qt(W$T)| z_;%(dBj@>w#JYx)#H!k{d0x?;PxXn8Z!0e>v-?dwK?axFh1;Zsv@dH?Vu$qYW1oK? zlb%(*#5b~wco?TXt;Dl^A5=MS^-9pyUx#JMH#>0*Y(HD<_!HG*YsCq?2i$dDr;@t$ zPMZebB70ElgGgf7I8htZPJ)w3zp1ZHBD7AU!aB1=aV#z`^HAXO{v#7*`(|BS8PsSd zL|-W3_U;zA@BrS1mS0fQFHp*$UVAP1tuY-_r7%9D*>H`F(8;=5Om9hkwVvzbf`R?X ze34b*@K!86Nl92y60W@ZzN~HemSlfTk;r#y2SOQXo{g%?i&$o>GGtwnmg=><3g*+5 zGqkcSe5TCls@dRGZ^tE@zN|ST627~5zF*#bX z2Jyi#cA^Ofm1p!5P2pnE=(tf2rP#qfRxdzpD`ELrB%O<5Rff;)cS|r|{k{D*eUU)) z)(*wa6JDzG;w)<3{V5}-S+^&Dm-p@Y)Wjk-oZ(9fp)UyUVA!eKV5~YT^^wD*6r*1* z3!0uDXnQ{*d~Um;Qa5(bd?9TBq6MIk3$U}ypKhf@E0tBbsT`smA8z@8wsFh`4%d7R zLX-6)hxS-EFYCriU=w`mv=h=9^GDYq8L^+hKo^%w@HzPK_>S$VStzV(xkfv9AzFNA zfQS#ShOur-HjC8E0*SO?cXEZ~eBFEd6&z@~4R#A?r{{49`klA~_tZR@y_0@Rz9 zdX8^`{2ni&f9p&!NY~6B-_PV@8P9*c*lQt$n0)QtY6nNLD$_O|*&6R7LgBg5$Zf5z z2T}HD!=Z!kExb)SwD#JV#t(;77wMPY3u#g5uFD1U2rwhLz&06*0o^maV#K z&ntf2^Vp`OV+VQGP0c(7(wA;W^LtBgOwjqA-Rpa3av5*{{{xgO`|Z9B8R{o3H>uY( zG7jU7Xxg7CeVx?x=+pv1U#%#5Vb5}!M+akw;y0tzi}u8d=m~bj7c>QBKl`N^kh^3kYW;^C7+HV?QJ<5Bx+oRRpkMPVk70 zsb*xgpRSb-E#6f{?VU+33o8h2O@G7p8LsMo|(eI$c9^EtJcJQ_4DjP zxHZ2HHgUPu@lT<5v|Xl?^tp>wdOpt*0bRy7?hE2iOVO(mW^xnqISmCYjq4KPAzIW= zAw}qxhh{7s-?nwXeSK*uWrh{?iI>zVn8Pjw#=2?gxC9YjD6e&$T@9SVMj@*X#>k)U zi7R4}y^r*PO$T}sDsi5q?I#nE`LIpyUlLy;;8HwPVAhwSH3xHK4&)0$r5ZTN9adHVu0_ge$*X-KYl?m z_8EuA2_Zc(Q#;XfW*f{dD&7eA%0cV^+g6b&SleI5)eo|6=-Hy@P}fZ#NKj)5TN+a} zzy03gmC7jP$HdWM4ZV?9;SU9f<_Np43z}sYboY6g<8Fa|^;aRFidwUW-2hFzI4>v+ zgVrwWh7@11?S#u|`SR_tI=uPco$~Gsx-daCep@W>wVvCHW*{!#P{i#+JEiCIUV$yAlTE2f%x1?;HB%EHq?J<9&^aFmJ>HMTYz0OnjJ%|zf*xu?_1K0 zJrw8}p)4Q%h+Rt~1-`whP8RB%;uL?I#BvC3UYo9e)U#C>By%9qhvNs8_J>JwBKpz zp8z?9{TJJO{eT-I7)xl@=ZvpuwGp(Xg{DQ|(n{)W!LX(hN?Hn$rZ@Y57{MK!Lk%xyVt9kGJSvl({_Z;fW zX@+KZ@ihSHNv1a;sPU})q$Uv}o6flsk zM=oiVS(qj^9!4+Cr#wVfhO1tzI$wnRc7FND>vCQ`BSR`GleGaN*Ds^uC<&}hlq=nA ziRrL$>szwU7VKMrAx;f5>F3sqd~r>sjUJ57Z0Q0X9`v{n0Hni)T(O6yB4M6hxv6Gf(i8a-dcHy_r>%5cwb-q`hp72_rFSIC24YG0A}r_D zbUmv6E-@tw`I^RDkk1+ZxoM}=yur;~_T{PGh?-iI$Lw$JSpUI$3qDu2$&~$dJH^u4 z)AntQ2j7LMbcaIWhaO>)htuVvd!PUC`zGW1TO z7ewO-KlHj4Qoj=IX?SBR2?QJl95*O^Uowx`*T7{CrB{*D@0F9@@_-h55%aFMOp0qq z^gX*1dX%v=dxRk^^o#qGK0w4?r@~K4Sf`mOt`Kvz5Q{;LT!yV+-{%D% zev*&|)^woh-%(%fEE~S%{!lO}!K1N6|1{xAcBweEP(&^UC=?@jf)--fyNs&rDfcW^ z^w@%hC#73fO%Q2_X$$>g28x6mmiby0n`SK(_faNw!2t)0>w4x!Z~vTRwQggI(}=Te z(cT=+XLIi{R0DoQtQ(fdbYO^P)h(ghWdBLz4ezOW_k92wwM%9NZP*XL-p%($u;@Di zka%DtK32locJkN8pZRmDqs(`3Kb<`P-4QN-mssKmm8b@Zpd&q$45O^T?A%J6f@>T6 zm&(zJQ!2x)Z?SP`M*B5uw^!JU+VbiJ9ENzS%gF~HSEqXY%){1vhx{kc(1s24+zKCU zb$JU_@?g+7;Z}{JnJ%Hw?*c=vaD9}Z$Z_W37$xX`3P)7L+A%Vj1uBI*!*9vrrwY?I zUU@I9-1hHqHbws7oNJw9WSv2}G}`(5u~Hip zC?fhUG2mI+H`8x69Yo>c*3n=V5ZWonm)^@k(z zDo;3#Yg<;?MlNJuwbJVc1W1@t4YwfcJY(gp(=@D z1agO&o0(UlO;#Rig&cUZ0nY775B>$-0eo@0X97D)yc}-SWEC;e`WREhHv?D~@AE=7 zv>B|O|5?@jQ4UVc56`b9ab1&7&vf9wQ2h#l4Z8F--0CLPD^)86`S6i2p zGG*mqL8-hQdmn%-Ri|s^l+qCfimp8 zT5xagg0ieA?p1`-qhOoMvFckfP{xzzE+JM%PmmI2?@}Y%k z5IL0APUjz?G`m3mpyqt{7%g&}m-{*Qp|*m|6pzt(cXo2qL2y7pFl+ciF53Jd*x|@56^r=+gyHu}2Q&q~8gEc-|-ta8! ziRRk5(+XF9H6{MUj$Nj5Hg^m&kM=)%v_$pP@}J+3ruJQWOOeq|4c_J*DYgh3`>Cza zW$RJEC1l5a`Ifr=(x$*VCk)GBK|D1SBg6DT%t^dW=qolO^^9;{k44q-F!-#^xUw}Q z7>ztW^`QaDiMrVb#1fZe)jnR}9 zsS8dBTUZ8J;`$IPT{c=u-QlUX69Um-#{;LoUlk?EuFzSKW8|`$ry)9gy{v}oiLfyj z0rqdfec7>&f4DyC0D9928w&?hZ3ZChIH;eqoMsVWXei*85GD8sOh6aGU1$k_d}+jb ztua$YF}_9?MvahS>Wlp(TXMV%i4BhFHK)j-_8|?MNzLT(AD>M80&WULZTa?P9K9FV z$TYqG>c~@$+q`6jPLr7Gz7|yKsw-%csB}+C<6IpisuI+R?#`pzEQth`uze@C3KKi& z$F@dPO%A*>Cn;}qTawT~!FST;lWRE0ICps5i=ihzKP8wVpVsWht7DGm_9r!5O8hz~ zOW0|M|5`{e`;Wv4(bzmlU%9gm(`~>Bbj#9Q97o_%iyzD_fFlmSy*%#rggyJBKyi5WQ4+U``v9r|O6?a^kz2 zY7ZnS1dF^vv!w0*MDi$(whB!Br~u|v4i2syd1PhaTwgVQ(*DEa$%SrGML;-{oE5GT zaY9h@@QQx$c%?L}44L~F=8Bp19r+`$bVd;8I4{#d!B3>@i zo6qTq*d>Uoa^{y>t~DGRk6tUJ->1tag}^%c72F<42xH|f-u#3Rj0{x_x0cj)t6M%n{7gg}I0`U- z2ndIJCdz_mcRUB9a%6385;Tw#KbaVa5Z3CRB2CmWLYr}0t4xJKxmoh@n}F3u?w|KTnU%xlRiyzr2@ySg z6F=chVJPk`_j40c>w9-4oT>;TUiBGCjr-8wHIiBptzo^9Fi1#{L9bG$QqevTeu*k-H7y?mVS}R6hBp`t=+#`Pt(PHsWdHwT>^1q;^n&GoK zjJ(}QT@0Uej*-6YuRlM522UL)v*u=XxDQO;6_DyxKu}!{T6Z6rpW1bTz4J$xBftmT9 zl=$s;|CP9f&xZ%W$eqxfwm~_xHalGG$FoqrJ&n)+LS+L;kh;+<$t#_Eh&2B*cNqT_ zVI0f&d;VwmSH5{}q}$y8i6YhRe?R_z{#YDcM`tN%zn-PBH5!JF$!2 zmN@i*_quWB_r+T8U+?8N7+*zu{My$PP2q2m)PTSqH%qpQv)_73K@Hn%vr zZ*bmbziQ^__{2ewi_7|deuC51-jqu=pHUUwf?h0))-uAse~X9rOzb4#zrVjbNMiQiUpIx^J@xPJ6`fC0{`=c!1&kg4 z{X`heb99@~D`5%Ux8E-lsRa0D$1j#U|9^e!zpn?=+~F%S?|vMS#;I4HEaJJB9DI9> zKi0A9!Tie$B7e_hCnhrJd18CbH(GDEPp$N1s025BUd;Ux;pWdHoZhQy!YYe zplN*TmYYhd>;npY7sDaD2Ab|bw%jOktw(QrK8pK!;7lU*_^iujBIaM;YWv%^V(os; zqQ3K>Nl{#o=KaO>oheLO<@VT}oKH0b=KuUbAq$siply+n(#7Sq7UYP-_RqCn->}&E zHBnStWRKe)$Tw~%><~LQv)$dNV;kEhdUUY4I~N~mRly;*)Ngd8y6e&4#kJ*)hsWcM z7EDp0J55312)F9ped>bH8?U4N@wv0HQ7zXslI{mfGfIWXJ{@(^pxu5t?y0drem6mT4Qi+aQ^SZs+vWM-OW6gEjN@=|;8c)z9rB8B!Qpr`)5~+vCaKi0-gsmxpgF z+&6GvE}Adu*O!5}KkB+5dhjMyKK8?y+hUI6uysj__yu7e!pk?V(s=y(M{d(hyTqQb z_0oRDrFc`a`fqo0 zl#IOd+8-XDeI|76?~qs z*-E7*#%iw0%`VDj=MlRG!Txc}yh@8#SB6S#ZlHB%k98h0-*wWmF6vdT_QI`O zb_0|hc;ps#NxM#R?Rhlt&u*@HZ4H_V+%0Hg&6;LZHa=L3xj#R3<<{fmL07oqu1+bs zSQ)#9zZAn1Le}c|E=fI;64=qg%3&6zzCQl`hJM$q&V^)NGw!v;(8Gv|~ zx{h@?#wgDtufCX0xZRZb+6>>Y)#t)rHRq1Y!HH9UPH%Th(RqeZ%2>s}QoCW)V)vKV z#QtAn<4ys~8NUPq0!oObCL1i3cWHy>T%)avA1H|89AitiCxf_B0rBnxQ}VK|rZHS4 zU(JcSit%i+Z{~=^=!R_X^&5B#YhZ-OOqJ|X_o9q-odR$g6UMK%A31SVAJ`Ll)p{}O zHw@$&#gpy#X_D`Mi1PPXDVwtx^%638RbsH@NvY;_xS1w8V}b9vztxJNUtumTi#ixF z3gYPc*_pJlb!mUE%xToAf9CA0^jdk{`15kXjn|@40i5>K7g}9AI5?OSZSQ@XDH>sPO(8C(;o|Q#Pc2r0wH z`;F^gKiD2~UuEB3+$cYa>GvGYw%J&3=E`%@swfG>(OA5mb8)sQpHJ0(-V~*qd;XS> z^YYNlT)v_zM--J4j>aZ?If>rt(?5R}MYOI|(pn2l+UlI<&-CWhG<-$YMeDw#RCrSZ zJI8#o?3IyLetVRIL#(p*VGie(LwRExf1aceKtJXG5Eu<+W-6zxA z{`KubUeU_6Xe(vQ$_6^`3Zsmah|D6Ji45}eXGg_r&iv6)oiGna68Izd)Vk@ zoLU^M+s}`g`|kyvEb8*Saf@zxwjBxg$N(@cI@gG(__BZE*gt(e=`?nf5~;7fSa7S2 zKgkH*C)?q?6pfQ=)e3;HMkj3c#Kl@q5!`0CWP`wyA79->6<(gXkn6I)T(XFBp>v&n z8~BPszqD<57)l%)5HqdKEx_cg!106G+ho>5h3}V3C$XG7o_m{tP$BXX0l7X`*o+)L zKSQgzhT9(3;0bdH2^`hXBj^vBTgP}G7J9m&M(u8Jw?LBw&PWktKLWMox{Vh%NB67I&SkRY;oR)yNM;F z`x7N<_uhzm7f^WkXsmAA6xmL~SOAtKO;`#Qq1 z^|X|`7_-Mxe1T=FWRJ^xS0)GRwe>l^cXxZnhg3d&zkNqrP3Vie|yJFKm#ySv?K+b{#K!`-<> zrz1O6H_s6AygYs}&Jg_E)y}t2Zj?FC>5X&OzKyq&SdZafNKbmK<+VE=d+lRtCmNH1MYPn6bm96eAy;1$T(V2vIEt?R zaErSto%W(fh~S9r&y=H#?`#RfVo?lrw(SgyfgZ7 z4I~>HdQQFUwziRa&eydK8ABFu!{dj1&C)0H2|f4b(=x6P$w@f*re7kFGSHxqYHn-X z2O?|pJzRESh}JlI7`Bds#E&Z2dFSoZViVC1N&@4rzPuNE=>9_HF-W& zjrPa2jZ|#UN>G0sk0QI1x!QjYGZ3eC=QTfTrJ~hpFbAuWgyic5>zIX$`@I7Vl0j(; zi8WHHCs_I{GN`xWv4bVy`wqGWbs`NCe*}mrr7&a`U0OLa>tvuTD{e(c$fW<$kJgPP z_DRjzBF-Szb9GC=#pa`oLo#3~odEQzsznz0BJ6h$bV{p(q{UM_^kMC8^B%bavwD18 zT1jefT`ViF$}Koxlg4@AV?9Nh(#6}?&L*lp2@?qM>f(0Q7I;8wPzo!vwHq{4!?k;^ zE^-}?W9v4FNs#fozr_CRWS9iX=Md)-tbSH$udIAWOi25>YUY8!o}Se1;eyfYwYs$* z|Gac~Kg&XR0Hj+@PsF4tOo*Gpq~BD7?@m1x2gPLb9?KvNDLHp1`OLe;_2rWB*#^?k z8%kY5ZuAWf>ij2Y5;??AQy9f~?|h@{0v=#lp?^W>*ImwhJv|}s&djUQfl~AHW?IBE zZ>F65ze)=|1xlQ)Eh>#|m|n@=YuAYXq-j@2w(*yQEK9>_t+4z&&bam(KWNd+8?B_{BsZ* ze~@gZHJ_?3FnGy0c&*k)A_s#_rIVkCecp5SZssWIDP`9_Su4V}^<3$i@RsY^SirWKC-XQ#oyZI@&76GpYljS) zBpgnYWdS&aB`zaxiq-8hvMF|ULpp2QzyRxty~9f7!T~c`?tH5KC8Ost17i$fB*W_1 zY6X&O{t;qp9~!Fe)LI%`CJ(GG$+r!{xgE&)H}>ME)g6A`8~0Bg@a{7m=erYbZIZ}Q zTWU9DQS?Uu&cIlt0gD|!IxOica9O1Y+CDh;CX>y!Sb>mDNcvqw34?pnI74O6xIzV9<0gzpHpLuiC2)dbMZ;rSik?jF@cA zC;$9mnbQxACFM-O(Jw#I9__iM&+WNR@f3QFN;y~pnQ00tjTjqf%>=xJ>ZBvRp+}W$ zz9Hp0yO7Af4=hRFvhvPKX;QsgUDKuQrNPgW*nWffq^@bD5Btz|WoXX@aaDb9cbISk zOt(Q?SFvaeD7uPeEbzIiK2P~*KI@3~aiCLri>?9Ar(XpMk0ILDN7CC+^_?N8XXtTe zB-;^i0*Bqhn&H3(l@{Oxx@&;DeJtVnrPiEZmI}z?z4pw57bUMRTs9C7+qL-_L29QB zeW_)5bM9u3ibAipH}s;dGo@KU%c)Ov2CYj*9}n9z$fLGB7@PRVy$M06bt6_f9S76Q zq8YvFkG?DyXBCZA6vsfh5%}@!R3<0JnfO&C#c+rzc2ANmWFc|->4e~`c3aOeRK6A5N6#$J@dU+9>yISzNsJr5kmdbC#L|`t%|SxH-|IjC^^IKLgvddi#Ugxq3zY zTFj}U$|~grJPva%bvQiIy$P0F%iv>~q1i3)Y)T)m*;*YZJT>Xe> z)=8Y~cubw_!n8i}Tev!#R85)T;I{Me`tZNY`;|TeJgZOe#hsAk*A{1$BooT-tXABL z42%!wpL7GkBs$5i&YFmt|I@-Yf1v$)lZXr_M~A{#|D*-By0`OK0V7AKTQXb~zr;lL zxSNO@IveehjVDN2dwWY-*4|3dzK1qe-FQh!^2f@T)m&|Isk-{kekG@m>p$0OBFODF z%?t%_(sn#XSjLNVuqr}_3zOg1jZCJeSSDa6R^IP@o_<#ex62v6(RL?KJ=&*yOoP5& zxANq@l(9*2g9h6RU#C?%IPHB-YaPm&KSaP6cQgwyiFzbx#4YTK3#BpQliA` zl-yz>hhb^c#hj8hscxx10;Pe@8f=hM(2w=M8dg{`&02lAk6qN5T2HSfWok~6zE@$I zXe6HU2Zip965{tNueM2~Zqa#ec9w~WtA0)&D`%-EPZ^j~r`FTkdCH>SZnWSg{8+=& zRKJ!_b7z~kxG_CjiQgAMV0Qb-#CTkKrs9%our&u~P_;3zN2}lln)YvKml)#!+S)9} z`>5llT$TE_)T~^M3q9WVFDK>KnZAVME}*fLt}lF5B=XV)gSO>iu<-eYDB{7uPBaPzIsg{>5uxQYay)6 zPR8qA^00cslZ;Dbt0lf(7_z_zS)N;i%zpP-N1<0MYw;+w_YWAXxw+n1m0WJdOuE0( z#7EVspR_Iz*jN&EPA%~rc*JvTd}IC$~umH}J#C$X`9o8rO8 z=5X#g1=lp_UXebn+X@b!6bO8ny*aI(c-Z#zm&~Aj){!x>B?u(9=f=Y;6kB6*px&jC!qrPGMB7$rv9%CSvP_p@tB-KD#fz6{ z18#E>V5AAd)lLzRMW4@YH;#>7<18L9DvBUm%+W2?&u0ug$2@-sN?e;=6#XT2#q{Qj zGVDs0TC$JYEp+SR8p`$kjAl)uvsRt^2OgKi@@yH$ME7%CQsWfwIHBMTZMp0%vde2VU%(TW^b5{y zWqmn`G)p!mDVg9T{zR4MeqZ_W&u-e#Z+4q@st*G!2uK10XB=4fM*G!9=`)Lk)@n)T zvp=^r{o{uprW(H)L-AQ~UHFBN(up+1&1hS8hxHQXu{-CuDxL(Ja9`Kca{a5GE>BL6 zw3DR8|G^Ix1!3MZUJQ=vp57e;`w_ke(R!J4rB#!+lt1E=lLcRGX%Nw>6UU}TC&+za%c#zniKm<~6lYy6d z+~oIBGlO40US3Ew4iQNG`N-hsSmnO%xT$BzSg!t_hd$XI%7Ra-u2`<&x!L@-R+k{T z4{gnEy|JK|7Dd!aNS&rJI=MMynb(?D(-^zQy5(Z3QC>N)!Otvpv8|bpf-=+MYem$k zbJqaI&PKmPQL|oji}Y159xL;&K)I#XoTkRTg+ovz=D0OPmp^?YD(Va3yQ1{`q4VsP zK!Dw)EJeHZM&`6;uIh>f;o`|awp8DX9GV1lmVo(Z;r#rBdaTnq>>r5VDRx!*tJD+v z5StLj62@d@y#rx?@{@BQ$5Uf&iE)s`_%pt5=bw75dj<9O?B&(Fu%3FG*euKfhxvjE zjzN2*#rjuD{?S&gd)kwNTg9#Eca??TTqKi;gRfc&si9jl5gY`5-1P z+JIHcz9{MQoIp}0p$1Q-!ncm~E02%spa`Y-!6=Km@JF}s7qdH0D@R0*$XB*!|6(D) zyX%T9m}h^IORbW7+0if!X8AEL2(~VgxH@EN3apifG$Hwscep`&WfK2qO~8nm&f3o; zOsY7Mz+ZI2SEQ8gfALH8;4tbc?0~ANzPd=^P9rZkpX_GsU?=!9;iYmJ+ty{{7nxNU z?rV9J;`x22xXsmn&O{p6d^(#7%JEGN|MxoFuC5@VrPN=<6n*LyThh3Xp^Y8pSEbE4 zfFI=hi9_-)uNUUxMyD@BQ<=sBxE@0Qr>3qvPgSM(K|i-AW*GXX7HfPU!&&wy*y$Xb zXv=)nHf*9cGAg5S$`h%;=RT>ky%~rIl*4bApQzQda{ugB6;yOJ;BFmMBgMS^tV8Pl zr!UHGydmd!6Bx`L@|Y|8jf$pW(w>i-l_}^Q;#K-f4X}=v2mBQum^8nfEj-FrNJ!6* zpVA5-P=A%U@b^a$CA0eqCcgQl)$`pRmNLGsK9RC_+9QA29wWS!zU_P^Tz}Si_+UHwc4k_p`39&Q&5IS#^6aMn z6Lr@@8cMBx4r7aP;snSv>1yTWzna&GJ;$O$jYymH${jO$(?nRG^pw;|hz|g;TNd^B zC)F+ro)oIu$)gq0^2TAiPo85}%(^Hk+tb5DJFfS1G`!jB_L;h-O{w`6{Bx}qVvKI# z?aj3tBeFm0+{-={I?2A_3-jf-uhM+wSML^Ir&RQcG%MfJ3nW}Zw`!&Nhs#C%x%t^o zs>v#sf{ISNg5c_KH#KTNRN`00r^H&&G)Zu8s zMfrR%Oln*@pBil+`thtiRRxQmfJ}jv)wy3*%5_IG_Z&2` zmAhhW#Id}2urU7Zui!lz*oVy|6OwQA5Qkd_zLLrE`->sr%4(zQp!4jsVCRdR0wyh0 zmQ2pfCzrAgyDr6hClSbhRMXHay0>}??^&wKm$MvrcsCT_`^Jw{CG15`fKIJl4l2;P zk5XZ#|Jj04p{ggIVC!U7eb32ia4-%~Ua)hVKg%4WXuJ!}{D!W*E9ib@5?GMwG_wls zQLoXGuC+d(j-_B4&x$<6tamAS30}LHr1mwZWbA{?`t6jcT7O2aa~R*lWn1rPcZ-Hc zUetDaS00tlMChz{j#}mvsq5#dq{+{Bh+mL{&1lu@WPI{^RRt!gbIR#;15KzFw=1z! zhgAEos9%_~c|htI!oN86X)#-uPWYD1$fWqudGRak)pi~#U8ld+#o$5Odk)ENx{X(_ z^)o77%Cj@}?_X}Y)t;>+f&lU^3bVZnr7@mR&A_tw5##nzt=Op)g%Fy}z*!w@O z4n4Z`p?g2$JWK6B))}uj*fP{DQN3^b@@>;a-qIO|%rRX{m|E@clHrQQ429ris9n8} zaNBc?gGrgKF@cOTQ+vI!V0O9Q34YKq&^Pt>UJcGpD0dvU@>H$5;jqGPeUJfsN}hM_)64H zJxaT(*T+P~ea|o-3d&jq_12jNK$nqPeUe}mU_$)t*zFeWetD!qygalH7HV5M`2Kr2(Bz|1a`6CHkZ!!^~Wcb zmo1%Ox8`WV#$CWs)>`V0B8N90?17dwJ_^i7`b+LB(8ad5^227U3}lMXGzy_Jo^T*r zeKnY)(r?UKY;alFZPTiOc>iTv?45S!=nt{Sin6sW$o-!y$H0iT)LVUaiYRKTK|8*G z&bJfo2%pA#lte5V|QMyzJy+hqOu*>W4Y06%X`VZr^tOI;#=uT0DGvnVNXNa8Jja-Ox2q!Hv;=OCdwb`u z+B$ptQ5o&0=Nauk+lxcGFY^$tjxp=s5M>x}`Wd$3Ow4aphNgYeKpS%~?MCib%%_nirM@x+&(hWcrcjuef@??=S z)ca`HpM-ICCuqm_5`7?ORs4}Rs+S6y*B5_*b3dm}$~{3o6-a)L%DPaglWT4&KNkAC zvf#ffLONyc6#sKwC3Sji=p1M1Lry!o&?lX@Mck5a*Z$?M5*Uz&B;6HbF_Du*s}&pa zW9m}^+GZbLttVTBm4^I~_6cH8?1(Zlx)ry|l0h@9R>*_t#lH1Wm$1jgcd>{n;`AYu5YXzzRs_ArZgEbrp}KKc0RMV*On8d`x>VuuT|7v*A|no^uKIb$RF_VepnmE zQ|y2+h+L%Z1xKsN(Utv5vpdA3KcFZr2G#Vj65^=aGj>LZr-Ga>lhg!SvkbY^I@1oz z7uNdsGl*RX#o3cgQ&WCixyy*nb#xGI9^#yVP00#EG%y-r8MzpINZ1 zd?07l1ggdr`ok)SC(O*0TK{5|kqi$?XX))Bt0dSy3J^6ukFThMs&QwDh?`u49#7*vdDY+{dC_DABkhy;dP{=j=1z z8_r7uBPSUp-WdM)`rJHRO}#NkYw`d%lSS8Bj9vW|-mRm~Es3ZTcnP~IA5m1ytPes| z@nc{wB}U?~dETwKIh`yps2R4i;)Pu84~3ilX>jNTJ5%`rq1kNWkc_J5d{>Ih5a3HU zM2|j%h#u~E3_^-360svkU?RMYn#g(V$up?taa!m(a7O`???%u6AUAure+DmM?RQ*_ z<7UUNECU>?o_m7=ioCW=i9V{WQc_?6P*c)JZ&;A?2 zi!w$*0YQ)sx*0J-?~cD`j!ubgnPI!|wk(K?#upuhdtB-5ks3;@rDXkVoX; z*SA7A_$g~s4H|lfZFg3~96dm}Id9DhFKJ=?$9Ydz$IKx+lL6Lo3N1=k;&n7t!frJO zM_!sn(D8ek=Rk3`tOrgqa$YdCT$ZF z-vyK5<9{k`2rPdd>f{54zZz z>YVfcoT1Au@<7QKlv(OV{>3{xXbuYsGt$%3S+G~ry)z{Tsj4(SMo;Ln-U-HY3{k<6wgIxIdRX6CWypMgVTy(_V)-qcUdI!bF;M|Au z*iV0V9QWLw86PgTjxKjz{($0jj^FA1l1b(HKlX^9{(W(VMi=>O&U2p_$
    P>?vd zb)vPd<^3&(H-?Y|bkzy5cI%X+;J|)D@0|X4wQ^e?vJMYWkrVlD(GtaNUev2D1BB6h z2%tcv#AdXMM2cEz!SEzrM@!Ma_c^Na`KdFr8?g1-?JL3UW1}0TJ(6WF{qaJMN6^d# z*@1h=^VttDiO@>z`G)W%;e#0)$(dxwg`Vq2A^-=4P!S=)cP-`imRY*h8{+;==R0E5Y`*2oHS3`_3XA-MT=S~j`NnM21OT17 zA$1YS1x$Kd88Trq!V<71c>i-aL1{kD)N#UB<8hd6DeP6(N$E_Inrlvc^^><>S7m`7 z?#s!4bGJ97K!b@qbv~TlcOg;mB>`YJ&uP!I=uYEBu_?uVjDqjWyQ>Lc>w22)ml6n#-)=Xvz~&2ijpAu}r#q6wesXV`KImH&f+yFqK9{-lBtxor->o*@&- zX^zYk8IB^=ArwEFPm7PM+F$vie1ZGS>9Aq6{}amgM_0Wf)gjum31mM_cx!;s8YH=S zpxim-6^V(7$x{G|CT0c;Cprr6j}$nuN|o4RF|Or@pv=YfX_>|%?QrJqHxvLQ2OhKu zK3AF)t?OT-kh*al1gClAp)rafKkKs?DYcsi%xpVDo&yOpb8yvAcvk_T_Yfp%mC<_q zcbBz&Amqp9cV!D;!x3^GWVka~mi@U*SD<vx*@6q?mE$DR92tvX+M1ahy7*aoT5Hyh=!VUI#mN)Izq~Gmd8UV zf>zjVI*_dQ8%=&29fVAItOh=fY%%On-9PvG7`I_Z{?mYRqj#Ih#>FK~dTLC7qZkP8 z{Y=_;ssyq~-f2oR5~Gu%&=*i)wY>p7%ksuSv5G>`$Ct!la_YH(G-AI)&nl?;6pm>M zr1`ExJrKzIf;L_?WJt`RF}DqCaDc#Kn%wPCo=PwgP;X0QL(my6-zcp%i3X;D`}DK0P0&RAT~GZ5D|YSJaj={$jp@wYLg&W&}t56+4Q?>G_Y74 zp#+45_&T&-;|w^w z34fgmyM&4B3*2Z2GM{u0#Ve2TE8Vb7WVDn+DDu2&3qO}baLdOoD@SdXl3DZzn8#k&Ld7!EBqU^OqdbTUx+0tjp5cVGRf z{W@Ls69njzk##8y%%jY+7FwPt1qc#p?SUR0&b*Qabpy1AHxXKo-zU;PD`l6B;pdM0 z9#nk65YmV_MJsRU#VHT$RL2Yo-?E?$>_HpOz}j$m!Vf4UyVJ^uYjFupFPr?G<-$$y z=u;sx_7^%-YLPe);;p|*p-a1KNp@yJf=SI9YGahfNy0*w&QwF#g1eUxdn^PKI~8eW zG|-5k==^sM8ek+{U?aU}1B7iZcaGPOSTv?!WRK zgp8h47vu-ul{?PA)3FClLiC8bO>i-L6JUk!=M-AWgqc9++|L9^6BZ{nOOOnTAneSu zg?%IsqOztwAC%#_4Ko=#xc{wNd?>=}K}$wRfTH7sBC}2V(ZFbPnpq>&a!JXUYtYpW z4+~>^R8&Bz>UL-sj*QTA9?YB}S@F*V5C?2F(6KI3(+2fUWw^NL3uVK$9Iz>33-2Kx z@>HD?8(vmUiOUb6S1K#|wmIKz>W%|Vls8_ADo6|?dg$^J^AzaLZpF=KN~1{_5pCmG z0C5q~s>=;aw9SaifS$+Ji+{@pA`SGO0GEV2_~>KJ2+v$Zv={+uu9F*VYiVJjW76=a zwhtT~mP!aEOLAppi`;;+k!b?;Od&V-3E~8hbN{IR!UND)t=bmKV+P>re8ona3^>b5 zz3ZiipwN!~z%Z?Fi4oX&uT~#<^{$)UvO`$cvk&VZ7U}e}gMORwH34A*wS#QVaHf74 z{l$%A*)sE@UGy1RmxnJ!5$5A*7eghyrE!wuT2=MJaEWaw<}BW`2&v|?+CC^309UPV zUPq=Oi!vnO*lK*ZX(H{07TM=4>G~rt?Aap(p9an-A5=_=Li*_J6A=r+@fN^W)LOe5 z5f2@UIpQi1=9EXt3ybblxpK&AbXjEOM68rA<_b_QQW$u=b%t%87)eMY$g>PpaDK$0 zz4hL!QXC3$03^!K*HhWb!u#k8ZVecB1INtDb?AD)JYzxR4d~U40)>1dPri+${elYn zRK8Zq#Fuyqe3t!gIPG!85Ya@Na5f+4+Z`;dGiSW(@f}D?Z&Qp6p}8}=nu18kS)LAt z7=Utf`0nxmdA39>5=^hs^*^=TY)*!L;U*1)T{BGE<9L-PZ;v{vltUPQeIANfJN>h$ z0gU4=1R)itwjlMTMtTUjo@8(zZ}{OE4Ss*i*bO1(+fv5C3AM0?^yg+s%r5g+Q^@P5HX!#EHc(c0w*`S6%?Q!(-WMFaah+(qN$tkqth?a_qm)~vEHPc z&%mm^`LmPJ8p7!FaOiU_vd}5V!;*|wk_ATO*nNVL2%a!LG9`of0u5J*!=1IMMO{;< zUgndv0lRZiEg=uwDf{6QLnC1Rg$Kwn4>X_37t$p2g%SVY;j+VPHI4UFM?6Q-*J041 z`8+-P1iX!wdZ17AVGF&n}|lRM;mtTM&h!N z-Z9g_JIs@YE9Lo%?DvS3cEPz}p2pE7{`7zqORj%lJNJp9=qbEr2VJXKv2Z%g%>NJO zu?jDvVWd46?uq}Ch&l=(-7ElPVUMy*3P(~t{Nxiw@d(D4bC z`B&uHER}E;<{_f<0Cm^;#i;e3eUz0`-1PkA0?Kl2!ZoJCywVLcVPUb0>Jv|KuP}Y@{#Zb+F?ICp@JwlzDFE_toQVNGCiepFjq_p)b^*+h~lZh?DNNjc#0_ ztqp?^aazqAvD1`9V7zJ@`iUvc)1M@?qf%P_$T?c>l$A-KG!LU(3UF{5)wm{i&w(go zAc7gDzWM0yU@WSq`Ysc%1iW7V`)PG%0{4Q5$^NJT#-z2mo_>Sank91|4pbN9;zD7f zp=cz|2#tfmID%HMHCg%W2g@#`j|l$1xM!~!N$0yI=nd64uGK&&E(VPejp!%dXdz~} zaTBbBYjnrGC)Amn869_nIzW2yI0XDkzW4IaR%hJ%Tc)Wfl2xLr2^GSDcoKAVX}FyZ zM4}@=mes7uYhdys43;mi@MmJstP^AHugK~HCSgF;jFg}TN`_yZxq4qV;nHU<&bQ`I zg5iN)$ZG9ikl>#H#FIzHJ<%29PR=)o9@^QYD7FBre)H`-IGB!t6F#Jw*OsB;9&!e?whVyaKCR9P&|_q07{sXQPttt^P&S8w zp6~6$aG|lMXutVgP(Tfj#jtul#qTRhFhqE2h2ROsfTWq@T#WXn=#HWkxEpCX7+~1W zAQ?mn(N>tK<2?x(>di)LM%HiV>9rp$K@Hg5%d1$I)`m=b7jg{6@sV7u7Dd0g(91^S z^5eNVV4nj|U%CzPwvK$JA3JnY(VLK>M9tR?r=VtifnlRikE zrUr;nDroq9g?NSRK!YwTaT~^aZan}ORmu$tX%}Qe!u8?kd6a{E(N%qj%^TsPKlumg zHQB$L*+0wXwkfi3o;!v+?ri9uy zBq4YZph*4@j7xQYyC52aR69rL36hcChGdT|qR*LO#GwbjNm>wl!QVMfMlY(FqSU@8 zMxl^cyqHiV$z%UHAy%EG!fttUAU47L+W)Q;Z^up?IfwS&$miUhL-R=S8pUw~;0SFz z^3X#QA~V=yHg?#^9N$xp19HS)
  1. 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

    =J+_>8y`y*Q4BifG8t`UcUNZ%%i%a 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 F{{W*1$?E_B literal 0 HcmV?d00001 diff --git a/benchmarks/results/darwin/0.2.9/graphics/07_proxy_latest.png b/benchmarks/results/darwin/0.2.9/graphics/07_proxy_latest.png new file mode 100644 index 0000000000000000000000000000000000000000..3073a7391dcdf3973c67650f30c619b2feb70801 GIT binary patch literal 87159 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 literal 0 HcmV?d00001 diff --git a/benchmarks/results/darwin/0.2.9/graphics/08_heatmap_latest.png b/benchmarks/results/darwin/0.2.9/graphics/08_heatmap_latest.png new file mode 100644 index 0000000000000000000000000000000000000000..3b931e56b3bd2b3ae2f36d02e5ab1e3fa5e49136 GIT binary patch literal 127749 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

    o%fV7N%MQ0Ot|T-y(?EY3Iwx-dA&FSw2Ij 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 MgPN+0{Z;}050^-to&W#< literal 0 HcmV?d00001 diff --git a/benchmarks/results/darwin/0.2.9/graphics/09_ranking_latest.png b/benchmarks/results/darwin/0.2.9/graphics/09_ranking_latest.png new file mode 100644 index 0000000000000000000000000000000000000000..3702d284d2840d0437554b6617136037d74b5f8f GIT binary patch literal 67859 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 XUU~*)ZoN8(|Hm=)<7&A_&RqF#Js1}r literal 0 HcmV?d00001 diff --git a/include/httpmorph.h b/include/httpmorph.h index 70e703d..388934d 100644 --- a/include/httpmorph.h +++ b/include/httpmorph.h @@ -391,6 +391,63 @@ httpmorph_response_t* httpmorph_session_request( */ size_t httpmorph_session_cookie_count(httpmorph_session_t *session); +/* Connection Pool API */ + +/** + * Pre-warm connections to a host + * Establishes connections proactively for faster subsequent requests + * + * @param client HTTP client to use for connection setup + * @param host Target hostname + * @param port Target port (0 uses default: 443 for TLS, 80 for HTTP) + * @param use_tls Whether to establish TLS connections + * @param count Number of connections to pre-warm + * @return Number of connections successfully pre-warmed + */ +int httpmorph_pool_prewarm( + httpmorph_client_t *client, + const char *host, + int port, + bool use_tls, + int count +); + +/** + * Configure connection pool settings + * + * @param pool Connection pool to configure + * @param idle_timeout_seconds Idle timeout in seconds (0 = default 30s) + * @param max_connections_per_host Max connections per host (0 = default 6) + * @param max_total_connections Max total connections (0 = default 100) + */ +void httpmorph_pool_configure( + httpmorph_pool_t *pool, + int idle_timeout_seconds, + int max_connections_per_host, + int max_total_connections +); + +/** + * Get connection pool statistics + * + * @param pool Connection pool + * @param total_connections Output: total connections in pool + * @param active_connections Output: active connections + */ +void httpmorph_pool_stats( + httpmorph_pool_t *pool, + int *total_connections, + int *active_connections +); + +/** + * Clean up idle connections in the pool + * Removes connections that have been idle longer than the timeout + * + * @param pool Connection pool to clean up + */ +void httpmorph_pool_cleanup_idle(httpmorph_pool_t *pool); + /* Async I/O API */ /** diff --git a/pyproject.toml b/pyproject.toml index 7a6b1e3..ee61610 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -9,7 +9,7 @@ build-backend = "setuptools.build_meta" [project] name = "httpmorph" -version = "0.2.8" +version = "0.2.9" description = "A Python HTTP client focused on mimicking browser fingerprints." readme = "README.md" requires-python = ">=3.8" diff --git a/src/bindings/_async.pyx b/src/bindings/_async.pyx index 9506f7c..98c5457 100644 --- a/src/bindings/_async.pyx +++ b/src/bindings/_async.pyx @@ -15,8 +15,13 @@ import asyncio import select import socket import sys +import concurrent.futures +from urllib.parse import urlparse from typing import Optional, Dict, Any +# Thread pool for blocking operations (DNS) +_dns_executor = concurrent.futures.ThreadPoolExecutor(max_workers=4, thread_name_prefix="dns_") + # External C declarations cdef extern from "../core/async_request.h": @@ -93,6 +98,10 @@ cdef extern from "../core/async_request_manager.h": async_request_manager_t *mgr, uint64_t request_id ) nogil + int async_manager_remove_request( + async_request_manager_t *mgr, + uint64_t request_id + ) nogil int async_manager_poll( async_request_manager_t *mgr, uint32_t timeout_ms @@ -268,9 +277,6 @@ cdef class AsyncRequestManager: httpmorph_request_set_verify_ssl(req, verify) # Set proxy if provided - # WARNING: Proxy support is NOT implemented in the async I/O engine yet. - # The proxy will be set on the request object but IGNORED during execution. - # See ASYNC_PROXY_BUG_REPORT.md for details and implementation plan. if proxy: if isinstance(proxy, dict): # Handle proxies dict like requests library: {'http': 'http://...', 'https': 'http://...'} @@ -294,7 +300,6 @@ cdef class AsyncRequestManager: c_password = password_bytes httpmorph_request_set_proxy(req, proxy_bytes, c_username, c_password) - # TODO: Raise warning or error until C-level proxy support is implemented # Add headers if headers: @@ -336,97 +341,147 @@ cdef class AsyncRequestManager: finally: httpmorph_request_destroy(req) + def _step_request_sync(self, uint64_t request_id): + """Synchronous step for use in thread pool (handles blocking DNS)""" + cdef async_request_t *req = NULL + cdef int status + cdef int fd + + req = async_manager_get_request(self._manager, request_id) + if req is NULL: + return (ASYNC_STATUS_ERROR, -1, "Request not found") + + try: + with nogil: + status = async_request_step(req) + fd = async_request_get_fd(req) + return (status, fd, None) + finally: + async_request_unref(req) + async def _poll_request(self, uint64_t request_id, future): - """Poll a request until it completes""" - # Declare all cdef variables at the top + """Poll a request until it completes using true async I/O. + + Uses asyncio's add_reader/add_writer to wait for socket readiness + instead of busy-polling. DNS and initial connection steps run in + a thread pool since they can block. + """ cdef async_request_t *req = NULL + cdef async_request_manager_t *mgr = self._manager cdef int status cdef int fd cdef async_request_state_t state - cdef bint is_timeout - while not future.done(): - # Get request (adds a reference) - req = async_manager_get_request(self._manager, request_id) + loop = asyncio.get_running_loop() + while not future.done(): + # Get current request state + req = async_manager_get_request(mgr, request_id) if req is NULL: future.set_exception(RuntimeError("Request not found")) return try: - # Check for timeout - is_timeout = async_request_is_timeout(req) + state = async_request_get_state(req) + fd = async_request_get_fd(req) + finally: + async_request_unref(req) - if is_timeout: - async_request_unref(req) - future.set_exception(TimeoutError("Request timed out")) + # For DNS_LOOKUP and initial CONNECTING states, use thread pool + # since these can block (getaddrinfo is blocking) + if state in (ASYNC_STATE_INIT, ASYNC_STATE_DNS_LOOKUP, ASYNC_STATE_CONNECTING) and fd < 0: + result = await loop.run_in_executor( + _dns_executor, + self._step_request_sync, + request_id + ) + status, fd, error = result + if error: + future.set_exception(RuntimeError(error)) return + else: + # For states with a valid fd, use non-blocking step + req = async_manager_get_request(mgr, request_id) + if req is not NULL: + with nogil: + status = async_request_step(req) + fd = async_request_get_fd(req) + async_request_unref(req) + else: + status = ASYNC_STATUS_ERROR + + # Handle status + if status == ASYNC_STATUS_COMPLETE: + req = async_manager_get_request(mgr, request_id) + if req is not NULL: + try: + response = self._extract_response(req) + future.set_result(response) + finally: + async_request_unref(req) + # Remove from manager AFTER extracting response to avoid race conditions + async_manager_remove_request(mgr, request_id) + else: + future.set_exception(RuntimeError("Request completed but not found")) + return - # Step the state machine (always, even without FD for early states) - status = async_request_step(req) + elif status == ASYNC_STATUS_ERROR: + req = async_manager_get_request(mgr, request_id) + if req is not NULL: + try: + state = async_request_get_state(req) + state_name = async_request_state_name(state).decode('utf-8') if state else "UNKNOWN" + error_msg_ptr = async_request_get_error_message(req) + error_msg = error_msg_ptr.decode('utf-8') if error_msg_ptr is not NULL else "Unknown error" + finally: + async_request_unref(req) + else: + state_name = "UNKNOWN" + error_msg = "Unknown error" + # Remove from manager AFTER extracting error info to avoid race conditions + async_manager_remove_request(mgr, request_id) + future.set_exception(RuntimeError(f"Request failed in state {state_name}: {error_msg}")) + return - if status == ASYNC_STATUS_COMPLETE: - # Request completed successfully - response = self._extract_response(req) - async_request_unref(req) - future.set_result(response) - return + elif status == ASYNC_STATUS_NEED_READ and fd >= 0: + # Wait for socket to become readable using asyncio + await self._wait_for_fd(loop, fd, read=True) - elif status == ASYNC_STATUS_ERROR: - # Request failed - state = async_request_get_state(req) - state_name = async_request_state_name(state).decode('utf-8') if state else "UNKNOWN" + elif status == ASYNC_STATUS_NEED_WRITE and fd >= 0: + # Wait for socket to become writable using asyncio + await self._wait_for_fd(loop, fd, read=False) - # Get error message from request - error_msg_ptr = async_request_get_error_message(req) - error_msg = error_msg_ptr.decode('utf-8') if error_msg_ptr is not NULL else "Unknown error" + else: + # ASYNC_STATUS_IN_PROGRESS or no fd yet - yield and continue + await asyncio.sleep(0) - async_request_unref(req) - future.set_exception(RuntimeError(f"Request failed in state {state_name}: {error_msg}")) - return + async def _wait_for_fd(self, loop, int fd, bint read): + """Wait for a file descriptor to become ready using asyncio event loop.""" + waiter = loop.create_future() - elif status == ASYNC_STATUS_NEED_READ or status == ASYNC_STATUS_NEED_WRITE: - # Get file descriptor for event loop integration - fd = async_request_get_fd(req) - - if fd >= 0 and self._loop: - try: - # Try to use efficient event loop integration (Unix: epoll/kqueue) - if status == ASYNC_STATUS_NEED_READ: - # Wait for socket to be readable - read_event = asyncio.Event() - self._loop.add_reader(fd, read_event.set) - try: - await asyncio.wait_for(read_event.wait(), timeout=0.1) - except asyncio.TimeoutError: - pass # Continue polling - finally: - self._loop.remove_reader(fd) - else: # ASYNC_STATUS_NEED_WRITE - # Wait for socket to be writable - write_event = asyncio.Event() - self._loop.add_writer(fd, write_event.set) - try: - await asyncio.wait_for(write_event.wait(), timeout=0.1) - except asyncio.TimeoutError: - pass # Continue polling - finally: - self._loop.remove_writer(fd) - except NotImplementedError: - # Windows ProactorEventLoop doesn't support add_reader/add_writer - # Fall back to short sleep - select() doesn't work reliably with raw FDs on Windows - await asyncio.sleep(0.001) - else: - # FD not ready yet, short sleep - await asyncio.sleep(0.001) + def callback(): + if not waiter.done(): + waiter.set_result(None) - else: - # In progress, continue with short delay - await asyncio.sleep(0.001) + try: + if read: + loop.add_reader(fd, callback) + else: + loop.add_writer(fd, callback) - finally: - # Always unref the request we got at the start of the loop - async_request_unref(req) + # Wait with timeout to prevent infinite hangs + try: + await asyncio.wait_for(waiter, timeout=30.0) + except asyncio.TimeoutError: + pass # Continue anyway, the C code will handle timeout + finally: + try: + if read: + loop.remove_reader(fd) + else: + loop.remove_writer(fd) + except (ValueError, OSError): + pass # fd might be closed already cdef dict _extract_response(self, async_request_t *req): """Extract response from completed request""" @@ -444,10 +499,14 @@ cdef class AsyncRequestManager: } # Build response dict + body_bytes = b'' + if resp.body and resp.body_len > 0: + body_bytes = bytes(resp.body[:resp.body_len]) + result = { 'status_code': resp.status_code, 'headers': {}, - 'body': bytes(resp.body[:resp.body_len]) if resp.body else b'', + 'body': body_bytes, 'http_version': resp.http_version, 'connect_time_us': resp.connect_time_us, 'tls_time_us': resp.tls_time_us, diff --git a/src/bindings/_httpmorph.pyx b/src/bindings/_httpmorph.pyx index 5f918f9..b93547d 100644 --- a/src/bindings/_httpmorph.pyx +++ b/src/bindings/_httpmorph.pyx @@ -131,6 +131,12 @@ cdef extern from "../include/httpmorph.h": httpmorph_response* httpmorph_session_request(httpmorph_session_t *session, const httpmorph_request_t *request) nogil size_t httpmorph_session_cookie_count(httpmorph_session_t *session) nogil + # Connection Pool API + int httpmorph_pool_prewarm(httpmorph_client_t *client, const char *host, int port, bint use_tls, int count) nogil + void httpmorph_pool_configure(httpmorph_pool_t *pool, int idle_timeout_seconds, int max_connections_per_host, int max_total_connections) nogil + void httpmorph_pool_stats(httpmorph_pool_t *pool, int *total_connections, int *active_connections) nogil + void httpmorph_pool_cleanup_idle(httpmorph_pool_t *pool) nogil + # Async I/O API int httpmorph_pool_get_connection_fd(httpmorph_pool_t *pool, const char *host, uint16_t port) nogil @@ -407,6 +413,91 @@ cdef class Client: cdef int fd = httpmorph_pool_get_connection_fd(pool, host_bytes, port) return fd + def prewarm(self, str host, int port=0, bint use_tls=True, int count=1): + """Pre-warm connections to a host for faster subsequent requests + + Establishes TCP/TLS connections proactively to eliminate connection + setup latency from subsequent requests. + + Args: + host: Target hostname to pre-warm connections to + port: Target port (0 = default: 443 for TLS, 80 for HTTP) + use_tls: Whether to establish TLS connections (default: True) + count: Number of connections to pre-warm (default: 1) + + Returns: + int: Number of connections successfully pre-warmed + + Example: + >>> client = Client() + >>> client.prewarm('api.example.com', count=3) + 3 + >>> # Subsequent requests will reuse pre-warmed connections + >>> client.get('https://api.example.com/endpoint') + """ + cdef bytes host_bytes = host.encode('utf-8') + cdef const char* c_host = host_bytes + cdef int result + with nogil: + result = httpmorph_pool_prewarm(self._client, c_host, port, use_tls, count) + return result + + def configure_pool(self, int idle_timeout_seconds=0, int max_connections_per_host=0, int max_total_connections=0): + """Configure connection pool settings + + Args: + idle_timeout_seconds: Idle timeout before closing connections (default: 30s, 0 = keep default) + max_connections_per_host: Max connections per host (default: 6, 0 = keep default) + max_total_connections: Max total connections (default: 100, 0 = keep default) + + Example: + >>> client = Client() + >>> # Keep connections alive for 60 seconds + >>> client.configure_pool(idle_timeout_seconds=60) + >>> # Allow more concurrent connections + >>> client.configure_pool(max_connections_per_host=10, max_total_connections=200) + """ + cdef httpmorph_pool_t* pool = httpmorph_client_get_pool(self._client) + if pool is not NULL: + with nogil: + httpmorph_pool_configure(pool, idle_timeout_seconds, max_connections_per_host, max_total_connections) + + def pool_stats(self): + """Get connection pool statistics + + Returns: + dict: Dictionary with 'total_connections' and 'active_connections' + + Example: + >>> client = Client() + >>> client.get('https://example.com') + >>> stats = client.pool_stats() + >>> print(f"Total: {stats['total_connections']}, Active: {stats['active_connections']}") + """ + cdef httpmorph_pool_t* pool = httpmorph_client_get_pool(self._client) + cdef int total = 0 + cdef int active = 0 + if pool is not NULL: + with nogil: + httpmorph_pool_stats(pool, &total, &active) + return {'total_connections': total, 'active_connections': active} + + def cleanup_idle_connections(self): + """Clean up idle connections in the pool + + Removes connections that have been idle longer than the idle timeout. + Call this periodically for long-running applications to free resources. + + Example: + >>> client = Client() + >>> # ... use client for a while ... + >>> client.cleanup_idle_connections() + """ + cdef httpmorph_pool_t* pool = httpmorph_client_get_pool(self._client) + if pool is not NULL: + with nogil: + httpmorph_pool_cleanup_idle(pool) + cdef class Session: """HTTP session with persistent fingerprint""" diff --git a/src/core/async_request.c b/src/core/async_request.c index b108010..6e8fd2c 100644 --- a/src/core/async_request.c +++ b/src/core/async_request.c @@ -10,8 +10,12 @@ #include "async_request.h" #include "io_engine.h" +#include "connection_pool.h" #include "internal/proxy.h" #include "internal/util.h" +#include "internal/network.h" +#include "internal/tls.h" +#include "../tls/browser_profiles.h" #include #include #include @@ -21,9 +25,50 @@ #include #include +/* HTTP/2 support */ +#ifdef HAVE_NGHTTP2 +#include +#include "internal/request.h" +#include "internal/response.h" + +/** + * HTTP/2 stream data structure for async requests + * (defined early for use in destroy function) + */ +typedef struct { + void *req; /* Back-reference to async request (void* to avoid circular dep) */ + httpmorph_response_t *response; + uint8_t *data_buf; /* Response body buffer */ + size_t data_capacity; + size_t data_len; + bool headers_complete; + bool stream_closed; + SSL *ssl; + + /* Request body fields */ + const uint8_t *req_body; + size_t req_body_len; + size_t req_body_sent; + + /* Buffered I/O for non-blocking operation */ + uint8_t *send_buf; /* Buffer for nghttp2 output */ + size_t send_capacity; + size_t send_len; /* Data in send_buf waiting to be sent */ + size_t send_pos; /* Position of data already sent */ + + /* Receive buffer */ + uint8_t *recv_buf; /* Buffer for SSL_read data */ + size_t recv_capacity; + size_t recv_len; /* Data in recv_buf */ + + /* Track SSL errors for async handling */ + int last_ssl_want; /* SSL_ERROR_WANT_READ or SSL_ERROR_WANT_WRITE */ +} async_http2_stream_data_t; +#endif + /* Debug output control */ #ifdef HTTPMORPH_DEBUG - #define DEBUG_PRINT(...) printf(__VA_ARGS__) + #define DEBUG_PRINT(...) do { printf(__VA_ARGS__); fflush(stdout); } while(0) #else #define DEBUG_PRINT(...) ((void)0) #endif @@ -142,6 +187,9 @@ const char* async_request_state_name(async_request_state_t state) { case ASYNC_STATE_SENDING_REQUEST: return "SENDING_REQUEST"; case ASYNC_STATE_RECEIVING_HEADERS: return "RECEIVING_HEADERS"; case ASYNC_STATE_RECEIVING_BODY: return "RECEIVING_BODY"; + case ASYNC_STATE_HTTP2_INIT: return "HTTP2_INIT"; + case ASYNC_STATE_HTTP2_SEND: return "HTTP2_SEND"; + case ASYNC_STATE_HTTP2_RECV: return "HTTP2_RECV"; case ASYNC_STATE_COMPLETE: return "COMPLETE"; case ASYNC_STATE_ERROR: return "ERROR"; default: return "UNKNOWN"; @@ -324,6 +372,28 @@ async_request_t* async_request_create( return NULL; } + /* Configure per-connection browser profile settings for Chrome 143 fingerprint. + * SSL_CTX sets cipher suites and base extensions, but some require per-SSL config: + * - ECH grease (encrypted_client_hello extension) + * - OCSP stapling (status_request extension) + * - ALPS (application_settings extension) */ + const browser_profile_t *profile = &PROFILE_CHROME_143; + bool has_ech = false, has_alps = false, has_ocsp = false; + for (int i = 0; i < profile->extension_count; i++) { + uint16_t ext = profile->extensions[i]; + if (ext == 65037) has_ech = true; /* encrypted_client_hello */ + if (ext == 17613 || ext == 17513) has_alps = true; /* application_settings */ + if (ext == 5) has_ocsp = true; /* status_request */ + } + + /* Enable ECH grease for encrypted_client_hello extension */ + SSL_set_enable_ech_grease(req->ssl, has_ech ? 1 : 0); + + /* Enable OCSP stapling for status_request extension */ + if (has_ocsp) { + SSL_enable_ocsp_stapling(req->ssl); + } + /* Set SSL verification mode based on request setting */ if (request->verify_ssl) { SSL_set_verify(req->ssl, SSL_VERIFY_PEER, NULL); @@ -336,11 +406,156 @@ async_request_t* async_request_create( SSL_set_tlsext_host_name(req->ssl, request->host); } - /* Set SSL to non-blocking mode (will be done when socket is created) */ - DEBUG_PRINT("[async_request] Created SSL object for HTTPS (id=%lu)\n", + /* Set ALPN and ALPS for HTTP/2 if enabled */ + if (profile->alpn_protocol_count > 0) { + unsigned char alpn_list[256]; + unsigned char *alpn_p = alpn_list; + for (int i = 0; i < profile->alpn_protocol_count; i++) { + size_t len = strlen(profile->alpn_protocols[i]); + *alpn_p++ = (unsigned char)len; + memcpy(alpn_p, profile->alpn_protocols[i], len); + alpn_p += len; + } + if (alpn_p > alpn_list) { + SSL_set_alpn_protos(req->ssl, alpn_list, alpn_p - alpn_list); + /* Enable ALPS (application_settings) for h2 */ + if (has_alps) { + SSL_add_application_settings(req->ssl, + (const uint8_t *)"h2", 2, + (const uint8_t *)"", 0); + } + } + } + + DEBUG_PRINT("[async_request] Created SSL object with Chrome 143 profile (id=%lu)\n", (unsigned long)req->id); } + /* Allocate response object using proper constructor (initializes headers array) */ + req->response = httpmorph_response_create(NULL); /* No buffer pool for async requests */ + if (!req->response) { + /* Cleanup and return NULL */ + if (req->ssl) { + SSL_free(req->ssl); + } + free(req->send_buf); + free(req->recv_buf); + free(req); + return NULL; + } + req->response->http_version = HTTPMORPH_VERSION_1_1; /* Default, may be changed to HTTP/2 */ + req->response->error = HTTPMORPH_OK; + + return req; +} + +/** + * Create a new async request with connection pool support + */ +async_request_t* async_request_create_pooled( + const httpmorph_request_t *request, + io_engine_t *io_engine, + SSL_CTX *ssl_ctx, + httpmorph_pool_t *pool, + uint32_t timeout_ms, + async_request_callback_t callback, + void *user_data) +{ + extern int httpmorph_parse_url(const char *url, char **scheme, char **host, uint16_t *port, char **path); + + /* Parse URL to get host/port for pool lookup if not already set */ + if (!request->host && request->url) { + char *scheme = NULL, *host = NULL, *path = NULL; + uint16_t port = 0; + + if (httpmorph_parse_url(request->url, &scheme, &host, &port, &path) == 0) { + /* Store parsed values in request structure */ + ((httpmorph_request_t*)request)->host = host; /* Transfer ownership */ + ((httpmorph_request_t*)request)->port = port; + ((httpmorph_request_t*)request)->use_tls = (scheme && strcmp(scheme, "https") == 0); + + /* Free scheme and path as we don't need them */ + free(scheme); + free(path); + } + } + + /* Try to get a pooled connection (supports both HTTP/1.1 and HTTP/2) + * NOTE: Don't use pooled connections when using a proxy - proxy requests + * need to go through the proxy, not reuse direct connections to target host */ + pooled_connection_t *pooled_conn = NULL; + if (pool && request->host && request->port > 0 && + (!request->proxy_url || request->proxy_url[0] == '\0')) { + pooled_conn = pool_get_connection(pool, request->host, request->port); + if (pooled_conn && pool_connection_validate(pooled_conn)) { + DEBUG_PRINT("[async_request] Got pooled connection: host=%s, is_http2=%d, session=%p\n", + request->host, pooled_conn->is_http2, pooled_conn->http2_session); + } else if (pooled_conn) { + /* Connection invalid, destroy it */ + pool_connection_destroy(pooled_conn); + pooled_conn = NULL; + } + } + + /* Create the async request normally */ + async_request_t *req = async_request_create(request, io_engine, ssl_ctx, + timeout_ms, callback, user_data); + if (!req) { + if (pooled_conn) { + pool_connection_destroy(pooled_conn); + } + return NULL; + } + + /* Store pool reference for returning connection later */ + req->pool = pool; + + /* If we got a pooled connection, use it */ + if (pooled_conn) { + req->pooled_conn = pooled_conn; + req->from_pool = true; + + /* Free the SSL object we just created - we'll use the pooled one */ + if (req->ssl) { + SSL_free(req->ssl); + } + + /* Use the existing socket and SSL connection */ + req->sockfd = pooled_conn->sockfd; + req->ssl = pooled_conn->ssl; + req->dns_resolved = true; + req->is_https = (pooled_conn->ssl != NULL); + +#ifdef HAVE_NGHTTP2 + /* Restore HTTP/2 session from pooled connection if available */ + if (pooled_conn->is_http2 && pooled_conn->http2_session) { + req->use_http2 = true; + req->http2_session = pooled_conn->http2_session; + req->http2_stream_data = pooled_conn->http2_stream_data; + req->http2_session_initialized = pooled_conn->preface_sent; + /* Set response HTTP version to HTTP/2 since we're reusing an HTTP/2 connection */ + req->response->http_version = HTTPMORPH_VERSION_2_0; + /* Clear from pool - request now owns the session */ + pooled_conn->http2_session = NULL; + pooled_conn->http2_stream_data = NULL; + /* For HTTP/2, skip to HTTP2_INIT which will submit a new request */ + req->state = ASYNC_STATE_HTTP2_INIT; + DEBUG_PRINT("[async_request] Restored HTTP/2 session from pool: session=%p\n", + req->http2_session); + } else { + /* HTTP/1.1 - skip directly to sending request */ + req->state = ASYNC_STATE_SENDING_REQUEST; + DEBUG_PRINT("[async_request] Reusing pooled HTTP/1.1 connection fd=%d\n", + req->sockfd); + } +#else + /* No HTTP/2 support - skip directly to sending request */ + req->state = ASYNC_STATE_SENDING_REQUEST; + DEBUG_PRINT("[async_request] Reusing pooled connection fd=%d (id=%lu)\n", + req->sockfd, (unsigned long)req->id); +#endif + } + return req; } @@ -374,20 +589,83 @@ void async_request_destroy(async_request_t *req) { } #endif - /* Close socket (but never close stdin/stdout/stderr) */ - if (req->sockfd > 2) { + /* Handle connection pooling with HTTP/2 session preservation */ + if (req->from_pool && req->pooled_conn) { + /* Return connection to pool if request succeeded, otherwise destroy it */ + if (req->state == ASYNC_STATE_COMPLETE && req->pool) { +#ifdef HAVE_NGHTTP2 + /* Store HTTP/2 session back in pooled connection for reuse */ + if (req->use_http2 && req->http2_session) { + req->pooled_conn->http2_session = req->http2_session; + req->pooled_conn->http2_stream_data = req->http2_stream_data; + req->pooled_conn->is_http2 = true; + req->pooled_conn->preface_sent = true; + /* Don't free the session - pool owns it now */ + req->http2_session = NULL; + req->http2_stream_data = NULL; + DEBUG_PRINT("[async_request] Stored HTTP/2 session in pool fd=%d\n", req->sockfd); + } +#endif + /* Update last used time and return to pool */ + req->pooled_conn->last_used = get_time_us() / 1000000; /* Convert to seconds */ + pool_put_connection(req->pool, req->pooled_conn); + DEBUG_PRINT("[async_request] Returned connection to pool fd=%d\n", req->sockfd); + } else { + /* Request failed - destroy the connection */ + pool_connection_destroy(req->pooled_conn); + DEBUG_PRINT("[async_request] Destroyed failed pooled connection fd=%d\n", req->sockfd); + } + /* Don't close socket or free SSL - pooled_conn owns them */ + req->sockfd = -1; + req->ssl = NULL; + req->pooled_conn = NULL; + } else if (req->pool && req->state == ASYNC_STATE_COMPLETE && + req->sockfd > 2 && req->request && req->request->host) { + /* New connection that completed successfully - add to pool */ + DEBUG_PRINT("[async_request] Adding new connection to pool: host=%s, is_http2=%d\n", + req->request->host, req->use_http2); + pooled_connection_t *new_conn = pool_connection_create( + req->request->host, req->request->port, req->sockfd, req->ssl, req->use_http2); + if (new_conn) { +#ifdef HAVE_NGHTTP2 + /* Store HTTP/2 session in new pool entry for reuse */ + if (req->use_http2 && req->http2_session) { + new_conn->http2_session = req->http2_session; + new_conn->http2_stream_data = req->http2_stream_data; + new_conn->preface_sent = true; + /* Don't free the session - pool owns it now */ + req->http2_session = NULL; + req->http2_stream_data = NULL; + DEBUG_PRINT("[async_request] Stored HTTP/2 session in pool: session=%p\n", + new_conn->http2_session); + } +#endif + new_conn->last_used = get_time_us() / 1000000; + pool_put_connection(req->pool, new_conn); + /* Don't close socket or free SSL - pool owns them now */ + req->sockfd = -1; + req->ssl = NULL; + } else { + /* Failed to create pool connection, fall through to normal cleanup */ + goto normal_cleanup; + } + } else { +normal_cleanup: + /* Close socket (but never close stdin/stdout/stderr) */ + if (req->sockfd > 2) { #ifdef _WIN32 - closesocket(req->sockfd); + closesocket(req->sockfd); #else - close(req->sockfd); + close(req->sockfd); #endif - req->sockfd = -1; - } + req->sockfd = -1; + } - /* Clean up SSL */ - if (req->ssl) { - SSL_free(req->ssl); - req->ssl = NULL; + /* Clean up SSL */ + if (req->ssl) { + SSL_free(req->ssl); + req->ssl = NULL; + } } /* Free buffers */ @@ -401,6 +679,26 @@ void async_request_destroy(async_request_t *req) { free(req->target_host); free(req->proxy_recv_buf); +#ifdef HAVE_NGHTTP2 + /* Clean up HTTP/2 resources */ + if (req->http2_session) { + nghttp2_session_del((nghttp2_session *)req->http2_session); + req->http2_session = NULL; + } + if (req->http2_callbacks) { + nghttp2_session_callbacks_del((nghttp2_session_callbacks *)req->http2_callbacks); + req->http2_callbacks = NULL; + } + if (req->http2_stream_data) { + async_http2_stream_data_t *stream_data = (async_http2_stream_data_t *)req->http2_stream_data; + free(stream_data->data_buf); + free(stream_data->send_buf); + free(stream_data->recv_buf); + free(stream_data); + req->http2_stream_data = NULL; + } +#endif + /* Free response if allocated */ if (req->response) { httpmorph_response_destroy(req->response); @@ -497,9 +795,6 @@ static int step_dns_lookup(async_request_t *req) { return ASYNC_STATUS_IN_PROGRESS; } - /* Perform blocking DNS lookup (for now) */ - /* Note: In production, this should use async DNS (getaddrinfo_a or thread pool) */ - /* If using proxy, resolve proxy hostname instead of target hostname */ const char *hostname; uint16_t port; @@ -521,31 +816,49 @@ static int step_dns_lookup(async_request_t *req) { return ASYNC_STATUS_ERROR; } - /* Setup hints for getaddrinfo */ - struct addrinfo hints; - memset(&hints, 0, sizeof(hints)); - hints.ai_family = AF_UNSPEC; /* Allow IPv4 or IPv6 */ - hints.ai_socktype = SOCK_STREAM; /* TCP socket */ - hints.ai_flags = AI_ADDRCONFIG; /* Only return addresses we can use */ + struct addrinfo *result = NULL; + bool from_cache = false; - /* Convert port to string */ - char port_str[16]; - snprintf(port_str, sizeof(port_str), "%u", port); + /* Try DNS cache first (shared with sync path) */ + result = dns_cache_lookup(hostname, port); + if (result) { + from_cache = true; + DEBUG_PRINT("[async_request] DNS cache hit for %s:%u (id=%lu)\n", + hostname, port, (unsigned long)req->id); + } else { + /* Cache miss - perform blocking DNS lookup */ + /* Note: In production, this should use async DNS (getaddrinfo_a or thread pool) */ + DEBUG_PRINT("[async_request] DNS cache miss for %s:%u, performing lookup (id=%lu)\n", + hostname, port, (unsigned long)req->id); - /* Perform DNS lookup */ - struct addrinfo *result = NULL; - int ret = getaddrinfo(hostname, port_str, &hints, &result); + /* Setup hints for getaddrinfo */ + struct addrinfo hints; + memset(&hints, 0, sizeof(hints)); + hints.ai_family = AF_UNSPEC; /* Allow IPv4 or IPv6 */ + hints.ai_socktype = SOCK_STREAM; /* TCP socket */ + hints.ai_flags = AI_ADDRCONFIG; /* Only return addresses we can use */ - if (ret != 0) { - char error_buf[256]; - snprintf(error_buf, sizeof(error_buf), "DNS lookup failed: %s", gai_strerror(ret)); - async_request_set_error(req, ret, error_buf); - return ASYNC_STATUS_ERROR; - } + /* Convert port to string */ + char port_str[16]; + snprintf(port_str, sizeof(port_str), "%u", port); - if (!result) { - async_request_set_error(req, -1, "DNS lookup returned no results"); - return ASYNC_STATUS_ERROR; + /* Perform DNS lookup */ + int ret = getaddrinfo(hostname, port_str, &hints, &result); + + if (ret != 0) { + char error_buf[256]; + snprintf(error_buf, sizeof(error_buf), "DNS lookup failed: %s", gai_strerror(ret)); + async_request_set_error(req, ret, error_buf); + return ASYNC_STATUS_ERROR; + } + + if (!result) { + async_request_set_error(req, -1, "DNS lookup returned no results"); + return ASYNC_STATUS_ERROR; + } + + /* Add to DNS cache for future use */ + dns_cache_add(hostname, port, result); } /* Store the first result */ @@ -553,11 +866,15 @@ static int step_dns_lookup(async_request_t *req) { req->addr_len = result->ai_addrlen; req->dns_resolved = true; - DEBUG_PRINT("[async_request] DNS resolved for %s:%u (id=%lu)\n", - hostname, port, (unsigned long)req->id); + DEBUG_PRINT("[async_request] DNS resolved for %s:%u (from_cache=%d) (id=%lu)\n", + hostname, port, from_cache, (unsigned long)req->id); /* Free the result */ - freeaddrinfo(result); + if (from_cache) { + dns_cache_free_result(result); + } else { + freeaddrinfo(result); + } /* Move to connecting state */ req->state = ASYNC_STATE_CONNECTING; @@ -917,6 +1234,9 @@ static int step_connecting(async_request_t *req) { /** * State: TLS handshake + * + * Performs non-blocking TLS handshake. Each call attempts one handshake step, + * returning NEED_READ or NEED_WRITE to allow the event loop to wait for I/O. */ static int step_tls_handshake(async_request_t *req) { /* SSL object should exist for HTTPS */ @@ -925,19 +1245,34 @@ static int step_tls_handshake(async_request_t *req) { return ASYNC_STATUS_ERROR; } + int current_fd = SSL_get_fd(req->ssl); + /* Bind SSL to socket if not already done */ - if (SSL_get_fd(req->ssl) != req->sockfd) { + if (current_fd != req->sockfd) { if (SSL_set_fd(req->ssl, req->sockfd) != 1) { async_request_set_error(req, -1, "Failed to bind SSL to socket"); return ASYNC_STATUS_ERROR; } /* Set connect state (client mode) */ SSL_set_connect_state(req->ssl); + + /* Try to resume a cached TLS session for faster handshake */ + const char *hostname = req->request->host; + uint16_t port = req->request->port; + if (hostname && port > 0) { + SSL_SESSION *cached_session = global_session_cache_get(hostname, port); + if (cached_session) { + SSL_set_session(req->ssl, cached_session); + DEBUG_PRINT("[async_request] Using cached TLS session for %s:%u (id=%lu)\n", + hostname, port, (unsigned long)req->id); + } + } + DEBUG_PRINT("[async_request] SSL bound to socket fd=%d (id=%lu)\n", req->sockfd, (unsigned long)req->id); } - /* Perform non-blocking handshake */ + /* Perform non-blocking handshake step */ int ret = SSL_do_handshake(req->ssl); if (ret == 1) { @@ -945,9 +1280,40 @@ static int step_tls_handshake(async_request_t *req) { DEBUG_PRINT("[async_request] TLS handshake complete (id=%lu)\n", (unsigned long)req->id); + /* Cache the session for future resumption */ + const char *hostname = req->request->host; + uint16_t port = req->request->port; + if (hostname && port > 0) { + SSL_SESSION *session = SSL_get1_session(req->ssl); + if (session) { + global_session_cache_put(hostname, port, session); + SSL_SESSION_free(session); /* Release our reference */ + DEBUG_PRINT("[async_request] Cached TLS session for %s:%u (id=%lu)\n", + hostname, port, (unsigned long)req->id); + } + } + +#ifdef HAVE_NGHTTP2 + /* Check ALPN negotiated protocol */ + const unsigned char *alpn_data = NULL; + unsigned int alpn_len = 0; + SSL_get0_alpn_selected(req->ssl, &alpn_data, &alpn_len); + + if (alpn_data && alpn_len == 2 && memcmp(alpn_data, "h2", 2) == 0) { + /* HTTP/2 negotiated - transition to HTTP/2 state machine */ + req->use_http2 = true; + req->response->http_version = HTTPMORPH_VERSION_2_0; + DEBUG_PRINT("[async_request] HTTP/2 negotiated via ALPN (id=%lu)\n", + (unsigned long)req->id); + req->state = ASYNC_STATE_HTTP2_INIT; + /* Return NEED_WRITE since HTTP/2 init will send data */ + return ASYNC_STATUS_NEED_WRITE; + } +#endif + req->state = ASYNC_STATE_SENDING_REQUEST; - /* Continue immediately to sending */ - return ASYNC_STATUS_IN_PROGRESS; + /* Continue to sending - yield first to allow event loop to process */ + return ASYNC_STATUS_NEED_WRITE; } /* Check error */ @@ -1045,6 +1411,13 @@ static int build_http_request(async_request_t *req) { return -1; } + /* Add Connection: keep-alive for connection reuse */ + written += snprintf(buf + written, SEND_BUFFER_SIZE - written, + "Connection: keep-alive\r\n"); + if (written >= (int)SEND_BUFFER_SIZE) { + return -1; + } + /* Add Proxy-Authorization header for HTTP proxy (not HTTPS/CONNECT) */ if (use_absolute_uri && (req->proxy_username || req->proxy_password)) { const char *username = req->proxy_username ? req->proxy_username : ""; @@ -1712,16 +2085,13 @@ static int step_receiving_body(async_request_t *req) { DEBUG_PRINT("[async_request] No body to receive (id=%lu)\n", (unsigned long)req->id); - /* Create response object for empty body */ - if (!req->response) { - req->response = calloc(1, sizeof(httpmorph_response_t)); - if (req->response) { - req->response->body = NULL; - req->response->body_len = 0; - req->response->status_code = 200; /* TODO: Parse from headers */ - req->response->http_version = HTTPMORPH_VERSION_1_1; - req->response->error = HTTPMORPH_OK; - } + /* Initialize response object for empty body */ + if (req->response) { + req->response->body = NULL; + req->response->body_len = 0; + req->response->status_code = 200; /* TODO: Parse from headers */ + /* http_version already set during creation or ALPN negotiation */ + req->response->error = HTTPMORPH_OK; } req->state = ASYNC_STATE_COMPLETE; @@ -1733,24 +2103,21 @@ static int step_receiving_body(async_request_t *req) { DEBUG_PRINT("[async_request] Body already complete (%zu bytes) (id=%lu)\n", req->body_received, (unsigned long)req->id); - /* Create response object */ - if (!req->response) { - req->response = calloc(1, sizeof(httpmorph_response_t)); - if (req->response) { - /* Extract body from recv_buf (starts after headers) */ - size_t body_start = req->headers_end_pos; - if (req->content_length > 0) { - req->response->body = malloc(req->content_length); - if (req->response->body) { - memcpy(req->response->body, req->recv_buf + body_start, req->content_length); - req->response->body_len = req->content_length; - req->response->_body_actual_size = req->content_length; /* Track allocated size */ - } + /* Populate response object with body data */ + if (req->response) { + /* Extract body from recv_buf (starts after headers) */ + size_t body_start = req->headers_end_pos; + if (req->content_length > 0) { + req->response->body = malloc(req->content_length); + if (req->response->body) { + memcpy(req->response->body, req->recv_buf + body_start, req->content_length); + req->response->body_len = req->content_length; + req->response->_body_actual_size = req->content_length; /* Track allocated size */ } - req->response->status_code = 200; // TODO: Parse from headers - req->response->http_version = HTTPMORPH_VERSION_1_1; - req->response->error = HTTPMORPH_OK; } + req->response->status_code = 200; // TODO: Parse from headers + /* http_version already set during creation or ALPN negotiation */ + req->response->error = HTTPMORPH_OK; } req->state = ASYNC_STATE_COMPLETE; @@ -1941,24 +2308,21 @@ static int step_receiving_body(async_request_t *req) { DEBUG_PRINT("[async_request] Body received (%zu bytes) (id=%lu)\n", req->body_received, (unsigned long)req->id); - /* Create response object */ - if (!req->response) { - req->response = calloc(1, sizeof(httpmorph_response_t)); - if (req->response) { - /* Extract body from recv_buf (starts after headers) */ - size_t body_start = req->headers_end_pos; - if (req->content_length > 0) { - req->response->body = malloc(req->content_length); - if (req->response->body) { - memcpy(req->response->body, req->recv_buf + body_start, req->content_length); - req->response->body_len = req->content_length; - req->response->_body_actual_size = req->content_length; /* Track allocated size */ - } + /* Populate response object with body data */ + if (req->response) { + /* Extract body from recv_buf (starts after headers) */ + size_t body_start = req->headers_end_pos; + if (req->content_length > 0) { + req->response->body = malloc(req->content_length); + if (req->response->body) { + memcpy(req->response->body, req->recv_buf + body_start, req->content_length); + req->response->body_len = req->content_length; + req->response->_body_actual_size = req->content_length; /* Track allocated size */ } - req->response->status_code = 200; // TODO: Parse from headers - req->response->http_version = HTTPMORPH_VERSION_1_1; - req->response->error = HTTPMORPH_OK; } + req->response->status_code = 200; // TODO: Parse from headers + /* http_version already set during creation or ALPN negotiation */ + req->response->error = HTTPMORPH_OK; } req->state = ASYNC_STATE_COMPLETE; @@ -2109,6 +2473,577 @@ static int step_proxy_connect(async_request_t *req) { return ASYNC_STATUS_IN_PROGRESS; } +#ifdef HAVE_NGHTTP2 + +/** + * HTTP/2 send callback for async - buffers data instead of direct SSL_write + * This allows proper non-blocking I/O handling + */ +static ssize_t async_http2_send_callback(nghttp2_session *session, const uint8_t *data, + size_t length, int flags, void *user_data) { + async_http2_stream_data_t *stream_data = (async_http2_stream_data_t *)user_data; + if (!stream_data) { + return NGHTTP2_ERR_CALLBACK_FAILURE; + } + + /* Expand send buffer if needed */ + size_t needed = stream_data->send_len + length; + if (needed > stream_data->send_capacity) { + size_t new_capacity = needed * 2; + if (new_capacity < 32768) new_capacity = 32768; + uint8_t *new_buf = realloc(stream_data->send_buf, new_capacity); + if (!new_buf) { + return NGHTTP2_ERR_CALLBACK_FAILURE; + } + stream_data->send_buf = new_buf; + stream_data->send_capacity = new_capacity; + } + + /* Copy data to send buffer */ + memcpy(stream_data->send_buf + stream_data->send_len, data, length); + stream_data->send_len += length; + + return (ssize_t)length; +} + +/** + * HTTP/2 recv callback for async - returns WOULDBLOCK since we use mem_recv + * We don't use this callback directly; instead we do SSL_read externally + * and feed data to nghttp2 via nghttp2_session_mem_recv + */ +static ssize_t async_http2_recv_callback(nghttp2_session *session, uint8_t *buf, + size_t length, int flags, void *user_data) { + /* Always return WOULDBLOCK - we handle recv externally */ + return NGHTTP2_ERR_WOULDBLOCK; +} + +/** + * HTTP/2 data provider read callback for request body + */ +static ssize_t async_http2_data_source_read_callback(nghttp2_session *session, int32_t stream_id, + uint8_t *buf, size_t length, uint32_t *data_flags, + nghttp2_data_source *source, void *user_data) { + async_http2_stream_data_t *stream_data = (async_http2_stream_data_t *)user_data; + + size_t remaining = stream_data->req_body_len - stream_data->req_body_sent; + size_t to_send = remaining < length ? remaining : length; + + if (to_send > 0) { + memcpy(buf, stream_data->req_body + stream_data->req_body_sent, to_send); + stream_data->req_body_sent += to_send; + } + + if (stream_data->req_body_sent >= stream_data->req_body_len) { + *data_flags |= NGHTTP2_DATA_FLAG_EOF; + } + + return to_send; +} + +/** + * HTTP/2 header callback for async + */ +static int async_http2_on_header_callback(nghttp2_session *session, + const nghttp2_frame *frame, + const uint8_t *name, size_t namelen, + const uint8_t *value, size_t valuelen, + uint8_t flags, void *user_data) { + async_http2_stream_data_t *stream_data = (async_http2_stream_data_t *)nghttp2_session_get_stream_user_data(session, frame->hd.stream_id); + if (!stream_data) { + stream_data = (async_http2_stream_data_t *)user_data; + } + if (!stream_data) { + return NGHTTP2_ERR_CALLBACK_FAILURE; + } + + if (frame->hd.type != NGHTTP2_HEADERS || frame->headers.cat != NGHTTP2_HCAT_RESPONSE) { + return 0; + } + + /* Handle :status pseudo-header */ + if (namelen == 7 && memcmp(name, ":status", 7) == 0) { + char status_str[4] = {0}; + size_t copy_len = valuelen > 3 ? 3 : valuelen; + memcpy(status_str, value, copy_len); + stream_data->response->status_code = atoi(status_str); + return 0; + } + + /* Add regular header */ + httpmorph_response_add_header_internal(stream_data->response, (const char *)name, + namelen, (const char *)value, valuelen); + return 0; +} + +/** + * HTTP/2 data chunk recv callback for async + */ +static int async_http2_on_data_chunk_recv_callback(nghttp2_session *session, uint8_t flags, + int32_t stream_id, const uint8_t *data, + size_t len, void *user_data) { + async_http2_stream_data_t *stream_data = (async_http2_stream_data_t *)nghttp2_session_get_stream_user_data(session, stream_id); + if (!stream_data) { + stream_data = (async_http2_stream_data_t *)user_data; + } + if (!stream_data) { + return NGHTTP2_ERR_CALLBACK_FAILURE; + } + + /* Expand buffer if needed */ + if (stream_data->data_len + len > stream_data->data_capacity) { + size_t sum = stream_data->data_len + len; + if (sum > SIZE_MAX / 2) { + return NGHTTP2_ERR_CALLBACK_FAILURE; + } + size_t new_capacity = sum * 2; + uint8_t *new_buf = realloc(stream_data->data_buf, new_capacity); + if (!new_buf) return NGHTTP2_ERR_CALLBACK_FAILURE; + stream_data->data_buf = new_buf; + stream_data->data_capacity = new_capacity; + } + + memcpy(stream_data->data_buf + stream_data->data_len, data, len); + stream_data->data_len += len; + return 0; +} + +/** + * HTTP/2 frame recv callback for async + */ +static int async_http2_on_frame_recv_callback(nghttp2_session *session, + const nghttp2_frame *frame, void *user_data) { + async_http2_stream_data_t *stream_data = NULL; + if (frame->hd.stream_id > 0) { + stream_data = (async_http2_stream_data_t *)nghttp2_session_get_stream_user_data(session, frame->hd.stream_id); + } + if (!stream_data) { + stream_data = (async_http2_stream_data_t *)user_data; + } + if (!stream_data) { + return 0; + } + + if (frame->hd.type == NGHTTP2_HEADERS && + frame->headers.cat == NGHTTP2_HCAT_RESPONSE) { + stream_data->headers_complete = true; + } + + /* Check if stream is closed */ + if ((frame->hd.type == NGHTTP2_HEADERS || frame->hd.type == NGHTTP2_DATA) && + (frame->hd.flags & NGHTTP2_FLAG_END_STREAM) && + frame->hd.stream_id > 0) { + stream_data->stream_closed = true; + /* Update async request state */ + if (stream_data->req) { + ((async_request_t *)stream_data->req)->http2_stream_closed = true; + } + } + return 0; +} + +/** + * State: Initialize HTTP/2 session + * Handles both new sessions and reused sessions from the connection pool + */ +static int step_http2_init(async_request_t *req) { + DEBUG_PRINT("[async_request] HTTP/2 init (id=%lu, reused=%d)\n", + (unsigned long)req->id, req->http2_session_initialized); + + nghttp2_session *session = (nghttp2_session *)req->http2_session; + async_http2_stream_data_t *stream_data = (async_http2_stream_data_t *)req->http2_stream_data; + bool is_reused_session = (session != NULL && req->http2_session_initialized); + + /* For reused sessions, we need to prepare new stream data for this request */ + if (is_reused_session) { + /* Reset/reallocate stream data for the new request */ + if (stream_data) { + /* Reset existing stream data for reuse */ + stream_data->req = req; + stream_data->response = req->response; + stream_data->ssl = req->ssl; + stream_data->data_len = 0; + stream_data->send_len = 0; + stream_data->send_pos = 0; + stream_data->recv_len = 0; + stream_data->stream_closed = false; + stream_data->headers_complete = false; + stream_data->req_body = (const uint8_t *)req->request->body; + stream_data->req_body_len = req->request->body_len; + stream_data->req_body_sent = 0; + stream_data->last_ssl_want = 0; + + /* Update nghttp2 session's user data to point to the reset stream_data */ + nghttp2_session_set_user_data(session, stream_data); + } else { + /* Need to create new stream data for reused session */ + goto create_stream_data; + } + } else { +create_stream_data: + /* Create new stream data structure */ + stream_data = calloc(1, sizeof(async_http2_stream_data_t)); + if (!stream_data) { + async_request_set_error(req, HTTPMORPH_ERROR_MEMORY, "Failed to allocate HTTP/2 stream data"); + return ASYNC_STATUS_ERROR; + } + + stream_data->req = req; + stream_data->response = req->response; + stream_data->ssl = req->ssl; + + /* Allocate response body buffer */ + stream_data->data_capacity = 16384; + stream_data->data_buf = malloc(stream_data->data_capacity); + if (!stream_data->data_buf) { + free(stream_data); + async_request_set_error(req, HTTPMORPH_ERROR_MEMORY, "Failed to allocate HTTP/2 buffer"); + return ASYNC_STATUS_ERROR; + } + + /* Allocate send buffer for nghttp2 output */ + stream_data->send_capacity = 32768; + stream_data->send_buf = malloc(stream_data->send_capacity); + if (!stream_data->send_buf) { + free(stream_data->data_buf); + free(stream_data); + async_request_set_error(req, HTTPMORPH_ERROR_MEMORY, "Failed to allocate HTTP/2 send buffer"); + return ASYNC_STATUS_ERROR; + } + stream_data->send_len = 0; + stream_data->send_pos = 0; + + /* Allocate receive buffer for SSL_read data */ + stream_data->recv_capacity = 16384; + stream_data->recv_buf = malloc(stream_data->recv_capacity); + if (!stream_data->recv_buf) { + free(stream_data->send_buf); + free(stream_data->data_buf); + free(stream_data); + async_request_set_error(req, HTTPMORPH_ERROR_MEMORY, "Failed to allocate HTTP/2 recv buffer"); + return ASYNC_STATUS_ERROR; + } + stream_data->recv_len = 0; + + /* Set up request body if present */ + stream_data->req_body = (const uint8_t *)req->request->body; + stream_data->req_body_len = req->request->body_len; + stream_data->req_body_sent = 0; + + req->http2_stream_data = stream_data; + } + + /* For new sessions, create the nghttp2 session and send preface */ + if (!is_reused_session) { + /* Create nghttp2 callbacks */ + nghttp2_session_callbacks *callbacks = NULL; + int cb_rv = nghttp2_session_callbacks_new(&callbacks); + + if (cb_rv != 0 || !callbacks) { + free(stream_data->recv_buf); + free(stream_data->send_buf); + free(stream_data->data_buf); + free(stream_data); + req->http2_stream_data = NULL; + async_request_set_error(req, -1, "Failed to create nghttp2 callbacks"); + return ASYNC_STATUS_ERROR; + } + + nghttp2_session_callbacks_set_send_callback(callbacks, async_http2_send_callback); + nghttp2_session_callbacks_set_recv_callback(callbacks, async_http2_recv_callback); + nghttp2_session_callbacks_set_on_header_callback(callbacks, async_http2_on_header_callback); + nghttp2_session_callbacks_set_on_data_chunk_recv_callback(callbacks, async_http2_on_data_chunk_recv_callback); + nghttp2_session_callbacks_set_on_frame_recv_callback(callbacks, async_http2_on_frame_recv_callback); + req->http2_callbacks = callbacks; + + /* Create HTTP/2 session */ + int rv = nghttp2_session_client_new(&session, callbacks, stream_data); + if (rv != 0) { + nghttp2_session_callbacks_del(callbacks); + free(stream_data->recv_buf); + free(stream_data->send_buf); + free(stream_data->data_buf); + free(stream_data); + req->http2_stream_data = NULL; + req->http2_callbacks = NULL; + async_request_set_error(req, -1, "Failed to create HTTP/2 session"); + return ASYNC_STATUS_ERROR; + } + req->http2_session = session; + + /* Send HTTP/2 preface and settings (Chrome-like) - only for new sessions */ + nghttp2_settings_entry iv[4]; + iv[0].settings_id = NGHTTP2_SETTINGS_HEADER_TABLE_SIZE; + iv[0].value = 65536; + iv[1].settings_id = NGHTTP2_SETTINGS_ENABLE_PUSH; + iv[1].value = 0; + iv[2].settings_id = NGHTTP2_SETTINGS_INITIAL_WINDOW_SIZE; + iv[2].value = 6291456; + iv[3].settings_id = NGHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE; + iv[3].value = 262144; + + nghttp2_submit_settings(session, NGHTTP2_FLAG_NONE, iv, 4); + nghttp2_submit_window_update(session, NGHTTP2_FLAG_NONE, 0, 15663105); + + DEBUG_PRINT("[async_request] Created new HTTP/2 session (id=%lu)\n", (unsigned long)req->id); + } else { + DEBUG_PRINT("[async_request] Reusing existing HTTP/2 session (id=%lu)\n", (unsigned long)req->id); + } + + /* Prepare request headers */ + nghttp2_nv hdrs[64]; + int nhdrs = 0; + + const char *method_str = httpmorph_method_to_string(req->request->method); + const char *host = req->request->host; + + /* Extract path from URL */ + const char *path = strchr(req->request->url, '/'); + if (path && path[0] == '/' && path[1] == '/') { + path = strchr(path + 2, '/'); + } + if (!path || path[0] != '/') { + path = "/"; + } + + /* Add pseudo-headers in Chrome order: m,a,s,p */ + hdrs[nhdrs++] = (nghttp2_nv){(uint8_t *)":method", (uint8_t *)method_str, 7, strlen(method_str), NGHTTP2_NV_FLAG_NONE}; + hdrs[nhdrs++] = (nghttp2_nv){(uint8_t *)":authority", (uint8_t *)host, 10, strlen(host), NGHTTP2_NV_FLAG_NONE}; + hdrs[nhdrs++] = (nghttp2_nv){(uint8_t *)":scheme", (uint8_t *)"https", 7, 5, NGHTTP2_NV_FLAG_NONE}; + hdrs[nhdrs++] = (nghttp2_nv){(uint8_t *)":path", (uint8_t *)path, 5, strlen(path), NGHTTP2_NV_FLAG_NONE}; + + /* Add custom headers */ + for (size_t i = 0; i < req->request->header_count && nhdrs < 60; i++) { + if (strcasecmp(req->request->headers[i].key, "host") == 0) continue; + hdrs[nhdrs++] = (nghttp2_nv){ + (uint8_t *)req->request->headers[i].key, + (uint8_t *)req->request->headers[i].value, + strlen(req->request->headers[i].key), + strlen(req->request->headers[i].value), + NGHTTP2_NV_FLAG_NONE + }; + } + + /* Set up data provider if request has a body */ + nghttp2_data_provider data_prd; + nghttp2_data_provider *data_prd_ptr = NULL; + if (stream_data->req_body_len > 0) { + data_prd.source.ptr = NULL; + data_prd.read_callback = async_http2_data_source_read_callback; + data_prd_ptr = &data_prd; + } + + /* Chrome default priority */ + nghttp2_priority_spec pri_spec; + nghttp2_priority_spec_init(&pri_spec, 0, 256, 1); + + /* Submit request to the session */ + int32_t stream_id = nghttp2_submit_request(session, &pri_spec, hdrs, nhdrs, data_prd_ptr, stream_data); + if (stream_id < 0) { + async_request_set_error(req, -1, "Failed to submit HTTP/2 request"); + return ASYNC_STATUS_ERROR; + } + req->http2_stream_id = stream_id; + req->http2_session_initialized = true; + req->http2_stream_closed = false; + + DEBUG_PRINT("[async_request] HTTP/2 request submitted, stream_id=%d, reused=%d (id=%lu)\n", + stream_id, is_reused_session, (unsigned long)req->id); + + /* Transition to send state - return NEED_WRITE to yield control to event loop */ + req->state = ASYNC_STATE_HTTP2_SEND; + return ASYNC_STATUS_NEED_WRITE; +} + +/** + * State: Send HTTP/2 frames + * Uses buffered I/O: nghttp2 writes to buffer, we do non-blocking SSL_write + */ +static int step_http2_send(async_request_t *req) { + nghttp2_session *session = (nghttp2_session *)req->http2_session; + async_http2_stream_data_t *stream_data = (async_http2_stream_data_t *)req->http2_stream_data; + + if (!session || !stream_data) { + async_request_set_error(req, -1, "HTTP/2 session or stream_data is NULL"); + return ASYNC_STATUS_ERROR; + } + + /* Check if stream already completed (from callback) */ + if (stream_data && (stream_data->stream_closed || req->http2_stream_closed)) { + req->state = ASYNC_STATE_HTTP2_RECV; + return ASYNC_STATUS_NEED_READ; /* Let recv state handle completion */ + } + + /* First, let nghttp2 generate any pending data into our buffer */ + int rv = nghttp2_session_send(session); + if (rv < 0 && rv != NGHTTP2_ERR_WOULDBLOCK) { + char err_msg[128]; + snprintf(err_msg, sizeof(err_msg), "HTTP/2 send error: %s", nghttp2_strerror(rv)); + async_request_set_error(req, rv, err_msg); + return ASYNC_STATUS_ERROR; + } + + /* Now do actual SSL_write on buffered data */ + while (stream_data->send_pos < stream_data->send_len) { + size_t remaining = stream_data->send_len - stream_data->send_pos; + ERR_clear_error(); + int written = SSL_write(req->ssl, stream_data->send_buf + stream_data->send_pos, remaining); + + if (written <= 0) { + int ssl_err = SSL_get_error(req->ssl, written); + if (ssl_err == SSL_ERROR_WANT_WRITE) { + stream_data->last_ssl_want = SSL_ERROR_WANT_WRITE; + return ASYNC_STATUS_NEED_WRITE; + } else if (ssl_err == SSL_ERROR_WANT_READ) { + /* TLS renegotiation - need to read first */ + stream_data->last_ssl_want = SSL_ERROR_WANT_READ; + return ASYNC_STATUS_NEED_READ; + } else { + async_request_set_error(req, ssl_err, "HTTP/2 SSL write failed"); + return ASYNC_STATUS_ERROR; + } + } + + stream_data->send_pos += written; + } + + /* All data sent - reset buffer */ + stream_data->send_len = 0; + stream_data->send_pos = 0; + + /* Check if nghttp2 wants to write more */ + if (nghttp2_session_want_write(session)) { + /* Generate more data - but need to yield to event loop first */ + /* Return NEED_WRITE so polling will wait for socket and re-enter */ + return ASYNC_STATUS_NEED_WRITE; + } + + /* Transition to receive state */ + req->state = ASYNC_STATE_HTTP2_RECV; + + /* Check if we need to read */ + if (nghttp2_session_want_read(session)) { + return ASYNC_STATUS_NEED_READ; + } + + /* Check if already complete */ + if (stream_data && stream_data->stream_closed) { + /* Transition to recv state to finalize */ + return ASYNC_STATUS_NEED_READ; + } + + return ASYNC_STATUS_NEED_READ; +} + +/** + * State: Receive HTTP/2 frames + * Uses buffered I/O: we do non-blocking SSL_read, then feed data to nghttp2_session_mem_recv + */ +static int step_http2_recv(async_request_t *req) { + nghttp2_session *session = (nghttp2_session *)req->http2_session; + async_http2_stream_data_t *stream_data = (async_http2_stream_data_t *)req->http2_stream_data; + + if (!session || !stream_data) { + async_request_set_error(req, -1, "HTTP/2 recv: NULL session or stream_data"); + return ASYNC_STATUS_ERROR; + } + + /* Check if stream already completed */ + if (stream_data && (stream_data->stream_closed || req->http2_stream_closed)) { + goto complete; + } + + /* Try non-blocking SSL_read */ + ERR_clear_error(); + int n = SSL_read(req->ssl, stream_data->recv_buf, stream_data->recv_capacity); + + if (n <= 0) { + int ssl_err = SSL_get_error(req->ssl, n); + if (ssl_err == SSL_ERROR_WANT_READ) { + /* Check if we need to send (e.g., WINDOW_UPDATE) */ + if (nghttp2_session_want_write(session)) { + req->state = ASYNC_STATE_HTTP2_SEND; + return ASYNC_STATUS_NEED_WRITE; + } + return ASYNC_STATUS_NEED_READ; + } else if (ssl_err == SSL_ERROR_WANT_WRITE) { + /* TLS renegotiation */ + return ASYNC_STATUS_NEED_WRITE; + } else if (ssl_err == SSL_ERROR_ZERO_RETURN || n == 0) { + /* Connection closed - check if we got response */ + if (stream_data && stream_data->headers_complete) { + goto complete; + } + async_request_set_error(req, -1, "HTTP/2 connection closed unexpectedly"); + return ASYNC_STATUS_ERROR; + } else { + async_request_set_error(req, ssl_err, "HTTP/2 SSL read failed"); + return ASYNC_STATUS_ERROR; + } + } + + /* Feed received data to nghttp2 */ + ssize_t rv = nghttp2_session_mem_recv(session, stream_data->recv_buf, n); + + if (rv < 0) { + char err_msg[128]; + snprintf(err_msg, sizeof(err_msg), "HTTP/2 recv error: %s", nghttp2_strerror((int)rv)); + async_request_set_error(req, (int)rv, err_msg); + return ASYNC_STATUS_ERROR; + } + + /* Check if stream is complete (from callback during recv) */ + if (stream_data && (stream_data->stream_closed || req->http2_stream_closed)) { + goto complete; + } + + /* Check if we need to send (e.g., WINDOW_UPDATE, PING response, SETTINGS ACK) */ + if (nghttp2_session_want_write(session)) { + req->state = ASYNC_STATE_HTTP2_SEND; + return ASYNC_STATUS_NEED_WRITE; /* Go send first */ + } + + /* Check if there might be more SSL data buffered */ + if (SSL_pending(req->ssl) > 0) { + return ASYNC_STATUS_NEED_READ; /* Read more - socket is ready */ + } + + /* Continue receiving if session wants to */ + if (nghttp2_session_want_read(session)) { + return ASYNC_STATUS_NEED_READ; + } + + /* Session doesn't want to read or write */ + /* If we have headers, consider it complete (some servers don't send END_STREAM) */ + if (stream_data && stream_data->headers_complete) { + goto complete; + } + + /* Still waiting for headers - continue receiving */ + return ASYNC_STATUS_NEED_READ; + +complete: + /* Set response body */ + if (stream_data && stream_data->data_len > 0) { + req->response->body = malloc(stream_data->data_len + 1); + if (req->response->body) { + memcpy(req->response->body, stream_data->data_buf, stream_data->data_len); + req->response->body[stream_data->data_len] = '\0'; + req->response->body_len = stream_data->data_len; + } + } + + DEBUG_PRINT("[async_request] HTTP/2 complete, status=%d, body_len=%zu (id=%lu)\n", + req->response->status_code, req->response->body_len, (unsigned long)req->id); + + req->state = ASYNC_STATE_COMPLETE; + if (req->on_complete) { + req->on_complete(req, ASYNC_STATUS_COMPLETE); + } + return ASYNC_STATUS_COMPLETE; +} + +#endif /* HAVE_NGHTTP2 */ + /** * Step the async request state machine */ @@ -2154,6 +3089,17 @@ int async_request_step(async_request_t *req) { case ASYNC_STATE_RECEIVING_BODY: return step_receiving_body(req); +#ifdef HAVE_NGHTTP2 + case ASYNC_STATE_HTTP2_INIT: + return step_http2_init(req); + + case ASYNC_STATE_HTTP2_SEND: + return step_http2_send(req); + + case ASYNC_STATE_HTTP2_RECV: + return step_http2_recv(req); +#endif + case ASYNC_STATE_COMPLETE: /* Already complete */ if (req->on_complete) { diff --git a/src/core/async_request.h b/src/core/async_request.h index 124bb2c..d721e2f 100644 --- a/src/core/async_request.h +++ b/src/core/async_request.h @@ -19,6 +19,12 @@ extern "C" { */ typedef struct ssl_st SSL; +/* Forward declaration for pooled connection */ +typedef struct pooled_connection pooled_connection_t; + +/* Forward declaration for connection pool */ +typedef struct httpmorph_pool httpmorph_pool_t; + /** @@ -30,9 +36,13 @@ typedef enum { ASYNC_STATE_CONNECTING, /* TCP connection in progress */ ASYNC_STATE_PROXY_CONNECT, /* Proxy CONNECT tunnel establishment */ ASYNC_STATE_TLS_HANDSHAKE, /* TLS handshake in progress */ - ASYNC_STATE_SENDING_REQUEST, /* Sending HTTP request */ - ASYNC_STATE_RECEIVING_HEADERS, /* Receiving response headers */ - ASYNC_STATE_RECEIVING_BODY, /* Receiving response body */ + ASYNC_STATE_SENDING_REQUEST, /* Sending HTTP request (HTTP/1.x) */ + ASYNC_STATE_RECEIVING_HEADERS, /* Receiving response headers (HTTP/1.x) */ + ASYNC_STATE_RECEIVING_BODY, /* Receiving response body (HTTP/1.x) */ + /* HTTP/2 states */ + ASYNC_STATE_HTTP2_INIT, /* Initialize HTTP/2 session */ + ASYNC_STATE_HTTP2_SEND, /* Send HTTP/2 frames */ + ASYNC_STATE_HTTP2_RECV, /* Receive HTTP/2 frames */ ASYNC_STATE_COMPLETE, /* Request completed successfully */ ASYNC_STATE_ERROR /* Request failed */ } async_request_state_t; @@ -134,6 +144,22 @@ struct async_request { /* Reference counting */ int refcount; + /* Connection pooling support */ + pooled_connection_t *pooled_conn; /* Reused connection from pool */ + httpmorph_pool_t *pool; /* Connection pool to return to */ + bool from_pool; /* True if connection was from pool */ + + /* HTTP/2 support */ +#ifdef HAVE_NGHTTP2 + bool use_http2; /* True if HTTP/2 was negotiated via ALPN */ + void *http2_session; /* nghttp2_session* */ + void *http2_callbacks; /* nghttp2_session_callbacks* */ + void *http2_stream_data; /* http2_stream_data_t* for current stream */ + int32_t http2_stream_id; /* Current stream ID */ + bool http2_session_initialized; /* True if HTTP/2 preface was sent */ + bool http2_stream_closed; /* True if stream finished */ +#endif + /* Windows IOCP support */ #ifdef _WIN32 void *overlapped_connect; /* OVERLAPPED* for ConnectEx */ @@ -162,6 +188,19 @@ async_request_t* async_request_create( void *user_data ); +/** + * Create a new async request with connection pool support + */ +async_request_t* async_request_create_pooled( + const httpmorph_request_t *request, + io_engine_t *io_engine, + SSL_CTX *ssl_ctx, + httpmorph_pool_t *pool, + uint32_t timeout_ms, + async_request_callback_t callback, + void *user_data +); + /** * Destroy an async request */ diff --git a/src/core/async_request_manager.c b/src/core/async_request_manager.c index c641829..6f5aa33 100644 --- a/src/core/async_request_manager.c +++ b/src/core/async_request_manager.c @@ -3,7 +3,9 @@ */ #include "async_request_manager.h" +#include "connection_pool.h" #include "internal/tls.h" +#include "../tls/browser_profiles.h" #include #include #include @@ -50,7 +52,7 @@ async_request_manager_t* async_manager_create(void) { return NULL; } - /* Configure SSL context */ + /* Configure SSL context - use minimal configuration for async to avoid conflicts */ SSL_CTX_set_verify(mgr->ssl_ctx, SSL_VERIFY_PEER, NULL); #ifdef _WIN32 /* On Windows, load certificates from Windows Certificate Store */ @@ -60,10 +62,29 @@ async_request_manager_t* async_manager_create(void) { SSL_CTX_set_default_verify_paths(mgr->ssl_ctx); #endif + /* Enable SSL session caching for TLS session resumption */ + SSL_CTX_set_session_cache_mode(mgr->ssl_ctx, SSL_SESS_CACHE_CLIENT | SSL_SESS_CACHE_NO_INTERNAL); + SSL_CTX_set_timeout(mgr->ssl_ctx, 300); /* 5 minute session timeout */ + + /* Configure SSL_CTX with Chrome 143 browser profile for proper TLS fingerprinting. + * This sets cipher suites, extensions, GREASE, ALPN, etc. to match Chrome's JA4 fingerprint. + * Note: httpmorph_configure_ssl_ctx already configures ALPN for HTTP/2 from the profile. */ + httpmorph_configure_ssl_ctx(mgr->ssl_ctx, &PROFILE_CHROME_143); + + /* Create connection pool for reuse */ + mgr->pool = pool_create(); + if (!mgr->pool) { + SSL_CTX_free(mgr->ssl_ctx); + io_engine_destroy(mgr->io_engine); + free(mgr); + return NULL; + } + /* Allocate request array */ mgr->request_capacity = INITIAL_CAPACITY; mgr->requests = calloc(mgr->request_capacity, sizeof(async_request_t*)); if (!mgr->requests) { + pool_destroy(mgr->pool); SSL_CTX_free(mgr->ssl_ctx); io_engine_destroy(mgr->io_engine); free(mgr); @@ -149,6 +170,11 @@ void async_manager_destroy(async_request_manager_t *mgr) { free(mgr->requests); pthread_mutex_unlock(&mgr->mutex); + /* Destroy connection pool */ + if (mgr->pool) { + pool_destroy(mgr->pool); + } + /* Destroy SSL context */ if (mgr->ssl_ctx) { SSL_CTX_free(mgr->ssl_ctx); @@ -206,11 +232,12 @@ uint64_t async_manager_submit_request( pthread_mutex_lock(&mgr->mutex); - /* Create async request */ - async_request_t *req = async_request_create( + /* Create async request with connection pooling support */ + async_request_t *req = async_request_create_pooled( request, mgr->io_engine, mgr->ssl_ctx, + mgr->pool, timeout_ms, callback, user_data @@ -236,7 +263,7 @@ uint64_t async_manager_submit_request( /* Add to array */ mgr->requests[mgr->request_count++] = req; - async_request_ref(req); /* Manager holds a reference */ + /* Note: The initial refcount=1 from creation IS the manager's reference */ pthread_mutex_unlock(&mgr->mutex); @@ -313,8 +340,47 @@ int async_manager_cancel_request( return -1; } +/** + * Remove a completed request from the manager + * Should be called after extracting the response to prevent memory leaks + */ +int async_manager_remove_request( + async_request_manager_t *mgr, + uint64_t request_id) +{ + if (!mgr) { + return -1; + } + + pthread_mutex_lock(&mgr->mutex); + for (size_t i = 0; i < mgr->request_count; i++) { + if (mgr->requests[i] && mgr->requests[i]->id == request_id) { + async_request_t *req = mgr->requests[i]; + + /* Remove from array by shifting remaining elements */ + for (size_t j = i; j < mgr->request_count - 1; j++) { + mgr->requests[j] = mgr->requests[j + 1]; + } + mgr->request_count--; + mgr->requests[mgr->request_count] = NULL; + + /* Release manager's reference */ + async_request_unref(req); + + pthread_mutex_unlock(&mgr->mutex); + DEBUG_PRINT("[async_manager] Removed request id=%lu\n", (unsigned long)request_id); + return 0; + } + } + pthread_mutex_unlock(&mgr->mutex); + return -1; /* Request not found */ +} + /** * Poll for events + * Note: Does NOT automatically clean up completed requests to avoid race conditions + * with concurrent Python coroutines. Python must call async_manager_remove_request() + * after extracting the response. */ int async_manager_poll(async_request_manager_t *mgr, uint32_t timeout_ms) { if (!mgr) { @@ -355,8 +421,9 @@ int async_manager_poll(async_request_manager_t *mgr, uint32_t timeout_ms) { } } - /* Clean up completed requests */ - cleanup_completed_requests(mgr); + /* NOTE: We intentionally do NOT clean up completed requests here. + * Python coroutines must explicitly call async_manager_remove_request() + * after extracting the response to avoid race conditions. */ pthread_mutex_unlock(&mgr->mutex); diff --git a/src/core/async_request_manager.h b/src/core/async_request_manager.h index f51563c..936eb81 100644 --- a/src/core/async_request_manager.h +++ b/src/core/async_request_manager.h @@ -21,6 +21,9 @@ extern "C" { /* Forward declaration for SSL_CTX */ typedef struct ssl_ctx_st SSL_CTX; +/* Forward declaration for connection pool */ +typedef struct httpmorph_pool httpmorph_pool_t; + /** * Request manager structure */ @@ -31,6 +34,9 @@ typedef struct async_request_manager { /* SSL/TLS context */ SSL_CTX *ssl_ctx; + /* Connection pool for reuse */ + httpmorph_pool_t *pool; + /* Request tracking */ async_request_t **requests; size_t request_count; @@ -87,6 +93,15 @@ int async_manager_cancel_request( uint64_t request_id ); +/** + * Remove a completed request from the manager + * Should be called after extracting the response + */ +int async_manager_remove_request( + async_request_manager_t *mgr, + uint64_t request_id +); + /** * Poll for events (non-blocking) * Returns number of events processed diff --git a/src/core/buffer_pool.c b/src/core/buffer_pool.c index 691c897..b9b79dc 100644 --- a/src/core/buffer_pool.c +++ b/src/core/buffer_pool.c @@ -43,10 +43,12 @@ struct httpmorph_buffer_pool { * Returns the smallest tier that can fit the requested size */ static int get_tier_index(size_t size) { - if (size <= BUFFER_SIZE_4KB) return 0; - if (size <= BUFFER_SIZE_16KB) return 1; - if (size <= BUFFER_SIZE_64KB) return 2; - if (size <= BUFFER_SIZE_256KB) return 3; + if (size <= BUFFER_SIZE_1KB) return 0; + if (size <= BUFFER_SIZE_4KB) return 1; + if (size <= BUFFER_SIZE_16KB) return 2; + if (size <= BUFFER_SIZE_64KB) return 3; + if (size <= BUFFER_SIZE_256KB) return 4; + if (size <= BUFFER_SIZE_1MB) return 5; return -1; /* Too large for pooling */ } @@ -55,10 +57,12 @@ static int get_tier_index(size_t size) { */ static size_t get_tier_size(int tier_index) { switch (tier_index) { - case 0: return BUFFER_SIZE_4KB; - case 1: return BUFFER_SIZE_16KB; - case 2: return BUFFER_SIZE_64KB; - case 3: return BUFFER_SIZE_256KB; + case 0: return BUFFER_SIZE_1KB; + case 1: return BUFFER_SIZE_4KB; + case 2: return BUFFER_SIZE_16KB; + case 3: return BUFFER_SIZE_64KB; + case 4: return BUFFER_SIZE_256KB; + case 5: return BUFFER_SIZE_1MB; default: return 0; } } diff --git a/src/core/buffer_pool.h b/src/core/buffer_pool.h index 87217b2..ff3563a 100644 --- a/src/core/buffer_pool.h +++ b/src/core/buffer_pool.h @@ -11,17 +11,27 @@ #include #include -/* Buffer size tiers (powers of 2 for efficient allocation) */ +/* Buffer size tiers (powers of 2 for efficient allocation) + * Optimized for common HTTP response sizes: + * - 1KB: Small JSON responses, API errors + * - 4KB: Typical API responses + * - 16KB: Medium responses + * - 64KB: Larger responses, small files + * - 256KB: Large responses + * - 1MB: Very large responses, files + */ +#define BUFFER_SIZE_1KB 1024 #define BUFFER_SIZE_4KB 4096 #define BUFFER_SIZE_16KB 16384 #define BUFFER_SIZE_64KB 65536 #define BUFFER_SIZE_256KB 262144 +#define BUFFER_SIZE_1MB 1048576 -/* Number of buffers to keep per size tier */ -#define BUFFERS_PER_TIER 8 +/* Number of buffers to keep per size tier (increased for better concurrency) */ +#define BUFFERS_PER_TIER 16 /* Total number of size tiers */ -#define NUM_TIERS 4 +#define NUM_TIERS 6 /** * Buffer pool structure diff --git a/src/core/client.c b/src/core/client.c index c505668..383c1bf 100644 --- a/src/core/client.c +++ b/src/core/client.c @@ -6,6 +6,7 @@ #include "internal/tls.h" #include "internal/network.h" #include "buffer_pool.h" +#include "connection_pool.h" #ifndef _WIN32 #include @@ -208,10 +209,12 @@ httpmorph_client_t* httpmorph_client_create(void) { SSL_CTX_set_default_verify_paths(client->ssl_ctx); #endif - /* Disable SSL session caching to avoid BoringSSL state issues */ - SSL_CTX_set_session_cache_mode(client->ssl_ctx, SSL_SESS_CACHE_OFF); + /* Enable SSL session caching for TLS session resumption + * This significantly speeds up subsequent TLS connections to the same host + * by reusing the negotiated session parameters (0-RTT or 1-RTT resumption) */ + SSL_CTX_set_session_cache_mode(client->ssl_ctx, SSL_SESS_CACHE_CLIENT | SSL_SESS_CACHE_NO_INTERNAL); - /* Set session timeout (5 minutes = 300 seconds) - still set even if caching is off */ + /* Set session timeout (5 minutes = 300 seconds) */ SSL_CTX_set_timeout(client->ssl_ctx, 300); /* Enable session ticket support for TLS 1.3 and better TLS 1.2 resumption */ @@ -228,12 +231,13 @@ httpmorph_client_t* httpmorph_client_create(void) { client->max_redirects = 10; client->io_engine = default_io_engine; - /* Default to Chrome browser profile - but DON'T configure SSL_CTX here. - * SSL_CTX configuration happens in session.c when the actual profile is known. - * This is because SSL_CTX_add_cert_compression_alg() and similar functions - * ADD to the context rather than replacing, so we can't reconfigure later. */ + /* Default to Chrome 143 browser profile for proper TLS fingerprinting */ client->browser_profile = &PROFILE_CHROME_143; - client->ssl_ctx_configured = false; /* Mark as not yet configured */ + + /* Configure SSL_CTX with browser profile for Chrome-like TLS fingerprint. + * This sets cipher suites, extensions, GREASE, etc. to match Chrome. */ + httpmorph_configure_ssl_ctx(client->ssl_ctx, client->browser_profile); + client->ssl_ctx_configured = true; /* Create buffer pool for response bodies */ client->buffer_pool = buffer_pool_create(); @@ -243,6 +247,23 @@ httpmorph_client_t* httpmorph_client_create(void) { return NULL; } + /* Create connection pool for keep-alive */ + client->pool = pool_create(); + if (!client->pool) { + buffer_pool_destroy(client->buffer_pool); + SSL_CTX_free(client->ssl_ctx); + free(client); + return NULL; + } + + /* Initialize TLS session cache mutex */ + client->session_cache_count = 0; +#ifdef _WIN32 + InitializeCriticalSection(&client->session_cache_mutex); +#else + pthread_mutex_init(&client->session_cache_mutex, NULL); +#endif + return client; } @@ -280,6 +301,23 @@ void httpmorph_client_destroy(httpmorph_client_t *client) { return; } + /* Destroy connection pool first (closes all pooled connections) */ + if (client->pool) { + pool_destroy(client->pool); + } + + /* Free TLS session cache entries */ + for (int i = 0; i < client->session_cache_count; i++) { + if (client->session_cache[i].session) { + SSL_SESSION_free(client->session_cache[i].session); + } + } +#ifdef _WIN32 + DeleteCriticalSection(&client->session_cache_mutex); +#else + pthread_mutex_destroy(&client->session_cache_mutex); +#endif + if (client->ssl_ctx) { SSL_CTX_free(client->ssl_ctx); } diff --git a/src/core/connection_pool.c b/src/core/connection_pool.c index 157db3b..a42bf54 100644 --- a/src/core/connection_pool.c +++ b/src/core/connection_pool.c @@ -249,6 +249,81 @@ pooled_connection_t* pool_get_connection(httpmorph_pool_t *pool, return result; } +pooled_connection_t* pool_get_proxy_connection(httpmorph_pool_t *pool, + const char *host, + int port, + const char *proxy_url) { + if (!pool || !host || !proxy_url) { + return NULL; + } + + /* Lock pool for thread safety */ +#ifdef _WIN32 + CRITICAL_SECTION *cs = (CRITICAL_SECTION*)pool->mutex; + if (cs) EnterCriticalSection(cs); +#else + pthread_mutex_t *mutex = (pthread_mutex_t*)pool->mutex; + if (mutex) pthread_mutex_lock(mutex); +#endif + + /* Build proxy-aware host key */ + char host_key[POOL_MAX_HOST_KEY_LEN]; + pool_build_proxy_host_key(host, port, proxy_url, host_key); + + /* Search for matching connection */ + pooled_connection_t **curr = &pool->connections; + pooled_connection_t *result = NULL; + + while (*curr) { + pooled_connection_t *conn = *curr; + + if (strcmp(conn->host_key, host_key) == 0) { + /* Found matching proxy tunnel - validate it */ + if (pool_connection_validate(conn)) { + /* HTTP/2 connections can be shared (multiplexing) */ + if (conn->is_http2 && conn->ref_count > 0) { + /* Connection already in use - increment ref_count and share it */ + conn->ref_count++; + conn->last_used = time(NULL); + result = conn; + break; + } + + /* For HTTP/1.1 or first use of HTTP/2: remove from pool */ + *curr = conn->next; + pool->total_connections--; + pool->active_connections++; + + /* Update last used time and increment reference count */ + conn->last_used = time(NULL); + conn->ref_count = 1; /* First reference */ + conn->next = NULL; + + result = conn; + break; + } else { + /* Connection is dead - remove and destroy it */ + *curr = conn->next; + pool->total_connections--; + pool_connection_destroy(conn); + /* Continue searching */ + } + } else { + /* Move to next */ + curr = &conn->next; + } + } + + /* Unlock pool */ +#ifdef _WIN32 + if (cs) LeaveCriticalSection(cs); +#else + if (mutex) pthread_mutex_unlock(mutex); +#endif + + return result; +} + bool pool_put_connection(httpmorph_pool_t *pool, pooled_connection_t *conn) { if (!pool || !conn) { return false; @@ -394,6 +469,69 @@ pooled_connection_t* pool_connection_create(const char *host, return conn; } +pooled_connection_t* pool_proxy_connection_create(const char *host, + int port, + int sockfd, + SSL *ssl, + bool is_http2, + const char *proxy_url) { + if (!host || sockfd < 0 || !proxy_url) { + return NULL; + } + + /* Ensure socket is in blocking mode for HTTP/1.1 compatibility + * (HTTP/2 connections are already non-blocking) */ + if (!is_http2) { +#ifdef _WIN32 + u_long mode = 0; /* 0 = blocking */ + ioctlsocket(sockfd, FIONBIO, &mode); +#else + int flags = fcntl(sockfd, F_GETFL, 0); + if (flags != -1) { + fcntl(sockfd, F_SETFL, flags & ~O_NONBLOCK); + } +#endif + } + + pooled_connection_t *conn = (pooled_connection_t*)calloc(1, sizeof(pooled_connection_t)); + if (!conn) { + return NULL; + } + + /* Build proxy-aware host key: "hostname:port@proxy_url" */ + pool_build_proxy_host_key(host, port, proxy_url, conn->host_key); + + /* Initialize connection */ + conn->sockfd = sockfd; + conn->ssl = ssl; + conn->is_http2 = is_http2; + conn->is_valid = true; + conn->preface_sent = false; /* Will be set to true after first HTTP/2 preface */ + conn->state = POOL_CONN_IDLE; + conn->ref_count = 0; /* No references yet */ + conn->last_used = time(NULL); + conn->next = NULL; + + /* Initialize proxy info fields */ + conn->is_proxy = true; + conn->proxy_url = strdup(proxy_url); + conn->target_host = strdup(host); + conn->target_port = port; + + /* Initialize TLS info fields */ + conn->ja3_fingerprint = NULL; + conn->tls_version = NULL; + conn->tls_cipher = NULL; + +#ifdef HAVE_NGHTTP2 + conn->http2_session = NULL; + conn->http2_stream_data = NULL; + conn->http2_session_manager = NULL; +#endif + + return conn; +} + void pool_connection_destroy(pooled_connection_t *conn) { if (!conn) { return; @@ -463,20 +601,29 @@ bool pool_connection_validate(pooled_connection_t *conn) { return false; } - /* For SSL connections, just check shutdown state */ + /* For SSL connections, check shutdown state */ if (conn->ssl) { int shutdown_state = SSL_get_shutdown(conn->ssl); if (shutdown_state != 0) { return false; } - /* Trust the connection - if it fails, we'll handle it during actual use */ - return true; } - /* For non-SSL connections, also just trust them */ - /* The cost of validation (fcntl, recv) is higher than just trying to use - * the connection and handling failures. If the connection is dead, the - * next request will fail and we'll create a new one. */ +#ifdef HAVE_NGHTTP2 + /* For HTTP/2 connections, validate nghttp2 session if present */ + if (conn->is_http2 && conn->http2_session) { + nghttp2_session *session = (nghttp2_session *)conn->http2_session; + /* Check if session received GOAWAY and has no active streams. + * Note: An idle session (no active streams) will have want_read=0 and want_write=0, + * but that doesn't mean it's invalid - it's just idle and can accept new requests. */ + if (nghttp2_session_get_remote_settings(session, NGHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS) == 0) { + /* Server doesn't allow any streams - session is unusable */ + return false; + } + } +#endif + + /* Trust the connection - if it fails, we'll handle it during actual use */ return true; } @@ -490,6 +637,20 @@ void pool_build_host_key(const char *host, int port, char *key_out) { snprintf(key_out, POOL_MAX_HOST_KEY_LEN, "%s:%d", host, port); } +void pool_build_proxy_host_key(const char *host, int port, const char *proxy_url, char *key_out) { + if (!host || !key_out) { + return; + } + + if (proxy_url) { + /* For proxy connections: "hostname:port@proxy_url" */ + snprintf(key_out, POOL_MAX_HOST_KEY_LEN, "%s:%d@%s", host, port, proxy_url); + } else { + /* No proxy - same as regular key */ + snprintf(key_out, POOL_MAX_HOST_KEY_LEN, "%s:%d", host, port); + } +} + int pool_count_connections_for_host(httpmorph_pool_t *pool, const char *host_key) { if (!pool || !host_key) { return 0; @@ -672,3 +833,108 @@ int httpmorph_connection_on_writable(pooled_connection_t *conn, (void)user_data; /* Unused in Phase A */ return 0; /* Success (no-op) */ } + +/* === Public API Wrappers === */ + +/** + * Pre-warm connections to a host (public API) + */ +int httpmorph_pool_prewarm( + httpmorph_client_t *client, + const char *host, + int port, + bool use_tls, + int count) +{ + if (!client || !host || count <= 0) { + return 0; + } + + httpmorph_pool_t *pool = client->pool; + if (!pool) { + return 0; + } + + return pool_prewarm_connections(pool, client, host, port, use_tls, count); +} + +/** + * Configure connection pool settings (public API) + */ +void httpmorph_pool_configure( + httpmorph_pool_t *pool, + int idle_timeout_seconds, + int max_connections_per_host, + int max_total_connections) +{ + if (!pool) { + return; + } + + /* Lock pool for thread safety */ +#ifdef _WIN32 + CRITICAL_SECTION *cs = (CRITICAL_SECTION*)pool->mutex; + if (cs) EnterCriticalSection(cs); +#else + pthread_mutex_t *mutex = (pthread_mutex_t*)pool->mutex; + if (mutex) pthread_mutex_lock(mutex); +#endif + + if (idle_timeout_seconds > 0) { + pool->idle_timeout_seconds = idle_timeout_seconds; + } + if (max_connections_per_host > 0) { + pool->max_connections_per_host = max_connections_per_host; + } + if (max_total_connections > 0) { + pool->max_total_connections = max_total_connections; + } + + /* Unlock pool */ +#ifdef _WIN32 + if (cs) LeaveCriticalSection(cs); +#else + if (mutex) pthread_mutex_unlock(mutex); +#endif +} + +/** + * Get connection pool statistics (public API) + */ +void httpmorph_pool_stats( + httpmorph_pool_t *pool, + int *total_connections, + int *active_connections) +{ + if (!pool) { + if (total_connections) *total_connections = 0; + if (active_connections) *active_connections = 0; + return; + } + + /* Lock pool for thread safety */ +#ifdef _WIN32 + CRITICAL_SECTION *cs = (CRITICAL_SECTION*)pool->mutex; + if (cs) EnterCriticalSection(cs); +#else + pthread_mutex_t *mutex = (pthread_mutex_t*)pool->mutex; + if (mutex) pthread_mutex_lock(mutex); +#endif + + if (total_connections) *total_connections = pool->total_connections; + if (active_connections) *active_connections = pool->active_connections; + + /* Unlock pool */ +#ifdef _WIN32 + if (cs) LeaveCriticalSection(cs); +#else + if (mutex) pthread_mutex_unlock(mutex); +#endif +} + +/** + * Clean up idle connections (public API wrapper) + */ +void httpmorph_pool_cleanup_idle(httpmorph_pool_t *pool) { + pool_cleanup_idle(pool); +} diff --git a/src/core/connection_pool.h b/src/core/connection_pool.h index 30577ca..60b66de 100644 --- a/src/core/connection_pool.h +++ b/src/core/connection_pool.h @@ -129,6 +129,22 @@ pooled_connection_t* pool_get_connection(httpmorph_pool_t *pool, const char *host, int port); +/** + * Get a proxy connection from the pool + * Returns an existing tunnel connection if available, NULL otherwise + * Uses proxy-aware key: "hostname:port@proxy_url" + * + * @param pool The connection pool + * @param host Target hostname (e.g., "example.com") + * @param port Target port number (e.g., 443) + * @param proxy_url Proxy URL (e.g., "http://proxy:8080") + * @return Pooled connection or NULL if not found + */ +pooled_connection_t* pool_get_proxy_connection(httpmorph_pool_t *pool, + const char *host, + int port, + const char *proxy_url); + /** * Return a connection to the pool for reuse * If pool is full or connection is invalid, it will be closed @@ -156,6 +172,26 @@ pooled_connection_t* pool_connection_create(const char *host, SSL *ssl, bool is_http2); +/** + * Create a pooled proxy connection wrapper + * Does NOT add to pool yet - call pool_put_connection() for that + * Uses proxy-aware key: "hostname:port@proxy_url" + * + * @param host Target hostname + * @param port Target port number + * @param sockfd Socket file descriptor (the tunneled connection) + * @param ssl SSL connection to destination (or NULL for HTTP) + * @param is_http2 Whether this is an HTTP/2 connection + * @param proxy_url Proxy URL used for this tunnel + * @return New pooled connection (caller must free or pool it) + */ +pooled_connection_t* pool_proxy_connection_create(const char *host, + int port, + int sockfd, + SSL *ssl, + bool is_http2, + const char *proxy_url); + /** * Close and free a pooled connection * Closes socket, frees SSL, frees memory @@ -183,6 +219,17 @@ bool pool_connection_validate(pooled_connection_t *conn); */ void pool_build_host_key(const char *host, int port, char *key_out); +/** + * Build a host key for proxy connections + * Format: "hostname:port@proxy_url" (includes proxy to differentiate tunnels) + * + * @param host Target hostname + * @param port Target port number + * @param proxy_url Proxy URL (e.g., "http://proxy:8080") or NULL for direct + * @param key_out Buffer to write key (must be POOL_MAX_HOST_KEY_LEN bytes) + */ +void pool_build_proxy_host_key(const char *host, int port, const char *proxy_url, char *key_out); + /** * Count connections for a specific host * diff --git a/src/core/core.c b/src/core/core.c index f0822de..bb34207 100644 --- a/src/core/core.c +++ b/src/core/core.c @@ -73,10 +73,37 @@ httpmorph_response_t* httpmorph_request_execute( bool proxy_use_tls = false; SSL *proxy_ssl = NULL; - /* Don't use connection pool for proxy connections - they are not pooled - * due to SSL_CTX use-after-free issues (see line 532 below). - * If we retrieve a connection from pool here, it would be a stale direct - * connection which cannot be used for proxy requests. */ + /* Try to get a pooled proxy tunnel connection first */ + if (pool) { + pooled_conn = pool_get_proxy_connection(pool, host, port, request->proxy_url); + if (pooled_conn) { + /* Reuse existing proxy tunnel from pool */ + sockfd = pooled_conn->sockfd; + ssl = pooled_conn->ssl; + use_http2 = pooled_conn->is_http2; + + /* Set HTTP version from pooled connection */ + if (use_http2) { + response->http_version = HTTPMORPH_VERSION_2_0; + } else { + response->http_version = HTTPMORPH_VERSION_1_1; + } + + /* Restore TLS info from pooled connection */ + if (pooled_conn->ja3_fingerprint) { + response->ja3_fingerprint = strdup(pooled_conn->ja3_fingerprint); + } + if (pooled_conn->tls_version) { + response->tls_version = strdup(pooled_conn->tls_version); + } + if (pooled_conn->tls_cipher) { + response->tls_cipher = strdup(pooled_conn->tls_cipher); + } + + /* Connection reused - no connect/TLS time */ + connect_time = 0; + } + } /* If no pooled connection, create new proxy connection */ if (sockfd < 0) { @@ -166,6 +193,13 @@ httpmorph_response_t* httpmorph_request_execute( ssl = pooled_conn->ssl; use_http2 = pooled_conn->is_http2; /* Use same protocol as pooled connection */ + /* Set HTTP version from pooled connection */ + if (use_http2) { + response->http_version = HTTPMORPH_VERSION_2_0; + } else { + response->http_version = HTTPMORPH_VERSION_1_1; + } + /* Restore TLS info from pooled connection BEFORE potential destruction */ if (sockfd >= 0) { /* Connection reused - no connect/TLS time */ @@ -204,10 +238,11 @@ httpmorph_response_t* httpmorph_request_execute( } response->connect_time_us = connect_time; - /* 2. TLS Handshake (if HTTPS and not reused) */ + /* 2. TLS Handshake (if HTTPS and not reused) + * Use the cached version for session resumption support */ if (use_tls && !ssl) { uint64_t tls_time = 0; - ssl = httpmorph_tls_connect(client->ssl_ctx, sockfd, host, client->browser_profile, + ssl = httpmorph_tls_connect_cached(client, sockfd, host, port, request->http2_enabled, request->verify_ssl, &tls_time); if (!ssl) { response->error = HTTPMORPH_ERROR_TLS; @@ -265,16 +300,34 @@ httpmorph_response_t* httpmorph_request_execute( uint64_t first_byte_time = httpmorph_get_time_us(); int http2_result; - /* Use pooled version for session reuse if connection came from pool */ + /* For new HTTP/2 connections, create pooled_conn wrapper to enable session reuse */ + if (!pooled_conn && !request->proxy_url) { + pooled_conn = pool_connection_create(host, port, sockfd, ssl, true /* is_http2 */); + if (pooled_conn) { + /* Store TLS info for reuse */ + if (response->ja3_fingerprint) { + pooled_conn->ja3_fingerprint = strdup(response->ja3_fingerprint); + } + if (response->tls_version) { + pooled_conn->tls_version = strdup(response->tls_version); + } + if (response->tls_cipher) { + pooled_conn->tls_cipher = strdup(response->tls_cipher); + } + } + } + + /* Use pooled version for session reuse (works for both new and reused connections) */ if (pooled_conn && pooled_conn->is_http2) { /* Use concurrent version if session manager exists (high-performance mode) */ if (pooled_conn->http2_session_manager) { http2_result = httpmorph_http2_request_concurrent(pooled_conn, request, host, path, response); } else { - /* Fall back to sequential pooled version */ + /* Use pooled version which creates and stores the session */ http2_result = httpmorph_http2_request_pooled(pooled_conn, request, host, path, response); } } else { + /* Fallback for proxy connections or when pooled_conn creation failed */ http2_result = httpmorph_http2_request(ssl, request, host, path, response); } @@ -308,10 +361,10 @@ httpmorph_response_t* httpmorph_request_execute( } response->connect_time_us = connect_time; - /* New TLS handshake if needed */ + /* New TLS handshake if needed (use cached for session resumption) */ if (use_tls) { uint64_t tls_time = 0; - ssl = httpmorph_tls_connect(client->ssl_ctx, sockfd, host, client->browser_profile, + ssl = httpmorph_tls_connect_cached(client, sockfd, host, port, request->http2_enabled, request->verify_ssl, &tls_time); if (!ssl) { response->error = HTTPMORPH_ERROR_TLS; @@ -358,10 +411,10 @@ httpmorph_response_t* httpmorph_request_execute( } response->connect_time_us = connect_time; - /* New TLS handshake */ + /* New TLS handshake (use cached for session resumption) */ if (use_tls) { uint64_t tls_time = 0; - ssl = httpmorph_tls_connect(client->ssl_ctx, sockfd, host, client->browser_profile, + ssl = httpmorph_tls_connect_cached(client, sockfd, host, port, request->http2_enabled, request->verify_ssl, &tls_time); if (!ssl) { response->error = HTTPMORPH_ERROR_TLS; @@ -469,49 +522,35 @@ httpmorph_response_t* httpmorph_request_execute( if (!conn_to_pool) { /* New connection - create wrapper */ - bool use_http2 = (response->http_version == HTTPMORPH_VERSION_2_0); - /* Don't pool HTTP/2 connections - HTTP/2 pooling has reliability issues */ - /* Don't pool proxy connections - they can cause SSL_CTX use-after-free issues */ - if (use_http2 || request->proxy_url) { - conn_to_pool = NULL; + bool is_http2 = (response->http_version == HTTPMORPH_VERSION_2_0); + if (request->proxy_url) { + /* Create proxy-aware pooled connection with key: "host:port@proxy_url" */ + conn_to_pool = pool_proxy_connection_create(host, port, sockfd, ssl, is_http2, request->proxy_url); } else { - conn_to_pool = pool_connection_create(host, port, sockfd, ssl, use_http2); - /* Store TLS info in pooled connection for future reuse with error checking */ - if (conn_to_pool && ssl) { - bool alloc_failed = false; - - if (response->ja3_fingerprint) { - conn_to_pool->ja3_fingerprint = strdup(response->ja3_fingerprint); - if (!conn_to_pool->ja3_fingerprint) alloc_failed = true; - } - if (response->tls_version && !alloc_failed) { - conn_to_pool->tls_version = strdup(response->tls_version); - if (!conn_to_pool->tls_version) alloc_failed = true; - } - if (response->tls_cipher && !alloc_failed) { - conn_to_pool->tls_cipher = strdup(response->tls_cipher); - if (!conn_to_pool->tls_cipher) alloc_failed = true; - } + /* Pool both HTTP/1.1 and HTTP/2 connections for reuse */ + conn_to_pool = pool_connection_create(host, port, sockfd, ssl, is_http2); + } + /* Store TLS info in pooled connection for future reuse with error checking */ + if (conn_to_pool && ssl) { + bool alloc_failed = false; - /* If any allocation failed, destroy connection instead of pooling */ - if (alloc_failed) { - pool_connection_destroy(conn_to_pool); - conn_to_pool = NULL; - } + if (response->ja3_fingerprint) { + conn_to_pool->ja3_fingerprint = strdup(response->ja3_fingerprint); + if (!conn_to_pool->ja3_fingerprint) alloc_failed = true; } - /* Store proxy info for proxy connections */ - if (conn_to_pool && request->proxy_url) { - conn_to_pool->is_proxy = true; - /* Free old values if already set (connection reuse) */ - if (conn_to_pool->proxy_url) { - free(conn_to_pool->proxy_url); - } - if (conn_to_pool->target_host) { - free(conn_to_pool->target_host); - } - conn_to_pool->proxy_url = strdup(request->proxy_url); - conn_to_pool->target_host = strdup(host); - conn_to_pool->target_port = port; + if (response->tls_version && !alloc_failed) { + conn_to_pool->tls_version = strdup(response->tls_version); + if (!conn_to_pool->tls_version) alloc_failed = true; + } + if (response->tls_cipher && !alloc_failed) { + conn_to_pool->tls_cipher = strdup(response->tls_cipher); + if (!conn_to_pool->tls_cipher) alloc_failed = true; + } + + /* If any allocation failed, destroy connection instead of pooling */ + if (alloc_failed) { + pool_connection_destroy(conn_to_pool); + conn_to_pool = NULL; } } } diff --git a/src/core/http2_logic.c b/src/core/http2_logic.c index d923647..e25a26a 100644 --- a/src/core/http2_logic.c +++ b/src/core/http2_logic.c @@ -47,9 +47,17 @@ static ssize_t http2_send_callback(nghttp2_session *session, const uint8_t *data size_t length, int flags, void *user_data) { http2_stream_data_t *stream_data = (http2_stream_data_t *)user_data; if (stream_data && stream_data->ssl) { - return SSL_write(stream_data->ssl, data, length); + ssize_t rv = SSL_write(stream_data->ssl, data, length); + if (rv < 0) { + int ssl_err = SSL_get_error(stream_data->ssl, rv); + if (ssl_err == SSL_ERROR_WANT_WRITE) { + return NGHTTP2_ERR_WOULDBLOCK; + } + return NGHTTP2_ERR_CALLBACK_FAILURE; + } + return rv; } - return -1; + return NGHTTP2_ERR_CALLBACK_FAILURE; } /* Helper: Data provider callback for sending request body */ @@ -501,9 +509,9 @@ int httpmorph_http2_request_pooled(struct pooled_connection *conn, stream_data.req_body_len = request->body_len; stream_data.req_body_sent = 0; - /* If no session exists, create one */ + /* Create nghttp2 session if needed */ if (session == NULL) { - /* Initialize nghttp2 callbacks */ + /* New session - need to send preface */ nghttp2_session_callbacks_new(&callbacks); nghttp2_session_callbacks_set_send_callback(callbacks, http2_send_callback); nghttp2_session_callbacks_set_recv_callback(callbacks, http2_recv_callback); @@ -511,8 +519,8 @@ int httpmorph_http2_request_pooled(struct pooled_connection *conn, nghttp2_session_callbacks_set_on_data_chunk_recv_callback(callbacks, http2_on_data_chunk_recv_callback); nghttp2_session_callbacks_set_on_frame_recv_callback(callbacks, http2_on_frame_recv_callback); - /* Create session and send preface */ - rv = http2_init_or_reuse_session(&session, callbacks, &stream_data, conn->ssl, &session_created); + /* Create session */ + rv = nghttp2_session_client_new(&session, callbacks, &stream_data); nghttp2_session_callbacks_del(callbacks); if (rv != 0) { @@ -520,28 +528,27 @@ int httpmorph_http2_request_pooled(struct pooled_connection *conn, return -1; } - /* Store session in connection for reuse */ + /* Send HTTP/2 connection preface (SETTINGS + WINDOW_UPDATE) */ + nghttp2_settings_entry iv[4]; + iv[0].settings_id = NGHTTP2_SETTINGS_HEADER_TABLE_SIZE; + iv[0].value = 65536; + iv[1].settings_id = NGHTTP2_SETTINGS_ENABLE_PUSH; + iv[1].value = 0; + iv[2].settings_id = NGHTTP2_SETTINGS_INITIAL_WINDOW_SIZE; + iv[2].value = 6291456; + iv[3].settings_id = NGHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE; + iv[3].value = 262144; + + nghttp2_submit_settings(session, NGHTTP2_FLAG_NONE, iv, 4); + nghttp2_submit_window_update(session, NGHTTP2_FLAG_NONE, 0, 15663105); + nghttp2_session_send(session); + + /* Store session in connection */ conn->http2_session = session; conn->preface_sent = true; - - /* Create and start session manager for concurrent multiplexing */ - http2_session_manager_t *mgr = http2_session_manager_create( - session, - callbacks, - conn->ssl, - conn->sockfd - ); - - if (mgr) { - /* Start I/O thread for concurrent stream handling */ - if (http2_session_manager_start(mgr) == 0) { - conn->http2_session_manager = mgr; - } else { - /* Failed to start - clean up manager */ - http2_session_manager_destroy(mgr); - conn->http2_session_manager = NULL; - } - } + } else { + /* Reusing existing session - just update user_data */ + nghttp2_session_set_user_data(session, &stream_data); } /* Prepare request headers */ @@ -608,24 +615,40 @@ int httpmorph_http2_request_pooled(struct pooled_connection *conn, } /* Send request */ - nghttp2_session_send(session); + rv = nghttp2_session_send(session); + if (rv != 0) { + free(stream_data.data_buf); + return -1; + } /* Receive response - event loop for non-blocking I/O */ int sockfd = SSL_get_fd(conn->ssl); fd_set readfds, writefds; struct timeval tv; - while (!stream_data.stream_closed && - (nghttp2_session_want_read(session) || nghttp2_session_want_write(session))) { + /* Loop until stream is closed. Check want_read/want_write as a hint, but also + * check SSL_pending for buffered data and always try at least one iteration + * after submitting a request. */ + bool first_iteration = true; + while (!stream_data.stream_closed) { + /* Check if session wants to do anything */ + bool want_read = nghttp2_session_want_read(session) || SSL_pending(conn->ssl) > 0; + bool want_write = nghttp2_session_want_write(session); + + /* If session doesn't want to do anything and this isn't the first iteration, exit */ + if (!want_read && !want_write && !first_iteration) { + break; + } + first_iteration = false; /* Wait for socket to be ready */ FD_ZERO(&readfds); FD_ZERO(&writefds); - if (nghttp2_session_want_read(session)) { + if (want_read) { FD_SET(sockfd, &readfds); } - if (nghttp2_session_want_write(session)) { + if (want_write) { FD_SET(sockfd, &writefds); } @@ -638,8 +661,10 @@ int httpmorph_http2_request_pooled(struct pooled_connection *conn, rv = -1; break; } else if (select_rv == 0) { - /* Timeout */ - rv = -1; + /* Timeout - only error if we haven't received the response yet */ + if (!stream_data.stream_closed) { + rv = -1; + } break; } diff --git a/src/core/internal/internal.h b/src/core/internal/internal.h index 7b2dab4..14716b4 100644 --- a/src/core/internal/internal.h +++ b/src/core/internal/internal.h @@ -83,6 +83,15 @@ /* Forward declare buffer pool */ typedef struct httpmorph_buffer_pool httpmorph_buffer_pool_t; +/* TLS session cache entry (for session resumption across connections) */ +#define MAX_SESSION_CACHE_ENTRIES 64 +typedef struct tls_session_entry { + char host[256]; + uint16_t port; + SSL_SESSION *session; + time_t created; +} tls_session_entry_t; + /** * HTTP client structure */ @@ -92,6 +101,15 @@ struct httpmorph_client { httpmorph_pool_t *pool; httpmorph_buffer_pool_t *buffer_pool; /* Buffer pool for response bodies */ + /* TLS session cache for session resumption */ + tls_session_entry_t session_cache[MAX_SESSION_CACHE_ENTRIES]; + int session_cache_count; +#ifdef _WIN32 + CRITICAL_SECTION session_cache_mutex; +#else + pthread_mutex_t session_cache_mutex; +#endif + /* Configuration */ uint32_t timeout_ms; bool follow_redirects; diff --git a/src/core/internal/network.h b/src/core/internal/network.h index 31d273c..d8bc1e7 100644 --- a/src/core/internal/network.h +++ b/src/core/internal/network.h @@ -19,6 +19,23 @@ int httpmorph_tcp_connect(const char *host, uint16_t port, uint32_t timeout_ms, uint64_t *connect_time); +/** + * Lookup hostname in DNS cache + * Returns cached addrinfo if found and not expired, NULL otherwise + * Caller must free the result with dns_cache_free_result() + */ +struct addrinfo* dns_cache_lookup(const char *hostname, uint16_t port); + +/** + * Add entry to DNS cache + */ +void dns_cache_add(const char *hostname, uint16_t port, const struct addrinfo *result); + +/** + * Free a DNS cache lookup result + */ +void dns_cache_free_result(struct addrinfo *result); + /** * Cleanup expired DNS cache entries */ diff --git a/src/core/internal/tls.h b/src/core/internal/tls.h index 541b9d5..6a9266a 100644 --- a/src/core/internal/tls.h +++ b/src/core/internal/tls.h @@ -51,6 +51,45 @@ SSL* httpmorph_tls_connect(SSL_CTX *ctx, int sockfd, const char *hostname, const browser_profile_t *browser_profile, bool http2_enabled, bool verify_cert, uint64_t *tls_time); +/** + * Establish TLS connection with session caching support + * + * @param client HTTP client (for session cache) + * @param sockfd Socket file descriptor + * @param hostname Hostname for SNI + * @param port Target port + * @param http2_enabled Whether HTTP/2 is enabled + * @param verify_cert Whether to verify server certificate + * @param tls_time Output: TLS handshake time in microseconds + * @return SSL* on success, NULL on error + */ +SSL* httpmorph_tls_connect_cached(httpmorph_client_t *client, int sockfd, + const char *hostname, uint16_t port, + bool http2_enabled, bool verify_cert, + uint64_t *tls_time); + +/** + * Store a TLS session in the client's cache + */ +void httpmorph_session_cache_put(httpmorph_client_t *client, const char *host, + uint16_t port, SSL_SESSION *session); + +/** + * Get a TLS session from the client's cache + */ +SSL_SESSION* httpmorph_session_cache_get(httpmorph_client_t *client, const char *host, uint16_t port); + +/** + * Get a TLS session from the global cache (for async requests) + * Returns NULL if not found. Caller should NOT free the returned session. + */ +SSL_SESSION* global_session_cache_get(const char *host, uint16_t port); + +/** + * Store a TLS session in the global cache (for async requests) + */ +void global_session_cache_put(const char *host, uint16_t port, SSL_SESSION *session); + /** * Calculate JA3 fingerprint from SSL connection * diff --git a/src/core/network.c b/src/core/network.c index 66c0aa5..2647782 100644 --- a/src/core/network.c +++ b/src/core/network.c @@ -136,11 +136,18 @@ static void addrinfo_deep_free(struct addrinfo *ai) { } } +/** + * Free a DNS cache lookup result (deep copied addrinfo) + */ +void dns_cache_free_result(struct addrinfo *result) { + addrinfo_deep_free(result); +} + /** * Lookup hostname in DNS cache * Returns cached addrinfo if found and not expired, NULL otherwise */ -static struct addrinfo* dns_cache_lookup(const char *hostname, uint16_t port) { +struct addrinfo* dns_cache_lookup(const char *hostname, uint16_t port) { if (!hostname) return NULL; dns_cache_init_mutex(); @@ -175,8 +182,8 @@ static struct addrinfo* dns_cache_lookup(const char *hostname, uint16_t port) { /** * Add entry to DNS cache */ -static void dns_cache_add(const char *hostname, uint16_t port, - const struct addrinfo *result) { +void dns_cache_add(const char *hostname, uint16_t port, + const struct addrinfo *result) { if (!hostname || !result) return; dns_cache_init_mutex(); @@ -299,15 +306,203 @@ void dns_cache_clear(void) { } /* ==================================================================== - * TCP CONNECTION + * TCP CONNECTION WITH HAPPY EYEBALLS (RFC 8305) * ==================================================================== */ +/* Happy Eyeballs configuration */ +#define HAPPY_EYEBALLS_DELAY_MS 250 /* RFC 8305 recommends 250ms */ +#define MAX_PARALLEL_CONNECTIONS 2 /* IPv6 + IPv4 */ + +/** + * Configure socket with performance options + */ +static void configure_socket_options(int sockfd) { + /* Enable TCP_NODELAY (disable Nagle's algorithm for lower latency) */ + int nodelay = 1; + setsockopt(sockfd, IPPROTO_TCP, TCP_NODELAY, (char*)&nodelay, sizeof(nodelay)); + + /* Enable SO_REUSEADDR for faster socket reuse */ + int reuse = 1; + setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, (char*)&reuse, sizeof(reuse)); + + /* Enable SO_KEEPALIVE for connection health monitoring */ + int keepalive = 1; + setsockopt(sockfd, SOL_SOCKET, SO_KEEPALIVE, (char*)&keepalive, sizeof(keepalive)); + + /* Optimize send/receive buffer sizes (64KB each for better throughput) */ + int bufsize = 65536; + setsockopt(sockfd, SOL_SOCKET, SO_SNDBUF, (char*)&bufsize, sizeof(bufsize)); + setsockopt(sockfd, SOL_SOCKET, SO_RCVBUF, (char*)&bufsize, sizeof(bufsize)); + +#ifdef TCP_QUICKACK + /* Enable TCP_QUICKACK on Linux for faster ACKs */ + int quickack = 1; + setsockopt(sockfd, IPPROTO_TCP, TCP_QUICKACK, (char*)&quickack, sizeof(quickack)); +#endif + +#ifdef SO_REUSEPORT + /* Enable SO_REUSEPORT if available (Linux 3.9+, BSD) */ + int reuseport = 1; + setsockopt(sockfd, SOL_SOCKET, SO_REUSEPORT, (char*)&reuseport, sizeof(reuseport)); +#endif +} + +/** + * Set socket to non-blocking mode + */ +static void set_socket_nonblocking(int sockfd) { +#ifdef _WIN32 + u_long mode = 1; + ioctlsocket(sockfd, FIONBIO, &mode); +#else + int flags = fcntl(sockfd, F_GETFL, 0); + fcntl(sockfd, F_SETFL, flags | O_NONBLOCK); +#endif +} + +/** + * Set socket to blocking mode + */ +static void set_socket_blocking(int sockfd) { +#ifdef _WIN32 + u_long mode = 0; + ioctlsocket(sockfd, FIONBIO, &mode); +#else + int flags = fcntl(sockfd, F_GETFL, 0); + fcntl(sockfd, F_SETFL, flags & ~O_NONBLOCK); +#endif +} + /** - * Establish a TCP connection to a host + * Configure final socket options after successful connection + */ +static void configure_connected_socket(int sockfd, uint32_t timeout_ms) { + /* Set socket to blocking mode for HTTP/1.1 compatibility */ + set_socket_blocking(sockfd); + + /* Set performance options */ + int opt = 1; +#ifdef _WIN32 + setsockopt(sockfd, IPPROTO_TCP, TCP_NODELAY, (char*)&opt, sizeof(opt)); +#else + setsockopt(sockfd, IPPROTO_TCP, TCP_NODELAY, &opt, sizeof(opt)); + + /* Enable TCP keep-alive to detect dead connections */ + setsockopt(sockfd, SOL_SOCKET, SO_KEEPALIVE, &opt, sizeof(opt)); + + #ifdef TCP_KEEPIDLE + int keepidle = 60; + setsockopt(sockfd, IPPROTO_TCP, TCP_KEEPIDLE, &keepidle, sizeof(keepidle)); + #endif + + #ifdef TCP_KEEPINTVL + int keepintvl = 10; + setsockopt(sockfd, IPPROTO_TCP, TCP_KEEPINTVL, &keepintvl, sizeof(keepintvl)); + #endif + + #ifdef TCP_KEEPCNT + int keepcnt = 3; + setsockopt(sockfd, IPPROTO_TCP, TCP_KEEPCNT, &keepcnt, sizeof(keepcnt)); + #endif + + #ifdef __APPLE__ + #ifdef TCP_FASTOPEN + int tfo = 1; + setsockopt(sockfd, IPPROTO_TCP, TCP_FASTOPEN, &tfo, sizeof(tfo)); + #endif + #endif + + #ifdef __linux__ + #ifdef TCP_FASTOPEN_CONNECT + int tfo = 1; + setsockopt(sockfd, IPPROTO_TCP, TCP_FASTOPEN_CONNECT, &tfo, sizeof(tfo)); + #endif + #endif +#endif + + /* Set receive timeout to prevent indefinite blocking */ +#ifdef _WIN32 + DWORD timeout_dw = timeout_ms; + setsockopt(sockfd, SOL_SOCKET, SO_RCVTIMEO, (char*)&timeout_dw, sizeof(timeout_dw)); +#else + struct timeval recv_timeout; + recv_timeout.tv_sec = timeout_ms / 1000; + recv_timeout.tv_usec = (timeout_ms % 1000) * 1000; + setsockopt(sockfd, SOL_SOCKET, SO_RCVTIMEO, &recv_timeout, sizeof(recv_timeout)); +#endif +} + +/** + * Check if socket connection completed (success or failure) + * Returns: 1 = connected, 0 = still pending, -1 = failed + */ +static int check_socket_connected(int sockfd) { + int error = 0; + socklen_t len = sizeof(error); + +#ifdef _WIN32 + if (getsockopt(sockfd, SOL_SOCKET, SO_ERROR, (char*)&error, (int*)&len) != 0) { + return -1; + } +#else + if (getsockopt(sockfd, SOL_SOCKET, SO_ERROR, &error, &len) != 0) { + return -1; + } +#endif + + if (error == 0) { + return 1; /* Connected */ + } + return -1; /* Failed */ +} + +/** + * Start a non-blocking connection attempt + * Returns: socket fd on success (connection in progress), -1 on immediate failure + */ +static int start_connection_attempt(const struct addrinfo *addr) { + int sockfd = socket(addr->ai_family, addr->ai_socktype, addr->ai_protocol); + if (sockfd == -1) { + return -1; + } + + configure_socket_options(sockfd); + set_socket_nonblocking(sockfd); + + int ret = connect(sockfd, addr->ai_addr, addr->ai_addrlen); + if (ret == 0) { + /* Connected immediately (rare but possible on localhost) */ + return sockfd; + } + +#ifdef _WIN32 + if (WSAGetLastError() == WSAEWOULDBLOCK) { + return sockfd; /* Connection in progress */ + } +#else + if (errno == EINPROGRESS) { + return sockfd; /* Connection in progress */ + } +#endif + + /* Immediate failure */ + close(sockfd); + return -1; +} + +/** + * Establish a TCP connection using Happy Eyeballs (RFC 8305) + * + * Algorithm: + * 1. Sort addresses: IPv6 first, then IPv4 (interleaved by family) + * 2. Start first (IPv6) connection immediately + * 3. After 250ms delay, start IPv4 connection if IPv6 not yet connected + * 4. Return whichever connection succeeds first + * 5. Cancel losing connection(s) */ int httpmorph_tcp_connect(const char *host, uint16_t port, uint32_t timeout_ms, uint64_t *connect_time_us) { - struct addrinfo hints, *result, *rp; + struct addrinfo hints, *result; int sockfd = -1; uint64_t start_time = httpmorph_get_time_us(); bool need_free_result = false; @@ -315,7 +510,7 @@ int httpmorph_tcp_connect(const char *host, uint16_t port, uint32_t timeout_ms, /* Try DNS cache first */ result = dns_cache_lookup(host, port); if (result) { - need_free_result = true; /* We own this copy */ + need_free_result = true; } else { /* Cache miss - perform DNS lookup */ memset(&hints, 0, sizeof(hints)); @@ -324,214 +519,196 @@ int httpmorph_tcp_connect(const char *host, uint16_t port, uint32_t timeout_ms, hints.ai_flags = 0; hints.ai_protocol = 0; - /* Convert port to string */ char port_str[6]; snprintf(port_str, sizeof(port_str), "%u", port); - /* Resolve hostname */ int ret = getaddrinfo(host, port_str, &hints, &result); if (ret != 0) { return -1; } - /* Add to cache for future use */ dns_cache_add(host, port, result); - need_free_result = false; /* Will use freeaddrinfo() */ + need_free_result = false; } - /* Try each address until we succeed */ - int ret; - for (rp = result; rp != NULL; rp = rp->ai_next) { - sockfd = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol); - if (sockfd == -1) { - continue; - } - - /* Enable TCP_NODELAY (disable Nagle's algorithm for lower latency) */ - int nodelay = 1; - setsockopt(sockfd, IPPROTO_TCP, TCP_NODELAY, (char*)&nodelay, sizeof(nodelay)); + /* Separate addresses by family (RFC 8305: prefer IPv6) */ + struct addrinfo *ipv6_addrs[16]; + struct addrinfo *ipv4_addrs[16]; + int ipv6_count = 0, ipv4_count = 0; - /* Enable SO_REUSEADDR for faster socket reuse */ - int reuse = 1; - setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, (char*)&reuse, sizeof(reuse)); + for (struct addrinfo *rp = result; rp != NULL; rp = rp->ai_next) { + if (rp->ai_family == AF_INET6 && ipv6_count < 16) { + ipv6_addrs[ipv6_count++] = rp; + } else if (rp->ai_family == AF_INET && ipv4_count < 16) { + ipv4_addrs[ipv4_count++] = rp; + } + } - /* Enable SO_KEEPALIVE for connection health monitoring */ - int keepalive = 1; - setsockopt(sockfd, SOL_SOCKET, SO_KEEPALIVE, (char*)&keepalive, sizeof(keepalive)); + /* Build interleaved address list (IPv6, IPv4, IPv6, IPv4, ...) per RFC 8305 */ + struct addrinfo *sorted_addrs[32]; + int sorted_count = 0; + int i6 = 0, i4 = 0; - /* Optimize send/receive buffer sizes (64KB each for better throughput) */ - int bufsize = 65536; - setsockopt(sockfd, SOL_SOCKET, SO_SNDBUF, (char*)&bufsize, sizeof(bufsize)); - setsockopt(sockfd, SOL_SOCKET, SO_RCVBUF, (char*)&bufsize, sizeof(bufsize)); + while (i6 < ipv6_count || i4 < ipv4_count) { + if (i6 < ipv6_count) { + sorted_addrs[sorted_count++] = ipv6_addrs[i6++]; + } + if (i4 < ipv4_count) { + sorted_addrs[sorted_count++] = ipv4_addrs[i4++]; + } + } -#ifdef TCP_QUICKACK - /* Enable TCP_QUICKACK on Linux for faster ACKs */ - int quickack = 1; - setsockopt(sockfd, IPPROTO_TCP, TCP_QUICKACK, (char*)&quickack, sizeof(quickack)); -#endif + if (sorted_count == 0) { + /* No addresses found */ + if (need_free_result) { + addrinfo_deep_free(result); + } else { + freeaddrinfo(result); + } + return -1; + } -#ifdef SO_REUSEPORT - /* Enable SO_REUSEPORT if available (Linux 3.9+, BSD) */ - int reuseport = 1; - setsockopt(sockfd, SOL_SOCKET, SO_REUSEPORT, (char*)&reuseport, sizeof(reuseport)); -#endif + /* Happy Eyeballs: race connections with staggered starts */ + int active_sockets[MAX_PARALLEL_CONNECTIONS] = {-1, -1}; + int active_count = 0; + int next_addr_idx = 0; + uint64_t next_attempt_time = 0; + uint64_t deadline = start_time + (uint64_t)timeout_ms * 1000; + + /* Start first connection immediately */ + active_sockets[0] = start_connection_attempt(sorted_addrs[next_addr_idx++]); + if (active_sockets[0] >= 0) { + active_count = 1; + /* Schedule next attempt after 250ms delay */ + next_attempt_time = httpmorph_get_time_us() + HAPPY_EYEBALLS_DELAY_MS * 1000; + } - /* Set socket to non-blocking for timeout support */ -#ifdef _WIN32 - u_long mode = 1; - ioctlsocket(sockfd, FIONBIO, &mode); -#else - int flags = fcntl(sockfd, F_GETFL, 0); - fcntl(sockfd, F_SETFL, flags | O_NONBLOCK); -#endif + /* Poll until we have a winner or timeout */ + while (active_count > 0) { + uint64_t now = httpmorph_get_time_us(); - /* Attempt connection */ - ret = connect(sockfd, rp->ai_addr, rp->ai_addrlen); - if (ret == 0) { - /* Connected immediately */ + /* Check timeout */ + if (now >= deadline) { break; } -#ifndef _WIN32 - /* On Unix, check for immediate connection failure */ - if (errno == ECONNREFUSED || errno == ENETUNREACH || errno == EHOSTUNREACH || - errno == ETIMEDOUT || errno == ECONNRESET) { - /* Connection failed immediately - don't wait, try next address */ - if (sockfd > 2) close(sockfd); - sockfd = -1; - continue; + /* Start next connection attempt if delay has passed and we have addresses left */ + if (next_addr_idx < sorted_count && active_count < MAX_PARALLEL_CONNECTIONS && now >= next_attempt_time) { + int new_sock = start_connection_attempt(sorted_addrs[next_addr_idx++]); + if (new_sock >= 0) { + active_sockets[active_count++] = new_sock; + next_attempt_time = now + HAPPY_EYEBALLS_DELAY_MS * 1000; + } } -#endif - -#ifdef _WIN32 - if (WSAGetLastError() == WSAEWOULDBLOCK) { -#else - if (errno == EINPROGRESS) { -#endif - /* Connection in progress - wait with select using polling approach */ - uint64_t poll_start = httpmorph_get_time_us(); - uint64_t poll_timeout_us = (uint64_t)timeout_ms * 1000; - int connected = 0; - while (httpmorph_get_time_us() - poll_start < poll_timeout_us) { - fd_set write_fds, except_fds; - struct timeval tv; + /* Build fd_set for select */ + fd_set write_fds; + FD_ZERO(&write_fds); + int max_fd = -1; - FD_ZERO(&write_fds); - FD_ZERO(&except_fds); - FD_SET(sockfd, &write_fds); - FD_SET(sockfd, &except_fds); + for (int i = 0; i < active_count; i++) { + if (active_sockets[i] >= 0) { + FD_SET(active_sockets[i], &write_fds); + if (active_sockets[i] > max_fd) { + max_fd = active_sockets[i]; + } + } + } - /* Poll every 100ms to detect errors quickly */ - tv.tv_sec = 0; - tv.tv_usec = 100000; /* 100ms */ + if (max_fd < 0) { + break; + } - ret = select(SELECT_NFDS(sockfd), NULL, &write_fds, &except_fds, &tv); + /* Calculate select timeout: + * - If we have more addresses to try, wait until next_attempt_time + * - Otherwise wait until deadline + */ + uint64_t wait_until = deadline; + if (next_addr_idx < sorted_count && active_count < MAX_PARALLEL_CONNECTIONS) { + if (next_attempt_time < wait_until) { + wait_until = next_attempt_time; + } + } - /* Check socket error after each poll */ - int error = 0; - socklen_t len = sizeof(error); -#ifdef _WIN32 - if (getsockopt(sockfd, SOL_SOCKET, SO_ERROR, (char*)&error, (int*)&len) == 0) { -#else - if (getsockopt(sockfd, SOL_SOCKET, SO_ERROR, &error, &len) == 0) { -#endif - if (error == 0 && ret > 0 && (FD_ISSET(sockfd, &write_fds) || FD_ISSET(sockfd, &except_fds))) { - /* Connection succeeded */ - connected = 1; - break; - } else if (error != 0) { - /* Connection failed - don't wait, try next address */ + uint64_t wait_us = (wait_until > now) ? (wait_until - now) : 0; + /* Cap at 50ms for responsiveness */ + if (wait_us > 50000) wait_us = 50000; + + struct timeval tv; + tv.tv_sec = wait_us / 1000000; + tv.tv_usec = wait_us % 1000000; + + int sel_ret = select(SELECT_NFDS(max_fd), NULL, &write_fds, NULL, &tv); + + if (sel_ret > 0) { + /* Check which socket(s) are ready */ + for (int i = 0; i < active_count; i++) { + if (active_sockets[i] >= 0 && FD_ISSET(active_sockets[i], &write_fds)) { + int status = check_socket_connected(active_sockets[i]); + if (status == 1) { + /* Winner! This socket connected first */ + sockfd = active_sockets[i]; + active_sockets[i] = -1; + + /* Close all other active sockets */ + for (int j = 0; j < active_count; j++) { + if (active_sockets[j] >= 0) { + close(active_sockets[j]); + active_sockets[j] = -1; + } + } + active_count = 0; break; + } else if (status == -1) { + /* This socket failed, close it */ + close(active_sockets[i]); + active_sockets[i] = -1; } } } - if (connected) { - break; /* Successfully connected */ + /* Compact the active_sockets array */ + int write_idx = 0; + for (int i = 0; i < active_count; i++) { + if (active_sockets[i] >= 0) { + active_sockets[write_idx++] = active_sockets[i]; + } + } + active_count = write_idx; + + if (sockfd >= 0) { + break; /* We have a winner */ } - /* Connection failed or timed out - try next address */ } - /* Connection failed, try next address */ - if (sockfd > 2) close(sockfd); - sockfd = -1; + /* If no active connections and we have more addresses, try next */ + if (active_count == 0 && next_addr_idx < sorted_count) { + int new_sock = start_connection_attempt(sorted_addrs[next_addr_idx++]); + if (new_sock >= 0) { + active_sockets[0] = new_sock; + active_count = 1; + next_attempt_time = httpmorph_get_time_us() + HAPPY_EYEBALLS_DELAY_MS * 1000; + } + } } - /* Free result using appropriate method */ + /* Cleanup any remaining active sockets */ + for (int i = 0; i < active_count; i++) { + if (active_sockets[i] >= 0) { + close(active_sockets[i]); + } + } + + /* Free DNS result */ if (need_free_result) { addrinfo_deep_free(result); } else { freeaddrinfo(result); } - if (sockfd != -1) { - /* Set socket to blocking mode for HTTP/1.1 compatibility - * (HTTP/2 will set it back to non-blocking later if negotiated) */ -#ifdef _WIN32 - u_long mode = 0; - ioctlsocket(sockfd, FIONBIO, &mode); -#else - int flags = fcntl(sockfd, F_GETFL, 0); - fcntl(sockfd, F_SETFL, flags & ~O_NONBLOCK); -#endif - - /* Set performance options */ - int opt = 1; -#ifdef _WIN32 - setsockopt(sockfd, IPPROTO_TCP, TCP_NODELAY, (char*)&opt, sizeof(opt)); -#else - setsockopt(sockfd, IPPROTO_TCP, TCP_NODELAY, &opt, sizeof(opt)); - - /* Enable TCP keep-alive to detect dead connections */ - setsockopt(sockfd, SOL_SOCKET, SO_KEEPALIVE, &opt, sizeof(opt)); - - #ifdef TCP_KEEPIDLE - /* Start probing after 60 seconds of idle time */ - int keepidle = 60; - setsockopt(sockfd, IPPROTO_TCP, TCP_KEEPIDLE, &keepidle, sizeof(keepidle)); - #endif - - #ifdef TCP_KEEPINTVL - /* Send probes every 10 seconds */ - int keepintvl = 10; - setsockopt(sockfd, IPPROTO_TCP, TCP_KEEPINTVL, &keepintvl, sizeof(keepintvl)); - #endif - - #ifdef TCP_KEEPCNT - /* Drop connection after 3 failed probes */ - int keepcnt = 3; - setsockopt(sockfd, IPPROTO_TCP, TCP_KEEPCNT, &keepcnt, sizeof(keepcnt)); - #endif - - #ifdef __APPLE__ - /* Enable TCP Fast Open on macOS for reduced latency */ - #ifdef TCP_FASTOPEN - int tfo = 1; - setsockopt(sockfd, IPPROTO_TCP, TCP_FASTOPEN, &tfo, sizeof(tfo)); - #endif - #endif - - #ifdef __linux__ - /* Enable TCP Fast Open on Linux */ - #ifdef TCP_FASTOPEN_CONNECT - int tfo = 1; - setsockopt(sockfd, IPPROTO_TCP, TCP_FASTOPEN_CONNECT, &tfo, sizeof(tfo)); - #endif - #endif -#endif - - /* Set receive timeout to prevent indefinite blocking */ -#ifdef _WIN32 - DWORD timeout_dw = timeout_ms; - setsockopt(sockfd, SOL_SOCKET, SO_RCVTIMEO, (char*)&timeout_dw, sizeof(timeout_dw)); -#else - struct timeval recv_timeout; - recv_timeout.tv_sec = timeout_ms / 1000; - recv_timeout.tv_usec = (timeout_ms % 1000) * 1000; - setsockopt(sockfd, SOL_SOCKET, SO_RCVTIMEO, &recv_timeout, sizeof(recv_timeout)); -#endif - + /* Configure winning socket */ + if (sockfd >= 0) { + configure_connected_socket(sockfd, timeout_ms); *connect_time_us = httpmorph_get_time_us() - start_time; } diff --git a/src/core/tls.c b/src/core/tls.c index 9239be2..860a7b8 100644 --- a/src/core/tls.c +++ b/src/core/tls.c @@ -12,6 +12,8 @@ extern void httpmorph_set_aes_hw_override(SSL_CTX *ctx, int override_value); #include #include #pragma comment(lib, "crypt32.lib") +#else +#include #endif /* OpenSSL 1.0.x compatibility */ @@ -56,6 +58,143 @@ static inline int SSL_CTX_set_max_proto_version(SSL_CTX *ctx, int version) { #include #include +/* ==================================================================== + * GLOBAL TLS SESSION CACHE (for async requests without client context) + * ==================================================================== */ + +#define GLOBAL_SESSION_CACHE_SIZE 64 +#define GLOBAL_SESSION_TTL_SECONDS 300 /* 5 minutes */ + +typedef struct global_session_entry { + char host[256]; + uint16_t port; + SSL_SESSION *session; + time_t created; + bool valid; +} global_session_entry_t; + +static global_session_entry_t g_session_cache[GLOBAL_SESSION_CACHE_SIZE]; +static int g_session_cache_initialized = 0; + +#ifdef _WIN32 +static CRITICAL_SECTION g_session_cache_mutex; +#else +static pthread_mutex_t g_session_cache_mutex = PTHREAD_MUTEX_INITIALIZER; +#endif + +static void global_session_cache_init(void) { + if (!g_session_cache_initialized) { +#ifdef _WIN32 + InitializeCriticalSection(&g_session_cache_mutex); +#endif + memset(g_session_cache, 0, sizeof(g_session_cache)); + g_session_cache_initialized = 1; + } +} + +static void global_session_cache_lock(void) { +#ifdef _WIN32 + EnterCriticalSection(&g_session_cache_mutex); +#else + pthread_mutex_lock(&g_session_cache_mutex); +#endif +} + +static void global_session_cache_unlock(void) { +#ifdef _WIN32 + LeaveCriticalSection(&g_session_cache_mutex); +#else + pthread_mutex_unlock(&g_session_cache_mutex); +#endif +} + +/* Get a TLS session from the global cache */ +SSL_SESSION* global_session_cache_get(const char *host, uint16_t port) { + if (!host) return NULL; + + global_session_cache_init(); + global_session_cache_lock(); + + SSL_SESSION *session = NULL; + time_t now = time(NULL); + + for (int i = 0; i < GLOBAL_SESSION_CACHE_SIZE; i++) { + if (g_session_cache[i].valid && + g_session_cache[i].port == port && + strcmp(g_session_cache[i].host, host) == 0) { + + /* Check if entry is expired */ + if (now - g_session_cache[i].created > GLOBAL_SESSION_TTL_SECONDS) { + /* Expired - invalidate and continue */ + SSL_SESSION_free(g_session_cache[i].session); + g_session_cache[i].valid = false; + g_session_cache[i].session = NULL; + break; + } + + session = g_session_cache[i].session; + break; + } + } + + global_session_cache_unlock(); + return session; +} + +/* Store a TLS session in the global cache */ +void global_session_cache_put(const char *host, uint16_t port, SSL_SESSION *session) { + if (!host || !session) return; + + global_session_cache_init(); + global_session_cache_lock(); + + int free_idx = -1; + int oldest_idx = 0; + time_t oldest_time = time(NULL); + + /* Look for existing entry or find free/oldest slot */ + for (int i = 0; i < GLOBAL_SESSION_CACHE_SIZE; i++) { + if (!g_session_cache[i].valid) { + if (free_idx < 0) free_idx = i; + continue; + } + + /* Update existing entry */ + if (g_session_cache[i].port == port && + strcmp(g_session_cache[i].host, host) == 0) { + SSL_SESSION_free(g_session_cache[i].session); + SSL_SESSION_up_ref(session); + g_session_cache[i].session = session; + g_session_cache[i].created = time(NULL); + global_session_cache_unlock(); + return; + } + + /* Track oldest for eviction */ + if (g_session_cache[i].created < oldest_time) { + oldest_time = g_session_cache[i].created; + oldest_idx = i; + } + } + + /* Use free slot or evict oldest */ + int target_idx = (free_idx >= 0) ? free_idx : oldest_idx; + + if (g_session_cache[target_idx].session) { + SSL_SESSION_free(g_session_cache[target_idx].session); + } + + strncpy(g_session_cache[target_idx].host, host, sizeof(g_session_cache[target_idx].host) - 1); + g_session_cache[target_idx].host[sizeof(g_session_cache[target_idx].host) - 1] = '\0'; + g_session_cache[target_idx].port = port; + SSL_SESSION_up_ref(session); + g_session_cache[target_idx].session = session; + g_session_cache[target_idx].created = time(NULL); + g_session_cache[target_idx].valid = true; + + global_session_cache_unlock(); +} + static int cert_decompress_brotli(SSL *ssl, CRYPTO_BUFFER **out, size_t uncompressed_len, const uint8_t *in, size_t in_len) { @@ -320,6 +459,112 @@ int httpmorph_configure_ssl_ctx(SSL_CTX *ctx, const browser_profile_t *profile) return 0; } +/* ================================================================== + * TLS SESSION CACHE + * ================================================================== */ + +#ifndef _WIN32 +#include +#endif + +/** + * Store a TLS session in the client's cache + * Note: We increment the reference count rather than duplicating, + * since BoringSSL doesn't have SSL_SESSION_dup. + */ +void httpmorph_session_cache_put(httpmorph_client_t *client, const char *host, + uint16_t port, SSL_SESSION *session) { + if (!client || !host || !session) return; + +#ifdef _WIN32 + EnterCriticalSection(&client->session_cache_mutex); +#else + pthread_mutex_lock(&client->session_cache_mutex); +#endif + + /* Look for existing entry to update */ + for (int i = 0; i < client->session_cache_count; i++) { + if (client->session_cache[i].port == port && + strcmp(client->session_cache[i].host, host) == 0) { + /* Replace existing session */ + SSL_SESSION_free(client->session_cache[i].session); + SSL_SESSION_up_ref(session); /* Increment ref count */ + client->session_cache[i].session = session; + client->session_cache[i].created = time(NULL); + goto unlock; + } + } + + /* Add new entry */ + if (client->session_cache_count < MAX_SESSION_CACHE_ENTRIES) { + int idx = client->session_cache_count++; + strncpy(client->session_cache[idx].host, host, sizeof(client->session_cache[idx].host) - 1); + client->session_cache[idx].host[sizeof(client->session_cache[idx].host) - 1] = '\0'; + client->session_cache[idx].port = port; + SSL_SESSION_up_ref(session); /* Increment ref count */ + client->session_cache[idx].session = session; + client->session_cache[idx].created = time(NULL); + } else { + /* Cache full - replace oldest entry */ + int oldest_idx = 0; + time_t oldest_time = client->session_cache[0].created; + for (int i = 1; i < MAX_SESSION_CACHE_ENTRIES; i++) { + if (client->session_cache[i].created < oldest_time) { + oldest_time = client->session_cache[i].created; + oldest_idx = i; + } + } + SSL_SESSION_free(client->session_cache[oldest_idx].session); + strncpy(client->session_cache[oldest_idx].host, host, sizeof(client->session_cache[oldest_idx].host) - 1); + client->session_cache[oldest_idx].host[sizeof(client->session_cache[oldest_idx].host) - 1] = '\0'; + client->session_cache[oldest_idx].port = port; + SSL_SESSION_up_ref(session); /* Increment ref count */ + client->session_cache[oldest_idx].session = session; + client->session_cache[oldest_idx].created = time(NULL); + } + +unlock: +#ifdef _WIN32 + LeaveCriticalSection(&client->session_cache_mutex); +#else + pthread_mutex_unlock(&client->session_cache_mutex); +#endif +} + +/** + * Get a TLS session from the client's cache + * Returns NULL if not found, or a reference to the cached session. + * Caller should NOT free the returned session - it's owned by the cache. + */ +SSL_SESSION* httpmorph_session_cache_get(httpmorph_client_t *client, const char *host, uint16_t port) { + if (!client || !host) return NULL; + + SSL_SESSION *session = NULL; + +#ifdef _WIN32 + EnterCriticalSection(&client->session_cache_mutex); +#else + pthread_mutex_lock(&client->session_cache_mutex); +#endif + + for (int i = 0; i < client->session_cache_count; i++) { + if (client->session_cache[i].port == port && + strcmp(client->session_cache[i].host, host) == 0) { + /* Return the cached session directly - caller should not free it */ + session = client->session_cache[i].session; + break; + } + } + +#ifdef _WIN32 + LeaveCriticalSection(&client->session_cache_mutex); +#else + pthread_mutex_unlock(&client->session_cache_mutex); +#endif + + return session; +} + /** * Establish TLS connection on existing socket */ @@ -472,6 +717,157 @@ SSL* httpmorph_tls_connect(SSL_CTX *ctx, int sockfd, const char *hostname, return ssl; } +/** + * Establish TLS connection with session caching support + * Uses cached TLS sessions to speed up repeated connections to the same host + */ +SSL* httpmorph_tls_connect_cached(httpmorph_client_t *client, int sockfd, + const char *hostname, uint16_t port, + bool http2_enabled, bool verify_cert, + uint64_t *tls_time) { + if (!client || !hostname) { + return NULL; + } + + uint64_t start_time = httpmorph_get_time_us(); + + SSL *ssl = SSL_new(client->ssl_ctx); + if (!ssl) { + return NULL; + } + + /* Try to reuse a cached session for faster resumption */ + SSL_SESSION *cached_session = httpmorph_session_cache_get(client, hostname, port); + if (cached_session) { + SSL_set_session(ssl, cached_session); + /* Don't free - cache owns the session */ + } + + /* Check which extensions the profile includes */ + const browser_profile_t *browser_profile = client->browser_profile; + bool has_ech = false; + bool has_alps = false; + bool has_ocsp = false; + if (browser_profile) { + for (int i = 0; i < browser_profile->extension_count; i++) { + uint16_t ext = browser_profile->extensions[i]; + if (ext == 65037) has_ech = true; + if (ext == 17613 || ext == 17513) has_alps = true; + if (ext == 5) has_ocsp = true; + } + } + + /* Enable/disable ECH grease */ + SSL_set_enable_ech_grease(ssl, has_ech ? 1 : 0); + + /* Enable OCSP stapling if profile includes it */ + if (has_ocsp) { + SSL_enable_ocsp_stapling(ssl); + } + + /* Set SSL verification mode */ + if (verify_cert) { + SSL_set_verify(ssl, SSL_VERIFY_PEER, NULL); + } else { + SSL_set_verify(ssl, SSL_VERIFY_NONE, NULL); + } + + /* Set ALPN protocols */ + if (browser_profile && browser_profile->alpn_protocol_count > 0) { + unsigned char alpn_list[256]; + unsigned char *alpn_p = alpn_list; + + for (int i = 0; i < browser_profile->alpn_protocol_count; i++) { + if (!http2_enabled && strcmp(browser_profile->alpn_protocols[i], "h2") == 0) { + continue; + } + + size_t len = strlen(browser_profile->alpn_protocols[i]); + *alpn_p++ = (unsigned char)len; + memcpy(alpn_p, browser_profile->alpn_protocols[i], len); + alpn_p += len; + } + + if (alpn_p > alpn_list) { + SSL_set_alpn_protos(ssl, alpn_list, alpn_p - alpn_list); + + if (has_alps && http2_enabled) { + SSL_add_application_settings(ssl, + (const uint8_t *)"h2", 2, + (const uint8_t *)"", 0); + } + } + } + + /* Set SNI hostname */ + SSL_set_tlsext_host_name(ssl, hostname); + + /* Attach to socket */ + if (SSL_set_fd(ssl, sockfd) != 1) { + SSL_free(ssl); + return NULL; + } + + /* Perform TLS handshake */ + int ret; + int ssl_err; + uint64_t handshake_timeout_us = 30000000; + uint64_t deadline = start_time + handshake_timeout_us; + + while (1) { + ret = SSL_connect(ssl); + if (ret == 1) { + break; /* Success */ + } + + ssl_err = SSL_get_error(ssl, ret); + + if (ssl_err == SSL_ERROR_WANT_READ || ssl_err == SSL_ERROR_WANT_WRITE) { + uint64_t now = httpmorph_get_time_us(); + if (now >= deadline) { + SSL_free(ssl); + return NULL; /* Timeout */ + } + + fd_set read_fds, write_fds; + struct timeval tv; + uint64_t remaining_us = deadline - now; + + FD_ZERO(&read_fds); + FD_ZERO(&write_fds); + + if (ssl_err == SSL_ERROR_WANT_READ) { + FD_SET(sockfd, &read_fds); + } else { + FD_SET(sockfd, &write_fds); + } + + tv.tv_sec = remaining_us / 1000000; + tv.tv_usec = remaining_us % 1000000; + + int select_ret = select(SELECT_NFDS(sockfd), &read_fds, &write_fds, NULL, &tv); + if (select_ret <= 0) { + SSL_free(ssl); + return NULL; + } + continue; + } + + /* Handshake failed */ + SSL_free(ssl); + return NULL; + } + + /* Cache the session for future connections */ + SSL_SESSION *new_session = SSL_get_session(ssl); + if (new_session) { + httpmorph_session_cache_put(client, hostname, port, new_session); + } + + *tls_time = httpmorph_get_time_us() - start_time; + return ssl; +} + /** * Calculate JA3 fingerprint from SSL connection */ diff --git a/src/httpmorph/_async_client.py b/src/httpmorph/_async_client.py index 066922a..0b5b1fd 100644 --- a/src/httpmorph/_async_client.py +++ b/src/httpmorph/_async_client.py @@ -1,8 +1,8 @@ """ AsyncClient - Truly asynchronous HTTP client using httpmorph's async I/O engine -This provides true async I/O capabilities without thread pool overhead. -Uses C-level I/O engine (kqueue/epoll) for non-blocking operations. +This provides true async I/O capabilities using C-level kqueue/epoll integration. +Falls back to thread pool if the async bindings are not available. """ import asyncio @@ -128,65 +128,72 @@ def raise_for_status(self): class AsyncClient: """ - HTTP client with true async I/O (no thread pool) + Async HTTP client with true async I/O using C-level kqueue/epoll. - This uses the C-level async I/O engine for maximum performance: - - ✅ Non-blocking connect() - - ✅ Non-blocking TLS handshake - - ✅ Non-blocking send/receive - - ✅ I/O engine with epoll/kqueue - - ✅ Async request manager - - ✅ Python asyncio bindings - - ⏳ DNS resolution (uses blocking for now) + Uses the C-level async I/O engine for non-blocking HTTP/HTTPS requests. + Falls back to thread pool if async bindings are unavailable. Usage: async with AsyncClient() as client: response = await client.get('https://example.com') print(response.status_code) + + # Concurrent requests run in parallel: + responses = await asyncio.gather( + client.get('https://example.com/1'), + client.get('https://example.com/2'), + client.get('https://example.com/3'), + ) """ - def __init__(self, http2: bool = False, timeout: float = 30.0): + def __init__(self, http2: bool = True, timeout: float = 30.0, max_workers: int = 10): """ Initialize AsyncClient Args: - http2: Enable HTTP/2 support (not yet implemented) + http2: Enable HTTP/2 support (default: True) timeout: Default timeout in seconds + max_workers: Maximum concurrent requests (for thread pool fallback) """ - if not HAS_ASYNC_BINDINGS: - raise RuntimeError( - "Async bindings not available. " - "Please rebuild httpmorph with: python setup.py build_ext --inplace" - ) - self.http2 = http2 self.timeout = timeout + self.max_workers = max_workers self._manager = None + self._use_true_async = HAS_ASYNC_BINDINGS + # Thread pool fallback + self._executor = None self._loop = None + self._thread_clients = None async def __aenter__(self): """Async context manager entry""" - # Create manager and set event loop - self._manager = _async_bindings.create_async_manager() - self._loop = asyncio.get_running_loop() - self._manager.set_event_loop(self._loop) + if self._use_true_async: + # Use true async I/O + self._manager = _async_bindings.AsyncRequestManager() + else: + # Fallback to thread pool + import concurrent.futures + import threading + + self._executor = concurrent.futures.ThreadPoolExecutor(max_workers=self.max_workers) + self._loop = asyncio.get_running_loop() + self._thread_clients = threading.local() return self async def __aexit__(self, exc_type, exc_val, exc_tb): """Async context manager exit""" await self.close() - async def get(self, url: str, **kwargs): - """ - Make async GET request + def _get_thread_client(self): + """Get or create a Client for the current thread (fallback mode).""" + from httpmorph import Client - Args: - url: URL to request - **kwargs: Additional request options (headers, timeout) + if not hasattr(self._thread_clients, 'client'): + self._thread_clients.client = Client(http2=self.http2) + return self._thread_clients.client - Returns: - AsyncResponse object - """ + async def get(self, url: str, **kwargs): + """Make async GET request""" return await self._request("GET", url, **kwargs) async def post(self, url: str, **kwargs): @@ -215,162 +222,109 @@ async def options(self, url: str, **kwargs): async def _request(self, method: str, url: str, **kwargs): """ - Internal async request implementation - - This uses the C-level async I/O engine: - 1. Create C async_request_t via manager - 2. Get socket FD from async_request_get_fd() - 3. Register FD with asyncio event loop (add_reader/add_writer) - 4. Wait for I/O events without blocking - 5. Step state machine on each event - 6. Return response when complete - """ - if self._manager is None: - raise RuntimeError( - "Client not initialized. Use 'async with AsyncClient() as client:' pattern" - ) - - # Get timeout (use default if not specified) - timeout = kwargs.get("timeout", self.timeout) - timeout_ms = int(timeout * 1000) + Internal async request implementation. - # Get headers - headers = kwargs.get("headers", {}) - - # Get verify parameter (default to True) - verify = kwargs.get("verify", True) - - # Get proxy parameters - proxy = kwargs.get("proxy") or kwargs.get("proxies") - proxy_auth = kwargs.get("proxy_auth") - - # Get body - body = kwargs.get("data") or kwargs.get("body") - - # Handle JSON parameter - json_data = kwargs.get("json") - if json_data: + Uses true async I/O when available, falls back to thread pool otherwise. + """ + timeout = kwargs.pop("timeout", self.timeout) + headers = kwargs.pop("headers", {}) + body = kwargs.pop("body", None) + data = kwargs.pop("data", None) + json_data = kwargs.pop("json", None) + proxy = kwargs.pop("proxy", None) + proxy_auth = kwargs.pop("proxy_auth", None) + verify = kwargs.pop("verify", True) + + # Handle body/data/json + request_body = None + if body is not None: + request_body = body if isinstance(body, bytes) else body.encode('utf-8') + elif json_data is not None: import json - - body = json.dumps(json_data).encode("utf-8") - headers = headers.copy() # Don't modify original - headers["Content-Type"] = "application/json" - - # Convert body to bytes if needed - if body and isinstance(body, str): - body = body.encode("utf-8") - - # Submit request to manager - response_dict = await self._manager.submit_request( - method=method, - url=url, - headers=headers, - body=body, - timeout_ms=timeout_ms, - verify=verify, - proxy=proxy, - proxy_auth=proxy_auth, - ) - - # Check for errors - if response_dict.get("error") and response_dict["error"] != 0: - error_msg = response_dict.get("error_message", "Request failed") - error_code = response_dict["error"] - - # Map error codes to exceptions (negative values in C) - if error_code == -5: # HTTPMORPH_ERROR_TIMEOUT - raise asyncio.TimeoutError(error_msg) - elif error_code == -3: # HTTPMORPH_ERROR_NETWORK - from httpmorph._client_c import ConnectionError - - raise ConnectionError(error_msg) + request_body = json.dumps(json_data).encode('utf-8') + if 'Content-Type' not in headers: + headers['Content-Type'] = 'application/json' + elif data is not None: + if isinstance(data, dict): + import urllib.parse + request_body = urllib.parse.urlencode(data).encode('utf-8') + if 'Content-Type' not in headers: + headers['Content-Type'] = 'application/x-www-form-urlencoded' else: - from httpmorph._client_c import RequestException - - raise RequestException(error_msg) - - # Create response object - return AsyncResponse(response_dict, url) + request_body = data if isinstance(data, bytes) else str(data).encode('utf-8') + + if self._use_true_async and self._manager is not None: + # True async I/O path + timeout_ms = int(timeout * 1000) + result = await self._manager.submit_request( + method, + url, + headers, + request_body, + timeout_ms, + verify=verify, + proxy=proxy, + proxy_auth=proxy_auth + ) + return AsyncResponse(result, url) + else: + # Thread pool fallback + if self._executor is None: + raise RuntimeError( + "Client not initialized. Use 'async with AsyncClient() as client:' pattern" + ) + + def sync_request(): + client = self._get_thread_client() + client_method = getattr(client, method.lower()) + return client_method(url, timeout=timeout, headers=headers, **kwargs) + + response = await self._loop.run_in_executor(self._executor, sync_request) + return response async def close(self): """Close client and cleanup resources""" if self._manager is not None: - # Wait for all active requests to complete before destroying manager - # This prevents the manager from being destroyed mid-request - max_wait = 10 # seconds - wait_start = asyncio.get_running_loop().time() - while self._manager.get_active_count() > 0: - # Trigger cleanup of completed requests - self._manager.cleanup() - - # Check if any requests remain - active = self._manager.get_active_count() - if active == 0: - break - - elapsed = asyncio.get_running_loop().time() - wait_start - if elapsed > max_wait: - print( - f"[AsyncClient] Warning: {active} requests still active after {max_wait}s timeout" - ) - break - await asyncio.sleep(0.1) # Give poll loops time to complete - - # Give any remaining poll loops a chance to complete - # This ensures all async coroutines have exited before manager destruction - await asyncio.sleep(0.2) - - # Manager cleanup is handled by Cython __dealloc__ + self._manager.cleanup() self._manager = None + if self._executor is not None: + self._executor.shutdown(wait=False) + self._executor = None self._loop = None + self._thread_clients = None # Architecture documentation __doc__ = """ -Async I/O Architecture (Phase B Complete) -========================================== +True Async I/O Architecture +============================ -Phase B Days 1-3: ✅ COMPLETE +httpmorph now provides TRUE async I/O using C-level integration: 1. I/O Engine (src/core/io_engine.c) - - epoll support for Linux (edge-triggered) - - kqueue support for macOS/BSD (one-shot) - - Platform-agnostic API - - Socket helpers (non-blocking, performance opts) - - Operation helpers (connect, recv, send) + - kqueue support for macOS/BSD + - epoll support for Linux + - Platform-agnostic API for socket readiness 2. Async Request State Machine (src/core/async_request.c) - 9-state machine: INIT → DNS → CONNECT → TLS → SEND → RECV_HEADERS → RECV_BODY → COMPLETE - Non-blocking at every stage - Proper SSL_WANT_READ/WANT_WRITE handling - - Timeout tracking - - Error handling - - Reference counting + - HTTP/2 support via nghttp2 3. Request Manager (src/core/async_request_manager.c) - Track multiple concurrent requests - Request ID generation - Event loop integration - - Thread-safe operations - -Phase B Days 4-5: ⏳ IN PROGRESS - -4. Python Asyncio Integration (this file) - - Cython bindings for async APIs - - Event loop integration (add_reader/add_writer) - - AsyncClient class (this file) - - Example applications - -Architecture Benefits: -- No thread pool overhead (currently 1-2ms per request) -- Support for 10,000+ concurrent connections -- Sub-millisecond async overhead -- Efficient resource usage (320KB per request vs 8MB per thread) -- Native event loop integration - -Performance Targets: -- Latency: 100-200μs overhead (vs 1-2ms with thread pool) -- Concurrency: 10K+ simultaneous requests (vs 100-200 with threads) -- Memory: 320KB per request (vs 8MB per thread) -- Throughput: 2-5x improvement over thread pool approach + +4. Python asyncio Integration (_async.pyx) + - Uses add_reader/add_writer for socket events + - Zero-copy response extraction + - Native Future integration + +Performance Characteristics: +- Latency: ~100-200μs overhead per request (vs 1-2ms with thread pool) +- Concurrency: 10K+ simultaneous requests possible +- Memory: ~320KB per request (vs 8MB per thread) +- True non-blocking I/O - no thread pool overhead """ diff --git a/src/httpmorph/_client_c.py b/src/httpmorph/_client_c.py index c3b7605..47a0a23 100644 --- a/src/httpmorph/_client_c.py +++ b/src/httpmorph/_client_c.py @@ -629,6 +629,74 @@ def options(self, url, **kwargs): """Execute an OPTIONS request""" return self.request("OPTIONS", url, **kwargs) + def prewarm(self, host, port=0, use_tls=True, count=1): + """Pre-warm connections to a host for faster subsequent requests + + Establishes TCP/TLS connections proactively to eliminate connection + setup latency from subsequent requests. + + Args: + host: Target hostname to pre-warm connections to + port: Target port (0 = default: 443 for TLS, 80 for HTTP) + use_tls: Whether to establish TLS connections (default: True) + count: Number of connections to pre-warm (default: 1) + + Returns: + int: Number of connections successfully pre-warmed + + Example: + >>> client = Client() + >>> client.prewarm('api.example.com', count=3) + 3 + >>> # Subsequent requests will reuse pre-warmed connections + >>> client.get('https://api.example.com/endpoint') + """ + return self._client.prewarm(host, port, use_tls, count) + + def configure_pool(self, idle_timeout_seconds=0, max_connections_per_host=0, max_total_connections=0): + """Configure connection pool settings + + Args: + idle_timeout_seconds: Idle timeout before closing connections (default: 30s, 0 = keep default) + max_connections_per_host: Max connections per host (default: 6, 0 = keep default) + max_total_connections: Max total connections (default: 100, 0 = keep default) + + Example: + >>> client = Client() + >>> # Keep connections alive for 60 seconds + >>> client.configure_pool(idle_timeout_seconds=60) + >>> # Allow more concurrent connections + >>> client.configure_pool(max_connections_per_host=10, max_total_connections=200) + """ + return self._client.configure_pool(idle_timeout_seconds, max_connections_per_host, max_total_connections) + + def pool_stats(self): + """Get connection pool statistics + + Returns: + dict: Dictionary with 'total_connections' and 'active_connections' + + Example: + >>> client = Client() + >>> client.get('https://example.com') + >>> stats = client.pool_stats() + >>> print(f"Total: {stats['total_connections']}, Active: {stats['active_connections']}") + """ + return self._client.pool_stats() + + def cleanup_idle_connections(self): + """Clean up idle connections in the pool + + Removes connections that have been idle longer than the idle timeout. + Call this periodically for long-running applications to free resources. + + Example: + >>> client = Client() + >>> # ... use client for a while ... + >>> client.cleanup_idle_connections() + """ + return self._client.cleanup_idle_connections() + class CookieDict(dict): """Dict-like wrapper for cookie jar with Set-Cookie parsing""" From a8465a0c86be1c3b52a450f9a0af031ed171c315 Mon Sep 17 00:00:00 2001 From: Arman Hossain Date: Mon, 15 Dec 2025 21:10:26 +0100 Subject: [PATCH 2/2] fix(session): handle silent request failures by raising ConnectionError --- src/httpmorph/_client_c.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/httpmorph/_client_c.py b/src/httpmorph/_client_c.py index 47a0a23..97960d3 100644 --- a/src/httpmorph/_client_c.py +++ b/src/httpmorph/_client_c.py @@ -919,6 +919,12 @@ def request(self, method, url, **kwargs): elif error_code != 0: raise RequestException(error_msg) + # Check for status_code=0 which indicates a failed request + # This can happen when the request fails silently (e.g., HTTP/2 stream error) + if result.get("status_code", 0) == 0: + error_msg = result.get("error_message") or "Request failed: no response received" + raise ConnectionError(error_msg) + response = Response(result, url=url) # Parse Set-Cookie headers from response