[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"news-article-the-dirty-flag-pattern-explained-with-snake":3,"$f2v3tzw7dti6zg":-1},{"article":4,"engagement":1410,"relatedArticles":1412,"relatedVideo":1399,"tags":1438},{"content":5,"createdAt":6,"embedding":7,"id":1395,"image":1396,"isAffiliate":1397,"isPublished":1397,"publishedAt":1398,"relatedVideoArticleId":1399,"slug":1400,"sourceId":1401,"sourceName":1402,"sourceSlug":1403,"sourceType":1404,"sourceUrl":1405,"summary":1406,"title":1407,"updatedAt":1408,"url":1409},"See all that green? Every green cell is a part of the screen the browser just repainted. The snake moves about 6 times a second, but the board below gets repainted 60 times a second. Now switch to Dirty flag. The board goes calm. Only the cells the snake actually touched flash, and about 90% of the frames paint nothing at all. Same game. Same picture. A fraction of the work. The trick is one of the simplest patterns in game development: the dirty flag. Where I found it I’m building a Factorio-style game in the browser. While working on it, I read the Dirty Flag chapter from Robert Nystrom’s Game Programming Patterns. The book is free online and really good. The chapter explains the pattern with a pirate ship and a scene graph full of matrix math. In this post I want to explain it in the simplest way I can: with the Snake game above. The problem: two loops, two speeds A Snake game in the browser has two loops: The game loop moves the snake. A comfortable speed is one step every 150 ms, so about 7 moves per second. The draw loop runs on requestAnimationFrame. That’s about 60 frames per second. Notice the gap. The screen gets drawn 60 times a second, but the board only changes 7 times. ❌ The naive version: draw every frame Here’s how most of us write our first Snake: \u002F\u002F snake.ts setInterval(() =&gt; { moveSnake(); \u002F\u002F 7× per second }, 150); function frame() { drawBoard(); \u002F\u002F 60× per second: grid, snake, food, score requestAnimationFrame(frame); } frame(); That’s the Draw every frame mode in the demo. It works. But out of every 60 frames, about 53 paint the exact same picture as the frame before. That’s almost 90% wasted work. On a laptop you won’t notice. On a phone, the battery notices. ✅ The fix: a dirty flag Add one boolean. It answers a single question: is the picture on screen out of date? \u002F\u002F snake.ts let dirty = true; \u002F\u002F nothing is drawn yet, so we start out of date setInterval(() =&gt; { moveSnake(); dirty = true; \u002F\u002F the board changed }, 150); function frame() { if (dirty) { drawBoard(); dirty = false; \u002F\u002F the screen matches the game again } requestAnimationFrame(frame); } frame(); That’s the whole pattern. Nystrom puts it like this: There’s primary data that changes over time. Here, that’s the snake and the food. There’s derived data that’s expensive to produce. Here, that’s the picture on the canvas. The dirty flag tracks when the derived data is out of sync with the primary data. “Dirty” means out of date. “Clean” means you can reuse what you already have. The demo at the top goes one step further. Instead of one flag for the whole board, it keeps one dirty flag per cell. A move only touches three cells: the new head, the old head and the tail that got freed up. That’s why only those cells flash. It only pays off when changes are rare Scroll back up and drag the speed slider. The faster the snake, the less the flag saves. At 1 move per second, almost every frame gets skipped. A dirty flag only pays off when the data changes less often than you read it. If the board changed on every frame, the flag would never skip anything. There’s also a free bonus. If the snake moves, eats and the score goes up in the same tick, all three set dirty = true. You still draw once, not three times. Many changes, one recompute Snake only has one thing to redraw. Nystrom’s pirate ship is where the pattern gets interesting, because the data is a tree. A ship carries a crow’s nest. A pirate stands in the nest. A parrot sits on his shoulder. Each one stores its position relative to its parent, and the world position is the parent’s world position combined with its own. So when the ship moves, everything on it is out of date, even though the parrot itself didn’t do anything. This is Robert Nystrom’s example from Game Programming Patterns. I drew my own ship and added counters so you can see the work. Try this: Pick Eager, press Move all four. The ship recomputes itself and all its children, then the nest does the same, and so on. The parrot ends up at 4, the total at 10. Press Reset counters, pick Dirty flag, press Move all four. Four dots turn red and nothing is recomputed. The picture is still old. Press Render and every node counts 1, the total is 4. Reset, then press only Move ship, then Render. The total is still 4. Only the ship got flagged, but the render passes the dirt down, so the nest, pirate and parrot recompute too. That’s correct. They really were out of date. The trap: forgetting to set the flag This is the bug you’ll actually ship. Say you add a power-up where the food teleports every five seconds: \u002F\u002F snake.ts setInterval(() =&gt; { food = randomFreeCell(); \u002F\u002F forgot: dirty = true }, 5000); Nothing crashes. No error in the console. The food moved in the game state, but the screen still shows the old spot until the snake happens to move. The player steers toward food that isn’t there. Try it in the demo at the top: switch to Forgot the flag, pause the snake and click Teleport food. The old apple stays on screen, the new one is invisible, and the stats turn red. That’s what makes the bug nasty. A dirty flag is a cache, and the hard part of any cache is invalidation. Miss one place and you get a quietly wrong screen. ✅ The better fix: one door for every change Nystrom’s advice is to put all changes behind a narrow API. If the only way to change the board also sets the flag, forgetting becomes impossible: \u002F\u002F snake.ts let dirty = true; function setFood(pos: Cell) { food = pos; dirty = true; } function setSnake(next: Cell[]) { snake = next; dirty = true; } Game code never writes food = ... directly again. It calls setFood(...). I like this much more than the plain flag. Remembering things is a bad strategy, for humans and for coding agents. Why a number and not a boolean Snake uses true\u002Ffalse. That works as long as only one thing reads the flag. Now add a minimap next to the board. Both the board and the minimap check dirty. The board redraws first and sets dirty = false. The minimap looks next, sees a clean flag and never updates. The fix is a counter instead of a boolean: \u002F\u002F snake.ts let version = 0; function setFood(pos: Cell) { food = pos; version++; \u002F\u002F never reset, only counts up } let boardSeen = -1; let minimapSeen = -1; function frame() { if (boardSeen !== version) { drawBoard(); boardSeen = version; } if (minimapSeen !== version) { drawMinimap(); minimapSeen = version; } requestAnimationFrame(frame); } Each reader remembers the last number it saw. Nobody clears anything, so readers can’t steal the update from each other. Rule of thumb: one reader, use a boolean. Several readers, use a counter. You already use this every day: computed If you write Vue, you’ve used dirty flags for years without seeing them. const items = ref&lt;Item[]&gt;([]); const total = computed(() =&gt; items.value.reduce((sum, i) =&gt; sum + i.price, 0)); Changing items doesn’t recompute total. It only marks total as dirty. The reduce runs the next time someone reads total.value, and only once, no matter how many times items changed in between. That’s exactly the Snake draw loop. Vue 3.5 has a DIRTY bit on every computed, plus version counters next to it. It’s the boolean and the counter from the section above, in one place. alien-signals, the signal library behind Vue 3.6’s reactivity rewrite, takes it one step further with two flags: Dirty: a value I read definitely changed. Recompute. Pending: something further up the chain changed. Maybe I’m out of date, maybe not. Remember Nystrom’s pirate ship, where a parent moving makes every child out of date? Pending is that idea for a graph of signals. Let’s look at the actual code. The snippets are from alien-signals v3.2.0 (MIT), shortened, with my comments. The flags are bits All flags live in one number. Each flag is one bit: \u002F\u002F src\u002Fsystem.ts export const enum ReactiveFlags { None = 0, Mutable = 1, Watching = 2, RecursedCheck = 4, Recursed = 8, Dirty = 16, Pending = 32, } That’s the “dirty bit” from the book, literally. flags &amp; ReactiveFlags.Dirty checks the bit, flags | ReactiveFlags.Pending sets it, flags &amp; ~ReactiveFlags.Pending clears it. One number per node, no extra objects. Writing a signal: mark, don’t compute When you write a new value, the signal marks itself Dirty and hands off to propagate: \u002F\u002F src\u002Findex.ts — signalOper, the setter branch if (this.pendingValue !== (this.pendingValue = value[0])) { this.flags = ReactiveFlags.Mutable | ReactiveFlags.Dirty; const subs = this.subs; if (subs !== undefined) { propagate(subs, !!runDepth); \u002F\u002F walk down to everyone who reads me \u002F\u002F ... } } propagate walks down the graph, and every subscriber that’s still clean only gets the Pending bit: \u002F\u002F src\u002Fsystem.ts — propagate if (!(flags &amp; (ReactiveFlags.RecursedCheck | ReactiveFlags.Recursed | ReactiveFlags.Dirty | ReactiveFlags.Pending))) { sub.flags = flags | ReactiveFlags.Pending; \u002F\u002F \"maybe out of date\" \u002F\u002F ... } Notice what’s missing: no getter runs here. Writing a signal is just setting bits. Same as dirty = true in Snake. Reading a computed: check, then maybe recompute The work happens when someone reads a computed: \u002F\u002F src\u002Findex.ts — computedOper const flags = this.flags; if ( flags &amp; ReactiveFlags.Dirty \u002F\u002F definitely stale: recompute || ( flags &amp; ReactiveFlags.Pending \u002F\u002F maybe stale: &amp;&amp; ( checkDirty(this.deps!, this) \u002F\u002F ask my sources if they really changed || (this.flags = flags &amp; ~ReactiveFlags.Pending, false) \u002F\u002F they didn't: just clear Pending ) ) ) { updateComputed(this); \u002F\u002F run the getter, once } \u002F\u002F ... return this.value!; That’s the if (dirty) from the Snake draw loop, with one extra step. A Pending computed first runs checkDirty, which walks up its sources. If none of them actually produced a new value, it clears the bit and returns the cached value. The getter never runs. Here’s when that pays off: const count = signal(1); const isOdd = computed(() =&gt; count() % 2 === 1); const label = computed(() =&gt; (isOdd() ? \"odd\" : \"even\")); count(3); \u002F\u002F isOdd and label become Pending label(); \u002F\u002F isOdd recomputes: still true. label stays cached. With a single Dirty bit, label would have to recompute too. The Pending bit lets the library stop as soon as a value turns out unchanged. Here’s that example with the flags visible. I rebuilt the idea as a tiny TypeScript model so you can poke at it. It’s a re-implementation, not the library itself, but I checked that its run counts match alien-signals 3.2.0. Try this: Press count + 2. count goes from 1 to 3 and both computeds turn Pending. Nothing re-ran. Press Read label: isOdd runs again and is still true, so label stays cached. Press count + 1, then Read label. Now isOdd flips to false, so label has to run too. Press count + 1 a few times without reading, then Read label once. isOdd runs once, no matter how many writes you made. Source links: ReactiveFlags, propagate, computedOper, signalOper. So the pattern from a 2014 game programming book is sitting in the core of a modern frontend framework. When not to use a dirty flag The pattern adds code and a new way to have bugs. So don’t reach for it by default. The data changes as often as you read it. Think of a game clock that ticks every frame. It’s always dirty, so a flag would never skip anything. You can update the result directly. Nystrom’s example is the total weight of loot on a ship. Don’t recount everything when it’s needed. Keep a running total and add or subtract as items come and go. In Snake, the score works the same way: score++ on every apple, no recount. It’s already fast enough. Honestly, drawing a 16×11 Snake board 60 times a second is fine. I used Snake because it’s easy to see, not because it needs the optimization. The pattern earns its keep when the derived work is actually slow, like painting a big tile map or rebuilding a graph of conveyor belts. Put `console.count(\"draw\")` at the top of whatever expensive function you think is cached. Stand still, then change one thing. If the counter keeps climbing while nothing happens, you've found your wasted work. Summary A dirty flag is one bit, or one number, that says “this result is out of date”. Set it when the source changes. Check it when you need the result. Redo the work only when it’s set. The pattern itself takes five minutes to learn. The discipline is the hard part: every change has to set the flag. So don’t rely on discipline. Route every change through one function and let the code remember for you. If you want to go deeper, read the Dirty Flag chapter in Game Programming Patterns. It covers the parts I skipped, like when to clean the flag and how fine-grained your tracking should be.","2026-10-10T16:00:16.544Z",[8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,57,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,58,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,76,58,183,184,185,186,187,188,179,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,165,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,135,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,109,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,189,247,306,307,308,309,310,311,312,313,314,315,316,317,318,151,319,320,321,322,199,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,43,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,366,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,99,433,434,435,436,323,437,438,439,440,441,442,443,444,445,446,447,448,67,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,410,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,39,536,537,538,539,540,541,542,543,544,545,513,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,70,565,566,567,568,569,121,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,575,588,589,590,591,70,592,593,594,595,596,597,598,599,600,601,602,603,604,605,300,606,607,608,609,610,351,611,612,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627,628,629,630,631,632,633,634,635,636,637,638,639,640,641,642,643,644,645,646,617,647,648,649,438,650,651,652,653,654,655,656,657,658,135,659,660,661,662,663,664,665,18,666,667,49,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,705,706,707,708,514,709,710,711,712,713,420,714,715,716,717,718,253,719,720,721,722,723,724,725,726,727,728,729,730,731,732,733,734,735,569,623,736,737,738,739,740,242,741,742,743,744,745,746,747,748,749,750,751,752,753,754,755,756,514,757,758,759,760,761,762,763,764,765,766,767,768,769,770,226,771,204,772,773,774,775,776,777,778,445,779,780,781,782,783,193,784,785,786,787,788,789,790,791,792,793,794,795,796,797,798,799,800,801,802,803,804,805,806,807,808,809,810,811,812,813,814,815,816,796,817,818,819,820,821,822,823,824,825,826,827,705,828,829,305,830,816,831,832,833,834,195,835,836,837,838,839,840,841,842,843,844,845,846,847,848,849,850,851,852,853,803,854,559,511,855,856,857,858,859,860,861,187,862,863,864,865,866,867,868,869,366,288,715,870,871,872,873,874,875,339,876,877,878,879,880,881,882,883,884,885,886,887,888,889,890,891,892,893,894,895,896,160,897,898,899,900,901,902,903,904,905,906,907,908,909,910,708,911,912,913,914,915,340,916,917,918,129,919,920,921,922,923,97,924,925,926,927,928,929,833,930,931,932,933,934,935,665,936,937,938,939,940,941,942,223,943,944,945,946,947,948,949,950,951,952,360,953,954,921,955,956,957,958,168,959,960,961,962,963,964,965,966,967,968,97,969,970,971,972,901,973,974,975,976,977,148,978,979,980,981,982,565,983,984,985,986,987,988,989,403,990,991,992,993,994,78,924,995,996,997,998,999,156,1000,1001,1002,1003,12,1004,926,1005,1006,1007,1008,1009,1010,1011,877,1012,1013,1014,1015,1016,1017,463,510,1018,1019,1020,1021,1022,1023,1024,1025,1026,448,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,216,1050,1051,1052,1053,202,1054,1033,1055,1056,1057,1058,1059,1060,1061,1062,1063,654,595,1064,1065,800,521,1066,1067,483,1068,734,1069,959,903,1070,969,1071,1072,1073,1074,1075,965,28,1076,1077,1078,1073,1079,1080,1081,1082,1083,1084,1085,617,1086,1087,1088,1089,1090,211,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,917,1106,1107,1088,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1120,1121,1122,151,741,1123,1124,1125,1126,1127,1128,211,1129,1130,1131,1132,1133,1134,1135,1136,1137,1138,1139,1140,1141,1142,1143,1144,1145,1146,1147,702,1148,1149,1150,283,1151,1152,163,1153,703,185,1154,1155,1156,1157,656,1158,1159,1160,602,1161,1162,1163,1164,1034,1165,1166,1167,43,1168,1169,1170,1171,1172,1173,1174,1175,1176,1177,551,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,448,1189,1190,1191,1192,251,1193,752,1194,1195,1196,1197,740,1198,1199,1200,1201,512,1202,1203,1204,1205,1206,1207,1208,837,1209,1210,1211,1212,1213,1214,1215,1216,1217,698,1218,1219,230,825,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,919,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1235,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,932,1273,1274,1275,1276,575,1277,577,1278,1279,1280,1226,1281,1282,1283,829,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1077,1302,519,1303,1266,1304,1305,1306,1307,1308,1309,1310,1311,1312,1313,1314,1315,1316,1317,1318,1319,1320,1321,1322,1323,1324,1325,1326,1327,1328,1329,1330,1331,1332,1333,1334,849,1335,1336,1337,1338,590,1339,1340,1341,1342,1343,1344,1345,488,1346,262,225,1347,752,1348,1349,1350,1244,1351,1352,1353,1354,1355,1356,330,980,1357,657,1358,1359,1360,1361,1362,1363,1364,1365,1366,668,266,1367,1368,1369,177,1370,1371,1372,755,965,809,1373,1374,1375,1376,1377,1378,1379,1380,1381,1382,1383,1384,1385,1386,1387,1388,1389,1390,1391,1392,1393,974,1390,1394],0.01181793212890625,0.0243682861328125,-0.01158905029296875,0.021697998046875,0.0313720703125,0.02130126953125,0.0297088623046875,-0.0279541015625,-0.003498077392578125,0.05718994140625,0.05548095703125,-0.01076507568359375,-0.0219879150390625,0.0262298583984375,0.00917816162109375,0.00008189678192138672,-0.0005626678466796875,0.006927490234375,-0.02099609375,-0.0091705322265625,0.05535888671875,0.00994873046875,0.01280975341796875,0.053741455078125,0.032806396484375,0.0246429443359375,0.031951904296875,0.004413604736328125,0.00666046142578125,-0.0183563232421875,0.0120391845703125,-0.018890380859375,0.05413818359375,-0.07354736328125,0.044677734375,-0.037322998046875,0.006069183349609375,-0.0236358642578125,-0.0185699462890625,-0.0232391357421875,0.0072784423828125,-0.0173492431640625,-0.0280914306640625,0.0025005340576171875,-0.004199981689453125,0.05157470703125,-0.0011157989501953125,-0.01337432861328125,-0.044036865234375,0.05401611328125,-0.056915283203125,0.0172271728515625,0.0272979736328125,-0.002285003662109375,0.00800323486328125,-0.0026645660400390625,-0.033843994140625,0.006954193115234375,-0.00403594970703125,0.0028705596923828125,0.0290069580078125,0.018035888671875,-0.031982421875,-0.044158935546875,0.035919189453125,-0.0809326171875,-0.0130615234375,0.02252197265625,0.01593017578125,0.06329345703125,0.007289886474609375,0.037872314453125,-0.035247802734375,0.0176239013671875,-0.01183319091796875,0.043060302734375,0.028778076171875,0.0273284912109375,0.03173828125,-0.0215301513671875,-0.00836181640625,0.047515869140625,-0.01505279541015625,-0.01033782958984375,-0.00414276123046875,-0.0254974365234375,-0.023712158203125,-0.008453369140625,-0.0111846923828125,-0.038665771484375,0.033233642578125,-0.021209716796875,-0.0210723876953125,0.01166534423828125,0.01294708251953125,-0.01053619384765625,0.02587890625,0.0555419921875,0.0096588134765625,0.03076171875,-0.0008282661437988281,0.01690673828125,0.0221405029296875,0.02471923828125,-0.020233154296875,-0.01117706298828125,0.028076171875,-0.0154876708984375,0.03460693359375,-0.035400390625,-0.004802703857421875,-0.006481170654296875,0.0418701171875,0.012664794921875,0.0010271072387695312,0.0126953125,0.01861572265625,0.022247314453125,-0.021148681640625,-0.0090179443359375,-0.0155181884765625,-0.0058746337890625,-0.03619384765625,-0.0027217864990234375,-0.036773681640625,-0.0161590576171875,-0.061004638671875,0.04974365234375,0.0203399658203125,-0.02166748046875,0.051910400390625,0.0367431640625,-0.062347412109375,0.0311737060546875,-0.042755126953125,0.0260009765625,-0.0226593017578125,0.0301513671875,-0.0128326416015625,0.0031261444091796875,-0.0257415771484375,0.00902557373046875,0.018585205078125,-0.007965087890625,-0.01045989990234375,0.01396942138671875,0.0025959014892578125,-0.0014820098876953125,-0.0142669677734375,0.0308380126953125,-0.0009794235229492188,0.0040283203125,-0.0256500244140625,-0.00473785400390625,0.044921875,-0.03094482421875,-0.031951904296875,0.03515625,-0.047882080078125,-0.01255035400390625,-0.0240478515625,0.0303955078125,-0.009521484375,0.0085906982421875,0.00649261474609375,-0.043182373046875,-0.02288818359375,0.02520751953125,0.0199127197265625,-0.00824737548828125,0.007579803466796875,-0.0394287109375,-0.01047515869140625,-0.00782012939453125,-0.0006036758422851562,-0.043304443359375,-0.01082611083984375,0.032470703125,-0.004695892333984375,-0.022247314453125,-0.0275115966796875,0.017303466796875,0.024078369140625,-0.0418701171875,-0.002704620361328125,-0.0218658447265625,0.0491943359375,0.011322021484375,-0.024444580078125,-0.0241241455078125,-0.03363037109375,0.03240966796875,-0.0116424560546875,0.01031494140625,-0.0261688232421875,0.00812530517578125,0.0281829833984375,0.05877685546875,0.005069732666015625,-0.0166168212890625,-0.02484130859375,-0.0034580230712890625,0.036224365234375,0.01407623291015625,0.025665283203125,0.0025882720947265625,-0.03558349609375,-0.0281829833984375,-0.00952911376953125,-0.01543426513671875,0.0155029296875,-0.0251007080078125,-0.0241851806640625,0.00885009765625,-0.022674560546875,0.03570556640625,0.0021800994873046875,-0.02191162109375,-0.034881591796875,0.020233154296875,-0.00858306884765625,0.01220703125,-0.0174407958984375,0.0164794921875,0.046478271484375,0.034698486328125,-0.04541015625,0.06097412109375,0.00627899169921875,-0.0740966796875,-0.004993438720703125,-0.00295257568359375,0.044586181640625,-0.06658935546875,0.0191497802734375,-0.0164031982421875,-0.012359619140625,-0.007106781005859375,0.0250701904296875,-0.0477294921875,-0.01105499267578125,-0.01174163818359375,0.0203094482421875,0.0141448974609375,0.003490447998046875,-0.01003265380859375,-0.06640625,-0.0263824462890625,-0.0487060546875,-0.0167694091796875,-0.0102691650390625,0.0477294921875,-0.005733489990234375,-0.00974273681640625,-0.021484375,-0.029327392578125,-0.06414794921875,-0.01690673828125,0.013519287109375,0.000675201416015625,-0.025299072265625,0.0130462646484375,0.0182342529296875,0.01322174072265625,0.03643798828125,0.041046142578125,-0.00899505615234375,-0.01071929931640625,0.012359619140625,0.04547119140625,-0.027587890625,-0.03155517578125,-0.043121337890625,-0.044677734375,-0.00409698486328125,0.016082763671875,-0.01194000244140625,-0.01099395751953125,0.0031909942626953125,0.0582275390625,0.0238037109375,-0.043243408203125,-0.0005855560302734375,0.022613525390625,-0.00396728515625,0.03680419921875,-0.01338958740234375,0.0264129638671875,-0.043731689453125,0.00034356117248535156,0.00911712646484375,-0.05377197265625,0.02935791015625,-0.021087646484375,-0.03839111328125,0.037384033203125,0.010284423828125,-0.035980224609375,-0.01544952392578125,0.01514434814453125,0.033294677734375,-0.03021240234375,-0.01007843017578125,-0.0233306884765625,-0.0223846435546875,-0.0209197998046875,0.06964111328125,0.06634521484375,-0.02325439453125,-0.01959228515625,0.00513458251953125,0.0077972412109375,0.032867431640625,-0.042144775390625,0.006622314453125,0.003376007080078125,0.007904052734375,-0.022430419921875,0.019500732421875,-0.023101806640625,-0.00746917724609375,-0.0224761962890625,-0.01256561279296875,-0.0261077880859375,-0.0164947509765625,-0.00896453857421875,-0.0211181640625,-0.01708984375,-0.055633544921875,-0.005199432373046875,0.00997161865234375,0.015350341796875,-0.021759033203125,-0.0013284683227539062,-0.05450439453125,0.00959014892578125,0.0078277587890625,0.0156402587890625,-0.00568389892578125,0.018707275390625,0.039764404296875,0.000980377197265625,-0.0003147125244140625,-0.03424072265625,-0.03131103515625,-0.019775390625,0.00006002187728881836,-0.025115966796875,-0.0020503997802734375,0.007598876953125,0.004669189453125,-0.0361328125,0.039337158203125,-0.03369140625,-0.03668212890625,0.0308074951171875,0.0185546875,0.0173492431640625,0.03472900390625,-0.0076904296875,-0.0107269287109375,-0.0191497802734375,0.040557861328125,0.006183624267578125,0.01290130615234375,0.019744873046875,0.00640106201171875,-0.0291900634765625,0.0251617431640625,0.034027099609375,-0.0300750732421875,-0.01861572265625,0.035858154296875,-0.013397216796875,-0.008575439453125,-0.08978271484375,0.0260467529296875,-0.041595458984375,0.026763916015625,0.01049041748046875,0.0134735107421875,0.039520263671875,0.00019228458404541016,0.0300750732421875,0.041900634765625,0.020050048828125,0.0382080078125,-0.003612518310546875,-0.0577392578125,-0.01236724853515625,-0.046234130859375,-0.00925445556640625,0.0003483295440673828,0.01020050048828125,-0.00821685791015625,0.0152130126953125,0.07965087890625,0.01397705078125,0.04559326171875,-0.0238800048828125,-0.01678466796875,-0.03143310546875,-0.003871917724609375,-0.03948974609375,-0.009490966796875,0.0836181640625,0.0391845703125,-0.0034427642822265625,0.03765869140625,-0.06451416015625,-0.01348876953125,0.03985595703125,-0.021820068359375,0.036468505859375,0.06317138671875,-0.0738525390625,-0.002559661865234375,0.007091522216796875,-0.025360107421875,0.025177001953125,0.044830322265625,-0.04241943359375,-0.002712249755859375,-0.03582763671875,0.0201568603515625,-0.006664276123046875,-0.027679443359375,-0.0181427001953125,0.038330078125,0.050262451171875,-0.0338134765625,0.031646728515625,-0.00788116455078125,-0.0305023193359375,-0.014007568359375,0.0105438232421875,-0.040252685546875,0.0546875,0.06622314453125,-0.0032062530517578125,0.04833984375,0.0190277099609375,-0.007038116455078125,-0.01202392578125,0.01800537109375,-0.0037593841552734375,0.07379150390625,0.043701171875,0.022705078125,0.003437042236328125,0.004947662353515625,0.071044921875,-0.0184326171875,-0.05364990234375,-0.050689697265625,0.045928955078125,0.017364501953125,0.034912109375,0.0023441314697265625,0.005016326904296875,-0.012664794921875,-0.0208892822265625,0.032257080078125,-0.05352783203125,-0.04052734375,-0.02740478515625,-0.0408935546875,0.038482666015625,0.053070068359375,-0.00547027587890625,-0.054107666015625,-0.05010986328125,-0.0166473388671875,-0.051849365234375,-0.00862884521484375,0.06805419921875,-0.015625,0.0030117034912109375,-0.0277099609375,-0.0271453857421875,-0.00921630859375,-0.016937255859375,-0.03179931640625,0.052215576171875,-0.00428009033203125,0.0255126953125,0.0254364013671875,0.0604248046875,-0.0916748046875,0.046875,-0.004825592041015625,-0.01316070556640625,0.0160980224609375,-0.0155029296875,0.001605987548828125,0.0218353271484375,-0.006500244140625,-0.0192108154296875,-0.0274505615234375,0.0208282470703125,-0.0201568603515625,-0.01305389404296875,-0.0146636962890625,0.0091705322265625,-0.01360321044921875,-0.0292816162109375,0.0229034423828125,-0.04107666015625,-0.060516357421875,-0.0110931396484375,-0.0262603759765625,0.01666259765625,-0.0301055908203125,-0.035552978515625,-0.0033893585205078125,0.027252197265625,-0.07806396484375,-0.01013946533203125,-0.0005717277526855469,-0.019561767578125,-0.04180908203125,0.0113677978515625,0.001026153564453125,-0.0188446044921875,0.04296875,-0.0178070068359375,-0.01271820068359375,-0.0263519287109375,0.004787445068359375,0.00887298583984375,-0.01325225830078125,0.0117950439453125,-0.0328369140625,-0.05096435546875,-0.0447998046875,0.01641845703125,0.00647735595703125,-0.0031719207763671875,0.022430419921875,-0.01094818115234375,-0.020965576171875,-0.02398681640625,-0.006786346435546875,-0.0247955322265625,0.016632080078125,0.0050201416015625,0.0082855224609375,-0.02386474609375,0.023651123046875,0.027618408203125,0.034088134765625,0.02886962890625,-0.01137542724609375,-0.03656005859375,0.0306396484375,0.0008864402770996094,0.005176544189453125,-0.00833892822265625,0.036773681640625,-0.02935791015625,-0.02886962890625,-0.0206756591796875,-0.05865478515625,0.01100921630859375,0.02215576171875,0.0113983154296875,0.0028820037841796875,0.0177459716796875,-0.0031642913818359375,-0.01491546630859375,-0.04925537109375,0.0369873046875,-0.0030422210693359375,-0.0033626556396484375,-0.01473236083984375,-0.006740570068359375,-0.005706787109375,0.00760650634765625,0.0002694129943847656,-0.0169219970703125,0.0016984939575195312,0.027069091796875,-0.0170440673828125,-0.0227813720703125,0.04327392578125,-0.0037860870361328125,-0.04150390625,0.01335906982421875,0.0004634857177734375,0.00018477439880371094,-0.01971435546875,-0.007354736328125,-0.0228729248046875,0.0260162353515625,-0.0177001953125,-0.0160675048828125,0.0137176513671875,0.009674072265625,-0.01097869873046875,-0.01354217529296875,0.07122802734375,-0.041015625,0.03656005859375,-0.047088623046875,-0.0291595458984375,-0.021728515625,0.00658416748046875,0.0170135498046875,-0.004642486572265625,0.00811767578125,0.0112457275390625,0.01236724853515625,0.00540924072265625,-0.0294647216796875,0.041259765625,-0.01409149169921875,0.004604339599609375,0.00927734375,0.0152435302734375,0.01910400390625,0.043212890625,0.01346588134765625,0.005268096923828125,0.0002244710922241211,-0.033721923828125,-0.00615692138671875,-0.0037479400634765625,0.005428314208984375,-0.005474090576171875,-0.005619049072265625,-0.006832122802734375,-0.04486083984375,-0.02716064453125,0.010345458984375,0.0005331039428710938,0.0048065185546875,-0.036590576171875,-0.02130126953125,-0.038360595703125,0.00775146484375,0.019927978515625,-0.001010894775390625,-0.02056884765625,0.076904296875,-0.0116119384765625,-0.00984954833984375,-0.01067352294921875,-0.00086212158203125,-0.0110015869140625,-0.040679931640625,0.0020275115966796875,-0.01302337646484375,0.05364990234375,-0.01161956787109375,-0.007537841796875,-0.00013947486877441406,0.00809478759765625,-0.0252532958984375,-0.0141754150390625,-0.06329345703125,0.0154571533203125,0.0223388671875,-0.0250091552734375,0.0237579345703125,0.01311492919921875,0.01107025146484375,-0.021636962890625,-0.007625579833984375,-0.048492431640625,0.0022335052490234375,0.033111572265625,-0.0050201416015625,-0.0303192138671875,-0.0172576904296875,-0.035186767578125,0.04034423828125,0.0004088878631591797,0.01507568359375,0.0125579833984375,-0.02783203125,-0.004352569580078125,-0.0244598388671875,0.02392578125,0.0006070137023925781,0.01092529296875,-0.032012939453125,-0.0163726806640625,0.0256500244140625,-0.0260467529296875,0.00043392181396484375,0.020263671875,0.006511688232421875,0.0148468017578125,0.0210723876953125,-0.004364013671875,-0.024871826171875,-0.01153564453125,-0.00905609130859375,-0.0005617141723632812,-0.0172882080078125,-0.01485443115234375,0.007053375244140625,0.01090240478515625,-0.0201263427734375,-0.037628173828125,0.01276397705078125,-0.00490570068359375,0.0156097412109375,0.0390625,-0.03216552734375,-0.0187530517578125,-0.01160430908203125,-0.06707763671875,0.026611328125,0.0531005859375,-0.01157379150390625,0.0238494873046875,0.01275634765625,0.005023956298828125,-0.0104522705078125,-0.0039520263671875,-0.007633209228515625,-0.03521728515625,0.0255279541015625,0.0302581787109375,0.029632568359375,0.033538818359375,0.04217529296875,0.016510009765625,0.0242462158203125,0.0078582763671875,-0.00415802001953125,0.020843505859375,-0.00838470458984375,0.0079803466796875,0.02142333984375,-0.01180267333984375,0.0240325927734375,-0.01515960693359375,-0.006900787353515625,0.02239990234375,-0.00201416015625,0.004459381103515625,-0.0282135009765625,-0.015960693359375,0.0027370452880859375,-0.00026988983154296875,-0.0142822265625,-0.00930023193359375,0.0009369850158691406,0.000457763671875,-0.0106658935546875,-0.0255279541015625,0.0197296142578125,-0.0068206787109375,0.013641357421875,0.035980224609375,0.0211334228515625,0.0244293212890625,-0.11077880859375,-0.031341552734375,0.003734588623046875,0.00348663330078125,0.007080078125,-0.032989501953125,0.01194000244140625,-0.020751953125,-0.03118896484375,-0.0305938720703125,0.01000213623046875,-0.0012674331665039062,0.0096435546875,0.002574920654296875,-0.003459930419921875,0.001644134521484375,0.01218414306640625,-0.001651763916015625,-0.044952392578125,-0.00914764404296875,0.0174713134765625,0.01340484619140625,0.00644683837890625,-0.016632080078125,0.0121612548828125,0.004833221435546875,0.00939178466796875,-0.041290283203125,0.00211334228515625,-0.0162506103515625,0.006847381591796875,-0.001079559326171875,-0.00244140625,-0.0010900497436523438,0.06439208984375,0.00449371337890625,-0.00789642333984375,-0.02691650390625,0.0041961669921875,-0.024932861328125,0.033355712890625,-0.0239715576171875,-0.01528167724609375,-0.004062652587890625,-0.0253753662109375,-0.0119781494140625,-0.004852294921875,0.003635406494140625,-0.028076171875,-0.026336669921875,-0.0139923095703125,0.0008893013000488281,0.0265045166015625,-0.04840087890625,0.005756378173828125,-0.01517486572265625,0.032501220703125,0.01125335693359375,-0.00322723388671875,0.044952392578125,-0.00708770751953125,0.01184844970703125,0.0261993408203125,0.002017974853515625,-0.0115509033203125,0.0120697021484375,0.007030487060546875,-0.01372528076171875,-0.0033588409423828125,-0.01216888427734375,-0.0141143798828125,-0.032257080078125,-0.0028438568115234375,0.028289794921875,0.004058837890625,-0.00946044921875,-0.041900634765625,-0.005889892578125,-0.01165771484375,-0.01274871826171875,0.02581787109375,0.00682830810546875,0.0129852294921875,0.00089263916015625,-0.0016918182373046875,-0.003963470458984375,-0.0113525390625,0.00001823902130126953,0.037933349609375,0.0178070068359375,-0.0037212371826171875,-0.04522705078125,-0.0264892578125,0.0020008087158203125,0.051055908203125,0.0026683807373046875,-0.01212310791015625,-0.00826263427734375,-0.007434844970703125,0.017730712890625,-0.02569580078125,-0.01192474365234375,0.01055145263671875,-0.005207061767578125,-0.017059326171875,-0.029571533203125,-0.020538330078125,0.0036773681640625,-0.00423431396484375,0.0469970703125,0.025115966796875,0.0028629302978515625,0.02398681640625,0.002719879150390625,0.004695892333984375,-0.0026874542236328125,-0.01910400390625,0.03204345703125,-0.0084381103515625,-0.00341796875,0.036590576171875,-0.005649566650390625,-0.0003561973571777344,-0.01323699951171875,0.01461029052734375,0.01039886474609375,-0.0006513595581054688,0.01531219482421875,-0.0230560302734375,0.0167694091796875,0.0078887939453125,0.01337432861328125,0.013275146484375,-0.0243377685546875,0.0145721435546875,-0.00787353515625,-0.006755828857421875,-0.004863739013671875,-0.02593994140625,-0.047332763671875,-0.031890869140625,0.0526123046875,0.002750396728515625,-0.00545501708984375,-0.0028076171875,0.0023632049560546875,0.01435089111328125,0.01995849609375,0.006103515625,0.004512786865234375,0.018524169921875,-0.048553466796875,-0.0199737548828125,0.01464080810546875,-0.01070404052734375,0.0494384765625,0.027374267578125,0.0232696533203125,-0.00055694580078125,0.02264404296875,-0.004302978515625,0.017669677734375,0.0020122528076171875,0.0008292198181152344,0.0133056640625,-0.0079193115234375,0.005451202392578125,-0.002239227294921875,-0.01079559326171875,0.0257720947265625,0.005680084228515625,-0.0020294189453125,0.007228851318359375,0.00968170166015625,0.0443115234375,0.0033111572265625,-0.0171051025390625,0.02789306640625,0.030181884765625,0.013092041015625,0.062164306640625,0.0338134765625,-0.018646240234375,0.053436279296875,0.032745361328125,-0.00287628173828125,0.00739288330078125,-0.0003101825714111328,0.005786895751953125,-0.00756072998046875,0.0021572113037109375,-0.0308074951171875,0.008026123046875,-0.07373046875,-0.024627685546875,-0.0350341796875,-0.057830810546875,0.019378662109375,0.0116729736328125,0.052398681640625,-0.00853729248046875,-0.00795745849609375,0.03857421875,-0.01389312744140625,-0.01419830322265625,0.0138702392578125,0.026458740234375,0.00890350341796875,0.0305328369140625,-0.042236328125,0.0017213821411132812,0.01227569580078125,-0.037689208984375,-0.01026153564453125,-0.0038166046142578125,-0.01448822021484375,0.00543212890625,-0.040557861328125,-0.0149688720703125,-0.0256195068359375,-0.00254058837890625,-0.0031566619873046875,-0.016448974609375,-0.01486968994140625,0.036529541015625,0.0115509033203125,0.0009031295776367188,0.01554107666015625,-0.003948211669921875,-0.0219573974609375,-0.0113677978515625,-0.00817108154296875,-0.01103973388671875,-0.00323486328125,0.007503509521484375,0.04998779296875,0.0127716064453125,0.01152801513671875,-0.028045654296875,-0.020416259765625,-0.0216217041015625,-0.004764556884765625,-0.004566192626953125,-0.04132080078125,0.006114959716796875,-0.01177215576171875,-0.029632568359375,-0.045135498046875,0.006679534912109375,0.034423828125,0.04901123046875,0.0258331298828125,-0.0302886962890625,0.00655364990234375,0.01258087158203125,0.0005054473876953125,-0.0241546630859375,0.037078857421875,0.029388427734375,-0.007427215576171875,0.002685546875,0.0038471221923828125,0.02606201171875,-0.0204620361328125,-0.0038547515869140625,0.007778167724609375,-0.003936767578125,-0.018310546875,0.00360107421875,-0.00946807861328125,-0.0002390146255493164,0.037109375,-0.018035888671875,0.032928466796875,0.01082611083984375,-0.040924072265625,-0.0257568359375,0.008819580078125,0.0228424072265625,-0.00118255615234375,0.03369140625,0.03143310546875,0.03289794921875,-0.0120086669921875,0.013153076171875,-0.000020682811737060547,0.02691650390625,0.00962066650390625,-0.017974853515625,-0.0211639404296875,0.034271240234375,-0.0124053955078125,0.01953125,-0.00583648681640625,0.00554656982421875,-0.005321502685546875,-0.002941131591796875,-0.0188140869140625,0.013031005859375,-0.00829315185546875,-0.0085906982421875,-0.0243682861328125,-0.028594970703125,-0.00849151611328125,0.0301055908203125,0.0270843505859375,-0.0146942138671875,-0.00727081298828125,0.006237030029296875,0.01447296142578125,-0.030181884765625,0.0294647216796875,0.0150604248046875,0.0240936279296875,0.0010700225830078125,-0.006122589111328125,-0.014129638671875,-0.0156097412109375,-0.004970550537109375,0.01462554931640625,0.0206298828125,0.0162353515625,-0.005100250244140625,-0.028350830078125,-0.019805908203125,-0.005741119384765625,0.00046634674072265625,0.01503753662109375,-0.0090484619140625,-0.0266265869140625,-0.01168060302734375,0.0020618438720703125,0.01299285888671875,-0.0260009765625,0.0212249755859375,0.0251922607421875,0.00444793701171875,0.006107330322265625,0.0310516357421875,-0.038970947265625,0.01629638671875,-0.044189453125,-0.00659942626953125,0.02783203125,-0.01181793212890625,0.00998687744140625,-0.0220947265625,0.004100799560546875,-0.00949859619140625,0.007457733154296875,-0.0117950439453125,0.01357269287109375,0.01145172119140625,-0.0189971923828125,0.00572967529296875,-0.0010929107666015625,0.03399658203125,-0.0159759521484375,0.0093536376953125,0.023956298828125,0.01235198974609375,0.002887725830078125,-0.0193939208984375,-0.01238250732421875,-0.00431060791015625,0.0233612060546875,0.00707244873046875,-0.0167236328125,0.003082275390625,-0.0191802978515625,0.0031490325927734375,0.042236328125,0.006519317626953125,0.01678466796875,-0.016571044921875,0.024749755859375,0.006793975830078125,0.0111083984375,0.03704833984375,-0.0299072265625,0.0171661376953125,0.0035152435302734375,-0.0251617431640625,-0.00424957275390625,0.034942626953125,-0.047271728515625,0.0005598068237304688,-0.05035400390625,0.009124755859375,0.01309967041015625,-0.0193634033203125,-0.00719451904296875,-0.004222869873046875,-0.00188446044921875,0.04486083984375,-0.007762908935546875,-0.027069091796875,0.020172119140625,-0.0088958740234375,-0.01922607421875,-0.00015735626220703125,0.006160736083984375,0.036041259765625,0.0076751708984375,-0.0012750625610351562,0.0009660720825195312,-0.0083160400390625,0.04876708984375,-0.0234375,-0.00966644287109375,0.039093017578125,-0.0258941650390625,0.0009174346923828125,0.0117034912109375,0.026580810546875,0.0194091796875,0.0269012451171875,-0.00420379638671875,0.038116455078125,-0.031768798828125,0.02276611328125,0.025543212890625,-0.013336181640625,-0.0013179779052734375,0.021759033203125,0.00986480712890625,0.005199432373046875,-0.0343017578125,-0.012603759765625,-0.00848388671875,-0.019378662109375,-0.01837158203125,-0.00213623046875,0.0021915435791015625,0.03387451171875,0.0167083740234375,0.00803375244140625,-0.025238037109375,0.0085601806640625,-0.00725555419921875,-0.0025577545166015625,0.01380157470703125,0.018890380859375,0.036407470703125,0.037567138671875,-0.009857177734375,0.00579071044921875,0.0042724609375,-0.026763916015625,0.025421142578125,-0.0263214111328125,0.01177978515625,-0.017852783203125,-0.00519561767578125,-0.004810333251953125,0.029876708984375,0.0006051063537597656,0.038665771484375,-0.0209503173828125,-0.0119171142578125,-0.017333984375,-0.0195770263671875,0.02984619140625,-0.022369384765625,0.004024505615234375,-0.004886627197265625,-0.005725860595703125,-0.0209808349609375,-0.0535888671875,0.005962371826171875,0.00566864013671875,-0.046783447265625,-0.00260162353515625,0.033416748046875,0.0124359130859375,0.04241943359375,-0.01554107666015625,-0.0220489501953125,0.006092071533203125,0.003173828125,-0.00611114501953125,-0.0097198486328125,-0.004413604736328125,-0.045013427734375,0.0399169921875,0.024871826171875,-0.0074005126953125,-0.0005679130554199219,0.014801025390625,0.000018775463104248047,-0.0193023681640625,0.00022041797637939453,0.045440673828125,0.00406646728515625,0.0030727386474609375,0.01418304443359375,-0.0044097900390625,0.01097869873046875,0.0117340087890625,0.0160369873046875,0.013824462890625,-0.0246124267578125,0.0139007568359375,-0.0108184814453125,-0.0250396728515625,-0.00333404541015625,-0.025054931640625,0.01122283935546875,0.0051422119140625,-0.01898193359375,-0.01107025146484375,-0.0034961700439453125,0.03814697265625,0.038818359375,0.01052093505859375,-0.0108642578125,-0.0247650146484375,-0.01447296142578125,-0.009124755859375,-0.00988006591796875,0.03424072265625,0.005908966064453125,0.00865936279296875,-0.0178680419921875,-0.0185394287109375,-0.012969970703125,-0.0211334228515625,0.01265716552734375,0.01329803466796875,0.01055908203125,-0.0025424957275390625,-0.0248565673828125,-0.03485107421875,-0.01122283935546875,-0.011871337890625,-0.0009474754333496094,-0.031219482421875,0.05780029296875,-0.0215606689453125,-0.034637451171875,0.020416259765625,-0.003475189208984375,0.0277252197265625,-0.01483154296875,-0.00872039794921875,0.01128387451171875,0.0009636878967285156,-0.0019273757934570312,0.006526947021484375,0.00946044921875,-0.0023365020751953125,0.014556884765625,-0.034912109375,-0.00437164306640625,-0.0026187896728515625,-0.043548583984375,0.00024890899658203125,0.0205078125,0.00701141357421875,-0.01531219482421875,0.0048675537109375,-0.006694793701171875,-0.03314208984375,0.011474609375,-0.0014677047729492188,0.005146026611328125,0.006618499755859375,0.0028591156005859375,0.0045928955078125,-0.01065826416015625,-0.008544921875,0.016815185546875,0.02374267578125,-0.0126495361328125,-0.026031494140625,0.002437591552734375,0.034515380859375,-0.00960540771484375,-0.0035114288330078125,-0.0029811859130859375,-0.011993408203125,0.00432586669921875,0.01483154296875,0.04791259765625,0.01314544677734375,0.00020432472229003906,0.004276275634765625,0.00567626953125,0.00853729248046875,-0.0092620849609375,0.037811279296875,0.031707763671875,0.01134490966796875,0.030426025390625,0.01450347900390625,0.0014562606811523438,-0.006748199462890625,0.034881591796875,-0.0257720947265625,-0.00013756752014160156,-0.035858154296875,0.0245819091796875,-0.01142120361328125,0.00008249282836914062,0.01285552978515625,-0.00885009765625,0.0024433135986328125,-0.0243988037109375,0.0141754150390625,0.01169586181640625,0.006420135498046875,-0.0221405029296875,0.0252838134765625,0.0170440673828125,0.018798828125,0.004116058349609375,-0.0284271240234375,-0.03515625,0.00727081298828125,0.0124969482421875,-0.040863037109375,0.029022216796875,-0.004009246826171875,-0.035888671875,-0.0136871337890625,0.0024623870849609375,0.005992889404296875,0.01224517822265625,"01a1268b-289e-766e-89b3-0d4fb1948aeb","https:\u002F\u002Falexop.dev\u002Fposts\u002Fthe-dirty-flag-pattern-explained-with-snake\u002Findex.png",false,"2026-10-10T08:00:00.000Z",null,"the-dirty-flag-pattern-explained-with-snake","019d70dd-e3e7-76db-84a4-87b896dea004","alexop.dev","alexopdev","rss","https:\u002F\u002Falexop.dev","The article explains the Dirty Flag pattern in game development, using a Snake game as an example to illustrate how it optimizes rendering by only updating the screen when necessary. By implementing a boolean flag to track changes, the game reduces unnecessary repaints, improving performance, especially on devices with limited resources. The author also discusses potential pitfalls and best practices for using the Dirty Flag effectively.","The Dirty Flag Pattern, Explained with Snake","2026-10-10T16:00:35.317Z","https:\u002F\u002Falexop.dev\u002Fposts\u002Fdirty-flag-pattern-snake\u002F",{"clickCount":1411,"viewCount":1411},0,[1413,1422,1431],{"id":1414,"image":1415,"publishedAt":1416,"slug":1417,"sourceName":1418,"summary":1419,"title":1420,"url":1421},"019ff4d6-9dbc-746b-a9b6-69f7036a13a9","https:\u002F\u002Fi.ytimg.com\u002Fvi\u002FBty-hzN8l84\u002Fhqdefault.jpg","2026-08-11T12:00:24.000Z","nuxt-45-ssr-streaming-is-kind-of-a-big-deal","Program With Erik","Nuxt 4.5 introduces experimental SSR streaming, enhancing performance by allowing browsers to receive HTML content before the entire server-rendered page is ready. This feature aims to improve user experience by reducing perceived load times.","Nuxt 4.5 SSR Streaming Is Kind of a Big Deal","https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=Bty-hzN8l84",{"id":1423,"image":1424,"publishedAt":1425,"slug":1426,"sourceName":1427,"summary":1428,"title":1429,"url":1430},"019f64ca-32ca-73f5-b458-bc95f1b37561","https:\u002F\u002Fapi.certificates.dev\u002Fstorage\u002FxXZtFg8h2YcCNVmq93AeSIBqMnZSQXZKETKI6xgm.png","2026-07-15T08:00:00.000Z","performance-optimization-in-nuxt-2","Certificates.dev","This article discusses practical techniques to optimize the performance of Nuxt applications, focusing on strategies to enhance speed and efficiency. It provides actionable insights for developers looking to improve their Nuxt app performance.","Performance Optimization in Nuxt","https:\u002F\u002Fcertificates.dev\u002Fblog\u002Fperformance-optimization-in-nuxt-1?friend=MOKKAPPS",{"id":1432,"image":1433,"publishedAt":1434,"slug":1435,"sourceName":1427,"summary":1436,"title":1429,"url":1437},"019f1e68-a398-7614-a565-37bb57fd85c8","https:\u002F\u002Fapi.certificates.dev\u002Fstorage\u002FlAB305vJFYD8SXv60gboztHN0tgrQaSTFlfCfQhq.png","2026-07-01T06:00:00.000Z","performance-optimization-in-nuxt","This article discusses practical techniques for optimizing the performance of Nuxt applications, focusing on methods to achieve faster load times and improved user experience.","https:\u002F\u002Fcertificates.dev\u002Fblog\u002Fperformance-optimization-in-nuxt?friend=MOKKAPPS",[1439,1443,1446],{"color":1440,"id":1441,"name":1442,"slug":1442},"#10b981","019d6bd8-ca26-775c-b9b5-c3439dbe5789","performance",{"color":1440,"id":1444,"name":1445,"slug":1445},"019e3af5-4a35-705c-8ab1-4404b653e0e8","optimization",{"color":1440,"id":1447,"name":1448,"slug":1448},"01a1268b-7214-77fc-bd72-33874f071d31","game-development"]