UNPKG

aws-cdk-neuronx-patterns

Version:
121 lines 24.5 kB
"use strict"; var _a, _b, _c, _d, _e, _f; Object.defineProperty(exports, "__esModule", { value: true }); exports.VllmInferenceNeuronxImage = exports.PytorchTrainingNeuronxImage = exports.PytorchInferenceNeuronxImage = void 0; const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti"); const aws_cdk_lib_1 = require("aws-cdk-lib"); class NeuronxImage { } function getLatestVersion(neuronxImageClass) { return Object.entries(neuronxImageClass) .filter(([k]) => k.startsWith("SDK_")) .sort(([k1], [k2]) => (k1 < k2 ? 1 : -1)) .map(([_, v]) => v)[0]; } class PytorchNeuronxImage extends NeuronxImage { static fromNeuronSdkVersion(neuronSdkVersion, pythonVersion, pytorchVersion, ubuntuVersion) { return { neuronSdkVersion, imageName: this.imageName, imageTag: `${pytorchVersion}-neuronx-py${pythonVersion.replace(".", "")}-sdk${neuronSdkVersion}-ubuntu${ubuntuVersion}`, }; } } _a = PytorchNeuronxImage; PytorchNeuronxImage.size = aws_cdk_lib_1.Size.gibibytes(30); /** Neuron SDK 2.28.0 */ PytorchNeuronxImage.SDK_2_28_0 = _a.fromNeuronSdkVersion("2.28.0", "3.12", "2.9.0", "24.04"); /** Neuron SDK 2.27.1 */ PytorchNeuronxImage.SDK_2_27_1 = _a.fromNeuronSdkVersion("2.27.1", "3.12", "2.9.0", "24.04"); /** Neuron SDK 2.26.1 */ PytorchNeuronxImage.SDK_2_26_1 = _a.fromNeuronSdkVersion("2.26.1", "3.11", "2.8.0", "22.04"); /** Neuron SDK 2.25.0 */ PytorchNeuronxImage.SDK_2_25_0 = _a.fromNeuronSdkVersion("2.25.0", "3.10", "2.7.0", "22.04"); /** Neuron SDK 2.24.0 */ PytorchNeuronxImage.SDK_2_24_0 = _a.fromNeuronSdkVersion("2.24.0", "3.10", "2.7.0", "22.04"); /** Neuron SDK 2.23.0 */ PytorchNeuronxImage.SDK_2_23_0 = _a.fromNeuronSdkVersion("2.23.0", "3.10", "2.6.0", "22.04"); /** Neuron SDK 2.22.0 */ PytorchNeuronxImage.SDK_2_22_0 = _a.fromNeuronSdkVersion("2.22.0", "3.10", "2.5.1", "22.04"); /** Neuron SDK 2.21.1 */ PytorchNeuronxImage.SDK_2_21_1 = _a.fromNeuronSdkVersion("2.21.1", "3.10", "2.5.1", "22.04"); /** Neuron SDK 2.21.0 */ PytorchNeuronxImage.SDK_2_21_0 = _a.fromNeuronSdkVersion("2.21.0", "3.10", "2.5.1", "22.04"); /** Neuron SDK 2.20.2 */ PytorchNeuronxImage.SDK_2_20_2 = _a.fromNeuronSdkVersion("2.20.2", "3.10", "2.1.2", "20.04"); /** Neuron SDK 2.20.1 */ PytorchNeuronxImage.SDK_2_20_1 = _a.fromNeuronSdkVersion("2.20.1", "3.10", "2.1.2", "20.04"); /** Neuron SDK 2.20.0 */ PytorchNeuronxImage.SDK_2_20_0 = _a.fromNeuronSdkVersion("2.20.0", "3.10", "2.1.2", "20.04"); /** Neuron SDK 2.19.1 */ PytorchNeuronxImage.SDK_2_19_1 = _a.fromNeuronSdkVersion("2.19.1", "3.10", "2.1.2", "20.04"); /** Neuron SDK 2.19.0 */ PytorchNeuronxImage.SDK_2_19_0 = _a.fromNeuronSdkVersion("2.19.0", "3.10", "2.1.2", "20.04"); /** Neuron SDK 2.18.2 */ PytorchNeuronxImage.SDK_2_18_2 = _a.fromNeuronSdkVersion("2.18.2", "3.10", "2.1.2", "20.04"); /** Neuron SDK 2.18.1 */ PytorchNeuronxImage.SDK_2_18_1 = _a.fromNeuronSdkVersion("2.18.1", "3.10", "2.1.2", "20.04"); /** Neuron SDK 2.18.0 */ PytorchNeuronxImage.SDK_2_18_0 = _a.fromNeuronSdkVersion("2.18.0", "3.10", "2.1.2", "20.04"); /** Latest Neuron SDK */ PytorchNeuronxImage.LATEST = getLatestVersion(_a); class PytorchInferenceNeuronxImage extends PytorchNeuronxImage { } exports.PytorchInferenceNeuronxImage = PytorchInferenceNeuronxImage; _b = PytorchInferenceNeuronxImage, _c = JSII_RTTI_SYMBOL_1; PytorchInferenceNeuronxImage[_c] = { fqn: "aws-cdk-neuronx-patterns.PytorchInferenceNeuronxImage", version: "0.3.0" }; PytorchInferenceNeuronxImage.imageName = "public.ecr.aws/neuron/pytorch-inference-neuronx"; /** Neuron SDK 2.28.0 */ PytorchInferenceNeuronxImage.SDK_2_28_0 = _b.fromNeuronSdkVersion("2.28.0", "3.12", "2.9.0", "24.04"); /** Neuron SDK 2.27.1 */ PytorchInferenceNeuronxImage.SDK_2_27_1 = _b.fromNeuronSdkVersion("2.27.1", "3.12", "2.9.0", "24.04"); /** Neuron SDK 2.26.1 */ PytorchInferenceNeuronxImage.SDK_2_26_1 = _b.fromNeuronSdkVersion("2.26.1", "3.11", "2.8.0", "22.04"); /** Neuron SDK 2.25.0 */ PytorchInferenceNeuronxImage.SDK_2_25_0 = _b.fromNeuronSdkVersion("2.25.0", "3.10", "2.7.0", "22.04"); /** Neuron SDK 2.23.0 */ PytorchInferenceNeuronxImage.SDK_2_23_0 = _b.fromNeuronSdkVersion("2.23.0", "3.10", "2.6.0", "22.04"); /** Neuron SDK 2.22.0 */ PytorchInferenceNeuronxImage.SDK_2_22_0 = _b.fromNeuronSdkVersion("2.22.0", "3.10", "2.5.1", "22.04"); /** Neuron SDK 2.20.2 (PyTorch 2.1.2) */ PytorchInferenceNeuronxImage.SDK_2_20_2_PYTORCH_2_1_2 = _b.fromNeuronSdkVersion("2.20.2", "3.10", "2.1.2", "20.04"); /** Neuron SDK 2.20.2 (PyTorch 1.13.1) */ PytorchInferenceNeuronxImage.SDK_2_20_2_PYTORCH_1_13_1 = _b.fromNeuronSdkVersion("2.20.2", "3.10", "1.13.1", "20.04"); /** Latest Neuron SDK */ PytorchInferenceNeuronxImage.LATEST = getLatestVersion(_b); class PytorchTrainingNeuronxImage extends PytorchNeuronxImage { } exports.PytorchTrainingNeuronxImage = PytorchTrainingNeuronxImage; _d = JSII_RTTI_SYMBOL_1; PytorchTrainingNeuronxImage[_d] = { fqn: "aws-cdk-neuronx-patterns.PytorchTrainingNeuronxImage", version: "0.3.0" }; PytorchTrainingNeuronxImage.imageName = "public.ecr.aws/neuron/pytorch-training-neuronx"; class VllmInferenceNeuronxImage extends NeuronxImage { static fromNeuronSdkVersion(neuronSdkVersion, vllmVersion, pythonVersion, ubuntuVersion) { return { neuronSdkVersion, imageName: "public.ecr.aws/neuron/pytorch-inference-vllm-neuronx", imageTag: `${vllmVersion}-neuronx-py${pythonVersion.replace(".", "")}-sdk${neuronSdkVersion}-ubuntu${ubuntuVersion}`, vllmVersion, }; } } exports.VllmInferenceNeuronxImage = VllmInferenceNeuronxImage; _e = VllmInferenceNeuronxImage, _f = JSII_RTTI_SYMBOL_1; VllmInferenceNeuronxImage[_f] = { fqn: "aws-cdk-neuronx-patterns.VllmInferenceNeuronxImage", version: "0.3.0" }; /** Neuron SDK 2.28.0 with vLLM 0.13.0 */ VllmInferenceNeuronxImage.SDK_2_28_0 = _e.fromNeuronSdkVersion("2.28.0", "0.13.0", "3.12", "24.04"); /** Neuron SDK 2.27.1 with vLLM 0.13.0 */ VllmInferenceNeuronxImage.SDK_2_27_1_VLLM_0_13_0 = _e.fromNeuronSdkVersion("2.27.1", "0.13.0", "3.12", "24.04"); /** Neuron SDK 2.27.1 with vLLM 0.11.0 */ VllmInferenceNeuronxImage.SDK_2_27_1_VLLM_0_11_0 = _e.fromNeuronSdkVersion("2.27.1", "0.11.0", "3.12", "24.04"); /** Neuron SDK 2.26.1 with vLLM 0.9.1 */ VllmInferenceNeuronxImage.SDK_2_26_1 = _e.fromNeuronSdkVersion("2.26.1", "0.9.1", "3.11", "22.04"); /** Neuron SDK 2.26.0 with vLLM 0.9.1 */ VllmInferenceNeuronxImage.SDK_2_26_0 = _e.fromNeuronSdkVersion("2.26.0", "0.9.1", "3.11", "22.04"); /** Neuron SDK 2.25.0 with vLLM 0.9.1 */ VllmInferenceNeuronxImage.SDK_2_25_0 = _e.fromNeuronSdkVersion("2.25.0", "0.9.1", "3.10", "22.04"); /** Neuron SDK 2.24.1 with vLLM 0.7.2 */ VllmInferenceNeuronxImage.SDK_2_24_1 = _e.fromNeuronSdkVersion("2.24.1", "0.7.2", "3.10", "22.04"); /** Latest Neuron SDK */ VllmInferenceNeuronxImage.LATEST = getLatestVersion(_e); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcC1sZWFybmluZy1jb250YWluZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2Jhc2UvbmV1cm9ueC9kZWVwLWxlYXJuaW5nLWNvbnRhaW5lcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2Q0FBbUM7QUFRbkMsTUFBZSxZQUFZO0NBQUc7QUFFOUIsU0FBUyxnQkFBZ0IsQ0FDdkIsaUJBQXlDO0lBRXpDLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQztTQUNyQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3JDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDeEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBTSxDQUFDO0FBQ2hDLENBQUM7QUFFRCxNQUFlLG1CQUFvQixTQUFRLFlBQVk7SUE0SHJELE1BQU0sQ0FBQyxvQkFBb0IsQ0FDekIsZ0JBQXdCLEVBQ3hCLGFBQXFCLEVBQ3JCLGNBQXNCLEVBQ3RCLGFBQXFCO1FBRXJCLE9BQU87WUFDTCxnQkFBZ0I7WUFDaEIsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO1lBQ3pCLFFBQVEsRUFBRSxHQUFHLGNBQWMsY0FBYyxhQUFhLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsT0FBTyxnQkFBZ0IsVUFBVSxhQUFhLEVBQUU7U0FDeEgsQ0FBQztJQUNKLENBQUM7OztBQXRJZSx3QkFBSSxHQUFHLGtCQUFJ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LFFBQVEsRUFDUixPQUFPLEVBQ1AsTUFBTSxFQUNOLE9BQU8sQ0FDUixBQUx5QixDQUt4QjtBQUNGLHdDQUF3QztBQUN4QixvQ0FBVSxHQUFHLEVBQXlCLENBQUMsb0JBQW9CLENBQ3pFLFFBQVEsRUFDUixPQUFPLEVBQ1AsTUFBTSxFQUNOLE9BQU8sQ0FDUixBQUx5QixDQUt4QjtBQUNGLHdDQUF3QztBQUN4QixvQ0FBVSxHQUFHLEVBQXlCLENBQUMsb0JBQW9CLENBQ3pFLFFBQVEsRUFDUixPQUFPLEVBQ1AsTUFBTSxFQUNOLE9BQU8sQ0FDUixBQUx5QixDQUt4QjtBQUNGLHdDQUF3QztBQUN4QixvQ0FBVSxHQUFHLEVBQXlCLENBQUMsb0JBQW9CLENBQ3pFLFFBQVEsRUFDUixPQUFPLEVBQ1AsTUFBTSxFQUNOLE9BQU8sQ0FDUixBQUx5QixDQUt4QjtBQUNGLHdCQUF3QjtBQUNSLGdDQUFNLEdBQUcsZ0JBQWdCLENBQTZCLEVBQUksQ0FBQyxBQUFyRCxDQUFzRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNpemUgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcblxuZXhwb3J0IGludGVyZmFjZSBJTmV1cm9ueEltYWdlIHtcbiAgcmVhZG9ubHkgaW1hZ2VOYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGltYWdlVGFnOiBzdHJpbmc7XG4gIHJlYWRvbmx5IG5ldXJvblNka1ZlcnNpb246IHN0cmluZztcbn1cblxuYWJzdHJhY3QgY2xhc3MgTmV1cm9ueEltYWdlIHt9XG5cbmZ1bmN0aW9uIGdldExhdGVzdFZlcnNpb248VCBleHRlbmRzIElOZXVyb254SW1hZ2UgPSBJTmV1cm9ueEltYWdlPihcbiAgbmV1cm9ueEltYWdlQ2xhc3M6IGFic3RyYWN0IG5ldyAoKSA9PiBhbnksXG4pIHtcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKG5ldXJvbnhJbWFnZUNsYXNzKVxuICAgIC5maWx0ZXIoKFtrXSkgPT4gay5zdGFydHNXaXRoKFwiU0RLX1wiKSlcbiAgICAuc29ydCgoW2sxXSwgW2syXSkgPT4gKGsxIDwgazIgPyAxIDogLTEpKVxuICAgIC5tYXAoKFtfLCB2XSkgPT4gdilbMF0gYXMgVDtcbn1cblxuYWJzdHJhY3QgY2xhc3MgUHl0b3JjaE5ldXJvbnhJbWFnZSBleHRlbmRzIE5ldXJvbnhJbWFnZSB7XG4gIHN0YXRpYyByZWFkb25seSBzaXplID0gU2l6ZS5naWJpYnl0ZXMoMzApO1xuICAvKiogTmV1cm9uIFNESyAyLjI4LjAgKi9cbiAgc3RhdGljIHJlYWRvbmx5IFNES18yXzI4XzAgPSBQeXRvcmNoTmV1cm9ueEltYWdlLmZyb21OZXVyb25TZGtWZXJzaW9uKFxuICAgIFwiMi4yOC4wXCIsXG4gICAgXCIzLjEyXCIsXG4gICAgXCIyLjkuMFwiLFxuICAgIFwiMjQuMDRcIixcbiAgKTtcbiAgLyoqIE5ldXJvbiBTREsgMi4yNy4xICovXG4gIHN0YXRpYyByZWFkb25seSBTREtfMl8yN18xID0gUHl0b3JjaE5ldXJvbnhJbWFnZS5mcm9tTmV1cm9uU2RrVmVyc2lvbihcbiAgICBcIjIuMjcuMVwiLFxuICAgIFwiMy4xMlwiLFxuICAgIFwiMi45LjBcIixcbiAgICBcIjI0LjA0XCIsXG4gICk7XG4gIC8qKiBOZXVyb24gU0RLIDIuMjYuMSAqL1xuICBzdGF0aWMgcmVhZG9ubHkgU0RLXzJfMjZfMSA9IFB5dG9yY2hOZXVyb254SW1hZ2UuZnJvbU5ldXJvblNka1ZlcnNpb24oXG4gICAgXCIyLjI2LjFcIixcbiAgICBcIjMuMTFcIixcbiAgICBcIjIuOC4wXCIsXG4gICAgXCIyMi4wNFwiLFxuICApO1xuICAvKiogTmV1cm9uIFNESyAyLjI1LjAgKi9cbiAgc3RhdGljIHJlYWRvbmx5IFNES18yXzI1XzAgPSBQeXRvcmNoTmV1cm9ueEltYWdlLmZyb21OZXVyb25TZGtWZXJzaW9uKFxuICAgIFwiMi4yNS4wXCIsXG4gICAgXCIzLjEwXCIsXG4gICAgXCIyLjcuMFwiLFxuICAgIFwiMjIuMDRcIixcbiAgKTtcbiAgLyoqIE5ldXJvbiBTREsgMi4yNC4wICovXG4gIHN0YXRpYyByZWFkb25seSBTREtfMl8yNF8wID0gUHl0b3JjaE5ldXJvbnhJbWFnZS5mcm9tTmV1cm9uU2RrVmVyc2lvbihcbiAgICBcIjIuMjQuMFwiLFxuICAgIFwiMy4xMFwiLFxuICAgIFwiMi43LjBcIixcbiAgICBcIjIyLjA0XCIsXG4gICk7XG4gIC8qKiBOZXVyb24gU0RLIDIuMjMuMCAqL1xuICBzdGF0aWMgcmVhZG9ubHkgU0RLXzJfMjNfMCA9IFB5dG9yY2hOZXVyb254SW1hZ2UuZnJvbU5ldXJvblNka1ZlcnNpb24oXG4gICAgXCIyLjIzLjBcIixcbiAgICBcIjMuMTBcIixcbiAgICBcIjIuNi4wXCIsXG4gICAgXCIyMi4wNFwiLFxuICApO1xuICAvKiogTmV1cm9uIFNESyAyLjIyLjAgKi9cbiAgc3RhdGljIHJlYWRvbmx5IFNES18yXzIyXzAgPSBQeXRvcmNoTmV1cm9ueEltYWdlLmZyb21OZXVyb25TZGtWZXJzaW9uKFxuICAgIFwiMi4yMi4wXCIsXG4gICAgXCIzLjEwXCIsXG4gICAgXCIyLjUuMVwiLFxuICAgIFwiMjIuMDRcIixcbiAgKTtcbiAgLyoqIE5ldXJvbiBTREsgMi4yMS4xICovXG4gIHN0YXRpYyByZWFkb25seSBTREtfMl8yMV8xID0gUHl0b3JjaE5ldXJvbnhJbWFnZS5mcm9tTmV1cm9uU2RrVmVyc2lvbihcbiAgICBcIjIuMjEuMVwiLFxuICAgIFwiMy4xMFwiLFxuICAgIFwiMi41LjFcIixcbiAgICBcIjIyLjA0XCIsXG4gICk7XG4gIC8qKiBOZXVyb24gU0RLIDIuMjEuMCAqL1xuICBzdGF0aWMgcmVhZG9ubHkgU0RLXzJfMjFfMCA9IFB5dG9yY2hOZXVyb254SW1hZ2UuZnJvbU5ldXJvblNka1ZlcnNpb24oXG4gICAgXCIyLjIxLjBcIixcbiAgICBcIjMuMTBcIixcbiAgICBcIjIuNS4xXCIsXG4gICAgXCIyMi4wNFwiLFxuICApO1xuICAvKiogTmV1cm9uIFNESyAyLjIwLjIgKi9cbiAgc3RhdGljIHJlYWRvbmx5IFNES18yXzIwXzIgPSBQeXRvcmNoTmV1cm9ueEltYWdlLmZyb21OZXVyb25TZGtWZXJzaW9uKFxuICAgIFwiMi4yMC4yXCIsXG4gICAgXCIzLjEwXCIsXG4gICAgXCIyLjEuMlwiLFxuICAgIFwiMjAuMDRcIixcbiAgKTtcbiAgLyoqIE5ldXJvbiBTREsgMi4yMC4xICovXG4gIHN0YXRpYyByZWFkb25seSBTREtfMl8yMF8xID0gUHl0b3JjaE5ldXJvbnhJbWFnZS5mcm9tTmV1cm9uU2RrVmVyc2lvbihcbiAgICBcIjIuMjAuMVwiLFxuICAgIFwiMy4xMFwiLFxuICAgIFwiMi4xLjJcIixcbiAgICBcIjIwLjA0XCIsXG4gICk7XG4gIC8qKiBOZXVyb24gU0RLIDIuMjAuMCAqL1xuICBzdGF0aWMgcmVhZG9ubHkgU0RLXzJfMjBfMCA9IFB5dG9yY2hOZXVyb254SW1hZ2UuZnJvbU5ldXJvblNka1ZlcnNpb24oXG4gICAgXCIyLjIwLjBcIixcbiAgICBcIjMuMTBcIixcbiAgICBcIjIuMS4yXCIsXG4gICAgXCIyMC4wNFwiLFxuICApO1xuICAvKiogTmV1cm9uIFNESyAyLjE5LjEgKi9cbiAgc3RhdGljIHJlYWRvbmx5IFNES18yXzE5XzEgPSBQeXRvcmNoTmV1cm9ueEltYWdlLmZyb21OZXVyb25TZGtWZXJzaW9uKFxuICAgIFwiMi4xOS4xXCIsXG4gICAgXCIzLjEwXCIsXG4gICAgXCIyLjEuMlwiLFxuICAgIFwiMjAuMDRcIixcbiAgKTtcbiAgLyoqIE5ldXJvbiBTREsgMi4xOS4wICovXG4gIHN0YXRpYyByZWFkb25seSBTREtfMl8xOV8wID0gUHl0b3JjaE5ldXJvbnhJbWFnZS5mcm9tTmV1cm9uU2RrVmVyc2lvbihcbiAgICBcIjIuMTkuMFwiLFxuICAgIFwiMy4xMFwiLFxuICAgIFwiMi4xLjJcIixcbiAgICBcIjIwLjA0XCIsXG4gICk7XG4gIC8qKiBOZXVyb24gU0RLIDIuMTguMiAqL1xuICBzdGF0aWMgcmVhZG9ubHkgU0RLXzJfMThfMiA9IFB5dG9yY2hOZXVyb254SW1hZ2UuZnJvbU5ldXJvblNka1ZlcnNpb24oXG4gICAgXCIyLjE4LjJcIixcbiAgICBcIjMuMTBcIixcbiAgICBcIjIuMS4yXCIsXG4gICAgXCIyMC4wNFwiLFxuICApO1xuICAvKiogTmV1cm9uIFNESyAyLjE4LjEgKi9cbiAgc3RhdGljIHJlYWRvbmx5IFNES18yXzE4XzEgPSBQeXRvcmNoTmV1cm9ueEltYWdlLmZyb21OZXVyb25TZGtWZXJzaW9uKFxuICAgIFwiMi4xOC4xXCIsXG4gICAgXCIzLjEwXCIsXG4gICAgXCIyLjEuMlwiLFxuICAgIFwiMjAuMDRcIixcbiAgKTtcbiAgLyoqIE5ldXJvbiBTREsgMi4xOC4wICovXG4gIHN0YXRpYyByZWFkb25seSBTREtfMl8xOF8wID0gUHl0b3JjaE5ldXJvbnhJbWFnZS5mcm9tTmV1cm9uU2RrVmVyc2lvbihcbiAgICBcIjIuMTguMFwiLFxuICAgIFwiMy4xMFwiLFxuICAgIFwiMi4xLjJcIixcbiAgICBcIjIwLjA0XCIsXG4gICk7XG4gIC8qKiBMYXRlc3QgTmV1cm9uIFNESyAqL1xuICBzdGF0aWMgcmVhZG9ubHkgTEFURVNUID0gZ2V0TGF0ZXN0VmVyc2lvbih0aGlzKTtcblxuICBzdGF0aWMgZnJvbU5ldXJvblNka1ZlcnNpb24oXG4gICAgbmV1cm9uU2RrVmVyc2lvbjogc3RyaW5nLFxuICAgIHB5dGhvblZlcnNpb246IHN0cmluZyxcbiAgICBweXRvcmNoVmVyc2lvbjogc3RyaW5nLFxuICAgIHVidW50dVZlcnNpb246IHN0cmluZyxcbiAgKTogSU5ldXJvbnhJbWFnZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5ldXJvblNka1ZlcnNpb24sXG4gICAgICBpbWFnZU5hbWU6IHRoaXMuaW1hZ2VOYW1lLFxuICAgICAgaW1hZ2VUYWc6IGAke3B5dG9yY2hWZXJzaW9ufS1uZXVyb254LXB5JHtweXRob25WZXJzaW9uLnJlcGxhY2UoXCIuXCIsIFwiXCIpfS1zZGske25ldXJvblNka1ZlcnNpb259LXVidW50dSR7dWJ1bnR1VmVyc2lvbn1gLFxuICAgIH07XG4gIH1cbiAgcHJvdGVjdGVkIHN0YXRpYyByZWFkb25seSBpbWFnZU5hbWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFB5dG9yY2hJbmZlcmVuY2VOZXVyb254SW1hZ2UgZXh0ZW5kcyBQeXRvcmNoTmV1cm9ueEltYWdlIHtcbiAgc3RhdGljIHJlYWRvbmx5IGltYWdlTmFtZSA9IFwicHVibGljLmVjci5hd3MvbmV1cm9uL3B5dG9yY2gtaW5mZXJlbmNlLW5ldXJvbnhcIjtcbiAgLyoqIE5ldXJvbiBTREsgMi4yOC4wICovXG4gIHN0YXRpYyByZWFkb25seSBTREtfMl8yOF8wID1cbiAgICBQeXRvcmNoSW5mZXJlbmNlTmV1cm9ueEltYWdlLmZyb21OZXVyb25TZGtWZXJzaW9uKFxuICAgICAgXCIyLjI4LjBcIixcbiAgICAgIFwiMy4xMlwiLFxuICAgICAgXCIyLjkuMFwiLFxuICAgICAgXCIyNC4wNFwiLFxuICAgICk7XG4gIC8qKiBOZXVyb24gU0RLIDIuMjcuMSAqL1xuICBzdGF0aWMgcmVhZG9ubHkgU0RLXzJfMjdfMSA9XG4gICAgUHl0b3JjaEluZmVyZW5jZU5ldXJvbnhJbWFnZS5mcm9tTmV1cm9uU2RrVmVyc2lvbihcbiAgICAgIFwiMi4yNy4xXCIsXG4gICAgICBcIjMuMTJcIixcbiAgICAgIFwiMi45LjBcIixcbiAgICAgIFwiMjQuMDRcIixcbiAgICApO1xuICAvKiogTmV1cm9uIFNESyAyLjI2LjEgKi9cbiAgc3RhdGljIHJlYWRvbmx5IFNES18yXzI2XzEgPVxuICAgIFB5dG9yY2hJbmZlcmVuY2VOZXVyb254SW1hZ2UuZnJvbU5ldXJvblNka1ZlcnNpb24oXG4gICAgICBcIjIuMjYuMVwiLFxuICAgICAgXCIzLjExXCIsXG4gICAgICBcIjIuOC4wXCIsXG4gICAgICBcIjIyLjA0XCIsXG4gICAgKTtcbiAgLyoqIE5ldXJvbiBTREsgMi4yNS4wICovXG4gIHN0YXRpYyByZWFkb25seSBTREtfMl8yNV8wID1cbiAgICBQeXRvcmNoSW5mZXJlbmNlTmV1cm9ueEltYWdlLmZyb21OZXVyb25TZGtWZXJzaW9uKFxuICAgICAgXCIyLjI1LjBcIixcbiAgICAgIFwiMy4xMFwiLFxuICAgICAgXCIyLjcuMFwiLFxuICAgICAgXCIyMi4wNFwiLFxuICAgICk7XG4gIC8qKiBOZXVyb24gU0RLIDIuMjMuMCAqL1xuICBzdGF0aWMgcmVhZG9ubHkgU0RLXzJfMjNfMCA9XG4gICAgUHl0b3JjaEluZmVyZW5jZU5ldXJvbnhJbWFnZS5mcm9tTmV1cm9uU2RrVmVyc2lvbihcbiAgICAgIFwiMi4yMy4wXCIsXG4gICAgICBcIjMuMTBcIixcbiAgICAgIFwiMi42LjBcIixcbiAgICAgIFwiMjIuMDRcIixcbiAgICApO1xuICAvKiogTmV1cm9uIFNESyAyLjIyLjAgKi9cbiAgc3RhdGljIHJlYWRvbmx5IFNES18yXzIyXzAgPVxuICAgIFB5dG9yY2hJbmZlcmVuY2VOZXVyb254SW1hZ2UuZnJvbU5ldXJvblNka1ZlcnNpb24oXG4gICAgICBcIjIuMjIuMFwiLFxuICAgICAgXCIzLjEwXCIsXG4gICAgICBcIjIuNS4xXCIsXG4gICAgICBcIjIyLjA0XCIsXG4gICAgKTtcbiAgLyoqIE5ldXJvbiBTREsgMi4yMC4yIChQeVRvcmNoIDIuMS4yKSAqL1xuICBzdGF0aWMgcmVhZG9ubHkgU0RLXzJfMjBfMl9QWVRPUkNIXzJfMV8yID1cbiAgICBQeXRvcmNoSW5mZXJlbmNlTmV1cm9ueEltYWdlLmZyb21OZXVyb25TZGtWZXJzaW9uKFxuICAgICAgXCIyLjIwLjJcIixcbiAgICAgIFwiMy4xMFwiLFxuICAgICAgXCIyLjEuMlwiLFxuICAgICAgXCIyMC4wNFwiLFxuICAgICk7XG4gIC8qKiBOZXVyb24gU0RLIDIuMjAuMiAoUHlUb3JjaCAxLjEzLjEpICovXG4gIHN0YXRpYyByZWFkb25seSBTREtfMl8yMF8yX1BZVE9SQ0hfMV8xM18xID1cbiAgICBQeXRvcmNoSW5mZXJlbmNlTmV1cm9ueEltYWdlLmZyb21OZXVyb25TZGtWZXJzaW9uKFxuICAgICAgXCIyLjIwLjJcIixcbiAgICAgIFwiMy4xMFwiLFxuICAgICAgXCIxLjEzLjFcIixcbiAgICAgIFwiMjAuMDRcIixcbiAgICApO1xuICAvKiogTGF0ZXN0IE5ldXJvbiBTREsgKi9cbiAgc3RhdGljIHJlYWRvbmx5IExBVEVTVCA9IGdldExhdGVzdFZlcnNpb24odGhpcyk7XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBQeXRvcmNoVHJhaW5pbmdOZXVyb254SW1hZ2UgZXh0ZW5kcyBQeXRvcmNoTmV1cm9ueEltYWdlIHtcbiAgc3RhdGljIHJlYWRvbmx5IGltYWdlTmFtZSA9IFwicHVibGljLmVjci5hd3MvbmV1cm9uL3B5dG9yY2gtdHJhaW5pbmctbmV1cm9ueFwiO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElWbGxtSW5mZXJlbmNlTmV1cm9ueEltYWdlIGV4dGVuZHMgSU5ldXJvbnhJbWFnZSB7XG4gIHJlYWRvbmx5IHZsbG1WZXJzaW9uOiBzdHJpbmc7XG59XG5leHBvcnQgY2xhc3MgVmxsbUluZmVyZW5jZU5ldXJvbnhJbWFnZSBleHRlbmRzIE5ldXJvbnhJbWFnZSB7XG4gIC8qKiBOZXVyb24gU0RLIDIuMjguMCB3aXRoIHZMTE0gMC4xMy4wICovXG4gIHN0YXRpYyByZWFkb25seSBTREtfMl8yOF8wID0gVmxsbUluZmVyZW5jZU5ldXJvbnhJbWFnZS5mcm9tTmV1cm9uU2RrVmVyc2lvbihcbiAgICBcIjIuMjguMFwiLFxuICAgIFwiMC4xMy4wXCIsXG4gICAgXCIzLjEyXCIsXG4gICAgXCIyNC4wNFwiLFxuICApO1xuICAvKiogTmV1cm9uIFNESyAyLjI3LjEgd2l0aCB2TExNIDAuMTMuMCAqL1xuICBzdGF0aWMgcmVhZG9ubHkgU0RLXzJfMjdfMV9WTExNXzBfMTNfMCA9XG4gICAgVmxsbUluZmVyZW5jZU5ldXJvbnhJbWFnZS5mcm9tTmV1cm9uU2RrVmVyc2lvbihcbiAgICAgIFwiMi4yNy4xXCIsXG4gICAgICBcIjAuMTMuMFwiLFxuICAgICAgXCIzLjEyXCIsXG4gICAgICBcIjI0LjA0XCIsXG4gICAgKTtcbiAgLyoqIE5ldXJvbiBTREsgMi4yNy4xIHdpdGggdkxMTSAwLjExLjAgKi9cbiAgc3RhdGljIHJlYWRvbmx5IFNES18yXzI3XzFfVkxMTV8wXzExXzAgPVxuICAgIFZsbG1JbmZlcmVuY2VOZXVyb254SW1hZ2UuZnJvbU5ldXJvblNka1ZlcnNpb24oXG4gICAgICBcIjIuMjcuMVwiLFxuICAgICAgXCIwLjExLjBcIixcbiAgICAgIFwiMy4xMlwiLFxuICAgICAgXCIyNC4wNFwiLFxuICAgICk7XG4gIC8qKiBOZXVyb24gU0RLIDIuMjYuMSB3aXRoIHZMTE0gMC45LjEgKi9cbiAgc3RhdGljIHJlYWRvbmx5IFNES18yXzI2XzEgPSBWbGxtSW5mZXJlbmNlTmV1cm9ueEltYWdlLmZyb21OZXVyb25TZGtWZXJzaW9uKFxuICAgIFwiMi4yNi4xXCIsXG4gICAgXCIwLjkuMVwiLFxuICAgIFwiMy4xMVwiLFxuICAgIFwiMjIuMDRcIixcbiAgKTtcbiAgLyoqIE5ldXJvbiBTREsgMi4yNi4wIHdpdGggdkxMTSAwLjkuMSAqL1xuICBzdGF0aWMgcmVhZG9ubHkgU0RLXzJfMjZfMCA9IFZsbG1JbmZlcmVuY2VOZXVyb254SW1hZ2UuZnJvbU5ldXJvblNka1ZlcnNpb24oXG4gICAgXCIyLjI2LjBcIixcbiAgICBcIjAuOS4xXCIsXG4gICAgXCIzLjExXCIsXG4gICAgXCIyMi4wNFwiLFxuICApO1xuICAvKiogTmV1cm9uIFNESyAyLjI1LjAgd2l0aCB2TExNIDAuOS4xICovXG4gIHN0YXRpYyByZWFkb25seSBTREtfMl8yNV8wID0gVmxsbUluZmVyZW5jZU5ldXJvbnhJbWFnZS5mcm9tTmV1cm9uU2RrVmVyc2lvbihcbiAgICBcIjIuMjUuMFwiLFxuICAgIFwiMC45LjFcIixcbiAgICBcIjMuMTBcIixcbiAgICBcIjIyLjA0XCIsXG4gICk7XG4gIC8qKiBOZXVyb24gU0RLIDIuMjQuMSB3aXRoIHZMTE0gMC43LjIgKi9cbiAgc3RhdGljIHJlYWRvbmx5IFNES18yXzI0XzEgPSBWbGxtSW5mZXJlbmNlTmV1cm9ueEltYWdlLmZyb21OZXVyb25TZGtWZXJzaW9uKFxuICAgIFwiMi4yNC4xXCIsXG4gICAgXCIwLjcuMlwiLFxuICAgIFwiMy4xMFwiLFxuICAgIFwiMjIuMDRcIixcbiAgKTtcbiAgLyoqIExhdGVzdCBOZXVyb24gU0RLICovXG4gIHN0YXRpYyByZWFkb25seSBMQVRFU1QgPSBnZXRMYXRlc3RWZXJzaW9uPElWbGxtSW5mZXJlbmNlTmV1cm9ueEltYWdlPih0aGlzKTtcblxuICBzdGF0aWMgZnJvbU5ldXJvblNka1ZlcnNpb24oXG4gICAgbmV1cm9uU2RrVmVyc2lvbjogc3RyaW5nLFxuICAgIHZsbG1WZXJzaW9uOiBzdHJpbmcsXG4gICAgcHl0aG9uVmVyc2lvbjogc3RyaW5nLFxuICAgIHVidW50dVZlcnNpb246IHN0cmluZyxcbiAgKTogSVZsbG1JbmZlcmVuY2VOZXVyb254SW1hZ2Uge1xuICAgIHJldHVybiB7XG4gICAgICBuZXVyb25TZGtWZXJzaW9uLFxuICAgICAgaW1hZ2VOYW1lOiBcInB1YmxpYy5lY3IuYXdzL25ldXJvbi9weXRvcmNoLWluZmVyZW5jZS12bGxtLW5ldXJvbnhcIixcbiAgICAgIGltYWdlVGFnOiBgJHt2bGxtVmVyc2lvbn0tbmV1cm9ueC1weSR7cHl0aG9uVmVyc2lvbi5yZXBsYWNlKFwiLlwiLCBcIlwiKX0tc2RrJHtuZXVyb25TZGtWZXJzaW9ufS11YnVudHUke3VidW50dVZlcnNpb259YCxcbiAgICAgIHZsbG1WZXJzaW9uLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==