1 Sociology

1.1 Plots of the Sociology department

snet1_g <- igraph::graph_from_adjacency_matrix(snet1, mode = c("undirected"))
snet2_g <- igraph::graph_from_adjacency_matrix(snet2, mode = c("undirected"))
snet3_g <- igraph::graph_from_adjacency_matrix(snet3, mode = c("undirected"))

socdef_df$twitter_dum[socdef_df$id==36]<- 1
socdef_df$twitcol <- ifelse(socdef_df$twitter_dum == 0, "#56B4E9", "#66ff99")

#Dit zou ik nog even moeten checken of dit klopt, want er lijken ineens ties weg te vallen door die coördinaten toe te voegen?
l <- igraph::layout_with_mds(snet1_g)
l[14,1] <- 0
l1 <- igraph::layout_with_mds(snet2_g)
l1[14,1] <- 0
l2 <- igraph::layout_with_mds(snet3_g)
l2[14,1] <- 0

#Wat wil ik met de nummers in de plot, moet ik die nog veranderen in namen? Maar wil het graag anoniem houden.
plot(snet1_g, vertex.color = socdef_df$twitcol, vertex.size=socdef_df$ki,  vertex.size = 10, vertex.frame.color = "gray",
    vertex.label.color = "black", vertex.label.family = "Helvetica", vertex.label.cex = 0.7, vertex.label.dist = 0.8,
    edge.curved = 0.2, edge.arrow.size = 0.5, layout=l)

plot(snet2_g, vertex.color = socdef_df$twitcol, vertex.size=socdef_df$ki,  vertex.size = 10, vertex.frame.color = "gray",
    vertex.label.color = "black", vertex.label.family = "Helvetica", vertex.label.cex = 0.7, vertex.label.dist = 0.8,
    edge.curved = 0.2, edge.arrow.size = 0.5, layout=l1)

plot(snet3_g, vertex.color = socdef_df$twitcol, vertex.size=socdef_df$ki,  vertex.size = 10, vertex.frame.color = "gray",
    vertex.label.color = "black", vertex.label.family = "Helvetica", vertex.label.cex = 0.7, vertex.label.dist = 0.8,
    edge.curved = 0.2, edge.arrow.size = 0.5, layout=l2)

From the plots of the Sociology department it’s visible that there are quite a lot of co-publications within the network of Sociology. The first plot (of the year 2016-2017) shows that many scientists did not co-publish yet, but this increased over the years. This can be explained by the fact that a number of (younger) scientists did not yet work at the department in e.g. 2016, which results in no co-publication tie. Since node 14 is the most “productive” in the sense of co-publishing with others, I have put this node central in all the plots to show the evolution. This is an older scientist who has had more opportunities to publish with other individuals of the staff.

Another conclusion that can be drawn from the plot, is that individuals with a higher k-index do not have more co-publication ties. As I based the vertex size on the k-index, a higher k-index results in a larger vertex in the plot. It is visible that node 28 and 30 have the highest k-index, but this did not result in co-publications for node 30. For node 28, there is an increase of 3 co-publication ties when comparing the latter 2 plots. This could signal that this scientist is attractive to others because of the k-index, but this conclusion cannot be drawn yet from this plot alone. Therefore, this plot does not hint at selection effects based on k-index.

1.2 Descriptives of the Sociology network

sdegree <- igraph::degree(snet1_g)
sdegree2 <- igraph::degree(snet2_g)
sdegree3 <- igraph::degree(snet3_g)


#par(mfrow=c(3,1))
hist(sdegree, col="#99d6ff")

hist(sdegree2, col="#99d6ff")

hist(sdegree3, col="#99d6ff")

In the histograms above it is shown that the degree of the network is right-skewed. This means that most scientists in the network don’t have many other scientists within the department they co-published with. This is strongest for first the histogram, showing the first wave (2016-2017). In the following year, there still is a right-skewed distribution of the degrees, but there are a little more staff members in the tail of the distribution, meaning that these scientists have quite a lot of copublication ties. This occurs the most strongly in the histogram of the last years (2020 until now).

igraph::dyad.census(snet1_g)
#> $mut
#> [1] 26
#> 
#> $asym
#> [1] 0
#> 
#> $null
#> [1] 502
igraph::triad.census(snet1_g)
#>  [1] 4750    0  616    0    0    0    0    0    0    0   80    0    0    0    0   10
igraph::edge_density(snet1_g)
#> [1] 0.04924242
igraph::dyad.census(snet2_g)
#> $mut
#> [1] 27
#> 
#> $asym
#> [1] 0
#> 
#> $null
#> [1] 501
igraph::triad.census(snet2_g)
#>  [1] 4715    0  656    0    0    0    0    0    0    0   74    0    0    0    0   11
igraph::edge_density(snet2_g)
#> [1] 0.05113636
igraph::dyad.census(snet3_g)
#> $mut
#> [1] 38
#> 
#> $asym
#> [1] 0
#> 
#> $null
#> [1] 490
igraph::triad.census(snet3_g)
#>  [1] 4398    0  949    0    0    0    0    0    0    0   98    0    0    0    0   11
igraph::edge_density(snet3_g)
#> [1] 0.0719697

Regarding density and dyads in the network, there are 26 dyads in the first wave. The edge density is 0.049, which means that the number of edges existing in the network is relatively low compared to the the maximum number of edges there could possibly be. In the second wave, there is an increase of 1 dyad, and the edge density also has increased slightly towards a number of 0.051. In the last wave, there are 38 dyads and the edge density has increased to 0.072. Regarding the triad census [@davis1967structure], there are first 10 and then 11 complete triads, and first a decrease and then an increase of triads with one central node. Still, the triad 003 (with 3 null relations) occurs most. All in all, the co-publications within the network of sociology have increased, and over the years, the scientists at the department have used more of their opportunities to collaborate with members within the network.

igraph::transitivity(snet1_g)
#> [1] 0.2727273
igraph::transitivity(snet2_g)
#> [1] 0.3084112
igraph::transitivity(snet3_g)
#> [1] 0.2519084

Last but not least, the transitivity effect shows whether co-authors of co-authors become co-authors. For this network, no linear change can be observed. In the first wave, there is a transitivity number of 0.27. If one staff member A is connected to staff member B and staff member C, the probability is 0.27 that staff member B and C will also co-publish. In the second wave, we see that this probability has even increased to 0.308. In the last wave, the transitivity number is the lowest. Possibly, the fact that there are more mebers in the networks could increase the opportunities to co-publish with others, not depending on co-authors of co-authors.

1.3 K-index at the Sociology department

twsocbar <- ggplot2:::ggplot(socdef_df, aes(factor(twitter_dum), fill = factor(twitter_dum))) + geom_bar()
twsocbar <- twsocbar + scale_fill_manual(values=c("#56B4E9", "#66ff99"))
ggplotly(twsocbar)

Before diving into the k-index, it is insightful to see how many of the scientist at the department of Sociology have Twitter. In the above (interactive) graph, it is shown that 13 scientist do not have Twitter, while 20 scientists do have Twitter.

sel <- socdef_df$twitter_dum==1
hist(socdef_df$ki[sel], col="lightblue", border="darkblue")

The above histogram shows the distribution of the k-index of scientists at the Sociology department. The distribution is right-skewed: Most scientists have a k-index between 0 and 2, and a few scientists have a high index. A few staff members have a k-index that would be categorized as “Kardashian Scientist” (Hall, 2014)

modelki <- lm(ki ~ gender + dutch + pub_first, data=socdef_df)
summary(modelki)
#> 
#> Call:
#> lm(formula = ki ~ gender + dutch + pub_first, data = socdef_df)
#> 
#> Residuals:
#>     Min      1Q  Median      3Q     Max 
#> -3.5728 -0.9822 -0.0788  0.9981  4.8327 
#> 
#> Coefficients:
#>               Estimate Std. Error t value Pr(>|t|)   
#> (Intercept) -321.56977   95.80579  -3.356  0.00222 **
#> gendermale     2.08062    0.75754   2.747  0.01024 * 
#> dutch         -2.63707    0.92753  -2.843  0.00810 **
#> pub_first      0.16104    0.04749   3.391  0.00203 **
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> Residual standard error: 1.896 on 29 degrees of freedom
#> Multiple R-squared:  0.4394, Adjusted R-squared:  0.3814 
#> F-statistic: 7.577 on 3 and 29 DF,  p-value: 0.0006882

Lastly, it is insightful to see to what extent the k-index is predicted by other factors. The above linear regression teaches us that male scientist of Sociology have a significantly higher k-index than female staff members. It is also visible that Dutch scientists have a significantly lower k-index than non-Dutch scientists. Lastly, age is significantly related to the k-index: as age decreases, the k-index increases. Younger individuals thus have a higher k-index than older individuals. These effects can also be seen in the (interactive) graph below.

regplotsoc <- ggplot(socdef_df, mapping = aes(x = pub_first, y = ki, color=gender)) +
    geom_line() 
 
ggplotly(regplotsoc)

2 Data science

dnet1 <- dnet_array[ ,, 1]
dnet2 <- dnet_array[ ,, 2]
dnet3 <- dnet_array[ ,, 3]
diag(dnet1) <- 0
diag(dnet2) <- 0
diag(dnet3) <- 0

2.1 Plots of the Data Science department

dnet1_g <- igraph::graph_from_adjacency_matrix(dnet1, mode = c("undirected"))
dnet2_g <- igraph::graph_from_adjacency_matrix(dnet2, mode = c("undirected"))
dnet3_g <- igraph::graph_from_adjacency_matrix(dnet3, mode = c("undirected"))

datadef_df$twitcol <- ifelse(datadef_df$twitter_dum == 0, "#56B4E9", "#66ff99")

#Dit zou ik nog even moeten checken of dit klopt, want er lijken ineens ties weg te vallen door die coördinaten toe te voegen?
# l <- igraph::layout_with_mds(snet1_g)
# l[14,1] <- 0
# l1 <- igraph::layout_with_mds(snet2_g)
# l1[14,1] <- 0
# l2 <- igraph::layout_with_mds(snet3_g)
# l2[14,1] <- 0

#Wat wil ik met de nummers in de plot, moet ik die nog veranderen in namen? Maar wil het graag anoniem houden.
plot(dnet1_g, vertex.color = datadef_df$twitcol, vertex.size=datadef_df$ki,  vertex.size = 10, vertex.frame.color = "gray",
    vertex.label.color = "black", vertex.label.family = "Helvetica", vertex.label.cex = 0.7, vertex.label.dist = 0.8,
    edge.curved = 0.2, edge.arrow.size = 0.5)

plot(dnet2_g, vertex.color = datadef_df$twitcol, vertex.size=datadef_df$ki,  vertex.size = 10, vertex.frame.color = "gray",
    vertex.label.color = "black", vertex.label.family = "Helvetica", vertex.label.cex = 0.7, vertex.label.dist = 0.8,
    edge.curved = 0.2, edge.arrow.size = 0.5)

plot(dnet3_g, vertex.color = datadef_df$twitcol, vertex.size=datadef_df$ki,  vertex.size = 10, vertex.frame.color = "gray",
    vertex.label.color = "black", vertex.label.family = "Helvetica", vertex.label.cex = 0.7, vertex.label.dist = 0.8,
    edge.curved = 0.2, edge.arrow.size = 0.5)

In the network plots of Data Science, it shows that during the year 2016-2017 there were not many co-publications. Just like at the Sociology department, it is likely that a high number of scientists did not work at the department yet. In the years 2018-2019, there is a strong increase in the co-publications of the staff members of Data Science. Node 1, 3 and 5 seem to have a central role in the network, with the highest number of edges, and thus the most co-pulications with other scientists within the department. In the last plot, again an increase in co-publications is visible. Node 1, 3 and 5 still have a central role in the network, but there now are other nodes with a relative high number of co-publications as well.Similarly to the Sociology department, there are only a few nodes with a high k-index (shown by the largest vertex size), and it does not seem as if these scientists are especially attractive to others to co-publish an article.

2.2 Descriptives of the Data Science network

ddegree1 <- igraph::degree(dnet1_g)
hist(ddegree1, col="purple")

ddegree2 <- igraph::degree(dnet2_g)
hist(ddegree2, col="purple")

ddegree3 <- igraph::degree(dnet3_g)
hist(ddegree3, col="purple")

Similarly to Sociology, the Data Science department shows a right-skewed distribution of the degrees. In the first wave, most scientists had not co-published, or only little. In the histogram of the second wave, it can be observed that the degrees remain skewed to the right. Furthermore, it is visible that one scientist has more than 8 copublications, and that in general, the number of outdegrees increased. However, most individuals still have no co-publications. In the last histogram, more scientists are in the tail, as also observed at the Sociology department. Furthermore, there are even staff scientist with 10-11 copublications. This is a higher number of copublications than observed at the Sociology department.

igraph::dyad.census(dnet1_g)
#> $mut
#> [1] 22
#> 
#> $asym
#> [1] 0
#> 
#> $null
#> [1] 1013
igraph::triad.census(dnet1_g)
#>  [1] 14245     0   909     0     0     0     0     0     0     0    19     0     0     0     0     7
igraph::edge_density(dnet1_g)
#> [1] 0.02125604
igraph::dyad.census(dnet2_g)
#> $mut
#> [1] 38
#> 
#> $asym
#> [1] 0
#> 
#> $null
#> [1] 997
igraph::triad.census(dnet2_g)
#>  [1] 13611     0  1484     0     0     0     0     0     0     0    67     0     0     0     0    18
igraph::edge_density(dnet2_g)
#> [1] 0.03671498
igraph::dyad.census(dnet3_g)
#> $mut
#> [1] 70
#> 
#> $asym
#> [1] 0
#> 
#> $null
#> [1] 965
igraph::triad.census(dnet3_g)
#>  [1] 12395     0  2537     0     0     0     0     0     0     0   201     0     0     0     0    47
igraph::edge_density(dnet3_g)
#> [1] 0.06763285

Looking at the dyad census and density, the number of dyads in 2016-2017 counts 22. The edge density is 0.0212. Both of these numbers are lower than at the Sociology department. In 2018-2019, the number of dyads has increased to 38 and the edge density has increased to 0.037. This is still lower than the edge density within the sociology department in the same years. In the last years, there are 70 dyads and the edge density increased towards a number of 0.068. This remains a little lower than the edge density of the Sociology department at that time. With regard to the triads, we see a similar pattern as at the Sociology department. However, there are more complete triads at Data Science, and this number has increased rather strongly over the years.

igraph::transitivity(dnet1_g)
#> [1] 0.525
igraph::transitivity(dnet2_g)
#> [1] 0.446281
igraph::transitivity(dnet3_g)
#> [1] 0.4122807

Regarding the transitivity, this has decreased at Data Science over the years. In the first period, the probability that scientist B and C - both as co-authors of scientist A - would co-publish was 0.52. In the next year, this decreased to a 45% chance, while in the last year this chance is 41,2%. Still, this is a higher number than observed at the Sociology department. Also, there is a linear decrease at the department of Data Science, while at the Sociology department no linear trend could be observed. In conclusion, staff members at Data Science are more likely to co-publish with co-authors of their co-authors than at Sociology, which is in line with the larger increase in triads.

2.3 K-index at the department of Data Science

twdatbar <- ggplot2:::ggplot(datadef_df, aes(factor(twitter_dum), fill = factor(twitter_dum))) + geom_bar()
twdatbar <- twdatbar + scale_fill_manual(values=c("#56B4E9", "#66ff99"))
ggplotly(twdatbar)

At the Data Science department, the majority of scientist has a Twitter account: 30 scientists have a Twitter account while 16 do not have one.

sel2 <- datadef_df$twitter_dum==1
hist(datadef_df$ki[sel2], col="red")

The histogram shows that at the Data Science department, the distribution of the k-index is even more skewed than at the Sociology department. Most scientist have a k-index between 0 and 1, while only a few scientists have a k-index higher than that. Approximately two scientist would be categorized as “Kardashian Scientists” by Hall (2014)

modelki2 <- lm(ki ~ gender + dutch + pub_first, data=datadef_df)
summary(modelki2)
#> 
#> Call:
#> lm(formula = ki ~ gender + dutch + pub_first, data = datadef_df)
#> 
#> Residuals:
#>     Min      1Q  Median      3Q     Max 
#> -1.5814 -0.9685 -0.4150  0.2484 11.7131 
#> 
#> Coefficients:
#>               Estimate Std. Error t value Pr(>|t|)  
#> (Intercept) -127.56740   61.00338  -2.091   0.0426 *
#> gendermale    -0.01333    0.70774  -0.019   0.9851  
#> dutch         -0.14260    0.72191  -0.198   0.8444  
#> pub_first      0.06392    0.03033   2.107   0.0411 *
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> Residual standard error: 2.116 on 42 degrees of freedom
#> Multiple R-squared:  0.09806,    Adjusted R-squared:  0.03364 
#> F-statistic: 1.522 on 3 and 42 DF,  p-value: 0.2227

At the Data Science department, the k-index is predicted differently than at the Sociology department when looking at the linear regression above. For the Data Science department, the effect of gender and ethnicity are not significant. Age is a significant predictor of the k-index. The younger the scientist, the higher the k-index. In the (interactive) plot below, it is also visible that gender and age are lesser determinants of the k-index than at the Sociology department.

# Dit nog bij assigning gender neerzetten (webscraping)
datadef_df$gender[datadef_df$id==261] <- "male"
datadef_df$gender[datadef_df$id==273] <- "male"

regplotdat <- ggplot(datadef_df, mapping = aes(x = pub_first, y = ki, color=gender)) +
    geom_line() 
 
ggplotly(regplotdat)

3 Comparison of the two departments

When comparing the two departments, there are some things worth noting. Regarding the network structure, the density of the co-publication network of Sociology is higher than that of the Data Science department. Within Sociology, scientists thus co-publish more with others of the same department, but at both cases the density is low. This shows that at both departments the co-publication network is rather sparse. This is not strange, as within academia it is not always possible to co-publish with any scientist in the network, as they might have different research interests. The transitivity differs as well between the two departments. The transitivity is higher at Data Science than at Sociology. This signals that it is more common among Data Scientists to publish articles with co-authors of co-authors.

With regard to Twitter and the k-index, the descriptives show that at both departments, the majority has a Twitter account. At the Data Science department, most scientists have a very low k-index with some exceptions, while at the Sociology department there are a few more scientists with a k-index above 1. This could show that for Sociologists, Twitter activity may be considered as more important than for Data Scientists, and for Sociologists the actual scientific output in terms of articles might be less important. Possibly, this could be explained by the fact that Sociologists would like to engage with society to share their research, as this society is often the research topic. However, for both departments, there are no clear hints that these scientists with a high k-index have more or less co-publications than scientists with a lower k-index.

LS0tCnRpdGxlOiAiRGVzY3JpcHRpdmUgU3RhdGlzdGljcyIKYXV0aG9yOiAiQW51c2Noa2EgUGVlbGVuIgpkYXRlOiAiYHIgU3lzLkRhdGUoKWAiCm91dHB1dDogCiAgaHRtbF9kb2N1bWVudDoKICAgICBjb2RlX2ZvbGRpbmc6ICJoaWRlIgplZGl0b3Jfb3B0aW9uczogCiAgbWFya2Rvd246IAogICAgd3JhcDogNzIKLS0tCgpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFKQpgYGAKCmBgYHtyLCBnbG9iYWxzZXR0aW5ncywgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRSwgcmVzdWx0cz0naGlkZSd9CmxpYnJhcnkoa25pdHIpCgprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUpCm9wdHNfY2h1bmskc2V0KHRpZHkub3B0cz1saXN0KHdpZHRoLmN1dG9mZj0xMDApLHRpZHk9VFJVRSwgd2FybmluZyA9IEZBTFNFLCBtZXNzYWdlID0gRkFMU0UsY29tbWVudCA9ICIjPiIsIGNhY2hlPVRSVUUsIGNsYXNzLnNvdXJjZT1jKCJ0ZXN0IiksIGNsYXNzLm91dHB1dD1jKCJ0ZXN0MiIpKQpvcHRpb25zKHdpZHRoID0gMTAwKQpyZ2w6OnNldHVwS25pdHIoKQoKCmNvbG9yaXplIDwtIGZ1bmN0aW9uKHgsIGNvbG9yKSB7c3ByaW50ZigiPHNwYW4gc3R5bGU9J2NvbG9yOiAlczsnPiVzPC9zcGFuPiIsIGNvbG9yLCB4KSB9CmBgYAoKYGBge3Iga2xpcHB5LCBlY2hvPUZBTFNFLCBpbmNsdWRlPVRSVUV9CmtsaXBweTo6a2xpcHB5KHBvc2l0aW9uID0gYygndG9wJywgJ3JpZ2h0JykpCiNrbGlwcHk6OmtsaXBweShjb2xvciA9ICdkYXJrcmVkJykKI2tsaXBweTo6a2xpcHB5KHRvb2x0aXBfbWVzc2FnZSA9ICdDbGljayB0byBjb3B5JywgdG9vbHRpcF9zdWNjZXNzID0gJ0RvbmUnKQpgYGAKCmBgYHtyLCBlY2hvPUZBTFNFLCByZXN1bHRzPSdoaWRlJ30KI3N0YXJ0IHdpdGggY2xlYW4gd29ya3NwYWNlIApybShsaXN0PWxzKCkpCmdldHdkKCkKYGBgCgpgYGB7ciwgZWNobz1GQUxTRX0KbGlicmFyeShkYXRhLnRhYmxlKSAKbGlicmFyeSh0aWR5dmVyc2UpIApyZXF1aXJlKHN0cmluZ2kpCnJlcXVpcmUoUnNpZW5hKQpyZXF1aXJlKGlncmFwaCkKbGlicmFyeShnZ3Bsb3QyKQoKI2luc3RhbGwucGFja2FnZXMoInBsb3RseSIpCmxpYnJhcnkocGxvdGx5KQoKYGBgCgpgYGB7ciwgZWNobz1GQUxTRX0KI2xvYWQgZGF0YW9iamVjdHMKbG9hZCgiL1VzZXJzL2FudXNjaGthL0RvY3VtZW50cy9sYWJqb3VybmFsL2RhdGEvc29jZGVmX25ldF9hcnJheS5SRGF0YSIpCmxvYWQoIi9Vc2Vycy9hbnVzY2hrYS9Eb2N1bWVudHMvbGFiam91cm5hbC9kYXRhL3NvY2RlZl9kZi5SRGF0YSIpCmBgYAoKYGBge3IsIGVjaG89RkFMU0V9CnNuZXQxIDwtIHNvY19uZXRfYXJyYXlbICwsIDFdCnNuZXQyIDwtIHNvY19uZXRfYXJyYXlbICwsIDJdCnNuZXQzIDwtIHNvY19uZXRfYXJyYXlbICwsIDNdCgpkaWFnKHNuZXQxKSA8LSAwCmRpYWcoc25ldDIpIDwtIDAKZGlhZyhzbmV0MykgPC0gMApgYGAKCiMgU29jaW9sb2d5CgojIyBQbG90cyBvZiB0aGUgU29jaW9sb2d5IGRlcGFydG1lbnQgCmBgYHtyfQpzbmV0MV9nIDwtIGlncmFwaDo6Z3JhcGhfZnJvbV9hZGphY2VuY3lfbWF0cml4KHNuZXQxLCBtb2RlID0gYygidW5kaXJlY3RlZCIpKQpzbmV0Ml9nIDwtIGlncmFwaDo6Z3JhcGhfZnJvbV9hZGphY2VuY3lfbWF0cml4KHNuZXQyLCBtb2RlID0gYygidW5kaXJlY3RlZCIpKQpzbmV0M19nIDwtIGlncmFwaDo6Z3JhcGhfZnJvbV9hZGphY2VuY3lfbWF0cml4KHNuZXQzLCBtb2RlID0gYygidW5kaXJlY3RlZCIpKQoKc29jZGVmX2RmJHR3aXR0ZXJfZHVtW3NvY2RlZl9kZiRpZD09MzZdPC0gMQpzb2NkZWZfZGYkdHdpdGNvbCA8LSBpZmVsc2Uoc29jZGVmX2RmJHR3aXR0ZXJfZHVtID09IDAsICIjNTZCNEU5IiwgIiM2NmZmOTkiKQoKI0RpdCB6b3UgaWsgbm9nIGV2ZW4gbW9ldGVuIGNoZWNrZW4gb2YgZGl0IGtsb3B0LCB3YW50IGVyIGxpamtlbiBpbmVlbnMgdGllcyB3ZWcgdGUgdmFsbGVuIGRvb3IgZGllIGNvw7ZyZGluYXRlbiB0b2UgdGUgdm9lZ2VuPwpsIDwtIGlncmFwaDo6bGF5b3V0X3dpdGhfbWRzKHNuZXQxX2cpCmxbMTQsMV0gPC0gMApsMSA8LSBpZ3JhcGg6OmxheW91dF93aXRoX21kcyhzbmV0Ml9nKQpsMVsxNCwxXSA8LSAwCmwyIDwtIGlncmFwaDo6bGF5b3V0X3dpdGhfbWRzKHNuZXQzX2cpCmwyWzE0LDFdIDwtIDAKCiNXYXQgd2lsIGlrIG1ldCBkZSBudW1tZXJzIGluIGRlIHBsb3QsIG1vZXQgaWsgZGllIG5vZyB2ZXJhbmRlcmVuIGluIG5hbWVuPyBNYWFyIHdpbCBoZXQgZ3JhYWcgYW5vbmllbSBob3VkZW4uCnBsb3Qoc25ldDFfZywgdmVydGV4LmNvbG9yID0gc29jZGVmX2RmJHR3aXRjb2wsIHZlcnRleC5zaXplPXNvY2RlZl9kZiRraSwgIHZlcnRleC5zaXplID0gMTAsIHZlcnRleC5mcmFtZS5jb2xvciA9ICJncmF5IiwKICAgIHZlcnRleC5sYWJlbC5jb2xvciA9ICJibGFjayIsIHZlcnRleC5sYWJlbC5mYW1pbHkgPSAiSGVsdmV0aWNhIiwgdmVydGV4LmxhYmVsLmNleCA9IDAuNywgdmVydGV4LmxhYmVsLmRpc3QgPSAwLjgsCiAgICBlZGdlLmN1cnZlZCA9IDAuMiwgZWRnZS5hcnJvdy5zaXplID0gMC41LCBsYXlvdXQ9bCkKcGxvdChzbmV0Ml9nLCB2ZXJ0ZXguY29sb3IgPSBzb2NkZWZfZGYkdHdpdGNvbCwgdmVydGV4LnNpemU9c29jZGVmX2RmJGtpLCAgdmVydGV4LnNpemUgPSAxMCwgdmVydGV4LmZyYW1lLmNvbG9yID0gImdyYXkiLAogICAgdmVydGV4LmxhYmVsLmNvbG9yID0gImJsYWNrIiwgdmVydGV4LmxhYmVsLmZhbWlseSA9ICJIZWx2ZXRpY2EiLCB2ZXJ0ZXgubGFiZWwuY2V4ID0gMC43LCB2ZXJ0ZXgubGFiZWwuZGlzdCA9IDAuOCwKICAgIGVkZ2UuY3VydmVkID0gMC4yLCBlZGdlLmFycm93LnNpemUgPSAwLjUsIGxheW91dD1sMSkKcGxvdChzbmV0M19nLCB2ZXJ0ZXguY29sb3IgPSBzb2NkZWZfZGYkdHdpdGNvbCwgdmVydGV4LnNpemU9c29jZGVmX2RmJGtpLCAgdmVydGV4LnNpemUgPSAxMCwgdmVydGV4LmZyYW1lLmNvbG9yID0gImdyYXkiLAogICAgdmVydGV4LmxhYmVsLmNvbG9yID0gImJsYWNrIiwgdmVydGV4LmxhYmVsLmZhbWlseSA9ICJIZWx2ZXRpY2EiLCB2ZXJ0ZXgubGFiZWwuY2V4ID0gMC43LCB2ZXJ0ZXgubGFiZWwuZGlzdCA9IDAuOCwKICAgIGVkZ2UuY3VydmVkID0gMC4yLCBlZGdlLmFycm93LnNpemUgPSAwLjUsIGxheW91dD1sMikKCmBgYAoKCkZyb20gdGhlIHBsb3RzIG9mIHRoZSBTb2Npb2xvZ3kgZGVwYXJ0bWVudCBpdCdzIHZpc2libGUgdGhhdCB0aGVyZSBhcmUgcXVpdGUgYSBsb3Qgb2YgY28tcHVibGljYXRpb25zIHdpdGhpbiB0aGUgbmV0d29yayBvZiBTb2Npb2xvZ3kuIFRoZSBmaXJzdCBwbG90IChvZiB0aGUgeWVhciAyMDE2LTIwMTcpIHNob3dzIHRoYXQgbWFueSBzY2llbnRpc3RzIGRpZCBub3QgY28tcHVibGlzaCB5ZXQsIGJ1dCB0aGlzIGluY3JlYXNlZCBvdmVyIHRoZSB5ZWFycy4gVGhpcyBjYW4gYmUgZXhwbGFpbmVkIGJ5IHRoZSBmYWN0IHRoYXQgYSBudW1iZXIgb2YgKHlvdW5nZXIpIHNjaWVudGlzdHMgZGlkIG5vdCB5ZXQgd29yayBhdCB0aGUgZGVwYXJ0bWVudCBpbiBlLmcuIDIwMTYsIHdoaWNoIHJlc3VsdHMgaW4gbm8gY28tcHVibGljYXRpb24gdGllLiBTaW5jZSBub2RlIDE0IGlzIHRoZSBtb3N0ICJwcm9kdWN0aXZlIiBpbiB0aGUgc2Vuc2Ugb2YgY28tcHVibGlzaGluZyB3aXRoIG90aGVycywgSSBoYXZlIHB1dCB0aGlzIG5vZGUgY2VudHJhbCBpbiBhbGwgdGhlIHBsb3RzIHRvIHNob3cgdGhlIGV2b2x1dGlvbi4gVGhpcyBpcyBhbiBvbGRlciBzY2llbnRpc3Qgd2hvIGhhcyBoYWQgbW9yZSBvcHBvcnR1bml0aWVzIHRvIHB1Ymxpc2ggd2l0aCBvdGhlciBpbmRpdmlkdWFscyBvZiB0aGUgc3RhZmYuICAgCgpBbm90aGVyIGNvbmNsdXNpb24gdGhhdCBjYW4gYmUgZHJhd24gZnJvbSB0aGUgcGxvdCwgaXMgdGhhdCBpbmRpdmlkdWFscyB3aXRoIGEgaGlnaGVyIGstaW5kZXggZG8gbm90IGhhdmUgbW9yZSBjby1wdWJsaWNhdGlvbiB0aWVzLiBBcyBJIGJhc2VkIHRoZSB2ZXJ0ZXggc2l6ZSBvbiB0aGUgay1pbmRleCwgYSBoaWdoZXIgay1pbmRleCByZXN1bHRzIGluIGEgbGFyZ2VyIHZlcnRleCBpbiB0aGUgcGxvdC4gSXQgaXMgdmlzaWJsZSB0aGF0IG5vZGUgMjggYW5kIDMwIGhhdmUgdGhlIGhpZ2hlc3Qgay1pbmRleCwgYnV0IHRoaXMgZGlkIG5vdCByZXN1bHQgaW4gY28tcHVibGljYXRpb25zIGZvciBub2RlIDMwLiBGb3Igbm9kZSAyOCwgdGhlcmUgaXMgYW4gaW5jcmVhc2Ugb2YgMyBjby1wdWJsaWNhdGlvbiB0aWVzIHdoZW4gY29tcGFyaW5nIHRoZSBsYXR0ZXIgMiBwbG90cy4gVGhpcyBjb3VsZCBzaWduYWwgdGhhdCB0aGlzIHNjaWVudGlzdCBpcyBhdHRyYWN0aXZlIHRvIG90aGVycyBiZWNhdXNlIG9mIHRoZSBrLWluZGV4LCBidXQgdGhpcyBjb25jbHVzaW9uIGNhbm5vdCBiZSBkcmF3biB5ZXQgZnJvbSB0aGlzIHBsb3QgYWxvbmUuIFRoZXJlZm9yZSwgdGhpcyBwbG90IGRvZXMgbm90IGhpbnQgYXQgc2VsZWN0aW9uIGVmZmVjdHMgYmFzZWQgb24gay1pbmRleC4gIAoKIyMgRGVzY3JpcHRpdmVzIG9mIHRoZSBTb2Npb2xvZ3kgbmV0d29yawoKYGBge3J9CnNkZWdyZWUgPC0gaWdyYXBoOjpkZWdyZWUoc25ldDFfZykKc2RlZ3JlZTIgPC0gaWdyYXBoOjpkZWdyZWUoc25ldDJfZykKc2RlZ3JlZTMgPC0gaWdyYXBoOjpkZWdyZWUoc25ldDNfZykKCgojcGFyKG1mcm93PWMoMywxKSkKaGlzdChzZGVncmVlLCBjb2w9IiM5OWQ2ZmYiKQpoaXN0KHNkZWdyZWUyLCBjb2w9IiM5OWQ2ZmYiKQpoaXN0KHNkZWdyZWUzLCBjb2w9IiM5OWQ2ZmYiKQpgYGAKCkluIHRoZSBoaXN0b2dyYW1zIGFib3ZlIGl0IGlzIHNob3duIHRoYXQgdGhlIGRlZ3JlZSBvZiB0aGUgbmV0d29yayBpcyByaWdodC1za2V3ZWQuIFRoaXMgbWVhbnMgdGhhdCBtb3N0IHNjaWVudGlzdHMgaW4gdGhlIG5ldHdvcmsgZG9uJ3QgaGF2ZSBtYW55IG90aGVyIHNjaWVudGlzdHMgd2l0aGluIHRoZSBkZXBhcnRtZW50IHRoZXkgY28tcHVibGlzaGVkIHdpdGguIApUaGlzIGlzIHN0cm9uZ2VzdCBmb3IgZmlyc3QgdGhlIGhpc3RvZ3JhbSwgc2hvd2luZyB0aGUgZmlyc3Qgd2F2ZSAoMjAxNi0yMDE3KS4gSW4gdGhlIGZvbGxvd2luZyB5ZWFyLCB0aGVyZSBzdGlsbCBpcyBhIHJpZ2h0LXNrZXdlZCBkaXN0cmlidXRpb24gb2YgdGhlIGRlZ3JlZXMsIGJ1dCB0aGVyZSBhcmUgYSBsaXR0bGUgbW9yZSBzdGFmZiBtZW1iZXJzIGluIHRoZSB0YWlsIG9mIHRoZSBkaXN0cmlidXRpb24sIG1lYW5pbmcgdGhhdCB0aGVzZSBzY2llbnRpc3RzIGhhdmUgcXVpdGUgYSBsb3Qgb2YgY29wdWJsaWNhdGlvbiB0aWVzLiBUaGlzIG9jY3VycyB0aGUgbW9zdCBzdHJvbmdseSBpbiB0aGUgaGlzdG9ncmFtIG9mIHRoZSBsYXN0IHllYXJzICgyMDIwIHVudGlsIG5vdykuIAoKCmBgYHtyfQppZ3JhcGg6OmR5YWQuY2Vuc3VzKHNuZXQxX2cpCmlncmFwaDo6dHJpYWQuY2Vuc3VzKHNuZXQxX2cpCmlncmFwaDo6ZWRnZV9kZW5zaXR5KHNuZXQxX2cpCgoKaWdyYXBoOjpkeWFkLmNlbnN1cyhzbmV0Ml9nKQppZ3JhcGg6OnRyaWFkLmNlbnN1cyhzbmV0Ml9nKQppZ3JhcGg6OmVkZ2VfZGVuc2l0eShzbmV0Ml9nKQoKaWdyYXBoOjpkeWFkLmNlbnN1cyhzbmV0M19nKQppZ3JhcGg6OnRyaWFkLmNlbnN1cyhzbmV0M19nKQppZ3JhcGg6OmVkZ2VfZGVuc2l0eShzbmV0M19nKQpgYGAKClJlZ2FyZGluZyBkZW5zaXR5IGFuZCBkeWFkcyBpbiB0aGUgbmV0d29yaywgdGhlcmUgYXJlIDI2IGR5YWRzIGluIHRoZSBmaXJzdCB3YXZlLiBUaGUgZWRnZSBkZW5zaXR5IGlzCjAuMDQ5LCB3aGljaCBtZWFucyB0aGF0IHRoZSBudW1iZXIgb2YgZWRnZXMgZXhpc3RpbmcgaW4gdGhlIG5ldHdvcmsgaXMKcmVsYXRpdmVseSBsb3cgY29tcGFyZWQgdG8gdGhlIHRoZSBtYXhpbXVtIG51bWJlciBvZiBlZGdlcyB0aGVyZSBjb3VsZCBwb3NzaWJseSBiZS4KSW4gdGhlIHNlY29uZCB3YXZlLCB0aGVyZSBpcyBhbiBpbmNyZWFzZSBvZiAxIGR5YWQsIGFuZCB0aGUgZWRnZSBkZW5zaXR5IGFsc28gaGFzIGluY3JlYXNlZCBzbGlnaHRseSB0b3dhcmRzIGEgbnVtYmVyIG9mIDAuMDUxLiBJbiB0aGUgbGFzdCB3YXZlLCB0aGVyZSBhcmUgMzggZHlhZHMgYW5kIHRoZSBlZGdlIGRlbnNpdHkgaGFzIGluY3JlYXNlZCB0byAwLjA3Mi4gUmVnYXJkaW5nIHRoZSB0cmlhZCBjZW5zdXMgW0BkYXZpczE5NjdzdHJ1Y3R1cmVdLCB0aGVyZSBhcmUgZmlyc3QgMTAgYW5kIHRoZW4gMTEgY29tcGxldGUgdHJpYWRzLCBhbmQgZmlyc3QgYSBkZWNyZWFzZSBhbmQgdGhlbiBhbiBpbmNyZWFzZSBvZiB0cmlhZHMgd2l0aCBvbmUgY2VudHJhbCBub2RlLiBTdGlsbCwgdGhlIHRyaWFkIDAwMyAod2l0aCAzIG51bGwgcmVsYXRpb25zKSBvY2N1cnMgbW9zdC4gQWxsIGluIGFsbCwgdGhlIGNvLXB1YmxpY2F0aW9ucyB3aXRoaW4gdGhlIG5ldHdvcmsgb2Ygc29jaW9sb2d5IGhhdmUgaW5jcmVhc2VkLCBhbmQgb3ZlciB0aGUgeWVhcnMsIHRoZSBzY2llbnRpc3RzIGF0IHRoZSBkZXBhcnRtZW50IGhhdmUgdXNlZCBtb3JlIG9mIHRoZWlyIG9wcG9ydHVuaXRpZXMgdG8gY29sbGFib3JhdGUgd2l0aCBtZW1iZXJzIHdpdGhpbiB0aGUgbmV0d29yay4gCgpgYGB7cn0KaWdyYXBoOjp0cmFuc2l0aXZpdHkoc25ldDFfZykKaWdyYXBoOjp0cmFuc2l0aXZpdHkoc25ldDJfZykKaWdyYXBoOjp0cmFuc2l0aXZpdHkoc25ldDNfZykKYGBgCgpMYXN0IGJ1dCBub3QgbGVhc3QsIHRoZSB0cmFuc2l0aXZpdHkgZWZmZWN0IHNob3dzIHdoZXRoZXIgY28tYXV0aG9ycyBvZiBjby1hdXRob3JzIGJlY29tZSBjby1hdXRob3JzLiAKRm9yIHRoaXMgbmV0d29yaywgbm8gbGluZWFyIGNoYW5nZSBjYW4gYmUgb2JzZXJ2ZWQuIApJbiB0aGUgZmlyc3Qgd2F2ZSwgdGhlcmUgaXMgYQp0cmFuc2l0aXZpdHkgbnVtYmVyIG9mIDAuMjcuIElmIG9uZSBzdGFmZiBtZW1iZXIgQSBpcyBjb25uZWN0ZWQgdG8gc3RhZmYKbWVtYmVyIEIgYW5kIHN0YWZmIG1lbWJlciBDLCB0aGUgcHJvYmFiaWxpdHkgaXMgMC4yNyB0aGF0IHN0YWZmIG1lbWJlciBCCmFuZCBDIHdpbGwgYWxzbyBjby1wdWJsaXNoLiBJbiB0aGUgc2Vjb25kIHdhdmUsIHdlIHNlZSB0aGF0IHRoaXMKcHJvYmFiaWxpdHkgaGFzIGV2ZW4gaW5jcmVhc2VkIHRvIDAuMzA4LiBJbiB0aGUgbGFzdCB3YXZlLCB0aGUKdHJhbnNpdGl2aXR5IG51bWJlciBpcyB0aGUgbG93ZXN0LiBQb3NzaWJseSwgdGhlIGZhY3QgdGhhdCB0aGVyZSBhcmUgbW9yZSBtZWJlcnMgaW4gdGhlIG5ldHdvcmtzIGNvdWxkIGluY3JlYXNlIHRoZSBvcHBvcnR1bml0aWVzIHRvIGNvLXB1Ymxpc2ggd2l0aCBvdGhlcnMsIG5vdCBkZXBlbmRpbmcgb24gY28tYXV0aG9ycyBvZiBjby1hdXRob3JzLiAKCiMjIEstaW5kZXggYXQgdGhlIFNvY2lvbG9neSBkZXBhcnRtZW50CgpgYGB7ciwgZWNobz1GQUxTRX0KbG9hZCgiL1VzZXJzL2FudXNjaGthL0RvY3VtZW50cy9sYWJqb3VybmFsL2RhdGEvc29jZGVmX2RmLlJEYXRhIikKYGBgCgpgYGB7cn0KdHdzb2NiYXIgPC0gZ2dwbG90Mjo6OmdncGxvdChzb2NkZWZfZGYsIGFlcyhmYWN0b3IodHdpdHRlcl9kdW0pLCBmaWxsID0gZmFjdG9yKHR3aXR0ZXJfZHVtKSkpICsgZ2VvbV9iYXIoKQp0d3NvY2JhciA8LSB0d3NvY2JhciArIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcz1jKCIjNTZCNEU5IiwgIiM2NmZmOTkiKSkKZ2dwbG90bHkodHdzb2NiYXIpCmBgYApCZWZvcmUgZGl2aW5nIGludG8gdGhlIGstaW5kZXgsIGl0IGlzIGluc2lnaHRmdWwgdG8gc2VlIGhvdyBtYW55IG9mIHRoZSBzY2llbnRpc3QgYXQgdGhlIGRlcGFydG1lbnQgb2YgU29jaW9sb2d5IGhhdmUgVHdpdHRlci4gSW4gdGhlIGFib3ZlIChpbnRlcmFjdGl2ZSkgZ3JhcGgsIGl0IGlzIHNob3duIHRoYXQgMTMgc2NpZW50aXN0IGRvIG5vdCBoYXZlIFR3aXR0ZXIsIHdoaWxlIDIwIHNjaWVudGlzdHMgZG8gaGF2ZSBUd2l0dGVyLiAKCmBgYHtyfQpzZWwgPC0gc29jZGVmX2RmJHR3aXR0ZXJfZHVtPT0xCmhpc3Qoc29jZGVmX2RmJGtpW3NlbF0sIGNvbD0ibGlnaHRibHVlIiwgYm9yZGVyPSJkYXJrYmx1ZSIpCmBgYAoKVGhlIGFib3ZlIGhpc3RvZ3JhbSBzaG93cyB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSBrLWluZGV4IG9mIHNjaWVudGlzdHMgYXQgdGhlIFNvY2lvbG9neSBkZXBhcnRtZW50LiBUaGUgZGlzdHJpYnV0aW9uIGlzIHJpZ2h0LXNrZXdlZDogTW9zdCBzY2llbnRpc3RzIGhhdmUgYSBrLWluZGV4IGJldHdlZW4gMCBhbmQgMiwgYW5kIGEgZmV3IHNjaWVudGlzdHMgaGF2ZSBhIGhpZ2ggaW5kZXguIEEgZmV3IHN0YWZmIG1lbWJlcnMgaGF2ZSBhIGstaW5kZXggdGhhdCB3b3VsZCBiZSBjYXRlZ29yaXplZCBhcyAiS2FyZGFzaGlhbiBTY2llbnRpc3QiIChIYWxsLCAyMDE0KQoKYGBge3J9Cm1vZGVsa2kgPC0gbG0oa2kgfiBnZW5kZXIgKyBkdXRjaCArIHB1Yl9maXJzdCwgZGF0YT1zb2NkZWZfZGYpCnN1bW1hcnkobW9kZWxraSkKYGBgCkxhc3RseSwgaXQgaXMgaW5zaWdodGZ1bCB0byBzZWUgdG8gd2hhdCBleHRlbnQgdGhlIGstaW5kZXggaXMgcHJlZGljdGVkIGJ5IG90aGVyIGZhY3RvcnMuIFRoZSBhYm92ZSBsaW5lYXIgcmVncmVzc2lvbiB0ZWFjaGVzIHVzIHRoYXQgbWFsZSBzY2llbnRpc3Qgb2YgU29jaW9sb2d5IGhhdmUgYQpzaWduaWZpY2FudGx5IGhpZ2hlciBrLWluZGV4IHRoYW4gZmVtYWxlIHN0YWZmIG1lbWJlcnMuIEl0IGlzIGFsc28gdmlzaWJsZSB0aGF0CkR1dGNoIHNjaWVudGlzdHMgaGF2ZSBhIHNpZ25pZmljYW50bHkgbG93ZXIgay1pbmRleCB0aGFuIG5vbi1EdXRjaCBzY2llbnRpc3RzLiBMYXN0bHksIGFnZSBpcyBzaWduaWZpY2FudGx5IHJlbGF0ZWQgdG8gdGhlIGstaW5kZXg6IGFzIGFnZQpkZWNyZWFzZXMsIHRoZSBrLWluZGV4IGluY3JlYXNlcy4gWW91bmdlciBpbmRpdmlkdWFscyB0aHVzIGhhdmUgYSBoaWdoZXIgay1pbmRleAp0aGFuIG9sZGVyIGluZGl2aWR1YWxzLiBUaGVzZSBlZmZlY3RzIGNhbiBhbHNvIGJlIHNlZW4gaW4gdGhlIChpbnRlcmFjdGl2ZSkgZ3JhcGggYmVsb3cuIAoKYGBge3J9CnJlZ3Bsb3Rzb2MgPC0gZ2dwbG90KHNvY2RlZl9kZiwgbWFwcGluZyA9IGFlcyh4ID0gcHViX2ZpcnN0LCB5ID0ga2ksIGNvbG9yPWdlbmRlcikpICsKICAgIGdlb21fbGluZSgpIAogCmdncGxvdGx5KHJlZ3Bsb3Rzb2MpCmBgYAoKIyBEYXRhIHNjaWVuY2UKCmBgYHtyLCBlY2hvPUZBTFNFfQojbG9hZCBkYXRhb2JqZWN0cwpsb2FkKCIvVXNlcnMvYW51c2Noa2EvRG9jdW1lbnRzL2xhYmpvdXJuYWwvZGF0YS9kYXRhX25ldF9hcnJheS5SRGF0YSIpCmxvYWQoIi9Vc2Vycy9hbnVzY2hrYS9Eb2N1bWVudHMvbGFiam91cm5hbC9kYXRhL2RhdGFkZWZfZGYuUkRhdGEiKQpgYGAKCmBgYHtyfQpkbmV0MSA8LSBkbmV0X2FycmF5WyAsLCAxXQpkbmV0MiA8LSBkbmV0X2FycmF5WyAsLCAyXQpkbmV0MyA8LSBkbmV0X2FycmF5WyAsLCAzXQpgYGAKCmBgYHtyfQpkaWFnKGRuZXQxKSA8LSAwCmRpYWcoZG5ldDIpIDwtIDAKZGlhZyhkbmV0MykgPC0gMApgYGAKCiMjIFBsb3RzIG9mIHRoZSBEYXRhIFNjaWVuY2UgZGVwYXJ0bWVudAoKYGBge3J9CmRuZXQxX2cgPC0gaWdyYXBoOjpncmFwaF9mcm9tX2FkamFjZW5jeV9tYXRyaXgoZG5ldDEsIG1vZGUgPSBjKCJ1bmRpcmVjdGVkIikpCmRuZXQyX2cgPC0gaWdyYXBoOjpncmFwaF9mcm9tX2FkamFjZW5jeV9tYXRyaXgoZG5ldDIsIG1vZGUgPSBjKCJ1bmRpcmVjdGVkIikpCmRuZXQzX2cgPC0gaWdyYXBoOjpncmFwaF9mcm9tX2FkamFjZW5jeV9tYXRyaXgoZG5ldDMsIG1vZGUgPSBjKCJ1bmRpcmVjdGVkIikpCgpkYXRhZGVmX2RmJHR3aXRjb2wgPC0gaWZlbHNlKGRhdGFkZWZfZGYkdHdpdHRlcl9kdW0gPT0gMCwgIiM1NkI0RTkiLCAiIzY2ZmY5OSIpCgojRGl0IHpvdSBpayBub2cgZXZlbiBtb2V0ZW4gY2hlY2tlbiBvZiBkaXQga2xvcHQsIHdhbnQgZXIgbGlqa2VuIGluZWVucyB0aWVzIHdlZyB0ZSB2YWxsZW4gZG9vciBkaWUgY2/DtnJkaW5hdGVuIHRvZSB0ZSB2b2VnZW4/CiMgbCA8LSBpZ3JhcGg6OmxheW91dF93aXRoX21kcyhzbmV0MV9nKQojIGxbMTQsMV0gPC0gMAojIGwxIDwtIGlncmFwaDo6bGF5b3V0X3dpdGhfbWRzKHNuZXQyX2cpCiMgbDFbMTQsMV0gPC0gMAojIGwyIDwtIGlncmFwaDo6bGF5b3V0X3dpdGhfbWRzKHNuZXQzX2cpCiMgbDJbMTQsMV0gPC0gMAoKI1dhdCB3aWwgaWsgbWV0IGRlIG51bW1lcnMgaW4gZGUgcGxvdCwgbW9ldCBpayBkaWUgbm9nIHZlcmFuZGVyZW4gaW4gbmFtZW4/IE1hYXIgd2lsIGhldCBncmFhZyBhbm9uaWVtIGhvdWRlbi4KcGxvdChkbmV0MV9nLCB2ZXJ0ZXguY29sb3IgPSBkYXRhZGVmX2RmJHR3aXRjb2wsIHZlcnRleC5zaXplPWRhdGFkZWZfZGYka2ksICB2ZXJ0ZXguc2l6ZSA9IDEwLCB2ZXJ0ZXguZnJhbWUuY29sb3IgPSAiZ3JheSIsCiAgICB2ZXJ0ZXgubGFiZWwuY29sb3IgPSAiYmxhY2siLCB2ZXJ0ZXgubGFiZWwuZmFtaWx5ID0gIkhlbHZldGljYSIsIHZlcnRleC5sYWJlbC5jZXggPSAwLjcsIHZlcnRleC5sYWJlbC5kaXN0ID0gMC44LAogICAgZWRnZS5jdXJ2ZWQgPSAwLjIsIGVkZ2UuYXJyb3cuc2l6ZSA9IDAuNSkKcGxvdChkbmV0Ml9nLCB2ZXJ0ZXguY29sb3IgPSBkYXRhZGVmX2RmJHR3aXRjb2wsIHZlcnRleC5zaXplPWRhdGFkZWZfZGYka2ksICB2ZXJ0ZXguc2l6ZSA9IDEwLCB2ZXJ0ZXguZnJhbWUuY29sb3IgPSAiZ3JheSIsCiAgICB2ZXJ0ZXgubGFiZWwuY29sb3IgPSAiYmxhY2siLCB2ZXJ0ZXgubGFiZWwuZmFtaWx5ID0gIkhlbHZldGljYSIsIHZlcnRleC5sYWJlbC5jZXggPSAwLjcsIHZlcnRleC5sYWJlbC5kaXN0ID0gMC44LAogICAgZWRnZS5jdXJ2ZWQgPSAwLjIsIGVkZ2UuYXJyb3cuc2l6ZSA9IDAuNSkKcGxvdChkbmV0M19nLCB2ZXJ0ZXguY29sb3IgPSBkYXRhZGVmX2RmJHR3aXRjb2wsIHZlcnRleC5zaXplPWRhdGFkZWZfZGYka2ksICB2ZXJ0ZXguc2l6ZSA9IDEwLCB2ZXJ0ZXguZnJhbWUuY29sb3IgPSAiZ3JheSIsCiAgICB2ZXJ0ZXgubGFiZWwuY29sb3IgPSAiYmxhY2siLCB2ZXJ0ZXgubGFiZWwuZmFtaWx5ID0gIkhlbHZldGljYSIsIHZlcnRleC5sYWJlbC5jZXggPSAwLjcsIHZlcnRleC5sYWJlbC5kaXN0ID0gMC44LAogICAgZWRnZS5jdXJ2ZWQgPSAwLjIsIGVkZ2UuYXJyb3cuc2l6ZSA9IDAuNSkKCmBgYAoKSW4gdGhlIG5ldHdvcmsgcGxvdHMgb2YgRGF0YSBTY2llbmNlLCBpdCBzaG93cyB0aGF0IGR1cmluZyB0aGUgeWVhciAyMDE2LTIwMTcgdGhlcmUgd2VyZSBub3QgbWFueSBjby1wdWJsaWNhdGlvbnMuIEp1c3QgbGlrZSBhdCB0aGUgU29jaW9sb2d5IGRlcGFydG1lbnQsIGl0IGlzIGxpa2VseSB0aGF0IGEgaGlnaCBudW1iZXIgb2Ygc2NpZW50aXN0cyBkaWQgbm90IHdvcmsgYXQgdGhlIGRlcGFydG1lbnQgeWV0LiBJbiB0aGUgeWVhcnMgMjAxOC0yMDE5LCB0aGVyZSBpcyBhIHN0cm9uZyBpbmNyZWFzZSBpbiB0aGUgY28tcHVibGljYXRpb25zIG9mIHRoZSBzdGFmZiBtZW1iZXJzIG9mIERhdGEgU2NpZW5jZS4gTm9kZSAxLCAzIGFuZCA1IHNlZW0gdG8gaGF2ZSBhIGNlbnRyYWwgcm9sZSBpbiB0aGUgbmV0d29yaywgd2l0aCB0aGUgaGlnaGVzdCBudW1iZXIgb2YgZWRnZXMsIGFuZCB0aHVzIHRoZSBtb3N0IGNvLXB1bGljYXRpb25zIHdpdGggb3RoZXIgc2NpZW50aXN0cyB3aXRoaW4gdGhlIGRlcGFydG1lbnQuIApJbiB0aGUgbGFzdCBwbG90LCBhZ2FpbiBhbiBpbmNyZWFzZSBpbiBjby1wdWJsaWNhdGlvbnMgaXMgdmlzaWJsZS4gTm9kZSAxLCAzCmFuZCA1IHN0aWxsIGhhdmUgYSBjZW50cmFsIHJvbGUgaW4gdGhlIG5ldHdvcmssIGJ1dCB0aGVyZSBub3cgYXJlIG90aGVyCm5vZGVzIHdpdGggYSByZWxhdGl2ZSBoaWdoIG51bWJlciBvZiBjby1wdWJsaWNhdGlvbnMgYXMgd2VsbC5TaW1pbGFybHkgdG8gdGhlIFNvY2lvbG9neSBkZXBhcnRtZW50LCB0aGVyZSBhcmUgb25seSBhIGZldyBub2RlcyB3aXRoIGEgaGlnaCBrLWluZGV4IChzaG93biBieSB0aGUgbGFyZ2VzdCB2ZXJ0ZXggc2l6ZSksIGFuZCBpdCBkb2VzIG5vdCBzZWVtIGFzIGlmIHRoZXNlIHNjaWVudGlzdHMgYXJlIGVzcGVjaWFsbHkgYXR0cmFjdGl2ZSB0byBvdGhlcnMgdG8gY28tcHVibGlzaCBhbiBhcnRpY2xlLiAKCiMjIERlc2NyaXB0aXZlcyBvZiB0aGUgRGF0YSBTY2llbmNlIG5ldHdvcmsKYGBge3J9CmRkZWdyZWUxIDwtIGlncmFwaDo6ZGVncmVlKGRuZXQxX2cpCmhpc3QoZGRlZ3JlZTEsIGNvbD0icHVycGxlIikKZGRlZ3JlZTIgPC0gaWdyYXBoOjpkZWdyZWUoZG5ldDJfZykKaGlzdChkZGVncmVlMiwgY29sPSJwdXJwbGUiKQpkZGVncmVlMyA8LSBpZ3JhcGg6OmRlZ3JlZShkbmV0M19nKQpoaXN0KGRkZWdyZWUzLCBjb2w9InB1cnBsZSIpCmBgYApTaW1pbGFybHkgdG8gU29jaW9sb2d5LCB0aGUgRGF0YSBTY2llbmNlIGRlcGFydG1lbnQgc2hvd3MgYSByaWdodC1za2V3ZWQgZGlzdHJpYnV0aW9uIG9mIHRoZSBkZWdyZWVzLiAKSW4gdGhlIGZpcnN0IHdhdmUsIG1vc3Qgc2NpZW50aXN0cyBoYWQgbm90IGNvLXB1Ymxpc2hlZCwgb3Igb25seSBsaXR0bGUuIEluIHRoZSBoaXN0b2dyYW0gb2YgdGhlIHNlY29uZCB3YXZlLCBpdCBjYW4gYmUgb2JzZXJ2ZWQgdGhhdCB0aGUgZGVncmVlcyByZW1haW4gc2tld2VkIHRvIHRoZSByaWdodC4gRnVydGhlcm1vcmUsIGl0IGlzIHZpc2libGUgdGhhdCBvbmUgc2NpZW50aXN0IGhhcyBtb3JlIHRoYW4gOCBjb3B1YmxpY2F0aW9ucywgYW5kIHRoYXQgaW4gZ2VuZXJhbCwgdGhlIG51bWJlciBvZiBvdXRkZWdyZWVzIGluY3JlYXNlZC4gSG93ZXZlciwgbW9zdCBpbmRpdmlkdWFscyBzdGlsbCBoYXZlIG5vIGNvLXB1YmxpY2F0aW9ucy4gSW4gdGhlIGxhc3QgaGlzdG9ncmFtLCBtb3JlIHNjaWVudGlzdHMgYXJlIGluIHRoZSB0YWlsLCBhcyBhbHNvIG9ic2VydmVkIGF0IHRoZSBTb2Npb2xvZ3kgZGVwYXJ0bWVudC4gRnVydGhlcm1vcmUsIHRoZXJlIGFyZSBldmVuIHN0YWZmIHNjaWVudGlzdCB3aXRoIDEwLTExIGNvcHVibGljYXRpb25zLiBUaGlzIGlzIGEgaGlnaGVyIG51bWJlciBvZiBjb3B1YmxpY2F0aW9ucyB0aGFuIG9ic2VydmVkIGF0IHRoZSBTb2Npb2xvZ3kgZGVwYXJ0bWVudC4KCmBgYHtyfQppZ3JhcGg6OmR5YWQuY2Vuc3VzKGRuZXQxX2cpCmlncmFwaDo6dHJpYWQuY2Vuc3VzKGRuZXQxX2cpCmlncmFwaDo6ZWRnZV9kZW5zaXR5KGRuZXQxX2cpCgppZ3JhcGg6OmR5YWQuY2Vuc3VzKGRuZXQyX2cpCmlncmFwaDo6dHJpYWQuY2Vuc3VzKGRuZXQyX2cpCmlncmFwaDo6ZWRnZV9kZW5zaXR5KGRuZXQyX2cpCgppZ3JhcGg6OmR5YWQuY2Vuc3VzKGRuZXQzX2cpCmlncmFwaDo6dHJpYWQuY2Vuc3VzKGRuZXQzX2cpCmlncmFwaDo6ZWRnZV9kZW5zaXR5KGRuZXQzX2cpCgpgYGAKCkxvb2tpbmcgYXQgdGhlIGR5YWQgY2Vuc3VzIGFuZCBkZW5zaXR5LCB0aGUgbnVtYmVyIG9mIGR5YWRzIGluIDIwMTYtMjAxNyBjb3VudHMgMjIuIFRoZSBlZGdlIGRlbnNpdHkgaXMgMC4wMjEyLiBCb3RoIG9mIHRoZXNlIG51bWJlcnMgYXJlIGxvd2VyIHRoYW4gYXQgdGhlIFNvY2lvbG9neSBkZXBhcnRtZW50LiAKSW4gMjAxOC0yMDE5LCB0aGUgbnVtYmVyIG9mIGR5YWRzIGhhcyBpbmNyZWFzZWQgdG8gMzggYW5kIHRoZSBlZGdlCmRlbnNpdHkgaGFzIGluY3JlYXNlZCB0byAwLjAzNy4gVGhpcyBpcyBzdGlsbCBsb3dlciB0aGFuCnRoZSBlZGdlIGRlbnNpdHkgd2l0aGluIHRoZSBzb2Npb2xvZ3kgZGVwYXJ0bWVudCBpbiB0aGUgc2FtZSB5ZWFycy4gSW4gdGhlIGxhc3QgeWVhcnMsIHRoZXJlIGFyZSA3MCBkeWFkcyBhbmQgdGhlIGVkZ2UgZGVuc2l0eSBpbmNyZWFzZWQgdG93YXJkcyBhIG51bWJlciBvZiAwLjA2OC4gVGhpcyByZW1haW5zIGEgbGl0dGxlIGxvd2VyIHRoYW4gdGhlIGVkZ2UgZGVuc2l0eSBvZiB0aGUgU29jaW9sb2d5IGRlcGFydG1lbnQgYXQgdGhhdCB0aW1lLiBXaXRoIHJlZ2FyZCB0byB0aGUgdHJpYWRzLCB3ZSBzZWUgYSBzaW1pbGFyIHBhdHRlcm4gYXMgYXQgdGhlIFNvY2lvbG9neSBkZXBhcnRtZW50LiBIb3dldmVyLCB0aGVyZSBhcmUgbW9yZSBjb21wbGV0ZSB0cmlhZHMgYXQgRGF0YSBTY2llbmNlLCBhbmQgdGhpcyBudW1iZXIgaGFzIGluY3JlYXNlZCByYXRoZXIgc3Ryb25nbHkgb3ZlciB0aGUgeWVhcnMuCgpgYGB7cn0KaWdyYXBoOjp0cmFuc2l0aXZpdHkoZG5ldDFfZykKaWdyYXBoOjp0cmFuc2l0aXZpdHkoZG5ldDJfZykKaWdyYXBoOjp0cmFuc2l0aXZpdHkoZG5ldDNfZykKYGBgCgpSZWdhcmRpbmcgdGhlIHRyYW5zaXRpdml0eSwgdGhpcyBoYXMgZGVjcmVhc2VkIGF0IERhdGEgU2NpZW5jZSBvdmVyIHRoZSB5ZWFycy4gCkluIHRoZSBmaXJzdCBwZXJpb2QsIHRoZSBwcm9iYWJpbGl0eSB0aGF0IHNjaWVudGlzdCBCIGFuZCBDIC0gYm90aCBhcwpjby1hdXRob3JzIG9mIHNjaWVudGlzdCBBIC0gd291bGQgY28tcHVibGlzaCB3YXMgMC41Mi4gSW4gdGhlIG5leHQgeWVhciwgdGhpcwpkZWNyZWFzZWQgdG8gYSA0NSUgY2hhbmNlLCB3aGlsZSBpbiB0aGUgbGFzdCB5ZWFyIHRoaXMgY2hhbmNlIGlzIDQxLDIlLgpTdGlsbCwgdGhpcyBpcyBhIGhpZ2hlciBudW1iZXIgdGhhbiBvYnNlcnZlZCBhdCB0aGUgU29jaW9sb2d5CmRlcGFydG1lbnQuIEFsc28sIHRoZXJlIGlzIGEgbGluZWFyIGRlY3JlYXNlIGF0IHRoZSBkZXBhcnRtZW50IG9mIERhdGEKU2NpZW5jZSwgd2hpbGUgYXQgdGhlIFNvY2lvbG9neSBkZXBhcnRtZW50IG5vIGxpbmVhciB0cmVuZCBjb3VsZCBiZQpvYnNlcnZlZC4gSW4gY29uY2x1c2lvbiwgc3RhZmYgbWVtYmVycyBhdCBEYXRhIFNjaWVuY2UgYXJlIG1vcmUgbGlrZWx5CnRvIGNvLXB1Ymxpc2ggd2l0aCBjby1hdXRob3JzIG9mIHRoZWlyIGNvLWF1dGhvcnMgdGhhbiBhdCBTb2Npb2xvZ3ksIHdoaWNoIGlzIGluIGxpbmUgd2l0aCB0aGUgbGFyZ2VyIGluY3JlYXNlIGluIHRyaWFkcy4gCgojIyBLLWluZGV4IGF0IHRoZSBkZXBhcnRtZW50IG9mIERhdGEgU2NpZW5jZQoKYGBge3IsIGVjaG89RkFMU0V9CmxvYWQoIi9Vc2Vycy9hbnVzY2hrYS9Eb2N1bWVudHMvbGFiam91cm5hbC9kYXRhL2RhdGFkZWZfZGYuUkRhdGEiKQpgYGAKCmBgYHtyfQp0d2RhdGJhciA8LSBnZ3Bsb3QyOjo6Z2dwbG90KGRhdGFkZWZfZGYsIGFlcyhmYWN0b3IodHdpdHRlcl9kdW0pLCBmaWxsID0gZmFjdG9yKHR3aXR0ZXJfZHVtKSkpICsgZ2VvbV9iYXIoKQp0d2RhdGJhciA8LSB0d2RhdGJhciArIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcz1jKCIjNTZCNEU5IiwgIiM2NmZmOTkiKSkKZ2dwbG90bHkodHdkYXRiYXIpCmBgYApBdCB0aGUgRGF0YSBTY2llbmNlIGRlcGFydG1lbnQsIHRoZSBtYWpvcml0eSBvZiBzY2llbnRpc3QgaGFzIGEgVHdpdHRlciBhY2NvdW50OiAzMCBzY2llbnRpc3RzIGhhdmUgYSBUd2l0dGVyIGFjY291bnQgd2hpbGUgMTYgZG8gbm90IGhhdmUgb25lLiAgCgpgYGB7cn0Kc2VsMiA8LSBkYXRhZGVmX2RmJHR3aXR0ZXJfZHVtPT0xCmhpc3QoZGF0YWRlZl9kZiRraVtzZWwyXSwgY29sPSJyZWQiKQpgYGAKVGhlIGhpc3RvZ3JhbSBzaG93cyB0aGF0IGF0IHRoZSBEYXRhIFNjaWVuY2UgZGVwYXJ0bWVudCwgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgay1pbmRleCBpcyBldmVuIG1vcmUgc2tld2VkIHRoYW4gYXQgdGhlIFNvY2lvbG9neSBkZXBhcnRtZW50LiBNb3N0IHNjaWVudGlzdCBoYXZlIGEgay1pbmRleCBiZXR3ZWVuIDAgYW5kIDEsIHdoaWxlIG9ubHkgYSBmZXcgc2NpZW50aXN0cyBoYXZlIGEgay1pbmRleCBoaWdoZXIgdGhhbiB0aGF0LiBBcHByb3hpbWF0ZWx5IHR3byBzY2llbnRpc3Qgd291bGQgYmUgY2F0ZWdvcml6ZWQgYXMgIkthcmRhc2hpYW4gU2NpZW50aXN0cyIgYnkgSGFsbCAoMjAxNCkKCgpgYGB7cn0KbW9kZWxraTIgPC0gbG0oa2kgfiBnZW5kZXIgKyBkdXRjaCArIHB1Yl9maXJzdCwgZGF0YT1kYXRhZGVmX2RmKQpzdW1tYXJ5KG1vZGVsa2kyKQpgYGAKCkF0IHRoZSBEYXRhIFNjaWVuY2UgZGVwYXJ0bWVudCwgdGhlIGstaW5kZXggaXMgcHJlZGljdGVkCmRpZmZlcmVudGx5IHRoYW4gYXQgdGhlIFNvY2lvbG9neSBkZXBhcnRtZW50IHdoZW4gbG9va2luZyBhdCB0aGUgbGluZWFyIHJlZ3Jlc3Npb24gYWJvdmUuIApGb3IgdGhlIERhdGEgU2NpZW5jZSBkZXBhcnRtZW50LCB0aGUgZWZmZWN0IG9mIGdlbmRlciBhbmQKZXRobmljaXR5IGFyZSBub3Qgc2lnbmlmaWNhbnQuIEFnZSBpcyBhIHNpZ25pZmljYW50IHByZWRpY3RvciBvZiB0aGUgay1pbmRleC4gVGhlIHlvdW5nZXIgdGhlIHNjaWVudGlzdCwgdGhlIGhpZ2hlciB0aGUgay1pbmRleC4gSW4gdGhlIChpbnRlcmFjdGl2ZSkgcGxvdCBiZWxvdywgaXQgaXMgYWxzbyB2aXNpYmxlIHRoYXQgZ2VuZGVyIGFuZCBhZ2UgYXJlIGxlc3NlciBkZXRlcm1pbmFudHMgb2YgdGhlIGstaW5kZXggdGhhbiBhdCB0aGUgU29jaW9sb2d5IGRlcGFydG1lbnQuIAoKYGBge3J9CiMgRGl0IG5vZyBiaWogYXNzaWduaW5nIGdlbmRlciBuZWVyemV0dGVuICh3ZWJzY3JhcGluZykKZGF0YWRlZl9kZiRnZW5kZXJbZGF0YWRlZl9kZiRpZD09MjYxXSA8LSAibWFsZSIKZGF0YWRlZl9kZiRnZW5kZXJbZGF0YWRlZl9kZiRpZD09MjczXSA8LSAibWFsZSIKCnJlZ3Bsb3RkYXQgPC0gZ2dwbG90KGRhdGFkZWZfZGYsIG1hcHBpbmcgPSBhZXMoeCA9IHB1Yl9maXJzdCwgeSA9IGtpLCBjb2xvcj1nZW5kZXIpKSArCiAgICBnZW9tX2xpbmUoKSAKIApnZ3Bsb3RseShyZWdwbG90ZGF0KQpgYGAKCiMgQ29tcGFyaXNvbiBvZiB0aGUgdHdvIGRlcGFydG1lbnRzCldoZW4gY29tcGFyaW5nIHRoZSB0d28gZGVwYXJ0bWVudHMsIHRoZXJlIGFyZSBzb21lIHRoaW5ncyB3b3J0aCBub3RpbmcuIFJlZ2FyZGluZyB0aGUgbmV0d29yayBzdHJ1Y3R1cmUsIHRoZSBkZW5zaXR5IG9mIHRoZSBjby1wdWJsaWNhdGlvbiBuZXR3b3JrIG9mIFNvY2lvbG9neSBpcyBoaWdoZXIgdGhhbiB0aGF0IG9mIHRoZSBEYXRhIFNjaWVuY2UgZGVwYXJ0bWVudC4gV2l0aGluIFNvY2lvbG9neSwgc2NpZW50aXN0cyB0aHVzIGNvLXB1Ymxpc2ggbW9yZSB3aXRoIG90aGVycyBvZiB0aGUgc2FtZSBkZXBhcnRtZW50LCBidXQgYXQgYm90aCBjYXNlcyB0aGUgZGVuc2l0eSBpcyBsb3cuIFRoaXMgc2hvd3MgdGhhdCBhdCBib3RoIGRlcGFydG1lbnRzIHRoZSBjby1wdWJsaWNhdGlvbiBuZXR3b3JrIGlzIHJhdGhlciBzcGFyc2UuIFRoaXMgaXMgbm90IHN0cmFuZ2UsIGFzIHdpdGhpbiBhY2FkZW1pYSBpdCBpcyBub3QgYWx3YXlzIHBvc3NpYmxlIHRvIGNvLXB1Ymxpc2ggd2l0aCBhbnkgc2NpZW50aXN0IGluIHRoZSBuZXR3b3JrLCBhcyB0aGV5IG1pZ2h0IGhhdmUgZGlmZmVyZW50IHJlc2VhcmNoIGludGVyZXN0cy4gVGhlIHRyYW5zaXRpdml0eSBkaWZmZXJzIGFzIHdlbGwgYmV0d2VlbiB0aGUgdHdvIGRlcGFydG1lbnRzLiBUaGUgdHJhbnNpdGl2aXR5IGlzIGhpZ2hlciBhdCBEYXRhIFNjaWVuY2UgdGhhbiBhdCBTb2Npb2xvZ3kuIFRoaXMgc2lnbmFscyB0aGF0IGl0IGlzIG1vcmUgY29tbW9uIGFtb25nIERhdGEgU2NpZW50aXN0cyB0byBwdWJsaXNoIGFydGljbGVzIHdpdGggY28tYXV0aG9ycyBvZiBjby1hdXRob3JzLiAKCldpdGggcmVnYXJkIHRvIFR3aXR0ZXIgYW5kIHRoZSBrLWluZGV4LCB0aGUgZGVzY3JpcHRpdmVzIHNob3cgdGhhdCBhdCBib3RoIGRlcGFydG1lbnRzLCB0aGUgbWFqb3JpdHkgaGFzIGEgVHdpdHRlciBhY2NvdW50LiBBdCB0aGUgRGF0YSBTY2llbmNlIGRlcGFydG1lbnQsIG1vc3Qgc2NpZW50aXN0cyBoYXZlIGEgdmVyeSBsb3cgay1pbmRleCB3aXRoIHNvbWUgZXhjZXB0aW9ucywgd2hpbGUgYXQgdGhlIFNvY2lvbG9neSBkZXBhcnRtZW50IHRoZXJlIGFyZSBhIGZldyBtb3JlIHNjaWVudGlzdHMgd2l0aCBhIGstaW5kZXggYWJvdmUgMS4gVGhpcyBjb3VsZCBzaG93IHRoYXQgZm9yIFNvY2lvbG9naXN0cywgVHdpdHRlciBhY3Rpdml0eSBtYXkgYmUgY29uc2lkZXJlZCBhcyBtb3JlIGltcG9ydGFudCB0aGFuIGZvciBEYXRhIFNjaWVudGlzdHMsIGFuZCBmb3IgU29jaW9sb2dpc3RzIHRoZSBhY3R1YWwgc2NpZW50aWZpYyBvdXRwdXQgaW4gdGVybXMgb2YgYXJ0aWNsZXMgbWlnaHQgYmUgbGVzcyBpbXBvcnRhbnQuIFBvc3NpYmx5LCB0aGlzIGNvdWxkIGJlIGV4cGxhaW5lZCBieSB0aGUgZmFjdCB0aGF0IFNvY2lvbG9naXN0cyB3b3VsZCBsaWtlIHRvIGVuZ2FnZSB3aXRoIHNvY2lldHkgdG8gc2hhcmUgdGhlaXIgcmVzZWFyY2gsIGFzIHRoaXMgc29jaWV0eSBpcyBvZnRlbiB0aGUgcmVzZWFyY2ggdG9waWMuIEhvd2V2ZXIsIGZvciBib3RoIGRlcGFydG1lbnRzLCB0aGVyZSBhcmUgbm8gY2xlYXIgaGludHMgdGhhdCB0aGVzZSBzY2llbnRpc3RzIHdpdGggYSBoaWdoIGstaW5kZXggaGF2ZSBtb3JlIG9yIGxlc3MgY28tcHVibGljYXRpb25zIHRoYW4gc2NpZW50aXN0cyB3aXRoIGEgbG93ZXIgay1pbmRleC4gCg==