@aws-cdk/aws-bedrock-agentcore-alpha 2.257.0-alpha.0 → 2.258.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.jsii +2777 -2580
- package/.jsii.tabl.json.gz +0 -0
- package/.warnings.jsii.js +2135 -59
- package/lib/common/types.d.ts +2 -0
- package/lib/common/types.js +3 -1
- package/lib/evaluation/custom-evaluator.d.ts +1 -0
- package/lib/evaluation/custom-evaluator.js +37 -4
- package/lib/evaluation/data-source.d.ts +1 -0
- package/lib/evaluation/data-source.js +15 -2
- package/lib/evaluation/evaluator-base.d.ts +2 -0
- package/lib/evaluation/evaluator-base.js +65 -3
- package/lib/evaluation/evaluator-config.d.ts +4 -0
- package/lib/evaluation/evaluator-config.js +25 -3
- package/lib/evaluation/evaluator.d.ts +1 -0
- package/lib/evaluation/evaluator.js +14 -2
- package/lib/evaluation/online-evaluation-base.d.ts +2 -0
- package/lib/evaluation/online-evaluation-base.js +65 -3
- package/lib/evaluation/online-evaluation.d.ts +1 -0
- package/lib/evaluation/online-evaluation.js +37 -4
- package/lib/evaluation/perms.d.ts +5 -0
- package/lib/evaluation/perms.js +6 -1
- package/lib/evaluation/types.d.ts +15 -0
- package/lib/evaluation/types.js +75 -6
- package/lib/evaluation/validation-helpers.d.ts +22 -0
- package/lib/evaluation/validation-helpers.js +23 -1
- package/lib/gateway/gateway-base.d.ts +7 -0
- package/lib/gateway/gateway-base.js +178 -3
- package/lib/gateway/gateway.d.ts +9 -0
- package/lib/gateway/gateway.js +49 -6
- package/lib/gateway/inbound-auth/authorizer.d.ts +12 -0
- package/lib/gateway/inbound-auth/authorizer.js +31 -5
- package/lib/gateway/inbound-auth/custom-claim.d.ts +1 -0
- package/lib/gateway/inbound-auth/custom-claim.js +13 -2
- package/lib/gateway/interceptor.d.ts +5 -0
- package/lib/gateway/interceptor.js +7 -2
- package/lib/gateway/outbound-auth/api-key.d.ts +5 -0
- package/lib/gateway/outbound-auth/api-key.js +7 -2
- package/lib/gateway/outbound-auth/credential-provider.d.ts +5 -0
- package/lib/gateway/outbound-auth/credential-provider.js +17 -2
- package/lib/gateway/outbound-auth/iam-role.d.ts +1 -0
- package/lib/gateway/outbound-auth/iam-role.js +2 -1
- package/lib/gateway/outbound-auth/oauth.d.ts +2 -0
- package/lib/gateway/outbound-auth/oauth.js +2 -1
- package/lib/gateway/perms.d.ts +16 -0
- package/lib/gateway/perms.js +17 -1
- package/lib/gateway/protocol.d.ts +7 -0
- package/lib/gateway/protocol.js +10 -3
- package/lib/gateway/targets/schema/api-schema.d.ts +4 -0
- package/lib/gateway/targets/schema/api-schema.js +161 -6
- package/lib/gateway/targets/schema/base-schema.d.ts +1 -0
- package/lib/gateway/targets/schema/base-schema.js +2 -1
- package/lib/gateway/targets/schema/tool-schema.d.ts +12 -0
- package/lib/gateway/targets/schema/tool-schema.js +166 -6
- package/lib/gateway/targets/target-base.d.ts +5 -0
- package/lib/gateway/targets/target-base.js +76 -3
- package/lib/gateway/targets/target-configuration.d.ts +14 -0
- package/lib/gateway/targets/target-configuration.js +125 -9
- package/lib/gateway/targets/target.d.ts +8 -0
- package/lib/gateway/targets/target.js +37 -4
- package/lib/gateway/validation-helpers.d.ts +4 -0
- package/lib/gateway/validation-helpers.js +4 -1
- package/lib/identity/api-key-credential-provider.d.ts +4 -0
- package/lib/identity/api-key-credential-provider.js +36 -3
- package/lib/identity/grant-helpers.d.ts +7 -0
- package/lib/identity/grant-helpers.js +42 -2
- package/lib/identity/oauth2-credential-provider.d.ts +29 -0
- package/lib/identity/oauth2-credential-provider.js +37 -3
- package/lib/identity/perms.d.ts +5 -0
- package/lib/identity/perms.js +9 -4
- package/lib/identity/validation-helpers.d.ts +53 -0
- package/lib/identity/validation-helpers.js +54 -1
- package/lib/identity/workload-identity.d.ts +3 -0
- package/lib/identity/workload-identity.js +36 -3
- package/lib/memory/memory-strategy.d.ts +6 -0
- package/lib/memory/memory-strategy.js +47 -2
- package/lib/memory/memory.d.ts +4 -0
- package/lib/memory/memory.js +210 -5
- package/lib/memory/strategies/managed-strategy.d.ts +4 -0
- package/lib/memory/strategies/managed-strategy.js +22 -2
- package/lib/memory/strategies/self-managed-strategy.d.ts +4 -0
- package/lib/memory/strategies/self-managed-strategy.js +57 -4
- package/lib/memory/validation-helpers.d.ts +6 -0
- package/lib/memory/validation-helpers.js +7 -1
- package/lib/network/network-configuration.d.ts +5 -0
- package/lib/network/network-configuration.js +83 -6
- package/lib/policy/policy-base.js +36 -3
- package/lib/policy/policy-engine-base.js +36 -3
- package/lib/policy/policy-engine.js +37 -4
- package/lib/policy/policy-statement.js +5 -5
- package/lib/policy/policy-types.js +1 -1
- package/lib/policy/policy.js +36 -3
- package/lib/runtime/inbound-auth/custom-claim.d.ts +1 -0
- package/lib/runtime/inbound-auth/custom-claim.js +13 -2
- package/lib/runtime/inbound-auth/runtime-authorizer-configuration.d.ts +1 -0
- package/lib/runtime/inbound-auth/runtime-authorizer-configuration.js +40 -2
- package/lib/runtime/observability.d.ts +5 -0
- package/lib/runtime/observability.js +79 -5
- package/lib/runtime/perms.d.ts +12 -0
- package/lib/runtime/perms.js +13 -1
- package/lib/runtime/runtime-artifact.d.ts +3 -0
- package/lib/runtime/runtime-artifact.js +69 -5
- package/lib/runtime/runtime-base.d.ts +3 -0
- package/lib/runtime/runtime-base.js +200 -3
- package/lib/runtime/runtime-endpoint-base.d.ts +3 -0
- package/lib/runtime/runtime-endpoint-base.js +22 -2
- package/lib/runtime/runtime-endpoint.d.ts +1 -0
- package/lib/runtime/runtime-endpoint.js +36 -3
- package/lib/runtime/runtime.d.ts +2 -0
- package/lib/runtime/runtime.js +38 -5
- package/lib/runtime/types.d.ts +3 -0
- package/lib/runtime/types.js +2 -1
- package/lib/runtime/validation-helpers.d.ts +6 -0
- package/lib/runtime/validation-helpers.js +7 -1
- package/lib/tools/browser.d.ts +6 -0
- package/lib/tools/browser.js +205 -8
- package/lib/tools/code-interpreter.d.ts +4 -0
- package/lib/tools/code-interpreter.js +185 -7
- package/lib/tools/perms.d.ts +12 -0
- package/lib/tools/perms.js +13 -1
- package/lib/tools/validation-helpers.d.ts +6 -0
- package/lib/tools/validation-helpers.js +7 -1
- package/package.json +10 -10
|
@@ -67,6 +67,7 @@ const TAG_VALUE_PATTERN = /^[\p{L}\p{N}\s._/=+-]*$/u;
|
|
|
67
67
|
* @param name - The configuration name to validate
|
|
68
68
|
* @param _scope - The construct scope for error reporting (optional)
|
|
69
69
|
* @returns Array of validation error messages, empty if valid
|
|
70
|
+
* @deprecated Use the equivalent construct from `aws-cdk-lib/aws-bedrockagentcore` instead.
|
|
70
71
|
*/
|
|
71
72
|
function validateConfigName(name, _scope) {
|
|
72
73
|
const errors = [];
|
|
@@ -94,6 +95,7 @@ function validateConfigName(name, _scope) {
|
|
|
94
95
|
* @param description - The description to validate
|
|
95
96
|
* @param _scope - The construct scope for error reporting (optional)
|
|
96
97
|
* @returns Array of validation error messages, empty if valid
|
|
98
|
+
* @deprecated Use the equivalent construct from `aws-cdk-lib/aws-bedrockagentcore` instead.
|
|
97
99
|
*/
|
|
98
100
|
function validateDescription(description, _scope) {
|
|
99
101
|
const errors = [];
|
|
@@ -113,6 +115,7 @@ function validateDescription(description, _scope) {
|
|
|
113
115
|
* @param evaluators - The evaluators array to validate
|
|
114
116
|
* @param _scope - The construct scope for error reporting (optional)
|
|
115
117
|
* @returns Array of validation error messages, empty if valid
|
|
118
|
+
* @deprecated Use the equivalent construct from `aws-cdk-lib/aws-bedrockagentcore` instead.
|
|
116
119
|
*/
|
|
117
120
|
function validateEvaluators(evaluators, _scope) {
|
|
118
121
|
const errors = [];
|
|
@@ -133,6 +136,7 @@ function validateEvaluators(evaluators, _scope) {
|
|
|
133
136
|
* @param percentage - The sampling percentage to validate
|
|
134
137
|
* @param _scope - The construct scope for error reporting (optional)
|
|
135
138
|
* @returns Array of validation error messages, empty if valid
|
|
139
|
+
* @deprecated Use the equivalent construct from `aws-cdk-lib/aws-bedrockagentcore` instead.
|
|
136
140
|
*/
|
|
137
141
|
function validateSamplingPercentage(percentage, _scope) {
|
|
138
142
|
const errors = [];
|
|
@@ -155,6 +159,7 @@ function validateSamplingPercentage(percentage, _scope) {
|
|
|
155
159
|
* @param filters - The filters array to validate
|
|
156
160
|
* @param _scope - The construct scope for error reporting (optional)
|
|
157
161
|
* @returns Array of validation error messages, empty if valid
|
|
162
|
+
* @deprecated Use the equivalent construct from `aws-cdk-lib/aws-bedrockagentcore` instead.
|
|
158
163
|
*/
|
|
159
164
|
function validateFilters(filters, _scope) {
|
|
160
165
|
const errors = [];
|
|
@@ -171,6 +176,7 @@ function validateFilters(filters, _scope) {
|
|
|
171
176
|
* @param minutes - The session timeout in minutes to validate
|
|
172
177
|
* @param _scope - The construct scope for error reporting (optional)
|
|
173
178
|
* @returns Array of validation error messages, empty if valid
|
|
179
|
+
* @deprecated Use the equivalent construct from `aws-cdk-lib/aws-bedrockagentcore` instead.
|
|
174
180
|
*/
|
|
175
181
|
function validateSessionTimeout(minutes, _scope) {
|
|
176
182
|
const errors = [];
|
|
@@ -193,6 +199,7 @@ function validateSessionTimeout(minutes, _scope) {
|
|
|
193
199
|
* @param names - The log group names array to validate
|
|
194
200
|
* @param _scope - The construct scope for error reporting (optional)
|
|
195
201
|
* @returns Array of validation error messages, empty if valid
|
|
202
|
+
* @deprecated Use the equivalent construct from `aws-cdk-lib/aws-bedrockagentcore` instead.
|
|
196
203
|
*/
|
|
197
204
|
function validateLogGroupNames(names, _scope) {
|
|
198
205
|
const errors = [];
|
|
@@ -210,6 +217,7 @@ function validateLogGroupNames(names, _scope) {
|
|
|
210
217
|
* @param names - The service names array to validate
|
|
211
218
|
* @param _scope - The construct scope for error reporting (optional)
|
|
212
219
|
* @returns Array of validation error messages, empty if valid
|
|
220
|
+
* @deprecated Use the equivalent construct from `aws-cdk-lib/aws-bedrockagentcore` instead.
|
|
213
221
|
*/
|
|
214
222
|
function validateServiceNames(names, _scope) {
|
|
215
223
|
const errors = [];
|
|
@@ -228,6 +236,7 @@ function validateServiceNames(names, _scope) {
|
|
|
228
236
|
* @param name - The evaluator name to validate
|
|
229
237
|
* @param _scope - The construct scope for error reporting (optional)
|
|
230
238
|
* @returns Array of validation error messages, empty if valid
|
|
239
|
+
* @deprecated Use the equivalent construct from `aws-cdk-lib/aws-bedrockagentcore` instead.
|
|
231
240
|
*/
|
|
232
241
|
function validateEvaluatorName(name, _scope) {
|
|
233
242
|
const errors = [];
|
|
@@ -255,6 +264,7 @@ function validateEvaluatorName(name, _scope) {
|
|
|
255
264
|
* @param instructions - The instructions to validate
|
|
256
265
|
* @param _scope - The construct scope for error reporting (optional)
|
|
257
266
|
* @returns Array of validation error messages, empty if valid
|
|
267
|
+
* @deprecated Use the equivalent construct from `aws-cdk-lib/aws-bedrockagentcore` instead.
|
|
258
268
|
*/
|
|
259
269
|
function validateInstructions(instructions, _scope) {
|
|
260
270
|
const errors = [];
|
|
@@ -275,6 +285,7 @@ function validateInstructions(instructions, _scope) {
|
|
|
275
285
|
* @param options - The categorical rating options to validate
|
|
276
286
|
* @param _scope - The construct scope for error reporting (optional)
|
|
277
287
|
* @returns Array of validation error messages, empty if valid
|
|
288
|
+
* @deprecated Use the equivalent construct from `aws-cdk-lib/aws-bedrockagentcore` instead.
|
|
278
289
|
*/
|
|
279
290
|
function validateCategoricalRatingScale(options, _scope) {
|
|
280
291
|
const errors = [];
|
|
@@ -297,6 +308,7 @@ function validateCategoricalRatingScale(options, _scope) {
|
|
|
297
308
|
* @param options - The numerical rating options to validate
|
|
298
309
|
* @param _scope - The construct scope for error reporting (optional)
|
|
299
310
|
* @returns Array of validation error messages, empty if valid
|
|
311
|
+
* @deprecated Use the equivalent construct from `aws-cdk-lib/aws-bedrockagentcore` instead.
|
|
300
312
|
*/
|
|
301
313
|
function validateNumericalRatingScale(options, _scope) {
|
|
302
314
|
const errors = [];
|
|
@@ -319,6 +331,7 @@ function validateNumericalRatingScale(options, _scope) {
|
|
|
319
331
|
* @param seconds - The timeout in seconds to validate
|
|
320
332
|
* @param _scope - The construct scope for error reporting (optional)
|
|
321
333
|
* @returns Array of validation error messages, empty if valid
|
|
334
|
+
* @deprecated Use the equivalent construct from `aws-cdk-lib/aws-bedrockagentcore` instead.
|
|
322
335
|
*/
|
|
323
336
|
function validateLambdaTimeout(seconds, _scope) {
|
|
324
337
|
const errors = [];
|
|
@@ -342,6 +355,7 @@ function validateLambdaTimeout(seconds, _scope) {
|
|
|
342
355
|
* @param param - The parameter to validate
|
|
343
356
|
* @param scope - The construct scope for error reporting (optional)
|
|
344
357
|
* @returns The validated parameter
|
|
358
|
+
* @deprecated Use the equivalent construct from `aws-cdk-lib/aws-bedrockagentcore` instead.
|
|
345
359
|
*/
|
|
346
360
|
function throwIfInvalid(validationFn, param, scope) {
|
|
347
361
|
const errors = validationFn(param, scope);
|
|
@@ -400,11 +414,19 @@ function validateTags(tags, keyPattern, _scope) {
|
|
|
400
414
|
return errors;
|
|
401
415
|
}
|
|
402
416
|
/** Validates tags for Evaluator resources (Unicode keys allowed per CFN docs) */
|
|
417
|
+
/**
|
|
418
|
+
* This API has been graduated to stable.
|
|
419
|
+
* @deprecated Use the equivalent construct from `aws-cdk-lib/aws-bedrockagentcore` instead.
|
|
420
|
+
*/
|
|
403
421
|
function validateEvaluatorTags(tags, scope) {
|
|
404
422
|
return validateTags(tags, EVALUATOR_TAG_KEY_PATTERN, scope);
|
|
405
423
|
}
|
|
406
424
|
/** Validates tags for OnlineEvaluationConfig resources (ASCII keys per CFN pattern) */
|
|
425
|
+
/**
|
|
426
|
+
* This API has been graduated to stable.
|
|
427
|
+
* @deprecated Use the equivalent construct from `aws-cdk-lib/aws-bedrockagentcore` instead.
|
|
428
|
+
*/
|
|
407
429
|
function validateEvaluationTags(tags, scope) {
|
|
408
430
|
return validateTags(tags, ONLINE_EVALUATION_CONFIG_TAG_KEY_PATTERN, scope);
|
|
409
431
|
}
|
|
410
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi1oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidmFsaWRhdGlvbi1oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7R0FXRzs7QUE0REgsZ0RBZ0NDO0FBUUQsa0RBa0JDO0FBUUQsZ0RBcUJDO0FBUUQsZ0VBd0JDO0FBUUQsMENBY0M7QUFRRCx3REF3QkM7QUFRRCxzREFhQztBQVFELG9EQWFDO0FBU0Qsc0RBZ0NDO0FBUUQsb0RBaUJDO0FBUUQsd0VBa0JDO0FBUUQsb0VBa0JDO0FBUUQsc0RBZ0JDO0FBYUQsd0NBVUM7QUFrREQsc0RBRUM7QUFHRCx3REFFQztBQS9lRCw2Q0FBb0M7QUFDcEMsd0RBQXVGO0FBQ3ZGLDRFQUE0RDtBQVk1RDs7K0VBRStFO0FBQy9FLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxDQUFDO0FBQ2pDLE1BQU0sc0JBQXNCLEdBQUcsRUFBRSxDQUFDO0FBQ2xDLE1BQU0sc0JBQXNCLEdBQUcsR0FBRyxDQUFDO0FBQ25DLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxDQUFDO0FBQy9CLE1BQU0sb0JBQW9CLEdBQUcsRUFBRSxDQUFDO0FBQ2hDLE1BQU0sdUJBQXVCLEdBQUcsSUFBSSxDQUFDO0FBQ3JDLE1BQU0sdUJBQXVCLEdBQUcsR0FBRyxDQUFDO0FBQ3BDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxDQUFDO0FBQzVCLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxDQUFDO0FBQzlCLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDO0FBQ2pDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxDQUFDO0FBQy9CLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxDQUFDO0FBQy9CLE1BQU0sdUJBQXVCLEdBQUcsQ0FBQyxDQUFDO0FBQ2xDLE1BQU0sdUJBQXVCLEdBQUcsQ0FBQyxDQUFDO0FBQ2xDLE1BQU0seUJBQXlCLEdBQUcsQ0FBQyxDQUFDO0FBQ3BDLE1BQU0seUJBQXlCLEdBQUcs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O1lBQzlELENBQUM7UUFDSCxDQUFDO1FBQ0QsSUFBSSxDQUFDLG1CQUFLLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDL0IsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLGFBQWEsRUFBRSxDQUFDO2dCQUNqQyxNQUFNLENBQUMsSUFBSSxDQUFDLHNCQUFzQixHQUFHLHFCQUFxQixhQUFhLG9CQUFvQixLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUM3RyxDQUFDO1lBQ0QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUNuQyxNQUFNLENBQUMsSUFBSSxDQUFDLHNCQUFzQixHQUFHLHVGQUF1RixDQUFDLENBQUM7WUFDaEksQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVELGlGQUFpRjtBQUNqRixTQUFnQixxQkFBcUIsQ0FBQyxJQUFnQyxFQUFFLEtBQWtCO0lBQ3hGLE9BQU8sWUFBWSxDQUFDLElBQUksRUFBRSx5QkFBeUIsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM5RCxDQUFDO0FBRUQsdUZBQXVGO0FBQ3ZGLFNBQWdCLHNCQUFzQixDQUFDLElBQWdDLEVBQUUsS0FBa0I7SUFDekYsT0FBTyxZQUFZLENBQUMsSUFBSSxFQUFFLHdDQUF3QyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzdFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqICBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKS4gWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuICogIHdpdGggdGhlIExpY2Vuc2UuIEEgY29weSBvZiB0aGUgTGljZW5zZSBpcyBsb2NhdGVkIGF0XG4gKlxuICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiAgb3IgaW4gdGhlICdsaWNlbnNlJyBmaWxlIGFjY29tcGFueWluZyB0aGlzIGZpbGUuIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAnQVMgSVMnIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVNcbiAqICBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9uc1xuICogIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgeyBUb2tlbiB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IFZhbGlkYXRpb25FcnJvciwgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9lcnJvcnMnO1xuaW1wb3J0IHsgbGl0IH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvaGVscGVycy1pbnRlcm5hbCc7XG5pbXBvcnQgdHlwZSB7IElDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB0eXBlIHsgQ2F0ZWdvcmljYWxSYXRpbmdPcHRpb24sIEZpbHRlckNvbmZpZywgTnVtZXJpY2FsUmF0aW5nT3B0aW9uIH0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogSW50ZXJmYWNlIGZvciBldmFsdWF0b3IgcmVmZXJlbmNlcyB1c2VkIGluIHZhbGlkYXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuaW50ZXJmYWNlIElFdmFsdWF0b3JSZWZlcmVuY2Uge1xuICByZWFkb25seSBldmFsdWF0b3JJZDogc3RyaW5nO1xufVxuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUQU5UU1xuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuY29uc3QgQ09ORklHX05BTUVfTUlOX0xFTkdUSCA9IDE7XG5jb25zdCBDT05GSUdfTkFNRV9NQVhfTEVOR1RIID0gNDg7XG5jb25zdCBERVNDUklQVElPTl9NQVhfTEVOR1RIID0gMjAwO1xuY29uc3QgRVZBTFVBVE9SU19NSU5fQ09VTlQgPSAxO1xuY29uc3QgRVZBTFVBVE9SU19NQVhfQ09VTlQgPSAxMDtcbmNvbnN0IFNBTVBMSU5HX1BFUkNFTlRBR0VfTUlOID0gMC4wMTtcbmNvbnN0IFNBTVBMSU5HX1BFUkNFTlRBR0VfTUFYID0gMTAwO1xuY29uc3QgRklMVEVSU19NQVhfQ09VTlQgPSA1O1xuY29uc3QgU0VTU0lPTl9USU1FT1VUX01JTiA9IDE7XG5jb25zdCBTRVNTSU9OX1RJTUVPVVRfTUFYID0gMTQ0MDtcbmNvbnN0IExPR19HUk9VUFNfTUlOX0NPVU5UID0gMTtcbmNvbnN0IExPR19HUk9VUFNfTUFYX0NPVU5UID0gNTtcbmNvbnN0IFNFUlZJQ0VfTkFNRVNfTUlOX0NPVU5UID0gMTtcbmNvbnN0IFNFUlZJQ0VfTkFNRVNfTUFYX0NPVU5UID0gMTtcbmNvbnN0IEVWQUxVQVRPUl9OQU1FX01JTl9MRU5HVEggPSAxO1xuY29uc3QgRVZBTFVBVE9SX05BTUVfTUFYX0xFTkdUSCA9IDQ4O1xuY29uc3QgUkFUSU5HX1NDQUxFX01JTl9PUFRJT05TID0gMTtcbmNvbnN0IFRBR19LRVlfTUlOID0gMTtcbmNvbnN0IFRBR19LRVlfTUFYID0gMTI4O1xuY29uc3QgVEFHX1ZBTFVFX01BWCA9IDI1NjtcbmNvbnN0IFRBR1NfTUFYX0NPVU5UID0gNTA7XG5jb25zdCBPTkxJTkVfRVZBTFVBVElPTl9DT05GSUdfVEFHX0tFWV9QQVRURVJOID0gL15bYS16QS1aK1xcLT0uXzovXSskLztcbmNvbnN0IEVWQUxVQVRPUl9UQUdfS0VZX1BBVFRFUk4gPSAvXltcXHB7TH1cXHB7Tn1cXHMuXzovPStALV0rJC91O1xuY29uc3QgVEFHX1ZBTFVFX1BBVFRFUk4gPSAvXltcXHB7TH1cXHB7Tn1cXHMuXy89Ky1dKiQvdTtcblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUWVBFU1xuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuZXhwb3J0IHR5cGUgVmFsaWRhdGlvbkZuPFQ+ID0gKHBhcmFtOiBULCBzY29wZT86IElDb25zdHJ1Y3QpID0+IHN0cmluZ1tdO1xuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFUSU9OIEZVTkNUSU9OU1xuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4vKipcbiAqIFZhbGlkYXRlcyB0aGUgb25saW5lIGV2YWx1YXRpb24gY29uZmlndXJhdGlvbiBuYW1lLlxuICogTXVzdCBzdGFydCB3aXRoIGEgbGV0dGVyIGFuZCBjb250YWluIG9ubHkgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgYW5kIHVuZGVyc2NvcmVzLlxuICogQHBhcmFtIG5hbWUgLSBUaGUgY29uZmlndXJhdGlvbiBuYW1lIHRvIHZhbGlkYXRlXG4gKiBAcGFyYW0gX3Njb3BlIC0gVGhlIGNvbnN0cnVjdCBzY29wZSBmb3IgZXJyb3IgcmVwb3J0aW5nIChvcHRpb25hbClcbiAqIEByZXR1cm5zIEFycmF5IG9mIHZhbGlkYXRpb24gZXJyb3IgbWVzc2FnZXMsIGVtcHR5IGlmIHZhbGlkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUNvbmZpZ05hbWUobmFtZTogc3RyaW5nLCBfc2NvcGU/OiBJQ29uc3RydWN0KTogc3RyaW5nW10ge1xuICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgaWYgKG5hbWUgPT0gbnVsbCkge1xuICAgIHJldHVybiBlcnJvcnM7XG4gIH1cblxuICBpZiAoVG9rZW4uaXNVbnJlc29sdmVkKG5hbWUpKSB7XG4gICAgcmV0dXJuIGVycm9ycztcbiAgfVxuXG4gIGlmIChuYW1lLmxlbmd0aCA8IENPTkZJR19OQU1FX01JTl9MRU5HVEgpIHtcbiAgICBlcnJvcnMucHVzaChcbiAgICAgIGBDb25maWd1cmF0aW9uIG5hbWUgbXVzdCBiZSBhdCBsZWFzdCAke0NPTkZJR19OQU1FX01JTl9MRU5HVEh9IGNoYXJhY3RlcihzKSwgZ290ICR7bmFtZS5sZW5ndGh9YCxcbiAgICApO1xuICB9XG5cbiAgaWYgKG5hbWUubGVuZ3RoID4gQ09ORklHX05BTUVfTUFYX0xFTkdUSCkge1xuICAgIGVycm9ycy5wdXNoKFxuICAgICAgYENvbmZpZ3VyYXRpb24gbmFtZSBtdXN0IGJlIGF0IG1vc3QgJHtDT05GSUdfTkFNRV9NQVhfTEVOR1RIfSBjaGFyYWN0ZXJzLCBnb3QgJHtuYW1lLmxlbmd0aH1gLFxuICAgICk7XG4gIH1cblxuICAvLyBQYXR0ZXJuOiBeW2EtekEtWl1bYS16QS1aMC05X117MCw0N30kXG4gIGNvbnN0IHZhbGlkTmFtZVBhdHRlcm4gPSAvXlthLXpBLVpdW2EtekEtWjAtOV9dezAsNDd9JC87XG4gIGlmICghdmFsaWROYW1lUGF0dGVybi50ZXN0KG5hbWUpKSB7XG4gICAgZXJyb3JzLnB1c2goXG4gICAgICBgQ29uZmlndXJhdGlvbiBuYW1lIFwiJHtuYW1lfVwiIGRvZXMgbm90IG1hdGNoIHJlcXVpcmVkIHBhdHRlcm4uIE11c3Qgc3RhcnQgd2l0aCBhIGxldHRlciBhbmQgY29udGFpbiBvbmx5IGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIGFuZCB1bmRlcnNjb3Jlcy5gLFxuICAgICk7XG4gIH1cblxuICByZXR1cm4gZXJyb3JzO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlcyB0aGUgZGVzY3JpcHRpb24gZmllbGQuXG4gKiBAcGFyYW0gZGVzY3JpcHRpb24gLSBUaGUgZGVzY3JpcHRpb24gdG8gdmFsaWRhdGVcbiAqIEBwYXJhbSBfc2NvcGUgLSBUaGUgY29uc3RydWN0IHNjb3BlIGZvciBlcnJvciByZXBvcnRpbmcgKG9wdGlvbmFsKVxuICogQHJldHVybnMgQXJyYXkgb2YgdmFsaWRhdGlvbiBlcnJvciBtZXNzYWdlcywgZW1wdHkgaWYgdmFsaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlRGVzY3JpcHRpb24oZGVzY3JpcHRpb246IHN0cmluZyB8IHVuZGVmaW5lZCwgX3Njb3BlPzogSUNvbnN0cnVjdCk6IHN0cmluZ1tdIHtcbiAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGlmIChkZXNjcmlwdGlvbiA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGVycm9ycztcbiAgfVxuXG4gIGlmIChUb2tlbi5pc1VucmVzb2x2ZWQoZGVzY3JpcHRpb24pKSB7XG4gICAgcmV0dXJuIGVycm9ycztcbiAgfVxuXG4gIGlmIChkZXNjcmlwdGlvbi5sZW5ndGggPiBERVNDUklQVElPTl9NQVhfTEVOR1RIKSB7XG4gICAgZXJyb3JzLnB1c2goXG4gICAgICBgRGVzY3JpcHRpb24gbXVzdCBiZSBhdCBtb3N0ICR7REVTQ1JJUFRJT05fTUFYX0xFTkdUSH0gY2hhcmFjdGVycywgZ290ICR7ZGVzY3JpcHRpb24ubGVuZ3RofWAsXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBlcnJvcnM7XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIHRoZSBldmFsdWF0b3JzIGFycmF5LlxuICogQHBhcmFtIGV2YWx1YXRvcnMgLSBUaGUgZXZhbHVhdG9ycyBhcnJheSB0byB2YWxpZGF0ZVxuICogQHBhcmFtIF9zY29wZSAtIFRoZSBjb25zdHJ1Y3Qgc2NvcGUgZm9yIGVycm9yIHJlcG9ydGluZyAob3B0aW9uYWwpXG4gKiBAcmV0dXJucyBBcnJheSBvZiB2YWxpZGF0aW9uIGVycm9yIG1lc3NhZ2VzLCBlbXB0eSBpZiB2YWxpZFxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVFdmFsdWF0b3JzKGV2YWx1YXRvcnM6IElFdmFsdWF0b3JSZWZlcmVuY2VbXSwgX3Njb3BlPzogSUNvbnN0cnVjdCk6IHN0cmluZ1tdIHtcbiAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGlmIChldmFsdWF0b3JzID09IG51bGwpIHtcbiAgICBlcnJvcnMucHVzaCgnRXZhbHVhdG9ycyBhcnJheSBpcyByZXF1aXJlZCcpO1xuICAgIHJldHVybiBlcnJvcnM7XG4gIH1cblxuICBpZiAoZXZhbHVhdG9ycy5sZW5ndGggPCBFVkFMVUFUT1JTX01JTl9DT1VOVCkge1xuICAgIGVycm9ycy5wdXNoKFxuICAgICAgYEF0IGxlYXN0ICR7RVZBTFVBVE9SU19NSU5fQ09VTlR9IGV2YWx1YXRvciBpcyByZXF1aXJlZCwgZ290ICR7ZXZhbHVhdG9ycy5sZW5ndGh9YCxcbiAgICApO1xuICB9XG5cbiAgaWYgKGV2YWx1YXRvcnMubGVuZ3RoID4gRVZBTFVBVE9SU19NQVhfQ09VTlQpIHtcbiAgICBlcnJvcnMucHVzaChcbiAgICAgIGBBdCBtb3N0ICR7RVZBTFVBVE9SU19NQVhfQ09VTlR9IGV2YWx1YXRvcnMgYXJlIGFsbG93ZWQsIGdvdCAke2V2YWx1YXRvcnMubGVuZ3RofWAsXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBlcnJvcnM7XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIHRoZSBzYW1wbGluZyBwZXJjZW50YWdlLlxuICogQHBhcmFtIHBlcmNlbnRhZ2UgLSBUaGUgc2FtcGxpbmcgcGVyY2VudGFnZSB0byB2YWxpZGF0ZVxuICogQHBhcmFtIF9zY29wZSAtIFRoZSBjb25zdHJ1Y3Qgc2NvcGUgZm9yIGVycm9yIHJlcG9ydGluZyAob3B0aW9uYWwpXG4gKiBAcmV0dXJucyBBcnJheSBvZiB2YWxpZGF0aW9uIGVycm9yIG1lc3NhZ2VzLCBlbXB0eSBpZiB2YWxpZFxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVTYW1wbGluZ1BlcmNlbnRhZ2UocGVyY2VudGFnZTogbnVtYmVyIHwgdW5kZWZpbmVkLCBfc2NvcGU/OiBJQ29uc3RydWN0KTogc3RyaW5nW10ge1xuICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgaWYgKHBlcmNlbnRhZ2UgPT0gbnVsbCkge1xuICAgIHJldHVybiBlcnJvcnM7XG4gIH1cblxuICBpZiAoVG9rZW4uaXNVbnJlc29sdmVkKHBlcmNlbnRhZ2UpKSB7XG4gICAgcmV0dXJuIGVycm9ycztcbiAgfVxuXG4gIGlmIChwZXJjZW50YWdlIDwgU0FNUExJTkdfUEVSQ0VOVEFHRV9NSU4pIHtcbiAgICBlcnJvcnMucHVzaChcbiAgICAgIGBTYW1wbGluZyBwZXJjZW50YWdlIG11c3QgYmUgYXQgbGVhc3QgJHtTQU1QTElOR19QRVJDRU5UQUdFX01JTn0sIGdvdCAke3BlcmNlbnRhZ2V9YCxcbiAgICApO1xuICB9XG5cbiAgaWYgKHBlcmNlbnRhZ2UgPiBTQU1QTElOR19QRVJDRU5UQUdFX01BWCkge1xuICAgIGVycm9ycy5wdXNoKFxuICAgICAgYFNhbXBsaW5nIHBlcmNlbnRhZ2UgbXVzdCBiZSBhdCBtb3N0ICR7U0FNUExJTkdfUEVSQ0VOVEFHRV9NQVh9LCBnb3QgJHtwZXJjZW50YWdlfWAsXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBlcnJvcnM7XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIHRoZSBmaWx0ZXJzIGFycmF5LlxuICogQHBhcmFtIGZpbHRlcnMgLSBUaGUgZmlsdGVycyBhcnJheSB0byB2YWxpZGF0ZVxuICogQHBhcmFtIF9zY29wZSAtIFRoZSBjb25zdHJ1Y3Qgc2NvcGUgZm9yIGVycm9yIHJlcG9ydGluZyAob3B0aW9uYWwpXG4gKiBAcmV0dXJucyBBcnJheSBvZiB2YWxpZGF0aW9uIGVycm9yIG1lc3NhZ2VzLCBlbXB0eSBpZiB2YWxpZFxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVGaWx0ZXJzKGZpbHRlcnM6IEZpbHRlckNvbmZpZ1tdIHwgdW5kZWZpbmVkLCBfc2NvcGU/OiBJQ29uc3RydWN0KTogc3RyaW5nW10ge1xuICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgaWYgKGZpbHRlcnMgPT0gbnVsbCkge1xuICAgIHJldHVybiBlcnJvcnM7XG4gIH1cblxuICBpZiAoZmlsdGVycy5sZW5ndGggPiBGSUxURVJTX01BWF9DT1VOVCkge1xuICAgIGVycm9ycy5wdXNoKFxuICAgICAgYEF0IG1vc3QgJHtGSUxURVJTX01BWF9DT1VOVH0gZmlsdGVycyBhcmUgYWxsb3dlZCwgZ290ICR7ZmlsdGVycy5sZW5ndGh9YCxcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIGVycm9ycztcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGhlIHNlc3Npb24gdGltZW91dCBpbiBtaW51dGVzLlxuICogQHBhcmFtIG1pbnV0ZXMgLSBUaGUgc2Vzc2lvbiB0aW1lb3V0IGluIG1pbnV0ZXMgdG8gdmFsaWRhdGVcbiAqIEBwYXJhbSBfc2NvcGUgLSBUaGUgY29uc3RydWN0IHNjb3BlIGZvciBlcnJvciByZXBvcnRpbmcgKG9wdGlvbmFsKVxuICogQHJldHVybnMgQXJyYXkgb2YgdmFsaWRhdGlvbiBlcnJvciBtZXNzYWdlcywgZW1wdHkgaWYgdmFsaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlU2Vzc2lvblRpbWVvdXQobWludXRlczogbnVtYmVyIHwgdW5kZWZpbmVkLCBfc2NvcGU/OiBJQ29uc3RydWN0KTogc3RyaW5nW10ge1xuICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgaWYgKG1pbnV0ZXMgPT0gbnVsbCkge1xuICAgIHJldHVybiBlcnJvcnM7XG4gIH1cblxuICBpZiAoVG9rZW4uaXNVbnJlc29sdmVkKG1pbnV0ZXMpKSB7XG4gICAgcmV0dXJuIGVycm9ycztcbiAgfVxuXG4gIGlmIChtaW51dGVzIDwgU0VTU0lPTl9USU1FT1VUX01JTikge1xuICAgIGVycm9ycy5wdXNoKFxuICAgICAgYFNlc3Npb24gdGltZW91dCBtdXN0IGJlIGF0IGxlYXN0ICR7U0VTU0lPTl9USU1FT1VUX01JTn0gbWludXRlKHMpLCBnb3QgJHttaW51dGVzfWAsXG4gICAgKTtcbiAgfVxuXG4gIGlmIChtaW51dGVzID4gU0VTU0lPTl9USU1FT1VUX01BWCkge1xuICAgIGVycm9ycy5wdXNoKFxuICAgICAgYFNlc3Npb24gdGltZW91dCBtdXN0IGJlIGF0IG1vc3QgJHtTRVNTSU9OX1RJTUVPVVRfTUFYfSBtaW51dGVzLCBnb3QgJHttaW51dGVzfWAsXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBlcnJvcnM7XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIHRoZSBsb2cgZ3JvdXAgbmFtZXMgYXJyYXkuXG4gKiBAcGFyYW0gbmFtZXMgLSBUaGUgbG9nIGdyb3VwIG5hbWVzIGFycmF5IHRvIHZhbGlkYXRlXG4gKiBAcGFyYW0gX3Njb3BlIC0gVGhlIGNvbnN0cnVjdCBzY29wZSBmb3IgZXJyb3IgcmVwb3J0aW5nIChvcHRpb25hbClcbiAqIEByZXR1cm5zIEFycmF5IG9mIHZhbGlkYXRpb24gZXJyb3IgbWVzc2FnZXMsIGVtcHR5IGlmIHZhbGlkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUxvZ0dyb3VwTmFtZXMobmFtZXM6IHN0cmluZ1tdLCBfc2NvcGU/OiBJQ29uc3RydWN0KTogc3RyaW5nW10ge1xuICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgaWYgKG5hbWVzID09IG51bGwgfHwgbmFtZXMubGVuZ3RoIDwgTE9HX0dST1VQU19NSU5fQ09VTlQpIHtcbiAgICBlcnJvcnMucHVzaChgQXQgbGVhc3QgJHtMT0dfR1JPVVBTX01JTl9DT1VOVH0gbG9nIGdyb3VwIG5hbWUgaXMgcmVxdWlyZWQsIGdvdCAke25hbWVzPy5sZW5ndGggPz8gMH1gKTtcbiAgICByZXR1cm4gZXJyb3JzO1xuICB9XG5cbiAgaWYgKG5hbWVzLmxlbmd0aCA+IExPR19HUk9VUFNfTUFYX0NPVU5UKSB7XG4gICAgZXJyb3JzLnB1c2goYEF0IG1vc3QgJHtMT0dfR1JPVVBTX01BWF9DT1VOVH0gbG9nIGdyb3VwIG5hbWVzIGFyZSBhbGxvd2VkLCBnb3QgJHtuYW1lcy5sZW5ndGh9YCk7XG4gIH1cblxuICByZXR1cm4gZXJyb3JzO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlcyB0aGUgc2VydmljZSBuYW1lcyBhcnJheS5cbiAqIEBwYXJhbSBuYW1lcyAtIFRoZSBzZXJ2aWNlIG5hbWVzIGFycmF5IHRvIHZhbGlkYXRlXG4gKiBAcGFyYW0gX3Njb3BlIC0gVGhlIGNvbnN0cnVjdCBzY29wZSBmb3IgZXJyb3IgcmVwb3J0aW5nIChvcHRpb25hbClcbiAqIEByZXR1cm5zIEFycmF5IG9mIHZhbGlkYXRpb24gZXJyb3IgbWVzc2FnZXMsIGVtcHR5IGlmIHZhbGlkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVNlcnZpY2VOYW1lcyhuYW1lczogc3RyaW5nW10sIF9zY29wZT86IElDb25zdHJ1Y3QpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcblxuICBpZiAobmFtZXMgPT0gbnVsbCB8fCBuYW1lcy5sZW5ndGggPCBTRVJWSUNFX05BTUVTX01JTl9DT1VOVCkge1xuICAgIGVycm9ycy5wdXNoKGBBdCBsZWFzdCAke1NFUlZJQ0VfTkFNRVNfTUlOX0NPVU5UfSBzZXJ2aWNlIG5hbWUgaXMgcmVxdWlyZWQsIGdvdCAke25hbWVzPy5sZW5ndGggPz8gMH1gKTtcbiAgICByZXR1cm4gZXJyb3JzO1xuICB9XG5cbiAgaWYgKG5hbWVzLmxlbmd0aCA+IFNFUlZJQ0VfTkFNRVNfTUFYX0NPVU5UKSB7XG4gICAgZXJyb3JzLnB1c2goYEF0IG1vc3QgJHtTRVJWSUNFX05BTUVTX01BWF9DT1VOVH0gc2VydmljZSBuYW1lIGlzIGFsbG93ZWQsIGdvdCAke25hbWVzLmxlbmd0aH1gKTtcbiAgfVxuXG4gIHJldHVybiBlcnJvcnM7XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIHRoZSBldmFsdWF0b3IgbmFtZS5cbiAqIE11c3Qgc3RhcnQgd2l0aCBhIGxldHRlciBhbmQgY29udGFpbiBvbmx5IGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIGFuZCB1bmRlcnNjb3Jlcy5cbiAqIEBwYXJhbSBuYW1lIC0gVGhlIGV2YWx1YXRvciBuYW1lIHRvIHZhbGlkYXRlXG4gKiBAcGFyYW0gX3Njb3BlIC0gVGhlIGNvbnN0cnVjdCBzY29wZSBmb3IgZXJyb3IgcmVwb3J0aW5nIChvcHRpb25hbClcbiAqIEByZXR1cm5zIEFycmF5IG9mIHZhbGlkYXRpb24gZXJyb3IgbWVzc2FnZXMsIGVtcHR5IGlmIHZhbGlkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUV2YWx1YXRvck5hbWUobmFtZTogc3RyaW5nLCBfc2NvcGU/OiBJQ29uc3RydWN0KTogc3RyaW5nW10ge1xuICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgaWYgKG5hbWUgPT0gbnVsbCkge1xuICAgIHJldHVybiBlcnJvcnM7XG4gIH1cblxuICBpZiAoVG9rZW4uaXNVbnJlc29sdmVkKG5hbWUpKSB7XG4gICAgcmV0dXJuIGVycm9ycztcbiAgfVxuXG4gIGlmIChuYW1lLmxlbmd0aCA8IEVWQUxVQVRPUl9OQU1FX01JTl9MRU5HVEgpIHtcbiAgICBlcnJvcnMucHVzaChcbiAgICAgIGBFdmFsdWF0b3IgbmFtZSBtdXN0IGJlIGF0IGxlYXN0ICR7RVZBTFVBVE9SX05BTUVfTUlOX0xFTkdUSH0gY2hhcmFjdGVyKHMpLCBnb3QgJHtuYW1lLmxlbmd0aH1gLFxuICAgICk7XG4gIH1cblxuICBpZiAobmFtZS5sZW5ndGggPiBFVkFMVUFUT1JfTkFNRV9NQVhfTEVOR1RIKSB7XG4gICAgZXJyb3JzLnB1c2goXG4gICAgICBgRXZhbHVhdG9yIG5hbWUgbXVzdCBiZSBhdCBtb3N0ICR7RVZBTFVBVE9SX05BTUVfTUFYX0xFTkdUSH0gY2hhcmFjdGVycywgZ290ICR7bmFtZS5sZW5ndGh9YCxcbiAgICApO1xuICB9XG5cbiAgLy8gUGF0dGVybjogXlthLXpBLVpdW2EtekEtWjAtOV9dezAsNDd9JFxuICBjb25zdCB2YWxpZE5hbWVQYXR0ZXJuID0gL15bYS16QS1aXVthLXpBLVowLTlfXXswLDQ3fSQvO1xuICBpZiAoIXZhbGlkTmFtZVBhdHRlcm4udGVzdChuYW1lKSkge1xuICAgIGVycm9ycy5wdXNoKFxuICAgICAgYEV2YWx1YXRvciBuYW1lIFwiJHtuYW1lfVwiIGRvZXMgbm90IG1hdGNoIHJlcXVpcmVkIHBhdHRlcm4uIE11c3Qgc3RhcnQgd2l0aCBhIGxldHRlciBhbmQgY29udGFpbiBvbmx5IGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIGFuZCB1bmRlcnNjb3Jlcy5gLFxuICAgICk7XG4gIH1cblxuICByZXR1cm4gZXJyb3JzO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlcyB0aGF0IGluc3RydWN0aW9ucyBhcmUgcHJvdmlkZWQgYW5kIG5vbi1lbXB0eS5cbiAqIEBwYXJhbSBpbnN0cnVjdGlvbnMgLSBUaGUgaW5zdHJ1Y3Rpb25zIHRvIHZhbGlkYXRlXG4gKiBAcGFyYW0gX3Njb3BlIC0gVGhlIGNvbnN0cnVjdCBzY29wZSBmb3IgZXJyb3IgcmVwb3J0aW5nIChvcHRpb25hbClcbiAqIEByZXR1cm5zIEFycmF5IG9mIHZhbGlkYXRpb24gZXJyb3IgbWVzc2FnZXMsIGVtcHR5IGlmIHZhbGlkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUluc3RydWN0aW9ucyhpbnN0cnVjdGlvbnM6IHN0cmluZywgX3Njb3BlPzogSUNvbnN0cnVjdCk6IHN0cmluZ1tdIHtcbiAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGlmIChpbnN0cnVjdGlvbnMgPT0gbnVsbCkge1xuICAgIGVycm9ycy5wdXNoKCdJbnN0cnVjdGlvbnMgYXJlIHJlcXVpcmVkIGZvciBMTE0tYXMtYS1KdWRnZSBldmFsdWF0b3JzJyk7XG4gICAgcmV0dXJuIGVycm9ycztcbiAgfVxuXG4gIGlmIChUb2tlbi5pc1VucmVzb2x2ZWQoaW5zdHJ1Y3Rpb25zKSkge1xuICAgIHJldHVybiBlcnJvcnM7XG4gIH1cblxuICBpZiAoaW5zdHJ1Y3Rpb25zLnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICBlcnJvcnMucHVzaCgnSW5zdHJ1Y3Rpb25zIG11c3Qgbm90IGJlIGVtcHR5Jyk7XG4gIH1cblxuICByZXR1cm4gZXJyb3JzO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlcyBhIGNhdGVnb3JpY2FsIHJhdGluZyBzY2FsZS5cbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIGNhdGVnb3JpY2FsIHJhdGluZyBvcHRpb25zIHRvIHZhbGlkYXRlXG4gKiBAcGFyYW0gX3Njb3BlIC0gVGhlIGNvbnN0cnVjdCBzY29wZSBmb3IgZXJyb3IgcmVwb3J0aW5nIChvcHRpb25hbClcbiAqIEByZXR1cm5zIEFycmF5IG9mIHZhbGlkYXRpb24gZXJyb3IgbWVzc2FnZXMsIGVtcHR5IGlmIHZhbGlkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUNhdGVnb3JpY2FsUmF0aW5nU2NhbGUob3B0aW9uczogQ2F0ZWdvcmljYWxSYXRpbmdPcHRpb25bXSwgX3Njb3BlPzogSUNvbnN0cnVjdCk6IHN0cmluZ1tdIHtcbiAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGlmIChvcHRpb25zID09IG51bGwgfHwgb3B0aW9ucy5sZW5ndGggPCBSQVRJTkdfU0NBTEVfTUlOX09QVElPTlMpIHtcbiAgICBlcnJvcnMucHVzaChgQXQgbGVhc3QgJHtSQVRJTkdfU0NBTEVfTUlOX09QVElPTlN9IGNhdGVnb3JpY2FsIHJhdGluZyBvcHRpb24gaXMgcmVxdWlyZWQsIGdvdCAke29wdGlvbnM/Lmxlbmd0aCA/PyAwfWApO1xuICAgIHJldHVybiBlcnJvcnM7XG4gIH1cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IG9wdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoIVRva2VuLmlzVW5yZXNvbHZlZChvcHRpb25zW2ldLmxhYmVsKSAmJiAoIW9wdGlvbnNbaV0ubGFiZWwgfHwgb3B0aW9uc1tpXS5sYWJlbC50cmltKCkubGVuZ3RoID09PSAwKSkge1xuICAgICAgZXJyb3JzLnB1c2goYENhdGVnb3JpY2FsIHJhdGluZyBvcHRpb24gYXQgaW5kZXggJHtpfSBtdXN0IGhhdmUgYSBub24tZW1wdHkgbGFiZWxgKTtcbiAgICB9XG4gICAgaWYgKCFUb2tlbi5pc1VucmVzb2x2ZWQob3B0aW9uc1tpXS5kZWZpbml0aW9uKSAmJiAoIW9wdGlvbnNbaV0uZGVmaW5pdGlvbiB8fCBvcHRpb25zW2ldLmRlZmluaXRpb24udHJpbSgpLmxlbmd0aCA9PT0gMCkpIHtcbiAgICAgIGVycm9ycy5wdXNoKGBDYXRlZ29yaWNhbCByYXRpbmcgb3B0aW9uIGF0IGluZGV4ICR7aX0gbXVzdCBoYXZlIGEgbm9uLWVtcHR5IGRlZmluaXRpb25gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZXJyb3JzO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlcyBhIG51bWVyaWNhbCByYXRpbmcgc2NhbGUuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBudW1lcmljYWwgcmF0aW5nIG9wdGlvbnMgdG8gdmFsaWRhdGVcbiAqIEBwYXJhbSBfc2NvcGUgLSBUaGUgY29uc3RydWN0IHNjb3BlIGZvciBlcnJvciByZXBvcnRpbmcgKG9wdGlvbmFsKVxuICogQHJldHVybnMgQXJyYXkgb2YgdmFsaWRhdGlvbiBlcnJvciBtZXNzYWdlcywgZW1wdHkgaWYgdmFsaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlTnVtZXJpY2FsUmF0aW5nU2NhbGUob3B0aW9uczogTnVtZXJpY2FsUmF0aW5nT3B0aW9uW10sIF9zY29wZT86IElDb25zdHJ1Y3QpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcblxuICBpZiAob3B0aW9ucyA9PSBudWxsIHx8IG9wdGlvbnMubGVuZ3RoIDwgUkFUSU5HX1NDQUxFX01JTl9PUFRJT05TKSB7XG4gICAgZXJyb3JzLnB1c2goYEF0IGxlYXN0ICR7UkFUSU5HX1NDQUxFX01JTl9PUFRJT05TfSBudW1lcmljYWwgcmF0aW5nIG9wdGlvbiBpcyByZXF1aXJlZCwgZ290ICR7b3B0aW9ucz8ubGVuZ3RoID8/IDB9YCk7XG4gICAgcmV0dXJuIGVycm9ycztcbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgb3B0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgIGlmICghVG9rZW4uaXNVbnJlc29sdmVkKG9wdGlvbnNbaV0ubGFiZWwpICYmICghb3B0aW9uc1tpXS5sYWJlbCB8fCBvcHRpb25zW2ldLmxhYmVsLnRyaW0oKS5sZW5ndGggPT09IDApKSB7XG4gICAgICBlcnJvcnMucHVzaChgTnVtZXJpY2FsIHJhdGluZyBvcHRpb24gYXQgaW5kZXggJHtpfSBtdXN0IGhhdmUgYSBub24tZW1wdHkgbGFiZWxgKTtcbiAgICB9XG4gICAgaWYgKCFUb2tlbi5pc1VucmVzb2x2ZWQob3B0aW9uc1tpXS5kZWZpbml0aW9uKSAmJiAoIW9wdGlvbnNbaV0uZGVmaW5pdGlvbiB8fCBvcHRpb25zW2ldLmRlZmluaXRpb24udHJpbSgpLmxlbmd0aCA9PT0gMCkpIHtcbiAgICAgIGVycm9ycy5wdXNoKGBOdW1lcmljYWwgcmF0aW5nIG9wdGlvbiBhdCBpbmRleCAke2l9IG11c3QgaGF2ZSBhIG5vbi1lbXB0eSBkZWZpbml0aW9uYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGVycm9ycztcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGhlIExhbWJkYSB0aW1lb3V0IGluIHNlY29uZHMuXG4gKiBAcGFyYW0gc2Vjb25kcyAtIFRoZSB0aW1lb3V0IGluIHNlY29uZHMgdG8gdmFsaWRhdGVcbiAqIEBwYXJhbSBfc2NvcGUgLSBUaGUgY29uc3RydWN0IHNjb3BlIGZvciBlcnJvciByZXBvcnRpbmcgKG9wdGlvbmFsKVxuICogQHJldHVybnMgQXJyYXkgb2YgdmFsaWRhdGlvbiBlcnJvciBtZXNzYWdlcywgZW1wdHkgaWYgdmFsaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlTGFtYmRhVGltZW91dChzZWNvbmRzOiBudW1iZXIgfCB1bmRlZmluZWQsIF9zY29wZT86IElDb25zdHJ1Y3QpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcblxuICBpZiAoc2Vjb25kcyA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGVycm9ycztcbiAgfVxuXG4gIGlmIChUb2tlbi5pc1VucmVzb2x2ZWQoc2Vjb25kcykpIHtcbiAgICByZXR1cm4gZXJyb3JzO1xuICB9XG5cbiAgaWYgKHNlY29uZHMgPD0gMCkge1xuICAgIGVycm9ycy5wdXNoKGBMYW1iZGEgdGltZW91dCBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyLCBnb3QgJHtzZWNvbmRzfWApO1xuICB9XG5cbiAgcmV0dXJuIGVycm9ycztcbn1cblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIRUxQRVIgRlVOQ1RJT05TXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbi8qKlxuICogVGhyb3dzIGEgdmFsaWRhdGlvbiBlcnJvciBpZiB0aGUgdmFsaWRhdGlvbiBmdW5jdGlvbiByZXR1cm5zIGFueSBlcnJvcnMuXG4gKiBAcGFyYW0gdmFsaWRhdGlvbkZuIC0gVGhlIHZhbGlkYXRpb24gZnVuY3Rpb24gdG8gZXhlY3V0ZVxuICogQHBhcmFtIHBhcmFtIC0gVGhlIHBhcmFtZXRlciB0byB2YWxpZGF0ZVxuICogQHBhcmFtIHNjb3BlIC0gVGhlIGNvbnN0cnVjdCBzY29wZSBmb3IgZXJyb3IgcmVwb3J0aW5nIChvcHRpb25hbClcbiAqIEByZXR1cm5zIFRoZSB2YWxpZGF0ZWQgcGFyYW1ldGVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0aHJvd0lmSW52YWxpZDxUPih2YWxpZGF0aW9uRm46IFZhbGlkYXRpb25GbjxUPiwgcGFyYW06IFQsIHNjb3BlPzogSUNvbnN0cnVjdCk6IFQge1xuICBjb25zdCBlcnJvcnMgPSB2YWxpZGF0aW9uRm4ocGFyYW0sIHNjb3BlKTtcbiAgaWYgKGVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgaWYgKHNjb3BlKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGxpdGBWYWxpZGF0aW9uRmFpbGVkYCwgZXJyb3JzLmpvaW4oJ1xcbicpLCBzY29wZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcihsaXRgVmFsaWRhdGlvbkZhaWxlZGAsIGVycm9ycy5qb2luKCdcXG4nKSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBwYXJhbTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGFncyBmb3IgZXZhbHVhdGlvbiByZXNvdXJjZXMuXG4gKiBAcGFyYW0gdGFncyAtIFRoZSB0YWdzIG9iamVjdCB0byB2YWxpZGF0ZVxuICogQHBhcmFtIGtleVBhdHRlcm4gLSBUaGUgcmVnZXggcGF0dGVybiB0byB2YWxpZGF0ZSB0YWcga2V5cyBhZ2FpbnN0XG4gKiBAcGFyYW0gX3Njb3BlIC0gVGhlIGNvbnN0cnVjdCBzY29wZSBmb3IgZXJyb3IgcmVwb3J0aW5nIChvcHRpb25hbClcbiAqIEByZXR1cm5zIEFycmF5IG9mIHZhbGlkYXRpb24gZXJyb3IgbWVzc2FnZXMsIGVtcHR5IGlmIHZhbGlkXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlVGFncyh0YWdzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IHwgdW5kZWZpbmVkLCBrZXlQYXR0ZXJuOiBSZWdFeHAsIF9zY29wZT86IElDb25zdHJ1Y3QpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcbiAgaWYgKHRhZ3MgPT0gbnVsbCkge1xuICAgIHJldHVybiBlcnJvcnM7XG4gIH1cbiAgaWYgKFRva2VuLmlzVW5yZXNvbHZlZCh0YWdzKSkge1xuICAgIHJldHVybiBlcnJvcnM7XG4gIH1cblxuICBpZiAoT2JqZWN0LmtleXModGFncykubGVuZ3RoID4gVEFHU19NQVhfQ09VTlQpIHtcbiAgICBlcnJvcnMucHVzaChgQ2Fubm90IGhhdmUgbW9yZSB0aGFuICR7VEFHU19NQVhfQ09VTlR9IHRhZ3MsIGdvdCAke09iamVjdC5rZXlzKHRhZ3MpLmxlbmd0aH1gKTtcbiAgfVxuXG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRhZ3MpKSB7XG4gICAgaWYgKCFUb2tlbi5pc1VucmVzb2x2ZWQoa2V5KSkge1xuICAgICAgaWYgKGtleS50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKCdUYWcga2V5IGNhbm5vdCBiZSBlbXB0eSBvciBjb25zaXN0IG9ubHkgb2Ygd2hpdGVzcGFjZScpO1xuICAgICAgfSBlbHNlIGlmIChrZXkubGVuZ3RoIDwgVEFHX0tFWV9NSU4gfHwga2V5Lmxlbmd0aCA+IFRBR19LRVlfTUFYKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKGBUYWcga2V5IFwiJHtrZXl9XCIgbXVzdCBiZSBiZXR3ZWVuICR7VEFHX0tFWV9NSU59IGFuZCAke1RBR19LRVlfTUFYfSBjaGFyYWN0ZXJzLCBnb3QgJHtrZXkubGVuZ3RofWApO1xuICAgICAgfVxuICAgICAgaWYgKGtleS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoJ2F3czonKSkge1xuICAgICAgICBlcnJvcnMucHVzaChgVGFnIGtleSBcIiR7a2V5fVwiIGNhbm5vdCBzdGFydCB3aXRoIFwiYXdzOlwiIGFzIHRoaXMgcHJlZml4IGlzIHJlc2VydmVkIGJ5IEFXU2ApO1xuICAgICAgfVxuICAgICAgaWYgKCFrZXlQYXR0ZXJuLnRlc3Qoa2V5KSkge1xuICAgICAgICBlcnJvcnMucHVzaChgVGFnIGtleSBcIiR7a2V5fVwiIGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVyc2ApO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIVRva2VuLmlzVW5yZXNvbHZlZCh2YWx1ZSkpIHtcbiAgICAgIGlmICh2YWx1ZS5sZW5ndGggPiBUQUdfVkFMVUVfTUFYKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKGBUYWcgdmFsdWUgZm9yIGtleSBcIiR7a2V5fVwiIG11c3QgYmUgYXQgbW9zdCAke1RBR19WQUxVRV9NQVh9IGNoYXJhY3RlcnMsIGdvdCAke3ZhbHVlLmxlbmd0aH1gKTtcbiAgICAgIH1cbiAgICAgIGlmICghVEFHX1ZBTFVFX1BBVFRFUk4udGVzdCh2YWx1ZSkpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goYFRhZyB2YWx1ZSBmb3Iga2V5IFwiJHtrZXl9XCIgY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXJzLiBWYWxpZDogVW5pY29kZSBsZXR0ZXJzLCBkaWdpdHMsIHdoaXRlc3BhY2UsIGFuZCBfLi89Ky1gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZXJyb3JzO1xufVxuXG4vKiogVmFsaWRhdGVzIHRhZ3MgZm9yIEV2YWx1YXRvciByZXNvdXJjZXMgKFVuaWNvZGUga2V5cyBhbGxvd2VkIHBlciBDRk4gZG9jcykgKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUV2YWx1YXRvclRhZ3ModGFncz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0sIHNjb3BlPzogSUNvbnN0cnVjdCk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIHZhbGlkYXRlVGFncyh0YWdzLCBFVkFMVUFUT1JfVEFHX0tFWV9QQVRURVJOLCBzY29wZSk7XG59XG5cbi8qKiBWYWxpZGF0ZXMgdGFncyBmb3IgT25saW5lRXZhbHVhdGlvbkNvbmZpZyByZXNvdXJjZXMgKEFTQ0lJIGtleXMgcGVyIENGTiBwYXR0ZXJuKSAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlRXZhbHVhdGlvblRhZ3ModGFncz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0sIHNjb3BlPzogSUNvbnN0cnVjdCk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIHZhbGlkYXRlVGFncyh0YWdzLCBPTkxJTkVfRVZBTFVBVElPTl9DT05GSUdfVEFHX0tFWV9QQVRURVJOLCBzY29wZSk7XG59XG4iXX0=
|
|
432
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi1oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidmFsaWRhdGlvbi1oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7R0FXRzs7QUE2REgsZ0RBZ0NDO0FBU0Qsa0RBa0JDO0FBU0QsZ0RBcUJDO0FBU0QsZ0VBd0JDO0FBU0QsMENBY0M7QUFTRCx3REF3QkM7QUFTRCxzREFhQztBQVNELG9EQWFDO0FBVUQsc0RBZ0NDO0FBU0Qsb0RBaUJDO0FBU0Qsd0VBa0JDO0FBU0Qsb0VBa0JDO0FBU0Qsc0RBZ0JDO0FBY0Qsd0NBVUM7QUFzREQsc0RBRUM7QUFPRCx3REFFQztBQXJnQkQsNkNBQW9DO0FBQ3BDLHdEQUF1RjtBQUN2Riw0RUFBNEQ7QUFZNUQ7OytFQUUrRTtBQUMvRSxNQUFNLHNCQUFzQixHQUFHLENBQUMsQ0FBQztBQUNqQyxNQUFNLHNCQUFzQixHQUFHLEVBQUUsQ0FBQztBQUNsQyxNQUFNLHNCQUFzQixHQUFHLEdBQUcsQ0FBQztBQUNuQyxNQUFNLG9CQUFvQixHQUFHLENBQUMsQ0FBQztBQUMvQixNQUFNLG9CQUFvQixHQUFHLEVBQUUsQ0FBQztBQUNoQyxNQUFNLHVCQUF1QixHQUFHLElBQUksQ0FBQztBQUNyQyxNQUFNLHVCQUF1QixHQUFHLEdBQUcsQ0FBQztBQUNwQyxNQUFNLGlCQUFpQixHQUFHLENBQUMsQ0FBQztBQUM1QixNQUFNLG1CQUFtQixHQUFHLENBQUMsQ0FBQztBQUM5QixNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQztBQUNqQyxNQUFNLG9CQUFvQixHQUFHLENBQUMsQ0FBQztBQUMvQixNQUFNLG9CQUFvQixHQUFHLENBQUMsQ0FBQztBQUMvQixNQUFNLHVCQUF1QixHQUFHLENBQUMsQ0FBQztBQUNsQyxNQUFNLHVCQUF1QixHQUFHLENBQUMsQ0FBQztBQUNsQyxNQUFNLHlCQUF5QixHQUFHLENBQUMsQ0FBQztBQUNwQyxNQUFNLHlCQUF5QixHQUFH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QkFBK0IsQ0FBQyxDQUFDO1lBQzlELENBQUM7UUFDSCxDQUFDO1FBQ0QsSUFBSSxDQUFDLG1CQUFLLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDL0IsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLGFBQWEsRUFBRSxDQUFDO2dCQUNqQyxNQUFNLENBQUMsSUFBSSxDQUFDLHNCQUFzQixHQUFHLHFCQUFxQixhQUFhLG9CQUFvQixLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUM3RyxDQUFDO1lBQ0QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUNuQyxNQUFNLENBQUMsSUFBSSxDQUFDLHNCQUFzQixHQUFHLHVGQUF1RixDQUFDLENBQUM7WUFDaEksQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVELGlGQUFpRjtBQUNqRjs7O0dBR0c7QUFDSCxTQUFnQixxQkFBcUIsQ0FBQyxJQUFnQyxFQUFFLEtBQWtCO0lBQ3hGLE9BQU8sWUFBWSxDQUFDLElBQUksRUFBRSx5QkFBeUIsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM5RCxDQUFDO0FBRUQsdUZBQXVGO0FBQ3ZGOzs7R0FHRztBQUNILFNBQWdCLHNCQUFzQixDQUFDLElBQWdDLEVBQUUsS0FBa0I7SUFDekYsT0FBTyxZQUFZLENBQUMsSUFBSSxFQUFFLHdDQUF3QyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzdFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqICBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKS4gWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuICogIHdpdGggdGhlIExpY2Vuc2UuIEEgY29weSBvZiB0aGUgTGljZW5zZSBpcyBsb2NhdGVkIGF0XG4gKlxuICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiAgb3IgaW4gdGhlICdsaWNlbnNlJyBmaWxlIGFjY29tcGFueWluZyB0aGlzIGZpbGUuIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAnQVMgSVMnIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVNcbiAqICBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9uc1xuICogIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgeyBUb2tlbiB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IFZhbGlkYXRpb25FcnJvciwgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9lcnJvcnMnO1xuaW1wb3J0IHsgbGl0IH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvaGVscGVycy1pbnRlcm5hbCc7XG5pbXBvcnQgdHlwZSB7IElDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB0eXBlIHsgQ2F0ZWdvcmljYWxSYXRpbmdPcHRpb24sIEZpbHRlckNvbmZpZywgTnVtZXJpY2FsUmF0aW5nT3B0aW9uIH0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogSW50ZXJmYWNlIGZvciBldmFsdWF0b3IgcmVmZXJlbmNlcyB1c2VkIGluIHZhbGlkYXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuaW50ZXJmYWNlIElFdmFsdWF0b3JSZWZlcmVuY2Uge1xuICByZWFkb25seSBldmFsdWF0b3JJZDogc3RyaW5nO1xufVxuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUQU5UU1xuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuY29uc3QgQ09ORklHX05BTUVfTUlOX0xFTkdUSCA9IDE7XG5jb25zdCBDT05GSUdfTkFNRV9NQVhfTEVOR1RIID0gNDg7XG5jb25zdCBERVNDUklQVElPTl9NQVhfTEVOR1RIID0gMjAwO1xuY29uc3QgRVZBTFVBVE9SU19NSU5fQ09VTlQgPSAxO1xuY29uc3QgRVZBTFVBVE9SU19NQVhfQ09VTlQgPSAxMDtcbmNvbnN0IFNBTVBMSU5HX1BFUkNFTlRBR0VfTUlOID0gMC4wMTtcbmNvbnN0IFNBTVBMSU5HX1BFUkNFTlRBR0VfTUFYID0gMTAwO1xuY29uc3QgRklMVEVSU19NQVhfQ09VTlQgPSA1O1xuY29uc3QgU0VTU0lPTl9USU1FT1VUX01JTiA9IDE7XG5jb25zdCBTRVNTSU9OX1RJTUVPVVRfTUFYID0gMTQ0MDtcbmNvbnN0IExPR19HUk9VUFNfTUlOX0NPVU5UID0gMTtcbmNvbnN0IExPR19HUk9VUFNfTUFYX0NPVU5UID0gNTtcbmNvbnN0IFNFUlZJQ0VfTkFNRVNfTUlOX0NPVU5UID0gMTtcbmNvbnN0IFNFUlZJQ0VfTkFNRVNfTUFYX0NPVU5UID0gMTtcbmNvbnN0IEVWQUxVQVRPUl9OQU1FX01JTl9MRU5HVEggPSAxO1xuY29uc3QgRVZBTFVBVE9SX05BTUVfTUFYX0xFTkdUSCA9IDQ4O1xuY29uc3QgUkFUSU5HX1NDQUxFX01JTl9PUFRJT05TID0gMTtcbmNvbnN0IFRBR19LRVlfTUlOID0gMTtcbmNvbnN0IFRBR19LRVlfTUFYID0gMTI4O1xuY29uc3QgVEFHX1ZBTFVFX01BWCA9IDI1NjtcbmNvbnN0IFRBR1NfTUFYX0NPVU5UID0gNTA7XG5jb25zdCBPTkxJTkVfRVZBTFVBVElPTl9DT05GSUdfVEFHX0tFWV9QQVRURVJOID0gL15bYS16QS1aK1xcLT0uXzovXSskLztcbmNvbnN0IEVWQUxVQVRPUl9UQUdfS0VZX1BBVFRFUk4gPSAvXltcXHB7TH1cXHB7Tn1cXHMuXzovPStALV0rJC91O1xuY29uc3QgVEFHX1ZBTFVFX1BBVFRFUk4gPSAvXltcXHB7TH1cXHB7Tn1cXHMuXy89Ky1dKiQvdTtcblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUWVBFU1xuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuZXhwb3J0IHR5cGUgVmFsaWRhdGlvbkZuPFQ+ID0gKHBhcmFtOiBULCBzY29wZT86IElDb25zdHJ1Y3QpID0+IHN0cmluZ1tdO1xuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFUSU9OIEZVTkNUSU9OU1xuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4vKipcbiAqIFZhbGlkYXRlcyB0aGUgb25saW5lIGV2YWx1YXRpb24gY29uZmlndXJhdGlvbiBuYW1lLlxuICogTXVzdCBzdGFydCB3aXRoIGEgbGV0dGVyIGFuZCBjb250YWluIG9ubHkgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgYW5kIHVuZGVyc2NvcmVzLlxuICogQHBhcmFtIG5hbWUgLSBUaGUgY29uZmlndXJhdGlvbiBuYW1lIHRvIHZhbGlkYXRlXG4gKiBAcGFyYW0gX3Njb3BlIC0gVGhlIGNvbnN0cnVjdCBzY29wZSBmb3IgZXJyb3IgcmVwb3J0aW5nIChvcHRpb25hbClcbiAqIEByZXR1cm5zIEFycmF5IG9mIHZhbGlkYXRpb24gZXJyb3IgbWVzc2FnZXMsIGVtcHR5IGlmIHZhbGlkXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGhlIGVxdWl2YWxlbnQgY29uc3RydWN0IGZyb20gYGF3cy1jZGstbGliL2F3cy1iZWRyb2NrYWdlbnRjb3JlYCBpbnN0ZWFkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVDb25maWdOYW1lKG5hbWU6IHN0cmluZywgX3Njb3BlPzogSUNvbnN0cnVjdCk6IHN0cmluZ1tdIHtcbiAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGlmIChuYW1lID09IG51bGwpIHtcbiAgICByZXR1cm4gZXJyb3JzO1xuICB9XG5cbiAgaWYgKFRva2VuLmlzVW5yZXNvbHZlZChuYW1lKSkge1xuICAgIHJldHVybiBlcnJvcnM7XG4gIH1cblxuICBpZiAobmFtZS5sZW5ndGggPCBDT05GSUdfTkFNRV9NSU5fTEVOR1RIKSB7XG4gICAgZXJyb3JzLnB1c2goXG4gICAgICBgQ29uZmlndXJhdGlvbiBuYW1lIG11c3QgYmUgYXQgbGVhc3QgJHtDT05GSUdfTkFNRV9NSU5fTEVOR1RIfSBjaGFyYWN0ZXIocyksIGdvdCAke25hbWUubGVuZ3RofWAsXG4gICAgKTtcbiAgfVxuXG4gIGlmIChuYW1lLmxlbmd0aCA+IENPTkZJR19OQU1FX01BWF9MRU5HVEgpIHtcbiAgICBlcnJvcnMucHVzaChcbiAgICAgIGBDb25maWd1cmF0aW9uIG5hbWUgbXVzdCBiZSBhdCBtb3N0ICR7Q09ORklHX05BTUVfTUFYX0xFTkdUSH0gY2hhcmFjdGVycywgZ290ICR7bmFtZS5sZW5ndGh9YCxcbiAgICApO1xuICB9XG5cbiAgLy8gUGF0dGVybjogXlthLXpBLVpdW2EtekEtWjAtOV9dezAsNDd9JFxuICBjb25zdCB2YWxpZE5hbWVQYXR0ZXJuID0gL15bYS16QS1aXVthLXpBLVowLTlfXXswLDQ3fSQvO1xuICBpZiAoIXZhbGlkTmFtZVBhdHRlcm4udGVzdChuYW1lKSkge1xuICAgIGVycm9ycy5wdXNoKFxuICAgICAgYENvbmZpZ3VyYXRpb24gbmFtZSBcIiR7bmFtZX1cIiBkb2VzIG5vdCBtYXRjaCByZXF1aXJlZCBwYXR0ZXJuLiBNdXN0IHN0YXJ0IHdpdGggYSBsZXR0ZXIgYW5kIGNvbnRhaW4gb25seSBhbHBoYW51bWVyaWMgY2hhcmFjdGVycyBhbmQgdW5kZXJzY29yZXMuYCxcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIGVycm9ycztcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGhlIGRlc2NyaXB0aW9uIGZpZWxkLlxuICogQHBhcmFtIGRlc2NyaXB0aW9uIC0gVGhlIGRlc2NyaXB0aW9uIHRvIHZhbGlkYXRlXG4gKiBAcGFyYW0gX3Njb3BlIC0gVGhlIGNvbnN0cnVjdCBzY29wZSBmb3IgZXJyb3IgcmVwb3J0aW5nIChvcHRpb25hbClcbiAqIEByZXR1cm5zIEFycmF5IG9mIHZhbGlkYXRpb24gZXJyb3IgbWVzc2FnZXMsIGVtcHR5IGlmIHZhbGlkXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGhlIGVxdWl2YWxlbnQgY29uc3RydWN0IGZyb20gYGF3cy1jZGstbGliL2F3cy1iZWRyb2NrYWdlbnRjb3JlYCBpbnN0ZWFkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVEZXNjcmlwdGlvbihkZXNjcmlwdGlvbjogc3RyaW5nIHwgdW5kZWZpbmVkLCBfc2NvcGU/OiBJQ29uc3RydWN0KTogc3RyaW5nW10ge1xuICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgaWYgKGRlc2NyaXB0aW9uID09IG51bGwpIHtcbiAgICByZXR1cm4gZXJyb3JzO1xuICB9XG5cbiAgaWYgKFRva2VuLmlzVW5yZXNvbHZlZChkZXNjcmlwdGlvbikpIHtcbiAgICByZXR1cm4gZXJyb3JzO1xuICB9XG5cbiAgaWYgKGRlc2NyaXB0aW9uLmxlbmd0aCA+IERFU0NSSVBUSU9OX01BWF9MRU5HVEgpIHtcbiAgICBlcnJvcnMucHVzaChcbiAgICAgIGBEZXNjcmlwdGlvbiBtdXN0IGJlIGF0IG1vc3QgJHtERVNDUklQVElPTl9NQVhfTEVOR1RIfSBjaGFyYWN0ZXJzLCBnb3QgJHtkZXNjcmlwdGlvbi5sZW5ndGh9YCxcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIGVycm9ycztcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGhlIGV2YWx1YXRvcnMgYXJyYXkuXG4gKiBAcGFyYW0gZXZhbHVhdG9ycyAtIFRoZSBldmFsdWF0b3JzIGFycmF5IHRvIHZhbGlkYXRlXG4gKiBAcGFyYW0gX3Njb3BlIC0gVGhlIGNvbnN0cnVjdCBzY29wZSBmb3IgZXJyb3IgcmVwb3J0aW5nIChvcHRpb25hbClcbiAqIEByZXR1cm5zIEFycmF5IG9mIHZhbGlkYXRpb24gZXJyb3IgbWVzc2FnZXMsIGVtcHR5IGlmIHZhbGlkXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGhlIGVxdWl2YWxlbnQgY29uc3RydWN0IGZyb20gYGF3cy1jZGstbGliL2F3cy1iZWRyb2NrYWdlbnRjb3JlYCBpbnN0ZWFkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVFdmFsdWF0b3JzKGV2YWx1YXRvcnM6IElFdmFsdWF0b3JSZWZlcmVuY2VbXSwgX3Njb3BlPzogSUNvbnN0cnVjdCk6IHN0cmluZ1tdIHtcbiAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGlmIChldmFsdWF0b3JzID09IG51bGwpIHtcbiAgICBlcnJvcnMucHVzaCgnRXZhbHVhdG9ycyBhcnJheSBpcyByZXF1aXJlZCcpO1xuICAgIHJldHVybiBlcnJvcnM7XG4gIH1cblxuICBpZiAoZXZhbHVhdG9ycy5sZW5ndGggPCBFVkFMVUFUT1JTX01JTl9DT1VOVCkge1xuICAgIGVycm9ycy5wdXNoKFxuICAgICAgYEF0IGxlYXN0ICR7RVZBTFVBVE9SU19NSU5fQ09VTlR9IGV2YWx1YXRvciBpcyByZXF1aXJlZCwgZ290ICR7ZXZhbHVhdG9ycy5sZW5ndGh9YCxcbiAgICApO1xuICB9XG5cbiAgaWYgKGV2YWx1YXRvcnMubGVuZ3RoID4gRVZBTFVBVE9SU19NQVhfQ09VTlQpIHtcbiAgICBlcnJvcnMucHVzaChcbiAgICAgIGBBdCBtb3N0ICR7RVZBTFVBVE9SU19NQVhfQ09VTlR9IGV2YWx1YXRvcnMgYXJlIGFsbG93ZWQsIGdvdCAke2V2YWx1YXRvcnMubGVuZ3RofWAsXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBlcnJvcnM7XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIHRoZSBzYW1wbGluZyBwZXJjZW50YWdlLlxuICogQHBhcmFtIHBlcmNlbnRhZ2UgLSBUaGUgc2FtcGxpbmcgcGVyY2VudGFnZSB0byB2YWxpZGF0ZVxuICogQHBhcmFtIF9zY29wZSAtIFRoZSBjb25zdHJ1Y3Qgc2NvcGUgZm9yIGVycm9yIHJlcG9ydGluZyAob3B0aW9uYWwpXG4gKiBAcmV0dXJucyBBcnJheSBvZiB2YWxpZGF0aW9uIGVycm9yIG1lc3NhZ2VzLCBlbXB0eSBpZiB2YWxpZFxuICogQGRlcHJlY2F0ZWQgVXNlIHRoZSBlcXVpdmFsZW50IGNvbnN0cnVjdCBmcm9tIGBhd3MtY2RrLWxpYi9hd3MtYmVkcm9ja2FnZW50Y29yZWAgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlU2FtcGxpbmdQZXJjZW50YWdlKHBlcmNlbnRhZ2U6IG51bWJlciB8IHVuZGVmaW5lZCwgX3Njb3BlPzogSUNvbnN0cnVjdCk6IHN0cmluZ1tdIHtcbiAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGlmIChwZXJjZW50YWdlID09IG51bGwpIHtcbiAgICByZXR1cm4gZXJyb3JzO1xuICB9XG5cbiAgaWYgKFRva2VuLmlzVW5yZXNvbHZlZChwZXJjZW50YWdlKSkge1xuICAgIHJldHVybiBlcnJvcnM7XG4gIH1cblxuICBpZiAocGVyY2VudGFnZSA8IFNBTVBMSU5HX1BFUkNFTlRBR0VfTUlOKSB7XG4gICAgZXJyb3JzLnB1c2goXG4gICAgICBgU2FtcGxpbmcgcGVyY2VudGFnZSBtdXN0IGJlIGF0IGxlYXN0ICR7U0FNUExJTkdfUEVSQ0VOVEFHRV9NSU59LCBnb3QgJHtwZXJjZW50YWdlfWAsXG4gICAgKTtcbiAgfVxuXG4gIGlmIChwZXJjZW50YWdlID4gU0FNUExJTkdfUEVSQ0VOVEFHRV9NQVgpIHtcbiAgICBlcnJvcnMucHVzaChcbiAgICAgIGBTYW1wbGluZyBwZXJjZW50YWdlIG11c3QgYmUgYXQgbW9zdCAke1NBTVBMSU5HX1BFUkNFTlRBR0VfTUFYfSwgZ290ICR7cGVyY2VudGFnZX1gLFxuICAgICk7XG4gIH1cblxuICByZXR1cm4gZXJyb3JzO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlcyB0aGUgZmlsdGVycyBhcnJheS5cbiAqIEBwYXJhbSBmaWx0ZXJzIC0gVGhlIGZpbHRlcnMgYXJyYXkgdG8gdmFsaWRhdGVcbiAqIEBwYXJhbSBfc2NvcGUgLSBUaGUgY29uc3RydWN0IHNjb3BlIGZvciBlcnJvciByZXBvcnRpbmcgKG9wdGlvbmFsKVxuICogQHJldHVybnMgQXJyYXkgb2YgdmFsaWRhdGlvbiBlcnJvciBtZXNzYWdlcywgZW1wdHkgaWYgdmFsaWRcbiAqIEBkZXByZWNhdGVkIFVzZSB0aGUgZXF1aXZhbGVudCBjb25zdHJ1Y3QgZnJvbSBgYXdzLWNkay1saWIvYXdzLWJlZHJvY2thZ2VudGNvcmVgIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUZpbHRlcnMoZmlsdGVyczogRmlsdGVyQ29uZmlnW10gfCB1bmRlZmluZWQsIF9zY29wZT86IElDb25zdHJ1Y3QpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcblxuICBpZiAoZmlsdGVycyA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGVycm9ycztcbiAgfVxuXG4gIGlmIChmaWx0ZXJzLmxlbmd0aCA+IEZJTFRFUlNfTUFYX0NPVU5UKSB7XG4gICAgZXJyb3JzLnB1c2goXG4gICAgICBgQXQgbW9zdCAke0ZJTFRFUlNfTUFYX0NPVU5UfSBmaWx0ZXJzIGFyZSBhbGxvd2VkLCBnb3QgJHtmaWx0ZXJzLmxlbmd0aH1gLFxuICAgICk7XG4gIH1cblxuICByZXR1cm4gZXJyb3JzO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlcyB0aGUgc2Vzc2lvbiB0aW1lb3V0IGluIG1pbnV0ZXMuXG4gKiBAcGFyYW0gbWludXRlcyAtIFRoZSBzZXNzaW9uIHRpbWVvdXQgaW4gbWludXRlcyB0byB2YWxpZGF0ZVxuICogQHBhcmFtIF9zY29wZSAtIFRoZSBjb25zdHJ1Y3Qgc2NvcGUgZm9yIGVycm9yIHJlcG9ydGluZyAob3B0aW9uYWwpXG4gKiBAcmV0dXJucyBBcnJheSBvZiB2YWxpZGF0aW9uIGVycm9yIG1lc3NhZ2VzLCBlbXB0eSBpZiB2YWxpZFxuICogQGRlcHJlY2F0ZWQgVXNlIHRoZSBlcXVpdmFsZW50IGNvbnN0cnVjdCBmcm9tIGBhd3MtY2RrLWxpYi9hd3MtYmVkcm9ja2FnZW50Y29yZWAgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlU2Vzc2lvblRpbWVvdXQobWludXRlczogbnVtYmVyIHwgdW5kZWZpbmVkLCBfc2NvcGU/OiBJQ29uc3RydWN0KTogc3RyaW5nW10ge1xuICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgaWYgKG1pbnV0ZXMgPT0gbnVsbCkge1xuICAgIHJldHVybiBlcnJvcnM7XG4gIH1cblxuICBpZiAoVG9rZW4uaXNVbnJlc29sdmVkKG1pbnV0ZXMpKSB7XG4gICAgcmV0dXJuIGVycm9ycztcbiAgfVxuXG4gIGlmIChtaW51dGVzIDwgU0VTU0lPTl9USU1FT1VUX01JTikge1xuICAgIGVycm9ycy5wdXNoKFxuICAgICAgYFNlc3Npb24gdGltZW91dCBtdXN0IGJlIGF0IGxlYXN0ICR7U0VTU0lPTl9USU1FT1VUX01JTn0gbWludXRlKHMpLCBnb3QgJHttaW51dGVzfWAsXG4gICAgKTtcbiAgfVxuXG4gIGlmIChtaW51dGVzID4gU0VTU0lPTl9USU1FT1VUX01BWCkge1xuICAgIGVycm9ycy5wdXNoKFxuICAgICAgYFNlc3Npb24gdGltZW91dCBtdXN0IGJlIGF0IG1vc3QgJHtTRVNTSU9OX1RJTUVPVVRfTUFYfSBtaW51dGVzLCBnb3QgJHttaW51dGVzfWAsXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBlcnJvcnM7XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIHRoZSBsb2cgZ3JvdXAgbmFtZXMgYXJyYXkuXG4gKiBAcGFyYW0gbmFtZXMgLSBUaGUgbG9nIGdyb3VwIG5hbWVzIGFycmF5IHRvIHZhbGlkYXRlXG4gKiBAcGFyYW0gX3Njb3BlIC0gVGhlIGNvbnN0cnVjdCBzY29wZSBmb3IgZXJyb3IgcmVwb3J0aW5nIChvcHRpb25hbClcbiAqIEByZXR1cm5zIEFycmF5IG9mIHZhbGlkYXRpb24gZXJyb3IgbWVzc2FnZXMsIGVtcHR5IGlmIHZhbGlkXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGhlIGVxdWl2YWxlbnQgY29uc3RydWN0IGZyb20gYGF3cy1jZGstbGliL2F3cy1iZWRyb2NrYWdlbnRjb3JlYCBpbnN0ZWFkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVMb2dHcm91cE5hbWVzKG5hbWVzOiBzdHJpbmdbXSwgX3Njb3BlPzogSUNvbnN0cnVjdCk6IHN0cmluZ1tdIHtcbiAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGlmIChuYW1lcyA9PSBudWxsIHx8IG5hbWVzLmxlbmd0aCA8IExPR19HUk9VUFNfTUlOX0NPVU5UKSB7XG4gICAgZXJyb3JzLnB1c2goYEF0IGxlYXN0ICR7TE9HX0dST1VQU19NSU5fQ09VTlR9IGxvZyBncm91cCBuYW1lIGlzIHJlcXVpcmVkLCBnb3QgJHtuYW1lcz8ubGVuZ3RoID8/IDB9YCk7XG4gICAgcmV0dXJuIGVycm9ycztcbiAgfVxuXG4gIGlmIChuYW1lcy5sZW5ndGggPiBMT0dfR1JPVVBTX01BWF9DT1VOVCkge1xuICAgIGVycm9ycy5wdXNoKGBBdCBtb3N0ICR7TE9HX0dST1VQU19NQVhfQ09VTlR9IGxvZyBncm91cCBuYW1lcyBhcmUgYWxsb3dlZCwgZ290ICR7bmFtZXMubGVuZ3RofWApO1xuICB9XG5cbiAgcmV0dXJuIGVycm9ycztcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGhlIHNlcnZpY2UgbmFtZXMgYXJyYXkuXG4gKiBAcGFyYW0gbmFtZXMgLSBUaGUgc2VydmljZSBuYW1lcyBhcnJheSB0byB2YWxpZGF0ZVxuICogQHBhcmFtIF9zY29wZSAtIFRoZSBjb25zdHJ1Y3Qgc2NvcGUgZm9yIGVycm9yIHJlcG9ydGluZyAob3B0aW9uYWwpXG4gKiBAcmV0dXJucyBBcnJheSBvZiB2YWxpZGF0aW9uIGVycm9yIG1lc3NhZ2VzLCBlbXB0eSBpZiB2YWxpZFxuICogQGRlcHJlY2F0ZWQgVXNlIHRoZSBlcXVpdmFsZW50IGNvbnN0cnVjdCBmcm9tIGBhd3MtY2RrLWxpYi9hd3MtYmVkcm9ja2FnZW50Y29yZWAgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlU2VydmljZU5hbWVzKG5hbWVzOiBzdHJpbmdbXSwgX3Njb3BlPzogSUNvbnN0cnVjdCk6IHN0cmluZ1tdIHtcbiAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGlmIChuYW1lcyA9PSBudWxsIHx8IG5hbWVzLmxlbmd0aCA8IFNFUlZJQ0VfTkFNRVNfTUlOX0NPVU5UKSB7XG4gICAgZXJyb3JzLnB1c2goYEF0IGxlYXN0ICR7U0VSVklDRV9OQU1FU19NSU5fQ09VTlR9IHNlcnZpY2UgbmFtZSBpcyByZXF1aXJlZCwgZ290ICR7bmFtZXM/Lmxlbmd0aCA/PyAwfWApO1xuICAgIHJldHVybiBlcnJvcnM7XG4gIH1cblxuICBpZiAobmFtZXMubGVuZ3RoID4gU0VSVklDRV9OQU1FU19NQVhfQ09VTlQpIHtcbiAgICBlcnJvcnMucHVzaChgQXQgbW9zdCAke1NFUlZJQ0VfTkFNRVNfTUFYX0NPVU5UfSBzZXJ2aWNlIG5hbWUgaXMgYWxsb3dlZCwgZ290ICR7bmFtZXMubGVuZ3RofWApO1xuICB9XG5cbiAgcmV0dXJuIGVycm9ycztcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGhlIGV2YWx1YXRvciBuYW1lLlxuICogTXVzdCBzdGFydCB3aXRoIGEgbGV0dGVyIGFuZCBjb250YWluIG9ubHkgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgYW5kIHVuZGVyc2NvcmVzLlxuICogQHBhcmFtIG5hbWUgLSBUaGUgZXZhbHVhdG9yIG5hbWUgdG8gdmFsaWRhdGVcbiAqIEBwYXJhbSBfc2NvcGUgLSBUaGUgY29uc3RydWN0IHNjb3BlIGZvciBlcnJvciByZXBvcnRpbmcgKG9wdGlvbmFsKVxuICogQHJldHVybnMgQXJyYXkgb2YgdmFsaWRhdGlvbiBlcnJvciBtZXNzYWdlcywgZW1wdHkgaWYgdmFsaWRcbiAqIEBkZXByZWNhdGVkIFVzZSB0aGUgZXF1aXZhbGVudCBjb25zdHJ1Y3QgZnJvbSBgYXdzLWNkay1saWIvYXdzLWJlZHJvY2thZ2VudGNvcmVgIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUV2YWx1YXRvck5hbWUobmFtZTogc3RyaW5nLCBfc2NvcGU/OiBJQ29uc3RydWN0KTogc3RyaW5nW10ge1xuICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgaWYgKG5hbWUgPT0gbnVsbCkge1xuICAgIHJldHVybiBlcnJvcnM7XG4gIH1cblxuICBpZiAoVG9rZW4uaXNVbnJlc29sdmVkKG5hbWUpKSB7XG4gICAgcmV0dXJuIGVycm9ycztcbiAgfVxuXG4gIGlmIChuYW1lLmxlbmd0aCA8IEVWQUxVQVRPUl9OQU1FX01JTl9MRU5HVEgpIHtcbiAgICBlcnJvcnMucHVzaChcbiAgICAgIGBFdmFsdWF0b3IgbmFtZSBtdXN0IGJlIGF0IGxlYXN0ICR7RVZBTFVBVE9SX05BTUVfTUlOX0xFTkdUSH0gY2hhcmFjdGVyKHMpLCBnb3QgJHtuYW1lLmxlbmd0aH1gLFxuICAgICk7XG4gIH1cblxuICBpZiAobmFtZS5sZW5ndGggPiBFVkFMVUFUT1JfTkFNRV9NQVhfTEVOR1RIKSB7XG4gICAgZXJyb3JzLnB1c2goXG4gICAgICBgRXZhbHVhdG9yIG5hbWUgbXVzdCBiZSBhdCBtb3N0ICR7RVZBTFVBVE9SX05BTUVfTUFYX0xFTkdUSH0gY2hhcmFjdGVycywgZ290ICR7bmFtZS5sZW5ndGh9YCxcbiAgICApO1xuICB9XG5cbiAgLy8gUGF0dGVybjogXlthLXpBLVpdW2EtekEtWjAtOV9dezAsNDd9JFxuICBjb25zdCB2YWxpZE5hbWVQYXR0ZXJuID0gL15bYS16QS1aXVthLXpBLVowLTlfXXswLDQ3fSQvO1xuICBpZiAoIXZhbGlkTmFtZVBhdHRlcm4udGVzdChuYW1lKSkge1xuICAgIGVycm9ycy5wdXNoKFxuICAgICAgYEV2YWx1YXRvciBuYW1lIFwiJHtuYW1lfVwiIGRvZXMgbm90IG1hdGNoIHJlcXVpcmVkIHBhdHRlcm4uIE11c3Qgc3RhcnQgd2l0aCBhIGxldHRlciBhbmQgY29udGFpbiBvbmx5IGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIGFuZCB1bmRlcnNjb3Jlcy5gLFxuICAgICk7XG4gIH1cblxuICByZXR1cm4gZXJyb3JzO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlcyB0aGF0IGluc3RydWN0aW9ucyBhcmUgcHJvdmlkZWQgYW5kIG5vbi1lbXB0eS5cbiAqIEBwYXJhbSBpbnN0cnVjdGlvbnMgLSBUaGUgaW5zdHJ1Y3Rpb25zIHRvIHZhbGlkYXRlXG4gKiBAcGFyYW0gX3Njb3BlIC0gVGhlIGNvbnN0cnVjdCBzY29wZSBmb3IgZXJyb3IgcmVwb3J0aW5nIChvcHRpb25hbClcbiAqIEByZXR1cm5zIEFycmF5IG9mIHZhbGlkYXRpb24gZXJyb3IgbWVzc2FnZXMsIGVtcHR5IGlmIHZhbGlkXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGhlIGVxdWl2YWxlbnQgY29uc3RydWN0IGZyb20gYGF3cy1jZGstbGliL2F3cy1iZWRyb2NrYWdlbnRjb3JlYCBpbnN0ZWFkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVJbnN0cnVjdGlvbnMoaW5zdHJ1Y3Rpb25zOiBzdHJpbmcsIF9zY29wZT86IElDb25zdHJ1Y3QpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcblxuICBpZiAoaW5zdHJ1Y3Rpb25zID09IG51bGwpIHtcbiAgICBlcnJvcnMucHVzaCgnSW5zdHJ1Y3Rpb25zIGFyZSByZXF1aXJlZCBmb3IgTExNLWFzLWEtSnVkZ2UgZXZhbHVhdG9ycycpO1xuICAgIHJldHVybiBlcnJvcnM7XG4gIH1cblxuICBpZiAoVG9rZW4uaXNVbnJlc29sdmVkKGluc3RydWN0aW9ucykpIHtcbiAgICByZXR1cm4gZXJyb3JzO1xuICB9XG5cbiAgaWYgKGluc3RydWN0aW9ucy50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgZXJyb3JzLnB1c2goJ0luc3RydWN0aW9ucyBtdXN0IG5vdCBiZSBlbXB0eScpO1xuICB9XG5cbiAgcmV0dXJuIGVycm9ycztcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgYSBjYXRlZ29yaWNhbCByYXRpbmcgc2NhbGUuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBjYXRlZ29yaWNhbCByYXRpbmcgb3B0aW9ucyB0byB2YWxpZGF0ZVxuICogQHBhcmFtIF9zY29wZSAtIFRoZSBjb25zdHJ1Y3Qgc2NvcGUgZm9yIGVycm9yIHJlcG9ydGluZyAob3B0aW9uYWwpXG4gKiBAcmV0dXJucyBBcnJheSBvZiB2YWxpZGF0aW9uIGVycm9yIG1lc3NhZ2VzLCBlbXB0eSBpZiB2YWxpZFxuICogQGRlcHJlY2F0ZWQgVXNlIHRoZSBlcXVpdmFsZW50IGNvbnN0cnVjdCBmcm9tIGBhd3MtY2RrLWxpYi9hd3MtYmVkcm9ja2FnZW50Y29yZWAgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlQ2F0ZWdvcmljYWxSYXRpbmdTY2FsZShvcHRpb25zOiBDYXRlZ29yaWNhbFJhdGluZ09wdGlvbltdLCBfc2NvcGU/OiBJQ29uc3RydWN0KTogc3RyaW5nW10ge1xuICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgaWYgKG9wdGlvbnMgPT0gbnVsbCB8fCBvcHRpb25zLmxlbmd0aCA8IFJBVElOR19TQ0FMRV9NSU5fT1BUSU9OUykge1xuICAgIGVycm9ycy5wdXNoKGBBdCBsZWFzdCAke1JBVElOR19TQ0FMRV9NSU5fT1BUSU9OU30gY2F0ZWdvcmljYWwgcmF0aW5nIG9wdGlvbiBpcyByZXF1aXJlZCwgZ290ICR7b3B0aW9ucz8ubGVuZ3RoID8/IDB9YCk7XG4gICAgcmV0dXJuIGVycm9ycztcbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgb3B0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgIGlmICghVG9rZW4uaXNVbnJlc29sdmVkKG9wdGlvbnNbaV0ubGFiZWwpICYmICghb3B0aW9uc1tpXS5sYWJlbCB8fCBvcHRpb25zW2ldLmxhYmVsLnRyaW0oKS5sZW5ndGggPT09IDApKSB7XG4gICAgICBlcnJvcnMucHVzaChgQ2F0ZWdvcmljYWwgcmF0aW5nIG9wdGlvbiBhdCBpbmRleCAke2l9IG11c3QgaGF2ZSBhIG5vbi1lbXB0eSBsYWJlbGApO1xuICAgIH1cbiAgICBpZiAoIVRva2VuLmlzVW5yZXNvbHZlZChvcHRpb25zW2ldLmRlZmluaXRpb24pICYmICghb3B0aW9uc1tpXS5kZWZpbml0aW9uIHx8IG9wdGlvbnNbaV0uZGVmaW5pdGlvbi50cmltKCkubGVuZ3RoID09PSAwKSkge1xuICAgICAgZXJyb3JzLnB1c2goYENhdGVnb3JpY2FsIHJhdGluZyBvcHRpb24gYXQgaW5kZXggJHtpfSBtdXN0IGhhdmUgYSBub24tZW1wdHkgZGVmaW5pdGlvbmApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBlcnJvcnM7XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIGEgbnVtZXJpY2FsIHJhdGluZyBzY2FsZS5cbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG51bWVyaWNhbCByYXRpbmcgb3B0aW9ucyB0byB2YWxpZGF0ZVxuICogQHBhcmFtIF9zY29wZSAtIFRoZSBjb25zdHJ1Y3Qgc2NvcGUgZm9yIGVycm9yIHJlcG9ydGluZyAob3B0aW9uYWwpXG4gKiBAcmV0dXJucyBBcnJheSBvZiB2YWxpZGF0aW9uIGVycm9yIG1lc3NhZ2VzLCBlbXB0eSBpZiB2YWxpZFxuICogQGRlcHJlY2F0ZWQgVXNlIHRoZSBlcXVpdmFsZW50IGNvbnN0cnVjdCBmcm9tIGBhd3MtY2RrLWxpYi9hd3MtYmVkcm9ja2FnZW50Y29yZWAgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlTnVtZXJpY2FsUmF0aW5nU2NhbGUob3B0aW9uczogTnVtZXJpY2FsUmF0aW5nT3B0aW9uW10sIF9zY29wZT86IElDb25zdHJ1Y3QpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcblxuICBpZiAob3B0aW9ucyA9PSBudWxsIHx8IG9wdGlvbnMubGVuZ3RoIDwgUkFUSU5HX1NDQUxFX01JTl9PUFRJT05TKSB7XG4gICAgZXJyb3JzLnB1c2goYEF0IGxlYXN0ICR7UkFUSU5HX1NDQUxFX01JTl9PUFRJT05TfSBudW1lcmljYWwgcmF0aW5nIG9wdGlvbiBpcyByZXF1aXJlZCwgZ290ICR7b3B0aW9ucz8ubGVuZ3RoID8/IDB9YCk7XG4gICAgcmV0dXJuIGVycm9ycztcbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgb3B0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgIGlmICghVG9rZW4uaXNVbnJlc29sdmVkKG9wdGlvbnNbaV0ubGFiZWwpICYmICghb3B0aW9uc1tpXS5sYWJlbCB8fCBvcHRpb25zW2ldLmxhYmVsLnRyaW0oKS5sZW5ndGggPT09IDApKSB7XG4gICAgICBlcnJvcnMucHVzaChgTnVtZXJpY2FsIHJhdGluZyBvcHRpb24gYXQgaW5kZXggJHtpfSBtdXN0IGhhdmUgYSBub24tZW1wdHkgbGFiZWxgKTtcbiAgICB9XG4gICAgaWYgKCFUb2tlbi5pc1VucmVzb2x2ZWQob3B0aW9uc1tpXS5kZWZpbml0aW9uKSAmJiAoIW9wdGlvbnNbaV0uZGVmaW5pdGlvbiB8fCBvcHRpb25zW2ldLmRlZmluaXRpb24udHJpbSgpLmxlbmd0aCA9PT0gMCkpIHtcbiAgICAgIGVycm9ycy5wdXNoKGBOdW1lcmljYWwgcmF0aW5nIG9wdGlvbiBhdCBpbmRleCAke2l9IG11c3QgaGF2ZSBhIG5vbi1lbXB0eSBkZWZpbml0aW9uYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGVycm9ycztcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGhlIExhbWJkYSB0aW1lb3V0IGluIHNlY29uZHMuXG4gKiBAcGFyYW0gc2Vjb25kcyAtIFRoZSB0aW1lb3V0IGluIHNlY29uZHMgdG8gdmFsaWRhdGVcbiAqIEBwYXJhbSBfc2NvcGUgLSBUaGUgY29uc3RydWN0IHNjb3BlIGZvciBlcnJvciByZXBvcnRpbmcgKG9wdGlvbmFsKVxuICogQHJldHVybnMgQXJyYXkgb2YgdmFsaWRhdGlvbiBlcnJvciBtZXNzYWdlcywgZW1wdHkgaWYgdmFsaWRcbiAqIEBkZXByZWNhdGVkIFVzZSB0aGUgZXF1aXZhbGVudCBjb25zdHJ1Y3QgZnJvbSBgYXdzLWNkay1saWIvYXdzLWJlZHJvY2thZ2VudGNvcmVgIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUxhbWJkYVRpbWVvdXQoc2Vjb25kczogbnVtYmVyIHwgdW5kZWZpbmVkLCBfc2NvcGU/OiBJQ29uc3RydWN0KTogc3RyaW5nW10ge1xuICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgaWYgKHNlY29uZHMgPT0gbnVsbCkge1xuICAgIHJldHVybiBlcnJvcnM7XG4gIH1cblxuICBpZiAoVG9rZW4uaXNVbnJlc29sdmVkKHNlY29uZHMpKSB7XG4gICAgcmV0dXJuIGVycm9ycztcbiAgfVxuXG4gIGlmIChzZWNvbmRzIDw9IDApIHtcbiAgICBlcnJvcnMucHVzaChgTGFtYmRhIHRpbWVvdXQgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlciwgZ290ICR7c2Vjb25kc31gKTtcbiAgfVxuXG4gIHJldHVybiBlcnJvcnM7XG59XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEVMUEVSIEZVTkNUSU9OU1xuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4vKipcbiAqIFRocm93cyBhIHZhbGlkYXRpb24gZXJyb3IgaWYgdGhlIHZhbGlkYXRpb24gZnVuY3Rpb24gcmV0dXJucyBhbnkgZXJyb3JzLlxuICogQHBhcmFtIHZhbGlkYXRpb25GbiAtIFRoZSB2YWxpZGF0aW9uIGZ1bmN0aW9uIHRvIGV4ZWN1dGVcbiAqIEBwYXJhbSBwYXJhbSAtIFRoZSBwYXJhbWV0ZXIgdG8gdmFsaWRhdGVcbiAqIEBwYXJhbSBzY29wZSAtIFRoZSBjb25zdHJ1Y3Qgc2NvcGUgZm9yIGVycm9yIHJlcG9ydGluZyAob3B0aW9uYWwpXG4gKiBAcmV0dXJucyBUaGUgdmFsaWRhdGVkIHBhcmFtZXRlclxuICogQGRlcHJlY2F0ZWQgVXNlIHRoZSBlcXVpdmFsZW50IGNvbnN0cnVjdCBmcm9tIGBhd3MtY2RrLWxpYi9hd3MtYmVkcm9ja2FnZW50Y29yZWAgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRocm93SWZJbnZhbGlkPFQ+KHZhbGlkYXRpb25GbjogVmFsaWRhdGlvbkZuPFQ+LCBwYXJhbTogVCwgc2NvcGU/OiBJQ29uc3RydWN0KTogVCB7XG4gIGNvbnN0IGVycm9ycyA9IHZhbGlkYXRpb25GbihwYXJhbSwgc2NvcGUpO1xuICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICBpZiAoc2NvcGUpIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IobGl0YFZhbGlkYXRpb25GYWlsZWRgLCBlcnJvcnMuam9pbignXFxuJyksIHNjb3BlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yKGxpdGBWYWxpZGF0aW9uRmFpbGVkYCwgZXJyb3JzLmpvaW4oJ1xcbicpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHBhcmFtO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlcyB0YWdzIGZvciBldmFsdWF0aW9uIHJlc291cmNlcy5cbiAqIEBwYXJhbSB0YWdzIC0gVGhlIHRhZ3Mgb2JqZWN0IHRvIHZhbGlkYXRlXG4gKiBAcGFyYW0ga2V5UGF0dGVybiAtIFRoZSByZWdleCBwYXR0ZXJuIHRvIHZhbGlkYXRlIHRhZyBrZXlzIGFnYWluc3RcbiAqIEBwYXJhbSBfc2NvcGUgLSBUaGUgY29uc3RydWN0IHNjb3BlIGZvciBlcnJvciByZXBvcnRpbmcgKG9wdGlvbmFsKVxuICogQHJldHVybnMgQXJyYXkgb2YgdmFsaWRhdGlvbiBlcnJvciBtZXNzYWdlcywgZW1wdHkgaWYgdmFsaWRcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVUYWdzKHRhZ3M6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gfCB1bmRlZmluZWQsIGtleVBhdHRlcm46IFJlZ0V4cCwgX3Njb3BlPzogSUNvbnN0cnVjdCk6IHN0cmluZ1tdIHtcbiAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuICBpZiAodGFncyA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGVycm9ycztcbiAgfVxuICBpZiAoVG9rZW4uaXNVbnJlc29sdmVkKHRhZ3MpKSB7XG4gICAgcmV0dXJuIGVycm9ycztcbiAgfVxuXG4gIGlmIChPYmplY3Qua2V5cyh0YWdzKS5sZW5ndGggPiBUQUdTX01BWF9DT1VOVCkge1xuICAgIGVycm9ycy5wdXNoKGBDYW5ub3QgaGF2ZSBtb3JlIHRoYW4gJHtUQUdTX01BWF9DT1VOVH0gdGFncywgZ290ICR7T2JqZWN0LmtleXModGFncykubGVuZ3RofWApO1xuICB9XG5cbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGFncykpIHtcbiAgICBpZiAoIVRva2VuLmlzVW5yZXNvbHZlZChrZXkpKSB7XG4gICAgICBpZiAoa2V5LnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgZXJyb3JzLnB1c2goJ1RhZyBrZXkgY2Fubm90IGJlIGVtcHR5IG9yIGNvbnNpc3Qgb25seSBvZiB3aGl0ZXNwYWNlJyk7XG4gICAgICB9IGVsc2UgaWYgKGtleS5sZW5ndGggPCBUQUdfS0VZX01JTiB8fCBrZXkubGVuZ3RoID4gVEFHX0tFWV9NQVgpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goYFRhZyBrZXkgXCIke2tleX1cIiBtdXN0IGJlIGJldHdlZW4gJHtUQUdfS0VZX01JTn0gYW5kICR7VEFHX0tFWV9NQVh9IGNoYXJhY3RlcnMsIGdvdCAke2tleS5sZW5ndGh9YCk7XG4gICAgICB9XG4gICAgICBpZiAoa2V5LnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgnYXdzOicpKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKGBUYWcga2V5IFwiJHtrZXl9XCIgY2Fubm90IHN0YXJ0IHdpdGggXCJhd3M6XCIgYXMgdGhpcyBwcmVmaXggaXMgcmVzZXJ2ZWQgYnkgQVdTYCk7XG4gICAgICB9XG4gICAgICBpZiAoIWtleVBhdHRlcm4udGVzdChrZXkpKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKGBUYWcga2V5IFwiJHtrZXl9XCIgY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXJzYCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghVG9rZW4uaXNVbnJlc29sdmVkKHZhbHVlKSkge1xuICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+IFRBR19WQUxVRV9NQVgpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goYFRhZyB2YWx1ZSBmb3Iga2V5IFwiJHtrZXl9XCIgbXVzdCBiZSBhdCBtb3N0ICR7VEFHX1ZBTFVFX01BWH0gY2hhcmFjdGVycywgZ290ICR7dmFsdWUubGVuZ3RofWApO1xuICAgICAgfVxuICAgICAgaWYgKCFUQUdfVkFMVUVfUEFUVEVSTi50ZXN0KHZhbHVlKSkge1xuICAgICAgICBlcnJvcnMucHVzaChgVGFnIHZhbHVlIGZvciBrZXkgXCIke2tleX1cIiBjb250YWlucyBpbnZhbGlkIGNoYXJhY3RlcnMuIFZhbGlkOiBVbmljb2RlIGxldHRlcnMsIGRpZ2l0cywgd2hpdGVzcGFjZSwgYW5kIF8uLz0rLWApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBlcnJvcnM7XG59XG5cbi8qKiBWYWxpZGF0ZXMgdGFncyBmb3IgRXZhbHVhdG9yIHJlc291cmNlcyAoVW5pY29kZSBrZXlzIGFsbG93ZWQgcGVyIENGTiBkb2NzKSAqL1xuLyoqXG4gKiBUaGlzIEFQSSBoYXMgYmVlbiBncmFkdWF0ZWQgdG8gc3RhYmxlLlxuICogQGRlcHJlY2F0ZWQgVXNlIHRoZSBlcXVpdmFsZW50IGNvbnN0cnVjdCBmcm9tIGBhd3MtY2RrLWxpYi9hd3MtYmVkcm9ja2FnZW50Y29yZWAgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlRXZhbHVhdG9yVGFncyh0YWdzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSwgc2NvcGU/OiBJQ29uc3RydWN0KTogc3RyaW5nW10ge1xuICByZXR1cm4gdmFsaWRhdGVUYWdzKHRhZ3MsIEVWQUxVQVRPUl9UQUdfS0VZX1BBVFRFUk4sIHNjb3BlKTtcbn1cblxuLyoqIFZhbGlkYXRlcyB0YWdzIGZvciBPbmxpbmVFdmFsdWF0aW9uQ29uZmlnIHJlc291cmNlcyAoQVNDSUkga2V5cyBwZXIgQ0ZOIHBhdHRlcm4pICovXG4vKipcbiAqIFRoaXMgQVBJIGhhcyBiZWVuIGdyYWR1YXRlZCB0byBzdGFibGUuXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGhlIGVxdWl2YWxlbnQgY29uc3RydWN0IGZyb20gYGF3cy1jZGstbGliL2F3cy1iZWRyb2NrYWdlbnRjb3JlYCBpbnN0ZWFkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVFdmFsdWF0aW9uVGFncyh0YWdzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSwgc2NvcGU/OiBJQ29uc3RydWN0KTogc3RyaW5nW10ge1xuICByZXR1cm4gdmFsaWRhdGVUYWdzKHRhZ3MsIE9OTElORV9FVkFMVUFUSU9OX0NPTkZJR19UQUdfS0VZX1BBVFRFUk4sIHNjb3BlKTtcbn1cbiJdfQ==
|
|
@@ -13,6 +13,7 @@ import type { IGatewayProtocolConfig } from './protocol';
|
|
|
13
13
|
*****************************************************************************/
|
|
14
14
|
/**
|
|
15
15
|
* Exception levels for gateway
|
|
16
|
+
* @deprecated Use the equivalent construct from `aws-cdk-lib/aws-bedrockagentcore` instead.
|
|
16
17
|
*/
|
|
17
18
|
export declare enum GatewayExceptionLevel {
|
|
18
19
|
/**
|
|
@@ -27,6 +28,7 @@ export declare enum GatewayExceptionLevel {
|
|
|
27
28
|
*****************************************************************************/
|
|
28
29
|
/**
|
|
29
30
|
* Interface for Gateway resources
|
|
31
|
+
* @deprecated Use the equivalent construct from `aws-cdk-lib/aws-bedrockagentcore` instead.
|
|
30
32
|
*/
|
|
31
33
|
export interface IGateway extends IResource, IGatewayRef {
|
|
32
34
|
/**
|
|
@@ -194,6 +196,11 @@ export interface IGateway extends IResource, IGatewayRef {
|
|
|
194
196
|
/******************************************************************************
|
|
195
197
|
* Base Class
|
|
196
198
|
*****************************************************************************/
|
|
199
|
+
/**
|
|
200
|
+
* Base class for Gateway constructs.
|
|
201
|
+
*
|
|
202
|
+
* @deprecated Use the equivalent construct from `aws-cdk-lib/aws-bedrockagentcore` instead.
|
|
203
|
+
*/
|
|
197
204
|
export declare abstract class GatewayBase extends Resource implements IGateway {
|
|
198
205
|
abstract readonly gatewayArn: string;
|
|
199
206
|
abstract readonly gatewayId: string;
|