The reason why employers use employees, like slaves. Sometimes at the beginning of this year, my company decided to run an online survey. This survey was targeted at the employees. Since I've never really worked in a corporate world, I wanted to know how people feel about having a job, whether they like their jobs and if they don't, we wanted to know what they hate most about having a job. In today's video, I'll share with you the result of that online survey and the reason why many employers treat their employees like slaves. If you're new here, consider subscribing so you won't miss other interesting videos like this. Here's the thing, there was no surprise with our study as we found out that more than 90% of people said they hated their jobs.  When asked why they hate their jobs, many people complained about their boss, colleagues and the fact that they're not appreciated, which means that for these people, the job is not the problem but the job's environment. Result, result, result. A few days ago, I was reading the news about hundreds of employees of Facebook who are unpaid. The first question you ask is, how can one of the richest companies in the world underpay people? The answer to that question is very simple, the result, profit. Many entrepreneurs are result-driven individuals. The meaning of this is that the only thing that matters to them is the result, the profit for themselves and for the shareholders. Some people think that this is a bad thing but I disagree. Instead, I'm here to tell you that this is human nature. I don't know why most people aren't getting it but it's very simple. Nobody thinks about you first. Everyone puts themselves first. Everyone is selfish. Everyone thinks about themselves first, even if they will think about you later.  For instance, if you are the smartest engineer in Facebook incorporated, nobody in the world will ever hear that you are underpaid because you will never be underpaid. The reason why the smartest engineers in Facebook will not be underpaid is not that Zuckerberg likes them but because their absence can hurt the company. Again, it's for a selfish purpose. Nobody cares about you as much as you want to think. Some people think that selfishness is bad and I agree but guess what?  What is the way out of this mess? If you can, do everything in your power to never be at the mercy of another human being. You have two ways to go about this. Start your own business or become very valuable in another person's business. These two ways are very tough but those are the only two ways to avoid being treated like a slave. Anything that's too much loses its value. I once heard a job seeker say something like, I don't know what to do. Whenever I go for an interview, I go with everything the employer wants but for no reason they won't just call me back. Well, the reason why they don't call her back is that 20 other people have gone to the same interview with her and for whatever reason the employer thought that someone other than her was the best for the job.  Most employers will not value employees as long as too many people compete for a few jobs. We may not like this but it's the truth. Anything that's too much loses its value. When there are 30 people lining up for one job, that just gives ungodly power to the employer and there's no way we'll expect him to cherish the employee except we have angles as an employer. So what should you do? If I wear your shoes, I'll avoid being among the crowd. As a matter of rule, I don't compete for anything in life. I work hard to create my own world. I work hard to differentiate myself. I work hard to acquire skills that most people cannot acquire so that I'll be able to do what they can to do. This is what I advise you to do because as long as you're like everyone, you'll be lost in the crowd and nobody will value you. Soldiers are not nice I grew up in a society where soldiers sometimes misbehave. I've heard stories of how soldiers beat people and I can tell you that soldiers aren't nice. But think about this, soldiers are ordinary humans. What makes them tough is the training and pains they have gone through. Many times, when you see entrepreneurs who are hash, they are not bad people. They are hash because, like soldiers, they had gone through very difficult things in the past and this is the second reason why you may think that an employer treats people like slaves. The problem about most employees is that they cannot in their wildest imagination understand what most entrepreneurs went through before they built the company they are working for. For instance, an average entrepreneur has spent a decade before he even has a company anyone knows.  I've been there and I can tell you that there are only a few things in the world that are more difficult than building a business. What then happens is that after going through such hell fire, it's very easy for an entrepreneur to treat his employees like a slave.   Now, I'm not making excuses for the bad behavior of any employer because I don't care about them but I care about you and that's why I'm making this video to open your eyes. You see, it's a fantasy to expect that other human beings should treat you well. Most people simply won't treat you well as long as you are at their mercy. Be your own king. I'm always amazed at the numbers of people who think that they are stopped. So many people simply believe that they don't have any power to change their own life. This is not true because you can actually change your life. You can be your own king. You can create your own world. You can have your own kingdom. This doesn't mean that you must be an entrepreneur. Not everybody can be an entrepreneur but everybody can be very valuable. It's your skills that make you valuable. It's what you can do, the solutions you can create that would differentiate you from everyone else. If you work very hard to develop yourself, if you keep on learning, keep on acquiring valuable skills, keep on reading good books, you keep on increasing your value as an individual. When you become highly valuable, people will stop taking you for granted. Even if you're an employee, as long as you are much more valuable than most people, your employer will respect you. In conclusion, as long as we have 50 people running after 5 jobs, employers will always underpay, disrespect and use employees as slaves. It's your responsibility to not be a victim. You can only do that by separating yourself from the crowd. If you can, become an entrepreneur. If you think you can't be an entrepreneur, you have to work hard to be very valuable than almost everyone because if you're not much more valuable than everyone, nobody will treat you as you want. Stop expecting your employer to treat you well. Stop expecting other human beings to be nice to you. Make yourself so much valuable that people have no choice but to honor you. Thank you very much for watching our videos. We'd like to give you another interesting video for you to enjoy next but before then, our team will be very happy if you can like this video and share it with your friends on social media. If you're new here, don't forget to subscribe so you won't miss other interesting videos like this. Now, look at your screen to see two other videos we handpicked for you to enjoy next. We love you.


Everybody forced the lane here. We got four boxes of 2023 Boma draft baseball choice for Jeffrey H. Good luck Jeffrey. Let's do it Actually, Brian, I think we'll just do that tonight I'm just gonna power through New here in a bit base auto on the front here for you Jeffrey Jack Hurley Next up is a green lava first woman auto nice Adrian Santana We go 15 of 99 Adrian Santana a base auto Cole Miller all right good good Santana the first box there. There's a plate coming. Oh, let's go means it's auto See a first, but let's see a first bowman here. Come on Green Lava Cooper Engel first woman autograph 45 of 99 true blue and it is JB Shears first woman auto 65 of 150 Shears is not a bad name to hit Not the not the Padre you're chasing but not a bad name and Frame the frame Please please and insulted by nice. There we go. I've insulted by pretty plate first woman auto that'll play Y'all keep in mind also the plates are legitimately used to make the cards so they will almost never grayed out well Keep that in mind green lava first woman autograph max Anderson 99 99 things orange Anderson 99 next up is a base auto giant slug sliger And an orange wave come on orange wave Nice Jacob Gonzalez 23 of 25 That'll do right there. That's a great hit Orange wave Gonzalez True green and Charlie Soto Charlie Soto true green 45 of 99 choice Cole Foster first woman autograph Six of 150 and lasted for you Jeffrey is a base auto and it is of Zach Levinson Pretty good few boxes there the Santana and the Gonzalez were awesome. Yeah Other solid hits there too. You got a pretty plate as well. We'll get those out to you


use here at Adelaide Airport to screen international work-testing passengers for anything via security risk. It takes approximately 13 weeks to train a detective dog and he looks for animal park parks, seeds, meat, eggs, and bread-free vegetables. So here we are now at Adelaide Airport with one of the bins which we're pre-positioned. This is about making sure that people who do travel from interstate don't bring food in to South Australia because it will expose us potentially into another mid-flight outbreak. We could lose market access to important markets like Japan and China and South Korea if we have an outbreak. If you're traveling into South Australia, please don't bring fruit with you. South Australia's water cultural industry is worth $1.2 billion to our economy each year. We are food for our free. We want to stay that way so we can look after our farmers and make sure our exports are worth more than any other states. So don't forget, it's a simple message to eat it. It's a player. We'll beat it.


Hello friends. I'm Sanjay Gupta. I welcome you on Sanjay Gupta Tech School. So this is my website where you can find all the video links related to Salesforce. Those are created by me. In this video, I'm going to demonstrate you how we can use after insert, after update and after delete together in Apex trigger. So let's understand the scenario that we are going to use. Common scenario is there like if opportunity is created and if amount is not null, then we need to add amount to accounts annual revenue field. So this is on insert. Then if we are updating any opportunity and we are updating the amount so that needs to be updated to accounts annual revenue too. And if we are deleting any opportunity, so we need to update the annual revenue accordingly because if opportunity is deleted so that amount should be deducted from the annual revenue. Right. So to implement this scenario. Let's see this. So this is account record and on account we have this annual revenue field and we need to sum up all the related opportunities amount. Right. So for this, I already created trigger. So I created trigger on opportunity because this should be performed on creation, updation and deletion of opportunity. So after insert after update and after delete events are available here, then these are context variable. So if trigger dot is after is true, then if is inserted is true. So this on after insert method will be called. So I have created separate handler class for this trigger that is opportunity trigger handler. So on creation we have new list so that that that is available in trigger dot new. So I'm passing it in this method on update we have new as well as old map so I'm passing both the parameters. And in case of delete, we have trigger dot cold. Now if I move to opportunity trigger handler so here you can see all three methods are available. So now we need to apply the logic. So first I'm going to apply the logic for after insert. So here, let's say I'm going to create a set of ID account IDs, then list off. So this I'm creating. Now I'm going to iterate this new list. So for opportunity. So now I need to identify the account ID through these new inserted opportunities. Right. So what I'm going to do, I'm going to add through this right so whatever opportunity you are creating. So if it is related to any account so we need to put the account ID so we can apply one if condition as well. So if OPP dot count ID not equals to none, then only it will be added. So there may be possibilities like if you're inserting any opportunity and that is not linked to any account so that will generate an error. So this way I created this set and after completion of this loop. I'm going to call a common method that will be used for insert update and delete for all. So calculate and will revenue and I'm passing this ACC ID set to this method. Right. And whenever this account to be updated list will be returned so I'm going to check if this list dot is empty. So if it is not empty, then update. Right. So showing some errors. So let's check the errors. Okay. Right. So this way you saw I created one set of IDs. So this set will be storing account IDs. Those are related to opportunities. Then I created a list of account that we are going to update, then opportunities are iterated. So if OPP dot account ID is not equals to null. Right. So if on opportunity account ID is not null, then that account ID will be available in this set. We are passing this set to this method so that we can calculate annual revenue and the updated list will be passed here and that will be processed to be okay. So why this error is coming because this method is right now not available. So let me create a block only. So list of account method name set of ID. So this method we are going to define later on. So first let me copy this. Yeah, I'm pasting it here. So this is for an after update. So new list and old map both are available. So I'm iterating new list. So if account ID is not null and now we need to check one more thing. So the amount that is available on opportunity that is updated or not. Right. So what I can do OPP dot amount not equals to old map dot get OPP dot ID dot. So if new list amount that we are accessing through OPP dot amount is not equals to old map. So old version amount and new version amount if both are not matching. In that case, the related account ID will be available in this set. And we're passing this into this method then same operation will be available here. Right. And now we need to perform this for deletion. So I'm going to implement that as well. So I'm pasting it again. So here we have cold list. So I'm going to iterate this cold list. And yeah, rest of the things will be same. If account ID is not null, then we need to put that account ID into this set and then we need to call this matter. So this way I implemented all three methods. Right. So they are finding the account related account IDs and through that we need to now calculate annual revenue. So now I'm going to implement this method. So this will be the countless in that we will be storing the data that we are going to update. So I'm going to create a map of ID, decimal. So account ID to annual revenue. So this is a map. So after this, now what I'm going to do now I'm going to query all the related opportunities with the account ID that we passed here, so that we can calculate annual revenue. So I'm iterating for OPP, then I'm writing SQL. So select ID amount from opportunity where account ID and ID. Right. So this way, all those opportunities will be carried where account ID is available in this set. Right. So we will be trading all the first opportunities and then we need to return this one. So I'm writing this as well. So we need to finally return this one. Right. And here we need to implement the logic. So now all the opportunities will be available into this OPP. So one by one we need to iterate and we need to calculate the annual revenue. So I'm creating one more variable decimal total equals to zero. Now if so we have this map. So we need to use a map name dot. Not get, let's say contains key. And key will be OPP dot account ID. Right. So if this map is containing the account ID, it means that account is already available in that map. So what we can do we can put total equals to this map dot get OPP dot account ID. Right. So if opportunities related account ID is already available in this map. So it's that maps value will be available into this total. And further what we can do. So further we need to calculate total equals to total plus and the amount that is available on opportunities. So OPP dot amount. Right. So first time whenever opportunity will be available. So the account ID won't be available in this map. So total will be zero. So zero will be added to this opportunity amount. So what we can do, we can do one more thing. We can apply if OPP dot amount is not equals to null. In that case, only this total will be calculated. So this also you can do so null pointer exception can be resolved. Now we have total value. So what we are going to do we need to put this in this map. So first time this if won't be executed. So total will be zero. So zero will be added to this opportunity amount and that will be stored in this. Right. So the output OPP dot account ID comma total. Okay, so here you can see some errors are available. So the spelling was incorrect. So I need to write account ID so that was misplaced and more errors are coming like a non static method cannot be referenced from a static constant context. So, yeah, public static. So now those errors will be resolved. So now what you see this map will be having account ID in the total after completion of this loop. So now we need to iterate this map. So checking if it is having some values or not. So if this map is not empty, then we can iterate this map so for ACC dot ID equals to ID. Let's say I, and the map name dog key set. Now, on ACC equals to new account. Then ACC dot ID equals to I and ACC dot annual revenue equals to now we need to use a map dot get. So in map on this key whatever values available that we go to this ACC that instance that we created, and we need to put this into the map. So here is the map for the list into this list we need to add this ACC. Right. And after completion of this loop, this list will be returned to the above methods. On top you can see, while inserting we use this list so after calculation this method will be returning a list so that will be checked if it is not empty. So accounts will be updated and similarly for this after update, and similarly for after delete. And this is a common method for all three. So here we have an error. Okay, this should be accounted. So I'm mistakenly typing Dean instead of T. So he paid it should be correct. Otherwise, errors will be there. So now it is complete. So I'm saving this. This is already saved now moving to account. So, let's check the related. So it is having one opportunity already. And if I open this opportunity, and if I check the details so you can see amount is blank. Okay, so let me use this account ID. I'm using this account ID. And I'm going to use this anonymous window to create opportunities to create update and delete so that we can apply this on bulk as well. So what I'm going to do, opportunity equals to new opportunity. OPP one name equals to test one OPP dot state name equals to aspect. This is as well. Yeah, it is prospecting and OPP dot close it equals to system. Right and OPP dot equals to so I'm copying this. So for testing purpose, I am hard coding this. So this is first opportunity. I'm copying this creating one more. Right. So now I'm going to create a list so that we can perform bulk operation. So opportunity list of opportunity OPP list equals to a new list of right. So now in this I'm going to add these OPP one OPP to insert OPP list. Right. So right now you can see amount is also not there. So let's put that as well. Now amount equals to 1000 and OPP dot amount equals to 2001 more mistake I did. I used OPP instead of OPP one and here OPP instead of OPP two. Okay, now everything is ready. So I can execute these. Right. I'm going to open the lock so I'm executing. Okay, so this is showing an error. Okay. So what is the error? It is saying I queried SOQ without querying account ID because I'm using that here. Right. So I need to use account ID here as well. So whatever field we use and process so we need to query that as well. I execute this so it will be executed successfully. I am doing a refresh. So you will see two more opportunities will be related to this account. Let's check the related list. So here you can see total three opportunities are available. So here amount is 2000 and here amount is 1000 and earlier one was zero. Right. And we also applied null check. So let's check the details. So here you can see annual revenue is 3000. Right. Now let me update these. So I'm updating this one to 5000. Right. So now total should be 7000. So update. Okay, let me update both. So update OPP list. Execute. Okay. It is saying ID not provided. So for updation, we need to provide the ID as well. Okay. So OPP 1.ID equals 2. So here one opportunity ID I need to provide that I'm going to update. So these are the things that we need to remember whenever we want to perform any operation. So I'm fetching this, putting it here. Now I'm opening another one. Copying its ID here as well. So I'm now executing. So now it executed successfully. So what was the values? 3000, 5000. So now let's check. So I'm refreshing. So opportunity amount will also be updated and the annual revenue on account will also be updated. So here you can see annual revenue is 8000. And on the related opportunity you can see 5000 and 3000 is there. So in case of updation also it is working fine. Now it's time to delete. So let's say delete OPP 1. I'm just deleting one opportunity. So I just want to execute this. Okay. For that, let me query this opportunity for deletion here. So let ID, opportunity ID equals 2. Let's say this one and delete OPP. So these two statements I'm going to execute. So what I need to do, I need to click on this execute highlighted by mistake I was clicking on execute. So I'm clicking on execute highlighted. So now it is deleted. So if we click on execute, so all the statements are executed. So this also we need to remember. So now I did a refresh on account. So you will see one opportunity is deleted and annual revenue is updated. So it is now 5000 and total two opportunities are available. So this way I hope you understood all three operations after insert, after update and after delete. So you can implement this code in your org as well. So initial after insert, after update and after delete code are somehow similar. And they are using this common method so that we can calculate total amount on annual revenue field that is available on account. So implement this in your org so that you can understand the process. So if you want to watch more Salesforce related videos so you can go to this website and you can find video links. Those are created by me. Thank you for watching this video.


Cool, okay, so we, oh I thought that was feedback because of the chair. Okay, so we are going to start off, right where we left off last Monday. So we left off talking about the runtime climate and specifically we've been looking at and talking about the stack. So I believe we stopped right at this example. So just to refresh all of our memories, the stack is, because I know you guys have jettisoned all this information to load in and everything for midterm too. So now it's time to reload all this information back in. So the stack is essentially scratch memory for functions. So why do functions need some scratch memory? What was that? Local variables. Local variables, yeah, so we want to store local variables in a certain place. What else, is that the only reason? Recursive functions? So we need to be able to call recursive functions and those local variables will be stored in the stack that you need to be stored in their own distinct copy. How many registers does x86 have? x86 architecture, how many registers does the CPU have? Ten. Ten? Is that it? Oh. Sixteen. I am. I think it's sixteen. I actually don't know, I wish I should have noted that before I asked you all. It actually doesn't matter for my purposes right now exactly how many registers it has. Can it ever have more registers? No, let's say it's sixteen. And you need to compute some crazy math on fourteen, fifteen, twenty variables. Right? And that computation has to happen on the CPU, so where do those extra values go? On to the stack. Yes, I'm talking about the stack. Yeah. This is extra scratch memory. This is place that the function can store things while it's computing things. So any temporary variables that need storage can all be stored onto the stack. So it starts at high memory addresses, grows down, we're going to look at pushing and popping operations. So we have our example of the stack. We have super high memory at top, all f's, all ones. Right? At the bottom we have zero. So our stack is going to start somewhere. We'll say our stack pointer is here. And that's at memory address ten thousand. Now the important thing is because our stack is growing down. Right? So it's starting from higher memory and growing down. So as we push things on the stack pointer will move down. As we pop things off the stack pointer will move up. That means what do we know about all the memory that's below the stack pointer? It's what? It's not on the stack. Exactly. So can we access and use that memory? Yes, you can. Well we could but what would that be? What are those memory addresses? The non-site to function. What do we know about the memory above the stack pointer? It's needed for our program. Yes. It's on the stack and it's needed for our program. So it's memory that's been explicitly allocated to our program. And everything else below that is essentially garbage and it's been deallocated. Right? We don't know exactly what it is but we know that it is garbage. We don't know what it is but we have to assume it can be anything and it doesn't matter at all what it is. Cool. So if we have some instructions, let's say we have two instructions. We're going to push E-A-X and pop E-B-B. So here I'm going to show the CPU registers. So we have, let's say there's 10 or hex A in the register E-A-X. Then we have the register E-B-X which whatever has zero we don't really know yet. And then we have ESP. So what value is inside ESP right now? Which is what? X 10,000, right? The address there. Right? So this is something that's important to remember is this pointer or arrow that I'm drawing to the top of the stack is essentially arbitrary. The only reason it points to memory address 10,000 is because there is the value 10,000 in the stack pointer register. So when we push things onto the stack pointer register, sorry when we push things on that stack pointer register it's going to be decremented and it's going to move down. When we pop things off it's going to be incremented and it's going to move up. Cool? So now we're going to walk through exactly what happens when we see these two memory instructions. So we have push E-A-X. So at a high level what should happen here? Too high. Should have already had one. It's one o'clock. Two o'clock. Whatever time it is, it's later. Add something. Add what? Yeah. So push E-A-X means take the value inside E-A-X and put it on the top of the stack, right? And so specifically what this is going to do is when this executes we first move the stack down. So we're going to move the stack pointer, decrement it by four, right? So in from 1-0-0-0 to f-f-f-c. So now that's going to move the arrow, right? Because the arrow just represents wherever the stack pointer register is pointing to. Then we copy the value a onto there. So the value inside the E-A-X register we're going to put on there. And then we're done. So that was pushing a value onto the stack. Now we need to execute the next instruction. So we need to pop E-B-X. So at a high level what does this mean? Yeah. So we're going to take the thing that's on top of the stack, put it into E-B-X. And because we've removed it, right? We're going to move the stack pointer to the top of the stack. So when we step through this we now will copy what's inside where ESP is pointing to. So this is cases A. We're going to copy that into E-B-X. And then we're going to increment the stack up by four. So now the stack pointer is at 10,000. So do we change or alter this memory when we do pushes and pops? It's not part of the semantics, right? The CPU just leaves that memory there. But to our program what's at this memory address? Our base, right? We don't, anything can happen to those values, right? We can't use those values. They've been explicitly deallocated. Cool. So where this comes into play and why the stack is so important is as we talked about each function needs to have copies of its local variables and parameters. And those are stored in what we call function frames. So these are states of how functions can use the stack. And so what we want to think about is, okay, let's go. So we have some function in Y, some local variable, right? So when the, so we are going to discuss, right, we can't put Z as a global variable, right? When we're trying to compile this down into some code, we can't just put Z at some fixed memory location like 10 or 20. Because we don't know, we won't be able to have multiple instances of that. Multiple invocations of this function foo. We also need somewhere to put the parameters. So what we're thinking about this is we need some way, so we want to, as we said, we want to store, we're going to want to use the stack, right? That makes the most sense. That's what we've been talking about. We have the stack. We want to use it to store the local variables. So now this is, that's at the top, and then here at the bottom we have all zeros, right? So let's say the stack corner is here. So now how does one probably know where to put, let's say Z? So function foo is called. When it writes out, when I say Z is equal to X plus Y, where does it put these values of Z, X and Y? Actually I'm going to simplify this because I just realized this is a bit complicated. No parameters. Z equals 10. So where do we want to store Z? On the stack. That's a super broad answer. How do we actually translate this Z is equal to 10 into code? Where do we move 10 to a register and then where? Then a memory address. What memory address? Memory of Z. Where is the memory of Z? Exactly. Okay, so let's keep it kind of simple. I think this would give us enough. Let's say we're at 100 when we start executing. How much local space are we going to need for local variables in function foo? Four bytes. Four bytes. And we can know that just by looking at this and what do you know based on this? How do you know it's four bytes? The declaration. We know that one declaration of an int and we know that an int is of size four bytes. So we know we have to have four bytes. So why don't we then reserve four bytes here and say this is going to be the address of Z. And because we want to actually save that memory, we have to move the stack over that. But then here I say Z is equal to 10. How do I know where do I put 10? How do I actually compile this into code then load it to the stack? So how do you know that it's going to be on the stack? Scope. So you can see Z is here. So we just said, hey, move 10 onto the stack. We get something like this here. Cool. But does that work in every single case? What if there's a bunch of other operations here? And then now I say Z is equal to 100. And maybe there's other operations after us. So what if these operations, as we said, they have a bunch of temporary variables? What if they now change the stack? And they move the stack down, let's say, we'll call this delta C, which is 12. Move it down 12 bytes. Now we see Z is equal to 100. Should the code that we compile for this Z equals 10 be different from the Z equals 100? Well, it should be different than 100 versus 10. But in the general case, no, it shouldn't be different. So why can't we just say, hey, put 100 on the top of the stack here? Because Z, the address of Z is up here. But because the stack can be moved around when our function executes, remember, it's just temporary storage. The only thing that our function must ensure is that when foo returns, the stack better be pointing here. That's it. That's the only guarantees we have. As this function executes, the stack can change however much it wants to. So before we were basically saying, hey, that offset zero from the stack pointer is where Z is located. But the problem is, is that may not be true throughout the execution of this function. The stack itself can change. So what do we do? Check whose symbol table. For what? So we're compiling it, right? So when we're compiling it, we can have a symbol table. But how do we actually translate into something that works like that in a runtime? So what was the nice thing about global addresses? They never change. They're fixed locations, right? But here, we can't have fixed locations here for Z. The function just push a flag on the offsets relative to that flag. Yeah, so... Don't worry about the stack pointer and how it changes because that flag won't go anywhere until you pop up. Right. So we have one pointer that points to the bottom of the stack that's going to completely change throughout the execution. But what we really like to have is some other pointer that points to where the top of the stack was. And then we can use fixed offsets for all of our local variables. We can say Z is always four off of that and any other local variables are eight off of that and twelve off of that. So that when we first start executing this function, right? When we first start executing this function, we say, okay, let's allocate space for Z, move the stack pointer down. But now we need some kind of pointer, so we'll call this, this is the stack pointer. We'll call this... Okay, annoyingly, this will have two names. On X86, it's called the base pointer, so that's mostly what I'll be using. It'll also be called the function frame pointer. Very similar things. So that now if I compile each of these Z equals to a hundred to say, hey, move ten at EVP plus four, EVP plus four will be the address of Z. And here if I say, oh, actually that's sorry, it's like, it'll be EVP minus four. It's a negative offset. And then here this would say move EVP minus, move a hundred into EVP minus four. And now I don't care at all what happens to the stack. So now I've given myself this fixed... So I'm really doing this similar thing. I'm assigning each local variable a fixed offset from the base pointer. And so this whole, well, and there could be parameters we'll get into exactly why, but there'll be some other junk on here, and then there'll be parameters. So now if I have an 8X and an 8Y. So here this would be, like, this is, say, this pointer, say, this would be X, and this would be Y. So now I see Z is equal to X plus Y. I know this X and Y are fixed offsets from the base pointer. So these are positive offsets, so they'll be four, eight. So this would be EVP plus eight, and EVP plus 12. Sorry, yeah, EVP plus 12, yes. Where's the address of the base pointer being stored? There's a register happily named EVP. Okay, so my question is that if you're going to save the variables, if you're going to assign them a value of offset, what is the difference between assigning them an offset and just assigning them, like, a physical place of memory? Because we don't know until this program executes what location that memory address will be. But we know where EVP will be. We will set it up properly as we'll see. When we get called, we'll set up our EVP so it's in the same place every time. Relative to all the parameters that are passed in and our local variables. Thank you. We'll see that. Where do we use store-owning offsets? Ah, in the code. So when it gets compiled, we no longer see variables. And this is what's really interesting. And actually it's a, I was just, this conference I was at again, there's people talking about when you have X86 or another language, how do you lift it back up and decompile it into C code. One of the big problems is you no longer see variables into X and Y. You see move EVP plus something or EVP minus something. So you have to lift that. You lose semantics about variables when you compile things. So it's a really interesting research challenge about how to go backwards. Let's look at this in more detail. Cool. So, we just said we can't use the stack pointer, right? Because the stack pointer is going to change. We can't refer to our local variables based on a stack pointer that can change. We want to refer to them based off of fixed location. So the frame pointer, the base pointer is going to point to the start of the function's frame on the stack. And then each local variable will be different offsets. So in X86, it's called the base pointer. It's stored in the registered PVP as we just saw. So we can go back to our original main function. So before we had variables A, B, and C declared globally, now there are going to be local variables of method made. So we have an A and B float C. A equals 10, B equals 100, C is equal to 10.4.5. A is equal to A plus B returns it. So just like before, when the compiler is trying to compile this, it generates a parse tree, it checks the semantics, it checks the type system. Now instead, it generates some code and it says, so I need to say that A is going to be at some location, EVP, well, plus A. In this case, it will be a negative offset from EVP. And B is at some location, EVP plus B. C is at a location, EVP plus C. And then the instructions are basically the same. Every time we see A, we see get memory location EVP plus A. So set 10 equal to there. Set 100 of EVP plus B. Set 10.4.5 to EVP plus C. And finally calculate local variable A is equal to local variable A plus local variable B. So unlike before, we had fixed offsets. Now what exactly this code does will change based on, and which, sorry, not what it does, but which memory locations will be changed will depend based on what this base pointer is. Cool. So how, actually, these are from a compilation that I did. So it shows EVP minus hex C, EVP minus 8, EVP minus 4. And so it's going to do some little bit of code. We're going to step through this, so don't worry. So the first thing that it does when the function gets called, so some other function calls us, the stack pointer is going to be a certain place. What's going to be inside that base pointer address, EVP? So we're going to put, essentially, the current stack pointer in our base pointer. So let's think about it from a different perspective. Then we call some other function. So they get called very first thing, what's inside that EVP function? EVP, sorry, EVP register. Almost. We'll see. That's something else. We'll see that in a second. The previous function's base pointer, right? The function that called us has a base pointer. It points to somewhere in the stack, and then it calls us. Now we have to, well, okay, we'll see. Now we have to replace that base pointer to our base pointer. So this is what we're going to do. So the stack is fairly pointed somewhere. We're going to move, remember we're moving right to left here, so we're going to move, no, we're moving left to right here. That's why I got a check. I checked with the constants. You can't move right to left if the constants are on the left, so you have to move left to right. Okay, so, wait, does that make sense? No. Stack pointer can date to the top of the stack, don't you want that to be the new function's base? Yes. Yes, yes, yes, yes. Okay, fine. I'm just trying to read too much into it. Okay, yes. We're copying left to right, huh? Okay. It's good we're not doing something else, but that's okay. We'll look at it later. Okay, so, great. So the current stack is here, and then we're saying move the current stack pointer where that points to, move it into the base pointer, so the base pointer also points there. And now for the entire duration of the execution of this function, the stack pointer can change, but the base pointer's going to get a fixed offset. It's going to remain fixed. And so all local variable axes will be variants of that. Okay, now we have to make space for our local variables. So here we're subtracting 16 from the stack pointer. Y16, how many bytes is two ends in a float? Float's only four. Oh, okay. Double is eight. Oh, okay. I believe. I'm 32 bits. We do, I think I removed that from this example, because I wanted to focus just on this thing, but we'll see that in future examples. So Y16, even though we're only using 12, doesn't that super inefficient?  He's getting up close to four bytes. What? He's going to just give you some runway to work with in case you don't come on. Could be. Maybe we can return address. Return address? Sorry, I got a mistake. We'll see later. Yeah. Can I keep a library for certain sizes? Yes. So X86, I believe you can access any memory location, but some architectures, you can only access four byte aligned memory locations. And so in this way, we're moving it down 16. I believe it'll be 16, even if you only use four bytes. Once again, this is another one of those because the compiler does it. There's not, there's probably logic somewhere, somebody somewhere implemented this, and this is how it is. I'm sure there's a compiler five that you can say to remove this extra padding. It would still work on most architectures, but not guaranteed to work on all. Okay. Then we're moving A into, so A is 10, constant value 10, into EVP minus C, which is which variable? A. A. Right? And even if we didn't know this, we could look at the code and see, well the first thing that this function does is move 10 into A. And this line is moved 10 into EVP minus C. That means that EVP minus C must be A. And we'll see similar things happen. We move the value 100 onto the, into EVP minus 8. And then we move this, remember what we talked about, this is the IEEE floating point representation of 10.45. Move that first into EAX, and then from EAX into EVP minus 4 which is the location of C. Then finally we move B into EAX. We then add EAX to A. Yes, to A. I can't see the C here, I don't want to say C. To A. And we store that result in A. So just like here, there's subtraction. We're subtracting 10 from ESP and we're returning the result into ESP. That's what that syntax means. So we can step through this and see exactly what's going on. So we have our code on the right. We have our handy-dandy stack. Let's say we're at 10,000 hex. And do we know it's in EAX? What a function is called? No. Do we know it's in EVP? Previous, whoever called us must have EVP. Yeah. So there is something in there but we don't know what it is beforehand. But based on this diagram, what's going to be in ESP? Hex 10,000, right? Because I'm telling you, the stack pointer points to this location, you know exactly what's in that register when this function is called. Cool. So we're at the first instruction. Now this is where we're setting up our base pointer, right? We need to set up our EVP address. So we're moving the value 10,000, which is in ESP, into EVP. We will... I didn't include that from here, but we'll get to it. Now we just clobber to these people's EVP, right? So if we return, we destroy their core function. Now we're going to make space for our variables on the stacks. We're going to subtract 16 from ESP. So that's going to put us down here. And remember, we still have our base pointer pointing up to where the stack originally was. So our base pointer will move the stack down to essentially allocate local memory. Cool. Then we move 10 to EVP minus C. So we can see all of that. So now I gave each of these memory locations. So now I'm going to move 10 into layer. I have Fc here. I have F4. So each of these are 4 by offsets. The 4, 8, 12. C is 12. So we're going to move down 12. So we'll copy A here. Or hex A, which is 10, which is the variable A in our regional program. Then we're going to move the value 100 into EVP minus 8, which is going to be right above that. And then we will move this floating point value of 10.45 into EAX. Then we move that into EVP minus 4, which is FFFC. So the compiler basically laid it out such that it's ABC in reverse order, CBA. Didn't have to do it that way. It can do it whichever way it wants. It can do ABC, BCA, whatever. It can completely rearrange these, as long as these compiled instructions are correct. So somebody asked, well, where are these offsets stored? They're stored in the code itself, in these instructions. These assembly instructions are moved 10 into EVP minus C. Because we're not really pushing, that would be an optimization that maybe you could do for very specific functions. I believe it would be cheaper to allocate all the memory first and then put things back right, and then push things onto the stack. Because you may not have values for here yet, and you may not ever access them till later. But you want to make sure you've allocated all your memory for local variables first. Like this. At compile time. So it looks at... Well, it's going to be hard to get back. It's going to look and analyze this function, because it knows... C, we've staggered and looked at this whole function, and we know exactly how many variables are declared. We know there are three variables declared here. So we know that with our padding and rounding, getting to 4-byte boundary, we want 16 bytes of local variables. So in our example, we have A, B, C, one after another. So if it's like integer A, integer B, then I do something with A and B, and then I declare float C. So will it be the same if they will reserve first on the stack and then... Yes, so it will reserve... Yeah, it will analyze the whole function and look at... I believe this is like early versions of C who hadn't declared everything first and then used them, so you couldn't just declare a variable lower down. I think that's to make the compiling process easier, because everything's going to be here. You can still do like one run through the program, right? Figure out all the declarations, and then you know exactly how much you need, and then go back and compile everything. So I must know all the local variables before I reach this time. Exactly. Another question. Let's say in my main, I have condition. Based on that condition, I will call the function. Let's say if this is the case, then call this function or this function. But that will be decided on the runtime. So when I'm doing this procedure, should I allocate two frames? So we will see. But this is the function frame for the function main. That's it. So when you call a function, it's responsible for creating its own function frame on the stack, and any function it calls will create their own function frame on the stack, and so on and so forth, all the way down, so you can run out of memory, or they start returning. But the function call will be decided on the runtime. Yes. Right, so that's why the stack changes during runtime. So if I call that, if I end up calling a function, it will then allocate space on the stack to create its own function frame. It'll execute, it'll return, and remember the rule is when it returns, the stack has to be in exactly the same location. And we'll see there's tons of rules. They have to put your EEP back in the right place and all that stuff, so you can continue executing. So that way, from your perspective, you don't really know or care that their function got called, except that you got a return value from it. Yeah. And this is why it's called stack-executing, not for dynamic scope. Because we don't know... Yes. Yes. In dynamic scoping, you'd have to look up... Instead of this EDP-C, you'd probably have to call some other function to look up the exact variable. But you could... If you remember, in dynamic scoping, there were some cases where you knew it was a local variable. There's no other possibilities. So in those cases, you could compile it like this as an optimization stuff. So this is why you can think of... Why are most languages statically scoped and statically typed? Or lexically scoped and statically typed? Because it's a lot easier to compile. Or in why are fast languages also that way? Because it's easier to compile. And you get really close... The more you think it's seen, the more you realize it's like a glorified assembly language. It's kind of like assembly languages of functions. Okay. So we've added everything onto the stack, into the local variables. Now we're going to move Eax. We're going to move... Oh, yes. Because we're moving this onto the stack page. So we're moving this value, the floating point value, onto variable C. And then... So we know here we have ADC. And so now we're going to move into Eax, EBP minus 8, which is B. So we're going to move 64 into Eax. And then we're going to add Eax to EBP minus C, which is A. So the result should be 112, which everyone knows is 6e. And then we're going to continue executing. So there's some stuff I left out, which we'll talk about in a second, but any questions on brief overview of function frames and stacks? So why are we using these? We're talking about how functions are implemented. So we have decorations, which have a function name. We have formal parameters. So we have names and types of that function. And we have a return type. So we know there's a difference between when declaring a function, we're saying exactly, hey, there exists a function, it has this name, it takes these parameters, here are the types of all the parameters, and here's what it returns. Then once we have that declaration, we can invoke the function. When we invoke the function, what are we providing? So we're providing the parameters of the function. What else? Address of the function. The address of the function, maybe the amount we'll see. Yeah, address of the function. Or name of the function, right? We're telling the compiler what function we want to call. Yeah. I guess we're providing the stack pointer where we're at, right? Yes. So we'll see the stack pointer where we'll add the effect. So when we invoke the function, we have something like this, fx1, x2, all the way up to xk. And remember, x1, x2, xk are all expressions, right? These can be a plus b plus c times d, right? It's not just that we're passing variables into functions, but expressions that could be complicated things. Okay, so when we talk about functions, we're going to talk about what we pass in. x1, x2, xk are called, we're going to call actual parameters. So these are the actual parameters that we're supplying to the function. And what the function declares, and in the function body, those are going to be called formal parameters. So this is just to separate the function definition from the runtime execution of a function and invocation of a function. So it kind of seems obvious, right? But when we want to invoke a function, we need to be able to, the code that is calling, invoking this function must create enough space to hold all of these parameters. Otherwise, where would they come from? So this also ties into function frames. So this gives us a little bit of terminology to talk about functions, because this gets into a really big part of function frames, right? Function frames do not exist in isolation, right? We must have been called from someone unless we are literally the 31st function invocation. And we will probably call other functions, right? So we need to know how we invoke other functions. And so function frames, as we saw, they allow us to allocate memory for the function's local variables. So we know that information. We can know that at compile time for every function. But what other information do we actually need to call a function? So you want to invoke some function. What information do you need? You need, maybe, actually. I think it's the proper answer. We'll see in which case that you definitely need it. So the next function doesn't need the previous functions. So you can think of a current function. We have a previous function. We're going to call some next function. So we've already stored, as we'll see, we have to somehow store the next, because we're using a base pointer. So we need to somehow store the previous function's base pointer. But the next one, we may not need that. So we need the return value. How do we get the return value from a function? And this has to be specified and established. We also need to know how many parameters are there. We need to know our frame pointer. And we need to know the return address. So we need to tell this function how to get back to us. Where should this function return to? When this function is finished executing, where does it go to?  We need that in the best way possible. They are also incredibly complicated, beautiful pieces of engineering.  There is an instruction pointer that points to the current bit of code that's executing. And then when it's done, it goes to the next one, and the next one, and the next one, and the next one. So when you invoke a function, very similarly to not using the little variables, it's executing, executing, executing. At some point, it has to go back to where you called it, but where does it go? How does it know how to actually go back and to start executing right after that call instruction? So we also need local variables, maybe space for temporary variables. So what all of this comes in, what I'm trying to allude to is if I write some function, and let's say I put the return address on the stack, so you call my function, where should you get the return address from? The return value. So I'm returning, you're calling my function, let's say I've written it in hand assembly, because I'm awesome. I say the return value is going to be on the stack. Somewhere near base pointer, R base pointer. Somewhere near return address. Yeah, so when my function returns, what I'm saying is the stack will currently point one down from where you called me, and that thing on there will be the return value. So now you can pop that off into a register, right, and use that value that you got from me. But then let's say somebody else is writing a program, and they don't like that style because it's ugly. They're going to put the return value in EAS. So now you're writing some code. How do you deal with the fact that both of us have different ways of giving you our return value? Does that sound like a good situation to be in? No, it sounds horrible, right, because you'd have to keep track of different functions and how exactly they wanted you to get the return value. And this is where we come to calling convention. This is one of the super important things if you ever get into, especially in security, like binary vulnerability analysis and binary exploitation and reverse engineering and all this stuff, the calling convention is key to that because it describes a standard interface where we all agree. So instead of us each coming up with our own decisions, we're going to say, okay, the calling convention for x86, the return value, we'll say is always in the register EAS. What's the problem with that? EAS can be overwritten? EAS can be overwritten, maybe. How big is EAS? 32 bits. What if I want to return a double, which is 8 bytes? Yeah, so things get more complicated, but people have figured this out and they've established standards to do this, so you won't actually have to worry about this. But it's important that we have the convention and that what this allows us to do, right, if we're compiling all the code ourselves, then it doesn't matter as long as it's standard. As long as our compiler is standard across all the code we compile, it's fine. But what if you compile a library and you give it to me and say, hey, I wrote these awesome functions, here's the binary and here's the header file. Just link these in and you'll be good to go. Now, you better give me code that's the same calling convention that I expect, otherwise we're going to have problems. So, all that information we just talked about has to be stored on a stack in order to call a function. We need the parameters to the function. We need the my function's base pointer because you're going to overwrite it. We need the return address of where we go after the function executes. And then we also need the return value and the local variables. So, we know we need all these things. The calling convention says who's responsible for what. This answers the question, who should store this information, who's responsible and end in what order. Also, as part of this, we talked about it with registers. Some registers are what they call are considered saved registers. So, if you call a function and it wants to use one of those registers, it has to save whatever that value is on the stack, use it, and then return it to the stack before it returns to the function. Or, sorry, it returns it into that register so it's the same. Other variables can be clobbered by the function and they don't have to apologize at all. But this is just a standard. You have to all agree on it, otherwise you're going to write software that's incompatible. So, we need to find a convention of who pushes and stores what values on the stack in order to call a function and end in what order. And so, to make this even more confusing, not only does this vary based on architecture, so x86 is different from the 64A, it's not x64, it's called AB64, whatever the 64 bit version is. And it's different from R and it's different on MIPS. It's different on architectures, which makes sense to different languages. It also varies based on operating system. So, the calling convention for Windows is different than the calling convention for Linux, even on x86. And even more annoying, the calling convention can vary on an operating system. So, on Linux, the standard calling convention we're going to look at, Cdepple, is standard among most software except when you want to make system calls. There's a different system call calling convention to make syscalls into the operating system. So, not only does it vary on processor, operating system, compiler type of call that you're making. And the nice thing is, do you remember when we were doing, those of you who wrote C++ for project 2 and wanted to use our C code, the lecture code, you had to do in your header file, you did a pounding clue, you added a little special curly thing around it. That was saying what calling convention that code expected, so that it could know. So, you can actually, as long as you tell your compiler, hey, these guys are using Windows calling convention for whatever reason and these people are using Cdepple, you can actually use them both as long as you know. In fact, we're going to revisit this on Wednesday.


The psychic DM. So, love talks back. Big round of applause. I'm so happy it's back. Okay, so a few quick, really fast announcements. I'm going to try to get through them as quickly as I can. First and foremost, please. I will never reach out to anybody telling them they need anything. It's not my job. If you need me, you come to me and I am here for you. If you want to come to me, would you like to come to me? Come to me. That's the closest you're going to get to me telling you you need something. You can go to my website. T-O-N-I-G dot I-N-F-O Tony G dot info. That's my website. So, if you want a reading, healing, hypnosis, a book, a book, my big book, any of those, go to my website or click the link below. If you're watching me on any social media or any podcast, there should be a link. And it should have all the information where to get what I have. Okay. Big announcements. February 2nd, I am going to be in Florida doing a live event. Yes, you can join us. I'll be answering questions, doing clearings, connecting people with people upstairs. And that literally upstairs like, but you know, heaven upstairs. Knock knock knocking on heaven's door. There's the first song of the show. It's starting. It is already starting. Okay. The silliness will be throughout the show tonight. We will thank you for that. Whoever did that. Thank you. Okay, we are going to be going into the next set. Oh, wait, wait. Also, this, that time of year is here again. Guess what? This show is being entered for awards. WSCS has awards every single year, every year, every single year. And we are entering my show into those awards. So if there's a show that you can recall that you really love that I've done, or one of the shows that you think is phenomenal from last year, the year of 2023. Please let me know. And we will enter that show. I'm very, very excited about it. And guess what? The awards ceremony. It's in Eau Claire, Wisconsin, which is where I was born. Yeah. Right. Right. Well, I'm up there. I'm definitely going horseback riding. Man, those. So far as a child, when I was younger and I would horseback ride, it was always in Eau Claire. It was amazing. Now I have to find somebody who has a farm and a horse up there. So I can just like go horseback ride. Okay, that is not what it, I don't care if that's what it looks like. That's just what I'm going to be. I'm going to be like riding while I'm up there. I'm going to find somebody I'm going to. Tonight I'm going online and looking for somebody with horses that I can just ride, ride, ride, something right up up to the sky. That's the next song that came through. Numero, not Uno dos. Okay. Next announcement. So that's announcement number two Daytona Beach, February 2nd Daytona February 2 at the Cinematique. And awards in Eau Claire. What else? There are other announcements. I'll go through them as the show goes on. Don't get scammed. Oh, you're at, okay. Patrick says he's out to Patrick's in California right now everybody and he says I'm out to dinner at Mission Ranch owned by Clint Eastwood. Nice. Very nice, Patrick. Blog talk is working again. So if you'd like to call in and ask me a question, connect with a loved one. The number is<PHONE_NUMBER>. It's been like a couple of shows. So I literally need to look that up.<PHONE_NUMBER> is the call in number for blog talk and I will be taking callers tonight call in and if you have a question or you want to talk to somebody on the other side, push one. So your little hand on my call log goes up and I know you want to ask a question. Okay. Next I'm going to do, I always do songs and names. The songs can be a song you love, they love or the answer to a question. The names can be your name or somebody on the other side's name or somebody you know. But if you hear a song and it answers a question, it's from a loved one or your angels. If you hear a name, it's your name, somebody in your family's name or somebody on the other side's name, just know it's for you. Even if I say a name like Michael and that name is for like 20 different people, it's for all 20 of you. Okay. Just know that. So we're going to go into names right now because they're already like coming at me. First name is Lorenzo. Why can I not roll my tongue? How do I get people to watch this? I don't even know at this point. I'm literally turning red with embarrassment for myself. Try to learn how to roll my tongue on live TV. Okay, so yeah, the show does go live on TV. I use this to record it, but it goes live on WSES and all of their channels and their podcast and their YouTube and it goes live on Rude Rangers and all of their channels. These include Roku channels and streaming channels, a plethora of streaming channels. So just know that. So once I get done doing this very classy show, it gets loaded up to live TV where people watch it. They actually turn on their streaming stations to watch me learn to roll my tongue. Yay me. Bringing TV, watching to a whole new level. That's what I'm doing. Okay. Lorenzo. I'm just calling you Lorenzo. Lorenzo. The next name is Michele. Michele. The next name is Cherise. The next name is Lolly. The next name is Melba. The next name is David. Jerome. Douglas. The next name is seriously Cinnamon. Maybe that was her stage name. I'm not judging. I'm just saying. I'm just saying Cinnamon. Next on stage we have Cinnamon. Cinnamon hit the center stage. I'm so sorry. It's an adult show. It's okay. Okay. Thank you, Riley. Riley just said Cinnamon was his dad's horse. Thank you, Riley. See, Cinnamon. It was Greg's pet horse. Thank you. Yeah, his name is Riley. Riley, thank you so much. Cinnamon. See, I say these things and I might get a little goofy with them, but literally, then Riley, I'm going to tell you that's probably from your dad. Seriously. I can't even right now. I can't even. Thank you so much, Riley. I'm so grateful that you put that through. Sorry for insinuating your dog's horse might have been a stage act. But okay, you'll get to see. I'm very goofy on the show. Okay. The next name I'm hearing is the next name I'm hearing it. I think it's a it's a Japanese name and I'm having. It's Horoshita, which I cannot say either, but I apologize. I'm doing the best I can with names I cannot pronounce. Marisol or Marisala. And the next name is I'm going to do two more names. Margaret and Josephina. That's it. We're done with names. We're going to go to songs. The song might be the answer to a question, a song they loved you loved or just it can also be a group. Like I'm hearing right now Nirvana, anything by Nirvana or a very specific song by Nirvana. The next song is Jesus, they're going to make me sing it. Just before I sing, for those of you who are new, I do not know how to sing and I am aware I do not know how to sing. But they bring they bring it through in song. So I go with it. You again. And this song is such as I'm going to sabotage it.  You bring me joy. You know, I don't think the next line is turning me on you.  Okay, whatever that song is. Okay. The next song is take a look at my girlfriend. She's the only one I got because I do not believe this is a song that flatters a girl I think he's like saying like not much of a girlfriend. Are those the real words to that song somebody I need to know. Okay. Jesus, Jesus, Joseph and Mary let's pull it together. Okay, the next. Should I even at this point you guys should I even continue with songs is this like a thing now. The next song is Okay, this song came through a Monday show. I'm in love with a thug with a thug. I'm in love. And that's the only line that's coming through is that and the next, the next song that's coming through is The next song by I wanted to say Elvis Presley so Elvis Presley but it's not Elvis Presley. It's that song by Johnny Cash that train and that something trains are coming down that old track. I don't even know the words but that's the song they're bringing through for somebody. And now I'm going to get really serious. Then I'm only going to do two more songs so this silliness can stop because this is just pure silliness I just need to get. Okay, the next song is the Charlie Brown song. I have no idea but the. When I was going to say I have no idea they just started doing the Charlie Brown song and then one more song and the next song is they're bringing back take a look at my girlfriend. That's a solid no one repeating that messing up. I don't want to mess that song up twice sir. Okay, there's a woman here and she is thicker, fuller. Little pump woman. And she is singing gospel songs and she has dark skin, very, very dark skin. Very dark skin. You know what I'm talking about. But since I don't know the appropriate word for that dark skin anymore. I'm just changing it. I'm just going to say very, very melanated skin to the extreme. She's saying she always had gospel music on always played gospel music. And yes, okay. And before you come at me about melanated skin. Remember, my family is the United Nations. I have nieces and nephews that are Hispanic and white chocolate. Dark chocolate, medium chocolate, caramel chocolate and white chocolate. All shades of chocolate in my family. So don't come at me just because I don't know the right word to use. Alrighty, on that note, we're going to get into it. Here we go getting into it. I'm going to channel a little bit during this show again because everybody seems to be liking the channeling. Between questions on the chat in the chat and questions on the call log. Thank you YouTube. I'm truly grateful for you fixing your errors. Thank you for being back. So Rebecca said she was something was going on with YouTube. They were probably upset with something I said on another show again. And she had she was unsubscribed from my show and she had to resubscribe. So guys, check your subscriptions and make sure that you're still subscribed. Thank you for letting me know that Rebecca. I really appreciate it. Okay, I'm going to go to the first caller who is 203. 203, please have an exact question and or loved one ready for me. What's your name? Here we go. Hey, Tony, it's Pat from Connecticut. Happy New Year. I can see you on YouTube. You look beautiful. And my question is not the most pleasant. I'll try to be clear, but keep it pinky. Can you hear me for I can thank you. Good. Okay. My neighbor who I have had issues confrontations with before and I will not speak to him or Justin whatsoever at Christmas Eve. Put an envelope in my mailbox as I was leaving. Fortunately, I saw it was him. I put my laundry and I came back and something in my head said, Oh, put gloves on your hands and open this with a knife. It was scotch tape, but above the tape all wet. When I opened the card, there was more liquid in the card. And I'm wondering if you can confirm my worst suspicion of what he put there. And if you could sort of address his mind, I just don't get it. So the first thing I'm hearing that, you know, if somebody put something in your mailbox. And there's something liquid. The first thing I'm doing if I if I know that I have a sketchy relationship with this person is I'm, you know, the Pope was at my door. I don't care if snitches get stitches. I will take those stitches to take your butt down. I will you're going down. If you're trying to be whatever with me, you're going down. I don't play like that. I don't, I'm not going to play with that. But second of all, and it's better to the police.  That's okay. And I just let him do you know what he had to say. I'll tell you it's okay if he made you feel like a fool because it's on record. And that's all you need is to have it on record. No, he was, he was saying, what am I supposed to do? What do you expect me to write? You got a Christmas card that was all wet. So I let him go. And then he did turn around and gave me a case number either to cut, you know, cover his butt or whatever. Yeah, and management is also. Okay, and again, and again, and I'm sorry, but I, you know, here's the thing. Here's the thing. And again, you have the case number. And that's the most important thing. And here's the other thing that if you know you have a neighbor that you don't get along with, and there are possibly icky things going on or they're sending you icky things. One of the things that I first just don't even take it just, you know, put it in the garbage. Don't distress yourself over it. And second, if you're going to continue living there and you are, and if he's going to continue to live there and, and he is, find a way to make peace with the situation. Here's what his state of mind is. Okay, because we can't, we can't change or control people. And knowing their state of mind does not matter. If he's a whatever it doesn't matter, it really doesn't matter. What matters is your state of mind.  And I get it. When you live in a communal property, and you have neighbors that you are not in harmony with or in peace with. It's very distressing. So you have to make the choice to get on a list to get into another space, or to somehow get, and I know, I know you're going to say I can't because I'm on housing and yada yada. And then again, all I can say is get on a list, because eventually something will come up for you. Don't complain about this person to everybody because that just makes it bigger in your head. It not in your, in your reality. Instead, if you can't get on a list to, to get to another property altogether, ask instead of complaining about this guy, try to get moved in the property that you're at. Now, if there's nothing you can do about this guy and nothing you can do about your situation, then I would just start being really nice to them. And I know how difficult that can be, but you know, you, you don't have a lot of options in that case. In that case, there are not a lot of options for you if you're not able or wanting to relocate. I have for you Pat, and I'm so sorry for what you're going through. And I hope it does get better. I really do. And I hope that you find peace with this situation. I, I truly do because I know it can be very, very difficult to be in a situation with somebody so close to your home that is very distressing. I apologize that you're going through that. And this is no way to start a new year. So I hope that that, that brings you some, some help. I really do hope it brings you some help. Okay, we are going to go to, wow, there are so many comments in the chat. Thank you everybody for being in the, the chat. So I just want to read all the comments now. I'm going to go, I'm going to try to find a question quick. Oh yeah. Okay, so Michelle, thank you. Michelle confirmed not much of a girlfriend. She's the only one I've got. Seriously, who puts it in a song? Why did they put that in a song? Hey Pine Lake Apartments, Rebecca, Jennifer, hey Jennifer, welcome to the show. Okay, I was hoping Jennifer wants to know I was hoping to get a message from the love of my life, my cat, Tiger, who passed recently December 11. Is he okay? Okay, his passing was not your fault. Not in the way, not in the way that you're thinking he is okay, he's on the other side and you know that is a great name for a cat. Tiger is the word that Tiger is bringing through is blessed, Michelle. Tiger, I'm Jennifer. Oh my gosh, Jennifer, I'm so sorry. I'm so, so sorry, Jennifer. Jennifer, the word that Tiger is bringing through is blessed. Just blessed. Very blessed. Everything that happened happened the way it was supposed to and in the time it was supposed to. So please know that and please be at peace with that. Sorry for shaking the camera, everybody. Okay, if you have a question and you're in the chat watching live on YouTube and you can join us live on YouTube every Monday at noon central and every Wednesday at 7pm central. You can post a question in there. If I miss your, if I miss, miss your question, please post it again. And I will get to it as soon as I can. And then if you would like to call in and ask a question, the number is<PHONE_NUMBER> and here I go to the next caller. 205, what's your name? Where are you calling from? Hi, Tony. Thank you for taking my call. My name is Patricia and I'm calling from Alabama. Patricia from. Happy New Year. Happy New Year. Okay, Patricia from Alabama. How can I help you today? Yes, I would just like to know if you have any specific messages that message that I need to know. I do still have a lot going on, but I would like to know if there's anything specific that I need to be doing or I need to know. Okay, so the first thing that I'm hearing for you, Patricia is work and you need to get everything in order at work or with your work. Get it. If I can say get it good to go, get it in order. Like get everything in order and get it prepared to go. There's going to be something coming in at work, whether it's extra work or more work or whatever it is. Now, if you don't have a job, this would be the work in your home, but if you're looking for a job, this is also pertaining to get it out there. Whatever it is with work, get on top of it. Stay on top of it and get it good to go. Don't lollygag. Don't mess up. Don't procrastinate. Don't lollygag. Don't put things off because you're going to have something coming in. There's something right behind you that's like coming in that's going to require a lot of your time and attention. And again, if this is a literal work situation, it's at work that this is coming in that you're going to have to spend a lot of time and attention at. If it's work within the home or wherever this work is, it's going to be something that comes in that you're going to have to put a lot of attention on. So you need to get as much done as you can over the next. I want to say, I'm going to say two weeks, even though they're saying a month, I'm going to say two weeks just so you're kind of ahead of a game.   So get it all done now. Get everything you can get done. Get it done now. Don't put anything off. Keep moving. Like they keep saying keep moving your piles to the done pile. And Patricia, that's the message I have for you. I hope it was really helpful. Thank you. Thank you so much. You are so, so welcome. And please call back again on Monday or whenever you want to. And we will do it all over again. Okay, love. Okay. Blessings. Blessings, love. Good night. Good night. Okay, I'm going to go to the next if there's another question. Okay, Riley's wants to know is dad proud that I graduated despite my mental health issues. I'm going to say it exactly how I'm hearing it. Riley, and I hope this makes sense to sense to you. Yes, I sure am. And I'm not getting the right dialect or the right, like it's being said in a certain way and I'm not picking up that like accent or dialect yet. So please give me a moment. Yes. Yep. I sure am.  Now, now, now I, he sees how much more challenging. Okay, thank you. Now he understands the challenge as you went through. Now he understands how, how, okay, thank you. It was challenging. And where before he, he may not, when he was here, he may not have completely understood how it was challenging. But now he does he gets, he gets it. And he wants you to know that keep going, don't give up and everything will be will be brighter or bigger. It's going to keep getting brighter and bigger and don't like don't like it's, I don't understand. It's the way that it's being said might be a little bit differently than the way that I would typically say this but don't don't squash or squash the smaller or squash the almost like the light, but also the opportunities. I hope, okay, Riley, I really hope that makes sense for you. I hope you understand the way he's saying that is he did he have a other. I say did he have like some sort of accent is that what I mean is did he speak other than, than American was his, because I can tell sometimes when I have a little bit of difficulty bringing the message through it's because there's a different verbiage or accent that normally would be used. Okay, Riley. Thank you so much for asking that question. I really appreciate it. Again, Amy May, is it taco time because I really want to go for tacos with you this weekend, Amy. Let's do it. Just say yes to me, Amy. You are so welcome, Riley. You are so so welcome. Yes, please. Yes, Amy. Amy and I are doing tacos. Okay. And the whole world now knows.  We might just be that simple boys. Okay, okay, okay. Okay, Amy, call me tomorrow or later tonight and we'll talk about tacos this weekend. Girl, I love you. Okay. Oh, how do I, gosh, okay, focus Tony, get back into the show. Okay. If you do have a question, please post it in the comments and I will get to it. If you have posted a question above these questions, please repost it and I will get to it as soon as I can. I'm going to the next caller 929. What's your name and where are you calling from? How are you? Teresa, I'm doing wonderful. Where are you calling from love? I'm doing a private reading with you. Excellent. Well, thank you so much, Teresa. Okay, love. How can I help you today? Two things. Let me do a validation first. First of all, I would like to tell you a caller that you are very authentic. You're very real. And I hope everyone doing private sessions with Tony. Okay, because she's excellent. Okay. I wanted to tell you that you helped me find the lawyer. Remember my call to you in regards to a lawsuit that I attended? Yes, yes, yes, yes, I do recall. Everything in place. You know what? I found the lawyer right after we spoke. If I bypassed her webpage, but because every so many different things were going on, but I did find a lawyer like he told me she had a girlfriend skin complexion. So I did find her. Yeah, I'm going to let you know that. And I did find a realtor. You talked about so everything, all the little things I was missing out on is everything is in place. Excellent. I'm so, so happy. And thank you. Thank you for the compliments and thank you for telling that to everybody. I did not pay her to say that folks. I did not. So what? How can I help you? How can I help you tonight Teresa? Yes. Okay. So Tony, I'm picking up. I'm going to have to do a private meeting with you. Okay, so in the future, I think I might do a top.  And it's like my heart is tugging at her. So just wanted to see what you pick up around the energy of that. Am I crazy or no? Okay, so I want to make sure I'm understanding you correctly. You're considering picking your, not picking, you're considering adopting a female child. Yes. In the future, about two. I think she's about two, three. Okay. Teresa, I think that, okay, so this is a such a sensitive subject, and I'm going to be as delicate as a private. Well, I'm going to, what I'm going to say is there might be some complications and you might have to look at, there may be a few complications with it. So you might have to do some workarounds to be able to do this. Okay. So what I would say is, as of right now, it looks like there would be one or two complications unless this child is directly related to you, it would be a little bit difficult in this moment. There will be some workarounds that you might be able to do that may help, help you with this process, which we can talk about that at another time. But it might be just a little bit complicated for you to, to accomplish that as everything sits right now. Okay, love. Okay. All right. You'll chat. I'm going to call you to do a private meeting. Okay. That sounds perfect. All right. That's fine. Thank you so very much. And I look forward to talking with you again. Okay. That sounds good. Thank you, love. Oh, everybody. Okay. So I'm going to do, I'm going to look to see if there's another question online. I don't, I don't feel like there is.  Yep. I said hi to Patrick, Rebecca Riley. I think I caught everybody online already. So what I'm going to do now, I have a lot of color. So unless another question pops up, I'm just going to go color after color and I might channel a little bit. Mysterio. Hey. Yes. Okay. Oh, I have to tell. Okay. So everybody Mysterio wants to know trying to write a private eye book, different eras. Will it work? Absolutely. It's going to be smashing. It's going to be smashing. It's going to be very, very good. You need, you need to get it out there. And I'm hearing don't procrastinate the sooner the better. Okay. Mysterio. Absolutely. I think 347. Did I do 929? 929. I think, I think that was Patricia. I'm going to go to 347. 347. 347. What's your name and where are you calling from? This is Katie. Happy New Year. Happy New Year, Katie. How can I help you love? Calling about, well, I want to start dating and I wanted to get some guidance about dating and maybe, you know, meet possibly meet someone and things like that. And how to, you know, going about it. So I just wanted to get some guidance about starting to date again. Okay. So the biggest thing I hear is you're going to meet somebody or your biggest potential to meet a person that has the potential to go into a long-term relationship is going to be in March of this year. You're going to meet this person organically. You're going to meet them outdoors. You're going to meet them outdoors. You're going to meet them. I hear a song coming through. I'm sorry, everybody, prepare your ears. Under the moonlight. I don't even know if that's a real song, but that's what they're singing to me. Under the moonlight. So Katie, where do you live or where will you be in March? And when I tell you, I just love it. I love where, well, I love, well, I love where I live at. I love the people in the building. It's just, it's the best. It's one of the best experiences I've ever had. But I'm in Georgia, but I do plan on doing a lot of traveling this year. And I also want to get outside.  I want to make friends here. So Katie, a couple of things I see coming in for you, and I'm just going to make it super duper like try to get as much out as I can. Number one, yeah, you are going to be a lot of traveling this year. Number two, because you're in Georgia, this is what I was trying to get at. You know, I live in a state where it's really cold through April, sometimes May in Georgia, you're going to have good weather in March. So if you're outside under the moonlight in May, you're going to be good. But I do feel like if you are traveling in March to other areas, and I feel like you are going to you, you have the possibility to meet somebody there. I also feel like you're going to be taking a dancing class, but that's completely separate.  The person does not reside in another country. This is like a little warning or a little hey, if you meet somebody that currently lives in another country, 86 fat, get rid of it. No, you're going to be like, it's March and I just met this guy who's a love bomber and he must be the one Tony was. No, that is not. No, no, no, no, no, no, no, no, no, no, no, no. That is not your man.  And as a matter of fact, he doesn't live far from where you, I don't mean like he lives down the block. I mean he probably lives in the same like city, city as you. So don't, don't think it's somebody like that. Don't think it's, don't think it's that it's not. And I decided like, I want to try to get out and meet people and I was like, I'm even open to online dating as well. No, no, no, I'm going to try a lot of different things. Nope. Okay, don't try that online dating thing.  Let me tell you how to live your life. Let me tell you how to live your life.    It's actual TV. But he's together. He has a little. I'm very open. Thank you so much, Tony. You're welcome. Happy New Year. I wish you well and thank you always for taking my call. Thank you so much. You are so welcome, love. I hope you have an amazing New Year too. And until next time, just enjoy life. Thanks my wife. All right, thank you. Okay, guys, let's see who else came through your welcome Mysterio Bose fishing. Hey, Bose fishing. It's been a minute. We also have Katarina. Katarina. Hi, Katarina. Thank you so much. So I'm going to be answering questions online back and forth. So if you're new or you just tuned in. No, I'm going to go back and forth with questions from the call log. I'm going to take one in the chat. This Bose fishing says, Tony, this is Lynn. Just curious if my dad Leo has any advice for me for the new year. I miss his wisdom. Okay.  So the first thing that's coming through is the song. Keep it coming love. Keep it coming love. Don't stop it. No, don't stop it. No, don't stop it. No, that song is coming through. So the message has to do with you receiving love and how you're receiving love and not having any walls or being guarded to any love coming in. I'm going to just clear that for you and everybody listening. Any walls, any being guarded, any things stopping or blocking us. It's already hitting me, you guys. Receiving love is now going to be healed, cleared, released. All that caused and kept it. Let's pull that out of us also. Now, people are often afraid to let this go because they feel like if they let this go, then they're going to get hurt. It is quite the opposite. When we hold onto it is when that's what we're thinking of and then we, it's still clearing. And then that's what we bring to us and it ends up happening. And then when we clear it, we're, Jesus, Moses, then we're open to, then we're open to pure love. And when we can receive fully and give fully is when that person that can give fully comes in. I hope that makes sense to everybody. Okay. The other thing, yeah, just open up. There's something brand new coming through. Now, I don't know the way that I'm being shown this is a baby. It's a baby. Yeah, it's, it's a baby. I don't know. Now, whether this is a niece, nephew, great niece, nephew, grandchild, child, whatever it is, I see a baby and there's a chance it's a girl. It's a baby girl. It's a baby girl. Whether this is here now recently came in or is on the way. Congratulations. And I do feel like this is this is going to give you that opportunity to completely open up again but keep that for for all the way around. Okay. Please confirm about the baby if you know. Okay. Lynn, please confirm that I'm going to go to the next caller who I believe is 347. 347 what's your name and where are you calling from. No, Tony, you spoke with me already. Of course I did. Thank you so much love. I'm so sorry. Of course I did. Okay, let's go to the next caller. Let's go to the real next next caller. The next color is 1111. What's your name and where are you calling from. Three, two. Yep. Okay. Sometimes that happens. People call in and they're 480. Here we go. 480. What's your name and where are you calling from. And I'm calling from Phoenix. Shiloh. Did you say your name is Shiloh. I love that name by the way. I love that. Oh my gosh. Okay. Are you doing any connecting to the other side. Absolutely. Or that. No, yeah, absolutely. I just need a first name and a relationship to you. I'm sorry. Okay. It's Ron and he was. His name is Ron, the first name and he was a very good friend of mine. Okay. Okay. So the timeline I'm hearing is a year, year and a half. And this can mean a couple of different things. So if you had, do you, first let me ask you, do you have a question for Ron? Or question about your life. Question about my life. Yeah. Will I be moving? A year, year and a half. Okay. So that he answered the question. Yeah. Cause the first thing I said, the timeline it, I'm hearing is a year, year and a half. And then I was like, well, what's that? He already knew. Yeah. He already, they always, oh my God, I love them. I love them. Okay. So they always know what you want and how it comes. So like, yay, Ron. Thank you. If you try to push it sooner, you will not get the right place or the right, you'll end up moving twice. Okay. If you try to make it. Push it any sooner. That's for sure. I want to stay here as long as I can. Yeah. Don't push it any sooner. Cause you'll end up moving twice. You'll end up in the wrong place first. So just stay where you are. And like you said, he's saying as long as you can, there, they, they're like, I don't know. I don't know. I don't know. I don't know. Those on the other side are helping to facilitate you to stay where you are until your next. Place that you're going to be. Becomes available. And you'll know, like the moment. This place is available. You're going to go now is the time. And you're going to like boom, boom, boom. And it's going to just. Flow like, um. And then, um, water, like, yes, like what? Yes. Just like water is going to flow like water. Thank you. Oh my God. Can I ask a personal question? Sure. Well, yeah, as long as it's not about me, absolutely. I just want to know if he has any regrets as far as. The way he left. Okay.  And Mike, he's saying it's going to surprise you. Um, absolutely not. Um, if it. Oh, that doesn't surprise me. Oh, thank goodness. Everything that happens happens in accordance to. I just, you know, I'm not going to go into that. I'm going to say it. He's just saying it was just meant to be this way. It was just meant. There were lessons that other people had to learn from. The way he lived and the way he passed. And in every life of people we know. And every passing of people we know there is a lesson if we choose to look at it that way. So I often the other side or here here and for us and for them. So I, I will say. They have no regrets. In the way they lit the people on the other side. They have no regrets in the way they lived, what they did, how they passed. Even if they did something that we consider super trashy to us. Um, they have no regrets because they can see. That this whole world. Is going. Exactly how it's supposed to. And even if somebody does, and we all do trashy stuff to each other. Nobody, it gets to be so high and mighty that they get to say, I have never, ever hurt anyone. No, listen. When you were two years old, you spat at your great uncle and it hurt him. Okay.  Like, um, I don't see him hurting anybody intentionally at all. He's. No, no. Yeah. No, no, no, no, no, that's not the point that let me, let me read it. Let me, let me say this, that's not the point. The point is the way that they're saying this and, and excuse me if I get a little bit off track when I'm trying to explain this is. Everything that happens here is very. It's supposed to happen in what it's supposed to happen. So when they're up there looking down or, you know, right here, looking at the way they can see everything and the flow and the perfection of the flow and how everything is supposed to go. And so no, he has absolutely no regrets, none whatsoever, none, none. So where is he exactly? Like, and the reason I ask that is his death was a suicide.  I'm going to, I'm going to say something and please everybody. I want everybody to understand this. And if you're Christian or Catholic or Lutheran or whatever you are, there's only, there's only when we pass. I'm going to explain this in a very delicate way. When we pass only one place to go, no matter what our earthly beliefs are. Now, if we read this Bible, it says all loving, all forgiving. It says he died for our sins. And if there is no judgment and we are not to judge and have proclamations of judgment, then, and if, if, if our father, our creator is all loving and all forgiving, what doesn't fall under that umbrella? So he's home. He's home. He went home. And that is the only place we can go. And also there is not one person here without sin. So if one person did not go home, no person would go home. Because we all sin, according to what is proclaimed as sin, we have all in one way or another sin. And I don't mean to sound preachy and I apologize and please forgive me, but we have all done something that would like close those big gates on our booties. And, but if we're all forgot all loving and all forgiving, then we have all already been forgiven and I only have three minutes left and I'm going to mute you for a second and I want to tell everybody this little thing. I was, I have to talk so fast and I apologize. I was doing this self hypnosis healing one night and I wanted to work on something and it's not important and I don't have enough time for all the details. But I just started, I did started sobbing and I was like, please forgive me. Please forgive me. And Jesus's face or Yeshua's face came right to my face came right to my face and said it was given before it was done. It was forgiven before it was done. And that goes for everyone as long as our intentions are pure and we're doing the best we can. It is forgiven before we are done. We are here to learn and grow and sometimes in that growth, sometimes in that growth, mistakes or whatever you want to call it things that we do that might not be the best absolute thing. Oh my God, I have to talk so fast right now. So please know, please know, I love each one of you. So very, very stinking much. Thank you so much for being here. Thank you. Thank you. Thank you. And make miracles happen in your life everybody.