We aim here at modeling the spread of the COVID-19 epidemics in Macedonia over time using the data on the infected individuals. The focus in on the second wave, so we use the data from 27th of May on. For modeling the temporal dynamics of the population of infected individuals, we use a Kermack-McKendrick variant of the SIR epidemiological model. We fit the model parameters to the data using the modeling tool ProBMoT. In turn, we use the model to simulate and predict the dynamics of the infected population in the future. From the predicted dynamics, we can infer the expected time point of the infection peak, the number of infected individuals at the peak and the expected time point of the epidemics demise.

The model

The Kermack-McKendrick variant of the SIR model of the temporal spread of the infectuous disease in a closed, homogeneous population of individuals. It comprises three differential equations modeling the change of the three variables S, I and R, corresponding to the size of the populations of susceptible (S), infected (I) and recovered (R) individuals: \[ \frac{d S}{d t} = - \beta S I \\ \frac{d I}{d t} = \beta S I - \gamma I \\ \frac{d R}{d t} = \gamma I . \] The two constant parameters of \(\beta\) and \(\gamma\) represent the rates of infection and recovery, respectively.

Given the population sizes at the initial time point \(t_0\), \(S(t_0)\), \(I(t_0)\) and \(R(t_0)\), along with the values of \(\beta\) and \(\gamma\), we can simulate the dynamical change of the three populations through time. At any simulation time point \(t\), the sum \(S(t) + I(t) + R(t)\) is constant and equals the size of the whole population.

Fitting the model to the data

The data used for fitting the model comprises the time-series corresponding to the dynamic change of the number of infected individuals in Macedonia from 27th of May to the current date. We regularly update the data using the Covid-19 treker Website.

To obtain the values of the model parameters \(\beta\) and \(\gamma\), we fit the model against the observations of the number of infected individuals. To this end, we use the ProBMoT tool for data- and knowledge-driven modeling of dynamical systems. ProBMoT formulates the fitting of the model parameters to observed data as a task of numerical optimization, where the objective is to minimize the discrepancy between the observations \(I\) and simulated values \(\hat{I}\) of the size of the infected population. The discrepancy is measured using the standard root-mean-square-error (RMSE):

\[ {RMSE} = \sqrt{ \frac{1}{n} \sum _{t = t_0} ^{t_{n-1}} (I(t) - \hat{I}(t))^2}, \] where \(n\) is the number of observations at the time points \(t_0, t_1, \ldots t_{n-1}\). Note that \(RMSE\) is measured using the simulated behavior of the model \(\hat{y}\): ProBMoT simulates the SIR model using the CVODE solver of ordinary differential equations as implemented in the Sundials suite. The parameter fitting of the SIR model leads to a simple two-dimensional numerical optimization problem. To solve it, ProBMoT employs the Differential Evolution algorithm with standard settings and a population size of 100. The obtained solution of the optimization problem assigns values to the fitted parameters that lead to the minimal RMSE discrepancy between the observations and the simulations.

Simulating the model

Once we fit the values of the initial population sizes and the two rate parameters, we can simulate the model beyond the last observation point \(t_{n-1}\) and therefore obtain prediction of the infection dynamics.

Note however, that the model parameters are being inferred from a very limited number of observations: we observe only few data points at the very beginning of the second wave of the epidemics with a (rapidly) growing size of the population of infected individuals. Second, the observations are based on a limited sample of individuals that have been tested. On such a small set of observations, we face a high risk of overfitting. While the bias component of the fitting error can be kept at bay by assuming the SIR model, the variance of the parameter estimates is out of control.

To account for the high variance of the parameter estimates, we perform a bootstrap simulation of the model as opposed to a single model simulation with the optimally fitted parameter values. The bootstrap simulation procedure samples the parameter values in two ways. First, we sample all the parameter values considered by the Differential Evolution algorithm during the optimization: given the algorithm settings, 2,000 evaluations are performed. We constrain the sampling to those parameter values that lead to RMSE, which is within a 5% margin of the RMSE of the optimal parameter values, i.e., lies within the interval \([RMSE_{opt}, RMSE_{opt} \cdot 1.05]\), where \({RMSE}_{opt}\) is the error obtained with the optimal parameter values.

Second, given this initial set of parameter values, we sample their neighborhoods from the Gaussian distribution \(N(p_0, \sigma_p)\), where \(p_0\) and \(\sigma_p\) are estimated from the ProBMoT evaluations selected in the first phase. Again, we constrain the sampling to those parameter values that lead to RMSE, which is less than a half of the RMSE of the simplest model that predicts the mean of the observed values.

For each sample of parameter values, we simulate the model for a period of time from the 27th of May 2020 to the 15th of October 2020. The simulations are aggregated using minimal and maximal simulated values at each time point leading to the graph in Figure 1.

Figure 1: The bootstrap simulation (blue polygon) of the SIR model fitted to the observations of the number of infected individuals in Macedonia (vertical bars) from 27th of May to 15th of October 2020. The solid black line within the polygon depicts the simulation of the model with optimal parameter values (lowest RMSE).

Figure 1: The bootstrap simulation (blue polygon) of the SIR model fitted to the observations of the number of infected individuals in Macedonia (vertical bars) from 27th of May to 15th of October 2020. The solid black line within the polygon depicts the simulation of the model with optimal parameter values (lowest RMSE).

Analysis of the simulations

Using the simulations, we predict the time position of the extreme number of active cases, which we refer to as peak. When considering the peak, both, the magnitude and the time point of the peak are of interest. After observing the robustness of the model predictions during the first ten updates of the model, we put the predictions into perspective in Figures 2 and 3.

Figure 2: Temporal change of the predicted peak time point with the model updates: the black line corresponds to the median predictions, while the red polygon is based on the first and the third quartile of the predictions.

Figure 2: Temporal change of the predicted peak time point with the model updates: the black line corresponds to the median predictions, while the red polygon is based on the first and the third quartile of the predictions.

The majority of the bootstraped simulations predict the median time point of the peak to be between end of June and beginning of July. After the initial model updates with unstable and decreasing predictions, the more recent updates lead to a quite stable prediction (with a slight monotonic increase towards the end) of the median peak value at the end of June or 1st of July. The current prediction, based on the model updated with the data up to 10th of July, is 2nd of July: the model predicts that Macedonia is past the peak point of the second wave. The actual peak in the measured data is on 4th of July.

The number of active cases in the next days is expected to decline, which actually happened on 30th of June, the peak being actually observed on 4th of July. For days now, the model prediction of the peak data is overly optimistic. This might be due to the changing dynamics of the number of active cases. While around 20th of June the daily increase of the number of active cases stared to slow down, from 30th of June the daily change varied from -137 (decrease) to 93 (increase). The simple SIR model fails to follow the dynamics accurately.

Figure 3: Temporal change of the predicted peak magnitude with the model updates: the black line corresponds to the median predictions, while the red polygon is based on the first and the third quartile of the predictions.

Figure 3: Temporal change of the predicted peak magnitude with the model updates: the black line corresponds to the median predictions, while the red polygon is based on the first and the third quartile of the predictions.

With the model updates, the median predictions of the magnitude of the peaks vary between 6,000 and 2,800 active cases of COVID-19 cases in Macedonia. The trend of the prediction is almost monotonically decreasing. With the recent updates, the median prediction is quite stable with a moderate increasing trend from 2,800 and 3,600. The current median prediction of the peak magnitude, based on the model updated with the data up to 10th of July, is 3,529 (note that this is a median of the bootstrapped model predictions and is slightly lower than the observed number of active cases).

Important notes

Why this simple variant of SIR (and not, e.g., SEIR or more complex ones)? Because it is simple and has two parameters only, which we have to fit against a very limited amount of data. The variance of the parameter fit is high enough even with these two parameters, fitting complex models with higher number of parameters is out of scope in this situation.

How reliable are these predictions? Please note that this might be considered an optimistic predictions since the observed size of the infected population might be unrealistically small due to the policy of limited, non-systematic testing for Covid-19 in Macedonia. Using the same model in Slovenia (for the first and, so far, the only wave) lead to precise predictions of both, the peak data and the peak magnitude. The good results in Slovenia, however, do not guarantee that the model will show the same utility in the case of modeling the second wave of the epidemics in Macedonia.

What happened on 18th of June? The model could not be properly updated with the data up to 18th of June. The fitted value of the \(\gamma\) parameter was 0, leading to a unrealistic model simulation. That is why we extracted the predictions of the model for 18th of June from the graphs in Figures 2 and 3. This raises additional doubts in the reliability of the model predictions mentioned above.

A model overhaul on 30th of June We realized that the model assumptions related to the range of possible values of the model parameters were not realistic, since the fit of the model to the data started to deteriorate after 20th of June. To obtain plausible fit to the new observations (observations after 20th of June), we extended the parameter ranges from the usual \([0,1]\) to the ones used for fitting the data in Slovenia \([0,5]\). The new ranges lead to models with better fit of the observed data, also for the dates prior to 20th of June. We refitted all the models and revised all the graphs in the report on 30th of June.

Parameter values are out of the ranges prescribed with the SIR model, especially the value of \(\gamma\), which should be at most 1. We assume that the improper parameter values compensate for the measurement bias, due to the limited number of tested individuals and the varying government measures for coping with the epidemics.


This is an R Markdown Notebook. The first version of this report was prepared on 31st of March 2020 for the data on COVID-19 epidemics in Slovenia. The last update took place on 11th of July 2020. Modeling and simulation experiments performed by Nikola Simidjievski, Matej Petković and Ljupčo Todorovski.

LS0tCnRpdGxlOiAiTW9kZWxpbmcgdGhlIENPVklELTE5IEVwaWRlbWljcyBpbiBNYWNlZG9uaWEiCm91dHB1dDoKICBodG1sX25vdGVib29rOiBkZWZhdWx0CiAgcGRmX2RvY3VtZW50OiBkZWZhdWx0Ci0tLQoKV2UgYWltIGhlcmUgYXQgbW9kZWxpbmcgdGhlIHNwcmVhZCBvZiB0aGUgQ09WSUQtMTkgZXBpZGVtaWNzIGluIE1hY2Vkb25pYSBvdmVyIHRpbWUgdXNpbmcgdGhlIGRhdGEgb24gdGhlIGluZmVjdGVkIGluZGl2aWR1YWxzLiBUaGUgZm9jdXMgaW4gb24gdGhlIHNlY29uZCB3YXZlLCBzbyB3ZSB1c2UgdGhlIGRhdGEgZnJvbSAyN3RoIG9mIE1heSBvbi4gRm9yIG1vZGVsaW5nIHRoZSB0ZW1wb3JhbCBkeW5hbWljcyBvZiB0aGUgcG9wdWxhdGlvbiBvZiBpbmZlY3RlZCBpbmRpdmlkdWFscywgd2UgdXNlIGEgW0tlcm1hY2stTWNLZW5kcmlja10oaHR0cHM6Ly9tYXRod29ybGQud29sZnJhbS5jb20vS2VybWFjay1NY0tlbmRyaWNrTW9kZWwuaHRtbCkgdmFyaWFudCBvZiB0aGUgW1NJUiBlcGlkZW1pb2xvZ2ljYWwgbW9kZWxdKGh0dHBzOi8vbWF0aHdvcmxkLndvbGZyYW0uY29tL1NJUk1vZGVsLmh0bWwpLiBXZSBmaXQgdGhlIG1vZGVsIHBhcmFtZXRlcnMgdG8gdGhlIGRhdGEgdXNpbmcgdGhlIG1vZGVsaW5nIHRvb2wgW1Byb0JNb1RdKGh0dHA6Ly9wcm9ibW90Lmlqcy5zaS8pLiBJbiB0dXJuLCB3ZSB1c2UgdGhlIG1vZGVsIHRvIHNpbXVsYXRlIGFuZCBwcmVkaWN0IHRoZSBkeW5hbWljcyBvZiB0aGUgaW5mZWN0ZWQgcG9wdWxhdGlvbiBpbiB0aGUgZnV0dXJlLiBGcm9tIHRoZSBwcmVkaWN0ZWQgZHluYW1pY3MsIHdlIGNhbiBpbmZlciB0aGUgZXhwZWN0ZWQgdGltZSBwb2ludCBvZiB0aGUgaW5mZWN0aW9uIHBlYWssIHRoZSBudW1iZXIgb2YgaW5mZWN0ZWQgaW5kaXZpZHVhbHMgYXQgdGhlIHBlYWsgYW5kIHRoZSBleHBlY3RlZCB0aW1lIHBvaW50IG9mIHRoZSBlcGlkZW1pY3MgZGVtaXNlLgoKCiMgVGhlIG1vZGVsCgpUaGUgW0tlcm1hY2stTWNLZW5kcmlja10oaHR0cHM6Ly9tYXRod29ybGQud29sZnJhbS5jb20vS2VybWFjay1NY0tlbmRyaWNrTW9kZWwuaHRtbCkgdmFyaWFudCBvZiB0aGUgU0lSIG1vZGVsIG9mIHRoZSB0ZW1wb3JhbCBzcHJlYWQgb2YgdGhlIGluZmVjdHVvdXMgZGlzZWFzZSBpbiBhIGNsb3NlZCwgaG9tb2dlbmVvdXMgcG9wdWxhdGlvbiBvZiBpbmRpdmlkdWFscy4gSXQgY29tcHJpc2VzIHRocmVlIGRpZmZlcmVudGlhbCBlcXVhdGlvbnMgbW9kZWxpbmcgdGhlIGNoYW5nZSBvZiB0aGUgdGhyZWUgdmFyaWFibGVzIFMsIEkgYW5kIFIsIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHNpemUgb2YgdGhlIHBvcHVsYXRpb25zIG9mIHN1c2NlcHRpYmxlIChTKSwgaW5mZWN0ZWQgKEkpIGFuZCByZWNvdmVyZWQgKFIpIGluZGl2aWR1YWxzOgokJApcZnJhY3tkIFN9e2QgdH0gPSAtIFxiZXRhIFMgSSBcXApcZnJhY3tkIEl9e2QgdH0gPSBcYmV0YSBTIEkgLSBcZ2FtbWEgSSBcXApcZnJhY3tkIFJ9e2QgdH0gPSBcZ2FtbWEgSSAuCiQkClRoZSB0d28gY29uc3RhbnQgcGFyYW1ldGVycyBvZiAkXGJldGEkIGFuZCAkXGdhbW1hJCByZXByZXNlbnQgdGhlIHJhdGVzIG9mIGluZmVjdGlvbiBhbmQgcmVjb3ZlcnksIHJlc3BlY3RpdmVseS4KCkdpdmVuIHRoZSBwb3B1bGF0aW9uIHNpemVzIGF0IHRoZSBpbml0aWFsIHRpbWUgcG9pbnQgJHRfMCQsICRTKHRfMCkkLCAkSSh0XzApJCBhbmQgJFIodF8wKSQsIGFsb25nIHdpdGggdGhlIHZhbHVlcyBvZiAkXGJldGEkIGFuZCAkXGdhbW1hJCwgd2UgY2FuIHNpbXVsYXRlIHRoZSBkeW5hbWljYWwgY2hhbmdlIG9mIHRoZSB0aHJlZSBwb3B1bGF0aW9ucyB0aHJvdWdoIHRpbWUuIEF0IGFueSBzaW11bGF0aW9uIHRpbWUgcG9pbnQgJHQkLCB0aGUgc3VtICRTKHQpICsgSSh0KSArIFIodCkkIGlzIGNvbnN0YW50IGFuZCBlcXVhbHMgdGhlIHNpemUgb2YgdGhlIHdob2xlIHBvcHVsYXRpb24uCgoKIyBGaXR0aW5nIHRoZSBtb2RlbCB0byB0aGUgZGF0YQoKVGhlIGRhdGEgdXNlZCBmb3IgZml0dGluZyB0aGUgbW9kZWwgY29tcHJpc2VzIHRoZSB0aW1lLXNlcmllcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBkeW5hbWljIGNoYW5nZSBvZiB0aGUgbnVtYmVyIG9mIGluZmVjdGVkIGluZGl2aWR1YWxzIGluIE1hY2Vkb25pYSBmcm9tIDI3dGggb2YgTWF5IHRvIHRoZSBjdXJyZW50IGRhdGUuIFdlIHJlZ3VsYXJseSB1cGRhdGUgdGhlIGRhdGEgdXNpbmcgdGhlIFtDb3ZpZC0xOSB0cmVrZXJdKGh0dHBzOi8vY292aWQtMTkudHJla2VyLm1rLykgV2Vic2l0ZS4KClRvIG9idGFpbiB0aGUgdmFsdWVzIG9mIHRoZSBtb2RlbCBwYXJhbWV0ZXJzICRcYmV0YSQgYW5kICRcZ2FtbWEkLCB3ZSBmaXQgdGhlIG1vZGVsIGFnYWluc3QgdGhlIG9ic2VydmF0aW9ucyBvZiB0aGUgbnVtYmVyIG9mIGluZmVjdGVkIGluZGl2aWR1YWxzLiBUbyB0aGlzIGVuZCwgd2UgdXNlIHRoZSBbUHJvQk1vVF0oaHR0cDovL3Byb2Jtb3QuaWpzLnNpLykgdG9vbCBmb3IgZGF0YS0gYW5kIGtub3dsZWRnZS1kcml2ZW4gbW9kZWxpbmcgb2YgZHluYW1pY2FsIHN5c3RlbXMuIFByb0JNb1QgZm9ybXVsYXRlcyB0aGUgZml0dGluZyBvZiB0aGUgbW9kZWwgcGFyYW1ldGVycyB0byBvYnNlcnZlZCBkYXRhIGFzIGEgdGFzayBvZiBudW1lcmljYWwgb3B0aW1pemF0aW9uLCB3aGVyZSB0aGUgb2JqZWN0aXZlIGlzIHRvIG1pbmltaXplIHRoZSBkaXNjcmVwYW5jeSBiZXR3ZWVuIHRoZSBvYnNlcnZhdGlvbnMgJEkkIGFuZCBzaW11bGF0ZWQgdmFsdWVzICRcaGF0e0l9JCBvZiB0aGUgc2l6ZSBvZiB0aGUgaW5mZWN0ZWQgcG9wdWxhdGlvbi4gVGhlIGRpc2NyZXBhbmN5IGlzIG1lYXN1cmVkIHVzaW5nIHRoZSBzdGFuZGFyZCByb290LW1lYW4tc3F1YXJlLWVycm9yIChSTVNFKToKCiQkIHtSTVNFfSA9IFxzcXJ0eyBcZnJhY3sxfXtufSBcc3VtIF97dCA9IHRfMH0gXnt0X3tuLTF9fSAoSSh0KSAtIFxoYXR7SX0odCkpXjJ9LCAkJAp3aGVyZSAkbiQgaXMgdGhlIG51bWJlciBvZiBvYnNlcnZhdGlvbnMgYXQgdGhlIHRpbWUgcG9pbnRzICR0XzAsIHRfMSwgXGxkb3RzIHRfe24tMX0kLiBOb3RlIHRoYXQgJFJNU0UkIGlzIG1lYXN1cmVkIHVzaW5nIHRoZSBzaW11bGF0ZWQgYmVoYXZpb3Igb2YgdGhlIG1vZGVsICRcaGF0e3l9JDogUHJvQk1vVCBzaW11bGF0ZXMgdGhlIFNJUiBtb2RlbCB1c2luZyB0aGUgQ1ZPREUgc29sdmVyIG9mIG9yZGluYXJ5IGRpZmZlcmVudGlhbCBlcXVhdGlvbnMgYXMgaW1wbGVtZW50ZWQgaW4gdGhlIFtTdW5kaWFscyBzdWl0ZV0oaHR0cHM6Ly9jb21wdXRpbmcubGxubC5nb3YvcHJvamVjdHMvc3VuZGlhbHMpLiBUaGUgcGFyYW1ldGVyIGZpdHRpbmcgb2YgdGhlIFNJUiBtb2RlbCBsZWFkcyB0byBhIHNpbXBsZSB0d28tZGltZW5zaW9uYWwgbnVtZXJpY2FsIG9wdGltaXphdGlvbiBwcm9ibGVtLiBUbyBzb2x2ZSBpdCwgUHJvQk1vVCBlbXBsb3lzIHRoZSBbRGlmZmVyZW50aWFsIEV2b2x1dGlvbl0oaHR0cHM6Ly93d3cxLmljc2kuYmVya2VsZXkuZWR1L35zdG9ybi9jb2RlLmh0bWwpIGFsZ29yaXRobSB3aXRoIHN0YW5kYXJkIHNldHRpbmdzIGFuZCBhIHBvcHVsYXRpb24gc2l6ZSBvZiAxMDAuIFRoZSBvYnRhaW5lZCBzb2x1dGlvbiBvZiB0aGUgb3B0aW1pemF0aW9uIHByb2JsZW0gYXNzaWducyB2YWx1ZXMgdG8gdGhlIGZpdHRlZCBwYXJhbWV0ZXJzIHRoYXQgbGVhZCB0byB0aGUgbWluaW1hbCBSTVNFIGRpc2NyZXBhbmN5IGJldHdlZW4gdGhlIG9ic2VydmF0aW9ucyBhbmQgdGhlIHNpbXVsYXRpb25zLgoKCiMgU2ltdWxhdGluZyB0aGUgbW9kZWwKCk9uY2Ugd2UgZml0IHRoZSB2YWx1ZXMgb2YgdGhlIGluaXRpYWwgcG9wdWxhdGlvbiBzaXplcyBhbmQgdGhlIHR3byByYXRlIHBhcmFtZXRlcnMsIHdlIGNhbiBzaW11bGF0ZSB0aGUgbW9kZWwgYmV5b25kIHRoZSBsYXN0IG9ic2VydmF0aW9uIHBvaW50ICR0X3tuLTF9JCBhbmQgdGhlcmVmb3JlIG9idGFpbiBwcmVkaWN0aW9uIG9mIHRoZSBpbmZlY3Rpb24gZHluYW1pY3MuCgpOb3RlIGhvd2V2ZXIsIHRoYXQgdGhlIG1vZGVsIHBhcmFtZXRlcnMgYXJlIGJlaW5nIGluZmVycmVkIGZyb20gYSB2ZXJ5IGxpbWl0ZWQgbnVtYmVyIG9mIG9ic2VydmF0aW9uczogd2Ugb2JzZXJ2ZSBvbmx5IGZldyBkYXRhIHBvaW50cyBhdCB0aGUgdmVyeSBiZWdpbm5pbmcgb2YgdGhlIHNlY29uZCB3YXZlIG9mIHRoZSBlcGlkZW1pY3Mgd2l0aCBhIChyYXBpZGx5KSBncm93aW5nIHNpemUgb2YgdGhlIHBvcHVsYXRpb24gb2YgaW5mZWN0ZWQgaW5kaXZpZHVhbHMuIFNlY29uZCwgdGhlIG9ic2VydmF0aW9ucyBhcmUgYmFzZWQgb24gYSBsaW1pdGVkIHNhbXBsZSBvZiBpbmRpdmlkdWFscyB0aGF0IGhhdmUgYmVlbiB0ZXN0ZWQuIE9uIHN1Y2ggYSBzbWFsbCBzZXQgb2Ygb2JzZXJ2YXRpb25zLCB3ZSBmYWNlIGEgaGlnaCByaXNrIG9mIG92ZXJmaXR0aW5nLiBXaGlsZSB0aGUgYmlhcyBjb21wb25lbnQgb2YgdGhlIGZpdHRpbmcgZXJyb3IgY2FuIGJlIGtlcHQgYXQgYmF5IGJ5IGFzc3VtaW5nIHRoZSBTSVIgbW9kZWwsIHRoZSB2YXJpYW5jZSBvZiB0aGUgcGFyYW1ldGVyIGVzdGltYXRlcyBpcyBvdXQgb2YgY29udHJvbC4KClRvIGFjY291bnQgZm9yIHRoZSBoaWdoIHZhcmlhbmNlIG9mIHRoZSBwYXJhbWV0ZXIgZXN0aW1hdGVzLCB3ZSBwZXJmb3JtIGEgYm9vdHN0cmFwIHNpbXVsYXRpb24gb2YgdGhlIG1vZGVsIGFzIG9wcG9zZWQgdG8gYSBzaW5nbGUgbW9kZWwgc2ltdWxhdGlvbiB3aXRoIHRoZSBvcHRpbWFsbHkgZml0dGVkIHBhcmFtZXRlciB2YWx1ZXMuIFRoZSBib290c3RyYXAgc2ltdWxhdGlvbiBwcm9jZWR1cmUgc2FtcGxlcyB0aGUgcGFyYW1ldGVyIHZhbHVlcyBpbiB0d28gd2F5cy4gRmlyc3QsIHdlIHNhbXBsZSBhbGwgdGhlIHBhcmFtZXRlciB2YWx1ZXMgY29uc2lkZXJlZCBieSB0aGUgRGlmZmVyZW50aWFsIEV2b2x1dGlvbiBhbGdvcml0aG0gZHVyaW5nIHRoZSBvcHRpbWl6YXRpb246IGdpdmVuIHRoZSBhbGdvcml0aG0gc2V0dGluZ3MsIDIsMDAwIGV2YWx1YXRpb25zIGFyZSBwZXJmb3JtZWQuIFdlIGNvbnN0cmFpbiB0aGUgc2FtcGxpbmcgdG8gdGhvc2UgcGFyYW1ldGVyIHZhbHVlcyB0aGF0IGxlYWQgdG8gUk1TRSwgd2hpY2ggaXMgd2l0aGluIGEgNSUgbWFyZ2luIG9mIHRoZSBSTVNFIG9mIHRoZSBvcHRpbWFsIHBhcmFtZXRlciB2YWx1ZXMsIGkuZS4sIGxpZXMgd2l0aGluIHRoZSBpbnRlcnZhbCAkW1JNU0Vfe29wdH0sIFJNU0Vfe29wdH0gXGNkb3QgMS4wNV0kLCB3aGVyZSAke1JNU0V9X3tvcHR9JCBpcyB0aGUgZXJyb3Igb2J0YWluZWQgd2l0aCB0aGUgb3B0aW1hbCBwYXJhbWV0ZXIgdmFsdWVzLgoKU2Vjb25kLCBnaXZlbiB0aGlzIGluaXRpYWwgc2V0IG9mIHBhcmFtZXRlciB2YWx1ZXMsIHdlIHNhbXBsZSB0aGVpciBuZWlnaGJvcmhvb2RzIGZyb20gdGhlIEdhdXNzaWFuIGRpc3RyaWJ1dGlvbiAkTihwXzAsIFxzaWdtYV9wKSQsIHdoZXJlICRwXzAkIGFuZCAkXHNpZ21hX3AkIGFyZSBlc3RpbWF0ZWQgZnJvbSB0aGUgUHJvQk1vVCBldmFsdWF0aW9ucyBzZWxlY3RlZCBpbiB0aGUgZmlyc3QgcGhhc2UuIEFnYWluLCB3ZSBjb25zdHJhaW4gdGhlIHNhbXBsaW5nIHRvIHRob3NlIHBhcmFtZXRlciB2YWx1ZXMgdGhhdCBsZWFkIHRvIFJNU0UsIHdoaWNoIGlzIGxlc3MgdGhhbiBhIGhhbGYgb2YgdGhlIFJNU0Ugb2YgdGhlIHNpbXBsZXN0IG1vZGVsIHRoYXQgcHJlZGljdHMgdGhlIG1lYW4gb2YgdGhlIG9ic2VydmVkIHZhbHVlcy4KCkZvciBlYWNoIHNhbXBsZSBvZiBwYXJhbWV0ZXIgdmFsdWVzLCB3ZSBzaW11bGF0ZSB0aGUgbW9kZWwgZm9yIGEgcGVyaW9kIG9mIHRpbWUgZnJvbSB0aGUgMjd0aCBvZiBNYXkgMjAyMCB0byB0aGUgMTV0aCBvZiBPY3RvYmVyIDIwMjAuIFRoZSBzaW11bGF0aW9ucyBhcmUgYWdncmVnYXRlZCB1c2luZyBtaW5pbWFsIGFuZCBtYXhpbWFsIHNpbXVsYXRlZCB2YWx1ZXMgYXQgZWFjaCB0aW1lIHBvaW50IGxlYWRpbmcgdG8gdGhlIGdyYXBoIGluIEZpZ3VyZSAxLgoKIVtGaWd1cmUgMTogVGhlIGJvb3RzdHJhcCBzaW11bGF0aW9uIChibHVlIHBvbHlnb24pIG9mIHRoZSBTSVIgbW9kZWwgZml0dGVkIHRvIHRoZSBvYnNlcnZhdGlvbnMgb2YgdGhlIG51bWJlciBvZiBpbmZlY3RlZCBpbmRpdmlkdWFscyBpbiBNYWNlZG9uaWEgKHZlcnRpY2FsIGJhcnMpIGZyb20gMjd0aCBvZiBNYXkgdG8gMTV0aCBvZiBPY3RvYmVyIDIwMjAuIFRoZSBzb2xpZCBibGFjayBsaW5lIHdpdGhpbiB0aGUgcG9seWdvbiBkZXBpY3RzIHRoZSBzaW11bGF0aW9uIG9mIHRoZSBtb2RlbCB3aXRoIG9wdGltYWwgcGFyYW1ldGVyIHZhbHVlcyAobG93ZXN0IFJNU0UpLl0oLi9ncmFwaHMvc2ltLTIwMDUyNy0yMDA3MTAucG5nKQoKIyBBbmFseXNpcyBvZiB0aGUgc2ltdWxhdGlvbnMKClVzaW5nIHRoZSBzaW11bGF0aW9ucywgd2UgcHJlZGljdCB0aGUgdGltZSBwb3NpdGlvbiBvZiB0aGUgZXh0cmVtZSBudW1iZXIgb2YgYWN0aXZlIGNhc2VzLCB3aGljaCB3ZSByZWZlciB0byBhcyBwZWFrLiBXaGVuIGNvbnNpZGVyaW5nIHRoZSBwZWFrLCBib3RoLCB0aGUgbWFnbml0dWRlIGFuZCB0aGUgdGltZSBwb2ludCBvZiB0aGUgcGVhayBhcmUgb2YgaW50ZXJlc3QuIEFmdGVyIG9ic2VydmluZyB0aGUgcm9idXN0bmVzcyBvZiB0aGUgbW9kZWwgcHJlZGljdGlvbnMgZHVyaW5nIHRoZSBmaXJzdCB0ZW4gdXBkYXRlcyBvZiB0aGUgbW9kZWwsIHdlIHB1dCB0aGUgcHJlZGljdGlvbnMgaW50byBwZXJzcGVjdGl2ZSBpbiBGaWd1cmVzIDIgYW5kIDMuCgohW0ZpZ3VyZSAyOiBUZW1wb3JhbCBjaGFuZ2Ugb2YgdGhlIHByZWRpY3RlZCBfX3BlYWsgdGltZSBwb2ludF9fIHdpdGggdGhlIG1vZGVsIHVwZGF0ZXM6IHRoZSBibGFjayBsaW5lIGNvcnJlc3BvbmRzIHRvIHRoZSBtZWRpYW4gcHJlZGljdGlvbnMsIHdoaWxlIHRoZSByZWQgcG9seWdvbiBpcyBiYXNlZCBvbiB0aGUgZmlyc3QgYW5kIHRoZSB0aGlyZCBxdWFydGlsZSBvZiB0aGUgcHJlZGljdGlvbnMuXSguL2dyYXBocy9wZWFrLXRzLXN5bnRoLnBuZykKClRoZSBtYWpvcml0eSBvZiB0aGUgYm9vdHN0cmFwZWQgc2ltdWxhdGlvbnMgcHJlZGljdCB0aGUgbWVkaWFuIHRpbWUgcG9pbnQgb2YgdGhlIHBlYWsgdG8gYmUgYmV0d2VlbiBlbmQgb2YgSnVuZSBhbmQgYmVnaW5uaW5nIG9mIEp1bHkuIEFmdGVyIHRoZSBpbml0aWFsIG1vZGVsIHVwZGF0ZXMgd2l0aCB1bnN0YWJsZSBhbmQgZGVjcmVhc2luZyBwcmVkaWN0aW9ucywgdGhlIG1vcmUgcmVjZW50IHVwZGF0ZXMgbGVhZCB0byBhIF9fcXVpdGUgc3RhYmxlIHByZWRpY3Rpb24gKHdpdGggYSBzbGlnaHQgbW9ub3RvbmljIGluY3JlYXNlIHRvd2FyZHMgdGhlIGVuZCkgb2YgdGhlIG1lZGlhbiBwZWFrIHZhbHVlIGF0IHRoZSBlbmQgb2YgSnVuZSBvciAxc3Qgb2YgSnVseV9fLiBUaGUgY3VycmVudCBwcmVkaWN0aW9uLCBiYXNlZCBvbiB0aGUgbW9kZWwgdXBkYXRlZCB3aXRoIHRoZSBkYXRhIHVwIHRvIDEwdGggb2YgSnVseSwgaXMgX18ybmQgb2YgSnVseV9fOiB0aGUgbW9kZWwgcHJlZGljdHMgdGhhdCBNYWNlZG9uaWEgaXMgcGFzdCB0aGUgcGVhayBwb2ludCBvZiB0aGUgc2Vjb25kIHdhdmUuIFRoZSBhY3R1YWwgcGVhayBpbiB0aGUgbWVhc3VyZWQgZGF0YSBpcyBvbiA0dGggb2YgSnVseS4KClRoZSBudW1iZXIgb2YgYWN0aXZlIGNhc2VzIGluIHRoZSBuZXh0IGRheXMgaXMgZXhwZWN0ZWQgdG8gZGVjbGluZSwgd2hpY2ggYWN0dWFsbHkgaGFwcGVuZWQgb24gMzB0aCBvZiBKdW5lLCB0aGUgcGVhayBiZWluZyBhY3R1YWxseSBvYnNlcnZlZCBvbiA0dGggb2YgSnVseS4gPCEtLSBfX05vdGUgaG93ZXZlciwgdGhhdCB3ZSBtb3N0bHkgb2JzZXJ2ZSBhbiBpbmNyZWFzaW5nIG51bWJlciBvZiBhY3RpdmUgY2FzZXMgaW4gSnVseS4gLS0+IF9fRm9yIGRheXMgbm93LCB0aGUgbW9kZWwgcHJlZGljdGlvbiBvZiB0aGUgcGVhayBkYXRhIGlzIG92ZXJseSBvcHRpbWlzdGljLl9fIFRoaXMgbWlnaHQgYmUgZHVlIHRvIHRoZSBjaGFuZ2luZyBkeW5hbWljcyBvZiB0aGUgbnVtYmVyIG9mIGFjdGl2ZSBjYXNlcy4gV2hpbGUgYXJvdW5kIDIwdGggb2YgSnVuZSB0aGUgZGFpbHkgaW5jcmVhc2Ugb2YgdGhlIG51bWJlciBvZiBhY3RpdmUgY2FzZXMgc3RhcmVkIHRvIHNsb3cgZG93biwgZnJvbSAzMHRoIG9mIEp1bmUgdGhlIGRhaWx5IGNoYW5nZSB2YXJpZWQgZnJvbSAtMTM3IChkZWNyZWFzZSkgdG8gOTMgKGluY3JlYXNlKS4gVGhlIHNpbXBsZSBTSVIgbW9kZWwgZmFpbHMgdG8gZm9sbG93IHRoZSBkeW5hbWljcyBhY2N1cmF0ZWx5LgoKIVtGaWd1cmUgMzogVGVtcG9yYWwgY2hhbmdlIG9mIHRoZSBwcmVkaWN0ZWQgX19wZWFrIG1hZ25pdHVkZV9fIHdpdGggdGhlIG1vZGVsIHVwZGF0ZXM6IHRoZSBibGFjayBsaW5lIGNvcnJlc3BvbmRzIHRvIHRoZSBtZWRpYW4gcHJlZGljdGlvbnMsIHdoaWxlIHRoZSByZWQgcG9seWdvbiBpcyBiYXNlZCBvbiB0aGUgZmlyc3QgYW5kIHRoZSB0aGlyZCBxdWFydGlsZSBvZiB0aGUgcHJlZGljdGlvbnMuXSguL2dyYXBocy9wZWFrLW1zLXN5bnRoLnBuZykKCldpdGggdGhlIG1vZGVsIHVwZGF0ZXMsIHRoZSBtZWRpYW4gcHJlZGljdGlvbnMgb2YgdGhlIG1hZ25pdHVkZSBvZiB0aGUgcGVha3MgdmFyeSBiZXR3ZWVuIDYsMDAwIGFuZCAyLDgwMCBhY3RpdmUgY2FzZXMgb2YgQ09WSUQtMTkgY2FzZXMgaW4gTWFjZWRvbmlhLiBUaGUgdHJlbmQgb2YgdGhlIHByZWRpY3Rpb24gaXMgYWxtb3N0IG1vbm90b25pY2FsbHkgZGVjcmVhc2luZy4gV2l0aCB0aGUgcmVjZW50IHVwZGF0ZXMsIHRoZSBtZWRpYW4gcHJlZGljdGlvbiBpcyBxdWl0ZSBzdGFibGUgd2l0aCBhIG1vZGVyYXRlIGluY3JlYXNpbmcgdHJlbmQgZnJvbSAyLDgwMCBhbmQgMyw2MDAuIFRoZSBfX2N1cnJlbnQgbWVkaWFuIHByZWRpY3Rpb24gb2YgdGhlIHBlYWsgbWFnbml0dWRlLCBiYXNlZCBvbiB0aGUgbW9kZWwgdXBkYXRlZCB3aXRoIHRoZSBkYXRhIHVwIHRvIDEwdGggb2YgSnVseSwgaXMgMyw1MjlfXyAobm90ZSB0aGF0IHRoaXMgaXMgYSBtZWRpYW4gb2YgdGhlIGJvb3RzdHJhcHBlZCBtb2RlbCBwcmVkaWN0aW9ucyBhbmQgaXMgc2xpZ2h0bHkgbG93ZXIgdGhhbiB0aGUgb2JzZXJ2ZWQgbnVtYmVyIG9mIGFjdGl2ZSBjYXNlcykuCgo8IS0tIE5vdGUgYWdhaW4sIHRoYXQsIGRlc3BpdGUgdGhlIG9idmlvdXMgaW5jb25zaXN0ZW5jeSB3aXRoIHRoZSBlbXBpcmljYWwgZGF0YSwgdGhlIG1vZGVsIG1pZ2h0IGhhdmUgc3RpbGwgY29ycmVjdGx5IHByZWRpY3RlZCB0aGUgbWFnbml0dWRlIG9mIHRoZSBtYWduaXR1ZGUgb2YgdGhlIHBlYWsgb2YgdGhlIG51bWJlciBvZiBpbmZlY3RlZCBpbmRpdmlkdWFscy4gX19EZXNwaXRlIHRoZSBhYnJ1cHQgZGF0YSB1cGRhdGUgYW5kIHJldmlzaW9uIG9uIDE0dGggb2YgQXByaWwsIHRoZSBwcmVkaWN0aW9uIG9mIHRoZSB1cGRhdGVkIG1vZGVsIHJlbWFpbiBzdGFibGUgc2hvd2luZyBhIHNsaWdodCBpbmNyZWFzaW5nIHRyZW5kIGluIHRoZSBtb3N0IHJlY2VudCB1cGRhdGVzX18uIC0tPgoKCiMgSW1wb3J0YW50IG5vdGVzCgpfX1doeSB0aGlzIHNpbXBsZSB2YXJpYW50IG9mIFNJUiAoYW5kIG5vdCwgZS5nLiwgU0VJUiBvciBtb3JlIGNvbXBsZXggb25lcyk/X18gQmVjYXVzZSBpdCBpcyBzaW1wbGUgYW5kIGhhcyB0d28gcGFyYW1ldGVycyBvbmx5LCB3aGljaCB3ZSBoYXZlIHRvIGZpdCBhZ2FpbnN0IGEgdmVyeSBsaW1pdGVkIGFtb3VudCBvZiBkYXRhLiBUaGUgdmFyaWFuY2Ugb2YgdGhlIHBhcmFtZXRlciBmaXQgaXMgaGlnaCBlbm91Z2ggZXZlbiB3aXRoIHRoZXNlIHR3byBwYXJhbWV0ZXJzLCBmaXR0aW5nIGNvbXBsZXggbW9kZWxzIHdpdGggaGlnaGVyIG51bWJlciBvZiBwYXJhbWV0ZXJzIGlzIG91dCBvZiBzY29wZSBpbiB0aGlzIHNpdHVhdGlvbi4KCl9fSG93IHJlbGlhYmxlIGFyZSB0aGVzZSBwcmVkaWN0aW9ucz9fXyBQbGVhc2Ugbm90ZSB0aGF0IHRoaXMgbWlnaHQgYmUgY29uc2lkZXJlZCBhbiBvcHRpbWlzdGljIHByZWRpY3Rpb25zIHNpbmNlIHRoZSBvYnNlcnZlZCBzaXplIG9mIHRoZSBpbmZlY3RlZCBwb3B1bGF0aW9uIG1pZ2h0IGJlIHVucmVhbGlzdGljYWxseSBzbWFsbCBkdWUgdG8gdGhlIHBvbGljeSBvZiBsaW1pdGVkLCBub24tc3lzdGVtYXRpYyB0ZXN0aW5nIGZvciBDb3ZpZC0xOSBpbiBNYWNlZG9uaWEuIFVzaW5nIHRoZSBzYW1lIG1vZGVsIGluIFNsb3ZlbmlhIChmb3IgdGhlIGZpcnN0IGFuZCwgc28gZmFyLCB0aGUgb25seSB3YXZlKSBsZWFkIHRvIHByZWNpc2UgcHJlZGljdGlvbnMgb2YgYm90aCwgdGhlIHBlYWsgZGF0YSBhbmQgdGhlIHBlYWsgbWFnbml0dWRlLiBUaGUgZ29vZCByZXN1bHRzIGluIFNsb3ZlbmlhLCBob3dldmVyLCBkbyBub3QgZ3VhcmFudGVlIHRoYXQgdGhlIG1vZGVsIHdpbGwgc2hvdyB0aGUgc2FtZSB1dGlsaXR5IGluIHRoZSBjYXNlIG9mIG1vZGVsaW5nIHRoZSBzZWNvbmQgd2F2ZSBvZiB0aGUgZXBpZGVtaWNzIGluIE1hY2Vkb25pYS4KCl9fV2hhdCBoYXBwZW5lZCBvbiAxOHRoIG9mIEp1bmU/X18gVGhlIG1vZGVsIGNvdWxkIG5vdCBiZSBwcm9wZXJseSB1cGRhdGVkIHdpdGggdGhlIGRhdGEgdXAgdG8gMTh0aCBvZiBKdW5lLiBUaGUgZml0dGVkIHZhbHVlIG9mIHRoZSAkXGdhbW1hJCBwYXJhbWV0ZXIgd2FzIDAsIGxlYWRpbmcgdG8gYSB1bnJlYWxpc3RpYyBtb2RlbCBzaW11bGF0aW9uLiBUaGF0IGlzIHdoeSB3ZSBleHRyYWN0ZWQgdGhlIHByZWRpY3Rpb25zIG9mIHRoZSBtb2RlbCBmb3IgMTh0aCBvZiBKdW5lIGZyb20gdGhlIGdyYXBocyBpbiBGaWd1cmVzIDIgYW5kIDMuIFRoaXMgcmFpc2VzIGFkZGl0aW9uYWwgZG91YnRzIGluIHRoZSByZWxpYWJpbGl0eSBvZiB0aGUgbW9kZWwgcHJlZGljdGlvbnMgbWVudGlvbmVkIGFib3ZlLgoKX19BIG1vZGVsIG92ZXJoYXVsIG9uIDMwdGggb2YgSnVuZV9fIFdlIHJlYWxpemVkIHRoYXQgdGhlIG1vZGVsIGFzc3VtcHRpb25zIHJlbGF0ZWQgdG8gdGhlIHJhbmdlIG9mIHBvc3NpYmxlIHZhbHVlcyBvZiB0aGUgbW9kZWwgcGFyYW1ldGVycyB3ZXJlIG5vdCByZWFsaXN0aWMsIHNpbmNlIHRoZSBmaXQgb2YgdGhlIG1vZGVsIHRvIHRoZSBkYXRhIHN0YXJ0ZWQgdG8gZGV0ZXJpb3JhdGUgYWZ0ZXIgMjB0aCBvZiBKdW5lLiBUbyBvYnRhaW4gcGxhdXNpYmxlIGZpdCB0byB0aGUgbmV3IG9ic2VydmF0aW9ucyAob2JzZXJ2YXRpb25zIGFmdGVyIDIwdGggb2YgSnVuZSksIHdlIGV4dGVuZGVkIHRoZSBwYXJhbWV0ZXIgcmFuZ2VzIGZyb20gdGhlIHVzdWFsICRbMCwxXSQgdG8gdGhlIG9uZXMgdXNlZCBmb3IgZml0dGluZyB0aGUgZGF0YSBpbiBTbG92ZW5pYSAkWzAsNV0kLiBUaGUgbmV3IHJhbmdlcyBsZWFkIHRvIG1vZGVscyB3aXRoIGJldHRlciBmaXQgb2YgdGhlIG9ic2VydmVkIGRhdGEsIGFsc28gZm9yIHRoZSBkYXRlcyBwcmlvciB0byAyMHRoIG9mIEp1bmUuIFdlIHJlZml0dGVkIGFsbCB0aGUgbW9kZWxzIGFuZCByZXZpc2VkIGFsbCB0aGUgZ3JhcGhzIGluIHRoZSByZXBvcnQgb24gMzB0aCBvZiBKdW5lLgoKX19QYXJhbWV0ZXIgdmFsdWVzX18gYXJlIG91dCBvZiB0aGUgcmFuZ2VzIHByZXNjcmliZWQgd2l0aCB0aGUgU0lSIG1vZGVsLCBlc3BlY2lhbGx5IHRoZSB2YWx1ZSBvZiAkXGdhbW1hJCwgd2hpY2ggc2hvdWxkIGJlIGF0IG1vc3QgMS4gV2UgYXNzdW1lIHRoYXQgdGhlIGltcHJvcGVyIHBhcmFtZXRlciB2YWx1ZXMgY29tcGVuc2F0ZSBmb3IgdGhlIG1lYXN1cmVtZW50IGJpYXMsIGR1ZSB0byB0aGUgbGltaXRlZCBudW1iZXIgb2YgdGVzdGVkIGluZGl2aWR1YWxzIGFuZCB0aGUgdmFyeWluZyBnb3Zlcm5tZW50IG1lYXN1cmVzIGZvciBjb3Bpbmcgd2l0aCB0aGUgZXBpZGVtaWNzLgoKPCEtLQojIEFwcGVuZGl4CgojIyBTaW11bGF0aW9uIG9mIHRoZSBwcmV2aW91cyBtb2RlbCB1cGRhdGVzCgohW0ZpZ3VyZSAxYTogQm9vdHN0cmFwIHNpbXVsYXRpb24gb2YgdGhlIG1vZGVsIHVwZGF0ZWQgd2l0aCB0aGUgbnVtYmVyIG9mIGluZmVjdGVkIGluZGl2aWR1YWxzIGluIFNsb3ZlbmlhIHVwIHRvIDI5dGggb2YgTWFyY2ggMjAyMC5dKC4vZ3JhcGhzL3NpbS0yMDAzMTQtMjAwMzI5LnBuZykKCiFbRmlndXJlIDFiOiBCb290c3RyYXAgc2ltdWxhdGlvbiBvZiB0aGUgbW9kZWwgdXBkYXRlZCB3aXRoIHRoZSBudW1iZXIgb2YgaW5mZWN0ZWQgaW5kaXZpZHVhbHMgaW4gU2xvdmVuaWEgdXAgdG8gMzB0aCBvZiBNYXJjaCAyMDIwLl0oLi9ncmFwaHMvc2ltLTIwMDMxNC0yMDAzMzAucG5nKQoKIVtGaWd1cmUgMWM6IEJvb3RzdHJhcCBzaW11bGF0aW9uIG9mIHRoZSBtb2RlbCB1cGRhdGVkIHdpdGggdGhlIG51bWJlciBvZiBpbmZlY3RlZCBpbmRpdmlkdWFscyBpbiBTbG92ZW5pYSB1cCB0byAzMXN0IG9mIE1hcmNoIDIwMjAuXSguL2dyYXBocy9zaW0tMjAwMzE0LTIwMDMzMS5wbmcpCgohW0ZpZ3VyZSAxZDogQm9vdHN0cmFwIHNpbXVsYXRpb24gb2YgdGhlIG1vZGVsIHVwZGF0ZWQgd2l0aCB0aGUgbnVtYmVyIG9mIGluZmVjdGVkIGluZGl2aWR1YWxzIGluIFNsb3ZlbmlhIHVwIHRvIDFzdCBvZiBBcHJpbCAyMDIwLl0oLi9ncmFwaHMvc2ltLTIwMDMxNC0yMDA0MDEucG5nKQoKIVtGaWd1cmUgMWU6IEJvb3RzdHJhcCBzaW11bGF0aW9uIG9mIHRoZSBtb2RlbCB1cGRhdGVkIHdpdGggdGhlIG51bWJlciBvZiBpbmZlY3RlZCBpbmRpdmlkdWFscyBpbiBTbG92ZW5pYSB1cCB0byAybmQgb2YgQXByaWwgMjAyMC5dKC4vZ3JhcGhzL3NpbS0yMDAzMTQtMjAwNDAyLnBuZykKCiFbRmlndXJlIDFmOiBCb290c3RyYXAgc2ltdWxhdGlvbiBvZiB0aGUgbW9kZWwgdXBkYXRlZCB3aXRoIHRoZSBudW1iZXIgb2YgaW5mZWN0ZWQgaW5kaXZpZHVhbHMgaW4gU2xvdmVuaWEgdXAgdG8gM3JkIG9mIEFwcmlsIDIwMjAuXSguL2dyYXBocy9zaW0tMjAwMzE0LTIwMDQwMy5wbmcpCgohW0ZpZ3VyZSAxZzogQm9vdHN0cmFwIHNpbXVsYXRpb24gb2YgdGhlIG1vZGVsIHVwZGF0ZWQgd2l0aCB0aGUgbnVtYmVyIG9mIGluZmVjdGVkIGluZGl2aWR1YWxzIGluIFNsb3ZlbmlhIHVwIHRvIDR0aCBvZiBBcHJpbCAyMDIwLl0oLi9ncmFwaHMvc2ltLTIwMDMxNC0yMDA0MDQucG5nKQoKIVtGaWd1cmUgMWg6IEJvb3RzdHJhcCBzaW11bGF0aW9uIG9mIHRoZSBtb2RlbCB1cGRhdGVkIHdpdGggdGhlIG51bWJlciBvZiBpbmZlY3RlZCBpbmRpdmlkdWFscyBpbiBTbG92ZW5pYSB1cCB0byA1dGggb2YgQXByaWwgMjAyMC5dKC4vZ3JhcGhzL3NpbS0yMDAzMTQtMjAwNDA1LnBuZykKCiFbRmlndXJlIDFpOiBCb290c3RyYXAgc2ltdWxhdGlvbiBvZiB0aGUgbW9kZWwgdXBkYXRlZCB3aXRoIHRoZSBudW1iZXIgb2YgaW5mZWN0ZWQgaW5kaXZpZHVhbHMgaW4gU2xvdmVuaWEgdXAgdG8gNnRoIG9mIEFwcmlsIDIwMjAuXSguL2dyYXBocy9zaW0tMjAwMzE0LTIwMDQwNi5wbmcpCgohW0ZpZ3VyZSAxajogQm9vdHN0cmFwIHNpbXVsYXRpb24gb2YgdGhlIG1vZGVsIHVwZGF0ZWQgd2l0aCB0aGUgbnVtYmVyIG9mIGluZmVjdGVkIGluZGl2aWR1YWxzIGluIFNsb3ZlbmlhIHVwIHRvIDd0aCBvZiBBcHJpbCAyMDIwLl0oLi9ncmFwaHMvc2ltLTIwMDMxNC0yMDA0MDcucG5nKQoKIVtGaWd1cmUgMWs6IEJvb3RzdHJhcCBzaW11bGF0aW9uIG9mIHRoZSBtb2RlbCB1cGRhdGVkIHdpdGggdGhlIG51bWJlciBvZiBpbmZlY3RlZCBpbmRpdmlkdWFscyBpbiBTbG92ZW5pYSB1cCB0byA4dGggb2YgQXByaWwgMjAyMC5dKC4vZ3JhcGhzL3NpbS0yMDAzMTQtMjAwNDA4LnBuZykKCiFbRmlndXJlIDFsOiBCb290c3RyYXAgc2ltdWxhdGlvbiBvZiB0aGUgbW9kZWwgdXBkYXRlZCB3aXRoIHRoZSBudW1iZXIgb2YgaW5mZWN0ZWQgaW5kaXZpZHVhbHMgaW4gU2xvdmVuaWEgdXAgdG8gOXRoIG9mIEFwcmlsIDIwMjAuXSguL2dyYXBocy9zaW0tMjAwMzE0LTIwMDQwOS5wbmcpCgohW0ZpZ3VyZSAxbTogQm9vdHN0cmFwIHNpbXVsYXRpb24gb2YgdGhlIG1vZGVsIHVwZGF0ZWQgd2l0aCB0aGUgbnVtYmVyIG9mIGluZmVjdGVkIGluZGl2aWR1YWxzIGluIFNsb3ZlbmlhIHVwIHRvIDEwdGggb2YgQXByaWwgMjAyMC5dKC4vZ3JhcGhzL3NpbS0yMDAzMTQtMjAwNDEwLnBuZykKCiFbRmlndXJlIDFuOiBCb290c3RyYXAgc2ltdWxhdGlvbiBvZiB0aGUgbW9kZWwgdXBkYXRlZCB3aXRoIHRoZSBudW1iZXIgb2YgaW5mZWN0ZWQgaW5kaXZpZHVhbHMgaW4gU2xvdmVuaWEgdXAgdG8gMTF0aCBvZiBBcHJpbCAyMDIwLl0oLi9ncmFwaHMvc2ltLTIwMDMxNC0yMDA0MTEucG5nKQoKIVtGaWd1cmUgMW86IEJvb3RzdHJhcCBzaW11bGF0aW9uIG9mIHRoZSBtb2RlbCB1cGRhdGVkIHdpdGggdGhlIG51bWJlciBvZiBpbmZlY3RlZCBpbmRpdmlkdWFscyBpbiBTbG92ZW5pYSB1cCB0byAxMnRoIG9mIEFwcmlsIDIwMjAuXSguL2dyYXBocy9zaW0tMjAwMzE0LTIwMDQxMi5wbmcpCgohW0ZpZ3VyZSAxcDogQm9vdHN0cmFwIHNpbXVsYXRpb24gb2YgdGhlIG1vZGVsIHVwZGF0ZWQgd2l0aCB0aGUgbnVtYmVyIG9mIGluZmVjdGVkIGluZGl2aWR1YWxzIGluIFNsb3ZlbmlhIHVwIHRvIDEzdGggb2YgQXByaWwgMjAyMC5dKC4vZ3JhcGhzL3NpbS0yMDAzMTQtMjAwNDEzLnBuZykKCiFbRmlndXJlIDFxOiBCb290c3RyYXAgc2ltdWxhdGlvbiBvZiB0aGUgbW9kZWwgdXBkYXRlZCB3aXRoIHRoZSBudW1iZXIgb2YgaW5mZWN0ZWQgaW5kaXZpZHVhbHMgaW4gU2xvdmVuaWEgdXAgdG8gMTR0aCBvZiBBcHJpbCAyMDIwLl0oLi9ncmFwaHMvc2ltLTIwMDMxNC0yMDA0MTQucG5nKQoKIVtGaWd1cmUgMXI6IEJvb3RzdHJhcCBzaW11bGF0aW9uIG9mIHRoZSBtb2RlbCB1cGRhdGVkIHdpdGggdGhlIG51bWJlciBvZiBpbmZlY3RlZCBpbmRpdmlkdWFscyBpbiBTbG92ZW5pYSB1cCB0byAxNXRoIG9mIEFwcmlsIDIwMjAuXSguL2dyYXBocy9zaW0tMjAwMzE0LTIwMDQxNS5wbmcpCgotLT4KCjwhLS0KCiMjIFVwZGF0ZXMgb2YgdGhlIHByZWRpY3Rpb25zIG9mIHRoZSBwZWFrIHRpbWUgcG9pbnRzCgohW0ZpZ3VyZSAyYTogRGlzdHJpYnV0aW9uIG9mIHRoZSBwcmVkaWN0ZWQgcGVhayB0aW1lIHBvaW50cyBpbiB0aGUgYm9vdHN0cmFwIHNpbXVsYXRpb25zIG9mIHRoZSBTSVIgbW9kZWwgKGRhdGEgdXAgdG8gMjl0aCBvZiBNYXJjaCkuXSguL2dyYXBocy9wZWFrLXRzLTIwMDMxNC0yMDAzMjkucG5nKQoKIVtGaWd1cmUgMmI6IERpc3RyaWJ1dGlvbiBvZiB0aGUgcGVhayB0aW1lIHBvaW50cyB1cGRhdGVkIHdpdGggdGhlIG51bWJlciBvZiBpbmZlY3RlZCBpbmRpdmlkdWFscyBpbiBTbG92ZW5pYSB1cCB0byAzMHRoIG9mIE1hcmNoLl0oLi9ncmFwaHMvcGVhay10cy0yMDAzMTQtMjAwMzMwLnBuZykKCiFbRmlndXJlIDJjOiBEaXN0cmlidXRpb24gb2YgdGhlIHBlYWsgdGltZSBwb2ludHMgdXBkYXRlZCB3aXRoIHRoZSBudW1iZXIgb2YgaW5mZWN0ZWQgaW5kaXZpZHVhbHMgaW4gU2xvdmVuaWEgdXAgdG8gMzFzdCBvZiBNYXJjaC5dKC4vZ3JhcGhzL3BlYWstdHMtMjAwMzE0LTIwMDMzMS5wbmcpCgohW0ZpZ3VyZSAyZDogRGlzdHJpYnV0aW9uIG9mIHRoZSBwZWFrIHRpbWUgcG9pbnRzIHVwZGF0ZWQgd2l0aCB0aGUgbnVtYmVyIG9mIGluZmVjdGVkIGluZGl2aWR1YWxzIGluIFNsb3ZlbmlhIHVwIHRvIDFzdCBvZiBBcHJpbC5dKC4vZ3JhcGhzL3BlYWstdHMtMjAwMzE0LTIwMDQwMS5wbmcpCgohW0ZpZ3VyZSAyZTogRGlzdHJpYnV0aW9uIG9mIHRoZSBwZWFrIHRpbWUgcG9pbnRzIHVwZGF0ZWQgd2l0aCB0aGUgbnVtYmVyIG9mIGluZmVjdGVkIGluZGl2aWR1YWxzIGluIFNsb3ZlbmlhIHVwIHRvIDJuZCBvZiBBcHJpbC5dKC4vZ3JhcGhzL3BlYWstdHMtMjAwMzE0LTIwMDQwMi5wbmcpCgohW0ZpZ3VyZSAyZjogRGlzdHJpYnV0aW9uIG9mIHRoZSBwZWFrIHRpbWUgcG9pbnRzIHVwZGF0ZWQgd2l0aCB0aGUgbnVtYmVyIG9mIGluZmVjdGVkIGluZGl2aWR1YWxzIGluIFNsb3ZlbmlhIHVwIHRvIDNyZCBvZiBBcHJpbC5dKC4vZ3JhcGhzL3BlYWstdHMtMjAwMzE0LTIwMDQwMy5wbmcpCgohW0ZpZ3VyZSAyZzogRGlzdHJpYnV0aW9uIG9mIHRoZSBwZWFrIHRpbWUgcG9pbnRzIHVwZGF0ZWQgd2l0aCB0aGUgbnVtYmVyIG9mIGluZmVjdGVkIGluZGl2aWR1YWxzIGluIFNsb3ZlbmlhIHVwIHRvIDR0aCBvZiBBcHJpbC5dKC4vZ3JhcGhzL3BlYWstdHMtMjAwMzE0LTIwMDQwNC5wbmcpCgohW0ZpZ3VyZSAyaDogRGlzdHJpYnV0aW9uIG9mIHRoZSBwZWFrIHRpbWUgcG9pbnRzIHVwZGF0ZWQgd2l0aCB0aGUgbnVtYmVyIG9mIGluZmVjdGVkIGluZGl2aWR1YWxzIGluIFNsb3ZlbmlhIHVwIHRvIDV0aCBvZiBBcHJpbC5dKC4vZ3JhcGhzL3BlYWstdHMtMjAwMzE0LTIwMDQwNS5wbmcpCgohW0ZpZ3VyZSAyaTogRGlzdHJpYnV0aW9uIG9mIHRoZSBwZWFrIHRpbWUgcG9pbnRzIHVwZGF0ZWQgd2l0aCB0aGUgbnVtYmVyIG9mIGluZmVjdGVkIGluZGl2aWR1YWxzIGluIFNsb3ZlbmlhIHVwIHRvIDZ0aCBvZiBBcHJpbC5dKC4vZ3JhcGhzL3BlYWstdHMtMjAwMzE0LTIwMDQwNi5wbmcpCgohW0ZpZ3VyZSAyajogRGlzdHJpYnV0aW9uIG9mIHRoZSBwZWFrIHRpbWUgcG9pbnRzIHVwZGF0ZWQgd2l0aCB0aGUgbnVtYmVyIG9mIGluZmVjdGVkIGluZGl2aWR1YWxzIGluIFNsb3ZlbmlhIHVwIHRvIDd0aCBvZiBBcHJpbC5dKC4vZ3JhcGhzL3BlYWstdHMtMjAwMzE0LTIwMDQwNy5wbmcpCgohW0ZpZ3VyZSAyazogRGlzdHJpYnV0aW9uIG9mIHRoZSBwZWFrIHRpbWUgcG9pbnRzIHVwZGF0ZWQgd2l0aCB0aGUgbnVtYmVyIG9mIGluZmVjdGVkIGluZGl2aWR1YWxzIGluIFNsb3ZlbmlhIHVwIHRvIDh0aCBvZiBBcHJpbC5dKC4vZ3JhcGhzL3BlYWstdHMtMjAwMzE0LTIwMDQwOC5wbmcpCgohW0ZpZ3VyZSAybDogRGlzdHJpYnV0aW9uIG9mIHRoZSBwZWFrIHRpbWUgcG9pbnRzIHVwZGF0ZWQgd2l0aCB0aGUgbnVtYmVyIG9mIGluZmVjdGVkIGluZGl2aWR1YWxzIGluIFNsb3ZlbmlhIHVwIHRvIDl0aCBvZiBBcHJpbC5dKC4vZ3JhcGhzL3BlYWstdHMtMjAwMzE0LTIwMDQwOS5wbmcpCgohW0ZpZ3VyZSAybTogRGlzdHJpYnV0aW9uIG9mIHRoZSBwZWFrIHRpbWUgcG9pbnRzIHVwZGF0ZWQgd2l0aCB0aGUgbnVtYmVyIG9mIGluZmVjdGVkIGluZGl2aWR1YWxzIGluIFNsb3ZlbmlhIHVwIHRvIDEwdGggb2YgQXByaWwuXSguL2dyYXBocy9wZWFrLXRzLTIwMDMxNC0yMDA0MTAucG5nKQoKIVtGaWd1cmUgMm46IERpc3RyaWJ1dGlvbiBvZiB0aGUgcGVhayB0aW1lIHBvaW50cyB1cGRhdGVkIHdpdGggdGhlIG51bWJlciBvZiBpbmZlY3RlZCBpbmRpdmlkdWFscyBpbiBTbG92ZW5pYSB1cCB0byAxMXRoIG9mIEFwcmlsLl0oLi9ncmFwaHMvcGVhay10cy0yMDAzMTQtMjAwNDExLnBuZykKCiFbRmlndXJlIDJvOiBEaXN0cmlidXRpb24gb2YgdGhlIHBlYWsgdGltZSBwb2ludHMgdXBkYXRlZCB3aXRoIHRoZSBudW1iZXIgb2YgaW5mZWN0ZWQgaW5kaXZpZHVhbHMgaW4gU2xvdmVuaWEgdXAgdG8gMTJ0aCBvZiBBcHJpbC5dKC4vZ3JhcGhzL3BlYWstdHMtMjAwMzE0LTIwMDQxMi5wbmcpCgohW0ZpZ3VyZSAycDogRGlzdHJpYnV0aW9uIG9mIHRoZSBwZWFrIHRpbWUgcG9pbnRzIHVwZGF0ZWQgd2l0aCB0aGUgbnVtYmVyIG9mIGluZmVjdGVkIGluZGl2aWR1YWxzIGluIFNsb3ZlbmlhIHVwIHRvIDEzdGggb2YgQXByaWwuXSguL2dyYXBocy9wZWFrLXRzLTIwMDMxNC0yMDA0MTMucG5nKQoKIVtGaWd1cmUgMnE6IERpc3RyaWJ1dGlvbiBvZiB0aGUgcGVhayB0aW1lIHBvaW50cyB1cGRhdGVkIHdpdGggdGhlIG51bWJlciBvZiBpbmZlY3RlZCBpbmRpdmlkdWFscyBpbiBTbG92ZW5pYSB1cCB0byAxNHRoIG9mIEFwcmlsLl0oLi9ncmFwaHMvcGVhay10cy0yMDAzMTQtMjAwNDE0LnBuZykKCiFbRmlndXJlIDJyOiBEaXN0cmlidXRpb24gb2YgdGhlIHBlYWsgdGltZSBwb2ludHMgdXBkYXRlZCB3aXRoIHRoZSBudW1iZXIgb2YgaW5mZWN0ZWQgaW5kaXZpZHVhbHMgaW4gU2xvdmVuaWEgdXAgdG8gMTV0aCBvZiBBcHJpbC5dKC4vZ3JhcGhzL3BlYWstdHMtMjAwMzE0LTIwMDQxNS5wbmcpCgohW0ZpZ3VyZSAyczogRGlzdHJpYnV0aW9uIG9mIHRoZSBwZWFrIHRpbWUgcG9pbnRzIHVwZGF0ZWQgd2l0aCB0aGUgbnVtYmVyIG9mIGluZmVjdGVkIGluZGl2aWR1YWxzIGluIFNsb3ZlbmlhIHVwIHRvIDE2dGggb2YgQXByaWwuXSguL2dyYXBocy9wZWFrLXRzLTIwMDMxNC0yMDA0MTYucG5nKQoKIyMgVXBkYXRlcyBvZiB0aGUgcHJlZGljdGlvbnMgb2YgdGhlIHBlYWsgbWFnbml0dWRlcwoKIVtGaWd1cmUgM2E6IERpc3RyaWJ1dGlvbiBvZiB0aGUgcHJlZGljdGVkIG51bWJlciBvZiBpbmZlY3RlZCBpbmRpdmlkdWFscyBhdCB0aGUgcGVhayB0aW1lIHBvaW50cyBpbiB0aGUgYm9vdHN0cmFwIHNpbXVsYXRpb25zIG9mIHRoZSBTSVIgbW9kZWwgKGRhdGEgdXAgdG8gMjl0aCBvZiBNYXJjaCkuXSguL2dyYXBocy9wZWFrLW1zLTIwMDMxNC0yMDAzMjkucG5nKQoKIVtGaWd1cmUgM2I6IERpc3RyaWJ1dGlvbiBvZiB0aGUgcHJlZGljdGVkIG51bWJlciBvZiBpbmZlY3RlZCBpbmRpdmlkdWFscyBhdCB0aGUgcGVhayB0aW1lIHBvaW50cyB1cGRhdGVkIHdpdGggdGhlIG51bWJlciBvZiBpbmZlY3RlZCBpbmRpdmlkdWFscyBpbiBTbG92ZW5pYSB1cCB0byAzMHRoIG9mIE1hcmNoLl0oLi9ncmFwaHMvcGVhay1tcy0yMDAzMTQtMjAwMzMwLnBuZykKCiFbRmlndXJlIDNjOiBEaXN0cmlidXRpb24gb2YgdGhlIHByZWRpY3RlZCBudW1iZXIgb2YgaW5mZWN0ZWQgaW5kaXZpZHVhbHMgYXQgdGhlIHBlYWsgdGltZSBwb2ludHMgdXBkYXRlZCB3aXRoIHRoZSBudW1iZXIgb2YgaW5mZWN0ZWQgaW5kaXZpZHVhbHMgaW4gU2xvdmVuaWEgdXAgdG8gMzFzdCBvZiBNYXJjaC5dKC4vZ3JhcGhzL3BlYWstbXMtMjAwMzE0LTIwMDMzMS5wbmcpCgohW0ZpZ3VyZSAzZDogRGlzdHJpYnV0aW9uIG9mIHRoZSBwcmVkaWN0ZWQgbnVtYmVyIG9mIGluZmVjdGVkIGluZGl2aWR1YWxzIGF0IHRoZSBwZWFrIHRpbWUgcG9pbnRzIHVwZGF0ZWQgd2l0aCB0aGUgbnVtYmVyIG9mIGluZmVjdGVkIGluZGl2aWR1YWxzIGluIFNsb3ZlbmlhIHVwIHRvIDFzdCBvZiBBcHJpbC5dKC4vZ3JhcGhzL3BlYWstbXMtMjAwMzE0LTIwMDQwMS5wbmcpCgohW0ZpZ3VyZSAzZjogRGlzdHJpYnV0aW9uIG9mIHRoZSBwcmVkaWN0ZWQgbnVtYmVyIG9mIGluZmVjdGVkIGluZGl2aWR1YWxzIGF0IHRoZSBwZWFrIHRpbWUgcG9pbnRzIHVwZGF0ZWQgd2l0aCB0aGUgbnVtYmVyIG9mIGluZmVjdGVkIGluZGl2aWR1YWxzIGluIFNsb3ZlbmlhIHVwIHRvIDNyZCBvZiBBcHJpbC5dKC4vZ3JhcGhzL3BlYWstbXMtMjAwMzE0LTIwMDQwMy5wbmcpCgohW0ZpZ3VyZSAzZzogRGlzdHJpYnV0aW9uIG9mIHRoZSBwcmVkaWN0ZWQgbnVtYmVyIG9mIGluZmVjdGVkIGluZGl2aWR1YWxzIGF0IHRoZSBwZWFrIHRpbWUgcG9pbnRzIHVwZGF0ZWQgd2l0aCB0aGUgbnVtYmVyIG9mIGluZmVjdGVkIGluZGl2aWR1YWxzIGluIFNsb3ZlbmlhIHVwIHRvIDR0aCBvZiBBcHJpbC5dKC4vZ3JhcGhzL3BlYWstbXMtMjAwMzE0LTIwMDQwNC5wbmcpCgohW0ZpZ3VyZSAzaDogRGlzdHJpYnV0aW9uIG9mIHRoZSBwcmVkaWN0ZWQgbnVtYmVyIG9mIGluZmVjdGVkIGluZGl2aWR1YWxzIGF0IHRoZSBwZWFrIHRpbWUgcG9pbnRzIHVwZGF0ZWQgd2l0aCB0aGUgbnVtYmVyIG9mIGluZmVjdGVkIGluZGl2aWR1YWxzIGluIFNsb3ZlbmlhIHVwIHRvIDV0aCBvZiBBcHJpbC5dKC4vZ3JhcGhzL3BlYWstbXMtMjAwMzE0LTIwMDQwNS5wbmcpCgohW0ZpZ3VyZSAzaTogRGlzdHJpYnV0aW9uIG9mIHRoZSBwcmVkaWN0ZWQgbnVtYmVyIG9mIGluZmVjdGVkIGluZGl2aWR1YWxzIGF0IHRoZSBwZWFrIHRpbWUgcG9pbnRzIHVwZGF0ZWQgd2l0aCB0aGUgbnVtYmVyIG9mIGluZmVjdGVkIGluZGl2aWR1YWxzIGluIFNsb3ZlbmlhIHVwIHRvIDZ0aCBvZiBBcHJpbC5dKC4vZ3JhcGhzL3BlYWstbXMtMjAwMzE0LTIwMDQwNi5wbmcpCgohW0ZpZ3VyZSAzajogRGlzdHJpYnV0aW9uIG9mIHRoZSBwcmVkaWN0ZWQgbnVtYmVyIG9mIGluZmVjdGVkIGluZGl2aWR1YWxzIGF0IHRoZSBwZWFrIHRpbWUgcG9pbnRzIHVwZGF0ZWQgd2l0aCB0aGUgbnVtYmVyIG9mIGluZmVjdGVkIGluZGl2aWR1YWxzIGluIFNsb3ZlbmlhIHVwIHRvIDd0aCBvZiBBcHJpbC5dKC4vZ3JhcGhzL3BlYWstbXMtMjAwMzE0LTIwMDQwNy5wbmcpCgohW0ZpZ3VyZSAzazogRGlzdHJpYnV0aW9uIG9mIHRoZSBwcmVkaWN0ZWQgbnVtYmVyIG9mIGluZmVjdGVkIGluZGl2aWR1YWxzIGF0IHRoZSBwZWFrIHRpbWUgcG9pbnRzIHVwZGF0ZWQgd2l0aCB0aGUgbnVtYmVyIG9mIGluZmVjdGVkIGluZGl2aWR1YWxzIGluIFNsb3ZlbmlhIHVwIHRvIDh0aCBvZiBBcHJpbC5dKC4vZ3JhcGhzL3BlYWstbXMtMjAwMzE0LTIwMDQwOC5wbmcpCgohW0ZpZ3VyZSAzbDogRGlzdHJpYnV0aW9uIG9mIHRoZSBwcmVkaWN0ZWQgbnVtYmVyIG9mIGluZmVjdGVkIGluZGl2aWR1YWxzIGF0IHRoZSBwZWFrIHRpbWUgcG9pbnRzIHVwZGF0ZWQgd2l0aCB0aGUgbnVtYmVyIG9mIGluZmVjdGVkIGluZGl2aWR1YWxzIGluIFNsb3ZlbmlhIHVwIHRvIDl0aCBvZiBBcHJpbC5dKC4vZ3JhcGhzL3BlYWstbXMtMjAwMzE0LTIwMDQwOS5wbmcpCgohW0ZpZ3VyZSAzbTogRGlzdHJpYnV0aW9uIG9mIHRoZSBwcmVkaWN0ZWQgbnVtYmVyIG9mIGluZmVjdGVkIGluZGl2aWR1YWxzIGF0IHRoZSBwZWFrIHRpbWUgcG9pbnRzIHVwZGF0ZWQgd2l0aCB0aGUgbnVtYmVyIG9mIGluZmVjdGVkIGluZGl2aWR1YWxzIGluIFNsb3ZlbmlhIHVwIHRvIDEwdGggb2YgQXByaWwuXSguL2dyYXBocy9wZWFrLW1zLTIwMDMxNC0yMDA0MTAucG5nKQoKIVtGaWd1cmUgM246IERpc3RyaWJ1dGlvbiBvZiB0aGUgcHJlZGljdGVkIG51bWJlciBvZiBpbmZlY3RlZCBpbmRpdmlkdWFscyBhdCB0aGUgcGVhayB0aW1lIHBvaW50cyB1cGRhdGVkIHdpdGggdGhlIG51bWJlciBvZiBpbmZlY3RlZCBpbmRpdmlkdWFscyBpbiBTbG92ZW5pYSB1cCB0byAxMXRoIG9mIEFwcmlsLl0oLi9ncmFwaHMvcGVhay1tcy0yMDAzMTQtMjAwNDExLnBuZykKCiFbRmlndXJlIDNvOiBEaXN0cmlidXRpb24gb2YgdGhlIHByZWRpY3RlZCBudW1iZXIgb2YgaW5mZWN0ZWQgaW5kaXZpZHVhbHMgYXQgdGhlIHBlYWsgdGltZSBwb2ludHMgdXBkYXRlZCB3aXRoIHRoZSBudW1iZXIgb2YgaW5mZWN0ZWQgaW5kaXZpZHVhbHMgaW4gU2xvdmVuaWEgdXAgdG8gMTJ0aCBvZiBBcHJpbC5dKC4vZ3JhcGhzL3BlYWstbXMtMjAwMzE0LTIwMDQxMi5wbmcpCgohW0ZpZ3VyZSAzcDogRGlzdHJpYnV0aW9uIG9mIHRoZSBwcmVkaWN0ZWQgbnVtYmVyIG9mIGluZmVjdGVkIGluZGl2aWR1YWxzIGF0IHRoZSBwZWFrIHRpbWUgcG9pbnRzIHVwZGF0ZWQgd2l0aCB0aGUgbnVtYmVyIG9mIGluZmVjdGVkIGluZGl2aWR1YWxzIGluIFNsb3ZlbmlhIHVwIHRvIDEzdGggb2YgQXByaWwuXSguL2dyYXBocy9wZWFrLW1zLTIwMDMxNC0yMDA0MTMucG5nKQoKIVtGaWd1cmUgM3E6IERpc3RyaWJ1dGlvbiBvZiB0aGUgcHJlZGljdGVkIG51bWJlciBvZiBpbmZlY3RlZCBpbmRpdmlkdWFscyBhdCB0aGUgcGVhayB0aW1lIHBvaW50cyB1cGRhdGVkIHdpdGggdGhlIG51bWJlciBvZiBpbmZlY3RlZCBpbmRpdmlkdWFscyBpbiBTbG92ZW5pYSB1cCB0byAxNHRoIG9mIEFwcmlsLl0oLi9ncmFwaHMvcGVhay1tcy0yMDAzMTQtMjAwNDE0LnBuZykKCiFbRmlndXJlIDNyOiBEaXN0cmlidXRpb24gb2YgdGhlIHByZWRpY3RlZCBudW1iZXIgb2YgaW5mZWN0ZWQgaW5kaXZpZHVhbHMgYXQgdGhlIHBlYWsgdGltZSBwb2ludHMgdXBkYXRlZCB3aXRoIHRoZSBudW1iZXIgb2YgaW5mZWN0ZWQgaW5kaXZpZHVhbHMgaW4gU2xvdmVuaWEgdXAgdG8gMTV0aCBvZiBBcHJpbC5dKC4vZ3JhcGhzL3BlYWstbXMtMjAwMzE0LTIwMDQxNS5wbmcpCgohW0ZpZ3VyZSAzczogRGlzdHJpYnV0aW9uIG9mIHRoZSBwcmVkaWN0ZWQgbnVtYmVyIG9mIGluZmVjdGVkIGluZGl2aWR1YWxzIGF0IHRoZSBwZWFrIHRpbWUgcG9pbnRzIHVwZGF0ZWQgd2l0aCB0aGUgbnVtYmVyIG9mIGluZmVjdGVkIGluZGl2aWR1YWxzIGluIFNsb3ZlbmlhIHVwIHRvIDE2dGggb2YgQXByaWwuXSguL2dyYXBocy9wZWFrLW1zLTIwMDMxNC0yMDA0MTYucG5nKQoKIyMgVXBkYXRlcyBvZiB0aGUgcHJlZGljdGlvbnMgb2YgdGhlIGVwaWRlbWljIGRlbWlzZSB0aW1lIHBvaW50cwoKIVtGaWd1cmUgNGE6IERpc3RyaWJ1dGlvbiBvZiB0aGUgcHJlZGljdGVkIHRpbWUgcG9pbnRzIG9mIHRoZSBlcGlkZW1pYyBkZW1pc2UgaW4gdGhlIGJvb3RzdHJhcCBzaW11bGF0aW9ucyBvZiB0aGUgU0lSIG1vZGVsIChkYXRhIHVwIHRvIDI5dGggb2YgTWFyY2guXSguL2dyYXBocy9lbmRzLTIwMDMxNC0yMDAzMjkucG5nKQoKIVtGaWd1cmUgNGI6IERpc3RyaWJ1dGlvbiBvZiB0aGUgcHJlZGljdGVkIHRpbWUgcG9pbnRzIG9mIHRoZSBlcGlkZW1pYyBkZW1pc2UgdXBkYXRlZCB3aXRoIHRoZSBudW1iZXIgb2YgaW5mZWN0ZWQgaW5kaXZpZHVhbHMgaW4gU2xvdmVuaWEgdXAgdG8gMzB0aCBvZiBNYXJjaC5dKC4vZ3JhcGhzL2VuZHMtMjAwMzE0LTIwMDMzMC5wbmcpCgohW0ZpZ3VyZSA0YzogRGlzdHJpYnV0aW9uIG9mIHRoZSBwcmVkaWN0ZWQgdGltZSBwb2ludHMgb2YgdGhlIGVwaWRlbWljIGRlbWlzZSB1cGRhdGVkIHdpdGggdGhlIG51bWJlciBvZiBpbmZlY3RlZCBpbmRpdmlkdWFscyBpbiBTbG92ZW5pYSB1cCB0byAzMXN0IG9mIE1hcmNoLl0oLi9ncmFwaHMvZW5kcy0yMDAzMTQtMjAwMzMxLnBuZykKCiFbRmlndXJlIDRkOiBEaXN0cmlidXRpb24gb2YgdGhlIHByZWRpY3RlZCB0aW1lIHBvaW50cyBvZiB0aGUgZXBpZGVtaWMgZGVtaXNlIHVwZGF0ZWQgd2l0aCB0aGUgbnVtYmVyIG9mIGluZmVjdGVkIGluZGl2aWR1YWxzIGluIFNsb3ZlbmlhIHVwIHRvIDFzdCBvZiBBcHJpbC5dKC4vZ3JhcGhzL2VuZHMtMjAwMzE0LTIwMDQwMS5wbmcpCgohW0ZpZ3VyZSA0ZTogRGlzdHJpYnV0aW9uIG9mIHRoZSBwcmVkaWN0ZWQgdGltZSBwb2ludHMgb2YgdGhlIGVwaWRlbWljIGRlbWlzZSB1cGRhdGVkIHdpdGggdGhlIG51bWJlciBvZiBpbmZlY3RlZCBpbmRpdmlkdWFscyBpbiBTbG92ZW5pYSB1cCB0byAybmQgb2YgQXByaWwuXSguL2dyYXBocy9lbmRzLTIwMDMxNC0yMDA0MDIucG5nKQoKIVtGaWd1cmUgNGY6IERpc3RyaWJ1dGlvbiBvZiB0aGUgcHJlZGljdGVkIHRpbWUgcG9pbnRzIG9mIHRoZSBlcGlkZW1pYyBkZW1pc2UgdXBkYXRlZCB3aXRoIHRoZSBudW1iZXIgb2YgaW5mZWN0ZWQgaW5kaXZpZHVhbHMgaW4gU2xvdmVuaWEgdXAgdG8gM3JkIG9mIEFwcmlsLl0oLi9ncmFwaHMvZW5kcy0yMDAzMTQtMjAwNDAzLnBuZykKCiFbRmlndXJlIDRnOiBEaXN0cmlidXRpb24gb2YgdGhlIHByZWRpY3RlZCB0aW1lIHBvaW50cyBvZiB0aGUgZXBpZGVtaWMgZGVtaXNlIHVwZGF0ZWQgd2l0aCB0aGUgbnVtYmVyIG9mIGluZmVjdGVkIGluZGl2aWR1YWxzIGluIFNsb3ZlbmlhIHVwIHRvIDR0aCBvZiBBcHJpbC5dKC4vZ3JhcGhzL2VuZHMtMjAwMzE0LTIwMDQwNC5wbmcpCgohW0ZpZ3VyZSA0aDogRGlzdHJpYnV0aW9uIG9mIHRoZSBwcmVkaWN0ZWQgdGltZSBwb2ludHMgb2YgdGhlIGVwaWRlbWljIGRlbWlzZSB1cGRhdGVkIHdpdGggdGhlIG51bWJlciBvZiBpbmZlY3RlZCBpbmRpdmlkdWFscyBpbiBTbG92ZW5pYSB1cCB0byA1dGggb2YgQXByaWwuXSguL2dyYXBocy9lbmRzLTIwMDMxNC0yMDA0MDUucG5nKQoKIVtGaWd1cmUgNGk6IERpc3RyaWJ1dGlvbiBvZiB0aGUgcHJlZGljdGVkIHRpbWUgcG9pbnRzIG9mIHRoZSBlcGlkZW1pYyBkZW1pc2UgdXBkYXRlZCB3aXRoIHRoZSBudW1iZXIgb2YgaW5mZWN0ZWQgaW5kaXZpZHVhbHMgaW4gU2xvdmVuaWEgdXAgdG8gNnRoIG9mIEFwcmlsLl0oLi9ncmFwaHMvZW5kcy0yMDAzMTQtMjAwNDA2LnBuZykKCiFbRmlndXJlIDRqOiBEaXN0cmlidXRpb24gb2YgdGhlIHByZWRpY3RlZCB0aW1lIHBvaW50cyBvZiB0aGUgZXBpZGVtaWMgZGVtaXNlIHVwZGF0ZWQgd2l0aCB0aGUgbnVtYmVyIG9mIGluZmVjdGVkIGluZGl2aWR1YWxzIGluIFNsb3ZlbmlhIHVwIHRvIDd0aCBvZiBBcHJpbC5dKC4vZ3JhcGhzL2VuZHMtMjAwMzE0LTIwMDQwNy5wbmcpCgohW0ZpZ3VyZSA0azogRGlzdHJpYnV0aW9uIG9mIHRoZSBwcmVkaWN0ZWQgdGltZSBwb2ludHMgb2YgdGhlIGVwaWRlbWljIGRlbWlzZSB1cGRhdGVkIHdpdGggdGhlIG51bWJlciBvZiBpbmZlY3RlZCBpbmRpdmlkdWFscyBpbiBTbG92ZW5pYSB1cCB0byA4dGggb2YgQXByaWwuXSguL2dyYXBocy9lbmRzLTIwMDMxNC0yMDA0MDgucG5nKQoKIVtGaWd1cmUgNGw6IERpc3RyaWJ1dGlvbiBvZiB0aGUgcHJlZGljdGVkIHRpbWUgcG9pbnRzIG9mIHRoZSBlcGlkZW1pYyBkZW1pc2UgdXBkYXRlZCB3aXRoIHRoZSBudW1iZXIgb2YgaW5mZWN0ZWQgaW5kaXZpZHVhbHMgaW4gU2xvdmVuaWEgdXAgdG8gOXRoIG9mIEFwcmlsLl0oLi9ncmFwaHMvZW5kcy0yMDAzMTQtMjAwNDA5LnBuZykKCiFbRmlndXJlIDRtOiBEaXN0cmlidXRpb24gb2YgdGhlIHByZWRpY3RlZCB0aW1lIHBvaW50cyBvZiB0aGUgZXBpZGVtaWMgZGVtaXNlIHVwZGF0ZWQgd2l0aCB0aGUgbnVtYmVyIG9mIGluZmVjdGVkIGluZGl2aWR1YWxzIGluIFNsb3ZlbmlhIHVwIHRvIDEwdGggb2YgQXByaWwuXSguL2dyYXBocy9lbmRzLTIwMDMxNC0yMDA0MTAucG5nKQoKIVtGaWd1cmUgNG46IERpc3RyaWJ1dGlvbiBvZiB0aGUgcHJlZGljdGVkIHRpbWUgcG9pbnRzIG9mIHRoZSBlcGlkZW1pYyBkZW1pc2UgdXBkYXRlZCB3aXRoIHRoZSBudW1iZXIgb2YgaW5mZWN0ZWQgaW5kaXZpZHVhbHMgaW4gU2xvdmVuaWEgdXAgdG8gMTF0aCBvZiBBcHJpbC5dKC4vZ3JhcGhzL2VuZHMtMjAwMzE0LTIwMDQxMS5wbmcpCgohW0ZpZ3VyZSA0bzogRGlzdHJpYnV0aW9uIG9mIHRoZSBwcmVkaWN0ZWQgdGltZSBwb2ludHMgb2YgdGhlIGVwaWRlbWljIGRlbWlzZSB1cGRhdGVkIHdpdGggdGhlIG51bWJlciBvZiBpbmZlY3RlZCBpbmRpdmlkdWFscyBpbiBTbG92ZW5pYSB1cCB0byAxMnRoIG9mIEFwcmlsLl0oLi9ncmFwaHMvZW5kcy0yMDAzMTQtMjAwNDEyLnBuZykKCiFbRmlndXJlIDRwOiBEaXN0cmlidXRpb24gb2YgdGhlIHByZWRpY3RlZCB0aW1lIHBvaW50cyBvZiB0aGUgZXBpZGVtaWMgZGVtaXNlIHVwZGF0ZWQgd2l0aCB0aGUgbnVtYmVyIG9mIGluZmVjdGVkIGluZGl2aWR1YWxzIGluIFNsb3ZlbmlhIHVwIHRvIDEzdGggb2YgQXByaWwuXSguL2dyYXBocy9lbmRzLTIwMDMxNC0yMDA0MTMucG5nKQoKIVtGaWd1cmUgNHE6IERpc3RyaWJ1dGlvbiBvZiB0aGUgcHJlZGljdGVkIHRpbWUgcG9pbnRzIG9mIHRoZSBlcGlkZW1pYyBkZW1pc2UgdXBkYXRlZCB3aXRoIHRoZSBudW1iZXIgb2YgaW5mZWN0ZWQgaW5kaXZpZHVhbHMgaW4gU2xvdmVuaWEgdXAgdG8gMTR0aCBvZiBBcHJpbC5dKC4vZ3JhcGhzL2VuZHMtMjAwMzE0LTIwMDQxNC5wbmcpCgohW0ZpZ3VyZSA0cjogRGlzdHJpYnV0aW9uIG9mIHRoZSBwcmVkaWN0ZWQgdGltZSBwb2ludHMgb2YgdGhlIGVwaWRlbWljIGRlbWlzZSB1cGRhdGVkIHdpdGggdGhlIG51bWJlciBvZiBpbmZlY3RlZCBpbmRpdmlkdWFscyBpbiBTbG92ZW5pYSB1cCB0byAxNXRoIG9mIEFwcmlsLl0oLi9ncmFwaHMvZW5kcy0yMDAzMTQtMjAwNDE1LnBuZykKCiFbRmlndXJlIDRyOiBEaXN0cmlidXRpb24gb2YgdGhlIHByZWRpY3RlZCB0aW1lIHBvaW50cyBvZiB0aGUgZXBpZGVtaWMgZGVtaXNlIHVwZGF0ZWQgd2l0aCB0aGUgbnVtYmVyIG9mIGluZmVjdGVkIGluZGl2aWR1YWxzIGluIFNsb3ZlbmlhIHVwIHRvIDE2dGggb2YgQXByaWwuXSguL2dyYXBocy9lbmRzLTIwMDMxNC0yMDA0MTYucG5nKQotLT4KCgo8IS0tCiMgV2hhdCB0byBkbyBuZXh0PwoKLSBNb2RlbGluZyB0aGUgbnVtYmVyIG9mIGhvc3BpdGFsaXplZCBpbmRpdmlkdWFscy4KLSBDb25zaWRlciBvdGhlciBjb3VudHJ5IHdpdGggbW9yZSBzeXN0ZW1hdGljIHRlc3RpbmcsIGUuZy4sIEdlcm1hbnkuCi0gQm9vdHN0cmFwIHNldHRpbmdzOiBzdGFuZGFyZCBkZXZpYXRpb25zLCBmb2N1cyBvbiBsb3ctUk1TRSBvbmx5PwogLSBHbyB0b3dhcmRzIF9fYWdlbnQtYmFzZWQgbW9kZWxzX18gdG8gaW5jb3Jwb3JhdGUgcG9saWN5IHVwZGF0ZXMgKHRlc3RpbmcsIHNvY2lhbCBkaXN0YW5jaW5nLCBldGMpLgotLT4KCi0tLQoKVGhpcyBpcyBhbiBbUiBNYXJrZG93bl0oaHR0cDovL3JtYXJrZG93bi5yc3R1ZGlvLmNvbSkgTm90ZWJvb2suIFRoZSBmaXJzdCB2ZXJzaW9uIG9mIHRoaXMgcmVwb3J0IHdhcyBwcmVwYXJlZCBvbiAzMXN0IG9mIE1hcmNoIDIwMjAgZm9yIHRoZSBkYXRhIG9uIENPVklELTE5IGVwaWRlbWljcyBpbiBTbG92ZW5pYS4gVGhlIGxhc3QgX191cGRhdGUgdG9vayBwbGFjZSBvbiAxMXRoIG9mIEp1bHkgMjAyMF9fLiBNb2RlbGluZyBhbmQgc2ltdWxhdGlvbiBleHBlcmltZW50cyBwZXJmb3JtZWQgYnkgW05pa29sYSBTaW1pZGppZXZza2ldKG1haWx0bzpuczc3OUBjYW0uYWMudWspLCBbTWF0ZWogUGV0a292acSHXShtYWlsdG86bWF0ZWoucGV0a292aWNAaWpzLnNpKSBhbmQgW0xqdXDEjW8gVG9kb3JvdnNraV0obWFpbHRvOmxqdXBjby50b2Rvcm92c2tpQGZ1LnVuaS1sai5zaSkuCg==