@aws-cdk/aws-bedrock-agentcore-alpha 2.236.0-alpha.0 → 2.237.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 +663 -173
- package/.jsii.tabl.json.gz +0 -0
- package/.warnings.jsii.js +23 -1
- package/README.md +129 -4
- package/lib/common/types.d.ts +35 -0
- package/lib/common/types.js +41 -0
- package/lib/gateway/gateway-base.js +1 -1
- package/lib/gateway/gateway.js +1 -1
- package/lib/gateway/inbound-auth/authorizer.d.ts +25 -0
- package/lib/gateway/inbound-auth/authorizer.js +17 -7
- package/lib/gateway/inbound-auth/custom-claim.d.ts +50 -0
- package/lib/gateway/inbound-auth/custom-claim.js +127 -0
- package/lib/gateway/interceptor.js +1 -1
- package/lib/gateway/outbound-auth/api-key.js +1 -1
- package/lib/gateway/outbound-auth/credential-provider.js +1 -1
- package/lib/gateway/protocol.js +2 -2
- package/lib/gateway/targets/schema/api-schema.js +7 -6
- package/lib/gateway/targets/schema/tool-schema.js +7 -6
- package/lib/gateway/targets/target-base.js +1 -1
- package/lib/gateway/targets/target-configuration.js +5 -5
- package/lib/gateway/targets/target.js +1 -1
- package/lib/index.d.ts +4 -1
- package/lib/index.js +8 -2
- package/lib/memory/memory-strategy.js +1 -1
- package/lib/memory/memory.js +2 -2
- package/lib/memory/strategies/managed-strategy.js +1 -1
- package/lib/memory/strategies/self-managed-strategy.js +1 -1
- package/lib/network/network-configuration.js +4 -4
- package/lib/runtime/inbound-auth/custom-claim.d.ts +50 -0
- package/lib/runtime/inbound-auth/custom-claim.js +127 -0
- package/lib/runtime/{runtime-authorizer-configuration.d.ts → inbound-auth/runtime-authorizer-configuration.d.ts} +10 -3
- package/lib/runtime/inbound-auth/runtime-authorizer-configuration.js +183 -0
- package/lib/runtime/runtime-artifact.js +1 -1
- package/lib/runtime/runtime-base.js +1 -1
- package/lib/runtime/runtime-endpoint-base.js +1 -1
- package/lib/runtime/runtime-endpoint.js +1 -1
- package/lib/runtime/runtime.d.ts +1 -1
- package/lib/runtime/runtime.js +2 -2
- package/lib/tools/browser.js +2 -2
- package/lib/tools/code-interpreter.js +2 -2
- package/package.json +9 -9
- package/lib/runtime/runtime-authorizer-configuration.js +0 -159
package/lib/runtime/runtime.js
CHANGED
|
@@ -91,7 +91,7 @@ let Runtime = (() => {
|
|
|
91
91
|
Runtime = _classThis = _classDescriptor.value;
|
|
92
92
|
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
93
93
|
}
|
|
94
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.Runtime", version: "2.
|
|
94
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.Runtime", version: "2.237.0-alpha.0" };
|
|
95
95
|
/** Uniquely identifies this class. */
|
|
96
96
|
static PROPERTY_INJECTION_ID = '@aws-cdk.aws-bedrock-agentcore-alpha.Runtime';
|
|
97
97
|
/**
|
|
@@ -700,4 +700,4 @@ let Runtime = (() => {
|
|
|
700
700
|
return Runtime = _classThis;
|
|
701
701
|
})();
|
|
702
702
|
exports.Runtime = Runtime;
|
|
703
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInJ1bnRpbWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0EsNkNBQStGO0FBQy9GLHFFQUFxRTtBQUNyRSwyQ0FBMkM7QUFDM0MsMkNBQTJDO0FBQzNDLDhFQUE4RjtBQUM5RiwwRUFBMEU7QUFFMUUsbUNBUWlCO0FBR2pCLGlEQUEyRjtBQUMzRix5REFBcUQ7QUFDckQsbUNBQTJGO0FBQzNGLDZEQUFrRztBQUNsRyw0RUFBK0U7QUFFL0U7OytFQUUrRTtBQUMvRTs7O0dBR0c7QUFDSCxNQUFNLHFCQUFxQixHQUFHLHNCQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBRW5EOzs7R0FHRztBQUNILE1BQU0sc0JBQXNCLEdBQUcsc0JBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUF1R3ZEOzsrRUFFK0U7QUFFL0U7Ozs7Ozs7R0FPRztJQUVVLE9BQU87NEJBRG5CLG9DQUFrQjs7OztzQkFDVSwwQkFBVzs7O3VCQUFuQixTQUFRLFdBQVc7Ozs7dUNBK3BCckMsSUFBQSxrQ0FBYyxHQUFFO1lBQ2pCLG9MQUFPLFdBQVcsNkRBZ0JqQjtZQWhyQkgsNktBaXJCQzs7Ozs7UUFockJDLHNDQUFzQztRQUMvQixNQUFNLENBQVUscUJBQXFCLEdBQVcsOENBQThDLENBQUM7UUFFdEc7Ozs7Ozs7O1dBUUc7UUFDSSxNQUFNLENBQUMsMEJBQTBCLENBQ3RDLEtBQWdCLEVBQ2hCLEVBQVUsRUFDVixLQUE2Qjs7Ozs7Ozs7OztZQUU3QixNQUFNLDJCQUE0QixTQUFRLDBCQUFXO2dCQUNuQyxlQUFlLEdBQUcsS0FBSyxDQUFDLGVBQWUsQ0FBQztnQkFDeEMsY0FBYyxHQUFHLEtBQUssQ0FBQyxjQUFjLENBQUM7Z0JBQ3RDLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDMUMsbUJB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QUFHO2dCQUN4RSxXQUFXLEVBQUUsT0FBTyxFQUFFLFdBQVc7YUFDbEMsQ0FBQyxDQUFDO1lBRUgsK0RBQStEO1lBQy9ELFFBQVEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUVsRCxPQUFPLFFBQVEsQ0FBQztTQUNqQjs7WUFockJVLHVEQUFPOzs7OztBQUFQLDBCQUFPIiwic291cmNlc0NvbnRlbnQiOlsiXG5pbXBvcnQgeyBEdXJhdGlvbiwgU3RhY2ssIEFubm90YXRpb25zLCBUb2tlbiwgQXJuLCBBcm5Gb3JtYXQsIExhenksIE5hbWVzIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgYmVkcm9ja2FnZW50Y29yZSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtYmVkcm9ja2FnZW50Y29yZSc7XG5pbXBvcnQgKiBhcyBlYzIgZnJvbSAnYXdzLWNkay1saWIvYXdzLWVjMic7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgeyBhZGRDb25zdHJ1Y3RNZXRhZGF0YSwgTWV0aG9kTWV0YWRhdGEgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9tZXRhZGF0YS1yZXNvdXJjZSc7XG5pbXBvcnQgeyBwcm9wZXJ0eUluamVjdGFibGUgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9wcm9wLWluamVjdGFibGUnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQge1xuICBSVU5USU1FX0xPR1NfR1JPVVBfQUNUSU9OUyxcbiAgUlVOVElNRV9MT0dTX0RFU0NSSUJFX0FDVElPTlMsXG4gIFJVTlRJTUVfTE9HU19TVFJFQU1fQUNUSU9OUyxcbiAgUlVOVElNRV9YUkFZX0FDVElPTlMsXG4gIFJVTlRJTUVfQ0xPVURXQVRDSF9NRVRSSUNTX0FDVElPTlMsXG4gIFJVTlRJTUVfQ0xPVURXQVRDSF9OQU1FU1BBQ0UsXG4gIFJVTlRJTUVfV09SS0xPQURfSURFTlRJVFlfQUNUSU9OUyxcbn0gZnJvbSAnLi9wZXJtcyc7XG5pbXBvcnQgeyBBZ2VudFJ1bnRpbWVBcnRpZmFjdCB9IGZyb20gJy4vcnVudGltZS1hcnRpZmFjdCc7XG5pbXBvcnQgeyBSdW50aW1lQXV0aG9yaXplckNvbmZpZ3VyYXRpb24gfSBmcm9tICcuL3J1bnRpbWUtYXV0aG9yaXplci1jb25maWd1cmF0aW9uJztcbmltcG9ydCB7IFJ1bnRpbWVCYXNlLCBJQmVkcm9ja0FnZW50UnVudGltZSwgQWdlbnRSdW50aW1lQXR0cmlidXRlcyB9IGZyb20gJy4vcnVudGltZS1iYXNlJztcbmltcG9ydCB7IFJ1bnRpbWVFbmRwb2ludCB9IGZyb20gJy4vcnVudGltZS1lbmRwb2ludCc7XG5pbXBvcnQgeyBMaWZlY3ljbGVDb25maWd1cmF0aW9uLCBQcm90b2NvbFR5cGUsIFJlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyB2YWxpZGF0ZVN0cmluZ0ZpZWxkLCBWYWxpZGF0aW9uRXJyb3IsIHZhbGlkYXRlRmllbGRQYXR0ZXJuIH0gZnJvbSAnLi92YWxpZGF0aW9uLWhlbHBlcnMnO1xuaW1wb3J0IHsgUnVudGltZU5ldHdvcmtDb25maWd1cmF0aW9uIH0gZnJvbSAnLi4vbmV0d29yay9uZXR3b3JrLWNvbmZpZ3VyYXRpb24nO1xuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uc3RhbnRzXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKipcbiAqIE1pbmltdW0gdGltZW91dCBmb3IgaWRsZSBydW50aW1lIHNlc3Npb25zXG4gKiBAaW50ZXJuYWxcbiAqL1xuY29uc3QgTElGRUNZQ0xFX01JTl9USU1FT1VUID0gRHVyYXRpb24uc2Vjb25kcyg2MCk7XG5cbi8qKlxuICogTWF4aW11bSBsaWZldGltZSBmb3IgdGhlIGluc3RhbmNlXG4gKiBAaW50ZXJuYWxcbiAqL1xuY29uc3QgTElGRUNZQ0xFX01BWF9MSUZFVElNRSA9IER1cmF0aW9uLnNlY29uZHMoMjg4MDApO1xuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvcHNcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBjcmVhdGluZyBhIEJlZHJvY2sgQWdlbnQgQ29yZSBSdW50aW1lIHJlc291cmNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUnVudGltZVByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBhZ2VudCBydW50aW1lXG4gICAqIFZhbGlkIGNoYXJhY3RlcnMgYXJlIGEteiwgQS1aLCAwLTksIF8gKHVuZGVyc2NvcmUpXG4gICAqIE11c3Qgc3RhcnQgd2l0aCBhIGxldHRlciBhbmQgY2FuIGJlIHVwIHRvIDQ4IGNoYXJhY3RlcnMgbG9uZ1xuICAgKiBQYXR0ZXJuOiBeW2EtekEtWl1bYS16QS1aMC05X117MCw0N30kXG4gICAqIEBkZWZhdWx0IC0gYXV0byBnZW5lcmF0ZVxuICAgKi9cbiAgcmVhZG9ubHkgcnVudGltZU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBhcnRpZmFjdCBjb25maWd1cmF0aW9uIGZvciB0aGUgYWdlbnQgcnVudGltZVxuICAgKiBDb250YWlucyB0aGUgY29udGFpbmVyIGNvbmZpZ3VyYXRpb24gd2l0aCBFQ1IgVVJJXG4gICAqL1xuICByZWFkb25seSBhZ2VudFJ1bnRpbWVBcnRpZmFjdDogQWdlbnRSdW50aW1lQXJ0aWZhY3Q7XG5cbiAgLyoqXG4gICAqIFRoZSBJQU0gcm9sZSB0aGF0IHByb3ZpZGVzIHBlcm1pc3Npb25zIGZvciB0aGUgYWdlbnQgcnVudGltZVxuICAgKiBJZiBub3QgcHJvdmlkZWQsIGEgcm9sZSB3aWxsIGJlIGNyZWF0ZWQgYXV0b21hdGljYWxseVxuICAgKiBAZGVmYXVsdCAtIEEgbmV3IHJvbGUgd2lsbCBiZSBjcmVhdGVkXG4gICAqL1xuICByZWFkb25seSBleGVjdXRpb25Sb2xlPzogaWFtLklSb2xlO1xuXG4gIC8qKlxuICAgKiBOZXR3b3JrIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBhZ2VudCBydW50aW1lXG4gICAqIEBkZWZhdWx0IC0gUnVudGltZU5ldHdvcmtDb25maWd1cmF0aW9uLnVzaW5nUHVibGljTmV0d29yaygpXG4gICAqL1xuICByZWFkb25seSBuZXR3b3JrQ29uZmlndXJhdGlvbj86IFJ1bnRpbWVOZXR3b3JrQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogT3B0aW9uYWwgZGVzY3JpcHRpb24gZm9yIHRoZSBhZ2VudCBydW50aW1lXG4gICAqIEBkZWZhdWx0IC0gTm8gZGVzY3JpcHRpb25cbiAgICogTGVuZ3RoIE1pbmltdW06IDEgLCBNYXhpbXVtOiAxMjAwXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogUHJvdG9jb2wgY29uZmlndXJhdGlvbiBmb3IgdGhlIGFnZW50IHJ1bnRpbWVcbiAgICogQGRlZmF1bHQgLSBQcm90b2NvbFR5cGUuSFRUUFxuICAgKi9cbiAgcmVhZG9ubHkgcHJvdG9jb2xDb25maWd1cmF0aW9uPzogUHJvdG9jb2xUeXBlO1xuXG4gIC8qKlxuICAgKiBFbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIHRoZSBhZ2VudCBydW50aW1lXG4gICAqIC0gTWF4aW11bSA1MCBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAgICogLSBLZXk6IE11c3QgYmUgMS0xMDAgY2hhcmFjdGVycywgc3RhcnQgd2l0aCBsZXR0ZXIgb3IgdW5kZXJzY29yZSwgY29udGFpbiBvbmx5IGxldHRlcnMsIG51bWJlcnMsIGFuZCB1bmRlcnNjb3Jlc1xuICAgKiAtIFZhbHVlOiBNdXN0IGJlIDAtMjA0OCBjaGFyYWN0ZXJzIChwZXIgQ2xvdWRGb3JtYXRpb24gc3BlY2lmaWNhdGlvbilcbiAgICogQGRlZmF1bHQgLSBObyBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAgICovXG4gIHJlYWRvbmx5IGVudmlyb25tZW50VmFyaWFibGVzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogQXV0aG9yaXplciBjb25maWd1cmF0aW9uIGZvciB0aGUgYWdlbnQgcnVudGltZVxuICAgKiBVc2UgUnVudGltZUF1dGhvcml6ZXJDb25maWd1cmF0aW9uIHN0YXRpYyBtZXRob2RzIHRvIGNyZWF0ZSB0aGUgY29uZmlndXJhdGlvblxuICAgKiBAZGVmYXVsdCAtIFJ1bnRpbWVBdXRob3JpemVyQ29uZmlndXJhdGlvbi5pYW0oKSAoSUFNIGF1dGhlbnRpY2F0aW9uKVxuICAgKi9cbiAgcmVhZG9ubHkgYXV0aG9yaXplckNvbmZpZ3VyYXRpb24/OiBSdW50aW1lQXV0aG9yaXplckNvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIFRhZ3MgZm9yIHRoZSBhZ2VudCBydW50aW1lXG4gICAqIEEgbGlzdCBvZiBrZXk6dmFsdWUgcGFpcnMgb2YgdGFncyB0byBhcHBseSB0byB0aGlzIFJ1bnRpbWUgcmVzb3VyY2VcbiAgICogQGRlZmF1bHQge30gLSBubyB0YWdzXG4gICAqL1xuICByZWFkb25seSB0YWdzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogQ29uZmlndXJhdGlvbiBmb3IgSFRUUCByZXF1ZXN0IGhlYWRlcnMgdGhhdCB3aWxsIGJlIHBhc3NlZCB0aHJvdWdoIHRvIHRoZSBydW50aW1lLlxuICAgKiBAZGVmYXVsdCAtIE5vIHJlcXVlc3QgaGVhZGVycyBjb25maWd1cmVkXG4gICAqL1xuICByZWFkb25seSByZXF1ZXN0SGVhZGVyQ29uZmlndXJhdGlvbj86IFJlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgbGlmZSBjeWNsZSBjb25maWd1cmF0aW9uIGZvciB0aGUgQWdlbnRDb3JlIFJ1bnRpbWUuXG4gICAqIEBkZWZhdWx0IC0gTm8gbGlmZWN5Y2xlIGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IGxpZmVjeWNsZUNvbmZpZ3VyYXRpb24/OiBMaWZlY3ljbGVDb25maWd1cmF0aW9uO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGFkZGluZyBhbiBlbmRwb2ludCB0byB0aGUgcnVudGltZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFkZEVuZHBvaW50T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBEZXNjcmlwdGlvbiBmb3IgdGhlIGVuZHBvaW50LCBNdXN0IGJlIGJldHdlZW4gMSBhbmQgMTIwMCBjaGFyYWN0ZXJzXG4gICAqIEBkZWZhdWx0IC0gTm8gZGVzY3JpcHRpb25cbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAvKipcbiAgICogT3ZlcnJpZGUgdGhlIHJ1bnRpbWUgdmVyc2lvbiBmb3IgdGhpcyBlbmRwb2ludFxuICAgKiBAZGVmYXVsdCAgMVxuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbj86IHN0cmluZztcbn1cblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsYXNzXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbi8qKlxuICogQmVkcm9jayBBZ2VudCBDb3JlIFJ1bnRpbWVcbiAqIEVuYWJsZXMgcnVubmluZyBjb250YWluZXJpemVkIGFnZW50cyB3aXRoIHNwZWNpZmljIG5ldHdvcmsgY29uZmlndXJhdGlvbnMsXG4gKiBzZWN1cml0eSBzZXR0aW5ncywgYW5kIHJ1bnRpbWUgYXJ0aWZhY3RzLlxuICpcbiAqIEByZXNvdXJjZSBBV1M6OkJlZHJvY2tBZ2VudENvcmU6OlJ1bnRpbWVcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JlZHJvY2stYWdlbnRjb3JlL2xhdGVzdC9kZXZndWlkZS9ydW50aW1lLmh0bWxcbiAqL1xuQHByb3BlcnR5SW5qZWN0YWJsZVxuZXhwb3J0IGNsYXNzIFJ1bnRpbWUgZXh0ZW5kcyBSdW50aW1lQmFzZSB7XG4gIC8qKiBVbmlxdWVseSBpZGVudGlmaWVzIHRoaXMgY2xhc3MuICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFJPUEVSVFlfSU5KRUNUSU9OX0lEOiBzdHJpbmcgPSAnQGF3cy1jZGsuYXdzLWJlZHJvY2stYWdlbnRjb3JlLWFscGhhLlJ1bnRpbWUnO1xuXG4gIC8qKlxuICAgKiBJbXBvcnQgYW4gZXhpc3RpbmcgQWdlbnQgUnVudGltZSB1c2luZyBhdHRyaWJ1dGVzXG4gICAqIFRoaXMgYWxsb3dzIHlvdSB0byByZWZlcmVuY2UgYW4gQWdlbnQgUnVudGltZSB0aGF0IHdhcyBjcmVhdGVkIG91dHNpZGUgb2YgQ0RLXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSBUaGUgY29uc3RydWN0IHNjb3BlXG4gICAqIEBwYXJhbSBpZCBUaGUgY29uc3RydWN0IGlkXG4gICAqIEBwYXJhbSBhdHRycyBUaGUgYXR0cmlidXRlcyBvZiB0aGUgZXhpc3RpbmcgQWdlbnQgUnVudGltZVxuICAgKiBAcmV0dXJucyBBbiBJQmVkcm9ja0FnZW50UnVudGltZSBpbnN0YW5jZSByZXByZXNlbnRpbmcgdGhlIGltcG9ydGVkIHJ1bnRpbWVcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUFnZW50UnVudGltZUF0dHJpYnV0ZXMoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIGF0dHJzOiBBZ2VudFJ1bnRpbWVBdHRyaWJ1dGVzLFxuICApOiBJQmVkcm9ja0FnZW50UnVudGltZSB7XG4gICAgY2xhc3MgSW1wb3J0ZWRCZWRyb2NrQWdlbnRSdW50aW1lIGV4dGVuZHMgUnVudGltZUJhc2Uge1xuICAgICAgcHVibGljIHJlYWRvbmx5IGFnZW50UnVudGltZUFybiA9IGF0dHJzLmFnZW50UnVudGltZUFybjtcbiAgICAgIHB1YmxpYyByZWFkb25seSBhZ2VudFJ1bnRpbWVJZCA9IGF0dHJzLmFnZW50UnVudGltZUlkO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGFnZW50UnVudGltZU5hbWUgPSBhdHRycy5hZ2VudFJ1bnRpbWVOYW1lO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGFnZW50UnVudGltZVZlcnNpb24gPSBhdHRycy5hZ2VudFJ1bnRpbWVWZXJzaW9uO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGFnZW50U3RhdHVzID0gYXR0cnMuYWdlbnRTdGF0dXM7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgZGVzY3JpcHRpb24gPSBhdHRycy5kZXNjcmlwdGlvbjtcbiAgICAgIHB1YmxpYyByZWFkb25seSBjcmVhdGVkQXQgPSBhdHRycy5jcmVhdGVkQXQ7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgbGFzdFVwZGF0ZWRBdCA9IGF0dHJzLmxhc3RVcGRhdGVkQXQ7XG5cbiAgICAgIHB1YmxpYyByZWFkb25seSByb2xlOiBpYW0uSVJvbGU7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgZ3JhbnRQcmluY2lwYWw6IGlhbS5JUHJpbmNpcGFsO1xuXG4gICAgICBjb25zdHJ1Y3RvcihzOiBDb25zdHJ1Y3QsIGk6IHN0cmluZykge1xuICAgICAgICBzdXBlcihzLCBpKTtcbiAgICAgICAgdGhpcy5yb2xlID0gaWFtLlJvbGUuZnJvbVJvbGVBcm4odGhpcywgJ1JvbGUnLCBhdHRycy5yb2xlQXJuKTtcbiAgICAgICAgdGhpcy5ncmFudFByaW5jaXBhbCA9IHRoaXMucm9sZTtcbiAgICAgICAgaWYgKGF0dHJzLnNlY3VyaXR5R3JvdXBzKSB7XG4gICAgICAgICAgdGhpcy5fY29ubmVjdGlvbnMgPSBuZXcgZWMyLkNvbm5lY3Rpb25zKHtcbiAgICAgICAgICAgIHNlY3VyaXR5R3JvdXBzOiBhdHRycy5zZWN1cml0eUdyb3VwcyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgSW1wb3J0ZWRCZWRyb2NrQWdlbnRSdW50aW1lKHNjb3BlLCBpZCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgYWdlbnQgcnVudGltZVxuICAgKiBAYXR0cmlidXRlXG4gICAqIEByZXR1cm5zIGEgdG9rZW4gcmVwcmVzZW50aW5nIHRoZSBBUk4gb2YgdGhpcyBhZ2VudCBydW50aW1lXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYWdlbnRSdW50aW1lQXJuOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIGFnZW50IHJ1bnRpbWVcbiAgICogQGF0dHJpYnV0ZVxuICAgKiBAcmV0dXJucyBhIHRva2VuIHJlcHJlc2VudGluZyB0aGUgSUQgb2YgdGhpcyBhZ2VudCBydW50aW1lXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYWdlbnRSdW50aW1lSWQ6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBhZ2VudCBydW50aW1lXG4gICAqIEBhdHRyaWJ1dGVcbiAgICogQHJldHVybnMgYSB0b2tlbiByZXByZXNlbnRpbmcgdGhlIG5hbWUgb2YgdGhpcyBhZ2VudCBydW50aW1lXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYWdlbnRSdW50aW1lTmFtZTogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgcm9sZTogaWFtLklSb2xlO1xuICAvKipcbiAgICogVGhlIHZlcnNpb24gb2YgdGhlIGFnZW50IHJ1bnRpbWVcbiAgICogQGF0dHJpYnV0ZVxuICAgKiBAcmV0dXJucyBhIHRva2VuIHJlcHJlc2VudGluZyB0aGUgdmVyc2lvbiBvZiB0aGlzIGFnZW50IHJ1bnRpbWVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhZ2VudFJ1bnRpbWVWZXJzaW9uPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHN0YXR1cyBvZiB0aGUgYWdlbnQgcnVudGltZVxuICAgKiBAYXR0cmlidXRlXG4gICAqIEByZXR1cm5zIGEgdG9rZW4gcmVwcmVzZW50aW5nIHRoZSBzdGF0dXMgb2YgdGhpcyBhZ2VudCBydW50aW1lXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYWdlbnRTdGF0dXM/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBPcHRpb25hbCBkZXNjcmlwdGlvbiBmb3IgdGhlIGFnZW50IHJ1bnRpbWVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSB0aW1lc3RhbXAgd2hlbiB0aGUgYWdlbnQgcnVudGltZSB3YXMgY3JlYXRlZFxuICAgKiBAYXR0cmlidXRlXG4gICAqIEByZXR1cm5zIGEgdG9rZW4gcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiB0aW1lc3RhbXAgb2YgdGhpcyBhZ2VudCBydW50aW1lXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY3JlYXRlZEF0Pzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHRpbWVzdGFtcCB3aGVuIHRoZSBhZ2VudCBydW50aW1lIHdhcyBsYXN0IHVwZGF0ZWRcbiAgICogQGF0dHJpYnV0ZVxuICAgKiBAcmV0dXJucyBhIHRva2VuIHJlcHJlc2VudGluZyB0aGUgbGFzdCB1cGRhdGUgdGltZXN0YW1wIG9mIHRoaXMgYWdlbnQgcnVudGltZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGxhc3RVcGRhdGVkQXQ/OiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBncmFudFByaW5jaXBhbDogaWFtLklQcmluY2lwYWw7XG4gIHByaXZhdGUgcmVhZG9ubHkgcnVudGltZVJlc291cmNlOiBiZWRyb2NrYWdlbnRjb3JlLkNmblJ1bnRpbWU7XG4gIC8qKlxuICAgKiBUaGUgYXJ0aWZhY3QgY29uZmlndXJhdGlvbiBmb3IgdGhlIGFnZW50IHJ1bnRpbWVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhZ2VudFJ1bnRpbWVBcnRpZmFjdDogQWdlbnRSdW50aW1lQXJ0aWZhY3Q7XG4gIHByaXZhdGUgcmVhZG9ubHkgbmV0d29ya0NvbmZpZ3VyYXRpb246IFJ1bnRpbWVOZXR3b3JrQ29uZmlndXJhdGlvbiA7XG4gIHByaXZhdGUgcmVhZG9ubHkgcHJvdG9jb2xDb25maWd1cmF0aW9uOiBQcm90b2NvbFR5cGU7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXV0aG9yaXplckNvbmZpZ3VyYXRpb24/OiBSdW50aW1lQXV0aG9yaXplckNvbmZpZ3VyYXRpb247XG4gIHByaXZhdGUgcmVhZG9ubHkgbGlmZWN5Y2xlQ29uZmlndXJhdGlvbj86IExpZmVjeWNsZUNvbmZpZ3VyYXRpb247XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFJ1bnRpbWVQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgLy8gTWF4aW11bSBuYW1lIGxlbmd0aCBvZiA0OCBjaGFyYWN0ZXJzXG4gICAgICAvLyBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWJlZHJvY2thZ2VudGNvcmUtcnVudGltZS5odG1sI2Nmbi1iZWRyb2NrYWdlbnRjb3JlLXJ1bnRpbWUtYWdlbnRydW50aW1lbmFtZVxuICAgICAgcGh5c2ljYWxOYW1lOiBwcm9wcy5ydW50aW1lTmFtZSA/P1xuICAgICAgICBMYXp5LnN0cmluZyh7XG4gICAgICAgICAgcHJvZHVjZTogKCkgPT4gTmFtZXMudW5pcXVlUmVzb3VyY2VOYW1lKHRoaXMsIHsgbWF4TGVuZ3RoOiA0OCB9KSxcbiAgICAgICAgfSksXG4gICAgfSk7XG5cbiAgICAvLyBDREsgQW5hbHl0aWNzIFRlbGVtZXRyeVxuICAgIGFkZENvbnN0cnVjdE1ldGFkYXRhKHRoaXMsIHByb3BzKTtcblxuICAgIHRoaXMuYWdlbnRSdW50aW1lTmFtZSA9IHRoaXMucGh5c2ljYWxOYW1lO1xuICAgIHRoaXMudmFsaWRhdGVSdW50aW1lTmFtZSgpO1xuXG4gICAgdGhpcy5kZXNjcmlwdGlvbiA9IHByb3BzLmRlc2NyaXB0aW9uO1xuICAgIGlmICh0aGlzLmRlc2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnZhbGlkYXRlRGVzY3JpcHRpb24oKTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMuZW52aXJvbm1lbnRWYXJpYWJsZXMpIHtcbiAgICAgIHRoaXMudmFsaWRhdGVFbnZpcm9ubWVudFZhcmlhYmxlcyhwcm9wcy5lbnZpcm9ubWVudFZhcmlhYmxlcyk7XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLnRhZ3MpIHtcbiAgICAgIHRoaXMudmFsaWRhdGVUYWdzKHByb3BzLnRhZ3MpO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5yZXF1ZXN0SGVhZGVyQ29uZmlndXJhdGlvbikge1xuICAgICAgdGhpcy52YWxpZGF0ZVJlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uKHByb3BzLnJlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uKTtcbiAgICB9XG5cbiAgICB0aGlzLmxpZmVjeWNsZUNvbmZpZ3VyYXRpb24gPSBwcm9wcy5saWZlY3ljbGVDb25maWd1cmF0aW9uID8ge1xuICAgICAgaWRsZVJ1bnRpbWVTZXNzaW9uVGltZW91dDogcHJvcHMubGlmZWN5Y2xlQ29uZmlndXJhdGlvbj8uaWRsZVJ1bnRpbWVTZXNzaW9uVGltZW91dCxcbiAgICAgIG1heExpZmV0aW1lOiBwcm9wcy5saWZlY3ljbGVDb25maWd1cmF0aW9uPy5tYXhMaWZldGltZSxcbiAgICB9IDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKHRoaXMubGlmZWN5Y2xlQ29uZmlndXJhdGlvbikge1xuICAgICAgdGhpcy52YWxpZGF0ZUxpZmVjeWNsZUNvbmZpZ3VyYXRpb24odGhpcy5saWZlY3ljbGVDb25maWd1cmF0aW9uKTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMuZXhlY3V0aW9uUm9sZSkge1xuICAgICAgdGhpcy5yb2xlID0gcHJvcHMuZXhlY3V0aW9uUm9sZTtcbiAgICAgIGlmICghVG9rZW4uaXNVbnJlc29sdmVkKHByb3BzLmV4ZWN1dGlvblJvbGUucm9sZUFybikpIHtcbiAgICAgICAgdGhpcy52YWxpZGF0ZVJvbGVBcm4ocHJvcHMuZXhlY3V0aW9uUm9sZS5yb2xlQXJuKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yb2xlID0gbmV3IGlhbS5Sb2xlKHRoaXMsICdFeGVjdXRpb25Sb2xlJywge1xuICAgICAgICBhc3N1bWVkQnk6IG5ldyBpYW0uU2VydmljZVByaW5jaXBhbCgnYmVkcm9jay1hZ2VudGNvcmUuYW1hem9uYXdzLmNvbScpLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ0V4ZWN1dGlvbiByb2xlIGZvciBCZWRyb2NrIEFnZW50IENvcmUgUnVudGltZScsXG4gICAgICAgIG1heFNlc3Npb25EdXJhdGlvbjogRHVyYXRpb24uaG91cnMoOCksXG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5hZGRFeGVjdXRpb25Sb2xlUGVybWlzc2lvbnMoKTtcblxuICAgIHRoaXMuZ3JhbnRQcmluY2lwYWwgPSB0aGlzLnJvbGU7XG4gICAgdGhpcy5hZ2VudFJ1bnRpbWVBcnRpZmFjdCA9IHByb3BzLmFnZW50UnVudGltZUFydGlmYWN0O1xuICAgIC8vIFNldCB1cCBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gd2l0aCBWUEMgc3VwcG9ydFxuICAgIHRoaXMubmV0d29ya0NvbmZpZ3VyYXRpb24gPSBwcm9wcy5uZXR3b3JrQ29uZmlndXJhdGlvbiA/PyBSdW50aW1lTmV0d29ya0NvbmZpZ3VyYXRpb24udXNpbmdQdWJsaWNOZXR3b3JrKCk7XG4gICAgLy8gU2V0IGNvbm5lY3Rpb25zIC0gY3JlYXRlIGEgc2hhcmVkIGNvbm5lY3Rpb25zIG9iamVjdFxuICAgIGlmICh0aGlzLm5ldHdvcmtDb25maWd1cmF0aW9uLmNvbm5lY3Rpb25zKSB7XG4gICAgICAvLyBVc2UgdGhlIG5ldHdvcmsgY29uZmlndXJhdGlvbidzIGNvbm5lY3Rpb25zIGFzIHRoZSBzaGFyZWQgb2JqZWN0XG4gICAgICB0aGlzLl9jb25uZWN0aW9ucyA9IHRoaXMubmV0d29ya0NvbmZpZ3VyYXRpb24uY29ubmVjdGlvbnM7XG4gICAgfVxuICAgIHRoaXMucHJvdG9jb2xDb25maWd1cmF0aW9uID0gcHJvcHMucHJvdG9jb2xDb25maWd1cmF0aW9uID8/IFByb3RvY29sVHlwZS5IVFRQO1xuICAgIHRoaXMuYXV0aG9yaXplckNvbmZpZ3VyYXRpb24gPSBwcm9wcy5hdXRob3JpemVyQ29uZmlndXJhdGlvbjtcblxuICAgIGNvbnN0IGNmblByb3BzOiBhbnkgPSB7XG4gICAgICBhZ2VudFJ1bnRpbWVOYW1lOiB0aGlzLmFnZW50UnVudGltZU5hbWUsXG4gICAgICByb2xlQXJuOiB0aGlzLnJvbGUucm9sZUFybixcbiAgICAgIGFnZW50UnVudGltZUFydGlmYWN0OiBMYXp5LmFueSh7XG4gICAgICAgIHByb2R1Y2U6ICgpID0+IHRoaXMucmVuZGVyQWdlbnRSdW50aW1lQXJ0aWZhY3QoKSxcbiAgICAgIH0pLFxuICAgICAgbmV0d29ya0NvbmZpZ3VyYXRpb246IExhenkuYW55KHtcbiAgICAgICAgcHJvZHVjZTogKCkgPT4gdGhpcy5uZXR3b3JrQ29uZmlndXJhdGlvbi5fcmVuZGVyKHRoaXMuX2Nvbm5lY3Rpb25zKSxcbiAgICAgIH0pLFxuICAgICAgcHJvdG9jb2xDb25maWd1cmF0aW9uOiBMYXp5LnN0cmluZyh7XG4gICAgICAgIHByb2R1Y2U6ICgpID0+IHRoaXMucHJvdG9jb2xDb25maWd1cmF0aW9uLFxuICAgICAgfSksXG4gICAgICBkZXNjcmlwdGlvbjogcHJvcHMuZGVzY3JpcHRpb24sXG4gICAgICBlbnZpcm9ubWVudFZhcmlhYmxlczogTGF6eS5hbnkoe1xuICAgICAgICBwcm9kdWNlOiAoKSA9PiB0aGlzLnJlbmRlckVudmlyb25tZW50VmFyaWFibGVzKHByb3BzLmVudmlyb25tZW50VmFyaWFibGVzKSxcbiAgICAgIH0pLFxuICAgICAgdGFnczogcHJvcHMudGFncyA/PyB7fSxcbiAgICAgIGxpZmVjeWNsZUNvbmZpZ3VyYXRpb246IHRoaXMucmVuZGVyTGlmZWN5Y2xlQ29uZmlndXJhdGlvbigpLFxuICAgIH07XG4gICAgaWYgKHByb3BzLnJlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uKSB7XG4gICAgICBjZm5Qcm9wcy5yZXF1ZXN0SGVhZGVyQ29uZmlndXJhdGlvbiA9IHRoaXMucmVuZGVyUmVxdWVzdEhlYWRlckNvbmZpZ3VyYXRpb24ocHJvcHMucmVxdWVzdEhlYWRlckNvbmZpZ3VyYXRpb24pO1xuICAgIH1cbiAgICBpZiAocHJvcHMuYXV0aG9yaXplckNvbmZpZ3VyYXRpb24pIHtcbiAgICAgIGNmblByb3BzLmF1dGhvcml6ZXJDb25maWd1cmF0aW9uID0gTGF6eS5hbnkoe1xuICAgICAgICBwcm9kdWNlOiAoKSA9PiB0aGlzLmF1dGhvcml6ZXJDb25maWd1cmF0aW9uIS5fcmVuZGVyKCksXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLnJ1bnRpbWVSZXNvdXJjZSA9IG5ldyBiZWRyb2NrYWdlbnRjb3JlLkNmblJ1bnRpbWUodGhpcywgJ1Jlc291cmNlJywgY2ZuUHJvcHMgYXMgYmVkcm9ja2FnZW50Y29yZS5DZm5SdW50aW1lUHJvcHMpO1xuXG4gICAgLy8gQWRkIGRlcGVuZGVuY3kgb24gdGhlIHJvbGUgKGZvciBib3RoIGN1c3RvbSBhbmQgYXV0by1jcmVhdGVkIHJvbGVzKVxuICAgIC8vIFRoaXMgZW5zdXJlcyB0aGUgUnVudGltZSB3YWl0cyBmb3IgdGhlIHJvbGUgYW5kIGFsbCBpdHMgcG9saWNpZXMgKGluY2x1ZGluZyBFQ1IgcGVybWlzc2lvbnMpIHRvIGJlIGNyZWF0ZWRcbiAgICB0aGlzLnJ1bnRpbWVSZXNvdXJjZS5ub2RlLmFkZERlcGVuZGVuY3kodGhpcy5yb2xlKTtcblxuICAgIHRoaXMuYWdlbnRSdW50aW1lSWQgPSB0aGlzLnJ1bnRpbWVSZXNvdXJjZS5hdHRyQWdlbnRSdW50aW1lSWQ7XG4gICAgdGhpcy5hZ2VudFJ1bnRpbWVBcm4gPSB0aGlzLnJ1bnRpbWVSZXNvdXJjZS5hdHRyQWdlbnRSdW50aW1lQXJuO1xuICAgIHRoaXMuYWdlbnRTdGF0dXMgPSB0aGlzLnJ1bnRpbWVSZXNvdXJjZS5hdHRyU3RhdHVzO1xuICAgIHRoaXMuYWdlbnRSdW50aW1lVmVyc2lvbiA9IHRoaXMucnVudGltZVJlc291cmNlLmF0dHJBZ2VudFJ1bnRpbWVWZXJzaW9uO1xuICAgIHRoaXMuY3JlYXRlZEF0ID0gdGhpcy5ydW50aW1lUmVzb3VyY2UuYXR0ckNyZWF0ZWRBdDtcbiAgICB0aGlzLmxhc3RVcGRhdGVkQXQgPSB0aGlzLnJ1bnRpbWVSZXNvdXJjZS5hdHRyTGFzdFVwZGF0ZWRBdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIENsb3VkRm9ybWF0aW9uXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJpdmF0ZSByZW5kZXJFbnZpcm9ubWVudFZhcmlhYmxlcyhlbnZWYXJzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSk6IGFueSB7XG4gICAgaWYgKCFlbnZWYXJzIHx8IE9iamVjdC5rZXlzKGVudlZhcnMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIGVudlZhcnM7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBwcm9wZXIgcGVybWlzc2lvbnMgdG8gdGhlIGV4ZWN1dGlvbiByb2xlIGZvciB0aGUgYWdlbnQgcnVudGltZVxuICAgKiBCYXNlZCBvbjogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JlZHJvY2stYWdlbnRjb3JlL2xhdGVzdC9kZXZndWlkZS9ydW50aW1lLXBlcm1pc3Npb25zLmh0bWxcbiAgICovXG4gIHByaXZhdGUgYWRkRXhlY3V0aW9uUm9sZVBlcm1pc3Npb25zKCkge1xuICAgIGNvbnN0IHJlZ2lvbiA9IFN0YWNrLm9mKHRoaXMpLnJlZ2lvbjtcbiAgICBjb25zdCBhY2NvdW50ID0gU3RhY2sub2YodGhpcykuYWNjb3VudDtcblxuICAgIC8vIENsb3VkV2F0Y2ggTG9ncyAtIExvZyBHcm91cCBvcGVyYXRpb25zXG4gICAgdGhpcy5yb2xlLmFkZFRvUHJpbmNpcGFsUG9saWN5KG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIHNpZDogJ0xvZ0dyb3VwQWNjZXNzJyxcbiAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgIGFjdGlvbnM6IFJVTlRJTUVfTE9HU19HUk9VUF9BQ1RJT05TLFxuICAgICAgcmVzb3VyY2VzOiBbYGFybjoke1N0YWNrLm9mKHRoaXMpLnBhcnRpdGlvbn06bG9nczoke3JlZ2lvbn06JHthY2NvdW50fTpsb2ctZ3JvdXA6L2F3cy9iZWRyb2NrLWFnZW50Y29yZS9ydW50aW1lcy8qYF0sXG4gICAgfSkpO1xuXG4gICAgLy8gQ2xvdWRXYXRjaCBMb2dzIC0gRGVzY3JpYmUgYWxsIGxvZyBncm91cHNcbiAgICB0aGlzLnJvbGUuYWRkVG9QcmluY2lwYWxQb2xpY3kobmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgc2lkOiAnRGVzY3JpYmVMb2dHcm91cHMnLFxuICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgYWN0aW9uczogUlVOVElNRV9MT0dTX0RFU0NSSUJFX0FDVElPTlMsXG4gICAgICByZXNvdXJjZXM6IFtgYXJuOiR7U3RhY2sub2YodGhpcykucGFydGl0aW9ufTpsb2dzOiR7cmVnaW9ufToke2FjY291bnR9OmxvZy1ncm91cDoqYF0sXG4gICAgfSkpO1xuXG4gICAgLy8gQ2xvdWRXYXRjaCBMb2dzIC0gTG9nIFN0cmVhbSBvcGVyYXRpb25zXG4gICAgdGhpcy5yb2xlLmFkZFRvUHJpbmNpcGFsUG9saWN5KG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIHNpZDogJ0xvZ1N0cmVhbUFjY2VzcycsXG4gICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICBhY3Rpb25zOiBSVU5USU1FX0xPR1NfU1RSRUFNX0FDVElPTlMsXG4gICAgICByZXNvdXJjZXM6IFtgYXJuOiR7U3RhY2sub2YodGhpcykucGFydGl0aW9ufTpsb2dzOiR7cmVnaW9ufToke2FjY291bnR9OmxvZy1ncm91cDovYXdzL2JlZHJvY2stYWdlbnRjb3JlL3J1bnRpbWVzLyo6bG9nLXN0cmVhbToqYF0sXG4gICAgfSkpO1xuXG4gICAgLy8gWC1SYXkgVHJhY2luZyAtIG11c3QgYmUgKiBmb3IgdHJhY2luZ1xuICAgIHRoaXMucm9sZS5hZGRUb1ByaW5jaXBhbFBvbGljeShuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICBzaWQ6ICdYUmF5QWNjZXNzJyxcbiAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgIGFjdGlvbnM6IFJVTlRJTUVfWFJBWV9BQ1RJT05TLFxuICAgICAgcmVzb3VyY2VzOiBbJyonXSxcbiAgICB9KSk7XG5cbiAgICAvLyBDbG91ZFdhdGNoIE1ldHJpY3MgLSBzY29wZWQgdG8gYmVkcm9jay1hZ2VudGNvcmUgbmFtZXNwYWNlXG4gICAgdGhpcy5yb2xlLmFkZFRvUHJpbmNpcGFsUG9saWN5KG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIHNpZDogJ0Nsb3VkV2F0Y2hNZXRyaWNzJyxcbiAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgIGFjdGlvbnM6IFJVTlRJTUVfQ0xPVURXQVRDSF9NRVRSSUNTX0FDVElPTlMsXG4gICAgICByZXNvdXJjZXM6IFsnKiddLFxuICAgICAgY29uZGl0aW9uczoge1xuICAgICAgICBTdHJpbmdFcXVhbHM6IHtcbiAgICAgICAgICAnY2xvdWR3YXRjaDpuYW1lc3BhY2UnOiBSVU5USU1FX0NMT1VEV0FUQ0hfTkFNRVNQQUNFLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KSk7XG5cbiAgICAvLyBCZWRyb2NrIEFnZW50Q29yZSBXb3JrbG9hZCBJZGVudGl0eSBBY2Nlc3NcbiAgICAvLyBOb3RlOiBUaGUgYWdlbnQgbmFtZSB3aWxsIGJlIGRldGVybWluZWQgYXQgcnVudGltZSwgc28gd2UgdXNlIGEgd2lsZGNhcmQgcGF0dGVyblxuICAgIHRoaXMucm9sZS5hZGRUb1ByaW5jaXBhbFBvbGljeShuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICBzaWQ6ICdHZXRBZ2VudEFjY2Vzc1Rva2VuJyxcbiAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgIGFjdGlvbnM6IFJVTlRJTUVfV09SS0xPQURfSURFTlRJVFlfQUNUSU9OUyxcbiAgICAgIHJlc291cmNlczogW1xuICAgICAgICBgYXJuOiR7U3RhY2sub2YodGhpcykucGFydGl0aW9ufTpiZWRyb2NrLWFnZW50Y29yZToke3JlZ2lvbn06JHthY2NvdW50fTp3b3JrbG9hZC1pZGVudGl0eS1kaXJlY3RvcnkvZGVmYXVsdGAsXG4gICAgICAgIGBhcm46JHtTdGFjay5vZih0aGlzKS5wYXJ0aXRpb259OmJlZHJvY2stYWdlbnRjb3JlOiR7cmVnaW9ufToke2FjY291bnR9Ondvcmtsb2FkLWlkZW50aXR5LWRpcmVjdG9yeS9kZWZhdWx0L3dvcmtsb2FkLWlkZW50aXR5LypgLFxuICAgICAgXSxcbiAgICB9KSk7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgYXJ0aWZhY3QgY29uZmlndXJhdGlvbiBmb3IgQ2xvdWRGb3JtYXRpb25cbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcml2YXRlIHJlbmRlckFnZW50UnVudGltZUFydGlmYWN0KCk6IGFueSB7XG4gICAgLy8gc2V0IHBlcm1pc3Npb24gd2l0aCBiaW5kXG4gICAgdGhpcy5hZ2VudFJ1bnRpbWVBcnRpZmFjdC5iaW5kKHRoaXMsIHRoaXMpO1xuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuYWdlbnRSdW50aW1lQXJ0aWZhY3QuX3JlbmRlcigpO1xuICAgIGlmICgoY29uZmlnIGFzIGFueSkuY29kZSkgeyAvLyBTM0ltYWdlXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb2RlQ29uZmlndXJhdGlvbjoge1xuICAgICAgICAgIGNvZGU6IChjb25maWcgYXMgYW55KS5jb2RlLFxuICAgICAgICAgIHJ1bnRpbWU6IChjb25maWcgYXMgYW55KS5ydW50aW1lLFxuICAgICAgICAgIGVudHJ5UG9pbnQ6IChjb25maWcgYXMgYW55KS5lbnRyeVBvaW50LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRWNySW1hZ2Ugb3IgQXNzZXRJbWFnZVxuICAgICAgY29uc3QgY29udGFpbmVyVXJpID0gKGNvbmZpZyBhcyBhbnkpLmNvbnRhaW5lclVyaTtcbiAgICAgIGlmIChjb250YWluZXJVcmkpIHtcbiAgICAgICAgdGhpcy52YWxpZGF0ZUNvbnRhaW5lclVyaShjb250YWluZXJVcmkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGFpbmVyQ29uZmlndXJhdGlvbjoge1xuICAgICAgICAgIGNvbnRhaW5lclVyaTogY29udGFpbmVyVXJpLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgcmVxdWVzdCBoZWFkZXIgY29uZmlndXJhdGlvbiBmb3IgQ2xvdWRGb3JtYXRpb25cbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcml2YXRlIHJlbmRlclJlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uKHJlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uPzogUmVxdWVzdEhlYWRlckNvbmZpZ3VyYXRpb24pOiBhbnkge1xuICAgIGlmICghcmVxdWVzdEhlYWRlckNvbmZpZ3VyYXRpb24/LmFsbG93bGlzdGVkSGVhZGVycykge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlcXVlc3RIZWFkZXJBbGxvd2xpc3Q6IHJlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uLmFsbG93bGlzdGVkSGVhZGVycyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgdGhlIGxpZmVjeWNsZSBjb25maWd1cmF0aW9uIGZvciBDbG91ZEZvcm1hdGlvblxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByaXZhdGUgcmVuZGVyTGlmZWN5Y2xlQ29uZmlndXJhdGlvbigpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICBpZGxlUnVudGltZVNlc3Npb25UaW1lb3V0OiB0aGlzLmxpZmVjeWNsZUNvbmZpZ3VyYXRpb24/LmlkbGVSdW50aW1lU2Vzc2lvblRpbWVvdXQ/LnRvU2Vjb25kcygpLFxuICAgICAgbWF4TGlmZXRpbWU6IHRoaXMubGlmZWN5Y2xlQ29uZmlndXJhdGlvbj8ubWF4TGlmZXRpbWU/LnRvU2Vjb25kcygpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSByZXF1ZXN0IGhlYWRlciBjb25maWd1cmF0aW9uXG4gICAqIEB0aHJvd3MgRXJyb3IgaWYgdmFsaWRhdGlvbiBmYWlsc1xuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZVJlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uKHJlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uOiBSZXF1ZXN0SGVhZGVyQ29uZmlndXJhdGlvbik6IHZvaWQge1xuICAgIGNvbnN0IGFsbEVycm9yczogc3RyaW5nW10gPSBbXTtcbiAgICBpZiAocmVxdWVzdEhlYWRlckNvbmZpZ3VyYXRpb24uYWxsb3dsaXN0ZWRIZWFkZXJzKSB7XG4gICAgICBpZiAocmVxdWVzdEhlYWRlckNvbmZpZ3VyYXRpb24uYWxsb3dsaXN0ZWRIZWFkZXJzLmxlbmd0aCA8IDEgfHwgcmVxdWVzdEhlYWRlckNvbmZpZ3VyYXRpb24uYWxsb3dsaXN0ZWRIZWFkZXJzLmxlbmd0aCA+IDIwKSB7XG4gICAgICAgIGFsbEVycm9ycy5wdXNoKCdSZXF1ZXN0IGhlYWRlciBhbGxvdyBsaXN0IGNvbnRhaW4gYmV0d2VlbiAxIGFuZCAyMCBoZWFkZXJzJyk7XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgaGVhZGVyIG9mIHJlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uLmFsbG93bGlzdGVkSGVhZGVycykge1xuICAgICAgICAvLyBWYWxpZGF0ZSBsZW5ndGhcbiAgICAgICAgY29uc3QgbGVuZ3RoRXJyb3JzID0gdmFsaWRhdGVTdHJpbmdGaWVsZCh7XG4gICAgICAgICAgdmFsdWU6IGhlYWRlcixcbiAgICAgICAgICBmaWVsZE5hbWU6ICdSZXF1ZXN0IGhlYWRlcicsXG4gICAgICAgICAgbWluTGVuZ3RoOiAxLFxuICAgICAgICAgIG1heExlbmd0aDogMjU2LFxuICAgICAgICB9KTtcbiAgICAgICAgYWxsRXJyb3JzLnB1c2goLi4ubGVuZ3RoRXJyb3JzKTtcblxuICAgICAgICBjb25zdCBwYXR0ZXJuRXJyb3JzID0gdmFsaWRhdGVGaWVsZFBhdHRlcm4oXG4gICAgICAgICAgaGVhZGVyLFxuICAgICAgICAgICdSZXF1ZXN0IGhlYWRlcicsXG4gICAgICAgICAgLyhBdXRob3JpemF0aW9ufFgtQW16bi1CZWRyb2NrLUFnZW50Q29yZS1SdW50aW1lLUN1c3RvbS1bYS16QS1aMC05LV0rKS8sXG4gICAgICAgICAgJ1JlcXVlc3QgaGVhZGVyIG11c3QgY29udGFpbiBvbmx5IGxldHRlcnMsIG51bWJlcnMsIGFuZCBoeXBoZW5zJyxcbiAgICAgICAgKTtcbiAgICAgICAgYWxsRXJyb3JzLnB1c2goLi4ucGF0dGVybkVycm9ycyk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChhbGxFcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihhbGxFcnJvcnMuam9pbignXFxuJykpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIGxpZmVjeWNsZSBjb25maWd1cmF0aW9uXG4gICAqIEB0aHJvd3MgRXJyb3IgaWYgdmFsaWRhdGlvbiBmYWlsc1xuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZUxpZmVjeWNsZUNvbmZpZ3VyYXRpb24obGlmZWN5Y2xlQ29uZmlndXJhdGlvbjogTGlmZWN5Y2xlQ29uZmlndXJhdGlvbik6IHZvaWQge1xuICAgIGlmIChsaWZlY3ljbGVDb25maWd1cmF0aW9uLmlkbGVSdW50aW1lU2Vzc2lvblRpbWVvdXQgJiYgIWxpZmVjeWNsZUNvbmZpZ3VyYXRpb24uaWRsZVJ1bnRpbWVTZXNzaW9uVGltZW91dC5pc1VucmVzb2x2ZWQoKSkge1xuICAgICAgaWYgKGxpZmVjeWNsZUNvbmZpZ3VyYXRpb24uaWRsZVJ1bnRpbWVTZXNzaW9uVGltZW91dC50b1NlY29uZHMoKSA8IExJRkVDWUNMRV9NSU5fVElNRU9VVC50b1NlY29uZHMoKVxuICAgICAgICB8fCBsaWZlY3ljbGVDb25maWd1cmF0aW9uLmlkbGVSdW50aW1lU2Vzc2lvblRpbWVvdXQudG9TZWNvbmRzKCkgPiBMSUZFQ1lDTEVfTUFYX0xJRkVUSU1FLnRvU2Vjb25kcygpKSB7XG4gICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoYElkbGUgcnVudGltZSBzZXNzaW9uIHRpbWVvdXQgbXVzdCBiZSBiZXR3ZWVuICR7TElGRUNZQ0xFX01JTl9USU1FT1VULnRvU2Vjb25kcygpfSBzZWNvbmRzIGFuZCAke0xJRkVDWUNMRV9NQVhfTElGRVRJTUUudG9TZWNvbmRzKCl9IHNlY29uZHNgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGxpZmVjeWNsZUNvbmZpZ3VyYXRpb24ubWF4TGlmZXRpbWUgJiYgIWxpZmVjeWNsZUNvbmZpZ3VyYXRpb24ubWF4TGlmZXRpbWUuaXNVbnJlc29sdmVkKCkpIHtcbiAgICAgIGlmIChsaWZlY3ljbGVDb25maWd1cmF0aW9uLm1heExpZmV0aW1lLnRvU2Vjb25kcygpIDwgTElGRUNZQ0xFX01JTl9USU1FT1VULnRvU2Vjb25kcygpXG4gICAgICAgIHx8IGxpZmVjeWNsZUNvbmZpZ3VyYXRpb24ubWF4TGlmZXRpbWUudG9TZWNvbmRzKCkgPiBMSUZFQ1lDTEVfTUFYX0xJRkVUSU1FLnRvU2Vjb25kcygpKSB7XG4gICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoYE1heGltdW0gbGlmZXRpbWUgbXVzdCBiZSBiZXR3ZWVuICR7TElGRUNZQ0xFX01JTl9USU1FT1VULnRvU2Vjb25kcygpfSBzZWNvbmRzIGFuZCAke0xJRkVDWUNMRV9NQVhfTElGRVRJTUUudG9TZWNvbmRzKCl9IHNlY29uZHNgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSBydW50aW1lIG5hbWUgZm9ybWF0XG4gICAqIFBhdHRlcm46IF5bYS16QS1aXVthLXpBLVowLTlfXXswLDQ3fSRcbiAgICogQHRocm93cyBFcnJvciBpZiB2YWxpZGF0aW9uIGZhaWxzXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlUnVudGltZU5hbWUoKTogdm9pZCB7XG4gICAgLy8gU2tpcCB2YWxpZGF0aW9uIGlmIHRoZSBuYW1lIGNvbnRhaW5zIENESyB0b2tlbnMgKHVucmVzb2x2ZWQgdmFsdWVzKVxuICAgIGlmIChUb2tlbi5pc1VucmVzb2x2ZWQodGhpcy5hZ2VudFJ1bnRpbWVOYW1lKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIGxlbmd0aFxuICAgIGNvbnN0IGxlbmd0aEVycm9ycyA9IHZhbGlkYXRlU3RyaW5nRmllbGQoe1xuICAgICAgdmFsdWU6IHRoaXMuYWdlbnRSdW50aW1lTmFtZSxcbiAgICAgIGZpZWxkTmFtZTogJ1J1bnRpbWUgbmFtZScsXG4gICAgICBtaW5MZW5ndGg6IDEsXG4gICAgICBtYXhMZW5ndGg6IDQ4LFxuICAgIH0pO1xuXG4gICAgLy8gVmFsaWRhdGUgcGF0dGVyblxuICAgIGNvbnN0IHBhdHRlcm5FcnJvcnMgPSB2YWxpZGF0ZUZpZWxkUGF0dGVybihcbiAgICAgIHRoaXMuYWdlbnRSdW50aW1lTmFtZSxcbiAgICAgICdSdW50aW1lIG5hbWUnLFxuICAgICAgL15bYS16QS1aXVthLXpBLVowLTlfXXswLDQ3fSQvLFxuICAgICAgJ1J1bnRpbWUgbmFtZSBtdXN0IHN0YXJ0IHdpdGggYSBsZXR0ZXIgYW5kIGNvbnRhaW4gb25seSBsZXR0ZXJzLCBudW1iZXJzLCBhbmQgdW5kZXJzY29yZXMnLFxuICAgICk7XG5cbiAgICAvLyBDb21iaW5lIGFuZCB0aHJvdyBpZiBhbnkgZXJyb3JzXG4gICAgY29uc3QgYWxsRXJyb3JzID0gWy4uLmxlbmd0aEVycm9ycywgLi4ucGF0dGVybkVycm9yc107XG4gICAgaWYgKGFsbEVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGFsbEVycm9ycy5qb2luKCdcXG4nKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgZGVzY3JpcHRpb24gZm9ybWF0XG4gICAqIE11c3QgYmUgYmV0d2VlbiAxIGFuZCAxMjAwIGNoYXJhY3RlcnMgKHBlciBDbG91ZEZvcm1hdGlvbiBzcGVjaWZpY2F0aW9uKVxuICAgKiBAdGhyb3dzIEVycm9yIGlmIHZhbGlkYXRpb24gZmFpbHNcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVEZXNjcmlwdGlvbigpOiB2b2lkIHtcbiAgICAvLyBTa2lwIHZhbGlkYXRpb24gaWYgdGhlIGRlc2NyaXB0aW9uIGNvbnRhaW5zIENESyB0b2tlbnMgKHVucmVzb2x2ZWQgdmFsdWVzKVxuICAgIGlmIChUb2tlbi5pc1VucmVzb2x2ZWQodGhpcy5kZXNjcmlwdGlvbikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kZXNjcmlwdGlvbikge1xuICAgICAgY29uc3QgZXJyb3JzID0gdmFsaWRhdGVTdHJpbmdGaWVsZCh7XG4gICAgICAgIHZhbHVlOiB0aGlzLmRlc2NyaXB0aW9uLFxuICAgICAgICBmaWVsZE5hbWU6ICdEZXNjcmlwdGlvbicsXG4gICAgICAgIG1pbkxlbmd0aDogMSxcbiAgICAgICAgbWF4TGVuZ3RoOiAxMjAwLFxuICAgICAgfSk7XG5cbiAgICAgIGlmIChlcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGVycm9ycy5qb2luKCdcXG4nKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAgICogLSBNYXhpbXVtIDUwIGVudHJpZXNcbiAgICogLSBLZXk6IDEtMTAwIGNoYXJhY3RlcnNcbiAgICogLSBWYWx1ZTogMC0yMDQ4IGNoYXJhY3RlcnMgKHBlciBDbG91ZEZvcm1hdGlvbiBzcGVjaWZpY2F0aW9uKVxuICAgKiBAdGhyb3dzIEVycm9yIGlmIHZhbGlkYXRpb24gZmFpbHNcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVFbnZpcm9ubWVudFZhcmlhYmxlcyhlbnZWYXJzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9KTogdm9pZCB7XG4gICAgY29uc3QgZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKGVudlZhcnMpO1xuXG4gICAgLy8gVmFsaWRhdGUgbnVtYmVyIG9mIGVudHJpZXMgKDAtNTApXG4gICAgaWYgKGVudHJpZXMubGVuZ3RoID4gNTApIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgIGBUb28gbWFueSBlbnZpcm9ubWVudCB2YXJpYWJsZXM6ICR7ZW50cmllcy5sZW5ndGh9LiBNYXhpbXVtIGFsbG93ZWQgaXMgNTBgLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBlbnRyaWVzKSB7XG4gICAgICAvLyBTa2lwIHZhbGlkYXRpb24gaWYga2V5IG9yIHZhbHVlIGNvbnRhaW5zIENESyB0b2tlbnNcbiAgICAgIGlmIChUb2tlbi5pc1VucmVzb2x2ZWQoa2V5KSB8fCBUb2tlbi5pc1VucmVzb2x2ZWQodmFsdWUpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBWYWxpZGF0ZSBrZXkgbGVuZ3RoXG4gICAgICBjb25zdCBsZW5ndGhFcnJvcnMgPSB2YWxpZGF0ZVN0cmluZ0ZpZWxkKHtcbiAgICAgICAgdmFsdWU6IGtleSxcbiAgICAgICAgZmllbGROYW1lOiBgRW52aXJvbm1lbnQgdmFyaWFibGUga2V5ICcke2tleX0nYCxcbiAgICAgICAgbWluTGVuZ3RoOiAxLFxuICAgICAgICBtYXhMZW5ndGg6IDEwMCxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBWYWxpZGF0ZSBrZXkgcGF0dGVyblxuICAgICAgY29uc3QgcGF0dGVybkVycm9ycyA9IHZhbGlkYXRlRmllbGRQYXR0ZXJuKFxuICAgICAgICBrZXksXG4gICAgICAgIGBFbnZpcm9ubWVudCB2YXJpYWJsZSBrZXkgJyR7a2V5fSdgLFxuICAgICAgICAvXlthLXpBLVpfXVthLXpBLVowLTlfXSokLyxcbiAgICAgICAgYEVudmlyb25tZW50IHZhcmlhYmxlIGtleSAnJHtrZXl9JyBtdXN0IHN0YXJ0IHdpdGggYSBsZXR0ZXIgb3IgdW5kZXJzY29yZSBhbmQgY29udGFpbiBvbmx5IGxldHRlcnMsIG51bWJlcnMsIGFuZCB1bmRlcnNjb3Jlc2AsXG4gICAgICApO1xuXG4gICAgICAvLyBDb21iaW5lIGFuZCB0aHJvdyBpZiBhbnkgZXJyb3JzXG4gICAgICBjb25zdCBhbGxFcnJvcnMgPSBbLi4ubGVuZ3RoRXJyb3JzLCAuLi5wYXR0ZXJuRXJyb3JzXTtcbiAgICAgIGlmIChhbGxFcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGFsbEVycm9ycy5qb2luKCdcXG4nKSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFZhbGlkYXRlIHZhbHVlIGxlbmd0aCAoMC0yMDQ4IGNoYXJhY3RlcnMgcGVyIENsb3VkRm9ybWF0aW9uKVxuICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+IDIwNDgpIHtcbiAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgICBgSW52YWxpZCBlbnZpcm9ubWVudCB2YXJpYWJsZSB2YWx1ZSBsZW5ndGggZm9yIGtleSAnJHtrZXl9JzogJHt2YWx1ZS5sZW5ndGh9IGNoYXJhY3RlcnMuIGAgK1xuICAgICAgICAgICdWYWx1ZXMgbXVzdCBub3QgZXhjZWVkIDIwNDggY2hhcmFjdGVycycsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgdGFncyBmb3JtYXRcbiAgICogQHBhcmFtIHRhZ3MgVGhlIHRhZ3Mgb2JqZWN0IHRvIHZhbGlkYXRlXG4gICAqIEB0aHJvd3MgRXJyb3IgaWYgdmFsaWRhdGlvbiBmYWlsc1xuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZVRhZ3ModGFnczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSk6IHZvaWQge1xuICAgIC8vIFZhbGlkYXRlIGVhY2ggdGFnIGtleSBhbmQgdmFsdWVcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0YWdzKSkge1xuICAgICAgLy8gU2tpcCB2YWxpZGF0aW9uIGlmIGtleSBvciB2YWx1ZSBjb250YWlucyBDREsgdG9rZW5zXG4gICAgICBpZiAoVG9rZW4uaXNVbnJlc29sdmVkKGtleSkgfHwgVG9rZW4uaXNVbnJlc29sdmVkKHZhbHVlKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gVmFsaWRhdGUgdGFnIGtleSBsZW5ndGhcbiAgICAgIGNvbnN0IGtleUxlbmd0aEVycm9ycyA9IHZhbGlkYXRlU3RyaW5nRmllbGQoe1xuICAgICAgICB2YWx1ZToga2V5LFxuICAgICAgICBmaWVsZE5hbWU6IGBUYWcga2V5IFwiJHtrZXl9XCJgLFxuICAgICAgICBtaW5MZW5ndGg6IDEsXG4gICAgICAgIG1heExlbmd0aDogMjU2LFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFZhbGlkYXRlIHRhZyBrZXkgcGF0dGVyblxuICAgICAgY29uc3Qga2V5UGF0dGVybkVycm9ycyA9IHZhbGlkYXRlRmllbGRQYXR0ZXJuKFxuICAgICAgICBrZXksXG4gICAgICAgIGBUYWcga2V5IFwiJHtrZXl9XCJgLFxuICAgICAgICAvXlthLXpBLVowLTlcXHMuXzovPStALV0qJC8sXG4gICAgICAgIGBUYWcga2V5IFwiJHtrZXl9XCIgY2FuIG9ubHkgY29udGFpbiBsZXR0ZXJzIChhLXosIEEtWiksIG51bWJlcnMgKDAtOSksIHNwYWNlcywgYW5kIHNwZWNpYWwgY2hhcmFjdGVycyAoLl86Lz0rQC0pYCxcbiAgICAgICk7XG5cbiAgICAgIC8vIENvbWJpbmUga2V5IGVycm9ycyBhbmQgdGhyb3cgaWYgYW55XG4gICAgICBjb25zdCBrZXlFcnJvcnMgPSBbLi4ua2V5TGVuZ3RoRXJyb3JzLCAuLi5rZXlQYXR0ZXJuRXJyb3JzXTtcbiAgICAgIGlmIChrZXlFcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGtleUVycm9ycy5qb2luKCdcXG4nKSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoYFRhZyB2YWx1ZSBmb3Iga2V5IFwiJHtrZXl9XCIgY2Fubm90IGJlIG51bGwgb3IgdW5kZWZpbmVkYCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFZhbGlkYXRlIHRhZyB2YWx1ZSBsZW5ndGhcbiAgICAgIGNvbnN0IHZhbHVlTGVuZ3RoRXJyb3JzID0gdmFsaWRhdGVTdHJpbmdGaWVsZCh7XG4gICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgZmllbGROYW1lOiBgVGFnIHZhbHVlIGZvciBrZXkgXCIke2tleX1cImAsXG4gICAgICAgIG1pbkxlbmd0aDogMCxcbiAgICAgICAgbWF4TGVuZ3RoOiAyNTYsXG4gICAgICB9KTtcblxuICAgICAgLy8gVmFsaWRhdGUgdGFnIHZhbHVlIHBhdHRlcm5cbiAgICAgIGNvbnN0IHZhbHVlUGF0dGVybkVycm9ycyA9IHZhbGlkYXRlRmllbGRQYXR0ZXJuKFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgYFRhZyB2YWx1ZSBmb3Iga2V5IFwiJHtrZXl9XCJgLFxuICAgICAgICAvXlthLXpBLVowLTlcXHMuXzovPStALV0qJC8sXG4gICAgICAgIGBUYWcgdmFsdWUgZm9yIGtleSBcIiR7a2V5fVwiIGNhbiBvbmx5IGNvbnRhaW4gbGV0dGVycyAoYS16LCBBLVopLCBudW1iZXJzICgwLTkpLCBzcGFjZXMsIGFuZCBzcGVjaWFsIGNoYXJhY3RlcnMgKC5fOi89K0AtKWAsXG4gICAgICApO1xuXG4gICAgICAvLyBDb21iaW5lIHZhbHVlIGVycm9ycyBhbmQgdGhyb3cgaWYgYW55XG4gICAgICBjb25zdCB2YWx1ZUVycm9ycyA9IFsuLi52YWx1ZUxlbmd0aEVycm9ycywgLi4udmFsdWVQYXR0ZXJuRXJyb3JzXTtcbiAgICAgIGlmICh2YWx1ZUVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IodmFsdWVFcnJvcnMuam9pbignXFxuJykpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIGNvbnRhaW5lciBVUkkgZm9ybWF0XG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlQ29udGFpbmVyVXJpKHVyaTogc3RyaW5nKTogdm9pZCB7XG4gICAgLy8gU2tpcCB2YWxpZGF0aW9uIGlmIHRoZSBVUkkgY29udGFpbnMgQ0RLIHRva2VucyAodW5yZXNvbHZlZCB2YWx1ZXMpXG4gICAgaWYgKFRva2VuLmlzVW5yZXNvbHZlZCh1cmkpKSB7XG4gICAgICAvLyBBZGQgYSB3YXJuaW5nIHRoYXQgdmFsaWRhdGlvbiB3aWxsIGJlIHNraXBwZWQgZm9yIHRva2VuLWJhc2VkIFVSSXNcbiAgICAgIEFubm90YXRpb25zLm9mKHRoaXMpLmFkZEluZm8oXG4gICAgICAgICdDb250YWluZXIgVVJJIHZhbGlkYXRpb24gc2tpcHBlZCBhcyBpdCBjb250YWlucyB1bnJlc29sdmVkIENESyB0b2tlbnMuICcgK1xuICAgICAgICAnVGhlIFVSSSB3aWxsIGJlIHZhbGlkYXRlZCBhdCBkZXBsb3ltZW50IHRpbWUuJyxcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gT25seSB2YWxpZGF0ZSBpZiB0aGUgVVJJIGlzIGEgY29uY3JldGUgc3RyaW5nIChub3QgYSB0b2tlbilcbiAgICBjb25zdCBwYXR0ZXJuID0gL15cXGR7MTJ9XFwuZGtyXFwuZWNyXFwuKFthLXowLTktXSspXFwuYW1hem9uYXdzXFwuY29tXFwvKCg/OlthLXowLTldKyg/OlsuXy1dW2EtejAtOV0rKSpcXC8pKlthLXowLTldKyg/OlsuXy1dW2EtejAtOV0rKSopKFs6QF1cXFMrKSQvO1xuICAgIGlmICghcGF0dGVybi50ZXN0KHVyaSkpIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIGNvbnRhaW5lciBVUkkgZm9ybWF0OiAke3VyaX0uIE11c3QgYmUgYSB2YWxpZCBFQ1IgVVJJIChlLmcuLCAxMjM0NTY3ODkwMTIuZGtyLmVjci51cy13ZXN0LTIuYW1hem9uYXdzLmNvbS9teS1hZ2VudDpsYXRlc3QpYCxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgSUFNIHJvbGUgQVJOIGZvcm1hdCBhbmQgc3RydWN0dXJlXG4gICAqIEB0aHJvd3MgRXJyb3IgaWYgdmFsaWRhdGlvbiBmYWlsc1xuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZVJvbGVBcm4ocm9sZUFybjogc3RyaW5nKTogdm9pZCB7XG4gICAgLy8gVmFsaWRhdGUgYmFzaWMgQVJOIGZvcm1hdCBmb3IgSUFNIHJvbGVzXG4gICAgY29uc3QgYXJuUGF0dGVybiA9IC9eYXJuOlthLXpcXC1dKzppYW06OlxcZHsxMn06cm9sZVxcL1thLXpBLVowLTkrPSwuQFxcLV9cXC9dKyQvO1xuICAgIGlmICghYXJuUGF0dGVybi50ZXN0KHJvbGVBcm4pKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGBJbnZhbGlkIElBTSByb2xlIEFSTiBmb3JtYXQ6ICR7cm9sZUFybn0uIGAgK1xuICAnRXhwZWN0ZWQgZm9ybWF0OiBhcm46PHBhcnRpdGlvbj46aWFtOjo8YWNjb3VudC1pZD46cm9sZS88cm9sZS1uYW1lPiBvciBhcm46PHBhcnRpdGlvbj46aWFtOjo8YWNjb3VudC1pZD46cm9sZS88cGF0aD4vPHJvbGUtbmFtZT4nKTtcbiAgICB9XG5cbiAgICAvLyBQYXJzZSB0aGUgQVJOIGNvbXBvbmVudHMgdXNpbmcgQ0RLJ3MgQXJuLnNwbGl0KClcbiAgICAvLyBVc2UgU0xBU0hfUkVTT1VSQ0VfTkFNRSBmb3JtYXQgZm9yIElBTSByb2xlcyAod2hpY2ggdXNlIGZvcm1hdDogcm9sZS9yb2xlLW5hbWUgb3Igcm9sZS9wYXRoL3RvL3JvbGUtbmFtZSlcbiAgICBjb25zdCBhcm5Db21wb25lbnRzID0gQXJuLnNwbGl0KHJvbGVBcm4sIEFybkZvcm1hdC5TTEFTSF9SRVNPVVJDRV9OQU1FKTtcblxuICAgIGlmIChhcm5Db21wb25lbnRzLnNlcnZpY2UgIT09ICdpYW0nKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGBJbnZhbGlkIHNlcnZpY2UgaW4gQVJOOiAke2FybkNvbXBvbmVudHMuc2VydmljZX0uIEV4cGVjdGVkICdpYW0nIGZvciBJQU0gcm9sZSBBUk4uYCk7XG4gICAgfVxuXG4gICAgY29uc3QgYWNjb3VudElkID0gYXJuQ29tcG9uZW50cy5hY2NvdW50O1xuICAgIGlmICghYWNjb3VudElkIHx8ICEvXlxcZHsxMn0kLy50ZXN0KGFjY291bnRJZCkpIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoYEludmFsaWQgQVdTIGFjY291bnQgSUQgaW4gcm9sZSBBUk46ICR7YWNjb3VudElkfS4gTXVzdCBiZSBhIDEyLWRpZ2l0IG51bWJlci5gKTtcbiAgICB9XG5cbiAgICAvLyBFeHRyYWN0IHJvbGUgbmFtZSBmcm9tIHJlc291cmNlXG4gICAgLy8gRm9yIElBTSByb2xlcywgcmVzb3VyY2Ugd2lsbCBiZSBcInJvbGVcIiBhbmQgcmVzb3VyY2VOYW1lIHdpbGwgYmUgdGhlIHJvbGUgbmFtZSAod2l0aCBvcHRpb25hbCBwYXRoKVxuICAgIGNvbnN0IHJlc291cmNlID0gYXJuQ29tcG9uZW50cy5yZXNvdXJjZTtcbiAgICBjb25zdCByZXNvdXJjZU5hbWUgPSBhcm5Db21wb25lbnRzLnJlc291cmNlTmFtZTtcblxuICAgIGlmIChyZXNvdXJjZSAhPT0gJ3JvbGUnKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGBJbnZhbGlkIHJlc291cmNlIHR5cGUgaW4gQVJOOiAke3Jlc291cmNlfS4gRXhwZWN0ZWQgJ3JvbGUnIGZvciBJQU0gcm9sZSBBUk4uYCk7XG4gICAgfVxuXG4gICAgaWYgKCFyZXNvdXJjZU5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoJ1JvbGUgbmFtZSBpcyBtaXNzaW5nIGluIHRoZSBBUk4nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgcm9sZVBhdGhQYXJ0cyA9IHJlc291cmNlTmFtZS5zcGxpdCgnLycpO1xuICAgICAgY29uc3Qgcm9sZU5hbWUgPSByb2xlUGF0aFBhcnRzW3JvbGVQYXRoUGFydHMubGVuZ3RoIC0gMV07XG5cbiAgICAgIGlmIChyb2xlTmFtZS5sZW5ndGggPiA2NCkge1xuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGBSb2xlIG5hbWUgZXhjZWVkcyBtYXhpbXVtIGxlbmd0aCBvZiA2NCBjaGFyYWN0ZXJzOiAke3JvbGVOYW1lfWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHN0YWNrQWNjb3VudCA9IFN0YWNrLm9mKHRoaXMpLmFjY291bnQ7XG4gICAgaWYgKCFUb2tlbi5pc1VucmVzb2x2ZWQoc3RhY2tBY2NvdW50KSAmJiBhY2NvdW50SWQgIT09IHN0YWNrQWNjb3VudCkge1xuICAgICAgQW5ub3RhdGlvbnMub2YodGhpcykuYWRkV2FybmluZyhcbiAgICAgICAgYElBTSByb2xlIGlzIGZyb20gYSBkaWZmZXJlbnQgYWNjb3VudCAoJHthY2NvdW50SWR9KSB0aGFuIHRoZSBzdGFjayBhY2NvdW50ICgke3N0YWNrQWNjb3VudH0pLiBgICtcbiAgICAgICAgJ0Vuc3VyZSBjcm9zcy1hY2NvdW50IHBlcm1pc3Npb25zIGFyZSBwcm9wZXJseSBjb25maWd1cmVkLicsXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIHRoZSByZWdpb24gKElBTSBpcyBnbG9iYWwsIHNvIHJlZ2lvbiBzaG91bGQgYmUgZW1wdHkpXG4gICAgY29uc3QgcmVnaW9uID0gYXJuQ29tcG9uZW50cy5yZWdpb247XG4gICAgY29uc3Qgc3RhY2tSZWdpb24gPSBTdGFjay5vZih0aGlzKS5yZWdpb247XG4gICAgaWYgKHJlZ2lvbiAmJiByZWdpb24gIT09ICcnICYmIHJlZ2lvbiAhPT0gc3RhY2tSZWdpb24gJiYgIVRva2VuLmlzVW5yZXNvbHZlZChzdGFja1JlZ2lvbikpIHtcbiAgICAgIEFubm90YXRpb25zLm9mKHRoaXMpLmFkZFdhcm5pbmcoXG4gICAgICAgIGBJQU0gcm9sZSBBUk4gY29udGFpbnMgYSByZWdpb24gKCR7cmVnaW9ufSkgdGhhdCBkb2Vzbid0IG1hdGNoIHRoZSBzdGFjayByZWdpb24gKCR7c3RhY2tSZWdpb259KS4gYCArXG4gICAgICAgICdJQU0gaXMgYSBnbG9iYWwgc2VydmljZSwgc28gdGhpcyBtaWdodCBiZSBpbnRlbnRpb25hbC4nLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkIGFuIGVuZHBvaW50IHRvIHRoaXMgcnVudGltZVxuICAgKiBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRoYXQgY3JlYXRlcyBhIFJ1bnRpbWVFbmRwb2ludCBhc3NvY2lhdGVkIHdpdGggdGhpcyBydW50aW1lXG4gICAqXG4gICAqIEBwYXJhbSBlbmRwb2ludE5hbWUgVGhlIG5hbWUgb2YgdGhlIGVuZHBvaW50XG4gICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBlbmRwb2ludFxuICAgKiBAcmV0dXJucyBUaGUgY3JlYXRlZCBSdW50aW1lRW5kcG9pbnRcbiAgICovXG4gIEBNZXRob2RNZXRhZGF0YSgpXG4gIHB1YmxpYyBhZGRFbmRwb2ludChcbiAgICBlbmRwb2ludE5hbWU6IHN0cmluZyxcbiAgICBvcHRpb25zPzogQWRkRW5kcG9pbnRPcHRpb25zLFxuICApOiBSdW50aW1lRW5kcG9pbnQge1xuICAgIC8vIENyZWF0ZSB0aGUgZW5kcG9pbnQgKHNlY3VyaXR5IGNvbmZpZ3VyYXRpb24gaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZClcbiAgICBjb25zdCBlbmRwb2ludCA9IG5ldyBSdW50aW1lRW5kcG9pbnQodGhpcywgYEVuZHBvaW50JHtlbmRwb2ludE5hbWV9YCwge1xuICAgICAgZW5kcG9pbnROYW1lOiBlbmRwb2ludE5hbWUsXG4gICAgICBhZ2VudFJ1bnRpbWVJZDogdGhpcy5hZ2VudFJ1bnRpbWVJZCxcbiAgICAgIGFnZW50UnVudGltZVZlcnNpb246IG9wdGlvbnM/LnZlcnNpb24gPz8gdGhpcy5hZ2VudFJ1bnRpbWVWZXJzaW9uID8/ICcxJyxcbiAgICAgIGRlc2NyaXB0aW9uOiBvcHRpb25zPy5kZXNjcmlwdGlvbixcbiAgICB9KTtcblxuICAgIC8vIEFkZCBkZXBlbmRlbmN5OiBlbmRwb2ludCBtdXN0IHdhaXQgZm9yIHJ1bnRpbWUgdG8gYmUgY3JlYXRlZFxuICAgIGVuZHBvaW50Lm5vZGUuYWRkRGVwZW5kZW5jeSh0aGlzLnJ1bnRpbWVSZXNvdXJjZSk7XG5cbiAgICByZXR1cm4gZW5kcG9pbnQ7XG4gIH1cbn1cbiJdfQ==
|
|
703
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInJ1bnRpbWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0EsNkNBQStGO0FBQy9GLHFFQUFxRTtBQUNyRSwyQ0FBMkM7QUFDM0MsMkNBQTJDO0FBQzNDLDhFQUE4RjtBQUM5RiwwRUFBMEU7QUFHMUUsbUNBUWlCO0FBR2pCLGlEQUEyRjtBQUMzRix5REFBcUQ7QUFDckQsbUNBQTJGO0FBQzNGLDZEQUFrRztBQUNsRyw0RUFBK0U7QUFFL0U7OytFQUUrRTtBQUMvRTs7O0dBR0c7QUFDSCxNQUFNLHFCQUFxQixHQUFHLHNCQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBRW5EOzs7R0FHRztBQUNILE1BQU0sc0JBQXNCLEdBQUcsc0JBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUF1R3ZEOzsrRUFFK0U7QUFFL0U7Ozs7Ozs7R0FPRztJQUVVLE9BQU87NEJBRG5CLG9DQUFrQjs7OztzQkFDVSwwQkFBVzs7O3VCQUFuQixTQUFRLFdBQVc7Ozs7dUNBK3BCckMsSUFBQSxrQ0FBYyxHQUFFO1lBQ2pCLG9MQUFPLFdBQVcsNkRBZ0JqQjtZQWhyQkgsNktBaXJCQzs7Ozs7UUFockJDLHNDQUFzQztRQUMvQixNQUFNLENBQVUscUJBQXFCLEdBQVcsOENBQThDLENBQUM7UUFFdEc7Ozs7Ozs7O1dBUUc7UUFDSSxNQUFNLENBQUMsMEJBQTBCLENBQ3RDLEtBQWdCLEVBQ2hCLEVBQVUsRUFDVixLQUE2Qjs7Ozs7Ozs7OztZQUU3QixNQUFNLDJCQUE0QixTQUFRLDBCQUFXO2dCQUNuQyxlQUFlLEdBQUcsS0FBSyxDQUFDLGVBQWUsQ0FBQztnQkFDeEMsY0FBYyxHQUFHLEtBQUssQ0FBQyxjQUFjLENBQUM7Z0JBQ3RDLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDMUMsbUJB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QUFHO2dCQUN4RSxXQUFXLEVBQUUsT0FBTyxFQUFFLFdBQVc7YUFDbEMsQ0FBQyxDQUFDO1lBRUgsK0RBQStEO1lBQy9ELFFBQVEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUVsRCxPQUFPLFFBQVEsQ0FBQztTQUNqQjs7WUFockJVLHVEQUFPOzs7OztBQUFQLDBCQUFPIiwic291cmNlc0NvbnRlbnQiOlsiXG5pbXBvcnQgeyBEdXJhdGlvbiwgU3RhY2ssIEFubm90YXRpb25zLCBUb2tlbiwgQXJuLCBBcm5Gb3JtYXQsIExhenksIE5hbWVzIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgYmVkcm9ja2FnZW50Y29yZSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtYmVkcm9ja2FnZW50Y29yZSc7XG5pbXBvcnQgKiBhcyBlYzIgZnJvbSAnYXdzLWNkay1saWIvYXdzLWVjMic7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgeyBhZGRDb25zdHJ1Y3RNZXRhZGF0YSwgTWV0aG9kTWV0YWRhdGEgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9tZXRhZGF0YS1yZXNvdXJjZSc7XG5pbXBvcnQgeyBwcm9wZXJ0eUluamVjdGFibGUgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9wcm9wLWluamVjdGFibGUnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBSdW50aW1lQXV0aG9yaXplckNvbmZpZ3VyYXRpb24gfSBmcm9tICcuL2luYm91bmQtYXV0aC9ydW50aW1lLWF1dGhvcml6ZXItY29uZmlndXJhdGlvbic7XG5pbXBvcnQge1xuICBSVU5USU1FX0xPR1NfR1JPVVBfQUNUSU9OUyxcbiAgUlVOVElNRV9MT0dTX0RFU0NSSUJFX0FDVElPTlMsXG4gIFJVTlRJTUVfTE9HU19TVFJFQU1fQUNUSU9OUyxcbiAgUlVOVElNRV9YUkFZX0FDVElPTlMsXG4gIFJVTlRJTUVfQ0xPVURXQVRDSF9NRVRSSUNTX0FDVElPTlMsXG4gIFJVTlRJTUVfQ0xPVURXQVRDSF9OQU1FU1BBQ0UsXG4gIFJVTlRJTUVfV09SS0xPQURfSURFTlRJVFlfQUNUSU9OUyxcbn0gZnJvbSAnLi9wZXJtcyc7XG5pbXBvcnQgeyBBZ2VudFJ1bnRpbWVBcnRpZmFjdCB9IGZyb20gJy4vcnVudGltZS1hcnRpZmFjdCc7XG5cbmltcG9ydCB7IFJ1bnRpbWVCYXNlLCBJQmVkcm9ja0FnZW50UnVudGltZSwgQWdlbnRSdW50aW1lQXR0cmlidXRlcyB9IGZyb20gJy4vcnVudGltZS1iYXNlJztcbmltcG9ydCB7IFJ1bnRpbWVFbmRwb2ludCB9IGZyb20gJy4vcnVudGltZS1lbmRwb2ludCc7XG5pbXBvcnQgeyBMaWZlY3ljbGVDb25maWd1cmF0aW9uLCBQcm90b2NvbFR5cGUsIFJlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyB2YWxpZGF0ZVN0cmluZ0ZpZWxkLCBWYWxpZGF0aW9uRXJyb3IsIHZhbGlkYXRlRmllbGRQYXR0ZXJuIH0gZnJvbSAnLi92YWxpZGF0aW9uLWhlbHBlcnMnO1xuaW1wb3J0IHsgUnVudGltZU5ldHdvcmtDb25maWd1cmF0aW9uIH0gZnJvbSAnLi4vbmV0d29yay9uZXR3b3JrLWNvbmZpZ3VyYXRpb24nO1xuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uc3RhbnRzXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKipcbiAqIE1pbmltdW0gdGltZW91dCBmb3IgaWRsZSBydW50aW1lIHNlc3Npb25zXG4gKiBAaW50ZXJuYWxcbiAqL1xuY29uc3QgTElGRUNZQ0xFX01JTl9USU1FT1VUID0gRHVyYXRpb24uc2Vjb25kcyg2MCk7XG5cbi8qKlxuICogTWF4aW11bSBsaWZldGltZSBmb3IgdGhlIGluc3RhbmNlXG4gKiBAaW50ZXJuYWxcbiAqL1xuY29uc3QgTElGRUNZQ0xFX01BWF9MSUZFVElNRSA9IER1cmF0aW9uLnNlY29uZHMoMjg4MDApO1xuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvcHNcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBjcmVhdGluZyBhIEJlZHJvY2sgQWdlbnQgQ29yZSBSdW50aW1lIHJlc291cmNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUnVudGltZVByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBhZ2VudCBydW50aW1lXG4gICAqIFZhbGlkIGNoYXJhY3RlcnMgYXJlIGEteiwgQS1aLCAwLTksIF8gKHVuZGVyc2NvcmUpXG4gICAqIE11c3Qgc3RhcnQgd2l0aCBhIGxldHRlciBhbmQgY2FuIGJlIHVwIHRvIDQ4IGNoYXJhY3RlcnMgbG9uZ1xuICAgKiBQYXR0ZXJuOiBeW2EtekEtWl1bYS16QS1aMC05X117MCw0N30kXG4gICAqIEBkZWZhdWx0IC0gYXV0byBnZW5lcmF0ZVxuICAgKi9cbiAgcmVhZG9ubHkgcnVudGltZU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBhcnRpZmFjdCBjb25maWd1cmF0aW9uIGZvciB0aGUgYWdlbnQgcnVudGltZVxuICAgKiBDb250YWlucyB0aGUgY29udGFpbmVyIGNvbmZpZ3VyYXRpb24gd2l0aCBFQ1IgVVJJXG4gICAqL1xuICByZWFkb25seSBhZ2VudFJ1bnRpbWVBcnRpZmFjdDogQWdlbnRSdW50aW1lQXJ0aWZhY3Q7XG5cbiAgLyoqXG4gICAqIFRoZSBJQU0gcm9sZSB0aGF0IHByb3ZpZGVzIHBlcm1pc3Npb25zIGZvciB0aGUgYWdlbnQgcnVudGltZVxuICAgKiBJZiBub3QgcHJvdmlkZWQsIGEgcm9sZSB3aWxsIGJlIGNyZWF0ZWQgYXV0b21hdGljYWxseVxuICAgKiBAZGVmYXVsdCAtIEEgbmV3IHJvbGUgd2lsbCBiZSBjcmVhdGVkXG4gICAqL1xuICByZWFkb25seSBleGVjdXRpb25Sb2xlPzogaWFtLklSb2xlO1xuXG4gIC8qKlxuICAgKiBOZXR3b3JrIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBhZ2VudCBydW50aW1lXG4gICAqIEBkZWZhdWx0IC0gUnVudGltZU5ldHdvcmtDb25maWd1cmF0aW9uLnVzaW5nUHVibGljTmV0d29yaygpXG4gICAqL1xuICByZWFkb25seSBuZXR3b3JrQ29uZmlndXJhdGlvbj86IFJ1bnRpbWVOZXR3b3JrQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogT3B0aW9uYWwgZGVzY3JpcHRpb24gZm9yIHRoZSBhZ2VudCBydW50aW1lXG4gICAqIEBkZWZhdWx0IC0gTm8gZGVzY3JpcHRpb25cbiAgICogTGVuZ3RoIE1pbmltdW06IDEgLCBNYXhpbXVtOiAxMjAwXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogUHJvdG9jb2wgY29uZmlndXJhdGlvbiBmb3IgdGhlIGFnZW50IHJ1bnRpbWVcbiAgICogQGRlZmF1bHQgLSBQcm90b2NvbFR5cGUuSFRUUFxuICAgKi9cbiAgcmVhZG9ubHkgcHJvdG9jb2xDb25maWd1cmF0aW9uPzogUHJvdG9jb2xUeXBlO1xuXG4gIC8qKlxuICAgKiBFbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIHRoZSBhZ2VudCBydW50aW1lXG4gICAqIC0gTWF4aW11bSA1MCBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAgICogLSBLZXk6IE11c3QgYmUgMS0xMDAgY2hhcmFjdGVycywgc3RhcnQgd2l0aCBsZXR0ZXIgb3IgdW5kZXJzY29yZSwgY29udGFpbiBvbmx5IGxldHRlcnMsIG51bWJlcnMsIGFuZCB1bmRlcnNjb3Jlc1xuICAgKiAtIFZhbHVlOiBNdXN0IGJlIDAtMjA0OCBjaGFyYWN0ZXJzIChwZXIgQ2xvdWRGb3JtYXRpb24gc3BlY2lmaWNhdGlvbilcbiAgICogQGRlZmF1bHQgLSBObyBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAgICovXG4gIHJlYWRvbmx5IGVudmlyb25tZW50VmFyaWFibGVzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogQXV0aG9yaXplciBjb25maWd1cmF0aW9uIGZvciB0aGUgYWdlbnQgcnVudGltZVxuICAgKiBVc2UgUnVudGltZUF1dGhvcml6ZXJDb25maWd1cmF0aW9uIHN0YXRpYyBtZXRob2RzIHRvIGNyZWF0ZSB0aGUgY29uZmlndXJhdGlvblxuICAgKiBAZGVmYXVsdCAtIFJ1bnRpbWVBdXRob3JpemVyQ29uZmlndXJhdGlvbi5pYW0oKSAoSUFNIGF1dGhlbnRpY2F0aW9uKVxuICAgKi9cbiAgcmVhZG9ubHkgYXV0aG9yaXplckNvbmZpZ3VyYXRpb24/OiBSdW50aW1lQXV0aG9yaXplckNvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIFRhZ3MgZm9yIHRoZSBhZ2VudCBydW50aW1lXG4gICAqIEEgbGlzdCBvZiBrZXk6dmFsdWUgcGFpcnMgb2YgdGFncyB0byBhcHBseSB0byB0aGlzIFJ1bnRpbWUgcmVzb3VyY2VcbiAgICogQGRlZmF1bHQge30gLSBubyB0YWdzXG4gICAqL1xuICByZWFkb25seSB0YWdzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogQ29uZmlndXJhdGlvbiBmb3IgSFRUUCByZXF1ZXN0IGhlYWRlcnMgdGhhdCB3aWxsIGJlIHBhc3NlZCB0aHJvdWdoIHRvIHRoZSBydW50aW1lLlxuICAgKiBAZGVmYXVsdCAtIE5vIHJlcXVlc3QgaGVhZGVycyBjb25maWd1cmVkXG4gICAqL1xuICByZWFkb25seSByZXF1ZXN0SGVhZGVyQ29uZmlndXJhdGlvbj86IFJlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgbGlmZSBjeWNsZSBjb25maWd1cmF0aW9uIGZvciB0aGUgQWdlbnRDb3JlIFJ1bnRpbWUuXG4gICAqIEBkZWZhdWx0IC0gTm8gbGlmZWN5Y2xlIGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IGxpZmVjeWNsZUNvbmZpZ3VyYXRpb24/OiBMaWZlY3ljbGVDb25maWd1cmF0aW9uO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGFkZGluZyBhbiBlbmRwb2ludCB0byB0aGUgcnVudGltZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFkZEVuZHBvaW50T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBEZXNjcmlwdGlvbiBmb3IgdGhlIGVuZHBvaW50LCBNdXN0IGJlIGJldHdlZW4gMSBhbmQgMTIwMCBjaGFyYWN0ZXJzXG4gICAqIEBkZWZhdWx0IC0gTm8gZGVzY3JpcHRpb25cbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAvKipcbiAgICogT3ZlcnJpZGUgdGhlIHJ1bnRpbWUgdmVyc2lvbiBmb3IgdGhpcyBlbmRwb2ludFxuICAgKiBAZGVmYXVsdCAgMVxuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbj86IHN0cmluZztcbn1cblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsYXNzXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbi8qKlxuICogQmVkcm9jayBBZ2VudCBDb3JlIFJ1bnRpbWVcbiAqIEVuYWJsZXMgcnVubmluZyBjb250YWluZXJpemVkIGFnZW50cyB3aXRoIHNwZWNpZmljIG5ldHdvcmsgY29uZmlndXJhdGlvbnMsXG4gKiBzZWN1cml0eSBzZXR0aW5ncywgYW5kIHJ1bnRpbWUgYXJ0aWZhY3RzLlxuICpcbiAqIEByZXNvdXJjZSBBV1M6OkJlZHJvY2tBZ2VudENvcmU6OlJ1bnRpbWVcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JlZHJvY2stYWdlbnRjb3JlL2xhdGVzdC9kZXZndWlkZS9ydW50aW1lLmh0bWxcbiAqL1xuQHByb3BlcnR5SW5qZWN0YWJsZVxuZXhwb3J0IGNsYXNzIFJ1bnRpbWUgZXh0ZW5kcyBSdW50aW1lQmFzZSB7XG4gIC8qKiBVbmlxdWVseSBpZGVudGlmaWVzIHRoaXMgY2xhc3MuICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFJPUEVSVFlfSU5KRUNUSU9OX0lEOiBzdHJpbmcgPSAnQGF3cy1jZGsuYXdzLWJlZHJvY2stYWdlbnRjb3JlLWFscGhhLlJ1bnRpbWUnO1xuXG4gIC8qKlxuICAgKiBJbXBvcnQgYW4gZXhpc3RpbmcgQWdlbnQgUnVudGltZSB1c2luZyBhdHRyaWJ1dGVzXG4gICAqIFRoaXMgYWxsb3dzIHlvdSB0byByZWZlcmVuY2UgYW4gQWdlbnQgUnVudGltZSB0aGF0IHdhcyBjcmVhdGVkIG91dHNpZGUgb2YgQ0RLXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSBUaGUgY29uc3RydWN0IHNjb3BlXG4gICAqIEBwYXJhbSBpZCBUaGUgY29uc3RydWN0IGlkXG4gICAqIEBwYXJhbSBhdHRycyBUaGUgYXR0cmlidXRlcyBvZiB0aGUgZXhpc3RpbmcgQWdlbnQgUnVudGltZVxuICAgKiBAcmV0dXJucyBBbiBJQmVkcm9ja0FnZW50UnVudGltZSBpbnN0YW5jZSByZXByZXNlbnRpbmcgdGhlIGltcG9ydGVkIHJ1bnRpbWVcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUFnZW50UnVudGltZUF0dHJpYnV0ZXMoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIGF0dHJzOiBBZ2VudFJ1bnRpbWVBdHRyaWJ1dGVzLFxuICApOiBJQmVkcm9ja0FnZW50UnVudGltZSB7XG4gICAgY2xhc3MgSW1wb3J0ZWRCZWRyb2NrQWdlbnRSdW50aW1lIGV4dGVuZHMgUnVudGltZUJhc2Uge1xuICAgICAgcHVibGljIHJlYWRvbmx5IGFnZW50UnVudGltZUFybiA9IGF0dHJzLmFnZW50UnVudGltZUFybjtcbiAgICAgIHB1YmxpYyByZWFkb25seSBhZ2VudFJ1bnRpbWVJZCA9IGF0dHJzLmFnZW50UnVudGltZUlkO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGFnZW50UnVudGltZU5hbWUgPSBhdHRycy5hZ2VudFJ1bnRpbWVOYW1lO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGFnZW50UnVudGltZVZlcnNpb24gPSBhdHRycy5hZ2VudFJ1bnRpbWVWZXJzaW9uO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGFnZW50U3RhdHVzID0gYXR0cnMuYWdlbnRTdGF0dXM7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgZGVzY3JpcHRpb24gPSBhdHRycy5kZXNjcmlwdGlvbjtcbiAgICAgIHB1YmxpYyByZWFkb25seSBjcmVhdGVkQXQgPSBhdHRycy5jcmVhdGVkQXQ7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgbGFzdFVwZGF0ZWRBdCA9IGF0dHJzLmxhc3RVcGRhdGVkQXQ7XG5cbiAgICAgIHB1YmxpYyByZWFkb25seSByb2xlOiBpYW0uSVJvbGU7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgZ3JhbnRQcmluY2lwYWw6IGlhbS5JUHJpbmNpcGFsO1xuXG4gICAgICBjb25zdHJ1Y3RvcihzOiBDb25zdHJ1Y3QsIGk6IHN0cmluZykge1xuICAgICAgICBzdXBlcihzLCBpKTtcbiAgICAgICAgdGhpcy5yb2xlID0gaWFtLlJvbGUuZnJvbVJvbGVBcm4odGhpcywgJ1JvbGUnLCBhdHRycy5yb2xlQXJuKTtcbiAgICAgICAgdGhpcy5ncmFudFByaW5jaXBhbCA9IHRoaXMucm9sZTtcbiAgICAgICAgaWYgKGF0dHJzLnNlY3VyaXR5R3JvdXBzKSB7XG4gICAgICAgICAgdGhpcy5fY29ubmVjdGlvbnMgPSBuZXcgZWMyLkNvbm5lY3Rpb25zKHtcbiAgICAgICAgICAgIHNlY3VyaXR5R3JvdXBzOiBhdHRycy5zZWN1cml0eUdyb3VwcyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgSW1wb3J0ZWRCZWRyb2NrQWdlbnRSdW50aW1lKHNjb3BlLCBpZCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgYWdlbnQgcnVudGltZVxuICAgKiBAYXR0cmlidXRlXG4gICAqIEByZXR1cm5zIGEgdG9rZW4gcmVwcmVzZW50aW5nIHRoZSBBUk4gb2YgdGhpcyBhZ2VudCBydW50aW1lXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYWdlbnRSdW50aW1lQXJuOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIGFnZW50IHJ1bnRpbWVcbiAgICogQGF0dHJpYnV0ZVxuICAgKiBAcmV0dXJucyBhIHRva2VuIHJlcHJlc2VudGluZyB0aGUgSUQgb2YgdGhpcyBhZ2VudCBydW50aW1lXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYWdlbnRSdW50aW1lSWQ6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBhZ2VudCBydW50aW1lXG4gICAqIEBhdHRyaWJ1dGVcbiAgICogQHJldHVybnMgYSB0b2tlbiByZXByZXNlbnRpbmcgdGhlIG5hbWUgb2YgdGhpcyBhZ2VudCBydW50aW1lXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYWdlbnRSdW50aW1lTmFtZTogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgcm9sZTogaWFtLklSb2xlO1xuICAvKipcbiAgICogVGhlIHZlcnNpb24gb2YgdGhlIGFnZW50IHJ1bnRpbWVcbiAgICogQGF0dHJpYnV0ZVxuICAgKiBAcmV0dXJucyBhIHRva2VuIHJlcHJlc2VudGluZyB0aGUgdmVyc2lvbiBvZiB0aGlzIGFnZW50IHJ1bnRpbWVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhZ2VudFJ1bnRpbWVWZXJzaW9uPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHN0YXR1cyBvZiB0aGUgYWdlbnQgcnVudGltZVxuICAgKiBAYXR0cmlidXRlXG4gICAqIEByZXR1cm5zIGEgdG9rZW4gcmVwcmVzZW50aW5nIHRoZSBzdGF0dXMgb2YgdGhpcyBhZ2VudCBydW50aW1lXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYWdlbnRTdGF0dXM/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBPcHRpb25hbCBkZXNjcmlwdGlvbiBmb3IgdGhlIGFnZW50IHJ1bnRpbWVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSB0aW1lc3RhbXAgd2hlbiB0aGUgYWdlbnQgcnVudGltZSB3YXMgY3JlYXRlZFxuICAgKiBAYXR0cmlidXRlXG4gICAqIEByZXR1cm5zIGEgdG9rZW4gcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiB0aW1lc3RhbXAgb2YgdGhpcyBhZ2VudCBydW50aW1lXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY3JlYXRlZEF0Pzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHRpbWVzdGFtcCB3aGVuIHRoZSBhZ2VudCBydW50aW1lIHdhcyBsYXN0IHVwZGF0ZWRcbiAgICogQGF0dHJpYnV0ZVxuICAgKiBAcmV0dXJucyBhIHRva2VuIHJlcHJlc2VudGluZyB0aGUgbGFzdCB1cGRhdGUgdGltZXN0YW1wIG9mIHRoaXMgYWdlbnQgcnVudGltZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGxhc3RVcGRhdGVkQXQ/OiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBncmFudFByaW5jaXBhbDogaWFtLklQcmluY2lwYWw7XG4gIHByaXZhdGUgcmVhZG9ubHkgcnVudGltZVJlc291cmNlOiBiZWRyb2NrYWdlbnRjb3JlLkNmblJ1bnRpbWU7XG4gIC8qKlxuICAgKiBUaGUgYXJ0aWZhY3QgY29uZmlndXJhdGlvbiBmb3IgdGhlIGFnZW50IHJ1bnRpbWVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhZ2VudFJ1bnRpbWVBcnRpZmFjdDogQWdlbnRSdW50aW1lQXJ0aWZhY3Q7XG4gIHByaXZhdGUgcmVhZG9ubHkgbmV0d29ya0NvbmZpZ3VyYXRpb246IFJ1bnRpbWVOZXR3b3JrQ29uZmlndXJhdGlvbiA7XG4gIHByaXZhdGUgcmVhZG9ubHkgcHJvdG9jb2xDb25maWd1cmF0aW9uOiBQcm90b2NvbFR5cGU7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXV0aG9yaXplckNvbmZpZ3VyYXRpb24/OiBSdW50aW1lQXV0aG9yaXplckNvbmZpZ3VyYXRpb247XG4gIHByaXZhdGUgcmVhZG9ubHkgbGlmZWN5Y2xlQ29uZmlndXJhdGlvbj86IExpZmVjeWNsZUNvbmZpZ3VyYXRpb247XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFJ1bnRpbWVQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgLy8gTWF4aW11bSBuYW1lIGxlbmd0aCBvZiA0OCBjaGFyYWN0ZXJzXG4gICAgICAvLyBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWJlZHJvY2thZ2VudGNvcmUtcnVudGltZS5odG1sI2Nmbi1iZWRyb2NrYWdlbnRjb3JlLXJ1bnRpbWUtYWdlbnRydW50aW1lbmFtZVxuICAgICAgcGh5c2ljYWxOYW1lOiBwcm9wcy5ydW50aW1lTmFtZSA/P1xuICAgICAgICBMYXp5LnN0cmluZyh7XG4gICAgICAgICAgcHJvZHVjZTogKCkgPT4gTmFtZXMudW5pcXVlUmVzb3VyY2VOYW1lKHRoaXMsIHsgbWF4TGVuZ3RoOiA0OCB9KSxcbiAgICAgICAgfSksXG4gICAgfSk7XG5cbiAgICAvLyBDREsgQW5hbHl0aWNzIFRlbGVtZXRyeVxuICAgIGFkZENvbnN0cnVjdE1ldGFkYXRhKHRoaXMsIHByb3BzKTtcblxuICAgIHRoaXMuYWdlbnRSdW50aW1lTmFtZSA9IHRoaXMucGh5c2ljYWxOYW1lO1xuICAgIHRoaXMudmFsaWRhdGVSdW50aW1lTmFtZSgpO1xuXG4gICAgdGhpcy5kZXNjcmlwdGlvbiA9IHByb3BzLmRlc2NyaXB0aW9uO1xuICAgIGlmICh0aGlzLmRlc2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnZhbGlkYXRlRGVzY3JpcHRpb24oKTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMuZW52aXJvbm1lbnRWYXJpYWJsZXMpIHtcbiAgICAgIHRoaXMudmFsaWRhdGVFbnZpcm9ubWVudFZhcmlhYmxlcyhwcm9wcy5lbnZpcm9ubWVudFZhcmlhYmxlcyk7XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLnRhZ3MpIHtcbiAgICAgIHRoaXMudmFsaWRhdGVUYWdzKHByb3BzLnRhZ3MpO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5yZXF1ZXN0SGVhZGVyQ29uZmlndXJhdGlvbikge1xuICAgICAgdGhpcy52YWxpZGF0ZVJlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uKHByb3BzLnJlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uKTtcbiAgICB9XG5cbiAgICB0aGlzLmxpZmVjeWNsZUNvbmZpZ3VyYXRpb24gPSBwcm9wcy5saWZlY3ljbGVDb25maWd1cmF0aW9uID8ge1xuICAgICAgaWRsZVJ1bnRpbWVTZXNzaW9uVGltZW91dDogcHJvcHMubGlmZWN5Y2xlQ29uZmlndXJhdGlvbj8uaWRsZVJ1bnRpbWVTZXNzaW9uVGltZW91dCxcbiAgICAgIG1heExpZmV0aW1lOiBwcm9wcy5saWZlY3ljbGVDb25maWd1cmF0aW9uPy5tYXhMaWZldGltZSxcbiAgICB9IDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKHRoaXMubGlmZWN5Y2xlQ29uZmlndXJhdGlvbikge1xuICAgICAgdGhpcy52YWxpZGF0ZUxpZmVjeWNsZUNvbmZpZ3VyYXRpb24odGhpcy5saWZlY3ljbGVDb25maWd1cmF0aW9uKTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMuZXhlY3V0aW9uUm9sZSkge1xuICAgICAgdGhpcy5yb2xlID0gcHJvcHMuZXhlY3V0aW9uUm9sZTtcbiAgICAgIGlmICghVG9rZW4uaXNVbnJlc29sdmVkKHByb3BzLmV4ZWN1dGlvblJvbGUucm9sZUFybikpIHtcbiAgICAgICAgdGhpcy52YWxpZGF0ZVJvbGVBcm4ocHJvcHMuZXhlY3V0aW9uUm9sZS5yb2xlQXJuKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yb2xlID0gbmV3IGlhbS5Sb2xlKHRoaXMsICdFeGVjdXRpb25Sb2xlJywge1xuICAgICAgICBhc3N1bWVkQnk6IG5ldyBpYW0uU2VydmljZVByaW5jaXBhbCgnYmVkcm9jay1hZ2VudGNvcmUuYW1hem9uYXdzLmNvbScpLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ0V4ZWN1dGlvbiByb2xlIGZvciBCZWRyb2NrIEFnZW50IENvcmUgUnVudGltZScsXG4gICAgICAgIG1heFNlc3Npb25EdXJhdGlvbjogRHVyYXRpb24uaG91cnMoOCksXG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5hZGRFeGVjdXRpb25Sb2xlUGVybWlzc2lvbnMoKTtcblxuICAgIHRoaXMuZ3JhbnRQcmluY2lwYWwgPSB0aGlzLnJvbGU7XG4gICAgdGhpcy5hZ2VudFJ1bnRpbWVBcnRpZmFjdCA9IHByb3BzLmFnZW50UnVudGltZUFydGlmYWN0O1xuICAgIC8vIFNldCB1cCBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gd2l0aCBWUEMgc3VwcG9ydFxuICAgIHRoaXMubmV0d29ya0NvbmZpZ3VyYXRpb24gPSBwcm9wcy5uZXR3b3JrQ29uZmlndXJhdGlvbiA/PyBSdW50aW1lTmV0d29ya0NvbmZpZ3VyYXRpb24udXNpbmdQdWJsaWNOZXR3b3JrKCk7XG4gICAgLy8gU2V0IGNvbm5lY3Rpb25zIC0gY3JlYXRlIGEgc2hhcmVkIGNvbm5lY3Rpb25zIG9iamVjdFxuICAgIGlmICh0aGlzLm5ldHdvcmtDb25maWd1cmF0aW9uLmNvbm5lY3Rpb25zKSB7XG4gICAgICAvLyBVc2UgdGhlIG5ldHdvcmsgY29uZmlndXJhdGlvbidzIGNvbm5lY3Rpb25zIGFzIHRoZSBzaGFyZWQgb2JqZWN0XG4gICAgICB0aGlzLl9jb25uZWN0aW9ucyA9IHRoaXMubmV0d29ya0NvbmZpZ3VyYXRpb24uY29ubmVjdGlvbnM7XG4gICAgfVxuICAgIHRoaXMucHJvdG9jb2xDb25maWd1cmF0aW9uID0gcHJvcHMucHJvdG9jb2xDb25maWd1cmF0aW9uID8/IFByb3RvY29sVHlwZS5IVFRQO1xuICAgIHRoaXMuYXV0aG9yaXplckNvbmZpZ3VyYXRpb24gPSBwcm9wcy5hdXRob3JpemVyQ29uZmlndXJhdGlvbjtcblxuICAgIGNvbnN0IGNmblByb3BzOiBhbnkgPSB7XG4gICAgICBhZ2VudFJ1bnRpbWVOYW1lOiB0aGlzLmFnZW50UnVudGltZU5hbWUsXG4gICAgICByb2xlQXJuOiB0aGlzLnJvbGUucm9sZUFybixcbiAgICAgIGFnZW50UnVudGltZUFydGlmYWN0OiBMYXp5LmFueSh7XG4gICAgICAgIHByb2R1Y2U6ICgpID0+IHRoaXMucmVuZGVyQWdlbnRSdW50aW1lQXJ0aWZhY3QoKSxcbiAgICAgIH0pLFxuICAgICAgbmV0d29ya0NvbmZpZ3VyYXRpb246IExhenkuYW55KHtcbiAgICAgICAgcHJvZHVjZTogKCkgPT4gdGhpcy5uZXR3b3JrQ29uZmlndXJhdGlvbi5fcmVuZGVyKHRoaXMuX2Nvbm5lY3Rpb25zKSxcbiAgICAgIH0pLFxuICAgICAgcHJvdG9jb2xDb25maWd1cmF0aW9uOiBMYXp5LnN0cmluZyh7XG4gICAgICAgIHByb2R1Y2U6ICgpID0+IHRoaXMucHJvdG9jb2xDb25maWd1cmF0aW9uLFxuICAgICAgfSksXG4gICAgICBkZXNjcmlwdGlvbjogcHJvcHMuZGVzY3JpcHRpb24sXG4gICAgICBlbnZpcm9ubWVudFZhcmlhYmxlczogTGF6eS5hbnkoe1xuICAgICAgICBwcm9kdWNlOiAoKSA9PiB0aGlzLnJlbmRlckVudmlyb25tZW50VmFyaWFibGVzKHByb3BzLmVudmlyb25tZW50VmFyaWFibGVzKSxcbiAgICAgIH0pLFxuICAgICAgdGFnczogcHJvcHMudGFncyA/PyB7fSxcbiAgICAgIGxpZmVjeWNsZUNvbmZpZ3VyYXRpb246IHRoaXMucmVuZGVyTGlmZWN5Y2xlQ29uZmlndXJhdGlvbigpLFxuICAgIH07XG4gICAgaWYgKHByb3BzLnJlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uKSB7XG4gICAgICBjZm5Qcm9wcy5yZXF1ZXN0SGVhZGVyQ29uZmlndXJhdGlvbiA9IHRoaXMucmVuZGVyUmVxdWVzdEhlYWRlckNvbmZpZ3VyYXRpb24ocHJvcHMucmVxdWVzdEhlYWRlckNvbmZpZ3VyYXRpb24pO1xuICAgIH1cbiAgICBpZiAocHJvcHMuYXV0aG9yaXplckNvbmZpZ3VyYXRpb24pIHtcbiAgICAgIGNmblByb3BzLmF1dGhvcml6ZXJDb25maWd1cmF0aW9uID0gTGF6eS5hbnkoe1xuICAgICAgICBwcm9kdWNlOiAoKSA9PiB0aGlzLmF1dGhvcml6ZXJDb25maWd1cmF0aW9uIS5fcmVuZGVyKCksXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLnJ1bnRpbWVSZXNvdXJjZSA9IG5ldyBiZWRyb2NrYWdlbnRjb3JlLkNmblJ1bnRpbWUodGhpcywgJ1Jlc291cmNlJywgY2ZuUHJvcHMgYXMgYmVkcm9ja2FnZW50Y29yZS5DZm5SdW50aW1lUHJvcHMpO1xuXG4gICAgLy8gQWRkIGRlcGVuZGVuY3kgb24gdGhlIHJvbGUgKGZvciBib3RoIGN1c3RvbSBhbmQgYXV0by1jcmVhdGVkIHJvbGVzKVxuICAgIC8vIFRoaXMgZW5zdXJlcyB0aGUgUnVudGltZSB3YWl0cyBmb3IgdGhlIHJvbGUgYW5kIGFsbCBpdHMgcG9saWNpZXMgKGluY2x1ZGluZyBFQ1IgcGVybWlzc2lvbnMpIHRvIGJlIGNyZWF0ZWRcbiAgICB0aGlzLnJ1bnRpbWVSZXNvdXJjZS5ub2RlLmFkZERlcGVuZGVuY3kodGhpcy5yb2xlKTtcblxuICAgIHRoaXMuYWdlbnRSdW50aW1lSWQgPSB0aGlzLnJ1bnRpbWVSZXNvdXJjZS5hdHRyQWdlbnRSdW50aW1lSWQ7XG4gICAgdGhpcy5hZ2VudFJ1bnRpbWVBcm4gPSB0aGlzLnJ1bnRpbWVSZXNvdXJjZS5hdHRyQWdlbnRSdW50aW1lQXJuO1xuICAgIHRoaXMuYWdlbnRTdGF0dXMgPSB0aGlzLnJ1bnRpbWVSZXNvdXJjZS5hdHRyU3RhdHVzO1xuICAgIHRoaXMuYWdlbnRSdW50aW1lVmVyc2lvbiA9IHRoaXMucnVudGltZVJlc291cmNlLmF0dHJBZ2VudFJ1bnRpbWVWZXJzaW9uO1xuICAgIHRoaXMuY3JlYXRlZEF0ID0gdGhpcy5ydW50aW1lUmVzb3VyY2UuYXR0ckNyZWF0ZWRBdDtcbiAgICB0aGlzLmxhc3RVcGRhdGVkQXQgPSB0aGlzLnJ1bnRpbWVSZXNvdXJjZS5hdHRyTGFzdFVwZGF0ZWRBdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIENsb3VkRm9ybWF0aW9uXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJpdmF0ZSByZW5kZXJFbnZpcm9ubWVudFZhcmlhYmxlcyhlbnZWYXJzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSk6IGFueSB7XG4gICAgaWYgKCFlbnZWYXJzIHx8IE9iamVjdC5rZXlzKGVudlZhcnMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIGVudlZhcnM7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBwcm9wZXIgcGVybWlzc2lvbnMgdG8gdGhlIGV4ZWN1dGlvbiByb2xlIGZvciB0aGUgYWdlbnQgcnVudGltZVxuICAgKiBCYXNlZCBvbjogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JlZHJvY2stYWdlbnRjb3JlL2xhdGVzdC9kZXZndWlkZS9ydW50aW1lLXBlcm1pc3Npb25zLmh0bWxcbiAgICovXG4gIHByaXZhdGUgYWRkRXhlY3V0aW9uUm9sZVBlcm1pc3Npb25zKCkge1xuICAgIGNvbnN0IHJlZ2lvbiA9IFN0YWNrLm9mKHRoaXMpLnJlZ2lvbjtcbiAgICBjb25zdCBhY2NvdW50ID0gU3RhY2sub2YodGhpcykuYWNjb3VudDtcblxuICAgIC8vIENsb3VkV2F0Y2ggTG9ncyAtIExvZyBHcm91cCBvcGVyYXRpb25zXG4gICAgdGhpcy5yb2xlLmFkZFRvUHJpbmNpcGFsUG9saWN5KG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIHNpZDogJ0xvZ0dyb3VwQWNjZXNzJyxcbiAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgIGFjdGlvbnM6IFJVTlRJTUVfTE9HU19HUk9VUF9BQ1RJT05TLFxuICAgICAgcmVzb3VyY2VzOiBbYGFybjoke1N0YWNrLm9mKHRoaXMpLnBhcnRpdGlvbn06bG9nczoke3JlZ2lvbn06JHthY2NvdW50fTpsb2ctZ3JvdXA6L2F3cy9iZWRyb2NrLWFnZW50Y29yZS9ydW50aW1lcy8qYF0sXG4gICAgfSkpO1xuXG4gICAgLy8gQ2xvdWRXYXRjaCBMb2dzIC0gRGVzY3JpYmUgYWxsIGxvZyBncm91cHNcbiAgICB0aGlzLnJvbGUuYWRkVG9QcmluY2lwYWxQb2xpY3kobmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgc2lkOiAnRGVzY3JpYmVMb2dHcm91cHMnLFxuICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgYWN0aW9uczogUlVOVElNRV9MT0dTX0RFU0NSSUJFX0FDVElPTlMsXG4gICAgICByZXNvdXJjZXM6IFtgYXJuOiR7U3RhY2sub2YodGhpcykucGFydGl0aW9ufTpsb2dzOiR7cmVnaW9ufToke2FjY291bnR9OmxvZy1ncm91cDoqYF0sXG4gICAgfSkpO1xuXG4gICAgLy8gQ2xvdWRXYXRjaCBMb2dzIC0gTG9nIFN0cmVhbSBvcGVyYXRpb25zXG4gICAgdGhpcy5yb2xlLmFkZFRvUHJpbmNpcGFsUG9saWN5KG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIHNpZDogJ0xvZ1N0cmVhbUFjY2VzcycsXG4gICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICBhY3Rpb25zOiBSVU5USU1FX0xPR1NfU1RSRUFNX0FDVElPTlMsXG4gICAgICByZXNvdXJjZXM6IFtgYXJuOiR7U3RhY2sub2YodGhpcykucGFydGl0aW9ufTpsb2dzOiR7cmVnaW9ufToke2FjY291bnR9OmxvZy1ncm91cDovYXdzL2JlZHJvY2stYWdlbnRjb3JlL3J1bnRpbWVzLyo6bG9nLXN0cmVhbToqYF0sXG4gICAgfSkpO1xuXG4gICAgLy8gWC1SYXkgVHJhY2luZyAtIG11c3QgYmUgKiBmb3IgdHJhY2luZ1xuICAgIHRoaXMucm9sZS5hZGRUb1ByaW5jaXBhbFBvbGljeShuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICBzaWQ6ICdYUmF5QWNjZXNzJyxcbiAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgIGFjdGlvbnM6IFJVTlRJTUVfWFJBWV9BQ1RJT05TLFxuICAgICAgcmVzb3VyY2VzOiBbJyonXSxcbiAgICB9KSk7XG5cbiAgICAvLyBDbG91ZFdhdGNoIE1ldHJpY3MgLSBzY29wZWQgdG8gYmVkcm9jay1hZ2VudGNvcmUgbmFtZXNwYWNlXG4gICAgdGhpcy5yb2xlLmFkZFRvUHJpbmNpcGFsUG9saWN5KG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIHNpZDogJ0Nsb3VkV2F0Y2hNZXRyaWNzJyxcbiAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgIGFjdGlvbnM6IFJVTlRJTUVfQ0xPVURXQVRDSF9NRVRSSUNTX0FDVElPTlMsXG4gICAgICByZXNvdXJjZXM6IFsnKiddLFxuICAgICAgY29uZGl0aW9uczoge1xuICAgICAgICBTdHJpbmdFcXVhbHM6IHtcbiAgICAgICAgICAnY2xvdWR3YXRjaDpuYW1lc3BhY2UnOiBSVU5USU1FX0NMT1VEV0FUQ0hfTkFNRVNQQUNFLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KSk7XG5cbiAgICAvLyBCZWRyb2NrIEFnZW50Q29yZSBXb3JrbG9hZCBJZGVudGl0eSBBY2Nlc3NcbiAgICAvLyBOb3RlOiBUaGUgYWdlbnQgbmFtZSB3aWxsIGJlIGRldGVybWluZWQgYXQgcnVudGltZSwgc28gd2UgdXNlIGEgd2lsZGNhcmQgcGF0dGVyblxuICAgIHRoaXMucm9sZS5hZGRUb1ByaW5jaXBhbFBvbGljeShuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICBzaWQ6ICdHZXRBZ2VudEFjY2Vzc1Rva2VuJyxcbiAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgIGFjdGlvbnM6IFJVTlRJTUVfV09SS0xPQURfSURFTlRJVFlfQUNUSU9OUyxcbiAgICAgIHJlc291cmNlczogW1xuICAgICAgICBgYXJuOiR7U3RhY2sub2YodGhpcykucGFydGl0aW9ufTpiZWRyb2NrLWFnZW50Y29yZToke3JlZ2lvbn06JHthY2NvdW50fTp3b3JrbG9hZC1pZGVudGl0eS1kaXJlY3RvcnkvZGVmYXVsdGAsXG4gICAgICAgIGBhcm46JHtTdGFjay5vZih0aGlzKS5wYXJ0aXRpb259OmJlZHJvY2stYWdlbnRjb3JlOiR7cmVnaW9ufToke2FjY291bnR9Ondvcmtsb2FkLWlkZW50aXR5LWRpcmVjdG9yeS9kZWZhdWx0L3dvcmtsb2FkLWlkZW50aXR5LypgLFxuICAgICAgXSxcbiAgICB9KSk7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgYXJ0aWZhY3QgY29uZmlndXJhdGlvbiBmb3IgQ2xvdWRGb3JtYXRpb25cbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcml2YXRlIHJlbmRlckFnZW50UnVudGltZUFydGlmYWN0KCk6IGFueSB7XG4gICAgLy8gc2V0IHBlcm1pc3Npb24gd2l0aCBiaW5kXG4gICAgdGhpcy5hZ2VudFJ1bnRpbWVBcnRpZmFjdC5iaW5kKHRoaXMsIHRoaXMpO1xuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuYWdlbnRSdW50aW1lQXJ0aWZhY3QuX3JlbmRlcigpO1xuICAgIGlmICgoY29uZmlnIGFzIGFueSkuY29kZSkgeyAvLyBTM0ltYWdlXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb2RlQ29uZmlndXJhdGlvbjoge1xuICAgICAgICAgIGNvZGU6IChjb25maWcgYXMgYW55KS5jb2RlLFxuICAgICAgICAgIHJ1bnRpbWU6IChjb25maWcgYXMgYW55KS5ydW50aW1lLFxuICAgICAgICAgIGVudHJ5UG9pbnQ6IChjb25maWcgYXMgYW55KS5lbnRyeVBvaW50LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRWNySW1hZ2Ugb3IgQXNzZXRJbWFnZVxuICAgICAgY29uc3QgY29udGFpbmVyVXJpID0gKGNvbmZpZyBhcyBhbnkpLmNvbnRhaW5lclVyaTtcbiAgICAgIGlmIChjb250YWluZXJVcmkpIHtcbiAgICAgICAgdGhpcy52YWxpZGF0ZUNvbnRhaW5lclVyaShjb250YWluZXJVcmkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGFpbmVyQ29uZmlndXJhdGlvbjoge1xuICAgICAgICAgIGNvbnRhaW5lclVyaTogY29udGFpbmVyVXJpLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgcmVxdWVzdCBoZWFkZXIgY29uZmlndXJhdGlvbiBmb3IgQ2xvdWRGb3JtYXRpb25cbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcml2YXRlIHJlbmRlclJlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uKHJlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uPzogUmVxdWVzdEhlYWRlckNvbmZpZ3VyYXRpb24pOiBhbnkge1xuICAgIGlmICghcmVxdWVzdEhlYWRlckNvbmZpZ3VyYXRpb24/LmFsbG93bGlzdGVkSGVhZGVycykge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlcXVlc3RIZWFkZXJBbGxvd2xpc3Q6IHJlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uLmFsbG93bGlzdGVkSGVhZGVycyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgdGhlIGxpZmVjeWNsZSBjb25maWd1cmF0aW9uIGZvciBDbG91ZEZvcm1hdGlvblxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByaXZhdGUgcmVuZGVyTGlmZWN5Y2xlQ29uZmlndXJhdGlvbigpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICBpZGxlUnVudGltZVNlc3Npb25UaW1lb3V0OiB0aGlzLmxpZmVjeWNsZUNvbmZpZ3VyYXRpb24/LmlkbGVSdW50aW1lU2Vzc2lvblRpbWVvdXQ/LnRvU2Vjb25kcygpLFxuICAgICAgbWF4TGlmZXRpbWU6IHRoaXMubGlmZWN5Y2xlQ29uZmlndXJhdGlvbj8ubWF4TGlmZXRpbWU/LnRvU2Vjb25kcygpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSByZXF1ZXN0IGhlYWRlciBjb25maWd1cmF0aW9uXG4gICAqIEB0aHJvd3MgRXJyb3IgaWYgdmFsaWRhdGlvbiBmYWlsc1xuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZVJlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uKHJlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uOiBSZXF1ZXN0SGVhZGVyQ29uZmlndXJhdGlvbik6IHZvaWQge1xuICAgIGNvbnN0IGFsbEVycm9yczogc3RyaW5nW10gPSBbXTtcbiAgICBpZiAocmVxdWVzdEhlYWRlckNvbmZpZ3VyYXRpb24uYWxsb3dsaXN0ZWRIZWFkZXJzKSB7XG4gICAgICBpZiAocmVxdWVzdEhlYWRlckNvbmZpZ3VyYXRpb24uYWxsb3dsaXN0ZWRIZWFkZXJzLmxlbmd0aCA8IDEgfHwgcmVxdWVzdEhlYWRlckNvbmZpZ3VyYXRpb24uYWxsb3dsaXN0ZWRIZWFkZXJzLmxlbmd0aCA+IDIwKSB7XG4gICAgICAgIGFsbEVycm9ycy5wdXNoKCdSZXF1ZXN0IGhlYWRlciBhbGxvdyBsaXN0IGNvbnRhaW4gYmV0d2VlbiAxIGFuZCAyMCBoZWFkZXJzJyk7XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgaGVhZGVyIG9mIHJlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uLmFsbG93bGlzdGVkSGVhZGVycykge1xuICAgICAgICAvLyBWYWxpZGF0ZSBsZW5ndGhcbiAgICAgICAgY29uc3QgbGVuZ3RoRXJyb3JzID0gdmFsaWRhdGVTdHJpbmdGaWVsZCh7XG4gICAgICAgICAgdmFsdWU6IGhlYWRlcixcbiAgICAgICAgICBmaWVsZE5hbWU6ICdSZXF1ZXN0IGhlYWRlcicsXG4gICAgICAgICAgbWluTGVuZ3RoOiAxLFxuICAgICAgICAgIG1heExlbmd0aDogMjU2LFxuICAgICAgICB9KTtcbiAgICAgICAgYWxsRXJyb3JzLnB1c2goLi4ubGVuZ3RoRXJyb3JzKTtcblxuICAgICAgICBjb25zdCBwYXR0ZXJuRXJyb3JzID0gdmFsaWRhdGVGaWVsZFBhdHRlcm4oXG4gICAgICAgICAgaGVhZGVyLFxuICAgICAgICAgICdSZXF1ZXN0IGhlYWRlcicsXG4gICAgICAgICAgLyhBdXRob3JpemF0aW9ufFgtQW16bi1CZWRyb2NrLUFnZW50Q29yZS1SdW50aW1lLUN1c3RvbS1bYS16QS1aMC05LV0rKS8sXG4gICAgICAgICAgJ1JlcXVlc3QgaGVhZGVyIG11c3QgY29udGFpbiBvbmx5IGxldHRlcnMsIG51bWJlcnMsIGFuZCBoeXBoZW5zJyxcbiAgICAgICAgKTtcbiAgICAgICAgYWxsRXJyb3JzLnB1c2goLi4ucGF0dGVybkVycm9ycyk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChhbGxFcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihhbGxFcnJvcnMuam9pbignXFxuJykpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIGxpZmVjeWNsZSBjb25maWd1cmF0aW9uXG4gICAqIEB0aHJvd3MgRXJyb3IgaWYgdmFsaWRhdGlvbiBmYWlsc1xuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZUxpZmVjeWNsZUNvbmZpZ3VyYXRpb24obGlmZWN5Y2xlQ29uZmlndXJhdGlvbjogTGlmZWN5Y2xlQ29uZmlndXJhdGlvbik6IHZvaWQge1xuICAgIGlmIChsaWZlY3ljbGVDb25maWd1cmF0aW9uLmlkbGVSdW50aW1lU2Vzc2lvblRpbWVvdXQgJiYgIWxpZmVjeWNsZUNvbmZpZ3VyYXRpb24uaWRsZVJ1bnRpbWVTZXNzaW9uVGltZW91dC5pc1VucmVzb2x2ZWQoKSkge1xuICAgICAgaWYgKGxpZmVjeWNsZUNvbmZpZ3VyYXRpb24uaWRsZVJ1bnRpbWVTZXNzaW9uVGltZW91dC50b1NlY29uZHMoKSA8IExJRkVDWUNMRV9NSU5fVElNRU9VVC50b1NlY29uZHMoKVxuICAgICAgICB8fCBsaWZlY3ljbGVDb25maWd1cmF0aW9uLmlkbGVSdW50aW1lU2Vzc2lvblRpbWVvdXQudG9TZWNvbmRzKCkgPiBMSUZFQ1lDTEVfTUFYX0xJRkVUSU1FLnRvU2Vjb25kcygpKSB7XG4gICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoYElkbGUgcnVudGltZSBzZXNzaW9uIHRpbWVvdXQgbXVzdCBiZSBiZXR3ZWVuICR7TElGRUNZQ0xFX01JTl9USU1FT1VULnRvU2Vjb25kcygpfSBzZWNvbmRzIGFuZCAke0xJRkVDWUNMRV9NQVhfTElGRVRJTUUudG9TZWNvbmRzKCl9IHNlY29uZHNgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGxpZmVjeWNsZUNvbmZpZ3VyYXRpb24ubWF4TGlmZXRpbWUgJiYgIWxpZmVjeWNsZUNvbmZpZ3VyYXRpb24ubWF4TGlmZXRpbWUuaXNVbnJlc29sdmVkKCkpIHtcbiAgICAgIGlmIChsaWZlY3ljbGVDb25maWd1cmF0aW9uLm1heExpZmV0aW1lLnRvU2Vjb25kcygpIDwgTElGRUNZQ0xFX01JTl9USU1FT1VULnRvU2Vjb25kcygpXG4gICAgICAgIHx8IGxpZmVjeWNsZUNvbmZpZ3VyYXRpb24ubWF4TGlmZXRpbWUudG9TZWNvbmRzKCkgPiBMSUZFQ1lDTEVfTUFYX0xJRkVUSU1FLnRvU2Vjb25kcygpKSB7XG4gICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoYE1heGltdW0gbGlmZXRpbWUgbXVzdCBiZSBiZXR3ZWVuICR7TElGRUNZQ0xFX01JTl9USU1FT1VULnRvU2Vjb25kcygpfSBzZWNvbmRzIGFuZCAke0xJRkVDWUNMRV9NQVhfTElGRVRJTUUudG9TZWNvbmRzKCl9IHNlY29uZHNgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSBydW50aW1lIG5hbWUgZm9ybWF0XG4gICAqIFBhdHRlcm46IF5bYS16QS1aXVthLXpBLVowLTlfXXswLDQ3fSRcbiAgICogQHRocm93cyBFcnJvciBpZiB2YWxpZGF0aW9uIGZhaWxzXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlUnVudGltZU5hbWUoKTogdm9pZCB7XG4gICAgLy8gU2tpcCB2YWxpZGF0aW9uIGlmIHRoZSBuYW1lIGNvbnRhaW5zIENESyB0b2tlbnMgKHVucmVzb2x2ZWQgdmFsdWVzKVxuICAgIGlmIChUb2tlbi5pc1VucmVzb2x2ZWQodGhpcy5hZ2VudFJ1bnRpbWVOYW1lKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIGxlbmd0aFxuICAgIGNvbnN0IGxlbmd0aEVycm9ycyA9IHZhbGlkYXRlU3RyaW5nRmllbGQoe1xuICAgICAgdmFsdWU6IHRoaXMuYWdlbnRSdW50aW1lTmFtZSxcbiAgICAgIGZpZWxkTmFtZTogJ1J1bnRpbWUgbmFtZScsXG4gICAgICBtaW5MZW5ndGg6IDEsXG4gICAgICBtYXhMZW5ndGg6IDQ4LFxuICAgIH0pO1xuXG4gICAgLy8gVmFsaWRhdGUgcGF0dGVyblxuICAgIGNvbnN0IHBhdHRlcm5FcnJvcnMgPSB2YWxpZGF0ZUZpZWxkUGF0dGVybihcbiAgICAgIHRoaXMuYWdlbnRSdW50aW1lTmFtZSxcbiAgICAgICdSdW50aW1lIG5hbWUnLFxuICAgICAgL15bYS16QS1aXVthLXpBLVowLTlfXXswLDQ3fSQvLFxuICAgICAgJ1J1bnRpbWUgbmFtZSBtdXN0IHN0YXJ0IHdpdGggYSBsZXR0ZXIgYW5kIGNvbnRhaW4gb25seSBsZXR0ZXJzLCBudW1iZXJzLCBhbmQgdW5kZXJzY29yZXMnLFxuICAgICk7XG5cbiAgICAvLyBDb21iaW5lIGFuZCB0aHJvdyBpZiBhbnkgZXJyb3JzXG4gICAgY29uc3QgYWxsRXJyb3JzID0gWy4uLmxlbmd0aEVycm9ycywgLi4ucGF0dGVybkVycm9yc107XG4gICAgaWYgKGFsbEVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGFsbEVycm9ycy5qb2luKCdcXG4nKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgZGVzY3JpcHRpb24gZm9ybWF0XG4gICAqIE11c3QgYmUgYmV0d2VlbiAxIGFuZCAxMjAwIGNoYXJhY3RlcnMgKHBlciBDbG91ZEZvcm1hdGlvbiBzcGVjaWZpY2F0aW9uKVxuICAgKiBAdGhyb3dzIEVycm9yIGlmIHZhbGlkYXRpb24gZmFpbHNcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVEZXNjcmlwdGlvbigpOiB2b2lkIHtcbiAgICAvLyBTa2lwIHZhbGlkYXRpb24gaWYgdGhlIGRlc2NyaXB0aW9uIGNvbnRhaW5zIENESyB0b2tlbnMgKHVucmVzb2x2ZWQgdmFsdWVzKVxuICAgIGlmIChUb2tlbi5pc1VucmVzb2x2ZWQodGhpcy5kZXNjcmlwdGlvbikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kZXNjcmlwdGlvbikge1xuICAgICAgY29uc3QgZXJyb3JzID0gdmFsaWRhdGVTdHJpbmdGaWVsZCh7XG4gICAgICAgIHZhbHVlOiB0aGlzLmRlc2NyaXB0aW9uLFxuICAgICAgICBmaWVsZE5hbWU6ICdEZXNjcmlwdGlvbicsXG4gICAgICAgIG1pbkxlbmd0aDogMSxcbiAgICAgICAgbWF4TGVuZ3RoOiAxMjAwLFxuICAgICAgfSk7XG5cbiAgICAgIGlmIChlcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGVycm9ycy5qb2luKCdcXG4nKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAgICogLSBNYXhpbXVtIDUwIGVudHJpZXNcbiAgICogLSBLZXk6IDEtMTAwIGNoYXJhY3RlcnNcbiAgICogLSBWYWx1ZTogMC0yMDQ4IGNoYXJhY3RlcnMgKHBlciBDbG91ZEZvcm1hdGlvbiBzcGVjaWZpY2F0aW9uKVxuICAgKiBAdGhyb3dzIEVycm9yIGlmIHZhbGlkYXRpb24gZmFpbHNcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVFbnZpcm9ubWVudFZhcmlhYmxlcyhlbnZWYXJzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9KTogdm9pZCB7XG4gICAgY29uc3QgZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKGVudlZhcnMpO1xuXG4gICAgLy8gVmFsaWRhdGUgbnVtYmVyIG9mIGVudHJpZXMgKDAtNTApXG4gICAgaWYgKGVudHJpZXMubGVuZ3RoID4gNTApIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgIGBUb28gbWFueSBlbnZpcm9ubWVudCB2YXJpYWJsZXM6ICR7ZW50cmllcy5sZW5ndGh9LiBNYXhpbXVtIGFsbG93ZWQgaXMgNTBgLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBlbnRyaWVzKSB7XG4gICAgICAvLyBTa2lwIHZhbGlkYXRpb24gaWYga2V5IG9yIHZhbHVlIGNvbnRhaW5zIENESyB0b2tlbnNcbiAgICAgIGlmIChUb2tlbi5pc1VucmVzb2x2ZWQoa2V5KSB8fCBUb2tlbi5pc1VucmVzb2x2ZWQodmFsdWUpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBWYWxpZGF0ZSBrZXkgbGVuZ3RoXG4gICAgICBjb25zdCBsZW5ndGhFcnJvcnMgPSB2YWxpZGF0ZVN0cmluZ0ZpZWxkKHtcbiAgICAgICAgdmFsdWU6IGtleSxcbiAgICAgICAgZmllbGROYW1lOiBgRW52aXJvbm1lbnQgdmFyaWFibGUga2V5ICcke2tleX0nYCxcbiAgICAgICAgbWluTGVuZ3RoOiAxLFxuICAgICAgICBtYXhMZW5ndGg6IDEwMCxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBWYWxpZGF0ZSBrZXkgcGF0dGVyblxuICAgICAgY29uc3QgcGF0dGVybkVycm9ycyA9IHZhbGlkYXRlRmllbGRQYXR0ZXJuKFxuICAgICAgICBrZXksXG4gICAgICAgIGBFbnZpcm9ubWVudCB2YXJpYWJsZSBrZXkgJyR7a2V5fSdgLFxuICAgICAgICAvXlthLXpBLVpfXVthLXpBLVowLTlfXSokLyxcbiAgICAgICAgYEVudmlyb25tZW50IHZhcmlhYmxlIGtleSAnJHtrZXl9JyBtdXN0IHN0YXJ0IHdpdGggYSBsZXR0ZXIgb3IgdW5kZXJzY29yZSBhbmQgY29udGFpbiBvbmx5IGxldHRlcnMsIG51bWJlcnMsIGFuZCB1bmRlcnNjb3Jlc2AsXG4gICAgICApO1xuXG4gICAgICAvLyBDb21iaW5lIGFuZCB0aHJvdyBpZiBhbnkgZXJyb3JzXG4gICAgICBjb25zdCBhbGxFcnJvcnMgPSBbLi4ubGVuZ3RoRXJyb3JzLCAuLi5wYXR0ZXJuRXJyb3JzXTtcbiAgICAgIGlmIChhbGxFcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGFsbEVycm9ycy5qb2luKCdcXG4nKSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFZhbGlkYXRlIHZhbHVlIGxlbmd0aCAoMC0yMDQ4IGNoYXJhY3RlcnMgcGVyIENsb3VkRm9ybWF0aW9uKVxuICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+IDIwNDgpIHtcbiAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgICBgSW52YWxpZCBlbnZpcm9ubWVudCB2YXJpYWJsZSB2YWx1ZSBsZW5ndGggZm9yIGtleSAnJHtrZXl9JzogJHt2YWx1ZS5sZW5ndGh9IGNoYXJhY3RlcnMuIGAgK1xuICAgICAgICAgICdWYWx1ZXMgbXVzdCBub3QgZXhjZWVkIDIwNDggY2hhcmFjdGVycycsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgdGFncyBmb3JtYXRcbiAgICogQHBhcmFtIHRhZ3MgVGhlIHRhZ3Mgb2JqZWN0IHRvIHZhbGlkYXRlXG4gICAqIEB0aHJvd3MgRXJyb3IgaWYgdmFsaWRhdGlvbiBmYWlsc1xuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZVRhZ3ModGFnczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSk6IHZvaWQge1xuICAgIC8vIFZhbGlkYXRlIGVhY2ggdGFnIGtleSBhbmQgdmFsdWVcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0YWdzKSkge1xuICAgICAgLy8gU2tpcCB2YWxpZGF0aW9uIGlmIGtleSBvciB2YWx1ZSBjb250YWlucyBDREsgdG9rZW5zXG4gICAgICBpZiAoVG9rZW4uaXNVbnJlc29sdmVkKGtleSkgfHwgVG9rZW4uaXNVbnJlc29sdmVkKHZhbHVlKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gVmFsaWRhdGUgdGFnIGtleSBsZW5ndGhcbiAgICAgIGNvbnN0IGtleUxlbmd0aEVycm9ycyA9IHZhbGlkYXRlU3RyaW5nRmllbGQoe1xuICAgICAgICB2YWx1ZToga2V5LFxuICAgICAgICBmaWVsZE5hbWU6IGBUYWcga2V5IFwiJHtrZXl9XCJgLFxuICAgICAgICBtaW5MZW5ndGg6IDEsXG4gICAgICAgIG1heExlbmd0aDogMjU2LFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFZhbGlkYXRlIHRhZyBrZXkgcGF0dGVyblxuICAgICAgY29uc3Qga2V5UGF0dGVybkVycm9ycyA9IHZhbGlkYXRlRmllbGRQYXR0ZXJuKFxuICAgICAgICBrZXksXG4gICAgICAgIGBUYWcga2V5IFwiJHtrZXl9XCJgLFxuICAgICAgICAvXlthLXpBLVowLTlcXHMuXzovPStALV0qJC8sXG4gICAgICAgIGBUYWcga2V5IFwiJHtrZXl9XCIgY2FuIG9ubHkgY29udGFpbiBsZXR0ZXJzIChhLXosIEEtWiksIG51bWJlcnMgKDAtOSksIHNwYWNlcywgYW5kIHNwZWNpYWwgY2hhcmFjdGVycyAoLl86Lz0rQC0pYCxcbiAgICAgICk7XG5cbiAgICAgIC8vIENvbWJpbmUga2V5IGVycm9ycyBhbmQgdGhyb3cgaWYgYW55XG4gICAgICBjb25zdCBrZXlFcnJvcnMgPSBbLi4ua2V5TGVuZ3RoRXJyb3JzLCAuLi5rZXlQYXR0ZXJuRXJyb3JzXTtcbiAgICAgIGlmIChrZXlFcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGtleUVycm9ycy5qb2luKCdcXG4nKSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoYFRhZyB2YWx1ZSBmb3Iga2V5IFwiJHtrZXl9XCIgY2Fubm90IGJlIG51bGwgb3IgdW5kZWZpbmVkYCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFZhbGlkYXRlIHRhZyB2YWx1ZSBsZW5ndGhcbiAgICAgIGNvbnN0IHZhbHVlTGVuZ3RoRXJyb3JzID0gdmFsaWRhdGVTdHJpbmdGaWVsZCh7XG4gICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgZmllbGROYW1lOiBgVGFnIHZhbHVlIGZvciBrZXkgXCIke2tleX1cImAsXG4gICAgICAgIG1pbkxlbmd0aDogMCxcbiAgICAgICAgbWF4TGVuZ3RoOiAyNTYsXG4gICAgICB9KTtcblxuICAgICAgLy8gVmFsaWRhdGUgdGFnIHZhbHVlIHBhdHRlcm5cbiAgICAgIGNvbnN0IHZhbHVlUGF0dGVybkVycm9ycyA9IHZhbGlkYXRlRmllbGRQYXR0ZXJuKFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgYFRhZyB2YWx1ZSBmb3Iga2V5IFwiJHtrZXl9XCJgLFxuICAgICAgICAvXlthLXpBLVowLTlcXHMuXzovPStALV0qJC8sXG4gICAgICAgIGBUYWcgdmFsdWUgZm9yIGtleSBcIiR7a2V5fVwiIGNhbiBvbmx5IGNvbnRhaW4gbGV0dGVycyAoYS16LCBBLVopLCBudW1iZXJzICgwLTkpLCBzcGFjZXMsIGFuZCBzcGVjaWFsIGNoYXJhY3RlcnMgKC5fOi89K0AtKWAsXG4gICAgICApO1xuXG4gICAgICAvLyBDb21iaW5lIHZhbHVlIGVycm9ycyBhbmQgdGhyb3cgaWYgYW55XG4gICAgICBjb25zdCB2YWx1ZUVycm9ycyA9IFsuLi52YWx1ZUxlbmd0aEVycm9ycywgLi4udmFsdWVQYXR0ZXJuRXJyb3JzXTtcbiAgICAgIGlmICh2YWx1ZUVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IodmFsdWVFcnJvcnMuam9pbignXFxuJykpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIGNvbnRhaW5lciBVUkkgZm9ybWF0XG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlQ29udGFpbmVyVXJpKHVyaTogc3RyaW5nKTogdm9pZCB7XG4gICAgLy8gU2tpcCB2YWxpZGF0aW9uIGlmIHRoZSBVUkkgY29udGFpbnMgQ0RLIHRva2VucyAodW5yZXNvbHZlZCB2YWx1ZXMpXG4gICAgaWYgKFRva2VuLmlzVW5yZXNvbHZlZCh1cmkpKSB7XG4gICAgICAvLyBBZGQgYSB3YXJuaW5nIHRoYXQgdmFsaWRhdGlvbiB3aWxsIGJlIHNraXBwZWQgZm9yIHRva2VuLWJhc2VkIFVSSXNcbiAgICAgIEFubm90YXRpb25zLm9mKHRoaXMpLmFkZEluZm8oXG4gICAgICAgICdDb250YWluZXIgVVJJIHZhbGlkYXRpb24gc2tpcHBlZCBhcyBpdCBjb250YWlucyB1bnJlc29sdmVkIENESyB0b2tlbnMuICcgK1xuICAgICAgICAnVGhlIFVSSSB3aWxsIGJlIHZhbGlkYXRlZCBhdCBkZXBsb3ltZW50IHRpbWUuJyxcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gT25seSB2YWxpZGF0ZSBpZiB0aGUgVVJJIGlzIGEgY29uY3JldGUgc3RyaW5nIChub3QgYSB0b2tlbilcbiAgICBjb25zdCBwYXR0ZXJuID0gL15cXGR7MTJ9XFwuZGtyXFwuZWNyXFwuKFthLXowLTktXSspXFwuYW1hem9uYXdzXFwuY29tXFwvKCg/OlthLXowLTldKyg/OlsuXy1dW2EtejAtOV0rKSpcXC8pKlthLXowLTldKyg/OlsuXy1dW2EtejAtOV0rKSopKFs6QF1cXFMrKSQvO1xuICAgIGlmICghcGF0dGVybi50ZXN0KHVyaSkpIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIGNvbnRhaW5lciBVUkkgZm9ybWF0OiAke3VyaX0uIE11c3QgYmUgYSB2YWxpZCBFQ1IgVVJJIChlLmcuLCAxMjM0NTY3ODkwMTIuZGtyLmVjci51cy13ZXN0LTIuYW1hem9uYXdzLmNvbS9teS1hZ2VudDpsYXRlc3QpYCxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgSUFNIHJvbGUgQVJOIGZvcm1hdCBhbmQgc3RydWN0dXJlXG4gICAqIEB0aHJvd3MgRXJyb3IgaWYgdmFsaWRhdGlvbiBmYWlsc1xuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZVJvbGVBcm4ocm9sZUFybjogc3RyaW5nKTogdm9pZCB7XG4gICAgLy8gVmFsaWRhdGUgYmFzaWMgQVJOIGZvcm1hdCBmb3IgSUFNIHJvbGVzXG4gICAgY29uc3QgYXJuUGF0dGVybiA9IC9eYXJuOlthLXpcXC1dKzppYW06OlxcZHsxMn06cm9sZVxcL1thLXpBLVowLTkrPSwuQFxcLV9cXC9dKyQvO1xuICAgIGlmICghYXJuUGF0dGVybi50ZXN0KHJvbGVBcm4pKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGBJbnZhbGlkIElBTSByb2xlIEFSTiBmb3JtYXQ6ICR7cm9sZUFybn0uIGAgK1xuICAnRXhwZWN0ZWQgZm9ybWF0OiBhcm46PHBhcnRpdGlvbj46aWFtOjo8YWNjb3VudC1pZD46cm9sZS88cm9sZS1uYW1lPiBvciBhcm46PHBhcnRpdGlvbj46aWFtOjo8YWNjb3VudC1pZD46cm9sZS88cGF0aD4vPHJvbGUtbmFtZT4nKTtcbiAgICB9XG5cbiAgICAvLyBQYXJzZSB0aGUgQVJOIGNvbXBvbmVudHMgdXNpbmcgQ0RLJ3MgQXJuLnNwbGl0KClcbiAgICAvLyBVc2UgU0xBU0hfUkVTT1VSQ0VfTkFNRSBmb3JtYXQgZm9yIElBTSByb2xlcyAod2hpY2ggdXNlIGZvcm1hdDogcm9sZS9yb2xlLW5hbWUgb3Igcm9sZS9wYXRoL3RvL3JvbGUtbmFtZSlcbiAgICBjb25zdCBhcm5Db21wb25lbnRzID0gQXJuLnNwbGl0KHJvbGVBcm4sIEFybkZvcm1hdC5TTEFTSF9SRVNPVVJDRV9OQU1FKTtcblxuICAgIGlmIChhcm5Db21wb25lbnRzLnNlcnZpY2UgIT09ICdpYW0nKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGBJbnZhbGlkIHNlcnZpY2UgaW4gQVJOOiAke2FybkNvbXBvbmVudHMuc2VydmljZX0uIEV4cGVjdGVkICdpYW0nIGZvciBJQU0gcm9sZSBBUk4uYCk7XG4gICAgfVxuXG4gICAgY29uc3QgYWNjb3VudElkID0gYXJuQ29tcG9uZW50cy5hY2NvdW50O1xuICAgIGlmICghYWNjb3VudElkIHx8ICEvXlxcZHsxMn0kLy50ZXN0KGFjY291bnRJZCkpIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoYEludmFsaWQgQVdTIGFjY291bnQgSUQgaW4gcm9sZSBBUk46ICR7YWNjb3VudElkfS4gTXVzdCBiZSBhIDEyLWRpZ2l0IG51bWJlci5gKTtcbiAgICB9XG5cbiAgICAvLyBFeHRyYWN0IHJvbGUgbmFtZSBmcm9tIHJlc291cmNlXG4gICAgLy8gRm9yIElBTSByb2xlcywgcmVzb3VyY2Ugd2lsbCBiZSBcInJvbGVcIiBhbmQgcmVzb3VyY2VOYW1lIHdpbGwgYmUgdGhlIHJvbGUgbmFtZSAod2l0aCBvcHRpb25hbCBwYXRoKVxuICAgIGNvbnN0IHJlc291cmNlID0gYXJuQ29tcG9uZW50cy5yZXNvdXJjZTtcbiAgICBjb25zdCByZXNvdXJjZU5hbWUgPSBhcm5Db21wb25lbnRzLnJlc291cmNlTmFtZTtcblxuICAgIGlmIChyZXNvdXJjZSAhPT0gJ3JvbGUnKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGBJbnZhbGlkIHJlc291cmNlIHR5cGUgaW4gQVJOOiAke3Jlc291cmNlfS4gRXhwZWN0ZWQgJ3JvbGUnIGZvciBJQU0gcm9sZSBBUk4uYCk7XG4gICAgfVxuXG4gICAgaWYgKCFyZXNvdXJjZU5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoJ1JvbGUgbmFtZSBpcyBtaXNzaW5nIGluIHRoZSBBUk4nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgcm9sZVBhdGhQYXJ0cyA9IHJlc291cmNlTmFtZS5zcGxpdCgnLycpO1xuICAgICAgY29uc3Qgcm9sZU5hbWUgPSByb2xlUGF0aFBhcnRzW3JvbGVQYXRoUGFydHMubGVuZ3RoIC0gMV07XG5cbiAgICAgIGlmIChyb2xlTmFtZS5sZW5ndGggPiA2NCkge1xuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGBSb2xlIG5hbWUgZXhjZWVkcyBtYXhpbXVtIGxlbmd0aCBvZiA2NCBjaGFyYWN0ZXJzOiAke3JvbGVOYW1lfWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHN0YWNrQWNjb3VudCA9IFN0YWNrLm9mKHRoaXMpLmFjY291bnQ7XG4gICAgaWYgKCFUb2tlbi5pc1VucmVzb2x2ZWQoc3RhY2tBY2NvdW50KSAmJiBhY2NvdW50SWQgIT09IHN0YWNrQWNjb3VudCkge1xuICAgICAgQW5ub3RhdGlvbnMub2YodGhpcykuYWRkV2FybmluZyhcbiAgICAgICAgYElBTSByb2xlIGlzIGZyb20gYSBkaWZmZXJlbnQgYWNjb3VudCAoJHthY2NvdW50SWR9KSB0aGFuIHRoZSBzdGFjayBhY2NvdW50ICgke3N0YWNrQWNjb3VudH0pLiBgICtcbiAgICAgICAgJ0Vuc3VyZSBjcm9zcy1hY2NvdW50IHBlcm1pc3Npb25zIGFyZSBwcm9wZXJseSBjb25maWd1cmVkLicsXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIHRoZSByZWdpb24gKElBTSBpcyBnbG9iYWwsIHNvIHJlZ2lvbiBzaG91bGQgYmUgZW1wdHkpXG4gICAgY29uc3QgcmVnaW9uID0gYXJuQ29tcG9uZW50cy5yZWdpb247XG4gICAgY29uc3Qgc3RhY2tSZWdpb24gPSBTdGFjay5vZih0aGlzKS5yZWdpb247XG4gICAgaWYgKHJlZ2lvbiAmJiByZWdpb24gIT09ICcnICYmIHJlZ2lvbiAhPT0gc3RhY2tSZWdpb24gJiYgIVRva2VuLmlzVW5yZXNvbHZlZChzdGFja1JlZ2lvbikpIHtcbiAgICAgIEFubm90YXRpb25zLm9mKHRoaXMpLmFkZFdhcm5pbmcoXG4gICAgICAgIGBJQU0gcm9sZSBBUk4gY29udGFpbnMgYSByZWdpb24gKCR7cmVnaW9ufSkgdGhhdCBkb2Vzbid0IG1hdGNoIHRoZSBzdGFjayByZWdpb24gKCR7c3RhY2tSZWdpb259KS4gYCArXG4gICAgICAgICdJQU0gaXMgYSBnbG9iYWwgc2VydmljZSwgc28gdGhpcyBtaWdodCBiZSBpbnRlbnRpb25hbC4nLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkIGFuIGVuZHBvaW50IHRvIHRoaXMgcnVudGltZVxuICAgKiBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRoYXQgY3JlYXRlcyBhIFJ1bnRpbWVFbmRwb2ludCBhc3NvY2lhdGVkIHdpdGggdGhpcyBydW50aW1lXG4gICAqXG4gICAqIEBwYXJhbSBlbmRwb2ludE5hbWUgVGhlIG5hbWUgb2YgdGhlIGVuZHBvaW50XG4gICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBlbmRwb2ludFxuICAgKiBAcmV0dXJucyBUaGUgY3JlYXRlZCBSdW50aW1lRW5kcG9pbnRcbiAgICovXG4gIEBNZXRob2RNZXRhZGF0YSgpXG4gIHB1YmxpYyBhZGRFbmRwb2ludChcbiAgICBlbmRwb2ludE5hbWU6IHN0cmluZyxcbiAgICBvcHRpb25zPzogQWRkRW5kcG9pbnRPcHRpb25zLFxuICApOiBSdW50aW1lRW5kcG9pbnQge1xuICAgIC8vIENyZWF0ZSB0aGUgZW5kcG9pbnQgKHNlY3VyaXR5IGNvbmZpZ3VyYXRpb24gaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZClcbiAgICBjb25zdCBlbmRwb2ludCA9IG5ldyBSdW50aW1lRW5kcG9pbnQodGhpcywgYEVuZHBvaW50JHtlbmRwb2ludE5hbWV9YCwge1xuICAgICAgZW5kcG9pbnROYW1lOiBlbmRwb2ludE5hbWUsXG4gICAgICBhZ2VudFJ1bnRpbWVJZDogdGhpcy5hZ2VudFJ1bnRpbWVJZCxcbiAgICAgIGFnZW50UnVudGltZVZlcnNpb246IG9wdGlvbnM/LnZlcnNpb24gPz8gdGhpcy5hZ2VudFJ1bnRpbWVWZXJzaW9uID8/ICcxJyxcbiAgICAgIGRlc2NyaXB0aW9uOiBvcHRpb25zPy5kZXNjcmlwdGlvbixcbiAgICB9KTtcblxuICAgIC8vIEFkZCBkZXBlbmRlbmN5OiBlbmRwb2ludCBtdXN0IHdhaXQgZm9yIHJ1bnRpbWUgdG8gYmUgY3JlYXRlZFxuICAgIGVuZHBvaW50Lm5vZGUuYWRkRGVwZW5kZW5jeSh0aGlzLnJ1bnRpbWVSZXNvdXJjZSk7XG5cbiAgICByZXR1cm4gZW5kcG9pbnQ7XG4gIH1cbn1cbiJdfQ==
|
package/lib/tools/browser.js
CHANGED
|
@@ -99,7 +99,7 @@ var BrowserSigning;
|
|
|
99
99
|
* Contains methods and attributes valid for Browsers either created with CDK or imported.
|
|
100
100
|
*/
|
|
101
101
|
class BrowserCustomBase extends aws_cdk_lib_1.Resource {
|
|
102
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.BrowserCustomBase", version: "2.
|
|
102
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.BrowserCustomBase", version: "2.237.0-alpha.0" };
|
|
103
103
|
/**
|
|
104
104
|
* An accessor for the Connections object that will fail if this Browser does not have a VPC
|
|
105
105
|
* configured.
|
|
@@ -364,7 +364,7 @@ let BrowserCustom = (() => {
|
|
|
364
364
|
BrowserCustom = _classThis = _classDescriptor.value;
|
|
365
365
|
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
366
366
|
}
|
|
367
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.BrowserCustom", version: "2.
|
|
367
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.BrowserCustom", version: "2.237.0-alpha.0" };
|
|
368
368
|
/** Uniquely identifies this class. */
|
|
369
369
|
static PROPERTY_INJECTION_ID = '@aws-cdk.aws-bedrock-agentcore-alpha.BrowserCustom';
|
|
370
370
|
/**
|
|
@@ -79,7 +79,7 @@ const CODE_INTERPRETER_TAG_MAX_LENGTH = 256;
|
|
|
79
79
|
* Contains methods and attributes valid for Code Interpreters either created with CDK or imported.
|
|
80
80
|
*/
|
|
81
81
|
class CodeInterpreterCustomBase extends aws_cdk_lib_1.Resource {
|
|
82
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.CodeInterpreterCustomBase", version: "2.
|
|
82
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.CodeInterpreterCustomBase", version: "2.237.0-alpha.0" };
|
|
83
83
|
/**
|
|
84
84
|
* An accessor for the Connections object that will fail if this Browser does not have a VPC
|
|
85
85
|
* configured.
|
|
@@ -322,7 +322,7 @@ let CodeInterpreterCustom = (() => {
|
|
|
322
322
|
CodeInterpreterCustom = _classThis = _classDescriptor.value;
|
|
323
323
|
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
324
324
|
}
|
|
325
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.CodeInterpreterCustom", version: "2.
|
|
325
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.CodeInterpreterCustom", version: "2.237.0-alpha.0" };
|
|
326
326
|
/** Uniquely identifies this class. */
|
|
327
327
|
static PROPERTY_INJECTION_ID = '@aws-cdk.aws-bedrock-agentcore-alpha.CodeInterpreterCustom';
|
|
328
328
|
/**
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aws-cdk/aws-bedrock-agentcore-alpha",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.237.0-alpha.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "The CDK Construct Library for Amazon Bedrock",
|
|
6
6
|
"main": "lib/index.js",
|
|
@@ -78,21 +78,21 @@
|
|
|
78
78
|
},
|
|
79
79
|
"license": "Apache-2.0",
|
|
80
80
|
"devDependencies": {
|
|
81
|
-
"aws-cdk-lib": "2.
|
|
82
|
-
"@aws-cdk/aws-bedrock-alpha": "2.
|
|
83
|
-
"@aws-cdk/cdk-build-tools": "2.
|
|
81
|
+
"aws-cdk-lib": "2.237.0",
|
|
82
|
+
"@aws-cdk/aws-bedrock-alpha": "2.237.0-alpha.0",
|
|
83
|
+
"@aws-cdk/cdk-build-tools": "2.237.0-alpha.0",
|
|
84
84
|
"@aws-cdk/integ-runner": "^2.193.5",
|
|
85
|
-
"@aws-cdk/pkglint": "2.
|
|
86
|
-
"@aws-cdk/integ-tests-alpha": "2.
|
|
85
|
+
"@aws-cdk/pkglint": "2.237.0-alpha.0",
|
|
86
|
+
"@aws-cdk/integ-tests-alpha": "2.237.0-alpha.0",
|
|
87
87
|
"@types/jest": "^29.5.14",
|
|
88
88
|
"constructs": "^10.0.0",
|
|
89
89
|
"jest": "^29.7.0"
|
|
90
90
|
},
|
|
91
91
|
"homepage": "https://github.com/aws/aws-cdk",
|
|
92
92
|
"peerDependencies": {
|
|
93
|
-
"aws-cdk-lib": "^2.
|
|
93
|
+
"aws-cdk-lib": "^2.237.0",
|
|
94
94
|
"constructs": "^10.0.0",
|
|
95
|
-
"@aws-cdk/aws-bedrock-alpha": "2.
|
|
95
|
+
"@aws-cdk/aws-bedrock-alpha": "2.237.0-alpha.0"
|
|
96
96
|
},
|
|
97
97
|
"engines": {
|
|
98
98
|
"node": ">= 18.0.0"
|
|
@@ -162,7 +162,7 @@
|
|
|
162
162
|
},
|
|
163
163
|
"jsiiRosetta": {
|
|
164
164
|
"exampleDependencies": {
|
|
165
|
-
"@aws-cdk/aws-bedrock-alpha": "^2.
|
|
165
|
+
"@aws-cdk/aws-bedrock-alpha": "^2.237.0-alpha.0"
|
|
166
166
|
}
|
|
167
167
|
}
|
|
168
168
|
}
|
|
@@ -1,159 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.RuntimeAuthorizerConfiguration = void 0;
|
|
4
|
-
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
5
|
-
/**
|
|
6
|
-
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
7
|
-
*
|
|
8
|
-
* Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance
|
|
9
|
-
* with the License. A copy of the License is located at
|
|
10
|
-
*
|
|
11
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
12
|
-
*
|
|
13
|
-
* or in the 'license' file accompanying this file. This file is distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES
|
|
14
|
-
* OR CONDITIONS OF ANY KIND, express or implied. See the License for the specific language governing permissions
|
|
15
|
-
* and limitations under the License.
|
|
16
|
-
*/
|
|
17
|
-
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
18
|
-
const validation_helpers_1 = require("./validation-helpers");
|
|
19
|
-
/**
|
|
20
|
-
* Abstract base class for runtime authorizer configurations.
|
|
21
|
-
* Provides static factory methods to create different authentication types.
|
|
22
|
-
*/
|
|
23
|
-
class RuntimeAuthorizerConfiguration {
|
|
24
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.RuntimeAuthorizerConfiguration", version: "2.236.0-alpha.0" };
|
|
25
|
-
/**
|
|
26
|
-
* Use IAM authentication (default).
|
|
27
|
-
* Requires AWS credentials to sign requests using SigV4.
|
|
28
|
-
*
|
|
29
|
-
* @returns RuntimeAuthorizerConfiguration for IAM authentication
|
|
30
|
-
*/
|
|
31
|
-
static usingIAM() {
|
|
32
|
-
return new IamAuthorizerConfiguration();
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Use custom JWT authentication.
|
|
36
|
-
* Validates JWT tokens against the specified OIDC provider.
|
|
37
|
-
*
|
|
38
|
-
* @param discoveryUrl The OIDC discovery URL (must end with /.well-known/openid-configuration)
|
|
39
|
-
* @param allowedClients Optional array of allowed client IDs
|
|
40
|
-
* @param allowedAudience Optional array of allowed audiences
|
|
41
|
-
* @returns RuntimeAuthorizerConfiguration for JWT authentication
|
|
42
|
-
*/
|
|
43
|
-
static usingJWT(discoveryUrl, allowedClients, allowedAudience) {
|
|
44
|
-
if (!aws_cdk_lib_1.Token.isUnresolved(discoveryUrl) && !discoveryUrl.endsWith('/.well-known/openid-configuration')) {
|
|
45
|
-
throw new validation_helpers_1.ValidationError('JWT discovery URL must end with /.well-known/openid-configuration');
|
|
46
|
-
}
|
|
47
|
-
return new JwtAuthorizerConfiguration(discoveryUrl, allowedClients, allowedAudience);
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* Use AWS Cognito User Pool authentication.
|
|
51
|
-
* Validates Cognito-issued JWT tokens.
|
|
52
|
-
*
|
|
53
|
-
* @param userPool The Cognito User Pool
|
|
54
|
-
* @param userPoolClients The Cognito User Pool App Clients
|
|
55
|
-
* @param allowedAudience Optional array of allowed audiences
|
|
56
|
-
* @returns RuntimeAuthorizerConfiguration for Cognito authentication
|
|
57
|
-
*/
|
|
58
|
-
static usingCognito(userPool, userPoolClients, allowedAudience) {
|
|
59
|
-
return new CognitoAuthorizerConfiguration(userPool, userPoolClients, allowedAudience);
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* Use OAuth 2.0 authentication.
|
|
63
|
-
* Supports various OAuth providers.
|
|
64
|
-
*
|
|
65
|
-
* @param discoveryUrl The OIDC discovery URL (must end with /.well-known/openid-configuration)
|
|
66
|
-
* @param clientId OAuth client ID
|
|
67
|
-
* @param allowedAudience Optional array of allowed audiences
|
|
68
|
-
* @returns RuntimeAuthorizerConfiguration for OAuth authentication
|
|
69
|
-
*/
|
|
70
|
-
static usingOAuth(discoveryUrl, clientId, allowedAudience) {
|
|
71
|
-
if (!aws_cdk_lib_1.Token.isUnresolved(discoveryUrl) && !discoveryUrl.endsWith('/.well-known/openid-configuration')) {
|
|
72
|
-
throw new validation_helpers_1.ValidationError('OAuth discovery URL must end with /.well-known/openid-configuration');
|
|
73
|
-
}
|
|
74
|
-
return new OAuthAuthorizerConfiguration(discoveryUrl, clientId, allowedAudience);
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
exports.RuntimeAuthorizerConfiguration = RuntimeAuthorizerConfiguration;
|
|
78
|
-
/**
|
|
79
|
-
* IAM authorizer configuration
|
|
80
|
-
*/
|
|
81
|
-
class IamAuthorizerConfiguration extends RuntimeAuthorizerConfiguration {
|
|
82
|
-
_render() {
|
|
83
|
-
// For IAM authentication, return undefined to let AWS service use default
|
|
84
|
-
return undefined;
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
/**
|
|
88
|
-
* JWT authorizer configuration
|
|
89
|
-
*/
|
|
90
|
-
class JwtAuthorizerConfiguration extends RuntimeAuthorizerConfiguration {
|
|
91
|
-
discoveryUrl;
|
|
92
|
-
allowedClients;
|
|
93
|
-
allowedAudience;
|
|
94
|
-
constructor(discoveryUrl, allowedClients, allowedAudience) {
|
|
95
|
-
super();
|
|
96
|
-
this.discoveryUrl = discoveryUrl;
|
|
97
|
-
this.allowedClients = allowedClients;
|
|
98
|
-
this.allowedAudience = allowedAudience;
|
|
99
|
-
}
|
|
100
|
-
_render() {
|
|
101
|
-
return {
|
|
102
|
-
customJwtAuthorizer: {
|
|
103
|
-
discoveryUrl: this.discoveryUrl,
|
|
104
|
-
allowedClients: this.allowedClients,
|
|
105
|
-
allowedAudience: this.allowedAudience,
|
|
106
|
-
},
|
|
107
|
-
};
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
/**
|
|
111
|
-
* Cognito authorizer configuration
|
|
112
|
-
*/
|
|
113
|
-
class CognitoAuthorizerConfiguration extends RuntimeAuthorizerConfiguration {
|
|
114
|
-
userPool;
|
|
115
|
-
userPoolClients;
|
|
116
|
-
allowedAudience;
|
|
117
|
-
constructor(userPool, userPoolClients, allowedAudience) {
|
|
118
|
-
super();
|
|
119
|
-
this.userPool = userPool;
|
|
120
|
-
this.userPoolClients = userPoolClients;
|
|
121
|
-
this.allowedAudience = allowedAudience;
|
|
122
|
-
}
|
|
123
|
-
_render() {
|
|
124
|
-
const discoveryUrl = `https://cognito-idp.${this.userPool.env.region}.amazonaws.com/${this.userPool.userPoolId}/.well-known/openid-configuration`;
|
|
125
|
-
// Use JWT format for Cognito (CloudFormation expects JWT format)
|
|
126
|
-
return {
|
|
127
|
-
customJwtAuthorizer: {
|
|
128
|
-
discoveryUrl: discoveryUrl,
|
|
129
|
-
allowedClients: this.userPoolClients.map(client => client.userPoolClientId),
|
|
130
|
-
allowedAudience: this.allowedAudience,
|
|
131
|
-
},
|
|
132
|
-
};
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
/**
|
|
136
|
-
* OAuth authorizer configuration
|
|
137
|
-
*/
|
|
138
|
-
class OAuthAuthorizerConfiguration extends RuntimeAuthorizerConfiguration {
|
|
139
|
-
discoveryUrl;
|
|
140
|
-
clientId;
|
|
141
|
-
allowedAudience;
|
|
142
|
-
constructor(discoveryUrl, clientId, allowedAudience) {
|
|
143
|
-
super();
|
|
144
|
-
this.discoveryUrl = discoveryUrl;
|
|
145
|
-
this.clientId = clientId;
|
|
146
|
-
this.allowedAudience = allowedAudience;
|
|
147
|
-
}
|
|
148
|
-
_render() {
|
|
149
|
-
// OAuth is also represented as JWT in CloudFormation
|
|
150
|
-
return {
|
|
151
|
-
customJwtAuthorizer: {
|
|
152
|
-
discoveryUrl: this.discoveryUrl,
|
|
153
|
-
allowedClients: [this.clientId],
|
|
154
|
-
allowedAudience: this.allowedAudience,
|
|
155
|
-
},
|
|
156
|
-
};
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS1hdXRob3JpemVyLWNvbmZpZ3VyYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJydW50aW1lLWF1dGhvcml6ZXItY29uZmlndXJhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUE7Ozs7Ozs7Ozs7O0dBV0c7QUFFSCw2Q0FBb0M7QUFHcEMsNkRBQXVEO0FBRXZEOzs7R0FHRztBQUNILE1BQXNCLDhCQUE4Qjs7SUFDbEQ7Ozs7O09BS0c7SUFDSSxNQUFNLENBQUMsUUFBUTtRQUNwQixPQUFPLElBQUksMEJBQTBCLEVBQUUsQ0FBQztLQUN6QztJQUVEOzs7Ozs7OztPQVFHO0lBQ0ksTUFBTSxDQUFDLFFBQVEsQ0FDcEIsWUFBb0IsRUFDcEIsY0FBeUIsRUFDekIsZUFBMEI7UUFFMUIsSUFBSSxDQUFDLG1CQUFLLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxtQ0FBbUMsQ0FBQyxFQUFFLENBQUM7WUFDckcsTUFBTSxJQUFJLG9DQUFlLENBQUMsbUVBQW1FLENBQUMsQ0FBQztRQUNqRyxDQUFDO1FBQ0QsT0FBTyxJQUFJLDBCQUEwQixDQUFDLFlBQVksRUFBRSxjQUFjLEVBQUUsZUFBZSxDQUFDLENBQUM7S0FDdEY7SUFFRDs7Ozs7Ozs7T0FRRztJQUNJLE1BQU0sQ0FBQyxZQUFZLENBQ3hCLFFBQW1CLEVBQ25CLGVBQWtDLEVBQ2xDLGVBQTBCO1FBRTFCLE9BQU8sSUFBSSw4QkFBOEIsQ0FBQyxRQUFRLEVBQUUsZUFBZSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0tBQ3ZGO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSSxNQUFNLENBQUMsVUFBVSxDQUN0QixZQUFvQixFQUNwQixRQUFnQixFQUNoQixlQUEwQjtRQUUxQixJQUFJLENBQUMsbUJBQUssQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLG1DQUFtQyxDQUFDLEVBQUUsQ0FBQztZQUNyRyxNQUFNLElBQUksb0NBQWUsQ0FBQyxxRUFBcUUsQ0FBQyxDQUFDO1FBQ25HLENBQUM7UUFDRCxPQUFPLElBQUksNEJBQTRCLENBQUMsWUFBWSxFQUFFLFFBQVEsRUFBRSxlQUFlLENBQUMsQ0FBQztLQUNsRjs7QUFsRUgsd0VBeUVDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLDBCQUEyQixTQUFRLDhCQUE4QjtJQUM5RCxPQUFPO1FBQ1osMEVBQTBFO1FBQzFFLE9BQU8sU0FBUyxDQUFDO0tBQ2xCO0NBQ0Y7QUFFRDs7R0FFRztBQUNILE1BQU0sMEJBQTJCLFNBQVEsOEJBQThCO0lBRWxEO0lBQ0E7SUFDQTtJQUhuQixZQUNtQixZQUFvQixFQUNwQixjQUF5QixFQUN6QixlQUEwQjtRQUUzQyxLQUFLLEVBQUUsQ0FBQztRQUpTLGlCQUFZLEdBQVosWUFBWSxDQUFRO1FBQ3BCLG1CQUFjLEdBQWQsY0FBYyxDQUFXO1FBQ3pCLG9CQUFlLEdBQWYsZUFBZSxDQUFXO0tBRzVDO0lBRU0sT0FBTztRQUNaLE9BQU87WUFDTCxtQkFBbUIsRUFBRTtnQkFDbkIsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZO2dCQUMvQixjQUFjLEVBQUUsSUFBSSxDQUFDLGNBQWM7Z0JBQ25DLGVBQWUsRUFBRSxJQUFJLENBQUMsZUFBZTthQUN0QztTQUNGLENBQUM7S0FDSDtDQUNGO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLDhCQUErQixTQUFRLDhCQUE4QjtJQUV0RDtJQUNBO0lBQ0E7SUFIbkIsWUFDbUIsUUFBbUIsRUFDbkIsZUFBa0MsRUFDbEMsZUFBMEI7UUFFM0MsS0FBSyxFQUFFLENBQUM7UUFKUyxhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQ25CLG9CQUFlLEdBQWYsZUFBZSxDQUFtQjtRQUNsQyxvQkFBZSxHQUFmLGVBQWUsQ0FBVztLQUc1QztJQUVNLE9BQU87UUFDWixNQUFNLFlBQVksR0FBRyx1QkFBdUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxrQkFBa0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLG1DQUFtQyxDQUFDO1FBRWxKLGlFQUFpRTtRQUNqRSxPQUFPO1lBQ0wsbUJBQW1CLEVBQUU7Z0JBQ25CLFlBQVksRUFBRSxZQUFZO2dCQUMxQixjQUFjLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUM7Z0JBQzNFLGVBQWUsRUFBRSxJQUFJLENBQUMsZUFBZTthQUN0QztTQUNGLENBQUM7S0FDSDtDQUNGO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLDRCQUE2QixTQUFRLDhCQUE4QjtJQUVwRDtJQUNBO0lBQ0E7SUFIbkIsWUFDbUIsWUFBb0IsRUFDcEIsUUFBZ0IsRUFDaEIsZUFBMEI7UUFFM0MsS0FBSyxFQUFFLENBQUM7UUFKUyxpQkFBWSxHQUFaLFlBQVksQ0FBUTtRQUNwQixhQUFRLEdBQVIsUUFBUSxDQUFRO1FBQ2hCLG9CQUFlLEdBQWYsZUFBZSxDQUFXO0tBRzVDO0lBRU0sT0FBTztRQUNaLHFEQUFxRDtRQUNyRCxPQUFPO1lBQ0wsbUJBQW1CLEVBQUU7Z0JBQ25CLFlBQVksRUFBRSxJQUFJLENBQUMsWUFBWTtnQkFDL0IsY0FBYyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztnQkFDL0IsZUFBZSxFQUFFLElBQUksQ0FBQyxlQUFlO2FBQ3RDO1NBQ0YsQ0FBQztLQUNIO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqICBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKS4gWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuICogIHdpdGggdGhlIExpY2Vuc2UuIEEgY29weSBvZiB0aGUgTGljZW5zZSBpcyBsb2NhdGVkIGF0XG4gKlxuICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiAgb3IgaW4gdGhlICdsaWNlbnNlJyBmaWxlIGFjY29tcGFueWluZyB0aGlzIGZpbGUuIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAnQVMgSVMnIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVNcbiAqICBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9uc1xuICogIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgeyBUb2tlbiB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IENmblJ1bnRpbWUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtYmVkcm9ja2FnZW50Y29yZSc7XG5pbXBvcnQgeyBJVXNlclBvb2wsIElVc2VyUG9vbENsaWVudCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1jb2duaXRvJztcbmltcG9ydCB7IFZhbGlkYXRpb25FcnJvciB9IGZyb20gJy4vdmFsaWRhdGlvbi1oZWxwZXJzJztcblxuLyoqXG4gKiBBYnN0cmFjdCBiYXNlIGNsYXNzIGZvciBydW50aW1lIGF1dGhvcml6ZXIgY29uZmlndXJhdGlvbnMuXG4gKiBQcm92aWRlcyBzdGF0aWMgZmFjdG9yeSBtZXRob2RzIHRvIGNyZWF0ZSBkaWZmZXJlbnQgYXV0aGVudGljYXRpb24gdHlwZXMuXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBSdW50aW1lQXV0aG9yaXplckNvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogVXNlIElBTSBhdXRoZW50aWNhdGlvbiAoZGVmYXVsdCkuXG4gICAqIFJlcXVpcmVzIEFXUyBjcmVkZW50aWFscyB0byBzaWduIHJlcXVlc3RzIHVzaW5nIFNpZ1Y0LlxuICAgKlxuICAgKiBAcmV0dXJucyBSdW50aW1lQXV0aG9yaXplckNvbmZpZ3VyYXRpb24gZm9yIElBTSBhdXRoZW50aWNhdGlvblxuICAgKi9cbiAgcHVibGljIHN0YXRpYyB1c2luZ0lBTSgpOiBSdW50aW1lQXV0aG9yaXplckNvbmZpZ3VyYXRpb24ge1xuICAgIHJldHVybiBuZXcgSWFtQXV0aG9yaXplckNvbmZpZ3VyYXRpb24oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVc2UgY3VzdG9tIEpXVCBhdXRoZW50aWNhdGlvbi5cbiAgICogVmFsaWRhdGVzIEpXVCB0b2tlbnMgYWdhaW5zdCB0aGUgc3BlY2lmaWVkIE9JREMgcHJvdmlkZXIuXG4gICAqXG4gICAqIEBwYXJhbSBkaXNjb3ZlcnlVcmwgVGhlIE9JREMgZGlzY292ZXJ5IFVSTCAobXVzdCBlbmQgd2l0aCAvLndlbGwta25vd24vb3BlbmlkLWNvbmZpZ3VyYXRpb24pXG4gICAqIEBwYXJhbSBhbGxvd2VkQ2xpZW50cyBPcHRpb25hbCBhcnJheSBvZiBhbGxvd2VkIGNsaWVudCBJRHNcbiAgICogQHBhcmFtIGFsbG93ZWRBdWRpZW5jZSBPcHRpb25hbCBhcnJheSBvZiBhbGxvd2VkIGF1ZGllbmNlc1xuICAgKiBAcmV0dXJucyBSdW50aW1lQXV0aG9yaXplckNvbmZpZ3VyYXRpb24gZm9yIEpXVCBhdXRoZW50aWNhdGlvblxuICAgKi9cbiAgcHVibGljIHN0YXRpYyB1c2luZ0pXVChcbiAgICBkaXNjb3ZlcnlVcmw6IHN0cmluZyxcbiAgICBhbGxvd2VkQ2xpZW50cz86IHN0cmluZ1tdLFxuICAgIGFsbG93ZWRBdWRpZW5jZT86IHN0cmluZ1tdLFxuICApOiBSdW50aW1lQXV0aG9yaXplckNvbmZpZ3VyYXRpb24ge1xuICAgIGlmICghVG9rZW4uaXNVbnJlc29sdmVkKGRpc2NvdmVyeVVybCkgJiYgIWRpc2NvdmVyeVVybC5lbmRzV2l0aCgnLy53ZWxsLWtub3duL29wZW5pZC1jb25maWd1cmF0aW9uJykpIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoJ0pXVCBkaXNjb3ZlcnkgVVJMIG11c3QgZW5kIHdpdGggLy53ZWxsLWtub3duL29wZW5pZC1jb25maWd1cmF0aW9uJyk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgSnd0QXV0aG9yaXplckNvbmZpZ3VyYXRpb24oZGlzY292ZXJ5VXJsLCBhbGxvd2VkQ2xpZW50cywgYWxsb3dlZEF1ZGllbmNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVc2UgQVdTIENvZ25pdG8gVXNlciBQb29sIGF1dGhlbnRpY2F0aW9uLlxuICAgKiBWYWxpZGF0ZXMgQ29nbml0by1pc3N1ZWQgSldUIHRva2Vucy5cbiAgICpcbiAgICogQHBhcmFtIHVzZXJQb29sIFRoZSBDb2duaXRvIFVzZXIgUG9vbFxuICAgKiBAcGFyYW0gdXNlclBvb2xDbGllbnRzIFRoZSBDb2duaXRvIFVzZXIgUG9vbCBBcHAgQ2xpZW50c1xuICAgKiBAcGFyYW0gYWxsb3dlZEF1ZGllbmNlIE9wdGlvbmFsIGFycmF5IG9mIGFsbG93ZWQgYXVkaWVuY2VzXG4gICAqIEByZXR1cm5zIFJ1bnRpbWVBdXRob3JpemVyQ29uZmlndXJhdGlvbiBmb3IgQ29nbml0byBhdXRoZW50aWNhdGlvblxuICAgKi9cbiAgcHVibGljIHN0YXRpYyB1c2luZ0NvZ25pdG8oXG4gICAgdXNlclBvb2w6IElVc2VyUG9vbCxcbiAgICB1c2VyUG9vbENsaWVudHM6IElVc2VyUG9vbENsaWVudFtdLFxuICAgIGFsbG93ZWRBdWRpZW5jZT86IHN0cmluZ1tdLFxuICApOiBSdW50aW1lQXV0aG9yaXplckNvbmZpZ3VyYXRpb24ge1xuICAgIHJldHVybiBuZXcgQ29nbml0b0F1dGhvcml6ZXJDb25maWd1cmF0aW9uKHVzZXJQb29sLCB1c2VyUG9vbENsaWVudHMsIGFsbG93ZWRBdWRpZW5jZSk7XG4gIH1cblxuICAvKipcbiAgICogVXNlIE9BdXRoIDIuMCBhdXRoZW50aWNhdGlvbi5cbiAgICogU3VwcG9ydHMgdmFyaW91cyBPQXV0aCBwcm92aWRlcnMuXG4gICAqXG4gICAqIEBwYXJhbSBkaXNjb3ZlcnlVcmwgVGhlIE9JREMgZGlzY292ZXJ5IFVSTCAobXVzdCBlbmQgd2l0aCAvLndlbGwta25vd24vb3BlbmlkLWNvbmZpZ3VyYXRpb24pXG4gICAqIEBwYXJhbSBjbGllbnRJZCBPQXV0aCBjbGllbnQgSURcbiAgICogQHBhcmFtIGFsbG93ZWRBdWRpZW5jZSBPcHRpb25hbCBhcnJheSBvZiBhbGxvd2VkIGF1ZGllbmNlc1xuICAgKiBAcmV0dXJucyBSdW50aW1lQXV0aG9yaXplckNvbmZpZ3VyYXRpb24gZm9yIE9BdXRoIGF1dGhlbnRpY2F0aW9uXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHVzaW5nT0F1dGgoXG4gICAgZGlzY292ZXJ5VXJsOiBzdHJpbmcsXG4gICAgY2xpZW50SWQ6IHN0cmluZyxcbiAgICBhbGxvd2VkQXVkaWVuY2U/OiBzdHJpbmdbXSxcbiAgKTogUnVudGltZUF1dGhvcml6ZXJDb25maWd1cmF0aW9uIHtcbiAgICBpZiAoIVRva2VuLmlzVW5yZXNvbHZlZChkaXNjb3ZlcnlVcmwpICYmICFkaXNjb3ZlcnlVcmwuZW5kc1dpdGgoJy8ud2VsbC1rbm93bi9vcGVuaWQtY29uZmlndXJhdGlvbicpKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKCdPQXV0aCBkaXNjb3ZlcnkgVVJMIG11c3QgZW5kIHdpdGggLy53ZWxsLWtub3duL29wZW5pZC1jb25maWd1cmF0aW9uJyk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgT0F1dGhBdXRob3JpemVyQ29uZmlndXJhdGlvbihkaXNjb3ZlcnlVcmwsIGNsaWVudElkLCBhbGxvd2VkQXVkaWVuY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlciB0aGUgYXV0aG9yaXplciBjb25maWd1cmF0aW9uIGZvciBDbG91ZEZvcm1hdGlvblxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCBfcmVuZGVyKCk6IENmblJ1bnRpbWUuQXV0aG9yaXplckNvbmZpZ3VyYXRpb25Qcm9wZXJ0eSB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBJQU0gYXV0aG9yaXplciBjb25maWd1cmF0aW9uXG4gKi9cbmNsYXNzIElhbUF1dGhvcml6ZXJDb25maWd1cmF0aW9uIGV4dGVuZHMgUnVudGltZUF1dGhvcml6ZXJDb25maWd1cmF0aW9uIHtcbiAgcHVibGljIF9yZW5kZXIoKTogdW5kZWZpbmVkIHtcbiAgICAvLyBGb3IgSUFNIGF1dGhlbnRpY2F0aW9uLCByZXR1cm4gdW5kZWZpbmVkIHRvIGxldCBBV1Mgc2VydmljZSB1c2UgZGVmYXVsdFxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBKV1QgYXV0aG9yaXplciBjb25maWd1cmF0aW9uXG4gKi9cbmNsYXNzIEp3dEF1dGhvcml6ZXJDb25maWd1cmF0aW9uIGV4dGVuZHMgUnVudGltZUF1dGhvcml6ZXJDb25maWd1cmF0aW9uIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBkaXNjb3ZlcnlVcmw6IHN0cmluZyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFsbG93ZWRDbGllbnRzPzogc3RyaW5nW10sXG4gICAgcHJpdmF0ZSByZWFkb25seSBhbGxvd2VkQXVkaWVuY2U/OiBzdHJpbmdbXSxcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBfcmVuZGVyKCk6IENmblJ1bnRpbWUuQXV0aG9yaXplckNvbmZpZ3VyYXRpb25Qcm9wZXJ0eSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGN1c3RvbUp3dEF1dGhvcml6ZXI6IHtcbiAgICAgICAgZGlzY292ZXJ5VXJsOiB0aGlzLmRpc2NvdmVyeVVybCxcbiAgICAgICAgYWxsb3dlZENsaWVudHM6IHRoaXMuYWxsb3dlZENsaWVudHMsXG4gICAgICAgIGFsbG93ZWRBdWRpZW5jZTogdGhpcy5hbGxvd2VkQXVkaWVuY2UsXG4gICAgICB9LFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBDb2duaXRvIGF1dGhvcml6ZXIgY29uZmlndXJhdGlvblxuICovXG5jbGFzcyBDb2duaXRvQXV0aG9yaXplckNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBSdW50aW1lQXV0aG9yaXplckNvbmZpZ3VyYXRpb24ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHVzZXJQb29sOiBJVXNlclBvb2wsXG4gICAgcHJpdmF0ZSByZWFkb25seSB1c2VyUG9vbENsaWVudHM6IElVc2VyUG9vbENsaWVudFtdLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgYWxsb3dlZEF1ZGllbmNlPzogc3RyaW5nW10sXG4gICkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBwdWJsaWMgX3JlbmRlcigpOiBDZm5SdW50aW1lLkF1dGhvcml6ZXJDb25maWd1cmF0aW9uUHJvcGVydHkge1xuICAgIGNvbnN0IGRpc2NvdmVyeVVybCA9IGBodHRwczovL2NvZ25pdG8taWRwLiR7dGhpcy51c2VyUG9vbC5lbnYucmVnaW9ufS5hbWF6b25hd3MuY29tLyR7dGhpcy51c2VyUG9vbC51c2VyUG9vbElkfS8ud2VsbC1rbm93bi9vcGVuaWQtY29uZmlndXJhdGlvbmA7XG5cbiAgICAvLyBVc2UgSldUIGZvcm1hdCBmb3IgQ29nbml0byAoQ2xvdWRGb3JtYXRpb24gZXhwZWN0cyBKV1QgZm9ybWF0KVxuICAgIHJldHVybiB7XG4gICAgICBjdXN0b21Kd3RBdXRob3JpemVyOiB7XG4gICAgICAgIGRpc2NvdmVyeVVybDogZGlzY292ZXJ5VXJsLFxuICAgICAgICBhbGxvd2VkQ2xpZW50czogdGhpcy51c2VyUG9vbENsaWVudHMubWFwKGNsaWVudCA9PiBjbGllbnQudXNlclBvb2xDbGllbnRJZCksXG4gICAgICAgIGFsbG93ZWRBdWRpZW5jZTogdGhpcy5hbGxvd2VkQXVkaWVuY2UsXG4gICAgICB9LFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBPQXV0aCBhdXRob3JpemVyIGNvbmZpZ3VyYXRpb25cbiAqL1xuY2xhc3MgT0F1dGhBdXRob3JpemVyQ29uZmlndXJhdGlvbiBleHRlbmRzIFJ1bnRpbWVBdXRob3JpemVyQ29uZmlndXJhdGlvbiB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGlzY292ZXJ5VXJsOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjbGllbnRJZDogc3RyaW5nLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgYWxsb3dlZEF1ZGllbmNlPzogc3RyaW5nW10sXG4gICkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBwdWJsaWMgX3JlbmRlcigpOiBDZm5SdW50aW1lLkF1dGhvcml6ZXJDb25maWd1cmF0aW9uUHJvcGVydHkge1xuICAgIC8vIE9BdXRoIGlzIGFsc28gcmVwcmVzZW50ZWQgYXMgSldUIGluIENsb3VkRm9ybWF0aW9uXG4gICAgcmV0dXJuIHtcbiAgICAgIGN1c3RvbUp3dEF1dGhvcml6ZXI6IHtcbiAgICAgICAgZGlzY292ZXJ5VXJsOiB0aGlzLmRpc2NvdmVyeVVybCxcbiAgICAgICAgYWxsb3dlZENsaWVudHM6IFt0aGlzLmNsaWVudElkXSxcbiAgICAgICAgYWxsb3dlZEF1ZGllbmNlOiB0aGlzLmFsbG93ZWRBdWRpZW5jZSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxufVxuIl19
|