Clonage de VM et génération de nombres aléatoires sous Linux : implications en matière de sécurité et solutions

2025-04-12
Clonage de VM et génération de nombres aléatoires sous Linux : implications en matière de sécurité et solutions

Ce document analyse les implications en matière de sécurité de la restauration de plusieurs clones de VM à partir d’une seule sauvegarde. Linux expose trois interfaces principales de générateur de nombres aléatoires : /dev/random, /dev/urandom et l’appel système getrandom. Le clonage de VM conduit à des états inconsistants du générateur de nombres aléatoires en raison de plusieurs paramètres (tels que les données du minuteur ou les sorties des instructions CPU HWRNG) mélangés à chaque résultat. L’article examine différentes implémentations de générateurs de nombres aléatoires dans les noyaux plus récents et plus anciens et propose des solutions : réinitialiser le générateur de nombres aléatoires après la restauration, utiliser le périphérique virtio-rng et exploiter le mécanisme VMGenID (introduit dans Linux 5.18 et versions ultérieures) pour résoudre les états inconsistants du générateur de nombres aléatoires après le clonage.

Lire plus

PyReason : Logiciel d'inférence explicable pour le raisonnement basé sur les graphes

2025-04-12
PyReason : Logiciel d'inférence explicable pour le raisonnement basé sur les graphes

PyReason est un outil d'inférence visuel qui utilise des règles logiques et des faits pour raisonner sur des structures de graphes. Il prend en charge les graphes annotés, à valeurs réelles et la logique temporelle, offrant une installation de bibliothèque Python, un support parallèle multinœuds (Python 3.9 et 3.10 uniquement) et une documentation et des exemples de code complets. Le logiciel est publié avec un article et est sous licence de permission de marque déposée de l'Arizona Board of Regents/Arizona State University.

Lire plus

Rust CUDA : pour une computation GPU ultra-rapide en Rust

2025-04-11
Rust CUDA : pour une computation GPU ultra-rapide en Rust

Le projet Rust CUDA vise à faire de Rust un langage de premier plan pour le calcul GPU extrêmement rapide à l'aide de la boîte à outils CUDA. Il fournit des outils pour compiler Rust en code PTX hautement optimisé et des bibliothèques pour interagir avec les bibliothèques CUDA existantes. En résolvant les problèmes antérieurs d'intégration de Rust avec CUDA, il offre une suite complète de crates couvrant divers aspects de l'écosystème CUDA, notamment les fonctions côté GPU, les wrappers pour l'API du pilote CUDA et la prise en charge d'OptiX pour le ray tracing. Bien qu'il soit encore en développement initial, le projet vise à propulser l'industrie du calcul GPU Rust vers l'avant.

Lire plus
Développement

Container Tools : Automatisation de la création d’images conteneur Debian minimales

2025-04-11
Container Tools : Automatisation de la création d’images conteneur Debian minimales

Container Tools est un projet qui automatise la création de systèmes de fichiers racine Debian minimaux à l’aide de debootstrap. Il prend en charge la personnalisation avec des paquets et des configurations spécifiques, et intègre l’analyse de sécurité pour les environnements conteneurisés. Il est facilement extensible à d’autres distributions et projets. Il résout les problèmes de taille excessive, d’inefficacité du réseau et de lenteur des itérations des builds Dockerfile traditionnels. Il crée des images conteneur légères et efficaces en rationalisant le processus de build, en incluant uniquement les composants nécessaires. Des images préconstruites avec Java, Kafka, etc. sont disponibles. La sortie finale est un fichier .tar importable et exécutable via `docker import`.

Lire plus

ParticleOS : Une distribution Linux immuable et entièrement personnalisable

2025-04-11
ParticleOS : Une distribution Linux immuable et entièrement personnalisable

ParticleOS est une distribution Linux immuable unique qui permet aux utilisateurs de construire et de signer leurs propres images, leur donnant un contrôle total sur la configuration du système. Les utilisateurs choisissent la distribution de base (Arch et Fedora sont actuellement prises en charge) et les paquets qu'ils souhaitent. Les mises à jour du système sont gérées en clonant le référentiel et en exécutant des commandes mkosi. Il est recommandé de construire systemd à partir du code source pour s'assurer que toutes les fonctionnalités fonctionnent correctement. ParticleOS utilise les clés de l'utilisateur pour la signature de démarrage sécurisé et fournit des instructions d'installation détaillées, y compris l'installation à partir d'une clé USB et la configuration de systemd-homed. Dans les machines virtuelles, le mot de passe root par défaut et le nom d'utilisateur sont tous deux 'particleos'.

Lire plus

Port de Mbed-TLS pour Classic Mac OS : un défi rétro-technologique

2025-04-11
Port de Mbed-TLS pour Classic Mac OS : un défi rétro-technologique

Un développeur a réussi à porter Mbed TLS sur Classic Mac OS 7/8/9, un exploit remarquable. Le projet a surmonté de nombreux obstacles, notamment les limitations des compilateurs C89/C90 dépourvus de fonctionnalités C modernes et les particularités du système de fichiers Mac. Le développeur a implémenté une émulation d’entiers 64 bits et un système personnalisé de collecte d’entropie, permettant finalement une requête GET HTTPS basique sur un Mac classique. Malgré des limitations de sécurité, le projet met en évidence une passion pour la technologie rétro et des compétences de programmation impressionnantes.

Lire plus
Développement Programmation Rétro

Pledge : Un framework de programmation réactive léger pour Swift

2025-04-10
Pledge : Un framework de programmation réactive léger pour Swift

Pledge est un framework de programmation réactive léger et thread-safe pour Swift qui simplifie la gestion de l'état et la propagation des événements. Contrairement à d'autres frameworks avec des courbes d'apprentissage abruptes, Pledge se concentre sur la résolution des problèmes quotidiens rencontrés par les développeurs. Il offre une implémentation thread-safe, des notifications basées sur la priorité, des files d'attente personnalisables, des mises à jour par lots, une limitation de débit et des opérateurs fonctionnels courants. En utilisant `PLObservable` et `PLGlobalStore`, les développeurs peuvent facilement implémenter le motif observateur et la gestion de l'état global, améliorant ainsi l'efficacité et la maintenabilité du code.

Lire plus

Transformer les Docstrings en Fonctions LLM : Présentation de la bibliothèque smartfunc

2025-04-10
Transformer les Docstrings en Fonctions LLM : Présentation de la bibliothèque smartfunc

La bibliothèque smartfunc transforme ingénieusement les docstrings en fonctions LLM, simplifiant l’interaction avec les grands modèles de langage. À l’aide de décorateurs et de modèles Jinja2, elle convertit le texte des docstrings en invites, interagissant avec divers fournisseurs de LLM (comme OpenAI) via la bibliothèque llm sous-jacente. smartfunc prend en charge les modèles Pydantic pour définir les structures de réponse, les fonctions asynchrones, les invites système et un mode de débogage pour faciliter la résolution des problèmes, ce qui améliore considérablement l’efficacité du développement. Bien que ses fonctionnalités soient relativement simplifiées, sa simplicité et sa facilité d’utilisation en font un outil idéal pour le prototypage rapide.

Lire plus
Développement

TVMC : Compression de maillage variable dans le temps utilisant des maillages de référence suivis par le volume

2025-04-10
TVMC : Compression de maillage variable dans le temps utilisant des maillages de référence suivis par le volume

Le projet TVMC présente une nouvelle approche de la compression de maillage variable dans le temps. Il utilise des maillages de référence suivis par le volume, en employant un pipeline en plusieurs étapes incluant le suivi de volume ARAP, le MDS pour la génération du centre de référence, le calcul du quaternion de transformation, la création d'un maillage de référence sans auto-contact suivi par le volume, la déformation du maillage, le calcul du champ de déplacement et la compression et l'évaluation basées sur Draco. Le projet prend en charge Windows et Ubuntu, offrant des instructions détaillées de construction et d'exécution de Docker, ainsi que des instructions pour l'exécution sur une machine locale.

Lire plus

Photon : Bibliothèque de traitement d’images Rust/WebAssembly haute performance

2025-04-10
Photon : Bibliothèque de traitement d’images Rust/WebAssembly haute performance

Photon est une bibliothèque de traitement d’images Rust haute performance qui compile en WebAssembly, permettant un traitement d’images sûr et ultrarapide, à la fois en natif et sur le Web. Elle prend en charge de nombreux formats d’images (PNG, JPEG, BMP, etc.) et offre plus de 96 fonctions personnalisables couvrant la correction d’images, le redimensionnement, les convolutions, la manipulation des canaux, les transformations, les effets monochromes, la manipulation des couleurs, les filtres, le filigrane et le mélange. Photon est disponible en natif, via WebAssembly dans les navigateurs et Node.js. La version 0.3.2 ajoute de nouvelles fonctionnalités telles que le filtre duotone, la rotation d’image et le filtre de tramage.

Lire plus
Développement

RCSS : Préprocesseur CSS inspiré de Rust

2025-04-10
RCSS : Préprocesseur CSS inspiré de Rust

RCSS est un langage de style qui apporte la syntaxe inspirée de Rust à CSS. Il combine la robustesse de Rust avec des fonctionnalités similaires à SASS, telles que l'imbrication et les variables, pour des styles plus propres et plus faciles à maintenir. L'implémentation actuelle possède une syntaxe similaire à Rust, prenant en charge les variables, l'imbrication et les fonctions (actuellement sans arguments), ainsi qu'une extension VS Code pour la mise en évidence de la syntaxe. Les projets futurs incluent l'ajout de la prise en charge des fonctions avec arguments, l'importation, un formateur, une meilleure mise en forme de la sortie CSS et de meilleurs outils de gestion des erreurs et de débogage. RCSS possède une vitesse de compilation impressionnante, se terminant en quelques centaines de microsecondes.

Lire plus
Développement préprocesseur CSS

Visualiseur WebGL pour scènes de voxels clairsemés

2025-04-09
Visualiseur WebGL pour scènes de voxels clairsemés

Un visualiseur interactif basé sur WebGL pour visualiser des scènes de voxels clairsemés à partir de l'article Nvidia Sparse Voxels Rasterization. Ce visualiseur vous permet d'explorer et de visualiser le champ de radiance des voxels depuis votre navigateur web. Le rendu est similaire à l'implémentation de référence CUDA. Il dispose de contrôles de caméra interactifs (souris et tactile), d'un affichage des métriques de performance (FPS) et prend en charge le chargement de fichiers PLY personnalisés. Le projet a utilisé l'assistance de l'IA, se révélant très efficace pour le code standard, mais moins pour le débogage de graphiques complexes. Les fichiers PLY générés peuvent être volumineux ; pensez à limiter le nombre de voxels.

Lire plus
Développement Rendu de voxels

LispE : Un dialecte Lisp novateur avec appariement de motifs et logique

2025-04-09
LispE : Un dialecte Lisp novateur avec appariement de motifs et logique

LispE, un dialecte Lisp moderne développé par Naver, se distingue des implémentations Lisp traditionnelles comme Common Lisp, Scheme et Clojure grâce à des constructions innovantes : defpat, defmacro et defpred. LispE étend la flexibilité et le système de macros de Lisp avec un appariement de motifs avancé, des capacités de macros améliorées et des éléments de programmation logique. defpat permet de définir plusieurs fonctions sous le même nom, chacune déclenchée par un motif d'argument spécifique ; defmacro simplifie la création de syntaxe personnalisée à l'aide de l'appariement de motifs et d'un opérateur $ ; defpred intègre l'appariement de motifs avec l'évaluation basée sur les prédicats et le backtracking automatique, combinant la programmation logique dans le cadre de Lisp. Comparé à d'autres Lisps, LispE offre une expressivité et une modularité supérieures.

Lire plus
Développement appariement de motifs

Exécution de Windows XP et 2003 sur l'Apple TV d'origine !

2025-04-09
Exécution de Windows XP et 2003 sur l'Apple TV d'origine !

Après deux ans de travail, un développeur a réussi à démarrer Windows XP et Windows Server 2003 sur l'Apple TV d'origine ! Cet exploit a surmonté des obstacles importants dus au firmware uniquement EFI de l'appareil, incompatible avec Windows standard. À l'aide d'un chargeur de démarrage FreeLoader personnalisé et de pilotes, le développeur a obtenu un système amorçable avec accès au bureau, bien que certaines fonctions telles que PCI, USB et audio restent partiellement ou totalement rompues.

Lire plus
Technologie

CodeScientist : Un outil d'IA pour la découverte scientifique automatisée – Coûts et risques

2025-04-09
CodeScientist : Un outil d'IA pour la découverte scientifique automatisée – Coûts et risques

CodeScientist est un agent autonome utilisant les LLMs pour la découverte scientifique automatisée. Il génère, débogue et exécute des expériences, mais les coûts varient en fonction des itérations de débogage, de la taille des invites, etc., avec une moyenne d'environ 4 $ par expérience. Les utilisateurs doivent gérer soigneusement les clés API et surveiller leur utilisation pour éviter des coûts élevés. Le code généré peut contenir des clés API ; des modèles d'exclusion sont recommandés pour éviter les validations accidentelles.

Lire plus
Développement Gestion des coûts

Visualisation de la sécurité du noyau Linux : une carte de défense et un vérificateur de durcissement

2025-04-09
Visualisation de la sécurité du noyau Linux : une carte de défense et un vérificateur de durcissement

La sécurité du noyau Linux est complexe. Ce projet présente une carte visuelle détaillant les relations entre les classes de vulnérabilités, les techniques d'exploitation, les mécanismes de détection et les technologies de défense. La carte, écrite en langage DOT et rendue avec GraphViz, facilite la navigation dans la documentation et le code source du noyau. En complément de la carte, il existe un outil, `kernel-hardening-checker`, qui automatise la vérification des options de durcissement de la sécurité du noyau Linux, notamment celles souvent désactivées par défaut dans les distributions principales, améliorant ainsi la sécurité du système.

Lire plus

Formatteur Dockerfile Modernisé : dockerfmt

2025-04-09
Formatteur Dockerfile Modernisé : dockerfmt

Présentation de dockerfmt, un formatteur Dockerfile modernisé basé sur l'analyseur buildkit. Il offre une prise en charge améliorée des commandes RUN (bien que le groupement et les points-virgules ne soient pas encore pris en charge), une prise en charge des commentaires en ligne de base et diverses options de ligne de commande pour la vérification, l'écriture, l'indentation et la gestion des sauts de ligne. Des liaisons JS sont également fournies pour une intégration facile. Bien que des fonctionnalités telles que le retour à la ligne pour les longues commandes JSON et la directive # escape=X ne soient pas encore implémentées, dockerfmt offre un moyen convivial et efficace de formater vos Dockerfiles.

Lire plus
Développement formatteur

Coroot : Observabilité Actionnable Sans Modification de Code

2025-04-08
Coroot : Observabilité Actionnable Sans Modification de Code

Coroot est une plateforme d'observabilité open-source qui collecte automatiquement les métriques, les logs et les traces sans nécessiter de modification de code, transformant ces données en informations exploitables. En utilisant eBPF pour une surveillance sans instrumentation, elle fournit une carte des services, des inspections prédéfinies, des résumés de l'état des applications, un traçage distribué, une analyse des logs et des capacités de profilage. Coroot identifie et résout rapidement les problèmes d'applications, s'intègre à Kubernetes et aux principales plateformes cloud, et offre un suivi des SLO et une surveillance des coûts pour aider les développeurs à optimiser les performances des applications et à réduire les coûts cloud.

Lire plus

HNSW : Un petit monde navigable hiérarchique pour une recherche efficace des plus proches voisins

2025-04-08
HNSW : Un petit monde navigable hiérarchique pour une recherche efficace des plus proches voisins

HNSW est un algorithme basé sur un graphe de petit monde navigable hiérarchique pour la recherche des plus proches voisins d'embeddings vectoriels. Il utilise une structure hiérarchique pour accélérer le processus de recherche. L'algorithme construit des structures de graphe clairsemées et denses à différents niveaux et recherche efficacement de haut en bas. Le code est concis, utilisant le C++ moderne et Eigen pour l'accélération SIMD, ne nécessitant qu'environ 500 lignes de code.

Lire plus

Plugin LLM : Résumez facilement les fils de discussion de Hacker News

2025-04-08
Plugin LLM : Résumez facilement les fils de discussion de Hacker News

Un nouveau plugin LLM, `llm-hacker-news`, vous permet de résumer facilement les fils de discussion de Hacker News. Il suffit d'installer le plugin et d'utiliser la commande `llm -f hn:ID 'votre instruction'` (par exemple, `llm -f hn:43615912 'résumé avec des citations directes illustratives'`) pour obtenir un résumé du fil de discussion avec l'ID spécifié (trouvé dans l'URL du fil de discussion). Les instructions d'installation et de configuration locale sont fournies dans le README.

Lire plus
Développement

Neuroplasticité en temps réel : Donner aux LLMs pré-entraînés un apprentissage en temps réel

2025-04-08
Neuroplasticité en temps réel : Donner aux LLMs pré-entraînés un apprentissage en temps réel

Cette technique expérimentale, appelée « graffiti neuronal », utilise un plugin appelé « couche de pulvérisation » pour injecter des traces de mémoire directement dans la phase finale d’inférence des grands modèles linguistiques pré-entraînés (LLMs) sans réglage fin ni réentraînement. Imitant la neuroplasticité du cerveau, elle modifie subtilement la « pensée » du modèle en modifiant les plongements vectoriels, ce qui influence ses prédictions de jetons génératifs. Grâce à l’interaction, le modèle apprend et évolue progressivement. Sans forcer des sorties de mots spécifiques, il oriente le modèle vers des concepts associés à une interaction répétée. L’objectif est de donner aux modèles d’IA un comportement plus proactif, une personnalité plus concentrée et une curiosité accrue, les aidant finalement à atteindre une forme d’autoconscience au niveau neuronal.

Lire plus
IA

Serveur MCP léger : données météorologiques en temps réel pour Claude

2025-04-07
Serveur MCP léger : données météorologiques en temps réel pour Claude

Ce projet crée un serveur léger de protocole de contexte de modèle (MCP) permettant aux assistants IA comme Claude d’accéder et d’interpréter des données météorologiques en temps réel. Les utilisateurs ajoutent simplement le serveur à leur configuration Claude, compilent le binaire à l’aide de `go build`, configurent une clé API météo et peuvent ensuite interroger des informations météorologiques pour des villes spécifiques dans Claude. Le projet présente une conception modulaire englobant la gestion du serveur, la logique métier, des services factices pour les tests et des modèles de vue, et est sous licence MIT.

Lire plus

Kahuna : Votre gestionnaire IndexedDB

2025-04-07
Kahuna : Votre gestionnaire IndexedDB

Kahuna est une extension de navigateur pour Firefox et les navigateurs basés sur Chromium qui simplifie la gestion des bases de données IndexedDB. Elle vous permet de créer, modifier, visualiser, interroger, éditer, importer et exporter des données IndexedDB. Les fonctionnalités incluent le filtrage des données, la pagination, l'exécution de code JavaScript et l'importation/exportation dans divers formats (Dexie, JSON, CSV). Bien que la documentation soit en cours de développement, Kahuna est un outil puissant pour les développeurs travaillant avec IndexedDB.

Lire plus
Développement

OpenPrompt : Intégration transparente du code dans les LLMs

2025-04-07
OpenPrompt : Intégration transparente du code dans les LLMs

OpenPrompt simplifie le processus d'alimentation du code dans les grands modèles de langage comme Claude, GPT-4 et Grok. Cet outil sérialise rapidement les fichiers et les dossiers au format XML, facilitant le téléchargement de votre base de code. Disponible pour Windows, macOS et Linux (avec des exécutables fournis), OpenPrompt vous permet de sélectionner des répertoires, de filtrer les fichiers, d'ajouter des instructions et de générer une invite XML prête à être collée dans votre LLM choisi. Les cas d'utilisation comprennent les revues de code, la génération de documentation, l'assistance à la refactorisation, la chasse aux bogues, l'apprentissage de nouvelles bases de code et l'analyse architecturale.

Lire plus
Développement

GitMCP : Accédez facilement à la documentation des projets GitHub avec l'IA

2025-04-07
GitMCP : Accédez facilement à la documentation des projets GitHub avec l'IA

GitMCP est un service gratuit et open source qui transforme en toute transparence n'importe quel projet GitHub en point de terminaison distant du protocole de contexte de modèle (MCP), permettant aux assistants IA d'accéder et de comprendre facilement la documentation du projet. Aucune configuration n'est nécessaire ; GitMCP fonctionne immédiatement et est entièrement gratuit et privé, sans collecter d'informations personnellement identifiables ou de requêtes. Les utilisateurs accèdent aux référentiels GitHub ou aux sites GitHub Pages via des formats d'URL simples. Les assistants IA peuvent accéder à la documentation du projet via GitMCP, en utilisant la recherche sémantique pour optimiser l'utilisation des jetons. GitMCP sert de pont entre la documentation de votre référentiel GitHub et les assistants IA en implémentant le MCP, garantissant ainsi une livraison efficace et précise des informations.

Lire plus
Développement

Jeu d'élimination des LLM : raisonnement social, stratégie et tromperie

2025-04-07
Jeu d'élimination des LLM : raisonnement social, stratégie et tromperie

Des chercheurs ont créé un benchmark de « jeu d'élimination » multijoueur pour évaluer les grands modèles de langage (LLM) en matière de raisonnement social, de stratégie et de tromperie. Huit LLM entrent en compétition, participant à des conversations publiques et privées, formant des alliances et votant pour éliminer les adversaires jusqu'à ce qu'il n'en reste plus que deux. Un jury de joueurs éliminés désigne ensuite le vainqueur. L'analyse des journaux de conversation, des schémas de vote et des classements révèle comment les LLM équilibrent les connaissances partagées et les intentions cachées, en forgeant des alliances ou en les trahissant stratégiquement. Le benchmark dépasse les simples dialogues, forçant les modèles à naviguer dans les dynamiques publiques par rapport aux privées, le vote stratégique et la persuasion du jury. GPT-4.5 Preview a été le modèle le plus performant.

Lire plus

mem-isolate : Exécuter du code non sécurisé en toute sécurité

2025-04-06
mem-isolate : Exécuter du code non sécurisé en toute sécurité

mem-isolate exécute votre fonction via un fork(), attend le résultat et le renvoie au processus parent, empêchant le code non sécurisé d'affecter l'espace mémoire du processus parent. Il gère les fuites de mémoire et la fragmentation du tas, imposant la pureté de la mémoire même pour les fonctions impures. Actuellement, il ne prend en charge que les systèmes de type Unix, ajoutant une surcharge d'environ 1 ms par rapport aux appels de fonction directs — un compromis raisonnable pour la sécurité mémoire dans les applications critiques.

Lire plus

TripoSG : Synthèse de formes 3D haute fidélité à l'aide de modèles de flux rectifiés à grande échelle

2025-04-06
TripoSG : Synthèse de formes 3D haute fidélité à l'aide de modèles de flux rectifiés à grande échelle

TripoSG est un modèle de base de pointe pour la génération d'images en 3D haute fidélité. En utilisant des transformateurs de flux rectifiés à grande échelle, un entraînement supervisé hybride et un ensemble de données de haute qualité, il obtient des résultats de pointe. TripoSG génère des maillages avec des caractéristiques nettes, des détails fins et des structures complexes, reflétant avec précision la sémantique de l'image d'entrée. Il possède de fortes capacités de généralisation, gérant divers styles d'entrée. Un modèle de 1,5 milliard de paramètres, ainsi que le code d'inférence et une démonstration interactive, sont désormais disponibles.

Lire plus

Erica Synths open-source ses modules Eurorack DIY

2025-04-06
Erica Synths open-source ses modules Eurorack DIY

Suite à l'arrêt de ses projets DIY Eurorack hérités, Erica Synths a décidé de les mettre en open-source. Ils ont fourni les fichiers Gerber pour les panneaux avant fabriqués en PCB et apporté de légères modifications à la conception des modules afin d'éliminer les composants personnalisés et rares (bien que certains modules nécessitent encore des CI rares disponibles sur www.ericasynths.lv). Chaque dossier contient des informations et des fichiers complets pour construire un module : schémas, fichiers Gerber pour le panneau avant, fichiers Gerber pour les PCB, nomenclatures (BOM), placement des composants avec valeurs et désignations et manuels d'assemblage (à noter que certains manuels concernent des versions plus anciennes du module). Erica Synths autorise l'utilisation par des tiers à des fins personnelles, éducatives ou commerciales, mais ne fournira aucun support ; veuillez consulter les forums (www.muffwiggler.com) pour les nuances de construction, le dépannage, la disponibilité des pièces et les alternatives. Les modules open-source incluent : Bassline, BBD delay/flanger, Delay, Dual VCA, Envelope, MIDI-CV, Mixer, Modulator, Output, Polivoks VCF, Swamp et VCO3.

Lire plus
Matériel Synthétiseur
1 2 25 26 27 29 31 32 33 50 51