What's up everybody Jason here for jazby's case breaks calm We are giving away five mixer spots in this filler right here of 2020 update mlb Blaster break number one a number 11. Sorry one box break and As a bonus guys because we really want to get this done today We're also going to be giving away a tautis autograph Jersey in this break just in this mini break So here's how it's gonna work guys. It's gonna work like any other filler break We're gonna do the break first randomized customer names and teams everybody gets around on team in the mlb Remember only rookie carts and inserts will ship All-star game rookie cups second-year cards, etc. Do not ship but just rookies inserts and of course if any hits in here autographs relics Will ship out of the blaster so everyone's gonna get around team then at the end of the break We're gonna randomize all 30 customer names again that bought in The top three names or sorry top five names. Sorry are gonna get spots in the mixer, which is about a $300 mixer And it's right over here $300 mixer Right top five get into the mixer and if you come in at number six you just miss out of the break You're like man, just got out man. I didn't even make the top five. I got number six is horrible feeling a lot of us I've helped them before well as I added bonus today because We added a tautis jersey number six on the list is gonna get the tautis jersey as a little consolation price So top five get a spot in the mixer, which is a $300 value number six gets the jersey So let's do the break first. Let's roll and this is a five and a four nine times one two three four five six seven eight And nine remember this is the list of four randomizers for the break first four to five nine times Brian down to Jason nine times one two three four five six seven eight and nine Yanks down to the San Diego Padres All right guys, so again no trades just think of what you got Let's quickly roll through it right there Let's do the break first guys. Good luck. And you get one exclusive player coin inside Luka Donchich Team LeBron is just so stacked Tyler Freeman 2020 movie bets Devin Williams Trouty all-star game Boba Shat Got a chrome Alves Tautis Jr. Alrighty and your player coin Is Glaver Taurus for the Yankees That's cool little player coin This is not a 130 All right you guys so now let's do the giveaway remember top five get into the mixer Well first customer that gets left out and number six is gonna get the Tautista All right you guys so good luck. Remember top five get in Let's roll the dice and we got ourselves a two and a five for six seven times guys two and a five seven times lucky Number seven top five get in number six gets the Jersey one two three four five six and Seventh the final time guys boom seven times seven So just missing out is Nancy at number six, but you're gonna get the Tautista Jersey Nancy Then we got Nancy at five. Wow. You snuck in there as well Brian J. Brian J. Nick Stover and Brian J. Wow. What a randomizer What a randomizer man There we go Did play the odds game So top five get into the mixer And then Nancy Also getting the autograph Jersey a Tautista Fernando Tautista junior So pretty strong So there you go guys We have two more fillers to do for the baseball mixer one has already sold out the other one's on the website That one we're giving away of latimer and gyro jersey to the first customer that misses out So get that one rolling jazby's case breaks.com


OK, so thank you for the introduction. So blind signature schemes are two body protocols where a user can obtain a signature on some message from a signer in such a way that the signer cannot link the resulting message signature pair to the signing process. And these are important billing blocks for e-voting, eCache, and one show at real base credentials. So the motivation behind this talk was that round-optimal blind signatures are notoriously hard to construct in the standard model. And so far, in over 30 years of research and out of over 50 different constructions, only two of them are in the standard model. And these two constructions make heavy use of complexity leveraging and, therefore, practically inefficient. So the main difficulty here seems to be the malicious key model, where the adversary fully determines the public key and that reduction has no access to the secret key. And this is even underlined by some impossibility result by Fischler and Schröder, which determines certain criteria for schemes under which it is impossible to find reduction from the unforgability of a blind signature scheme to non-interactive assumptions. And OK, so vice round-optimality desirable. It's, first, an important measure for efficiency. And secondly, it automatically gives concurrent security, which has to be dealt with otherwise if it is round-optimal. OK, so what we will see in this talk is, firstly, a new way to build round-optimal blind signatures. And we are going to build them from structure-preserving signatures on equivalence classes, which have been introduced at last Asia Crypt. And this is the first practically efficient standard model construction, and we will also give an extension to partially blind signatures. And we will also show how to build one-shot ABCs in the standard model using a similar approach. There is, however, one main caveat, namely the blind disease holds under an interactive variant of the DDH assumption. And secondly, the second part will focus on new results on structure-preserving signatures on equivalence classes, SPSEQ. So we will see a first, but in some way, restricted standard model construction. We will see that SPSEQ implies ordinary structure-preserving signatures. And this also means that optimality criteria determined by arbitral carryover to SPSEQ as well. So throughout this talk, we will need type III by linear groups. And I will denote the generate of group G1 by P and the generate of group G2 by P hat. And we will also talk about structure-preserving signatures. These are signature schemes defined on bilinear groups, which allow us to sign group element vectors. Signatures and public keys are, again, group elements. And verification is just done by the evaluation of pairing product equations and group membership tests. OK, so what does it mean when we talk about signing equivalence classes? When we've got a prime order group G and consider G2DL, then we can define a projective equivalence classes on G2DL, which are lines going through zero without containing the zero vector itself. So in other words, two elements m and n fall into the same class. If one is a multiple of the other. And signatures scheme defined on such equivalence classes has the functionality that once we obtain signature on one representative of such a class, we can obtain arbitrary signatures on arbitrary other representatives of the same class. So and if the DDH assumption holds on the underlying group, then we get some sort of indistinguishability notion defined on the classes for free. So like ordinary structure-preserving signatures, SPSEQ have a bilinear group generation algorithm, a key generation algorithm, a signing algorithm, and a verification algorithm. And additionally, we've got an algorithm which performs that change of representatives by taking input and message signature pair. And this is output. This algorithm then outputs signature for another representative of the same class, depending on some scalar mu, which is used for choosing the other representative. OK, so what about the security properties? We have got correctness, EUFCMA security, and basic notion for the distribution of signatures, which we termed class hiding. And which we are going to supersede with other notions subsequently. This notion says that a random message signature pair coming from one class we have already seen is indistinguishable from random message signature pairs. And EUFCMA security is here defined with respect to equivalence classes. So the game requires that the adversary outputs a forgery m star sigma star such that the message m star defines an equivalence class different from all the equivalence classes defined through the queries. So now we need some properties during this talk for the signature distribution, which are stronger than class hiding. So the first one is perfect adaptation of signatures. It demands that an adapted signature has the same distribution as a freshly issued signature. And an even stronger notion is perfect adaption on malicious keys, where we just require that the signature output by the change wrap algorithm is a uniform element in the space of signatures on the updated representative under the same public key. OK, so now let's talk about the blind signature construction. So it is black box from any SPSCQ, EUFCMA secure, perfectly adapting SPSCQ, and blind under an interactive variant of the DDH assumption and malicious key model. And we can also prove blindness in the honest key model under the DDH assumption. So the basic idea here is to use that the user at first compiles a Peterson commitment to some message m using a commitment key Q, which is part of the signers public key. Then sends an arbitrary element of the equivalence class defined by the normalized representative holding the commitment C in the first component. And as I said, it's normalized so that it holds the generator of group G1 in the second component. Obtains a signature on this from the signer. And then using the change wrap algorithm, so this inherent property of SPSCQ, the user can derive a signature on the original normalized representative. So the user then finally outputs a signature plus a modified opening of the Peterson commitment. So in more detail, at first, the user holds a message. And the signer has a public key and a secret key. Next to, besides containing the SPSCQ secret key and public key, these two keys contain additional values. The secret key contains a scalar Q, which is the commitment trapdoor. And two values Q and Q hat, which is basically the commitment key. And we require here the second value Q hat, which is in G2 for modified opening of the Peterson commitment. So at first, then, as I said before, the user compiles a Peterson commitment by choosing some random SR and using the commitment key Q. And extends this to a vector with the generator of G1 in the second component chooses a random from scalar S, which the user uses to choose an arbitrary representative of the class defined by this normalized representative. Gets back a signature P on the blinded message of the so blinded message. Is able to run the change-trap algorithm in order to obtain a signature on the normalized representative, so the unblinded message. And then outputs a signature tau holding the signature sigma. And two values R and T for a modified opening of the Peterson commitment. So when a verifier is then given message M and signature tau, the verifier first recomputes the Peterson commitment using the value T. And then checks whether the corresponding normalized representative of the class verifies under sigma. And additionally, the verifier has to check whether the discrete locks contained in the value T with respect to base P are times Q. And does so by using these two pairings here. OK, so what about the security of this scheme? It's unfortunable under the EUF-SMA security of the SPSEQ and the Diffie-Hellman inversion assumption. And blind under SFRA set under an interactive variant of the DDH assumption in malicious scheme model. So throughout this talk, I will focus on the blindest proofs as the unfortunability proofs are rather straightforward. So as a warm-up, I'm going to talk about how to prove blindness in the Oniskey model. And here I will give an idea of the experiment. So here in order to prove blindness, the adversary is in the role of a signer. And the experiment at first picks at random a bit B and runs the adversary on a key pair SKPK. So then the adversary outputs two messages M0 and M1. And is given one time access to two user oracles, depending on one for a message and B and one for a message M1 minus B. OK, and finally, the adversary has to output a bit B star and wins the game if B equals B star. And if one interaction fails, then we set both resulting signatures which result from the user oracle to BOT. OK, so how to prove this now by a sequence of games? The original game series, the original game. And as you can see here, the values which in front of the commitment key Q, which are color blue here, are the randomizer for the commitment and the blinding value S. And now in game one, we exchange these for the first user oracle with some random value T. And we do so in game two for the second user oracle. So in game two, both messages are perfectly hidden from the adversary. So and under the DDH assumption, then game zero is computationally indistinguishable from game one, and so is game one from game two. Now how to simulate the user oracle? We do so by embedding a DDH instance and perform the blinding and un-blinding with respect to this DDH instance. And since we've got access to the commitment trapdoor, we can recompute the blinded message with respect to this DDH instance. Now how can we perform the un-blinding and obtain a signature on the un-blinded message? We perform the un-blinding with respect to the other parts of the DDH instance. And as we've got access to the secret key, we can recompute a fresh signature on this un-blinded message. So of course, we have to take care of the distribution of this signature and perfect adaption, the perfect adaption property guarantees us that it is identically distributed to some signature output by the change trap algorithm. So now if the T in the DDH instance equals R times S, then we have simulated game zero, and otherwise we have simulated game one. Now what about proving blindness in the malicious key model? Here, the public key, as I've said before, is fully determined by the adversary, and the reduction has no access to the secret key. The rest of the experiment stays the same. OK, so what we at first have to do is we have to replace the perfect adaption property by the perfect adaption on a malicious key property. And then the second problem we are facing is that we can no longer embed the DDH instance since Q and Q hat are fully determined by the adversary, and we don't have access to the commitment trap or scalar Q. So what we can do now is replace the DDH assumption by an interactive variant of the DDH assumption, which is relative to Q and Q hat. But still, for the un-blinded, we can't recompute a fresh signature then. But what we can do is we can use the adversary A assigning Oracle by revining the experiment. So what does this interactive DDH variant, I was talking about, look like? So the adversary first outputs Q and Q hat, which come from G1 and G2, and are required to contain the same discrete logs, which we can check efficiently using two pairings. So then the adversary has to decide when it is given RP, RQ, SP, and TQ, whether the T in there is random or the product of R and S. And this assumption is hard in the generic group model. OK, so now I'm going to sketch how the proof in the malicious key model looks like. So as I've said before, we use revining. So we've got two runs for simulating one Oracle. And in the first run, we perform the blinding and un-blinding honestly by picking a scalar S prime at random. And due to the knowledge of S prime, we can then run change-wrap and obtain a signature on the normalized representative from the signature returned by the adversary. So after, we have derived the signature sigma B, which we store and we remind the experiment to the step before the blinding randomizer S prime has been chosen. So then in the second run, we hold the signature obtained in the first run, sigma B. And we perform the blinding and un-blinding with respect to the interactive DDH instance, similar to the way we have done it before with the DDH instance in the honest key model. OK, then we send a blinded message, which is for which computation we use the interactive DDH instance to the signer get back signature P prime B, which we can discard. And then the adversary finally outputs signature tau B containing sigma B from the first run and two values, r and t, for the modified opening, which are also stamped from the interactive DDH instance. So far, we don't know any standard model SPSEQ construction, which we can use to instantiate this blind signature scheme. And we only know a generic group model construction. And when we instantiate the scheme with this construction, then the user and designer algorithms just need a few scalar multiplications and verification is just done by evaluating certain pairings and one scalar multiplication. OK, so how about partially blind signatures? In order to build partially blind signatures in a similar way, we just extend the vector length from 2 to 3 and use the additional component to include the common information. And in a similar way, we can also build one show ABCs by exchanging the Peterson commitment for a generalized Peterson commitment, which allows us to commit to message structures. And additionally, during issuing and showing, we need proof of knowledge over the attributes. So we also have got some new details on SPSEQ. Namely, we know that SPSEQ implies ordinary structure preserving signatures. And we do so by, when we want to sign a vector m, we additionally include a component holding the generator. And so we restrict each class to one valid representative. And this is just like the standard UFC main security of structure processing just then. And this also means that the optimality criteria determined by ARVET, I'll carry over to SPSEQ. So we can't do better than having three signature elements coming from both groups, G1 and G2. And we need at least two bearing product equations for verification. And furthermore, it also means that for optimally short SPSEQs, there is no reduction to any non-interactive assumption, which also means that the generic group model construction so far is optimal in this sense. So we can only prove it in a generic group model. OK, so what about the standard model construction? As I've said before, it's a rather restricted construction since it is only class hiding. And we derive it by using a trick of ARVET, where we include two random elements into two additional random elements into the messages, which we then sign additionally and include into the signatures. And this UFC proof is more involved than the ARVET. OK, so now I'm going to conclude this talk. So what we've seen is a new way to build efficient round optimal blind signatures and how to derive partially blind signatures, one-show ABCs, and all of these constructions are secure in the standard model. And we've also seen some new results in SPSEQ, standard model construction, new properties, and that SPSEQs imply ordinary structure-preserving signatures. So thank you for your attention.


Yeah, well, thank you. Thanks for showing up. I wouldn't have thought that so many people are interested in logging. They're good. So the agenda is pretty simple. First of all, try to explain why logging might be useful because at least my impression is that it's one of the most, let's say, underused modules. Then how do we make it work? So I'm just showing around a little bit of the source code and a little bit about structure. And then some optional content in case I run over, including the all-time favorite is logging slow. So this used to be a pie's notebooks. And for scaling issues, I just made some screenshots and turned it into PDF. But you can get all the code and get up. And well, let's start with the ugly part. If you don't use a logging module and start with the most basic way to get out your message, you start with most likely use print. You can use it for multiple things. So looking at that, we have normal information. So this first one, debugging. You want to know what our program is doing, what values are in there at the moment. We might run into a situation where something goes wrong. We also want to report on that. We also do this at a different level. So we have this little division function that really does only a division. Then we call that from another function that just, well, iterates through a complete task. And now we have four calls that we might want to see at one point in time. Normally, if you were to write that, you would probably start, okay, that's interesting. I'll add a print statement. Printed, later on we move the statement. If this program runs into a problem during a long run, you may add some functionality to write into a file. This is all good and well. It has some limitations. So it looks like this. You get all information out. But the only thing that you actually get when you look at it is all the things that you wrote yourself. So that's all text that is in the print statements. And it's all handled the same. You can't really differentiate between the debug level, the error level, et cetera. So print has some limitations. We have to select ourselves what we want to log, how important it is, how we want to handle it. We have to write all the information we want to add to a message. Might be timing information, that might be information about, well, function parameters, whatever you can think of. You have to do it yourself, which also means that you have a good chance to end up with messages who are slightly different. Now, it's not a problem if you read them, but it starts to be a problem if you want to use them in a parser, for example. So I had a situation once where we actually used logging, not on Python, but from Java with different logging configurations and slightly strange logging configurations. That became a huge pain to actually parse those because they were also slightly different. And if you do it by hand, if you do different forms for dates, it will be worse. Finally, we only have limited control where our message does end up. So you can print to a file, you can print to the console, you can even write your own functionality to write to both. But once you start doing this, you basically implement your own little logging module and chance now that the logging that you actually need is already in the standard lab. So what's different with logging? We have more structure. Structure in this case is pretty good because it not only helps you to parse the thing, it also helps you recognize what's in your messages. So you get a nice state stamp, so all the same size, get your error information, you get the name of the logger, it's all pretty nice. And the logging module provides us with all the different infrastructure that we need to set this up. So logging is good. Do you notice a slightly more theoretical band? If you have a message that you want to output from your program, you might ask yourself, how important is this? Do I need this every time I run this program or do I really care about if something is going wrong or if I'm interested into debugging? Where does it come from? As your program goes, you'll have multiple modules, multiple libraries in there that may or may not produce interesting messages and you want to control over that. You also want some information about context. When did this happen? You may, even if you do logging for the web and add session information and things like that, so that in your log, you can really follow a user along. What happened? That's the thing that you normally think first about when you write a logging message, that's what you're writing. If I'm doing this or this function failed, and finally, how does it all look like? So normally, if you think about logging, you'll think about text string, but it's completely reasonable with just a few changes to maybe write it from JSON, which, again, makes parsing much simpler and moves you slowly into the direction of structured logging where you can send your log messages to a database and do some pretty advanced querying, which will be extremely hard if you did it all by hand in text in the beginning. Finally, if we have our message, we want also to control where this message ends up. So do we send it to a file? If we send it to a file, do we want a rotating handler? Do we want, in a multiprocess environment, maybe send it to a socket or a database? Do we want to aggregate it?  The challenge there is, it implements all of it, not always in the, let's say, most transparent way. So there are some, well, let's say, things that you should know about when you start with logging. But to keep things easy, this is just the same program we had previously, and now just with logging. Now, what you say there is that it does not really add much code to your program. This is even a pretty bad example, because what we have there is, well, no real business logic or programming at all. It's just a division. But even there, each log message is just like a winner statement, and you have some extremely easy configuration up there. So this logging basic config, basically just tells the module that it should include debug messages in the output, and then we get a logup. It's two lines extra and four lines that are different, so no worries. And that links us with this kind of output.  So we have a more standardized format. We have the log level in for debug, always at the beginning. We have the name of the logger. We only requested one logger, which is why it's always root. And then we have our logger message. But also we have the stack trace for the exception log. Going back. When we did this printf, we just said that we log exception. We had a problem there. Which log exception, you not only generate an error message, so a log level error, but you also send out the stack trace. Makes parsing again somewhat harder if you do it in a file. You can change it as well. But you get this information essentially for free. Well, the second code is just the second iteration. We got results. So for this, we need some of the change. We got a lot of extra features. I'm marking the things that we want out of the logging module to the actual infrastructure of the logging module. So what we actually used for our logging messages is the logpoint debug logpilotinfo is a logger. You request a logger from the logging module, and then you have different functions that serve to indicate whether it's interesting message, debug, or something that will bring your system to its knees critical. You can have different loggers at different places in your program, and you can request different ones. The loggers themselves have some configuration, so they know to which handler they'll talk. They know their debug level. We go into that later. And they send out their messages, log records, via a filter, a filter's optional, tune handler. Handler could be steam handler, writing to console, file handler, rotating file handler, sockets, queue for multiprocessing. I think there are 14 and counting in the module. It's quite likely that you find something that is useful to you. Maybe not perfect, but useful. Also, we say handler is a formator. The formator turns the log message, think a dict, into the actual text that you point out. So, there's a couple of different objects. They are arranged in a tree, as we'll see later, but it's not very complicated to get them. And if you call base config, what happens, let's say, on the hood, is that it just setups a very basic logging infrastructure for you, so it gives you a logger, it gives you a stream handler, it gives you a standard formator, and then it puts out this information that we saw previously. Now, the most interesting thing is usually what log messages should we use. Debug, like the name suggests, is mostly for debugging. So, if you need extra information because you're looking into some problem, it's not something you would have enabled as you run your program. Can I end up in your log files? Usually the space shouldn't be a problem, but it's maybe a little too chatted. Info is information like, I'm starting my program, I'm doing this, I'm not calling this function. Might be interesting, let's you know where you are in your program, but again, not as important. Warning is just that, something that, at one point in time, you should probably look into. Then your error, something went wrong, and finally critical, your program is about crash or needs to be terminated. So, there's also where it helps you to just structure what you're writing, to think about what information do I want to communicate to you. And as you put these out, you see that you got the logging level plus the information, and logging exception is just a special case of error where also the stack to brace is added. And if you only keep, let's say, one thing out of this whole talk, but most likely business. Of course, that helps you already to build your structured log, and you can build from there. So the most basic thing is just gets a lot of messages into the program, set up, or fine-tuning can happen afterwards. Now we go slightly more complex. This is basic config. Basic config is just the easy way to configure the logging module. Mostly for scripts. So if you want to do just one call to get your logging, it's basic config. What I do there, in addition to the slide before, that first of all, I add some format specification. There are two of those, one the date format. Basically, the standard format is also used for in the daytime module for parsing and printing to say what information you want to get out there. One thing to keep in mind is that milliseconds are not included, for some reason or other on the format string. And the format string tells us on what information we want the logging module to include. The interesting thing is that the only part of this message that we supply is the last part message. Everything else is provided by the logger. So the logger will tell you what the time is, specified by date format, plus a millisecond. The level of the log, it will give you the name of the logger message. As you see later, you'll get much more information if you want it, including the line in your source code, including the thread or process ID. So you can log almost everything about your program in there, and in a way that you'll find the course of the log entry later on. You will see that in addition to the log message, a pure text string, you add some... Thanks. You add some information. The 1, 3, 1.3 there. This uses the oldest style string formatting. I think from 3.2 onwards you can also use the new style string formats. And that would be just a configuration option in the formator. For this talk, I just used a simple word. So, slightly more complex, basic config now is a format string, with a date string, and lock level debug. If you ever start logging with debug and info and your messages don't show up, that's what you forgot. The default configuration has the default logger set to warning only, so debug and info messages get dropped. Now, I don't particularly like basic config, because at the end you'll have to learn two different modes of set up the logging. It has this interesting feature that it is only called once. So, once it is called, it's set up the logging system, and if you call it again, it will not necessarily change it, which can be confusing. So, my suggestion would be to go with this directly. It's slightly longer, but at least in my view, it's easier to understand. So, you request the logger, then you set a level for this logger, then you get your handler, assign the logger to the handler, together with the formator, and you have your logging system set up. Essentially the same thing we did before. You can use this, I could edit here. So, just in your Python code, maybe just write a little module, log in set up that you import, it will usually work. If you go for slightly more complex situations, you will do something different. But, just going back what we did here, so we got logger, we assigned a stream handler to the logger, and we assigned a default formator or formator to the stream handler. And the logger always has this log level on which it's enabled or not. In more detail, so the formator has, it's two format strings, one for the time, one for the message. The log info message has the, let's say, textual part, whatever you want to say in prose, and some parameters that get added to the string. And following from this configuration, you got your actual log message. These are all the things that would be available in the log record to add to your message. I've actually taken out some, because there are quite a lot of them. Some of them are quite surprising, like function name and the line number. By default, they are in there. You can disable them for performance reason. If you want to, it doesn't make much of a difference. So, just take away, in your logging, you can really point to the Python code where the log message originated from, which may not be useful on the same day that you write it, but maybe useful when you see a log message, say, two weeks, two months, two years after you wrote the code. This is the final way to set it up, tick config. There's also a configuration file config, but I like this more. It is not actually easy to read, but it is quite powerful. So, what you should take away, the yellow parts are just the different objects that we have seen previously. So, we have a logger down there, the handler and the formator, or which of them reference each other. So, the logger knows that it has one handler named console, and the handler knows that it's one formator named long format. And all the other parameters are sent in there. The nice thing about this is that it's quite easy to add information, and if you have your login configuration in a file outside your program code, it's quite easy to reload the whole system. You can change your login configuration from outside. You can add, and there's where things get slightly more interesting, different handlers to your loggers. So, what you do here is just load the same config, then add a second handler, and then lock one message again. And as you can see, there's this cat log file. Now, my message ends up in my console and also in my file handler. And, well, if you want to, you can add as many handlers as you want to. So, this is our, I'm sure we know, so we have different file handlers and a swim handler. The thing to keep in mind on the log level is that you can have different handlers with different levels. So, if you say, I only want errors in my files, but everything in my console, you can do that. Like I said, so if we just set the file handler to only print the warnings and ignore the debugging info, it will not show up in your file. This is, I do have it quite easy.  You can also, this is where things get interesting in terms of structure at child's loggers. So, we just request other loggers, normally with, well, some name or name.dot, which maps quite well to the name of modules. And what you create is some logging tree. So, you have a tree of logging objects, and you would normally configure this in a way that you attach the file handlers and everything else to the root logger, then add the child loggers below that, and then you have some switches to which to configure where log messages are. So, normally, start the root logger, configure it, and then add one extra logger per module, and best practice is to add name for this. So, go a little bit faster because there's one thing that I'd like to show you. You cannot filter.  So, it's just a function that you call with your log message, which then decides whether it gets passed on or not. You can also modify the log record. So, if you want to add extra information, you can do that. And for that, I'll just refer you to the iPad notebook. The interesting thing, and the most likely reason is things are fail as this workflow. So, once you have your logging tree built, the, let's say, way that a logging message is passed up the tree is not really intuitive. So, you have a logging call. If it is not enabled at the logger of origin, it gets rejected. If not, a record is created, and the local filters are applied. Now, if there is a handler at the current level, this handler will be called. If not, it will go to the parent. At the parent, it will not work with the filters and it will not work with the level. So, at this moment, the only way to get the message out is the handler, which is also quite nice because you know that the handlers are responsible for filtering the methods, and then it gets emitted. It's actually standard documentation from the module. I just, well, made a little bit more colorful. But I think if you ever run into any problem with logging, this is the most likely cause because there are quite a lot of things that you can tweak or not tweak. Okay, so that's just some basic code for filtering. As you can see, from sweet point something, you can add callables. Before that, it was just an object that had a filter method. So for the 2.7 users, it's slightly inconvenient, but not much more complicated. And you can do a lot of extra things. So you can get the dictionary of the log record and add information, which is actually something that happens with the logging modules.  And the log record that's created there looks about like this. So you can see that Ipython strings there. So it's created out from the Ipython logging hierarchy. So, tons of information that you might find useful or, well, not, depends. But just, yeah, behind the scenes. So, if you run into problems to do that, so see what my logging tree like, I want to recommend just one module. Logging Tree, it's somewhere on GitHub, just group it, it's also on pet. It prints out the whole logging tree. This is about page one of, let's guess, five that gets created when you call the, or visualize the logging tree from an Ipython notebook because Ipython serves as quite a lot of logging modules. As a little exercise for yourself, I just recommend open a Python console, import requests and print the logging tree. So, requests or all other modules will also add their own logs, which are by default not enabled. So they have a not set handler and logging never not set. But they are there and you can reconfigure them and use them if you want to. Okay. Thank you, Siphen. We are unfortunately out of time for questions, but I'm sure you'll be answering them in the hallways. Sure. If people have questions about logging. So thank you once more.


I'm Azmat Shah, from Pakistan, CEO of a Drupal base firm named Drupal Park and we also have Drupal camps and meet-ups in Pakistan. We love Drupal. In fact, the slogan of my company is we eat, we then sleep Drupal. People have surely started taking interest in Drupal and this is what the goal of my company is. Well, I have attended Drupal Connation in Mumbai two years ago. It was a wonderful one and I have a blog post written on that event also on my website. You can visit it. Well, honestly, I wasn't expecting this company to be that large and enthusiasm and that energy which is here is phenomenal. Super awesome.


M-of-18 Ig is a promising new treatment for cancer. It is a chimeric Ig antibody that can target specific proteins on cancer cells, which may help to destroy them. In this clinical trial, it was found to be safe and well tolerated when administered to patients with various types of cancer. Additionally, some patients showed signs of tumor aggression after receiving the drug. This suggests that M-of-18 Ig may have potential as a novel therapeutic option for treating cancer. This article was authored by James Spicer, Bristol Bosser, Anna Montes, and others.


Welcome to INSIGHT, produced in partnership with Lakeland Public Television, serving North Central Minnesota. Today we are chatting with Matt Verlech, president of the Initiative Foundation. Matt has generously agreed to share some of his experience with us. I'd like to thank you, Matt, for joining us today. My pleasure. Thanks for your invitation. So the Initiative Foundation is very interesting. It's one of six foundations in this region, founded by the McKnight Foundation. Talk about the history of the Initiative Foundation. Right. The McKnight Foundation, a private family foundation based in Minneapolis, recognized in the late 80s that rural Minnesota was still struggling to a large degree in the aftermath of the farm crisis. And as McKnight was traveling that region and pondering how they could make a greater impact, they made an interesting decision to try to have that impact not on their own, but by partnering with local people in Greater Minnesota and helping to establish six independent Initiative Foundations that together cover all of non-metro Minnesota. So that was 1986 when each of the six got started. We are one of the six. We cover the 14 counties of central Minnesota. So we go north as far as Cass and Crow Wing County, south as far as the northern edge of the metro area, east to Wisconsin and west to sort of Todd and Wadena area. And from that beginning, you had the definition of each of the foundations suited and form-fitted to the areas and the people that they serve. How does that take hold in the Initiative Foundation? Yeah, that's an important principle that we are driven by local needs, local priorities. Local people are our greatest resource. I mean, most directly, our governance is by a board that is comprised of local folks. So they come from across our 14 counties. They represent a cross-section of industries and backgrounds so that the strategic priorities that they adopt and really all of our actions reflect the needs of the area. And so across the six Initiative Foundations, to a large degree, we are similar because we have the same origins. We still collaborate. We still work very closely with our partners at the McKnight Foundation. We work on a lot of the same subject areas. And yet we also have the flexibility to deviate from what the others are doing to the extent that local conditions require it. And so it really is a very effective model. It's been in practice now for 30 years. I don't think it exists quite like that anywhere else. So it shows a lot of innovation on the part of McKnight and the others that were in on those early conversations and innovation on the part of the folks that have operated the foundations over these past 30 years, including my predecessor who I've recently taken over from just in the last six or seven months. Part of the fascinating element of this is that you have a number of different approaches that were used, some in common and some separate. So you had the pump priming element that McKnight had. There was initial funding. There was initial setup. There was initial model that could be deployed, multiply deployed to six different foundations. But there's also the principle of leveraging the local strengths in each of the communities. Talk about how those strengths are invested into the organization in both the board in terms of the diversity of skills. You referred to that before and in the staff. Yeah, local strengths here in central Minnesota in particular. We like to think that in addition to having lots of great businesses and the normal things you think about with economic development. We also have a broader set of resources including the fact that the Brainerd Lakes area has so much natural amenity that is an attraction for folks from the Metro and really from across the country to come and visit. And so that's a big economic driver for us and something that we try to leverage in our work. One of our projects that we're really proud of to have been involved with is the Cayuna Recreation area, which is northeast of Brainerd, the Crosby area. That is a former mining area where years ago, lots of the tailings that were left over from the mining after the mining company left, it was just all left to kind of go back to a natural condition. So now you've got beautiful forests and lakes in that area. And some folks involved with mountain biking realized, hey, this landscape could be fashioned into a perfect recreational area for mountain bikers and luckily, the Initiative Foundation had a role early on in providing just a little bit of seed money to help do some of the feasibility studies. And together again with so many other partners, the ball got rolling. And now you've got 25 miles of beautiful, and I'm a mountain biker myself, so I can say this really beautiful trails. And it's now a destination for folks not only across the country but internationally. And they come to take advantage of that natural amenity that we have here. And then the economic spillover impact of that has been substantial. If you go to downtown Crosby now, as I did not too long ago, there's the brewery that had a lot of people in it on a nice Saturday afternoon and restaurants and bike shops and kayaking. And all of that reflects the fact that our natural amenities, along with our industrial capability and human capital, all of that combines to make a really powerful economic mix in this territory. And it's the local sensibility that is so important, whether it's in the Adirondacks, in the aftermath of the mining and logging activity that occurred in upstate New York or here, these are programs that are actually shaped by people who really know the landscape, know the needs of each community. They might need some coordination. They might need some help. They might need some financial assistance. But with that, you have the evolution of not only a form-fitted solution to a rather complicated problem, but you also have economic development, community engagement, new recreation areas for people who live, the attractiveness and the pull of a tourist industry. You really are creating a more livable Minnesota through these efforts. That's right. And another way that what you just described kind of comes into play is that we partner extensively and as much as we have a vision for where we'd like to get, it is at a high level and the implementation varies according to circumstances and according to the inputs of our various partners. A lot of how we accomplish our mission is by taking good ideas from elsewhere and then adapting them to the unique circumstances here. So for example, one of the programs we're really excited about at the foundation these days is called the Initiators Fellowship. So there is an existing fellowship program at a place called Echoing Green on the East Coast and it helps social entrepreneurs to develop their ideas. So that is to develop enterprises that have a higher than average positive social impact that can be non-profit or for-profit. So that has been highly successful where it's been implemented and through some sharing of ideas with them and then a lot of great local partners, we have developed their own version of that called the Initiators Fellowship so that now we are helping an initial class of four initiators, fellows, a diverse group from across our region to build their own enterprises. They're going to have positive impact in the region and really to develop their leadership skills so that even if the current path that the individual is on in the business perhaps doesn't work out the way they intend, even if they do a pivot, we want to invest long-term in leaders for this region who will make a positive impact. And so that's been going for just under a year and we really are excited about the prospects for these individuals. And it's just a great example of adapting a good concept that works elsewhere and putting it into practice here in Central. In terms of how you organize the activities of the Initiative Foundation, do you organize them by programs? Do you organize them by financial buckets? Or do you organize them by geographic impact? We generally talk about three main categories of activity, economy, community, and philanthropy. Those are the three broad ways in which we attempt to enhance the quality of life in our 14 counties. So our grant-making is pretty exclusively focused to those 14 counties. And we do it through each of those streams. So economy generally refers to, I mean economic development broadly, but to a large degree helping businesses, small businesses to start up and in some cases to expand. The community part to a large degree involves collaboration with other nonprofits and that can be grant-making, writing checks as you say. But also we happen to run some capacity building programs internally. So in a sense, we're our own operating nonprofit. So we do in collaboration with the Nonprofits Assistance Fund out of the Twin Cities, something called financial resiliency through social enterprise. So if there's a nonprofit that could develop an income-generating stream of activity, we can help them to develop that concept so that it better enables them to achieve their mission. We can only do so much as an individual entity, but if we have great partners and we enhance their ability to do what they do, that broadens the impact. So that's community. And then the third bucket I mentioned is philanthropy. Obviously we are involved in philanthropy directly by making grants, but we also try to facilitate generosity on the part of others that have resources by making it easy for them to set up their own philanthropic vehicles within our structure. So if you're an individual that has been fortunate enough to generate some resources and would like to deploy that in your community, rather than have to set up your own foundation and figure out all the legal financial considerations, you can bring that to us. And we can handle the paperwork, the investment part, the grant making logistics, and you as the donor can advise where you would like the funds to go. So you can really just focus on your passions and not have to deal with what headaches there might be. And we think that by doing that, we make it easier for people to give. And we keep some of those resources at work in this region in perpetuity. And you have various functions there. You're providing infrastructure, you have a cost avoidance function, because the person setting up their own foundation, their own 501C3 has costs, I certainly know what that's about. And then you're also acting as an investment advisor, because you have certain expertise and now that expertise is immediately available to your partners who are working with you to explore their own philanthropic inclinations and investments. That's right, there are rules to giving and so for one thing we can keep folks out of trouble, we know what the rules are. And as a public charity donations to us are tax deductible and that's attractive to folks as well. And so as a consequence of that, we are home to about 90 other, we call them partner funds. So it could be a community foundation like ours, but covering a smaller geography within ours. Or it could be a donor advice fund for an individual or family. It could be an agency fund that's associated with a particular nonprofit or a range of vehicles. But it's been well received and it's a growing area for us and it's a great way to multiply impact. What does the future hold for the initiative foundation? And are there various initiatives that will receive focus over the coming years? Well, first of all, I'm really lucky that I joined an organization that's in strong condition and has a wonderful track record over the course of 30 years. And so my first objective coming in as a new executive is to maintain that progress, keep it going and ensure that that impact doesn't go away. Of course, you want to grow the impact as well to the extent possible. So generally speaking, we want to do more. And in particular, one of the things that's somewhat unique about our foundation and the other initiative foundations is that we are engaged in small business lending. That's not a common activity for foundations, but we have authorization from the IRS to do that as a charitable activity. So we'll partner with banks and entrepreneurs to provide gap financing when maybe the bank or the credit union can't do the whole deal. And there's a little bit of remaining capital infusion that's needed. We will make that infusion and then help the project to happen. So we want to do more of that and of course all the positive work we do. And then in particular, in the Greater St. Cloud area where we have a large population of Somali Americans and other East African immigrants and refugees. We see an opportunity there to do more in the entrepreneurial space as well. That kind of builds on our expertise when it comes to lending and business training. And so we have partnered with an organization called the Neighborhood Development Center out of the Twin Cities. They've had a lot of practice and success with helping low income communities of color to develop entrepreneurs, start more businesses, and grow prosperity for those communities. And so we are once again seeking to adapt a model that has existed and worked well elsewhere. Well, we're going to make some tweaks and adjustments but put it to work in the Greater St. Cloud area. We think that's an exciting way to help a population that has a lot of potential but certainly could use more opportunity than has been present before. And we feel like we have expertise to do it. Matt Varela, thank you so much for sharing with us the work of the Initiative Foundation. And thank you so much for your insights.


Salam from the People's Dispatch Studios here in New Delhi. I'm Siddharth Ani and you're watching The Daily Debrief. On the show today, we're talking about displacement, internal displacement in Israel and in India. And we close with Turkey's continued prosecution, on prosecution also, of the Turkish Medical Association. First up, Israel's new far-right government has reinforced the worst affairs and is set to evict residents of 14 Palestinian villages, a total of over 1,000 Palestinians, including at least 500 children from their homes in the Masafiriya area in the Southern-occupied West Bank. Israel forces informed local authorities about the move on Monday, the 2nd of January, and have already started carrying out individual demolitions. Residents are facing the imminent danger, of course, have been forced out of their homes because of Israel's plans to build a firing range for the military in its locality. At least five houses have already been demolished on Tuesday by Israeli forces and one family was served a notice on Wednesday to vacate their home. This is according to reports coming in from the Wafa Agency. Israeli forces have also been confiscating lands belonging to public utilities such as schools and even water tanks in the area for a sustained period now. Dr Abdul Rahman covers the region for People's Dispatch and joins us now with all the details. Hi Abdul, what is the latest from Masafiriya to Abdul? Well, as per the reports and as per the Twitter feed, it seems that the Israeli forces have given a notice to the residents in Masafiriya. Around 14 villages have been given the notice through their heads, of course, asking them to vacate their home houses as soon as possible because otherwise they are going to forcefully evict them. And there are reports that already they have demolished some houses. They have evicted around four or five families already. There are also reports that they confiscated some tent which basically was used as a temporary school. This school building had been demolished much earlier. There are reports about how Israeli forces are also filling up the water bodies which were dug up all these years because Masafiriya is basically falls in a semi-dry, dry region. And here finding water bodies is difficult. So of course you have to dig wells and all. The Israeli army and authorities have, it seems that they have by-laws decided to go ahead with their plan to create a firing range and displacing thousands of Palestinians from the Masafiriya. And for that they have started taking different kinds of forceful actions. Abdul, this is a case that has been on for 20 years. These plans to build this firing range initially came up back in 1999 and have since then been on hold. Is that legal process now done and dusted? And where do these thousands also Palestinians end up? Well, you rightly pointed out that the case is quite old. It started in 1990s. Immediately after the Oslo peace agreement which was signed in 1994-95 according to which Israel got a kind of exclusive rights over what is called Area C, which is the largest part of the West Bank. Area B, West Bank was divided into three areas, A, B and C. And unlike A and B, Area C, which is the majority of the West Bank, were kind of directly under control of the Israelis. And they decided to create a firing range there. Despite knowing the fact that there are more than 1000 people living there, most of them are shepherds, agricultural farmers. Of course, initially the forcefully evicted most of the people from that region. But some of the NGOs and the people there went to the court and the court kind of revoked the expulsion so the people moved back into the region. Since then the case was going on in different Israeli courts. Finally, it was decided in last year May by the Israeli High Court. Final verdict was given according to which the court accepted the Israeli military's demand or plan to create a firing range, displacing thousands of Palestinians. So yeah, the case has been, it is a final verdict has been given. It was not implemented for all these while because of the confusion related to the government in Israel. It seems now that the new government has taken power and there is a clarity about it, which has a very aggressive agenda of kind of displacing Palestinians, acquiring more and more Palestinian land in the occupied West Bank. So I think this is a part of that particular process which this new government has undertaken to kind of so, and they have a legal code and code excuse also as someone questioned it. I think you and question last year that which court gives priority for firing range over thousands of people, displacing thousands of people, but the Israeli court has done it and this is by a large final. But there are of course resistance by the Palestinians, both online and offline there are groups which are resisting the move and I think it is not going to be easy for the Israelis to kind of implement their plans. Thanks very much Abdul, that's all the time I think we also have today. We move on to India where the story of displacement is never too far from wider politics and the narrative of development and progress. In the North Indian state of Uttarakhand formed in the year 2000 out of Uttar Pradesh, which is of course the most populous province in the country. It is a state with borders China in the north and Nepal to the east and home to about 10 million people. Close to 10% of that population live in the city of Haldwani, which is also an important railhead for the Himalayan parts of the state. On the 5th of January over 50,000 residents of Haldwani had some relief after weeks of distress when a division bench of India's Supreme Court halted the demolition of over 4,300 homes in the Banboor Pura area. Pragya Singh of Newslick joins us with more. Pragya, in the last story we were discussing an Israeli process of building a firing range in a part of Palestine and thereby evicting a thousand people in the process and the United Nations reaction to that by saying what kind of court would pick firing range or prioritize a firing range over the homes of people. It seems that's very much at the centre of the debate that's happening in this North Indian state as well give us a sense of the overall story and where we are in terms of the legal aspects of it at this point. Right, Siddhan. So actually it was a moment of jubilation on 5th of January for a lot of residents of Haldwani. Basically in December 2022 last just about a fortnight ago the high court of the state of Uttarakhand which is a hilly state which means it's very very chilly winter there right now gave an order that people who live in this particular locality in that town can be evicted and they could be evicted using force if necessary within a week. The reason was that the court found that the land that they were you know where their houses were belonged to the railways. Now the genesis of this case itself how it landed up in the court was that an individual in the year 2000 or so filed a public interest litigation. Now the public interest litigation is a very peculiar form of litigation found in India which leads to people trying to enforce the public's fundamental rights but this particular petition was filed to evict these people so that a rail link could be built between the town of Haldwani where these people live about 50,000 of them and where you know the state from which it was removed and carved out in the year 2000 which is Uttar Pradesh. This kind of connection would be built for transporting people from Uttar Pradesh to Uttarakhand which were earlier one state now too. So that is kind of unusual the legal constitutional expert Gautam Bhatti has actually pointed this out recently and his word actually carries a lot of weight where he says that the eviction notice the eviction order was sort of illegal it wasn't constitutional that even if people do not own titles to their land which we are not saying that they don't but even if they do not it doesn't mean that you can sort of pick them up and throw them away. So there was a lot of uproar about the fact that there is going to be this eviction there was a lot of uproar that is going to happen in the winter and also that these people had been living there for some of them for 40, 50 years some of them said they came to this area during the partition of India and also it was said by much of the media couldn't ignore the fact that there were a lot of Muslims who lived there and the Muslims have been in the crosshairs of the BJP which is ruling India and you know which has a right wing agenda based on like a strong Hindu nationalistic agenda so the right wing ecosystem to speak is actually not very happy with the Supreme Court which said yesterday on 5th December that look you cannot do this thousands of people overnight like this and it has scheduled another hearing for 7th February which we have to see what happens there. Right now it is just the state government and other parties to the case who have to file their reply so presumably this will go on for a while. For a while alright which brings us to the next part of the conversation which is that this kind of what's referred to here in India is bulldozer politics you know where you are threatened with literally your home being raised and again it takes us back to what we are talking about with Abdullah and Palestine where it is so much a part of the sort of scenario that there is a section of the right that actually celebrates this and we have seen this on the rise in India in the past to an alarming degree. Absolutely you know this whole idea you see there are several things that play in the Halwani case in the Uttarakhand case one is that you know the notion of development that has been sold by successive governments is to build more roads, build more highways and all of build more train links, build just constantly there is a constant construction going on now India does need roads it needs great connectivity, better connectivity but is there compassion in the ideas that they are proposing does anybody stop to think that someone is losing out so that someone else gains I think that notion now with the current government in power has been completely lost so if you can reach from the capital city to a town in the hills which is a pilgrim town in the same state actually if you can reach it in 6 hours then why not 5 why not 4, why not 3, why not instantly so this what people are not realizing is that somebody is paying the price who might not actually be able to benefit from all these roads and highways you are building the other aspect is that the government's responsibility is to provide housing and livelihood there are government buildings there which includes schools, mosques, temples and you have allowed this to go on for very long because somewhere you did not think that you would reach a point in your politics where only road construction and highways would become a fetish for a certain section, a wealthy section of the society and the poor end up paying the price which is what has been averted here right now I just want to point out another thing, I brought some data I know data is never interesting but here it is from 2014 to now the central government which is the party that has been powered at the center sanctioned 62,700 housing projects out of which 27,000 also were completed in the same state but in the town 4,400 houses were sanctioned out of which it could complete 2,068 houses now you have sanctioned 4,400 houses and the number of houses which you had decided to demolish was 4,300 so the state is building and the state is destroying and one does not know who is gaining or losing and that is actually a very fundamental problem we need to think about development itself and what its goals are but you also need to think about you cannot build and destroy at the same time and justify one by the other absolutely thanks very much Pagya it also brings I think to really front and center the clash of institutions and the political establishment that is ongoing in India over time thanks very much and finally the Turkish government continues its repression of dissent and the functioning of civil society organizations with the prosecution of executives of the Turkish Medical Association which is of course one of the leading progressive and critical collectives of its kind in the entire region PD reported earlier on the incarceration of the association's head Dr. Shabnam Kaurur Financi on charges of spreading propaganda, terrorist propaganda that is on Jan 10th now, Ankara prosecutors will begin hearings against other executives on the vague premise of being members of a terrorist organization Anabrachar of the People's Health Movement spoke to me earlier via video conference and has more details Ana good to see you back on Daily Debrief an important week ahead for the Turkish Medical Association two important court hearings happening on the 10th and then the 11th tell us a little bit about where things stand in terms of the government and the stand that it has taken of course against the head we know but also the association itself yes that's right so if you remember at the end of October we already reported about a crackdown on the Turkish Medical Association in Turkey so the important bit is to highlight is that the Turkish Medical Association is one of the most progressive professional organizations in health that we can see in the world today it has been spearheading very progressive stances and the stances in support of peace since many many years and for that they have been attacked by the government on many occasions so on this last occasion what we are seeing now is that there is an apparent attempt to replace the leadership of the TMA by a temporary leadership which would then lead to election and the election of course could lead to anything if barring that opposition is mounted to what the government is attempting to do so one of the most important thing to notice here is that the TMA will appear in court so actually the members of the Central Committee of the Turkish Medical Association will appear in court next week on January 10th in Ankara so this will be a further step in the attempt to replace them we don't know at the moment what's going to happen on the 10th so there could be a decision to go ahead with this plan there could also be an attempt to prolong the process because by prolonging the process of course the association is stressed and weakened in a way to push them away from the other things that they are doing right and are there any charges that have been framed at this point what are they responding to or what are they sort of facing when they go up in court well the news is from just ahead of New Year's is that the government had ready charges for terrorism and supporting terrorist organizations against all members of the Central Committee but the important thing is that these charges have not been pursued yet so these are things that are ready and that members of the Turkish Medical Association expect to happen quite soon but at the moment the procedure is well it's actually procedural it's an attempt to say that the leadership is not legitimate that it should be replaced and that another round of elections should be put in place All right Ana how does this fit in with the wider sort of political scenario in Turkey at the moment it's an election year of course so everything presumably gets up to that end yes that's right and that's also what you know what we've been hearing from many professional organizations close to the TMA but outside of Turkey so and of course it's important to remember that this whole story started with the arrest of Dr. Şevnen Financı who is the elected chairperson president of the Turkish Medical Association she's a well-known forensic expert and physician so you know she's been involved in many peace initiatives she has been involved in many initiatives that are oriented towards protecting other freedoms including the freedom of press and so Dr. Financı is still being held in custody since October there have been a couple of court hearings in the meantime the next one is going to happen only one day after after the hearing of the Turkish Medical Association so on January 11th and even in this case it's quite unclear what's going to happen so this is a case being pursued in the criminal court because Dr. Financı is facing charges of spreading terrorist propaganda after talking about a possible use of chemical weapons in Kurdistan so what's happening here is that and of course this is not official information no one is going on record to say that but the implications are that the current Terdogan government is trying to weaken the organizations that have a very strong record of pursuing policies that are the opposite of what the government is wanting to see that have been successful in achieving those and they're doing it by different means so you know if we look at the last one and a half years the Turkish Medical Association led by Dr. Financı has been one of the main supporters of health workers actions they have been coordinating strikes and other actions in many parts of Turkey and these actions have been important not only for the rights of the health workers but also for access to health care in Turkey which has been deteriorating as in other parts of the world Thank you so much for that update and of course we'll ask you to track that story for us that's the most important developments expected next week of course and have you back on the show to talk about updates when you have them Thanks That's all we have on this episode of The Daily Debrief as always we invite you to head to our website peoplesdispatch.org for details on these stories as well as all the other work we do we also ask you of course to follow us on the social media platform of your choice if you haven't already we'll be back again same time same place tomorrow until then thank you for watching you