@aws-cdk/aws-bedrock-agentcore-alpha 2.256.1-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 +2806 -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
|
@@ -1,4 +1,20 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
2
18
|
var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
|
|
3
19
|
var useValue = arguments.length > 2;
|
|
4
20
|
for (var i = 0; i < initializers.length; i++) {
|
|
@@ -33,13 +49,30 @@ var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn,
|
|
|
33
49
|
if (target) Object.defineProperty(target, contextIn.name, descriptor);
|
|
34
50
|
done = true;
|
|
35
51
|
};
|
|
52
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
53
|
+
var ownKeys = function(o) {
|
|
54
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
55
|
+
var ar = [];
|
|
56
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
57
|
+
return ar;
|
|
58
|
+
};
|
|
59
|
+
return ownKeys(o);
|
|
60
|
+
};
|
|
61
|
+
return function (mod) {
|
|
62
|
+
if (mod && mod.__esModule) return mod;
|
|
63
|
+
var result = {};
|
|
64
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
65
|
+
__setModuleDefault(result, mod);
|
|
66
|
+
return result;
|
|
67
|
+
};
|
|
68
|
+
})();
|
|
36
69
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37
70
|
exports.OAuth2CredentialProvider = exports.OAuth2CredentialProviderVendor = void 0;
|
|
38
71
|
const jsiiDeprecationWarnings = require("../../.warnings.jsii.js");
|
|
39
72
|
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
40
73
|
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
41
74
|
const aws_bedrockagentcore_1 = require("aws-cdk-lib/aws-bedrockagentcore");
|
|
42
|
-
const iam = require("aws-cdk-lib/aws-iam");
|
|
75
|
+
const iam = __importStar(require("aws-cdk-lib/aws-iam"));
|
|
43
76
|
const helpers_internal_1 = require("aws-cdk-lib/core/lib/helpers-internal");
|
|
44
77
|
const metadata_resource_1 = require("aws-cdk-lib/core/lib/metadata-resource");
|
|
45
78
|
const prop_injectable_1 = require("aws-cdk-lib/core/lib/prop-injectable");
|
|
@@ -53,6 +86,7 @@ const validation_helpers_1 = require("./validation-helpers");
|
|
|
53
86
|
* Built-in OAuth2 vendors supported by `AWS::BedrockAgentCore::OAuth2CredentialProvider`.
|
|
54
87
|
*
|
|
55
88
|
* @see https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-bedrockagentcore-oauth2credentialprovider.html
|
|
89
|
+
* @deprecated Use the equivalent construct from `aws-cdk-lib/aws-bedrockagentcore` instead.
|
|
56
90
|
*/
|
|
57
91
|
var OAuth2CredentialProviderVendor;
|
|
58
92
|
(function (OAuth2CredentialProviderVendor) {
|
|
@@ -277,7 +311,7 @@ let OAuth2CredentialProvider = (() => {
|
|
|
277
311
|
OAuth2CredentialProvider = _classThis = _classDescriptor.value;
|
|
278
312
|
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
279
313
|
}
|
|
280
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.OAuth2CredentialProvider", version: "2.
|
|
314
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.OAuth2CredentialProvider", version: "2.258.0-alpha.0" };
|
|
281
315
|
/** Uniquely identifies this class. */
|
|
282
316
|
static PROPERTY_INJECTION_ID = '@aws-cdk.aws-bedrock-agentcore-alpha.OAuth2CredentialProvider';
|
|
283
317
|
/**
|
|
@@ -860,4 +894,4 @@ let OAuth2CredentialProvider = (() => {
|
|
|
860
894
|
return OAuth2CredentialProvider = _classThis;
|
|
861
895
|
})();
|
|
862
896
|
exports.OAuth2CredentialProvider = OAuth2CredentialProvider;
|
|
863
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2F1dGgyLWNyZWRlbnRpYWwtcHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJvYXV0aDItY3JlZGVudGlhbC1wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFjQSw2Q0FBNEU7QUFNNUUsMkVBQStFO0FBQy9FLDJDQUEyQztBQUMzQyw0RUFBNEQ7QUFDNUQsOEVBQThGO0FBQzlGLDBFQUEwRTtBQUUxRSxtREFBNEs7QUFDNUssbUNBQXFKO0FBQ3JKLDZEQUk4QjtBQUU5Qjs7K0VBRStFO0FBRS9FOzs7O0dBSUc7QUFDSCxJQUFZLDhCQW1EWDtBQW5ERCxXQUFZLDhCQUE4QjtJQUN4QyxxQkFBcUI7SUFDckIseURBQXVCLENBQUE7SUFDdkIscUJBQXFCO0lBQ3JCLHlEQUF1QixDQUFBO0lBQ3ZCLG9CQUFvQjtJQUNwQix1REFBcUIsQ0FBQTtJQUNyQix5QkFBeUI7SUFDekIsaUVBQStCLENBQUE7SUFDL0Isd0JBQXdCO0lBQ3hCLCtEQUE2QixDQUFBO0lBQzdCLHFCQUFxQjtJQUNyQix5REFBdUIsQ0FBQTtJQUN2Qix3QkFBd0I7SUFDeEIsK0RBQTZCLENBQUE7SUFDN0IsdUJBQXVCO0lBQ3ZCLDZEQUEyQixDQUFBO0lBQzNCLDBCQUEwQjtJQUMxQiwrQ0FBYSxDQUFBO0lBQ2IsbUJBQW1CO0lBQ25CLHFEQUFtQixDQUFBO0lBQ25CLHVCQUF1QjtJQUN2Qiw4REFBNEIsQ0FBQTtJQUM1QixzQkFBc0I7SUFDdEIsNERBQTBCLENBQUE7SUFDMUIsdUJBQXVCO0lBQ3ZCLDZEQUEyQixDQUFBO0lBQzNCLHFCQUFxQjtJQUNyQix5REFBdUIsQ0FBQTtJQUN2QixxQkFBcUI7SUFDckIseURBQXVCLENBQUE7SUFDdkIsbUJBQW1CO0lBQ25CLHFEQUFtQixDQUFBO0lBQ25CLHFCQUFxQjtJQUNyQix5REFBdUIsQ0FBQTtJQUN2QixzQkFBc0I7SUFDdEIsMkRB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QUFDLENBQUMsU0FBUzthQUNkLENBQUM7WUFFRixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksa0RBQTJCLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUU5RSxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyx5QkFBeUIsQ0FBQztZQUN2RSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDO1lBQ25ELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUM7WUFDbkQsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLG1CQUFtQixDQUFDO1NBQzVEO1FBRUQ7Ozs7O1dBS0c7UUFFSSx5QkFBeUIsQ0FDOUIsTUFBZ0IsRUFDaEIsZ0JBQTRDO1lBRTVDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7WUFDdkMsSUFBSSxTQUFTLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQ3RCLE1BQU0sSUFBSSw2QkFBZSxDQUN2QixJQUFBLHNCQUFHLEVBQUEsOEJBQThCLEVBQ2pDLHVGQUF1RixFQUN2RixJQUFJLENBQ0wsQ0FBQztZQUNKLENBQUM7WUFDRCxPQUFPO2dCQUNMLFdBQVcsRUFBRSxJQUFJLENBQUMscUJBQXFCO2dCQUN2QyxTQUFTO2dCQUNULE1BQU07Z0JBQ04sZ0JBQWdCO2FBQ2pCLENBQUM7U0FDSDs7WUF6WVUsdURBQXdCOzs7OztBQUF4Qiw0REFBd0IiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqICBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKS4gWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuICogIHdpdGggdGhlIExpY2Vuc2UuIEEgY29weSBvZiB0aGUgTGljZW5zZSBpcyBsb2NhdGVkIGF0XG4gKlxuICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiAgb3IgaW4gdGhlICdsaWNlbnNlJyBmaWxlIGFjY29tcGFueWluZyB0aGlzIGZpbGUuIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAnQVMgSVMnIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVNcbiAqICBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9uc1xuICogIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IElSZXNvdXJjZSwgUmVzb3VyY2VQcm9wcywgU2VjcmV0VmFsdWUgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBMYXp5LCBOYW1lcywgUmVzb3VyY2UsIFRva2VuLCBWYWxpZGF0aW9uRXJyb3IgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgdHlwZSB7XG4gIENmbk9BdXRoMkNyZWRlbnRpYWxQcm92aWRlclByb3BzLFxuICBJT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyUmVmLFxuICBPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJSZWZlcmVuY2UsXG59IGZyb20gJ2F3cy1jZGstbGliL2F3cy1iZWRyb2NrYWdlbnRjb3JlJztcbmltcG9ydCB7IENmbk9BdXRoMkNyZWRlbnRpYWxQcm92aWRlciB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1iZWRyb2NrYWdlbnRjb3JlJztcbmltcG9ydCAqIGFzIGlhbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IGxpdCB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL2hlbHBlcnMtaW50ZXJuYWwnO1xuaW1wb3J0IHsgYWRkQ29uc3RydWN0TWV0YWRhdGEsIE1ldGhvZE1ldGFkYXRhIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvbWV0YWRhdGEtcmVzb3VyY2UnO1xuaW1wb3J0IHsgcHJvcGVydHlJbmplY3RhYmxlIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvcHJvcC1pbmplY3RhYmxlJztcbmltcG9ydCB0eXBlIHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBidWlsZElkZW50aXR5UmVzb3VyY2VBcm5zLCBncmFudENyZWRlbnRpYWxTZWNyZXQsIGdyYW50UmVhZFdpdGhMaXN0LCBUT0tFTl9WQVVMVF9PQVVUSDJfUEFSRU5UX1JFU09VUkNFUywgV09SS0xPQURfSURFTlRJVFlfVVNFX1JFU09VUkNFUyB9IGZyb20gJy4vZ3JhbnQtaGVscGVycyc7XG5pbXBvcnQgeyBPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJJZGVudGl0eVBlcm1zLCBUT0tFTl9WQVVMVF9DUkVERU5USUFMX1NFQ1JFVF9SRUFEX1BFUk1TLCBUT0tFTl9WQVVMVF9DUkVERU5USUFMX1NFQ1JFVF9XUklURV9QRVJNUyB9IGZyb20gJy4vcGVybXMnO1xuaW1wb3J0IHtcbiAgdGhyb3dJZkludmFsaWQsXG4gIHZhbGlkYXRlQ3JlZGVudGlhbFByb3ZpZGVyTmFtZSxcbiAgdmFsaWRhdGVDcmVkZW50aWFsUHJvdmlkZXJUYWdzLFxufSBmcm9tICcuL3ZhbGlkYXRpb24taGVscGVycyc7XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW51bXNcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuLyoqXG4gKiBCdWlsdC1pbiBPQXV0aDIgdmVuZG9ycyBzdXBwb3J0ZWQgYnkgYEFXUzo6QmVkcm9ja0FnZW50Q29yZTo6T0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyYC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1iZWRyb2NrYWdlbnRjb3JlLW9hdXRoMmNyZWRlbnRpYWxwcm92aWRlci5odG1sXG4gKi9cbmV4cG9ydCBlbnVtIE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlclZlbmRvciB7XG4gIC8qKiBHb29nbGUgT0F1dGgyLiAqL1xuICBHT09HTEUgPSAnR29vZ2xlT2F1dGgyJyxcbiAgLyoqIEdpdEh1YiBPQXV0aDIuICovXG4gIEdJVEhVQiA9ICdHaXRodWJPYXV0aDInLFxuICAvKiogU2xhY2sgT0F1dGgyLiAqL1xuICBTTEFDSyA9ICdTbGFja09hdXRoMicsXG4gIC8qKiBTYWxlc2ZvcmNlIE9BdXRoMi4gKi9cbiAgU0FMRVNGT1JDRSA9ICdTYWxlc2ZvcmNlT2F1dGgyJyxcbiAgLyoqIE1pY3Jvc29mdCBPQXV0aDIuICovXG4gIE1JQ1JPU09GVCA9ICdNaWNyb3NvZnRPYXV0aDInLFxuICAvKiogQ3VzdG9tIE9BdXRoMi4gKi9cbiAgQ1VTVE9NID0gJ0N1c3RvbU9hdXRoMicsXG4gIC8qKiBBdGxhc3NpYW4gT0F1dGgyLiAqL1xuICBBVExBU1NJQU4gPSAnQXRsYXNzaWFuT2F1dGgyJyxcbiAgLyoqIExpbmtlZEluIE9BdXRoMi4gKi9cbiAgTElOS0VESU4gPSAnTGlua2VkaW5PYXV0aDInLFxuICAvKiogWCAoVHdpdHRlcikgT0F1dGgyLiAqL1xuICBYID0gJ1hPYXV0aDInLFxuICAvKiogT2t0YSBPQXV0aDIuICovXG4gIE9LVEEgPSAnT2t0YU9hdXRoMicsXG4gIC8qKiBPbmVMb2dpbiBPQXV0aDIuICovXG4gIE9ORV9MT0dJTiA9ICdPbmVMb2dpbk9hdXRoMicsXG4gIC8qKiBQaW5nT25lIE9BdXRoMi4gKi9cbiAgUElOR19PTkUgPSAnUGluZ09uZU9hdXRoMicsXG4gIC8qKiBGYWNlYm9vayBPQXV0aDIuICovXG4gIEZBQ0VCT09LID0gJ0ZhY2Vib29rT2F1dGgyJyxcbiAgLyoqIFlhbmRleCBPQXV0aDIuICovXG4gIFlBTkRFWCA9ICdZYW5kZXhPYXV0aDInLFxuICAvKiogUmVkZGl0IE9BdXRoMi4gKi9cbiAgUkVERElUID0gJ1JlZGRpdE9hdXRoMicsXG4gIC8qKiBab29tIE9BdXRoMi4gKi9cbiAgWk9PTSA9ICdab29tT2F1dGgyJyxcbiAgLyoqIFR3aXRjaCBPQXV0aDIuICovXG4gIFRXSVRDSCA9ICdUd2l0Y2hPYXV0aDInLFxuICAvKiogU3BvdGlmeSBPQXV0aDIuICovXG4gIFNQT1RJRlkgPSAnU3BvdGlmeU9hdXRoMicsXG4gIC8qKiBEcm9wYm94IE9BdXRoMi4gKi9cbiAgRFJPUEJPWCA9ICdEcm9wYm94T2F1dGgyJyxcbiAgLyoqIE5vdGlvbiBPQXV0aDIuICovXG4gIE5PVElPTiA9ICdOb3Rpb25PYXV0aDInLFxuICAvKiogSHViU3BvdCBPQXV0aDIuICovXG4gIEhVQlNQT1QgPSAnSHVic3BvdE9hdXRoMicsXG4gIC8qKiBDeWJlckFyayBPQXV0aDIuICovXG4gIENZQkVSX0FSSyA9ICdDeWJlckFya09hdXRoMicsXG4gIC8qKiBGdXNpb25BdXRoIE9BdXRoMi4gKi9cbiAgRlVTSU9OX0FVVEggPSAnRnVzaW9uQXV0aE9hdXRoMicsXG4gIC8qKiBBdXRoMCBPQXV0aDIuICovXG4gIEFVVEgwID0gJ0F1dGgwT2F1dGgyJyxcbiAgLyoqIEFtYXpvbiBDb2duaXRvIE9BdXRoMi4gKi9cbiAgQ09HTklUTyA9ICdDb2duaXRvT2F1dGgyJyxcbn1cblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVyZmFjZVxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4vKipcbiAqIEFuIE9BdXRoMiBjcmVkZW50aWFsIHByb3ZpZGVyIHJlZ2lzdGVyZWQgaW4gQWdlbnRDb3JlIFRva2VuIFZhdWx0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXIgZXh0ZW5kcyBJUmVzb3VyY2UsIGlhbS5JR3JhbnRhYmxlLCBJT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyUmVmIHtcbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhpcyBjcmVkZW50aWFsIHByb3ZpZGVyLlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBjcmVkZW50aWFsUHJvdmlkZXJBcm46IHN0cmluZztcblxuICAvKipcbiAgICogT0F1dGgyIHZlbmRvciBzdHJpbmcgcGFzc2VkIHRvIENsb3VkRm9ybWF0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgY3JlZGVudGlhbFByb3ZpZGVyVmVuZG9yOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIFVSTCBmb3IgdGhlIE9BdXRoMiBhdXRob3JpemF0aW9uIGZsb3cuXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGNhbGxiYWNrVXJsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBTZWNyZXRzIE1hbmFnZXIgc2VjcmV0IGZvciB0aGUgT0F1dGgyIGNsaWVudCBjcmVkZW50aWFscy5cbiAgICpcbiAgICogTWF5IGJlIHVuZGVmaW5lZCBmb3IgcmVzb3VyY2VzIGltcG9ydGVkIHdpdGhvdXQgdGhpcyBhdHRyaWJ1dGUuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGNsaWVudFNlY3JldEFybj86IHN0cmluZztcblxuICAvKipcbiAgICogVGltZXN0YW1wIHdoZW4gdGhlIGNyZWRlbnRpYWwgcHJvdmlkZXIgd2FzIGNyZWF0ZWQuXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGNyZWF0ZWRUaW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaW1lc3RhbXAgd2hlbiB0aGUgY3JlZGVudGlhbCBwcm92aWRlciB3YXMgbGFzdCB1cGRhdGVkLlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBsYXN0VXBkYXRlZFRpbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEdyYW50cyBJQU0gYWN0aW9ucyB0byB0aGUgSUFNIHByaW5jaXBhbC5cbiAgICovXG4gIGdyYW50KGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlLCAuLi5hY3Rpb25zOiBzdHJpbmdbXSk6IGlhbS5HcmFudDtcblxuICAvKipcbiAgICogR3JhbnQgYEdldE9hdXRoMkNyZWRlbnRpYWxQcm92aWRlcmAgYW5kIGBMaXN0T2F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyc2AsIHNjb3BlZCB0byB0aGlzXG4gICAqIHByb3ZpZGVyIGFuZCBwYXJlbnQgcmVzb3VyY2VzIHJlcXVpcmVkIGJ5IHRoZSBCZWRyb2NrIEFnZW50Q29yZSBhdXRob3JpemF0aW9uIG1vZGVsLlxuICAgKi9cbiAgZ3JhbnRSZWFkKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50O1xuXG4gIC8qKlxuICAgKiBHcmFudCBjb250cm9sIHBsYW5lIHBlcm1pc3Npb25zIHRvIG1hbmFnZSB0aGlzIHByb3ZpZGVyLlxuICAgKi9cbiAgZ3JhbnRBZG1pbihncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudDtcblxuICAvKipcbiAgICogR3JhbnQgcGVybWlzc2lvbiB0byByZXRyaWV2ZSBPQXV0aCB0b2tlbnMgKGBHZXRSZXNvdXJjZU9hdXRoMlRva2VuYCwgYENvbXBsZXRlUmVzb3VyY2VUb2tlbkF1dGhgKS5cbiAgICovXG4gIGdyYW50VXNlKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50O1xuXG4gIC8qKlxuICAgKiBHcmFudCByZWFkLCBhZG1pbiwgYW5kIHRva2VuIHJldHJpZXZhbCBwZXJtaXNzaW9ucy5cbiAgICovXG4gIGdyYW50RnVsbEFjY2VzcyhncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudDtcblxuICAvKipcbiAgICogQVJOcyBhbmQgT0F1dGggc2NvcGVzIGZvciBnYXRld2F5IHRhcmdldHMgKGBHYXRld2F5Q3JlZGVudGlhbFByb3ZpZGVyLmZyb21PYXV0aElkZW50aXR5YCBvciBgZnJvbU9hdXRoSWRlbnRpdHlBcm5gKS5cbiAgICovXG4gIGJpbmRGb3JHYXRld2F5T0F1dGhUYXJnZXQoc2NvcGVzOiBzdHJpbmdbXSwgY3VzdG9tUGFyYW1ldGVycz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0pOiBHYXRld2F5T0F1dGgySWRlbnRpdHlCaW5kaW5nO1xufVxuXG4vKipcbiAqIFByb3ZpZGVyIEFSTiwgc2VjcmV0IEFSTiwgYW5kIE9BdXRoIHNjb3BlcyBmb3Igd2lyaW5nIGEgVG9rZW4gVmF1bHQgT0F1dGgyIGlkZW50aXR5IGludG8gYSBnYXRld2F5IHRhcmdldC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHYXRld2F5T0F1dGgySWRlbnRpdHlCaW5kaW5nIHtcbiAgLyoqXG4gICAqIE9BdXRoMiBjcmVkZW50aWFsIHByb3ZpZGVyIEFSTi5cbiAgICovXG4gIHJlYWRvbmx5IHByb3ZpZGVyQXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNlY3JldHMgTWFuYWdlciBzZWNyZXQgQVJOIGZvciBPQXV0aDIgY2xpZW50IGNyZWRlbnRpYWxzLlxuICAgKi9cbiAgcmVhZG9ubHkgc2VjcmV0QXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE9BdXRoIHNjb3BlcyB0byByZXF1ZXN0IHdoZW4gaW52b2tpbmcgdGhyb3VnaCB0aGUgZ2F0ZXdheS5cbiAgICovXG4gIHJlYWRvbmx5IHNjb3Blczogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGN1c3RvbSBwYXJhbWV0ZXJzIGZvciB0aGUgT0F1dGggZmxvdy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBjdXN0b20gcGFyYW1ldGVyc1xuICAgKi9cbiAgcmVhZG9ubHkgY3VzdG9tUGFyYW1ldGVycz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG59XG5cbi8qKlxuICogU2hhcmVkIHByb3BlcnRpZXMgZm9yIE9BdXRoMiBjcmVkZW50aWFsIHByb3ZpZGVycyBjcmVhdGVkIHZpYSB7QGxpbmsgT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyfSBmYWN0b3J5IG1ldGhvZHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyQmFzZVByb3BzIHtcbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIGNyZWRlbnRpYWwgcHJvdmlkZXIuXG4gICAqXG4gICAqIEBkZWZhdWx0IGEgbmFtZSBnZW5lcmF0ZWQgYnkgQ0RLXG4gICAqL1xuICByZWFkb25seSBvQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUYWdzIGZvciB0aGlzIGNyZWRlbnRpYWwgcHJvdmlkZXIuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gdGFnc1xuICAgKi9cbiAgcmVhZG9ubHkgdGFncz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG59XG5cbi8qKlxuICogT0F1dGgyIGNsaWVudCBpZGVudGlmaWVyIGFuZCBzZWNyZXQgcmVnaXN0ZXJlZCB3aXRoIHRoZSBpZGVudGl0eSBwcm92aWRlciAoYWxsIHZlbmRvcnMpLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9BdXRoMkNsaWVudENyZWRlbnRpYWxzIHtcbiAgLyoqIE9BdXRoMiBjbGllbnQgaWRlbnRpZmllci4gKi9cbiAgcmVhZG9ubHkgY2xpZW50SWQ6IHN0cmluZztcbiAgLyoqXG4gICAqIE9BdXRoMiBjbGllbnQgc2VjcmV0LlxuICAgKlxuICAgKiAqKk5PVEU6KiogVGhlIGNsaWVudCBzZWNyZXQgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgQ2xvdWRGb3JtYXRpb24gdGVtcGxhdGUgYXMgcGFydCBvZiBzeW50aGVzaXMuXG4gICAqIFRoZSBzZXJ2aWNlIHN0b3JlcyB0aGUgc2VjcmV0IGluIFNlY3JldHMgTWFuYWdlciBhZnRlciBjcmVhdGlvbiwgYnV0IHRoZSB2YWx1ZSBpcyB2aXNpYmxlXG4gICAqIGluIHRoZSB0ZW1wbGF0ZSBhbmQgZGVwbG95bWVudCBoaXN0b3J5LiBVc2UgYFNlY3JldFZhbHVlLnVuc2FmZVBsYWluVGV4dCgpYCB0byBleHBsaWNpdGx5XG4gICAqIGFja25vd2xlZGdlIHBsYWludGV4dCwgb3IgcGFzcyBhIHJlZmVyZW5jZSBmcm9tIGFub3RoZXIgY29uc3RydWN0IHRvIGF2b2lkIGVtYmVkZGluZyB0aGVcbiAgICogbGl0ZXJhbCB2YWx1ZS5cbiAgICovXG4gIHJlYWRvbmx5IGNsaWVudFNlY3JldDogU2VjcmV0VmFsdWU7XG59XG5cbi8qKlxuICogTmFtaW5nLCB0YWdzLCBhbmQgY2xpZW50IGNyZWRlbnRpYWxzIHNoYXJlZCBieSBldmVyeSB7QGxpbmsgT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyfSBmYWN0b3J5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlckZhY3RvcnlCYXNlUHJvcHMgZXh0ZW5kcyBPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJCYXNlUHJvcHMsIE9BdXRoMkNsaWVudENyZWRlbnRpYWxzIHtcbn1cblxuLyoqXG4gKiBQcm9wcyBmb3Ige0BsaW5rIE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlci51c2luZ1NsYWNrfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTbGFja09BdXRoMkNyZWRlbnRpYWxQcm92aWRlclByb3BzIGV4dGVuZHMgT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyRmFjdG9yeUJhc2VQcm9wcyB7XG59XG5cbi8qKlxuICogUHJvcHMgZm9yIHtAbGluayBPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXIudXNpbmdHaXRodWJ9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdpdGh1Yk9BdXRoMkNyZWRlbnRpYWxQcm92aWRlclByb3BzIGV4dGVuZHMgT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyRmFjdG9yeUJhc2VQcm9wcyB7XG59XG5cbi8qKlxuICogUHJvcHMgZm9yIHtAbGluayBPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXIudXNpbmdHb29nbGV9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdvb2dsZU9BdXRoMkNyZWRlbnRpYWxQcm92aWRlclByb3BzIGV4dGVuZHMgT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyRmFjdG9yeUJhc2VQcm9wcyB7XG59XG5cbi8qKlxuICogUHJvcHMgZm9yIHtAbGluayBPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXIudXNpbmdTYWxlc2ZvcmNlfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTYWxlc2ZvcmNlT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyUHJvcHMgZXh0ZW5kcyBPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJGYWN0b3J5QmFzZVByb3BzIHtcbn1cblxuLyoqXG4gKiBQcm9wcyBmb3Ige0BsaW5rIE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlci51c2luZ01pY3Jvc29mdH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWljcm9zb2Z0T0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyUHJvcHMgZXh0ZW5kcyBPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJGYWN0b3J5QmFzZVByb3BzIHtcbiAgLyoqXG4gICAqIE1pY3Jvc29mdCBFbnRyYSBJRCB0ZW5hbnQgSUQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gc2VydmljZSBkZWZhdWx0IHRlbmFudCByZXNvbHV0aW9uXG4gICAqL1xuICByZWFkb25seSB0ZW5hbnRJZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm9wcyBmb3Ige0BsaW5rIE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlci51c2luZ0F0bGFzc2lhbn0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXRsYXNzaWFuT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyUHJvcHMgZXh0ZW5kcyBPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJGYWN0b3J5QmFzZVByb3BzIHtcbn1cblxuLyoqXG4gKiBQcm9wcyBmb3Ige0BsaW5rIE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlci51c2luZ0xpbmtlZGlufS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMaW5rZWRpbk9BdXRoMkNyZWRlbnRpYWxQcm92aWRlclByb3BzIGV4dGVuZHMgT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyRmFjdG9yeUJhc2VQcm9wcyB7XG59XG5cbi8qKlxuICogUHJvcHMgZm9yIHtAbGluayBPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXIudXNpbmdGYWNlYm9va30uXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmVkcm9jay1hZ2VudGNvcmUvbGF0ZXN0L2Rldmd1aWRlL2lkZW50aXR5LWlkcC1mYWNlYm9vay5odG1sXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmFjZWJvb2tPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJQcm9wcyBleHRlbmRzIE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlckZhY3RvcnlCYXNlUHJvcHMge1xufVxuXG4vKipcbiAqIFByb3BzIGZvciB7QGxpbmsgT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyLnVzaW5nWH0uXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmVkcm9jay1hZ2VudGNvcmUvbGF0ZXN0L2Rldmd1aWRlL2lkZW50aXR5LWlkcC14Lmh0bWxcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBYT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyUHJvcHMgZXh0ZW5kcyBPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJGYWN0b3J5QmFzZVByb3BzIHtcbn1cblxuLyoqXG4gKiBQcm9wcyBmb3Ige0BsaW5rIE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlci51c2luZ1lhbmRleH0uXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmVkcm9jay1hZ2VudGNvcmUvbGF0ZXN0L2Rldmd1aWRlL2lkZW50aXR5LWlkcC15YW5kZXguaHRtbFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFlhbmRleE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlclByb3BzIGV4dGVuZHMgT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyRmFjdG9yeUJhc2VQcm9wcyB7XG59XG5cbi8qKlxuICogUHJvcHMgZm9yIHtAbGluayBPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXIudXNpbmdSZWRkaXR9LlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JlZHJvY2stYWdlbnRjb3JlL2xhdGVzdC9kZXZndWlkZS9pZGVudGl0eS1pZHAtcmVkZGl0Lmh0bWxcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWRkaXRPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJQcm9wcyBleHRlbmRzIE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlckZhY3RvcnlCYXNlUHJvcHMge1xufVxuXG4vKipcbiAqIFByb3BzIGZvciB7QGxpbmsgT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyLnVzaW5nWm9vbX0uXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmVkcm9jay1hZ2VudGNvcmUvbGF0ZXN0L2Rldmd1aWRlL2lkZW50aXR5LWlkcC16b29tLmh0bWxcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBab29tT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyUHJvcHMgZXh0ZW5kcyBPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJGYWN0b3J5QmFzZVByb3BzIHtcbn1cblxuLyoqXG4gKiBQcm9wcyBmb3Ige0BsaW5rIE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlci51c2luZ1R3aXRjaH0uXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmVkcm9jay1hZ2VudGNvcmUvbGF0ZXN0L2Rldmd1aWRlL2lkZW50aXR5LWlkcC10d2l0Y2guaHRtbFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFR3aXRjaE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlclByb3BzIGV4dGVuZHMgT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyRmFjdG9yeUJhc2VQcm9wcyB7XG59XG5cbi8qKlxuICogUHJvcHMgZm9yIHtAbGluayBPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXIudXNpbmdTcG90aWZ5fS5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iZWRyb2NrLWFnZW50Y29yZS9sYXRlc3QvZGV2Z3VpZGUvaWRlbnRpdHktaWRwLXNwb3RpZnkuaHRtbFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNwb3RpZnlPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJQcm9wcyBleHRlbmRzIE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlckZhY3RvcnlCYXNlUHJvcHMge1xufVxuXG4vKipcbiAqIFByb3BzIGZvciB7QGxpbmsgT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyLnVzaW5nRHJvcGJveH0uXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmVkcm9jay1hZ2VudGNvcmUvbGF0ZXN0L2Rldmd1aWRlL2lkZW50aXR5LWlkcC1kcm9wYm94Lmh0bWxcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEcm9wYm94T0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyUHJvcHMgZXh0ZW5kcyBPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJGYWN0b3J5QmFzZVByb3BzIHtcbn1cblxuLyoqXG4gKiBQcm9wcyBmb3Ige0BsaW5rIE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlci51c2luZ05vdGlvbn0uXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmVkcm9jay1hZ2VudGNvcmUvbGF0ZXN0L2Rldmd1aWRlL2lkZW50aXR5LWlkcC1ub3Rpb24uaHRtbFxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5vdGlvbk9BdXRoMkNyZWRlbnRpYWxQcm92aWRlclByb3BzIGV4dGVuZHMgT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyRmFjdG9yeUJhc2VQcm9wcyB7XG59XG5cbi8qKlxuICogUHJvcHMgZm9yIHtAbGluayBPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXIudXNpbmdIdWJzcG90fS5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iZWRyb2NrLWFnZW50Y29yZS9sYXRlc3QvZGV2Z3VpZGUvaWRlbnRpdHktaWRwLWh1YnNwb3QuaHRtbFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEh1YnNwb3RPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJQcm9wcyBleHRlbmRzIE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlckZhY3RvcnlCYXNlUHJvcHMge1xufVxuXG4vKipcbiAqIE9wdGlvbmFsIHRlbmFudCBPQXV0aCBlbmRwb2ludHMgZm9yIElkUHMgdGhhdCB1c2UgQ2xvdWRGb3JtYXRpb24gYEluY2x1ZGVkT2F1dGgyUHJvdmlkZXJDb25maWdgXG4gKiB3aXRoIGlzc3VlciBhbmQvb3IgZW5kcG9pbnRzIHBlciB0aGUgSWRQ4oCZcyBvdXRib3VuZCBkb2N1bWVudGF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEluY2x1ZGVkT2F1dGgyVGVuYW50RW5kcG9pbnRzIHtcbiAgLyoqXG4gICAqIE9BdXRoMiBhdXRob3JpemF0aW9uIGVuZHBvaW50IGZvciB5b3VyIHRlbmFudC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBub3Qgc3BlY2lmaWVkOyB1c2Ugd2hlbiB5b3VyIElkUCByZXF1aXJlcyBhbiBleHBsaWNpdCBlbmRwb2ludFxuICAgKi9cbiAgcmVhZG9ubHkgYXV0aG9yaXphdGlvbkVuZHBvaW50Pzogc3RyaW5nO1xuICAvKipcbiAgICogVG9rZW4gaXNzdWVyIFVSTCBmb3IgeW91ciB0ZW5hbnQgKG9mdGVuIHRoZSBJZFAgYmFzZSBvciBpc3N1ZXIgVVJJKS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBub3Qgc3BlY2lmaWVkOyB1c2Ugd2hlbiB5b3VyIElkUCByZXF1aXJlcyBhbiBleHBsaWNpdCBpc3N1ZXJcbiAgICovXG4gIHJlYWRvbmx5IGlzc3Vlcj86IHN0cmluZztcbiAgLyoqXG4gICAqIE9BdXRoMiB0b2tlbiBlbmRwb2ludCBmb3IgeW91ciB0ZW5hbnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm90IHNwZWNpZmllZDsgdXNlIHdoZW4geW91ciBJZFAgcmVxdWlyZXMgYW4gZXhwbGljaXQgZW5kcG9pbnRcbiAgICovXG4gIHJlYWRvbmx5IHRva2VuRW5kcG9pbnQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUHJvcHMgZm9yIGBJbmNsdWRlZE9hdXRoMlByb3ZpZGVyQ29uZmlnYCBJZFBzIHdob3NlIFtvdXRib3VuZCBkb2N1bWVudGF0aW9uXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmVkcm9jay1hZ2VudGNvcmUvbGF0ZXN0L2Rldmd1aWRlL2lkZW50aXR5LWlkcHMuaHRtbClcbiAqIHJlcXVpcmVzIGBpc3N1ZXJgLCBgYXV0aG9yaXphdGlvbkVuZHBvaW50YCwgYW5kL29yIGB0b2tlbkVuZHBvaW50YCAoZm9yIGV4YW1wbGUgT2t0YSwgQXV0aDAsIEFtYXpvbiBDb2duaXRvLCBPbmVMb2dpbixcbiAqIFBpbmdPbmUsIEN5YmVyQXJrLCBGdXNpb25BdXRoKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbmNsdWRlZE9hdXRoMlRlbmFudENyZWRlbnRpYWxQcm92aWRlclByb3BzIGV4dGVuZHMgT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyRmFjdG9yeUJhc2VQcm9wcywgSW5jbHVkZWRPYXV0aDJUZW5hbnRFbmRwb2ludHMge1xufVxuXG4vKipcbiAqIFN0YXRpYyBPQXV0aDIgYXV0aG9yaXphdGlvbiBzZXJ2ZXIgbWV0YWRhdGEgZm9yIGN1c3RvbSBjcmVkZW50aWFsIHByb3ZpZGVycy5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM4NDE0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT0F1dGgyQXV0aG9yaXphdGlvblNlcnZlck1ldGFkYXRhIHtcbiAgLyoqXG4gICAqIFRoZSBhdXRob3JpemF0aW9uIGVuZHBvaW50IFVSTC5cbiAgICovXG4gIHJlYWRvbmx5IGF1dGhvcml6YXRpb25FbmRwb2ludDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgaXNzdWVyIFVSTCBmb3IgdGhlIE9BdXRoMiBhdXRob3JpemF0aW9uIHNlcnZlci5cbiAgICovXG4gIHJlYWRvbmx5IGlzc3Vlcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdG9rZW4gZW5kcG9pbnQgVVJMLlxuICAgKi9cbiAgcmVhZG9ubHkgdG9rZW5FbmRwb2ludDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc3VwcG9ydGVkIHJlc3BvbnNlIHR5cGVzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vdCBzcGVjaWZpZWRcbiAgICovXG4gIHJlYWRvbmx5IHJlc3BvbnNlVHlwZXM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBQcm9wcyBmb3Ige0BsaW5rIE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlci51c2luZ0N1c3RvbX0uXG4gKlxuICogU2V0IGV4YWN0bHkgb25lIG9mIHtAbGluayBkaXNjb3ZlcnlVcmx9IChPSURDIGRpc2NvdmVyeSBkb2N1bWVudCkgb3Ige0BsaW5rIGF1dGhvcml6YXRpb25TZXJ2ZXJNZXRhZGF0YX1cbiAqIChzdGF0aWMgT0F1dGgyIHNlcnZlciBtZXRhZGF0YSkuIERvIG5vdCBwYXNzIGJvdGguXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3VzdG9tT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyUHJvcHMgZXh0ZW5kcyBPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJGYWN0b3J5QmFzZVByb3BzIHtcbiAgLyoqXG4gICAqIE9JREMvT0F1dGgyIGRpc2NvdmVyeSBkb2N1bWVudCBVUkwgZm9yIGR5bmFtaWMgaW50ZWdyYXRpb24gd2l0aCB0aGUgaWRlbnRpdHkgcHJvdmlkZXIuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm90IHVzZWQgd2hlbiB7QGxpbmsgYXV0aG9yaXphdGlvblNlcnZlck1ldGFkYXRhfSBpcyBzZXRcbiAgICovXG4gIHJlYWRvbmx5IGRpc2NvdmVyeVVybD86IHN0cmluZztcbiAgLyoqXG4gICAqIEF1dGhvcml6YXRpb24gc2VydmVyIG1ldGFkYXRhIChpc3N1ZXIsIGF1dGhvcml6YXRpb24gYW5kIHRva2VuIGVuZHBvaW50cykgd2hlbiBub3QgdXNpbmcgYSBkaXNjb3ZlcnkgVVJMLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vdCB1c2VkIHdoZW4ge0BsaW5rIGRpc2NvdmVyeVVybH0gaXMgc2V0XG4gICAqL1xuICByZWFkb25seSBhdXRob3JpemF0aW9uU2VydmVyTWV0YWRhdGE/OiBPQXV0aDJBdXRob3JpemF0aW9uU2VydmVyTWV0YWRhdGE7XG59XG5cbi8qKlxuICogTG93LWxldmVsIHByb3BlcnRpZXMgd2hlbiB5b3UgbmVlZCBmdWxsIGNvbnRyb2wgKHByZWZlciB7QGxpbmsgT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyLnVzaW5nU2xhY2t9IGFuZCBvdGhlciBmYWN0b3JpZXMpLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlclByb3BzIHtcbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIGNyZWRlbnRpYWwgcHJvdmlkZXIuXG4gICAqXG4gICAqIEBkZWZhdWx0IGEgbmFtZSBnZW5lcmF0ZWQgYnkgQ0RLXG4gICAqL1xuICByZWFkb25seSBvQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPQXV0aDIgdmVuZG9yIHN0cmluZyBmb3IgQ2xvdWRGb3JtYXRpb24gYENyZWRlbnRpYWxQcm92aWRlclZlbmRvcmAuXG4gICAqL1xuICByZWFkb25seSBjcmVkZW50aWFsUHJvdmlkZXJWZW5kb3I6IHN0cmluZztcblxuICAvKipcbiAgICogT0F1dGgyIHByb3ZpZGVyIGNvbmZpZ3VyYXRpb24gcGFzc2VkIHRocm91Z2ggdG8gYE9hdXRoMlByb3ZpZGVyQ29uZmlnSW5wdXRgLlxuICAgKi9cbiAgcmVhZG9ubHkgb2F1dGgyUHJvdmlkZXJDb25maWdJbnB1dDogQ2ZuT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyLk9hdXRoMlByb3ZpZGVyQ29uZmlnSW5wdXRQcm9wZXJ0eTtcblxuICAvKipcbiAgICogVGFncyBmb3IgdGhpcyBjcmVkZW50aWFsIHByb3ZpZGVyLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIHRhZ3NcbiAgICovXG4gIHJlYWRvbmx5IHRhZ3M/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xufVxuXG4vKipcbiAqIEF0dHJpYnV0ZXMgZm9yIGltcG9ydGluZyBhbiBleGlzdGluZyBPQXV0aDIgY3JlZGVudGlhbCBwcm92aWRlci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJBdHRyaWJ1dGVzIHtcbiAgLyoqXG4gICAqIEFSTiBvZiB0aGUgY3JlZGVudGlhbCBwcm92aWRlci5cbiAgICovXG4gIHJlYWRvbmx5IGNyZWRlbnRpYWxQcm92aWRlckFybjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBWZW5kb3Igc3RyaW5nIGZvciB0aGlzIHByb3ZpZGVyLlxuICAgKi9cbiAgcmVhZG9ubHkgY3JlZGVudGlhbFByb3ZpZGVyVmVuZG9yOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFSTiBvZiB0aGUgU2VjcmV0cyBNYW5hZ2VyIHNlY3JldCBmb3IgT0F1dGgyIGNsaWVudCBjcmVkZW50aWFscywgaWYga25vd24uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm90IHNldDsgcmVxdWlyZWQgZm9yIHtAbGluayBPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXIuYmluZEZvckdhdGV3YXlPQXV0aFRhcmdldH0gb24gaW1wb3J0ZWQgcHJvdmlkZXJzXG4gICAqL1xuICByZWFkb25seSBjbGllbnRTZWNyZXRBcm4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIFVSTCBmcm9tIHRoZSBkZXBsb3llZCBwcm92aWRlciwgaWYga25vd24uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm90IHNldFxuICAgKi9cbiAgcmVhZG9ubHkgY2FsbGJhY2tVcmw/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFJlc291cmNlIGNyZWF0aW9uIHRpbWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm90IHNldFxuICAgKi9cbiAgcmVhZG9ubHkgY3JlYXRlZFRpbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFJlc291cmNlIGxhc3QtdXBkYXRlZCB0aW1lLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vdCBzZXRcbiAgICovXG4gIHJlYWRvbmx5IGxhc3RVcGRhdGVkVGltZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gb2F1dGgyQXV0aG9yaXphdGlvblNlcnZlck1ldGFkYXRhQ29udGFpbnNVbnJlc29sdmVkKFxuICBtZXRhOiBPQXV0aDJBdXRob3JpemF0aW9uU2VydmVyTWV0YWRhdGEsXG4pOiBib29sZWFuIHtcbiAgZm9yIChjb25zdCB2YWx1ZSBvZiBPYmplY3QudmFsdWVzKG1ldGEpKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgVG9rZW4uaXNVbnJlc29sdmVkKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHZhbHVlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gJ3N0cmluZycgJiYgVG9rZW4uaXNVbnJlc29sdmVkKGl0ZW0pKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBhc3NlcnRDdXN0b21PQXV0aDJEaXNjb3ZlcnlYb3Ioc2NvcGU6IENvbnN0cnVjdCwgcHJvcHM6IEN1c3RvbU9BdXRoMkNyZWRlbnRpYWxQcm92aWRlclByb3BzKTogdm9pZCB7XG4gIGNvbnN0IGRpc2NvdmVyeVVybCA9IHByb3BzLmRpc2NvdmVyeVVybDtcbiAgY29uc3QgbWV0YWRhdGEgPSBwcm9wcy5hdXRob3JpemF0aW9uU2VydmVyTWV0YWRhdGE7XG5cbiAgY29uc3QgaGFzRGlzY292ZXJ5VXJsID0gZGlzY292ZXJ5VXJsICE9PSB1bmRlZmluZWQgJiYgZGlzY292ZXJ5VXJsICE9PSAnJztcbiAgY29uc3QgaGFzTWV0YWRhdGEgPSBtZXRhZGF0YSAhPT0gdW5kZWZpbmVkO1xuXG4gIC8vIFwiQm90aCBwcm92aWRlZFwiIGlzIGFsd2F5cyBhbiBlcnJvciwgZXZlbiB3aGVuIHZhbHVlcyBjb250YWluIFRva2Vucy5cbiAgaWYgKGhhc0Rpc2NvdmVyeVVybCAmJiBoYXNNZXRhZGF0YSkge1xuICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICBsaXRgQ3VzdG9tT0F1dGgyRGlzY292ZXJ5RXhjbHVzaXZlYCxcbiAgICAgICdQcm92aWRlIGVpdGhlciBkaXNjb3ZlcnlVcmwgb3IgYXV0aG9yaXphdGlvblNlcnZlck1ldGFkYXRhIGZvciBhIGN1c3RvbSBPQXV0aDIgY3JlZGVudGlhbCBwcm92aWRlciwgbm90IGJvdGguJyxcbiAgICAgIHNjb3BlLFxuICAgICk7XG4gIH1cblxuICAvLyBCYWlsIG91dCBlYXJseSB3aGVuIGVpdGhlciB2YWx1ZSBpcyBhIFRva2VuIOKAlCB3ZSBjYW5ub3QgdmFsaWRhdGUgYXQgc3ludGggdGltZS5cbiAgY29uc3QgZGlzY292ZXJ5VW5yZXNvbHZlZCA9IGRpc2NvdmVyeVVybCAhPT0gdW5kZWZpbmVkICYmIFRva2VuLmlzVW5yZXNvbHZlZChkaXNjb3ZlcnlVcmwpO1xuICBjb25zdCBtZXRhZGF0YVVucmVzb2x2ZWQgPSBtZXRhZGF0YSAhPT0gdW5kZWZpbmVkICYmIG9hdXRoMkF1dGhvcml6YXRpb25TZXJ2ZXJNZXRhZGF0YUNvbnRhaW5zVW5yZXNvbHZlZChtZXRhZGF0YSk7XG5cbiAgaWYgKGRpc2NvdmVyeVVucmVzb2x2ZWQgfHwgbWV0YWRhdGFVbnJlc29sdmVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKCFoYXNEaXNjb3ZlcnlVcmwgJiYgIWhhc01ldGFkYXRhKSB7XG4gICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgIGxpdGBDdXN0b21PQXV0aDJEaXNjb3ZlcnlSZXF1aXJlZGAsXG4gICAgICAnUHJvdmlkZSBlaXRoZXIgZGlzY292ZXJ5VXJsIG9yIGF1dGhvcml6YXRpb25TZXJ2ZXJNZXRhZGF0YSBmb3IgYSBjdXN0b20gT0F1dGgyIGNyZWRlbnRpYWwgcHJvdmlkZXIuJyxcbiAgICAgIHNjb3BlLFxuICAgICk7XG4gIH1cbn1cblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgQWJzdHJhY3QgYmFzZVxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5hYnN0cmFjdCBjbGFzcyBPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJCYXNlIGV4dGVuZHMgUmVzb3VyY2UgaW1wbGVtZW50cyBJT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyIHtcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGNyZWRlbnRpYWxQcm92aWRlckFybjogc3RyaW5nO1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgY3JlZGVudGlhbFByb3ZpZGVyVmVuZG9yOiBzdHJpbmc7XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBjYWxsYmFja1VybD86IHN0cmluZztcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGNsaWVudFNlY3JldEFybj86IHN0cmluZztcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGNyZWF0ZWRUaW1lPzogc3RyaW5nO1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgbGFzdFVwZGF0ZWRUaW1lPzogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgZ3JhbnRQcmluY2lwYWw6IGlhbS5JUHJpbmNpcGFsID0gbmV3IGlhbS5Vbmtub3duUHJpbmNpcGFsKHsgcmVzb3VyY2U6IHRoaXMgfSk7XG5cbiAgcHVibGljIGdldCBvQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJSZWYoKTogT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyUmVmZXJlbmNlIHtcbiAgICByZXR1cm4geyBjcmVkZW50aWFsUHJvdmlkZXJBcm46IHRoaXMuY3JlZGVudGlhbFByb3ZpZGVyQXJuIH07XG4gIH1cblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wcz86IFJlc291cmNlUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBbZGlzYWJsZS1hd3NsaW50Om5vLWdyYW50c11cbiAgICovXG4gIHB1YmxpYyBncmFudChncmFudGVlOiBpYW0uSUdyYW50YWJsZSwgLi4uYWN0aW9uczogc3RyaW5nW10pOiBpYW0uR3JhbnQge1xuICAgIHJldHVybiBpYW0uR3JhbnQuYWRkVG9QcmluY2lwYWwoe1xuICAgICAgZ3JhbnRlZSxcbiAgICAgIGFjdGlvbnMsXG4gICAgICByZXNvdXJjZUFybnM6IGJ1aWxkSWRlbnRpdHlSZXNvdXJjZUFybnModGhpcywgdGhpcy5jcmVkZW50aWFsUHJvdmlkZXJBcm4sIFRPS0VOX1ZBVUxUX09BVVRIMl9QQVJFTlRfUkVTT1VSQ0VTKSxcbiAgICAgIHNjb3BlOiB0aGlzLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFtkaXNhYmxlLWF3c2xpbnQ6bm8tZ3JhbnRzXVxuICAgKi9cbiAgcHVibGljIGdyYW50UmVhZChncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudCB7XG4gICAgcmV0dXJuIGdyYW50UmVhZFdpdGhMaXN0KFxuICAgICAgdGhpcyxcbiAgICAgIGdyYW50ZWUsXG4gICAgICB0aGlzLmNyZWRlbnRpYWxQcm92aWRlckFybixcbiAgICAgIE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlcklkZW50aXR5UGVybXMuUkVBRF9QRVJNUyxcbiAgICAgIE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlcklkZW50aXR5UGVybXMuTElTVF9QRVJNUyxcbiAgICAgIFRPS0VOX1ZBVUxUX09BVVRIMl9QQVJFTlRfUkVTT1VSQ0VTLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogW2Rpc2FibGUtYXdzbGludDpuby1ncmFudHNdXG4gICAqL1xuICBwdWJsaWMgZ3JhbnRBZG1pbihncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudCB7XG4gICAgY29uc3QgYmVkcm9jayA9IHRoaXMuZ3JhbnQoZ3JhbnRlZSwgLi4uT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVySWRlbnRpdHlQZXJtcy5BRE1JTl9QRVJNUyk7XG4gICAgY29uc3Qgc2VjcmV0ID0gZ3JhbnRDcmVkZW50aWFsU2VjcmV0KFxuICAgICAgdGhpcyxcbiAgICAgIGdyYW50ZWUsXG4gICAgICB0aGlzLmNsaWVudFNlY3JldEFybixcbiAgICAgIFsuLi5UT0tFTl9WQVVMVF9DUkVERU5USUFMX1NFQ1JFVF9XUklURV9QRVJNU10sXG4gICAgKTtcbiAgICByZXR1cm4gc2VjcmV0ID8gYmVkcm9jay5jb21iaW5lKHNlY3JldCkgOiBiZWRyb2NrO1xuICB9XG5cbiAgLyoqXG4gICAqIFtkaXNhYmxlLWF3c2xpbnQ6bm8tZ3JhbnRzXVxuICAgKi9cbiAgcHVibGljIGdyYW50VXNlKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50IHtcbiAgICBjb25zdCBiZWRyb2NrID0gaWFtLkdyYW50LmFkZFRvUHJpbmNpcGFsKHtcbiAgICAgIGdyYW50ZWUsXG4gICAgICBhY3Rpb25zOiBbLi4uT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVySWRlbnRpdHlQZXJtcy5VU0VfUEVSTVNdLFxuICAgICAgcmVzb3VyY2VBcm5zOiBidWlsZElkZW50aXR5UmVzb3VyY2VBcm5zKFxuICAgICAgICB0aGlzLCB0aGlzLmNyZWRlbnRpYWxQcm92aWRlckFybiwgWy4uLlRPS0VOX1ZBVUxUX09BVVRIMl9QQVJFTlRfUkVTT1VSQ0VTLCAuLi5XT1JLTE9BRF9JREVOVElUWV9VU0VfUkVTT1VSQ0VTXSxcbiAgICAgICksXG4gICAgICBzY29wZTogdGhpcyxcbiAgICB9KTtcbiAgICBjb25zdCBzZWNyZXQgPSBncmFudENyZWRlbnRpYWxTZWNyZXQoXG4gICAgICB0aGlzLFxuICAgICAgZ3JhbnRlZSxcbiAgICAgIHRoaXMuY2xpZW50U2VjcmV0QXJuLFxuICAgICAgWy4uLlRPS0VOX1ZBVUxUX0NSRURFTlRJQUxfU0VDUkVUX1JFQURfUEVSTVNdLFxuICAgICk7XG4gICAgcmV0dXJuIHNlY3JldCA/IGJlZHJvY2suY29tYmluZShzZWNyZXQpIDogYmVkcm9jaztcbiAgfVxuXG4gIC8qKlxuICAgKiBbZGlzYWJsZS1hd3NsaW50Om5vLWdyYW50c11cbiAgICovXG4gIHB1YmxpYyBncmFudEZ1bGxBY2Nlc3MoZ3JhbnRlZTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnQge1xuICAgIGNvbnN0IGJlZHJvY2sgPSBpYW0uR3JhbnQuYWRkVG9QcmluY2lwYWwoe1xuICAgICAgZ3JhbnRlZSxcbiAgICAgIGFjdGlvbnM6IFsuLi5PQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJJZGVudGl0eVBlcm1zLkZVTExfQUNDRVNTX1BFUk1TXSxcbiAgICAgIHJlc291cmNlQXJuczogYnVpbGRJZGVudGl0eVJlc291cmNlQXJucyhcbiAgICAgICAgdGhpcywgdGhpcy5jcmVkZW50aWFsUHJvdmlkZXJBcm4sIFsuLi5UT0tFTl9WQVVMVF9PQVVUSDJfUEFSRU5UX1JFU09VUkNFUywgLi4uV09SS0xPQURfSURFTlRJVFlfVVNFX1JFU09VUkNFU10sXG4gICAgICApLFxuICAgICAgc2NvcGU6IHRoaXMsXG4gICAgfSk7XG4gICAgY29uc3Qgc2VjcmV0ID0gZ3JhbnRDcmVkZW50aWFsU2VjcmV0KFxuICAgICAgdGhpcyxcbiAgICAgIGdyYW50ZWUsXG4gICAgICB0aGlzLmNsaWVudFNlY3JldEFybixcbiAgICAgIFsuLi5UT0tFTl9WQVVMVF9DUkVERU5USUFMX1NFQ1JFVF9SRUFEX1BFUk1TLCAuLi5UT0tFTl9WQVVMVF9DUkVERU5USUFMX1NFQ1JFVF9XUklURV9QRVJNU10sXG4gICAgKTtcbiAgICByZXR1cm4gc2VjcmV0ID8gYmVkcm9jay5jb21iaW5lKHNlY3JldCkgOiBiZWRyb2NrO1xuICB9XG5cbiAgcHVibGljIGFic3RyYWN0IGJpbmRGb3JHYXRld2F5T0F1dGhUYXJnZXQoXG4gICAgc2NvcGVzOiBzdHJpbmdbXSxcbiAgICBjdXN0b21QYXJhbWV0ZXJzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSxcbiAgKTogR2F0ZXdheU9BdXRoMklkZW50aXR5QmluZGluZztcbn1cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gbmV3T0F1dGgyV2l0aEluY2x1ZGVkQ2xpZW50Q3JlZGVudGlhbHNPbmx5KFxuICBzY29wZTogQ29uc3RydWN0LFxuICBpZDogc3RyaW5nLFxuICB2ZW5kb3I6IE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlclZlbmRvcixcbiAgcHJvcHM6IE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlckZhY3RvcnlCYXNlUHJvcHMsXG4pOiBPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXIge1xuICByZXR1cm4gbmV3IE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlcihzY29wZSwgaWQsIHtcbiAgICBvQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJOYW1lOiBwcm9wcy5vQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJOYW1lLFxuICAgIHRhZ3M6IHByb3BzLnRhZ3MsXG4gICAgY3JlZGVudGlhbFByb3ZpZGVyVmVuZG9yOiB2ZW5kb3IsXG4gICAgb2F1dGgyUHJvdmlkZXJDb25maWdJbnB1dDoge1xuICAgICAgaW5jbHVkZWRPYXV0aDJQcm92aWRlckNvbmZpZzoge1xuICAgICAgICBjbGllbnRJZDogcHJvcHMuY2xpZW50SWQsXG4gICAgICAgIGNsaWVudFNlY3JldDogcHJvcHMuY2xpZW50U2VjcmV0LnVuc2FmZVVud3JhcCgpLFxuICAgICAgfSxcbiAgICB9LFxuICB9KTtcbn1cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gbmV3T0F1dGgyV2l0aEluY2x1ZGVkVGVuYW50KFxuICBzY29wZTogQ29uc3RydWN0LFxuICBpZDogc3RyaW5nLFxuICB2ZW5kb3I6IE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlclZlbmRvcixcbiAgcHJvcHM6IEluY2x1ZGVkT2F1dGgyVGVuYW50Q3JlZGVudGlhbFByb3ZpZGVyUHJvcHMsXG4pOiBPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXIge1xuICByZXR1cm4gbmV3IE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlcihzY29wZSwgaWQsIHtcbiAgICBvQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJOYW1lOiBwcm9wcy5vQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJOYW1lLFxuICAgIHRhZ3M6IHByb3BzLnRhZ3MsXG4gICAgY3JlZGVudGlhbFByb3ZpZGVyVmVuZG9yOiB2ZW5kb3IsXG4gICAgb2F1dGgyUHJvdmlkZXJDb25maWdJbnB1dDoge1xuICAgICAgaW5jbHVkZWRPYXV0aDJQcm92aWRlckNvbmZpZzoge1xuICAgICAgICBjbGllbnRJZDogcHJvcHMuY2xpZW50SWQsXG4gICAgICAgIGNsaWVudFNlY3JldDogcHJvcHMuY2xpZW50U2VjcmV0LnVuc2FmZVVud3JhcCgpLFxuICAgICAgICBhdXRob3JpemF0aW9uRW5kcG9pbnQ6IHByb3BzLmF1dGhvcml6YXRpb25FbmRwb2ludCxcbiAgICAgICAgaXNzdWVyOiBwcm9wcy5pc3N1ZXIsXG4gICAgICAgIHRva2VuRW5kcG9pbnQ6IHByb3BzLnRva2VuRW5kcG9pbnQsXG4gICAgICB9LFxuICAgIH0sXG4gIH0pO1xufVxuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xhc3NcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuLyoqXG4gKiBMMiBjb25zdHJ1Y3QgZm9yIGBBV1M6OkJlZHJvY2tBZ2VudENvcmU6Ok9BdXRoMkNyZWRlbnRpYWxQcm92aWRlcmAuXG4gKlxuICogUHJlZmVyIHRoZSBzdGF0aWMgZmFjdG9yaWVzIChmb3IgZXhhbXBsZSB7QGxpbmsgT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyLnVzaW5nU2xhY2t9KSBzbyB5b3Ugb25seSBwYXNzXG4gKiB0aGUgT0F1dGgyIHNldHRpbmdzIHRoYXQgYXBwbHkgdG8gdGhhdCB2ZW5kb3IuIFRvIGF0dGFjaCB0aGUgaWRlbnRpdHkgdG8gYSBnYXRld2F5IHRhcmdldCwgdXNlXG4gKiB7QGxpbmsgR2F0ZXdheUNyZWRlbnRpYWxQcm92aWRlci5mcm9tT2F1dGhJZGVudGl0eX0gd2l0aCB0aGlzIGNvbnN0cnVjdCwgb3JcbiAqIHtAbGluayBPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXIuYmluZEZvckdhdGV3YXlPQXV0aFRhcmdldH0gd2l0aCB7QGxpbmsgR2F0ZXdheUNyZWRlbnRpYWxQcm92aWRlci5mcm9tT2F1dGhJZGVudGl0eUFybn0uXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtYmVkcm9ja2FnZW50Y29yZS1vYXV0aDJjcmVkZW50aWFscHJvdmlkZXIuaHRtbFxuICogQHJlc291cmNlIEFXUzo6QmVkcm9ja0FnZW50Q29yZTo6T0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyXG4gKi9cbkBwcm9wZXJ0eUluamVjdGFibGVcbmV4cG9ydCBjbGFzcyBPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXIgZXh0ZW5kcyBPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJCYXNlIHtcbiAgLyoqIFVuaXF1ZWx5IGlkZW50aWZpZXMgdGhpcyBjbGFzcy4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQUk9QRVJUWV9JTkpFQ1RJT05fSUQ6IHN0cmluZyA9ICdAYXdzLWNkay5hd3MtYmVkcm9jay1hZ2VudGNvcmUtYWxwaGEuT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyJztcblxuICAvKipcbiAgICogQ3JlYXRlIGEgY3JlZGVudGlhbCBwcm92aWRlciBmb3IgU2xhY2sgT0F1dGgyLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyB1c2luZ1NsYWNrKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBTbGFja09BdXRoMkNyZWRlbnRpYWxQcm92aWRlclByb3BzKTogT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyIHtcbiAgICByZXR1cm4gbmV3IE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlcihzY29wZSwgaWQsIHtcbiAgICAgIG9BdXRoMkNyZWRlbnRpYWxQcm92aWRlck5hbWU6IHByb3BzLm9BdXRoMkNyZWRlbnRpYWxQcm92aWRlck5hbWUsXG4gICAgICB0YWdzOiBwcm9wcy50YWdzLFxuICAgICAgY3JlZGVudGlhbFByb3ZpZGVyVmVuZG9yOiBPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJWZW5kb3IuU0xBQ0ssXG4gICAgICBvYXV0aDJQcm92aWRlckNvbmZpZ0lucHV0OiB7IHNsYWNrT2F1dGgyUHJvdmlkZXJDb25maWc6IHsgY2xpZW50SWQ6IHByb3BzLmNsaWVudElkLCBjbGllbnRTZWNyZXQ6IHByb3BzLmNsaWVudFNlY3JldC51bnNhZmVVbndyYXAoKSB9IH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgY3JlZGVudGlhbCBwcm92aWRlciBmb3IgR2l0SHViIE9BdXRoMi5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgdXNpbmdHaXRodWIoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEdpdGh1Yk9BdXRoMkNyZWRlbnRpYWxQcm92aWRlclByb3BzKTogT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyIHtcbiAgICByZXR1cm4gbmV3IE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlcihzY29wZSwgaWQsIHtcbiAgICAgIG9BdXRoMkNyZWRlbnRpYWxQcm92aWRlck5hbWU6IHByb3BzLm9BdXRoMkNyZWRlbnRpYWxQcm92aWRlck5hbWUsXG4gICAgICB0YWdzOiBwcm9wcy50YWdzLFxuICAgICAgY3JlZGVudGlhbFByb3ZpZGVyVmVuZG9yOiBPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJWZW5kb3IuR0lUSFVCLFxuICAgICAgb2F1dGgyUHJvdmlkZXJDb25maWdJbnB1dDogeyBnaXRodWJPYXV0aDJQcm92aWRlckNvbmZpZzogeyBjbGllbnRJZDogcHJvcHMuY2xpZW50SWQsIGNsaWVudFNlY3JldDogcHJvcHMuY2xpZW50U2VjcmV0LnVuc2FmZVVud3JhcCgpIH0gfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBjcmVkZW50aWFsIHByb3ZpZGVyIGZvciBHb29nbGUgT0F1dGgyLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyB1c2luZ0dvb2dsZShzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogR29vZ2xlT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyUHJvcHMpOiBPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXIge1xuICAgIHJldHVybiBuZXcgT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyKHNjb3BlLCBpZCwge1xuICAgICAgb0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyTmFtZTogcHJvcHMub0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyTmFtZSxcbiAgICAgIHRhZ3M6IHByb3BzLnRhZ3MsXG4gICAgICBjcmVkZW50aWFsUHJvdmlkZXJWZW5kb3I6IE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlclZlbmRvci5HT09HTEUsXG4gICAgICBvYXV0aDJQcm92aWRlckNvbmZpZ0lucHV0OiB7IGdvb2dsZU9hdXRoMlByb3ZpZGVyQ29uZmlnOiB7IGNsaWVudElkOiBwcm9wcy5jbGllbnRJZCwgY2xpZW50U2VjcmV0OiBwcm9wcy5jbGllbnRTZWNyZXQudW5zYWZlVW53cmFwKCkgfSB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGNyZWRlbnRpYWwgcHJvdmlkZXIgZm9yIFNhbGVzZm9yY2UgT0F1dGgyLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyB1c2luZ1NhbGVzZm9yY2Uoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFNhbGVzZm9yY2VPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJQcm9wcyk6IE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlciB7XG4gICAgcmV0dXJuIG5ldyBPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXIoc2NvcGUsIGlkLCB7XG4gICAgICBvQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJOYW1lOiBwcm9wcy5vQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJOYW1lLFxuICAgICAgdGFnczogcHJvcHMudGFncyxcbiAgICAgIGNyZWRlbnRpYWxQcm92aWRlclZlbmRvcjogT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyVmVuZG9yLlNBTEVTRk9SQ0UsXG4gICAgICBvYXV0aDJQcm92aWRlckNvbmZpZ0lucHV0OiB7IHNhbGVzZm9yY2VPYXV0aDJQcm92aWRlckNvbmZpZzogeyBjbGllbnRJZDogcHJvcHMuY2xpZW50SWQsIGNsaWVudFNlY3JldDogcHJvcHMuY2xpZW50U2VjcmV0LnVuc2FmZVVud3JhcCgpIH0gfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBjcmVkZW50aWFsIHByb3ZpZGVyIGZvciBNaWNyb3NvZnQgKEVudHJhIElEKSBPQXV0aDIuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHVzaW5nTWljcm9zb2Z0KHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBNaWNyb3NvZnRPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJQcm9wcyk6IE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlciB7XG4gICAgcmV0dXJuIG5ldyBPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXIoc2NvcGUsIGlkLCB7XG4gICAgICBvQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJOYW1lOiBwcm9wcy5vQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJOYW1lLFxuICAgICAgdGFnczogcHJvcHMudGFncyxcbiAgICAgIGNyZWRlbnRpYWxQcm92aWRlclZlbmRvcjogT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyVmVuZG9yLk1JQ1JPU09GVCxcbiAgICAgIG9hdXRoMlByb3ZpZGVyQ29uZmlnSW5wdXQ6IHtcbiAgICAgICAgbWljcm9zb2Z0T2F1dGgyUHJvdmlkZXJDb25maWc6IHtcbiAgICAgICAgICBjbGllbnRJZDogcHJvcHMuY2xpZW50SWQsXG4gICAgICAgICAgY2xpZW50U2VjcmV0OiBwcm9wcy5jbGllbnRTZWNyZXQudW5zYWZlVW53cmFwKCksXG4gICAgICAgICAgdGVuYW50SWQ6IHByb3BzLnRlbmFudElkLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBjcmVkZW50aWFsIHByb3ZpZGVyIGZvciBBdGxhc3NpYW4gT0F1dGgyLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyB1c2luZ0F0bGFzc2lhbihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQXRsYXNzaWFuT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyUHJvcHMpOiBPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXIge1xuICAgIHJldHVybiBuZXcgT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyKHNjb3BlLCBpZCwge1xuICAgICAgb0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyTmFtZTogcHJvcHMub0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyTmFtZSxcbiAgICAgIHRhZ3M6IHByb3BzLnRhZ3MsXG4gICAgICBjcmVkZW50aWFsUHJvdmlkZXJWZW5kb3I6IE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlclZlbmRvci5BVExBU1NJQU4sXG4gICAgICBvYXV0aDJQcm92aWRlckNvbmZpZ0lucHV0OiB7IGF0bGFzc2lhbk9hdXRoMlByb3ZpZGVyQ29uZmlnOiB7IGNsaWVudElkOiBwcm9wcy5jbGllbnRJZCwgY2xpZW50U2VjcmV0OiBwcm9wcy5jbGllbnRTZWNyZXQudW5zYWZlVW53cmFwKCkgfSB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGNyZWRlbnRpYWwgcHJvdmlkZXIgZm9yIExpbmtlZEluIE9BdXRoMi5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgdXNpbmdMaW5rZWRpbihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogTGlua2VkaW5PQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJQcm9wcyk6IE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlciB7XG4gICAgcmV0dXJuIG5ldyBPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXIoc2NvcGUsIGlkLCB7XG4gICAgICBvQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJOYW1lOiBwcm9wcy5vQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJOYW1lLFxuICAgICAgdGFnczogcHJvcHMudGFncyxcbiAgICAgIGNyZWRlbnRpYWxQcm92aWRlclZlbmRvcjogT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyVmVuZG9yLkxJTktFRElOLFxuICAgICAgb2F1dGgyUHJvdmlkZXJDb25maWdJbnB1dDogeyBsaW5rZWRpbk9hdXRoMlByb3ZpZGVyQ29uZmlnOiB7IGNsaWVudElkOiBwcm9wcy5jbGllbnRJZCwgY2xpZW50U2VjcmV0OiBwcm9wcy5jbGllbnRTZWNyZXQudW5zYWZlVW53cmFwKCkgfSB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGNyZWRlbnRpYWwgcHJvdmlkZXIgZm9yIE9rdGEgT0F1dGgyIChgSW5jbHVkZWRPYXV0aDJQcm92aWRlckNvbmZpZ2ApLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iZWRyb2NrLWFnZW50Y29yZS9sYXRlc3QvZGV2Z3VpZGUvaWRlbnRpdHktaWRwLW9rdGEuaHRtbFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyB1c2luZ09rdGEoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEluY2x1ZGVkT2F1dGgyVGVuYW50Q3JlZGVudGlhbFByb3ZpZGVyUHJvcHMpOiBPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXIge1xuICAgIHJldHVybiBuZXdPQXV0aDJXaXRoSW5jbHVkZWRUZW5hbnQoc2NvcGUsIGlkLCBPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJWZW5kb3IuT0tUQSwgcHJvcHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGNyZWRlbnRpYWwgcHJvdmlkZXIgZm9yIE9uZUxvZ2luIE9BdXRoMiAoYEluY2x1ZGVkT2F1dGgyUHJvdmlkZXJDb25maWdgKS5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmVkcm9jay1hZ2VudGNvcmUvbGF0ZXN0L2Rldmd1aWRlL2lkZW50aXR5LWlkcC1vbmVsb2dpbi5odG1sXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHVzaW5nT25lTG9naW4oc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEluY2x1ZGVkT2F1dGgyVGVuYW50Q3JlZGVudGlhbFByb3ZpZGVyUHJvcHMpOiBPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXIge1xuICAgIHJldHVybiBuZXdPQXV0aDJXaXRoSW5jbHVkZWRUZW5hbnQoc2NvcGUsIGlkLCBPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJWZW5kb3IuT05FX0xPR0lOLCBwcm9wcyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgY3JlZGVudGlhbCBwcm92aWRlciBmb3IgUGluZ09uZSBPQXV0aDIgKGBJbmNsdWRlZE9hdXRoMlByb3ZpZGVyQ29uZmlnYCkuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JlZHJvY2stYWdlbnRjb3JlL2xhdGVzdC9kZXZndWlkZS9pZGVudGl0eS1pZHAtcGluZ2lkZW50aXR5Lmh0bWxcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgdXNpbmdQaW5nT25lKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBJbmNsdWRlZE9hdXRoMlRlbmFudENyZWRlbnRpYWxQcm92aWRlclByb3BzKTogT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyIHtcbiAgICByZXR1cm4gbmV3T0F1dGgyV2l0aEluY2x1ZGVkVGVuYW50KHNjb3BlLCBpZCwgT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyVmVuZG9yLlBJTkdfT05FLCBwcm9wcyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgY3JlZGVudGlhbCBwcm92aWRlciBmb3IgWCAoVHdpdHRlcikgT0F1dGgyIChgSW5jbHVkZWRPYXV0aDJQcm92aWRlckNvbmZpZ2ApLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iZWRyb2NrLWFnZW50Y29yZS9sYXRlc3QvZGV2Z3VpZGUvaWRlbnRpdHktaWRwLXguaHRtbFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyB1c2luZ1goc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFhPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJQcm9wcyk6IE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlciB7XG4gICAgcmV0dXJuIG5ld09BdXRoMldpdGhJbmNsdWRlZENsaWVudENyZWRlbnRpYWxzT25seShzY29wZSwgaWQsIE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlclZlbmRvci5YLCBwcm9wcyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgY3JlZGVudGlhbCBwcm92aWRlciBmb3IgRmFjZWJvb2sgT0F1dGgyIChgSW5jbHVkZWRPYXV0aDJQcm92aWRlckNvbmZpZ2ApLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iZWRyb2NrLWFnZW50Y29yZS9sYXRlc3QvZGV2Z3VpZGUvaWRlbnRpdHktaWRwLWZhY2Vib29rLmh0bWxcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgdXNpbmdGYWNlYm9vayhzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogRmFjZWJvb2tPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJQcm9wcyk6IE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlciB7XG4gICAgcmV0dXJuIG5ld09BdXRoMldpdGhJbmNsdWRlZENsaWVudENyZWRlbnRpYWxzT25seShzY29wZSwgaWQsIE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlclZlbmRvci5GQUNFQk9PSywgcHJvcHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGNyZWRlbnRpYWwgcHJvdmlkZXIgZm9yIFlhbmRleCBPQXV0aDIgKGBJbmNsdWRlZE9hdXRoMlByb3ZpZGVyQ29uZmlnYCkuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JlZHJvY2stYWdlbnRjb3JlL2xhdGVzdC9kZXZndWlkZS9pZGVudGl0eS1pZHAteWFuZGV4Lmh0bWxcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgdXNpbmdZYW5kZXgoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFlhbmRleE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlclByb3BzKTogT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyIHtcbiAgICByZXR1cm4gbmV3T0F1dGgyV2l0aEluY2x1ZGVkQ2xpZW50Q3JlZGVudGlhbHNPbmx5KHNjb3BlLCBpZCwgT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyVmVuZG9yLllBTkRFWCwgcHJvcHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGNyZWRlbnRpYWwgcHJvdmlkZXIgZm9yIFJlZGRpdCBPQXV0aDIgKGBJbmNsdWRlZE9hdXRoMlByb3ZpZGVyQ29uZmlnYCkuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JlZHJvY2stYWdlbnRjb3JlL2xhdGVzdC9kZXZndWlkZS9pZGVudGl0eS1pZHAtcmVkZGl0Lmh0bWxcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgdXNpbmdSZWRkaXQoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFJlZGRpdE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlclByb3BzKTogT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyIHtcbiAgICByZXR1cm4gbmV3T0F1dGgyV2l0aEluY2x1ZGVkQ2xpZW50Q3JlZGVudGlhbHNPbmx5KHNjb3BlLCBpZCwgT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyVmVuZG9yLlJFRERJVCwgcHJvcHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGNyZWRlbnRpYWwgcHJvdmlkZXIgZm9yIFpvb20gT0F1dGgyIChgSW5jbHVkZWRPYXV0aDJQcm92aWRlckNvbmZpZ2ApLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iZWRyb2NrLWFnZW50Y29yZS9sYXRlc3QvZGV2Z3VpZGUvaWRlbnRpdHktaWRwLXpvb20uaHRtbFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyB1c2luZ1pvb20oc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFpvb21PQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJQcm9wcyk6IE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlciB7XG4gICAgcmV0dXJuIG5ld09BdXRoMldpdGhJbmNsdWRlZENsaWVudENyZWRlbnRpYWxzT25seShzY29wZSwgaWQsIE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlclZlbmRvci5aT09NLCBwcm9wcyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgY3JlZGVudGlhbCBwcm92aWRlciBmb3IgVHdpdGNoIE9BdXRoMiAoYEluY2x1ZGVkT2F1dGgyUHJvdmlkZXJDb25maWdgKS5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmVkcm9jay1hZ2VudGNvcmUvbGF0ZXN0L2Rldmd1aWRlL2lkZW50aXR5LWlkcC10d2l0Y2guaHRtbFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyB1c2luZ1R3aXRjaChzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogVHdpdGNoT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyUHJvcHMpOiBPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXIge1xuICAgIHJldHVybiBuZXdPQXV0aDJXaXRoSW5jbHVkZWRDbGllbnRDcmVkZW50aWFsc09ubHkoc2NvcGUsIGlkLCBPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJWZW5kb3IuVFdJVENILCBwcm9wcyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgY3JlZGVudGlhbCBwcm92aWRlciBmb3IgU3BvdGlmeSBPQXV0aDIgKGBJbmNsdWRlZE9hdXRoMlByb3ZpZGVyQ29uZmlnYCkuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JlZHJvY2stYWdlbnRjb3JlL2xhdGVzdC9kZXZndWlkZS9pZGVudGl0eS1pZHAtc3BvdGlmeS5odG1sXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHVzaW5nU3BvdGlmeShzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogU3BvdGlmeU9BdXRoMkNyZWRlbnRpYWxQcm92aWRlclByb3BzKTogT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyIHtcbiAgICByZXR1cm4gbmV3T0F1dGgyV2l0aEluY2x1ZGVkQ2xpZW50Q3JlZGVudGlhbHNPbmx5KHNjb3BlLCBpZCwgT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyVmVuZG9yLlNQT1RJRlksIHByb3BzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBjcmVkZW50aWFsIHByb3ZpZGVyIGZvciBEcm9wYm94IE9BdXRoMiAoYEluY2x1ZGVkT2F1dGgyUHJvdmlkZXJDb25maWdgKS5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmVkcm9jay1hZ2VudGNvcmUvbGF0ZXN0L2Rldmd1aWRlL2lkZW50aXR5LWlkcC1kcm9wYm94Lmh0bWxcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgdXNpbmdEcm9wYm94KHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBEcm9wYm94T0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyUHJvcHMpOiBPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXIge1xuICAgIHJldHVybiBuZXdPQXV0aDJXaXRoSW5jbHVkZWRDbGllbnRDcmVkZW50aWFsc09ubHkoc2NvcGUsIGlkLCBPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJWZW5kb3IuRFJPUEJPWCwgcHJvcHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGNyZWRlbnRpYWwgcHJvdmlkZXIgZm9yIE5vdGlvbiBPQXV0aDIgKGBJbmNsdWRlZE9hdXRoMlByb3ZpZGVyQ29uZmlnYCkuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JlZHJvY2stYWdlbnRjb3JlL2xhdGVzdC9kZXZndWlkZS9pZGVudGl0eS1pZHAtbm90aW9uLmh0bWxcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgdXNpbmdOb3Rpb24oc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IE5vdGlvbk9BdXRoMkNyZWRlbnRpYWxQcm92aWRlclByb3BzKTogT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyIHtcbiAgICByZXR1cm4gbmV3T0F1dGgyV2l0aEluY2x1ZGVkQ2xpZW50Q3JlZGVudGlhbHNPbmx5KHNjb3BlLCBpZCwgT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyVmVuZG9yLk5PVElPTiwgcHJvcHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGNyZWRlbnRpYWwgcHJvdmlkZXIgZm9yIEh1YlNwb3QgT0F1dGgyIChgSW5jbHVkZWRPYXV0aDJQcm92aWRlckNvbmZpZ2ApLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iZWRyb2NrLWFnZW50Y29yZS9sYXRlc3QvZGV2Z3VpZGUvaWRlbnRpdHktaWRwLWh1YnNwb3QuaHRtbFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyB1c2luZ0h1YnNwb3Qoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEh1YnNwb3RPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJQcm9wcyk6IE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlciB7XG4gICAgcmV0dXJuIG5ld09BdXRoMldpdGhJbmNsdWRlZENsaWVudENyZWRlbnRpYWxzT25seShzY29wZSwgaWQsIE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlclZlbmRvci5IVUJTUE9ULCBwcm9wcyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgY3JlZGVudGlhbCBwcm92aWRlciBmb3IgQ3liZXJBcmsgT0F1dGgyIChgSW5jbHVkZWRPYXV0aDJQcm92aWRlckNvbmZpZ2ApLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iZWRyb2NrLWFnZW50Y29yZS9sYXRlc3QvZGV2Z3VpZGUvaWRlbnRpdHktaWRwLWN5YmVyYXJrLmh0bWxcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgdXNpbmdDeWJlckFyayhzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogSW5jbHVkZWRPYXV0aDJUZW5hbnRDcmVkZW50aWFsUHJvdmlkZXJQcm9wcyk6IE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlciB7XG4gICAgcmV0dXJuIG5ld09BdXRoMldpdGhJbmNsdWRlZFRlbmFudChzY29wZSwgaWQsIE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlclZlbmRvci5DWUJFUl9BUkssIHByb3BzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBjcmVkZW50aWFsIHByb3ZpZGVyIGZvciBGdXNpb25BdXRoIE9BdXRoMiAoYEluY2x1ZGVkT2F1dGgyUHJvdmlkZXJDb25maWdgKS5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmVkcm9jay1hZ2VudGNvcmUvbGF0ZXN0L2Rldmd1aWRlL2lkZW50aXR5LWlkcC1mdXNpb25hdXRoLmh0bWxcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgdXNpbmdGdXNpb25BdXRoKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBJbmNsdWRlZE9hdXRoMlRlbmFudENyZWRlbnRpYWxQcm92aWRlclByb3BzKTogT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyIHtcbiAgICByZXR1cm4gbmV3T0F1dGgyV2l0aEluY2x1ZGVkVGVuYW50KHNjb3BlLCBpZCwgT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyVmVuZG9yLkZVU0lPTl9BVVRILCBwcm9wcyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgY3JlZGVudGlhbCBwcm92aWRlciBmb3IgQXV0aDAgT0F1dGgyIChgSW5jbHVkZWRPYXV0aDJQcm92aWRlckNvbmZpZ2ApLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iZWRyb2NrLWFnZW50Y29yZS9sYXRlc3QvZGV2Z3VpZGUvaWRlbnRpdHktaWRwLWF1dGgwLmh0bWxcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgdXNpbmdBdXRoMChzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogSW5jbHVkZWRPYXV0aDJUZW5hbnRDcmVkZW50aWFsUHJvdmlkZXJQcm9wcyk6IE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlciB7XG4gICAgcmV0dXJuIG5ld09BdXRoMldpdGhJbmNsdWRlZFRlbmFudChzY29wZSwgaWQsIE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlclZlbmRvci5BVVRIMCwgcHJvcHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGNyZWRlbnRpYWwgcHJvdmlkZXIgZm9yIEFtYXpvbiBDb2duaXRvIE9BdXRoMiAoYEluY2x1ZGVkT2F1dGgyUHJvdmlkZXJDb25maWdgKS5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmVkcm9jay1hZ2VudGNvcmUvbGF0ZXN0L2Rldmd1aWRlL2lkZW50aXR5LWlkcC1jb2duaXRvLmh0bWxcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgdXNpbmdDb2duaXRvKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBJbmNsdWRlZE9hdXRoMlRlbmFudENyZWRlbnRpYWxQcm92aWRlclByb3BzKTogT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyIHtcbiAgICByZXR1cm4gbmV3T0F1dGgyV2l0aEluY2x1ZGVkVGVuYW50KHNjb3BlLCBpZCwgT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyVmVuZG9yLkNPR05JVE8sIHByb3BzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBjcmVkZW50aWFsIHByb3ZpZGVyIGZvciBhIGN1c3RvbSBPQXV0aDIgYXV0aG9yaXphdGlvbiBzZXJ2ZXIgKGRpc2NvdmVyeSBkb2N1bWVudCBvciBtZXRhZGF0YSkuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHVzaW5nQ3VzdG9tKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBDdXN0b21PQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJQcm9wcyk6IE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlciB7XG4gICAgYXNzZXJ0Q3VzdG9tT0F1dGgyRGlzY292ZXJ5WG9yKHNjb3BlLCBwcm9wcyk7XG5cbiAgICBjb25zdCBvYXV0aERpc2NvdmVyeTogQ2ZuT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyLk9hdXRoMkRpc2NvdmVyeVByb3BlcnR5ID1cbiAgICAgIHByb3BzLmRpc2NvdmVyeVVybCAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8geyBkaXNjb3ZlcnlVcmw6IHByb3BzLmRpc2NvdmVyeVVybCB9XG4gICAgICAgIDogeyBhdXRob3JpemF0aW9uU2VydmVyTWV0YWRhdGE6IHByb3BzLmF1dGhvcml6YXRpb25TZXJ2ZXJNZXRhZGF0YSEgfTtcblxuICAgIHJldHVybiBuZXcgT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyKHNjb3BlLCBpZCwge1xuICAgICAgb0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyTmFtZTogcHJvcHMub0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyTmFtZSxcbiAgICAgIHRhZ3M6IHByb3BzLnRhZ3MsXG4gICAgICBjcmVkZW50aWFsUHJvdmlkZXJWZW5kb3I6IE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlclZlbmRvci5DVVNUT00sXG4gICAgICBvYXV0aDJQcm92aWRlckNvbmZpZ0lucHV0OiB7XG4gICAgICAgIGN1c3RvbU9hdXRoMlByb3ZpZGVyQ29uZmlnOiB7XG4gICAgICAgICAgY2xpZW50SWQ6IHByb3BzLmNsaWVudElkLFxuICAgICAgICAgIGNsaWVudFNlY3JldDogcHJvcHMuY2xpZW50U2VjcmV0LnVuc2FmZVVud3JhcCgpLFxuICAgICAgICAgIG9hdXRoRGlzY292ZXJ5LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnQgYW4gZXhpc3RpbmcgT0F1dGgyIGNyZWRlbnRpYWwgcHJvdmlkZXIuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21PQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJBdHRyaWJ1dGVzKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBhdHRyczogT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyQXR0cmlidXRlcyxcbiAgKTogSU9BdXRoMkNyZWRlbnRpYWxQcm92aWRlciB7XG4gICAgY2xhc3MgSW1wb3J0IGV4dGVuZHMgT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyQmFzZSB7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgY3JlZGVudGlhbFByb3ZpZGVyQXJuID0gYXR0cnMuY3JlZGVudGlhbFByb3ZpZGVyQXJuO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGNyZWRlbnRpYWxQcm92aWRlclZlbmRvciA9IGF0dHJzLmNyZWRlbnRpYWxQcm92aWRlclZlbmRvcjtcbiAgICAgIHB1YmxpYyByZWFkb25seSBjYWxsYmFja1VybCA9IGF0dHJzLmNhbGxiYWNrVXJsO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGNsaWVudFNlY3JldEFybiA9IGF0dHJzLmNsaWVudFNlY3JldEFybjtcbiAgICAgIHB1YmxpYyByZWFkb25seSBjcmVhdGVkVGltZSA9IGF0dHJzLmNyZWF0ZWRUaW1lO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGxhc3RVcGRhdGVkVGltZSA9IGF0dHJzLmxhc3RVcGRhdGVkVGltZTtcblxuICAgICAgY29uc3RydWN0b3IoczogQ29uc3RydWN0LCBpOiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIocywgaSk7XG4gICAgICB9XG5cbiAgICAgIHB1YmxpYyBiaW5kRm9yR2F0ZXdheU9BdXRoVGFyZ2V0KFxuICAgICAgICBzY29wZXM6IHN0cmluZ1tdLFxuICAgICAgICBjdXN0b21QYXJhbWV0ZXJzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSxcbiAgICAgICk6IEdhdGV3YXlPQXV0aDJJZGVudGl0eUJpbmRpbmcge1xuICAgICAgICBpZiAodGhpcy5jbGllbnRTZWNyZXRBcm4gPT0gbnVsbCB8fCB0aGlzLmNsaWVudFNlY3JldEFybiA9PT0gJycpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICAgICAgbGl0YE1pc3NpbmdPQXV0aDJDbGllbnRTZWNyZXRBcm5gLFxuICAgICAgICAgICAgJ2NsaWVudFNlY3JldEFybiBpcyBub3QgYXZhaWxhYmxlIG9uIHRoaXMgT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyIChpbXBvcnRlZCBwcm92aWRlcnMgbXVzdCBwYXNzIGNsaWVudFNlY3JldEFybiBpbiBmcm9tT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyQXR0cmlidXRlcykuJyxcbiAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHByb3ZpZGVyQXJuOiB0aGlzLmNyZWRlbnRpYWxQcm92aWRlckFybixcbiAgICAgICAgICBzZWNyZXRBcm46IHRoaXMuY2xpZW50U2VjcmV0QXJuLFxuICAgICAgICAgIHNjb3BlcyxcbiAgICAgICAgICBjdXN0b21QYXJhbWV0ZXJzLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3IEltcG9ydChzY29wZSwgaWQpO1xuICB9XG5cbiAgcHVibGljIHJlYWRvbmx5IGNyZWRlbnRpYWxQcm92aWRlckFybjogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgY3JlZGVudGlhbFByb3ZpZGVyVmVuZG9yOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGlzIE9BdXRoMiBjcmVkZW50aWFsIHByb3ZpZGVyLlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgb0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyTmFtZTogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgY2FsbGJhY2tVcmw/OiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBjcmVhdGVkVGltZT86IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGxhc3RVcGRhdGVkVGltZT86IHN0cmluZztcblxuICBwcml2YXRlIF9jbGllbnRTZWNyZXRBcm4/OiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX19yZXNvdXJjZTogQ2ZuT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyO1xuXG4gIHB1YmxpYyBnZXQgY2xpZW50U2VjcmV0QXJuKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHRoaXMuX2NsaWVudFNlY3JldEFybiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9jbGllbnRTZWNyZXRBcm4gPSBUb2tlbi5hc1N0cmluZyh0aGlzLl9fcmVzb3VyY2UuYXR0ckNsaWVudFNlY3JldEFybik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9jbGllbnRTZWNyZXRBcm47XG4gIH1cblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIHBoeXNpY2FsTmFtZTogcHJvcHMub0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyTmFtZVxuICAgICAgICA/PyBMYXp5LnN0cmluZyh7XG4gICAgICAgICAgcHJvZHVjZTogKCkgPT4gTmFtZXMudW5pcXVlUmVzb3VyY2VOYW1lKHRoaXMsIHsgbWF4TGVuZ3RoOiAxMjggfSksXG4gICAgICAgIH0pLFxuICAgIH0pO1xuXG4gICAgYWRkQ29uc3RydWN0TWV0YWRhdGEodGhpcywgcHJvcHMpO1xuXG4gICAgdGhpcy5vQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJOYW1lID0gdGhpcy5waHlzaWNhbE5hbWU7XG4gICAgdGhpcy5jcmVkZW50aWFsUHJvdmlkZXJWZW5kb3IgPSBwcm9wcy5jcmVkZW50aWFsUHJvdmlkZXJWZW5kb3I7XG5cbiAgICB0aHJvd0lmSW52YWxpZCh2YWxpZGF0ZUNyZWRlbnRpYWxQcm92aWRlck5hbWUsIHRoaXMub0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyTmFtZSwgdGhpcyk7XG4gICAgdGhyb3dJZkludmFsaWQodmFsaWRhdGVDcmVkZW50aWFsUHJvdmlkZXJUYWdzLCBwcm9wcy50YWdzLCB0aGlzKTtcblxuICAgIGNvbnN0IGNmblByb3BzOiBDZm5PQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJQcm9wcyA9IHtcbiAgICAgIG5hbWU6IHRoaXMub0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyTmFtZSxcbiAgICAgIGNyZWRlbnRpYWxQcm92aWRlclZlbmRvcjogcHJvcHMuY3JlZGVudGlhbFByb3ZpZGVyVmVuZG9yLFxuICAgICAgb2F1dGgyUHJvdmlkZXJDb25maWdJbnB1dDogcHJvcHMub2F1dGgyUHJvdmlkZXJDb25maWdJbnB1dCxcbiAgICAgIHRhZ3M6IHByb3BzLnRhZ3MgJiYgT2JqZWN0LmtleXMocHJvcHMudGFncykubGVuZ3RoID4gMFxuICAgICAgICA/IE9iamVjdC5lbnRyaWVzKHByb3BzLnRhZ3MpLm1hcCgoW2tleSwgdmFsdWVdKSA9PiAoeyBrZXksIHZhbHVlIH0pKVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICB9O1xuXG4gICAgdGhpcy5fX3Jlc291cmNlID0gbmV3IENmbk9BdXRoMkNyZWRlbnRpYWxQcm92aWRlcih0aGlzLCAnUmVzb3VyY2UnLCBjZm5Qcm9wcyk7XG5cbiAgICB0aGlzLmNyZWRlbnRpYWxQcm92aWRlckFybiA9IHRoaXMuX19yZXNvdXJjZS5hdHRyQ3JlZGVudGlhbFByb3ZpZGVyQXJuO1xuICAgIHRoaXMuY2FsbGJhY2tVcmwgPSB0aGlzLl9fcmVzb3VyY2UuYXR0ckNhbGxiYWNrVXJsO1xuICAgIHRoaXMuY3JlYXRlZFRpbWUgPSB0aGlzLl9fcmVzb3VyY2UuYXR0ckNyZWF0ZWRUaW1lO1xuICAgIHRoaXMubGFzdFVwZGF0ZWRUaW1lID0gdGhpcy5fX3Jlc291cmNlLmF0dHJMYXN0VXBkYXRlZFRpbWU7XG4gIH1cblxuICAvKipcbiAgICogQVJOcyBhbmQgT0F1dGggc2NvcGVzIGZvciB7QGxpbmsgR2F0ZXdheUNyZWRlbnRpYWxQcm92aWRlci5mcm9tT2F1dGhJZGVudGl0eX0gLyB7QGxpbmsgR2F0ZXdheUNyZWRlbnRpYWxQcm92aWRlci5mcm9tT2F1dGhJZGVudGl0eUFybn0uXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZXMgT0F1dGggc2NvcGVzIHRoZSBnYXRld2F5IHRhcmdldCBzaG91bGQgcmVxdWVzdCAoc2VlIHZlbmRvciBkb2N1bWVudGF0aW9uKS5cbiAgICogQHBhcmFtIGN1c3RvbVBhcmFtZXRlcnMgT3B0aW9uYWwgY3VzdG9tIHBhcmFtZXRlcnMgZm9yIHRoZSBPQXV0aCBmbG93LlxuICAgKi9cbiAgQE1ldGhvZE1ldGFkYXRhKClcbiAgcHVibGljIGJpbmRGb3JHYXRld2F5T0F1dGhUYXJnZXQoXG4gICAgc2NvcGVzOiBzdHJpbmdbXSxcbiAgICBjdXN0b21QYXJhbWV0ZXJzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSxcbiAgKTogR2F0ZXdheU9BdXRoMklkZW50aXR5QmluZGluZyB7XG4gICAgY29uc3Qgc2VjcmV0QXJuID0gdGhpcy5jbGllbnRTZWNyZXRBcm47XG4gICAgaWYgKHNlY3JldEFybiA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICBsaXRgTWlzc2luZ09BdXRoMkNsaWVudFNlY3JldEFybmAsXG4gICAgICAgICdjbGllbnRTZWNyZXRBcm4gaXMgbm90IGF2YWlsYWJsZSDigJQgdGhlIENsb3VkRm9ybWF0aW9uIGF0dHJpYnV0ZSBoYXMgbm90IHJlc29sdmVkIHlldC4nLFxuICAgICAgICB0aGlzLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb3ZpZGVyQXJuOiB0aGlzLmNyZWRlbnRpYWxQcm92aWRlckFybixcbiAgICAgIHNlY3JldEFybixcbiAgICAgIHNjb3BlcyxcbiAgICAgIGN1c3RvbVBhcmFtZXRlcnMsXG4gICAgfTtcbiAgfVxufVxuIl19
|
|
897
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2F1dGgyLWNyZWRlbnRpYWwtcHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJvYXV0aDItY3JlZGVudGlhbC1wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFjQSw2Q0FBNEU7QUFNNUUsMkVBQStFO0FBQy9FLHlEQUEyQztBQUMzQyw0RUFBNEQ7QUFDNUQsOEVBQThGO0FBQzlGLDBFQUEwRTtBQUUxRSxtREFBNEs7QUFDNUssbUNBQXFKO0FBQ3JKLDZEQUk4QjtBQUU5Qjs7K0VBRStFO0FBRS9FOzs7OztHQUtHO0FBQ0gsSUFBWSw4QkFtRFg7QUFuREQsV0FBWSw4QkFBOEI7SUFDeEMscUJBQXFCO0lBQ3JCLHlEQUF1QixDQUFBO0lBQ3ZCLHFCQUFxQjtJQUNyQix5REFBdUIsQ0FBQTtJQUN2QixvQkFBb0I7SUFDcEIsdURBQXFCLENBQUE7SUFDckIseUJBQXlCO0lBQ3pCLGlFQUErQixDQUFBO0lBQy9CLHdCQUF3QjtJQUN4QiwrREFBNkIsQ0FBQTtJQUM3QixxQkFBcUI7SUFDckIseURBQXVCLENBQUE7SUFDdkIsd0JBQXdCO0lBQ3hCLCtEQUE2QixDQUFBO0lBQzdCLHVCQUF1QjtJQUN2Qiw2REFBMkIsQ0FBQTtJQUMzQiwwQkFBMEI7SUFDMUIsK0NBQWEsQ0FBQTtJQUNiLG1CQUFtQjtJQUNuQixxREFBbUIsQ0FBQTtJQUNuQix1QkFBdUI7SUFDdkIsOERBQTRCLENBQUE7SUFDNUIsc0JBQXNCO0lBQ3RCLDREQUEwQixDQUFBO0lBQzFCLHVCQUF1QjtJQUN2Qiw2REFBMkIsQ0FBQTtJQUMzQixxQkFBcUI7SUFDckIseURBQXVCLENBQUE7SUFDdkIscUJBQXFCO0lBQ3JCLHlEQUF1QixDQUFBO0lBQ3ZCLG1CQUFtQjtJQUNuQixxREFBbUIsQ0FBQTtJQUNuQixxQkFBcUI7SUFDckIs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LEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztvQkFDcEUsQ0FBQyxDQUFDLFNBQVM7YUFDZCxDQUFDO1lBRUYsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLGtEQUEyQixDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFFOUUsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMseUJBQXlCLENBQUM7WUFDdkUsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQztZQUNuRCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDO1lBQ25ELElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQztTQUM1RDtRQUVEOzs7OztXQUtHO1FBRUkseUJBQXlCLENBQzlCLE1BQWdCLEVBQ2hCLGdCQUE0QztZQUU1QyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO1lBQ3ZDLElBQUksU0FBUyxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUN0QixNQUFNLElBQUksNkJBQWUsQ0FDdkIsSUFBQSxzQkFBRyxFQUFBLDhCQUE4QixFQUNqQyx1RkFBdUYsRUFDdkYsSUFBSSxDQUNMLENBQUM7WUFDSixDQUFDO1lBQ0QsT0FBTztnQkFDTCxXQUFXLEVBQUUsSUFBSSxDQUFDLHFCQUFxQjtnQkFDdkMsU0FBUztnQkFDVCxNQUFNO2dCQUNOLGdCQUFnQjthQUNqQixDQUFDO1NBQ0g7O1lBellVLHVEQUF3Qjs7Ozs7QUFBeEIsNERBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiAgQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIikuIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2VcbiAqICB3aXRoIHRoZSBMaWNlbnNlLiBBIGNvcHkgb2YgdGhlIExpY2Vuc2UgaXMgbG9jYXRlZCBhdFxuICpcbiAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogIG9yIGluIHRoZSAnbGljZW5zZScgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBmaWxlLiBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gJ0FTIElTJyBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTXG4gKiAgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnNcbiAqICBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBJUmVzb3VyY2UsIFJlc291cmNlUHJvcHMsIFNlY3JldFZhbHVlIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgTGF6eSwgTmFtZXMsIFJlc291cmNlLCBUb2tlbiwgVmFsaWRhdGlvbkVycm9yIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHR5cGUge1xuICBDZm5PQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJQcm9wcyxcbiAgSU9BdXRoMkNyZWRlbnRpYWxQcm92aWRlclJlZixcbiAgT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyUmVmZXJlbmNlLFxufSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtYmVkcm9ja2FnZW50Y29yZSc7XG5pbXBvcnQgeyBDZm5PQXV0aDJDcmVkZW50aWFsUHJvdmlkZXIgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtYmVkcm9ja2FnZW50Y29yZSc7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgeyBsaXQgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9oZWxwZXJzLWludGVybmFsJztcbmltcG9ydCB7IGFkZENvbnN0cnVjdE1ldGFkYXRhLCBNZXRob2RNZXRhZGF0YSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL21ldGFkYXRhLXJlc291cmNlJztcbmltcG9ydCB7IHByb3BlcnR5SW5qZWN0YWJsZSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL3Byb3AtaW5qZWN0YWJsZSc7XG5pbXBvcnQgdHlwZSB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgYnVpbGRJZGVudGl0eVJlc291cmNlQXJucywgZ3JhbnRDcmVkZW50aWFsU2VjcmV0LCBncmFudFJlYWRXaXRoTGlzdCwgVE9LRU5fVkFVTFRfT0FVVEgyX1BBUkVOVF9SRVNPVVJDRVMsIFdPUktMT0FEX0lERU5USVRZX1VTRV9SRVNPVVJDRVMgfSBmcm9tICcuL2dyYW50LWhlbHBlcnMnO1xuaW1wb3J0IHsgT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVySWRlbnRpdHlQZXJtcywgVE9LRU5fVkFVTFRfQ1JFREVOVElBTF9TRUNSRVRfUkVBRF9QRVJNUywgVE9LRU5fVkFVTFRfQ1JFREVOVElBTF9TRUNSRVRfV1JJVEVfUEVSTVMgfSBmcm9tICcuL3Blcm1zJztcbmltcG9ydCB7XG4gIHRocm93SWZJbnZhbGlkLFxuICB2YWxpZGF0ZUNyZWRlbnRpYWxQcm92aWRlck5hbWUsXG4gIHZhbGlkYXRlQ3JlZGVudGlhbFByb3ZpZGVyVGFncyxcbn0gZnJvbSAnLi92YWxpZGF0aW9uLWhlbHBlcnMnO1xuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVudW1zXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbi8qKlxuICogQnVpbHQtaW4gT0F1dGgyIHZlbmRvcnMgc3VwcG9ydGVkIGJ5IGBBV1M6OkJlZHJvY2tBZ2VudENvcmU6Ok9BdXRoMkNyZWRlbnRpYWxQcm92aWRlcmAuXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtYmVkcm9ja2FnZW50Y29yZS1vYXV0aDJjcmVkZW50aWFscHJvdmlkZXIuaHRtbFxuICogQGRlcHJlY2F0ZWQgVXNlIHRoZSBlcXVpdmFsZW50IGNvbnN0cnVjdCBmcm9tIGBhd3MtY2RrLWxpYi9hd3MtYmVkcm9ja2FnZW50Y29yZWAgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGVudW0gT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyVmVuZG9yIHtcbiAgLyoqIEdvb2dsZSBPQXV0aDIuICovXG4gIEdPT0dMRSA9ICdHb29nbGVPYXV0aDInLFxuICAvKiogR2l0SHViIE9BdXRoMi4gKi9cbiAgR0lUSFVCID0gJ0dpdGh1Yk9hdXRoMicsXG4gIC8qKiBTbGFjayBPQXV0aDIuICovXG4gIFNMQUNLID0gJ1NsYWNrT2F1dGgyJyxcbiAgLyoqIFNhbGVzZm9yY2UgT0F1dGgyLiAqL1xuICBTQUxFU0ZPUkNFID0gJ1NhbGVzZm9yY2VPYXV0aDInLFxuICAvKiogTWljcm9zb2Z0IE9BdXRoMi4gKi9cbiAgTUlDUk9TT0ZUID0gJ01pY3Jvc29mdE9hdXRoMicsXG4gIC8qKiBDdXN0b20gT0F1dGgyLiAqL1xuICBDVVNUT00gPSAnQ3VzdG9tT2F1dGgyJyxcbiAgLyoqIEF0bGFzc2lhbiBPQXV0aDIuICovXG4gIEFUTEFTU0lBTiA9ICdBdGxhc3NpYW5PYXV0aDInLFxuICAvKiogTGlua2VkSW4gT0F1dGgyLiAqL1xuICBMSU5LRURJTiA9ICdMaW5rZWRpbk9hdXRoMicsXG4gIC8qKiBYIChUd2l0dGVyKSBPQXV0aDIuICovXG4gIFggPSAnWE9hdXRoMicsXG4gIC8qKiBPa3RhIE9BdXRoMi4gKi9cbiAgT0tUQSA9ICdPa3RhT2F1dGgyJyxcbiAgLyoqIE9uZUxvZ2luIE9BdXRoMi4gKi9cbiAgT05FX0xPR0lOID0gJ09uZUxvZ2luT2F1dGgyJyxcbiAgLyoqIFBpbmdPbmUgT0F1dGgyLiAqL1xuICBQSU5HX09ORSA9ICdQaW5nT25lT2F1dGgyJyxcbiAgLyoqIEZhY2Vib29rIE9BdXRoMi4gKi9cbiAgRkFDRUJPT0sgPSAnRmFjZWJvb2tPYXV0aDInLFxuICAvKiogWWFuZGV4IE9BdXRoMi4gKi9cbiAgWUFOREVYID0gJ1lhbmRleE9hdXRoMicsXG4gIC8qKiBSZWRkaXQgT0F1dGgyLiAqL1xuICBSRURESVQgPSAnUmVkZGl0T2F1dGgyJyxcbiAgLyoqIFpvb20gT0F1dGgyLiAqL1xuICBaT09NID0gJ1pvb21PYXV0aDInLFxuICAvKiogVHdpdGNoIE9BdXRoMi4gKi9cbiAgVFdJVENIID0gJ1R3aXRjaE9hdXRoMicsXG4gIC8qKiBTcG90aWZ5IE9BdXRoMi4gKi9cbiAgU1BPVElGWSA9ICdTcG90aWZ5T2F1dGgyJyxcbiAgLyoqIERyb3Bib3ggT0F1dGgyLiAqL1xuICBEUk9QQk9YID0gJ0Ryb3Bib3hPYXV0aDInLFxuICAvKiogTm90aW9uIE9BdXRoMi4gKi9cbiAgTk9USU9OID0gJ05vdGlvbk9hdXRoMicsXG4gIC8qKiBIdWJTcG90IE9BdXRoMi4gKi9cbiAgSFVCU1BPVCA9ICdIdWJzcG90T2F1dGgyJyxcbiAgLyoqIEN5YmVyQXJrIE9BdXRoMi4gKi9cbiAgQ1lCRVJfQVJLID0gJ0N5YmVyQXJrT2F1dGgyJyxcbiAgLyoqIEZ1c2lvbkF1dGggT0F1dGgyLiAqL1xuICBGVVNJT05fQVVUSCA9ICdGdXNpb25BdXRoT2F1dGgyJyxcbiAgLyoqIEF1dGgwIE9BdXRoMi4gKi9cbiAgQVVUSDAgPSAnQXV0aDBPYXV0aDInLFxuICAvKiogQW1hem9uIENvZ25pdG8gT0F1dGgyLiAqL1xuICBDT0dOSVRPID0gJ0NvZ25pdG9PYXV0aDInLFxufVxuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJmYWNlXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbi8qKlxuICogQW4gT0F1dGgyIGNyZWRlbnRpYWwgcHJvdmlkZXIgcmVnaXN0ZXJlZCBpbiBBZ2VudENvcmUgVG9rZW4gVmF1bHQuXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGhlIGVxdWl2YWxlbnQgY29uc3RydWN0IGZyb20gYGF3cy1jZGstbGliL2F3cy1iZWRyb2NrYWdlbnRjb3JlYCBpbnN0ZWFkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXIgZXh0ZW5kcyBJUmVzb3VyY2UsIGlhbS5JR3JhbnRhYmxlLCBJT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyUmVmIHtcbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhpcyBjcmVkZW50aWFsIHByb3ZpZGVyLlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBjcmVkZW50aWFsUHJvdmlkZXJBcm46IHN0cmluZztcblxuICAvKipcbiAgICogT0F1dGgyIHZlbmRvciBzdHJpbmcgcGFzc2VkIHRvIENsb3VkRm9ybWF0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgY3JlZGVudGlhbFByb3ZpZGVyVmVuZG9yOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIFVSTCBmb3IgdGhlIE9BdXRoMiBhdXRob3JpemF0aW9uIGZsb3cuXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGNhbGxiYWNrVXJsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBTZWNyZXRzIE1hbmFnZXIgc2VjcmV0IGZvciB0aGUgT0F1dGgyIGNsaWVudCBjcmVkZW50aWFscy5cbiAgICpcbiAgICogTWF5IGJlIHVuZGVmaW5lZCBmb3IgcmVzb3VyY2VzIGltcG9ydGVkIHdpdGhvdXQgdGhpcyBhdHRyaWJ1dGUuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGNsaWVudFNlY3JldEFybj86IHN0cmluZztcblxuICAvKipcbiAgICogVGltZXN0YW1wIHdoZW4gdGhlIGNyZWRlbnRpYWwgcHJvdmlkZXIgd2FzIGNyZWF0ZWQuXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGNyZWF0ZWRUaW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaW1lc3RhbXAgd2hlbiB0aGUgY3JlZGVudGlhbCBwcm92aWRlciB3YXMgbGFzdCB1cGRhdGVkLlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBsYXN0VXBkYXRlZFRpbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEdyYW50cyBJQU0gYWN0aW9ucyB0byB0aGUgSUFNIHByaW5jaXBhbC5cbiAgICovXG4gIGdyYW50KGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlLCAuLi5hY3Rpb25zOiBzdHJpbmdbXSk6IGlhbS5HcmFudDtcblxuICAvKipcbiAgICogR3JhbnQgYEdldE9hdXRoMkNyZWRlbnRpYWxQcm92aWRlcmAgYW5kIGBMaXN0T2F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyc2AsIHNjb3BlZCB0byB0aGlzXG4gICAqIHByb3ZpZGVyIGFuZCBwYXJlbnQgcmVzb3VyY2VzIHJlcXVpcmVkIGJ5IHRoZSBCZWRyb2NrIEFnZW50Q29yZSBhdXRob3JpemF0aW9uIG1vZGVsLlxuICAgKi9cbiAgZ3JhbnRSZWFkKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50O1xuXG4gIC8qKlxuICAgKiBHcmFudCBjb250cm9sIHBsYW5lIHBlcm1pc3Npb25zIHRvIG1hbmFnZSB0aGlzIHByb3ZpZGVyLlxuICAgKi9cbiAgZ3JhbnRBZG1pbihncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudDtcblxuICAvKipcbiAgICogR3JhbnQgcGVybWlzc2lvbiB0byByZXRyaWV2ZSBPQXV0aCB0b2tlbnMgKGBHZXRSZXNvdXJjZU9hdXRoMlRva2VuYCwgYENvbXBsZXRlUmVzb3VyY2VUb2tlbkF1dGhgKS5cbiAgICovXG4gIGdyYW50VXNlKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50O1xuXG4gIC8qKlxuICAgKiBHcmFudCByZWFkLCBhZG1pbiwgYW5kIHRva2VuIHJldHJpZXZhbCBwZXJtaXNzaW9ucy5cbiAgICovXG4gIGdyYW50RnVsbEFjY2VzcyhncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudDtcblxuICAvKipcbiAgICogQVJOcyBhbmQgT0F1dGggc2NvcGVzIGZvciBnYXRld2F5IHRhcmdldHMgKGBHYXRld2F5Q3JlZGVudGlhbFByb3ZpZGVyLmZyb21PYXV0aElkZW50aXR5YCBvciBgZnJvbU9hdXRoSWRlbnRpdHlBcm5gKS5cbiAgICovXG4gIGJpbmRGb3JHYXRld2F5T0F1dGhUYXJnZXQoc2NvcGVzOiBzdHJpbmdbXSwgY3VzdG9tUGFyYW1ldGVycz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0pOiBHYXRld2F5T0F1dGgySWRlbnRpdHlCaW5kaW5nO1xufVxuXG4vKipcbiAqIFByb3ZpZGVyIEFSTiwgc2VjcmV0IEFSTiwgYW5kIE9BdXRoIHNjb3BlcyBmb3Igd2lyaW5nIGEgVG9rZW4gVmF1bHQgT0F1dGgyIGlkZW50aXR5IGludG8gYSBnYXRld2F5IHRhcmdldC5cbiAqIEBkZXByZWNhdGVkIFVzZSB0aGUgZXF1aXZhbGVudCBjb25zdHJ1Y3QgZnJvbSBgYXdzLWNkay1saWIvYXdzLWJlZHJvY2thZ2VudGNvcmVgIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2F0ZXdheU9BdXRoMklkZW50aXR5QmluZGluZyB7XG4gIC8qKlxuICAgKiBPQXV0aDIgY3JlZGVudGlhbCBwcm92aWRlciBBUk4uXG4gICAqL1xuICByZWFkb25seSBwcm92aWRlckFybjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTZWNyZXRzIE1hbmFnZXIgc2VjcmV0IEFSTiBmb3IgT0F1dGgyIGNsaWVudCBjcmVkZW50aWFscy5cbiAgICovXG4gIHJlYWRvbmx5IHNlY3JldEFybjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPQXV0aCBzY29wZXMgdG8gcmVxdWVzdCB3aGVuIGludm9raW5nIHRocm91Z2ggdGhlIGdhdGV3YXkuXG4gICAqL1xuICByZWFkb25seSBzY29wZXM6IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBjdXN0b20gcGFyYW1ldGVycyBmb3IgdGhlIE9BdXRoIGZsb3cuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gY3VzdG9tIHBhcmFtZXRlcnNcbiAgICovXG4gIHJlYWRvbmx5IGN1c3RvbVBhcmFtZXRlcnM/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xufVxuXG4vKipcbiAqIFNoYXJlZCBwcm9wZXJ0aWVzIGZvciBPQXV0aDIgY3JlZGVudGlhbCBwcm92aWRlcnMgY3JlYXRlZCB2aWEge0BsaW5rIE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlcn0gZmFjdG9yeSBtZXRob2RzLlxuICogQGRlcHJlY2F0ZWQgVXNlIHRoZSBlcXVpdmFsZW50IGNvbnN0cnVjdCBmcm9tIGBhd3MtY2RrLWxpYi9hd3MtYmVkcm9ja2FnZW50Y29yZWAgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJCYXNlUHJvcHMge1xuICAvKipcbiAgICogTmFtZSBvZiB0aGUgY3JlZGVudGlhbCBwcm92aWRlci5cbiAgICpcbiAgICogQGRlZmF1bHQgYSBuYW1lIGdlbmVyYXRlZCBieSBDREtcbiAgICovXG4gIHJlYWRvbmx5IG9BdXRoMkNyZWRlbnRpYWxQcm92aWRlck5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRhZ3MgZm9yIHRoaXMgY3JlZGVudGlhbCBwcm92aWRlci5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyB0YWdzXG4gICAqL1xuICByZWFkb25seSB0YWdzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcbn1cblxuLyoqXG4gKiBPQXV0aDIgY2xpZW50IGlkZW50aWZpZXIgYW5kIHNlY3JldCByZWdpc3RlcmVkIHdpdGggdGhlIGlkZW50aXR5IHByb3ZpZGVyIChhbGwgdmVuZG9ycykuXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGhlIGVxdWl2YWxlbnQgY29uc3RydWN0IGZyb20gYGF3cy1jZGstbGliL2F3cy1iZWRyb2NrYWdlbnRjb3JlYCBpbnN0ZWFkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9BdXRoMkNsaWVudENyZWRlbnRpYWxzIHtcbiAgLyoqIE9BdXRoMiBjbGllbnQgaWRlbnRpZmllci4gKi9cbiAgcmVhZG9ubHkgY2xpZW50SWQ6IHN0cmluZztcbiAgLyoqXG4gICAqIE9BdXRoMiBjbGllbnQgc2VjcmV0LlxuICAgKlxuICAgKiAqKk5PVEU6KiogVGhlIGNsaWVudCBzZWNyZXQgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgQ2xvdWRGb3JtYXRpb24gdGVtcGxhdGUgYXMgcGFydCBvZiBzeW50aGVzaXMuXG4gICAqIFRoZSBzZXJ2aWNlIHN0b3JlcyB0aGUgc2VjcmV0IGluIFNlY3JldHMgTWFuYWdlciBhZnRlciBjcmVhdGlvbiwgYnV0IHRoZSB2YWx1ZSBpcyB2aXNpYmxlXG4gICAqIGluIHRoZSB0ZW1wbGF0ZSBhbmQgZGVwbG95bWVudCBoaXN0b3J5LiBVc2UgYFNlY3JldFZhbHVlLnVuc2FmZVBsYWluVGV4dCgpYCB0byBleHBsaWNpdGx5XG4gICAqIGFja25vd2xlZGdlIHBsYWludGV4dCwgb3IgcGFzcyBhIHJlZmVyZW5jZSBmcm9tIGFub3RoZXIgY29uc3RydWN0IHRvIGF2b2lkIGVtYmVkZGluZyB0aGVcbiAgICogbGl0ZXJhbCB2YWx1ZS5cbiAgICovXG4gIHJlYWRvbmx5IGNsaWVudFNlY3JldDogU2VjcmV0VmFsdWU7XG59XG5cbi8qKlxuICogTmFtaW5nLCB0YWdzLCBhbmQgY2xpZW50IGNyZWRlbnRpYWxzIHNoYXJlZCBieSBldmVyeSB7QGxpbmsgT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyfSBmYWN0b3J5LlxuICogQGRlcHJlY2F0ZWQgVXNlIHRoZSBlcXVpdmFsZW50IGNvbnN0cnVjdCBmcm9tIGBhd3MtY2RrLWxpYi9hd3MtYmVkcm9ja2FnZW50Y29yZWAgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJGYWN0b3J5QmFzZVByb3BzIGV4dGVuZHMgT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyQmFzZVByb3BzLCBPQXV0aDJDbGllbnRDcmVkZW50aWFscyB7XG59XG5cbi8qKlxuICogUHJvcHMgZm9yIHtAbGluayBPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXIudXNpbmdTbGFja30uXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGhlIGVxdWl2YWxlbnQgY29uc3RydWN0IGZyb20gYGF3cy1jZGstbGliL2F3cy1iZWRyb2NrYWdlbnRjb3JlYCBpbnN0ZWFkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNsYWNrT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyUHJvcHMgZXh0ZW5kcyBPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJGYWN0b3J5QmFzZVByb3BzIHtcbn1cblxuLyoqXG4gKiBQcm9wcyBmb3Ige0BsaW5rIE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlci51c2luZ0dpdGh1Yn0uXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGhlIGVxdWl2YWxlbnQgY29uc3RydWN0IGZyb20gYGF3cy1jZGstbGliL2F3cy1iZWRyb2NrYWdlbnRjb3JlYCBpbnN0ZWFkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdpdGh1Yk9BdXRoMkNyZWRlbnRpYWxQcm92aWRlclByb3BzIGV4dGVuZHMgT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyRmFjdG9yeUJhc2VQcm9wcyB7XG59XG5cbi8qKlxuICogUHJvcHMgZm9yIHtAbGluayBPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXIudXNpbmdHb29nbGV9LlxuICogQGRlcHJlY2F0ZWQgVXNlIHRoZSBlcXVpdmFsZW50IGNvbnN0cnVjdCBmcm9tIGBhd3MtY2RrLWxpYi9hd3MtYmVkcm9ja2FnZW50Y29yZWAgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHb29nbGVPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJQcm9wcyBleHRlbmRzIE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlckZhY3RvcnlCYXNlUHJvcHMge1xufVxuXG4vKipcbiAqIFByb3BzIGZvciB7QGxpbmsgT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyLnVzaW5nU2FsZXNmb3JjZX0uXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGhlIGVxdWl2YWxlbnQgY29uc3RydWN0IGZyb20gYGF3cy1jZGstbGliL2F3cy1iZWRyb2NrYWdlbnRjb3JlYCBpbnN0ZWFkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNhbGVzZm9yY2VPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJQcm9wcyBleHRlbmRzIE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlckZhY3RvcnlCYXNlUHJvcHMge1xufVxuXG4vKipcbiAqIFByb3BzIGZvciB7QGxpbmsgT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyLnVzaW5nTWljcm9zb2Z0fS5cbiAqIEBkZXByZWNhdGVkIFVzZSB0aGUgZXF1aXZhbGVudCBjb25zdHJ1Y3QgZnJvbSBgYXdzLWNkay1saWIvYXdzLWJlZHJvY2thZ2VudGNvcmVgIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWljcm9zb2Z0T0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyUHJvcHMgZXh0ZW5kcyBPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJGYWN0b3J5QmFzZVByb3BzIHtcbiAgLyoqXG4gICAqIE1pY3Jvc29mdCBFbnRyYSBJRCB0ZW5hbnQgSUQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gc2VydmljZSBkZWZhdWx0IHRlbmFudCByZXNvbHV0aW9uXG4gICAqL1xuICByZWFkb25seSB0ZW5hbnRJZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm9wcyBmb3Ige0BsaW5rIE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlci51c2luZ0F0bGFzc2lhbn0uXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGhlIGVxdWl2YWxlbnQgY29uc3RydWN0IGZyb20gYGF3cy1jZGstbGliL2F3cy1iZWRyb2NrYWdlbnRjb3JlYCBpbnN0ZWFkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF0bGFzc2lhbk9BdXRoMkNyZWRlbnRpYWxQcm92aWRlclByb3BzIGV4dGVuZHMgT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyRmFjdG9yeUJhc2VQcm9wcyB7XG59XG5cbi8qKlxuICogUHJvcHMgZm9yIHtAbGluayBPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXIudXNpbmdMaW5rZWRpbn0uXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGhlIGVxdWl2YWxlbnQgY29uc3RydWN0IGZyb20gYGF3cy1jZGstbGliL2F3cy1iZWRyb2NrYWdlbnRjb3JlYCBpbnN0ZWFkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExpbmtlZGluT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyUHJvcHMgZXh0ZW5kcyBPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJGYWN0b3J5QmFzZVByb3BzIHtcbn1cblxuLyoqXG4gKiBQcm9wcyBmb3Ige0BsaW5rIE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlci51c2luZ0ZhY2Vib29rfS5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iZWRyb2NrLWFnZW50Y29yZS9sYXRlc3QvZGV2Z3VpZGUvaWRlbnRpdHktaWRwLWZhY2Vib29rLmh0bWxcbiAqIEBkZXByZWNhdGVkIFVzZSB0aGUgZXF1aXZhbGVudCBjb25zdHJ1Y3QgZnJvbSBgYXdzLWNkay1saWIvYXdzLWJlZHJvY2thZ2VudGNvcmVgIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmFjZWJvb2tPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJQcm9wcyBleHRlbmRzIE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlckZhY3RvcnlCYXNlUHJvcHMge1xufVxuXG4vKipcbiAqIFByb3BzIGZvciB7QGxpbmsgT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyLnVzaW5nWH0uXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmVkcm9jay1hZ2VudGNvcmUvbGF0ZXN0L2Rldmd1aWRlL2lkZW50aXR5LWlkcC14Lmh0bWxcbiAqIEBkZXByZWNhdGVkIFVzZSB0aGUgZXF1aXZhbGVudCBjb25zdHJ1Y3QgZnJvbSBgYXdzLWNkay1saWIvYXdzLWJlZHJvY2thZ2VudGNvcmVgIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgWE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlclByb3BzIGV4dGVuZHMgT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyRmFjdG9yeUJhc2VQcm9wcyB7XG59XG5cbi8qKlxuICogUHJvcHMgZm9yIHtAbGluayBPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXIudXNpbmdZYW5kZXh9LlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JlZHJvY2stYWdlbnRjb3JlL2xhdGVzdC9kZXZndWlkZS9pZGVudGl0eS1pZHAteWFuZGV4Lmh0bWxcbiAqIEBkZXByZWNhdGVkIFVzZSB0aGUgZXF1aXZhbGVudCBjb25zdHJ1Y3QgZnJvbSBgYXdzLWNkay1saWIvYXdzLWJlZHJvY2thZ2VudGNvcmVgIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgWWFuZGV4T0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyUHJvcHMgZXh0ZW5kcyBPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJGYWN0b3J5QmFzZVByb3BzIHtcbn1cblxuLyoqXG4gKiBQcm9wcyBmb3Ige0BsaW5rIE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlci51c2luZ1JlZGRpdH0uXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmVkcm9jay1hZ2VudGNvcmUvbGF0ZXN0L2Rldmd1aWRlL2lkZW50aXR5LWlkcC1yZWRkaXQuaHRtbFxuICogQGRlcHJlY2F0ZWQgVXNlIHRoZSBlcXVpdmFsZW50IGNvbnN0cnVjdCBmcm9tIGBhd3MtY2RrLWxpYi9hd3MtYmVkcm9ja2FnZW50Y29yZWAgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWRkaXRPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJQcm9wcyBleHRlbmRzIE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlckZhY3RvcnlCYXNlUHJvcHMge1xufVxuXG4vKipcbiAqIFByb3BzIGZvciB7QGxpbmsgT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyLnVzaW5nWm9vbX0uXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmVkcm9jay1hZ2VudGNvcmUvbGF0ZXN0L2Rldmd1aWRlL2lkZW50aXR5LWlkcC16b29tLmh0bWxcbiAqIEBkZXByZWNhdGVkIFVzZSB0aGUgZXF1aXZhbGVudCBjb25zdHJ1Y3QgZnJvbSBgYXdzLWNkay1saWIvYXdzLWJlZHJvY2thZ2VudGNvcmVgIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgWm9vbU9BdXRoMkNyZWRlbnRpYWxQcm92aWRlclByb3BzIGV4dGVuZHMgT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyRmFjdG9yeUJhc2VQcm9wcyB7XG59XG5cbi8qKlxuICogUHJvcHMgZm9yIHtAbGluayBPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXIudXNpbmdUd2l0Y2h9LlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JlZHJvY2stYWdlbnRjb3JlL2xhdGVzdC9kZXZndWlkZS9pZGVudGl0eS1pZHAtdHdpdGNoLmh0bWxcbiAqIEBkZXByZWNhdGVkIFVzZSB0aGUgZXF1aXZhbGVudCBjb25zdHJ1Y3QgZnJvbSBgYXdzLWNkay1saWIvYXdzLWJlZHJvY2thZ2VudGNvcmVgIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHdpdGNoT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyUHJvcHMgZXh0ZW5kcyBPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJGYWN0b3J5QmFzZVByb3BzIHtcbn1cblxuLyoqXG4gKiBQcm9wcyBmb3Ige0BsaW5rIE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlci51c2luZ1Nwb3RpZnl9LlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JlZHJvY2stYWdlbnRjb3JlL2xhdGVzdC9kZXZndWlkZS9pZGVudGl0eS1pZHAtc3BvdGlmeS5odG1sXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGhlIGVxdWl2YWxlbnQgY29uc3RydWN0IGZyb20gYGF3cy1jZGstbGliL2F3cy1iZWRyb2NrYWdlbnRjb3JlYCBpbnN0ZWFkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNwb3RpZnlPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJQcm9wcyBleHRlbmRzIE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlckZhY3RvcnlCYXNlUHJvcHMge1xufVxuXG4vKipcbiAqIFByb3BzIGZvciB7QGxpbmsgT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyLnVzaW5nRHJvcGJveH0uXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmVkcm9jay1hZ2VudGNvcmUvbGF0ZXN0L2Rldmd1aWRlL2lkZW50aXR5LWlkcC1kcm9wYm94Lmh0bWxcbiAqIEBkZXByZWNhdGVkIFVzZSB0aGUgZXF1aXZhbGVudCBjb25zdHJ1Y3QgZnJvbSBgYXdzLWNkay1saWIvYXdzLWJlZHJvY2thZ2VudGNvcmVgIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRHJvcGJveE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlclByb3BzIGV4dGVuZHMgT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyRmFjdG9yeUJhc2VQcm9wcyB7XG59XG5cbi8qKlxuICogUHJvcHMgZm9yIHtAbGluayBPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXIudXNpbmdOb3Rpb259LlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JlZHJvY2stYWdlbnRjb3JlL2xhdGVzdC9kZXZndWlkZS9pZGVudGl0eS1pZHAtbm90aW9uLmh0bWxcbiAqIEBkZXByZWNhdGVkIFVzZSB0aGUgZXF1aXZhbGVudCBjb25zdHJ1Y3QgZnJvbSBgYXdzLWNkay1saWIvYXdzLWJlZHJvY2thZ2VudGNvcmVgIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTm90aW9uT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyUHJvcHMgZXh0ZW5kcyBPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJGYWN0b3J5QmFzZVByb3BzIHtcbn1cblxuLyoqXG4gKiBQcm9wcyBmb3Ige0BsaW5rIE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlci51c2luZ0h1YnNwb3R9LlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JlZHJvY2stYWdlbnRjb3JlL2xhdGVzdC9kZXZndWlkZS9pZGVudGl0eS1pZHAtaHVic3BvdC5odG1sXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGhlIGVxdWl2YWxlbnQgY29uc3RydWN0IGZyb20gYGF3cy1jZGstbGliL2F3cy1iZWRyb2NrYWdlbnRjb3JlYCBpbnN0ZWFkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEh1YnNwb3RPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJQcm9wcyBleHRlbmRzIE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlckZhY3RvcnlCYXNlUHJvcHMge1xufVxuXG4vKipcbiAqIE9wdGlvbmFsIHRlbmFudCBPQXV0aCBlbmRwb2ludHMgZm9yIElkUHMgdGhhdCB1c2UgQ2xvdWRGb3JtYXRpb24gYEluY2x1ZGVkT2F1dGgyUHJvdmlkZXJDb25maWdgXG4gKiB3aXRoIGlzc3VlciBhbmQvb3IgZW5kcG9pbnRzIHBlciB0aGUgSWRQ4oCZcyBvdXRib3VuZCBkb2N1bWVudGF0aW9uLlxuICogQGRlcHJlY2F0ZWQgVXNlIHRoZSBlcXVpdmFsZW50IGNvbnN0cnVjdCBmcm9tIGBhd3MtY2RrLWxpYi9hd3MtYmVkcm9ja2FnZW50Y29yZWAgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbmNsdWRlZE9hdXRoMlRlbmFudEVuZHBvaW50cyB7XG4gIC8qKlxuICAgKiBPQXV0aDIgYXV0aG9yaXphdGlvbiBlbmRwb2ludCBmb3IgeW91ciB0ZW5hbnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm90IHNwZWNpZmllZDsgdXNlIHdoZW4geW91ciBJZFAgcmVxdWlyZXMgYW4gZXhwbGljaXQgZW5kcG9pbnRcbiAgICovXG4gIHJlYWRvbmx5IGF1dGhvcml6YXRpb25FbmRwb2ludD86IHN0cmluZztcbiAgLyoqXG4gICAqIFRva2VuIGlzc3VlciBVUkwgZm9yIHlvdXIgdGVuYW50IChvZnRlbiB0aGUgSWRQIGJhc2Ugb3IgaXNzdWVyIFVSSSkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm90IHNwZWNpZmllZDsgdXNlIHdoZW4geW91ciBJZFAgcmVxdWlyZXMgYW4gZXhwbGljaXQgaXNzdWVyXG4gICAqL1xuICByZWFkb25seSBpc3N1ZXI/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBPQXV0aDIgdG9rZW4gZW5kcG9pbnQgZm9yIHlvdXIgdGVuYW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vdCBzcGVjaWZpZWQ7IHVzZSB3aGVuIHlvdXIgSWRQIHJlcXVpcmVzIGFuIGV4cGxpY2l0IGVuZHBvaW50XG4gICAqL1xuICByZWFkb25seSB0b2tlbkVuZHBvaW50Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFByb3BzIGZvciBgSW5jbHVkZWRPYXV0aDJQcm92aWRlckNvbmZpZ2AgSWRQcyB3aG9zZSBbb3V0Ym91bmQgZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JlZHJvY2stYWdlbnRjb3JlL2xhdGVzdC9kZXZndWlkZS9pZGVudGl0eS1pZHBzLmh0bWwpXG4gKiByZXF1aXJlcyBgaXNzdWVyYCwgYGF1dGhvcml6YXRpb25FbmRwb2ludGAsIGFuZC9vciBgdG9rZW5FbmRwb2ludGAgKGZvciBleGFtcGxlIE9rdGEsIEF1dGgwLCBBbWF6b24gQ29nbml0bywgT25lTG9naW4sXG4gKiBQaW5nT25lLCBDeWJlckFyaywgRnVzaW9uQXV0aCkuXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGhlIGVxdWl2YWxlbnQgY29uc3RydWN0IGZyb20gYGF3cy1jZGstbGliL2F3cy1iZWRyb2NrYWdlbnRjb3JlYCBpbnN0ZWFkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEluY2x1ZGVkT2F1dGgyVGVuYW50Q3JlZGVudGlhbFByb3ZpZGVyUHJvcHMgZXh0ZW5kcyBPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJGYWN0b3J5QmFzZVByb3BzLCBJbmNsdWRlZE9hdXRoMlRlbmFudEVuZHBvaW50cyB7XG59XG5cbi8qKlxuICogU3RhdGljIE9BdXRoMiBhdXRob3JpemF0aW9uIHNlcnZlciBtZXRhZGF0YSBmb3IgY3VzdG9tIGNyZWRlbnRpYWwgcHJvdmlkZXJzLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzg0MTRcbiAqIEBkZXByZWNhdGVkIFVzZSB0aGUgZXF1aXZhbGVudCBjb25zdHJ1Y3QgZnJvbSBgYXdzLWNkay1saWIvYXdzLWJlZHJvY2thZ2VudGNvcmVgIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT0F1dGgyQXV0aG9yaXphdGlvblNlcnZlck1ldGFkYXRhIHtcbiAgLyoqXG4gICAqIFRoZSBhdXRob3JpemF0aW9uIGVuZHBvaW50IFVSTC5cbiAgICovXG4gIHJlYWRvbmx5IGF1dGhvcml6YXRpb25FbmRwb2ludDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgaXNzdWVyIFVSTCBmb3IgdGhlIE9BdXRoMiBhdXRob3JpemF0aW9uIHNlcnZlci5cbiAgICovXG4gIHJlYWRvbmx5IGlzc3Vlcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdG9rZW4gZW5kcG9pbnQgVVJMLlxuICAgKi9cbiAgcmVhZG9ubHkgdG9rZW5FbmRwb2ludDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc3VwcG9ydGVkIHJlc3BvbnNlIHR5cGVzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vdCBzcGVjaWZpZWRcbiAgICovXG4gIHJlYWRvbmx5IHJlc3BvbnNlVHlwZXM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBQcm9wcyBmb3Ige0BsaW5rIE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlci51c2luZ0N1c3RvbX0uXG4gKlxuICogU2V0IGV4YWN0bHkgb25lIG9mIHtAbGluayBkaXNjb3ZlcnlVcmx9IChPSURDIGRpc2NvdmVyeSBkb2N1bWVudCkgb3Ige0BsaW5rIGF1dGhvcml6YXRpb25TZXJ2ZXJNZXRhZGF0YX1cbiAqIChzdGF0aWMgT0F1dGgyIHNlcnZlciBtZXRhZGF0YSkuIERvIG5vdCBwYXNzIGJvdGguXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGhlIGVxdWl2YWxlbnQgY29uc3RydWN0IGZyb20gYGF3cy1jZGstbGliL2F3cy1iZWRyb2NrYWdlbnRjb3JlYCBpbnN0ZWFkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEN1c3RvbU9BdXRoMkNyZWRlbnRpYWxQcm92aWRlclByb3BzIGV4dGVuZHMgT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyRmFjdG9yeUJhc2VQcm9wcyB7XG4gIC8qKlxuICAgKiBPSURDL09BdXRoMiBkaXNjb3ZlcnkgZG9jdW1lbnQgVVJMIGZvciBkeW5hbWljIGludGVncmF0aW9uIHdpdGggdGhlIGlkZW50aXR5IHByb3ZpZGVyLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vdCB1c2VkIHdoZW4ge0BsaW5rIGF1dGhvcml6YXRpb25TZXJ2ZXJNZXRhZGF0YX0gaXMgc2V0XG4gICAqL1xuICByZWFkb25seSBkaXNjb3ZlcnlVcmw/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBBdXRob3JpemF0aW9uIHNlcnZlciBtZXRhZGF0YSAoaXNzdWVyLCBhdXRob3JpemF0aW9uIGFuZCB0b2tlbiBlbmRwb2ludHMpIHdoZW4gbm90IHVzaW5nIGEgZGlzY292ZXJ5IFVSTC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBub3QgdXNlZCB3aGVuIHtAbGluayBkaXNjb3ZlcnlVcmx9IGlzIHNldFxuICAgKi9cbiAgcmVhZG9ubHkgYXV0aG9yaXphdGlvblNlcnZlck1ldGFkYXRhPzogT0F1dGgyQXV0aG9yaXphdGlvblNlcnZlck1ldGFkYXRhO1xufVxuXG4vKipcbiAqIExvdy1sZXZlbCBwcm9wZXJ0aWVzIHdoZW4geW91IG5lZWQgZnVsbCBjb250cm9sIChwcmVmZXIge0BsaW5rIE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlci51c2luZ1NsYWNrfSBhbmQgb3RoZXIgZmFjdG9yaWVzKS5cbiAqIEBkZXByZWNhdGVkIFVzZSB0aGUgZXF1aXZhbGVudCBjb25zdHJ1Y3QgZnJvbSBgYXdzLWNkay1saWIvYXdzLWJlZHJvY2thZ2VudGNvcmVgIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyUHJvcHMge1xuICAvKipcbiAgICogTmFtZSBvZiB0aGUgY3JlZGVudGlhbCBwcm92aWRlci5cbiAgICpcbiAgICogQGRlZmF1bHQgYSBuYW1lIGdlbmVyYXRlZCBieSBDREtcbiAgICovXG4gIHJlYWRvbmx5IG9BdXRoMkNyZWRlbnRpYWxQcm92aWRlck5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE9BdXRoMiB2ZW5kb3Igc3RyaW5nIGZvciBDbG91ZEZvcm1hdGlvbiBgQ3JlZGVudGlhbFByb3ZpZGVyVmVuZG9yYC5cbiAgICovXG4gIHJlYWRvbmx5IGNyZWRlbnRpYWxQcm92aWRlclZlbmRvcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPQXV0aDIgcHJvdmlkZXIgY29uZmlndXJhdGlvbiBwYXNzZWQgdGhyb3VnaCB0byBgT2F1dGgyUHJvdmlkZXJDb25maWdJbnB1dGAuXG4gICAqL1xuICByZWFkb25seSBvYXV0aDJQcm92aWRlckNvbmZpZ0lucHV0OiBDZm5PQXV0aDJDcmVkZW50aWFsUHJvdmlkZXIuT2F1dGgyUHJvdmlkZXJDb25maWdJbnB1dFByb3BlcnR5O1xuXG4gIC8qKlxuICAgKiBUYWdzIGZvciB0aGlzIGNyZWRlbnRpYWwgcHJvdmlkZXIuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gdGFnc1xuICAgKi9cbiAgcmVhZG9ubHkgdGFncz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG59XG5cbi8qKlxuICogQXR0cmlidXRlcyBmb3IgaW1wb3J0aW5nIGFuIGV4aXN0aW5nIE9BdXRoMiBjcmVkZW50aWFsIHByb3ZpZGVyLlxuICogQGRlcHJlY2F0ZWQgVXNlIHRoZSBlcXVpdmFsZW50IGNvbnN0cnVjdCBmcm9tIGBhd3MtY2RrLWxpYi9hd3MtYmVkcm9ja2FnZW50Y29yZWAgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJBdHRyaWJ1dGVzIHtcbiAgLyoqXG4gICAqIEFSTiBvZiB0aGUgY3JlZGVudGlhbCBwcm92aWRlci5cbiAgICovXG4gIHJlYWRvbmx5IGNyZWRlbnRpYWxQcm92aWRlckFybjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBWZW5kb3Igc3RyaW5nIGZvciB0aGlzIHByb3ZpZGVyLlxuICAgKi9cbiAgcmVhZG9ubHkgY3JlZGVudGlhbFByb3ZpZGVyVmVuZG9yOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFSTiBvZiB0aGUgU2VjcmV0cyBNYW5hZ2VyIHNlY3JldCBmb3IgT0F1dGgyIGNsaWVudCBjcmVkZW50aWFscywgaWYga25vd24uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm90IHNldDsgcmVxdWlyZWQgZm9yIHtAbGluayBPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXIuYmluZEZvckdhdGV3YXlPQXV0aFRhcmdldH0gb24gaW1wb3J0ZWQgcHJvdmlkZXJzXG4gICAqL1xuICByZWFkb25seSBjbGllbnRTZWNyZXRBcm4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIFVSTCBmcm9tIHRoZSBkZXBsb3llZCBwcm92aWRlciwgaWYga25vd24uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm90IHNldFxuICAgKi9cbiAgcmVhZG9ubHkgY2FsbGJhY2tVcmw/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFJlc291cmNlIGNyZWF0aW9uIHRpbWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm90IHNldFxuICAgKi9cbiAgcmVhZG9ubHkgY3JlYXRlZFRpbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFJlc291cmNlIGxhc3QtdXBkYXRlZCB0aW1lLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vdCBzZXRcbiAgICovXG4gIHJlYWRvbmx5IGxhc3RVcGRhdGVkVGltZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gb2F1dGgyQXV0aG9yaXphdGlvblNlcnZlck1ldGFkYXRhQ29udGFpbnNVbnJlc29sdmVkKFxuICBtZXRhOiBPQXV0aDJBdXRob3JpemF0aW9uU2VydmVyTWV0YWRhdGEsXG4pOiBib29sZWFuIHtcbiAgZm9yIChjb25zdCB2YWx1ZSBvZiBPYmplY3QudmFsdWVzKG1ldGEpKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgVG9rZW4uaXNVbnJlc29sdmVkKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHZhbHVlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gJ3N0cmluZycgJiYgVG9rZW4uaXNVbnJlc29sdmVkKGl0ZW0pKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBhc3NlcnRDdXN0b21PQXV0aDJEaXNjb3ZlcnlYb3Ioc2NvcGU6IENvbnN0cnVjdCwgcHJvcHM6IEN1c3RvbU9BdXRoMkNyZWRlbnRpYWxQcm92aWRlclByb3BzKTogdm9pZCB7XG4gIGNvbnN0IGRpc2NvdmVyeVVybCA9IHByb3BzLmRpc2NvdmVyeVVybDtcbiAgY29uc3QgbWV0YWRhdGEgPSBwcm9wcy5hdXRob3JpemF0aW9uU2VydmVyTWV0YWRhdGE7XG5cbiAgY29uc3QgaGFzRGlzY292ZXJ5VXJsID0gZGlzY292ZXJ5VXJsICE9PSB1bmRlZmluZWQgJiYgZGlzY292ZXJ5VXJsICE9PSAnJztcbiAgY29uc3QgaGFzTWV0YWRhdGEgPSBtZXRhZGF0YSAhPT0gdW5kZWZpbmVkO1xuXG4gIC8vIFwiQm90aCBwcm92aWRlZFwiIGlzIGFsd2F5cyBhbiBlcnJvciwgZXZlbiB3aGVuIHZhbHVlcyBjb250YWluIFRva2Vucy5cbiAgaWYgKGhhc0Rpc2NvdmVyeVVybCAmJiBoYXNNZXRhZGF0YSkge1xuICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICBsaXRgQ3VzdG9tT0F1dGgyRGlzY292ZXJ5RXhjbHVzaXZlYCxcbiAgICAgICdQcm92aWRlIGVpdGhlciBkaXNjb3ZlcnlVcmwgb3IgYXV0aG9yaXphdGlvblNlcnZlck1ldGFkYXRhIGZvciBhIGN1c3RvbSBPQXV0aDIgY3JlZGVudGlhbCBwcm92aWRlciwgbm90IGJvdGguJyxcbiAgICAgIHNjb3BlLFxuICAgICk7XG4gIH1cblxuICAvLyBCYWlsIG91dCBlYXJseSB3aGVuIGVpdGhlciB2YWx1ZSBpcyBhIFRva2VuIOKAlCB3ZSBjYW5ub3QgdmFsaWRhdGUgYXQgc3ludGggdGltZS5cbiAgY29uc3QgZGlzY292ZXJ5VW5yZXNvbHZlZCA9IGRpc2NvdmVyeVVybCAhPT0gdW5kZWZpbmVkICYmIFRva2VuLmlzVW5yZXNvbHZlZChkaXNjb3ZlcnlVcmwpO1xuICBjb25zdCBtZXRhZGF0YVVucmVzb2x2ZWQgPSBtZXRhZGF0YSAhPT0gdW5kZWZpbmVkICYmIG9hdXRoMkF1dGhvcml6YXRpb25TZXJ2ZXJNZXRhZGF0YUNvbnRhaW5zVW5yZXNvbHZlZChtZXRhZGF0YSk7XG5cbiAgaWYgKGRpc2NvdmVyeVVucmVzb2x2ZWQgfHwgbWV0YWRhdGFVbnJlc29sdmVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKCFoYXNEaXNjb3ZlcnlVcmwgJiYgIWhhc01ldGFkYXRhKSB7XG4gICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgIGxpdGBDdXN0b21PQXV0aDJEaXNjb3ZlcnlSZXF1aXJlZGAsXG4gICAgICAnUHJvdmlkZSBlaXRoZXIgZGlzY292ZXJ5VXJsIG9yIGF1dGhvcml6YXRpb25TZXJ2ZXJNZXRhZGF0YSBmb3IgYSBjdXN0b20gT0F1dGgyIGNyZWRlbnRpYWwgcHJvdmlkZXIuJyxcbiAgICAgIHNjb3BlLFxuICAgICk7XG4gIH1cbn1cblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgQWJzdHJhY3QgYmFzZVxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5hYnN0cmFjdCBjbGFzcyBPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJCYXNlIGV4dGVuZHMgUmVzb3VyY2UgaW1wbGVtZW50cyBJT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyIHtcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGNyZWRlbnRpYWxQcm92aWRlckFybjogc3RyaW5nO1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgY3JlZGVudGlhbFByb3ZpZGVyVmVuZG9yOiBzdHJpbmc7XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBjYWxsYmFja1VybD86IHN0cmluZztcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGNsaWVudFNlY3JldEFybj86IHN0cmluZztcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGNyZWF0ZWRUaW1lPzogc3RyaW5nO1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgbGFzdFVwZGF0ZWRUaW1lPzogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgZ3JhbnRQcmluY2lwYWw6IGlhbS5JUHJpbmNpcGFsID0gbmV3IGlhbS5Vbmtub3duUHJpbmNpcGFsKHsgcmVzb3VyY2U6IHRoaXMgfSk7XG5cbiAgcHVibGljIGdldCBvQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJSZWYoKTogT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyUmVmZXJlbmNlIHtcbiAgICByZXR1cm4geyBjcmVkZW50aWFsUHJvdmlkZXJBcm46IHRoaXMuY3JlZGVudGlhbFByb3ZpZGVyQXJuIH07XG4gIH1cblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wcz86IFJlc291cmNlUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBbZGlzYWJsZS1hd3NsaW50Om5vLWdyYW50c11cbiAgICovXG4gIHB1YmxpYyBncmFudChncmFudGVlOiBpYW0uSUdyYW50YWJsZSwgLi4uYWN0aW9uczogc3RyaW5nW10pOiBpYW0uR3JhbnQge1xuICAgIHJldHVybiBpYW0uR3JhbnQuYWRkVG9QcmluY2lwYWwoe1xuICAgICAgZ3JhbnRlZSxcbiAgICAgIGFjdGlvbnMsXG4gICAgICByZXNvdXJjZUFybnM6IGJ1aWxkSWRlbnRpdHlSZXNvdXJjZUFybnModGhpcywgdGhpcy5jcmVkZW50aWFsUHJvdmlkZXJBcm4sIFRPS0VOX1ZBVUxUX09BVVRIMl9QQVJFTlRfUkVTT1VSQ0VTKSxcbiAgICAgIHNjb3BlOiB0aGlzLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFtkaXNhYmxlLWF3c2xpbnQ6bm8tZ3JhbnRzXVxuICAgKi9cbiAgcHVibGljIGdyYW50UmVhZChncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudCB7XG4gICAgcmV0dXJuIGdyYW50UmVhZFdpdGhMaXN0KFxuICAgICAgdGhpcyxcbiAgICAgIGdyYW50ZWUsXG4gICAgICB0aGlzLmNyZWRlbnRpYWxQcm92aWRlckFybixcbiAgICAgIE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlcklkZW50aXR5UGVybXMuUkVBRF9QRVJNUyxcbiAgICAgIE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlcklkZW50aXR5UGVybXMuTElTVF9QRVJNUyxcbiAgICAgIFRPS0VOX1ZBVUxUX09BVVRIMl9QQVJFTlRfUkVTT1VSQ0VTLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogW2Rpc2FibGUtYXdzbGludDpuby1ncmFudHNdXG4gICAqL1xuICBwdWJsaWMgZ3JhbnRBZG1pbihncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudCB7XG4gICAgY29uc3QgYmVkcm9jayA9IHRoaXMuZ3JhbnQoZ3JhbnRlZSwgLi4uT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVySWRlbnRpdHlQZXJtcy5BRE1JTl9QRVJNUyk7XG4gICAgY29uc3Qgc2VjcmV0ID0gZ3JhbnRDcmVkZW50aWFsU2VjcmV0KFxuICAgICAgdGhpcyxcbiAgICAgIGdyYW50ZWUsXG4gICAgICB0aGlzLmNsaWVudFNlY3JldEFybixcbiAgICAgIFsuLi5UT0tFTl9WQVVMVF9DUkVERU5USUFMX1NFQ1JFVF9XUklURV9QRVJNU10sXG4gICAgKTtcbiAgICByZXR1cm4gc2VjcmV0ID8gYmVkcm9jay5jb21iaW5lKHNlY3JldCkgOiBiZWRyb2NrO1xuICB9XG5cbiAgLyoqXG4gICAqIFtkaXNhYmxlLWF3c2xpbnQ6bm8tZ3JhbnRzXVxuICAgKi9cbiAgcHVibGljIGdyYW50VXNlKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50IHtcbiAgICBjb25zdCBiZWRyb2NrID0gaWFtLkdyYW50LmFkZFRvUHJpbmNpcGFsKHtcbiAgICAgIGdyYW50ZWUsXG4gICAgICBhY3Rpb25zOiBbLi4uT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVySWRlbnRpdHlQZXJtcy5VU0VfUEVSTVNdLFxuICAgICAgcmVzb3VyY2VBcm5zOiBidWlsZElkZW50aXR5UmVzb3VyY2VBcm5zKFxuICAgICAgICB0aGlzLCB0aGlzLmNyZWRlbnRpYWxQcm92aWRlckFybiwgWy4uLlRPS0VOX1ZBVUxUX09BVVRIMl9QQVJFTlRfUkVTT1VSQ0VTLCAuLi5XT1JLTE9BRF9JREVOVElUWV9VU0VfUkVTT1VSQ0VTXSxcbiAgICAgICksXG4gICAgICBzY29wZTogdGhpcyxcbiAgICB9KTtcbiAgICBjb25zdCBzZWNyZXQgPSBncmFudENyZWRlbnRpYWxTZWNyZXQoXG4gICAgICB0aGlzLFxuICAgICAgZ3JhbnRlZSxcbiAgICAgIHRoaXMuY2xpZW50U2VjcmV0QXJuLFxuICAgICAgWy4uLlRPS0VOX1ZBVUxUX0NSRURFTlRJQUxfU0VDUkVUX1JFQURfUEVSTVNdLFxuICAgICk7XG4gICAgcmV0dXJuIHNlY3JldCA/IGJlZHJvY2suY29tYmluZShzZWNyZXQpIDogYmVkcm9jaztcbiAgfVxuXG4gIC8qKlxuICAgKiBbZGlzYWJsZS1hd3NsaW50Om5vLWdyYW50c11cbiAgICovXG4gIHB1YmxpYyBncmFudEZ1bGxBY2Nlc3MoZ3JhbnRlZTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnQge1xuICAgIGNvbnN0IGJlZHJvY2sgPSBpYW0uR3JhbnQuYWRkVG9QcmluY2lwYWwoe1xuICAgICAgZ3JhbnRlZSxcbiAgICAgIGFjdGlvbnM6IFsuLi5PQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJJZGVudGl0eVBlcm1zLkZVTExfQUNDRVNTX1BFUk1TXSxcbiAgICAgIHJlc291cmNlQXJuczogYnVpbGRJZGVudGl0eVJlc291cmNlQXJucyhcbiAgICAgICAgdGhpcywgdGhpcy5jcmVkZW50aWFsUHJvdmlkZXJBcm4sIFsuLi5UT0tFTl9WQVVMVF9PQVVUSDJfUEFSRU5UX1JFU09VUkNFUywgLi4uV09SS0xPQURfSURFTlRJVFlfVVNFX1JFU09VUkNFU10sXG4gICAgICApLFxuICAgICAgc2NvcGU6IHRoaXMsXG4gICAgfSk7XG4gICAgY29uc3Qgc2VjcmV0ID0gZ3JhbnRDcmVkZW50aWFsU2VjcmV0KFxuICAgICAgdGhpcyxcbiAgICAgIGdyYW50ZWUsXG4gICAgICB0aGlzLmNsaWVudFNlY3JldEFybixcbiAgICAgIFsuLi5UT0tFTl9WQVVMVF9DUkVERU5USUFMX1NFQ1JFVF9SRUFEX1BFUk1TLCAuLi5UT0tFTl9WQVVMVF9DUkVERU5USUFMX1NFQ1JFVF9XUklURV9QRVJNU10sXG4gICAgKTtcbiAgICByZXR1cm4gc2VjcmV0ID8gYmVkcm9jay5jb21iaW5lKHNlY3JldCkgOiBiZWRyb2NrO1xuICB9XG5cbiAgcHVibGljIGFic3RyYWN0IGJpbmRGb3JHYXRld2F5T0F1dGhUYXJnZXQoXG4gICAgc2NvcGVzOiBzdHJpbmdbXSxcbiAgICBjdXN0b21QYXJhbWV0ZXJzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSxcbiAgKTogR2F0ZXdheU9BdXRoMklkZW50aXR5QmluZGluZztcbn1cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gbmV3T0F1dGgyV2l0aEluY2x1ZGVkQ2xpZW50Q3JlZGVudGlhbHNPbmx5KFxuICBzY29wZTogQ29uc3RydWN0LFxuICBpZDogc3RyaW5nLFxuICB2ZW5kb3I6IE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlclZlbmRvcixcbiAgcHJvcHM6IE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlckZhY3RvcnlCYXNlUHJvcHMsXG4pOiBPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXIge1xuICByZXR1cm4gbmV3IE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlcihzY29wZSwgaWQsIHtcbiAgICBvQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJOYW1lOiBwcm9wcy5vQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJOYW1lLFxuICAgIHRhZ3M6IHByb3BzLnRhZ3MsXG4gICAgY3JlZGVudGlhbFByb3ZpZGVyVmVuZG9yOiB2ZW5kb3IsXG4gICAgb2F1dGgyUHJvdmlkZXJDb25maWdJbnB1dDoge1xuICAgICAgaW5jbHVkZWRPYXV0aDJQcm92aWRlckNvbmZpZzoge1xuICAgICAgICBjbGllbnRJZDogcHJvcHMuY2xpZW50SWQsXG4gICAgICAgIGNsaWVudFNlY3JldDogcHJvcHMuY2xpZW50U2VjcmV0LnVuc2FmZVVud3JhcCgpLFxuICAgICAgfSxcbiAgICB9LFxuICB9KTtcbn1cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gbmV3T0F1dGgyV2l0aEluY2x1ZGVkVGVuYW50KFxuICBzY29wZTogQ29uc3RydWN0LFxuICBpZDogc3RyaW5nLFxuICB2ZW5kb3I6IE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlclZlbmRvcixcbiAgcHJvcHM6IEluY2x1ZGVkT2F1dGgyVGVuYW50Q3JlZGVudGlhbFByb3ZpZGVyUHJvcHMsXG4pOiBPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXIge1xuICByZXR1cm4gbmV3IE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlcihzY29wZSwgaWQsIHtcbiAgICBvQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJOYW1lOiBwcm9wcy5vQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJOYW1lLFxuICAgIHRhZ3M6IHByb3BzLnRhZ3MsXG4gICAgY3JlZGVudGlhbFByb3ZpZGVyVmVuZG9yOiB2ZW5kb3IsXG4gICAgb2F1dGgyUHJvdmlkZXJDb25maWdJbnB1dDoge1xuICAgICAgaW5jbHVkZWRPYXV0aDJQcm92aWRlckNvbmZpZzoge1xuICAgICAgICBjbGllbnRJZDogcHJvcHMuY2xpZW50SWQsXG4gICAgICAgIGNsaWVudFNlY3JldDogcHJvcHMuY2xpZW50U2VjcmV0LnVuc2FmZVVud3JhcCgpLFxuICAgICAgICBhdXRob3JpemF0aW9uRW5kcG9pbnQ6IHByb3BzLmF1dGhvcml6YXRpb25FbmRwb2ludCxcbiAgICAgICAgaXNzdWVyOiBwcm9wcy5pc3N1ZXIsXG4gICAgICAgIHRva2VuRW5kcG9pbnQ6IHByb3BzLnRva2VuRW5kcG9pbnQsXG4gICAgICB9LFxuICAgIH0sXG4gIH0pO1xufVxuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xhc3NcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuLyoqXG4gKiBMMiBjb25zdHJ1Y3QgZm9yIGBBV1M6OkJlZHJvY2tBZ2VudENvcmU6Ok9BdXRoMkNyZWRlbnRpYWxQcm92aWRlcmAuXG4gKlxuICogUHJlZmVyIHRoZSBzdGF0aWMgZmFjdG9yaWVzIChmb3IgZXhhbXBsZSB7QGxpbmsgT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyLnVzaW5nU2xhY2t9KSBzbyB5b3Ugb25seSBwYXNzXG4gKiB0aGUgT0F1dGgyIHNldHRpbmdzIHRoYXQgYXBwbHkgdG8gdGhhdCB2ZW5kb3IuIFRvIGF0dGFjaCB0aGUgaWRlbnRpdHkgdG8gYSBnYXRld2F5IHRhcmdldCwgdXNlXG4gKiB7QGxpbmsgR2F0ZXdheUNyZWRlbnRpYWxQcm92aWRlci5mcm9tT2F1dGhJZGVudGl0eX0gd2l0aCB0aGlzIGNvbnN0cnVjdCwgb3JcbiAqIHtAbGluayBPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXIuYmluZEZvckdhdGV3YXlPQXV0aFRhcmdldH0gd2l0aCB7QGxpbmsgR2F0ZXdheUNyZWRlbnRpYWxQcm92aWRlci5mcm9tT2F1dGhJZGVudGl0eUFybn0uXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtYmVkcm9ja2FnZW50Y29yZS1vYXV0aDJjcmVkZW50aWFscHJvdmlkZXIuaHRtbFxuICogQHJlc291cmNlIEFXUzo6QmVkcm9ja0FnZW50Q29yZTo6T0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyXG4gKi9cbkBwcm9wZXJ0eUluamVjdGFibGVcbi8qKlxuICogVGhpcyBBUEkgaGFzIGJlZW4gZ3JhZHVhdGVkIHRvIHN0YWJsZS5cbiAqIEBkZXByZWNhdGVkIFVzZSB0aGUgZXF1aXZhbGVudCBjb25zdHJ1Y3QgZnJvbSBgYXdzLWNkay1saWIvYXdzLWJlZHJvY2thZ2VudGNvcmVgIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXIgZXh0ZW5kcyBPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJCYXNlIHtcbiAgLyoqIFVuaXF1ZWx5IGlkZW50aWZpZXMgdGhpcyBjbGFzcy4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQUk9QRVJUWV9JTkpFQ1RJT05fSUQ6IHN0cmluZyA9ICdAYXdzLWNkay5hd3MtYmVkcm9jay1hZ2VudGNvcmUtYWxwaGEuT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyJztcblxuICAvKipcbiAgICogQ3JlYXRlIGEgY3JlZGVudGlhbCBwcm92aWRlciBmb3IgU2xhY2sgT0F1dGgyLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyB1c2luZ1NsYWNrKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBTbGFja09BdXRoMkNyZWRlbnRpYWxQcm92aWRlclByb3BzKTogT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyIHtcbiAgICByZXR1cm4gbmV3IE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlcihzY29wZSwgaWQsIHtcbiAgICAgIG9BdXRoMkNyZWRlbnRpYWxQcm92aWRlck5hbWU6IHByb3BzLm9BdXRoMkNyZWRlbnRpYWxQcm92aWRlck5hbWUsXG4gICAgICB0YWdzOiBwcm9wcy50YWdzLFxuICAgICAgY3JlZGVudGlhbFByb3ZpZGVyVmVuZG9yOiBPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJWZW5kb3IuU0xBQ0ssXG4gICAgICBvYXV0aDJQcm92aWRlckNvbmZpZ0lucHV0OiB7IHNsYWNrT2F1dGgyUHJvdmlkZXJDb25maWc6IHsgY2xpZW50SWQ6IHByb3BzLmNsaWVudElkLCBjbGllbnRTZWNyZXQ6IHByb3BzLmNsaWVudFNlY3JldC51bnNhZmVVbndyYXAoKSB9IH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgY3JlZGVudGlhbCBwcm92aWRlciBmb3IgR2l0SHViIE9BdXRoMi5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgdXNpbmdHaXRodWIoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEdpdGh1Yk9BdXRoMkNyZWRlbnRpYWxQcm92aWRlclByb3BzKTogT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyIHtcbiAgICByZXR1cm4gbmV3IE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlcihzY29wZSwgaWQsIHtcbiAgICAgIG9BdXRoMkNyZWRlbnRpYWxQcm92aWRlck5hbWU6IHByb3BzLm9BdXRoMkNyZWRlbnRpYWxQcm92aWRlck5hbWUsXG4gICAgICB0YWdzOiBwcm9wcy50YWdzLFxuICAgICAgY3JlZGVudGlhbFByb3ZpZGVyVmVuZG9yOiBPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJWZW5kb3IuR0lUSFVCLFxuICAgICAgb2F1dGgyUHJvdmlkZXJDb25maWdJbnB1dDogeyBnaXRodWJPYXV0aDJQcm92aWRlckNvbmZpZzogeyBjbGllbnRJZDogcHJvcHMuY2xpZW50SWQsIGNsaWVudFNlY3JldDogcHJvcHMuY2xpZW50U2VjcmV0LnVuc2FmZVVud3JhcCgpIH0gfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBjcmVkZW50aWFsIHByb3ZpZGVyIGZvciBHb29nbGUgT0F1dGgyLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyB1c2luZ0dvb2dsZShzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogR29vZ2xlT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyUHJvcHMpOiBPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXIge1xuICAgIHJldHVybiBuZXcgT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyKHNjb3BlLCBpZCwge1xuICAgICAgb0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyTmFtZTogcHJvcHMub0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyTmFtZSxcbiAgICAgIHRhZ3M6IHByb3BzLnRhZ3MsXG4gICAgICBjcmVkZW50aWFsUHJvdmlkZXJWZW5kb3I6IE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlclZlbmRvci5HT09HTEUsXG4gICAgICBvYXV0aDJQcm92aWRlckNvbmZpZ0lucHV0OiB7IGdvb2dsZU9hdXRoMlByb3ZpZGVyQ29uZmlnOiB7IGNsaWVudElkOiBwcm9wcy5jbGllbnRJZCwgY2xpZW50U2VjcmV0OiBwcm9wcy5jbGllbnRTZWNyZXQudW5zYWZlVW53cmFwKCkgfSB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGNyZWRlbnRpYWwgcHJvdmlkZXIgZm9yIFNhbGVzZm9yY2UgT0F1dGgyLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyB1c2luZ1NhbGVzZm9yY2Uoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFNhbGVzZm9yY2VPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJQcm9wcyk6IE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlciB7XG4gICAgcmV0dXJuIG5ldyBPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXIoc2NvcGUsIGlkLCB7XG4gICAgICBvQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJOYW1lOiBwcm9wcy5vQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJOYW1lLFxuICAgICAgdGFnczogcHJvcHMudGFncyxcbiAgICAgIGNyZWRlbnRpYWxQcm92aWRlclZlbmRvcjogT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyVmVuZG9yLlNBTEVTRk9SQ0UsXG4gICAgICBvYXV0aDJQcm92aWRlckNvbmZpZ0lucHV0OiB7IHNhbGVzZm9yY2VPYXV0aDJQcm92aWRlckNvbmZpZzogeyBjbGllbnRJZDogcHJvcHMuY2xpZW50SWQsIGNsaWVudFNlY3JldDogcHJvcHMuY2xpZW50U2VjcmV0LnVuc2FmZVVud3JhcCgpIH0gfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBjcmVkZW50aWFsIHByb3ZpZGVyIGZvciBNaWNyb3NvZnQgKEVudHJhIElEKSBPQXV0aDIuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHVzaW5nTWljcm9zb2Z0KHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBNaWNyb3NvZnRPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJQcm9wcyk6IE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlciB7XG4gICAgcmV0dXJuIG5ldyBPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXIoc2NvcGUsIGlkLCB7XG4gICAgICBvQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJOYW1lOiBwcm9wcy5vQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJOYW1lLFxuICAgICAgdGFnczogcHJvcHMudGFncyxcbiAgICAgIGNyZWRlbnRpYWxQcm92aWRlclZlbmRvcjogT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyVmVuZG9yLk1JQ1JPU09GVCxcbiAgICAgIG9hdXRoMlByb3ZpZGVyQ29uZmlnSW5wdXQ6IHtcbiAgICAgICAgbWljcm9zb2Z0T2F1dGgyUHJvdmlkZXJDb25maWc6IHtcbiAgICAgICAgICBjbGllbnRJZDogcHJvcHMuY2xpZW50SWQsXG4gICAgICAgICAgY2xpZW50U2VjcmV0OiBwcm9wcy5jbGllbnRTZWNyZXQudW5zYWZlVW53cmFwKCksXG4gICAgICAgICAgdGVuYW50SWQ6IHByb3BzLnRlbmFudElkLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBjcmVkZW50aWFsIHByb3ZpZGVyIGZvciBBdGxhc3NpYW4gT0F1dGgyLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyB1c2luZ0F0bGFzc2lhbihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQXRsYXNzaWFuT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyUHJvcHMpOiBPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXIge1xuICAgIHJldHVybiBuZXcgT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyKHNjb3BlLCBpZCwge1xuICAgICAgb0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyTmFtZTogcHJvcHMub0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyTmFtZSxcbiAgICAgIHRhZ3M6IHByb3BzLnRhZ3MsXG4gICAgICBjcmVkZW50aWFsUHJvdmlkZXJWZW5kb3I6IE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlclZlbmRvci5BVExBU1NJQU4sXG4gICAgICBvYXV0aDJQcm92aWRlckNvbmZpZ0lucHV0OiB7IGF0bGFzc2lhbk9hdXRoMlByb3ZpZGVyQ29uZmlnOiB7IGNsaWVudElkOiBwcm9wcy5jbGllbnRJZCwgY2xpZW50U2VjcmV0OiBwcm9wcy5jbGllbnRTZWNyZXQudW5zYWZlVW53cmFwKCkgfSB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGNyZWRlbnRpYWwgcHJvdmlkZXIgZm9yIExpbmtlZEluIE9BdXRoMi5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgdXNpbmdMaW5rZWRpbihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogTGlua2VkaW5PQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJQcm9wcyk6IE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlciB7XG4gICAgcmV0dXJuIG5ldyBPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXIoc2NvcGUsIGlkLCB7XG4gICAgICBvQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJOYW1lOiBwcm9wcy5vQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJOYW1lLFxuICAgICAgdGFnczogcHJvcHMudGFncyxcbiAgICAgIGNyZWRlbnRpYWxQcm92aWRlclZlbmRvcjogT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyVmVuZG9yLkxJTktFRElOLFxuICAgICAgb2F1dGgyUHJvdmlkZXJDb25maWdJbnB1dDogeyBsaW5rZWRpbk9hdXRoMlByb3ZpZGVyQ29uZmlnOiB7IGNsaWVudElkOiBwcm9wcy5jbGllbnRJZCwgY2xpZW50U2VjcmV0OiBwcm9wcy5jbGllbnRTZWNyZXQudW5zYWZlVW53cmFwKCkgfSB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGNyZWRlbnRpYWwgcHJvdmlkZXIgZm9yIE9rdGEgT0F1dGgyIChgSW5jbHVkZWRPYXV0aDJQcm92aWRlckNvbmZpZ2ApLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iZWRyb2NrLWFnZW50Y29yZS9sYXRlc3QvZGV2Z3VpZGUvaWRlbnRpdHktaWRwLW9rdGEuaHRtbFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyB1c2luZ09rdGEoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEluY2x1ZGVkT2F1dGgyVGVuYW50Q3JlZGVudGlhbFByb3ZpZGVyUHJvcHMpOiBPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXIge1xuICAgIHJldHVybiBuZXdPQXV0aDJXaXRoSW5jbHVkZWRUZW5hbnQoc2NvcGUsIGlkLCBPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJWZW5kb3IuT0tUQSwgcHJvcHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGNyZWRlbnRpYWwgcHJvdmlkZXIgZm9yIE9uZUxvZ2luIE9BdXRoMiAoYEluY2x1ZGVkT2F1dGgyUHJvdmlkZXJDb25maWdgKS5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmVkcm9jay1hZ2VudGNvcmUvbGF0ZXN0L2Rldmd1aWRlL2lkZW50aXR5LWlkcC1vbmVsb2dpbi5odG1sXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHVzaW5nT25lTG9naW4oc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEluY2x1ZGVkT2F1dGgyVGVuYW50Q3JlZGVudGlhbFByb3ZpZGVyUHJvcHMpOiBPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXIge1xuICAgIHJldHVybiBuZXdPQXV0aDJXaXRoSW5jbHVkZWRUZW5hbnQoc2NvcGUsIGlkLCBPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJWZW5kb3IuT05FX0xPR0lOLCBwcm9wcyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgY3JlZGVudGlhbCBwcm92aWRlciBmb3IgUGluZ09uZSBPQXV0aDIgKGBJbmNsdWRlZE9hdXRoMlByb3ZpZGVyQ29uZmlnYCkuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JlZHJvY2stYWdlbnRjb3JlL2xhdGVzdC9kZXZndWlkZS9pZGVudGl0eS1pZHAtcGluZ2lkZW50aXR5Lmh0bWxcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgdXNpbmdQaW5nT25lKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBJbmNsdWRlZE9hdXRoMlRlbmFudENyZWRlbnRpYWxQcm92aWRlclByb3BzKTogT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyIHtcbiAgICByZXR1cm4gbmV3T0F1dGgyV2l0aEluY2x1ZGVkVGVuYW50KHNjb3BlLCBpZCwgT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyVmVuZG9yLlBJTkdfT05FLCBwcm9wcyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgY3JlZGVudGlhbCBwcm92aWRlciBmb3IgWCAoVHdpdHRlcikgT0F1dGgyIChgSW5jbHVkZWRPYXV0aDJQcm92aWRlckNvbmZpZ2ApLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iZWRyb2NrLWFnZW50Y29yZS9sYXRlc3QvZGV2Z3VpZGUvaWRlbnRpdHktaWRwLXguaHRtbFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyB1c2luZ1goc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFhPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJQcm9wcyk6IE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlciB7XG4gICAgcmV0dXJuIG5ld09BdXRoMldpdGhJbmNsdWRlZENsaWVudENyZWRlbnRpYWxzT25seShzY29wZSwgaWQsIE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlclZlbmRvci5YLCBwcm9wcyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgY3JlZGVudGlhbCBwcm92aWRlciBmb3IgRmFjZWJvb2sgT0F1dGgyIChgSW5jbHVkZWRPYXV0aDJQcm92aWRlckNvbmZpZ2ApLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iZWRyb2NrLWFnZW50Y29yZS9sYXRlc3QvZGV2Z3VpZGUvaWRlbnRpdHktaWRwLWZhY2Vib29rLmh0bWxcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgdXNpbmdGYWNlYm9vayhzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogRmFjZWJvb2tPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJQcm9wcyk6IE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlciB7XG4gICAgcmV0dXJuIG5ld09BdXRoMldpdGhJbmNsdWRlZENsaWVudENyZWRlbnRpYWxzT25seShzY29wZSwgaWQsIE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlclZlbmRvci5GQUNFQk9PSywgcHJvcHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGNyZWRlbnRpYWwgcHJvdmlkZXIgZm9yIFlhbmRleCBPQXV0aDIgKGBJbmNsdWRlZE9hdXRoMlByb3ZpZGVyQ29uZmlnYCkuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JlZHJvY2stYWdlbnRjb3JlL2xhdGVzdC9kZXZndWlkZS9pZGVudGl0eS1pZHAteWFuZGV4Lmh0bWxcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgdXNpbmdZYW5kZXgoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFlhbmRleE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlclByb3BzKTogT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyIHtcbiAgICByZXR1cm4gbmV3T0F1dGgyV2l0aEluY2x1ZGVkQ2xpZW50Q3JlZGVudGlhbHNPbmx5KHNjb3BlLCBpZCwgT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyVmVuZG9yLllBTkRFWCwgcHJvcHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGNyZWRlbnRpYWwgcHJvdmlkZXIgZm9yIFJlZGRpdCBPQXV0aDIgKGBJbmNsdWRlZE9hdXRoMlByb3ZpZGVyQ29uZmlnYCkuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JlZHJvY2stYWdlbnRjb3JlL2xhdGVzdC9kZXZndWlkZS9pZGVudGl0eS1pZHAtcmVkZGl0Lmh0bWxcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgdXNpbmdSZWRkaXQoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFJlZGRpdE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlclByb3BzKTogT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyIHtcbiAgICByZXR1cm4gbmV3T0F1dGgyV2l0aEluY2x1ZGVkQ2xpZW50Q3JlZGVudGlhbHNPbmx5KHNjb3BlLCBpZCwgT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyVmVuZG9yLlJFRERJVCwgcHJvcHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGNyZWRlbnRpYWwgcHJvdmlkZXIgZm9yIFpvb20gT0F1dGgyIChgSW5jbHVkZWRPYXV0aDJQcm92aWRlckNvbmZpZ2ApLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iZWRyb2NrLWFnZW50Y29yZS9sYXRlc3QvZGV2Z3VpZGUvaWRlbnRpdHktaWRwLXpvb20uaHRtbFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyB1c2luZ1pvb20oc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFpvb21PQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJQcm9wcyk6IE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlciB7XG4gICAgcmV0dXJuIG5ld09BdXRoMldpdGhJbmNsdWRlZENsaWVudENyZWRlbnRpYWxzT25seShzY29wZSwgaWQsIE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlclZlbmRvci5aT09NLCBwcm9wcyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgY3JlZGVudGlhbCBwcm92aWRlciBmb3IgVHdpdGNoIE9BdXRoMiAoYEluY2x1ZGVkT2F1dGgyUHJvdmlkZXJDb25maWdgKS5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmVkcm9jay1hZ2VudGNvcmUvbGF0ZXN0L2Rldmd1aWRlL2lkZW50aXR5LWlkcC10d2l0Y2guaHRtbFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyB1c2luZ1R3aXRjaChzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogVHdpdGNoT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyUHJvcHMpOiBPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXIge1xuICAgIHJldHVybiBuZXdPQXV0aDJXaXRoSW5jbHVkZWRDbGllbnRDcmVkZW50aWFsc09ubHkoc2NvcGUsIGlkLCBPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJWZW5kb3IuVFdJVENILCBwcm9wcyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgY3JlZGVudGlhbCBwcm92aWRlciBmb3IgU3BvdGlmeSBPQXV0aDIgKGBJbmNsdWRlZE9hdXRoMlByb3ZpZGVyQ29uZmlnYCkuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JlZHJvY2stYWdlbnRjb3JlL2xhdGVzdC9kZXZndWlkZS9pZGVudGl0eS1pZHAtc3BvdGlmeS5odG1sXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHVzaW5nU3BvdGlmeShzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogU3BvdGlmeU9BdXRoMkNyZWRlbnRpYWxQcm92aWRlclByb3BzKTogT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyIHtcbiAgICByZXR1cm4gbmV3T0F1dGgyV2l0aEluY2x1ZGVkQ2xpZW50Q3JlZGVudGlhbHNPbmx5KHNjb3BlLCBpZCwgT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyVmVuZG9yLlNQT1RJRlksIHByb3BzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBjcmVkZW50aWFsIHByb3ZpZGVyIGZvciBEcm9wYm94IE9BdXRoMiAoYEluY2x1ZGVkT2F1dGgyUHJvdmlkZXJDb25maWdgKS5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmVkcm9jay1hZ2VudGNvcmUvbGF0ZXN0L2Rldmd1aWRlL2lkZW50aXR5LWlkcC1kcm9wYm94Lmh0bWxcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgdXNpbmdEcm9wYm94KHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBEcm9wYm94T0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyUHJvcHMpOiBPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXIge1xuICAgIHJldHVybiBuZXdPQXV0aDJXaXRoSW5jbHVkZWRDbGllbnRDcmVkZW50aWFsc09ubHkoc2NvcGUsIGlkLCBPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJWZW5kb3IuRFJPUEJPWCwgcHJvcHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGNyZWRlbnRpYWwgcHJvdmlkZXIgZm9yIE5vdGlvbiBPQXV0aDIgKGBJbmNsdWRlZE9hdXRoMlByb3ZpZGVyQ29uZmlnYCkuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JlZHJvY2stYWdlbnRjb3JlL2xhdGVzdC9kZXZndWlkZS9pZGVudGl0eS1pZHAtbm90aW9uLmh0bWxcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgdXNpbmdOb3Rpb24oc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IE5vdGlvbk9BdXRoMkNyZWRlbnRpYWxQcm92aWRlclByb3BzKTogT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyIHtcbiAgICByZXR1cm4gbmV3T0F1dGgyV2l0aEluY2x1ZGVkQ2xpZW50Q3JlZGVudGlhbHNPbmx5KHNjb3BlLCBpZCwgT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyVmVuZG9yLk5PVElPTiwgcHJvcHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGNyZWRlbnRpYWwgcHJvdmlkZXIgZm9yIEh1YlNwb3QgT0F1dGgyIChgSW5jbHVkZWRPYXV0aDJQcm92aWRlckNvbmZpZ2ApLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iZWRyb2NrLWFnZW50Y29yZS9sYXRlc3QvZGV2Z3VpZGUvaWRlbnRpdHktaWRwLWh1YnNwb3QuaHRtbFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyB1c2luZ0h1YnNwb3Qoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEh1YnNwb3RPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJQcm9wcyk6IE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlciB7XG4gICAgcmV0dXJuIG5ld09BdXRoMldpdGhJbmNsdWRlZENsaWVudENyZWRlbnRpYWxzT25seShzY29wZSwgaWQsIE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlclZlbmRvci5IVUJTUE9ULCBwcm9wcyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgY3JlZGVudGlhbCBwcm92aWRlciBmb3IgQ3liZXJBcmsgT0F1dGgyIChgSW5jbHVkZWRPYXV0aDJQcm92aWRlckNvbmZpZ2ApLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iZWRyb2NrLWFnZW50Y29yZS9sYXRlc3QvZGV2Z3VpZGUvaWRlbnRpdHktaWRwLWN5YmVyYXJrLmh0bWxcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgdXNpbmdDeWJlckFyayhzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogSW5jbHVkZWRPYXV0aDJUZW5hbnRDcmVkZW50aWFsUHJvdmlkZXJQcm9wcyk6IE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlciB7XG4gICAgcmV0dXJuIG5ld09BdXRoMldpdGhJbmNsdWRlZFRlbmFudChzY29wZSwgaWQsIE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlclZlbmRvci5DWUJFUl9BUkssIHByb3BzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBjcmVkZW50aWFsIHByb3ZpZGVyIGZvciBGdXNpb25BdXRoIE9BdXRoMiAoYEluY2x1ZGVkT2F1dGgyUHJvdmlkZXJDb25maWdgKS5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmVkcm9jay1hZ2VudGNvcmUvbGF0ZXN0L2Rldmd1aWRlL2lkZW50aXR5LWlkcC1mdXNpb25hdXRoLmh0bWxcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgdXNpbmdGdXNpb25BdXRoKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBJbmNsdWRlZE9hdXRoMlRlbmFudENyZWRlbnRpYWxQcm92aWRlclByb3BzKTogT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyIHtcbiAgICByZXR1cm4gbmV3T0F1dGgyV2l0aEluY2x1ZGVkVGVuYW50KHNjb3BlLCBpZCwgT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyVmVuZG9yLkZVU0lPTl9BVVRILCBwcm9wcyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgY3JlZGVudGlhbCBwcm92aWRlciBmb3IgQXV0aDAgT0F1dGgyIChgSW5jbHVkZWRPYXV0aDJQcm92aWRlckNvbmZpZ2ApLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iZWRyb2NrLWFnZW50Y29yZS9sYXRlc3QvZGV2Z3VpZGUvaWRlbnRpdHktaWRwLWF1dGgwLmh0bWxcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgdXNpbmdBdXRoMChzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogSW5jbHVkZWRPYXV0aDJUZW5hbnRDcmVkZW50aWFsUHJvdmlkZXJQcm9wcyk6IE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlciB7XG4gICAgcmV0dXJuIG5ld09BdXRoMldpdGhJbmNsdWRlZFRlbmFudChzY29wZSwgaWQsIE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlclZlbmRvci5BVVRIMCwgcHJvcHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGNyZWRlbnRpYWwgcHJvdmlkZXIgZm9yIEFtYXpvbiBDb2duaXRvIE9BdXRoMiAoYEluY2x1ZGVkT2F1dGgyUHJvdmlkZXJDb25maWdgKS5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmVkcm9jay1hZ2VudGNvcmUvbGF0ZXN0L2Rldmd1aWRlL2lkZW50aXR5LWlkcC1jb2duaXRvLmh0bWxcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgdXNpbmdDb2duaXRvKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBJbmNsdWRlZE9hdXRoMlRlbmFudENyZWRlbnRpYWxQcm92aWRlclByb3BzKTogT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyIHtcbiAgICByZXR1cm4gbmV3T0F1dGgyV2l0aEluY2x1ZGVkVGVuYW50KHNjb3BlLCBpZCwgT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyVmVuZG9yLkNPR05JVE8sIHByb3BzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBjcmVkZW50aWFsIHByb3ZpZGVyIGZvciBhIGN1c3RvbSBPQXV0aDIgYXV0aG9yaXphdGlvbiBzZXJ2ZXIgKGRpc2NvdmVyeSBkb2N1bWVudCBvciBtZXRhZGF0YSkuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHVzaW5nQ3VzdG9tKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBDdXN0b21PQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJQcm9wcyk6IE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlciB7XG4gICAgYXNzZXJ0Q3VzdG9tT0F1dGgyRGlzY292ZXJ5WG9yKHNjb3BlLCBwcm9wcyk7XG5cbiAgICBjb25zdCBvYXV0aERpc2NvdmVyeTogQ2ZuT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyLk9hdXRoMkRpc2NvdmVyeVByb3BlcnR5ID1cbiAgICAgIHByb3BzLmRpc2NvdmVyeVVybCAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8geyBkaXNjb3ZlcnlVcmw6IHByb3BzLmRpc2NvdmVyeVVybCB9XG4gICAgICAgIDogeyBhdXRob3JpemF0aW9uU2VydmVyTWV0YWRhdGE6IHByb3BzLmF1dGhvcml6YXRpb25TZXJ2ZXJNZXRhZGF0YSEgfTtcblxuICAgIHJldHVybiBuZXcgT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyKHNjb3BlLCBpZCwge1xuICAgICAgb0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyTmFtZTogcHJvcHMub0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyTmFtZSxcbiAgICAgIHRhZ3M6IHByb3BzLnRhZ3MsXG4gICAgICBjcmVkZW50aWFsUHJvdmlkZXJWZW5kb3I6IE9BdXRoMkNyZWRlbnRpYWxQcm92aWRlclZlbmRvci5DVVNUT00sXG4gICAgICBvYXV0aDJQcm92aWRlckNvbmZpZ0lucHV0OiB7XG4gICAgICAgIGN1c3RvbU9hdXRoMlByb3ZpZGVyQ29uZmlnOiB7XG4gICAgICAgICAgY2xpZW50SWQ6IHByb3BzLmNsaWVudElkLFxuICAgICAgICAgIGNsaWVudFNlY3JldDogcHJvcHMuY2xpZW50U2VjcmV0LnVuc2FmZVVud3JhcCgpLFxuICAgICAgICAgIG9hdXRoRGlzY292ZXJ5LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnQgYW4gZXhpc3RpbmcgT0F1dGgyIGNyZWRlbnRpYWwgcHJvdmlkZXIuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21PQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJBdHRyaWJ1dGVzKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBhdHRyczogT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyQXR0cmlidXRlcyxcbiAgKTogSU9BdXRoMkNyZWRlbnRpYWxQcm92aWRlciB7XG4gICAgY2xhc3MgSW1wb3J0IGV4dGVuZHMgT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyQmFzZSB7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgY3JlZGVudGlhbFByb3ZpZGVyQXJuID0gYXR0cnMuY3JlZGVudGlhbFByb3ZpZGVyQXJuO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGNyZWRlbnRpYWxQcm92aWRlclZlbmRvciA9IGF0dHJzLmNyZWRlbnRpYWxQcm92aWRlclZlbmRvcjtcbiAgICAgIHB1YmxpYyByZWFkb25seSBjYWxsYmFja1VybCA9IGF0dHJzLmNhbGxiYWNrVXJsO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGNsaWVudFNlY3JldEFybiA9IGF0dHJzLmNsaWVudFNlY3JldEFybjtcbiAgICAgIHB1YmxpYyByZWFkb25seSBjcmVhdGVkVGltZSA9IGF0dHJzLmNyZWF0ZWRUaW1lO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGxhc3RVcGRhdGVkVGltZSA9IGF0dHJzLmxhc3RVcGRhdGVkVGltZTtcblxuICAgICAgY29uc3RydWN0b3IoczogQ29uc3RydWN0LCBpOiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIocywgaSk7XG4gICAgICB9XG5cbiAgICAgIHB1YmxpYyBiaW5kRm9yR2F0ZXdheU9BdXRoVGFyZ2V0KFxuICAgICAgICBzY29wZXM6IHN0cmluZ1tdLFxuICAgICAgICBjdXN0b21QYXJhbWV0ZXJzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSxcbiAgICAgICk6IEdhdGV3YXlPQXV0aDJJZGVudGl0eUJpbmRpbmcge1xuICAgICAgICBpZiAodGhpcy5jbGllbnRTZWNyZXRBcm4gPT0gbnVsbCB8fCB0aGlzLmNsaWVudFNlY3JldEFybiA9PT0gJycpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICAgICAgbGl0YE1pc3NpbmdPQXV0aDJDbGllbnRTZWNyZXRBcm5gLFxuICAgICAgICAgICAgJ2NsaWVudFNlY3JldEFybiBpcyBub3QgYXZhaWxhYmxlIG9uIHRoaXMgT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyIChpbXBvcnRlZCBwcm92aWRlcnMgbXVzdCBwYXNzIGNsaWVudFNlY3JldEFybiBpbiBmcm9tT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyQXR0cmlidXRlcykuJyxcbiAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHByb3ZpZGVyQXJuOiB0aGlzLmNyZWRlbnRpYWxQcm92aWRlckFybixcbiAgICAgICAgICBzZWNyZXRBcm46IHRoaXMuY2xpZW50U2VjcmV0QXJuLFxuICAgICAgICAgIHNjb3BlcyxcbiAgICAgICAgICBjdXN0b21QYXJhbWV0ZXJzLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3IEltcG9ydChzY29wZSwgaWQpO1xuICB9XG5cbiAgcHVibGljIHJlYWRvbmx5IGNyZWRlbnRpYWxQcm92aWRlckFybjogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgY3JlZGVudGlhbFByb3ZpZGVyVmVuZG9yOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGlzIE9BdXRoMiBjcmVkZW50aWFsIHByb3ZpZGVyLlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgb0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyTmFtZTogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgY2FsbGJhY2tVcmw/OiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBjcmVhdGVkVGltZT86IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGxhc3RVcGRhdGVkVGltZT86IHN0cmluZztcblxuICBwcml2YXRlIF9jbGllbnRTZWNyZXRBcm4/OiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX19yZXNvdXJjZTogQ2ZuT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyO1xuXG4gIHB1YmxpYyBnZXQgY2xpZW50U2VjcmV0QXJuKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHRoaXMuX2NsaWVudFNlY3JldEFybiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9jbGllbnRTZWNyZXRBcm4gPSBUb2tlbi5hc1N0cmluZyh0aGlzLl9fcmVzb3VyY2UuYXR0ckNsaWVudFNlY3JldEFybik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9jbGllbnRTZWNyZXRBcm47XG4gIH1cblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIHBoeXNpY2FsTmFtZTogcHJvcHMub0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyTmFtZVxuICAgICAgICA/PyBMYXp5LnN0cmluZyh7XG4gICAgICAgICAgcHJvZHVjZTogKCkgPT4gTmFtZXMudW5pcXVlUmVzb3VyY2VOYW1lKHRoaXMsIHsgbWF4TGVuZ3RoOiAxMjggfSksXG4gICAgICAgIH0pLFxuICAgIH0pO1xuXG4gICAgYWRkQ29uc3RydWN0TWV0YWRhdGEodGhpcywgcHJvcHMpO1xuXG4gICAgdGhpcy5vQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJOYW1lID0gdGhpcy5waHlzaWNhbE5hbWU7XG4gICAgdGhpcy5jcmVkZW50aWFsUHJvdmlkZXJWZW5kb3IgPSBwcm9wcy5jcmVkZW50aWFsUHJvdmlkZXJWZW5kb3I7XG5cbiAgICB0aHJvd0lmSW52YWxpZCh2YWxpZGF0ZUNyZWRlbnRpYWxQcm92aWRlck5hbWUsIHRoaXMub0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyTmFtZSwgdGhpcyk7XG4gICAgdGhyb3dJZkludmFsaWQodmFsaWRhdGVDcmVkZW50aWFsUHJvdmlkZXJUYWdzLCBwcm9wcy50YWdzLCB0aGlzKTtcblxuICAgIGNvbnN0IGNmblByb3BzOiBDZm5PQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJQcm9wcyA9IHtcbiAgICAgIG5hbWU6IHRoaXMub0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyTmFtZSxcbiAgICAgIGNyZWRlbnRpYWxQcm92aWRlclZlbmRvcjogcHJvcHMuY3JlZGVudGlhbFByb3ZpZGVyVmVuZG9yLFxuICAgICAgb2F1dGgyUHJvdmlkZXJDb25maWdJbnB1dDogcHJvcHMub2F1dGgyUHJvdmlkZXJDb25maWdJbnB1dCxcbiAgICAgIHRhZ3M6IHByb3BzLnRhZ3MgJiYgT2JqZWN0LmtleXMocHJvcHMudGFncykubGVuZ3RoID4gMFxuICAgICAgICA/IE9iamVjdC5lbnRyaWVzKHByb3BzLnRhZ3MpLm1hcCgoW2tleSwgdmFsdWVdKSA9PiAoeyBrZXksIHZhbHVlIH0pKVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICB9O1xuXG4gICAgdGhpcy5fX3Jlc291cmNlID0gbmV3IENmbk9BdXRoMkNyZWRlbnRpYWxQcm92aWRlcih0aGlzLCAnUmVzb3VyY2UnLCBjZm5Qcm9wcyk7XG5cbiAgICB0aGlzLmNyZWRlbnRpYWxQcm92aWRlckFybiA9IHRoaXMuX19yZXNvdXJjZS5hdHRyQ3JlZGVudGlhbFByb3ZpZGVyQXJuO1xuICAgIHRoaXMuY2FsbGJhY2tVcmwgPSB0aGlzLl9fcmVzb3VyY2UuYXR0ckNhbGxiYWNrVXJsO1xuICAgIHRoaXMuY3JlYXRlZFRpbWUgPSB0aGlzLl9fcmVzb3VyY2UuYXR0ckNyZWF0ZWRUaW1lO1xuICAgIHRoaXMubGFzdFVwZGF0ZWRUaW1lID0gdGhpcy5fX3Jlc291cmNlLmF0dHJMYXN0VXBkYXRlZFRpbWU7XG4gIH1cblxuICAvKipcbiAgICogQVJOcyBhbmQgT0F1dGggc2NvcGVzIGZvciB7QGxpbmsgR2F0ZXdheUNyZWRlbnRpYWxQcm92aWRlci5mcm9tT2F1dGhJZGVudGl0eX0gLyB7QGxpbmsgR2F0ZXdheUNyZWRlbnRpYWxQcm92aWRlci5mcm9tT2F1dGhJZGVudGl0eUFybn0uXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZXMgT0F1dGggc2NvcGVzIHRoZSBnYXRld2F5IHRhcmdldCBzaG91bGQgcmVxdWVzdCAoc2VlIHZlbmRvciBkb2N1bWVudGF0aW9uKS5cbiAgICogQHBhcmFtIGN1c3RvbVBhcmFtZXRlcnMgT3B0aW9uYWwgY3VzdG9tIHBhcmFtZXRlcnMgZm9yIHRoZSBPQXV0aCBmbG93LlxuICAgKi9cbiAgQE1ldGhvZE1ldGFkYXRhKClcbiAgcHVibGljIGJpbmRGb3JHYXRld2F5T0F1dGhUYXJnZXQoXG4gICAgc2NvcGVzOiBzdHJpbmdbXSxcbiAgICBjdXN0b21QYXJhbWV0ZXJzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSxcbiAgKTogR2F0ZXdheU9BdXRoMklkZW50aXR5QmluZGluZyB7XG4gICAgY29uc3Qgc2VjcmV0QXJuID0gdGhpcy5jbGllbnRTZWNyZXRBcm47XG4gICAgaWYgKHNlY3JldEFybiA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICBsaXRgTWlzc2luZ09BdXRoMkNsaWVudFNlY3JldEFybmAsXG4gICAgICAgICdjbGllbnRTZWNyZXRBcm4gaXMgbm90IGF2YWlsYWJsZSDigJQgdGhlIENsb3VkRm9ybWF0aW9uIGF0dHJpYnV0ZSBoYXMgbm90IHJlc29sdmVkIHlldC4nLFxuICAgICAgICB0aGlzLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb3ZpZGVyQXJuOiB0aGlzLmNyZWRlbnRpYWxQcm92aWRlckFybixcbiAgICAgIHNlY3JldEFybixcbiAgICAgIHNjb3BlcyxcbiAgICAgIGN1c3RvbVBhcmFtZXRlcnMsXG4gICAgfTtcbiAgfVxufVxuIl19
|
package/lib/identity/perms.d.ts
CHANGED
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
* `bedrock-agentcore` data-plane actions and read access to the backing secret.
|
|
19
19
|
*
|
|
20
20
|
* @see https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/security-iam-awsmanpol.html
|
|
21
|
+
* @deprecated Use the equivalent construct from `aws-cdk-lib/aws-bedrockagentcore` instead.
|
|
21
22
|
*/
|
|
22
23
|
export declare const TOKEN_VAULT_CREDENTIAL_SECRET_READ_PERMS: readonly ["secretsmanager:GetSecretValue", "secretsmanager:DescribeSecret"];
|
|
23
24
|
/**
|
|
@@ -26,12 +27,14 @@ export declare const TOKEN_VAULT_CREDENTIAL_SECRET_READ_PERMS: readonly ["secret
|
|
|
26
27
|
* Create and Update control plane operations (e.g. CreateApiKeyCredentialProvider,
|
|
27
28
|
* UpdateApiKeyCredentialProvider) store/update the credential in Secrets Manager,
|
|
28
29
|
* requiring PutSecretValue on the backing secret.
|
|
30
|
+
* @deprecated Use the equivalent construct from `aws-cdk-lib/aws-bedrockagentcore` instead.
|
|
29
31
|
*/
|
|
30
32
|
export declare const TOKEN_VAULT_CREDENTIAL_SECRET_WRITE_PERMS: readonly ["secretsmanager:PutSecretValue"];
|
|
31
33
|
/**
|
|
32
34
|
* IAM actions for AgentCore API key credential providers (Token Vault).
|
|
33
35
|
*
|
|
34
36
|
* @see https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonbedrockagentcore.html
|
|
37
|
+
* @deprecated Use the equivalent construct from `aws-cdk-lib/aws-bedrockagentcore` instead.
|
|
35
38
|
*/
|
|
36
39
|
export declare class ApiKeyCredentialProviderIdentityPerms {
|
|
37
40
|
/**
|
|
@@ -60,6 +63,7 @@ export declare class ApiKeyCredentialProviderIdentityPerms {
|
|
|
60
63
|
* IAM actions for AgentCore OAuth2 credential providers (Token Vault).
|
|
61
64
|
*
|
|
62
65
|
* @see https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonbedrockagentcore.html
|
|
66
|
+
* @deprecated Use the equivalent construct from `aws-cdk-lib/aws-bedrockagentcore` instead.
|
|
63
67
|
*/
|
|
64
68
|
export declare class OAuth2CredentialProviderIdentityPerms {
|
|
65
69
|
/**
|
|
@@ -88,6 +92,7 @@ export declare class OAuth2CredentialProviderIdentityPerms {
|
|
|
88
92
|
* IAM actions for AgentCore workload identities.
|
|
89
93
|
*
|
|
90
94
|
* @see https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonbedrockagentcore.html
|
|
95
|
+
* @deprecated Use the equivalent construct from `aws-cdk-lib/aws-bedrockagentcore` instead.
|
|
91
96
|
*/
|
|
92
97
|
export declare class WorkloadIdentityPerms {
|
|
93
98
|
/**
|
package/lib/identity/perms.js
CHANGED
|
@@ -22,6 +22,7 @@ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
|
22
22
|
* `bedrock-agentcore` data-plane actions and read access to the backing secret.
|
|
23
23
|
*
|
|
24
24
|
* @see https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/security-iam-awsmanpol.html
|
|
25
|
+
* @deprecated Use the equivalent construct from `aws-cdk-lib/aws-bedrockagentcore` instead.
|
|
25
26
|
*/
|
|
26
27
|
exports.TOKEN_VAULT_CREDENTIAL_SECRET_READ_PERMS = [
|
|
27
28
|
'secretsmanager:GetSecretValue',
|
|
@@ -33,6 +34,7 @@ exports.TOKEN_VAULT_CREDENTIAL_SECRET_READ_PERMS = [
|
|
|
33
34
|
* Create and Update control plane operations (e.g. CreateApiKeyCredentialProvider,
|
|
34
35
|
* UpdateApiKeyCredentialProvider) store/update the credential in Secrets Manager,
|
|
35
36
|
* requiring PutSecretValue on the backing secret.
|
|
37
|
+
* @deprecated Use the equivalent construct from `aws-cdk-lib/aws-bedrockagentcore` instead.
|
|
36
38
|
*/
|
|
37
39
|
exports.TOKEN_VAULT_CREDENTIAL_SECRET_WRITE_PERMS = [
|
|
38
40
|
'secretsmanager:PutSecretValue',
|
|
@@ -41,9 +43,10 @@ exports.TOKEN_VAULT_CREDENTIAL_SECRET_WRITE_PERMS = [
|
|
|
41
43
|
* IAM actions for AgentCore API key credential providers (Token Vault).
|
|
42
44
|
*
|
|
43
45
|
* @see https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonbedrockagentcore.html
|
|
46
|
+
* @deprecated Use the equivalent construct from `aws-cdk-lib/aws-bedrockagentcore` instead.
|
|
44
47
|
*/
|
|
45
48
|
class ApiKeyCredentialProviderIdentityPerms {
|
|
46
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.ApiKeyCredentialProviderIdentityPerms", version: "2.
|
|
49
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.ApiKeyCredentialProviderIdentityPerms", version: "2.258.0-alpha.0" };
|
|
47
50
|
/**
|
|
48
51
|
* Read a single API key credential provider definition.
|
|
49
52
|
*/
|
|
@@ -83,9 +86,10 @@ exports.ApiKeyCredentialProviderIdentityPerms = ApiKeyCredentialProviderIdentity
|
|
|
83
86
|
* IAM actions for AgentCore OAuth2 credential providers (Token Vault).
|
|
84
87
|
*
|
|
85
88
|
* @see https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonbedrockagentcore.html
|
|
89
|
+
* @deprecated Use the equivalent construct from `aws-cdk-lib/aws-bedrockagentcore` instead.
|
|
86
90
|
*/
|
|
87
91
|
class OAuth2CredentialProviderIdentityPerms {
|
|
88
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.OAuth2CredentialProviderIdentityPerms", version: "2.
|
|
92
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.OAuth2CredentialProviderIdentityPerms", version: "2.258.0-alpha.0" };
|
|
89
93
|
/**
|
|
90
94
|
* Read a single OAuth2 credential provider definition.
|
|
91
95
|
*/
|
|
@@ -128,9 +132,10 @@ exports.OAuth2CredentialProviderIdentityPerms = OAuth2CredentialProviderIdentity
|
|
|
128
132
|
* IAM actions for AgentCore workload identities.
|
|
129
133
|
*
|
|
130
134
|
* @see https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonbedrockagentcore.html
|
|
135
|
+
* @deprecated Use the equivalent construct from `aws-cdk-lib/aws-bedrockagentcore` instead.
|
|
131
136
|
*/
|
|
132
137
|
class WorkloadIdentityPerms {
|
|
133
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.WorkloadIdentityPerms", version: "2.
|
|
138
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.WorkloadIdentityPerms", version: "2.258.0-alpha.0" };
|
|
134
139
|
/**
|
|
135
140
|
* Read a single workload identity.
|
|
136
141
|
*/
|
|
@@ -175,4 +180,4 @@ class WorkloadIdentityPerms {
|
|
|
175
180
|
constructor() { }
|
|
176
181
|
}
|
|
177
182
|
exports.WorkloadIdentityPerms = WorkloadIdentityPerms;
|
|
178
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJwZXJtcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUE7Ozs7Ozs7Ozs7O0dBV0c7QUFFSDs7Ozs7Ozs7R0FRRztBQUNVLFFBQUEsd0NBQXdDLEdBQUc7SUFDdEQsK0JBQStCO0lBQy9CLCtCQUErQjtDQUN2QixDQUFDO0FBRVg7Ozs7OztHQU1HO0FBQ1UsUUFBQSx5Q0FBeUMsR0FBRztJQUN2RCwrQkFBK0I7Q0FDdkIsQ0FBQztBQUVYOzs7O0dBSUc7QUFDSCxNQUFhLHFDQUFxQzs7SUFDaEQ7O09BRUc7SUFDSSxNQUFNLENBQVUsVUFBVSxHQUFhLENBQUMsK0NBQStDLENBQUMsQ0FBQztJQUVoRzs7T0FFRztJQUNJLE1BQU0sQ0FBVSxVQUFVLEdBQWEsQ0FBQyxpREFBaUQsQ0FBQyxDQUFDO0lBRWxHOztPQUVHO0lBQ0ksTUFBTSxDQUFVLFdBQVcsR0FBYTtRQUM3QyxrREFBa0Q7UUFDbEQsK0NBQStDO1FBQy9DLGtEQUFrRDtRQUNsRCxrREFBa0Q7S0FDbkQsQ0FBQztJQUVGOztPQUVHO0lBQ0ksTUFBTSxDQUFVLFNBQVMsR0FBYSxDQUFDLHFDQUFxQyxDQUFDLENBQUM7SUFFckY7O09BRUc7SUFDSSxNQUFNLENBQVUsaUJBQWlCLEdBQWE7UUFDbkQsR0FBRyxJQUFJLEdBQUcsQ0FBQztZQUNULEdBQUcscUNBQXFDLENBQUMsVUFBVTtZQUNuRCxHQUFHLHFDQUFxQyxDQUFDLFVBQVU7WUFDbkQsR0FBRyxxQ0FBcUMsQ0FBQyxXQUFXO1lBQ3BELEdBQUcscUNBQXFDLENBQUMsU0FBUztTQUNuRCxDQUFDO0tBQ0gsQ0FBQztJQUVGLGlCQUF3Qjs7QUF0QzFCLHNGQXVDQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFhLHFDQUFxQzs7SUFDaEQ7O09BRUc7SUFDSSxNQUFNLENBQVUsVUFBVSxHQUFhLENBQUMsK0NBQStDLENBQUMsQ0FBQztJQUVoRzs7T0FFRztJQUNJLE1BQU0sQ0FBVSxVQUFVLEdBQWEsQ0FBQyxpREFBaUQsQ0FBQyxDQUFDO0lBRWxHOztPQUVHO0lBQ0ksTUFBTSxDQUFVLFdBQVcsR0FBYTtRQUM3QyxrREFBa0Q7UUFDbEQsK0NBQStDO1FBQy9DLGtEQUFrRDtRQUNsRCxrREFBa0Q7S0FDbkQsQ0FBQztJQUVGOztPQUVHO0lBQ0ksTUFBTSxDQUFVLFNBQVMsR0FBYTtRQUMzQywwQ0FBMEM7UUFDMUMsNkNBQTZDO0tBQzlDLENBQUM7SUFFRjs7T0FFRztJQUNJLE1BQU0sQ0FBVSxpQkFBaUIsR0FBYTtRQUNuRCxHQUFHLElBQUksR0FBRyxDQUFDO1lBQ1QsR0FBRyxxQ0FBcUMsQ0FBQyxVQUFVO1lBQ25ELEdBQUcscUNBQXFDLENBQUMsVUFBVTtZQUNuRCxHQUFHLHFDQUFxQyxDQUFDLFdBQVc7WUFDcEQsR0FBRyxxQ0FBcUMsQ0FBQyxTQUFTO1NBQ25ELENBQUM7S0FDSCxDQUFDO0lBRUYsaUJBQXdCOztBQXpDMUIsc0ZBMENDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQWEscUJBQXFCOztJQUNoQzs7T0FFRztJQUNJLE1BQU0sQ0FBVSxVQUFVLEdBQWEsQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO0lBRXhGOztPQUVHO0lBQ0ksTUFBTSxDQUFVLFVBQVUsR0FBYSxDQUFDLDBDQUEwQyxDQUFDLENBQUM7SUFFM0Y7O09BRUc7SUFDSSxNQUFNLENBQVUsV0FBVyxHQUFhO1FBQzdDLDBDQUEwQztRQUMxQyx1Q0FBdUM7UUFDdkMsMENBQTBDO1FBQzFDLDBDQUEwQztLQUMzQyxDQUFDO0lBRUY7Ozs7Ozs7T0FPRztJQUNJLE1BQU0sQ0FBVSxTQUFTLEdBQWE7UUFDM0MsMENBQTBDO1FBQzFDLGdEQUFnRDtRQUNoRCxtREFBbUQ7S0FDcEQsQ0FBQztJQUVGOztPQUVHO0lBQ0ksTUFBTSxDQUFVLGlCQUFpQixHQUFhO1FBQ25ELEdBQUcsSUFBSSxHQUFHLENBQUM7WUFDVCxHQUFHLHFCQUFxQixDQUFDLFVBQVU7WUFDbkMsR0FBRyxxQkFBcUIsQ0FBQyxVQUFVO1lBQ25DLEdBQUcscUJBQXFCLENBQUMsV0FBVztZQUNwQyxHQUFHLHFCQUFxQixDQUFDLFNBQVM7U0FDbkMsQ0FBQztLQUNILENBQUM7SUFFRixpQkFBd0I7O0FBL0MxQixzREFnREMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqICBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKS4gWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuICogIHdpdGggdGhlIExpY2Vuc2UuIEEgY29weSBvZiB0aGUgTGljZW5zZSBpcyBsb2NhdGVkIGF0XG4gKlxuICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiAgb3IgaW4gdGhlICdsaWNlbnNlJyBmaWxlIGFjY29tcGFueWluZyB0aGlzIGZpbGUuIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAnQVMgSVMnIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVNcbiAqICBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9uc1xuICogIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG4vKipcbiAqIFNlY3JldHMgTWFuYWdlciBhY3Rpb25zIHRvIHJlYWQgY3JlZGVudGlhbCBtYXRlcmlhbCBzdG9yZWQgZm9yIFRva2VuIFZhdWx0IHByb3ZpZGVycy5cbiAqXG4gKiBPdXRib3VuZCBnYXRld2F5IHRhcmdldHMgYXBwbHkgdGhlIHNhbWUgYWN0aW9ucyBvbiB0aGUgc2VjcmV0IEFSTjsgcHJpbmNpcGFscyB0aGF0IGNhbGxcbiAqIGBHZXRSZXNvdXJjZUFwaUtleWAgLyBgR2V0UmVzb3VyY2VPYXV0aDJUb2tlbmAgKG9yIHRoYXQgbWlycm9yIGdhdGV3YXkgYmVoYXZpb3IpIHR5cGljYWxseSBuZWVkIGJvdGhcbiAqIGBiZWRyb2NrLWFnZW50Y29yZWAgZGF0YS1wbGFuZSBhY3Rpb25zIGFuZCByZWFkIGFjY2VzcyB0byB0aGUgYmFja2luZyBzZWNyZXQuXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmVkcm9jay1hZ2VudGNvcmUvbGF0ZXN0L2Rldmd1aWRlL3NlY3VyaXR5LWlhbS1hd3NtYW5wb2wuaHRtbFxuICovXG5leHBvcnQgY29uc3QgVE9LRU5fVkFVTFRfQ1JFREVOVElBTF9TRUNSRVRfUkVBRF9QRVJNUyA9IFtcbiAgJ3NlY3JldHNtYW5hZ2VyOkdldFNlY3JldFZhbHVlJyxcbiAgJ3NlY3JldHNtYW5hZ2VyOkRlc2NyaWJlU2VjcmV0Jyxcbl0gYXMgY29uc3Q7XG5cbi8qKlxuICogU2VjcmV0cyBNYW5hZ2VyIGFjdGlvbnMgdG8gd3JpdGUgY3JlZGVudGlhbCBtYXRlcmlhbCBmb3IgVG9rZW4gVmF1bHQgcHJvdmlkZXJzLlxuICpcbiAqIENyZWF0ZSBhbmQgVXBkYXRlIGNvbnRyb2wgcGxhbmUgb3BlcmF0aW9ucyAoZS5nLiBDcmVhdGVBcGlLZXlDcmVkZW50aWFsUHJvdmlkZXIsXG4gKiBVcGRhdGVBcGlLZXlDcmVkZW50aWFsUHJvdmlkZXIpIHN0b3JlL3VwZGF0ZSB0aGUgY3JlZGVudGlhbCBpbiBTZWNyZXRzIE1hbmFnZXIsXG4gKiByZXF1aXJpbmcgUHV0U2VjcmV0VmFsdWUgb24gdGhlIGJhY2tpbmcgc2VjcmV0LlxuICovXG5leHBvcnQgY29uc3QgVE9LRU5fVkFVTFRfQ1JFREVOVElBTF9TRUNSRVRfV1JJVEVfUEVSTVMgPSBbXG4gICdzZWNyZXRzbWFuYWdlcjpQdXRTZWNyZXRWYWx1ZScsXG5dIGFzIGNvbnN0O1xuXG4vKipcbiAqIElBTSBhY3Rpb25zIGZvciBBZ2VudENvcmUgQVBJIGtleSBjcmVkZW50aWFsIHByb3ZpZGVycyAoVG9rZW4gVmF1bHQpLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3NlcnZpY2UtYXV0aG9yaXphdGlvbi9sYXRlc3QvcmVmZXJlbmNlL2xpc3RfYW1hem9uYmVkcm9ja2FnZW50Y29yZS5odG1sXG4gKi9cbmV4cG9ydCBjbGFzcyBBcGlLZXlDcmVkZW50aWFsUHJvdmlkZXJJZGVudGl0eVBlcm1zIHtcbiAgLyoqXG4gICAqIFJlYWQgYSBzaW5nbGUgQVBJIGtleSBjcmVkZW50aWFsIHByb3ZpZGVyIGRlZmluaXRpb24uXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFJFQURfUEVSTVM6IHN0cmluZ1tdID0gWydiZWRyb2NrLWFnZW50Y29yZTpHZXRBcGlLZXlDcmVkZW50aWFsUHJvdmlkZXInXTtcblxuICAvKipcbiAgICogTGlzdCBBUEkga2V5IGNyZWRlbnRpYWwgcHJvdmlkZXJzIChyZXNvdXJjZS1zY29wZWQgcGVyIElBTSBzZXJ2aWNlIGF1dGhvcml6YXRpb24gcmVmZXJlbmNlKS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTElTVF9QRVJNUzogc3RyaW5nW10gPSBbJ2JlZHJvY2stYWdlbnRjb3JlOkxpc3RBcGlLZXlDcmVkZW50aWFsUHJvdmlkZXJzJ107XG5cbiAgLyoqXG4gICAqIENvbnRyb2wgcGxhbmUgcGVybWlzc2lvbnMgdG8gY3JlYXRlLCByZWFkLCB1cGRhdGUsIGFuZCBkZWxldGUgdGhpcyBwcm92aWRlci5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQURNSU5fUEVSTVM6IHN0cmluZ1tdID0gW1xuICAgICdiZWRyb2NrLWFnZW50Y29yZTpDcmVhdGVBcGlLZXlDcmVkZW50aWFsUHJvdmlkZXInLFxuICAgICdiZWRyb2NrLWFnZW50Y29yZTpHZXRBcGlLZXlDcmVkZW50aWFsUHJvdmlkZXInLFxuICAgICdiZWRyb2NrLWFnZW50Y29yZTpVcGRhdGVBcGlLZXlDcmVkZW50aWFsUHJvdmlkZXInLFxuICAgICdiZWRyb2NrLWFnZW50Y29yZTpEZWxldGVBcGlLZXlDcmVkZW50aWFsUHJvdmlkZXInLFxuICBdO1xuXG4gIC8qKlxuICAgKiBEYXRhIHBsYW5lIHBlcm1pc3Npb25zIHRvIHJldHJpZXZlIHRoZSBBUEkga2V5IG1hdGVyaWFsIGZvciBvdXRib3VuZCBjYWxscy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVVNFX1BFUk1TOiBzdHJpbmdbXSA9IFsnYmVkcm9jay1hZ2VudGNvcmU6R2V0UmVzb3VyY2VBcGlLZXknXTtcblxuICAvKipcbiAgICogQWxsIEFQSSBrZXkgY3JlZGVudGlhbCBwcm92aWRlciBhY3Rpb25zIHVzZWQgYnkgdGhlIEwyIGdyYW50IGhlbHBlcnMuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEZVTExfQUNDRVNTX1BFUk1TOiBzdHJpbmdbXSA9IFtcbiAgICAuLi5uZXcgU2V0KFtcbiAgICAgIC4uLkFwaUtleUNyZWRlbnRpYWxQcm92aWRlcklkZW50aXR5UGVybXMuUkVBRF9QRVJNUyxcbiAgICAgIC4uLkFwaUtleUNyZWRlbnRpYWxQcm92aWRlcklkZW50aXR5UGVybXMuTElTVF9QRVJNUyxcbiAgICAgIC4uLkFwaUtleUNyZWRlbnRpYWxQcm92aWRlcklkZW50aXR5UGVybXMuQURNSU5fUEVSTVMsXG4gICAgICAuLi5BcGlLZXlDcmVkZW50aWFsUHJvdmlkZXJJZGVudGl0eVBlcm1zLlVTRV9QRVJNUyxcbiAgICBdKSxcbiAgXTtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge31cbn1cblxuLyoqXG4gKiBJQU0gYWN0aW9ucyBmb3IgQWdlbnRDb3JlIE9BdXRoMiBjcmVkZW50aWFsIHByb3ZpZGVycyAoVG9rZW4gVmF1bHQpLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3NlcnZpY2UtYXV0aG9yaXphdGlvbi9sYXRlc3QvcmVmZXJlbmNlL2xpc3RfYW1hem9uYmVkcm9ja2FnZW50Y29yZS5odG1sXG4gKi9cbmV4cG9ydCBjbGFzcyBPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJJZGVudGl0eVBlcm1zIHtcbiAgLyoqXG4gICAqIFJlYWQgYSBzaW5nbGUgT0F1dGgyIGNyZWRlbnRpYWwgcHJvdmlkZXIgZGVmaW5pdGlvbi5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUkVBRF9QRVJNUzogc3RyaW5nW10gPSBbJ2JlZHJvY2stYWdlbnRjb3JlOkdldE9hdXRoMkNyZWRlbnRpYWxQcm92aWRlciddO1xuXG4gIC8qKlxuICAgKiBMaXN0IE9BdXRoMiBjcmVkZW50aWFsIHByb3ZpZGVycyAocmVzb3VyY2Utc2NvcGVkIHBlciBJQU0gc2VydmljZSBhdXRob3JpemF0aW9uIHJlZmVyZW5jZSkuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IExJU1RfUEVSTVM6IHN0cmluZ1tdID0gWydiZWRyb2NrLWFnZW50Y29yZTpMaXN0T2F1dGgyQ3JlZGVudGlhbFByb3ZpZGVycyddO1xuXG4gIC8qKlxuICAgKiBDb250cm9sIHBsYW5lIHBlcm1pc3Npb25zIHRvIGNyZWF0ZSwgcmVhZCwgdXBkYXRlLCBhbmQgZGVsZXRlIHRoaXMgcHJvdmlkZXIuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEFETUlOX1BFUk1TOiBzdHJpbmdbXSA9IFtcbiAgICAnYmVkcm9jay1hZ2VudGNvcmU6Q3JlYXRlT2F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyJyxcbiAgICAnYmVkcm9jay1hZ2VudGNvcmU6R2V0T2F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyJyxcbiAgICAnYmVkcm9jay1hZ2VudGNvcmU6VXBkYXRlT2F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyJyxcbiAgICAnYmVkcm9jay1hZ2VudGNvcmU6RGVsZXRlT2F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyJyxcbiAgXTtcblxuICAvKipcbiAgICogRGF0YSBwbGFuZSBwZXJtaXNzaW9ucyB0byBjb21wbGV0ZSBPQXV0aCBmbG93cyBhbmQgcmV0cmlldmUgdG9rZW5zIGZvciBvdXRib3VuZCBjYWxscy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVVNFX1BFUk1TOiBzdHJpbmdbXSA9IFtcbiAgICAnYmVkcm9jay1hZ2VudGNvcmU6R2V0UmVzb3VyY2VPYXV0aDJUb2tlbicsXG4gICAgJ2JlZHJvY2stYWdlbnRjb3JlOkNvbXBsZXRlUmVzb3VyY2VUb2tlbkF1dGgnLFxuICBdO1xuXG4gIC8qKlxuICAgKiBBbGwgT0F1dGgyIGNyZWRlbnRpYWwgcHJvdmlkZXIgYWN0aW9ucyB1c2VkIGJ5IHRoZSBMMiBncmFudCBoZWxwZXJzLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBGVUxMX0FDQ0VTU19QRVJNUzogc3RyaW5nW10gPSBbXG4gICAgLi4ubmV3IFNldChbXG4gICAgICAuLi5PQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJJZGVudGl0eVBlcm1zLlJFQURfUEVSTVMsXG4gICAgICAuLi5PQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJJZGVudGl0eVBlcm1zLkxJU1RfUEVSTVMsXG4gICAgICAuLi5PQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJJZGVudGl0eVBlcm1zLkFETUlOX1BFUk1TLFxuICAgICAgLi4uT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVySWRlbnRpdHlQZXJtcy5VU0VfUEVSTVMsXG4gICAgXSksXG4gIF07XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHt9XG59XG5cbi8qKlxuICogSUFNIGFjdGlvbnMgZm9yIEFnZW50Q29yZSB3b3JrbG9hZCBpZGVudGl0aWVzLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3NlcnZpY2UtYXV0aG9yaXphdGlvbi9sYXRlc3QvcmVmZXJlbmNlL2xpc3RfYW1hem9uYmVkcm9ja2FnZW50Y29yZS5odG1sXG4gKi9cbmV4cG9ydCBjbGFzcyBXb3JrbG9hZElkZW50aXR5UGVybXMge1xuICAvKipcbiAgICogUmVhZCBhIHNpbmdsZSB3b3JrbG9hZCBpZGVudGl0eS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUkVBRF9QRVJNUzogc3RyaW5nW10gPSBbJ2JlZHJvY2stYWdlbnRjb3JlOkdldFdvcmtsb2FkSWRlbnRpdHknXTtcblxuICAvKipcbiAgICogTGlzdCB3b3JrbG9hZCBpZGVudGl0aWVzIChyZXNvdXJjZS1zY29wZWQgcGVyIElBTSBzZXJ2aWNlIGF1dGhvcml6YXRpb24gcmVmZXJlbmNlKS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTElTVF9QRVJNUzogc3RyaW5nW10gPSBbJ2JlZHJvY2stYWdlbnRjb3JlOkxpc3RXb3JrbG9hZElkZW50aXRpZXMnXTtcblxuICAvKipcbiAgICogQ29udHJvbCBwbGFuZSBwZXJtaXNzaW9ucyB0byBjcmVhdGUsIHJlYWQsIHVwZGF0ZSwgYW5kIGRlbGV0ZSB0aGlzIHdvcmtsb2FkIGlkZW50aXR5LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBBRE1JTl9QRVJNUzogc3RyaW5nW10gPSBbXG4gICAgJ2JlZHJvY2stYWdlbnRjb3JlOkNyZWF0ZVdvcmtsb2FkSWRlbnRpdHknLFxuICAgICdiZWRyb2NrLWFnZW50Y29yZTpHZXRXb3JrbG9hZElkZW50aXR5JyxcbiAgICAnYmVkcm9jay1hZ2VudGNvcmU6VXBkYXRlV29ya2xvYWRJZGVudGl0eScsXG4gICAgJ2JlZHJvY2stYWdlbnRjb3JlOkRlbGV0ZVdvcmtsb2FkSWRlbnRpdHknLFxuICBdO1xuXG4gIC8qKlxuICAgKiBEYXRhIHBsYW5lIHBlcm1pc3Npb25zIHRvIG1pbnQgd29ya2xvYWQgYWNjZXNzIHRva2Vucy5cbiAgICpcbiAgICogVGhlc2UgYWN0aW9ucyByZXF1aXJlIGJvdGggdGhlIHdvcmtsb2FkIGlkZW50aXR5IEFSTiBhbmQgdGhlXG4gICAqIHdvcmtsb2FkLWlkZW50aXR5LWRpcmVjdG9yeSBBUk4gYXMgcmVzb3VyY2Ugc2NvcGUuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3NlcnZpY2UtYXV0aG9yaXphdGlvbi9sYXRlc3QvcmVmZXJlbmNlL2xpc3RfYW1hem9uYmVkcm9ja2FnZW50Y29yZS5odG1sXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFVTRV9QRVJNUzogc3RyaW5nW10gPSBbXG4gICAgJ2JlZHJvY2stYWdlbnRjb3JlOkdldFdvcmtsb2FkQWNjZXNzVG9rZW4nLFxuICAgICdiZWRyb2NrLWFnZW50Y29yZTpHZXRXb3JrbG9hZEFjY2Vzc1Rva2VuRm9ySldUJyxcbiAgICAnYmVkcm9jay1hZ2VudGNvcmU6R2V0V29ya2xvYWRBY2Nlc3NUb2tlbkZvclVzZXJJZCcsXG4gIF07XG5cbiAgLyoqXG4gICAqIEFsbCB3b3JrbG9hZCBpZGVudGl0eSBhY3Rpb25zIHVzZWQgYnkgdGhlIEwyIGdyYW50IGhlbHBlcnMuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEZVTExfQUNDRVNTX1BFUk1TOiBzdHJpbmdbXSA9IFtcbiAgICAuLi5uZXcgU2V0KFtcbiAgICAgIC4uLldvcmtsb2FkSWRlbnRpdHlQZXJtcy5SRUFEX1BFUk1TLFxuICAgICAgLi4uV29ya2xvYWRJZGVudGl0eVBlcm1zLkxJU1RfUEVSTVMsXG4gICAgICAuLi5Xb3JrbG9hZElkZW50aXR5UGVybXMuQURNSU5fUEVSTVMsXG4gICAgICAuLi5Xb3JrbG9hZElkZW50aXR5UGVybXMuVVNFX1BFUk1TLFxuICAgIF0pLFxuICBdO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7fVxufVxuIl19
|
|
183
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJwZXJtcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUE7Ozs7Ozs7Ozs7O0dBV0c7QUFFSDs7Ozs7Ozs7O0dBU0c7QUFDVSxRQUFBLHdDQUF3QyxHQUFHO0lBQ3RELCtCQUErQjtJQUMvQiwrQkFBK0I7Q0FDdkIsQ0FBQztBQUVYOzs7Ozs7O0dBT0c7QUFDVSxRQUFBLHlDQUF5QyxHQUFHO0lBQ3ZELCtCQUErQjtDQUN2QixDQUFDO0FBRVg7Ozs7O0dBS0c7QUFDSCxNQUFhLHFDQUFxQzs7SUFDaEQ7O09BRUc7SUFDSSxNQUFNLENBQVUsVUFBVSxHQUFhLENBQUMsK0NBQStDLENBQUMsQ0FBQztJQUVoRzs7T0FFRztJQUNJLE1BQU0sQ0FBVSxVQUFVLEdBQWEsQ0FBQyxpREFBaUQsQ0FBQyxDQUFDO0lBRWxHOztPQUVHO0lBQ0ksTUFBTSxDQUFVLFdBQVcsR0FBYTtRQUM3QyxrREFBa0Q7UUFDbEQsK0NBQStDO1FBQy9DLGtEQUFrRDtRQUNsRCxrREFBa0Q7S0FDbkQsQ0FBQztJQUVGOztPQUVHO0lBQ0ksTUFBTSxDQUFVLFNBQVMsR0FBYSxDQUFDLHFDQUFxQyxDQUFDLENBQUM7SUFFckY7O09BRUc7SUFDSSxNQUFNLENBQVUsaUJBQWlCLEdBQWE7UUFDbkQsR0FBRyxJQUFJLEdBQUcsQ0FBQztZQUNULEdBQUcscUNBQXFDLENBQUMsVUFBVTtZQUNuRCxHQUFHLHFDQUFxQyxDQUFDLFVBQVU7WUFDbkQsR0FBRyxxQ0FBcUMsQ0FBQyxXQUFXO1lBQ3BELEdBQUcscUNBQXFDLENBQUMsU0FBUztTQUNuRCxDQUFDO0tBQ0gsQ0FBQztJQUVGLGlCQUF3Qjs7QUF0QzFCLHNGQXVDQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBYSxxQ0FBcUM7O0lBQ2hEOztPQUVHO0lBQ0ksTUFBTSxDQUFVLFVBQVUsR0FBYSxDQUFDLCtDQUErQyxDQUFDLENBQUM7SUFFaEc7O09BRUc7SUFDSSxNQUFNLENBQVUsVUFBVSxHQUFhLENBQUMsaURBQWlELENBQUMsQ0FBQztJQUVsRzs7T0FFRztJQUNJLE1BQU0sQ0FBVSxXQUFXLEdBQWE7UUFDN0Msa0RBQWtEO1FBQ2xELCtDQUErQztRQUMvQyxrREFBa0Q7UUFDbEQsa0RBQWtEO0tBQ25ELENBQUM7SUFFRjs7T0FFRztJQUNJLE1BQU0sQ0FBVSxTQUFTLEdBQWE7UUFDM0MsMENBQTBDO1FBQzFDLDZDQUE2QztLQUM5QyxDQUFDO0lBRUY7O09BRUc7SUFDSSxNQUFNLENBQVUsaUJBQWlCLEdBQWE7UUFDbkQsR0FBRyxJQUFJLEdBQUcsQ0FBQztZQUNULEdBQUcscUNBQXFDLENBQUMsVUFBVTtZQUNuRCxHQUFHLHFDQUFxQyxDQUFDLFVBQVU7WUFDbkQsR0FBRyxxQ0FBcUMsQ0FBQyxXQUFXO1lBQ3BELEdBQUcscUNBQXFDLENBQUMsU0FBUztTQUNuRCxDQUFDO0tBQ0gsQ0FBQztJQUVGLGlCQUF3Qjs7QUF6QzFCLHNGQTBDQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBYSxxQkFBcUI7O0lBQ2hDOztPQUVHO0lBQ0ksTUFBTSxDQUFVLFVBQVUsR0FBYSxDQUFDLHVDQUF1QyxDQUFDLENBQUM7SUFFeEY7O09BRUc7SUFDSSxNQUFNLENBQVUsVUFBVSxHQUFhLENBQUMsMENBQTBDLENBQUMsQ0FBQztJQUUzRjs7T0FFRztJQUNJLE1BQU0sQ0FBVSxXQUFXLEdBQWE7UUFDN0MsMENBQTBDO1FBQzFDLHVDQUF1QztRQUN2QywwQ0FBMEM7UUFDMUMsMENBQTBDO0tBQzNDLENBQUM7SUFFRjs7Ozs7OztPQU9HO0lBQ0ksTUFBTSxDQUFVLFNBQVMsR0FBYTtRQUMzQywwQ0FBMEM7UUFDMUMsZ0RBQWdEO1FBQ2hELG1EQUFtRDtLQUNwRCxDQUFDO0lBRUY7O09BRUc7SUFDSSxNQUFNLENBQVUsaUJBQWlCLEdBQWE7UUFDbkQsR0FBRyxJQUFJLEdBQUcsQ0FBQztZQUNULEdBQUcscUJBQXFCLENBQUMsVUFBVTtZQUNuQyxHQUFHLHFCQUFxQixDQUFDLFVBQVU7WUFDbkMsR0FBRyxxQkFBcUIsQ0FBQyxXQUFXO1lBQ3BDLEdBQUcscUJBQXFCLENBQUMsU0FBUztTQUNuQyxDQUFDO0tBQ0gsQ0FBQztJQUVGLGlCQUF3Qjs7QUEvQzFCLHNEQWdEQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiAgd2l0aCB0aGUgTGljZW5zZS4gQSBjb3B5IG9mIHRoZSBMaWNlbnNlIGlzIGxvY2F0ZWQgYXRcbiAqXG4gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqICBvciBpbiB0aGUgJ2xpY2Vuc2UnIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgZmlsZS4gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFU1xuICogIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXG4gKiAgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbi8qKlxuICogU2VjcmV0cyBNYW5hZ2VyIGFjdGlvbnMgdG8gcmVhZCBjcmVkZW50aWFsIG1hdGVyaWFsIHN0b3JlZCBmb3IgVG9rZW4gVmF1bHQgcHJvdmlkZXJzLlxuICpcbiAqIE91dGJvdW5kIGdhdGV3YXkgdGFyZ2V0cyBhcHBseSB0aGUgc2FtZSBhY3Rpb25zIG9uIHRoZSBzZWNyZXQgQVJOOyBwcmluY2lwYWxzIHRoYXQgY2FsbFxuICogYEdldFJlc291cmNlQXBpS2V5YCAvIGBHZXRSZXNvdXJjZU9hdXRoMlRva2VuYCAob3IgdGhhdCBtaXJyb3IgZ2F0ZXdheSBiZWhhdmlvcikgdHlwaWNhbGx5IG5lZWQgYm90aFxuICogYGJlZHJvY2stYWdlbnRjb3JlYCBkYXRhLXBsYW5lIGFjdGlvbnMgYW5kIHJlYWQgYWNjZXNzIHRvIHRoZSBiYWNraW5nIHNlY3JldC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iZWRyb2NrLWFnZW50Y29yZS9sYXRlc3QvZGV2Z3VpZGUvc2VjdXJpdHktaWFtLWF3c21hbnBvbC5odG1sXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGhlIGVxdWl2YWxlbnQgY29uc3RydWN0IGZyb20gYGF3cy1jZGstbGliL2F3cy1iZWRyb2NrYWdlbnRjb3JlYCBpbnN0ZWFkLlxuICovXG5leHBvcnQgY29uc3QgVE9LRU5fVkFVTFRfQ1JFREVOVElBTF9TRUNSRVRfUkVBRF9QRVJNUyA9IFtcbiAgJ3NlY3JldHNtYW5hZ2VyOkdldFNlY3JldFZhbHVlJyxcbiAgJ3NlY3JldHNtYW5hZ2VyOkRlc2NyaWJlU2VjcmV0Jyxcbl0gYXMgY29uc3Q7XG5cbi8qKlxuICogU2VjcmV0cyBNYW5hZ2VyIGFjdGlvbnMgdG8gd3JpdGUgY3JlZGVudGlhbCBtYXRlcmlhbCBmb3IgVG9rZW4gVmF1bHQgcHJvdmlkZXJzLlxuICpcbiAqIENyZWF0ZSBhbmQgVXBkYXRlIGNvbnRyb2wgcGxhbmUgb3BlcmF0aW9ucyAoZS5nLiBDcmVhdGVBcGlLZXlDcmVkZW50aWFsUHJvdmlkZXIsXG4gKiBVcGRhdGVBcGlLZXlDcmVkZW50aWFsUHJvdmlkZXIpIHN0b3JlL3VwZGF0ZSB0aGUgY3JlZGVudGlhbCBpbiBTZWNyZXRzIE1hbmFnZXIsXG4gKiByZXF1aXJpbmcgUHV0U2VjcmV0VmFsdWUgb24gdGhlIGJhY2tpbmcgc2VjcmV0LlxuICogQGRlcHJlY2F0ZWQgVXNlIHRoZSBlcXVpdmFsZW50IGNvbnN0cnVjdCBmcm9tIGBhd3MtY2RrLWxpYi9hd3MtYmVkcm9ja2FnZW50Y29yZWAgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGNvbnN0IFRPS0VOX1ZBVUxUX0NSRURFTlRJQUxfU0VDUkVUX1dSSVRFX1BFUk1TID0gW1xuICAnc2VjcmV0c21hbmFnZXI6UHV0U2VjcmV0VmFsdWUnLFxuXSBhcyBjb25zdDtcblxuLyoqXG4gKiBJQU0gYWN0aW9ucyBmb3IgQWdlbnRDb3JlIEFQSSBrZXkgY3JlZGVudGlhbCBwcm92aWRlcnMgKFRva2VuIFZhdWx0KS5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9zZXJ2aWNlLWF1dGhvcml6YXRpb24vbGF0ZXN0L3JlZmVyZW5jZS9saXN0X2FtYXpvbmJlZHJvY2thZ2VudGNvcmUuaHRtbFxuICogQGRlcHJlY2F0ZWQgVXNlIHRoZSBlcXVpdmFsZW50IGNvbnN0cnVjdCBmcm9tIGBhd3MtY2RrLWxpYi9hd3MtYmVkcm9ja2FnZW50Y29yZWAgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGNsYXNzIEFwaUtleUNyZWRlbnRpYWxQcm92aWRlcklkZW50aXR5UGVybXMge1xuICAvKipcbiAgICogUmVhZCBhIHNpbmdsZSBBUEkga2V5IGNyZWRlbnRpYWwgcHJvdmlkZXIgZGVmaW5pdGlvbi5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUkVBRF9QRVJNUzogc3RyaW5nW10gPSBbJ2JlZHJvY2stYWdlbnRjb3JlOkdldEFwaUtleUNyZWRlbnRpYWxQcm92aWRlciddO1xuXG4gIC8qKlxuICAgKiBMaXN0IEFQSSBrZXkgY3JlZGVudGlhbCBwcm92aWRlcnMgKHJlc291cmNlLXNjb3BlZCBwZXIgSUFNIHNlcnZpY2UgYXV0aG9yaXphdGlvbiByZWZlcmVuY2UpLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBMSVNUX1BFUk1TOiBzdHJpbmdbXSA9IFsnYmVkcm9jay1hZ2VudGNvcmU6TGlzdEFwaUtleUNyZWRlbnRpYWxQcm92aWRlcnMnXTtcblxuICAvKipcbiAgICogQ29udHJvbCBwbGFuZSBwZXJtaXNzaW9ucyB0byBjcmVhdGUsIHJlYWQsIHVwZGF0ZSwgYW5kIGRlbGV0ZSB0aGlzIHByb3ZpZGVyLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBBRE1JTl9QRVJNUzogc3RyaW5nW10gPSBbXG4gICAgJ2JlZHJvY2stYWdlbnRjb3JlOkNyZWF0ZUFwaUtleUNyZWRlbnRpYWxQcm92aWRlcicsXG4gICAgJ2JlZHJvY2stYWdlbnRjb3JlOkdldEFwaUtleUNyZWRlbnRpYWxQcm92aWRlcicsXG4gICAgJ2JlZHJvY2stYWdlbnRjb3JlOlVwZGF0ZUFwaUtleUNyZWRlbnRpYWxQcm92aWRlcicsXG4gICAgJ2JlZHJvY2stYWdlbnRjb3JlOkRlbGV0ZUFwaUtleUNyZWRlbnRpYWxQcm92aWRlcicsXG4gIF07XG5cbiAgLyoqXG4gICAqIERhdGEgcGxhbmUgcGVybWlzc2lvbnMgdG8gcmV0cmlldmUgdGhlIEFQSSBrZXkgbWF0ZXJpYWwgZm9yIG91dGJvdW5kIGNhbGxzLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBVU0VfUEVSTVM6IHN0cmluZ1tdID0gWydiZWRyb2NrLWFnZW50Y29yZTpHZXRSZXNvdXJjZUFwaUtleSddO1xuXG4gIC8qKlxuICAgKiBBbGwgQVBJIGtleSBjcmVkZW50aWFsIHByb3ZpZGVyIGFjdGlvbnMgdXNlZCBieSB0aGUgTDIgZ3JhbnQgaGVscGVycy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRlVMTF9BQ0NFU1NfUEVSTVM6IHN0cmluZ1tdID0gW1xuICAgIC4uLm5ldyBTZXQoW1xuICAgICAgLi4uQXBpS2V5Q3JlZGVudGlhbFByb3ZpZGVySWRlbnRpdHlQZXJtcy5SRUFEX1BFUk1TLFxuICAgICAgLi4uQXBpS2V5Q3JlZGVudGlhbFByb3ZpZGVySWRlbnRpdHlQZXJtcy5MSVNUX1BFUk1TLFxuICAgICAgLi4uQXBpS2V5Q3JlZGVudGlhbFByb3ZpZGVySWRlbnRpdHlQZXJtcy5BRE1JTl9QRVJNUyxcbiAgICAgIC4uLkFwaUtleUNyZWRlbnRpYWxQcm92aWRlcklkZW50aXR5UGVybXMuVVNFX1BFUk1TLFxuICAgIF0pLFxuICBdO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7fVxufVxuXG4vKipcbiAqIElBTSBhY3Rpb25zIGZvciBBZ2VudENvcmUgT0F1dGgyIGNyZWRlbnRpYWwgcHJvdmlkZXJzIChUb2tlbiBWYXVsdCkuXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc2VydmljZS1hdXRob3JpemF0aW9uL2xhdGVzdC9yZWZlcmVuY2UvbGlzdF9hbWF6b25iZWRyb2NrYWdlbnRjb3JlLmh0bWxcbiAqIEBkZXByZWNhdGVkIFVzZSB0aGUgZXF1aXZhbGVudCBjb25zdHJ1Y3QgZnJvbSBgYXdzLWNkay1saWIvYXdzLWJlZHJvY2thZ2VudGNvcmVgIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBPQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJJZGVudGl0eVBlcm1zIHtcbiAgLyoqXG4gICAqIFJlYWQgYSBzaW5nbGUgT0F1dGgyIGNyZWRlbnRpYWwgcHJvdmlkZXIgZGVmaW5pdGlvbi5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUkVBRF9QRVJNUzogc3RyaW5nW10gPSBbJ2JlZHJvY2stYWdlbnRjb3JlOkdldE9hdXRoMkNyZWRlbnRpYWxQcm92aWRlciddO1xuXG4gIC8qKlxuICAgKiBMaXN0IE9BdXRoMiBjcmVkZW50aWFsIHByb3ZpZGVycyAocmVzb3VyY2Utc2NvcGVkIHBlciBJQU0gc2VydmljZSBhdXRob3JpemF0aW9uIHJlZmVyZW5jZSkuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IExJU1RfUEVSTVM6IHN0cmluZ1tdID0gWydiZWRyb2NrLWFnZW50Y29yZTpMaXN0T2F1dGgyQ3JlZGVudGlhbFByb3ZpZGVycyddO1xuXG4gIC8qKlxuICAgKiBDb250cm9sIHBsYW5lIHBlcm1pc3Npb25zIHRvIGNyZWF0ZSwgcmVhZCwgdXBkYXRlLCBhbmQgZGVsZXRlIHRoaXMgcHJvdmlkZXIuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEFETUlOX1BFUk1TOiBzdHJpbmdbXSA9IFtcbiAgICAnYmVkcm9jay1hZ2VudGNvcmU6Q3JlYXRlT2F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyJyxcbiAgICAnYmVkcm9jay1hZ2VudGNvcmU6R2V0T2F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyJyxcbiAgICAnYmVkcm9jay1hZ2VudGNvcmU6VXBkYXRlT2F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyJyxcbiAgICAnYmVkcm9jay1hZ2VudGNvcmU6RGVsZXRlT2F1dGgyQ3JlZGVudGlhbFByb3ZpZGVyJyxcbiAgXTtcblxuICAvKipcbiAgICogRGF0YSBwbGFuZSBwZXJtaXNzaW9ucyB0byBjb21wbGV0ZSBPQXV0aCBmbG93cyBhbmQgcmV0cmlldmUgdG9rZW5zIGZvciBvdXRib3VuZCBjYWxscy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVVNFX1BFUk1TOiBzdHJpbmdbXSA9IFtcbiAgICAnYmVkcm9jay1hZ2VudGNvcmU6R2V0UmVzb3VyY2VPYXV0aDJUb2tlbicsXG4gICAgJ2JlZHJvY2stYWdlbnRjb3JlOkNvbXBsZXRlUmVzb3VyY2VUb2tlbkF1dGgnLFxuICBdO1xuXG4gIC8qKlxuICAgKiBBbGwgT0F1dGgyIGNyZWRlbnRpYWwgcHJvdmlkZXIgYWN0aW9ucyB1c2VkIGJ5IHRoZSBMMiBncmFudCBoZWxwZXJzLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBGVUxMX0FDQ0VTU19QRVJNUzogc3RyaW5nW10gPSBbXG4gICAgLi4ubmV3IFNldChbXG4gICAgICAuLi5PQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJJZGVudGl0eVBlcm1zLlJFQURfUEVSTVMsXG4gICAgICAuLi5PQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJJZGVudGl0eVBlcm1zLkxJU1RfUEVSTVMsXG4gICAgICAuLi5PQXV0aDJDcmVkZW50aWFsUHJvdmlkZXJJZGVudGl0eVBlcm1zLkFETUlOX1BFUk1TLFxuICAgICAgLi4uT0F1dGgyQ3JlZGVudGlhbFByb3ZpZGVySWRlbnRpdHlQZXJtcy5VU0VfUEVSTVMsXG4gICAgXSksXG4gIF07XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHt9XG59XG5cbi8qKlxuICogSUFNIGFjdGlvbnMgZm9yIEFnZW50Q29yZSB3b3JrbG9hZCBpZGVudGl0aWVzLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3NlcnZpY2UtYXV0aG9yaXphdGlvbi9sYXRlc3QvcmVmZXJlbmNlL2xpc3RfYW1hem9uYmVkcm9ja2FnZW50Y29yZS5odG1sXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGhlIGVxdWl2YWxlbnQgY29uc3RydWN0IGZyb20gYGF3cy1jZGstbGliL2F3cy1iZWRyb2NrYWdlbnRjb3JlYCBpbnN0ZWFkLlxuICovXG5leHBvcnQgY2xhc3MgV29ya2xvYWRJZGVudGl0eVBlcm1zIHtcbiAgLyoqXG4gICAqIFJlYWQgYSBzaW5nbGUgd29ya2xvYWQgaWRlbnRpdHkuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFJFQURfUEVSTVM6IHN0cmluZ1tdID0gWydiZWRyb2NrLWFnZW50Y29yZTpHZXRXb3JrbG9hZElkZW50aXR5J107XG5cbiAgLyoqXG4gICAqIExpc3Qgd29ya2xvYWQgaWRlbnRpdGllcyAocmVzb3VyY2Utc2NvcGVkIHBlciBJQU0gc2VydmljZSBhdXRob3JpemF0aW9uIHJlZmVyZW5jZSkuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IExJU1RfUEVSTVM6IHN0cmluZ1tdID0gWydiZWRyb2NrLWFnZW50Y29yZTpMaXN0V29ya2xvYWRJZGVudGl0aWVzJ107XG5cbiAgLyoqXG4gICAqIENvbnRyb2wgcGxhbmUgcGVybWlzc2lvbnMgdG8gY3JlYXRlLCByZWFkLCB1cGRhdGUsIGFuZCBkZWxldGUgdGhpcyB3b3JrbG9hZCBpZGVudGl0eS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQURNSU5fUEVSTVM6IHN0cmluZ1tdID0gW1xuICAgICdiZWRyb2NrLWFnZW50Y29yZTpDcmVhdGVXb3JrbG9hZElkZW50aXR5JyxcbiAgICAnYmVkcm9jay1hZ2VudGNvcmU6R2V0V29ya2xvYWRJZGVudGl0eScsXG4gICAgJ2JlZHJvY2stYWdlbnRjb3JlOlVwZGF0ZVdvcmtsb2FkSWRlbnRpdHknLFxuICAgICdiZWRyb2NrLWFnZW50Y29yZTpEZWxldGVXb3JrbG9hZElkZW50aXR5JyxcbiAgXTtcblxuICAvKipcbiAgICogRGF0YSBwbGFuZSBwZXJtaXNzaW9ucyB0byBtaW50IHdvcmtsb2FkIGFjY2VzcyB0b2tlbnMuXG4gICAqXG4gICAqIFRoZXNlIGFjdGlvbnMgcmVxdWlyZSBib3RoIHRoZSB3b3JrbG9hZCBpZGVudGl0eSBBUk4gYW5kIHRoZVxuICAgKiB3b3JrbG9hZC1pZGVudGl0eS1kaXJlY3RvcnkgQVJOIGFzIHJlc291cmNlIHNjb3BlLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9zZXJ2aWNlLWF1dGhvcml6YXRpb24vbGF0ZXN0L3JlZmVyZW5jZS9saXN0X2FtYXpvbmJlZHJvY2thZ2VudGNvcmUuaHRtbFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBVU0VfUEVSTVM6IHN0cmluZ1tdID0gW1xuICAgICdiZWRyb2NrLWFnZW50Y29yZTpHZXRXb3JrbG9hZEFjY2Vzc1Rva2VuJyxcbiAgICAnYmVkcm9jay1hZ2VudGNvcmU6R2V0V29ya2xvYWRBY2Nlc3NUb2tlbkZvckpXVCcsXG4gICAgJ2JlZHJvY2stYWdlbnRjb3JlOkdldFdvcmtsb2FkQWNjZXNzVG9rZW5Gb3JVc2VySWQnLFxuICBdO1xuXG4gIC8qKlxuICAgKiBBbGwgd29ya2xvYWQgaWRlbnRpdHkgYWN0aW9ucyB1c2VkIGJ5IHRoZSBMMiBncmFudCBoZWxwZXJzLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBGVUxMX0FDQ0VTU19QRVJNUzogc3RyaW5nW10gPSBbXG4gICAgLi4ubmV3IFNldChbXG4gICAgICAuLi5Xb3JrbG9hZElkZW50aXR5UGVybXMuUkVBRF9QRVJNUyxcbiAgICAgIC4uLldvcmtsb2FkSWRlbnRpdHlQZXJtcy5MSVNUX1BFUk1TLFxuICAgICAgLi4uV29ya2xvYWRJZGVudGl0eVBlcm1zLkFETUlOX1BFUk1TLFxuICAgICAgLi4uV29ya2xvYWRJZGVudGl0eVBlcm1zLlVTRV9QRVJNUyxcbiAgICBdKSxcbiAgXTtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge31cbn1cbiJdfQ==
|