 So I don't see anything. I hope you can see me and you can see the slides So Some some words up front. So why did I make this talk? How did it came to to be a talk? my day-to-day job is information security management and in that job, I always have to explain Security problems to people who decide what to do Like we have a security bug here. What should we do? We have vulnerability. What should we do? so This is not everything, but this is a very important part and In January we had Malta inspector and like everybody was oh god. We are going to die. I Mean, we are going to die, but just not now I tried to explain them What the problem was and if it was a problem and for whom it is a problem and I found it's Difficult to explain the actual problem without some background and so I decided to provide the background to people who are Normal people I'm sorry. You are probably not normal people by this definition Because most of you will have opened a computer in their lifetime or two even wrote a program or two, so This is more like people who manage IT Normal people not developers, but the talk is something for everybody Because it will chat some light on the the other side You know the people who look at you with blank stairs when you explain them What Meltdown inspector is? So I can skip over that slide Yes, I look better I Do it I've been doing that for my whole life and I still like that and the interesting you know position in IT for me is between Deciders and IT so what okay as it met on the specters problem If you have a problem We have to do something that doesn't work anymore. So first. What is the problem? Okay Processes that is not like business process, but operating system processes must be isolated from each other this is like a primary Idea behind operating systems So what does it mean? You don't want this app To read the data of that app You don't want this browser tab to read the data of that browser tab You don't want these VMs to read the data of those VMs. Okay, so this is a very fundamental view on how computers work Especially in the cloud environment Or you don't want process a to read data on process B and You see the black gap in the middle That's a security boundary You don't see it, but it's there and Meltdown inspector break down that barrier and this is a problem There's some good sides to meltdown inspector And I will come to those So the first good thing is or the bad thing that depends on your system if your security strategy Depends on this boundary Then you have a problem if it doesn't depend on this boundary, you're fine you know that this one here it has a operating system and maybe Processes running on it meltdown inspector is not a problem Because even if I would be able to execute meltdown inspector attacks on here Process isolation is not you know the primary goal of this thing The second good thing is You cannot directly execute meltdown inspector remotely you have to run code on the CPU unfortunately JavaScript is also code that runs on the CPU and So I will give you know What often is low coin the management summary so what is meltdown? Well the end result is programs can read memory. They should not be able to read It affects on modern CPUs. Yes, I know some CPUs are not affected, but you know Intel MD 86 they all affected what is the attack vector? it's out of order execution and Cash timing for exhortation What are the fixes I will maybe highlight them later on The important thing is the fixes need the processor or either to be redesigned Or the operating system to drop some crucial performance optimizations namely They Are effective doing syscalls and so they have Two bad consequences versus performance Okay, that's bad. What's even worse is the fixes in the memory management and memory memory management is inherently optimized code In operating systems, and it's very very difficult, you know to turn around that to grab it and put it inside out So how bad is meltdown it's bad Spectre Goes a bit. It's a family of attacks it has Programming can programs can read memory and not only from other programs, but also from the hypervisor if they run in the VM It also affects all CPUs it's The fixes are recompiling all the programs Which might be difficult For example here this nobody has source code for that we compiling is difficult and Updating an operating system or a system that is running like doing business work With a change that of 100% Probably, you know could be difficult The vector is speculative execution. I will Show you the differences in this talk So is this a good these two slides are they good management summaries any ideas? Okay, they are really really bad They're good for you because you know understand you understand most of the words, maybe even all words your memory management understands bad and very bad and What's even worse is you tell them you're going to die But you don't tell them how to prevent that or when What the actual problem for them is? so We're going to play a game the threat or meter The magic idea is you have systems on the left side the green ones that are Low-risk systems for meltdown inspector meaning that either process isolation is not a problem like not a security building block or Running untrusted code is already the worst case Because if you run untrusted code and it's the worst case then meltdown inspector. It can't get worse than worst case The red side high-risk systems systems that are inherently vulnerable And we're an attack is very likely and we have process isolation is important So let's play a game. Where would public cloud go? It's probably high risk. Yes because it's runs untrusted code by design database server Medium, I would even say low risk for two reasons You normally don't want untrusted code on your database server So that would be already the worst case and the protection of database servers Normally is quite good because they're buried behind like two firewalls and application server So male server. Yes, I know I don't have icons for male servers male servers are also low risk in my opinion because you know Dove cat post fakes are you know really really major software? They've been audited a lot of times So the chance that you have execution there is quite low and as I said If you had an execute remote code execution, it would be already the worst case I'm not talking about exchange here or other group versus systems They can be a different thing a laptop Laptops are really, you know bad. You have JavaScript That runs on it and lots of programs And what it's even worse laptops You have a company like 80% of all workers have laptops You have a lot of patch and you have a lot of laptops so you cannot you know Put someone next to the laptop and do that you have to to do that in automated fashion And if you do that in an automated fashion, it has to work You don't want to kill 80% of your workforce By you know disabling their computer Mobile phones just the same firewalls I said Nothing should happen there and if something happens, it's bad enough. So the interesting part Application servers any ideas? Yeah, medium medium is a good point. I put it in medium, but it's you know, it depends Because remote code execution also meets code that you download from the internet like libraries Anybody here is doing continuous deployment You might have a problem So not for the old versions because they are very difficult to to to exploit eggs especially the specter But the new ones are different beasts. So if I was you know an evil genius I would look for a library, you know small library that's At the bottom of the library food chain. So that's included everywhere and then I would go to the maintainer the one who you know publishes the the artifact to To Maven or note or whatever and would either give you like a handful of money Or show me a picture of a family. I don't know it depends on the type and Then I would publish publish something that you know, waits a few weeks a month or two until I get some spread and then I would take over some data centers because you know the cloud there They run a lot of code even if it's a private cloud like this one and If I would be able to attack that That would be devastating for a lot of companies The good news is the old spectrum meltdown are more or less patched So meltdown is easy to to exploit but mostly patched and in most systems Specter the old versions are very difficult to exploit But the new version that are coming Probably way easier to exploit and interest announced that the patch arrives in August. So there's you know opportunity for For someone wants to do that So if you wake up in the morning, you're responsible for like a lot of computers and someone tells you this So what would you do? I mean What? What is your patching strategy? I mean you're smart. You already, you know created your your clusters And then you would look like cluster like for each cluster The lowest cluster probably ignored Because you know patching Probably does more damage than it helps the high risk cluster public cloud I would patch the public clouds even if I had you know the risk of Instabilities instabilities whatever, you know what I mean But that also means that you need to know what are your IT systems? So big company small company. It doesn't matter just think the Which IT systems do we have at home and I guarantee that? You will miss at least two and no scale that up to like hundreds and thousands of systems workplace systems routers switches Probably not the microwave not yet, but That's from the management side a very Challenging thing to do So the good side for of Melton inspector was it got attention got management attention to a very high level But it was so bad Yeah, until yet so That was the first part like management summary so the people with the blank stairs when you talk to them this is the part where I tell you how How did that happen? I mean Was it mellis were they stupid? What what happened and so to make that imagine you're running a Burgershop this is your first your first burger shop And you said you sell pizza you sell burgers you sell coffee. That's it Customers come in it's a takeaway. They place the order and You prepare the order and they leave so today's grant opening and you have your one waiter aka CPU core and One customer is basically one CPU instruction The order that the customer has like a burger and a coffee Are the micro operations of the CPU instruction? So what are micro operations? Sysk Complex system instruction sets CPUs like Intel break down the complex Instructions into many small instructions and schedule these For example adding two numbers. There's a special hardware for that Reading memory into the processor. There's special hardware for that Until they break that down into you know small pieces micro operations So and you do the same, you know, you get the the burger and the coffee and Then you prepare what you do so And then the customer goes or in CPU speak the instruction retires Retiring instruction means it becomes effective in the real world. We will see there's a shadow economy inside the processor But first, you know very first day you want to play it safe played safe means You get the order And you schedule the micro operations So first you grow the burger Then you brew the coffee and then the customer start what is good I mean, it's easy even the robot can do it It's very very easy. What is bad? It's very slow. Why is it slow? You have a lot of resources. You have pizza oven. You have a burger grill. You have a coffee machine. You don't utilize them They just stand sit around there doing nothing so the next idea is You get the order you schedule your micro operations, but this time You do them in parallel, you know the burger and the coffee and then you retire Instruction or gives the customer his order This is way way better because you have, you know It's twice as fast as the other version Because you have a way a better resource utilization You can do even better you can you know take the order and Why the order is prepared? You take the next customer and This lucky customer needs the resource that that is free the pizza oven And so now you're running two instruction in parallel in this case This is really good because you know you can't get any faster than that because you're using all your resources There's no no more room for improvement The next improvement would be like a second oven or a bigger burger grill or whatever But what what is really really important? Order is important. So you have to make sure that the yellow First customer gets his order before the green customer So at McDonald's or Burger King. This is probably not that much of an issue but if you do Computers or is important? I can you Grab that chair and sit down But I shouldn't do it the other way you know first sit down and then try to get the chair that doesn't work orders important Okay, so first orders completed and then second order So even more room for improvement We have more burger grills or pizza ovens and a better coffee machine We're still talking about one CPU core. This is not multi core multi CPU. Whatever. This is one core but for example the pizza oven could be the ALU there, you know adding numbers as Said the CPU has to make sure that the apparent order of instruction Stays the same, but if you look at that with three instructions running a parallel and The red one the second one has to be finished before the green one the third one So let's look what happens Okay, the yellow coffee the red coffee The yellow burger the green pizza Okay, the green orders already done before the you know while the red order still in progress This is a problem This would be a problem if the world would see the micro operations, but fortunately the CPU takes care of this it reorders Them so that this is seen to the world in the world like in the outside the program sees yellow red green at Basically, this is this is the core problem. I will show you later why But this optimization on the left Breaks down when the yellow Coffee cup Is something you do and in the little burger you check if you are allowed to do that Then you do something before you check that you're allowed to do that I'll show you so Why did meltdown inspector happen so accident malice and competence whatever the denies they tell into you know do that Or it's just a very very very complex system with Equally complex side conditions so I Would say it's complex side effects Just to code good If it can be explained by by malice and by neglect it's probably not malice People do things Not because they evil most of the time They do it because it seems right and What incident the other processor Companies did was a very very complex system to get very very fast processors Okay, this is special Slides for him and don't show that to your the non-technical people. I don't think Just quick show of hands. How many of you how know how an operating system handles memory? Yeah, I would say a third Okay, so this is not the main You know point of the talk but it shows you how operating system had a memory because This is The way operating system can handle memory and meltdown inspector are both, you know, tied together As I said processes are isolated from each other and so is the memory of a process like a process is a running program and Like the blue one at the top Cannot access the memory of the green one at the bottom Each process I'm talking now about 64-bit operating systems namely Linux They have an address room virtual address room as it is called So they're different address rooms both started zero and both and at two to the 64 minus one and They are on normal Intel CPUs like 48 terabytes So a bit more than, you know, what you put inside your computer as RAM and These this memory it's a segmented first Into pages Like It's four kilobyte pages on 86 But they all support larger pages, but for the sake of argument just leave it at 4k and The memory space itself for each process is also segmented. There's a user space and there's a colonel space So the colonel is operating system It's it is allowed to do everything, you know, it runs basically the computer The process is not allowed to do anything everything as you know what the operating system is for and what the colonel does it maps its data structures its memory inside the process of process memory at specific locations Why does do that performance reasons? I won't go into detail So I said the process itself like the program word or Thunderbird Doesn't have the permission to read the colonel memory and kind of obvious The colonel is high privilege and doesn't want to share all its secrets with user space So we have now seen two error scenarios Like like B and C B is process are a excesses memory of process B and C is process a excesses the colonel memory in its own address room B is very interesting because I said each process has its own virtual address room a Process cannot even you know name an address in process B It's like missing a dimension You can use pointers to say I want the address one two three four But it's always in your own address room. You cannot say one two three four in a process B That's the basics so both protections are attacked by meltdown inspector Meltdown attacks the protection of the colonel memory Spectre, you know just breaks all Spectres even worse they could be D that is accessing memory of the hypervisor So I told you that meltdown allows to access other processes memory and Now I said you can only access colonel memory So how does that you know? fit together, okay Colorful These are the two processes and in the middle you have physical memory and You know the blinking one This is a mapping like the blue page is mapped somewhere in physical memory and You know we have other pages like this page. It's not mapped at all So if you would access memory that's located in this page The processor would fault it would and the operating system would probably terminate your process It's kind of obvious that this must be the case if you think of like 48 terabytes of memory per process You know you can't back all that was you know physical memory and then you have maybe your memory that's Paged out to disk and then you have the red memory. This is the corner memory and the corner memory is The same everywhere But the same physical pages at the same virtual addresses the problem now is The colonel maps all physical addresses inside this virtual address room So it's a bit nested. So we have a virtual address room part of it belongs to the colonel and the colonel itself says I Want to have access to all physical memory pages so I map them Inside colonel space So that basically means That each physical run page is Mapped at least twice once in the corner once in the user space Again, this is done for performance reasons but this also means if I can read colonel space I can read the whole physical memory and That means I can read all pages that are mapped and not paged out or just not mapped And this way I can you know read other processes memory Okay So how do you know that? Well, I read the documentation this is memory map of Linux was 64 bits and Four level page tables. I want to explain page tables right now You see here that the yellow yellow one This is the direct mapping of all physical memory and the blue one at the top. That's your user space again Now I will show you how You know meltdown works. I Will go into Detail for meltdown. I won't go so much into detail for Spectre Meltdown works in three steps first You read a secret from a forbidden address So what address probably something in the colonel space? Then you know you hide away that Because you do something that's forbidden and the CPU will make sure that this has never have been happened You know and then you have someone else who you know finds that secret I would be sad we have how do a stash away that I do that by side channel attack What is the side channel When I was like a little kid So and my mother went to like the opera or the cinema or whatever I was you know strictly forbidden to watch TV And a good kid You know just wouldn't watch TV Well, but you know it was me so I Did watch TV and my mother had it a very very effective side channel attack on that. I Heard you're coming and switched off the TV and ran into my bed and pretended to sleep And left open to such channels the TV was warm and the bed was cold. It should have been the other way around So this is not you know TVs are not to be designed to be hot They just happen to be hot when you use them and so here you have memory Like RAM physical RAM all data stored in RAM if you work with it That's a process and RAM is just very very very very very very very slow Compared to CPU You know fetching one byte from RAM Literally it takes as long as doing hundreds of things If the CPU already had that memory that that data so like on 100 nanoseconds to get data from RAM. That's you know, it's a good value. It's a few years old, but you know For the sake of argument so explain the picture there's an address and in the address that's a value and So I said it's very very slow So what did clever people do, you know do something that's faster faster is cash cash is Extremely fast and extremely expensive that explains why not all your memory is made out of cash How does it work? The processor reads something. It's not in the cash You get it from RAM. So 100 nanoseconds later. You have the data You put it in your cash And like 103 nanoseconds later you have the data. This is not an improvement. It's it's more complex and it's slower The idea is that you most likely will you know use the same data value multiple times Or data like near the data you read For example, you read an array like chunk of memory. So if you read the first bit of the chunk of memory you're very Properly are going to read the rest as well and the CPU Just grabs that memory and puts it into the into the cache so that the next calls are very very fast So the good thing here is This is really fast like three nanoseconds. So What What's the loophole that we use and in meltdown? This is a load instruction Basically read something for memory. It has two micro operations Check if the program is allowed to do that That's the first operation The second operation is get the data The irony is for both instructions the CPU has probably go and fetch data for memory So in the for the first one it needs to get the page tell the entry Which is the the information that manages the pages I showed you And which contains the permissions some user space allowed. Yes or no And the second one is just getting the data from memory as you Would you know wanted so like burger example? You order a burger and a coffee? The burger is ready. The cuffing machine is broken. And so the customer doesn't get a burger and he doesn't get a coffee Well, this is the case that you know one fails That check says you are not allowed to do that And then the customer should not get his burger or his coffee But this is not so so this is program written down Check read magic Okay, left side is the logical view on the right side is what happens if the value is in the cache and And the page table entry is And in memory that's not necessary Precondition but the value has to be in cash So the CPU sees sees getting the data and working with it It's the fastest route to go and if I find out later that I shouldn't have been doing that I you know rewrite history and you know bought the process or whatever and this is no problem Why because the CPU is very good at making making things unhappen So as in the burger example So unless you know the the blue one the magic does something that is not detected by the CPU What cannot be undone by the CPU? So in this case The burger takes the customer takes a burger and runs away That's that's not the design that that I didn't mind when I designed my burger workflow But that can happen. This is a an attack. So we have two actors One is the spy and one the one is a collector In they both run in the same process. So we have memory on the right side a secret value and Some memory blocks the secret value can have the values one two or three For the sake of argument. So the spy will read the secret It will mark a memory block That corresponds to the value of the secret like in this the secret is three and it marks the block it's a three and then The operating system or the processor will find out that it shouldn't have been able to read the secret and Will like terminate it? but The mark still remains and so what the collector does is, you know, it just looks until it finds the mark It's block three. So the secret is three as well. How does it work like? in in the real world the secrets in the cache the Blocks are not cash Spy and collector can access the blocks and neither can access the secret because that wouldn't make any sense to Launch the attack if you can just read the memory Okay, this is to The spy will read the secret Depending on the value of the secret so spy will access Slash mark one of the blocks by accessing one of the blocks that will be pulled into the cache automatically Now the CPU finds out okay bad idea kill that But the block is still in the cache That's the side channel So what the collector now does is you know, it excesses all the memory blocks and low and behold one block is much much Faster to excess than the other blocks and that's the mark And so the collector knows the secret was three It's important that the content of the blocks of the gray war blocks is not relevant it's just If they are in the cache or not, so that's how meltdown works. I Mean If we think about it, it's very very easy. It's it's not a difficult attack But you know the super scala processors Enable that kind of attack Intel introduced them with a Pentium like 90 90 something so Quick summary meltdown uses out-of-order execution of micro operate of operations and micro operations and Uses a side channel attack via the cache This allows the attacker to read all the memory the colon memory Which often includes all the memory of other processes But the important point is This does not include the memory of the hypervisor or other VMs Okay Still awake or sleeping Okay, at least one is awake Spectre is I will gloss over spectre because spectre is really spooky Spectre is an attacking process Can make a victim process do something Without the victim process knowing what it does So how does that work? Okay, basically the same fourth victim to the secret special way the secret get the secret I'm Just looking at the yellow one and from a very high-level perspective The yellow one works by manipulating the branch prediction of the CPU. So what is the branch prediction? and What is this speculative execution? Okay This is me There's also So what will probably happen? If the waiter sees me standing in the line, he will brew me a coffee. I Didn't say what maybe I just wanted the burger, but He blew me a coffee. Why did he do that? Because every damn day I get a coffee and if the interaction between me and the waiter is like Take my money give me the coffee That's you know maximum throughput Compared to I would like a coffee, please. Yes, I will wait and the other customs will wait also Coffee done. Okay. Thank you This is a very good method to optimize The problem is if I don't want a coffee The processor has to throw away that you know it's Work that it shouldn't have been done in the first place and that's the difference between meltdown inspector In meltdown the processor knows Like out of order execution which which code to execute inspector it speculates speculative execution So this is a very complicated program it has a counter and B does something that's maybe of business value and see deference the counter Dechecks the counter counter's greater than zero great go to be this and You know counter zero continue What they see you like at this point will probably have recognized this probably the loop is going to happen because last 50 times it happened So it's safe to say that it happened this time And as long as the CPU is your confident that it can undo anything like the B and C If it turns out that you know counter was Zero It's it's the optimization. Oh, it makes the processor run better And the interesting thing here is Where is How does the CPU remember That D always jumps So we have two to the you know 64 bytes of memory Calculate no no no no we cannot you know remember that for each memory location for each process You have to use heuristics like if the virtual memory address ends with zero five It's probably going to jump That's a heuristic. It's a heuristic that's you know used across all processes And it works well the actual heuristics are you know trade secrets and Probably much much You know more complex, but that's the idea But as I said the heuristics and the counters like does it jump or not does it loop or not? are shared across processes It means that if one process Say at the address uh five five five five five five Oh five five five zero five whatever You know loops all the time The branch prediction for that address will be loop check. Yes Another process that is you know Something else the kernel kernel the hypervisor that happens to use the same virtual address for a comparison for a loop instruction Will be influenced by the statistics for the attacking or from the attacking process Okay, it's like a bit Yeah Is that understandable Is it the problem is basically shared state between processes in the processor And as programmers know shared state is always a bad idea. Yes So and this is how how it works. Um, you prime the branch prediction Um, and then you make sure that the other process does something that it shouldn't do What could it do? for example In the kernel Like linux you have The enhanced Berkeley packet filter Which can run script code Like byte code in colon So if you put some Script code in your address space It's also snapped in the colon's address space So if you happen to know where the kernel has like a jump instruction and you can influence that to call the The the Berkeley packet filter interpreter to run the code you put into your process space You can attack the kernel. Okay This is really complicated, you know, and you have to know all the addresses Where the jump instructions are where the data has to go whatever it's really really difficult And this is why spectra in the in the first versions is not so much of a problem. Okay, this is basically the attack You should be able to read that it's the attacker controls x and The attacker uses every one To access arbitrary memory just ignore the if condition first so the attacker puts in x reads some Like any memory relative to the start of area one And the value let's call it secret that it reads it uses to um Put another block of memory inside the cache You might recognize that from melton. It's exactly exactly the same what spectra does is um, it prompts the branch prediction so that the cpu thinks that x is always smaller errors at one size And so the cpu speculatively executes that and i'm told to hurry up a lot and so i do that I'm sorry. I'm sorry, but i'm There's another one And this is the attack that's actually really working is The branch prediction can not only say Does the loop happen? Yes or no It can also remember where the loop or the jump goes and this is then the way to you know run something completely different So I will skip over that Yes Shut up Got it so What did we learn? We have a management part on like how to manage Something like metronus spectra and it's really difficult and yes, i will hurry up And we have a technical a technical part So for the first versions of melton spectra, uh, my suggestion was Okay, plate safe test the patches and then roll them out Because I deemed the patches to be high risk and lo and behold, they were high risk and but You know the problem is, you know The slides are old, you know like a week Who would have thought that they are new new new bugs they are not They should have been released like two days ago They will be released in two weeks um And the the bad thing is there's a spectra variant Announced that is way way more easy to exploit than the old one And just remember We have A lot of libraries that we put into our code and patching These libraries like for bugs or continuous deployment might not be the best strategy to handle this attack But just saying Just shout So We have a micro thank you. We have a microphone troll. So if you have a question for jens, thanks for the talk I'm sorry for cutting you short, but we wanted to get in a few questions any questions from the audience. Please hands up Yeah, upfront Is it stay seated? relax Thanks for the talk. Um, you didn't mention anything about performance issues. Um If I fixed meltdown and spectre, how would that um, yeah result in the performance? um I mentioned that at the beginning like I glossed over it So to fix meltdown inspector just talk about fixing meltdown. What would be the fix to fix meltdown? Well, don't map the kernel memory when the user space is running If you do that, um you would like Kill a lot of caching mechanisms like the tlb and the the cache for the kernel memory and That would make calls into the kernel Very expensive because they would basically run into an empty cache so the the point is The more you depend on the kernel like syscalls The more like the fix for meltdown will hit you The fix for spectre that the google device has Not so much performance impact um, but the numbers for meltdown are like between 5 and 30 percent, you know, that depends on the cpu the operating system, especially what you do Another question. Oh, excellent. Yeah, uh, thank you for the talk and I wanted to ask you you mentioned that, um All modern cpu's are affected. So what about the risk cpu's and When you follow the media, for example, i am amd cpu's Maybe are not as much affected as intel or Okay, first when I said all modern cpu's I just lied to you um The second question is I cannot really answer that because I honestly do not know but a lot of these attacks are for example, especially spectre Are attacking cpu internals So different cpu internals between different results with the attacks My guess is At least, you know the widespread server cpu's x86 are all affected Just it doesn't matter if they're from amd or from from intel but That's you know for Someone who's better at you know it than me So you told that uh, we know that in in meltdown addresses were in the cache and We can see if they are in the cache or not. So The only thing I don't understand is how we how do we get the data so we can See if the address is there or not But how we can can we see read the data but we are not allowed to read the data directly. Okay, um Keep it keep it short. Very short. Okay. These are you know three memory blocks Um, I I I want to tell you that you know number two Is well the number two is a secret So I would sit on that chair I would get up and you will feel cold warm cold. Okay number two so You infer from you know the protocol that we have devised. What is the hot chair? um What the secret number is So This only works if I could you know steal the secret secret number from the cpu Because of the out of order execution of you know first give me the value and then check if I was allowed to do that Was it clear Yeah, I'm sorry by by by ends appear afterwards and he will explain it once more. Uh, the slides are available on that Oh, yes, also first all slides Are a open source So if if you want to use them at your company after your university or whatever Do so, please I mean, it's a lot of work and just for me or no, please and the other one is Is something missing boring was it awesome? Of course it was awesome, but feedback helps You know what's worse than sitting in a boring talk Making the next audience sitting in the same boring talk so Please give feedback. I don't know if you have a feedback system here. If you don't have one the sources are on github and I just happened to have opened an issue called feedback So just comment there. Thank you Thank you once more ends. Thank you very much