Section I - Set theory and Probability
Definition. A set is a collection of objects thought of as a whole. The objects, of which the set is a collection, are called delements or members of the set.
Sample spaces and events
The probabilities to refer to the possible outcomes of certin experiments or observations. The probability model will be seen to involve two things: * choosing a set to represent the possible outcomes; * and allocating probabilities to these possible outcomes.
Setting up a sample space S of all possible outcomes
If we want to construct an abstract model, we must decide what constitutes a possible experiment. The possible outcomes define the idealized experiment and they are usually called sample points.
The collection of all sample points is called the sample space S of the model.
The notion of event can now be introduced. An event is a subset of S. An event can contain one or more sample points. Hence an event is a subset, and it is not an element.
The allocation of probabilities to the elements of a sample space
Let the sample space S be the set
\(S=\{e_1, e_2, ...\}=E_1 \cup E_2 \cup ...,\)
where \(E_i = \{e_1\}\) are the simple events in S. Then we assume that to each event E in S we can assign a non-negative real nuber P[E], called the probability of E.
Axioms for probability
- P[E]>=0 for every event E.
- P[S]=1 for the certain event S.
- The probability P[A] of any event A is the sum of the probabilities of the simple events whose union is A.
If the sample space S is the union of the distinct simple events \(E_1, E_2,...,\) it follows from axioms II and III that \(P[S]=P[E_1]+P[E_2]+...=1\).
An important consequence of Axiom III is that if E and F are mutually exclusive events, so that \(E \cap F = \varnothing\) , then \(P[E \cap F] = P[E]+P[F]\).
Theorem 1. \(P[\varnothing]=0\), where \(\varnothing\) is the empty set.
Theorem 2. \(P[E \cap F'] = P[E] - P[F]\)
Theorem 3. \(P[F']=1-P[F]\)
Theorem 4. \(P[E \cup F] = P[E] + P[F] - P[E \cap F]\).
Conditional probability
Definition. The conditional proability of B, given A, is defined to be \(P(B \mid A) = \frac{P[B \cap A]}{p[A]}\), provided that \(P[A]!=0\).
Idependent events
Definition. The events A and B are said to be independent if and only if \(P[A \cup B] = P[A]P[B]\).
Using the definition of conditional probability, it implies that \(P[B \mid A] = P[B]\) and \(P[A \mid B] = P[A]\)
Section II - Binomial distribution
Definition.
Finding density with simulation (rbinom)
Flip 10 coins 100,000 times. The rbinom function would generate 100,000 numbers. The largest number in the sequence would be 10. That is when 10 coins all turn out to be heads through one experiment and therefore 10 times 1 which is 10.
flips<-rbinom(100000,10,0.5)
sum<-sum(flips==5)
length.flips<-length(flips)
sum
[1] 24576
length.flips
[1] 100000
sum/length
[1] 0.24576
mean(flips==5) # mean is equal to sum/length
[1] 0.24576
Calculating exact probability density (dbinom)
The probablity of getting a 5 when flipping 10 coins with probability of 0.5
dbinom(5,10,0.5)
Calculating cumulative density (pbinom)
The probabilit of getting a number no larger than 4 when flipping 10 coins with probability of 0.5.
Method 1 - calculating it through simulation
flips<-rbinom(100000,10,0.5)
mean(flips<=4)
Method 2 - calculating cumulative density using pbinom
pbinom(4,10,0.5)
Exercise
If you flip 10 coins each with a 30% probability of coming up heads, what is the probability exactly 2 of them are heads?
Answer the above question using the dbinom() function. This function takes almost the same arguments as rbinom(). The second and third arguments are size and prob, but now the first argument is x instead of n. Use x to specify where you want to evaluate the binomial density.
Confirm your answer using the rbinom() function by creating a simulation of 10,000 trials. Put this all on one line by wrapping the mean() function around the rbinom() function.
Calculate the probability that 2 are heads using dbinom
dbinom(2,10,0.3)
Confirm your answer with a simulation using rbinom
mean(rbinom(10000,10,0.3)==2)
Exercise
If you flip ten coins that each have a 30% probability of heads, what is the probability at least five are heads? If you flip ten coins that each have a 30% probability of heads, what is the probability at least five are heads?
Answer the above question using the pbinom() function. (Note that you can compute the probability that the number of heads is less than or equal to 4, then take 1 - that probability).
Confirm your answer with a simulation of 10,000 trials by finding the number of trials that result in 5 or more heads.
1 - pbinom(4, 10, .3)
mean(rbinom(10000, 10, .3) >= 5)
Varying the number of trials
In the last exercise you tried flipping ten coins with a 30% probability of heads to find the probability at least five are heads. You found that the exact answer was 1 - pbinom(4, 10, .3) = 0.1502683, then confirmed with 10,000 simulated trials.
Did you need all 10,000 trials to get an accurate answer? Would your answer have been more accurate with more trials? Try answering this question with simulations of 100, 1,000, 10,000, 100,000 trials. Which is the closest to the exact answer?
mean(rbinom(10000, 10, .3) >= 5)
mean(rbinom(100, 10, .3) >= 5)
mean(rbinom(1000, 10, .3) >= 5)
mean(rbinom(100000, 10, .3) >= 5)
Expected Value
The expected value of a binomial distribution by multiplying the size (or the number of coins), by the probability each is heads.
Exercise
Calculating the expected value What is the expected value of a binomial distribution where 25 coins are flipped, each having a 30% chance of heads?
Step1 - Calculate this using the exact formula you learned in the lecture: the expected value of the binomial is size * p. Print this result to the screen.
Step2 - Confirm with a simulation of 10,000 draws from the binomial.
25*0.3
mean(rbinom(10000,25,0.3))
Calculating the variance What is the variance of a binomial distribution where 25 coins are flipped, each having a 30% chance of heads? Step1 - Calculate this using the exact formula you learned in the lecture: the variance of the binomial is size * p * (1 - p). Print this result to the screen. Step2 - Confirm with a simulation of 10,000 trials.
# Calculate the variance using the exact formula
25*0.3*(1-0.3)
# Confirm with a simulation using rbinom
var(rbinom(10000,25,0.3))
Joint Probility
The probability of A and B is the probability of A times the probability of B. Note that this is true only if events A and B are independent: that is if reresult of A does not affect the probability of B.
Simulating the probability of A and B
You can also use simulation to estimate the probability of two events both happening. Randomly simulate 100,000 flips of coin A, each of which has a 40% chance of being heads. Save this as a variable A. Randomly simulate 100,000 flips of coin B, each of which has a 20% chance of being heads. Save this as a variable B. Use the “and” operator (&) to combine the variables A and B to estimate the probability that both A and B are heads.
# Simulate 100,000 flips of a coin with a 40% chance of heads
A <- rbinom(100000,1,0.4)
# Simulate 100,000 flips of a coin with a 20% chance of heads
B <- rbinom(100000,1,0.2)
# Estimate the probability both A and B are heads
mean (A & B)
Simulating the probability of A, B, and C
Randomly simulate 100,000 flips of A (40% chance), B (20% chance), and C (70% chance). What fraction of the time do all three coins come up heads? * You’ve already simulated A and B. Now simulate 100,000 flips of coin C, where each has a 70% chance of coming up heads. * Use A, B, and C to estimate the probability that all three coins would come up heads.
# You've already simulated 100,000 flips of coins A and B
A <- rbinom(100000, 1, .4)
B <- rbinom(100000, 1, .2)
# Simulate 100,000 flips of coin C (70% chance of heads)
C<-rbinom(100000,1,0.7)
# Estimate the probability A, B, and C are all heads
mean(A&B&C)
Solving for probability of A or B
If coins A and B are independent, and A has a 60% chance of coming up heads, and event B has a 10% chance of coming up heads, what is the probability either A or B will come up heads?
References
LS0tDQp0aXRsZTogIkZvdW5kYXRpb25zIG9mIFByb2JhYmlsaXR5IGluIFIiDQphdXRob3I6IFlhbiBMaQ0KZGF0ZTogMTMgSnVuZSAyMDIwDQpvdXRwdXQ6IA0KICBodG1sX25vdGVib29rOg0KICAgIGNvZGVfZm9sZGluZzogbm9uZQ0KLS0tDQoNCiMjIyBTZWN0aW9uIEkgLSBTZXQgdGhlb3J5IGFuZCBQcm9iYWJpbGl0eQ0KDQo8YnI+DQoNCioqRGVmaW5pdGlvbioqLiBBIHNldCBpcyBhIGNvbGxlY3Rpb24gb2Ygb2JqZWN0cyB0aG91Z2h0IG9mIGFzIGEgd2hvbGUuIFRoZSBvYmplY3RzLCBvZiB3aGljaCB0aGUgc2V0IGlzIGEgY29sbGVjdGlvbiwgYXJlIGNhbGxlZCBkZWxlbWVudHMgb3IgbWVtYmVycyBvZiB0aGUgc2V0Lg0KDQo8YnI+DQoNCiMjIyMgU2FtcGxlIHNwYWNlcyBhbmQgZXZlbnRzDQpUaGUgcHJvYmFiaWxpdGllcyB0byByZWZlciB0byB0aGUgcG9zc2libGUgb3V0Y29tZXMgb2YgY2VydGluIGV4cGVyaW1lbnRzIG9yIG9ic2VydmF0aW9ucy4NClRoZSBwcm9iYWJpbGl0eSBtb2RlbCB3aWxsIGJlIHNlZW4gdG8gaW52b2x2ZSB0d28gdGhpbmdzOg0KKiBjaG9vc2luZyBhIHNldCB0byByZXByZXNlbnQgdGhlIHBvc3NpYmxlIG91dGNvbWVzOw0KKiBhbmQgYWxsb2NhdGluZyBwcm9iYWJpbGl0aWVzIHRvIHRoZXNlIHBvc3NpYmxlIG91dGNvbWVzLg0KDQo8YnI+DQoNCiMjIyMgU2V0dGluZyB1cCBhIHNhbXBsZSBzcGFjZSBTIG9mIGFsbCBwb3NzaWJsZSBvdXRjb21lcw0KSWYgd2Ugd2FudCB0byBjb25zdHJ1Y3QgYW4gYWJzdHJhY3QgbW9kZWwsIHdlIG11c3QgZGVjaWRlIHdoYXQgY29uc3RpdHV0ZXMgYSBwb3NzaWJsZSBleHBlcmltZW50LiBUaGUgcG9zc2libGUgb3V0Y29tZXMgZGVmaW5lIHRoZSBpZGVhbGl6ZWQgZXhwZXJpbWVudCBhbmQgdGhleSBhcmUgdXN1YWxseSBjYWxsZWQgc2FtcGxlIHBvaW50cy4NCg0KVGhlIGNvbGxlY3Rpb24gb2YgYWxsIHNhbXBsZSBwb2ludHMgaXMgY2FsbGVkIHRoZSBzYW1wbGUgc3BhY2UgUyBvZiB0aGUgbW9kZWwuDQoNClRoZSBub3Rpb24gb2YgZXZlbnQgY2FuIG5vdyBiZSBpbnRyb2R1Y2VkLiBBbiBldmVudCBpcyBhIHN1YnNldCBvZiBTLiBBbiBldmVudCBjYW4gY29udGFpbiBvbmUgb3IgbW9yZSBzYW1wbGUgcG9pbnRzLiBIZW5jZSBhbiBldmVudCBpcyBhIHN1YnNldCwgYW5kIGl0IGlzIG5vdCBhbiBlbGVtZW50LiANCg0KPGJyPg0KDQojIyMjIFRoZSBhbGxvY2F0aW9uIG9mIHByb2JhYmlsaXRpZXMgdG8gdGhlIGVsZW1lbnRzIG9mIGEgc2FtcGxlIHNwYWNlDQpMZXQgdGhlIHNhbXBsZSBzcGFjZSBTIGJlIHRoZSBzZXQNCg0KJFM9XHtlXzEsIGVfMiwgLi4uXH09RV8xIFxjdXAgRV8yIFxjdXAgLi4uLCQNCg0Kd2hlcmUgJEVfaSA9IFx7ZV8xXH0kIGFyZSB0aGUgc2ltcGxlIGV2ZW50cyBpbiBTLiBUaGVuIHdlIGFzc3VtZSB0aGF0IHRvIGVhY2ggZXZlbnQgRSBpbiBTIHdlIGNhbiBhc3NpZ24gYSBub24tbmVnYXRpdmUgcmVhbCBudWJlciBQW0VdLCBjYWxsZWQgdGhlIHByb2JhYmlsaXR5IG9mIEUuIA0KDQo8YnI+DQoNCiMjIyMgKipBeGlvbXMgZm9yIHByb2JhYmlsaXR5KioNCjEuIFBbRV0+PTAgZm9yIGV2ZXJ5IGV2ZW50IEUuDQoyLiBQW1NdPTEgZm9yIHRoZSBjZXJ0YWluIGV2ZW50IFMuDQozLiBUaGUgcHJvYmFiaWxpdHkgUFtBXSBvZiBhbnkgZXZlbnQgQSBpcyB0aGUgc3VtIG9mIHRoZSBwcm9iYWJpbGl0aWVzIG9mIHRoZSBzaW1wbGUgZXZlbnRzIHdob3NlIHVuaW9uIGlzIEEuDQoNCklmIHRoZSBzYW1wbGUgc3BhY2UgUyBpcyB0aGUgdW5pb24gb2YgdGhlIGRpc3RpbmN0IHNpbXBsZSBldmVudHMgJEVfMSwgRV8yLC4uLiwkIGl0IGZvbGxvd3MgZnJvbSBheGlvbXMgSUkgYW5kIElJSSB0aGF0IA0KJFBbU109UFtFXzFdK1BbRV8yXSsuLi49MSQuDQoNCkFuIGltcG9ydGFudCBjb25zZXF1ZW5jZSBvZiBBeGlvbSBJSUkgaXMgdGhhdCBpZiBFIGFuZCBGIGFyZSBtdXR1YWxseSBleGNsdXNpdmUgZXZlbnRzLCBzbyB0aGF0ICRFIFxjYXAgRiA9IFx2YXJub3RoaW5nJCAsIHRoZW4NCiRQW0UgXGNhcCBGXSA9IFBbRV0rUFtGXSQuDQoNCjxicj4NCg0KIyMjIyAqKlRoZW9yZW0gMSoqLiAkUFtcdmFybm90aGluZ109MCQsIHdoZXJlICRcdmFybm90aGluZyQgaXMgdGhlIGVtcHR5IHNldC4NCg0KIyMjIyAqKlRoZW9yZW0gMioqLiAkUFtFIFxjYXAgRiddID0gUFtFXSAtIFBbRl0kDQoNCiMjIyMgKipUaGVvcmVtIDMqKi4gJFBbRiddPTEtUFtGXSQNCg0KIyMjIyAqKlRoZW9yZW0gNCoqLiAkUFtFIFxjdXAgRl0gPSBQW0VdICsgUFtGXSAtIFBbRSBcY2FwIEZdJC4NCg0KPGJyPg0KDQojIyMjIENvbmRpdGlvbmFsIHByb2JhYmlsaXR5DQpEZWZpbml0aW9uLiBUaGUgY29uZGl0aW9uYWwgcHJvYWJpbGl0eSBvZiBCLCBnaXZlbiBBLCBpcyBkZWZpbmVkIHRvIGJlIA0KJFAoQiBcbWlkIEEpID0gXGZyYWN7UFtCIFxjYXAgQV19e3BbQV19JCwNCnByb3ZpZGVkIHRoYXQgJFBbQV0hPTAkLg0KDQo8YnI+DQoNCiMjIyMgSWRlcGVuZGVudCBldmVudHMNCkRlZmluaXRpb24uIFRoZSBldmVudHMgQSBhbmQgQiBhcmUgc2FpZCB0byBiZSBpbmRlcGVuZGVudCBpZiBhbmQgb25seSBpZg0KJFBbQSBcY3VwIEJdID0gUFtBXVBbQl0kLg0KDQpVc2luZyB0aGUgZGVmaW5pdGlvbiBvZiBjb25kaXRpb25hbCBwcm9iYWJpbGl0eSwgaXQgaW1wbGllcyB0aGF0IA0KJFBbQiBcbWlkIEFdID0gUFtCXSQgYW5kICRQW0EgXG1pZCBCXSA9IFBbQV0kIA0KDQo8YnI+DQoNCjwhLS0gU2Vjb25kIHBhZ2UgLS0+IA0KPCEtLSA9PT09PT09PT09PT09PT09PT09PSAtLT4NCg0KIyMjIFNlY3Rpb24gSUkgLSBCaW5vbWlhbCBkaXN0cmlidXRpb24NCg0KPGJyPg0KDQpEZWZpbml0aW9uLiANCg0KIyMjIyBGaW5kaW5nIGRlbnNpdHkgd2l0aCBzaW11bGF0aW9uIChyYmlub20pDQpGbGlwIDEwIGNvaW5zIDEwMCwwMDAgdGltZXMuIFRoZSByYmlub20gZnVuY3Rpb24gd291bGQgZ2VuZXJhdGUgMTAwLDAwMCBudW1iZXJzLiBUaGUgbGFyZ2VzdCBudW1iZXIgaW4gdGhlIHNlcXVlbmNlIHdvdWxkIGJlIDEwLiBUaGF0IGlzIHdoZW4gMTAgY29pbnMgYWxsIHR1cm4gb3V0IHRvIGJlIGhlYWRzIHRocm91Z2ggb25lIGV4cGVyaW1lbnQgYW5kIHRoZXJlZm9yZSAxMCB0aW1lcyAxIHdoaWNoIGlzIDEwLg0KDQpgYGB7ciBlY2hvPVRSVUUsIGVycm9yPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBjb2xsYXBzZT1UUlVFfQ0KZmxpcHM8LXJiaW5vbSgxMDAwMDAsMTAsMC41KQ0Kc3VtPC1zdW0oZmxpcHM9PTUpDQpsZW5ndGguZmxpcHM8LWxlbmd0aChmbGlwcykNCnN1bQ0KbGVuZ3RoLmZsaXBzDQpzdW0vbGVuZ3RoDQptZWFuKGZsaXBzPT01KSAjIG1lYW4gaXMgZXF1YWwgdG8gc3VtL2xlbmd0aA0KDQoNCmBgYA0KDQojIyMjIENhbGN1bGF0aW5nIGV4YWN0IHByb2JhYmlsaXR5IGRlbnNpdHkgKGRiaW5vbSkNCg0KVGhlIHByb2JhYmxpdHkgb2YgZ2V0dGluZyBhIDUgd2hlbiBmbGlwcGluZyAxMCBjb2lucyB3aXRoIHByb2JhYmlsaXR5IG9mIDAuNQ0KYGBge3J9DQpkYmlub20oNSwxMCwwLjUpDQpgYGANCg0KDQojIyMjIENhbGN1bGF0aW5nIGN1bXVsYXRpdmUgZGVuc2l0eSAocGJpbm9tKQ0KDQpUaGUgcHJvYmFiaWxpdCBvZiBnZXR0aW5nIGEgbnVtYmVyIG5vIGxhcmdlciB0aGFuIDQgd2hlbiBmbGlwcGluZyAxMCBjb2lucyB3aXRoIHByb2JhYmlsaXR5IG9mIDAuNS4NCg0KTWV0aG9kIDEgLSBjYWxjdWxhdGluZyBpdCB0aHJvdWdoIHNpbXVsYXRpb24NCmBgYHtyfQ0KZmxpcHM8LXJiaW5vbSgxMDAwMDAsMTAsMC41KQ0KbWVhbihmbGlwczw9NCkNCmBgYA0KDQpNZXRob2QgMiAtIGNhbGN1bGF0aW5nIGN1bXVsYXRpdmUgZGVuc2l0eSB1c2luZyBwYmlub20NCmBgYHtyfQ0KcGJpbm9tKDQsMTAsMC41KQ0KYGBgDQoNCiMjIyMgRXhlcmNpc2UNCklmIHlvdSBmbGlwIDEwIGNvaW5zIGVhY2ggd2l0aCBhIDMwJSBwcm9iYWJpbGl0eSBvZiBjb21pbmcgdXAgaGVhZHMsIHdoYXQgaXMgdGhlIHByb2JhYmlsaXR5IGV4YWN0bHkgMiBvZiB0aGVtIGFyZSBoZWFkcz8NCg0KQW5zd2VyIHRoZSBhYm92ZSBxdWVzdGlvbiB1c2luZyB0aGUgZGJpbm9tKCkgZnVuY3Rpb24uIFRoaXMgZnVuY3Rpb24gdGFrZXMgYWxtb3N0IHRoZSBzYW1lIGFyZ3VtZW50cyBhcyByYmlub20oKS4gVGhlIHNlY29uZCBhbmQgdGhpcmQgYXJndW1lbnRzIGFyZSBzaXplIGFuZCBwcm9iLCBidXQgbm93IHRoZSBmaXJzdCBhcmd1bWVudCBpcyB4IGluc3RlYWQgb2Ygbi4gVXNlIHggdG8gc3BlY2lmeSB3aGVyZSB5b3Ugd2FudCB0byBldmFsdWF0ZSB0aGUgYmlub21pYWwgZGVuc2l0eS4NCg0KQ29uZmlybSB5b3VyIGFuc3dlciB1c2luZyB0aGUgcmJpbm9tKCkgZnVuY3Rpb24gYnkgY3JlYXRpbmcgYSBzaW11bGF0aW9uIG9mIDEwLDAwMCB0cmlhbHMuIFB1dCB0aGlzIGFsbCBvbiBvbmUgbGluZSBieSB3cmFwcGluZyB0aGUgbWVhbigpIGZ1bmN0aW9uIGFyb3VuZCB0aGUgcmJpbm9tKCkgZnVuY3Rpb24uDQoNCiMjIyMgQ2FsY3VsYXRlIHRoZSBwcm9iYWJpbGl0eSB0aGF0IDIgYXJlIGhlYWRzIHVzaW5nIGRiaW5vbQ0KYGBge3J9DQpkYmlub20oMiwxMCwwLjMpDQpgYGANCiMjIyMgQ29uZmlybSB5b3VyIGFuc3dlciB3aXRoIGEgc2ltdWxhdGlvbiB1c2luZyByYmlub20NCmBgYHtyfQ0KbWVhbihyYmlub20oMTAwMDAsMTAsMC4zKT09MikNCmBgYA0KDQojIyMgRXhlcmNpc2UNCklmIHlvdSBmbGlwIHRlbiBjb2lucyB0aGF0IGVhY2ggaGF2ZSBhIDMwJSBwcm9iYWJpbGl0eSBvZiBoZWFkcywgd2hhdCBpcyB0aGUgcHJvYmFiaWxpdHkgYXQgbGVhc3QgZml2ZSBhcmUgaGVhZHM/DQpJZiB5b3UgZmxpcCB0ZW4gY29pbnMgdGhhdCBlYWNoIGhhdmUgYSAzMCUgcHJvYmFiaWxpdHkgb2YgaGVhZHMsIHdoYXQgaXMgdGhlIHByb2JhYmlsaXR5IGF0IGxlYXN0IGZpdmUgYXJlIGhlYWRzPw0KDQpBbnN3ZXIgdGhlIGFib3ZlIHF1ZXN0aW9uIHVzaW5nIHRoZSBwYmlub20oKSBmdW5jdGlvbi4gKE5vdGUgdGhhdCB5b3UgY2FuIGNvbXB1dGUgdGhlIHByb2JhYmlsaXR5IHRoYXQgdGhlIG51bWJlciBvZiBoZWFkcyBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gNCwgdGhlbiB0YWtlIDEgLSB0aGF0IHByb2JhYmlsaXR5KS4NCg0KQ29uZmlybSB5b3VyIGFuc3dlciB3aXRoIGEgc2ltdWxhdGlvbiBvZiAxMCwwMDAgdHJpYWxzIGJ5IGZpbmRpbmcgdGhlIG51bWJlciBvZiB0cmlhbHMgdGhhdCByZXN1bHQgaW4gNSBvciBtb3JlIGhlYWRzLg0KDQpgYGB7cn0NCjEgLSBwYmlub20oNCwgMTAsIC4zKQ0KDQptZWFuKHJiaW5vbSgxMDAwMCwgMTAsIC4zKSA+PSA1KQ0KDQpgYGANCg0KIyMjIFZhcnlpbmcgdGhlIG51bWJlciBvZiB0cmlhbHMNCg0KSW4gdGhlIGxhc3QgZXhlcmNpc2UgeW91IHRyaWVkIGZsaXBwaW5nIHRlbiBjb2lucyB3aXRoIGEgMzAlIHByb2JhYmlsaXR5IG9mIGhlYWRzIHRvIGZpbmQgdGhlIHByb2JhYmlsaXR5IGF0IGxlYXN0IGZpdmUgYXJlIGhlYWRzLiBZb3UgZm91bmQgdGhhdCB0aGUgZXhhY3QgYW5zd2VyIHdhcyAxIC0gcGJpbm9tKDQsIDEwLCAuMykgPSAwLjE1MDI2ODMsIHRoZW4gY29uZmlybWVkIHdpdGggMTAsMDAwIHNpbXVsYXRlZCB0cmlhbHMuDQoNCkRpZCB5b3UgbmVlZCBhbGwgMTAsMDAwIHRyaWFscyB0byBnZXQgYW4gYWNjdXJhdGUgYW5zd2VyPyBXb3VsZCB5b3VyIGFuc3dlciBoYXZlIGJlZW4gbW9yZSBhY2N1cmF0ZSB3aXRoIG1vcmUgdHJpYWxzPw0KVHJ5IGFuc3dlcmluZyB0aGlzIHF1ZXN0aW9uIHdpdGggc2ltdWxhdGlvbnMgb2YgMTAwLCAxLDAwMCwgMTAsMDAwLCAxMDAsMDAwIHRyaWFscy4NCldoaWNoIGlzIHRoZSBjbG9zZXN0IHRvIHRoZSBleGFjdCBhbnN3ZXI/DQoNCmBgYHtyfQ0KbWVhbihyYmlub20oMTAwMDAsIDEwLCAuMykgPj0gNSkNCm1lYW4ocmJpbm9tKDEwMCwgMTAsIC4zKSA+PSA1KQ0KbWVhbihyYmlub20oMTAwMCwgMTAsIC4zKSA+PSA1KQ0KbWVhbihyYmlub20oMTAwMDAwLCAxMCwgLjMpID49IDUpDQoNCmBgYA0KIyMjIEV4cGVjdGVkIFZhbHVlDQpUaGUgZXhwZWN0ZWQgdmFsdWUgb2YgYSBiaW5vbWlhbCBkaXN0cmlidXRpb24gYnkgbXVsdGlwbHlpbmcgdGhlIHNpemUgKG9yIHRoZSBudW1iZXIgb2YgY29pbnMpLCBieSB0aGUgcHJvYmFiaWxpdHkgZWFjaCBpcyBoZWFkcy4gDQoNCiMjIyBFeGVyY2lzZQ0KQ2FsY3VsYXRpbmcgdGhlIGV4cGVjdGVkIHZhbHVlDQpXaGF0IGlzIHRoZSBleHBlY3RlZCB2YWx1ZSBvZiBhIGJpbm9taWFsIGRpc3RyaWJ1dGlvbiB3aGVyZSAyNSBjb2lucyBhcmUgZmxpcHBlZCwgZWFjaCBoYXZpbmcgYSAzMCUgY2hhbmNlIG9mIGhlYWRzPw0KDQpTdGVwMSAtIENhbGN1bGF0ZSB0aGlzIHVzaW5nIHRoZSBleGFjdCBmb3JtdWxhIHlvdSBsZWFybmVkIGluIHRoZSBsZWN0dXJlOiB0aGUgZXhwZWN0ZWQgdmFsdWUgb2YgdGhlIGJpbm9taWFsIGlzIHNpemUgKiBwLiBQcmludCB0aGlzIHJlc3VsdCB0byB0aGUgc2NyZWVuLg0KDQpTdGVwMiAtIAlDb25maXJtIHdpdGggYSBzaW11bGF0aW9uIG9mIDEwLDAwMCBkcmF3cyBmcm9tIHRoZSBiaW5vbWlhbC4NCg0KYGBge3J9DQoyNSowLjMNCg0KbWVhbihyYmlub20oMTAwMDAsMjUsMC4zKSkNCg0KYGBgDQpDYWxjdWxhdGluZyB0aGUgdmFyaWFuY2UNCldoYXQgaXMgdGhlIHZhcmlhbmNlIG9mIGEgYmlub21pYWwgZGlzdHJpYnV0aW9uIHdoZXJlIDI1IGNvaW5zIGFyZSBmbGlwcGVkLCBlYWNoIGhhdmluZyBhIDMwJSBjaGFuY2Ugb2YgaGVhZHM/DQpTdGVwMSAtIENhbGN1bGF0ZSB0aGlzIHVzaW5nIHRoZSBleGFjdCBmb3JtdWxhIHlvdSBsZWFybmVkIGluIHRoZSBsZWN0dXJlOiB0aGUgdmFyaWFuY2Ugb2YgdGhlIGJpbm9taWFsIGlzIHNpemUgKiBwICogKDEgLSBwKS4gUHJpbnQgdGhpcyByZXN1bHQgdG8gdGhlIHNjcmVlbi4NClN0ZXAyIC0JQ29uZmlybSB3aXRoIGEgc2ltdWxhdGlvbiBvZiAxMCwwMDAgdHJpYWxzLg0KDQpgYGB7cn0NCiMgQ2FsY3VsYXRlIHRoZSB2YXJpYW5jZSB1c2luZyB0aGUgZXhhY3QgZm9ybXVsYQ0KMjUqMC4zKigxLTAuMykNCiMgQ29uZmlybSB3aXRoIGEgc2ltdWxhdGlvbiB1c2luZyByYmlub20NCnZhcihyYmlub20oMTAwMDAsMjUsMC4zKSkNCg0KYGBgDQoNCiMjIyBKb2ludCBQcm9iaWxpdHkNClRoZSBwcm9iYWJpbGl0eSBvZiBBIGFuZCBCIGlzIHRoZSBwcm9iYWJpbGl0eSBvZiBBIHRpbWVzIHRoZSBwcm9iYWJpbGl0eSBvZiBCLiANCk5vdGUgdGhhdCB0aGlzIGlzIHRydWUgb25seSBpZiBldmVudHMgQSBhbmQgQiBhcmUgaW5kZXBlbmRlbnQ6IHRoYXQgaXMgaWYgcmVyZXN1bHQgb2YgQSBkb2VzIG5vdCBhZmZlY3QgdGhlIHByb2JhYmlsaXR5IG9mIEIuDQoNCiMjIyMgU2ltdWxhdGluZyB0aGUgcHJvYmFiaWxpdHkgb2YgQSBhbmQgQg0KWW91IGNhbiBhbHNvIHVzZSBzaW11bGF0aW9uIHRvIGVzdGltYXRlIHRoZSBwcm9iYWJpbGl0eSBvZiB0d28gZXZlbnRzIGJvdGggaGFwcGVuaW5nLg0KUmFuZG9tbHkgc2ltdWxhdGUgMTAwLDAwMCBmbGlwcyBvZiBjb2luIEEsIGVhY2ggb2Ygd2hpY2ggaGFzIGEgNDAlIGNoYW5jZSBvZiBiZWluZyBoZWFkcy4gU2F2ZSB0aGlzIGFzIGEgdmFyaWFibGUgQS4NClJhbmRvbWx5IHNpbXVsYXRlIDEwMCwwMDAgZmxpcHMgb2YgY29pbiBCLCBlYWNoIG9mIHdoaWNoIGhhcyBhIDIwJSBjaGFuY2Ugb2YgYmVpbmcgaGVhZHMuIFNhdmUgdGhpcyBhcyBhIHZhcmlhYmxlIEIuDQpVc2UgdGhlICJhbmQiIG9wZXJhdG9yICgmKSB0byBjb21iaW5lIHRoZSB2YXJpYWJsZXMgQSBhbmQgQiB0byBlc3RpbWF0ZSB0aGUgcHJvYmFiaWxpdHkgdGhhdCBib3RoIEEgYW5kIEIgYXJlIGhlYWRzLg0KDQoNCmBgYHtyfQ0KIyBTaW11bGF0ZSAxMDAsMDAwIGZsaXBzIG9mIGEgY29pbiB3aXRoIGEgNDAlIGNoYW5jZSBvZiBoZWFkcw0KQSA8LSByYmlub20oMTAwMDAwLDEsMC40KQ0KIyBTaW11bGF0ZSAxMDAsMDAwIGZsaXBzIG9mIGEgY29pbiB3aXRoIGEgMjAlIGNoYW5jZSBvZiBoZWFkcw0KQiA8LSByYmlub20oMTAwMDAwLDEsMC4yKQ0KIyBFc3RpbWF0ZSB0aGUgcHJvYmFiaWxpdHkgYm90aCBBIGFuZCBCIGFyZSBoZWFkcw0KbWVhbiAoQSAmIEIpDQoNCmBgYA0KDQojIyMjIFNpbXVsYXRpbmcgdGhlIHByb2JhYmlsaXR5IG9mIEEsIEIsIGFuZCBDDQoNClJhbmRvbWx5IHNpbXVsYXRlIDEwMCwwMDAgZmxpcHMgb2YgQSAoNDAlIGNoYW5jZSksIEIgKDIwJSBjaGFuY2UpLCBhbmQgQyAoNzAlIGNoYW5jZSkuIFdoYXQgZnJhY3Rpb24gb2YgdGhlIHRpbWUgZG8gYWxsIHRocmVlIGNvaW5zIGNvbWUgdXAgaGVhZHM/DQoqIFlvdSd2ZSBhbHJlYWR5IHNpbXVsYXRlZCBBIGFuZCBCLiBOb3cgc2ltdWxhdGUgMTAwLDAwMCBmbGlwcyBvZiBjb2luIEMsIHdoZXJlIGVhY2ggaGFzIGEgNzAlIGNoYW5jZSBvZiBjb21pbmcgdXAgaGVhZHMuDQoqIFVzZSBBLCBCLCBhbmQgQyB0byBlc3RpbWF0ZSB0aGUgcHJvYmFiaWxpdHkgdGhhdCBhbGwgdGhyZWUgY29pbnMgd291bGQgY29tZSB1cCBoZWFkcy4NCg0KYGBge3J9DQojIFlvdSd2ZSBhbHJlYWR5IHNpbXVsYXRlZCAxMDAsMDAwIGZsaXBzIG9mIGNvaW5zIEEgYW5kIEINCkEgPC0gcmJpbm9tKDEwMDAwMCwgMSwgLjQpDQpCIDwtIHJiaW5vbSgxMDAwMDAsIDEsIC4yKQ0KIyBTaW11bGF0ZSAxMDAsMDAwIGZsaXBzIG9mIGNvaW4gQyAoNzAlIGNoYW5jZSBvZiBoZWFkcykNCkM8LXJiaW5vbSgxMDAwMDAsMSwwLjcpDQojIEVzdGltYXRlIHRoZSBwcm9iYWJpbGl0eSBBLCBCLCBhbmQgQyBhcmUgYWxsIGhlYWRzDQptZWFuKEEmQiZDKQ0KDQpgYGANCg0KIyMjIyBTb2x2aW5nIGZvciBwcm9iYWJpbGl0eSBvZiBBIG9yIEINCg0KSWYgY29pbnMgQSBhbmQgQiBhcmUgaW5kZXBlbmRlbnQsIGFuZCBBIGhhcyBhIDYwJSBjaGFuY2Ugb2YgY29taW5nIHVwIGhlYWRzLCBhbmQgZXZlbnQgQiBoYXMgYSAxMCUgY2hhbmNlIG9mIGNvbWluZyB1cCBoZWFkcywgd2hhdCBpcyB0aGUgcHJvYmFiaWxpdHkgZWl0aGVyIEEgb3IgQiB3aWxsIGNvbWUgdXAgaGVhZHM/DQoNCiMgUmVmZXJlbmNlcw0K