terraform-cdk-serverless-github-actions-runner-controller 0.0.0
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/.jsii +1706 -0
- package/API.md +113 -0
- package/LICENSE +19 -0
- package/README.md +4 -0
- package/lib/.gen/providers/azapi/data-azapi-resource-action/index.d.ts +344 -0
- package/lib/.gen/providers/azapi/data-azapi-resource-action/index.js +583 -0
- package/lib/.gen/providers/azapi/provider/index.d.ts +425 -0
- package/lib/.gen/providers/azapi/provider/index.js +802 -0
- package/lib/.gen/providers/azapi/resource/index.d.ts +639 -0
- package/lib/.gen/providers/azapi/resource/index.js +1067 -0
- package/lib/__tests__/index-test.d.ts +1 -0
- package/lib/__tests__/index-test.js +14 -0
- package/lib/index.d.ts +1 -0
- package/lib/index.js +18 -0
- package/lib/lib/azure.d.ts +4 -0
- package/lib/lib/azure.js +478 -0
- package/lib/lib/variables.d.ts +7 -0
- package/lib/lib/variables.js +20 -0
- package/lib/tfModules.d.ts +1 -0
- package/lib/tfModules.js +18 -0
- package/modules/azure-container-apps/README.md +74 -0
- package/modules/azure-container-apps/cdk.tf.json +635 -0
- package/package.json +146 -0
- package/scripts/copy-modules.sh +48 -0
@@ -0,0 +1,1067 @@
|
|
1
|
+
"use strict";
|
2
|
+
// https://registry.terraform.io/providers/azure/azapi/2.3.0/docs/resources/resource
|
3
|
+
// generated from terraform resource schema
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
5
|
+
exports.Resource = exports.ResourceTimeoutsOutputReference = exports.ResourceIdentityList = exports.ResourceIdentityOutputReference = exports.ResourceRetryOutputReference = void 0;
|
6
|
+
exports.resourceRetryToTerraform = resourceRetryToTerraform;
|
7
|
+
exports.resourceRetryToHclTerraform = resourceRetryToHclTerraform;
|
8
|
+
exports.resourceIdentityToTerraform = resourceIdentityToTerraform;
|
9
|
+
exports.resourceIdentityToHclTerraform = resourceIdentityToHclTerraform;
|
10
|
+
exports.resourceTimeoutsToTerraform = resourceTimeoutsToTerraform;
|
11
|
+
exports.resourceTimeoutsToHclTerraform = resourceTimeoutsToHclTerraform;
|
12
|
+
const cdktf = require("cdktf");
|
13
|
+
function resourceRetryToTerraform(struct) {
|
14
|
+
if (!cdktf.canInspect(struct) || cdktf.Tokenization.isResolvable(struct)) {
|
15
|
+
return struct;
|
16
|
+
}
|
17
|
+
if (cdktf.isComplexElement(struct)) {
|
18
|
+
throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
|
19
|
+
}
|
20
|
+
return {
|
21
|
+
error_message_regex: cdktf.listMapper(cdktf.stringToTerraform, false)(struct.errorMessageRegex),
|
22
|
+
interval_seconds: cdktf.numberToTerraform(struct.intervalSeconds),
|
23
|
+
max_interval_seconds: cdktf.numberToTerraform(struct.maxIntervalSeconds),
|
24
|
+
multiplier: cdktf.numberToTerraform(struct.multiplier),
|
25
|
+
randomization_factor: cdktf.numberToTerraform(struct.randomizationFactor),
|
26
|
+
};
|
27
|
+
}
|
28
|
+
function resourceRetryToHclTerraform(struct) {
|
29
|
+
if (!cdktf.canInspect(struct) || cdktf.Tokenization.isResolvable(struct)) {
|
30
|
+
return struct;
|
31
|
+
}
|
32
|
+
if (cdktf.isComplexElement(struct)) {
|
33
|
+
throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
|
34
|
+
}
|
35
|
+
const attrs = {
|
36
|
+
error_message_regex: {
|
37
|
+
value: cdktf.listMapperHcl(cdktf.stringToHclTerraform, false)(struct.errorMessageRegex),
|
38
|
+
isBlock: false,
|
39
|
+
type: "list",
|
40
|
+
storageClassType: "stringList",
|
41
|
+
},
|
42
|
+
interval_seconds: {
|
43
|
+
value: cdktf.numberToHclTerraform(struct.intervalSeconds),
|
44
|
+
isBlock: false,
|
45
|
+
type: "simple",
|
46
|
+
storageClassType: "number",
|
47
|
+
},
|
48
|
+
max_interval_seconds: {
|
49
|
+
value: cdktf.numberToHclTerraform(struct.maxIntervalSeconds),
|
50
|
+
isBlock: false,
|
51
|
+
type: "simple",
|
52
|
+
storageClassType: "number",
|
53
|
+
},
|
54
|
+
multiplier: {
|
55
|
+
value: cdktf.numberToHclTerraform(struct.multiplier),
|
56
|
+
isBlock: false,
|
57
|
+
type: "simple",
|
58
|
+
storageClassType: "number",
|
59
|
+
},
|
60
|
+
randomization_factor: {
|
61
|
+
value: cdktf.numberToHclTerraform(struct.randomizationFactor),
|
62
|
+
isBlock: false,
|
63
|
+
type: "simple",
|
64
|
+
storageClassType: "number",
|
65
|
+
},
|
66
|
+
};
|
67
|
+
// remove undefined attributes
|
68
|
+
return Object.fromEntries(Object.entries(attrs).filter(([_, value]) => value !== undefined && value.value !== undefined));
|
69
|
+
}
|
70
|
+
class ResourceRetryOutputReference extends cdktf.ComplexObject {
|
71
|
+
/**
|
72
|
+
* @param terraformResource The parent resource
|
73
|
+
* @param terraformAttribute The attribute on the parent resource this class is referencing
|
74
|
+
*/
|
75
|
+
constructor(terraformResource, terraformAttribute) {
|
76
|
+
super(terraformResource, terraformAttribute, false);
|
77
|
+
this.isEmptyObject = false;
|
78
|
+
}
|
79
|
+
get internalValue() {
|
80
|
+
if (this.resolvableValue) {
|
81
|
+
return this.resolvableValue;
|
82
|
+
}
|
83
|
+
let hasAnyValues = this.isEmptyObject;
|
84
|
+
const internalValueResult = {};
|
85
|
+
if (this._errorMessageRegex !== undefined) {
|
86
|
+
hasAnyValues = true;
|
87
|
+
internalValueResult.errorMessageRegex = this._errorMessageRegex;
|
88
|
+
}
|
89
|
+
if (this._intervalSeconds !== undefined) {
|
90
|
+
hasAnyValues = true;
|
91
|
+
internalValueResult.intervalSeconds = this._intervalSeconds;
|
92
|
+
}
|
93
|
+
if (this._maxIntervalSeconds !== undefined) {
|
94
|
+
hasAnyValues = true;
|
95
|
+
internalValueResult.maxIntervalSeconds = this._maxIntervalSeconds;
|
96
|
+
}
|
97
|
+
if (this._multiplier !== undefined) {
|
98
|
+
hasAnyValues = true;
|
99
|
+
internalValueResult.multiplier = this._multiplier;
|
100
|
+
}
|
101
|
+
if (this._randomizationFactor !== undefined) {
|
102
|
+
hasAnyValues = true;
|
103
|
+
internalValueResult.randomizationFactor = this._randomizationFactor;
|
104
|
+
}
|
105
|
+
return hasAnyValues ? internalValueResult : undefined;
|
106
|
+
}
|
107
|
+
set internalValue(value) {
|
108
|
+
if (value === undefined) {
|
109
|
+
this.isEmptyObject = false;
|
110
|
+
this.resolvableValue = undefined;
|
111
|
+
this._errorMessageRegex = undefined;
|
112
|
+
this._intervalSeconds = undefined;
|
113
|
+
this._maxIntervalSeconds = undefined;
|
114
|
+
this._multiplier = undefined;
|
115
|
+
this._randomizationFactor = undefined;
|
116
|
+
}
|
117
|
+
else if (cdktf.Tokenization.isResolvable(value)) {
|
118
|
+
this.isEmptyObject = false;
|
119
|
+
this.resolvableValue = value;
|
120
|
+
}
|
121
|
+
else {
|
122
|
+
this.isEmptyObject = Object.keys(value).length === 0;
|
123
|
+
this.resolvableValue = undefined;
|
124
|
+
this._errorMessageRegex = value.errorMessageRegex;
|
125
|
+
this._intervalSeconds = value.intervalSeconds;
|
126
|
+
this._maxIntervalSeconds = value.maxIntervalSeconds;
|
127
|
+
this._multiplier = value.multiplier;
|
128
|
+
this._randomizationFactor = value.randomizationFactor;
|
129
|
+
}
|
130
|
+
}
|
131
|
+
get errorMessageRegex() {
|
132
|
+
return this.getListAttribute('error_message_regex');
|
133
|
+
}
|
134
|
+
set errorMessageRegex(value) {
|
135
|
+
this._errorMessageRegex = value;
|
136
|
+
}
|
137
|
+
// Temporarily expose input value. Use with caution.
|
138
|
+
get errorMessageRegexInput() {
|
139
|
+
return this._errorMessageRegex;
|
140
|
+
}
|
141
|
+
get intervalSeconds() {
|
142
|
+
return this.getNumberAttribute('interval_seconds');
|
143
|
+
}
|
144
|
+
set intervalSeconds(value) {
|
145
|
+
this._intervalSeconds = value;
|
146
|
+
}
|
147
|
+
resetIntervalSeconds() {
|
148
|
+
this._intervalSeconds = undefined;
|
149
|
+
}
|
150
|
+
// Temporarily expose input value. Use with caution.
|
151
|
+
get intervalSecondsInput() {
|
152
|
+
return this._intervalSeconds;
|
153
|
+
}
|
154
|
+
get maxIntervalSeconds() {
|
155
|
+
return this.getNumberAttribute('max_interval_seconds');
|
156
|
+
}
|
157
|
+
set maxIntervalSeconds(value) {
|
158
|
+
this._maxIntervalSeconds = value;
|
159
|
+
}
|
160
|
+
resetMaxIntervalSeconds() {
|
161
|
+
this._maxIntervalSeconds = undefined;
|
162
|
+
}
|
163
|
+
// Temporarily expose input value. Use with caution.
|
164
|
+
get maxIntervalSecondsInput() {
|
165
|
+
return this._maxIntervalSeconds;
|
166
|
+
}
|
167
|
+
get multiplier() {
|
168
|
+
return this.getNumberAttribute('multiplier');
|
169
|
+
}
|
170
|
+
set multiplier(value) {
|
171
|
+
this._multiplier = value;
|
172
|
+
}
|
173
|
+
resetMultiplier() {
|
174
|
+
this._multiplier = undefined;
|
175
|
+
}
|
176
|
+
// Temporarily expose input value. Use with caution.
|
177
|
+
get multiplierInput() {
|
178
|
+
return this._multiplier;
|
179
|
+
}
|
180
|
+
get randomizationFactor() {
|
181
|
+
return this.getNumberAttribute('randomization_factor');
|
182
|
+
}
|
183
|
+
set randomizationFactor(value) {
|
184
|
+
this._randomizationFactor = value;
|
185
|
+
}
|
186
|
+
resetRandomizationFactor() {
|
187
|
+
this._randomizationFactor = undefined;
|
188
|
+
}
|
189
|
+
// Temporarily expose input value. Use with caution.
|
190
|
+
get randomizationFactorInput() {
|
191
|
+
return this._randomizationFactor;
|
192
|
+
}
|
193
|
+
}
|
194
|
+
exports.ResourceRetryOutputReference = ResourceRetryOutputReference;
|
195
|
+
function resourceIdentityToTerraform(struct) {
|
196
|
+
if (!cdktf.canInspect(struct) || cdktf.Tokenization.isResolvable(struct)) {
|
197
|
+
return struct;
|
198
|
+
}
|
199
|
+
if (cdktf.isComplexElement(struct)) {
|
200
|
+
throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
|
201
|
+
}
|
202
|
+
return {
|
203
|
+
identity_ids: cdktf.listMapper(cdktf.stringToTerraform, false)(struct.identityIds),
|
204
|
+
type: cdktf.stringToTerraform(struct.type),
|
205
|
+
};
|
206
|
+
}
|
207
|
+
function resourceIdentityToHclTerraform(struct) {
|
208
|
+
if (!cdktf.canInspect(struct) || cdktf.Tokenization.isResolvable(struct)) {
|
209
|
+
return struct;
|
210
|
+
}
|
211
|
+
if (cdktf.isComplexElement(struct)) {
|
212
|
+
throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
|
213
|
+
}
|
214
|
+
const attrs = {
|
215
|
+
identity_ids: {
|
216
|
+
value: cdktf.listMapperHcl(cdktf.stringToHclTerraform, false)(struct.identityIds),
|
217
|
+
isBlock: false,
|
218
|
+
type: "list",
|
219
|
+
storageClassType: "stringList",
|
220
|
+
},
|
221
|
+
type: {
|
222
|
+
value: cdktf.stringToHclTerraform(struct.type),
|
223
|
+
isBlock: false,
|
224
|
+
type: "simple",
|
225
|
+
storageClassType: "string",
|
226
|
+
},
|
227
|
+
};
|
228
|
+
// remove undefined attributes
|
229
|
+
return Object.fromEntries(Object.entries(attrs).filter(([_, value]) => value !== undefined && value.value !== undefined));
|
230
|
+
}
|
231
|
+
class ResourceIdentityOutputReference extends cdktf.ComplexObject {
|
232
|
+
/**
|
233
|
+
* @param terraformResource The parent resource
|
234
|
+
* @param terraformAttribute The attribute on the parent resource this class is referencing
|
235
|
+
* @param complexObjectIndex the index of this item in the list
|
236
|
+
* @param complexObjectIsFromSet whether the list is wrapping a set (will add tolist() to be able to access an item via an index)
|
237
|
+
*/
|
238
|
+
constructor(terraformResource, terraformAttribute, complexObjectIndex, complexObjectIsFromSet) {
|
239
|
+
super(terraformResource, terraformAttribute, complexObjectIsFromSet, complexObjectIndex);
|
240
|
+
this.isEmptyObject = false;
|
241
|
+
}
|
242
|
+
get internalValue() {
|
243
|
+
if (this.resolvableValue) {
|
244
|
+
return this.resolvableValue;
|
245
|
+
}
|
246
|
+
let hasAnyValues = this.isEmptyObject;
|
247
|
+
const internalValueResult = {};
|
248
|
+
if (this._identityIds !== undefined) {
|
249
|
+
hasAnyValues = true;
|
250
|
+
internalValueResult.identityIds = this._identityIds;
|
251
|
+
}
|
252
|
+
if (this._type !== undefined) {
|
253
|
+
hasAnyValues = true;
|
254
|
+
internalValueResult.type = this._type;
|
255
|
+
}
|
256
|
+
return hasAnyValues ? internalValueResult : undefined;
|
257
|
+
}
|
258
|
+
set internalValue(value) {
|
259
|
+
if (value === undefined) {
|
260
|
+
this.isEmptyObject = false;
|
261
|
+
this.resolvableValue = undefined;
|
262
|
+
this._identityIds = undefined;
|
263
|
+
this._type = undefined;
|
264
|
+
}
|
265
|
+
else if (cdktf.Tokenization.isResolvable(value)) {
|
266
|
+
this.isEmptyObject = false;
|
267
|
+
this.resolvableValue = value;
|
268
|
+
}
|
269
|
+
else {
|
270
|
+
this.isEmptyObject = Object.keys(value).length === 0;
|
271
|
+
this.resolvableValue = undefined;
|
272
|
+
this._identityIds = value.identityIds;
|
273
|
+
this._type = value.type;
|
274
|
+
}
|
275
|
+
}
|
276
|
+
get identityIds() {
|
277
|
+
return this.getListAttribute('identity_ids');
|
278
|
+
}
|
279
|
+
set identityIds(value) {
|
280
|
+
this._identityIds = value;
|
281
|
+
}
|
282
|
+
resetIdentityIds() {
|
283
|
+
this._identityIds = undefined;
|
284
|
+
}
|
285
|
+
// Temporarily expose input value. Use with caution.
|
286
|
+
get identityIdsInput() {
|
287
|
+
return this._identityIds;
|
288
|
+
}
|
289
|
+
// principal_id - computed: true, optional: false, required: false
|
290
|
+
get principalId() {
|
291
|
+
return this.getStringAttribute('principal_id');
|
292
|
+
}
|
293
|
+
// tenant_id - computed: true, optional: false, required: false
|
294
|
+
get tenantId() {
|
295
|
+
return this.getStringAttribute('tenant_id');
|
296
|
+
}
|
297
|
+
get type() {
|
298
|
+
return this.getStringAttribute('type');
|
299
|
+
}
|
300
|
+
set type(value) {
|
301
|
+
this._type = value;
|
302
|
+
}
|
303
|
+
// Temporarily expose input value. Use with caution.
|
304
|
+
get typeInput() {
|
305
|
+
return this._type;
|
306
|
+
}
|
307
|
+
}
|
308
|
+
exports.ResourceIdentityOutputReference = ResourceIdentityOutputReference;
|
309
|
+
class ResourceIdentityList extends cdktf.ComplexList {
|
310
|
+
/**
|
311
|
+
* @param terraformResource The parent resource
|
312
|
+
* @param terraformAttribute The attribute on the parent resource this class is referencing
|
313
|
+
* @param wrapsSet whether the list is wrapping a set (will add tolist() to be able to access an item via an index)
|
314
|
+
*/
|
315
|
+
constructor(terraformResource, terraformAttribute, wrapsSet) {
|
316
|
+
super(terraformResource, terraformAttribute, wrapsSet);
|
317
|
+
this.terraformResource = terraformResource;
|
318
|
+
this.terraformAttribute = terraformAttribute;
|
319
|
+
this.wrapsSet = wrapsSet;
|
320
|
+
}
|
321
|
+
/**
|
322
|
+
* @param index the index of the item to return
|
323
|
+
*/
|
324
|
+
get(index) {
|
325
|
+
return new ResourceIdentityOutputReference(this.terraformResource, this.terraformAttribute, index, this.wrapsSet);
|
326
|
+
}
|
327
|
+
}
|
328
|
+
exports.ResourceIdentityList = ResourceIdentityList;
|
329
|
+
function resourceTimeoutsToTerraform(struct) {
|
330
|
+
if (!cdktf.canInspect(struct) || cdktf.Tokenization.isResolvable(struct)) {
|
331
|
+
return struct;
|
332
|
+
}
|
333
|
+
if (cdktf.isComplexElement(struct)) {
|
334
|
+
throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
|
335
|
+
}
|
336
|
+
return {
|
337
|
+
create: cdktf.stringToTerraform(struct.create),
|
338
|
+
delete: cdktf.stringToTerraform(struct.delete),
|
339
|
+
read: cdktf.stringToTerraform(struct.read),
|
340
|
+
update: cdktf.stringToTerraform(struct.update),
|
341
|
+
};
|
342
|
+
}
|
343
|
+
function resourceTimeoutsToHclTerraform(struct) {
|
344
|
+
if (!cdktf.canInspect(struct) || cdktf.Tokenization.isResolvable(struct)) {
|
345
|
+
return struct;
|
346
|
+
}
|
347
|
+
if (cdktf.isComplexElement(struct)) {
|
348
|
+
throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
|
349
|
+
}
|
350
|
+
const attrs = {
|
351
|
+
create: {
|
352
|
+
value: cdktf.stringToHclTerraform(struct.create),
|
353
|
+
isBlock: false,
|
354
|
+
type: "simple",
|
355
|
+
storageClassType: "string",
|
356
|
+
},
|
357
|
+
delete: {
|
358
|
+
value: cdktf.stringToHclTerraform(struct.delete),
|
359
|
+
isBlock: false,
|
360
|
+
type: "simple",
|
361
|
+
storageClassType: "string",
|
362
|
+
},
|
363
|
+
read: {
|
364
|
+
value: cdktf.stringToHclTerraform(struct.read),
|
365
|
+
isBlock: false,
|
366
|
+
type: "simple",
|
367
|
+
storageClassType: "string",
|
368
|
+
},
|
369
|
+
update: {
|
370
|
+
value: cdktf.stringToHclTerraform(struct.update),
|
371
|
+
isBlock: false,
|
372
|
+
type: "simple",
|
373
|
+
storageClassType: "string",
|
374
|
+
},
|
375
|
+
};
|
376
|
+
// remove undefined attributes
|
377
|
+
return Object.fromEntries(Object.entries(attrs).filter(([_, value]) => value !== undefined && value.value !== undefined));
|
378
|
+
}
|
379
|
+
class ResourceTimeoutsOutputReference extends cdktf.ComplexObject {
|
380
|
+
/**
|
381
|
+
* @param terraformResource The parent resource
|
382
|
+
* @param terraformAttribute The attribute on the parent resource this class is referencing
|
383
|
+
*/
|
384
|
+
constructor(terraformResource, terraformAttribute) {
|
385
|
+
super(terraformResource, terraformAttribute, false);
|
386
|
+
this.isEmptyObject = false;
|
387
|
+
}
|
388
|
+
get internalValue() {
|
389
|
+
if (this.resolvableValue) {
|
390
|
+
return this.resolvableValue;
|
391
|
+
}
|
392
|
+
let hasAnyValues = this.isEmptyObject;
|
393
|
+
const internalValueResult = {};
|
394
|
+
if (this._create !== undefined) {
|
395
|
+
hasAnyValues = true;
|
396
|
+
internalValueResult.create = this._create;
|
397
|
+
}
|
398
|
+
if (this._delete !== undefined) {
|
399
|
+
hasAnyValues = true;
|
400
|
+
internalValueResult.delete = this._delete;
|
401
|
+
}
|
402
|
+
if (this._read !== undefined) {
|
403
|
+
hasAnyValues = true;
|
404
|
+
internalValueResult.read = this._read;
|
405
|
+
}
|
406
|
+
if (this._update !== undefined) {
|
407
|
+
hasAnyValues = true;
|
408
|
+
internalValueResult.update = this._update;
|
409
|
+
}
|
410
|
+
return hasAnyValues ? internalValueResult : undefined;
|
411
|
+
}
|
412
|
+
set internalValue(value) {
|
413
|
+
if (value === undefined) {
|
414
|
+
this.isEmptyObject = false;
|
415
|
+
this.resolvableValue = undefined;
|
416
|
+
this._create = undefined;
|
417
|
+
this._delete = undefined;
|
418
|
+
this._read = undefined;
|
419
|
+
this._update = undefined;
|
420
|
+
}
|
421
|
+
else if (cdktf.Tokenization.isResolvable(value)) {
|
422
|
+
this.isEmptyObject = false;
|
423
|
+
this.resolvableValue = value;
|
424
|
+
}
|
425
|
+
else {
|
426
|
+
this.isEmptyObject = Object.keys(value).length === 0;
|
427
|
+
this.resolvableValue = undefined;
|
428
|
+
this._create = value.create;
|
429
|
+
this._delete = value.delete;
|
430
|
+
this._read = value.read;
|
431
|
+
this._update = value.update;
|
432
|
+
}
|
433
|
+
}
|
434
|
+
get create() {
|
435
|
+
return this.getStringAttribute('create');
|
436
|
+
}
|
437
|
+
set create(value) {
|
438
|
+
this._create = value;
|
439
|
+
}
|
440
|
+
resetCreate() {
|
441
|
+
this._create = undefined;
|
442
|
+
}
|
443
|
+
// Temporarily expose input value. Use with caution.
|
444
|
+
get createInput() {
|
445
|
+
return this._create;
|
446
|
+
}
|
447
|
+
get delete() {
|
448
|
+
return this.getStringAttribute('delete');
|
449
|
+
}
|
450
|
+
set delete(value) {
|
451
|
+
this._delete = value;
|
452
|
+
}
|
453
|
+
resetDelete() {
|
454
|
+
this._delete = undefined;
|
455
|
+
}
|
456
|
+
// Temporarily expose input value. Use with caution.
|
457
|
+
get deleteInput() {
|
458
|
+
return this._delete;
|
459
|
+
}
|
460
|
+
get read() {
|
461
|
+
return this.getStringAttribute('read');
|
462
|
+
}
|
463
|
+
set read(value) {
|
464
|
+
this._read = value;
|
465
|
+
}
|
466
|
+
resetRead() {
|
467
|
+
this._read = undefined;
|
468
|
+
}
|
469
|
+
// Temporarily expose input value. Use with caution.
|
470
|
+
get readInput() {
|
471
|
+
return this._read;
|
472
|
+
}
|
473
|
+
get update() {
|
474
|
+
return this.getStringAttribute('update');
|
475
|
+
}
|
476
|
+
set update(value) {
|
477
|
+
this._update = value;
|
478
|
+
}
|
479
|
+
resetUpdate() {
|
480
|
+
this._update = undefined;
|
481
|
+
}
|
482
|
+
// Temporarily expose input value. Use with caution.
|
483
|
+
get updateInput() {
|
484
|
+
return this._update;
|
485
|
+
}
|
486
|
+
}
|
487
|
+
exports.ResourceTimeoutsOutputReference = ResourceTimeoutsOutputReference;
|
488
|
+
/**
|
489
|
+
* Represents a {@link https://registry.terraform.io/providers/azure/azapi/2.3.0/docs/resources/resource azapi_resource}
|
490
|
+
*/
|
491
|
+
class Resource extends cdktf.TerraformResource {
|
492
|
+
// ==============
|
493
|
+
// STATIC Methods
|
494
|
+
// ==============
|
495
|
+
/**
|
496
|
+
* Generates CDKTF code for importing a Resource resource upon running "cdktf plan <stack-name>"
|
497
|
+
* @param scope The scope in which to define this construct
|
498
|
+
* @param importToId The construct id used in the generated config for the Resource to import
|
499
|
+
* @param importFromId The id of the existing Resource that should be imported. Refer to the {@link https://registry.terraform.io/providers/azure/azapi/2.3.0/docs/resources/resource#import import section} in the documentation of this resource for the id to use
|
500
|
+
* @param provider? Optional instance of the provider where the Resource to import is found
|
501
|
+
*/
|
502
|
+
static generateConfigForImport(scope, importToId, importFromId, provider) {
|
503
|
+
return new cdktf.ImportableResource(scope, importToId, { terraformResourceType: "azapi_resource", importId: importFromId, provider });
|
504
|
+
}
|
505
|
+
// ===========
|
506
|
+
// INITIALIZER
|
507
|
+
// ===========
|
508
|
+
/**
|
509
|
+
* Create a new {@link https://registry.terraform.io/providers/azure/azapi/2.3.0/docs/resources/resource azapi_resource} Resource
|
510
|
+
*
|
511
|
+
* @param scope The scope in which to define this construct
|
512
|
+
* @param id The scoped construct ID. Must be unique amongst siblings in the same scope
|
513
|
+
* @param options ResourceConfig
|
514
|
+
*/
|
515
|
+
constructor(scope, id, config) {
|
516
|
+
super(scope, id, {
|
517
|
+
terraformResourceType: 'azapi_resource',
|
518
|
+
terraformGeneratorMetadata: {
|
519
|
+
providerName: 'azapi',
|
520
|
+
providerVersion: '2.3.0',
|
521
|
+
providerVersionConstraint: '2.3.0'
|
522
|
+
},
|
523
|
+
provider: config.provider,
|
524
|
+
dependsOn: config.dependsOn,
|
525
|
+
count: config.count,
|
526
|
+
lifecycle: config.lifecycle,
|
527
|
+
provisioners: config.provisioners,
|
528
|
+
connection: config.connection,
|
529
|
+
forEach: config.forEach
|
530
|
+
});
|
531
|
+
// output - computed: true, optional: false, required: false
|
532
|
+
this._output = new cdktf.AnyMap(this, "output");
|
533
|
+
// retry - computed: false, optional: true, required: false
|
534
|
+
this._retry = new ResourceRetryOutputReference(this, "retry");
|
535
|
+
// identity - computed: false, optional: true, required: false
|
536
|
+
this._identity = new ResourceIdentityList(this, "identity", false);
|
537
|
+
// timeouts - computed: false, optional: true, required: false
|
538
|
+
this._timeouts = new ResourceTimeoutsOutputReference(this, "timeouts");
|
539
|
+
this._body = config.body;
|
540
|
+
this._createHeaders = config.createHeaders;
|
541
|
+
this._createQueryParameters = config.createQueryParameters;
|
542
|
+
this._deleteHeaders = config.deleteHeaders;
|
543
|
+
this._deleteQueryParameters = config.deleteQueryParameters;
|
544
|
+
this._ignoreCasing = config.ignoreCasing;
|
545
|
+
this._ignoreMissingProperty = config.ignoreMissingProperty;
|
546
|
+
this._location = config.location;
|
547
|
+
this._locks = config.locks;
|
548
|
+
this._name = config.name;
|
549
|
+
this._parentId = config.parentId;
|
550
|
+
this._readHeaders = config.readHeaders;
|
551
|
+
this._readQueryParameters = config.readQueryParameters;
|
552
|
+
this._replaceTriggersExternalValues = config.replaceTriggersExternalValues;
|
553
|
+
this._replaceTriggersRefs = config.replaceTriggersRefs;
|
554
|
+
this._responseExportValues = config.responseExportValues;
|
555
|
+
this._retry.internalValue = config.retry;
|
556
|
+
this._schemaValidationEnabled = config.schemaValidationEnabled;
|
557
|
+
this._tags = config.tags;
|
558
|
+
this._type = config.type;
|
559
|
+
this._updateHeaders = config.updateHeaders;
|
560
|
+
this._updateQueryParameters = config.updateQueryParameters;
|
561
|
+
this._identity.internalValue = config.identity;
|
562
|
+
this._timeouts.internalValue = config.timeouts;
|
563
|
+
}
|
564
|
+
get body() {
|
565
|
+
return this.getAnyMapAttribute('body');
|
566
|
+
}
|
567
|
+
set body(value) {
|
568
|
+
this._body = value;
|
569
|
+
}
|
570
|
+
resetBody() {
|
571
|
+
this._body = undefined;
|
572
|
+
}
|
573
|
+
// Temporarily expose input value. Use with caution.
|
574
|
+
get bodyInput() {
|
575
|
+
return this._body;
|
576
|
+
}
|
577
|
+
get createHeaders() {
|
578
|
+
return this.getStringMapAttribute('create_headers');
|
579
|
+
}
|
580
|
+
set createHeaders(value) {
|
581
|
+
this._createHeaders = value;
|
582
|
+
}
|
583
|
+
resetCreateHeaders() {
|
584
|
+
this._createHeaders = undefined;
|
585
|
+
}
|
586
|
+
// Temporarily expose input value. Use with caution.
|
587
|
+
get createHeadersInput() {
|
588
|
+
return this._createHeaders;
|
589
|
+
}
|
590
|
+
get createQueryParameters() {
|
591
|
+
return this.interpolationForAttribute('create_query_parameters');
|
592
|
+
}
|
593
|
+
set createQueryParameters(value) {
|
594
|
+
this._createQueryParameters = value;
|
595
|
+
}
|
596
|
+
resetCreateQueryParameters() {
|
597
|
+
this._createQueryParameters = undefined;
|
598
|
+
}
|
599
|
+
// Temporarily expose input value. Use with caution.
|
600
|
+
get createQueryParametersInput() {
|
601
|
+
return this._createQueryParameters;
|
602
|
+
}
|
603
|
+
get deleteHeaders() {
|
604
|
+
return this.getStringMapAttribute('delete_headers');
|
605
|
+
}
|
606
|
+
set deleteHeaders(value) {
|
607
|
+
this._deleteHeaders = value;
|
608
|
+
}
|
609
|
+
resetDeleteHeaders() {
|
610
|
+
this._deleteHeaders = undefined;
|
611
|
+
}
|
612
|
+
// Temporarily expose input value. Use with caution.
|
613
|
+
get deleteHeadersInput() {
|
614
|
+
return this._deleteHeaders;
|
615
|
+
}
|
616
|
+
get deleteQueryParameters() {
|
617
|
+
return this.interpolationForAttribute('delete_query_parameters');
|
618
|
+
}
|
619
|
+
set deleteQueryParameters(value) {
|
620
|
+
this._deleteQueryParameters = value;
|
621
|
+
}
|
622
|
+
resetDeleteQueryParameters() {
|
623
|
+
this._deleteQueryParameters = undefined;
|
624
|
+
}
|
625
|
+
// Temporarily expose input value. Use with caution.
|
626
|
+
get deleteQueryParametersInput() {
|
627
|
+
return this._deleteQueryParameters;
|
628
|
+
}
|
629
|
+
// id - computed: true, optional: false, required: false
|
630
|
+
get id() {
|
631
|
+
return this.getStringAttribute('id');
|
632
|
+
}
|
633
|
+
get ignoreCasing() {
|
634
|
+
return this.getBooleanAttribute('ignore_casing');
|
635
|
+
}
|
636
|
+
set ignoreCasing(value) {
|
637
|
+
this._ignoreCasing = value;
|
638
|
+
}
|
639
|
+
resetIgnoreCasing() {
|
640
|
+
this._ignoreCasing = undefined;
|
641
|
+
}
|
642
|
+
// Temporarily expose input value. Use with caution.
|
643
|
+
get ignoreCasingInput() {
|
644
|
+
return this._ignoreCasing;
|
645
|
+
}
|
646
|
+
get ignoreMissingProperty() {
|
647
|
+
return this.getBooleanAttribute('ignore_missing_property');
|
648
|
+
}
|
649
|
+
set ignoreMissingProperty(value) {
|
650
|
+
this._ignoreMissingProperty = value;
|
651
|
+
}
|
652
|
+
resetIgnoreMissingProperty() {
|
653
|
+
this._ignoreMissingProperty = undefined;
|
654
|
+
}
|
655
|
+
// Temporarily expose input value. Use with caution.
|
656
|
+
get ignoreMissingPropertyInput() {
|
657
|
+
return this._ignoreMissingProperty;
|
658
|
+
}
|
659
|
+
get location() {
|
660
|
+
return this.getStringAttribute('location');
|
661
|
+
}
|
662
|
+
set location(value) {
|
663
|
+
this._location = value;
|
664
|
+
}
|
665
|
+
resetLocation() {
|
666
|
+
this._location = undefined;
|
667
|
+
}
|
668
|
+
// Temporarily expose input value. Use with caution.
|
669
|
+
get locationInput() {
|
670
|
+
return this._location;
|
671
|
+
}
|
672
|
+
get locks() {
|
673
|
+
return this.getListAttribute('locks');
|
674
|
+
}
|
675
|
+
set locks(value) {
|
676
|
+
this._locks = value;
|
677
|
+
}
|
678
|
+
resetLocks() {
|
679
|
+
this._locks = undefined;
|
680
|
+
}
|
681
|
+
// Temporarily expose input value. Use with caution.
|
682
|
+
get locksInput() {
|
683
|
+
return this._locks;
|
684
|
+
}
|
685
|
+
get name() {
|
686
|
+
return this.getStringAttribute('name');
|
687
|
+
}
|
688
|
+
set name(value) {
|
689
|
+
this._name = value;
|
690
|
+
}
|
691
|
+
resetName() {
|
692
|
+
this._name = undefined;
|
693
|
+
}
|
694
|
+
// Temporarily expose input value. Use with caution.
|
695
|
+
get nameInput() {
|
696
|
+
return this._name;
|
697
|
+
}
|
698
|
+
get output() {
|
699
|
+
return this._output;
|
700
|
+
}
|
701
|
+
get parentId() {
|
702
|
+
return this.getStringAttribute('parent_id');
|
703
|
+
}
|
704
|
+
set parentId(value) {
|
705
|
+
this._parentId = value;
|
706
|
+
}
|
707
|
+
resetParentId() {
|
708
|
+
this._parentId = undefined;
|
709
|
+
}
|
710
|
+
// Temporarily expose input value. Use with caution.
|
711
|
+
get parentIdInput() {
|
712
|
+
return this._parentId;
|
713
|
+
}
|
714
|
+
get readHeaders() {
|
715
|
+
return this.getStringMapAttribute('read_headers');
|
716
|
+
}
|
717
|
+
set readHeaders(value) {
|
718
|
+
this._readHeaders = value;
|
719
|
+
}
|
720
|
+
resetReadHeaders() {
|
721
|
+
this._readHeaders = undefined;
|
722
|
+
}
|
723
|
+
// Temporarily expose input value. Use with caution.
|
724
|
+
get readHeadersInput() {
|
725
|
+
return this._readHeaders;
|
726
|
+
}
|
727
|
+
get readQueryParameters() {
|
728
|
+
return this.interpolationForAttribute('read_query_parameters');
|
729
|
+
}
|
730
|
+
set readQueryParameters(value) {
|
731
|
+
this._readQueryParameters = value;
|
732
|
+
}
|
733
|
+
resetReadQueryParameters() {
|
734
|
+
this._readQueryParameters = undefined;
|
735
|
+
}
|
736
|
+
// Temporarily expose input value. Use with caution.
|
737
|
+
get readQueryParametersInput() {
|
738
|
+
return this._readQueryParameters;
|
739
|
+
}
|
740
|
+
get replaceTriggersExternalValues() {
|
741
|
+
return this.getAnyMapAttribute('replace_triggers_external_values');
|
742
|
+
}
|
743
|
+
set replaceTriggersExternalValues(value) {
|
744
|
+
this._replaceTriggersExternalValues = value;
|
745
|
+
}
|
746
|
+
resetReplaceTriggersExternalValues() {
|
747
|
+
this._replaceTriggersExternalValues = undefined;
|
748
|
+
}
|
749
|
+
// Temporarily expose input value. Use with caution.
|
750
|
+
get replaceTriggersExternalValuesInput() {
|
751
|
+
return this._replaceTriggersExternalValues;
|
752
|
+
}
|
753
|
+
get replaceTriggersRefs() {
|
754
|
+
return this.getListAttribute('replace_triggers_refs');
|
755
|
+
}
|
756
|
+
set replaceTriggersRefs(value) {
|
757
|
+
this._replaceTriggersRefs = value;
|
758
|
+
}
|
759
|
+
resetReplaceTriggersRefs() {
|
760
|
+
this._replaceTriggersRefs = undefined;
|
761
|
+
}
|
762
|
+
// Temporarily expose input value. Use with caution.
|
763
|
+
get replaceTriggersRefsInput() {
|
764
|
+
return this._replaceTriggersRefs;
|
765
|
+
}
|
766
|
+
get responseExportValues() {
|
767
|
+
return this.getAnyMapAttribute('response_export_values');
|
768
|
+
}
|
769
|
+
set responseExportValues(value) {
|
770
|
+
this._responseExportValues = value;
|
771
|
+
}
|
772
|
+
resetResponseExportValues() {
|
773
|
+
this._responseExportValues = undefined;
|
774
|
+
}
|
775
|
+
// Temporarily expose input value. Use with caution.
|
776
|
+
get responseExportValuesInput() {
|
777
|
+
return this._responseExportValues;
|
778
|
+
}
|
779
|
+
get retry() {
|
780
|
+
return this._retry;
|
781
|
+
}
|
782
|
+
putRetry(value) {
|
783
|
+
this._retry.internalValue = value;
|
784
|
+
}
|
785
|
+
resetRetry() {
|
786
|
+
this._retry.internalValue = undefined;
|
787
|
+
}
|
788
|
+
// Temporarily expose input value. Use with caution.
|
789
|
+
get retryInput() {
|
790
|
+
return this._retry.internalValue;
|
791
|
+
}
|
792
|
+
get schemaValidationEnabled() {
|
793
|
+
return this.getBooleanAttribute('schema_validation_enabled');
|
794
|
+
}
|
795
|
+
set schemaValidationEnabled(value) {
|
796
|
+
this._schemaValidationEnabled = value;
|
797
|
+
}
|
798
|
+
resetSchemaValidationEnabled() {
|
799
|
+
this._schemaValidationEnabled = undefined;
|
800
|
+
}
|
801
|
+
// Temporarily expose input value. Use with caution.
|
802
|
+
get schemaValidationEnabledInput() {
|
803
|
+
return this._schemaValidationEnabled;
|
804
|
+
}
|
805
|
+
get tags() {
|
806
|
+
return this.getStringMapAttribute('tags');
|
807
|
+
}
|
808
|
+
set tags(value) {
|
809
|
+
this._tags = value;
|
810
|
+
}
|
811
|
+
resetTags() {
|
812
|
+
this._tags = undefined;
|
813
|
+
}
|
814
|
+
// Temporarily expose input value. Use with caution.
|
815
|
+
get tagsInput() {
|
816
|
+
return this._tags;
|
817
|
+
}
|
818
|
+
get type() {
|
819
|
+
return this.getStringAttribute('type');
|
820
|
+
}
|
821
|
+
set type(value) {
|
822
|
+
this._type = value;
|
823
|
+
}
|
824
|
+
// Temporarily expose input value. Use with caution.
|
825
|
+
get typeInput() {
|
826
|
+
return this._type;
|
827
|
+
}
|
828
|
+
get updateHeaders() {
|
829
|
+
return this.getStringMapAttribute('update_headers');
|
830
|
+
}
|
831
|
+
set updateHeaders(value) {
|
832
|
+
this._updateHeaders = value;
|
833
|
+
}
|
834
|
+
resetUpdateHeaders() {
|
835
|
+
this._updateHeaders = undefined;
|
836
|
+
}
|
837
|
+
// Temporarily expose input value. Use with caution.
|
838
|
+
get updateHeadersInput() {
|
839
|
+
return this._updateHeaders;
|
840
|
+
}
|
841
|
+
get updateQueryParameters() {
|
842
|
+
return this.interpolationForAttribute('update_query_parameters');
|
843
|
+
}
|
844
|
+
set updateQueryParameters(value) {
|
845
|
+
this._updateQueryParameters = value;
|
846
|
+
}
|
847
|
+
resetUpdateQueryParameters() {
|
848
|
+
this._updateQueryParameters = undefined;
|
849
|
+
}
|
850
|
+
// Temporarily expose input value. Use with caution.
|
851
|
+
get updateQueryParametersInput() {
|
852
|
+
return this._updateQueryParameters;
|
853
|
+
}
|
854
|
+
get identity() {
|
855
|
+
return this._identity;
|
856
|
+
}
|
857
|
+
putIdentity(value) {
|
858
|
+
this._identity.internalValue = value;
|
859
|
+
}
|
860
|
+
resetIdentity() {
|
861
|
+
this._identity.internalValue = undefined;
|
862
|
+
}
|
863
|
+
// Temporarily expose input value. Use with caution.
|
864
|
+
get identityInput() {
|
865
|
+
return this._identity.internalValue;
|
866
|
+
}
|
867
|
+
get timeouts() {
|
868
|
+
return this._timeouts;
|
869
|
+
}
|
870
|
+
putTimeouts(value) {
|
871
|
+
this._timeouts.internalValue = value;
|
872
|
+
}
|
873
|
+
resetTimeouts() {
|
874
|
+
this._timeouts.internalValue = undefined;
|
875
|
+
}
|
876
|
+
// Temporarily expose input value. Use with caution.
|
877
|
+
get timeoutsInput() {
|
878
|
+
return this._timeouts.internalValue;
|
879
|
+
}
|
880
|
+
// =========
|
881
|
+
// SYNTHESIS
|
882
|
+
// =========
|
883
|
+
synthesizeAttributes() {
|
884
|
+
return {
|
885
|
+
body: cdktf.hashMapper(cdktf.anyToTerraform)(this._body),
|
886
|
+
create_headers: cdktf.hashMapper(cdktf.stringToTerraform)(this._createHeaders),
|
887
|
+
create_query_parameters: cdktf.hashMapper(cdktf.listMapper(cdktf.stringToTerraform, false))(this._createQueryParameters),
|
888
|
+
delete_headers: cdktf.hashMapper(cdktf.stringToTerraform)(this._deleteHeaders),
|
889
|
+
delete_query_parameters: cdktf.hashMapper(cdktf.listMapper(cdktf.stringToTerraform, false))(this._deleteQueryParameters),
|
890
|
+
ignore_casing: cdktf.booleanToTerraform(this._ignoreCasing),
|
891
|
+
ignore_missing_property: cdktf.booleanToTerraform(this._ignoreMissingProperty),
|
892
|
+
location: cdktf.stringToTerraform(this._location),
|
893
|
+
locks: cdktf.listMapper(cdktf.stringToTerraform, false)(this._locks),
|
894
|
+
name: cdktf.stringToTerraform(this._name),
|
895
|
+
parent_id: cdktf.stringToTerraform(this._parentId),
|
896
|
+
read_headers: cdktf.hashMapper(cdktf.stringToTerraform)(this._readHeaders),
|
897
|
+
read_query_parameters: cdktf.hashMapper(cdktf.listMapper(cdktf.stringToTerraform, false))(this._readQueryParameters),
|
898
|
+
replace_triggers_external_values: cdktf.hashMapper(cdktf.anyToTerraform)(this._replaceTriggersExternalValues),
|
899
|
+
replace_triggers_refs: cdktf.listMapper(cdktf.stringToTerraform, false)(this._replaceTriggersRefs),
|
900
|
+
response_export_values: cdktf.hashMapper(cdktf.anyToTerraform)(this._responseExportValues),
|
901
|
+
retry: resourceRetryToTerraform(this._retry.internalValue),
|
902
|
+
schema_validation_enabled: cdktf.booleanToTerraform(this._schemaValidationEnabled),
|
903
|
+
tags: cdktf.hashMapper(cdktf.stringToTerraform)(this._tags),
|
904
|
+
type: cdktf.stringToTerraform(this._type),
|
905
|
+
update_headers: cdktf.hashMapper(cdktf.stringToTerraform)(this._updateHeaders),
|
906
|
+
update_query_parameters: cdktf.hashMapper(cdktf.listMapper(cdktf.stringToTerraform, false))(this._updateQueryParameters),
|
907
|
+
identity: cdktf.listMapper(resourceIdentityToTerraform, true)(this._identity.internalValue),
|
908
|
+
timeouts: resourceTimeoutsToTerraform(this._timeouts.internalValue),
|
909
|
+
};
|
910
|
+
}
|
911
|
+
synthesizeHclAttributes() {
|
912
|
+
const attrs = {
|
913
|
+
body: {
|
914
|
+
value: cdktf.hashMapperHcl(cdktf.anyToHclTerraform)(this._body),
|
915
|
+
isBlock: false,
|
916
|
+
type: "map",
|
917
|
+
storageClassType: "anyMap",
|
918
|
+
},
|
919
|
+
create_headers: {
|
920
|
+
value: cdktf.hashMapperHcl(cdktf.stringToHclTerraform)(this._createHeaders),
|
921
|
+
isBlock: false,
|
922
|
+
type: "map",
|
923
|
+
storageClassType: "stringMap",
|
924
|
+
},
|
925
|
+
create_query_parameters: {
|
926
|
+
value: cdktf.hashMapperHcl(cdktf.listMapperHcl(cdktf.stringToHclTerraform, false))(this._createQueryParameters),
|
927
|
+
isBlock: false,
|
928
|
+
type: "map",
|
929
|
+
storageClassType: "stringListMap",
|
930
|
+
},
|
931
|
+
delete_headers: {
|
932
|
+
value: cdktf.hashMapperHcl(cdktf.stringToHclTerraform)(this._deleteHeaders),
|
933
|
+
isBlock: false,
|
934
|
+
type: "map",
|
935
|
+
storageClassType: "stringMap",
|
936
|
+
},
|
937
|
+
delete_query_parameters: {
|
938
|
+
value: cdktf.hashMapperHcl(cdktf.listMapperHcl(cdktf.stringToHclTerraform, false))(this._deleteQueryParameters),
|
939
|
+
isBlock: false,
|
940
|
+
type: "map",
|
941
|
+
storageClassType: "stringListMap",
|
942
|
+
},
|
943
|
+
ignore_casing: {
|
944
|
+
value: cdktf.booleanToHclTerraform(this._ignoreCasing),
|
945
|
+
isBlock: false,
|
946
|
+
type: "simple",
|
947
|
+
storageClassType: "boolean",
|
948
|
+
},
|
949
|
+
ignore_missing_property: {
|
950
|
+
value: cdktf.booleanToHclTerraform(this._ignoreMissingProperty),
|
951
|
+
isBlock: false,
|
952
|
+
type: "simple",
|
953
|
+
storageClassType: "boolean",
|
954
|
+
},
|
955
|
+
location: {
|
956
|
+
value: cdktf.stringToHclTerraform(this._location),
|
957
|
+
isBlock: false,
|
958
|
+
type: "simple",
|
959
|
+
storageClassType: "string",
|
960
|
+
},
|
961
|
+
locks: {
|
962
|
+
value: cdktf.listMapperHcl(cdktf.stringToHclTerraform, false)(this._locks),
|
963
|
+
isBlock: false,
|
964
|
+
type: "list",
|
965
|
+
storageClassType: "stringList",
|
966
|
+
},
|
967
|
+
name: {
|
968
|
+
value: cdktf.stringToHclTerraform(this._name),
|
969
|
+
isBlock: false,
|
970
|
+
type: "simple",
|
971
|
+
storageClassType: "string",
|
972
|
+
},
|
973
|
+
parent_id: {
|
974
|
+
value: cdktf.stringToHclTerraform(this._parentId),
|
975
|
+
isBlock: false,
|
976
|
+
type: "simple",
|
977
|
+
storageClassType: "string",
|
978
|
+
},
|
979
|
+
read_headers: {
|
980
|
+
value: cdktf.hashMapperHcl(cdktf.stringToHclTerraform)(this._readHeaders),
|
981
|
+
isBlock: false,
|
982
|
+
type: "map",
|
983
|
+
storageClassType: "stringMap",
|
984
|
+
},
|
985
|
+
read_query_parameters: {
|
986
|
+
value: cdktf.hashMapperHcl(cdktf.listMapperHcl(cdktf.stringToHclTerraform, false))(this._readQueryParameters),
|
987
|
+
isBlock: false,
|
988
|
+
type: "map",
|
989
|
+
storageClassType: "stringListMap",
|
990
|
+
},
|
991
|
+
replace_triggers_external_values: {
|
992
|
+
value: cdktf.hashMapperHcl(cdktf.anyToHclTerraform)(this._replaceTriggersExternalValues),
|
993
|
+
isBlock: false,
|
994
|
+
type: "map",
|
995
|
+
storageClassType: "anyMap",
|
996
|
+
},
|
997
|
+
replace_triggers_refs: {
|
998
|
+
value: cdktf.listMapperHcl(cdktf.stringToHclTerraform, false)(this._replaceTriggersRefs),
|
999
|
+
isBlock: false,
|
1000
|
+
type: "list",
|
1001
|
+
storageClassType: "stringList",
|
1002
|
+
},
|
1003
|
+
response_export_values: {
|
1004
|
+
value: cdktf.hashMapperHcl(cdktf.anyToHclTerraform)(this._responseExportValues),
|
1005
|
+
isBlock: false,
|
1006
|
+
type: "map",
|
1007
|
+
storageClassType: "anyMap",
|
1008
|
+
},
|
1009
|
+
retry: {
|
1010
|
+
value: resourceRetryToHclTerraform(this._retry.internalValue),
|
1011
|
+
isBlock: true,
|
1012
|
+
type: "struct",
|
1013
|
+
storageClassType: "ResourceRetry",
|
1014
|
+
},
|
1015
|
+
schema_validation_enabled: {
|
1016
|
+
value: cdktf.booleanToHclTerraform(this._schemaValidationEnabled),
|
1017
|
+
isBlock: false,
|
1018
|
+
type: "simple",
|
1019
|
+
storageClassType: "boolean",
|
1020
|
+
},
|
1021
|
+
tags: {
|
1022
|
+
value: cdktf.hashMapperHcl(cdktf.stringToHclTerraform)(this._tags),
|
1023
|
+
isBlock: false,
|
1024
|
+
type: "map",
|
1025
|
+
storageClassType: "stringMap",
|
1026
|
+
},
|
1027
|
+
type: {
|
1028
|
+
value: cdktf.stringToHclTerraform(this._type),
|
1029
|
+
isBlock: false,
|
1030
|
+
type: "simple",
|
1031
|
+
storageClassType: "string",
|
1032
|
+
},
|
1033
|
+
update_headers: {
|
1034
|
+
value: cdktf.hashMapperHcl(cdktf.stringToHclTerraform)(this._updateHeaders),
|
1035
|
+
isBlock: false,
|
1036
|
+
type: "map",
|
1037
|
+
storageClassType: "stringMap",
|
1038
|
+
},
|
1039
|
+
update_query_parameters: {
|
1040
|
+
value: cdktf.hashMapperHcl(cdktf.listMapperHcl(cdktf.stringToHclTerraform, false))(this._updateQueryParameters),
|
1041
|
+
isBlock: false,
|
1042
|
+
type: "map",
|
1043
|
+
storageClassType: "stringListMap",
|
1044
|
+
},
|
1045
|
+
identity: {
|
1046
|
+
value: cdktf.listMapperHcl(resourceIdentityToHclTerraform, true)(this._identity.internalValue),
|
1047
|
+
isBlock: true,
|
1048
|
+
type: "list",
|
1049
|
+
storageClassType: "ResourceIdentityList",
|
1050
|
+
},
|
1051
|
+
timeouts: {
|
1052
|
+
value: resourceTimeoutsToHclTerraform(this._timeouts.internalValue),
|
1053
|
+
isBlock: true,
|
1054
|
+
type: "struct",
|
1055
|
+
storageClassType: "ResourceTimeouts",
|
1056
|
+
},
|
1057
|
+
};
|
1058
|
+
// remove undefined attributes
|
1059
|
+
return Object.fromEntries(Object.entries(attrs).filter(([_, value]) => value !== undefined && value.value !== undefined));
|
1060
|
+
}
|
1061
|
+
}
|
1062
|
+
exports.Resource = Resource;
|
1063
|
+
// =================
|
1064
|
+
// STATIC PROPERTIES
|
1065
|
+
// =================
|
1066
|
+
Resource.tfResourceType = "azapi_resource";
|
1067
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvLmdlbi9wcm92aWRlcnMvYXphcGkvcmVzb3VyY2UvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLG9GQUFvRjtBQUNwRiwyQ0FBMkM7OztBQXVQM0MsNERBWUM7QUFHRCxrRUF3Q0M7QUFnS0Qsa0VBU0M7QUFHRCx3RUFzQkM7QUEwSUQsa0VBV0M7QUFHRCx3RUFrQ0M7QUF2cUJELCtCQUErQjtBQW9QL0IsU0FBZ0Isd0JBQXdCLENBQUMsTUFBMEM7SUFDakYsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUFDLE9BQU8sTUFBTSxDQUFDO0lBQUMsQ0FBQztJQUM1RixJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQ25DLE1BQU0sSUFBSSxLQUFLLENBQUMsb0hBQW9ILENBQUMsQ0FBQztJQUN4SSxDQUFDO0lBQ0QsT0FBTztRQUNMLG1CQUFtQixFQUFFLEtBQUssQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxDQUFDLE1BQU8sQ0FBQyxpQkFBaUIsQ0FBQztRQUNoRyxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsaUJBQWlCLENBQUMsTUFBTyxDQUFDLGVBQWUsQ0FBQztRQUNsRSxvQkFBb0IsRUFBRSxLQUFLLENBQUMsaUJBQWlCLENBQUMsTUFBTyxDQUFDLGtCQUFrQixDQUFDO1FBQ3pFLFVBQVUsRUFBRSxLQUFLLENBQUMsaUJBQWlCLENBQUMsTUFBTyxDQUFDLFVBQVUsQ0FBQztRQUN2RCxvQkFBb0IsRUFBRSxLQUFLLENBQUMsaUJBQWlCLENBQUMsTUFBTyxDQUFDLG1CQUFtQixDQUFDO0tBQzNFLENBQUE7QUFDSCxDQUFDO0FBR0Qs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Q3JDO1NBQ0YsQ0FBQztRQUVGLDhCQUE4QjtRQUM5QixPQUFPLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBRSxDQUFDLENBQUE7SUFDNUgsQ0FBQzs7QUE3b0JILDRCQThvQkM7QUE1b0JDLG9CQUFvQjtBQUNwQixvQkFBb0I7QUFDcEIsb0JBQW9CO0FBQ0csdUJBQWMsR0FBRyxnQkFBZ0IsQUFBbkIsQ0FBb0IiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvYXp1cmUvYXphcGkvMi4zLjAvZG9jcy9yZXNvdXJjZXMvcmVzb3VyY2Vcbi8vIGdlbmVyYXRlZCBmcm9tIHRlcnJhZm9ybSByZXNvdXJjZSBzY2hlbWFcblxuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgKiBhcyBjZGt0ZiBmcm9tICdjZGt0Zic7XG5cbi8vIENvbmZpZ3VyYXRpb25cblxuZXhwb3J0IGludGVyZmFjZSBSZXNvdXJjZUNvbmZpZyBleHRlbmRzIGNka3RmLlRlcnJhZm9ybU1ldGFBcmd1bWVudHMge1xuICAvKipcbiAgKiBBIGR5bmFtaWMgYXR0cmlidXRlIHRoYXQgY29udGFpbnMgdGhlIHJlcXVlc3QgYm9keS5cbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2F6dXJlL2F6YXBpLzIuMy4wL2RvY3MvcmVzb3VyY2VzL3Jlc291cmNlI2JvZHkgUmVzb3VyY2UjYm9keX1cbiAgKi9cbiAgcmVhZG9ubHkgYm9keT86IHsgW2tleTogc3RyaW5nXTogYW55IH07XG4gIC8qKlxuICAqIEEgbWFwcGluZyBvZiBoZWFkZXJzIHRvIGJlIHNlbnQgd2l0aCB0aGUgY3JlYXRlIHJlcXVlc3QuXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9henVyZS9hemFwaS8yLjMuMC9kb2NzL3Jlc291cmNlcy9yZXNvdXJjZSNjcmVhdGVfaGVhZGVycyBSZXNvdXJjZSNjcmVhdGVfaGVhZGVyc31cbiAgKi9cbiAgcmVhZG9ubHkgY3JlYXRlSGVhZGVycz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG4gIC8qKlxuICAqIEEgbWFwcGluZyBvZiBxdWVyeSBwYXJhbWV0ZXJzIHRvIGJlIHNlbnQgd2l0aCB0aGUgY3JlYXRlIHJlcXVlc3QuXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9henVyZS9hemFwaS8yLjMuMC9kb2NzL3Jlc291cmNlcy9yZXNvdXJjZSNjcmVhdGVfcXVlcnlfcGFyYW1ldGVycyBSZXNvdXJjZSNjcmVhdGVfcXVlcnlfcGFyYW1ldGVyc31cbiAgKi9cbiAgcmVhZG9ubHkgY3JlYXRlUXVlcnlQYXJhbWV0ZXJzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmdbXSB9IHwgY2RrdGYuSVJlc29sdmFibGU7XG4gIC8qKlxuICAqIEEgbWFwcGluZyBvZiBoZWFkZXJzIHRvIGJlIHNlbnQgd2l0aCB0aGUgZGVsZXRlIHJlcXVlc3QuXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9henVyZS9hemFwaS8yLjMuMC9kb2NzL3Jlc291cmNlcy9yZXNvdXJjZSNkZWxldGVfaGVhZGVycyBSZXNvdXJjZSNkZWxldGVfaGVhZGVyc31cbiAgKi9cbiAgcmVhZG9ubHkgZGVsZXRlSGVhZGVycz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG4gIC8qKlxuICAqIEEgbWFwcGluZyBvZiBxdWVyeSBwYXJhbWV0ZXJzIHRvIGJlIHNlbnQgd2l0aCB0aGUgZGVsZXRlIHJlcXVlc3QuXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9henVyZS9hemFwaS8yLjMuMC9kb2NzL3Jlc291cmNlcy9yZXNvdXJjZSNkZWxldGVfcXVlcnlfcGFyYW1ldGVycyBSZXNvdXJjZSNkZWxldGVfcXVlcnlfcGFyYW1ldGVyc31cbiAgKi9cbiAgcmVhZG9ubHkgZGVsZXRlUXVlcnlQYXJhbWV0ZXJzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmdbXSB9IHwgY2RrdGYuSVJlc29sdmFibGU7XG4gIC8qKlxuICAqIFdoZXRoZXIgaWdub3JlIHRoZSBjYXNpbmcgb2YgdGhlIHByb3BlcnR5IG5hbWVzIGluIHRoZSByZXNwb25zZSBib2R5LiBEZWZhdWx0cyB0byBgZmFsc2VgLlxuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvYXp1cmUvYXphcGkvMi4zLjAvZG9jcy9yZXNvdXJjZXMvcmVzb3VyY2UjaWdub3JlX2Nhc2luZyBSZXNvdXJjZSNpZ25vcmVfY2FzaW5nfVxuICAqL1xuICByZWFkb25seSBpZ25vcmVDYXNpbmc/OiBib29sZWFuIHwgY2RrdGYuSVJlc29sdmFibGU7XG4gIC8qKlxuICAqIFdoZXRoZXIgaWdub3JlIG5vdCByZXR1cm5lZCBwcm9wZXJ0aWVzIGxpa2UgY3JlZGVudGlhbHMgaW4gYGJvZHlgIHRvIHN1cHByZXNzIHBsYW4tZGlmZi4gRGVmYXVsdHMgdG8gYHRydWVgLiBJdCdzIHJlY29tbWVuZCB0byBlbmFibGUgdGhpcyBvcHRpb24gd2hlbiBzb21lIHNlbnNpdGl2ZSBwcm9wZXJ0aWVzIGFyZSBub3QgcmV0dXJuZWQgaW4gcmVzcG9uc2UgYm9keSwgaW5zdGVhZCBvZiBzZXR0aW5nIHRoZW0gaW4gYGxpZmVjeWNsZS5pZ25vcmVfY2hhbmdlc2AgYmVjYXVzZSBpdCB3aWxsIG1ha2UgdGhlIHNlbnNpdGl2ZSBmaWVsZHMgdW5hYmxlIHRvIHVwZGF0ZS5cbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2F6dXJlL2F6YXBpLzIuMy4wL2RvY3MvcmVzb3VyY2VzL3Jlc291cmNlI2lnbm9yZV9taXNzaW5nX3Byb3BlcnR5IFJlc291cmNlI2lnbm9yZV9taXNzaW5nX3Byb3BlcnR5fVxuICAqL1xuICByZWFkb25seSBpZ25vcmVNaXNzaW5nUHJvcGVydHk/OiBib29sZWFuIHwgY2RrdGYuSVJlc29sdmFibGU7XG4gIC8qKlxuICAqIFRoZSBsb2NhdGlvbiBvZiB0aGUgQXp1cmUgcmVzb3VyY2UuXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9henVyZS9hemFwaS8yLjMuMC9kb2NzL3Jlc291cmNlcy9yZXNvdXJjZSNsb2NhdGlvbiBSZXNvdXJjZSNsb2NhdGlvbn1cbiAgKi9cbiAgcmVhZG9ubHkgbG9jYXRpb24/OiBzdHJpbmc7XG4gIC8qKlxuICAqIEEgbGlzdCBvZiBBUk0gcmVzb3VyY2UgSURzIHdoaWNoIGFyZSB1c2VkIHRvIGF2b2lkIGNyZWF0ZS9tb2RpZnkvZGVsZXRlIGF6YXBpIHJlc291cmNlcyBhdCB0aGUgc2FtZSB0aW1lLlxuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvYXp1cmUvYXphcGkvMi4zLjAvZG9jcy9yZXNvdXJjZXMvcmVzb3VyY2UjbG9ja3MgUmVzb3VyY2UjbG9ja3N9XG4gICovXG4gIHJlYWRvbmx5IGxvY2tzPzogc3RyaW5nW107XG4gIC8qKlxuICAqIFNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgYXp1cmUgcmVzb3VyY2UuIENoYW5naW5nIHRoaXMgZm9yY2VzIGEgbmV3IHJlc291cmNlIHRvIGJlIGNyZWF0ZWQuXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9henVyZS9hemFwaS8yLjMuMC9kb2NzL3Jlc291cmNlcy9yZXNvdXJjZSNuYW1lIFJlc291cmNlI25hbWV9XG4gICovXG4gIHJlYWRvbmx5IG5hbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAqIFRoZSBJRCBvZiB0aGUgYXp1cmUgcmVzb3VyY2UgaW4gd2hpY2ggdGhpcyByZXNvdXJjZSBpcyBjcmVhdGVkLiBJdCBzdXBwb3J0cyBkaWZmZXJlbnQga2luZHMgb2YgZGVwbG95bWVudCBzY29wZSBmb3IgKip0b3AgbGV2ZWwqKiByZXNvdXJjZXM6XG4gICogXG4gICogICAtIHJlc291cmNlIGdyb3VwIHNjb3BlOiBgcGFyZW50X2lkYCBzaG91bGQgYmUgdGhlIElEIG9mIGEgcmVzb3VyY2UgZ3JvdXAsIGl0J3MgcmVjb21tZW5kZWQgdG8gbWFuYWdlIGEgcmVzb3VyY2UgZ3JvdXAgYnkgYXp1cmVybV9yZXNvdXJjZV9ncm91cC5cbiAgKiBcdC0gbWFuYWdlbWVudCBncm91cCBzY29wZTogYHBhcmVudF9pZGAgc2hvdWxkIGJlIHRoZSBJRCBvZiBhIG1hbmFnZW1lbnQgZ3JvdXAsIGl0J3MgcmVjb21tZW5kZWQgdG8gbWFuYWdlIGEgbWFuYWdlbWVudCBncm91cCBieSBhenVyZXJtX21hbmFnZW1lbnRfZ3JvdXAuXG4gICogXHQtIGV4dGVuc2lvbiBzY29wZTogYHBhcmVudF9pZGAgc2hvdWxkIGJlIHRoZSBJRCBvZiB0aGUgcmVzb3VyY2UgeW91J3JlIGFkZGluZyB0aGUgZXh0ZW5zaW9uIHRvLlxuICAqIFx0LSBzdWJzY3JpcHRpb24gc2NvcGU6IGBwYXJlbnRfaWRgIHNob3VsZCBiZSBsaWtlIFxceDYwL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwXFx4NjBcbiAgKiBcdC0gdGVuYW50IHNjb3BlOiBgcGFyZW50X2lkYCBzaG91bGQgYmUgL1xuICAqIFxuICAqICAgRm9yIGNoaWxkIGxldmVsIHJlc291cmNlcywgdGhlIGBwYXJlbnRfaWRgIHNob3VsZCBiZSB0aGUgSUQgb2YgaXRzIHBhcmVudCByZXNvdXJjZSwgZm9yIGV4YW1wbGUsIHN1Ym5ldCByZXNvdXJjZSdzIGBwYXJlbnRfaWRgIGlzIHRoZSBJRCBvZiB0aGUgdm5ldC5cbiAgKiBcbiAgKiAgIEZvciB0eXBlIGBNaWNyb3NvZnQuUmVzb3VyY2VzL3Jlc291cmNlR3JvdXBzYCwgdGhlIGBwYXJlbnRfaWRgIGNvdWxkIGJlIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIHN1YnNjcmlwdGlvbiBJRCBzcGVjaWZpZWQgaW4gcHJvdmlkZXIgb3IgdGhlIGRlZmF1bHQgc3Vic2NyaXB0aW9uIChZb3UgY291bGQgY2hlY2sgdGhlIGRlZmF1bHQgc3Vic2NyaXB0aW9uIGJ5IGF6dXJlIGNsaSBjb21tYW5kOiBgYXogYWNjb3VudCBzaG93YCkuXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9henVyZS9hemFwaS8yLjMuMC9kb2NzL3Jlc291cmNlcy9yZXNvdXJjZSNwYXJlbnRfaWQgUmVzb3VyY2UjcGFyZW50X2lkfVxuICAqL1xuICByZWFkb25seSBwYXJlbnRJZD86IHN0cmluZztcbiAgLyoqXG4gICogQSBtYXBwaW5nIG9mIGhlYWRlcnMgdG8gYmUgc2VudCB3aXRoIHRoZSByZWFkIHJlcXVlc3QuXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9henVyZS9hemFwaS8yLjMuMC9kb2NzL3Jlc291cmNlcy9yZXNvdXJjZSNyZWFkX2hlYWRlcnMgUmVzb3VyY2UjcmVhZF9oZWFkZXJzfVxuICAqL1xuICByZWFkb25seSByZWFkSGVhZGVycz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG4gIC8qKlxuICAqIEEgbWFwcGluZyBvZiBxdWVyeSBwYXJhbWV0ZXJzIHRvIGJlIHNlbnQgd2l0aCB0aGUgcmVhZCByZXF1ZXN0LlxuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvYXp1cmUvYXphcGkvMi4zLjAvZG9jcy9yZXNvdXJjZXMvcmVzb3VyY2UjcmVhZF9xdWVyeV9wYXJhbWV0ZXJzIFJlc291cmNlI3JlYWRfcXVlcnlfcGFyYW1ldGVyc31cbiAgKi9cbiAgcmVhZG9ubHkgcmVhZFF1ZXJ5UGFyYW1ldGVycz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nW10gfSB8IGNka3RmLklSZXNvbHZhYmxlO1xuICAvKipcbiAgKiBXaWxsIHRyaWdnZXIgYSByZXBsYWNlIG9mIHRoZSByZXNvdXJjZSB3aGVuIHRoZSB2YWx1ZSBjaGFuZ2VzIGFuZCBpcyBub3QgYG51bGxgLiBUaGlzIGNhbiBiZSB1c2VkIGJ5IHByYWN0aXRpb25lcnMgdG8gZm9yY2UgYSByZXBsYWNlIG9mIHRoZSByZXNvdXJjZSB3aGVuIGNlcnRhaW4gdmFsdWVzIGNoYW5nZSwgZS5nLiBjaGFuZ2luZyB0aGUgU0tVIG9mIGEgdmlydHVhbCBtYWNoaW5lIGJhc2VkIG9uIHRoZSB2YWx1ZSBvZiB2YXJpYWJsZXMgb3IgbG9jYWxzLiBUaGUgdmFsdWUgaXMgYSBgZHluYW1pY2AsIHNvIHByYWN0aXRpb25lcnMgY2FuIGNvbXBvc2UgdGhlIGlucHV0IGhvd2V2ZXIgdGhleSB3aXNoLiBGb3IgYSBcImJyZWFrIGdsYXNzXCIgc2V0IHRoZSB2YWx1ZSB0byBgbnVsbGAgdG8gcHJldmVudCB0aGUgcGxhbiBtb2RpZmllciB0YWtpbmcgZWZmZWN0LiBcbiAgKiBJZiB5b3UgaGF2ZSBgbnVsbGAgdmFsdWVzIHRoYXQgeW91IGRvIHdhbnQgdG8gYmUgdHJhY2tlZCBhcyBhZmZlY3RpbmcgdGhlIHJlc291cmNlIHJlcGxhY2VtZW50LCBpbmNsdWRlIHRoZXNlIGluc2lkZSBhbiBvYmplY3QuIFxuICAqIEFkdmFuY2VkIHVzZSBjYXNlcyBhcmUgcG9zc2libGUgYW5kIHJlc291cmNlIHJlcGxhY2VtZW50IGNhbiBiZSB0cmlnZ2VyZWQgYnkgdmFsdWVzIGV4dGVybmFsIHRvIHRoZSByZXNvdXJjZSwgZm9yIGV4YW1wbGUgd2hlbiBhIGRlcGVuZGVudCByZXNvdXJjZSBjaGFuZ2VzLlxuICAqIFxuICAqIGUuZy4gdG8gcmVwbGFjZSBhIHJlc291cmNlIHdoZW4gZWl0aGVyIHRoZSBTS1Ugb3Igb3NfdHlwZSBhdHRyaWJ1dGVzIGNoYW5nZTpcbiAgKiBcbiAgKiBgYGBoY2xcbiAgKiByZXNvdXJjZSBcImF6YXBpX3Jlc291cmNlXCIgXCJleGFtcGxlXCIge1xuICAqICAgbmFtZSAgICAgID0gdmFyLm5hbWVcbiAgKiAgIHR5cGUgICAgICA9IFwiTWljcm9zb2Z0Lk5ldHdvcmsvcHVibGljSVBBZGRyZXNzZXNAMjAyMy0xMS0wMVwiXG4gICogICBwYXJlbnRfaWQgPSBcIi9zdWJzY3JpcHRpb25zLzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMC9yZXNvdXJjZUdyb3Vwcy9leGFtcGxlXCJcbiAgKiAgIGJvZHkgPSB7XG4gICogICAgIHByb3BlcnRpZXMgPSB7XG4gICogICAgICAgc2t1ICAgPSB2YXIuc2t1XG4gICogICAgICAgem9uZXMgPSB2YXIuem9uZXNcbiAgKiAgICAgfVxuICAqICAgfVxuICAqIFxuICAqICAgcmVwbGFjZV90cmlnZ2Vyc19leHRlcm5hbF92YWx1ZXMgPSBbXG4gICogICAgIHZhci5za3UsXG4gICogICAgIHZhci56b25lcyxcbiAgKiAgIF1cbiAgKiB9XG4gICogYGBgXG4gICogXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9henVyZS9hemFwaS8yLjMuMC9kb2NzL3Jlc291cmNlcy9yZXNvdXJjZSNyZXBsYWNlX3RyaWdnZXJzX2V4dGVybmFsX3ZhbHVlcyBSZXNvdXJjZSNyZXBsYWNlX3RyaWdnZXJzX2V4dGVybmFsX3ZhbHVlc31cbiAgKi9cbiAgcmVhZG9ubHkgcmVwbGFjZVRyaWdnZXJzRXh0ZXJuYWxWYWx1ZXM/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9O1xuICAvKipcbiAgKiBBIGxpc3Qgb2YgcGF0aHMgaW4gdGhlIGN1cnJlbnQgVGVycmFmb3JtIGNvbmZpZ3VyYXRpb24uIFdoZW4gdGhlIHZhbHVlcyBhdCB0aGVzZSBwYXRocyBjaGFuZ2UsIHRoZSByZXNvdXJjZSB3aWxsIGJlIHJlcGxhY2VkLlxuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvYXp1cmUvYXphcGkvMi4zLjAvZG9jcy9yZXNvdXJjZXMvcmVzb3VyY2UjcmVwbGFjZV90cmlnZ2Vyc19yZWZzIFJlc291cmNlI3JlcGxhY2VfdHJpZ2dlcnNfcmVmc31cbiAgKi9cbiAgcmVhZG9ubHkgcmVwbGFjZVRyaWdnZXJzUmVmcz86IHN0cmluZ1tdO1xuICAvKipcbiAgKiBUaGUgYXR0cmlidXRlIGNhbiBhY2NlcHQgZWl0aGVyIGEgbGlzdCBvciBhIG1hcC5cbiAgKiBcbiAgKiAtICoqTGlzdCoqOiBBIGxpc3Qgb2YgcGF0aHMgdGhhdCBuZWVkIHRvIGJlIGV4cG9ydGVkIGZyb20gdGhlIHJlc3BvbnNlIGJvZHkuIFNldHRpbmcgaXQgdG8gYFtcIipcIl1gIHdpbGwgZXhwb3J0IHRoZSBmdWxsIHJlc3BvbnNlIGJvZHkuIEhlcmUncyBhbiBleGFtcGxlLiBJZiBpdCBzZXRzIHRvIGBbXCJwcm9wZXJ0aWVzLmxvZ2luU2VydmVyXCIsIFwicHJvcGVydGllcy5wb2xpY2llcy5xdWFyYW50aW5lUG9saWN5LnN0YXR1c1wiXWAsIGl0IHdpbGwgc2V0IHRoZSBmb2xsb3dpbmcgSENMIG9iamVjdCB0byB0aGUgY29tcHV0ZWQgcHJvcGVydHkgb3V0cHV0LlxuICAqIFxuICAqIFx0YGBgdGV4dFxuICAqIFx0e1xuICAqIFx0XHRwcm9wZXJ0aWVzID0ge1xuICAqIFx0XHRcdGxvZ2luU2VydmVyID0gXCJyZWdpc3RyeTEuYXp1cmVjci5pb1wiXG4gICogXHRcdFx0cG9saWNpZXMgPSB7XG4gICogXHRcdFx0XHRxdWFyYW50aW5lUG9saWN5ID0ge1xuICAqIFx0XHRcdFx0XHRzdGF0dXMgPSBcImRpc2FibGVkXCJcbiAgKiBcdFx0XHRcdH1cbiAgKiBcdFx0XHR9XG4gICogXHRcdH1cbiAgKiBcdH1cbiAgKiBcdGBgYFxuICAqIFxuICAqIC0gKipNYXAqKjogQSBtYXAgd2hlcmUgdGhlIGtleSBpcyB0aGUgbmFtZSBmb3IgdGhlIHJlc3VsdCBhbmQgdGhlIHZhbHVlIGlzIGEgSk1FU1BhdGggcXVlcnkgc3RyaW5nIHRvIGZpbHRlciB0aGUgcmVzcG9uc2UuIEhlcmUncyBhbiBleGFtcGxlLiBJZiBpdCBzZXRzIHRvIGB7XCJsb2dpbl9zZXJ2ZXJcIjogXCJwcm9wZXJ0aWVzLmxvZ2luU2VydmVyXCIsIFwicXVhcmFudGluZV9zdGF0dXNcIjogXCJwcm9wZXJ0aWVzLnBvbGljaWVzLnF1YXJhbnRpbmVQb2xpY3kuc3RhdHVzXCJ9YCwgaXQgd2lsbCBzZXQgdGhlIGZvbGxvd2luZyBIQ0wgb2JqZWN0IHRvIHRoZSBjb21wdXRlZCBwcm9wZXJ0eSBvdXRwdXQuXG4gICogXG4gICogXHRgYGB0ZXh0XG4gICogXHR7XG4gICogXHRcdFwibG9naW5fc2VydmVyXCIgPSBcInJlZ2lzdHJ5MS5henVyZWNyLmlvXCJcbiAgKiBcdFx0XCJxdWFyYW50aW5lX3N0YXR1c1wiID0gXCJkaXNhYmxlZFwiXG4gICogXHR9XG4gICogXHRgYGBcbiAgKiBcbiAgKiBUbyBsZWFybiBtb3JlIGFib3V0IEpNRVNQYXRoLCB2aXNpdCBbSk1FU1BhdGhdKGh0dHBzOi8vam1lc3BhdGgub3JnLykuXG4gICogXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9henVyZS9hemFwaS8yLjMuMC9kb2NzL3Jlc291cmNlcy9yZXNvdXJjZSNyZXNwb25zZV9leHBvcnRfdmFsdWVzIFJlc291cmNlI3Jlc3BvbnNlX2V4cG9ydF92YWx1ZXN9XG4gICovXG4gIHJlYWRvbmx5IHJlc3BvbnNlRXhwb3J0VmFsdWVzPzogeyBba2V5OiBzdHJpbmddOiBhbnkgfTtcbiAgLyoqXG4gICogVGhlIHJldHJ5IG9iamVjdCBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9henVyZS9hemFwaS8yLjMuMC9kb2NzL3Jlc291cmNlcy9yZXNvdXJjZSNyZXRyeSBSZXNvdXJjZSNyZXRyeX1cbiAgKi9cbiAgcmVhZG9ubHkgcmV0cnk/OiBSZXNvdXJjZVJldHJ5O1xuICAvKipcbiAgKiBXaGV0aGVyIGVuYWJsZWQgdGhlIHZhbGlkYXRpb24gb24gYHR5cGVgIGFuZCBgYm9keWAgd2l0aCBlbWJlZGRlZCBzY2hlbWEuIERlZmF1bHRzIHRvIGB0cnVlYC5cbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2F6dXJlL2F6YXBpLzIuMy4wL2RvY3MvcmVzb3VyY2VzL3Jlc291cmNlI3NjaGVtYV92YWxpZGF0aW9uX2VuYWJsZWQgUmVzb3VyY2Ujc2NoZW1hX3ZhbGlkYXRpb25fZW5hYmxlZH1cbiAgKi9cbiAgcmVhZG9ubHkgc2NoZW1hVmFsaWRhdGlvbkVuYWJsZWQ/OiBib29sZWFuIHwgY2RrdGYuSVJlc29sdmFibGU7XG4gIC8qKlxuICAqIEEgbWFwcGluZyBvZiB0YWdzIHdoaWNoIHNob3VsZCBiZSBhc3NpZ25lZCB0byB0aGUgQXp1cmUgcmVzb3VyY2UuXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9henVyZS9hemFwaS8yLjMuMC9kb2NzL3Jlc291cmNlcy9yZXNvdXJjZSN0YWdzIFJlc291cmNlI3RhZ3N9XG4gICovXG4gIHJlYWRvbmx5IHRhZ3M/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuICAvKipcbiAgKiBJbiBhIGZvcm1hdCBsaWtlIGA8cmVzb3VyY2UtdHlwZT5APGFwaS12ZXJzaW9uPmAuIGA8cmVzb3VyY2UtdHlwZT5gIGlzIHRoZSBBenVyZSByZXNvdXJjZSB0eXBlLCBmb3IgZXhhbXBsZSwgYE1pY3Jvc29mdC5TdG9yYWdlL3N0b3JhZ2VBY2NvdW50c2AuIGA8YXBpLXZlcnNpb24+YCBpcyB2ZXJzaW9uIG9mIHRoZSBBUEkgdXNlZCB0byBtYW5hZ2UgdGhpcyBhenVyZSByZXNvdXJjZS5cbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2F6dXJlL2F6YXBpLzIuMy4wL2RvY3MvcmVzb3VyY2VzL3Jlc291cmNlI3R5cGUgUmVzb3VyY2UjdHlwZX1cbiAgKi9cbiAgcmVhZG9ubHkgdHlwZTogc3RyaW5nO1xuICAvKipcbiAgKiBBIG1hcHBpbmcgb2YgaGVhZGVycyB0byBiZSBzZW50IHdpdGggdGhlIHVwZGF0ZSByZXF1ZXN0LlxuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvYXp1cmUvYXphcGkvMi4zLjAvZG9jcy9yZXNvdXJjZXMvcmVzb3VyY2UjdXBkYXRlX2hlYWRlcnMgUmVzb3VyY2UjdXBkYXRlX2hlYWRlcnN9XG4gICovXG4gIHJlYWRvbmx5IHVwZGF0ZUhlYWRlcnM/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuICAvKipcbiAgKiBBIG1hcHBpbmcgb2YgcXVlcnkgcGFyYW1ldGVycyB0byBiZSBzZW50IHdpdGggdGhlIHVwZGF0ZSByZXF1ZXN0LlxuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvYXp1cmUvYXphcGkvMi4zLjAvZG9jcy9yZXNvdXJjZXMvcmVzb3VyY2UjdXBkYXRlX3F1ZXJ5X3BhcmFtZXRlcnMgUmVzb3VyY2UjdXBkYXRlX3F1ZXJ5X3BhcmFtZXRlcnN9XG4gICovXG4gIHJlYWRvbmx5IHVwZGF0ZVF1ZXJ5UGFyYW1ldGVycz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nW10gfSB8IGNka3RmLklSZXNvbHZhYmxlO1xuICAvKipcbiAgKiBpZGVudGl0eSBibG9ja1xuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvYXp1cmUvYXphcGkvMi4zLjAvZG9jcy9yZXNvdXJjZXMvcmVzb3VyY2UjaWRlbnRpdHkgUmVzb3VyY2UjaWRlbnRpdHl9XG4gICovXG4gIHJlYWRvbmx5IGlkZW50aXR5PzogUmVzb3VyY2VJZGVudGl0eVtdIHwgY2RrdGYuSVJlc29sdmFibGU7XG4gIC8qKlxuICAqIHRpbWVvdXRzIGJsb2NrXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9henVyZS9hemFwaS8yLjMuMC9kb2NzL3Jlc291cmNlcy9yZXNvdXJjZSN0aW1lb3V0cyBSZXNvdXJjZSN0aW1lb3V0c31cbiAgKi9cbiAgcmVhZG9ubHkgdGltZW91dHM/OiBSZXNvdXJjZVRpbWVvdXRzO1xufVxuZXhwb3J0IGludGVyZmFjZSBSZXNvdXJjZVJldHJ5IHtcbiAgLyoqXG4gICogQSBsaXN0IG9mIHJlZ3VsYXIgZXhwcmVzc2lvbnMgdG8gbWF0Y2ggYWdhaW5zdCBlcnJvciBtZXNzYWdlcy4gSWYgYW55IG9mIHRoZSByZWd1bGFyIGV4cHJlc3Npb25zIG1hdGNoLCB0aGUgcmVxdWVzdCB3aWxsIGJlIHJldHJpZWQuXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9henVyZS9hemFwaS8yLjMuMC9kb2NzL3Jlc291cmNlcy9yZXNvdXJjZSNlcnJvcl9tZXNzYWdlX3JlZ2V4IFJlc291cmNlI2Vycm9yX21lc3NhZ2VfcmVnZXh9XG4gICovXG4gIHJlYWRvbmx5IGVycm9yTWVzc2FnZVJlZ2V4OiBzdHJpbmdbXTtcbiAgLyoqXG4gICogVGhlIGJhc2UgbnVtYmVyIG9mIHNlY29uZHMgdG8gd2FpdCBiZXR3ZWVuIHJldHJpZXMuIERlZmF1bHQgaXMgYDEwYC5cbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2F6dXJlL2F6YXBpLzIuMy4wL2RvY3MvcmVzb3VyY2VzL3Jlc291cmNlI2ludGVydmFsX3NlY29uZHMgUmVzb3VyY2UjaW50ZXJ2YWxfc2Vjb25kc31cbiAgKi9cbiAgcmVhZG9ubHkgaW50ZXJ2YWxTZWNvbmRzPzogbnVtYmVyO1xuICAvKipcbiAgKiBUaGUgbWF4aW11bSBudW1iZXIgb2Ygc2Vjb25kcyB0byB3YWl0IGJldHdlZW4gcmV0cmllcy4gRGVmYXVsdCBpcyBgMTgwYC5cbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2F6dXJlL2F6YXBpLzIuMy4wL2RvY3MvcmVzb3VyY2VzL3Jlc291cmNlI21heF9pbnRlcnZhbF9zZWNvbmRzIFJlc291cmNlI21heF9pbnRlcnZhbF9zZWNvbmRzfVxuICAqL1xuICByZWFkb25seSBtYXhJbnRlcnZhbFNlY29uZHM/OiBudW1iZXI7XG4gIC8qKlxuICAqIFRoZSBtdWx0aXBsaWVyIHRvIGFwcGx5IHRvIHRoZSBpbnRlcnZhbCBiZXR3ZWVuIHJldHJpZXMuIERlZmF1bHQgaXMgYDEuNWAuXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9henVyZS9hemFwaS8yLjMuMC9kb2NzL3Jlc291cmNlcy9yZXNvdXJjZSNtdWx0aXBsaWVyIFJlc291cmNlI211bHRpcGxpZXJ9XG4gICovXG4gIHJlYWRvbmx5IG11bHRpcGxpZXI/OiBudW1iZXI7XG4gIC8qKlxuICAqIFRoZSByYW5kb21pemF0aW9uIGZhY3RvciB0byBhcHBseSB0byB0aGUgaW50ZXJ2YWwgYmV0d2VlbiByZXRyaWVzLiBUaGUgZm9ybXVsYSBmb3IgdGhlIHJhbmRvbWl6ZWQgaW50ZXJ2YWwgaXM6IGBSZXRyeUludGVydmFsICogKHJhbmRvbSB2YWx1ZSBpbiByYW5nZSBbMSAtIFJhbmRvbWl6YXRpb25GYWN0b3IsIDEgKyBSYW5kb21pemF0aW9uRmFjdG9yXSlgLiBUaGVyZWZvcmUgc2V0IHRvIHplcm8gYDAuMGAgZm9yIG5vIHJhbmRvbWl6YXRpb24uIERlZmF1bHQgaXMgYDAuNWAuXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9henVyZS9hemFwaS8yLjMuMC9kb2NzL3Jlc291cmNlcy9yZXNvdXJjZSNyYW5kb21pemF0aW9uX2ZhY3RvciBSZXNvdXJjZSNyYW5kb21pemF0aW9uX2ZhY3Rvcn1cbiAgKi9cbiAgcmVhZG9ubHkgcmFuZG9taXphdGlvbkZhY3Rvcj86IG51bWJlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc291cmNlUmV0cnlUb1RlcnJhZm9ybShzdHJ1Y3Q/OiBSZXNvdXJjZVJldHJ5IHwgY2RrdGYuSVJlc29sdmFibGUpOiBhbnkge1xuICBpZiAoIWNka3RmLmNhbkluc3BlY3Qoc3RydWN0KSB8fCBjZGt0Zi5Ub2tlbml6YXRpb24uaXNSZXNvbHZhYmxlKHN0cnVjdCkpIHsgcmV0dXJuIHN0cnVjdDsgfVxuICBpZiAoY2RrdGYuaXNDb21wbGV4RWxlbWVudChzdHJ1Y3QpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQSBjb21wbGV4IGVsZW1lbnQgd2FzIHVzZWQgYXMgY29uZmlndXJhdGlvbiwgdGhpcyBpcyBub3Qgc3VwcG9ydGVkOiBodHRwczovL2Nkay50Zi9jb21wbGV4LW9iamVjdC1hcy1jb25maWd1cmF0aW9uXCIpO1xuICB9XG4gIHJldHVybiB7XG4gICAgZXJyb3JfbWVzc2FnZV9yZWdleDogY2RrdGYubGlzdE1hcHBlcihjZGt0Zi5zdHJpbmdUb1RlcnJhZm9ybSwgZmFsc2UpKHN0cnVjdCEuZXJyb3JNZXNzYWdlUmVnZXgpLFxuICAgIGludGVydmFsX3NlY29uZHM6IGNka3RmLm51bWJlclRvVGVycmFmb3JtKHN0cnVjdCEuaW50ZXJ2YWxTZWNvbmRzKSxcbiAgICBtYXhfaW50ZXJ2YWxfc2Vjb25kczogY2RrdGYubnVtYmVyVG9UZXJyYWZvcm0oc3RydWN0IS5tYXhJbnRlcnZhbFNlY29uZHMpLFxuICAgIG11bHRpcGxpZXI6IGNka3RmLm51bWJlclRvVGVycmFmb3JtKHN0cnVjdCEubXVsdGlwbGllciksXG4gICAgcmFuZG9taXphdGlvbl9mYWN0b3I6IGNka3RmLm51bWJlclRvVGVycmFmb3JtKHN0cnVjdCEucmFuZG9taXphdGlvbkZhY3RvciksXG4gIH1cbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb3VyY2VSZXRyeVRvSGNsVGVycmFmb3JtKHN0cnVjdD86IFJlc291cmNlUmV0cnkgfCBjZGt0Zi5JUmVzb2x2YWJsZSk6IGFueSB7XG4gIGlmICghY2RrdGYuY2FuSW5zcGVjdChzdHJ1Y3QpIHx8IGNka3RmLlRva2VuaXphdGlvbi5pc1Jlc29sdmFibGUoc3RydWN0KSkgeyByZXR1cm4gc3RydWN0OyB9XG4gIGlmIChjZGt0Zi5pc0NvbXBsZXhFbGVtZW50KHN0cnVjdCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJBIGNvbXBsZXggZWxlbWVudCB3YXMgdXNlZCBhcyBjb25maWd1cmF0aW9uLCB0aGlzIGlzIG5vdCBzdXBwb3J0ZWQ6IGh0dHBzOi8vY2RrLnRmL2NvbXBsZXgtb2JqZWN0LWFzLWNvbmZpZ3VyYXRpb25cIik7XG4gIH1cbiAgY29uc3QgYXR0cnMgPSB7XG4gICAgZXJyb3JfbWVzc2FnZV9yZWdleDoge1xuICAgICAgdmFsdWU6IGNka3RmLmxpc3RNYXBwZXJIY2woY2RrdGYuc3RyaW5nVG9IY2xUZXJyYWZvcm0sIGZhbHNlKShzdHJ1Y3QhLmVycm9yTWVzc2FnZVJlZ2V4KSxcbiAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgdHlwZTogXCJsaXN0XCIsXG4gICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcInN0cmluZ0xpc3RcIixcbiAgICB9LFxuICAgIGludGVydmFsX3NlY29uZHM6IHtcbiAgICAgIHZhbHVlOiBjZGt0Zi5udW1iZXJUb0hjbFRlcnJhZm9ybShzdHJ1Y3QhLmludGVydmFsU2Vjb25kcyksXG4gICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcIm51bWJlclwiLFxuICAgIH0sXG4gICAgbWF4X2ludGVydmFsX3NlY29uZHM6IHtcbiAgICAgIHZhbHVlOiBjZGt0Zi5udW1iZXJUb0hjbFRlcnJhZm9ybShzdHJ1Y3QhLm1heEludGVydmFsU2Vjb25kcyksXG4gICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcIm51bWJlclwiLFxuICAgIH0sXG4gICAgbXVsdGlwbGllcjoge1xuICAgICAgdmFsdWU6IGNka3RmLm51bWJlclRvSGNsVGVycmFmb3JtKHN0cnVjdCEubXVsdGlwbGllciksXG4gICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcIm51bWJlclwiLFxuICAgIH0sXG4gICAgcmFuZG9taXphdGlvbl9mYWN0b3I6IHtcbiAgICAgIHZhbHVlOiBjZGt0Zi5udW1iZXJUb0hjbFRlcnJhZm9ybShzdHJ1Y3QhLnJhbmRvbWl6YXRpb25GYWN0b3IpLFxuICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJudW1iZXJcIixcbiAgICB9LFxuICB9O1xuXG4gIC8vIHJlbW92ZSB1bmRlZmluZWQgYXR0cmlidXRlc1xuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKGF0dHJzKS5maWx0ZXIoKFtfLCB2YWx1ZV0pID0+IHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUudmFsdWUgIT09IHVuZGVmaW5lZCkpO1xufVxuXG5leHBvcnQgY2xhc3MgUmVzb3VyY2VSZXRyeU91dHB1dFJlZmVyZW5jZSBleHRlbmRzIGNka3RmLkNvbXBsZXhPYmplY3Qge1xuICBwcml2YXRlIGlzRW1wdHlPYmplY3QgPSBmYWxzZTtcbiAgcHJpdmF0ZSByZXNvbHZhYmxlVmFsdWU/OiBjZGt0Zi5JUmVzb2x2YWJsZTtcblxuICAvKipcbiAgKiBAcGFyYW0gdGVycmFmb3JtUmVzb3VyY2UgVGhlIHBhcmVudCByZXNvdXJjZVxuICAqIEBwYXJhbSB0ZXJyYWZvcm1BdHRyaWJ1dGUgVGhlIGF0dHJpYnV0ZSBvbiB0aGUgcGFyZW50IHJlc291cmNlIHRoaXMgY2xhc3MgaXMgcmVmZXJlbmNpbmdcbiAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHRlcnJhZm9ybVJlc291cmNlOiBjZGt0Zi5JSW50ZXJwb2xhdGluZ1BhcmVudCwgdGVycmFmb3JtQXR0cmlidXRlOiBzdHJpbmcpIHtcbiAgICBzdXBlcih0ZXJyYWZvcm1SZXNvdXJjZSwgdGVycmFmb3JtQXR0cmlidXRlLCBmYWxzZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGludGVybmFsVmFsdWUoKTogUmVzb3VyY2VSZXRyeSB8IGNka3RmLklSZXNvbHZhYmxlIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodGhpcy5yZXNvbHZhYmxlVmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlc29sdmFibGVWYWx1ZTtcbiAgICB9XG4gICAgbGV0IGhhc0FueVZhbHVlcyA9IHRoaXMuaXNFbXB0eU9iamVjdDtcbiAgICBjb25zdCBpbnRlcm5hbFZhbHVlUmVzdWx0OiBhbnkgPSB7fTtcbiAgICBpZiAodGhpcy5fZXJyb3JNZXNzYWdlUmVnZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgaGFzQW55VmFsdWVzID0gdHJ1ZTtcbiAgICAgIGludGVybmFsVmFsdWVSZXN1bHQuZXJyb3JNZXNzYWdlUmVnZXggPSB0aGlzLl9lcnJvck1lc3NhZ2VSZWdleDtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2ludGVydmFsU2Vjb25kcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBoYXNBbnlWYWx1ZXMgPSB0cnVlO1xuICAgICAgaW50ZXJuYWxWYWx1ZVJlc3VsdC5pbnRlcnZhbFNlY29uZHMgPSB0aGlzLl9pbnRlcnZhbFNlY29uZHM7XG4gICAgfVxuICAgIGlmICh0aGlzLl9tYXhJbnRlcnZhbFNlY29uZHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaGFzQW55VmFsdWVzID0gdHJ1ZTtcbiAgICAgIGludGVybmFsVmFsdWVSZXN1bHQubWF4SW50ZXJ2YWxTZWNvbmRzID0gdGhpcy5fbWF4SW50ZXJ2YWxTZWNvbmRzO1xuICAgIH1cbiAgICBpZiAodGhpcy5fbXVsdGlwbGllciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBoYXNBbnlWYWx1ZXMgPSB0cnVlO1xuICAgICAgaW50ZXJuYWxWYWx1ZVJlc3VsdC5tdWx0aXBsaWVyID0gdGhpcy5fbXVsdGlwbGllcjtcbiAgICB9XG4gICAgaWYgKHRoaXMuX3JhbmRvbWl6YXRpb25GYWN0b3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaGFzQW55VmFsdWVzID0gdHJ1ZTtcbiAgICAgIGludGVybmFsVmFsdWVSZXN1bHQucmFuZG9taXphdGlvbkZhY3RvciA9IHRoaXMuX3JhbmRvbWl6YXRpb25GYWN0b3I7XG4gICAgfVxuICAgIHJldHVybiBoYXNBbnlWYWx1ZXMgPyBpbnRlcm5hbFZhbHVlUmVzdWx0IDogdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIHNldCBpbnRlcm5hbFZhbHVlKHZhbHVlOiBSZXNvdXJjZVJldHJ5IHwgY2RrdGYuSVJlc29sdmFibGUgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5pc0VtcHR5T2JqZWN0ID0gZmFsc2U7XG4gICAgICB0aGlzLnJlc29sdmFibGVWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX2Vycm9yTWVzc2FnZVJlZ2V4ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5faW50ZXJ2YWxTZWNvbmRzID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fbWF4SW50ZXJ2YWxTZWNvbmRzID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fbXVsdGlwbGllciA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX3JhbmRvbWl6YXRpb25GYWN0b3IgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGVsc2UgaWYgKGNka3RmLlRva2VuaXphdGlvbi5pc1Jlc29sdmFibGUodmFsdWUpKSB7XG4gICAgICB0aGlzLmlzRW1wdHlPYmplY3QgPSBmYWxzZTtcbiAgICAgIHRoaXMucmVzb2x2YWJsZVZhbHVlID0gdmFsdWU7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5pc0VtcHR5T2JqZWN0ID0gT2JqZWN0LmtleXModmFsdWUpLmxlbmd0aCA9PT0gMDtcbiAgICAgIHRoaXMucmVzb2x2YWJsZVZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fZXJyb3JNZXNzYWdlUmVnZXggPSB2YWx1ZS5lcnJvck1lc3NhZ2VSZWdleDtcbiAgICAgIHRoaXMuX2ludGVydmFsU2Vjb25kcyA9IHZhbHVlLmludGVydmFsU2Vjb25kcztcbiAgICAgIHRoaXMuX21heEludGVydmFsU2Vjb25kcyA9IHZhbHVlLm1heEludGVydmFsU2Vjb25kcztcbiAgICAgIHRoaXMuX211bHRpcGxpZXIgPSB2YWx1ZS5tdWx0aXBsaWVyO1xuICAgICAgdGhpcy5fcmFuZG9taXphdGlvbkZhY3RvciA9IHZhbHVlLnJhbmRvbWl6YXRpb25GYWN0b3I7XG4gICAgfVxuICB9XG5cbiAgLy8gZXJyb3JfbWVzc2FnZV9yZWdleCAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IGZhbHNlLCByZXF1aXJlZDogdHJ1ZVxuICBwcml2YXRlIF9lcnJvck1lc3NhZ2VSZWdleD86IHN0cmluZ1tdOyBcbiAgcHVibGljIGdldCBlcnJvck1lc3NhZ2VSZWdleCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMaXN0QXR0cmlidXRlKCdlcnJvcl9tZXNzYWdlX3JlZ2V4Jyk7XG4gIH1cbiAgcHVibGljIHNldCBlcnJvck1lc3NhZ2VSZWdleCh2YWx1ZTogc3RyaW5nW10pIHtcbiAgICB0aGlzLl9lcnJvck1lc3NhZ2VSZWdleCA9IHZhbHVlO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBlcnJvck1lc3NhZ2VSZWdleElucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9lcnJvck1lc3NhZ2VSZWdleDtcbiAgfVxuXG4gIC8vIGludGVydmFsX3NlY29uZHMgLSBjb21wdXRlZDogdHJ1ZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9pbnRlcnZhbFNlY29uZHM/OiBudW1iZXI7IFxuICBwdWJsaWMgZ2V0IGludGVydmFsU2Vjb25kcygpIHtcbiAgICByZXR1cm4gdGhpcy5nZXROdW1iZXJBdHRyaWJ1dGUoJ2ludGVydmFsX3NlY29uZHMnKTtcbiAgfVxuICBwdWJsaWMgc2V0IGludGVydmFsU2Vjb25kcyh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5faW50ZXJ2YWxTZWNvbmRzID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0SW50ZXJ2YWxTZWNvbmRzKCkge1xuICAgIHRoaXMuX2ludGVydmFsU2Vjb25kcyA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgaW50ZXJ2YWxTZWNvbmRzSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2ludGVydmFsU2Vjb25kcztcbiAgfVxuXG4gIC8vIG1heF9pbnRlcnZhbF9zZWNvbmRzIC0gY29tcHV0ZWQ6IHRydWUsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfbWF4SW50ZXJ2YWxTZWNvbmRzPzogbnVtYmVyOyBcbiAgcHVibGljIGdldCBtYXhJbnRlcnZhbFNlY29uZHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TnVtYmVyQXR0cmlidXRlKCdtYXhfaW50ZXJ2YWxfc2Vjb25kcycpO1xuICB9XG4gIHB1YmxpYyBzZXQgbWF4SW50ZXJ2YWxTZWNvbmRzKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9tYXhJbnRlcnZhbFNlY29uZHMgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRNYXhJbnRlcnZhbFNlY29uZHMoKSB7XG4gICAgdGhpcy5fbWF4SW50ZXJ2YWxTZWNvbmRzID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBtYXhJbnRlcnZhbFNlY29uZHNJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fbWF4SW50ZXJ2YWxTZWNvbmRzO1xuICB9XG5cbiAgLy8gbXVsdGlwbGllciAtIGNvbXB1dGVkOiB0cnVlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX211bHRpcGxpZXI/OiBudW1iZXI7IFxuICBwdWJsaWMgZ2V0IG11bHRpcGxpZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TnVtYmVyQXR0cmlidXRlKCdtdWx0aXBsaWVyJyk7XG4gIH1cbiAgcHVibGljIHNldCBtdWx0aXBsaWVyKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9tdWx0aXBsaWVyID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0TXVsdGlwbGllcigpIHtcbiAgICB0aGlzLl9tdWx0aXBsaWVyID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBtdWx0aXBsaWVySW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX211bHRpcGxpZXI7XG4gIH1cblxuICAvLyByYW5kb21pemF0aW9uX2ZhY3RvciAtIGNvbXB1dGVkOiB0cnVlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX3JhbmRvbWl6YXRpb25GYWN0b3I/OiBudW1iZXI7IFxuICBwdWJsaWMgZ2V0IHJhbmRvbWl6YXRpb25GYWN0b3IoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TnVtYmVyQXR0cmlidXRlKCdyYW5kb21pemF0aW9uX2ZhY3RvcicpO1xuICB9XG4gIHB1YmxpYyBzZXQgcmFuZG9taXphdGlvbkZhY3Rvcih2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fcmFuZG9taXphdGlvbkZhY3RvciA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldFJhbmRvbWl6YXRpb25GYWN0b3IoKSB7XG4gICAgdGhpcy5fcmFuZG9taXphdGlvbkZhY3RvciA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgcmFuZG9taXphdGlvbkZhY3RvcklucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9yYW5kb21pemF0aW9uRmFjdG9yO1xuICB9XG59XG5leHBvcnQgaW50ZXJmYWNlIFJlc291cmNlSWRlbnRpdHkge1xuICAvKipcbiAgKiBBIGxpc3Qgb2YgVXNlciBNYW5hZ2VkIElkZW50aXR5IElEJ3Mgd2hpY2ggc2hvdWxkIGJlIGFzc2lnbmVkIHRvIHRoZSBhenVyZSByZXNvdXJjZS5cbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2F6dXJlL2F6YXBpLzIuMy4wL2RvY3MvcmVzb3VyY2VzL3Jlc291cmNlI2lkZW50aXR5X2lkcyBSZXNvdXJjZSNpZGVudGl0eV9pZHN9XG4gICovXG4gIHJlYWRvbmx5IGlkZW50aXR5SWRzPzogc3RyaW5nW107XG4gIC8qKlxuICAqIFRoZSBUeXBlIG9mIElkZW50aXR5IHdoaWNoIHNob3VsZCBiZSB1c2VkIGZvciB0aGlzIGF6dXJlIHJlc291cmNlLiBQb3NzaWJsZSB2YWx1ZXMgYXJlIGBTeXN0ZW1Bc3NpZ25lZGAsIGBVc2VyQXNzaWduZWRgIGFuZCBgU3lzdGVtQXNzaWduZWQsVXNlckFzc2lnbmVkYFxuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvYXp1cmUvYXphcGkvMi4zLjAvZG9jcy9yZXNvdXJjZXMvcmVzb3VyY2UjdHlwZSBSZXNvdXJjZSN0eXBlfVxuICAqL1xuICByZWFkb25seSB0eXBlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvdXJjZUlkZW50aXR5VG9UZXJyYWZvcm0oc3RydWN0PzogUmVzb3VyY2VJZGVudGl0eSB8IGNka3RmLklSZXNvbHZhYmxlKTogYW55IHtcbiAgaWYgKCFjZGt0Zi5jYW5JbnNwZWN0KHN0cnVjdCkgfHwgY2RrdGYuVG9rZW5pemF0aW9uLmlzUmVzb2x2YWJsZShzdHJ1Y3QpKSB7IHJldHVybiBzdHJ1Y3Q7IH1cbiAgaWYgKGNka3RmLmlzQ29tcGxleEVsZW1lbnQoc3RydWN0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkEgY29tcGxleCBlbGVtZW50IHdhcyB1c2VkIGFzIGNvbmZpZ3VyYXRpb24sIHRoaXMgaXMgbm90IHN1cHBvcnRlZDogaHR0cHM6Ly9jZGsudGYvY29tcGxleC1vYmplY3QtYXMtY29uZmlndXJhdGlvblwiKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGlkZW50aXR5X2lkczogY2RrdGYubGlzdE1hcHBlcihjZGt0Zi5zdHJpbmdUb1RlcnJhZm9ybSwgZmFsc2UpKHN0cnVjdCEuaWRlbnRpdHlJZHMpLFxuICAgIHR5cGU6IGNka3RmLnN0cmluZ1RvVGVycmFmb3JtKHN0cnVjdCEudHlwZSksXG4gIH1cbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb3VyY2VJZGVudGl0eVRvSGNsVGVycmFmb3JtKHN0cnVjdD86IFJlc291cmNlSWRlbnRpdHkgfCBjZGt0Zi5JUmVzb2x2YWJsZSk6IGFueSB7XG4gIGlmICghY2RrdGYuY2FuSW5zcGVjdChzdHJ1Y3QpIHx8IGNka3RmLlRva2VuaXphdGlvbi5pc1Jlc29sdmFibGUoc3RydWN0KSkgeyByZXR1cm4gc3RydWN0OyB9XG4gIGlmIChjZGt0Zi5pc0NvbXBsZXhFbGVtZW50KHN0cnVjdCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJBIGNvbXBsZXggZWxlbWVudCB3YXMgdXNlZCBhcyBjb25maWd1cmF0aW9uLCB0aGlzIGlzIG5vdCBzdXBwb3J0ZWQ6IGh0dHBzOi8vY2RrLnRmL2NvbXBsZXgtb2JqZWN0LWFzLWNvbmZpZ3VyYXRpb25cIik7XG4gIH1cbiAgY29uc3QgYXR0cnMgPSB7XG4gICAgaWRlbnRpdHlfaWRzOiB7XG4gICAgICB2YWx1ZTogY2RrdGYubGlzdE1hcHBlckhjbChjZGt0Zi5zdHJpbmdUb0hjbFRlcnJhZm9ybSwgZmFsc2UpKHN0cnVjdCEuaWRlbnRpdHlJZHMpLFxuICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICB0eXBlOiBcImxpc3RcIixcbiAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nTGlzdFwiLFxuICAgIH0sXG4gICAgdHlwZToge1xuICAgICAgdmFsdWU6IGNka3RmLnN0cmluZ1RvSGNsVGVycmFmb3JtKHN0cnVjdCEudHlwZSksXG4gICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcInN0cmluZ1wiLFxuICAgIH0sXG4gIH07XG5cbiAgLy8gcmVtb3ZlIHVuZGVmaW5lZCBhdHRyaWJ1dGVzXG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMoYXR0cnMpLmZpbHRlcigoW18sIHZhbHVlXSkgPT4gdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZS52YWx1ZSAhPT0gdW5kZWZpbmVkKSk7XG59XG5cbmV4cG9ydCBjbGFzcyBSZXNvdXJjZUlkZW50aXR5T3V0cHV0UmVmZXJlbmNlIGV4dGVuZHMgY2RrdGYuQ29tcGxleE9iamVjdCB7XG4gIHByaXZhdGUgaXNFbXB0eU9iamVjdCA9IGZhbHNlO1xuICBwcml2YXRlIHJlc29sdmFibGVWYWx1ZT86IGNka3RmLklSZXNvbHZhYmxlO1xuXG4gIC8qKlxuICAqIEBwYXJhbSB0ZXJyYWZvcm1SZXNvdXJjZSBUaGUgcGFyZW50IHJlc291cmNlXG4gICogQHBhcmFtIHRlcnJhZm9ybUF0dHJpYnV0ZSBUaGUgYXR0cmlidXRlIG9uIHRoZSBwYXJlbnQgcmVzb3VyY2UgdGhpcyBjbGFzcyBpcyByZWZlcmVuY2luZ1xuICAqIEBwYXJhbSBjb21wbGV4T2JqZWN0SW5kZXggdGhlIGluZGV4IG9mIHRoaXMgaXRlbSBpbiB0aGUgbGlzdFxuICAqIEBwYXJhbSBjb21wbGV4T2JqZWN0SXNGcm9tU2V0IHdoZXRoZXIgdGhlIGxpc3QgaXMgd3JhcHBpbmcgYSBzZXQgKHdpbGwgYWRkIHRvbGlzdCgpIHRvIGJlIGFibGUgdG8gYWNjZXNzIGFuIGl0ZW0gdmlhIGFuIGluZGV4KVxuICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IodGVycmFmb3JtUmVzb3VyY2U6IGNka3RmLklJbnRlcnBvbGF0aW5nUGFyZW50LCB0ZXJyYWZvcm1BdHRyaWJ1dGU6IHN0cmluZywgY29tcGxleE9iamVjdEluZGV4OiBudW1iZXIsIGNvbXBsZXhPYmplY3RJc0Zyb21TZXQ6IGJvb2xlYW4pIHtcbiAgICBzdXBlcih0ZXJyYWZvcm1SZXNvdXJjZSwgdGVycmFmb3JtQXR0cmlidXRlLCBjb21wbGV4T2JqZWN0SXNGcm9tU2V0LCBjb21wbGV4T2JqZWN0SW5kZXgpO1xuICB9XG5cbiAgcHVibGljIGdldCBpbnRlcm5hbFZhbHVlKCk6IFJlc291cmNlSWRlbnRpdHkgfCBjZGt0Zi5JUmVzb2x2YWJsZSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHRoaXMucmVzb2x2YWJsZVZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXNvbHZhYmxlVmFsdWU7XG4gICAgfVxuICAgIGxldCBoYXNBbnlWYWx1ZXMgPSB0aGlzLmlzRW1wdHlPYmplY3Q7XG4gICAgY29uc3QgaW50ZXJuYWxWYWx1ZVJlc3VsdDogYW55ID0ge307XG4gICAgaWYgKHRoaXMuX2lkZW50aXR5SWRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGhhc0FueVZhbHVlcyA9IHRydWU7XG4gICAgICBpbnRlcm5hbFZhbHVlUmVzdWx0LmlkZW50aXR5SWRzID0gdGhpcy5faWRlbnRpdHlJZHM7XG4gICAgfVxuICAgIGlmICh0aGlzLl90eXBlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGhhc0FueVZhbHVlcyA9IHRydWU7XG4gICAgICBpbnRlcm5hbFZhbHVlUmVzdWx0LnR5cGUgPSB0aGlzLl90eXBlO1xuICAgIH1cbiAgICByZXR1cm4gaGFzQW55VmFsdWVzID8gaW50ZXJuYWxWYWx1ZVJlc3VsdCA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgaW50ZXJuYWxWYWx1ZSh2YWx1ZTogUmVzb3VyY2VJZGVudGl0eSB8IGNka3RmLklSZXNvbHZhYmxlIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuaXNFbXB0eU9iamVjdCA9IGZhbHNlO1xuICAgICAgdGhpcy5yZXNvbHZhYmxlVmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9pZGVudGl0eUlkcyA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX3R5cGUgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGVsc2UgaWYgKGNka3RmLlRva2VuaXphdGlvbi5pc1Jlc29sdmFibGUodmFsdWUpKSB7XG4gICAgICB0aGlzLmlzRW1wdHlPYmplY3QgPSBmYWxzZTtcbiAgICAgIHRoaXMucmVzb2x2YWJsZVZhbHVlID0gdmFsdWU7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5pc0VtcHR5T2JqZWN0ID0gT2JqZWN0LmtleXModmFsdWUpLmxlbmd0aCA9PT0gMDtcbiAgICAgIHRoaXMucmVzb2x2YWJsZVZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5faWRlbnRpdHlJZHMgPSB2YWx1ZS5pZGVudGl0eUlkcztcbiAgICAgIHRoaXMuX3R5cGUgPSB2YWx1ZS50eXBlO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlkZW50aXR5X2lkcyAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9pZGVudGl0eUlkcz86IHN0cmluZ1tdOyBcbiAgcHVibGljIGdldCBpZGVudGl0eUlkcygpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMaXN0QXR0cmlidXRlKCdpZGVudGl0eV9pZHMnKTtcbiAgfVxuICBwdWJsaWMgc2V0IGlkZW50aXR5SWRzKHZhbHVlOiBzdHJpbmdbXSkge1xuICAgIHRoaXMuX2lkZW50aXR5SWRzID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0SWRlbnRpdHlJZHMoKSB7XG4gICAgdGhpcy5faWRlbnRpdHlJZHMgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IGlkZW50aXR5SWRzSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lkZW50aXR5SWRzO1xuICB9XG5cbiAgLy8gcHJpbmNpcGFsX2lkIC0gY29tcHV0ZWQ6IHRydWUsIG9wdGlvbmFsOiBmYWxzZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHB1YmxpYyBnZXQgcHJpbmNpcGFsSWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RyaW5nQXR0cmlidXRlKCdwcmluY2lwYWxfaWQnKTtcbiAgfVxuXG4gIC8vIHRlbmFudF9pZCAtIGNvbXB1dGVkOiB0cnVlLCBvcHRpb25hbDogZmFsc2UsIHJlcXVpcmVkOiBmYWxzZVxuICBwdWJsaWMgZ2V0IHRlbmFudElkKCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ0F0dHJpYnV0ZSgndGVuYW50X2lkJyk7XG4gIH1cblxuICAvLyB0eXBlIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogZmFsc2UsIHJlcXVpcmVkOiB0cnVlXG4gIHByaXZhdGUgX3R5cGU/OiBzdHJpbmc7IFxuICBwdWJsaWMgZ2V0IHR5cGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RyaW5nQXR0cmlidXRlKCd0eXBlJyk7XG4gIH1cbiAgcHVibGljIHNldCB0eXBlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl90eXBlID0gdmFsdWU7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IHR5cGVJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fdHlwZTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUmVzb3VyY2VJZGVudGl0eUxpc3QgZXh0ZW5kcyBjZGt0Zi5Db21wbGV4TGlzdCB7XG4gIHB1YmxpYyBpbnRlcm5hbFZhbHVlPyA6IFJlc291cmNlSWRlbnRpdHlbXSB8IGNka3RmLklSZXNvbHZhYmxlXG5cbiAgLyoqXG4gICogQHBhcmFtIHRlcnJhZm9ybVJlc291cmNlIFRoZSBwYXJlbnQgcmVzb3VyY2VcbiAgKiBAcGFyYW0gdGVycmFmb3JtQXR0cmlidXRlIFRoZSBhdHRyaWJ1dGUgb24gdGhlIHBhcmVudCByZXNvdXJjZSB0aGlzIGNsYXNzIGlzIHJlZmVyZW5jaW5nXG4gICogQHBhcmFtIHdyYXBzU2V0IHdoZXRoZXIgdGhlIGxpc3QgaXMgd3JhcHBpbmcgYSBzZXQgKHdpbGwgYWRkIHRvbGlzdCgpIHRvIGJlIGFibGUgdG8gYWNjZXNzIGFuIGl0ZW0gdmlhIGFuIGluZGV4KVxuICAqL1xuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgdGVycmFmb3JtUmVzb3VyY2U6IGNka3RmLklJbnRlcnBvbGF0aW5nUGFyZW50LCBwcm90ZWN0ZWQgdGVycmFmb3JtQXR0cmlidXRlOiBzdHJpbmcsIHByb3RlY3RlZCB3cmFwc1NldDogYm9vbGVhbikge1xuICAgIHN1cGVyKHRlcnJhZm9ybVJlc291cmNlLCB0ZXJyYWZvcm1BdHRyaWJ1dGUsIHdyYXBzU2V0KVxuICB9XG5cbiAgLyoqXG4gICogQHBhcmFtIGluZGV4IHRoZSBpbmRleCBvZiB0aGUgaXRlbSB0byByZXR1cm5cbiAgKi9cbiAgcHVibGljIGdldChpbmRleDogbnVtYmVyKTogUmVzb3VyY2VJZGVudGl0eU91dHB1dFJlZmVyZW5jZSB7XG4gICAgcmV0dXJuIG5ldyBSZXNvdXJjZUlkZW50aXR5T3V0cHV0UmVmZXJlbmNlKHRoaXMudGVycmFmb3JtUmVzb3VyY2UsIHRoaXMudGVycmFmb3JtQXR0cmlidXRlLCBpbmRleCwgdGhpcy53cmFwc1NldCk7XG4gIH1cbn1cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb3VyY2VUaW1lb3V0cyB7XG4gIC8qKlxuICAqIEEgc3RyaW5nIHRoYXQgY2FuIGJlIFtwYXJzZWQgYXMgYSBkdXJhdGlvbl0oaHR0cHM6Ly9wa2cuZ28uZGV2L3RpbWUjUGFyc2VEdXJhdGlvbikgY29uc2lzdGluZyBvZiBudW1iZXJzIGFuZCB1bml0IHN1ZmZpeGVzLCBzdWNoIGFzIFwiMzBzXCIgb3IgXCIyaDQ1bVwiLiBWYWxpZCB0aW1lIHVuaXRzIGFyZSBcInNcIiAoc2Vjb25kcyksIFwibVwiIChtaW51dGVzKSwgXCJoXCIgKGhvdXJzKS5cbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2F6dXJlL2F6YXBpLzIuMy4wL2RvY3MvcmVzb3VyY2VzL3Jlc291cmNlI2NyZWF0ZSBSZXNvdXJjZSNjcmVhdGV9XG4gICovXG4gIHJlYWRvbmx5IGNyZWF0ZT86IHN0cmluZztcbiAgLyoqXG4gICogQSBzdHJpbmcgdGhhdCBjYW4gYmUgW3BhcnNlZCBhcyBhIGR1cmF0aW9uXShodHRwczovL3BrZy5nby5kZXYvdGltZSNQYXJzZUR1cmF0aW9uKSBjb25zaXN0aW5nIG9mIG51bWJlcnMgYW5kIHVuaXQgc3VmZml4ZXMsIHN1Y2ggYXMgXCIzMHNcIiBvciBcIjJoNDVtXCIuIFZhbGlkIHRpbWUgdW5pdHMgYXJlIFwic1wiIChzZWNvbmRzKSwgXCJtXCIgKG1pbnV0ZXMpLCBcImhcIiAoaG91cnMpLiBTZXR0aW5nIGEgdGltZW91dCBmb3IgYSBEZWxldGUgb3BlcmF0aW9uIGlzIG9ubHkgYXBwbGljYWJsZSBpZiBjaGFuZ2VzIGFyZSBzYXZlZCBpbnRvIHN0YXRlIGJlZm9yZSB0aGUgZGVzdHJveSBvcGVyYXRpb24gb2NjdXJzLlxuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvYXp1cmUvYXphcGkvMi4zLjAvZG9jcy9yZXNvdXJjZXMvcmVzb3VyY2UjZGVsZXRlIFJlc291cmNlI2RlbGV0ZX1cbiAgKi9cbiAgcmVhZG9ubHkgZGVsZXRlPzogc3RyaW5nO1xuICAvKipcbiAgKiBBIHN0cmluZyB0aGF0IGNhbiBiZSBbcGFyc2VkIGFzIGEgZHVyYXRpb25dKGh0dHBzOi8vcGtnLmdvLmRldi90aW1lI1BhcnNlRHVyYXRpb24pIGNvbnNpc3Rpbmcgb2YgbnVtYmVycyBhbmQgdW5pdCBzdWZmaXhlcywgc3VjaCBhcyBcIjMwc1wiIG9yIFwiMmg0NW1cIi4gVmFsaWQgdGltZSB1bml0cyBhcmUgXCJzXCIgKHNlY29uZHMpLCBcIm1cIiAobWludXRlcyksIFwiaFwiIChob3VycykuIFJlYWQgb3BlcmF0aW9ucyBvY2N1ciBkdXJpbmcgYW55IHJlZnJlc2ggb3IgcGxhbm5pbmcgb3BlcmF0aW9uIHdoZW4gcmVmcmVzaCBpcyBlbmFibGVkLlxuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvYXp1cmUvYXphcGkvMi4zLjAvZG9jcy9yZXNvdXJjZXMvcmVzb3VyY2UjcmVhZCBSZXNvdXJjZSNyZWFkfVxuICAqL1xuICByZWFkb25seSByZWFkPzogc3RyaW5nO1xuICAvKipcbiAgKiBBIHN0cmluZyB0aGF0IGNhbiBiZSBbcGFyc2VkIGFzIGEgZHVyYXRpb25dKGh0dHBzOi8vcGtnLmdvLmRldi90aW1lI1BhcnNlRHVyYXRpb24pIGNvbnNpc3Rpbmcgb2YgbnVtYmVycyBhbmQgdW5pdCBzdWZmaXhlcywgc3VjaCBhcyBcIjMwc1wiIG9yIFwiMmg0NW1cIi4gVmFsaWQgdGltZSB1bml0cyBhcmUgXCJzXCIgKHNlY29uZHMpLCBcIm1cIiAobWludXRlcyksIFwiaFwiIChob3VycykuXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9henVyZS9hemFwaS8yLjMuMC9kb2NzL3Jlc291cmNlcy9yZXNvdXJjZSN1cGRhdGUgUmVzb3VyY2UjdXBkYXRlfVxuICAqL1xuICByZWFkb25seSB1cGRhdGU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvdXJjZVRpbWVvdXRzVG9UZXJyYWZvcm0oc3RydWN0PzogUmVzb3VyY2VUaW1lb3V0cyB8IGNka3RmLklSZXNvbHZhYmxlKTogYW55IHtcbiAgaWYgKCFjZGt0Zi5jYW5JbnNwZWN0KHN0cnVjdCkgfHwgY2RrdGYuVG9rZW5pemF0aW9uLmlzUmVzb2x2YWJsZShzdHJ1Y3QpKSB7IHJldHVybiBzdHJ1Y3Q7IH1cbiAgaWYgKGNka3RmLmlzQ29tcGxleEVsZW1lbnQoc3RydWN0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkEgY29tcGxleCBlbGVtZW50IHdhcyB1c2VkIGFzIGNvbmZpZ3VyYXRpb24sIHRoaXMgaXMgbm90IHN1cHBvcnRlZDogaHR0cHM6Ly9jZGsudGYvY29tcGxleC1vYmplY3QtYXMtY29uZmlndXJhdGlvblwiKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGNyZWF0ZTogY2RrdGYuc3RyaW5nVG9UZXJyYWZvcm0oc3RydWN0IS5jcmVhdGUpLFxuICAgIGRlbGV0ZTogY2RrdGYuc3RyaW5nVG9UZXJyYWZvcm0oc3RydWN0IS5kZWxldGUpLFxuICAgIHJlYWQ6IGNka3RmLnN0cmluZ1RvVGVycmFmb3JtKHN0cnVjdCEucmVhZCksXG4gICAgdXBkYXRlOiBjZGt0Zi5zdHJpbmdUb1RlcnJhZm9ybShzdHJ1Y3QhLnVwZGF0ZSksXG4gIH1cbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb3VyY2VUaW1lb3V0c1RvSGNsVGVycmFmb3JtKHN0cnVjdD86IFJlc291cmNlVGltZW91dHMgfCBjZGt0Zi5JUmVzb2x2YWJsZSk6IGFueSB7XG4gIGlmICghY2RrdGYuY2FuSW5zcGVjdChzdHJ1Y3QpIHx8IGNka3RmLlRva2VuaXphdGlvbi5pc1Jlc29sdmFibGUoc3RydWN0KSkgeyByZXR1cm4gc3RydWN0OyB9XG4gIGlmIChjZGt0Zi5pc0NvbXBsZXhFbGVtZW50KHN0cnVjdCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJBIGNvbXBsZXggZWxlbWVudCB3YXMgdXNlZCBhcyBjb25maWd1cmF0aW9uLCB0aGlzIGlzIG5vdCBzdXBwb3J0ZWQ6IGh0dHBzOi8vY2RrLnRmL2NvbXBsZXgtb2JqZWN0LWFzLWNvbmZpZ3VyYXRpb25cIik7XG4gIH1cbiAgY29uc3QgYXR0cnMgPSB7XG4gICAgY3JlYXRlOiB7XG4gICAgICB2YWx1ZTogY2RrdGYuc3RyaW5nVG9IY2xUZXJyYWZvcm0oc3RydWN0IS5jcmVhdGUpLFxuICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJzdHJpbmdcIixcbiAgICB9LFxuICAgIGRlbGV0ZToge1xuICAgICAgdmFsdWU6IGNka3RmLnN0cmluZ1RvSGNsVGVycmFmb3JtKHN0cnVjdCEuZGVsZXRlKSxcbiAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgfSxcbiAgICByZWFkOiB7XG4gICAgICB2YWx1ZTogY2RrdGYuc3RyaW5nVG9IY2xUZXJyYWZvcm0oc3RydWN0IS5yZWFkKSxcbiAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgfSxcbiAgICB1cGRhdGU6IHtcbiAgICAgIHZhbHVlOiBjZGt0Zi5zdHJpbmdUb0hjbFRlcnJhZm9ybShzdHJ1Y3QhLnVwZGF0ZSksXG4gICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcInN0cmluZ1wiLFxuICAgIH0sXG4gIH07XG5cbiAgLy8gcmVtb3ZlIHVuZGVmaW5lZCBhdHRyaWJ1dGVzXG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMoYXR0cnMpLmZpbHRlcigoW18sIHZhbHVlXSkgPT4gdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZS52YWx1ZSAhPT0gdW5kZWZpbmVkKSk7XG59XG5cbmV4cG9ydCBjbGFzcyBSZXNvdXJjZVRpbWVvdXRzT3V0cHV0UmVmZXJlbmNlIGV4dGVuZHMgY2RrdGYuQ29tcGxleE9iamVjdCB7XG4gIHByaXZhdGUgaXNFbXB0eU9iamVjdCA9IGZhbHNlO1xuICBwcml2YXRlIHJlc29sdmFibGVWYWx1ZT86IGNka3RmLklSZXNvbHZhYmxlO1xuXG4gIC8qKlxuICAqIEBwYXJhbSB0ZXJyYWZvcm1SZXNvdXJjZSBUaGUgcGFyZW50IHJlc291cmNlXG4gICogQHBhcmFtIHRlcnJhZm9ybUF0dHJpYnV0ZSBUaGUgYXR0cmlidXRlIG9uIHRoZSBwYXJlbnQgcmVzb3VyY2UgdGhpcyBjbGFzcyBpcyByZWZlcmVuY2luZ1xuICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IodGVycmFmb3JtUmVzb3VyY2U6IGNka3RmLklJbnRlcnBvbGF0aW5nUGFyZW50LCB0ZXJyYWZvcm1BdHRyaWJ1dGU6IHN0cmluZykge1xuICAgIHN1cGVyKHRlcnJhZm9ybVJlc291cmNlLCB0ZXJyYWZvcm1BdHRyaWJ1dGUsIGZhbHNlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaW50ZXJuYWxWYWx1ZSgpOiBSZXNvdXJjZVRpbWVvdXRzIHwgY2RrdGYuSVJlc29sdmFibGUgfCB1bmRlZmluZWQge1xuICAgIGlmICh0aGlzLnJlc29sdmFibGVWYWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMucmVzb2x2YWJsZVZhbHVlO1xuICAgIH1cbiAgICBsZXQgaGFzQW55VmFsdWVzID0gdGhpcy5pc0VtcHR5T2JqZWN0O1xuICAgIGNvbnN0IGludGVybmFsVmFsdWVSZXN1bHQ6IGFueSA9IHt9O1xuICAgIGlmICh0aGlzLl9jcmVhdGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaGFzQW55VmFsdWVzID0gdHJ1ZTtcbiAgICAgIGludGVybmFsVmFsdWVSZXN1bHQuY3JlYXRlID0gdGhpcy5fY3JlYXRlO1xuICAgIH1cbiAgICBpZiAodGhpcy5fZGVsZXRlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGhhc0FueVZhbHVlcyA9IHRydWU7XG4gICAgICBpbnRlcm5hbFZhbHVlUmVzdWx0LmRlbGV0ZSA9IHRoaXMuX2RlbGV0ZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX3JlYWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaGFzQW55VmFsdWVzID0gdHJ1ZTtcbiAgICAgIGludGVybmFsVmFsdWVSZXN1bHQucmVhZCA9IHRoaXMuX3JlYWQ7XG4gICAgfVxuICAgIGlmICh0aGlzLl91cGRhdGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaGFzQW55VmFsdWVzID0gdHJ1ZTtcbiAgICAgIGludGVybmFsVmFsdWVSZXN1bHQudXBkYXRlID0gdGhpcy5fdXBkYXRlO1xuICAgIH1cbiAgICByZXR1cm4gaGFzQW55VmFsdWVzID8gaW50ZXJuYWxWYWx1ZVJlc3VsdCA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgaW50ZXJuYWxWYWx1ZSh2YWx1ZTogUmVzb3VyY2VUaW1lb3V0cyB8IGNka3RmLklSZXNvbHZhYmxlIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuaXNFbXB0eU9iamVjdCA9IGZhbHNlO1xuICAgICAgdGhpcy5yZXNvbHZhYmxlVmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9jcmVhdGUgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9kZWxldGUgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9yZWFkID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fdXBkYXRlID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBlbHNlIGlmIChjZGt0Zi5Ub2tlbml6YXRpb24uaXNSZXNvbHZhYmxlKHZhbHVlKSkge1xuICAgICAgdGhpcy5pc0VtcHR5T2JqZWN0ID0gZmFsc2U7XG4gICAgICB0aGlzLnJlc29sdmFibGVWYWx1ZSA9IHZhbHVlO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuaXNFbXB0eU9iamVjdCA9IE9iamVjdC5rZXlzKHZhbHVlKS5sZW5ndGggPT09IDA7XG4gICAgICB0aGlzLnJlc29sdmFibGVWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX2NyZWF0ZSA9IHZhbHVlLmNyZWF0ZTtcbiAgICAgIHRoaXMuX2RlbGV0ZSA9IHZhbHVlLmRlbGV0ZTtcbiAgICAgIHRoaXMuX3JlYWQgPSB2YWx1ZS5yZWFkO1xuICAgICAgdGhpcy5fdXBkYXRlID0gdmFsdWUudXBkYXRlO1xuICAgIH1cbiAgfVxuXG4gIC8vIGNyZWF0ZSAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9jcmVhdGU/OiBzdHJpbmc7IFxuICBwdWJsaWMgZ2V0IGNyZWF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmdBdHRyaWJ1dGUoJ2NyZWF0ZScpO1xuICB9XG4gIHB1YmxpYyBzZXQgY3JlYXRlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9jcmVhdGUgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRDcmVhdGUoKSB7XG4gICAgdGhpcy5fY3JlYXRlID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBjcmVhdGVJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY3JlYXRlO1xuICB9XG5cbiAgLy8gZGVsZXRlIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX2RlbGV0ZT86IHN0cmluZzsgXG4gIHB1YmxpYyBnZXQgZGVsZXRlKCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ0F0dHJpYnV0ZSgnZGVsZXRlJyk7XG4gIH1cbiAgcHVibGljIHNldCBkZWxldGUodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX2RlbGV0ZSA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldERlbGV0ZSgpIHtcbiAgICB0aGlzLl9kZWxldGUgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IGRlbGV0ZUlucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9kZWxldGU7XG4gIH1cblxuICAvLyByZWFkIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX3JlYWQ/OiBzdHJpbmc7IFxuICBwdWJsaWMgZ2V0IHJlYWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RyaW5nQXR0cmlidXRlKCdyZWFkJyk7XG4gIH1cbiAgcHVibGljIHNldCByZWFkKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9yZWFkID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0UmVhZCgpIHtcbiAgICB0aGlzLl9yZWFkID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCByZWFkSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWQ7XG4gIH1cblxuICAvLyB1cGRhdGUgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfdXBkYXRlPzogc3RyaW5nOyBcbiAgcHVibGljIGdldCB1cGRhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RyaW5nQXR0cmlidXRlKCd1cGRhdGUnKTtcbiAgfVxuICBwdWJsaWMgc2V0IHVwZGF0ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fdXBkYXRlID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0VXBkYXRlKCkge1xuICAgIHRoaXMuX3VwZGF0ZSA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgdXBkYXRlSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3VwZGF0ZTtcbiAgfVxufVxuXG4vKipcbiogUmVwcmVzZW50cyBhIHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvYXp1cmUvYXphcGkvMi4zLjAvZG9jcy9yZXNvdXJjZXMvcmVzb3VyY2UgYXphcGlfcmVzb3VyY2V9XG4qL1xuZXhwb3J0IGNsYXNzIFJlc291cmNlIGV4dGVuZHMgY2RrdGYuVGVycmFmb3JtUmVzb3VyY2Uge1xuXG4gIC8vID09PT09PT09PT09PT09PT09XG4gIC8vIFNUQVRJQyBQUk9QRVJUSUVTXG4gIC8vID09PT09PT09PT09PT09PT09XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgdGZSZXNvdXJjZVR5cGUgPSBcImF6YXBpX3Jlc291cmNlXCI7XG5cbiAgLy8gPT09PT09PT09PT09PT1cbiAgLy8gU1RBVElDIE1ldGhvZHNcbiAgLy8gPT09PT09PT09PT09PT1cbiAgLyoqXG4gICogR2VuZXJhdGVzIENES1RGIGNvZGUgZm9yIGltcG9ydGluZyBhIFJlc291cmNlIHJlc291cmNlIHVwb24gcnVubmluZyBcImNka3RmIHBsYW4gPHN0YWNrLW5hbWU+XCJcbiAgKiBAcGFyYW0gc2NvcGUgVGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIGNvbnN0cnVjdFxuICAqIEBwYXJhbSBpbXBvcnRUb0lkIFRoZSBjb25zdHJ1Y3QgaWQgdXNlZCBpbiB0aGUgZ2VuZXJhdGVkIGNvbmZpZyBmb3IgdGhlIFJlc291cmNlIHRvIGltcG9ydFxuICAqIEBwYXJhbSBpbXBvcnRGcm9tSWQgVGhlIGlkIG9mIHRoZSBleGlzdGluZyBSZXNvdXJjZSB0aGF0IHNob3VsZCBiZSBpbXBvcnRlZC4gUmVmZXIgdG8gdGhlIHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvYXp1cmUvYXphcGkvMi4zLjAvZG9jcy9yZXNvdXJjZXMvcmVzb3VyY2UjaW1wb3J0IGltcG9ydCBzZWN0aW9ufSBpbiB0aGUgZG9jdW1lbnRhdGlvbiBvZiB0aGlzIHJlc291cmNlIGZvciB0aGUgaWQgdG8gdXNlXG4gICogQHBhcmFtIHByb3ZpZGVyPyBPcHRpb25hbCBpbnN0YW5jZSBvZiB0aGUgcHJvdmlkZXIgd2hlcmUgdGhlIFJlc291cmNlIHRvIGltcG9ydCBpcyBmb3VuZFxuICAqL1xuICBwdWJsaWMgc3RhdGljIGdlbmVyYXRlQ29uZmlnRm9ySW1wb3J0KHNjb3BlOiBDb25zdHJ1Y3QsIGltcG9ydFRvSWQ6IHN0cmluZywgaW1wb3J0RnJvbUlkOiBzdHJpbmcsIHByb3ZpZGVyPzogY2RrdGYuVGVycmFmb3JtUHJvdmlkZXIpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBjZGt0Zi5JbXBvcnRhYmxlUmVzb3VyY2Uoc2NvcGUsIGltcG9ydFRvSWQsIHsgdGVycmFmb3JtUmVzb3VyY2VUeXBlOiBcImF6YXBpX3Jlc291cmNlXCIsIGltcG9ydElkOiBpbXBvcnRGcm9tSWQsIHByb3ZpZGVyIH0pO1xuICAgICAgfVxuXG4gIC8vID09PT09PT09PT09XG4gIC8vIElOSVRJQUxJWkVSXG4gIC8vID09PT09PT09PT09XG5cbiAgLyoqXG4gICogQ3JlYXRlIGEgbmV3IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvYXp1cmUvYXphcGkvMi4zLjAvZG9jcy9yZXNvdXJjZXMvcmVzb3VyY2UgYXphcGlfcmVzb3VyY2V9IFJlc291cmNlXG4gICpcbiAgKiBAcGFyYW0gc2NvcGUgVGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIGNvbnN0cnVjdFxuICAqIEBwYXJhbSBpZCBUaGUgc2NvcGVkIGNvbnN0cnVjdCBJRC4gTXVzdCBiZSB1bmlxdWUgYW1vbmdzdCBzaWJsaW5ncyBpbiB0aGUgc2FtZSBzY29wZVxuICAqIEBwYXJhbSBvcHRpb25zIFJlc291cmNlQ29uZmlnXG4gICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBjb25maWc6IFJlc291cmNlQ29uZmlnKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICB0ZXJyYWZvcm1SZXNvdXJjZVR5cGU6ICdhemFwaV9yZXNvdXJjZScsXG4gICAgICB0ZXJyYWZvcm1HZW5lcmF0b3JNZXRhZGF0YToge1xuICAgICAgICBwcm92aWRlck5hbWU6ICdhemFwaScsXG4gICAgICAgIHByb3ZpZGVyVmVyc2lvbjogJzIuMy4wJyxcbiAgICAgICAgcHJvdmlkZXJWZXJzaW9uQ29uc3RyYWludDogJzIuMy4wJ1xuICAgICAgfSxcbiAgICAgIHByb3ZpZGVyOiBjb25maWcucHJvdmlkZXIsXG4gICAgICBkZXBlbmRzT246IGNvbmZpZy5kZXBlbmRzT24sXG4gICAgICBjb3VudDogY29uZmlnLmNvdW50LFxuICAgICAgbGlmZWN5Y2xlOiBjb25maWcubGlmZWN5Y2xlLFxuICAgICAgcHJvdmlzaW9uZXJzOiBjb25maWcucHJvdmlzaW9uZXJzLFxuICAgICAgY29ubmVjdGlvbjogY29uZmlnLmNvbm5lY3Rpb24sXG4gICAgICBmb3JFYWNoOiBjb25maWcuZm9yRWFjaFxuICAgIH0pO1xuICAgIHRoaXMuX2JvZHkgPSBjb25maWcuYm9keTtcbiAgICB0aGlzLl9jcmVhdGVIZWFkZXJzID0gY29uZmlnLmNyZWF0ZUhlYWRlcnM7XG4gICAgdGhpcy5fY3JlYXRlUXVlcnlQYXJhbWV0ZXJzID0gY29uZmlnLmNyZWF0ZVF1ZXJ5UGFyYW1ldGVycztcbiAgICB0aGlzLl9kZWxldGVIZWFkZXJzID0gY29uZmlnLmRlbGV0ZUhlYWRlcnM7XG4gICAgdGhpcy5fZGVsZXRlUXVlcnlQYXJhbWV0ZXJzID0gY29uZmlnLmRlbGV0ZVF1ZXJ5UGFyYW1ldGVycztcbiAgICB0aGlzLl9pZ25vcmVDYXNpbmcgPSBjb25maWcuaWdub3JlQ2FzaW5nO1xuICAgIHRoaXMuX2lnbm9yZU1pc3NpbmdQcm9wZXJ0eSA9IGNvbmZpZy5pZ25vcmVNaXNzaW5nUHJvcGVydHk7XG4gICAgdGhpcy5fbG9jYXRpb24gPSBjb25maWcubG9jYXRpb247XG4gICAgdGhpcy5fbG9ja3MgPSBjb25maWcubG9ja3M7XG4gICAgdGhpcy5fbmFtZSA9IGNvbmZpZy5uYW1lO1xuICAgIHRoaXMuX3BhcmVudElkID0gY29uZmlnLnBhcmVudElkO1xuICAgIHRoaXMuX3JlYWRIZWFkZXJzID0gY29uZmlnLnJlYWRIZWFkZXJzO1xuICAgIHRoaXMuX3JlYWRRdWVyeVBhcmFtZXRlcnMgPSBjb25maWcucmVhZFF1ZXJ5UGFyYW1ldGVycztcbiAgICB0aGlzLl9yZXBsYWNlVHJpZ2dlcnNFeHRlcm5hbFZhbHVlcyA9IGNvbmZpZy5yZXBsYWNlVHJpZ2dlcnNFeHRlcm5hbFZhbHVlcztcbiAgICB0aGlzLl9yZXBsYWNlVHJpZ2dlcnNSZWZzID0gY29uZmlnLnJlcGxhY2VUcmlnZ2Vyc1JlZnM7XG4gICAgdGhpcy5fcmVzcG9uc2VFeHBvcnRWYWx1ZXMgPSBjb25maWcucmVzcG9uc2VFeHBvcnRWYWx1ZXM7XG4gICAgdGhpcy5fcmV0cnkuaW50ZXJuYWxWYWx1ZSA9IGNvbmZpZy5yZXRyeTtcbiAgICB0aGlzLl9zY2hlbWFWYWxpZGF0aW9uRW5hYmxlZCA9IGNvbmZpZy5zY2hlbWFWYWxpZGF0aW9uRW5hYmxlZDtcbiAgICB0aGlzLl90YWdzID0gY29uZmlnLnRhZ3M7XG4gICAgdGhpcy5fdHlwZSA9IGNvbmZpZy50eXBlO1xuICAgIHRoaXMuX3VwZGF0ZUhlYWRlcnMgPSBjb25maWcudXBkYXRlSGVhZGVycztcbiAgICB0aGlzLl91cGRhdGVRdWVyeVBhcmFtZXRlcnMgPSBjb25maWcudXBkYXRlUXVlcnlQYXJhbWV0ZXJzO1xuICAgIHRoaXMuX2lkZW50aXR5LmludGVybmFsVmFsdWUgPSBjb25maWcuaWRlbnRpdHk7XG4gICAgdGhpcy5fdGltZW91dHMuaW50ZXJuYWxWYWx1ZSA9IGNvbmZpZy50aW1lb3V0cztcbiAgfVxuXG4gIC8vID09PT09PT09PT1cbiAgLy8gQVRUUklCVVRFU1xuICAvLyA9PT09PT09PT09XG5cbiAgLy8gYm9keSAtIGNvbXB1dGVkOiB0cnVlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX2JvZHk/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9OyBcbiAgcHVibGljIGdldCBib2R5KCkge1xuICAgIHJldHVybiB0aGlzLmdldEFueU1hcEF0dHJpYnV0ZSgnYm9keScpO1xuICB9XG4gIHB1YmxpYyBzZXQgYm9keSh2YWx1ZTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSkge1xuICAgIHRoaXMuX2JvZHkgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRCb2R5KCkge1xuICAgIHRoaXMuX2JvZHkgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IGJvZHlJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fYm9keTtcbiAgfVxuXG4gIC8vIGNyZWF0ZV9oZWFkZXJzIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX2NyZWF0ZUhlYWRlcnM/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9OyBcbiAgcHVibGljIGdldCBjcmVhdGVIZWFkZXJzKCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ01hcEF0dHJpYnV0ZSgnY3JlYXRlX2hlYWRlcnMnKTtcbiAgfVxuICBwdWJsaWMgc2V0IGNyZWF0ZUhlYWRlcnModmFsdWU6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0pIHtcbiAgICB0aGlzLl9jcmVhdGVIZWFkZXJzID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0Q3JlYXRlSGVhZGVycygpIHtcbiAgICB0aGlzLl9jcmVhdGVIZWFkZXJzID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBjcmVhdGVIZWFkZXJzSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZUhlYWRlcnM7XG4gIH1cblxuICAvLyBjcmVhdGVfcXVlcnlfcGFyYW1ldGVycyAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9jcmVhdGVRdWVyeVBhcmFtZXRlcnM/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZ1tdIH0gfCBjZGt0Zi5JUmVzb2x2YWJsZTsgXG4gIHB1YmxpYyBnZXQgY3JlYXRlUXVlcnlQYXJhbWV0ZXJzKCkge1xuICAgIHJldHVybiB0aGlzLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUoJ2NyZWF0ZV9xdWVyeV9wYXJhbWV0ZXJzJyk7XG4gIH1cbiAgcHVibGljIHNldCBjcmVhdGVRdWVyeVBhcmFtZXRlcnModmFsdWU6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nW10gfSB8IGNka3RmLklSZXNvbHZhYmxlKSB7XG4gICAgdGhpcy5fY3JlYXRlUXVlcnlQYXJhbWV0ZXJzID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0Q3JlYXRlUXVlcnlQYXJhbWV0ZXJzKCkge1xuICAgIHRoaXMuX2NyZWF0ZVF1ZXJ5UGFyYW1ldGVycyA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgY3JlYXRlUXVlcnlQYXJhbWV0ZXJzSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZVF1ZXJ5UGFyYW1ldGVycztcbiAgfVxuXG4gIC8vIGRlbGV0ZV9oZWFkZXJzIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX2RlbGV0ZUhlYWRlcnM/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9OyBcbiAgcHVibGljIGdldCBkZWxldGVIZWFkZXJzKCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ01hcEF0dHJpYnV0ZSgnZGVsZXRlX2hlYWRlcnMnKTtcbiAgfVxuICBwdWJsaWMgc2V0IGRlbGV0ZUhlYWRlcnModmFsdWU6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0pIHtcbiAgICB0aGlzLl9kZWxldGVIZWFkZXJzID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0RGVsZXRlSGVhZGVycygpIHtcbiAgICB0aGlzLl9kZWxldGVIZWFkZXJzID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBkZWxldGVIZWFkZXJzSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RlbGV0ZUhlYWRlcnM7XG4gIH1cblxuICAvLyBkZWxldGVfcXVlcnlfcGFyYW1ldGVycyAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9kZWxldGVRdWVyeVBhcmFtZXRlcnM/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZ1tdIH0gfCBjZGt0Zi5JUmVzb2x2YWJsZTsgXG4gIHB1YmxpYyBnZXQgZGVsZXRlUXVlcnlQYXJhbWV0ZXJzKCkge1xuICAgIHJldHVybiB0aGlzLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUoJ2RlbGV0ZV9xdWVyeV9wYXJhbWV0ZXJzJyk7XG4gIH1cbiAgcHVibGljIHNldCBkZWxldGVRdWVyeVBhcmFtZXRlcnModmFsdWU6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nW10gfSB8IGNka3RmLklSZXNvbHZhYmxlKSB7XG4gICAgdGhpcy5fZGVsZXRlUXVlcnlQYXJhbWV0ZXJzID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0RGVsZXRlUXVlcnlQYXJhbWV0ZXJzKCkge1xuICAgIHRoaXMuX2RlbGV0ZVF1ZXJ5UGFyYW1ldGVycyA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgZGVsZXRlUXVlcnlQYXJhbWV0ZXJzSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RlbGV0ZVF1ZXJ5UGFyYW1ldGVycztcbiAgfVxuXG4gIC8vIGlkIC0gY29tcHV0ZWQ6IHRydWUsIG9wdGlvbmFsOiBmYWxzZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHB1YmxpYyBnZXQgaWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RyaW5nQXR0cmlidXRlKCdpZCcpO1xuICB9XG5cbiAgLy8gaWdub3JlX2Nhc2luZyAtIGNvbXB1dGVkOiB0cnVlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX2lnbm9yZUNhc2luZz86IGJvb2xlYW4gfCBjZGt0Zi5JUmVzb2x2YWJsZTsgXG4gIHB1YmxpYyBnZXQgaWdub3JlQ2FzaW5nKCkge1xuICAgIHJldHVybiB0aGlzLmdldEJvb2xlYW5BdHRyaWJ1dGUoJ2lnbm9yZV9jYXNpbmcnKTtcbiAgfVxuICBwdWJsaWMgc2V0IGlnbm9yZUNhc2luZyh2YWx1ZTogYm9vbGVhbiB8IGNka3RmLklSZXNvbHZhYmxlKSB7XG4gICAgdGhpcy5faWdub3JlQ2FzaW5nID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0SWdub3JlQ2FzaW5nKCkge1xuICAgIHRoaXMuX2lnbm9yZUNhc2luZyA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgaWdub3JlQ2FzaW5nSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lnbm9yZUNhc2luZztcbiAgfVxuXG4gIC8vIGlnbm9yZV9taXNzaW5nX3Byb3BlcnR5IC0gY29tcHV0ZWQ6IHRydWUsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfaWdub3JlTWlzc2luZ1Byb3BlcnR5PzogYm9vbGVhbiB8IGNka3RmLklSZXNvbHZhYmxlOyBcbiAgcHVibGljIGdldCBpZ25vcmVNaXNzaW5nUHJvcGVydHkoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Qm9vbGVhbkF0dHJpYnV0ZSgnaWdub3JlX21pc3NpbmdfcHJvcGVydHknKTtcbiAgfVxuICBwdWJsaWMgc2V0IGlnbm9yZU1pc3NpbmdQcm9wZXJ0eSh2YWx1ZTogYm9vbGVhbiB8IGNka3RmLklSZXNvbHZhYmxlKSB7XG4gICAgdGhpcy5faWdub3JlTWlzc2luZ1Byb3BlcnR5ID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0SWdub3JlTWlzc2luZ1Byb3BlcnR5KCkge1xuICAgIHRoaXMuX2lnbm9yZU1pc3NpbmdQcm9wZXJ0eSA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgaWdub3JlTWlzc2luZ1Byb3BlcnR5SW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lnbm9yZU1pc3NpbmdQcm9wZXJ0eTtcbiAgfVxuXG4gIC8vIGxvY2F0aW9uIC0gY29tcHV0ZWQ6IHRydWUsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfbG9jYXRpb24/OiBzdHJpbmc7IFxuICBwdWJsaWMgZ2V0IGxvY2F0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ0F0dHJpYnV0ZSgnbG9jYXRpb24nKTtcbiAgfVxuICBwdWJsaWMgc2V0IGxvY2F0aW9uKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9sb2NhdGlvbiA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldExvY2F0aW9uKCkge1xuICAgIHRoaXMuX2xvY2F0aW9uID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBsb2NhdGlvbklucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9sb2NhdGlvbjtcbiAgfVxuXG4gIC8vIGxvY2tzIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX2xvY2tzPzogc3RyaW5nW107IFxuICBwdWJsaWMgZ2V0IGxvY2tzKCkge1xuICAgIHJldHVybiB0aGlzLmdldExpc3RBdHRyaWJ1dGUoJ2xvY2tzJyk7XG4gIH1cbiAgcHVibGljIHNldCBsb2Nrcyh2YWx1ZTogc3RyaW5nW10pIHtcbiAgICB0aGlzLl9sb2NrcyA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldExvY2tzKCkge1xuICAgIHRoaXMuX2xvY2tzID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBsb2Nrc0lucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9sb2NrcztcbiAgfVxuXG4gIC8vIG5hbWUgLSBjb21wdXRlZDogdHJ1ZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9uYW1lPzogc3RyaW5nOyBcbiAgcHVibGljIGdldCBuYW1lKCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ0F0dHJpYnV0ZSgnbmFtZScpO1xuICB9XG4gIHB1YmxpYyBzZXQgbmFtZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fbmFtZSA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldE5hbWUoKSB7XG4gICAgdGhpcy5fbmFtZSA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgbmFtZUlucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9uYW1lO1xuICB9XG5cbiAgLy8gb3V0cHV0IC0gY29tcHV0ZWQ6IHRydWUsIG9wdGlvbmFsOiBmYWxzZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX291dHB1dCA9IG5ldyBjZGt0Zi5BbnlNYXAodGhpcywgXCJvdXRwdXRcIik7XG4gIHB1YmxpYyBnZXQgb3V0cHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9vdXRwdXQ7XG4gIH1cblxuICAvLyBwYXJlbnRfaWQgLSBjb21wdXRlZDogdHJ1ZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9wYXJlbnRJZD86IHN0cmluZzsgXG4gIHB1YmxpYyBnZXQgcGFyZW50SWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RyaW5nQXR0cmlidXRlKCdwYXJlbnRfaWQnKTtcbiAgfVxuICBwdWJsaWMgc2V0IHBhcmVudElkKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9wYXJlbnRJZCA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldFBhcmVudElkKCkge1xuICAgIHRoaXMuX3BhcmVudElkID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBwYXJlbnRJZElucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9wYXJlbnRJZDtcbiAgfVxuXG4gIC8vIHJlYWRfaGVhZGVycyAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9yZWFkSGVhZGVycz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07IFxuICBwdWJsaWMgZ2V0IHJlYWRIZWFkZXJzKCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ01hcEF0dHJpYnV0ZSgncmVhZF9oZWFkZXJzJyk7XG4gIH1cbiAgcHVibGljIHNldCByZWFkSGVhZGVycyh2YWx1ZTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSkge1xuICAgIHRoaXMuX3JlYWRIZWFkZXJzID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0UmVhZEhlYWRlcnMoKSB7XG4gICAgdGhpcy5fcmVhZEhlYWRlcnMgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IHJlYWRIZWFkZXJzSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRIZWFkZXJzO1xuICB9XG5cbiAgLy8gcmVhZF9xdWVyeV9wYXJhbWV0ZXJzIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX3JlYWRRdWVyeVBhcmFtZXRlcnM/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZ1tdIH0gfCBjZGt0Zi5JUmVzb2x2YWJsZTsgXG4gIHB1YmxpYyBnZXQgcmVhZFF1ZXJ5UGFyYW1ldGVycygpIHtcbiAgICByZXR1cm4gdGhpcy5pbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKCdyZWFkX3F1ZXJ5X3BhcmFtZXRlcnMnKTtcbiAgfVxuICBwdWJsaWMgc2V0IHJlYWRRdWVyeVBhcmFtZXRlcnModmFsdWU6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nW10gfSB8IGNka3RmLklSZXNvbHZhYmxlKSB7XG4gICAgdGhpcy5fcmVhZFF1ZXJ5UGFyYW1ldGVycyA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldFJlYWRRdWVyeVBhcmFtZXRlcnMoKSB7XG4gICAgdGhpcy5fcmVhZFF1ZXJ5UGFyYW1ldGVycyA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgcmVhZFF1ZXJ5UGFyYW1ldGVyc0lucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9yZWFkUXVlcnlQYXJhbWV0ZXJzO1xuICB9XG5cbiAgLy8gcmVwbGFjZV90cmlnZ2Vyc19leHRlcm5hbF92YWx1ZXMgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfcmVwbGFjZVRyaWdnZXJzRXh0ZXJuYWxWYWx1ZXM/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9OyBcbiAgcHVibGljIGdldCByZXBsYWNlVHJpZ2dlcnNFeHRlcm5hbFZhbHVlcygpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRBbnlNYXBBdHRyaWJ1dGUoJ3JlcGxhY2VfdHJpZ2dlcnNfZXh0ZXJuYWxfdmFsdWVzJyk7XG4gIH1cbiAgcHVibGljIHNldCByZXBsYWNlVHJpZ2dlcnNFeHRlcm5hbFZhbHVlcyh2YWx1ZTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSkge1xuICAgIHRoaXMuX3JlcGxhY2VUcmlnZ2Vyc0V4dGVybmFsVmFsdWVzID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0UmVwbGFjZVRyaWdnZXJzRXh0ZXJuYWxWYWx1ZXMoKSB7XG4gICAgdGhpcy5fcmVwbGFjZVRyaWdnZXJzRXh0ZXJuYWxWYWx1ZXMgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IHJlcGxhY2VUcmlnZ2Vyc0V4dGVybmFsVmFsdWVzSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3JlcGxhY2VUcmlnZ2Vyc0V4dGVybmFsVmFsdWVzO1xuICB9XG5cbiAgLy8gcmVwbGFjZV90cmlnZ2Vyc19yZWZzIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX3JlcGxhY2VUcmlnZ2Vyc1JlZnM/OiBzdHJpbmdbXTsgXG4gIHB1YmxpYyBnZXQgcmVwbGFjZVRyaWdnZXJzUmVmcygpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMaXN0QXR0cmlidXRlKCdyZXBsYWNlX3RyaWdnZXJzX3JlZnMnKTtcbiAgfVxuICBwdWJsaWMgc2V0IHJlcGxhY2VUcmlnZ2Vyc1JlZnModmFsdWU6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5fcmVwbGFjZVRyaWdnZXJzUmVmcyA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldFJlcGxhY2VUcmlnZ2Vyc1JlZnMoKSB7XG4gICAgdGhpcy5fcmVwbGFjZVRyaWdnZXJzUmVmcyA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgcmVwbGFjZVRyaWdnZXJzUmVmc0lucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9yZXBsYWNlVHJpZ2dlcnNSZWZzO1xuICB9XG5cbiAgLy8gcmVzcG9uc2VfZXhwb3J0X3ZhbHVlcyAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9yZXNwb25zZUV4cG9ydFZhbHVlcz86IHsgW2tleTogc3RyaW5nXTogYW55IH07IFxuICBwdWJsaWMgZ2V0IHJlc3BvbnNlRXhwb3J0VmFsdWVzKCkge1xuICAgIHJldHVybiB0aGlzLmdldEFueU1hcEF0dHJpYnV0ZSgncmVzcG9uc2VfZXhwb3J0X3ZhbHVlcycpO1xuICB9XG4gIHB1YmxpYyBzZXQgcmVzcG9uc2VFeHBvcnRWYWx1ZXModmFsdWU6IHsgW2tleTogc3RyaW5nXTogYW55IH0pIHtcbiAgICB0aGlzLl9yZXNwb25zZUV4cG9ydFZhbHVlcyA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldFJlc3BvbnNlRXhwb3J0VmFsdWVzKCkge1xuICAgIHRoaXMuX3Jlc3BvbnNlRXhwb3J0VmFsdWVzID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCByZXNwb25zZUV4cG9ydFZhbHVlc0lucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9yZXNwb25zZUV4cG9ydFZhbHVlcztcbiAgfVxuXG4gIC8vIHJldHJ5IC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX3JldHJ5ID0gbmV3IFJlc291cmNlUmV0cnlPdXRwdXRSZWZlcmVuY2UodGhpcywgXCJyZXRyeVwiKTtcbiAgcHVibGljIGdldCByZXRyeSgpIHtcbiAgICByZXR1cm4gdGhpcy5fcmV0cnk7XG4gIH1cbiAgcHVibGljIHB1dFJldHJ5KHZhbHVlOiBSZXNvdXJjZVJldHJ5KSB7XG4gICAgdGhpcy5fcmV0cnkuaW50ZXJuYWxWYWx1ZSA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldFJldHJ5KCkge1xuICAgIHRoaXMuX3JldHJ5LmludGVybmFsVmFsdWUgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IHJldHJ5SW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3JldHJ5LmludGVybmFsVmFsdWU7XG4gIH1cblxuICAvLyBzY2hlbWFfdmFsaWRhdGlvbl9lbmFibGVkIC0gY29tcHV0ZWQ6IHRydWUsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfc2NoZW1hVmFsaWRhdGlvbkVuYWJsZWQ/OiBib29sZWFuIHwgY2RrdGYuSVJlc29sdmFibGU7IFxuICBwdWJsaWMgZ2V0IHNjaGVtYVZhbGlkYXRpb25FbmFibGVkKCkge1xuICAgIHJldHVybiB0aGlzLmdldEJvb2xlYW5BdHRyaWJ1dGUoJ3NjaGVtYV92YWxpZGF0aW9uX2VuYWJsZWQnKTtcbiAgfVxuICBwdWJsaWMgc2V0IHNjaGVtYVZhbGlkYXRpb25FbmFibGVkKHZhbHVlOiBib29sZWFuIHwgY2RrdGYuSVJlc29sdmFibGUpIHtcbiAgICB0aGlzLl9zY2hlbWFWYWxpZGF0aW9uRW5hYmxlZCA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldFNjaGVtYVZhbGlkYXRpb25FbmFibGVkKCkge1xuICAgIHRoaXMuX3NjaGVtYVZhbGlkYXRpb25FbmFibGVkID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBzY2hlbWFWYWxpZGF0aW9uRW5hYmxlZElucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9zY2hlbWFWYWxpZGF0aW9uRW5hYmxlZDtcbiAgfVxuXG4gIC8vIHRhZ3MgLSBjb21wdXRlZDogdHJ1ZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF90YWdzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTsgXG4gIHB1YmxpYyBnZXQgdGFncygpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmdNYXBBdHRyaWJ1dGUoJ3RhZ3MnKTtcbiAgfVxuICBwdWJsaWMgc2V0IHRhZ3ModmFsdWU6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0pIHtcbiAgICB0aGlzLl90YWdzID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0VGFncygpIHtcbiAgICB0aGlzLl90YWdzID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCB0YWdzSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RhZ3M7XG4gIH1cblxuICAvLyB0eXBlIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogZmFsc2UsIHJlcXVpcmVkOiB0cnVlXG4gIHByaXZhdGUgX3R5cGU/OiBzdHJpbmc7IFxuICBwdWJsaWMgZ2V0IHR5cGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RyaW5nQXR0cmlidXRlKCd0eXBlJyk7XG4gIH1cbiAgcHVibGljIHNldCB0eXBlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl90eXBlID0gdmFsdWU7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IHR5cGVJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fdHlwZTtcbiAgfVxuXG4gIC8vIHVwZGF0ZV9oZWFkZXJzIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX3VwZGF0ZUhlYWRlcnM/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9OyBcbiAgcHVibGljIGdldCB1cGRhdGVIZWFkZXJzKCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ01hcEF0dHJpYnV0ZSgndXBkYXRlX2hlYWRlcnMnKTtcbiAgfVxuICBwdWJsaWMgc2V0IHVwZGF0ZUhlYWRlcnModmFsdWU6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0pIHtcbiAgICB0aGlzLl91cGRhdGVIZWFkZXJzID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0VXBkYXRlSGVhZGVycygpIHtcbiAgICB0aGlzLl91cGRhdGVIZWFkZXJzID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCB1cGRhdGVIZWFkZXJzSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3VwZGF0ZUhlYWRlcnM7XG4gIH1cblxuICAvLyB1cGRhdGVfcXVlcnlfcGFyYW1ldGVycyAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF91cGRhdGVRdWVyeVBhcmFtZXRlcnM/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZ1tdIH0gfCBjZGt0Zi5JUmVzb2x2YWJsZTsgXG4gIHB1YmxpYyBnZXQgdXBkYXRlUXVlcnlQYXJhbWV0ZXJzKCkge1xuICAgIHJldHVybiB0aGlzLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUoJ3VwZGF0ZV9xdWVyeV9wYXJhbWV0ZXJzJyk7XG4gIH1cbiAgcHVibGljIHNldCB1cGRhdGVRdWVyeVBhcmFtZXRlcnModmFsdWU6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nW10gfSB8IGNka3RmLklSZXNvbHZhYmxlKSB7XG4gICAgdGhpcy5fdXBkYXRlUXVlcnlQYXJhbWV0ZXJzID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0VXBkYXRlUXVlcnlQYXJhbWV0ZXJzKCkge1xuICAgIHRoaXMuX3VwZGF0ZVF1ZXJ5UGFyYW1ldGVycyA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgdXBkYXRlUXVlcnlQYXJhbWV0ZXJzSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3VwZGF0ZVF1ZXJ5UGFyYW1ldGVycztcbiAgfVxuXG4gIC8vIGlkZW50aXR5IC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX2lkZW50aXR5ID0gbmV3IFJlc291cmNlSWRlbnRpdHlMaXN0KHRoaXMsIFwiaWRlbnRpdHlcIiwgZmFsc2UpO1xuICBwdWJsaWMgZ2V0IGlkZW50aXR5KCkge1xuICAgIHJldHVybiB0aGlzLl9pZGVudGl0eTtcbiAgfVxuICBwdWJsaWMgcHV0SWRlbnRpdHkodmFsdWU6IFJlc291cmNlSWRlbnRpdHlbXSB8IGNka3RmLklSZXNvbHZhYmxlKSB7XG4gICAgdGhpcy5faWRlbnRpdHkuaW50ZXJuYWxWYWx1ZSA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldElkZW50aXR5KCkge1xuICAgIHRoaXMuX2lkZW50aXR5LmludGVybmFsVmFsdWUgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IGlkZW50aXR5SW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lkZW50aXR5LmludGVybmFsVmFsdWU7XG4gIH1cblxuICAvLyB0aW1lb3V0cyAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF90aW1lb3V0cyA9IG5ldyBSZXNvdXJjZVRpbWVvdXRzT3V0cHV0UmVmZXJlbmNlKHRoaXMsIFwidGltZW91dHNcIik7XG4gIHB1YmxpYyBnZXQgdGltZW91dHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RpbWVvdXRzO1xuICB9XG4gIHB1YmxpYyBwdXRUaW1lb3V0cyh2YWx1ZTogUmVzb3VyY2VUaW1lb3V0cykge1xuICAgIHRoaXMuX3RpbWVvdXRzLmludGVybmFsVmFsdWUgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRUaW1lb3V0cygpIHtcbiAgICB0aGlzLl90aW1lb3V0cy5pbnRlcm5hbFZhbHVlID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCB0aW1lb3V0c0lucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl90aW1lb3V0cy5pbnRlcm5hbFZhbHVlO1xuICB9XG5cbiAgLy8gPT09PT09PT09XG4gIC8vIFNZTlRIRVNJU1xuICAvLyA9PT09PT09PT1cblxuICBwcm90ZWN0ZWQgc3ludGhlc2l6ZUF0dHJpYnV0ZXMoKTogeyBbbmFtZTogc3RyaW5nXTogYW55IH0ge1xuICAgIHJldHVybiB7XG4gICAgICBib2R5OiBjZGt0Zi5oYXNoTWFwcGVyKGNka3RmLmFueVRvVGVycmFmb3JtKSh0aGlzLl9ib2R5KSxcbiAgICAgIGNyZWF0ZV9oZWFkZXJzOiBjZGt0Zi5oYXNoTWFwcGVyKGNka3RmLnN0cmluZ1RvVGVycmFmb3JtKSh0aGlzLl9jcmVhdGVIZWFkZXJzKSxcbiAgICAgIGNyZWF0ZV9xdWVyeV9wYXJhbWV0ZXJzOiBjZGt0Zi5oYXNoTWFwcGVyKGNka3RmLmxpc3RNYXBwZXIoY2RrdGYuc3RyaW5nVG9UZXJyYWZvcm0sIGZhbHNlKSkodGhpcy5fY3JlYXRlUXVlcnlQYXJhbWV0ZXJzKSxcbiAgICAgIGRlbGV0ZV9oZWFkZXJzOiBjZGt0Zi5oYXNoTWFwcGVyKGNka3RmLnN0cmluZ1RvVGVycmFmb3JtKSh0aGlzLl9kZWxldGVIZWFkZXJzKSxcbiAgICAgIGRlbGV0ZV9xdWVyeV9wYXJhbWV0ZXJzOiBjZGt0Zi5oYXNoTWFwcGVyKGNka3RmLmxpc3RNYXBwZXIoY2RrdGYuc3RyaW5nVG9UZXJyYWZvcm0sIGZhbHNlKSkodGhpcy5fZGVsZXRlUXVlcnlQYXJhbWV0ZXJzKSxcbiAgICAgIGlnbm9yZV9jYXNpbmc6IGNka3RmLmJvb2xlYW5Ub1RlcnJhZm9ybSh0aGlzLl9pZ25vcmVDYXNpbmcpLFxuICAgICAgaWdub3JlX21pc3NpbmdfcHJvcGVydHk6IGNka3RmLmJvb2xlYW5Ub1RlcnJhZm9ybSh0aGlzLl9pZ25vcmVNaXNzaW5nUHJvcGVydHkpLFxuICAgICAgbG9jYXRpb246IGNka3RmLnN0cmluZ1RvVGVycmFmb3JtKHRoaXMuX2xvY2F0aW9uKSxcbiAgICAgIGxvY2tzOiBjZGt0Zi5saXN0TWFwcGVyKGNka3RmLnN0cmluZ1RvVGVycmFmb3JtLCBmYWxzZSkodGhpcy5fbG9ja3MpLFxuICAgICAgbmFtZTogY2RrdGYuc3RyaW5nVG9UZXJyYWZvcm0odGhpcy5fbmFtZSksXG4gICAgICBwYXJlbnRfaWQ6IGNka3RmLnN0cmluZ1RvVGVycmFmb3JtKHRoaXMuX3BhcmVudElkKSxcbiAgICAgIHJlYWRfaGVhZGVyczogY2RrdGYuaGFzaE1hcHBlcihjZGt0Zi5zdHJpbmdUb1RlcnJhZm9ybSkodGhpcy5fcmVhZEhlYWRlcnMpLFxuICAgICAgcmVhZF9xdWVyeV9wYXJhbWV0ZXJzOiBjZGt0Zi5oYXNoTWFwcGVyKGNka3RmLmxpc3RNYXBwZXIoY2RrdGYuc3RyaW5nVG9UZXJyYWZvcm0sIGZhbHNlKSkodGhpcy5fcmVhZFF1ZXJ5UGFyYW1ldGVycyksXG4gICAgICByZXBsYWNlX3RyaWdnZXJzX2V4dGVybmFsX3ZhbHVlczogY2RrdGYuaGFzaE1hcHBlcihjZGt0Zi5hbnlUb1RlcnJhZm9ybSkodGhpcy5fcmVwbGFjZVRyaWdnZXJzRXh0ZXJuYWxWYWx1ZXMpLFxuICAgICAgcmVwbGFjZV90cmlnZ2Vyc19yZWZzOiBjZGt0Zi5saXN0TWFwcGVyKGNka3RmLnN0cmluZ1RvVGVycmFmb3JtLCBmYWxzZSkodGhpcy5fcmVwbGFjZVRyaWdnZXJzUmVmcyksXG4gICAgICByZXNwb25zZV9leHBvcnRfdmFsdWVzOiBjZGt0Zi5oYXNoTWFwcGVyKGNka3RmLmFueVRvVGVycmFmb3JtKSh0aGlzLl9yZXNwb25zZUV4cG9ydFZhbHVlcyksXG4gICAgICByZXRyeTogcmVzb3VyY2VSZXRyeVRvVGVycmFmb3JtKHRoaXMuX3JldHJ5LmludGVybmFsVmFsdWUpLFxuICAgICAgc2NoZW1hX3ZhbGlkYXRpb25fZW5hYmxlZDogY2RrdGYuYm9vbGVhblRvVGVycmFmb3JtKHRoaXMuX3NjaGVtYVZhbGlkYXRpb25FbmFibGVkKSxcbiAgICAgIHRhZ3M6IGNka3RmLmhhc2hNYXBwZXIoY2RrdGYuc3RyaW5nVG9UZXJyYWZvcm0pKHRoaXMuX3RhZ3MpLFxuICAgICAgdHlwZTogY2RrdGYuc3RyaW5nVG9UZXJyYWZvcm0odGhpcy5fdHlwZSksXG4gICAgICB1cGRhdGVfaGVhZGVyczogY2RrdGYuaGFzaE1hcHBlcihjZGt0Zi5zdHJpbmdUb1RlcnJhZm9ybSkodGhpcy5fdXBkYXRlSGVhZGVycyksXG4gICAgICB1cGRhdGVfcXVlcnlfcGFyYW1ldGVyczogY2RrdGYuaGFzaE1hcHBlcihjZGt0Zi5saXN0TWFwcGVyKGNka3RmLnN0cmluZ1RvVGVycmFmb3JtLCBmYWxzZSkpKHRoaXMuX3VwZGF0ZVF1ZXJ5UGFyYW1ldGVycyksXG4gICAgICBpZGVudGl0eTogY2RrdGYubGlzdE1hcHBlcihyZXNvdXJjZUlkZW50aXR5VG9UZXJyYWZvcm0sIHRydWUpKHRoaXMuX2lkZW50aXR5LmludGVybmFsVmFsdWUpLFxuICAgICAgdGltZW91dHM6IHJlc291cmNlVGltZW91dHNUb1RlcnJhZm9ybSh0aGlzLl90aW1lb3V0cy5pbnRlcm5hbFZhbHVlKSxcbiAgICB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIHN5bnRoZXNpemVIY2xBdHRyaWJ1dGVzKCk6IHsgW25hbWU6IHN0cmluZ106IGFueSB9IHtcbiAgICBjb25zdCBhdHRycyA9IHtcbiAgICAgIGJvZHk6IHtcbiAgICAgICAgdmFsdWU6IGNka3RmLmhhc2hNYXBwZXJIY2woY2RrdGYuYW55VG9IY2xUZXJyYWZvcm0pKHRoaXMuX2JvZHkpLFxuICAgICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgICAgdHlwZTogXCJtYXBcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJhbnlNYXBcIixcbiAgICAgIH0sXG4gICAgICBjcmVhdGVfaGVhZGVyczoge1xuICAgICAgICB2YWx1ZTogY2RrdGYuaGFzaE1hcHBlckhjbChjZGt0Zi5zdHJpbmdUb0hjbFRlcnJhZm9ybSkodGhpcy5fY3JlYXRlSGVhZGVycyksXG4gICAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgICB0eXBlOiBcIm1hcFwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcInN0cmluZ01hcFwiLFxuICAgICAgfSxcbiAgICAgIGNyZWF0ZV9xdWVyeV9wYXJhbWV0ZXJzOiB7XG4gICAgICAgIHZhbHVlOiBjZGt0Zi5oYXNoTWFwcGVySGNsKGNka3RmLmxpc3RNYXBwZXJIY2woY2RrdGYuc3RyaW5nVG9IY2xUZXJyYWZvcm0sIGZhbHNlKSkodGhpcy5fY3JlYXRlUXVlcnlQYXJhbWV0ZXJzKSxcbiAgICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICAgIHR5cGU6IFwibWFwXCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nTGlzdE1hcFwiLFxuICAgICAgfSxcbiAgICAgIGRlbGV0ZV9oZWFkZXJzOiB7XG4gICAgICAgIHZhbHVlOiBjZGt0Zi5oYXNoTWFwcGVySGNsKGNka3RmLnN0cmluZ1RvSGNsVGVycmFmb3JtKSh0aGlzLl9kZWxldGVIZWFkZXJzKSxcbiAgICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICAgIHR5cGU6IFwibWFwXCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nTWFwXCIsXG4gICAgICB9LFxuICAgICAgZGVsZXRlX3F1ZXJ5X3BhcmFtZXRlcnM6IHtcbiAgICAgICAgdmFsdWU6IGNka3RmLmhhc2hNYXBwZXJIY2woY2RrdGYubGlzdE1hcHBlckhjbChjZGt0Zi5zdHJpbmdUb0hjbFRlcnJhZm9ybSwgZmFsc2UpKSh0aGlzLl9kZWxldGVRdWVyeVBhcmFtZXRlcnMpLFxuICAgICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgICAgdHlwZTogXCJtYXBcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJzdHJpbmdMaXN0TWFwXCIsXG4gICAgICB9LFxuICAgICAgaWdub3JlX2Nhc2luZzoge1xuICAgICAgICB2YWx1ZTogY2RrdGYuYm9vbGVhblRvSGNsVGVycmFmb3JtKHRoaXMuX2lnbm9yZUNhc2luZyksXG4gICAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcImJvb2xlYW5cIixcbiAgICAgIH0sXG4gICAgICBpZ25vcmVfbWlzc2luZ19wcm9wZXJ0eToge1xuICAgICAgICB2YWx1ZTogY2RrdGYuYm9vbGVhblRvSGNsVGVycmFmb3JtKHRoaXMuX2lnbm9yZU1pc3NpbmdQcm9wZXJ0eSksXG4gICAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcImJvb2xlYW5cIixcbiAgICAgIH0sXG4gICAgICBsb2NhdGlvbjoge1xuICAgICAgICB2YWx1ZTogY2RrdGYuc3RyaW5nVG9IY2xUZXJyYWZvcm0odGhpcy5fbG9jYXRpb24pLFxuICAgICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJzdHJpbmdcIixcbiAgICAgIH0sXG4gICAgICBsb2Nrczoge1xuICAgICAgICB2YWx1ZTogY2RrdGYubGlzdE1hcHBlckhjbChjZGt0Zi5zdHJpbmdUb0hjbFRlcnJhZm9ybSwgZmFsc2UpKHRoaXMuX2xvY2tzKSxcbiAgICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICAgIHR5cGU6IFwibGlzdFwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcInN0cmluZ0xpc3RcIixcbiAgICAgIH0sXG4gICAgICBuYW1lOiB7XG4gICAgICAgIHZhbHVlOiBjZGt0Zi5zdHJpbmdUb0hjbFRlcnJhZm9ybSh0aGlzLl9uYW1lKSxcbiAgICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgICB9LFxuICAgICAgcGFyZW50X2lkOiB7XG4gICAgICAgIHZhbHVlOiBjZGt0Zi5zdHJpbmdUb0hjbFRlcnJhZm9ybSh0aGlzLl9wYXJlbnRJZCksXG4gICAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcInN0cmluZ1wiLFxuICAgICAgfSxcbiAgICAgIHJlYWRfaGVhZGVyczoge1xuICAgICAgICB2YWx1ZTogY2RrdGYuaGFzaE1hcHBlckhjbChjZGt0Zi5zdHJpbmdUb0hjbFRlcnJhZm9ybSkodGhpcy5fcmVhZEhlYWRlcnMpLFxuICAgICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgICAgdHlwZTogXCJtYXBcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJzdHJpbmdNYXBcIixcbiAgICAgIH0sXG4gICAgICByZWFkX3F1ZXJ5X3BhcmFtZXRlcnM6IHtcbiAgICAgICAgdmFsdWU6IGNka3RmLmhhc2hNYXBwZXJIY2woY2RrdGYubGlzdE1hcHBlckhjbChjZGt0Zi5zdHJpbmdUb0hjbFRlcnJhZm9ybSwgZmFsc2UpKSh0aGlzLl9yZWFkUXVlcnlQYXJhbWV0ZXJzKSxcbiAgICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICAgIHR5cGU6IFwibWFwXCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nTGlzdE1hcFwiLFxuICAgICAgfSxcbiAgICAgIHJlcGxhY2VfdHJpZ2dlcnNfZXh0ZXJuYWxfdmFsdWVzOiB7XG4gICAgICAgIHZhbHVlOiBjZGt0Zi5oYXNoTWFwcGVySGNsKGNka3RmLmFueVRvSGNsVGVycmFmb3JtKSh0aGlzLl9yZXBsYWNlVHJpZ2dlcnNFeHRlcm5hbFZhbHVlcyksXG4gICAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgICB0eXBlOiBcIm1hcFwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcImFueU1hcFwiLFxuICAgICAgfSxcbiAgICAgIHJlcGxhY2VfdHJpZ2dlcnNfcmVmczoge1xuICAgICAgICB2YWx1ZTogY2RrdGYubGlzdE1hcHBlckhjbChjZGt0Zi5zdHJpbmdUb0hjbFRlcnJhZm9ybSwgZmFsc2UpKHRoaXMuX3JlcGxhY2VUcmlnZ2Vyc1JlZnMpLFxuICAgICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgICAgdHlwZTogXCJsaXN0XCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nTGlzdFwiLFxuICAgICAgfSxcbiAgICAgIHJlc3BvbnNlX2V4cG9ydF92YWx1ZXM6IHtcbiAgICAgICAgdmFsdWU6IGNka3RmLmhhc2hNYXBwZXJIY2woY2RrdGYuYW55VG9IY2xUZXJyYWZvcm0pKHRoaXMuX3Jlc3BvbnNlRXhwb3J0VmFsdWVzKSxcbiAgICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICAgIHR5cGU6IFwibWFwXCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwiYW55TWFwXCIsXG4gICAgICB9LFxuICAgICAgcmV0cnk6IHtcbiAgICAgICAgdmFsdWU6IHJlc291cmNlUmV0cnlUb0hjbFRlcnJhZm9ybSh0aGlzLl9yZXRyeS5pbnRlcm5hbFZhbHVlKSxcbiAgICAgICAgaXNCbG9jazogdHJ1ZSxcbiAgICAgICAgdHlwZTogXCJzdHJ1Y3RcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJSZXNvdXJjZVJldHJ5XCIsXG4gICAgICB9LFxuICAgICAgc2NoZW1hX3ZhbGlkYXRpb25fZW5hYmxlZDoge1xuICAgICAgICB2YWx1ZTogY2RrdGYuYm9vbGVhblRvSGNsVGVycmFmb3JtKHRoaXMuX3NjaGVtYVZhbGlkYXRpb25FbmFibGVkKSxcbiAgICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwiYm9vbGVhblwiLFxuICAgICAgfSxcbiAgICAgIHRhZ3M6IHtcbiAgICAgICAgdmFsdWU6IGNka3RmLmhhc2hNYXBwZXJIY2woY2RrdGYuc3RyaW5nVG9IY2xUZXJyYWZvcm0pKHRoaXMuX3RhZ3MpLFxuICAgICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgICAgdHlwZTogXCJtYXBcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJzdHJpbmdNYXBcIixcbiAgICAgIH0sXG4gICAgICB0eXBlOiB7XG4gICAgICAgIHZhbHVlOiBjZGt0Zi5zdHJpbmdUb0hjbFRlcnJhZm9ybSh0aGlzLl90eXBlKSxcbiAgICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgICB9LFxuICAgICAgdXBkYXRlX2hlYWRlcnM6IHtcbiAgICAgICAgdmFsdWU6IGNka3RmLmhhc2hNYXBwZXJIY2woY2RrdGYuc3RyaW5nVG9IY2xUZXJyYWZvcm0pKHRoaXMuX3VwZGF0ZUhlYWRlcnMpLFxuICAgICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgICAgdHlwZTogXCJtYXBcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJzdHJpbmdNYXBcIixcbiAgICAgIH0sXG4gICAgICB1cGRhdGVfcXVlcnlfcGFyYW1ldGVyczoge1xuICAgICAgICB2YWx1ZTogY2RrdGYuaGFzaE1hcHBlckhjbChjZGt0Zi5saXN0TWFwcGVySGNsKGNka3RmLnN0cmluZ1RvSGNsVGVycmFmb3JtLCBmYWxzZSkpKHRoaXMuX3VwZGF0ZVF1ZXJ5UGFyYW1ldGVycyksXG4gICAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgICB0eXBlOiBcIm1hcFwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcInN0cmluZ0xpc3RNYXBcIixcbiAgICAgIH0sXG4gICAgICBpZGVudGl0eToge1xuICAgICAgICB2YWx1ZTogY2RrdGYubGlzdE1hcHBlckhjbChyZXNvdXJjZUlkZW50aXR5VG9IY2xUZXJyYWZvcm0sIHRydWUpKHRoaXMuX2lkZW50aXR5LmludGVybmFsVmFsdWUpLFxuICAgICAgICBpc0Jsb2NrOiB0cnVlLFxuICAgICAgICB0eXBlOiBcImxpc3RcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJSZXNvdXJjZUlkZW50aXR5TGlzdFwiLFxuICAgICAgfSxcbiAgICAgIHRpbWVvdXRzOiB7XG4gICAgICAgIHZhbHVlOiByZXNvdXJjZVRpbWVvdXRzVG9IY2xUZXJyYWZvcm0odGhpcy5fdGltZW91dHMuaW50ZXJuYWxWYWx1ZSksXG4gICAgICAgIGlzQmxvY2s6IHRydWUsXG4gICAgICAgIHR5cGU6IFwic3RydWN0XCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwiUmVzb3VyY2VUaW1lb3V0c1wiLFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgLy8gcmVtb3ZlIHVuZGVmaW5lZCBhdHRyaWJ1dGVzXG4gICAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhhdHRycykuZmlsdGVyKChbXywgdmFsdWVdKSA9PiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlLnZhbHVlICE9PSB1bmRlZmluZWQgKSlcbiAgfVxufVxuIl19
|