<html lang="en"><head>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>𝐖𝐈𝐍𝐆𝐎 𝟏 𝐌𝐈𝐍 𝐏𝐑𝐄𝐃𝐈𝐂𝐓𝐈𝐎𝐍</title>

    <script src="js/chart.js"></script>

    <style>

        body {

            font-family: 'Arial', sans-serif;

            background-color: #1201FD;

            margin: 0;

            padding: 0;

            color: #12E200;

        }

        h1, h2 {

            color: #FFFF00;

            text-align: center;

            margin-top: 20px;

        }

                .login-container {

            background: #ffffff;

            width: 100%;

            max-width: 400px;

            padding: 40px;

            border-radius: 10px;

            box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);

            text-align: center;

        }

        .login-container h1 {

            margin-bottom: 20px;

            font-size: 24px;

            color: #333;

        }

        .login-container .input-group {

            margin-bottom: 20px;

            position: relative;

        }

        .login-container .input-group input {

            width: 100%;

            padding: 15px 10px 15px 40px;

            border: 1px solid #ddd;

            border-radius: 5px;

            font-size: 16px;

            outline: none;

            transition: border-color 0.3s;

        }

        .login-container .input-group input:focus {

            border-color: #007bff;

        }

        .login-container .input-group i {

            position: absolute;

            left: 15px;

            top: 50%;

            transform: translateY(-50%);

            color: #aaa;

        }

        .login-container button {

            width: 100%;

            padding: 15px;

            border: none;

            border-radius: 5px;

            background-color: #007bff;

            color: white;

            font-size: 16px;

            cursor: pointer;

            transition: background-color 0.3s;

        }

        .login-container button:hover {

            background-color: #0056b3;

        }

        .main-content {

            font-family: 'Arial', sans-serif;

            background-color: #1201FD;

            margin: 0;

            padding: 0;

            color: #12E200;

            display: none; /* Hidden by default, will show after login */

        }

        .card {

            max-width: 90%;

            margin: 20px auto;

            padding: 20px;

            border-radius: 8px;

            background-color: #1201FD;

            box-shadow: 3 4px 8px rgba(0, 0, 0, 0.1);

        }

        #dataTable, #predictionHistoryTable {

            width: 100%;

            border-radius: 8px;

            overflow: hidden;

            box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);

            background-color: #FFFFFF;

        }

        table {

            width: 100%;

            border-collapse: collapse;

        }

        th, td {

            padding: 12px;

            text-align: center;

            border-bottom: 1px solid #FFFFFF;

        }

        th {

            background-color: #FFFF00;

            color: black;

            font-weight: bold;

        }

        td {

            background-color: #FFFFFF;

        }

        tr:nth-child(even) td {

            background-color: #FFFFFF;

        }

        tr:hover td {

            background-color: #FFFFFF;

        }

        #predictionChart {

            width: 100%;

            height: 250px; /* Fixed height */

            border: 2px solid #FFFF00;

            border-radius: 8px;

            background-color: #FFFFFF;

        }

        .pagination {

            display: flex;

            justify-content: center;

            margin-top: 20px;

        }

        .pagination button {

            padding: 10px 20px;

            margin: 0 5px;

            border: none;

            border-radius: 5px;

            background-color: #FFFF00;

            color: black;

            cursor: pointer;

            transition: background-color 0.3s ease, transform 0.2s ease;

        }

        .pagination button:hover {

            background-color: #FF0000;

            transform: scale(1.05);

        }

        .pagination button:disabled {

            background-color: #DDDDDD;

            cursor: not-allowed;

        }

        #timeRemaining {

            font-size: 24px;

            font-weight: bold;

            text-align: center;

        }

        #predictedNumber, #predictedPremium {

            font-size: 18px;

            text-align: center;

            margin: 10px 0;

        }

        .button-group {

            display: flex;

            justify-content: center;

            margin: 20px 0;

        }

        .button-group a {

            padding: 10px 20px;

            margin: 0 10px;

            border-radius: 5px;

            cursor: pointer;

            text-decoration: none; /* Remove underline */

            color: white; /* Text color */

            display: inline-block; /* Make anchor behave like a button */

            transition: background-color 0.3s ease, transform 0.2s ease;

        }

        #registerButton {

            background-color: #FFFF00; /* Blue for Register */

        }

        #telegramButton {

            background-color: #FF0000; /* Red for Telegram */

        }

        .button-group a:hover {

            transform: scale(1.05);

        }

        @media (max-width: 768px) {

            .card {

                padding: 15px;

            }

            th, td {

                padding: 8px;

                font-size: 14px;

            }

            #timeRemaining {

                font-size: 20px;

            }

            #predictedNumber, #predictedPremium {

                font-size: 16px;

            }

            #predictionChart {

                height: 200px; /* Adjusted height for mobile */

            }

        }

        @media (max-width: 480px) {

            th, td {

                font-size: 12px;

            }

            #timeRemaining {

                font-size: 18px;

            }

            #predictedNumber, #predictedPremium {

                font-size: 14px;

            }

            #predictionChart {

                height: 180px; /* Further adjustment for very small screens */

            }

        }

    </style>

</head>

<body>

    <!-- Login Form -->

    <div class="login-container" id="loginContainer">

        <p><b>&nbsp;<a href="http://t.me/SYAZTRUSTED">BUY KEY 🔑</a></b></p>

        <form onsubmit="event.preventDefault(); login();">

            <div class="input-group">

                <i class="fas fa-envelope"></i>

                <input type="email" id="email" placeholder="Email" required>

            </div>

            <div class="input-group">

                <i class="fas fa-lock"></i>

                <input type="password" id="password" placeholder="Password" required>

            </div>

            <button type="submit">Login</button>

        </form>

    </div>

    <!-- Main Content after login -->

    <div class="main-content" id="mainContent">

    <h1>𝐖𝐈𝐍𝐆𝐎 𝟏 𝐌𝐈𝐍 𝐏𝐑𝐄𝐃𝐈𝐂𝐓𝐈𝐎𝐍</h1>

    <div class="card">

        <h2>©ColorTraderPro™</h2>

        <p id="predictedNumber">Prediction :--</p>

        <p id="predictedPremium">Enjoy: --</p>

    </div>

    <div class="card">

        <h2>Timer</h2>

        <p id="timeRemaining">--:--</p>

        

    <div class="button-group">

        <a href= "t.me/ColorTraderPro" id="registerButton" target="_blank">Register</a>

        <a href="https://t.me/ColorTraderPro" id="telegramButton" target="_blank">Telegram</a>

    </div>

    </div>

    <div class="card">

        <h2>Collected Data</h2>

        <table id="dataTable">

            <thead>

                <tr>

                    <th>Issue Number</th>

                    <th>Number</th>

                    <th>Colour</th>

                    <th>Premium</th>

                </tr>

            </thead>

            <tbody>

                <!-- Data rows will be inserted here -->

            </tbody>

        </table>

    </div>

    <div class="card">

        <h2>Prediction History</h2>

        <table id="predictionHistoryTable">

            <thead>

                <tr>

                    <th>Issue Number</th>

                    <th>Predicted Number</th>

                    <th>Actual Number</th>

                    <th>Result</th>

                </tr>

            </thead>

            <tbody></tbody>

        </table>

        <div class="pagination">

            <button id="prevPage" disabled="">Previous</button>

            <button id="nextPage" disabled="">Next</button>

        </div>

    </div>

    <div class="card">

        <h2>Devloper  @ColorTraderPro™</h2>

        <div class="button-group">

        <a href="https://www.in978.com/#/register?invitationCode=885723619234" id="registerButton" target="_blank">Telegram Join Now!!</a>

    </div>

<script>

import { getAuth, onAuthStateChanged } from "firebase/auth";
import { getFirestore, doc, getDoc } from "firebase/firestore";

const auth = getAuth();
const db = getFirestore();

const fetchData = async () => {
  const user = auth.currentUser;

  if (!user) {
    alert("You must be logged in to view predictions!");
    return;
  }

  try {
    const userRef = doc(db, "users", user.uid); // `users` collection where user details are stored
    const userDoc = await getDoc(userRef);

    if (!userDoc.exists()) {
      alert("User is not registered! Contact support.");
      return;
    }

    // If user exists, fetch predictions or relevant data
    console.log("Fetching predictions...");
    // Call prediction logic or fetch relevant data here
  } catch (error) {
    console.error("Error fetching user data:", error);
  }
};

// Ensure user is authenticated
onAuthStateChanged(auth, (user) => {
  if (user) {
    console.log("User is authenticated:", user.email);
    fetchData();
  } else {
    console.log("No user authenticated. Redirecting to login...");
    // Redirect to login page or show error
  }
});


document.addEventListener('DOMContentLoaded', function() {

    const tableBody = document.querySelector('#dataTable tbody');

    const predictedNumberElement = document.getElementById('predictedNumber');

    const predictedPremiumElement = document.getElementById('predictedPremium');

    const timerElement = document.getElementById('timeRemaining');

    const historyTableBody = document.querySelector('#predictionHistoryTable tbody');

    const prevPageButton = document.getElementById('prevPage');

    const nextPageButton = document.getElementById('nextPage');

    let predictionHistory = JSON.parse(localStorage.getItem('predictionHistory')) || [];

    let lastPrediction = JSON.parse(localStorage.getItem('lastPrediction'));

    let currentPrediction = JSON.parse(localStorage.getItem('currentPrediction'));

    let currentPage = 0;

    const itemsPerPage = 10;

    let timerInterval;

    const fetchNoAverageEmerdList = () => {

        const requestData = {

            pageSize: 10,

            pageNo: 1,

            typeId: 1,

            language: 0,

            random: "ded40537a2ce416e96c00e5218f6859a",

            signature: "69306982EEEB19FA940D72EC93C62552",

            timestamp: Math.floor(Date.now() / 1000)

        };

        return fetch('https://api.bdg88zf.com/api/webapi/GetNoaverageEmerdList', {

            method: 'POST',

            headers: {

                'Content-Type': 'application/json;charset=UTF-8',

                'Accept': 'application/json, text/plain, */*'

            },

            body: JSON.stringify(requestData)

        })

        .then(response => response.json())

        .catch(error => console.error('Error fetching no average EMERD list data:', error));

    };

    const fetchGameIssue = () => {

        const requestData = {

            typeId: 1,

            language: 0,

            random: "f8dcb5c527814db68800e3946a2b60e8",

            signature: "08CF7FF3339ED58D4743F4B650FCBEA9",

            timestamp: Math.floor(Date.now() / 1000)

        };

        return fetch('https://api.bdg88zf.com/api/webapi/GetGameIssue', {

            method: 'POST',

            headers: {

                'Content-Type': 'application/json;charset=UTF-8',

                'Accept': 'application/json, text/plain, */*'

            },

            body: JSON.stringify(requestData)

        })

        .then(response => response.json())

        .catch(error => console.error('Error fetching game issue:', error));

    };
  
          const predictedNumber = (number) => {

        if (number >= 0 && number <= 0) return 'RED';

        

        if (number >= 1 && number <= 1) return 'GREEN';

      

        if (number >= 2 && number <= 2) return 'RED';

      

        if (number >= 3 && number <= 3) return 'GREEN';

      

        if (number >= 4 && number <= 4) return 'RED';

      

        if (number >= 5 && number <= 5) return 'GREEN';

      

        if (number >= 6 && number <= 6) return 'RED';

        

        if (number >= 7 && number <= 7) return 'GREEN';

      

        if (number >= 8 && number <= 8) return 'RED';

      

        if (number >= 9 && number <= 9) return 'GREEN';

        return 'Unknown';

    };

    const categorizeNumber = (number) => {




      
        if (number >= 0 && number <= 0) return 'GREEN & VIOLET';

        

        if (number >= 1 && number <= 1) return 'GREEN';

      

        if (number >= 2 && number <= 2) return 'RED';

      

        if (number >= 3 && number <= 3) return 'RED';

      

        if (number >= 4 && number <= 4) return 'GREEN';

      

        if (number >= 5 && number <= 5) return 'GREEN & VIOLET';

      

        if (number >= 6 && number <= 6) return 'RED';

        

        if (number >= 7 && number <= 7) return 'RED';

      

        if (number >= 8 && number <= 8) return 'GREEN';

      

        if (number >= 9 && number <= 9) return 'GREEN';



        return 'Unknown';

    };

    const generateRandomPrediction = () => {

        const randomNumber = Math.floor(Math.random() * 10);

        const randomCategory = categorizeNumber(randomNumber);

        return { number: randomNumber, category: randomCategory };

    };

    const updateDataAndPrediction = () => {

        fetchNoAverageEmerdList()

            .then(data => {

                const list = data.data.list;

                tableBody.innerHTML = '';

                list.forEach(item => {

                    const numberCategory = categorizeNumber(Number(item.number));

                    const row = document.createElement('tr');

                    row.innerHTML = `

                        <td>${item.issueNumber}</td>

                        <td>${item.number} (${numberCategory})</td>

                        <td>${item.colour}</td>

                        <td>${item.premium}</td>

                    `;

                    tableBody.appendChild(row);

                });

                const latestIssue = list[0].issueNumber;

                const latestActual = Number(list[0].number);

                const actualCategory = predictedNumber(latestActual);

                if (!lastPrediction || lastPrediction.issueNumber !== latestIssue) {

                    if (lastPrediction) {

                        const result = (lastPrediction.category === actualCategory) ? 'Win' : 'Loss';

                        predictionHistory.unshift({

                            issueNumber: latestIssue,

                            predictedNumber: lastPrediction.number,

                            actualNumber: latestActual,

                            result: result

                        });

                        localStorage.setItem('predictionHistory', JSON.stringify(predictionHistory));

                    }

                    currentPrediction = generateRandomPrediction();

                    currentPrediction.issueNumber = latestIssue;

                    localStorage.setItem('currentPrediction', JSON.stringify(currentPrediction));

                }

                predictedNumberElement.textContent = `Prediction: ${currentPrediction.number} (${currentPrediction.category})`;

                predictedPremiumElement.textContent = `:`;

                lastPrediction = {

                    issueNumber: latestIssue,

                    number: currentPrediction.number,

                    category: currentPrediction.category

                };

                localStorage.setItem('lastPrediction', JSON.stringify(lastPrediction));

                updatePredictionHistoryTable();

            })

            .catch(error => console.error('Error updating data and prediction:', error));

    };

    const updatePredictionHistoryTable = () => {

        historyTableBody.innerHTML = '';

        const start = currentPage * itemsPerPage;

        const end = start + itemsPerPage;

        const paginatedHistory = predictionHistory.slice(start, end);

        paginatedHistory.forEach(entry => {

            const row = document.createElement('tr');

            row.innerHTML = `

                <td>${entry.issueNumber}</td>

                <td>${entry.predictedNumber}</td>

                <td>${entry.actualNumber}</td>

                <td>${entry.result}</td>

            `;

            historyTableBody.appendChild(row);

        });

        prevPageButton.disabled = currentPage === 0;

        nextPageButton.disabled = end >= predictionHistory.length;

    };

    const updateTimer = () => {

        fetchGameIssue()

            .then(data => {

                const { endTime } = data.data;

                const endDate = new Date(endTime);

                const now = new Date();

                const remainingTimeMs = endDate - now;

                if (remainingTimeMs <= 0) {

                    timerElement.textContent = "Time Remaining: 00:00:00";

                    clearInterval(timerInterval);

                    updateDataAndPrediction();

                    updateTimer();

                } else {

                    const hours = String(Math.floor(remainingTimeMs / (1000 * 60 * 60))).padStart(2, '0');

                    const minutes = String(Math.floor((remainingTimeMs % (1000 * 60 * 60)) / (1000 * 60))).padStart(2, '0');

                    const seconds = String(Math.floor((remainingTimeMs % (1000 * 60)) / 1000)).padStart(2, '0');

                    timerElement.textContent = `Time Remaining: ${hours}:${minutes}:${seconds}`;

                }

            })

            .catch(error => console.error('Error fetching game issue for timer:', error));

    };

    // Pagination controls

    prevPageButton.addEventListener('click', () => {

        if (currentPage > 0) {

            currentPage--;

            updatePredictionHistoryTable();

        }

    });

    nextPageButton.addEventListener('click', () => {

        if ((currentPage + 1) * itemsPerPage < predictionHistory.length) {

            currentPage++;

            updatePredictionHistoryTable();

        }

    });

    // Initialize data and start the timer

    updateDataAndPrediction();

    updateTimer();

    timerInterval = setInterval(() => {

        updateTimer();

        updateDataAndPrediction();

    }, 1000); // Update every 10 seconds

    // Load initial prediction history table

    updatePredictionHistoryTable();

});

</script>

    <!-- Firebase Integration and Login Handling -->

    <script src="https://www.gstatic.com/firebasejs/8.10.1/firebase-app.js"></script>

    <script src="https://www.gstatic.com/firebasejs/8.10.1/firebase-auth.js"></script>

    <script>

        // Firebase configuration

        var firebaseConfig = {

            apiKey: "AIzaSyBL1KlVtPLoGgkhsH1QnkrEkV_s9x7-Mws",

            authDomain: "colortraderpro-panel.firebaseapp.com",

            databaseURL: "https://colortraderpro-panel-default-rtdb.firebaseio.com",

            projectId: "colortraderpro-panel",

            storageBucket: "colortraderpro-panel.firebasestorage.app",

            messagingSenderId: "612198052901",

            appId: "1:612198052901:android:26b24e8056ca9f26953bcc"

        };

        // Initialize Firebase

        firebase.initializeApp(firebaseConfig);

        // Login function

        function login() {

            var email = document.getElementById("email").value;

            var password = document.getElementById("password").value;

            firebase.auth().signInWithEmailAndPassword(email, password)

                .then((userCredential) => {

                    // Successful login

                    console.log("Login successful");

                    document.getElementById("loginContainer").style.display = "none";

                    document.getElementById("mainContent").style.display = "block";

                })

                .catch((error) => {

                    var errorCode = error.code;

                    var errorMessage = error.message;

                    alert("Login failed: " + errorMessage);

                });

        }

    </script>
    
    <script>
    
    const axios = require("axios");

const checkVPN = async (ip) => {
  try {
    const response = await axios.get(`https://ipqualityscore.com/api/json/ip/YOUR_API_KEY/${ip}`);
    const data = response.data;

    if (data.proxy || data.vpn || data.tor) {
      return true; // VPN/Proxy detected
    }
    return false;
  } catch (error) {
    console.error("Error checking VPN/Proxy:", error);
    return false;
  }
};


import { fetch } from "react-native-ssl-pinning";

fetch("https://your-api.com/endpoint", {
  method: "GET",
  sslPinning: {
    certs: ["your_cert"], // Certificate file in PEM format
  },
})
  .then((response) => {
    console.log(response);
  })
  .catch((error) => {
    console.error("SSL Pinning Failed", error);
  });
  
  
  exports.secureEndpoint = (req, res) => {
  const apiKey = req.headers["x-api-key"];
  
  if (apiKey !== "YOUR_SECRET_KEY") {
    return res.status(403).send({ error: "Unauthorized request" });
  }

  // Proceed with secure logic
};


{

const blockedUserAgents = ["HTTPCanary", "Charles", "ProxyTool"];

app.use((req, res, next) => {
  const userAgent = req.headers["user-agent"];
  if (blockedUserAgents.some((agent) => userAgent.includes(agent))) {
    return res.status(403).send({ error: "Forbidden" });
  }
  next();
});


const rateLimit = require("express-rate-limit");

const limiter = rateLimit({
  windowMs: 15 * 60 * 1000, // 15 minutes
  max: 100, // Limit each IP to 100 requests per windowMs
});

app.use(limiter);


const functions = require("firebase-functions");
const admin = require("firebase-admin");
const axios = require("axios");

admin.initializeApp();

exports.securePrediction = functions.https.onRequest(async (req, res) => {
  const ip = req.headers["x-forwarded-for"] || req.connection.remoteAddress;

  // Check VPN/Proxy
  const isVPN = await checkVPN(ip);
  if (isVPN) {
    return res.status(403).send({ error: "VPN/Proxy detected. Access denied." });
  }

  // Check Authentication
  const user = req.headers["authorization"];
  if (!user) {
    return res.status(401).send({ error: "Unauthorized. Please log in." });
  }

  // Verify Token
  try {
    const decodedToken = await admin.auth().verifyIdToken(user);
    const uid = decodedToken.uid;

    // Fetch Predictions (Only for registered users)
    const userDoc = await admin.firestore().collection("users").doc(uid).get();
    if (!userDoc.exists) {
      return res.status(404).send({ error: "User not registered." });
    }

    return res.status(200).send({ prediction: "Your prediction data here." });
  } catch (error) {
    return res.status(401).send({ error: "Invalid token." });
  }
});

// VPN/Proxy Detection Function
const checkVPN = async (ip) => {
  try {
    const response = await axios.get(`https://ipqualityscore.com/api/json/ip/YOUR_API_KEY/${ip}`);
    const data = response.data;
    return data.proxy || data.vpn || data.tor;
  } catch (error) {
    console.error("Error checking VPN:", error);
    return false;
  }
};

    
    </script>

  

</div></body></html>