 Hey everybody, we are live with.NETConf. We got Divya talking about DevOps and Azure. Tell us a little about that. How many of you have done this that is directly published to production or seen this or a version of this for the application and the language that you build? At least I have in my developer days and can still remember the scars from it. If I remember right because it was a long time back, we just shipped a website and there was a small feedback for enhancement. I made the change thinking it was small, low risk, and we'll be done quickly. I push the change to production and boom, what was working stopped working too. Luckily, it didn't have a lot of traffic, so the impact was less. But three, four hours of scrambling around, pulling in more force, RCA, etc. Yes, that's this car I'm talking about. Again, assume a payment application and you see an error like this. You don't know whether your money went through or didn't go. Would you use this app again? Issues like this make you lose customers, lose money, lose brand and trust. What is important is how quickly you can recover, how you can avoid them, and these are the two key things DevOps helps you with. Again, mistakes are human, but putting the right checks and balances in place so that they are leased. Recovering from downtime faster, automating your deployments and turnaround times is where DevOps is for you. You live in a world unlike mine, developer days, where great products are available to avoid these mistakes and not using them is a mistake itself. In this world, software delivery performance is measured by throughput and stability. This is from a report by Dora sometime back. And when I say throughput, what I mean here is deployment frequency. How fast are you deploying your changes? What are the lead time for changes? Which means the code changes done by your developer, how early are they reaching your customer? And the second big bit is stability, the time to restore service and the change failure rate. How are you reducing your failure rate? And what the study says is high performance companies achieve faster time to market, increased revenue using DevOps. Some of the numbers you see here are mind-boggling. 2,555 times faster lead time for changes. And what that means is your bug fixes, your enhancements, your features that the developer team is doing is reaching your customer that many times faster. Or reducing the failure rate seven X times. And all of these good numbers here. So what is DevOps? Now we at Microsoft define DevOps as a union of people, process and products to enable continuous delivery of value to our end customers. This is the practice that we use in Microsoft as well. Now let's go through some concepts and understand what is continuous delivery. Continuous delivery is one of the best practices which helps you automate your deployment end to end. From source control, that is where your code file sits, your scripts, your PowerShell, everything which sits, which is source controlled, built automated building it and running as many tests as possible and creating a package. A package can be anything. It can be a zip or EFC or Docker image for containers, essentially something that you'll take and deploy and to multiple environments so that you can test it again, make sure it's good and then give it to your customers. Now this is the DevOps practice that Microsoft uses and is recommended. Now when I build and test together that is essentially continuous integration. Now to simplify it more, these are the key components in DevOps. You have a source control system, you have a continuous integration system with which builds test and gives you a package and then you have a continuous deployment system which automates your deployment process and deploys it for your customer. Now I'm really excited to share with you that this Monday, 9.10 is when we released Azure DevOps or a version of Azure DevOps. So introducing Azure DevOps to you, what you have here is Azure Boats for your work item or work planning, Azure Pipelines for your continuous integration and delivery, Azure Repos for your source control system, Test Plans for your manual and exploratory testing and artifacts for hosting and sharing packages. So these are a set of series for services for developers that span the entire software life cycle. You can use them together to get end to end disability and use them independently. And it all depends on what you need. If you just need work item management, you can just use boards or you use, you can use each one of them independently as well. Either ways, what you'll do is you'll ship faster. And I can see that with confidence because we at Microsoft use this. All our products or 80,000 of Microsoftians use Azure DevOps to ship their software to you, whether it's small teams or large teams. So let's look, because the topic of the day is DevOps and continuous delivery, let's do a double click and look at Azure Pipelines. Now Azure Pipelines is our offering for the hard for DevOps needs, continuous integration and continuous delivery. Azure Pipelines is the perfect launchpad for your code, automating everything from your build and deployment so that you spend less time with the nuts and bolts and more time being creative. At Microsoft, we do just that. We deploy 78,000 times a day with Azure Pipelines, whether it's VS Code, Power BI, reactive, and loads of examples there. To be true, we use Azure DevOps to build Azure DevOps. So we use the same tools in our team as well. Now, let's talk about its specific offerings. So it is a product for any language, any platform and any cloud. So whether you have a .NET app or Node.js, Python Java, we give you a support for all of that. For any platform. So we give you Windows, Linux, and Mac hosted machines which you can use to build your software, build your code. And if that configuration doesn't meet your needs and you have some specific configurations, you can bring in your private hosted agent as well and you can use that to build your code as well. We deploy to any cloud. And I mean it when I say it's Azure, AWS, GCP on-premise or any other model that you have that where you want to deploy. So you're not restricted to only Azure. We're extensible. It's great for any type of application and we don't restrict you to the functionality that we provide. We have a marketplace where there are 500 plus extensions developed by our partners and ecosystem which enhance the pipeline, which enhances Azure DevOps. You can choose products like or extensions like SonarCube, Octopus, a simple task like sending an email or even AWS tools. Yes, Amazon has developed extensions for Azure DevOps so that you can deploy to AWS easier. If you don't find what you need, you can go ahead and create your own extension as well, share it back with the community by hosting it in marketplace or use it privately in your enterprise or in your needs. Now the last one containers and Kubernetes. Now containers are becoming more and more the unity of deployment and Azure Pipelines is great for containers. Azure Pipelines can build images, push them to container registry like Docker Hub and Azure Container Registry and you can deploy any container host including Kubernetes. We first-hand support for all of these. So let's look at some examples here. I want to do Azure Container Registry and deploy it to Azure Container Service. My code can be sitting in GitHub and I can use Pipeline to create a Docker image and then deploy it to Kubernetes. Another example here is Jenkins and I have a ASP.NET web app. I'm building it using Jenkins and deploying that to say Azure or any cloud and my code can sit in GitHub. Now what I mainly want to showcase here is that plug-in play model where you can choose what you want or the tool that you're comfortable in and use Azure Pipelines or Azure DevOps for the needs that make sense for you. Another one here is deploying Azure VM scale sets with Packer. So you have again, source code in any Git, you can use Azure Repos as well for that and use Pipelines and deploy Azure VM scale sets with Packer. Now, where do you get started? Now, if you have to start using DevOps or start your journey on DevOps or use any of these products that I mentioned about, you can obviously get started on Azure DevOps on Azure portal as well. If you're familiar with that, Visual Studio IDE, Azure CLI, PowerShell and many others and I'll introduce one more key one to you later in the talk. So let's get started with the Azure. I mentioned to you that I'll help you get started on Azure under five minutes. So let's see how that is possible. Now, if when you are on Azure, you can go ahead and create a resource for DevOps project. So what that does is it makes it really easy to get started on Azure with DevOps setups. So it helps you launch an app service, Azure with Azure as a service, sets up the Azure DevOps project, all of that for what you need. Now, we have, like I said, any application, any platforms, we've support for quite a few applications here. You can also bring your code and what we'll do is read what that code is and set up your pipeline based on that code. For today, for .NET Conf, let's start with .NET and click Next. Now, I can again decide what framework do I want, whether it's ASP.NET or ASP.NET Core. And let's do cross-platform, so ASP.NET Core. I can decide to add a database as well. And again, as part of this project, what it'll do is it'll set up a Azure SQL server for you as well. And when I click Next, now I can decide what Azure service do I want to deploy this application, whether, like if we have good support for Kubernetes, service fabric, web apps for container, Linux, Windows, all of that. So, I'll use a web app in this case. And the last step here, on what project do you want to create it on? I have used, I have few projects already and accounts already, so I'm gonna use that. But you can go ahead and create another one too. So, let's do that and it'll create, so what you see here is it'll use my subscription here and it will also create a web app service in the background. Now, while it's wiring up the Azure service, the Azure DevOps project, the pipeline, setting up your Git, and all of that, let me tell you few things about what is Azure, what is happening in the background. So, behind the screens, what it is doing, it's provisioning the Azure resources. It comes with a Git code repository. It also sets up application insights integration for you so that you can see and hear what your customers are using on the website that you have and it sets up the complete continuous delivery pipeline for you. So, that's still in action, awesome. So, if you see here, this is deploying, the deployments are underway and we'll give it a few minutes. I can also show you a project that I had set up already. Let's see where this is, it's still underway. Let's go ahead and see this one. So, this is the project that I had set up and what you'll see here is a complete overview of the integration with code. The integration with build and my release pipeline and I'll show you all of that in action very quickly. Awesome, so the resources ready and I can see all of the activity log straight from here. Now, if I jump to the DevOps project, so like I said, it set up the Git repository as well here. So, let's jump there and see that in action. This is the code changes that, so this is the file that it created and you have the pipeline set up here. So, this is the build that I had yesterday. Let's go back and get to this one. I'm trying to find the DevOps project. Yeah. So, what you see here is the build pipeline as well as the code that is set up. So, let's go ahead and have a look at the code as well as the build pipeline. Now, this was the sample code that it added for us and again, you can use this as a get starter as well as you can bring your own code and set up all of this pipeline with that. What it is doing right now, it's building that code. Now, while that is happening, let me give you a glimpse of the steps that it is trying to do. So, what you see here is the pipeline definition or configuration. Like I mentioned, we have a series of hosted agents available in the configuration or the platform that you need, whether it's Mac, Linux, OS, Windows, all of that and the private configuration that you can bring yourself. In terms of resources, in this case, it's set up as your repo's Git repository, but you can bring your code from GitHub, from GitHub Enterprise, Subversion, BitPocket, so wherever you are and you can use that and get the code. These are the tasks that it will run and this is where I was mentioning that you can add a task from hundreds of tasks that are available in the product, in-house, as well as go to Marketplace and select a task from here. Let's see if the pipeline is done. It's still in progress and while that is happening, I'll also show you that it went ahead and created a release pipeline for me. So, if you remember the building blocks that I had mentioned, there's continuous integration and then there is, so the package gets built and that's what is in progress right now and then continuous delivery to deploy it to this Azure web service that I had just, web app service that I had just created. We are still waiting for the build to happen, but if I go ahead and show you the pipeline, what you'll see here is it's set up with the dev as a task. Now again, this follows a very similar build task-like model where I can go ahead and define in this stage what are the tasks that should happen? So, what it's doing is it's taking that resource and deploying it to the Azure web app service. Now, what I can do is go back and maybe modify this to add a QA environment. So, let's add QA as well as a prod environment. And again, what I can go and do is then for each one of them define where the app service should be and select those details here. And so, it's a matter of just adding the details in the configuration and the whole pipeline will be set up for you. In this case, I'm keeping it all same. Now, let's go ahead and look at the build again. So, what you see here is the build is done. There were tests run as part of the build as well. So, in the sample project that it created, there were tests as well. And this is what you do as part of your development as well, add tests so that in the pipeline itself, you can see how is your build doing in terms of unit testing. So, starting to find the issues earlier before it reaches your QA or your prod environment and then fixing it because that fixes are pretty costly. There's a detailed test tab where you can go and look at all the tests again. If there are failures, you can see the details for that. So, in this case, there are no failures, but if there are, you'll see the error message stack trace. Again, the idea is to make it as frictionless as possible for you to go ahead and debug and get your pipeline in action. Let's go back to the release and see that would have triggered by now. Yes, what you see is dev is in progress. Now, essentially what all of this means is under five minutes, you got your code or you got a sample project for the platform and the language type that you wanted and had the Git repo, had the build, the CI setup and the continuous delivery setup. All of that together, which you can then enhance to make it and add tasks to it to make it to what you would want to do, to make it enterprise class and enhance it for all of those functionalities that are required in your scenarios. So, in a while, we'll be able to go back here and then also see all of the Azure resources that got created as well as the application insights. While that's happening, I can also show you another pipeline that I have where I'm building it for all of the platforms. So this is a universal app that I have and what I wanted to do was build it for multiple platforms. So build it for Windows, Linux and Mac and again, run tests for each one of them so that when I am trying to analyze my data, I can see how have the test performed across all of these environments as well. So again, reinforcing what I said is we support all of these platforms and you don't now have to do multiple CI tools or multiple CI platforms for the different environments of Windows, Linux and Mac. Okay, awesome. So what you see here is now the application endpoint is set up, the deployment is done. So we can now browse to it and you'll be able to see the whole website set up with the configurations that we just did. You can make a small code change as well. So I'll make a small code change and then what we'll do is we'll move to the next demo and then we can come back later and see what has happened, has the new code change gone ahead as well or not and all of that will happen automatically. So let's go ahead and edit this file. Let me say, I seem to not have access to edit it. I don't know why it's not. Okay, this was the website that got set up. Let me give it a try again. I don't know why it's not letting me. I don't seem to have access. So there's some access issues but what I wanted to mainly show you is once you edit this file and you just check in and approve that PR, you don't have to worry about any other thing. The whole continuous integration, so the build will kick off automatically and the pipeline will kick off automatically. So once your code change is done, you'll start to see the changes here and that is what we were talking about is faster lead time of your changes. So let's move to the next topic that I wanted to talk about was, so to summarize, get started on Azure, any language, any platform, fully integrated CI CD pipeline with application insights as well. Now the next topic that I wanted to talk about was Microsoft loves open source. Again, this Monday, we had a great announcement and I'm excited to share that Azure DevOps is now supported as a first plus extension in GitHub marketplace as well. So you saw that we had integration with GitHub when I was in Azure DevOps or I was in pipelines but now we meet you where you are and to make all of this really exciting, we are giving free unlimited build minutes for public projects. So if you are a OSS project, you get all of the benefit and the power that I showed you with Azure Pipelines for free. If you are a private project, you get one free pipeline as well and you can buy more. So we are now integrated with GitHub and let me show you a demo for that very shortly. There are quite a few early adopters for this as well. So Atom, CPython, Reactive, VS Code, all of those also use Azure Pipelines with their projects being in GitHub. So Microsoft as well is a big contributor of open source. So let's now see this one in action. Okay, so if you're now on GitHub, you can go to Marketplace and find our extension. So if you go to Continuous Integration, you'll be able to find Azure Pipelines and install this extension. In this case, I've already installed it, but you can do that and like I mentioned, it's free for public projects, unlimited minutes. So all the power off pipelines behind you and one build pipeline for private project as well. If you want to add parallel jobs to make it faster and concurrent, you can buy that too with one parallel job for $40. And all of that payment as well is managed at GitHub. So you as a developer or you as an enterprise don't have to now manage two pricing plans across GitHub and Azure Pipelines. All of that is done at GitHub as well. So we're trying to make it as frictionless and as easy as possible for you. So I'm using the free one and I have this already set up or installed on my account. So let's go ahead and see that in action. So let me, I don't want to change my plan. So let's configure access. So what I'm gonna do here is select a repository. The .NET Core one is what I wanted to show you today. So now when I'm signing it up, what it is doing is it's picked up an organization for me and I'm using one of the accounts that I already have. You can go ahead and create a new organization as well. And let me create a new project. Why, so what it's doing in the background here is for the organization that I had selected or if there's a new organization that you're creating, it's creating Azure DevOps project for you with pipeline setup. So it's getting the code from GitHub and it will understand your code, read that and give you a template for your pipeline based on that. So it'll be there in a minute. So what you see here is it got the repositories. If I had selected all repositories in GitHub, you'd be able to see all the repositories here as well. And I can select the repository that I wanted to use for this pipeline. It then is suggesting me the templates. Let's go ahead and use the recommended one. And what you see here now is it is creating a Azure pipelines.yaml. And I can go ahead and add tasks as well here if I would want to or modify any of these tasks. I'll go ahead with the default and save and run. And when I do that, let's create another branch here. So now what it is doing is it would create a pull request in GitHub. So let's go to GitHub and see that in action. I'll go to my repository. Here it is. So what you see here is there is a pull request here which just got created. So if I just go look in the pull request, what you'll see is it's added a file. So if the file that we just saw, azure pipelines.yaml, that's the file that it's adding. And the commits details and all of that is here. We've also integrated with the checks API and this gives you a complete overview of what is happening in pipelines right now for this code set that I had just triggered off and configured a CI CD system for. So if you go back and see here, this is creating the, so it's created the build definition and now it's going ahead and building that for me. Again, as part of the steps, you can see what it is doing is it's defining the pipeline, got the resources and then now creating that build for me, which will be available for release. Now, once this continuous integration is done, again, based on what we had shown you before, you can go ahead and create your continuous definition for delivery as well based on the tasks and models that you have. So this was the key demo on support for Azure for pipelines. So these were the key things that I wanted to share with you today that how can you get started on Azure really fast using DevOps project, do it for any technology, any platform and deploy it for any code. And what it'll do in essence for you is set up your Git repository, set up your Azure services, whether it's the SQL service or it's the web service, the containers, all of that as well and set up Azure DevOps project with the pipelines, repos and all the configurations so that you just make a code change and your deployment gets faster. Key point you can get your own code as well. Secondly, what I showed you was the GitHub integration that we have, which will help you set up your continuous integration and delivery where you are. So if you are in GitHub, you can just get your configurations done for your pipelines right from GitHub. And again, you make a change in GitHub. Now you don't have to worry about build and release. All of that will get automatically triggered off using Azure pipelines. Javier, do you have any questions? Did you hear any questions from the audience? No, we do not. So funny enough, your entire presentation did not actually have questions. It had people talking about their DevOps process. Some people were talking about how DevOps, how they're doing TFS on-prem and how they're looking into going into Azure DevOps and maybe that's something, one thing we could talk about. Say if I'm using TFS on-prem, what's the best way to get me to Azure DevOps and to run stuff in the cloud? Okay, so awesome. If we have folks who know about TFS and VSTS, what I can also share with you is for existing customers, things don't change and we'll ease you in the new model and the new services model with Optin. So you can take your own base to move to this new model. Now, if you are on TFS and the new name for TFS that will release in 2019 Connect Time Frame is Azure DevOps Server. And so if you are on TFS and you want to move to Azure DevOps or the older VSTS, we have lots of generally available GA service to help you migrate your data and migrate you and make that transition very easy. And once you are on Azure DevOps, all of the management gets taken care of by Azure DevOps team as well because that's the benefit of cloud. So all of that management headache gets taken care of by us. And if you are a really big customer, we can hand hold you in your migration as well. But we have a GA service, which helps do the data migration. You can reach me at my Twitter handle, the revolutionary, if you have specific questions or you want any hand holding or any specific details there for migration. So I'll get a quick question for you. So say for example, in that migration say, I wanna, I have some stuff already on prem, right? I'm doing maybe Jenkins, maybe, I don't know, Octopus deploy or something else like that. And because I need to deploy something on prem, right? I have servers or anything like that. How can I use Azure DevOps that runs on the cloud to deploy to a network share or to a server running on my LAN? Or what's the best way to do it? So there are tasks available to deploy to on prem as well or a specific window server on your machine as well. So you can use those tasks and use that, like do that. Specifically say Octopus deploy, there are extensions available in the marketplace. Let me quickly show you the marketplace as well. And so there are extensions available from Octopus deploy which you can use to do that. So just add it, awesome. So this is the first one, a featured extension right now. So Octopus deploy integration, just go ahead add this extension and then it'll be available in your pipeline. So what I mean there is, let's go to say releases. And if I edit my pipeline here, you can then add the task here for Octopus deploy. So I can just add a task here. Let's search for Octopus and you can do all of those here as well. Does that answer your question? And if this doesn't meet your need, there's this marketplace extension which you can go ahead and install. I already have it installed or you can write your own extension as well. I could potentially deploy to both on prem and on Azure at the same time, right? Cause if it's just a face of the agent, I could say, hey, once you're done, push this to Octopus which will handle all my on-prem if I have that configuration and push it to Azure which I can get the scalability of the cloud. Yes, you can. Rather, if you follow a dual cloud strategy as well, you can deploy to Amazon as well. So you can deploy to AWS again from the same pipeline. So you can have another task here which then or another environment then which deploys to AWS. So I can just create another environment and have the task there which then deploys to AWS, on-prem, cloud, multiple clouds, GCP, all of that. So it's very, very powerful to make it enterprise class. No, that's awesome. So what about the question if I were to want to do something like an iPhone? Do something like an iPhone? Is that something I can do with a pipeline as well? I mean, right now we're just talking servers, right? Or putting things on a network share or thing like that. What if I want to publish to the app storage? Is there something I could do as well? Yes, that you can do too. And you can again use the hosted agents to build your app. So use the hosted macOS, build your app and then you can deploy to iPhone as well, sorry, App Store as well, for your iPhone apps. For all of, so if you're specifically only mobile application team, then we also have a product called Visual Studio App Center, which is for mobile apps and helps you do machine management as well and test across multiple devices. So you should go look at App Center if you are specifically mobile app team. Awesome, so let me, one, I'm just reading the comments I haven't seen any different questions pop up. So say for example, what about notifications, right? So I work with teams that have Microsoft Teams or Slack. For example, QAs or business analysts, they may need to go find out that hey, feature XYC has been deployed. Is there a way that I can from Azure DevOps to let them know this? Yes, so there are notifications. Okay, let me talk about all of those enterprise ask as well. So we have great integration with Slack, obviously with Teams and the end-to-end traceability which comes when you use Azure DevOps end-to-end. So let me quickly show you the project that we work on. So what I have there is our work management, everything happens in Azure Pipelines. Now, if I have a task here, so let me go to the dashboard. That's where we start our day. And for a user story, when I assign that to an engineer and say he's starting to look at that user story and he creates, there is great integration between the products as well to bring you that end-to-end traceability. So let me just pick this user story. And if I go ahead and what you'll see here is I can go ahead and create a new branch straight from here. Or when I'm in a bug and fixing a bug, I can go ahead and create a branch directly from here. And what that brings is that end-to-end traceability. So when a branch got created and a code is getting added, it has associated work items, this one that I had selected, as well as I can add more work items to it as well to bring that end-to-end traceability. Now, when this code goes in the build pipeline and the release pipeline, this end-to-end traceability is taken forward. So when you are releasing, so something gets deployed, you can go ahead and look at that release. And let me show that again in action to see what are the work items that got associated with this build and what are the work items that are getting deployed. So if I show you our pipeline, and this is the live pipeline for Azure DevOps, you'll be able to see what are the artifacts. Okay, this one was manually triggered, but I can see what are the artifacts which are getting associated with a specific build and how is that getting taken forward with specific release and see that end-to-end as well. So in this case, this is the PR build that got triggered off. These are the work items that are associated with. The change that made create this work, sorry, this PR, all of the code associated changes. So I can see all of that as well. All of the deployments that are happening. So I see there are a few in progress. So that complete end-to-end traceability comes when you're using Azure DevOps end-to-end. In terms of notifications, you can add tasks in your build and release pipeline as well. If you want to send out specific notifications to your teams. So there are integrations for that as well. When it comes to releases, so let me show that too. When it comes to releases, again, when you are enterprise great, you would want a manual approval to happen before something gets deployed to say your QA or broad environment or you can also would want, say, let me edit this release and show you the task there. I can go ahead and define who should approve this. So I can define a post-deployment approval or even a pre-deployment approval to make sure that only once something is approved by a specific group of people or a specific individual that the next stage deployment happens. And when there are deployment approval spending as well, that individual gets an email for the same. The last bit in terms of, again, enterprise great that I would want to quickly show you is release gates. Now what I have here is, okay, I think in the broad one, I've set up some release gates. So I've set up pre-deployment approval here because this is my demo account. I've set up myself as the approval but you can also say that the person who's triggering it should not be the one who approves it and you can set up all of that as well. The another thing that we have is release gates to be able to hear from the previous environment that you had deployed to of what are the quality signals? What are the customer intelligence signals? What are, how are the customers behaving? Is the performance okay? And all of that as well, you can use to define whether the deployment should move ahead to the next environment or not. So in this case, what I have is a work item query enabled where I'm saying there should be zero issues in this specific query that I have mentioned that if there are any bugs, then I should not deploy to the, from my QA to prod environment. You can define your query and set your thresholds accordingly or you can actually integrate with any Azure function and use that as your quality signal or your signal to know whether to move to the next environment or not or invoke any REST API, any irrespective of Azure, you can say ping Amazon web service, your on-premise server having a REST API, exposing your REST API, you can use that to know whether to move or not. And similarly monitor alerts here as well. Does that answer the question? Yeah, it does. That's really, really great. Sorry, I was trying to push two buttons at the same time and my body can't move like that. Hey, Divya, thank you so much for taking the time to teach us about Azure and DevOps and all the great tools that you and your team are working on. Thank you so much and hope you folks go back. If you're in GitHub, try Azure Pipelines extension, share feedback with us as well as try the DevOps project and get your pipeline set up. It is just four clicks away for you to have faster delivery, get your own code and have everything done for you by us. Perfect, that sounds like it. Divya Vaishnavi, reach me at this Twitter handle. If you have any questions, if you have feedback on the session, you liked it, hoped I had covered something else, do share all of that at Twitter handle too. Yeah, again, Divya, thank you so much for taking the time to speak. Everybody, stick around. We're gonna do a quick commercial break. We have C-Shar, VV.net, and FSIPS projects, packaging on a diet with David Garner. We'll be right back. Thanks.