[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"summary-6eb63cd73ca2db1a-servo-html5ever-parser-runs-in-browser-via-465kb-w-summary":3,"summaries-facets-categories":117,"summary-related-6eb63cd73ca2db1a-servo-html5ever-parser-runs-in-browser-via-465kb-w-summary":3702},{"id":4,"title":5,"ai":6,"body":13,"categories":89,"created_at":91,"date_modified":91,"description":84,"extension":92,"faq":91,"featured":93,"kicker_label":91,"meta":94,"navigation":101,"path":102,"published_at":91,"question":91,"scraped_at":103,"seo":104,"sitemap":105,"source_id":106,"source_name":107,"source_type":108,"source_url":79,"stem":109,"tags":110,"thumbnail_url":91,"tldr":114,"tweet":91,"unknown_tags":115,"__hash__":116},"summaries\u002Fsummaries\u002F6eb63cd73ca2db1a-servo-html5ever-parser-runs-in-browser-via-465kb-w-summary.md","Servo html5ever Parser Runs in Browser via 465KB WASM",{"provider":7,"model":8,"input_tokens":9,"output_tokens":10,"processing_time_ms":11,"cost_usd":12},"openrouter","x-ai\u002Fgrok-4.1-fast",3583,1305,11684,0.0013466,{"type":14,"value":15,"toc":83},"minimark",[16,21,38,49,53,56,73],[17,18,20],"h2",{"id":19},"compile-servo-sub-crates-to-wasm-for-browser-use","Compile Servo Sub-Crates to WASM for Browser Use",[22,23,24,25,29,30,33,34,37],"p",{},"Servo's individual crates like ",[26,27,28],"code",{},"html5ever"," (HTML5 parser) and ",[26,31,32],{},"markup5ever_rcdom"," (RC DOM builder) compile cleanly to WebAssembly at ~465 KB, enabling fully client-side execution without server roundtrips. This sidesteps the full ",[26,35,36],{},"servo"," crate's compilation blockers: SpiderMonkey JS engine, threading, and OpenGL dependencies. Result: a production-grade parser runs in any modern browser tab, producing a parse tree and normalized serialization from raw input.",[22,39,40,41,44,45,48],{},"To integrate, load the WASM module (shows 'loading wasm…' on init), feed it HTML strings, and query the output DOM. Handles real-world mess: input like ",[26,42,43],{},"\u003Cp>hello\u003Cb>world\u003C\u002Fp>\u003Ci>! \u003Cdiv>\u003Ctable>\u003Ctr>\u003Ctd>implicit tbody \u003Cp>unclosed\u003C\u002Fhtml>\u003C!-- parser adopts the mis-nested tags -->"," yields Servo's tolerant interpretation—implicit ",[26,46,47],{},"\u003Ctbody>",", tag adoption despite mis-nesting, and comment preservation.",[17,50,52],{"id":51},"interactive-demo-reveals-parser-robustness","Interactive Demo Reveals Parser Robustness",[22,54,55],{},"Edit HTML live on the left pane; right pane updates with:",[57,58,59,67],"ul",{},[60,61,62,66],"li",{},[63,64,65],"strong",{},"Parse tree",": Full DOM structure as Servo sees it, exposing quirks like implicit table elements.",[60,68,69,72],{},[63,70,71],{},"Normalized HTML",": Clean serialization matching Servo's output, stripping errors without losing intent.",[22,74,75,76,82],{},"This proves Servo components deliver browser fidelity in WASM—ideal for tools needing accurate parsing (linters, preprocessors, editors) without bundling a full engine. Trade-off: sticks to parser\u002FDOM only; no layout or rendering. Start with the demo at ",[77,78,79],"a",{"href":79,"rel":80},"https:\u002F\u002Fsimonw.github.io\u002Fresearch\u002Fservo-crate-exploration\u002Fhtml5ever-wasm-demo\u002Fwww\u002F",[81],"nofollow"," to test edge cases yourself.",{"title":84,"searchDepth":85,"depth":85,"links":86},"",2,[87,88],{"id":19,"depth":85,"text":20},{"id":51,"depth":85,"text":52},[90],"Software Engineering",null,"md",false,{"content_references":95,"triage":96},[],{"relevance":97,"novelty":97,"quality":98,"actionability":97,"composite":99,"reasoning":100},3,4,3.25,"Category: Design & Frontend. The article discusses compiling Servo's html5ever and markup5ever_rcdom crates to WebAssembly for client-side HTML parsing, which is relevant for frontend developers. It provides a practical demonstration of the parser's capabilities, but lacks detailed step-by-step integration guidance.",true,"\u002Fsummaries\u002F6eb63cd73ca2db1a-servo-html5ever-parser-runs-in-browser-via-465kb-w-summary","2026-04-15 15:35:11",{"title":5,"description":84},{"loc":102},"6eb63cd73ca2db1a","__oneoff__","article","summaries\u002F6eb63cd73ca2db1a-servo-html5ever-parser-runs-in-browser-via-465kb-w-summary",[111,112,113],"frontend","open-source","coding","Compile Servo's html5ever and markup5ever_rcdom crates to WebAssembly for client-side HTML parsing, handling malformed input like unclosed tags and mis-nesting—full Servo won't compile due to SpiderMonkey, threads, and GL dependencies.",[],"oN4TlOdOhmULZaf8-h-BOCMlw8b1gDvPnzF2Qf-KRoI",[118,121,124,127,130,133,135,137,139,141,143,145,148,150,152,154,156,158,160,162,164,166,169,172,174,176,178,180,182,185,187,189,191,193,195,197,199,201,203,205,207,209,211,213,215,217,219,221,223,225,227,229,231,233,235,237,239,241,243,245,247,249,251,253,255,257,259,261,263,265,267,269,271,273,275,277,279,281,283,285,287,289,291,293,295,297,299,301,303,305,307,309,311,313,315,317,319,321,323,325,327,329,331,333,335,337,339,341,343,345,347,349,351,353,355,357,359,361,363,365,367,369,371,373,375,377,379,381,383,385,387,389,391,393,395,397,399,401,403,405,407,409,411,413,415,417,419,421,423,425,427,429,431,433,435,437,439,442,444,446,448,450,452,454,456,458,460,462,464,466,468,470,472,474,476,478,480,482,484,486,488,490,492,494,496,498,500,502,504,506,508,510,512,514,516,518,520,522,524,526,528,530,532,534,536,538,540,542,544,546,548,550,552,554,556,558,560,562,564,566,568,570,572,574,576,578,580,582,584,586,588,590,592,594,596,598,600,602,604,606,608,610,612,614,616,618,620,622,624,626,628,630,632,634,636,638,640,642,644,646,648,650,652,654,656,658,660,662,664,666,668,670,672,674,676,678,680,682,684,686,688,690,692,694,696,698,700,702,704,706,708,710,712,714,716,718,720,722,724,726,728,730,732,734,736,738,740,742,744,746,748,750,752,754,756,758,760,762,764,766,768,770,772,774,776,778,780,782,784,786,788,790,792,794,796,798,800,802,804,806,808,810,812,814,816,818,820,822,824,826,828,830,832,834,836,838,840,842,844,846,848,850,852,854,856,858,860,862,864,866,868,870,872,874,876,878,880,882,884,886,888,890,892,894,896,898,900,902,904,906,908,910,912,914,916,918,920,922,924,926,928,930,932,934,936,938,940,942,944,946,948,950,952,954,956,958,960,962,964,966,968,970,972,974,976,978,980,982,984,986,988,990,992,994,996,998,1000,1002,1004,1006,1008,1010,1012,1014,1016,1018,1020,1022,1024,1026,1028,1030,1032,1034,1036,1038,1040,1042,1044,1046,1048,1050,1052,1054,1056,1058,1060,1062,1064,1066,1068,1070,1072,1074,1076,1078,1080,1082,1084,1086,1088,1090,1092,1094,1096,1098,1100,1102,1104,1106,1108,1110,1112,1114,1116,1118,1120,1122,1124,1126,1128,1130,1132,1134,1136,1138,1140,1142,1144,1146,1148,1150,1152,1154,1156,1158,1160,1162,1164,1166,1168,1170,1172,1174,1176,1178,1180,1182,1184,1186,1188,1190,1192,1194,1196,1198,1200,1202,1204,1206,1208,1210,1212,1214,1216,1218,1220,1222,1224,1226,1228,1230,1232,1234,1236,1238,1240,1242,1244,1246,1248,1250,1252,1254,1256,1258,1260,1262,1264,1266,1268,1270,1272,1274,1276,1278,1280,1282,1284,1286,1288,1290,1292,1294,1296,1298,1300,1302,1304,1306,1308,1310,1312,1314,1316,1318,1320,1322,1324,1326,1328,1330,1332,1334,1336,1338,1340,1342,1344,1346,1348,1350,1352,1354,1356,1358,1360,1362,1364,1366,1368,1370,1372,1374,1376,1378,1380,1382,1384,1386,1388,1390,1392,1394,1396,1398,1400,1402,1404,1406,1408,1410,1412,1414,1416,1418,1420,1422,1424,1426,1428,1430,1432,1434,1436,1438,1440,1442,1444,1446,1448,1450,1452,1454,1456,1458,1460,1462,1464,1466,1468,1470,1472,1474,1476,1478,1480,1482,1484,1486,1488,1490,1492,1494,1496,1498,1500,1502,1504,1506,1508,1510,1512,1514,1516,1518,1520,1522,1524,1526,1528,1530,1532,1534,1536,1538,1540,1542,1544,1546,1548,1550,1552,1554,1556,1558,1560,1562,1564,1566,1568,1570,1572,1574,1576,1578,1580,1582,1584,1586,1588,1590,1592,1594,1596,1598,1600,1602,1604,1606,1608,1610,1612,1614,1616,1618,1620,1622,1624,1626,1628,1630,1632,1634,1636,1638,1640,1642,1644,1646,1648,1650,1652,1654,1656,1658,1660,1662,1664,1666,1668,1670,1672,1674,1676,1678,1680,1682,1684,1686,1688,1690,1692,1694,1696,1698,1700,1702,1704,1706,1708,1710,1712,1714,1716,1718,1720,1722,1724,1726,1728,1730,1732,1734,1736,1738,1740,1742,1744,1746,1748,1750,1752,1754,1756,1758,1760,1762,1764,1766,1768,1770,1772,1774,1776,1778,1780,1782,1784,1786,1788,1790,1792,1794,1796,1798,1800,1802,1804,1806,1808,1810,1812,1814,1816,1818,1820,1822,1824,1826,1828,1830,1832,1834,1836,1838,1840,1842,1844,1846,1848,1850,1852,1854,1856,1858,1860,1862,1864,1866,1868,1870,1872,1874,1876,1878,1880,1882,1884,1886,1888,1890,1892,1894,1896,1898,1900,1902,1904,1906,1908,1910,1912,1914,1916,1918,1920,1922,1924,1926,1928,1930,1932,1934,1936,1938,1940,1942,1944,1946,1948,1950,1952,1954,1956,1958,1960,1962,1964,1966,1968,1970,1972,1974,1976,1978,1980,1982,1984,1986,1988,1990,1992,1994,1996,1998,2000,2002,2004,2006,2008,2010,2012,2014,2016,2018,2020,2022,2024,2026,2028,2030,2032,2034,2036,2038,2040,2042,2044,2046,2048,2050,2052,2054,2056,2058,2060,2062,2064,2066,2068,2070,2072,2074,2076,2078,2080,2082,2084,2086,2088,2090,2092,2094,2096,2098,2100,2102,2104,2106,2108,2110,2112,2114,2116,2118,2120,2122,2124,2126,2128,2130,2132,2134,2136,2138,2140,2142,2144,2146,2148,2150,2152,2154,2156,2158,2160,2162,2164,2166,2168,2170,2172,2174,2176,2178,2180,2182,2184,2186,2188,2190,2192,2194,2196,2198,2200,2202,2204,2206,2208,2210,2212,2214,2216,2218,2220,2222,2224,2226,2228,2230,2232,2234,2236,2238,2240,2242,2244,2246,2248,2250,2252,2254,2256,2258,2260,2262,2264,2266,2268,2270,2272,2274,2276,2278,2280,2282,2284,2286,2288,2290,2292,2294,2296,2298,2300,2302,2304,2306,2308,2310,2312,2314,2316,2318,2320,2322,2324,2326,2328,2330,2332,2334,2336,2338,2340,2342,2344,2346,2348,2350,2352,2354,2356,2358,2360,2362,2364,2366,2368,2370,2372,2374,2376,2378,2380,2382,2384,2386,2388,2390,2392,2394,2396,2398,2400,2402,2404,2406,2408,2410,2412,2414,2416,2418,2420,2422,2424,2426,2428,2430,2432,2434,2436,2438,2440,2442,2444,2446,2448,2450,2452,2454,2456,2458,2460,2462,2464,2466,2468,2470,2472,2474,2476,2478,2480,2482,2484,2486,2488,2490,2492,2494,2496,2498,2500,2502,2504,2506,2508,2510,2512,2514,2516,2518,2520,2522,2524,2526,2528,2530,2532,2534,2536,2538,2540,2542,2544,2546,2548,2550,2552,2554,2556,2558,2560,2562,2564,2566,2568,2570,2572,2574,2576,2578,2580,2582,2584,2586,2588,2590,2592,2594,2596,2598,2600,2602,2604,2606,2608,2610,2612,2614,2616,2618,2620,2622,2624,2626,2628,2630,2632,2634,2636,2638,2640,2642,2644,2646,2648,2650,2652,2654,2656,2658,2660,2662,2664,2666,2668,2670,2672,2674,2676,2678,2680,2682,2684,2686,2688,2690,2692,2694,2696,2698,2700,2702,2704,2706,2708,2710,2712,2714,2716,2718,2720,2722,2724,2726,2728,2730,2732,2734,2736,2738,2740,2742,2744,2746,2748,2750,2752,2754,2756,2758,2760,2762,2764,2766,2768,2770,2772,2774,2776,2778,2780,2782,2784,2786,2788,2790,2792,2794,2796,2798,2800,2802,2804,2806,2808,2810,2812,2814,2816,2818,2820,2822,2824,2826,2828,2830,2832,2834,2836,2838,2840,2842,2844,2846,2848,2850,2852,2854,2856,2858,2860,2862,2864,2866,2868,2870,2872,2874,2876,2878,2880,2882,2884,2886,2888,2890,2892,2894,2896,2898,2900,2902,2904,2906,2908,2910,2912,2914,2916,2918,2920,2922,2924,2926,2928,2930,2932,2934,2936,2938,2940,2942,2944,2946,2948,2950,2952,2954,2956,2958,2960,2962,2964,2966,2968,2970,2972,2974,2976,2978,2980,2982,2984,2986,2988,2990,2992,2994,2996,2998,3000,3002,3004,3006,3008,3010,3012,3014,3016,3018,3020,3022,3024,3026,3028,3030,3032,3034,3036,3038,3040,3042,3044,3046,3048,3050,3052,3054,3056,3058,3060,3062,3064,3066,3068,3070,3072,3074,3076,3078,3080,3082,3084,3086,3088,3090,3092,3094,3096,3098,3100,3102,3104,3106,3108,3110,3112,3114,3116,3118,3120,3122,3124,3126,3128,3130,3132,3134,3136,3138,3140,3142,3144,3146,3148,3150,3152,3154,3156,3158,3160,3162,3164,3166,3168,3170,3172,3174,3176,3178,3180,3182,3184,3186,3188,3190,3192,3194,3196,3198,3200,3202,3204,3206,3208,3210,3212,3214,3216,3218,3220,3222,3224,3226,3228,3230,3232,3234,3236,3238,3240,3242,3244,3246,3248,3250,3252,3254,3256,3258,3260,3262,3264,3266,3268,3270,3272,3274,3276,3278,3280,3282,3284,3286,3288,3290,3292,3294,3296,3298,3300,3302,3304,3306,3308,3310,3312,3314,3316,3318,3320,3322,3324,3326,3328,3330,3332,3334,3336,3338,3340,3342,3344,3346,3348,3350,3352,3354,3356,3358,3360,3362,3364,3366,3368,3370,3372,3374,3376,3378,3380,3382,3384,3386,3388,3390,3392,3394,3396,3398,3400,3402,3404,3406,3408,3410,3412,3414,3416,3418,3420,3422,3424,3426,3428,3430,3432,3434,3436,3438,3440,3442,3444,3446,3448,3450,3452,3454,3456,3458,3460,3462,3464,3466,3468,3470,3472,3474,3476,3478,3480,3482,3484,3486,3488,3490,3492,3494,3496,3498,3500,3502,3504,3506,3508,3510,3512,3514,3516,3518,3520,3522,3524,3526,3528,3530,3532,3534,3536,3538,3540,3542,3544,3546,3548,3550,3552,3554,3556,3558,3560,3562,3564,3566,3568,3570,3572,3574,3576,3578,3580,3582,3584,3586,3588,3590,3592,3594,3596,3598,3600,3602,3604,3606,3608,3610,3612,3614,3616,3618,3620,3622,3624,3626,3628,3630,3632,3634,3636,3638,3640,3642,3644,3646,3648,3650,3652,3654,3656,3658,3660,3662,3664,3666,3668,3670,3672,3674,3676,3678,3680,3682,3684,3686,3688,3690,3692,3694,3696,3698,3700],{"categories":119},[120],"Developer Productivity",{"categories":122},[123],"Business & SaaS",{"categories":125},[126],"AI & LLMs",{"categories":128},[129],"AI Automation",{"categories":131},[132],"Product Strategy",{"categories":134},[126],{"categories":136},[120],{"categories":138},[123],{"categories":140},[],{"categories":142},[126],{"categories":144},[],{"categories":146},[147],"AI News & Trends",{"categories":149},[129],{"categories":151},[147],{"categories":153},[129],{"categories":155},[129],{"categories":157},[126],{"categories":159},[126],{"categories":161},[147],{"categories":163},[126],{"categories":165},[],{"categories":167},[168],"Design & Frontend",{"categories":170},[171],"Data Science & Visualization",{"categories":173},[147],{"categories":175},[],{"categories":177},[90],{"categories":179},[126],{"categories":181},[129],{"categories":183},[184],"Marketing & Growth",{"categories":186},[126],{"categories":188},[129],{"categories":190},[],{"categories":192},[],{"categories":194},[168],{"categories":196},[129],{"categories":198},[120],{"categories":200},[168],{"categories":202},[126],{"categories":204},[129],{"categories":206},[147],{"categories":208},[],{"categories":210},[],{"categories":212},[129],{"categories":214},[90],{"categories":216},[],{"categories":218},[123],{"categories":220},[],{"categories":222},[],{"categories":224},[129],{"categories":226},[129],{"categories":228},[126],{"categories":230},[],{"categories":232},[90],{"categories":234},[],{"categories":236},[],{"categories":238},[],{"categories":240},[126],{"categories":242},[184],{"categories":244},[168],{"categories":246},[168],{"categories":248},[126],{"categories":250},[129],{"categories":252},[126],{"categories":254},[126],{"categories":256},[129],{"categories":258},[129],{"categories":260},[171],{"categories":262},[147],{"categories":264},[129],{"categories":266},[184],{"categories":268},[129],{"categories":270},[132],{"categories":272},[],{"categories":274},[129],{"categories":276},[],{"categories":278},[129],{"categories":280},[90],{"categories":282},[168],{"categories":284},[126],{"categories":286},[],{"categories":288},[],{"categories":290},[129],{"categories":292},[],{"categories":294},[126],{"categories":296},[],{"categories":298},[120],{"categories":300},[90],{"categories":302},[123],{"categories":304},[147],{"categories":306},[126],{"categories":308},[],{"categories":310},[126],{"categories":312},[],{"categories":314},[90],{"categories":316},[171],{"categories":318},[],{"categories":320},[126],{"categories":322},[168],{"categories":324},[],{"categories":326},[168],{"categories":328},[129],{"categories":330},[],{"categories":332},[129],{"categories":334},[147],{"categories":336},[123],{"categories":338},[126],{"categories":340},[],{"categories":342},[129],{"categories":344},[126],{"categories":346},[132],{"categories":348},[],{"categories":350},[126],{"categories":352},[129],{"categories":354},[129],{"categories":356},[],{"categories":358},[171],{"categories":360},[126],{"categories":362},[],{"categories":364},[120],{"categories":366},[123],{"categories":368},[126],{"categories":370},[129],{"categories":372},[90],{"categories":374},[126],{"categories":376},[],{"categories":378},[],{"categories":380},[126],{"categories":382},[],{"categories":384},[168],{"categories":386},[],{"categories":388},[126],{"categories":390},[],{"categories":392},[129],{"categories":394},[126],{"categories":396},[168],{"categories":398},[],{"categories":400},[126],{"categories":402},[126],{"categories":404},[123],{"categories":406},[129],{"categories":408},[126],{"categories":410},[168],{"categories":412},[129],{"categories":414},[],{"categories":416},[],{"categories":418},[147],{"categories":420},[],{"categories":422},[126],{"categories":424},[123,184],{"categories":426},[],{"categories":428},[126],{"categories":430},[],{"categories":432},[],{"categories":434},[126],{"categories":436},[],{"categories":438},[126],{"categories":440},[441],"DevOps & Cloud",{"categories":443},[],{"categories":445},[147],{"categories":447},[168],{"categories":449},[],{"categories":451},[147],{"categories":453},[147],{"categories":455},[126],{"categories":457},[184],{"categories":459},[],{"categories":461},[123],{"categories":463},[],{"categories":465},[126,441],{"categories":467},[126],{"categories":469},[126],{"categories":471},[129],{"categories":473},[126,90],{"categories":475},[171],{"categories":477},[126],{"categories":479},[184],{"categories":481},[129],{"categories":483},[129],{"categories":485},[],{"categories":487},[129],{"categories":489},[126,123],{"categories":491},[],{"categories":493},[168],{"categories":495},[168],{"categories":497},[],{"categories":499},[],{"categories":501},[147],{"categories":503},[],{"categories":505},[120],{"categories":507},[90],{"categories":509},[126],{"categories":511},[168],{"categories":513},[129],{"categories":515},[90],{"categories":517},[147],{"categories":519},[168],{"categories":521},[],{"categories":523},[126],{"categories":525},[126],{"categories":527},[126],{"categories":529},[147],{"categories":531},[120],{"categories":533},[126],{"categories":535},[129],{"categories":537},[441],{"categories":539},[168],{"categories":541},[129],{"categories":543},[],{"categories":545},[],{"categories":547},[168],{"categories":549},[147],{"categories":551},[171],{"categories":553},[],{"categories":555},[126],{"categories":557},[126],{"categories":559},[123],{"categories":561},[126],{"categories":563},[126],{"categories":565},[147],{"categories":567},[],{"categories":569},[129],{"categories":571},[90],{"categories":573},[],{"categories":575},[126],{"categories":577},[126],{"categories":579},[129],{"categories":581},[],{"categories":583},[],{"categories":585},[126],{"categories":587},[],{"categories":589},[123],{"categories":591},[129],{"categories":593},[],{"categories":595},[120],{"categories":597},[126],{"categories":599},[123],{"categories":601},[147],{"categories":603},[],{"categories":605},[],{"categories":607},[],{"categories":609},[147],{"categories":611},[147],{"categories":613},[],{"categories":615},[],{"categories":617},[123],{"categories":619},[],{"categories":621},[],{"categories":623},[120],{"categories":625},[],{"categories":627},[184],{"categories":629},[129],{"categories":631},[123],{"categories":633},[129],{"categories":635},[90],{"categories":637},[],{"categories":639},[132],{"categories":641},[168],{"categories":643},[90],{"categories":645},[126],{"categories":647},[129],{"categories":649},[123],{"categories":651},[126],{"categories":653},[],{"categories":655},[],{"categories":657},[90],{"categories":659},[171],{"categories":661},[132],{"categories":663},[129],{"categories":665},[126],{"categories":667},[],{"categories":669},[441],{"categories":671},[],{"categories":673},[129],{"categories":675},[],{"categories":677},[],{"categories":679},[126],{"categories":681},[168],{"categories":683},[184],{"categories":685},[129],{"categories":687},[],{"categories":689},[120],{"categories":691},[],{"categories":693},[147],{"categories":695},[126,441],{"categories":697},[147],{"categories":699},[126],{"categories":701},[123],{"categories":703},[126],{"categories":705},[],{"categories":707},[123],{"categories":709},[],{"categories":711},[90],{"categories":713},[168],{"categories":715},[147],{"categories":717},[171],{"categories":719},[120],{"categories":721},[126],{"categories":723},[90],{"categories":725},[],{"categories":727},[],{"categories":729},[132],{"categories":731},[],{"categories":733},[126],{"categories":735},[],{"categories":737},[168],{"categories":739},[168],{"categories":741},[168],{"categories":743},[],{"categories":745},[],{"categories":747},[147],{"categories":749},[129],{"categories":751},[126],{"categories":753},[126],{"categories":755},[126],{"categories":757},[123],{"categories":759},[126],{"categories":761},[],{"categories":763},[90],{"categories":765},[90],{"categories":767},[123],{"categories":769},[],{"categories":771},[126],{"categories":773},[126],{"categories":775},[123],{"categories":777},[147],{"categories":779},[184],{"categories":781},[129],{"categories":783},[],{"categories":785},[168],{"categories":787},[],{"categories":789},[126],{"categories":791},[],{"categories":793},[123],{"categories":795},[129],{"categories":797},[],{"categories":799},[441],{"categories":801},[171],{"categories":803},[90],{"categories":805},[184],{"categories":807},[90],{"categories":809},[129],{"categories":811},[],{"categories":813},[],{"categories":815},[129],{"categories":817},[120],{"categories":819},[129],{"categories":821},[132],{"categories":823},[123],{"categories":825},[],{"categories":827},[126],{"categories":829},[132],{"categories":831},[126],{"categories":833},[126],{"categories":835},[184],{"categories":837},[168],{"categories":839},[129],{"categories":841},[],{"categories":843},[],{"categories":845},[441],{"categories":847},[90],{"categories":849},[],{"categories":851},[129],{"categories":853},[126],{"categories":855},[168,126],{"categories":857},[120],{"categories":859},[],{"categories":861},[126],{"categories":863},[120],{"categories":865},[168],{"categories":867},[129],{"categories":869},[90],{"categories":871},[],{"categories":873},[126],{"categories":875},[],{"categories":877},[120],{"categories":879},[],{"categories":881},[129],{"categories":883},[132],{"categories":885},[126],{"categories":887},[126],{"categories":889},[168],{"categories":891},[129],{"categories":893},[441],{"categories":895},[168],{"categories":897},[129],{"categories":899},[126],{"categories":901},[126],{"categories":903},[126],{"categories":905},[147],{"categories":907},[],{"categories":909},[132],{"categories":911},[129],{"categories":913},[168],{"categories":915},[129],{"categories":917},[90],{"categories":919},[168],{"categories":921},[129],{"categories":923},[147],{"categories":925},[],{"categories":927},[126],{"categories":929},[168],{"categories":931},[126],{"categories":933},[120],{"categories":935},[147],{"categories":937},[126],{"categories":939},[184],{"categories":941},[126],{"categories":943},[126],{"categories":945},[129],{"categories":947},[129],{"categories":949},[126],{"categories":951},[129],{"categories":953},[168],{"categories":955},[126],{"categories":957},[],{"categories":959},[],{"categories":961},[90],{"categories":963},[],{"categories":965},[120],{"categories":967},[441],{"categories":969},[],{"categories":971},[120],{"categories":973},[123],{"categories":975},[184],{"categories":977},[],{"categories":979},[123],{"categories":981},[],{"categories":983},[],{"categories":985},[],{"categories":987},[],{"categories":989},[],{"categories":991},[126],{"categories":993},[129],{"categories":995},[441],{"categories":997},[120],{"categories":999},[126],{"categories":1001},[90],{"categories":1003},[132],{"categories":1005},[126],{"categories":1007},[184],{"categories":1009},[126],{"categories":1011},[126],{"categories":1013},[126],{"categories":1015},[126,120],{"categories":1017},[90],{"categories":1019},[90],{"categories":1021},[168],{"categories":1023},[126],{"categories":1025},[],{"categories":1027},[],{"categories":1029},[],{"categories":1031},[90],{"categories":1033},[171],{"categories":1035},[147],{"categories":1037},[168],{"categories":1039},[],{"categories":1041},[126],{"categories":1043},[126],{"categories":1045},[],{"categories":1047},[],{"categories":1049},[129],{"categories":1051},[126],{"categories":1053},[123],{"categories":1055},[],{"categories":1057},[120],{"categories":1059},[126],{"categories":1061},[120],{"categories":1063},[126],{"categories":1065},[90],{"categories":1067},[184],{"categories":1069},[126,168],{"categories":1071},[147],{"categories":1073},[168],{"categories":1075},[],{"categories":1077},[441],{"categories":1079},[168],{"categories":1081},[129],{"categories":1083},[],{"categories":1085},[],{"categories":1087},[],{"categories":1089},[],{"categories":1091},[90],{"categories":1093},[129],{"categories":1095},[129],{"categories":1097},[441],{"categories":1099},[126],{"categories":1101},[126],{"categories":1103},[126],{"categories":1105},[],{"categories":1107},[168],{"categories":1109},[],{"categories":1111},[],{"categories":1113},[129],{"categories":1115},[],{"categories":1117},[],{"categories":1119},[184],{"categories":1121},[184],{"categories":1123},[129],{"categories":1125},[],{"categories":1127},[126],{"categories":1129},[126],{"categories":1131},[90],{"categories":1133},[168],{"categories":1135},[168],{"categories":1137},[129],{"categories":1139},[120],{"categories":1141},[126],{"categories":1143},[168],{"categories":1145},[168],{"categories":1147},[129],{"categories":1149},[129],{"categories":1151},[126],{"categories":1153},[],{"categories":1155},[],{"categories":1157},[126],{"categories":1159},[129],{"categories":1161},[147],{"categories":1163},[90],{"categories":1165},[120],{"categories":1167},[126],{"categories":1169},[],{"categories":1171},[129],{"categories":1173},[129],{"categories":1175},[],{"categories":1177},[120],{"categories":1179},[126],{"categories":1181},[120],{"categories":1183},[120],{"categories":1185},[],{"categories":1187},[],{"categories":1189},[129],{"categories":1191},[129],{"categories":1193},[126],{"categories":1195},[126],{"categories":1197},[147],{"categories":1199},[171],{"categories":1201},[132],{"categories":1203},[147],{"categories":1205},[168],{"categories":1207},[],{"categories":1209},[147],{"categories":1211},[],{"categories":1213},[],{"categories":1215},[],{"categories":1217},[],{"categories":1219},[90],{"categories":1221},[171],{"categories":1223},[],{"categories":1225},[126],{"categories":1227},[126],{"categories":1229},[171],{"categories":1231},[90],{"categories":1233},[],{"categories":1235},[],{"categories":1237},[129],{"categories":1239},[147],{"categories":1241},[147],{"categories":1243},[129],{"categories":1245},[120],{"categories":1247},[126,441],{"categories":1249},[],{"categories":1251},[168],{"categories":1253},[120],{"categories":1255},[129],{"categories":1257},[168],{"categories":1259},[],{"categories":1261},[129],{"categories":1263},[129],{"categories":1265},[126],{"categories":1267},[184],{"categories":1269},[90],{"categories":1271},[168],{"categories":1273},[],{"categories":1275},[129],{"categories":1277},[126],{"categories":1279},[129],{"categories":1281},[129],{"categories":1283},[129],{"categories":1285},[184],{"categories":1287},[129],{"categories":1289},[126],{"categories":1291},[],{"categories":1293},[184],{"categories":1295},[147],{"categories":1297},[129],{"categories":1299},[],{"categories":1301},[],{"categories":1303},[126],{"categories":1305},[129],{"categories":1307},[147],{"categories":1309},[129],{"categories":1311},[],{"categories":1313},[],{"categories":1315},[],{"categories":1317},[129],{"categories":1319},[],{"categories":1321},[],{"categories":1323},[171],{"categories":1325},[126],{"categories":1327},[171],{"categories":1329},[147],{"categories":1331},[126],{"categories":1333},[126],{"categories":1335},[129],{"categories":1337},[126],{"categories":1339},[],{"categories":1341},[],{"categories":1343},[441],{"categories":1345},[],{"categories":1347},[],{"categories":1349},[120],{"categories":1351},[],{"categories":1353},[],{"categories":1355},[],{"categories":1357},[],{"categories":1359},[90],{"categories":1361},[147],{"categories":1363},[184],{"categories":1365},[123],{"categories":1367},[126],{"categories":1369},[126],{"categories":1371},[123],{"categories":1373},[],{"categories":1375},[168],{"categories":1377},[129],{"categories":1379},[123],{"categories":1381},[126],{"categories":1383},[126],{"categories":1385},[120],{"categories":1387},[],{"categories":1389},[120],{"categories":1391},[126],{"categories":1393},[184],{"categories":1395},[129],{"categories":1397},[147],{"categories":1399},[123],{"categories":1401},[126],{"categories":1403},[129],{"categories":1405},[],{"categories":1407},[126],{"categories":1409},[120],{"categories":1411},[126],{"categories":1413},[],{"categories":1415},[147],{"categories":1417},[126],{"categories":1419},[],{"categories":1421},[123],{"categories":1423},[126],{"categories":1425},[],{"categories":1427},[],{"categories":1429},[],{"categories":1431},[126],{"categories":1433},[],{"categories":1435},[441],{"categories":1437},[126],{"categories":1439},[],{"categories":1441},[126],{"categories":1443},[126],{"categories":1445},[126],{"categories":1447},[126,441],{"categories":1449},[126],{"categories":1451},[126],{"categories":1453},[168],{"categories":1455},[129],{"categories":1457},[],{"categories":1459},[129],{"categories":1461},[126],{"categories":1463},[126],{"categories":1465},[126],{"categories":1467},[120],{"categories":1469},[120],{"categories":1471},[90],{"categories":1473},[168],{"categories":1475},[129],{"categories":1477},[],{"categories":1479},[126],{"categories":1481},[147],{"categories":1483},[126],{"categories":1485},[123],{"categories":1487},[],{"categories":1489},[441],{"categories":1491},[168],{"categories":1493},[168],{"categories":1495},[129],{"categories":1497},[147],{"categories":1499},[129],{"categories":1501},[126],{"categories":1503},[],{"categories":1505},[126],{"categories":1507},[],{"categories":1509},[],{"categories":1511},[126],{"categories":1513},[126],{"categories":1515},[126],{"categories":1517},[129],{"categories":1519},[126],{"categories":1521},[],{"categories":1523},[171],{"categories":1525},[129],{"categories":1527},[],{"categories":1529},[],{"categories":1531},[126],{"categories":1533},[147],{"categories":1535},[],{"categories":1537},[168],{"categories":1539},[441],{"categories":1541},[147],{"categories":1543},[90],{"categories":1545},[90],{"categories":1547},[147],{"categories":1549},[147],{"categories":1551},[441],{"categories":1553},[],{"categories":1555},[147],{"categories":1557},[126],{"categories":1559},[120],{"categories":1561},[147],{"categories":1563},[],{"categories":1565},[171],{"categories":1567},[147],{"categories":1569},[90],{"categories":1571},[147],{"categories":1573},[441],{"categories":1575},[126],{"categories":1577},[126],{"categories":1579},[],{"categories":1581},[123],{"categories":1583},[],{"categories":1585},[],{"categories":1587},[126],{"categories":1589},[126],{"categories":1591},[126],{"categories":1593},[126],{"categories":1595},[],{"categories":1597},[171],{"categories":1599},[120],{"categories":1601},[],{"categories":1603},[126],{"categories":1605},[126],{"categories":1607},[441],{"categories":1609},[441],{"categories":1611},[],{"categories":1613},[129],{"categories":1615},[147],{"categories":1617},[147],{"categories":1619},[126],{"categories":1621},[129],{"categories":1623},[],{"categories":1625},[168],{"categories":1627},[126],{"categories":1629},[126],{"categories":1631},[],{"categories":1633},[],{"categories":1635},[441],{"categories":1637},[126],{"categories":1639},[90],{"categories":1641},[123],{"categories":1643},[126],{"categories":1645},[],{"categories":1647},[129],{"categories":1649},[120],{"categories":1651},[120],{"categories":1653},[],{"categories":1655},[126],{"categories":1657},[168],{"categories":1659},[129],{"categories":1661},[],{"categories":1663},[126],{"categories":1665},[126],{"categories":1667},[129],{"categories":1669},[],{"categories":1671},[129],{"categories":1673},[90],{"categories":1675},[],{"categories":1677},[126],{"categories":1679},[],{"categories":1681},[126],{"categories":1683},[],{"categories":1685},[126],{"categories":1687},[126],{"categories":1689},[],{"categories":1691},[126],{"categories":1693},[147],{"categories":1695},[126],{"categories":1697},[126],{"categories":1699},[120],{"categories":1701},[126],{"categories":1703},[147],{"categories":1705},[129],{"categories":1707},[],{"categories":1709},[126],{"categories":1711},[184],{"categories":1713},[],{"categories":1715},[],{"categories":1717},[],{"categories":1719},[120],{"categories":1721},[147],{"categories":1723},[129],{"categories":1725},[126],{"categories":1727},[168],{"categories":1729},[129],{"categories":1731},[],{"categories":1733},[129],{"categories":1735},[],{"categories":1737},[126],{"categories":1739},[129],{"categories":1741},[126],{"categories":1743},[],{"categories":1745},[126],{"categories":1747},[126],{"categories":1749},[147],{"categories":1751},[168],{"categories":1753},[129],{"categories":1755},[168],{"categories":1757},[123],{"categories":1759},[],{"categories":1761},[],{"categories":1763},[126],{"categories":1765},[120],{"categories":1767},[147],{"categories":1769},[],{"categories":1771},[],{"categories":1773},[90],{"categories":1775},[168],{"categories":1777},[],{"categories":1779},[126],{"categories":1781},[],{"categories":1783},[184],{"categories":1785},[126],{"categories":1787},[441],{"categories":1789},[90],{"categories":1791},[],{"categories":1793},[129],{"categories":1795},[126],{"categories":1797},[129],{"categories":1799},[129],{"categories":1801},[126],{"categories":1803},[],{"categories":1805},[120],{"categories":1807},[126],{"categories":1809},[123],{"categories":1811},[90],{"categories":1813},[168],{"categories":1815},[],{"categories":1817},[],{"categories":1819},[],{"categories":1821},[129],{"categories":1823},[168],{"categories":1825},[147],{"categories":1827},[126],{"categories":1829},[147],{"categories":1831},[168],{"categories":1833},[],{"categories":1835},[168],{"categories":1837},[147],{"categories":1839},[123],{"categories":1841},[126],{"categories":1843},[147],{"categories":1845},[184],{"categories":1847},[],{"categories":1849},[],{"categories":1851},[171],{"categories":1853},[126,90],{"categories":1855},[147],{"categories":1857},[126],{"categories":1859},[129],{"categories":1861},[129],{"categories":1863},[126],{"categories":1865},[],{"categories":1867},[90],{"categories":1869},[126],{"categories":1871},[171],{"categories":1873},[129],{"categories":1875},[184],{"categories":1877},[441],{"categories":1879},[],{"categories":1881},[120],{"categories":1883},[129],{"categories":1885},[129],{"categories":1887},[90],{"categories":1889},[126],{"categories":1891},[126],{"categories":1893},[],{"categories":1895},[],{"categories":1897},[],{"categories":1899},[441],{"categories":1901},[147],{"categories":1903},[126],{"categories":1905},[126],{"categories":1907},[126],{"categories":1909},[],{"categories":1911},[171],{"categories":1913},[123],{"categories":1915},[],{"categories":1917},[129],{"categories":1919},[441],{"categories":1921},[],{"categories":1923},[168],{"categories":1925},[168],{"categories":1927},[],{"categories":1929},[90],{"categories":1931},[168],{"categories":1933},[126],{"categories":1935},[],{"categories":1937},[147],{"categories":1939},[126],{"categories":1941},[168],{"categories":1943},[129],{"categories":1945},[147],{"categories":1947},[],{"categories":1949},[129],{"categories":1951},[168],{"categories":1953},[126],{"categories":1955},[],{"categories":1957},[126],{"categories":1959},[126],{"categories":1961},[441],{"categories":1963},[147],{"categories":1965},[171],{"categories":1967},[171],{"categories":1969},[],{"categories":1971},[],{"categories":1973},[],{"categories":1975},[129],{"categories":1977},[90],{"categories":1979},[90],{"categories":1981},[],{"categories":1983},[],{"categories":1985},[126],{"categories":1987},[],{"categories":1989},[129],{"categories":1991},[126],{"categories":1993},[],{"categories":1995},[126],{"categories":1997},[123],{"categories":1999},[126],{"categories":2001},[184],{"categories":2003},[129],{"categories":2005},[126],{"categories":2007},[90],{"categories":2009},[147],{"categories":2011},[129],{"categories":2013},[],{"categories":2015},[147],{"categories":2017},[129],{"categories":2019},[129],{"categories":2021},[],{"categories":2023},[123],{"categories":2025},[129],{"categories":2027},[],{"categories":2029},[126],{"categories":2031},[120],{"categories":2033},[147],{"categories":2035},[441],{"categories":2037},[129],{"categories":2039},[129],{"categories":2041},[120],{"categories":2043},[126],{"categories":2045},[],{"categories":2047},[],{"categories":2049},[168],{"categories":2051},[126,123],{"categories":2053},[],{"categories":2055},[120],{"categories":2057},[171],{"categories":2059},[126],{"categories":2061},[90],{"categories":2063},[126],{"categories":2065},[129],{"categories":2067},[126],{"categories":2069},[126],{"categories":2071},[147],{"categories":2073},[129],{"categories":2075},[],{"categories":2077},[],{"categories":2079},[129],{"categories":2081},[126],{"categories":2083},[441],{"categories":2085},[],{"categories":2087},[126],{"categories":2089},[129],{"categories":2091},[],{"categories":2093},[126],{"categories":2095},[184],{"categories":2097},[171],{"categories":2099},[129],{"categories":2101},[126],{"categories":2103},[441],{"categories":2105},[],{"categories":2107},[126],{"categories":2109},[184],{"categories":2111},[168],{"categories":2113},[126],{"categories":2115},[],{"categories":2117},[184],{"categories":2119},[147],{"categories":2121},[126],{"categories":2123},[126],{"categories":2125},[120],{"categories":2127},[],{"categories":2129},[],{"categories":2131},[168],{"categories":2133},[126],{"categories":2135},[171],{"categories":2137},[184],{"categories":2139},[184],{"categories":2141},[147],{"categories":2143},[],{"categories":2145},[],{"categories":2147},[126],{"categories":2149},[],{"categories":2151},[126,90],{"categories":2153},[147],{"categories":2155},[129],{"categories":2157},[90],{"categories":2159},[126],{"categories":2161},[120],{"categories":2163},[],{"categories":2165},[],{"categories":2167},[120],{"categories":2169},[184],{"categories":2171},[126],{"categories":2173},[],{"categories":2175},[168,126],{"categories":2177},[441],{"categories":2179},[120],{"categories":2181},[],{"categories":2183},[123],{"categories":2185},[123],{"categories":2187},[126],{"categories":2189},[90],{"categories":2191},[129],{"categories":2193},[147],{"categories":2195},[184],{"categories":2197},[168],{"categories":2199},[126],{"categories":2201},[126],{"categories":2203},[126],{"categories":2205},[120],{"categories":2207},[126],{"categories":2209},[129],{"categories":2211},[147],{"categories":2213},[],{"categories":2215},[],{"categories":2217},[171],{"categories":2219},[90],{"categories":2221},[126],{"categories":2223},[168],{"categories":2225},[171],{"categories":2227},[126],{"categories":2229},[126],{"categories":2231},[129],{"categories":2233},[129],{"categories":2235},[126,123],{"categories":2237},[],{"categories":2239},[168],{"categories":2241},[],{"categories":2243},[126],{"categories":2245},[147],{"categories":2247},[120],{"categories":2249},[120],{"categories":2251},[129],{"categories":2253},[126],{"categories":2255},[123],{"categories":2257},[90],{"categories":2259},[184],{"categories":2261},[],{"categories":2263},[147],{"categories":2265},[126],{"categories":2267},[126],{"categories":2269},[147],{"categories":2271},[90],{"categories":2273},[126],{"categories":2275},[129],{"categories":2277},[147],{"categories":2279},[126],{"categories":2281},[168],{"categories":2283},[126],{"categories":2285},[126],{"categories":2287},[441],{"categories":2289},[132],{"categories":2291},[129],{"categories":2293},[126],{"categories":2295},[147],{"categories":2297},[129],{"categories":2299},[184],{"categories":2301},[126],{"categories":2303},[],{"categories":2305},[126],{"categories":2307},[],{"categories":2309},[],{"categories":2311},[],{"categories":2313},[123],{"categories":2315},[126],{"categories":2317},[129],{"categories":2319},[147],{"categories":2321},[147],{"categories":2323},[147],{"categories":2325},[147],{"categories":2327},[],{"categories":2329},[120],{"categories":2331},[129],{"categories":2333},[147],{"categories":2335},[120],{"categories":2337},[129],{"categories":2339},[126],{"categories":2341},[126,129],{"categories":2343},[129],{"categories":2345},[441],{"categories":2347},[147],{"categories":2349},[147],{"categories":2351},[129],{"categories":2353},[126],{"categories":2355},[],{"categories":2357},[147],{"categories":2359},[184],{"categories":2361},[120],{"categories":2363},[126],{"categories":2365},[126],{"categories":2367},[],{"categories":2369},[90],{"categories":2371},[],{"categories":2373},[120],{"categories":2375},[129],{"categories":2377},[147],{"categories":2379},[126],{"categories":2381},[147],{"categories":2383},[120],{"categories":2385},[147],{"categories":2387},[147],{"categories":2389},[],{"categories":2391},[123],{"categories":2393},[129],{"categories":2395},[147],{"categories":2397},[147],{"categories":2399},[147],{"categories":2401},[147],{"categories":2403},[147],{"categories":2405},[147],{"categories":2407},[147],{"categories":2409},[147],{"categories":2411},[147],{"categories":2413},[147],{"categories":2415},[171],{"categories":2417},[120],{"categories":2419},[126],{"categories":2421},[126],{"categories":2423},[],{"categories":2425},[126,120],{"categories":2427},[],{"categories":2429},[129],{"categories":2431},[147],{"categories":2433},[129],{"categories":2435},[126],{"categories":2437},[126],{"categories":2439},[126],{"categories":2441},[126],{"categories":2443},[126],{"categories":2445},[129],{"categories":2447},[123],{"categories":2449},[168],{"categories":2451},[147],{"categories":2453},[126],{"categories":2455},[],{"categories":2457},[],{"categories":2459},[129],{"categories":2461},[168],{"categories":2463},[126],{"categories":2465},[],{"categories":2467},[],{"categories":2469},[184],{"categories":2471},[126],{"categories":2473},[],{"categories":2475},[],{"categories":2477},[120],{"categories":2479},[123],{"categories":2481},[126],{"categories":2483},[123],{"categories":2485},[168],{"categories":2487},[],{"categories":2489},[147],{"categories":2491},[],{"categories":2493},[168],{"categories":2495},[126],{"categories":2497},[184],{"categories":2499},[],{"categories":2501},[184],{"categories":2503},[],{"categories":2505},[],{"categories":2507},[129],{"categories":2509},[],{"categories":2511},[123],{"categories":2513},[120],{"categories":2515},[168],{"categories":2517},[90],{"categories":2519},[],{"categories":2521},[],{"categories":2523},[126],{"categories":2525},[120],{"categories":2527},[184],{"categories":2529},[],{"categories":2531},[129],{"categories":2533},[129],{"categories":2535},[147],{"categories":2537},[126],{"categories":2539},[129],{"categories":2541},[126],{"categories":2543},[129],{"categories":2545},[126],{"categories":2547},[132],{"categories":2549},[147],{"categories":2551},[],{"categories":2553},[184],{"categories":2555},[90],{"categories":2557},[129],{"categories":2559},[],{"categories":2561},[126],{"categories":2563},[129],{"categories":2565},[123],{"categories":2567},[120],{"categories":2569},[126],{"categories":2571},[168],{"categories":2573},[90],{"categories":2575},[90],{"categories":2577},[126],{"categories":2579},[171],{"categories":2581},[126],{"categories":2583},[129],{"categories":2585},[123],{"categories":2587},[129],{"categories":2589},[126],{"categories":2591},[126],{"categories":2593},[129],{"categories":2595},[147],{"categories":2597},[],{"categories":2599},[120],{"categories":2601},[126],{"categories":2603},[129],{"categories":2605},[126],{"categories":2607},[126],{"categories":2609},[],{"categories":2611},[168],{"categories":2613},[123],{"categories":2615},[147],{"categories":2617},[126],{"categories":2619},[126],{"categories":2621},[168],{"categories":2623},[184],{"categories":2625},[171],{"categories":2627},[126],{"categories":2629},[147],{"categories":2631},[126],{"categories":2633},[129],{"categories":2635},[441],{"categories":2637},[126],{"categories":2639},[129],{"categories":2641},[171],{"categories":2643},[],{"categories":2645},[129],{"categories":2647},[90],{"categories":2649},[168],{"categories":2651},[126],{"categories":2653},[120],{"categories":2655},[123],{"categories":2657},[90],{"categories":2659},[],{"categories":2661},[129],{"categories":2663},[126],{"categories":2665},[],{"categories":2667},[147],{"categories":2669},[],{"categories":2671},[147],{"categories":2673},[126],{"categories":2675},[129],{"categories":2677},[129],{"categories":2679},[129],{"categories":2681},[],{"categories":2683},[],{"categories":2685},[126],{"categories":2687},[126],{"categories":2689},[],{"categories":2691},[168],{"categories":2693},[129],{"categories":2695},[184],{"categories":2697},[120],{"categories":2699},[],{"categories":2701},[],{"categories":2703},[147],{"categories":2705},[90],{"categories":2707},[126],{"categories":2709},[126],{"categories":2711},[126],{"categories":2713},[90],{"categories":2715},[147],{"categories":2717},[168],{"categories":2719},[126],{"categories":2721},[126],{"categories":2723},[126],{"categories":2725},[147],{"categories":2727},[126],{"categories":2729},[147],{"categories":2731},[129],{"categories":2733},[129],{"categories":2735},[90],{"categories":2737},[129],{"categories":2739},[126],{"categories":2741},[90],{"categories":2743},[168],{"categories":2745},[],{"categories":2747},[129],{"categories":2749},[],{"categories":2751},[],{"categories":2753},[],{"categories":2755},[123],{"categories":2757},[126],{"categories":2759},[129],{"categories":2761},[120],{"categories":2763},[129],{"categories":2765},[184],{"categories":2767},[],{"categories":2769},[129],{"categories":2771},[],{"categories":2773},[120],{"categories":2775},[129],{"categories":2777},[],{"categories":2779},[129],{"categories":2781},[126],{"categories":2783},[147],{"categories":2785},[126],{"categories":2787},[129],{"categories":2789},[147],{"categories":2791},[129],{"categories":2793},[90],{"categories":2795},[168],{"categories":2797},[120],{"categories":2799},[],{"categories":2801},[129],{"categories":2803},[168],{"categories":2805},[441],{"categories":2807},[147],{"categories":2809},[126],{"categories":2811},[168],{"categories":2813},[120],{"categories":2815},[],{"categories":2817},[129],{"categories":2819},[129],{"categories":2821},[126],{"categories":2823},[],{"categories":2825},[129],{"categories":2827},[132],{"categories":2829},[147],{"categories":2831},[129],{"categories":2833},[123],{"categories":2835},[],{"categories":2837},[126],{"categories":2839},[132],{"categories":2841},[126],{"categories":2843},[129],{"categories":2845},[147],{"categories":2847},[120],{"categories":2849},[441],{"categories":2851},[126],{"categories":2853},[126],{"categories":2855},[126],{"categories":2857},[147],{"categories":2859},[123],{"categories":2861},[126],{"categories":2863},[168],{"categories":2865},[147],{"categories":2867},[441],{"categories":2869},[126],{"categories":2871},[],{"categories":2873},[],{"categories":2875},[441],{"categories":2877},[171],{"categories":2879},[129],{"categories":2881},[129],{"categories":2883},[147],{"categories":2885},[126],{"categories":2887},[120],{"categories":2889},[168],{"categories":2891},[129],{"categories":2893},[126],{"categories":2895},[184],{"categories":2897},[126],{"categories":2899},[129],{"categories":2901},[],{"categories":2903},[126],{"categories":2905},[126],{"categories":2907},[147],{"categories":2909},[120],{"categories":2911},[],{"categories":2913},[126],{"categories":2915},[126],{"categories":2917},[90],{"categories":2919},[168],{"categories":2921},[126,129],{"categories":2923},[184,123],{"categories":2925},[126],{"categories":2927},[],{"categories":2929},[129],{"categories":2931},[],{"categories":2933},[90],{"categories":2935},[126],{"categories":2937},[147],{"categories":2939},[],{"categories":2941},[129],{"categories":2943},[],{"categories":2945},[168],{"categories":2947},[129],{"categories":2949},[120],{"categories":2951},[129],{"categories":2953},[126],{"categories":2955},[441],{"categories":2957},[184],{"categories":2959},[123],{"categories":2961},[123],{"categories":2963},[120],{"categories":2965},[120],{"categories":2967},[126],{"categories":2969},[129],{"categories":2971},[126],{"categories":2973},[126],{"categories":2975},[120],{"categories":2977},[126],{"categories":2979},[184],{"categories":2981},[147],{"categories":2983},[126],{"categories":2985},[129],{"categories":2987},[126],{"categories":2989},[],{"categories":2991},[90],{"categories":2993},[],{"categories":2995},[129],{"categories":2997},[120],{"categories":2999},[],{"categories":3001},[441],{"categories":3003},[126],{"categories":3005},[],{"categories":3007},[147],{"categories":3009},[129],{"categories":3011},[90],{"categories":3013},[126],{"categories":3015},[129],{"categories":3017},[90],{"categories":3019},[129],{"categories":3021},[147],{"categories":3023},[120],{"categories":3025},[147],{"categories":3027},[90],{"categories":3029},[126],{"categories":3031},[168],{"categories":3033},[126],{"categories":3035},[126],{"categories":3037},[126],{"categories":3039},[126],{"categories":3041},[129],{"categories":3043},[126],{"categories":3045},[129],{"categories":3047},[126],{"categories":3049},[120],{"categories":3051},[126],{"categories":3053},[129],{"categories":3055},[168],{"categories":3057},[120],{"categories":3059},[129],{"categories":3061},[168],{"categories":3063},[],{"categories":3065},[126],{"categories":3067},[126],{"categories":3069},[90],{"categories":3071},[],{"categories":3073},[129],{"categories":3075},[184],{"categories":3077},[126],{"categories":3079},[147],{"categories":3081},[184],{"categories":3083},[129],{"categories":3085},[123],{"categories":3087},[123],{"categories":3089},[126],{"categories":3091},[120],{"categories":3093},[],{"categories":3095},[126],{"categories":3097},[],{"categories":3099},[120],{"categories":3101},[126],{"categories":3103},[129],{"categories":3105},[129],{"categories":3107},[],{"categories":3109},[90],{"categories":3111},[90],{"categories":3113},[184],{"categories":3115},[168],{"categories":3117},[],{"categories":3119},[126],{"categories":3121},[120],{"categories":3123},[126],{"categories":3125},[90],{"categories":3127},[120],{"categories":3129},[147],{"categories":3131},[147],{"categories":3133},[],{"categories":3135},[147],{"categories":3137},[129],{"categories":3139},[168],{"categories":3141},[171],{"categories":3143},[126],{"categories":3145},[],{"categories":3147},[147],{"categories":3149},[90],{"categories":3151},[123],{"categories":3153},[126],{"categories":3155},[120],{"categories":3157},[441],{"categories":3159},[120],{"categories":3161},[],{"categories":3163},[],{"categories":3165},[147],{"categories":3167},[],{"categories":3169},[129],{"categories":3171},[129],{"categories":3173},[129],{"categories":3175},[],{"categories":3177},[126],{"categories":3179},[],{"categories":3181},[147],{"categories":3183},[120],{"categories":3185},[168],{"categories":3187},[126],{"categories":3189},[147],{"categories":3191},[147],{"categories":3193},[],{"categories":3195},[147],{"categories":3197},[120],{"categories":3199},[126],{"categories":3201},[],{"categories":3203},[129],{"categories":3205},[129],{"categories":3207},[120],{"categories":3209},[],{"categories":3211},[],{"categories":3213},[],{"categories":3215},[168],{"categories":3217},[129],{"categories":3219},[126],{"categories":3221},[],{"categories":3223},[],{"categories":3225},[],{"categories":3227},[168],{"categories":3229},[],{"categories":3231},[120],{"categories":3233},[],{"categories":3235},[],{"categories":3237},[168],{"categories":3239},[126],{"categories":3241},[147],{"categories":3243},[],{"categories":3245},[184],{"categories":3247},[147],{"categories":3249},[184],{"categories":3251},[126],{"categories":3253},[],{"categories":3255},[],{"categories":3257},[129],{"categories":3259},[],{"categories":3261},[],{"categories":3263},[129],{"categories":3265},[126],{"categories":3267},[],{"categories":3269},[129],{"categories":3271},[147],{"categories":3273},[184],{"categories":3275},[171],{"categories":3277},[129],{"categories":3279},[129],{"categories":3281},[],{"categories":3283},[],{"categories":3285},[],{"categories":3287},[147],{"categories":3289},[],{"categories":3291},[],{"categories":3293},[168],{"categories":3295},[120],{"categories":3297},[],{"categories":3299},[123],{"categories":3301},[184],{"categories":3303},[126],{"categories":3305},[90],{"categories":3307},[120],{"categories":3309},[171],{"categories":3311},[123],{"categories":3313},[90],{"categories":3315},[],{"categories":3317},[],{"categories":3319},[129],{"categories":3321},[120],{"categories":3323},[168],{"categories":3325},[120],{"categories":3327},[129],{"categories":3329},[441],{"categories":3331},[129],{"categories":3333},[],{"categories":3335},[126],{"categories":3337},[147],{"categories":3339},[90],{"categories":3341},[],{"categories":3343},[168],{"categories":3345},[147],{"categories":3347},[120],{"categories":3349},[129],{"categories":3351},[126],{"categories":3353},[123],{"categories":3355},[129,441],{"categories":3357},[129],{"categories":3359},[90],{"categories":3361},[126],{"categories":3363},[171],{"categories":3365},[184],{"categories":3367},[129],{"categories":3369},[],{"categories":3371},[129],{"categories":3373},[126],{"categories":3375},[123],{"categories":3377},[],{"categories":3379},[],{"categories":3381},[126],{"categories":3383},[171],{"categories":3385},[126],{"categories":3387},[],{"categories":3389},[147],{"categories":3391},[],{"categories":3393},[147],{"categories":3395},[90],{"categories":3397},[129],{"categories":3399},[126],{"categories":3401},[184],{"categories":3403},[90],{"categories":3405},[],{"categories":3407},[147],{"categories":3409},[126],{"categories":3411},[],{"categories":3413},[126],{"categories":3415},[129],{"categories":3417},[126],{"categories":3419},[129],{"categories":3421},[126],{"categories":3423},[126],{"categories":3425},[126],{"categories":3427},[126],{"categories":3429},[123],{"categories":3431},[],{"categories":3433},[132],{"categories":3435},[147],{"categories":3437},[126],{"categories":3439},[],{"categories":3441},[90],{"categories":3443},[126],{"categories":3445},[126],{"categories":3447},[129],{"categories":3449},[147],{"categories":3451},[126],{"categories":3453},[126],{"categories":3455},[123],{"categories":3457},[129],{"categories":3459},[168],{"categories":3461},[],{"categories":3463},[171],{"categories":3465},[126],{"categories":3467},[],{"categories":3469},[147],{"categories":3471},[184],{"categories":3473},[],{"categories":3475},[],{"categories":3477},[147],{"categories":3479},[147],{"categories":3481},[184],{"categories":3483},[120],{"categories":3485},[129],{"categories":3487},[129],{"categories":3489},[126],{"categories":3491},[123],{"categories":3493},[],{"categories":3495},[],{"categories":3497},[147],{"categories":3499},[171],{"categories":3501},[90],{"categories":3503},[129],{"categories":3505},[168],{"categories":3507},[171],{"categories":3509},[171],{"categories":3511},[],{"categories":3513},[147],{"categories":3515},[126],{"categories":3517},[126],{"categories":3519},[90],{"categories":3521},[],{"categories":3523},[147],{"categories":3525},[147],{"categories":3527},[147],{"categories":3529},[],{"categories":3531},[129],{"categories":3533},[126],{"categories":3535},[],{"categories":3537},[120],{"categories":3539},[123],{"categories":3541},[],{"categories":3543},[126],{"categories":3545},[126],{"categories":3547},[],{"categories":3549},[90],{"categories":3551},[],{"categories":3553},[],{"categories":3555},[],{"categories":3557},[],{"categories":3559},[126],{"categories":3561},[147],{"categories":3563},[],{"categories":3565},[],{"categories":3567},[126],{"categories":3569},[126],{"categories":3571},[126],{"categories":3573},[171],{"categories":3575},[126],{"categories":3577},[171],{"categories":3579},[],{"categories":3581},[171],{"categories":3583},[171],{"categories":3585},[441],{"categories":3587},[129],{"categories":3589},[90],{"categories":3591},[],{"categories":3593},[],{"categories":3595},[171],{"categories":3597},[90],{"categories":3599},[90],{"categories":3601},[90],{"categories":3603},[],{"categories":3605},[120],{"categories":3607},[90],{"categories":3609},[90],{"categories":3611},[120],{"categories":3613},[90],{"categories":3615},[123],{"categories":3617},[90],{"categories":3619},[90],{"categories":3621},[90],{"categories":3623},[171],{"categories":3625},[147],{"categories":3627},[147],{"categories":3629},[126],{"categories":3631},[90],{"categories":3633},[171],{"categories":3635},[441],{"categories":3637},[171],{"categories":3639},[171],{"categories":3641},[171],{"categories":3643},[],{"categories":3645},[123],{"categories":3647},[],{"categories":3649},[441],{"categories":3651},[90],{"categories":3653},[90],{"categories":3655},[90],{"categories":3657},[129],{"categories":3659},[147,123],{"categories":3661},[171],{"categories":3663},[],{"categories":3665},[],{"categories":3667},[171],{"categories":3669},[],{"categories":3671},[171],{"categories":3673},[147],{"categories":3675},[129],{"categories":3677},[],{"categories":3679},[90],{"categories":3681},[126],{"categories":3683},[168],{"categories":3685},[],{"categories":3687},[126],{"categories":3689},[],{"categories":3691},[147],{"categories":3693},[120],{"categories":3695},[171],{"categories":3697},[],{"categories":3699},[90],{"categories":3701},[147],[3703,3810,3868,3992],{"id":3704,"title":3705,"ai":3706,"body":3711,"categories":3783,"created_at":91,"date_modified":91,"description":84,"extension":92,"faq":91,"featured":93,"kicker_label":91,"meta":3784,"navigation":101,"path":3797,"published_at":3798,"question":91,"scraped_at":3799,"seo":3800,"sitemap":3801,"source_id":3802,"source_name":3803,"source_type":108,"source_url":3804,"stem":3805,"tags":3806,"thumbnail_url":91,"tldr":3807,"tweet":91,"unknown_tags":3808,"__hash__":3809},"summaries\u002Fsummaries\u002Fda5bfb294446c261-rust-cuda-kernels-via-direct-ptx-compilation-summary.md","Rust CUDA Kernels via Direct PTX Compilation",{"provider":7,"model":8,"input_tokens":3707,"output_tokens":3708,"processing_time_ms":3709,"cost_usd":3710},9427,1814,17557,0.00276975,{"type":14,"value":3712,"toc":3778},[3713,3717,3737,3744,3747,3751,3754,3757,3760,3764,3767,3775],[17,3714,3716],{"id":3715},"native-cuda-model-in-safe-rust-without-c-or-dsls","Native CUDA Model in Safe Rust Without C++ or DSLs",[22,3718,3719,3720,3723,3724,3728,3729],{},"cuda-oxide targets CUDA's SIMT execution model natively in Rust, closer to C++ ",[63,3721,3722],{},"global"," functions than generic Rust async code. Mark kernels with #",[3725,3726,3727],"span",{},"kernel"," proc macro, which namespaces them as cuda_oxide_kernel_",[3730,3731,3732,3733],"hash",{},"_",[3734,3735,3736],"name",{},"; only these compile to PTX via custom rustc backend, while host code uses standard LLVM. This single-source approach in one .rs file produces host binary + target\u002Fdebug\u002Fvecadd.ptx from cargo oxide build. Device libs compile lazily from .rlib Stable MIR metadata, avoiding upfront compilation of unused code.",[22,3738,3739,3740],{},"Supports match\u002Fif let, generics like fn scale\u003CT: Copy>, intrinsics (shfl_sync, ballot_sync), and thread::index_1d() for unique hardware indices. DisjointSlice",[3741,3742,3743],"t",{}," ensures race-free mutable outputs—get_mut(idx) requires ThreadIndex (opaque usize from threadIdx\u002FblockIdx\u002FblockDim), preventing unsafe shared writes. Host launches use CudaContext, DeviceBuffer, and cuda_launch! macro with LaunchConfig::for_num_elems(1024) auto-sizing grids\u002Fblocks.",[22,3745,3746],{},"Disables rustc JumpThreading on device code to preserve bar.sync convergence—duplication breaks GPU barrier semantics. Marks syncs convergent in LLVM IR to block optimizer reordering.",[17,3748,3750],{"id":3749},"pure-rust-pipeline-except-one-external-tool","Pure-Rust Pipeline Except One External Tool",[22,3752,3753],{},"Intercepts rustc at CodegenBackend::codegen_crate() using rustc_public (Stable MIR) for version-proof internals. Pipeline: Rust → rustc frontend → Stable MIR → dialect-mir (Rust MIR semantics: places\u002Fprojections\u002Frvalues\u002Fterminators) → mem2reg → dialect-llvm → textual .ll → llc (LLVM 21+ NVPTX) → .ptx.",[22,3755,3756],{},"Uses Pliron (Rust-native MLIR-like IR) for dialects: dialect-mir, dialect-llvm (.ll export), dialect-nvvm (NVIDIA intrinsics like thread indexing\u002Fbarriers\u002FTMA). Entire stack builds with cargo—no C++\u002FCMake\u002Ftablegen. Observe full trace: cargo oxide pipeline vecadd prints MIR through PTX.",[22,3758,3759],{},"Complements rust-cuda (Rust ergonomics\u002Fasync on GPU) by focusing on CUDA-native model. vecadd example adds 1024 f32s on GPU, verifies on host: cargo oxide run vecadd outputs ✓ SUCCESS: All 1024 elements correct!",[17,3761,3763],{"id":3762},"linux-only-setup-with-pinned-nightly-and-llvm-21","Linux-Only Setup with Pinned Nightly and LLVM 21",[22,3765,3766],{},"Requires Ubuntu 24.04, Rust nightly-2026-04-03 (rustup toolchain install nightly-2026-04-03; add rust-src\u002Frustc-dev), LLVM 21+ NVPTX (sudo apt install llvm-21; llc-21 --version | grep nvptx), Clang 21 (sudo apt install clang-21 for bindgen\u002Fcuda.h). Pin llc: export CUDA_OXIDE_LLC=\u002Fusr\u002Fbin\u002Fllc-21.",[22,3768,3769,3770,3774],{},"Clone repo or cargo install --git ",[77,3771,3772],{"href":3772,"rel":3773},"https:\u002F\u002Fgithub.com\u002FNVlabs\u002Fcuda-oxide.git",[81]," cargo-oxide. cargo oxide doctor checks deps. Debug: cargo oxide debug vecadd --tui with cuda-gdb on target\u002Fdebug\u002Fvecadd + .ptx.",[22,3776,3777],{},"Next: generics (cargo oxide run generic), host closures (cuda_launch_async! with .await\u002F.sync()), async_mlp, gemm_sol (cta_group::2, index_2d(stride), unsafe for &mut T). Docs: nvlabs.github.io\u002Fcuda-oxide.",{"title":84,"searchDepth":85,"depth":85,"links":3779},[3780,3781,3782],{"id":3715,"depth":85,"text":3716},{"id":3749,"depth":85,"text":3750},{"id":3762,"depth":85,"text":3763},[90],{"content_references":3785,"triage":3794},[3786,3791],{"type":3787,"title":3788,"url":3789,"context":3790},"tool","cuda-oxide","https:\u002F\u002Fgithub.com\u002FNVlabs\u002Fcuda-oxide","mentioned",{"type":3787,"title":3792,"url":3793,"context":3790},"Pliron","https:\u002F\u002Fgithub.com\u002Fvaivaswatha\u002Fpliron",{"relevance":97,"novelty":97,"quality":98,"actionability":85,"composite":3795,"reasoning":3796},3.05,"Category: Software Engineering. The article discusses a new Rust-to-CUDA compilation method, which is relevant to software engineering but lacks direct applicability for building AI-powered products. While it presents some novel insights into GPU kernel development, it does not provide actionable steps or frameworks that the target audience can implement immediately.","\u002Fsummaries\u002Fda5bfb294446c261-rust-cuda-kernels-via-direct-ptx-compilation-summary","2026-05-10 06:01:13","2026-05-10 15:26:51",{"title":3705,"description":84},{"loc":3797},"da5bfb294446c261","MarkTechPost","https:\u002F\u002Fwww.marktechpost.com\u002F2026\u002F05\u002F09\u002Fnvidia-ai-just-released-cuda-oxide-an-experimental-rust-to-cuda-compiler-backend-that-compiles-simt-gpu-kernels-directly-to-ptx\u002F","summaries\u002Fda5bfb294446c261-rust-cuda-kernels-via-direct-ptx-compilation-summary",[113,112],"cuda-oxide lets you write safe Rust SIMT GPU kernels that compile directly to PTX using a custom rustc backend, skipping C++ or DSLs—host\u002Fdevice in one .rs file, with cargo oxide build producing binary + .ptx.",[],"qMaVXANNhQRZRdddd8rExsSTPNNbNg4e1fVzT0fOhxE",{"id":3811,"title":3812,"ai":3813,"body":3818,"categories":3846,"created_at":91,"date_modified":91,"description":84,"extension":92,"faq":91,"featured":93,"kicker_label":91,"meta":3847,"navigation":101,"path":3855,"published_at":3856,"question":91,"scraped_at":3857,"seo":3858,"sitemap":3859,"source_id":3860,"source_name":3861,"source_type":108,"source_url":3862,"stem":3863,"tags":3864,"thumbnail_url":91,"tldr":3865,"tweet":91,"unknown_tags":3866,"__hash__":3867},"summaries\u002Fsummaries\u002Ff817b802265235ad-north-korea-hit-axios-npm-maintainer-exposing-100m-summary.md","North Korea Hit Axios NPM Maintainer, Exposing 100M Downloads",{"provider":7,"model":8,"input_tokens":3814,"output_tokens":3815,"processing_time_ms":3816,"cost_usd":3817},3899,1572,23422,0.00154315,{"type":14,"value":3819,"toc":3841},[3820,3824,3827,3831,3834,3838],[17,3821,3823],{"id":3822},"dependency-compromise-bypasses-target-defenses","Dependency Compromise Bypasses Target Defenses",[22,3825,3826],{},"North Korean actors (tracked as UNC1069) didn't infiltrate OpenAI systems. Instead, they targeted Jason Saayman, maintainer of the Axios npm package with over 100 million weekly downloads across most software build pipelines. A fake job offer via Microsoft Teams on March 31, 2026, led to compromise. Axios powers apps like ChatGPT Desktop, so updating the app pulled in malicious code. Lesson: Audit dependencies rigorously—treat open-source maintainers as your perimeter. Use tools like npm audit, lockfiles, and sigstore for signing to verify package integrity before installs.",[17,3828,3830],{"id":3829},"social-engineering-trumps-technical-exploits","Social Engineering Trumps Technical Exploits",[22,3832,3833],{},"Attack started with a seemingly legitimate Microsoft Teams outreach, buried in OpenAI coverage. Maintainers like Saayman face constant recruitment; hackers exploit this with tailored lures. Defend by: (1) Verify unsolicited contacts via official channels, (2) Use multi-factor auth and hardware keys for repos, (3) Rotate secrets post-contact. Impact: One compromised maintainer poisons millions of environments, amplifying reach far beyond single apps.",[17,3835,3837],{"id":3836},"media-hype-misses-supply-chain-reality","Media Hype Misses Supply Chain Reality",[22,3839,3840],{},"Outlets framed as 'OpenAI breach,' downplaying the dependency angle in paragraph four or less. True exposure: 100 million environments. Builders must prioritize supply chain security—scan pipelines with Dependabot or Snyk, prefer vendored critical deps, and monitor maintainer activity. Trade-off: Full isolation slows dev velocity, but partial (e.g., air-gapped builds for prod) prevents catastrophic updates like Sunday morning app notifications.",{"title":84,"searchDepth":85,"depth":85,"links":3842},[3843,3844,3845],{"id":3822,"depth":85,"text":3823},{"id":3829,"depth":85,"text":3830},{"id":3836,"depth":85,"text":3837},[90],{"content_references":3848,"triage":3851},[3849],{"type":3787,"title":3850,"context":3790},"Axios",{"relevance":3852,"novelty":98,"quality":98,"actionability":98,"composite":3853,"reasoning":3854},5,4.35,"Category: AI & LLMs. The article discusses a significant security breach related to an npm package that affects AI applications, emphasizing the importance of dependency management and supply chain security, which is crucial for product builders. It provides actionable advice on auditing dependencies and securing maintainers, making it highly relevant and practical for the target audience.","\u002Fsummaries\u002Ff817b802265235ad-north-korea-hit-axios-npm-maintainer-exposing-100m-summary","2026-05-04 14:47:50","2026-05-04 16:13:16",{"title":3812,"description":84},{"loc":3855},"f817b802265235ad","Level Up Coding","https:\u002F\u002Flevelup.gitconnected.com\u002Fi-clicked-an-app-update-on-sunday-morning-it-came-from-north-korea-8b1d97a10387?source=rss----5517fd7b58a6---4","summaries\u002Ff817b802265235ad-north-korea-hit-axios-npm-maintainer-exposing-100m-summary",[112,113],"OpenAI detected NK hackers, but they compromised Axios (100M weekly downloads) via fake job offer to maintainer Jason Saayman on Microsoft Teams—not OpenAI directly.",[],"Lsb2GRO9gS8keB1oz_oYt5jqvnSADQKkSgnlMpuuEIo",{"id":3869,"title":3870,"ai":3871,"body":3876,"categories":3968,"created_at":91,"date_modified":91,"description":84,"extension":92,"faq":91,"featured":93,"kicker_label":91,"meta":3969,"navigation":101,"path":3981,"published_at":91,"question":91,"scraped_at":3982,"seo":3983,"sitemap":3984,"source_id":3985,"source_name":107,"source_type":108,"source_url":3986,"stem":3987,"tags":3988,"thumbnail_url":91,"tldr":3989,"tweet":91,"unknown_tags":3990,"__hash__":3991},"summaries\u002Fsummaries\u002F9166f90169a38f6e-5-layer-mvvm-keeps-swiftui-apps-maintainable-summary.md","5-Layer MVVM Keeps SwiftUI Apps Maintainable",{"provider":7,"model":8,"input_tokens":3872,"output_tokens":3873,"processing_time_ms":3874,"cost_usd":3875},5306,1690,8817,0.00139935,{"type":14,"value":3877,"toc":3963},[3878,3882,3917,3920,3924,3949,3952,3956],[17,3879,3881],{"id":3880},"layered-mvvm-separates-concerns-for-scalability","Layered MVVM Separates Concerns for Scalability",[22,3883,3884,3885,3888,3889,3892,3893,3896,3897,3900,3901,3904,3905,3908,3909,3912,3913,3916],{},"Build SwiftUI apps using a 'full layer cake' MVVM with five distinct layers to prevent Views from handling data or logic, resulting in boring, maintainable code. Models define pure data structures like ",[26,3886,3887],{},"Task"," (with title, notes, priority, category, due date, completion status), ",[26,3890,3891],{},"SubTask",", ",[26,3894,3895],{},"TaskPriority"," (Low\u002FMedium\u002FHigh), and ",[26,3898,3899],{},"TaskCategory","—no UI or persistence code. Repositories abstract storage via protocols like ",[26,3902,3903],{},"TaskRepositoryProtocol","; ",[26,3906,3907],{},"TaskRepository"," uses SwiftData's ",[26,3910,3911],{},"ModelContext"," but hides it from callers. Services handle cross-cutting utilities: date checks (e.g., 'is this today?'), greeting generation, formatting, settings, and notifications, avoiding bloated ViewModels. ViewModels (",[26,3914,3915],{},"@Observable",") manage screen state, fetch via repositories, process with services, and expose UI-ready data\u002Factions. Views render only, calling ViewModel methods without business rules.",[22,3918,3919],{},"This structure scales by keeping each layer single-responsibility: Views stay declarative, ViewModels testable, and data\u002Fpersistence swappable.",[17,3921,3923],{"id":3922},"dependency-injection-and-data-flow-enable-testing","Dependency Injection and Data Flow Enable Testing",[22,3925,3926,3927,3930,3931,3934,3935,3938,3939,3941,3942,3944,3945,3948],{},"Inject repositories and services at app launch via ",[26,3928,3929],{},"@Environment"," or root views—ViewModels never instantiate dependencies. Data flows unidirectionally: user actions trigger ViewModel methods (e.g., ",[26,3932,3933],{},"toggleComplete(task)","), which call ",[26,3936,3937],{},"repository.toggleComplete(task)"," updating ",[26,3940,3911],{},", then refresh observable state for Views. Protocols like ",[26,3943,3903],{}," allow faking for unit tests: swap ",[26,3946,3947],{},"FakeTaskRepository"," to test ViewModels without SwiftData, UI, or real persistence, verifying state changes and actions in isolation.",[22,3950,3951],{},"Trade-off: Adds upfront boilerplate but prevents God objects and eases refactoring as apps grow.",[17,3953,3955],{"id":3954},"demo-app-features-validate-architecture","Demo App Features Validate Architecture",[22,3957,3958,3959,3962],{},"The todo app showcases layers across screens. Today view displays due-today tasks with progress ring and personalized greeting (via Services). All Tasks lists with filters (All\u002FActive\u002FCompleted, by category) loaded by ViewModel. Add Task form sets priority\u002Fcategory\u002Fdue date\u002Ftime\u002Fsubtasks. Search queries tasks by name, showing matches with details. Settings manages profile, default priority, theme (System\u002FLight\u002FDark), notifications—all persisted via repository. UI uses Liquid Glass effects for polish. Run by opening ",[26,3960,3961],{},"IOSMvvCApp.xcodeproj"," in Xcode; MIT licensed.",{"title":84,"searchDepth":85,"depth":85,"links":3964},[3965,3966,3967],{"id":3880,"depth":85,"text":3881},{"id":3922,"depth":85,"text":3923},{"id":3954,"depth":85,"text":3955},[90],{"content_references":3970,"triage":3978},[3971],{"type":3972,"title":3973,"author":3974,"publisher":3975,"url":3976,"context":3977},"other","MVVM in SwiftUI: Build an iOS App That Stays Organized as It Grows","sanjaynelagadde1992","Medium","https:\u002F\u002Fmedium.com\u002F@sanjaynelagadde1992\u002Fmvvm-in-swiftui-build-an-ios-app-that-stays-organized-as-it-grows-a16e64d9eb3a","recommended",{"relevance":98,"novelty":97,"quality":98,"actionability":98,"composite":3979,"reasoning":3980},3.8,"Category: Design & Frontend. The article provides a structured approach to implementing MVVM in SwiftUI, addressing the audience's need for maintainable code and scalability, which is a common pain point for developers. It offers specific examples of how to structure code and implement dependency injection, making it actionable for developers looking to improve their app architecture.","\u002Fsummaries\u002F9166f90169a38f6e-5-layer-mvvm-keeps-swiftui-apps-maintainable-summary","2026-04-16 02:56:11",{"title":3870,"description":84},{"loc":3981},"9166f90169a38f6e","https:\u002F\u002Fgithub.com\u002Fsanjaynela\u002FIOSMvvCApp","summaries\u002F9166f90169a38f6e-5-layer-mvvm-keeps-swiftui-apps-maintainable-summary",[113,111],"Implement MVVM as five layers—Models, Repositories, Services, ViewModels, Views—to isolate UI from data, logic, and persistence, enabling dependency injection and isolated ViewModel testing.",[],"P2RjZndIh2s04qnEiZcXtKRJ8CO0tytKe3mwjvwk198",{"id":3993,"title":3994,"ai":3995,"body":4000,"categories":4101,"created_at":91,"date_modified":91,"description":84,"extension":92,"faq":91,"featured":93,"kicker_label":91,"meta":4102,"navigation":101,"path":4113,"published_at":4114,"question":91,"scraped_at":4115,"seo":4116,"sitemap":4117,"source_id":4118,"source_name":4119,"source_type":108,"source_url":4120,"stem":4121,"tags":4122,"thumbnail_url":91,"tldr":4124,"tweet":91,"unknown_tags":4125,"__hash__":4126},"summaries\u002Fsummaries\u002Fc116726456b33e2b-tanstack-server-components-opt-in-granularity-beat-summary.md","TanStack Server Components: Opt-In Granularity Beats Next.js",{"provider":7,"model":8,"input_tokens":3996,"output_tokens":3997,"processing_time_ms":3998,"cost_usd":3999},7116,1537,11991,0.00216905,{"type":14,"value":4001,"toc":4096},[4002,4006,4021,4028,4032,4043,4046,4050,4053,4093],[17,4003,4005],{"id":4004},"opt-in-server-rendering-via-server-functions","Opt-In Server Rendering via Server Functions",[22,4007,4008,4009,4012,4013,4016,4017,4020],{},"Render React components on the server explicitly by wrapping them in ",[26,4010,4011],{},"renderServerComponent"," inside a server function, then fetch like JSON data. This runs server-only code (e.g., ",[26,4014,4015],{},"os.hostname()",", env vars) without changing your client-first app structure. Pass computed values as props to keep components pure and reusable on client or server. In a TanStack Start route loader, await the server function and use ",[26,4018,4019],{},"loaderData"," to render: the boundary stays clear since server logic lives solely in the function. Replace server components with JSON fetches seamlessly—no framework overhaul required, unlike Next.js's server-first tree where 'use client' opts out interactivity.",[22,4022,4023,4024,4027],{},"For multiple components, use ",[26,4025,4026],{},"Promise.all"," in one server function or return promises directly for streaming. Client-side, wrap in Suspense for skeletons: slow components load independently without blocking the page.",[17,4029,4031],{"id":4030},"composite-components-eliminate-server-controlled-client-trees","Composite Components Eliminate Server-Controlled Client Trees",[22,4033,4034,4035,4038,4039,4042],{},"Avoid nesting 'use client' components inside server renders, which muddies boundaries (e.g., tracing counter logic requires jumping files). Instead, return ",[26,4036,4037],{},"createCompositeComponent"," from server functions, defining slots for client content. Fetch the source in loaders, then render with ",[26,4040,4041],{},"\u003CComposite source={greetingSource}>","—server defines structure and data passthrough, but clients fill slots.",[22,4044,4045],{},"This keeps all client decisions in client code: server sees opaque slots, executes no client functions. Integrates with TanStack Query for caching\u002FCDN simplicity. Result: explicit server\u002Fclient separation, no 'use client' needed for slots.",[17,4047,4049],{"id":4048},"slot-patterns-for-flexible-client-integration","Slot Patterns for Flexible Client Integration",[22,4051,4052],{},"Use three slot types to inject client components without server knowledge of their identity:",[57,4054,4055,4065,4075],{},[60,4056,4057,4060,4061,4064],{},[63,4058,4059],{},"Children slots",": Pass ",[26,4062,4063],{},"{children}"," prop; server forwards anything provided (e.g., counter under greeting).",[60,4066,4067,4070,4071,4074],{},[63,4068,4069],{},"Render props",": Define function props (e.g., ",[26,4072,4073],{},"renderActions?: (postId: string, authorId: string) => ReactNode","). Server calls optionally with data (e.g., above post title); client provides function returning component. Opaque to server—runs client-side, avoids double-fetches (author data passes directly).",[60,4076,4077,4080,4081,4084,4085,4088,4089,4092],{},[63,4078,4079],{},"Component props",": Pass component directly (e.g., ",[26,4082,4083],{},"PostActions: Component\u003C{postId: string, authorId: string}>","). Server renders ",[26,4086,4087],{},"\u003CPostActions {...data} \u002F>"," as placeholder. Swap implementations client-side (e.g., ",[26,4090,4091],{},"FakePostActions"," works identically). Prefer render props if needing data transforms; component props for direct passthrough.",[22,4094,4095],{},"These solve real issues: targeted actions (like\u002Ffollow) without children dumping at bottom, data sharing without client refetching. Server provides data\u002Fslots; client handles rendering—reverses Next.js logic for better DX and modularity.",{"title":84,"searchDepth":85,"depth":85,"links":4097},[4098,4099,4100],{"id":4004,"depth":85,"text":4005},{"id":4030,"depth":85,"text":4031},{"id":4048,"depth":85,"text":4049},[90],{"content_references":4103,"triage":4111},[4104,4107],{"type":3787,"title":4105,"url":4106,"context":3790},"TanStack Start Server Components Docs","https:\u002F\u002Ftanstack.com\u002Fstart\u002Flatest\u002Fdocs\u002Fframework\u002Freact\u002Fguide\u002Fserver-components",{"type":3972,"title":4108,"url":4109,"context":4110},"TanStack React Server Components Announcement","https:\u002F\u002Ftanstack.com\u002Fblog\u002Freact-server-components","cited",{"relevance":98,"novelty":97,"quality":98,"actionability":98,"composite":3979,"reasoning":4112},"Category: Design & Frontend. The article discusses practical techniques for rendering React components on the server, addressing a specific pain point for developers looking to optimize their frontend architecture. It provides actionable insights on using `renderServerComponent` and `createCompositeComponent`, which can be directly applied in building AI-powered products.","\u002Fsummaries\u002Fc116726456b33e2b-tanstack-server-components-opt-in-granularity-beat-summary","2026-04-20 22:30:20","2026-04-21 15:16:40",{"title":3994,"description":84},{"loc":4113},"44549f7a250bdc2f","Better Stack","https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=pWxRvFFUHcY","summaries\u002Fc116726456b33e2b-tanstack-server-components-opt-in-granularity-beat-summary",[111,113,4123],"software-engineering","Use renderServerComponent in server functions to render React components on the server granularly, like fetching JSON. Composite components with slots keep client boundaries clean without 'use client' directives.",[4123],"txEuohnvndBk3yN4LUpj-Ih9qNEyhx3iGFhMQ45h3_o"]