[{"data":1,"prerenderedAt":1743},["ShallowReactive",2],{"notes-to-self-slugs":3,"posts":364,"post-seti-editorial-probing-for-etis-probes-in-the-solar-system":1657},[4,7,10,13,16,19,22,25,28,31,34,37,40,43,46,49,52,55,58,61,64,67,70,73,76,79,82,85,88,91,94,97,100,103,106,109,112,115,118,121,124,127,130,133,136,139,142,145,148,151,154,157,160,163,166,169,172,175,178,181,184,187,190,193,196,199,202,205,208,211,214,217,220,223,226,229,232,235,238,241,244,247,250,253,256,259,262,265,268,271,274,277,280,283,286,289,292,295,298,301,304,307,310,313,316,319,322,325,328,331,334,337,340,343,346,349,352,355,358,361],{"title":5,"slug":6},"3D Math/Graphics","3d-mathgraphics",{"title":8,"slug":9},"3d modeling tools and resources","3d-modeling-tools-and-resources",{"title":11,"slug":12},"3D Printing","3d-printing",{"title":14,"slug":15},"A Mathematical Expression Parser in TypeScript","a-mathematical-expression-parser-in-typescript",{"title":17,"slug":18},"Ad Hoc","ad-hoc",{"title":20,"slug":21},"AI: ChatGPT and the Nature of Intelligence","ai-chatgpt-and-the-nature-of-intelligence",{"title":23,"slug":24},"Apple ][ Stuff","apple-stuff",{"title":26,"slug":27},"Art You Like","art-you-like",{"title":29,"slug":30},"Artists","artists",{"title":32,"slug":33},"Big O (AKA Big Oh) notation","big-o-aka-big-oh-notation",{"title":35,"slug":36},"Big O Cheat Sheet","big-o-cheat-sheet",{"title":38,"slug":39},"Blender","blender",{"title":41,"slug":42},"Books about Business, Process","books-about-business-process",{"title":44,"slug":45},"Break a Concave Shape into Multiple Convex Shapes","break-a-concave-shape-into-multiple-convex-shapes",{"title":47,"slug":48},"C++","c",{"title":50,"slug":51},"C Template Library","c-template-library",{"title":53,"slug":54},"CMS","cms",{"title":56,"slug":57},"Color Tools","color-tools",{"title":59,"slug":60},"CSS: Flex, a Great Explanation","css-flex-a-great-explanation",{"title":62,"slug":63},"CSS - Line Height Unit","css-line-height-unit",{"title":65,"slug":66},"Data Editor","data-editor",{"title":68,"slug":69},"Data transformation tool","data-transformation-tool",{"title":71,"slug":72},"Deep Learning","deep-learning",{"title":74,"slug":75},"Do a Circle and a Line Intersect?","do-a-circle-and-a-line-intersect",{"title":77,"slug":78},"Dungeon Deep/Wicked Engine","dungeon-deepwicked-engine",{"title":80,"slug":81},"Electric Car","electric-car",{"title":83,"slug":84},"Fast Pseudo-random number generator","fast-pseudo-random-number-generator",{"title":86,"slug":87},"Fermi’s Paradox, the Drake Equation, and All That","fermis-paradox-the-drake-equation-and-all-that",{"title":89,"slug":90},"Fonts","fonts",{"title":92,"slug":93},"Frameworks and Libraries of Interest","frameworks-and-libraries-of-interest",{"title":95,"slug":96},"Game Dev","game-dev",{"title":98,"slug":99},"Game Idea - Lunar Lander + Motherload","game-idea-lunar-lander-motherload",{"title":101,"slug":102},"Git Cheat Sheet","git-cheat-sheet",{"title":104,"slug":105},"Godot Exploration","godot-exploration",{"title":107,"slug":108},"Google Apps for biggerplanet.com","google-apps-for-biggerplanetcom",{"title":110,"slug":111},"GUIs in Movies","guis-in-movies",{"title":113,"slug":114},"Guy Uses Blender for Classic 2001/Alien Greeble","guy-uses-blender-for-classic-2001alien-greeble",{"title":116,"slug":117},"HDHomerun Connect Duo","hdhomerun-connect-duo",{"title":119,"slug":120},"Heroku shutting down free tiers","heroku-shutting-down-free-tiers",{"title":122,"slug":123},"Home Improvement","home-improvement",{"title":125,"slug":126},"How to Promote Phone Game","how-to-promote-phone-game",{"title":128,"slug":129},"HTML Dialog Element","html-dialog-element",{"title":131,"slug":132},"Ice maker Repair","ice-maker-repair",{"title":134,"slug":135},"Illustrator => Affinity Designer","illustrator-affinity-designer",{"title":137,"slug":138},"Image, Picture, Visual Resources","image-picture-visual-resources",{"title":140,"slug":141},"Interactive Narrative Scripting Language","interactive-narrative-scripting-language",{"title":143,"slug":144},"Interview with Zachary Boerner, Branch Cut, TableRaven","interview-with-zachary-boerner-branch-cut-tableraven",{"title":146,"slug":147},"JavaScript crypto ","javascript-crypto",{"title":149,"slug":150},"Job search","job-search",{"title":152,"slug":153},"Jobs","jobs",{"title":155,"slug":156},"Keep macOS awake","keep-macos-awake",{"title":158,"slug":159},"Keyboards","keyboards",{"title":161,"slug":162},"Linear Interpolation (lerp)","linear-interpolation-lerp",{"title":164,"slug":165},"Lost Music","lost-music",{"title":167,"slug":168},"Making a Vue/Nuxt Module","making-a-vuenuxt-module",{"title":170,"slug":171},"Marketing","marketing",{"title":173,"slug":174},"Meta Tools","meta-tools",{"title":176,"slug":177},"Military Ranks","military-ranks",{"title":179,"slug":180},"Miscellaneous Digitized Manuscripts and Books for Source Material, Art","miscellaneous-digitized-manuscripts-and-books-for-source-material-art",{"title":182,"slug":183},"More ChatGPT","more-chatgpt",{"title":185,"slug":186},"Movies to Watch","movies-to-watch",{"title":188,"slug":189},"Music (for listening) and Movies/Shows to Watch","music-for-listening-and-moviesshows-to-watch",{"title":191,"slug":192},"Music (Learning, Playing)","music-learning-playing",{"title":194,"slug":195},"Music Resource","music-resource",{"title":197,"slug":198},"Mystery Theater","mystery-theater",{"title":200,"slug":201},"Numeric Input on Mobile","numeric-input-on-mobile",{"title":203,"slug":204},"Old Mac Emulation in Browser","old-mac-emulation-in-browser",{"title":206,"slug":207},"On \"Cancel Culture\"","on-cancel-culture",{"title":209,"slug":210},"On Optimism","on-optimism",{"title":212,"slug":213},"On Testing","on-testing",{"title":215,"slug":216},"Password/Passphrase Generator Idea","passwordpassphrase-generator-idea",{"title":218,"slug":219},"Patent Troll","patent-troll",{"title":221,"slug":222},"Plants","plants",{"title":224,"slug":225},"PlayKode Research","playkode-research",{"title":227,"slug":228},"Plots","plots",{"title":230,"slug":231},"Poetry, Inspirational ","poetry-inspirational",{"title":233,"slug":234},"Portable Screen/Monitor","portable-screenmonitor",{"title":236,"slug":237},"Procedural dungeon for rogue like","procedural-dungeon-for-rogue-like",{"title":239,"slug":240},"Products to Buy","products-to-buy",{"title":242,"slug":243},"Quest VR Floor Height Problem","quest-vr-floor-height-problem",{"title":245,"slug":246},"React","react",{"title":248,"slug":249},"Recipes/Techniques","recipestechniques",{"title":251,"slug":252},"Red Sea Navigation","red-sea-navigation",{"title":254,"slug":255},"Regex Tools","regex-tools",{"title":257,"slug":258},"Roche Brothers Wines","roche-brothers-wines",{"title":260,"slug":261},"Science to exploit and mangle for fiction","science-to-exploit-and-mangle-for-fiction",{"title":263,"slug":264},"SCP Tips","scp-tips",{"title":266,"slug":267},"SDL","sdl",{"title":269,"slug":270},"SETI Editorial: Probing for ETI's Probes in the Solar System","seti-editorial-probing-for-etis-probes-in-the-solar-system",{"title":272,"slug":273},"Setting up sublime to be like iA Writer","setting-up-sublime-to-be-like-ia-writer",{"title":275,"slug":276},"Shared Element Transition","shared-element-transition",{"title":278,"slug":279},"Simulation Hypothesis","simulation-hypothesis",{"title":281,"slug":282},"Solar","solar",{"title":284,"slug":285},"Songs to Sample","songs-to-sample",{"title":287,"slug":288},"Sound Effects","sound-effects",{"title":290,"slug":291},"SSH tips","ssh-tips",{"title":293,"slug":294},"Supabase","supabase",{"title":296,"slug":297},"SVG Tools","svg-tools",{"title":299,"slug":300},"SvS/NoS Reboot notes","svsnos-reboot-notes",{"title":302,"slug":303},"Swift Resources & Notes","swift-resources-notes",{"title":305,"slug":306},"The Original Spacewar!","the-original-spacewar",{"title":308,"slug":309},"The Snowflake Method For Designing A Novel","the-snowflake-method-for-designing-a-novel",{"title":311,"slug":312},"The Thirty-Seven Basic Dramatic Situations","the-thirty-seven-basic-dramatic-situations",{"title":314,"slug":315},"Three Magic Words","three-magic-words",{"title":317,"slug":318},"Three.js","threejs",{"title":320,"slug":321},"Tools & Books","tools-books",{"title":323,"slug":324},"Vector Rendering Engine (C++)","vector-rendering-engine-c",{"title":326,"slug":327},"VR","vr",{"title":329,"slug":330},"Vue 3, Nuxt, Nuxt Content, & TypeScript","vue-3-nuxt-nuxt-content-typescript",{"title":332,"slug":333},"Vue and Vue Adjacent","vue-and-vue-adjacent",{"title":335,"slug":336},"Web dev","web-dev",{"title":338,"slug":339},"WebAssembly (WASM)/Web Worker Notes","webassembly-wasmweb-worker-notes",{"title":341,"slug":342},"WebGPU","webgpu",{"title":344,"slug":345},"What God, Quantum Mechanics and Consciousness Have in Common","what-god-quantum-mechanics-and-consciousness-have-in-common",{"title":347,"slug":348},"what’s an entity component system?","whats-an-entity-component-system",{"title":350,"slug":351},"Whisper","whisper",{"title":353,"slug":354},"Whitelist websites for kid use of raspberry pi","whitelist-websites-for-kid-use-of-raspberry-pi",{"title":356,"slug":357},"Why You Will Marry the Wrong Person","why-you-will-marry-the-wrong-person",{"title":359,"slug":360},"Word order","word-order",{"title":362,"slug":363},"You are h…","you-are-h",[365,748,925,974,1013,1035,1084,1129,1317,1596],{"_path":366,"_dir":367,"_draft":368,"_partial":368,"_locale":369,"title":104,"description":369,"slug":105,"date":370,"dateString":371,"encrypted":368,"encryptedBody":372,"body":373,"_type":742,"_id":743,"_source":744,"_file":745,"_stem":746,"_extension":747},"/notes-to-self/godot-exploration","notes-to-self",false,"",1737918608542,"Shaders",null,{"type":374,"children":375,"toc":735},"root",[376,421,427,520,525,586,596,607,618,623,631,638,653,660,665,670,684,691,696,702,713,724],{"type":377,"tag":378,"props":379,"children":380},"element","ul",{},[381,388,416],{"type":377,"tag":382,"props":383,"children":384},"li",{},[385],{"type":386,"value":387},"text","Devs are committed to home-grown “GDScript”",{"type":377,"tag":382,"props":389,"children":390},{},[391,393],{"type":386,"value":392},"Swift looked promising but:\n",{"type":377,"tag":378,"props":394,"children":395},{},[396,401,406,411],{"type":377,"tag":382,"props":397,"children":398},{},[399],{"type":386,"value":400},"Multi step process for build changes (build, then copy; could be automated?)",{"type":377,"tag":382,"props":402,"children":403},{},[404],{"type":386,"value":405},"Currently sketchy x-platform support",{"type":377,"tag":382,"props":407,"children":408},{},[409],{"type":386,"value":410},"Maybe worth revisiting later",{"type":377,"tag":382,"props":412,"children":413},{},[414],{"type":386,"value":415},"SwiftGodotKit inverts the problem and seems to use Godot by embedding it, like a framework?",{"type":377,"tag":382,"props":417,"children":418},{},[419],{"type":386,"value":420},"C# is typed and structured but suffers from garbage collection stutters; appears to be the only real alternative to GDScript",{"type":377,"tag":422,"props":423,"children":424},"p",{},[425],{"type":386,"value":426},"Not Godot-flavor, but educational",{"type":377,"tag":378,"props":428,"children":429},{},[430,443,454,465,476,487,498,509],{"type":377,"tag":382,"props":431,"children":432},{},[433,441],{"type":377,"tag":434,"props":435,"children":439},"a",{"href":436,"rel":437},"https://www.shadertoy.com/view/Md23DV",[438],"nofollow",[440],{"type":386,"value":436},{"type":386,"value":442}," — tutorial",{"type":377,"tag":382,"props":444,"children":445},{},[446,452],{"type":377,"tag":434,"props":447,"children":450},{"href":448,"rel":449},"https://www.shadertoy.com/view/ltl3WS",[438],[451],{"type":386,"value":448},{"type":386,"value":453}," cloudy stars",{"type":377,"tag":382,"props":455,"children":456},{},[457,463],{"type":377,"tag":434,"props":458,"children":461},{"href":459,"rel":460},"https://www.shadertoy.com/view/Msl3WH",[438],[462],{"type":386,"value":459},{"type":386,"value":464}," warp towards viewer",{"type":377,"tag":382,"props":466,"children":467},{},[468,474],{"type":377,"tag":434,"props":469,"children":472},{"href":470,"rel":471},"https://www.shadertoy.com/view/4tjSDt",[438],[473],{"type":386,"value":470},{"type":386,"value":475}," another warp",{"type":377,"tag":382,"props":477,"children":478},{},[479,485],{"type":377,"tag":434,"props":480,"children":483},{"href":481,"rel":482},"https://www.shadertoy.com/view/lsc3z4",[438],[484],{"type":386,"value":481},{"type":386,"value":486}," other stars",{"type":377,"tag":382,"props":488,"children":489},{},[490,496],{"type":377,"tag":434,"props":491,"children":494},{"href":492,"rel":493},"https://www.shadertoy.com/view/Xd3GWn",[438],[495],{"type":386,"value":492},{"type":386,"value":497}," excellent explosion",{"type":377,"tag":382,"props":499,"children":500},{},[501,507],{"type":377,"tag":434,"props":502,"children":505},{"href":503,"rel":504},"https://www.shadertoy.com/view/Xss3DS",[438],[506],{"type":386,"value":503},{"type":386,"value":508}," inspiration",{"type":377,"tag":382,"props":510,"children":511},{},[512,518],{"type":377,"tag":434,"props":513,"children":516},{"href":514,"rel":515},"https://www.shadertoy.com/view/MdfGRX",[438],[517],{"type":386,"value":514},{"type":386,"value":519}," incredible fire clouds",{"type":377,"tag":422,"props":521,"children":522},{},[523],{"type":386,"value":524},"Additional shaders, lightning:",{"type":377,"tag":378,"props":526,"children":527},{},[528,538,548,558,568],{"type":377,"tag":382,"props":529,"children":530},{},[531],{"type":377,"tag":434,"props":532,"children":535},{"href":533,"rel":534},"https://www.shadertoy.com/view/lfySRz",[438],[536],{"type":386,"value":537},"Noise as Electricity rays",{"type":377,"tag":382,"props":539,"children":540},{},[541],{"type":377,"tag":434,"props":542,"children":545},{"href":543,"rel":544},"https://www.shadertoy.com/view/MdSGW1",[438],[546],{"type":386,"value":547},"Lightning spark",{"type":377,"tag":382,"props":549,"children":550},{},[551],{"type":377,"tag":434,"props":552,"children":555},{"href":553,"rel":554},"https://www.shadertoy.com/view/dsXfDn",[438],[556],{"type":386,"value":557},"fbm lightning",{"type":377,"tag":382,"props":559,"children":560},{},[561],{"type":377,"tag":434,"props":562,"children":565},{"href":563,"rel":564},"https://www.shadertoy.com/view/st3fRf",[438],[566],{"type":386,"value":567},"Lightning Shader (v1)",{"type":377,"tag":382,"props":569,"children":570},{},[571,578,580],{"type":377,"tag":434,"props":572,"children":575},{"href":573,"rel":574},"https://www.shadertoy.com/view/4scGWj",[438],[576],{"type":386,"value":577},"Electro",{"type":386,"value":579},"\nPlanet: needs an image? Apparently only normals (no color, e.g.) Possible to vary lighting (appears so)? ",{"type":377,"tag":434,"props":581,"children":584},{"href":582,"rel":583},"https://www.shadertoy.com/view/XsGBDt",[438],[585],{"type":386,"value":582},{"type":377,"tag":587,"props":588,"children":590},"pre",{"code":589},"#define SCALE 0.85\n\nfloat map(vec3 p) {\n    float lat = 90. - acos(p.y / length(p)) * 180./PI;\n    float lon = atan(p.x, p.z) * 180./PI;\n    vec2 uv = vec2(lon/360., lat/180.) + 0.5;\n    return texture(iChannel0, uv).x;\n}\n\nvec3 normal(vec3 p) {\n    vec2 e = vec2(1,0)/1e3;\n    p += 0.01 * vec3(\n        map(p + e.xyy) - map(p - e.xyy),\n        map(p + e.yxy) - map(p - e.yxy),\n        map(p + e.yyx) - map(p - e.yyx))/ (2. * length(e));\n    return normalize(p);\n}\n\nvoid mainImage( out vec4 fragColor, in vec2 fragCoord ) {\n    vec2 p = (2. * fragCoord.xy - iResolution.xy) / iResolution.y;\n    float lat = 15. * sin(0.1 * iTime);\n    float lon = 7.5 * iTime + 100.;\n    if (iMouse.z > 0.) {\n        lat = 90.  - 180. * iMouse.y/iResolution.y;\n        lon = 180. - 360. * iMouse.x/iResolution.x;\n    }\n    vec3 camPos = 10. * vec3(sin(lon*PI/180.) * cos(lat*PI/180.), sin(lat*PI/180.), cos(lon*PI/180.) * cos(lat*PI/180.));\n    vec3 w = normalize(-camPos);\n    vec3 u = normalize(cross(w, vec3(0,1,0)));\n    vec3 v = normalize(cross(u, w));\n    mat3 camera = mat3(u, v, w);\n    \n    vec3 dir = normalize(camera * vec3(p / SCALE, length(camPos)));\n    float dist = iSphere(camPos, dir, vec4(0,0,0,1));\n    fragColor = vec4(0);\n    if (dist > 0.) {\n        vec3 q = camPos + dir * dist;\n        float c = map(q);\n        vec3 n = normal(q);\n        float light = clamp(dot(n, normalize(vec3(-4,1,2))), 0., 1.);\n        float heat = clamp(2. / pow(iTime, 2.), 0., 1.);\n        fragColor = light * mix(vec4(0.58, 0.57, 0.55, 1), vec4(0.15, 0.13, 0.1, 1), smoothstep(0., 3., c));\n        fragColor += 5. * c * heat * vec4(1., 0.15, 0.05, 1.);\n    }\n    fragColor.rgb = mix(fragColor.rgb, vec3(0), smoothstep(SCALE - 4./iResolution.y, SCALE + 1./iResolution.y, length(p)));\n    fragColor.rgb = pow(fragColor.rgb, vec3(1./2.2));\n}\n",[591],{"type":377,"tag":592,"props":593,"children":594},"code",{"__ignoreMap":369},[595],{"type":386,"value":589},{"type":377,"tag":422,"props":597,"children":598},{},[599,601],{"type":386,"value":600},"This one has an atmosphere, moving clouds, and two stars with impressive eclipse effect: ",{"type":377,"tag":434,"props":602,"children":605},{"href":603,"rel":604},"https://www.shadertoy.com/view/XsjGRd",[438],[606],{"type":386,"value":603},{"type":377,"tag":422,"props":608,"children":609},{},[610,612],{"type":386,"value":611},"Unrelated amazing water: ",{"type":377,"tag":434,"props":613,"children":616},{"href":614,"rel":615},"https://www.shadertoy.com/view/wldBRf",[438],[617],{"type":386,"value":614},{"type":377,"tag":422,"props":619,"children":620},{},[621],{"type":386,"value":622},"Claude authored vertex shader for keeping mesh at constant size, untested:",{"type":377,"tag":587,"props":624,"children":626},{"code":625},"shader_type spatial;\nrender_mode unshaded;\n\nuniform float size_factor = 1.0;\nuniform float min_distance = 1.0;\nuniform float max_distance = 10.0;\n\nvoid vertex() {\n    // Transform the vertex to view space\n    vec4 view_pos = MODELVIEW_MATRIX * vec4(VERTEX, 1.0);\n    \n    // Calculate the distance from the camera\n    float distance = length(view_pos.xyz);\n    \n    // Clamp the distance between min and max values\n    distance = clamp(distance, min_distance, max_distance);\n    \n    // Scale the vertex based on its distance from the camera\n    VERTEX *= distance * size_factor;\n    \n    // Apply model-view-projection transformation\n    POSITION = PROJECTION_MATRIX * view_pos;\n}\n\nvoid fragment() {\n    // Set the albedo color (you can modify this or add textures as needed)\n    ALBEDO = vec3(1.0, 1.0, 1.0);\n}\n",[627],{"type":377,"tag":592,"props":628,"children":629},{"__ignoreMap":369},[630],{"type":386,"value":625},{"type":377,"tag":632,"props":633,"children":635},"h4",{"id":634},"explosions",[636],{"type":386,"value":637},"Explosions",{"type":377,"tag":378,"props":639,"children":640},{},[641,650],{"type":377,"tag":382,"props":642,"children":643},{},[644],{"type":377,"tag":434,"props":645,"children":648},{"href":646,"rel":647},"https://www.shadertoy.com/view/lcKGRc",[438],[649],{"type":386,"value":646},{"type":377,"tag":382,"props":651,"children":652},{},[],{"type":377,"tag":654,"props":655,"children":657},"h3",{"id":656},"trying-to-get-some-things-to-glow-other-things-to-not-glow",[658],{"type":386,"value":659},"Trying to get some things to glow, other things to not glow",{"type":377,"tag":422,"props":661,"children":662},{},[663],{"type":386,"value":664},"You discovered that the UI elements in your experiment (the grid in Ares) were glowing. You tried many different ways (custom shader? complicated pipeline using scary new under-documented compositing in godot?) You wanted to keep the specular highlights glowing and the “engines” glowing, but exclude the UI elements.",{"type":377,"tag":422,"props":666,"children":667},{},[668],{"type":386,"value":669},"Answer was to keep the worldenvironment glow HDR threshold at 1 (makes sense) but to:",{"type":377,"tag":671,"props":672,"children":673},"ol",{},[674,679],{"type":377,"tag":382,"props":675,"children":676},{},[677],{"type":386,"value":678},"for specular: up the “energy” of the directional light above 1 and",{"type":377,"tag":382,"props":680,"children":681},{},[682],{"type":386,"value":683},"for glowing engines: don’t know how to do it for a glow map, but for a simple emissive color (should suit our needs), in blender, set the material emission strength to a “value” and enter some high number above 1 (I assume, I used 4)",{"type":377,"tag":685,"props":686,"children":688},"h2",{"id":687},"_3rd-person",[689],{"type":386,"value":690},"3rd person",{"type":377,"tag":422,"props":692,"children":693},{},[694],{"type":386,"value":695},"Not that you’re doing it, but Google fair fight godot YouTube “",{"type":377,"tag":685,"props":697,"children":699},{"id":698},"image-to-2d-collision-shape",[700],{"type":386,"value":701},"Image to 2D Collision Shape!",{"type":377,"tag":422,"props":703,"children":704},{},[705,707],{"type":386,"value":706},"From ",{"type":377,"tag":434,"props":708,"children":711},{"href":709,"rel":710},"https://youtu.be/zeYtjYPjCkg?si=KhbpY4eVneB8EG7O&t=224",[438],[712],{"type":386,"value":709},{"type":377,"tag":587,"props":714,"children":719},{"code":715,"language":716,"meta":369,"className":717},"func SpriteToPolygon():\n  var bitmap = BitMap.new()\n  bitmap.create_from_image_alpha(\n    get_parent().get_texture().get_image()\n  )\n\n  polys = bitmap.opaque_to_polygons(\n    Rect2(\n      Vector2.ZERO,\n      get_parent().get_texture().get_size()\n    ),\n    epsilon\n  )\n\n  for poly in polys:\n    collision_polygon = CollisionPolygon2D.new()\n    collision_polygon.polygon = poly\n    add_child(collision_polygon)\n\n  if get_parent().centered:\n    collision_polygon.position -= Vector2 (bitmap.get_size() / 2)\n    collision_polygon.position += get_parent().offset\n","gdscript",[718],"language-gdscript",[720],{"type":377,"tag":592,"props":721,"children":722},{"__ignoreMap":369},[723],{"type":386,"value":715},{"type":377,"tag":422,"props":725,"children":726},{},[727,729],{"type":386,"value":728},"Random recommended extensions ",{"type":377,"tag":434,"props":730,"children":733},{"href":731,"rel":732},"https://www.reddit.com/r/godot/s/O2eVtikL0Z",[438],[734],{"type":386,"value":731},{"title":369,"searchDepth":736,"depth":736,"links":737},2,[738,740,741],{"id":656,"depth":739,"text":659},3,{"id":687,"depth":736,"text":690},{"id":698,"depth":736,"text":701},"markdown","content:notes-to-self:godot-exploration.md","content","notes-to-self/godot-exploration.md","notes-to-self/godot-exploration","md",{"_path":749,"_dir":367,"_draft":368,"_partial":368,"_locale":369,"title":116,"description":750,"slug":117,"date":751,"dateString":752,"encrypted":368,"encryptedBody":372,"body":753,"_type":742,"_id":922,"_source":744,"_file":923,"_stem":924,"_extension":747},"/notes-to-self/hdhomerun-connect-duo","Does not have built-in wifi. Can only connect via ethernet. Also needs to be directly connected to antenna. Your house’s router is in the basement, terrible place for an antenna.",1735146000000,"2024-12-25",{"type":374,"children":754,"toc":919},[755,759,764,769,780,785,793,804,813,819,824,829,834,839,849,868,880,894,899,904,909,914],{"type":377,"tag":422,"props":756,"children":757},{},[758],{"type":386,"value":750},{"type":377,"tag":422,"props":760,"children":761},{},[762],{"type":386,"value":763},"Connect it to a device to make a wifi bridge so it can be placed anywhere?",{"type":377,"tag":422,"props":765,"children":766},{},[767],{"type":386,"value":768},"To get IP address:",{"type":377,"tag":587,"props":770,"children":775},{"code":771,"language":772,"meta":369,"className":773},"cat /private/var/db/dhcpd_leases\n\n{\n    name=HDHR-1096506C\n    ip_address=192.168.3.2\n    hw_address=1,0:18:dd:9:65:6\n    identifier=1,0:18:dd:9:65:6\n    lease=0x676c58e4\n}\n","shell",[774],"language-shell",[776],{"type":377,"tag":592,"props":777,"children":778},{"__ignoreMap":369},[779],{"type":386,"value":771},{"type":377,"tag":422,"props":781,"children":782},{},[783],{"type":386,"value":784},"To forward ports:",{"type":377,"tag":587,"props":786,"children":788},{"code":787},"#!/bin/bash\n# bit-torrent port forwarding with mac os x\nkillall -9 natd\nsleep 5\n# The following will forward 6881 to 6999 port to desktop computer located at 192.168.2.2\n# 192.168.1.100 => airport IP\n# 192.168.2.2 => Desktop client ip\n#  natd provides a Network Address Translation facility for use with divert(4) sockets under FreeBSD.\n# -------------------------------------------------------------------------------------------------\n/usr/sbin/natd -alias_address 192.168.1.100 -interface en1 -use_sockets -same_ports -unregistered_only -dynamic -clamp_mss -enable_natportmap -natportmap_interface en0 -redirect_port tcp 192.168.2.2:6881-6999 6881-6999 -l\n",[789],{"type":377,"tag":592,"props":790,"children":791},{"__ignoreMap":369},[792],{"type":386,"value":787},{"type":377,"tag":422,"props":794,"children":795},{},[796,798],{"type":386,"value":797},"via: ",{"type":377,"tag":434,"props":799,"children":802},{"href":800,"rel":801},"https://www.reddit.com/r/HDHR/comments/o4tuls/hd_homerun_to_plex/",[438],[803],{"type":386,"value":800},{"type":377,"tag":805,"props":806,"children":807},"blockquote",{},[808],{"type":377,"tag":422,"props":809,"children":810},{},[811],{"type":386,"value":812},"There are four ports open on the HD Homerun: 80, 554, 5004, and 8888. You should be able to use remote port forwarding to expose these ports from the remote system on a client in your Plex server's subnet to make this work.",{"type":377,"tag":654,"props":814,"children":816},{"id":815},"change-in-strategy",[817],{"type":386,"value":818},"Change in Strategy",{"type":377,"tag":422,"props":820,"children":821},{},[822],{"type":386,"value":823},"Evidently, the data emitted by the device is to heavy to go over normal wifi — it is not compressed or not very compressed. So trying to forward its ports is not productive as a means of making a wifi bridge.",{"type":377,"tag":422,"props":825,"children":826},{},[827],{"type":386,"value":828},"However, by connecting it to a computer running Plex server, where the Plex server is connected to the household network over wifi and the device is connected to the Plex server over ethernet, the Plex server can both receive the uncompressed data from the device, and compress it and stream it over wifi.",{"type":377,"tag":422,"props":830,"children":831},{},[832],{"type":386,"value":833},"This works! However you are still struggling to get consistent reception, at least for channel 25 (Fox) where Super Bowl will be broadcast.",{"type":377,"tag":422,"props":835,"children":836},{},[837],{"type":386,"value":838},"Your house has some vestigial coaxial cabling outside on the west side of the house. You are wondering if an outdoor antenna pointed north could be attached to that cabling?",{"type":377,"tag":422,"props":840,"children":841},{},[842],{"type":377,"tag":434,"props":843,"children":846},{"href":844,"rel":845},"https://www.amazon.com/GE-Directional-Mounting-Included-33692/dp/B00DNJZ58M/ref=pd_ci_mcx_mh_mcx_views_0_image?pd_rd_w=GZRtJ&content-id=amzn1.sym.bb21fc54-1dd8-448e-92bb-2ddce187f4ac%3Aamzn1.symc.40e6a10e-cbc4-4fa5-81e3-4435ff64d03b&pf_rd_p=bb21fc54-1dd8-448e-92bb-2ddce187f4ac&pf_rd_r=PG4XTZT6NVXYG798K3Q9&pd_rd_wg=JveeY&pd_rd_r=8d9919f9-62de-48ec-bd16-e34e4318c06d&pd_rd_i=B00DNJZ58M",[438],[847],{"type":386,"value":848},"You were looking at this antenna",{"type":377,"tag":422,"props":850,"children":851},{},[852,859,861],{"type":377,"tag":434,"props":853,"children":856},{"href":854,"rel":855},"https://www.amazon.com/Antennas-Direct-ClearStream-Multi-directional-Adjustable/dp/B074CQ5LCJ?th=1",[438],[857],{"type":386,"value":858},"This $100 indoor/outdoor one",{"type":386,"value":860}," was ",{"type":377,"tag":434,"props":862,"children":865},{"href":863,"rel":864},"https://www.consumerreports.org/electronics-computers/tv-antennas/tv-antenna-review-top-picks-from-consumer-reports-latest-tests-a2799732155/",[438],[866],{"type":386,"value":867},"CR’s top Pick",{"type":377,"tag":422,"props":869,"children":870},{},[871,878],{"type":377,"tag":434,"props":872,"children":875},{"href":873,"rel":874},"https://www.amazon.com/dp/B074TWSQFM",[438],[876],{"type":386,"value":877},"This $25 indoor antenna",{"type":386,"value":879}," is the wirecutter’s pick (it was CR’s third).",{"type":377,"tag":422,"props":881,"children":882},{},[883,885,892],{"type":386,"value":884},"You got ",{"type":377,"tag":434,"props":886,"children":889},{"href":887,"rel":888},"https://www.amazon.com/gp/product/B00KWFOLH6/ref=ppx_yo_dt_b_search_asin_image?ie=UTF8&th=1",[438],[890],{"type":386,"value":891},"your antenna",{"type":386,"value":893}," in 2016. Would a new antenna just be more of the same?",{"type":377,"tag":422,"props":895,"children":896},{},[897],{"type":386,"value":898},"You are going to try setting it up in Simon’s room (2nd floor, NW corner). Many articles state to just try moving around arbitrarily.",{"type":377,"tag":422,"props":900,"children":901},{},[902],{"type":386,"value":903},"![[Pasted image 20241226114241.png]]",{"type":377,"tag":422,"props":905,"children":906},{},[907],{"type":386,"value":908},"Although you couldn’t get both ABC and main PBS (channel 2) you found a spot on Simon’s west wall where you could get NBC, ABC, CBS and Channel 25 (Fox),  mostly hidden by his bunk bed. Moving inches up and down changed whether ABC or PBS was received. North wall had better PBS, but no Fox (I believe). Ideally you would get some small computer (~$250) as Plex server but for now you are using 2014 iMac as Plex server physically connected to HDHomerun Connect.",{"type":377,"tag":422,"props":910,"children":911},{},[912],{"type":386,"value":913},"Watched entire football game on ABC. Experienced 1-minute glitch coincident with large flock of geese (!) but otherwise fine. Not as crisp as YouTube TV or as uncompressed single direct-to-TV OTA signal but acceptable.",{"type":377,"tag":422,"props":915,"children":916},{},[917],{"type":386,"value":918},"Using power for antenna may be unnecessary? Might help get more channels, but the four we care about seem OK without it?",{"title":369,"searchDepth":736,"depth":736,"links":920},[921],{"id":815,"depth":739,"text":818},"content:notes-to-self:hdhomerun-connect-duo.md","notes-to-self/hdhomerun-connect-duo.md","notes-to-self/hdhomerun-connect-duo",{"_path":926,"_dir":367,"_draft":368,"_partial":368,"_locale":369,"title":185,"description":369,"slug":186,"date":927,"dateString":928,"encrypted":368,"encryptedBody":372,"body":929,"_type":742,"_id":971,"_source":744,"_file":972,"_stem":973,"_extension":747},"/notes-to-self/movies-to-watch",1731776400000,"2024.11.16",{"type":374,"children":930,"toc":969},[931],{"type":377,"tag":378,"props":932,"children":933},{},[934,939,944,949,954,959,964],{"type":377,"tag":382,"props":935,"children":936},{},[937],{"type":386,"value":938},"The Witch (2016) horror? No jump scares. Anna Taylor-Joy",{"type":377,"tag":382,"props":940,"children":941},{},[942],{"type":386,"value":943},"Jackie Brown (1997) Good like pulp fiction",{"type":377,"tag":382,"props":945,"children":946},{},[947],{"type":386,"value":948},"Theater Camp (2023) like waiting for guffman but less funny. Sedaris cameo",{"type":377,"tag":382,"props":950,"children":951},{},[952],{"type":386,"value":953},"The Thing (1982) for Oscar also the original The Thing from Another World",{"type":377,"tag":382,"props":955,"children":956},{},[957],{"type":386,"value":958},"The Lady Eve (1941) screwball comedy Barbara Stanwyck",{"type":377,"tag":382,"props":960,"children":961},{},[962],{"type":386,"value":963},"Invasion of the Body Snatchers for Oscar",{"type":377,"tag":382,"props":965,"children":966},{},[967],{"type":386,"value":968},"In a Lonely Place (1950) drama “Bogart turns in perhaps his finest screen performance“",{"title":369,"searchDepth":736,"depth":736,"links":970},[],"content:notes-to-self:movies-to-watch.md","notes-to-self/movies-to-watch.md","notes-to-self/movies-to-watch",{"_path":975,"_dir":367,"_draft":368,"_partial":368,"_locale":369,"title":287,"description":976,"slug":288,"date":977,"dateString":978,"encrypted":368,"encryptedBody":372,"body":979,"_type":742,"_id":1010,"_source":744,"_file":1011,"_stem":1012,"_extension":747},"/notes-to-self/sound-effects","BBC Sound Library - only for personal use but can be bought via sound effects for $5 via https://news.ycombinator.com/item?id=41646238",1727280000000,"2024-09-25",{"type":374,"children":980,"toc":1008},[981],{"type":377,"tag":422,"props":982,"children":983},{},[984,991,993,1000,1002],{"type":377,"tag":434,"props":985,"children":988},{"href":986,"rel":987},"https://sound-effects.bbcrewind.co.uk/search",[438],[989],{"type":386,"value":990},"BBC Sound Library",{"type":386,"value":992}," - only for personal use but can be bought via ",{"type":377,"tag":434,"props":994,"children":997},{"href":995,"rel":996},"https://download.prosoundeffects.com",[438],[998],{"type":386,"value":999},"sound effects for $5",{"type":386,"value":1001}," via ",{"type":377,"tag":434,"props":1003,"children":1006},{"href":1004,"rel":1005},"https://news.ycombinator.com/item?id=41646238",[438],[1007],{"type":386,"value":1004},{"title":369,"searchDepth":736,"depth":736,"links":1009},[],"content:notes-to-self:sound-effects.md","notes-to-self/sound-effects.md","notes-to-self/sound-effects",{"_path":1014,"_dir":367,"_draft":368,"_partial":368,"_locale":369,"title":344,"description":1015,"slug":345,"date":1016,"dateString":1017,"encrypted":1018,"encryptedBody":1019,"body":1020,"_type":742,"_id":1032,"_source":744,"_file":1033,"_stem":1034,"_extension":747},"/notes-to-self/what-god-quantum-mechanics-and-consciousness-have-in-common","John Horgan",1725465600000,"2024-09-04",true,"HrpAMOxEx_-hLcIP5oFEqNIq5Igjx95e4PX13vyEV3IUBdxYI0wsUiflFxQvh2YcQ2iSgSVC9mVXSxqURku_sy0-RwzmGaWZb-9AT2Lrl7ga6vEE65KMsokc4TEWSkcvPp5iFlIBzEIJPnpEZMmRo7QWjHFJO7dGv2t9-DwUxHQgjOH-b_b0ozTzZG6cdaajSr0dGSBBg6bWmPPIA-sA8bYYuRemTfmGblKBebK1FYXvuhbGGlvGV-_NkFHTKVauoWHuqi_w6_jR-3JJQvZpAD3YTajoxSZlQ-XwTqEHJ9qt51cUUZp0otCpJQq48EzAa7Y3wAo4pqWDIxP-krd_uV5PVRiWi-23qI_wjvueaK3jZWBUER9lkaDpFBZjrCnFdnuh5MFds6IrLzdQLK_QCCH3RmLQaIg8zXYFuSaktBSnzx_5QBUYTYMHYpGv_DpXtLveyBmEhbUEyyKowNhy177q2ZT1-3TpXGCMuJsaCKcXs0PARSRFISkvHIP7o3CpxD2S8gFcz2oSrsjZ0sVLU0ElSfqEKV0WznLA3SjN_GHuBlJg2nflvZAih_ExYlfixARAno8RyoWL3TrBSxlORdYqGrNDCAHHJP_Vn21IWOckUzDUyiuuS7XFTDcc17kpRbH9N3i4J60raeqIBPwc6XJNHM89fgWP1_jTSq36qq4qTqU2lBQSxW9WeXq_rTeVmTtqZIk7A2Ht45xc0aPscdfDgC8FZQg14TaM0Gq5K6Lk4R6qiwXDhW-kiZWZo8a9MUak_1TPmS5Z2liJG0lczTXPN2vXgrlmt9GXXcDwr19rtC6PQ7iAwM9rQdcCOWiNpUhvA8Q7EoXY5V1gewZS1Y_EuK6KSrwWEnaDAhkM5vM1b2r3q4KDRi2s679v_5OGQeBME8QB5QSr6wsNdwPchPldAn4--kTCmgY8yePZRmMEhg7wxB4BP0ha8irkErAAaVDqit8yNe1eiIx2nyaNL7D8JOCR7arwRoPNzDdvIgRX_YbOWdryNfVydO_4yBpeV3QOT8qhxLBoL7u76y4XyXpHNEODC4uV7PqRJoIeiBBTK77uBtO8g5PmZj-mAYTbbQMpibBXfCKP4EV8sIl61D0yjL-lOEHBqJEGf5kPwoGbmQUGMv216ioUjkmPq8nuuGk07JZ_NuohteN1B4vhSz_kAaH6bKU7qqaeh6M93MslPk2UjMFAG4LIPwk7Uc7JjR-kjJ-O-wJUCIqKwyKK8n3RCAYtTyCI15cZfOVLBrjHE3ucgMWKYfsXUzTq9uz7TBl06HVtI3HwUX4egvj_OTUJXjSD8wtGsFiRPAAcsYKCqaT-j1RcJhRxC1xkn9m68MLx3QMNSpJZ6vOAVCM2MuU79YD5510Zbq16lRPJPO1e_eQ22jKYSLuEOONztmC4xJYGjrGWl1hflB4PJr1dkAQDvpP25nlKSN79hyevpckOd1vtrB_Mvu4TNgFEpsu3VIKDh0fKTnk489GrXzTYkrtSKyfZ2Fw_8evnqAWnaVwirgDz3y3Yh0hT6JzNJphYmaLZH8oiZor4njWj-AJvC2554V9PVEIjmOjTNIWqvhRp-9s8I_CHbhHrr3_xJ2Acv7fno9fHIWoOKZbz9R_-7D9pCb7wPr8PaNnlr-AdI_cttOOQDPlswvtzRIgazwcumTGzjPFy3yyZz_UIaTatUdzMDi5ZeDDT4zwvuQG1ZoV4En5wmJVreqfTWxFFl2BK4txa1Xpn_o0NW3wDDdIll4xbEwIxWuSMKXFR6DgkYoZC8SdYwbkLB6Qe3bN3XOW9cwCDFAUCrr8lOmuwH24eth8KTnShV2Db-MeZinxGUK6QfJUcAyDl5yk-9Y0X53nL_i-7LJxeiMrAeC5u2eVPwhJZuWnlEFHTQzM2vgKols9dEK9bJrvTur1yooTxO_w7PvDJPTHBy4cIjclsgXHyLuh8tOsyUe-cTVWxJsOi2AwkrDxJBtDuRmtLwMssCmIpph4AL-c-_dih1kjQ0oCLTjBPodPSLk7OM0TXMFZGzkDWv8DUzS-0IR-SSV4nWqwuJS6pIWY_HqL2SMqxOSZPKAaP8S9dqxYn3kgDLnqt3gFJ85Ucyb9oHxgAr6Wg6JkH7-kPChQc3GT4xmwnm9DIHV1iXwTUkifCj1oi5ymEq3aQhd3WdYb3hEYiQL44v2EapQfRvKokcd9RXAzzvb5wg_oR0ioovOG8Hv7WCX_mQVI9c4HL204afPSX6UhyK7faBCbcRGA6IN72gbI0NQTnu0PJs5EgIZmBlkrcc8JVL8JJ77IFGoKRu8FrZOvYpcVza7f-wHIFGwLHexjOtDAG1pri1ocm91EhY1oOdUMMgGxz8461Gdjr8cbgdnz2K-r2j_0Hb97NNbHPuGV0DSfEU4ltqQZZRNpIcyJjq3_10jcZXr3lFMLRKMsRf-V7VToqHaP1AeHDQMJWw6CXdf1FR85ZEB3lJKKh0ekwW3wPXfX4SvCv7FavYTTBIf-AGhBtYKwcZQnfcZoWfPJec12OAEFEusi0j2LzmiOsuYYeBANEi5uG4MmepgCMbmGbLyGgDvF06IDkj35_JZlTvqhyumSo3pvbbQWbXGmglf6Ymo1JrnPn060ehkYBsVUBO12XHyKo6v9e5K41_v31BCb3EOwRmz1ORISx-ANkTLJDaoeu7qD7brfPxi_aBVpHaZ1JlQeVn1v6pQpX5_7cyxKhRw6HNjacfEPFgVDj1GAtlhyfOZyrFx_BnsQ6XcvZHXiHlzs1xnccvjJXcEflYS2rQOx_PTHI0TM2OZOMn0g-nZtiucH5i_5r3R73Yu2JQU5YF6x1UVkqsw9zEHTL-pgomHn5hXRuAcQXUYDAb7PXEdCQr7XmDXMT64B9orFI1PcJ-j3lL2hGAPW3i41WEcCEoMm07j5DDLMxHYQWnptMOt8NdNJwTDaNu4yfJOuP2pVnqO4HWIBN4fUvXXnbcNEbttK3lStekEzJyxY5AhQG9K4uS5O6YBllDcMQlzKQuXeTkRDhnjB82dsBvIYkm8muQRhFpxIKr1mnlm0d45M8rBkdGBLDAVD1PR8chO0f11HNyvMBRrfRCSNa90zoJWVKGZJGMQPvZ2GuBItogOqOUhRrifau-AUjG85hzpv7nQuCWOa385iEH7j6IppiH9lLTHhxj8g0T7Xcw9T9mZ4BfY2Pgu252LPQ2RgXKY5JFsv0KewgKMW9E6RALbPpWiH-6GSb_j5J_sM1nJ-icwifV4PS5DOizw7YwSfQuSpodKm_FwoUQIcm-Aqkw3RuR2gBUb3iB6WbZG_EbkS2LtWs0s2GTy51PLdPpCiPYV99dLEBiEfvsJHgDZU5ceR9tT1N_LPbDy5fRgBA3PT5Kts6GUVTshW25xFMcx3qzdfmPN4YNufON7CMuusCtc87w1zk1gPoC3Jycl3DZvk_7VrzDiykwRnyDO0CXb85596bwBsZlsNsXjRMjH6DqFXWu80fZ-khyUEF9BzY-S_3cemMDNyJBosJzSsu0lfMqnI2-Kx3TgEwBuZvaHg-w7-8Wl56Cvy-8RNcdlXYNPFzXIXwDpLexieYO5UBLJq2O3W4U8EhMxdMPID-pYTNtxQYzay2jgkoQG7jsIehl4FEv62Z4QxyDAoZevzCLxnLZC64yuoK7cjbwZTQwd0nCCcQy7MWojm_1IjhATc4T_sIkOHvVJxp0wT5GFa_Xd_wo_rU0eKrNMO7cRQ5Bm_VQIH-IrVXaLvP9tKzZBhIlS14RVi-VCK3PRO4dVgbaTAIy_HXhDt1_TTuZrlMVFwP4BjZ-LSKDb0hT0cxvxuROwekTR3QCenofMVXSf6ErEzxRJuzlCxyBDuq15f_absKTxD7h_W-aptu-7G_8R0wohk53K7Oyp2XgNMVRYEH7TiF68BUjtWCNLfAzw_vd936Sg7-SsRsgrlk13D_wF7o_SRdl2r9vdXixtrS-OjZbzHGg9FXMMv55hgpChTWBJ8d6QAKh4kChA-H8-_4G-XLqqHn9MoRjiaB3VDr0zGMmdOxdUtomNbT4ScsnzBIUJq3aFmdGD_2DoI-1n5qrnowfUMUtbR53qWPMJqNNMqaceHSVsZ3d4pu5i4PFcs-GgvTJQiM8goCc5PYHf3hKZJQTzyKBoIlksTPgi_wy0NWjaK6rs_2HogmwkLuj451zn8B3Gq_HypHIl8Xg5OXHKEG2M0i2IgEHPXq31XXCjMbrAIFPMrnDVHLrSFs4BtDmKhPykvcW-hRYmg6WwFuqyIgmkkguOcHcvwc7O5MHLcpdl__d3-_OZ6GCGLObVQUANYSLkDkXsTVAqxYDSv5CseExfwCLlPzH8b0b1Sj4VZyjs_Xae4ZjSkfJ-1J86dwqe6WvjajZ_Kz0m3Q3h0KnrWBdiQEEv5i8PNfGFsV6XFLsYCLLyiiHTkHkpB67xd_XeNKRAkSZ0uQQgcmdh4X_NJFrPBSFwMgy77tD-ARBZlPtgoW8Imhc3UuusEWbOurAcYvmlz5bf084TPLEer5GgcQPoIjaiSUUL-rnvgHQJbxjFMaD_GuVVtn8IEFPuL6fI111-UK2tJ1pORt5kjPvuxIRis6nu7fwKaUVYVUoZCaLxbZVOCKF-ofsIYSnfi2z7qBd3KiSBTgNn7SJVo85YjKCd59IjcFoW-NpZNkRBmH0dyoq6R7P0-Ib9VoIZSYlUcDlQEW6i8zQLmuXQHefeQ1-W0v8ozNgceGwkFXuYLXjQuqwzJeZvS5YK-u6-E5Om2z5iQ6e7DpK0n5JncICJG9YgxheLt9PzD3cxwSVuWd1sRy7Vm4RHa4nEyL94GLeIlqWrZHtkAHvtegY2CgvfUEdVw_-pjdrzS967Z7zOfIlnWGzFBeLvJ4htoyCrCDm_0EtLhuDdWJBvdoVzqyN3nEhf89cHB8GMP9NDBO5sODpljo--spbLP1V_WujZyOO-AV238HfjjyGttzolQn34UTjymEhNBU52Yzi_tUTJwbdSJQQLMkUPVD0Uqr2Sg42jGkyiO5LehMKf-ZeU-BSrDTDCaRjycNZW-1EWKYxt5qqkOf7kRUILm0r4QLCfiHcfldJkrTv2iMBVL3oH5PXs4cQy4GGw25so6mqZBJxHzlxpyR7iQ91JyIAt4R_GLr9bHpy1t6E0ImWszEsD8URLNi5oZP9EmK-kTeVJFmj7f9A1qcwqkGGHSTXUylUrA5dH-Fvca67qroUrbC8s8eBuCDg04wPKBmfY1hBNngGOmk21fyzdXtHSoNGDmrkON7kBfHvewH8JDvUR4l5qRIDKzfVTtWGes6qS8cK3W0QRF-7P6dmecEwtWKqKnmtdEttMrwC4SKytNZwl9p8-YhC1RIDFmWfDbcfMXs8u0iquIr95KrN8iXXTlxhsEFSjNgOna5pGlyuyp7jvLtsQc4ngXJND7yjXgPh7f8O_DKKo8L0uQKU0wbGPt-GI5hUqT-A3qRGafXjq09-hLJ7GtPfXBiRegepS-8Q8AtZFpT4TLMFsH-riEsxzLODXchLcw4LD6tYKXPqjkK6FWCEOjAiiMM-cgja4uGyZhjCfpZW1fVGPZ1ztvVNUV8-QN0K0FK1DG4PvoxX10_bOEq386QE7JsvhfszgiqIV76jV8Da5JBWeAsB0qHATNHIXsQQNOebB6aENmhioFwkF9mie9lQuxSF6on_Lb_26k93gm0u7eUCQMpUn20zeWcWkMuuBTVmcxAs0OVeAyex-bOTtu6ota5m02sYoZEFziqmS9W5febCugdtWaHv9zub5X-E4DjKjo2LPMCusl72bM3NN4i7IoIJnaA-UV_KKp7Cxz4RDZuBCkoj8mUQ8gm7sTco_fdzdRaOiGZLAorwwUO6jovNnUIePV1FQ3sz0Wu8Ua50ziifgSoU6Utph2xaQdbHb52cMHQRPTSc1LN7Y0iUFziyqytn0hIKj36YzqQsrERCR6_A8LHlVWhEW1Xmqf8rgkOKbX34cAg8YZ6IrMezTBILdacOwPswPmvCXWOcnICpjGmaN_2i-eVcEzef3iO0wSBhZsj3YSfAqZS3Zl2irliX6Dk3-GE4hNqp1B1XNc7O_aou125_TC51PdRqUU3X1JyVRVIMfJwN4ieSaVNO4t0I-YiFuMV-GuS5c7_7BdCu-IOkFG1i09ZSP0w5Tlia5YItpJMAeLU6PF3l055j3xrmGCLQ4VCv6UmBmsDbbf9LYvCdwxbFJk6BkTFlKE8xadceIPJ9uoAhkOQZupZxUAP47JwzokWvS9BlZZK5j_4kxo7plvX_EwAhcqNUsT_FTbHcvkZ2O0lrY_tKcmcMpJtpFg4za1U1r-NmBfshtcpDp3RMaJ9F2-HzzdWCsGs6BiCPUw1tlbmNeIJFbCUgwe4dtf_qKWefB8QpOVMe_FGEsikZr8KeXxFrBvV9lLRhSkpnaLArg0vnLq9YDdI-zViBxzUyy5b6KnmjTT1O_F-sYm-E3G2ULokJszdZenVPRMmNixykatn6k-7YIfohdB2sg2Jvzy0NO1X8J0qU8lB1IFsaBz1G-7dvT4ZC6Qe7CK0cf9fv8uK7TjUopLukU3gBmqWa1pQV4naZQUUED1GopTeQeqhBoAxWHaOMTzmEHnYZr0nmPdqcYPAi0Xtg8-uo5v198V0OUgHYD3dtcQwCEB-J6bebl0qExlzgf3C0nEjdPzUCSqijwVIU-JgElRIl8VQOuQmWlDtydu2m371FlfliuGqxoZ-DArpyK-TAaVnrwcea6rWCdtXuTAO394f-BxrE1VMwvdKGS2ww9mKdQai_IGkwO6iYTkaEkFNG9ayIl3PcSYcej3Uut7Aup834oZUq0w1oJCpGrAZLRGRCHhotw8OHzljpZrxWXtHguvKAT7ZiEiPZDOc3FX_1IwG4XT5YpkVm_yAIGtK5PYW9GOcGIUxPCV6FlEJfB0hEHgDH1_0nBmrHaidTpCZM_SgU5fl-nvsYfrje7fUVnF_ZlyqVhTED2F_2DKyy3ydft-D15s996sxqJpefGv8iPNoHwQn-H6rF2cp-misBTvF-ozJ6-DTSEPocrlPSvkrm2hOIyE1cE8U33PLXCqcbrEcgPT_28iOqm3RuJ-BKdiK4Jt_MnDE96OlL8YcqBcGkth8JUfExkt7pNAwsyYfucNheRDDYJTI96SdnGKS1I8dqfqdxmKfl30UFL6BdhVLWqkU9Ih6c2GVg--1RAAZfCGutcyBdCwfdANFaGsaY8fiz_DX662yIkazY0Mw2SrA3NomuZpdCEWpyd19z3RQLAgY1aSu9qIA9pP_qfnpqBhuKIiPAjJwbRup8sOEbNAnh0EbgWhNcWeusmL9SWxQr_FwKHm9RrZIpf3I25QtS2uaixrBr2TYCmoJop3dFH9M47V7LXCEFOuLL0RwpHyaD-pg9QteNvLCPBpdgTVeqpfnh5fbmfWajD9A9VLO0QChD9dOwrO8hzkYdlMsBcX05amHHqQD002QHwv3SGeBoQpG7WLAhqXFc41FIMi6sfGuR50446m5AeSpzxFYcbmpUExt6fDGGVf7FEwm78Qv2xnFq_Ygt4_jxKIlmmgrCaRVKfkTrG3HNBxP7KjNWpUAtQKsDcsB3MY1IbAsqUE0hUHS3lniSULkL5OBo2V6JaVby73-q1JKQkTqJ_-K59EaixamDJSM9Ui_XWlzYnK2O55LiEGu2doS-tHDagV6BBMvwG-3cgPfyAScaog1VmNg_bdAZUTy1QDXc7DMl2aMb4TYunDt722GzeM8uzj-ty5y3GwvQUC7hxDX28bJcdynhmj18sqJu-TQZ3i9BGKfg0p8hhOVb7azS9XS0XaKimrnbBDp43wnLIc7H_b-9VAhFqX2rwVtU5TsU_BY30oBh6_FuMJgFjHlpRRuFCwqHxb2ZZ_VAKlbBIiq-48RWyl-02wzlZffqe2dAbx-lzwgWI_c4sppTXrGuzuRdtYHTxkYNEFpbQ_YZH5BmhnYOF_ubYrXtrd9CReFlJ1KoVhp8U3bxwR4VToi1XNe-47Af-wQdnS6ukLZfAHLPe9TakX3pFrDEMO0a2F7Kab6kEDPm5PR66KWHlk3cr_ljPA73au18j8yA49UZEuTh0H9HgRYou3O2kN8dNcscKsS1auf91MhJ2UcrAzI5UgGs-SHMrdfxgQPT1Df79ldOrjN6Ue3Y4CsAz_2bTJhitsr5EUZ485Rj4wPkT7qxAHgXlab3Wx25cThDHgdanCwoxDl7r6IY1CI44wPfxIsLM74VLGZsjRF8EYlsNZDzkZXMfiSOwI2xnNXr0LuyPJNSewZRGc_gm_vBwQPG1yaOmHRY9uevqi_Sp6l50_I_MCI6IXxxopx5LOWEI6qFAc3ljj4Mq24ad4s9j3udNqmAq0JQ4M6cW9CcGvugzuCTBgDf1cyGjPURRGjybVmc6gk1lMtnVGT-6uA4TSSLySihdIYFwaltn1XNC9Xz-YFW-SAeeYHUEKxq3didxdVeh2kuFCqf-taW8Ci174jMMHhO5sGSI4z-_C2rA0gWNpbOz5i1YDurWwZGR95HzzKBrKaPutWYb0esdFM-FInC0L0tfeky7Fa9s8wNGutj3aXKkYAU4Rzpfz0a1fdhCjMjTqMLeesRn-y87RR0iVNR6pn9eBBysL_0fWWB_XPZEWRbjfrAtH8uCjRHJDB8Fux-Rg9Ar8D_sx0ef--rThB7ucwZD3X9SGBh7oXARmv_9R516UZeKh57tDCg1ReFTbikUHj2yZPl9fFlTWmec2aqgneLZg28AgCpcQc6U0uR5CCuiyKSamOn_bJVfUa8aLCk4lsdEZ7-cN3n7-6oGZDnfx8MGqmYfCZ05rm-pZaP-752-vXtBmLOV_7DiofOUVnG6RC8GfKU--k22ga_ThSDE4RsAd-YFewK1mtItDPTIYkNMKyd9EjtN4oac2NDMcniT-DB3FCSI_KthOMT6TjtFQudtXw6dKPJtCgvt9L5L2G2H0bZM6LmZfV8BD1Kj0ZuVFEdDI9OPw_w-rKdlqV4G1y19ZLjTBKMaICE0uE1nvbvG1lGcgi8Uu4LJDKzNNwY15RahHhfLe5pm95H-EtnvNCKY_pMMYwUziHKYcQLftgAvZi1z1YPE74jnUcM0DdvwdWpzSffbSXAYGMPrUG4a8bqRHIcfLSOW5SStKAHWg2UHBjrP4SoG9LJyOt1zGqwjkK19O-Bvatx0_YGn9naT7wHhtI7HMAV-v4Mb5kEd2all9cAy61COwsp6jUXhRDIddop9eEA_yJp3ynZWPqmwU_OToOdKrJPlTvHnwZlOcqZqmxsG11ye1Xb5r7tqhPVgyztaPrYRfAsXOfMN_KO5poG2z9UEEuZPXxJ0a6IErUvJwoVn64Yb1hXbuqK381XAIx4qdNv1kr2AHmDPi-jPNZBbPjkk7hktP6BJ0T1WCUel6D1VnXgu9ess7JPsso_MFhyLIIXoYldVdigORCoMkwq5J49wTEFPlPIxfT-EWpeiRWmMVZjXX7e8lQA8zFzwCsM7U343prtbPqJRuOwMI0nQwLThOr6p0Y3l_dkmbmtpFZaVWhPOJ1fz1u1SpUukdmUbwxYFLUtYWCAYz5s9xqxrwpv9q7TiFGVUPHXk3rjkHZ_vinUFN43rsRbPJiz_GyKmovG3l_wCW8-pXk9S8QVngu7K24V18obVHcYuVgzj-yWaTNT9zCGU5yHy6h3zuE0yxw_3z0mSqE1uxb6bnR4VkQEI2OEBos-5H4ppbOwa2_H6fEOfaOJXUtUMcH6IUjlytsx6f9jw2pDgt9bK4lvkwNSdxUsz5zj3TPJTCidvJj5QuX7mal8xVMkDbvnk1XMcoMvSp12q9lUPaLjQJfNgFweKLYGIZNVoSIw2SSZlU85jUZcsilV6kEYYfaVxhwXFovWkB_DxPki5tv8U4UkfxhTc1bCgSeukEQbGUxXcuyN7Ve7WrxmP4p7-PBaP6Xvut3d3he8uckxNe932VWLkZfHMyeSMJ9wFj0BXRR8GMbrc7vJFlkhGoAP-qD9APYgTkqP2pLukqOwyRtDh4CzxJHARUJpAnXvSIRgiB5wJyX0AggRJ2otTDaICVWf29XcWdmeku_SbIgkouAhjBKp01_OHyHiFavkmeGJFaJPUVkc6vA9NyIpnhhfnwIvo4lbhhMWw-Nv1eMWJMXlSTgU2N4uF2G7eXb2czejOH21wygL339Oikkn3BAQoGlU0KE3NbRanBIXJUWWydwcnWClhDOpgZCJm0tbIm0Y9G1j_MBRyhEKnw0ORQXDBpNRnA7aDFr_BetaQdh34Xmg15x5fxV7N9rZrBNaw5ZWEoZejuvF2czTyh7P90wB-dk6Tr5FiqjxFjTH68GDoGoXG9HT5ctg8JUbld2XYjIq2N6ZeKQfHe6Lxi0VOv78hVTiquD1k0xTkzJ2ZL7bthZGcPiZAAKel-fDFPYQIE31cnwMtS_snvQeF_lz9DNuPg90YJQDrXBDWYDTDyzyIzraFDm5TS2QTG0iH9jI2U4xwZ0mtIgW82rPDcfJxIXkF_hdaqonDuUYA5FR93_GsbC7Fe0Hanbu6baFwB5M7PKLzTyVXorO6yG88_im3BHYn7PtNVgDSJNig-FIfDRIZAbeb0cnBV_i90_5ZuhsyfQ8o_dGcZDKbgnOI71zdpCXpdcqp3PF0CXcRr6YqLYITnJWd9aT2O4UNy_vJXaIRlCR09sBGPtfNctdsiK4MQyj7MMi8Ol4iLXYUbO2fkneIvaMRSEOWtZy0vDfA4OSJMa62N3w4QtWHgd5bcC3FUb32Qm42GppAxNMMuaKumhccKRtjLW_GYNq-9dpFEsjSkU2OsOhfgv_6a7OsIBvrKGthlxBsy6cp4pyNRz8k5EuMi860MeTal2G49Yt0ykJ_nm_W8Pd6XG11PzHcQNnlJiYlWR_8t63o50n_MNQ8XuLcx6n0s_mVIlUriKW0EwRB2Js5SMupesQskEdeywkP8yr2p0RI_cP-7dEd44vENTT-dwj0k1JaBZgiNK6Jf0JkPua73nsnZimDHCf-JVcYjAnHU9TnjhKwQf_c71IuBBLu5vpFQQNuZZlOPQH4pFpZJPdYuYXRVTJMee1vkB3eMPT3NH8xzxNg1wVnjMmYeb6R_3TaAwCGKa3kSbhhD4s3Z5a7ZPA7u3_56FsxH0fPYC2Ivr59aMhB5YpMlkE0v1DNnJp_y6BCX270M6J_a2i3J-_NFn8oPg65bYcMaVA7RK7fBvRELN_aEPP0i5lV4XGaVsjy8ITDvZ17Fwh7rtxWb2ersV-k6WEGUMDX0oLL8pPjyUSY1YLCmK1ANovkAmR5XQ6Vwc270W8KclknZCUSk4V8t9DgaUP6yYjDUOwB2F_a9fdrDEVCh1UiH-4n_FsRb3psSjMUAqTA6qmuipDkHal_czWcc9AH8F2pkaItTAhKr3sPzRmCx3iIl2kZ1mAc5A8wusk3z-JpC3CZFtTy8MBwZRdkfj6tcgxbSBc40Nm150-ZXxzQFgj6Q5isLKIaIx_4weYjuC4H85NMQy9uDPK5l5YuQKI1NM-re41Q38wv2-9gGsVaMlen5-6BhkIkhf3SXPymql-nK_Voka7t71_lqiqBd2RYAGXhev6sEHDyP2QtyLlj1d3tDOxXQQpBO3oBES1SySrfeE_82S8cDzU8yCyDDMIPINa_tchhod99oYbyl5PBlA07pGheG5zggCKtiYnxHlIGaH111JNNhuog5hPWKJ8fnoHe4vDTvRDXmS4WgB8WX1f7vEqdr5u6eyGHiFU_kqXAhFNoqrK9PUxrBko2oiqXVaOMj-6T87tJPfuwRNmRIHGP8zD4kE3IB7bhwnZ8y04UKFRdr13D31eAZEs0hk0eH8IHTwNb9kDmH0WYa-ZkEY4cAfqfeeptvp8Bi1oDEtc3RoG2qVnDBkxYcHsKn8jtzVgYj_olRGYS48u5aGwtKjTbACFtlkRX8DJ1tfE0SgohVMOcvBEtSIib_bv_ynw4cdeft5kfwcpyu72lP4-XrA4vR4Ugfw9mahiMvax6_rwPWwedPoJzp0Mokc4tDD4u5d2FgUhHn2DzShfz_0e3-5dqkYHVLoHGmRYcskYibUX_pFwOuIpTmKtqo3nDfC1rTQVyDn0ESTVkqsZSIUzO-nI9kZMpNzpXnbJvIfY8fYHnunjvv4DQ3OminYBkgKGS8ayH8WtrSduGxmGLAkQRFqJ8kMJ2HwGusXjjpTqR9Kw5g5YhiYySDL3xmwPvDjfiC_SP6Z-1iyIdAtNtCzTeQhjoXmFEZfS7FGZoXLBA8mcy6FCpuXJZAxLoWXz4-uEwLDxChct47gse6ARiyD34yPsWjZf7JRc5CP6BQpwNn_NIyUD1CMXOS4BVLo4GMIBIKkrAEHt-rbQaW8rxMJGrv9l21r3YF0OXIJ7qAqAESvfqpJZDsm49o5Mqm5bwW9_iXeIT2Zfbt130d0adQf0dFTTN42biXandys8fWIK0IPFcM9iIpO7Pg2BubanxKOmX6bfnF9Xmx9v4fMGlh31pSsdUMOWL-3733UU128Y_0O7q2tp2gOwpyS0RW5Tuh3KBjJciBA_WvSod6snj0fYXO0PLtA7_Tl4njS3GozgzdmS0jStIvsR21pCbIO901q2L3bynQL-i1XVruPnDTAFx5iXHGnPhDipjZ4fLqJckdGG0aVKKlz7agcELHPyREel50Ts1fo1sKsYS97tLivaKGXW1Fv8pTWpmFvjhtoSMId8JxO-jScBGrthnesGlqSgg-ZEG8mucgvUbOAaGpWOLbN-DWCuSDHjFHYTgAkOuc4iJWMjGeBk59Shd02IsddS8rQPY1xV6VYu8KrNUMIYprkoEGP9VWk7Z6MeAfWhEnqzgMRstdLFCynweAmuieZH14D--Ikjc-E48XPtG4cgv-_wFtt9m94dKr7q7OZparEWapuao-K-ftN_7dlAWy6wgi8CgjlIRo3i5fsfiQ9bqHDxI4CPFwSm2kdsNQ6DmyRpgQ-mVEBVnc8B3MI3cPL2ySXJyQyIB8v5a9SAuaQCJ_ARtgYQHOtZJAYkimOCsyE58ZuzZsjKHQAV0Ey1QkzlYUhbyuiQ4ZqNBoT3XQIr6PQkxpxlVLj4qgs9CfoUspSN_mwshZz0lWS0pI89B_86dk1S-UZOoQEQYW5Rv1bheVsq0vZrfUbntW3NBH2aY-qrtv4AkkzldoEOBEaw8ne7xOa5aYQC_EfHxy_O6GkG_QIWJlexStLabRSHhvtAHgdPKMP3XXWgMWwPIkvu3sh_bY6Q8vP6ewp9esibNjKP_GB0S0p7_XujYTG0boDds6_r8n21CB5I46Mbmad-umPfChy8vCdxn7wSbS8PLjsPrJa507JrFAfC0ttwgwEoczZo5HbMRI_5MPwgp6-YJ29BypTeh6NUZm2e0YgoJmKj7QOxsyLDcLR1fDggeklKvumXByyKqTPQJFd0PsJi8qMJwHvVtj_zzpwwnFUsns0QkgI97nxrtDnudBPIyS3P7BcB8fSOQm5StLm58rs9c6T47COgYJQdYUVQJ7jDIuGa9LbEpuzSYIYnP8sIyC-x9KkAbb7z-CqiCEM1LJlkvgEhZEGY3yT1D46InYHeZCThCBpV7Ux2vrcWCUsRVI5PBoNj1VYZW5jq1TqTK5cBsFM0srSkM7YXOZYSHhZFS-daKpNERWNDyM61yVh66uu4yqWxZepse9AAwdEf4g7h0mYrmQQcNcR-SVWSmWWox1jlj9TlMRk3mkBnXQPtLjy3qw6bVIJA1Rpdxi8mW-io0c5CVx7dLJs1gmC-SrFsG8BYJR_cdpoO2L2T3hmGI9AzjpJAfP3kqiG4PFxifX4Eg0Dzz0nfhSReRh5_KvuqnecxOkAfRbujBPsHvTOGmScfbeINJRWc1XiefaayQyy9wixX5tdc-52sgObDUvVU53axM52ZB2-pqujc040M58cJRCxk7h7E1rpktwKmxPgp8PsJkwzLu0sJlCZkqrkaeRRz1L1HIli9M0I_3xfhTCp2BrPZWK-e5bVwu6orthLtQHQBqUNEpAAlM2Rq3rqEr0wAwvJUPXEQS4h2ov2caxy_4GHfNoo2b7wg2yvML174saA9kj1ulEQNdxKl-_iF05A--QhGOVUlDPxJPLFw4r_yQJbe1gWGDLo5ai61tTkjCu0gAbcCkCEGCAAm1ggxwAMMHBmXY8Lh-5bnIHl4wIsH9W1UqZvFy_8eJuyD6lU-CtSRX7_YT8rk11Tx_y1_zmJR4ieb6NkeyEZqjpkM_Sifk5CVqMPZ_Aeem6Y_FrJ-mCVNgwn6Xfl_Qz-YWPFq_IRSyQUEQYz8eS145K5tyTxKweTVOwOp6jr_XgHlZjbZoymAQNDBm9S39jDFflej_5TfqqXzyRm3a1wsSCJpmu2nqERMJbhBA-Coq8NbtfCVcdiX9UOGYoa-065PhGXg2s8ZTJIKNpd8PcAg1hHsTK9HsCqWjieYfzh5vO_O56UZiHntWfVUfftTMCDv8JIOo4EInx4al53Aw6yX9wunxg_sFhS-9YxdEN1tnFSaFaluK8VoBO7JOuH-YTm2snC6B5RpWUoZzlEId6bo2IorGwa0xOwkkiqfBvpdoUzbhlvQzkXt1XFpeRFTssYmIlpeWQkSeTE-tlorn969GbL1u6LoO0Z0cIR94axEym3qnqsKsVI5LhYeoNc-zHFlPny_GDb2mdBSZlQt3SHCZSxMF37-BRdJmvNsJCU9zuY93YQ8yD2f1axyENJ_l9mSmGbLtuQZdqszJs7WeK1b8rE8Cveqq-NvnC0oGflkpDan4k-a7_hDZcUZ2S2qxFyZMXdWQ2wzYBdW3zSXSrTmRbbe73sqjst3Gw2plJrRfsB8aDvOQP16Jj1_TxxUaDsRYHXZ6WSL9RH4RImRMbhivfk7GEv05nLHPBRd3dEahlyXXiqibbG429a2YaanKIlzWZ7Z88LVLKortIWXc5-TUK10wPg8htVzz4IFwt4Y1j68_sc9eZzNggGN1sdeQ3BbsHgkC3SQqSrrShDBjv7SIGZU0QpJuGYGMWwzLTB8bRlUfux5CCnu4a9ixQG8IJZzeRE1sWVoWzJRGYhZABexnBLSXoiBNcKDkBCQ_ZNHceEtinHPXmy4VsIiZvrs7hjKC6d310MOSoGsS5FyJjDq8elqwIjzxBP3HBVRM79kLnX3UiWePEbUfAIq9obdegeSGC-BLFD8CnAAkUeLNnVC7rXygnbNIl0h__gfWhpdKPzV9lnX0q4ZEjNzku66cam8QU4OVzcMLrb5lzFe7_JgALfa9dYZuvSVVGyaktCMFcFGqj7kHNxtLe_34livWk4H_C2TojBN8OqgyK2qzAe_DYMyW2JN-gT5rZKnLI3vQdhu-pi4iIFJ0lCAZ8uxZAUjtJbuVA0yW6ed1rN00W0fZeiPl3Jx8rt5pa-vS98MBIgjjby3QKxRkILdU_ueIASfsvoHU74msSI5vvQ9yxT5Jtc2CmFk3mSDaCQt6vMw1Pcah5iWW0VCE4IDU3eHSSM_H_-IfN-weK3yr75anzKxP7V1yXBCEpssRx6rJDGsoTWjw1x9XDXfOmsPtgPJcyhvZAym--UfMd_9vZZcRT6fjjMgJs4O1wBBEglk4PbgnLdfFm0z2yvOPbTiJXUuREq7eLmfIEK1ykfBv2n716iJpYCv2a1GlIt-nL1_iWYBHj57TjM-pWwhFPppNiu7kZLJLAQ3YROEw_xB1F2GPkIE1Y0Mq6eIFzLmccA5NUKud47TvKZ8ykQqPMYOWWRgTN0Cf6zumwbhsYr8hSoxScUoPB9X9dQkQeaxxBGoikN14PK8bo78UQGsZyND7qRGd6u-v6eV4JnLRdNvbglI9R0mmfrHqrBNTxYzmBPoBr0nxx_ddcpJahUWyXpxSmNg6HdeBiUAPgteCPK1Y94wdTloIqDsbH98gQEBEnvxEJfjROZjyhv_FQvjIO-KEI9IEXLOLuDDXBZ3WdCqeZoZ1x8l-CUE5EXtwY4ezaoEL2W-4YRzQkXA3olvQt0bc3nkHpLss7ONgRqvUXeO_jkCq_PQXE6jdoprD1e1t7q8vjeBSJiDzkH3b5qlY4eRH2NqyjrlFt5Ve0eC2vs27TPXwJnh-kg_qd-4sQrRRM8EY-WbMXnF3UPeuqQnnakHGvOf0tyHTo8U3PmwiHkCKu7Z6F3Ux6sQ6V_-g6aeLHROO1JtgbQbae0ZthGlSWrQE4BtZVh1b8bkLu_MyCHILYM0fmyW7J3aAjjgXXf9c4cwBBXATSlrlHprhPco3eHTN8CTWnKo4OZxf744wsZ8goe2oMJeP7O1QIE241esCuSR6JnW62FnG41TQh9lTQolg8j4gqzgUV_WRt7pIY32LkP_SB24ycwvZJRnDQ91z7V-TAqh_aMb79G2UrB4gdSvYXzhKSknNv-skImVnDLCZN7Fffqd3q7zo7q8RdaN_aXWTjE5WKKhZOSnW2JfOYeZ5BOmAXSOeDA0enAFLZsspCWfSusco4Wbpi-mcW0RmGhMea4SlV68nxdRX0MgKT13le6P0V4su_yh6-m-BGvntI-KzZnTz-iOyHEwk-Signy19xIT-EHOx5q6443g-k3aZuTMzB7YoemD2uuEjxDeAls_prOqmBCMCGwAOItx5m7yjfNDsBjdn9fkMfbHH_JlgfjEKl5h75VZEicu3q6P3Ynns-fMwX_O5tS9RnWkLH4cBfiXkCBxnQyUUebE5HyUibEHPfwOvJZamvU3SclsfAnNvw5nd-Chz31Ys94WOuTx0jVcHSQc2e9i_jJEap0cIeBFm0ee_4FsdJScgdhTr0j5YGdb3owZB-3XpDIqYZUz0zrkFCxpU0tWyFIfieI-irqjLvc6S8jNYJo9LawlkH272swJER4FD0D_wVsBFq0A5g2wJU6MBBKO3TMj3Saoopg-aw0UtSu8JYzHmUcmvPKReUBNJmYtWfKg_f8sY50X0e8Op9L_BBzsBTQDv3BVS0GQ2Ps7BxOp0eG_G_MR-zfQeS3AJuhoXJWA0jZzMS9gc8PsNE7X9KBEc5MMBBjQ7le9sJyQEpx81r84HIrUBmcGvfmxgXeEkX21X81s7mvxzJ_EGl7vfMVVvP_AKV_qxtlzUbMyuGoS7lOqlrmhd3HEpFwhE7RVQtKtMgEOk7WlpmAiDeMCH04jJj9mhe5NnU5BEpoAiJAPx0nJXjkZHp9KsiwQ927njf9jW2z2z31hn3nnxXMDNrlUeS2CQ529EZHtgIIvH1We6fyK9VDgVCL_krkYGs_QfwLL8KILp91OL0f_omwzmK7ru2Fqp6oeMeYGqUvIzKqNzFNdail4stnm605iYuY7q83SBTEAmlRH7UHAzHlVCOXBa7DUz1kvUwmJIE_5nEybRLhaYbA8laEjTs2SCn4Q6R7yNtvgaTU6_aGaU4LI9dfnTG7xOthDEyUN51Y50Pi1LEC6Q4s1ixnnMuYzeqJ_BSVMN9g_bKOjnr3Uujb42KSoqTlPW8PYdA8BlZkDsito0WRuSe5fnpbV5YI6hVhmU12Oih-1WGsDNlAYp6TEPhIVpPPXS_oN2be55p6KOFvOSQu6p3JK0atsKbGelz-gcdltfQG4vYkV_EaTVBUg-pa86PMpa3EDtjsLiUtQbO1uPkscmbEcSR18YE0huJkheBVuOzZ0xJ3e8jYiCIeyrCWptzCyjt7en2-A0X-uds5R9lB4nPRC1rM4R5PJw-6IbYmz5YMmpnxtBzhuf6iy1cUnIXqBF5eLULqX0jwKK9QZPHwPl1S7ZFUfnJHqCfyGRyKUaomKWrsJ0sWOgskw3koGafYdHJ6RIWpqDJ8RgHlP9ZKwFrHJjO7CG9-7_MZ97n1F0CnDvRcd5hAcsvJGkVIz-eWJ54hNdbao4uY2Syj_Ae4YS76rGR98s6FhKMaTU3uzBqL_W2e1lVcvCc9em6SRYeyzi34KsbFKR66sVT3cgHzsB5NhdK3BDMIS68-rbZ2-_NtmbAO9Ufx80K1FCmEoGduJmPkara78UnSrK2fvscvmM4CYwzly7wooa6AhGz0WWYdtNrdyR9CCTwQIems2sHlq-KGg_co6BrdE7Ot1t83pa7ESt0I8ZPWnFVkw2lc8O1Ozh22i0cti5l-cXsHzZyZfNMPvAyWEe65kNLkBZ76fbnu3OqlRUk32FywhUUrZp_PYZHe2RuSe9rk4X3MGZg3euGalM4W0QXEc1TnkUqyW0eYiuT2SKrC7uRrohPSQEKQ7l10Kp_dnWzBRQUG7Eo6UM9g3LX7IiQMwPIA7q9sulEN9BI4vYCZAautJIwfVzdnY6JYRU084pxaxZAlQ1vYBAhHMYdFXDeT-GwAtUhfhJGQCwU21O8lqfQ0wH6-OCW6ifOrKGjWCHXQmVnlJEyosik1p7lVXX5nVILGf4bvfIeAKXyo4emOhCK1EDKdz57SOMSgNhnweLl8sCQd3cKPjsEvCvjTOJdexYr_6s7m8nb2n7FJXuBc4yI6VF_pkkNZFnm3WWH_or6K_Nou_SQZZu0uNOuEnJwx98MrFi3bCYJkptpODer6CMZK437A4uG3ohySgtMg16u4PU6PyxfGnpksDbQBcQPt4-6D6O-aLQkEXXfd_63WqHTCsRI9TnTid8DxpJffFNur_Y8hLq_FqirQRGf_O3wAd8nrKuhrf_4BmEYS0gvEYx_qQsGN1jee1waKns2MlU51eTF22Tk-fh6fpcgSmnt7VHbWK7TofVqHfM6VBCoa3LY_fJcSCF8UHpraVUq2ZPdKo14tqTM9IaOkRpcqeMXogCOe8-SjKMgS2vPI70YdDmjZTQCmviA3hg5dV_4MUYVZIuUrsce7riYFL8r4Kn0ql6U-6BnH8tK9wIsqgYnjQnDo3RHvdLwjtMOa8LjK87PkEpnWJ1bRJL5OSGFsYylfVE2NGbbpHeej6AIYzoyfqwL1g_NvKY4122E-jMCAY3_u0AVJEpFvM53pmodPAdnwvbu2Zlnnr_olM8sTRnEQLjDz5DXHjxZlEKYyZYPYCe_RH70vxcgecDwKhmABKuDWnMT5wMKMQOeJn9qvgZ8f6fYyqPasWw8DGlU_RlSnELCh97ppQW-dDx_bpt0HJA1Nwiv6cYwnhgLlZlZHUit29AoAt0X55iH1VkCScNthsjjssBkJY7ITS_h56OxyuU0Z9GvR9fQHI0HTSIsurvhJJM00J9hGvyTbYT8msgiqEY-5GAmabWF87Zu3XU4fNl6pfqzHALY-ce0FEJSmXqsk3zd43bqOHRRhad1cAbW_Bvmtdvg7QCCUZyT9eBQmEkBHyl6so41Gvzf0_qVHu03T5pSd6tMkSKyJ2_Ag4ylh7bFNSq6gFA4mGN9yy9nsNvzor79hr8v_BQ9ngAbOOVJqUXobM_vq0Z7cGra0DF0PDlDn54W1PUqyJUgprtDqJZnyIe7yqu7b0HbsRRB4yZrIrAOtMktKRnGy26FuES1x819SbRAUhZjGG1jTW5Dn3aC-AbnQkODWhNA6aPiW48R7iUR6FsF219PWFxQH0ScELls2YLxPpOtCVckUVgqXo626En4XRgpKpZIHUw9XsFiDpfhlyOYWhWldzOyy0sojdH7kPlp37Xojcd7ZCLBg9mhM90ag7pchbg0xfrX7gvx3mbrXtPrjSE44ZSSDLrr2BIbmuqYo3QlKWCu_2KpgA7CGOD9VPuLvjccWTCvo1S8oVqBcyCutoDntZuvugRz6KpZVW165oaCPV6284ec1fBtxN3ZJicVmX6W6mfH6cpn58aJSNMIx2uHP9sP0kGDp2t-E0pdGc5mjLtqYGbUSzHuJZNSxQF79NwvEl2DgdcKFMTZB1KpxrZvZ1h2B5RJZ3dYhJHstyBqYivhmAPM-fkWGyGUrsH-yvOGrDYz-oFcCjP-eabmlFVsJH7mYE4CyJKi81j429n2tuIVioik3uKeR68fkVSowQ4uosbQVHzXnL4XIyhrbWP5SD-3qZ4f_m5pv7APUnL9A3YG2GxDQJepWFEfZdydu1_AaJv64jM2Nmnz17bPLz1FIAd7E3yi8EjFKsQPPjwTlaXg0pyedIL0S6hjPZo4aPNglBmwGLNGdnI8iHt3Uy6SDkt94ran6VrJJPOswGSbg_ICRhoawcF1joc2e_Vbd35TYcnv7-wW97UI7M3pDb5OcouZrXyNbek8QdGdXzZBdnYD4ZyUFtd4j1SA80Foq8lov0nWUgEhnwiRJppp-6Ii3fC57daC7Q2FueuY5Lo9aK0cpzJixuLY4nU_qkKO_2FUkY-RHdi3abjJdlLlWCD8qkixKxctHx5Mv4_lrhLxv7lurT-laUKp53Shit2Km9OLy521FGvCJ9k88x3xowvfHg7aU1s64pJcjymPwOfPKX-LzI48QkD-MEa3HT2LUl0CiykT2hvy48cjgJAPyK6JLnc6O0clI2DI2kEsT2PL3oVndlEXxOswimEkUELGNXnQMbNL-a0oVNuetYnC15TWKJ3T6DrEcA94j4FRxAOV11xgZy7BYrMQALbGk7zMoOhBpj3ZDUFxPXYbxZGVza2b1rGfz_-i3IYqmc4OLiX677A2AhKAZ2z1cku3683aQYCV3Rp7e3oIOjjT7q0qXANFZpCPEi1X0BKQ-hHJVGQZdzqnpO3MSf6rHkb8CX5qugvfNIBLDF1kjbh2j27WouzimRgAc8kGmu13xnPqNvv-bcQZV4q0fqj34pYAT6xf_AWFwZChu0bQjK37LcjJPUvqLLI36shEcmFwoECDv5KJbxxjmPbdUrjBCOFdcE-gvSHAZakFB_QAvIfqfwrH0l4w4kXaobCqIhH-AkSCowtz7bAUzatPJxybi4NtMP7epqoJ5q_22gq3c71bDCpCKCUvhxltK0elGXtRD8WHn-fNTZmTVs-jlgmm_4kIyEFjVejhsRO1q4cYa08GKorZ0iOt2-02BnaWVWBN8bVoisFt-hA8a1bpIEL2hf36QjnX5kTTmbljkmLFZt1sRa2I0fkpI-BFj99AE2WQS72vPZaougrwJgdxPnShoUwIXV8I557x9sedflTmbnY2O4X0y5eHcCuhyvKuWZmf2EOFAOmNEi34SK2sReJjwlP5ICDno9ldPWRdHo52poqX1YIDXHypn6732E0eYEFmnopZX8VmI0JPaf8VxHfDAgqTdGkoRpnsTg97fd27ZInrCsggwGkcJX2b2pmWaXa8C4fmO1O8F5TABY4xVG5PYKPNZvWMb2DCWMi0RCEoVRydM047Bgba57LCvHcqGoYuIKcDKHOegA5SNzOHnWo34wT9mtoqoXfYnRSjZmnCCFmmTgZtnkmv1gmmYKZbxhhzzIfBPKQcXO9t1ZcAfVxbms5vXcsDghV8iXYMmMzzKovZr19vRij0pcU5tklMNpX-lkWLRN2qoSWPqR1RU8rz1yFJfrA0WvFNypfSRDreAAy3hO5Z8Ix5OGJSw8kuBN8GrfNnY5WMyZjX8gPenigQ_KlaAh6SO1ahgnkl3nGP2n5aOy5FcHqRVpfgmqsZ2NH_wE7kBRsm41xwlqjBbpaFDrSuUdNXq3xe-gjY45lVxLwzjZy1qM-r7QTBkO7j36_jaXfmgVCZdDJ3CAHiwrcmnwGeHfCq0qPgx0PuGa5VYGt2z6sWn041xxxokO6I5iCimRBh5MTXCKpNgktRuPyAVAk-kGkhTZWxc-wIDuapqqlsvsNsLUbLQU_vGudwyLdmPeg6PUkoZ_oG4qHhzHqUHZBP0m7tdqE1ZyQnIWotzSaRWTFtVP8WqTEwMVPKu_Q9yxnPQ-R87yc2wTDeMl2fh5ksCty7gaaXoQAyVLoC881WMYUW9wG-w1F7Ll7UDzdBA1sSXjGsfeybxJSz52JkmjPtKKjtxQIlecTIXEr0PWRdUMAHXnieYcwoYfq6nsKZ3R2o2gwG8_Vh3HOgk6RaXvJAANFvOQDb6PH3Ph4ol1hNaU51NfEPKYE8RiRKMsrwQAu39ybFmwAS-PHPfyTbJbc3LbCXrimLaPpcc1Ai825eJyJ3P-2Q3oBuZ5OBL1q8c4TvBP5_OjCPlfmyn1KGwbD3G_S4ZraOPYOTabFudu3u8ZzoygP5m5NLLXKxcaNxYlBwHxHOx6ciHX_03_yaWtB83_0hN2C8u9-pzl0phzb06w0XYnoa0JmbxJmYenp4s0Wscq4vvzpJXvcolNLeNWaYs-DaClSdf12lM430mTtXmYVgXVbV7ISal0JbCzvuJCAXc0FjMERdZ0X63GkJP7jkaoUjzdZigGjZvgiosEPxJXyCzr8KKk7JK4A3lqxBhEAND1oU6NtUbvkMMvdXnggbrmbSMZRqcBXf3WFrYJcJ-6ahsBYuA3lg1KBW0pmH6e8QfAjv0xangLWhBQMxsp3mmapmV5EE7PVN5R8hjSJh9sTmLXoza68UQCIctpzsXFj0TXCzq2h0Rnzv91vwEt8CIvgNq8gojtnmW3QpahugDtyN2UHm3iSiUKKwSiBZkf8ZcENLpMkVgD9IAsiTXUv_4FogWPpwAdl4zy6sL2s_ftLPmS0DmOmXRHJ9G-dE0zkMyzMqVkq7ro2B7LwfrcnZiBZi6VQej89XUmXyGcX77uFhHd_j6OWmexvu5tndGIbOTuQX0CWz9yaXU-HTJhiY9e_crNGZXi4ih_rIv92TMZivQnh5kibu8NE2nFxjpdNLpEbjDdd8PtEvAXAEE7qnFXGwGLmiSlhWDN20xWmbVLtzhLuLJxS1hIo2YpOH_4a7KS_EGZfH82vyJDh7X8eB4bN5ROW4P_izj9KFTFviX4Uo5Tu6uLexgHnao31Neb4X-i3qLOCUfKHJJlHV2Xd4Z7PRRAmC6Jh85KG12uOfi-8wZXXcg3VECVTWqFPyNC7c9NqzmqImfot_kI9r4RsxW-QGNwnFsrKc0Keljk8A-oFxXNQDOwLRsuMmDdw-f-UPrzqr9EpLrYya_wVc_idKX3Ey4ovtUf5PO8o2MXdJByG29lJT5K94vz5mAfaIxPGU2YHDcPx8MEiAayTRPd9ilSFJGeExDpt1qEXj6zgE54feCN00bl_Mj8_KrxhpC0xEipenwwi43y08gBKqnQoFrSVOcyQkGSTKPRzlmelIpOxDbPp-3hdBTTMPN5mZCDC7ACxO2CmJXwFU_m87w2ELhVx4Rn4rSCIKT8jslAicWFLMWR_Zb98JgeUs3DYyfzPeBtZ1BIKKE5MKmEyITeLXhlttU85a6y-L53Uv_QygXPMlt0J42xqXeIrHOXgGwxolXy5gOB9yjVlb_q5m1UNEGZWfqK6LvAE-J8oOACY4euLX3EWcsh0auULJi4wH3Y3nKG7HJFQyUO0JnjQwfyWfzSvelIZ41fi2Nw5r-wNqybt7tAMbUZIfcq7n_jQJscL00BxN5N-o3fEC5et1wnmQMiqISSW55c62rrN7TTeK7e6MbllJ7Co04KH-MDC7XBr6vsXmOfXXsD7izwC4YiQnOs_B5dGJrHiWlILKMJoPm9A6MY_Ipk_-ovp73PH3Spuyqj3gbaGgEY7eju2eCKgy5xjikU4zSwJvt1rqfjRZ2GSK-KvNVZXwOlcNurfjGx4gg3gD2oH3kjnOF3ZQwKf3hHyrwwoof0HQ_NKqO3hQk3elAr680JFe__PFCiN-lgyE16nSaI0NdaPIwf47eymU83M7Zd8vD7sHWJNnf1imqAiBLqXPWR7Rqm4gekkh701zPsJ2Iu6512sCNX-9KMFxIExfluqlNw6M0IlmQlht8-d47XGltzaA54GJFW3XEbd5zS-3HXSx1KvGzlXc64JuDZxLHUb5ZQzu1qEr005a3rGJk9uxvvl6fMXkjnSYxMRQILBXk_4jA17GYY_8-5yhS34A0bg1O7uT7wJn6DhLDOvBY6ajV_VYSOLpSpzOwWEokpS8-fGz7oPS24HbV0hJgI_HvMEkB9qPxUGdlSOQWQIIFTAtsMo2gf9J7z_edG6WZTPB-_SDpD69-tfdvhgNiM9GcnU_jjvZRehoOkRPEG9THHC3V0GTU3ZmsHD_S3kXlwFSqdsY6mZZ21nOAOLFs4gcrABwUzP3rEw-gaUP7mTUfd223y_P3KmOrIN7b5BR7PNgwdkw3Tkd55u7bTqxOahIR8MEPxojazJuGryPj1bNQRi8l5jbdGM_omNUJot420bj90n6NsoxmZoDeUWcR03IYRZjQjwqAq55c8fAwz_1-o0RlC7JWau77D_C1bw-_3olp_qE7MPVAwox2RLgEBZJ2JZs_h_bjkVS2T8e183UZV3XQqzte6E5urP0wV4aOJSyO6_niCHHNj3uFXHcaUO8jkJGmoTXBgvRYREn8S8wOFjGg9kJSPtiFQei9UHYF6lqIH7iPe5T8yeWEWsc1zZG9NF9MKosT5cZLKgF62oONemtZsljU9o8FSw4F4twnv4ySysMHZ1nGNa9f2XVLRRI_ktujhM7VAulFay_nfTdAPBU7vaizK83i1e3g2mzHvx0dKrtlfAjYtJmNkdQwFXChzSZT5KiLO80Hi1fSMPl6ggBo0dzKManVj_YBgrNd1HvzKE2JhGdRPwgNf-iU1wVgvqC1BQsY2qzimpDeLb2hIIj71DDZewcZhXTdFUyIfc_7dR5WjIsWLkpUrnFBYYqqrE3jGk2jc1LhtHcI-w3sqlRAMVnVWEKGsvHL4ECqvufWinq_lNZMtVu3ziWU2DtV03U1-LqGNwu6VkdVTLByIXhJ8qZENgeZmhmqhiC54zGbZFYg_WPtcBM_zuzHssq4VjmTyIgGgMqGUbsl6l2jdTT4nAM6BrwqWlg7AZaeNtuAWMjmtnHA2yB7r4OolmXsxgrW0JzKdneOQYyv5CwF1wo60FWCct5OqpqElJyBbqPcMhZKc6eQm1sQjO6nEJtqkvEuesAxaxmI9fWi3aVuTatLF5fRYgwWWYgYrUpe0efBvUBW0s6RKd7z3IZ7SBjKEdKMlzI3nhsIeiSk_-zWh37gLdozxCOGZ_Fp-1KXaO4A65vQJqivT-bzN9Cuq542hcBKgNTZfUe39CVO0Wg8E1DPdYbGHoobA9TSH--96VRj6cUVrCEG5icBEfqeylcL102XjlLoJw5HDe5QBnc8nPYVnH47WGHX2nUQdEZnoKyyRG3IR3XSWXzLmaFeod3hPeJx4xxmAFRs3-a-36lBc9FrsjMSdOULSwsQ0g7pC7J6hcxL7u5FKDtVJnM0aWHQqr93nPeOnrYo0UWSL3C8U_57xMqYm_HvOMNvEukk6q5N_NSZGt06RHVqswDL7dpK3yF0QStH8K_FoCOaHR-lOs-r2XJkxJ_9q9n22sTsAls0wObpRkI7Sgf_UxQFaLXqTaq0hnNUCOJuZdXhT2z8cg3eqAJzWC2eAkgbkr556fDnvJj6agVS8DgOfs0RwT7qORNwaIrJqr--xQACXLnaqfoOWn66Hxh4IoZ4Z0fmFcxJqgiivgp7JzJoxpq0e3V8gq5iPf3dpjbOyKxmFg9rPcOO2vWG8z8K4tqXrfMX-5k-V-7Ne7pE4XCVFdZzKFsr_JjlAidEwFMJD0KVhlrzzwJlM_MUp-I3kSR6pz484YVbnYu7_yUeBTZdasu7JU_jXEMZ38JRf2J2OXJAF5PQKZbKwk24bT3qXDjW8pfEJ-S56eepnRRYkwmKmxO1jFx8mOu61vcnfNQQ07eXq4CGwFXTICLuCfivmIn6XRX29zo8ggxcYyG39_NQJM03J8MicF7PJw8HfbHiNxdI_Z5fHuQEsFlDJrFB1KMdOoKAjFSfnSLayKiR--m9htw1Aa8M7SygithpWJ1eVFPsaG85baIZbWkJhku4x92qCAQ-9HrM_1CX_Y_PjEPqQIn-ZXcLqHDP7gVZzE7IOzYYjrGY0wfavJo9aPqu83zevqDgPovSiIHW7Vdhlrn5zEx6gpIGjcbGLdDv22GS4XC8DDpgrP6lzHURj2_TWDzBkZUgpgV12i1acosog3y_4bmodc38THXF0pusaYKuYn9Y3Ml37siLnI6DzCJjnN39kNQIuSVzDxEt-SALey0_XDpdaRtc4lK3yyZIpf2RECmW4PgeLrZqIeroDNV9D9NKcvnkW96mXr-lvthFC4RWmBVzdjKjKIVZaK0kiy8VowJ_KDoORt-pbz10a_V_Y6B8ZxK8eRg3jL2phwNIRaPiRy9RAG52KAN7OCmnG2w9__-o17aLIrGbEB-OI1tnmkeZA3kMTpw1Ab3Ml5OarPDVn29QhxJ1UxmNx-ae_Ar3NP1g9DFrc-Jy9Jug0buIOCXLcUzkN6mUf2wI3mOAo7c2qXjamZ04VElpFhizTVF0g9w2leui8KynaAW64Osk7MnMCTQ15WPMjYvCWld1RMxJ8DKqAAPqt6iwf9QP6JxOqYdtK1dyDgMAC8JUd-yXYLsKIyQudJFKOm1HUB6se_JXzHXAktSylYHrpoKujM8Mln9zAUTqOWckKBjA4BubfrWQo0iK9hFygse9dJnS_n2Om2eO8YFyjcXNLEhDoBLNrOrcw_WVXuxnqRnX1hpzj8oRfoUTbc_xtxtYGvA0ok0Bb56BNxwstYy-TUbc2-UTeIm0Sn69kWaavyP6hEqZ7QN_9eUkNoMExsyz3nrjYEbsZkrXn-2vBoWEIA11jHIm0ijR_H55BiQL0zP0I8-5bA0XXj5fVvM8QL6HGyNfpWQ_1rPiZZ3xXTcy6Ca5-QzI-voSTFnBxoPJ8tsOoKiqV9rQuUpEAAmF4KzDOOZqdqEsy_NBsDPSOlOgye-AbsJ2o7aq8HB4hmCy6rGclTNYg4pefIwX_SyA0zFYperLYjCe1hX0XjAB99uGAbWm7yBtwnQHqWybX5caNCNdtRffH6Gm3-VvKMS2FWxxcKu_WU1a4Yz969JQW8feGiFMwr0pw9v8Bn_l-_wogkp1G7I7MSn344ic-33AXpI3kkvavjJy5vwoXtm2OEE0DPZuXK8RfbV19b-8kM2KTNXqNY6E6oWy0XKN-p4EvVOY2nZODROINLUFT8thGM1ifiJun11tIMltFNEvlUfqQgugC86dH_-I4kapkCNj1DCmLVKZ8GNHDblVQYP8KlMpAMerpAfvufGUlWFBJk2g9cBRsA1-sdyZOkYo5QziEIa3iC883G2H1iFYV_WTZeQ7F-SeEZ-Edv0weZA-7Ar2KAp9_yoj1E0WlY8tc81P4eraL37Z09XdANTjazYhuQPhLcw3FcAobkdJjNX7Vvivs0VySjTYvhZtX62mFDRM4YpiXtMfCnpO4SdT7w6qm8Roj0Jwdb-y9OWJzPPZ9hV8i9bquKhJzutHSLwOqYQ_VaKZg8cHWuHoyH3LreuYWIYojhuCLKFTgRVpLB4S92Yg5jG8VT4FG1gCR-w1_CkoBXoZPYH2HLVL0nNvdPdvdOJVbo0ql_7sh69uLmJeIkBhGZqQDSmPpcDyePG5jS3XzM8LjSLH-ftCI-OV8bjviToFR_ibmGlf6B5KkdMHW1jf7x76-FYm83AoS8YBrybQ4LHafz8ndZB8rAJPAF3lRuvJd41sep8-Um2wsTbryvNJ16kQ3JhLZHddrkXjDnSCbjO7O9oFLDRgu8x3FMPBJaZynxQ8_GkBNQapo0-xNFr7eU7uNdoj2ecIc3kVVLbi55g7zWABvRsBiFb1GdVIDQNLHIHXXyK0P4QupL7wOxCB_s3109Ojvwt-WG05Dbb382bsPU5rCdeoo6OCw2g-4ZyGUUtyAcWWK4-Ul1BgePiVd8x2DwfqNkLi4EUlr-Qo_m5Zvjfa5xrkg1MgTnq709orf3QP6E2sNMc8zcu0GMrLcZcGN7CWavHF0TaGiQ8krMypphul5AaWCsW5s60d7IcbmD_1vswLFcXusL7egt9_Lf6p5UjAApFOSRvTbvhUb3OuQcbzR1CzAqsI_LWBJQv2GAvCw1Fsd-8sHVI3Y7aycr7gM6ozKJ-gA7Rs1Jq-D9X5iAmcPzDjU6xsRcav5R4BnaNqs53gaxDLiA2VIlASKTMGVfdTS2apxODxquKq7OSurKIpC4vCnKmNQZ-t7aQ_tgoNQKVEHNLgAANnLx8mIk--HMepS1OoyRcun5UL6szBsx0OuxdGVWuYyb4BEKn6quHDeMdJN70x_8Kx9HnSXn2_aOPrw4R_1oYsR-d7IpwyPf8xWVcn9zLNWIjFgeAKcQ-CbfbRdmsiQ9OI_y5Q2gbw-vi4FbGXNl01b3Rlb8_aBLxT1eldmfpl6zGqIopNRrvsLyyJRl8jKU1lzwcEEo2NqbG9ud9JRyRjpQh7TedGqnuGeOzPbBULsngnofCrXVgZvGQLtooFM4S8SSPhIczzGk6ud7xI939ubmBC8L7rvD-GDpbq8fjmkl4mSmQqoVUWyAjCUloTZb6tm67vJPjJyRc_VMvjpv08ZP8XN-DRbULF9u9gmhiinbG-FLvH2tSIuX2zNG9tqzRGLK9fPneMqtGu_Ljb4AXAoCWQSfE2tLRWkHdsBx9xkzRGuQKEi5a8MrDIGxQl91a5Vga7_R-wegPQyQQJy9ruSuC0YpTipPBwsY_rcUDbYwkx9yIO4SgsWQXoBvUBA7jGKKAgaAfhRJllN89HSn4shGWIe2lU6--pIeaOjgRzjWJGPue5RWoOCG6LZljMmD_DIN255Meiv_W3wRkpw4nChq2sXuc5bnvo_9Lo_hVqvYQCo9pztvMAaiobaeS9R01YRTF4s7gZjnQWP_2Z7ugm8tm9FrOYb9aXIQTmP9VyaRtAUrTuGWcOsfKUX9_qtrmdWVNqnLGIVJCllOenmj2TajL98s8DeZdZn7quADgwN5_bxRbMfZ5yspQwij4wH-fWYqM6YXRxxGP6ElL0uhwRvIgekUGOdYPz71lftA-0ax9Kxjlk2pJ5ynJyl-YO_aIwp-NzPWWw9Y5yuwEWWN3HXq7C2jJVSAhJ-X497mhaxIfYXkC_N_QC3B4kht8WHDdJf9VzkZlaxTWib6_tEc9hPb6Q4yrMishu2bUaSE6_HPDZQan0XsbYiPhcFS1OfYZbzLGmlJQ6B3f6tThTG8eU4h64hn2FCv9KzfPdDcbv_FbeZCMPfFSAeFcicwBiFLQ8ckRnQ-riW3LNt2Q6mS_2oW2-VPcOD4b4FCXVlkfdXsvuFCUZImWbty81lBkotIyiQPwQX8d4D7U",{"type":374,"children":1021,"toc":1030},[1022,1026],{"type":377,"tag":422,"props":1023,"children":1024},{},[1025],{"type":386,"value":1015},{"type":377,"tag":1027,"props":1028,"children":1029},"hr",{},[],{"title":369,"searchDepth":736,"depth":736,"links":1031},[],"content:notes-to-self:what-god-quantum-mechanics-and-consciousness-have-in-common.md","notes-to-self/what-god-quantum-mechanics-and-consciousness-have-in-common.md","notes-to-self/what-god-quantum-mechanics-and-consciousness-have-in-common",{"_path":1036,"_dir":367,"_draft":368,"_partial":368,"_locale":369,"title":362,"description":1037,"slug":363,"date":1038,"dateString":1039,"encrypted":368,"encryptedBody":372,"body":1040,"_type":742,"_id":1081,"_source":744,"_file":1082,"_stem":1083,"_extension":747},"/notes-to-self/you-are-h","You are having a hard time making any model that looks good rendered. You had the best luck with a blender metallic texture with a random rusty aircraft carrier image. You had a dream of not having to do custom textures — of modeling so big parts could just be metal and details would be separate polygons matched to some greeble texture. Have not found success there.",1721318400000,"2024.07.18",{"type":374,"children":1041,"toc":1079},[1042,1046,1051,1056,1065,1074],{"type":377,"tag":422,"props":1043,"children":1044},{},[1045],{"type":386,"value":1037},{"type":377,"tag":422,"props":1047,"children":1048},{},[1049],{"type":386,"value":1050},"Maybe your base texture is not good. Should you be able to make a cube that looks like a real metal object hanging in space? What’s the secret to that?",{"type":377,"tag":422,"props":1052,"children":1053},{},[1054],{"type":386,"value":1055},"PBR = “Physically Based Rendering”. “A PBR texture is just a set of images for albedo, metal/specular, roughness, normal, displacement, ao, emission, to feed to a PBR shader.”",{"type":377,"tag":422,"props":1057,"children":1058},{},[1059],{"type":377,"tag":434,"props":1060,"children":1063},{"href":1061,"rel":1062},"https://polyhaven.com/textures/",[438],[1064],{"type":386,"value":1061},{"type":377,"tag":422,"props":1066,"children":1067},{},[1068],{"type":377,"tag":434,"props":1069,"children":1072},{"href":1070,"rel":1071},"https://quixel.com/megascans",[438],[1073],{"type":386,"value":1070},{"type":377,"tag":422,"props":1075,"children":1076},{},[1077],{"type":386,"value":1078},"Adobe Substance is the de facto standard tool for texturing and other fanciness. Non-subscription version can be purchased on Steam for $200.",{"title":369,"searchDepth":736,"depth":736,"links":1080},[],"content:notes-to-self:you-are-h.md","notes-to-self/you-are-h.md","notes-to-self/you-are-h",{"_path":1085,"_dir":367,"_draft":368,"_partial":368,"_locale":369,"title":38,"description":1086,"slug":39,"date":1087,"dateString":1088,"encrypted":368,"encryptedBody":372,"body":1089,"_type":742,"_id":1126,"_source":744,"_file":1127,"_stem":1128,"_extension":747},"/notes-to-self/blender","You are bad at modeling, and want to get better (to make spaceships). Added difficulty of your end game being use for real time rendering, requires simpler models.",1719158400000,"2024.06.23",{"type":374,"children":1090,"toc":1124},[1091,1095,1100,1113],{"type":377,"tag":422,"props":1092,"children":1093},{},[1094],{"type":386,"value":1086},{"type":377,"tag":422,"props":1096,"children":1097},{},[1098],{"type":386,"value":1099},"Your approach is to make many many bad models until you get good. What you’ve learned:",{"type":377,"tag":378,"props":1101,"children":1102},{},[1103,1108],{"type":377,"tag":382,"props":1104,"children":1105},{},[1106],{"type":386,"value":1107},"Use bool tool add on (free) in Blender. Use “Brush Boolean” to make non-destructive changes.",{"type":377,"tag":382,"props":1109,"children":1110},{},[1111],{"type":386,"value":1112},"Use bevel modifier to make basic shapes look less basic.",{"type":377,"tag":422,"props":1114,"children":1115},{},[1116,1118],{"type":386,"value":1117},"This very fast video put you on to bool tool and touches on edges for making manageable UV maps: ",{"type":377,"tag":434,"props":1119,"children":1122},{"href":1120,"rel":1121},"https://www.youtube.com/watch?v=zit7UmzcSgU",[438],[1123],{"type":386,"value":1120},{"title":369,"searchDepth":736,"depth":736,"links":1125},[],"content:notes-to-self:blender.md","notes-to-self/blender.md","notes-to-self/blender",{"_path":1130,"_dir":367,"_draft":368,"_partial":368,"_locale":369,"title":176,"description":369,"slug":177,"date":1131,"dateString":1132,"encrypted":368,"encryptedBody":372,"body":1133,"_type":742,"_id":1314,"_source":744,"_file":1315,"_stem":1316,"_extension":747},"/notes-to-self/military-ranks",1713801600000,"2024.04.22",{"type":374,"children":1134,"toc":1312},[1135],{"type":377,"tag":1136,"props":1137,"children":1138},"table",{},[1139,1163],{"type":377,"tag":1140,"props":1141,"children":1142},"thead",{},[1143],{"type":377,"tag":1144,"props":1145,"children":1146},"tr",{},[1147,1153,1158],{"type":377,"tag":1148,"props":1149,"children":1150},"th",{},[1151],{"type":386,"value":1152},"Unit Name",{"type":377,"tag":1148,"props":1154,"children":1155},{},[1156],{"type":386,"value":1157},"Size",{"type":377,"tag":1148,"props":1159,"children":1160},{},[1161],{"type":386,"value":1162},"Rank",{"type":377,"tag":1164,"props":1165,"children":1166},"tbody",{},[1167,1186,1204,1222,1240,1258,1276,1294],{"type":377,"tag":1144,"props":1168,"children":1169},{},[1170,1176,1181],{"type":377,"tag":1171,"props":1172,"children":1173},"td",{},[1174],{"type":386,"value":1175},"Squad",{"type":377,"tag":1171,"props":1177,"children":1178},{},[1179],{"type":386,"value":1180},"6-10 Soldiers",{"type":377,"tag":1171,"props":1182,"children":1183},{},[1184],{"type":386,"value":1185},"Sergeant",{"type":377,"tag":1144,"props":1187,"children":1188},{},[1189,1194,1199],{"type":377,"tag":1171,"props":1190,"children":1191},{},[1192],{"type":386,"value":1193},"Platoon",{"type":377,"tag":1171,"props":1195,"children":1196},{},[1197],{"type":386,"value":1198},"3-4 Squads",{"type":377,"tag":1171,"props":1200,"children":1201},{},[1202],{"type":386,"value":1203},"2nd Lieutenant",{"type":377,"tag":1144,"props":1205,"children":1206},{},[1207,1212,1217],{"type":377,"tag":1171,"props":1208,"children":1209},{},[1210],{"type":386,"value":1211},"Company/Battery/Troop",{"type":377,"tag":1171,"props":1213,"children":1214},{},[1215],{"type":386,"value":1216},"3-4 Platoons",{"type":377,"tag":1171,"props":1218,"children":1219},{},[1220],{"type":386,"value":1221},"Captain/1st Lieutenant/Major",{"type":377,"tag":1144,"props":1223,"children":1224},{},[1225,1230,1235],{"type":377,"tag":1171,"props":1226,"children":1227},{},[1228],{"type":386,"value":1229},"Battalion",{"type":377,"tag":1171,"props":1231,"children":1232},{},[1233],{"type":386,"value":1234},"3-5 Companies",{"type":377,"tag":1171,"props":1236,"children":1237},{},[1238],{"type":386,"value":1239},"Lieutenant Colonel",{"type":377,"tag":1144,"props":1241,"children":1242},{},[1243,1248,1253],{"type":377,"tag":1171,"props":1244,"children":1245},{},[1246],{"type":386,"value":1247},"Brigade/Regiment",{"type":377,"tag":1171,"props":1249,"children":1250},{},[1251],{"type":386,"value":1252},"3-5 Battalions",{"type":377,"tag":1171,"props":1254,"children":1255},{},[1256],{"type":386,"value":1257},"Brigadier General/Colonel",{"type":377,"tag":1144,"props":1259,"children":1260},{},[1261,1266,1271],{"type":377,"tag":1171,"props":1262,"children":1263},{},[1264],{"type":386,"value":1265},"Division",{"type":377,"tag":1171,"props":1267,"children":1268},{},[1269],{"type":386,"value":1270},"3 Brigades",{"type":377,"tag":1171,"props":1272,"children":1273},{},[1274],{"type":386,"value":1275},"Major General (2 stars)",{"type":377,"tag":1144,"props":1277,"children":1278},{},[1279,1284,1289],{"type":377,"tag":1171,"props":1280,"children":1281},{},[1282],{"type":386,"value":1283},"Corps",{"type":377,"tag":1171,"props":1285,"children":1286},{},[1287],{"type":386,"value":1288},"2+ Divisions",{"type":377,"tag":1171,"props":1290,"children":1291},{},[1292],{"type":386,"value":1293},"Lieutenant General (3 stars)",{"type":377,"tag":1144,"props":1295,"children":1296},{},[1297,1302,1307],{"type":377,"tag":1171,"props":1298,"children":1299},{},[1300],{"type":386,"value":1301},"Field Army",{"type":377,"tag":1171,"props":1303,"children":1304},{},[1305],{"type":386,"value":1306},"50K+ Soldiers",{"type":377,"tag":1171,"props":1308,"children":1309},{},[1310],{"type":386,"value":1311},"General (4 stars)",{"title":369,"searchDepth":736,"depth":736,"links":1313},[],"content:notes-to-self:military-ranks.md","notes-to-self/military-ranks.md","notes-to-self/military-ranks",{"_path":1318,"_dir":367,"_draft":368,"_partial":368,"_locale":369,"title":293,"description":1319,"slug":294,"date":1320,"dateString":1321,"encrypted":368,"encryptedBody":372,"body":1322,"_type":742,"_id":1593,"_source":744,"_file":1594,"_stem":1595,"_extension":747},"/notes-to-self/supabase","Experimentally using for playkode.com reboot.",1713715200000,"2024.04.21",{"type":374,"children":1323,"toc":1589},[1324,1328,1333,1366,1371,1394,1399,1404,1416,1422,1428,1433,1438,1449,1455,1472,1477,1488,1493,1502,1507,1516,1521,1530,1536,1570,1576],{"type":377,"tag":422,"props":1325,"children":1326},{},[1327],{"type":386,"value":1319},{"type":377,"tag":422,"props":1329,"children":1330},{},[1331],{"type":386,"value":1332},"Free tier has",{"type":377,"tag":378,"props":1334,"children":1335},{},[1336,1341,1346,1351,1356,1361],{"type":377,"tag":382,"props":1337,"children":1338},{},[1339],{"type":386,"value":1340},"unlimited API calls",{"type":377,"tag":382,"props":1342,"children":1343},{},[1344],{"type":386,"value":1345},"50K monthly active users",{"type":377,"tag":382,"props":1347,"children":1348},{},[1349],{"type":386,"value":1350},"500MB DB space",{"type":377,"tag":382,"props":1352,"children":1353},{},[1354],{"type":386,"value":1355},"5GB Bandwidth",{"type":377,"tag":382,"props":1357,"children":1358},{},[1359],{"type":386,"value":1360},"1GB File storage",{"type":377,"tag":382,"props":1362,"children":1363},{},[1364],{"type":386,"value":1365},"2 active projects at a time",{"type":377,"tag":422,"props":1367,"children":1368},{},[1369],{"type":386,"value":1370},"Has",{"type":377,"tag":378,"props":1372,"children":1373},{},[1374,1379,1384,1389],{"type":377,"tag":382,"props":1375,"children":1376},{},[1377],{"type":386,"value":1378},"Authentication",{"type":377,"tag":382,"props":1380,"children":1381},{},[1382],{"type":386,"value":1383},"Postgres",{"type":377,"tag":382,"props":1385,"children":1386},{},[1387],{"type":386,"value":1388},"File storage",{"type":377,"tag":382,"props":1390,"children":1391},{},[1392],{"type":386,"value":1393},"Cloud functions",{"type":377,"tag":422,"props":1395,"children":1396},{},[1397],{"type":386,"value":1398},"Client can basically query Postgres, with both row-level and column-level auth possible. That’s great.",{"type":377,"tag":422,"props":1400,"children":1401},{},[1402],{"type":386,"value":1403},"Possibly harder, more complicated API calls can be done with “edge” functions (functions in the cloud). But you are tempted to move as much logic to the client as possible, as long as data integrity doesn’t become an issue (for example, client is quit in the middle of a multi-step process). Does Supabase allow transactions? No way they’d be possible outside of an edge function?",{"type":377,"tag":422,"props":1405,"children":1406},{},[1407,1414],{"type":377,"tag":434,"props":1408,"children":1411},{"href":1409,"rel":1410},"https://stackoverflow.com/a/77052403",[438],[1412],{"type":386,"value":1413},"Stackflow answer",{"type":386,"value":1415}," suggests Postgres function or trigger.",{"type":377,"tag":654,"props":1417,"children":1419},{"id":1418},"snippets-of-interest",[1420],{"type":386,"value":1421},"Snippets of Interest",{"type":377,"tag":632,"props":1423,"children":1425},{"id":1424},"to-manage-auth-policy-with-indirect-ownership",[1426],{"type":386,"value":1427},"To Manage Auth Policy with Indirect Ownership?",{"type":377,"tag":422,"props":1429,"children":1430},{},[1431],{"type":386,"value":1432},"In my case, a user has many projects. A project has many codes. How to know if a code can be updated by user?",{"type":377,"tag":422,"props":1434,"children":1435},{},[1436],{"type":386,"value":1437},"Auth policy for UPDATE looks like:",{"type":377,"tag":587,"props":1439,"children":1444},{"className":1440,"code":1442,"language":1443,"meta":369},[1441],"language-sql","create policy \"Update code in projects user owns\"\n  on \"public\".\"code\"\n  as permissive for update to authenticated using (\n    (( SELECT auth.uid() AS uid) IN (\n      SELECT projects.user_id FROM projects WHERE (\n          code.project_id = projects.id\n        )\n      )\n    )\n  );\n","sql",[1445],{"type":377,"tag":592,"props":1446,"children":1447},{"__ignoreMap":369},[1448],{"type":386,"value":1442},{"type":377,"tag":632,"props":1450,"children":1452},{"id":1451},"to-use-an-edge-function-from-web-client",[1453],{"type":386,"value":1454},"To Use an Edge Function From Web Client",{"type":377,"tag":422,"props":1456,"children":1457},{},[1458,1464,1466],{"type":377,"tag":434,"props":1459,"children":1462},{"href":1460,"rel":1461},"https://supabase.com/docs/guides/functions/cors",[438],[1463],{"type":386,"value":1460},{"type":386,"value":1465},"\nfor postgres: ",{"type":377,"tag":434,"props":1467,"children":1470},{"href":1468,"rel":1469},"https://supabase.com/docs/guides/functions/connect-to-postgres",[438],[1471],{"type":386,"value":1468},{"type":377,"tag":422,"props":1473,"children":1474},{},[1475],{"type":386,"value":1476},"Edge function:",{"type":377,"tag":587,"props":1478,"children":1483},{"className":1479,"code":1481,"language":1482,"meta":369},[1480],"language-ts","Deno.serve(async (req) => {\n  const corsHeaders = {\n    'Access-Control-Allow-Origin': '*',\n    'Access-Control-Allow-Headers': 'authorization, x-client-info, apikey, content-type',\n  }\n\n if (req.method === 'OPTIONS') {\n     return new Response('ok', { headers: corsHeaders })\n   }\n\n   try {\n     const { name } = await req.json()\n     const data = {\n       message: `Hello ${name}!`,\n     }\n\n     return new Response(JSON.stringify(data), {\n       headers: { ...corsHeaders, 'Content-Type': 'application/json' },\n       status: 200,\n     })\n   } catch (error) {\n     return new Response(JSON.stringify({ error: error.message }), {\n       headers: { ...corsHeaders, 'Content-Type': 'application/json' },\n       status: 400,\n     })\n   }\n})\n\n","ts",[1484],{"type":377,"tag":592,"props":1485,"children":1486},{"__ignoreMap":369},[1487],{"type":386,"value":1481},{"type":377,"tag":422,"props":1489,"children":1490},{},[1491],{"type":386,"value":1492},"Client:",{"type":377,"tag":587,"props":1494,"children":1497},{"className":1495,"code":1496,"language":1482,"meta":369},[1480],"const { data, error } = await supabase.functions.invoke('hello-world', {\n    body: { name: 'Foobar' }\n  })\n",[1498],{"type":377,"tag":592,"props":1499,"children":1500},{"__ignoreMap":369},[1501],{"type":386,"value":1496},{"type":377,"tag":422,"props":1503,"children":1504},{},[1505],{"type":386,"value":1506},"Create an edge function:",{"type":377,"tag":587,"props":1508,"children":1511},{"className":1509,"code":1510,"language":772,"meta":369},[774],"$ supabase functions new \u003Cfunction-name>\n",[1512],{"type":377,"tag":592,"props":1513,"children":1514},{"__ignoreMap":369},[1515],{"type":386,"value":1510},{"type":377,"tag":422,"props":1517,"children":1518},{},[1519],{"type":386,"value":1520},"Deploy an edge function:",{"type":377,"tag":587,"props":1522,"children":1525},{"className":1523,"code":1524,"language":772,"meta":369},[774],"$ supabase functions deploy \u003Cfunction-name>\n$ supabase functions deploy # deploys all functions\n",[1526],{"type":377,"tag":592,"props":1527,"children":1528},{"__ignoreMap":369},[1529],{"type":386,"value":1524},{"type":377,"tag":632,"props":1531,"children":1533},{"id":1532},"to-install-cli",[1534],{"type":386,"value":1535},"To Install CLI",{"type":377,"tag":422,"props":1537,"children":1538},{},[1539,1541,1547,1549,1555,1557,1563,1565],{"type":386,"value":1540},"You used ",{"type":377,"tag":592,"props":1542,"children":1544},{"className":1543},[],[1545],{"type":386,"value":1546},"go",{"type":386,"value":1548}," method (not Homebrew). Was installed in ",{"type":377,"tag":592,"props":1550,"children":1552},{"className":1551},[],[1553],{"type":386,"value":1554},"~/go/bin",{"type":386,"value":1556}," as ",{"type":377,"tag":592,"props":1558,"children":1560},{"className":1559},[],[1561],{"type":386,"value":1562},"cli",{"type":386,"value":1564}," so you renamed it to ",{"type":377,"tag":592,"props":1566,"children":1568},{"className":1567},[],[1569],{"type":386,"value":294},{"type":377,"tag":654,"props":1571,"children":1573},{"id":1572},"unanswered-questions",[1574],{"type":386,"value":1575},"Unanswered Questions",{"type":377,"tag":378,"props":1577,"children":1578},{},[1579,1584],{"type":377,"tag":382,"props":1580,"children":1581},{},[1582],{"type":386,"value":1583},"How to do database migrations? Can all this config be expressed in code & put under version control & made repeatable?",{"type":377,"tag":382,"props":1585,"children":1586},{},[1587],{"type":386,"value":1588},"Edge functions in particular; local testing? Must always be deployed individually, manually?",{"title":369,"searchDepth":736,"depth":736,"links":1590},[1591,1592],{"id":1418,"depth":739,"text":1421},{"id":1572,"depth":739,"text":1575},"content:notes-to-self:supabase.md","notes-to-self/supabase.md","notes-to-self/supabase",{"_path":1597,"_dir":367,"_draft":368,"_partial":368,"_locale":369,"title":98,"description":1598,"slug":99,"date":1599,"dateString":1600,"encrypted":368,"encryptedBody":372,"body":1601,"_type":742,"_id":1654,"_source":744,"_file":1655,"_stem":1656,"_extension":747},"/notes-to-self/game-idea-lunar-lander-motherload","Also Lunar Leeper? Like Motherload in that you have to return to base to refuel between excursions. Farther and farther excursions to get (mine? collect?) better and better resources. Loses Motherload’s live-with-the-changes-you-made pleasure.",1710950400000,"2024-03-20",{"type":374,"children":1602,"toc":1651},[1603,1607,1612,1640,1646],{"type":377,"tag":422,"props":1604,"children":1605},{},[1606],{"type":386,"value":1598},{"type":377,"tag":422,"props":1608,"children":1609},{},[1610],{"type":386,"value":1611},"Ideas:",{"type":377,"tag":378,"props":1613,"children":1614},{},[1615,1620,1625,1630,1635],{"type":377,"tag":382,"props":1616,"children":1617},{},[1618],{"type":386,"value":1619},"upgrade to level an area for landing",{"type":377,"tag":382,"props":1621,"children":1622},{},[1623],{"type":386,"value":1624},"upgrade to drop a refueling way station",{"type":377,"tag":382,"props":1626,"children":1627},{},[1628],{"type":386,"value":1629},"carrying more fuel = heavier, need more thrust?",{"type":377,"tag":382,"props":1631,"children":1632},{},[1633],{"type":386,"value":1634},"more thrust = burn more fuel?",{"type":377,"tag":382,"props":1636,"children":1637},{},[1638],{"type":386,"value":1639},"upgrade to prevent tipping over (automatic stabilizer rockets?)",{"type":377,"tag":654,"props":1641,"children":1643},{"id":1642},"perverse-idea",[1644],{"type":386,"value":1645},"Perverse Idea",{"type":377,"tag":422,"props":1647,"children":1648},{},[1649],{"type":386,"value":1650},"UI test pilot. Controls to pilot become increasingly complex/obtuse as committee “improves” it. Might not be fun but might get you noticed.",{"title":369,"searchDepth":736,"depth":736,"links":1652},[1653],{"id":1642,"depth":739,"text":1645},"content:notes-to-self:game-idea-lunar-lander-motherload.md","notes-to-self/game-idea-lunar-lander-motherload.md","notes-to-self/game-idea-lunar-lander-motherload",{"_path":1658,"_dir":367,"_draft":368,"_partial":368,"_locale":369,"title":269,"description":1659,"slug":270,"date":1660,"dateString":1661,"encrypted":368,"encryptedBody":372,"body":1662,"_type":742,"_id":1740,"_source":744,"_file":1741,"_stem":1742,"_extension":747},"/notes-to-self/seti-editorial-probing-for-etis-probes-in-the-solar-system","Source",1626537600000,"2021.07.17",{"type":374,"children":1663,"toc":1738},[1664,1673,1678,1683,1688,1693,1698,1703,1708,1713,1718,1723,1728,1733],{"type":377,"tag":422,"props":1665,"children":1666},{},[1667],{"type":377,"tag":434,"props":1668,"children":1671},{"href":1669,"rel":1670},"http://www.setileague.org/editor/stride2.htm",[438],[1672],{"type":386,"value":1659},{"type":377,"tag":422,"props":1674,"children":1675},{},[1676],{"type":386,"value":1677},"by Scot Stride\nsstride @ jpl.nasa.gov",{"type":377,"tag":422,"props":1679,"children":1680},{},[1681],{"type":386,"value":1682},"Working at JPL for many years and subscribing to its charter tends to affect a person's worldview. Many of the scientists and engineers at this NASA center don't see our robotic probes as just machines, but as extensions of our senses, intellect and being. Indeed, Matt Golombeck used to humorously call the Mars Pathfinder Sojourner rover a \"mini-geologist\" version of himself. My views are similar. This has indirectly resulted in a personal interest in how advanced ETI might carry out galactic exploration and the construction of interstellar robotic probes.",{"type":377,"tag":422,"props":1684,"children":1685},{},[1686],{"type":386,"value":1687},"It turns out that a great deal of research and writing on the subject of ETI probes has been done (Freitas, et. al), most of it within the context of complementing radio SETI. Presently, the scientific community, news media and general public associate the term SETI with large radio telescopes and the search for weak signals from far away. Most people know there is a possibility of radio communication (CETI), but many don't realize the unfavorable odds of it working in practice over vast distances and multi-generations of human participants. Professional SETI scientists and engineers know full well the potential of microwave/mm-wave for both radio astronomy and for deep space telecommunications.",{"type":377,"tag":422,"props":1689,"children":1690},{},[1691],{"type":386,"value":1692},"The SETI focus so far has been on the detection of narrow-band beacons or leakage from ETI civilizations, complemented by radio astronomy observations and mappings to better understand the origins of ET life. However, the SETI lenses that focus so clearly on the task of searching for far away signals are philosophically out of focus when it comes to searching for ETI telecommunications signals that may originate within our solar system.",{"type":377,"tag":422,"props":1694,"children":1695},{},[1696],{"type":386,"value":1697},"Some time beginning in the early 1970's LDE's (Long-Delayed-Echoes) were a hot topic of discussion. First recorded in the 1920's by Burrows and later advocated by Lunan in the 1970's, these signals were first thought to be radio returns from ETI robotic probes residing in the solar system. It was later showed by Lawton et. al. that these echoes were likely caused by plasma and dust the Earth's upper ionosphere. LDE's are a surprising and unusual natural phenomena that is not fully understood, but they are far too ambiguous to be from ETI robotic probes.",{"type":377,"tag":422,"props":1699,"children":1700},{},[1701],{"type":386,"value":1702},"Russian scientists have tried some limited searches for probe radio signals within the solar system. Freitas and Valdes did an optical search for probe artifacts (SETA) at the five earth-moon-sun libration points. These searches, also done within the SETI context, were primarily negative and inconclusive.",{"type":377,"tag":422,"props":1704,"children":1705},{},[1706],{"type":386,"value":1707},"This fleeting, yet serious, research was not embraced by mainstream SETI scientists and for the most part ignored. It's chilling to think what the reaction would have been if Freitas and Valdes had detected and verified a robotic probe stationed at L5. Aside from these few studies, nothing else has been done within the SETI context to actively search for radio signals from possible ETI probes in the solar system, but there is room for hope.",{"type":377,"tag":422,"props":1709,"children":1710},{},[1711],{"type":386,"value":1712},"Presently at least one SETI telescope is periodically observing robotic probe transmissions emanating just beyond 75 AU. These are not ETI, but from NASA's Pioneer 10 spacecraft. Pioneer 6 has been observed occasionally, as is Galileo when it's Jovian orbit is suitable. Detection of these S-band signals demonstrates that both radio and optical SETI have the capability to search the solar system for signals that could be considered ETI in origin. ETI probe radio transmissions would be clearly distinguishable from those of our own deep space robotic probes, because we know the locations, frequencies and Doppler of our spacecraft.",{"type":377,"tag":422,"props":1714,"children":1715},{},[1716],{"type":386,"value":1717},"It might be argued that if an ETI probe were within our solar system and transmitting a signal toward Earth, intended for us or not, that we would detect it with the current SETI effort. No one with a working knowledge of the current SETI effort would accept this allegation for any frequencies other than the 1 to 3 GHz band (particularly the 18 and 21 cm lines). Millimeter-wave or optical signals from an ETI probe may be illuminating Earth right now, and we would never know it.",{"type":377,"tag":422,"props":1719,"children":1720},{},[1721],{"type":386,"value":1722},"Why not? Because a wideband, all-sky survey is not actively underway. This kind of effort, which I term Solar System SETI (S3ETI), was briefly carried out at the JPL Deep Space Tracking Network during 1992-93, as a part of the NASA HRMS (High Resolution Microwave Survey) effort. At the time, the intent was not to search for ETI probe microwave transmissions within the solar system, but it certainly could have found them if they were there and between 1 and 10 GHz. Nothing was detected, but one year is not very long to find much of anything.",{"type":377,"tag":422,"props":1724,"children":1725},{},[1726],{"type":386,"value":1727},"Project Argus, under the direction of the SETI League, is now diligently trying to recapture some of that sky coverage in the 1 to 3 GHz band. The goal of Argus is 100% sky coverage continuously; quite different from the JPL HRMS effort. This goal, if met even at 1-3 GHz, would outperform even the HRMS effort in terms of sky coverage. If this search were extended in frequency to cover 1 to 40 GHz, Argus would be the best bet for detecting strong leakage, a powerful beacon or robotic probe transmissions in the solar system.",{"type":377,"tag":422,"props":1729,"children":1730},{},[1731],{"type":386,"value":1732},"It is doubtful that ETI probes would transmit telecommunications signals below 2 GHz, and in all likelihood the preferred frequencies are mm-wave or optical. This means that if an S3ETI all-sky survey system is built it should be done at frequencies up to 40 GHz and have a receive sensitivity to a radial distance of 50 AU. Limiting the detection range to \u003C50 AU (Pluto's approximate farthest distance) simplifies receiver design in terms of amplifiers, noise figure and integration times. There is nothing magic about 40 GHz, it is within the microwave window, and there is a moderate selection of commercial hardware available with which to build a mm-wave SETI station. Easing the range requirements allows the use of broad beam antennas (e.g. slightly flared WR28 waveguide) and inexpensive GaAs PHEMT MMIC LNA's that don't need liquid nitrogen cooling.",{"type":377,"tag":422,"props":1734,"children":1735},{},[1736],{"type":386,"value":1737},"At 50 AU two-way telecommunication delay with a probe would be about 14 hours, allowing expedient contact between civilizations to occur if that's one objective. Were the detection range reduced and the bandwidth increased, an effort like Argus, could possibly detect radio emissions from an ETI probe in the solar system. Many members of the SETI League will admit that the prospect of detecting a telecommunications signal from a nearby robotic probe is certainly more exciting than the detection of a faraway single-tone beacon. Food for thought!",{"title":369,"searchDepth":736,"depth":736,"links":1739},[],"content:notes-to-self:seti-editorial-probing-for-etis-probes-in-the-solar-system.md","notes-to-self/seti-editorial-probing-for-etis-probes-in-the-solar-system.md","notes-to-self/seti-editorial-probing-for-etis-probes-in-the-solar-system",1776608498332]