Is it possible to hide the video in ml5.js but keep the hand pose points?

I am trying to hide the video (webcam in this case) but keep the detected points of the hand. I have tried different methods, but I am unsuccessful so far. I appreciate the help.

Main code (below) from ml5.js can be found and tested live here: https://editor.p5js.org/ml5/sketches/Handpose_Webcam

let handpose;
let video;
let predictions = [];

function setup() {
  createCanvas(640, 480);
  video = createCapture(VIDEO);
  video.size(width, height);

  handpose = ml5.handpose(video, modelReady);

  // This sets up an event that fills the global variable "predictions"
  // with an array every time new hand poses are detected
  handpose.on("predict", results => {
    predictions = results;
  });

  // Hide the video element, and just show the canvas
  video.hide();
}

function modelReady() {
  console.log("Model ready!");
}

function draw() {
  image(video, 0, 0, width, height);

  // We can call both functions to draw all keypoints and the skeletons
  drawKeypoints();
}

// A function to draw ellipses over the detected keypoints
function drawKeypoints() {
  for (let i = 0; i < predictions.length; i += 1) {
    const prediction = predictions[i];
    for (let j = 0; j < prediction.landmarks.length; j += 1) {
      const keypoint = prediction.landmarks[j];
      fill(0, 255, 0);
      noStroke();
      ellipse(keypoint[0], keypoint[1], 10, 10);
    }
  }
}

sveltekit api route post request body unreadable

I’m trying to build a query endpoint in sveltekit so I can use a fetch call in the component containing the query I need and let the query handle all of the authentication and connection to the api.

This is what my component looks like:

<script context='module'>
  export async function load({ fetch }) {
        const res = await fetch('/api/query', {
            method: 'POST',
            headers: {
                'content-type': 'application/json',
            },
      body: JSON.stringify({
        query: 'site.find("home").title',
      }),
    });

    const data = await res.json();

    return {
      status: res.status,
      props: {
        data: res.ok && data
      }
    };
  }
</script>

and this is what my query endpoint looks like:

import dotenv from 'dotenv';
dotenv.config();

const { API_URL, API_USER_EMAIL, API_USER_PASSWORD } = process.env;

export async function post(req) {
  const url = API_URL;
  const auth = Buffer.from(`${API_USER_EMAIL}:${API_USER_PASSWORD}`).toString('base64');

  const res = await fetch(url, {
    method: 'POST',
    headers: {
      'authorization': `Basic ${auth}`,
      'content-type': 'application/json'
    },
    body: JSON.stringify(req.body),
  });
  const data = await res.json();

  return {
    status: data.code,
    body: { data }
  }
}

It seems like the req.body object is not readable. This is the console.log of req:

{
  request: Request {
    size: 0,
    follow: 20,
    compress: true,
    counter: 0,
    agent: undefined,
    highWaterMark: 16384,
    insecureHTTPParser: false,
    [Symbol(Body internals)]: {
      body: <Buffer 7b 22 71 75 65 72 79 22 3a 22 73 69 74 65 2e 66 69 6e 64 28 5c 22 68 6f 6d 65 5c 22 29 2e 74 69 74 6c 65 22 7d>,
      stream: [Readable],
      boundary: null,
      disturbed: false,
      error: null
    },
    [Symbol(Request internals)]: {
      method: 'POST',
      redirect: 'follow',
      headers: [Object],
      parsedURL: [URL],
      signal: null,
      referrer: undefined,
      referrerPolicy: ''
    }
  },
[...]

It seems like the body of the request contains some data but it’s not readable as is.

Contacts not displaying on clicking Add button (React App)

After adding key={ contact.id} to ContactList component, contacts (name, email, and trash icon) are not visible on clicking Add button. Id (generated by uuid) is passed from ContactCard to ContactList and then to App.js. I am new to react and its concepts. There may be a tiny mistake but I am not able to figure it out.

Here’s how it should be…

Here’s how it is…

These components are going to be checked,

App.js

function App() {
const LOCAL_STORAGE_KEY = "contacts";
const [contacts, setContacts] = useState([]);

const addContactHandler = (contact) => {
setContacts([...contacts, {id: uuid(), ...contact }]);
};

const removeContactHandler = (id) => {
const newContactList = contacts.filter((contact) => {
  return contact.id !== id;
}); setContacts(newContactList);}

useEffect(() => {
const retreiveContacts = JSON.parse(localStorage.getItem(LOCAL_STORAGE_KEY));
if(retreiveContacts) setContacts(retreiveContacts);
}, []);

useEffect(() => {
localStorage.setItem(LOCAL_STORAGE_KEY, JSON.stringify(contacts));
}, [contacts]);

return (
<div className="ui container">
  <Header />
  <AddContact addContactHandler = {addContactHandler}/>
  <ContactList contacts = {contacts} getContactId = {removeContactHandler}/>
</div> );}

ContactList.js

import React from "react";
import ContactCard from "./ContactCard";

const ContactList = (props) => {
const deleteContactHandler = (id) => {
    props.getContactId(id);
};

const renderContactList = props.contacts.map((contact) => {
    return <ContactCard 
    contact = {contact} 
    clickHandler = {deleteContactHandler} 
    key={ contact.id}/>
});

return (
<div className="ui celled list"> {renderContactList} </div> 
);};

ContactCard.js

const ContactCard = (props) => {
const {id, name, email} = props.contact;
return (
    <div className="item ">
        <img className="ui avatar image" src={user} alt="user" />
            <div className="content">
                <div className="header">{name}</div>
                <div>{email}</div>
            </div>
            <i className="trash alternate outline icon" 
            style={{color: "red", marginTop: "10px "}}
            onClick={() => props.clickHandler(id)}></i>
        </div>
);};

How to use NPM modules inside python?

I have a python django application. And I need to use some functions from an npm library in my django application.

This is how the javascript code looks like:

const { signLimitOrder } = require("@sorare/crypto");
return JSON.stringify(signLimitOrder(privateKey, limitOrder))

How do I use signLimitOrder function from my django python application? What is the standard procedure to solve this problem?

  1. Rewrite the JS library in Python
  2. Run a nodejs server and use API to pass data to Python app
  3. Is there a python package to run Js libraries inside python?

Thanks

How to get info from API based on similar attributes

So I have been working with an external API with React for the front end and I’m still learning by doing so I might have some basic questions.

So my data has an array called as opponents

"opponents": [
{
"opponent": {
"acronym": "SMB",
"id": 129088,
"image_url": "https://cdn.pandascore.co/images/team/image/129088/super_massive_blazelogo_square.png",
"location": "TR",
"modified_at": "2022-01-20T17:14:56Z",
"name": "SuperMassive Blaze",
"slug": "supermassive-blaze"
},
"type": "Team"
},
{
"opponent": {
"acronym": "BJK",
"id": 655,
"image_url": "https://cdn.pandascore.co/images/team/image/655/besiktas.png",
"location": "TR",
"modified_at": "2022-02-19T17:04:48Z",
"name": "Beşiktaş Esports",
"slug": "besiktas"
},
"type": "Team"
}
],

In the same array there is an another array known as RESULTS

"results": [
{
"score": 0,
"team_id": 129088
},
{
"score": 1,
"team_id": 655
}
],

I can access them both perfectly well individually and I know how to access an array inside an array in javascript, but how do I go about displaying the Score along with the Opponent Name

**What I'm trying to Achieve :
 Beşiktaş Esports" : Score : 1
 SuperMassive Blaze : Score : 0**

if condition logic pageYoffset >= (element.offsetTop – element.clientHeight / 3)

** I am unable to understand the logic “pageYoffset >= (element.offsetTop – element.clientHeight / 3)” of “if” statement I’m a beginner. I know what is offsetTop, clientHeight, and pageYOffset which i don’t understand the maths behind this? PLease Helppp**

Here is my code

const sections document.querySelectorAll('section');
const navLi = document.querySelectorAll('nav .container u1
li');
window.addEventlistener ('scroll', ()=> {
  let current = '';
  sections.forEach( section => {
    const sectionTop = section.offsetTop;
    const sectionHeight = section.clientHeight;
    if(pageYOffset >= (sectionTop - sectionHeight / 3)){
      current = section.getAttribute('id');
  })
  navLi.forEach( li => {
    li.classList.remove('active');
    if(li.classList.contains(current)){
      li.classList.add('active')
  })
})

Javascript: False if statement always evaluates as true

I am writing a simple console based rock paper scissors game as an exercise. However, the following condition always evaluates to true.

if (playerselection === computerselection) {
        console.log('Draw!');

I have introduced several console.log commands as well as breakpoints to identify whether there’s an issue with scope, or alteration in parameters; this does not seem to be the case. playerselection could be ‘Rock’, while computerselection could be ‘Scissors’ (both verified during debugging) and yet the condition is treated as true and the console outputs “Draw!).
The entire code is seen below:

array = ['Rock', 'Paper', 'Scissors'];

computerPlay();
userPlay();
evaluation();


function computerPlay() {
    computerselection = array[Math.floor(Math.random() * array.length)];
}

function userPlay() {
    playerselection = prompt('Choose: Rock, Paper or Scissors', 'Choose it! NOW!!');
}


function evaluation(playerselection, computerselection) {
    if (playerselection === computerselection) {
        console.log('Draw!');

    } else if (
    (playerselection == "rock" && computerselection == "scissors") ||          //All possible victories
    (playerselection == "paper" && computerselection == "rock") || 
    (playerselection == "scissors" && computerselection == "paper")) {
        console.log("You win!");

    } else {
        console.log("You lose)");
    }
}

What is the causing the first if condition to evaluate as true every time, even if console.log(playerselection === computerselection) evaluates as false during debugging?

spring mvc ajax get work but post not work when i send request to remote server from localhost

  $(".submit").click(function (e) {
    e.preventDefault();
    $.ajax({
      async: true,
      crossDomain: true,
      method: "post",
      data: $("form[name=something]").serialize(),
      url: "myUrl",
      success: function (res) {
        console.log(res);
      },
      error: function (res) {
        console.log(res.status);
      },
    });
  });

and my spring mvc controller like

@RestController
@CrossOrigin(origins = {"*"},
        methods = {RequestMethod.GET, RequestMethod.POST,
            RequestMethod.PUT, RequestMethod.DELETE})
public class AppController {
...
...
...
}

If is send (get) request it work properly but when i send (post) it got exception :
Access to XMLHttpRequest at (remote server)from origin (localhost)has been blocked by CORS policy: No ‘Access-Control-Allow-Origin’ header is present on the requested resource.

How to edit embed field value in Discord.js V13

So I am trying to edit one field in an embed.
The fetched embed looks like this:

MessageEmbed {
  type: 'rich',
  title: null,
  description: null,
  url: null,
  color: 5763719,
  timestamp: null,
  fields: [
    { name: 'Suggestie', value: 'test1', inline: false },
    { name: 'Status', value: 'Open', inline: true },
    { name: 'ID', value: 'SPogb', inline: true },
    { name: 'User ID', value: '291272018773671937', inline: true },
    {
      name: 'Opmerking van staff:',
      value: 'Geen opmerking',
      inline: false
    }
  ],
  thumbnail: null,
  image: null,
  video: null,
  author: {
    name: 'Nigel#7777',
    url: undefined,
    iconURL: 'https://cdn.discordapp.com/avatars/291272018773671937/b2637472f4502b2b2280b6302d3f666c.webp',
    proxyIconURL: 'https://images-ext-1.discordapp.net/external/I_MfeMd6YbK_NxsY_kG-k7P6hiytpXx3tNk9ZJdd9lg/https/cdn.discordapp.com/avatars/291272018773671937/b2637472f4502b2b2280b6302d3f666c.webp'
  },
  provider: null,
  footer: null
}

I am trying to edit the Status field value from Open to Approved, but I have no idea how to achieve this. I currently have:

const kanaal = interaction.guild.channels.cache.get(config.kanalen.suggestieKanaal)
        const ID = interaction.options.getString('id');
        let correcteSuggest;
        kanaal.messages.fetch({limit: 50}).then(messages => {
            const botMessages = messages.filter(msg => msg.author.bot);
            botMessages.forEach(msg => {
                if(msg.embeds[0].fields[2].value === interaction.options.getString('id')) {
                    correcteSuggest = msg;
                }
            })
            console.log(correcteSuggest.embeds[0].fields)
            // correcteSuggest.edit(embeds[0].fields[1] = ({name: "Status", value: "Approved", inline: true}))
            // const editedEmbed = new Discord.MessageEmbed(correcteSuggest.embeds[0]).fields[3]



        })

The commented stuff I tried but did not seem to work. I have seen other people get the embed and do like .setDescription, but I don’t know how that would work with .setField since there are more then one fields.

d3.js Map worked fine until used in WordPress

I’ve created a d3 Map which works fine in a standalone html file – locally and on a live website but now it’s been added into a work-in-progress theme, it stops when it hits the d3.json line.

d3 is working as the initial SVG and divs are created properly, but the actions within the d3.json function are now not running (though nothing I can see has changed). The same wordpress template file renamed .html and opened locally still works fine (php ignored).

Is there any reason why this d3 visualisation is failing? Here’s the start of the d3.json..

// build the globe
d3.json("https://unpkg.com/[email protected]/world/110m.json", (error, world) => {
    if (error) { 
        console.log("%cMap d3.json error:", "color: red; font-weight: bold;");
        throw error;
    };
    // draw the land using TOPOJSON package
    var land = topojson.feature(world, world.objects.land);

    // d3 flat map projection
    var projection = d3.geoMercator()
        .scale(339)
        .translate( [width / 2, height / 1.45]);

    // create projection of flat earth
    var path = d3.geoPath()
                .projection(projection);

    // draw countries
    var earth = g.append("path")
        .datum(land)
        .attr("d", path)
        .style("fill", "#4b4f53");

I’m not able to share the wordpress as it’s not live, but here is the working map: https://mikechalmers.co.uk/map/ and here is the version on worpress (with styling and php / ACF parts removed for brevity)

<div id="map"></div>

<script src="https://d3js.org/d3.v4.min.js"></script>
<script src="https://d3js.org/topojson.v2.min.js"></script>

<script>

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

// d3 world map by Mike Chalmers https://mikechalmers.co.uk 2022

// margin calculations
const width = 1440,
    height = 1440;
let viewBox = "0 0 " + height + " " + width;

// add an SVG to the body and a g group
var svg = d3.select("#map").append("svg")
    .attr("viewBox", viewBox)
    .classed("svg-content", true);
var g = svg.append("g");

// add a div for the hover popups
var officePop = d3.select("#map").append("div")
    .attr("class", "office-popup")
    .style("opacity", 0)
var officePopImage = officePop.append("img")
    .attr("class", "office-popup-image")
    .attr("src", "https://placeimg.com/640/480/arch")
var officePopTitle = officePop.append("div")
    .attr("class", "office-popup-title")
    .text("City")

// build the globe
d3.json("https://unpkg.com/[email protected]/world/110m.json", (error, world) => {
    // draw the land using TOPOJSON package
    var land = topojson.feature(world, world.objects.land);

    // d3 flat map projection
    var projection = d3.geoMercator()
        .scale(339)
        .translate( [width / 2, height / 1.45]);

    // create projection of flat earth
    var path = d3.geoPath()
                .projection(projection);

    // draw countries
    var earth = g.append("path")
        .datum(land)
        .attr("d", path)
        .style("fill", "#4b4f53");

    // list of locations - reverse the lat / long numbers as Google present them!
    var locale = [
        [31.2273214, 30.0352233, "Cairo", "https://placeimg.com/501/501/arc", "http://act.is"], // Cairo
        [18.0942349,-33.9142626, "Cape Town", "https://placeimg.com/620/580/arc", "http://act.is"], // Cape Town
        [76.812386, 28.6466758, "Delhi", "https://placeimg.com/440/480/arc", "http://act.is"], // Delhi
        [54.9468679, 25.0757582, "Dubai", "https://placeimg.com/640/444/arc", "http://act.is"], // Dubai
        [113.9872706, 22.3526629, "Hong Kong", "https://placeimg.com/500/500/arc", "http://act.is"], // Hong Kong
        [27.9698125, -26.1715045, "Johannesburg", "https://placeimg.com/600/380/arc", "http://act.is"], // Johannesburg
        [3.3983055, 6.4628925, "Lagos", "https://placeimg.com/390/380/arc", "http://act.is"], // Lagos
        [-0.2420245, 51.5285578, "London", "https://placeimg.com/620/422/arc", "http://act.is"], // London
        [5.5715358, 49.8139418, "Luxembourg", "https://placeimg.com/633/430/arc", "http://act.is"], // Luxembourg
        [39.7423519, -20.2030759, "Mauritius", "https://placeimg.com/700/780/arc", "http://act.is"], // Mauritius
        [-99.2840423, 19.3906797, "Mexico City", "https://placeimg.com/440/484/arc", "http://act.is"], // Mexico City
        [72.7407565, 19.0821976, "Mumbai", "https://placeimg.com/646/505/arc", "http://act.is"], // Mumbai
        [36.7069666, -1.303205, "Nairobi", "https://placeimg.com/666/666/arc", "http://act.is"], // Nairobi
        [-74.2605525, 40.6971478, "New York", "https://placeimg.com/680/440/arc", "http://act.is"], // New York
        [-46.8761786, -23.6821592, "Sao Paulo", "https://placeimg.com/555/444/arc", "http://act.is"], // Sao Paulo
        [126.8491222, 37.5650168, "Seoul", "https://placeimg.com/777/777/arc", "http://act.is"], // Seoul
        [120.9149227, 31.2231278, "Shanghai", "https://placeimg.com/555/555/arc", "http://act.is"], // Shanghai
        [103.7038198, 1.3139961, "Singapore", "https://placeimg.com/645/580/arc", "http://act.is"], // Singapore
    ];

    // preload images
    // for (let i = 0; i < locale.length; i++) {
    //     new Image().src = locale[i][3];
    //     console.log("Image pre-loaded: " + locale[i][3]);
    // }

    // draw circles at locale locations
    g.selectAll("rect")
    .data(locale).enter()
    .append("a")
    .attr("xlink:href", function (d) { return (d[4]); })
    .append("rect")
    .attr("x", function (d) { return (projection(d)[0] - 14); })
    .attr("y", function (d) { return (projection(d)[1] - 14); })
    .attr("data-city", function (d) { return (d)[2]; })
    .attr("width", "28px")
    .attr("height", "28px")
    .attr("transform", function (d) { 
        let rotate = 45;
        let x = projection(d)[0];
        let y = projection(d)[1];
        let transform = "rotate (" + rotate + " " + x + " " + y + ")"
        return transform;
        })
    .attr("fill", "#fc511f")
    // hover effects
    .on('mouseover', function (d, i) {
        let city = d[2];
        let image = d[3];
        // dot bounce
        d3.select(this).transition()
            .duration('1000')
            .ease(d3.easeElastic) 
            .attr("width", "50px")
            .attr("height", "50px")
            .attr("x", function (d) { return (projection(d)[0] - 25); })
            .attr("y", function (d) { return (projection(d)[1] - 25); })
        // popup appear
        officePop.transition()
            .duration('150')
            .style("opacity", 1);
        // console.log(this);
        officePop
            .style("left", (d3.event.pageX - 70) + "px")
            .style("top", (d3.event.pageY - 170) + "px");
        officePopImage
            // .attr("src", image);
        officePopTitle
            .html("<span>" + city + "</span>" + "<span style='font-family: serif; font-size: 12px;'>&#9658;</span>");
    })
    .on('mouseout', function (d, i) {
        // dot shrink
        d3.select(this).transition()
            .duration('100')
            .attr("width", "28px")
            .attr("height", "28px")
            .attr("x", function (d) { return (projection(d)[0] - 14); })
            .attr("y", function (d) { return (projection(d)[1] - 14); })
        // popup disappear
        officePop
            .style("left", "-140px")
            .style("top", "0px");
        officePop.transition()
            .duration('100')
            .style("opacity", 0);
    })
  });
});

Thanks for any help!

show images slide from api in javascript

i want to show image slider , the images from api so i want show two image by two with time interval like post slider but with 2 image .
that’s my code

HTML AND CSS CODE :

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        body{
            padding: 0 150px;
        }
        .container {
            display: flex;
            justify-content: space-between;
        }

        .container img {
            height: 500px;
            width: 400px;
        }
    </style>
</head>
<body>
    </div>
    <script src="mainTest.js"></script>
</body>
</html>

Javascript code :

const url = 'http://localhost:3000/slider' ;
const containerG = document.querySelector('body') ; 
const container = document.querySelectorAll('.container') ; 

const nextSlideDelat = 3000;
let curentImageCounter = 0 ; 

let out = '' ; 
fetch(url)
.then(res =>res.json())
.then(data => {
    for(pic in data){
        out += `
        <div class="container">
            <div class="resultEnfant">
                <img src="${data[pic].photoEnfant}" alt="">
            </div>
            <div class="resultParent">
                <img src="${data[pic].photoPere}" alt="">
            </div>
        </div>
        ` ;
    };

    containerG.innerHTML = out ;

    container[curentImageCounter].style.display = "block"; 
    setInterval(nextContainer,nextSlideDelat);

    function nextContainer() {
        container[curentImageCounter].style.display = "none"; 
        curentImageCounter = (curentImageCounter =1)  % container.length ;  
        container[curentImageCounter].style.display = "block"; 
    }

})

when i run the code the result is all the image displayed and i got Console error :

mainTest.js:28 Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'style')
    at mainTest.js:28:35

Using regex to remove http/https and trailing slashes at the end of string

I need to remove ‘http://’ or ‘https://’ from a string if it exists, and also any trailing slashes at the end of a string.

So, with a string like ‘https://yourdomain.com//////’, it should return yourdomain.com.

Currently I have the following two regex patterns separately, but I don’t know how to combine them.

url.replace(/^https?:///, '');

url.replace(//+$/, '');

Undefined key when refreshing the page in next

const Product = () => {

const router = useRouter()


useEffect(() => {
 
    setParam({
        key:router.query.key,
        url:router?.query?.url || 'sheet',
    })
    getComment()
    ProductColor()
    getProd()
    getQuestion()
}, []);


const [prod, setProd] = useState({});
const [loading, setLoading] = useState(false);
const [param, setParam] = useState({key:'' , url:'sheet'});
const [question, setQuestion] = useState([]);
const [productcolor , setProductColor] = useState([]);
const [comment , setComment] = useState([]);
const [sort , setSort] = useState('new'); 
const [sortt , setSortt] = useState('new');
const [limit , setLimit] = useState(10);
const [limitt , setLimitt] = useState(10);
const [lm , setLm] = useState(false);
const [ld , setLd] = useState(false);


async function getProd(){
    setLoading(true)
    await axios.get(`${baseUrl()}/products/one/${param.url}/${param?.key || router?.query?.key}`)
    .then(res => {
    console.log(res);
        setLoading(true)
        if(!res?.data?.code && res.data.Product){
            setProd(res.data.Product)
        }
    })
    .catch(err => {
        setLoading(false)
        console.log(err);
        setProd(null)
    })
} 


async function getQuestion(s=sortt ,v=limitt){
    setLoading(true)
    setLd(true)


    await axios.get(`${baseUrl()}/products-q-a/${param.url}/${param?.key || router?.query?.key}?offset=0&limit=${v}&sort=${s}`)
    .then(res => {
       localStorage.setItem('key', 'url');
        setLoading(false)
        if(!res?.data?.code && res.data){
            //TODO
            setQuestion(res.data)
            setLd(false)
        }
    })
    .catch(err => {
        setLoading(false)
        console.log(err);
        setQuestion([])
    })
} 

If you can, please answer my questionIf you can, please answer my questionIf you can, please answer my questionIf you can, please answer my questionIf you can, please answer my questionIf you can, please answer my questionIf you can, please answer my questionIf you can, please answer my questionIf you can, please answer my questionIf you can, please answer my questionIf you can, please answer my questionIf you can, please answer my questionIf you can, please answer my questionIf you can, please answer my questionIf you can, please answer my questionIf you can, please answer my questionIf you can, please answer my questionIf you can, please answer my questionIf you can, please answer my questionIf you can, please answer my questionIf you can, please answer my questionIf you can, please answer my questionIf you can, please answer my questionIf you can, please answer my questionIf you can, please answer my questionIf you can, please answer my questionIf you can, please answer my questionIf you can, please answer my questionIf you can, please answer my questionIf you can, please answer my questionIf you can, please answer my questionIf you can, please answer my questionIf you can, please answer my questionIf you can, please answer my questionIf you can, please answer my questionIf you can, please answer my questionIf you can, please answer my questionIf you can, please answer my questionIf you can, please answer my questionIf you can, please answer my questionIf you can, please answer my questionIf you can, please answer my questionIf you can, please answer my questionIf you can, please answer my questionIf you can, please answer my questionIf you can, please answer my questionIf you can, please answer my questionIf you can, please answer my questionIf you can, please answer my questionIf you can, please answer my questionIf you can, please answer my question