I hold a degree and PhD in physics and I am co-founder of PerMediQ GmbH. The mission of our company is to develop innovative and transparent machine learning and mathematical modeling solutions to improve the quality of disease management. Together with our partners and our team, we develop and implement recommendation systems for medicine based on ethical AI, which lead to greater transparency, robustness and reduced use of data volumes, while maintaining decentralized data structures to avoid data silos and maintain the data sovereignty of citizens.

In addition to innovation and project management for my company, I work about ethical artificial intelligence (AI), semantics and machine learning, fundamental aspects of complex systems, systems biology and evolution, as well as fundamentals of statistical physics and philosophical foundations of physics and biology. In addition to this scientific background, I have experience in startups, innovation and product development.

Inspired by my experience modeling complex systems in biology, I have observed that they differ from purely mechanistic systems. To assess the degree of observability of a system, I helped to define a novel complexity measure and researched the relationship between computer science and biological processes in evolution.

Also, motivated by the goal to avoid the suffering of animals in in-vivo experiments in different industries, like cosmetics and pharmaceutical industries, I collaborated with different colleagues across the European union in the COSMOS project in the development of Insilico organisms and whole body models for insilico tests of substances with dermal and oral absorption.

Other topics in my research career have been the development of novel uses of game theory for the modelling of soft matter, the exploration and quantification of envy between the networking of agents in the wake of social networks and links between soft matter and astrophysics (see selected publications below).

I’m also exploring the possibility that biology cannot simply be reduced as an emerging physical phenomenon, in part due to the persistent incompleteness (ambiguity) that has arisen in the various interconnected scales, and that “meaning” is essential in living systems, which is a non-physical element that can only be understood with other approaches such as the combination of biology and informatics, which limits the objective observability of biological systems and the ability to describe them with mathematical models.

I have also explored the future of the pharmacology/toxicology considering novel technologies like machine learning and semantic internet, and wrote some essays exploring from a philosophical perspective the interlinking between biology and physics.

Besides several honorary activities, including my activity as referee in several journals, I presented introductory lectures about general relativity for children (in the framework of the Hector Akademie, Stuttgart.

My education spans two continents: I wrote my PhD work at Kurt Binder’s group at the Johannes Gutenberg Universität in Mainz and wrote my degree (recognized as Diplom Physiker in Germany) at the Universidad Nacional de Colombia in Bogotá. Other stations were institute of theoretical physics at the Bremen University, the Max Planck Institute in Magdeburg, and the Astronomical Observatory in Bogotá, Colombia.

Below I list the chapters of the relevant topics of my work with links to some relevant publications:

Artificial Intelligence.

Medical recommender systems that emulate human rational processes.

Representation of LONNs

Representation of LONNs

How to help physicians in their daily work using ethical AI? In this work, we report the development of a novel recommendation system of therapies in medicine based on the combination of continuous logic and deep learning algorithms (Logical Neuronal Networks, or LONNs). The advantage of this method is that, first, it is transparent, since the model results emulate human logical decision-making using logical combinations of input parameters, and second, it is safer against attacks than conventional deep learning methods, since it drastically reduces the number of trainable parameters in the model. This development is a contribution for future ethical AI applications.

Biology, Systems Biology and Toxicology

Biology is much more than mechanisms, and informatics can be fundamental to better understand what is life.

Autonomous selection of constraint landscapes

Autonomous selection of constraint landscapes

Explanations based on low-level interacting elements are valuable and powerful since they contribute to identify the key mechanisms of biological functions. However, many dynamic systems based on low-level interacting elements with unambiguous, finite, and complete information of initial states generate future states that cannot be predicted, implying an increase of complexity and open-ended evolution. Such systems are like Turing machines, that overlap with dynamical systems that cannot halt. We argue that organisms find halting conditions by distorting these mechanisms, creating conditions for a constant creativity that drives evolution. We introduce a modulus of elasticity to measure the changes in these mechanisms in response to changes in the computed environment.

In-silico individuals for pharmacology and toxicology

Multiscale models to model metabolite concentrations in hepatocytes

Multiscale models to model metabolite concentrations in hepatocytes

In this work we opened de possibility to use in-silico models to represent toxic effects of substances (acetaminophen) only using mathematical models, as a framework for efficiently integrating inter-individual variability data into models, paving the way for personalized or stratified predictions of drug toxicity and efficacy.

Insilico Models to assess Toxicology.

Liver damage with Acetaminophen

Liver damage with Acetaminophen

The European Union’s ban on animal testing for cosmetic ingredients and products has generated a strong momentum for the development of in silico and in vitro alternative methods. One of the focus of the COSMOS project was ab initio prediction of kinetics and toxic effects through multiscale pharmacokinetic modeling and in vitro data integration. In our experience, mathematical or computer modeling and in vitro experiments are complementary. We present here a summary of the main models and results obtained within the framework of the project on these topics. A first section presents our work at the organelle and cellular level. We then go toward modeling cell levels effects (monitored continuously), multiscale physiologically based pharmacokinetic and effect models, and route to route extrapolation. We follow with a short presentation of the automated KNIME workflows developed for dissemination and easy use of the models. We end with a discussion of two challenges to the field: our limited ability to deal with massive data and complex computations.

Modelling virus production for efficient vaccine production

Mechanisms for virus replication

Mechanisms for virus replication

How to represent virus replication in bioreactors using Monte Carlo methods? First, we replace the constant infection reaction constant by a function taking into account the heterogeneity of cells in a typical bioreactor environment. Second, we take into account the observed response of a cell to a virus attack, an immune response of the system. The immune response in a bioreactor can be related to the production of a signal protein like an interferon. Parallel to the cell dynamics also the interferon concentration will be modeled. We will study this as an additional parameter playing an important role for the infection probability. The dynamical evolution of the cell population, the total virus number via replication, and its dependency on the initial conditions will be studied here. It can be shown that the extended model can be used to improve experimental data interpretation in several ways. The introduction of a time lag in previous models is no longer necessary. Also, different scenarios of virus replication with low and high yield can now be interpreted consistently within one model approach.

Time delay for the amplification of cell signals

Mechanisms of stochastic time delays in signal transduction

Mechanisms of stochastic time delays in signal transduction

Stochastic time delays and asynchronism in regulatory networks is a ubiquitous phenomenon in biology, in particular in regulatory networks. However, this phenomenon is poorly understood. In particular, variable-stochastic time intervals in the realization of chemical reactions have a crucial effect in the dynamics of the system. I analyze the effect that different time delays in feedback loops can have in the transient behavior of a regulatory network. Using a simple toy model for a regulatory network with forcing I show that such time delays introduce an oscillatory behavior that can alternatively be explained if additional loops are defined. The results suggest that the introduction of time delays is a mechanism that is helpful to theoretically reduce the number of elements, in particular the number of feedback loops, in competing network models.

Complex Systems

Persistent Entropy in Biological data – and observability of complex systems

Persistent bars for the evaluation of persistent entropy

Persistent bars for the evaluation of persistent entropy

Organisms are continuously observing and adapting to their environment, impeding its objective description. In this research, we are introducing a method based on the definition of homological groups that aims at evaluating this persistent entropy as a complexity measure to estimate the observability of the systems. The large the persistent entropy, the more difficult is to (objectively) observe the system. This method identifies patterns with persistent topology, extracted from the combination of different time series and clustering them to identify persistent bias in the data.

Soft Matter and Statistical Physics

Soft matter play games when they adsorb on surfances

Here I demonstrated how Game Theory could be used for the computation of adsorption processes of macromolecules:

Adsorbtion of polymers with a solvent based on game theory

Adsorbtion of polymers with a solvent based on game theory

This work introduces a novel coarse-grained model representing the dynamics of polar molecules that adsorb on a substrate in the presence of a solvent. The motivation of the model is to avoid the explicit representation of the solvent. Instead, the solvent-mediated interaction is indirectly represented using a fluctuating energy landscape. The dynamics, on which this model is based, are similar to the dynamics in game theory. In particular, the strategy of an agent in a game is like the modification of the free energy barrier between the molecule and the substrate induced by other.

Nano- rheology

By analyzing the embedding of a nano-particle in a polymer melt is possible to understand the rheological characteristics of the melt:

Adsorbtion of polymers with a solvent based on game theory

Adsorbtion of polymers with a solvent based on game theory

In this work we report on molecular dynamics simulations of the embedding process of a nanoparticle into a polymeric film as a function of temperature. This process has been employed experimentally in recent years to test for a shift of the glass transition of a material due to the confined film geometry and to test for the existence of a liquid-like layer on top of a glassy polymer film. The embedding process is governed thermodynamically by the prewetting properties of the polymer on the nanoparticle. We show that the dynamics of the process depends on the Brownian motion characteristics of the nanoparticle in and on the polymer film. It displays large sample to sample variations, suggesting that it is an activated process. On the timescales of the simulation an embedding of the nanoparticle is only observed for temperatures above the bulk glass transition temperature of the polymer, agreeing with experimental observations on noble metal clusters of comparable size.

Economics and Social Systems

Envy in the wake of social networks

Equitable distribution of goods

Equitable distribution of goods

Envy is a rather complex and irrational emotion. In general, it is very difficult to obtain a measure of this feeling, but in an economical context envy becomes an observable which can be measured. When various individuals compare their possessions, envy arises due to the inequality of their different allocations of commodities and different preferences. In this paper, we show that an equitable distribution of goods does not guarantee a state of fairness between agents and in general that envy cannot be controlled by tuning the distribution of goods. In other words: envy persists if there is a network allowing agents to make interpersonal comparisons, regardless how fair are resources distributed among individuals.

Astrophysics

Gravitation at an Interface

In this work a simple toy model for a free interface between bulk phases in space and time is presented, derived from the balance equations for extensive thermodynamic variables of Meinhold-Heerlein. In this case the free interface represents geodesics in the space-time, allowing the derivation of the Einstein’s equations for gravitational fields. The effect of the balance equation is examined and a simple expression for cold dark matter is derived. The thermodynamically meaning of this model is also discussed.

LS0tDQp0aXRsZTogIlByb2ZpbGUsIERyLiBKdWFuIEcuIERpYXogT2Nob2EiDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQpJIGhvbGQgYSBkZWdyZWUgYW5kIFBoRCBpbiBwaHlzaWNzIGFuZCBJIGFtIGNvLWZvdW5kZXIgb2YgW1Blck1lZGlRIEdtYkhdKGh0dHA6Ly9wZXJtZWRpcS5kZS8pLiBUaGUgbWlzc2lvbiBvZiBvdXIgY29tcGFueSBpcyB0byBkZXZlbG9wIGlubm92YXRpdmUgYW5kIHRyYW5zcGFyZW50IG1hY2hpbmUgbGVhcm5pbmcgYW5kIG1hdGhlbWF0aWNhbCBtb2RlbGluZyBzb2x1dGlvbnMgdG8gaW1wcm92ZSB0aGUgcXVhbGl0eSBvZiBkaXNlYXNlIG1hbmFnZW1lbnQuIFRvZ2V0aGVyIHdpdGggb3VyIHBhcnRuZXJzIGFuZCBvdXIgdGVhbSwgd2UgZGV2ZWxvcCBhbmQgaW1wbGVtZW50IFtyZWNvbW1lbmRhdGlvbiBzeXN0ZW1zIGZvciBtZWRpY2luZSBiYXNlZCBvbiBldGhpY2FsIEFJXShodHRwczovL2JtY21lZGluZm9ybWRlY2lzbWFrLmJpb21lZGNlbnRyYWwuY29tL2FydGljbGVzLzEwLjExODYvczEyOTExLTAyMS0wMTU1My0zKSwgd2hpY2ggbGVhZCB0byBncmVhdGVyIHRyYW5zcGFyZW5jeSwgIHJvYnVzdG5lc3MgYW5kIFtyZWR1Y2VkIHVzZSBvZiBkYXRhIHZvbHVtZXNdKGh0dHBzOi8vd3d3LmZyb250aWVyc2luLm9yZy9hcnRpY2xlcy8xMC4zMzg5L2ZwaHkuMjAyMC40NjU5ODIvZnVsbCksIHdoaWxlIG1haW50YWluaW5nIGRlY2VudHJhbGl6ZWQgZGF0YSBzdHJ1Y3R1cmVzIHRvIGF2b2lkIGRhdGEgc2lsb3MgYW5kIG1haW50YWluIHRoZSBkYXRhIHNvdmVyZWlnbnR5IG9mIGNpdGl6ZW5zLiANCg0KSW4gYWRkaXRpb24gdG8gaW5ub3ZhdGlvbiBhbmQgcHJvamVjdCBtYW5hZ2VtZW50IGZvciBteSBjb21wYW55LCBJIHdvcmsgYWJvdXQgZXRoaWNhbCBhcnRpZmljaWFsIGludGVsbGlnZW5jZSAoQUkpLCBzZW1hbnRpY3MgYW5kIG1hY2hpbmUgbGVhcm5pbmcsIGZ1bmRhbWVudGFsIGFzcGVjdHMgb2YgY29tcGxleCBzeXN0ZW1zLCBzeXN0ZW1zIGJpb2xvZ3kgYW5kIGV2b2x1dGlvbiwgYXMgd2VsbCBhcyBmdW5kYW1lbnRhbHMgb2Ygc3RhdGlzdGljYWwgcGh5c2ljcyBhbmQgcGhpbG9zb3BoaWNhbCBmb3VuZGF0aW9ucyBvZiBwaHlzaWNzIGFuZCBiaW9sb2d5LiBJbiBhZGRpdGlvbiB0byB0aGlzIHNjaWVudGlmaWMgYmFja2dyb3VuZCwgSSBoYXZlIGV4cGVyaWVuY2UgaW4gc3RhcnR1cHMsIGlubm92YXRpb24gYW5kIHByb2R1Y3QgZGV2ZWxvcG1lbnQuIA0KDQpJbnNwaXJlZCBieSBteSBleHBlcmllbmNlIG1vZGVsaW5nIGNvbXBsZXggc3lzdGVtcyBpbiBiaW9sb2d5LCBJIGhhdmUgb2JzZXJ2ZWQgdGhhdCB0aGV5IGRpZmZlciBmcm9tIHB1cmVseSBtZWNoYW5pc3RpYyBzeXN0ZW1zLiBUbyBhc3Nlc3MgdGhlIGRlZ3JlZSBvZiBvYnNlcnZhYmlsaXR5IG9mIGEgc3lzdGVtLCBJIGhlbHBlZCB0byBkZWZpbmUgYSBbbm92ZWwgY29tcGxleGl0eSBtZWFzdXJlXShodHRwczovL3d3dy5mcm9udGllcnNpbi5vcmcvYXJ0aWNsZXMvMTAuMzM4OS9mcGh5LjIwMjAuNDY1OTgyL2Z1bGwgKSBhbmQgcmVzZWFyY2hlZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gY29tcHV0ZXIgc2NpZW5jZSBhbmQgYmlvbG9naWNhbCBwcm9jZXNzZXMgaW4gZXZvbHV0aW9uLg0KDQpBbHNvLCBtb3RpdmF0ZWQgYnkgdGhlIGdvYWwgdG8gYXZvaWQgdGhlIHN1ZmZlcmluZyBvZiBhbmltYWxzIGluIGluLXZpdm8gZXhwZXJpbWVudHMgaW4gZGlmZmVyZW50IGluZHVzdHJpZXMsIGxpa2UgY29zbWV0aWNzIGFuZCBwaGFybWFjZXV0aWNhbCBpbmR1c3RyaWVzLCBJIGNvbGxhYm9yYXRlZCB3aXRoIGRpZmZlcmVudCBjb2xsZWFndWVzIGFjcm9zcyB0aGUgRXVyb3BlYW4gdW5pb24gaW4gdGhlIFtDT1NNT1MgcHJvamVjdF0oaHR0cHM6Ly9oYWwtaW5lcmlzLmFyY2hpdmVzLW91dmVydGVzLmZyL2luZXJpcy0wMTg2Mzk0MC9kb2N1bWVudCApIGluIHRoZSBkZXZlbG9wbWVudCBvZiBbSW5zaWxpY28gb3JnYW5pc21zIGFuZCB3aG9sZSBib2R5IG1vZGVscyBmb3IgaW5zaWxpY28gdGVzdHMgb2Ygc3Vic3RhbmNlcyB3aXRoIGRlcm1hbCBhbmQgb3JhbCBhYnNvcnB0aW9uXShodHRwczovL3d3dy5mcm9udGllcnNpbi5vcmcvYXJ0aWNsZXMvMTAuMzM4OS9mcGhhci4yMDEyLjAwMjA0L2Z1bGwpLg0KDQpPdGhlciB0b3BpY3MgaW4gbXkgcmVzZWFyY2ggY2FyZWVyIGhhdmUgYmVlbiB0aGUgZGV2ZWxvcG1lbnQgb2Ygbm92ZWwgdXNlcyBvZiBnYW1lIHRoZW9yeSBmb3IgdGhlIG1vZGVsbGluZyBvZiBzb2Z0IG1hdHRlciwgdGhlIGV4cGxvcmF0aW9uIGFuZCBxdWFudGlmaWNhdGlvbiBvZiBlbnZ5IGJldHdlZW4gdGhlIG5ldHdvcmtpbmcgb2YgYWdlbnRzIGluIHRoZSB3YWtlIG9mIHNvY2lhbCBuZXR3b3JrcyBhbmQgbGlua3MgYmV0d2VlbiBzb2Z0IG1hdHRlciBhbmQgYXN0cm9waHlzaWNzIChzZWUgc2VsZWN0ZWQgcHVibGljYXRpb25zIGJlbG93KS4gIA0KDQpJJ20gYWxzbyBleHBsb3JpbmcgdGhlIHBvc3NpYmlsaXR5IHRoYXQgYmlvbG9neSBjYW5ub3Qgc2ltcGx5IGJlIHJlZHVjZWQgYXMgYW4gZW1lcmdpbmcgcGh5c2ljYWwgcGhlbm9tZW5vbiwgaW4gcGFydCBkdWUgdG8gdGhlIHBlcnNpc3RlbnQgaW5jb21wbGV0ZW5lc3MgKGFtYmlndWl0eSkgdGhhdCBoYXMgYXJpc2VuIGluIHRoZSB2YXJpb3VzIGludGVyY29ubmVjdGVkIHNjYWxlcywgYW5kIHRoYXQgIm1lYW5pbmciIGlzIGVzc2VudGlhbCBpbiBsaXZpbmcgc3lzdGVtcywgd2hpY2ggaXMgYSBub24tcGh5c2ljYWwgZWxlbWVudCB0aGF0IGNhbiBvbmx5IGJlIHVuZGVyc3Rvb2Qgd2l0aCBvdGhlciBhcHByb2FjaGVzIHN1Y2ggYXMgdGhlIGNvbWJpbmF0aW9uIG9mIFtiaW9sb2d5IGFuZCBpbmZvcm1hdGljc10oaHR0cHM6Ly9saW5rLnNwcmluZ2VyLmNvbS9hcnRpY2xlLzEwLjEwMDcvczAwMjM5LTAxNy05ODIzLTcgKSwgIHdoaWNoIGxpbWl0cyB0aGUgb2JqZWN0aXZlIG9ic2VydmFiaWxpdHkgb2YgYmlvbG9naWNhbCBzeXN0ZW1zIGFuZCB0aGUgYWJpbGl0eSB0byBkZXNjcmliZSB0aGVtIHdpdGggbWF0aGVtYXRpY2FsIG1vZGVscy4NCg0KSSBoYXZlIGFsc28gZXhwbG9yZWQgdGhlIFtmdXR1cmUgb2YgdGhlIHBoYXJtYWNvbG9neS90b3hpY29sb2d5IGNvbnNpZGVyaW5nIG5vdmVsIHRlY2hub2xvZ2llcyBsaWtlIG1hY2hpbmUgbGVhcm5pbmcgYW5kIHNlbWFudGljIGludGVybmV0XShodHRwczovL3d3dy5zY2llbmNlZGlyZWN0LmNvbS9zY2llbmNlL2FydGljbGUvYWJzL3BpaS9TMjQ2ODExMTMxODMwMTIyMSksIGFuZCB3cm90ZSBzb21lIGVzc2F5cyBleHBsb3JpbmcgZnJvbSBhIHBoaWxvc29waGljYWwgcGVyc3BlY3RpdmUgdGhlIGludGVybGlua2luZyBiZXR3ZWVuIFtiaW9sb2d5IGFuZCBwaHlzaWNzXShodHRwczovL3d3dy5sZXNzd3JvbmcuY29tL3Bvc3RzL2R2S3l3RVR4akFuYXRjM3o4L2FydGlmaWNpYWwtaW50ZWxsaWdlbmNlLWFuZC1saWZlLXNjaWVuY2VzLXdoeS1iaWctZGF0YS1pcyApLg0KDQpCZXNpZGVzIHNldmVyYWwgaG9ub3JhcnkgYWN0aXZpdGllcywgaW5jbHVkaW5nIG15IGFjdGl2aXR5IGFzIHJlZmVyZWUgaW4gc2V2ZXJhbCBqb3VybmFscywgSSBwcmVzZW50ZWQgaW50cm9kdWN0b3J5IGxlY3R1cmVzIGFib3V0IGdlbmVyYWwgcmVsYXRpdml0eSBmb3IgY2hpbGRyZW4gKGluIHRoZSBmcmFtZXdvcmsgb2YgdGhlIFtIZWN0b3IgQWthZGVtaWUsIFN0dXR0Z2FydF0oaHR0cHM6Ly9oZWN0b3Ita2luZGVyYWthZGVtaWUuZGUvLExkZS9TdGFydHNlaXRlL0FrYWRlbWllbi9TdHV0dGdhcnQgKS4NCg0KTXkgZWR1Y2F0aW9uIHNwYW5zIHR3byBjb250aW5lbnRzOiBJIHdyb3RlIG15IFBoRCB3b3JrIGF0IFtLdXJ0IEJpbmRlcuKAmXNdKGh0dHBzOi8vZGUud2lraXBlZGlhLm9yZy93aWtpL0t1cnRfQmluZGVyICkgZ3JvdXAgIGF0IHRoZSBbSm9oYW5uZXMgR3V0ZW5iZXJnIFVuaXZlcnNpdMOkdCBpbiBNYWluel0oaHR0cHM6Ly93d3cudW5pLW1haW56LmRlLyApIGFuZCB3cm90ZSBteSBkZWdyZWUgKHJlY29nbml6ZWQgYXMgRGlwbG9tIFBoeXNpa2VyIGluIEdlcm1hbnkpIGF0IHRoZSBbVW5pdmVyc2lkYWQgTmFjaW9uYWwgZGUgQ29sb21iaWEgaW4gQm9nb3TDoV0oaHR0cHM6Ly91bmFsLmVkdS5jby8gKS4gT3RoZXIgc3RhdGlvbnMgd2VyZSBpbnN0aXR1dGUgb2YgdGhlb3JldGljYWwgcGh5c2ljcyBhdCB0aGUgW0JyZW1lbiBVbml2ZXJzaXR5XShodHRwOi8vd3d3Lml0cC51bmktYnJlbWVuLmRlL0lUUC8gKSwgdGhlIFtNYXggUGxhbmNrIEluc3RpdHV0ZSBpbiBNYWdkZWJ1cmddKGh0dHBzOi8vd3d3Lm1waS1tYWdkZWJ1cmcubXBnLmRlLyApLCBhbmQgdGhlIFtBc3Ryb25vbWljYWwgT2JzZXJ2YXRvcnkgaW4gQm9nb3TDoSwgQ29sb21iaWFdKGh0dHA6Ly9jaWVuY2lhcy5ib2dvdGEudW5hbC5lZHUuY28vZGVwYXJ0YW1lbnRvcy9vYnNlcnZhdG9yaW8tYXN0cm9ub21pY28tbmFjaW9uYWwvZWwtb2JzZXJ2YXRvcmlvLyApLiANCg0KDQpCZWxvdyBJIGxpc3QgdGhlIGNoYXB0ZXJzIG9mIHRoZSByZWxldmFudCB0b3BpY3Mgb2YgbXkgd29yayB3aXRoIGxpbmtzIHRvIHNvbWUgcmVsZXZhbnQgcHVibGljYXRpb25zOg0KDQohW10oRDpcUHJvamVjdHNcMjAyMV9NQU5VU0NSSVRPU1xQUk9GSUxFXEZpZ3VyZXNcVHJlbm51bmcuanBnKQ0KDQojIEFydGlmaWNpYWwgSW50ZWxsaWdlbmNlLg0KDQpbTWVkaWNhbCByZWNvbW1lbmRlciBzeXN0ZW1zIHRoYXQgZW11bGF0ZSBodW1hbiByYXRpb25hbCBwcm9jZXNzZXMuXShodHRwczovL2JtY21lZGluZm9ybWRlY2lzbWFrLmJpb21lZGNlbnRyYWwuY29tL2FydGljbGVzLzEwLjExODYvczEyOTExLTAyMS0wMTU1My0zKSANCg0KIVtSZXByZXNlbnRhdGlvbiBvZiBMT05Oc10oRDpcUHJvamVjdHNcMjAyMV9NQU5VU0NSSVRPU1xQUk9GSUxFXEZpZ3VyZXNcQmlsZDEuanBnKQ0KDQpIb3cgdG8gaGVscCBwaHlzaWNpYW5zIGluIHRoZWlyIGRhaWx5IHdvcmsgdXNpbmcgZXRoaWNhbCBBST8gSW4gdGhpcyB3b3JrLCB3ZSByZXBvcnQgdGhlIGRldmVsb3BtZW50IG9mIGEgbm92ZWwgcmVjb21tZW5kYXRpb24gc3lzdGVtIG9mIHRoZXJhcGllcyBpbiBtZWRpY2luZSBiYXNlZCBvbiB0aGUgY29tYmluYXRpb24gb2YgY29udGludW91cyBsb2dpYyBhbmQgZGVlcCBsZWFybmluZyBhbGdvcml0aG1zIChMb2dpY2FsIE5ldXJvbmFsIE5ldHdvcmtzLCBvciBMT05OcykuIFRoZSBhZHZhbnRhZ2Ugb2YgdGhpcyBtZXRob2QgaXMgdGhhdCwgZmlyc3QsIGl0IGlzIHRyYW5zcGFyZW50LCBzaW5jZSB0aGUgbW9kZWwgcmVzdWx0cyBlbXVsYXRlIGh1bWFuIGxvZ2ljYWwgZGVjaXNpb24tbWFraW5nIHVzaW5nIGxvZ2ljYWwgY29tYmluYXRpb25zIG9mIGlucHV0IHBhcmFtZXRlcnMsIGFuZCBzZWNvbmQsIGl0IGlzIHNhZmVyIGFnYWluc3QgYXR0YWNrcyB0aGFuIGNvbnZlbnRpb25hbCBkZWVwIGxlYXJuaW5nIG1ldGhvZHMsIHNpbmNlIGl0IGRyYXN0aWNhbGx5IHJlZHVjZXMgdGhlIG51bWJlciBvZiB0cmFpbmFibGUgcGFyYW1ldGVycyBpbiB0aGUgbW9kZWwuIFRoaXMgZGV2ZWxvcG1lbnQgaXMgYSBjb250cmlidXRpb24gZm9yIGZ1dHVyZSBldGhpY2FsIEFJIGFwcGxpY2F0aW9ucy4NCg0KIyBCaW9sb2d5LCBTeXN0ZW1zIEJpb2xvZ3kgYW5kIFRveGljb2xvZ3kNCg0KQmlvbG9neSBpcyBtdWNoIG1vcmUgdGhhbiBtZWNoYW5pc21zLCBhbmQgaW5mb3JtYXRpY3MgY2FuIGJlIGZ1bmRhbWVudGFsIHRvIGJldHRlciB1bmRlcnN0YW5kIFt3aGF0IGlzIGxpZmVdKGh0dHBzOi8vbGluay5zcHJpbmdlci5jb20vYXJ0aWNsZS8xMC4xMDA3L3MwMDIzOS0wMTctOTgyMy03KS4gDQoNCiFbQXV0b25vbW91cyBzZWxlY3Rpb24gb2YgY29uc3RyYWludCBsYW5kc2NhcGVzXShEOlxQcm9qZWN0c1wyMDIxX01BTlVTQ1JJVE9TXFBST0ZJTEVcRmlndXJlc1xCaWxkMi5qcGcpDQoNCkV4cGxhbmF0aW9ucyBiYXNlZCBvbiBsb3ctbGV2ZWwgaW50ZXJhY3RpbmcgZWxlbWVudHMgYXJlIHZhbHVhYmxlIGFuZCBwb3dlcmZ1bCBzaW5jZSB0aGV5IGNvbnRyaWJ1dGUgdG8gaWRlbnRpZnkgdGhlIGtleSBtZWNoYW5pc21zIG9mIGJpb2xvZ2ljYWwgZnVuY3Rpb25zLiBIb3dldmVyLCBtYW55IGR5bmFtaWMgc3lzdGVtcyBiYXNlZCBvbiBsb3ctbGV2ZWwgaW50ZXJhY3RpbmcgZWxlbWVudHMgd2l0aCB1bmFtYmlndW91cywgZmluaXRlLCBhbmQgY29tcGxldGUgaW5mb3JtYXRpb24gb2YgaW5pdGlhbCBzdGF0ZXMgZ2VuZXJhdGUgZnV0dXJlIHN0YXRlcyB0aGF0IGNhbm5vdCBiZSBwcmVkaWN0ZWQsIGltcGx5aW5nIGFuIGluY3JlYXNlIG9mIGNvbXBsZXhpdHkgYW5kIG9wZW4tZW5kZWQgZXZvbHV0aW9uLiBTdWNoIHN5c3RlbXMgYXJlIGxpa2UgVHVyaW5nIG1hY2hpbmVzLCB0aGF0IG92ZXJsYXAgd2l0aCBkeW5hbWljYWwgc3lzdGVtcyB0aGF0IGNhbm5vdCBoYWx0LiBXZSBhcmd1ZSB0aGF0IG9yZ2FuaXNtcyBmaW5kIGhhbHRpbmcgY29uZGl0aW9ucyBieSBkaXN0b3J0aW5nIHRoZXNlIG1lY2hhbmlzbXMsIGNyZWF0aW5nIGNvbmRpdGlvbnMgZm9yIGEgY29uc3RhbnQgY3JlYXRpdml0eSB0aGF0IGRyaXZlcyBldm9sdXRpb24uIFdlIGludHJvZHVjZSBhIG1vZHVsdXMgb2YgZWxhc3RpY2l0eSB0byBtZWFzdXJlIHRoZSBjaGFuZ2VzIGluIHRoZXNlIG1lY2hhbmlzbXMgaW4gcmVzcG9uc2UgdG8gY2hhbmdlcyBpbiB0aGUgY29tcHV0ZWQgZW52aXJvbm1lbnQuDQoNCltJbi1zaWxpY28gaW5kaXZpZHVhbHMgZm9yIHBoYXJtYWNvbG9neSBhbmQgdG94aWNvbG9neV0oaHR0cHM6Ly93d3cuZnJvbnRpZXJzaW4ub3JnL2FydGljbGVzLzEwLjMzODkvZnBoYXIuMjAxMi4wMDIwNC9mdWxsKSANCg0KIVtNdWx0aXNjYWxlIG1vZGVscyB0byBtb2RlbCBtZXRhYm9saXRlIGNvbmNlbnRyYXRpb25zIGluIGhlcGF0b2N5dGVzXShEOlxQcm9qZWN0c1wyMDIxX01BTlVTQ1JJVE9TXFBST0ZJTEVcRmlndXJlc1xCaWxkM18xLmpwZykNCg0KDQpJbiB0aGlzIHdvcmsgd2Ugb3BlbmVkIGRlIHBvc3NpYmlsaXR5IHRvIHVzZSBpbi1zaWxpY28gbW9kZWxzIHRvIHJlcHJlc2VudCB0b3hpYyBlZmZlY3RzIG9mIHN1YnN0YW5jZXMgKGFjZXRhbWlub3BoZW4pIG9ubHkgdXNpbmcgbWF0aGVtYXRpY2FsIG1vZGVscywgYXMgYSBmcmFtZXdvcmsgZm9yIGVmZmljaWVudGx5IGludGVncmF0aW5nIGludGVyLWluZGl2aWR1YWwgdmFyaWFiaWxpdHkgZGF0YSBpbnRvIG1vZGVscywgcGF2aW5nIHRoZSB3YXkgZm9yIHBlcnNvbmFsaXplZCBvciBzdHJhdGlmaWVkIHByZWRpY3Rpb25zIG9mIGRydWcgdG94aWNpdHkgYW5kIGVmZmljYWN5Lg0KDQoNCltJbnNpbGljbyBNb2RlbHMgdG8gYXNzZXNzIFRveGljb2xvZ3kuXShodHRwczovL3d3dy5zY2llbmNlZGlyZWN0LmNvbS9zY2llbmNlL2FydGljbGUvcGlpL1MwMzAwNDgzWDE2MzAwODkwKSANCg0KIVtMaXZlciBkYW1hZ2Ugd2l0aCBBY2V0YW1pbm9waGVuXShEOlxQcm9qZWN0c1wyMDIxX01BTlVTQ1JJVE9TXFBST0ZJTEVcRmlndXJlc1xCaWxkNC5qcGcpDQoNClRoZSBFdXJvcGVhbiBVbmlvbuKAmXMgYmFuIG9uIGFuaW1hbCB0ZXN0aW5nIGZvciBjb3NtZXRpYyBpbmdyZWRpZW50cyBhbmQgcHJvZHVjdHMgaGFzIGdlbmVyYXRlZCBhIHN0cm9uZyBtb21lbnR1bSBmb3IgdGhlIGRldmVsb3BtZW50IG9mIGluIHNpbGljbyBhbmQgaW4gdml0cm8gYWx0ZXJuYXRpdmUgbWV0aG9kcy4gT25lIG9mIHRoZSBmb2N1cyBvZiB0aGUgQ09TTU9TIHByb2plY3Qgd2FzIGFiIGluaXRpbyBwcmVkaWN0aW9uIG9mIGtpbmV0aWNzIGFuZCB0b3hpYyBlZmZlY3RzIHRocm91Z2ggbXVsdGlzY2FsZSBwaGFybWFjb2tpbmV0aWMgbW9kZWxpbmcgYW5kIGluIHZpdHJvIGRhdGEgaW50ZWdyYXRpb24uIEluIG91ciBleHBlcmllbmNlLCBtYXRoZW1hdGljYWwgb3IgY29tcHV0ZXIgbW9kZWxpbmcgYW5kIGluIHZpdHJvIGV4cGVyaW1lbnRzIGFyZSBjb21wbGVtZW50YXJ5LiBXZSBwcmVzZW50IGhlcmUgYSBzdW1tYXJ5IG9mIHRoZSBtYWluIG1vZGVscyBhbmQgcmVzdWx0cyBvYnRhaW5lZCB3aXRoaW4gdGhlIGZyYW1ld29yayBvZiB0aGUgcHJvamVjdCBvbiB0aGVzZSB0b3BpY3MuIEEg76yBcnN0IHNlY3Rpb24gcHJlc2VudHMgb3VyIHdvcmsgYXQgdGhlIG9yZ2FuZWxsZSBhbmQgY2VsbHVsYXIgbGV2ZWwuIFdlIHRoZW4gZ28gdG93YXJkIG1vZGVsaW5nIGNlbGwgbGV2ZWxzIGVmZmVjdHMgKG1vbml0b3JlZCBjb250aW51b3VzbHkpLCBtdWx0aXNjYWxlIHBoeXNpb2xvZ2ljYWxseSBiYXNlZCBwaGFybWFjb2tpbmV0aWMgYW5kIGVmZmVjdCBtb2RlbHMsIGFuZCByb3V0ZSB0byByb3V0ZSBleHRyYXBvbGF0aW9uLiBXZSBmb2xsb3cgd2l0aCBhIHNob3J0IHByZXNlbnRhdGlvbiBvZiB0aGUgYXV0b21hdGVkIEtOSU1FIHdvcmvvrIJvd3MgZGV2ZWxvcGVkIGZvciBkaXNzZW1pbmF0aW9uIGFuZCBlYXN5IHVzZSBvZiB0aGUgbW9kZWxzLiBXZSBlbmQgd2l0aCBhIGRpc2N1c3Npb24gb2YgdHdvIGNoYWxsZW5nZXMgdG8gdGhlIO+sgWVsZDogb3VyIGxpbWl0ZWQgYWJpbGl0eSB0byBkZWFsIHdpdGggbWFzc2l2ZSBkYXRhIGFuZCBjb21wbGV4IGNvbXB1dGF0aW9ucy4NCg0KW01vZGVsbGluZyB2aXJ1cyBwcm9kdWN0aW9uIGZvciBlZmZpY2llbnQgdmFjY2luZSBwcm9kdWN0aW9uXShodHRwczovL3d3dy5zY2llbmNlZGlyZWN0LmNvbS9zY2llbmNlL2FydGljbGUvcGlpL1MwMDA5MjUwOTExMDAzMzkzIyEpDQoNCiFbTWVjaGFuaXNtcyBmb3IgdmlydXMgcmVwbGljYXRpb25dKEQ6XFByb2plY3RzXDIwMjFfTUFOVVNDUklUT1NcUFJPRklMRVxGaWd1cmVzXEJpbGQ1LmpwZykNCg0KSG93IHRvIHJlcHJlc2VudCB2aXJ1cyByZXBsaWNhdGlvbiBpbiBiaW9yZWFjdG9ycyB1c2luZyBNb250ZSBDYXJsbyBtZXRob2RzPyBGaXJzdCwgd2UgcmVwbGFjZSB0aGUgY29uc3RhbnQgaW5mZWN0aW9uIHJlYWN0aW9uIGNvbnN0YW50IGJ5IGEgZnVuY3Rpb24gdGFraW5nIGludG8gYWNjb3VudCB0aGUgaGV0ZXJvZ2VuZWl0eSBvZiBjZWxscyBpbiBhIHR5cGljYWwgYmlvcmVhY3RvciBlbnZpcm9ubWVudC4gU2Vjb25kLCB3ZSB0YWtlIGludG8gYWNjb3VudCB0aGUgb2JzZXJ2ZWQgcmVzcG9uc2Ugb2YgYSBjZWxsIHRvIGEgdmlydXMgYXR0YWNrLCBhbiBpbW11bmUgcmVzcG9uc2Ugb2YgdGhlIHN5c3RlbS4gVGhlIGltbXVuZSByZXNwb25zZSBpbiBhIGJpb3JlYWN0b3IgY2FuIGJlIHJlbGF0ZWQgdG8gdGhlIHByb2R1Y3Rpb24gb2YgYSBzaWduYWwgcHJvdGVpbiBsaWtlIGFuIGludGVyZmVyb24uIFBhcmFsbGVsIHRvIHRoZSBjZWxsIGR5bmFtaWNzIGFsc28gdGhlIGludGVyZmVyb24gY29uY2VudHJhdGlvbiB3aWxsIGJlIG1vZGVsZWQuIFdlIHdpbGwgc3R1ZHkgdGhpcyBhcyBhbiBhZGRpdGlvbmFsIHBhcmFtZXRlciBwbGF5aW5nIGFuIGltcG9ydGFudCByb2xlIGZvciB0aGUgaW5mZWN0aW9uIHByb2JhYmlsaXR5LiBUaGUgZHluYW1pY2FsIGV2b2x1dGlvbiBvZiB0aGUgY2VsbCBwb3B1bGF0aW9uLCB0aGUgdG90YWwgdmlydXMgbnVtYmVyIHZpYSByZXBsaWNhdGlvbiwgYW5kIGl0cyBkZXBlbmRlbmN5IG9uIHRoZSBpbml0aWFsIGNvbmRpdGlvbnMgd2lsbCBiZSBzdHVkaWVkIGhlcmUuIEl0IGNhbiBiZSBzaG93biB0aGF0IHRoZSBleHRlbmRlZCBtb2RlbCBjYW4gYmUgdXNlZCB0byBpbXByb3ZlIGV4cGVyaW1lbnRhbCBkYXRhIGludGVycHJldGF0aW9uIGluIHNldmVyYWwgd2F5cy4gVGhlIGludHJvZHVjdGlvbiBvZiBhIHRpbWUgbGFnIGluIHByZXZpb3VzIG1vZGVscyBpcyBubyBsb25nZXIgbmVjZXNzYXJ5LiBBbHNvLCBkaWZmZXJlbnQgc2NlbmFyaW9zIG9mIHZpcnVzIHJlcGxpY2F0aW9uIHdpdGggbG93IGFuZCBoaWdoIHlpZWxkIGNhbiBub3cgYmUgaW50ZXJwcmV0ZWQgY29uc2lzdGVudGx5IHdpdGhpbiBvbmUgbW9kZWwgYXBwcm9hY2guDQoNCltUaW1lIGRlbGF5IGZvciB0aGUgYW1wbGlmaWNhdGlvbiBvZiBjZWxsIHNpZ25hbHNdKGh0dHBzOi8vd3d3Lndvcmxkc2NpZW50aWZpYy5jb20vZG9pL3BkZi8xMC4xMTQyL1MwMTI5MTgzMTExMDE2MzEyKQ0KDQohW01lY2hhbmlzbXMgb2Ygc3RvY2hhc3RpYyB0aW1lIGRlbGF5cyBpbiBzaWduYWwgdHJhbnNkdWN0aW9uIF0oRDpcUHJvamVjdHNcMjAyMV9NQU5VU0NSSVRPU1xQUk9GSUxFXEZpZ3VyZXNcQmlsZDYuanBnKQ0KDQpTdG9jaGFzdGljIHRpbWUgZGVsYXlzIGFuZCBhc3luY2hyb25pc20gaW4gcmVndWxhdG9yeSBuZXR3b3JrcyBpcyBhIHViaXF1aXRvdXMgcGhlbm9tZW5vbiBpbiBiaW9sb2d5LCBpbiBwYXJ0aWN1bGFyIGluIHJlZ3VsYXRvcnkgbmV0d29ya3MuIEhvd2V2ZXIsIHRoaXMgcGhlbm9tZW5vbiBpcyBwb29ybHkgdW5kZXJzdG9vZC4gSW4gcGFydGljdWxhciwgdmFyaWFibGUtc3RvY2hhc3RpYyB0aW1lIGludGVydmFscyBpbiB0aGUgcmVhbGl6YXRpb24gb2YgY2hlbWljYWwgcmVhY3Rpb25zIGhhdmUgYSBjcnVjaWFsIGVmZmVjdCBpbiB0aGUgZHluYW1pY3Mgb2YgdGhlIHN5c3RlbS4gSSBhbmFseXplIHRoZSBlZmZlY3QgdGhhdCBkaWZmZXJlbnQgdGltZSBkZWxheXMgaW4gZmVlZGJhY2sgbG9vcHMgY2FuIGhhdmUgaW4gdGhlIHRyYW5zaWVudCBiZWhhdmlvciBvZiBhIHJlZ3VsYXRvcnkgbmV0d29yay4gVXNpbmcgYSBzaW1wbGUgdG95IG1vZGVsIGZvciBhIHJlZ3VsYXRvcnkgbmV0d29yayB3aXRoIGZvcmNpbmcgSSBzaG93IHRoYXQgc3VjaCB0aW1lIGRlbGF5cyBpbnRyb2R1Y2UgYW4gb3NjaWxsYXRvcnkgYmVoYXZpb3IgdGhhdCBjYW4gYWx0ZXJuYXRpdmVseSBiZSBleHBsYWluZWQgaWYgYWRkaXRpb25hbCBsb29wcyBhcmUgZGVmaW5lZC4gVGhlIHJlc3VsdHMgc3VnZ2VzdCB0aGF0IHRoZSBpbnRyb2R1Y3Rpb24gb2YgdGltZSBkZWxheXMgaXMgYSBtZWNoYW5pc20gdGhhdCBpcyBoZWxwZnVsIHRvIHRoZW9yZXRpY2FsbHkgcmVkdWNlIHRoZSBudW1iZXIgb2YgZWxlbWVudHMsIGluIHBhcnRpY3VsYXIgdGhlIG51bWJlciBvZiBmZWVkYmFjayBsb29wcywgaW4gY29tcGV0aW5nIG5ldHdvcmsgbW9kZWxzLg0KCSANCg0KIyBDb21wbGV4IFN5c3RlbXMNCg0KW1BlcnNpc3RlbnQgRW50cm9weSBpbiBCaW9sb2dpY2FsIGRhdGEg4oCTIGFuZCBvYnNlcnZhYmlsaXR5IG9mIGNvbXBsZXggc3lzdGVtc10oaHR0cHM6Ly93d3cuZnJvbnRpZXJzaW4ub3JnL2FydGljbGVzLzEwLjMzODkvZnBoeS4yMDIwLjQ2NTk4Mi9mdWxsKQ0KDQohW1BlcnNpc3RlbnQgYmFycyBmb3IgdGhlIGV2YWx1YXRpb24gb2YgcGVyc2lzdGVudCBlbnRyb3B5XShEOlxQcm9qZWN0c1wyMDIxX01BTlVTQ1JJVE9TXFBST0ZJTEVcRmlndXJlc1xCaWxkNy5qcGcpDQoNCk9yZ2FuaXNtcyBhcmUgY29udGludW91c2x5IG9ic2VydmluZyBhbmQgYWRhcHRpbmcgdG8gdGhlaXIgZW52aXJvbm1lbnQsIGltcGVkaW5nIGl0cyBvYmplY3RpdmUgZGVzY3JpcHRpb24uICBJbiB0aGlzIHJlc2VhcmNoLCB3ZSBhcmUgaW50cm9kdWNpbmcgYSBtZXRob2QgYmFzZWQgb24gdGhlIGRlZmluaXRpb24gb2YgaG9tb2xvZ2ljYWwgZ3JvdXBzIHRoYXQgYWltcyBhdCBldmFsdWF0aW5nIHRoaXMgcGVyc2lzdGVudCBlbnRyb3B5IGFzIGEgY29tcGxleGl0eSBtZWFzdXJlIHRvIGVzdGltYXRlIHRoZSBvYnNlcnZhYmlsaXR5IG9mIHRoZSBzeXN0ZW1zLiBUaGUgbGFyZ2UgdGhlIHBlcnNpc3RlbnQgZW50cm9weSwgdGhlIG1vcmUgZGlmZmljdWx0IGlzIHRvIChvYmplY3RpdmVseSkgb2JzZXJ2ZSB0aGUgc3lzdGVtLiBUaGlzIG1ldGhvZCBpZGVudGlmaWVzIHBhdHRlcm5zIHdpdGggcGVyc2lzdGVudCB0b3BvbG9neSwgZXh0cmFjdGVkIGZyb20gdGhlIGNvbWJpbmF0aW9uIG9mIGRpZmZlcmVudCB0aW1lIHNlcmllcyBhbmQgY2x1c3RlcmluZyB0aGVtIHRvIGlkZW50aWZ5IHBlcnNpc3RlbnQgYmlhcyBpbiB0aGUgZGF0YS4NCg0KIyBTb2Z0IE1hdHRlciBhbmQgU3RhdGlzdGljYWwgUGh5c2ljcyANCg0KW1NvZnQgbWF0dGVyIHBsYXkgZ2FtZXMgd2hlbiB0aGV5IGFkc29yYiBvbiBzdXJmYW5jZXNdKGh0dHBzOi8vd3d3Lndvcmxkc2NpZW50aWZpYy5jb20vZG9pL2VwZGYvMTAuMTE0Mi9TMDEyOTE4MzEwOTAxMzk2MCkgDQoNCkhlcmUgSSBkZW1vbnN0cmF0ZWQgaG93IEdhbWUgVGhlb3J5IGNvdWxkIGJlIHVzZWQgZm9yIHRoZSBjb21wdXRhdGlvbiBvZiBhZHNvcnB0aW9uIHByb2Nlc3NlcyBvZiBtYWNyb21vbGVjdWxlczoNCg0KIVtBZHNvcmJ0aW9uIG9mIHBvbHltZXJzIHdpdGggYSBzb2x2ZW50IGJhc2VkIG9uIGdhbWUgdGhlb3J5XShEOlxQcm9qZWN0c1wyMDIxX01BTlVTQ1JJVE9TXFBST0ZJTEVcRmlndXJlc1xCaWxkOC5qcGcpDQogDQpUaGlzIHdvcmsgaW50cm9kdWNlcyBhIG5vdmVsIGNvYXJzZS1ncmFpbmVkIG1vZGVsIHJlcHJlc2VudGluZyB0aGUgZHluYW1pY3Mgb2YgcG9sYXIgbW9sZWN1bGVzIHRoYXQgYWRzb3JiIG9uIGEgc3Vic3RyYXRlIGluIHRoZSBwcmVzZW5jZSBvZiBhIHNvbHZlbnQuIFRoZSBtb3RpdmF0aW9uIG9mIHRoZSBtb2RlbCBpcyB0byBhdm9pZCB0aGUgZXhwbGljaXQgcmVwcmVzZW50YXRpb24gb2YgdGhlIHNvbHZlbnQuIEluc3RlYWQsIHRoZSBzb2x2ZW50LW1lZGlhdGVkIGludGVyYWN0aW9uIGlzIGluZGlyZWN0bHkgcmVwcmVzZW50ZWQgdXNpbmcgYSDvrIJ1Y3R1YXRpbmcgZW5lcmd5IGxhbmRzY2FwZS4gVGhlIGR5bmFtaWNzLCBvbiB3aGljaCB0aGlzIG1vZGVsIGlzIGJhc2VkLCBhcmUgc2ltaWxhciB0byB0aGUgZHluYW1pY3MgaW4gZ2FtZSB0aGVvcnkuIEluIHBhcnRpY3VsYXIsIHRoZSBzdHJhdGVneSBvZiBhbiBhZ2VudCBpbiBhIGdhbWUgaXMgbGlrZSB0aGUgbW9kae+sgWNhdGlvbiBvZiB0aGUgZnJlZSBlbmVyZ3kgYmFycmllciBiZXR3ZWVuIHRoZSBtb2xlY3VsZSBhbmQgdGhlIHN1YnN0cmF0ZSBpbmR1Y2VkIGJ5IG90aGVyLg0KDQpbTmFuby0gcmhlb2xvZ3ldKGh0dHBzOi8vaW9wc2NpZW5jZS5pb3Aub3JnL2FydGljbGUvMTAuMTA4OC8wOTUzLTg5ODQvMTgvMTAvMDAzKQ0KDQpCeSBhbmFseXppbmcgdGhlIGVtYmVkZGluZyBvZiBhIG5hbm8tcGFydGljbGUgaW4gYSBwb2x5bWVyIG1lbHQgaXMgcG9zc2libGUgdG8gdW5kZXJzdGFuZCB0aGUgcmhlb2xvZ2ljYWwgY2hhcmFjdGVyaXN0aWNzIG9mIHRoZSBtZWx0OiANCg0KIVtBZHNvcmJ0aW9uIG9mIHBvbHltZXJzIHdpdGggYSBzb2x2ZW50IGJhc2VkIG9uIGdhbWUgdGhlb3J5XShEOlxQcm9qZWN0c1wyMDIxX01BTlVTQ1JJVE9TXFBST0ZJTEVcRmlndXJlc1xCaWxkOS5qcGcpDQoNCkluIHRoaXMgd29yayB3ZSByZXBvcnQgb24gbW9sZWN1bGFyIGR5bmFtaWNzIHNpbXVsYXRpb25zIG9mIHRoZSBlbWJlZGRpbmcgcHJvY2VzcyBvZiBhIG5hbm9wYXJ0aWNsZSBpbnRvIGEgcG9seW1lcmljIO+sgWxtIGFzIGEgZnVuY3Rpb24gb2YgdGVtcGVyYXR1cmUuIFRoaXMgcHJvY2VzcyBoYXMgYmVlbiBlbXBsb3llZCBleHBlcmltZW50YWxseSBpbiByZWNlbnQgeWVhcnMgdG8gdGVzdCBmb3IgYSBzaGlmdCBvZiB0aGUgZ2xhc3MgdHJhbnNpdGlvbiBvZiBhIG1hdGVyaWFsIGR1ZSB0byB0aGUgY29u76yBbmVkIO+sgWxtIGdlb21ldHJ5IGFuZCB0byB0ZXN0IGZvciB0aGUgZXhpc3RlbmNlIG9mIGEgbGlxdWlkLWxpa2UgbGF5ZXIgb24gdG9wIG9mIGEgZ2xhc3N5IHBvbHltZXIg76yBbG0uIFRoZSBlbWJlZGRpbmcgcHJvY2VzcyBpcyBnb3Zlcm5lZCB0aGVybW9keW5hbWljYWxseSBieSB0aGUgcHJld2V0dGluZyBwcm9wZXJ0aWVzIG9mIHRoZSBwb2x5bWVyIG9uIHRoZSBuYW5vcGFydGljbGUuIFdlIHNob3cgdGhhdCB0aGUgZHluYW1pY3Mgb2YgdGhlIHByb2Nlc3MgZGVwZW5kcyBvbiB0aGUgQnJvd25pYW4gbW90aW9uIGNoYXJhY3RlcmlzdGljcyBvZiB0aGUgbmFub3BhcnRpY2xlIGluIGFuZCBvbiB0aGUgcG9seW1lciDvrIFsbS4gSXQgZGlzcGxheXMgbGFyZ2Ugc2FtcGxlIHRvIHNhbXBsZSB2YXJpYXRpb25zLCBzdWdnZXN0aW5nIHRoYXQgaXQgaXMgYW4gYWN0aXZhdGVkIHByb2Nlc3MuIE9uIHRoZSB0aW1lc2NhbGVzIG9mIHRoZSBzaW11bGF0aW9uIGFuIGVtYmVkZGluZyBvZiB0aGUgbmFub3BhcnRpY2xlIGlzIG9ubHkgb2JzZXJ2ZWQgZm9yIHRlbXBlcmF0dXJlcyBhYm92ZSB0aGUgYnVsayBnbGFzcyB0cmFuc2l0aW9uIHRlbXBlcmF0dXJlIG9mIHRoZSBwb2x5bWVyLCBhZ3JlZWluZyB3aXRoIGV4cGVyaW1lbnRhbCBvYnNlcnZhdGlvbnMgb24gbm9ibGUgbWV0YWwgY2x1c3RlcnMgb2YgY29tcGFyYWJsZSBzaXplLg0KDQojIEVjb25vbWljcyBhbmQgU29jaWFsIFN5c3RlbXMgDQoNCltFbnZ5IGluIHRoZSB3YWtlIG9mIHNvY2lhbCBuZXR3b3Jrc10oaHR0cHM6Ly93d3cuc2NpZW5jZWRpcmVjdC5jb20vc2NpZW5jZS9hcnRpY2xlL2Ficy9waWkvUzAzNzg0MzcxMDYwMDc4NTApIA0KDQohW0VxdWl0YWJsZSBkaXN0cmlidXRpb24gb2YgZ29vZHNdKEQ6XFByb2plY3RzXDIwMjFfTUFOVVNDUklUT1NcUFJPRklMRVxGaWd1cmVzXEJpbGQxMC5qcGcpDQoNCkVudnkgaXMgYSByYXRoZXIgY29tcGxleCBhbmQgaXJyYXRpb25hbCBlbW90aW9uLiBJbiBnZW5lcmFsLCBpdCBpcyB2ZXJ5IGRpZu+sgWN1bHQgdG8gb2J0YWluIGEgbWVhc3VyZSBvZiB0aGlzIGZlZWxpbmcsIGJ1dCBpbiBhbiBlY29ub21pY2FsIGNvbnRleHQgZW52eSBiZWNvbWVzIGFuIG9ic2VydmFibGUgd2hpY2ggY2FuIGJlIG1lYXN1cmVkLiBXaGVuIHZhcmlvdXMgaW5kaXZpZHVhbHMgY29tcGFyZSB0aGVpciBwb3NzZXNzaW9ucywgZW52eSBhcmlzZXMgZHVlIHRvIHRoZSBpbmVxdWFsaXR5IG9mIHRoZWlyIGRpZmZlcmVudCBhbGxvY2F0aW9ucyBvZiBjb21tb2RpdGllcyBhbmQgZGlmZmVyZW50IHByZWZlcmVuY2VzLiBJbiB0aGlzIHBhcGVyLCB3ZSBzaG93IHRoYXQgYW4gZXF1aXRhYmxlIGRpc3RyaWJ1dGlvbiBvZiBnb29kcyBkb2VzIG5vdCBndWFyYW50ZWUgYSBzdGF0ZSBvZiBmYWlybmVzcyBiZXR3ZWVuIGFnZW50cyBhbmQgaW4gZ2VuZXJhbCB0aGF0IGVudnkgY2Fubm90IGJlIGNvbnRyb2xsZWQgYnkgdHVuaW5nIHRoZSBkaXN0cmlidXRpb24gb2YgZ29vZHMuIEluIG90aGVyIHdvcmRzOiBlbnZ5IHBlcnNpc3RzIGlmIHRoZXJlIGlzIGEgbmV0d29yayBhbGxvd2luZyBhZ2VudHMgdG8gbWFrZSBpbnRlcnBlcnNvbmFsIGNvbXBhcmlzb25zLCByZWdhcmRsZXNzIGhvdyBmYWlyIGFyZSByZXNvdXJjZXMgZGlzdHJpYnV0ZWQgYW1vbmcgaW5kaXZpZHVhbHMuIA0KDQojIEFzdHJvcGh5c2ljcw0KDQpbR3Jhdml0YXRpb24gYXQgYW4gSW50ZXJmYWNlXShodHRwczovL2FyeGl2Lm9yZy9wZGYvZ3ItcWMvMDYwODA5My5wZGYpIA0KDQpJbiB0aGlzIHdvcmsgYSBzaW1wbGUgdG95IG1vZGVsIGZvciBhIGZyZWUgaW50ZXJmYWNlIGJldHdlZW4gYnVsayBwaGFzZXMgaW4gc3BhY2UgYW5kIHRpbWUgaXMgcHJlc2VudGVkLCBkZXJpdmVkIGZyb20gdGhlIGJhbGFuY2UgZXF1YXRpb25zIGZvciBleHRlbnNpdmUgdGhlcm1vZHluYW1pYyB2YXJpYWJsZXMgb2YgTWVpbmhvbGQtSGVlcmxlaW4uIEluIHRoaXMgY2FzZSB0aGUgZnJlZSBpbnRlcmZhY2UgcmVwcmVzZW50cyBnZW9kZXNpY3MgaW4gdGhlIHNwYWNlLXRpbWUsIGFsbG93aW5nIHRoZSBkZXJpdmF0aW9uIG9mIHRoZSBFaW5zdGVpbuKAmXMgZXF1YXRpb25zIGZvciBncmF2aXRhdGlvbmFsIO+sgWVsZHMuIFRoZSBl76yAZWN0IG9mIHRoZSBiYWxhbmNlIGVxdWF0aW9uIGlzIGV4YW1pbmVkIGFuZCBhIHNpbXBsZSBleHByZXNzaW9uIGZvciBjb2xkIGRhcmsgbWF0dGVyIGlzIGRlcml2ZWQuIFRoZSB0aGVybW9keW5hbWljYWxseSBtZWFuaW5nIG9mIHRoaXMgbW9kZWwgaXMgYWxzbyBkaXNjdXNzZWQuDQoNCiFbXShEOlxQcm9qZWN0c1wyMDIxX01BTlVTQ1JJVE9TXFBST0ZJTEVcRmlndXJlc1xUcmVubnVuZy5qcGcpDQoNCg0K