@tricoteuses/senat 1.3.1 → 1.3.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/config.d.ts +1 -0
- package/lib/config.js +14 -45
- package/lib/databases.js +86 -143
- package/lib/datasets.js +78 -83
- package/lib/index.d.ts +12 -4
- package/lib/index.js +42 -419
- package/lib/loaders.js +149 -654
- package/lib/model/ameli.js +83 -21
- package/lib/model/debats.js +0 -1
- package/lib/model/dosleg.d.ts +1 -1
- package/lib/model/dosleg.js +179 -73
- package/lib/model/index.d.ts +3 -3
- package/lib/model/index.js +12 -46
- package/lib/model/questions.js +68 -39
- package/lib/model/sens.d.ts +1 -1
- package/lib/model/sens.js +383 -113
- package/lib/model/texte.js +220 -290
- package/lib/model/util.js +9 -26
- package/lib/raw_types/ameli.js +5 -6
- package/lib/raw_types/debats.js +5 -6
- package/lib/raw_types/dosleg.js +5 -6
- package/lib/raw_types/questions.js +5 -6
- package/lib/raw_types/sens.js +5 -6
- package/lib/raw_types_schemats/ameli.js +1 -43
- package/lib/raw_types_schemats/debats.js +1 -22
- package/lib/raw_types_schemats/dosleg.js +1 -96
- package/lib/raw_types_schemats/questions.js +1 -22
- package/lib/raw_types_schemats/sens.js +1 -112
- package/lib/scripts/convert_data.js +181 -631
- package/lib/scripts/datautil.js +17 -60
- package/lib/scripts/parse_textes.js +46 -129
- package/lib/scripts/retrieve_documents.js +247 -513
- package/lib/scripts/retrieve_open_data.js +211 -368
- package/lib/scripts/retrieve_senateurs_photos.js +144 -239
- package/lib/scripts/shared/cli_helpers.js +30 -30
- package/lib/scripts/shared/util.js +28 -94
- package/lib/strings.js +20 -45
- package/lib/types/ameli.d.ts +1 -1
- package/lib/types/ameli.js +14 -25
- package/lib/types/debats.d.ts +1 -1
- package/lib/types/debats.js +3 -21
- package/lib/types/dosleg.d.ts +1 -1
- package/lib/types/dosleg.js +152 -119
- package/lib/types/questions.d.ts +1 -1
- package/lib/types/questions.js +1 -13
- package/lib/types/sens.d.ts +1 -1
- package/lib/types/sens.js +1 -13
- package/lib/types/sessions.js +44 -49
- package/lib/types/texte.js +17 -22
- package/lib/validators/config.js +47 -111
- package/lib/validators/senat.js +1 -5
- package/package.json +18 -40
- package/lib/aggregates.d.ts +0 -52
- package/lib/aggregates.mjs +0 -930
- package/lib/aggregates.ts +0 -833
- package/lib/config.mjs +0 -16
- package/lib/config.ts +0 -26
- package/lib/data/legislatures.json +0 -38
- package/lib/databases.mjs +0 -57
- package/lib/databases.ts +0 -71
- package/lib/datasets.mjs +0 -78
- package/lib/datasets.ts +0 -118
- package/lib/fields.d.ts +0 -10
- package/lib/fields.mjs +0 -68
- package/lib/fields.ts +0 -29
- package/lib/index.mjs +0 -4
- package/lib/index.ts +0 -42
- package/lib/inserters.d.ts +0 -98
- package/lib/inserters.mjs +0 -500
- package/lib/inserters.ts +0 -521
- package/lib/loaders.mjs +0 -158
- package/lib/loaders.ts +0 -271
- package/lib/model/ameli.mjs +0 -84
- package/lib/model/ameli.ts +0 -100
- package/lib/model/debats.mjs +0 -1
- package/lib/model/debats.ts +0 -0
- package/lib/model/dosleg.mjs +0 -196
- package/lib/model/dosleg.ts +0 -240
- package/lib/model/index.mjs +0 -4
- package/lib/model/index.ts +0 -14
- package/lib/model/questions.mjs +0 -71
- package/lib/model/questions.ts +0 -93
- package/lib/model/sens.mjs +0 -415
- package/lib/model/sens.ts +0 -516
- package/lib/model/texte.mjs +0 -208
- package/lib/model/texte.ts +0 -229
- package/lib/model/util.mjs +0 -19
- package/lib/model/util.ts +0 -32
- package/lib/raw_types/ameli.mjs +0 -5
- package/lib/raw_types/ameli.ts +0 -951
- package/lib/raw_types/debats.mjs +0 -5
- package/lib/raw_types/debats.ts +0 -222
- package/lib/raw_types/dosleg.mjs +0 -5
- package/lib/raw_types/dosleg.ts +0 -3625
- package/lib/raw_types/questions.mjs +0 -5
- package/lib/raw_types/questions.ts +0 -427
- package/lib/raw_types/sens.mjs +0 -5
- package/lib/raw_types/sens.ts +0 -4499
- package/lib/raw_types_kysely/ameli.d.ts +0 -6
- package/lib/raw_types_kysely/ameli.mjs +0 -7
- package/lib/raw_types_kysely/ameli.ts +0 -6
- package/lib/raw_types_kysely/debats.d.ts +0 -6
- package/lib/raw_types_kysely/debats.mjs +0 -7
- package/lib/raw_types_kysely/debats.ts +0 -6
- package/lib/raw_types_kysely/dosleg.d.ts +0 -6
- package/lib/raw_types_kysely/dosleg.mjs +0 -7
- package/lib/raw_types_kysely/dosleg.ts +0 -6
- package/lib/raw_types_kysely/questions.d.ts +0 -6
- package/lib/raw_types_kysely/questions.mjs +0 -7
- package/lib/raw_types_kysely/questions.ts +0 -6
- package/lib/raw_types_kysely/sens.d.ts +0 -6
- package/lib/raw_types_kysely/sens.mjs +0 -7
- package/lib/raw_types_kysely/sens.ts +0 -6
- package/lib/raw_types_kysely/texte.d.ts +0 -45
- package/lib/raw_types_kysely/texte.mjs +0 -7
- package/lib/raw_types_kysely/texte.ts +0 -53
- package/lib/raw_types_schemats/ameli.mjs +0 -2
- package/lib/raw_types_schemats/ameli.ts +0 -601
- package/lib/raw_types_schemats/debats.mjs +0 -2
- package/lib/raw_types_schemats/debats.ts +0 -145
- package/lib/raw_types_schemats/dosleg.mjs +0 -2
- package/lib/raw_types_schemats/dosleg.ts +0 -2195
- package/lib/raw_types_schemats/questions.mjs +0 -2
- package/lib/raw_types_schemats/questions.ts +0 -251
- package/lib/raw_types_schemats/sens.mjs +0 -2
- package/lib/raw_types_schemats/sens.ts +0 -2907
- package/lib/scripts/convert_data.mjs +0 -181
- package/lib/scripts/convert_data.ts +0 -243
- package/lib/scripts/datautil.mjs +0 -16
- package/lib/scripts/datautil.ts +0 -19
- package/lib/scripts/images/transparent_150x192.jpg +0 -0
- package/lib/scripts/images/transparent_155x225.jpg +0 -0
- package/lib/scripts/parse_textes.mjs +0 -46
- package/lib/scripts/parse_textes.ts +0 -65
- package/lib/scripts/retrieve_documents.mjs +0 -249
- package/lib/scripts/retrieve_documents.ts +0 -298
- package/lib/scripts/retrieve_open_data.mjs +0 -217
- package/lib/scripts/retrieve_open_data.ts +0 -274
- package/lib/scripts/retrieve_senateurs_photos.mjs +0 -147
- package/lib/scripts/retrieve_senateurs_photos.ts +0 -177
- package/lib/scripts/retrieve_textes.d.ts +0 -1
- package/lib/scripts/retrieve_textes.mjs +0 -328
- package/lib/scripts/retrieve_textes.ts +0 -143
- package/lib/scripts/shared/cli_helpers.ts +0 -36
- package/lib/scripts/shared/util.ts +0 -33
- package/lib/src/aggregates.d.ts +0 -52
- package/lib/src/aggregates.mjs +0 -726
- package/lib/src/config.d.ts +0 -2
- package/lib/src/config.mjs +0 -16
- package/lib/src/databases.d.ts +0 -18
- package/lib/src/databases.mjs +0 -55
- package/lib/src/datasets.d.ts +0 -28
- package/lib/src/datasets.mjs +0 -78
- package/lib/src/fields.d.ts +0 -10
- package/lib/src/fields.mjs +0 -22
- package/lib/src/index.d.ts +0 -8
- package/lib/src/index.mjs +0 -7
- package/lib/src/inserters.d.ts +0 -98
- package/lib/src/inserters.mjs +0 -360
- package/lib/src/loaders.d.ts +0 -36
- package/lib/src/loaders.mjs +0 -107
- package/lib/src/model/ameli.d.ts +0 -4
- package/lib/src/model/ameli.js +0 -57
- package/lib/src/model/debats.d.ts +0 -4
- package/lib/src/model/debats.js +0 -43
- package/lib/src/model/dosleg.d.ts +0 -197
- package/lib/src/model/dosleg.js +0 -169
- package/lib/src/model/index.d.ts +0 -4
- package/lib/src/model/index.js +0 -4
- package/lib/src/model/questions.d.ts +0 -89
- package/lib/src/model/questions.js +0 -76
- package/lib/src/model/sens.d.ts +0 -390
- package/lib/src/model/sens.js +0 -339
- package/lib/src/model/texte.d.ts +0 -7
- package/lib/src/model/texte.js +0 -183
- package/lib/src/raw_types_kysely/ameli.d.ts +0 -915
- package/lib/src/raw_types_kysely/ameli.js +0 -5
- package/lib/src/raw_types_kysely/debats.d.ts +0 -207
- package/lib/src/raw_types_kysely/debats.js +0 -5
- package/lib/src/raw_types_kysely/dosleg.d.ts +0 -3532
- package/lib/src/raw_types_kysely/dosleg.js +0 -5
- package/lib/src/raw_types_kysely/questions.d.ts +0 -414
- package/lib/src/raw_types_kysely/questions.js +0 -5
- package/lib/src/raw_types_kysely/sens.d.ts +0 -4394
- package/lib/src/raw_types_kysely/sens.js +0 -5
- package/lib/src/raw_types_schemats/ameli.d.ts +0 -541
- package/lib/src/raw_types_schemats/ameli.js +0 -2
- package/lib/src/raw_types_schemats/debats.d.ts +0 -127
- package/lib/src/raw_types_schemats/debats.js +0 -2
- package/lib/src/raw_types_schemats/dosleg.d.ts +0 -2027
- package/lib/src/raw_types_schemats/dosleg.js +0 -2
- package/lib/src/raw_types_schemats/questions.d.ts +0 -231
- package/lib/src/raw_types_schemats/questions.js +0 -2
- package/lib/src/raw_types_schemats/sens.d.ts +0 -2709
- package/lib/src/raw_types_schemats/sens.js +0 -2
- package/lib/src/scripts/convert_data.d.ts +0 -1
- package/lib/src/scripts/convert_data.js +0 -95
- package/lib/src/scripts/datautil.d.ts +0 -5
- package/lib/src/scripts/datautil.js +0 -16
- package/lib/src/scripts/parse_textes.d.ts +0 -1
- package/lib/src/scripts/parse_textes.js +0 -47
- package/lib/src/scripts/retrieve_documents.d.ts +0 -1
- package/lib/src/scripts/retrieve_documents.js +0 -258
- package/lib/src/scripts/retrieve_open_data.d.ts +0 -1
- package/lib/src/scripts/retrieve_open_data.js +0 -214
- package/lib/src/scripts/retrieve_senateurs_photos.d.ts +0 -1
- package/lib/src/scripts/retrieve_senateurs_photos.js +0 -147
- package/lib/src/scripts/shared/cli_helpers.d.ts +0 -44
- package/lib/src/scripts/shared/cli_helpers.js +0 -32
- package/lib/src/scripts/shared/util.d.ts +0 -3
- package/lib/src/scripts/shared/util.js +0 -28
- package/lib/src/strings.d.ts +0 -1
- package/lib/src/strings.mjs +0 -18
- package/lib/src/types/ameli.d.ts +0 -10
- package/lib/src/types/ameli.js +0 -13
- package/lib/src/types/debats.d.ts +0 -4
- package/lib/src/types/debats.js +0 -2
- package/lib/src/types/dosleg.d.ts +0 -98
- package/lib/src/types/dosleg.js +0 -151
- package/lib/src/types/questions.d.ts +0 -2
- package/lib/src/types/questions.js +0 -1
- package/lib/src/types/sens.d.ts +0 -10
- package/lib/src/types/sens.js +0 -1
- package/lib/src/types/sessions.d.ts +0 -42
- package/lib/src/types/sessions.js +0 -43
- package/lib/src/types/texte.d.ts +0 -61
- package/lib/src/types/texte.js +0 -16
- package/lib/src/validators/config.d.ts +0 -1
- package/lib/src/validators/config.js +0 -54
- package/lib/src/validators/senat.d.ts +0 -0
- package/lib/src/validators/senat.js +0 -24
- package/lib/strings.mjs +0 -18
- package/lib/strings.ts +0 -26
- package/lib/types/ameli.mjs +0 -13
- package/lib/types/ameli.ts +0 -21
- package/lib/types/debats.mjs +0 -2
- package/lib/types/debats.ts +0 -6
- package/lib/types/dosleg.mjs +0 -151
- package/lib/types/dosleg.ts +0 -284
- package/lib/types/questions.mjs +0 -1
- package/lib/types/questions.ts +0 -3
- package/lib/types/sens.mjs +0 -1
- package/lib/types/sens.ts +0 -12
- package/lib/types/sessions.mjs +0 -43
- package/lib/types/sessions.ts +0 -42
- package/lib/types/texte.mjs +0 -16
- package/lib/types/texte.ts +0 -76
- package/lib/typings/windows-1252.d.js +0 -2
- package/lib/typings/windows-1252.d.mjs +0 -2
- package/lib/typings/windows-1252.d.ts +0 -11
- package/lib/validators/config.mjs +0 -54
- package/lib/validators/config.ts +0 -79
- package/lib/validators/senat.mjs +0 -24
- package/lib/validators/senat.ts +0 -26
package/lib/model/sens.js
CHANGED
|
@@ -1,180 +1,450 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
require("core-js/modules/es.array.concat.js");
|
|
4
|
-
require("core-js/modules/es.object.define-property.js");
|
|
5
|
-
Object.defineProperty(exports, "__esModule", {
|
|
6
|
-
value: true
|
|
7
|
-
});
|
|
8
|
-
exports.findActif = findActif;
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
3
|
exports.findAll = findAll;
|
|
10
4
|
exports.findAllCirconscriptions = findAllCirconscriptions;
|
|
11
5
|
exports.findAllOrganismes = findAllOrganismes;
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
6
|
+
exports.findActif = findActif;
|
|
7
|
+
const postgres_1 = require("kysely/helpers/postgres");
|
|
8
|
+
const databases_1 = require("../databases");
|
|
9
|
+
const util_1 = require("./util");
|
|
15
10
|
function circonscription(dptNum) {
|
|
16
|
-
|
|
11
|
+
return (0, postgres_1.jsonObjectFrom)(databases_1.dbSens
|
|
12
|
+
.selectFrom("dpt")
|
|
13
|
+
.leftJoin("reg", "dpt.regcod", "reg.regcod")
|
|
14
|
+
.where("dpt.dptnum", "=", dptNum)
|
|
15
|
+
.select([
|
|
16
|
+
"dpt.dptcod as code",
|
|
17
|
+
"dpt.dptlib as libelle_departement",
|
|
18
|
+
"reg.reglib as libelle_region",
|
|
19
|
+
]));
|
|
17
20
|
}
|
|
18
21
|
function textes(actId) {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
22
|
+
return (0, postgres_1.jsonArrayFrom)(databases_1.dbSens
|
|
23
|
+
.selectFrom("activite_loi")
|
|
24
|
+
.where("actid", "=", actId)
|
|
25
|
+
.select(({ ref }) => [(0, util_1.rtrim)(ref("loicod")).as("loicod")]));
|
|
23
26
|
}
|
|
24
27
|
function delegations(actId) {
|
|
25
|
-
|
|
28
|
+
return (0, postgres_1.jsonArrayFrom)(databases_1.dbSens
|
|
29
|
+
.selectFrom("activite_delegation")
|
|
30
|
+
.where("actid", "=", actId)
|
|
31
|
+
.orderBy("delegidx asc"));
|
|
26
32
|
}
|
|
27
33
|
function activites(senMat) {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
34
|
+
return (0, postgres_1.jsonArrayFrom)(databases_1.dbSens
|
|
35
|
+
.selectFrom("activite")
|
|
36
|
+
.leftJoin("activite_participant", "activite.actid", "activite_participant.actid")
|
|
37
|
+
.leftJoin("type_activite", "activite.typactcod", "type_activite.typactcod")
|
|
38
|
+
.leftJoin("categorie_activite", "activite.catactcod", "categorie_activite.catactcod")
|
|
39
|
+
.where("activite_participant.senmat", "=", senMat)
|
|
40
|
+
.select(({ ref }) => [
|
|
41
|
+
delegations(ref("activite.actid")).as("delegations"),
|
|
42
|
+
textes(ref("activite.actid")).as("textes"),
|
|
43
|
+
])
|
|
44
|
+
.orderBy("activite.datdeb desc"));
|
|
32
45
|
}
|
|
33
46
|
function activitesPerso(senMat) {
|
|
34
|
-
|
|
47
|
+
return (0, postgres_1.jsonArrayFrom)(databases_1.dbSens
|
|
48
|
+
.selectFrom("activite_senateur")
|
|
49
|
+
.leftJoin("type_activite_senateur", "activite_senateur.typactsencod", "type_activite_senateur.typactsencod")
|
|
50
|
+
.where("activite_senateur.senmat", "=", senMat)
|
|
51
|
+
.orderBy("activite_senateur.datdeb desc"));
|
|
35
52
|
}
|
|
36
53
|
function fonctionsBureau(senMat) {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
54
|
+
return (0, postgres_1.jsonArrayFrom)(databases_1.dbSens
|
|
55
|
+
.selectFrom("senbur")
|
|
56
|
+
.leftJoin("bur", "senbur.burcod", "bur.burcod")
|
|
57
|
+
.where("senbur.senmat", "=", senMat)
|
|
58
|
+
.select(({ ref }) => [
|
|
59
|
+
(0, util_1.toDateString)(ref("senbur.senburdatdeb")).as("date_debut"),
|
|
60
|
+
(0, util_1.toDateString)(ref("senbur.senburdatfin")).as("date_fin"),
|
|
61
|
+
"bur.burlib as libelle",
|
|
62
|
+
])
|
|
63
|
+
.orderBy("senbur.senburdatdeb desc"));
|
|
41
64
|
}
|
|
42
65
|
function mandatsEluConseillerGeneral(senMat) {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
66
|
+
return (0, postgres_1.jsonArrayFrom)(databases_1.dbSens
|
|
67
|
+
.selectFrom("elucan")
|
|
68
|
+
.leftJoin("typman", "elucan.typmancod", "typman.typmancod")
|
|
69
|
+
.where("elucan.senmat", "=", senMat)
|
|
70
|
+
.select(({ ref }) => [
|
|
71
|
+
circonscription(ref("elucan.dptnum").$notNull()).as("circonscription"),
|
|
72
|
+
])
|
|
73
|
+
.orderBy("elucan.eludatdeb desc"));
|
|
47
74
|
}
|
|
48
75
|
function mandatsEluDepute(senMat) {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
76
|
+
return (0, postgres_1.jsonArrayFrom)(databases_1.dbSens
|
|
77
|
+
.selectFrom("eludep")
|
|
78
|
+
.leftJoin("typman", "eludep.typmancod", "typman.typmancod")
|
|
79
|
+
.where("eludep.senmat", "=", senMat)
|
|
80
|
+
.select(({ ref }) => [
|
|
81
|
+
circonscription(ref("eludep.circo").$notNull()).as("circonscription"),
|
|
82
|
+
])
|
|
83
|
+
.orderBy("eludep.eludatdeb desc"));
|
|
53
84
|
}
|
|
54
85
|
function mandatsEluDivers(senMat) {
|
|
55
|
-
|
|
86
|
+
return (0, postgres_1.jsonArrayFrom)(databases_1.dbSens
|
|
87
|
+
.selectFrom("eludiv")
|
|
88
|
+
.leftJoin("typman", "eludiv.typmancod", "typman.typmancod")
|
|
89
|
+
.where("eludiv.senmat", "=", senMat)
|
|
90
|
+
.orderBy("eludiv.eludatdeb desc"));
|
|
56
91
|
}
|
|
57
92
|
function mandatsEluEuropeen(senMat) {
|
|
58
|
-
|
|
93
|
+
return (0, postgres_1.jsonArrayFrom)(databases_1.dbSens
|
|
94
|
+
.selectFrom("elueur")
|
|
95
|
+
.leftJoin("nation", "elueur.nationcod", "nation.nationcod")
|
|
96
|
+
.leftJoin("typman", "elueur.typmancod", "typman.typmancod")
|
|
97
|
+
.where("elueur.senmat", "=", senMat)
|
|
98
|
+
.orderBy("elueur.eludatdeb desc"));
|
|
59
99
|
}
|
|
60
100
|
function mandatsEluConseillerRegional(senMat) {
|
|
61
|
-
|
|
101
|
+
return (0, postgres_1.jsonArrayFrom)(databases_1.dbSens
|
|
102
|
+
.selectFrom("elureg")
|
|
103
|
+
.leftJoin("reg", "elureg.regcod", "reg.regcod")
|
|
104
|
+
.leftJoin("typman", "elureg.typmancod", "typman.typmancod")
|
|
105
|
+
.where("elureg.senmat", "=", senMat)
|
|
106
|
+
.orderBy("elureg.eludatdeb desc"));
|
|
62
107
|
}
|
|
63
108
|
function mandatsEluSenateur(senMat) {
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
109
|
+
return (0, postgres_1.jsonArrayFrom)(databases_1.dbSens
|
|
110
|
+
.selectFrom("elusen")
|
|
111
|
+
.leftJoin("etadebman", "elusen.etadebmancod", "etadebman.etadebmancod")
|
|
112
|
+
.leftJoin("etafinman", "elusen.etafinmancod", "etafinman.etafinmancod")
|
|
113
|
+
.leftJoin("typman", "elusen.typmancod", "typman.typmancod")
|
|
114
|
+
.where("elusen.senmat", "=", senMat)
|
|
115
|
+
.select(({ ref }) => [
|
|
116
|
+
"elusen.dptnum as code_circonscription",
|
|
117
|
+
(0, util_1.toDateString)(ref("elusen.eludatdeb")).as("date_debut"),
|
|
118
|
+
(0, util_1.toDateString)(ref("elusen.eludatfin")).as("date_fin"),
|
|
119
|
+
"etadebman.etadebmanlib as etat_debut",
|
|
120
|
+
"etafinman.etafinman as etat_fin",
|
|
121
|
+
])
|
|
122
|
+
.orderBy("elusen.eludatdeb desc"));
|
|
68
123
|
}
|
|
69
124
|
function mandatsEluTerritorial(senMat) {
|
|
70
|
-
|
|
125
|
+
return (0, postgres_1.jsonArrayFrom)(databases_1.dbSens
|
|
126
|
+
.selectFrom("eluter")
|
|
127
|
+
.leftJoin("asster", "eluter.asstercod", "asster.asstercod")
|
|
128
|
+
.leftJoin("typman", "eluter.typmancod", "typman.typmancod")
|
|
129
|
+
.where("eluter.senmat", "=", senMat)
|
|
130
|
+
.orderBy("eluter.eludatdeb desc"));
|
|
71
131
|
}
|
|
72
132
|
function mandatsEluConseillerMunicipal(senMat) {
|
|
73
|
-
|
|
133
|
+
return (0, postgres_1.jsonArrayFrom)(databases_1.dbSens
|
|
134
|
+
.selectFrom("eluvil")
|
|
135
|
+
.leftJoin("typman", "eluvil.typmancod", "typman.typmancod")
|
|
136
|
+
.where("eluvil.senmat", "=", senMat)
|
|
137
|
+
.orderBy("eluvil.eludatdeb desc"));
|
|
74
138
|
}
|
|
75
139
|
function fonctionsMembreCommission(memComId) {
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
140
|
+
return (0, postgres_1.jsonArrayFrom)(databases_1.dbSens
|
|
141
|
+
.selectFrom("fonmemcom")
|
|
142
|
+
.leftJoin("foncom", "fonmemcom.foncomcod", "foncom.foncomcod")
|
|
143
|
+
.where("fonmemcom.memcomid", "=", memComId)
|
|
144
|
+
.select(({ ref }) => [
|
|
145
|
+
(0, util_1.toDateString)(ref("fonmemcom.fonmemcomdatdeb")).as("date_debut"),
|
|
146
|
+
(0, util_1.toDateString)(ref("fonmemcom.fonmemcomdatfin")).as("date_fin"),
|
|
147
|
+
"foncom.foncomlib as libelle",
|
|
148
|
+
])
|
|
149
|
+
.orderBy("fonmemcom.fonmemcomdatdeb desc"));
|
|
80
150
|
}
|
|
81
151
|
function mandatsMembreCommission(senMat) {
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
152
|
+
return (0, postgres_1.jsonArrayFrom)(databases_1.dbSens
|
|
153
|
+
.selectFrom("memcom")
|
|
154
|
+
.leftJoin("com", "memcom.orgcod", "com.orgcod")
|
|
155
|
+
.leftJoin("typorg", "com.typorgcod", "typorg.typorgcod")
|
|
156
|
+
.where("memcom.senmat", "=", senMat)
|
|
157
|
+
.select(({ ref }) => [
|
|
158
|
+
"com.typorgcod as type_code_organisme",
|
|
159
|
+
"memcom.orgcod as code_organisme",
|
|
160
|
+
"typorg.typorglib as type_organisme",
|
|
161
|
+
"com.comlilmin as libelle",
|
|
162
|
+
(0, util_1.toDateString)(ref("memcom.memcomdatdeb")).as("date_debut"),
|
|
163
|
+
(0, util_1.toDateString)(ref("memcom.memcomdatfin")).as("date_fin"),
|
|
164
|
+
])
|
|
165
|
+
.select(({ ref }) => [
|
|
166
|
+
fonctionsMembreCommission(ref("memcom.memcomid")).as("fonctions"),
|
|
167
|
+
])
|
|
168
|
+
.orderBy("memcom.memcomdatdeb desc"));
|
|
89
169
|
}
|
|
90
170
|
function fonctionsMembreDelegation(memDelegaId) {
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
171
|
+
return (0, postgres_1.jsonArrayFrom)(databases_1.dbSens
|
|
172
|
+
.selectFrom("fonmemdelega")
|
|
173
|
+
.leftJoin("fondelega", "fonmemdelega.fondelcod", "fondelega.fondelcod")
|
|
174
|
+
.where("fonmemdelega.memdelegaid", "=", memDelegaId)
|
|
175
|
+
.select(({ ref }) => [
|
|
176
|
+
(0, util_1.toDateString)(ref("fonmemdelega.fonmemdeldatdeb")).as("date_debut"),
|
|
177
|
+
(0, util_1.toDateString)(ref("fonmemdelega.fonmemdeldatfin")).as("date_fin"),
|
|
178
|
+
"fondelega.fondellib as libelle",
|
|
179
|
+
])
|
|
180
|
+
.orderBy("fonmemdelega.fonmemdeldatdeb desc"));
|
|
95
181
|
}
|
|
96
182
|
function mandatsMembreDelegation(senMat) {
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
183
|
+
return (0, postgres_1.jsonArrayFrom)(databases_1.dbSens
|
|
184
|
+
.selectFrom("memdelega")
|
|
185
|
+
.leftJoin("delega", "memdelega.orgcod", "delega.orgcod")
|
|
186
|
+
.leftJoin("designorg", "memdelega.designcod", "designorg.designcod")
|
|
187
|
+
.leftJoin("typorg", "delega.typorgcod", "typorg.typorgcod")
|
|
188
|
+
.where("memdelega.senmat", "=", senMat)
|
|
189
|
+
.select(({ ref }) => [
|
|
190
|
+
"delega.typorgcod as type_code_organisme",
|
|
191
|
+
"memdelega.orgcod as code_organisme",
|
|
192
|
+
"typorg.typorglib as type_organisme",
|
|
193
|
+
"delega.evelib as libelle",
|
|
194
|
+
(0, util_1.toDateString)(ref("memdelega.memdelegadatdeb")).as("date_debut"),
|
|
195
|
+
(0, util_1.toDateString)(ref("memdelega.memdelegadatfin")).as("date_fin"),
|
|
196
|
+
])
|
|
197
|
+
.select(({ ref }) => [
|
|
198
|
+
fonctionsMembreDelegation(ref("memdelega.memdelegaid")).as("fonctions"),
|
|
199
|
+
])
|
|
200
|
+
.orderBy("memdelega.memdelegadatdeb desc"));
|
|
104
201
|
}
|
|
105
202
|
function mandatsMembreExtraParlementaire(senMat) {
|
|
106
|
-
|
|
203
|
+
return (0, postgres_1.jsonArrayFrom)(databases_1.dbSens
|
|
204
|
+
.selectFrom("memextpar")
|
|
205
|
+
.leftJoin("orgext", "memextpar.orgcod", "orgext.orgcod")
|
|
206
|
+
.leftJoin("design", "memextpar.designcod", "design.designcod")
|
|
207
|
+
.where("memextpar.senmat", "=", senMat)
|
|
208
|
+
.orderBy("memextpar.memextpardatdeb desc"));
|
|
107
209
|
}
|
|
108
210
|
function fonctionsMembreGroupePolitique(memGrpPolId) {
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
211
|
+
return (0, postgres_1.jsonArrayFrom)(databases_1.dbSens
|
|
212
|
+
.selectFrom("fonmemgrppol")
|
|
213
|
+
.leftJoin("fongrppol", "fonmemgrppol.fongrppolcod", "fongrppol.fongrppolcod")
|
|
214
|
+
.where("fonmemgrppol.memgrppolid", "=", memGrpPolId)
|
|
215
|
+
.select(({ ref }) => [
|
|
216
|
+
(0, util_1.toDateString)(ref("fonmemgrppol.fonmemgrppoldatdeb")).as("date_debut"),
|
|
217
|
+
(0, util_1.toDateString)(ref("fonmemgrppol.fonmemgrppoldatfin")).as("date_fin"),
|
|
218
|
+
"fongrppol.fongrppollib as libelle",
|
|
219
|
+
])
|
|
220
|
+
.orderBy("fonmemgrppol.fonmemgrppoldatdeb desc"));
|
|
113
221
|
}
|
|
114
222
|
function mandatsMembreGroupePolitique(senMat) {
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
223
|
+
return (0, postgres_1.jsonArrayFrom)(databases_1.dbSens
|
|
224
|
+
.selectFrom("memgrppol")
|
|
225
|
+
.leftJoin("grppol", "memgrppol.grppolcod", "grppol.grppolcod")
|
|
226
|
+
.leftJoin("typapppol", "memgrppol.typapppolcod", "typapppol.typapppolcod")
|
|
227
|
+
.where("memgrppol.senmat", "=", senMat)
|
|
228
|
+
.select(({ ref }) => [
|
|
229
|
+
"memgrppol.grppolcod as code",
|
|
230
|
+
"grppol.grppollibcou as libelle",
|
|
231
|
+
(0, util_1.toDateString)(ref("memgrppol.memgrppoldatdeb")).as("date_debut"),
|
|
232
|
+
(0, util_1.toDateString)(ref("memgrppol.memgrppoldatfin")).as("date_fin"),
|
|
233
|
+
"typapppol.typapppollib as fonction",
|
|
234
|
+
])
|
|
235
|
+
.select(({ ref }) => [
|
|
236
|
+
fonctionsMembreGroupePolitique(ref("memgrppol.memgrppolid")).as("fonctions"),
|
|
237
|
+
])
|
|
238
|
+
.orderBy("memgrppol.memgrppoldatdeb desc"));
|
|
122
239
|
}
|
|
123
240
|
function fonctionsMembreGroupeSenatorial(memGrpSenId) {
|
|
124
|
-
|
|
241
|
+
return (0, postgres_1.jsonArrayFrom)(databases_1.dbSens
|
|
242
|
+
.selectFrom("fonmemgrpsen")
|
|
243
|
+
.leftJoin("fongrpsen", "fonmemgrpsen.fongrpsencod", "fongrpsen.fongrpsencod")
|
|
244
|
+
.where("fonmemgrpsen.memgrpsenid", "=", memGrpSenId)
|
|
245
|
+
.orderBy("fonmemgrpsen.fonmemgrpsendatdeb desc"));
|
|
125
246
|
}
|
|
126
247
|
function mandatsMembreGroupeSenatorial(senMat) {
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
248
|
+
return (0, postgres_1.jsonArrayFrom)(databases_1.dbSens
|
|
249
|
+
.selectFrom("memgrpsen")
|
|
250
|
+
.leftJoin("grpsenami", "memgrpsen.orgcod", "grpsenami.orgcod")
|
|
251
|
+
.leftJoin("typgrpsen", "grpsenami.typgrpsencod", "typgrpsen.typgrpsencod")
|
|
252
|
+
.where("memgrpsen.senmat", "=", senMat)
|
|
253
|
+
.select(({ ref }) => [
|
|
254
|
+
fonctionsMembreGroupeSenatorial(ref("memgrpsen.memgrpsenid")).as("fonctions"),
|
|
255
|
+
])
|
|
256
|
+
.orderBy("memgrpsen.memgrpsendatent desc"));
|
|
131
257
|
}
|
|
132
258
|
function fonctionsMembreOrganisme(memOrgId) {
|
|
133
|
-
|
|
259
|
+
return (0, postgres_1.jsonArrayFrom)(databases_1.dbSens
|
|
260
|
+
.selectFrom("fonmemorg")
|
|
261
|
+
.leftJoin("fonorg", "fonmemorg.fonorgcod", "fonorg.fonorgcod")
|
|
262
|
+
.where("fonmemorg.memorgid", "=", memOrgId)
|
|
263
|
+
.orderBy("fonmemorg.fonmemorgdatdeb desc"));
|
|
134
264
|
}
|
|
135
265
|
function mandatsMembreOrganisme(senMat) {
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
266
|
+
return (0, postgres_1.jsonArrayFrom)(databases_1.dbSens
|
|
267
|
+
.selectFrom("memorg")
|
|
268
|
+
.leftJoin("org", "memorg.orgcod", "org.orgcod")
|
|
269
|
+
.leftJoin("typorg", "org.typorgcod", "typorg.typorgcod")
|
|
270
|
+
.leftJoin("designorg", "memorg.designcod", "designorg.designcod")
|
|
271
|
+
.where("memorg.senmat", "=", senMat)
|
|
272
|
+
.select(({ ref }) => [
|
|
273
|
+
fonctionsMembreOrganisme(ref("memorg.memorgid")).as("fonctions"),
|
|
274
|
+
])
|
|
275
|
+
.orderBy("memorg.memorgdatdeb desc"));
|
|
140
276
|
}
|
|
141
277
|
function mandatsMinistre(senMat) {
|
|
142
|
-
|
|
278
|
+
return (0, postgres_1.jsonArrayFrom)(databases_1.dbSens
|
|
279
|
+
.selectFrom("minind")
|
|
280
|
+
.where("minind.senmat", "=", senMat)
|
|
281
|
+
.orderBy("minind.mindatdeb desc"));
|
|
143
282
|
}
|
|
144
283
|
function contacts(senMat) {
|
|
145
|
-
|
|
284
|
+
return (0, postgres_1.jsonArrayFrom)(databases_1.dbSens
|
|
285
|
+
.selectFrom("poicon")
|
|
286
|
+
.leftJoin("adresse", "poicon.poiconid", "adresse.poiconid")
|
|
287
|
+
.leftJoin("mel", "poicon.poiconid", "mel.poiconid")
|
|
288
|
+
.leftJoin("telephone", "poicon.poiconid", "telephone.poiconid")
|
|
289
|
+
.where("poicon.senmat", "=", senMat)
|
|
290
|
+
.orderBy("poicon.poiconnumtri asc"));
|
|
146
291
|
}
|
|
147
292
|
function urls(senMat) {
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
293
|
+
return (0, postgres_1.jsonArrayFrom)(databases_1.dbSens
|
|
294
|
+
.selectFrom("senurl")
|
|
295
|
+
.where("senurl.senmat", "=", senMat)
|
|
296
|
+
.select(["senurl.typurlcod as code_url", "senurl.senurlurl as url"])
|
|
297
|
+
.orderBy("senurl.senurlnumtri asc"));
|
|
298
|
+
}
|
|
299
|
+
const findAllQuery = databases_1.dbSens
|
|
300
|
+
.selectFrom("sen")
|
|
301
|
+
.leftJoin("etasen", "sen.etasencod", "etasen.etasencod")
|
|
302
|
+
.leftJoin("pcs", "sen.pcscod", "pcs.pcscod")
|
|
303
|
+
.leftJoin("pcs42", "pcs.pcs42cod", "pcs42.pcs42cod")
|
|
304
|
+
.leftJoin("pcs24", "pcs42.pcs24cod", "pcs24.pcs24cod")
|
|
305
|
+
.leftJoin("pcs8", "pcs24.pcs8cod", "pcs8.pcs8cod")
|
|
306
|
+
.leftJoin("grppol", "sen.sengrppolcodcou", "grppol.grppolcod")
|
|
307
|
+
.leftJoin("com", "sen.sencomcodcou", "com.orgcod")
|
|
308
|
+
.select(({ ref }) => [
|
|
309
|
+
"sen.senmat as matricule",
|
|
310
|
+
"sen.quacod as qualite",
|
|
311
|
+
"sen.sennomuse as nom_usuel",
|
|
312
|
+
"sen.senprenomuse as prenom_usuel",
|
|
313
|
+
"sen.etasencod as etat",
|
|
314
|
+
(0, util_1.toDateString)(ref("sen.sendatnai")).as("date_naissance"),
|
|
315
|
+
(0, util_1.toDateString)(ref("sen.sendatdec")).as("date_deces"),
|
|
316
|
+
"sen.sengrppolcodcou as code_groupe_politique",
|
|
317
|
+
"sen.sengrppolliccou as groupe_politique",
|
|
318
|
+
"sen.sencomcodcou as code_commission_permanente",
|
|
319
|
+
"com.comlilmin as commission_permanente",
|
|
320
|
+
"sen.sencirnumcou as code_circonscription",
|
|
321
|
+
"sen.sencircou as circonscription",
|
|
322
|
+
"sen.senburliccou as fonction_bureau_senat",
|
|
323
|
+
"sen.senema as courrier_electronique",
|
|
324
|
+
"pcs.pcslil as PCS_INSEE",
|
|
325
|
+
"pcs42.pcs42lib as PCS_INSEE_42",
|
|
326
|
+
"pcs24.pcs24lib as PCS_INSEE_24",
|
|
327
|
+
"pcs8.pcs8lil as PCS_INSEE_8",
|
|
328
|
+
"sen.sendespro as description_profession",
|
|
329
|
+
"sen.sennumsie as siege",
|
|
330
|
+
"sen.sendaiurl as url_hatvp",
|
|
331
|
+
])
|
|
332
|
+
.select(({ ref }) => [
|
|
333
|
+
urls(ref("sen.senmat")).as("urls"),
|
|
334
|
+
mandatsEluSenateur(ref("sen.senmat")).as("mandats_senateur"),
|
|
335
|
+
mandatsMembreCommission(ref("sen.senmat")).as("commissions"),
|
|
336
|
+
mandatsMembreDelegation(ref("sen.senmat")).as("delegations"),
|
|
337
|
+
mandatsMembreGroupePolitique(ref("sen.senmat")).as("groupes"),
|
|
338
|
+
fonctionsBureau(ref("sen.senmat")).as("fonctions_bureau"),
|
|
339
|
+
]);
|
|
340
|
+
const findAllCirconscriptionsQuery = databases_1.dbSens
|
|
341
|
+
.selectFrom("dpt")
|
|
342
|
+
.leftJoin("reg", "dpt.regcod", "reg.regcod")
|
|
343
|
+
.select(({ ref }) => [
|
|
344
|
+
"dpt.dptnum as identifiant",
|
|
345
|
+
"dpt.dptcod as code",
|
|
346
|
+
"dpt.dptlib as libelle_departement",
|
|
347
|
+
"dpt.dptart as article",
|
|
348
|
+
"reg.reglib as libelle_region",
|
|
349
|
+
"dpt.temvalcod as etat",
|
|
350
|
+
(0, util_1.toDateString)(ref("dpt.dptdatdeb")).as("date_debut"),
|
|
351
|
+
(0, util_1.toDateString)(ref("dpt.dptdatfin")).as("date_fin"),
|
|
352
|
+
"dpt.dptnbrsen as nombre_senateurs",
|
|
353
|
+
"dpt.dpturlcmp as url",
|
|
354
|
+
]);
|
|
355
|
+
const findAllOrganismesQuery = databases_1.dbSens
|
|
356
|
+
.selectFrom((eb) => eb
|
|
357
|
+
.selectFrom("com")
|
|
358
|
+
.select([
|
|
359
|
+
"orgcod",
|
|
360
|
+
"evelic",
|
|
361
|
+
"evelib",
|
|
362
|
+
"evelil",
|
|
363
|
+
"typorgcod",
|
|
364
|
+
"orgurlsim",
|
|
365
|
+
"orgdatcre",
|
|
366
|
+
"orgdatfin",
|
|
367
|
+
"temvalcod",
|
|
368
|
+
])
|
|
369
|
+
.union(eb
|
|
370
|
+
.selectFrom("delega")
|
|
371
|
+
.select([
|
|
372
|
+
"orgcod",
|
|
373
|
+
"evelic",
|
|
374
|
+
"evelib",
|
|
375
|
+
"evelil",
|
|
376
|
+
"typorgcod",
|
|
377
|
+
"orgurlsim",
|
|
378
|
+
"orgdatcre",
|
|
379
|
+
"orgdatfin",
|
|
380
|
+
"temvalcod",
|
|
381
|
+
]))
|
|
382
|
+
.union(eb
|
|
383
|
+
.selectFrom("grppol")
|
|
384
|
+
.select([
|
|
385
|
+
"grppolcod as orgcod",
|
|
386
|
+
"grppolliccou as evelic",
|
|
387
|
+
"grppollibcou as evelib",
|
|
388
|
+
"grppollilcou as evelil",
|
|
389
|
+
"typorgcod",
|
|
390
|
+
"grppolurlsim as orgurlsim",
|
|
391
|
+
"grppoldatcre as orgdatcre",
|
|
392
|
+
"grppoldatfin as orgdatfin",
|
|
393
|
+
"temvalcod",
|
|
394
|
+
]))
|
|
395
|
+
.union(eb
|
|
396
|
+
.selectFrom("grpsenami")
|
|
397
|
+
.select([
|
|
398
|
+
"orgcod",
|
|
399
|
+
"evelic",
|
|
400
|
+
"evelib",
|
|
401
|
+
"evelil",
|
|
402
|
+
"typorgcod",
|
|
403
|
+
"orgurlsim",
|
|
404
|
+
"orgdatcre",
|
|
405
|
+
"orgdatfin",
|
|
406
|
+
"temvalcod",
|
|
407
|
+
]))
|
|
408
|
+
.union(eb
|
|
409
|
+
.selectFrom("org")
|
|
410
|
+
.select([
|
|
411
|
+
"orgcod",
|
|
412
|
+
"evelic",
|
|
413
|
+
"evelib",
|
|
414
|
+
"evelil",
|
|
415
|
+
"typorgcod",
|
|
416
|
+
"orgurlsim",
|
|
417
|
+
"orgdatcre",
|
|
418
|
+
"orgdatfin",
|
|
419
|
+
"temvalcod",
|
|
420
|
+
]))
|
|
421
|
+
.as("all_organismes"))
|
|
422
|
+
.leftJoin("typorg", "all_organismes.typorgcod", "typorg.typorgcod")
|
|
423
|
+
.select(({ ref, val }) => [
|
|
424
|
+
"all_organismes.orgcod as code",
|
|
425
|
+
"all_organismes.evelic as libelle_court",
|
|
426
|
+
"all_organismes.evelib as libelle",
|
|
427
|
+
(0, util_1.rtrim)(ref("all_organismes.evelil")).as("libelle_long"),
|
|
428
|
+
"all_organismes.typorgcod as type_code",
|
|
429
|
+
(0, util_1.rtrim)(ref("typorg.typorglib")).as("type_libelle"),
|
|
430
|
+
(0, util_1.concat)(val("https://www.senat.fr"), ref("all_organismes.orgurlsim")).as("url"),
|
|
431
|
+
(0, util_1.toDateString)(ref("all_organismes.orgdatcre")).as("date_debut"),
|
|
432
|
+
(0, util_1.toDateString)(ref("all_organismes.orgdatfin")).as("date_fin"),
|
|
433
|
+
"all_organismes.temvalcod as etat",
|
|
434
|
+
]);
|
|
168
435
|
function findAll() {
|
|
169
|
-
|
|
436
|
+
return findAllQuery.stream();
|
|
170
437
|
}
|
|
171
438
|
function findAllCirconscriptions() {
|
|
172
|
-
|
|
439
|
+
return findAllCirconscriptionsQuery.stream();
|
|
173
440
|
}
|
|
174
441
|
function findAllOrganismes() {
|
|
175
|
-
|
|
442
|
+
return findAllOrganismesQuery.stream();
|
|
176
443
|
}
|
|
177
444
|
function findActif() {
|
|
178
|
-
|
|
445
|
+
return databases_1.dbSens
|
|
446
|
+
.selectFrom("sen")
|
|
447
|
+
.where("etasencod", "=", "ACTIF")
|
|
448
|
+
.select(["senmat", "sennomuse", "senprenomuse"])
|
|
449
|
+
.stream();
|
|
179
450
|
}
|
|
180
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcG9zdGdyZXMiLCJyZXF1aXJlIiwiX2RhdGFiYXNlcyIsIl91dGlsIiwiY2lyY29uc2NyaXB0aW9uIiwiZHB0TnVtIiwianNvbk9iamVjdEZyb20iLCJkYlNlbnMiLCJzZWxlY3RGcm9tIiwibGVmdEpvaW4iLCJ3aGVyZSIsInNlbGVjdCIsInRleHRlcyIsImFjdElkIiwianNvbkFycmF5RnJvbSIsIl9yZWYiLCJyZWYiLCJydHJpbSIsImFzIiwiZGVsZWdhdGlvbnMiLCJvcmRlckJ5IiwiYWN0aXZpdGVzIiwic2VuTWF0IiwiX3JlZjIiLCJhY3Rpdml0ZXNQZXJzbyIsImZvbmN0aW9uc0J1cmVhdSIsIl9yZWYzIiwidG9EYXRlU3RyaW5nIiwibWFuZGF0c0VsdUNvbnNlaWxsZXJHZW5lcmFsIiwiX3JlZjQiLCIkbm90TnVsbCIsIm1hbmRhdHNFbHVEZXB1dGUiLCJfcmVmNSIsIm1hbmRhdHNFbHVEaXZlcnMiLCJtYW5kYXRzRWx1RXVyb3BlZW4iLCJtYW5kYXRzRWx1Q29uc2VpbGxlclJlZ2lvbmFsIiwibWFuZGF0c0VsdVNlbmF0ZXVyIiwiX3JlZjYiLCJtYW5kYXRzRWx1VGVycml0b3JpYWwiLCJtYW5kYXRzRWx1Q29uc2VpbGxlck11bmljaXBhbCIsImZvbmN0aW9uc01lbWJyZUNvbW1pc3Npb24iLCJtZW1Db21JZCIsIl9yZWY3IiwibWFuZGF0c01lbWJyZUNvbW1pc3Npb24iLCJfcmVmOCIsIl9yZWY5IiwiZm9uY3Rpb25zTWVtYnJlRGVsZWdhdGlvbiIsIm1lbURlbGVnYUlkIiwiX3JlZjAiLCJtYW5kYXRzTWVtYnJlRGVsZWdhdGlvbiIsIl9yZWYxIiwiX3JlZjEwIiwibWFuZGF0c01lbWJyZUV4dHJhUGFybGVtZW50YWlyZSIsImZvbmN0aW9uc01lbWJyZUdyb3VwZVBvbGl0aXF1ZSIsIm1lbUdycFBvbElkIiwiX3JlZjExIiwibWFuZGF0c01lbWJyZUdyb3VwZVBvbGl0aXF1ZSIsIl9yZWYxMiIsIl9yZWYxMyIsImZvbmN0aW9uc01lbWJyZUdyb3VwZVNlbmF0b3JpYWwiLCJtZW1HcnBTZW5JZCIsIm1hbmRhdHNNZW1icmVHcm91cGVTZW5hdG9yaWFsIiwiX3JlZjE0IiwiZm9uY3Rpb25zTWVtYnJlT3JnYW5pc21lIiwibWVtT3JnSWQiLCJtYW5kYXRzTWVtYnJlT3JnYW5pc21lIiwiX3JlZjE1IiwibWFuZGF0c01pbmlzdHJlIiwiY29udGFjdHMiLCJ1cmxzIiwiZmluZEFsbFF1ZXJ5IiwiX3JlZjE2IiwiX3JlZjE3IiwiZmluZEFsbENpcmNvbnNjcmlwdGlvbnNRdWVyeSIsIl9yZWYxOCIsImZpbmRBbGxPcmdhbmlzbWVzUXVlcnkiLCJlYiIsInVuaW9uIiwiX3JlZjE5IiwidmFsIiwiY29uY2F0IiwiZmluZEFsbCIsInN0cmVhbSIsImZpbmRBbGxDaXJjb25zY3JpcHRpb25zIiwiZmluZEFsbE9yZ2FuaXNtZXMiLCJmaW5kQWN0aWYiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kZWwvc2Vucy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFeHByZXNzaW9uLCBJbmZlclJlc3VsdCB9IGZyb20gXCJreXNlbHlcIlxuaW1wb3J0IHsganNvbkFycmF5RnJvbSwganNvbk9iamVjdEZyb20gfSBmcm9tIFwia3lzZWx5L2hlbHBlcnMvcG9zdGdyZXNcIlxuaW1wb3J0IHsgZGJTZW5zIH0gZnJvbSBcIi4uL2RhdGFiYXNlc1wiXG5pbXBvcnQgeyBjb25jYXQsIHJ0cmltLCB0b0RhdGVTdHJpbmcgfSBmcm9tIFwiLi91dGlsXCJcblxuZnVuY3Rpb24gY2lyY29uc2NyaXB0aW9uIChkcHROdW06IEV4cHJlc3Npb248c3RyaW5nPikge1xuICByZXR1cm4ganNvbk9iamVjdEZyb20oXG4gICAgZGJTZW5zLnNlbGVjdEZyb20oXCJkcHRcIilcbiAgICAgIC5sZWZ0Sm9pbihcInJlZ1wiLCBcImRwdC5yZWdjb2RcIiwgXCJyZWcucmVnY29kXCIpXG4gICAgICAud2hlcmUoXCJkcHQuZHB0bnVtXCIsIFwiPVwiLCBkcHROdW0pXG4gICAgICAuc2VsZWN0KFtcbiAgICAgICAgXCJkcHQuZHB0Y29kIGFzIGNvZGVcIixcbiAgICAgICAgXCJkcHQuZHB0bGliIGFzIGxpYmVsbGVfZGVwYXJ0ZW1lbnRcIixcbiAgICAgICAgXCJyZWcucmVnbGliIGFzIGxpYmVsbGVfcmVnaW9uXCIsXG4gICAgICBdKSxcbiAgKVxufVxuXG5mdW5jdGlvbiB0ZXh0ZXMgKGFjdElkOiBFeHByZXNzaW9uPHN0cmluZz4pIHtcbiAgcmV0dXJuIGpzb25BcnJheUZyb20oXG4gICAgZGJTZW5zLnNlbGVjdEZyb20oXCJhY3Rpdml0ZV9sb2lcIilcbiAgICAgIC53aGVyZShcImFjdGlkXCIsIFwiPVwiLCBhY3RJZClcbiAgICAgIC5zZWxlY3QoKHsgcmVmIH0pID0+IFtcbiAgICAgICAgcnRyaW0ocmVmKFwibG9pY29kXCIpKS5hcyhcImxvaWNvZFwiKSxcbiAgICAgIF0pLFxuICApXG59XG5cbmZ1bmN0aW9uIGRlbGVnYXRpb25zIChhY3RJZDogRXhwcmVzc2lvbjxzdHJpbmc+KSB7XG4gIHJldHVybiBqc29uQXJyYXlGcm9tKFxuICAgIGRiU2Vucy5zZWxlY3RGcm9tKFwiYWN0aXZpdGVfZGVsZWdhdGlvblwiKVxuICAgICAgLndoZXJlKFwiYWN0aWRcIiwgXCI9XCIsIGFjdElkKVxuICAgICAgLm9yZGVyQnkoXCJkZWxlZ2lkeCBhc2NcIiksXG4gIClcbn1cblxuZnVuY3Rpb24gYWN0aXZpdGVzIChzZW5NYXQ6IEV4cHJlc3Npb248c3RyaW5nPikge1xuICByZXR1cm4ganNvbkFycmF5RnJvbShcbiAgICBkYlNlbnMuc2VsZWN0RnJvbShcImFjdGl2aXRlXCIpXG4gICAgICAubGVmdEpvaW4oXCJhY3Rpdml0ZV9wYXJ0aWNpcGFudFwiLCBcImFjdGl2aXRlLmFjdGlkXCIsIFwiYWN0aXZpdGVfcGFydGljaXBhbnQuYWN0aWRcIilcbiAgICAgIC5sZWZ0Sm9pbihcInR5cGVfYWN0aXZpdGVcIiwgXCJhY3Rpdml0ZS50eXBhY3Rjb2RcIiwgXCJ0eXBlX2FjdGl2aXRlLnR5cGFjdGNvZFwiKVxuICAgICAgLmxlZnRKb2luKFwiY2F0ZWdvcmllX2FjdGl2aXRlXCIsIFwiYWN0aXZpdGUuY2F0YWN0Y29kXCIsIFwiY2F0ZWdvcmllX2FjdGl2aXRlLmNhdGFjdGNvZFwiKVxuICAgICAgLndoZXJlKFwiYWN0aXZpdGVfcGFydGljaXBhbnQuc2VubWF0XCIsIFwiPVwiLCBzZW5NYXQpXG4gICAgICAuc2VsZWN0KCh7IHJlZiB9KSA9PiBbXG4gICAgICAgIGRlbGVnYXRpb25zKHJlZihcImFjdGl2aXRlLmFjdGlkXCIpKS5hcyhcImRlbGVnYXRpb25zXCIpLFxuICAgICAgICB0ZXh0ZXMocmVmKFwiYWN0aXZpdGUuYWN0aWRcIikpLmFzKFwidGV4dGVzXCIpLFxuICAgICAgXSlcbiAgICAgIC5vcmRlckJ5KFwiYWN0aXZpdGUuZGF0ZGViIGRlc2NcIiksXG4gIClcbn1cblxuZnVuY3Rpb24gYWN0aXZpdGVzUGVyc28gKHNlbk1hdDogRXhwcmVzc2lvbjxzdHJpbmc+KSB7XG4gIHJldHVybiBqc29uQXJyYXlGcm9tKFxuICAgIGRiU2Vucy5zZWxlY3RGcm9tKFwiYWN0aXZpdGVfc2VuYXRldXJcIilcbiAgICAgIC5sZWZ0Sm9pbihcInR5cGVfYWN0aXZpdGVfc2VuYXRldXJcIiwgXCJhY3Rpdml0ZV9zZW5hdGV1ci50eXBhY3RzZW5jb2RcIiwgXCJ0eXBlX2FjdGl2aXRlX3NlbmF0ZXVyLnR5cGFjdHNlbmNvZFwiKVxuICAgICAgLndoZXJlKFwiYWN0aXZpdGVfc2VuYXRldXIuc2VubWF0XCIsIFwiPVwiLCBzZW5NYXQpXG4gICAgICAub3JkZXJCeShcImFjdGl2aXRlX3NlbmF0ZXVyLmRhdGRlYiBkZXNjXCIpLFxuICApXG59XG5cbmZ1bmN0aW9uIGZvbmN0aW9uc0J1cmVhdSAoc2VuTWF0OiBFeHByZXNzaW9uPHN0cmluZz4pIHtcbiAgcmV0dXJuIGpzb25BcnJheUZyb20oXG4gICAgZGJTZW5zLnNlbGVjdEZyb20oXCJzZW5idXJcIilcbiAgICAgIC5sZWZ0Sm9pbihcImJ1clwiLCBcInNlbmJ1ci5idXJjb2RcIiwgXCJidXIuYnVyY29kXCIpXG4gICAgICAud2hlcmUoXCJzZW5idXIuc2VubWF0XCIsIFwiPVwiLCBzZW5NYXQpXG4gICAgICAuc2VsZWN0KCh7IHJlZiB9KSA9PiBbXG4gICAgICAgIHRvRGF0ZVN0cmluZyhyZWYoXCJzZW5idXIuc2VuYnVyZGF0ZGViXCIpKS5hcyhcImRhdGVfZGVidXRcIiksXG4gICAgICAgIHRvRGF0ZVN0cmluZyhyZWYoXCJzZW5idXIuc2VuYnVyZGF0ZmluXCIpKS5hcyhcImRhdGVfZmluXCIpLFxuICAgICAgICBcImJ1ci5idXJsaWIgYXMgbGliZWxsZVwiLFxuICAgICAgXSlcbiAgICAgIC5vcmRlckJ5KFwic2VuYnVyLnNlbmJ1cmRhdGRlYiBkZXNjXCIpLFxuICApXG59XG5cbmZ1bmN0aW9uIG1hbmRhdHNFbHVDb25zZWlsbGVyR2VuZXJhbCAoc2VuTWF0OiBFeHByZXNzaW9uPHN0cmluZz4pIHtcbiAgcmV0dXJuIGpzb25BcnJheUZyb20oXG4gICAgZGJTZW5zLnNlbGVjdEZyb20oXCJlbHVjYW5cIilcbiAgICAgIC5sZWZ0Sm9pbihcInR5cG1hblwiLCBcImVsdWNhbi50eXBtYW5jb2RcIiwgXCJ0eXBtYW4udHlwbWFuY29kXCIpXG4gICAgICAud2hlcmUoXCJlbHVjYW4uc2VubWF0XCIsIFwiPVwiLCBzZW5NYXQpXG4gICAgICAuc2VsZWN0KCh7IHJlZiB9KSA9PiBbXG4gICAgICAgIGNpcmNvbnNjcmlwdGlvbihyZWYoXCJlbHVjYW4uZHB0bnVtXCIpLiRub3ROdWxsKCkpLmFzKFwiY2lyY29uc2NyaXB0aW9uXCIpLFxuICAgICAgXSlcbiAgICAgIC5vcmRlckJ5KFwiZWx1Y2FuLmVsdWRhdGRlYiBkZXNjXCIpLFxuICApXG59XG5cbmZ1bmN0aW9uIG1hbmRhdHNFbHVEZXB1dGUgKHNlbk1hdDogRXhwcmVzc2lvbjxzdHJpbmc+KSB7XG4gIHJldHVybiBqc29uQXJyYXlGcm9tKFxuICAgIGRiU2Vucy5zZWxlY3RGcm9tKFwiZWx1ZGVwXCIpXG4gICAgICAubGVmdEpvaW4oXCJ0eXBtYW5cIiwgXCJlbHVkZXAudHlwbWFuY29kXCIsIFwidHlwbWFuLnR5cG1hbmNvZFwiKVxuICAgICAgLndoZXJlKFwiZWx1ZGVwLnNlbm1hdFwiLCBcIj1cIiwgc2VuTWF0KVxuICAgICAgLnNlbGVjdCgoeyByZWYgfSkgPT4gW1xuICAgICAgICBjaXJjb25zY3JpcHRpb24ocmVmKFwiZWx1ZGVwLmNpcmNvXCIpLiRub3ROdWxsKCkpLmFzKFwiY2lyY29uc2NyaXB0aW9uXCIpLFxuICAgICAgXSlcbiAgICAgIC5vcmRlckJ5KFwiZWx1ZGVwLmVsdWRhdGRlYiBkZXNjXCIpLFxuICApXG59XG5cbmZ1bmN0aW9uIG1hbmRhdHNFbHVEaXZlcnMgKHNlbk1hdDogRXhwcmVzc2lvbjxzdHJpbmc+KSB7XG4gIHJldHVybiBqc29uQXJyYXlGcm9tKFxuICAgIGRiU2Vucy5zZWxlY3RGcm9tKFwiZWx1ZGl2XCIpXG4gICAgICAubGVmdEpvaW4oXCJ0eXBtYW5cIiwgXCJlbHVkaXYudHlwbWFuY29kXCIsIFwidHlwbWFuLnR5cG1hbmNvZFwiKVxuICAgICAgLndoZXJlKFwiZWx1ZGl2LnNlbm1hdFwiLCBcIj1cIiwgc2VuTWF0KVxuICAgICAgLm9yZGVyQnkoXCJlbHVkaXYuZWx1ZGF0ZGViIGRlc2NcIiksXG4gIClcbn1cblxuZnVuY3Rpb24gbWFuZGF0c0VsdUV1cm9wZWVuIChzZW5NYXQ6IEV4cHJlc3Npb248c3RyaW5nPikge1xuICByZXR1cm4ganNvbkFycmF5RnJvbShcbiAgICBkYlNlbnMuc2VsZWN0RnJvbShcImVsdWV1clwiKVxuICAgICAgLmxlZnRKb2luKFwibmF0aW9uXCIsIFwiZWx1ZXVyLm5hdGlvbmNvZFwiLCBcIm5hdGlvbi5uYXRpb25jb2RcIilcbiAgICAgIC5sZWZ0Sm9pbihcInR5cG1hblwiLCBcImVsdWV1ci50eXBtYW5jb2RcIiwgXCJ0eXBtYW4udHlwbWFuY29kXCIpXG4gICAgICAud2hlcmUoXCJlbHVldXIuc2VubWF0XCIsIFwiPVwiLCBzZW5NYXQpXG4gICAgICAub3JkZXJCeShcImVsdWV1ci5lbHVkYXRkZWIgZGVzY1wiKSxcbiAgKVxufVxuXG5mdW5jdGlvbiBtYW5kYXRzRWx1Q29uc2VpbGxlclJlZ2lvbmFsIChzZW5NYXQ6IEV4cHJlc3Npb248c3RyaW5nPikge1xuICByZXR1cm4ganNvbkFycmF5RnJvbShcbiAgICBkYlNlbnMuc2VsZWN0RnJvbShcImVsdXJlZ1wiKVxuICAgICAgLmxlZnRKb2luKFwicmVnXCIsIFwiZWx1cmVnLnJlZ2NvZFwiLCBcInJlZy5yZWdjb2RcIilcbiAgICAgIC5sZWZ0Sm9pbihcInR5cG1hblwiLCBcImVsdXJlZy50eXBtYW5jb2RcIiwgXCJ0eXBtYW4udHlwbWFuY29kXCIpXG4gICAgICAud2hlcmUoXCJlbHVyZWcuc2VubWF0XCIsIFwiPVwiLCBzZW5NYXQpXG4gICAgICAub3JkZXJCeShcImVsdXJlZy5lbHVkYXRkZWIgZGVzY1wiKSxcbiAgKVxufVxuXG5mdW5jdGlvbiBtYW5kYXRzRWx1U2VuYXRldXIgKHNlbk1hdDogRXhwcmVzc2lvbjxzdHJpbmc+KSB7XG4gIHJldHVybiBqc29uQXJyYXlGcm9tKFxuICAgIGRiU2Vucy5zZWxlY3RGcm9tKFwiZWx1c2VuXCIpXG4gICAgICAubGVmdEpvaW4oXCJldGFkZWJtYW5cIiwgXCJlbHVzZW4uZXRhZGVibWFuY29kXCIsIFwiZXRhZGVibWFuLmV0YWRlYm1hbmNvZFwiKVxuICAgICAgLmxlZnRKb2luKFwiZXRhZmlubWFuXCIsIFwiZWx1c2VuLmV0YWZpbm1hbmNvZFwiLCBcImV0YWZpbm1hbi5ldGFmaW5tYW5jb2RcIilcbiAgICAgIC5sZWZ0Sm9pbihcInR5cG1hblwiLCBcImVsdXNlbi50eXBtYW5jb2RcIiwgXCJ0eXBtYW4udHlwbWFuY29kXCIpXG4gICAgICAud2hlcmUoXCJlbHVzZW4uc2VubWF0XCIsIFwiPVwiLCBzZW5NYXQpXG4gICAgICAuc2VsZWN0KCh7IHJlZiB9KSA9PiBbXG4gICAgICAgIFwiZWx1c2VuLmRwdG51bSBhcyBjb2RlX2NpcmNvbnNjcmlwdGlvblwiLFxuICAgICAgICB0b0RhdGVTdHJpbmcocmVmKFwiZWx1c2VuLmVsdWRhdGRlYlwiKSkuYXMoXCJkYXRlX2RlYnV0XCIpLFxuICAgICAgICB0b0RhdGVTdHJpbmcocmVmKFwiZWx1c2VuLmVsdWRhdGZpblwiKSkuYXMoXCJkYXRlX2ZpblwiKSxcbiAgICAgICAgXCJldGFkZWJtYW4uZXRhZGVibWFubGliIGFzIGV0YXRfZGVidXRcIixcbiAgICAgICAgXCJldGFmaW5tYW4uZXRhZmlubWFuIGFzIGV0YXRfZmluXCIsXG4gICAgICBdKVxuICAgICAgLm9yZGVyQnkoXCJlbHVzZW4uZWx1ZGF0ZGViIGRlc2NcIiksXG4gIClcbn1cblxuZnVuY3Rpb24gbWFuZGF0c0VsdVRlcnJpdG9yaWFsIChzZW5NYXQ6IEV4cHJlc3Npb248c3RyaW5nPikge1xuICByZXR1cm4ganNvbkFycmF5RnJvbShcbiAgICBkYlNlbnMuc2VsZWN0RnJvbShcImVsdXRlclwiKVxuICAgICAgLmxlZnRKb2luKFwiYXNzdGVyXCIsIFwiZWx1dGVyLmFzc3RlcmNvZFwiLCBcImFzc3Rlci5hc3N0ZXJjb2RcIilcbiAgICAgIC5sZWZ0Sm9pbihcInR5cG1hblwiLCBcImVsdXRlci50eXBtYW5jb2RcIiwgXCJ0eXBtYW4udHlwbWFuY29kXCIpXG4gICAgICAud2hlcmUoXCJlbHV0ZXIuc2VubWF0XCIsIFwiPVwiLCBzZW5NYXQpXG4gICAgICAub3JkZXJCeShcImVsdXRlci5lbHVkYXRkZWIgZGVzY1wiKSxcbiAgKVxufVxuXG5mdW5jdGlvbiBtYW5kYXRzRWx1Q29uc2VpbGxlck11bmljaXBhbCAoc2VuTWF0OiBFeHByZXNzaW9uPHN0cmluZz4pIHtcbiAgcmV0dXJuIGpzb25BcnJheUZyb20oXG4gICAgZGJTZW5zLnNlbGVjdEZyb20oXCJlbHV2aWxcIilcbiAgICAgIC5sZWZ0Sm9pbihcInR5cG1hblwiLCBcImVsdXZpbC50eXBtYW5jb2RcIiwgXCJ0eXBtYW4udHlwbWFuY29kXCIpXG4gICAgICAud2hlcmUoXCJlbHV2aWwuc2VubWF0XCIsIFwiPVwiLCBzZW5NYXQpXG4gICAgICAub3JkZXJCeShcImVsdXZpbC5lbHVkYXRkZWIgZGVzY1wiKSxcbiAgKVxufVxuXG5mdW5jdGlvbiBmb25jdGlvbnNNZW1icmVDb21taXNzaW9uIChtZW1Db21JZDogRXhwcmVzc2lvbjxzdHJpbmc+KSB7XG4gIHJldHVybiBqc29uQXJyYXlGcm9tKFxuICAgIGRiU2Vucy5zZWxlY3RGcm9tKFwiZm9ubWVtY29tXCIpXG4gICAgICAubGVmdEpvaW4oXCJmb25jb21cIiwgXCJmb25tZW1jb20uZm9uY29tY29kXCIsIFwiZm9uY29tLmZvbmNvbWNvZFwiKVxuICAgICAgLndoZXJlKFwiZm9ubWVtY29tLm1lbWNvbWlkXCIsIFwiPVwiLCBtZW1Db21JZClcbiAgICAgIC5zZWxlY3QoKHsgcmVmIH0pID0+IFtcbiAgICAgICAgdG9EYXRlU3RyaW5nKHJlZihcImZvbm1lbWNvbS5mb25tZW1jb21kYXRkZWJcIikpLmFzKFwiZGF0ZV9kZWJ1dFwiKSxcbiAgICAgICAgdG9EYXRlU3RyaW5nKHJlZihcImZvbm1lbWNvbS5mb25tZW1jb21kYXRmaW5cIikpLmFzKFwiZGF0ZV9maW5cIiksXG4gICAgICAgIFwiZm9uY29tLmZvbmNvbWxpYiBhcyBsaWJlbGxlXCIsXG4gICAgICBdKVxuICAgICAgLm9yZGVyQnkoXCJmb25tZW1jb20uZm9ubWVtY29tZGF0ZGViIGRlc2NcIiksXG4gIClcbn1cblxuZnVuY3Rpb24gbWFuZGF0c01lbWJyZUNvbW1pc3Npb24gKHNlbk1hdDogRXhwcmVzc2lvbjxzdHJpbmc+KSB7XG4gIHJldHVybiBqc29uQXJyYXlGcm9tKFxuICAgIGRiU2Vucy5zZWxlY3RGcm9tKFwibWVtY29tXCIpXG4gICAgICAubGVmdEpvaW4oXCJjb21cIiwgXCJtZW1jb20ub3JnY29kXCIsIFwiY29tLm9yZ2NvZFwiKVxuICAgICAgLmxlZnRKb2luKFwidHlwb3JnXCIsIFwiY29tLnR5cG9yZ2NvZFwiLCBcInR5cG9yZy50eXBvcmdjb2RcIilcbiAgICAgIC53aGVyZShcIm1lbWNvbS5zZW5tYXRcIiwgXCI9XCIsIHNlbk1hdClcbiAgICAgIC5zZWxlY3QoKHsgcmVmIH0pID0+IFtcbiAgICAgICAgXCJjb20udHlwb3JnY29kIGFzIHR5cGVfY29kZV9vcmdhbmlzbWVcIixcbiAgICAgICAgXCJtZW1jb20ub3JnY29kIGFzIGNvZGVfb3JnYW5pc21lXCIsXG4gICAgICAgIFwidHlwb3JnLnR5cG9yZ2xpYiBhcyB0eXBlX29yZ2FuaXNtZVwiLFxuICAgICAgICBcImNvbS5jb21saWxtaW4gYXMgbGliZWxsZVwiLFxuICAgICAgICB0b0RhdGVTdHJpbmcocmVmKFwibWVtY29tLm1lbWNvbWRhdGRlYlwiKSkuYXMoXCJkYXRlX2RlYnV0XCIpLFxuICAgICAgICB0b0RhdGVTdHJpbmcocmVmKFwibWVtY29tLm1lbWNvbWRhdGZpblwiKSkuYXMoXCJkYXRlX2ZpblwiKSxcbiAgICAgIF0pXG4gICAgICAuc2VsZWN0KCh7IHJlZiB9KSA9PiBbXG4gICAgICAgIGZvbmN0aW9uc01lbWJyZUNvbW1pc3Npb24ocmVmKFwibWVtY29tLm1lbWNvbWlkXCIpKS5hcyhcImZvbmN0aW9uc1wiKSxcbiAgICAgIF0pXG4gICAgICAub3JkZXJCeShcIm1lbWNvbS5tZW1jb21kYXRkZWIgZGVzY1wiKSxcbiAgKVxufVxuXG5mdW5jdGlvbiBmb25jdGlvbnNNZW1icmVEZWxlZ2F0aW9uIChtZW1EZWxlZ2FJZDogRXhwcmVzc2lvbjxzdHJpbmc+KSB7XG4gIHJldHVybiBqc29uQXJyYXlGcm9tKFxuICAgIGRiU2Vucy5zZWxlY3RGcm9tKFwiZm9ubWVtZGVsZWdhXCIpXG4gICAgICAubGVmdEpvaW4oXCJmb25kZWxlZ2FcIiwgXCJmb25tZW1kZWxlZ2EuZm9uZGVsY29kXCIsIFwiZm9uZGVsZWdhLmZvbmRlbGNvZFwiKVxuICAgICAgLndoZXJlKFwiZm9ubWVtZGVsZWdhLm1lbWRlbGVnYWlkXCIsIFwiPVwiLCBtZW1EZWxlZ2FJZClcbiAgICAgIC5zZWxlY3QoKHsgcmVmIH0pID0+IFtcbiAgICAgICAgdG9EYXRlU3RyaW5nKHJlZihcImZvbm1lbWRlbGVnYS5mb25tZW1kZWxkYXRkZWJcIikpLmFzKFwiZGF0ZV9kZWJ1dFwiKSxcbiAgICAgICAgdG9EYXRlU3RyaW5nKHJlZihcImZvbm1lbWRlbGVnYS5mb25tZW1kZWxkYXRmaW5cIikpLmFzKFwiZGF0ZV9maW5cIiksXG4gICAgICAgIFwiZm9uZGVsZWdhLmZvbmRlbGxpYiBhcyBsaWJlbGxlXCIsXG4gICAgICBdKVxuICAgICAgLm9yZGVyQnkoXCJmb25tZW1kZWxlZ2EuZm9ubWVtZGVsZGF0ZGViIGRlc2NcIiksXG4gIClcbn1cblxuZnVuY3Rpb24gbWFuZGF0c01lbWJyZURlbGVnYXRpb24gKHNlbk1hdDogRXhwcmVzc2lvbjxzdHJpbmc+KSB7XG4gIHJldHVybiBqc29uQXJyYXlGcm9tKFxuICAgIGRiU2Vucy5zZWxlY3RGcm9tKFwibWVtZGVsZWdhXCIpXG4gICAgICAubGVmdEpvaW4oXCJkZWxlZ2FcIiwgXCJtZW1kZWxlZ2Eub3JnY29kXCIsIFwiZGVsZWdhLm9yZ2NvZFwiKVxuICAgICAgLmxlZnRKb2luKFwiZGVzaWdub3JnXCIsIFwibWVtZGVsZWdhLmRlc2lnbmNvZFwiLCBcImRlc2lnbm9yZy5kZXNpZ25jb2RcIilcbiAgICAgIC5sZWZ0Sm9pbihcInR5cG9yZ1wiLCBcImRlbGVnYS50eXBvcmdjb2RcIiwgXCJ0eXBvcmcudHlwb3JnY29kXCIpXG4gICAgICAud2hlcmUoXCJtZW1kZWxlZ2Euc2VubWF0XCIsIFwiPVwiLCBzZW5NYXQpXG4gICAgICAuc2VsZWN0KCh7IHJlZiB9KSA9PiBbXG4gICAgICAgIFwiZGVsZWdhLnR5cG9yZ2NvZCBhcyB0eXBlX2NvZGVfb3JnYW5pc21lXCIsXG4gICAgICAgIFwibWVtZGVsZWdhLm9yZ2NvZCBhcyBjb2RlX29yZ2FuaXNtZVwiLFxuICAgICAgICBcInR5cG9yZy50eXBvcmdsaWIgYXMgdHlwZV9vcmdhbmlzbWVcIixcbiAgICAgICAgXCJkZWxlZ2EuZXZlbGliIGFzIGxpYmVsbGVcIixcbiAgICAgICAgdG9EYXRlU3RyaW5nKHJlZihcIm1lbWRlbGVnYS5tZW1kZWxlZ2FkYXRkZWJcIikpLmFzKFwiZGF0ZV9kZWJ1dFwiKSxcbiAgICAgICAgdG9EYXRlU3RyaW5nKHJlZihcIm1lbWRlbGVnYS5tZW1kZWxlZ2FkYXRmaW5cIikpLmFzKFwiZGF0ZV9maW5cIiksXG4gICAgICBdKVxuICAgICAgLnNlbGVjdCgoeyByZWYgfSkgPT4gW1xuICAgICAgICBmb25jdGlvbnNNZW1icmVEZWxlZ2F0aW9uKHJlZihcIm1lbWRlbGVnYS5tZW1kZWxlZ2FpZFwiKSkuYXMoXCJmb25jdGlvbnNcIiksXG4gICAgICBdKVxuICAgICAgLm9yZGVyQnkoXCJtZW1kZWxlZ2EubWVtZGVsZWdhZGF0ZGViIGRlc2NcIiksXG4gIClcbn1cblxuZnVuY3Rpb24gbWFuZGF0c01lbWJyZUV4dHJhUGFybGVtZW50YWlyZSAoc2VuTWF0OiBFeHByZXNzaW9uPHN0cmluZz4pIHtcbiAgcmV0dXJuIGpzb25BcnJheUZyb20oXG4gICAgZGJTZW5zLnNlbGVjdEZyb20oXCJtZW1leHRwYXJcIilcbiAgICAgIC5sZWZ0Sm9pbihcIm9yZ2V4dFwiLCBcIm1lbWV4dHBhci5vcmdjb2RcIiwgXCJvcmdleHQub3JnY29kXCIpXG4gICAgICAubGVmdEpvaW4oXCJkZXNpZ25cIiwgXCJtZW1leHRwYXIuZGVzaWduY29kXCIsIFwiZGVzaWduLmRlc2lnbmNvZFwiKVxuICAgICAgLndoZXJlKFwibWVtZXh0cGFyLnNlbm1hdFwiLCBcIj1cIiwgc2VuTWF0KVxuICAgICAgLm9yZGVyQnkoXCJtZW1leHRwYXIubWVtZXh0cGFyZGF0ZGViIGRlc2NcIiksXG4gIClcbn1cblxuZnVuY3Rpb24gZm9uY3Rpb25zTWVtYnJlR3JvdXBlUG9saXRpcXVlIChtZW1HcnBQb2xJZDogRXhwcmVzc2lvbjxzdHJpbmc+KSB7XG4gIHJldHVybiBqc29uQXJyYXlGcm9tKFxuICAgIGRiU2Vucy5zZWxlY3RGcm9tKFwiZm9ubWVtZ3JwcG9sXCIpXG4gICAgICAubGVmdEpvaW4oXCJmb25ncnBwb2xcIiwgXCJmb25tZW1ncnBwb2wuZm9uZ3JwcG9sY29kXCIsIFwiZm9uZ3JwcG9sLmZvbmdycHBvbGNvZFwiKVxuICAgICAgLndoZXJlKFwiZm9ubWVtZ3JwcG9sLm1lbWdycHBvbGlkXCIsIFwiPVwiLCBtZW1HcnBQb2xJZClcbiAgICAgIC5zZWxlY3QoKHsgcmVmIH0pID0+IFtcbiAgICAgICAgdG9EYXRlU3RyaW5nKHJlZihcImZvbm1lbWdycHBvbC5mb25tZW1ncnBwb2xkYXRkZWJcIikpLmFzKFwiZGF0ZV9kZWJ1dFwiKSxcbiAgICAgICAgdG9EYXRlU3RyaW5nKHJlZihcImZvbm1lbWdycHBvbC5mb25tZW1ncnBwb2xkYXRmaW5cIikpLmFzKFwiZGF0ZV9maW5cIiksXG4gICAgICAgIFwiZm9uZ3JwcG9sLmZvbmdycHBvbGxpYiBhcyBsaWJlbGxlXCIsXG4gICAgICBdKVxuICAgICAgLm9yZGVyQnkoXCJmb25tZW1ncnBwb2wuZm9ubWVtZ3JwcG9sZGF0ZGViIGRlc2NcIiksXG4gIClcbn1cblxuZnVuY3Rpb24gbWFuZGF0c01lbWJyZUdyb3VwZVBvbGl0aXF1ZSAoc2VuTWF0OiBFeHByZXNzaW9uPHN0cmluZz4pIHtcbiAgcmV0dXJuIGpzb25BcnJheUZyb20oXG4gICAgZGJTZW5zLnNlbGVjdEZyb20oXCJtZW1ncnBwb2xcIilcbiAgICAgIC5sZWZ0Sm9pbihcImdycHBvbFwiLCBcIm1lbWdycHBvbC5ncnBwb2xjb2RcIiwgXCJncnBwb2wuZ3JwcG9sY29kXCIpXG4gICAgICAubGVmdEpvaW4oXCJ0eXBhcHBwb2xcIiwgXCJtZW1ncnBwb2wudHlwYXBwcG9sY29kXCIsIFwidHlwYXBwcG9sLnR5cGFwcHBvbGNvZFwiKVxuICAgICAgLndoZXJlKFwibWVtZ3JwcG9sLnNlbm1hdFwiLCBcIj1cIiwgc2VuTWF0KVxuICAgICAgLnNlbGVjdCgoeyByZWYgfSkgPT4gW1xuICAgICAgICBcIm1lbWdycHBvbC5ncnBwb2xjb2QgYXMgY29kZVwiLFxuICAgICAgICBcImdycHBvbC5ncnBwb2xsaWJjb3UgYXMgbGliZWxsZVwiLFxuICAgICAgICB0b0RhdGVTdHJpbmcocmVmKFwibWVtZ3JwcG9sLm1lbWdycHBvbGRhdGRlYlwiKSkuYXMoXCJkYXRlX2RlYnV0XCIpLFxuICAgICAgICB0b0RhdGVTdHJpbmcocmVmKFwibWVtZ3JwcG9sLm1lbWdycHBvbGRhdGZpblwiKSkuYXMoXCJkYXRlX2ZpblwiKSxcbiAgICAgICAgXCJ0eXBhcHBwb2wudHlwYXBwcG9sbGliIGFzIGZvbmN0aW9uXCIsXG4gICAgICBdKVxuICAgICAgLnNlbGVjdCgoeyByZWYgfSkgPT4gW1xuICAgICAgICBmb25jdGlvbnNNZW1icmVHcm91cGVQb2xpdGlxdWUocmVmKFwibWVtZ3JwcG9sLm1lbWdycHBvbGlkXCIpKS5hcyhcImZvbmN0aW9uc1wiKSxcbiAgICAgIF0pXG4gICAgICAub3JkZXJCeShcIm1lbWdycHBvbC5tZW1ncnBwb2xkYXRkZWIgZGVzY1wiKSxcbiAgKVxufVxuXG5mdW5jdGlvbiBmb25jdGlvbnNNZW1icmVHcm91cGVTZW5hdG9yaWFsIChtZW1HcnBTZW5JZDogRXhwcmVzc2lvbjxzdHJpbmc+KSB7XG4gIHJldHVybiBqc29uQXJyYXlGcm9tKFxuICAgIGRiU2Vucy5zZWxlY3RGcm9tKFwiZm9ubWVtZ3Jwc2VuXCIpXG4gICAgICAubGVmdEpvaW4oXCJmb25ncnBzZW5cIiwgXCJmb25tZW1ncnBzZW4uZm9uZ3Jwc2VuY29kXCIsIFwiZm9uZ3Jwc2VuLmZvbmdycHNlbmNvZFwiKVxuICAgICAgLndoZXJlKFwiZm9ubWVtZ3Jwc2VuLm1lbWdycHNlbmlkXCIsIFwiPVwiLCBtZW1HcnBTZW5JZClcbiAgICAgIC5vcmRlckJ5KFwiZm9ubWVtZ3Jwc2VuLmZvbm1lbWdycHNlbmRhdGRlYiBkZXNjXCIpLFxuICApXG59XG5cbmZ1bmN0aW9uIG1hbmRhdHNNZW1icmVHcm91cGVTZW5hdG9yaWFsIChzZW5NYXQ6IEV4cHJlc3Npb248c3RyaW5nPikge1xuICByZXR1cm4ganNvbkFycmF5RnJvbShcbiAgICBkYlNlbnMuc2VsZWN0RnJvbShcIm1lbWdycHNlblwiKVxuICAgICAgLmxlZnRKb2luKFwiZ3Jwc2VuYW1pXCIsIFwibWVtZ3Jwc2VuLm9yZ2NvZFwiLCBcImdycHNlbmFtaS5vcmdjb2RcIilcbiAgICAgIC5sZWZ0Sm9pbihcInR5cGdycHNlblwiLCBcImdycHNlbmFtaS50eXBncnBzZW5jb2RcIiwgXCJ0eXBncnBzZW4udHlwZ3Jwc2VuY29kXCIpXG4gICAgICAud2hlcmUoXCJtZW1ncnBzZW4uc2VubWF0XCIsIFwiPVwiLCBzZW5NYXQpXG4gICAgICAuc2VsZWN0KCh7IHJlZiB9KSA9PiBbXG4gICAgICAgIGZvbmN0aW9uc01lbWJyZUdyb3VwZVNlbmF0b3JpYWwocmVmKFwibWVtZ3Jwc2VuLm1lbWdycHNlbmlkXCIpKS5hcyhcImZvbmN0aW9uc1wiKSxcbiAgICAgIF0pXG4gICAgICAub3JkZXJCeShcIm1lbWdycHNlbi5tZW1ncnBzZW5kYXRlbnQgZGVzY1wiKSxcbiAgKVxufVxuXG5mdW5jdGlvbiBmb25jdGlvbnNNZW1icmVPcmdhbmlzbWUgKG1lbU9yZ0lkOiBFeHByZXNzaW9uPHN0cmluZz4pIHtcbiAgcmV0dXJuIGpzb25BcnJheUZyb20oXG4gICAgZGJTZW5zLnNlbGVjdEZyb20oXCJmb25tZW1vcmdcIilcbiAgICAgIC5sZWZ0Sm9pbihcImZvbm9yZ1wiLCBcImZvbm1lbW9yZy5mb25vcmdjb2RcIiwgXCJmb25vcmcuZm9ub3JnY29kXCIpXG4gICAgICAud2hlcmUoXCJmb25tZW1vcmcubWVtb3JnaWRcIiwgXCI9XCIsIG1lbU9yZ0lkKVxuICAgICAgLm9yZGVyQnkoXCJmb25tZW1vcmcuZm9ubWVtb3JnZGF0ZGViIGRlc2NcIiksXG4gIClcbn1cblxuZnVuY3Rpb24gbWFuZGF0c01lbWJyZU9yZ2FuaXNtZSAoc2VuTWF0OiBFeHByZXNzaW9uPHN0cmluZz4pIHtcbiAgcmV0dXJuIGpzb25BcnJheUZyb20oXG4gICAgZGJTZW5zLnNlbGVjdEZyb20oXCJtZW1vcmdcIilcbiAgICAgIC5sZWZ0Sm9pbihcIm9yZ1wiLCBcIm1lbW9yZy5vcmdjb2RcIiwgXCJvcmcub3JnY29kXCIpXG4gICAgICAubGVmdEpvaW4oXCJ0eXBvcmdcIiwgXCJvcmcudHlwb3JnY29kXCIsIFwidHlwb3JnLnR5cG9yZ2NvZFwiKVxuICAgICAgLmxlZnRKb2luKFwiZGVzaWdub3JnXCIsIFwibWVtb3JnLmRlc2lnbmNvZFwiLCBcImRlc2lnbm9yZy5kZXNpZ25jb2RcIilcbiAgICAgIC53aGVyZShcIm1lbW9yZy5zZW5tYXRcIiwgXCI9XCIsIHNlbk1hdClcbiAgICAgIC5zZWxlY3QoKHsgcmVmIH0pID0+IFtcbiAgICAgICAgZm9uY3Rpb25zTWVtYnJlT3JnYW5pc21lKHJlZihcIm1lbW9yZy5tZW1vcmdpZFwiKSkuYXMoXCJmb25jdGlvbnNcIiksXG4gICAgICBdKVxuICAgICAgLm9yZGVyQnkoXCJtZW1vcmcubWVtb3JnZGF0ZGViIGRlc2NcIiksXG4gIClcbn1cblxuZnVuY3Rpb24gbWFuZGF0c01pbmlzdHJlIChzZW5NYXQ6IEV4cHJlc3Npb248c3RyaW5nPikge1xuICByZXR1cm4ganNvbkFycmF5RnJvbShcbiAgICBkYlNlbnMuc2VsZWN0RnJvbShcIm1pbmluZFwiKVxuICAgICAgLndoZXJlKFwibWluaW5kLnNlbm1hdFwiLCBcIj1cIiwgc2VuTWF0KVxuICAgICAgLm9yZGVyQnkoXCJtaW5pbmQubWluZGF0ZGViIGRlc2NcIiksXG4gIClcbn1cblxuZnVuY3Rpb24gY29udGFjdHMgKHNlbk1hdDogRXhwcmVzc2lvbjxzdHJpbmc+KSB7XG4gIHJldHVybiBqc29uQXJyYXlGcm9tKFxuICAgIGRiU2Vucy5zZWxlY3RGcm9tKFwicG9pY29uXCIpXG4gICAgICAubGVmdEpvaW4oXCJhZHJlc3NlXCIsIFwicG9pY29uLnBvaWNvbmlkXCIsIFwiYWRyZXNzZS5wb2ljb25pZFwiKVxuICAgICAgLmxlZnRKb2luKFwibWVsXCIsIFwicG9pY29uLnBvaWNvbmlkXCIsIFwibWVsLnBvaWNvbmlkXCIpXG4gICAgICAubGVmdEpvaW4oXCJ0ZWxlcGhvbmVcIiwgXCJwb2ljb24ucG9pY29uaWRcIiwgXCJ0ZWxlcGhvbmUucG9pY29uaWRcIilcbiAgICAgIC53aGVyZShcInBvaWNvbi5zZW5tYXRcIiwgXCI9XCIsIHNlbk1hdClcbiAgICAgIC5vcmRlckJ5KFwicG9pY29uLnBvaWNvbm51bXRyaSBhc2NcIiksXG4gIClcbn1cblxuZnVuY3Rpb24gdXJscyAoc2VuTWF0OiBFeHByZXNzaW9uPHN0cmluZz4pIHtcbiAgcmV0dXJuIGpzb25BcnJheUZyb20oXG4gICAgZGJTZW5zLnNlbGVjdEZyb20oXCJzZW51cmxcIilcbiAgICAgIC53aGVyZShcInNlbnVybC5zZW5tYXRcIiwgXCI9XCIsIHNlbk1hdClcbiAgICAgIC5zZWxlY3QoW1xuICAgICAgICBcInNlbnVybC50eXB1cmxjb2QgYXMgY29kZV91cmxcIixcbiAgICAgICAgXCJzZW51cmwuc2VudXJsdXJsIGFzIHVybFwiLFxuICAgICAgXSlcbiAgICAgIC5vcmRlckJ5KFwic2VudXJsLnNlbnVybG51bXRyaSBhc2NcIiksXG4gIClcbn1cblxuY29uc3QgZmluZEFsbFF1ZXJ5ID0gZGJTZW5zXG4gIC5zZWxlY3RGcm9tKFwic2VuXCIpXG4gIC5sZWZ0Sm9pbihcImV0YXNlblwiLCBcInNlbi5ldGFzZW5jb2RcIiwgXCJldGFzZW4uZXRhc2VuY29kXCIpXG4gIC5sZWZ0Sm9pbihcInBjc1wiLCBcInNlbi5wY3Njb2RcIiwgXCJwY3MucGNzY29kXCIpXG4gIC5sZWZ0Sm9pbihcInBjczQyXCIsIFwicGNzLnBjczQyY29kXCIsIFwicGNzNDIucGNzNDJjb2RcIilcbiAgLmxlZnRKb2luKFwicGNzMjRcIiwgXCJwY3M0Mi5wY3MyNGNvZFwiLCBcInBjczI0LnBjczI0Y29kXCIpXG4gIC5sZWZ0Sm9pbihcInBjczhcIiwgXCJwY3MyNC5wY3M4Y29kXCIsIFwicGNzOC5wY3M4Y29kXCIpXG4gIC5sZWZ0Sm9pbihcImdycHBvbFwiLCBcInNlbi5zZW5ncnBwb2xjb2Rjb3VcIiwgXCJncnBwb2wuZ3JwcG9sY29kXCIpXG4gIC5sZWZ0Sm9pbihcImNvbVwiLCBcInNlbi5zZW5jb21jb2Rjb3VcIiwgXCJjb20ub3JnY29kXCIpXG4gIC5zZWxlY3QoKHsgcmVmIH0pID0+IFtcbiAgICBcInNlbi5zZW5tYXQgYXMgbWF0cmljdWxlXCIsXG4gICAgXCJzZW4ucXVhY29kIGFzIHF1YWxpdGVcIixcbiAgICBcInNlbi5zZW5ub211c2UgYXMgbm9tX3VzdWVsXCIsXG4gICAgXCJzZW4uc2VucHJlbm9tdXNlIGFzIHByZW5vbV91c3VlbFwiLFxuICAgIFwic2VuLmV0YXNlbmNvZCBhcyBldGF0XCIsXG4gICAgdG9EYXRlU3RyaW5nKHJlZihcInNlbi5zZW5kYXRuYWlcIikpLmFzKFwiZGF0ZV9uYWlzc2FuY2VcIiksXG4gICAgdG9EYXRlU3RyaW5nKHJlZihcInNlbi5zZW5kYXRkZWNcIikpLmFzKFwiZGF0ZV9kZWNlc1wiKSxcbiAgICBcInNlbi5zZW5ncnBwb2xjb2Rjb3UgYXMgY29kZV9ncm91cGVfcG9saXRpcXVlXCIsXG4gICAgXCJzZW4uc2VuZ3JwcG9sbGljY291IGFzIGdyb3VwZV9wb2xpdGlxdWVcIixcbiAgICBcInNlbi5zZW5jb21jb2Rjb3UgYXMgY29kZV9jb21taXNzaW9uX3Blcm1hbmVudGVcIixcbiAgICBcImNvbS5jb21saWxtaW4gYXMgY29tbWlzc2lvbl9wZXJtYW5lbnRlXCIsXG4gICAgXCJzZW4uc2VuY2lybnVtY291IGFzIGNvZGVfY2lyY29uc2NyaXB0aW9uXCIsXG4gICAgXCJzZW4uc2VuY2lyY291IGFzIGNpcmNvbnNjcmlwdGlvblwiLFxuICAgIFwic2VuLnNlbmJ1cmxpY2NvdSBhcyBmb25jdGlvbl9idXJlYXVfc2VuYXRcIixcbiAgICBcInNlbi5zZW5lbWEgYXMgY291cnJpZXJfZWxlY3Ryb25pcXVlXCIsXG4gICAgXCJwY3MucGNzbGlsIGFzIFBDU19JTlNFRVwiLFxuICAgIFwicGNzNDIucGNzNDJsaWIgYXMgUENTX0lOU0VFXzQyXCIsXG4gICAgXCJwY3MyNC5wY3MyNGxpYiBhcyBQQ1NfSU5TRUVfMjRcIixcbiAgICBcInBjczgucGNzOGxpbCBhcyBQQ1NfSU5TRUVfOFwiLFxuICAgIFwic2VuLnNlbmRlc3BybyBhcyBkZXNjcmlwdGlvbl9wcm9mZXNzaW9uXCIsXG4gICAgXCJzZW4uc2VubnVtc2llIGFzIHNpZWdlXCIsXG4gICAgXCJzZW4uc2VuZGFpdXJsIGFzIHVybF9oYXR2cFwiLFxuICBdKVxuICAuc2VsZWN0KCh7IHJlZiB9KSA9PiBbXG4gICAgdXJscyhyZWYoXCJzZW4uc2VubWF0XCIpKS5hcyhcInVybHNcIiksXG4gICAgbWFuZGF0c0VsdVNlbmF0ZXVyKHJlZihcInNlbi5zZW5tYXRcIikpLmFzKFwibWFuZGF0c19zZW5hdGV1clwiKSxcbiAgICBtYW5kYXRzTWVtYnJlQ29tbWlzc2lvbihyZWYoXCJzZW4uc2VubWF0XCIpKS5hcyhcImNvbW1pc3Npb25zXCIpLFxuICAgIG1hbmRhdHNNZW1icmVEZWxlZ2F0aW9uKHJlZihcInNlbi5zZW5tYXRcIikpLmFzKFwiZGVsZWdhdGlvbnNcIiksXG4gICAgbWFuZGF0c01lbWJyZUdyb3VwZVBvbGl0aXF1ZShyZWYoXCJzZW4uc2VubWF0XCIpKS5hcyhcImdyb3VwZXNcIiksXG4gICAgZm9uY3Rpb25zQnVyZWF1KHJlZihcInNlbi5zZW5tYXRcIikpLmFzKFwiZm9uY3Rpb25zX2J1cmVhdVwiKSxcbiAgXSlcblxuY29uc3QgZmluZEFsbENpcmNvbnNjcmlwdGlvbnNRdWVyeSA9IGRiU2Vuc1xuICAuc2VsZWN0RnJvbShcImRwdFwiKVxuICAubGVmdEpvaW4oXCJyZWdcIiwgXCJkcHQucmVnY29kXCIsIFwicmVnLnJlZ2NvZFwiKVxuICAuc2VsZWN0KCh7IHJlZiB9KSA9PiBbXG4gICAgXCJkcHQuZHB0bnVtIGFzIGlkZW50aWZpYW50XCIsXG4gICAgXCJkcHQuZHB0Y29kIGFzIGNvZGVcIixcbiAgICBcImRwdC5kcHRsaWIgYXMgbGliZWxsZV9kZXBhcnRlbWVudFwiLFxuICAgIFwiZHB0LmRwdGFydCBhcyBhcnRpY2xlXCIsXG4gICAgXCJyZWcucmVnbGliIGFzIGxpYmVsbGVfcmVnaW9uXCIsXG4gICAgXCJkcHQudGVtdmFsY29kIGFzIGV0YXRcIixcbiAgICB0b0RhdGVTdHJpbmcocmVmKFwiZHB0LmRwdGRhdGRlYlwiKSkuYXMoXCJkYXRlX2RlYnV0XCIpLFxuICAgIHRvRGF0ZVN0cmluZyhyZWYoXCJkcHQuZHB0ZGF0ZmluXCIpKS5hcyhcImRhdGVfZmluXCIpLFxuICAgIFwiZHB0LmRwdG5icnNlbiBhcyBub21icmVfc2VuYXRldXJzXCIsXG4gICAgXCJkcHQuZHB0dXJsY21wIGFzIHVybFwiLFxuICBdKVxuXG5jb25zdCBmaW5kQWxsT3JnYW5pc21lc1F1ZXJ5ID0gZGJTZW5zXG4gIC5zZWxlY3RGcm9tKChlYikgPT4gZWJcbiAgICAuc2VsZWN0RnJvbShcImNvbVwiKVxuICAgIC5zZWxlY3QoW1xuICAgICAgXCJvcmdjb2RcIixcbiAgICAgIFwiZXZlbGljXCIsXG4gICAgICBcImV2ZWxpYlwiLFxuICAgICAgXCJldmVsaWxcIixcbiAgICAgIFwidHlwb3JnY29kXCIsXG4gICAgICBcIm9yZ3VybHNpbVwiLFxuICAgICAgXCJvcmdkYXRjcmVcIixcbiAgICAgIFwib3JnZGF0ZmluXCIsXG4gICAgICBcInRlbXZhbGNvZFwiLFxuICAgIF0pLnVuaW9uKGViXG4gICAgICAuc2VsZWN0RnJvbShcImRlbGVnYVwiKVxuICAgICAgLnNlbGVjdChbXG4gICAgICAgIFwib3JnY29kXCIsXG4gICAgICAgIFwiZXZlbGljXCIsXG4gICAgICAgIFwiZXZlbGliXCIsXG4gICAgICAgIFwiZXZlbGlsXCIsXG4gICAgICAgIFwidHlwb3JnY29kXCIsXG4gICAgICAgIFwib3JndXJsc2ltXCIsXG4gICAgICAgIFwib3JnZGF0Y3JlXCIsXG4gICAgICAgIFwib3JnZGF0ZmluXCIsXG4gICAgICAgIFwidGVtdmFsY29kXCIsXG4gICAgICBdKSxcbiAgICApLnVuaW9uKGViXG4gICAgICAuc2VsZWN0RnJvbShcImdycHBvbFwiKVxuICAgICAgLnNlbGVjdChbXG4gICAgICAgIFwiZ3JwcG9sY29kIGFzIG9yZ2NvZFwiLFxuICAgICAgICBcImdycHBvbGxpY2NvdSBhcyBldmVsaWNcIixcbiAgICAgICAgXCJncnBwb2xsaWJjb3UgYXMgZXZlbGliXCIsXG4gICAgICAgIFwiZ3JwcG9sbGlsY291IGFzIGV2ZWxpbFwiLFxuICAgICAgICBcInR5cG9yZ2NvZFwiLFxuICAgICAgICBcImdycHBvbHVybHNpbSBhcyBvcmd1cmxzaW1cIixcbiAgICAgICAgXCJncnBwb2xkYXRjcmUgYXMgb3JnZGF0Y3JlXCIsXG4gICAgICAgIFwiZ3JwcG9sZGF0ZmluIGFzIG9yZ2RhdGZpblwiLFxuICAgICAgICBcInRlbXZhbGNvZFwiLFxuICAgICAgXSksXG4gICAgKS51bmlvbihlYlxuICAgICAgLnNlbGVjdEZyb20oXCJncnBzZW5hbWlcIilcbiAgICAgIC5zZWxlY3QoW1xuICAgICAgICBcIm9yZ2NvZFwiLFxuICAgICAgICBcImV2ZWxpY1wiLFxuICAgICAgICBcImV2ZWxpYlwiLFxuICAgICAgICBcImV2ZWxpbFwiLFxuICAgICAgICBcInR5cG9yZ2NvZFwiLFxuICAgICAgICBcIm9yZ3VybHNpbVwiLFxuICAgICAgICBcIm9yZ2RhdGNyZVwiLFxuICAgICAgICBcIm9yZ2RhdGZpblwiLFxuICAgICAgICBcInRlbXZhbGNvZFwiLFxuICAgICAgXSksXG4gICAgKS51bmlvbihlYlxuICAgICAgLnNlbGVjdEZyb20oXCJvcmdcIilcbiAgICAgIC5zZWxlY3QoW1xuICAgICAgICBcIm9yZ2NvZFwiLFxuICAgICAgICBcImV2ZWxpY1wiLFxuICAgICAgICBcImV2ZWxpYlwiLFxuICAgICAgICBcImV2ZWxpbFwiLFxuICAgICAgICBcInR5cG9yZ2NvZFwiLFxuICAgICAgICBcIm9yZ3VybHNpbVwiLFxuICAgICAgICBcIm9yZ2RhdGNyZVwiLFxuICAgICAgICBcIm9yZ2RhdGZpblwiLFxuICAgICAgICBcInRlbXZhbGNvZFwiLFxuICAgICAgXSksXG4gICAgKS5hcyhcImFsbF9vcmdhbmlzbWVzXCIpLFxuICApLmxlZnRKb2luKFwidHlwb3JnXCIsIFwiYWxsX29yZ2FuaXNtZXMudHlwb3JnY29kXCIsIFwidHlwb3JnLnR5cG9yZ2NvZFwiKVxuICAuc2VsZWN0KCh7IHJlZiwgdmFsIH0pID0+IFtcbiAgICBcImFsbF9vcmdhbmlzbWVzLm9yZ2NvZCBhcyBjb2RlXCIsXG4gICAgXCJhbGxfb3JnYW5pc21lcy5ldmVsaWMgYXMgbGliZWxsZV9jb3VydFwiLFxuICAgIFwiYWxsX29yZ2FuaXNtZXMuZXZlbGliIGFzIGxpYmVsbGVcIixcbiAgICBydHJpbShyZWYoXCJhbGxfb3JnYW5pc21lcy5ldmVsaWxcIikpLmFzKFwibGliZWxsZV9sb25nXCIpLFxuICAgIFwiYWxsX29yZ2FuaXNtZXMudHlwb3JnY29kIGFzIHR5cGVfY29kZVwiLFxuICAgIHJ0cmltKHJlZihcInR5cG9yZy50eXBvcmdsaWJcIikpLmFzKFwidHlwZV9saWJlbGxlXCIpLFxuICAgIGNvbmNhdCh2YWwoXCJodHRwczovL3d3dy5zZW5hdC5mclwiKSwgcmVmKFwiYWxsX29yZ2FuaXNtZXMub3JndXJsc2ltXCIpKS5hcyhcInVybFwiKSxcbiAgICB0b0RhdGVTdHJpbmcocmVmKFwiYWxsX29yZ2FuaXNtZXMub3JnZGF0Y3JlXCIpKS5hcyhcImRhdGVfZGVidXRcIiksXG4gICAgdG9EYXRlU3RyaW5nKHJlZihcImFsbF9vcmdhbmlzbWVzLm9yZ2RhdGZpblwiKSkuYXMoXCJkYXRlX2ZpblwiKSxcbiAgICBcImFsbF9vcmdhbmlzbWVzLnRlbXZhbGNvZCBhcyBldGF0XCIsXG4gIF0pXG5cbmV4cG9ydCB0eXBlIFNlbmF0ZXVyUmVzdWx0ID0gSW5mZXJSZXN1bHQ8dHlwZW9mIGZpbmRBbGxRdWVyeT5bMF1cbmV4cG9ydCB0eXBlIENpcmNvbnNjcmlwdGlvblJlc3VsdCA9IEluZmVyUmVzdWx0PHR5cGVvZiBmaW5kQWxsQ2lyY29uc2NyaXB0aW9uc1F1ZXJ5PlswXVxuZXhwb3J0IHR5cGUgT3JnYW5pc21lUmVzdWx0ID0gSW5mZXJSZXN1bHQ8dHlwZW9mIGZpbmRBbGxPcmdhbmlzbWVzUXVlcnk+WzBdXG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kQWxsICgpIHtcbiAgcmV0dXJuIGZpbmRBbGxRdWVyeS5zdHJlYW0oKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmluZEFsbENpcmNvbnNjcmlwdGlvbnMgKCkge1xuICByZXR1cm4gZmluZEFsbENpcmNvbnNjcmlwdGlvbnNRdWVyeS5zdHJlYW0oKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmluZEFsbE9yZ2FuaXNtZXMgKCkge1xuICByZXR1cm4gZmluZEFsbE9yZ2FuaXNtZXNRdWVyeS5zdHJlYW0oKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmluZEFjdGlmICgpOiBBc3luY0l0ZXJhYmxlSXRlcmF0b3I8eyBzZW5tYXQ6IHN0cmluZywgc2Vubm9tdXNlOiBzdHJpbmcsIHNlbnByZW5vbXVzZTogc3RyaW5nIH0+IHtcbiAgcmV0dXJuIGRiU2Vuc1xuICAgIC5zZWxlY3RGcm9tKFwic2VuXCIpXG4gICAgLndoZXJlKFwiZXRhc2VuY29kXCIsIFwiPVwiLCBcIkFDVElGXCIpXG4gICAgLnNlbGVjdChbXCJzZW5tYXRcIiwgXCJzZW5ub211c2VcIiwgXCJzZW5wcmVub211c2VcIl0pXG4gICAgLnN0cmVhbSgpXG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQ0EsSUFBQUEsU0FBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsVUFBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsS0FBQSxHQUFBRixPQUFBO0FBRUEsU0FBU0csZUFBZUEsQ0FBRUMsTUFBMEIsRUFBRTtFQUNwRCxPQUFPLElBQUFDLHdCQUFjLEVBQ25CQyxpQkFBTSxDQUFDQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQ3JCQyxRQUFRLENBQUMsS0FBSyxFQUFFLFlBQVksRUFBRSxZ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
|