1 00:00:03,199 --> 00:00:03,909 all right so lecture 11 was about uh generic rigidity of linkages so we've got bars and vertices connected together in a graph and generically the graph is all that matters and we characterize in two ways henneberg construction and le mans uh when graphs are generically rigid and in particular there was this pebble algorithm that was supposed to tell you in polynomial time whether your graph is lemon or not and everyone pretty much asked about this about the details including myself when i watched it like that seems a little sketchy so i thought i'd spend most of today going through how that algorithm works exactly and also why it's correct which is definitely not obvious it kind of vaguely feels correct but we'll see why it actually is remember le mans theorem the le mans characterization is that your graph is generically rigid if and only if every subgraph let's say every k vertices induces at most 2k minus 3 edges that's part 1 and you also need that the number of edges overall in the graph is uh 2 n minus 3 where n is the total number of vertices so this was just the degree of freedom count you have 2n degrees of freedom for every vertex minus 3 for the rigid motions 2 translations 1 rotation so that's the number of edges you should have total and then sorry this is for minimally generically rigid and then to make it balance you want to guarantee that every k vertices doesn't have too many edges because if it had too many edges there'd be too few somewhere else this part would be over brace some other part would be under braced and you'd be flexible that's the intuition and so the the tricky part comes down to how do you check whether every k vertices induces two k minus three edges uh because there are exponentially many choices there's two to the n different choices of subsets of vertices for each of them you'd have to check that's no good so the algorithm wants to check this and i'm going to call this property the 2k minus 3 property and we're going to warm up with a simpler problem which is to check the 2k property without the minus 3. so 2k property is just every k vertices induce at most 2k edges so this will be a little easier to think about more or less the same a lot easier to argue about and then we'll see how to modify the algorithm to check the 2k minus 3 property was the property clear and in particular inducing inducing means that you have some set of vertices and there's the rest of the vertices n minus k of them you only look at edges where both endpoints are in the set both of them are among the k vertices so you ignore you ignore vertices that have one end and k and the other end outside and you ignore obviously edges that have both ends outside just count these guys okay so uh how do we do this let me give you the algorithm actually uh let me first give you the idea of the algorithm before we go to the actual algorithm and this is sort of review but pretty soon we'll get to stuff that wasn't covered in lecture so the idea is uh every vertex has two pebbles inside of it which i'll draw as two red dots and they can cover incident edges so they can't move very far they have to stay basically on inside or on the boundary of the vertex that's how i'm going to draw it each pebble can cover one incident edge so for example uh there's a little graph uh i could take uh let's maybe i leave one of the pebbles in the middle i can move one of the pebbles to cover one of the edges so i'll put it at this intersection to denote it's covering this edge but it still belongs to this vertex pebbles cannot change vertices they have to stay kind of local these two pebbles could just stay where they are here we could you put one pebble here another pebble there one pebble here one pebble here this is what i call a pebble cover because every edge is covered by some pebble and that's sort of the the goal and a pebble cover is to cover every edge you only need to cover it once and the pebbles can either cover an edge uh or they can be free i'm free if they're just hanging out in the inside here not being used for anything okay so our goal is to find pebble covers but the first claim why do i care about pebble covers i claim that having a pebble cover is equivalent to the 2k property so that's what i want to show so let's start with that this is sort of why everything is working a graph has the 2k property if and only if it has a pebble cover so that's why we care about these pebble coverings this is actually pretty easy to prove and gives a lot of intuition for why everything works here so let's start with the left direction so suppose i have a pebble cover suppose somehow i've achieved this property covering all the edges using only two pebbles per vertex i claim that we then satisfy the 2k property 2k property says you take any k vertices you induce at most two key edges so let's consider k vertices if someone chooses k vertices it doesn't matter which this should hold for all of them for all choices uh so we've got you know k vertices here n minus k vertices remaining we claim that the number of edges induced by those k vertices is at most 2k so look at one of these edges that's wholly inside that's induced by these k vertices uh when we i claim well that edge must be covered by a pebble which pebble well either this one or one on the other side but the point is it is covered by a pebble among these vertices so there my concern is well you know maybe you worry about an edge like this it has uh or maybe you know if you worry about a pebble here that's covering this edge but that edge is not one of the induced edges so these these vertices are irrelevant it's just the pebbles inside uh the just among these 2k pebbles so in here there are 2k pebbles they must fully cover the induced subgraph they must cover all the edges in here that means they're at most 2k edges because there's one pebble per edge at least okay so there's two k pebbles in here this means they're at most 2k induced edges clear that's sort of the obvious direction this doesn't really exploit very much about pebbles the other direction is a little more interesting why should these pebble covers exist because they seem pretty constrained pebbles can't move very far it's not really clearly the same but it is so if we have the 2k property so now we know that every subgraph of k vertices uh induces at most 2k edges now we want to prove that a pebble cover exists this uh i'm going to wait okay it will become obvious momentarily this is kind of fun sometimes it's easier to prove a theorem than it is to come up with an algorithm but in this case it's easier to come up with an algorithm than it is to prove the theorem and you can use the algorithm itself to prove the theorem so i'm going to prove this in a moment stay tuned meanwhile we have an algorithm so algorithm is an example of what we call an incremental style algorithm where you imagine starting with the empty graph and then you put in all the edges that belong one at a time so add edges one at a time starting from nothing one detail is we're going to imagine as edges get added we want to direct them we're going to direct edges from the pebble that covers them to the other side so if we have an edge and we have a pebble over here then i'm going to imagine the edge is being directed from the pebble to the other side that's just for convenience for expressing the algorithm in a moment okay so now uh so this is for the 2k property we'll get to an algorithm for 2k minus 3 in a little bit so now we have a for loop over the edges we're going to add and when i um immediately add an edge it will not be covered so it's sort of not directed just some edge vw i would like to put a pebble here but it could be both pebbles at w are occupied for some other edges could be some uh the pebbles for vr also occupy for some other edges that would be annoying i want to somehow reassign a pebble to cover this edge so what i'm going to do inside this for loop is search for available pebbles and in this case what turns out to be right is a directed path in this directed graph from either v or w to a free pebble so either i find one or i don't if i find one let's say from v there's some edge and then some other edge and then some other edge and eventually i find a free pebble remember free pebble is one that's floating on the inside not being used for anything so what does my picture look like remember edges are directed from the pebble so that means there was a pebblet v being used for that edge there's a pebble at this vertex being used for that edge there's a pebble at this vertex being used for that edge in this case what do i do reverse reverse them yeah just reverse all the edges so i had this edge vw here i wanted to put a pebble here so i'm going to reassign this guy to be over there this guy to be over there this guy will be over there and so on so i end up with just kind of in the way but they'll be over here the new picture is i have b and w i'm going to have left for directed edges so now this pebble got assigned to be here i can't draw left apparently the other left um this pebbles sign there this pebble the free pebble gets used up and now we've got a free pebble over here and now we can assign it to be on the edge vw so if i can find such a path from v or from w i'm happy because then i can reassign okay so if i find such a path i just shift the pebbles like that and i'm done but what if i can't this is the critical issue and it is also core to this part of the proof that we haven't discovered haven't yet done how why would we hope for pebble covers to exist in the first place we don't know i claim if this algorithm fails to find a path in this situation then you can immediately say you do not satisfy the 2k property i'd like to say there's no pebble cover but that's a little harder i'm going to say there's no you do not satisfy the 2k property and we actually know already from this part pebble cover implies 2k property the contrapositive which we've already proved is if there's if you do not satisfy the 2k property you do not have a pebble cover so that will actually guarantee correctness of the algorithm if i can prove this part that i violate the 2k property then i'll know there was no pebble cover and i'm done okay so why is this true i claim if you look at all the nodes reachable by directed paths from v and w then that is a set of nodes that induce more than 2k edges so let's say there are k nodes that you can reach i claim there will be more than 2k edges among them why it's fun to have proof in the middle of an algorithm uh so we've got so here we've got uh v and w and these are the k nodes that are reachable from v and w which means all of the other edges are pointing into this set and then over here we have every everybody else i mean it might be everyone but potentially there's some vertices over here all the edges are directed from right to left otherwise we could reach more stuff okay so what's the situation vw is uncovered there's no pebbles that cover it these edges every other edge is covered because we're there's only one uncovered edge at any moment these edges are all covered from this end that's what these directions mean which means all the pebbles in here are used to cover induced edges so all the pebbles in here are covering induced edges and yet there's one induced edge that is not covered now they're exactly 2k pebbles they're all being used i'm assuming here you never have two pebbles covering the same edge so that means there's 2k pebbles they're all used to cover induced edges which implies you have exactly 2k plus one edges plus one is vw so that means uh that means the graph that we've created so far violates the 2k property now we haven't added all the edges yet but if we add more edges it's going to get even worse potentially if we have two k plus one edges now in the actual graph we'll have at least two k plus one edges so if this search fails you know that you violate the 2k property which means you know that there's no pebble cover so that proves correctness of the algorithm now we can come back to this claim this follows by correctness of the algorithm okay why we want to prove if you have the 2k property then you have a pebble copper well if i have the 2k property this algorithm will work this case can never happen because it can only happen when you violate the 2k property so if you have the 2k property this algorithm you can keep running it you'll always find a path it'll be able to shift the pebbles and always cover things and so you get a pebble cover from the algorithm the end so that's how you that's how you argue that if you have the 2k property you get a pebble cover and it's kind of nifty without this algorithm this would be quite tricky to specify but the algorithm tells you where the violation would be tells you where you would violate the 2k property and that lets you prove the claim ultimately any questions about that this i think is kind of the heart of pebble algorithms and why they work it's the cleanest part it gets a little bit messier to do the 2k minus 3 thing so we'll move to that next maybe before we go there we can talk about the running time in the algorithm for those so inclined so the heart of the algorithm is this step search for a directed path from vow to a free pebble this is essentially some of the nodes have free pebbles those are like good nodes but basically we've got a directed graph we want to cert find all of the nodes that are reachable from v see if there's any one any good nodes that have free pebbles search from all the nodes w this you can do with the depth first search or a breadth first surgery or favorite search algorithm takes linear time order the number of vertices plus the number of edges in the graph we do this search v times why v times uh well actually y v times so we add edges one at a time uh we're hoping that we have the 2k property the 2k property implies that in particular they're at most two v edges so in general we do this e times uh we keep adding edges we'd add e edges to the graph hopefully in general e can be much larger than v in a graph e could be v squared in the worst case but this algorithm will fail by the time you add 2 k plus 1 edges because then you definitely don't satisfy the 2k property over the entire graph so in particular you won't satisfy it on some subset of vertices so you only have to you only have to run this loop v times not e times or two v times so this is a little bit smaller and so this product is uh v squared plus ve normally we write ve but this is slightly more precise which same as bellman ford algorithm if you've done taking algorithms i'll just mention that there is an algorithm slightly fancier that just requires this term so this is possible you don't need this ve part but it's kind of beside the point to our goal which is just to understand when things are rigid when things are rigid when they're not in an efficient amount of time so this is polynomial in any case this is also the best known algorithm v squared open problem is whether you can do better all right questions yeah did there are more than two b edges instead of problems yeah if there are more than two v edges oh right so there's done great you can just check in the beginning are there more than two v edges if so you do not satisfy the two the 2k property and so you can stop so that takes constant time to check those cases otherwise e is small and then you only take v squared time thanks that's cute all right so that was the 2k property uh let's do 2k minus 3. uh for the 2k minus 3 algorithm it's going to be pretty much the same as this algorithm so in particular every vertex is to attach pebbles each pebble can cover one incident edge otherwise it's free our goal is to cover every edge but it's slightly different we have to deal with this -3 business and for that we need a another claim which is that a graph has a 2k minus 3 property if and only if g plus 3 copies of an edge e has the 2k property for every edge e in g i should probably say g has so i want to know whether my ultimately i care whether my graph has a 2k minus 3 property this is most of the le man condition it's the hard part to check and 2k properties what i know how to check so i claim all you need to do to check it this would actually be an algorithm for every edge turn that single edge into four copies of the edge add three more check whether it has a 2k property remove those extra three copies take the next edge add three copies check the 2k property so with another factor of e which has to be order v so if you're willing to spend v cube time you can just run this algorithm for each edge quadruple it see whether it still has the 2k property okay so that's the connection between these two things let me prove this claim and then i'll tell you a better algorithm that only takes v squared time so which one's easier in both cases i want to take k vertices and then i'll do this direction first okay uh so how do we prove this first this is actually really easy suppose g has a 2k minus 3 property so if i have k vertices here i know that the number of edges in here is at most 2k minus 3. so here's k vertices looking at the number of induced edges it's going to be at most 2k minus 3. what i'm claiming is then if i quadruple an edge if i add three new edges i have at most 2k edges afterwards i think that's pretty clear 2k minus 3 before at most if i add 3 copies of any edge could be in this set or outside the set would be even better the number of edges inside the set will be at most 2k so this is in g this implies there's at most 2k in g plus thrice e okay this is non-standard notation by the way it just means add three copies of that edge so we'd normally draw that like this four copies of the edge okay so that was half of the claim pretty trivial the other half is almost as trivial so in the other direction we assume that g plus 3e has this property for every edge and now we need to prove that g has a 2k minus three property for every set of k vertices so we're looking at that set of k vertices we want to argue that in g there's at most two k minus three edges what we know is that in here in g plus three e for any e so it's a little awkward so let's let me start by drawing g we want to claim that the number of edges in here is at most 2k minus three so i'll put a question mark uh so um there are two possibilities here it could be either this graph is completely empty if there are no edges in here then surely they're at most two k minus three of them assuming k is it is bigger than one okay which i haven't mentioned but throughout here i need that k is bigger than one you can never have negative one edges on a sub graph so the the 2k and the 2k minus three property only hold for at least two vertices k is at least two okay uh so if there no edge is fine i'm done uh if there are edges in here then i can do this trick so there's some edge pick pick your favorite edge call it e in this subset produce out of it g plus 3e which just looks like the same thing but now it's got four copies of that edge this we know has at most 2k edges in here the original graph is exactly the same except it lacks those three edges therefore there's at most two k minus three of them done so it's really the same kind of proof in both directions just here you have to use your freedom in choosing e to choose an edge that is induced in this subgraph you can't choose some other edge out here okay question so this seems kind of cheap because we're using the graph as a linkage uh okay in the end so sort of like adding these extra edges they all sort of collapse into one ah interesting right so why this feels like cheating because from a linkage perspective this these two guys have exactly the same constraints yeah i agree it's weird uh at this point it's this is a device you can think of it as adding edges another way to think of it is this edge has to be covered by four pebbles that's probably a little more intuitive so having to cover an edge by four pebbles essentially is pinning the edge because on the one hand you have a single pebble just to say okay this is an edge and then you have three more pebbles to eat up the translations and rotations that's intuitively what's going on uh i agree this looks weird and at this point we're just playing the graph theory game and ignoring the linkages that's the short answer why this is okay uh but ultimately intuitively what's going on is that these three edges are just representing the translations of rotations being eaten and they have to be somehow eatable universally at every edge that's what this is saying i don't have a great intuition for that but it is pretty sure you do need to say for every edge not just some edge all right um so to at this point you have a polynomial time algorithm so i'm kind of done but let me briefly mention how you can make it faster uh by modifying this algorithm to do the 2k minus 3 situation dare i i won't modif i won't act literally modify the algorithm i'll write it a new version but i'm going to use that as a subroutine basically okay so algorithm 2k minus 3 version so it's going to be the same style we're going to add edges one at a time we'll direct the edges in the same way for each added edge vw so i'll just write for each added edge vw before i just tried to add the edge and cover it with pebble now i want to cover it with four pebbles i want to basically add the edge four times i'm going to write as above to mean this step so every time i add the edge i search for a directed path from v or w for free pebble when i find it i do the the pebble shift i do that four times then basically i have four pebbles on the edge or you can think of them as being four copies of the edge each has one pebble either i succeed and i get all four or i don't get all four okay on success at that point this is just a temporary measure at that point i'm going to delete three of the copies put it back to a regular single edge this frees uh three pebbles for future use so i don't want every edge to be quadrupled i just want uh i don't want them all to be quadrupled at once i want to try quadrupling one edge then try quadrupling the next edge try quadrupling the next edge but when i'm quadrupling an edge all the other edges exist as single edges so i delete the three copies and then this for loop continues and tries the next edge on failure here i'm going to say something more interesting normally on failure i'd say well you don't satisfy the 2k minor 3 property game over but you can be a little more sophisticated just say delete delete all the copies of e i guess there's four of them this whatever pebbles you could acquire you give them up delete the edge and call the edge redundant basically in this case you can argue that edge was superfluous for rigidity purposes you didn't need it so you don't the algorithm doesn't just fail it says this was a useless edge it'll tell you which edges are useful which ones are non-redundant from a rigidity standpoint and then when you're done you will be rigid if and only if the number of non-redundant edges that remain equals two n minus three so that's sort of the last part of the lemon check so this is giving you a little bit more information than just do i satisfy the 2k minus3 property to get that you just check whether you ever failed but in this case you can actually see ah these are the useless edges they're kind of those are over bracing edges everything else is useful and if i end up having enough useful edges to n minus three of them then i know uh i'm rigid otherwise i'm gonna be flexible so this gives you all the information you want with a little bit more effort you can even figure out uh if i'm flexible which parts are rigid and which parts can move relative to each other this of course generically rigid okay finally let me show you this thing in action so look over there uh this is an implementation by audrey lee st john and so here's a simple graph you can probably see this top part is flexible it's quadrilateral bottom part is over braced uh just this is in two dimensions right so just triangles would be enough but i've added a an extra edge here and this is going to check the amount condition one step at a time so we start with two pebbles everywhere we start by adding that top edge right now there are four pebbles on that edge so it's great i can just add the edge let's say uh i added it four times there are four pebbles there but then in the end i just need one so let's skip that step and now i've got the one pebble from b and we're happy okay so that is its own rigid component next let's add this edge ef so this also has four pebbles on it so we're done next we have cd that also has you can change the order if you think this one's a little trivial now is when the action happens let's add this edge bc so currently it is only covered by three pebbles but we need a fourth so we're going to take one of these free pebbles on a and move it along b we found that by starting from b and searching out and finding a free pebble so we just flip that edge now we've got a free pebble on b now we've got four pebbles on bc and we can add the edge okay but we only actually take one of them so i'm kind of skipping the part where we add the four copies and immediately remove three of them because that's kind of silly cool so that's its own rigid component it turns out each of these things is independently each the colors represent rigid components and right now nothing is tied together everything's flexible flexible at b flexible at c okay let's add this diagonal df uh so right now it only has one pebble which means we need we need four pebbles so we're actually going to have we're going to have to get one at f we're going to have to get one at d because there can only be two at each so first we'll do i guess a search from d and we immediately find a pebble we move it down there great then we search from f we find a pebble there we move it boom we've got a we've got our edge had all four pebbles okay eventually we're going to run out of pebbles but right now we're very flexible okay let's add this other diagonal this should also be possible right now there's one pebble at e1 pebble at c uh we've gotta find two more pebbles so first we'll follow this edge find a free pebble at f that was easy next we'll look at from c there's only one way we can go from c we can't follow the back edge got to go forward got a pebble at d we flip it around now we've got four pebbles on c and e so we can add the edge okay uh let's add ef right now we've only got one pebble yet we need four so let's start by searching from a oh we found a pebble immediately and generally we'll have to follow many edges uh so there's a from f uh there were two ways we could go either one of them would have given us a pebble let's flip the yellow edge boom we've got f uh one pebble but we need another one now we cannot get another pebble from e because we just flipped the edge but we can get a pebble from d so we flip that edge and now we can add the edge af two more edges that's a little tedious so next is cf running out of pebbles here we there's only uh like five pebbles total in the system we need four of them right here so because we're getting almost rigid so let's see we've got cf let's start from searching from f there's only one way we can go we find a pebble we flip it around now we've got c c there's only one way to go from c we find the pebble at e and we flip it around now we've got the two pebbles cool so we've got the three pebbles here which are representing our translations and rotations the only other pebble left is this one which is basically representing the degree of freedom in this quadrilateral so when we go to add the last edge which is so at this point this is a rigid component because of the triangles um when we go to add the last edge we will fail to find enough pebbles uh let's see we can find three of them we can grab the one from e or let's see so all right it's not going to show us but from e we can grab f the pebble at f from d we can grab the pebble at c from d we can grab the other pebble at f we've got three pebbles but there's no way to get to this pebble because both of these edges are directed down so you can never get from the below part to the above part so it's not obvious that this is working that's what the proof was for but at least you see it in action i'll just run it very quickly for another graph uh let's say a big one this one is minimally generically rigid so it's kind of fun to watch for a while you get pebbles moving around in this case you have some longer paths you have to follow to get enough pebbles it depends a lot on the insertion order that you use so but in each case you need four pebbles two on each side and if so you can add your edge otherwise you can't what i haven't described is this color coding which is figuring out when you have rigid components uh roughly speaking to find what your what your rigid component is if you're an edge you want to know what rigid component am i in you basically just search for all the vertices that are reachable from your edge those are all in your rigid component that's sort of what we saw so this graph happens to be minimally rigid and it detects that but then it can be a little bit more as in your original component some of the incoming edges if let's see draw a picture so here's everything you can reach from vw and say you're following an incoming edge here from some other vertex u and then suppose these are all the things that you can reach from you if there are zero pebbles out here then this whole thing is a rigid component and you just keep doing that you check an incoming edge if there's zero pebbles in that reachable piece then you merge and you keep doing that those are all the things that are rigidly attached to you so i won't prove that it's a little tricky to prove but it's fairly easy to compute and you can actually do it in the same amount of time as you're building this thing up you can do the color coding to figure out which things are in the same component which things are in different components let's see so another fun fact is this little part this says it's the 2k minus 3 property the same algorithm you can use to check 5k minus 27 or whatever you want for fixed numbers like 2 and 3 uh the same pebble algorithm uh can can detect that uh a k minus b property and that's actually useful for a lot of different things this is done originally by uh lee and stranu same lee and strainer we'll we'll be seeing some of her results in a couple of classes as well for example so this is that 3d body and bar so actually let me show you the kind of scenario we're thinking about so i mentioned 3d if we have vertices and bars between them we don't know how to characterize generic rigidity but a slightly different problem which is 3d bodies these are polyhedra and they have bars connected between them this we know how to solve in 3d and in any dimension uh and so this is a a picture of not only having so their bodies the bodies can spin unlike vertices vertices can't rotate nothing happens when you rotate a vertex bodies have this extra degree of freedom and uh if you so there are two things we're allowing here one is to add a hinge between two bodies and the other is to add bars connecting them from various random points and it's generic so these points will never coincide i think that's what makes this different from a vertex vertex bars always coincide here they all just attach to generic points so it turns out you can simulate a hinge by five bars they're equivalent so both of these can be captured by 6k minus 6 property turns out these things will be generically rigid if and only if you satisfy the 6k minus 6 property and you have exactly 6k minus 6 bars and this is proved by sort of two or three people uh i mean you need to add two results together uh one from the 90s and one from much older i think in graph theory but in particular tay was involved from 1984 and it's funny the paper starts out with you ask any structural engineer if you have two bodies how many bars do you have to add to rigidify them they will say six like okay i didn't know that but six is the right answer and that's why the 6k minus six basically and we can use this pebble algorithm to solve that for free basically and this is actually implemented here in the same kind of software i'll just run it quickly because there's a lot of pebbles every vertex has six pebbles you just keep going can you you need to cover every edge with uh how many pebbles before it was four so now it should be seven i believe one more than the then the six here so 6k minus six anyway this this graph while it's not obvious is minimally rigid in this world and it corresponds exactly to uh the left example it's hard to see because uh we've replaced the hinges here by six bars so that's why we got all the six all the duplicated edges here you see the duplicated edges are different from a rigidity standpoint because having three edges between the same pair of objects is no longer just the same as having one edge because they attach to different points each one can spin these are universal joints by the way so they can these bars can rotate around the body the body can spin lots of things can happen but this is enough to rigidify it so our question cool okay i'm not going to prove that you couldn't read the papers if you're interested but it's interesting bodies and bars are so much easier than other things one other thing you can do is called angular rigidity this is a fairly new result by the same people if you have a bunch of lines in 3d and you have angular constraints in this case every triple of these lines has an angular constraint that it must be equal to alpha that's what's drawn on the spherical picture over here we have two bodies so here we have lines here we have bodies and there are three constraints that fix the angles between these how the angles meet at these bodies and the claim is that both of these are angularly rigid meaning things can still kind of slide up and down but the angles are all fixed and you can test this again this case actually turns out it's the 2k minus 3 property again same as lemon this one i've forgotten have to check i think it's 3k minus 3. yep 3k minus 3. so cool things one last question uh connected bananas so uh there were this there's this three banana example or two banana example getting ahead of myself uh which was kind of weird you had this one banana on the left one banana on the right and there's this sort of implicit implied hinge as they call it between the two points the whole thing is flexible but if you check it it satisfies the lemon condition it satisfies three k minus six which is the what it should be for 3d rigidity this is in 3d now this graph is seems triv i mean it seems easy to figure out that this is flexible because there's a two cut there are two vertices you can remove that disconnect the graph into two pieces so if you could just subdivide do the left part separately from the right part uh you should be able to figure this out unfortunately this example can be made more connected and that's what the question was so this is an old example by henry crapo a modification by walter whiteley is that if you add a single point here and attach it to those two points sorry those three points this will be three connected still be flexible and still satisfy le mans because we added three edges in one vertex so that still satisfies lemon so that kind of sucks we think oh maybe four connected well you can make it four connected too uh by adding a triangle in the center and connecting these six adding these six connections uh well what about five connected well five connected you can also do and this is an example called the banana spider uh although it seems a bit of a misnomer should be but i guess banana spiders are actual object actual species this really should be a banana insect because this guy has six legs three on the left three on the right uh so there's an octahedron in the center and then you add these three connections and you can actually prove that any graph you have any example that's maybe only one or two or three connected whatever you can make it five connected by whenever you have two four connected components or five connected components i guess uh just add a spider in the middle to bridge them and it will be as flexible as before and it will still satisfy le mans so five connectivity doesn't buy you anything unfortunately uh i guess you could ask for six connectivity but it's a six connectivity i think is impossible because you only have three n minus six edges so uh that's that's the limit so sadly connectivity is not the right doesn't bias anything and that's what we know about vertex and bar structures in 3d sadly tough open problem any questions all right that's it for today 2 00:00:03,909 --> 00:00:08,150 all right so lecture 11 was about uh generic rigidity of linkages so we've got bars and vertices connected together in a graph and generically the graph is all that matters and we characterize in two ways henneberg construction and le mans uh when graphs are generically rigid and in particular there was this pebble algorithm that was supposed to tell you in polynomial time whether your graph is lemon or not and everyone pretty much asked about this about the details including myself when i watched it like that seems a little sketchy so i thought i'd spend most of today going through how that algorithm works exactly and also why it's correct which is definitely not obvious it kind of vaguely feels correct but we'll see why it actually is remember le mans theorem the le mans characterization is that your graph is generically rigid if and only if every subgraph let's say every k vertices induces at most 2k minus 3 edges that's part 1 and you also need that the number of edges overall in the graph is uh 2 n minus 3 where n is the total number of vertices so this was just the degree of freedom count you have 2n degrees of freedom for every vertex minus 3 for the rigid motions 2 translations 1 rotation so that's the number of edges you should have total and then sorry this is for minimally generically rigid and then to make it balance you want to guarantee that every k vertices doesn't have too many edges because if it had too many edges there'd be too few somewhere else this part would be over brace some other part would be under braced and you'd be flexible that's the intuition and so the the tricky part comes down to how do you check whether every k vertices induces two k minus three edges uh because there are exponentially many choices there's two to the n different choices of subsets of vertices for each of them you'd have to check that's no good so the algorithm wants to check this and i'm going to call this property the 2k minus 3 property and we're going to warm up with a simpler problem which is to check the 2k property without the minus 3. so 2k property is just every k vertices induce at most 2k edges so this will be a little easier to think about more or less the same a lot easier to argue about and then we'll see how to modify the algorithm to check the 2k minus 3 property was the property clear and in particular inducing inducing means that you have some set of vertices and there's the rest of the vertices n minus k of them you only look at edges where both endpoints are in the set both of them are among the k vertices so you ignore you ignore vertices that have one end and k and the other end outside and you ignore obviously edges that have both ends outside just count these guys okay so uh how do we do this let me give you the algorithm actually uh let me first give you the idea of the algorithm before we go to the actual algorithm and this is sort of review but pretty soon we'll get to stuff that wasn't covered in lecture so the idea is uh every vertex has two pebbles inside of it which i'll draw as two red dots and they can cover incident edges so they can't move very far they have to stay basically on inside or on the boundary of the vertex that's how i'm going to draw it each pebble can cover one incident edge so for example uh there's a little graph uh i could take uh let's maybe i leave one of the pebbles in the middle i can move one of the pebbles to cover one of the edges so i'll put it at this intersection to denote it's covering this edge but it still belongs to this vertex pebbles cannot change vertices they have to stay kind of local these two pebbles could just stay where they are here we could you put one pebble here another pebble there one pebble here one pebble here this is what i call a pebble cover because every edge is covered by some pebble and that's sort of the the goal and a pebble cover is to cover every edge you only need to cover it once and the pebbles can either cover an edge uh or they can be free i'm free if they're just hanging out in the inside here not being used for anything okay so our goal is to find pebble covers but the first claim why do i care about pebble covers i claim that having a pebble cover is equivalent to the 2k property so that's what i want to show so let's start with that this is sort of why everything is working a graph has the 2k property if and only if it has a pebble cover so that's why we care about these pebble coverings this is actually pretty easy to prove and gives a lot of intuition for why everything works here so let's start with the left direction so suppose i have a pebble cover suppose somehow i've achieved this property covering all the edges using only two pebbles per vertex i claim that we then satisfy the 2k property 2k property says you take any k vertices you induce at most two key edges so let's consider k vertices if someone chooses k vertices it doesn't matter which this should hold for all of them for all choices uh so we've got you know k vertices here n minus k vertices remaining we claim that the number of edges induced by those k vertices is at most 2k so look at one of these edges that's wholly inside that's induced by these k vertices uh when we i claim well that edge must be covered by a pebble which pebble well either this one or one on the other side but the point is it is covered by a pebble among these vertices so there my concern is well you know maybe you worry about an edge like this it has uh or maybe you know if you worry about a pebble here that's covering this edge but that edge is not one of the induced edges so these these vertices are irrelevant it's just the pebbles inside uh the just among these 2k pebbles so in here there are 2k pebbles they must fully cover the induced subgraph they must cover all the edges in here that means they're at most 2k edges because there's one pebble per edge at least okay so there's two k pebbles in here this means they're at most 2k induced edges clear that's sort of the obvious direction this doesn't really exploit very much about pebbles the other direction is a little more interesting why should these pebble covers exist because they seem pretty constrained pebbles can't move very far it's not really clearly the same but it is so if we have the 2k property so now we know that every subgraph of k vertices uh induces at most 2k edges now we want to prove that a pebble cover exists this uh i'm going to wait okay it will become obvious momentarily this is kind of fun sometimes it's easier to prove a theorem than it is to come up with an algorithm but in this case it's easier to come up with an algorithm than it is to prove the theorem and you can use the algorithm itself to prove the theorem so i'm going to prove this in a moment stay tuned meanwhile we have an algorithm so algorithm is an example of what we call an incremental style algorithm where you imagine starting with the empty graph and then you put in all the edges that belong one at a time so add edges one at a time starting from nothing one detail is we're going to imagine as edges get added we want to direct them we're going to direct edges from the pebble that covers them to the other side so if we have an edge and we have a pebble over here then i'm going to imagine the edge is being directed from the pebble to the other side that's just for convenience for expressing the algorithm in a moment okay so now uh so this is for the 2k property we'll get to an algorithm for 2k minus 3 in a little bit so now we have a for loop over the edges we're going to add and when i um immediately add an edge it will not be covered so it's sort of not directed just some edge vw i would like to put a pebble here but it could be both pebbles at w are occupied for some other edges could be some uh the pebbles for vr also occupy for some other edges that would be annoying i want to somehow reassign a pebble to cover this edge so what i'm going to do inside this for loop is search for available pebbles and in this case what turns out to be right is a directed path in this directed graph from either v or w to a free pebble so either i find one or i don't if i find one let's say from v there's some edge and then some other edge and then some other edge and eventually i find a free pebble remember free pebble is one that's floating on the inside not being used for anything so what does my picture look like remember edges are directed from the pebble so that means there was a pebblet v being used for that edge there's a pebble at this vertex being used for that edge there's a pebble at this vertex being used for that edge in this case what do i do reverse reverse them yeah just reverse all the edges so i had this edge vw here i wanted to put a pebble here so i'm going to reassign this guy to be over there this guy to be over there this guy will be over there and so on so i end up with just kind of in the way but they'll be over here the new picture is i have b and w i'm going to have left for directed edges so now this pebble got assigned to be here i can't draw left apparently the other left um this pebbles sign there this pebble the free pebble gets used up and now we've got a free pebble over here and now we can assign it to be on the edge vw so if i can find such a path from v or from w i'm happy because then i can reassign okay so if i find such a path i just shift the pebbles like that and i'm done but what if i can't this is the critical issue and it is also core to this part of the proof that we haven't discovered haven't yet done how why would we hope for pebble covers to exist in the first place we don't know i claim if this algorithm fails to find a path in this situation then you can immediately say you do not satisfy the 2k property i'd like to say there's no pebble cover but that's a little harder i'm going to say there's no you do not satisfy the 2k property and we actually know already from this part pebble cover implies 2k property the contrapositive which we've already proved is if there's if you do not satisfy the 2k property you do not have a pebble cover so that will actually guarantee correctness of the algorithm if i can prove this part that i violate the 2k property then i'll know there was no pebble cover and i'm done okay so why is this true i claim if you look at all the nodes reachable by directed paths from v and w then that is a set of nodes that induce more than 2k edges so let's say there are k nodes that you can reach i claim there will be more than 2k edges among them why it's fun to have proof in the middle of an algorithm uh so we've got so here we've got uh v and w and these are the k nodes that are reachable from v and w which means all of the other edges are pointing into this set and then over here we have every everybody else i mean it might be everyone but potentially there's some vertices over here all the edges are directed from right to left otherwise we could reach more stuff okay so what's the situation vw is uncovered there's no pebbles that cover it these edges every other edge is covered because we're there's only one uncovered edge at any moment these edges are all covered from this end that's what these directions mean which means all the pebbles in here are used to cover induced edges so all the pebbles in here are covering induced edges and yet there's one induced edge that is not covered now they're exactly 2k pebbles they're all being used i'm assuming here you never have two pebbles covering the same edge so that means there's 2k pebbles they're all used to cover induced edges which implies you have exactly 2k plus one edges plus one is vw so that means uh that means the graph that we've created so far violates the 2k property now we haven't added all the edges yet but if we add more edges it's going to get even worse potentially if we have two k plus one edges now in the actual graph we'll have at least two k plus one edges so if this search fails you know that you violate the 2k property which means you know that there's no pebble cover so that proves correctness of the algorithm now we can come back to this claim this follows by correctness of the algorithm okay why we want to prove if you have the 2k property then you have a pebble copper well if i have the 2k property this algorithm will work this case can never happen because it can only happen when you violate the 2k property so if you have the 2k property this algorithm you can keep running it you'll always find a path it'll be able to shift the pebbles and always cover things and so you get a pebble cover from the algorithm the end so that's how you that's how you argue that if you have the 2k property you get a pebble cover and it's kind of nifty without this algorithm this would be quite tricky to specify but the algorithm tells you where the violation would be tells you where you would violate the 2k property and that lets you prove the claim ultimately any questions about that this i think is kind of the heart of pebble algorithms and why they work it's the cleanest part it gets a little bit messier to do the 2k minus 3 thing so we'll move to that next maybe before we go there we can talk about the running time in the algorithm for those so inclined so the heart of the algorithm is this step search for a directed path from vow to a free pebble this is essentially some of the nodes have free pebbles those are like good nodes but basically we've got a directed graph we want to cert find all of the nodes that are reachable from v see if there's any one any good nodes that have free pebbles search from all the nodes w this you can do with the depth first search or a breadth first surgery or favorite search algorithm takes linear time order the number of vertices plus the number of edges in the graph we do this search v times why v times uh well actually y v times so we add edges one at a time uh we're hoping that we have the 2k property the 2k property implies that in particular they're at most two v edges so in general we do this e times uh we keep adding edges we'd add e edges to the graph hopefully in general e can be much larger than v in a graph e could be v squared in the worst case but this algorithm will fail by the time you add 2 k plus 1 edges because then you definitely don't satisfy the 2k property over the entire graph so in particular you won't satisfy it on some subset of vertices so you only have to you only have to run this loop v times not e times or two v times so this is a little bit smaller and so this product is uh v squared plus ve normally we write ve but this is slightly more precise which same as bellman ford algorithm if you've done taking algorithms i'll just mention that there is an algorithm slightly fancier that just requires this term so this is possible you don't need this ve part but it's kind of beside the point to our goal which is just to understand when things are rigid when things are rigid when they're not in an efficient amount of time so this is polynomial in any case this is also the best known algorithm v squared open problem is whether you can do better all right questions yeah did there are more than two b edges instead of problems yeah if there are more than two v edges oh right so there's done great you can just check in the beginning are there more than two v edges if so you do not satisfy the two the 2k property and so you can stop so that takes constant time to check those cases otherwise e is small and then you only take v squared time thanks that's cute all right so that was the 2k property uh let's do 2k minus 3. uh for the 2k minus 3 algorithm it's going to be pretty much the same as this algorithm so in particular every vertex is to attach pebbles each pebble can cover one incident edge otherwise it's free our goal is to cover every edge but it's slightly different we have to deal with this -3 business and for that we need a another claim which is that a graph has a 2k minus 3 property if and only if g plus 3 copies of an edge e has the 2k property for every edge e in g i should probably say g has so i want to know whether my ultimately i care whether my graph has a 2k minus 3 property this is most of the le man condition it's the hard part to check and 2k properties what i know how to check so i claim all you need to do to check it this would actually be an algorithm for every edge turn that single edge into four copies of the edge add three more check whether it has a 2k property remove those extra three copies take the next edge add three copies check the 2k property so with another factor of e which has to be order v so if you're willing to spend v cube time you can just run this algorithm for each edge quadruple it see whether it still has the 2k property okay so that's the connection between these two things let me prove this claim and then i'll tell you a better algorithm that only takes v squared time so which one's easier in both cases i want to take k vertices and then i'll do this direction first okay uh so how do we prove this first this is actually really easy suppose g has a 2k minus 3 property so if i have k vertices here i know that the number of edges in here is at most 2k minus 3. so here's k vertices looking at the number of induced edges it's going to be at most 2k minus 3. what i'm claiming is then if i quadruple an edge if i add three new edges i have at most 2k edges afterwards i think that's pretty clear 2k minus 3 before at most if i add 3 copies of any edge could be in this set or outside the set would be even better the number of edges inside the set will be at most 2k so this is in g this implies there's at most 2k in g plus thrice e okay this is non-standard notation by the way it just means add three copies of that edge so we'd normally draw that like this four copies of the edge okay so that was half of the claim pretty trivial the other half is almost as trivial so in the other direction we assume that g plus 3e has this property for every edge and now we need to prove that g has a 2k minus three property for every set of k vertices so we're looking at that set of k vertices we want to argue that in g there's at most two k minus three edges what we know is that in here in g plus three e for any e so it's a little awkward so let's let me start by drawing g we want to claim that the number of edges in here is at most 2k minus three so i'll put a question mark uh so um there are two possibilities here it could be either this graph is completely empty if there are no edges in here then surely they're at most two k minus three of them assuming k is it is bigger than one okay which i haven't mentioned but throughout here i need that k is bigger than one you can never have negative one edges on a sub graph so the the 2k and the 2k minus three property only hold for at least two vertices k is at least two okay uh so if there no edge is fine i'm done uh if there are edges in here then i can do this trick so there's some edge pick pick your favorite edge call it e in this subset produce out of it g plus 3e which just looks like the same thing but now it's got four copies of that edge this we know has at most 2k edges in here the original graph is exactly the same except it lacks those three edges therefore there's at most two k minus three of them done so it's really the same kind of proof in both directions just here you have to use your freedom in choosing e to choose an edge that is induced in this subgraph you can't choose some other edge out here okay question so this seems kind of cheap because we're using the graph as a linkage uh okay in the end so sort of like adding these extra edges they all sort of collapse into one ah interesting right so why this feels like cheating because from a linkage perspective this these two guys have exactly the same constraints yeah i agree it's weird uh at this point it's this is a device you can think of it as adding edges another way to think of it is this edge has to be covered by four pebbles that's probably a little more intuitive so having to cover an edge by four pebbles essentially is pinning the edge because on the one hand you have a single pebble just to say okay this is an edge and then you have three more pebbles to eat up the translations and rotations that's intuitively what's going on uh i agree this looks weird and at this point we're just playing the graph theory game and ignoring the linkages that's the short answer why this is okay uh but ultimately intuitively what's going on is that these three edges are just representing the translations of rotations being eaten and they have to be somehow eatable universally at every edge that's what this is saying i don't have a great intuition for that but it is pretty sure you do need to say for every edge not just some edge all right um so to at this point you have a polynomial time algorithm so i'm kind of done but let me briefly mention how you can make it faster uh by modifying this algorithm to do the 2k minus 3 situation dare i i won't modif i won't act literally modify the algorithm i'll write it a new version but i'm going to use that as a subroutine basically okay so algorithm 2k minus 3 version so it's going to be the same style we're going to add edges one at a time we'll direct the edges in the same way for each added edge vw so i'll just write for each added edge vw before i just tried to add the edge and cover it with pebble now i want to cover it with four pebbles i want to basically add the edge four times i'm going to write as above to mean this step so every time i add the edge i search for a directed path from v or w for free pebble when i find it i do the the pebble shift i do that four times then basically i have four pebbles on the edge or you can think of them as being four copies of the edge each has one pebble either i succeed and i get all four or i don't get all four okay on success at that point this is just a temporary measure at that point i'm going to delete three of the copies put it back to a regular single edge this frees uh three pebbles for future use so i don't want every edge to be quadrupled i just want uh i don't want them all to be quadrupled at once i want to try quadrupling one edge then try quadrupling the next edge try quadrupling the next edge but when i'm quadrupling an edge all the other edges exist as single edges so i delete the three copies and then this for loop continues and tries the next edge on failure here i'm going to say something more interesting normally on failure i'd say well you don't satisfy the 2k minor 3 property game over but you can be a little more sophisticated just say delete delete all the copies of e i guess there's four of them this whatever pebbles you could acquire you give them up delete the edge and call the edge redundant basically in this case you can argue that edge was superfluous for rigidity purposes you didn't need it so you don't the algorithm doesn't just fail it says this was a useless edge it'll tell you which edges are useful which ones are non-redundant from a rigidity standpoint and then when you're done you will be rigid if and only if the number of non-redundant edges that remain equals two n minus three so that's sort of the last part of the lemon check so this is giving you a little bit more information than just do i satisfy the 2k minus3 property to get that you just check whether you ever failed but in this case you can actually see ah these are the useless edges they're kind of those are over bracing edges everything else is useful and if i end up having enough useful edges to n minus three of them then i know uh i'm rigid otherwise i'm gonna be flexible so this gives you all the information you want with a little bit more effort you can even figure out uh if i'm flexible which parts are rigid and which parts can move relative to each other this of course generically rigid okay finally let me show you this thing in action so look over there uh this is an implementation by audrey lee st john and so here's a simple graph you can probably see this top part is flexible it's quadrilateral bottom part is over braced uh just this is in two dimensions right so just triangles would be enough but i've added a an extra edge here and this is going to check the amount condition one step at a time so we start with two pebbles everywhere we start by adding that top edge right now there are four pebbles on that edge so it's great i can just add the edge let's say uh i added it four times there are four pebbles there but then in the end i just need one so let's skip that step and now i've got the one pebble from b and we're happy okay so that is its own rigid component next let's add this edge ef so this also has four pebbles on it so we're done next we have cd that also has you can change the order if you think this one's a little trivial now is when the action happens let's add this edge bc so currently it is only covered by three pebbles but we need a fourth so we're going to take one of these free pebbles on a and move it along b we found that by starting from b and searching out and finding a free pebble so we just flip that edge now we've got a free pebble on b now we've got four pebbles on bc and we can add the edge okay but we only actually take one of them so i'm kind of skipping the part where we add the four copies and immediately remove three of them because that's kind of silly cool so that's its own rigid component it turns out each of these things is independently each the colors represent rigid components and right now nothing is tied together everything's flexible flexible at b flexible at c okay let's add this diagonal df uh so right now it only has one pebble which means we need we need four pebbles so we're actually going to have we're going to have to get one at f we're going to have to get one at d because there can only be two at each so first we'll do i guess a search from d and we immediately find a pebble we move it down there great then we search from f we find a pebble there we move it boom we've got a we've got our edge had all four pebbles okay eventually we're going to run out of pebbles but right now we're very flexible okay let's add this other diagonal this should also be possible right now there's one pebble at e1 pebble at c uh we've gotta find two more pebbles so first we'll follow this edge find a free pebble at f that was easy next we'll look at from c there's only one way we can go from c we can't follow the back edge got to go forward got a pebble at d we flip it around now we've got four pebbles on c and e so we can add the edge okay uh let's add ef right now we've only got one pebble yet we need four so let's start by searching from a oh we found a pebble immediately and generally we'll have to follow many edges uh so there's a from f uh there were two ways we could go either one of them would have given us a pebble let's flip the yellow edge boom we've got f uh one pebble but we need another one now we cannot get another pebble from e because we just flipped the edge but we can get a pebble from d so we flip that edge and now we can add the edge af two more edges that's a little tedious so next is cf running out of pebbles here we there's only uh like five pebbles total in the system we need four of them right here so because we're getting almost rigid so let's see we've got cf let's start from searching from f there's only one way we can go we find a pebble we flip it around now we've got c c there's only one way to go from c we find the pebble at e and we flip it around now we've got the two pebbles cool so we've got the three pebbles here which are representing our translations and rotations the only other pebble left is this one which is basically representing the degree of freedom in this quadrilateral so when we go to add the last edge which is so at this point this is a rigid component because of the triangles um when we go to add the last edge we will fail to find enough pebbles uh let's see we can find three of them we can grab the one from e or let's see so all right it's not going to show us but from e we can grab f the pebble at f from d we can grab the pebble at c from d we can grab the other pebble at f we've got three pebbles but there's no way to get to this pebble because both of these edges are directed down so you can never get from the below part to the above part so it's not obvious that this is working that's what the proof was for but at least you see it in action i'll just run it very quickly for another graph uh let's say a big one this one is minimally generically rigid so it's kind of fun to watch for a while you get pebbles moving around in this case you have some longer paths you have to follow to get enough pebbles it depends a lot on the insertion order that you use so but in each case you need four pebbles two on each side and if so you can add your edge otherwise you can't what i haven't described is this color coding which is figuring out when you have rigid components uh roughly speaking to find what your what your rigid component is if you're an edge you want to know what rigid component am i in you basically just search for all the vertices that are reachable from your edge those are all in your rigid component that's sort of what we saw so this graph happens to be minimally rigid and it detects that but then it can be a little bit more as in your original component some of the incoming edges if let's see draw a picture so here's everything you can reach from vw and say you're following an incoming edge here from some other vertex u and then suppose these are all the things that you can reach from you if there are zero pebbles out here then this whole thing is a rigid component and you just keep doing that you check an incoming edge if there's zero pebbles in that reachable piece then you merge and you keep doing that those are all the things that are rigidly attached to you so i won't prove that it's a little tricky to prove but it's fairly easy to compute and you can actually do it in the same amount of time as you're building this thing up you can do the color coding to figure out which things are in the same component which things are in different components let's see so another fun fact is this little part this says it's the 2k minus 3 property the same algorithm you can use to check 5k minus 27 or whatever you want for fixed numbers like 2 and 3 uh the same pebble algorithm uh can can detect that uh a k minus b property and that's actually useful for a lot of different things this is done originally by uh lee and stranu same lee and strainer we'll we'll be seeing some of her results in a couple of classes as well for example so this is that 3d body and bar so actually let me show you the kind of scenario we're thinking about so i mentioned 3d if we have vertices and bars between them we don't know how to characterize generic rigidity but a slightly different problem which is 3d bodies these are polyhedra and they have bars connected between them this we know how to solve in 3d and in any dimension uh and so this is a a picture of not only having so their bodies the bodies can spin unlike vertices vertices can't rotate nothing happens when you rotate a vertex bodies have this extra degree of freedom and uh if you so there are two things we're allowing here one is to add a hinge between two bodies and the other is to add bars connecting them from various random points and it's generic so these points will never coincide i think that's what makes this different from a vertex vertex bars always coincide here they all just attach to generic points so it turns out you can simulate a hinge by five bars they're equivalent so both of these can be captured by 6k minus 6 property turns out these things will be generically rigid if and only if you satisfy the 6k minus 6 property and you have exactly 6k minus 6 bars and this is proved by sort of two or three people uh i mean you need to add two results together uh one from the 90s and one from much older i think in graph theory but in particular tay was involved from 1984 and it's funny the paper starts out with you ask any structural engineer if you have two bodies how many bars do you have to add to rigidify them they will say six like okay i didn't know that but six is the right answer and that's why the 6k minus six basically and we can use this pebble algorithm to solve that for free basically and this is actually implemented here in the same kind of software i'll just run it quickly because there's a lot of pebbles every vertex has six pebbles you just keep going can you you need to cover every edge with uh how many pebbles before it was four so now it should be seven i believe one more than the then the six here so 6k minus six anyway this this graph while it's not obvious is minimally rigid in this world and it corresponds exactly to uh the left example it's hard to see because uh we've replaced the hinges here by six bars so that's why we got all the six all the duplicated edges here you see the duplicated edges are different from a rigidity standpoint because having three edges between the same pair of objects is no longer just the same as having one edge because they attach to different points each one can spin these are universal joints by the way so they can these bars can rotate around the body the body can spin lots of things can happen but this is enough to rigidify it so our question cool okay i'm not going to prove that you couldn't read the papers if you're interested but it's interesting bodies and bars are so much easier than other things one other thing you can do is called angular rigidity this is a fairly new result by the same people if you have a bunch of lines in 3d and you have angular constraints in this case every triple of these lines has an angular constraint that it must be equal to alpha that's what's drawn on the spherical picture over here we have two bodies so here we have lines here we have bodies and there are three constraints that fix the angles between these how the angles meet at these bodies and the claim is that both of these are angularly rigid meaning things can still kind of slide up and down but the angles are all fixed and you can test this again this case actually turns out it's the 2k minus 3 property again same as lemon this one i've forgotten have to check i think it's 3k minus 3. yep 3k minus 3. so cool things one last question uh connected bananas so uh there were this there's this three banana example or two banana example getting ahead of myself uh which was kind of weird you had this one banana on the left one banana on the right and there's this sort of implicit implied hinge as they call it between the two points the whole thing is flexible but if you check it it satisfies the lemon condition it satisfies three k minus six which is the what it should be for 3d rigidity this is in 3d now this graph is seems triv i mean it seems easy to figure out that this is flexible because there's a two cut there are two vertices you can remove that disconnect the graph into two pieces so if you could just subdivide do the left part separately from the right part uh you should be able to figure this out unfortunately this example can be made more connected and that's what the question was so this is an old example by henry crapo a modification by walter whiteley is that if you add a single point here and attach it to those two points sorry those three points this will be three connected still be flexible and still satisfy le mans because we added three edges in one vertex so that still satisfies lemon so that kind of sucks we think oh maybe four connected well you can make it four connected too uh by adding a triangle in the center and connecting these six adding these six connections uh well what about five connected well five connected you can also do and this is an example called the banana spider uh although it seems a bit of a misnomer should be but i guess banana spiders are actual object actual species this really should be a banana insect because this guy has six legs three on the left three on the right uh so there's an octahedron in the center and then you add these three connections and you can actually prove that any graph you have any example that's maybe only one or two or three connected whatever you can make it five connected by whenever you have two four connected components or five connected components i guess uh just add a spider in the middle to bridge them and it will be as flexible as before and it will still satisfy le mans so five connectivity doesn't buy you anything unfortunately uh i guess you could ask for six connectivity but it's a six connectivity i think is impossible because you only have three n minus six edges so uh that's that's the limit so sadly connectivity is not the right doesn't bias anything and that's what we know about vertex and bar structures in 3d sadly tough open problem any questions all right that's it for today 3 00:00:08,150 --> 00:00:11,589 4 00:00:11,589 --> 00:00:14,310 5 00:00:14,310 --> 00:00:15,910 6 00:00:15,910 --> 00:00:15,920 7 00:00:15,920 --> 00:00:16,870 8 00:00:16,870 --> 00:00:18,950 9 00:00:18,950 --> 00:00:20,150 10 00:00:20,150 --> 00:00:23,670 11 00:00:23,670 --> 00:00:24,950 12 00:00:24,950 --> 00:00:26,470 13 00:00:26,470 --> 00:00:27,990 14 00:00:27,990 --> 00:00:30,070 15 00:00:30,070 --> 00:00:31,509 16 00:00:31,509 --> 00:00:33,990 17 00:00:33,990 --> 00:00:35,830 18 00:00:35,830 --> 00:00:36,790 19 00:00:36,790 --> 00:00:39,190 20 00:00:39,190 --> 00:00:40,790 21 00:00:40,790 --> 00:00:40,800 22 00:00:40,800 --> 00:00:41,750 23 00:00:41,750 --> 00:00:43,990 24 00:00:43,990 --> 00:00:45,190 25 00:00:45,190 --> 00:00:47,670 26 00:00:47,670 --> 00:00:49,750 27 00:00:49,750 --> 00:00:53,910 28 00:00:53,910 --> 00:00:59,910 29 00:00:59,910 --> 00:01:02,549 30 00:01:02,549 --> 00:01:04,310 31 00:01:04,310 --> 00:01:10,710 32 00:01:10,710 --> 00:01:17,190 33 00:01:17,190 --> 00:01:24,830 34 00:01:24,830 --> 00:01:24,840 35 00:01:24,840 --> 00:01:26,950 36 00:01:26,950 --> 00:01:32,469 37 00:01:32,469 --> 00:01:35,030 38 00:01:35,030 --> 00:01:36,870 39 00:01:36,870 --> 00:01:40,710 40 00:01:40,710 --> 00:01:43,749 41 00:01:43,749 --> 00:01:45,510 42 00:01:45,510 --> 00:01:47,109 43 00:01:47,109 --> 00:01:49,590 44 00:01:49,590 --> 00:01:51,590 45 00:01:51,590 --> 00:01:51,600 46 00:01:51,600 --> 00:01:52,149 47 00:01:52,149 --> 00:01:54,310 48 00:01:54,310 --> 00:01:56,149 49 00:01:56,149 --> 00:01:58,069 50 00:01:58,069 --> 00:02:02,230 51 00:02:02,230 --> 00:02:05,670 52 00:02:05,670 --> 00:02:07,590 53 00:02:07,590 --> 00:02:09,830 54 00:02:09,830 --> 00:02:11,110 55 00:02:11,110 --> 00:02:12,550 56 00:02:12,550 --> 00:02:14,070 57 00:02:14,070 --> 00:02:15,430 58 00:02:15,430 --> 00:02:15,440 59 00:02:15,440 --> 00:02:16,390 60 00:02:16,390 --> 00:02:20,070 61 00:02:20,070 --> 00:02:23,030 62 00:02:23,030 --> 00:02:23,750 63 00:02:23,750 --> 00:02:26,150 64 00:02:26,150 --> 00:02:27,030 65 00:02:27,030 --> 00:02:28,470 66 00:02:28,470 --> 00:02:30,390 67 00:02:30,390 --> 00:02:32,710 68 00:02:32,710 --> 00:02:33,910 69 00:02:33,910 --> 00:02:35,030 70 00:02:35,030 --> 00:02:37,110 71 00:02:37,110 --> 00:02:39,030 72 00:02:39,030 --> 00:02:43,990 73 00:02:43,990 --> 00:02:45,430 74 00:02:45,430 --> 00:02:47,110 75 00:02:47,110 --> 00:02:51,750 76 00:02:51,750 --> 00:02:55,830 77 00:02:55,830 --> 00:03:02,830 78 00:03:02,830 --> 00:03:02,840 79 00:03:02,840 --> 00:03:05,830 80 00:03:05,830 --> 00:03:10,869 81 00:03:10,869 --> 00:03:12,630 82 00:03:12,630 --> 00:03:14,869 83 00:03:14,869 --> 00:03:17,430 84 00:03:17,430 --> 00:03:19,110 85 00:03:19,110 --> 00:03:21,589 86 00:03:21,589 --> 00:03:24,949 87 00:03:24,949 --> 00:03:24,959 88 00:03:24,959 --> 00:03:25,990 89 00:03:25,990 --> 00:03:28,949 90 00:03:28,949 --> 00:03:28,959 91 00:03:28,959 --> 00:03:30,390 92 00:03:30,390 --> 00:03:31,990 93 00:03:31,990 --> 00:03:34,550 94 00:03:34,550 --> 00:03:37,270 95 00:03:37,270 --> 00:03:37,990 96 00:03:37,990 --> 00:03:41,830 97 00:03:41,830 --> 00:03:44,229 98 00:03:44,229 --> 00:03:45,509 99 00:03:45,509 --> 00:03:47,750 100 00:03:47,750 --> 00:03:48,949 101 00:03:48,949 --> 00:03:53,190 102 00:03:53,190 --> 00:03:56,550 103 00:03:56,550 --> 00:03:59,509 104 00:03:59,509 --> 00:04:01,190 105 00:04:01,190 --> 00:04:01,200 106 00:04:01,200 --> 00:04:01,830 107 00:04:01,830 --> 00:04:04,949 108 00:04:04,949 --> 00:04:06,789 109 00:04:06,789 --> 00:04:08,789 110 00:04:08,789 --> 00:04:24,230 111 00:04:24,230 --> 00:04:29,510 112 00:04:29,510 --> 00:04:33,430 113 00:04:33,430 --> 00:04:37,270 114 00:04:37,270 --> 00:04:40,870 115 00:04:40,870 --> 00:04:43,110 116 00:04:43,110 --> 00:04:44,950 117 00:04:44,950 --> 00:04:47,110 118 00:04:47,110 --> 00:04:49,430 119 00:04:49,430 --> 00:04:55,830 120 00:04:55,830 --> 00:05:01,909 121 00:05:01,909 --> 00:05:08,870 122 00:05:08,870 --> 00:05:16,230 123 00:05:16,230 --> 00:05:18,950 124 00:05:18,950 --> 00:05:20,310 125 00:05:20,310 --> 00:05:22,710 126 00:05:22,710 --> 00:05:23,990 127 00:05:23,990 --> 00:05:25,430 128 00:05:25,430 --> 00:05:27,189 129 00:05:27,189 --> 00:05:28,870 130 00:05:28,870 --> 00:05:30,710 131 00:05:30,710 --> 00:05:31,270 132 00:05:31,270 --> 00:05:33,749 133 00:05:33,749 --> 00:05:35,749 134 00:05:35,749 --> 00:05:37,590 135 00:05:37,590 --> 00:05:38,950 136 00:05:38,950 --> 00:05:41,510 137 00:05:41,510 --> 00:05:43,189 138 00:05:43,189 --> 00:05:46,550 139 00:05:46,550 --> 00:05:52,150 140 00:05:52,150 --> 00:05:53,350 141 00:05:53,350 --> 00:05:57,749 142 00:05:57,749 --> 00:06:04,230 143 00:06:04,230 --> 00:06:07,749 144 00:06:07,749 --> 00:06:11,749 145 00:06:11,749 --> 00:06:13,189 146 00:06:13,189 --> 00:06:15,990 147 00:06:15,990 --> 00:06:17,590 148 00:06:17,590 --> 00:06:20,550 149 00:06:20,550 --> 00:06:22,309 150 00:06:22,309 --> 00:06:24,150 151 00:06:24,150 --> 00:06:26,309 152 00:06:26,309 --> 00:06:37,990 153 00:06:37,990 --> 00:06:39,510 154 00:06:39,510 --> 00:06:41,670 155 00:06:41,670 --> 00:06:44,950 156 00:06:44,950 --> 00:06:44,960 157 00:06:44,960 --> 00:06:45,350 158 00:06:45,350 --> 00:06:51,670 159 00:06:51,670 --> 00:06:55,189 160 00:06:55,189 --> 00:06:56,629 161 00:06:56,629 --> 00:07:00,950 162 00:07:00,950 --> 00:07:03,430 163 00:07:03,430 --> 00:07:04,469 164 00:07:04,469 --> 00:07:09,110 165 00:07:09,110 --> 00:07:11,350 166 00:07:11,350 --> 00:07:13,350 167 00:07:13,350 --> 00:07:15,830 168 00:07:15,830 --> 00:07:17,350 169 00:07:17,350 --> 00:07:19,430 170 00:07:19,430 --> 00:07:19,440 171 00:07:19,440 --> 00:07:20,550 172 00:07:20,550 --> 00:07:22,790 173 00:07:22,790 --> 00:07:24,469 174 00:07:24,469 --> 00:07:27,990 175 00:07:27,990 --> 00:07:30,550 176 00:07:30,550 --> 00:07:32,309 177 00:07:32,309 --> 00:07:34,629 178 00:07:34,629 --> 00:07:34,639 179 00:07:34,639 --> 00:07:36,230 180 00:07:36,230 --> 00:07:40,230 181 00:07:40,230 --> 00:07:43,270 182 00:07:43,270 --> 00:07:44,869 183 00:07:44,869 --> 00:07:47,510 184 00:07:47,510 --> 00:07:48,950 185 00:07:48,950 --> 00:07:51,110 186 00:07:51,110 --> 00:07:55,670 187 00:07:55,670 --> 00:07:58,629 188 00:07:58,629 --> 00:08:00,230 189 00:08:00,230 --> 00:08:03,350 190 00:08:03,350 --> 00:08:06,150 191 00:08:06,150 --> 00:08:07,990 192 00:08:07,990 --> 00:08:11,510 193 00:08:11,510 --> 00:08:11,520 194 00:08:11,520 --> 00:08:12,309 195 00:08:12,309 --> 00:08:13,990 196 00:08:13,990 --> 00:08:15,909 197 00:08:15,909 --> 00:08:19,909 198 00:08:19,909 --> 00:08:21,350 199 00:08:21,350 --> 00:08:22,869 200 00:08:22,869 --> 00:08:24,469 201 00:08:24,469 --> 00:08:27,270 202 00:08:27,270 --> 00:08:27,280 203 00:08:27,280 --> 00:08:27,909 204 00:08:27,909 --> 00:08:31,510 205 00:08:31,510 --> 00:08:34,389 206 00:08:34,389 --> 00:08:36,790 207 00:08:36,790 --> 00:08:39,509 208 00:08:39,509 --> 00:08:39,519 209 00:08:39,519 --> 00:08:39,990 210 00:08:39,990 --> 00:08:42,790 211 00:08:42,790 --> 00:08:44,230 212 00:08:44,230 --> 00:08:47,190 213 00:08:47,190 --> 00:08:49,110 214 00:08:49,110 --> 00:08:51,190 215 00:08:51,190 --> 00:08:53,269 216 00:08:53,269 --> 00:09:01,110 217 00:09:01,110 --> 00:09:03,190 218 00:09:03,190 --> 00:09:03,200 219 00:09:03,200 --> 00:09:05,110 220 00:09:05,110 --> 00:09:06,790 221 00:09:06,790 --> 00:09:08,949 222 00:09:08,949 --> 00:09:10,070 223 00:09:10,070 --> 00:09:10,080 224 00:09:10,080 --> 00:09:13,269 225 00:09:13,269 --> 00:09:14,870 226 00:09:14,870 --> 00:09:16,630 227 00:09:16,630 --> 00:09:19,190 228 00:09:19,190 --> 00:09:22,550 229 00:09:22,550 --> 00:09:26,870 230 00:09:26,870 --> 00:09:29,750 231 00:09:29,750 --> 00:09:29,760 232 00:09:29,760 --> 00:09:30,870 233 00:09:30,870 --> 00:09:33,590 234 00:09:33,590 --> 00:09:34,470 235 00:09:34,470 --> 00:09:39,829 236 00:09:39,829 --> 00:09:43,350 237 00:09:43,350 --> 00:09:43,360 238 00:09:43,360 --> 00:09:44,230 239 00:09:44,230 --> 00:09:48,310 240 00:09:48,310 --> 00:09:49,910 241 00:09:49,910 --> 00:09:51,430 242 00:09:51,430 --> 00:09:52,790 243 00:09:52,790 --> 00:09:54,230 244 00:09:54,230 --> 00:09:55,030 245 00:09:55,030 --> 00:09:57,030 246 00:09:57,030 --> 00:09:58,470 247 00:09:58,470 --> 00:10:00,389 248 00:10:00,389 --> 00:10:04,710 249 00:10:04,710 --> 00:10:08,949 250 00:10:08,949 --> 00:10:10,710 251 00:10:10,710 --> 00:10:12,150 252 00:10:12,150 --> 00:10:14,069 253 00:10:14,069 --> 00:10:15,829 254 00:10:15,829 --> 00:10:17,350 255 00:10:17,350 --> 00:10:19,670 256 00:10:19,670 --> 00:10:22,710 257 00:10:22,710 --> 00:10:29,110 258 00:10:29,110 --> 00:10:32,069 259 00:10:32,069 --> 00:10:34,710 260 00:10:34,710 --> 00:10:42,310 261 00:10:42,310 --> 00:10:46,230 262 00:10:46,230 --> 00:10:50,550 263 00:10:50,550 --> 00:10:54,790 264 00:10:54,790 --> 00:10:58,069 265 00:10:58,069 --> 00:10:59,509 266 00:10:59,509 --> 00:11:01,509 267 00:11:01,509 --> 00:11:04,310 268 00:11:04,310 --> 00:11:05,670 269 00:11:05,670 --> 00:11:05,680 270 00:11:05,680 --> 00:11:06,710 271 00:11:06,710 --> 00:11:10,550 272 00:11:10,550 --> 00:11:14,630 273 00:11:14,630 --> 00:11:16,389 274 00:11:16,389 --> 00:11:29,030 275 00:11:29,030 --> 00:11:32,150 276 00:11:32,150 --> 00:11:35,990 277 00:11:35,990 --> 00:11:38,310 278 00:11:38,310 --> 00:11:39,829 279 00:11:39,829 --> 00:11:39,839 280 00:11:39,839 --> 00:11:40,550 281 00:11:40,550 --> 00:11:43,910 282 00:11:43,910 --> 00:11:45,670 283 00:11:45,670 --> 00:11:47,829 284 00:11:47,829 --> 00:11:49,990 285 00:11:49,990 --> 00:11:50,870 286 00:11:50,870 --> 00:11:54,870 287 00:11:54,870 --> 00:11:56,790 288 00:11:56,790 --> 00:11:58,710 289 00:11:58,710 --> 00:12:08,829 290 00:12:08,829 --> 00:12:08,839 291 00:12:08,839 --> 00:12:15,829 292 00:12:15,829 --> 00:12:21,190 293 00:12:21,190 --> 00:12:24,550 294 00:12:24,550 --> 00:12:24,560 295 00:12:24,560 --> 00:12:25,030 296 00:12:25,030 --> 00:12:28,550 297 00:12:28,550 --> 00:12:31,750 298 00:12:31,750 --> 00:12:35,910 299 00:12:35,910 --> 00:12:44,389 300 00:12:44,389 --> 00:12:47,910 301 00:12:47,910 --> 00:12:51,990 302 00:12:51,990 --> 00:12:54,470 303 00:12:54,470 --> 00:12:54,480 304 00:12:54,480 --> 00:12:55,430 305 00:12:55,430 --> 00:12:57,590 306 00:12:57,590 --> 00:12:59,350 307 00:12:59,350 --> 00:13:00,790 308 00:13:00,790 --> 00:13:03,190 309 00:13:03,190 --> 00:13:05,590 310 00:13:05,590 --> 00:13:07,030 311 00:13:07,030 --> 00:13:08,550 312 00:13:08,550 --> 00:13:08,560 313 00:13:08,560 --> 00:13:08,790 314 00:13:08,790 --> 00:13:10,069 315 00:13:10,069 --> 00:13:11,750 316 00:13:11,750 --> 00:13:12,470 317 00:13:12,470 --> 00:13:13,910 318 00:13:13,910 --> 00:13:16,470 319 00:13:16,470 --> 00:13:23,910 320 00:13:23,910 --> 00:13:27,350 321 00:13:27,350 --> 00:13:28,470 322 00:13:28,470 --> 00:13:31,990 323 00:13:31,990 --> 00:13:33,829 324 00:13:33,829 --> 00:13:36,150 325 00:13:36,150 --> 00:13:38,790 326 00:13:38,790 --> 00:13:39,590 327 00:13:39,590 --> 00:13:43,030 328 00:13:43,030 --> 00:13:46,629 329 00:13:46,629 --> 00:13:49,030 330 00:13:49,030 --> 00:13:50,230 331 00:13:50,230 --> 00:13:55,030 332 00:13:55,030 --> 00:13:56,629 333 00:13:56,629 --> 00:13:56,639 334 00:13:56,639 --> 00:14:01,590 335 00:14:01,590 --> 00:14:05,269 336 00:14:05,269 --> 00:14:05,279 337 00:14:05,279 --> 00:14:06,629 338 00:14:06,629 --> 00:14:09,430 339 00:14:09,430 --> 00:14:09,440 340 00:14:09,440 --> 00:14:11,350 341 00:14:11,350 --> 00:14:13,910 342 00:14:13,910 --> 00:14:16,230 343 00:14:16,230 --> 00:14:18,230 344 00:14:18,230 --> 00:14:20,230 345 00:14:20,230 --> 00:14:21,430 346 00:14:21,430 --> 00:14:23,590 347 00:14:23,590 --> 00:14:25,269 348 00:14:25,269 --> 00:14:25,279 349 00:14:25,279 --> 00:14:27,750 350 00:14:27,750 --> 00:14:38,310 351 00:14:38,310 --> 00:14:41,509 352 00:14:41,509 --> 00:14:45,670 353 00:14:45,670 --> 00:14:50,870 354 00:14:50,870 --> 00:14:53,030 355 00:14:53,030 --> 00:14:55,110 356 00:14:55,110 --> 00:14:55,990 357 00:14:55,990 --> 00:14:57,670 358 00:14:57,670 --> 00:14:57,680 359 00:14:57,680 --> 00:14:59,189 360 00:14:59,189 --> 00:15:01,430 361 00:15:01,430 --> 00:15:02,790 362 00:15:02,790 --> 00:15:02,800 363 00:15:02,800 --> 00:15:04,310 364 00:15:04,310 --> 00:15:06,710 365 00:15:06,710 --> 00:15:07,670 366 00:15:07,670 --> 00:15:09,750 367 00:15:09,750 --> 00:15:11,110 368 00:15:11,110 --> 00:15:13,590 369 00:15:13,590 --> 00:15:14,550 370 00:15:14,550 --> 00:15:16,949 371 00:15:16,949 --> 00:15:18,470 372 00:15:18,470 --> 00:15:24,829 373 00:15:24,829 --> 00:15:24,839 374 00:15:24,839 --> 00:15:33,829 375 00:15:33,829 --> 00:15:36,629 376 00:15:36,629 --> 00:15:36,639 377 00:15:36,639 --> 00:15:37,590 378 00:15:37,590 --> 00:15:39,430 379 00:15:39,430 --> 00:15:40,790 380 00:15:40,790 --> 00:15:41,990 381 00:15:41,990 --> 00:15:43,910 382 00:15:43,910 --> 00:15:45,829 383 00:15:45,829 --> 00:15:47,110 384 00:15:47,110 --> 00:15:49,110 385 00:15:49,110 --> 00:15:49,990 386 00:15:49,990 --> 00:15:51,670 387 00:15:51,670 --> 00:15:53,110 388 00:15:53,110 --> 00:15:53,120 389 00:15:53,120 --> 00:15:54,949 390 00:15:54,949 --> 00:15:58,949 391 00:15:58,949 --> 00:16:02,389 392 00:16:02,389 --> 00:16:05,829 393 00:16:05,829 --> 00:16:09,350 394 00:16:09,350 --> 00:16:13,110 395 00:16:13,110 --> 00:16:15,910 396 00:16:15,910 --> 00:16:16,629 397 00:16:16,629 --> 00:16:19,990 398 00:16:19,990 --> 00:16:24,069 399 00:16:24,069 --> 00:16:29,350 400 00:16:29,350 --> 00:16:31,350 401 00:16:31,350 --> 00:16:34,389 402 00:16:34,389 --> 00:16:37,910 403 00:16:37,910 --> 00:16:39,749 404 00:16:39,749 --> 00:16:41,829 405 00:16:41,829 --> 00:16:45,030 406 00:16:45,030 --> 00:16:46,949 407 00:16:46,949 --> 00:16:48,150 408 00:16:48,150 --> 00:16:51,189 409 00:16:51,189 --> 00:16:53,670 410 00:16:53,670 --> 00:16:54,949 411 00:16:54,949 --> 00:16:57,030 412 00:16:57,030 --> 00:16:59,829 413 00:16:59,829 --> 00:17:02,629 414 00:17:02,629 --> 00:17:04,630 415 00:17:04,630 --> 00:17:04,640 416 00:17:04,640 --> 00:17:08,230 417 00:17:08,230 --> 00:17:11,750 418 00:17:11,750 --> 00:17:12,390 419 00:17:12,390 --> 00:17:13,990 420 00:17:13,990 --> 00:17:16,309 421 00:17:16,309 --> 00:17:17,750 422 00:17:17,750 --> 00:17:19,510 423 00:17:19,510 --> 00:17:21,909 424 00:17:21,909 --> 00:17:24,949 425 00:17:24,949 --> 00:17:27,669 426 00:17:27,669 --> 00:17:28,630 427 00:17:28,630 --> 00:17:30,630 428 00:17:30,630 --> 00:17:32,310 429 00:17:32,310 --> 00:17:34,230 430 00:17:34,230 --> 00:17:35,909 431 00:17:35,909 --> 00:17:38,150 432 00:17:38,150 --> 00:17:40,789 433 00:17:40,789 --> 00:17:44,470 434 00:17:44,470 --> 00:17:47,909 435 00:17:47,909 --> 00:17:51,110 436 00:17:51,110 --> 00:17:51,120 437 00:17:51,120 --> 00:17:51,830 438 00:17:51,830 --> 00:17:56,549 439 00:17:56,549 --> 00:17:59,350 440 00:17:59,350 --> 00:18:00,870 441 00:18:00,870 --> 00:18:02,870 442 00:18:02,870 --> 00:18:04,310 443 00:18:04,310 --> 00:18:05,990 444 00:18:05,990 --> 00:18:06,000 445 00:18:06,000 --> 00:18:07,190 446 00:18:07,190 --> 00:18:09,669 447 00:18:09,669 --> 00:18:11,110 448 00:18:11,110 --> 00:18:14,470 449 00:18:14,470 --> 00:18:18,230 450 00:18:18,230 --> 00:18:21,350 451 00:18:21,350 --> 00:18:22,710 452 00:18:22,710 --> 00:18:24,230 453 00:18:24,230 --> 00:18:24,240 454 00:18:24,240 --> 00:18:25,110 455 00:18:25,110 --> 00:18:28,150 456 00:18:28,150 --> 00:18:30,789 457 00:18:30,789 --> 00:18:30,799 458 00:18:30,799 --> 00:18:37,190 459 00:18:37,190 --> 00:18:39,430 460 00:18:39,430 --> 00:18:40,789 461 00:18:40,789 --> 00:18:43,110 462 00:18:43,110 --> 00:18:44,549 463 00:18:44,549 --> 00:18:47,990 464 00:18:47,990 --> 00:18:50,230 465 00:18:50,230 --> 00:18:51,990 466 00:18:51,990 --> 00:18:54,150 467 00:18:54,150 --> 00:18:55,110 468 00:18:55,110 --> 00:18:56,950 469 00:18:56,950 --> 00:18:58,630 470 00:18:58,630 --> 00:19:00,870 471 00:19:00,870 --> 00:19:02,630 472 00:19:02,630 --> 00:19:02,640 473 00:19:02,640 --> 00:19:03,990 474 00:19:03,990 --> 00:19:07,510 475 00:19:07,510 --> 00:19:08,789 476 00:19:08,789 --> 00:19:11,430 477 00:19:11,430 --> 00:19:13,590 478 00:19:13,590 --> 00:19:15,270 479 00:19:15,270 --> 00:19:18,630 480 00:19:18,630 --> 00:19:21,350 481 00:19:21,350 --> 00:19:23,110 482 00:19:23,110 --> 00:19:23,120 483 00:19:23,120 --> 00:19:24,150 484 00:19:24,150 --> 00:19:25,990 485 00:19:25,990 --> 00:19:26,000 486 00:19:26,000 --> 00:19:27,669 487 00:19:27,669 --> 00:19:31,110 488 00:19:31,110 --> 00:19:32,710 489 00:19:32,710 --> 00:19:33,750 490 00:19:33,750 --> 00:19:35,990 491 00:19:35,990 --> 00:19:37,190 492 00:19:37,190 --> 00:19:39,270 493 00:19:39,270 --> 00:19:41,270 494 00:19:41,270 --> 00:19:43,909 495 00:19:43,909 --> 00:19:48,789 496 00:19:48,789 --> 00:20:07,590 497 00:20:07,590 --> 00:20:09,830 498 00:20:09,830 --> 00:20:12,070 499 00:20:12,070 --> 00:20:14,310 500 00:20:14,310 --> 00:20:15,990 501 00:20:15,990 --> 00:20:17,750 502 00:20:17,750 --> 00:20:17,760 503 00:20:17,760 --> 00:20:19,190 504 00:20:19,190 --> 00:20:21,270 505 00:20:21,270 --> 00:20:22,789 506 00:20:22,789 --> 00:20:24,789 507 00:20:24,789 --> 00:20:26,070 508 00:20:26,070 --> 00:20:28,070 509 00:20:28,070 --> 00:20:29,430 510 00:20:29,430 --> 00:20:30,630 511 00:20:30,630 --> 00:20:32,230 512 00:20:32,230 --> 00:20:33,590 513 00:20:33,590 --> 00:20:35,270 514 00:20:35,270 --> 00:20:37,110 515 00:20:37,110 --> 00:20:38,630 516 00:20:38,630 --> 00:20:38,640 517 00:20:38,640 --> 00:20:41,270 518 00:20:41,270 --> 00:20:47,029 519 00:20:47,029 --> 00:20:50,070 520 00:20:50,070 --> 00:20:53,350 521 00:20:53,350 --> 00:20:56,950 522 00:20:56,950 --> 00:20:59,430 523 00:20:59,430 --> 00:20:59,440 524 00:20:59,440 --> 00:21:01,430 525 00:21:01,430 --> 00:21:02,950 526 00:21:02,950 --> 00:21:04,710 527 00:21:04,710 --> 00:21:08,230 528 00:21:08,230 --> 00:21:11,029 529 00:21:11,029 --> 00:21:11,750 530 00:21:11,750 --> 00:21:15,029 531 00:21:15,029 --> 00:21:15,990 532 00:21:15,990 --> 00:21:18,870 533 00:21:18,870 --> 00:21:20,310 534 00:21:20,310 --> 00:21:23,190 535 00:21:23,190 --> 00:21:25,110 536 00:21:25,110 --> 00:21:25,990 537 00:21:25,990 --> 00:21:28,390 538 00:21:28,390 --> 00:21:29,029 539 00:21:29,029 --> 00:21:30,390 540 00:21:30,390 --> 00:21:33,270 541 00:21:33,270 --> 00:21:35,430 542 00:21:35,430 --> 00:21:37,350 543 00:21:37,350 --> 00:21:40,070 544 00:21:40,070 --> 00:21:40,080 545 00:21:40,080 --> 00:21:41,110 546 00:21:41,110 --> 00:21:44,789 547 00:21:44,789 --> 00:21:44,799 548 00:21:44,799 --> 00:21:47,590 549 00:21:47,590 --> 00:21:49,830 550 00:21:49,830 --> 00:21:52,070 551 00:21:52,070 --> 00:21:53,750 552 00:21:53,750 --> 00:21:56,310 553 00:21:56,310 --> 00:21:57,990 554 00:21:57,990 --> 00:21:59,990 555 00:21:59,990 --> 00:22:02,470 556 00:22:02,470 --> 00:22:02,480 557 00:22:02,480 --> 00:22:05,190 558 00:22:05,190 --> 00:22:08,470 559 00:22:08,470 --> 00:22:11,029 560 00:22:11,029 --> 00:22:12,630 561 00:22:12,630 --> 00:22:14,230 562 00:22:14,230 --> 00:22:15,830 563 00:22:15,830 --> 00:22:17,190 564 00:22:17,190 --> 00:22:19,510 565 00:22:19,510 --> 00:22:21,350 566 00:22:21,350 --> 00:22:23,430 567 00:22:23,430 --> 00:22:26,310 568 00:22:26,310 --> 00:22:29,669 569 00:22:29,669 --> 00:22:33,430 570 00:22:33,430 --> 00:22:37,590 571 00:22:37,590 --> 00:22:39,430 572 00:22:39,430 --> 00:22:40,789 573 00:22:40,789 --> 00:22:43,990 574 00:22:43,990 --> 00:22:45,430 575 00:22:45,430 --> 00:22:48,390 576 00:22:48,390 --> 00:22:48,400 577 00:22:48,400 --> 00:22:49,270 578 00:22:49,270 --> 00:22:52,710 579 00:22:52,710 --> 00:22:54,230 580 00:22:54,230 --> 00:22:56,789 581 00:22:56,789 --> 00:22:58,789 582 00:22:58,789 --> 00:22:58,799 583 00:22:58,799 --> 00:22:59,990 584 00:22:59,990 --> 00:23:05,350 585 00:23:05,350 --> 00:23:09,990 586 00:23:09,990 --> 00:23:28,549 587 00:23:28,549 --> 00:23:30,470 588 00:23:30,470 --> 00:23:32,230 589 00:23:32,230 --> 00:23:32,240 590 00:23:32,240 --> 00:23:33,750 591 00:23:33,750 --> 00:23:35,350 592 00:23:35,350 --> 00:23:37,990 593 00:23:37,990 --> 00:23:39,909 594 00:23:39,909 --> 00:23:43,190 595 00:23:43,190 --> 00:23:44,470 596 00:23:44,470 --> 00:23:46,630 597 00:23:46,630 --> 00:23:50,310 598 00:23:50,310 --> 00:23:50,320 599 00:23:50,320 --> 00:24:00,230 600 00:24:00,230 --> 00:24:02,950 601 00:24:02,950 --> 00:24:02,960 602 00:24:02,960 --> 00:24:07,430 603 00:24:07,430 --> 00:24:10,470 604 00:24:10,470 --> 00:24:14,710 605 00:24:14,710 --> 00:24:21,750 606 00:24:21,750 --> 00:24:28,070 607 00:24:28,070 --> 00:24:32,149 608 00:24:32,149 --> 00:24:36,310 609 00:24:36,310 --> 00:24:37,909 610 00:24:37,909 --> 00:24:39,909 611 00:24:39,909 --> 00:24:41,350 612 00:24:41,350 --> 00:24:44,149 613 00:24:44,149 --> 00:24:46,070 614 00:24:46,070 --> 00:24:47,990 615 00:24:47,990 --> 00:24:49,830 616 00:24:49,830 --> 00:24:51,510 617 00:24:51,510 --> 00:24:53,430 618 00:24:53,430 --> 00:24:55,350 619 00:24:55,350 --> 00:24:57,350 620 00:24:57,350 --> 00:24:59,350 621 00:24:59,350 --> 00:25:01,430 622 00:25:01,430 --> 00:25:03,110 623 00:25:03,110 --> 00:25:06,230 624 00:25:06,230 --> 00:25:09,350 625 00:25:09,350 --> 00:25:10,310 626 00:25:10,310 --> 00:25:12,470 627 00:25:12,470 --> 00:25:12,480 628 00:25:12,480 --> 00:25:13,590 629 00:25:13,590 --> 00:25:17,029 630 00:25:17,029 --> 00:25:19,269 631 00:25:19,269 --> 00:25:21,590 632 00:25:21,590 --> 00:25:23,669 633 00:25:23,669 --> 00:25:24,870 634 00:25:24,870 --> 00:25:28,630 635 00:25:28,630 --> 00:25:28,640 636 00:25:28,640 --> 00:25:33,029 637 00:25:33,029 --> 00:25:36,710 638 00:25:36,710 --> 00:25:44,710 639 00:25:44,710 --> 00:25:49,750 640 00:25:49,750 --> 00:25:52,870 641 00:25:52,870 --> 00:25:54,390 642 00:25:54,390 --> 00:25:56,470 643 00:25:56,470 --> 00:25:59,750 644 00:25:59,750 --> 00:26:02,390 645 00:26:02,390 --> 00:26:02,400 646 00:26:02,400 --> 00:26:03,110 647 00:26:03,110 --> 00:26:05,750 648 00:26:05,750 --> 00:26:07,909 649 00:26:07,909 --> 00:26:09,590 650 00:26:09,590 --> 00:26:13,110 651 00:26:13,110 --> 00:26:15,669 652 00:26:15,669 --> 00:26:16,630 653 00:26:16,630 --> 00:26:19,269 654 00:26:19,269 --> 00:26:19,279 655 00:26:19,279 --> 00:26:20,149 656 00:26:20,149 --> 00:26:22,870 657 00:26:22,870 --> 00:26:22,880 658 00:26:22,880 --> 00:26:23,590 659 00:26:23,590 --> 00:26:26,310 660 00:26:26,310 --> 00:26:28,310 661 00:26:28,310 --> 00:26:30,630 662 00:26:30,630 --> 00:26:32,230 663 00:26:32,230 --> 00:26:35,990 664 00:26:35,990 --> 00:26:39,669 665 00:26:39,669 --> 00:26:42,870 666 00:26:42,870 --> 00:26:46,950 667 00:26:46,950 --> 00:26:48,230 668 00:26:48,230 --> 00:26:51,110 669 00:26:51,110 --> 00:26:51,990 670 00:26:51,990 --> 00:26:55,190 671 00:26:55,190 --> 00:26:58,710 672 00:26:58,710 --> 00:27:01,909 673 00:27:01,909 --> 00:27:03,669 674 00:27:03,669 --> 00:27:09,669 675 00:27:09,669 --> 00:27:12,950 676 00:27:12,950 --> 00:27:12,960 677 00:27:12,960 --> 00:27:13,190 678 00:27:13,190 --> 00:27:16,870 679 00:27:16,870 --> 00:27:20,070 680 00:27:20,070 --> 00:27:21,909 681 00:27:21,909 --> 00:27:23,269 682 00:27:23,269 --> 00:27:23,279 683 00:27:23,279 --> 00:27:23,510 684 00:27:23,510 --> 00:27:26,070 685 00:27:26,070 --> 00:27:28,549 686 00:27:28,549 --> 00:27:31,590 687 00:27:31,590 --> 00:27:33,990 688 00:27:33,990 --> 00:27:34,000 689 00:27:34,000 --> 00:27:34,950 690 00:27:34,950 --> 00:27:37,909 691 00:27:37,909 --> 00:27:39,110 692 00:27:39,110 --> 00:27:40,630 693 00:27:40,630 --> 00:27:42,549 694 00:27:42,549 --> 00:27:44,950 695 00:27:44,950 --> 00:27:49,029 696 00:27:49,029 --> 00:27:50,389 697 00:27:50,389 --> 00:27:53,110 698 00:27:53,110 --> 00:27:54,870 699 00:27:54,870 --> 00:27:56,630 700 00:27:56,630 --> 00:27:58,149 701 00:27:58,149 --> 00:28:01,510 702 00:28:01,510 --> 00:28:03,190 703 00:28:03,190 --> 00:28:04,710 704 00:28:04,710 --> 00:28:06,549 705 00:28:06,549 --> 00:28:08,149 706 00:28:08,149 --> 00:28:10,070 707 00:28:10,070 --> 00:28:11,510 708 00:28:11,510 --> 00:28:14,830 709 00:28:14,830 --> 00:28:14,840 710 00:28:14,840 --> 00:28:16,070 711 00:28:16,070 --> 00:28:18,149 712 00:28:18,149 --> 00:28:21,269 713 00:28:21,269 --> 00:28:23,750 714 00:28:23,750 --> 00:28:24,470 715 00:28:24,470 --> 00:28:27,590 716 00:28:27,590 --> 00:28:31,510 717 00:28:31,510 --> 00:28:34,389 718 00:28:34,389 --> 00:28:35,990 719 00:28:35,990 --> 00:28:38,230 720 00:28:38,230 --> 00:28:41,269 721 00:28:41,269 --> 00:28:41,279 722 00:28:41,279 --> 00:28:42,389 723 00:28:42,389 --> 00:28:44,310 724 00:28:44,310 --> 00:28:45,669 725 00:28:45,669 --> 00:28:45,679 726 00:28:45,679 --> 00:28:46,389 727 00:28:46,389 --> 00:28:47,830 728 00:28:47,830 --> 00:28:51,110 729 00:28:51,110 --> 00:28:53,110 730 00:28:53,110 --> 00:28:54,149 731 00:28:54,149 --> 00:28:55,990 732 00:28:55,990 --> 00:28:57,590 733 00:28:57,590 --> 00:28:57,600 734 00:28:57,600 --> 00:28:58,389 735 00:28:58,389 --> 00:29:00,149 736 00:29:00,149 --> 00:29:04,870 737 00:29:04,870 --> 00:29:07,190 738 00:29:07,190 --> 00:29:07,200 739 00:29:07,200 --> 00:29:08,070 740 00:29:08,070 --> 00:29:11,269 741 00:29:11,269 --> 00:29:11,279 742 00:29:11,279 --> 00:29:13,029 743 00:29:13,029 --> 00:29:16,070 744 00:29:16,070 --> 00:29:18,870 745 00:29:18,870 --> 00:29:21,269 746 00:29:21,269 --> 00:29:24,389 747 00:29:24,389 --> 00:29:26,710 748 00:29:26,710 --> 00:29:28,149 749 00:29:28,149 --> 00:29:30,070 750 00:29:30,070 --> 00:29:32,310 751 00:29:32,310 --> 00:29:36,470 752 00:29:36,470 --> 00:29:38,789 753 00:29:38,789 --> 00:29:40,149 754 00:29:40,149 --> 00:29:42,149 755 00:29:42,149 --> 00:29:45,110 756 00:29:45,110 --> 00:29:47,190 757 00:29:47,190 --> 00:29:48,710 758 00:29:48,710 --> 00:29:51,430 759 00:29:51,430 --> 00:29:52,950 760 00:29:52,950 --> 00:29:54,710 761 00:29:54,710 --> 00:29:55,750 762 00:29:55,750 --> 00:29:57,110 763 00:29:57,110 --> 00:29:58,870 764 00:29:58,870 --> 00:30:01,029 765 00:30:01,029 --> 00:30:04,389 766 00:30:04,389 --> 00:30:06,389 767 00:30:06,389 --> 00:30:07,750 768 00:30:07,750 --> 00:30:07,760 769 00:30:07,760 --> 00:30:08,549 770 00:30:08,549 --> 00:30:10,789 771 00:30:10,789 --> 00:30:12,549 772 00:30:12,549 --> 00:30:13,990 773 00:30:13,990 --> 00:30:15,669 774 00:30:15,669 --> 00:30:17,190 775 00:30:17,190 --> 00:30:17,200 776 00:30:17,200 --> 00:30:18,630 777 00:30:18,630 --> 00:30:21,190 778 00:30:21,190 --> 00:30:23,110 779 00:30:23,110 --> 00:30:25,029 780 00:30:25,029 --> 00:30:26,549 781 00:30:26,549 --> 00:30:28,549 782 00:30:28,549 --> 00:30:30,149 783 00:30:30,149 --> 00:30:34,389 784 00:30:34,389 --> 00:30:37,590 785 00:30:37,590 --> 00:30:39,190 786 00:30:39,190 --> 00:30:40,149 787 00:30:40,149 --> 00:30:41,990 788 00:30:41,990 --> 00:30:43,909 789 00:30:43,909 --> 00:30:46,710 790 00:30:46,710 --> 00:30:47,909 791 00:30:47,909 --> 00:30:51,669 792 00:30:51,669 --> 00:30:53,669 793 00:30:53,669 --> 00:30:55,830 794 00:30:55,830 --> 00:30:57,830 795 00:30:57,830 --> 00:31:15,590 796 00:31:15,590 --> 00:31:22,870 797 00:31:22,870 --> 00:31:25,990 798 00:31:25,990 --> 00:31:27,750 799 00:31:27,750 --> 00:31:29,350 800 00:31:29,350 --> 00:31:31,110 801 00:31:31,110 --> 00:31:33,909 802 00:31:33,909 --> 00:31:34,630 803 00:31:34,630 --> 00:31:40,310 804 00:31:40,310 --> 00:31:40,320 805 00:31:40,320 --> 00:31:45,590 806 00:31:45,590 --> 00:31:48,710 807 00:31:48,710 --> 00:31:49,909 808 00:31:49,909 --> 00:31:52,710 809 00:31:52,710 --> 00:31:54,549 810 00:31:54,549 --> 00:32:07,029 811 00:32:07,029 --> 00:32:11,350 812 00:32:11,350 --> 00:32:14,149 813 00:32:14,149 --> 00:32:15,430 814 00:32:15,430 --> 00:32:18,950 815 00:32:18,950 --> 00:32:18,960 816 00:32:18,960 --> 00:32:19,430 817 00:32:19,430 --> 00:32:22,470 818 00:32:22,470 --> 00:32:25,350 819 00:32:25,350 --> 00:32:26,870 820 00:32:26,870 --> 00:32:28,549 821 00:32:28,549 --> 00:32:30,389 822 00:32:30,389 --> 00:32:32,549 823 00:32:32,549 --> 00:32:35,110 824 00:32:35,110 --> 00:32:41,509 825 00:32:41,509 --> 00:32:43,029 826 00:32:43,029 --> 00:32:44,230 827 00:32:44,230 --> 00:32:46,310 828 00:32:46,310 --> 00:32:48,710 829 00:32:48,710 --> 00:32:50,230 830 00:32:50,230 --> 00:32:54,149 831 00:32:54,149 --> 00:32:55,430 832 00:32:55,430 --> 00:32:58,470 833 00:32:58,470 --> 00:32:59,590 834 00:32:59,590 --> 00:33:01,430 835 00:33:01,430 --> 00:33:02,710 836 00:33:02,710 --> 00:33:04,070 837 00:33:04,070 --> 00:33:05,990 838 00:33:05,990 --> 00:33:07,909 839 00:33:07,909 --> 00:33:10,549 840 00:33:10,549 --> 00:33:13,029 841 00:33:13,029 --> 00:33:14,549 842 00:33:14,549 --> 00:33:20,549 843 00:33:20,549 --> 00:33:22,149 844 00:33:22,149 --> 00:33:23,590 845 00:33:23,590 --> 00:33:23,600 846 00:33:23,600 --> 00:33:23,990 847 00:33:23,990 --> 00:33:25,509 848 00:33:25,509 --> 00:33:27,430 849 00:33:27,430 --> 00:33:29,669 850 00:33:29,669 --> 00:33:29,679 851 00:33:29,679 --> 00:33:31,750 852 00:33:31,750 --> 00:33:34,789 853 00:33:34,789 --> 00:33:34,799 854 00:33:34,799 --> 00:33:35,269 855 00:33:35,269 --> 00:33:36,789 856 00:33:36,789 --> 00:33:38,950 857 00:33:38,950 --> 00:33:42,389 858 00:33:42,389 --> 00:33:48,789 859 00:33:48,789 --> 00:33:51,110 860 00:33:51,110 --> 00:33:53,190 861 00:33:53,190 --> 00:33:55,509 862 00:33:55,509 --> 00:33:57,350 863 00:33:57,350 --> 00:34:00,070 864 00:34:00,070 --> 00:34:02,149 865 00:34:02,149 --> 00:34:03,669 866 00:34:03,669 --> 00:34:05,830 867 00:34:05,830 --> 00:34:08,950 868 00:34:08,950 --> 00:34:12,310 869 00:34:12,310 --> 00:34:14,470 870 00:34:14,470 --> 00:34:23,669 871 00:34:23,669 --> 00:34:27,030 872 00:34:27,030 --> 00:34:28,470 873 00:34:28,470 --> 00:34:30,149 874 00:34:30,149 --> 00:34:31,349 875 00:34:31,349 --> 00:34:33,030 876 00:34:33,030 --> 00:34:34,550 877 00:34:34,550 --> 00:34:35,990 878 00:34:35,990 --> 00:34:38,310 879 00:34:38,310 --> 00:34:39,109 880 00:34:39,109 --> 00:34:41,750 881 00:34:41,750 --> 00:34:42,230 882 00:34:42,230 --> 00:34:44,790 883 00:34:44,790 --> 00:34:45,829 884 00:34:45,829 --> 00:34:47,510 885 00:34:47,510 --> 00:34:49,190 886 00:34:49,190 --> 00:34:52,389 887 00:34:52,389 --> 00:34:53,349 888 00:34:53,349 --> 00:34:55,349 889 00:34:55,349 --> 00:34:57,349 890 00:34:57,349 --> 00:34:58,790 891 00:34:58,790 --> 00:35:01,990 892 00:35:01,990 --> 00:35:04,230 893 00:35:04,230 --> 00:35:05,990 894 00:35:05,990 --> 00:35:09,829 895 00:35:09,829 --> 00:35:12,790 896 00:35:12,790 --> 00:35:14,950 897 00:35:14,950 --> 00:35:18,390 898 00:35:18,390 --> 00:35:19,990 899 00:35:19,990 --> 00:35:23,109 900 00:35:23,109 --> 00:35:26,230 901 00:35:26,230 --> 00:35:27,910 902 00:35:27,910 --> 00:35:31,109 903 00:35:31,109 --> 00:35:32,790 904 00:35:32,790 --> 00:35:34,390 905 00:35:34,390 --> 00:35:34,400 906 00:35:34,400 --> 00:35:34,630 907 00:35:34,630 --> 00:35:37,270 908 00:35:37,270 --> 00:35:39,349 909 00:35:39,349 --> 00:35:39,359 910 00:35:39,359 --> 00:35:40,069 911 00:35:40,069 --> 00:35:42,150 912 00:35:42,150 --> 00:35:44,630 913 00:35:44,630 --> 00:35:46,150 914 00:35:46,150 --> 00:35:47,829 915 00:35:47,829 --> 00:35:49,510 916 00:35:49,510 --> 00:35:51,589 917 00:35:51,589 --> 00:35:53,349 918 00:35:53,349 --> 00:35:56,390 919 00:35:56,390 --> 00:35:58,550 920 00:35:58,550 --> 00:36:01,109 921 00:36:01,109 --> 00:36:03,270 922 00:36:03,270 --> 00:36:06,150 923 00:36:06,150 --> 00:36:07,589 924 00:36:07,589 --> 00:36:10,630 925 00:36:10,630 --> 00:36:12,150 926 00:36:12,150 --> 00:36:13,510 927 00:36:13,510 --> 00:36:14,870 928 00:36:14,870 --> 00:36:18,310 929 00:36:18,310 --> 00:36:18,320 930 00:36:18,320 --> 00:36:18,550 931 00:36:18,550 --> 00:36:21,510 932 00:36:21,510 --> 00:36:23,910 933 00:36:23,910 --> 00:36:26,150 934 00:36:26,150 --> 00:36:27,589 935 00:36:27,589 --> 00:36:29,910 936 00:36:29,910 --> 00:36:30,630 937 00:36:30,630 --> 00:36:32,550 938 00:36:32,550 --> 00:36:34,710 939 00:36:34,710 --> 00:36:37,030 940 00:36:37,030 --> 00:36:38,790 941 00:36:38,790 --> 00:36:40,630 942 00:36:40,630 --> 00:36:41,990 943 00:36:41,990 --> 00:36:43,589 944 00:36:43,589 --> 00:36:44,950 945 00:36:44,950 --> 00:36:46,150 946 00:36:46,150 --> 00:36:48,470 947 00:36:48,470 --> 00:36:50,310 948 00:36:50,310 --> 00:36:51,750 949 00:36:51,750 --> 00:36:51,760 950 00:36:51,760 --> 00:36:52,870 951 00:36:52,870 --> 00:36:54,790 952 00:36:54,790 --> 00:36:56,550 953 00:36:56,550 --> 00:36:58,069 954 00:36:58,069 --> 00:37:01,349 955 00:37:01,349 --> 00:37:05,430 956 00:37:05,430 --> 00:37:06,950 957 00:37:06,950 --> 00:37:08,630 958 00:37:08,630 --> 00:37:09,589 959 00:37:09,589 --> 00:37:10,950 960 00:37:10,950 --> 00:37:12,230 961 00:37:12,230 --> 00:37:15,589 962 00:37:15,589 --> 00:37:18,710 963 00:37:18,710 --> 00:37:20,710 964 00:37:20,710 --> 00:37:21,750 965 00:37:21,750 --> 00:37:24,310 966 00:37:24,310 --> 00:37:25,190 967 00:37:25,190 --> 00:37:28,550 968 00:37:28,550 --> 00:37:29,030 969 00:37:29,030 --> 00:37:31,670 970 00:37:31,670 --> 00:37:33,190 971 00:37:33,190 --> 00:37:35,510 972 00:37:35,510 --> 00:37:36,950 973 00:37:36,950 --> 00:37:38,150 974 00:37:38,150 --> 00:37:40,470 975 00:37:40,470 --> 00:37:43,430 976 00:37:43,430 --> 00:37:45,270 977 00:37:45,270 --> 00:37:47,589 978 00:37:47,589 --> 00:37:51,430 979 00:37:51,430 --> 00:37:53,109 980 00:37:53,109 --> 00:37:54,710 981 00:37:54,710 --> 00:37:54,720 982 00:37:54,720 --> 00:37:55,510 983 00:37:55,510 --> 00:37:58,950 984 00:37:58,950 --> 00:38:02,230 985 00:38:02,230 --> 00:38:05,589 986 00:38:05,589 --> 00:38:07,750 987 00:38:07,750 --> 00:38:09,349 988 00:38:09,349 --> 00:38:12,470 989 00:38:12,470 --> 00:38:13,829 990 00:38:13,829 --> 00:38:15,190 991 00:38:15,190 --> 00:38:15,200 992 00:38:15,200 --> 00:38:17,109 993 00:38:17,109 --> 00:38:19,910 994 00:38:19,910 --> 00:38:21,190 995 00:38:21,190 --> 00:38:22,470 996 00:38:22,470 --> 00:38:24,790 997 00:38:24,790 --> 00:38:26,230 998 00:38:26,230 --> 00:38:28,630 999 00:38:28,630 --> 00:38:30,310 1000 00:38:30,310 --> 00:38:31,990 1001 00:38:31,990 --> 00:38:34,390 1002 00:38:34,390 --> 00:38:36,550 1003 00:38:36,550 --> 00:38:39,589 1004 00:38:39,589 --> 00:38:39,599 1005 00:38:39,599 --> 00:38:41,190 1006 00:38:41,190 --> 00:38:44,630 1007 00:38:44,630 --> 00:38:47,430 1008 00:38:47,430 --> 00:38:47,440 1009 00:38:47,440 --> 00:38:47,910 1010 00:38:47,910 --> 00:38:50,390 1011 00:38:50,390 --> 00:38:51,349 1012 00:38:51,349 --> 00:38:53,430 1013 00:38:53,430 --> 00:38:56,069 1014 00:38:56,069 --> 00:38:59,430 1015 00:38:59,430 --> 00:39:01,030 1016 00:39:01,030 --> 00:39:02,710 1017 00:39:02,710 --> 00:39:04,470 1018 00:39:04,470 --> 00:39:07,990 1019 00:39:07,990 --> 00:39:08,950 1020 00:39:08,950 --> 00:39:11,750 1021 00:39:11,750 --> 00:39:12,870 1022 00:39:12,870 --> 00:39:15,990 1023 00:39:15,990 --> 00:39:17,349 1024 00:39:17,349 --> 00:39:19,030 1025 00:39:19,030 --> 00:39:20,069 1026 00:39:20,069 --> 00:39:21,990 1027 00:39:21,990 --> 00:39:23,670 1028 00:39:23,670 --> 00:39:24,630 1029 00:39:24,630 --> 00:39:27,190 1030 00:39:27,190 --> 00:39:28,790 1031 00:39:28,790 --> 00:39:29,990 1032 00:39:29,990 --> 00:39:32,550 1033 00:39:32,550 --> 00:39:35,190 1034 00:39:35,190 --> 00:39:37,750 1035 00:39:37,750 --> 00:39:40,310 1036 00:39:40,310 --> 00:39:42,230 1037 00:39:42,230 --> 00:39:44,950 1038 00:39:44,950 --> 00:39:45,750 1039 00:39:45,750 --> 00:39:50,310 1040 00:39:50,310 --> 00:39:52,230 1041 00:39:52,230 --> 00:39:54,550 1042 00:39:54,550 --> 00:39:56,069 1043 00:39:56,069 --> 00:39:57,910 1044 00:39:57,910 --> 00:40:00,069 1045 00:40:00,069 --> 00:40:01,990 1046 00:40:01,990 --> 00:40:04,069 1047 00:40:04,069 --> 00:40:06,069 1048 00:40:06,069 --> 00:40:08,230 1049 00:40:08,230 --> 00:40:11,349 1050 00:40:11,349 --> 00:40:12,550 1051 00:40:12,550 --> 00:40:15,030 1052 00:40:15,030 --> 00:40:17,910 1053 00:40:17,910 --> 00:40:20,150 1054 00:40:20,150 --> 00:40:23,109 1055 00:40:23,109 --> 00:40:24,950 1056 00:40:24,950 --> 00:40:28,150 1057 00:40:28,150 --> 00:40:29,750 1058 00:40:29,750 --> 00:40:31,270 1059 00:40:31,270 --> 00:40:33,750 1060 00:40:33,750 --> 00:40:35,030 1061 00:40:35,030 --> 00:40:41,910 1062 00:40:41,910 --> 00:40:44,069 1063 00:40:44,069 --> 00:40:45,910 1064 00:40:45,910 --> 00:40:47,270 1065 00:40:47,270 --> 00:40:48,630 1066 00:40:48,630 --> 00:40:50,870 1067 00:40:50,870 --> 00:40:52,230 1068 00:40:52,230 --> 00:40:53,910 1069 00:40:53,910 --> 00:40:56,390 1070 00:40:56,390 --> 00:40:58,150 1071 00:40:58,150 --> 00:40:59,430 1072 00:40:59,430 --> 00:41:01,030 1073 00:41:01,030 --> 00:41:03,910 1074 00:41:03,910 --> 00:41:06,150 1075 00:41:06,150 --> 00:41:08,309 1076 00:41:08,309 --> 00:41:10,470 1077 00:41:10,470 --> 00:41:12,309 1078 00:41:12,309 --> 00:41:16,150 1079 00:41:16,150 --> 00:41:17,589 1080 00:41:17,589 --> 00:41:19,190 1081 00:41:19,190 --> 00:41:22,550 1082 00:41:22,550 --> 00:41:26,230 1083 00:41:26,230 --> 00:41:28,230 1084 00:41:28,230 --> 00:41:28,240 1085 00:41:28,240 --> 00:41:30,069 1086 00:41:30,069 --> 00:41:31,910 1087 00:41:31,910 --> 00:41:33,349 1088 00:41:33,349 --> 00:41:35,670 1089 00:41:35,670 --> 00:41:36,870 1090 00:41:36,870 --> 00:41:38,390 1091 00:41:38,390 --> 00:41:41,270 1092 00:41:41,270 --> 00:41:43,670 1093 00:41:43,670 --> 00:41:45,109 1094 00:41:45,109 --> 00:41:47,510 1095 00:41:47,510 --> 00:41:48,630 1096 00:41:48,630 --> 00:41:50,630 1097 00:41:50,630 --> 00:41:51,990 1098 00:41:51,990 --> 00:41:53,510 1099 00:41:53,510 --> 00:41:54,710 1100 00:41:54,710 --> 00:41:56,790 1101 00:41:56,790 --> 00:41:58,230 1102 00:41:58,230 --> 00:41:59,430 1103 00:41:59,430 --> 00:42:00,630 1104 00:42:00,630 --> 00:42:02,069 1105 00:42:02,069 --> 00:42:03,910 1106 00:42:03,910 --> 00:42:05,190 1107 00:42:05,190 --> 00:42:05,200 1108 00:42:05,200 --> 00:42:07,750 1109 00:42:07,750 --> 00:42:12,150 1110 00:42:12,150 --> 00:42:17,030 1111 00:42:17,030 --> 00:42:20,710 1112 00:42:20,710 --> 00:42:23,190 1113 00:42:23,190 --> 00:42:23,200 1114 00:42:23,200 --> 00:42:23,910 1115 00:42:23,910 --> 00:42:27,190 1116 00:42:27,190 --> 00:42:30,309 1117 00:42:30,309 --> 00:42:32,150 1118 00:42:32,150 --> 00:42:35,510 1119 00:42:35,510 --> 00:42:37,829 1120 00:42:37,829 --> 00:42:39,430 1121 00:42:39,430 --> 00:42:41,829 1122 00:42:41,829 --> 00:42:41,839 1123 00:42:41,839 --> 00:42:42,550 1124 00:42:42,550 --> 00:42:46,150 1125 00:42:46,150 --> 00:42:47,990 1126 00:42:47,990 --> 00:42:51,430 1127 00:42:51,430 --> 00:42:54,710 1128 00:42:54,710 --> 00:42:58,309 1129 00:42:58,309 --> 00:43:01,910 1130 00:43:01,910 --> 00:43:03,270 1131 00:43:03,270 --> 00:43:05,190 1132 00:43:05,190 --> 00:43:08,710 1133 00:43:08,710 --> 00:43:11,589 1134 00:43:11,589 --> 00:43:13,750 1135 00:43:13,750 --> 00:43:15,430 1136 00:43:15,430 --> 00:43:18,790 1137 00:43:18,790 --> 00:43:21,190 1138 00:43:21,190 --> 00:43:21,200 1139 00:43:21,200 --> 00:43:22,309 1140 00:43:22,309 --> 00:43:24,950 1141 00:43:24,950 --> 00:43:26,790 1142 00:43:26,790 --> 00:43:30,309 1143 00:43:30,309 --> 00:43:33,430 1144 00:43:33,430 --> 00:43:34,550 1145 00:43:34,550 --> 00:43:36,309 1146 00:43:36,309 --> 00:43:38,309 1147 00:43:38,309 --> 00:43:40,870 1148 00:43:40,870 --> 00:43:42,470 1149 00:43:42,470 --> 00:43:44,870 1150 00:43:44,870 --> 00:43:46,470 1151 00:43:46,470 --> 00:43:48,630 1152 00:43:48,630 --> 00:43:50,470 1153 00:43:50,470 --> 00:43:52,550 1154 00:43:52,550 --> 00:43:53,990 1155 00:43:53,990 --> 00:43:55,349 1156 00:43:55,349 --> 00:43:57,030 1157 00:43:57,030 --> 00:43:57,040 1158 00:43:57,040 --> 00:43:58,150 1159 00:43:58,150 --> 00:43:59,910 1160 00:43:59,910 --> 00:44:03,109 1161 00:44:03,109 --> 00:44:07,510 1162 00:44:07,510 --> 00:44:11,109 1163 00:44:11,109 --> 00:44:13,990 1164 00:44:13,990 --> 00:44:15,829 1165 00:44:15,829 --> 00:44:17,910 1166 00:44:17,910 --> 00:44:20,390 1167 00:44:20,390 --> 00:44:24,309 1168 00:44:24,309 --> 00:44:27,510 1169 00:44:27,510 --> 00:44:27,520 1170 00:44:27,520 --> 00:44:27,910 1171 00:44:27,910 --> 00:44:31,430 1172 00:44:31,430 --> 00:44:33,990 1173 00:44:33,990 --> 00:44:34,790 1174 00:44:34,790 --> 00:44:38,710 1175 00:44:38,710 --> 00:44:42,309 1176 00:44:42,309 --> 00:44:43,030 1177 00:44:43,030 --> 00:44:44,470 1178 00:44:44,470 --> 00:44:45,829 1179 00:44:45,829 --> 00:44:47,829 1180 00:44:47,829 --> 00:44:47,839 1181 00:44:47,839 --> 00:44:48,150 1182 00:44:48,150 --> 00:44:50,870 1183 00:44:50,870 --> 00:44:52,230 1184 00:44:52,230 --> 00:44:54,630 1185 00:44:54,630 --> 00:44:54,640 1186 00:44:54,640 --> 00:44:56,309 1187 00:44:56,309 --> 00:44:58,390 1188 00:44:58,390 --> 00:44:59,750 1189 00:44:59,750 --> 00:45:01,990 1190 00:45:01,990 --> 00:45:02,000 1191 00:45:02,000 --> 00:45:03,910 1192 00:45:03,910 --> 00:45:05,990 1193 00:45:05,990 --> 00:45:07,190 1194 00:45:07,190 --> 00:45:09,829 1195 00:45:09,829 --> 00:45:12,790 1196 00:45:12,790 --> 00:45:16,069 1197 00:45:16,069 --> 00:45:16,079 1198 00:45:16,079 --> 00:45:16,470 1199 00:45:16,470 --> 00:45:20,309 1200 00:45:20,309 --> 00:45:23,670 1201 00:45:23,670 --> 00:45:24,550 1202 00:45:24,550 --> 00:45:28,309 1203 00:45:28,309 --> 00:45:32,309 1204 00:45:32,309 --> 00:45:32,319 1205 00:45:32,319 --> 00:45:33,109 1206 00:45:33,109 --> 00:45:35,670 1207 00:45:35,670 --> 00:45:36,790 1208 00:45:36,790 --> 00:45:39,270 1209 00:45:39,270 --> 00:45:39,280 1210 00:45:39,280 --> 00:45:40,230 1211 00:45:40,230 --> 00:45:43,109 1212 00:45:43,109 --> 00:45:43,119 1213 00:45:43,119 --> 00:45:43,589 1214 00:45:43,589 --> 00:45:46,790 1215 00:45:46,790 --> 00:45:49,670 1216 00:45:49,670 --> 00:45:51,190 1217 00:45:51,190 --> 00:45:52,870 1218 00:45:52,870 --> 00:45:54,230 1219 00:45:54,230 --> 00:45:54,240 1220 00:45:54,240 --> 00:45:54,550 1221 00:45:54,550 --> 00:45:56,309 1222 00:45:56,309 --> 00:45:58,710 1223 00:45:58,710 --> 00:46:00,870 1224 00:46:00,870 --> 00:46:02,069 1225 00:46:02,069 --> 00:46:03,910 1226 00:46:03,910 --> 00:46:05,109 1227 00:46:05,109 --> 00:46:07,990 1228 00:46:07,990 --> 00:46:09,430 1229 00:46:09,430 --> 00:46:11,270 1230 00:46:11,270 --> 00:46:12,950 1231 00:46:12,950 --> 00:46:16,230 1232 00:46:16,230 --> 00:46:17,430 1233 00:46:17,430 --> 00:46:18,790 1234 00:46:18,790 --> 00:46:18,800 1235 00:46:18,800 --> 00:46:20,470 1236 00:46:20,470 --> 00:46:22,470 1237 00:46:22,470 --> 00:46:24,790 1238 00:46:24,790 --> 00:46:27,349 1239 00:46:27,349 --> 00:46:29,510 1240 00:46:29,510 --> 00:46:31,430 1241 00:46:31,430 --> 00:46:31,440 1242 00:46:31,440 --> 00:46:33,829 1243 00:46:33,829 --> 00:46:36,150 1244 00:46:36,150 --> 00:46:37,750 1245 00:46:37,750 --> 00:46:37,760 1246 00:46:37,760 --> 00:46:38,550 1247 00:46:38,550 --> 00:46:40,230 1248 00:46:40,230 --> 00:46:41,829 1249 00:46:41,829 --> 00:46:41,839 1250 00:46:41,839 --> 00:46:42,069 1251 00:46:42,069 --> 00:46:43,430 1252 00:46:43,430 --> 00:46:46,069 1253 00:46:46,069 --> 00:46:47,910 1254 00:46:47,910 --> 00:46:49,270 1255 00:46:49,270 --> 00:46:52,470 1256 00:46:52,470 --> 00:46:55,349 1257 00:46:55,349 --> 00:46:57,430 1258 00:46:57,430 --> 00:46:59,589 1259 00:46:59,589 --> 00:47:00,870 1260 00:47:00,870 --> 00:47:03,270 1261 00:47:03,270 --> 00:47:06,550 1262 00:47:06,550 --> 00:47:10,390 1263 00:47:10,390 --> 00:47:11,349 1264 00:47:11,349 --> 00:47:14,150 1265 00:47:14,150 --> 00:47:15,270 1266 00:47:15,270 --> 00:47:17,910 1267 00:47:17,910 --> 00:47:21,270 1268 00:47:21,270 --> 00:47:25,349 1269 00:47:25,349 --> 00:47:28,710 1270 00:47:28,710 --> 00:47:28,720 1271 00:47:28,720 --> 00:47:29,510 1272 00:47:29,510 --> 00:47:31,829 1273 00:47:31,829 --> 00:47:33,670 1274 00:47:33,670 --> 00:47:35,109 1275 00:47:35,109 --> 00:47:37,349 1276 00:47:37,349 --> 00:47:38,950 1277 00:47:38,950 --> 00:47:38,960 1278 00:47:38,960 --> 00:47:39,510 1279 00:47:39,510 --> 00:47:41,270 1280 00:47:41,270 --> 00:47:43,190 1281 00:47:43,190 --> 00:47:44,790 1282 00:47:44,790 --> 00:47:46,390 1283 00:47:46,390 --> 00:47:47,829 1284 00:47:47,829 --> 00:47:47,839 1285 00:47:47,839 --> 00:47:49,430 1286 00:47:49,430 --> 00:47:51,670 1287 00:47:51,670 --> 00:47:52,470 1288 00:47:52,470 --> 00:47:55,670 1289 00:47:55,670 --> 00:47:58,390 1290 00:47:58,390 --> 00:47:59,990 1291 00:47:59,990 --> 00:48:01,109 1292 00:48:01,109 --> 00:48:02,790 1293 00:48:02,790 --> 00:48:05,030 1294 00:48:05,030 --> 00:48:06,309 1295 00:48:06,309 --> 00:48:08,630 1296 00:48:08,630 --> 00:48:10,630 1297 00:48:10,630 --> 00:48:12,870 1298 00:48:12,870 --> 00:48:14,870 1299 00:48:14,870 --> 00:48:16,069 1300 00:48:16,069 --> 00:48:17,670 1301 00:48:17,670 --> 00:48:22,710 1302 00:48:22,710 --> 00:48:26,549 1303 00:48:26,549 --> 00:48:28,549 1304 00:48:28,549 --> 00:48:29,670 1305 00:48:29,670 --> 00:48:32,549 1306 00:48:32,549 --> 00:48:32,559 1307 00:48:32,559 --> 00:48:33,270 1308 00:48:33,270 --> 00:48:35,750 1309 00:48:35,750 --> 00:48:35,760 1310 00:48:35,760 --> 00:48:37,030 1311 00:48:37,030 --> 00:48:39,430 1312 00:48:39,430 --> 00:48:41,270 1313 00:48:41,270 --> 00:48:41,280 1314 00:48:41,280 --> 00:48:42,069 1315 00:48:42,069 --> 00:48:44,870 1316 00:48:44,870 --> 00:48:45,349 1317 00:48:45,349 --> 00:48:47,349 1318 00:48:47,349 --> 00:48:49,030 1319 00:48:49,030 --> 00:48:51,349 1320 00:48:51,349 --> 00:48:53,270 1321 00:48:53,270 --> 00:48:55,990 1322 00:48:55,990 --> 00:48:56,710 1323 00:48:56,710 --> 00:48:58,630 1324 00:48:58,630 --> 00:48:59,750 1325 00:48:59,750 --> 00:49:01,910 1326 00:49:01,910 --> 00:49:01,920 1327 00:49:01,920 --> 00:49:03,109 1328 00:49:03,109 --> 00:49:05,589 1329 00:49:05,589 --> 00:49:06,390 1330 00:49:06,390 --> 00:49:08,069 1331 00:49:08,069 --> 00:49:09,910 1332 00:49:09,910 --> 00:49:11,510 1333 00:49:11,510 --> 00:49:14,230 1334 00:49:14,230 --> 00:49:16,470 1335 00:49:16,470 --> 00:49:18,790 1336 00:49:18,790 --> 00:49:20,470 1337 00:49:20,470 --> 00:49:21,910 1338 00:49:21,910 --> 00:49:25,190 1339 00:49:25,190 --> 00:49:27,349 1340 00:49:27,349 --> 00:49:27,359 1341 00:49:27,359 --> 00:49:28,390 1342 00:49:28,390 --> 00:49:29,990 1343 00:49:29,990 --> 00:49:31,510 1344 00:49:31,510 --> 00:49:31,520 1345 00:49:31,520 --> 00:49:32,390 1346 00:49:32,390 --> 00:49:34,630 1347 00:49:34,630 --> 00:49:35,430 1348 00:49:35,430 --> 00:49:37,910 1349 00:49:37,910 --> 00:49:40,069 1350 00:49:40,069 --> 00:49:42,950 1351 00:49:42,950 --> 00:49:44,470 1352 00:49:44,470 --> 00:49:44,480 1353 00:49:44,480 --> 00:49:45,109 1354 00:49:45,109 --> 00:49:47,349 1355 00:49:47,349 --> 00:49:48,950 1356 00:49:48,950 --> 00:49:51,750 1357 00:49:51,750 --> 00:49:53,109 1358 00:49:53,109 --> 00:49:56,390 1359 00:49:56,390 --> 00:49:58,549 1360 00:49:58,549 --> 00:50:00,069 1361 00:50:00,069 --> 00:50:03,109 1362 00:50:03,109 --> 00:50:04,390 1363 00:50:04,390 --> 00:50:07,589 1364 00:50:07,589 --> 00:50:12,549 1365 00:50:12,549 --> 00:50:16,069 1366 00:50:16,069 --> 00:50:24,640