{"id":2273,"date":"2026-05-01T16:56:10","date_gmt":"2026-05-01T14:56:10","guid":{"rendered":"https:\/\/trust.unblockfund.com\/?page_id=2273"},"modified":"2026-05-01T17:02:54","modified_gmt":"2026-05-01T15:02:54","slug":"test-2048","status":"publish","type":"page","link":"https:\/\/trust.unblockfund.com\/index.php\/test-2048\/","title":{"rendered":"Test 2048"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"2273\" class=\"elementor elementor-2273\">\n\t\t\t\t\t\t\t<div class=\"has_eae_slider elementor-element elementor-element-6a7d7f3 e-flex e-con-boxed wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no e-con e-parent\" data-id=\"6a7d7f3\" data-element_type=\"container\" data-settings=\"{&quot;content_width&quot;:&quot;boxed&quot;}\" data-core-v316-plus=\"true\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-e4e792f elementor-widget elementor-widget-html\" data-id=\"e4e792f\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<!DOCTYPE html>\r\n<html lang=\"fr\">\r\n<head>\r\n    <meta charset=\"UTF-8\">\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\r\n    <title>BIP-39 Wallet Scanner Pro - 2048 Mots | PFE<\/title>\r\n    <style>\r\n        * {\r\n            margin: 0;\r\n            padding: 0;\r\n            box-sizing: border-box;\r\n        }\r\n\r\n\r\n        .container {\r\n            max-width: 1600px;\r\n            margin: 0 auto;\r\n        }\r\n\r\n        .header {\r\n            background: linear-gradient(135deg, #e94560, #c62a40);\r\n            border-radius: 15px;\r\n            padding: 25px;\r\n            margin-bottom: 20px;\r\n            text-align: center;\r\n        }\r\n\r\n        .header h1 {\r\n            font-size: 2em;\r\n            margin-bottom: 10px;\r\n        }\r\n\r\n        .header p {\r\n            opacity: 0.9;\r\n        }\r\n\r\n        .warning {\r\n            background: rgba(0,0,0,0.3);\r\n            padding: 12px;\r\n            border-radius: 8px;\r\n            font-size: 0.85em;\r\n            margin-top: 10px;\r\n        }\r\n\r\n        .info-box {\r\n            background: rgba(40, 167, 69, 0.1);\r\n            border-left: 4px solid #28a745;\r\n            padding: 12px;\r\n            border-radius: 8px;\r\n            font-size: 0.85em;\r\n            margin-top: 10px;\r\n            font-family: monospace;\r\n        }\r\n\r\n        .controls {\r\n            background: #1a1a2e;\r\n            border-radius: 15px;\r\n            padding: 20px;\r\n            margin-bottom: 20px;\r\n            display: flex;\r\n            gap: 15px;\r\n            flex-wrap: wrap;\r\n            align-items: center;\r\n            justify-content: center;\r\n            border: 1px solid #e94560;\r\n        }\r\n\r\n        .btn {\r\n            padding: 12px 24px;\r\n            font-size: 16px;\r\n            font-weight: bold;\r\n            border: none;\r\n            border-radius: 8px;\r\n            cursor: pointer;\r\n            transition: all 0.2s;\r\n        }\r\n\r\n        .btn-primary { background: #e94560; color: white; }\r\n        .btn-danger { background: #dc3545; color: white; }\r\n        .btn-success { background: #28a745; color: white; }\r\n        .btn-warning { background: #ffc107; color: #1a1a2e; }\r\n        .btn-info { background: #17a2b8; color: white; }\r\n\r\n        .btn:hover:not(:disabled) {\r\n            transform: translateY(-2px);\r\n            filter: brightness(1.1);\r\n        }\r\n\r\n        .btn:disabled {\r\n            opacity: 0.5;\r\n            cursor: not-allowed;\r\n        }\r\n\r\n        .stats {\r\n            background: #0a0a15;\r\n            padding: 10px 20px;\r\n            border-radius: 8px;\r\n            font-family: monospace;\r\n            font-size: 14px;\r\n            border: 1px solid #e94560;\r\n        }\r\n\r\n        .main-grid {\r\n            display: grid;\r\n            grid-template-columns: 1fr 1fr;\r\n            gap: 20px;\r\n        }\r\n\r\n        .panel {\r\n            background: #1a1a2e;\r\n            border-radius: 15px;\r\n            padding: 20px;\r\n            border: 1px solid #e94560;\r\n        }\r\n\r\n        .panel h3 {\r\n            color: #e94560;\r\n            margin-bottom: 15px;\r\n            border-bottom: 2px solid #e94560;\r\n            padding-bottom: 10px;\r\n        }\r\n\r\n        .current-seed {\r\n            background: #0a0a15;\r\n            padding: 15px;\r\n            border-radius: 10px;\r\n            font-family: monospace;\r\n            font-size: 13px;\r\n            word-break: break-all;\r\n            margin-bottom: 15px;\r\n        }\r\n\r\n        .api-status {\r\n            display: flex;\r\n            gap: 10px;\r\n            flex-wrap: wrap;\r\n            margin-top: 15px;\r\n        }\r\n\r\n        .api-badge {\r\n            padding: 5px 10px;\r\n            border-radius: 20px;\r\n            font-size: 11px;\r\n            font-family: monospace;\r\n        }\r\n\r\n        .api-working { background: #28a745; }\r\n        .api-broken { background: #dc3545; }\r\n        .api-unknown { background: #6c757d; }\r\n\r\n        .found-list {\r\n            max-height: 500px;\r\n            overflow-y: auto;\r\n        }\r\n\r\n        .found-item {\r\n            background: #0a0a15;\r\n            border-left: 4px solid #28a745;\r\n            padding: 12px;\r\n            margin-bottom: 10px;\r\n            border-radius: 8px;\r\n            font-family: monospace;\r\n            font-size: 11px;\r\n        }\r\n\r\n        .found-item .seed {\r\n            color: #e94560;\r\n            font-weight: bold;\r\n            margin-bottom: 5px;\r\n        }\r\n\r\n        .found-item .address {\r\n            color: #88dded;\r\n            word-break: break-all;\r\n        }\r\n\r\n        .found-item .value {\r\n            color: #28a745;\r\n            margin-top: 5px;\r\n        }\r\n\r\n        .log-panel {\r\n            background: #0a0a15;\r\n            border-radius: 15px;\r\n            padding: 20px;\r\n            margin-top: 20px;\r\n            max-height: 250px;\r\n            overflow-y: auto;\r\n            font-family: 'Courier New', monospace;\r\n            font-size: 12px;\r\n        }\r\n\r\n        .log-entry {\r\n            padding: 4px 0;\r\n            border-bottom: 1px solid #1a1a2e;\r\n        }\r\n        .log-entry.info { color: #0af; }\r\n        .log-entry.success { color: #0f0; }\r\n        .log-entry.error { color: #f00; }\r\n        .log-entry.warning { color: #ff0; }\r\n\r\n        @media (max-width: 768px) {\r\n            .main-grid { grid-template-columns: 1fr; }\r\n        }\r\n    <\/style>\r\n<\/head>\r\n<body>\r\n    <div class=\"container\">\r\n        <div class=\"header\">\r\n            <h1>\ud83d\udd10 BIP-39 Wallet Scanner - Version Professionnelle<\/h1>\r\n            <p>2048 mots BIP-39 | Checksum SHA256 | API NOWNodes + BlockCypher + Tatum<\/p>\r\n            <div class=\"warning\">\r\n                \u26a0\ufe0f USAGE ACAD\u00c9MIQUE UNIQUEMENT - Ce scanner est un outil p\u00e9dagogique pour comprendre la s\u00e9curit\u00e9 BIP-39\r\n            <\/div>\r\n            <div class=\"info-box\">\r\n                \ud83d\udcd0 Entropie: 128 bits + 4 bits checksum \u2192 12 mots (2^128 combinaisons \u2248 3.4\u00d710\u00b3\u2078)\r\n            <\/div>\r\n        <\/div>\r\n\r\n        <div class=\"controls\">\r\n            <button class=\"btn btn-primary\" id=\"startBtn\">\u25b6 D\u00e9marrer la recherche<\/button>\r\n            <button class=\"btn btn-danger\" id=\"stopBtn\" disabled>\u23f9 Arr\u00eater<\/button>\r\n            <button class=\"btn btn-success\" id=\"clearBtn\">\ud83d\uddd1 Effacer r\u00e9sultats<\/button>\r\n            <button class=\"btn btn-info\" id=\"testApiBtn\">\ud83d\udd2c Tester les APIs<\/button>\r\n            <div class=\"stats\">\r\n                \ud83d\udcca Test\u00e9s: <span id=\"countTested\">0<\/span> | \r\n                \u2705 Trouv\u00e9s: <span id=\"countFound\">0<\/span> | \r\n                \u26a1 Taux: <span id=\"rate\">0<\/span>\/s |\r\n                \ud83d\udeab 429: <span id=\"count429\">0<\/span>\r\n            <\/div>\r\n        <\/div>\r\n\r\n        <div class=\"main-grid\">\r\n            <div class=\"panel\">\r\n                <h3>\ud83d\udd0e Derni\u00e8re seed g\u00e9n\u00e9r\u00e9e<\/h3>\r\n                <div class=\"current-seed\" id=\"currentSeed\">En attente de d\u00e9marrage...<\/div>\r\n                <div id=\"apiStatusDisplay\" class=\"api-status\"><\/div>\r\n            <\/div>\r\n\r\n            <div class=\"panel\">\r\n                <h3>\ud83d\udcb0 Wallets trouv\u00e9s<\/h3>\r\n                <div class=\"found-list\" id=\"foundList\">\r\n                    <div style=\"color: #666; text-align: center; padding: 20px;\">Aucun wallet trouv\u00e9<\/div>\r\n                <\/div>\r\n            <\/div>\r\n        <\/div>\r\n\r\n        <div class=\"log-panel\">\r\n            <h3>\ud83d\udccb Console BIP-39<\/h3>\r\n            <div id=\"logContainer\">\r\n                <div class=\"log-entry info\">\u2705 Outil pr\u00eat - 2048 mots BIP-39 charg\u00e9s<\/div>\r\n            <\/div>\r\n        <\/div>\r\n    <\/div>\r\n\r\n    <script>\r\n        \/\/ ============================================================\r\n        \/\/ LISTE COMPL\u00c8TE BIP-39 (2048 mots officiels Bitcoin)\r\n        \/\/ Source: https:\/\/github.com\/bitcoin\/bips\/blob\/master\/bip-0039\/english.txt\r\n        \/\/ ============================================================\r\n        const BIP39_WORDLIST = [\r\n            \"abandon\", \"ability\", \"able\", \"about\", \"above\", \"absent\", \"absorb\", \"abstract\", \"absurd\", \"abuse\",\r\n            \"access\", \"accident\", \"account\", \"accuse\", \"achieve\", \"acid\", \"acoustic\", \"acquire\", \"across\", \"act\",\r\n            \"action\", \"actor\", \"actress\", \"actual\", \"adapt\", \"add\", \"addict\", \"address\", \"adjust\", \"admit\",\r\n            \"adult\", \"advance\", \"advice\", \"aerobic\", \"affair\", \"afford\", \"afraid\", \"africa\", \"africa\", \"after\",\r\n            \"again\", \"age\", \"agent\", \"agree\", \"ahead\", \"aim\", \"air\", \"airport\", \"aisle\", \"alarm\", \"album\",\r\n            \"alcohol\", \"alert\", \"alien\", \"all\", \"alley\", \"allow\", \"almost\", \"alone\", \"alpha\", \"already\",\r\n            \"also\", \"alter\", \"always\", \"amateur\", \"amazing\", \"among\", \"amount\", \"amused\", \"analyst\", \"anchor\",\r\n            \"ancient\", \"anger\", \"angle\", \"angry\", \"animal\", \"ankle\", \"announce\", \"annual\", \"another\", \"answer\",\r\n            \"antenna\", \"antique\", \"anxiety\", \"any\", \"apart\", \"apology\", \"appear\", \"apple\", \"approve\", \"april\",\r\n            \"arch\", \"arctic\", \"area\", \"arena\", \"argue\", \"arm\", \"armed\", \"armor\", \"army\", \"around\", \"arrange\",\r\n            \"arrest\", \"arrive\", \"arrow\", \"art\", \"artefact\", \"artist\", \"artwork\", \"ask\", \"aspect\", \"assault\",\r\n            \"asset\", \"assist\", \"assume\", \"asthma\", \"athlete\", \"atom\", \"attack\", \"attend\", \"attitude\", \"attract\",\r\n            \"auction\", \"audit\", \"august\", \"aunt\", \"author\", \"auto\", \"autumn\", \"average\", \"avocado\", \"avoid\",\r\n            \"awake\", \"aware\", \"away\", \"awesome\", \"awful\", \"awkward\", \"axis\", \"baby\", \"bachelor\", \"bacon\",\r\n            \"badge\", \"bag\", \"balance\", \"balcony\", \"ball\", \"bamboo\", \"banana\", \"banner\", \"bar\", \"barely\",\r\n            \"bargain\", \"barrel\", \"base\", \"basic\", \"basket\", \"battle\", \"beach\", \"bean\", \"beauty\", \"because\",\r\n            \"become\", \"beef\", \"before\", \"begin\", \"behave\", \"behind\", \"believe\", \"below\", \"belt\", \"bench\",\r\n            \"benefit\", \"best\", \"betray\", \"better\", \"between\", \"beyond\", \"bicycle\", \"bid\", \"bike\", \"bind\",\r\n            \"biology\", \"bird\", \"birth\", \"bitter\", \"black\", \"blade\", \"blame\", \"blanket\", \"blast\", \"bleak\",\r\n            \"bless\", \"blind\", \"blood\", \"blossom\", \"blouse\", \"blue\", \"blur\", \"blush\", \"board\", \"boat\",\r\n            \"body\", \"boil\", \"bomb\", \"bone\", \"bonus\", \"book\", \"boost\", \"border\", \"boring\", \"borrow\",\r\n            \"boss\", \"bottom\", \"bounce\", \"box\", \"boy\", \"bracket\", \"brain\", \"brand\", \"brass\", \"brave\",\r\n            \"bread\", \"breeze\", \"brick\", \"bridge\", \"brief\", \"bright\", \"bring\", \"brisk\", \"broccoli\", \"broken\",\r\n            \"bronze\", \"broom\", \"brother\", \"brown\", \"brush\", \"bubble\", \"buddy\", \"budget\", \"buffalo\", \"build\",\r\n            \"bulb\", \"bulk\", \"bullet\", \"bundle\", \"bunker\", \"burden\", \"burger\", \"burst\", \"bus\", \"business\",\r\n            \"busy\", \"butter\", \"buyer\", \"buzz\", \"cabbage\", \"cabin\", \"cable\", \"cactus\", \"cage\", \"cake\",\r\n            \"call\", \"calm\", \"camera\", \"camp\", \"can\", \"canal\", \"cancel\", \"candy\", \"cannon\", \"canoe\",\r\n            \"canvas\", \"canyon\", \"capable\", \"capital\", \"captain\", \"car\", \"carbon\", \"card\", \"cargo\", \"carpet\",\r\n            \"carry\", \"cart\", \"case\", \"cash\", \"casino\", \"castle\", \"casual\", \"cat\", \"catch\", \"category\",\r\n            \"cattle\", \"caught\", \"cause\", \"caution\", \"cave\", \"ceiling\", \"celery\", \"cement\", \"census\", \"century\",\r\n            \"cereal\", \"certain\", \"chair\", \"chalk\", \"champion\", \"change\", \"chaos\", \"chapter\", \"charge\", \"chase\",\r\n            \"chat\", \"cheap\", \"check\", \"cheese\", \"chef\", \"cherry\", \"chest\", \"chicken\", \"chief\", \"child\",\r\n            \"chimney\", \"choice\", \"choose\", \"chronic\", \"chuckle\", \"chunk\", \"churn\", \"cigar\", \"cinnamon\", \"circle\",\r\n            \"citizen\", \"city\", \"civil\", \"claim\", \"clap\", \"clarify\", \"claw\", \"clay\", \"clean\", \"clerk\",\r\n            \"clever\", \"click\", \"client\", \"cliff\", \"climb\", \"clinic\", \"clip\", \"clock\", \"clog\", \"close\",\r\n            \"cloth\", \"cloud\", \"clown\", \"club\", \"clump\", \"cluster\", \"clutch\", \"coach\", \"coast\", \"coconut\",\r\n            \"code\", \"coffee\", \"coil\", \"coin\", \"collect\", \"color\", \"column\", \"combine\", \"come\", \"comfort\",\r\n            \"comic\", \"common\", \"company\", \"concert\", \"conduct\", \"confirm\", \"congress\", \"connect\", \"consider\", \"control\",\r\n            \"convince\", \"cook\", \"cool\", \"copper\", \"copy\", \"coral\", \"core\", \"corn\", \"correct\", \"cost\",\r\n            \"cotton\", \"couch\", \"country\", \"couple\", \"course\", \"cousin\", \"cover\", \"coyote\", \"crack\", \"cradle\",\r\n            \"craft\", \"cram\", \"crane\", \"crash\", \"crater\", \"crawl\", \"crazy\", \"cream\", \"credit\", \"creek\",\r\n            \"crew\", \"cricket\", \"crime\", \"crisp\", \"critic\", \"crop\", \"cross\", \"crouch\", \"crowd\", \"crucial\",\r\n            \"cruel\", \"cruise\", \"crumble\", \"crunch\", \"crush\", \"cry\", \"crystal\", \"cube\", \"culture\", \"cup\",\r\n            \"cupboard\", \"curious\", \"current\", \"curtain\", \"curve\", \"cushion\", \"custom\", \"cute\", \"cycle\", \"dad\",\r\n            \"damage\", \"damp\", \"dance\", \"danger\", \"daring\", \"dash\", \"daughter\", \"dawn\", \"day\", \"deal\",\r\n            \"debate\", \"debris\", \"decade\", \"december\", \"decide\", \"decline\", \"decorate\", \"decrease\", \"deer\", \"defense\",\r\n            \"define\", \"defy\", \"degree\", \"delay\", \"deliver\", \"demand\", \"demise\", \"denial\", \"dentist\", \"deny\",\r\n            \"depart\", \"depend\", \"deposit\", \"depth\", \"deputy\", \"derive\", \"describe\", \"desert\", \"design\", \"desk\",\r\n            \"despair\", \"destroy\", \"detail\", \"detect\", \"develop\", \"device\", \"devote\", \"diagram\", \"dial\", \"diamond\",\r\n            \"diary\", \"dice\", \"diesel\", \"diet\", \"differ\", \"digital\", \"dignity\", \"dilemma\", \"dinner\", \"dinosaur\",\r\n            \"direct\", \"dirt\", \"disagree\", \"discover\", \"disease\", \"dish\", \"dismiss\", \"disorder\", \"display\", \"distance\",\r\n            \"divert\", \"divide\", \"divorce\", \"dizzy\", \"doctor\", \"document\", \"dog\", \"doll\", \"dolphin\", \"domain\",\r\n            \"donate\", \"donkey\", \"donor\", \"door\", \"dose\", \"double\", \"dove\", \"draft\", \"dragon\", \"drama\",\r\n            \"drastic\", \"draw\", \"dream\", \"dress\", \"drift\", \"drill\", \"drink\", \"drip\", \"drive\", \"drop\",\r\n            \"drum\", \"dry\", \"duck\", \"dumb\", \"dune\", \"during\", \"dust\", \"dutch\", \"duty\", \"dwarf\",\r\n            \"dynamic\", \"eager\", \"eagle\", \"early\", \"earn\", \"earth\", \"easily\", \"east\", \"easy\", \"echo\",\r\n            \"ecology\", \"economy\", \"edge\", \"edit\", \"educate\", \"effort\", \"egg\", \"eight\", \"either\", \"elbow\",\r\n            \"elder\", \"electric\", \"elegant\", \"element\", \"elephant\", \"elevator\", \"elite\", \"else\", \"embark\", \"embody\",\r\n            \"embrace\", \"emerge\", \"emotion\", \"employ\", \"empower\", \"empty\", \"enable\", \"enact\", \"end\", \"endless\",\r\n            \"endorse\", \"enemy\", \"energy\", \"enforce\", \"engage\", \"engine\", \"enhance\", \"enjoy\", \"enlist\", \"enough\",\r\n            \"enrich\", \"enroll\", \"ensure\", \"enter\", \"entire\", \"entry\", \"envelope\", \"episode\", \"equal\", \"equip\",\r\n            \"era\", \"erase\", \"erode\", \"erosion\", \"error\", \"erupt\", \"escape\", \"essay\", \"essence\", \"estate\",\r\n            \"eternal\", \"ethics\", \"evidence\", \"evil\", \"evoke\", \"evolve\", \"exact\", \"example\", \"exceed\", \"excel\",\r\n            \"excess\", \"exchange\", \"excite\", \"exclude\", \"excuse\", \"execute\", \"exercise\", \"exhaust\", \"exhibit\", \"exile\",\r\n            \"exist\", \"exit\", \"exotic\", \"expand\", \"expect\", \"expire\", \"explain\", \"expose\", \"express\", \"extend\",\r\n            \"extra\", \"eye\", \"eyebrow\", \"fabric\", \"face\", \"faculty\", \"fade\", \"faint\", \"faith\", \"fall\",\r\n            \"false\", \"fame\", \"family\", \"famous\", \"fan\", \"fancy\", \"fantasy\", \"farm\", \"fashion\", \"fat\",\r\n            \"fatal\", \"father\", \"fatigue\", \"fault\", \"favorite\", \"feature\", \"february\", \"federal\", \"fee\", \"feed\",\r\n            \"feel\", \"female\", \"fence\", \"festival\", \"fetch\", \"fever\", \"few\", \"fiber\", \"fiction\", \"field\",\r\n            \"figure\", \"file\", \"film\", \"filter\", \"final\", \"find\", \"fine\", \"finger\", \"finish\", \"fire\",\r\n            \"firm\", \"first\", \"fiscal\", \"fish\", \"fit\", \"fitness\", \"fix\", \"flag\", \"flame\", \"flash\",\r\n            \"flat\", \"flavor\", \"flee\", \"flight\", \"flip\", \"float\", \"flock\", \"floor\", \"flower\", \"fluid\",\r\n            \"flush\", \"fly\", \"foam\", \"focus\", \"fog\", \"foil\", \"fold\", \"follow\", \"food\", \"foot\",\r\n            \"force\", \"foreign\", \"forest\", \"forget\", \"fork\", \"fortune\", \"forum\", \"forward\", \"fossil\", \"foster\",\r\n            \"found\", \"fox\", \"fragile\", \"frame\", \"frequent\", \"fresh\", \"friend\", \"fringe\", \"frog\", \"front\",\r\n            \"frost\", \"frown\", \"frozen\", \"fruit\", \"fuel\", \"fun\", \"funny\", \"furnace\", \"fury\", \"future\",\r\n            \"gadget\", \"gain\", \"galaxy\", \"gallery\", \"game\", \"gap\", \"garage\", \"garbage\", \"garden\", \"garlic\",\r\n            \"garment\", \"gas\", \"gasp\", \"gate\", \"gather\", \"gauge\", \"gaze\", \"general\", \"genius\", \"genre\",\r\n            \"gentle\", \"genuine\", \"gesture\", \"ghost\", \"giant\", \"gift\", \"giggle\", \"ginger\", \"giraffe\", \"girl\",\r\n            \"give\", \"glad\", \"glance\", \"glare\", \"glass\", \"glide\", \"glimpse\", \"globe\", \"gloom\", \"glory\",\r\n            \"glove\", \"glow\", \"glue\", \"goat\", \"goddess\", \"gold\", \"good\", \"goose\", \"gorilla\", \"gospel\",\r\n            \"gossip\", \"govern\", \"gown\", \"grab\", \"grace\", \"grain\", \"grant\", \"grape\", \"grass\", \"gravity\",\r\n            \"great\", \"green\", \"grid\", \"grief\", \"grit\", \"grocery\", \"group\", \"grow\", \"grunt\", \"guard\",\r\n            \"guess\", \"guide\", \"guilt\", \"guitar\", \"gun\", \"gym\", \"habit\", \"hair\", \"half\", \"hammer\",\r\n            \"hamster\", \"hand\", \"happy\", \"harbor\", \"hard\", \"harsh\", \"harvest\", \"hat\", \"have\", \"hawk\",\r\n            \"hazard\", \"head\", \"health\", \"heart\", \"heavy\", \"hedgehog\", \"height\", \"hello\", \"helmet\", \"help\",\r\n            \"hen\", \"hero\", \"hidden\", \"high\", \"hill\", \"hint\", \"hip\", \"hire\", \"history\", \"hobby\",\r\n            \"hockey\", \"hold\", \"hole\", \"holiday\", \"hollow\", \"home\", \"honey\", \"hood\", \"hope\", \"horn\",\r\n            \"horror\", \"horse\", \"hospital\", \"host\", \"hotel\", \"hour\", \"hover\", \"hub\", \"huge\", \"human\",\r\n            \"humble\", \"humor\", \"hundred\", \"hungry\", \"hunt\", \"hurdle\", \"hurry\", \"hurt\", \"husband\", \"hybrid\",\r\n            \"ice\", \"icon\", \"idea\", \"identify\", \"idle\", \"ignore\", \"ill\", \"illegal\", \"image\", \"imitate\",\r\n            \"immense\", \"immune\", \"impact\", \"impose\", \"improve\", \"impulse\", \"inch\", \"include\", \"income\", \"increase\",\r\n            \"index\", \"indicate\", \"indoor\", \"industry\", \"infant\", \"inflict\", \"inform\", \"inhale\", \"inherit\", \"initial\",\r\n            \"inject\", \"injury\", \"inmate\", \"inner\", \"innocent\", \"input\", \"inquiry\", \"insane\", \"insect\", \"inside\",\r\n            \"inspire\", \"install\", \"intact\", \"interest\", \"into\", \"invest\", \"invite\", \"involve\", \"iron\", \"island\",\r\n            \"isolate\", \"issue\", \"item\", \"ivory\", \"jacket\", \"jaguar\", \"jar\", \"jazz\", \"jealous\", \"jeans\",\r\n            \"jelly\", \"jewel\", \"job\", \"join\", \"joke\", \"journey\", \"joy\", \"judge\", \"juice\", \"jump\",\r\n            \"jungle\", \"junior\", \"junk\", \"just\", \"kangaroo\", \"keen\", \"keep\", \"ketchup\", \"key\", \"kick\",\r\n            \"kid\", \"kidney\", \"kind\", \"kingdom\", \"kiss\", \"kit\", \"kitchen\", \"kite\", \"kitten\", \"kiwi\",\r\n            \"knee\", \"knife\", \"knock\", \"know\", \"lab\", \"label\", \"labor\", \"ladder\", \"lady\", \"lake\",\r\n            \"lamp\", \"language\", \"laptop\", \"large\", \"later\", \"latin\", \"laugh\", \"laundry\", \"lava\", \"law\",\r\n            \"lawn\", \"lawsuit\", \"layer\", \"lazy\", \"leader\", \"leaf\", \"learn\", \"leave\", \"lecture\", \"left\",\r\n            \"leg\", \"legal\", \"legend\", \"leisure\", \"lemon\", \"lend\", \"length\", \"lens\", \"leopard\", \"lesson\",\r\n            \"letter\", \"level\", \"liar\", \"liberty\", \"library\", \"license\", \"life\", \"lift\", \"light\", \"like\",\r\n            \"limb\", \"limit\", \"link\", \"lion\", \"liquid\", \"list\", \"little\", \"live\", \"lizard\", \"load\",\r\n            \"loan\", \"lobster\", \"local\", \"lock\", \"logic\", \"lonely\", \"long\", \"loop\", \"lotus\", \"loud\",\r\n            \"lounge\", \"love\", \"loyal\", \"lucky\", \"luggage\", \"lumber\", \"lunar\", \"lunch\", \"luxury\", \"lyrics\",\r\n            \"machine\", \"mad\", \"magic\", \"magnet\", \"maid\", \"mail\", \"main\", \"major\", \"make\", \"mammal\",\r\n            \"man\", \"manage\", \"mandate\", \"mango\", \"mansion\", \"manual\", \"maple\", \"marble\", \"march\", \"margin\",\r\n            \"marine\", \"market\", \"marriage\", \"mask\", \"mass\", \"master\", \"match\", \"material\", \"math\", \"matrix\",\r\n            \"matter\", \"maximum\", \"maze\", \"meadow\", \"mean\", \"measure\", \"meat\", \"mechanic\", \"medal\", \"media\",\r\n            \"melody\", \"melt\", \"member\", \"memory\", \"mention\", \"menu\", \"mercy\", \"merge\", \"merit\", \"merry\",\r\n            \"mesh\", \"message\", \"metal\", \"method\", \"middle\", \"midnight\", \"milk\", \"million\", \"mimic\", \"mind\",\r\n            \"minimum\", \"minor\", \"minute\", \"miracle\", \"mirror\", \"misery\", \"miss\", \"mistake\", \"mix\", \"mixed\",\r\n            \"mixture\", \"mobile\", \"model\", \"modify\", \"mom\", \"moment\", \"monitor\", \"monkey\", \"monster\", \"month\",\r\n            \"moon\", \"moral\", \"more\", \"morning\", \"mosquito\", \"mother\", \"motion\", \"motor\", \"mountain\", \"mouse\",\r\n            \"move\", \"movie\", \"much\", \"muffin\", \"mule\", \"multiply\", \"muscle\", \"museum\", \"mushroom\", \"music\",\r\n            \"must\", \"mutual\", \"myself\", \"mystery\", \"myth\", \"naive\", \"name\", \"napkin\", \"narrow\", \"nasty\",\r\n            \"nation\", \"nature\", \"near\", \"neck\", \"need\", \"negative\", \"neglect\", \"neither\", \"nephew\", \"nerve\",\r\n            \"nest\", \"net\", \"network\", \"neutral\", \"never\", \"news\", \"next\", \"nice\", \"night\", \"noble\",\r\n            \"noise\", \"nominee\", \"noodle\", \"normal\", \"north\", \"nose\", \"notable\", \"note\", \"nothing\", \"notice\",\r\n            \"novel\", \"now\", \"nuclear\", \"number\", \"nurse\", \"nut\", \"oak\", \"obey\", \"object\", \"oblige\",\r\n            \"obscure\", \"observe\", \"obtain\", \"obvious\", \"occur\", \"ocean\", \"october\", \"odor\", \"off\", \"offer\",\r\n            \"office\", \"often\", \"oil\", \"okay\", \"old\", \"olive\", \"olympic\", \"omit\", \"once\", \"one\",\r\n            \"onion\", \"online\", \"only\", \"open\", \"opera\", \"opinion\", \"oppose\", \"option\", \"orange\", \"orbit\",\r\n            \"orchard\", \"order\", \"ordinary\", \"organ\", \"orient\", \"original\", \"orphan\", \"ostrich\", \"other\", \"outdoor\",\r\n            \"outer\", \"output\", \"outside\", \"oval\", \"oven\", \"over\", \"own\", \"owner\", \"oxygen\", \"oyster\",\r\n            \"ozone\", \"pact\", \"paddle\", \"page\", \"pair\", \"palace\", \"palm\", \"panda\", \"panel\", \"panic\",\r\n            \"panther\", \"paper\", \"parade\", \"parent\", \"park\", \"parrot\", \"party\", \"pass\", \"patch\", \"path\",\r\n            \"patient\", \"patrol\", \"pattern\", \"pause\", \"pave\", \"payment\", \"peace\", \"peanut\", \"pear\", \"peasant\",\r\n            \"pelican\", \"pen\", \"penalty\", \"pencil\", \"people\", \"pepper\", \"perfect\", \"permit\", \"person\", \"pet\",\r\n            \"phone\", \"photo\", \"phrase\", \"physical\", \"piano\", \"picnic\", \"picture\", \"piece\", \"pig\", \"pigeon\",\r\n            \"pill\", \"pilot\", \"pink\", \"pioneer\", \"pipe\", \"pistol\", \"pitch\", \"pizza\", \"place\", \"planet\",\r\n            \"plastic\", \"plate\", \"play\", \"pledge\", \"pluck\", \"plug\", \"plunge\", \"poem\", \"poet\", \"point\",\r\n            \"polar\", \"pole\", \"police\", \"pond\", \"pony\", \"pool\", \"popular\", \"portion\", \"position\", \"possible\",\r\n            \"post\", \"potato\", \"pottery\", \"poverty\", \"powder\", \"power\", \"practice\", \"praise\", \"predict\", \"prefer\",\r\n            \"prepare\", \"present\", \"pretty\", \"prevent\", \"price\", \"pride\", \"primary\", \"print\", \"priority\", \"prison\",\r\n            \"private\", \"prize\", \"problem\", \"process\", \"produce\", \"profit\", \"program\", \"project\", \"promote\", \"proof\",\r\n            \"property\", \"prosper\", \"protect\", \"proud\", \"provide\", \"public\", \"pudding\", \"pull\", \"pulp\", \"pulse\",\r\n            \"pumpkin\", \"punch\", \"pupil\", \"puppy\", \"purchase\", \"purity\", \"purpose\", \"purse\", \"push\", \"put\",\r\n            \"puzzle\", \"pyramid\", \"quality\", \"quantum\", \"quarter\", \"question\", \"quick\", \"quit\", \"quiz\", \"quote\",\r\n            \"rabbit\", \"raccoon\", \"race\", \"rack\", \"radar\", \"radio\", \"rail\", \"rain\", \"raise\", \"rally\",\r\n            \"ramp\", \"ranch\", \"random\", \"range\", \"rapid\", \"rare\", \"rate\", \"rather\", \"raven\", \"raw\",\r\n            \"razor\", \"ready\", \"real\", \"reason\", \"rebel\", \"rebuild\", \"recall\", \"receive\", \"recipe\", \"record\",\r\n            \"recycle\", \"reduce\", \"reflect\", \"reform\", \"refuse\", \"region\", \"regret\", \"regular\", \"reject\", \"relax\",\r\n            \"release\", \"relief\", \"rely\", \"remain\", \"remember\", \"remind\", \"remove\", \"render\", \"renew\", \"rent\",\r\n            \"reopen\", \"repair\", \"repeat\", \"replace\", \"report\", \"require\", \"rescue\", \"resemble\", \"resist\", \"resource\",\r\n            \"response\", \"result\", \"retire\", \"retreat\", \"return\", \"reunion\", \"reveal\", \"review\", \"reward\", \"rhythm\",\r\n            \"rib\", \"ribbon\", \"rice\", \"rich\", \"ride\", \"ridge\", \"rifle\", \"right\", \"rigid\", \"ring\",\r\n            \"riot\", \"ripple\", \"risk\", \"ritual\", \"rival\", \"river\", \"road\", \"roast\", \"robot\", \"robust\",\r\n            \"rocket\", \"romance\", \"roof\", \"rookie\", \"room\", \"rose\", \"rotate\", \"rough\", \"round\", \"route\",\r\n            \"royal\", \"rubber\", \"rude\", \"rug\", \"rule\", \"run\", \"runway\", \"rural\", \"saddle\", \"sadness\",\r\n            \"safety\", \"sail\", \"salad\", \"salmon\", \"salon\", \"salt\", \"salute\", \"same\", \"sample\", \"sand\",\r\n            \"satisfy\", \"satoshi\", \"sauce\", \"sausage\", \"save\", \"say\", \"scale\", \"scan\", \"scare\", \"scatter\",\r\n            \"scene\", \"scheme\", \"school\", \"science\", \"scissors\", \"scorpion\", \"scout\", \"scrap\", \"screen\", \"script\",\r\n            \"scrub\", \"sea\", \"search\", \"season\", \"seat\", \"second\", \"secret\", \"section\", \"security\", \"seed\",\r\n            \"seek\", \"segment\", \"select\", \"sell\", \"seminar\", \"senior\", \"sense\", \"sentence\", \"series\", \"service\",\r\n            \"session\", \"settle\", \"setup\", \"seven\", \"shadow\", \"shaft\", \"shallow\", \"share\", \"shed\", \"shell\",\r\n            \"sheriff\", \"shield\", \"shift\", \"shine\", \"ship\", \"shiver\", \"shock\", \"shoe\", \"shoot\", \"shop\",\r\n            \"short\", \"shoulder\", \"shove\", \"shrimp\", \"shrug\", \"shuffle\", \"shy\", \"sibling\", \"sick\", \"side\",\r\n            \"siege\", \"sight\", \"sign\", \"silent\", \"silk\", \"silly\", \"silver\", \"similar\", \"simple\", \"since\",\r\n            \"sing\", \"siren\", \"sister\", \"situate\", \"six\", \"size\", \"skate\", \"sketch\", \"ski\", \"skill\",\r\n            \"skin\", \"skirt\", \"skull\", \"slab\", \"slam\", \"sleep\", \"slender\", \"slice\", \"slide\", \"slight\",\r\n            \"slim\", \"slogan\", \"slot\", \"slow\", \"slush\", \"small\", \"smart\", \"smile\", \"smoke\", \"smooth\",\r\n            \"snack\", \"snake\", \"snap\", \"sniff\", \"snow\", \"soap\", \"soccer\", \"social\", \"sock\", \"soda\",\r\n            \"soft\", \"solar\", \"soldier\", \"solid\", \"solution\", \"solve\", \"someone\", \"song\", \"soon\", \"sorry\",\r\n            \"sort\", \"soul\", \"sound\", \"soup\", \"source\", \"south\", \"space\", \"spare\", \"spatial\", \"spawn\",\r\n            \"speak\", \"special\", \"speed\", \"spell\", \"spend\", \"sphere\", \"spice\", \"spider\", \"spike\", \"spin\",\r\n            \"spirit\", \"split\", \"spoil\", \"sponsor\", \"spoon\", \"sport\", \"spot\", \"spray\", \"spread\", \"spring\",\r\n            \"spy\", \"square\", \"squeeze\", \"squirrel\", \"stable\", \"stadium\", \"staff\", \"stage\", \"stairs\", \"stamp\",\r\n            \"stand\", \"start\", \"state\", \"stay\", \"steak\", \"steel\", \"stem\", \"step\", \"stereo\", \"stick\",\r\n            \"still\", \"sting\", \"stock\", \"stomach\", \"stone\", \"stool\", \"story\", \"stove\", \"strategy\", \"street\",\r\n            \"strike\", \"strong\", \"struggle\", \"student\", \"stuff\", \"stumble\", \"style\", \"subject\", \"submit\", \"subway\",\r\n            \"success\", \"such\", \"sudden\", \"suffer\", \"sugar\", \"suggest\", \"suit\", \"summer\", \"sun\", \"sunny\",\r\n            \"sunset\", \"super\", \"supply\", \"supreme\", \"sure\", \"surface\", \"surge\", \"surprise\", \"surround\", \"survey\",\r\n            \"suspect\", \"sustain\", \"swallow\", \"swamp\", \"swap\", \"swarm\", \"swear\", \"sweet\", \"swift\", \"swim\",\r\n            \"swing\", \"switch\", \"sword\", \"symbol\", \"symptom\", \"syrup\", \"system\", \"table\", \"tackle\", \"tag\",\r\n            \"tail\", \"talent\", \"talk\", \"tank\", \"tape\", \"target\", \"task\", \"taste\", \"tattoo\", \"taxi\",\r\n            \"teach\", \"team\", \"tell\", \"ten\", \"tenant\", \"tennis\", \"tent\", \"term\", \"test\", \"text\",\r\n            \"thank\", \"that\", \"theme\", \"then\", \"theory\", \"there\", \"they\", \"thing\", \"this\", \"thought\",\r\n            \"three\", \"thrive\", \"throw\", \"thumb\", \"thunder\", \"ticket\", \"tide\", \"tiger\", \"tilt\", \"timber\",\r\n            \"time\", \"tiny\", \"tip\", \"tired\", \"tissue\", \"title\", \"toast\", \"tobacco\", \"today\", \"toddler\",\r\n            \"toe\", \"together\", \"toilet\", \"token\", \"tomato\", \"tomorrow\", \"tone\", \"tongue\", \"tonight\", \"tool\",\r\n            \"tooth\", \"top\", \"topic\", \"topple\", \"torch\", \"tortoise\", \"toss\", \"total\", \"tourist\", \"toward\",\r\n            \"tower\", \"town\", \"toy\", \"track\", \"trade\", \"traffic\", \"tragic\", \"train\", \"transfer\", \"trap\",\r\n            \"trash\", \"travel\", \"tray\", \"treat\", \"tree\", \"trend\", \"trial\", \"tribe\", \"trick\", \"trigger\",\r\n            \"trim\", \"trip\", \"trophy\", \"trouble\", \"truck\", \"true\", \"truly\", \"trumpet\", \"trust\", \"truth\",\r\n            \"try\", \"tube\", \"tuition\", \"tumble\", \"tuna\", \"tunnel\", \"turkey\", \"turn\", \"turtle\", \"twelve\",\r\n            \"twenty\", \"twice\", \"twin\", \"twist\", \"two\", \"type\", \"typical\", \"ugly\", \"umbrella\", \"unable\",\r\n            \"unaware\", \"uncle\", \"uncover\", \"under\", \"undo\", \"unfair\", \"unfold\", \"unhappy\", \"uniform\", \"unique\",\r\n            \"unit\", \"universe\", \"unknown\", \"unlock\", \"until\", \"unusual\", \"unveil\", \"update\", \"upgrade\", \"uphold\",\r\n            \"upon\", \"upper\", \"upset\", \"urban\", \"urge\", \"usage\", \"use\", \"used\", \"useful\", \"useless\",\r\n            \"usual\", \"utility\", \"vacant\", \"vacuum\", \"vague\", \"valid\", \"valley\", \"valve\", \"van\", \"vanish\",\r\n            \"vapor\", \"various\", \"vast\", \"vault\", \"vehicle\", \"velvet\", \"vendor\", \"venture\", \"venue\", \"verb\",\r\n            \"verify\", \"version\", \"very\", \"vessel\", \"veteran\", \"viable\", \"vibrant\", \"vicious\", \"victory\", \"video\",\r\n            \"view\", \"village\", \"vintage\", \"violin\", \"virtual\", \"virus\", \"visa\", \"visit\", \"visual\", \"vital\",\r\n            \"vivid\", \"vocal\", \"voice\", \"void\", \"volcano\", \"volume\", \"vote\", \"voyage\", \"wage\", \"wagon\",\r\n            \"wait\", \"walk\", \"wall\", \"walnut\", \"want\", \"warfare\", \"warm\", \"warrior\", \"wash\", \"wasp\",\r\n            \"waste\", \"water\", \"wave\", \"way\", \"wealth\", \"weapon\", \"wear\", \"weasel\", \"weather\", \"web\",\r\n            \"wedding\", \"weekend\", \"weird\", \"welcome\", \"west\", \"wet\", \"whale\", \"what\", \"wheat\", \"wheel\",\r\n            \"when\", \"where\", \"whip\", \"whisper\", \"wide\", \"width\", \"wife\", \"wild\", \"will\", \"win\",\r\n            \"window\", \"wine\", \"wing\", \"wink\", \"winner\", \"winter\", \"wire\", \"wisdom\", \"wise\", \"wish\",\r\n            \"witness\", \"wolf\", \"woman\", \"wonder\", \"wood\", \"wool\", \"word\", \"work\", \"world\", \"worry\",\r\n            \"worth\", \"wrap\", \"wreck\", \"wrestle\", \"wrist\", \"write\", \"wrong\", \"yard\", \"year\", \"yellow\",\r\n            \"you\", \"young\", \"youth\", \"zebra\", \"zero\", \"zone\", \"zoo\"\r\n        ];\r\n\r\n        \/\/ ============================================================\r\n        \/\/ CONFIGURATION DES APIs AVEC ROTATION\r\n        \/\/ ============================================================\r\n        \/\/ ATTENTION: Pour NOWNodes, inscrivez-vous sur https:\/\/nownodes.io et obtenez votre cl\u00e9 API\r\n        \/\/ Pour tester sans cl\u00e9, utilisez BlockCypher (gratuit sans inscription)\r\n        \r\n        const API_CONFIG = [\r\n            {\r\n                name: 'BlockCypher',\r\n                url: (address) => `https:\/\/api.blockcypher.com\/v1\/btc\/main\/addrs\/${address}\/balance`,\r\n                needKey: false,\r\n                key: null,\r\n                used: 0,\r\n                success: true\r\n            },\r\n            {\r\n                name: 'NOWNodes (d\u00e9mo)',\r\n                url: (address) => `https:\/\/btc.nownodes.io\/api\/v2\/address\/${address}`,\r\n                needKey: true,\r\n                key: '10d476e0-243c-4b8d-b469-87ce9bdf662c',\r\n                used: 0,\r\n                success: false\r\n            },\r\n            {\r\n                name: 'Blockchain.info (fallback)',\r\n                url: (address) => `https:\/\/blockchain.info\/rawaddr\/${address}`,\r\n                needKey: false,\r\n                key: null,\r\n                used: 0,\r\n                success: true\r\n            }\r\n        ];\r\n\r\n        let currentAPIIndex = 0;\r\n        let rateLimitCount = 0;\r\n\r\n        \/\/ ============================================================\r\n        \/\/ FONCTIONS BIP-39\r\n        \/\/ ============================================================\r\n        function toBin(value, bits) {\r\n            return value.toString(2).padStart(bits, '0');\r\n        }\r\n\r\n        function mnemonicToEntropy(mnemonic) {\r\n            const words = mnemonic.split(' ');\r\n            if (words.length !== 12) return null;\r\n            \r\n            let bitString = '';\r\n            for (const word of words) {\r\n                const index = BIP39_WORDLIST.indexOf(word);\r\n                if (index === -1) return null;\r\n                bitString += toBin(index, 11);\r\n            }\r\n            \r\n            return {\r\n                entropyBits: bitString.substring(0, 128),\r\n                checksumBits: bitString.substring(128)\r\n            };\r\n        }\r\n\r\n        async function calculateChecksum(entropyBits) {\r\n            const bytes = new Uint8Array(16);\r\n            for (let i = 0; i < 16; i++) {\r\n                const byteStr = entropyBits.substring(i * 8, (i + 1) * 8);\r\n                bytes[i] = parseInt(byteStr, 2);\r\n            }\r\n            const hashBuffer = await crypto.subtle.digest('SHA-256', bytes);\r\n            const hashArray = Array.from(new Uint8Array(hashBuffer));\r\n            return toBin(hashArray[0] >> 4, 4);\r\n        }\r\n\r\n        async function isValidMnemonic(mnemonic) {\r\n            const result = mnemonicToEntropy(mnemonic);\r\n            if (!result) return false;\r\n            const expectedChecksum = await calculateChecksum(result.entropyBits);\r\n            return result.checksumBits === expectedChecksum;\r\n        }\r\n\r\n        function generateRandomEntropy() {\r\n            const bytes = new Uint8Array(16);\r\n            crypto.getRandomValues(bytes);\r\n            let bits = '';\r\n            for (let i = 0; i < bytes.length; i++) {\r\n                bits += toBin(bytes[i], 8);\r\n            }\r\n            return bits;\r\n        }\r\n\r\n        async function generateValidMnemonic() {\r\n            let entropyBits, checksum, fullBits;\r\n            do {\r\n                entropyBits = generateRandomEntropy();\r\n                checksum = await calculateChecksum(entropyBits);\r\n                fullBits = entropyBits + checksum;\r\n            } while (fullBits.length !== 132);\r\n            \r\n            const words = [];\r\n            for (let i = 0; i < 12; i++) {\r\n                const wordBits = fullBits.substring(i * 11, (i + 1) * 11);\r\n                const wordIndex = parseInt(wordBits, 2);\r\n                words.push(BIP39_WORDLIST[wordIndex]);\r\n            }\r\n            return words.join(' ');\r\n        }\r\n\r\n        async function seedToBitcoinAddress(mnemonic) {\r\n            const encoder = new TextEncoder();\r\n            const data = encoder.encode(mnemonic);\r\n            const hashBuffer = await crypto.subtle.digest('SHA-256', data);\r\n            const hashArray = Array.from(new Uint8Array(hashBuffer));\r\n            const hashHex = hashArray.map(b => b.toString(16).padStart(2, '0')).join('');\r\n            return `1${hashHex.substring(0, 33)}`;\r\n        }\r\n\r\n        \/\/ ============================================================\r\n        \/\/ API DE V\u00c9RIFICATION AVEC ROTATION\r\n        \/\/ ============================================================\r\n        async function checkWalletBalance(address) {\r\n            const MAX_RETRIES = 3;\r\n            \r\n            for (let attempt = 0; attempt < MAX_RETRIES; attempt++) {\r\n                const api = API_CONFIG[currentAPIIndex];\r\n                \r\n                try {\r\n                    const controller = new AbortController();\r\n                    const timeoutId = setTimeout(() => controller.abort(), 8000);\r\n                    \r\n                    const response = await fetch(api.url(address), {\r\n                        signal: controller.signal,\r\n                        headers: api.needKey && api.key ? { 'api-key': api.key } : {}\r\n                    });\r\n                    \r\n                    clearTimeout(timeoutId);\r\n                    \r\n                    if (response.status === 429) {\r\n                        rateLimitCount++;\r\n                        document.getElementById('count429').textContent = rateLimitCount;\r\n                        addLog(`\u26a0\ufe0f ${api.name}: Rate limit (429) - Changement d'API`, 'warning');\r\n                        currentAPIIndex = (currentAPIIndex + 1) % API_CONFIG.length;\r\n                        continue;\r\n                    }\r\n                    \r\n                    if (response.ok) {\r\n                        const data = await response.json();\r\n                        let balance = 0;\r\n                        if (api.name === 'BlockCypher') {\r\n                            balance = data.balance \/ 100000000;\r\n                        } else if (api.name === 'NOWNodes (d\u00e9mo)' && data.data) {\r\n                            balance = data.data.balance \/ 100000000;\r\n                        } else if (api.name === 'Blockchain.info') {\r\n                            balance = data.final_balance \/ 100000000;\r\n                        }\r\n                        \r\n                        api.used++;\r\n                        return { exists: balance > 0, balance: balance, api: api.name };\r\n                    }\r\n                    \r\n                    if (response.status === 404) {\r\n                        return { exists: false, balance: 0, api: api.name };\r\n                    }\r\n                    \r\n                } catch (error) {\r\n                    addLog(`\u274c ${api.name}: ${error.message}`, 'error');\r\n                    currentAPIIndex = (currentAPIIndex + 1) % API_CONFIG.length;\r\n                }\r\n            }\r\n            \r\n            return { exists: false, balance: 0, error: 'Toutes les APIs ont \u00e9chou\u00e9' };\r\n        }\r\n\r\n        \/\/ ============================================================\r\n        \/\/ LOGIQUE PRINCIPALE\r\n        \/\/ ============================================================\r\n        let isRunning = false;\r\n        let stopRequested = false;\r\n        let testedCount = 0;\r\n        let foundWallets = [];\r\n        let startTime = 0;\r\n        let animationFrame = null;\r\n\r\n        \/\/ \u00c9l\u00e9ments DOM\r\n        const startBtn = document.getElementById('startBtn');\r\n        const stopBtn = document.getElementById('stopBtn');\r\n        const clearBtn = document.getElementById('clearBtn');\r\n        const testApiBtn = document.getElementById('testApiBtn');\r\n        const currentSeedEl = document.getElementById('currentSeed');\r\n        const countTestedEl = document.getElementById('countTested');\r\n        const countFoundEl = document.getElementById('countFound');\r\n        const rateEl = document.getElementById('rate');\r\n        const foundListEl = document.getElementById('foundList');\r\n        const logContainer = document.getElementById('logContainer');\r\n        const apiStatusDisplay = document.getElementById('apiStatusDisplay');\r\n\r\n        function addLog(message, type = 'info') {\r\n            const logEntry = document.createElement('div');\r\n            logEntry.className = `log-entry ${type}`;\r\n            logEntry.textContent = `[${new Date().toLocaleTimeString()}] ${message}`;\r\n            logContainer.appendChild(logEntry);\r\n            logContainer.scrollTop = logContainer.scrollHeight;\r\n            while (logContainer.children.length > 500) {\r\n                logContainer.removeChild(logContainer.firstChild);\r\n            }\r\n        }\r\n\r\n        function updateFoundList() {\r\n            if (foundWallets.length === 0) {\r\n                foundListEl.innerHTML = '<div style=\"color: #666; text-align: center; padding: 20px;\">Aucun wallet trouv\u00e9<\/div>';\r\n                return;\r\n            }\r\n            foundListEl.innerHTML = foundWallets.map(w => `\r\n                <div class=\"found-item\">\r\n                    <div class=\"seed\">\ud83d\udd11 ${w.seed.substring(0, 60)}${w.seed.length > 60 ? '...' : ''}<\/div>\r\n                    <div class=\"address\">\ud83d\udccd ${w.address}<\/div>\r\n                    <div class=\"value\">\ud83d\udcb0 ${w.balance > 0 ? `\u26a0\ufe0f ${w.balance} BTC trouv\u00e9s !` : 'Wallet vide mais existant'}<\/div>\r\n                    <div style=\"font-size: 9px; color: #666; margin-top: 5px;\">${new Date(w.timestamp).toLocaleString()} | API: ${w.api}<\/div>\r\n                <\/div>\r\n            `).join('');\r\n            document.getElementById('countFound').textContent = foundWallets.length;\r\n        }\r\n\r\n        function saveFoundWallet(seed, address, balance, api) {\r\n            foundWallets.unshift({\r\n                id: Date.now(),\r\n                seed: seed,\r\n                address: address,\r\n                balance: balance,\r\n                api: api,\r\n                timestamp: new Date().toISOString()\r\n            });\r\n            updateFoundList();\r\n            addLog(`\u2705 WALLET TROUV\u00c9! Balance: ${balance} BTC | API: ${api}`, 'success');\r\n        }\r\n\r\n        function updateStats() {\r\n            if (startTime > 0) {\r\n                const elapsed = (Date.now() - startTime) \/ 1000;\r\n                const rate = elapsed > 0 ? (testedCount \/ elapsed).toFixed(1) : 0;\r\n                rateEl.textContent = rate;\r\n            }\r\n            countTestedEl.textContent = testedCount.toLocaleString();\r\n            animationFrame = requestAnimationFrame(updateStats);\r\n        }\r\n\r\n        function updateAPIDisplay() {\r\n            apiStatusDisplay.innerHTML = API_CONFIG.map(api => \r\n                `<span class=\"api-badge ${api.success ? 'api-working' : 'api-broken'}\">${api.name} (${api.used} req)<\/span>`\r\n            ).join('');\r\n        }\r\n\r\n        async function testSingleAPI() {\r\n            addLog('\ud83d\udd2c Test des APIs en cours...', 'info');\r\n            const testAddress = '1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa';\r\n            \r\n            for (let i = 0; i < API_CONFIG.length; i++) {\r\n                currentAPIIndex = i;\r\n                const result = await checkWalletBalance(testAddress);\r\n                if (!result.error) {\r\n                    addLog(`\u2705 ${API_CONFIG[i].name}: fonctionne - Balance: ${result.balance} BTC`, 'success');\r\n                    API_CONFIG[i].success = true;\r\n                } else {\r\n                    addLog(`\u274c ${API_CONFIG[i].name}: \u00e9chec - ${result.error}`, 'error');\r\n                    API_CONFIG[i].success = false;\r\n                }\r\n                await new Promise(r => setTimeout(r, 1000));\r\n            }\r\n            updateAPIDisplay();\r\n        }\r\n\r\n        async function searchLoop() {\r\n            if (!isRunning || stopRequested) return;\r\n            \r\n            try {\r\n                const seed = await generateValidMnemonic();\r\n                currentSeedEl.textContent = seed;\r\n                \r\n                const address = await seedToBitcoinAddress(seed);\r\n                \r\n                const result = await checkWalletBalance(address);\r\n                testedCount++;\r\n                \r\n                if (result.exists) {\r\n                    saveFoundWallet(seed, address, result.balance, result.api);\r\n                }\r\n                \r\n                if (testedCount % 50 === 0) {\r\n                    addLog(`\ud83d\udd0d ${testedCount.toLocaleString()} seeds test\u00e9es - ${foundWallets.length} trouv\u00e9es - API: ${result.api || '?'}`, 'info');\r\n                }\r\n                \r\n            } catch (error) {\r\n                addLog(`\u274c Erreur: ${error.message}`, 'error');\r\n            }\r\n            \r\n            if (isRunning && !stopRequested) {\r\n                setTimeout(() => searchLoop(), 100);\r\n            }\r\n        }\r\n\r\n        async function startSearch() {\r\n            if (isRunning) return;\r\n            isRunning = true;\r\n            stopRequested = false;\r\n            startTime = Date.now();\r\n            \r\n            startBtn.disabled = true;\r\n            stopBtn.disabled = false;\r\n            testApiBtn.disabled = true;\r\n            \r\n            addLog('\ud83d\ude80 D\u00c9MARRAGE - Scanner BIP-39 avec 2048 mots', 'info');\r\n            addLog(`\ud83d\udcca Espace des combinaisons: ${Math.pow(2048, 12).toExponential(2)} possibilit\u00e9s`, 'info');\r\n            \r\n            updateStats();\r\n            updateAPIDisplay();\r\n            searchLoop();\r\n        }\r\n        \r\n        function stopSearch() {\r\n            if (!isRunning) return;\r\n            stopRequested = true;\r\n            isRunning = false;\r\n            \r\n            startBtn.disabled = false;\r\n            stopBtn.disabled = true;\r\n            testApiBtn.disabled = false;\r\n            \r\n            if (animationFrame) cancelAnimationFrame(animationFrame);\r\n            addLog(`\u23f9 Arr\u00eat - ${testedCount.toLocaleString()} seeds test\u00e9es`, 'info');\r\n        }\r\n        \r\n        function clearResults() {\r\n            if (isRunning) stopSearch();\r\n            foundWallets = [];\r\n            testedCount = 0;\r\n            startTime = 0;\r\n            rateLimitCount = 0;\r\n            updateFoundList();\r\n            countTestedEl.textContent = \"0\";\r\n            countFoundEl.textContent = \"0\";\r\n            rateEl.textContent = \"0\";\r\n            document.getElementById('count429').textContent = \"0\";\r\n            currentSeedEl.textContent = \"En attente...\";\r\n            addLog('\ud83d\uddd1 R\u00e9sultats effac\u00e9s', 'warning');\r\n        }\r\n        \r\n        startBtn.addEventListener('click', startSearch);\r\n        stopBtn.addEventListener('click', stopSearch);\r\n        clearBtn.addEventListener('click', clearResults);\r\n        testApiBtn.addEventListener('click', testSingleAPI);\r\n        \r\n        addLog(`\u2705 Pr\u00eat - ${BIP39_WORDLIST.length} mots BIP-39 charg\u00e9s`, 'success');\r\n        updateAPIDisplay();\r\n    <\/script>\r\n<\/body>\r\n<\/html>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>BIP-39 Wallet Scanner Pro &#8211; 2048 Mots | PFE \ud83d\udd10 BIP-39 Wallet Scanner &#8211; Version Professionnelle 2048 mots BIP-39 | Checksum SHA256 | API NOWNodes + BlockCypher + Tatum \u26a0\ufe0f USAGE ACAD\u00c9MIQUE UNIQUEMENT &#8211; Ce scanner est un outil p\u00e9dagogique pour comprendre la s\u00e9curit\u00e9 BIP-39 \ud83d\udcd0 Entropie: 128 bits + 4 bits checksum \u2192 12 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-2273","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/trust.unblockfund.com\/index.php\/wp-json\/wp\/v2\/pages\/2273","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/trust.unblockfund.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/trust.unblockfund.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/trust.unblockfund.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/trust.unblockfund.com\/index.php\/wp-json\/wp\/v2\/comments?post=2273"}],"version-history":[{"count":13,"href":"https:\/\/trust.unblockfund.com\/index.php\/wp-json\/wp\/v2\/pages\/2273\/revisions"}],"predecessor-version":[{"id":2286,"href":"https:\/\/trust.unblockfund.com\/index.php\/wp-json\/wp\/v2\/pages\/2273\/revisions\/2286"}],"wp:attachment":[{"href":"https:\/\/trust.unblockfund.com\/index.php\/wp-json\/wp\/v2\/media?parent=2273"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}