{"id":77,"date":"2026-04-10T20:06:31","date_gmt":"2026-04-10T20:06:31","guid":{"rendered":"https:\/\/cashchat.se\/dir\/?page_id=77"},"modified":"2026-05-04T15:36:00","modified_gmt":"2026-05-04T15:36:00","slug":"adase","status":"publish","type":"page","link":"https:\/\/cashchat.se\/dir\/adase\/","title":{"rendered":"Adase"},"content":{"rendered":"\n<!--nextpage-->\n\n\n\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, viewport-fit=cover\">\n    <title>Adase Ads Ltd \u00b7 Serie A Funding Round<\/title>\n    <script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/html2canvas\/1.4.1\/html2canvas.min.js\"><\/script>\n    <link href=\"https:\/\/fonts.googleapis.com\/css2?family=Alex+Brush&#038;display=swap\" rel=\"stylesheet\">\n    <style>\n        * {\n            margin: 0;\n            padding: 0;\n            box-sizing: border-box;\n            font-family: 'Inter', system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;\n        }\n        body {\n            background: #0c011f;\n            padding: 1.5rem;\n        }\n        .dashboard {\n            max-width: 1400px;\n            margin: 0 auto;\n            background: #fefaf0;\n            border-radius: 2rem;\n            box-shadow: 0 20px 35px -12px rgba(0,0,0,0.4);\n            overflow: hidden;\n            border: 2px solid #c5f82a;\n        }\n        .header {\n            background: #4c1d95;\n            padding: 1rem 2rem;\n            color: white;\n            display: flex;\n            justify-content: space-between;\n            align-items: center;\n            flex-wrap: wrap;\n            gap: 1rem;\n            border-bottom: 5px solid #d9ff33;\n        }\n        .logo {\n            font-size: 1.8rem;\n            font-weight: 800;\n        }\n        .logo span { color: #d9ff33; }\n        .price-panel {\n            background: #2b0f5e;\n            padding: 0.5rem 1rem;\n            border-radius: 60px;\n            display: flex;\n            gap: 1.5rem;\n            font-weight: bold;\n            flex-wrap: wrap;\n        }\n        .price-panel div { white-space: nowrap; }\n        .ticker-wrap {\n            background: #1e1038;\n            padding: 0.8rem 0;\n            border-bottom: 2px solid #d9ff33;\n            border-top: 2px solid #d9ff33;\n            overflow: hidden;\n            white-space: nowrap;\n            position: relative;\n        }\n        .ticker {\n            display: inline-block;\n            animation: scrollTicker 45s linear infinite;\n            white-space: nowrap;\n        }\n        .ticker-item {\n            display: inline-block;\n            background: #2d204c;\n            margin-right: 2rem;\n            padding: 0.4rem 1.2rem;\n            border-radius: 40px;\n            font-size: 0.9rem;\n            font-weight: 500;\n            color: #f0eef7;\n        }\n        .ticker-item.buy { background: #2b4b2b; border-left: 5px solid #d9ff33; }\n        @keyframes scrollTicker {\n            0% { transform: translateX(0); }\n            100% { transform: translateX(-50%); }\n        }\n        .explanation {\n            background: linear-gradient(135deg, #f3eaff, #ffffff);\n            padding: 2rem;\n            margin: 1rem;\n            border-radius: 1.5rem;\n            border-left: 8px solid #d9ff33;\n            border-right: 8px solid #7c3aed;\n        }\n        .explanation h2 {\n            color: #2d1c4a;\n            margin-bottom: 1rem;\n        }\n        .explanation p {\n            color: #2d2642;\n            line-height: 1.6;\n            margin-bottom: 1rem;\n        }\n        .explanation ul {\n            margin-left: 2rem;\n            color: #2d2642;\n        }\n        .explanation li {\n            margin: 0.5rem 0;\n        }\n        .main-grid {\n            display: flex;\n            flex-wrap: wrap;\n            gap: 1.8rem;\n            padding: 2rem;\n        }\n        .stats-card {\n            flex: 2;\n            background: white;\n            border-radius: 1.5rem;\n            padding: 1.5rem;\n            box-shadow: 0 6px 14px rgba(0,0,0,0.05);\n            border-top: 5px solid #7c3aed;\n        }\n        .admin-card {\n            flex: 1.5;\n            background: white;\n            border-radius: 1.5rem;\n            padding: 1.5rem;\n            box-shadow: 0 6px 14px rgba(0,0,0,0.05);\n            border-top: 5px solid #d9ff33;\n        }\n        h3 {\n            color: #2d1c4a;\n            margin-bottom: 1rem;\n            border-left: 6px solid #d9ff33;\n            padding-left: 0.8rem;\n        }\n        button, .btn-download {\n            background: #7c3aed;\n            border: none;\n            color: white;\n            padding: 0.6rem 1.2rem;\n            border-radius: 40px;\n            font-weight: bold;\n            cursor: pointer;\n            transition: 0.1s linear;\n            margin-top: 0.5rem;\n        }\n        button:active { transform: translateY(2px); }\n        .btn-cert {\n            background: #2c5e2e;\n            font-size: 0.75rem;\n            padding: 0.3rem 0.8rem;\n        }\n        .login-form, .entry-form {\n            display: flex;\n            flex-direction: column;\n            gap: 1rem;\n        }\n        input, select {\n            padding: 0.7rem;\n            border-radius: 30px;\n            border: 1px solid #c5b5e6;\n            background: #fefcf5;\n            font-size: 0.9rem;\n        }\n        .error-msg { color: #cc4444; font-size: 0.8rem; }\n        .success-msg { color: #2d6a2d; }\n        .transaction-table { overflow-x: auto; margin-top: 1rem; }\n        table { width: 100%; border-collapse: collapse; font-size: 0.8rem; }\n        th, td { padding: 0.5rem; text-align: left; border-bottom: 1px solid #e0d6f0; }\n        footer {\n            background: #130b24;\n            color: #a99ad6;\n            text-align: center;\n            padding: 1rem;\n            font-size: 0.8rem;\n        }\n        .certificate-container {\n            position: fixed;\n            top: -1000px;\n            left: -1000px;\n            width: 794px;\n            height: 1123px;\n            background: #fffef7;\n            box-shadow: 0 0 0 8px #d9ff33, 0 0 0 12px #7c3aed;\n            border-radius: 20px;\n            padding: 2rem;\n            font-family: 'Georgia', serif;\n            z-index: -1;\n        }\n        .certificate-inner {\n            border: 2px solid #d9ff33;\n            height: 100%;\n            border-radius: 16px;\n            padding: 2rem;\n            display: flex;\n            flex-direction: column;\n            justify-content: space-between;\n        }\n        .cert-header {\n            text-align: center;\n            border-bottom: 2px solid #7c3aed;\n            padding-bottom: 1rem;\n        }\n        .cert-header h1 {\n            font-size: 2.5rem;\n            color: #4c1d95;\n        }\n        .cert-body {\n            text-align: center;\n            margin: 2rem 0;\n        }\n        .cert-recipient {\n            font-size: 1.8rem;\n            font-weight: bold;\n            color: #2c1a4a;\n            margin: 1rem 0;\n        }\n        .cert-details {\n            font-size: 1.2rem;\n            margin: 1rem 0;\n            line-height: 1.8;\n        }\n        .cert-signature {\n            margin-top: 2rem;\n            text-align: center;\n        }\n        .signature {\n            font-family: 'Alex Brush', cursive;\n            font-size: 2.5rem;\n            font-weight: bold;\n            color: #1e40af;\n            border-top: 1px dashed #7c3aed;\n            display: inline-block;\n            padding-top: 0.5rem;\n        }\n        .ceo-name {\n            font-size: 1rem;\n            margin-top: 0.2rem;\n            color: #2d2a42;\n        }\n        .seal {\n            width: 120px;\n            height: 120px;\n            border-radius: 50%;\n            background: conic-gradient(from 0deg, #7c3aed, #d9ff33, #ffffff, #7c3aed);\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            margin: 1rem auto;\n            box-shadow: 0 0 0 4px white, 0 0 0 8px #d9ff33;\n        }\n        .seal span {\n            background: rgba(255,255,245,0.9);\n            padding: 0.5rem;\n            border-radius: 50%;\n            font-size: 0.9rem;\n            font-weight: 800;\n            text-align: center;\n        }\n        @media (max-width: 700px) {\n            body { padding: 0.8rem; }\n            .header { flex-direction: column; text-align: center; }\n        }\n    <\/style>\n<\/head>\n<body>\n<div class=\"dashboard\">\n    <div class=\"header\">\n        <div class=\"logo\">Adase<span>Ads<\/span> \u00b7 Serie A Funding<\/div>\n        <div class=\"price-panel\">\n            <div>\ud83d\udc9c Share Price: <span id=\"sharePrice\">UGX 100,000<\/span><\/div>\n            <div>\ud83c\udf4b Participants: <span id=\"participantCount\">0<\/span> \/ 77<\/div>\n            <div>\ud83d\udcca Total Shares Issued: <span id=\"totalSharesIssued\">0<\/span><\/div>\n        <\/div>\n    <\/div>\n\n    <!-- Ticker visible to all -->\n    <div class=\"ticker-wrap\">\n        <div class=\"ticker\" id=\"tickerStrip\"><\/div>\n    <\/div>\n\n    <!-- Compelling explanation for all visitors -->\n    <div class=\"explanation\">\n        <h2>\ud83d\ude80 Why invest in Adase Ads Ltd Serie A?<\/h2>\n        <p>Adase Ads is building the next-generation AI-powered advertising network for African SMEs and global brands. With a proprietary ad engine and a growing community of agents, we are poised to disrupt the digital ad market.<\/p>\n        <ul>\n            <li><strong>\ud83d\udc8e Exclusive opportunity:<\/strong> Only 77 investors will ever participate in this Serie A round.<\/li>\n            <li><strong>\ud83d\udcc8 High growth potential:<\/strong> The African digital ad market is projected to grow 300% by 2028.<\/li>\n            <li><strong>\ud83d\udd12 Fixed price:<\/strong> UGX 100,000 per share \u2013 no dilution, no hidden fees.<\/li>\n            <li><strong>\ud83c\udfc6 First-mover advantage:<\/strong> Get equity in a fast-scaling fintech-adtech hybrid.<\/li>\n            <li><strong>\ud83e\udd1d Community ownership:<\/strong> Join a network of visionary backers.<\/li>\n        <\/ul>\n        <p><strong>\u23f3 Limited slots remaining \u2013 invest now to secure your stake in Africa&#8217;s ad revolution.<\/strong><\/p>\n    <\/div>\n\n    <div class=\"main-grid\">\n        <div class=\"stats-card\">\n            <h3>\ud83d\udcc8 Recent investments<\/h3>\n            <div class=\"transaction-table\">\n                <table id=\"txTable\">\n                    <thead>\n                        <tr><th>Name<\/th><th>Shares<\/th><th>Amount (UGX)<\/th><th>Date<\/th><th>Total owned<\/th><th>Certificate<\/th> <\/tr\n                    <\/thead>\n                    <tbody id=\"txTbody\"><\/tbody>\n                <\/table>\n            <\/div>\n            <button id=\"downloadBtn\" class=\"btn-download\" style=\"background:#2c5e2e;\">\u2b07\ufe0f Download CSV (all investments)<\/button>\n        <\/div>\n\n        <div class=\"admin-card\">\n            <h3>\ud83d\udd10 Admin Access (Investment Registration)<\/h3>\n            <div id=\"loginSection\">\n                <div class=\"login-form\">\n                    <input type=\"email\" id=\"loginEmail\" placeholder=\"Admin Email\" autocomplete=\"off\">\n                    <input type=\"password\" id=\"loginPassword\" placeholder=\"Admin Password\" autocomplete=\"off\">\n                    <button id=\"loginBtnAdmin\">Login to Register Investments<\/button>\n                    <div id=\"loginMsg\" class=\"error-msg\"><\/div>\n                <\/div>\n            <\/div>\n            <div id=\"entrySection\" style=\"display: none;\">\n                <h4>\u2795 Register New Investment<\/h4>\n                <div class=\"entry-form\">\n                    <input type=\"text\" id=\"fullName\" placeholder=\"Full name\">\n                    <input type=\"email\" id=\"userEmail\" placeholder=\"Email address\">\n                    <input type=\"text\" id=\"sponsorCode\" placeholder=\"Sponsor \/ Referral Code (optional)\">\n                    <input type=\"number\" id=\"shareAmount\" placeholder=\"Number of shares (min 1)\" step=\"1\" min=\"1\" value=\"1\">\n                    <button id=\"submitTxBtn\">\u2714 Buy Shares (UGX 100,000 each)<\/button>\n                    <div id=\"entryMsg\" class=\"error-msg\"><\/div>\n                    <button id=\"logoutBtn\" style=\"background:#5e4b8b;\">\ud83d\udeaa Logout<\/button>\n                    <div id=\"remainingMsg\" style=\"margin-top:0.5rem; font-size:0.8rem; color:#4c1d95;\"><\/div>\n                <\/div>\n            <\/div>\n        <\/div>\n    <\/div>\n    <footer>\ud83d\udc9c \ud83c\udf4b Adase Ads Ltd Serie A Funding Round \u2013 Maximum 77 participants. Price per share fixed at UGX 100,000. Admin login required to register investments.<\/footer>\n<\/div>\n\n<div id=\"certificateTemplate\" class=\"certificate-container\" style=\"display: none;\">\n    <div class=\"certificate-inner\">\n        <div class=\"cert-header\">\n            <h1>ADASE ADS LTD<\/h1>\n            <p>Serie A Equity Certificate<\/p>\n        <\/div>\n        <div class=\"cert-body\">\n            <div class=\"seal\"><span>Adase<br>Equity<\/span><\/div>\n            <div class=\"cert-recipient\" id=\"certName\"><\/div>\n            <div class=\"cert-details\" id=\"certDetails\"><\/div>\n            <div class=\"cert-details\" id=\"certSponsor\"><\/div>\n            <div class=\"cert-signature\">\n                <div class=\"signature\" id=\"certSignature\">Verified<\/div>\n                <div class=\"ceo-name\">Asanasio Namanya<br>Chief Executive Officer<\/div>\n            <\/div>\n        <\/div>\n        <div class=\"cert-footer\">\n            <span>This certificate confirms participation in the Serie A Funding Round.<\/span>\n        <\/div>\n    <\/div>\n<\/div>\n\n<script>\n    \/\/ ---------- DATA MODELS ----------\n    let users = [];          \/\/ { email, name, sponsorCode, shares }\n    let transactions = [];   \/\/ { id, name, email, shares, amountUGX, date, totalSharesOwned, sponsorCode }\n    const SHARE_PRICE_UGX = 100000;\n    const MAX_PARTICIPANTS = 70;\n\n    function saveData() {\n        localStorage.setItem('adase_users', JSON.stringify(users));\n        localStorage.setItem('adase_transactions', JSON.stringify(transactions));\n    }\n\n    function loadData() {\n        const storedUsers = localStorage.getItem('adase_users');\n        const storedTx = localStorage.getItem('adase_transactions');\n        if (storedUsers) users = JSON.parse(storedUsers);\n        if (storedTx) transactions = JSON.parse(storedTx);\n\n        if (users.length === 0) {\n            \/\/ Seed demo data with 2 participants\n            users = [\n                { email: \"alice@example.com\", name: \"Alice Wonder\", sponsorCode: \"23508280\", shares: 10 },\n                { email: \"bob@builder.com\", name: \"Bob Builder\", sponsorCode: \"200676825\", shares: 5 }\n            ];\n            const now = new Date().toISOString().slice(0,10);\n            transactions = [\n                { id: Date.now()+1, name: \"Alice Wonder\", email: \"alice@example.com\", shares: 10, amountUGX: 10*SHARE_PRICE_UGX, date: now, totalSharesOwned: 10, sponsorCode: \"23508280\" },\n                { id: Date.now()+2, name: \"Bob Builder\", email: \"bob@builder.com\", shares: 5, amountUGX: 5*SHARE_PRICE_UGX, date: now, totalSharesOwned: 5, sponsorCode: \"200676825\" }\n            ];\n            saveData();\n        }\n        updateUI();\n    }\n\n    function getUserByEmail(email) { return users.find(u => u.email === email); }\n    function addOrUpdateUser(email, name, sponsorCode, sharesToAdd) {\n        let user = users.find(u => u.email === email);\n        if (!user) {\n            if (users.length >= MAX_PARTICIPANTS) return { success: false, msg: `Maximum ${MAX_PARTICIPANTS} participants reached. No new investors allowed.` };\n            user = { email, name, sponsorCode, shares: 0 };\n            users.push(user);\n        } else {\n            user.name = name;\n            if (sponsorCode) user.sponsorCode = sponsorCode;\n        }\n        user.shares += sharesToAdd;\n        saveData();\n        return { success: true, user };\n    }\n\n    function processInvestment(fullName, email, sponsorCode, sharesNum) {\n        if (isNaN(sharesNum) || sharesNum <= 0) return { success: false, msg: \"Shares must be a positive integer\" };\n        \n        let existingUser = getUserByEmail(email);\n        if (!existingUser) {\n            if (users.length >= MAX_PARTICIPANTS) {\n                return { success: false, msg: `Sorry, the maximum of ${MAX_PARTICIPANTS} participants has been reached. No new investors can join.` };\n            }\n        }\n        \n        const result = addOrUpdateUser(email, fullName, sponsorCode, sharesNum);\n        if (!result.success) return result;\n        \n        const user = result.user;\n        const amountUGX = sharesNum * SHARE_PRICE_UGX;\n        const txDate = new Date().toISOString().slice(0,10);\n        const newTx = {\n            id: Date.now(),\n            name: fullName,\n            email,\n            shares: sharesNum,\n            amountUGX: amountUGX,\n            date: txDate,\n            totalSharesOwned: user.shares,\n            sponsorCode: sponsorCode || ''\n        };\n        transactions.unshift(newTx);\n        saveData();\n        updateUI();\n        return { success: true, msg: `${fullName} bought ${sharesNum} share(s) for UGX ${amountUGX.toLocaleString()}. Total shares now: ${user.shares}`, tx: newTx };\n    }\n\n    async function generateCertificate(tx) {\n        const template = document.getElementById('certificateTemplate');\n        const clone = template.cloneNode(true);\n        clone.style.display = 'block';\n        clone.style.position = 'fixed';\n        clone.style.top = '0';\n        clone.style.left = '0';\n        clone.style.zIndex = '9999';\n        document.body.appendChild(clone);\n\n        clone.querySelector('#certName').innerText = tx.name;\n        clone.querySelector('#certDetails').innerHTML = `<strong>${tx.shares} shares<\/strong> at UGX ${SHARE_PRICE_UGX.toLocaleString()} each<br>Total investment: UGX ${tx.amountUGX.toLocaleString()}<br>Total shares now held: <strong>${tx.totalSharesOwned}<\/strong>`;\n        clone.querySelector('#certSponsor').innerHTML = `Sponsor Code: <strong>${tx.sponsorCode || '\u2014'}<\/strong>`;\n        await new Promise(r => setTimeout(r, 200));\n        const canvas = await html2canvas(clone, { scale: 2, backgroundColor: '#fffef7' });\n        const link = document.createElement('a');\n        link.download = `Adase_Certificate_${tx.name.replace(\/\\s\/g,'_')}_${tx.id}.png`;\n        link.href = canvas.toDataURL('image\/png');\n        link.click();\n        document.body.removeChild(clone);\n    }\n\n    function updateUI() {\n        const participantCount = users.length;\n        const totalShares = users.reduce((sum, u) => sum + u.shares, 0);\n        document.getElementById('participantCount').innerText = `${participantCount}`;\n        document.getElementById('totalSharesIssued').innerText = totalShares;\n        document.getElementById('sharePrice').innerText = `UGX ${SHARE_PRICE_UGX.toLocaleString()}`;\n        \n        const remainingSlots = MAX_PARTICIPANTS - participantCount;\n        const remainingMsg = document.getElementById('remainingMsg');\n        if (remainingMsg) {\n            if (remainingSlots > 0) {\n                remainingMsg.innerHTML = `\u2705 ${remainingSlots} slot(s) remaining out of ${MAX_PARTICIPANTS} maximum participants.`;\n                remainingMsg.style.color = \"#2d6a2d\";\n            } else {\n                remainingMsg.innerHTML = `\ud83d\udd34 The maximum of ${MAX_PARTICIPANTS} participants has been reached. No new investors can join.`;\n                remainingMsg.style.color = \"#cc4444\";\n            }\n        }\n\n        const tbody = document.getElementById('txTbody');\n        tbody.innerHTML = '';\n        transactions.slice(0, 30).forEach(tx => {\n            const row = tbody.insertRow();\n            row.insertCell(0).innerText = tx.name;\n            row.insertCell(1).innerText = tx.shares;\n            row.insertCell(2).innerText = `UGX ${tx.amountUGX.toLocaleString()}`;\n            row.insertCell(3).innerText = tx.date;\n            row.insertCell(4).innerText = tx.totalSharesOwned;\n            const certCell = row.insertCell(5);\n            const certBtn = document.createElement('button');\n            certBtn.innerText = '\ud83d\udcc4 Cert';\n            certBtn.className = 'btn-cert';\n            certBtn.onclick = (function(t) { return () => generateCertificate(t); })(tx);\n            certCell.appendChild(certBtn);\n        });\n\n        const tickerDiv = document.getElementById('tickerStrip');\n        tickerDiv.innerHTML = '';\n        transactions.slice(0, 40).forEach(tx => {\n            const span = document.createElement('span');\n            span.className = 'ticker-item buy';\n            span.innerHTML = `\ud83c\udf89 ${tx.name} bought ${tx.shares} share(s) (UGX ${tx.amountUGX.toLocaleString()}) on ${tx.date} \u2192 now owns ${tx.totalSharesOwned} shares`;\n            tickerDiv.appendChild(span);\n            tickerDiv.appendChild(span.cloneNode(true));\n        });\n        if (transactions.length === 0) tickerDiv.innerHTML = '<span class=\"ticker-item\">\u2728 No investments yet \u2014 be the first participant<\/span>';\n    }\n\n    function downloadCSV() {\n        let csvRows = [[\"Name\",\"Email\",\"Shares\",\"Amount (UGX)\",\"Date\",\"Total Shares Owned\",\"Sponsor Code\"]];\n        transactions.forEach(tx => {\n            csvRows.push([tx.name, tx.email, tx.shares, tx.amountUGX, tx.date, tx.totalSharesOwned, tx.sponsorCode || \"\"]);\n        });\n        const csvContent = csvRows.map(row => row.join(\",\")).join(\"\\n\");\n        const blob = new Blob([csvContent], { type: \"text\/csv\" });\n        const link = document.createElement(\"a\");\n        const url = URL.createObjectURL(blob);\n        link.href = url;\n        link.download = `adase_serieA_investments_${new Date().toISOString().slice(0,10)}.csv`;\n        document.body.appendChild(link);\n        link.click();\n        document.body.removeChild(link);\n        URL.revokeObjectURL(url);\n    }\n\n    \/\/ ---------- ADMIN LOGIN (hidden credentials) ----------\n    let loggedIn = false;\n    const adminEmail = \"shares@cashchat.se\";\n    const adminPassword = \"Equity.King2026\";\n\n    function checkLogin() {\n        const emailInput = document.getElementById('loginEmail').value.trim();\n        const passInput = document.getElementById('loginPassword').value;\n        if (emailInput === adminEmail && passInput === adminPassword) {\n            loggedIn = true;\n            document.getElementById('loginSection').style.display = 'none';\n            document.getElementById('entrySection').style.display = 'block';\n            document.getElementById('loginMsg').innerHTML = '<span style=\"color:#2d6a2d;\">\u2705 Login successful. You can now register investments.<\/span>';\n            setTimeout(() => { document.getElementById('loginMsg').innerHTML = ''; }, 2000);\n        } else {\n            document.getElementById('loginMsg').innerText = '\u274c Invalid admin credentials. Access denied.';\n        }\n    }\n\n    function logout() {\n        loggedIn = false;\n        document.getElementById('loginSection').style.display = 'block';\n        document.getElementById('entrySection').style.display = 'none';\n        document.getElementById('loginEmail').value = '';\n        document.getElementById('loginPassword').value = '';\n        document.getElementById('entryMsg').innerText = '';\n        document.getElementById('loginMsg').innerText = '';\n    }\n\n    function submitEntry() {\n        if (!loggedIn) { \n            document.getElementById('entryMsg').innerText = '\u26a0\ufe0f Admin login required to register investments.';\n            return; \n        }\n        const fullName = document.getElementById('fullName').value.trim();\n        const email = document.getElementById('userEmail').value.trim();\n        const sponsor = document.getElementById('sponsorCode').value.trim();\n        const sharesRaw = document.getElementById('shareAmount').value;\n        const sharesNum = Number(sharesRaw);\n        if (!fullName || !email) { document.getElementById('entryMsg').innerText = \"Full name and email required\"; return; }\n        if (isNaN(sharesNum) || sharesNum <= 0 || !Number.isInteger(sharesNum)) { document.getElementById('entryMsg').innerText = \"Enter a positive integer number of shares\"; return; }\n        \n        const result = processInvestment(fullName, email, sponsor, sharesNum);\n        if (result.success) {\n            document.getElementById('entryMsg').innerHTML = `<span class=\"success-msg\">\u2705 ${result.msg}<\/span>`;\n            document.getElementById('fullName').value = '';\n            document.getElementById('userEmail').value = '';\n            document.getElementById('sponsorCode').value = '';\n            document.getElementById('shareAmount').value = '1';\n            updateUI();\n            if (result.tx) generateCertificate(result.tx);\n        } else {\n            document.getElementById('entryMsg').innerText = result.msg;\n        }\n    }\n\n    \/\/ Initialisation\n    loadData();\n\n    const loginBtn = document.getElementById('loginBtnAdmin');\n    const logoutBtn = document.getElementById('logoutBtn');\n    const submitBtn = document.getElementById('submitTxBtn');\n    const downloadBtn = document.getElementById('downloadBtn');\n\n    if (loginBtn) loginBtn.addEventListener('click', checkLogin);\n    if (logoutBtn) logoutBtn.addEventListener('click', logout);\n    if (submitBtn) submitBtn.addEventListener('click', submitEntry);\n    if (downloadBtn) downloadBtn.addEventListener('click', downloadCSV);\n<\/script>\n<\/body>\n<\/html>\n\n\n\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=yes\">\n  <title>Adase Ads Ltd \u2013 SMM Dashboard | Uganda&#8217;s Trusted Growth Platform<\/title>\n  <!-- Google Fonts + Font Awesome Icons -->\n  <link href=\"https:\/\/fonts.googleapis.com\/css2?family=Inter:opsz,wght@14..32,300;14..32,400;14..32,500;14..32,600;14..32,700&#038;display=swap\" rel=\"stylesheet\">\n  <link rel=\"stylesheet\" href=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/font-awesome\/6.0.0-beta3\/css\/all.min.css\">\n  <style>\n    * {\n      margin: 0;\n      padding: 0;\n      box-sizing: border-box;\n    }\n\n    body {\n      font-family: 'Inter', sans-serif;\n      background: #f8fafc;\n      color: #0f172a;\n      line-height: 1.5;\n      scroll-behavior: smooth;\n    }\n\n    \/* responsive container system *\/\n    .container {\n      width: 100%;\n      max-width: 1280px;\n      margin: 0 auto;\n      padding: 0 24px;\n    }\n\n    \/* ========== DASHBOARD LAYOUT (clone-like structure) ========== *\/\n    .dashboard-wrapper {\n      display: flex;\n      flex-direction: column;\n      min-height: 100vh;\n    }\n\n    \/* top navbar with indigo accents *\/\n    .top-nav {\n      background: white;\n      box-shadow: 0 1px 3px rgba(0,0,0,0.05), 0 1px 2px rgba(0,0,0,0.03);\n      position: sticky;\n      top: 0;\n      z-index: 50;\n      border-bottom: 1px solid #e2e8f0;\n    }\n\n    .nav-inner {\n      display: flex;\n      align-items: center;\n      justify-content: space-between;\n      flex-wrap: wrap;\n      gap: 16px;\n      padding: 14px 0;\n    }\n\n    .logo-area h1 {\n      font-size: 1.6rem;\n      font-weight: 700;\n      background: linear-gradient(135deg, #1E1B4B 0%, #4B0082 100%);\n      background-clip: text;\n      -webkit-background-clip: text;\n      color: transparent;\n      letter-spacing: -0.3px;\n    }\n    .logo-area span {\n      font-size: 0.75rem;\n      color: #4B0082;\n      font-weight: 500;\n      background: #f1f5f9;\n      padding: 2px 8px;\n      border-radius: 30px;\n      margin-left: 8px;\n    }\n\n    .nav-links {\n      display: flex;\n      gap: 24px;\n      align-items: center;\n      flex-wrap: wrap;\n    }\n    .nav-links a {\n      text-decoration: none;\n      font-weight: 500;\n      color: #1e293b;\n      font-size: 0.95rem;\n      transition: 0.2s;\n    }\n    .nav-links a:hover, .nav-links .active-link {\n      color: #4B0082;\n    }\n    .btn-outline-indigo {\n      border: 1.5px solid #4B0082;\n      background: transparent;\n      padding: 8px 20px;\n      border-radius: 40px;\n      font-weight: 600;\n      color: #4B0082;\n      transition: all 0.2s;\n      cursor: pointer;\n    }\n    .btn-outline-indigo:hover {\n      background: #4B0082;\n      color: white;\n    }\n    .btn-solid {\n      background: #4B0082;\n      border: none;\n      padding: 8px 24px;\n      border-radius: 40px;\n      font-weight: 600;\n      color: white;\n      cursor: pointer;\n      transition: 0.2s;\n      box-shadow: 0 2px 5px rgba(75,0,130,0.2);\n    }\n    .btn-solid:hover {\n      background: #3a0066;\n      transform: translateY(-1px);\n    }\n\n    \/* main dashboard grid (two columns: sidebar + content) *\/\n    .dashboard-main {\n      display: flex;\n      flex: 1;\n    }\n    \/* sidebar (dashboard style) *\/\n    .sidebar {\n      width: 260px;\n      background: white;\n      border-right: 1px solid #eef2f6;\n      padding: 32px 0;\n      flex-shrink: 0;\n      transition: all 0.2s;\n    }\n    .sidebar-menu {\n      list-style: none;\n      padding: 0 20px;\n    }\n    .sidebar-menu li {\n      margin-bottom: 12px;\n    }\n    .sidebar-menu li a {\n      display: flex;\n      align-items: center;\n      gap: 14px;\n      padding: 12px 16px;\n      border-radius: 14px;\n      text-decoration: none;\n      font-weight: 500;\n      color: #334155;\n      transition: 0.2s;\n    }\n    .sidebar-menu li a i {\n      width: 24px;\n      font-size: 1.2rem;\n      color: #5b6e8c;\n    }\n    .sidebar-menu li.active a, .sidebar-menu li a:hover {\n      background: #f1f0ff;\n      color: #4B0082;\n    }\n    .sidebar-menu li.active a i, .sidebar-menu li a:hover i {\n      color: #4B0082;\n    }\n    \/* main content panel *\/\n    .content-panel {\n      flex: 1;\n      padding: 32px 28px;\n      background: #f8fafc;\n    }\n\n    \/* hero \/ welcome section (clone style) *\/\n    .welcome-card {\n      background: linear-gradient(135deg, #ffffff 0%, #f9f5ff 100%);\n      border-radius: 28px;\n      padding: 28px 32px;\n      margin-bottom: 32px;\n      border: 1px solid #e9e4f5;\n      box-shadow: 0 4px 12px rgba(0,0,0,0.02);\n    }\n    .welcome-card h2 {\n      font-size: 1.9rem;\n      font-weight: 700;\n      background: linear-gradient(to right, #0f172a, #4B0082);\n      background-clip: text;\n      -webkit-background-clip: text;\n      color: transparent;\n    }\n    .stats-grid {\n      display: grid;\n      grid-template-columns: repeat(auto-fit, minmax(210px, 1fr));\n      gap: 20px;\n      margin: 36px 0 28px;\n    }\n    .stat-card {\n      background: white;\n      padding: 20px;\n      border-radius: 24px;\n      box-shadow: 0 8px 20px rgba(0,0,0,0.02), 0 2px 4px rgba(0,0,0,0.02);\n      border: 1px solid #edf2f7;\n      transition: 0.2s;\n    }\n    .stat-card i {\n      font-size: 2rem;\n      color: #4B0082;\n      margin-bottom: 12px;\n    }\n    .stat-card h3 {\n      font-size: 1.7rem;\n      font-weight: 700;\n      margin-bottom: 6px;\n    }\n    .stat-card p {\n      color: #475569;\n      font-weight: 500;\n    }\n\n    \/* service panels (copy clone structure) *\/\n    .section-title {\n      font-size: 1.7rem;\n      font-weight: 700;\n      margin: 32px 0 20px 0;\n      border-left: 5px solid #4B0082;\n      padding-left: 16px;\n    }\n    .services-showcase {\n      display: flex;\n      flex-wrap: wrap;\n      gap: 16px;\n      margin: 20px 0 25px;\n    }\n    .service-badge {\n      background: white;\n      border-radius: 50px;\n      padding: 8px 20px;\n      font-weight: 500;\n      border: 1px solid #e2e8f0;\n      font-size: 0.9rem;\n      transition: all 0.2s;\n    }\n    .service-badge i {\n      margin-right: 8px;\n      color: #4B0082;\n    }\n    .steps-container {\n      display: flex;\n      flex-wrap: wrap;\n      gap: 24px;\n      margin: 28px 0;\n    }\n    .step-item {\n      flex: 1;\n      min-width: 200px;\n      background: white;\n      border-radius: 24px;\n      padding: 24px;\n      border: 1px solid #edf2f7;\n      transition: 0.2s;\n    }\n    .step-number {\n      background: #f0ebff;\n      width: 42px;\n      height: 42px;\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      border-radius: 60px;\n      font-weight: 800;\n      font-size: 1.3rem;\n      margin-bottom: 16px;\n      color: #4B0082;\n    }\n    .faq-grid {\n      display: grid;\n      grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));\n      gap: 18px;\n      margin-top: 20px;\n    }\n    .faq-card {\n      background: white;\n      border-radius: 20px;\n      padding: 18px 20px;\n      border: 1px solid #eef2ff;\n    }\n    .faq-card strong {\n      color: #1e293b;\n      display: block;\n      margin-bottom: 8px;\n      font-size: 1rem;\n    }\n    .footer-dash {\n      margin-top: 50px;\n      border-top: 1px solid #e2e8f0;\n      padding: 28px 0;\n      text-align: center;\n      color: #475569;\n      font-size: 0.85rem;\n    }\n    \/* responsive behaviour *\/\n    @media (max-width: 900px) {\n      .dashboard-main {\n        flex-direction: column;\n      }\n      .sidebar {\n        width: 100%;\n        border-right: none;\n        border-bottom: 1px solid #e2e8f0;\n        padding: 16px 0;\n      }\n      .sidebar-menu {\n        display: flex;\n        flex-wrap: wrap;\n        gap: 8px;\n        padding: 0 20px;\n      }\n      .sidebar-menu li {\n        margin-bottom: 0;\n      }\n      .content-panel {\n        padding: 24px 20px;\n      }\n      .nav-inner {\n        flex-direction: column;\n        align-items: stretch;\n      }\n      .nav-links {\n        justify-content: space-between;\n      }\n      .welcome-card h2 {\n        font-size: 1.5rem;\n      }\n    }\n    @media (max-width: 480px) {\n      .stats-grid {\n        grid-template-columns: 1fr;\n      }\n      .step-item {\n        min-width: 100%;\n      }\n      .container {\n        padding: 0 16px;\n      }\n    }\n    .indigo-text {\n      color: #4B0082;\n      font-weight: 600;\n    }\n    .btn-sm {\n      background: #4B0082;\n      color: white;\n      border-radius: 40px;\n      padding: 10px 18px;\n      border: none;\n      font-weight: 500;\n      cursor: pointer;\n    }\n    a {\n      text-decoration: none;\n    }\n  <\/style>\n<\/head>\n<body>\n<div class=\"dashboard-wrapper\">\n  <!-- top navigation bar (clone style) -->\n  <div class=\"top-nav\">\n    <div class=\"container\">\n      <div class=\"nav-inner\">\n        <div class=\"logo-area\">\n          <h1>Adase Ads Ltd <span>Dashboard<\/span><\/h1>\n          <div style=\"font-size: 0.75rem; color:#4B0082;\">Uganda\u2019s Trusted Growth Platform<\/div>\n        <\/div>\n        <div class=\"nav-links\">\n          <a href=\"#\" class=\"active-link\">Dashboard<\/a>\n          <a href=\"#\">Services<\/a>\n          <a href=\"#\">Orders<\/a>\n          <a href=\"#\">API<\/a>\n          <a href=\"#\">Support<\/a>\n          <button class=\"btn-outline-indigo\"><i class=\"fas fa-wallet\"><\/i> Add Funds<\/button>\n          <button class=\"btn-solid\"><i class=\"fas fa-user-circle\"><\/i> My Account<\/button>\n        <\/div>\n      <\/div>\n    <\/div>\n  <\/div>\n\n  <div class=\"dashboard-main\">\n    <!-- sidebar left (typical dashboard clone) -->\n    <aside class=\"sidebar\">\n      <ul class=\"sidebar-menu\">\n        <li class=\"active\"><a href=\"#\"><i class=\"fas fa-tachometer-alt\"><\/i> Main Overview<\/a><\/li>\n        <li><a href=\"#\"><i class=\"fas fa-chart-line\"><\/i> Growth Analytics<\/a><\/li>\n        <li><a href=\"#\"><i class=\"fas fa-shopping-cart\"><\/i> Place Order<\/a><\/li>\n        <li><a href=\"#\"><i class=\"fas fa-history\"><\/i> Order History<\/a><\/li>\n        <li><a href=\"#\"><i class=\"fas fa-coins\"><\/i> Wallet (UGX)<\/a><\/li>\n        <li><a href=\"#\"><i class=\"fas fa-headset\"><\/i> 24\/7 Support<\/a><\/li>\n        <li><a href=\"#\"><i class=\"fas fa-robot\"><\/i> Reseller API<\/a><\/li>\n      <\/ul>\n    <\/aside>\n\n    <!-- main dynamic content (clone of original SMM Shaker page, transformed) -->\n    <main class=\"content-panel\">\n      <!-- welcome hero section (brand replacement) -->\n      <div class=\"welcome-card\">\n        <h2>\ud83d\ude80 Grow your Account with <span class=\"indigo-text\">Adase Ads Ltd<\/span><\/h2>\n        <p style=\"margin-top: 12px; font-size: 1.05rem; color:#2d3a5e;\">Uganda\u2019s Best &#038; Cheapest SMM panel for Instagram, TikTok, YouTube, Facebook and more. Fast delivery, non-drop guarantee, real support \u2014 built for serious growth.<\/p>\n        <div style=\"display: flex; flex-wrap: wrap; gap: 14px; margin-top: 24px;\">\n          <button class=\"btn-solid\"><i class=\"fas fa-bolt\"><\/i> Start Growing Now<\/button>\n          <button class=\"btn-outline-indigo\"><i class=\"fas fa-phone-alt\"><\/i> Contact Support<\/button>\n        <\/div>\n      <\/div>\n\n      <!-- stats (dashboard first glance) -->\n      <div class=\"stats-grid\">\n        <div class=\"stat-card\"><i class=\"fas fa-users\"><\/i><h3>+12.4K<\/h3><p>Active Orders<\/p><\/div>\n        <div class=\"stat-card\"><i class=\"fas fa-clock\"><\/i><h3>~2min<\/h3><p>Avg. Delivery Start<\/p><\/div>\n        <div class=\"stat-card\"><i class=\"fas fa-shield-alt\"><\/i><h3>99.7%<\/h3><p>Non-Drop Rate<\/p><\/div>\n        <div class=\"stat-card\"><i class=\"fas fa-mobile-alt\"><\/i><h3>MTN \/ Airtel<\/h3><p>Local Payments<\/p><\/div>\n      <\/div>\n\n      <!-- How our SMM Panel works (clone structure: step 1-4) -->\n      <div class=\"section-title\">\ud83d\udccc How our SMM Dashboard works<\/div>\n      <div class=\"steps-container\">\n        <div class=\"step-item\"><div class=\"step-number\">01<\/div><h3>Create an account<\/h3><p>Register on our SMM panel and unlock premium SMM panel services for Uganda and East Africa.<\/p><a href=\"#\" style=\"color:#4B0082; font-weight:500;\">Sign up \u2192<\/a><\/div>\n        <div class=\"step-item\"><div class=\"step-number\">02<\/div><h3>Add funds (MoMo \/ Airtel)<\/h3><p>Top up fast using MTN MoMo, M-Pesa or Airtel Money so you can order SMM services instantly.<\/p><a href=\"#\" style=\"color:#4B0082; font-weight:500;\">Add funds \u2192<\/a><\/div>\n        <div class=\"step-item\"><div class=\"step-number\">03<\/div><h3>Place your order<\/h3><p>Pick a service, paste your link, choose quantity \u2014 and place your order in seconds.<\/p><a href=\"#\" style=\"color:#4B0082; font-weight:500;\">View services \u2192<\/a><\/div>\n        <div class=\"step-item\"><div class=\"step-number\">04<\/div><h3>Track &#038; grow<\/h3><p>Watch results in real time and grow faster with trusted panel services.<\/p><a href=\"#\" style=\"color:#4B0082; font-weight:500;\">Track orders \u2192<\/a><\/div>\n      <\/div>\n\n      <!-- Best SMM Panel Services (clone from original) -->\n      <div class=\"section-title\">\ud83d\udd25 Best SMM Panel Services at the Cheapest Prices in Uganda<\/div>\n      <p>Social media growth has never been easier. No more struggling to gain followers or likes \u2014 <strong class=\"indigo-text\">Adase Ads Ltd<\/strong> makes it affordable for everyone. Starting from just 500 UGX.<\/p>\n      <div class=\"services-showcase\">\n        <span class=\"service-badge\"><i class=\"fab fa-instagram\"><\/i> Instagram<\/span>\n        <span class=\"service-badge\"><i class=\"fab fa-tiktok\"><\/i> TikTok<\/span>\n        <span class=\"service-badge\"><i class=\"fab fa-youtube\"><\/i> YouTube<\/span>\n        <span class=\"service-badge\"><i class=\"fab fa-facebook\"><\/i> Facebook<\/span>\n        <span class=\"service-badge\"><i class=\"fab fa-telegram\"><\/i> Telegram<\/span>\n        <span class=\"service-badge\"><i class=\"fab fa-twitter\"><\/i> X (Twitter)<\/span>\n        <span class=\"service-badge\"><i class=\"fab fa-spotify\"><\/i> Spotify<\/span>\n        <span class=\"service-badge\"><i class=\"fab fa-snapchat\"><\/i> Snapchat<\/span>\n        <span class=\"service-badge\"><i class=\"fab fa-whatsapp\"><\/i> WhatsApp<\/span>\n        <span class=\"service-badge\"><i class=\"fab fa-linkedin\"><\/i> LinkedIn<\/span>\n      <\/div>\n\n      <!-- Trusted reseller & API Section (dashboard clone highlight) -->\n      <div style=\"background: #ffffff; border-radius: 28px; padding: 24px; margin: 32px 0; border: 1px solid #eef2ff;\">\n        <div style=\"display: flex; flex-wrap: wrap; gap: 20px; justify-content: space-between; align-items: center;\">\n          <div><i class=\"fas fa-code\" style=\"font-size: 2rem; color:#4B0082;\"><\/i><h3 style=\"margin-top: 8px;\">API for Resellers<\/h3><p>Automate orders &#038; scale faster with our robust API. White-label dashboard ready.<\/p><\/div>\n          <div><i class=\"fas fa-dollar-sign\" style=\"font-size: 2rem; color:#4B0082;\"><\/i><h3 style=\"margin-top: 8px;\">Cheapest Prices<\/h3><p>From 500 UGX \u2013 Transparent pricing across platforms<\/p><\/div>\n          <div><i class=\"fas fa-clock\" style=\"font-size: 2rem; color:#4B0082;\"><\/i><h3 style=\"margin-top: 8px;\">Super Fast Delivery<\/h3><p>Quick processing on top services<\/p><\/div>\n        <\/div>\n      <\/div>\n\n      <!-- Frequently Asked Questions (exact clone replacement) -->\n      <div class=\"section-title\" style=\"margin-top: 20px;\">\u2753 Frequently Asked Questions<\/div>\n      <div class=\"faq-grid\">\n        <div class=\"faq-card\"><strong>What is Adase Ads Ltd?<\/strong> <span style=\"color:#334155;\">A leading SMM panel in Uganda, offering affordable pricing, fast delivery, and secure local payment options like MTN MoMo and Airtel Money.<\/span><\/div>\n        <div class=\"faq-card\"><strong>How cheap are your SMM services?<\/strong> <span>Starting from as low as 500 UGX, with transparent pricing across Instagram, TikTok, YouTube, Facebook, and X.<\/span><\/div>\n        <div class=\"faq-card\"><strong>How to add funds?<\/strong> <span>Go to Add Funds in your dashboard, choose MTN MoMo or Airtel Money, follow payment steps \u2014 wallet updates after confirmation.<\/span><\/div>\n        <div class=\"faq-card\"><strong>How to place an order?<\/strong> <span>Select a service, paste your link\/username, choose quantity, and submit. Track status in your Orders page.<\/span><\/div>\n        <div class=\"faq-card\"><strong>Is there a non-drop guarantee?<\/strong> <span>Yes. Many services include stable\/non-drop options. Always check service description for refill notes.<\/span><\/div>\n        <div class=\"faq-card\"><strong>Do you require password?<\/strong> <span>No. We never ask for your social media password. Secure systems protect your data.<\/span><\/div>\n        <div class=\"faq-card\"><strong>YouTube watch hours?<\/strong> <span>We offer YouTube watch hours and subscribers aimed at helping creators reach milestones (follow policies).<\/span><\/div>\n        <div class=\"faq-card\"><strong>Reseller API support?<\/strong> <span>Yes. Full API access for resellers to automate orders and resell services with your own pricing.<\/span><\/div>\n        <div class=\"faq-card\"><strong>Supported platforms?<\/strong> <span>Instagram, TikTok, YouTube, Facebook, Telegram, X, Spotify, LinkedIn, Snapchat, WhatsApp + more.<\/span><\/div>\n        <div class=\"faq-card\"><strong>Minimum order &#038; refunds?<\/strong> <span>Minimum varies. Refunds depend on service terms \u2013 eligible refunds added to panel balance.<\/span><\/div>\n      <\/div>\n\n      <!-- Uganda payment \/ region specific section -->\n      <div style=\"margin: 34px 0 20px; background: #fefcf5; border-radius: 24px; padding: 24px; border: 1px solid #ffe6c7;\">\n        <div style=\"display: flex; align-items: center; gap: 18px; flex-wrap: wrap;\">\n          <i class=\"fas fa-credit-card\" style=\"font-size: 3rem; color:#4B0082;\"><\/i>\n          <div><h3>Pay easily using MTN MoMo, M-Pesa, Airtel Money, Orange Money, USDT, or bank transfers<\/h3><p>Fast delivery, secure payments, and 24\/7 dashboard access. Trusted in Uganda since 2020.<\/p><\/div>\n        <\/div>\n      <\/div>\n\n      <!-- CTA clone ready to start -->\n      <div style=\"text-align: center; margin-top: 40px; background: white; border-radius: 36px; padding: 28px 20px;\">\n        <h3 style=\"font-size: 1.7rem;\">Ready to grow your social media in Uganda?<\/h3>\n        <div style=\"display: flex; gap: 16px; justify-content: center; margin: 18px 0; flex-wrap: wrap;\">\n          <button class=\"btn-solid\"><i class=\"fas fa-user-plus\"><\/i> Register \u2192<\/button>\n          <button class=\"btn-outline-indigo\"><i class=\"fas fa-charging-station\"><\/i> Add funds \u2192<\/button>\n          <button class=\"btn-outline-indigo\"><i class=\"fas fa-chart-simple\"><\/i> Choose service \u2192<\/button>\n        <\/div>\n        <p class=\"indigo-text\">Watch your growth increase \u2014 built for Uganda \u2022 Secure payments \u2022 24\/7 support<\/p>\n      <\/div>\n      \n      <!-- footer clone -->\n      <div class=\"footer-dash\">\n        <p>\u00a9 2026 <strong class=\"indigo-text\">Adase Ads Ltd<\/strong> Uganda. All rights reserved. | Fast social media growth | Cheapest SMM Panel Uganda<\/p>\n        <p style=\"margin-top: 12px;\"><i class=\"fas fa-check-circle\" style=\"color:#4B0082;\"><\/i> Still have a question? <a href=\"#\" style=\"color:#4B0082;\">Sign in and contact support<\/a> \u2014 our team is available 24\/7.<\/p>\n      <\/div>\n    <\/main>\n  <\/div>\n<\/div>\n\n<!-- optional smooth behavior & interactive console-free dashboard -->\n<script>\n  (function() {\n    \/\/ Ensure any dynamic reference of original brand is text-replaced just in case (though hardcoded)\n    \/\/ Also ensures that the interactive buttons reflect Adase Ads Ltd globally\n    console.log(\"Adase Ads Ltd Dashboard \u2014 fully responsive & indigo blue transformation\");\n    \/\/ Add any hover modern consistency \n    const allIndigo = document.querySelectorAll('.indigo-text');\n    \/\/ already styled inline.\n    \/\/ Extra safe replacement if any residual text \"SMM Shaker\" appears in inner nodes (for cloned dynamic)\n    const replaceTextInDOM = (node) => {\n      if(node.nodeType === Node.TEXT_NODE && node.nodeValue && node.nodeValue.includes('SMM Shaker')) {\n        node.nodeValue = node.nodeValue.replace(\/SMM Shaker\/g, 'Adase Ads Ltd');\n      } else if(node.nodeType === Node.ELEMENT_NODE && !['SCRIPT', 'STYLE'].includes(node.tagName)) {\n        node.childNodes.forEach(replaceTextInDOM);\n      }\n    };\n    replaceTextInDOM(document.body);\n    \/\/ additional style response for viewport already included\n  })();\n<\/script>\n<\/body>\n<\/html>\n\n\n\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, viewport-fit=cover\">\n    <title>Adase Ads Ltd \u2013 Fast Service Dashboard<\/title>\n    <link href=\"https:\/\/fonts.googleapis.com\/css2?family=Inter:opsz,wght@14..32,300;400;500;600;700&#038;display=swap\" rel=\"stylesheet\">\n    <link rel=\"stylesheet\" href=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/font-awesome\/6.0.0-beta3\/css\/all.min.css\">\n    <style>\n        * {\n            margin: 0;\n            padding: 0;\n            box-sizing: border-box;\n        }\n\n        body {\n            font-family: 'Inter', sans-serif;\n            background: #f4f7fc;\n            color: #1a2c3e;\n            padding: 24px 20px;\n        }\n\n        .dashboard-container {\n            max-width: 1600px;\n            margin: 0 auto;\n        }\n\n        \/* header - restored original light theme *\/\n        .dashboard-header {\n            margin-bottom: 28px;\n        }\n\n        .brand {\n            display: flex;\n            flex-wrap: wrap;\n            align-items: baseline;\n            justify-content: space-between;\n            gap: 15px;\n        }\n\n        h1 {\n            font-size: 1.9rem;\n            font-weight: 700;\n            background: linear-gradient(135deg, #1E3C72, #2A5298);\n            -webkit-background-clip: text;\n            background-clip: text;\n            color: transparent;\n            letter-spacing: -0.3px;\n        }\n\n        \/* Adase company name in indigo blue *\/\n        .company-indigo {\n            color: #4f46e5;\n            background: none;\n            -webkit-background-clip: unset;\n            background-clip: unset;\n            background: none;\n            color: #4f46e5;\n        }\n\n        .address-badge {\n            background: #eef2ff;\n            padding: 8px 18px;\n            border-radius: 40px;\n            font-size: 0.8rem;\n            font-weight: 500;\n            color: #1e3a8a;\n            display: inline-flex;\n            align-items: center;\n            gap: 8px;\n        }\n\n        .badge-total {\n            background: #eef2ff;\n            padding: 6px 14px;\n            border-radius: 40px;\n            font-size: 0.85rem;\n            font-weight: 500;\n            color: #1e3a8a;\n        }\n\n        .controls-bar {\n            display: flex;\n            flex-wrap: wrap;\n            gap: 16px;\n            justify-content: space-between;\n            align-items: center;\n            margin-top: 20px;\n            background: white;\n            padding: 14px 20px;\n            border-radius: 24px;\n            box-shadow: 0 2px 6px rgba(0,0,0,0.03), 0 1px 2px rgba(0,0,0,0.05);\n        }\n\n        .search-wrapper {\n            flex: 2;\n            min-width: 220px;\n            position: relative;\n        }\n\n        .search-wrapper i {\n            position: absolute;\n            left: 14px;\n            top: 50%;\n            transform: translateY(-50%);\n            color: #7f8c8d;\n            font-size: 0.9rem;\n        }\n\n        .search-wrapper input {\n            width: 100%;\n            padding: 12px 16px 12px 40px;\n            border: 1px solid #e2e8f0;\n            border-radius: 44px;\n            font-size: 0.9rem;\n            transition: all 0.2s;\n            background: #ffffff;\n        }\n\n        .search-wrapper input:focus {\n            outline: none;\n            border-color: #3b82f6;\n            box-shadow: 0 0 0 3px rgba(59,130,246,0.2);\n        }\n\n        .filter-group {\n            display: flex;\n            gap: 12px;\n            flex-wrap: wrap;\n            align-items: center;\n        }\n\n        select, .reset-btn {\n            background: white;\n            border: 1px solid #cbd5e1;\n            padding: 10px 18px;\n            border-radius: 40px;\n            font-size: 0.85rem;\n            font-weight: 500;\n            cursor: pointer;\n            transition: all 0.2s;\n            color: #1f2a44;\n        }\n\n        .reset-btn {\n            background: #f1f5f9;\n            display: inline-flex;\n            align-items: center;\n            gap: 8px;\n        }\n\n        select:hover, .reset-btn:hover {\n            border-color: #3b82f6;\n            background: #f8fafc;\n        }\n\n        .stats-info {\n            background: #eef2ff;\n            border-radius: 32px;\n            padding: 8px 18px;\n            font-size: 0.85rem;\n            font-weight: 500;\n        }\n\n        \/* table styles (original) *\/\n        .table-wrapper {\n            background: white;\n            border-radius: 28px;\n            box-shadow: 0 8px 20px rgba(0,0,0,0.03), 0 2px 4px rgba(0,0,0,0.05);\n            overflow-x: auto;\n            margin-top: 24px;\n            border: 1px solid #edf2f7;\n        }\n\n        .services-table {\n            width: 100%;\n            border-collapse: collapse;\n            font-size: 0.85rem;\n            min-width: 900px;\n        }\n\n        .services-table th {\n            text-align: left;\n            padding: 18px 16px;\n            background: #f9fbfe;\n            font-weight: 600;\n            color: #2c3e66;\n            border-bottom: 1px solid #e9edf2;\n            text-transform: uppercase;\n            letter-spacing: 0.3px;\n        }\n\n        .services-table td {\n            padding: 14px 16px;\n            border-bottom: 1px solid #eff3f8;\n            vertical-align: middle;\n        }\n\n        .services-table tr:hover {\n            background: #fafcff;\n        }\n\n        .category-badge {\n            background: #e9f0fe;\n            padding: 4px 12px;\n            border-radius: 30px;\n            font-size: 0.7rem;\n            font-weight: 600;\n            display: inline-block;\n            color: #1e4b7a;\n            white-space: nowrap;\n        }\n\n        .service-name {\n            font-weight: 500;\n            max-width: 300px;\n            word-break: break-word;\n        }\n\n        .price-highlight {\n            font-weight: 700;\n            color: #0f3b2c;\n            background: #e6f7ef;\n            display: inline-block;\n            padding: 4px 10px;\n            border-radius: 32px;\n            font-size: 0.8rem;\n        }\n\n        .buy-btn {\n            background: #0f172a;\n            border: none;\n            padding: 7px 18px;\n            border-radius: 40px;\n            color: white;\n            font-weight: 600;\n            font-size: 0.7rem;\n            cursor: pointer;\n            transition: 0.2s;\n            display: inline-flex;\n            align-items: center;\n            gap: 8px;\n        }\n\n        .buy-btn:hover {\n            background: #1e293b;\n            transform: scale(0.97);\n        }\n\n        .empty-state {\n            text-align: center;\n            padding: 50px 20px;\n            color: #5b6e8c;\n        }\n\n        footer {\n            text-align: center;\n            margin-top: 35px;\n            font-size: 0.7rem;\n            color: #6f8faa;\n            border-top: 1px solid #e2edf7;\n            padding-top: 20px;\n        }\n\n        @media (max-width: 720px) {\n            body { padding: 16px; }\n            .controls-bar { flex-direction: column; align-items: stretch; }\n            .filter-group { justify-content: space-between; }\n            .brand { flex-direction: column; align-items: flex-start; }\n        }\n    <\/style>\n<\/head>\n<body>\n<div class=\"dashboard-container\">\n    <div class=\"dashboard-header\">\n        <div class=\"brand\">\n            <h1><i class=\"fas fa-chart-line\" style=\"color: #2c5f8a;\"><\/i> <span class=\"company-indigo\">Adase Ads Ltd<\/span><\/h1>\n            <div class=\"address-badge\">\n                <i class=\"fas fa-map-marker-alt\"><\/i> Zion Road 12 AAA Close, Kira\n            <\/div>\n        <\/div>\n        <div style=\"display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 12px; margin-top: 12px;\">\n            <span class=\"badge-total\"><i class=\"fas fa-rocket\"><\/i> Prices \u00d730 (fast\u2011load dashboard)<\/span>\n            <span style=\"font-size: 0.75rem; color:#43627f;\">\u26a1 Blazing fast | Real\u2011time filtering<\/span>\n        <\/div>\n    <\/div>\n\n    <div class=\"controls-bar\">\n        <div class=\"search-wrapper\">\n            <i class=\"fas fa-search\"><\/i>\n            <input type=\"text\" id=\"searchInput\" placeholder=\"Search by service name, ID or category...\">\n        <\/div>\n        <div class=\"filter-group\">\n            <select id=\"categoryFilter\">\n                <option value=\"all\">\ud83d\udcc1 All categories<\/option>\n            <\/select>\n            <select id=\"sortSelect\">\n                <option value=\"id_asc\">\ud83d\udd22 ID (Ascending)<\/option>\n                <option value=\"price_asc\">\ud83d\udcb0 Price (Low \u2192 High)<\/option>\n                <option value=\"price_desc\">\ud83d\udcb0 Price (High \u2192 Low)<\/option>\n                <option value=\"name_asc\">\ud83d\udcdd Name A \u2192 Z<\/option>\n            <\/select>\n            <button class=\"reset-btn\" id=\"resetBtn\"><i class=\"fas fa-undo-alt\"><\/i> Reset<\/button>\n            <div class=\"stats-info\" id=\"resultStats\">0 services<\/div>\n        <\/div>\n    <\/div>\n\n    <div class=\"table-wrapper\">\n        <table class=\"services-table\" id=\"servicesTable\">\n            <thead>\n                <tr><th>Category<\/th><th>ID<\/th><th>Service Name<\/th><th>Min Order<\/th><th>Max Order<\/th><th>\ud83d\udcb0 Price (\u00d730)<\/th><th>Action<\/th><\/tr>\n            <\/thead>\n            <tbody id=\"tableBody\">\n                <tr><td colspan=\"7\" style=\"text-align:center; padding: 40px;\"><i class=\"fas fa-spinner fa-pulse\"><\/i> Loading services&#8230;<\/td><\/tr>\n            <\/tbody>\n        <\/table>\n    <\/div>\n    <footer>\u00a9 Adase Ads Ltd \u2013 Zion Road 12 AAA Close Kira | All displayed prices are original rate \u00d7 30. &#8220;Buy Now&#8221; simulates order request.<\/footer>\n<\/div>\n\n<script>\n    (function() {\n        \/\/ --------------------------------------------------------------\n        \/\/ COMPLETE RAW DATASET (exactly as provided \u2013 all services)\n        \/\/ --------------------------------------------------------------\n        const FULL_RAW_DATA = `TikTok : Views [ Cheapest ]\nID -Service \/Average time\tRate per 1000\tBuy now\n6110 -TikTok Views | Slow\nNot enough data\nMin order 100\nMax order 2147483647\n1 $\tBuy Now\n6107 -TikTok Video Views [ \ud835\udc02\ud835\udc21\ud835\udc1e\ud835\udc1a\ud835\udc29 ]\nNot enough data\nMin order 1000\nMax order 100000000\n1 $\tBuy Now\n5737 -TikTok Video Views [ \ud835\udc12\ud835\udc2e\ud835\udc29\ud835\udc1e\ud835\udc2b \ud835\udc02\ud835\udc21\ud835\udc1e\ud835\udc1a\ud835\udc29 ]\nNot enough data\nMin order 1000\nMax order 2147483647\n1 $\tBuy Now\n6108 -Tiktok Views | Cheap\nNot enough data\nMin order 100\nMax order 217545811\n1 $\tBuy Now\n6109 -Tiktok Video Views | No Refill\nNot enough data\nMin order 100\nMax order 100000000\n1 $\tBuy Now\n6016 -TikTok Video Views [ \ud835\udc02\ud835\udc21\ud835\udc1e\ud835\udc1a\ud835\udc29 ]\nNot enough data\nMin order 1000\nMax order 100000000\n1 $\tBuy Now\n5738 -TikTok Video Views [ \ud835\udc14\ud835\udc0b\ud835\udc13\ud835\udc11\ud835\udc00 \ud835\udc05\ud835\udc00\ud835\udc12\ud835\udc13 ]\nNot enough data\nMin order 100\nMax order 2147483647\n1 $\tBuy Now\n5740 -Tiktok Views | Always Instant\nNot enough data\nMin order 100\nMax order 217545811\n1 $\tBuy Now\n5805 -TikTok - Views [ \ud835\udc0d\ud835\udc28\ud835\udc27 \ud835\udc03\ud835\udc2b\ud835\udc28\ud835\udc29 ]\nNot enough data\nMin order 100\nMax order 100000000\n1 $\tBuy Now\n5739 -TikTok Views | No Refill\nNot enough data\nMin order 100\nMax order 2147483647\n1 $\tBuy Now\n6017 -TikTok Video Views [ \ud835\udc14\ud835\udc0b\ud835\udc13\ud835\udc11\ud835\udc00 \ud835\udc05\ud835\udc00\ud835\udc12\ud835\udc13 & \ud835\udc12\ud835\udc2d\ud835\udc1a\ud835\udc1b\ud835\udc25\ud835\udc1e ]\nNot enough data\nMin order 100\nMax order 2147483647\n2 $\tBuy Now\n5741 -TikTok Real Views [ Organic \ud83c\uddfa\ud83c\uddec ]\nNot enough data\nMin order 100\nMax order 2147483647\n356 $\tBuy Now\nTikTok : Views [ \ud835\udde1\ud835\uddfc\ud835\uddfb \ud835\uddd7\ud835\uddff\ud835\uddfc\ud835\uddfd ]\nID -Service \/Average time\tRate per 1000\tBuy now\n6064 -TikTok Views [ \ud835\udc0d\ud835\udc28\ud835\udc27 \ud835\udc03\ud835\udc2b\ud835\udc28\ud835\udc29 ]\nNot enough data\nMin order 100\nMax order 1000000000\n2 $\tBuy Now\n6101 -TikTok Views [ \ud835\udc0d\ud835\udc28\ud835\udc27 \ud835\udc03\ud835\udc2b\ud835\udc28\ud835\udc29 ]\nNot enough data\nMin order 1000\nMax order 100000000\n2 $\tBuy Now\n6063 -TikTok Views [ \ud835\udc0d\ud835\udc28\ud835\udc27 \ud835\udc03\ud835\udc2b\ud835\udc28\ud835\udc29 ]\nNot enough data\nMin order 1000\nMax order 2147483647\n4 $\tBuy Now\nTikTok : Likes [ Cheapest ]\nID -Service \/Average time\tRate per 1000\tBuy now\n6121 -TikTok - Likes [ \ud835\udc12\ud835\udc2e\ud835\udc29\ud835\udc1e\ud835\udc2b \ud835\udc02\ud835\udc21\ud835\udc1e\ud835\udc1a\ud835\udc29 ]\nNot enough data\nMin order 100\nMax order 5000000\n1 $\tBuy Now\n6088 -TikTok Likes [ Emergency ]\nNot enough data\nMin order 100\nMax order 1000000\n1 $\tBuy Now\n6089 -TikTok - Likes [ \ud835\udc12\ud835\udc2e\ud835\udc29\ud835\udc1e\ud835\udc2b\ud835\udc05\ud835\udc1a\ud835\udc2c\ud835\udc2d ]\nNot enough data\nMin order 100\nMax order 1000000\n1 $\tBuy Now\n6094 -Tiktok Likes | Bot+Real | 30 Days Refill\nNot enough data\nMin order 100\nMax order 1000000\n1 $\tBuy Now\n5742 -TikTok - Likes [ \ud835\udc12\ud835\udc2e\ud835\udc29\ud835\udc1e\ud835\udc2b \ud835\udc02\ud835\udc21\ud835\udc1e\ud835\udc1a\ud835\udc29 ]\nNot enough data\nMin order 100\nMax order 100000000\n1 $\tBuy Now\n6021 -TikTok - Likes [ \ud835\udc12\ud835\udc2e\ud835\udc29\ud835\udc1e\ud835\udc2b \ud835\udc02\ud835\udc21\ud835\udc1e\ud835\udc1a\ud835\udc29 ]\nNot enough data\nMin order 500\nMax order 5000000\n1 $\tBuy Now\n6059 -TikTok - Likes [ \ud835\udc02\ud835\udc21\ud835\udc1e\ud835\udc1a\ud835\udc29 ]\nNot enough data\nMin order 100\nMax order 5000000\n1 $\tBuy Now\n6085 -TikTok - Likes [ \ud835\udc12\ud835\udc2e\ud835\udc29\ud835\udc1e\ud835\udc2b\ud835\udc05\ud835\udc1a\ud835\udc2c\ud835\udc2d ]\nNot enough data\nMin order 100\nMax order 5000000\n1 $\tBuy Now\n6139 -Tiktok Likes | 30K\/Day | 0-40 MIN | 30 Days Refill\nNot enough data\nMin order 100\nMax order 1000000\n1 $\tBuy Now\nTikTok : Likes [ \ud835\udc14\ud835\udc25\ud835\udc2d\ud835\udc2b\ud835\udc1a \ud835\udc05\ud835\udc1a\ud835\udc2c\ud835\udc2d \u26a1 ]\nID -Service \/Average time\tRate per 1000\tBuy now\n6122 -TikTok - Likes [ \ud835\udc05\ud835\udc1a\ud835\udc2c\ud835\udc2d ]\nNot enough data\nMin order 100\nMax order 5000000\n1 $\tBuy Now\n6081 -TikTok Likes [\u26a1\ufe0f BEST ]\nNot enough data\nMin order 100\nMax order 5000000\n1 $\tBuy Now\n6060 -TikTok - Likes [ \u26a1\ud835\udc13\ud835\udc0e\ud835\udc0f \ud835\udc12\ud835\udc0f\ud835\udc04\ud835\udc04\ud835\udc03\u26a1 ]\nNot enough data\nMin order 100\nMax order 1000000\n1 $\tBuy Now\n6078 -TikTok Likes [\u26a1\ufe0f BEST ]\nNot enough data\nMin order 100\nMax order 5000000\n1 $\tBuy Now\n6087 -TikTok - Likes [ \ud835\udc12\ud835\udc2e\ud835\udc29\ud835\udc1e\ud835\udc2b\ud835\udc05\ud835\udc1a\ud835\udc2c\ud835\udc2d ]\nNot enough data\nMin order 100\nMax order 1000000\n1 $\tBuy Now\nTikTok : Likes [ Best Speed ]\nID -Service \/Average time\tRate per 1000\tBuy now\n6123 -TikTok - Likes [ \ud835\udc05\ud835\udc1a\ud835\udc2c\ud835\udc2d ]\nNot enough data\nMin order 100\nMax order 5000000\n1 $\tBuy Now\n6091 -TikTok - Likes [ \ud835\udc12\ud835\udc2e\ud835\udc29\ud835\udc1e\ud835\udc2b\ud835\udc05\ud835\udc1a\ud835\udc2c\ud835\udc2d ]\nNot enough data\nMin order 100\nMax order 1000000\n1 $\tBuy Now\n6090 -TikTok - Likes [ \u26a1\ud835\udc13\ud835\udc0e\ud835\udc0f \ud835\udc12\ud835\udc0f\ud835\udc04\ud835\udc04\ud835\udc03\u26a1 ]\nNot enough data\nMin order 100\nMax order 1000000\n1 $\tBuy Now\n5745 -TikTok Likes [\u26a1\ufe0f BEST ]\nNot enough data\nMin order 100\nMax order 5000000\n2 $\tBuy Now\n6086 -TikTok Likes [\u26a1\ufe0f BEST ]\nNot enough data\nMin order 100\nMax order 5000000\n2 $\tBuy Now\n6012 -TikTok - Likes [ \u26a1\ud835\udc13\ud835\udc0e\ud835\udc0f \ud835\udc12\ud835\udc0f\ud835\udc04\ud835\udc04\ud835\udc03\u26a1 ]\nNot enough data\nMin order 100\nMax order 5000000\n6 $\tBuy Now\n5804 -Tiktok Real Likes [ Organic \ud83c\uddfa\ud83c\uddec ]\nNot enough data\nMin order 10\nMax order 1000000\n18 $\tBuy Now\nTikTok : Likes [ Non Drop ]\nID -Service \/Average time\tRate per 1000\tBuy now\n6083 -TikTok - Real Likes [ Non Drop ]\nNot enough data\nMin order 100\nMax order 5000000\n3 $\tBuy Now\n5744 -TikTok - Global Likes [ Non Drop ]\nNot enough data\nMin order 100\nMax order 1000000\n2 $\tBuy Now\n6084 -TikTok - Real Likes [ Non Drop ]\nNot enough data\nMin order 100\nMax order 1000000\n2 $\tBuy Now\nTikTok : Followers | Cheapest\nID -Service \/Average time\tRate per 1000\tBuy now\n6071 -TikTok Followers | Speed 5K+ \/ DAY | No Refill | \u26d4\ud83d\udd25\nNot enough data\nMin order 100\nMax order 1000000\n5 $\tBuy Now\n6074 -TikTok Followers [ Real Quality ] [ Less Drop ] [ 30D Refill ]\nNot enough data\nMin order 100\nMax order 1000000\n6 $\tBuy Now\n6072 -TikTok Followers [ Mixed .Quality ] [ No Refill ] Normal Speed\nNot enough data\nMin order 100\nMax order 5000000\n6 $\tBuy Now\nTikTok : Followers | \ud835\udc07\ud835\udc22\ud835\udc20\ud835\udc21 \ud835\udc12\ud835\udc29\ud835\udc1e\ud835\udc1e\ud835\udc1d\nID -Service \/Average time\tRate per 1000\tBuy now\n6069 -TikTok Followers | HQ Profiles | 10-40k\/Day | 30 Days Refill\nNot enough data\nMin order 10\nMax order 5000000\n8 $\tBuy Now\n6073 -TikTok Followers [ Real Quality ] [ Nondrop ] [ 30D Refill ] Fast\nNot enough data\nMin order 100\nMax order 5000000\n8 $\tBuy Now\n6068 -TikTok Followers [ Mixed Quality ] [ 30D Refill ] Fast\nNot enough data\nMin order 100\nMax order 500000\n9 $\tBuy Now\nTikTok : Followers | \ud835\udde1\ud835\uddfc\ud835\uddfb \ud835\uddd7\ud835\uddff\ud835\uddfc\ud835\uddfd\nID -Service \/Average time\tRate per 1000\tBuy now\n6011 -TikTok Followers [ Real Quality ] [ Less Drop ] [ 30D Refill ] Fast\nNot enough data\nMin order 100\nMax order 2000000\n13 $\tBuy Now\n6028 -TikTok Followers [ High Quality ] [ Less Drop ] [ 30D Refill ] Fast\nNot enough data\nMin order 100\nMax order 5000000\n13 $\tBuy Now\n6010 -TikTok Followers [ Real Quality ] [ Nondrop ] [ 365D Refill ] Fast\nNot enough data\nMin order 100\nMax order 500000\n16 $\tBuy Now\nTikTok : Comments\nID -Service \/Average time\tRate per 1000\tBuy now\n5851 -Tiktok Comment Likes [ HQ ]\nNot enough data\nMin order 100\nMax order 10000\n1 $\tBuy Now\n5852 -Random Comments [ HQ Profiles ]\nNot enough data\nMin order 1\nMax order 200\n35 $\tBuy Now\nTikTok : Saves\nID -Service \/Average time\tRate per 1000\tBuy now\n5763 -TikTok - Saves [ \ud835\udc02\ud835\udc21\ud835\udc1e\ud835\udc1a\ud835\udc29\ud835\udc1e\ud835\udc2c\ud835\udc2d ]\nNot enough data\nMin order 100\nMax order 2147482677\n1 $\tBuy Now\n5764 -TikTok Video Saves\nNot enough data\nMin order 10\nMax order 1000000\n1 $\tBuy Now\nTikTok : Add Favorites\nID -Service \/Average time\tRate per 1000\tBuy now\n5767 -TikTok - Add Favorites [ \ud835\udc02\ud835\udc21\ud835\udc1e\ud835\udc1a\ud835\udc29\ud835\udc1e\ud835\udc2c\ud835\udc2d ]\nNot enough data\nMin order 10\nMax order 1000000\n1 $\tBuy Now\n5768 -TikTok - Add Favorites | 100% Organic\nNot enough data\nMin order 10\nMax order 1000000\n1 $\tBuy Now\nTikTok : Shares\nID -Service \/Average time\tRate per 1000\tBuy now\n5766 -Tiktok - Shares [ \ud835\udc02\ud835\udc21\ud835\udc1e\ud835\udc1a\ud835\udc29\ud835\udc1e\ud835\udc2c\ud835\udc2d ]\nNot enough data\nMin order 100\nMax order 2147482677\n1 $\tBuy Now\n5765 -Tiktok - Shares [ \ud835\udc14\ud835\udc25\ud835\udc2d\ud835\udc2b\ud835\udc1a \ud835\udc05\ud835\udc1a\ud835\udc2c\ud835\udc2d ]\nNot enough data\nMin order 100\nMax order 100000000\n1 $\tBuy Now\nTikTok : Downloads\nID -Service \/Average time\tRate per 1000\tBuy now\n5773 -Tiktok Video Downloads\nNot enough data\nMin order 10\nMax order 1000000000\n1 $\tBuy Now\nTikTok : Live stream views\nID -Service \/Average time\tRate per 1000\tBuy now\n5751 -Live Views \u2022 15 Minutes\nNot enough data\nMin order 10\nMax order 10000\n2 $\tBuy Now\n5752 -Live Views \u2022 30 Minutes\nNot enough data\nMin order 50\nMax order 10000\n3 $\tBuy Now\n5753 -Live Views \u2022 60 Minutes\nNot enough data\nMin order 10\nMax order 10000\n6 $\tBuy Now\n5754 -Live Views \u2022 90 Minutes\nNot enough data\nMin order 50\nMax order 10000\n9 $\tBuy Now\n5755 -Live Views \u2022 120 Minutes\nNot enough data\nMin order 10\nMax order 10000\n12 $\tBuy Now\n5756 -Live Views \u2022 150 Minutes\nNot enough data\nMin order 10\nMax order 10000\n14 $\tBuy Now\n5757 -Live Views \u2022 180 Minutes\nNot enough data\nMin order 50\nMax order 10000\n17 $\tBuy Now\n5758 -Live Views \u2022 210 Minutes\nNot enough data\nMin order 10\nMax order 10000\n20 $\tBuy Now\n5759 -Live Views \u2022 240 Minutes\nNot enough data\nMin order 10\nMax order 10000\n23 $\tBuy Now\n5760 -Live Views \u2022 270 Minutes\nNot enough data\nMin order 10\nMax order 10000\n26 $\tBuy Now\n5761 -Live Views \u2022 300 Minutes\nNot enough data\nMin order 10\nMax order 10000\n28 $\tBuy Now\n5762 -Live Views \u2022 360 Minutes\nNot enough data\nMin order 10\nMax order 10000\n34 $\tBuy Now\nTikTok : Live stream Likes\nID -Service \/Average time\tRate per 1000\tBuy now\n5748 -Tiktok Live Likes\nNot enough data\nMin order 100\nMax order 2147483647\n1 $\tBuy Now\n5749 -Tiktok Live Likes\nNot enough data\nMin order 100\nMax order 2147483647\n1 $\tBuy Now\n5750 -Tiktok Live Likes\nNot enough data\nMin order 100\nMax order 2147483647\n1 $\tBuy Now\nTikTok : Live stream Comments\nID -Service \/Average time\tRate per 1000\tBuy now\n5769 -Tiktok Live Stream Shares\nNot enough data\nMin order 10\nMax order 10000000\n1 $\tBuy Now\n5770 -Tiktok Live Stream Emoji Comments\nNot enough data\nMin order 10\nMax order 1000000\n19 $\tBuy Now\n5771 -Tiktok Live Stream Costum Comments\nNot enough data\nMin order 1\nMax order 100000\n27 $\tBuy Now\n5772 -Tiktok Live Stream Random Comments\nNot enough data\nMin order 1\nMax order 1000000\n28 $\tBuy Now\nTikTok : PK Battle Points\nID -Service \/Average time\tRate per 1000\tBuy now\n5775 -TikTok PK Battle Points\nNot enough data\nMin order 100\nMax order 2147483647\n1 $\tBuy Now\n5776 -TikTok - Live PK Battle Points\nNot enough data\nMin order 100\nMax order 50000\n1 $\tBuy Now\n5777 -TikTok - Live PK Battle Points\nNot enough data\nMin order 100\nMax order 1000000000\n1 $\tBuy Now\n5774 -TikTok PK Battle Points\nNot enough data\nMin order 100\nMax order 1000000000\n1 $\tBuy Now\nTiktok Spam Report\nID -Service \/Average time\tRate per 1000\tBuy now\n5778 -Tiktok Spam Report - Post\nNot enough data\nMin order 0\nMax order 0\n14 $\tBuy Now\n5779 -Tiktok Spam Report - Account\nNot enough data\nMin order 0\nMax order 0\n135 $\tBuy Now\nTikTok : Real Reach\nID -Service \/Average time\tRate per 1000\tBuy now\n5780 -TikTok Views + 30% Likes From Search [ Real Views - \ud835\udddb\ud835\uddf2\ud835\uddf9\ud835\uddfd \ud835\ude01\ud835\uddfc \ud835\uddf4\ud835\uddfc \ud835\udde9\ud835\uddf6\ud835\uddff\ud835\uddee\ud835\uddf9 \ud835\ude03\ud835\uddf6\ud835\uddf1\ud835\uddf2\ud835\uddfc\nNot enough data\nMin order 200\nMax order 100000\n3 $\tBuy Now\nTikTok : Followers [ Country \ud83c\udf0d \ud83c\uddfa\ud83c\uddec\nID -Service \/Average time\tRate per 1000\tBuy now\n5782 -TikTok Followers [ Africa Countries \ud83c\uddf3\ud83c\uddec ] [ Nondrop ] [ 30D Refill ]\nNot enough data\nMin order 10\nMax order 100000\n13 $\tBuy Now\n5781 -TikTok Followers [ Africa Countries \ud83c\uddfa\ud83c\uddec ] [ Nondrop ] [ 30D Refill ]\nNot enough data\nMin order 10\nMax order 100000\n14 $\tBuy Now\n5783 -TikTok Followers [ Asian Countries ] [ Nondrop ] [ 30D Refill ]\nNot enough data\nMin order 10\nMax order 20000\n18 $\tBuy Now\nWhatsapp | Poll Votes\nID -Service \/Average time\tRate per 1000\tBuy now\n6022 -Whatsapp Poll Votes [Option A] No Refill\nNot enough data\nMin order 10\nMax order 100000\n20 $\tBuy Now\n6023 -Whatsapp Poll Votes [Option B] No Refill\nNot enough data\nMin order 10\nMax order 100000\n20 $\tBuy Now\n6024 -Whatsapp Poll Votes [Option C] No Refill\nNot enough data\nMin order 10\nMax order 100000\n20 $\tBuy Now\n6025 -Whatsapp Poll Votes [Option D] No Refill\nNot enough data\nMin order 10\nMax order 100000\n20 $\tBuy Now\n6026 -Whatsapp Poll Votes [Option e] No Refill\nNot enough data\nMin order 10\nMax order 100000\n20 $\tBuy Now\nWhatsApp : Channel Followers\nID -Service \/Average time\tRate per 1000\tBuy now\n5795 -\ud83c\udf0e WhatsApp Channel Followers - [ 5k-10k\/day ] [ No Refill ] Instant S1\nNot enough data\nMin order 10\nMax order 50000\n10 $\tBuy Now\n5796 -\ud83c\udde6\ud83c\uddea WhatsApp Channel \ud835\uddd4\ud835\uddff\ud835\uddee\ud835\uddef\ud835\uddf6\ud835\uddf0 Followers - [ 5k-10k\/day ] [ No Refill ] Instant\nNot enough data\nMin order 10\nMax order 50000\n12 $\tBuy Now\n5797 -\ud83c\uddf9\ud83c\uddf7 WhatsApp Channel Turkey Followers - [ 5k-10k\/day ] [ No Refill ] Instant\nNot enough data\nMin order 10\nMax order 50000\n12 $\tBuy Now\n5798 -\ud83c\uddfa\ud83c\uddf8 WhatsApp Channel \ud835\udde8\ud835\udde6\ud835\uddd4 Followers - [ 5k-10k\/day ] [ No Refill ] Instant\nNot enough data\nMin order 10\nMax order 50000\n12 $\tBuy Now\n5799 -\ud83c\uddea\ud83c\uddfa WhatsApp Channel Europe Followers - [ 5k-10k\/day ] [ No Refill ] Instant\nNot enough data\nMin order 10\nMax order 50000\n12 $\tBuy Now\n5800 -\ud83c\uddee\ud83c\uddf3 WhatsApp Channel \ud835\udddc\ud835\uddfb\ud835\uddf1\ud835\uddf6\ud835\uddee\ud835\uddfb Followers - [ 5k-10k\/day ] [ No Refill ] Instant\nNot enough data\nMin order 10\nMax order 50000\n13 $\tBuy Now\nWhatsApp : Channel Emoji Reactions\nID -Service \/Average time\tRate per 1000\tBuy now\n5787 -Whatsapp Channel Post Emoji Reactions [ \ud83d\ude32 ]\nNot enough data\nMin order 10\nMax order 50000\n3 $\tBuy Now\n5788 -Whatsapp Channel Post Emoji Reactions [ \ud83d\ude25 ]\nNot enough data\nMin order 10\nMax order 50000\n3 $\tBuy Now\n5790 -Whatsapp Channel Post Emoji Reactions [ \ud83d\udc4f ]\nNot enough data\nMin order 10\nMax order 50000\n3 $\tBuy Now\n5792 -Whatsapp Channel Post Emoji Reactions [ \ud83c\udfc6 ]\nNot enough data\nMin order 10\nMax order 50000\n4 $\tBuy Now\n5793 -Whatsapp Channel Post Emoji Reactions [ \ud83c\udf89 ]\nNot enough data\nMin order 10\nMax order 50000\n4 $\tBuy Now\n5791 -Whatsapp Channel Post Emoji Reactions [ \ud83d\udd25 ]\nNot enough data\nMin order 10\nMax order 50000\n4 $\tBuy Now\n5786 -Whatsapp Channel Post Emoji Reactions [ \ud83d\ude02 ]\nNot enough data\nMin order 10\nMax order 50000\n4 $\tBuy Now\n5789 -Whatsapp Channel Post Emoji Reactions [ \ud83d\ude4f ]\nNot enough data\nMin order 10\nMax order 50000\n4 $\tBuy Now\n5784 -Whatsapp Channel Post Emoji Reactions [ \ud83d\udc4d ]\nNot enough data\nMin order 10\nMax order 50000\n4 $\tBuy Now\n5785 -Whatsapp Channel Post Emoji Reactions [ \u2764\ufe0f ]\nNot enough data\nMin order 10\nMax order 50000\n4 $\tBuy Now\n5794 -Whatsapp Channel Post Emoji Reactions | Random Mix [\ud83d\udc4d\u2764\ufe0f\ud83d\ude02\ud83d\ude32\ud83d\ude25\ud83d\ude4f]\nNot enough data\nMin order 10\nMax order 50000\n4 $\tBuy Now\nInstagram : Views\nID -Service \/Average time\tRate per 1000\tBuy now\n6061 -IG Reel Views - Cheapest\nNot enough data\nMin order 100\nMax order 2147483647\n1 $\tBuy Now\n5807 -IG Reel Views - High Retention\nNot enough data\nMin order 100\nMax order 100000000\n1 $\tBuy Now\n5812 -IG Reel Views [ Better \ud83d\ude03 ]\nNot enough data\nMin order 100\nMax order 2147483647\n1 $\tBuy Now\n5809 -IG Reel Views [ Best \ud83d\ude04 ]\nNot enough data\nMin order 100\nMax order 2147483647\n1 $\tBuy Now\n5808 -IG Reel Views - Superfast \u26a1\ufe0f\nNot enough data\nMin order 100\nMax order 2147483647\n1 $\tBuy Now\n5810 -IG Reel Views [ For Collab Reels ]\nNot enough data\nMin order 100\nMax order 100000000\n1 $\tBuy Now\n5811 -IG Post \/ Photo Views\nNot enough data\nMin order 10\nMax order 100000000\n1 $\tBuy Now\n5813 -IG Reel Views [ Good \ud83d\ude00 ]\nNot enough data\nMin order 100\nMax order 100000000\n1 $\tBuy Now\n5814 -IG Reel Views [ Organic \ud83c\uddfa\ud83c\uddec ]\nNot enough data\nMin order 100\nMax order 100000000\n1 $\tBuy Now\nInstagram : Likes | Cheapest\nID -Service \/Average time\tRate per 1000\tBuy now\n6124 -Instagram Likes | 0-5 Hour | No Refill | No Speed Up\nNot enough data\nMin order 10\nMax order 250000\n1 $\tBuy Now\n6125 -Instagram Likes | 20k Speed | No Refill\nNot enough data\nMin order 10\nMax order 1000000\n1 $\tBuy Now\n6015 -Instagram Likes - Cheapest 1\nNot enough data\nMin order 10\nMax order 1000000\n1 $\tBuy Now\n6126 -Instagram Likes | 40k Speed | 30 Days Refill\nNot enough data\nMin order 10\nMax order 1000000\n1 $\tBuy Now\n6127 -Instagram Likes | 45k Speed | 30 Days Refill\nNot enough data\nMin order 10\nMax order 1000000\n1 $\tBuy Now\n6066 -Instagram Likes - Cheapest\nNot enough data\nMin order 10\nMax order 10000000\n1 $\tBuy Now\n5820 -Instagram Likes - HQ PROFILES\nNot enough data\nMin order 10\nMax order 1000000\n1 $\tBuy Now\n5815 -Instagram MIX Quality Likes\nNot enough data\nMin order 10\nMax order 500000\n1 $\tBuy Now\n5817 -Instagram Likes - EMERGENCY\nNot enough data\nMin order 10\nMax order 100000\n1 $\tBuy Now\n5819 -Instagram Likes - Cheap\nNot enough data\nMin order 1\nMax order 400000\n1 $\tBuy Now\n5821 -HQ Likes - Auto Refill \ud83c\udf1f\nNot enough data\nMin order 10\nMax order 500000\n1 $\tBuy Now\n5818 -Instagram Likes + Reach\nNot enough data\nMin order 10\nMax order 1000000\n2 $\tBuy Now\nInstagram : Likes | \ud835\udc0d\ud835\udc0e\ud835\udc0d \ud835\udc03\ud835\udc11\ud835\udc0e\ud835\udc0f\nID -Service \/Average time\tRate per 1000\tBuy now\n5816 -\ud83c\udd85\ud83c\udd78\ud83c\udd7f Instagram Likes | Full Real HQ | Non Drop | Speed 5K+ Per DAY | Start Time 0-4hrs| \ud835\udddf\ud835\uddf6\ud835\uddf3\ud835\uddf2\ud835\ude01\ud835\uddf6\ud835\uddfa\ud835\uddf2 \ud835\uddda\ud835\ude02\ud835\uddee\ud835\uddff\ud835\uddee\ud835\uddfb\ud835\ude01\ud835\uddf2\ud835\uddf2 | \u2705\ud83d\udd25\u26a1\nNot enough data\nMin order 10\nMax order 1000000\n1 $\tBuy Now\n6029 -\ud83c\udd85\ud83c\udd78\ud83c\udd7f Instagram Likes | Full Real HQ | Non Drop | Speed 3K+ Per DAY | Start Time 0-5 Minutes | \ud835\udddf\ud835\uddf6\ud835\uddf3\ud835\uddf2\ud835\ude01\ud835\uddf6\ud835\uddfa\ud835\uddf2 \ud835\uddda\ud835\ude02\ud835\uddee\ud835\uddff\ud835\uddee\ud835\uddfb\ud835\ude01\ud835\uddf2\ud835\uddf2 | \u2705\ud83d\udd25\u26a1\nNot enough data\nMin order 10\nMax order 100000\n1 $\tBuy Now\n6128 -\ud83c\udd85\ud83c\udd78\ud83c\udd7f Instagram Likes | Non Drop | Speed 40K+ Per DAY | Start Time 0-5 Minutes | \ud835\udddf\ud835\uddf6\ud835\uddf3\ud835\uddf2\ud835\ude01\ud835\uddf6\ud835\uddfa\ud835\uddf2 \ud835\uddda\ud835\ude02\ud835\uddee\ud835\uddff\ud835\uddee\ud835\uddfb\ud835\ude01\ud835\uddf2\ud835\uddf2 | \u2705\ud83d\udd25\u26a1\nNot enough data\nMin order 100\nMax order 1000000\n1 $\tBuy Now\nInstagram : Followers | Cheapest\nID -Service \/Average time\tRate per 1000\tBuy now\n6140 -Instagram Followers [ Mixed Quality ] [ 365D Refill ] Normal Speed\nNot enough data\nMin order 100\nMax order 1000000\n2 $\tBuy Now\n6070 -Instagram Followers | Cheapest | \ud835\udde5\ud835\uddd8\ud835\uddd9\ud835\udddc\ud835\udddf\ud835\udddf 30D [ Drop: \u00b150% ]\nNot enough data\nMin order 100\nMax order 500000\n2 $\tBuy Now\n6104 -Instagram - Followers [ Working ] [ Flag OFF \u2705] ~ 15k\/day ~ \ud835\udde5\ud835\uddd8\ud835\uddd9\ud835\udddc\ud835\udddf\ud835\udddf 30D\nNot enough data\nMin order 20\nMax order 1000000\n2 $\tBuy Now\n5830 -Instagram Followers [ Mixed Quality ] [ 30D Refill ] Normal Speed\nNot enough data\nMin order 10\nMax order 1000000\n2 $\tBuy Now\n5833 -Instagram Followers [ Mixed Quality ] [ 30D Refill ] Fast Speed\nNot enough data\nMin order 10\nMax order 1000000\n2 $\tBuy Now\n6105 -Instagram - Followers [ \ud835\udc01\ud835\udc2e\ud835\udc25\ud835\udc25\ud835\udc1e\ud835\udc2d \ud835\udc12\ud835\udc29\ud835\udc1e\ud835\udc1e\ud835\udc1d ] ~ 500k\/day ~ Instant ~ \ud835\udde5\ud835\uddd8\ud835\uddd9\ud835\udddc\ud835\udddf\ud835\udddf 365D - \ud835\udc01\ud835\udc04\ud835\udc12\ud835\udc13 \ud835\udc12\ud835\udc0f\ud835\udc04\ud835\udc04\ud835\udc03\ud83c\udfc6\nNot enough data\nMin order 10\nMax order 1000000\n2 $\tBuy Now\n6106 -Instagram - Followers [ \ud835\udc01\ud835\udc2e\ud835\udc25\ud835\udc25\ud835\udc1e\ud835\udc2d \ud835\udc12\ud835\udc29\ud835\udc1e\ud835\udc1e\ud835\udc1d ] ~ 40k\/day ~ Instant ~ \ud835\udde5\ud835\uddd8\ud835\uddd9\ud835\udddc\ud835\udddf\ud835\udddf 30D - \ud835\udc01\ud835\udc04\ud835\udc12\ud835\udc13 \ud835\udc12\ud835\udc0f\ud835\udc04\ud835\udc04\ud835\udc03\nNot enough data\nMin order 10\nMax order 1000000\n3 $\tBuy Now\nInstagram : Followers | \ud835\udc0d\ud835\udc0e\ud835\udc0d \ud835\udc03\ud835\udc11\ud835\udc0e\ud835\udc0f\nID -Service \/Average time\tRate per 1000\tBuy now\n5831 -Instagram Followers [ Good Quality ] [ 365D Refill ] Fast Speed\nNot enough data\nMin order 100\nMax order 1000000\n3 $\tBuy Now\n5834 -Instagram Followers [ Good Quality ] [ Lifetime Refill ] Fast Speed\nNot enough data\nMin order 10\nMax order 1000000\n3 $\tBuy Now\n5836 -Instagram Followers [ Real Profiles ] [ 365D Refill ] [ Lifetime ]\nNot enough data\nMin order 10\nMax order 3000000\n4 $\tBuy Now\n5835 -instagram Followers [ Real Profiles ] [ USA Insights ] [ Lifetime ]\nNot enough data\nMin order 10\nMax order 5000000\n8 $\tBuy Now\nInstagram : Followers | \ud835\udde1\ud835\udde2 Warranty\nID -Service \/Average time\tRate per 1000\tBuy now\n6062 -Instagram Followers [ No Guarantee ] [ No Refill ]\nNot enough data\nMin order 100\nMax order 1000000\n1 $\tBuy Now\n6111 -Instagram Followers | Have Drops | No Guarantee | No Refill | No Warranty\nNot enough data\nMin order 10\nMax order 1000000\n1 $\tBuy Now\n5829 -Instagram Followers [ For Pranks ] [ No Guarantee ] High Drops\nNot enough data\nMin order 1000\nMax order 1000000\n1 $\tBuy Now\n5832 -Instagram Followers [ Good Quality ] [ No Refill ] Good Speed\nNot enough data\nMin order 100\nMax order 1000000\n2 $\tBuy Now\n6014 -Instagram Followers [ For Pranks ] [ No Guarantee ] High Drops\nNot enough data\nMin order 100\nMax order 100000\n2 $\tBuy Now\nInstagram : Saves\nID -Service \/Average time\tRate per 1000\tBuy now\n5837 -Instagram Post \/ Reel Saves [ Fast ]\nNot enough data\nMin order 10\nMax order 300000\n1 $\tBuy Now\n5838 -Instagram Post \/ Reel Saves [ Instant ]\nNot enough data\nMin order 10\nMax order 50000\n1 $\tBuy Now\n5839 -Instagram Post Saves [ Instant ]\nNot enough data\nMin order 10\nMax order 1000000\n1 $\tBuy Now\nInstagram : Shares\nID -Service \/Average time\tRate per 1000\tBuy now\n5840 -IG Post Shares [ Cheap ]\nNot enough data\nMin order 10\nMax order 1000000\n1 $\tBuy Now\n5841 -IG Reel\/Post Shares [ Instant ]\nNot enough data\nMin order 20\nMax order 1000000\n1 $\tBuy Now\n5842 -IG Reel\/Post Shares [ Lifetime ]\nNot enough data\nMin order 100\nMax order 10000000\n1 $\tBuy Now\nInstagram : Story services\nID -Service \/Average time\tRate per 1000\tBuy now\n5862 -Instagram Story Sharing | Story Link\nNot enough data\nMin order 100\nMax order 1000000\n2 $\tBuy Now\n5863 -Instagram Story Discover Support Engagement | [Story Link] ]\nNot enough data\nMin order 100\nMax order 1000000\n4 $\tBuy Now\n5859 -Highlight Views\nNot enough data\nMin order 20\nMax order 20000\n8 $\tBuy Now\nInstagram : Repost\nID -Service \/Average time\tRate per 1000\tBuy now\n5847 -Instagram Repost [ Cheapest ]\nNot enough data\nMin order 10\nMax order 1000000\n2 $\tBuy Now\n5848 -Instagram Repost + Reach [ Global \ud83c\udf0d ]\nNot enough data\nMin order 10\nMax order 1000000\n2 $\tBuy Now\nInstagram : Random Comments\nID -Service \/Average time\tRate per 1000\tBuy now\n5855 -Instagram Random Comments [ H Q ]\nNot enough data\nMin order 10\nMax order 5000\n2 $\tBuy Now\n5857 -Instagram Random Comments [ H Q ] s2\nNot enough data\nMin order 10\nMax order 5000\n14 $\tBuy Now\nInstagram : Custom Comments\nID -Service \/Average time\tRate per 1000\tBuy now\n5853 -Instagram Custom Comments [ Mixed Quality ] [ Minimum - 10 ]\nNot enough data\nMin order 10\nMax order 3000\n6 $\tBuy Now\n5854 -Instagram Custom Comments [ High Quality ] [ Foreign Profiles ] S1\nNot enough data\nMin order 10\nMax order 5000\n11 $\tBuy Now\nInstagram : Emoji Comments\nID -Service \/Average time\tRate per 1000\tBuy now\n5856 -Instagram Emoji Comments\nNot enough data\nMin order 10\nMax order 1000\n11 $\tBuy Now\n5934 -Instagram Emoji Comments [ Positive ]\nNot enough data\nMin order 10\nMax order 1000\n13 $\tBuy Now\nInstagram : Comment Likes\nID -Service \/Average time\tRate per 1000\tBuy now\n5858 -Comment Likes \u2665\ufe0f [ Real ]\nNot enough data\nMin order 500\nMax order 200000\n9 $\tBuy Now\nInstagram : Channel Member\nID -Service \/Average time\tRate per 1000\tBuy now\n5867 -Instagram Channel Member [ Organic & Real Users ] [ Super Fast ] ~ Global \ud83c\udf0e\nNot enough data\nMin order 10\nMax order 1000000\n3 $\tBuy Now\n5868 -Instagram Channel Member [ Organic & Real Users ] [ Super Fast ] ~ Arab \ud83c\uddf8\ud83c\udde6\nNot enough data\nMin order 10\nMax order 1000000\n3 $\tBuy Now\n5869 -Instagram Channel Member [ Organic & Real Users ] [ Super Fast ] ~ India \ud83c\uddee\ud83c\uddf3\nNot enough data\nMin order 10\nMax order 1000000\n3 $\tBuy Now\n5870 -Instagram Channel Member [ Organic & Real Users ] [ Super Fast ] ~ Nigeria \ud83c\uddf3\ud83c\uddec\nNot enough data\nMin order 10\nMax order 1000000\n3 $\tBuy Now\n5866 -Instagram Channel Member [ Organic & Real Users ] [ Super Fast ] ~ USA \ud83c\uddfa\ud83c\uddf8\nNot enough data\nMin order 10\nMax order 1000000\n3 $\tBuy Now\nInstagram : Uganda Services\nID -Service \/Average time\tRate per 1000\tBuy now\n5873 -IG Reel Views [ Organic \ud83c\uddfa\ud83c\uddec ]\nNot enough data\nMin order 100\nMax order 100000000\n1 $\tBuy Now\n5871 -IG Uganda Followers [ Mixed Quality ]\nNot enough data\nMin order 10\nMax order 5000\n28 $\tBuy Now\n5872 -IG Uganda Followers [ HQ ]\nNot enough data\nMin order 10\nMax order 5000\n37 $\tBuy Now\nFacebook : Post Reactions\nID -Service \/Average time\tRate per 1000\tBuy now\n5880 -FB Post Reaction [ Angry \ud83e\udd2c]\nNot enough data\nMin order 10\nMax order 500000\n1 $\tBuy Now\n5879 -FB Post Reaction [ Sad \ud83d\ude25]\nNot enough data\nMin order 10\nMax order 500000\n1 $\tBuy Now\n5878 -FB Post Reaction [ Wow \ud83d\ude32]\nNot enough data\nMin order 10\nMax order 500000\n1 $\tBuy Now\n5874 -FB Post Reaction [ Like \ud83d\udc4d]\nNot enough data\nMin order 10\nMax order 500000\n1 $\tBuy Now\n5875 -FB Post Reaction [ Love \u2764\ufe0f]\nNot enough data\nMin order 10\nMax order 500000\n1 $\tBuy Now\n5876 -FB Post Reaction [ Care \ud83e\udd17]\nNot enough data\nMin order 10\nMax order 500000\n1 $\tBuy Now\n5877 -FB Post Reaction [ Haha \ud83d\ude02]\nNot enough data\nMin order 10\nMax order 500000\n1 $\tBuy Now\nFacebook : Post Likes\nID -Service \/Average time\tRate per 1000\tBuy now\n6103 -FB Post Like [ Cheap ]\nNot enough data\nMin order 20\nMax order 50000\n1 $\tBuy Now\n5881 -FB Post Likes - Mix Quality\nNot enough data\nMin order 10\nMax order 500000\n1 $\tBuy Now\n5883 -FB Post Like [ Cheap ]\nNot enough data\nMin order 10\nMax order 500000\n1 $\tBuy Now\n5882 -FB Post Likes - NR\nNot enough data\nMin order 10\nMax order 100000\n2 $\tBuy Now\n5884 -FB Post Likes [ Lifetime Refill ]\u26a1\ufe0f\nNot enough data\nMin order 10\nMax order 500000\n5 $\tBuy Now\nFacebook : Views\nID -Service \/Average time\tRate per 1000\tBuy now\n5886 -Facebook Reel & Video Views [ Real Quality ] [ Plays ]\nNot enough data\nMin order 100\nMax order 2147483647\n1 $\tBuy Now\n5885 -Facebook Reel & Video Views [ Real Quality ] [\u26a1\ufe0fFast Speed ]\nNot enough data\nMin order 10\nMax order 1000000000\n1 $\tBuy Now\n5887 -Facebook Reel & Video Views [ Real Quality ] [\u26a1\ufe0fLifetime ]\nNot enough data\nMin order 100\nMax order 20000000\n3 $\tBuy Now\nFacebook : Followers\nID -Service \/Average time\tRate per 1000\tBuy now\n6013 -Facebook Followers [ Mixed Quality ] [ 30D Refill ] Cheap\u26a1\ufe0f\nNot enough data\nMin order 10\nMax order 1000000\n1 $\tBuy Now\n5888 -Facebook Followers [ Nice Quality ] [ 365D Refill ] Cheap\u26a1\ufe0f\nNot enough data\nMin order 10\nMax order 1000000\n1 $\tBuy Now\n5891 -Facebook Page & Profile Followers [ Nice Quality ] Recomended \ud83c\udf1f\nNot enough data\nMin order 100\nMax order 100000\n2 $\tBuy Now\n5889 -Facebook Page\/Profile Followers [ New Service ] [ Lifetime Refill ]\nNot enough data\nMin order 10\nMax order 500000\n3 $\tBuy Now\n5890 -Facebook Followers [ Nice Quality ] [ 365D Refill ] Fast\u26a1\ufe0f\nNot enough data\nMin order 10\nMax order 5000000\n4 $\tBuy Now\nFacebook : Followers + Likes\nID -Service \/Average time\tRate per 1000\tBuy now\n5892 -FB Page Followers + Like [ Affordable] [ 30 Day Refill ] [ Good Speed ]\u26a1\ufe0f\nNot enough data\nMin order 100\nMax order 1000000\n1 $\tBuy Now\n5893 -FB Page Like + Followers [ Nondrop ] [ 30 Day Refill ] [ Fast ]\nNot enough data\nMin order 10\nMax order 500000\n2 $\tBuy Now\n5894 -FB Page Like + Followers [ Nice Quality ] [ 365D Refill ] [ Fast ]\nNot enough data\nMin order 10\nMax order 1000000\n3 $\tBuy Now\n5895 -FB Page Like + Followers [ Nondrop ] [ Lifetime Refill ] [ Fast ]\nNot enough data\nMin order 10\nMax order 5000000\n5 $\tBuy Now\nFacebook : Watchtime\nID -Service \/Average time\tRate per 1000\tBuy now\n5896 -Facebook 60K Minutes - [ Monetization ] [ Nondrop ] [ 2HR Video ]\nNot enough data\nMin order 1000\nMax order 1000\n4 $\tBuy Now\n5897 -Facebook 120K Minutes - [ Monetization ] [ Nondrop ] [ 2HR Video]\nNot enough data\nMin order 1000\nMax order 1000\n6 $\tBuy Now\n5898 -Facebook 180K Minutes - [ Monetization ] [ Nondrop ] [ 2HR Video]\nNot enough data\nMin order 1000\nMax order 1000\n10 $\tBuy Now\nFacebook : Live Watchtime\nID -Service \/Average time\tRate per 1000\tBuy now\n5899 -FB 60K Minutes [ For 2hr live Video ]\nNot enough data\nMin order 1000\nMax order 1000\n4 $\tBuy Now\n5900 -FB 120K Minutes [ For 2hr live Video ]\nNot enough data\nMin order 1000\nMax order 1000\n5 $\tBuy Now\n5901 -FB 600K Minutes [ For 3hr live Video ]\nNot enough data\nMin order 1000\nMax order 1000\n8 $\tBuy Now\n5902 -FB 600K Minutes [ For 1hr live Video ]\nNot enough data\nMin order 1000\nMax order 1000\n12 $\tBuy Now\nFacebook : Comments\nID -Service \/Average time\tRate per 1000\tBuy now\n6057 -Facebook Custom Comments\nNot enough data\nMin order 10\nMax order 50\n14 $\tBuy Now\n6058 -Facebook Random Comments [ WorldWide ]\nNot enough data\nMin order 50\nMax order 5000\n18 $\tBuy Now\nFacebook : Live Stream Views [ GOOD ]\nID -Service \/Average time\tRate per 1000\tBuy now\n5903 -FB Live Stream Viewers [ 15 minutes ]\nNot enough data\nMin order 10\nMax order 10000\n2 $\tBuy Now\n5904 -FB Live Stream Viewers [ 30 minutes ]\nNot enough data\nMin order 10\nMax order 10000\n3 $\tBuy Now\n5905 -FB Live Stream Viewers [ 45 minutes ]\nNot enough data\nMin order 10\nMax order 10000\n4 $\tBuy Now\n5906 -FB Live Stream Viewers [ 60 minutes ]\nNot enough data\nMin order 10\nMax order 10000\n5 $\tBuy Now\n5907 -FB Live Stream Viewers [ 90 minutes ]\nNot enough data\nMin order 10\nMax order 10000\n7 $\tBuy Now\n5908 -FB Live Stream Viewers [ 120 minutes ]\nNot enough data\nMin order 10\nMax order 10000\n9 $\tBuy Now\n5909 -FB Live Stream Viewers [ 150 minutes ]\nNot enough data\nMin order 10\nMax order 10000\n12 $\tBuy Now\n5910 -FB Live Stream Viewers [ 180 minutes ]\nNot enough data\nMin order 10\nMax order 10000\n14 $\tBuy Now\n5911 -FB Live Stream Viewers [ 210 minutes ]\nNot enough data\nMin order 10\nMax order 10000\n16 $\tBuy Now\n5912 -FB Live Stream Viewers [ 240 minutes ]\nNot enough data\nMin order 10\nMax order 10000\n18 $\tBuy Now\n5913 -FB Live Stream Viewers [ 270 minutes ]\nNot enough data\nMin order 10\nMax order 10000\n21 $\tBuy Now\n5914 -FB Live Stream Viewers [ 300 minutes ]\nNot enough data\nMin order 10\nMax order 10000\n23 $\tBuy Now\n5915 -FB Live Stream Viewers [ 360 minutes ]\nNot enough data\nMin order 10\nMax order 10000\n27 $\tBuy Now\n5916 -FB Live Stream Viewers [ 420 minutes ]\nNot enough data\nMin order 10\nMax order 10000\n32 $\tBuy Now\nTwitter X : Followers\nID -Service \/Average time\tRate per 1000\tBuy now\n6003 -[X] Twitter Followers [ Premium ] [ Stable ] [ Refill: 30 Days ]\nNot enough data\nMin order 10\nMax order 1000000\n33 $\tBuy Now\nTwitter X : Views\nID -Service \/Average time\tRate per 1000\tBuy now\n5923 -X - Views [ \ud835\udde2\ud835\uddff\ud835\uddf4\ud835\uddee\ud835\uddfb\ud835\uddf6\ud835\uddf0 \ud835\udde9\ud835\uddf6\ud835\uddf2\ud835\ude04\ud835\ude00 ] ~ 50k\/day ~ Instant ~ \ud835\udc0d\ud835\udc0e \ud835\udde5\ud835\uddd8\ud835\uddd9\ud835\udddc\ud835\udddf\ud835\udddf\nNot enough data\nMin order 100\nMax order 100000000\n1 $\tBuy Now\n5925 -X - Views [ \ud835\udde2\ud835\uddff\ud835\uddf4\ud835\uddee\ud835\uddfb\ud835\uddf6\ud835\uddf0 \ud835\udde9\ud835\uddf6\ud835\uddf2\ud835\ude04\ud835\ude00 ] ~ 50k\/day ~ Instant ~ \ud835\udc0d\ud835\udc0e \ud835\udde5\ud835\uddd8\ud835\uddd9\ud835\udddc\ud835\udddf\ud835\udddf\nNot enough data\nMin order 100\nMax order 2147483647\n1 $\tBuy Now\n5924 -X - Views [ \ud835\udc14\ud835\udc0b\ud835\udc13\ud835\udc11\ud835\udc00 \ud835\udc05\ud835\udc00\ud835\udc12\ud835\udc13 ] ~ 10m\/day ~ Instant ~ \ud835\udc0d\ud835\udc0e \ud835\udde5\ud835\uddd8\ud835\uddd9\ud835\udddc\ud835\udddf\ud835\udddf [ \ud835\udde5\ud835\uddf2\ud835\uddf0\ud835\uddfc\ud835\uddfa\ud835\uddfa\ud835\uddf2\ud835\uddfb\ud835\uddf1\ud835\uddf2\ud835\uddf1\nNot enough data\nMin order 100\nMax order 100000000\n1 $\tBuy Now\nTwitter X : Likes\nID -Service \/Average time\tRate per 1000\tBuy now\n5918 -X - Likes [ \ud835\udc11\ud835\udc04\ud835\uddd4\ud835\udc0b ] ~ 1K\/day ~ Instant ~ NO \ud835\udde5\ud835\uddd8\ud835\uddd9\ud835\udddc\ud835\udddf\ud835\udddf\nNot enough data\nMin order 100\nMax order 500000\n3 $\tBuy Now\n5922 -X - Likes [ \ud835\udc11\ud835\udc04\ud835\uddd4\ud835\udc0b ] ~ 1-5k\/day ~ Instant ~ \ud835\udde5\ud835\uddd8\ud835\uddd9\ud835\udddc\ud835\udddf\ud835\udddf 30D\nNot enough data\nMin order 100\nMax order 10000\n7 $\tBuy Now\n5919 -X - Likes [ \ud835\udc11\ud835\udc04\ud835\uddd4\ud835\udc0b ] ~ 1k\/day ~ Instant ~ \ud835\udde5\ud835\uddd8\ud835\uddd9\ud835\udddc\ud835\udddf\ud835\udddf 30D\nNot enough data\nMin order 10\nMax order 100000\n9 $\tBuy Now\n5920 -X - Likes [ \ud835\udc11\ud835\udc04\ud835\uddd4\ud835\udc0b ] ~ 5k\/day ~ Instant ~ NO \ud835\udde5\ud835\uddd8\ud835\uddd9\ud835\udddc\ud835\udddf\ud835\udddf\nNot enough data\nMin order 10\nMax order 10000\n9 $\tBuy Now\n5921 -X - Likes [ \ud835\udc11\ud835\udc04\ud835\uddd4\ud835\udc0b ] ~ 10k\/day ~ Instant ~ \ud835\udde5\ud835\uddd8\ud835\uddd9\ud835\udddc\ud835\udddf\ud835\udddf 30D\nNot enough data\nMin order 10\nMax order 10000\n9 $\tBuy Now\nTwitter X : Poll Votes\nID -Service \/Average time\tRate per 1000\tBuy now\n5926 -Twitter Poll Votes\nNot enough data\nMin order 100\nMax order 20000\n1 $\tBuy Now\nTwitter X : Clicks\nID -Service \/Average time\tRate per 1000\tBuy now\n5928 -Twitter Profile Click\nNot enough data\nMin order 100\nMax order 100000000\n1 $\tBuy Now\n5929 -Twitter Details Click\nNot enough data\nMin order 500\nMax order 100000000\n1 $\tBuy Now\n5927 -Twitter Link Clicks\nNot enough data\nMin order 250\nMax order 10000000\n2 $\tBuy Now\nTwitter X : Retweets\nID -Service \/Average time\tRate per 1000\tBuy now\n5930 -Twitter Retweets [ Cheap ]\nNot enough data\nMin order 100\nMax order 1000\n3 $\tBuy Now\n5931 -Twitter Retweet [ SuperFast ]\nNot enough data\nMin order 100\nMax order 50000\n4 $\tBuy Now\n5932 -Twitter Retweets [ Real Mix ]\nNot enough data\nMin order 50\nMax order 5000\n7 $\tBuy Now\nTwitter X : Reach \/ Impressions\nID -Service \/Average time\tRate per 1000\tBuy now\n5933 -Twitter Bundle Impression [ Views + Impressions + Detail Expand + Profile Clicks ]\nNot enough data\nMin order 100\nMax order 100000000\n1 $\tBuy Now\nTelegram : Members\nID -Service \/Average time\tRate per 1000\tBuy now\n6120 -Telegram Members [ Nondrop ] [ High Quality ] [ 60 Day Refill ]\nNot enough data\nMin order 600\nMax order 200000\n3 $\tBuy Now\n5968 -Telegram Members [ Nondrop ] [ High Quality ] [ 365 Day Refill ]\nNot enough data\nMin order 500\nMax order 1000000\n3 $\tBuy Now\n5967 -Telegram Members [ Nondrop ] [ High Quality ] [ 90 Day Refill ]\nNot enough data\nMin order 100\nMax order 350000\n2 $\tBuy Now\nTelegram : Members [ Cheap ]\nID -Service \/Average time\tRate per 1000\tBuy now\n5969 -Tg Members [ No Refill ] - No Warranty\nNot enough data\nMin order 100\nMax order 350000\n1 $\tBuy Now\nTelegram : Post Views\nID -Service \/Average time\tRate per 1000\tBuy now\n6113 -Telegram Post Views [Last 1]\nNot enough data\nMin order 10\nMax order 100000\n1 $\tBuy Now\n6114 -Telegram Post Views [Last 1 Post]\nNot enough data\nMin order 10\nMax order 100000000\n1 $\tBuy Now\n6112 -Telegram Post Views [Last 1 Post]\nNot enough data\nMin order 10\nMax order 100000\n1 $\tBuy Now\n6115 -Telegram Post View [Last 1 Post]\nNot enough data\nMin order 100\nMax order 300000\n1 $\tBuy Now\n6116 -Telegram Post Views [Last 5 Post]\nNot enough data\nMin order 1000\nMax order 100000000\n1 $\tBuy Now\n6117 -Telegram Post Views [Last 10 Post]\nNot enough data\nMin order 10\nMax order 100000000\n1 $\tBuy Now\n6118 -Telegram Post View [Last 5 Post]\nNot enough data\nMin order 50\nMax order 300000\n1 $\tBuy Now\n6119 -Telegram Post View - LAST 20 POST |\nNot enough data\nMin order 1000\nMax order 10000000\n1 $\tBuy Now\n5958 -Telegram Views [ 5 Post ]\nNot enough data\nMin order 200\nMax order 50000000\n1 $\tBuy Now\n5959 -Telegram Views [ 10 Post ]\nNot enough data\nMin order 1000000\nMax order 50000000\n1 $\tBuy Now\n5961 -Telegram Views [ 1000 Post ]\nNot enough data\nMin order 10\nMax order 50000000\n2 $\tBuy Now\nTelegram : Post Reactions\nID -Service \/Average time\tRate per 1000\tBuy now\n5951 -Positive Reactions [ \ud83d\udc4d \u2764\ufe0f \ud83d\udd25 \ud83c\udf89 \ud83d\ude01]\nNot enough data\nMin order 10\nMax order 200000\n1 $\tBuy Now\n5952 -Reaction\ud83d\udc4d\nNot enough data\nMin order 10\nMax order 200000\n1 $\tBuy Now\n5953 -Reaction\ud83d\udc4e\nNot enough data\nMin order 10\nMax order 200000\n1 $\tBuy Now\n5954 -Reaction\u2764\ufe0f\nNot enough data\nMin order 10\nMax order 200000\n1 $\tBuy Now\n5955 -Reaction Negative\ud83d\udd95\ud83d\udc94\ud83d\ude08\nNot enough data\nMin order 10\nMax order 200000\n1 $\tBuy Now\n5956 -Reaction\ud83d\ude0d\nNot enough data\nMin order 10\nMax order 200000\n1 $\tBuy Now\n5947 -Reactions + Views | \u2764\ufe0f\nNot enough data\nMin order 10\nMax order 50000\n1 $\tBuy Now\n5948 -Reactions + Views | \ud83e\udd70\nNot enough data\nMin order 10\nMax order 50000\n1 $\tBuy Now\n5949 -Reactions + Views | \ud83d\udc4c\nNot enough data\nMin order 10\nMax order 50000\n1 $\tBuy Now\n5950 -Reactions + Views | \ud83d\ude31\nNot enough data\nMin order 10\nMax order 50000\n1 $\tBuy Now\n5942 -Premium [\ud83d\udc4d ] Reaction + Static\nNot enough data\nMin order 10\nMax order 1000\n1 $\tBuy Now\n5943 -Premium [\u2764\ufe0f ] Reaction + Static\nNot enough data\nMin order 10\nMax order 1000\n1 $\tBuy Now\n5944 -Premium \ud83d\udc4d\ud83e\udd29\ud83c\udf89\ud83d\udd25\u2764\ufe0f\ud83e\udd70\ud83d\udc4f\ud83c\udffb - Include Static\nNot enough data\nMin order 10\nMax order 1000\n2 $\tBuy Now\n5945 -Premium \ud83d\udc4e\ud83d\ude01\ud83d\ude22\ud83d\udca9\ud83e\udd2e\ud83e\udd14\ud83e\udd2f\ud83e\udd2c - Include Static\nNot enough data\nMin order 10\nMax order 1000\n2 $\tBuy Now\n5946 -Premium \ud83d\udc4e - Include Static\nNot enough data\nMin order 10\nMax order 50000\n18 $\tBuy Now\nTelegram : Bot start + Seo\nID -Service \/Average time\tRate per 1000\tBuy now\n5966 -Bot Start - Mix Country + Accept Referral Code \ud83c\udf0e\ud83d\udd1d\nNot enough data\nMin order 50\nMax order 220000\n1 $\tBuy Now\nTelegram : Poll Vote\nID -Service \/Average time\tRate per 1000\tBuy now\n5941 -Telegram Post Poll Vote - Instant\nNot enough data\nMin order 20\nMax order 5000\n1 $\tBuy Now\nTelegram : Comments + Views\nID -Service \/Average time\tRate per 1000\tBuy now\n5937 -Telegram Random English Comments + views\nNot enough data\nMin order 15\nMax order 3500\n27 $\tBuy Now\n5938 -Telegram Russian Random Comments + Views \ud83c\uddf7\ud83c\uddfa\nNot enough data\nMin order 15\nMax order 3500\n27 $\tBuy Now\n5939 -Telegram Indian Random Comments + Views \ud83c\uddee\ud83c\uddf3\nNot enough data\nMin order 15\nMax order 3000\n27 $\tBuy Now\n5940 -Telegram Arabic Random Comments + View \ud83c\udde6\ud83c\uddea\nNot enough data\nMin order 15\nMax order 3000\n27 $\tBuy Now\nTelegram : Story Views\nID -Service \/Average time\tRate per 1000\tBuy now\n5935 -Telegram Story Views [ Cheap ]\nNot enough data\nMin order 50\nMax order 100000\n1 $\tBuy Now\n5936 -Telegram Story Views [ HQ ]\nNot enough data\nMin order 10\nMax order 500000\n2 $\tBuy Now\nTelegram : Future post Service\nID -Service \/Average time\tRate per 1000\tBuy now\n5965 -Future Post Reactions [ Positive ]\nNot enough data\nMin order 25\nMax order 25000\n1 $\tBuy Now\nTelegram : Premium Bot Start\nID -Service \/Average time\tRate per 1000\tBuy now\n5970 -Tg Premium Bot Start\nNot enough data\nMin order 1000\nMax order 50000\n12 $\tBuy Now\nTelegram : Online Members\nID -Service \/Average time\tRate per 1000\tBuy now\n5971 -Telegram ONLINE Premium Members [ 30Day Premium ] \u26a1\ufe0f\nNot enough data\nMin order 10\nMax order 25000\n18 $\tBuy Now\n5972 -Telegram ONLINE Premium Members [ 20-30D Premium ]\nNot enough data\nMin order 10\nMax order 50000\n20 $\tBuy Now\n5973 -Telegram ONLINE Premium Members [ 30-60D Premium ]\nNot enough data\nMin order 10\nMax order 350000\n36 $\tBuy Now\nTelegram : Premium Post View\nID -Service \/Average time\tRate per 1000\tBuy now\n5976 -Telegram Premium Views\nNot enough data\nMin order 10\nMax order 1000\n2 $\tBuy Now\nYouTube : Guaranteed Subscribers\nID -Service \/Average time\tRate per 1000\tBuy now\n5979 -YouTube Subscriber [ Nondrop ] [ 30D Refill ] [ Good Speed ]\nNot enough data\nMin order 5\nMax order 100000\n51 $\tBuy Now\n5981 -YouTube Subscriber [ Lifetime Guaranteed ] [ Normal Speed ]\u26a1\ufe0f\nNot enough data\nMin order 100\nMax order 50000\n62 $\tBuy Now\n5982 -YouTube Subscriber [ Nondrop ] [ 30D Refill ] [ Slow Speed ]\nNot enough data\nMin order 100\nMax order 50000\n76 $\tBuy Now\n5980 -YouTube Subscriber [ Lifetime Guaranteed ] [ Best Service ]\u26a1\ufe0f\nNot enough data\nMin order 100\nMax order 50000\n80 $\tBuy Now\nYouTube : Prank Subscribers\nID -Service \/Average time\tRate per 1000\tBuy now\n5983 -YouTube Prank Subscribers [ No Guarantee ] [ fast speed ] S1\nNot enough data\nMin order 500\nMax order 1000000\n2 $\tBuy Now\n5984 -YouTube Prank Subscribers [ No Guarantee ] [ fast speed ] S2\nNot enough data\nMin order 500\nMax order 1000000\n3 $\tBuy Now\nYouTube : Likes\nID -Service \/Average time\tRate per 1000\tBuy now\n5987 -Youtube Likes [ Premium Quality ] [ Lifetime Guarantee ] [ 100k\/D ]\nNot enough data\nMin order 10\nMax order 2000000\n24 $\tBuy Now\nYouTube : Video Views\nID -Service \/Average time\tRate per 1000\tBuy now\n5991 -YouTube - 100,000 Views [ Nondrop \u26a1 ] [ \ud835\udde5\ud835\uddd8\ud835\uddd9\ud835\udddc\ud835\udddf\ud835\udddf 365D ]\nNot enough data\nMin order 100000\nMax order 100000000\n4 $\tBuy Now\n5992 -YouTube - 10,000 Views [ Nondrop \u26a1] [ Lifetime ]\nNot enough data\nMin order 10000\nMax order 100000000\n4 $\tBuy Now\n5993 -YouTube - 200,000 Views [ Nondrop \u26a1 ] [ \ud835\udde5\ud835\uddd8\ud835\uddd9\ud835\udddc\ud835\udddf\ud835\udddf 365D ]\nNot enough data\nMin order 3000\nMax order 100000000\n4 $\tBuy Now\n6018 -YouTube - 3,000 Views [ Nondrop \u26a1 ] [ \ud835\udde5\ud835\uddd8\ud835\uddd9\ud835\udddc\ud835\udddf\ud835\udddf 30D ] \ud83c\uddee\ud83c\uddf3\nNot enough data\nMin order 3000\nMax order 100000000\n4 $\tBuy Now\n6020 -YouTube - 3,000 Views [ Nondrop \u26a1 ] [ \ud835\udde5\ud835\uddd8\ud835\uddd9\ud835\udddc\ud835\udddf\ud835\udddf 90D ] \ud83c\uddee\ud83c\uddf3\nNot enough data\nMin order 3000\nMax order 3000000\n5 $\tBuy Now\n5995 -YouTube - Min 100 Views [ Nondrop \u26a1 ] [ \ud835\udde5\ud835\uddd8\ud835\uddd9\ud835\udddc\ud835\udddf\ud835\udddf 365D ]\nNot enough data\nMin order 100\nMax order 3000\n3 $\tBuy Now\n5994 -YouTube - 1,000 Views [ Nondrop \u26a1 ] [ \ud835\udde5\ud835\uddd8\ud835\uddd9\ud835\udddc\ud835\udddf\ud835\udddf 365D ]\nNot enough data\nMin order 1000\nMax order 3000000\n4 $\tBuy Now\n6095 -YouTube - 1,000 Views [ Nondrop \u26a1 ] [ \ud835\udde5\ud835\uddd8\ud835\uddd9\ud835\udddc\ud835\udddf\ud835\udddf 365D ]\nNot enough data\nMin order 1000\nMax order 1000000\n5 $\tBuy Now\n5996 -YouTube - 1,000 Views [ Nondrop \u26a1 ] [ \ud835\udde5\ud835\uddd8\ud835\uddd9\ud835\udddc\ud835\udddf\ud835\udddf 365D ]\nNot enough data\nMin order 1000\nMax order 10000\n11 $\tBuy Now\nYouTube : Watchtime\nID -Service \/Average time\tRate per 1000\tBuy now\n6098 -YouTube Watchtime | Video Length 30 Minute+ | 1k Quantity = 250 hours | \ud835\udde5\ud835\uddd8\ud835\uddd9\ud835\udddc\ud835\udddf\ud835\udddf 30D\nNot enough data\nMin order 100\nMax order 20000\n64 $\tBuy Now\n6099 -YouTube Watchtime | Video Length 10-20 Minute+ | 1k Quantity = 1k hours | \ud835\udde5\ud835\uddd8\ud835\uddd9\ud835\udddc\ud835\udddf\ud835\udddf 30D\nNot enough data\nMin order 100\nMax order 4000\n79 $\tBuy Now\n6100 -Youtube Watchtime | Video Length 60 Min+ | 500 Hour\/Day | 30 Days Refill\nNot enough data\nMin order 100\nMax order 4000\n82 $\tBuy Now\nYouTube : Short Service\nID -Service \/Average time\tRate per 1000\tBuy now\n6000 -Youtube Short Views | Lifetime Guarantee\nNot enough data\nMin order 100\nMax order 3000000\n4 $\tBuy Now\nYouTube : Shares\nID -Service \/Average time\tRate per 1000\tBuy now\n6001 -Youtube Shares | Start Time 0-2hrs\nNot enough data\nMin order 100\nMax order 100000\n1 $\tBuy Now\nYouTube : Live Stream Views\nID -Service \/Average time\tRate per 1000\tBuy now\n6129 -YouTube Live Stream | 15 Minutes\nNot enough data\nMin order 10\nMax order 50000\n1 $\tBuy Now\n6130 -YouTube Live Stream [ Max 50K ] | Instant Start | 30 Minutes\nNot enough data\nMin order 10\nMax order 50000\n1 $\tBuy Now\n6131 -YouTube Live Stream [ Max 50K ] | Instant Start | 60 Minutes\nNot enough data\nMin order 10\nMax order 50000\n1 $\tBuy Now\n6132 -YouTube Live Stream [ Max 50K ] | Instant Start | 90 Minutes\nNot enough data\nMin order 10\nMax order 50000\n2 $\tBuy Now\n6133 -YouTube Live Stream [ Max 50K ] | Instant Start | 120 Minutes\nNot enough data\nMin order 10\nMax order 50000\n2 $\tBuy Now\n6134 -YouTube Live Stream [ Max 50K ] | Instant Start | 180 Minutes\nNot enough data\nMin order 10\nMax order 50000\n3 $\tBuy Now\n6135 -YouTube Live Stream [ Max 50K ] | Instant Start | 240 Minutes\nNot enough data\nMin order 10\nMax order 50000\n4 $\tBuy Now\n6136 -YouTube Live Stream [ Max 50K ] | Instant Start | 360 Minutes\nNot enough data\nMin order 10\nMax order 50000\n6 $\tBuy Now\n6137 -YouTube Live Stream [ Max 50K ] | Instant Start | 720 Minutes\nNot enough data\nMin order 10\nMax order 50000\n13 $\tBuy Now\n6138 -YouTube Live Stream [ Max 50K ] | Instant Start | 1440 Minutes\nNot enough data\nMin order 10\nMax order 50000\n25 $\tBuy Now\nReal Ugandans Services \ud83c\uddfa\ud83c\uddec\nID -Service \/Average time\tRate per 1000\tBuy now\n6004 -TikTok Real Views [ Organic \ud83c\uddfa\ud83c\uddec ]\nNot enough data\nMin order 1000\nMax order 2147483647\n3 $\tBuy Now\n6006 -TikTok Followers [ Africa Countries \ud83c\uddfa\ud83c\uddec ] [ Nondrop ] [ 30D Refill ]\nNot enough data\nMin order 500\nMax order 100000\n14 $\tBuy Now\n6005 -Tiktok Real Likes [ Organic \ud83c\uddfa\ud83c\uddec ]\nNot enough data\nMin order 500\nMax order 1000000\n15 $\tBuy Now\n6007 -\ud83c\uddfa\ud83c\uddec WhatsApp Channel Uganda Followers - [ 5k-10k\/day ] [ No Refill ] Instant\nNot enough data\nMin order 1000\nMax order 10000\n38 $\tBuy Now\n6008 -Instagram Ugandans Followers \ud83c\uddfa\ud83c\uddec\nNot enough data\nMin order 500\nMax order 5000\n42 $\tBuy Now\nSpotify Services\nID -Service \/Average time\tRate per 1000\tBuy now\n6031 -Spotify Followers \u26a1\ufe0f| 365 Days Refill\nNot enough data\nMin order 100\nMax order 1000000\n1 $\tBuy Now\n6033 -Spotify Saves [LINK - Track, Album, Podcast]\nNot enough data\nMin order 100\nMax order 1000000\n1 $\tBuy Now\n6032 -Spotify Quality Followers [365 Days Refill]\nNot enough data\nMin order 100\nMax order 1000000\n2 $\tBuy Now\n6034 -\ud83c\uddfa\ud83c\uddf8 Spotify USA Monthly Listeners\nNot enough data\nMin order 500\nMax order 20000000\n5 $\tBuy Now\nLinkedin Services\nID -Service \/Average time\tRate per 1000\tBuy now\n6035 -LinkedIn Post Like [REAL] [HQ]\nNot enough data\nMin order 100\nMax order 10000\n24 $\tBuy Now\n6036 -Linkedin Connect [Real]\nNot enough data\nMin order 1\nMax order 10000\n44 $\tBuy Now\n6037 -Linkedin Followers [Premium] [100%HQ] [10-50\/Day] [0-24Hour] [0-10% Drop]\nNot enough data\nMin order 100\nMax order 10000\n63 $\tBuy Now\nTwitch Services\nID -Service \/Average time\tRate per 1000\tBuy now\n6038 -Twitch Video Views\nNot enough data\nMin order 100\nMax order 10000000\n1 $\tBuy Now\n6039 -Twitch Followers [ 30 Day Refill ]\nNot enough data\nMin order 20\nMax order 10000\n1 $\tBuy Now\n6040 -Twitch Channel Views \u26a1\ufe0f\u267b\ud83d\udca7\u2b50\nNot enough data\nMin order 1000\nMax order 100000\n6 $\tBuy Now\nBlueSky Services\nID -Service \/Average time\tRate per 1000\tBuy now\n6041 -BlueSky Retweet[Instant ]\nNot enough data\nMin order 100\nMax order 500000\n21 $\tBuy Now\n6042 -BlueSky Likes [Instant ]\nNot enough data\nMin order 100\nMax order 500000\n27 $\tBuy Now\n6043 -BlueSky Followers [Brazil\ud83c\udde7\ud83c\uddf7]\nNot enough data\nMin order 10\nMax order 5000\n28 $\tBuy Now\nSoundCloud Services\nID -Service \/Average time\tRate per 1000\tBuy now\n6044 -SoundCloud Plays\nNot enough data\nMin order 500\nMax order 100000000\n2 $\tBuy Now\n6045 -SoundCloud Follower\nNot enough data\nMin order 10\nMax order 10000\n57 $\tBuy Now\n6046 -SoundCloud Likes\nNot enough data\nMin order 10\nMax order 100000\n60 $\tBuy Now\nPinterest Services\nID -Service \/Average time\tRate per 1000\tBuy now\n6047 -Pinterest Likes [Real]\nNot enough data\nMin order 10\nMax order 10000\n23 $\tBuy Now\n6048 -Pinterest Followers [Real Accounts]\nNot enough data\nMin order 20\nMax order 15000\n33 $\tBuy Now\nBoomPlay Services\nID -Service \/Average time\tRate per 1000\tBuy now\n6049 -Boomplay Streams [AFRICA]\nNot enough data\nMin order 1000\nMax order 100000\n7 $\tBuy Now\nDiscord Services\nID -Service \/Average time\tRate per 1000\tBuy now\n6050 -Discord Server Members [Online [Bot Required] [30D Online]\nNot enough data\nMin order 100\nMax order 2000\n20 $\tBuy Now\n6051 -Discord Friend Request [No Drop]\nNot enough data\nMin order 1000\nMax order 2000\n23 $\tBuy Now\nAudiomack Services\nID -Service \/Average time\tRate per 1000\tBuy now\n6052 -Audiomack Direct Plays [ Non Drop ]\nNot enough data\nMin order 1000\nMax order 1000000\n1 $\tBuy Now\n6053 -Audiomack Followers\nNot enough data\nMin order 100\nMax order 1000000\n5 $\tBuy Now\n6054 -Audiomack Likes\nNot enough data\nMin order 100\nMax order 1000000\n5 $\tBuy Now\nSnapchat Services\nID -Service \/Average time\tRate per 1000\tBuy now\n6055 -Snapchat Likes [100% Real Active]\nNot enough data\nMin order 10\nMax order 10000\n27 $\tBuy Now\n6056 -Snapchat Followers\nNot enough data\nMin order 10\nMax order 50\n74 $\tBuy Now`;\n\n        \/\/ Fast parser: single pass using regex & state machine\n        function parseServices(raw) {\n            const lines = raw.split(\/\\r?\\n\/);\n            const services = [];\n            let currentCategory = \"General\";\n            const MAX_SAFE = 2147483647;\n            \n            for (let i = 0; i < lines.length; i++) {\n                let line = lines[i].trim();\n                if (!line) continue;\n                \n                \/\/ detect category\n                if (\/^[A-Za-z]\/.test(line) &#038;&#038; (line.includes(':') || line.includes('|')) &#038;&#038; !line.includes('-Service') &#038;&#038; !line.toLowerCase().includes(\"rate per 1000\") &#038;&#038; !line.match(\/^\\d\/)) {\n                    currentCategory = line.replace(\/[\\t]+\/g, ' ').substring(0, 80);\n                    continue;\n                }\n                \n                const idMatch = line.match(\/^(\\d+)\\s*-\\s*(.+)$\/);\n                if (idMatch) {\n                    const id = idMatch[1];\n                    const name = idMatch[2].trim();\n                    let minOrder = 0, maxOrder = 0, price = 0;\n                    let j = i+1;\n                    while (j < lines.length &#038;&#038; !(\/^\\d+\\s*-\/.test(lines[j].trim())) &#038;&#038; !(lines[j].trim() &#038;&#038; lines[j].trim().includes(':') &#038;&#038; !lines[j].trim().match(\/^\\d\/))) {\n                        const cur = lines[j].trim().toLowerCase();\n                        if (cur.startsWith(\"min order\")) {\n                            const m = cur.match(\/\\d+\/);\n                            if (m) minOrder = parseInt(m[0]);\n                        } else if (cur.startsWith(\"max order\")) {\n                            const m = cur.match(\/\\d+\/);\n                            if (m) maxOrder = parseInt(m[0]);\n                        } else if (cur.includes(\"$\")) {\n                            const pm = cur.match(\/(\\d+(?:\\.\\d+)?)\\s*\\$\/) || cur.match(\/\\$?\\s*(\\d+(?:\\.\\d+)?)\/);\n                            if (pm) price = parseFloat(pm[1]);\n                        }\n                        j++;\n                    }\n                    if (price > 0) {\n                        services.push({\n                            category: currentCategory,\n                            id: id,\n                            name: name,\n                            minOrder: minOrder || 0,\n                            maxOrder: maxOrder === MAX_SAFE ? 2147483647 : maxOrder,\n                            boostedPrice: price * 30\n                        });\n                    }\n                    i = j-1;\n                }\n            }\n            return services;\n        }\n        \n        const allServices = parseServices(FULL_RAW_DATA);\n        const tbody = document.getElementById('tableBody');\n        const searchInput = document.getElementById('searchInput');\n        const categoryFilter = document.getElementById('categoryFilter');\n        const sortSelect = document.getElementById('sortSelect');\n        const resetBtn = document.getElementById('resetBtn');\n        const resultStats = document.getElementById('resultStats');\n        \n        let currentDisplay = [...allServices];\n        \n        function buildCategoryOptions() {\n            const cats = [...new Set(allServices.map(s => s.category))].sort();\n            categoryFilter.innerHTML = '<option value=\"all\">\ud83d\udcc1 All categories<\/option>';\n            cats.forEach(c => {\n                const opt = document.createElement('option');\n                opt.value = c;\n                opt.textContent = c;\n                categoryFilter.appendChild(opt);\n            });\n        }\n        \n        function filterAndSort() {\n            let filtered = allServices;\n            const term = searchInput.value.toLowerCase().trim();\n            const cat = categoryFilter.value;\n            if (term) {\n                filtered = filtered.filter(s => s.name.toLowerCase().includes(term) || s.id.includes(term) || s.category.toLowerCase().includes(term));\n            }\n            if (cat !== 'all') filtered = filtered.filter(s => s.category === cat);\n            \n            const sortBy = sortSelect.value;\n            if (sortBy === 'id_asc') filtered.sort((a,b) => parseInt(a.id) - parseInt(b.id));\n            else if (sortBy === 'price_asc') filtered.sort((a,b) => a.boostedPrice - b.boostedPrice);\n            else if (sortBy === 'price_desc') filtered.sort((a,b) => b.boostedPrice - a.boostedPrice);\n            else if (sortBy === 'name_asc') filtered.sort((a,b) => a.name.localeCompare(b.name));\n            \n            currentDisplay = filtered;\n            renderTable();\n        }\n        \n        function renderTable() {\n            if (currentDisplay.length === 0) {\n                tbody.innerHTML = '<tr><td colspan=\"7\" class=\"empty-state\">\ud83d\ude1e No services match your filters.<\/td><\/tr>';\n                resultStats.innerText = '0 services';\n                return;\n            }\n            const fragment = document.createDocumentFragment();\n            for (const s of currentDisplay) {\n                const row = document.createElement('tr');\n                const maxShow = s.maxOrder === 2147483647 ? '\u221e' : s.maxOrder.toLocaleString();\n                row.innerHTML = `\n                    <td><span class=\"category-badge\">${escapeHtml(s.category)}<\/span><\/td>\n                    <td style=\"font-weight:500;\">${s.id}<\/td>\n                    <td class=\"service-name\">${escapeHtml(s.name)}<\/td>\n                    <td>${s.minOrder.toLocaleString()}<\/td>\n                    <td>${maxShow}<\/td>\n                    <td><span class=\"price-highlight\">$${s.boostedPrice.toFixed(2)}<\/span><\/td>\n                    <td><button class=\"buy-btn\" data-id=\"${s.id}\"><i class=\"fas fa-shopping-cart\"><\/i> Buy Now<\/button><\/td>\n                `;\n                fragment.appendChild(row);\n            }\n            tbody.innerHTML = '';\n            tbody.appendChild(fragment);\n            resultStats.innerText = `${currentDisplay.length} services`;\n            \n            document.querySelectorAll('.buy-btn').forEach(btn => {\n                btn.addEventListener('click', (e) => {\n                    alert(`\ud83d\uded2 Order for service ID ${btn.getAttribute('data-id')}\\nAdase Ads Ltd, Zion Road 12 AAA Close, Kira will contact you.`);\n                });\n            });\n        }\n        \n        function escapeHtml(str) {\n            return str.replace(\/[&<>]\/g, m => m === '&' ? '&amp;' : m === '<' ? '&lt;' : '&gt;');\n        }\n        \n        function resetAll() {\n            searchInput.value = '';\n            categoryFilter.value = 'all';\n            sortSelect.value = 'id_asc';\n            filterAndSort();\n        }\n        \n        searchInput.addEventListener('input', filterAndSort);\n        categoryFilter.addEventListener('change', filterAndSort);\n        sortSelect.addEventListener('change', filterAndSort);\n        resetBtn.addEventListener('click', resetAll);\n        \n        buildCategoryOptions();\n        filterAndSort();\n    })();\n<\/script>\n<\/body>\n<\/html>\n\n\n\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, viewport-fit=cover\">\n  <title>Adase Ads Ltd | Complete Ad + SMM Platform<\/title>\n  <!-- Font Awesome + Google Fonts -->\n  <link rel=\"stylesheet\" href=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/font-awesome\/6.5.0\/css\/all.min.css\">\n  <link href=\"https:\/\/fonts.googleapis.com\/css2?family=Inter:opsz,wght@14..32,300;400;500;600;700;800&#038;display=swap\" rel=\"stylesheet\">\n  <!-- SheetJS for Excel export -->\n  <script src=\"https:\/\/cdn.sheetjs.com\/xlsx-0.20.2\/package\/dist\/xlsx.full.min.js\"><\/script>\n  <!-- html2pdf for PDF export (lightweight) -->\n  <script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/html2pdf.js\/0.10.1\/html2pdf.bundle.min.js\" integrity=\"sha512-GsLlZN\/3F2ErC5ifS5QtgpiJtWd43JWSuIgh7mbzZ8zBps+dvLusV+eNQATqgA\/HdeKFVgA5v3S\/cIrLF7QnIg==\" crossorigin=\"anonymous\" referrerpolicy=\"no-referrer\"><\/script>\n  <style>\n    * { margin: 0; padding: 0; box-sizing: border-box; font-family: 'Inter', sans-serif; }\n    body { background: #f5f7fb; color: #1a2634; padding-bottom: 40px; }\n    .container { max-width: 1280px; margin: 0 auto; padding: 0 20px; }\n    .navbar { background: white; box-shadow: 0 4px 12px rgba(0,0,0,0.03); padding: 16px 0; position: sticky; top: 0; z-index: 100; background: rgba(255,255,255,0.96); }\n    .nav-flex { display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 12px; }\n    .logo { font-weight: 800; font-size: 1.7rem; background: linear-gradient(135deg, #1F3A8A, #2E5AFF); -webkit-background-clip: text; background-clip: text; color: transparent; }\n    .auth-buttons { display: flex; gap: 12px; flex-wrap: wrap; }\n    .btn-sm { padding: 8px 20px; border-radius: 40px; font-weight: 600; border: none; cursor: pointer; background: #f0f2f5; transition: 0.2s; }\n    .btn-primary { background: #2E5AFF; color: white; box-shadow: 0 2px 6px rgba(46,90,255,0.2); }\n    .btn-primary:hover { background: #1e44cc; transform: translateY(-1px);}\n    .btn-outline { background: transparent; border: 1px solid #2E5AFF; color: #2E5AFF; }\n    .btn-danger { background: #dc2626; color: white; }\n    .btn-danger:hover { background: #b91c1c; }\n    .btn-warning { background: #f59e0b; color: white; }\n    .card { background: white; border-radius: 28px; padding: 24px; margin-bottom: 24px; box-shadow: 0 8px 20px rgba(0,0,0,0.02), 0 2px 6px rgba(0,0,0,0.05); border: 1px solid #eef2f9; }\n    .grid-2 { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 24px; }\n    .badge { background: #eef3ff; color: #1f3a8a; padding: 4px 12px; border-radius: 40px; font-size: 0.75rem; font-weight: 600; display: inline-block; }\n    input, select, textarea { width: 100%; padding: 12px 16px; border-radius: 20px; border: 1px solid #cfdfed; background: white; font-size: 0.9rem; margin-top: 6px; margin-bottom: 16px; }\n    label { font-weight: 600; font-size: 0.85rem; }\n    hr { margin: 20px 0; border: 0; height: 1px; background: #eef2f9; }\n    .flex-between { display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 12px; }\n    table { width: 100%; border-collapse: collapse; overflow-x: auto; display: block; }\n    th, td { text-align: left; padding: 12px 8px; border-bottom: 1px solid #eef2f9; }\n    .search-box { margin-bottom: 20px; display: flex; gap: 12px; flex-wrap: wrap; align-items: flex-end; }\n    .modal { display: none; position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0,0,0,0.5); z-index: 1000; justify-content: center; align-items: center; }\n    .modal-content { background: white; max-width: 500px; width: 90%; border-radius: 32px; padding: 24px; max-height: 80vh; overflow-y: auto; }\n    .close-modal { float: right; font-size: 28px; cursor: pointer; }\n    @media (max-width: 700px) { .nav-flex { flex-direction: column; align-items: stretch; } .auth-buttons { justify-content: center; } }\n  <\/style>\n<\/head>\n<body>\n<div class=\"navbar\">\n  <div class=\"container nav-flex\">\n    <div class=\"logo\">\ud83d\udce2 Adase Serve<\/div>\n    <div id=\"globalUserArea\" class=\"auth-buttons\"><\/div>\n  <\/div>\n<\/div>\n<div class=\"container\" id=\"appMain\"><div id=\"dynamicPanel\" style=\"margin-top: 30px;\">Loading...<\/div><\/div>\n\n<script>\n  \/\/ ---------- DATA MODELS ----------\n  let users = [];\n  let ads = [];\n  let proofs = [];\n  let platformRevenue = 0;\n  let sessions = { currentUserId: null, currentUserRole: null };\n  let smmOrders = [];\n  let withdrawRequests = []; \/\/ { id, userId, amount, status, date }\n  let contacts = []; \/\/ for uploaded contacts\n\n  function loadData() {\n    const storedUsers = localStorage.getItem('adase_users');\n    const storedAds = localStorage.getItem('adase_ads');\n    const storedProofs = localStorage.getItem('adase_proofs');\n    const storedPlatform = localStorage.getItem('adase_platformRevenue');\n    const storedOrders = localStorage.getItem('adase_smm_orders');\n    const storedWithdraw = localStorage.getItem('adase_withdraw_requests');\n    const storedContacts = localStorage.getItem('adase_contacts');\n    users = storedUsers ? JSON.parse(storedUsers) : [];\n    ads = storedAds ? JSON.parse(storedAds) : [];\n    proofs = storedProofs ? JSON.parse(storedProofs) : [];\n    platformRevenue = storedPlatform ? parseFloat(storedPlatform) : 0;\n    smmOrders = storedOrders ? JSON.parse(storedOrders) : [];\n    withdrawRequests = storedWithdraw ? JSON.parse(storedWithdraw) : [];\n    contacts = storedContacts ? JSON.parse(storedContacts) : [];\n\n    \/\/ Admin credentials: sales@cashchat.se \/ Justtrade81#\n    const adminEmail = \"sales@cashchat.se\";\n    const adminPass = \"Justtrade81#\";\n    const existingAdmin = users.find(u => u.email === adminEmail && u.role === 'admin');\n    if (!existingAdmin) {\n      users = users.filter(u => u.role !== 'admin');\n      users.push({ \n        id: Date.now() + 1, \n        name: \"Super Admin\", firstName: \"Super\", lastName: \"Admin\",\n        email: adminEmail, password: adminPass, role: \"admin\", \n        wallet: 0, advertiserWallet: 0, viewedAds: [],\n        phone: \"\", sponsorCode: \"\", country: \"\", gender: \"\", ageGroup: \"\", walletStatus: \"Active\",\n        accountStatus: \"active\"\n      });\n    } else {\n      existingAdmin.password = adminPass;\n      const idx = users.findIndex(u => u.id === existingAdmin.id);\n      if (idx !== -1) users[idx] = existingAdmin;\n    }\n\n    \/\/ Ensure all users have new fields\n    users = users.map(u => {\n      if (!u.firstName) u.firstName = u.name ? u.name.split(' ')[0] : u.name || \"\";\n      if (!u.lastName) u.lastName = u.name ? (u.name.split(' ')[1] || \"\") : \"\";\n      if (u.phone === undefined) u.phone = \"\";\n      if (u.sponsorCode === undefined) u.sponsorCode = \"\";\n      if (u.country === undefined) u.country = \"\";\n      if (u.gender === undefined) u.gender = \"\";\n      if (u.ageGroup === undefined) u.ageGroup = \"\";\n      if (u.walletStatus === undefined) u.walletStatus = (u.role === 'user' ? \"Not Active\" : \"Active\");\n      if (u.accountStatus === undefined) u.accountStatus = \"active\";\n      if (!u.name && u.firstName) u.name = (u.firstName + \" \" + u.lastName).trim();\n      return u;\n    });\n\n    \/\/ Seed demo data if needed\n    if (users.length === 1) {\n      users.push({ \n        id: 1001, name: \"Demo Advertiser\", firstName: \"Demo\", lastName: \"Advertiser\",\n        email: \"adv@demo.com\", password: \"adv123\", role: \"advertiser\", wallet: 0, \n        advertiserWallet: 50000, viewedAds: [], phone: \"+256700000000\", sponsorCode: \"DEMO123\",\n        country: \"Uganda\", gender: \"Male\", ageGroup: \"25-34\", walletStatus: \"Active\", accountStatus: \"active\"\n      });\n      users.push({ \n        id: 1002, name: \"Alice Viewer\", firstName: \"Alice\", lastName: \"Viewer\",\n        email: \"alice@view.com\", password: \"view123\", role: \"user\", wallet: 600, \n        advertiserWallet: 0, viewedAds: [], phone: \"+256712345678\", sponsorCode: \"\",\n        country: \"Kenya\", gender: \"Female\", ageGroup: \"18-24\", walletStatus: \"Active\", accountStatus: \"active\"\n      });\n      if (ads.length === 0) {\n        ads.push({ id: 201, advertiserId: 1001, title: \"Cool Sneakers\", type: \"video\", mediaUrl: \"https:\/\/www.w3schools.com\/html\/mov_bbb.mp4\", dailyCostUGX: 2000, specialInstructions: \"Upload receipt\", activeUntil: Date.now() + 86400000, isActive: true });\n      }\n    }\n    saveAll();\n  }\n\n  function saveAll() {\n    localStorage.setItem('adase_users', JSON.stringify(users));\n    localStorage.setItem('adase_ads', JSON.stringify(ads));\n    localStorage.setItem('adase_proofs', JSON.stringify(proofs));\n    localStorage.setItem('adase_platformRevenue', platformRevenue);\n    localStorage.setItem('adase_smm_orders', JSON.stringify(smmOrders));\n    localStorage.setItem('adase_withdraw_requests', JSON.stringify(withdrawRequests));\n    localStorage.setItem('adase_contacts', JSON.stringify(contacts));\n  }\n\n  function getCurrentUser() {\n    if (!sessions.currentUserId) return null;\n    return users.find(u => u.id === sessions.currentUserId);\n  }\n\n  function updatePlatformRevenue(amountChange) {\n    platformRevenue += amountChange;\n    if (platformRevenue < 0) platformRevenue = 0;\n    localStorage.setItem('adase_platformRevenue', platformRevenue);\n  }\n\n  function renderApp() {\n    if (!sessions.currentUserId) renderAuthScreen();\n    else {\n      const user = getCurrentUser();\n      if (!user || user.accountStatus === 'suspended' || user.accountStatus === 'banned') {\n        sessions.currentUserId = null;\n        alert(\"Your account is suspended or banned. Contact admin.\");\n        renderAuthScreen();\n        return;\n      }\n      if (user.role === 'advertiser') renderAdvertiserDashboard(user);\n      else if (user.role === 'user') renderUserDashboard(user);\n      else if (user.role === 'admin') renderAdminPanel(user);\n      else renderAuthScreen();\n    }\n    renderGlobalNav();\n  }\n\n  function renderGlobalNav() {\n    const area = document.getElementById('globalUserArea');\n    if (!sessions.currentUserId) {\n      area.innerHTML = `<button class=\"btn-sm\" id=\"showLoginBtn\">Login<\/button>\n                        <button class=\"btn-sm btn-primary\" id=\"showRegisterBtn\">Register<\/button>`;\n      document.getElementById('showLoginBtn')?.addEventListener('click', () => showLoginForm());\n      document.getElementById('showRegisterBtn')?.addEventListener('click', () => showRegisterForm());\n    } else {\n      const user = getCurrentUser();\n      area.innerHTML = `<span style=\"font-weight:500;\">\ud83d\udc4b ${user.name} (${user.role})<\/span>\n                        <button class=\"btn-sm\" id=\"logoutBtn\">Logout<\/button>`;\n      document.getElementById('logoutBtn')?.addEventListener('click', () => {\n        sessions.currentUserId = null;\n        renderApp();\n      });\n    }\n  }\n\n  function showLoginForm() {\n    const panel = document.getElementById('dynamicPanel');\n    panel.innerHTML = `\n      <div class=\"card\" style=\"max-width:500px; margin:auto;\">\n        <h2>Login to Adase<\/h2>\n        <label>Email<\/label><input type=\"email\" id=\"loginEmail\" placeholder=\"email\">\n        <label>Password<\/label><input type=\"password\" id=\"loginPass\">\n        <button class=\"btn-primary\" id=\"doLoginBtn\" style=\"width:100%\">Login<\/button>\n        <p style=\"margin-top:12px;\">Demo: advertiser@demo.com \/ adv123 | viewer: alice@view.com \/ view123<\/p>\n      <\/div>`;\n    document.getElementById('doLoginBtn')?.addEventListener('click', () => {\n      const email = document.getElementById('loginEmail').value;\n      const pwd = document.getElementById('loginPass').value;\n      const user = users.find(u => u.email === email && u.password === pwd);\n      if (user && user.accountStatus === 'active') {\n        sessions.currentUserId = user.id;\n        renderApp();\n      } else if (user && (user.accountStatus === 'suspended' || user.accountStatus === 'banned')) {\n        alert(\"Account suspended or banned. Contact admin.\");\n      } else alert(\"Invalid credentials\");\n    });\n  }\n\n  \/\/ Registration form (same as before, simplified)\n  function showRegisterForm() {\n    const panel = document.getElementById('dynamicPanel');\n    panel.innerHTML = `\n      <div class=\"card\" style=\"max-width:700px; margin:auto;\">\n        <h2>Create Account<\/h2>\n        <label>Role<\/label>\n        <select id=\"regRole\"><option value=\"user\">Viewer (earn points)<\/option><option value=\"advertiser\">Advertiser (run ads + SMM)<\/option><\/select>\n        <div id=\"viewerExtraFields\" style=\"display:none;\">\n          <div class=\"form-row\" style=\"display:flex; gap:16px;\"><div><label>First Name *<\/label><input id=\"regFirstName\"><\/div><div><label>Last Name *<\/label><input id=\"regLastName\"><\/div><\/div>\n          <label>Phone Number *<\/label><input id=\"regPhone\" type=\"tel\">\n          <label>Email *<\/label><input id=\"regEmail\" type=\"email\">\n          <label>Sponsor Code<\/label><input id=\"regSponsorCode\" placeholder=\"Optional\"><a href=\"https:\/\/cashchatbank.com\" target=\"_blank\" style=\"font-size:12px; display:block;\">\ud83d\udd17 Apply for sponsor code<\/a>\n          <div style=\"display:flex; gap:16px;\"><div><label>Country<\/label><input id=\"regCountry\"><\/div><div><label>Gender<\/label><select id=\"regGender\"><option>Male<\/option><option>Female<\/option><option>Other<\/option><\/select><\/div><div><label>Age Group<\/label><select id=\"regAgeGroup\"><option>18-24<\/option><option>25-34<\/option><option>35-44<\/option><option>45+<\/option><\/select><\/div><\/div>\n          <label>Wallet Status<\/label><select id=\"regWalletStatus\"><option value=\"Not Active\">Not Active<\/option><option value=\"Active\">Active<\/option><\/select>\n        <\/div>\n        <div id=\"advertiserSimpleFields\" style=\"display:block;\"><label>Full Name *<\/label><input id=\"regNameSimple\"><label>Email *<\/label><input id=\"regEmailSimple\"><\/div>\n        <label>Password *<\/label><input id=\"regPass\" type=\"password\">\n        <button class=\"btn-primary\" id=\"doRegBtn\" style=\"width:100%; margin-top:16px;\">Sign up<\/button>\n      <\/div>`;\n    const roleSelect = document.getElementById('regRole');\n    const viewerDiv = document.getElementById('viewerExtraFields');\n    const advertiserDiv = document.getElementById('advertiserSimpleFields');\n    roleSelect.addEventListener('change', () => {\n      const isViewer = roleSelect.value === 'user';\n      viewerDiv.style.display = isViewer ? 'block' : 'none';\n      advertiserDiv.style.display = isViewer ? 'none' : 'block';\n    });\n    roleSelect.dispatchEvent(new Event('change'));\n    document.getElementById('doRegBtn')?.addEventListener('click', () => {\n      const role = roleSelect.value;\n      const password = document.getElementById('regPass').value;\n      if (!password) return alert(\"Password required\");\n      if (role === 'user') {\n        const firstName = document.getElementById('regFirstName').value.trim();\n        const lastName = document.getElementById('regLastName').value.trim();\n        const phone = document.getElementById('regPhone').value.trim();\n        const email = document.getElementById('regEmail').value.trim();\n        const sponsorCode = document.getElementById('regSponsorCode').value.trim();\n        const country = document.getElementById('regCountry').value.trim();\n        const gender = document.getElementById('regGender').value;\n        const ageGroup = document.getElementById('regAgeGroup').value;\n        const walletStatus = document.getElementById('regWalletStatus').value;\n        if (!firstName || !lastName || !phone || !email) return alert(\"All fields required\");\n        if (users.find(u => u.email === email)) return alert(\"Email exists\");\n        const newId = users.length + 1000;\n        users.push({ id: newId, name: firstName+\" \"+lastName, firstName, lastName, email, password, role: 'user', wallet: 0, advertiserWallet: 0, viewedAds: [], phone, sponsorCode, country, gender, ageGroup, walletStatus, accountStatus: 'active' });\n        saveAll();\n        alert(\"Registration successful! Login.\");\n        showLoginForm();\n      } else {\n        const fullName = document.getElementById('regNameSimple').value.trim();\n        const email = document.getElementById('regEmailSimple').value.trim();\n        if (!fullName || !email) return alert(\"Fill all fields\");\n        if (users.find(u => u.email === email)) return alert(\"Email exists\");\n        const newId = users.length + 1000;\n        users.push({ id: newId, name: fullName, firstName: fullName.split(' ')[0], lastName: fullName.split(' ')[1]||\"\", email, password, role: 'advertiser', wallet: 0, advertiserWallet: 0, viewedAds: [], phone: \"\", sponsorCode: \"\", country: \"\", gender: \"\", ageGroup: \"\", walletStatus: \"Active\", accountStatus: 'active' });\n        saveAll();\n        alert(\"Advertiser account created!\");\n        showLoginForm();\n      }\n    });\n  }\n\n  function renderAuthScreen() {\n    const panel = document.getElementById('dynamicPanel');\n    panel.innerHTML = `<div class=\"card\" style=\"text-align:center;\"><h3>Welcome to Adase Serve<\/h3><p>Earn points by watching ads, or run campaigns & buy SMM services.<\/p><div style=\"margin-top:20px;\"><button class=\"btn-primary\" id=\"gotoLoginBtn\">Login \/ Register<\/button><\/div><\/div>`;\n    document.getElementById('gotoLoginBtn')?.addEventListener('click', () => showLoginForm());\n  }\n\n  \/\/ ----- USER DASHBOARD (with withdrawal request instead of instant) -----\n  function renderUserDashboard(user) {\n    if (user.walletStatus !== \"Active\") {\n      const panel = document.getElementById('dynamicPanel');\n      panel.innerHTML = `<div class=\"card\"><h3>\u26a0\ufe0f Wallet Not Active<\/h3><p>Your wallet is ${user.walletStatus}. Contact admin to activate.<\/p><\/div>`;\n      return;\n    }\n    const activeAds = ads.filter(ad => ad.isActive && ad.activeUntil > Date.now());\n    const points = Math.floor(user.wallet \/ 3);\n    const pendingRequests = withdrawRequests.filter(r => r.userId === user.id && r.status === 'pending').length;\n    const panel = document.getElementById('dynamicPanel');\n    panel.innerHTML = `\n      <div class=\"flex-between\"><h2>\ud83c\udfac Watch & Earn<\/h2><span class=\"badge\">\ud83d\udcb0 Earnings: ${user.wallet.toFixed(0)} UGX (${points} points)<\/span><\/div>\n      <div class=\"card\"><div class=\"flex-between\"><span>\u2b50 1 point = UGX 3<\/span><button id=\"requestWithdrawBtn\" class=\"btn-primary\" ${user.wallet < 1500 ? 'disabled' : ''}>Request Withdrawal (500 points = 1500 UGX)<\/button><\/div>${pendingRequests > 0 ? `<p class=\"badge\">You have ${pendingRequests} pending withdrawal request(s).<\/p>` : ''}<\/div>\n      <div class=\"card\"><h3>\ud83d\udcfa Active Ads<\/h3><div id=\"viewerAdsList\"><\/div><\/div>\n      <div class=\"card\"><h3>\ud83d\udce4 My proofs<\/h3><div id=\"viewerProofHistory\"><\/div><\/div>\n    `;\n    document.getElementById('requestWithdrawBtn')?.addEventListener('click', () => {\n      if (user.wallet >= 1500) {\n        withdrawRequests.push({ id: Date.now(), userId: user.id, amount: 1500, status: 'pending', date: new Date().toISOString() });\n        saveAll();\n        alert(\"Withdrawal request submitted. Admin will approve.\");\n        renderUserDashboard(getCurrentUser());\n      } else alert(\"Insufficient balance\");\n    });\n    const adsContainer = document.getElementById('viewerAdsList');\n    if (activeAds.length === 0) adsContainer.innerHTML = \"<p>No active ads.<\/p>\";\n    else {\n      adsContainer.innerHTML = activeAds.map(ad => {\n        const viewed = user.viewedAds?.includes(ad.id);\n        return `<div style=\"border:1px solid #eef; border-radius:24px; padding:16px; margin-bottom:18px;\"><h4>${ad.title}<\/h4><div>${ad.type==='video'?`<video controls src=\"${ad.mediaUrl}\" style=\"max-width:100%\"><\/video>`:ad.type==='audio'?`<audio controls src=\"${ad.mediaUrl}\"><\/audio>`:`<div><img decoding=\"async\" src=\"${ad.mediaUrl}\" style=\"max-width:100%; border-radius:12px;\"><\/div>`}<\/div>${ad.specialInstructions?`<p>\u26a0\ufe0f ${ad.specialInstructions}<\/p>`:''}${!viewed?`<button class=\"btn-sm btn-primary\" data-viewad=\"${ad.id}\">\u2705 Earn 3 UGX (1 point)<\/button>`:`<span class=\"badge\">\u2713 Claimed<\/span>`} ${ad.specialInstructions?`<button class=\"btn-sm btn-outline\" data-proofad=\"${ad.id}\">\ud83d\udcce Submit proof<\/button>`:''}<\/div>`;\n      }).join('');\n      document.querySelectorAll('[data-viewad]').forEach(btn => {\n        btn.addEventListener('click', (e) => {\n          const adId = parseInt(btn.getAttribute('data-viewad'));\n          const ad = ads.find(a => a.id === adId);\n          if (ad && !user.viewedAds.includes(adId)) {\n            user.viewedAds.push(adId);\n            user.wallet += 3;\n            const idx = users.findIndex(u => u.id === user.id);\n            users[idx].wallet = user.wallet;\n            users[idx].viewedAds = user.viewedAds;\n            saveAll();\n            alert(`+3 UGX earned for \"${ad.title}\"`);\n            renderUserDashboard(getCurrentUser());\n          } else alert(\"Already claimed.\");\n        });\n      });\n      document.querySelectorAll('[data-proofad]').forEach(btn => {\n        btn.addEventListener('click', (e) => {\n          const adId = parseInt(btn.getAttribute('data-proofad'));\n          const ad = ads.find(a => a.id === adId);\n          const proofText = prompt(`Proof for \"${ad.title}\":\\n${ad.specialInstructions || ''}\\nEnter details:`);\n          if (proofText?.trim()) {\n            proofs.push({ id: Date.now(), adId, userId: user.id, userName: user.name, proofText: proofText.trim(), timestamp: Date.now() });\n            saveAll();\n            alert(\"Proof submitted!\");\n            renderUserDashboard(getCurrentUser());\n          }\n        });\n      });\n    }\n    const historyDiv = document.getElementById('viewerProofHistory');\n    const userProofs = proofs.filter(p => p.userId === user.id);\n    historyDiv.innerHTML = userProofs.length ? userProofs.map(p => `<div class=\"proof-item\">${p.proofText}<\/div>`).join('') : \"<p>No proofs sent.<\/p>\";\n  }\n\n  \/\/ ----- ADMIN PANEL (full management) -----\n  function renderAdminPanel(admin) {\n    const allUsers = users.filter(u => u.role !== 'admin');\n    const pendingWithdrawals = withdrawRequests.filter(r => r.status === 'pending');\n    const panel = document.getElementById('dynamicPanel');\n    panel.innerHTML = `\n      <div class=\"flex-between\"><h2>\ud83d\udee1\ufe0f Admin Console<\/h2><span class=\"badge\">Platform Balance: UGX ${platformRevenue.toFixed(0)}<\/span><\/div>\n      <div class=\"grid-2\">\n        <div class=\"card\"><h3>\ud83d\udc65 User Management<\/h3><div class=\"search-box\"><input type=\"text\" id=\"searchUser\" placeholder=\"Search by name\/email\"><button id=\"searchUserBtn\" class=\"btn-sm\">\ud83d\udd0d Search<\/button><\/div><div id=\"usersTableContainer\"><table id=\"usersTable\"><thead><tr><th>ID<\/th><th>Name<\/th><th>Email<\/th><th>Role<\/th><th>Status<\/th><th>Actions<\/th><\/tr><\/thead><tbody><\/tbody><\/table><\/div><\/div>\n        <div class=\"card\"><h3>\ud83d\udcb0 Withdrawal Requests<\/h3><div id=\"withdrawalsList\"><\/div><\/div>\n      <\/div>\n      <div class=\"card\"><h3>\ud83d\udcc1 Contacts Upload \/ Download<\/h3><input type=\"file\" id=\"contactsCsv\" accept=\".csv\"><button id=\"uploadContactsBtn\" class=\"btn-sm\">Upload CSV<\/button> <button id=\"downloadContactsExcel\" class=\"btn-sm\">Download Excel<\/button> <button id=\"downloadContactsPdf\" class=\"btn-sm\">Download PDF<\/button><div id=\"contactsPreview\" style=\"margin-top:16px;\"><\/div><\/div>\n      <div class=\"card\"><h3>\u2709\ufe0f Email Broadcast<\/h3><label>Subject<\/label><input id=\"emailSubject\"><label>Message<\/label><textarea id=\"emailMessage\" rows=\"3\"><\/textarea><button id=\"sendEmailBtn\" class=\"btn-primary\">Send to All Users<\/button><\/div>\n    `;\n    \/\/ Render user table with actions\n    function renderUsersTable(filter = \"\") {\n      const filtered = allUsers.filter(u => u.name.toLowerCase().includes(filter.toLowerCase()) || u.email.toLowerCase().includes(filter.toLowerCase()));\n      const tbody = document.querySelector('#usersTable tbody');\n      if (tbody) {\n        tbody.innerHTML = filtered.map(u => `\n          <tr>\n            <td>${u.id}<\/td><td>${u.name}<\/td><td>${u.email}<\/td><td>${u.role}<\/td>\n            <td><span class=\"badge\" style=\"background:${u.accountStatus==='active'?'#d1fae5':'#fee2e2'}\">${u.accountStatus}<\/span><\/td>\n            <td>\n              <button class=\"btn-sm\" data-action=\"edit\" data-id=\"${u.id}\">\u270f\ufe0f Edit<\/button>\n              ${u.accountStatus === 'active' ? `<button class=\"btn-sm btn-warning\" data-action=\"suspend\" data-id=\"${u.id}\">Suspend<\/button>` : `<button class=\"btn-sm\" data-action=\"unsuspend\" data-id=\"${u.id}\">Unsuspend<\/button>`}\n              ${u.accountStatus !== 'banned' ? `<button class=\"btn-sm btn-danger\" data-action=\"ban\" data-id=\"${u.id}\">Ban<\/button>` : `<button class=\"btn-sm\" data-action=\"restore\" data-id=\"${u.id}\">Restore<\/button>`}\n              <button class=\"btn-sm\" data-action=\"credit\" data-id=\"${u.id}\">\ud83d\udcb0 Top Up<\/button>\n            <\/td>\n          <\/tr>\n        `).join('');\n        \/\/ Attach event listeners\n        document.querySelectorAll('[data-action]').forEach(btn => {\n          btn.addEventListener('click', (e) => {\n            const action = btn.getAttribute('data-action');\n            const userId = parseInt(btn.getAttribute('data-id'));\n            const targetUser = users.find(u => u.id === userId);\n            if (!targetUser) return;\n            if (action === 'edit') openEditModal(targetUser);\n            else if (action === 'suspend') { targetUser.accountStatus = 'suspended'; saveAll(); renderUsersTable(filter); }\n            else if (action === 'unsuspend') { targetUser.accountStatus = 'active'; saveAll(); renderUsersTable(filter); }\n            else if (action === 'ban') { targetUser.accountStatus = 'banned'; saveAll(); renderUsersTable(filter); }\n            else if (action === 'restore') { targetUser.accountStatus = 'active'; saveAll(); renderUsersTable(filter); }\n            else if (action === 'credit') {\n              let amount = prompt(\"Enter amount (UGX) to add to user's earnings wallet:\", \"1000\");\n              if (amount && !isNaN(amount)) {\n                targetUser.wallet += parseFloat(amount);\n                saveAll();\n                alert(`Added ${amount} UGX to ${targetUser.name}'s wallet.`);\n                renderUsersTable(filter);\n              }\n            }\n          });\n        });\n      }\n    }\n    renderUsersTable();\n    document.getElementById('searchUserBtn')?.addEventListener('click', () => {\n      const term = document.getElementById('searchUser').value;\n      renderUsersTable(term);\n    });\n    \/\/ Withdrawals management\n    const withdrawalsDiv = document.getElementById('withdrawalsList');\n    function renderWithdrawals() {\n      if (pendingWithdrawals.length === 0) withdrawalsDiv.innerHTML = \"<p>No pending withdrawals.<\/p>\";\n      else {\n        withdrawalsDiv.innerHTML = pendingWithdrawals.map(w => {\n          const u = users.find(u => u.id === w.userId);\n          return `<div class=\"flex-between\" style=\"border-bottom:1px solid #eee; padding:8px;\"><span>${u?.name} (${u?.email}) - UGX ${w.amount}<\/span><div><button class=\"btn-sm btn-primary\" data-wid=\"${w.id}\" data-action=\"approve\">Approve<\/button> <button class=\"btn-sm btn-danger\" data-wid=\"${w.id}\" data-action=\"reject\">Reject<\/button><\/div><\/div>`;\n        }).join('');\n        document.querySelectorAll('[data-wid]').forEach(btn => {\n          btn.addEventListener('click', (e) => {\n            const wid = parseInt(btn.getAttribute('data-wid'));\n            const action = btn.getAttribute('data-action');\n            const req = withdrawRequests.find(r => r.id === wid);\n            if (!req) return;\n            const user = users.find(u => u.id === req.userId);\n            if (action === 'approve') {\n              if (user.wallet >= req.amount) {\n                user.wallet -= req.amount;\n                updatePlatformRevenue(-req.amount);\n                req.status = 'approved';\n                alert(`Withdrawal approved. ${req.amount} UGX deducted.`);\n              } else alert(\"User insufficient balance.\");\n            } else if (action === 'reject') {\n              req.status = 'rejected';\n              alert(\"Withdrawal rejected.\");\n            }\n            saveAll();\n            renderAdminPanel(admin);\n          });\n        });\n      }\n    }\n    renderWithdrawals();\n    \/\/ Contacts upload\/download\n    document.getElementById('uploadContactsBtn')?.addEventListener('click', () => {\n      const file = document.getElementById('contactsCsv').files[0];\n      if (!file) return alert(\"Select CSV\");\n      const reader = new FileReader();\n      reader.onload = function(e) {\n        const text = e.target.result;\n        const rows = text.split(\/\\r?\\n\/);\n        let newContacts = [];\n        for (let i=0; i<rows.length; i++) {\n          let line = rows[i].trim();\n          if (!line) continue;\n          let parts = line.split(',');\n          let name = parts[0]?.trim() || \"Unknown\";\n          let email = parts[1]?.trim() || \"\";\n          let phone = parts[2]?.trim() || \"\";\n          if (email) newContacts.push({ id: Date.now()+i, name, email, phone });\n        }\n        contacts.push(...newContacts);\n        saveAll();\n        alert(`Added ${newContacts.length} contacts.`);\n        showContactsPreview();\n      };\n      reader.readAsText(file);\n    });\n    function showContactsPreview() {\n      const previewDiv = document.getElementById('contactsPreview');\n      if (contacts.length === 0) previewDiv.innerHTML = \"<p>No contacts uploaded.<\/p>\";\n      else {\n        let html = `<table><thead><tr><th>Name<\/th><th>Email<\/th><th>Phone<\/th><\/tr><\/thead><tbody>`;\n        contacts.forEach(c => html += `<tr><td>${c.name}<\/td><td>${c.email}<\/td><td>${c.phone}<\/td><\/tr>`);\n        html += `<\/tbody><\/table>`;\n        previewDiv.innerHTML = html;\n      }\n    }\n    showContactsPreview();\n    document.getElementById('downloadContactsExcel')?.addEventListener('click', () => {\n      const ws = XLSX.utils.json_to_sheet(contacts.map(c=>({Name:c.name,Email:c.email,Phone:c.phone})));\n      const wb = XLSX.utils.book_new(); XLSX.utils.book_append_sheet(wb, ws, \"Contacts\"); XLSX.writeFile(wb, `contacts.xlsx`);\n    });\n    document.getElementById('downloadContactsPdf')?.addEventListener('click', () => {\n      const element = document.getElementById('contactsPreview');\n      if (!element || contacts.length === 0) return alert(\"No contacts\");\n      html2pdf().from(element).set({ margin: 0.5, filename: 'contacts.pdf', html2canvas: { scale: 2 } }).save();\n    });\n    \/\/ Email broadcast\n    document.getElementById('sendEmailBtn')?.addEventListener('click', () => {\n      const subj = document.getElementById('emailSubject').value;\n      const msg = document.getElementById('emailMessage').value;\n      if (!subj || !msg) return alert(\"Fill subject & message\");\n      allUsers.forEach(u => console.log(`\ud83d\udce7 To ${u.email}: ${subj} - ${msg.replace(\/{name}\/g, u.name)}`));\n      alert(`Email simulation sent to ${allUsers.length} users.`);\n    });\n  }\n\n  \/\/ Edit modal\n  function openEditModal(user) {\n    const modal = document.createElement('div');\n    modal.className = 'modal';\n    modal.style.display = 'flex';\n    modal.innerHTML = `<div class=\"modal-content\"><span class=\"close-modal\">&times;<\/span><h3>Edit User<\/h3>\n      <label>First Name<\/label><input id=\"editFirstName\" value=\"${user.firstName}\">\n      <label>Last Name<\/label><input id=\"editLastName\" value=\"${user.lastName}\">\n      <label>Email<\/label><input id=\"editEmail\" value=\"${user.email}\">\n      <label>Phone<\/label><input id=\"editPhone\" value=\"${user.phone || ''}\">\n      <label>Country<\/label><input id=\"editCountry\" value=\"${user.country || ''}\">\n      <label>Gender<\/label><select id=\"editGender\"><option ${user.gender==='Male'?'selected':''}>Male<\/option><option ${user.gender==='Female'?'selected':''}>Female<\/option><option ${user.gender==='Other'?'selected':''}>Other<\/option><\/select>\n      <label>Age Group<\/label><select id=\"editAgeGroup\"><option ${user.ageGroup==='18-24'?'selected':''}>18-24<\/option><option ${user.ageGroup==='25-34'?'selected':''}>25-34<\/option><option ${user.ageGroup==='35-44'?'selected':''}>35-44<\/option><option ${user.ageGroup==='45+'?'selected':''}>45+<\/option><\/select>\n      <label>Wallet Status<\/label><select id=\"editWalletStatus\"><option ${user.walletStatus==='Active'?'selected':''}>Active<\/option><option ${user.walletStatus==='Not Active'?'selected':''}>Not Active<\/option><\/select>\n      <button id=\"saveUserEdit\" class=\"btn-primary\">Save Changes<\/button>\n    <\/div>`;\n    document.body.appendChild(modal);\n    modal.querySelector('.close-modal').onclick = () => modal.remove();\n    modal.querySelector('#saveUserEdit').onclick = () => {\n      user.firstName = modal.querySelector('#editFirstName').value;\n      user.lastName = modal.querySelector('#editLastName').value;\n      user.name = user.firstName + \" \" + user.lastName;\n      user.email = modal.querySelector('#editEmail').value;\n      user.phone = modal.querySelector('#editPhone').value;\n      user.country = modal.querySelector('#editCountry').value;\n      user.gender = modal.querySelector('#editGender').value;\n      user.ageGroup = modal.querySelector('#editAgeGroup').value;\n      user.walletStatus = modal.querySelector('#editWalletStatus').value;\n      saveAll();\n      alert(\"User updated\");\n      modal.remove();\n      renderAdminPanel(getCurrentUser());\n    };\n  }\n\n  \/\/ ----- Advertiser Dashboard (simplified, same as before) -----\n  function renderAdvertiserDashboard(user) {\n    const myAds = ads.filter(ad => ad.advertiserId === user.id);\n    const panel = document.getElementById('dynamicPanel');\n    panel.innerHTML = `<div class=\"flex-between\"><h2>\ud83d\udce2 Advertiser Hub<\/h2><span class=\"badge\">\ud83d\udcb0 Wallet: ${user.advertiserWallet.toFixed(0)} UGX<\/span><\/div>\n      <div class=\"grid-2\"><div class=\"card\"><h3>\u2795 Create Ad<\/h3><input id=\"adTitle\" placeholder=\"Title\"><select id=\"adType\"><option>video<\/option><option>audio<\/option><option>banner<\/option><\/select><input id=\"adMedia\" placeholder=\"Media URL\"><textarea id=\"adInstructions\" placeholder=\"Instructions\"><\/textarea><select id=\"dailyCostSelect\"><option value=\"2000\">UGX 2,000<\/option><option value=\"3800\">$1 (\u22483800 UGX)<\/option><\/select><button id=\"createAdBtn\" class=\"btn-primary\">Create<\/button><\/div>\n      <div class=\"card\"><h3>\ud83d\udcb0 Fund Wallet<\/h3><input id=\"fundAmount\" value=\"10000\"><select id=\"payMethod\"><option>MTN<\/option><option>Airtel<\/option><option>Mpesa<\/option><option>Visa<\/option><option>PayPal<\/option><\/select><button id=\"fundWalletBtn\" class=\"btn-primary\">Add funds<\/button><hr><h4>My Ads<\/h4><div id=\"advertiserAdsList\"><\/div><\/div><\/div>\n      <div id=\"smmServicesContainer\" class=\"card\"><\/div>`;\n    document.getElementById('createAdBtn')?.addEventListener('click', () => {\n      const title = document.getElementById('adTitle').value;\n      const type = document.getElementById('adType').value;\n      const media = document.getElementById('adMedia').value;\n      const instructions = document.getElementById('adInstructions').value;\n      const cost = document.getElementById('dailyCostSelect').value === \"2000\" ? 2000 : 3800;\n      if (!title || !media) return alert(\"Required\");\n      ads.push({ id: Date.now(), advertiserId: user.id, title, type, mediaUrl: media, specialInstructions: instructions, dailyCostUGX: cost, activeUntil: null, isActive: false });\n      saveAll(); alert(\"Ad created\"); renderAdvertiserDashboard(user);\n    });\n    document.getElementById('fundWalletBtn')?.addEventListener('click', () => {\n      let amt = parseFloat(document.getElementById('fundAmount').value);\n      if (amt > 0) { user.advertiserWallet += amt; saveAll(); alert(\"Funds added\"); renderAdvertiserDashboard(user); }\n    });\n    const adsDiv = document.getElementById('advertiserAdsList');\n    adsDiv.innerHTML = myAds.map(ad => `<div><strong>${ad.title}<\/strong> - ${ad.isActive && ad.activeUntil>Date.now() ? 'Active' : 'Inactive'} <button class=\"btn-sm\" data-adid=\"${ad.id}\">Activate (${ad.dailyCostUGX} UGX)<\/button><\/div>`).join('');\n    document.querySelectorAll('[data-adid]').forEach(btn => {\n      btn.addEventListener('click', () => {\n        const adId = parseInt(btn.getAttribute('data-adid'));\n        const ad = ads.find(a => a.id === adId);\n        if (ad && user.advertiserWallet >= ad.dailyCostUGX) {\n          user.advertiserWallet -= ad.dailyCostUGX; ad.isActive = true; ad.activeUntil = Date.now()+86400000; updatePlatformRevenue(ad.dailyCostUGX); saveAll();\n          alert(\"Activated\"); renderAdvertiserDashboard(user);\n        } else alert(\"Insufficient balance\");\n      });\n    });\n    \/\/ SMM panel\n    const smmContainer = document.getElementById('smmServicesContainer');\n    if (smmContainer) {\n      const servicesData = [{ category:\"Uganda Services\", icon:\"fas fa-flag\", services:[{id:6004,name:\"TikTok Real Views\", rate:10326, min:1000, max:1000000}] }];\n      smmContainer.innerHTML = `<h3>SMM Services<\/h3><button class=\"btn-primary\" id=\"buySmmDemo\">Buy Demo (1000 Views = 10326 UGX)<\/button>`;\n      document.getElementById('buySmmDemo')?.addEventListener('click', () => {\n        if (user.advertiserWallet >= 10326) {\n          user.advertiserWallet -= 10326; updatePlatformRevenue(10326); saveAll();\n          alert(\"Order placed! 1000 TikTok Views purchased.\");\n          renderAdvertiserDashboard(user);\n        } else alert(\"Insufficient wallet\");\n      });\n    }\n  }\n\n  loadData();\n  renderApp();\n<\/script>\n<\/body>\n<\/html>\n","protected":false},"excerpt":{"rendered":"<p>Adase Ads Ltd \u00b7 Serie A Funding Round AdaseAds \u00b7 Serie A Funding \ud83d\udc9c Share Price: UGX 100,000 \ud83c\udf4b Participants: 0 \/ 77 \ud83d\udcca Total Shares Issued: 0 \ud83d\ude80 Why invest in Adase Ads Ltd Serie A? Adase Ads is building the next-generation AI-powered advertising network for African SMEs and global brands. With a proprietary [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"pagelayer_contact_templates":[],"_pagelayer_content":"","footnotes":""},"class_list":["post-77","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/cashchat.se\/dir\/wp-json\/wp\/v2\/pages\/77","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cashchat.se\/dir\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/cashchat.se\/dir\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/cashchat.se\/dir\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/cashchat.se\/dir\/wp-json\/wp\/v2\/comments?post=77"}],"version-history":[{"count":9,"href":"https:\/\/cashchat.se\/dir\/wp-json\/wp\/v2\/pages\/77\/revisions"}],"predecessor-version":[{"id":155,"href":"https:\/\/cashchat.se\/dir\/wp-json\/wp\/v2\/pages\/77\/revisions\/155"}],"wp:attachment":[{"href":"https:\/\/cashchat.se\/dir\/wp-json\/wp\/v2\/media?parent=77"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}