diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1935312 --- /dev/null +++ b/.gitignore @@ -0,0 +1,61 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# Virtual environment +venv/ +.env/ +.venv/ + +# Distribution / packaging +build/ +dist/ +*.egg-info/ + +# Logs and databases +*.log +*.sqlite3 + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +pytest_cache/ +junit.xml + +# MyPy +.mypy_cache/ + +# Jupyter Notebook checkpoints +.ipynb_checkpoints/ + +# VS Code settings +.vscode/ +.settings/ + +# macOS system files +.DS_Store + +# PyCharm +.idea/ +*.iml + +# pipenv, poetry, and pip compile artifacts +Pipfile +Pipfile.lock +poetry.lock +requirements.txt +requirements-dev.txt + +# Docker +*.dockerignore + +# Environment variables +.env +.env.local +.env.*.local diff --git a/Beyond-Baby-Blues - Hackthon Team 07.pdf b/Beyond-Baby-Blues - Hackthon Team 07.pdf new file mode 100644 index 0000000..e7c3500 Binary files /dev/null and b/Beyond-Baby-Blues - Hackthon Team 07.pdf differ diff --git a/Beyond-Baby-Blues - Hackthon Team 07.pptx b/Beyond-Baby-Blues - Hackthon Team 07.pptx new file mode 100644 index 0000000..a58f422 Binary files /dev/null and b/Beyond-Baby-Blues - Hackthon Team 07.pptx differ diff --git a/BeyondBabyBlues_Team7.mp4 b/BeyondBabyBlues_Team7.mp4 new file mode 100644 index 0000000..9b5a919 Binary files /dev/null and b/BeyondBabyBlues_Team7.mp4 differ diff --git a/DEVELOPER.md b/DEVELOPER.md new file mode 100644 index 0000000..8cc4f0c --- /dev/null +++ b/DEVELOPER.md @@ -0,0 +1,682 @@ +# BeyondBabyBlues - Developer Documentation + +## Table of Contents +1. [Project Overview](#project-overview) +2. [Architecture Overview](#architecture-overview) +3. [Technology Stack](#technology-stack) +4. [System Components](#system-components) +5. [Component Diagram](#component-diagram) +6. [Sequence Diagrams](#sequence-diagrams) +7. [API Documentation](#api-documentation) +8. [Database Schema](#database-schema) +9. [Human-in-the-Loop System](#human-in-the-loop-system) +10. [Security & HIPAA Compliance](#security--hipaa-compliance) +11. [Development Setup](#development-setup) +12. [Deployment Guide](#deployment-guide) +13. [Testing Strategy](#testing-strategy) +14. [Troubleshooting](#troubleshooting) + +## Project Overview + +BeyondBabyBlues is an AI-powered postpartum depression support system that combines artificial intelligence with human specialist intervention. The system provides immediate support through an AI chatbot and seamlessly escalates to human specialists when complex mental health situations require professional judgment. + +### Key Features +- **AI-Powered Support**: Mistral AI-based chatbot for immediate assistance +- **Human-in-the-Loop**: Intelligent escalation to specialist doctors +- **HIPAA Compliance**: Secure health record management and transfer +- **Specialist Matching**: Context-aware specialist recommendations +- **Crisis Intervention**: 24/7 emergency support system +- **Multi-Modal Interface**: Web-based chat interface with responsive design + +## Architecture Overview + +The system follows a microservices-inspired architecture with clear separation of concerns: + +```mermaid +graph TB + subgraph "Frontend Layer" + UI[Web Interface - chat.html] + CSS[Responsive CSS/Bootstrap] + JS[JavaScript Client] + end + + subgraph "API Layer" + API[Flask REST API] + AUTH[Authentication Layer] + CORS[CORS Handler] + end + + subgraph "AI/ML Layer" + MISTRAL[Mistral AI LLM] + EMBED[Mistral Embeddings] + RAG[RAG Engine] + PROMPT[Prompt Engineering] + end + + subgraph "Data Layer" + FAISS[FAISS Vector DB] + KB[Knowledge Base] + EMR[EMR System] + end + + subgraph "Human Loop" + SPECS[Specialist Doctors] + CRISIS[Crisis Team] + CONSULT[Consultation System] + end + + UI --> API + API --> MISTRAL + API --> RAG + RAG --> FAISS + RAG --> KB + API --> SPECS + MISTRAL --> EMBED + API --> EMR +``` + +## Technology Stack + +### Backend Technologies +- **Framework**: Flask 2.3+ +- **API Documentation**: Flask-RESTX (Swagger/OpenAPI) +- **AI/ML**: + - Mistral AI (mistral-large-latest) + - LangChain Community + - FAISS (Facebook AI Similarity Search) +- **Security**: CORS, Environment Variables, Token Authentication +- **Data Processing**: Pandas, NumPy +- **Logging**: Python logging, Colorama + +### Frontend Technologies +- **HTML5**: Semantic markup +- **CSS3**: Bootstrap 5.3+, Custom CSS variables +- **JavaScript**: jQuery 3.6+, ES6+ +- **Icons**: Font Awesome 6.6+ +- **Responsive Design**: Mobile-first approach + +### Infrastructure & DevOps +- **Environment**: Python 3.11+ +- **Virtual Environment**: venv +- **Package Management**: pip +- **Configuration**: .env files +- **Logging**: File-based logging (myapp.log) + +### Third-Party Services +- **Mistral AI**: LLM and Embeddings API +- **Email Systems**: SMTP for specialist notifications +- **EMR Integration**: HIPAA-compliant health record system + +## System Components + +### 1. Core Application Files + +``` +rag_medical-main/ +├── rag_medical_mistral.py # Main Flask application (Mistral-based) +├── rag_medical.py # Alternative Azure OpenAI version +├── faiss_lib_mistral.py # Mistral-specific library functions +├── faiss_lib.py # General FAISS operations +├── chat.html # Web interface +├── requirements_mistral.txt # Python dependencies (Mistral) +├── .env # Environment configuration +└── myapp.log # Application logs +``` + +### 2. Data & Knowledge Base + +``` +datasets/ +├── BeyondBabyBlues.txt # Company & specialist information +├── pregnancy.txt # Medical knowledge base +└── post-natal.csv # Postpartum care data + +medical_faiss_index_mistral/ +├── index.faiss # Vector embeddings index +└── index.pkl # Metadata storage +``` + +### 3. Documentation + +``` +├── README_MISTRAL.md # Mistral implementation guide +├── MIGRATION_GUIDE.md # Migration instructions +├── DEVELOPER.md # This file +└── test_mistral.py # Test scripts +``` + +## Component Diagram + +```mermaid +graph TB + subgraph "Web Browser" + HTML[chat.html] + CSS[Bootstrap CSS] + JS[jQuery JavaScript] + end + + subgraph "Flask Application" + APP[Flask App] + API[REST API Endpoints] + AUTH[Token Authentication] + PROMPT[Prompt Templates] + CONSULT[Consultation Logic] + end + + subgraph "AI Processing" + LLM[Mistral LLM] + EMB[Mistral Embeddings] + RAG[RAG Chain] + VECTOR[Vector Store] + end + + subgraph "Data Sources" + KB1[BeyondBabyBlues.txt] + KB2[pregnancy.txt] + KB3[post-natal.csv] + FAISS_DB[(FAISS Index)] + end + + subgraph "Human Specialists" + DOC1[Dr. Rachel Chen
Depression & Anxiety] + DOC2[Dr. Priya Sharma
Medications & Bipolar] + DOC3[Dr. Michael Rodriguez
Trauma & PTSD] + DOC4[Dr. Jennifer Thompson
High-Risk Pregnancy] + DOC5[Dr. Amanda Foster
Family Therapy] + DOC6[Sarah Mitchell
Anxiety & OCD] + DOC7[Dr. Robert Kim
Psychological Testing] + DOC8[Dr. Lisa Park
Crisis Emergency 24/7] + end + + HTML --> API + JS --> API + API --> LLM + API --> RAG + RAG --> VECTOR + EMB --> VECTOR + KB1 --> VECTOR + KB2 --> VECTOR + KB3 --> VECTOR + CONSULT --> DOC1 + CONSULT --> DOC2 + CONSULT --> DOC3 + CONSULT --> DOC4 + CONSULT --> DOC5 + CONSULT --> DOC6 + CONSULT --> DOC7 + CONSULT --> DOC8 +``` + +## Sequence Diagrams + +### 1. Standard AI Interaction Flow + +```mermaid +sequenceDiagram + participant User + participant ChatUI + participant FlaskAPI + participant MistralAI + participant VectorDB + participant KnowledgeBase + + User->>ChatUI: Enter message + ChatUI->>FlaskAPI: POST /query {message} + FlaskAPI->>VectorDB: Search similar content + VectorDB->>KnowledgeBase: Retrieve relevant docs + KnowledgeBase-->>VectorDB: Return documents + VectorDB-->>FlaskAPI: Similar content + FlaskAPI->>MistralAI: Generate response with context + MistralAI-->>FlaskAPI: AI response + FlaskAPI->>FlaskAPI: Analyze consultation need + FlaskAPI-->>ChatUI: JSON response with content + ChatUI-->>User: Display AI response +``` + +### 2. Human-in-the-Loop Escalation Flow + +```mermaid +sequenceDiagram + participant User + participant ChatUI + participant FlaskAPI + participant MistralAI + participant AnalysisEngine + participant SpecialistDB + participant EMRSystem + participant Specialist + + User->>ChatUI: Describe mental health concern + ChatUI->>FlaskAPI: POST /query {concern} + FlaskAPI->>MistralAI: Process with specialist detection + MistralAI-->>FlaskAPI: Response with specialist trigger + FlaskAPI->>AnalysisEngine: analyze_consultation_need() + AnalysisEngine-->>FlaskAPI: {needed: true, type: "depression", specialist: "Dr. Chen"} + FlaskAPI-->>ChatUI: JSON with consultation_needed=true + ChatUI->>ChatUI: Generate specialist buttons + User->>ChatUI: Click specialist button + ChatUI->>FlaskAPI: Request specialist contact + FlaskAPI->>SpecialistDB: Get specialist details + SpecialistDB-->>FlaskAPI: Contact information + FlaskAPI->>EMRSystem: Prepare secure health record transfer + EMRSystem-->>FlaskAPI: Transfer confirmation + FlaskAPI-->>ChatUI: Specialist details + EMR info + ChatUI-->>User: Display consultation options + User->>Specialist: Direct contact via provided info +``` + +### 3. Crisis Intervention Flow + +```mermaid +sequenceDiagram + participant User + participant ChatUI + participant FlaskAPI + participant MistralAI + participant CrisisDetection + participant EmergencySystem + participant CrisisSpecialist + + User->>ChatUI: Express suicidal thoughts + ChatUI->>FlaskAPI: POST /query {crisis_content} + FlaskAPI->>MistralAI: Process with crisis prompts + MistralAI-->>FlaskAPI: Crisis response with Dr. Lisa Park trigger + FlaskAPI->>CrisisDetection: Detect crisis keywords + CrisisDetection-->>FlaskAPI: {crisis: true, urgency: "immediate"} + FlaskAPI->>EmergencySystem: Alert crisis team + FlaskAPI-->>ChatUI: Crisis response + immediate specialist button + ChatUI-->>User: Crisis support message + Dr. Lisa Park contact + User->>CrisisSpecialist: Immediate contact (123) 456-7999 + CrisisSpecialist-->>User: Professional crisis intervention +``` + +## API Documentation + +### Base URL +``` +http://localhost:5000 +``` + +### Authentication +Currently uses token-based authentication (commented out in development): +``` +Authorization: 111-1111-11111 +``` + +### Endpoints + +#### POST /query +Execute RAG query with specialist consultation detection. + +**Request:** +```json +{ + "query": "I'm feeling really depressed after having my baby" +} +``` + +**Response:** +```json +{ + "role": "assistant", + "content": "", + "sources": ["source1", "source2"], + "consultation_needed": true, + "consultation_type": "depression", + "recommended_specialist": "Dr. Rachel Chen - Depression & Anxiety" +} +``` + +**Status Codes:** +- `200`: Success +- `403`: Invalid token (when authentication enabled) +- `500`: Server error + +#### GET /swagger +Interactive API documentation via Swagger UI. + +### Response Format + +All API responses follow this structure: +```json +{ + "role": "assistant", + "content": "HTML formatted response content", + "sources": ["array of source references"], + "consultation_needed": boolean, + "consultation_type": "crisis|depression|anxiety|trauma|medication|high_risk|family|general", + "recommended_specialist": "specialist name and specialization" +} +``` + +## Database Schema + +### FAISS Vector Database Structure + +``` +medical_faiss_index_mistral/ +├── index.faiss # Vector embeddings (768-dimensional) +└── index.pkl # Metadata and document mappings +``` + +**Document Types Stored:** +- Company information (BeyondBabyBlues.txt) +- Medical knowledge (pregnancy.txt) +- Postpartum care data (post-natal.csv) + +**Embedding Model:** +- `mistral-embed` (768 dimensions) +- Batch processing with 500 document chunks per batch + +### Knowledge Base Structure + +#### BeyondBabyBlues.txt +``` +- Company overview and mission +- Services offered (7 main services) +- 8 specialist doctors with full contact details +- EMR system information +- HIPAA compliance details +- Contact information and working hours +``` + +#### pregnancy.txt +``` +- General pregnancy information +- Medical guidelines and advice +- Prenatal and postpartum care +``` + +#### post-natal.csv +``` +- Structured postpartum care data +- CSV format for easy data processing +- Medical recommendations and guidelines +``` + +## Human-in-the-Loop System + +### Specialist Database + +The system maintains detailed information about 8 specialists: + +| Specialist | Specialization | Phone | Email | Availability | +|------------|---------------|-------|-------|---------------| +| Dr. Rachel Chen | Depression & Anxiety | (123) 456-7891 | dr.chen@BeyondBabyBlues.com | Mon-Fri 9-6 | +| Dr. Priya Sharma | Medications & Bipolar | (123) 456-7892 | dr.sharma@BeyondBabyBlues.com | Tue-Sat 8-5 | +| Dr. Michael Rodriguez | Trauma & PTSD | (123) 456-7893 | dr.rodriguez@BeyondBabyBlues.com | Mon-Thu 10-7 | +| Dr. Jennifer Thompson | High-Risk Pregnancy | (123) 456-7894 | dr.thompson@BeyondBabyBlues.com | Mon-Fri 7-4 | +| Dr. Amanda Foster | Family Therapy | (123) 456-7895 | amanda.foster@BeyondBabyBlues.com | Various | +| Sarah Mitchell | Anxiety & OCD | (123) 456-7896 | sarah.mitchell@BeyondBabyBlues.com | Various | +| Dr. Robert Kim | Psychological Testing | (123) 456-7897 | dr.kim@BeyondBabyBlues.com | Various | +| Dr. Lisa Park | Crisis Emergency | (123) 456-7999 | crisis@BeyondBabyBlues.com | 24/7 | + +### Consultation Matching Logic + +```python +def analyze_consultation_need(response_content): + # Crisis situations → Dr. Lisa Park + # Depression/Mood → Dr. Rachel Chen or Dr. Priya Sharma + # Anxiety → Sarah Mitchell or Dr. Rachel Chen + # Trauma/PTSD → Dr. Michael Rodriguez + # Medications → Dr. Priya Sharma + # High-risk pregnancy → Dr. Jennifer Thompson + # Family issues → Dr. Amanda Foster + # Psychological testing → Dr. Robert Kim +``` + +### EMR Integration + +**BeyondBabyBlues Secure Health Portal (BBSHP)** +- HIPAA-compliant health record system +- AES-256 encryption for data transfer +- Multi-factor authentication +- Complete audit trails +- Patient portal access: portal.BeyondBabyBlues.com + +## Security & HIPAA Compliance + +### Data Protection +- **Encryption**: AES-256 encryption for all health records +- **Access Control**: Role-based access with MFA +- **Audit Trails**: Complete logging of all EMR access +- **Session Management**: Automatic timeouts and secure sessions + +### HIPAA Compliance Features +- Patient consent management for specialist consultations +- Encrypted data transfer between systems +- Secure specialist portal access +- Privacy officer contact: privacy@BeyondBabyBlues.com +- Data retention policies (minimum 6 years) + +### Authentication & Authorization +```python +# Token-based authentication (currently disabled for development) +SYSTEM_TOKEN = "111-1111-11111" + +# CORS enabled for cross-origin requests +CORS(app) +``` + +## Development Setup + +### Prerequisites +- Python 3.11+ +- Virtual environment support +- Mistral AI API key + +### Installation Steps + +1. **Clone the repository:** +```bash +git clone +cd rag_medical-main +``` + +2. **Create virtual environment:** +```bash +python -m venv .venv +.venv\Scripts\Activate.ps1 # Windows PowerShell +# or +source .venv/bin/activate # Linux/Mac +``` + +3. **Install dependencies:** +```bash +pip install -r requirements_mistral.txt +``` + +4. **Environment configuration:** +Create `.env` file: +``` +MISTRAL_API_KEY=your_mistral_api_key_here +``` + +5. **Initialize FAISS index:** +```bash +python rag_medical_mistral.py +``` + +### Project Structure +``` +rag_medical-main/ +├── .venv/ # Virtual environment +├── datasets/ # Knowledge base files +│ ├── BeyondBabyBlues.txt +│ ├── pregnancy.txt +│ └── post-natal.csv +├── medical_faiss_index_mistral/ # Vector database +├── __pycache__/ # Python cache +├── rag_medical_mistral.py # Main application +├── faiss_lib_mistral.py # Library functions +├── chat.html # Frontend interface +├── requirements_mistral.txt # Dependencies +├── .env # Environment variables +├── myapp.log # Application logs +└── DEVELOPER.md # This documentation +``` + +## Deployment Guide + +### Local Development +```bash +# Start the application +python rag_medical_mistral.py + +# Access the application +# API: http://localhost:5000 +# Swagger: http://localhost:5000/swagger +# Chat Interface: Open chat.html in browser +``` + +### Production Deployment + +1. **Environment Setup:** +```bash +# Production environment variables +export MISTRAL_API_KEY=production_api_key +export FLASK_ENV=production +export FLASK_DEBUG=False +``` + +2. **WSGI Server (Gunicorn):** +```bash +pip install gunicorn +gunicorn -w 4 -b 0.0.0.0:5000 rag_medical_mistral:app +``` + +3. **Web Server (Nginx) Configuration:** +```nginx +server { + listen 80; + server_name your-domain.com; + + location / { + proxy_pass http://127.0.0.1:5000; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + } +} +``` + +### Docker Deployment (Optional) + +```dockerfile +FROM python:3.11-slim + +WORKDIR /app +COPY requirements_mistral.txt . +RUN pip install -r requirements_mistral.txt + +COPY . . +EXPOSE 5000 + +CMD ["python", "rag_medical_mistral.py"] +``` + +## Testing Strategy + +### Manual Testing +```bash +# Test the Mistral implementation +python test_mistral.py +``` + +### API Testing +```bash +# Test API endpoint with curl +curl -X POST http://localhost:5000/query \ + -H "Content-Type: application/json" \ + -d '{"query": "I am feeling depressed after childbirth"}' +``` + +### Frontend Testing +1. Open `chat.html` in browser +2. Test different conversation flows: + - General questions + - Depression-related queries + - Crisis situations + - Specialist consultations + +### Integration Testing +- Test AI response generation +- Verify specialist matching logic +- Validate FAISS vector search +- Check EMR integration flows + +## Troubleshooting + +### Common Issues + +#### 1. MISTRAL_API_KEY not found +```bash +# Solution: Check .env file exists and contains API key +echo "MISTRAL_API_KEY=your_key_here" > .env +``` + +#### 2. FAISS index not found +```bash +# Solution: Initialize the FAISS index +python rag_medical_mistral.py +# Look for "QA Chain initialized successfully!" message +``` + +#### 3. Import errors for langchain-community +```bash +# Solution: Install the correct packages +pip install langchain-community markdown +``` + +#### 4. Chat interface not connecting to API +```javascript +// Check API URL in chat.html +url: 'http://localhost:5000/query' +// Ensure Flask app is running on port 5000 +``` + +#### 5. Specialist buttons not showing +- Check LLM response for trigger phrases +- Verify `analyze_consultation_need()` function +- Ensure specialist database is synchronized + +### Debug Mode +Enable debug logging by modifying the Flask app: +```python +app.run(host='localhost', port=5000, debug=True) +``` + +### Log Analysis +Check application logs: +```bash +tail -f myapp.log +``` + +### Performance Monitoring +- Monitor response times in browser developer tools +- Check FAISS index size and search performance +- Monitor API endpoint response times + +## Contributing + +### Code Style +- Follow PEP 8 for Python code +- Use meaningful variable names +- Add docstrings for functions +- Comment complex logic + +### Git Workflow +1. Create feature branch +2. Make changes with descriptive commits +3. Test thoroughly +4. Submit pull request + +### Documentation Updates +- Update this DEVELOPER.md for architectural changes +- Update README_MISTRAL.md for user-facing changes +- Update API documentation for endpoint changes + +--- + +**Last Updated:** October 4, 2025 +**Version:** 1.0.0 +**Maintainer:** BeyondBabyBlues Development Team \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..ab104e3 --- /dev/null +++ b/README.md @@ -0,0 +1,323 @@ +# BeyondBabyBlues AI Agent - Mistral Implementation + +This is a Flask-based REST API that implements an intelligent **LangChain ReAct Agent** using Mistral AI for the BeyondBabyBlues pregnancy support system, specializing in **mental health and emotional well-being support** for expectant mothers with **automated appointment booking capabilities**. + +## 🚀 Features + +- **🤖 LangChain ReAct Agent**: Advanced reasoning and action planning with multi-tool integration +- **📅 Google Calendar Integration**: Automated appointment booking with OAuth2 authentication +- **🧠 Mental Health Specialization**: Focused support for prenatal depression, anxiety, and emotional distress +- **🚨 Crisis Intervention**: Immediate support pathways for mental health emergencies with specialist matching +- **⚡ Mistral AI Integration**: Uses Mistral's large language model and embedding model for compassionate responses +- **🔍 RAG Implementation**: Combines document retrieval with generative AI for accurate mental health guidance +- **📊 FAISS Vector Store**: Efficient similarity search for mental health and pregnancy support content +- **👨‍⚕️ Specialist Database**: 8+ specialized healthcare providers with intelligent matching +- **🏥 HIPAA Compliant**: Maintains strict patient confidentiality standards +- **🌐 REST API**: Easy integration with chatbots and mental health support applications +- **🛠️ Multi-Tool Architecture**: Knowledge search, specialist matching, and appointment booking tools + +## 📋 Prerequisites + +- Python 3.8+ +- Mistral AI API key +- Virtual environment (recommended) + +## 🛠️ Installation + +1. **Clone the repository** (if not already done) + ```bash + git clone + cd rag_medical-main + ``` + +2. **Create and activate virtual environment** + ```bash + python -m venv .venv + # On Windows + .venv\Scripts\activate + # On macOS/Linux + source .venv/bin/activate + ``` + +3. **Install dependencies** + ```bash + pip install -r requirements_mistral.txt + ``` + +4. **Set up environment variables** + ```bash + # Copy the example file + cp .env.mistral.example .env + + # Edit .env file and add your Mistral API key + MISTRAL_API_KEY=your_actual_mistral_api_key_here + ``` + +## 🔑 Getting Mistral API Key + +1. Visit [Mistral AI Console](https://console.mistral.ai/) +2. Sign up or log in to your account +3. Navigate to API Keys section +4. Create a new API key +5. Copy the key and add it to your `.env` file + +## 📁 Project Structure + +``` +rag_medical-main/ +├── rag_medical_mistral.py # Main Flask application (Mistral version) +├── faiss_lib_mistral.py # Mistral-specific library functions +├── rag_medical.py # Original Azure OpenAI version +├── faiss_lib.py # Original Azure OpenAI library +├── requirements_mistral.txt # Mistral implementation dependencies +├── .env.mistral.example # Environment variables template +├── datasets/ # Knowledge base files +│ ├── BeyondBabyBlues.txt +│ └── pregnancy.txt +└── medical_faiss_index_mistral/ # Mistral FAISS index (auto-generated) +``` + +## 🤖 Agent Architecture + +The system uses a **LangChain ReAct (Reasoning and Acting) Agent** that can: + +1. **Think**: Analyze user queries and determine appropriate actions +2. **Act**: Use tools to search knowledge base, match specialists, or book appointments +3. **Observe**: Process tool results and plan next actions +4. **Respond**: Provide comprehensive answers with appropriate escalation + +### Available Agent Tools + +- **`knowledge_search`**: Searches the medical knowledge base using FAISS vector similarity +- **`book_appointment`**: Books appointments with specialists via Google Calendar API +- **`get_specialists`**: Retrieves available specialists based on consultation type + +## 📅 Google Calendar Setup + +For appointment booking functionality, you need to configure Google Calendar API: + +1. **Follow the setup guide**: See `GOOGLE_CALENDAR_SETUP.md` for detailed instructions +2. **Verify setup**: Run `python verify_calendar_setup.py` to test the integration +3. **OAuth2 Authentication**: First run will prompt for Google account authorization + +## 🧪 Testing the Agent + +**Run comprehensive agent tests:** +```bash +python test_agent_mistral.py +``` + +This will test: +- Knowledge base search functionality +- Specialist consultation detection +- Appointment booking capabilities +- Agent tool usage and selection +- ReAct reasoning patterns + +## 🏃‍♂️ Running the Application + +1. **Start the Flask server** + ```bash + python rag_medical_mistral.py + ``` + +2. **Access the application** + - **Chat Interface**: `http://localhost:5000` (main web interface) + - **API Base URL**: `http://localhost:5000` + - **Swagger Documentation**: `http://localhost:5000/swagger` + +## 📡 API Usage + +### Query Endpoint + +**POST** `/query` + +**Request Body:** +```json +{ + "query": "What services does BeyondBabyBlues offer for pregnant women?" +} +``` + +**Response:** +```json +{ + "role": "assistant", + "content": "", + "sources": [ + { + "index": 1, + "page_content": "Source document content...", + "metadata": { + "source": "./datasets/BeyondBabyBlues.txt" + } + } + ] +} +``` + +### Example cURL Requests + +**General Support Query:** +```bash +curl -X POST "http://localhost:5000/query" \ + -H "Content-Type: application/json" \ + -d '{"query": "What services does BeyondBabyBlues offer?"}' +``` + +**Mental Health Support Query:** +```bash +curl -X POST "http://localhost:5000/query" \ + -H "Content-Type: application/json" \ + -d '{"query": "I am feeling very anxious about my pregnancy and having trouble sleeping. Can you help?"}' +``` + +**Crisis Support Query:** +```bash +curl -X POST "http://localhost:5000/query" \ + -H "Content-Type: application/json" \ + -d '{"query": "I am having thoughts of harming myself. I need help."}' +``` + +## 🧠 Mental Health Support Capabilities + +### Core Mental Health Features + +- **Prenatal Depression Support**: Recognition of symptoms including persistent sadness, mood swings, sleep issues, and loss of interest +- **Anxiety Disorder Assistance**: Help with excessive worry, panic attacks, and pregnancy-related fears +- **Crisis Intervention**: Immediate support pathways for severe distress and suicidal thoughts +- **Emotional Validation**: Non-judgmental support that normalizes pregnancy emotional challenges +- **Professional Referrals**: Connections to appropriate mental health services and support groups +- **Coping Strategies**: Practical emotional support resources and techniques + +### Mental Health Response Types + +1. **Supportive Responses**: Validation and emotional support for common pregnancy concerns +2. **Educational Guidance**: Information about prenatal mental health conditions +3. **Crisis Intervention**: Immediate safety resources and emergency contacts +4. **Professional Referrals**: Directing users to appropriate mental health professionals +5. **Resource Sharing**: Support groups, counseling services, and self-help tools + +### Safety & Crisis Support + +- **Crisis Hotline**: 988 (Suicide & Crisis Lifeline) +- **Emergency Services**: 911 for immediate danger +- **24/7 Support**: Available emotional support and guidance +- **Professional Network**: Direct connections to licensed mental health professionals + +## 🔧 Configuration + +### Mistral Models Used + +- **LLM Model**: `mistral-large-latest` - For generating compassionate, mental health-focused responses +- **Embedding Model**: `mistral-embed` - For document embeddings and mental health content retrieval + +### Mental Health Support Contact System + +The API provides comprehensive contact information for different types of support: + +- **Mental Health Crisis**: 988 (Suicide & Crisis Lifeline) or 911 +- **Counseling & Therapy**: counseling@BeyondBabyBlues.com +- **Support Groups**: support@BeyondBabyBlues.com +- **Medical Team**: medical@BeyondBabyBlues.com +- **General Information**: info@BeyondBabyBlues.com +- **24/7 Helpline**: Available for emotional support and guidance + +### Customizable Parameters + +In `faiss_lib_mistral.py`, you can adjust: + +- **Chunk Size**: Default 512 characters +- **Chunk Overlap**: Default 50 characters +- **Temperature**: Default 0.1 (for empathetic and consistent responses) +- **Max Tokens**: Default 1000 + +## 📊 Performance Considerations + +- **FAISS Index**: Automatically created and cached for faster subsequent queries +- **Batch Processing**: Handles large documents in batches of 500 chunks +- **Index Updates**: Smart indexing that only updates when source files change + +## 🔒 Security Features + +- Token-based authentication (configurable) +- CORS enabled for web integration +- Environment variable protection for API keys + +## 🐛 Troubleshooting + +### Common Issues + +1. **Missing API Key** + ``` + Error: MISTRAL_API_KEY not found in environment variables + ``` + Solution: Ensure your `.env` file contains the correct API key + +2. **Import Errors** + ``` + Import "langchain_mistralai" could not be resolved + ``` + Solution: Install requirements: `pip install -r requirements_mistral.txt` + +3. **FAISS Index Issues** + - Delete the `medical_faiss_index_mistral` folder to force recreation + - Check file permissions in the project directory + +4. **Mental Health Response Quality** + - Ensure your dataset includes comprehensive mental health information + - Check that the BeyondBabyBlues.txt file contains relevant mental health resources + - Verify the prompt template is properly formatted for empathetic responses + +### Debug Mode + +Enable debug logging by setting `LOG_LEVEL=DEBUG` in your `.env` file. + +### Mental Health Content Verification + +To ensure proper mental health support responses: +1. Verify the `datasets/BeyondBabyBlues.txt` file contains mental health resources +2. Test crisis intervention responses with sample queries +3. Check that contact information is current and accessible +4. Validate that professional referral pathways are working correctly + +## 🔄 Migration from Azure OpenAI + +The main differences between the Azure OpenAI and Mistral implementations: + +| Component | Azure OpenAI | Mistral | +|-----------|--------------|---------| +| LLM | `AzureChatOpenAI` | `ChatMistralAI` | +| Embeddings | `AzureOpenAIEmbeddings` | `MistralAIEmbeddings` | +| Authentication | Azure AD Token | API Key | +| Index Path | `medical_faiss_index` | `medical_faiss_index_mistral` | + +## 📝 License + +This project is licensed under the MIT License. + +## 🤝 Contributing + +1. Fork the repository +2. Create a feature branch +3. Make your changes +4. Test thoroughly +5. Submit a pull request + +## 📞 Support + +### Technical Support +For technical issues and questions: +- Create an issue in the repository +- Check the troubleshooting section above +- Review the Swagger documentation at `/swagger` + +### Mental Health Resources +If you or someone you know needs immediate mental health support: +- **Crisis Hotline**: 988 (Suicide & Crisis Lifeline) +- **Emergency**: 911 +- **National Pregnancy Support**: 1-800-672-2296 +- **Postpartum Support International**: 1-944-4-WARMLINE + +### Professional Mental Health Services +The BeyondBabyBlues API is designed to provide supportive information and connect users with professional help. It is not a substitute for professional mental health treatment, therapy, or medical care. Always consult with qualified healthcare providers for serious mental health concerns. \ No newline at end of file diff --git a/bg-hero.svg b/bg-hero.svg new file mode 100644 index 0000000..5323d37 --- /dev/null +++ b/bg-hero.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/chat.html b/chat.html new file mode 100644 index 0000000..5ef5fa2 --- /dev/null +++ b/chat.html @@ -0,0 +1,1030 @@ + + + + + + BeyondBabyBlues - Chatbot using RAG and FAISS + + + + + + + + + +
+
+
+
+ +

Welcome to BeyondBabyBlues

+

Specialized support for postpartum depression and mental health challenges. Our AI assistant connects you with human specialists when needed for comprehensive care.

+
+
+
+ BeyondBabyBlues +
+
+
+
+
+ + +
+
+
+
+
+ +
Postpartum Depression Support
+

AI-powered support with human specialist escalation for postpartum depression and mood disorders.

+
+
+
+
+
+
+ +
Human-in-the-Loop Care
+

Seamless transition to human specialists for complex mental health situations requiring professional judgment.

+
+
+
+
+
+
+ +
Crisis Intervention
+

Immediate connection to crisis specialists and 24/7 support for urgent mental health situations.

+
+
+
+
+
+
+ +
Licensed Therapist Network
+

Access to licensed mental health professionals specializing in postpartum depression and maternal wellness.

+
+
+
+
+
+ + +
+
+
+

Understanding Postpartum Depression

+

Postpartum depression affects up to 20% of new mothers and can occur anytime during the first year after childbirth. It's more than just "baby blues" - it's a serious medical condition that requires proper support and treatment.

+
    +
  • You're not alone: Millions of mothers experience postpartum depression
  • +
  • It's treatable: With proper support and care, recovery is possible
  • +
  • Seeking help is strength: Taking care of your mental health benefits you and your baby
  • +
+
+
+

Common Signs & Symptoms

+
+
+
    +
  • Persistent sadness or emptiness
  • +
  • Loss of interest in activities
  • +
  • Extreme fatigue
  • +
  • Difficulty bonding with baby
  • +
+
+
+
    +
  • Anxiety or panic attacks
  • +
  • Sleep disturbances
  • +
  • Feelings of guilt or worthlessness
  • +
  • Difficulty concentrating
  • +
+
+
+
+
+
+ + +
+
+

How Our AI-Human Partnership Works

+

Our unique approach combines AI efficiency with human expertise for comprehensive care

+
+
+
+
+ +
+

1. Start with AI Support

+

Share your concerns with our compassionate AI assistant. Get immediate support, resources, and initial guidance available 24/7.

+
+
+
+ +
+

2. Human Specialist Review

+

When needed, our AI seamlessly connects you with licensed mental health professionals who specialize in postpartum depression.

+
+
+
+ +
+

3. Ongoing Personalized Care

+

Receive continuous support through our integrated approach, combining AI monitoring with human check-ins and personalized treatment plans.

+
+
+
+ + +
+
+
+
+

24/7

+

AI Support Available

+
+
+

95%

+

User Satisfaction Rate

+
+
+

15min

+

Average Response Time

+
+
+

100+

+

Licensed Specialists

+
+
+
+
+ + +
+
+
+
+

Crisis Support Available

+

If you're experiencing thoughts of self-harm or suicide, please reach out immediately:

+
+
+ National Suicide Prevention Lifeline
+ Call 988 +
+
+ Crisis Text Line
+ Text HOME to 741741 +
+
+ Emergency Services
+ Call 911 +
+
+
+
+
+
+ + +
+
+

What Mothers Are Saying

+

Real experiences from mothers who found support through BeyondBabyBlues

+
+
+
+
+
+ +

"The AI assistant understood my concerns immediately and connected me with a therapist who specialized in postpartum depression. I'm so grateful for this service."

+
Sarah M., New Mom
+
+
+
+
+
+
+ +

"Having 24/7 support made all the difference. When I was struggling at 3 AM, the AI was there to help, and when I needed more, a human specialist was available."

+
Jessica L., Mother of Two
+
+
+
+
+
+
+ +

"I was hesitant to seek help, but the AI made it feel safe and non-judgmental. The transition to human care was seamless when I was ready."

+
Maria R., First-time Mom
+
+
+
+
+
+ + +
+
+

Frequently Asked Questions

+
+
+
+
+
+

+ +

+
+
+ Our AI assistant provides immediate support and identifies when human expertise is needed. When complex situations arise, you're seamlessly connected with licensed mental health professionals who specialize in postpartum depression. +
+
+
+
+

+ +

+
+
+ Yes, we follow strict HIPAA guidelines to protect your privacy. All conversations are confidential and secure. Information is only shared with human specialists when you consent or in emergency situations. +
+
+
+
+

+ +

+
+
+ Our AI is trained to recognize crisis situations and will immediately connect you with crisis specialists. We also provide direct access to emergency resources like the 988 Suicide Prevention Lifeline. +
+
+
+
+

+ +

+
+
+ Initial AI support and crisis intervention are always free. Human specialist consultations may be covered by insurance, and we work with various providers to ensure accessible care for all mothers. +
+
+
+
+
+
+
+ + +
+
+

Ready to Get the Support You Deserve?

+

Start your journey to better mental health with our compassionate AI assistant, backed by human expertise when you need it most.

+ +
+
+ + + + + + + + + + + diff --git a/datasets/BeyondBabyBlues.txt b/datasets/BeyondBabyBlues.txt new file mode 100644 index 0000000..6be8d59 --- /dev/null +++ b/datasets/BeyondBabyBlues.txt @@ -0,0 +1,209 @@ +# BeyondBabyBlues Medical Group Dataset + +## Company Overview +BeyondBabyBlues is a dedicated medical group providing comprehensive support to pregnant women and their families. Our mission is to ensure that every mother receives the care and guidance she needs throughout her pregnancy journey. We offer a range of services designed to meet the physical, emotional, and educational needs of expectant mothers. + +## Services Offered +1. **Prenatal Care**: Regular check-ups and monitoring of the mother's health and baby's development. +2. **Nutrition Counseling**: Personalized dietary plans to ensure mothers receive essential nutrients. +3. **Mental Health Support**: Access to counseling and support groups for emotional well-being. +4. **Childbirth Classes**: Educational programs to prepare parents for labor and delivery. +5. **Postpartum Care**: Support and resources for mothers after childbirth, including lactation consulting. +6. **Emergency Support**: 24/7 helpline for urgent medical concerns related to pregnancy. +7. **Family Planning**: Guidance on family planning and reproductive health. + +## Employees +### Medical Staff +- **Dr. Emily Johnson** - Obstetrician +- **Dr. Mark Taylor** - Gynecologist +- **Nurse Sarah Williams** - Prenatal Care Nurse +- **Nurse Jonathan Brown** - Postpartum Care Nurse +- **Counselor Maria Lopez** - Mental Health Counselor + +### Postpartum Depression & Mental Health Specialists +- **Dr. Rachel Chen, MD, PhD** - Board-Certified Psychiatrist & Perinatal Mental Health Specialist + - Specialization: Postpartum Depression, Anxiety Disorders, Perinatal Mental Health + - Experience: Board-Certified Psychiatrist with 12 years experience in maternal mental health + - Contact: dr.chen@BeyondBabyBlues.com | Direct Line: (123) 456-7891 + - Availability: Mon-Fri 9 AM-6 PM, Emergency consultations available 24/7 + - Languages: English, Mandarin, Spanish + +- **Dr. Priya Sharma, MD** - Reproductive Psychiatrist & Women's Mental Health Expert + - Specialization: Postpartum Psychosis, Bipolar Disorder, Medication Management + - Experience: Reproductive Psychiatrist with 15 years experience in women's mental health + - Contact: dr.sharma@BeyondBabyBlues.com | Direct Line: (123) 456-7892 + - Availability: Tue-Sat 8 AM-5 PM, Crisis intervention available + - Languages: English, Hindi, Punjabi + +- **Dr. Michael Rodriguez, MD** - Perinatal Psychiatrist & Trauma Specialist + - Specialization: Birth Trauma, PTSD, Complex Mental Health Cases + - Experience: Perinatal Psychiatrist certified in Trauma-Informed Care + - Contact: dr.rodriguez@BeyondBabyBlues.com | Direct Line: (123) 456-7893 + - Availability: Mon-Thu 10 AM-7 PM, Weekend emergency coverage + - Languages: English, Spanish + +- **Dr. Jennifer Thompson, MD** - Maternal-Fetal Medicine & High-Risk Pregnancy Specialist + - Specialization: High-risk pregnancies, Postpartum complications, Medical comorbidities + - Experience: Maternal-Fetal Medicine specialist with 18 years experience + - Contact: dr.thompson@BeyondBabyBlues.com | Direct Line: (123) 456-7894 + - Availability: Mon-Fri 7 AM-4 PM, On-call weekends + - Languages: English, French + +### Licensed Clinical Therapists & Counselors +- **Dr. Amanda Foster, LCSW, PMH-C** - Licensed Clinical Social Worker + - Specialization: Postpartum Depression, Support Groups, Family Therapy + - Experience: Licensed Clinical Social Worker with 8 years in perinatal mental health + - Contact: amanda.foster@BeyondBabyBlues.com | Direct Line: (123) 456-7895 + +- **Sarah Mitchell, LPC, PMH-C** - Licensed Professional Counselor + - Specialization: Anxiety Disorders, Postpartum OCD, Cognitive Behavioral Therapy + - Experience: Licensed Professional Counselor with CBT certification + - Contact: sarah.mitchell@BeyondBabyBlues.com | Direct Line: (123) 456-7896 + +- **Dr. Robert Kim, PhD** - Clinical Psychologist + - Specialization: Psychological testing, Severe mental health disorders, Research + - Experience: Clinical Psychologist with 14 years in women's mental health + - Contact: dr.kim@BeyondBabyBlues.com | Direct Line: (123) 456-7897 + +### Crisis Intervention Team +- **Dr. Lisa Park, MD** - Crisis Psychiatrist & Emergency Mental Health Specialist + - Specialization: Crisis Intervention, Emergency Psychiatry, 24/7 Support + - Experience: Available 24/7 for emergency situations and crisis intervention + - Contact: crisis@BeyondBabyBlues.com | Emergency Line: (123) 456-7999 + - Availability: 24/7 Emergency availability, immediate crisis response + - Languages: English, Korean + +### Human-in-the-Loop Consultation Process +When AI systems identify the need for human specialist intervention, the following process is followed: + +1. **Immediate Triage**: AI system categorizes urgency level (Crisis, Urgent, Routine) +2. **Specialist Assignment**: Based on symptoms and needs, appropriate specialist is assigned +3. **Secure EMR Transfer**: Patient health records are securely transferred via HIPAA-compliant system +4. **Consultation Scheduling**: Immediate (crisis), same-day (urgent), or within 48 hours (routine) +5. **Follow-up Care**: Integrated care plan between AI monitoring and human specialist + +### Electronic Medical Record (EMR) System - HIPAA Compliant +**System Name**: BeyondBabyBlues Secure Health Portal (BBSHP) +- **Certification**: HIPAA-compliant, HITECH Act compliant, SOC 2 Type II certified +- **Security Features**: + - End-to-end encryption (AES-256) + - Multi-factor authentication + - Audit trails for all access + - Automatic session timeouts + - Role-based access controls + +**EMR Transfer Process for Human Consultations**: +1. **Patient Consent**: Digital consent obtained for specialist consultation +2. **Data Encryption**: All records encrypted before transfer +3. **Secure Portal**: Records accessible only to assigned specialist via secure portal +4. **Access Logging**: All EMR access logged with timestamp and provider ID +5. **Data Retention**: Records retained per HIPAA guidelines (minimum 6 years) +6. **Patient Access**: Patients can access their own records via patient portal + +**EMR Contact Information**: +- **EMR Support**: emr-support@BeyondBabyBlues.com +- **Privacy Officer**: privacy@BeyondBabyBlues.com +- **Technical Support**: (123) 456-7890 ext. 101 +- **Patient Portal**: portal.BeyondBabyBlues.com + +### Crisis Intervention Team +- **Dr. Lisa Park, MD** - Crisis Psychiatrist (Available 24/7) + - Contact: crisis@BeyondBabyBlues.com | Emergency: (123) 456-7999 +- **Crisis Counselor Jennifer Walsh, LCSW** - Available 24/7 + - Contact: crisis-counselor@BeyondBabyBlues.com + +### Administrative Staff +- **Alice Smith** - Office Manager +- **Tom Davis** - Receptionist +- **Lisa White** - Billing Specialist + +### Leadership Team +- **Megha N.** - CEO + Profile: Megha has over 15 years of experience in healthcare management. She is passionate about maternal health and has been instrumental in establishing BeyondBabyBlues as a trusted name in maternity care. + +- **Sai Shruthi** - CTO + Profile: Sai Shruthi brings a wealth of knowledge in health technology and software development. She leads the technological advancements at BeyondBabyBlues, ensuring the organization remains at the forefront of medical innovation. + +- **Deepak Kamboj** - COO + Profile: Deepak is responsible for the day-to-day operations at BeyondBabyBlues. With a background in operations management, he focuses on improving efficiency and service quality. + +- **Tejasri Addanki** - CFO + Profile: Tejasri oversees the financial health of BeyondBabyBlues. With expertise in healthcare finance, she ensures that resources are allocated effectively to support our mission. + +## Specialist Referral & Human-in-the-Loop Support Services + +### How to Request Human Specialist Consultation: +1. **Through AI Assistant**: Request "Connect me with a human specialist" during chat +2. **Direct Contact**: Email specialist@BeyondBabyBlues.com or call (123) 456-7890 +3. **Emergency**: Call crisis line (123) 456-7999 for immediate intervention +4. **Patient Portal**: Submit consultation request through secure patient portal + +### Appointment Scheduling: +- **Crisis Consultations**: Immediate (within 15 minutes) +- **Urgent Consultations**: Same day or within 24 hours +- **Routine Consultations**: Within 48-72 hours +- **Follow-up Appointments**: Scheduled based on treatment plan + +### Insurance and Payment: +- Most major insurance plans accepted +- Sliding scale fees available for uninsured patients +- Employee Assistance Programs (EAP) accepted +- Payment plans available for extended treatment + +### Telemedicine Options: +- Video consultations available for all specialists +- Secure messaging through patient portal +- Remote monitoring for high-risk patients +- Mobile app available: "BeyondBabyBlues Connect" + +## Contact Information +- **Website**: www.BeyondBabyBlues.com +- **Phone**: (123) 456-7890 +- **Email**: support@BeyondBabyBlues.com +- **Specialist Consultation**: specialist@BeyondBabyBlues.com +- **Crisis Support**: crisis@BeyondBabyBlues.com | (123) 456-7999 +- **EMR Support**: emr-support@BeyondBabyBlues.com +- **Privacy Officer**: privacy@BeyondBabyBlues.com +- **Location**: 123 Maternity Lane, Bothell, WA 12345 +- **LinkedIn**: [BeyondBabyBlues LinkedIn](https://www.linkedin.com/company/BeyondBabyBlues) + +## Working Hours +- **Monday to Friday**: 9:00 AM - 5:00 PM +- **Saturday**: 10:00 AM - 2:00 PM +- **Sunday**: Closed + +## Holidays +- New Year's Day +- Independence Day +- Thanksgiving Day +- Christmas Day + +Timezone: Pacific Standard Time (PST) + +Holidays: +- Follows Holidays of United States and India + +## Mission Statement +At BeyondBabyBlues, our mission is to provide compassionate, comprehensive care to pregnant women and their families. We believe in empowering mothers with knowledge, support, and resources essential for a healthy pregnancy and a happy family. + +## Long-Term Goals +1. Establish BeyondBabyBlues as a leading maternity support group both regionally and nationally by 2030. +2. Develop partnerships with hospitals and clinics to enhance referral networks. +3. Expand service offerings to include telehealth options for remote consultations and support. +4. Create a comprehensive online resource hub for expectant mothers and families. + +## Short-Term Goals +1. Increase community awareness of BeyondBabyBlues's services through outreach programs by 25% within the next year. +2. Implement a monthly workshop series covering various topics related to pregnancy and postpartum care. +3. Launch a social media campaign to engage with expectant mothers and collect feedback on services. + +## Outreach Strategies for Medical Emergencies +### 1. Emergency Helpline +- Establish a dedicated 24/7 emergency helpline specifically for pregnant women to report urgent concerns, such as severe abdominal pain or bleeding. + +### 2. Community Workshops +- Conduct monthly community workshops on recognizing pregnancy-related emergencies, such as preterm labor signs and hypertensive disorders. + +### 3. Collaboration with Local Hospitals +- Partner with local hospitals to create a seamless referral system for pregnant women requiring immediate medical attention. + diff --git a/datasets/post-natal.csv b/datasets/post-natal.csv new file mode 100644 index 0000000..b1aa6e6 --- /dev/null +++ b/datasets/post-natal.csv @@ -0,0 +1,1504 @@ +Timestamp,Age,Feeling sad or Tearful,Irritable towards baby & partner,Trouble sleeping at night,Problems concentrating or making decision,Overeating or loss of appetite,Feeling anxious,Feeling of guilt,Problems of bonding with baby,Suicide attempt +6/14/2022 20:02,35-40,Yes,Yes,Two or more days a week,Yes,Yes,Yes,No,Yes,Yes +6/14/2022 20:03,40-45,Yes,No,No,Yes,Yes,No,Yes,Yes,No +6/14/2022 20:04,35-40,Yes,No,Yes,Yes,Yes,Yes,No,Sometimes,No +6/14/2022 20:05,35-40,Yes,Yes,Yes,Yes,No,Yes,Maybe,No,No +6/14/2022 20:06,40-45,Yes,No,Two or more days a week,Yes,No,Yes,No,Yes,No +6/14/2022 20:06,30-35,No,No,Yes,Yes,Yes,Yes,No,No,Yes +6/14/2022 20:06,40-45,No,Yes,No,No,No,Yes,No,No,Yes +6/14/2022 20:07,35-40,Yes,No,Yes,Yes,No,Yes,No,No,No +6/14/2022 20:07,35-40,Yes,Yes,No,Yes,No,No,No,No,Yes +6/14/2022 20:11,30-35,Sometimes,Yes,Two or more days a week,No,Yes,Yes,No,Sometimes,Not interested to say +6/14/2022 22:04,30-35,Yes,Sometimes,Two or more days a week,No,Yes,No,Yes,No,No +6/14/2022 22:05,35-40,No,Yes,Two or more days a week,Yes,Yes,Yes,Yes,No,No +6/14/2022 22:05,40-45,Yes,No,No,Yes,No,Yes,No,No,Yes +6/14/2022 22:05,45-50,No,Yes,No,Yes,No,Yes,Maybe,Yes,Yes +6/14/2022 22:06,45-50,No,No,No,Yes,No,Yes,No,Sometimes,No +6/14/2022 22:06,30-35,Yes,No,Yes,No,Yes,Yes,No,Yes,No +6/14/2022 22:06,35-40,Sometimes,Sometimes,Yes,Often,Yes,No,Yes,Yes,Yes +6/14/2022 22:06,40-45,Yes,Yes,Two or more days a week,No,Yes,No,No,Sometimes,Not interested to say +6/14/2022 22:07,40-45,Sometimes,Sometimes,Two or more days a week,No,Yes,Yes,Yes,No,Yes +6/14/2022 22:07,45-50,Sometimes,Sometimes,Two or more days a week,Yes,Yes,Yes,Maybe,Sometimes,No +6/14/2022 22:08,30-35,No,No,Yes,No,Not at all,Yes,No,Yes,No +6/14/2022 22:08,30-35,No,Yes,Two or more days a week,Yes,No,Yes,No,No,Yes +6/14/2022 22:08,45-50,Sometimes,Sometimes,Yes,Yes,No,Yes,No,No,No +6/14/2022 22:08,40-45,Sometimes,Yes,No,Yes,No,No,Yes,No,Yes +6/14/2022 22:09,45-50,No,Sometimes,No,Yes,No,No,No,No,No +6/14/2022 22:09,40-45,Yes,Sometimes,Two or more days a week,Often,Yes,No,Maybe,Sometimes,Not interested to say +6/14/2022 22:09,30-35,No,No,Yes,Often,No,Yes,No,No,Yes +6/14/2022 22:10,40-45,Yes,Sometimes,Two or more days a week,Yes,No,No,Yes,Yes,Not interested to say +6/14/2022 22:10,35-40,Yes,Sometimes,Yes,Yes,Yes,No,Maybe,Sometimes,Yes +6/14/2022 22:15,40-45,Sometimes,Yes,No,Yes,No,Yes,No,Sometimes,Yes +6/14/2022 22:15,35-40,Yes,Yes,No,Often,Not at all,Yes,No,Sometimes,Not interested to say +6/14/2022 22:15,45-50,Sometimes,Yes,Two or more days a week,No,No,Yes,Yes,Yes,Not interested to say +6/14/2022 22:15,35-40,Yes,Sometimes,Yes,Yes,Not at all,Yes,Maybe,Sometimes,Yes +6/14/2022 22:16,30-35,Yes,Yes,Yes,Yes,Yes,Yes,Yes,Yes,Yes +6/14/2022 22:16,35-40,No,No,Yes,No,No,Yes,Yes,No,Yes +6/14/2022 22:16,30-35,Sometimes,Sometimes,Yes,Often,Not at all,Yes,Maybe,Yes,Not interested to say +6/14/2022 22:16,45-50,Sometimes,Yes,Yes,No,Not at all,No,No,Yes,Not interested to say +6/14/2022 22:17,40-45,No,Sometimes,Yes,Often,Not at all,Yes,Maybe,Yes,Not interested to say +6/14/2022 22:17,35-40,Sometimes,Yes,Two or more days a week,Often,Yes,No,Yes,Sometimes,Not interested to say +6/14/2022 22:17,35-40,No,Sometimes,Yes,No,Yes,No,Yes,No,Yes +6/14/2022 22:17,40-45,Yes,No,Two or more days a week,Yes,No,No,Maybe,Sometimes,Not interested to say +6/14/2022 22:18,35-40,Yes,Yes,Yes,Often,Yes,No,Maybe,No,No +6/14/2022 22:18,40-45,Yes,Sometimes,Two or more days a week,No,Yes,No,Maybe,Sometimes,Not interested to say +6/14/2022 22:18,30-35,Yes,No,Two or more days a week,No,Not at all,Yes,No,Sometimes,Yes +6/14/2022 23:25,35-40,Sometimes,Yes,Two or more days a week,Yes,No,Yes,Maybe,Sometimes,Not interested to say +6/14/2022 23:26,30-35,Yes,Yes,No,Often,Not at all,Yes,Maybe,Sometimes,No +6/14/2022 23:26,45-50,Yes,No,Two or more days a week,No,No,Yes,Maybe,Sometimes,No +6/14/2022 23:26,40-45,Sometimes,No,No,Often,No,Yes,Maybe,Yes,No +6/14/2022 23:27,45-50,No,Sometimes,Two or more days a week,No,No,No,Yes,No,Not interested to say +6/14/2022 23:27,40-45,No,Sometimes,Yes,Often,No,Yes,No,No,No +6/14/2022 23:28,40-45,Sometimes,Sometimes,Two or more days a week,No,No,No,Maybe,No,No +6/14/2022 23:29,40-45,No,Yes,Two or more days a week,No,No,Yes,No,No,Yes +6/14/2022 23:29,45-50,Yes,No,No,Often,Yes,Yes,No,Sometimes,No +6/14/2022 23:30,30-35,Sometimes,Yes,No,Often,Not at all,Yes,No,Sometimes,No +6/14/2022 23:30,35-40,No,Yes,Two or more days a week,Yes,No,Yes,No,Yes,Yes +6/14/2022 23:31,35-40,Yes,Yes,Two or more days a week,Yes,Yes,No,Yes,No,Yes +6/14/2022 23:32,35-40,Yes,No,No,Yes,No,Yes,Maybe,Yes,Not interested to say +6/14/2022 23:32,30-35,No,No,No,Yes,Not at all,No,Yes,Sometimes,Yes +6/14/2022 23:33,35-40,Yes,Yes,No,Yes,No,Yes,No,Sometimes,No +6/14/2022 23:33,40-45,Sometimes,Yes,Yes,Often,Not at all,No,No,Yes,Yes +6/14/2022 23:34,40-45,No,Yes,No,Often,Not at all,No,Yes,No,No +6/14/2022 23:34,40-45,Yes,No,Yes,No,No,No,Yes,No,No +6/14/2022 23:35,35-40,Yes,No,No,Often,Not at all,Yes,No,Sometimes,No +6/14/2022 23:35,40-45,No,No,Two or more days a week,Often,No,Yes,Yes,Sometimes,Yes +6/14/2022 23:36,30-35,Sometimes,No,Yes,No,No,No,Yes,Yes,No +6/14/2022 23:36,30-35,No,No,Yes,Yes,Yes,Yes,Maybe,No,Yes +6/14/2022 23:37,45-50,Sometimes,Yes,Yes,No,No,Yes,Yes,Sometimes,Yes +6/14/2022 23:37,45-50,Yes,No,Yes,No,Not at all,Yes,No,Yes,Not interested to say +6/14/2022 23:37,35-40,Yes,Yes,Yes,No,Not at all,No,Yes,No,Yes +6/14/2022 23:38,40-45,No,Sometimes,Yes,No,No,No,Maybe,Sometimes,Yes +6/14/2022 23:38,45-50,Sometimes,No,Yes,No,No,Yes,Maybe,Sometimes,No +6/14/2022 23:39,35-40,Sometimes,No,No,Yes,No,No,Yes,Yes,No +6/14/2022 23:39,45-50,Yes,No,No,Yes,No,No,Yes,No,Yes +6/14/2022 23:40,45-50,No,No,Yes,No,No,Yes,Maybe,No,Not interested to say +6/14/2022 23:40,30-35,No,No,No,No,Yes,No,Yes,No,No +6/14/2022 23:40,30-35,No,No,Two or more days a week,Often,Yes,No,Yes,Sometimes,No +6/14/2022 23:41,30-35,Sometimes,No,Yes,No,Yes,No,Yes,No,No +6/14/2022 23:41,30-35,Sometimes,Yes,Yes,No,Yes,No,Yes,No,Not interested to say +6/14/2022 23:42,30-35,No,Sometimes,No,Often,No,Yes,Maybe,Sometimes,Not interested to say +6/14/2022 23:43,40-45,No,Yes,No,Yes,No,Yes,No,Yes,No +6/14/2022 23:43,45-50,Sometimes,Yes,Two or more days a week,Yes,Not at all,Yes,Maybe,Yes,Not interested to say +6/14/2022 23:43,40-45,No,Yes,Two or more days a week,No,Yes,No,Yes,Sometimes,Yes +6/14/2022 23:44,45-50,No,No,Yes,Yes,No,Yes,No,Yes,No +6/14/2022 23:44,45-50,No,Yes,Two or more days a week,No,Not at all,Yes,No,Yes,Yes +6/14/2022 23:45,40-45,No,Yes,No,Yes,No,No,Maybe,Sometimes,No +6/14/2022 23:45,45-50,No,No,No,No,No,No,Yes,No,Not interested to say +6/14/2022 23:46,40-45,No,Yes,No,Often,Not at all,Yes,Maybe,Sometimes,Yes +6/14/2022 23:46,30-35,No,Yes,Two or more days a week,Often,Not at all,Yes,Maybe,Sometimes,No +6/14/2022 23:47,45-50,Yes,Sometimes,No,Yes,Not at all,Yes,No,Sometimes,No +6/14/2022 23:47,45-50,Yes,No,Yes,No,Yes,No,Yes,No,Yes +6/14/2022 23:48,35-40,Yes,No,Yes,No,Yes,No,Yes,No,Yes +6/14/2022 23:48,30-35,No,Yes,No,Yes,Not at all,No,Maybe,Sometimes,Not interested to say +6/14/2022 23:48,35-40,No,No,No,No,Not at all,Yes,Maybe,No,Yes +6/14/2022 23:49,45-50,Yes,Yes,No,Yes,No,Yes,Maybe,Sometimes,Yes +6/14/2022 23:49,30-35,No,Yes,Two or more days a week,Yes,No,Yes,No,Yes,Not interested to say +6/14/2022 23:50,30-35,No,Yes,Two or more days a week,Often,Not at all,Yes,No,Sometimes,Yes +6/14/2022 23:50,30-35,No,Yes,No,Often,Yes,Yes,Maybe,Yes,No +6/14/2022 23:52,40-45,No,Yes,No,Yes,Not at all,No,Yes,No,Yes +6/14/2022 23:53,30-35,No,Sometimes,Yes,No,Yes,No,No,Yes,Yes +6/15/2022 0:02,30-35,No,Yes,No,No,Yes,No,No,Yes,Yes +6/15/2022 0:02,30-35,No,Yes,Yes,No,Yes,No,Yes,No,No +6/15/2022 0:02,30-35,Sometimes,Yes,Two or more days a week,Yes,No,Yes,No,Yes,Yes +6/15/2022 0:06,30-35,Yes,Sometimes,Yes,No,Yes,No,Yes,Yes,No +6/15/2022 0:06,30-35,No,No,No,Yes,Yes,No,Yes,Sometimes,No +6/15/2022 0:07,35-40,Yes,No,Yes,No,Not at all,No,No,No,No +6/15/2022 0:07,30-35,Yes,No,Yes,No,Not at all,No,Yes,No,Yes +6/15/2022 0:10,35-40,No,Yes,Yes,No,Yes,No,Yes,No,Yes +6/15/2022 0:11,30-35,Sometimes,No,Yes,Often,No,Yes,No,No,Yes +6/15/2022 0:11,45-50,No,Yes,Two or more days a week,Yes,Not at all,Yes,Maybe,Sometimes,No +6/15/2022 0:12,35-40,No,Yes,No,Yes,No,Yes,No,Sometimes,Not interested to say +6/15/2022 0:12,35-40,Yes,No,Yes,Often,No,Yes,No,Sometimes,No +6/15/2022 0:13,35-40,Yes,No,Yes,Often,Yes,Yes,Yes,Sometimes,No +6/15/2022 0:13,35-40,No,Yes,Two or more days a week,Yes,No,Yes,No,No,Yes +6/15/2022 0:14,40-45,Sometimes,Yes,No,Yes,Not at all,Yes,Maybe,Yes,No +6/15/2022 0:14,40-45,Yes,No,Yes,No,Yes,Yes,No,Sometimes,Not interested to say +6/15/2022 0:14,40-45,Yes,No,Yes,No,Yes,No,Yes,Sometimes,No +6/15/2022 0:14,45-50,Sometimes,No,Yes,Often,No,Yes,No,Sometimes,Yes +6/15/2022 0:16,35-40,No,Yes,No,Yes,No,Yes,Yes,No,Yes +6/15/2022 0:16,35-40,Sometimes,Yes,No,Yes,No,Yes,Maybe,Yes,Yes +6/15/2022 0:17,30-35,No,Sometimes,Yes,Yes,Yes,No,No,Yes,Not interested to say +6/15/2022 0:17,40-45,Yes,Sometimes,No,Yes,No,No,Yes,No,Yes +6/15/2022 0:17,45-50,Yes,No,Two or more days a week,Yes,No,No,Yes,No,Yes +6/15/2022 0:18,45-50,Sometimes,Sometimes,Yes,Often,Yes,No,Maybe,Yes,Not interested to say +6/15/2022 0:19,25-30,Yes,No,Yes,No,Yes,Yes,Yes,Sometimes,Yes +6/15/2022 0:19,25-30,Yes,No,Yes,Yes,Yes,Yes,Yes,No,Yes +6/15/2022 0:19,25-30,Sometimes,Sometimes,Two or more days a week,No,Not at all,Yes,No,No,Yes +6/15/2022 0:20,25-30,Yes,Yes,No,Yes,No,Yes,Maybe,Sometimes,Yes +6/15/2022 0:20,30-35,Yes,No,Yes,Often,Not at all,Yes,Maybe,Yes,Not interested to say +6/15/2022 0:20,25-30,Yes,No,Yes,No,Not at all,No,No,Yes,Yes +6/15/2022 0:20,25-30,No,No,Yes,Often,No,No,Yes,Yes,Yes +6/15/2022 0:21,30-35,Sometimes,Yes,Two or more days a week,No,No,No,Maybe,Yes,Not interested to say +6/15/2022 0:21,25-30,Sometimes,Yes,Yes,No,Yes,Yes,Maybe,Sometimes,Not interested to say +6/15/2022 0:22,30-35,Yes,No,No,Yes,Yes,Yes,Maybe,Sometimes,No +6/15/2022 0:22,40-45,Yes,Yes,No,Often,Not at all,No,Yes,Sometimes,Yes +6/15/2022 0:23,40-45,Yes,Sometimes,Two or more days a week,No,Yes,Yes,No,Sometimes,No +6/15/2022 0:23,40-45,Yes,Sometimes,No,No,Yes,No,Yes,Yes,No +6/15/2022 0:24,25-30,No,Sometimes,No,No,Not at all,Yes,No,No,No +6/15/2022 0:24,30-35,Yes,Sometimes,Yes,Often,No,Yes,Maybe,No,Yes +6/15/2022 0:25,40-45,Yes,No,Two or more days a week,Yes,Not at all,No,Maybe,Yes,Not interested to say +6/15/2022 0:25,40-45,Yes,No,Yes,Yes,Yes,No,Yes,Sometimes,Not interested to say +6/15/2022 0:25,35-40,Yes,No,Yes,Yes,No,No,Yes,Yes,Not interested to say +6/15/2022 0:26,45-50,Yes,Yes,No,No,Not at all,Yes,Maybe,No,Yes +6/15/2022 0:26,25-30,Yes,No,No,No,Not at all,No,Yes,Sometimes,Yes +6/15/2022 0:26,30-35,No,No,Yes,Often,No,Yes,No,Yes,Yes +6/15/2022 0:27,40-45,Yes,Sometimes,No,Yes,No,No,No,Yes,No +6/15/2022 0:27,25-30,Sometimes,Sometimes,Two or more days a week,Often,Not at all,No,Yes,Sometimes,Yes +6/15/2022 0:27,30-35,Sometimes,No,No,Yes,No,Yes,No,Sometimes,No +6/15/2022 0:27,40-45,No,Yes,Two or more days a week,No,Not at all,No,Yes,Yes,Yes +6/15/2022 0:27,25-30,Yes,Sometimes,No,Yes,Yes,No,No,Yes,Yes +6/15/2022 0:28,40-45,Yes,No,No,No,Not at all,Yes,Maybe,Yes,No +6/15/2022 0:28,25-30,No,Yes,No,Yes,Yes,No,No,No,Yes +6/15/2022 0:28,35-40,Yes,No,Yes,Often,Yes,No,Maybe,Sometimes,Yes +6/15/2022 0:28,40-45,No,Sometimes,Yes,Often,No,No,Yes,Sometimes,No +6/15/2022 0:28,40-45,No,Yes,No,No,No,Yes,No,Yes,No +6/15/2022 0:29,40-45,Yes,No,Yes,Yes,No,No,Maybe,No,Not interested to say +6/15/2022 0:29,30-35,Sometimes,Yes,No,No,Yes,No,Maybe,Yes,No +6/15/2022 0:29,35-40,Sometimes,Yes,Yes,No,Yes,No,Yes,Sometimes,No +6/15/2022 0:29,25-30,Sometimes,Sometimes,Yes,Often,Yes,Yes,Maybe,Sometimes,Yes +6/15/2022 0:29,35-40,Sometimes,No,Yes,Yes,Not at all,No,Yes,Yes,No +6/15/2022 0:30,45-50,No,Sometimes,Two or more days a week,No,Not at all,No,Maybe,Sometimes,Not interested to say +6/15/2022 0:30,35-40,Yes,No,Two or more days a week,Yes,No,No,Maybe,Yes,No +6/15/2022 0:30,35-40,Yes,No,Two or more days a week,Often,Not at all,Yes,Maybe,Yes,No +6/15/2022 0:30,40-45,No,Yes,Two or more days a week,Yes,No,Yes,No,Yes,No +6/15/2022 0:30,40-45,No,Sometimes,No,No,No,Yes,Yes,Yes,No +6/15/2022 0:31,40-45,Yes,No,Yes,Often,Yes,Yes,Yes,Sometimes,No +6/15/2022 0:31,35-40,Sometimes,Sometimes,No,Yes,No,No,No,No,Yes +6/15/2022 0:31,30-35,No,Sometimes,Two or more days a week,Often,No,No,Yes,No,Yes +6/15/2022 0:31,35-40,Sometimes,No,Yes,No,No,No,Yes,No,No +6/15/2022 0:31,30-35,Yes,No,Two or more days a week,No,Not at all,No,Yes,No,Not interested to say +6/15/2022 0:32,45-50,Yes,No,Two or more days a week,Yes,Not at all,No,Yes,Sometimes,Yes +6/15/2022 0:32,35-40,No,Yes,Yes,Often,Not at all,Yes,Yes,No,Yes +6/15/2022 0:32,35-40,Sometimes,No,Yes,Often,Not at all,Yes,No,Sometimes,No +6/15/2022 0:32,45-50,Yes,Sometimes,Two or more days a week,Yes,Not at all,Yes,Yes,No,No +6/15/2022 0:33,40-45,No,Sometimes,Two or more days a week,No,Not at all,Yes,Maybe,No,Yes +6/15/2022 0:33,45-50,Sometimes,No,No,Yes,Yes,No,No,Sometimes,Not interested to say +6/15/2022 0:33,45-50,No,Yes,No,Yes,Not at all,Yes,Maybe,No,Not interested to say +6/15/2022 0:33,40-45,No,Yes,Yes,No,Not at all,No,Maybe,No,Yes +6/15/2022 0:34,35-40,Sometimes,No,Two or more days a week,No,No,No,Yes,Sometimes,Not interested to say +6/15/2022 0:34,45-50,Yes,No,Yes,Often,No,Yes,Maybe,Yes,No +6/15/2022 0:35,30-35,Sometimes,No,Yes,No,No,Yes,Maybe,Sometimes,Not interested to say +6/15/2022 0:35,25-30,Sometimes,No,Two or more days a week,No,Yes,No,No,Sometimes,No +6/15/2022 0:35,25-30,Sometimes,Yes,Yes,Often,Not at all,No,Yes,Sometimes,Not interested to say +6/15/2022 0:36,25-30,No,Yes,No,No,Not at all,No,Yes,Yes,Yes +6/15/2022 0:36,45-50,No,Sometimes,Two or more days a week,No,No,No,No,Yes,No +6/15/2022 0:37,35-40,Sometimes,Yes,Yes,No,Yes,No,Yes,No,Not interested to say +6/15/2022 0:37,25-30,Yes,No,No,Yes,Not at all,No,Yes,Yes,No +6/15/2022 0:38,30-35,No,Sometimes,Two or more days a week,No,Yes,No,Maybe,Sometimes,No +6/15/2022 0:39,25-30,Sometimes,No,No,Often,Yes,No,Maybe,Sometimes,Yes +6/15/2022 0:39,25-30,No,No,Two or more days a week,Yes,No,No,Maybe,No,Not interested to say +6/15/2022 0:40,45-50,Yes,No,Yes,Often,No,Yes,No,Yes,No +6/15/2022 0:40,25-30,Sometimes,No,Two or more days a week,No,Not at all,Yes,No,No,Not interested to say +6/15/2022 1:02,35-40,Yes,No,Yes,Often,Not at all,Yes,No,Yes,Not interested to say +6/15/2022 1:02,40-45,Yes,No,Yes,Yes,Not at all,No,Yes,No,Not interested to say +6/15/2022 1:03,45-50,No,No,Yes,Often,No,Yes,Maybe,Yes,No +6/15/2022 1:05,25-30,No,Yes,No,Yes,Not at all,No,Yes,No,Yes +6/15/2022 1:08,40-45,Yes,No,No,Yes,Not at all,No,Yes,No,No +6/15/2022 1:08,30-35,No,Sometimes,Two or more days a week,Often,No,Yes,No,Sometimes,Yes +6/15/2022 1:09,25-30,Sometimes,No,Yes,No,Yes,No,Yes,No,Not interested to say +6/15/2022 1:09,35-40,Yes,Sometimes,Yes,Yes,No,No,Yes,No,Yes +6/15/2022 1:10,45-50,Yes,No,No,Yes,No,Yes,Maybe,Yes,No +6/15/2022 1:13,25-30,No,Sometimes,Yes,No,No,Yes,Maybe,Sometimes,Yes +6/14/2022 22:18,40-45,No,No,Two or more days a week,Yes,No,Yes,No,Yes,Yes +6/14/2022 22:19,30-35,Yes,Yes,Two or more days a week,Yes,No,No,Yes,Yes,No +6/14/2022 22:19,40-45,No,No,Yes,Yes,Yes,Yes,No,Yes,No +6/14/2022 22:19,35-40,Yes,Yes,Two or more days a week,Yes,No,Yes,Maybe,Yes,No +6/14/2022 22:19,40-45,Yes,Yes,Yes,Yes,No,Yes,No,No,No +6/14/2022 22:19,35-40,Sometimes,Sometimes,No,No,No,Yes,No,Yes,Yes +6/14/2022 22:19,45-50,Yes,Yes,No,Yes,Yes,Yes,No,No,Yes +6/14/2022 22:19,35-40,Sometimes,Sometimes,Two or more days a week,Yes,Yes,Yes,No,Yes,No +6/14/2022 22:20,30-35,Yes,Yes,Yes,No,Yes,No,No,Yes,Yes +6/14/2022 22:20,35-40,Yes,Yes,Two or more days a week,No,No,Yes,No,Sometimes,Not interested to say +6/15/2022 22:18,30-35,No,No,Yes,Yes,No,No,Yes,Yes,No +6/15/2022 22:24,35-40,Sometimes,Sometimes,No,Yes,Yes,Yes,Yes,Sometimes,No +6/15/2022 22:24,30-35,Sometimes,Sometimes,No,Yes,No,Yes,No,Yes,Yes +6/15/2022 22:24,45-50,No,No,Two or more days a week,Yes,Not at all,Yes,Maybe,Yes,Yes +6/15/2022 22:24,40-45,Sometimes,Sometimes,Yes,No,No,Yes,No,No,No +6/15/2022 22:24,35-40,No,No,Yes,Often,Not at all,Yes,No,Sometimes,No +6/15/2022 22:24,35-40,Yes,Yes,Yes,No,Yes,Yes,Yes,Sometimes,Yes +6/15/2022 22:24,40-45,Yes,Yes,Yes,No,No,Yes,No,No,Not interested to say +6/15/2022 22:24,35-40,Yes,Yes,Yes,Yes,Not at all,No,Yes,Sometimes,Yes +6/15/2022 22:24,40-45,Yes,Yes,Yes,No,Not at all,Yes,Maybe,No,No +6/15/2022 0:34,45-50,Sometimes,No,Yes,No,Not at all,No,No,Sometimes,Not interested to say +6/15/2022 0:34,30-35,Yes,Yes,No,Yes,No,Yes,Maybe,No,Not interested to say +6/15/2022 0:35,25-30,Sometimes,Yes,Two or more days a week,Yes,No,No,Maybe,No,Yes +6/15/2022 0:35,25-30,Sometimes,Sometimes,Yes,Yes,No,No,Yes,Sometimes,Not interested to say +6/15/2022 0:35,25-30,Sometimes,Yes,Two or more days a week,Yes,Yes,Yes,Maybe,Yes,No +6/15/2022 0:36,45-50,No,No,Two or more days a week,Yes,Not at all,Yes,Maybe,Sometimes,Not interested to say +6/15/2022 0:36,35-40,No,Sometimes,Yes,No,Not at all,No,No,Sometimes,No +6/15/2022 0:37,25-30,Sometimes,No,Yes,Yes,No,No,Yes,Sometimes,Not interested to say +6/15/2022 0:37,30-35,Yes,No,Two or more days a week,Yes,Yes,No,Yes,Yes,Yes +6/15/2022 0:38,25-30,No,No,Two or more days a week,No,Not at all,No,No,Yes,No +6/15/2022 0:39,25-30,Sometimes,No,No,No,Yes,No,Yes,No,Not interested to say +6/15/2022 0:39,45-50,No,No,No,Yes,Yes,No,Yes,Yes,No +6/15/2022 0:40,25-30,Yes,No,Yes,Yes,No,No,Maybe,Sometimes,No +6/15/2022 0:40,35-40,Sometimes,No,Two or more days a week,Yes,No,No,Maybe,Sometimes,Yes +6/15/2022 1:02,40-45,Yes,Yes,Yes,Yes,Not at all,No,Maybe,No,Not interested to say +6/15/2022 1:02,45-50,Yes,No,Yes,No,Not at all,Yes,No,Yes,No +6/15/2022 1:03,25-30,No,Sometimes,Two or more days a week,Often,Not at all,Yes,No,No,Not interested to say +6/15/2022 1:05,40-45,No,No,Yes,No,No,Yes,No,Yes,Not interested to say +6/15/2022 1:08,30-35,Yes,Sometimes,No,No,Not at all,No,Yes,No,Not interested to say +6/15/2022 1:08,25-30,No,No,Two or more days a week,Yes,Not at all,Yes,Maybe,Yes,No +6/15/2022 1:09,35-40,Sometimes,Sometimes,Yes,No,No,No,Yes,No,Yes +6/15/2022 1:09,45-50,Yes,No,No,No,Yes,No,Yes,No,No +6/15/2022 1:10,25-30,Yes,Yes,Two or more days a week,Yes,No,Yes,No,Sometimes,Yes +6/15/2022 1:13,40-45,No,No,No,Often,No,No,Yes,No,Not interested to say +6/14/2022 22:18,30-35,No,Yes,Two or more days a week,Yes,No,No,Yes,No,Yes +6/14/2022 22:19,40-45,Yes,Yes,Yes,No,No,Yes,Maybe,Yes,No +6/14/2022 22:19,35-40,No,Sometimes,Two or more days a week,Often,No,Yes,Maybe,Sometimes,Yes +6/14/2022 22:19,40-45,Yes,Yes,Yes,Yes,Yes,Yes,No,Yes,Yes +6/14/2022 22:19,35-40,Yes,Sometimes,Yes,Often,No,No,Yes,Yes,No +6/14/2022 22:19,45-50,Sometimes,Yes,Yes,No,No,Yes,No,Yes,No +6/14/2022 22:19,35-40,Yes,Yes,No,No,No,Yes,Maybe,Yes,No +6/14/2022 22:19,30-35,Sometimes,No,No,Yes,Yes,Yes,No,No,No +6/14/2022 22:20,35-40,Yes,Sometimes,Two or more days a week,Often,Yes,Yes,No,Yes,Yes +6/14/2022 22:20,30-35,Yes,Sometimes,Yes,Often,Yes,Yes,No,No,Yes +6/15/2022 22:18,35-40,No,No,Yes,Yes,No,Yes,No,Yes,No +6/15/2022 22:24,30-35,Sometimes,Sometimes,No,No,No,No,No,Yes,Yes +6/15/2022 22:24,45-50,Sometimes,No,Yes,Yes,Yes,Yes,No,Sometimes,Not interested to say +6/15/2022 22:24,40-45,No,Yes,Two or more days a week,Yes,No,No,Yes,Yes,No +6/15/2022 22:24,35-40,Sometimes,Yes,Two or more days a week,No,Not at all,Yes,Yes,Sometimes,No +6/15/2022 22:24,35-40,No,Yes,Yes,,No,Yes,No,Yes,Yes +6/15/2022 22:24,40-45,Yes,Yes,Two or more days a week,,Not at all,Yes,,Yes,Yes +6/15/2022 22:24,35-40,Yes,,Yes,,Yes,Yes,,No,No +6/15/2022 22:24,40-45,Yes,,No,,No,Yes,,Sometimes,No +6/14/2022 20:02,35-40,Yes,Yes,Two or more days a week,Yes,Yes,Yes,No,Yes,Yes +6/14/2022 20:03,40-45,Yes,No,No,Yes,Yes,No,Yes,Yes,No +6/14/2022 20:04,35-40,Yes,No,Yes,Yes,Yes,Yes,No,Sometimes,No +6/14/2022 20:05,35-40,Yes,Yes,Yes,Yes,No,Yes,Maybe,No,No +6/14/2022 20:06,40-45,Yes,No,Two or more days a week,Yes,No,Yes,No,Yes,No +6/14/2022 20:06,30-35,No,No,Yes,Yes,Yes,Yes,No,No,Yes +6/14/2022 20:06,40-45,No,Yes,No,No,No,Yes,No,No,Yes +6/14/2022 20:07,35-40,Yes,No,Yes,Yes,No,Yes,No,No,No +6/14/2022 20:07,35-40,Yes,Yes,No,Yes,No,No,No,No,Yes +6/14/2022 20:11,30-35,Sometimes,Yes,Two or more days a week,No,Yes,Yes,No,Sometimes,Not interested to say +6/14/2022 22:04,30-35,Yes,Sometimes,Two or more days a week,No,Yes,No,Yes,No,No +6/14/2022 22:05,35-40,No,Yes,Two or more days a week,Yes,Yes,Yes,Yes,No,No +6/14/2022 22:05,40-45,Yes,No,No,Yes,No,Yes,No,No,Yes +6/14/2022 22:05,45-50,No,Yes,No,Yes,No,Yes,Maybe,Yes,Yes +6/14/2022 22:06,45-50,No,No,No,Yes,No,Yes,No,Sometimes,No +6/14/2022 22:06,30-35,Yes,No,Yes,No,Yes,Yes,No,Yes,No +6/14/2022 22:06,35-40,Sometimes,Sometimes,Yes,Often,Yes,No,Yes,Yes,Yes +6/14/2022 22:06,40-45,Yes,Yes,Two or more days a week,No,Yes,No,No,Sometimes,Not interested to say +6/14/2022 22:07,40-45,Sometimes,Sometimes,Two or more days a week,No,Yes,Yes,Yes,No,Yes +6/14/2022 22:07,45-50,Sometimes,Sometimes,Two or more days a week,Yes,Yes,Yes,Maybe,Sometimes,No +6/14/2022 22:08,30-35,No,No,Yes,No,Not at all,Yes,No,Yes,No +6/14/2022 22:08,30-35,No,Yes,Two or more days a week,Yes,No,Yes,No,No,Yes +6/14/2022 22:08,45-50,Sometimes,Sometimes,Yes,Yes,No,Yes,No,No,No +6/14/2022 22:08,40-45,Sometimes,Yes,No,Yes,No,No,Yes,No,Yes +6/14/2022 22:09,45-50,No,Sometimes,No,Yes,No,No,No,No,No +6/14/2022 22:09,40-45,Yes,Sometimes,Two or more days a week,Often,Yes,No,Maybe,Sometimes,Not interested to say +6/14/2022 22:09,30-35,No,No,Yes,Often,No,Yes,No,No,Yes +6/14/2022 22:10,40-45,Yes,Sometimes,Two or more days a week,Yes,No,No,Yes,Yes,Not interested to say +6/14/2022 22:10,35-40,Yes,Sometimes,Yes,Yes,Yes,No,Maybe,Sometimes,Yes +6/14/2022 22:15,40-45,Sometimes,Yes,No,Yes,No,Yes,No,Sometimes,Yes +6/14/2022 22:15,35-40,Yes,Yes,No,Often,Not at all,Yes,No,Sometimes,Not interested to say +6/14/2022 22:15,45-50,Sometimes,Yes,Two or more days a week,No,No,Yes,Yes,Yes,Not interested to say +6/14/2022 22:15,35-40,Yes,Sometimes,Yes,Yes,Not at all,Yes,Maybe,Sometimes,Yes +6/14/2022 22:16,30-35,Yes,Yes,Yes,Yes,Yes,Yes,Yes,Yes,Yes +6/14/2022 22:16,35-40,No,No,Yes,No,No,Yes,Yes,No,Yes +6/14/2022 22:16,30-35,Sometimes,Sometimes,Yes,Often,Not at all,Yes,Maybe,Yes,Not interested to say +6/14/2022 22:16,45-50,Sometimes,Yes,Yes,No,Not at all,No,No,Yes,Not interested to say +6/14/2022 22:17,40-45,No,Sometimes,Yes,Often,Not at all,Yes,Maybe,Yes,Not interested to say +6/14/2022 22:17,35-40,Sometimes,Yes,Two or more days a week,Often,Yes,No,Yes,Sometimes,Not interested to say +6/14/2022 22:17,35-40,No,Sometimes,Yes,No,Yes,No,Yes,No,Yes +6/14/2022 22:17,40-45,Yes,No,Two or more days a week,Yes,No,No,Maybe,Sometimes,Not interested to say +6/14/2022 22:18,35-40,Yes,Yes,Yes,Often,Yes,No,Maybe,No,No +6/14/2022 22:18,40-45,Yes,Sometimes,Two or more days a week,No,Yes,No,Maybe,Sometimes,Not interested to say +6/14/2022 22:18,30-35,Yes,No,Two or more days a week,No,Not at all,Yes,No,Sometimes,Yes +6/14/2022 23:25,35-40,Sometimes,Yes,Two or more days a week,Yes,No,Yes,Maybe,Sometimes,Not interested to say +6/14/2022 23:26,30-35,Yes,Yes,No,Often,Not at all,Yes,Maybe,Sometimes,No +6/14/2022 23:26,45-50,Yes,No,Two or more days a week,No,No,Yes,Maybe,Sometimes,No +6/14/2022 23:26,40-45,Sometimes,No,No,Often,No,Yes,Maybe,Yes,No +6/14/2022 23:27,45-50,No,Sometimes,Two or more days a week,No,No,No,Yes,No,Not interested to say +6/14/2022 23:27,40-45,No,Sometimes,Yes,Often,No,Yes,No,No,No +6/14/2022 23:28,40-45,Sometimes,Sometimes,Two or more days a week,No,No,No,Maybe,No,No +6/14/2022 23:29,40-45,No,Yes,Two or more days a week,No,No,Yes,No,No,Yes +6/14/2022 23:29,45-50,Yes,No,No,Often,Yes,Yes,No,Sometimes,No +6/14/2022 23:30,30-35,Sometimes,Yes,No,Often,Not at all,Yes,No,Sometimes,No +6/14/2022 23:30,35-40,No,Yes,Two or more days a week,Yes,No,Yes,No,Yes,Yes +6/14/2022 23:31,35-40,Yes,No,Two or more days a week,No,No,Yes,Maybe,Sometimes,No +6/14/2022 23:32,35-40,Sometimes,No,No,Often,No,Yes,Maybe,Yes,No +6/14/2022 23:32,30-35,No,Sometimes,Two or more days a week,No,No,No,Yes,No,Not interested to say +6/14/2022 23:33,35-40,No,Sometimes,Yes,Often,No,Yes,No,No,No +6/14/2022 23:33,40-45,Sometimes,Sometimes,Two or more days a week,No,No,No,Maybe,No,No +6/14/2022 23:34,40-45,No,Yes,Two or more days a week,No,No,Yes,No,No,Yes +6/14/2022 23:34,40-45,Yes,No,No,Often,Yes,Yes,No,Sometimes,No +6/14/2022 23:35,35-40,Sometimes,Yes,No,Often,Not at all,Yes,No,Sometimes,No +6/14/2022 23:35,40-45,No,Yes,Two or more days a week,Yes,No,Yes,No,Yes,Yes +6/14/2022 23:36,30-35,Yes,Yes,Yes,Often,Yes,No,Maybe,No,No +6/14/2022 23:36,30-35,Yes,Sometimes,Two or more days a week,No,Yes,No,Maybe,Sometimes,Not interested to say +6/14/2022 23:37,45-50,Yes,No,Two or more days a week,No,Not at all,Yes,No,Sometimes,Yes +6/14/2022 23:37,45-50,Sometimes,Yes,Two or more days a week,Yes,No,Yes,Maybe,Sometimes,Not interested to say +6/14/2022 23:37,35-40,Yes,Yes,No,Often,Not at all,Yes,Maybe,Sometimes,No +6/14/2022 23:38,40-45,Yes,No,Two or more days a week,No,No,Yes,Maybe,Sometimes,No +6/14/2022 23:38,45-50,Sometimes,No,No,Often,No,Yes,Maybe,Yes,No +6/14/2022 23:39,35-40,No,Sometimes,Two or more days a week,No,No,No,Yes,No,Not interested to say +6/14/2022 23:39,45-50,No,Sometimes,Yes,Often,No,Yes,No,No,No +6/14/2022 23:40,45-50,Sometimes,Sometimes,Two or more days a week,No,No,No,Maybe,No,No +6/14/2022 23:40,30-35,No,Yes,Two or more days a week,No,No,Yes,No,No,Yes +6/14/2022 23:40,30-35,Yes,No,No,Often,Yes,Yes,No,Sometimes,No +6/14/2022 23:41,30-35,Sometimes,Yes,No,Often,Not at all,Yes,No,Sometimes,No +6/14/2022 23:41,30-35,No,Yes,Two or more days a week,Yes,No,Yes,No,Yes,Yes +6/14/2022 23:42,30-35,Yes,No,Two or more days a week,No,No,Yes,Maybe,Sometimes,No +6/14/2022 23:43,40-45,Sometimes,No,No,Often,No,Yes,Maybe,Yes,No +6/14/2022 23:43,45-50,No,Sometimes,Two or more days a week,No,No,No,Yes,No,Not interested to say +6/14/2022 23:43,40-45,No,Sometimes,Yes,Often,No,Yes,No,No,No +6/14/2022 23:44,45-50,Sometimes,Sometimes,Two or more days a week,No,No,No,Maybe,No,No +6/14/2022 23:44,45-50,No,Yes,Two or more days a week,No,No,Yes,No,No,Yes +6/14/2022 23:45,40-45,Yes,No,No,Often,Yes,Yes,No,Sometimes,No +6/14/2022 23:45,45-50,Sometimes,Yes,No,Often,Not at all,Yes,No,Sometimes,No +6/14/2022 23:46,40-45,No,Yes,Two or more days a week,Yes,No,Yes,No,Yes,Yes +6/14/2022 23:46,30-35,Sometimes,Yes,Two or more days a week,Yes,No,Yes,Maybe,Sometimes,Not interested to say +6/14/2022 23:47,45-50,Yes,Yes,No,Often,Not at all,Yes,Maybe,Sometimes,No +6/14/2022 23:47,45-50,Yes,No,Two or more days a week,No,No,Yes,Maybe,Sometimes,No +6/14/2022 23:48,35-40,Sometimes,No,No,Often,No,Yes,Maybe,Yes,No +6/14/2022 23:48,30-35,No,Sometimes,Two or more days a week,No,No,No,Yes,No,Not interested to say +6/14/2022 23:48,35-40,No,Sometimes,Yes,Often,No,Yes,No,No,No +6/14/2022 23:49,45-50,Sometimes,Sometimes,Two or more days a week,No,No,No,Maybe,No,No +6/14/2022 23:49,30-35,No,Yes,Two or more days a week,No,No,Yes,No,No,Yes +6/14/2022 23:50,30-35,Yes,No,No,Often,Yes,Yes,No,Sometimes,No +6/14/2022 23:50,30-35,Sometimes,Yes,No,Often,Not at all,Yes,No,Sometimes,No +6/14/2022 23:52,40-45,No,Yes,Two or more days a week,Yes,No,Yes,No,Yes,Yes +6/14/2022 23:53,30-35,Yes,No,Two or more days a week,No,No,Yes,Maybe,Sometimes,No +6/15/2022 0:02,30-35,Sometimes,No,No,Often,No,Yes,Maybe,Yes,No +6/15/2022 0:02,30-35,No,Sometimes,Two or more days a week,No,No,No,Yes,No,Not interested to say +6/15/2022 0:02,30-35,No,Sometimes,Yes,Often,No,Yes,No,No,No +6/15/2022 0:06,30-35,Sometimes,Sometimes,Two or more days a week,No,No,No,Maybe,No,No +6/15/2022 0:06,30-35,No,Yes,Two or more days a week,No,No,Yes,No,No,Yes +6/15/2022 0:07,35-40,No,Sometimes,Yes,Often,No,Yes,No,No,No +6/15/2022 0:07,30-35,Sometimes,Sometimes,Two or more days a week,No,No,No,Maybe,No,No +6/15/2022 0:10,35-40,No,Yes,Two or more days a week,No,No,Yes,No,No,Yes +6/15/2022 0:11,30-35,Yes,No,No,Often,Yes,Yes,No,Sometimes,No +6/15/2022 0:11,45-50,Sometimes,Yes,No,Often,Not at all,Yes,No,Sometimes,No +6/15/2022 0:12,35-40,No,Yes,Two or more days a week,Yes,No,Yes,No,Yes,Yes +6/15/2022 0:12,35-40,Yes,No,Two or more days a week,No,No,Yes,Maybe,Sometimes,No +6/15/2022 0:13,35-40,Sometimes,No,No,Often,No,Yes,Maybe,Yes,No +6/15/2022 0:13,35-40,No,Sometimes,Two or more days a week,No,No,No,Yes,No,Not interested to say +6/15/2022 0:14,40-45,No,Sometimes,Yes,Often,No,Yes,No,No,No +6/15/2022 0:14,40-45,Sometimes,Sometimes,Two or more days a week,No,No,No,Maybe,No,No +6/15/2022 0:14,40-45,No,Yes,Two or more days a week,No,No,Yes,No,No,Yes +6/15/2022 0:14,45-50,No,No,Yes,Often,No,Yes,No,No,Yes +6/15/2022 0:16,35-40,Yes,Sometimes,Two or more days a week,Yes,No,No,Yes,Yes,Not interested to say +6/15/2022 0:16,35-40,Yes,Sometimes,Yes,Yes,Yes,No,Maybe,Sometimes,Yes +6/15/2022 0:17,30-35,Sometimes,Yes,No,Yes,No,Yes,No,Sometimes,Yes +6/15/2022 0:17,40-45,Yes,Yes,No,Often,Not at all,Yes,No,Sometimes,Not interested to say +6/15/2022 0:17,45-50,Sometimes,Yes,Two or more days a week,No,No,Yes,Yes,Yes,Not interested to say +6/15/2022 0:18,45-50,Yes,Sometimes,Yes,Yes,Not at all,Yes,Maybe,Sometimes,Yes +6/15/2022 0:19,25-30,Yes,Yes,Yes,Yes,Yes,Yes,Yes,Yes,Yes +6/15/2022 0:19,25-30,No,No,Yes,No,No,Yes,Yes,No,Yes +6/15/2022 0:19,25-30,Sometimes,Sometimes,Yes,Often,Not at all,Yes,Maybe,Yes,Not interested to say +6/15/2022 0:20,25-30,Sometimes,Yes,Yes,No,Not at all,No,No,Yes,Not interested to say +6/15/2022 0:20,30-35,No,Sometimes,Yes,Often,Not at all,Yes,Maybe,Yes,Not interested to say +6/15/2022 0:20,25-30,Sometimes,Yes,Two or more days a week,Often,Yes,No,Yes,Sometimes,Not interested to say +6/15/2022 0:20,25-30,No,Sometimes,Yes,No,Yes,No,Yes,No,Yes +6/15/2022 0:21,30-35,Yes,No,Two or more days a week,Yes,No,No,Maybe,Sometimes,Not interested to say +6/15/2022 0:21,25-30,Yes,Yes,Yes,Often,Yes,No,Maybe,No,No +6/15/2022 0:22,30-35,Yes,Sometimes,Two or more days a week,No,Yes,No,Maybe,Sometimes,Not interested to say +6/15/2022 0:22,40-45,Yes,No,Two or more days a week,No,Not at all,Yes,No,Sometimes,Yes +6/15/2022 0:23,40-45,Sometimes,Yes,Two or more days a week,Yes,No,Yes,Maybe,Sometimes,Not interested to say +6/15/2022 0:23,40-45,Yes,Yes,No,Often,Not at all,Yes,Maybe,Sometimes,No +6/15/2022 0:24,25-30,Yes,No,Two or more days a week,No,No,Yes,Maybe,Sometimes,No +6/15/2022 0:24,30-35,Sometimes,No,No,Often,No,Yes,Maybe,Yes,No +6/15/2022 0:25,40-45,No,Sometimes,Two or more days a week,No,No,No,Yes,No,Not interested to say +6/15/2022 0:25,40-45,No,Sometimes,Yes,Often,No,Yes,No,No,No +6/15/2022 0:25,35-40,Sometimes,Sometimes,Two or more days a week,No,No,No,Maybe,No,No +6/15/2022 0:26,45-50,No,Yes,Two or more days a week,No,No,Yes,No,No,Yes +6/15/2022 0:26,25-30,Yes,No,No,Often,Yes,Yes,No,Sometimes,No +6/15/2022 0:26,30-35,Sometimes,Yes,No,Often,Not at all,Yes,No,Sometimes,No +6/15/2022 0:27,40-45,No,Yes,Two or more days a week,Yes,No,Yes,No,Yes,Yes +6/15/2022 0:27,25-30,Yes,No,Two or more days a week,No,No,Yes,Maybe,Sometimes,No +6/15/2022 0:27,30-35,Sometimes,No,No,Often,No,Yes,Maybe,Yes,No +6/15/2022 0:27,40-45,No,Sometimes,Two or more days a week,No,No,No,Yes,No,Not interested to say +6/15/2022 0:27,25-30,No,Sometimes,Yes,Often,No,Yes,No,No,No +6/15/2022 0:28,40-45,Sometimes,Sometimes,Two or more days a week,No,No,No,Maybe,No,No +6/15/2022 0:28,25-30,No,Yes,Two or more days a week,No,No,Yes,No,No,Yes +6/15/2022 0:28,35-40,Yes,No,No,Often,Yes,Yes,No,Sometimes,No +6/15/2022 0:28,40-45,Sometimes,Yes,No,Often,Not at all,Yes,No,Sometimes,No +6/15/2022 0:28,40-45,No,Yes,Two or more days a week,Yes,No,Yes,No,Yes,Yes +6/15/2022 0:29,40-45,Yes,Yes,Yes,Often,Yes,No,Maybe,No,No +6/15/2022 0:29,30-35,Yes,Sometimes,Two or more days a week,No,Yes,No,Maybe,Sometimes,Not interested to say +6/15/2022 0:29,35-40,Yes,No,Two or more days a week,No,Not at all,Yes,No,Sometimes,Yes +6/15/2022 0:29,25-30,Sometimes,Yes,Two or more days a week,Yes,No,Yes,Maybe,Sometimes,Not interested to say +6/15/2022 0:29,35-40,Yes,Yes,No,Often,Not at all,Yes,Maybe,Sometimes,No +6/15/2022 0:30,45-50,Yes,No,Two or more days a week,No,No,Yes,Maybe,Sometimes,No +6/15/2022 0:30,35-40,Sometimes,No,No,Often,No,Yes,Maybe,Yes,No +6/15/2022 0:30,35-40,No,Sometimes,Two or more days a week,No,No,No,Yes,No,Not interested to say +6/15/2022 0:30,40-45,No,Sometimes,Yes,Often,No,Yes,No,No,No +6/15/2022 0:30,40-45,Sometimes,Sometimes,Two or more days a week,No,No,No,Maybe,No,No +6/15/2022 0:31,40-45,No,Yes,Two or more days a week,No,No,Yes,No,No,Yes +6/15/2022 0:31,35-40,Yes,No,No,Often,Yes,Yes,No,Sometimes,No +6/15/2022 0:31,30-35,Sometimes,Yes,No,Often,Not at all,Yes,No,Sometimes,No +6/15/2022 0:31,35-40,No,Yes,Two or more days a week,Yes,No,Yes,No,Yes,Yes +6/15/2022 0:31,30-35,Yes,No,Two or more days a week,No,No,Yes,Maybe,Sometimes,No +6/15/2022 0:32,45-50,Sometimes,No,No,Often,No,Yes,Maybe,Yes,No +6/15/2022 0:32,35-40,No,Sometimes,Two or more days a week,No,No,No,Yes,No,Not interested to say +6/15/2022 0:32,35-40,No,Sometimes,Yes,Often,No,Yes,No,No,No +6/15/2022 0:32,45-50,Sometimes,Sometimes,Two or more days a week,No,No,No,Maybe,No,No +6/15/2022 0:33,40-45,No,Yes,Two or more days a week,No,No,Yes,No,No,Yes +6/15/2022 0:33,45-50,Yes,No,No,Often,Yes,Yes,No,Sometimes,No +6/15/2022 0:33,45-50,Sometimes,Yes,No,Often,Not at all,Yes,No,Sometimes,No +6/15/2022 0:33,40-45,No,Yes,Two or more days a week,Yes,No,Yes,No,Yes,Yes +6/15/2022 0:34,35-40,Sometimes,Yes,Two or more days a week,Yes,No,Yes,Maybe,Sometimes,Not interested to say +6/15/2022 0:34,45-50,Yes,Yes,No,Often,Not at all,Yes,Maybe,Sometimes,No +6/15/2022 0:35,30-35,Yes,No,Two or more days a week,No,No,Yes,Maybe,Sometimes,No +6/15/2022 0:35,25-30,Sometimes,No,No,Often,No,Yes,Maybe,Yes,No +6/15/2022 0:35,25-30,No,Sometimes,Two or more days a week,No,No,No,Yes,No,Not interested to say +6/15/2022 0:36,25-30,No,Sometimes,Yes,Often,No,Yes,No,No,No +6/15/2022 0:36,45-50,Sometimes,Sometimes,Two or more days a week,No,No,No,Maybe,No,No +6/15/2022 0:37,35-40,No,Yes,Two or more days a week,No,No,Yes,No,No,Yes +6/15/2022 0:37,25-30,Yes,No,No,Often,Yes,Yes,No,Sometimes,No +6/15/2022 0:38,30-35,Sometimes,Yes,No,Often,Not at all,Yes,No,Sometimes,No +6/15/2022 0:39,25-30,No,Yes,Two or more days a week,Yes,No,Yes,No,Yes,Yes +6/15/2022 0:39,25-30,Yes,No,Two or more days a week,No,No,Yes,Maybe,Sometimes,No +6/15/2022 0:40,45-50,Sometimes,No,No,Often,No,Yes,Maybe,Yes,No +6/15/2022 0:40,25-30,No,Sometimes,Two or more days a week,No,No,No,Yes,No,Not interested to say +6/15/2022 1:02,35-40,No,Sometimes,Yes,Often,No,Yes,No,No,No +6/15/2022 1:02,40-45,Sometimes,Sometimes,Two or more days a week,No,No,No,Maybe,No,No +6/15/2022 1:03,45-50,No,Yes,Two or more days a week,No,No,Yes,No,No,Yes +6/15/2022 1:05,25-30,No,Sometimes,Yes,Often,No,Yes,No,No,No +6/15/2022 1:08,40-45,Sometimes,Sometimes,Two or more days a week,No,No,No,Maybe,No,No +6/15/2022 1:08,30-35,No,Yes,Two or more days a week,No,No,Yes,No,No,Yes +6/15/2022 1:09,25-30,Yes,No,No,Often,Yes,Yes,No,Sometimes,No +6/15/2022 1:09,35-40,Sometimes,Yes,No,Often,Not at all,Yes,No,Sometimes,No +6/15/2022 1:10,45-50,No,Yes,Two or more days a week,Yes,No,Yes,No,Yes,Yes +6/15/2022 1:13,25-30,Yes,No,Two or more days a week,No,No,Yes,Maybe,Sometimes,No +6/14/2022 22:18,40-45,Sometimes,No,No,Often,No,Yes,Maybe,Yes,No +6/14/2022 22:19,30-35,No,Sometimes,Two or more days a week,No,No,No,Yes,No,Not interested to say +6/15/2022 1:10,45-50,No,Sometimes,Yes,Often,No,Yes,No,No,No +6/15/2022 1:13,25-30,Sometimes,Sometimes,Two or more days a week,No,No,No,Maybe,No,No +6/14/2022 22:18,40-45,No,Yes,Two or more days a week,No,No,Yes,No,No,Yes +6/14/2022 20:11,30-35,Sometimes,Yes,Two or more days a week,No,Yes,Yes,No,Sometimes,Not interested to say +6/14/2022 22:04,30-35,Yes,Sometimes,Two or more days a week,No,Yes,No,Yes,No,No +6/14/2022 22:05,35-40,No,Yes,Two or more days a week,Yes,Yes,Yes,Yes,No,No +6/14/2022 22:05,40-45,Yes,No,No,Yes,No,Yes,No,No,Yes +6/14/2022 22:05,45-50,No,Yes,No,Yes,No,Yes,Maybe,Yes,Yes +6/14/2022 22:06,45-50,No,No,No,Yes,No,Yes,No,Sometimes,No +6/14/2022 22:06,30-35,Yes,No,Yes,No,Yes,Yes,No,Yes,No +6/14/2022 22:06,35-40,Sometimes,Sometimes,Yes,Often,Yes,No,Yes,Yes,Yes +6/14/2022 22:06,40-45,Yes,Yes,Two or more days a week,No,Yes,No,No,Sometimes,Not interested to say +6/14/2022 22:07,40-45,Sometimes,Sometimes,Two or more days a week,No,Yes,Yes,Yes,No,Yes +6/14/2022 22:07,45-50,Sometimes,Sometimes,Two or more days a week,Yes,Yes,Yes,Maybe,Sometimes,No +6/14/2022 22:08,30-35,No,No,Yes,No,Not at all,Yes,No,Yes,No +6/14/2022 22:08,30-35,No,Yes,Two or more days a week,Yes,No,Yes,No,No,Yes +6/14/2022 22:08,45-50,Sometimes,Sometimes,Yes,Yes,No,Yes,No,No,No +6/14/2022 22:08,40-45,Sometimes,Yes,No,Yes,No,No,Yes,No,Yes +6/14/2022 22:09,45-50,No,Sometimes,No,Yes,No,No,No,No,No +6/14/2022 22:09,40-45,Yes,Sometimes,Two or more days a week,Often,Yes,No,Maybe,Sometimes,Not interested to say +6/14/2022 22:09,30-35,No,No,Yes,Often,No,Yes,No,No,Yes +6/14/2022 22:10,40-45,Yes,Sometimes,Two or more days a week,Yes,No,No,Yes,Yes,Not interested to say +6/14/2022 22:10,35-40,Yes,Sometimes,Yes,Yes,Yes,No,Maybe,Sometimes,Yes +6/14/2022 22:15,40-45,Sometimes,Yes,No,Yes,No,Yes,No,Sometimes,Yes +6/14/2022 22:15,35-40,Yes,Yes,No,Often,Not at all,Yes,No,Sometimes,Not interested to say +6/14/2022 22:15,45-50,Sometimes,Yes,Two or more days a week,No,No,Yes,Yes,Yes,Not interested to say +6/14/2022 22:15,35-40,Yes,Sometimes,Yes,Yes,Not at all,Yes,Maybe,Sometimes,Yes +6/14/2022 22:16,30-35,Yes,Yes,Yes,Yes,Yes,Yes,Yes,Yes,Yes +6/14/2022 22:16,35-40,No,No,Yes,No,No,Yes,Yes,No,Yes +6/14/2022 22:16,30-35,Sometimes,Sometimes,Yes,Often,Not at all,Yes,Maybe,Yes,Not interested to say +6/14/2022 22:16,45-50,Sometimes,Yes,Yes,No,Not at all,No,No,Yes,Not interested to say +6/14/2022 22:17,40-45,No,Sometimes,Yes,Often,Not at all,Yes,Maybe,Yes,Not interested to say +6/14/2022 22:17,35-40,Sometimes,Yes,Two or more days a week,Often,Yes,No,Yes,Sometimes,Not interested to say +6/14/2022 22:17,35-40,No,Sometimes,Yes,No,Yes,No,Yes,No,Yes +6/14/2022 22:17,40-45,Yes,No,Two or more days a week,Yes,No,No,Maybe,Sometimes,Not interested to say +6/14/2022 22:18,35-40,Yes,Yes,Yes,Often,Yes,No,Maybe,No,No +6/14/2022 22:18,40-45,Yes,Sometimes,Two or more days a week,No,Yes,No,Maybe,Sometimes,Not interested to say +6/14/2022 22:18,30-35,Yes,No,Two or more days a week,No,Not at all,Yes,No,Sometimes,Yes +6/14/2022 23:25,35-40,Sometimes,Yes,Two or more days a week,Yes,No,Yes,Maybe,Sometimes,Not interested to say +6/14/2022 23:26,30-35,Yes,Yes,No,Often,Not at all,Yes,Maybe,Sometimes,No +6/14/2022 23:26,45-50,Yes,No,Two or more days a week,No,No,Yes,Maybe,Sometimes,No +6/14/2022 23:26,40-45,Sometimes,No,No,Often,No,Yes,Maybe,Yes,No +6/14/2022 23:27,45-50,No,Sometimes,Two or more days a week,No,No,No,Yes,No,Not interested to say +6/14/2022 23:27,40-45,No,Sometimes,Yes,Often,No,Yes,No,No,No +6/14/2022 23:28,40-45,Sometimes,Sometimes,Two or more days a week,No,No,No,Maybe,No,No +6/14/2022 23:29,40-45,No,Yes,Two or more days a week,No,No,Yes,No,No,Yes +6/14/2022 23:29,45-50,Yes,No,No,Often,Yes,Yes,No,Sometimes,No +6/14/2022 23:30,30-35,Sometimes,Yes,No,Often,Not at all,Yes,No,Sometimes,No +6/14/2022 23:30,35-40,No,Yes,Two or more days a week,Yes,No,Yes,No,Yes,Yes +6/14/2022 23:31,35-40,Yes,Yes,Two or more days a week,Yes,Yes,No,Yes,No,Yes +6/14/2022 23:32,35-40,Yes,No,No,Yes,No,Yes,Maybe,Yes,Not interested to say +6/14/2022 23:32,30-35,No,No,No,Yes,Not at all,No,Yes,Sometimes,Yes +6/14/2022 23:33,35-40,Yes,Yes,No,Yes,No,Yes,No,Sometimes,No +6/14/2022 23:33,40-45,Sometimes,Yes,Yes,Often,Not at all,No,No,Yes,Yes +6/14/2022 23:34,40-45,No,Yes,No,Often,Not at all,No,Yes,No,No +6/14/2022 23:34,40-45,Yes,No,Yes,No,No,No,Yes,No,No +6/14/2022 23:35,35-40,Yes,No,No,Often,Not at all,Yes,No,Sometimes,No +6/14/2022 23:35,40-45,No,No,Two or more days a week,Often,No,Yes,Yes,Sometimes,Yes +6/14/2022 23:36,30-35,Sometimes,No,Yes,No,No,No,Yes,Yes,No +6/14/2022 23:36,30-35,No,No,Yes,Yes,Yes,Yes,Maybe,No,Yes +6/14/2022 23:37,45-50,Sometimes,Yes,Yes,No,No,Yes,Yes,Sometimes,Yes +6/14/2022 23:37,45-50,Yes,No,Yes,No,Not at all,Yes,No,Yes,Not interested to say +6/14/2022 23:37,35-40,Yes,Yes,Yes,No,Not at all,No,Yes,No,Yes +6/14/2022 23:38,40-45,No,Sometimes,Yes,No,No,No,Maybe,Sometimes,Yes +6/14/2022 23:38,45-50,Sometimes,No,Yes,No,No,Yes,Maybe,Sometimes,No +6/14/2022 23:39,35-40,Sometimes,No,No,Yes,No,No,Yes,Yes,No +6/14/2022 23:39,45-50,Yes,No,No,Yes,No,No,Yes,No,Yes +6/14/2022 23:40,45-50,No,No,Yes,No,No,Yes,Maybe,No,Not interested to say +6/14/2022 23:40,30-35,No,No,No,No,Yes,No,Yes,No,No +6/14/2022 23:40,30-35,No,No,Two or more days a week,Often,Yes,No,Yes,Sometimes,No +6/14/2022 23:41,30-35,Sometimes,No,Yes,No,Yes,No,Yes,No,No +6/14/2022 23:41,30-35,Sometimes,Yes,Yes,No,Yes,No,Yes,No,Not interested to say +6/14/2022 23:42,30-35,No,Sometimes,No,Often,No,Yes,Maybe,Sometimes,Not interested to say +6/14/2022 23:43,40-45,No,Yes,No,Yes,No,Yes,No,Yes,No +6/14/2022 23:43,45-50,Sometimes,Yes,Two or more days a week,Yes,Not at all,Yes,Maybe,Yes,Not interested to say +6/14/2022 23:43,40-45,No,Yes,Two or more days a week,No,Yes,No,Yes,Sometimes,Yes +6/14/2022 23:44,45-50,No,No,Yes,Yes,No,Yes,No,Yes,No +6/14/2022 23:44,45-50,No,Yes,Two or more days a week,No,Not at all,Yes,No,Yes,Yes +6/14/2022 23:45,40-45,No,Yes,No,Yes,No,No,Maybe,Sometimes,No +6/14/2022 23:45,45-50,No,No,No,No,No,No,Yes,No,Not interested to say +6/14/2022 23:46,40-45,No,Yes,No,Often,Not at all,Yes,Maybe,Sometimes,Yes +6/14/2022 23:46,30-35,No,Yes,Two or more days a week,Often,Not at all,Yes,Maybe,Sometimes,No +6/14/2022 23:47,45-50,Yes,Sometimes,No,Yes,Not at all,Yes,No,Sometimes,No +6/14/2022 23:47,45-50,Yes,No,Yes,No,Yes,No,Yes,No,Yes +6/14/2022 23:48,35-40,Yes,No,Yes,No,Yes,No,Yes,No,Yes +6/14/2022 23:48,30-35,No,Yes,No,Yes,Not at all,No,Maybe,Sometimes,Not interested to say +6/14/2022 23:48,35-40,No,No,No,No,Not at all,Yes,Maybe,No,Yes +6/14/2022 23:49,45-50,Yes,Yes,No,Yes,No,Yes,Maybe,Sometimes,Yes +6/14/2022 23:49,30-35,No,Yes,Two or more days a week,Yes,No,Yes,No,Yes,Not interested to say +6/14/2022 23:50,30-35,No,Yes,Two or more days a week,Often,Not at all,Yes,No,Sometimes,Yes +6/14/2022 23:50,30-35,No,Yes,No,Often,Yes,Yes,Maybe,Yes,No +6/14/2022 23:52,40-45,No,Yes,No,Yes,Not at all,No,Yes,No,Yes +6/14/2022 23:53,30-35,No,Sometimes,Yes,No,Yes,No,No,Yes,Yes +6/15/2022 0:02,30-35,No,Yes,No,No,Yes,No,No,Yes,Yes +6/15/2022 0:02,30-35,No,Yes,Yes,No,Yes,No,Yes,No,No +6/15/2022 0:02,30-35,Sometimes,Yes,Two or more days a week,Yes,No,Yes,No,Yes,Yes +6/15/2022 0:06,30-35,Yes,Sometimes,Yes,No,Yes,No,Yes,Yes,No +6/15/2022 0:06,30-35,No,No,No,Yes,Yes,No,Yes,Sometimes,No +6/15/2022 0:07,35-40,Yes,No,Yes,No,Not at all,No,No,No,No +6/15/2022 0:07,30-35,Yes,No,Yes,No,Not at all,No,Yes,No,Yes +6/15/2022 0:10,35-40,No,Yes,Yes,No,Yes,No,Yes,No,Yes +6/15/2022 0:11,30-35,Sometimes,No,Yes,Often,No,Yes,No,No,Yes +6/15/2022 0:11,45-50,No,Yes,Two or more days a week,Yes,Not at all,Yes,Maybe,Sometimes,No +6/15/2022 0:12,35-40,No,Yes,No,Yes,No,Yes,No,Sometimes,Not interested to say +6/15/2022 0:12,35-40,Yes,No,Yes,Often,No,Yes,No,Sometimes,No +6/15/2022 0:13,35-40,Yes,No,Yes,Often,Yes,Yes,Yes,Sometimes,No +6/15/2022 0:13,35-40,No,Yes,Two or more days a week,Yes,No,Yes,No,No,Yes +6/15/2022 0:14,40-45,Sometimes,Yes,No,Yes,Not at all,Yes,Maybe,Yes,No +6/15/2022 0:14,40-45,Yes,No,Yes,No,Yes,Yes,No,Sometimes,Not interested to say +6/15/2022 0:14,40-45,Yes,No,Yes,No,Yes,No,Yes,Sometimes,No +6/15/2022 0:14,45-50,Sometimes,No,Yes,Often,No,Yes,No,Sometimes,Yes +6/15/2022 0:16,35-40,No,Yes,No,Yes,No,Yes,Yes,No,Yes +6/15/2022 0:16,35-40,Sometimes,Yes,No,Yes,No,Yes,Maybe,Yes,Yes +6/15/2022 0:17,30-35,No,Sometimes,Yes,Yes,Yes,No,No,Yes,Not interested to say +6/15/2022 0:17,40-45,Yes,Sometimes,No,Yes,No,No,Yes,No,Yes +6/15/2022 0:17,45-50,Yes,No,Two or more days a week,Yes,No,No,Yes,No,Yes +6/15/2022 0:18,45-50,Sometimes,Sometimes,Yes,Often,Yes,No,Maybe,Yes,Not interested to say +6/15/2022 0:19,25-30,Yes,No,Yes,No,Yes,Yes,Yes,Sometimes,Yes +6/15/2022 0:19,25-30,Yes,No,Yes,Yes,Yes,Yes,Yes,No,Yes +6/15/2022 0:19,25-30,Sometimes,Sometimes,Two or more days a week,No,Not at all,Yes,No,No,Yes +6/15/2022 0:20,25-30,Yes,Yes,No,Yes,No,Yes,Maybe,Sometimes,Yes +6/15/2022 0:20,30-35,Yes,No,Yes,Often,Not at all,Yes,Maybe,Yes,Not interested to say +6/15/2022 0:20,25-30,Yes,No,Yes,No,Not at all,No,No,Yes,Yes +6/15/2022 0:20,25-30,No,No,Yes,Often,No,No,Yes,Yes,Yes +6/15/2022 0:21,30-35,Sometimes,Yes,Two or more days a week,No,No,No,Maybe,Yes,Not interested to say +6/15/2022 0:21,25-30,Sometimes,Yes,Yes,No,Yes,Yes,Maybe,Sometimes,Not interested to say +6/15/2022 0:22,30-35,Yes,No,No,Yes,Yes,Yes,Maybe,Sometimes,No +6/15/2022 0:22,40-45,Yes,Yes,No,Often,Not at all,No,Yes,Sometimes,Yes +6/15/2022 0:23,40-45,Yes,Sometimes,Two or more days a week,No,Yes,Yes,No,Sometimes,No +6/15/2022 0:23,40-45,Yes,Sometimes,No,No,Yes,No,Yes,Yes,No +6/15/2022 0:24,25-30,No,Sometimes,No,No,Not at all,Yes,No,No,No +6/15/2022 0:24,30-35,Yes,Sometimes,Yes,Often,No,Yes,Maybe,No,Yes +6/15/2022 0:25,40-45,Yes,No,Two or more days a week,Yes,Not at all,No,Maybe,Yes,Not interested to say +6/15/2022 0:25,40-45,Yes,No,Yes,Yes,Yes,No,Yes,Sometimes,Not interested to say +6/15/2022 0:25,35-40,Yes,No,Yes,Yes,No,No,Yes,Yes,Not interested to say +6/15/2022 0:26,45-50,Yes,Yes,No,No,Not at all,Yes,Maybe,No,Yes +6/15/2022 0:26,25-30,Yes,No,No,No,Not at all,No,Yes,Sometimes,Yes +6/15/2022 0:26,30-35,No,No,Yes,Often,No,Yes,No,Yes,Yes +6/15/2022 0:27,40-45,Yes,Sometimes,No,Yes,No,No,No,Yes,No +6/15/2022 0:27,25-30,Sometimes,Sometimes,Two or more days a week,Often,Not at all,No,Yes,Sometimes,Yes +6/15/2022 0:27,30-35,Sometimes,No,No,Yes,No,Yes,No,Sometimes,No +6/15/2022 0:27,40-45,No,Yes,Two or more days a week,No,Not at all,No,Yes,Yes,Yes +6/15/2022 0:27,25-30,Yes,Sometimes,No,Yes,Yes,No,No,Yes,Yes +6/15/2022 0:28,40-45,Yes,No,No,No,Not at all,Yes,Maybe,Yes,No +6/15/2022 0:28,25-30,No,Yes,No,Yes,Yes,No,No,No,Yes +6/15/2022 0:28,35-40,Yes,No,Yes,Often,Yes,No,Maybe,Sometimes,Yes +6/15/2022 0:28,40-45,No,Sometimes,Yes,Often,No,No,Yes,Sometimes,No +6/15/2022 0:28,40-45,No,Yes,No,No,No,Yes,No,Yes,No +6/15/2022 0:29,40-45,Yes,No,Yes,Yes,No,No,Maybe,No,Not interested to say +6/15/2022 0:29,30-35,Sometimes,Yes,No,No,Yes,No,Maybe,Yes,No +6/15/2022 0:29,35-40,Sometimes,Yes,Yes,No,Yes,No,Yes,Sometimes,No +6/15/2022 0:29,25-30,Sometimes,Sometimes,Yes,Often,Yes,Yes,Maybe,Sometimes,Yes +6/15/2022 0:29,35-40,Sometimes,No,Yes,Yes,Not at all,No,Yes,Yes,No +6/15/2022 0:30,45-50,No,Sometimes,Two or more days a week,No,Not at all,No,Maybe,Sometimes,Not interested to say +6/15/2022 0:30,35-40,Yes,No,Two or more days a week,Yes,No,No,Maybe,Yes,No +6/15/2022 0:30,35-40,Yes,No,Two or more days a week,Often,Not at all,Yes,Maybe,Yes,No +6/15/2022 0:30,40-45,No,Yes,Two or more days a week,Yes,No,Yes,No,Yes,No +6/15/2022 0:30,40-45,No,Sometimes,No,No,No,Yes,Yes,Yes,No +6/15/2022 0:31,40-45,Yes,No,Yes,Often,Yes,Yes,Yes,Sometimes,No +6/15/2022 0:31,35-40,Sometimes,Sometimes,No,Yes,No,No,No,No,Yes +6/15/2022 0:31,30-35,No,Sometimes,Two or more days a week,Often,No,No,Yes,No,Yes +6/15/2022 0:31,35-40,Sometimes,No,Yes,No,No,No,Yes,No,No +6/15/2022 0:31,30-35,Yes,No,Two or more days a week,No,Not at all,No,Yes,No,Not interested to say +6/15/2022 0:32,45-50,Yes,No,Two or more days a week,Yes,Not at all,No,Yes,Sometimes,Yes +6/15/2022 0:32,35-40,No,Yes,Yes,Often,Not at all,Yes,Yes,No,Yes +6/15/2022 0:32,35-40,Sometimes,No,Yes,Often,Not at all,Yes,No,Sometimes,No +6/15/2022 0:32,45-50,Yes,Sometimes,Two or more days a week,Yes,Not at all,Yes,Yes,No,No +6/15/2022 0:33,40-45,No,Sometimes,Two or more days a week,No,Not at all,Yes,Maybe,No,Yes +6/15/2022 0:33,45-50,Sometimes,No,No,Yes,Yes,No,No,Sometimes,Not interested to say +6/15/2022 0:33,45-50,No,Yes,No,Yes,Not at all,Yes,Maybe,No,Not interested to say +6/15/2022 0:33,40-45,No,Yes,Yes,No,Not at all,No,Maybe,No,Yes +6/15/2022 0:34,35-40,Sometimes,No,Two or more days a week,No,No,No,Yes,Sometimes,Not interested to say +6/15/2022 0:34,45-50,Yes,No,Yes,Often,No,Yes,Maybe,Yes,No +6/15/2022 0:35,30-35,Sometimes,No,Yes,No,No,Yes,Maybe,Sometimes,Not interested to say +6/15/2022 0:35,25-30,Sometimes,No,Two or more days a week,No,Yes,No,No,Sometimes,No +6/15/2022 0:35,25-30,Sometimes,Yes,Yes,Often,Not at all,No,Yes,Sometimes,Not interested to say +6/15/2022 0:36,25-30,No,Yes,No,No,Not at all,No,Yes,Yes,Yes +6/15/2022 0:36,45-50,No,Sometimes,Two or more days a week,No,No,No,No,Yes,No +6/15/2022 0:37,35-40,Sometimes,Yes,Yes,No,Yes,No,Yes,No,Not interested to say +6/15/2022 0:37,25-30,Yes,No,No,Yes,Not at all,No,Yes,Yes,No +6/15/2022 0:38,30-35,No,Sometimes,Two or more days a week,No,Yes,No,Maybe,Sometimes,No +6/15/2022 0:39,25-30,Sometimes,No,No,Often,Yes,No,Maybe,Sometimes,Yes +6/15/2022 0:39,25-30,No,No,Two or more days a week,Yes,No,No,Maybe,No,Not interested to say +6/15/2022 0:40,45-50,Yes,No,Yes,Often,No,Yes,No,Yes,No +6/15/2022 0:40,25-30,Sometimes,No,Two or more days a week,No,Not at all,Yes,No,No,Not interested to say +6/15/2022 1:02,35-40,Yes,No,Yes,Often,Not at all,Yes,No,Yes,Not interested to say +6/15/2022 1:02,40-45,Yes,No,Yes,Yes,Not at all,No,Yes,No,Not interested to say +6/15/2022 1:03,45-50,No,No,Yes,Often,No,Yes,Maybe,Yes,No +6/15/2022 1:05,25-30,No,Yes,No,Yes,Not at all,No,Yes,No,Yes +6/15/2022 1:08,40-45,Yes,No,No,Yes,Not at all,No,Yes,No,No +6/15/2022 1:08,30-35,No,Sometimes,Two or more days a week,Often,No,Yes,No,Sometimes,Yes +6/15/2022 1:09,25-30,Sometimes,No,Yes,No,Yes,No,Yes,No,Not interested to say +6/15/2022 1:09,35-40,Yes,Sometimes,Yes,Yes,No,No,Yes,No,Yes +6/15/2022 1:10,45-50,Yes,No,No,Yes,No,Yes,Maybe,Yes,No +6/15/2022 1:13,25-30,No,Sometimes,Yes,No,No,Yes,Maybe,Sometimes,Yes +6/14/2022 22:18,40-45,No,No,Two or more days a week,Yes,No,Yes,No,Yes,Yes +6/14/2022 22:19,30-35,Yes,Yes,Two or more days a week,Yes,No,No,Yes,Yes,No +6/14/2022 22:19,40-45,No,No,Yes,Yes,Yes,Yes,No,Yes,No +6/14/2022 22:19,35-40,Yes,Yes,Two or more days a week,Yes,No,Yes,Maybe,Yes,No +6/14/2022 22:19,40-45,Yes,Yes,Yes,Yes,No,Yes,No,No,No +6/14/2022 22:19,35-40,Sometimes,Sometimes,No,No,No,Yes,No,Yes,Yes +6/14/2022 22:19,45-50,Yes,Yes,No,Yes,Yes,Yes,No,No,Yes +6/14/2022 22:19,35-40,Sometimes,Sometimes,Two or more days a week,Yes,Yes,Yes,No,Yes,No +6/14/2022 22:20,30-35,Yes,Yes,Yes,No,Yes,No,No,Yes,Yes +6/14/2022 22:20,35-40,Yes,Yes,Two or more days a week,No,No,Yes,No,Sometimes,Not interested to say +6/15/2022 22:18,30-35,No,No,Yes,Yes,No,No,Yes,Yes,No +6/15/2022 22:24,35-40,Sometimes,Sometimes,No,Yes,Yes,Yes,Yes,Sometimes,No +6/15/2022 22:24,30-35,Sometimes,Sometimes,No,Yes,No,Yes,No,Yes,Yes +6/15/2022 22:24,45-50,No,No,Two or more days a week,Yes,Not at all,Yes,Maybe,Yes,Yes +6/15/2022 22:24,40-45,Sometimes,Sometimes,Yes,No,No,Yes,No,No,No +6/15/2022 22:24,35-40,No,No,Yes,Often,Not at all,Yes,No,Sometimes,No +6/15/2022 22:24,35-40,Yes,Yes,Yes,No,Yes,Yes,Yes,Sometimes,Yes +6/15/2022 22:24,40-45,Yes,Yes,Yes,No,No,Yes,No,No,Not interested to say +6/15/2022 22:24,35-40,Yes,Yes,Yes,Yes,Not at all,No,Yes,Sometimes,Yes +6/15/2022 22:24,40-45,Yes,Yes,Yes,No,Not at all,Yes,Maybe,No,No +6/15/2022 0:34,45-50,Sometimes,No,Yes,No,Not at all,No,No,Sometimes,Not interested to say +6/15/2022 0:34,30-35,Yes,Yes,No,Yes,No,Yes,Maybe,No,Not interested to say +6/15/2022 0:35,25-30,Sometimes,Yes,Two or more days a week,Yes,No,No,Maybe,No,Yes +6/15/2022 0:35,25-30,Sometimes,Sometimes,Yes,Yes,No,No,Yes,Sometimes,Not interested to say +6/15/2022 0:35,25-30,Sometimes,Yes,Two or more days a week,Yes,Yes,Yes,Maybe,Yes,No +6/15/2022 0:36,45-50,No,No,Two or more days a week,Yes,Not at all,Yes,Maybe,Sometimes,Not interested to say +6/15/2022 0:36,35-40,No,Sometimes,Yes,No,Not at all,No,No,Sometimes,No +6/15/2022 0:37,25-30,Sometimes,No,Yes,Yes,No,No,Yes,Sometimes,Not interested to say +6/15/2022 0:37,30-35,Yes,No,Two or more days a week,Yes,Yes,No,Yes,Yes,Yes +6/15/2022 0:38,25-30,No,No,Two or more days a week,No,Not at all,No,No,Yes,No +6/15/2022 0:39,25-30,Sometimes,No,No,No,Yes,No,Yes,No,Not interested to say +6/15/2022 0:39,45-50,No,No,No,Yes,Yes,No,Yes,Yes,No +6/15/2022 0:40,25-30,Yes,No,Yes,Yes,No,No,Maybe,Sometimes,No +6/15/2022 0:40,35-40,Sometimes,No,Two or more days a week,Yes,No,No,Maybe,Sometimes,Yes +6/15/2022 1:02,40-45,Yes,Yes,Yes,Yes,Not at all,No,Maybe,No,Not interested to say +6/15/2022 1:02,45-50,Yes,No,Yes,No,Not at all,Yes,No,Yes,No +6/15/2022 1:03,25-30,No,Sometimes,Two or more days a week,Often,Not at all,Yes,No,No,Not interested to say +6/15/2022 1:05,40-45,No,No,Yes,No,No,Yes,No,Yes,Not interested to say +6/15/2022 1:08,30-35,Yes,Sometimes,No,No,Not at all,No,Yes,No,Not interested to say +6/15/2022 1:08,25-30,No,No,Two or more days a week,Yes,Not at all,Yes,Maybe,Yes,No +6/15/2022 1:09,35-40,Sometimes,Sometimes,Yes,No,No,No,Yes,No,Yes +6/15/2022 1:09,45-50,Yes,No,No,No,Yes,No,Yes,No,No +6/15/2022 1:10,25-30,Yes,Yes,Two or more days a week,Yes,No,Yes,No,Sometimes,Yes +6/15/2022 1:13,40-45,No,No,No,Often,No,No,Yes,No,Not interested to say +6/14/2022 22:18,30-35,No,Yes,Two or more days a week,Yes,No,No,Yes,No,Yes +6/14/2022 22:19,40-45,Yes,Yes,Yes,No,No,Yes,Maybe,Yes,No +6/14/2022 22:19,35-40,No,Sometimes,Two or more days a week,Often,No,Yes,Maybe,Sometimes,Yes +6/14/2022 22:19,40-45,Yes,Yes,Yes,Yes,Yes,Yes,No,Yes,Yes +6/14/2022 22:19,35-40,Yes,Sometimes,Yes,Often,No,No,Yes,Yes,No +6/14/2022 22:19,45-50,Sometimes,Yes,Yes,No,No,Yes,No,Yes,No +6/14/2022 22:19,35-40,Yes,Yes,No,No,No,Yes,Maybe,Yes,No +6/14/2022 22:19,30-35,Sometimes,No,No,Yes,Yes,Yes,No,No,No +6/14/2022 22:20,35-40,Yes,Sometimes,Two or more days a week,Often,Yes,Yes,No,Yes,Yes +6/14/2022 22:20,30-35,Yes,Sometimes,Yes,Often,Yes,Yes,No,No,Yes +6/15/2022 22:18,35-40,No,No,Yes,Yes,No,Yes,No,Yes,No +6/15/2022 22:24,30-35,Sometimes,Sometimes,No,No,No,No,No,Yes,Yes +6/15/2022 22:24,45-50,Sometimes,No,Yes,Yes,Yes,Yes,No,Sometimes,Not interested to say +6/15/2022 22:24,40-45,No,Yes,Two or more days a week,Yes,No,No,Yes,Yes,No +6/15/2022 22:24,35-40,Sometimes,Yes,Two or more days a week,No,Not at all,Yes,Yes,Sometimes,No +6/15/2022 22:24,35-40,No,Yes,Yes,,No,Yes,No,Yes,Yes +6/15/2022 22:24,40-45,Yes,Yes,Two or more days a week,,Not at all,Yes,,Yes,Yes +6/15/2022 22:24,35-40,Yes,,Yes,,Yes,Yes,,No,No +6/15/2022 22:24,40-45,Yes,,No,,No,Yes,,Sometimes,No +6/14/2022 20:02,35-40,Yes,Yes,Two or more days a week,Yes,Yes,Yes,No,Yes,Yes +6/14/2022 20:03,40-45,Yes,No,No,Yes,Yes,No,Yes,Yes,No +6/14/2022 20:04,35-40,Yes,No,Yes,Yes,Yes,Yes,No,Sometimes,No +6/14/2022 20:05,35-40,Yes,Yes,Yes,Yes,No,Yes,Maybe,No,No +6/14/2022 20:06,40-45,Yes,No,Two or more days a week,Yes,No,Yes,No,Yes,No +6/14/2022 20:06,30-35,No,No,Yes,Yes,Yes,Yes,No,No,Yes +6/14/2022 20:06,40-45,No,Yes,No,No,No,Yes,No,No,Yes +6/14/2022 20:07,35-40,Yes,No,Yes,Yes,No,Yes,No,No,No +6/14/2022 20:07,35-40,Yes,Yes,No,Yes,No,No,No,No,Yes +6/14/2022 20:11,30-35,Sometimes,Yes,Two or more days a week,No,Yes,Yes,No,Sometimes,Not interested to say +6/14/2022 22:04,30-35,Yes,Sometimes,Two or more days a week,No,Yes,No,Yes,No,No +6/14/2022 22:05,35-40,No,Yes,Two or more days a week,Yes,Yes,Yes,Yes,No,No +6/14/2022 22:05,40-45,Yes,No,No,Yes,No,Yes,No,No,Yes +6/14/2022 22:05,45-50,No,Yes,No,Yes,No,Yes,Maybe,Yes,Yes +6/14/2022 22:06,45-50,No,No,No,Yes,No,Yes,No,Sometimes,No +6/14/2022 22:06,30-35,Yes,No,Yes,No,Yes,Yes,No,Yes,No +6/14/2022 22:06,35-40,Sometimes,Sometimes,Yes,Often,Yes,No,Yes,Yes,Yes +6/14/2022 22:06,40-45,Yes,Yes,Two or more days a week,No,Yes,No,No,Sometimes,Not interested to say +6/14/2022 22:07,40-45,Sometimes,Sometimes,Two or more days a week,No,Yes,Yes,Yes,No,Yes +6/14/2022 22:07,45-50,Sometimes,Sometimes,Two or more days a week,Yes,Yes,Yes,Maybe,Sometimes,No +6/14/2022 22:08,30-35,No,No,Yes,No,Not at all,Yes,No,Yes,No +6/14/2022 22:08,30-35,No,Yes,Two or more days a week,Yes,No,Yes,No,No,Yes +6/14/2022 22:08,45-50,Sometimes,Sometimes,Yes,Yes,No,Yes,No,No,No +6/14/2022 22:08,40-45,Sometimes,Yes,No,Yes,No,No,Yes,No,Yes +6/14/2022 22:09,45-50,No,Sometimes,No,Yes,No,No,No,No,No +6/14/2022 22:09,40-45,Yes,Sometimes,Two or more days a week,Often,Yes,No,Maybe,Sometimes,Not interested to say +6/14/2022 22:09,30-35,No,No,Yes,Often,No,Yes,No,No,Yes +6/14/2022 22:10,40-45,Yes,Sometimes,Two or more days a week,Yes,No,No,Yes,Yes,Not interested to say +6/14/2022 22:10,35-40,Yes,Sometimes,Yes,Yes,Yes,No,Maybe,Sometimes,Yes +6/14/2022 22:15,40-45,Sometimes,Yes,No,Yes,No,Yes,No,Sometimes,Yes +6/14/2022 22:15,35-40,Yes,Yes,No,Often,Not at all,Yes,No,Sometimes,Not interested to say +6/14/2022 22:15,45-50,Sometimes,Yes,Two or more days a week,No,No,Yes,Yes,Yes,Not interested to say +6/14/2022 22:15,35-40,Yes,Sometimes,Yes,Yes,Not at all,Yes,Maybe,Sometimes,Yes +6/14/2022 22:16,30-35,Yes,Yes,Yes,Yes,Yes,Yes,Yes,Yes,Yes +6/14/2022 22:16,35-40,No,No,Yes,No,No,Yes,Yes,No,Yes +6/14/2022 22:16,30-35,Sometimes,Sometimes,Yes,Often,Not at all,Yes,Maybe,Yes,Not interested to say +6/14/2022 22:16,45-50,Sometimes,Yes,Yes,No,Not at all,No,No,Yes,Not interested to say +6/14/2022 22:17,40-45,No,Sometimes,Yes,Often,Not at all,Yes,Maybe,Yes,Not interested to say +6/14/2022 22:17,35-40,Sometimes,Yes,Two or more days a week,Often,Yes,No,Yes,Sometimes,Not interested to say +6/14/2022 22:17,35-40,No,Sometimes,Yes,No,Yes,No,Yes,No,Yes +6/14/2022 22:17,40-45,Yes,No,Two or more days a week,Yes,No,No,Maybe,Sometimes,Not interested to say +6/14/2022 22:18,35-40,Yes,Yes,Yes,Often,Yes,No,Maybe,No,No +6/14/2022 22:18,40-45,Yes,Sometimes,Two or more days a week,No,Yes,No,Maybe,Sometimes,Not interested to say +6/14/2022 22:18,30-35,Yes,No,Two or more days a week,No,Not at all,Yes,No,Sometimes,Yes +6/14/2022 23:25,35-40,Sometimes,Yes,Two or more days a week,Yes,No,Yes,Maybe,Sometimes,Not interested to say +6/14/2022 23:26,30-35,Yes,Yes,No,Often,Not at all,Yes,Maybe,Sometimes,No +6/14/2022 23:26,45-50,Yes,No,Two or more days a week,No,No,Yes,Maybe,Sometimes,No +6/14/2022 23:26,40-45,Sometimes,No,No,Often,No,Yes,Maybe,Yes,No +6/14/2022 23:27,45-50,No,Sometimes,Two or more days a week,No,No,No,Yes,No,Not interested to say +6/14/2022 23:27,40-45,No,Sometimes,Yes,Often,No,Yes,No,No,No +6/14/2022 23:28,40-45,Sometimes,Sometimes,Two or more days a week,No,No,No,Maybe,No,No +6/14/2022 23:29,40-45,No,Yes,Two or more days a week,No,No,Yes,No,No,Yes +6/14/2022 23:29,45-50,Yes,No,No,Often,Yes,Yes,No,Sometimes,No +6/14/2022 23:30,30-35,Sometimes,Yes,No,Often,Not at all,Yes,No,Sometimes,No +6/14/2022 23:30,35-40,No,Yes,Two or more days a week,Yes,No,Yes,No,Yes,Yes +6/14/2022 23:31,35-40,Yes,No,Two or more days a week,No,No,Yes,Maybe,Sometimes,No +6/14/2022 23:32,35-40,Sometimes,No,No,Often,No,Yes,Maybe,Yes,No +6/14/2022 23:32,30-35,No,Sometimes,Two or more days a week,No,No,No,Yes,No,Not interested to say +6/14/2022 23:33,35-40,No,Sometimes,Yes,Often,No,Yes,No,No,No +6/14/2022 23:33,40-45,Sometimes,Sometimes,Two or more days a week,No,No,No,Maybe,No,No +6/14/2022 23:34,40-45,No,Yes,Two or more days a week,No,No,Yes,No,No,Yes +6/14/2022 23:34,40-45,Yes,No,No,Often,Yes,Yes,No,Sometimes,No +6/14/2022 23:35,35-40,Sometimes,Yes,No,Often,Not at all,Yes,No,Sometimes,No +6/14/2022 23:35,40-45,No,Yes,Two or more days a week,Yes,No,Yes,No,Yes,Yes +6/14/2022 23:36,30-35,Yes,Yes,Yes,Often,Yes,No,Maybe,No,No +6/14/2022 23:36,30-35,Yes,Sometimes,Two or more days a week,No,Yes,No,Maybe,Sometimes,Not interested to say +6/14/2022 23:37,45-50,Yes,No,Two or more days a week,No,Not at all,Yes,No,Sometimes,Yes +6/14/2022 23:37,45-50,Sometimes,Yes,Two or more days a week,Yes,No,Yes,Maybe,Sometimes,Not interested to say +6/14/2022 23:37,35-40,Yes,Yes,No,Often,Not at all,Yes,Maybe,Sometimes,No +6/14/2022 23:38,40-45,Yes,No,Two or more days a week,No,No,Yes,Maybe,Sometimes,No +6/14/2022 23:38,45-50,Sometimes,No,No,Often,No,Yes,Maybe,Yes,No +6/14/2022 23:39,35-40,No,Sometimes,Two or more days a week,No,No,No,Yes,No,Not interested to say +6/14/2022 23:39,45-50,No,Sometimes,Yes,Often,No,Yes,No,No,No +6/14/2022 23:40,45-50,Sometimes,Sometimes,Two or more days a week,No,No,No,Maybe,No,No +6/14/2022 23:40,30-35,No,Yes,Two or more days a week,No,No,Yes,No,No,Yes +6/14/2022 23:40,30-35,Yes,No,No,Often,Yes,Yes,No,Sometimes,No +6/14/2022 23:41,30-35,Sometimes,Yes,No,Often,Not at all,Yes,No,Sometimes,No +6/14/2022 23:41,30-35,No,Yes,Two or more days a week,Yes,No,Yes,No,Yes,Yes +6/14/2022 23:42,30-35,Yes,No,Two or more days a week,No,No,Yes,Maybe,Sometimes,No +6/14/2022 23:43,40-45,Sometimes,No,No,Often,No,Yes,Maybe,Yes,No +6/14/2022 23:43,45-50,No,Sometimes,Two or more days a week,No,No,No,Yes,No,Not interested to say +6/14/2022 23:43,40-45,No,Sometimes,Yes,Often,No,Yes,No,No,No +6/14/2022 23:44,45-50,Sometimes,Sometimes,Two or more days a week,No,No,No,Maybe,No,No +6/14/2022 23:44,45-50,No,Yes,Two or more days a week,No,No,Yes,No,No,Yes +6/14/2022 23:45,40-45,Yes,No,No,Often,Yes,Yes,No,Sometimes,No +6/14/2022 23:45,45-50,Sometimes,Yes,No,Often,Not at all,Yes,No,Sometimes,No +6/14/2022 23:46,40-45,No,Yes,Two or more days a week,Yes,No,Yes,No,Yes,Yes +6/14/2022 23:46,30-35,Sometimes,Yes,Two or more days a week,Yes,No,Yes,Maybe,Sometimes,Not interested to say +6/14/2022 23:47,45-50,Yes,Yes,No,Often,Not at all,Yes,Maybe,Sometimes,No +6/14/2022 23:47,45-50,Yes,No,Two or more days a week,No,No,Yes,Maybe,Sometimes,No +6/14/2022 23:48,35-40,Sometimes,No,No,Often,No,Yes,Maybe,Yes,No +6/14/2022 23:48,30-35,No,Sometimes,Two or more days a week,No,No,No,Yes,No,Not interested to say +6/14/2022 23:48,35-40,No,Sometimes,Yes,Often,No,Yes,No,No,No +6/14/2022 23:49,45-50,Sometimes,Sometimes,Two or more days a week,No,No,No,Maybe,No,No +6/14/2022 23:49,30-35,No,Yes,Two or more days a week,No,No,Yes,No,No,Yes +6/14/2022 23:50,30-35,Yes,No,No,Often,Yes,Yes,No,Sometimes,No +6/14/2022 23:50,30-35,Sometimes,Yes,No,Often,Not at all,Yes,No,Sometimes,No +6/14/2022 23:52,40-45,No,Yes,Two or more days a week,Yes,No,Yes,No,Yes,Yes +6/14/2022 23:53,30-35,Yes,No,Two or more days a week,No,No,Yes,Maybe,Sometimes,No +6/15/2022 0:02,30-35,Sometimes,No,No,Often,No,Yes,Maybe,Yes,No +6/15/2022 0:02,30-35,No,Sometimes,Two or more days a week,No,No,No,Yes,No,Not interested to say +6/15/2022 0:02,30-35,No,Sometimes,Yes,Often,No,Yes,No,No,No +6/15/2022 0:06,30-35,Sometimes,Sometimes,Two or more days a week,No,No,No,Maybe,No,No +6/15/2022 0:06,30-35,No,Yes,Two or more days a week,No,No,Yes,No,No,Yes +6/15/2022 0:07,35-40,No,Sometimes,Yes,Often,No,Yes,No,No,No +6/15/2022 0:07,30-35,Sometimes,Sometimes,Two or more days a week,No,No,No,Maybe,No,No +6/15/2022 0:10,35-40,No,Yes,Two or more days a week,No,No,Yes,No,No,Yes +6/15/2022 0:11,30-35,Yes,No,No,Often,Yes,Yes,No,Sometimes,No +6/15/2022 0:11,45-50,Sometimes,Yes,No,Often,Not at all,Yes,No,Sometimes,No +6/15/2022 0:12,35-40,No,Yes,Two or more days a week,Yes,No,Yes,No,Yes,Yes +6/15/2022 0:12,35-40,Yes,No,Two or more days a week,No,No,Yes,Maybe,Sometimes,No +6/15/2022 0:13,35-40,Sometimes,No,No,Often,No,Yes,Maybe,Yes,No +6/15/2022 0:13,35-40,No,Sometimes,Two or more days a week,No,No,No,Yes,No,Not interested to say +6/15/2022 0:14,40-45,No,Sometimes,Yes,Often,No,Yes,No,No,No +6/15/2022 0:14,40-45,Sometimes,Sometimes,Two or more days a week,No,No,No,Maybe,No,No +6/15/2022 0:14,40-45,No,Yes,Two or more days a week,No,No,Yes,No,No,Yes +6/15/2022 0:14,45-50,No,No,Yes,Often,No,Yes,No,No,Yes +6/15/2022 0:16,35-40,Yes,Sometimes,Two or more days a week,Yes,No,No,Yes,Yes,Not interested to say +6/15/2022 0:16,35-40,Yes,Sometimes,Yes,Yes,Yes,No,Maybe,Sometimes,Yes +6/15/2022 0:17,30-35,Sometimes,Yes,No,Yes,No,Yes,No,Sometimes,Yes +6/15/2022 0:17,40-45,Yes,Yes,No,Often,Not at all,Yes,No,Sometimes,Not interested to say +6/15/2022 0:17,45-50,Sometimes,Yes,Two or more days a week,No,No,Yes,Yes,Yes,Not interested to say +6/15/2022 0:18,45-50,Yes,Sometimes,Yes,Yes,Not at all,Yes,Maybe,Sometimes,Yes +6/15/2022 0:19,25-30,Yes,Yes,Yes,Yes,Yes,Yes,Yes,Yes,Yes +6/15/2022 0:19,25-30,No,No,Yes,No,No,Yes,Yes,No,Yes +6/15/2022 0:19,25-30,Sometimes,Sometimes,Yes,Often,Not at all,Yes,Maybe,Yes,Not interested to say +6/15/2022 0:20,25-30,Sometimes,Yes,Yes,No,Not at all,No,No,Yes,Not interested to say +6/15/2022 0:20,30-35,No,Sometimes,Yes,Often,Not at all,Yes,Maybe,Yes,Not interested to say +6/15/2022 0:20,25-30,Sometimes,Yes,Two or more days a week,Often,Yes,No,Yes,Sometimes,Not interested to say +6/15/2022 0:20,25-30,No,Sometimes,Yes,No,Yes,No,Yes,No,Yes +6/15/2022 0:21,30-35,Yes,No,Two or more days a week,Yes,No,No,Maybe,Sometimes,Not interested to say +6/15/2022 0:21,25-30,Yes,Yes,Yes,Often,Yes,No,Maybe,No,No +6/15/2022 0:22,30-35,Yes,Sometimes,Two or more days a week,No,Yes,No,Maybe,Sometimes,Not interested to say +6/15/2022 0:22,40-45,Yes,No,Two or more days a week,No,Not at all,Yes,No,Sometimes,Yes +6/15/2022 0:23,40-45,Sometimes,Yes,Two or more days a week,Yes,No,Yes,Maybe,Sometimes,Not interested to say +6/15/2022 0:23,40-45,Yes,Yes,No,Often,Not at all,Yes,Maybe,Sometimes,No +6/15/2022 0:24,25-30,Yes,No,Two or more days a week,No,No,Yes,Maybe,Sometimes,No +6/15/2022 0:24,30-35,Sometimes,No,No,Often,No,Yes,Maybe,Yes,No +6/15/2022 0:25,40-45,No,Sometimes,Two or more days a week,No,No,No,Yes,No,Not interested to say +6/15/2022 0:25,40-45,No,Sometimes,Yes,Often,No,Yes,No,No,No +6/15/2022 0:25,35-40,Sometimes,Sometimes,Two or more days a week,No,No,No,Maybe,No,No +6/15/2022 0:26,45-50,No,Yes,Two or more days a week,No,No,Yes,No,No,Yes +6/15/2022 0:26,25-30,Yes,No,No,Often,Yes,Yes,No,Sometimes,No +6/15/2022 0:26,30-35,Sometimes,Yes,No,Often,Not at all,Yes,No,Sometimes,No +6/15/2022 0:27,40-45,No,Yes,Two or more days a week,Yes,No,Yes,No,Yes,Yes +6/15/2022 0:27,25-30,Yes,No,Two or more days a week,No,No,Yes,Maybe,Sometimes,No +6/15/2022 0:27,30-35,Sometimes,No,No,Often,No,Yes,Maybe,Yes,No +6/15/2022 0:27,40-45,No,Sometimes,Two or more days a week,No,No,No,Yes,No,Not interested to say +6/15/2022 0:27,25-30,No,Sometimes,Yes,Often,No,Yes,No,No,No +6/15/2022 0:28,40-45,Sometimes,Sometimes,Two or more days a week,No,No,No,Maybe,No,No +6/15/2022 0:28,25-30,No,Yes,Two or more days a week,No,No,Yes,No,No,Yes +6/15/2022 0:28,35-40,Yes,No,No,Often,Yes,Yes,No,Sometimes,No +6/15/2022 0:28,40-45,Sometimes,Yes,No,Often,Not at all,Yes,No,Sometimes,No +6/15/2022 0:28,40-45,No,Yes,Two or more days a week,Yes,No,Yes,No,Yes,Yes +6/15/2022 0:29,40-45,Yes,Yes,Yes,Often,Yes,No,Maybe,No,No +6/15/2022 0:29,30-35,Yes,Sometimes,Two or more days a week,No,Yes,No,Maybe,Sometimes,Not interested to say +6/15/2022 0:29,35-40,Yes,No,Two or more days a week,No,Not at all,Yes,No,Sometimes,Yes +6/15/2022 0:29,25-30,Sometimes,Yes,Two or more days a week,Yes,No,Yes,Maybe,Sometimes,Not interested to say +6/15/2022 0:29,35-40,Yes,Yes,No,Often,Not at all,Yes,Maybe,Sometimes,No +6/15/2022 0:30,45-50,Yes,No,Two or more days a week,No,No,Yes,Maybe,Sometimes,No +6/15/2022 0:30,35-40,Sometimes,No,No,Often,No,Yes,Maybe,Yes,No +6/15/2022 0:30,35-40,No,Sometimes,Two or more days a week,No,No,No,Yes,No,Not interested to say +6/15/2022 0:30,40-45,No,Sometimes,Yes,Often,No,Yes,No,No,No +6/15/2022 0:30,40-45,Sometimes,Sometimes,Two or more days a week,No,No,No,Maybe,No,No +6/15/2022 0:31,40-45,No,Yes,Two or more days a week,No,No,Yes,No,No,Yes +6/15/2022 0:31,35-40,Yes,No,No,Often,Yes,Yes,No,Sometimes,No +6/15/2022 0:31,30-35,Sometimes,Yes,No,Often,Not at all,Yes,No,Sometimes,No +6/15/2022 0:31,35-40,No,Yes,Two or more days a week,Yes,No,Yes,No,Yes,Yes +6/15/2022 0:31,30-35,Yes,No,Two or more days a week,No,No,Yes,Maybe,Sometimes,No +6/15/2022 0:32,45-50,Sometimes,No,No,Often,No,Yes,Maybe,Yes,No +6/15/2022 0:32,35-40,No,Sometimes,Two or more days a week,No,No,No,Yes,No,Not interested to say +6/15/2022 0:32,35-40,No,Sometimes,Yes,Often,No,Yes,No,No,No +6/15/2022 0:32,45-50,Sometimes,Sometimes,Two or more days a week,No,No,No,Maybe,No,No +6/15/2022 0:33,40-45,No,Yes,Two or more days a week,No,No,Yes,No,No,Yes +6/15/2022 0:33,45-50,Yes,No,No,Often,Yes,Yes,No,Sometimes,No +6/15/2022 0:33,45-50,Sometimes,Yes,No,Often,Not at all,Yes,No,Sometimes,No +6/15/2022 0:33,40-45,No,Yes,Two or more days a week,Yes,No,Yes,No,Yes,Yes +6/15/2022 0:34,35-40,Sometimes,Yes,Two or more days a week,Yes,No,Yes,Maybe,Sometimes,Not interested to say +6/15/2022 0:34,45-50,Yes,Yes,No,Often,Not at all,Yes,Maybe,Sometimes,No +6/15/2022 0:35,30-35,Yes,No,Two or more days a week,No,No,Yes,Maybe,Sometimes,No +6/15/2022 0:35,25-30,Sometimes,No,No,Often,No,Yes,Maybe,Yes,No +6/15/2022 0:35,25-30,No,Sometimes,Two or more days a week,No,No,No,Yes,No,Not interested to say +6/15/2022 0:36,25-30,No,Sometimes,Yes,Often,No,Yes,No,No,No +6/15/2022 0:36,45-50,Sometimes,Sometimes,Two or more days a week,No,No,No,Maybe,No,No +6/15/2022 0:37,35-40,No,Yes,Two or more days a week,No,No,Yes,No,No,Yes +6/15/2022 0:37,25-30,Yes,No,No,Often,Yes,Yes,No,Sometimes,No +6/15/2022 0:38,30-35,Sometimes,Yes,No,Often,Not at all,Yes,No,Sometimes,No +6/15/2022 0:39,25-30,No,Yes,Two or more days a week,Yes,No,Yes,No,Yes,Yes +6/15/2022 0:39,25-30,Yes,No,Two or more days a week,No,No,Yes,Maybe,Sometimes,No +6/15/2022 0:40,45-50,Sometimes,No,No,Often,No,Yes,Maybe,Yes,No +6/15/2022 0:40,25-30,No,Sometimes,Two or more days a week,No,No,No,Yes,No,Not interested to say +6/15/2022 1:02,35-40,No,Sometimes,Yes,Often,No,Yes,No,No,No +6/15/2022 1:02,40-45,Sometimes,Sometimes,Two or more days a week,No,No,No,Maybe,No,No +6/15/2022 1:03,45-50,No,Yes,Two or more days a week,No,No,Yes,No,No,Yes +6/15/2022 1:05,25-30,No,Sometimes,Yes,Often,No,Yes,No,No,No +6/15/2022 1:08,40-45,Sometimes,Sometimes,Two or more days a week,No,No,No,Maybe,No,No +6/15/2022 1:08,30-35,No,Yes,Two or more days a week,No,No,Yes,No,No,Yes +6/15/2022 1:09,25-30,Yes,No,No,Often,Yes,Yes,No,Sometimes,No +6/15/2022 1:09,35-40,Sometimes,Yes,No,Often,Not at all,Yes,No,Sometimes,No +6/15/2022 1:10,45-50,No,Yes,Two or more days a week,Yes,No,Yes,No,Yes,Yes +6/15/2022 1:13,25-30,Yes,No,Two or more days a week,No,No,Yes,Maybe,Sometimes,No +6/14/2022 22:18,40-45,Sometimes,No,No,Often,No,Yes,Maybe,Yes,No +6/14/2022 22:16,30-35,Yes,Yes,Yes,Yes,Yes,Yes,Yes,Yes,Yes +6/14/2022 22:16,35-40,No,No,Yes,No,No,Yes,Yes,No,Yes +6/14/2022 22:16,30-35,Sometimes,Sometimes,Yes,Often,Not at all,Yes,Maybe,Yes,Not interested to say +6/14/2022 22:16,45-50,Sometimes,Yes,Yes,No,Not at all,No,No,Yes,Not interested to say +6/14/2022 22:17,40-45,No,Sometimes,Yes,Often,Not at all,Yes,Maybe,Yes,Not interested to say +6/14/2022 22:17,35-40,Sometimes,Yes,Two or more days a week,Often,Yes,No,Yes,Sometimes,Not interested to say +6/14/2022 22:17,35-40,No,Sometimes,Yes,No,Yes,No,Yes,No,Yes +6/14/2022 22:17,40-45,Yes,No,Two or more days a week,Yes,No,No,Maybe,Sometimes,Not interested to say +6/14/2022 22:18,35-40,Yes,Yes,Yes,Often,Yes,No,Maybe,No,No +6/14/2022 22:18,40-45,Yes,Sometimes,Two or more days a week,No,Yes,No,Maybe,Sometimes,Not interested to say +6/14/2022 22:18,30-35,Yes,No,Two or more days a week,No,Not at all,Yes,No,Sometimes,Yes +6/14/2022 23:25,35-40,Sometimes,Yes,Two or more days a week,Yes,No,Yes,Maybe,Sometimes,Not interested to say +6/14/2022 23:26,30-35,Yes,Yes,No,Often,Not at all,Yes,Maybe,Sometimes,No +6/14/2022 23:26,45-50,Yes,No,Two or more days a week,No,No,Yes,Maybe,Sometimes,No +6/14/2022 23:26,40-45,Sometimes,No,No,Often,No,Yes,Maybe,Yes,No +6/14/2022 23:27,45-50,No,Sometimes,Two or more days a week,No,No,No,Yes,No,Not interested to say +6/14/2022 23:27,40-45,No,Sometimes,Yes,Often,No,Yes,No,No,No +6/14/2022 23:28,40-45,Sometimes,Sometimes,Two or more days a week,No,No,No,Maybe,No,No +6/14/2022 23:29,40-45,No,Yes,Two or more days a week,No,No,Yes,No,No,Yes +6/14/2022 23:29,45-50,Yes,No,No,Often,Yes,Yes,No,Sometimes,No +6/14/2022 23:30,30-35,Sometimes,Yes,No,Often,Not at all,Yes,No,Sometimes,No +6/14/2022 23:30,35-40,No,Yes,Two or more days a week,Yes,No,Yes,No,Yes,Yes +6/14/2022 23:31,35-40,Yes,No,Two or more days a week,No,No,Yes,Maybe,Sometimes,No +6/14/2022 23:32,35-40,Sometimes,No,No,Often,No,Yes,Maybe,Yes,No +6/14/2022 23:32,30-35,No,Sometimes,Two or more days a week,No,No,No,Yes,No,Not interested to say +6/14/2022 23:33,35-40,No,Sometimes,Yes,Often,No,Yes,No,No,No +6/14/2022 23:33,40-45,Sometimes,Sometimes,Two or more days a week,No,No,No,Maybe,No,No +6/14/2022 23:34,40-45,No,Yes,Two or more days a week,No,No,Yes,No,No,Yes +6/14/2022 23:34,40-45,Yes,No,No,Often,Yes,Yes,No,Sometimes,No +6/14/2022 23:35,35-40,Sometimes,Yes,No,Often,Not at all,Yes,No,Sometimes,No +6/14/2022 23:35,40-45,No,Yes,Two or more days a week,Yes,No,Yes,No,Yes,Yes +6/14/2022 23:36,30-35,Yes,Yes,Yes,Often,Yes,No,Maybe,No,No +6/14/2022 23:36,30-35,Yes,Sometimes,Two or more days a week,No,Yes,No,Maybe,Sometimes,Not interested to say +6/14/2022 23:37,45-50,Yes,No,Two or more days a week,No,Not at all,Yes,No,Sometimes,Yes +6/14/2022 23:37,45-50,Sometimes,Yes,Two or more days a week,Yes,No,Yes,Maybe,Sometimes,Not interested to say +6/14/2022 23:37,35-40,Yes,Yes,No,Often,Not at all,Yes,Maybe,Sometimes,No +6/14/2022 23:38,40-45,Yes,No,Two or more days a week,No,No,Yes,Maybe,Sometimes,No +6/14/2022 23:38,45-50,Sometimes,No,No,Often,No,Yes,Maybe,Yes,No +6/14/2022 23:39,35-40,No,Sometimes,Two or more days a week,No,No,No,Yes,No,Not interested to say +6/14/2022 23:39,45-50,No,Sometimes,Yes,Often,No,Yes,No,No,No +6/14/2022 23:40,45-50,Sometimes,Sometimes,Two or more days a week,No,No,No,Maybe,No,No +6/14/2022 23:40,30-35,No,Yes,Two or more days a week,No,No,Yes,No,No,Yes +6/14/2022 23:40,30-35,Yes,No,No,Often,Yes,Yes,No,Sometimes,No +6/14/2022 23:41,30-35,Sometimes,Yes,No,Often,Not at all,Yes,No,Sometimes,No +6/14/2022 23:41,30-35,No,Yes,Two or more days a week,Yes,No,Yes,No,Yes,Yes +6/14/2022 23:42,30-35,Yes,No,Two or more days a week,No,No,Yes,Maybe,Sometimes,No +6/14/2022 23:43,40-45,Sometimes,No,No,Often,No,Yes,Maybe,Yes,No +6/14/2022 23:43,45-50,No,Sometimes,Two or more days a week,No,No,No,Yes,No,Not interested to say +6/14/2022 23:43,40-45,No,Sometimes,Yes,Often,No,Yes,No,No,No +6/14/2022 23:44,45-50,Sometimes,Sometimes,Two or more days a week,No,No,No,Maybe,No,No +6/14/2022 23:44,45-50,No,Yes,Two or more days a week,No,No,Yes,No,No,Yes +6/14/2022 23:45,40-45,Yes,No,No,Often,Yes,Yes,No,Sometimes,No +6/14/2022 23:45,45-50,Sometimes,Yes,No,Often,Not at all,Yes,No,Sometimes,No +6/14/2022 23:46,40-45,No,Yes,Two or more days a week,Yes,No,Yes,No,Yes,Yes +6/14/2022 23:46,30-35,Sometimes,Yes,Two or more days a week,Yes,No,Yes,Maybe,Sometimes,Not interested to say +6/14/2022 23:47,45-50,Yes,Yes,No,Often,Not at all,Yes,Maybe,Sometimes,No +6/14/2022 23:47,45-50,Yes,No,Two or more days a week,No,No,Yes,Maybe,Sometimes,No +6/14/2022 23:48,35-40,Sometimes,No,No,Often,No,Yes,Maybe,Yes,No +6/14/2022 23:48,30-35,No,Sometimes,Two or more days a week,No,No,No,Yes,No,Not interested to say +6/14/2022 23:48,35-40,No,Sometimes,Yes,Often,No,Yes,No,No,No +6/14/2022 23:49,45-50,Sometimes,Sometimes,Two or more days a week,No,No,No,Maybe,No,No +6/14/2022 23:49,30-35,No,Yes,Two or more days a week,No,No,Yes,No,No,Yes +6/14/2022 23:50,30-35,Yes,No,No,Often,Yes,Yes,No,Sometimes,No +6/14/2022 23:50,30-35,Sometimes,Yes,No,Often,Not at all,Yes,No,Sometimes,No +6/14/2022 23:52,40-45,No,Yes,Two or more days a week,Yes,No,Yes,No,Yes,Yes +6/14/2022 23:53,30-35,Yes,No,Two or more days a week,No,No,Yes,Maybe,Sometimes,No +6/15/2022 0:02,30-35,Sometimes,No,No,Often,No,Yes,Maybe,Yes,No +6/15/2022 0:02,30-35,No,Sometimes,Two or more days a week,No,No,No,Yes,No,Not interested to say +6/15/2022 0:02,30-35,No,Sometimes,Yes,Often,No,Yes,No,No,No +6/15/2022 0:06,30-35,Sometimes,Sometimes,Two or more days a week,No,No,No,Maybe,No,No +6/15/2022 0:06,30-35,No,Yes,Two or more days a week,No,No,Yes,No,No,Yes +6/15/2022 0:07,35-40,No,Sometimes,Yes,Often,No,Yes,No,No,No +6/15/2022 0:07,30-35,Sometimes,Sometimes,Two or more days a week,No,No,No,Maybe,No,No +6/15/2022 0:10,35-40,No,Yes,Two or more days a week,No,No,Yes,No,No,Yes +6/15/2022 0:11,30-35,Yes,No,No,Often,Yes,Yes,No,Sometimes,No +6/15/2022 0:11,45-50,Sometimes,Yes,No,Often,Not at all,Yes,No,Sometimes,No +6/15/2022 0:12,35-40,No,Yes,Two or more days a week,Yes,No,Yes,No,Yes,Yes +6/15/2022 0:12,35-40,Yes,No,Two or more days a week,No,No,Yes,Maybe,Sometimes,No +6/15/2022 0:13,35-40,Sometimes,No,No,Often,No,Yes,Maybe,Yes,No +6/15/2022 0:13,35-40,No,Sometimes,Two or more days a week,No,No,No,Yes,No,Not interested to say +6/15/2022 0:14,40-45,No,Sometimes,Yes,Often,No,Yes,No,No,No +6/15/2022 0:14,40-45,Sometimes,Sometimes,Two or more days a week,No,No,No,Maybe,No,No +6/15/2022 0:14,40-45,No,Yes,Two or more days a week,No,No,Yes,No,No,Yes +6/15/2022 0:14,45-50,No,No,Yes,Often,No,Yes,No,No,Yes +6/15/2022 0:16,35-40,Yes,Sometimes,Two or more days a week,Yes,No,No,Yes,Yes,Not interested to say +6/15/2022 0:16,35-40,Yes,Sometimes,Yes,Yes,Yes,No,Maybe,Sometimes,Yes +6/15/2022 0:17,30-35,Sometimes,Yes,No,Yes,No,Yes,No,Sometimes,Yes +6/15/2022 0:17,40-45,Yes,Yes,No,Often,Not at all,Yes,No,Sometimes,Not interested to say +6/15/2022 0:17,45-50,Sometimes,Yes,Two or more days a week,No,No,Yes,Yes,Yes,Not interested to say +6/15/2022 0:18,45-50,Yes,Sometimes,Yes,Yes,Not at all,Yes,Maybe,Sometimes,Yes +6/15/2022 0:19,25-30,Yes,Yes,Yes,Yes,Yes,Yes,Yes,Yes,Yes +6/15/2022 0:19,25-30,No,No,Yes,No,No,Yes,Yes,No,Yes +6/15/2022 0:19,25-30,Sometimes,Sometimes,Yes,Often,Not at all,Yes,Maybe,Yes,Not interested to say +6/15/2022 0:20,25-30,Sometimes,Yes,Yes,No,Not at all,No,No,Yes,Not interested to say +6/15/2022 0:20,30-35,No,Sometimes,Yes,Often,Not at all,Yes,Maybe,Yes,Not interested to say +6/15/2022 0:20,25-30,Sometimes,Yes,Two or more days a week,Often,Yes,No,Yes,Sometimes,Not interested to say +6/15/2022 0:20,25-30,No,Sometimes,Yes,No,Yes,No,Yes,No,Yes +6/15/2022 0:21,30-35,Yes,No,Two or more days a week,Yes,No,No,Maybe,Sometimes,Not interested to say +6/15/2022 0:21,25-30,Yes,Yes,Yes,Often,Yes,No,Maybe,No,No +6/15/2022 0:22,30-35,Yes,Sometimes,Two or more days a week,No,Yes,No,Maybe,Sometimes,Not interested to say +6/15/2022 0:22,40-45,Yes,No,Two or more days a week,No,Not at all,Yes,No,Sometimes,Yes +6/15/2022 0:23,40-45,Sometimes,Yes,Two or more days a week,Yes,No,Yes,Maybe,Sometimes,Not interested to say +6/15/2022 0:23,40-45,Yes,Yes,No,Often,Not at all,Yes,Maybe,Sometimes,No +6/15/2022 0:24,25-30,Yes,No,Two or more days a week,No,No,Yes,Maybe,Sometimes,No +6/15/2022 0:24,30-35,Sometimes,No,No,Often,No,Yes,Maybe,Yes,No +6/15/2022 0:25,40-45,No,Sometimes,Two or more days a week,No,No,No,Yes,No,Not interested to say +6/15/2022 0:25,40-45,No,Sometimes,Yes,Often,No,Yes,No,No,No +6/15/2022 0:25,35-40,Sometimes,Sometimes,Two or more days a week,No,No,No,Maybe,No,No +6/15/2022 0:26,45-50,No,Yes,Two or more days a week,No,No,Yes,No,No,Yes +6/15/2022 0:26,25-30,Yes,No,No,Often,Yes,Yes,No,Sometimes,No +6/15/2022 0:26,30-35,Sometimes,Yes,No,Often,Not at all,Yes,No,Sometimes,No +6/15/2022 0:27,40-45,No,Yes,Two or more days a week,Yes,No,Yes,No,Yes,Yes +6/15/2022 0:27,25-30,Yes,No,Two or more days a week,No,No,Yes,Maybe,Sometimes,No +6/15/2022 0:27,30-35,Sometimes,No,No,Often,No,Yes,Maybe,Yes,No +6/15/2022 0:27,40-45,No,Sometimes,Two or more days a week,No,No,No,Yes,No,Not interested to say +6/15/2022 0:27,25-30,No,Sometimes,Yes,Often,No,Yes,No,No,No +6/15/2022 0:28,40-45,Sometimes,Sometimes,Two or more days a week,No,No,No,Maybe,No,No +6/15/2022 0:28,25-30,No,Yes,Two or more days a week,No,No,Yes,No,No,Yes +6/15/2022 0:28,35-40,Yes,No,No,Often,Yes,Yes,No,Sometimes,No +6/15/2022 0:28,40-45,Sometimes,Yes,No,Often,Not at all,Yes,No,Sometimes,No +6/15/2022 0:28,40-45,No,Yes,Two or more days a week,Yes,No,Yes,No,Yes,Yes +6/15/2022 0:29,40-45,Yes,Yes,Yes,Often,Yes,No,Maybe,No,No +6/15/2022 0:29,30-35,Yes,Sometimes,Two or more days a week,No,Yes,No,Maybe,Sometimes,Not interested to say +6/15/2022 0:29,35-40,Yes,No,Two or more days a week,No,Not at all,Yes,No,Sometimes,Yes +6/15/2022 0:29,25-30,Sometimes,Yes,Two or more days a week,Yes,No,Yes,Maybe,Sometimes,Not interested to say +6/15/2022 0:29,35-40,Yes,Yes,No,Often,Not at all,Yes,Maybe,Sometimes,No +6/15/2022 0:30,45-50,Yes,No,Two or more days a week,No,No,Yes,Maybe,Sometimes,No +6/15/2022 0:30,35-40,Sometimes,No,No,Often,No,Yes,Maybe,Yes,No +6/15/2022 0:30,35-40,No,Sometimes,Two or more days a week,No,No,No,Yes,No,Not interested to say +6/15/2022 0:30,40-45,No,Sometimes,Yes,Often,No,Yes,No,No,No +6/15/2022 0:30,40-45,Sometimes,Sometimes,Two or more days a week,No,No,No,Maybe,No,No +6/15/2022 0:31,40-45,No,Yes,Two or more days a week,No,No,Yes,No,No,Yes +6/15/2022 0:31,35-40,Yes,No,No,Often,Yes,Yes,No,Sometimes,No +6/15/2022 0:31,30-35,Sometimes,Yes,No,Often,Not at all,Yes,No,Sometimes,No +6/15/2022 0:31,35-40,No,Yes,Two or more days a week,Yes,No,Yes,No,Yes,Yes +6/15/2022 0:31,30-35,Yes,No,Two or more days a week,No,No,Yes,Maybe,Sometimes,No +6/15/2022 0:32,45-50,Sometimes,No,No,Often,No,Yes,Maybe,Yes,No +6/15/2022 0:32,35-40,No,Sometimes,Two or more days a week,No,No,No,Yes,No,Not interested to say +6/15/2022 0:32,35-40,No,Sometimes,Yes,Often,No,Yes,No,No,No +6/15/2022 0:32,45-50,Sometimes,Sometimes,Two or more days a week,No,No,No,Maybe,No,No +6/15/2022 0:33,40-45,No,Yes,Two or more days a week,No,No,Yes,No,No,Yes +6/15/2022 0:33,45-50,Yes,No,No,Often,Yes,Yes,No,Sometimes,No +6/15/2022 0:33,45-50,Sometimes,Yes,No,Often,Not at all,Yes,No,Sometimes,No +6/15/2022 0:33,40-45,No,Yes,Two or more days a week,Yes,No,Yes,No,Yes,Yes +6/15/2022 0:34,35-40,Sometimes,Yes,Two or more days a week,Yes,No,Yes,Maybe,Sometimes,Not interested to say +6/15/2022 0:34,45-50,Yes,Yes,No,Often,Not at all,Yes,Maybe,Sometimes,No +6/15/2022 0:35,30-35,Yes,No,Two or more days a week,No,No,Yes,Maybe,Sometimes,No +6/15/2022 0:35,25-30,Sometimes,No,No,Often,No,Yes,Maybe,Yes,No +6/15/2022 0:35,25-30,No,Sometimes,Two or more days a week,No,No,No,Yes,No,Not interested to say +6/15/2022 0:36,25-30,No,Sometimes,Yes,Often,No,Yes,No,No,No +6/15/2022 0:36,45-50,Sometimes,Sometimes,Two or more days a week,No,No,No,Maybe,No,No +6/15/2022 1:02,40-45,Yes,No,Yes,Yes,Not at all,No,Yes,No,Not interested to say +6/15/2022 1:03,45-50,No,No,Yes,Often,No,Yes,Maybe,Yes,No +6/15/2022 1:05,25-30,No,Yes,No,Yes,Not at all,No,Yes,No,Yes +6/15/2022 1:08,40-45,Yes,No,No,Yes,Not at all,No,Yes,No,No +6/15/2022 1:08,30-35,No,Sometimes,Two or more days a week,Often,No,Yes,No,Sometimes,Yes +6/15/2022 1:09,25-30,Sometimes,No,Yes,No,Yes,No,Yes,No,Not interested to say +6/15/2022 1:09,35-40,Yes,Sometimes,Yes,Yes,No,No,Yes,No,Yes +6/15/2022 1:10,45-50,Yes,No,No,Yes,No,Yes,Maybe,Yes,No +6/15/2022 1:13,25-30,No,Sometimes,Yes,No,No,Yes,Maybe,Sometimes,Yes +6/14/2022 22:18,40-45,No,No,Two or more days a week,Yes,No,Yes,No,Yes,Yes +6/14/2022 22:19,30-35,Yes,Yes,Two or more days a week,Yes,No,No,Yes,Yes,No +6/14/2022 22:19,40-45,No,No,Yes,Yes,Yes,Yes,No,Yes,No +6/14/2022 22:19,35-40,Yes,Yes,Two or more days a week,Yes,No,Yes,Maybe,Yes,No +6/14/2022 22:19,40-45,Yes,Yes,Yes,Yes,No,Yes,No,No,No +6/14/2022 22:19,35-40,Sometimes,Sometimes,No,No,No,Yes,No,Yes,Yes +6/14/2022 22:19,45-50,Yes,Yes,No,Yes,Yes,Yes,No,No,Yes +6/14/2022 22:19,35-40,Sometimes,Sometimes,Two or more days a week,Yes,Yes,Yes,No,Yes,No +6/14/2022 22:20,30-35,Yes,Yes,Yes,No,Yes,No,No,Yes,Yes +6/14/2022 22:20,35-40,Yes,Yes,Two or more days a week,No,No,Yes,No,Sometimes,Not interested to say +6/15/2022 22:18,30-35,No,No,Yes,Yes,No,No,Yes,Yes,No +6/15/2022 22:24,35-40,Sometimes,Sometimes,No,Yes,Yes,Yes,Yes,Sometimes,No +6/15/2022 22:24,30-35,Sometimes,Sometimes,No,Yes,No,Yes,No,Yes,Yes +6/15/2022 22:24,45-50,No,No,Two or more days a week,Yes,Not at all,Yes,Maybe,Yes,Yes +6/15/2022 22:24,40-45,Sometimes,Sometimes,Yes,No,No,Yes,No,No,No +6/15/2022 22:24,35-40,No,No,Yes,Often,Not at all,Yes,No,Sometimes,No +6/15/2022 22:24,35-40,Yes,Yes,Yes,No,Yes,Yes,Yes,Sometimes,Yes +6/15/2022 22:24,40-45,Yes,Yes,Yes,No,No,Yes,No,No,Not interested to say +6/15/2022 22:24,35-40,Yes,Yes,Yes,Yes,Not at all,No,Yes,Sometimes,Yes +6/15/2022 22:24,40-45,Yes,Yes,Yes,No,Not at all,Yes,Maybe,No,No +6/15/2022 0:34,45-50,Sometimes,No,Yes,No,Not at all,No,No,Sometimes,Not interested to say +6/15/2022 0:34,30-35,Yes,Yes,No,Yes,No,Yes,Maybe,No,Not interested to say +6/15/2022 0:35,25-30,Sometimes,Yes,Two or more days a week,Yes,No,No,Maybe,No,Yes +6/15/2022 0:35,25-30,Sometimes,Sometimes,Yes,Yes,No,No,Yes,Sometimes,Not interested to say +6/15/2022 0:35,25-30,Sometimes,Yes,Two or more days a week,Yes,Yes,Yes,Maybe,Yes,No +6/15/2022 0:36,45-50,No,No,Two or more days a week,Yes,Not at all,Yes,Maybe,Sometimes,Not interested to say +6/15/2022 0:36,35-40,No,Sometimes,Yes,No,Not at all,No,No,Sometimes,No +6/15/2022 0:37,25-30,Sometimes,No,Yes,Yes,No,No,Yes,Sometimes,Not interested to say +6/15/2022 0:37,30-35,Yes,No,Two or more days a week,Yes,Yes,No,Yes,Yes,Yes +6/15/2022 0:38,25-30,No,No,Two or more days a week,No,Not at all,No,No,Yes,No +6/15/2022 0:39,25-30,Sometimes,No,No,No,Yes,No,Yes,No,Not interested to say +6/15/2022 0:39,45-50,No,No,No,Yes,Yes,No,Yes,Yes,No +6/15/2022 0:40,25-30,Yes,No,Yes,Yes,No,No,Maybe,Sometimes,No +6/15/2022 0:40,35-40,Sometimes,No,Two or more days a week,Yes,No,No,Maybe,Sometimes,Yes +6/15/2022 1:02,40-45,Yes,Yes,Yes,Yes,Not at all,No,Maybe,No,Not interested to say +6/15/2022 1:02,45-50,Yes,No,Yes,No,Not at all,Yes,No,Yes,No +6/15/2022 1:03,25-30,No,Sometimes,Two or more days a week,Often,Not at all,Yes,No,No,Not interested to say +6/15/2022 1:05,40-45,No,No,Yes,No,No,Yes,No,Yes,Not interested to say +6/15/2022 1:08,30-35,Yes,Sometimes,No,No,Not at all,No,Yes,No,Not interested to say +6/15/2022 1:08,25-30,No,No,Two or more days a week,Yes,Not at all,Yes,Maybe,Yes,No +6/15/2022 1:09,35-40,Sometimes,Sometimes,Yes,No,No,No,Yes,No,Yes +6/15/2022 1:09,45-50,Yes,No,No,No,Yes,No,Yes,No,No +6/15/2022 1:10,25-30,Yes,Yes,Two or more days a week,Yes,No,Yes,No,Sometimes,Yes +6/15/2022 1:13,40-45,No,No,No,Often,No,No,Yes,No,Not interested to say +6/14/2022 22:18,30-35,No,Yes,Two or more days a week,Yes,No,No,Yes,No,Yes +6/14/2022 22:19,40-45,Yes,Yes,Yes,No,No,Yes,Maybe,Yes,No +6/14/2022 22:19,35-40,No,Sometimes,Two or more days a week,Often,No,Yes,Maybe,Sometimes,Yes +6/14/2022 22:19,40-45,Yes,Yes,Yes,Yes,Yes,Yes,No,Yes,Yes +6/14/2022 22:19,35-40,Yes,Sometimes,Yes,Often,No,No,Yes,Yes,No +6/14/2022 22:19,45-50,Sometimes,Yes,Yes,No,No,Yes,No,Yes,No +6/14/2022 22:19,35-40,Yes,Yes,No,No,No,Yes,Maybe,Yes,No +6/14/2022 22:19,30-35,Sometimes,No,No,Yes,Yes,Yes,No,No,No +6/14/2022 22:20,35-40,Yes,Sometimes,Two or more days a week,Often,Yes,Yes,No,Yes,Yes +6/14/2022 22:20,30-35,Yes,Sometimes,Yes,Often,Yes,Yes,No,No,Yes +6/15/2022 22:18,35-40,No,No,Yes,Yes,No,Yes,No,Yes,No +6/15/2022 22:24,30-35,Sometimes,Sometimes,No,No,No,No,No,Yes,Yes +6/15/2022 22:24,45-50,Sometimes,No,Yes,Yes,Yes,Yes,No,Sometimes,Not interested to say +6/15/2022 22:24,40-45,No,Yes,Two or more days a week,Yes,No,No,Yes,Yes,No +6/15/2022 22:24,35-40,Sometimes,Yes,Two or more days a week,No,Not at all,Yes,Yes,Sometimes,No +6/15/2022 22:24,35-40,No,Yes,Yes,,No,Yes,No,Yes,Yes +6/15/2022 22:24,40-45,Yes,Yes,Two or more days a week,,Not at all,Yes,,Yes,Yes +6/15/2022 22:24,35-40,Yes,,Yes,,Yes,Yes,,No,No +6/15/2022 22:24,40-45,Yes,,No,,No,Yes,,Sometimes,No +6/14/2022 20:02,35-40,Yes,Yes,Two or more days a week,Yes,Yes,Yes,No,Yes,Yes +6/14/2022 20:03,40-45,Yes,No,No,Yes,Yes,No,Yes,Yes,No +6/14/2022 20:04,35-40,Yes,No,Yes,Yes,Yes,Yes,No,Sometimes,No +6/14/2022 20:05,35-40,Yes,Yes,Yes,Yes,No,Yes,Maybe,No,No +6/14/2022 20:06,40-45,Yes,No,Two or more days a week,Yes,No,Yes,No,Yes,No +6/14/2022 20:06,30-35,No,No,Yes,Yes,Yes,Yes,No,No,Yes +6/14/2022 20:06,40-45,No,Yes,No,No,No,Yes,No,No,Yes +6/14/2022 20:07,35-40,Yes,No,Yes,Yes,No,Yes,No,No,No +6/14/2022 20:07,35-40,Yes,Yes,No,Yes,No,No,No,No,Yes +6/14/2022 20:11,30-35,Sometimes,Yes,Two or more days a week,No,Yes,Yes,No,Sometimes,Not interested to say +6/14/2022 22:04,30-35,Yes,Sometimes,Two or more days a week,No,Yes,No,Yes,No,No +6/14/2022 22:05,35-40,No,Yes,Two or more days a week,Yes,Yes,Yes,Yes,No,No +6/14/2022 22:05,40-45,Yes,No,No,Yes,No,Yes,No,No,Yes +6/14/2022 22:05,45-50,No,Yes,No,Yes,No,Yes,Maybe,Yes,Yes +6/14/2022 22:06,45-50,No,No,No,Yes,No,Yes,No,Sometimes,No +6/14/2022 22:06,30-35,Yes,No,Yes,No,Yes,Yes,No,Yes,No +6/14/2022 22:06,35-40,Sometimes,Sometimes,Yes,Often,Yes,No,Yes,Yes,Yes +6/14/2022 22:06,40-45,Yes,Yes,Two or more days a week,No,Yes,No,No,Sometimes,Not interested to say +6/14/2022 22:07,40-45,Sometimes,Sometimes,Two or more days a week,No,Yes,Yes,Yes,No,Yes +6/14/2022 22:07,45-50,Sometimes,Sometimes,Two or more days a week,Yes,Yes,Yes,Maybe,Sometimes,No +6/14/2022 22:08,30-35,No,No,Yes,No,Not at all,Yes,No,Yes,No +6/14/2022 22:08,30-35,No,Yes,Two or more days a week,Yes,No,Yes,No,No,Yes +6/14/2022 22:08,45-50,Sometimes,Sometimes,Yes,Yes,No,Yes,No,No,No +6/14/2022 22:08,40-45,Sometimes,Yes,No,Yes,No,No,Yes,No,Yes +6/14/2022 22:09,45-50,No,Sometimes,No,Yes,No,No,No,No,No +6/14/2022 22:09,40-45,Yes,Sometimes,Two or more days a week,Often,Yes,No,Maybe,Sometimes,Not interested to say +6/14/2022 22:09,30-35,No,No,Yes,Often,No,Yes,No,No,Yes +6/14/2022 22:10,40-45,Yes,Sometimes,Two or more days a week,Yes,No,No,Yes,Yes,Not interested to say +6/14/2022 22:10,35-40,Yes,Sometimes,Yes,Yes,Yes,No,Maybe,Sometimes,Yes +6/14/2022 22:15,40-45,Sometimes,Yes,No,Yes,No,Yes,No,Sometimes,Yes +6/14/2022 22:15,35-40,Yes,Yes,No,Often,Not at all,Yes,No,Sometimes,Not interested to say +6/14/2022 22:15,45-50,Sometimes,Yes,Two or more days a week,No,No,Yes,Yes,Yes,Not interested to say +6/14/2022 22:15,35-40,Yes,Sometimes,Yes,Yes,Not at all,Yes,Maybe,Sometimes,Yes +6/14/2022 22:16,30-35,Yes,Yes,Yes,Yes,Yes,Yes,Yes,Yes,Yes +6/14/2022 22:16,35-40,No,No,Yes,No,No,Yes,Yes,No,Yes +6/14/2022 22:16,30-35,Sometimes,Sometimes,Yes,Often,Not at all,Yes,Maybe,Yes,Not interested to say +6/14/2022 22:16,45-50,Sometimes,Yes,Yes,No,Not at all,No,No,Yes,Not interested to say +6/14/2022 22:17,40-45,No,Sometimes,Yes,Often,Not at all,Yes,Maybe,Yes,Not interested to say +6/14/2022 22:17,35-40,Sometimes,Yes,Two or more days a week,Often,Yes,No,Yes,Sometimes,Not interested to say +6/14/2022 22:17,35-40,No,Sometimes,Yes,No,Yes,No,Yes,No,Yes +6/14/2022 22:17,40-45,Yes,No,Two or more days a week,Yes,No,No,Maybe,Sometimes,Not interested to say +6/14/2022 22:18,35-40,Yes,Yes,Yes,Often,Yes,No,Maybe,No,No +6/14/2022 22:18,40-45,Yes,Sometimes,Two or more days a week,No,Yes,No,Maybe,Sometimes,Not interested to say +6/14/2022 22:18,30-35,Yes,No,Two or more days a week,No,Not at all,Yes,No,Sometimes,Yes +6/14/2022 23:25,35-40,Sometimes,Yes,Two or more days a week,Yes,No,Yes,Maybe,Sometimes,Not interested to say +6/14/2022 23:26,30-35,Yes,Yes,No,Often,Not at all,Yes,Maybe,Sometimes,No +6/14/2022 23:26,45-50,Yes,No,Two or more days a week,No,No,Yes,Maybe,Sometimes,No +6/14/2022 23:26,40-45,Sometimes,No,No,Often,No,Yes,Maybe,Yes,No +6/14/2022 23:27,45-50,No,Sometimes,Two or more days a week,No,No,No,Yes,No,Not interested to say +6/14/2022 23:27,40-45,No,Sometimes,Yes,Often,No,Yes,No,No,No +6/14/2022 23:28,40-45,Sometimes,Sometimes,Two or more days a week,No,No,No,Maybe,No,No +6/14/2022 23:29,40-45,No,Yes,Two or more days a week,No,No,Yes,No,No,Yes +6/14/2022 23:29,45-50,Yes,No,No,Often,Yes,Yes,No,Sometimes,No +6/14/2022 23:30,30-35,Sometimes,Yes,No,Often,Not at all,Yes,No,Sometimes,No +6/14/2022 23:30,35-40,No,Yes,Two or more days a week,Yes,No,Yes,No,Yes,Yes +6/14/2022 23:31,35-40,Yes,No,Two or more days a week,No,No,Yes,Maybe,Sometimes,No +6/14/2022 23:32,35-40,Sometimes,No,No,Often,No,Yes,Maybe,Yes,No +6/14/2022 23:32,30-35,No,Sometimes,Two or more days a week,No,No,No,Yes,No,Not interested to say +6/14/2022 23:33,35-40,No,Sometimes,Yes,Often,No,Yes,No,No,No +6/14/2022 23:33,40-45,Sometimes,Sometimes,Two or more days a week,No,No,No,Maybe,No,No +6/14/2022 23:34,40-45,No,Yes,Two or more days a week,No,No,Yes,No,No,Yes +6/14/2022 23:34,40-45,Yes,No,No,Often,Yes,Yes,No,Sometimes,No +6/14/2022 23:35,35-40,Sometimes,Yes,No,Often,Not at all,Yes,No,Sometimes,No +6/14/2022 23:35,40-45,No,Yes,Two or more days a week,Yes,No,Yes,No,Yes,Yes +6/14/2022 23:36,30-35,Yes,Yes,Yes,Often,Yes,No,Maybe,No,No +6/14/2022 23:36,30-35,Yes,Sometimes,Two or more days a week,No,Yes,No,Maybe,Sometimes,Not interested to say +6/14/2022 23:37,45-50,Yes,No,Two or more days a week,No,Not at all,Yes,No,Sometimes,Yes +6/14/2022 23:37,45-50,Sometimes,Yes,Two or more days a week,Yes,No,Yes,Maybe,Sometimes,Not interested to say +6/14/2022 23:37,35-40,Yes,Yes,No,Often,Not at all,Yes,Maybe,Sometimes,No +6/14/2022 23:38,40-45,Yes,No,Two or more days a week,No,No,Yes,Maybe,Sometimes,No +6/14/2022 23:38,45-50,Sometimes,No,No,Often,No,Yes,Maybe,Yes,No +6/14/2022 23:39,35-40,No,Sometimes,Two or more days a week,No,No,No,Yes,No,Not interested to say +6/14/2022 23:39,45-50,No,Sometimes,Yes,Often,No,Yes,No,No,No +6/14/2022 23:40,45-50,Sometimes,Sometimes,Two or more days a week,No,No,No,Maybe,No,No +6/14/2022 23:40,30-35,No,Yes,Two or more days a week,No,No,Yes,No,No,Yes +6/14/2022 23:40,30-35,Yes,No,No,Often,Yes,Yes,No,Sometimes,No +6/14/2022 23:41,30-35,Sometimes,Yes,No,Often,Not at all,Yes,No,Sometimes,No +6/14/2022 23:41,30-35,No,Yes,Two or more days a week,Yes,No,Yes,No,Yes,Yes +6/14/2022 23:42,30-35,Yes,No,Two or more days a week,No,No,Yes,Maybe,Sometimes,No +6/14/2022 23:43,40-45,Sometimes,No,No,Often,No,Yes,Maybe,Yes,No +6/14/2022 23:43,45-50,No,Sometimes,Two or more days a week,No,No,No,Yes,No,Not interested to say +6/14/2022 23:43,40-45,No,Sometimes,Yes,Often,No,Yes,No,No,No +6/14/2022 23:44,45-50,Sometimes,Sometimes,Two or more days a week,No,No,No,Maybe,No,No +6/14/2022 23:44,45-50,No,Yes,Two or more days a week,No,No,Yes,No,No,Yes +6/14/2022 23:45,40-45,Yes,No,No,Often,Yes,Yes,No,Sometimes,No +6/14/2022 23:45,45-50,Sometimes,Yes,No,Often,Not at all,Yes,No,Sometimes,No +6/14/2022 23:46,40-45,No,Yes,Two or more days a week,Yes,No,Yes,No,Yes,Yes +6/14/2022 23:46,30-35,Sometimes,Yes,Two or more days a week,Yes,No,Yes,Maybe,Sometimes,Not interested to say +6/14/2022 23:47,45-50,Yes,Yes,No,Often,Not at all,Yes,Maybe,Sometimes,No +6/14/2022 23:47,45-50,Yes,No,Two or more days a week,No,No,Yes,Maybe,Sometimes,No +6/14/2022 23:48,35-40,Sometimes,No,No,Often,No,Yes,Maybe,Yes,No +6/14/2022 23:48,30-35,No,Sometimes,Two or more days a week,No,No,No,Yes,No,Not interested to say +6/14/2022 23:48,35-40,No,Sometimes,Yes,Often,No,Yes,No,No,No +6/14/2022 23:49,45-50,Sometimes,Sometimes,Two or more days a week,No,No,No,Maybe,No,No +6/14/2022 23:49,30-35,No,Yes,Two or more days a week,No,No,Yes,No,No,Yes +6/14/2022 23:50,30-35,Yes,No,No,Often,Yes,Yes,No,Sometimes,No +6/14/2022 23:50,30-35,Sometimes,Yes,No,Often,Not at all,Yes,No,Sometimes,No +6/14/2022 23:52,40-45,No,Yes,Two or more days a week,Yes,No,Yes,No,Yes,Yes +6/14/2022 23:53,30-35,Yes,No,Two or more days a week,No,No,Yes,Maybe,Sometimes,No +6/15/2022 0:02,30-35,Sometimes,No,No,Often,No,Yes,Maybe,Yes,No +6/15/2022 0:02,30-35,No,Sometimes,Two or more days a week,No,No,No,Yes,No,Not interested to say +6/15/2022 0:02,30-35,No,Sometimes,Yes,Often,No,Yes,No,No,No +6/15/2022 0:06,30-35,Sometimes,Sometimes,Two or more days a week,No,No,No,Maybe,No,No +6/15/2022 0:06,30-35,No,Yes,Two or more days a week,No,No,Yes,No,No,Yes +6/15/2022 0:07,35-40,No,Sometimes,Yes,Often,No,Yes,No,No,No +6/15/2022 0:07,30-35,Sometimes,Sometimes,Two or more days a week,No,No,No,Maybe,No,No +6/15/2022 0:10,35-40,No,Yes,Two or more days a week,No,No,Yes,No,No,Yes +6/15/2022 0:11,30-35,Yes,No,No,Often,Yes,Yes,No,Sometimes,No +6/15/2022 0:11,45-50,Sometimes,Yes,No,Often,Not at all,Yes,No,Sometimes,No +6/15/2022 0:12,35-40,No,Yes,Two or more days a week,Yes,No,Yes,No,Yes,Yes +6/15/2022 0:12,35-40,Yes,No,Two or more days a week,No,No,Yes,Maybe,Sometimes,No +6/15/2022 0:13,35-40,Sometimes,No,No,Often,No,Yes,Maybe,Yes,No +6/15/2022 0:13,35-40,No,Sometimes,Two or more days a week,No,No,No,Yes,No,Not interested to say +6/15/2022 0:14,40-45,No,Sometimes,Yes,Often,No,Yes,No,No,No +6/15/2022 0:14,40-45,Sometimes,Sometimes,Two or more days a week,No,No,No,Maybe,No,No +6/15/2022 0:14,40-45,No,Yes,Two or more days a week,No,No,Yes,No,No,Yes +6/15/2022 0:14,45-50,No,No,Yes,Often,No,Yes,No,No,Yes +6/15/2022 0:16,35-40,Yes,Sometimes,Two or more days a week,Yes,No,No,Yes,Yes,Not interested to say +6/15/2022 0:16,35-40,Yes,Sometimes,Yes,Yes,Yes,No,Maybe,Sometimes,Yes +6/15/2022 0:17,30-35,Sometimes,Yes,No,Yes,No,Yes,No,Sometimes,Yes +6/15/2022 0:17,40-45,Yes,Yes,No,Often,Not at all,Yes,No,Sometimes,Not interested to say +6/15/2022 0:17,45-50,Sometimes,Yes,Two or more days a week,No,No,Yes,Yes,Yes,Not interested to say +6/15/2022 0:18,45-50,Yes,Sometimes,Yes,Yes,Not at all,Yes,Maybe,Sometimes,Yes +6/15/2022 0:19,25-30,Yes,Yes,Yes,Yes,Yes,Yes,Yes,Yes,Yes +6/15/2022 0:19,25-30,No,No,Yes,No,No,Yes,Yes,No,Yes +6/15/2022 0:19,25-30,Sometimes,Sometimes,Yes,Often,Not at all,Yes,Maybe,Yes,Not interested to say +6/15/2022 0:20,25-30,Sometimes,Yes,Yes,No,Not at all,No,No,Yes,Not interested to say +6/15/2022 0:20,30-35,No,Sometimes,Yes,Often,Not at all,Yes,Maybe,Yes,Not interested to say +6/15/2022 0:20,25-30,Sometimes,Yes,Two or more days a week,Often,Yes,No,Yes,Sometimes,Not interested to say +6/15/2022 0:20,25-30,No,Sometimes,Yes,No,Yes,No,Yes,No,Yes +6/15/2022 0:21,30-35,Yes,No,Two or more days a week,Yes,No,No,Maybe,Sometimes,Not interested to say +6/15/2022 0:21,25-30,Yes,Yes,Yes,Often,Yes,No,Maybe,No,No +6/15/2022 0:22,30-35,Yes,Sometimes,Two or more days a week,No,Yes,No,Maybe,Sometimes,Not interested to say +6/15/2022 0:22,40-45,Yes,No,Two or more days a week,No,Not at all,Yes,No,Sometimes,Yes +6/15/2022 0:23,40-45,Sometimes,Yes,Two or more days a week,Yes,No,Yes,Maybe,Sometimes,Not interested to say +6/15/2022 0:23,40-45,Yes,Yes,No,Often,Not at all,Yes,Maybe,Sometimes,No +6/15/2022 0:24,25-30,Yes,No,Two or more days a week,No,No,Yes,Maybe,Sometimes,No +6/15/2022 0:24,30-35,Sometimes,No,No,Often,No,Yes,Maybe,Yes,No +6/15/2022 0:25,40-45,No,Sometimes,Two or more days a week,No,No,No,Yes,No,Not interested to say +6/15/2022 0:25,40-45,No,Sometimes,Yes,Often,No,Yes,No,No,No +6/15/2022 0:25,35-40,Sometimes,Sometimes,Two or more days a week,No,No,No,Maybe,No,No +6/15/2022 0:26,45-50,No,Yes,Two or more days a week,No,No,Yes,No,No,Yes +6/15/2022 0:26,25-30,Yes,No,No,Often,Yes,Yes,No,Sometimes,No +6/15/2022 0:26,30-35,Sometimes,Yes,No,Often,Not at all,Yes,No,Sometimes,No +6/15/2022 0:27,40-45,No,Yes,Two or more days a week,Yes,No,Yes,No,Yes,Yes +6/15/2022 0:27,25-30,Yes,No,Two or more days a week,No,No,Yes,Maybe,Sometimes,No +6/15/2022 0:27,30-35,Sometimes,No,No,Often,No,Yes,Maybe,Yes,No +6/15/2022 0:27,40-45,No,Sometimes,Two or more days a week,No,No,No,Yes,No,Not interested to say +6/15/2022 0:27,25-30,No,Sometimes,Yes,Often,No,Yes,No,No,No +6/15/2022 0:28,40-45,Sometimes,Sometimes,Two or more days a week,No,No,No,Maybe,No,No +6/15/2022 0:28,25-30,No,Yes,Two or more days a week,No,No,Yes,No,No,Yes +6/15/2022 0:28,35-40,Yes,No,No,Often,Yes,Yes,No,Sometimes,No +6/15/2022 0:28,40-45,Sometimes,Yes,No,Often,Not at all,Yes,No,Sometimes,No +6/15/2022 0:28,40-45,No,Yes,Two or more days a week,Yes,No,Yes,No,Yes,Yes +6/15/2022 0:29,40-45,Yes,Yes,Yes,Often,Yes,No,Maybe,No,No +6/15/2022 0:29,30-35,Yes,Sometimes,Two or more days a week,No,Yes,No,Maybe,Sometimes,Not interested to say +6/15/2022 0:29,35-40,Yes,No,Two or more days a week,No,Not at all,Yes,No,Sometimes,Yes +6/15/2022 0:29,25-30,Sometimes,Yes,Two or more days a week,Yes,No,Yes,Maybe,Sometimes,Not interested to say +6/15/2022 0:29,35-40,Yes,Yes,No,Often,Not at all,Yes,Maybe,Sometimes,No +6/15/2022 0:30,45-50,Yes,No,Two or more days a week,No,No,Yes,Maybe,Sometimes,No +6/15/2022 0:30,35-40,Sometimes,No,No,Often,No,Yes,Maybe,Yes,No +6/15/2022 0:30,35-40,No,Sometimes,Two or more days a week,No,No,No,Yes,No,Not interested to say +6/15/2022 0:30,40-45,No,Sometimes,Yes,Often,No,Yes,No,No,No +6/15/2022 0:30,40-45,Sometimes,Sometimes,Two or more days a week,No,No,No,Maybe,No,No +6/15/2022 0:31,40-45,No,Yes,Two or more days a week,No,No,Yes,No,No,Yes +6/15/2022 0:31,35-40,Yes,No,No,Often,Yes,Yes,No,Sometimes,No +6/15/2022 0:31,30-35,Sometimes,Yes,No,Often,Not at all,Yes,No,Sometimes,No +6/15/2022 0:31,35-40,No,Yes,Two or more days a week,Yes,No,Yes,No,Yes,Yes +6/15/2022 0:31,30-35,Yes,No,Two or more days a week,No,No,Yes,Maybe,Sometimes,No +6/15/2022 0:32,45-50,Sometimes,No,No,Often,No,Yes,Maybe,Yes,No +6/15/2022 0:32,35-40,No,Sometimes,Two or more days a week,No,No,No,Yes,No,Not interested to say +6/15/2022 0:32,35-40,No,Sometimes,Yes,Often,No,Yes,No,No,No +6/15/2022 0:32,45-50,Sometimes,Sometimes,Two or more days a week,No,No,No,Maybe,No,No +6/15/2022 0:33,40-45,No,Yes,Two or more days a week,No,No,Yes,No,No,Yes +6/15/2022 0:33,45-50,Yes,No,No,Often,Yes,Yes,No,Sometimes,No +6/15/2022 0:33,45-50,Sometimes,Yes,No,Often,Not at all,Yes,No,Sometimes,No +6/15/2022 0:33,40-45,No,Yes,Two or more days a week,Yes,No,Yes,No,Yes,Yes +6/15/2022 0:34,35-40,Sometimes,Yes,Two or more days a week,Yes,No,Yes,Maybe,Sometimes,Not interested to say +6/15/2022 0:34,45-50,Yes,Yes,No,Often,Not at all,Yes,Maybe,Sometimes,No +6/15/2022 0:35,30-35,Yes,No,Two or more days a week,No,No,Yes,Maybe,Sometimes,No +6/15/2022 0:35,25-30,Sometimes,No,No,Often,No,Yes,Maybe,Yes,No +6/15/2022 0:35,25-30,No,Sometimes,Two or more days a week,No,No,No,Yes,No,Not interested to say +6/15/2022 0:36,25-30,No,Sometimes,Yes,Often,No,Yes,No,No,No +6/15/2022 0:36,45-50,Sometimes,Sometimes,Two or more days a week,No,No,No,Maybe,No,No +6/15/2022 0:37,35-40,No,Yes,Two or more days a week,No,No,Yes,No,No,Yes +6/15/2022 0:37,25-30,Yes,No,No,Often,Yes,Yes,No,Sometimes,No +6/15/2022 0:38,30-35,Sometimes,Yes,No,Often,Not at all,Yes,No,Sometimes,No +6/15/2022 0:39,25-30,No,Yes,Two or more days a week,Yes,No,Yes,No,Yes,Yes +6/15/2022 0:39,25-30,Yes,No,Two or more days a week,No,No,Yes,Maybe,Sometimes,No +6/15/2022 0:40,45-50,Sometimes,No,No,Often,No,Yes,Maybe,Yes,No +6/15/2022 0:40,25-30,No,Sometimes,Two or more days a week,No,No,No,Yes,No,Not interested to say +6/15/2022 1:02,35-40,No,Sometimes,Yes,Often,No,Yes,No,No,No +6/15/2022 1:02,40-45,Sometimes,Sometimes,Two or more days a week,No,No,No,Maybe,No,No +6/15/2022 1:03,45-50,No,Yes,Two or more days a week,No,No,Yes,No,No,Yes +6/15/2022 1:05,25-30,No,Sometimes,Yes,Often,No,Yes,No,No,No +6/15/2022 1:08,40-45,Sometimes,Sometimes,Two or more days a week,No,No,No,Maybe,No,No +6/15/2022 1:08,30-35,No,Yes,Two or more days a week,No,No,Yes,No,No,Yes +6/15/2022 1:09,25-30,Yes,No,No,Often,Yes,Yes,No,Sometimes,No +6/15/2022 1:09,35-40,Sometimes,Yes,No,Often,Not at all,Yes,No,Sometimes,No +6/15/2022 1:10,45-50,No,Yes,Two or more days a week,Yes,No,Yes,No,Yes,Yes +6/15/2022 1:13,25-30,Yes,No,Two or more days a week,No,No,Yes,Maybe,Sometimes,No +6/14/2022 22:18,40-45,Sometimes,No,No,Often,No,Yes,Maybe,Yes,No +6/14/2022 22:16,30-35,Yes,Yes,Yes,Yes,Yes,Yes,Yes,Yes,Yes +6/14/2022 22:16,35-40,No,No,Yes,No,No,Yes,Yes,No,Yes +6/14/2022 22:16,30-35,Sometimes,Sometimes,Yes,Often,Not at all,Yes,Maybe,Yes,Not interested to say +6/14/2022 22:16,45-50,Sometimes,Yes,Yes,No,Not at all,No,No,Yes,Not interested to say +6/14/2022 22:17,40-45,No,Sometimes,Yes,Often,Not at all,Yes,Maybe,Yes,Not interested to say +6/14/2022 22:17,35-40,Sometimes,Yes,Two or more days a week,Often,Yes,No,Yes,Sometimes,Not interested to say +6/14/2022 22:17,35-40,No,Sometimes,Yes,No,Yes,No,Yes,No,Yes +6/14/2022 22:17,40-45,Yes,No,Two or more days a week,Yes,No,No,Maybe,Sometimes,Not interested to say +6/14/2022 22:18,35-40,Yes,Yes,Yes,Often,Yes,No,Maybe,No,No +6/14/2022 22:18,40-45,Yes,Sometimes,Two or more days a week,No,Yes,No,Maybe,Sometimes,Not interested to say +6/14/2022 22:18,30-35,Yes,No,Two or more days a week,No,Not at all,Yes,No,Sometimes,Yes +6/14/2022 23:25,35-40,Sometimes,Yes,Two or more days a week,Yes,No,Yes,Maybe,Sometimes,Not interested to say +6/14/2022 23:26,30-35,Yes,Yes,No,Often,Not at all,Yes,Maybe,Sometimes,No +6/14/2022 23:26,45-50,Yes,No,Two or more days a week,No,No,Yes,Maybe,Sometimes,No +6/14/2022 23:26,40-45,Sometimes,No,No,Often,No,Yes,Maybe,Yes,No +6/14/2022 23:27,45-50,No,Sometimes,Two or more days a week,No,No,No,Yes,No,Not interested to say +6/14/2022 23:27,40-45,No,Sometimes,Yes,Often,No,Yes,No,No,No +6/14/2022 23:28,40-45,Sometimes,Sometimes,Two or more days a week,No,No,No,Maybe,No,No +6/14/2022 23:29,40-45,No,Yes,Two or more days a week,No,No,Yes,No,No,Yes +6/14/2022 23:29,45-50,Yes,No,No,Often,Yes,Yes,No,Sometimes,No +6/14/2022 23:30,30-35,Sometimes,Yes,No,Often,Not at all,Yes,No,Sometimes,No +6/14/2022 23:30,35-40,No,Yes,Two or more days a week,Yes,No,Yes,No,Yes,Yes +6/14/2022 23:31,35-40,Yes,No,Two or more days a week,No,No,Yes,Maybe,Sometimes,No +6/14/2022 23:32,35-40,Sometimes,No,No,Often,No,Yes,Maybe,Yes,No +6/14/2022 23:32,30-35,No,Sometimes,Two or more days a week,No,No,No,Yes,No,Not interested to say +6/14/2022 23:33,35-40,No,Sometimes,Yes,Often,No,Yes,No,No,No +6/14/2022 23:33,40-45,Sometimes,Sometimes,Two or more days a week,No,No,No,Maybe,No,No +6/14/2022 23:34,40-45,No,Yes,Two or more days a week,No,No,Yes,No,No,Yes +6/14/2022 23:34,40-45,Yes,No,No,Often,Yes,Yes,No,Sometimes,No +6/14/2022 23:35,35-40,Sometimes,Yes,No,Often,Not at all,Yes,No,Sometimes,No +6/14/2022 23:35,40-45,No,Yes,Two or more days a week,Yes,No,Yes,No,Yes,Yes +6/14/2022 23:36,30-35,Yes,Yes,Yes,Often,Yes,No,Maybe,No,No +6/14/2022 23:36,30-35,Yes,Sometimes,Two or more days a week,No,Yes,No,Maybe,Sometimes,Not interested to say +6/14/2022 23:37,45-50,Yes,No,Two or more days a week,No,Not at all,Yes,No,Sometimes,Yes +6/14/2022 23:37,45-50,Sometimes,Yes,Two or more days a week,Yes,No,Yes,Maybe,Sometimes,Not interested to say +6/14/2022 23:37,35-40,Yes,Yes,No,Often,Not at all,Yes,Maybe,Sometimes,No +6/14/2022 23:38,40-45,Yes,No,Two or more days a week,No,No,Yes,Maybe,Sometimes,No +6/14/2022 23:38,45-50,Sometimes,No,No,Often,No,Yes,Maybe,Yes,No +6/14/2022 23:39,35-40,No,Sometimes,Two or more days a week,No,No,No,Yes,No,Not interested to say +6/14/2022 23:39,45-50,No,Sometimes,Yes,Often,No,Yes,No,No,No +6/14/2022 23:40,45-50,Sometimes,Sometimes,Two or more days a week,No,No,No,Maybe,No,No +6/14/2022 23:40,30-35,No,Yes,Two or more days a week,No,No,Yes,No,No,Yes +6/14/2022 23:40,30-35,Yes,No,No,Often,Yes,Yes,No,Sometimes,No +6/14/2022 23:41,30-35,Sometimes,Yes,No,Often,Not at all,Yes,No,Sometimes,No +6/14/2022 23:41,30-35,No,Yes,Two or more days a week,Yes,No,Yes,No,Yes,Yes +6/14/2022 23:42,30-35,Yes,No,Two or more days a week,No,No,Yes,Maybe,Sometimes,No +6/14/2022 23:43,40-45,Sometimes,No,No,Often,No,Yes,Maybe,Yes,No +6/14/2022 23:43,45-50,No,Sometimes,Two or more days a week,No,No,No,Yes,No,Not interested to say +6/14/2022 23:43,40-45,No,Sometimes,Yes,Often,No,Yes,No,No,No +6/14/2022 23:44,45-50,Sometimes,Sometimes,Two or more days a week,No,No,No,Maybe,No,No +6/14/2022 23:44,45-50,No,Yes,Two or more days a week,No,No,Yes,No,No,Yes +6/14/2022 23:45,40-45,Yes,No,No,Often,Yes,Yes,No,Sometimes,No +6/14/2022 23:45,45-50,Sometimes,Yes,No,Often,Not at all,Yes,No,Sometimes,No +6/14/2022 23:46,40-45,No,Yes,Two or more days a week,Yes,No,Yes,No,Yes,Yes +6/14/2022 23:46,30-35,Sometimes,Yes,Two or more days a week,Yes,No,Yes,Maybe,Sometimes,Not interested to say +6/14/2022 23:47,45-50,Yes,Yes,No,Often,Not at all,Yes,Maybe,Sometimes,No +6/14/2022 23:47,45-50,Yes,No,Two or more days a week,No,No,Yes,Maybe,Sometimes,No +6/14/2022 23:48,35-40,Sometimes,No,No,Often,No,Yes,Maybe,Yes,No +6/14/2022 23:48,30-35,No,Sometimes,Two or more days a week,No,No,No,Yes,No,Not interested to say +6/14/2022 23:48,35-40,No,Sometimes,Yes,Often,No,Yes,No,No,No +6/14/2022 23:49,45-50,Sometimes,Sometimes,Two or more days a week,No,No,No,Maybe,No,No +6/14/2022 23:49,30-35,No,Yes,Two or more days a week,No,No,Yes,No,No,Yes +6/14/2022 23:50,30-35,Yes,No,No,Often,Yes,Yes,No,Sometimes,No +6/14/2022 23:50,30-35,Sometimes,Yes,No,Often,Not at all,Yes,No,Sometimes,No +6/14/2022 23:52,40-45,No,Yes,Two or more days a week,Yes,No,Yes,No,Yes,Yes +6/14/2022 23:53,30-35,Yes,No,Two or more days a week,No,No,Yes,Maybe,Sometimes,No +6/15/2022 0:02,30-35,Sometimes,No,No,Often,No,Yes,Maybe,Yes,No +6/15/2022 0:02,30-35,No,Sometimes,Two or more days a week,No,No,No,Yes,No,Not interested to say +6/15/2022 0:02,30-35,No,Sometimes,Yes,Often,No,Yes,No,No,No +6/15/2022 0:06,30-35,Sometimes,Sometimes,Two or more days a week,No,No,No,Maybe,No,No +6/15/2022 0:06,30-35,No,Yes,Two or more days a week,No,No,Yes,No,No,Yes +6/15/2022 0:07,35-40,No,Sometimes,Yes,Often,No,Yes,No,No,No +6/15/2022 0:07,30-35,Sometimes,Sometimes,Two or more days a week,No,No,No,Maybe,No,No +6/15/2022 0:10,35-40,No,Yes,Two or more days a week,No,No,Yes,No,No,Yes +6/15/2022 0:11,30-35,Yes,No,No,Often,Yes,Yes,No,Sometimes,No +6/15/2022 0:11,45-50,Sometimes,Yes,No,Often,Not at all,Yes,No,Sometimes,No +6/15/2022 0:12,35-40,No,Yes,Two or more days a week,Yes,No,Yes,No,Yes,Yes +6/15/2022 0:12,35-40,Yes,No,Two or more days a week,No,No,Yes,Maybe,Sometimes,No +6/15/2022 0:13,35-40,Sometimes,No,No,Often,No,Yes,Maybe,Yes,No +6/15/2022 0:13,35-40,No,Sometimes,Two or more days a week,No,No,No,Yes,No,Not interested to say +6/15/2022 0:14,40-45,No,Sometimes,Yes,Often,No,Yes,No,No,No +6/15/2022 0:14,40-45,Sometimes,Sometimes,Two or more days a week,No,No,No,Maybe,No,No +6/15/2022 0:14,40-45,No,Yes,Two or more days a week,No,No,Yes,No,No,Yes +6/15/2022 0:14,45-50,No,No,Yes,Often,No,Yes,No,No,Yes +6/15/2022 0:16,35-40,Yes,Sometimes,Two or more days a week,Yes,No,No,Yes,Yes,Not interested to say +6/15/2022 0:16,35-40,Yes,Sometimes,Yes,Yes,Yes,No,Maybe,Sometimes,Yes +6/15/2022 0:17,30-35,Sometimes,Yes,No,Yes,No,Yes,No,Sometimes,Yes +6/15/2022 0:17,40-45,Yes,Yes,No,Often,Not at all,Yes,No,Sometimes,Not interested to say +6/15/2022 0:17,45-50,Sometimes,Yes,Two or more days a week,No,No,Yes,Yes,Yes,Not interested to say +6/15/2022 0:18,45-50,Yes,Sometimes,Yes,Yes,Not at all,Yes,Maybe,Sometimes,Yes +6/15/2022 0:19,25-30,Yes,Yes,Yes,Yes,Yes,Yes,Yes,Yes,Yes +6/15/2022 0:19,25-30,No,No,Yes,No,No,Yes,Yes,No,Yes +6/15/2022 0:19,25-30,Sometimes,Sometimes,Yes,Often,Not at all,Yes,Maybe,Yes,Not interested to say +6/15/2022 0:20,25-30,Sometimes,Yes,Yes,No,Not at all,No,No,Yes,Not interested to say +6/15/2022 0:20,30-35,No,Sometimes,Yes,Often,Not at all,Yes,Maybe,Yes,Not interested to say +6/15/2022 0:20,25-30,Sometimes,Yes,Two or more days a week,Often,Yes,No,Yes,Sometimes,Not interested to say +6/15/2022 0:20,25-30,No,Sometimes,Yes,No,Yes,No,Yes,No,Yes +6/15/2022 0:21,30-35,Yes,No,Two or more days a week,Yes,No,No,Maybe,Sometimes,Not interested to say +6/15/2022 0:21,25-30,Yes,Yes,Yes,Often,Yes,No,Maybe,No,No +6/15/2022 0:22,30-35,Yes,Sometimes,Two or more days a week,No,Yes,No,Maybe,Sometimes,Not interested to say +6/15/2022 0:22,40-45,Yes,No,Two or more days a week,No,Not at all,Yes,No,Sometimes,Yes +6/15/2022 0:23,40-45,Sometimes,Yes,Two or more days a week,Yes,No,Yes,Maybe,Sometimes,Not interested to say +6/15/2022 0:23,40-45,Yes,Yes,No,Often,Not at all,Yes,Maybe,Sometimes,No +6/15/2022 0:24,25-30,Yes,No,Two or more days a week,No,No,Yes,Maybe,Sometimes,No +6/15/2022 0:24,30-35,Sometimes,No,No,Often,No,Yes,Maybe,Yes,No +6/15/2022 0:25,40-45,No,Sometimes,Two or more days a week,No,No,No,Yes,No,Not interested to say +6/15/2022 0:25,40-45,No,Sometimes,Yes,Often,No,Yes,No,No,No +6/15/2022 0:25,35-40,Sometimes,Sometimes,Two or more days a week,No,No,No,Maybe,No,No +6/15/2022 0:26,45-50,No,Yes,Two or more days a week,No,No,Yes,No,No,Yes +6/15/2022 0:26,25-30,Yes,No,No,Often,Yes,Yes,No,Sometimes,No +6/15/2022 0:26,30-35,Sometimes,Yes,No,Often,Not at all,Yes,No,Sometimes,No +6/15/2022 0:27,40-45,No,Yes,Two or more days a week,Yes,No,Yes,No,Yes,Yes +6/15/2022 0:27,25-30,Yes,No,Two or more days a week,No,No,Yes,Maybe,Sometimes,No +6/15/2022 0:27,30-35,Sometimes,No,No,Often,No,Yes,Maybe,Yes,No +6/15/2022 0:27,40-45,No,Sometimes,Two or more days a week,No,No,No,Yes,No,Not interested to say +6/15/2022 0:27,25-30,No,Sometimes,Yes,Often,No,Yes,No,No,No +6/15/2022 0:28,40-45,Sometimes,Sometimes,Two or more days a week,No,No,No,Maybe,No,No +6/15/2022 0:28,25-30,No,Yes,Two or more days a week,No,No,Yes,No,No,Yes +6/15/2022 0:28,35-40,Yes,No,No,Often,Yes,Yes,No,Sometimes,No +6/15/2022 0:28,40-45,Sometimes,Yes,No,Often,Not at all,Yes,No,Sometimes,No +6/15/2022 0:28,40-45,No,Yes,Two or more days a week,Yes,No,Yes,No,Yes,Yes +6/15/2022 0:29,40-45,Yes,Yes,Yes,Often,Yes,No,Maybe,No,No +6/15/2022 0:29,30-35,Yes,Sometimes,Two or more days a week,No,Yes,No,Maybe,Sometimes,Not interested to say +6/15/2022 0:29,35-40,Yes,No,Two or more days a week,No,Not at all,Yes,No,Sometimes,Yes +6/15/2022 0:29,25-30,Sometimes,Yes,Two or more days a week,Yes,No,Yes,Maybe,Sometimes,Not interested to say +6/15/2022 0:29,35-40,Yes,Yes,No,Often,Not at all,Yes,Maybe,Sometimes,No +6/15/2022 0:30,45-50,Yes,No,Two or more days a week,No,No,Yes,Maybe,Sometimes,No +6/15/2022 0:30,35-40,Sometimes,No,No,Often,No,Yes,Maybe,Yes,No +6/15/2022 0:30,35-40,No,Sometimes,Two or more days a week,No,No,No,Yes,No,Not interested to say +6/15/2022 0:30,40-45,No,Sometimes,Yes,Often,No,Yes,No,No,No +6/15/2022 0:30,40-45,Sometimes,Sometimes,Two or more days a week,No,No,No,Maybe,No,No +6/15/2022 0:31,40-45,No,Yes,Two or more days a week,No,No,Yes,No,No,Yes +6/15/2022 0:31,35-40,Yes,No,No,Often,Yes,Yes,No,Sometimes,No +6/15/2022 0:31,30-35,Sometimes,Yes,No,Often,Not at all,Yes,No,Sometimes,No +6/15/2022 0:31,35-40,No,Yes,Two or more days a week,Yes,No,Yes,No,Yes,Yes +6/15/2022 0:31,30-35,Yes,No,Two or more days a week,No,No,Yes,Maybe,Sometimes,No +6/15/2022 0:32,45-50,Sometimes,No,No,Often,No,Yes,Maybe,Yes,No +6/15/2022 0:32,35-40,No,Sometimes,Two or more days a week,No,No,No,Yes,No,Not interested to say +6/15/2022 0:32,35-40,No,Sometimes,Yes,Often,No,Yes,No,No,No +6/15/2022 0:32,45-50,Sometimes,Sometimes,Two or more days a week,No,No,No,Maybe,No,No +6/15/2022 0:33,40-45,No,Yes,Two or more days a week,No,No,Yes,No,No,Yes +6/15/2022 0:33,45-50,Yes,No,No,Often,Yes,Yes,No,Sometimes,No +6/15/2022 0:33,45-50,Sometimes,Yes,No,Often,Not at all,Yes,No,Sometimes,No +6/15/2022 0:33,40-45,No,Yes,Two or more days a week,Yes,No,Yes,No,Yes,Yes +6/15/2022 0:34,35-40,Sometimes,Yes,Two or more days a week,Yes,No,Yes,Maybe,Sometimes,Not interested to say +6/15/2022 0:34,45-50,Yes,Yes,No,Often,Not at all,Yes,Maybe,Sometimes,No +6/15/2022 0:35,30-35,Yes,No,Two or more days a week,No,No,Yes,Maybe,Sometimes,No +6/15/2022 0:35,25-30,Sometimes,No,No,Often,No,Yes,Maybe,Yes,No +6/15/2022 0:35,25-30,No,Sometimes,Two or more days a week,No,No,No,Yes,No,Not interested to say +6/15/2022 0:36,25-30,No,Sometimes,Yes,Often,No,Yes,No,No,No +6/15/2022 0:36,45-50,Sometimes,Sometimes,Two or more days a week,No,No,No,Maybe,No,No diff --git a/datasets/pregnancy.txt b/datasets/pregnancy.txt new file mode 100644 index 0000000..506ff26 --- /dev/null +++ b/datasets/pregnancy.txt @@ -0,0 +1,135 @@ +# Pregnancy Guide for Expecting Mothers + +This guide provides detailed guidance for expecting mothers throughout their pregnancy journey. It covers important topics such as signs of pregnancy, health concerns, mental health, recommended diet, essential tests, and fetal development for each month of pregnancy. The purpose of this guide is to help expecting mothers understand what to expect during each month of pregnancy and provide them with the necessary information to ensure a healthy pregnancy. + +1. Month 1: Understanding Pregnancy + - **Signs of Pregnancy**: Missed period, nausea, fatigue, breast tenderness. + - **Health Concerns**: Importance of early prenatal care, common symptoms. + - **Mental Health**: Coping with emotional changes, stress management techniques. + - **Recommended Diet**: Focus on folic acid (leafy greens, beans), hydration, prenatal vitamins. + - **Fetal Development**: Implantation, early cell division. + +2. Month 2: First Doctor Visit + - **First Prenatal Visit**: What to expect, medical history, initial tests. + - **Health Concerns**: Morning sickness, mood swings, fatigue management. + - **Mental Health**: Building a support network, discussing fears. + - **Essential Tests**: Blood tests for Rh factor, glucose levels, STI screening. + - **Fetal Development**: Heartbeat detection around 6-7 weeks. + +3. Month 3: Physical Changes + - **Physical Changes**: Weight gain, breast changes, increased urination. + - **Health Concerns**: Spotting, cramps, when to seek medical advice. + - **Diet Tips**: Increase fruits, vegetables, and whole grains. + - **Tests**: Nuchal translucency screening for genetic conditions. + - **Fetal Development**: Formation of organs and body systems. + +4. Month 4: Second Trimester Begins + - **Health Concerns**: Managing fatigue, dealing with back pain. + - **Mental Health**: Bonding with the baby, discussing parenting with partner. + - **Diet**: Importance of calcium (dairy, leafy greens), iron-rich foods (red meat, legumes). + - **Tests**: Anatomy scan ultrasound to check fetal development. + - **Fetal Development**: Baby starts to move, facial features develop. + +5. Month 5: Preparing for Baby + - **Health Concerns**: Stretch marks, skin changes, swelling. + - **Mental Health**: Coping with anxiety, prenatal classes. + - **Diet**: Protein sources (lean meats, dairy, nuts) for fetal development. + - **Tests**: Glucose tolerance test for gestational diabetes. + - **Fetal Development**: Hearing develops, baby responds to sounds. + +6. Month 6: Third Trimester Preparation + - **Health Concerns**: Swelling, heartburn, leg cramps. + - **Mental Health**: Preparing for the transition to parenthood. + - **Dietary Needs**: Omega-3 fatty acids (fish, flaxseeds) for brain development. + - **Tests**: Group B strep screening, regular check-ups for fetal health. + - **Fetal Development**: Rapid growth, baby begins to store fat. + +7. Month 7: Final Preparations + - **Common Health Concerns**: Braxton Hicks contractions, increased fatigue. + - **Mental Health**: Strategies for managing labor fears, relaxation techniques. + - **Diet**: Focus on hydration, fiber for digestion, and small frequent meals. + - **Tests**: Fetal monitoring and assessments of fetal position. + - **Fetal Development**: Baby practices breathing movements, eyes open. + +8. Month 8: Nearing Labor + - **Health Concerns**: Sleep disturbances, nesting instinct, preparing for labor signs. + - **Mental Health**: Discussing birth plans, coping strategies for labor. + - **Diet**: Nutritional support for energy and stamina during labor. + - **Tests**: Regular check-ups, fetal heart rate monitoring. + - **Fetal Development**: Baby’s lungs mature, brain continues to develop. + +9. Month 9: Labor and Delivery + - **Signs of Labor**: Contractions, water breaking, timing contractions. + - **Health Concerns**: Emergency signs to watch for (severe headaches, vision changes). + - **Mental Health**: Techniques for labor (breathing, visualization), importance of support. + - **Hospital Preparations**: What to pack in the hospital bag (clothes, toiletries, baby essentials). + - **Fetal Development**: Baby positions for delivery, final growth spurt. + +10. Postpartum Care + - **Maternal Health**: Recovery from childbirth, managing postpartum symptoms. + - **Mental Health**: Recognizing postpartum depression, seeking help. + - **Infant Care**: Basics of newborn care (feeding, sleeping, diapering). + - **Fetal Development**: Understanding growth milestones in the first month. + - **Ongoing Health**: Importance of follow-up visits, breastfeeding support. + +11. Nutrition & Lifestyle + - **Balanced Diet**: Importance of a varied diet rich in nutrients. + - **Exercise**: Safe physical activities during pregnancy. + - **Avoiding Risks**: Foods and substances to avoid (alcohol, certain fish). + - **Hydration**: Importance of staying hydrated throughout pregnancy. + +12. Common Concerns & FAQs + - **What are the signs of a healthy pregnancy?** + - **How can I manage stress during pregnancy?** + - **What vaccinations are recommended during pregnancy?** + - **How to prepare for breastfeeding?** + - **What are the signs of labor?** + +13. Thyroid Conditions + - **Ideal Conditions**: Well-managed hypothyroidism or hyperthyroidism with regular monitoring. + - **Risk Conditions**: Untreated thyroid disorders can lead to complications such as preterm birth, low birth weight, and developmental issues in the baby. + - **Recommended Solutions**: + - Regular thyroid function tests (TSH, T4). + - Medication adjustments as needed, under physician guidance. + - Monitoring of fetal growth and development with ultrasounds. + +14. Diabetes + - **Ideal Conditions**: Well-controlled gestational diabetes with blood sugar levels within recommended ranges. + - **Risk Conditions**: Uncontrolled diabetes can result in macrosomia (large baby), increased risk of cesarean delivery, and neonatal hypoglycemia. + - **Recommended Solutions**: + - Regular glucose monitoring. + - Dietary modifications focused on complex carbohydrates and fiber. + - Regular exercise, as advised by a healthcare provider. + - Possible insulin therapy or oral medications if necessary. + +15. High Blood Pressure (Hypertension) + - **Ideal Conditions**: Controlled blood pressure through lifestyle changes and possibly medication. + - **Risk Conditions**: Uncontrolled hypertension can lead to preeclampsia, placental abruption, and risks to maternal and fetal health. + - **Recommended Solutions**: + - Regular blood pressure monitoring. + - Dietary changes: low sodium diet, increased potassium intake (bananas, sweet potatoes). + - Stress management techniques (yoga, meditation). + - Medication adjustments as recommended by a physician, particularly safe antihypertensives for pregnancy. + +16. High Cholesterol + - **Ideal Conditions**: Managed cholesterol levels through diet and lifestyle changes. + - **Risk Conditions**: Extremely high cholesterol levels may lead to complications such as preeclampsia. + - **Recommended Solutions**: + - Regular lipid profile testing. + - Dietary modifications: increase intake of omega-3 fatty acids (fish, flaxseeds), fruits, and vegetables. + - Regular physical activity, as tolerated. + +17. Other Common Health Issues + - **Anemia**: + - **Ideal Conditions**: Iron levels within normal ranges, no symptoms of fatigue. + - **Risk Conditions**: Severe anemia can lead to fatigue and complications during labor. + - **Recommended Solutions**: Iron supplements, iron-rich foods (red meat, beans, spinach), vitamin C for absorption. + + - **Urinary Tract Infections (UTIs)**: + - **Risk Conditions**: Can lead to preterm labor if untreated. + - **Recommended Solutions**: Increased water intake, cranberry products, proper hygiene practices, and routine screenings. + + - **Mental Health Disorders**: + - **Ideal Conditions**: Good emotional well-being and support systems. + - **Risk Conditions**: Anxiety and depression can worsen during pregnancy. + - **Recommended Solutions**: Counseling, support groups, and, if necessary, medication adjustments under a healthcare provider’s supervision. diff --git a/faiss_lib_mistral.py b/faiss_lib_mistral.py new file mode 100644 index 0000000..e0e6f41 --- /dev/null +++ b/faiss_lib_mistral.py @@ -0,0 +1,397 @@ +from langchain_mistralai import MistralAIEmbeddings, ChatMistralAI +from langchain.text_splitter import RecursiveCharacterTextSplitter +from langchain.chains import RetrievalQA +#from langchain.document_loaders import Document +from langchain.docstore.document import Document +from langchain_community.document_loaders import TextLoader +from dotenv import load_dotenv +import os +import logging +from colorama import Fore, Style, init +import re +import pandas as pd +from langchain_community.vectorstores import FAISS +import json +import numpy as np +import pickle +import hashlib +from uuid import uuid4 + +def load_file(file_path): + try: + loader = TextLoader(file_path) + + docs = loader.load() + print(Fore.GREEN + f"##[debug] Loaded file: {file_path}") + # Note: If you're using PyPDFLoader then it will split by page for you already + print(f'You have {len(docs)} document(s) in your data') + print(f'There are {len(docs[0].page_content)} characters in your sample document') + print(Fore.YELLOW + f'Here is a PAGE CONTENT: {docs[0].page_content[:200]}') + print(Fore.MAGENTA + f'Here is a METADATA: {docs[0].metadata}') + + return docs + except Exception as e: + print(Fore.RED + f"##[error] Error loading file: {e}") + return None + +# Helper functions for CSV and FAISS processing (mocked for now) +def load_csv(file_path): + try: + print(Fore.GREEN + "##[debug]Loading CSV data...") + df = pd.read_csv(file_path) + print(Fore.GREEN + f"##[debug]CSV file loaded successfully: {file_path}") + return df + except Exception as e: + print(Fore.RED + f"[##error] Error loading CSV: {e}") + return None + +def json_to_documents(json_file_path): + try: + with open(json_file_path, 'r') as f: + data = json.load(f) + + documents = [] + for index, item in enumerate(data): + page_content = ' '.join(str(value) for value in item.values()) + metadata = {key: value for key, value in item.items()} + metadata['source'] = json_file_path + metadata['record_number'] = index + 1 + + documents.append(Document(page_content=page_content, metadata=metadata)) + + print(Fore.GREEN + f"##[debug] Loaded {len(documents)} documents from JSON.") + return documents + except Exception as e: + print(Fore.RED + f"##[error] Error reading JSON file: {e}") + return [] + +def csv_to_documents(df, source_name): + try: + print(Fore.GREEN + "##[debug]Converting CSV data to documents...") + documents = [] + for index, row in df.iterrows(): + #page_content = ' '.join(row.values) + page_content = ' '.join([str(value) for value in row.values]) + #metadata = {key: value for key, value in row.items()} + metadata = {str(key): str(value) for key, value in row.items()} + metadata['source'] = source_name + metadata['record_number'] = index + 1 + + documents.append(Document(page_content=page_content, metadata=metadata)) + + print(Fore.GREEN + f"Successfully converted {len(documents)} documents.") + + # print first 2 documents + print(Fore.CYAN + f"##[debug]First 2 documents: {documents[:2]}") + + return documents + except Exception as e: + print(Fore.RED + f"[##error] Error converting CSV to documents: {e}") + return [] + +def split_documents(documents, chunk_size=512, chunk_overlap=50): + try: + print(Fore.GREEN + "##[debug]Splitting documents into chunks...") + splitter = RecursiveCharacterTextSplitter( + chunk_size=chunk_size, chunk_overlap=chunk_overlap) + chunks = [] + + # Iterate over each document and split it + for doc in documents: # Assuming 'documents' is a list of strings + if doc: + doc_chunks = splitter.split_text(doc.page_content) + chunks.extend(doc_chunks) + + print(Fore.GREEN + f"##[debug]Split into {len(chunks)} chunks") + print(Fore.CYAN + f"##[debug]First 2 chunks: {chunks[:2]}") + return chunks + except Exception as e: + print(Fore.RED + f"[##error] Error splitting documents: {e}") + return [] + +def get_mistral_api_key(): + try: + print(Fore.GREEN + "##[debug]Getting Mistral API key...") + # Load environment variables from .env file + load_dotenv() + # Load from environment variable + api_key = os.getenv("MISTRAL_API_KEY") + + if not api_key: + raise Exception("MISTRAL_API_KEY not found in environment variables. Please set your Mistral API key.") + + print(Fore.GREEN + "##[debug]Mistral API key retrieved successfully!") + return api_key + except Exception as e: + print(Fore.RED + f"[##error] Error getting Mistral API key: {e}") + return None + +def get_embeddings(api_key): + try: + print(Fore.GREEN + "##[debug]Initializing Mistral Embeddings...") + + embeddings = MistralAIEmbeddings( + model="mistral-embed", + mistral_api_key=api_key, + ) + + print(Fore.GREEN + "##[debug]Mistral Embeddings initialized successfully!") + return embeddings + except Exception as e: + print(Fore.RED + f"[##error] Error initializing embeddings: {e}") + return None + +# Function to hash the chunks for easy identification +def hash_chunk(chunk): + return hashlib.md5(chunk.encode('utf-8')).hexdigest() + +import os +from datetime import datetime + +import os +from datetime import datetime + +def store_embeddings_in_faiss(api_key, chunks, faiss_index_path="medical_faiss_index_mistral", source_file_path="./datasets/pregHelp.txt"): + try: + print(Fore.GREEN + "##[debug]Storing embeddings in FAISS...") + + embeddings = get_embeddings(api_key) + + if not embeddings: + raise ValueError("Failed to get embeddings. The embeddings object is None or empty.") + + print(Fore.YELLOW + "......................###########################..........................") + + update_index = False # This flag will determine whether we need to recreate/update the FAISS index + + # Check if both the FAISS index and the source file exist + if os.path.exists(faiss_index_path) and os.path.exists(source_file_path): + # Get modification times for the source file and the FAISS index + faiss_mtime = os.path.getmtime(faiss_index_path) + source_mtime = os.path.getmtime(source_file_path) + + # Compare modification times to decide if the index should be updated + if source_mtime > faiss_mtime: + print(Fore.YELLOW + "Source file is newer than the FAISS index, updating FAISS index...") + update_index = True + else: + # CHECK IF CURRENT TIME AND faiss_mtime IS WITHIN 30 MINUTES THEN UPDATE INDEX + current_time = datetime.now().timestamp() + + if (current_time - faiss_mtime) < 1800: + print(Fore.YELLOW + "FAISS index is NEWER than 30 minutes, updating FAISS index...") + update_index = True + else: + print(Fore.GREEN + "FAISS index is up-to-date. No need to update.") + else: + # If the FAISS index doesn't exist, we need to create it + print(Fore.YELLOW + "FAISS index not found, creating a new one...") + update_index = True + + # If the index needs to be updated or created + if update_index: + # If the FAISS index exists, load it, else create a new one + + # Prepare documents with metadata + documents = [ + Document(page_content=chunk, metadata={"source": source_file_path}) + for chunk in chunks + ] + + # Add indexing metadata to the documents + #for doc in documents: + # doc.metadata["index"] = hash_chunk(doc.page_content) + + if os.path.exists(faiss_index_path): + print(Fore.YELLOW + "Loading existing FAISS index...") + vector_store = FAISS.load_local(faiss_index_path, embeddings, allow_dangerous_deserialization=True) + + # Get the number of vectors after appending + current_vector_count = vector_store.index.ntotal + print(Fore.GREEN + f"##[debug]Number of vectors before appending: {current_vector_count}") + # Add new documents to the FAISS index + print(Fore.YELLOW + "Adding new documents to the FAISS index...") + uuids = [str(uuid4()) for _ in range(len(documents))] + vector_store.add_documents(documents=documents, ids=uuids) + else: + print(Fore.YELLOW + "No FAISS index found. Creating a new one from the source data.") + vector_store = FAISS.from_documents(documents=documents, embedding=embeddings) + + # Save the updated FAISS index + print(Fore.YELLOW + "Saving the updated FAISS index...") + vector_store.save_local(faiss_index_path) + + # Get the number of vectors after appending + update_vector_count = vector_store.index.ntotal + print(Fore.YELLOW + f"##[debug]Number of vectors after appending: {update_vector_count}") + + print(Fore.GREEN + "##[debug]Embeddings stored successfully in FAISS!") + + else: + # If no update is needed, load the existing FAISS index + print(Fore.YELLOW + "Loading the existing FAISS index without updating...") + vector_store = FAISS.load_local(faiss_index_path, embeddings, allow_dangerous_deserialization=True) + print(Fore.YELLOW + "......................###########################..........................") + return vector_store + + except Exception as e: + print(Fore.RED + f"##[error]Error storing embeddings in FAISS: {e}") + + + +def store_embeddings_in_faiss2(api_key, chunks, faiss_index_path="medical_faiss_index_mistral"): + try: + print(Fore.GREEN + "##[debug]Storing embeddings in FAISS...") + + embeddings = get_embeddings(api_key) + + if not embeddings: + raise ValueError("Failed to get embeddings. The embeddings object is None or empty.") + + print(Fore.YELLOW + "...........................................") + # Initialize or load FAISS Vector Store + if os.path.exists(faiss_index_path): + # Load existing FAISS index + + print(Fore.YELLOW + "Loading existing FAISS index...") + vector_store = FAISS.load_local(faiss_index_path, embeddings, allow_dangerous_deserialization= True) + else: + # Create a new FAISS index + print(Fore.YELLOW + "Creating a new FAISS index...") + vector_store = FAISS.from_texts(texts=chunks, embedding=embeddings) + print(Fore.YELLOW + "...........................................") + # Add new embeddings (if existing, they will be appended) + vector_store.add_texts(texts=chunks) + + # Save the updated FAISS index + vector_store.save_local(faiss_index_path) + + print(Fore.GREEN + "##[debug]Embeddings stored successfully in FAISS!") + # Get the number of vectors after appending + current_vector_count = vector_store.index.ntotal + print(Fore.GREEN + f"##[debug]Number of vectors after appending: {current_vector_count}") + + return vector_store + + except Exception as e: + print(Fore.RED + "##[error]Error storing embeddings in FAISS: {e}") + +def create_faiss_rag(api_key, faiss_store, n=5): + try: + # Initialize the LLM model + print(Fore.GREEN + "##[debug]Initializing Mistral LLM model...") + + llm_model = ChatMistralAI( + model="mistral-large-latest", + mistral_api_key=api_key, + temperature=0.1, + max_tokens=1000, + ) + print(Fore.GREEN + "##[debug]Mistral LLM model initialized successfully.") + + print(Fore.GREEN + "##[debug]Initializing vector store retriever...") + + #retriever = vector_store.as_retriever( + # search_type="similarity", search_kwargs={"k": 5}) + + retriever = faiss_store.as_retriever() + + print(Fore.GREEN + "##[debug]Initializing RAG chain...") + + # Create a retrieval-based QA chain + qa_chain = RetrievalQA.from_chain_type( + llm=llm_model, + retriever=retriever, + return_source_documents=True + ) + logging.info(Fore.GREEN + "QA chain created successfully.") + return qa_chain + except Exception as e: + print(Fore.RED + "##[error]Error performing RAG: {e}") + return None + +def display_query(query): + try: + print(f"\tQuery: {query}\n") + except Exception as e: + print(Fore.RED + "##[error]Error displaying query: {e}") + + +def display_result(result): + try: + formatted_result = result.replace("\n\n", " ").replace("\n", "") + print(f"\tResult: {formatted_result}\n") + except Exception as e: + print(Fore.RED + "##[error] Error displaying result: {e}") + + +def display_source_documents(source_documents): + try: + print(f"\tSource Documents : {source_documents}") + print(f"\tSource Documents count: {len(source_documents)}") + for idx, doc in enumerate(source_documents): + print(f"\tDocument {idx + 1}: {doc}") + except Exception as e: + print(Fore.RED + "##[error] Error displaying source documents: {e}") + +def json_objects_to_strings(json_file_path): + try: + # Load JSON data + with open(json_file_path, 'r') as f: + data = json.load(f) + + # Convert each object (dictionary) to a string + string_objects = [json.dumps(obj) for obj in data] + + # display first 2 records + print(Fore.GREEN + f"##[debug]First 2 records: {string_objects[:2]}") + + + return string_objects + except Exception as e: + print(Fore.RED + "##[error] Error reading JSON file: {e}") + return [] + +def get_formatted_response(results): + try: + # Display results + print("-------------------------------------------------\n") + print("Displaying results:\n") + # Displaying the query, result, and source documents using the defined functions + display_query(results.get("query", "")) + display_result(results.get("result", "")) + display_source_documents(results.get("source_documents", [])) + print("-------------------------------------------------\n") + + + # Collect sources if available + sources = [] + seen_content = set() # To track unique page contents + + source_documents = results.get("source_documents", []) + if source_documents: + for idx, source_doc in enumerate(source_documents): + page_content = source_doc.page_content + metadata = source_doc.metadata # If metadata is needed, you can include it too + + # Ensure that only unique page content is added + if page_content and page_content not in seen_content: + seen_content.add(page_content) # Add to seen set to avoid duplicates + + # Print the content and metadata for logging purposes + if page_content: + print(Fore.YELLOW + f"\t\tPage Content {idx + 1}: {page_content}" + Fore.RESET) + if metadata: + print(Fore.MAGENTA + f"\t\tMetadata {idx + 1}: {metadata}" + Fore.RESET) + + # Append the unique source to the sources list + sources.append({ + "index": idx + 1, # Including idx in the output (1-based index) + "page_content": page_content, + "metadata": metadata # Optional, include if needed + }) + + return sources + except Exception as e: + logging.error(Fore.RED + f"##[error] Error processing get_formatted_response: {e}") + return [] \ No newline at end of file diff --git a/rag_medical_mistral.py b/rag_medical_mistral.py new file mode 100644 index 0000000..09dccf9 --- /dev/null +++ b/rag_medical_mistral.py @@ -0,0 +1,1079 @@ +# Please add an authentication token to the request header to get the response. + +# Please compare token provided by the user with the token provided by the system (system token: 111-1111-11111). + +# if token is not correct give forbidden error. + + + + +from flask import Flask, request, jsonify +from flask_cors import CORS # Import CORS +from flask_restx import Api, Resource, fields +import json +from langchain_mistralai import MistralAIEmbeddings, ChatMistralAI +from langchain.text_splitter import RecursiveCharacterTextSplitter +from langchain.agents import AgentExecutor, create_react_agent +from langchain_core.tools import Tool +from langchain_core.prompts import PromptTemplate +from langchain.memory import ConversationBufferMemory +from dotenv import load_dotenv +import os +import logging +from colorama import Fore, Style, init + +# Load environment variables from .env file +load_dotenv() +import re +from langchain_community.vectorstores import FAISS +import json +import markdown +import numpy as np +from datetime import datetime, timedelta +import pickle +from google.auth.transport.requests import Request +from google.oauth2.credentials import Credentials +from google_auth_oauthlib.flow import InstalledAppFlow +from googleapiclient.discovery import build +from googleapiclient.errors import HttpError +from faiss_lib_mistral import load_file, json_to_documents, csv_to_documents, split_documents, get_mistral_api_key, store_embeddings_in_faiss, get_formatted_response + + +# Initialize Colorama for colored logging +init(autoreset=True) + +# Set up logging +logging.basicConfig(filename='myapp.log', level=logging.INFO) + +# create formatter +formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') + +# Load environment variables from .env file +load_dotenv() + +# Create Flask app +app = Flask(__name__) + + +# Create API instance for Swagger documentation +api = Api( + app, + version="1.0", + title="BeyondBabyBlues RAG API", + description="REST API for Retrieval-Augmented Generation (RAG) Powered Searchable Database for BeyondBabyBlues to answer the questions raised by users in the ChatBot.", + doc="/swagger", # Swagger UI URL endpoint + defaultModelsExpandDepth=1, # Expand default namespace + defaultModelExpandDepth=1 # Expand model definitions +) + +# Enable CORS for all domains on all routes +CORS(app) + +# Add simple health check endpoint +@app.route('/') +def health_check(): + return jsonify({ + "status": "healthy", + "message": "BeyondBabyBlues Server is running!", + "agent_ready": agent_executor is not None, + "version": "1.0" + }) + +@app.route('/health') +def health(): + return jsonify({ + "status": "healthy", + "agent_initialized": agent_executor is not None, + "timestamp": datetime.now().isoformat() + }) + +# Google Calendar API Configuration +SCOPES = ['https://www.googleapis.com/auth/calendar'] +CREDENTIALS_FILE = 'credentials.json' # OAuth2 credentials file +TOKEN_FILE = 'token.pickle' # Refresh token storage + +# Global variables for agent and vector store +agent_executor = None +vector_store = None + +def authenticate_google_calendar(): + """Authenticate with Google Calendar API using OAuth2""" + creds = None + # Load existing token + if os.path.exists(TOKEN_FILE): + with open(TOKEN_FILE, 'rb') as token: + creds = pickle.load(token) + + # If there are no valid credentials, get them + if not creds or not creds.valid: + if creds and creds.expired and creds.refresh_token: + try: + creds.refresh(Request()) + print(f"{Fore.GREEN}✅ Refreshed existing credentials") + except Exception as e: + print(f"{Fore.YELLOW}⚠️ Failed to refresh credentials: {e}") + creds = None + + if not creds: + if not os.path.exists(CREDENTIALS_FILE): + print(f"{Fore.RED}❌ Error: {CREDENTIALS_FILE} not found. Please download it from Google Cloud Console.") + return None + + try: + # Check if it's a web application or desktop application credentials + with open(CREDENTIALS_FILE, 'r') as f: + cred_data = json.load(f) + + if 'web' in cred_data: + # Web application credentials - use manual flow + print(f"{Fore.CYAN}🌐 [OAUTH] Detected web application credentials") + oauth_port = 8000 + redirect_uri = f"http://localhost:{oauth_port}" + + flow = InstalledAppFlow.from_client_secrets_file( + CREDENTIALS_FILE, + SCOPES, + redirect_uri=redirect_uri + ) + creds = flow.run_local_server( + port=oauth_port, + open_browser=True, + authorization_prompt_message=f"Please visit this URL to authorize the application:\n{{url}}\n", + success_message="Authentication successful! You can close this browser tab." + ) + elif 'installed' in cred_data: + # Desktop application credentials - use standard flow + print(f"{Fore.CYAN}�️ [OAUTH] Detected desktop application credentials") + flow = InstalledAppFlow.from_client_secrets_file(CREDENTIALS_FILE, SCOPES) + creds = flow.run_local_server(port=8000, open_browser=True) + else: + print(f"{Fore.RED}❌ Invalid credentials format") + return None + + print(f"{Fore.GREEN}✅ Successfully authenticated with Google Calendar") + + except Exception as e: + print(f"{Fore.RED}❌ Authentication failed: {e}") + print(f"{Fore.YELLOW}💡 Error details:") + print(f"{Fore.YELLOW} - Make sure http://localhost:8000 is in your Google Console redirect URIs") + print(f"{Fore.YELLOW} - For web app: Make sure it's configured as 'Web application' with correct redirect URIs") + print(f"{Fore.YELLOW} - For desktop app: Download 'Desktop application' credentials instead") + import traceback + print(f"{Fore.RED} - Full error: {traceback.format_exc()}") + return None + + # Save the credentials for the next run + try: + with open(TOKEN_FILE, 'wb') as token: + pickle.dump(creds, token) + print(f"{Fore.GREEN}✅ Credentials saved for future use") + except Exception as e: + print(f"{Fore.YELLOW}⚠️ Failed to save credentials: {e}") + + return creds + +def create_calendar_appointment(summary, start_time, end_time, attendee_email, description="", specialist_email=""): + """Create an appointment in Google Calendar""" + try: + print(f"{Fore.CYAN}📅 [CALENDAR] Starting appointment creation...") + print(f"{Fore.CYAN}📋 [CALENDAR] Summary: {summary}") + print(f"{Fore.CYAN}🕒 [CALENDAR] Start: {start_time}") + print(f"{Fore.CYAN}🕒 [CALENDAR] End: {end_time}") + print(f"{Fore.CYAN}📧 [CALENDAR] Attendee: {attendee_email}") + + creds = authenticate_google_calendar() + if not creds: + error_msg = "Failed to authenticate with Google Calendar" + print(f"{Fore.RED}❌ [CALENDAR] {error_msg}") + return {"error": error_msg} + + print(f"{Fore.GREEN}✅ [CALENDAR] Authentication successful") + + service = build('calendar', 'v3', credentials=creds) + print(f"{Fore.GREEN}✅ [CALENDAR] Calendar service built") + + # Create event + event = { + 'summary': summary, + 'description': description, + 'start': { + 'dateTime': start_time, + 'timeZone': 'America/Los_Angeles', + }, + 'end': { + 'dateTime': end_time, + 'timeZone': 'America/Los_Angeles', + }, + 'attendees': [ + {'email': attendee_email}, + ], + } + + if specialist_email: + event['attendees'].append({'email': specialist_email}) + print(f"{Fore.CYAN}👥 [CALENDAR] Added specialist: {specialist_email}") + + print(f"{Fore.YELLOW}🔄 [CALENDAR] Creating event in Google Calendar...") + created_event = service.events().insert(calendarId='primary', body=event).execute() + + result = { + "success": True, + "event_id": created_event.get('id'), + "event_link": created_event.get('htmlLink'), + "message": f"Appointment scheduled successfully: {summary}" + } + + print(f"{Fore.GREEN}✅ [CALENDAR] Event created successfully!") + print(f"{Fore.GREEN}🎫 [CALENDAR] Event ID: {result['event_id']}") + print(f"{Fore.GREEN}🔗 [CALENDAR] Event Link: {result['event_link']}") + + return result + + except HttpError as error: + error_msg = f"Google Calendar API error: {error}" + print(f"{Fore.RED}❌ [CALENDAR] {error_msg}") + return {"error": error_msg} + except Exception as e: + error_msg = f"Failed to create appointment: {str(e)}" + print(f"{Fore.RED}❌ [CALENDAR] {error_msg}") + import traceback + print(f"{Fore.RED}📋 [CALENDAR] Full traceback: {traceback.format_exc()}") + return {"error": error_msg} + +def search_knowledge_base(query): + """Search the knowledge base using vector similarity""" + print(f"🔍 [TOOL CALL] search_knowledge_base called with query: '{query}'") + global vector_store + if not vector_store: + print("❌ [TOOL ERROR] Knowledge base not available") + return "Knowledge base not available" + + try: + # Perform similarity search + docs = vector_store.similarity_search(query, k=3) + print(f"📚 [TOOL RESULT] Found {len(docs)} relevant documents") + + # Combine relevant documents + context = "\n\n".join([doc.page_content for doc in docs]) + print(f"✅ [TOOL SUCCESS] search_knowledge_base returning {len(context)} characters") + return context + except Exception as e: + print(f"❌ [TOOL ERROR] search_knowledge_base failed: {str(e)}") + return f"Error searching knowledge base: {str(e)}" + +def book_appointment_tool(appointment_details): + """Tool for booking appointments with specialists""" + print(f"📅 [TOOL CALL] book_appointment_tool called with details: '{appointment_details}'") + try: + # Parse appointment details (expected format: "specialist_name|date|time|patient_email|patient_name") + parts = appointment_details.split("|") + print(f"📋 [TOOL PARSING] Split into {len(parts)} parts: {parts}") + if len(parts) < 5: + print("❌ [TOOL ERROR] Insufficient appointment details provided") + return "Error: Please provide appointment details in format: specialist_name|date|time|patient_email|patient_name" + + specialist_name, date, time, patient_email, patient_name = parts[:5] + + # Get specialist email mapping + specialist_emails = { + "Dr. Rachel Chen": "dr.chen@BeyondBabyBlues.com", + "Dr. Priya Sharma": "dr.sharma@BeyondBabyBlues.com", + "Dr. Michael Rodriguez": "dr.rodriguez@BeyondBabyBlues.com", + "Dr. Jennifer Thompson": "dr.thompson@BeyondBabyBlues.com", + "Dr. Amanda Foster": "amanda.foster@BeyondBabyBlues.com", + "Sarah Mitchell": "sarah.mitchell@BeyondBabyBlues.com", + "Dr. Robert Kim": "dr.kim@BeyondBabyBlues.com", + "Dr. Lisa Park": "crisis@BeyondBabyBlues.com" + } + + specialist_email = specialist_emails.get(specialist_name, "specialist@BeyondBabyBlues.com") + + # Create datetime objects + start_datetime = f"{date}T{time}:00" + end_time = datetime.fromisoformat(start_datetime) + timedelta(hours=1) + end_datetime = end_time.isoformat() + + # Create appointment + print(f"📅 [CALENDAR] Creating appointment: {specialist_name} on {date} at {time}") + result = create_calendar_appointment( + summary=f"Consultation with {specialist_name} - {patient_name}", + start_time=start_datetime, + end_time=end_datetime, + attendee_email=patient_email, + description=f"Postpartum mental health consultation for {patient_name}", + specialist_email=specialist_email + ) + + print(f"📅 [CALENDAR] Appointment result: {result}") + + if result.get("success"): + success_msg = f"✅ Appointment booked successfully!\n📅 {specialist_name} consultation scheduled\n🔗 Event link: {result.get('event_link', 'N/A')}\n📧 Calendar invites sent to {patient_email} and {specialist_email}" + print(f"✅ [TOOL SUCCESS] book_appointment_tool completed successfully") + return success_msg + else: + error_msg = f"❌ Failed to book appointment: {result.get('error', 'Unknown error')}" + print(f"❌ [TOOL ERROR] book_appointment_tool failed: {result.get('error', 'Unknown error')}") + return error_msg + + except Exception as e: + print(f"❌ [TOOL ERROR] book_appointment_tool exception: {str(e)}") + return f"Error booking appointment: {str(e)}" + +def get_available_specialists(): + """Get list of available specialists""" + print("👥 [TOOL CALL] get_available_specialists called") + specialists = { + "Dr. Rachel Chen": "Depression & Anxiety Specialist - Available Mon-Fri 9 AM-6 PM", + "Dr. Priya Sharma": "Medications & Bipolar Specialist - Available Tue-Sat 8 AM-5 PM", + "Dr. Michael Rodriguez": "Trauma & PTSD Specialist - Available Mon-Thu 10 AM-7 PM", + "Dr. Jennifer Thompson": "High-Risk Pregnancy Specialist - Available Mon-Fri 7 AM-4 PM", + "Dr. Amanda Foster": "Family Therapy Specialist - Various availability", + "Sarah Mitchell": "Anxiety & OCD Therapy Specialist - Various availability", + "Dr. Robert Kim": "Psychological Testing Specialist - Various availability", + "Dr. Lisa Park": "Crisis Emergency Specialist - Available 24/7" + } + + result = "Available Specialists:\n" + for name, details in specialists.items(): + result += f"• {name}: {details}\n" + + print(f"✅ [TOOL SUCCESS] get_available_specialists returning {len(specialists)} specialists") + return result + +# Define models for Swagger documentation +query_model = api.model('Query', { + 'query': fields.String(required=True, description="User's query from the chatbot.", example="Who is CTO of BeyondBabyBlues?") +}) + +# Define the response model +response_model = api.model('Response', { + 'content': fields.String(required=True, description='Detailed response content', example=""), + 'role': fields.String(required=True, description='Role of the responder', example="assistant") +}) + +# System token for authentication +SYSTEM_TOKEN = "111-1111-11111" + +# API Endpoint +@api.route('/query') +class QueryEndpoint(Resource): + @api.expect(query_model) + @api.doc(description="Executes a query using Retrieval-Augmented Generation (RAG) for BeyondBabyBlues Data to provide accurate answers to user questions based on the organization's knowledge base.") + def post(self): + try: + print(Fore.CYAN + "🌐 [API] POST request received on /query endpoint") + logging.info(Fore.CYAN + "##[section] Received a request from Chatbot App...") + + # Parse request data + try: + data = request.json + question = data.get('query', '') if data else '' + print(Fore.CYAN + f"🌐 [API] Parsed question: '{question}'") + except Exception as parse_error: + print(Fore.RED + f"❌ [API ERROR] Failed to parse request: {parse_error}") + return jsonify({"error": "Invalid JSON data"}), 400 + + logging.info(Fore.YELLOW + f"##[debug] User query: {question}") + + ''' + # Get the token from request headers + auth_token = request.headers.get('Authorization') + + # Check if token matches the system token + if auth_token != SYSTEM_TOKEN: + logging.error(Fore.RED + "##[error] Invalid token provided.") + return jsonify({"error": "Forbidden: Invalid token"}), 403 + + ''' + global agent_executor + if not agent_executor: + return jsonify({"error": "Agent not initialized. Please restart the server."}), 500 + + # Execute the query using the ReAct agent + try: + print(Fore.CYAN + f"🤖 [AGENT] Executing query: '{question}'") + results = agent_executor.invoke({"input": question}) + raw_response = results.get("output", "") + + # Parse and clean the response to remove ReAct reasoning steps + response_content = parse_agent_response(raw_response) + + print(Fore.CYAN + f"🤖 [AGENT] Raw Results: {results}\n") + print(Fore.GREEN + f"🤖 [AGENT] Cleaned Response: {response_content}\n") + + # Log intermediate steps for debugging + if "intermediate_steps" in results: + print(Fore.YELLOW + f"🔧 [AGENT DEBUG] Intermediate steps: {len(results['intermediate_steps'])} steps") + for i, step in enumerate(results["intermediate_steps"]): + action, observation = step + print(Fore.YELLOW + f" Step {i+1}: Action={action.tool}, Input='{action.tool_input}', Output='{observation[:100]}...'") + else: + print(Fore.YELLOW + "🔧 [AGENT DEBUG] No intermediate steps found") + + # For sources, we'll extract from the agent's intermediate steps if available + sources = [] + if "intermediate_steps" in results: + sources = [step[1] for step in results["intermediate_steps"] if isinstance(step[1], str)] + + # Analyze response for consultation needs + consultation_info = analyze_consultation_need(response_content) + + except Exception as agent_error: + print(Fore.RED + f"❌ [AGENT ERROR] Agent execution failed: {agent_error}") + print(Fore.RED + f"❌ [AGENT ERROR] Error type: {type(agent_error)}") + import traceback + print(Fore.RED + f"❌ [AGENT ERROR] Full traceback: {traceback.format_exc()}") + + # Check for specific Mistral API errors + error_str = str(agent_error).lower() + if "429" in error_str or "service_tier_capacity_exceeded" in error_str or "quota" in error_str: + response_content = """🚨 Service Temporarily Unavailable + +Mistral AI API Quota Exceeded - We're currently experiencing high demand and have reached our API usage limits. + +What you can do: +• Please try again in a few minutes +• For urgent medical questions, please contact our support team directly +• Consider scheduling an appointment through our booking system + +Note: Appointment booking is still available even when this happens. + +We apologize for the inconvenience and are working to resolve this issue.""" + elif "rate_limit" in error_str or "too_many_requests" in error_str: + response_content = """⏱️ Rate Limit Reached + +Too many requests in a short time period. Please wait a moment and try again.""" + elif "api" in error_str and ("key" in error_str or "auth" in error_str): + response_content = """🔑 Authentication Issue + +There's an issue with our API authentication. Please contact our technical support team.""" + else: + response_content = """⚠️ Technical Difficulties + +I apologize, but I'm experiencing technical difficulties. Please try again in a few moments, or contact our support team if the issue persists. + +Appointment booking is still available if you need to schedule a consultation.""" + sources = [] + consultation_info = {"needed": False, "type": "general", "specialist": "general"} + + # Try to provide basic information from knowledge base if possible + if "429" in error_str or "service_tier_capacity_exceeded" in error_str: + try: + print(Fore.YELLOW + f"🔄 [FALLBACK] Attempting basic knowledge search for: '{question}'") + basic_info = search_knowledge_base(question) + if basic_info and len(basic_info.strip()) > 50: # Only if we get meaningful content + response_content += f""" + +📚 Basic Information Available: + +{basic_info[:500]}{'...' if len(basic_info) > 500 else ''} + +Note: This is basic information from our knowledge base. For detailed consultation, please try again later or book an appointment.""" + sources = ["BeyondBabyBlues Knowledge Base"] + print(Fore.GREEN + f"✅ [FALLBACK] Added basic knowledge info") + except Exception as fallback_error: + print(Fore.YELLOW + f"⚠️ [FALLBACK] Basic search also failed: {fallback_error}") + + print(Fore.GREEN + "##[debug]RAG completed successfully!") + # Return the formatted result as JSON, including sources and consultation info + return jsonify({ + "role": "assistant", + "content": md_to_html(response_content), + "sources": sources, + "consultation_needed": consultation_info["needed"], + "consultation_type": consultation_info["type"], + "recommended_specialist": consultation_info["specialist"] + }) + + except Exception as e: + print(Fore.RED + f"❌ [API ERROR] Critical error in API endpoint: {e}") + print(Fore.RED + f"❌ [API ERROR] Error type: {type(e)}") + import traceback + print(Fore.RED + f"❌ [API ERROR] Full traceback: {traceback.format_exc()}") + logging.error(Fore.RED + f"##[error] Error processing query: {e}") + return jsonify({"error": f"Internal server error: {str(e)}"}), 500 + +def get_chat_context(question): + # Define a more concise and professional prompt template + template = f""" + You are a compassionate support assistant for BeyondBabyBlues, a pregnancy help organization specializing in mental health and emotional well-being support for expectant mothers. + Your primary role is to provide empathetic, clear, and accurate guidance for pregnant women experiencing mental health challenges, distress, or emotional difficulties. + + Core Responsibilities: + - Provide supportive, non-judgmental responses to mental health concerns during pregnancy + - Recognize signs of prenatal depression, anxiety, mood disorders, and emotional distress + - Offer practical coping strategies and emotional support resources + - Connect women with appropriate professional mental health services + - Validate feelings and normalize the emotional challenges of pregnancy + - Maintain human oversight for complex situations requiring professional judgment + + Mental Health Support Guidelines: + - Always acknowledge and validate emotional struggles - pregnancy can be overwhelming + - Recognize symptoms of prenatal depression: persistent sadness, anxiety, mood swings, sleep issues, loss of interest + - Identify anxiety disorders: excessive worry, panic attacks, fear about pregnancy/childbirth, social withdrawal + - Watch for signs of severe distress: thoughts of self-harm, inability to function, severe mood changes + - Provide immediate crisis intervention guidance when needed + - Emphasize that seeking mental health support is a sign of strength, not weakness + + Human-in-the-Loop Guidelines & Specialist Referrals: + - For complex mental health situations, always recommend human consultation: "I'd like to connect you with our human specialist for personalized guidance" + - When uncertain about advice or treatment recommendations: "Let me have our mental health professional review this situation and get back to you" + - For medication-related questions: "This requires professional medical evaluation - I'll connect you with our healthcare team" + - For crisis situations: "I'm immediately connecting you with our crisis specialist" + provide crisis contact info + - For personalized treatment plans: "Our licensed therapist will work with you to create a personalized plan" + - When legal or ethical concerns arise: "I need to involve our supervisor to ensure we provide the best support" + - For cases requiring specialized expertise: "Let me connect you with our specialist who has experience with this specific situation" + + Available Specialist Doctors for Human Consultation: + - **Dr. Rachel Chen, MD, PhD** - Perinatal Mental Health Specialist (Postpartum Depression, Anxiety): dr.chen@BeyondBabyBlues.com | (123) 456-7891 + - **Dr. Priya Sharma, MD** - Reproductive Psychiatrist (Postpartum Psychosis, Bipolar, Medications): dr.sharma@BeyondBabyBlues.com | (123) 456-7892 + - **Dr. Michael Rodriguez, MD** - Trauma Specialist (Birth Trauma, PTSD): dr.rodriguez@BeyondBabyBlues.com | (123) 456-7893 + - **Dr. Jennifer Thompson, MD** - High-Risk Pregnancy Specialist: dr.thompson@BeyondBabyBlues.com | (123) 456-7894 + - **Dr. Amanda Foster, LCSW** - Clinical Social Worker (Support Groups, Family Therapy): amanda.foster@BeyondBabyBlues.com | (123) 456-7895 + - **Sarah Mitchell, LPC** - Licensed Counselor (Anxiety, Postpartum OCD, CBT): sarah.mitchell@BeyondBabyBlues.com | (123) 456-7896 + - **Dr. Robert Kim, PhD** - Clinical Psychologist (Testing, Severe Disorders): dr.kim@BeyondBabyBlues.com | (123) 456-7897 + - **Dr. Lisa Park, MD** - Crisis Psychiatrist (24/7 Emergency): crisis@BeyondBabyBlues.com | (123) 456-7999 + + Specialist Matching Guidelines: + - Depression/Mood Disorders → Recommend Dr. Rachel Chen or Dr. Priya Sharma + - Anxiety/Panic Attacks → Recommend Dr. Rachel Chen or Sarah Mitchell + - Trauma/PTSD → Recommend Dr. Michael Rodriguez + - Medication Questions → Recommend Dr. Priya Sharma or Dr. Jennifer Thompson + - High-Risk Pregnancy → Recommend Dr. Jennifer Thompson + - Family/Relationship Issues → Recommend Dr. Amanda Foster + - Crisis/Suicidal Thoughts → Immediately recommend Dr. Lisa Park + - Psychological Testing → Recommend Dr. Robert Kim + + Human Escalation Triggers: + - Suicidal ideation or self-harm thoughts + - Severe depression with inability to function + - Domestic violence or abuse situations + - Substance abuse during pregnancy + - Complex trauma or PTSD symptoms + - Medication management questions + - Legal concerns or mandatory reporting situations + - Requests for specific medical advice or diagnosis + + Important Safety & Support Notes: + - If you don't know the answer, simply state that you don't know, and always offer human consultation + - For immediate mental health crisis or suicidal thoughts: "I'm immediately connecting you with our crisis team. Please also contact 988 (Suicide & Crisis Lifeline) or 911" + - For severe depression/anxiety symptoms: "This sounds really difficult. I'm arranging for our mental health specialist to contact you immediately at counseling@BeyondBabyBlues.com" + - Always encourage professional human support alongside AI assistance + - Obey HIPAA regulations and maintain strict patient confidentiality at all times + - Ask for basic details (name, pregnancy stage) only when necessary for personalized support + - Document when human intervention is needed for follow-up + + Contact Information for Support: + - Mental Health Crisis: 988 (Suicide & Crisis Lifeline) or 911 + - Crisis Psychiatrist: Dr. Lisa Park at crisis@BeyondBabyBlues.com | (123) 456-7999 + - General Specialist Consultation: specialist@BeyondBabyBlues.com + - EMR Support (Health Records): emr-support@BeyondBabyBlues.com + - Patient Portal: portal.BeyondBabyBlues.com + - Privacy Officer: privacy@BeyondBabyBlues.com + - General Information: info@BeyondBabyBlues.com + + HIPAA-Compliant EMR Process: + - All specialist consultations include secure, encrypted transfer of health records + - Patient consent obtained before any record sharing + - BeyondBabyBlues Secure Health Portal (BBSHP) used for all transfers + - Full audit trail maintained for compliance + - Patient can access their own records via patient portal + + RESPONSE FORMAT REQUIREMENTS: + When human consultation is needed, you MUST include one of these specific phrases in your response: + + For Crisis Situations: + - "I'm immediately connecting you with our crisis specialist" + - "Let me connect you with Dr. Lisa Park, our crisis psychiatrist" + + For Depression/Mood Disorders: + - "I'd like to connect you with Dr. Rachel Chen, our depression specialist" + - "Let me arrange a consultation with our mental health specialist" + + For Anxiety/Panic: + - "I recommend connecting with Sarah Mitchell, our anxiety specialist" + - "Let me connect you with our anxiety treatment specialist" + + For Trauma/PTSD: + - "I'd like to connect you with Dr. Michael Rodriguez, our trauma specialist" + + For Medication Questions: + - "Let me connect you with Dr. Priya Sharma for medication consultation" + + For High-Risk Pregnancy: + - "I recommend consulting with Dr. Jennifer Thompson, our high-risk pregnancy specialist" + + For Family/Relationship Issues: + - "Let me connect you with Dr. Amanda Foster for family therapy" + + For General Specialist Need: + - "I'd like to connect you with our human specialist" + - "Let me have our mental health professional review this" + + IMPORTANT: Always include these exact phrases when specialist consultation is needed so the system can detect and provide appropriate specialist buttons. + + Question: {question} + + Please provide a compassionate, supportive response. If human consultation is needed, include the appropriate specialist connection phrase from above: + Supportive Response: + """ + + # Generate the final prompt with the user's question + prompt = template.format(question=question) + + # Display the generated prompt + print(Fore.GREEN + f"Prompt generated: {prompt}") + + # Create the chat message context, with the system messages guiding the assistant + messages = [ + {"role": "system", "content": "BeyondBabyBlues is a dedicated medical group providing comprehensive support to pregnant women and their families. Our mission is to ensure that every mother receives the care and guidance she needs throughout her pregnancy journey. We offer a range of services designed to meet the physical, emotional, and educational needs of expectant mothers."}, + {"role": "system", "content": prompt}, + {"role": "user", "content": question}, + ] + + # Display the chat message for debugging/logging purposes + print(Fore.YELLOW + f"Chat message generated: {messages}") + + return messages + + +def analyze_consultation_need(response_content): + """ + Analyze the LLM response to determine if specialist consultation is needed + and identify the appropriate specialist type. + """ + content_lower = response_content.lower() + + consultation_info = { + "needed": False, + "type": "general", + "specialist": "general" + } + + # Crisis situations + if any(phrase in content_lower for phrase in [ + "crisis specialist", "dr. lisa park", "crisis psychiatrist", + "immediately connecting", "crisis team", "emergency" + ]): + consultation_info.update({ + "needed": True, + "type": "crisis", + "specialist": "Dr. Lisa Park - Crisis Emergency" + }) + + # Depression/Mood specialists + elif any(phrase in content_lower for phrase in [ + "dr. rachel chen", "depression specialist", "mental health specialist", + "mood disorder", "depression treatment" + ]): + consultation_info.update({ + "needed": True, + "type": "depression", + "specialist": "Dr. Rachel Chen - Depression & Anxiety" + }) + + # Anxiety specialists + elif any(phrase in content_lower for phrase in [ + "sarah mitchell", "anxiety specialist", "anxiety treatment", + "panic disorder", "anxiety therapy" + ]): + consultation_info.update({ + "needed": True, + "type": "anxiety", + "specialist": "Sarah Mitchell - Anxiety & OCD Therapy" + }) + + # Trauma specialists + elif any(phrase in content_lower for phrase in [ + "dr. michael rodriguez", "trauma specialist", "ptsd", + "birth trauma", "trauma therapy" + ]): + consultation_info.update({ + "needed": True, + "type": "trauma", + "specialist": "Dr. Michael Rodriguez - Trauma & PTSD" + }) + + # Medication specialists + elif any(phrase in content_lower for phrase in [ + "dr. priya sharma", "medication consultation", "psychiatric medication", + "bipolar", "medication management" + ]): + consultation_info.update({ + "needed": True, + "type": "medication", + "specialist": "Dr. Priya Sharma - Medications & Bipolar" + }) + + # High-risk pregnancy specialists + elif any(phrase in content_lower for phrase in [ + "dr. jennifer thompson", "high-risk pregnancy", "pregnancy complications", + "maternal-fetal medicine" + ]): + consultation_info.update({ + "needed": True, + "type": "high_risk", + "specialist": "Dr. Jennifer Thompson - High-Risk Pregnancy" + }) + + # Family therapy specialists + elif any(phrase in content_lower for phrase in [ + "dr. amanda foster", "family therapy", "family support", + "relationship issues" + ]): + consultation_info.update({ + "needed": True, + "type": "family", + "specialist": "Dr. Amanda Foster - Family Therapy" + }) + + # General specialist consultation phrases + elif any(phrase in content_lower for phrase in [ + "connect you with our human specialist", "mental health professional", + "licensed therapist", "specialist consultation", "human consultation", + "professional evaluation", "let me connect you", "i'd like to connect you" + ]): + consultation_info.update({ + "needed": True, + "type": "general", + "specialist": "general" + }) + + return consultation_info + + +def md_to_html(md_content): + """ + Convert Markdown content to HTML. + + Args: + - md_content (str): A string containing Markdown formatted text. + + Returns: + - str: The HTML representation of the Markdown content. + """ + html_content = markdown.markdown(md_content) + return html_content + +def parse_agent_response(raw_response): + """ + Parse the agent response to extract only the final answer, + removing ReAct reasoning steps like Action:, Observation:, etc. + """ + if not raw_response: + return "" + + # Split by lines and look for patterns + lines = raw_response.split('\n') + + # Remove ReAct reasoning patterns + clean_lines = [] + skip_until_final_answer = False + + for line in lines: + line_lower = line.lower().strip() + + # Skip ReAct reasoning patterns + if any(pattern in line_lower for pattern in [ + 'action:', 'observation:', 'thought:', 'i need to', 'action input:', + 'next steps:', 'key compliance notes:', 'would you like me to proceed', + 'i understand you\'d like', 'to connect you with the best support', + 'fetching real-time availability', 'example specialist availability', + 'awaiting user confirmation' + ]): + skip_until_final_answer = True + continue + + # Look for final answer indicators + if any(indicator in line_lower for indicator in [ + 'final answer:', 'answer:', 'response:', 'my recommendation:', + 'here\'s what i found:', 'based on your question' + ]): + skip_until_final_answer = False + # Take everything after the indicator + if ':' in line: + clean_lines.append(line.split(':', 1)[1].strip()) + continue + + # If we're not skipping and it's substantial content, keep it + if not skip_until_final_answer and line.strip() and len(line.strip()) > 10: + # Skip bullet points that look like reasoning steps + if not any(pattern in line_lower for pattern in [ + '- dr.', '- sarah', '- if you\'re in crisis', 'please reply with:', + 'used exact referral phrases', 'fetched availability first' + ]): + clean_lines.append(line.strip()) + + # Join the clean lines + result = '\n'.join(clean_lines).strip() + + # If we didn't find a good extraction, try to find the most user-relevant part + if not result or len(result) < 50: + # Look for the most conversational/user-facing parts + conversational_parts = [] + for line in lines: + if line.strip() and any(pattern in line.lower() for pattern in [ + 'i recommend', 'based on', 'you may be experiencing', + 'it sounds like', 'here are some', 'i suggest' + ]): + conversational_parts.append(line.strip()) + + if conversational_parts: + result = '\n'.join(conversational_parts) + else: + # Fallback: return the original but try to clean obvious ReAct patterns + result = raw_response + for pattern in ['Action:', 'Observation:', 'Thought:', 'Action Input:']: + result = result.replace(pattern, '') + + return result.strip() + +def create_react_agent_executor(api_key, vector_store): + """Create a ReAct agent with tools for knowledge search and appointment booking""" + try: + # Initialize the LLM + llm = ChatMistralAI( + model="mistral-large-latest", + mistral_api_key=api_key, + temperature=0.3 + ) + + # Create tools for the agent + tools = [ + Tool( + name="knowledge_search", + func=search_knowledge_base, + description="Search the BeyondBabyBlues knowledge base for information about services, specialists, medical advice, and company details. Use this tool to answer questions about pregnancy, postpartum care, specialists, or any medical information." + ), + Tool( + name="book_appointment", + func=book_appointment_tool, + description="Book an appointment with a specialist. Format: specialist_name|date|time|patient_email|patient_name. Example: 'Dr. Rachel Chen|2025-10-05|14:00|patient@email.com|Jane Doe'. Use this tool when a patient wants to schedule a consultation." + ), + Tool( + name="get_specialists", + func=get_available_specialists, + description="Get a list of all available specialists with their specializations and availability. Use this tool when patients want to know about available doctors or specialists." + ) + ] + + # Create the ReAct prompt template + react_prompt = PromptTemplate.from_template(""" +You are a compassionate support assistant for BeyondBabyBlues, a pregnancy help organization specializing in mental health and emotional well-being support for expectant and new mothers. + +Your primary role is to provide empathetic, clear, and accurate guidance for pregnant women and new mothers experiencing mental health challenges, distress, or emotional difficulties. + +Core Responsibilities: +- Provide supportive, non-judgmental responses to mental health concerns during pregnancy and postpartum +- Recognize signs of prenatal and postpartum depression, anxiety, mood disorders, and emotional distress +- Offer practical coping strategies and emotional support resources +- Connect women with appropriate professional mental health services +- Validate feelings and normalize the emotional challenges of pregnancy and new motherhood +- Book appointments with specialists when requested +- Maintain human oversight for complex situations requiring professional judgment + +Mental Health Support Guidelines: +- Always acknowledge and validate emotional struggles - pregnancy and postpartum can be overwhelming +- Recognize symptoms of postpartum depression: persistent sadness, anxiety, mood swings, sleep issues, loss of interest +- Identify anxiety disorders: excessive worry, panic attacks, fear about pregnancy/childbirth, social withdrawal +- Watch for signs of severe distress: thoughts of self-harm, inability to function, severe mood changes +- Provide immediate crisis intervention guidance when needed +- Emphasize that seeking mental health support is a sign of strength, not weakness + +Human-in-the-Loop Guidelines & Specialist Referrals: +When specialist consultation is needed, you MUST include one of these specific phrases in your response: + +For Crisis Situations: +- "I'm immediately connecting you with our crisis specialist" +- "Let me connect you with Dr. Lisa Park, our crisis psychiatrist" + +For Depression/Mood Disorders: +- "I'd like to connect you with Dr. Rachel Chen, our depression specialist" +- "Let me arrange a consultation with our mental health specialist" + +For Anxiety/Panic: +- "I recommend connecting with Sarah Mitchell, our anxiety specialist" +- "Let me connect you with our anxiety treatment specialist" + +For Trauma/PTSD: +- "I'd like to connect you with Dr. Michael Rodriguez, our trauma specialist" + +For Medication Questions: +- "Let me connect you with Dr. Priya Sharma for medication consultation" + +For High-Risk Pregnancy: +- "I recommend consulting with Dr. Jennifer Thompson, our high-risk pregnancy specialist" + +For Family/Relationship Issues: +- "Let me connect you with Dr. Amanda Foster for family therapy" + +Available Tools: +- knowledge_search: Search for information in the BeyondBabyBlues knowledge base +- book_appointment: Schedule appointments with specialists +- get_specialists: Get list of available specialists + +IMPORTANT: Always use these exact phrases when specialist consultation is needed so the system can detect and provide appropriate specialist buttons. + +CRITICAL RESPONSE GUIDELINES: +- Your Final Answer should be conversational, warm, and directly address the user +- Do NOT include your reasoning process (Thought/Action/Observation) in the Final Answer +- Only provide clean, user-friendly responses in the Final Answer section +- Keep responses focused and helpful without overwhelming technical details +- Always end with a clear next step or invitation for further questions + +You have access to the following tools: + +{tools} + +Use the following format: + +Question: the input question you must answer +Thought: you should always think about what to do +Action: the action to take, should be one of [{tool_names}] +Action Input: the input to the action +Observation: the result of the action +... (this Thought/Action/Action Input/Observation can repeat N times) +Thought: I now know the final answer +Final Answer: the final answer to the original input question + +Question: {input} +{agent_scratchpad} +""") + + # Create the ReAct agent + agent = create_react_agent(llm, tools, react_prompt) + + # Create the agent executor + agent_executor = AgentExecutor( + agent=agent, + tools=tools, + verbose=False, # Set to False to hide internal reasoning from users + handle_parsing_errors=True, + max_iterations=5, + return_intermediate_steps=True + ) + + return agent_executor + + except Exception as e: + print(Fore.RED + f"Error creating ReAct agent: {e}") + return None + +def init_qa_chain(): + global vector_store + try: + # Define file paths and flags for loading + knowledgebases = [ + { + "path": "./datasets/BeyondBabyBlues.txt", + "use": True, + "type": "company" + }, + { + "path": "./datasets/pregnancy.txt", + "use": True, + "type": "medical" + }, { + "path": "./datasets/post-natal.csv", + "use": True, + "type": "medical" + } + ] + + # Ensure vector_store is defined before this block + vector_store = None # or the appropriate logic to obtain the vector_store + index_name = "medical_faiss_index_mistral" + api_key = get_mistral_api_key() + + for kb in knowledgebases: + if kb["use"]: + chunks = [] + print(Fore.BLUE + f"Loading {kb['type']} data...") + if kb["type"] == "product": + documents = json_to_documents(kb["path"]) + else: + file_extension = os.path.splitext(kb["path"])[1].lower() + if file_extension == ".json": + documents = json_to_documents(kb["path"]) + elif file_extension in [".txt", ".csv", ".xlsx"]: # Add other extensions as needed + documents = load_file(kb["path"]) + else: + raise ValueError(f"Unsupported file extension: {file_extension}") + if documents is not None and len(documents) > 0: + # Split Documents into Chunks + document_chunks = split_documents(documents) + print(Fore.YELLOW + f"Number of {kb['type']} chunks: {len(document_chunks)}") + print(Fore.MAGENTA + f"First 2 {kb['type']} chunks: {document_chunks[:2]}") + chunks.extend(document_chunks) + + if not chunks: + print(Fore.RED + f"##[warning] No chunks loaded for {kb['path']}. Exiting initialization.") + #exit if loop and go to while loop + continue + + + batch_size = 500 # Adjust the batch size based on your rate limits + start_index = 0 + total_chunks = len(chunks) + print(Fore.CYAN + f"##[debug]Number of chunks: {len(chunks)} in {kb['path']}") + + while start_index < total_chunks: + # Get the current batch + end_index = min(start_index + batch_size, total_chunks) + current_batch = chunks[start_index:end_index] + # Store embeddings for the current batch + vector_store = store_embeddings_in_faiss(api_key, current_batch, index_name, kb["path"]) + print(Fore.CYAN + f"Processed batch of {kb['path']}:{start_index} to {end_index}") + + # Move to the next batch + start_index = end_index + + print(Fore.GREEN + f"COMPLETED: Stored embeddings for {kb['type']} from {kb['path']}.") + + if vector_store: + agent_executor = create_react_agent_executor(api_key, vector_store) + if agent_executor: + print(Fore.GREEN + "##[debug]ReAct Agent initialized successfully!") + return agent_executor + else: + print(Fore.RED + "##[error] Failed to initialize ReAct Agent.") + return None + except Exception as e: + logging.error(Fore.RED + f"##[error] An error occurred during initialization: {e}") + raise + + +# Initialize the ReAct Agent +try: + print(Fore.YELLOW + "##[debug] Initializing ReAct Agent...") + agent_executor = init_qa_chain() + if agent_executor: + print(Fore.GREEN + "##[debug] Agent executor successfully created!") + print(Fore.CYAN + f"##[debug] Agent type: {type(agent_executor)}") + else: + print(Fore.RED + "##[error] Agent executor is None!") +except Exception as e: + print(Fore.RED + f"##[error] Failed to initialize agent executor: {e}") + import traceback + traceback.print_exc() + agent_executor = None + + +# Start Flask app +if __name__ == '__main__': + try: + print(Fore.CYAN + f"##[debug] Agent executor status: {agent_executor is not None}") + if agent_executor is None: + print(Fore.RED + "##[error] Cannot start server - agent executor not initialized") + exit(1) + + logging.info(Fore.CYAN + "##[section] Starting Flask application...") + print(Fore.CYAN + f"##[debug] Running REST API on port: 5000...") + print(Fore.GREEN + "##[debug] Server starting in development mode...") + print(Fore.CYAN + f"##[debug] About to start Flask server...") + print(Fore.YELLOW + "##[info] Press CTRL+C to stop the server") + app.run(host='localhost', port=5000, debug=True, use_reloader=False, threaded=True) + except Exception as e: + logging.error(Fore.RED + f"##[error] An error occurred while starting the Flask application: {e}") + import traceback + traceback.print_exc() \ No newline at end of file diff --git a/requirements_mistral.txt b/requirements_mistral.txt new file mode 100644 index 0000000..7c1d504 --- /dev/null +++ b/requirements_mistral.txt @@ -0,0 +1,27 @@ +# Core Flask dependencies +Flask==2.3.3 +flask-cors==4.0.0 +flask-restx==1.2.0 + +# LangChain and Mistral AI +langchain +langchain-community +langchain-mistralai +mistralai + +# Vector database and embeddings +faiss-cpu +numpy>=1.24.0 + +# Document processing +pandas>=2.0.0 +markdown + +# Google Calendar API +google-api-python-client +google-auth-httplib2 +google-auth-oauthlib + +# Utilities +python-dotenv +colorama \ No newline at end of file