cdktn 0.25.0-pre.2 → 0.25.0-pre.21

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.
Files changed (86) hide show
  1. package/.jsii +927 -107
  2. package/lib/annotations.js +4 -4
  3. package/lib/app.js +54 -5
  4. package/lib/aspect.js +3 -4
  5. package/lib/asset-hash.d.ts +75 -0
  6. package/lib/asset-hash.js +129 -0
  7. package/lib/assets.d.ts +168 -0
  8. package/lib/assets.js +128 -0
  9. package/lib/backends/azurerm-backend.js +4 -6
  10. package/lib/backends/cloud-backend.js +10 -10
  11. package/lib/backends/consul-backend.js +4 -6
  12. package/lib/backends/cos-backend.js +4 -6
  13. package/lib/backends/gcs-backend.js +4 -6
  14. package/lib/backends/http-backend.js +4 -6
  15. package/lib/backends/local-backend.js +38 -7
  16. package/lib/backends/oss-backend.js +4 -6
  17. package/lib/backends/pg-backend.js +4 -6
  18. package/lib/backends/remote-backend.js +8 -10
  19. package/lib/backends/s3-backend.js +4 -6
  20. package/lib/backends/swift-backend.js +4 -6
  21. package/lib/complex-computed-list.js +114 -65
  22. package/lib/errors.d.ts +6 -0
  23. package/lib/errors.js +24 -3
  24. package/lib/functions/provider-function.js +2 -4
  25. package/lib/functions/terraform-functions.generated.js +2 -4
  26. package/lib/ignore-strategy.d.ts +82 -0
  27. package/lib/ignore-strategy.js +29 -0
  28. package/lib/importable-resource.js +3 -4
  29. package/lib/index.d.ts +3 -0
  30. package/lib/index.js +27 -2
  31. package/lib/manifest.js +56 -14
  32. package/lib/private/fs.d.ts +74 -2
  33. package/lib/private/fs.js +129 -17
  34. package/lib/private/unique.js +35 -2
  35. package/lib/resource.js +3 -4
  36. package/lib/synthesize/synthesizer.js +43 -4
  37. package/lib/terraform-asset.d.ts +33 -2
  38. package/lib/terraform-asset.js +118 -34
  39. package/lib/terraform-backend.js +3 -4
  40. package/lib/terraform-count.js +3 -4
  41. package/lib/terraform-data-resource.js +12 -10
  42. package/lib/terraform-data-source.js +10 -4
  43. package/lib/terraform-dynamic-block.js +5 -2
  44. package/lib/terraform-dynamic-expression.js +4 -1
  45. package/lib/terraform-element.js +34 -6
  46. package/lib/terraform-ephemeral-resource.js +10 -4
  47. package/lib/terraform-functions.js +2 -4
  48. package/lib/terraform-hcl-module.js +3 -4
  49. package/lib/terraform-iterator.js +11 -12
  50. package/lib/terraform-local.js +3 -4
  51. package/lib/terraform-module-asset.js +45 -5
  52. package/lib/terraform-module.js +8 -4
  53. package/lib/terraform-operators.js +2 -4
  54. package/lib/terraform-output.js +7 -4
  55. package/lib/terraform-provider.js +5 -4
  56. package/lib/terraform-provisioner.js +2 -4
  57. package/lib/terraform-remote-state.js +5 -5
  58. package/lib/terraform-resource-targets.js +3 -7
  59. package/lib/terraform-resource.js +16 -5
  60. package/lib/terraform-stack.js +38 -38
  61. package/lib/terraform-variable.js +25 -22
  62. package/lib/testing/index.js +42 -8
  63. package/lib/testing/matchers.js +39 -6
  64. package/lib/tfExpression.js +25 -8
  65. package/lib/tokens/lazy.js +11 -7
  66. package/lib/tokens/private/dependency.js +2 -2
  67. package/lib/tokens/private/encoding.js +6 -1
  68. package/lib/tokens/private/intrinsic.js +6 -1
  69. package/lib/tokens/private/resolve.js +2 -5
  70. package/lib/tokens/private/token-map.js +4 -6
  71. package/lib/tokens/private/uniqueid.js +35 -2
  72. package/lib/tokens/resolvable.js +4 -6
  73. package/lib/tokens/string-fragments.js +6 -10
  74. package/lib/tokens/token.js +15 -18
  75. package/lib/upgrade-id-aspect.js +37 -6
  76. package/lib/validations/target-versions.js +39 -2
  77. package/lib/validations/validate-binary-version.js +39 -2
  78. package/lib/validations/validate-function-version-support.js +2 -1
  79. package/lib/validations/validate-provider-function-target-support.js +2 -1
  80. package/lib/validations/validate-provider-presence.js +10 -9
  81. package/lib/validations/validate-terraform-version.js +3 -1
  82. package/package.json +5 -5
  83. package/scripts/pack.mjs +57 -15
  84. package/lib/tsconfig.tsbuildinfo +0 -1
  85. package/tsconfig.json +0 -40
  86. package/tsconfig.test.json +0 -12
@@ -1,16 +1,22 @@
1
1
  "use strict";
2
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1;
3
2
  Object.defineProperty(exports, "__esModule", { value: true });
4
3
  exports.AnyListMap = exports.BooleanListMap = exports.NumberListMap = exports.StringListMap = exports.AnyMapList = exports.BooleanMapList = exports.NumberMapList = exports.StringMapList = exports.MapList = exports.ComplexObject = exports.ComplexMap = exports.AnyListList = exports.BooleanListList = exports.NumberListList = exports.StringListList = exports.BooleanList = exports.ComplexList = exports.ComplexComputedList = exports.AnyMapMap = exports.BooleanMapMap = exports.NumberMapMap = exports.StringMapMap = exports.AnyMap = exports.BooleanMap = exports.NumberMap = exports.StringMap = void 0;
5
4
  const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
5
  // Copyright (c) HashiCorp, Inc
7
6
  // SPDX-License-Identifier: MPL-2.0
8
7
  const tokens_1 = require("./tokens");
9
- const _2 = require(".");
8
+ const _1 = require(".");
10
9
  const stack_trace_1 = require("./tokens/private/stack-trace");
11
10
  const errors_1 = require("./errors");
12
11
  // eslint-disable-next-line jsdoc/require-jsdoc
13
12
  class ComplexResolvable {
13
+ terraformResource;
14
+ terraformAttribute;
15
+ creationStack;
16
+ /**
17
+ * @internal
18
+ */
19
+ _fqn;
14
20
  constructor(terraformResource, terraformAttribute) {
15
21
  this.terraformResource = terraformResource;
16
22
  this.terraformAttribute = terraformAttribute;
@@ -31,6 +37,8 @@ class ComplexResolvable {
31
37
  }
32
38
  // eslint-disable-next-line jsdoc/require-jsdoc
33
39
  class ComplexComputedAttribute extends ComplexResolvable {
40
+ terraformResource;
41
+ terraformAttribute;
34
42
  constructor(terraformResource, terraformAttribute) {
35
43
  super(terraformResource, terraformAttribute);
36
44
  this.terraformResource = terraformResource;
@@ -66,6 +74,9 @@ class ComplexComputedAttribute extends ComplexResolvable {
66
74
  }
67
75
  // eslint-disable-next-line jsdoc/require-jsdoc
68
76
  class StringMap extends ComplexResolvable {
77
+ terraformResource;
78
+ terraformAttribute;
79
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.StringMap", version: "0.25.0-pre.21" };
69
80
  constructor(terraformResource, terraformAttribute) {
70
81
  super(terraformResource, terraformAttribute);
71
82
  this.terraformResource = terraformResource;
@@ -79,10 +90,11 @@ class StringMap extends ComplexResolvable {
79
90
  }
80
91
  }
81
92
  exports.StringMap = StringMap;
82
- _a = JSII_RTTI_SYMBOL_1;
83
- StringMap[_a] = { fqn: "cdktn.StringMap", version: "0.25.0-pre.2" };
84
93
  // eslint-disable-next-line jsdoc/require-jsdoc
85
94
  class NumberMap extends ComplexResolvable {
95
+ terraformResource;
96
+ terraformAttribute;
97
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.NumberMap", version: "0.25.0-pre.21" };
86
98
  constructor(terraformResource, terraformAttribute) {
87
99
  super(terraformResource, terraformAttribute);
88
100
  this.terraformResource = terraformResource;
@@ -96,10 +108,11 @@ class NumberMap extends ComplexResolvable {
96
108
  }
97
109
  }
98
110
  exports.NumberMap = NumberMap;
99
- _b = JSII_RTTI_SYMBOL_1;
100
- NumberMap[_b] = { fqn: "cdktn.NumberMap", version: "0.25.0-pre.2" };
101
111
  // eslint-disable-next-line jsdoc/require-jsdoc
102
112
  class BooleanMap extends ComplexResolvable {
113
+ terraformResource;
114
+ terraformAttribute;
115
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.BooleanMap", version: "0.25.0-pre.21" };
103
116
  constructor(terraformResource, terraformAttribute) {
104
117
  super(terraformResource, terraformAttribute);
105
118
  this.terraformResource = terraformResource;
@@ -113,10 +126,11 @@ class BooleanMap extends ComplexResolvable {
113
126
  }
114
127
  }
115
128
  exports.BooleanMap = BooleanMap;
116
- _c = JSII_RTTI_SYMBOL_1;
117
- BooleanMap[_c] = { fqn: "cdktn.BooleanMap", version: "0.25.0-pre.2" };
118
129
  // eslint-disable-next-line jsdoc/require-jsdoc
119
130
  class AnyMap extends ComplexResolvable {
131
+ terraformResource;
132
+ terraformAttribute;
133
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.AnyMap", version: "0.25.0-pre.21" };
120
134
  constructor(terraformResource, terraformAttribute) {
121
135
  super(terraformResource, terraformAttribute);
122
136
  this.terraformResource = terraformResource;
@@ -130,10 +144,11 @@ class AnyMap extends ComplexResolvable {
130
144
  }
131
145
  }
132
146
  exports.AnyMap = AnyMap;
133
- _d = JSII_RTTI_SYMBOL_1;
134
- AnyMap[_d] = { fqn: "cdktn.AnyMap", version: "0.25.0-pre.2" };
135
147
  // eslint-disable-next-line jsdoc/require-jsdoc
136
148
  class StringMapMap extends ComplexResolvable {
149
+ terraformResource;
150
+ terraformAttribute;
151
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.StringMapMap", version: "0.25.0-pre.21" };
137
152
  constructor(terraformResource, terraformAttribute) {
138
153
  super(terraformResource, terraformAttribute);
139
154
  this.terraformResource = terraformResource;
@@ -147,10 +162,11 @@ class StringMapMap extends ComplexResolvable {
147
162
  }
148
163
  }
149
164
  exports.StringMapMap = StringMapMap;
150
- _e = JSII_RTTI_SYMBOL_1;
151
- StringMapMap[_e] = { fqn: "cdktn.StringMapMap", version: "0.25.0-pre.2" };
152
165
  // eslint-disable-next-line jsdoc/require-jsdoc
153
166
  class NumberMapMap extends ComplexResolvable {
167
+ terraformResource;
168
+ terraformAttribute;
169
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.NumberMapMap", version: "0.25.0-pre.21" };
154
170
  constructor(terraformResource, terraformAttribute) {
155
171
  super(terraformResource, terraformAttribute);
156
172
  this.terraformResource = terraformResource;
@@ -164,10 +180,11 @@ class NumberMapMap extends ComplexResolvable {
164
180
  }
165
181
  }
166
182
  exports.NumberMapMap = NumberMapMap;
167
- _f = JSII_RTTI_SYMBOL_1;
168
- NumberMapMap[_f] = { fqn: "cdktn.NumberMapMap", version: "0.25.0-pre.2" };
169
183
  // eslint-disable-next-line jsdoc/require-jsdoc
170
184
  class BooleanMapMap extends ComplexResolvable {
185
+ terraformResource;
186
+ terraformAttribute;
187
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.BooleanMapMap", version: "0.25.0-pre.21" };
171
188
  constructor(terraformResource, terraformAttribute) {
172
189
  super(terraformResource, terraformAttribute);
173
190
  this.terraformResource = terraformResource;
@@ -181,10 +198,11 @@ class BooleanMapMap extends ComplexResolvable {
181
198
  }
182
199
  }
183
200
  exports.BooleanMapMap = BooleanMapMap;
184
- _g = JSII_RTTI_SYMBOL_1;
185
- BooleanMapMap[_g] = { fqn: "cdktn.BooleanMapMap", version: "0.25.0-pre.2" };
186
201
  // eslint-disable-next-line jsdoc/require-jsdoc
187
202
  class AnyMapMap extends ComplexResolvable {
203
+ terraformResource;
204
+ terraformAttribute;
205
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.AnyMapMap", version: "0.25.0-pre.21" };
188
206
  constructor(terraformResource, terraformAttribute) {
189
207
  super(terraformResource, terraformAttribute);
190
208
  this.terraformResource = terraformResource;
@@ -198,13 +216,16 @@ class AnyMapMap extends ComplexResolvable {
198
216
  }
199
217
  }
200
218
  exports.AnyMapMap = AnyMapMap;
201
- _h = JSII_RTTI_SYMBOL_1;
202
- AnyMapMap[_h] = { fqn: "cdktn.AnyMapMap", version: "0.25.0-pre.2" };
203
219
  /**
204
220
  * @deprecated Going to be replaced by Array of ComplexListItem
205
221
  * and will be removed in the future
206
222
  */
207
223
  class ComplexComputedList extends ComplexComputedAttribute {
224
+ terraformResource;
225
+ terraformAttribute;
226
+ complexComputedListIndex;
227
+ wrapsSet;
228
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.ComplexComputedList", version: "0.25.0-pre.21" };
208
229
  constructor(terraformResource, terraformAttribute, complexComputedListIndex, wrapsSet) {
209
230
  super(terraformResource, terraformAttribute);
210
231
  this.terraformResource = terraformResource;
@@ -215,22 +236,24 @@ class ComplexComputedList extends ComplexComputedAttribute {
215
236
  }
216
237
  interpolationForAttribute(property) {
217
238
  if (this.wrapsSet) {
218
- return (0, _2.propertyAccess)(_2.Fn.tolist(this.terraformResource.interpolationForAttribute(this.terraformAttribute)), [this.complexComputedListIndex, property]);
239
+ return (0, _1.propertyAccess)(_1.Fn.tolist(this.terraformResource.interpolationForAttribute(this.terraformAttribute)), [this.complexComputedListIndex, property]);
219
240
  }
220
241
  return this.terraformResource.interpolationForAttribute(`${this.terraformAttribute}[${this.complexComputedListIndex}].${property}`);
221
242
  }
222
243
  computeFqn() {
223
244
  if (this.wrapsSet) {
224
- return tokens_1.Token.asString((0, _2.propertyAccess)(_2.Fn.tolist(this.terraformResource.interpolationForAttribute(this.terraformAttribute)), [this.complexComputedListIndex]));
245
+ return tokens_1.Token.asString((0, _1.propertyAccess)(_1.Fn.tolist(this.terraformResource.interpolationForAttribute(this.terraformAttribute)), [this.complexComputedListIndex]));
225
246
  }
226
247
  return tokens_1.Token.asString(this.terraformResource.interpolationForAttribute(`${this.terraformAttribute}[${this.complexComputedListIndex}]`));
227
248
  }
228
249
  }
229
250
  exports.ComplexComputedList = ComplexComputedList;
230
- _j = JSII_RTTI_SYMBOL_1;
231
- ComplexComputedList[_j] = { fqn: "cdktn.ComplexComputedList", version: "0.25.0-pre.2" };
232
251
  // eslint-disable-next-line jsdoc/require-jsdoc
233
252
  class ComplexList extends ComplexResolvable {
253
+ terraformResource;
254
+ terraformAttribute;
255
+ wrapsSet;
256
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.ComplexList", version: "0.25.0-pre.21" };
234
257
  constructor(terraformResource, terraformAttribute, wrapsSet) {
235
258
  super(terraformResource, terraformAttribute);
236
259
  this.terraformResource = terraformResource;
@@ -239,7 +262,7 @@ class ComplexList extends ComplexResolvable {
239
262
  }
240
263
  computeFqn() {
241
264
  if (this.wrapsSet) {
242
- return tokens_1.Token.asString(_2.Fn.tolist(this.terraformResource.interpolationForAttribute(this.terraformAttribute)));
265
+ return tokens_1.Token.asString(_1.Fn.tolist(this.terraformResource.interpolationForAttribute(this.terraformAttribute)));
243
266
  }
244
267
  else {
245
268
  return tokens_1.Token.asString(this.terraformResource.interpolationForAttribute(this.terraformAttribute));
@@ -252,14 +275,16 @@ class ComplexList extends ComplexResolvable {
252
275
  * @returns
253
276
  */
254
277
  allWithMapKey(mapKeyAttributeName) {
255
- return _2.TerraformIterator.fromComplexList(tokens_1.Token.asAny(this.computeFqn()), mapKeyAttributeName);
278
+ return _1.TerraformIterator.fromComplexList(tokens_1.Token.asAny(this.computeFqn()), mapKeyAttributeName);
256
279
  }
257
280
  }
258
281
  exports.ComplexList = ComplexList;
259
- _k = JSII_RTTI_SYMBOL_1;
260
- ComplexList[_k] = { fqn: "cdktn.ComplexList", version: "0.25.0-pre.2" };
261
282
  // eslint-disable-next-line jsdoc/require-jsdoc
262
283
  class BooleanList extends ComplexList {
284
+ terraformResource;
285
+ terraformAttribute;
286
+ wrapsSet;
287
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.BooleanList", version: "0.25.0-pre.21" };
263
288
  constructor(terraformResource, terraformAttribute, wrapsSet) {
264
289
  super(terraformResource, terraformAttribute, wrapsSet);
265
290
  this.terraformResource = terraformResource;
@@ -267,14 +292,16 @@ class BooleanList extends ComplexList {
267
292
  this.wrapsSet = wrapsSet;
268
293
  }
269
294
  get(index) {
270
- return _2.Fn.element(this, index);
295
+ return _1.Fn.element(this, index);
271
296
  }
272
297
  }
273
298
  exports.BooleanList = BooleanList;
274
- _l = JSII_RTTI_SYMBOL_1;
275
- BooleanList[_l] = { fqn: "cdktn.BooleanList", version: "0.25.0-pre.2" };
276
299
  // eslint-disable-next-line jsdoc/require-jsdoc
277
300
  class StringListList extends ComplexList {
301
+ terraformResource;
302
+ terraformAttribute;
303
+ wrapsSet;
304
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.StringListList", version: "0.25.0-pre.21" };
278
305
  constructor(terraformResource, terraformAttribute, wrapsSet) {
279
306
  super(terraformResource, terraformAttribute, wrapsSet);
280
307
  this.terraformResource = terraformResource;
@@ -286,10 +313,12 @@ class StringListList extends ComplexList {
286
313
  }
287
314
  }
288
315
  exports.StringListList = StringListList;
289
- _m = JSII_RTTI_SYMBOL_1;
290
- StringListList[_m] = { fqn: "cdktn.StringListList", version: "0.25.0-pre.2" };
291
316
  // eslint-disable-next-line jsdoc/require-jsdoc
292
317
  class NumberListList extends ComplexList {
318
+ terraformResource;
319
+ terraformAttribute;
320
+ wrapsSet;
321
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.NumberListList", version: "0.25.0-pre.21" };
293
322
  constructor(terraformResource, terraformAttribute, wrapsSet) {
294
323
  super(terraformResource, terraformAttribute, wrapsSet);
295
324
  this.terraformResource = terraformResource;
@@ -301,10 +330,12 @@ class NumberListList extends ComplexList {
301
330
  }
302
331
  }
303
332
  exports.NumberListList = NumberListList;
304
- _o = JSII_RTTI_SYMBOL_1;
305
- NumberListList[_o] = { fqn: "cdktn.NumberListList", version: "0.25.0-pre.2" };
306
333
  // eslint-disable-next-line jsdoc/require-jsdoc
307
334
  class BooleanListList extends ComplexList {
335
+ terraformResource;
336
+ terraformAttribute;
337
+ wrapsSet;
338
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.BooleanListList", version: "0.25.0-pre.21" };
308
339
  constructor(terraformResource, terraformAttribute, wrapsSet) {
309
340
  super(terraformResource, terraformAttribute, wrapsSet);
310
341
  this.terraformResource = terraformResource;
@@ -317,10 +348,12 @@ class BooleanListList extends ComplexList {
317
348
  }
318
349
  }
319
350
  exports.BooleanListList = BooleanListList;
320
- _p = JSII_RTTI_SYMBOL_1;
321
- BooleanListList[_p] = { fqn: "cdktn.BooleanListList", version: "0.25.0-pre.2" };
322
351
  // eslint-disable-next-line jsdoc/require-jsdoc
323
352
  class AnyListList extends ComplexList {
353
+ terraformResource;
354
+ terraformAttribute;
355
+ wrapsSet;
356
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.AnyListList", version: "0.25.0-pre.21" };
324
357
  constructor(terraformResource, terraformAttribute, wrapsSet) {
325
358
  super(terraformResource, terraformAttribute, wrapsSet);
326
359
  this.terraformResource = terraformResource;
@@ -333,10 +366,11 @@ class AnyListList extends ComplexList {
333
366
  }
334
367
  }
335
368
  exports.AnyListList = AnyListList;
336
- _q = JSII_RTTI_SYMBOL_1;
337
- AnyListList[_q] = { fqn: "cdktn.AnyListList", version: "0.25.0-pre.2" };
338
369
  // eslint-disable-next-line jsdoc/require-jsdoc
339
370
  class ComplexMap extends ComplexResolvable {
371
+ terraformResource;
372
+ terraformAttribute;
373
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.ComplexMap", version: "0.25.0-pre.21" };
340
374
  constructor(terraformResource, terraformAttribute) {
341
375
  super(terraformResource, terraformAttribute);
342
376
  this.terraformResource = terraformResource;
@@ -346,14 +380,17 @@ class ComplexMap extends ComplexResolvable {
346
380
  return tokens_1.Token.asString(this.terraformResource.interpolationForAttribute(this.terraformAttribute));
347
381
  }
348
382
  interpolationForAttribute(property) {
349
- return (0, _2.propertyAccess)(this.terraformResource.interpolationForAttribute(this.terraformAttribute), [property]);
383
+ return (0, _1.propertyAccess)(this.terraformResource.interpolationForAttribute(this.terraformAttribute), [property]);
350
384
  }
351
385
  }
352
386
  exports.ComplexMap = ComplexMap;
353
- _r = JSII_RTTI_SYMBOL_1;
354
- ComplexMap[_r] = { fqn: "cdktn.ComplexMap", version: "0.25.0-pre.2" };
355
387
  // eslint-disable-next-line jsdoc/require-jsdoc
356
388
  class ComplexObject extends ComplexComputedAttribute {
389
+ terraformResource;
390
+ terraformAttribute;
391
+ complexObjectIsFromSet;
392
+ complexObjectIndex;
393
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.ComplexObject", version: "0.25.0-pre.21" };
357
394
  /**
358
395
  * @param terraformResource
359
396
  * @param terraformAttribute
@@ -370,7 +407,7 @@ class ComplexObject extends ComplexComputedAttribute {
370
407
  }
371
408
  interpolationForAttribute(property) {
372
409
  if (this.complexObjectIsFromSet) {
373
- return (0, _2.propertyAccess)(_2.Fn.tolist(this.terraformResource.interpolationForAttribute(this.terraformAttribute)), [this.complexObjectIndex, property]);
410
+ return (0, _1.propertyAccess)(_1.Fn.tolist(this.terraformResource.interpolationForAttribute(this.terraformAttribute)), [this.complexObjectIndex, property]);
374
411
  }
375
412
  return this.terraformResource.interpolationForAttribute(this.complexObjectIndex !== undefined
376
413
  ? `${this.terraformAttribute}[${this.complexObjectIndex}].${property}`
@@ -381,7 +418,7 @@ class ComplexObject extends ComplexComputedAttribute {
381
418
  }
382
419
  computeFqn() {
383
420
  if (this.complexObjectIsFromSet) {
384
- return tokens_1.Token.asString((0, _2.propertyAccess)(_2.Fn.tolist(this.terraformResource.interpolationForAttribute(this.terraformAttribute)), [this.complexObjectIndex]));
421
+ return tokens_1.Token.asString((0, _1.propertyAccess)(_1.Fn.tolist(this.terraformResource.interpolationForAttribute(this.terraformAttribute)), [this.complexObjectIndex]));
385
422
  }
386
423
  return tokens_1.Token.asString(this.terraformResource.interpolationForAttribute(this.complexObjectIndex !== undefined
387
424
  ? `${this.terraformAttribute}[${this.complexObjectIndex}]`
@@ -389,10 +426,12 @@ class ComplexObject extends ComplexComputedAttribute {
389
426
  }
390
427
  }
391
428
  exports.ComplexObject = ComplexObject;
392
- _s = JSII_RTTI_SYMBOL_1;
393
- ComplexObject[_s] = { fqn: "cdktn.ComplexObject", version: "0.25.0-pre.2" };
394
429
  // eslint-disable-next-line jsdoc/require-jsdoc
395
430
  class MapList extends ComplexResolvable {
431
+ terraformResource;
432
+ terraformAttribute;
433
+ wrapsSet;
434
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.MapList", version: "0.25.0-pre.21" };
396
435
  constructor(terraformResource, terraformAttribute, wrapsSet) {
397
436
  super(terraformResource, terraformAttribute);
398
437
  this.terraformResource = terraformResource;
@@ -401,7 +440,7 @@ class MapList extends ComplexResolvable {
401
440
  }
402
441
  computeFqn() {
403
442
  if (this.wrapsSet) {
404
- return tokens_1.Token.asString(_2.Fn.tolist(this.terraformResource.interpolationForAttribute(this.terraformAttribute)));
443
+ return tokens_1.Token.asString(_1.Fn.tolist(this.terraformResource.interpolationForAttribute(this.terraformAttribute)));
405
444
  }
406
445
  else {
407
446
  return tokens_1.Token.asString(this.terraformResource.interpolationForAttribute(this.terraformAttribute));
@@ -411,17 +450,19 @@ class MapList extends ComplexResolvable {
411
450
  if (this.wrapsSet) {
412
451
  const matches = property.match(/\[([^\]]*)\]/); // need to extract out the index
413
452
  if (matches) {
414
- return (0, _2.propertyAccess)(_2.Fn.tolist(this.terraformResource.interpolationForAttribute(this.terraformAttribute)), [matches[1], property]);
453
+ return (0, _1.propertyAccess)(_1.Fn.tolist(this.terraformResource.interpolationForAttribute(this.terraformAttribute)), [matches[1], property]);
415
454
  }
416
455
  }
417
456
  return this.terraformResource.interpolationForAttribute(`${this.terraformAttribute}${property}`);
418
457
  }
419
458
  }
420
459
  exports.MapList = MapList;
421
- _t = JSII_RTTI_SYMBOL_1;
422
- MapList[_t] = { fqn: "cdktn.MapList", version: "0.25.0-pre.2" };
423
460
  // eslint-disable-next-line jsdoc/require-jsdoc
424
461
  class StringMapList extends MapList {
462
+ terraformResource;
463
+ terraformAttribute;
464
+ wrapsSet;
465
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.StringMapList", version: "0.25.0-pre.21" };
425
466
  constructor(terraformResource, terraformAttribute, wrapsSet) {
426
467
  super(terraformResource, terraformAttribute, wrapsSet);
427
468
  this.terraformResource = terraformResource;
@@ -433,10 +474,12 @@ class StringMapList extends MapList {
433
474
  }
434
475
  }
435
476
  exports.StringMapList = StringMapList;
436
- _u = JSII_RTTI_SYMBOL_1;
437
- StringMapList[_u] = { fqn: "cdktn.StringMapList", version: "0.25.0-pre.2" };
438
477
  // eslint-disable-next-line jsdoc/require-jsdoc
439
478
  class NumberMapList extends MapList {
479
+ terraformResource;
480
+ terraformAttribute;
481
+ wrapsSet;
482
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.NumberMapList", version: "0.25.0-pre.21" };
440
483
  constructor(terraformResource, terraformAttribute, wrapsSet) {
441
484
  super(terraformResource, terraformAttribute, wrapsSet);
442
485
  this.terraformResource = terraformResource;
@@ -448,10 +491,12 @@ class NumberMapList extends MapList {
448
491
  }
449
492
  }
450
493
  exports.NumberMapList = NumberMapList;
451
- _v = JSII_RTTI_SYMBOL_1;
452
- NumberMapList[_v] = { fqn: "cdktn.NumberMapList", version: "0.25.0-pre.2" };
453
494
  // eslint-disable-next-line jsdoc/require-jsdoc
454
495
  class BooleanMapList extends MapList {
496
+ terraformResource;
497
+ terraformAttribute;
498
+ wrapsSet;
499
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.BooleanMapList", version: "0.25.0-pre.21" };
455
500
  constructor(terraformResource, terraformAttribute, wrapsSet) {
456
501
  super(terraformResource, terraformAttribute, wrapsSet);
457
502
  this.terraformResource = terraformResource;
@@ -463,10 +508,12 @@ class BooleanMapList extends MapList {
463
508
  }
464
509
  }
465
510
  exports.BooleanMapList = BooleanMapList;
466
- _w = JSII_RTTI_SYMBOL_1;
467
- BooleanMapList[_w] = { fqn: "cdktn.BooleanMapList", version: "0.25.0-pre.2" };
468
511
  // eslint-disable-next-line jsdoc/require-jsdoc
469
512
  class AnyMapList extends MapList {
513
+ terraformResource;
514
+ terraformAttribute;
515
+ wrapsSet;
516
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.AnyMapList", version: "0.25.0-pre.21" };
470
517
  constructor(terraformResource, terraformAttribute, wrapsSet) {
471
518
  super(terraformResource, terraformAttribute, wrapsSet);
472
519
  this.terraformResource = terraformResource;
@@ -478,10 +525,11 @@ class AnyMapList extends MapList {
478
525
  }
479
526
  }
480
527
  exports.AnyMapList = AnyMapList;
481
- _x = JSII_RTTI_SYMBOL_1;
482
- AnyMapList[_x] = { fqn: "cdktn.AnyMapList", version: "0.25.0-pre.2" };
483
528
  // eslint-disable-next-line jsdoc/require-jsdoc
484
529
  class StringListMap extends ComplexMap {
530
+ terraformResource;
531
+ terraformAttribute;
532
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.StringListMap", version: "0.25.0-pre.21" };
485
533
  constructor(terraformResource, terraformAttribute) {
486
534
  super(terraformResource, terraformAttribute);
487
535
  this.terraformResource = terraformResource;
@@ -492,10 +540,11 @@ class StringListMap extends ComplexMap {
492
540
  }
493
541
  }
494
542
  exports.StringListMap = StringListMap;
495
- _y = JSII_RTTI_SYMBOL_1;
496
- StringListMap[_y] = { fqn: "cdktn.StringListMap", version: "0.25.0-pre.2" };
497
543
  // eslint-disable-next-line jsdoc/require-jsdoc
498
544
  class NumberListMap extends ComplexMap {
545
+ terraformResource;
546
+ terraformAttribute;
547
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.NumberListMap", version: "0.25.0-pre.21" };
499
548
  constructor(terraformResource, terraformAttribute) {
500
549
  super(terraformResource, terraformAttribute);
501
550
  this.terraformResource = terraformResource;
@@ -506,10 +555,11 @@ class NumberListMap extends ComplexMap {
506
555
  }
507
556
  }
508
557
  exports.NumberListMap = NumberListMap;
509
- _z = JSII_RTTI_SYMBOL_1;
510
- NumberListMap[_z] = { fqn: "cdktn.NumberListMap", version: "0.25.0-pre.2" };
511
558
  // eslint-disable-next-line jsdoc/require-jsdoc
512
559
  class BooleanListMap extends ComplexMap {
560
+ terraformResource;
561
+ terraformAttribute;
562
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.BooleanListMap", version: "0.25.0-pre.21" };
513
563
  constructor(terraformResource, terraformAttribute) {
514
564
  super(terraformResource, terraformAttribute);
515
565
  this.terraformResource = terraformResource;
@@ -521,10 +571,11 @@ class BooleanListMap extends ComplexMap {
521
571
  }
522
572
  }
523
573
  exports.BooleanListMap = BooleanListMap;
524
- _0 = JSII_RTTI_SYMBOL_1;
525
- BooleanListMap[_0] = { fqn: "cdktn.BooleanListMap", version: "0.25.0-pre.2" };
526
574
  // eslint-disable-next-line jsdoc/require-jsdoc
527
575
  class AnyListMap extends ComplexMap {
576
+ terraformResource;
577
+ terraformAttribute;
578
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.AnyListMap", version: "0.25.0-pre.21" };
528
579
  constructor(terraformResource, terraformAttribute) {
529
580
  super(terraformResource, terraformAttribute);
530
581
  this.terraformResource = terraformResource;
@@ -536,6 +587,4 @@ class AnyListMap extends ComplexMap {
536
587
  }
537
588
  }
538
589
  exports.AnyListMap = AnyListMap;
539
- _1 = JSII_RTTI_SYMBOL_1;
540
- AnyListMap[_1] = { fqn: "cdktn.AnyListMap", version: "0.25.0-pre.2" };
541
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGxleC1jb21wdXRlZC1saXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbXBsZXgtY29tcHV0ZWQtbGlzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLCtCQUErQjtBQUMvQixtQ0FBbUM7QUFDbkMscUNBQStEO0FBSy9ELHdCQUtXO0FBQ1gsOERBQW9FO0FBQ3BFLHFDQUFtRDtBQUVuRCwrQ0FBK0M7QUFDL0MsTUFBZSxpQkFBaUI7SUFROUIsWUFDWSxpQkFBdUMsRUFDdkMsa0JBQTBCO1FBRDFCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBc0I7UUFDdkMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFRO1FBRXBDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBQSxrQ0FBb0IsR0FBRSxDQUFDO0lBQzlDLENBQUM7SUFJRCxJQUFJLEdBQUc7UUFDTCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2YsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDaEMsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztJQUNuQixDQUFDO0lBRUQsT0FBTyxDQUFDLFFBQXlCO1FBQy9CLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUNsQixDQUFDO0lBRUQsUUFBUTtRQUNOLE9BQU8sY0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QixDQUFDO0NBQ0Y7QUFFRCwrQ0FBK0M7QUFDL0MsTUFBZSx3QkFDYixTQUFRLGlCQUFpQjtJQUd6QixZQUNZLGlCQUF1QyxFQUN2QyxrQkFBMEI7UUFFcEMsS0FBSyxDQUFDLGlCQUFpQixFQUFFLGtCQUFrQixDQUFDLENBQUM7UUFIbkMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFzQjtRQUN2Qyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQVE7SUFHdEMsQ0FBQztJQUVNLGtCQUFrQixDQUFDLGtCQUEwQjtRQUNsRCxPQUFPLGNBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBRU0sa0JBQWtCLENBQUMsa0JBQTBCO1FBQ2xELE9BQU8sY0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUFFTSxnQkFBZ0IsQ0FBQyxrQkFBMEI7UUFDaEQsT0FBTyxjQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUVNLG1CQUFtQixDQUFDLGtCQUEwQjtRQUNuRCxPQUFPLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFTSxzQkFBc0IsQ0FBQyxrQkFBMEI7UUFDdEQsT0FBTyxjQUFLLENBQUMsWUFBWSxDQUN2QixJQUFJLENBQUMseUJBQXlCLENBQUMsa0JBQWtCLENBQUMsQ0FDbkQsQ0FBQztJQUNKLENBQUM7SUFFTSxxQkFBcUIsQ0FBQyxrQkFBMEI7UUFDckQsT0FBTyxjQUFLLENBQUMsV0FBVyxDQUN0QixJQUFJLENBQUMseUJBQXlCLENBQUMsa0JBQWtCLENBQUMsQ0FDbkQsQ0FBQztJQUNKLENBQUM7SUFFTSxxQkFBcUIsQ0FBQyxrQkFBMEI7UUFDckQsT0FBTyxjQUFLLENBQUMsV0FBVyxDQUN0QixJQUFJLENBQUMseUJBQXlCLENBQUMsa0JBQWtCLENBQUMsQ0FDbkQsQ0FBQztJQUNKLENBQUM7SUFFTSxzQkFBc0IsQ0FBQyxrQkFBMEI7UUFDdEQsT0FBTyxjQUFLLENBQUMsWUFBWSxDQUN2QixJQUFJLENBQUMseUJBQXlCLENBQUMsa0JBQWtCLENBQUMsQ0FDbkQsQ0FBQztJQUNKLENBQUM7SUFFTSxrQkFBa0IsQ0FBQyxrQkFBMEI7UUFDbEQsT0FBTyxjQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7SUFDNUUsQ0FBQztDQUdGO0FBRUQsK0NBQStDO0FBQy9DLE1BQWEsU0FDWCxTQUFRLGlCQUFpQjtJQUd6QixZQUNZLGlCQUF1QyxFQUN2QyxrQkFBMEI7UUFFcEMsS0FBSyxDQUFDLGlCQUFpQixFQUFFLGtCQUFrQixDQUFDLENBQUM7UUFIbkMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFzQjtRQUN2Qyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQVE7SUFHdEMsQ0FBQztJQUVNLE1BQU0sQ0FBQyxHQUFXO1FBQ3ZCLE9BQU8sY0FBSyxDQUFDLFFBQVEsQ0FDbkIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLHlCQUF5QixDQUM5QyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsS0FBSyxHQUFHLElBQUksQ0FDdkMsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELFVBQVU7UUFDUixPQUFPLGNBQUssQ0FBQyxRQUFRLENBQ25CLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FDMUUsQ0FBQztJQUNKLENBQUM7O0FBdkJILDhCQXdCQzs7O0FBRUQsK0NBQStDO0FBQy9DLE1BQWEsU0FDWCxTQUFRLGlCQUFpQjtJQUd6QixZQUNZLGlCQUF1QyxFQUN2QyxrQkFBMEI7UUFFcEMsS0FBSyxDQUFDLGlCQUFpQixFQUFFLGtCQUFrQixDQUFDLENBQUM7UUFIbkMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFzQjtRQUN2Qyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQVE7SUFHdEMsQ0FBQztJQUVNLE1BQU0sQ0FBQyxHQUFXO1FBQ3ZCLE9BQU8sY0FBSyxDQUFDLFFBQVEsQ0FDbkIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLHlCQUF5QixDQUM5QyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsS0FBSyxHQUFHLElBQUksQ0FDdkMsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELFVBQVU7UUFDUixPQUFPLGNBQUssQ0FBQyxRQUFRLENBQ25CLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FDMUUsQ0FBQztJQUNKLENBQUM7O0FBdkJILDhCQXdCQzs7O0FBRUQsK0NBQStDO0FBQy9DLE1BQWEsVUFDWCxTQUFRLGlCQUFpQjtJQUd6QixZQUNZLGlCQUF1QyxFQUN2QyxrQkFBMEI7UUFFcEMsS0FBSyxDQUFDLGlCQUFpQixFQUFFLGtCQUFrQixDQUFDLENBQUM7UUFIbkMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFzQjtRQUN2Qyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQVE7SUFHdEMsQ0FBQztJQUVNLE1BQU0sQ0FBQyxHQUFXO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLHlCQUF5QixDQUNyRCxHQUFHLElBQUksQ0FBQyxrQkFBa0IsS0FBSyxHQUFHLElBQUksQ0FDdkMsQ0FBQztJQUNKLENBQUM7SUFFRCxVQUFVO1FBQ1IsT0FBTyxjQUFLLENBQUMsUUFBUSxDQUNuQixJQUFJLENBQUMsaUJBQWlCLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQzFFLENBQUM7SUFDSixDQUFDOztBQXJCSCxnQ0FzQkM7OztBQUVELCtDQUErQztBQUMvQyxNQUFhLE1BQU8sU0FBUSxpQkFBaUI7SUFDM0MsWUFDWSxpQkFBdUMsRUFDdkMsa0JBQTBCO1FBRXBDLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1FBSG5DLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBc0I7UUFDdkMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFRO0lBR3RDLENBQUM7SUFFTSxNQUFNLENBQUMsR0FBVztRQUN2QixPQUFPLGNBQUssQ0FBQyxLQUFLLENBQ2hCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyx5QkFBeUIsQ0FDOUMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLEtBQUssR0FBRyxJQUFJLENBQ3ZDLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRCxVQUFVO1FBQ1IsT0FBTyxjQUFLLENBQUMsUUFBUSxDQUNuQixJQUFJLENBQUMsaUJBQWlCLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQzFFLENBQUM7SUFDSixDQUFDOztBQXBCSCx3QkFxQkM7OztBQUVELCtDQUErQztBQUMvQyxNQUFhLFlBQ1gsU0FBUSxpQkFBaUI7SUFHekIsWUFDWSxpQkFBdUMsRUFDdkMsa0JBQTBCO1FBRXBDLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1FBSG5DLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBc0I7UUFDdkMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFRO0lBR3RDLENBQUM7SUFFTSxNQUFNLENBQUMsR0FBVztRQUN2QixPQUFPLElBQUksU0FBUyxDQUNsQixJQUFJLENBQUMsaUJBQWlCLEVBQ3RCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixLQUFLLEdBQUcsSUFBSSxDQUN2QyxDQUFDO0lBQ0osQ0FBQztJQUVELFVBQVU7UUFDUixPQUFPLGNBQUssQ0FBQyxRQUFRLENBQ25CLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FDMUUsQ0FBQztJQUNKLENBQUM7O0FBdEJILG9DQXVCQzs7O0FBRUQsK0NBQStDO0FBQy9DLE1BQWEsWUFDWCxTQUFRLGlCQUFpQjtJQUd6QixZQUNZLGlCQUF1QyxFQUN2QyxrQkFBMEI7UUFFcEMsS0FBSyxDQUFDLGlCQUFpQixFQUFFLGtCQUFrQixDQUFDLENBQUM7UUFIbkMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFzQjtRQUN2Qyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQVE7SUFHdEMsQ0FBQztJQUVNLE1BQU0sQ0FBQyxHQUFXO1FBQ3ZCLE9BQU8sSUFBSSxTQUFTLENBQ2xCLElBQUksQ0FBQyxpQkFBaUIsRUFDdEIsR0FBRyxJQUFJLENBQUMsa0JBQWtCLEtBQUssR0FBRyxJQUFJLENBQ3ZDLENBQUM7SUFDSixDQUFDO0lBRUQsVUFBVTtRQUNSLE9BQU8sY0FBSyxDQUFDLFFBQVEsQ0FDbkIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUMxRSxDQUFDO0lBQ0osQ0FBQzs7QUF0Qkgsb0NBdUJDOzs7QUFFRCwrQ0FBK0M7QUFDL0MsTUFBYSxhQUNYLFNBQVEsaUJBQWlCO0lBR3pCLFlBQ1ksaUJBQXVDLEVBQ3ZDLGtCQUEwQjtRQUVwQyxLQUFLLENBQUMsaUJBQWlCLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztRQUhuQyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQXNCO1FBQ3ZDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBUTtJQUd0QyxDQUFDO0lBRU0sTUFBTSxDQUFDLEdBQVc7UUFDdkIsT0FBTyxJQUFJLFVBQVUsQ0FDbkIsSUFBSSxDQUFDLGlCQUFpQixFQUN0QixHQUFHLElBQUksQ0FBQyxrQkFBa0IsS0FBSyxHQUFHLElBQUksQ0FDdkMsQ0FBQztJQUNKLENBQUM7SUFFRCxVQUFVO1FBQ1IsT0FBTyxjQUFLLENBQUMsUUFBUSxDQUNuQixJQUFJLENBQUMsaUJBQWlCLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQzFFLENBQUM7SUFDSixDQUFDOztBQXRCSCxzQ0F1QkM7OztBQUVELCtDQUErQztBQUMvQyxNQUFhLFNBQ1gsU0FBUSxpQkFBaUI7SUFHekIsWUFDWSxpQkFBdUMsRUFDdkMsa0JBQTBCO1FBRXBDLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1FBSG5DLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBc0I7UUFDdkMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFRO0lBR3RDLENBQUM7SUFFTSxNQUFNLENBQUMsR0FBVztRQUN2QixPQUFPLElBQUksTUFBTSxDQUNmLElBQUksQ0FBQyxpQkFBaUIsRUFDdEIsR0FBRyxJQUFJLENBQUMsa0JBQWtCLEtBQUssR0FBRyxJQUFJLENBQ3ZDLENBQUM7SUFDSixDQUFDO0lBRUQsVUFBVTtRQUNSLE9BQU8sY0FBSyxDQUFDLFFBQVEsQ0FDbkIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUMxRSxDQUFDO0lBQ0osQ0FBQzs7QUF0QkgsOEJBdUJDOzs7QUFFRDs7O0dBR0c7QUFDSCxNQUFhLG1CQUFvQixTQUFRLHdCQUF3QjtJQUMvRCxZQUNZLGlCQUF1QyxFQUN2QyxrQkFBMEIsRUFDMUIsd0JBQWdDLEVBQ2hDLFFBQWtCO1FBRTVCLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1FBTG5DLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBc0I7UUFDdkMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFRO1FBQzFCLDZCQUF3QixHQUF4Qix3QkFBd0IsQ0FBUTtRQUNoQyxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBRzVCLE1BQU0sSUFBQSxnQ0FBdUIsR0FBRSxDQUFDO0lBQ2xDLENBQUM7SUFFTSx5QkFBeUIsQ0FBQyxRQUFnQjtRQUMvQyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNsQixPQUFPLElBQUEsaUJBQWMsRUFDbkIsS0FBRSxDQUFDLE1BQU0sQ0FDUCxJQUFJLENBQUMsaUJBQWlCLENBQUMseUJBQXlCLENBQzlDLElBQUksQ0FBQyxrQkFBa0IsQ0FDeEIsQ0FDRixFQUNELENBQUMsSUFBSSxDQUFDLHdCQUF3QixFQUFFLFFBQVEsQ0FBQyxDQUMxQyxDQUFDO1FBQ0osQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLHlCQUF5QixDQUNyRCxHQUFHLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxJQUFJLENBQUMsd0JBQXdCLEtBQUssUUFBUSxFQUFFLENBQzNFLENBQUM7SUFDSixDQUFDO0lBRUQsVUFBVTtRQUNSLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2xCLE9BQU8sY0FBSyxDQUFDLFFBQVEsQ0FDbkIsSUFBQSxpQkFBYyxFQUNaLEtBQUUsQ0FBQyxNQUFNLENBQ1AsSUFBSSxDQUFDLGlCQUFpQixDQUFDLHlCQUF5QixDQUM5QyxJQUFJLENBQUMsa0JBQWtCLENBQ3hCLENBQ0YsRUFDRCxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUNoQyxDQUNGLENBQUM7UUFDSixDQUFDO1FBRUQsT0FBTyxjQUFLLENBQUMsUUFBUSxDQUNuQixJQUFJLENBQUMsaUJBQWlCLENBQUMseUJBQXlCLENBQzlDLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixJQUFJLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxDQUMvRCxDQUNGLENBQUM7SUFDSixDQUFDOztBQS9DSCxrREFnREM7OztBQUVELCtDQUErQztBQUMvQyxNQUFzQixXQUNwQixTQUFRLGlCQUFpQjtJQUd6QixZQUNZLGlCQUF1QyxFQUN2QyxrQkFBMEIsRUFDMUIsUUFBaUI7UUFFM0IsS0FBSyxDQUFDLGlCQUFpQixFQUFFLGtCQUFrQixDQUFDLENBQUM7UUFKbkMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFzQjtRQUN2Qyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQVE7UUFDMUIsYUFBUSxHQUFSLFFBQVEsQ0FBUztJQUc3QixDQUFDO0lBRUQsVUFBVTtRQUNSLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2xCLE9BQU8sY0FBSyxDQUFDLFFBQVEsQ0FDbkIsS0FBRSxDQUFDLE1BQU0sQ0FDUCxJQUFJLENBQUMsaUJBQWlCLENBQUMseUJBQXlCLENBQzlDLElBQUksQ0FBQyxrQkFBa0IsQ0FDeEIsQ0FDRixDQUNGLENBQUM7UUFDSixDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sY0FBSyxDQUFDLFFBQVEsQ0FDbkIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLHlCQUF5QixDQUM5QyxJQUFJLENBQUMsa0JBQWtCLENBQ3hCLENBQ0YsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxhQUFhLENBQ2xCLG1CQUEyQjtRQUUzQixPQUFPLG9CQUFpQixDQUFDLGVBQWUsQ0FDdEMsY0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsRUFDOUIsbUJBQW1CLENBQ3BCLENBQUM7SUFDSixDQUFDOztBQTNDSCxrQ0E0Q0M7OztBQUVELCtDQUErQztBQUMvQyxNQUFhLFdBQVksU0FBUSxXQUFXO0lBQzFDLFlBQ1ksaUJBQXVDLEVBQ3ZDLGtCQUEwQixFQUMxQixRQUFpQjtRQUUzQixLQUFLLENBQUMsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFKN0Msc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFzQjtRQUN2Qyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQVE7UUFDMUIsYUFBUSxHQUFSLFFBQVEsQ0FBUztJQUc3QixDQUFDO0lBRU0sR0FBRyxDQUFDLEtBQWE7UUFDdEIsT0FBTyxLQUFFLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNqQyxDQUFDOztBQVhILGtDQVlDOzs7QUFFRCwrQ0FBK0M7QUFDL0MsTUFBYSxjQUFlLFNBQVEsV0FBVztJQUM3QyxZQUNZLGlCQUF1QyxFQUN2QyxrQkFBMEIsRUFDMUIsUUFBaUI7UUFFM0IsS0FBSyxDQUFDLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBSjdDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBc0I7UUFDdkMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFRO1FBQzFCLGFBQVEsR0FBUixRQUFRLENBQVM7SUFHN0IsQ0FBQztJQUVNLEdBQUcsQ0FBQyxLQUFhO1FBQ3RCLE9BQU8sY0FBSyxDQUFDLE1BQU0sQ0FDakIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLHlCQUF5QixDQUM5QyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxLQUFLLEdBQUcsQ0FDdkMsQ0FDRixDQUFDO0lBQ0osQ0FBQzs7QUFmSCx3Q0FnQkM7OztBQUVELCtDQUErQztBQUMvQyxNQUFhLGNBQWUsU0FBUSxXQUFXO0lBQzdDLFlBQ1ksaUJBQXVDLEVBQ3ZDLGtCQUEwQixFQUMxQixRQUFpQjtRQUUzQixLQUFLLENBQUMsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFKN0Msc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFzQjtRQUN2Qyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQVE7UUFDMUIsYUFBUSxHQUFSLFFBQVEsQ0FBUztJQUc3QixDQUFDO0lBRU0sR0FBRyxDQUFDLEtBQWE7UUFDdEIsT0FBTyxjQUFLLENBQUMsWUFBWSxDQUN2QixJQUFJLENBQUMsaUJBQWlCLENBQUMseUJBQXlCLENBQzlDLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixJQUFJLEtBQUssR0FBRyxDQUN2QyxDQUNGLENBQUM7SUFDSixDQUFDOztBQWZILHdDQWdCQzs7O0FBRUQsK0NBQStDO0FBQy9DLE1BQWEsZUFBZ0IsU0FBUSxXQUFXO0lBQzlDLFlBQ1ksaUJBQXVDLEVBQ3ZDLGtCQUEwQixFQUMxQixRQUFpQjtRQUUzQixLQUFLLENBQUMsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFKN0Msc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFzQjtRQUN2Qyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQVE7UUFDMUIsYUFBUSxHQUFSLFFBQVEsQ0FBUztJQUc3QixDQUFDO0lBRU0sR0FBRyxDQUFDLEtBQWE7UUFDdEIsNkJBQTZCO1FBQzdCLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLHlCQUF5QixDQUNyRCxHQUFHLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxLQUFLLEdBQUcsQ0FDdkMsQ0FBQztJQUNKLENBQUM7O0FBZEgsMENBZUM7OztBQUVELCtDQUErQztBQUMvQyxNQUFhLFdBQVksU0FBUSxXQUFXO0lBQzFDLFlBQ1ksaUJBQXVDLEVBQ3ZDLGtCQUEwQixFQUMxQixRQUFpQjtRQUUzQixLQUFLLENBQUMsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFKN0Msc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFzQjtRQUN2Qyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQVE7UUFDMUIsYUFBUSxHQUFSLFFBQVEsQ0FBUztJQUc3QixDQUFDO0lBRU0sR0FBRyxDQUFDLEtBQWE7UUFDdEIsNkJBQTZCO1FBQzdCLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLHlCQUF5QixDQUNyRCxHQUFHLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxLQUFLLEdBQUcsQ0FDdkMsQ0FBQztJQUNKLENBQUM7O0FBZEgsa0NBZUM7OztBQUVELCtDQUErQztBQUMvQyxNQUFzQixVQUNwQixTQUFRLGlCQUFpQjtJQUd6QixZQUNZLGlCQUF1QyxFQUN2QyxrQkFBMEI7UUFFcEMsS0FBSyxDQUFDLGlCQUFpQixFQUFFLGtCQUFrQixDQUFDLENBQUM7UUFIbkMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFzQjtRQUN2Qyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQVE7SUFHdEMsQ0FBQztJQUVELFVBQVU7UUFDUixPQUFPLGNBQUssQ0FBQyxRQUFRLENBQ25CLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FDMUUsQ0FBQztJQUNKLENBQUM7SUFFRCx5QkFBeUIsQ0FBQyxRQUFnQjtRQUN4QyxPQUFPLElBQUEsaUJBQWMsRUFDbkIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxFQUN6RSxDQUFDLFFBQVEsQ0FBQyxDQUNYLENBQUM7SUFDSixDQUFDOztBQXRCSCxnQ0F1QkM7OztBQUVELCtDQUErQztBQUMvQyxNQUFhLGFBQWMsU0FBUSx3QkFBd0I7SUFDekQ7Ozs7OztPQU1HO0lBQ0gsWUFDWSxpQkFBdUMsRUFDdkMsa0JBQTBCLEVBQzFCLHNCQUErQixFQUMvQixrQkFBb0M7UUFFOUMsS0FBSyxDQUFDLGlCQUFpQixFQUFFLGtCQUFrQixDQUFDLENBQUM7UUFMbkMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFzQjtRQUN2Qyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQVE7UUFDMUIsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUFTO1FBQy9CLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBa0I7SUFHaEQsQ0FBQztJQUVNLHlCQUF5QixDQUFDLFFBQWdCO1FBQy9DLElBQUksSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFDaEMsT0FBTyxJQUFBLGlCQUFjLEVBQ25CLEtBQUUsQ0FBQyxNQUFNLENBQ1AsSUFBSSxDQUFDLGlCQUFpQixDQUFDLHlCQUF5QixDQUM5QyxJQUFJLENBQUMsa0JBQWtCLENBQ3hCLENBQ0YsRUFDRCxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxRQUFRLENBQUMsQ0FDcEMsQ0FBQztRQUNKLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyx5QkFBeUIsQ0FDckQsSUFBSSxDQUFDLGtCQUFrQixLQUFLLFNBQVM7WUFDbkMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixJQUFJLElBQUksQ0FBQyxrQkFBa0IsS0FBSyxRQUFRLEVBQUU7WUFDdEUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixJQUFJLFFBQVEsRUFBRSxDQUM3QyxDQUFDO0lBQ0osQ0FBQztJQUVTLG1CQUFtQjtRQUMzQixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyx5QkFBeUIsQ0FDckQsR0FBRyxJQUFJLENBQUMsa0JBQWtCLElBQUksQ0FDL0IsQ0FBQztJQUNKLENBQUM7SUFFRCxVQUFVO1FBQ1IsSUFBSSxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztZQUNoQyxPQUFPLGNBQUssQ0FBQyxRQUFRLENBQ25CLElBQUEsaUJBQWMsRUFDWixLQUFFLENBQUMsTUFBTSxDQUNQLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyx5QkFBeUIsQ0FDOUMsSUFBSSxDQUFDLGtCQUFrQixDQUN4QixDQUNGLEVBQ0QsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FDMUIsQ0FDRixDQUFDO1FBQ0osQ0FBQztRQUVELE9BQU8sY0FBSyxDQUFDLFFBQVEsQ0FDbkIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLHlCQUF5QixDQUM5QyxJQUFJLENBQUMsa0JBQWtCLEtBQUssU0FBUztZQUNuQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLElBQUksSUFBSSxDQUFDLGtCQUFrQixHQUFHO1lBQzFELENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQzVCLENBQ0YsQ0FBQztJQUNKLENBQUM7O0FBL0RILHNDQWdFQzs7O0FBRUQsK0NBQStDO0FBQy9DLE1BQXNCLE9BQ3BCLFNBQVEsaUJBQWlCO0lBR3pCLFlBQ1ksaUJBQXVDLEVBQ3ZDLGtCQUEwQixFQUMxQixRQUFpQjtRQUUzQixLQUFLLENBQUMsaUJBQWlCLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztRQUpuQyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQXNCO1FBQ3ZDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBUTtRQUMxQixhQUFRLEdBQVIsUUFBUSxDQUFTO0lBRzdCLENBQUM7SUFFRCxVQUFVO1FBQ1IsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbEIsT0FBTyxjQUFLLENBQUMsUUFBUSxDQUNuQixLQUFFLENBQUMsTUFBTSxDQUNQLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyx5QkFBeUIsQ0FDOUMsSUFBSSxDQUFDLGtCQUFrQixDQUN4QixDQUNGLENBQ0YsQ0FBQztRQUNKLENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxjQUFLLENBQUMsUUFBUSxDQUNuQixJQUFJLENBQUMsaUJBQWlCLENBQUMseUJBQXlCLENBQzlDLElBQUksQ0FBQyxrQkFBa0IsQ0FDeEIsQ0FDRixDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFRCx5QkFBeUIsQ0FBQyxRQUFnQjtRQUN4QyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNsQixNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsZ0NBQWdDO1lBQ2hGLElBQUksT0FBTyxFQUFFLENBQUM7Z0JBQ1osT0FBTyxJQUFBLGlCQUFjLEVBQ25CLEtBQUUsQ0FBQyxNQUFNLENBQ1AsSUFBSSxDQUFDLGlCQUFpQixDQUFDLHlCQUF5QixDQUM5QyxJQUFJLENBQUMsa0JBQWtCLENBQ3hCLENBQ0YsRUFDRCxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FDdkIsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMseUJBQXlCLENBQ3JELEdBQUcsSUFBSSxDQUFDLGtCQUFrQixHQUFHLFFBQVEsRUFBRSxDQUN4QyxDQUFDO0lBQ0osQ0FBQzs7QUFoREgsMEJBaURDOzs7QUFFRCwrQ0FBK0M7QUFDL0MsTUFBYSxhQUFjLFNBQVEsT0FBTztJQUN4QyxZQUNZLGlCQUF1QyxFQUN2QyxrQkFBMEIsRUFDMUIsUUFBaUI7UUFFM0IsS0FBSyxDQUFDLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBSjdDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBc0I7UUFDdkMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFRO1FBQzFCLGFBQVEsR0FBUixRQUFRLENBQVM7SUFHN0IsQ0FBQztJQUVNLEdBQUcsQ0FBQyxLQUFhO1FBQ3RCLE9BQU8sSUFBSSxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztJQUMzQyxDQUFDOztBQVhILHNDQVlDOzs7QUFFRCwrQ0FBK0M7QUFDL0MsTUFBYSxhQUFjLFNBQVEsT0FBTztJQUN4QyxZQUNZLGlCQUF1QyxFQUN2QyxrQkFBMEIsRUFDMUIsUUFBaUI7UUFFM0IsS0FBSyxDQUFDLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBSjdDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBc0I7UUFDdkMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFRO1FBQzFCLGFBQVEsR0FBUixRQUFRLENBQVM7SUFHN0IsQ0FBQztJQUVNLEdBQUcsQ0FBQyxLQUFhO1FBQ3RCLE9BQU8sSUFBSSxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztJQUMzQyxDQUFDOztBQVhILHNDQVlDOzs7QUFFRCwrQ0FBK0M7QUFDL0MsTUFBYSxjQUFlLFNBQVEsT0FBTztJQUN6QyxZQUNZLGlCQUF1QyxFQUN2QyxrQkFBMEIsRUFDMUIsUUFBaUI7UUFFM0IsS0FBSyxDQUFDLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBSjdDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBc0I7UUFDdkMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFRO1FBQzFCLGFBQVEsR0FBUixRQUFRLENBQVM7SUFHN0IsQ0FBQztJQUVNLEdBQUcsQ0FBQyxLQUFhO1FBQ3RCLE9BQU8sSUFBSSxVQUFVLENBQUMsSUFBSSxFQUFFLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztJQUM1QyxDQUFDOztBQVhILHdDQVlDOzs7QUFFRCwrQ0FBK0M7QUFDL0MsTUFBYSxVQUFXLFNBQVEsT0FBTztJQUNyQyxZQUNZLGlCQUF1QyxFQUN2QyxrQkFBMEIsRUFDMUIsUUFBaUI7UUFFM0IsS0FBSyxDQUFDLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBSjdDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBc0I7UUFDdkMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFRO1FBQzFCLGFBQVEsR0FBUixRQUFRLENBQVM7SUFHN0IsQ0FBQztJQUVNLEdBQUcsQ0FBQyxLQUFhO1FBQ3RCLE9BQU8sSUFBSSxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztJQUN4QyxDQUFDOztBQVhILGdDQVlDOzs7QUFFRCwrQ0FBK0M7QUFDL0MsTUFBYSxhQUFjLFNBQVEsVUFBVTtJQUMzQyxZQUNZLGlCQUF1QyxFQUN2QyxrQkFBMEI7UUFFcEMsS0FBSyxDQUFDLGlCQUFpQixFQUFFLGtCQUFrQixDQUFDLENBQUM7UUFIbkMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFzQjtRQUN2Qyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQVE7SUFHdEMsQ0FBQztJQUVNLEdBQUcsQ0FBQyxHQUFXO1FBQ3BCLE9BQU8sY0FBSyxDQUFDLE1BQU0sQ0FDakIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLHlCQUF5QixDQUM5QyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxHQUFHLEdBQUcsQ0FDckMsQ0FDRixDQUFDO0lBQ0osQ0FBQzs7QUFkSCxzQ0FlQzs7O0FBRUQsK0NBQStDO0FBQy9DLE1BQWEsYUFBYyxTQUFRLFVBQVU7SUFDM0MsWUFDWSxpQkFBdUMsRUFDdkMsa0JBQTBCO1FBRXBDLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1FBSG5DLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBc0I7UUFDdkMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFRO0lBR3RDLENBQUM7SUFFTSxHQUFHLENBQUMsR0FBVztRQUNwQixPQUFPLGNBQUssQ0FBQyxZQUFZLENBQ3ZCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyx5QkFBeUIsQ0FDOUMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLElBQUksR0FBRyxHQUFHLENBQ3JDLENBQ0YsQ0FBQztJQUNKLENBQUM7O0FBZEgsc0NBZUM7OztBQUVELCtDQUErQztBQUMvQyxNQUFhLGNBQWUsU0FBUSxVQUFVO0lBQzVDLFlBQ1ksaUJBQXVDLEVBQ3ZDLGtCQUEwQjtRQUVwQyxLQUFLLENBQUMsaUJBQWlCLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztRQUhuQyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQXNCO1FBQ3ZDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBUTtJQUd0QyxDQUFDO0lBRU0sR0FBRyxDQUFDLEdBQVc7UUFDcEIsNkJBQTZCO1FBQzdCLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLHlCQUF5QixDQUNyRCxHQUFHLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxHQUFHLEdBQUcsQ0FDckMsQ0FBQztJQUNKLENBQUM7O0FBYkgsd0NBY0M7OztBQUVELCtDQUErQztBQUMvQyxNQUFhLFVBQVcsU0FBUSxVQUFVO0lBQ3hDLFlBQ1ksaUJBQXVDLEVBQ3ZDLGtCQUEwQjtRQUVwQyxLQUFLLENBQUMsaUJBQWlCLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztRQUhuQyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQXNCO1FBQ3ZDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBUTtJQUd0QyxDQUFDO0lBRU0sR0FBRyxDQUFDLEdBQVc7UUFDcEIsNkJBQTZCO1FBQzdCLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLHlCQUF5QixDQUNyRCxHQUFHLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxHQUFHLEdBQUcsQ0FDckMsQ0FBQztJQUNKLENBQUM7O0FBYkgsZ0NBY0MiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIEhhc2hpQ29ycCwgSW5jXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTVBMLTIuMFxuaW1wb3J0IHsgSVJlc29sdmFibGUsIFRva2VuLCBJUmVzb2x2ZUNvbnRleHQgfSBmcm9tIFwiLi90b2tlbnNcIjtcbmltcG9ydCB7XG4gIElJbnRlcnBvbGF0aW5nUGFyZW50LFxuICBJVGVycmFmb3JtQWRkcmVzc2FibGUsXG59IGZyb20gXCIuL3RlcnJhZm9ybS1hZGRyZXNzYWJsZVwiO1xuaW1wb3J0IHtcbiAgcHJvcGVydHlBY2Nlc3MsXG4gIEZuLFxuICBUZXJyYWZvcm1JdGVyYXRvcixcbiAgRHluYW1pY0xpc3RUZXJyYWZvcm1JdGVyYXRvcixcbn0gZnJvbSBcIi5cIjtcbmltcG9ydCB7IGNhcHR1cmVDcmVhdGlvblN0YWNrIH0gZnJvbSBcIi4vdG9rZW5zL3ByaXZhdGUvc3RhY2stdHJhY2VcIjtcbmltcG9ydCB7IHByb3ZpZGVyVmVyc2lvbk1pc21hdGNoIH0gZnJvbSBcIi4vZXJyb3JzXCI7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG5hYnN0cmFjdCBjbGFzcyBDb21wbGV4UmVzb2x2YWJsZSBpbXBsZW1lbnRzIElSZXNvbHZhYmxlLCBJVGVycmFmb3JtQWRkcmVzc2FibGUge1xuICBwdWJsaWMgcmVhZG9ubHkgY3JlYXRpb25TdGFjazogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJvdGVjdGVkIF9mcW4/OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHRlcnJhZm9ybVJlc291cmNlOiBJSW50ZXJwb2xhdGluZ1BhcmVudCxcbiAgICBwcm90ZWN0ZWQgdGVycmFmb3JtQXR0cmlidXRlOiBzdHJpbmcsXG4gICkge1xuICAgIHRoaXMuY3JlYXRpb25TdGFjayA9IGNhcHR1cmVDcmVhdGlvblN0YWNrKCk7XG4gIH1cblxuICBhYnN0cmFjdCBjb21wdXRlRnFuKCk6IHN0cmluZztcblxuICBnZXQgZnFuKCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLl9mcW4pIHtcbiAgICAgIHRoaXMuX2ZxbiA9IHRoaXMuY29tcHV0ZUZxbigpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9mcW47XG4gIH1cblxuICByZXNvbHZlKF9jb250ZXh0OiBJUmVzb2x2ZUNvbnRleHQpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmZxbjtcbiAgfVxuXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFRva2VuLmFzU3RyaW5nKHRoaXMpO1xuICB9XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG5hYnN0cmFjdCBjbGFzcyBDb21wbGV4Q29tcHV0ZWRBdHRyaWJ1dGVcbiAgZXh0ZW5kcyBDb21wbGV4UmVzb2x2YWJsZVxuICBpbXBsZW1lbnRzIElJbnRlcnBvbGF0aW5nUGFyZW50XG57XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCB0ZXJyYWZvcm1SZXNvdXJjZTogSUludGVycG9sYXRpbmdQYXJlbnQsXG4gICAgcHJvdGVjdGVkIHRlcnJhZm9ybUF0dHJpYnV0ZTogc3RyaW5nLFxuICApIHtcbiAgICBzdXBlcih0ZXJyYWZvcm1SZXNvdXJjZSwgdGVycmFmb3JtQXR0cmlidXRlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRTdHJpbmdBdHRyaWJ1dGUodGVycmFmb3JtQXR0cmlidXRlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gVG9rZW4uYXNTdHJpbmcodGhpcy5pbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKHRlcnJhZm9ybUF0dHJpYnV0ZSkpO1xuICB9XG5cbiAgcHVibGljIGdldE51bWJlckF0dHJpYnV0ZSh0ZXJyYWZvcm1BdHRyaWJ1dGU6IHN0cmluZykge1xuICAgIHJldHVybiBUb2tlbi5hc051bWJlcih0aGlzLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUodGVycmFmb3JtQXR0cmlidXRlKSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0TGlzdEF0dHJpYnV0ZSh0ZXJyYWZvcm1BdHRyaWJ1dGU6IHN0cmluZykge1xuICAgIHJldHVybiBUb2tlbi5hc0xpc3QodGhpcy5pbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKHRlcnJhZm9ybUF0dHJpYnV0ZSkpO1xuICB9XG5cbiAgcHVibGljIGdldEJvb2xlYW5BdHRyaWJ1dGUodGVycmFmb3JtQXR0cmlidXRlOiBzdHJpbmcpOiBJUmVzb2x2YWJsZSB7XG4gICAgcmV0dXJuIHRoaXMuaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZSh0ZXJyYWZvcm1BdHRyaWJ1dGUpO1xuICB9XG5cbiAgcHVibGljIGdldE51bWJlckxpc3RBdHRyaWJ1dGUodGVycmFmb3JtQXR0cmlidXRlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gVG9rZW4uYXNOdW1iZXJMaXN0KFxuICAgICAgdGhpcy5pbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKHRlcnJhZm9ybUF0dHJpYnV0ZSksXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRTdHJpbmdNYXBBdHRyaWJ1dGUodGVycmFmb3JtQXR0cmlidXRlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gVG9rZW4uYXNTdHJpbmdNYXAoXG4gICAgICB0aGlzLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUodGVycmFmb3JtQXR0cmlidXRlKSxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGdldE51bWJlck1hcEF0dHJpYnV0ZSh0ZXJyYWZvcm1BdHRyaWJ1dGU6IHN0cmluZykge1xuICAgIHJldHVybiBUb2tlbi5hc051bWJlck1hcChcbiAgICAgIHRoaXMuaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZSh0ZXJyYWZvcm1BdHRyaWJ1dGUpLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Qm9vbGVhbk1hcEF0dHJpYnV0ZSh0ZXJyYWZvcm1BdHRyaWJ1dGU6IHN0cmluZykge1xuICAgIHJldHVybiBUb2tlbi5hc0Jvb2xlYW5NYXAoXG4gICAgICB0aGlzLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUodGVycmFmb3JtQXR0cmlidXRlKSxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGdldEFueU1hcEF0dHJpYnV0ZSh0ZXJyYWZvcm1BdHRyaWJ1dGU6IHN0cmluZykge1xuICAgIHJldHVybiBUb2tlbi5hc0FueU1hcCh0aGlzLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUodGVycmFmb3JtQXR0cmlidXRlKSk7XG4gIH1cblxuICBwdWJsaWMgYWJzdHJhY3QgaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZSh0ZXJyYWZvcm1BdHRyaWJ1dGU6IHN0cmluZyk6IGFueTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbmV4cG9ydCBjbGFzcyBTdHJpbmdNYXBcbiAgZXh0ZW5kcyBDb21wbGV4UmVzb2x2YWJsZVxuICBpbXBsZW1lbnRzIElUZXJyYWZvcm1BZGRyZXNzYWJsZVxue1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgdGVycmFmb3JtUmVzb3VyY2U6IElJbnRlcnBvbGF0aW5nUGFyZW50LFxuICAgIHByb3RlY3RlZCB0ZXJyYWZvcm1BdHRyaWJ1dGU6IHN0cmluZyxcbiAgKSB7XG4gICAgc3VwZXIodGVycmFmb3JtUmVzb3VyY2UsIHRlcnJhZm9ybUF0dHJpYnV0ZSk7XG4gIH1cblxuICBwdWJsaWMgbG9va3VwKGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gVG9rZW4uYXNTdHJpbmcoXG4gICAgICB0aGlzLnRlcnJhZm9ybVJlc291cmNlLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUoXG4gICAgICAgIGAke3RoaXMudGVycmFmb3JtQXR0cmlidXRlfVtcIiR7a2V5fVwiXWAsXG4gICAgICApLFxuICAgICk7XG4gIH1cblxuICBjb21wdXRlRnFuKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFRva2VuLmFzU3RyaW5nKFxuICAgICAgdGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5pbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKHRoaXMudGVycmFmb3JtQXR0cmlidXRlKSxcbiAgICApO1xuICB9XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG5leHBvcnQgY2xhc3MgTnVtYmVyTWFwXG4gIGV4dGVuZHMgQ29tcGxleFJlc29sdmFibGVcbiAgaW1wbGVtZW50cyBJVGVycmFmb3JtQWRkcmVzc2FibGVcbntcbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHRlcnJhZm9ybVJlc291cmNlOiBJSW50ZXJwb2xhdGluZ1BhcmVudCxcbiAgICBwcm90ZWN0ZWQgdGVycmFmb3JtQXR0cmlidXRlOiBzdHJpbmcsXG4gICkge1xuICAgIHN1cGVyKHRlcnJhZm9ybVJlc291cmNlLCB0ZXJyYWZvcm1BdHRyaWJ1dGUpO1xuICB9XG5cbiAgcHVibGljIGxvb2t1cChrZXk6IHN0cmluZyk6IG51bWJlciB7XG4gICAgcmV0dXJuIFRva2VuLmFzTnVtYmVyKFxuICAgICAgdGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5pbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKFxuICAgICAgICBgJHt0aGlzLnRlcnJhZm9ybUF0dHJpYnV0ZX1bXCIke2tleX1cIl1gLFxuICAgICAgKSxcbiAgICApO1xuICB9XG5cbiAgY29tcHV0ZUZxbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBUb2tlbi5hc1N0cmluZyhcbiAgICAgIHRoaXMudGVycmFmb3JtUmVzb3VyY2UuaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZSh0aGlzLnRlcnJhZm9ybUF0dHJpYnV0ZSksXG4gICAgKTtcbiAgfVxufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuZXhwb3J0IGNsYXNzIEJvb2xlYW5NYXBcbiAgZXh0ZW5kcyBDb21wbGV4UmVzb2x2YWJsZVxuICBpbXBsZW1lbnRzIElUZXJyYWZvcm1BZGRyZXNzYWJsZVxue1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgdGVycmFmb3JtUmVzb3VyY2U6IElJbnRlcnBvbGF0aW5nUGFyZW50LFxuICAgIHByb3RlY3RlZCB0ZXJyYWZvcm1BdHRyaWJ1dGU6IHN0cmluZyxcbiAgKSB7XG4gICAgc3VwZXIodGVycmFmb3JtUmVzb3VyY2UsIHRlcnJhZm9ybUF0dHJpYnV0ZSk7XG4gIH1cblxuICBwdWJsaWMgbG9va3VwKGtleTogc3RyaW5nKTogSVJlc29sdmFibGUge1xuICAgIHJldHVybiB0aGlzLnRlcnJhZm9ybVJlc291cmNlLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUoXG4gICAgICBgJHt0aGlzLnRlcnJhZm9ybUF0dHJpYnV0ZX1bXCIke2tleX1cIl1gLFxuICAgICk7XG4gIH1cblxuICBjb21wdXRlRnFuKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFRva2VuLmFzU3RyaW5nKFxuICAgICAgdGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5pbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKHRoaXMudGVycmFmb3JtQXR0cmlidXRlKSxcbiAgICApO1xuICB9XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG5leHBvcnQgY2xhc3MgQW55TWFwIGV4dGVuZHMgQ29tcGxleFJlc29sdmFibGUgaW1wbGVtZW50cyBJVGVycmFmb3JtQWRkcmVzc2FibGUge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgdGVycmFmb3JtUmVzb3VyY2U6IElJbnRlcnBvbGF0aW5nUGFyZW50LFxuICAgIHByb3RlY3RlZCB0ZXJyYWZvcm1BdHRyaWJ1dGU6IHN0cmluZyxcbiAgKSB7XG4gICAgc3VwZXIodGVycmFmb3JtUmVzb3VyY2UsIHRlcnJhZm9ybUF0dHJpYnV0ZSk7XG4gIH1cblxuICBwdWJsaWMgbG9va3VwKGtleTogc3RyaW5nKTogYW55IHtcbiAgICByZXR1cm4gVG9rZW4uYXNBbnkoXG4gICAgICB0aGlzLnRlcnJhZm9ybVJlc291cmNlLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUoXG4gICAgICAgIGAke3RoaXMudGVycmFmb3JtQXR0cmlidXRlfVtcIiR7a2V5fVwiXWAsXG4gICAgICApLFxuICAgICk7XG4gIH1cblxuICBjb21wdXRlRnFuKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFRva2VuLmFzU3RyaW5nKFxuICAgICAgdGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5pbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKHRoaXMudGVycmFmb3JtQXR0cmlidXRlKSxcbiAgICApO1xuICB9XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG5leHBvcnQgY2xhc3MgU3RyaW5nTWFwTWFwXG4gIGV4dGVuZHMgQ29tcGxleFJlc29sdmFibGVcbiAgaW1wbGVtZW50cyBJVGVycmFmb3JtQWRkcmVzc2FibGVcbntcbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHRlcnJhZm9ybVJlc291cmNlOiBJSW50ZXJwb2xhdGluZ1BhcmVudCxcbiAgICBwcm90ZWN0ZWQgdGVycmFmb3JtQXR0cmlidXRlOiBzdHJpbmcsXG4gICkge1xuICAgIHN1cGVyKHRlcnJhZm9ybVJlc291cmNlLCB0ZXJyYWZvcm1BdHRyaWJ1dGUpO1xuICB9XG5cbiAgcHVibGljIGxvb2t1cChrZXk6IHN0cmluZyk6IFN0cmluZ01hcCB7XG4gICAgcmV0dXJuIG5ldyBTdHJpbmdNYXAoXG4gICAgICB0aGlzLnRlcnJhZm9ybVJlc291cmNlLFxuICAgICAgYCR7dGhpcy50ZXJyYWZvcm1BdHRyaWJ1dGV9W1wiJHtrZXl9XCJdYCxcbiAgICApO1xuICB9XG5cbiAgY29tcHV0ZUZxbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBUb2tlbi5hc1N0cmluZyhcbiAgICAgIHRoaXMudGVycmFmb3JtUmVzb3VyY2UuaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZSh0aGlzLnRlcnJhZm9ybUF0dHJpYnV0ZSksXG4gICAgKTtcbiAgfVxufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuZXhwb3J0IGNsYXNzIE51bWJlck1hcE1hcFxuICBleHRlbmRzIENvbXBsZXhSZXNvbHZhYmxlXG4gIGltcGxlbWVudHMgSVRlcnJhZm9ybUFkZHJlc3NhYmxlXG57XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCB0ZXJyYWZvcm1SZXNvdXJjZTogSUludGVycG9sYXRpbmdQYXJlbnQsXG4gICAgcHJvdGVjdGVkIHRlcnJhZm9ybUF0dHJpYnV0ZTogc3RyaW5nLFxuICApIHtcbiAgICBzdXBlcih0ZXJyYWZvcm1SZXNvdXJjZSwgdGVycmFmb3JtQXR0cmlidXRlKTtcbiAgfVxuXG4gIHB1YmxpYyBsb29rdXAoa2V5OiBzdHJpbmcpOiBOdW1iZXJNYXAge1xuICAgIHJldHVybiBuZXcgTnVtYmVyTWFwKFxuICAgICAgdGhpcy50ZXJyYWZvcm1SZXNvdXJjZSxcbiAgICAgIGAke3RoaXMudGVycmFmb3JtQXR0cmlidXRlfVtcIiR7a2V5fVwiXWAsXG4gICAgKTtcbiAgfVxuXG4gIGNvbXB1dGVGcW4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gVG9rZW4uYXNTdHJpbmcoXG4gICAgICB0aGlzLnRlcnJhZm9ybVJlc291cmNlLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUodGhpcy50ZXJyYWZvcm1BdHRyaWJ1dGUpLFxuICAgICk7XG4gIH1cbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbmV4cG9ydCBjbGFzcyBCb29sZWFuTWFwTWFwXG4gIGV4dGVuZHMgQ29tcGxleFJlc29sdmFibGVcbiAgaW1wbGVtZW50cyBJVGVycmFmb3JtQWRkcmVzc2FibGVcbntcbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHRlcnJhZm9ybVJlc291cmNlOiBJSW50ZXJwb2xhdGluZ1BhcmVudCxcbiAgICBwcm90ZWN0ZWQgdGVycmFmb3JtQXR0cmlidXRlOiBzdHJpbmcsXG4gICkge1xuICAgIHN1cGVyKHRlcnJhZm9ybVJlc291cmNlLCB0ZXJyYWZvcm1BdHRyaWJ1dGUpO1xuICB9XG5cbiAgcHVibGljIGxvb2t1cChrZXk6IHN0cmluZyk6IEJvb2xlYW5NYXAge1xuICAgIHJldHVybiBuZXcgQm9vbGVhbk1hcChcbiAgICAgIHRoaXMudGVycmFmb3JtUmVzb3VyY2UsXG4gICAgICBgJHt0aGlzLnRlcnJhZm9ybUF0dHJpYnV0ZX1bXCIke2tleX1cIl1gLFxuICAgICk7XG4gIH1cblxuICBjb21wdXRlRnFuKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFRva2VuLmFzU3RyaW5nKFxuICAgICAgdGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5pbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKHRoaXMudGVycmFmb3JtQXR0cmlidXRlKSxcbiAgICApO1xuICB9XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG5leHBvcnQgY2xhc3MgQW55TWFwTWFwXG4gIGV4dGVuZHMgQ29tcGxleFJlc29sdmFibGVcbiAgaW1wbGVtZW50cyBJVGVycmFmb3JtQWRkcmVzc2FibGVcbntcbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHRlcnJhZm9ybVJlc291cmNlOiBJSW50ZXJwb2xhdGluZ1BhcmVudCxcbiAgICBwcm90ZWN0ZWQgdGVycmFmb3JtQXR0cmlidXRlOiBzdHJpbmcsXG4gICkge1xuICAgIHN1cGVyKHRlcnJhZm9ybVJlc291cmNlLCB0ZXJyYWZvcm1BdHRyaWJ1dGUpO1xuICB9XG5cbiAgcHVibGljIGxvb2t1cChrZXk6IHN0cmluZyk6IEFueU1hcCB7XG4gICAgcmV0dXJuIG5ldyBBbnlNYXAoXG4gICAgICB0aGlzLnRlcnJhZm9ybVJlc291cmNlLFxuICAgICAgYCR7dGhpcy50ZXJyYWZvcm1BdHRyaWJ1dGV9W1wiJHtrZXl9XCJdYCxcbiAgICApO1xuICB9XG5cbiAgY29tcHV0ZUZxbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBUb2tlbi5hc1N0cmluZyhcbiAgICAgIHRoaXMudGVycmFmb3JtUmVzb3VyY2UuaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZSh0aGlzLnRlcnJhZm9ybUF0dHJpYnV0ZSksXG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIEdvaW5nIHRvIGJlIHJlcGxhY2VkIGJ5IEFycmF5IG9mIENvbXBsZXhMaXN0SXRlbVxuICogYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlXG4gKi9cbmV4cG9ydCBjbGFzcyBDb21wbGV4Q29tcHV0ZWRMaXN0IGV4dGVuZHMgQ29tcGxleENvbXB1dGVkQXR0cmlidXRlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHRlcnJhZm9ybVJlc291cmNlOiBJSW50ZXJwb2xhdGluZ1BhcmVudCxcbiAgICBwcm90ZWN0ZWQgdGVycmFmb3JtQXR0cmlidXRlOiBzdHJpbmcsXG4gICAgcHJvdGVjdGVkIGNvbXBsZXhDb21wdXRlZExpc3RJbmRleDogc3RyaW5nLFxuICAgIHByb3RlY3RlZCB3cmFwc1NldD86IGJvb2xlYW4sXG4gICkge1xuICAgIHN1cGVyKHRlcnJhZm9ybVJlc291cmNlLCB0ZXJyYWZvcm1BdHRyaWJ1dGUpO1xuICAgIHRocm93IHByb3ZpZGVyVmVyc2lvbk1pc21hdGNoKCk7XG4gIH1cblxuICBwdWJsaWMgaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZShwcm9wZXJ0eTogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMud3JhcHNTZXQpIHtcbiAgICAgIHJldHVybiBwcm9wZXJ0eUFjY2VzcyhcbiAgICAgICAgRm4udG9saXN0KFxuICAgICAgICAgIHRoaXMudGVycmFmb3JtUmVzb3VyY2UuaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZShcbiAgICAgICAgICAgIHRoaXMudGVycmFmb3JtQXR0cmlidXRlLFxuICAgICAgICAgICksXG4gICAgICAgICksXG4gICAgICAgIFt0aGlzLmNvbXBsZXhDb21wdXRlZExpc3RJbmRleCwgcHJvcGVydHldLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5pbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKFxuICAgICAgYCR7dGhpcy50ZXJyYWZvcm1BdHRyaWJ1dGV9WyR7dGhpcy5jb21wbGV4Q29tcHV0ZWRMaXN0SW5kZXh9XS4ke3Byb3BlcnR5fWAsXG4gICAgKTtcbiAgfVxuXG4gIGNvbXB1dGVGcW4oKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy53cmFwc1NldCkge1xuICAgICAgcmV0dXJuIFRva2VuLmFzU3RyaW5nKFxuICAgICAgICBwcm9wZXJ0eUFjY2VzcyhcbiAgICAgICAgICBGbi50b2xpc3QoXG4gICAgICAgICAgICB0aGlzLnRlcnJhZm9ybVJlc291cmNlLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUoXG4gICAgICAgICAgICAgIHRoaXMudGVycmFmb3JtQXR0cmlidXRlLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICApLFxuICAgICAgICAgIFt0aGlzLmNvbXBsZXhDb21wdXRlZExpc3RJbmRleF0sXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBUb2tlbi5hc1N0cmluZyhcbiAgICAgIHRoaXMudGVycmFmb3JtUmVzb3VyY2UuaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZShcbiAgICAgICAgYCR7dGhpcy50ZXJyYWZvcm1BdHRyaWJ1dGV9WyR7dGhpcy5jb21wbGV4Q29tcHV0ZWRMaXN0SW5kZXh9XWAsXG4gICAgICApLFxuICAgICk7XG4gIH1cbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBDb21wbGV4TGlzdFxuICBleHRlbmRzIENvbXBsZXhSZXNvbHZhYmxlXG4gIGltcGxlbWVudHMgSVRlcnJhZm9ybUFkZHJlc3NhYmxlXG57XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCB0ZXJyYWZvcm1SZXNvdXJjZTogSUludGVycG9sYXRpbmdQYXJlbnQsXG4gICAgcHJvdGVjdGVkIHRlcnJhZm9ybUF0dHJpYnV0ZTogc3RyaW5nLFxuICAgIHByb3RlY3RlZCB3cmFwc1NldDogYm9vbGVhbixcbiAgKSB7XG4gICAgc3VwZXIodGVycmFmb3JtUmVzb3VyY2UsIHRlcnJhZm9ybUF0dHJpYnV0ZSk7XG4gIH1cblxuICBjb21wdXRlRnFuKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMud3JhcHNTZXQpIHtcbiAgICAgIHJldHVybiBUb2tlbi5hc1N0cmluZyhcbiAgICAgICAgRm4udG9saXN0KFxuICAgICAgICAgIHRoaXMudGVycmFmb3JtUmVzb3VyY2UuaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZShcbiAgICAgICAgICAgIHRoaXMudGVycmFmb3JtQXR0cmlidXRlLFxuICAgICAgICAgICksXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gVG9rZW4uYXNTdHJpbmcoXG4gICAgICAgIHRoaXMudGVycmFmb3JtUmVzb3VyY2UuaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZShcbiAgICAgICAgICB0aGlzLnRlcnJhZm9ybUF0dHJpYnV0ZSxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0aW5nIGFuIGl0ZXJhdG9yIGZvciB0aGlzIGNvbXBsZXggbGlzdC5cbiAgICogVGhlIGxpc3Qgd2lsbCBiZSBjb252ZXJ0ZWQgaW50byBhIG1hcCB3aXRoIHRoZSBtYXBLZXlBdHRyaWJ1dGVOYW1lIGFzIHRoZSBrZXkuXG4gICAqIEBwYXJhbSBtYXBLZXlBdHRyaWJ1dGVOYW1lXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBwdWJsaWMgYWxsV2l0aE1hcEtleShcbiAgICBtYXBLZXlBdHRyaWJ1dGVOYW1lOiBzdHJpbmcsXG4gICk6IER5bmFtaWNMaXN0VGVycmFmb3JtSXRlcmF0b3Ige1xuICAgIHJldHVybiBUZXJyYWZvcm1JdGVyYXRvci5mcm9tQ29tcGxleExpc3QoXG4gICAgICBUb2tlbi5hc0FueSh0aGlzLmNvbXB1dGVGcW4oKSksXG4gICAgICBtYXBLZXlBdHRyaWJ1dGVOYW1lLFxuICAgICk7XG4gIH1cbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbmV4cG9ydCBjbGFzcyBCb29sZWFuTGlzdCBleHRlbmRzIENvbXBsZXhMaXN0IHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHRlcnJhZm9ybVJlc291cmNlOiBJSW50ZXJwb2xhdGluZ1BhcmVudCxcbiAgICBwcm90ZWN0ZWQgdGVycmFmb3JtQXR0cmlidXRlOiBzdHJpbmcsXG4gICAgcHJvdGVjdGVkIHdyYXBzU2V0OiBib29sZWFuLFxuICApIHtcbiAgICBzdXBlcih0ZXJyYWZvcm1SZXNvdXJjZSwgdGVycmFmb3JtQXR0cmlidXRlLCB3cmFwc1NldCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0KGluZGV4OiBudW1iZXIpOiBJUmVzb2x2YWJsZSB7XG4gICAgcmV0dXJuIEZuLmVsZW1lbnQodGhpcywgaW5kZXgpO1xuICB9XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG5leHBvcnQgY2xhc3MgU3RyaW5nTGlzdExpc3QgZXh0ZW5kcyBDb21wbGV4TGlzdCB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCB0ZXJyYWZvcm1SZXNvdXJjZTogSUludGVycG9sYXRpbmdQYXJlbnQsXG4gICAgcHJvdGVjdGVkIHRlcnJhZm9ybUF0dHJpYnV0ZTogc3RyaW5nLFxuICAgIHByb3RlY3RlZCB3cmFwc1NldDogYm9vbGVhbixcbiAgKSB7XG4gICAgc3VwZXIodGVycmFmb3JtUmVzb3VyY2UsIHRlcnJhZm9ybUF0dHJpYnV0ZSwgd3JhcHNTZXQpO1xuICB9XG5cbiAgcHVibGljIGdldChpbmRleDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIFRva2VuLmFzTGlzdChcbiAgICAgIHRoaXMudGVycmFmb3JtUmVzb3VyY2UuaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZShcbiAgICAgICAgYCR7dGhpcy50ZXJyYWZvcm1BdHRyaWJ1dGV9WyR7aW5kZXh9XWAsXG4gICAgICApLFxuICAgICk7XG4gIH1cbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbmV4cG9ydCBjbGFzcyBOdW1iZXJMaXN0TGlzdCBleHRlbmRzIENvbXBsZXhMaXN0IHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHRlcnJhZm9ybVJlc291cmNlOiBJSW50ZXJwb2xhdGluZ1BhcmVudCxcbiAgICBwcm90ZWN0ZWQgdGVycmFmb3JtQXR0cmlidXRlOiBzdHJpbmcsXG4gICAgcHJvdGVjdGVkIHdyYXBzU2V0OiBib29sZWFuLFxuICApIHtcbiAgICBzdXBlcih0ZXJyYWZvcm1SZXNvdXJjZSwgdGVycmFmb3JtQXR0cmlidXRlLCB3cmFwc1NldCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0KGluZGV4OiBudW1iZXIpIHtcbiAgICByZXR1cm4gVG9rZW4uYXNOdW1iZXJMaXN0KFxuICAgICAgdGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5pbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKFxuICAgICAgICBgJHt0aGlzLnRlcnJhZm9ybUF0dHJpYnV0ZX1bJHtpbmRleH1dYCxcbiAgICAgICksXG4gICAgKTtcbiAgfVxufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuZXhwb3J0IGNsYXNzIEJvb2xlYW5MaXN0TGlzdCBleHRlbmRzIENvbXBsZXhMaXN0IHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHRlcnJhZm9ybVJlc291cmNlOiBJSW50ZXJwb2xhdGluZ1BhcmVudCxcbiAgICBwcm90ZWN0ZWQgdGVycmFmb3JtQXR0cmlidXRlOiBzdHJpbmcsXG4gICAgcHJvdGVjdGVkIHdyYXBzU2V0OiBib29sZWFuLFxuICApIHtcbiAgICBzdXBlcih0ZXJyYWZvcm1SZXNvdXJjZSwgdGVycmFmb3JtQXR0cmlidXRlLCB3cmFwc1NldCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0KGluZGV4OiBudW1iZXIpIHtcbiAgICAvLyBUaGlzIGlzbid0IGZ1bGx5IHN1cHBvcnRlZFxuICAgIHJldHVybiB0aGlzLnRlcnJhZm9ybVJlc291cmNlLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUoXG4gICAgICBgJHt0aGlzLnRlcnJhZm9ybUF0dHJpYnV0ZX1bJHtpbmRleH1dYCxcbiAgICApO1xuICB9XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG5leHBvcnQgY2xhc3MgQW55TGlzdExpc3QgZXh0ZW5kcyBDb21wbGV4TGlzdCB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCB0ZXJyYWZvcm1SZXNvdXJjZTogSUludGVycG9sYXRpbmdQYXJlbnQsXG4gICAgcHJvdGVjdGVkIHRlcnJhZm9ybUF0dHJpYnV0ZTogc3RyaW5nLFxuICAgIHByb3RlY3RlZCB3cmFwc1NldDogYm9vbGVhbixcbiAgKSB7XG4gICAgc3VwZXIodGVycmFmb3JtUmVzb3VyY2UsIHRlcnJhZm9ybUF0dHJpYnV0ZSwgd3JhcHNTZXQpO1xuICB9XG5cbiAgcHVibGljIGdldChpbmRleDogbnVtYmVyKSB7XG4gICAgLy8gVGhpcyBpc24ndCBmdWxseSBzdXBwb3J0ZWRcbiAgICByZXR1cm4gdGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5pbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKFxuICAgICAgYCR7dGhpcy50ZXJyYWZvcm1BdHRyaWJ1dGV9WyR7aW5kZXh9XWAsXG4gICAgKTtcbiAgfVxufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENvbXBsZXhNYXBcbiAgZXh0ZW5kcyBDb21wbGV4UmVzb2x2YWJsZVxuICBpbXBsZW1lbnRzIElUZXJyYWZvcm1BZGRyZXNzYWJsZVxue1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgdGVycmFmb3JtUmVzb3VyY2U6IElJbnRlcnBvbGF0aW5nUGFyZW50LFxuICAgIHByb3RlY3RlZCB0ZXJyYWZvcm1BdHRyaWJ1dGU6IHN0cmluZyxcbiAgKSB7XG4gICAgc3VwZXIodGVycmFmb3JtUmVzb3VyY2UsIHRlcnJhZm9ybUF0dHJpYnV0ZSk7XG4gIH1cblxuICBjb21wdXRlRnFuKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFRva2VuLmFzU3RyaW5nKFxuICAgICAgdGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5pbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKHRoaXMudGVycmFmb3JtQXR0cmlidXRlKSxcbiAgICApO1xuICB9XG5cbiAgaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZShwcm9wZXJ0eTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHByb3BlcnR5QWNjZXNzKFxuICAgICAgdGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5pbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKHRoaXMudGVycmFmb3JtQXR0cmlidXRlKSxcbiAgICAgIFtwcm9wZXJ0eV0sXG4gICAgKTtcbiAgfVxufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuZXhwb3J0IGNsYXNzIENvbXBsZXhPYmplY3QgZXh0ZW5kcyBDb21wbGV4Q29tcHV0ZWRBdHRyaWJ1dGUge1xuICAvKipcbiAgICogQHBhcmFtIHRlcnJhZm9ybVJlc291cmNlXG4gICAqIEBwYXJhbSB0ZXJyYWZvcm1BdHRyaWJ1dGVcbiAgICogQHBhcmFtIGNvbXBsZXhPYmplY3RJbmRleCB0aGUgaW5kZXggb2YgdGhlIGNvbXBsZXggb2JqZWN0IGluIGEgbGlzdFxuICAgKiBAcGFyYW0gY29tcGxleE9iamVjdElzRnJvbVNldCBzZXQgdG8gdHJ1ZSBpZiB0aGlzIGl0ZW0gaXMgZnJvbSBpbnNpZGUgYSBzZXQgYW5kIG5lZWRzIHRvbGlzdCgpIGZvciBhY2Nlc3NpbmcgaXRcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0IHRvIFwiMFwiIGZvciBzaW5nbGUgbGlzdCBpdGVtc1xuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHRlcnJhZm9ybVJlc291cmNlOiBJSW50ZXJwb2xhdGluZ1BhcmVudCxcbiAgICBwcm90ZWN0ZWQgdGVycmFmb3JtQXR0cmlidXRlOiBzdHJpbmcsXG4gICAgcHJvdGVjdGVkIGNvbXBsZXhPYmplY3RJc0Zyb21TZXQ6IGJvb2xlYW4sXG4gICAgcHJvdGVjdGVkIGNvbXBsZXhPYmplY3RJbmRleD86IG51bWJlciB8IHN0cmluZyxcbiAgKSB7XG4gICAgc3VwZXIodGVycmFmb3JtUmVzb3VyY2UsIHRlcnJhZm9ybUF0dHJpYnV0ZSk7XG4gIH1cblxuICBwdWJsaWMgaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZShwcm9wZXJ0eTogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMuY29tcGxleE9iamVjdElzRnJvbVNldCkge1xuICAgICAgcmV0dXJuIHByb3BlcnR5QWNjZXNzKFxuICAgICAgICBGbi50b2xpc3QoXG4gICAgICAgICAgdGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5pbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKFxuICAgICAgICAgICAgdGhpcy50ZXJyYWZvcm1BdHRyaWJ1dGUsXG4gICAgICAgICAgKSxcbiAgICAgICAgKSxcbiAgICAgICAgW3RoaXMuY29tcGxleE9iamVjdEluZGV4LCBwcm9wZXJ0eV0sXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnRlcnJhZm9ybVJlc291cmNlLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUoXG4gICAgICB0aGlzLmNvbXBsZXhPYmplY3RJbmRleCAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gYCR7dGhpcy50ZXJyYWZvcm1BdHRyaWJ1dGV9WyR7dGhpcy5jb21wbGV4T2JqZWN0SW5kZXh9XS4ke3Byb3BlcnR5fWBcbiAgICAgICAgOiBgJHt0aGlzLnRlcnJhZm9ybUF0dHJpYnV0ZX0uJHtwcm9wZXJ0eX1gLFxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaW50ZXJwb2xhdGlvbkFzTGlzdCgpIHtcbiAgICByZXR1cm4gdGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5pbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKFxuICAgICAgYCR7dGhpcy50ZXJyYWZvcm1BdHRyaWJ1dGV9LipgLFxuICAgICk7XG4gIH1cblxuICBjb21wdXRlRnFuKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuY29tcGxleE9iamVjdElzRnJvbVNldCkge1xuICAgICAgcmV0dXJuIFRva2VuLmFzU3RyaW5nKFxuICAgICAgICBwcm9wZXJ0eUFjY2VzcyhcbiAgICAgICAgICBGbi50b2xpc3QoXG4gICAgICAgICAgICB0aGlzLnRlcnJhZm9ybVJlc291cmNlLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUoXG4gICAgICAgICAgICAgIHRoaXMudGVycmFmb3JtQXR0cmlidXRlLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICApLFxuICAgICAgICAgIFt0aGlzLmNvbXBsZXhPYmplY3RJbmRleF0sXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBUb2tlbi5hc1N0cmluZyhcbiAgICAgIHRoaXMudGVycmFmb3JtUmVzb3VyY2UuaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZShcbiAgICAgICAgdGhpcy5jb21wbGV4T2JqZWN0SW5kZXggIT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gYCR7dGhpcy50ZXJyYWZvcm1BdHRyaWJ1dGV9WyR7dGhpcy5jb21wbGV4T2JqZWN0SW5kZXh9XWBcbiAgICAgICAgICA6IHRoaXMudGVycmFmb3JtQXR0cmlidXRlLFxuICAgICAgKSxcbiAgICApO1xuICB9XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTWFwTGlzdFxuICBleHRlbmRzIENvbXBsZXhSZXNvbHZhYmxlXG4gIGltcGxlbWVudHMgSVRlcnJhZm9ybUFkZHJlc3NhYmxlLCBJSW50ZXJwb2xhdGluZ1BhcmVudFxue1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgdGVycmFmb3JtUmVzb3VyY2U6IElJbnRlcnBvbGF0aW5nUGFyZW50LFxuICAgIHByb3RlY3RlZCB0ZXJyYWZvcm1BdHRyaWJ1dGU6IHN0cmluZyxcbiAgICBwcm90ZWN0ZWQgd3JhcHNTZXQ6IGJvb2xlYW4sXG4gICkge1xuICAgIHN1cGVyKHRlcnJhZm9ybVJlc291cmNlLCB0ZXJyYWZvcm1BdHRyaWJ1dGUpO1xuICB9XG5cbiAgY29tcHV0ZUZxbigpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLndyYXBzU2V0KSB7XG4gICAgICByZXR1cm4gVG9rZW4uYXNTdHJpbmcoXG4gICAgICAgIEZuLnRvbGlzdChcbiAgICAgICAgICB0aGlzLnRlcnJhZm9ybVJlc291cmNlLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUoXG4gICAgICAgICAgICB0aGlzLnRlcnJhZm9ybUF0dHJpYnV0ZSxcbiAgICAgICAgICApLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFRva2VuLmFzU3RyaW5nKFxuICAgICAgICB0aGlzLnRlcnJhZm9ybVJlc291cmNlLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUoXG4gICAgICAgICAgdGhpcy50ZXJyYWZvcm1BdHRyaWJ1dGUsXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUocHJvcGVydHk6IHN0cmluZyk6IElSZXNvbHZhYmxlIHtcbiAgICBpZiAodGhpcy53cmFwc1NldCkge1xuICAgICAgY29uc3QgbWF0Y2hlcyA9IHByb3BlcnR5Lm1hdGNoKC9cXFsoW15cXF1dKilcXF0vKTsgLy8gbmVlZCB0byBleHRyYWN0IG91dCB0aGUgaW5kZXhcbiAgICAgIGlmIChtYXRjaGVzKSB7XG4gICAgICAgIHJldHVybiBwcm9wZXJ0eUFjY2VzcyhcbiAgICAgICAgICBGbi50b2xpc3QoXG4gICAgICAgICAgICB0aGlzLnRlcnJhZm9ybVJlc291cmNlLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUoXG4gICAgICAgICAgICAgIHRoaXMudGVycmFmb3JtQXR0cmlidXRlLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICApLFxuICAgICAgICAgIFttYXRjaGVzWzFdLCBwcm9wZXJ0eV0sXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMudGVycmFmb3JtUmVzb3VyY2UuaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZShcbiAgICAgIGAke3RoaXMudGVycmFmb3JtQXR0cmlidXRlfSR7cHJvcGVydHl9YCxcbiAgICApO1xuICB9XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG5leHBvcnQgY2xhc3MgU3RyaW5nTWFwTGlzdCBleHRlbmRzIE1hcExpc3Qge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgdGVycmFmb3JtUmVzb3VyY2U6IElJbnRlcnBvbGF0aW5nUGFyZW50LFxuICAgIHByb3RlY3RlZCB0ZXJyYWZvcm1BdHRyaWJ1dGU6IHN0cmluZyxcbiAgICBwcm90ZWN0ZWQgd3JhcHNTZXQ6IGJvb2xlYW4sXG4gICkge1xuICAgIHN1cGVyKHRlcnJhZm9ybVJlc291cmNlLCB0ZXJyYWZvcm1BdHRyaWJ1dGUsIHdyYXBzU2V0KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQoaW5kZXg6IG51bWJlcikge1xuICAgIHJldHVybiBuZXcgU3RyaW5nTWFwKHRoaXMsIGBbJHtpbmRleH1dYCk7XG4gIH1cbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbmV4cG9ydCBjbGFzcyBOdW1iZXJNYXBMaXN0IGV4dGVuZHMgTWFwTGlzdCB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCB0ZXJyYWZvcm1SZXNvdXJjZTogSUludGVycG9sYXRpbmdQYXJlbnQsXG4gICAgcHJvdGVjdGVkIHRlcnJhZm9ybUF0dHJpYnV0ZTogc3RyaW5nLFxuICAgIHByb3RlY3RlZCB3cmFwc1NldDogYm9vbGVhbixcbiAgKSB7XG4gICAgc3VwZXIodGVycmFmb3JtUmVzb3VyY2UsIHRlcnJhZm9ybUF0dHJpYnV0ZSwgd3JhcHNTZXQpO1xuICB9XG5cbiAgcHVibGljIGdldChpbmRleDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIG5ldyBOdW1iZXJNYXAodGhpcywgYFske2luZGV4fV1gKTtcbiAgfVxufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuZXhwb3J0IGNsYXNzIEJvb2xlYW5NYXBMaXN0IGV4dGVuZHMgTWFwTGlzdCB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCB0ZXJyYWZvcm1SZXNvdXJjZTogSUludGVycG9sYXRpbmdQYXJlbnQsXG4gICAgcHJvdGVjdGVkIHRlcnJhZm9ybUF0dHJpYnV0ZTogc3RyaW5nLFxuICAgIHByb3RlY3RlZCB3cmFwc1NldDogYm9vbGVhbixcbiAgKSB7XG4gICAgc3VwZXIodGVycmFmb3JtUmVzb3VyY2UsIHRlcnJhZm9ybUF0dHJpYnV0ZSwgd3JhcHNTZXQpO1xuICB9XG5cbiAgcHVibGljIGdldChpbmRleDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIG5ldyBCb29sZWFuTWFwKHRoaXMsIGBbJHtpbmRleH1dYCk7XG4gIH1cbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbmV4cG9ydCBjbGFzcyBBbnlNYXBMaXN0IGV4dGVuZHMgTWFwTGlzdCB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCB0ZXJyYWZvcm1SZXNvdXJjZTogSUludGVycG9sYXRpbmdQYXJlbnQsXG4gICAgcHJvdGVjdGVkIHRlcnJhZm9ybUF0dHJpYnV0ZTogc3RyaW5nLFxuICAgIHByb3RlY3RlZCB3cmFwc1NldDogYm9vbGVhbixcbiAgKSB7XG4gICAgc3VwZXIodGVycmFmb3JtUmVzb3VyY2UsIHRlcnJhZm9ybUF0dHJpYnV0ZSwgd3JhcHNTZXQpO1xuICB9XG5cbiAgcHVibGljIGdldChpbmRleDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIG5ldyBBbnlNYXAodGhpcywgYFske2luZGV4fV1gKTtcbiAgfVxufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuZXhwb3J0IGNsYXNzIFN0cmluZ0xpc3RNYXAgZXh0ZW5kcyBDb21wbGV4TWFwIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHRlcnJhZm9ybVJlc291cmNlOiBJSW50ZXJwb2xhdGluZ1BhcmVudCxcbiAgICBwcm90ZWN0ZWQgdGVycmFmb3JtQXR0cmlidXRlOiBzdHJpbmcsXG4gICkge1xuICAgIHN1cGVyKHRlcnJhZm9ybVJlc291cmNlLCB0ZXJyYWZvcm1BdHRyaWJ1dGUpO1xuICB9XG5cbiAgcHVibGljIGdldChrZXk6IHN0cmluZykge1xuICAgIHJldHVybiBUb2tlbi5hc0xpc3QoXG4gICAgICB0aGlzLnRlcnJhZm9ybVJlc291cmNlLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUoXG4gICAgICAgIGAke3RoaXMudGVycmFmb3JtQXR0cmlidXRlfVske2tleX1dYCxcbiAgICAgICksXG4gICAgKTtcbiAgfVxufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuZXhwb3J0IGNsYXNzIE51bWJlckxpc3RNYXAgZXh0ZW5kcyBDb21wbGV4TWFwIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHRlcnJhZm9ybVJlc291cmNlOiBJSW50ZXJwb2xhdGluZ1BhcmVudCxcbiAgICBwcm90ZWN0ZWQgdGVycmFmb3JtQXR0cmlidXRlOiBzdHJpbmcsXG4gICkge1xuICAgIHN1cGVyKHRlcnJhZm9ybVJlc291cmNlLCB0ZXJyYWZvcm1BdHRyaWJ1dGUpO1xuICB9XG5cbiAgcHVibGljIGdldChrZXk6IHN0cmluZykge1xuICAgIHJldHVybiBUb2tlbi5hc051bWJlckxpc3QoXG4gICAgICB0aGlzLnRlcnJhZm9ybVJlc291cmNlLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUoXG4gICAgICAgIGAke3RoaXMudGVycmFmb3JtQXR0cmlidXRlfVske2tleX1dYCxcbiAgICAgICksXG4gICAgKTtcbiAgfVxufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuZXhwb3J0IGNsYXNzIEJvb2xlYW5MaXN0TWFwIGV4dGVuZHMgQ29tcGxleE1hcCB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCB0ZXJyYWZvcm1SZXNvdXJjZTogSUludGVycG9sYXRpbmdQYXJlbnQsXG4gICAgcHJvdGVjdGVkIHRlcnJhZm9ybUF0dHJpYnV0ZTogc3RyaW5nLFxuICApIHtcbiAgICBzdXBlcih0ZXJyYWZvcm1SZXNvdXJjZSwgdGVycmFmb3JtQXR0cmlidXRlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQoa2V5OiBzdHJpbmcpIHtcbiAgICAvLyBUaGlzIGlzbid0IGZ1bGx5IHN1cHBvcnRlZFxuICAgIHJldHVybiB0aGlzLnRlcnJhZm9ybVJlc291cmNlLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUoXG4gICAgICBgJHt0aGlzLnRlcnJhZm9ybUF0dHJpYnV0ZX1bJHtrZXl9XWAsXG4gICAgKTtcbiAgfVxufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuZXhwb3J0IGNsYXNzIEFueUxpc3RNYXAgZXh0ZW5kcyBDb21wbGV4TWFwIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHRlcnJhZm9ybVJlc291cmNlOiBJSW50ZXJwb2xhdGluZ1BhcmVudCxcbiAgICBwcm90ZWN0ZWQgdGVycmFmb3JtQXR0cmlidXRlOiBzdHJpbmcsXG4gICkge1xuICAgIHN1cGVyKHRlcnJhZm9ybVJlc291cmNlLCB0ZXJyYWZvcm1BdHRyaWJ1dGUpO1xuICB9XG5cbiAgcHVibGljIGdldChrZXk6IHN0cmluZykge1xuICAgIC8vIFRoaXMgaXNuJ3QgZnVsbHkgc3VwcG9ydGVkXG4gICAgcmV0dXJuIHRoaXMudGVycmFmb3JtUmVzb3VyY2UuaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZShcbiAgICAgIGAke3RoaXMudGVycmFmb3JtQXR0cmlidXRlfVske2tleX1dYCxcbiAgICApO1xuICB9XG59XG4iXX0=
590
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGxleC1jb21wdXRlZC1saXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbXBsZXgtY29tcHV0ZWQtbGlzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsK0JBQStCO0FBQy9CLG1DQUFtQztBQUNuQyxxQ0FBK0Q7QUFLL0Qsd0JBS1c7QUFDWCw4REFBb0U7QUFDcEUscUNBQW1EO0FBRW5ELCtDQUErQztBQUMvQyxNQUFlLGlCQUFpQjtJQVNsQjtJQUNBO0lBVEksYUFBYSxDQUFXO0lBRXhDOztPQUVHO0lBQ08sSUFBSSxDQUFVO0lBRXhCLFlBQ1ksaUJBQXVDLEVBQ3ZDLGtCQUEwQjtRQUQxQixzQkFBaUIsR0FBakIsaUJBQWlCLENBQXNCO1FBQ3ZDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBUTtRQUVwQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUEsa0NBQW9CLEdBQUUsQ0FBQztJQUM5QyxDQUFDO0lBSUQsSUFBSSxHQUFHO1FBQ0wsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNmLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2hDLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbkIsQ0FBQztJQUVELE9BQU8sQ0FBQyxRQUF5QjtRQUMvQixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUM7SUFDbEIsQ0FBQztJQUVELFFBQVE7UUFDTixPQUFPLGNBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDOUIsQ0FBQztDQUNGO0FBRUQsK0NBQStDO0FBQy9DLE1BQWUsd0JBQ2IsU0FBUSxpQkFBaUI7SUFJYjtJQUNBO0lBRlosWUFDWSxpQkFBdUMsRUFDdkMsa0JBQTBCO1FBRXBDLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1FBSG5DLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBc0I7UUFD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Qzs7QUFkSCxzQ0FlQztBQUVELCtDQUErQztBQUMvQyxNQUFhLGNBQWUsU0FBUSxVQUFVO0lBRWhDO0lBQ0E7O0lBRlosWUFDWSxpQkFBdUMsRUFDdkMsa0JBQTBCO1FBRXBDLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1FBSG5DLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBc0I7UUFDdkMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFRO0lBR3RDLENBQUM7SUFFTSxHQUFHLENBQUMsR0FBVztRQUNwQiw2QkFBNkI7UUFDN0IsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMseUJBQXlCLENBQ3JELEdBQUcsSUFBSSxDQUFDLGtCQUFrQixJQUFJLEdBQUcsR0FBRyxDQUNyQyxDQUFDO0lBQ0osQ0FBQzs7QUFiSCx3Q0FjQztBQUVELCtDQUErQztBQUMvQyxNQUFhLFVBQVcsU0FBUSxVQUFVO0lBRTVCO0lBQ0E7O0lBRlosWUFDWSxpQkFBdUMsRUFDdkMsa0JBQTBCO1FBRXBDLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1FBSG5DLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBc0I7UUFDdkMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFRO0lBR3RDLENBQUM7SUFFTSxHQUFHLENBQUMsR0FBVztRQUNwQiw2QkFBNkI7UUFDN0IsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMseUJBQXlCLENBQ3JELEdBQUcsSUFBSSxDQUFDLGtCQUFrQixJQUFJLEdBQUcsR0FBRyxDQUNyQyxDQUFDO0lBQ0osQ0FBQzs7QUFiSCxnQ0FjQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG5pbXBvcnQgeyBJUmVzb2x2YWJsZSwgVG9rZW4sIElSZXNvbHZlQ29udGV4dCB9IGZyb20gXCIuL3Rva2Vuc1wiO1xuaW1wb3J0IHtcbiAgSUludGVycG9sYXRpbmdQYXJlbnQsXG4gIElUZXJyYWZvcm1BZGRyZXNzYWJsZSxcbn0gZnJvbSBcIi4vdGVycmFmb3JtLWFkZHJlc3NhYmxlXCI7XG5pbXBvcnQge1xuICBwcm9wZXJ0eUFjY2VzcyxcbiAgRm4sXG4gIFRlcnJhZm9ybUl0ZXJhdG9yLFxuICBEeW5hbWljTGlzdFRlcnJhZm9ybUl0ZXJhdG9yLFxufSBmcm9tIFwiLlwiO1xuaW1wb3J0IHsgY2FwdHVyZUNyZWF0aW9uU3RhY2sgfSBmcm9tIFwiLi90b2tlbnMvcHJpdmF0ZS9zdGFjay10cmFjZVwiO1xuaW1wb3J0IHsgcHJvdmlkZXJWZXJzaW9uTWlzbWF0Y2ggfSBmcm9tIFwiLi9lcnJvcnNcIjtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbmFic3RyYWN0IGNsYXNzIENvbXBsZXhSZXNvbHZhYmxlIGltcGxlbWVudHMgSVJlc29sdmFibGUsIElUZXJyYWZvcm1BZGRyZXNzYWJsZSB7XG4gIHB1YmxpYyByZWFkb25seSBjcmVhdGlvblN0YWNrOiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcm90ZWN0ZWQgX2Zxbj86IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgdGVycmFmb3JtUmVzb3VyY2U6IElJbnRlcnBvbGF0aW5nUGFyZW50LFxuICAgIHByb3RlY3RlZCB0ZXJyYWZvcm1BdHRyaWJ1dGU6IHN0cmluZyxcbiAgKSB7XG4gICAgdGhpcy5jcmVhdGlvblN0YWNrID0gY2FwdHVyZUNyZWF0aW9uU3RhY2soKTtcbiAgfVxuXG4gIGFic3RyYWN0IGNvbXB1dGVGcW4oKTogc3RyaW5nO1xuXG4gIGdldCBmcW4oKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuX2Zxbikge1xuICAgICAgdGhpcy5fZnFuID0gdGhpcy5jb21wdXRlRnFuKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2ZxbjtcbiAgfVxuXG4gIHJlc29sdmUoX2NvbnRleHQ6IElSZXNvbHZlQ29udGV4dCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZnFuO1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gVG9rZW4uYXNTdHJpbmcodGhpcyk7XG4gIH1cbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbmFic3RyYWN0IGNsYXNzIENvbXBsZXhDb21wdXRlZEF0dHJpYnV0ZVxuICBleHRlbmRzIENvbXBsZXhSZXNvbHZhYmxlXG4gIGltcGxlbWVudHMgSUludGVycG9sYXRpbmdQYXJlbnRcbntcbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHRlcnJhZm9ybVJlc291cmNlOiBJSW50ZXJwb2xhdGluZ1BhcmVudCxcbiAgICBwcm90ZWN0ZWQgdGVycmFmb3JtQXR0cmlidXRlOiBzdHJpbmcsXG4gICkge1xuICAgIHN1cGVyKHRlcnJhZm9ybVJlc291cmNlLCB0ZXJyYWZvcm1BdHRyaWJ1dGUpO1xuICB9XG5cbiAgcHVibGljIGdldFN0cmluZ0F0dHJpYnV0ZSh0ZXJyYWZvcm1BdHRyaWJ1dGU6IHN0cmluZykge1xuICAgIHJldHVybiBUb2tlbi5hc1N0cmluZyh0aGlzLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUodGVycmFmb3JtQXR0cmlidXRlKSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0TnVtYmVyQXR0cmlidXRlKHRlcnJhZm9ybUF0dHJpYnV0ZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIFRva2VuLmFzTnVtYmVyKHRoaXMuaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZSh0ZXJyYWZvcm1BdHRyaWJ1dGUpKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRMaXN0QXR0cmlidXRlKHRlcnJhZm9ybUF0dHJpYnV0ZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIFRva2VuLmFzTGlzdCh0aGlzLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUodGVycmFmb3JtQXR0cmlidXRlKSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Qm9vbGVhbkF0dHJpYnV0ZSh0ZXJyYWZvcm1BdHRyaWJ1dGU6IHN0cmluZyk6IElSZXNvbHZhYmxlIHtcbiAgICByZXR1cm4gdGhpcy5pbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKHRlcnJhZm9ybUF0dHJpYnV0ZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0TnVtYmVyTGlzdEF0dHJpYnV0ZSh0ZXJyYWZvcm1BdHRyaWJ1dGU6IHN0cmluZykge1xuICAgIHJldHVybiBUb2tlbi5hc051bWJlckxpc3QoXG4gICAgICB0aGlzLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUodGVycmFmb3JtQXR0cmlidXRlKSxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGdldFN0cmluZ01hcEF0dHJpYnV0ZSh0ZXJyYWZvcm1BdHRyaWJ1dGU6IHN0cmluZykge1xuICAgIHJldHVybiBUb2tlbi5hc1N0cmluZ01hcChcbiAgICAgIHRoaXMuaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZSh0ZXJyYWZvcm1BdHRyaWJ1dGUpLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgZ2V0TnVtYmVyTWFwQXR0cmlidXRlKHRlcnJhZm9ybUF0dHJpYnV0ZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIFRva2VuLmFzTnVtYmVyTWFwKFxuICAgICAgdGhpcy5pbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKHRlcnJhZm9ybUF0dHJpYnV0ZSksXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRCb29sZWFuTWFwQXR0cmlidXRlKHRlcnJhZm9ybUF0dHJpYnV0ZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIFRva2VuLmFzQm9vbGVhbk1hcChcbiAgICAgIHRoaXMuaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZSh0ZXJyYWZvcm1BdHRyaWJ1dGUpLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgZ2V0QW55TWFwQXR0cmlidXRlKHRlcnJhZm9ybUF0dHJpYnV0ZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIFRva2VuLmFzQW55TWFwKHRoaXMuaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZSh0ZXJyYWZvcm1BdHRyaWJ1dGUpKTtcbiAgfVxuXG4gIHB1YmxpYyBhYnN0cmFjdCBpbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKHRlcnJhZm9ybUF0dHJpYnV0ZTogc3RyaW5nKTogYW55O1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuZXhwb3J0IGNsYXNzIFN0cmluZ01hcFxuICBleHRlbmRzIENvbXBsZXhSZXNvbHZhYmxlXG4gIGltcGxlbWVudHMgSVRlcnJhZm9ybUFkZHJlc3NhYmxlXG57XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCB0ZXJyYWZvcm1SZXNvdXJjZTogSUludGVycG9sYXRpbmdQYXJlbnQsXG4gICAgcHJvdGVjdGVkIHRlcnJhZm9ybUF0dHJpYnV0ZTogc3RyaW5nLFxuICApIHtcbiAgICBzdXBlcih0ZXJyYWZvcm1SZXNvdXJjZSwgdGVycmFmb3JtQXR0cmlidXRlKTtcbiAgfVxuXG4gIHB1YmxpYyBsb29rdXAoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBUb2tlbi5hc1N0cmluZyhcbiAgICAgIHRoaXMudGVycmFmb3JtUmVzb3VyY2UuaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZShcbiAgICAgICAgYCR7dGhpcy50ZXJyYWZvcm1BdHRyaWJ1dGV9W1wiJHtrZXl9XCJdYCxcbiAgICAgICksXG4gICAgKTtcbiAgfVxuXG4gIGNvbXB1dGVGcW4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gVG9rZW4uYXNTdHJpbmcoXG4gICAgICB0aGlzLnRlcnJhZm9ybVJlc291cmNlLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUodGhpcy50ZXJyYWZvcm1BdHRyaWJ1dGUpLFxuICAgICk7XG4gIH1cbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbmV4cG9ydCBjbGFzcyBOdW1iZXJNYXBcbiAgZXh0ZW5kcyBDb21wbGV4UmVzb2x2YWJsZVxuICBpbXBsZW1lbnRzIElUZXJyYWZvcm1BZGRyZXNzYWJsZVxue1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgdGVycmFmb3JtUmVzb3VyY2U6IElJbnRlcnBvbGF0aW5nUGFyZW50LFxuICAgIHByb3RlY3RlZCB0ZXJyYWZvcm1BdHRyaWJ1dGU6IHN0cmluZyxcbiAgKSB7XG4gICAgc3VwZXIodGVycmFmb3JtUmVzb3VyY2UsIHRlcnJhZm9ybUF0dHJpYnV0ZSk7XG4gIH1cblxuICBwdWJsaWMgbG9va3VwKGtleTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICByZXR1cm4gVG9rZW4uYXNOdW1iZXIoXG4gICAgICB0aGlzLnRlcnJhZm9ybVJlc291cmNlLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUoXG4gICAgICAgIGAke3RoaXMudGVycmFmb3JtQXR0cmlidXRlfVtcIiR7a2V5fVwiXWAsXG4gICAgICApLFxuICAgICk7XG4gIH1cblxuICBjb21wdXRlRnFuKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFRva2VuLmFzU3RyaW5nKFxuICAgICAgdGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5pbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKHRoaXMudGVycmFmb3JtQXR0cmlidXRlKSxcbiAgICApO1xuICB9XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG5leHBvcnQgY2xhc3MgQm9vbGVhbk1hcFxuICBleHRlbmRzIENvbXBsZXhSZXNvbHZhYmxlXG4gIGltcGxlbWVudHMgSVRlcnJhZm9ybUFkZHJlc3NhYmxlXG57XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCB0ZXJyYWZvcm1SZXNvdXJjZTogSUludGVycG9sYXRpbmdQYXJlbnQsXG4gICAgcHJvdGVjdGVkIHRlcnJhZm9ybUF0dHJpYnV0ZTogc3RyaW5nLFxuICApIHtcbiAgICBzdXBlcih0ZXJyYWZvcm1SZXNvdXJjZSwgdGVycmFmb3JtQXR0cmlidXRlKTtcbiAgfVxuXG4gIHB1YmxpYyBsb29rdXAoa2V5OiBzdHJpbmcpOiBJUmVzb2x2YWJsZSB7XG4gICAgcmV0dXJuIHRoaXMudGVycmFmb3JtUmVzb3VyY2UuaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZShcbiAgICAgIGAke3RoaXMudGVycmFmb3JtQXR0cmlidXRlfVtcIiR7a2V5fVwiXWAsXG4gICAgKTtcbiAgfVxuXG4gIGNvbXB1dGVGcW4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gVG9rZW4uYXNTdHJpbmcoXG4gICAgICB0aGlzLnRlcnJhZm9ybVJlc291cmNlLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUodGhpcy50ZXJyYWZvcm1BdHRyaWJ1dGUpLFxuICAgICk7XG4gIH1cbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbmV4cG9ydCBjbGFzcyBBbnlNYXAgZXh0ZW5kcyBDb21wbGV4UmVzb2x2YWJsZSBpbXBsZW1lbnRzIElUZXJyYWZvcm1BZGRyZXNzYWJsZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCB0ZXJyYWZvcm1SZXNvdXJjZTogSUludGVycG9sYXRpbmdQYXJlbnQsXG4gICAgcHJvdGVjdGVkIHRlcnJhZm9ybUF0dHJpYnV0ZTogc3RyaW5nLFxuICApIHtcbiAgICBzdXBlcih0ZXJyYWZvcm1SZXNvdXJjZSwgdGVycmFmb3JtQXR0cmlidXRlKTtcbiAgfVxuXG4gIHB1YmxpYyBsb29rdXAoa2V5OiBzdHJpbmcpOiBhbnkge1xuICAgIHJldHVybiBUb2tlbi5hc0FueShcbiAgICAgIHRoaXMudGVycmFmb3JtUmVzb3VyY2UuaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZShcbiAgICAgICAgYCR7dGhpcy50ZXJyYWZvcm1BdHRyaWJ1dGV9W1wiJHtrZXl9XCJdYCxcbiAgICAgICksXG4gICAgKTtcbiAgfVxuXG4gIGNvbXB1dGVGcW4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gVG9rZW4uYXNTdHJpbmcoXG4gICAgICB0aGlzLnRlcnJhZm9ybVJlc291cmNlLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUodGhpcy50ZXJyYWZvcm1BdHRyaWJ1dGUpLFxuICAgICk7XG4gIH1cbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbmV4cG9ydCBjbGFzcyBTdHJpbmdNYXBNYXBcbiAgZXh0ZW5kcyBDb21wbGV4UmVzb2x2YWJsZVxuICBpbXBsZW1lbnRzIElUZXJyYWZvcm1BZGRyZXNzYWJsZVxue1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgdGVycmFmb3JtUmVzb3VyY2U6IElJbnRlcnBvbGF0aW5nUGFyZW50LFxuICAgIHByb3RlY3RlZCB0ZXJyYWZvcm1BdHRyaWJ1dGU6IHN0cmluZyxcbiAgKSB7XG4gICAgc3VwZXIodGVycmFmb3JtUmVzb3VyY2UsIHRlcnJhZm9ybUF0dHJpYnV0ZSk7XG4gIH1cblxuICBwdWJsaWMgbG9va3VwKGtleTogc3RyaW5nKTogU3RyaW5nTWFwIHtcbiAgICByZXR1cm4gbmV3IFN0cmluZ01hcChcbiAgICAgIHRoaXMudGVycmFmb3JtUmVzb3VyY2UsXG4gICAgICBgJHt0aGlzLnRlcnJhZm9ybUF0dHJpYnV0ZX1bXCIke2tleX1cIl1gLFxuICAgICk7XG4gIH1cblxuICBjb21wdXRlRnFuKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFRva2VuLmFzU3RyaW5nKFxuICAgICAgdGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5pbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKHRoaXMudGVycmFmb3JtQXR0cmlidXRlKSxcbiAgICApO1xuICB9XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG5leHBvcnQgY2xhc3MgTnVtYmVyTWFwTWFwXG4gIGV4dGVuZHMgQ29tcGxleFJlc29sdmFibGVcbiAgaW1wbGVtZW50cyBJVGVycmFmb3JtQWRkcmVzc2FibGVcbntcbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHRlcnJhZm9ybVJlc291cmNlOiBJSW50ZXJwb2xhdGluZ1BhcmVudCxcbiAgICBwcm90ZWN0ZWQgdGVycmFmb3JtQXR0cmlidXRlOiBzdHJpbmcsXG4gICkge1xuICAgIHN1cGVyKHRlcnJhZm9ybVJlc291cmNlLCB0ZXJyYWZvcm1BdHRyaWJ1dGUpO1xuICB9XG5cbiAgcHVibGljIGxvb2t1cChrZXk6IHN0cmluZyk6IE51bWJlck1hcCB7XG4gICAgcmV0dXJuIG5ldyBOdW1iZXJNYXAoXG4gICAgICB0aGlzLnRlcnJhZm9ybVJlc291cmNlLFxuICAgICAgYCR7dGhpcy50ZXJyYWZvcm1BdHRyaWJ1dGV9W1wiJHtrZXl9XCJdYCxcbiAgICApO1xuICB9XG5cbiAgY29tcHV0ZUZxbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBUb2tlbi5hc1N0cmluZyhcbiAgICAgIHRoaXMudGVycmFmb3JtUmVzb3VyY2UuaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZSh0aGlzLnRlcnJhZm9ybUF0dHJpYnV0ZSksXG4gICAgKTtcbiAgfVxufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuZXhwb3J0IGNsYXNzIEJvb2xlYW5NYXBNYXBcbiAgZXh0ZW5kcyBDb21wbGV4UmVzb2x2YWJsZVxuICBpbXBsZW1lbnRzIElUZXJyYWZvcm1BZGRyZXNzYWJsZVxue1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgdGVycmFmb3JtUmVzb3VyY2U6IElJbnRlcnBvbGF0aW5nUGFyZW50LFxuICAgIHByb3RlY3RlZCB0ZXJyYWZvcm1BdHRyaWJ1dGU6IHN0cmluZyxcbiAgKSB7XG4gICAgc3VwZXIodGVycmFmb3JtUmVzb3VyY2UsIHRlcnJhZm9ybUF0dHJpYnV0ZSk7XG4gIH1cblxuICBwdWJsaWMgbG9va3VwKGtleTogc3RyaW5nKTogQm9vbGVhbk1hcCB7XG4gICAgcmV0dXJuIG5ldyBCb29sZWFuTWFwKFxuICAgICAgdGhpcy50ZXJyYWZvcm1SZXNvdXJjZSxcbiAgICAgIGAke3RoaXMudGVycmFmb3JtQXR0cmlidXRlfVtcIiR7a2V5fVwiXWAsXG4gICAgKTtcbiAgfVxuXG4gIGNvbXB1dGVGcW4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gVG9rZW4uYXNTdHJpbmcoXG4gICAgICB0aGlzLnRlcnJhZm9ybVJlc291cmNlLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUodGhpcy50ZXJyYWZvcm1BdHRyaWJ1dGUpLFxuICAgICk7XG4gIH1cbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbmV4cG9ydCBjbGFzcyBBbnlNYXBNYXBcbiAgZXh0ZW5kcyBDb21wbGV4UmVzb2x2YWJsZVxuICBpbXBsZW1lbnRzIElUZXJyYWZvcm1BZGRyZXNzYWJsZVxue1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgdGVycmFmb3JtUmVzb3VyY2U6IElJbnRlcnBvbGF0aW5nUGFyZW50LFxuICAgIHByb3RlY3RlZCB0ZXJyYWZvcm1BdHRyaWJ1dGU6IHN0cmluZyxcbiAgKSB7XG4gICAgc3VwZXIodGVycmFmb3JtUmVzb3VyY2UsIHRlcnJhZm9ybUF0dHJpYnV0ZSk7XG4gIH1cblxuICBwdWJsaWMgbG9va3VwKGtleTogc3RyaW5nKTogQW55TWFwIHtcbiAgICByZXR1cm4gbmV3IEFueU1hcChcbiAgICAgIHRoaXMudGVycmFmb3JtUmVzb3VyY2UsXG4gICAgICBgJHt0aGlzLnRlcnJhZm9ybUF0dHJpYnV0ZX1bXCIke2tleX1cIl1gLFxuICAgICk7XG4gIH1cblxuICBjb21wdXRlRnFuKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFRva2VuLmFzU3RyaW5nKFxuICAgICAgdGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5pbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKHRoaXMudGVycmFmb3JtQXR0cmlidXRlKSxcbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgR29pbmcgdG8gYmUgcmVwbGFjZWQgYnkgQXJyYXkgb2YgQ29tcGxleExpc3RJdGVtXG4gKiBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmVcbiAqL1xuZXhwb3J0IGNsYXNzIENvbXBsZXhDb21wdXRlZExpc3QgZXh0ZW5kcyBDb21wbGV4Q29tcHV0ZWRBdHRyaWJ1dGUge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgdGVycmFmb3JtUmVzb3VyY2U6IElJbnRlcnBvbGF0aW5nUGFyZW50LFxuICAgIHByb3RlY3RlZCB0ZXJyYWZvcm1BdHRyaWJ1dGU6IHN0cmluZyxcbiAgICBwcm90ZWN0ZWQgY29tcGxleENvbXB1dGVkTGlzdEluZGV4OiBzdHJpbmcsXG4gICAgcHJvdGVjdGVkIHdyYXBzU2V0PzogYm9vbGVhbixcbiAgKSB7XG4gICAgc3VwZXIodGVycmFmb3JtUmVzb3VyY2UsIHRlcnJhZm9ybUF0dHJpYnV0ZSk7XG4gICAgdGhyb3cgcHJvdmlkZXJWZXJzaW9uTWlzbWF0Y2goKTtcbiAgfVxuXG4gIHB1YmxpYyBpbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKHByb3BlcnR5OiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy53cmFwc1NldCkge1xuICAgICAgcmV0dXJuIHByb3BlcnR5QWNjZXNzKFxuICAgICAgICBGbi50b2xpc3QoXG4gICAgICAgICAgdGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5pbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKFxuICAgICAgICAgICAgdGhpcy50ZXJyYWZvcm1BdHRyaWJ1dGUsXG4gICAgICAgICAgKSxcbiAgICAgICAgKSxcbiAgICAgICAgW3RoaXMuY29tcGxleENvbXB1dGVkTGlzdEluZGV4LCBwcm9wZXJ0eV0sXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnRlcnJhZm9ybVJlc291cmNlLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUoXG4gICAgICBgJHt0aGlzLnRlcnJhZm9ybUF0dHJpYnV0ZX1bJHt0aGlzLmNvbXBsZXhDb21wdXRlZExpc3RJbmRleH1dLiR7cHJvcGVydHl9YCxcbiAgICApO1xuICB9XG5cbiAgY29tcHV0ZUZxbigpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLndyYXBzU2V0KSB7XG4gICAgICByZXR1cm4gVG9rZW4uYXNTdHJpbmcoXG4gICAgICAgIHByb3BlcnR5QWNjZXNzKFxuICAgICAgICAgIEZuLnRvbGlzdChcbiAgICAgICAgICAgIHRoaXMudGVycmFmb3JtUmVzb3VyY2UuaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZShcbiAgICAgICAgICAgICAgdGhpcy50ZXJyYWZvcm1BdHRyaWJ1dGUsXG4gICAgICAgICAgICApLFxuICAgICAgICAgICksXG4gICAgICAgICAgW3RoaXMuY29tcGxleENvbXB1dGVkTGlzdEluZGV4XSxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFRva2VuLmFzU3RyaW5nKFxuICAgICAgdGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5pbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKFxuICAgICAgICBgJHt0aGlzLnRlcnJhZm9ybUF0dHJpYnV0ZX1bJHt0aGlzLmNvbXBsZXhDb21wdXRlZExpc3RJbmRleH1dYCxcbiAgICAgICksXG4gICAgKTtcbiAgfVxufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENvbXBsZXhMaXN0XG4gIGV4dGVuZHMgQ29tcGxleFJlc29sdmFibGVcbiAgaW1wbGVtZW50cyBJVGVycmFmb3JtQWRkcmVzc2FibGVcbntcbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHRlcnJhZm9ybVJlc291cmNlOiBJSW50ZXJwb2xhdGluZ1BhcmVudCxcbiAgICBwcm90ZWN0ZWQgdGVycmFmb3JtQXR0cmlidXRlOiBzdHJpbmcsXG4gICAgcHJvdGVjdGVkIHdyYXBzU2V0OiBib29sZWFuLFxuICApIHtcbiAgICBzdXBlcih0ZXJyYWZvcm1SZXNvdXJjZSwgdGVycmFmb3JtQXR0cmlidXRlKTtcbiAgfVxuXG4gIGNvbXB1dGVGcW4oKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy53cmFwc1NldCkge1xuICAgICAgcmV0dXJuIFRva2VuLmFzU3RyaW5nKFxuICAgICAgICBGbi50b2xpc3QoXG4gICAgICAgICAgdGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5pbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKFxuICAgICAgICAgICAgdGhpcy50ZXJyYWZvcm1BdHRyaWJ1dGUsXG4gICAgICAgICAgKSxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBUb2tlbi5hc1N0cmluZyhcbiAgICAgICAgdGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5pbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKFxuICAgICAgICAgIHRoaXMudGVycmFmb3JtQXR0cmlidXRlLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRpbmcgYW4gaXRlcmF0b3IgZm9yIHRoaXMgY29tcGxleCBsaXN0LlxuICAgKiBUaGUgbGlzdCB3aWxsIGJlIGNvbnZlcnRlZCBpbnRvIGEgbWFwIHdpdGggdGhlIG1hcEtleUF0dHJpYnV0ZU5hbWUgYXMgdGhlIGtleS5cbiAgICogQHBhcmFtIG1hcEtleUF0dHJpYnV0ZU5hbWVcbiAgICogQHJldHVybnNcbiAgICovXG4gIHB1YmxpYyBhbGxXaXRoTWFwS2V5KFxuICAgIG1hcEtleUF0dHJpYnV0ZU5hbWU6IHN0cmluZyxcbiAgKTogRHluYW1pY0xpc3RUZXJyYWZvcm1JdGVyYXRvciB7XG4gICAgcmV0dXJuIFRlcnJhZm9ybUl0ZXJhdG9yLmZyb21Db21wbGV4TGlzdChcbiAgICAgIFRva2VuLmFzQW55KHRoaXMuY29tcHV0ZUZxbigpKSxcbiAgICAgIG1hcEtleUF0dHJpYnV0ZU5hbWUsXG4gICAgKTtcbiAgfVxufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuZXhwb3J0IGNsYXNzIEJvb2xlYW5MaXN0IGV4dGVuZHMgQ29tcGxleExpc3Qge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgdGVycmFmb3JtUmVzb3VyY2U6IElJbnRlcnBvbGF0aW5nUGFyZW50LFxuICAgIHByb3RlY3RlZCB0ZXJyYWZvcm1BdHRyaWJ1dGU6IHN0cmluZyxcbiAgICBwcm90ZWN0ZWQgd3JhcHNTZXQ6IGJvb2xlYW4sXG4gICkge1xuICAgIHN1cGVyKHRlcnJhZm9ybVJlc291cmNlLCB0ZXJyYWZvcm1BdHRyaWJ1dGUsIHdyYXBzU2V0KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQoaW5kZXg6IG51bWJlcik6IElSZXNvbHZhYmxlIHtcbiAgICByZXR1cm4gRm4uZWxlbWVudCh0aGlzLCBpbmRleCk7XG4gIH1cbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbmV4cG9ydCBjbGFzcyBTdHJpbmdMaXN0TGlzdCBleHRlbmRzIENvbXBsZXhMaXN0IHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHRlcnJhZm9ybVJlc291cmNlOiBJSW50ZXJwb2xhdGluZ1BhcmVudCxcbiAgICBwcm90ZWN0ZWQgdGVycmFmb3JtQXR0cmlidXRlOiBzdHJpbmcsXG4gICAgcHJvdGVjdGVkIHdyYXBzU2V0OiBib29sZWFuLFxuICApIHtcbiAgICBzdXBlcih0ZXJyYWZvcm1SZXNvdXJjZSwgdGVycmFmb3JtQXR0cmlidXRlLCB3cmFwc1NldCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0KGluZGV4OiBudW1iZXIpIHtcbiAgICByZXR1cm4gVG9rZW4uYXNMaXN0KFxuICAgICAgdGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5pbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKFxuICAgICAgICBgJHt0aGlzLnRlcnJhZm9ybUF0dHJpYnV0ZX1bJHtpbmRleH1dYCxcbiAgICAgICksXG4gICAgKTtcbiAgfVxufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuZXhwb3J0IGNsYXNzIE51bWJlckxpc3RMaXN0IGV4dGVuZHMgQ29tcGxleExpc3Qge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgdGVycmFmb3JtUmVzb3VyY2U6IElJbnRlcnBvbGF0aW5nUGFyZW50LFxuICAgIHByb3RlY3RlZCB0ZXJyYWZvcm1BdHRyaWJ1dGU6IHN0cmluZyxcbiAgICBwcm90ZWN0ZWQgd3JhcHNTZXQ6IGJvb2xlYW4sXG4gICkge1xuICAgIHN1cGVyKHRlcnJhZm9ybVJlc291cmNlLCB0ZXJyYWZvcm1BdHRyaWJ1dGUsIHdyYXBzU2V0KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQoaW5kZXg6IG51bWJlcikge1xuICAgIHJldHVybiBUb2tlbi5hc051bWJlckxpc3QoXG4gICAgICB0aGlzLnRlcnJhZm9ybVJlc291cmNlLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUoXG4gICAgICAgIGAke3RoaXMudGVycmFmb3JtQXR0cmlidXRlfVske2luZGV4fV1gLFxuICAgICAgKSxcbiAgICApO1xuICB9XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG5leHBvcnQgY2xhc3MgQm9vbGVhbkxpc3RMaXN0IGV4dGVuZHMgQ29tcGxleExpc3Qge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgdGVycmFmb3JtUmVzb3VyY2U6IElJbnRlcnBvbGF0aW5nUGFyZW50LFxuICAgIHByb3RlY3RlZCB0ZXJyYWZvcm1BdHRyaWJ1dGU6IHN0cmluZyxcbiAgICBwcm90ZWN0ZWQgd3JhcHNTZXQ6IGJvb2xlYW4sXG4gICkge1xuICAgIHN1cGVyKHRlcnJhZm9ybVJlc291cmNlLCB0ZXJyYWZvcm1BdHRyaWJ1dGUsIHdyYXBzU2V0KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQoaW5kZXg6IG51bWJlcikge1xuICAgIC8vIFRoaXMgaXNuJ3QgZnVsbHkgc3VwcG9ydGVkXG4gICAgcmV0dXJuIHRoaXMudGVycmFmb3JtUmVzb3VyY2UuaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZShcbiAgICAgIGAke3RoaXMudGVycmFmb3JtQXR0cmlidXRlfVske2luZGV4fV1gLFxuICAgICk7XG4gIH1cbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbmV4cG9ydCBjbGFzcyBBbnlMaXN0TGlzdCBleHRlbmRzIENvbXBsZXhMaXN0IHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHRlcnJhZm9ybVJlc291cmNlOiBJSW50ZXJwb2xhdGluZ1BhcmVudCxcbiAgICBwcm90ZWN0ZWQgdGVycmFmb3JtQXR0cmlidXRlOiBzdHJpbmcsXG4gICAgcHJvdGVjdGVkIHdyYXBzU2V0OiBib29sZWFuLFxuICApIHtcbiAgICBzdXBlcih0ZXJyYWZvcm1SZXNvdXJjZSwgdGVycmFmb3JtQXR0cmlidXRlLCB3cmFwc1NldCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0KGluZGV4OiBudW1iZXIpIHtcbiAgICAvLyBUaGlzIGlzbid0IGZ1bGx5IHN1cHBvcnRlZFxuICAgIHJldHVybiB0aGlzLnRlcnJhZm9ybVJlc291cmNlLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUoXG4gICAgICBgJHt0aGlzLnRlcnJhZm9ybUF0dHJpYnV0ZX1bJHtpbmRleH1dYCxcbiAgICApO1xuICB9XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQ29tcGxleE1hcFxuICBleHRlbmRzIENvbXBsZXhSZXNvbHZhYmxlXG4gIGltcGxlbWVudHMgSVRlcnJhZm9ybUFkZHJlc3NhYmxlXG57XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCB0ZXJyYWZvcm1SZXNvdXJjZTogSUludGVycG9sYXRpbmdQYXJlbnQsXG4gICAgcHJvdGVjdGVkIHRlcnJhZm9ybUF0dHJpYnV0ZTogc3RyaW5nLFxuICApIHtcbiAgICBzdXBlcih0ZXJyYWZvcm1SZXNvdXJjZSwgdGVycmFmb3JtQXR0cmlidXRlKTtcbiAgfVxuXG4gIGNvbXB1dGVGcW4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gVG9rZW4uYXNTdHJpbmcoXG4gICAgICB0aGlzLnRlcnJhZm9ybVJlc291cmNlLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUodGhpcy50ZXJyYWZvcm1BdHRyaWJ1dGUpLFxuICAgICk7XG4gIH1cblxuICBpbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKHByb3BlcnR5OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gcHJvcGVydHlBY2Nlc3MoXG4gICAgICB0aGlzLnRlcnJhZm9ybVJlc291cmNlLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUodGhpcy50ZXJyYWZvcm1BdHRyaWJ1dGUpLFxuICAgICAgW3Byb3BlcnR5XSxcbiAgICApO1xuICB9XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG5leHBvcnQgY2xhc3MgQ29tcGxleE9iamVjdCBleHRlbmRzIENvbXBsZXhDb21wdXRlZEF0dHJpYnV0ZSB7XG4gIC8qKlxuICAgKiBAcGFyYW0gdGVycmFmb3JtUmVzb3VyY2VcbiAgICogQHBhcmFtIHRlcnJhZm9ybUF0dHJpYnV0ZVxuICAgKiBAcGFyYW0gY29tcGxleE9iamVjdEluZGV4IHRoZSBpbmRleCBvZiB0aGUgY29tcGxleCBvYmplY3QgaW4gYSBsaXN0XG4gICAqIEBwYXJhbSBjb21wbGV4T2JqZWN0SXNGcm9tU2V0IHNldCB0byB0cnVlIGlmIHRoaXMgaXRlbSBpcyBmcm9tIGluc2lkZSBhIHNldCBhbmQgbmVlZHMgdG9saXN0KCkgZm9yIGFjY2Vzc2luZyBpdFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQgdG8gXCIwXCIgZm9yIHNpbmdsZSBsaXN0IGl0ZW1zXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgdGVycmFmb3JtUmVzb3VyY2U6IElJbnRlcnBvbGF0aW5nUGFyZW50LFxuICAgIHByb3RlY3RlZCB0ZXJyYWZvcm1BdHRyaWJ1dGU6IHN0cmluZyxcbiAgICBwcm90ZWN0ZWQgY29tcGxleE9iamVjdElzRnJvbVNldDogYm9vbGVhbixcbiAgICBwcm90ZWN0ZWQgY29tcGxleE9iamVjdEluZGV4PzogbnVtYmVyIHwgc3RyaW5nLFxuICApIHtcbiAgICBzdXBlcih0ZXJyYWZvcm1SZXNvdXJjZSwgdGVycmFmb3JtQXR0cmlidXRlKTtcbiAgfVxuXG4gIHB1YmxpYyBpbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKHByb3BlcnR5OiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5jb21wbGV4T2JqZWN0SXNGcm9tU2V0KSB7XG4gICAgICByZXR1cm4gcHJvcGVydHlBY2Nlc3MoXG4gICAgICAgIEZuLnRvbGlzdChcbiAgICAgICAgICB0aGlzLnRlcnJhZm9ybVJlc291cmNlLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUoXG4gICAgICAgICAgICB0aGlzLnRlcnJhZm9ybUF0dHJpYnV0ZSxcbiAgICAgICAgICApLFxuICAgICAgICApLFxuICAgICAgICBbdGhpcy5jb21wbGV4T2JqZWN0SW5kZXgsIHByb3BlcnR5XSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMudGVycmFmb3JtUmVzb3VyY2UuaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZShcbiAgICAgIHRoaXMuY29tcGxleE9iamVjdEluZGV4ICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyBgJHt0aGlzLnRlcnJhZm9ybUF0dHJpYnV0ZX1bJHt0aGlzLmNvbXBsZXhPYmplY3RJbmRleH1dLiR7cHJvcGVydHl9YFxuICAgICAgICA6IGAke3RoaXMudGVycmFmb3JtQXR0cmlidXRlfS4ke3Byb3BlcnR5fWAsXG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpbnRlcnBvbGF0aW9uQXNMaXN0KCkge1xuICAgIHJldHVybiB0aGlzLnRlcnJhZm9ybVJlc291cmNlLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUoXG4gICAgICBgJHt0aGlzLnRlcnJhZm9ybUF0dHJpYnV0ZX0uKmAsXG4gICAgKTtcbiAgfVxuXG4gIGNvbXB1dGVGcW4oKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5jb21wbGV4T2JqZWN0SXNGcm9tU2V0KSB7XG4gICAgICByZXR1cm4gVG9rZW4uYXNTdHJpbmcoXG4gICAgICAgIHByb3BlcnR5QWNjZXNzKFxuICAgICAgICAgIEZuLnRvbGlzdChcbiAgICAgICAgICAgIHRoaXMudGVycmFmb3JtUmVzb3VyY2UuaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZShcbiAgICAgICAgICAgICAgdGhpcy50ZXJyYWZvcm1BdHRyaWJ1dGUsXG4gICAgICAgICAgICApLFxuICAgICAgICAgICksXG4gICAgICAgICAgW3RoaXMuY29tcGxleE9iamVjdEluZGV4XSxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFRva2VuLmFzU3RyaW5nKFxuICAgICAgdGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5pbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKFxuICAgICAgICB0aGlzLmNvbXBsZXhPYmplY3RJbmRleCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyBgJHt0aGlzLnRlcnJhZm9ybUF0dHJpYnV0ZX1bJHt0aGlzLmNvbXBsZXhPYmplY3RJbmRleH1dYFxuICAgICAgICAgIDogdGhpcy50ZXJyYWZvcm1BdHRyaWJ1dGUsXG4gICAgICApLFxuICAgICk7XG4gIH1cbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBNYXBMaXN0XG4gIGV4dGVuZHMgQ29tcGxleFJlc29sdmFibGVcbiAgaW1wbGVtZW50cyBJVGVycmFmb3JtQWRkcmVzc2FibGUsIElJbnRlcnBvbGF0aW5nUGFyZW50XG57XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCB0ZXJyYWZvcm1SZXNvdXJjZTogSUludGVycG9sYXRpbmdQYXJlbnQsXG4gICAgcHJvdGVjdGVkIHRlcnJhZm9ybUF0dHJpYnV0ZTogc3RyaW5nLFxuICAgIHByb3RlY3RlZCB3cmFwc1NldDogYm9vbGVhbixcbiAgKSB7XG4gICAgc3VwZXIodGVycmFmb3JtUmVzb3VyY2UsIHRlcnJhZm9ybUF0dHJpYnV0ZSk7XG4gIH1cblxuICBjb21wdXRlRnFuKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMud3JhcHNTZXQpIHtcbiAgICAgIHJldHVybiBUb2tlbi5hc1N0cmluZyhcbiAgICAgICAgRm4udG9saXN0KFxuICAgICAgICAgIHRoaXMudGVycmFmb3JtUmVzb3VyY2UuaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZShcbiAgICAgICAgICAgIHRoaXMudGVycmFmb3JtQXR0cmlidXRlLFxuICAgICAgICAgICksXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gVG9rZW4uYXNTdHJpbmcoXG4gICAgICAgIHRoaXMudGVycmFmb3JtUmVzb3VyY2UuaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZShcbiAgICAgICAgICB0aGlzLnRlcnJhZm9ybUF0dHJpYnV0ZSxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZShwcm9wZXJ0eTogc3RyaW5nKTogSVJlc29sdmFibGUge1xuICAgIGlmICh0aGlzLndyYXBzU2V0KSB7XG4gICAgICBjb25zdCBtYXRjaGVzID0gcHJvcGVydHkubWF0Y2goL1xcWyhbXlxcXV0qKVxcXS8pOyAvLyBuZWVkIHRvIGV4dHJhY3Qgb3V0IHRoZSBpbmRleFxuICAgICAgaWYgKG1hdGNoZXMpIHtcbiAgICAgICAgcmV0dXJuIHByb3BlcnR5QWNjZXNzKFxuICAgICAgICAgIEZuLnRvbGlzdChcbiAgICAgICAgICAgIHRoaXMudGVycmFmb3JtUmVzb3VyY2UuaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZShcbiAgICAgICAgICAgICAgdGhpcy50ZXJyYWZvcm1BdHRyaWJ1dGUsXG4gICAgICAgICAgICApLFxuICAgICAgICAgICksXG4gICAgICAgICAgW21hdGNoZXNbMV0sIHByb3BlcnR5XSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5pbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKFxuICAgICAgYCR7dGhpcy50ZXJyYWZvcm1BdHRyaWJ1dGV9JHtwcm9wZXJ0eX1gLFxuICAgICk7XG4gIH1cbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbmV4cG9ydCBjbGFzcyBTdHJpbmdNYXBMaXN0IGV4dGVuZHMgTWFwTGlzdCB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCB0ZXJyYWZvcm1SZXNvdXJjZTogSUludGVycG9sYXRpbmdQYXJlbnQsXG4gICAgcHJvdGVjdGVkIHRlcnJhZm9ybUF0dHJpYnV0ZTogc3RyaW5nLFxuICAgIHByb3RlY3RlZCB3cmFwc1NldDogYm9vbGVhbixcbiAgKSB7XG4gICAgc3VwZXIodGVycmFmb3JtUmVzb3VyY2UsIHRlcnJhZm9ybUF0dHJpYnV0ZSwgd3JhcHNTZXQpO1xuICB9XG5cbiAgcHVibGljIGdldChpbmRleDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIG5ldyBTdHJpbmdNYXAodGhpcywgYFske2luZGV4fV1gKTtcbiAgfVxufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuZXhwb3J0IGNsYXNzIE51bWJlck1hcExpc3QgZXh0ZW5kcyBNYXBMaXN0IHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHRlcnJhZm9ybVJlc291cmNlOiBJSW50ZXJwb2xhdGluZ1BhcmVudCxcbiAgICBwcm90ZWN0ZWQgdGVycmFmb3JtQXR0cmlidXRlOiBzdHJpbmcsXG4gICAgcHJvdGVjdGVkIHdyYXBzU2V0OiBib29sZWFuLFxuICApIHtcbiAgICBzdXBlcih0ZXJyYWZvcm1SZXNvdXJjZSwgdGVycmFmb3JtQXR0cmlidXRlLCB3cmFwc1NldCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0KGluZGV4OiBudW1iZXIpIHtcbiAgICByZXR1cm4gbmV3IE51bWJlck1hcCh0aGlzLCBgWyR7aW5kZXh9XWApO1xuICB9XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG5leHBvcnQgY2xhc3MgQm9vbGVhbk1hcExpc3QgZXh0ZW5kcyBNYXBMaXN0IHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHRlcnJhZm9ybVJlc291cmNlOiBJSW50ZXJwb2xhdGluZ1BhcmVudCxcbiAgICBwcm90ZWN0ZWQgdGVycmFmb3JtQXR0cmlidXRlOiBzdHJpbmcsXG4gICAgcHJvdGVjdGVkIHdyYXBzU2V0OiBib29sZWFuLFxuICApIHtcbiAgICBzdXBlcih0ZXJyYWZvcm1SZXNvdXJjZSwgdGVycmFmb3JtQXR0cmlidXRlLCB3cmFwc1NldCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0KGluZGV4OiBudW1iZXIpIHtcbiAgICByZXR1cm4gbmV3IEJvb2xlYW5NYXAodGhpcywgYFske2luZGV4fV1gKTtcbiAgfVxufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuZXhwb3J0IGNsYXNzIEFueU1hcExpc3QgZXh0ZW5kcyBNYXBMaXN0IHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHRlcnJhZm9ybVJlc291cmNlOiBJSW50ZXJwb2xhdGluZ1BhcmVudCxcbiAgICBwcm90ZWN0ZWQgdGVycmFmb3JtQXR0cmlidXRlOiBzdHJpbmcsXG4gICAgcHJvdGVjdGVkIHdyYXBzU2V0OiBib29sZWFuLFxuICApIHtcbiAgICBzdXBlcih0ZXJyYWZvcm1SZXNvdXJjZSwgdGVycmFmb3JtQXR0cmlidXRlLCB3cmFwc1NldCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0KGluZGV4OiBudW1iZXIpIHtcbiAgICByZXR1cm4gbmV3IEFueU1hcCh0aGlzLCBgWyR7aW5kZXh9XWApO1xuICB9XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG5leHBvcnQgY2xhc3MgU3RyaW5nTGlzdE1hcCBleHRlbmRzIENvbXBsZXhNYXAge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgdGVycmFmb3JtUmVzb3VyY2U6IElJbnRlcnBvbGF0aW5nUGFyZW50LFxuICAgIHByb3RlY3RlZCB0ZXJyYWZvcm1BdHRyaWJ1dGU6IHN0cmluZyxcbiAgKSB7XG4gICAgc3VwZXIodGVycmFmb3JtUmVzb3VyY2UsIHRlcnJhZm9ybUF0dHJpYnV0ZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0KGtleTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIFRva2VuLmFzTGlzdChcbiAgICAgIHRoaXMudGVycmFmb3JtUmVzb3VyY2UuaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZShcbiAgICAgICAgYCR7dGhpcy50ZXJyYWZvcm1BdHRyaWJ1dGV9WyR7a2V5fV1gLFxuICAgICAgKSxcbiAgICApO1xuICB9XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG5leHBvcnQgY2xhc3MgTnVtYmVyTGlzdE1hcCBleHRlbmRzIENvbXBsZXhNYXAge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgdGVycmFmb3JtUmVzb3VyY2U6IElJbnRlcnBvbGF0aW5nUGFyZW50LFxuICAgIHByb3RlY3RlZCB0ZXJyYWZvcm1BdHRyaWJ1dGU6IHN0cmluZyxcbiAgKSB7XG4gICAgc3VwZXIodGVycmFmb3JtUmVzb3VyY2UsIHRlcnJhZm9ybUF0dHJpYnV0ZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0KGtleTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIFRva2VuLmFzTnVtYmVyTGlzdChcbiAgICAgIHRoaXMudGVycmFmb3JtUmVzb3VyY2UuaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZShcbiAgICAgICAgYCR7dGhpcy50ZXJyYWZvcm1BdHRyaWJ1dGV9WyR7a2V5fV1gLFxuICAgICAgKSxcbiAgICApO1xuICB9XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG5leHBvcnQgY2xhc3MgQm9vbGVhbkxpc3RNYXAgZXh0ZW5kcyBDb21wbGV4TWFwIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHRlcnJhZm9ybVJlc291cmNlOiBJSW50ZXJwb2xhdGluZ1BhcmVudCxcbiAgICBwcm90ZWN0ZWQgdGVycmFmb3JtQXR0cmlidXRlOiBzdHJpbmcsXG4gICkge1xuICAgIHN1cGVyKHRlcnJhZm9ybVJlc291cmNlLCB0ZXJyYWZvcm1BdHRyaWJ1dGUpO1xuICB9XG5cbiAgcHVibGljIGdldChrZXk6IHN0cmluZykge1xuICAgIC8vIFRoaXMgaXNuJ3QgZnVsbHkgc3VwcG9ydGVkXG4gICAgcmV0dXJuIHRoaXMudGVycmFmb3JtUmVzb3VyY2UuaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZShcbiAgICAgIGAke3RoaXMudGVycmFmb3JtQXR0cmlidXRlfVske2tleX1dYCxcbiAgICApO1xuICB9XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG5leHBvcnQgY2xhc3MgQW55TGlzdE1hcCBleHRlbmRzIENvbXBsZXhNYXAge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgdGVycmFmb3JtUmVzb3VyY2U6IElJbnRlcnBvbGF0aW5nUGFyZW50LFxuICAgIHByb3RlY3RlZCB0ZXJyYWZvcm1BdHRyaWJ1dGU6IHN0cmluZyxcbiAgKSB7XG4gICAgc3VwZXIodGVycmFmb3JtUmVzb3VyY2UsIHRlcnJhZm9ybUF0dHJpYnV0ZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0KGtleTogc3RyaW5nKSB7XG4gICAgLy8gVGhpcyBpc24ndCBmdWxseSBzdXBwb3J0ZWRcbiAgICByZXR1cm4gdGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5pbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKFxuICAgICAgYCR7dGhpcy50ZXJyYWZvcm1BdHRyaWJ1dGV9WyR7a2V5fV1gLFxuICAgICk7XG4gIH1cbn1cbiJdfQ==