professor: Bruno Falissard
INTRODUCTION :
Au sein du contexte complexe de la santé mentale en milieu carcéral,
l’interaction entre la personnalité des détenus, leurs antécédents et la
sévérité de leurs troubles mentaux revêt une importance capitale. Notre
étude plonge dans cette réalité pour explorer la façon dont la gravité
des troubles mentaux, psychologiques courants - tels que la dépression,
la schizophrénie, les troubles anxieux et les addictions - s’entrelace
avec des éléments clés de la personnalité tels que la propension à la
recherche de sensations, l’évitement du danger, la dépendance à la
récompense et leur statut socio-économique et antécédents. Notre projet
se distingue par son attention particulière à un aspect souvent
sous-estimé : la durée des entretiens avec les détenus. En étudiant
cette variable, notre objectif est de capturer des nuances plus
profondes sur la façon dont la santé mentale et la personnalité des
individus incarcérés peuvent mutuellement influencer leurs comportements
et son effet instantanée (et leur comportement relationnel de jour le
jour). Notre étude cherche à élucider comment ces facteurs s’entremêlent
dans le contexte spécifique de la prison. En saisissant ces relations,
nous aspirons à éclairer les comportements et les interactions des
détenus, offrant ainsi des pistes pour des approches de réadaptation
mieux adaptées et plus efficaces. Cette variable semble également
intéressant pour véritablement comprendre l’interaction entre l’individu
et son milieu.
REVUES DE LITTÉRATURE :
Les facteurs socio-démographiques/ affectives et les antécédant,
peuvent avoir un impact significatif sur la santé mentale des détenus en
prison. Plusieurs études mettent en évidence l’importance de ces
facteurs dans la compréhension des problèmes de santé mentale en milieu
carcéral. Une étude menée au Sénégal a souligné que les caractéristiques
socio-démographiques des détenus, telles que leur âge, leur niveau
d’éducation, leur origine ethnique et leur statut socio-économique,
contribuent à renforcer leur vulnérabilité en prison[1]. De même, une
publication du Réseau de sensibilisation à la radicalisation de l’Union
européenne indique que de nombreux détenus souffrent de problèmes de
santé mentale avant même leur incarcération, soulignant ainsi
l’importance des facteurs socio-démographiques dans ce contexte[2]. Par
ailleurs, une étude du Sénat français met en lumière l’impact des
troubles mentaux sur la population carcérale, soulignant que la
réduction du nombre de lits d’hospitalisation à temps complet dédiés à
la psychiatrie a conduit à une augmentation de la prise en charge des
troubles mentaux en prison[3]. En outre, une recherche sur les
adolescents détenus hospitalisés met en évidence l’organisation des
soins psychiatriques en fonction des caractéristiques
socio-démographiques des détenus [4]. Une étude publiée dans “The Lancet
Psychiatry” en 2018 a examiné l’association entre les facteurs
socio-démographiques et la santé mentale des détenus, mettant en
évidence l’importance de prendre en compte ces variables dans
l’évaluation et la prix en charge des problèmes de santé mentale en
milieu carcéral. De même, une recherche menée par l’Institut National de
la Santé Mentale a mis en lumière l’impact des facteurs affectifs et
cliniques sur la santé mentale des détenus, soulignant l’importance
d’une approche holistique pour la prévention et le traitement des
troubles mentaux en prison. En résumé, les facteurs socio-démographiques
tels que l’âge, le niveau d’éducation, les antecedents et le statut
socio-économique jouent un rôle crucial dans l’impact sur la santé
mentale des détenus en prison. Ces facteurs doivent être pris en compte
dans la compréhension et la prise en charge des problèmes de santé
mentale en milieu carcéral.
Reference : [1] https://www.ncbi.nlm.nih.gov/pmc/articles/PMC8486928/
[2] https://home-affairs.ec.europa.eu/system/files/2021-01/ran_conclusion_paper_mh_in_prison_23-24_092020_fr.pdf
[3] https://www.senat.fr/rap/r09-434/r09-434_mono.html
[4] https://www.sciencedirect.com/science/article/am/pii/S0013700618301672
[5] https://theses.hal.science/tel-00199248/document
PARTIE ANALYSE DE DONNÉES
HYPOTHÈSES :
1.Hypothèse sur le niveau de scolarisation : On suppose que
des niveaux élevés de scolarisation chez les détenus pourraient
contribuer à une communication plus fluide et efficace lors de
l’entretien. Cette facilitation de la communication pourrait réduire la
durée nécessaire pour obtenir des informations pertinentes.
2.Hypothèse surl’influence de la profession du détenu :
Selon la nature relationnelle, expressive ou isolante de la profession
du détenu, on envisage que cela pourrait impacter la dynamique de
l’entretien. Par exemple, une profession favorisant les interactions
sociales pourrait faciliter la communication, tandis qu’une profession
plus isolante pourrait rendre l’entretien plus complexe.
3.Hypothèse sur l’effet de l’âge du détenu : L’âge du détenu
est supposé influencer la durée de l’entretien. On envisage qu’un détenu
plus âgé, présentant parfois des comportements associés à la sénilité,
pourrait prolonger la durée de l’entretien. En revanche, un détenu plus
jeune pourrait démontrer une spontanéité et une capacité à s’exprimer
plus rapidement, potentiellement réduisant la durée de l’entretien.
4.Hypothèse sur les variables diagnostiques : L’hypothèse
suggère que la présence de diagnostics ou de troubles mentaux complexes,
tels que la dépression, la schizophrénie, le syndrome de stress
post-traumatique ou des comportements d’abus d’alcool, pourrait
considérablement augmenter la durée de l’entretien. L’exploration de ces
symptômes complexes demanderait plus de temps pour une évaluation
adéquate.
5. Hypothese sur les variables de risque suicidaire : Les
variables associées au risque suicidaire, comme les scores de risque,
les antécédents de tentative de suicide ou les signes indiquant un
risque élevé, sont supposées entraîner des discussions approfondies
pendant l’entretien. Cette nécessité d’évaluer minutieusement ces
aspects pourrait augmenter la durée de l’entretien.
PRESENTATION DES DONNEES
DESCRIPTION DES VARIABLES
La description des variables se trouve dans le tableau
ci-dessous:
Notre jeu de données concerne une étude sur la santé mentale en
milieu carcéral, menée en 2004 et financée conjointement par le
Ministère de la Justice et le Ministère de la Santé. Cette enquête a
examiné 799 hommes détenus sélectionnés au hasard dès leur arrivée en
prison au cours du premier mois dans des établissements pénitentiaires
en France métropolitaine. Nous disposons de 26 variables suivantes :
(La base de données a été obtenue auprès du Professeur Bruno
Falissard, professeur de biostatistique à la faculté de médecine
Paris-Saclay, également directeur du Centre de recherche en
épidémiologie et santé des populations de l’INSERM (CESP))
| age |
L’âge du détenu au moment de l’étude. |
Quantitative |
| prof |
La profession ou occupation du détenu. |
Qualitative |
| duree |
La durée de la peine que le détenu a reçue. |
Qualitative |
| discip |
Indique si le détenu est sous une mesure
disciplinaire. |
Qualitative |
| n.enfant |
Le nombre d’enfants que le détenu a. |
Quantitative |
| n.fratrie |
Le nombre de frères et sœurs du détenu. |
Quantitative |
| ecole |
Une variable de 1 à 5 indiquant le niveau de
scolarisation du détenu. |
Qualitative |
| separation |
Indique si le détenu a été séparé de sa famille pendant
son enfance (oui/non). |
Qualitative |
| juge.enfant |
Indique si le détenu a bénéficié de l’aide d’un juge
pour enfants pendant son enfance. |
Qualitative |
| place |
Indique si le détenu a été placé en institution. |
Qualitative |
| abus |
Indique si le détenu a été victime d’abus dans son
enfance. |
Qualitative |
| grave.cons |
La gravité consensuelle de la pathologie du
détenu. |
Qualitative |
| dep.cons |
L’existence d’une dépression diagnostiquée par
consensus. |
Qualitative |
| ago.cons |
L’existence d’un trouble agoraphobique diagnostiqué par
consensus. |
Qualitative |
| ptsd.cons |
L’existence d’un syndrome de stress post-traumatique
diagnostiqué par consensus. |
Qualitative |
| alc.cons |
L’existence d’un abus ou addiction à l’alcool
diagnostiqué par consensus. |
Qualitative |
| subst.cons |
L’existence d’une addiction ou abus de substances
diagnostiqué par consensus. |
Qualitative |
| scz.cons |
L’existence de la schizophrénie diagnostiquée par
consensus. |
Qualitative |
| char |
Un score évaluant l’importance du trouble de la
personnalité sous-jacent. |
Qualitative |
| rs |
Une mesure du niveau de recherche de sensations dans la
personnalité du détenu. |
Qualitative |
| ed |
Une mesure du niveau d’évitement du danger dans la
personnalité du détenu. |
Qualitative |
| dr |
Une mesure du niveau de dépendance à la récompense dans
la personnalité du détenu. |
Qualitative |
| suicide.s |
Un score évaluant le risque suicidaire. |
Qualitative |
| suicide.hr |
Une variable binaire indiquant s’il y a un haut risque
suicidaire. |
Qualitative |
| suicide.past |
Indique si le détenu a des antécédents de tentative de
suicide. |
Qualitative |
| dur.interv |
La durée de l’entretien que les enquêteurs ont passé
avec le détenu. |
Quantitative |
GESTION DES VALEURS MANQUANTES
Pour certains individus et variables de la base de données, des
valeurs sont manquantes. Nous avons remarqué qu’en appliquant la méthode
de suppression des cas complets(complete case analysis), qui consiste à
conserver uniquement les lignes de données complètes pour l’analyse,
nous n’avions que 403 observations sur 799, soit environ la moitié des
données. Pour maintenir une taille d’échantillon suffisante, nous avons
choisi de conserver toutes les observations et de gérer les valeurs
manquantes lors des calculs des statistiques descriptives en utilisant
l’argument R ‘an.rm = TRUE’. Cela nous a permis de calculer les mesures
basées uniquement sur les valeurs numériques disponibles, excluant ainsi
les valeurs manquantes. Pour l’analyse des correspondances multiples
(ACM), nous avons opté pour l’utilisation du package “mice”
(Multivariate Imputation by Chained Equations) de FactoMineR afin
d’imputer les valeurs manquantes dans l’ensemble de données en utilisant
des équations à plusieurs étapes. Cette méthode d’imputation remplace
les valeurs manquantes par des estimations basées sur les autres
variables disponibles, créant ainsi plusieurs ensembles de données
complets pour l’analyse statistique. La présence de données manquantes
peut entraîner des biais lors de l’analyse, susceptibles de surestimer
certains résultats. Nous avons ainsi pris ces mesures pour éviter ces
biais.
STATISTIQUE DESCRIPTIVE ET ANALYSE EXPLORATOIRE:
STATISTIQUE DESCRIPTIVE
Avant d’entamer une analyse approfondie, il est impératif de conduire
des statistiques descriptives et une analyse exploratoire de notre jeu
de données. Parmi les 799 observations, l’âge moyen des détenus est de
39 ans, avec une tranche d’âge allant de 19 à 83 ans. La catégorie
professionnelle majoritaire est celle des ouvriers, représentant environ
29% des individus, suivie par les employés (17%), les artisans (11%),
les sans emploi/chômeurs (28%), les professionnels intermédiaires (7%),
les agriculteurs (1%), les cadres (3%) et autres professions (4%).
Concernant le parcours éducatif, 42% des détenus ont été séparés de
leurs parents dans leur enfance, 43% n’ont pas été scolarisés ou ont
fréquenté la maternelle, 38% ont suivi l’école élémentaire, 11% le
collège, 6% le lycée et 2% l’enseignement supérieur. En outre, 20%
présentent un risque suicidaire élevé, 8% un trouble schizophrénique,
40% une dépression et 16% de l’agoraphobie. Concernant les niveaux de
gravité des pathologies évalués de 1 à 7 (de pas grave à très grave),
les pourcentages respectifs sont : 13.39%, 16.27%, 14.27%, 20.40%,
23.03%, 10.14% et 2.50%. En outre, 27% des détenus sont dépendants de
substances, 19% de l’alcool, tandis que 28% ont bénéficié de l’aide d’un
juge pour enfants. Environ 22% des détenus présentent un syndrome de
stress post-traumatique, 23% ont été placés et 28% ont été victimes
d’abus dans leur enfance. Les niveaux de troubles de
caractère/personnalité évalués de 1 à 4 (de pas fréquent à très
fréquent) sont représentés respectivement par des pourcentages de
67.71%, 16.40%, 10.26% et 5.63%. De plus, 23% ont été placés sous
discipline. Les détenus ont également été évalués sur diverses échelles,
notamment le niveau de recherche de sensation (représenté par des
pourcentages de 34.54%, 22.40% et 43.05%), l’évitement du danger
(43.93%, 23.28% et 32.79%), la dépendance à la récompense (28.66%,
28.29% et 43.05%) ainsi que le score de suicide (70.09%, 8.51%, 4.76%,
6.76% et 6.88%). De plus, 29% ont tenté de se suicider par le passé. Les
durées de peine sont réparties sur une échelle de 1 à 5, représentant
respectivement 0.50, 6.01, 13.39, 32.42 et 47.68 années, du plus court
au plus long. En moyenne, les détenus ont entre 1 et 2 enfants, avec un
maximum de 13 enfants par détenu. La taille moyenne de fratrie est de 4
frères et sœurs, avec un maximum de 21. Enfin, la durée moyenne
d’entretien est d’une heure (61.89 minutes), avec une durée maximale de
2 heures.
Matrice de corrélation
GRAPHIQUES ET INTERPRÉTATIONS :
Interpretation : Notre premier graphique présente la
corrélation entre l’âge des détenus, le nombre d’enfants et leur
profession. Il révèle que la plupart des ouvriers et artisans de notre
échantillon, principalement âgés d’environ 50 ans, ont un nombre
d’enfants supérieur à la moyenne observée. En parallèle, une observation
intéressante est que les chômeurs et les agriculteurs ont tendance à
avoir davantage d’enfants à mesure qu’ils vieillissent, ce qui contraste
avec la tendance des cadres. Cette catégorie tend à avoir des enfants
plus tardivement par rapport aux employés et autres professions. Cette
observation peut s’avérer pertinente dans notre étude sur la santé
mentale en prison, car elle souligne une corrélation potentielle entre
la situation professionnelle, l’âge des détenus et le nombre d’enfants,
des facteurs qui pourraient influencer les dynamiques familiales et, par
conséquent, impacter la santé mentale en milieu carcéral.
visualisation de la taille de la fratrie des detenus(Graph
2)
Interpretation : On remarque que la majorité des
détenus ont trois frères et sœurs (la mode de la taille de la fratrie
est 3)
Interpretation : On remarque que la majorité des
détenus sont ouvriers (la mode de la profession est ouvrier)
Interpretation : Notre graphique en barres ici
représente la répartition des répondants en fonction de la durée
d’intervention. Chaque barre correspond à une durée spécifique
d’intervention, et sa hauteur indique le nombre d’individus
correspondant à cette durée. L’axe horizontal montre les différentes
durées d’intervention, tandis que l’axe vertical représente le nombre
d’individus pour chaque durée. Les barres colorées en “orchid4”
affichent visuellement la répartition des répondants. De plus, des
étiquettes numériques sont ajoutées au-dessus de chaque barre pour
indiquer le nombre exact d’individus pour chaque durée. Les étiquettes
en noir sont positionnées au-dessus des barres avec une valeur
inférieure à la moyenne du nombre d’individus, tandis que les étiquettes
en rouge sont au-dessus des barres avec une valeur supérieure à la
moyenne. Cette représentation nous donne un aperçu visuel de la
distribution des répondants en fonction de la durée d’intervention,
mettant en évidence les durées qui se démarquent par rapport à la
moyenne en termes de fréquence de répondants.
Interpretation : Ce graphique représente la
distribution de la durée d’interview des détenus en fonction de la
présence ou de l’absence de schizophrénie. L’axe horizontal (x) indique
la durée de l’interview en minutes, tandis que l’axe vertical (y)
présente les catégories “Absence” et “Présence” de schizophrénie. Les
zones colorées du graphique montrent la densité de distribution des
durées d’interview pour les deux catégories de schizophrénie.La zone
bleue (“Absence de schizophrénie”) est plus étendue ou plus élevée dans
certaines parties du graphique par rapport à la zone rouge (“Présence de
schizophrénie”), cela suggère que pour les durées d’interview
correspondantes, il y a une plus grande concentration de cas sans
schizophrénie que de cas avec schizophrénie. Ce graphique permet de
comparer visuellement la distribution des durées d’interview entre les
détenus présentant ou non des signes de schizophrénie, offrant ainsi un
aperçu des différences potentielles dans cette mesure en fonction de la
présence de ce trouble.
Interpretation : Ce graphique de violon représentant
la relation entre le nombre d’enfants par détenu et la taille de la
fratrie par détenu, pour les détenus dont le niveau d’évitement de
danger est classifié en trois catégories (“1”, “2”, “3”). Chaque violon
représente la distribution des observations pour chaque combinaison du
nombre d’enfants et de la taille de la fratrie. La largeur du violon
indique la densité des observations à différents niveaux de ces deux
variables. Les axes x et y représentent respectivement le nombre
d’enfants par détenu et la taille de la fratrie par détenu. Les couleurs
des violons et des points sont associées aux différentes catégories de
taille de fratrie (“1” pour petite, “2” pour moyenne et “3” pour
grande), permettant une comparaison visuelle entre ces groupes. En
observant ce graphique, on peut remarque que les detenus qui ont une
taille plus grande ont un peu plus de dix enfants, ont observe une base
montrant que la majorité ont une petite taille de fratrie et moins
d’enfants.
Interpretation (Graph7): Nous avons deux graphiques
circulaires affichant la répartition des catégories pour les scores de
suicide et les catégories dépressives. Chaque graphique présente une vue
visuelle de la répartition des différentes catégories en pourcentage par
rapport à l’ensemble des observations. Le premier graphique présente la
répartition des catégories de score de suicide (noté de 0 à 5 avec un
score élevé de suicide, tandis que le second montre la répartition des
catégories dépressives (0 pour absence de depression et 1 pour sa
presence). Les légendes adjacentes aux graphiques fournissent des
explications sur chaque couleur utilisée et les catégories qu’elles
représentent. Les titres des graphiques indiquent clairement le type de
données présenté dans chaque graphique circulaire.
Interpretation Ce graphique met en évidence la
relation entre la recherche de sensation et l’âge des détenus. On
observe ici que, globalement, la distribution en âge est légèrement
supérieure quand on a un faible niveau de sensation, plutôt que quand on
a un niveau de sensation élevé. Ce qui montre que les détenus plus
jeunes ont tendance à rechercher plus de sensations que les détenus plus
âgés. Cette visualisation permet de comprendre comment l’âge des détenus
peut influencer leur comportement en matière de recherche de sensation.
Cette observation pourrait être utile pour comprendre comment les
facteurs individuels peuvent influencer la santé mentale en milieu
carcéral.
Interprétation : Ce graphique met en évidence la
durée d’entretien avec les détenus et la dependance à l’alcool des
détenus. Il montre que les detenus dependant de l’alcool ont passé
legerement plus de temps que les autres.
Interprétation : Ce graphique met en évidence la
relation entre la séparation de la famille à l’enfance et la taille de
la fratrie des détenus. Il montre qu’il y a une variation dans la
séparation de la famille en fonction de la taille de la fratrie.On
remarque que les détenus séparés de leurs famille on en moyenne
legerement plus de freres et soeurs que les detunus qui n’etaient pas
séparés de leurs famille. Cette visualisation permet d’identifier un ce
lien entre la séparation de la famille à l’enfance et la taille de la
fratrie des détenus. Cette observation implique nous incite à comprendre
comment ces facteurs familiaux pourraient influencer la santé mentale en
milieu carcéral.
TESTS STATISTIQUES
COMPARAISON DE DEUX POURCENTAGES : Test du Khi2
Nous allons tester si la prévalence de la dépression est plus élevé
chez les detenus qui sont addicts à l’alcool ou pas.
| 0 |
64.15385 |
35.84615 |
| 1 |
43.62416 |
56.37584 |
On remarque que près de 35% de detenus dépressifs ne sont pas addicts
à l’alcool alors que ce pourcentage est quasiment le double, près de 56%
des detenus dépressifs sont addicte à l’alcool, ce qui montre que les
détenus dépressifs passent leur temps à se saouler. Mais testons cela
:
La p-value égale à 3.835e-06 ce qui est bien inférieur à 0.05, on
peut affirmer avec certitude que le hasard lui seul ne peut pas
expliquer cette différence de prévalence de dépression.
COMPARAISON DE DEUX MOYENNES : test de student
Conditions de validité . On a au moins 30
observations par groupe à comparer,
On remarque que la variable “durée d’entretien” suis une distribution
approximativement normale car après verification de son histogramme on
remarque une allure gaussienne avec une courbe en cloche. Nous pouvons
également le constater graphiquement avec un Q-Q plot.
. On verifie si la variance de la durée de l’entretien par
chaque groupe de presence ou non de dépression auprès des détenus.
## smp$dep.cons: 0
## [1] 19.05787
## ------------------------------------------------------------
## smp$dep.cons: 1
## [1] 19.74464
L’écart type entre de la durée d’entretien des détenus depressifs est
de 19.74 et celui des détenus non dépressif est de 19.06 ce qui est
approximativement égaux, la seconde condition aussi est vérifiée , on
procède alors au test de student.
##
## Two Sample t-test
##
## data: smp$dur.interv by smp$dep.cons
## t = -5.2583, df = 747, p-value = 1.9e-07
## alternative hypothesis: true difference in means between group 0 and group 1 is not equal to 0
## 95 percent confidence interval:
## -10.457001 -4.771515
## sample estimates:
## mean in group 0 mean in group 1
## 58.92341 66.53767
Comme résultat, nous avons tout d’abord le p égal à 1.9e-07, on
constate que le p est largement inférieur à 0,05, on peut donc dire
qu’il existe une différence statistiquement significative de durée
d’entretien entre les détenus qui sont dépressifs et les détenus qui ne
le sont pas.
TEST DE NULLITÉ DE CORRÉLATIONS : Approche de Pearson’
. La distribution de la variable durée de l’enquête suis une
loi normale. Nous allons donc tester à 0 cette corrélation entre la
durée de l’enquete et le score de comportement suicidaire.
##
## Pearson's product-moment correlation
##
## data: smp$dur.interv and smp$suicide.s
## t = 5.5111, df = 708, p-value = 4.998e-08
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.1311935 0.2723295
## sample estimates:
## cor
## 0.2028146
On a d’abord le p qui ici est extrêmement faible, inférieur à 10-7.
La corrélation est donc très significativement non nulle, la corrélation
est 0,202. Il y a bien une corrélation positive entre la durée de
l’entretien et le score de rique de suicide. On sait que la corrélation
de 0,22 que l’on a observée est celle qui a été observée dans
l’échantillon des 799 détenus. Alors “quelle est la valeur possible de
la corrélation entre la durée de l’enquête ou de l’entretien et score de
risque suicidaires, non pas dans cet échantillon mais dans l’ensemble de
la population totale des détenus ?” Eh bien, il y 95 chances sur 100 que
cette corrélation soit comprise entre 0,1311935 & 0,2723295.
ANALYSE MULTIVARIÉE : ANALYSE DE CORRESONDANCE MULTIPLE (ACM)
Nous allons faire ici une Analyse des Correspondances Multiples (ACM)
car c’est une méthode multidimensionnelle puissante et flexible, idéale
pour explorer les relations complexes au sein de données comprenant des
variables de divers types. Cette approche est particulièrement adaptée à
notre projet pour étudier les associations entre nos variables, qui sont
hétérogènes, telles que des variables catégorielles, ordinales, binaire
et quantitatives, et nos individus sont anonymes. Grâce à sa capacité à
gérer ces différentes natures de données, l’ACM ici va nous offrir une
vision holistique et approfondie des interrelations entre les
caractéristiques multiples de notre base de données , ouvrant ainsi la
voie à une compréhension plus approfondie de ses structures
sous-jacentes.
## age_18_38 age_38_58 age_58_plus temps_0_40 temps_40_80 temps_80_120 dep.cons
## 0:372 0:498 0:728 0:674 0:255 0:669 0:482
## 1:427 1:301 1: 71 1:125 1:544 1:130 1:317
##
##
##
##
##
## scz.cons ptsd.cons subst.cons ecole suicide.hr alc.cons suicide.past
## Absence :733 0:626 0:587 1:343 0:639 0:650 0:574
## Presence: 66 1:173 1:212 2:303 1:160 1:149 1:225
## 3: 90
## 4: 45
## 5: 18
##
##
## prof profagriculteur profartisan profautre profcadre
## ouvrier :233 0:793 0:709 0:768 0:775
## sans emploi :222 1: 6 1: 90 1: 31 1: 24
## employe :135
## artisan : 90
## prof.intermediaire: 58
## autre : 31
## (Other) : 30
## profemploye profouvrier profprof.intermediaire profsans.emploi rs ed
## 0:664 0:566 0:741 0:577 1:279 1:358
## 1:135 1:233 1: 58 1:222 2:175 2:180
## 3:345 3:261
##
##
##
##
## ago.cons dr separation juge.enfant place abus duree discip
## 0:666 1:221 0:461 0:576 0:617 0:578 1: 6 0:615
## 1:133 2:233 1:338 1:223 1:182 1:221 2: 54 1:184
## 3:345 3:108
## 4:247
## 5:384
##
##
## char grav.cons suicide.s n.enfant n.fratrie
## 1:542 1:106 0:561 Min. : 0.000 Min. : 0.000
## 2:134 2:132 1: 71 1st Qu.: 0.000 1st Qu.: 2.000
## 3: 86 3:114 2: 36 Median : 1.000 Median : 3.000
## 4: 37 4:163 3: 54 Mean : 1.741 Mean : 4.287
## 5:183 4: 53 3rd Qu.: 3.000 3rd Qu.: 6.000
## 6: 81 5: 24 Max. :13.000 Max. :21.000
## 7: 20
CHOIX DES DIMENSIONS
Nous allons ici faire un arbitrage concernant le choix des
dimensions. Il est en effet essentiel de recourir à un arbitrage
concernant les dimensions afin d’avoir matière à tenter d’expliquer au
mieux d’expliquer l’information. Pour ce faire nous allons respecter la
loi de coude, qui consiste à repérer l’endroit à partir
duquel le pourcentage d’inertie diminue beaucoup plus lentement lorsque
l’on parcourt le diagramme des éboulis de gauche à droite formant un
coude. Nous décidons, compte tenu des résultats de l’ACM de garder 5
dimensions principales Ce qui va permettre d’expliquer 33% de
l’information; Aussi Factominer nous limite à cinq dimensions pour l’ACM
:
ANALYSE GRAPHIQUE
Dans notre analyse de graphe des correspondances multiples (ACM),
l’axe 1 démontre un Effet Gutmann révélateur d’une progression monotone
des catégories professionnelles. En projetant ces catégories sur l’axe 1
de l’ACM, une structure linéaire nominale émerge, avec une séquence
s’étendant des professions les plus à gauche vers la catégorie des
agriculteurs à droite. L’axe 2 quant à lui met en évidence une
opposition entre les extrêmes de la durée d’entrevue.
On observe une dissemblance entre les groupes d’individus selon les
tranches d’âge, entre 38 et 58 ans (âge_38_58_1) localisés dans la
partie supérieure gauche, et ceux entre 18 et 38 ans (âge_18_38_1)
situés dans la partie inférieure droite.
Les individus positionnés dans le quadrant supérieur droit, tels que
les détenus 242, 130 et 616, présentent un profil associé à un risque
élevé de suicide, des troubles de personnalité ou de comportement, ainsi
qu’à des diagnostics sévères incluant des pathologies graves et des
troubles post-traumatiques. Ces détenus semblent souffrir de dépression
et montrent des comportements addictifs envers l’alcool et les
substances. De plus, ils ont généralement passé plus de temps en
entrevue que la moyenne.
Une opposition semble également se dessiner sur la deuxième dimension
entre les individus à haut risque suicidaire et ceux ayant un niveau
élevé de scolarisation.
La zone inférieure gauche, quant à elle, englobe des détenus non
dépressifs ni agoraphobes, sans risque suicidaire apparent. Ils ont un
niveau élevé d’éducation et ont passé moins de temps en entrevue que la
moyenne, tels que les détenus 182, 304, 453 et 563.
Le graphique des individus (Dim1, Dim2) ne présente pas de tendance
spécifique ou particulière, n’obéissant à aucune loi de moindre carré,
et reste uniformément réparti dans sa distribution, nos observations
sont anonymes.
On observe clairement pour les variables binaire un regroupement des
modalités « Oui/Presence(1) » vers le au dessus de la deuxième
bissectrice d’un côté et des modalités « Non/Absense(0) » Ils prennent
donc des valeurs plus élevées que la moyenne sur la partie supérieure de
la première dimension.
Ce graphique ne révèle pas de détails précis, bien qu’il soit
caractérisé par une certaine hétérogénéité. Cependant, une association
notable se dessine entre un niveau d’éducation bas (école_1, représenté
en noir) et une durée d’entrevue prolongée. En revanche, une durée
d’entretien plus courte semble être davantage associée à des niveaux
d’éducation moyens à élevés (école_3, école_4 et école_5).
Ces derniers graphiques ne font que renforcer la conclusion selon
laquelle les variables diagnostiques sont associées à une durée
d’entrevue prolongée. Une concentration notable de ces diagnostics est
observée dans la partie supérieure droite de ces graphiques.
Il est observé une corrélation marquée entre la catégorie de la durée
moyenne des entretiens (entre 40 et 80 minutes - variable “temps_40_80”)
des détenus et la troisième dimension. De même, la variable profession
(prof) est associée à la quatrième dimension.
Le graphique des individus (Dim3 & Dim 4) montre une
particularité de chaque côté de l’axe 2. Les individus dans la partie
supérieure gauche de l’axe vertical ont en général un niveau d’éducation
moyen et sont principalement des cadres ou des professionnels
intermédiaires, souvent jeunes. En revanche, ceux situés dans la partie
supérieure droite, bien qu’âgés, affichent un niveau d’éducation élevé.
Les individus en bas sont majoritairement des ouvriers ou des personnes
sans emploi, et présentent quelques diagnostics spécifiques.
CONCLUSION
Rappelons dans un premier temps les hypothèses que nous avions
formulées :
1.Hypothèse sur le niveau de scolarisation
2.Hypothèse surl’influence de la profession du détenu
3.Hypothèse sur l’effet de l’âge du détenu
4.Hypothèse sur les variables diagnostiques
5. Hypothese sur les variables de risque suicidaire
Concernant l’hypothèse H1, l’analyse graphique des individus et des
variables démontre clairement qu’un niveau de scolarisation élevé est
associé à une durée d’interview plus courte, surtout chez les individus
avec un niveau de solarisation élevé. Ceci confirme l’hypothèse H1 en
mettant en évidence que le niveau élevé de scolarisation, indépendamment
des autres variables, favorise une durée d’interview réduite.
Quant à l’hypothèse H2 sur l’impact de la profession du détenu sur la
durée de l’entretien, certaines professions telles que cadre ou
professionnel intermédiaire semblent liées à des entretiens plus courts.
Cependant, il est pertinent de noter que la variable profession est
étroitement liée au niveau d’éducation. Bien que des cadres aient un
niveau d’éducation élevé et passent moins de temps en interview, cette
corrélation n’est pas systématique pour toutes les professions. Ainsi,
l’hypothèse H2 n’est pas retenue.
Concernant l’hypothèse H3, indiquant que l’âge du détenu influence
positivement la durée de l’entretien, les individus plus jeunes passent
légèrement moins de temps que les personnes âgées. Par conséquent,
l’hypothèse H3 est retenue.
L’hypothèse H4 est soutenue par des données graphiques montrant une
association positive entre les diagnostics tels que la dépression, la
dépendance à l’alcool et la schizophrénie, et une durée d’entretien
prolongée. Ainsi, l’hypothèse H4 est confirmée.
En ce qui concerne l’hypothèse H5, les graphiques indiquent
clairement que les détenus avec des antécédents de tentative de suicide
ou présentant un haut risque suicidaire ont passé plus de temps que la
moyenne en entretien, validant ainsi l’hypothèse H5.
Par ailleurs, nos analyses statistiques et graphiques ont mis en
lumière des schémas spécifiques concernant les détenus séparés de leur
famille, bénéficiaires de l’aide d’un juge pour enfant, sans emploi et
d’un certain groupe d’âge. Ceux qui n’ont pas été séparés de leur
famille ni aidés par un juge pour enfant ont un niveau d’études plus
élevé, sont plus âgés et occupent des postes de cadre ou de
professionnel intermédiaire.
En conclusion, nous avons confirmé quatre hypothèses sur cinq (H1,
H3, H4, H5), confirmant en grande partie nos hypothèses sur les facteurs
influençant la durée des entretiens en milieu carcéral. L’Analyse des
Correspondances Multiples (ACM) a permis de mieux comprendre la base de
données et de mettre en lumière des résultats initialement moins
évidents. Notre étude a des limites. D’autres paramètres pourraient ne
pas être pris en compte ; par exemple en changeant les variables et les
individus supplémentaire ou en utilisant d’autre méthode d’analyse.
##
## Call:
## MCA(X = smp.c, quanti.sup = 37:38, quali.sup = 16:36)
##
##
## Eigenvalues
## Dim.1 Dim.2 Dim.3 Dim.4 Dim.5 Dim.6 Dim.7
## Variance 0.172 0.135 0.122 0.096 0.085 0.083 0.076
## % of var. 10.765 8.419 7.626 5.992 5.327 5.191 4.775
## Cumulative % of var. 10.765 19.184 26.810 32.802 38.129 43.321 48.095
## Dim.8 Dim.9 Dim.10 Dim.11 Dim.12 Dim.13 Dim.14
## Variance 0.072 0.071 0.068 0.066 0.066 0.062 0.061
## % of var. 4.495 4.440 4.243 4.139 4.112 3.894 3.820
## Cumulative % of var. 52.590 57.030 61.273 65.412 69.524 73.418 77.238
## Dim.15 Dim.16 Dim.17 Dim.18 Dim.19 Dim.20 Dim.21
## Variance 0.058 0.055 0.051 0.050 0.046 0.039 0.033
## % of var. 3.636 3.428 3.166 3.116 2.877 2.456 2.083
## Cumulative % of var. 80.874 84.301 87.467 90.583 93.460 95.916 97.999
## Dim.22 Dim.23 Dim.24
## Variance 0.032 0.000 0.000
## % of var. 2.001 0.000 0.000
## Cumulative % of var. 100.000 100.000 100.000
##
## Individuals (the 10 first)
## Dim.1 ctr cos2 Dim.2 ctr cos2 Dim.3 ctr
## 1 | -0.089 0.006 0.003 | -0.811 0.612 0.262 | 0.344 0.122
## 2 | -0.438 0.140 0.286 | 0.142 0.019 0.030 | -0.169 0.029
## 3 | -0.590 0.253 0.256 | 0.144 0.019 0.015 | -0.168 0.029
## 4 | -0.299 0.065 0.082 | 0.191 0.034 0.034 | 0.591 0.358
## 5 | 0.258 0.048 0.054 | -0.292 0.079 0.069 | 0.352 0.127
## 6 | -0.045 0.001 0.004 | -0.307 0.088 0.162 | -0.290 0.086
## 7 | 0.802 0.467 0.207 | 0.017 0.000 0.000 | 0.491 0.247
## 8 | -0.495 0.178 0.166 | 0.226 0.047 0.035 | 0.588 0.354
## 9 | 0.510 0.189 0.169 | 0.672 0.419 0.293 | -0.052 0.003
## 10 | -0.240 0.042 0.061 | 0.158 0.023 0.026 | -0.127 0.016
## cos2
## 1 0.047 |
## 2 0.042 |
## 3 0.021 |
## 4 0.319 |
## 5 0.101 |
## 6 0.144 |
## 7 0.078 |
## 8 0.234 |
## 9 0.002 |
## 10 0.017 |
##
## Categories (the 10 first)
## Dim.1 ctr cos2 v.test Dim.2 ctr cos2
## age_18_38_0 | -0.723 9.430 0.456 -19.073 | 0.631 9.186 0.347
## age_18_38_1 | 0.630 8.215 0.456 19.073 | -0.550 8.003 0.347
## age_38_58_0 | 0.412 4.091 0.281 14.963 | -0.487 7.305 0.392
## age_38_58_1 | -0.681 6.768 0.281 -14.963 | 0.805 12.086 0.392
## age_58_plus_0 | 0.088 0.273 0.079 7.954 | 0.010 0.005 0.001
## age_58_plus_1 | -0.902 2.796 0.079 -7.954 | -0.105 0.049 0.001
## temps_0_40_0 | 0.061 0.122 0.020 4.009 | 0.193 1.552 0.200
## temps_0_40_1 | -0.330 0.658 0.020 -4.009 | -1.040 8.369 0.200
## temps_40_80_0 | 0.097 0.117 0.004 1.878 | -0.263 1.092 0.032
## temps_40_80_1 | -0.046 0.055 0.004 -1.878 | 0.123 0.512 0.032
## v.test Dim.3 ctr cos2 v.test
## age_18_38_0 16.648 | 0.160 0.648 0.022 4.210 |
## age_18_38_1 -16.648 | -0.139 0.565 0.022 -4.210 |
## age_38_58_0 -17.682 | -0.126 0.543 0.026 -4.587 |
## age_38_58_1 17.682 | 0.209 0.898 0.026 4.587 |
## age_58_plus_0 0.927 | 0.005 0.001 0.000 0.431 |
## age_58_plus_1 -0.927 | -0.049 0.012 0.000 -0.431 |
## temps_0_40_0 12.648 | -0.233 2.498 0.292 -15.271 |
## temps_0_40_1 -12.648 | 1.255 13.468 0.292 15.271 |
## temps_40_80_0 -5.086 | 1.418 35.054 0.942 27.422 |
## temps_40_80_1 5.086 | -0.665 16.431 0.942 -27.422 |
##
## Categorical variables (eta2)
## Dim.1 Dim.2 Dim.3
## age_18_38 | 0.456 0.347 0.022 |
## age_38_58 | 0.281 0.392 0.026 |
## age_58_plus | 0.079 0.001 0.000 |
## temps_0_40 | 0.020 0.200 0.292 |
## temps_40_80 | 0.004 0.032 0.942 |
## temps_80_120 | 0.050 0.046 0.482 |
## dep.cons | 0.207 0.194 0.002 |
## scz.cons | 0.034 0.059 0.001 |
## ptsd.cons | 0.046 0.105 0.003 |
## subst.cons | 0.362 0.040 0.000 |
##
## Supplementary categories (the 10 first)
## Dim.1 cos2 v.test Dim.2 cos2 v.test Dim.3 cos2
## profagriculteur_0 | -0.003 0.001 -0.824 | 0.001 0.000 0.369 | -0.001 0.000
## profagriculteur_1 | 0.335 0.001 0.824 | -0.150 0.000 -0.369 | 0.104 0.000
## profartisan_0 | 0.110 0.096 8.746 | -0.054 0.023 -4.253 | -0.010 0.001
## profartisan_1 | -0.869 0.096 -8.746 | 0.423 0.023 4.253 | 0.079 0.001
## profautre_0 | -0.004 0.000 -0.507 | 0.044 0.047 6.154 | 0.007 0.001
## profautre_1 | 0.089 0.000 0.507 | -1.084 0.047 -6.154 | -0.184 0.001
## profcadre_0 | 0.043 0.060 6.923 | -0.006 0.001 -0.918 | -0.013 0.006
## profcadre_1 | -1.393 0.060 -6.923 | 0.185 0.001 0.918 | 0.424 0.006
## profemploye_0 | -0.008 0.000 -0.505 | 0.010 0.001 0.643 | -0.048 0.011
## profemploye_1 | 0.040 0.000 0.505 | -0.050 0.001 -0.643 | 0.237 0.011
## v.test
## profagriculteur_0 -0.256 |
## profagriculteur_1 0.256 |
## profartisan_0 -0.798 |
## profartisan_1 0.798 |
## profautre_0 1.045 |
## profautre_1 -1.045 |
## profcadre_0 -2.106 |
## profcadre_1 2.106 |
## profemploye_0 -3.020 |
## profemploye_1 3.020 |
##
## Supplementary categorical variables (eta2)
## Dim.1 Dim.2 Dim.3
## profagriculteur | 0.001 0.000 0.000 |
## profartisan | 0.096 0.023 0.001 |
## profautre | 0.000 0.047 0.001 |
## profcadre | 0.060 0.001 0.006 |
## profemploye | 0.000 0.001 0.011 |
## profouvrier | 0.022 0.010 0.003 |
## profprof.intermediaire | 0.040 0.002 0.001 |
## profsans.emploi | 0.062 0.017 0.036 |
## rs | 0.091 0.000 0.000 |
## ed | 0.049 0.059 0.009 |
##
## Supplementary continuous variables
## Dim.1 Dim.2 Dim.3
## n.enfant | -0.272 | 0.239 | 0.015 |
## n.fratrie | 0.156 | 0.127 | -0.020 |
|
| |
| |
| Dim.1 |
-0.272 |
0.156 |
|
| |
| |
| Dim.2 |
0.239 |
0.127 |
|
| |
| |
| Dim.3 |
0.015 |
-0.020 |
|
| |
| |
| dim 1 |
0.17 |
10.76 |
10.76 |
| dim 2 |
0.13 |
8.42 |
19.18 |
| dim 3 |
0.12 |
7.63 |
26.81 |
| dim 4 |
0.10 |
5.99 |
32.80 |
| dim 5 |
0.09 |
5.33 |
38.13 |
| dim 6 |
0.08 |
5.19 |
43.32 |
| dim 7 |
0.08 |
4.77 |
48.10 |
| dim 8 |
0.07 |
4.49 |
52.59 |
| dim 9 |
0.07 |
4.44 |
57.03 |
| dim 10 |
0.07 |
4.24 |
61.27 |
| dim 11 |
0.07 |
4.14 |
65.41 |
| dim 12 |
0.07 |
4.11 |
69.52 |
| dim 13 |
0.06 |
3.89 |
73.42 |
| dim 14 |
0.06 |
3.82 |
77.24 |
| dim 15 |
0.06 |
3.64 |
80.87 |
| dim 16 |
0.05 |
3.43 |
84.30 |
| dim 17 |
0.05 |
3.17 |
87.47 |
| dim 18 |
0.05 |
3.12 |
90.58 |
| dim 19 |
0.05 |
2.88 |
93.46 |
| dim 20 |
0.04 |
2.46 |
95.92 |
| dim 21 |
0.03 |
2.08 |
98.00 |
| dim 22 |
0.03 |
2.00 |
100.00 |
| dim 23 |
0.00 |
0.00 |
100.00 |
| dim 24 |
0.00 |
0.00 |
100.00 |
## $`Dim 1`
##
## Link between the variable and the continuous variables (R-square)
## =================================================================================
## correlation p.value
## n.fratrie 0.1559605 9.480393e-06
## n.enfant -0.2720996 4.978908e-15
##
## Link between the variable and the categorical variable (1-way anova)
## =============================================
## R2 p.value
## age_18_38 0.45584500 2.025282e-107
## subst.cons 0.36171826 9.297907e-80
## suicide.hr 0.28625837 2.277455e-60
## suicide.s 0.30009883 3.569032e-59
## age_38_58 0.28055274 5.492523e-59
## alc.cons 0.23162210 1.473952e-47
## prof 0.24173816 8.157261e-44
## dep.cons 0.20743406 3.599070e-42
## grav.cons 0.22757642 1.622220e-41
## suicide.past 0.17166517 1.722701e-34
## char 0.17432055 8.097041e-33
## juge.enfant 0.14386002 9.727947e-29
## duree 0.13057729 3.959636e-23
## ecole 0.11293004 1.001050e-19
## profartisan 0.09585254 3.285771e-19
## rs 0.09137780 2.732567e-17
## age_58_plus 0.07928522 5.003092e-16
## profsans.emploi 0.06170961 1.057776e-12
## profcadre 0.06005659 2.161216e-12
## place 0.05777227 5.792678e-12
## ago.cons 0.05312648 4.281240e-11
## temps_80_120 0.05003007 1.618328e-10
## ptsd.cons 0.04559809 1.080960e-09
## discip 0.04552191 1.116781e-09
## ed 0.04912719 1.962124e-09
## profprof.intermediaire 0.03972224 1.331800e-08
## scz.cons 0.03425665 1.370679e-07
## abus 0.03289352 2.450742e-07
## separation 0.02415490 1.018941e-05
## dr 0.02665818 2.136104e-05
## profouvrier 0.02203182 2.526376e-05
## temps_0_40 0.02014483 5.671806e-05
##
## Link between variable and the categories of the categorical variables
## ================================================================
## Estimate p.value
## age_18_38=age_18_38_1 0.28086563 2.025282e-107
## subst.cons=subst.cons_1 0.28266605 9.297907e-80
## suicide.hr=suicide.hr_1 0.27742404 2.277455e-60
## age_38_58=age_38_58_0 0.22682177 5.492523e-59
## alc.cons=alc.cons_1 0.25639857 1.473952e-47
## dep.cons=dep.cons_1 0.19318006 3.599070e-42
## suicide.past=suicide.past_1 0.19114780 1.722701e-34
## juge.enfant=juge.enfant_1 0.17546148 9.727947e-29
## profartisan=profartisan_0 0.20320427 3.285771e-19
## suicide.s=suicide.s_4 0.19378573 1.993786e-18
## rs=rs_3 0.16161435 8.441900e-18
## age_58_plus=age_58_plus_0 0.20534147 5.003092e-16
## suicide.s=suicide.s_5 0.37259666 2.023424e-15
## grav.cons=grav.cons_6 0.28544077 6.236226e-15
## char=char_3 0.12112327 9.781550e-14
## profsans.emploi=profsans.emploi_1 0.11507671 1.057776e-12
## prof=sans emploi 0.26361372 1.057776e-12
## profcadre=profcadre_0 0.29791973 2.161216e-12
## place=place_1 0.11892054 5.792678e-12
## duree=duree_3 0.11077960 6.166771e-12
## ago.cons=ago.cons_1 0.12840088 4.281240e-11
## temps_80_120=temps_80_120_1 0.12574949 1.618328e-10
## char=char_4 0.23194658 1.731155e-10
## ed=ed_3 0.13316722 3.690174e-10
## suicide.s=suicide.s_3 0.05888734 4.296302e-10
## ptsd.cons=ptsd.cons_1 0.10758172 1.080960e-09
## discip=discip_1 0.10515724 1.116781e-09
## grav.cons=grav.cons_5 0.10623842 5.286868e-09
## profprof.intermediaire=profprof.intermediaire_0 0.15939298 1.331800e-08
## scz.cons=Presence 0.13951596 1.370679e-07
## ecole=ecole_1 0.22098400 1.759974e-07
## abus=abus_1 0.08413381 2.450742e-07
## grav.cons=grav.cons_7 0.35398492 9.663111e-06
## separation=separation_1 0.06527835 1.018941e-05
## profouvrier=profouvrier_1 0.06776641 2.526376e-05
## prof=ouvrier 0.19341729 2.526376e-05
## temps_0_40=temps_0_40_0 0.08107226 5.671806e-05
## duree=duree_2 0.07493621 6.974338e-05
## dr=dr_3 0.04939646 1.023877e-02
## ecole=ecole_2 0.17323730 3.299286e-02
## duree=duree_4 -0.09164641 2.390283e-02
## rs=rs_2 -0.05070691 1.077931e-02
## suicide.s=suicide.s_1 -0.13789806 2.854919e-03
## suicide.s=suicide.s_2 -0.07375139 2.484688e-03
## ed=ed_2 -0.08369567 1.523873e-03
## ed=ed_1 -0.04947155 1.406768e-03
## temps_0_40=temps_0_40_1 -0.08107226 5.671806e-05
## char=char_2 -0.05302013 3.142284e-05
## profouvrier=profouvrier_0 -0.06776641 2.526376e-05
## separation=separation_0 -0.06527835 1.018941e-05
## dr=dr_2 -0.09943636 3.499574e-06
## abus=abus_0 -0.08413381 2.450742e-07
## scz.cons=Absence -0.13951596 1.370679e-07
## profprof.intermediaire=profprof.intermediaire_1 -0.15939298 1.331800e-08
## prof=prof.intermediaire -0.19823724 1.331800e-08
## ecole=ecole_3 -0.11379492 1.423065e-09
## discip=discip_0 -0.10515724 1.116781e-09
## ptsd.cons=ptsd.cons_0 -0.10758172 1.080960e-09
## ecole=ecole_4 -0.24403014 2.208873e-10
## temps_80_120=temps_80_120_0 -0.12574949 1.618328e-10
## ago.cons=ago.cons_0 -0.12840088 4.281240e-11
## rs=rs_1 -0.11090744 3.900074e-11
## grav.cons=grav.cons_2 -0.26692847 2.613915e-11
## place=place_0 -0.11892054 5.792678e-12
## profcadre=profcadre_1 -0.29791973 2.161216e-12
## prof=cadre -0.48053409 2.161216e-12
## profsans.emploi=profsans.emploi_0 -0.11507671 1.057776e-12
## grav.cons=grav.cons_1 -0.32000482 2.612416e-13
## age_58_plus=age_58_plus_1 -0.20534147 5.003092e-16
## profartisan=profartisan_1 -0.20320427 3.285771e-19
## prof=artisan -0.26322255 3.285771e-19
## duree=duree_5 -0.27948205 1.535225e-20
## juge.enfant=juge.enfant_0 -0.17546148 9.727947e-29
## char=char_1 -0.30004972 2.153700e-30
## suicide.past=suicide.past_0 -0.19114780 1.722701e-34
## dep.cons=dep.cons_0 -0.19318006 3.599070e-42
## alc.cons=alc.cons_0 -0.25639857 1.473952e-47
## suicide.s=suicide.s_0 -0.41362028 3.413853e-52
## age_38_58=age_38_58_1 -0.22682177 5.492523e-59
## suicide.hr=suicide.hr_0 -0.27742404 2.277455e-60
## subst.cons=subst.cons_0 -0.28266605 9.297907e-80
## age_18_38=age_18_38_0 -0.28086563 2.025282e-107
##
## $`Dim 2`
##
## Link between the variable and the continuous variables (R-square)
## =================================================================================
## correlation p.value
## n.enfant 0.2388004 7.992501e-12
## n.fratrie 0.1270680 3.172856e-04
##
## Link between the variable and the categorical variable (1-way anova)
## =============================================
## R2 p.value
## age_38_58 0.391806726 3.928998e-88
## age_18_38 0.347317177 6.894713e-76
## suicide.hr 0.239144220 2.877507e-49
## suicide.past 0.235558957 1.887387e-48
## temps_0_40 0.200476634 1.191568e-40
## dep.cons 0.194286018 2.616477e-39
## suicide.s 0.209451466 1.959927e-38
## grav.cons 0.148465309 4.107419e-25
## ptsd.cons 0.105372233 4.620606e-21
## prof 0.087990207 3.511706e-13
## scz.cons 0.058552927 4.136482e-12
## ed 0.058601484 3.646336e-11
## profautre 0.047460273 4.869966e-10
## temps_80_120 0.045504879 1.124951e-09
## ago.cons 0.042435859 4.179303e-09
## char 0.050659676 5.494836e-09
## subst.cons 0.039691422 1.349437e-08
## temps_40_80 0.032411366 3.009927e-07
## ecole 0.040331750 1.357798e-06
## duree 0.040132668 1.467494e-06
## profartisan 0.022667617 1.924531e-05
## profsans.emploi 0.016549645 2.665265e-04
## profouvrier 0.009503326 5.818725e-03
## abus 0.007790298 1.256554e-02
## discip 0.005406301 3.771559e-02
##
## Link between variable and the categories of the categorical variables
## ================================================================
## Estimate p.value
## age_38_58=age_38_58_1 0.237056545 3.928998e-88
## age_18_38=age_18_38_0 0.216816160 6.894713e-76
## suicide.hr=suicide.hr_1 0.224250515 2.877507e-49
## suicide.past=suicide.past_1 0.198023408 1.887387e-48
## temps_0_40=temps_0_40_0 0.226183464 1.191568e-40
## dep.cons=dep.cons_1 0.165341376 2.616477e-39
## ptsd.cons=ptsd.cons_1 0.144632801 4.620606e-21
## suicide.s=suicide.s_4 0.151272469 1.534478e-13
## scz.cons=Presence 0.161311109 4.136482e-12
## grav.cons=grav.cons_5 0.132142117 7.107254e-11
## grav.cons=grav.cons_6 0.221155136 2.267380e-10
## profautre=profautre_0 0.207022517 4.869966e-10
## temps_80_120=temps_80_120_1 0.106061599 1.124951e-09
## suicide.s=suicide.s_3 0.083412159 2.037870e-09
## ago.cons=ago.cons_1 0.101488653 4.179303e-09
## subst.cons=subst.cons_0 0.082808568 1.349437e-08
## ed=ed_3 0.085315116 3.924094e-08
## duree=duree_5 0.152341638 2.108555e-07
## temps_40_80=temps_40_80_1 0.070874997 3.009927e-07
## suicide.s=suicide.s_5 0.146745209 1.885076e-06
## suicide.s=suicide.s_2 0.056361500 1.321111e-05
## profartisan=profartisan_1 0.087392162 1.924531e-05
## prof=artisan 0.181219483 1.924531e-05
## char=char_4 0.124598550 2.364663e-04
## profsans.emploi=profsans.emploi_0 0.052704036 2.665265e-04
## char=char_3 0.038316007 5.034038e-04
## profouvrier=profouvrier_1 0.039360950 5.818725e-03
## prof=ouvrier 0.081888457 5.818725e-03
## abus=abus_1 0.036210198 1.256554e-02
## ecole=ecole_4 0.183021045 1.660673e-02
## grav.cons=grav.cons_7 0.160166619 2.510549e-02
## ecole=ecole_1 0.087407170 3.444583e-02
## discip=discip_0 0.032049227 3.771559e-02
## discip=discip_1 -0.032049227 3.771559e-02
## abus=abus_0 -0.036210198 1.256554e-02
## char=char_2 -0.017933378 1.098607e-02
## duree=duree_3 -0.003242395 8.782443e-03
## profouvrier=profouvrier_0 -0.039360950 5.818725e-03
## duree=duree_2 -0.058368921 3.392180e-03
## ecole=ecole_3 -0.075320603 3.118330e-04
## ecole=ecole_5 -0.253391308 2.905538e-04
## profsans.emploi=profsans.emploi_1 -0.052704036 2.665265e-04
## prof=sans emploi -0.049997717 2.665265e-04
## grav.cons=grav.cons_3 -0.147269684 7.185822e-05
## grav.cons=grav.cons_2 -0.140247810 4.330734e-05
## profartisan=profartisan_0 -0.087392162 1.924531e-05
## grav.cons=grav.cons_1 -0.171678508 5.344731e-06
## temps_40_80=temps_40_80_0 -0.070874997 3.009927e-07
## subst.cons=subst.cons_1 -0.082808568 1.349437e-08
## ago.cons=ago.cons_0 -0.101488653 4.179303e-09
## char=char_1 -0.144981179 1.492698e-09
## temps_80_120=temps_80_120_0 -0.106061599 1.124951e-09
## profautre=profautre_1 -0.207022517 4.869966e-10
## prof=autre -0.371857703 4.869966e-10
## ed=ed_1 -0.112012792 1.754195e-11
## scz.cons=Absence -0.161311109 4.136482e-12
## ptsd.cons=ptsd.cons_0 -0.144632801 4.620606e-21
## suicide.s=suicide.s_0 -0.304338384 3.041746e-36
## dep.cons=dep.cons_0 -0.165341376 2.616477e-39
## temps_0_40=temps_0_40_1 -0.226183464 1.191568e-40
## suicide.past=suicide.past_0 -0.198023408 1.887387e-48
## suicide.hr=suicide.hr_0 -0.224250515 2.877507e-49
## age_18_38=age_18_38_1 -0.216816160 6.894713e-76
## age_38_58=age_38_58_0 -0.237056545 3.928998e-88
##
## $`Dim 3`
##
## Link between the variable and the categorical variable (1-way anova)
## =============================================
## R2 p.value
## temps_40_80 0.942340221 0.000000e+00
## temps_80_120 0.481547812 8.329007e-116
## temps_0_40 0.292225599 7.943411e-62
## profsans.emploi 0.035767522 7.197353e-08
## age_38_58 0.026362443 3.969628e-06
## prof 0.045189332 5.363158e-06
## age_18_38 0.022208905 2.341946e-05
## profemploye 0.011429867 2.478599e-03
## alc.cons 0.007380412 1.513829e-02
## discip 0.005980267 2.883253e-02
## ed 0.008668096 3.127484e-02
## profcadre 0.005556072 3.515248e-02
##
## Link between variable and the categories of the categorical variables
## ================================================================
## Estimate p.value
## temps_40_80=temps_40_80_0 0.36372150 0.000000e+00
## temps_80_120=temps_80_120_1 0.32837465 8.329007e-116
## temps_0_40=temps_0_40_1 0.25990152 7.943411e-62
## profsans.emploi=profsans.emploi_0 0.07374196 7.197353e-08
## age_38_58=age_38_58_1 0.05852340 3.969628e-06
## age_18_38=age_18_38_0 0.05218105 2.341946e-05
## profemploye=profemploye_1 0.04983154 2.478599e-03
## prof=employe 0.06016130 2.478599e-03
## alc.cons=alc.cons_1 0.03852345 1.513829e-02
## discip=discip_0 0.03208104 2.883253e-02
## profcadre=profcadre_1 0.07627147 3.515248e-02
## prof=cadre 0.12529833 3.515248e-02
## grav.cons=grav.cons_3 0.05769101 3.536146e-02
## profcadre=profcadre_0 -0.07627147 3.515248e-02
## grav.cons=grav.cons_1 -0.07345289 3.296841e-02
## suicide.s=suicide.s_0 -0.05123283 3.237850e-02
## discip=discip_1 -0.03208104 2.883253e-02
## alc.cons=alc.cons_0 -0.03852345 1.513829e-02
## ed=ed_3 -0.04698804 1.140572e-02
## profemploye=profemploye_0 -0.04983154 2.478599e-03
## age_18_38=age_18_38_1 -0.05218105 2.341946e-05
## age_38_58=age_38_58_0 -0.05852340 3.969628e-06
## profsans.emploi=profsans.emploi_1 -0.07374196 7.197353e-08
## prof=sans emploi -0.12916850 7.197353e-08
## temps_0_40=temps_0_40_0 -0.25990152 7.943411e-62
## temps_80_120=temps_80_120_0 -0.32837465 8.329007e-116
## temps_40_80=temps_40_80_1 -0.36372150 0.000000e+00
LS0tDQp0aXRsZTogfCAgDQogIDxzcGFuIHN0eWxlPSJjb2xvcjpibHVlIj5TYW50w6kgbWVudGFsZSBlbiBwcmlzb248L3NwYW4+DQogICANCiAgIVtdKEM6L1VzZXJzL0RvdWFzL0Rlc2t0b3AvUHJvamV0L3NtcGlnLnBuZyl7c3R5bGU9ImRpc3BsYXk6IGJsb2NrOyBtYXJnaW46IDEwIGF1dG87IiB3aWR0aD01aW59DQogICFbXShDOi9Vc2Vycy9Eb3Vhcy9EZXNrdG9wL1Byb2pldC9sb2dvLnBuZyl7d2lkdGg9MS44aW59IA0Kc3VidGl0bGU6ICIgIg0KYXV0aG9yOiAiU0VNRUdMTyBBa29zc2l3YSBBaW3DqWUgRG9yY2FzIg0KcHJvZmVzc29yOiBCcnVubyBGYWxpc3NhcmQNCmRhdGU6ICIyMDI0LTA5LTI5Ig0Kb3V0cHV0OiANCiAgcm1kZm9ybWF0czo6cmVhZHRoZWRvd246DQogICAgaGlnaGxpZ2h0OiBrYXRlDQogICAgdGhlbWU6IGRhcmtseQ0KICAgIHdpZHRoOiA4MDANCiAgICB0b2NfZGVwdGg6IDMNCiAgICBtYXRoamF4OiBybWRmb3JtYXRzDQogICAgY3NzOiBzdHlsZS5jc3MNCiAgICBnYWxsZXJ5OiB0cnVlDQogICAgY29kZV9mb2xkaW5nOiBzaG93DQogICAgY29kZV9kb3dubG9hZDogdHJ1ZQ0KICAgIGxvZ286IGxvZ28ucG5nDQogICAgZGZfcHJpbnQ6IGthYmxlDQogIHdvcmRfZG9jdW1lbnQ6DQogICAgdG9jOiB5ZXMNCiAgYm9va2Rvd246OmdpdGJvb2s6DQogICAgY3NzOiBzdHlsZS5jc3MgICMgZmljaGllciBDU1MgcGVyc29ubmFsaXPDqQ0KICAgIHNwbGl0X2J5OiBzZWN0aW9uICAjIERpdmlzZSBsZSBsaXZyZSBwYXIgc2VjdGlvbg0KICAgIHNwbGl0X2JpYjogdHJ1ZSAgIyBEaXZpc2UgbGEgYmlibGlvZ3JhcGhpZSBwYXIgY2hhcGl0cmUNCiAgICBjb25maWc6DQogICAgICB0b2M6DQogICAgICAgIGNvbGxhcHNlOiBzZWN0aW9uICAjIFBsaWUgb3UgZMOpcGxpZSBsYSBUT0MgcGFyIHNlY3Rpb24NCiAgICAgICAgYmVmb3JlOiB8DQogICAgICAgICAgPGxpPjxhIGhyZWY9ImluZGV4Lmh0bWwiPkFjY3VlaWw8L2E+PC9saT4NCiAgICAgICAgYWZ0ZXI6IHwNCiAgICAgICAgICA8bGk+PGEgaHJlZj0iYWJvdXQuaHRtbCI+w4AgcHJvcG9zPC9hPjwvbGk+DQogICAgICBkb3dubG9hZDogWyJwZGYiLCAiZXB1YiIsICJtb2JpIl0gICMgQWpvdXRlIGRlcyBsaWVucyBwb3VyIHTDqWzDqWNoYXJnZXIgZW4gUERGLCBFUFVCLCBNT0JJDQogIGh0bWxfZG9jdW1lbnQ6DQogICAgY3NzOiBjdXN0b20uY3NzDQogICAgdG9jOiB5ZXMNCiAgICBkZl9wcmludDogcGFnZWQNCiAgcm1kZm9ybWF0czo6ZG93bmN1dGU6DQogICAgc2VsZl9jb250YWluZWQ6IHRydWUNCiAgICB0aHVtYm5haWxzOiB0cnVlDQogICAgbGlnaHRib3g6IHRydWUNCiAgICBnYWxsZXJ5OiBmYWxzZQ0KICAgIGhpZ2hsaWdodDogdGFuZ28NCiAgICB0b2NfZmxvYXQ6IHRydWUNCiAgICBjb2RlX2ZvbGRpbmc6IHNob3cNCiAgICBjb2RlX2Rvd25sb2FkOiBmYWxzZQ0KICAgIGxvZ286ICJodHRwczovL3VwbG9hZC53aWtpbWVkaWEub3JnL3dpa2lwZWRpYS9mci9iL2I5L1VuaXZlcnNpdCVDMyVBOV9kJTI3QW5nZXJzXyUyOGxvZ28lMjkuc3ZnIg0KICBybWRmb3JtYXRzOjptYXRlcmlhbDoNCiAgICBoaWdobGlnaHQ6IGVzcHJlc3NvICMgQ2hvaXNpciB1biBzdHlsZSBkZSBjb2xvcmF0aW9uIHN5bnRheGlxdWUNCiAgICBsaWdodGJveDogdHJ1ZSAjIEFjdGl2ZXIgbCdlZmZldCBkZSB6b29tIHN1ciBsZXMgaW1hZ2VzDQogICAgdGh1bWJuYWlsczogdHJ1ZSAjIEFmZmljaGVyIGxlcyBpbWFnZXMgc291cyBmb3JtZSBkZSB2aWduZXR0ZXMNCiAgICBnYWxsZXJ5OiBmYWxzZSAjIETDqXNhY3RpdmVyIGxhIGdhbGVyaWUgZCdpbWFnZXMNCiAgICBjYXJkczogdHJ1ZSAjIEFmZmljaGVyIGxlcyBzZWN0aW9ucyBzb3VzIGZvcm1lIGRlIGNhcnRlcw0KICAgIHVzZV9ib29rZG93bjogdHJ1ZSAjIFJlbmRyZSBsZSBkb2N1bWVudCBjb21wYXRpYmxlIGF2ZWMgYm9va2Rvd24NCiAgcGRmX2RvY3VtZW50Og0KICAgIHRvYzogeWVzDQogICAga2VlcF90ZXg6IHllcw0KICAgIG51bWJlcl9zZWN0aW9uOiB5ZXMNCmxhbmc6IGZyDQplZGl0b3Jfb3B0aW9uczoNCiAgDQogIGNodW5rX291dHB1dF90eXBlOiBjb25zb2xlDQotLS0NCi0tLS0tLS0NCg0KKipwcm9mZXNzb3I6KiogQnJ1bm8gRmFsaXNzYXJkDQoNCmBgYHtyIHNldHUsIGluY2x1ZGU9RkFMU0UsbWVzc2FnZT1GQUxTRSx3YXJuaW5nPUZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBGQUxTRSwgd2FybmluZyA9IEZBTFNFLCBtZXNzYWdlID0gRkFMU0UsIGRldiA9ICdwZGYnKQ0KDQpgYGANCg0KDQpgYGB7ciBvcHRpb25zX2NodW5rLCBlY2hvID0gRkFMU0UsIHdhcm5pbmcgPSBGQUxTRSwgbWVzc2FnZT1GQUxTRX0NCmtuaXRyOjpvcHRzX2NodW5rJHNldCgNCiAgZWNobyA9IEZBTFNFDQopDQpgYGANCg0KYGBge3IgcGFja2FnZXMsIHdhcm5pbmcgPSBGQUxTRSwgbWVzc2FnZSA9IEZBTFNFfQ0KbGlicmFyeShrbml0cikgIyBwb3VyIGxlcyB0YWJsZWF1eCBldCBsZSBwaXBlICU+JSANCmxpYnJhcnkoa2FibGVFeHRyYSkgIyBwb3VyIGxlcyB0YWJsZWF1eA0KbGlicmFyeShnZ3Bsb3QyKSAjIHBvdXIgbGVzIGdyYXBoaXF1ZXMNCmxpYnJhcnkoZ2dyaWRnZXMpICMgcG91ciBsZXMgZ3JhcGhpcXVlcyBkZSBkZW5zaXTDqSBkw6ljYWzDqXMgc3VyIGwnYXhlIGRlcyBvcmRvbm7DqWVzDQpsaWJyYXJ5KHJlYWRyKSMgcG91ciBpbXBvcnRlciBhdmVjIGRlcyBlc3BhY2VzIGRhbnMgbGVzIG5vbXMgZGUgdmFyaWFibGVzDQpsaWJyYXJ5KGRwbHlyKSMgbWFuaXB1bGF0aW9uIGRlcyBiYXNlIGRlIGRvbm7DqWVzDQpsaWJyYXJ5KGZvcmNhdHMpIyBtYW5pcHVsYXRpb24gZGUgZmFjdGV1cnMNCmxpYnJhcnkodXRpbHMpDQpsaWJyYXJ5KHByZXR0eVIpDQpsaWJyYXJ5KGRwbHlyKQ0KbGlicmFyeShGYWN0b01pbmVSKQ0KbGlicmFyeShmYWN0b2V4dHJhKQ0KbGlicmFyeShtYWdyaXR0cikNCmxpYnJhcnkob3V0bGllcnMpDQpsaWJyYXJ5KGdwbG90cykNCmxpYnJhcnkocGxvdHJpeCkNCmxpYnJhcnkobWljZSkNCmxpYnJhcnkocHN5KQ0KbGlicmFyeShwc3ljaCkNCmxpYnJhcnkoRmFjdG9zaGlueSkNCmxpYnJhcnkoUkNvbG9yQnJld2VyKQ0KbGlicmFyeShzaGlueSkNCmxpYnJhcnkoRmFjdG9JbnZlc3RpZ2F0ZSkNCmBgYA0KDQoNCg0KDQpgYGB7ciB0aGVtZSBncmFwaGlxdWV9DQp0aGVtZV9zZXQodGhlbWVfbWluaW1hbCgpKSAjIGZpeGUgbGUgdGjDqG1lIHBhciBkw6lmYXV0IGRlIGdncGxvdDINClVUUGFsZXR0ZSA8LSBjKCIjM0YzRTdDIiwgIiM0NWE1OWQiLCAiI0FFMEIzMSIsICIjMjA2NzgyIiwiIzc1N0FBMyIsIiNEMzcwMTYiLCAiIzk0OTg5RiIsIiM4RjJEM0IiLCIjNDI0YTU0IikNCmBgYA0KDQpgYGB7cn0NCnNtcDwtcmVhZC5jc3YyKCdzbXAyLmNzdicpDQpgYGANCg0KDQpgYGB7cn0NCmNsbjwtbmEub21pdChzbXApDQpgYGANCg0KYGBge3IsIGluY2x1ZGU9RkFMU0V9DQpjbGVhPC1taWNlKHNtcCwgbWV0aG9kID0gImNhcnQiKQ0Kc21wLmM8LWNvbXBsZXRlKGNsZWEpDQptZDwtbmFtZXMoc29ydCh0YWJsZShzbXAuYyRwcm9mKSwgZGVjcmVhc2luZyA9IFRSVUUpKVsxXQ0Kc21wLmMkcHJvZltpcy5uYShzbXAuYyRwcm9mKV08LW1kDQphdHRhY2goc21wLmMpDQpgYGANCg0KDQojICpJTlRST0RVQ1RJT04gOiogDQoNCkF1IHNlaW4gZHUgY29udGV4dGUgY29tcGxleGUgZGUgbGEgc2FudMOpIG1lbnRhbGUgZW4gbWlsaWV1IGNhcmPDqXJhbCwgbCdpbnRlcmFjdGlvbiBlbnRyZSBsYSBwZXJzb25uYWxpdMOpIGRlcyBkw6l0ZW51cywgbGV1cnMgYW50w6ljw6lkZW50cyBldCBsYSBzw6l2w6lyaXTDqSBkZSBsZXVycyB0cm91YmxlcyBtZW50YXV4IHJldsOqdCB1bmUgaW1wb3J0YW5jZSBjYXBpdGFsZS4gTm90cmUgw6l0dWRlIHBsb25nZSBkYW5zIGNldHRlIHLDqWFsaXTDqSBwb3VyIGV4cGxvcmVyIGxhIGZhw6dvbiBkb250IGxhIGdyYXZpdMOpIGRlcyB0cm91YmxlcyBtZW50YXV4LCBwc3ljaG9sb2dpcXVlcyBjb3VyYW50cyAtIHRlbHMgcXVlIGxhIGTDqXByZXNzaW9uLCBsYSBzY2hpem9waHLDqW5pZSwgbGVzIHRyb3VibGVzIGFueGlldXggZXQgbGVzIGFkZGljdGlvbnMgLSBzJ2VudHJlbGFjZSBhdmVjIGRlcyDDqWzDqW1lbnRzIGNsw6lzIGRlIGxhIHBlcnNvbm5hbGl0w6kgdGVscyBxdWUgbGEgcHJvcGVuc2lvbiDDoCBsYSByZWNoZXJjaGUgZGUgc2Vuc2F0aW9ucywgbCfDqXZpdGVtZW50IGR1IGRhbmdlciwgbGEgZMOpcGVuZGFuY2Ugw6AgbGEgcsOpY29tcGVuc2UgZXQgbGV1ciBzdGF0dXQgc29jaW8tw6ljb25vbWlxdWUgZXQgYW50w6ljw6lkZW50cy4NCk5vdHJlIHByb2pldCBzZSBkaXN0aW5ndWUgcGFyIHNvbiBhdHRlbnRpb24gcGFydGljdWxpw6hyZSDDoCB1biBhc3BlY3Qgc291dmVudCBzb3VzLWVzdGltw6kgOiBsYSBkdXLDqWUgZGVzIGVudHJldGllbnMgYXZlYyBsZXMgZMOpdGVudXMuIEVuIMOpdHVkaWFudCBjZXR0ZSB2YXJpYWJsZSwgbm90cmUgb2JqZWN0aWYgZXN0IGRlIGNhcHR1cmVyIGRlcyBudWFuY2VzIHBsdXMgcHJvZm9uZGVzIHN1ciBsYSBmYcOnb24gZG9udCBsYSBzYW50w6kgbWVudGFsZSBldCBsYSBwZXJzb25uYWxpdMOpIGRlcyBpbmRpdmlkdXMgaW5jYXJjw6lyw6lzIHBldXZlbnQgbXV0dWVsbGVtZW50IGluZmx1ZW5jZXIgbGV1cnMgY29tcG9ydGVtZW50cyBldCBzb24gZWZmZXQgaW5zdGFudGFuw6llIChldCBsZXVyIGNvbXBvcnRlbWVudCByZWxhdGlvbm5lbCBkZSBqb3VyIGxlIGpvdXIpLg0KTm90cmUgw6l0dWRlIGNoZXJjaGUgw6Agw6lsdWNpZGVyIGNvbW1lbnQgY2VzIGZhY3RldXJzIHMnZW50cmVtw6psZW50IGRhbnMgbGUgY29udGV4dGUgc3DDqWNpZmlxdWUgZGUgbGEgcHJpc29uLiBFbiBzYWlzaXNzYW50IGNlcyByZWxhdGlvbnMsIG5vdXMgYXNwaXJvbnMgw6Agw6ljbGFpcmVyIGxlcyBjb21wb3J0ZW1lbnRzIGV0IGxlcyBpbnRlcmFjdGlvbnMgZGVzIGTDqXRlbnVzLCBvZmZyYW50IGFpbnNpIGRlcyBwaXN0ZXMgcG91ciBkZXMgYXBwcm9jaGVzIGRlIHLDqWFkYXB0YXRpb24gbWlldXggYWRhcHTDqWVzIGV0IHBsdXMgZWZmaWNhY2VzLiBDZXR0ZSB2YXJpYWJsZSBzZW1ibGUNCsOpZ2FsZW1lbnQgaW50w6lyZXNzYW50IHBvdXIgdsOpcml0YWJsZW1lbnQgY29tcHJlbmRyZSBs4oCZaW50ZXJhY3Rpb24gZW50cmUgbOKAmWluZGl2aWR1IGV0IHNvbg0KbWlsaWV1Lg0KDQoNCiMgUkVWVUVTIERFIExJVFTDiVJBVFVSRSA6DQoNCkxlcyBmYWN0ZXVycyBzb2Npby1kw6ltb2dyYXBoaXF1ZXMvIGFmZmVjdGl2ZXMgZXQgbGVzIGFudMOpY8OpZGFudCwgcGV1dmVudCBhdm9pciB1biBpbXBhY3Qgc2lnbmlmaWNhdGlmIHN1ciBsYSBzYW50w6kgbWVudGFsZSBkZXMgZMOpdGVudXMgZW4gcHJpc29uLiBQbHVzaWV1cnMgw6l0dWRlcyBtZXR0ZW50IGVuIMOpdmlkZW5jZSBsJ2ltcG9ydGFuY2UgZGUgY2VzIGZhY3RldXJzIGRhbnMgbGEgY29tcHLDqWhlbnNpb24gZGVzIHByb2Jsw6htZXMgZGUgc2FudMOpIG1lbnRhbGUgZW4gbWlsaWV1IGNhcmPDqXJhbC4NClVuZSDDqXR1ZGUgbWVuw6llIGF1IFPDqW7DqWdhbCBhIHNvdWxpZ27DqSBxdWUgbGVzIGNhcmFjdMOpcmlzdGlxdWVzIHNvY2lvLWTDqW1vZ3JhcGhpcXVlcyBkZXMgZMOpdGVudXMsIHRlbGxlcyBxdWUgbGV1ciDDomdlLCBsZXVyIG5pdmVhdSBkJ8OpZHVjYXRpb24sIGxldXIgb3JpZ2luZSBldGhuaXF1ZSBldCBsZXVyIHN0YXR1dCBzb2Npby3DqWNvbm9taXF1ZSwgY29udHJpYnVlbnQgw6AgcmVuZm9yY2VyIGxldXIgdnVsbsOpcmFiaWxpdMOpIGVuIHByaXNvblsxXS4gRGUgbcOqbWUsIHVuZSBwdWJsaWNhdGlvbiBkdSBSw6lzZWF1IGRlIHNlbnNpYmlsaXNhdGlvbiDDoCBsYSByYWRpY2FsaXNhdGlvbiBkZSBsJ1VuaW9uIGV1cm9ww6llbm5lIGluZGlxdWUgcXVlIGRlIG5vbWJyZXV4IGTDqXRlbnVzIHNvdWZmcmVudCBkZSBwcm9ibMOobWVzIGRlIHNhbnTDqSBtZW50YWxlIGF2YW50IG3Dqm1lIGxldXIgaW5jYXJjw6lyYXRpb24sIHNvdWxpZ25hbnQgYWluc2kgbCdpbXBvcnRhbmNlIGRlcyBmYWN0ZXVycyBzb2Npby1kw6ltb2dyYXBoaXF1ZXMgZGFucyBjZSBjb250ZXh0ZVsyXS4NClBhciBhaWxsZXVycywgdW5lIMOpdHVkZSBkdSBTw6luYXQgZnJhbsOnYWlzIG1ldCBlbiBsdW1pw6hyZSBsJ2ltcGFjdCBkZXMgdHJvdWJsZXMgbWVudGF1eCBzdXIgbGEgcG9wdWxhdGlvbiBjYXJjw6lyYWxlLCBzb3VsaWduYW50IHF1ZSBsYSByw6lkdWN0aW9uIGR1IG5vbWJyZSBkZSBsaXRzIGQnaG9zcGl0YWxpc2F0aW9uIMOgIHRlbXBzIGNvbXBsZXQgZMOpZGnDqXMgw6AgbGEgcHN5Y2hpYXRyaWUgYSBjb25kdWl0IMOgIHVuZSBhdWdtZW50YXRpb24gZGUgbGEgcHJpc2UgZW4gY2hhcmdlIGRlcyB0cm91YmxlcyBtZW50YXV4IGVuIHByaXNvblszXS4gRW4gb3V0cmUsIHVuZSByZWNoZXJjaGUgc3VyIGxlcyBhZG9sZXNjZW50cyBkw6l0ZW51cyBob3NwaXRhbGlzw6lzIG1ldCBlbiDDqXZpZGVuY2UgbCdvcmdhbmlzYXRpb24gZGVzIHNvaW5zIHBzeWNoaWF0cmlxdWVzIGVuIGZvbmN0aW9uIGRlcyBjYXJhY3TDqXJpc3RpcXVlcyBzb2Npby1kw6ltb2dyYXBoaXF1ZXMgZGVzIGTDqXRlbnVzIFs0XS4NClVuZSDDqXR1ZGUgcHVibGnDqWUgZGFucyAiVGhlIExhbmNldCBQc3ljaGlhdHJ5IiBlbiAyMDE4IGEgZXhhbWluw6kgbCdhc3NvY2lhdGlvbiBlbnRyZSBsZXMgZmFjdGV1cnMgc29jaW8tZMOpbW9ncmFwaGlxdWVzIGV0IGxhIHNhbnTDqSBtZW50YWxlIGRlcyBkw6l0ZW51cywgbWV0dGFudCBlbiDDqXZpZGVuY2UgbCdpbXBvcnRhbmNlIGRlIHByZW5kcmUgZW4gY29tcHRlIGNlcyB2YXJpYWJsZXMgZGFucyBsJ8OpdmFsdWF0aW9uIGV0IGxhIHByaXggZW4gY2hhcmdlIGRlcyBwcm9ibMOobWVzIGRlIHNhbnTDqSBtZW50YWxlIGVuIG1pbGlldSBjYXJjw6lyYWwuIERlIG3Dqm1lLCB1bmUgcmVjaGVyY2hlIG1lbsOpZSBwYXIgbCdJbnN0aXR1dCBOYXRpb25hbCBkZSBsYSBTYW50w6kgTWVudGFsZSBhIG1pcyBlbiBsdW1pw6hyZSBsJ2ltcGFjdCBkZXMgZmFjdGV1cnMgYWZmZWN0aWZzIGV0IGNsaW5pcXVlcyBzdXIgbGEgc2FudMOpIG1lbnRhbGUgZGVzIGTDqXRlbnVzLCBzb3VsaWduYW50IGwnaW1wb3J0YW5jZSBkJ3VuZSBhcHByb2NoZSBob2xpc3RpcXVlIHBvdXIgbGEgcHLDqXZlbnRpb24gZXQgbGUgdHJhaXRlbWVudCBkZXMgdHJvdWJsZXMgbWVudGF1eCBlbiBwcmlzb24uDQpFbiByw6lzdW3DqSwgbGVzIGZhY3RldXJzIHNvY2lvLWTDqW1vZ3JhcGhpcXVlcyB0ZWxzIHF1ZSBsJ8OiZ2UsIGxlIG5pdmVhdSBkJ8OpZHVjYXRpb24sIGxlcyBhbnRlY2VkZW50cyBldCBsZSBzdGF0dXQgc29jaW8tw6ljb25vbWlxdWUgam91ZW50IHVuIHLDtGxlIGNydWNpYWwgZGFucyBsJ2ltcGFjdCBzdXIgbGEgc2FudMOpIG1lbnRhbGUgZGVzIGTDqXRlbnVzIGVuIHByaXNvbi4gQ2VzIGZhY3RldXJzIGRvaXZlbnQgw6p0cmUgcHJpcyBlbiBjb21wdGUgZGFucyBsYSBjb21wcsOpaGVuc2lvbiBldCBsYSBwcmlzZSBlbiBjaGFyZ2UgZGVzIHByb2Jsw6htZXMgZGUgc2FudMOpIG1lbnRhbGUgZW4gbWlsaWV1IGNhcmPDqXJhbC4NCg0KDQoqUmVmZXJlbmNlIDoqDQoqWzFdIGh0dHBzOi8vd3d3Lm5jYmkubmxtLm5paC5nb3YvcG1jL2FydGljbGVzL1BNQzg0ODY5MjgvKg0KKlsyXSBodHRwczovL2hvbWUtYWZmYWlycy5lYy5ldXJvcGEuZXUvc3lzdGVtL2ZpbGVzLzIwMjEtMDEvcmFuX2NvbmNsdXNpb25fcGFwZXJfbWhfaW5fcHJpc29uXzIzLTI0XzA5MjAyMF9mci5wZGYqDQoqWzNdIGh0dHBzOi8vd3d3LnNlbmF0LmZyL3JhcC9yMDktNDM0L3IwOS00MzRfbW9uby5odG1sKg0KKls0XSBodHRwczovL3d3dy5zY2llbmNlZGlyZWN0LmNvbS9zY2llbmNlL2FydGljbGUvYW0vcGlpL1MwMDEzNzAwNjE4MzAxNjcyKg0KKls1XSBodHRwczovL3RoZXNlcy5oYWwuc2NpZW5jZS90ZWwtMDAxOTkyNDgvZG9jdW1lbnQqDQoNCg0KIyBQQVJUSUUgQU5BTFlTRSBERSBET05Ow4lFUw0KDQojIEhZUE9USMOIU0VTIDoNCg0KDQoqMS5IeXBvdGjDqHNlIHN1ciBsZSBuaXZlYXUgZGUgc2NvbGFyaXNhdGlvbiA6KiBPbiBzdXBwb3NlIHF1ZSBkZXMgbml2ZWF1eCDDqWxldsOpcyBkZSBzY29sYXJpc2F0aW9uIGNoZXogbGVzIGTDqXRlbnVzIHBvdXJyYWllbnQgY29udHJpYnVlciDDoCB1bmUgY29tbXVuaWNhdGlvbiBwbHVzIGZsdWlkZSBldCBlZmZpY2FjZSBsb3JzIGRlIGwnZW50cmV0aWVuLiBDZXR0ZSBmYWNpbGl0YXRpb24gZGUgbGEgY29tbXVuaWNhdGlvbiBwb3VycmFpdCByw6lkdWlyZSBsYSBkdXLDqWUgbsOpY2Vzc2FpcmUgcG91ciBvYnRlbmlyIGRlcyBpbmZvcm1hdGlvbnMgcGVydGluZW50ZXMuDQoNCioyLkh5cG90aMOoc2Ugc3VybCdpbmZsdWVuY2UgZGUgbGEgcHJvZmVzc2lvbiBkdSBkw6l0ZW51KiA6IFNlbG9uIGxhIG5hdHVyZSByZWxhdGlvbm5lbGxlLCBleHByZXNzaXZlIG91IGlzb2xhbnRlIGRlIGxhIHByb2Zlc3Npb24gZHUgZMOpdGVudSwgb24gZW52aXNhZ2UgcXVlIGNlbGEgcG91cnJhaXQgaW1wYWN0ZXIgbGEgZHluYW1pcXVlIGRlIGwnZW50cmV0aWVuLiBQYXIgZXhlbXBsZSwgdW5lIHByb2Zlc3Npb24gZmF2b3Jpc2FudCBsZXMgaW50ZXJhY3Rpb25zIHNvY2lhbGVzIHBvdXJyYWl0IGZhY2lsaXRlciBsYSBjb21tdW5pY2F0aW9uLCB0YW5kaXMgcXUndW5lIHByb2Zlc3Npb24gcGx1cyBpc29sYW50ZSBwb3VycmFpdCByZW5kcmUgbCdlbnRyZXRpZW4gcGx1cyBjb21wbGV4ZS4NCg0KKjMuSHlwb3Row6hzZSBzdXIgbCdlZmZldCBkZSBsJ8OiZ2UgZHUgZMOpdGVudSogOiBMJ8OiZ2UgZHUgZMOpdGVudSBlc3Qgc3VwcG9zw6kgaW5mbHVlbmNlciBsYSBkdXLDqWUgZGUgbCdlbnRyZXRpZW4uIE9uIGVudmlzYWdlIHF1J3VuIGTDqXRlbnUgcGx1cyDDomfDqSwgcHLDqXNlbnRhbnQgcGFyZm9pcyBkZXMgY29tcG9ydGVtZW50cyBhc3NvY2nDqXMgw6AgbGEgc8OpbmlsaXTDqSwgcG91cnJhaXQgcHJvbG9uZ2VyIGxhIGR1csOpZSBkZSBsJ2VudHJldGllbi4gRW4gcmV2YW5jaGUsIHVuIGTDqXRlbnUgcGx1cyBqZXVuZSBwb3VycmFpdCBkw6ltb250cmVyIHVuZSBzcG9udGFuw6lpdMOpIGV0IHVuZSBjYXBhY2l0w6kgw6AgcydleHByaW1lciBwbHVzIHJhcGlkZW1lbnQsIHBvdGVudGllbGxlbWVudCByw6lkdWlzYW50IGxhIGR1csOpZSBkZSBsJ2VudHJldGllbi4NCg0KKjQuSHlwb3Row6hzZSBzdXIgbGVzIHZhcmlhYmxlcyBkaWFnbm9zdGlxdWVzIDoqIEwnaHlwb3Row6hzZSBzdWdnw6hyZSBxdWUgbGEgcHLDqXNlbmNlIGRlIGRpYWdub3N0aWNzIG91IGRlIHRyb3VibGVzIG1lbnRhdXggY29tcGxleGVzLCB0ZWxzIHF1ZSBsYSBkw6lwcmVzc2lvbiwgbGEgc2NoaXpvcGhyw6luaWUsIGxlIHN5bmRyb21lIGRlIHN0cmVzcyBwb3N0LXRyYXVtYXRpcXVlIG91IGRlcyBjb21wb3J0ZW1lbnRzIGQnYWJ1cyBkJ2FsY29vbCwgcG91cnJhaXQgY29uc2lkw6lyYWJsZW1lbnQgYXVnbWVudGVyIGxhIGR1csOpZSBkZSBsJ2VudHJldGllbi4gTCdleHBsb3JhdGlvbiBkZSBjZXMgc3ltcHTDtG1lcyBjb21wbGV4ZXMgZGVtYW5kZXJhaXQgcGx1cyBkZSB0ZW1wcyBwb3VyIHVuZSDDqXZhbHVhdGlvbiBhZMOpcXVhdGUuDQoNCio1LiBIeXBvdGhlc2Ugc3VyIGxlcyB2YXJpYWJsZXMgZGUgcmlzcXVlIHN1aWNpZGFpcmUqIDogTGVzIHZhcmlhYmxlcyBhc3NvY2nDqWVzIGF1IHJpc3F1ZSBzdWljaWRhaXJlLCBjb21tZSBsZXMgc2NvcmVzIGRlIHJpc3F1ZSwgbGVzIGFudMOpY8OpZGVudHMgZGUgdGVudGF0aXZlIGRlIHN1aWNpZGUgb3UgbGVzIHNpZ25lcyBpbmRpcXVhbnQgdW4gcmlzcXVlIMOpbGV2w6ksIHNvbnQgc3VwcG9zw6llcyBlbnRyYcOubmVyIGRlcyBkaXNjdXNzaW9ucyBhcHByb2ZvbmRpZXMgcGVuZGFudCBsJ2VudHJldGllbi4gQ2V0dGUgbsOpY2Vzc2l0w6kgZCfDqXZhbHVlciBtaW51dGlldXNlbWVudCBjZXMgYXNwZWN0cyBwb3VycmFpdCBhdWdtZW50ZXIgbGEgZHVyw6llIGRlIGwnZW50cmV0aWVuLg0KDQoNCiMgUFJFU0VOVEFUSU9OIERFUyBET05ORUVTDQoNCiMjIERFU0NSSVBUSU9OIERFUyBWQVJJQUJMRVMNCioqKkxhIGRlc2NyaXB0aW9uIGRlcyB2YXJpYWJsZXMgc2UgdHJvdXZlIGRhbnMgbGUgdGFibGVhdSBjaS1kZXNzb3VzOioqKg0KDQpOb3RyZSBqZXUgZGUgZG9ubsOpZXMgY29uY2VybmUgdW5lIMOpdHVkZSBzdXIgbGEgc2FudMOpIG1lbnRhbGUgZW4gbWlsaWV1IGNhcmPDqXJhbCwgbWVuw6llIGVuIDIwMDQgZXQgZmluYW5jw6llIGNvbmpvaW50ZW1lbnQgcGFyIGxlIE1pbmlzdMOocmUgZGUgbGEgSnVzdGljZSBldCBsZSBNaW5pc3TDqHJlIGRlIGxhIFNhbnTDqS4gQ2V0dGUgZW5xdcOqdGUgYSBleGFtaW7DqSA3OTkgaG9tbWVzIGTDqXRlbnVzIHPDqWxlY3Rpb25uw6lzIGF1IGhhc2FyZCBkw6hzIGxldXIgYXJyaXbDqWUgZW4gcHJpc29uIGF1IGNvdXJzIGR1IHByZW1pZXIgbW9pcyBkYW5zIGRlcyDDqXRhYmxpc3NlbWVudHMgcMOpbml0ZW50aWFpcmVzIGVuIEZyYW5jZSBtw6l0cm9wb2xpdGFpbmUuIE5vdXMgZGlzcG9zb25zIGRlIDI2IHZhcmlhYmxlcyBzdWl2YW50ZXMgOg0KDQooKkxhIGJhc2UgZGUgZG9ubsOpZXMgYSDDqXTDqSBvYnRlbnVlIGF1cHLDqHMgZHUgUHJvZmVzc2V1ciBCcnVubyBGYWxpc3NhcmQsIHByb2Zlc3NldXIgZGUgYmlvc3RhdGlzdGlxdWUgw6AgbGEgZmFjdWx0w6kgZGUgbcOpZGVjaW5lIFBhcmlzLVNhY2xheSwgIMOpZ2FsZW1lbnQgZGlyZWN0ZXVyIGR1IENlbnRyZSBkZSByZWNoZXJjaGUgZW4gw6lwaWTDqW1pb2xvZ2llIGV0IHNhbnTDqSBkZXMgcG9wdWxhdGlvbnMgZGUgbOKAmUlOU0VSTSAoQ0VTUCkqKQ0KDQpgYGB7ciwgfQ0KIyBDcsOpYXRpb24gZHUgZGF0YSBmcmFtZSBhdmVjIGxlcyBpbmZvcm1hdGlvbnMgZG9ubsOpZXMNCmRvbm5lZXMgPC0gZGF0YS5mcmFtZSgNCiAgTm9tc19WYXJpYWJsZXMgPSBjKCJhZ2UiLCAicHJvZiIsICJkdXJlZSIsICJkaXNjaXAiLCAibi5lbmZhbnQiLCAibi5mcmF0cmllIiwgImVjb2xlIiwgInNlcGFyYXRpb24iLCAianVnZS5lbmZhbnQiLCAicGxhY2UiLCAiYWJ1cyIsICJncmF2ZS5jb25zIiAsImRlcC5jb25zIiwgImFnby5jb25zIiwgInB0c2QuY29ucyIsICJhbGMuY29ucyIsICJzdWJzdC5jb25zIiwgInNjei5jb25zIiwgImNoYXIiLCAicnMiLCAiZWQiLCAiZHIiLCAic3VpY2lkZS5zIiwgInN1aWNpZGUuaHIiLCAic3VpY2lkZS5wYXN0IiwiZHVyLmludGVydiIpLA0KICBEZXNjcmlwdGlvbl9WYXJpYWJsZXMgPSBjKCJMJ8OiZ2UgZHUgZMOpdGVudSBhdSBtb21lbnQgZGUgbCfDqXR1ZGUuIiwgIkxhIHByb2Zlc3Npb24gb3Ugb2NjdXBhdGlvbiBkdSBkw6l0ZW51LiIsICJMYSBkdXLDqWUgZGUgbGEgcGVpbmUgcXVlIGxlIGTDqXRlbnUgYSByZcOndWUuIiwgIkluZGlxdWUgc2kgbGUgZMOpdGVudSBlc3Qgc291cyB1bmUgbWVzdXJlIGRpc2NpcGxpbmFpcmUuIiwgIkxlIG5vbWJyZSBkJ2VuZmFudHMgcXVlIGxlIGTDqXRlbnUgYS4iLCAiTGUgbm9tYnJlIGRlIGZyw6hyZXMgZXQgc8WTdXJzIGR1IGTDqXRlbnUuIiwgIlVuZSB2YXJpYWJsZSBkZSAxIMOgIDUgaW5kaXF1YW50IGxlIG5pdmVhdSBkZSBzY29sYXJpc2F0aW9uIGR1IGTDqXRlbnUuIiwgICJJbmRpcXVlIHNpIGxlIGTDqXRlbnUgYSDDqXTDqSBzw6lwYXLDqSBkZSBzYSBmYW1pbGxlIHBlbmRhbnQgc29uIGVuZmFuY2UgKG91aS9ub24pLiIsICJJbmRpcXVlIHNpIGxlIGTDqXRlbnUgYSBiw6luw6lmaWNpw6kgZGUgbCdhaWRlIGQndW4ganVnZSBwb3VyIGVuZmFudHMgcGVuZGFudCBzb24gZW5mYW5jZS4iLCAiSW5kaXF1ZSBzaSBsZSBkw6l0ZW51IGEgw6l0w6kgcGxhY8OpIGVuIGluc3RpdHV0aW9uLiIsICJJbmRpcXVlIHNpIGxlIGTDqXRlbnUgYSDDqXTDqSB2aWN0aW1lIGQnYWJ1cyBkYW5zIHNvbiBlbmZhbmNlLiIsICAiTGEgZ3Jhdml0w6kgY29uc2Vuc3VlbGxlIGRlIGxhIHBhdGhvbG9naWUgZHUgZMOpdGVudS4iLCAiTCdleGlzdGVuY2UgZCd1bmUgZMOpcHJlc3Npb24gZGlhZ25vc3RpcXXDqWUgcGFyIGNvbnNlbnN1cy4iLCAiTCdleGlzdGVuY2UgZCd1biB0cm91YmxlIGFnb3JhcGhvYmlxdWUgZGlhZ25vc3RpcXXDqSBwYXIgY29uc2Vuc3VzLiIsICJMJ2V4aXN0ZW5jZSBkJ3VuIHN5bmRyb21lIGRlIHN0cmVzcyBwb3N0LXRyYXVtYXRpcXVlIGRpYWdub3N0aXF1w6kgcGFyIGNvbnNlbnN1cy4iLCAiTCdleGlzdGVuY2UgZCd1biBhYnVzIG91IGFkZGljdGlvbiDDoCBsJ2FsY29vbCBkaWFnbm9zdGlxdcOpIHBhciBjb25zZW5zdXMuIiwgIkwnZXhpc3RlbmNlIGQndW5lIGFkZGljdGlvbiBvdSBhYnVzIGRlIHN1YnN0YW5jZXMgZGlhZ25vc3RpcXXDqSBwYXIgY29uc2Vuc3VzLiIsICJMJ2V4aXN0ZW5jZSBkZSBsYSBzY2hpem9waHLDqW5pZSBkaWFnbm9zdGlxdcOpZSBwYXIgY29uc2Vuc3VzLiIsICJVbiBzY29yZSDDqXZhbHVhbnQgbCdpbXBvcnRhbmNlIGR1IHRyb3VibGUgZGUgbGEgcGVyc29ubmFsaXTDqSBzb3VzLWphY2VudC4iLCAgIlVuZSBtZXN1cmUgZHUgbml2ZWF1IGRlIHJlY2hlcmNoZSBkZSBzZW5zYXRpb25zIGRhbnMgbGEgcGVyc29ubmFsaXTDqSBkdSBkw6l0ZW51LiIsICJVbmUgbWVzdXJlIGR1IG5pdmVhdSBkJ8Opdml0ZW1lbnQgZHUgZGFuZ2VyIGRhbnMgbGEgcGVyc29ubmFsaXTDqSBkdSBkw6l0ZW51LiIsICJVbmUgbWVzdXJlIGR1IG5pdmVhdSBkZSBkw6lwZW5kYW5jZSDDoCBsYSByw6ljb21wZW5zZSBkYW5zIGxhIHBlcnNvbm5hbGl0w6kgZHUgZMOpdGVudS4iLCAgIlVuIHNjb3JlIMOpdmFsdWFudCBsZSByaXNxdWUgc3VpY2lkYWlyZS4iLCAiVW5lIHZhcmlhYmxlIGJpbmFpcmUgaW5kaXF1YW50IHMnaWwgeSBhIHVuIGhhdXQgcmlzcXVlIHN1aWNpZGFpcmUuIiwgIkluZGlxdWUgc2kgbGUgZMOpdGVudSBhIGRlcyBhbnTDqWPDqWRlbnRzIGRlIHRlbnRhdGl2ZSBkZSBzdWljaWRlLiIsICJMYSBkdXLDqWUgZGUgbCdlbnRyZXRpZW4gcXVlIGxlcyBlbnF1w6p0ZXVycyBvbnQgcGFzc8OpIGF2ZWMgbGUgZMOpdGVudS4iKSwNCiAgVHlwZXMgPSBjKCJRdWFudGl0YXRpdmUiLCAiUXVhbGl0YXRpdmUiLCAiUXVhbGl0YXRpdmUiLCAiUXVhbGl0YXRpdmUiLCAiUXVhbnRpdGF0aXZlIiwgIlF1YW50aXRhdGl2ZSIsICJRdWFsaXRhdGl2ZSIsICJRdWFsaXRhdGl2ZSIsICJRdWFsaXRhdGl2ZSIsICJRdWFsaXRhdGl2ZSIsICJRdWFsaXRhdGl2ZSIsICJRdWFsaXRhdGl2ZSIsICJRdWFsaXRhdGl2ZSIsICJRdWFsaXRhdGl2ZSIsICJRdWFsaXRhdGl2ZSIsICJRdWFsaXRhdGl2ZSIsICJRdWFsaXRhdGl2ZSIsICJRdWFsaXRhdGl2ZSIsICJRdWFsaXRhdGl2ZSIsICJRdWFsaXRhdGl2ZSIsICJRdWFsaXRhdGl2ZSIsIlF1YWxpdGF0aXZlIiwiUXVhbGl0YXRpdmUiLCJRdWFsaXRhdGl2ZSIsIlF1YWxpdGF0aXZlIiwgIlF1YW50aXRhdGl2ZSIpDQopDQoNCg0Ka2FibGUoZG9ubmVlcykNCmBgYA0KDQojIyBHRVNUSU9OIERFUyBWQUxFVVJTIE1BTlFVQU5URVMNCg0KUG91ciBjZXJ0YWlucyBpbmRpdmlkdXMgZXQgdmFyaWFibGVzIGRlIGxhIGJhc2UgZGUgZG9ubsOpZXMsIGRlcyB2YWxldXJzIHNvbnQgbWFucXVhbnRlcy4gTm91cyBhdm9ucyByZW1hcnF1w6kgcXUnZW4gYXBwbGlxdWFudCBsYSBtw6l0aG9kZSBkZSBzdXBwcmVzc2lvbiBkZXMgY2FzIGNvbXBsZXRzKGNvbXBsZXRlIGNhc2UgYW5hbHlzaXMpLCBxdWkgY29uc2lzdGUgw6AgY29uc2VydmVyIHVuaXF1ZW1lbnQgbGVzIGxpZ25lcyBkZSBkb25uw6llcyBjb21wbMOodGVzIHBvdXIgbCdhbmFseXNlLCBub3VzIG4nYXZpb25zIHF1ZSA0MDMgb2JzZXJ2YXRpb25zIHN1ciA3OTksIHNvaXQgZW52aXJvbiBsYSBtb2l0acOpIGRlcyBkb25uw6llcy4gUG91ciBtYWludGVuaXIgdW5lIHRhaWxsZSBkJ8OpY2hhbnRpbGxvbiBzdWZmaXNhbnRlLCBub3VzIGF2b25zIGNob2lzaSBkZSBjb25zZXJ2ZXIgdG91dGVzIGxlcyBvYnNlcnZhdGlvbnMgZXQgZGUgZ8OpcmVyIGxlcyB2YWxldXJzIG1hbnF1YW50ZXMgbG9ycyBkZXMgY2FsY3VscyBkZXMgc3RhdGlzdGlxdWVzIGRlc2NyaXB0aXZlcyBlbiB1dGlsaXNhbnQgbCdhcmd1bWVudCBSICdhbi5ybSA9IFRSVUUnLiBDZWxhIG5vdXMgYSBwZXJtaXMgZGUgY2FsY3VsZXIgbGVzIG1lc3VyZXMgYmFzw6llcyB1bmlxdWVtZW50IHN1ciBsZXMgdmFsZXVycyBudW3DqXJpcXVlcyBkaXNwb25pYmxlcywgZXhjbHVhbnQgYWluc2kgbGVzIHZhbGV1cnMgbWFucXVhbnRlcy4gUG91ciBsJ2FuYWx5c2UgZGVzIGNvcnJlc3BvbmRhbmNlcyBtdWx0aXBsZXMgKEFDTSksIG5vdXMgYXZvbnMgb3B0w6kgcG91ciBsJ3V0aWxpc2F0aW9uIGR1IHBhY2thZ2UgIm1pY2UiIChNdWx0aXZhcmlhdGUgSW1wdXRhdGlvbiBieSBDaGFpbmVkIEVxdWF0aW9ucykgZGUgRmFjdG9NaW5lUiBhZmluIGQnaW1wdXRlciBsZXMgdmFsZXVycyBtYW5xdWFudGVzIGRhbnMgbCdlbnNlbWJsZSBkZSBkb25uw6llcyBlbiB1dGlsaXNhbnQgZGVzIMOpcXVhdGlvbnMgw6AgcGx1c2lldXJzIMOpdGFwZXMuIENldHRlIG3DqXRob2RlIGQnaW1wdXRhdGlvbiByZW1wbGFjZSBsZXMgdmFsZXVycyBtYW5xdWFudGVzIHBhciBkZXMgZXN0aW1hdGlvbnMgYmFzw6llcyBzdXIgbGVzIGF1dHJlcyB2YXJpYWJsZXMgZGlzcG9uaWJsZXMsIGNyw6lhbnQgYWluc2kgcGx1c2lldXJzIGVuc2VtYmxlcyBkZSBkb25uw6llcyBjb21wbGV0cyBwb3VyIGwnYW5hbHlzZSBzdGF0aXN0aXF1ZS4NCkxhIHByw6lzZW5jZSBkZSBkb25uw6llcyBtYW5xdWFudGVzIHBldXQgZW50cmHDrm5lciBkZXMgYmlhaXMgbG9ycyBkZSBsJ2FuYWx5c2UsIHN1c2NlcHRpYmxlcyBkZSBzdXJlc3RpbWVyIGNlcnRhaW5zIHLDqXN1bHRhdHMuIE5vdXMgYXZvbnMgYWluc2kgcHJpcyBjZXMgbWVzdXJlcyBwb3VyIMOpdml0ZXIgY2VzIGJpYWlzLg0KDQojIFNUQVRJU1RJUVVFIERFU0NSSVBUSVZFIEVUIEFOQUxZU0UgRVhQTE9SQVRPSVJFOg0KIyMgIFNUQVRJU1RJUVVFIERFU0NSSVBUSVZFDQoNCkF2YW50IGQnZW50YW1lciB1bmUgYW5hbHlzZSBhcHByb2ZvbmRpZSwgaWwgZXN0IGltcMOpcmF0aWYgZGUgY29uZHVpcmUgZGVzIHN0YXRpc3RpcXVlcyBkZXNjcmlwdGl2ZXMgZXQgdW5lIGFuYWx5c2UgZXhwbG9yYXRvaXJlIGRlIG5vdHJlIGpldSBkZSBkb25uw6llcy4gUGFybWkgbGVzIDc5OSBvYnNlcnZhdGlvbnMsIGwnw6JnZSBtb3llbiBkZXMgZMOpdGVudXMgZXN0IGRlIDM5IGFucywgYXZlYyB1bmUgdHJhbmNoZSBkJ8OiZ2UgYWxsYW50IGRlIDE5IMOgIDgzIGFucy4gTGEgY2F0w6lnb3JpZSBwcm9mZXNzaW9ubmVsbGUgbWFqb3JpdGFpcmUgZXN0IGNlbGxlIGRlcyBvdXZyaWVycywgcmVwcsOpc2VudGFudCBlbnZpcm9uIDI5JSBkZXMgaW5kaXZpZHVzLCBzdWl2aWUgcGFyIGxlcyBlbXBsb3nDqXMgKDE3JSksIGxlcyBhcnRpc2FucyAoMTElKSwgbGVzIHNhbnMgZW1wbG9pL2Now7RtZXVycyAoMjglKSwgbGVzIHByb2Zlc3Npb25uZWxzIGludGVybcOpZGlhaXJlcyAoNyUpLCBsZXMgYWdyaWN1bHRldXJzICgxJSksIGxlcyBjYWRyZXMgKDMlKSBldCBhdXRyZXMgcHJvZmVzc2lvbnMgKDQlKS4NCkNvbmNlcm5hbnQgbGUgcGFyY291cnMgw6lkdWNhdGlmLCA0MiUgZGVzIGTDqXRlbnVzIG9udCDDqXTDqSBzw6lwYXLDqXMgZGUgbGV1cnMgcGFyZW50cyBkYW5zIGxldXIgZW5mYW5jZSwgNDMlIG4nb250IHBhcyDDqXTDqSBzY29sYXJpc8OpcyBvdSBvbnQgZnLDqXF1ZW50w6kgbGEgbWF0ZXJuZWxsZSwgMzglIG9udCBzdWl2aSBsJ8OpY29sZSDDqWzDqW1lbnRhaXJlLCAxMSUgbGUgY29sbMOoZ2UsIDYlIGxlIGx5Y8OpZSBldCAyJSBsJ2Vuc2VpZ25lbWVudCBzdXDDqXJpZXVyLiBFbiBvdXRyZSwgMjAlIHByw6lzZW50ZW50IHVuIHJpc3F1ZSBzdWljaWRhaXJlIMOpbGV2w6ksIDglIHVuIHRyb3VibGUgc2NoaXpvcGhyw6luaXF1ZSwgNDAlIHVuZSBkw6lwcmVzc2lvbiBldCAxNiUgZGUgbCdhZ29yYXBob2JpZS4NCkNvbmNlcm5hbnQgbGVzIG5pdmVhdXggZGUgZ3Jhdml0w6kgZGVzIHBhdGhvbG9naWVzIMOpdmFsdcOpcyBkZSAxIMOgIDcgKGRlIHBhcyBncmF2ZSDDoCB0csOocyBncmF2ZSksIGxlcyBwb3VyY2VudGFnZXMgcmVzcGVjdGlmcyBzb250IDogMTMuMzklLCAxNi4yNyUsIDE0LjI3JSwgMjAuNDAlLCAyMy4wMyUsIDEwLjE0JSBldCAyLjUwJS4NCkVuIG91dHJlLCAyNyUgZGVzIGTDqXRlbnVzIHNvbnQgZMOpcGVuZGFudHMgZGUgc3Vic3RhbmNlcywgMTklIGRlIGwnYWxjb29sLCB0YW5kaXMgcXVlIDI4JSBvbnQgYsOpbsOpZmljacOpIGRlIGwnYWlkZSBkJ3VuIGp1Z2UgcG91ciBlbmZhbnRzLiBFbnZpcm9uIDIyJSBkZXMgZMOpdGVudXMgcHLDqXNlbnRlbnQgdW4gc3luZHJvbWUgZGUgc3RyZXNzIHBvc3QtdHJhdW1hdGlxdWUsIDIzJSBvbnQgw6l0w6kgcGxhY8OpcyBldCAyOCUgb250IMOpdMOpIHZpY3RpbWVzIGQnYWJ1cyBkYW5zIGxldXIgZW5mYW5jZS4NCkxlcyBuaXZlYXV4IGRlIHRyb3VibGVzIGRlIGNhcmFjdMOocmUvcGVyc29ubmFsaXTDqSDDqXZhbHXDqXMgZGUgMSDDoCA0IChkZSBwYXMgZnLDqXF1ZW50IMOgIHRyw6hzIGZyw6lxdWVudCkgc29udCByZXByw6lzZW50w6lzIHJlc3BlY3RpdmVtZW50IHBhciBkZXMgcG91cmNlbnRhZ2VzIGRlIDY3LjcxJSwgMTYuNDAlLCAxMC4yNiUgZXQgNS42MyUuIERlIHBsdXMsIDIzJSBvbnQgw6l0w6kgcGxhY8OpcyBzb3VzIGRpc2NpcGxpbmUuDQpMZXMgZMOpdGVudXMgb250IMOpZ2FsZW1lbnQgw6l0w6kgw6l2YWx1w6lzIHN1ciBkaXZlcnNlcyDDqWNoZWxsZXMsIG5vdGFtbWVudCBsZSBuaXZlYXUgZGUgcmVjaGVyY2hlIGRlIHNlbnNhdGlvbiAocmVwcsOpc2VudMOpIHBhciBkZXMgcG91cmNlbnRhZ2VzIGRlIDM0LjU0JSwgMjIuNDAlIGV0IDQzLjA1JSksIGwnw6l2aXRlbWVudCBkdSBkYW5nZXIgKDQzLjkzJSwgMjMuMjglIGV0IDMyLjc5JSksIGxhIGTDqXBlbmRhbmNlIMOgIGxhIHLDqWNvbXBlbnNlICgyOC42NiUsIDI4LjI5JSBldCA0My4wNSUpIGFpbnNpIHF1ZSBsZSBzY29yZSBkZSBzdWljaWRlICg3MC4wOSUsIDguNTElLCA0Ljc2JSwgNi43NiUgZXQgNi44OCUpLg0KRGUgcGx1cywgMjklIG9udCB0ZW50w6kgZGUgc2Ugc3VpY2lkZXIgcGFyIGxlIHBhc3PDqS4gTGVzIGR1csOpZXMgZGUgcGVpbmUgc29udCByw6lwYXJ0aWVzIHN1ciB1bmUgw6ljaGVsbGUgZGUgMSDDoCA1LCByZXByw6lzZW50YW50IHJlc3BlY3RpdmVtZW50IDAuNTAsIDYuMDEsIDEzLjM5LCAzMi40MiBldCA0Ny42OCBhbm7DqWVzLCBkdSBwbHVzIGNvdXJ0IGF1IHBsdXMgbG9uZy4gRW4gbW95ZW5uZSwgbGVzIGTDqXRlbnVzIG9udCBlbnRyZSAxIGV0IDIgZW5mYW50cywgYXZlYyB1biBtYXhpbXVtIGRlIDEzIGVuZmFudHMgcGFyIGTDqXRlbnUuIExhIHRhaWxsZSBtb3llbm5lIGRlIGZyYXRyaWUgZXN0IGRlIDQgZnLDqHJlcyBldCBzxZN1cnMsIGF2ZWMgdW4gbWF4aW11bSBkZSAyMS4gRW5maW4sIGxhIGR1csOpZSBtb3llbm5lIGQnZW50cmV0aWVuIGVzdCBkJ3VuZSBoZXVyZSAoNjEuODkgbWludXRlcyksIGF2ZWMgdW5lIGR1csOpZSBtYXhpbWFsZSBkZSAyIGhldXJlcy4NCg0KDQoqKipNYXRyaWNlIGRlIGNvcnLDqWxhdGlvbioqKg0KDQoNCmBgYHtyfQ0KbWF0X2NvcjwtY29yKHNtcC5jWyxjKCJhZ2UiLCJuLmVuZmFudCIsIm4uZnJhdHJpZSIsImFnby5jb25zIiwiZGVwLmNvbnMiLCJycyIsImVkIiwiZHIiLCJzZXBhcmF0aW9uIiwiY2hhciIsInN1aWNpZGUuaHIiLCJlY29sZSIsImFidXMiLCJwbGFjZSIsImp1Z2UuZW5mYW50IiwiZ3Jhdi5jb25zIiwicHRzZC5jb25zIiwiYWxjLmNvbnMiLCJzdWJzdC5jb25zIiwic2N6LmNvbnMiLCJkaXNjaXAiLCJzdWljaWRlLnMiLCJzdWljaWRlLnBhc3QiLCJhZ2UiLCJuLmVuZmFudCIsIm4uZnJhdHJpZSIsImR1cmVlIiwiZHVyLmludGVydiIpXSkNCg0KaGVhdG1hcC4yKG1hdF9jb3IpDQpgYGANCg0KDQpgYGB7cixlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQ0Kc21wLmMkYWdvLmNvbnM8LWFzLmZhY3RvcihhZ28uY29ucykNCnNtcC5jJGRlcC5jb25zPC1hcy5mYWN0b3IoZGVwLmNvbnMpDQpzbXAuYyRyczwtYXMuZmFjdG9yKHJzKQ0Kc21wLmMkZWQ8LWFzLmZhY3RvcihlZCkNCnNtcC5jJGRyPC1hcy5mYWN0b3IoZHIpDQpzbXAuYyRzZXBhcmF0aW9uPC1hcy5mYWN0b3Ioc2VwYXJhdGlvbikNCnNtcC5jJGNoYXI8LWFzLmZhY3RvcihjaGFyKQ0Kc21wLmMkc3VpY2lkZS5ocjwtYXMuZmFjdG9yKHN1aWNpZGUuaHIpDQpzbXAuYyRlY29sZTwtYXMuZmFjdG9yKGVjb2xlKQ0Kc21wLmMkYWJ1czwtYXMuZmFjdG9yKGFidXMpDQpzbXAuYyRwbGFjZTwtYXMuZmFjdG9yKHBsYWNlKQ0Kc21wLmMkanVnZS5lbmZhbnQ8LWFzLmZhY3RvcihqdWdlLmVuZmFudCkNCnNtcC5jJGFsYy5jb25zPC1hcy5mYWN0b3IoYWxjLmNvbnMpDQpzbXAuYyRncmF2LmNvbnM8LWFzLmZhY3RvcihncmF2LmNvbnMpDQpzbXAuYyRwdHNkLmNvbnM8LWFzLmZhY3RvcihwdHNkLmNvbnMpDQpzbXAuYyRzdWJzdC5jb25zPC1hcy5mYWN0b3Ioc3Vic3QuY29ucykNCnNtcC5jJGRpc2NpcDwtYXMuZmFjdG9yKGRpc2NpcCkNCnNtcC5jJHN1aWNpZGUuczwtYXMuZmFjdG9yKHN1aWNpZGUucykNCnNtcC5jJHN1aWNpZGUucGFzdDwtYXMuZmFjdG9yKHN1aWNpZGUucGFzdCkNCnNtcC5jJGR1cmVlPC1hcy5mYWN0b3IoZHVyZWUpDQpgYGANCg0KYGBge3IsIGluY2x1ZGU9RkFMU0V9DQpkZXNjcmliZShzbXAuYykNCnByb3AudGFibGUodGFibGUoYWdlPj0zOCAmIGR1ci5pbnRlcnY+PTc1KSkqMTAwDQpwcm9wLnRhYmxlKHRhYmxlKGRlcC5jb25zPT0xICYgZHVyLmludGVydj49NzUpKSoxMDANCnByb3AudGFibGUodGFibGUoZWQ+PTIgJiBkdXIuaW50ZXJ2Pj03NSkpKjEwMA0KcHJvcC50YWJsZSh0YWJsZShzY3ouY29ucz09MSAmIGR1ci5pbnRlcnY+PTc1KSkqMTAwDQpgYGANCg0KYGBge3J9DQojIGVzc2Egey50YWJzZXQgLnRhYnNldC1mYWRlfQ0KIyMNCmBgYA0KDQojIyBHUkFQSElRVUVTIEVUIElOVEVSUFLDiVRBVElPTlMgOg0KDQoNCmBgYHtyfQ0KZ2dwbG90KGRhdGEgPSBzbXAuYywgYWVzKHg9YWdlLCB5PW4uZW5mYW50LCBjb2w9cHJvZiwgc2hhcGU9cHJvZikpICsNCiAgZ2VvbV9qaXR0ZXIoc2l6ZT0zKSArDQogIGdlb21fc21vb3RoKG1ldGhvZD1sbSwgc2U9RkFMU0UpICsNCiAgdGhlbWVfZ3JheSgpICsNCiAgbGFicyh4PSLDgmdlIGRlcyBkw6l0ZW51cyIsIHk9Ik5vbWJyZSBkJ2VuZmFudHMgZGVzIGTDqXRlbnVzIiwgdGl0bGU9IlJlbGF0aW9uIGVudHJlIGwnw6JnZSwgbGUgbm9tYnJlIGQnZW5mYW50cyBldCBcbiBsYSBwcm9mZXNzaW9uIGRlcyBkw6l0ZW51cyhHcmFwaCAxKSIsIGNvbD0iUHJvZmVzc2lvbiIsIHNoYXBlPSJQcm9mZXNzaW9uIikNCmBgYA0KDQoNCioqSW50ZXJwcmV0YXRpb24gOioqDQpOb3RyZSBwcmVtaWVyIGdyYXBoaXF1ZSBwcsOpc2VudGUgbGEgY29ycsOpbGF0aW9uIGVudHJlIGwnw6JnZSBkZXMgZMOpdGVudXMsIGxlIG5vbWJyZSBkJ2VuZmFudHMgZXQgbGV1ciBwcm9mZXNzaW9uLiBJbCByw6l2w6hsZSBxdWUgbGEgcGx1cGFydCBkZXMgb3V2cmllcnMgZXQgYXJ0aXNhbnMgZGUgbm90cmUgw6ljaGFudGlsbG9uLCBwcmluY2lwYWxlbWVudCDDomfDqXMgZCdlbnZpcm9uIDUwIGFucywgb250IHVuIG5vbWJyZSBkJ2VuZmFudHMgc3Vww6lyaWV1ciDDoCBsYSBtb3llbm5lIG9ic2VydsOpZS4gRW4gcGFyYWxsw6hsZSwgdW5lIG9ic2VydmF0aW9uIGludMOpcmVzc2FudGUgZXN0IHF1ZSBsZXMgY2jDtG1ldXJzIGV0IGxlcyBhZ3JpY3VsdGV1cnMgb250IHRlbmRhbmNlIMOgIGF2b2lyIGRhdmFudGFnZSBkJ2VuZmFudHMgw6AgbWVzdXJlIHF1J2lscyB2aWVpbGxpc3NlbnQsIGNlIHF1aSBjb250cmFzdGUgYXZlYyBsYSB0ZW5kYW5jZSBkZXMgY2FkcmVzLiBDZXR0ZSBjYXTDqWdvcmllIHRlbmQgw6AgYXZvaXIgZGVzIGVuZmFudHMgcGx1cyB0YXJkaXZlbWVudCBwYXIgcmFwcG9ydCBhdXggZW1wbG95w6lzIGV0IGF1dHJlcyBwcm9mZXNzaW9ucy4NCkNldHRlIG9ic2VydmF0aW9uIHBldXQgcydhdsOpcmVyIHBlcnRpbmVudGUgZGFucyBub3RyZSDDqXR1ZGUgc3VyIGxhIHNhbnTDqSBtZW50YWxlIGVuIHByaXNvbiwgY2FyIGVsbGUgc291bGlnbmUgdW5lIGNvcnLDqWxhdGlvbiBwb3RlbnRpZWxsZSBlbnRyZSBsYSBzaXR1YXRpb24gcHJvZmVzc2lvbm5lbGxlLCBsJ8OiZ2UgZGVzIGTDqXRlbnVzIGV0IGxlIG5vbWJyZSBkJ2VuZmFudHMsIGRlcyBmYWN0ZXVycyBxdWkgcG91cnJhaWVudCBpbmZsdWVuY2VyIGxlcyBkeW5hbWlxdWVzIGZhbWlsaWFsZXMgZXQsIHBhciBjb25zw6lxdWVudCwgaW1wYWN0ZXIgbGEgc2FudMOpIG1lbnRhbGUgZW4gbWlsaWV1IGNhcmPDqXJhbC4NCg0KDQoqKnZpc3VhbGlzYXRpb24gZGUgbGEgdGFpbGxlIGRlIGxhIGZyYXRyaWUgZGVzIGRldGVudXMoR3JhcGggMikqKg0KDQpgYGB7cixlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBtZXNzYWdlPUZBTFNFfQ0KZ2dwbG90KGRhdGEgPSBzbXAuYykrDQogIGdlb21fYmFyKGFlcyh4PW4uZnJhdHJpZSkscG9zaXRpb24gPSAic3RhY2siLGNvbD0iZ3JlZW4iLCBmaWxsPSJibHVlIikrDQogIGxhYnMoeCA9ICJMYSB0YWlsbGUgZGUgbGEgZnJhdHJpZSBkZXMgZGV0ZW51cyIsIHk9ICJub21icmUgb2JzZXJ2YXRpb25zIikNCg0KYGBgDQoNCg0KKipJbnRlcnByZXRhdGlvbiA6KioNCk9uIHJlbWFycXVlIHF1ZSBsYSBtYWpvcml0w6kgZGVzIGTDqXRlbnVzIG9udCB0cm9pcyBmcsOocmVzIGV0IHPFk3VycyAobGEgbW9kZSBkZSBsYSB0YWlsbGUgZGUgbGEgZnJhdHJpZSBlc3QgMykNCg0KYGBge3J9DQojZmFjdG9yKGFnby5jb25zLCBsZXZlbHMgPSBjKDAsMSksIGxhYmVscyA9IGMoIiIpDQojImFnZSIsIm4uZW5mYW50Iiwibi5mcmF0cmllIiwiYWdvLmNvbnMiLCJkZXAuY29ucyIsInJzIiwiZWQiLCJkciIsInNlcGFyYXRpb24iLCJjaGFyIiwic3VpY2lkZS5ociIsImVjb2xlIiwiYWJ1cyIsInBsYWNlIiwianVnZS5lbmZhbnQiLCJncmF2LmNvbnMiLCJwdHNkLmNvbnMiLCJhbGMuY29ucyIsInN1YnN0LmNvbnMiLCJzY3ouY29ucyIsImRpc2NpcCIsInN1aWNpZGUucyIsInN1aWNpZGUucGFzdCIsImFnZSIsIm4uZW5mYW50Iiwibi5mcmF0cmllIiwiZHVyZWUiLCJkdXIuaW50ZXJ2Ig0KI3N1bW1hcnkoc21wJGR1ci5pbnRlcnYsIG5hLnJtID0gVFJVRSkNCiNzdW1tYXJ5KHNtcCRhZ2UsIG5hLnJtID0gVFJVRSkNCiNzdW1tYXJ5KHNtcCRuLmVuZmFudCwgbmEucm0gPSBUUlVFKQ0KI3N1bW1hcnkoc21wJG4uZnJhdHJpZSwgbmEucm0gPSBUUlVFKQ0KYGBgDQoNCg0KYGBge3IsIHdhcm5pbmc9RkFMU0UsIG1lc3NhZ2U9RkFMU0V9DQpwYXIobWZyb3c9YygxLCAyKSkNCnNtcC5jICU+JSANCiAgZ2dwbG90KCkgKyBhZXMoeCA9IGZjdF9yZXYoZmN0X2luZnJlcShmY3RfbHVtcF9sb3dmcmVxKCBwcm9mLCBvdGhlcl9sZXZlbCA9ICJhdXRyZSIpKSkpICsgDQogIGdlb21fYmFyKHdpZHRoID0gMC43LCBmaWxsID0gVVRQYWxldHRlWzJdKSArDQogIGxhYnModGl0bGUgPSAidmlzdWFsaXNhdGlvbiBkZXMgcHJvZmVzc2lvbnMgXG4gZGVzIGRldGVudXMoR3JhcGggMykiLA0KICAgIHN1YnRpdGxlID0gInByb2Zlc3Npb24iLA0KICAgIHggPSAiIiwgeSA9ICJFZmZlY3RpZiIpICsNCiAgY29vcmRfZmxpcCgpDQpwcm9mX3BpZSA8LSB0YWJsZShzbXAkcHJvZikNCmNvbG9ycyA8LSBicmV3ZXIucGFsKGxlbmd0aChwcm9mX3BpZSksICJTZXQzIikNCnBpZShwcm9mX3BpZSwgY29sID0gY29sb3JzLA0KICAgIG1haW4gPSAiUsOpcGFydGl0aW9uIGRlcyBjYXTDqWdvcmllcyBwcm9mZXNzaW9ubmVsbGVzIiwNCiAgICBsYWJlbHMgPSBwYXN0ZShuYW1lcyhwcm9mX3BpZSksICI6ICIsIHByb2ZfcGllKSwNCiAgICBjZXggPSAwLjgpDQoNCmxlZ2VuZCgidG9wcmlnaHQiLCBpbnNldCA9IGMoLTAuNSwgMCksIHRpdGxlID0gIkNhdMOpZ29yaWVzIHByb2Zlc3Npb25uZWxsZXMiLA0KICAgICAgIGNleCA9IDAuOCwgZmlsbCA9IGNvbG9ycywgbGVnZW5kID0gbmFtZXMocHJvZl9waWUpKQ0KDQpgYGANCg0KDQoqKkludGVycHJldGF0aW9uIDoqKg0KT24gcmVtYXJxdWUgcXVlIGxhIG1ham9yaXTDqSBkZXMgZMOpdGVudXMgc29udCBvdXZyaWVycyAobGEgbW9kZSBkZSBsYSBwcm9mZXNzaW9uIGVzdCBvdXZyaWVyKQ0KDQoNCg0KYGBge3IgYmFycGxvdF9uaXZlYXUsIGZpZy5oZWlnaHQgPSA0LCBmaWcud2lkdGggPSA0LCBvdXQuaGVpZ2h0ID0gIjMwMHB4Iiwgb3V0LndpZHRoPSAiMzAwcHgiLCBmaWcuYWxpZ249J2NlbnRlcid9DQojIGNvbnN0cnVjdGlvbiBkZSBsYSB0YWJsZSBkJ2VmZmVjdGlmDQp0YWJsZV9uaXZlYXUgPC0gdGFibGUoc21wLmMkZHVyLmludGVydikNCiMgc3DDqWNpZmljYXRpb24gc3VyIGxhIGZlbmV0cmUgZ3JhcGhpcXVlDQpwYXIoeHBkID0gVFJVRSkgIyDDqXRlbmRyZSBsYSB6b25lIGR1IGdyYXBoaXF1ZSAocGFzIHV0aWxlIHF1YW5kIG9uIMOpY3JpdCBkYW5zIGxlcyBiYXJyZXMpDQojIGNyw6lhdGlvbiBkdSBiYXJwbG90DQpiYXJwbG90X25pdmVhdSA8LSBiYXJwbG90KHRhYmxlX25pdmVhdSwNCiAgICAgICAgbGFzID0gMSwgc3BhY2UgPSAxLA0KICAgICAgICBjb2wgPSAib3JjaGlkNCIsDQogICAgICAgIGJvcmRlciA9ICJvcmNoaWQ0IiwNCiAgICAgICAgbWFpbiA9ICJSZXBhcnRpdGlvbiBkZXMgcmVwb25kYW50cyBcbiBwYXIgZHVyZWUgZF9pbnRlcnZlbnRpb24gKEdyYXBoIDQpIiwgDQogICAgICAgIGF4ZXMgPSBUUlVFKSAjIGVubMOodmUgbGVzIGF4ZXMNCiMgYWpvdXQgZGUgdGV4dGUgc3VyIGxlIGdyYXBoaXF1ZQ0KdGV4dCh4ID0gYmFycGxvdF9uaXZlYXUsDQogICAgIHkgPSB0YWJsZV9uaXZlYXUsDQogICAgIGxhYmVscyA9IHRhYmxlX25pdmVhdSwNCiAgICAgcG9zID0gaWZlbHNlKHRhYmxlX25pdmVhdSA8IG1lYW4odGFibGVfbml2ZWF1KSwgMywgMSksIA0KICAgICBjb2wgPSBpZmVsc2UodGFibGVfbml2ZWF1IDwgbWVhbih0YWJsZV9uaXZlYXUpLCAiYmxhY2siLCAicmVkIikNCikNCmBgYA0KDQoqKkludGVycHJldGF0aW9uIDoqKg0KTm90cmUgZ3JhcGhpcXVlIGVuIGJhcnJlcyBpY2kgcmVwcsOpc2VudGUgbGEgcsOpcGFydGl0aW9uIGRlcyByw6lwb25kYW50cyBlbiBmb25jdGlvbiBkZSBsYSBkdXLDqWUgZCdpbnRlcnZlbnRpb24uIENoYXF1ZSBiYXJyZSBjb3JyZXNwb25kIMOgIHVuZSBkdXLDqWUgc3DDqWNpZmlxdWUgZCdpbnRlcnZlbnRpb24sIGV0IHNhIGhhdXRldXIgaW5kaXF1ZSBsZSBub21icmUgZCdpbmRpdmlkdXMgY29ycmVzcG9uZGFudCDDoCBjZXR0ZSBkdXLDqWUuIA0KTCdheGUgaG9yaXpvbnRhbCBtb250cmUgbGVzIGRpZmbDqXJlbnRlcyBkdXLDqWVzIGQnaW50ZXJ2ZW50aW9uLCB0YW5kaXMgcXVlIGwnYXhlIHZlcnRpY2FsIHJlcHLDqXNlbnRlIGxlIG5vbWJyZSBkJ2luZGl2aWR1cyBwb3VyIGNoYXF1ZSBkdXLDqWUuIExlcyBiYXJyZXMgY29sb3LDqWVzIGVuICJvcmNoaWQ0IiBhZmZpY2hlbnQgdmlzdWVsbGVtZW50IGxhIHLDqXBhcnRpdGlvbiBkZXMgcsOpcG9uZGFudHMuDQpEZSBwbHVzLCBkZXMgw6l0aXF1ZXR0ZXMgbnVtw6lyaXF1ZXMgc29udCBham91dMOpZXMgYXUtZGVzc3VzIGRlIGNoYXF1ZSBiYXJyZSBwb3VyIGluZGlxdWVyIGxlIG5vbWJyZSBleGFjdCBkJ2luZGl2aWR1cyBwb3VyIGNoYXF1ZSBkdXLDqWUuIExlcyDDqXRpcXVldHRlcyBlbiBub2lyIHNvbnQgcG9zaXRpb25uw6llcyBhdS1kZXNzdXMgZGVzIGJhcnJlcyBhdmVjIHVuZSB2YWxldXIgaW5mw6lyaWV1cmUgw6AgbGEgbW95ZW5uZSBkdSBub21icmUgZCdpbmRpdmlkdXMsIHRhbmRpcyBxdWUgbGVzIMOpdGlxdWV0dGVzIGVuIHJvdWdlIHNvbnQgYXUtZGVzc3VzIGRlcyBiYXJyZXMgYXZlYyB1bmUgdmFsZXVyIHN1cMOpcmlldXJlIMOgIGxhIG1veWVubmUuDQpDZXR0ZSByZXByw6lzZW50YXRpb24gbm91cyBkb25uZSB1biBhcGVyw6d1IHZpc3VlbCBkZSBsYSBkaXN0cmlidXRpb24gZGVzIHLDqXBvbmRhbnRzIGVuIGZvbmN0aW9uIGRlIGxhIGR1csOpZSBkJ2ludGVydmVudGlvbiwgbWV0dGFudCBlbiDDqXZpZGVuY2UgbGVzIGR1csOpZXMgcXVpIHNlIGTDqW1hcnF1ZW50IHBhciByYXBwb3J0IMOgIGxhIG1veWVubmUgZW4gdGVybWVzIGRlIGZyw6lxdWVuY2UgZGUgcsOpcG9uZGFudHMuDQoNCg0KDQpgYGB7cn0NCnNtcC5jIDwtIHNtcC5jICU+JQ0KICBtdXRhdGUoc2N6LmNvbnMgPSByZWNvZGUoc2N6LmNvbnMsIGAwYCA9ICJBYnNlbmNlIiwgYDFgID0gIlByZXNlbmNlIikpDQpgYGANCg0KDQpgYGB7cn0NCnNtcC5jW3NtcC5jJHNjei5jb25zICVpbiUgYygiQWJzZW5jZSIsICJQcmVzZW5jZSIpLF0gJT4lDQogIGdncGxvdCgpICsgYWVzKHggPSBkdXIuaW50ZXJ2LCB5ID0gc2N6LmNvbnMsIGZpbGwgPSBzY3ouY29ucykgKw0KICBnZW9tX2RlbnNpdHlfcmlkZ2VzKGFlcyh5ID0gLi5kZW5zaXR5Li4pLCBhbHBoYSA9IDAuOCwgc2NhbGUgPSA0LCBiYW5kd2lkdGggPSA2LjMzKSArDQogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMoIkFic2VuY2UiID0gIiM0Mjg3ZjUiLCAiUHJlc2VuY2UiID0gIiNmNTQyNDIiKSwNCiAgICAgICAgICAgICAgICAgICAgbmFtZSA9ICJTY2hpem9waHLDqW5pZSIsDQogICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIkFic2VuY2UiID0gIkFic2VuY2UgZGUgc2NoaXpvcGhyw6luaWUiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmVzZW5jZSIgPSAiUHLDqXNlbmNlIGRlIHNjaGl6b3BocsOpbmllIikpICsNCiAgbGFicyh4ID0gIkR1csOpZSBkJ2ludGVydmlldyBlbiBtaW51dGVzIiwgeSA9ICJUcm91YmxlIiwgDQogICAgICAgdGl0bGUgPSAiRGlzdHJpYnV0aW9uIGRlIGxhIGR1csOpZSBkJ2ludGVydmlldyBkZXMgZMOpdGVudXMgXG4gc2Vsb24gbGEgc2NoaXpvcGhyw6luaWUoR3JhcGggNSkiKSArDQogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iLA0KICAgICAgICBwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSAiI2YyZjJmMiIpLA0KICAgICAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGNvbG9yID0gIiMzMzMzMzMiLCBzaXplID0gMTQsIGZhY2UgPSAiYm9sZCIpLA0KICAgICAgICBheGlzLnRleHQgPSBlbGVtZW50X3RleHQoY29sb3IgPSAiIzMzMzMzMyIpLA0KICAgICAgICBheGlzLnRpdGxlID0gZWxlbWVudF90ZXh0KGNvbG9yID0gIiMzMzMzMzMiLCBzaXplID0gMTIsIGZhY2UgPSAiYm9sZCIpLA0KICAgICAgICBsZWdlbmQudGV4dCA9IGVsZW1lbnRfdGV4dChjb2xvciA9ICIjMzMzMzMzIiksDQogICAgICAgIGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfdGV4dChjb2xvciA9ICIjMzMzMzMzIiwgc2l6ZSA9IDExLCBmYWNlID0gImJvbGQiKSkNCmBgYA0KDQoNCioqSW50ZXJwcmV0YXRpb24gOioqDQpDZSBncmFwaGlxdWUgcmVwcsOpc2VudGUgbGEgZGlzdHJpYnV0aW9uIGRlIGxhIGR1csOpZSBkJ2ludGVydmlldyBkZXMgZMOpdGVudXMgZW4gZm9uY3Rpb24gZGUgbGEgcHLDqXNlbmNlIG91IGRlIGwnYWJzZW5jZSBkZSBzY2hpem9waHLDqW5pZS4gTCdheGUgaG9yaXpvbnRhbCAoeCkgaW5kaXF1ZSBsYSBkdXLDqWUgZGUgbCdpbnRlcnZpZXcgZW4gbWludXRlcywgdGFuZGlzIHF1ZSBsJ2F4ZSB2ZXJ0aWNhbCAoeSkgcHLDqXNlbnRlIGxlcyBjYXTDqWdvcmllcyAiQWJzZW5jZSIgZXQgIlByw6lzZW5jZSIgZGUgc2NoaXpvcGhyw6luaWUuDQpMZXMgem9uZXMgY29sb3LDqWVzIGR1IGdyYXBoaXF1ZSBtb250cmVudCBsYSBkZW5zaXTDqSBkZSBkaXN0cmlidXRpb24gZGVzIGR1csOpZXMgZCdpbnRlcnZpZXcgcG91ciBsZXMgZGV1eCBjYXTDqWdvcmllcyBkZSBzY2hpem9waHLDqW5pZS5MYSB6b25lIGJsZXVlICgiQWJzZW5jZSBkZSBzY2hpem9waHLDqW5pZSIpIGVzdCBwbHVzIMOpdGVuZHVlIG91IHBsdXMgw6lsZXbDqWUgZGFucyBjZXJ0YWluZXMgcGFydGllcyBkdSBncmFwaGlxdWUgcGFyIHJhcHBvcnQgw6AgbGEgem9uZSByb3VnZSAoIlByw6lzZW5jZSBkZSBzY2hpem9waHLDqW5pZSIpLCBjZWxhIHN1Z2fDqHJlIHF1ZSBwb3VyIGxlcyBkdXLDqWVzIGQnaW50ZXJ2aWV3IGNvcnJlc3BvbmRhbnRlcywgaWwgeSBhIHVuZSBwbHVzIGdyYW5kZSBjb25jZW50cmF0aW9uIGRlIGNhcyBzYW5zIHNjaGl6b3BocsOpbmllIHF1ZSBkZSBjYXMgYXZlYyBzY2hpem9waHLDqW5pZS4NCkNlIGdyYXBoaXF1ZSBwZXJtZXQgZGUgY29tcGFyZXIgdmlzdWVsbGVtZW50IGxhIGRpc3RyaWJ1dGlvbiBkZXMgZHVyw6llcyBkJ2ludGVydmlldyBlbnRyZSBsZXMgZMOpdGVudXMgcHLDqXNlbnRhbnQgb3Ugbm9uIGRlcyBzaWduZXMgZGUgc2NoaXpvcGhyw6luaWUsIG9mZnJhbnQgYWluc2kgdW4gYXBlcsOndSBkZXMgZGlmZsOpcmVuY2VzIHBvdGVudGllbGxlcyBkYW5zIGNldHRlIG1lc3VyZSBlbiBmb25jdGlvbiBkZSBsYSBwcsOpc2VuY2UgZGUgY2UgdHJvdWJsZS4NCg0KDQoNCmBgYHtyfQ0KcGFyKG1mcm93PWMoMSwgMikpDQpzbXAuY1tzbXAuYyRlZCAlaW4lIGMoIjEiLCAiMiIsIjMiKSAsXSAgJT4lIA0KICAgIGdncGxvdCgpICsgYWVzKHggPSBuLmVuZmFudCwgDQogICAgICAgICAgICAgICAgICAgeSA9IG4uZnJhdHJpZSwgDQogICAgICAgICAgICAgICAgICAgY29sb3IgPSBuLmZyYXRyaWUsIA0KICAgICAgICAgICAgICAgICAgIGZpbGwgPSBuLmZyYXRyaWUpICsNCiAgICBnZW9tX3Zpb2xpbihhbHBoYSA9IDAuOCkgKw0KICAgIGxhYnMoeCA9ICJub21icmUgZCBlbmZhbnRzIHBhciBkZXRlbnVzIiwgeSA9ICJUYWlsbGUgZGUgZnJhdHJpZVxucGFyIGRldGVudXMiLA0KICAgICAgIHRpdGxlID0gIkRpc3RyaWJ1dGlvbiBkZSBsYSBSZWxhdGlvbiBlbnRyZSBsZSBub21icmUgZCdlbmZhbnRzIGV0XG4gbGEgdGFpbGxlIGRlIGxhIGZyYXRyaWUgZGVzIGTDqXRlbnVzKEdyYXBoIDYpIikgKw0KICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiwNCiAgICAgICAgICBheGlzLnRpdGxlLnk9ZWxlbWVudF90ZXh0KGFuZ2xlID0gMCkpICsNCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gVVRQYWxldHRlWzE6M10pICsNCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IFVUUGFsZXR0ZVsxOjNdKQ0KDQpzbXAuY1tzbXAuYyRlZCAlaW4lIGMoIjEiLCAiMiIsIjMiKSAsXSAgJT4lIA0KICAgIGdncGxvdCgpICsgYWVzKHggPSBuLmVuZmFudCwgDQogICAgICAgICAgICAgICAgICAgeSA9IG4uZnJhdHJpZSwgDQogICAgICAgICAgICAgICAgICAgY29sb3IgPSBmYWN0b3Iobi5mcmF0cmllKSwgDQogICAgICAgICAgICAgICAgICAgZmlsbCA9IGZhY3RvcihuLmZyYXRyaWUpKSArDQogICAgZ2VvbV92aW9saW4oYWxwaGEgPSAwLjgpICsNCiAgICBsYWJzKHggPSAiTm9tYnJlIGQnZW5mYW50cyBwYXIgZMOpdGVudXMiLCANCiAgICAgICAgIHkgPSAiVGFpbGxlIGRlIGZyYXRyaWUgcGFyIGTDqXRlbnVzIiwNCiAgICAgICAgIHRpdGxlID0gIkRpc3RyaWJ1dGlvbiBkZSBsYSBSZWxhdGlvbiBlbnRyZSBsZSBub21icmUgZCdlbmZhbnRzIGV0XG4gbGEgdGFpbGxlIGRlIGxhIGZyYXRyaWUgZGVzIGTDqXRlbnVzKEdyYXBoIDYpIikgKw0KICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJyaWdodCIpICsNCiAgICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjKCIxIiA9ICIjRkY5OTk5IiwgIjIiID0gIiM2NkNDQ0MiLCAiMyIgPSAiI0ZGQ0M5OSIpLCANCiAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gIlRhaWxsZSBkZSBmcmF0cmllIiwNCiAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCIxIiA9ICJQZXRpdGUiLCAiMiIgPSAiTW95ZW5uZSIsICIzIiA9ICJHcmFuZGUiKSkgKw0KICAgIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCIxIiA9ICIjRkY5OTk5IiwgIjIiID0gIiM2NkNDQ0MiLCAiMyIgPSAiI0ZGQ0M5OSIpLCANCiAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9ICJUYWlsbGUgZGUgZnJhdHJpZSIsDQogICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIjEiID0gIlBldGl0ZSIsICIyIiA9ICJNb3llbm5lIiwgIjMiID0gIkdyYW5kZSIpKQ0KYGBgDQoNCg0KKipJbnRlcnByZXRhdGlvbiA6KioNCkNlIGdyYXBoaXF1ZSBkZSB2aW9sb24gcmVwcsOpc2VudGFudCBsYSByZWxhdGlvbiBlbnRyZSBsZSBub21icmUgZCdlbmZhbnRzIHBhciBkw6l0ZW51IGV0IGxhIHRhaWxsZSBkZSBsYSBmcmF0cmllIHBhciBkw6l0ZW51LCBwb3VyIGxlcyBkw6l0ZW51cyBkb250IGxlIG5pdmVhdSBkJ8Opdml0ZW1lbnQgZGUgZGFuZ2VyIGVzdCBjbGFzc2lmacOpIGVuIHRyb2lzIGNhdMOpZ29yaWVzICgiMSIsICIyIiwgIjMiKS4NCkNoYXF1ZSB2aW9sb24gcmVwcsOpc2VudGUgbGEgZGlzdHJpYnV0aW9uIGRlcyBvYnNlcnZhdGlvbnMgcG91ciBjaGFxdWUgY29tYmluYWlzb24gZHUgbm9tYnJlIGQnZW5mYW50cyBldCBkZSBsYSB0YWlsbGUgZGUgbGEgZnJhdHJpZS4gTGEgbGFyZ2V1ciBkdSB2aW9sb24gaW5kaXF1ZSBsYSBkZW5zaXTDqSBkZXMgb2JzZXJ2YXRpb25zIMOgIGRpZmbDqXJlbnRzIG5pdmVhdXggZGUgY2VzIGRldXggdmFyaWFibGVzLg0KTGVzIGF4ZXMgeCBldCB5IHJlcHLDqXNlbnRlbnQgcmVzcGVjdGl2ZW1lbnQgbGUgbm9tYnJlIGQnZW5mYW50cyBwYXIgZMOpdGVudSBldCBsYSB0YWlsbGUgZGUgbGEgZnJhdHJpZSBwYXIgZMOpdGVudS4gTGVzIGNvdWxldXJzIGRlcyB2aW9sb25zIGV0IGRlcyBwb2ludHMgc29udCBhc3NvY2nDqWVzIGF1eCBkaWZmw6lyZW50ZXMgY2F0w6lnb3JpZXMgZGUgdGFpbGxlIGRlIGZyYXRyaWUgKCIxIiBwb3VyIHBldGl0ZSwgIjIiIHBvdXIgbW95ZW5uZSBldCAiMyIgcG91ciBncmFuZGUpLCBwZXJtZXR0YW50IHVuZSBjb21wYXJhaXNvbiB2aXN1ZWxsZSBlbnRyZSBjZXMgZ3JvdXBlcy4NCkVuIG9ic2VydmFudCBjZSBncmFwaGlxdWUsIG9uIHBldXQgcmVtYXJxdWUgcXVlIGxlcyBkZXRlbnVzIHF1aSBvbnQgdW5lIHRhaWxsZSBwbHVzICBncmFuZGUgb250IHVuIHBldSBwbHVzIGRlIGRpeCBlbmZhbnRzLCBvbnQgb2JzZXJ2ZSB1bmUgYmFzZSBtb250cmFudCBxdWUgbGEgbWFqb3JpdMOpIG9udCB1bmUgcGV0aXRlIHRhaWxsZSBkZSBmcmF0cmllIGV0IG1vaW5zIGQnZW5mYW50cy4gDQoNCg0KDQpgYGB7cn0NCnBhcihtZnJvdz1jKDEsIDIpKQ0Kc3VpY2lkZS5zX3BpZSA8LSB0YWJsZShzbXAkc3VpY2lkZS5zKQ0KY29sb3JzIDwtIGJyZXdlci5wYWwobGVuZ3RoKHN1aWNpZGUuc19waWUpLCAiU2V0MyIpDQoNCnBpZShzdWljaWRlLnNfcGllLCBjb2wgPSBjb2xvcnMsDQogICAgbWFpbiA9ICJSw6lwYXJ0aXRpb24gZGVzIGNhdMOpZ29yaWVzXG4gZGUgc2NvcmUgZGUgc3VpY2lkZSIsDQogICAgbGFiZWxzID0gcGFzdGUobmFtZXMoc3VpY2lkZS5zX3BpZSksICI6ICIsIHN1aWNpZGUuc19waWUpLA0KICAgIGNleCA9IDAuOCkNCg0KbGVnZW5kKCJ0b3ByaWdodCIsIGluc2V0ID0gYygtMC41LCAwKSwgdGl0bGUgPSAiUsOpcGFydGl0aW9uIGRlcyBjYXTDqWdvcmllc1xuIGRlIHNjb3JlIGRlIHN1aWNpZGUiLA0KICAgICAgIGNleCA9IDAuOCwgZmlsbCA9IGNvbG9ycywgbGVnZW5kID0gbmFtZXMoc3VpY2lkZS5zX3BpZSkpDQpkZXAuY29uc19waWUgPC0gdGFibGUoc21wJGRlcC5jb25zKQ0KY29sb3JzIDwtIGJyZXdlci5wYWwobGVuZ3RoKGRlcC5jb25zX3BpZSksICJTZXQzIikNCg0KcGllKGRlcC5jb25zX3BpZSwgY29sID0gY29sb3JzLA0KICAgIG1haW4gPSAiUsOpcGFydGl0aW9uIGRlcyBcbmNhdMOpZ29yaWVzIGTDqXByZXNzaXZlIiwNCiAgICBsYWJlbHMgPSBwYXN0ZShuYW1lcyhkZXAuY29uc19waWUpLCAiOiAiLCBkZXAuY29uc19waWUpLA0KICAgIGNleCA9IDAuOCkNCg0KbGVnZW5kKCJ0b3ByaWdodCIsIGluc2V0ID0gYygtMC41LCAwKSwgdGl0bGUgPSAiUsOpcGFydGl0aW9uIGRlcyBcbmNhdMOpZ29yaWVzIGTDqXByZXNzaXZlIiwNCiAgICAgICBjZXggPSAwLjgsIGZpbGwgPSBjb2xvcnMsIGxlZ2VuZCA9IG5hbWVzKGRlcC5jb25zX3BpZSkpDQoNCmBgYA0KDQoNCioqSW50ZXJwcmV0YXRpb24gKEdyYXBoNyk6KioNCk5vdXMgYXZvbnMgZGV1eCBncmFwaGlxdWVzIGNpcmN1bGFpcmVzIGFmZmljaGFudCBsYSByw6lwYXJ0aXRpb24gZGVzIGNhdMOpZ29yaWVzIHBvdXIgbGVzIHNjb3JlcyBkZSBzdWljaWRlIGV0IGxlcyBjYXTDqWdvcmllcyBkw6lwcmVzc2l2ZXMuIENoYXF1ZSBncmFwaGlxdWUgcHLDqXNlbnRlIHVuZSB2dWUgdmlzdWVsbGUgZGUgbGEgcsOpcGFydGl0aW9uIGRlcyBkaWZmw6lyZW50ZXMgY2F0w6lnb3JpZXMgZW4gcG91cmNlbnRhZ2UgcGFyIHJhcHBvcnQgw6AgbCdlbnNlbWJsZSBkZXMgb2JzZXJ2YXRpb25zLg0KTGUgcHJlbWllciBncmFwaGlxdWUgcHLDqXNlbnRlIGxhIHLDqXBhcnRpdGlvbiBkZXMgY2F0w6lnb3JpZXMgZGUgc2NvcmUgZGUgc3VpY2lkZSAobm90w6kgZGUgMCDDoCA1IGF2ZWMgdW4gc2NvcmUgw6lsZXbDqSBkZSBzdWljaWRlLCB0YW5kaXMgcXVlIGxlIHNlY29uZCBtb250cmUgbGEgcsOpcGFydGl0aW9uIGRlcyBjYXTDqWdvcmllcyBkw6lwcmVzc2l2ZXMgKDAgcG91ciBhYnNlbmNlIGRlIGRlcHJlc3Npb24gZXQgMSBwb3VyIHNhIHByZXNlbmNlKS4gDQpMZXMgbMOpZ2VuZGVzIGFkamFjZW50ZXMgYXV4IGdyYXBoaXF1ZXMgZm91cm5pc3NlbnQgZGVzIGV4cGxpY2F0aW9ucyBzdXIgY2hhcXVlIGNvdWxldXIgdXRpbGlzw6llIGV0IGxlcyBjYXTDqWdvcmllcyBxdSdlbGxlcyByZXByw6lzZW50ZW50LiBMZXMgdGl0cmVzIGRlcyBncmFwaGlxdWVzIGluZGlxdWVudCBjbGFpcmVtZW50IGxlIHR5cGUgZGUgZG9ubsOpZXMgcHLDqXNlbnTDqSBkYW5zIGNoYXF1ZSBncmFwaGlxdWUgY2lyY3VsYWlyZS4NCg0KDQpgYGB7cn0NCmdncGxvdChkYXRhID0gc21wLmMsIGFlcyh4ID0gc21wLmMkcnMsIHkgPXNtcC5jJGFnZSkpICsNCiAgZ2VvbV9ib3hwbG90KGZpbGwgPSAibGlnaHRibHVlIiwgY29sb3IgPSAiYmx1ZSIpICsNCiAgbGFicyh4ID0gInJlY2hlcmNoZSBkZSBzZW5zYXRpb24iLCB5ID0gImFnZSIsIHRpdGxlID0gIkJveHBsb3QgZGUgbGEgVmFyaWFibGUgcmVjaGVyY2hlIGRlIHNlbnNhdGlvbiAgZW5cbiBmb25jdGlvbiBkZSBsYSBWYXJpYWJsZSBhZ2UgIChHcmFwaCA4KSIpDQpgYGANCg0KKipJbnRlcnByZXRhdGlvbioqDQpDZSBncmFwaGlxdWUgbWV0IGVuIMOpdmlkZW5jZSBsYSByZWxhdGlvbiBlbnRyZSBsYSByZWNoZXJjaGUgZGUgc2Vuc2F0aW9uIGV0IGwnw6JnZSBkZXMgZMOpdGVudXMuDQpPbiBvYnNlcnZlIGljaSBxdWUsIGdsb2JhbGVtZW50LCBsYSBkaXN0cmlidXRpb24gZW4gw6JnZSBlc3QgbMOpZ8OocmVtZW50IHN1cMOpcmlldXJlIHF1YW5kIG9uIGEgdW4gZmFpYmxlIG5pdmVhdSBkZSBzZW5zYXRpb24sIHBsdXTDtHQgcXVlIHF1YW5kIG9uIGEgdW4gbml2ZWF1IGRlIHNlbnNhdGlvbiDDqWxldsOpLg0KQ2UgcXVpIG1vbnRyZSBxdWUgbGVzIGTDqXRlbnVzIHBsdXMgamV1bmVzIG9udCB0ZW5kYW5jZSDDoCByZWNoZXJjaGVyIHBsdXMgZGUgc2Vuc2F0aW9ucyBxdWUgbGVzIGTDqXRlbnVzIHBsdXMgw6Jnw6lzLg0KQ2V0dGUgdmlzdWFsaXNhdGlvbiBwZXJtZXQgZGUgY29tcHJlbmRyZSBjb21tZW50IGwnw6JnZSBkZXMgZMOpdGVudXMgcGV1dCBpbmZsdWVuY2VyIGxldXIgY29tcG9ydGVtZW50IGVuIG1hdGnDqHJlIGRlIHJlY2hlcmNoZSBkZSBzZW5zYXRpb24uIENldHRlIG9ic2VydmF0aW9uIHBvdXJyYWl0IMOqdHJlIHV0aWxlIHBvdXIgY29tcHJlbmRyZSBjb21tZW50IGxlcyBmYWN0ZXVycyBpbmRpdmlkdWVscyBwZXV2ZW50IGluZmx1ZW5jZXIgbGEgc2FudMOpIG1lbnRhbGUgZW4gbWlsaWV1IGNhcmPDqXJhbC4NCg0KDQpgYGB7cn0NCmdncGxvdChkYXRhID0gc21wLmMsIGFlcyh4ID0gc21wLmMkYWxjLmNvbnMsIHkgPXNtcC5jJGR1ci5pbnRlcnYpKSArDQogIGdlb21fYm94cGxvdChmaWxsID0gImxpZ2h0cGluayIsIGNvbG9yID0gInBpbmsiKSArDQogIGxhYnMoeCA9ICJBZGRpY3Rpb24gw6AgbCdhbGNvb2wiLCB5ID0gIkR1csOpw6kgZCdlbnRyZXZ1ZSBkZXMgZMOpdGVudXMgIiwgdGl0bGUgPSAiQm94cGxvdCBkdSBuaXZlYXUgZGUgZGVwZW5kYW5jZSDDoCBsJ2FsY29vbCBlbiBcbmZvbmN0aW9uIGRlIGxhIGR1csOpZSBkJ2VudHJldGllbiBhdmVjIGxlcyBkw6l0ZW51cyhHcmFwaCA5KSIpDQpgYGANCg0KKipJbnRlcnByw6l0YXRpb24gOioqIENlIGdyYXBoaXF1ZSBtZXQgZW4gw6l2aWRlbmNlIGxhIGR1csOpZSBkJ2VudHJldGllbiBhdmVjIGxlcyBkw6l0ZW51cyBldCBsYSBkZXBlbmRhbmNlIMOgIGwnYWxjb29sIGRlcyBkw6l0ZW51cy4gSWwgbW9udHJlIHF1ZSBsZXMgZGV0ZW51cyBkZXBlbmRhbnQgZGUgbCdhbGNvb2wgb250IHBhc3PDqSBsZWdlcmVtZW50IHBsdXMgZGUgdGVtcHMgcXVlIGxlcyBhdXRyZXMuDQogIA0KDQoNCg0KYGBge3J9DQpnZ3Bsb3QoZGF0YSA9IHNtcC5jLCBhZXMoeCA9IHNtcC5jJHNlcGFyYXRpb24sIHkgPXNtcC5jJG4uZnJhdHJpZSkpICsNCiAgZ2VvbV9ib3hwbG90KGZpbGwgPSAibGlnaHRncmVlbiIsIGNvbG9yID0gImdyZWVuIikgKw0KICBsYWJzKHggPSAiU2VwYXJhdGlvbiBkZSBsYSBmYW1pbGxlIMOgIGwnZW5mYW5jZSIsIHkgPSAiVGFpbGxlIGRlIGxhIGZyYXRyaWUiLCB0aXRsZSA9ICJCb3hwbG90IGRlIGxhIHNlcGFyYXRpb24gIFxuZW4gZm9uY3Rpb24gZGUgbGEgdGFpbGxlIGRlIGxhIGZyYXRyaWUgKEdyYXBoMTApIikNCmBgYA0KDQoqKkludGVycHLDqXRhdGlvbiA6KiogQ2UgZ3JhcGhpcXVlIG1ldCBlbiDDqXZpZGVuY2UgbGEgcmVsYXRpb24gZW50cmUgbGEgc8OpcGFyYXRpb24gZGUgbGEgZmFtaWxsZSDDoCBsJ2VuZmFuY2UgZXQgbGEgdGFpbGxlIGRlIGxhIGZyYXRyaWUgZGVzIGTDqXRlbnVzLiBJbCBtb250cmUgcXUnaWwgeSBhIHVuZSB2YXJpYXRpb24gZGFucyBsYSBzw6lwYXJhdGlvbiBkZSBsYSBmYW1pbGxlIGVuIGZvbmN0aW9uIGRlIGxhIHRhaWxsZSBkZSBsYSBmcmF0cmllLk9uIHJlbWFycXVlIHF1ZSBsZXMgZMOpdGVudXMgc8OpcGFyw6lzIGRlIGxldXJzIGZhbWlsbGUgb24gZW4gbW95ZW5uZSBsZWdlcmVtZW50IHBsdXMgZGUgZnJlcmVzIGV0IHNvZXVycyBxdWUgbGVzIGRldHVudXMgcXVpIG4nZXRhaWVudCBwYXMgc8OpcGFyw6lzIGRlIGxldXJzIGZhbWlsbGUuDQogIENldHRlIHZpc3VhbGlzYXRpb24gcGVybWV0IGQnaWRlbnRpZmllciB1biBjZSBsaWVuIGVudHJlIGxhIHPDqXBhcmF0aW9uIGRlIGxhIGZhbWlsbGUgw6AgbCdlbmZhbmNlIGV0IGxhIHRhaWxsZSBkZSBsYSBmcmF0cmllIGRlcyBkw6l0ZW51cy4gQ2V0dGUgb2JzZXJ2YXRpb24gaW1wbGlxdWUgbm91cyBpbmNpdGUgw6AgY29tcHJlbmRyZSBjb21tZW50IGNlcyBmYWN0ZXVycyBmYW1pbGlhdXggcG91cnJhaWVudCBpbmZsdWVuY2VyIGxhIHNhbnTDqSBtZW50YWxlIGVuIG1pbGlldSBjYXJjw6lyYWwuDQoNCiMgVEVTVFMgU1RBVElTVElRVUVTIA0KDQojIyBDT01QQVJBSVNPTiBERSBERVVYIFBPVVJDRU5UQUdFUyA6IFRlc3QgZHUgS2hpMg0KTm91cyBhbGxvbnMgdGVzdGVyIHNpIGxhIHByw6l2YWxlbmNlIGRlIGxhIGTDqXByZXNzaW9uIGVzdCBwbHVzIMOpbGV2w6kgY2hleiBsZXMgZGV0ZW51cyBxdWkgc29udCBhZGRpY3RzIMOgIGwnYWxjb29sIG91IHBhcy4NCg0KYGBge3J9DQp0YjwtdGFibGUoYWxjLmNvbnMsIGRlcC5jb25zLCBkZXBhcnNlLmxldmVsPTIpDQprYWJsZShwcm9wLnRhYmxlKHRiLDEpKjEwMCkNCmBgYA0KDQpPbiByZW1hcnF1ZSBxdWUgcHLDqHMgZGUgMzUlIGRlIGRldGVudXMgZMOpcHJlc3NpZnMgbmUgc29udCBwYXMgYWRkaWN0cyDDoCBsJ2FsY29vbCBhbG9ycyBxdWUgY2UgcG91cmNlbnRhZ2UgZXN0IHF1YXNpbWVudCBsZSBkb3VibGUsIHByw6hzIGRlIDU2JSBkZXMgZGV0ZW51cyBkw6lwcmVzc2lmcyBzb250IGFkZGljdGUgw6AgbCdhbGNvb2wsIGNlIHF1aSBtb250cmUgcXVlIGxlcyBkw6l0ZW51cyBkw6lwcmVzc2lmcyBwYXNzZW50IGxldXIgdGVtcHMgw6Agc2Ugc2FvdWxlci4NCk1haXMgdGVzdG9ucyBjZWxhIDoNCg0KYGBge3IsIGluY2x1ZGU9RkFMU0V9DQpjaGlzcS50ZXN0KHNtcC5jJGRlcC5jb25zLHNtcC5jJGFsYy5jb25zLCBjb3JyZWN0ID0gRkFMU0UpDQpgYGANCg0KTGEgcC12YWx1ZSDDqWdhbGUgw6AgMy44MzVlLTA2IGNlIHF1aSBlc3QgYmllbiBpbmbDqXJpZXVyIMOgIDAuMDUsIG9uIHBldXQgYWZmaXJtZXIgYXZlYyBjZXJ0aXR1ZGUgcXVlIGxlIGhhc2FyZCBsdWkgc2V1bCBuZSBwZXV0IHBhcyBleHBsaXF1ZXIgY2V0dGUgZGlmZsOpcmVuY2UgZGUgcHLDqXZhbGVuY2UgZGUgZMOpcHJlc3Npb24uDQoNCiMjIENPTVBBUkFJU09OIERFIERFVVggTU9ZRU5ORVMgOiB0ZXN0IGRlIHN0dWRlbnQNCkNvbmRpdGlvbnMgZGUgdmFsaWRpdMOpIA0KKiouKiogT24gYSBhdSBtb2lucyAzMCBvYnNlcnZhdGlvbnMgcGFyIGdyb3VwZSDDoCBjb21wYXJlciwgDQoNCmBgYHtyfQ0KaGlzdChzbXAkZHVyLmludGVydikNCmBgYA0KDQpPbiByZW1hcnF1ZSBxdWUgbGEgdmFyaWFibGUgImR1csOpZSBkJ2VudHJldGllbiIgc3VpcyB1bmUgZGlzdHJpYnV0aW9uIGFwcHJveGltYXRpdmVtZW50IG5vcm1hbGUgY2FyIGFwcsOocyB2ZXJpZmljYXRpb24gZGUgc29uIGhpc3RvZ3JhbW1lIG9uIHJlbWFycXVlIHVuZSBhbGx1cmUgZ2F1c3NpZW5uZSBhdmVjIHVuZSBjb3VyYmUgZW4gY2xvY2hlLiBOb3VzIHBvdXZvbnMgw6lnYWxlbWVudCBsZSBjb25zdGF0ZXIgZ3JhcGhpcXVlbWVudCBhdmVjIHVuIFEtUSBwbG90Lg0KDQoqLiogT24gdmVyaWZpZSBzaSBsYSB2YXJpYW5jZSBkZSBsYSBkdXLDqWUgZGUgbCdlbnRyZXRpZW4gcGFyIGNoYXF1ZSBncm91cGUgZGUgcHJlc2VuY2Ugb3Ugbm9uIGRlIGTDqXByZXNzaW9uIGF1cHLDqHMgZGVzIGTDqXRlbnVzLg0KDQpgYGB7cn0NCmJ5KHNtcCRkdXIuaW50ZXJ2LCBzbXAkZGVwLmNvbnMsIHNkLCBuYS5ybT0gVFJVRSkNCmBgYA0KDQpMJ8OpY2FydCB0eXBlIGVudHJlIGRlIGxhIGR1csOpZSBkJ2VudHJldGllbiBkZXMgZMOpdGVudXMgZGVwcmVzc2lmcyBlc3QgZGUgMTkuNzQgZXQgY2VsdWkgZGVzIGTDqXRlbnVzIG5vbiBkw6lwcmVzc2lmIGVzdCBkZSAxOS4wNiBjZSBxdWkgZXN0IGFwcHJveGltYXRpdmVtZW50IMOpZ2F1eCwgbGEgc2Vjb25kZSBjb25kaXRpb24gYXVzc2kgZXN0IHbDqXJpZmnDqWUgLCBvbiBwcm9jw6hkZSBhbG9ycyBhdSB0ZXN0IGRlIHN0dWRlbnQuDQoNCmBgYHtyfQ0KdC50ZXN0KHNtcCRkdXIuaW50ZXJ2fnNtcCRkZXAuY29ucywgdmFyLmVxdWFsPVRSVUUpDQpgYGANCg0KQ29tbWUgcsOpc3VsdGF0LCBub3VzIGF2b25zIHRvdXQgZCdhYm9yZCBsZSBwIMOpZ2FsIMOgIDEuOWUtMDcsIG9uIGNvbnN0YXRlIHF1ZSBsZSBwIGVzdCBsYXJnZW1lbnQgaW5mw6lyaWV1ciDDoCAwLDA1LCBvbiBwZXV0IGRvbmMgZGlyZSBxdSdpbCBleGlzdGUgdW5lIGRpZmbDqXJlbmNlIHN0YXRpc3RpcXVlbWVudCBzaWduaWZpY2F0aXZlIGRlIGR1csOpZSBkJ2VudHJldGllbiBlbnRyZSBsZXMgZMOpdGVudXMgcXVpIHNvbnQgZMOpcHJlc3NpZnMgZXQgbGVzIGTDqXRlbnVzIHF1aSBuZSBsZSBzb250IHBhcy4NCg0KIyMgVEVTVCBERSBOVUxMSVTDiSBERSBDT1JSw4lMQVRJT05TIDogQXBwcm9jaGUgZGUgUGVhcnNvbicNCiouKiBMYSBkaXN0cmlidXRpb24gZGUgbGEgdmFyaWFibGUgZHVyw6llIGRlIGwnZW5xdcOqdGUgc3VpcyB1bmUgbG9pIG5vcm1hbGUuDQpOb3VzIGFsbG9ucyBkb25jIHRlc3RlciDDoCAwIGNldHRlIGNvcnLDqWxhdGlvbiBlbnRyZSBsYSBkdXLDqWUgZGUgbCdlbnF1ZXRlIGV0IGxlIHNjb3JlIGRlIGNvbXBvcnRlbWVudCBzdWljaWRhaXJlLg0KDQpgYGB7cn0NCmNvci50ZXN0KHNtcCRkdXIuaW50ZXJ2LCBzbXAkc3VpY2lkZS5zKQ0KYGBgDQoNCk9uIGEgZCdhYm9yZCBsZSBwIHF1aSBpY2kgZXN0IGV4dHLDqm1lbWVudCBmYWlibGUsIGluZsOpcmlldXIgw6AgMTAtNy4gTGEgY29ycsOpbGF0aW9uIGVzdCBkb25jIHRyw6hzIHNpZ25pZmljYXRpdmVtZW50IG5vbiBudWxsZSwgbGEgY29ycsOpbGF0aW9uIGVzdCAwLDIwMi4gSWwgeSBhIGJpZW4gdW5lIGNvcnLDqWxhdGlvbiBwb3NpdGl2ZSBlbnRyZSBsYSBkdXLDqWUgZGUgbCdlbnRyZXRpZW4gIGV0IGxlIHNjb3JlIGRlIHJpcXVlIGRlIHN1aWNpZGUuIE9uIHNhaXQgcXVlIGxhIGNvcnLDqWxhdGlvbiBkZSAwLDIyIHF1ZSBsJ29uIGEgb2JzZXJ2w6llIGVzdCBjZWxsZSBxdWkgYSDDqXTDqSBvYnNlcnbDqWUgZGFucyBsJ8OpY2hhbnRpbGxvbiBkZXMgNzk5IGTDqXRlbnVzLg0KQWxvcnMgInF1ZWxsZSBlc3QgbGEgdmFsZXVyIHBvc3NpYmxlIGRlIGxhIGNvcnLDqWxhdGlvbiBlbnRyZSBsYSBkdXLDqWUgZGUgbCdlbnF1w6p0ZSBvdSBkZSBsJ2VudHJldGllbiAgZXQgc2NvcmUgZGUgcmlzcXVlIHN1aWNpZGFpcmVzLCBub24gcGFzIGRhbnMgY2V0IMOpY2hhbnRpbGxvbiBtYWlzIGRhbnMgbCdlbnNlbWJsZSBkZSBsYSBwb3B1bGF0aW9uIHRvdGFsZSBkZXMgZMOpdGVudXMgPyIgRWggYmllbiwgaWwgeSA5NSBjaGFuY2VzIHN1ciAxMDAgcXVlIGNldHRlIGNvcnLDqWxhdGlvbiBzb2l0IGNvbXByaXNlIGVudHJlICAwLDEzMTE5MzUgJiAwLDI3MjMyOTUuDQoNCg0KDQojIEFOQUxZU0UgTVVMVElWQVJJw4lFIDogQU5BTFlTRSBERSBDT1JSRVNPTkRBTkNFIE1VTFRJUExFIChBQ00pDQoNCk5vdXMgYWxsb25zIGZhaXJlIGljaSB1bmUgQW5hbHlzZSBkZXMgQ29ycmVzcG9uZGFuY2VzIE11bHRpcGxlcyAoQUNNKSBjYXIgYydlc3QgdW5lIG3DqXRob2RlIG11bHRpZGltZW5zaW9ubmVsbGUgcHVpc3NhbnRlIGV0IGZsZXhpYmxlLCBpZMOpYWxlIHBvdXIgZXhwbG9yZXIgbGVzIHJlbGF0aW9ucyBjb21wbGV4ZXMgYXUgc2VpbiBkZSBkb25uw6llcyBjb21wcmVuYW50IGRlcyB2YXJpYWJsZXMgZGUgZGl2ZXJzIHR5cGVzLiBDZXR0ZSBhcHByb2NoZSBlc3QgcGFydGljdWxpw6hyZW1lbnQgYWRhcHTDqWUgw6Agbm90cmUgcHJvamV0IHBvdXIgIMOpdHVkaWVyIGxlcyBhc3NvY2lhdGlvbnMgZW50cmUgbm9zIHZhcmlhYmxlcywgcXVpIHNvbnQgaMOpdMOpcm9nw6huZXMsIHRlbGxlcyBxdWUgZGVzIHZhcmlhYmxlcyBjYXTDqWdvcmllbGxlcywgb3JkaW5hbGVzLCBiaW5haXJlIGV0IHF1YW50aXRhdGl2ZXMsIGV0IG5vcyBpbmRpdmlkdXMgc29udCBhbm9ueW1lcy4gR3LDomNlIMOgIHNhIGNhcGFjaXTDqSDDoCBnw6lyZXIgY2VzIGRpZmbDqXJlbnRlcyBuYXR1cmVzIGRlIGRvbm7DqWVzLCBsJ0FDTSBpY2kgdmEgbm91cyBvZmZyaXIgdW5lIHZpc2lvbiBob2xpc3RpcXVlIGV0IGFwcHJvZm9uZGllIGRlcyBpbnRlcnJlbGF0aW9ucyBlbnRyZSBsZXMgY2FyYWN0w6lyaXN0aXF1ZXMgbXVsdGlwbGVzIGRlIG5vdHJlIGJhc2UgZGUgZG9ubsOpZXMgLCBvdXZyYW50IGFpbnNpIGxhIHZvaWUgw6AgdW5lIGNvbXByw6loZW5zaW9uIHBsdXMgYXBwcm9mb25kaWUgZGUgc2VzIHN0cnVjdHVyZXMgc291cy1qYWNlbnRlcy4NCg0KDQoNCg0KYGBge3J9DQpzbXAuYyA8LSBzbXAuYyAlPiUNCiAgc2VsZWN0KHByb2YsIHJzLCBlZCwgZGVwLmNvbnMsIGFnby5jb25zLCBkciwgZWNvbGUsIHNlcGFyYXRpb24sIGp1Z2UuZW5mYW50LCBwbGFjZSwgYWxjLmNvbnMsIHN1YnN0LmNvbnMsYWJ1cywgZHVyZWUsIGRpc2NpcCwgYWdlLCBjaGFyLCBzY3ouY29ucywgZ3Jhdi5jb25zLCBwdHNkLmNvbnMsIHN1aWNpZGUucywgc3VpY2lkZS5ociwgc3VpY2lkZS5wYXN0LCBkdXIuaW50ZXJ2LCBuLmVuZmFudCwgbi5mcmF0cmllKQ0KYGBgDQoNCg0KYGBge3IsIGluY2x1ZGU9RkFMU0V9DQpwcm9wLnRhYmxlKHRhYmxlKHNtcC5jJHByb2YpKSoxMDANCmBgYA0KDQpgYGB7ciwgaW5jbHVkZT1GQUxTRX0NCnByb3AudGFibGUodGFibGUoc21wLmMkc2VwYXJhdGlvbikpKjEwMA0KYGBgDQoNCmBgYHtyLCBpbmNsdWRlPUZBTFNFfQ0KcHJvcC50YWJsZSh0YWJsZShzbXAuYyRlY29sZSkpKjEwMA0KYGBgDQoNCmBgYHtyLCBpbmNsdWRlPUZBTFNFfQ0KcHJvcC50YWJsZSh0YWJsZShzbXAuYyRzdWljaWRlLmhyKSkqMTAwDQpgYGANCg0KYGBge3IsIGluY2x1ZGU9RkFMU0V9DQpwcm9wLnRhYmxlKHRhYmxlKHNtcC5jJHNjei5jb25zKSkqMTAwDQpgYGANCg0KYGBge3IsIGluY2x1ZGU9RkFMU0V9DQpwcm9wLnRhYmxlKHRhYmxlKHNtcC5jJGRlcC5jb25zKSkqMTAwDQpgYGANCg0KYGBge3IsIGluY2x1ZGU9RkFMU0V9DQpwcm9wLnRhYmxlKHRhYmxlKHNtcC5jJGFnby5jb25zKSkqMTAwDQpgYGANCg0KYGBge3IsIGluY2x1ZGU9RkFMU0V9DQpwcm9wLnRhYmxlKHRhYmxlKHNtcC5jJGdyYXYuY29ucykpKjEwMA0KYGBgDQoNCmBgYHtyLCBpbmNsdWRlPUZBTFNFfQ0KcHJvcC50YWJsZSh0YWJsZShzbXAuYyRzdWJzdC5jb25zKSkqMTAwDQpgYGANCg0KYGBge3IsIGluY2x1ZGU9RkFMU0V9DQpwcm9wLnRhYmxlKHRhYmxlKHNtcC5jJGFsYy5jb25zKSkqMTAwDQpgYGANCg0KYGBge3IsIGluY2x1ZGU9RkFMU0V9DQpwcm9wLnRhYmxlKHRhYmxlKHNtcC5jJHB0c2QuY29ucykpKjEwMA0KYGBgDQoNCmBgYHtyLCBpbmNsdWRlPUZBTFNFfQ0KcHJvcC50YWJsZSh0YWJsZShzbXAuYyRqdWdlLmVuZmFudCkpKjEwMA0KYGBgDQoNCmBgYHtyLCBpbmNsdWRlPUZBTFNFfQ0KcHJvcC50YWJsZSh0YWJsZShzbXAuYyRwbGFjZSkpKjEwMA0KYGBgDQoNCmBgYHtyLCBpbmNsdWRlPUZBTFNFfQ0KcHJvcC50YWJsZSh0YWJsZShzbXAuYyRhYnVzKSkqMTAwDQpgYGANCg0KYGBge3IsIGluY2x1ZGU9RkFMU0V9DQpwcm9wLnRhYmxlKHRhYmxlKHNtcC5jJGRpc2NpcCkpKjEwMA0KYGBgDQoNCg0KYGBge3IsIGluY2x1ZGU9RkFMU0V9DQpwcm9wLnRhYmxlKHRhYmxlKHNtcC5jJHJzKSkqMTAwDQpgYGANCg0KYGBge3IsIGluY2x1ZGU9RkFMU0V9DQpwcm9wLnRhYmxlKHRhYmxlKHNtcC5jJGRyKSkqMTAwDQpgYGANCg0KYGBge3IsIGluY2x1ZGU9RkFMU0V9DQpwcm9wLnRhYmxlKHRhYmxlKHNtcC5jJHN1aWNpZGUucykpKjEwMA0KYGBgDQoNCmBgYHtyLCBpbmNsdWRlPUZBTFNFfQ0KcHJvcC50YWJsZSh0YWJsZShzbXAuYyRzdWljaWRlLnBhc3QpKSoxMDANCmBgYA0KDQpgYGB7ciwgaW5jbHVkZT1GQUxTRX0NCnByb3AudGFibGUodGFibGUoc21wLmMkZHVyZWUpKSoxMDANCmBgYA0KDQoNCmBgYHtyfQ0Kc21wLmMkYWdlPC1hcy5mYWN0b3IoYWdlKQ0Kc21wLmMkZHVyLmludGVydjwtYXMuZmFjdG9yKGR1ci5pbnRlcnYpDQpzbXAuYyRwcm9mIDwtIGFzLmZhY3Rvcihwcm9mKQ0KDQpgYGANCg0KDQpgYGB7cn0NCnNtcC5jJGFnZSA8LSBpZmVsc2UoYWdlID4gMTggJiBhZ2UgPD0gMzgsICJdMTg7IDM4XSIsDQogICAgICAgICAgICAgICAgICBpZmVsc2UoYWdlID4gMzggJiBhZ2UgPD0gNTgsICJdMzg7IDU4XSIsICJdNTggZXQgKyIpKQ0KDQpzbXAuYzwtIG11dGF0ZShzbXAuYywNCiAgICAgICAgICAgICAgICBhZ2VfMThfMzggPSBpZmVsc2UoYWdlID09ICJdMTg7IDM4XSIsIDEsIDApLA0KICAgICAgICAgICAgICAgIGFnZV8zOF81OCA9IGlmZWxzZShhZ2UgPT0gIl0zODsgNThdIiwgMSwgMCksDQogICAgICAgICAgICAgICAgYWdlXzU4X3BsdXMgPSBpZmVsc2UoYWdlID09ICJdNTggZXQgKyIsIDEsIDApKQ0KDQpgYGANCg0KDQpgYGB7cn0NCnNtcC5jJGR1ci5pbnRlcnYgPC0gaWZlbHNlKGR1ci5pbnRlcnYgPD0gNDAsICJdMDsgNDBdIiwNCiAgICAgICAgICAgICAgICAgIGlmZWxzZShkdXIuaW50ZXJ2ID4gNDAgJiBkdXIuaW50ZXJ2IDw9IDgwLCAiXTQwOyA4MF0iLCAiXTgwOyAxMjBdIikpDQoNCnNtcC5jPC0gbXV0YXRlKHNtcC5jLA0KICAgICAgICAgICAgICAgIHRlbXBzXzBfNDAgPSBpZmVsc2UoZHVyLmludGVydiA9PSAiXTA7IDQwXSIsIDEsIDApLA0KICAgICAgICAgICAgICAgIHRlbXBzXzQwXzgwID0gaWZlbHNlKGR1ci5pbnRlcnYgPT0gIl00MDsgODBdIiwgMSwgMCksDQogICAgICAgICAgICAgICAgdGVtcHNfODBfMTIwID0gaWZlbHNlKGR1ci5pbnRlcnYgPT0gIl04MDsgMTIwXSIsIDEsIDApKQ0KYGBgDQoNCmBgYHtyfQ0KIyBDb252ZXJ0aXIgbGVzIG1vZGFsaXTDqXMgZGUgJ3Byb2YnIGVuIHZhcmlhYmxlcyBiaW5haXJlcw0KZHVtbXlfcHJvZiA8LSBtb2RlbC5tYXRyaXgofiBwcm9mIC0gMSwgc21wLmMgPSBzbXAuYykNCiMgQWpvdXRlciBsZXMgdmFyaWFibGVzIGJpbmFpcmVzIGF1IGRhdGFmcmFtZSBkJ29yaWdpbmUNCnNtcC5jIDwtIGNiaW5kKHNtcC5jLCBkdW1teV9wcm9mKQ0KYGBgDQoNCg0KYGBge3J9DQpzbXAuYyA8LSBzbXAuYyAlPiUNCiAgcmVuYW1lKHByb2ZzYW5zLmVtcGxvaSA9IGBwcm9mc2FucyBlbXBsb2lgKQ0KYGBgDQoNCmBgYHtyLCBpbmNsdWRlPUZBTFNFfQ0Kc21wLmMgPC0gc21wLmMgJT4lDQogIHNlbGVjdChhZ2VfMThfMzgsIGFnZV8zOF81OCwgYWdlXzU4X3BsdXMsIHRlbXBzXzBfNDAsIHRlbXBzXzQwXzgwLCB0ZW1wc184MF8xMjAsIGRlcC5jb25zLCBzY3ouY29ucywgcHRzZC5jb25zLCBzdWJzdC5jb25zLCBlY29sZSwgc3VpY2lkZS5ociwgYWxjLmNvbnMsIHN1aWNpZGUucGFzdCwgcHJvZiwgcHJvZmFncmljdWx0ZXVyLCBwcm9mYXJ0aXNhbiwgcHJvZmF1dHJlLCBwcm9mY2FkcmUsIHByb2ZlbXBsb3llLCBwcm9mb3V2cmllciwgcHJvZnByb2YuaW50ZXJtZWRpYWlyZSwgcHJvZnNhbnMuZW1wbG9pLCBycywgZWQsIGFnby5jb25zLCBkciwgc2VwYXJhdGlvbiwganVnZS5lbmZhbnQsIHBsYWNlLCBhYnVzLCBkdXJlZSwgZGlzY2lwLCBjaGFyLCBncmF2LmNvbnMsIHN1aWNpZGUucywgbi5lbmZhbnQsIG4uZnJhdHJpZSkNCmBgYA0KDQoNCmBgYHtyfQ0KYXR0YWNoKHNtcC5jKQ0KYGBgDQoNCg0KYGBge3J9DQpzbXAuYyRwcm9mYWdyaWN1bHRldXI8LWFzLmZhY3Rvcihwcm9mYWdyaWN1bHRldXIpDQpzbXAuYyRwcm9mYXJ0aXNhbjwtYXMuZmFjdG9yKHByb2ZhcnRpc2FuKQ0Kc21wLmMkcHJvZmF1dHJlPC1hcy5mYWN0b3IocHJvZmF1dHJlKQ0Kc21wLmMkcHJvZmNhZHJlPC1hcy5mYWN0b3IocHJvZmNhZHJlKQ0Kc21wLmMkcHJvZmVtcGxveWU8LWFzLmZhY3Rvcihwcm9mZW1wbG95ZSkNCnNtcC5jJHByb2ZvdXZyaWVyPC1hcy5mYWN0b3IocHJvZm91dnJpZXIpDQpzbXAuYyRwcm9mcHJvZi5pbnRlcm1lZGlhaXJlPC1hcy5mYWN0b3IocHJvZnByb2YuaW50ZXJtZWRpYWlyZSkNCnNtcC5jJHByb2ZzYW5zLmVtcGxvaTwtYXMuZmFjdG9yKHByb2ZzYW5zLmVtcGxvaSkNCnNtcC5jJGFnZV8xOF8zODwtYXMuZmFjdG9yKGFnZV8xOF8zOCkNCnNtcC5jJGFnZV8zOF81ODwtYXMuZmFjdG9yKGFnZV8zOF81OCkNCnNtcC5jJGFnZV81OF9wbHVzPC1hcy5mYWN0b3IoYWdlXzU4X3BsdXMpDQpzbXAuYyR0ZW1wc18wXzQwPC1hcy5mYWN0b3IodGVtcHNfMF80MCkNCnNtcC5jJHRlbXBzXzQwXzgwPC1hcy5mYWN0b3IodGVtcHNfNDBfODApDQpzbXAuYyR0ZW1wc184MF8xMjA8LWFzLmZhY3Rvcih0ZW1wc184MF8xMjApDQpzbXAuYyRzY3ouY29uczwtYXMuZmFjdG9yKHNjei5jb25zKQ0KYGBgDQoNCmBgYHtyfQ0Kc21wLmM8LXNtcC5jDQpgYGANCg0KYGBge3J9DQpzdW1tYXJ5KHNtcC5jKQ0KYGBgDQoNCg0KYGBge3IsIGluY2x1ZGU9RkFMU0V9DQpyZXN0PC1NQ0Eoc21wLmMsIHF1YWxpLnN1cD0xNjozNixxdWFudGkuc3VwPTM3OjM4KQ0KYGBgDQoNCg0KIyBDSE9JWCBERVMgRElNRU5TSU9OUw0KTm91cyBhbGxvbnMgaWNpIGZhaXJlIHVuIGFyYml0cmFnZSBjb25jZXJuYW50IGxlIGNob2l4IGRlcyBkaW1lbnNpb25zLiBJbCBlc3QgZW4gZWZmZXQgZXNzZW50aWVsIGRlIHJlY291cmlyIMOgIHVuIGFyYml0cmFnZSBjb25jZXJuYW50IGxlcyBkaW1lbnNpb25zIGFmaW4gZOKAmWF2b2lyIG1hdGnDqHJlIMOgIHRlbnRlciBk4oCZZXhwbGlxdWVyIGF1IG1pZXV4IGTigJlleHBsaXF1ZXIgbOKAmWluZm9ybWF0aW9uLg0KUG91ciBjZSBmYWlyZSBub3VzIGFsbG9ucyByZXNwZWN0ZXIgbGEgKipsb2kgZGUgY291ZGUqKiwgcXVpIGNvbnNpc3RlIMOgIHJlcMOpcmVyIGwnZW5kcm9pdCDDoCBwYXJ0aXIgZHVxdWVsIGxlIHBvdXJjZW50YWdlIGQnaW5lcnRpZSBkaW1pbnVlIGJlYXVjb3VwIHBsdXMgbGVudGVtZW50IGxvcnNxdWUgbCdvbiBwYXJjb3VydCBsZSBkaWFncmFtbWUgZGVzIMOpYm91bGlzIGRlIGdhdWNoZSDDoCBkcm9pdGUgZm9ybWFudCB1biBjb3VkZS4NCk5vdXMgZMOpY2lkb25zLCBjb21wdGUgdGVudSBkZXMgcsOpc3VsdGF0cyBkZSBs4oCZQUNNIGRlIGdhcmRlciA1IGRpbWVuc2lvbnMgcHJpbmNpcGFsZXMgQ2UgcXVpIHZhIHBlcm1ldHRyZSBk4oCZZXhwbGlxdWVyIDMzJSBkZSBs4oCZaW5mb3JtYXRpb247IEF1c3NpIEZhY3RvbWluZXIgbm91cyBsaW1pdGUgw6AgY2lucSBkaW1lbnNpb25zIHBvdXIgbCdBQ00gOg0KDQpgYGB7cn0NCmhpc3QocmVzdCRlaWcpDQpgYGANCg0KIyBBTkFMWVNFIEdSQVBISVFVRQ0KDQpgYGB7cn0NCnBsb3QocmVzdCxjaG9peD0iaW5kIixheGVzPWMoMToyKSxpbnZpc2libGU9YygidmFyIiwicXVhbGkuc3VwIiksIGNleCA9IDAuOSkNCmZ2aXpfbWNhX2luZChyZXN0LCBjb2wuaW5kID0gImNvczIiLCBheGVzID0gYygxLCAyKSwgY2V4ID0gMC44KSANCnBsb3QocmVzdCxpbnZpc2libGU9YygidmFyIiwiaW5kIikpDQpmdml6X21jYV92YXIocmVzdCwgY29sLnZhciA9ICJjb250cmliIiwgYXhlcyA9IGMoMSwgMiksIGNleCA9IDAuOCkgDQpgYGANCg0KRGFucyBub3RyZSBhbmFseXNlIGRlIGdyYXBoZSBkZXMgY29ycmVzcG9uZGFuY2VzIG11bHRpcGxlcyAoQUNNKSwgbCdheGUgMSBkw6ltb250cmUgdW4gRWZmZXQgR3V0bWFubiByw6l2w6lsYXRldXIgZCd1bmUgcHJvZ3Jlc3Npb24gbW9ub3RvbmUgZGVzIGNhdMOpZ29yaWVzIHByb2Zlc3Npb25uZWxsZXMuIEVuIHByb2pldGFudCBjZXMgY2F0w6lnb3JpZXMgc3VyIGwnYXhlIDEgZGUgbCdBQ00sIHVuZSBzdHJ1Y3R1cmUgbGluw6lhaXJlIG5vbWluYWxlIMOpbWVyZ2UsIGF2ZWMgdW5lIHPDqXF1ZW5jZSBzJ8OpdGVuZGFudCBkZXMgcHJvZmVzc2lvbnMgbGVzIHBsdXMgw6AgZ2F1Y2hlIHZlcnMgbGEgY2F0w6lnb3JpZSBkZXMgYWdyaWN1bHRldXJzIMOgIGRyb2l0ZS4gTCdheGUgMiBxdWFudCDDoCBsdWkgbWV0IGVuIMOpdmlkZW5jZSB1bmUgb3Bwb3NpdGlvbiBlbnRyZSBsZXMgZXh0csOqbWVzIGRlIGxhIGR1csOpZSBkJ2VudHJldnVlLg0KDQpPbiBvYnNlcnZlIHVuZSBkaXNzZW1ibGFuY2UgZW50cmUgbGVzIGdyb3VwZXMgZCdpbmRpdmlkdXMgc2Vsb24gbGVzIHRyYW5jaGVzIGQnw6JnZSwgZW50cmUgMzggZXQgNTggYW5zICjDomdlXzM4XzU4XzEpIGxvY2FsaXPDqXMgZGFucyBsYSBwYXJ0aWUgc3Vww6lyaWV1cmUgZ2F1Y2hlLCBldCBjZXV4IGVudHJlIDE4IGV0IDM4IGFucyAow6JnZV8xOF8zOF8xKSBzaXR1w6lzIGRhbnMgbGEgcGFydGllIGluZsOpcmlldXJlIGRyb2l0ZS4NCg0KTGVzIGluZGl2aWR1cyBwb3NpdGlvbm7DqXMgZGFucyBsZSBxdWFkcmFudCBzdXDDqXJpZXVyIGRyb2l0LCB0ZWxzIHF1ZSBsZXMgZMOpdGVudXMgMjQyLCAxMzAgZXQgNjE2LCBwcsOpc2VudGVudCB1biBwcm9maWwgYXNzb2Npw6kgw6AgdW4gcmlzcXVlIMOpbGV2w6kgZGUgc3VpY2lkZSwgZGVzIHRyb3VibGVzIGRlIHBlcnNvbm5hbGl0w6kgb3UgZGUgY29tcG9ydGVtZW50LCBhaW5zaSBxdSfDoCBkZXMgZGlhZ25vc3RpY3Mgc8OpdsOocmVzIGluY2x1YW50IGRlcyBwYXRob2xvZ2llcyBncmF2ZXMgZXQgZGVzIHRyb3VibGVzIHBvc3QtdHJhdW1hdGlxdWVzLiBDZXMgZMOpdGVudXMgc2VtYmxlbnQgc291ZmZyaXIgZGUgZMOpcHJlc3Npb24gZXQgbW9udHJlbnQgZGVzIGNvbXBvcnRlbWVudHMgYWRkaWN0aWZzIGVudmVycyBsJ2FsY29vbCBldCBsZXMgc3Vic3RhbmNlcy4gRGUgcGx1cywgaWxzIG9udCBnw6luw6lyYWxlbWVudCBwYXNzw6kgcGx1cyBkZSB0ZW1wcyBlbiBlbnRyZXZ1ZSBxdWUgbGEgbW95ZW5uZS4NCg0KVW5lIG9wcG9zaXRpb24gc2VtYmxlIMOpZ2FsZW1lbnQgc2UgZGVzc2luZXIgc3VyIGxhIGRldXhpw6htZSBkaW1lbnNpb24gZW50cmUgbGVzIGluZGl2aWR1cyDDoCBoYXV0IHJpc3F1ZSBzdWljaWRhaXJlIGV0IGNldXggYXlhbnQgdW4gbml2ZWF1IMOpbGV2w6kgZGUgc2NvbGFyaXNhdGlvbi4NCg0KTGEgem9uZSBpbmbDqXJpZXVyZSBnYXVjaGUsIHF1YW50IMOgIGVsbGUsIGVuZ2xvYmUgZGVzIGTDqXRlbnVzIG5vbiBkw6lwcmVzc2lmcyBuaSBhZ29yYXBob2Jlcywgc2FucyByaXNxdWUgc3VpY2lkYWlyZSBhcHBhcmVudC4gSWxzIG9udCB1biBuaXZlYXUgw6lsZXbDqSBkJ8OpZHVjYXRpb24gZXQgb250IHBhc3PDqSBtb2lucyBkZSB0ZW1wcyBlbiBlbnRyZXZ1ZSBxdWUgbGEgbW95ZW5uZSwgdGVscyBxdWUgbGVzIGTDqXRlbnVzIDE4MiwgMzA0LCA0NTMgZXQgNTYzLg0KDQpMZSBncmFwaGlxdWUgZGVzIGluZGl2aWR1cyAoRGltMSwgRGltMikgbmUgcHLDqXNlbnRlIHBhcyBkZSB0ZW5kYW5jZSBzcMOpY2lmaXF1ZSBvdSBwYXJ0aWN1bGnDqHJlLCBuJ29iw6lpc3NhbnQgw6AgYXVjdW5lIGxvaSBkZSBtb2luZHJlIGNhcnLDqSwgZXQgcmVzdGUgdW5pZm9ybcOpbWVudCByw6lwYXJ0aSBkYW5zIHNhIGRpc3RyaWJ1dGlvbiwgbm9zIG9ic2VydmF0aW9ucyBzb250IGFub255bWVzLg0KDQoNCmBgYHtyfQ0KcGxvdChyZXN0LGNob2l4PSJ2YXIiLGF4ZXM9YygxOjIpKQ0KcGxvdChyZXN0LGludmlzaWJsZT1jKCJpbmQiLCJxdWFsaS5zdXAiKSkNCmBgYA0KDQpPbiBvYnNlcnZlIGNsYWlyZW1lbnQgcG91ciBsZXMgdmFyaWFibGVzIGJpbmFpcmUgdW4gcmVncm91cGVtZW50IGRlcyBtb2RhbGl0w6lzIMKrIE91aS9QcmVzZW5jZSgxKSDCuyB2ZXJzIGxlIGF1IGRlc3N1cyBkZSBsYSBkZXV4acOobWUgYmlzc2VjdHJpY2UgZCd1biBjw7R0w6kgZXQgZGVzIG1vZGFsaXTDqXMgwqsgTm9uL0Fic2Vuc2UoMCkgwrsgSWxzIHByZW5uZW50IGRvbmMgZGVzIHZhbGV1cnMgcGx1cyDDqWxldsOpZXMgcXVlIGxhIG1veWVubmUgc3VyIGxhIHBhcnRpZSBzdXDDqXJpZXVyZSBkZSBsYSBwcmVtacOocmUgZGltZW5zaW9uLg0KDQoNCg0KYGBge3J9DQpwbG90KHJlc3QsY2hvaXg9ImluZCIsaW52aXNpYmxlPWMoInZhciIsInF1YWxpLnN1cCIpLGhhYmlsbGFnZT0iZWNvbGUiLGNleD0wLjgpDQpgYGANCg0KQ2UgZ3JhcGhpcXVlIG5lIHLDqXbDqGxlIHBhcyBkZSBkw6l0YWlscyBwcsOpY2lzLCBiaWVuIHF1J2lsIHNvaXQgY2FyYWN0w6lyaXPDqSBwYXIgdW5lIGNlcnRhaW5lIGjDqXTDqXJvZ8OpbsOpaXTDqS4gQ2VwZW5kYW50LCB1bmUgYXNzb2NpYXRpb24gbm90YWJsZSBzZSBkZXNzaW5lIGVudHJlIHVuIG5pdmVhdSBkJ8OpZHVjYXRpb24gYmFzICjDqWNvbGVfMSwgcmVwcsOpc2VudMOpIGVuIG5vaXIpIGV0IHVuZSBkdXLDqWUgZCdlbnRyZXZ1ZSBwcm9sb25nw6llLiBFbiByZXZhbmNoZSwgdW5lIGR1csOpZSBkJ2VudHJldGllbiBwbHVzIGNvdXJ0ZSBzZW1ibGUgw6p0cmUgZGF2YW50YWdlIGFzc29jacOpZSDDoCBkZXMgbml2ZWF1eCBkJ8OpZHVjYXRpb24gbW95ZW5zIMOgIMOpbGV2w6lzICjDqWNvbGVfMywgw6ljb2xlXzQgZXQgw6ljb2xlXzUpLg0KDQoNCmBgYHtyfQ0KcGxvdChyZXN0LGNob2l4PSJpbmQiLGludmlzaWJsZT1jKCJ2YXIiLCJxdWFsaS5zdXAiKSxoYWJpbGxhZ2U9ImRlcC5jb25zIixjZXg9MC44LCBsYWJlbD0ibm9uZSIpDQpgYGANCg0KDQpgYGB7cn0NCnBsb3QocmVzdCxjaG9peD0iaW5kIixpbnZpc2libGU9YygidmFyIiwicXVhbGkuc3VwIiksaGFiaWxsYWdlPSJwdHNkLmNvbnMiLGNleD0wLjgpDQoNCmBgYA0KDQpDZXMgZGVybmllcnMgZ3JhcGhpcXVlcyBuZSBmb250IHF1ZSByZW5mb3JjZXIgbGEgY29uY2x1c2lvbiBzZWxvbiBsYXF1ZWxsZSBsZXMgdmFyaWFibGVzIGRpYWdub3N0aXF1ZXMgc29udCBhc3NvY2nDqWVzIMOgIHVuZSBkdXLDqWUgZCdlbnRyZXZ1ZSBwcm9sb25nw6llLiBVbmUgY29uY2VudHJhdGlvbiBub3RhYmxlIGRlIGNlcyBkaWFnbm9zdGljcyBlc3Qgb2JzZXJ2w6llIGRhbnMgbGEgcGFydGllIHN1cMOpcmlldXJlIGRyb2l0ZSBkZSBjZXMgZ3JhcGhpcXVlcy4NCg0KDQpgYGB7cn0NCnBsb3QocmVzdCxjaG9peD0idmFyIixheGVzPWMoMzo0KSkNCmBgYA0KDQoNCklsIGVzdCBvYnNlcnbDqSB1bmUgY29ycsOpbGF0aW9uIG1hcnF1w6llIGVudHJlIGxhIGNhdMOpZ29yaWUgZGUgbGEgZHVyw6llIG1veWVubmUgZGVzIGVudHJldGllbnMgKGVudHJlIDQwIGV0IDgwIG1pbnV0ZXMgLSB2YXJpYWJsZSAidGVtcHNfNDBfODAiKSBkZXMgZMOpdGVudXMgZXQgbGEgdHJvaXNpw6htZSBkaW1lbnNpb24uIERlIG3Dqm1lLCBsYSB2YXJpYWJsZSBwcm9mZXNzaW9uIChwcm9mKSBlc3QgYXNzb2Npw6llIMOgIGxhIHF1YXRyacOobWUgZGltZW5zaW9uLg0KDQoNCg0KYGBge3J9DQpmdml6X21jYV9pbmQocmVzdCxheGVzPWMoMzo0KSkNCnBsb3QocmVzdCxpbnZpc2libGU9YygidmFyIiwiaW5kIiksIGF4ZXM9YygzOjQpKQ0KYGBgDQoNCkxlIGdyYXBoaXF1ZSBkZXMgaW5kaXZpZHVzIChEaW0zICYgRGltIDQpIG1vbnRyZSB1bmUgcGFydGljdWxhcml0w6kgZGUgY2hhcXVlIGPDtHTDqSBkZSBsJ2F4ZSAyLiBMZXMgaW5kaXZpZHVzIGRhbnMgbGEgcGFydGllIHN1cMOpcmlldXJlIGdhdWNoZSBkZSBsJ2F4ZSB2ZXJ0aWNhbCBvbnQgZW4gZ8OpbsOpcmFsIHVuIG5pdmVhdSBkJ8OpZHVjYXRpb24gbW95ZW4gZXQgc29udCBwcmluY2lwYWxlbWVudCBkZXMgY2FkcmVzIG91IGRlcyBwcm9mZXNzaW9ubmVscyBpbnRlcm3DqWRpYWlyZXMsIHNvdXZlbnQgamV1bmVzLiBFbiByZXZhbmNoZSwgY2V1eCBzaXR1w6lzIGRhbnMgbGEgcGFydGllIHN1cMOpcmlldXJlIGRyb2l0ZSwgYmllbiBxdSfDomfDqXMsIGFmZmljaGVudCB1biBuaXZlYXUgZCfDqWR1Y2F0aW9uIMOpbGV2w6kuIExlcyBpbmRpdmlkdXMgZW4gYmFzIHNvbnQgbWFqb3JpdGFpcmVtZW50IGRlcyBvdXZyaWVycyBvdSBkZXMgcGVyc29ubmVzIHNhbnMgZW1wbG9pLCBldCBwcsOpc2VudGVudCBxdWVscXVlcyBkaWFnbm9zdGljcyBzcMOpY2lmaXF1ZXMuDQoNCmBgYHtyfQ0KZnZpel9tY2FfaW5kKHJlc3QsYXhlcz1jKDQ6NSksIGxhYmVsID0gIm5vbmUiKQ0KcGxvdChyZXN0LGNob2l4PSJ2YXIiLCBheGVzPWMoNDo1KSkNCnBsb3QocmVzdCxpbnZpc2libGU9YygidmFyIiwiaW5kIiksIGF4ZXM9Yyg0OjUpKQ0KYGBgDQoNCg0KDQoNCg0KYGBge3IsIGluY2x1ZGU9RkFMU0V9DQpzbXAgJT4lIA0KICBmaWx0ZXIoYWdlPj01MCAmIGR1ci5pbnRlcnYgPj02MCwgbmEucm0gPSBUUlVFKSAlPiUNCiAgY291bnQoKQ0KICANCmBgYA0KDQoNCg0KDQoNCg0KIyBDTEFTU0lGSUNBVElPTiANCg0KYGBge3IsIGluY2x1ZGU9RkFMU0V9DQojIEVmZmVjdHVlciBsYSBjbGFzc2lmaWNhdGlvbiAoY2x1c3RlcmluZykgYXZlYyBsJ2FsZ29yaXRobWUgay1tZWFucw0Kbm9tYnJlX2NsdXN0ZXJzIDwtIDMgICMgRMOpZmluaXIgbGUgbm9tYnJlIGRlIGNsdXN0ZXJzIHNvdWhhaXTDqQ0KY2x1c3RlcnMgPC0ga21lYW5zKHJlc3QkaW5kJGNvb3JkWywgYygxLCAyKV0sIGNlbnRlcnMgPSBub21icmVfY2x1c3RlcnMpICAjIFV0aWxpc2F0aW9uIGRlcyBkZXV4IHByZW1pZXJzIGF4ZXMgcG91ciBsYSBjbGFzc2lmaWNhdGlvbg0KDQojIEFmZmljaGVyIGxlcyByw6lzdWx0YXRzIGR1IGNsdXN0ZXJpbmcNCnByaW50KGNsdXN0ZXJzKQ0KYGBgDQoNCg0KYGBge3J9DQojIFZpc3VhbGlzZXIgbGVzIGluZGl2aWR1cyBhdmVjIGxldXIgYXBwYXJ0ZW5hbmNlIMOgIGNoYXF1ZSBjbHVzdGVyDQpmdml6X2NsdXN0ZXIoY2x1c3RlcnMsIGdlb20gPSAicG9pbnQiLCBkYXRhID0gcmVzdCRpbmQkY29vcmRbLCBjKDEsIDIpXSwgDQogICAgICAgICAgICAgZ2VvbV9sYWJlbCA9IFRSVUUsIGxhYmVsID0gImluZCIsIG1haW4gPSAiQ2xhc3NpZmljYXRpb24gZGVzIGluZGl2aWR1cyBhcHLDqHMgbCdBQ00iKQ0KYGBgDQoNCg0KYGBge3IsIGluY2x1ZGU9RkFMU0V9DQojIEVmZmVjdHVlciBsYSBjbGFzc2lmaWNhdGlvbiBoacOpcmFyY2hpcXVlDQpkaXN0YW5jZXMgPC0gZGlzdChyZXN0JGluZCRjb29yZFssIGMoMSwgMildLCBtZXRob2QgPSAiZXVjbGlkZWFuIikgICMgQ2FsY3VsZXIgbGEgZGlzdGFuY2UgZXVjbGlkaWVubmUgZW50cmUgbGVzIGluZGl2aWR1cw0KaGllcmFyY2hpY2FsX2NsdXN0ZXJpbmcgPC0gaGNsdXN0KGRpc3RhbmNlcywgbWV0aG9kID0gIndhcmQuRCIpICAjIE3DqXRob2RlICJ3YXJkLkQiIHBvdXIgbGEgbcOpdGhvZGUgZCdhZ3LDqWdhdGlvbg0KYGBgDQoNCmBgYHtyfQ0KIyBWaXN1YWxpc2VyIGxlIGRlbmRyb2dyYW1tZSByw6lzdWx0YW50IGRlIGxhIGNsYXNzaWZpY2F0aW9uIGhpw6lyYXJjaGlxdWUNCnBsb3QoaGllcmFyY2hpY2FsX2NsdXN0ZXJpbmcsIGhhbmcgPSAtMSwgbWFpbiA9ICJEZW5kcm9ncmFtbWUgZGUgbGEgY2xhc3NpZmljYXRpb24gaGnDqXJhcmNoaXF1ZSIpDQpgYGANCg0KTm91cyBhdm9ucyBkb25jIGljaSAzIGNsdXN0ZXJzICjDoCBoZWlnaHQgNjApLiANCk5vcyBpbmRpdmlkdXMgcmVzdGVudCBhbm9ueW1lcy4NCg0KYGBge3IsaW5jbHVkZT1GQUxTRX0NCiMgQ291cGVyIGxlIGRlbmRyb2dyYW1tZSBwb3VyIG9idGVuaXIgdW4gbm9tYnJlIHNww6ljaWZpcXVlIGRlIGNsdXN0ZXJzDQpub21icmVfY2x1c3RlcnMgPC0gMyAgIyBEw6lmaW5pciBsZSBub21icmUgZGUgY2x1c3RlcnMgc291aGFpdMOpDQpjbHVzdGVycyA8LSBjdXRyZWUoaGllcmFyY2hpY2FsX2NsdXN0ZXJpbmcsIGsgPSBub21icmVfY2x1c3RlcnMpDQoNCiMgQWZmaWNoZXIgbGVzIHLDqXN1bHRhdHMgZHUgY2x1c3RlcmluZw0KcHJpbnQoY2x1c3RlcnMpDQpgYGANCg0KDQojIENPTkNMVVNJT04NCg0KUmFwcGVsb25zIGRhbnMgdW4gcHJlbWllciB0ZW1wcyBsZXMgaHlwb3Row6hzZXMgcXVlIG5vdXMgYXZpb25zIGZvcm11bMOpZXMgOg0KDQoqMS5IeXBvdGjDqHNlIHN1ciBsZSBuaXZlYXUgZGUgc2NvbGFyaXNhdGlvbiAqIA0KDQoqMi5IeXBvdGjDqHNlIHN1cmwnaW5mbHVlbmNlIGRlIGxhIHByb2Zlc3Npb24gZHUgZMOpdGVudSogDQoNCiozLkh5cG90aMOoc2Ugc3VyIGwnZWZmZXQgZGUgbCfDomdlIGR1IGTDqXRlbnUqIA0KDQoqNC5IeXBvdGjDqHNlIHN1ciBsZXMgdmFyaWFibGVzIGRpYWdub3N0aXF1ZXMgKg0KDQoqNS4gSHlwb3RoZXNlIHN1ciBsZXMgdmFyaWFibGVzIGRlIHJpc3F1ZSBzdWljaWRhaXJlKiANCg0KQ29uY2VybmFudCBsJ2h5cG90aMOoc2UgSDEsIGwnYW5hbHlzZSBncmFwaGlxdWUgZGVzIGluZGl2aWR1cyBldCBkZXMgdmFyaWFibGVzIGTDqW1vbnRyZSBjbGFpcmVtZW50IHF1J3VuIG5pdmVhdSBkZSBzY29sYXJpc2F0aW9uIMOpbGV2w6kgZXN0IGFzc29jacOpIMOgIHVuZSBkdXLDqWUgZCdpbnRlcnZpZXcgcGx1cyBjb3VydGUsIHN1cnRvdXQgY2hleiBsZXMgaW5kaXZpZHVzIGF2ZWMgdW4gbml2ZWF1IGRlIHNvbGFyaXNhdGlvbiDDqWxldsOpLiBDZWNpIGNvbmZpcm1lIGwnaHlwb3Row6hzZSBIMSBlbiBtZXR0YW50IGVuIMOpdmlkZW5jZSBxdWUgbGUgbml2ZWF1IMOpbGV2w6kgZGUgc2NvbGFyaXNhdGlvbiwgaW5kw6lwZW5kYW1tZW50IGRlcyBhdXRyZXMgdmFyaWFibGVzLCBmYXZvcmlzZSB1bmUgZHVyw6llIGQnaW50ZXJ2aWV3IHLDqWR1aXRlLg0KDQpRdWFudCDDoCBsJ2h5cG90aMOoc2UgSDIgc3VyIGwnaW1wYWN0IGRlIGxhIHByb2Zlc3Npb24gZHUgZMOpdGVudSBzdXIgbGEgZHVyw6llIGRlIGwnZW50cmV0aWVuLCBjZXJ0YWluZXMgcHJvZmVzc2lvbnMgdGVsbGVzIHF1ZSBjYWRyZSBvdSBwcm9mZXNzaW9ubmVsIGludGVybcOpZGlhaXJlIHNlbWJsZW50IGxpw6llcyDDoCBkZXMgZW50cmV0aWVucyBwbHVzIGNvdXJ0cy4gQ2VwZW5kYW50LCBpbCBlc3QgcGVydGluZW50IGRlIG5vdGVyIHF1ZSBsYSB2YXJpYWJsZSBwcm9mZXNzaW9uIGVzdCDDqXRyb2l0ZW1lbnQgbGnDqWUgYXUgbml2ZWF1IGQnw6lkdWNhdGlvbi4gQmllbiBxdWUgZGVzIGNhZHJlcyBhaWVudCB1biBuaXZlYXUgZCfDqWR1Y2F0aW9uIMOpbGV2w6kgZXQgcGFzc2VudCBtb2lucyBkZSB0ZW1wcyBlbiBpbnRlcnZpZXcsIGNldHRlIGNvcnLDqWxhdGlvbiBuJ2VzdCBwYXMgc3lzdMOpbWF0aXF1ZSBwb3VyIHRvdXRlcyBsZXMgcHJvZmVzc2lvbnMuIEFpbnNpLCBsJ2h5cG90aMOoc2UgSDIgbidlc3QgcGFzIHJldGVudWUuDQoNCkNvbmNlcm5hbnQgbCdoeXBvdGjDqHNlIEgzLCBpbmRpcXVhbnQgcXVlIGwnw6JnZSBkdSBkw6l0ZW51IGluZmx1ZW5jZSBwb3NpdGl2ZW1lbnQgbGEgZHVyw6llIGRlIGwnZW50cmV0aWVuLCBsZXMgaW5kaXZpZHVzIHBsdXMgamV1bmVzIHBhc3NlbnQgbMOpZ8OocmVtZW50IG1vaW5zIGRlIHRlbXBzIHF1ZSBsZXMgcGVyc29ubmVzIMOiZ8OpZXMuIFBhciBjb25zw6lxdWVudCwgbCdoeXBvdGjDqHNlIEgzIGVzdCByZXRlbnVlLg0KDQpMJ2h5cG90aMOoc2UgSDQgZXN0IHNvdXRlbnVlIHBhciBkZXMgZG9ubsOpZXMgZ3JhcGhpcXVlcyBtb250cmFudCB1bmUgYXNzb2NpYXRpb24gcG9zaXRpdmUgZW50cmUgbGVzIGRpYWdub3N0aWNzIHRlbHMgcXVlIGxhIGTDqXByZXNzaW9uLCBsYSBkw6lwZW5kYW5jZSDDoCBsJ2FsY29vbCBldCBsYSBzY2hpem9waHLDqW5pZSwgZXQgdW5lIGR1csOpZSBkJ2VudHJldGllbiBwcm9sb25nw6llLiBBaW5zaSwgbCdoeXBvdGjDqHNlIEg0IGVzdCBjb25maXJtw6llLg0KDQpFbiBjZSBxdWkgY29uY2VybmUgbCdoeXBvdGjDqHNlIEg1LCBsZXMgZ3JhcGhpcXVlcyBpbmRpcXVlbnQgY2xhaXJlbWVudCBxdWUgbGVzIGTDqXRlbnVzIGF2ZWMgZGVzIGFudMOpY8OpZGVudHMgZGUgdGVudGF0aXZlIGRlIHN1aWNpZGUgb3UgcHLDqXNlbnRhbnQgdW4gaGF1dCByaXNxdWUgc3VpY2lkYWlyZSBvbnQgcGFzc8OpIHBsdXMgZGUgdGVtcHMgcXVlIGxhIG1veWVubmUgZW4gZW50cmV0aWVuLCB2YWxpZGFudCBhaW5zaSBsJ2h5cG90aMOoc2UgSDUuDQoNClBhciBhaWxsZXVycywgbm9zIGFuYWx5c2VzIHN0YXRpc3RpcXVlcyBldCBncmFwaGlxdWVzIG9udCBtaXMgZW4gbHVtacOocmUgZGVzIHNjaMOpbWFzIHNww6ljaWZpcXVlcyBjb25jZXJuYW50IGxlcyBkw6l0ZW51cyBzw6lwYXLDqXMgZGUgbGV1ciBmYW1pbGxlLCBiw6luw6lmaWNpYWlyZXMgZGUgbCdhaWRlIGQndW4ganVnZSBwb3VyIGVuZmFudCwgc2FucyBlbXBsb2kgZXQgZCd1biBjZXJ0YWluIGdyb3VwZSBkJ8OiZ2UuIENldXggcXVpIG4nb250IHBhcyDDqXTDqSBzw6lwYXLDqXMgZGUgbGV1ciBmYW1pbGxlIG5pIGFpZMOpcyBwYXIgdW4ganVnZSBwb3VyIGVuZmFudCBvbnQgdW4gbml2ZWF1IGQnw6l0dWRlcyBwbHVzIMOpbGV2w6ksIHNvbnQgcGx1cyDDomfDqXMgZXQgb2NjdXBlbnQgZGVzIHBvc3RlcyBkZSBjYWRyZSBvdSBkZSBwcm9mZXNzaW9ubmVsIGludGVybcOpZGlhaXJlLg0KDQpFbiBjb25jbHVzaW9uLCBub3VzIGF2b25zIGNvbmZpcm3DqSBxdWF0cmUgaHlwb3Row6hzZXMgc3VyIGNpbnEgKEgxLCBIMywgSDQsIEg1KSwgY29uZmlybWFudCBlbiBncmFuZGUgcGFydGllIG5vcyBoeXBvdGjDqHNlcyBzdXIgbGVzIGZhY3RldXJzIGluZmx1ZW7Dp2FudCBsYSBkdXLDqWUgZGVzIGVudHJldGllbnMgZW4gbWlsaWV1IGNhcmPDqXJhbC4gTCdBbmFseXNlIGRlcyBDb3JyZXNwb25kYW5jZXMgTXVsdGlwbGVzIChBQ00pIGEgcGVybWlzIGRlIG1pZXV4IGNvbXByZW5kcmUgbGEgYmFzZSBkZSBkb25uw6llcyBldCBkZSBtZXR0cmUgZW4gbHVtacOocmUgZGVzIHLDqXN1bHRhdHMgaW5pdGlhbGVtZW50IG1vaW5zIMOpdmlkZW50cy4NCk5vdHJlIMOpdHVkZSBhIGRlcyBsaW1pdGVzLiBE4oCZYXV0cmVzIHBhcmFtw6h0cmVzIHBvdXJyYWllbnQgbmUgcGFzIMOqdHJlIHByaXMgZW4gY29tcHRlIDsgcGFyIGV4ZW1wbGUgZW4gY2hhbmdlYW50IGxlcyB2YXJpYWJsZXMgZXQgbGVzIGluZGl2aWR1cyBzdXBwbMOpbWVudGFpcmUgDQpvdSBlbiB1dGlsaXNhbnQgZOKAmWF1dHJlIG3DqXRob2RlIGTigJlhbmFseXNlLiANCg0KDQpgYGB7cn0NCmthYmxlKHQoc3VtbWFyeShyZXN0KSkpDQpgYGANCg0KYGBge3J9DQprYWJsZShyb3VuZChyZXN0JGVpZywyKSkgDQpgYGANCg0KYGBge3J9DQpiYXJwbG90KHJlc3QkZWlnWywxXSwgbWFpbj0iVmFsZXVycyBwcm9wcmVzIikNCmBgYA0KDQpgYGB7cn0NCmRpbWRlc2MocmVzdCkNCmBgYA0KDQo=