flexdataset 0.21.2 → 0.23.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.
@@ -8,7 +8,7 @@ export { loadRoot, LoadOutcome, } from './loader';
8
8
  export { TableTypeBase, TableTypeFields, } from './table-type';
9
9
  export { createTableType, } from './table-types/registry';
10
10
  export { HiveParquetTable, } from './table-types/hive-parquet';
11
- export { IcebergParquetTable, } from './table-types/iceberg-parquet';
11
+ export { IcebergParquetV2Table, } from './table-types/iceberg-parquet-v2';
12
12
  export { Postgres18Table, } from './table-types/postgres-18';
13
13
  export { validateStructure, StructuralKind, StructuralResult, StructuralError, } from './structural';
14
14
  export { isValidHiveType, isValidPostgresType, } from './types';
package/dist/src/index.js CHANGED
@@ -17,7 +17,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
17
17
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
18
18
  };
19
19
  Object.defineProperty(exports, "__esModule", { value: true });
20
- exports.renderDot = exports.buildErDot = exports.buildDagDot = exports.IcebergTransformKind = exports.IcebergTypeKind = exports.transformLegalOnType = exports.parseIcebergTransform = exports.isValidIcebergType = exports.parseIcebergType = exports.isValidPostgresType = exports.isValidHiveType = exports.validateStructure = exports.Postgres18Table = exports.IcebergParquetTable = exports.HiveParquetTable = exports.createTableType = exports.TableTypeBase = exports.loadRoot = exports.formatViolation = exports.loadValidatedRoot = exports.validateRoot = exports.runSemanticRules = void 0;
20
+ exports.renderDot = exports.buildErDot = exports.buildDagDot = exports.IcebergTransformKind = exports.IcebergTypeKind = exports.transformLegalOnType = exports.parseIcebergTransform = exports.isValidIcebergType = exports.parseIcebergType = exports.isValidPostgresType = exports.isValidHiveType = exports.validateStructure = exports.Postgres18Table = exports.IcebergParquetV2Table = exports.HiveParquetTable = exports.createTableType = exports.TableTypeBase = exports.loadRoot = exports.formatViolation = exports.loadValidatedRoot = exports.validateRoot = exports.runSemanticRules = void 0;
21
21
  __exportStar(require("./model"), exports);
22
22
  var world_1 = require("./world");
23
23
  Object.defineProperty(exports, "runSemanticRules", { enumerable: true, get: function () { return world_1.runSemanticRules; } });
@@ -33,8 +33,8 @@ var registry_1 = require("./table-types/registry");
33
33
  Object.defineProperty(exports, "createTableType", { enumerable: true, get: function () { return registry_1.createTableType; } });
34
34
  var hive_parquet_1 = require("./table-types/hive-parquet");
35
35
  Object.defineProperty(exports, "HiveParquetTable", { enumerable: true, get: function () { return hive_parquet_1.HiveParquetTable; } });
36
- var iceberg_parquet_1 = require("./table-types/iceberg-parquet");
37
- Object.defineProperty(exports, "IcebergParquetTable", { enumerable: true, get: function () { return iceberg_parquet_1.IcebergParquetTable; } });
36
+ var iceberg_parquet_v2_1 = require("./table-types/iceberg-parquet-v2");
37
+ Object.defineProperty(exports, "IcebergParquetV2Table", { enumerable: true, get: function () { return iceberg_parquet_v2_1.IcebergParquetV2Table; } });
38
38
  var postgres_18_1 = require("./table-types/postgres-18");
39
39
  Object.defineProperty(exports, "Postgres18Table", { enumerable: true, get: function () { return postgres_18_1.Postgres18Table; } });
40
40
  var structural_1 = require("./structural");
@@ -55,4 +55,4 @@ var er_1 = require("./diagram/er");
55
55
  Object.defineProperty(exports, "buildErDot", { enumerable: true, get: function () { return er_1.buildErDot; } });
56
56
  var render_1 = require("./diagram/render");
57
57
  Object.defineProperty(exports, "renderDot", { enumerable: true, get: function () { return render_1.renderDot; } });
58
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOztHQUVHOzs7Ozs7Ozs7Ozs7Ozs7OztBQUVILDBDQUF3QjtBQUN4QixpQ0FJaUI7QUFEYix5R0FBQSxnQkFBZ0IsT0FBQTtBQUVwQix1Q0FLb0I7QUFKaEIsd0dBQUEsWUFBWSxPQUFBO0FBQ1osNkdBQUEsaUJBQWlCLE9BQUE7QUFDakIsMkdBQUEsZUFBZSxPQUFBO0FBR25CLG1DQUdrQjtBQUZkLGtHQUFBLFFBQVEsT0FBQTtBQUdaLDJDQUdzQjtBQUZsQiwyR0FBQSxhQUFhLE9BQUE7QUFHakIsbURBRWdDO0FBRDVCLDJHQUFBLGVBQWUsT0FBQTtBQUVuQiwyREFFb0M7QUFEaEMsZ0hBQUEsZ0JBQWdCLE9BQUE7QUFFcEIsaUVBRXVDO0FBRG5DLHNIQUFBLG1CQUFtQixPQUFBO0FBRXZCLHlEQUVtQztBQUQvQiw4R0FBQSxlQUFlLE9BQUE7QUFFbkIsMkNBS3NCO0FBSmxCLCtHQUFBLGlCQUFpQixPQUFBO0FBS3JCLGlDQUdpQjtBQUZiLHdHQUFBLGVBQWUsT0FBQTtBQUNmLDRHQUFBLG1CQUFtQixPQUFBO0FBRXZCLHFDQVNtQjtBQVJmLDJHQUFBLGdCQUFnQixPQUFBO0FBQ2hCLDZHQUFBLGtCQUFrQixPQUFBO0FBQ2xCLGdIQUFBLHFCQUFxQixPQUFBO0FBQ3JCLCtHQUFBLG9CQUFvQixPQUFBO0FBRXBCLDBHQUFBLGVBQWUsT0FBQTtBQUVmLCtHQUFBLG9CQUFvQixPQUFBO0FBRXhCLHFDQUV1QjtBQURuQixrR0FBQSxXQUFXLE9BQUE7QUFFZixtQ0FFc0I7QUFEbEIsZ0dBQUEsVUFBVSxPQUFBO0FBRWQsMkNBRTBCO0FBRHRCLG1HQUFBLFNBQVMsT0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUHVibGljIEFQSSBmb3IgdGhlIEZERCBjb3JlIHBhY2thZ2UuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9tb2RlbCc7XG5leHBvcnQge1xuICAgIExvYWRlZFNjaGVtYSxcbiAgICBXb3JsZCxcbiAgICBydW5TZW1hbnRpY1J1bGVzLFxufSBmcm9tICcuL3dvcmxkJztcbmV4cG9ydCB7XG4gICAgdmFsaWRhdGVSb290LFxuICAgIGxvYWRWYWxpZGF0ZWRSb290LFxuICAgIGZvcm1hdFZpb2xhdGlvbixcbiAgICBMb2FkVmFsaWRhdGVkT3B0aW9ucyxcbn0gZnJvbSAnLi92YWxpZGF0ZSc7XG5leHBvcnQge1xuICAgIGxvYWRSb290LFxuICAgIExvYWRPdXRjb21lLFxufSBmcm9tICcuL2xvYWRlcic7XG5leHBvcnQge1xuICAgIFRhYmxlVHlwZUJhc2UsXG4gICAgVGFibGVUeXBlRmllbGRzLFxufSBmcm9tICcuL3RhYmxlLXR5cGUnO1xuZXhwb3J0IHtcbiAgICBjcmVhdGVUYWJsZVR5cGUsXG59IGZyb20gJy4vdGFibGUtdHlwZXMvcmVnaXN0cnknO1xuZXhwb3J0IHtcbiAgICBIaXZlUGFycXVldFRhYmxlLFxufSBmcm9tICcuL3RhYmxlLXR5cGVzL2hpdmUtcGFycXVldCc7XG5leHBvcnQge1xuICAgIEljZWJlcmdQYXJxdWV0VGFibGUsXG59IGZyb20gJy4vdGFibGUtdHlwZXMvaWNlYmVyZy1wYXJxdWV0JztcbmV4cG9ydCB7XG4gICAgUG9zdGdyZXMxOFRhYmxlLFxufSBmcm9tICcuL3RhYmxlLXR5cGVzL3Bvc3RncmVzLTE4JztcbmV4cG9ydCB7XG4gICAgdmFsaWRhdGVTdHJ1Y3R1cmUsXG4gICAgU3RydWN0dXJhbEtpbmQsXG4gICAgU3RydWN0dXJhbFJlc3VsdCxcbiAgICBTdHJ1Y3R1cmFsRXJyb3IsXG59IGZyb20gJy4vc3RydWN0dXJhbCc7XG5leHBvcnQge1xuICAgIGlzVmFsaWRIaXZlVHlwZSxcbiAgICBpc1ZhbGlkUG9zdGdyZXNUeXBlLFxufSBmcm9tICcuL3R5cGVzJztcbmV4cG9ydCB7XG4gICAgcGFyc2VJY2ViZXJnVHlwZSxcbiAgICBpc1ZhbGlkSWNlYmVyZ1R5cGUsXG4gICAgcGFyc2VJY2ViZXJnVHJhbnNmb3JtLFxuICAgIHRyYW5zZm9ybUxlZ2FsT25UeXBlLFxuICAgIEljZWJlcmdUeXBlLFxuICAgIEljZWJlcmdUeXBlS2luZCxcbiAgICBJY2ViZXJnVHJhbnNmb3JtLFxuICAgIEljZWJlcmdUcmFuc2Zvcm1LaW5kLFxufSBmcm9tICcuL2ljZWJlcmcnO1xuZXhwb3J0IHtcbiAgICBidWlsZERhZ0RvdCxcbn0gZnJvbSAnLi9kaWFncmFtL2RhZyc7XG5leHBvcnQge1xuICAgIGJ1aWxkRXJEb3QsXG59IGZyb20gJy4vZGlhZ3JhbS9lcic7XG5leHBvcnQge1xuICAgIHJlbmRlckRvdCxcbn0gZnJvbSAnLi9kaWFncmFtL3JlbmRlcic7XG4iXX0=
58
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOztHQUVHOzs7Ozs7Ozs7Ozs7Ozs7OztBQUVILDBDQUF3QjtBQUN4QixpQ0FJaUI7QUFEYix5R0FBQSxnQkFBZ0IsT0FBQTtBQUVwQix1Q0FLb0I7QUFKaEIsd0dBQUEsWUFBWSxPQUFBO0FBQ1osNkdBQUEsaUJBQWlCLE9BQUE7QUFDakIsMkdBQUEsZUFBZSxPQUFBO0FBR25CLG1DQUdrQjtBQUZkLGtHQUFBLFFBQVEsT0FBQTtBQUdaLDJDQUdzQjtBQUZsQiwyR0FBQSxhQUFhLE9BQUE7QUFHakIsbURBRWdDO0FBRDVCLDJHQUFBLGVBQWUsT0FBQTtBQUVuQiwyREFFb0M7QUFEaEMsZ0hBQUEsZ0JBQWdCLE9BQUE7QUFFcEIsdUVBRTBDO0FBRHRDLDJIQUFBLHFCQUFxQixPQUFBO0FBRXpCLHlEQUVtQztBQUQvQiw4R0FBQSxlQUFlLE9BQUE7QUFFbkIsMkNBS3NCO0FBSmxCLCtHQUFBLGlCQUFpQixPQUFBO0FBS3JCLGlDQUdpQjtBQUZiLHdHQUFBLGVBQWUsT0FBQTtBQUNmLDRHQUFBLG1CQUFtQixPQUFBO0FBRXZCLHFDQVNtQjtBQVJmLDJHQUFBLGdCQUFnQixPQUFBO0FBQ2hCLDZHQUFBLGtCQUFrQixPQUFBO0FBQ2xCLGdIQUFBLHFCQUFxQixPQUFBO0FBQ3JCLCtHQUFBLG9CQUFvQixPQUFBO0FBRXBCLDBHQUFBLGVBQWUsT0FBQTtBQUVmLCtHQUFBLG9CQUFvQixPQUFBO0FBRXhCLHFDQUV1QjtBQURuQixrR0FBQSxXQUFXLE9BQUE7QUFFZixtQ0FFc0I7QUFEbEIsZ0dBQUEsVUFBVSxPQUFBO0FBRWQsMkNBRTBCO0FBRHRCLG1HQUFBLFNBQVMsT0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUHVibGljIEFQSSBmb3IgdGhlIEZERCBjb3JlIHBhY2thZ2UuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9tb2RlbCc7XG5leHBvcnQge1xuICAgIExvYWRlZFNjaGVtYSxcbiAgICBXb3JsZCxcbiAgICBydW5TZW1hbnRpY1J1bGVzLFxufSBmcm9tICcuL3dvcmxkJztcbmV4cG9ydCB7XG4gICAgdmFsaWRhdGVSb290LFxuICAgIGxvYWRWYWxpZGF0ZWRSb290LFxuICAgIGZvcm1hdFZpb2xhdGlvbixcbiAgICBMb2FkVmFsaWRhdGVkT3B0aW9ucyxcbn0gZnJvbSAnLi92YWxpZGF0ZSc7XG5leHBvcnQge1xuICAgIGxvYWRSb290LFxuICAgIExvYWRPdXRjb21lLFxufSBmcm9tICcuL2xvYWRlcic7XG5leHBvcnQge1xuICAgIFRhYmxlVHlwZUJhc2UsXG4gICAgVGFibGVUeXBlRmllbGRzLFxufSBmcm9tICcuL3RhYmxlLXR5cGUnO1xuZXhwb3J0IHtcbiAgICBjcmVhdGVUYWJsZVR5cGUsXG59IGZyb20gJy4vdGFibGUtdHlwZXMvcmVnaXN0cnknO1xuZXhwb3J0IHtcbiAgICBIaXZlUGFycXVldFRhYmxlLFxufSBmcm9tICcuL3RhYmxlLXR5cGVzL2hpdmUtcGFycXVldCc7XG5leHBvcnQge1xuICAgIEljZWJlcmdQYXJxdWV0VjJUYWJsZSxcbn0gZnJvbSAnLi90YWJsZS10eXBlcy9pY2ViZXJnLXBhcnF1ZXQtdjInO1xuZXhwb3J0IHtcbiAgICBQb3N0Z3JlczE4VGFibGUsXG59IGZyb20gJy4vdGFibGUtdHlwZXMvcG9zdGdyZXMtMTgnO1xuZXhwb3J0IHtcbiAgICB2YWxpZGF0ZVN0cnVjdHVyZSxcbiAgICBTdHJ1Y3R1cmFsS2luZCxcbiAgICBTdHJ1Y3R1cmFsUmVzdWx0LFxuICAgIFN0cnVjdHVyYWxFcnJvcixcbn0gZnJvbSAnLi9zdHJ1Y3R1cmFsJztcbmV4cG9ydCB7XG4gICAgaXNWYWxpZEhpdmVUeXBlLFxuICAgIGlzVmFsaWRQb3N0Z3Jlc1R5cGUsXG59IGZyb20gJy4vdHlwZXMnO1xuZXhwb3J0IHtcbiAgICBwYXJzZUljZWJlcmdUeXBlLFxuICAgIGlzVmFsaWRJY2ViZXJnVHlwZSxcbiAgICBwYXJzZUljZWJlcmdUcmFuc2Zvcm0sXG4gICAgdHJhbnNmb3JtTGVnYWxPblR5cGUsXG4gICAgSWNlYmVyZ1R5cGUsXG4gICAgSWNlYmVyZ1R5cGVLaW5kLFxuICAgIEljZWJlcmdUcmFuc2Zvcm0sXG4gICAgSWNlYmVyZ1RyYW5zZm9ybUtpbmQsXG59IGZyb20gJy4vaWNlYmVyZyc7XG5leHBvcnQge1xuICAgIGJ1aWxkRGFnRG90LFxufSBmcm9tICcuL2RpYWdyYW0vZGFnJztcbmV4cG9ydCB7XG4gICAgYnVpbGRFckRvdCxcbn0gZnJvbSAnLi9kaWFncmFtL2VyJztcbmV4cG9ydCB7XG4gICAgcmVuZGVyRG90LFxufSBmcm9tICcuL2RpYWdyYW0vcmVuZGVyJztcbiJdfQ==
@@ -68,6 +68,7 @@ function normalizeColumns(value) {
68
68
  name: asString(record.name),
69
69
  type: asString(record.type),
70
70
  description: asString(record.description),
71
+ id: asOptionalNumber(record.id),
71
72
  nullable: asOptionalBoolean(record.nullable),
72
73
  generated: asOptionalString(record.generated),
73
74
  expression: asOptionalString(record.expression),
@@ -380,4 +381,4 @@ function loadRoot(rootDir) {
380
381
  violations,
381
382
  };
382
383
  }
383
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xvYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7O0dBUUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFtU0gsNEJBd0lDO0FBemFELHVDQUF5QjtBQUN6QiwyQ0FBNkI7QUFrQjdCLDZDQUVzQjtBQUl0QixxREFFZ0M7QUFlaEMsU0FBUyxRQUFRLENBQUMsS0FBYztJQUM1QixPQUFPLEtBQUssS0FBSyxJQUFJLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFnQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDL0YsQ0FBQztBQUVELFNBQVMsT0FBTyxDQUFDLEtBQWM7SUFDM0IsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM3QyxDQUFDO0FBRUQsU0FBUyxRQUFRLENBQUMsS0FBYztJQUM1QixPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDbEQsQ0FBQztBQUVELFNBQVMsU0FBUyxDQUFDLEtBQWM7SUFDN0IsT0FBTyxPQUFPLEtBQUssS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQ3RELENBQUM7QUFFRCxTQUFTLGlCQUFpQixDQUFDLEtBQWM7SUFDckMsT0FBTyxPQUFPLEtBQUssS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQzFELENBQUM7QUFFRCxTQUFTLGdCQUFnQixDQUFDLEtBQWM7SUFDcEMsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMs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LFlBQVk7WUFDckIsT0FBTztZQUNQLE1BQU07U0FDVDtRQUNELFVBQVU7S0FDYixDQUFDO0FBQ04sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRmlsZXN5c3RlbSBsb2FkZXIuIFdhbGtzIGEgZGF0YXNldCByb290LCBwYXJzZXMgZWFjaCBKU09OIGZpbGUsIHJ1bnMgTGF5ZXIgMVxuICogc3RydWN0dXJhbCB2YWxpZGF0aW9uLCBhbmQgbm9ybWFsaXplcyBldmVyeXRoaW5nIGludG8gYSBgV29ybGRgIG9mXG4gKiBjb25jcmV0ZSBgVGFibGVUeXBlQmFzZWAgaW5zdGFuY2VzIHRoYXQgdGhlIHNlbWFudGljIHJ1bGVzIG9wZXJhdGUgb24uXG4gKlxuICogUGFyc2UgZXJyb3JzLCBzdHJ1Y3R1cmFsIGVycm9ycywgYW5kIGEgbWlzc2luZyBzY2hlbWEtZGVzY3JpcHRpb24gZmlsZSBhcmVcbiAqIHJlcG9ydGVkIGhlcmU7IGFsbCBjcm9zcy1maWVsZCAvIGNyb3NzLWZpbGUgbG9naWMgbGl2ZXMgaW4gdGhlIHRhYmxlLXR5cGVcbiAqIGNsYXNzZXMgKGAuL3RhYmxlLXR5cGUudHNgLCBgLi90YWJsZS10eXBlcy8qYCkuXG4gKi9cblxuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcblxuaW1wb3J0IHtcbiAgICBCdWNrZXRpbmcsXG4gICAgQ2hlY2tDb25zdHJhaW50LFxuICAgIENvbHVtbixcbiAgICBFeGNsdXNpb25Db25zdHJhaW50LFxuICAgIEZvcmVpZ25LZXksXG4gICAgSGl2ZVN0b3JhZ2UsXG4gICAgSW5kZXgsXG4gICAgUGFydGl0aW9uLFxuICAgIFNjaGVtYURlc2NyaXB0aW9uLFxuICAgIFNrZXdlZEJ5LFxuICAgIFNvcnRGaWVsZCxcbiAgICBUYWJsZURlZmluaXRpb24sXG4gICAgVW5pcXVlQ29uc3RyYWludCxcbiAgICBWaW9sYXRpb24sXG59IGZyb20gJy4vbW9kZWwnO1xuaW1wb3J0IHtcbiAgICB2YWxpZGF0ZVN0cnVjdHVyZSxcbn0gZnJvbSAnLi9zdHJ1Y3R1cmFsJztcbmltcG9ydCB7XG4gICAgVGFibGVUeXBlQmFzZSxcbn0gZnJvbSAnLi90YWJsZS10eXBlJztcbmltcG9ydCB7XG4gICAgY3JlYXRlVGFibGVUeXBlLFxufSBmcm9tICcuL3RhYmxlLXR5cGVzL3JlZ2lzdHJ5JztcbmltcG9ydCB7XG4gICAgTG9hZGVkU2NoZW1hLFxuICAgIFdvcmxkLFxufSBmcm9tICcuL3dvcmxkJztcblxuLyoqIFJlc3VsdCBvZiBsb2FkaW5nIGEgcm9vdDogdGhlIG1vZGVsIHBsdXMgYW55IGxvYWQtdGltZSB2aW9sYXRpb25zLiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2FkT3V0Y29tZSB7XG4gICAgLyoqIFRoZSBsb2FkZWQgbW9kZWwuICovXG4gICAgcmVhZG9ubHkgd29ybGQ6IFdvcmxkO1xuXG4gICAgLyoqIFBhcnNlLCBzdHJ1Y3R1cmFsLCBhbmQgbWlzc2luZy1kZXNjcmlwdGlvbiB2aW9sYXRpb25zLiAqL1xuICAgIHJlYWRvbmx5IHZpb2xhdGlvbnM6IFZpb2xhdGlvbltdO1xufVxuXG5mdW5jdGlvbiBhc1JlY29yZCh2YWx1ZTogdW5rbm93bik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICByZXR1cm4gdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyA/IHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IDoge307XG59XG5cbmZ1bmN0aW9uIGFzQXJyYXkodmFsdWU6IHVua25vd24pOiB1bmtub3duW10ge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW107XG59XG5cbmZ1bmN0aW9uIGFzU3RyaW5nKHZhbHVlOiB1bmtub3duKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHZhbHVlIDogJyc7XG59XG5cbmZ1bmN0aW9uIGFzQm9vbGVhbih2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJyA/IHZhbHVlIDogZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGFzT3B0aW9uYWxCb29sZWFuKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nID8gdmFsdWUgOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGFzT3B0aW9uYWxOdW1iZXIodmFsdWU6IHVua25vd24pOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInID8gdmFsdWUgOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGFzT3B0aW9uYWxTdHJpbmcodmFsdWU6IHVua25vd24pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gdmFsdWUgOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGFzU3RyaW5nQXJyYXkodmFsdWU6IHVua25vd24pOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodmFsdWUpLmZpbHRlcigoaXRlbSk6IGl0ZW0gaXMgc3RyaW5nID0+IHR5cGVvZiBpdGVtID09PSAnc3RyaW5nJyk7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUNvbHVtbnModmFsdWU6IHVua25vd24pOiBDb2x1bW5bXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodmFsdWUpLm1hcCgocmF3KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlY29yZCA9IGFzUmVjb3JkKHJhdyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuYW1lOiBhc1N0cmluZyhyZWNvcmQubmFtZSksXG4gICAgICAgICAgICB0eXBlOiBhc1N0cmluZyhyZWNvcmQudHlwZSksXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogYXNTdHJpbmcocmVjb3JkLmRlc2NyaXB0aW9uKSxcbiAgICAgICAgICAgIG51bGxhYmxlOiBhc09wdGlvbmFsQm9vbGVhbihyZWNvcmQubnVsbGFibGUpLFxuICAgICAgICAgICAgZ2VuZXJhdGVkOiBhc09wdGlvbmFsU3RyaW5nKHJlY29yZC5nZW5lcmF0ZWQpLFxuICAgICAgICAgICAgZXhwcmVzc2lvbjogYXNPcHRpb25hbFN0cmluZyhyZWNvcmQuZXhwcmVzc2lvbiksXG4gICAgICAgICAgICBleHByZXNzaW9uQ29sdW1uczogJ2V4cHJlc3Npb25Db2x1bW5zJyBpbiByZWNvcmQgPyBhc1N0cmluZ0FycmF5KHJlY29yZC5leHByZXNzaW9uQ29sdW1ucykgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBpZGVudGl0eTogYXNPcHRpb25hbFN0cmluZyhyZWNvcmQuaWRlbnRpdHkpLFxuICAgICAgICAgICAgZGVmYXVsdDogYXNPcHRpb25hbFN0cmluZyhyZWNvcmQuZGVmYXVsdCksXG4gICAgICAgICAgICBjb2xsYXRpb246IGFzT3B0aW9uYWxTdHJpbmcocmVjb3JkLmNvbGxhdGlvbiksXG4gICAgICAgICAgICBjb21wcmVzc2lvbjogYXNPcHRpb25hbFN0cmluZyhyZWNvcmQuY29tcHJlc3Npb24pLFxuICAgICAgICAgICAgc3RvcmFnZTogYXNPcHRpb25hbFN0cmluZyhyZWNvcmQuc3RvcmFnZSksXG4gICAgICAgIH07XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVBhcnRpdGlvbnModmFsdWU6IHVua25vd24pOiBQYXJ0aXRpb25bXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodmFsdWUpLm1hcCgocmF3KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlY29yZCA9IGFzUmVjb3JkKHJhdyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuYW1lOiBhc1N0cmluZyhyZWNvcmQubmFtZSksXG4gICAgICAgICAgICB0eXBlOiBhc1N0cmluZyhyZWNvcmQudHlwZSksXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogYXNTdHJpbmcocmVjb3JkLmRlc2NyaXB0aW9uKSxcbiAgICAgICAgfTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplU29ydE9yZGVyKHZhbHVlOiB1bmtub3duKTogU29ydEZpZWxkW10ge1xuICAgIHJldHVybiBhc0FycmF5KHZhbHVlKS5tYXAoKHJhdykgPT4ge1xuICAgICAgICBjb25zdCByZWNvcmQgPSBhc1JlY29yZChyYXcpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29sdW1uOiBhc1N0cmluZyhyZWNvcmQuY29sdW1uKSxcbiAgICAgICAgICAgIHRyYW5zZm9ybTogYXNPcHRpb25hbFN0cmluZyhyZWNvcmQudHJhbnNmb3JtKSxcbiAgICAgICAgICAgIGRpcmVjdGlvbjogYXNTdHJpbmcocmVjb3JkLmRpcmVjdGlvbiksXG4gICAgICAgICAgICBudWxsT3JkZXI6IGFzU3RyaW5nKHJlY29yZC5udWxsT3JkZXIpLFxuICAgICAgICB9O1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVJbmRleGVzKHZhbHVlOiB1bmtub3duKTogSW5kZXhbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodmFsdWUpLm1hcCgocmF3KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlY29yZCA9IGFzUmVjb3JkKHJhdyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuYW1lOiBhc1N0cmluZyhyZWNvcmQubmFtZSksXG4gICAgICAgICAgICBtZXRob2Q6IGFzU3RyaW5nKHJlY29yZC5tZXRob2QpLFxuICAgICAgICAgICAgdW5pcXVlOiBhc09wdGlvbmFsQm9vbGVhbihyZWNvcmQudW5pcXVlKSxcbiAgICAgICAgICAgIGNvbHVtbnM6IGFzQXJyYXkocmVjb3JkLmNvbHVtbnMpLm1hcCgocmF3Q29sdW1uKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29sdW1uUmVjb3JkID0gYXNSZWNvcmQocmF3Q29sdW1uKTtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBhc1N0cmluZyhjb2x1bW5SZWNvcmQubmFtZSksXG4gICAgICAgICAgICAgICAgICAgIHNvcnQ6IGFzT3B0aW9uYWxTdHJpbmcoY29sdW1uUmVjb3JkLnNvcnQpLFxuICAgICAgICAgICAgICAgICAgICBudWxsczogYXNPcHRpb25hbFN0cmluZyhjb2x1bW5SZWNvcmQubnVsbHMpLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGluY2x1ZGU6IGFzU3RyaW5nQXJyYXkocmVjb3JkLmluY2x1ZGUpLFxuICAgICAgICAgICAgd2hlcmU6IGFzT3B0aW9uYWxTdHJpbmcocmVjb3JkLndoZXJlKSxcbiAgICAgICAgfTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplVW5pcXVlQ29uc3RyYWludHModmFsdWU6IHVua25vd24pOiBVbmlxdWVDb25zdHJhaW50W10ge1xuICAgIHJldHVybiBhc0FycmF5KHZhbHVlKS5tYXAoKHJhdykgPT4ge1xuICAgICAgICBjb25zdCByZWNvcmQgPSBhc1JlY29yZChyYXcpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmFtZTogYXNTdHJpbmcocmVjb3JkLm5hbWUpLFxuICAgICAgICAgICAgY29sdW1uczogYXNTdHJpbmdBcnJheShyZWNvcmQuY29sdW1ucyksXG4gICAgICAgICAgICBudWxsc05vdERpc3RpbmN0OiBhc09wdGlvbmFsQm9vbGVhbihyZWNvcmQubnVsbHNOb3REaXN0aW5jdCksXG4gICAgICAgIH07XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUNoZWNrQ29uc3RyYWludHModmFsdWU6IHVua25vd24pOiBDaGVja0NvbnN0cmFpbnRbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodmFsdWUpLm1hcCgocmF3KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlY29yZCA9IGFzUmVjb3JkKHJhdyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuYW1lOiBhc1N0cmluZyhyZWNvcmQubmFtZSksXG4gICAgICAgICAgICBleHByZXNzaW9uOiBhc1N0cmluZyhyZWNvcmQuZXhwcmVzc2lvbiksXG4gICAgICAgICAgICBjb2x1bW5zOiBhc1N0cmluZ0FycmF5KHJlY29yZC5jb2x1bW5zKSxcbiAgICAgICAgfTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplRXhjbHVzaW9uQ29uc3RyYWludHModmFsdWU6IHVua25vd24pOiBFeGNsdXNpb25Db25zdHJhaW50W10ge1xuICAgIHJldHVybiBhc0FycmF5KHZhbHVlKS5tYXAoKHJhdykgPT4ge1xuICAgICAgICBjb25zdCByZWNvcmQgPSBhc1JlY29yZChyYXcpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmFtZTogYXNTdHJpbmcocmVjb3JkLm5hbWUpLFxuICAgICAgICAgICAgdXNpbmc6IGFzU3RyaW5nKHJlY29yZC51c2luZyksXG4gICAgICAgICAgICBlbGVtZW50czogYXNBcnJheShyZWNvcmQuZWxlbWVudHMpLm1hcCgocmF3RWxlbWVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRSZWNvcmQgPSBhc1JlY29yZChyYXdFbGVtZW50KTtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW46IGFzU3RyaW5nKGVsZW1lbnRSZWNvcmQuY29sdW1uKSxcbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6IGFzU3RyaW5nKGVsZW1lbnRSZWNvcmQub3BlcmF0b3IpLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplQnVja2V0aW5nKHZhbHVlOiB1bmtub3duKTogQnVja2V0aW5nIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCByZWNvcmQgPSBhc1JlY29yZCh2YWx1ZSk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgY29sdW1uczogYXNTdHJpbmdBcnJheShyZWNvcmQuY29sdW1ucyksXG4gICAgICAgIGJ1Y2tldENvdW50OiB0eXBlb2YgcmVjb3JkLmJ1Y2tldENvdW50ID09PSAnbnVtYmVyJyA/IHJlY29yZC5idWNrZXRDb3VudCA6IDAsXG4gICAgICAgIHNvcnRlZEJ5OiBhc0FycmF5KHJlY29yZC5zb3J0ZWRCeSkubWFwKChyYXcpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNvcnRSZWNvcmQgPSBhc1JlY29yZChyYXcpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBjb2x1bW46IGFzU3RyaW5nKHNvcnRSZWNvcmQuY29sdW1uKSxcbiAgICAgICAgICAgICAgICBkaXJlY3Rpb246IGFzU3RyaW5nKHNvcnRSZWNvcmQuZGlyZWN0aW9uKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pLFxuICAgIH07XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVNrZXdlZEJ5KHZhbHVlOiB1bmtub3duKTogU2tld2VkQnkgfCB1bmRlZmluZWQge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IHJlY29yZCA9IGFzUmVjb3JkKHZhbHVlKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBjb2x1bW5zOiBhc1N0cmluZ0FycmF5KHJlY29yZC5jb2x1bW5zKSxcbiAgICAgICAgb246IGFzQXJyYXkocmVjb3JkLm9uKS5tYXAoKHR1cGxlKSA9PiBhc1N0cmluZ0FycmF5KHR1cGxlKSksXG4gICAgICAgIHN0b3JlZEFzRGlyZWN0b3JpZXM6IGFzT3B0aW9uYWxCb29sZWFuKHJlY29yZC5zdG9yZWRBc0RpcmVjdG9yaWVzKSxcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVIaXZlU3RvcmFnZSh2YWx1ZTogdW5rbm93bik6IEhpdmVTdG9yYWdlIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCByZWNvcmQgPSBhc1JlY29yZCh2YWx1ZSk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgc3RvcmVkQXM6IGFzT3B0aW9uYWxTdHJpbmcocmVjb3JkLnN0b3JlZEFzKSxcbiAgICAgICAgc2VyZGVQcm9wZXJ0aWVzOiBub3JtYWxpemVTdHJpbmdNYXAocmVjb3JkLnNlcmRlUHJvcGVydGllcyksXG4gICAgfTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplU3RyaW5nTWFwKHZhbHVlOiB1bmtub3duKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gICAgY29uc3QgcmVjb3JkID0gYXNSZWNvcmQodmFsdWUpO1xuICAgIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICAgIGZvciAoY29uc3QgW1xuICAgICAgICBrZXksXG4gICAgICAgIHJhdyxcbiAgICBdIG9mIE9iamVjdC5lbnRyaWVzKHJlY29yZCkpIHtcbiAgICAgICAgaWYgKHR5cGVvZiByYXcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXN1bHRba2V5XSA9IHJhdztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVGb3JlaWduS2V5cyh2YWx1ZTogdW5rbm93bik6IEZvcmVpZ25LZXlbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodmFsdWUpLm1hcCgocmF3KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlY29yZCA9IGFzUmVjb3JkKHJhdyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzb3VyY2VUYWJsZTogYXNTdHJpbmcocmVjb3JkLnNvdXJjZVRhYmxlKSxcbiAgICAgICAgICAgIHNvdXJjZUNvbHVtbjogYXNTdHJpbmcocmVjb3JkLnNvdXJjZUNvbHVtbiksXG4gICAgICAgICAgICBsb2NhbENvbHVtbjogYXNTdHJpbmcocmVjb3JkLmxvY2FsQ29sdW1uKSxcbiAgICAgICAgICAgIGFsbG93TnVsbHM6IGFzQm9vbGVhbihyZWNvcmQuYWxsb3dOdWxscyksXG4gICAgICAgIH07XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVRhYmxlRGVmaW5pdGlvbihyYXc6IHVua25vd24pOiBUYWJsZURlZmluaXRpb24ge1xuICAgIGNvbnN0IHJlY29yZCA9IGFzUmVjb3JkKHJhdyk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgc3BlY1ZlcnNpb246IGFzU3RyaW5nKHJlY29yZC5zcGVjVmVyc2lvbiksXG4gICAgICAgIGRlc2NyaXB0aW9uOiBhc1N0cmluZyhyZWNvcmQuZGVzY3JpcHRpb24pLFxuICAgICAgICB0YWJsZVR5cGU6IGFzU3RyaW5nKHJlY29yZC50YWJsZVR5cGUpLFxuICAgICAgICBpc1Jhd0RhdGE6IGFzQm9vbGVhbihyZWNvcmQuaXNSYXdEYXRhKSxcbiAgICAgICAgZm9ybWF0VmVyc2lvbjogYXNPcHRpb25hbE51bWJlcihyZWNvcmQuZm9ybWF0VmVyc2lvbiksXG4gICAgICAgIGNvbHVtbnM6IG5vcm1hbGl6ZUNvbHVtbnMocmVjb3JkLmNvbHVtbnMpLFxuICAgICAgICBwcmltYXJ5S2V5OiBhc1N0cmluZ0FycmF5KHJlY29yZC5wcmltYXJ5S2V5KSxcbiAgICAgICAgcGFydGl0aW9uczogbm9ybWFsaXplUGFydGl0aW9ucyhyZWNvcmQucGFydGl0aW9ucyksXG4gICAgICAgIHNvcnRPcmRlcjogbm9ybWFsaXplU29ydE9yZGVyKHJlY29yZC5zb3J0T3JkZXIpLFxuICAgICAgICBpZGVudGlmaWVyRmllbGRzOiBhc1N0cmluZ0FycmF5KHJlY29yZC5pZGVudGlmaWVyRmllbGRzKSxcbiAgICAgICAgaW5kZXhlczogbm9ybWFsaXplSW5kZXhlcyhyZWNvcmQuaW5kZXhlcyksXG4gICAgICAgIHVuaXF1ZUNvbnN0cmFpbnRzOiBub3JtYWxpemVVbmlxdWVDb25zdHJhaW50cyhyZWNvcmQudW5pcXVlQ29uc3RyYWludHMpLFxuICAgICAgICBjaGVja0NvbnN0cmFpbnRzOiBub3JtYWxpemVDaGVja0NvbnN0cmFpbnRzKHJlY29yZC5jaGVja0NvbnN0cmFpbnRzKSxcbiAgICAgICAgZXhjbHVzaW9uQ29uc3RyYWludHM6IG5vcm1hbGl6ZUV4Y2x1c2lvbkNvbnN0cmFpbnRzKHJlY29yZC5leGNsdXNpb25Db25zdHJhaW50cyksXG4gICAgICAgIGJ1Y2tldGluZzogbm9ybWFsaXplQnVja2V0aW5nKHJlY29yZC5idWNrZXRpbmcpLFxuICAgICAgICBza2V3ZWRCeTogbm9ybWFsaXplU2tld2VkQnkocmVjb3JkLnNrZXdlZEJ5KSxcbiAgICAgICAgc3RvcmFnZTogbm9ybWFsaXplSGl2ZVN0b3JhZ2UocmVjb3JkLnN0b3JhZ2UpLFxuICAgICAgICB0YWJsZVByb3BlcnRpZXM6IG5vcm1hbGl6ZVN0cmluZ01hcChyZWNvcmQudGFibGVQcm9wZXJ0aWVzKSxcbiAgICAgICAgZGVwZW5kc09uOiBhc1N0cmluZ0FycmF5KHJlY29yZC5kZXBlbmRzT24pLFxuICAgICAgICBmb3JlaWduS2V5czogbm9ybWFsaXplRm9yZWlnbktleXMocmVjb3JkLmZvcmVpZ25LZXlzKSxcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVTY2hlbWFEZXNjcmlwdGlvbihyYXc6IHVua25vd24pOiBTY2hlbWFEZXNjcmlwdGlvbiB7XG4gICAgY29uc3QgcmVjb3JkID0gYXNSZWNvcmQocmF3KTtcbiAgICByZXR1cm4ge1xuICAgICAgICBzcGVjVmVyc2lvbjogYXNTdHJpbmcocmVjb3JkLnNwZWNWZXJzaW9uKSxcbiAgICAgICAgZGVzY3JpcHRpb246IGFzU3RyaW5nKHJlY29yZC5kZXNjcmlwdGlvbiksXG4gICAgfTtcbn1cblxuLy8vIFNjaGVtYSBhbmQgdGFibGUgbmFtZXMgbXVzdCBiZSBsb3dlcmNhc2Ugc25ha2VfY2FzZSBzbyB0aGV5IGNhbiBiZSByZWZlcmVuY2VkXG4vLy8gZnJvbSBgZGVwZW5kc09uYCBhbmQgZm9yZWlnbiBrZXlzLCB3aG9zZSBwYXR0ZXJucyByZXF1aXJlIHRoZSBzYW1lIHNoYXBlLlxuY29uc3QgTkFNRV9SRSA9IC9eW2EtejAtOV9dKyQvO1xuXG4vKipcbiAqIExvYWQgYSBkYXRhc2V0IHJvb3QgaW50byBhIGBXb3JsZGAuXG4gKlxuICogQHBhcmFtIHJvb3REaXIgQWJzb2x1dGUgb3IgcmVsYXRpdmUgcGF0aCB0byB0aGUgZGF0YXNldCByb290LlxuICogQHJldHVybnMgVGhlIGxvYWRlZCB3b3JsZCBwbHVzIGxvYWQtdGltZSB2aW9sYXRpb25zLlxuICogQHRocm93cyBFcnJvciBXaGVuIGByb290RGlyYCBpcyBub3QgYW4gZXhpc3RpbmcgZGlyZWN0b3J5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZFJvb3Qocm9vdERpcjogc3RyaW5nKTogTG9hZE91dGNvbWUge1xuICAgIGNvbnN0IGFic29sdXRlUm9vdCA9IHBhdGgucmVzb2x2ZShyb290RGlyKTtcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMoYWJzb2x1dGVSb290KSB8fCAhZnMuc3RhdFN5bmMoYWJzb2x1dGVSb290KS5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgZGF0YXNldCByb290IGlzIG5vdCBhIGRpcmVjdG9yeTogJHthYnNvbHV0ZVJvb3R9YCk7XG4gICAgfVxuXG4gICAgY29uc3QgdmlvbGF0aW9uczogVmlvbGF0aW9uW10gPSBbXTtcbiAgICBjb25zdCBzY2hlbWFzID0gbmV3IE1hcDxzdHJpbmcsIExvYWRlZFNjaGVtYT4oKTtcbiAgICBjb25zdCB0YWJsZXMgPSBuZXcgTWFwPHN0cmluZywgVGFibGVUeXBlQmFzZT4oKTtcblxuICAgIGNvbnN0IHNjaGVtYURpcnMgPSBmcy5yZWFkZGlyU3luYyhhYnNvbHV0ZVJvb3QsIHtcbiAgICAgICAgd2l0aEZpbGVUeXBlczogdHJ1ZSxcbiAgICB9KS5maWx0ZXIoKGVudHJ5KSA9PiBlbnRyeS5pc0RpcmVjdG9yeSgpICYmICFlbnRyeS5uYW1lLnN0YXJ0c1dpdGgoJy4nKSlcbiAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSkpO1xuXG4gICAgZm9yIChjb25zdCBzY2hlbWFEaXIgb2Ygc2NoZW1hRGlycykge1xuICAgICAgICBjb25zdCBzY2hlbWFOYW1lID0gc2NoZW1hRGlyLm5hbWU7XG4gICAgICAgIGNvbnN0IGRpclBhdGggPSBwYXRoLmpvaW4oYWJzb2x1dGVSb290LCBzY2hlbWFOYW1lKTtcblxuICAgICAgICBpZiAoIU5BTUVfUkUudGVzdChzY2hlbWFOYW1lKSkge1xuICAgICAgICAgICAgdmlvbGF0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICBjb2RlOiAnU0NIRU1BX05BTUVfVkFMSUQnLFxuICAgICAgICAgICAgICAgIHNjaGVtYTogc2NoZW1hTmFtZSxcbiAgICAgICAgICAgICAgICBwYXRoOiBkaXJQYXRoLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBzY2hlbWEgbmFtZSBcIiR7c2NoZW1hTmFtZX1cIiBtdXN0IGJlIGxvd2VyY2FzZSBzbmFrZV9jYXNlIChtYXRjaGluZyAke05BTUVfUkV9KWAsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRlc2NGaWxlTmFtZSA9IGAke3NjaGVtYU5hbWV9Lmpzb25gO1xuICAgICAgICBjb25zdCBqc29uRmlsZXMgPSBmcy5yZWFkZGlyU3luYyhkaXJQYXRoKVxuICAgICAgICAgICAgLmZpbHRlcigoZmlsZSkgPT4gZmlsZS5lbmRzV2l0aCgnLmpzb24nKSlcbiAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLmxvY2FsZUNvbXBhcmUoYikpO1xuXG4gICAgICAgIGxldCBkZXNjcmlwdGlvbjogU2NoZW1hRGVzY3JpcHRpb24gfCBudWxsID0gbnVsbDtcbiAgICAgICAgY29uc3QgbG9hZGVkVGFibGVzOiBUYWJsZVR5cGVCYXNlW10gPSBbXTtcblxuICAgICAgICBmb3IgKGNvbnN0IGZpbGUgb2YganNvbkZpbGVzKSB7XG4gICAgICAgICAgICBjb25zdCBmaWxlUGF0aCA9IHBhdGguam9pbihkaXJQYXRoLCBmaWxlKTtcbiAgICAgICAgICAgIGNvbnN0IHRleHQgPSBmcy5yZWFkRmlsZVN5bmMoZmlsZVBhdGgsICd1dGYtOCcpO1xuXG4gICAgICAgICAgICBsZXQgcGFyc2VkOiB1bmtub3duO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBwYXJzZWQgPSBKU09OLnBhcnNlKHRleHQpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICB2aW9sYXRpb25zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgY29kZTogJ0ZJTEVfUEFSU0VfRVJST1InLFxuICAgICAgICAgICAgICAgICAgICBzY2hlbWE6IHNjaGVtYU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IGZpbGVQYXRoLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgaW52YWxpZCBKU09OOiAkeyhlcnJvciBhcyBFcnJvcikubWVzc2FnZX1gLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZmlsZSA9PT0gZGVzY0ZpbGVOYW1lKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0dXJhbCA9IHZhbGlkYXRlU3RydWN0dXJlKCdzY2hlbWEnLCBwYXJzZWQpO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgc3RydWN0dXJhbEVycm9yIG9mIHN0cnVjdHVyYWwuZXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6ICdTQ0hFTUFfVkFMSURBVElPTicsXG4gICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWE6IHNjaGVtYU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogc3RydWN0dXJhbEVycm9yLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGF0aDogZmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBzdHJ1Y3R1cmFsRXJyb3IubWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gbm9ybWFsaXplU2NoZW1hRGVzY3JpcHRpb24ocGFyc2VkKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgdGFibGVOYW1lID0gZmlsZS5zbGljZSgwLCAtJy5qc29uJy5sZW5ndGgpO1xuICAgICAgICAgICAgY29uc3QgcXVhbGlmaWVkTmFtZSA9IGAke3NjaGVtYU5hbWV9LiR7dGFibGVOYW1lfWA7XG5cbiAgICAgICAgICAgIGlmICghTkFNRV9SRS50ZXN0KHRhYmxlTmFtZSkpIHtcbiAgICAgICAgICAgICAgICB2aW9sYXRpb25zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgY29kZTogJ1RBQkxFX05BTUVfVkFMSUQnLFxuICAgICAgICAgICAgICAgICAgICBzY2hlbWE6IHNjaGVtYU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHRhYmxlOiB0YWJsZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IGZpbGVQYXRoLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgdGFibGUgbmFtZSBcIiR7dGFibGVOYW1lfVwiIG11c3QgYmUgbG93ZXJjYXNlIHNuYWtlX2Nhc2UgKG1hdGNoaW5nICR7TkFNRV9SRX0pYCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qgc3RydWN0dXJhbCA9IHZhbGlkYXRlU3RydWN0dXJlKCd0YWJsZScsIHBhcnNlZCk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHN0cnVjdHVyYWxFcnJvciBvZiBzdHJ1Y3R1cmFsLmVycm9ycykge1xuICAgICAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICBjb2RlOiAnU0NIRU1BX1ZBTElEQVRJT04nLFxuICAgICAgICAgICAgICAgICAgICBzY2hlbWE6IHNjaGVtYU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHRhYmxlOiB0YWJsZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkOiBzdHJ1Y3R1cmFsRXJyb3IuZmllbGQsXG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IGZpbGVQYXRoLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBzdHJ1Y3R1cmFsRXJyb3IubWVzc2FnZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbG9hZGVkVGFibGUgPSBjcmVhdGVUYWJsZVR5cGUoe1xuICAgICAgICAgICAgICAgIHNjaGVtYTogc2NoZW1hTmFtZSxcbiAgICAgICAgICAgICAgICBuYW1lOiB0YWJsZU5hbWUsXG4gICAgICAgICAgICAgICAgcXVhbGlmaWVkTmFtZSxcbiAgICAgICAgICAgICAgICBmaWxlUGF0aCxcbiAgICAgICAgICAgICAgICBzdHJ1Y3R1cmFsbHlWYWxpZDogc3RydWN0dXJhbC52YWxpZCxcbiAgICAgICAgICAgICAgICBkZWZpbml0aW9uOiBub3JtYWxpemVUYWJsZURlZmluaXRpb24ocGFyc2VkKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbG9hZGVkVGFibGVzLnB1c2gobG9hZGVkVGFibGUpO1xuICAgICAgICAgICAgdGFibGVzLnNldChxdWFsaWZpZWROYW1lLCBsb2FkZWRUYWJsZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGVzY3JpcHRpb24gPT09IG51bGwpIHtcbiAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgY29kZTogJ1NDSEVNQV9ERVNDX1BSRVNFTlQnLFxuICAgICAgICAgICAgICAgIHNjaGVtYTogc2NoZW1hTmFtZSxcbiAgICAgICAgICAgICAgICBwYXRoOiBwYXRoLmpvaW4oZGlyUGF0aCwgZGVzY0ZpbGVOYW1lKSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBgc2NoZW1hIFwiJHtzY2hlbWFOYW1lfVwiIGlzIG1pc3NpbmcgaXRzIGRlc2NyaXB0aW9uIGZpbGUgXCIke2Rlc2NGaWxlTmFtZX1cImAsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNjaGVtYXMuc2V0KHNjaGVtYU5hbWUsIHtcbiAgICAgICAgICAgIG5hbWU6IHNjaGVtYU5hbWUsXG4gICAgICAgICAgICBkaXJQYXRoLFxuICAgICAgICAgICAgZGVzY3JpcHRpb24sXG4gICAgICAgICAgICB0YWJsZXM6IGxvYWRlZFRhYmxlcyxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgd29ybGQ6IHtcbiAgICAgICAgICAgIHJvb3REaXI6IGFic29sdXRlUm9vdCxcbiAgICAgICAgICAgIHNjaGVtYXMsXG4gICAgICAgICAgICB0YWJsZXMsXG4gICAgICAgIH0sXG4gICAgICAgIHZpb2xhdGlvbnMsXG4gICAgfTtcbn1cbiJdfQ==
384
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xvYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7O0dBUUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFvU0gsNEJBd0lDO0FBMWFELHVDQUF5QjtBQUN6QiwyQ0FBNkI7QUFrQjdCLDZDQUVzQjtBQUl0QixxREFFZ0M7QUFlaEMsU0FBUyxRQUFRLENBQUMsS0FBYztJQUM1QixPQUFPLEtBQUssS0FBSyxJQUFJLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFnQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDL0YsQ0FBQztBQUVELFNBQVMsT0FBTyxDQUFDLEtBQWM7SUFDM0IsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM3QyxDQUFDO0FBRUQsU0FBUyxRQUFRLENBQUMsS0FBYztJQUM1QixPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDbEQsQ0FBQztBQUVELFNBQVMsU0FBUyxDQUFDLEtBQWM7SUFDN0IsT0FBTyxPQUFPLEtBQUssS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQ3RELENBQUM7QUFFRCxTQUFTLGlCQUFpQixDQUFDLEtBQWM7SUFDckMsT0FBTyxPQUFPLEtBQUssS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQzFELENBQUM7QUFFRCxTQUFTLGdCQUFnQixDQUFDLEtBQWM7SUFDcEMsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMs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QUNQLENBQUM7SUFFRCxPQUFPO1FBQ0gsS0FBSyxFQUFFO1lBQ0gsT0FBTyxFQUFFLFlBQVk7WUFDckIsT0FBTztZQUNQLE1BQU07U0FDVDtRQUNELFVBQVU7S0FDYixDQUFDO0FBQ04sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRmlsZXN5c3RlbSBsb2FkZXIuIFdhbGtzIGEgZGF0YXNldCByb290LCBwYXJzZXMgZWFjaCBKU09OIGZpbGUsIHJ1bnMgTGF5ZXIgMVxuICogc3RydWN0dXJhbCB2YWxpZGF0aW9uLCBhbmQgbm9ybWFsaXplcyBldmVyeXRoaW5nIGludG8gYSBgV29ybGRgIG9mXG4gKiBjb25jcmV0ZSBgVGFibGVUeXBlQmFzZWAgaW5zdGFuY2VzIHRoYXQgdGhlIHNlbWFudGljIHJ1bGVzIG9wZXJhdGUgb24uXG4gKlxuICogUGFyc2UgZXJyb3JzLCBzdHJ1Y3R1cmFsIGVycm9ycywgYW5kIGEgbWlzc2luZyBzY2hlbWEtZGVzY3JpcHRpb24gZmlsZSBhcmVcbiAqIHJlcG9ydGVkIGhlcmU7IGFsbCBjcm9zcy1maWVsZCAvIGNyb3NzLWZpbGUgbG9naWMgbGl2ZXMgaW4gdGhlIHRhYmxlLXR5cGVcbiAqIGNsYXNzZXMgKGAuL3RhYmxlLXR5cGUudHNgLCBgLi90YWJsZS10eXBlcy8qYCkuXG4gKi9cblxuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcblxuaW1wb3J0IHtcbiAgICBCdWNrZXRpbmcsXG4gICAgQ2hlY2tDb25zdHJhaW50LFxuICAgIENvbHVtbixcbiAgICBFeGNsdXNpb25Db25zdHJhaW50LFxuICAgIEZvcmVpZ25LZXksXG4gICAgSGl2ZVN0b3JhZ2UsXG4gICAgSW5kZXgsXG4gICAgUGFydGl0aW9uLFxuICAgIFNjaGVtYURlc2NyaXB0aW9uLFxuICAgIFNrZXdlZEJ5LFxuICAgIFNvcnRGaWVsZCxcbiAgICBUYWJsZURlZmluaXRpb24sXG4gICAgVW5pcXVlQ29uc3RyYWludCxcbiAgICBWaW9sYXRpb24sXG59IGZyb20gJy4vbW9kZWwnO1xuaW1wb3J0IHtcbiAgICB2YWxpZGF0ZVN0cnVjdHVyZSxcbn0gZnJvbSAnLi9zdHJ1Y3R1cmFsJztcbmltcG9ydCB7XG4gICAgVGFibGVUeXBlQmFzZSxcbn0gZnJvbSAnLi90YWJsZS10eXBlJztcbmltcG9ydCB7XG4gICAgY3JlYXRlVGFibGVUeXBlLFxufSBmcm9tICcuL3RhYmxlLXR5cGVzL3JlZ2lzdHJ5JztcbmltcG9ydCB7XG4gICAgTG9hZGVkU2NoZW1hLFxuICAgIFdvcmxkLFxufSBmcm9tICcuL3dvcmxkJztcblxuLyoqIFJlc3VsdCBvZiBsb2FkaW5nIGEgcm9vdDogdGhlIG1vZGVsIHBsdXMgYW55IGxvYWQtdGltZSB2aW9sYXRpb25zLiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2FkT3V0Y29tZSB7XG4gICAgLyoqIFRoZSBsb2FkZWQgbW9kZWwuICovXG4gICAgcmVhZG9ubHkgd29ybGQ6IFdvcmxkO1xuXG4gICAgLyoqIFBhcnNlLCBzdHJ1Y3R1cmFsLCBhbmQgbWlzc2luZy1kZXNjcmlwdGlvbiB2aW9sYXRpb25zLiAqL1xuICAgIHJlYWRvbmx5IHZpb2xhdGlvbnM6IFZpb2xhdGlvbltdO1xufVxuXG5mdW5jdGlvbiBhc1JlY29yZCh2YWx1ZTogdW5rbm93bik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICByZXR1cm4gdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyA/IHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IDoge307XG59XG5cbmZ1bmN0aW9uIGFzQXJyYXkodmFsdWU6IHVua25vd24pOiB1bmtub3duW10ge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW107XG59XG5cbmZ1bmN0aW9uIGFzU3RyaW5nKHZhbHVlOiB1bmtub3duKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHZhbHVlIDogJyc7XG59XG5cbmZ1bmN0aW9uIGFzQm9vbGVhbih2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJyA/IHZhbHVlIDogZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGFzT3B0aW9uYWxCb29sZWFuKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nID8gdmFsdWUgOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGFzT3B0aW9uYWxOdW1iZXIodmFsdWU6IHVua25vd24pOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInID8gdmFsdWUgOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGFzT3B0aW9uYWxTdHJpbmcodmFsdWU6IHVua25vd24pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gdmFsdWUgOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGFzU3RyaW5nQXJyYXkodmFsdWU6IHVua25vd24pOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodmFsdWUpLmZpbHRlcigoaXRlbSk6IGl0ZW0gaXMgc3RyaW5nID0+IHR5cGVvZiBpdGVtID09PSAnc3RyaW5nJyk7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUNvbHVtbnModmFsdWU6IHVua25vd24pOiBDb2x1bW5bXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodmFsdWUpLm1hcCgocmF3KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlY29yZCA9IGFzUmVjb3JkKHJhdyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuYW1lOiBhc1N0cmluZyhyZWNvcmQubmFtZSksXG4gICAgICAgICAgICB0eXBlOiBhc1N0cmluZyhyZWNvcmQudHlwZSksXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogYXNTdHJpbmcocmVjb3JkLmRlc2NyaXB0aW9uKSxcbiAgICAgICAgICAgIGlkOiBhc09wdGlvbmFsTnVtYmVyKHJlY29yZC5pZCksXG4gICAgICAgICAgICBudWxsYWJsZTogYXNPcHRpb25hbEJvb2xlYW4ocmVjb3JkLm51bGxhYmxlKSxcbiAgICAgICAgICAgIGdlbmVyYXRlZDogYXNPcHRpb25hbFN0cmluZyhyZWNvcmQuZ2VuZXJhdGVkKSxcbiAgICAgICAgICAgIGV4cHJlc3Npb246IGFzT3B0aW9uYWxTdHJpbmcocmVjb3JkLmV4cHJlc3Npb24pLFxuICAgICAgICAgICAgZXhwcmVzc2lvbkNvbHVtbnM6ICdleHByZXNzaW9uQ29sdW1ucycgaW4gcmVjb3JkID8gYXNTdHJpbmdBcnJheShyZWNvcmQuZXhwcmVzc2lvbkNvbHVtbnMpIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgaWRlbnRpdHk6IGFzT3B0aW9uYWxTdHJpbmcocmVjb3JkLmlkZW50aXR5KSxcbiAgICAgICAgICAgIGRlZmF1bHQ6IGFzT3B0aW9uYWxTdHJpbmcocmVjb3JkLmRlZmF1bHQpLFxuICAgICAgICAgICAgY29sbGF0aW9uOiBhc09wdGlvbmFsU3RyaW5nKHJlY29yZC5jb2xsYXRpb24pLFxuICAgICAgICAgICAgY29tcHJlc3Npb246IGFzT3B0aW9uYWxTdHJpbmcocmVjb3JkLmNvbXByZXNzaW9uKSxcbiAgICAgICAgICAgIHN0b3JhZ2U6IGFzT3B0aW9uYWxTdHJpbmcocmVjb3JkLnN0b3JhZ2UpLFxuICAgICAgICB9O1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVQYXJ0aXRpb25zKHZhbHVlOiB1bmtub3duKTogUGFydGl0aW9uW10ge1xuICAgIHJldHVybiBhc0FycmF5KHZhbHVlKS5tYXAoKHJhdykgPT4ge1xuICAgICAgICBjb25zdCByZWNvcmQgPSBhc1JlY29yZChyYXcpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmFtZTogYXNTdHJpbmcocmVjb3JkLm5hbWUpLFxuICAgICAgICAgICAgdHlwZTogYXNTdHJpbmcocmVjb3JkLnR5cGUpLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IGFzU3RyaW5nKHJlY29yZC5kZXNjcmlwdGlvbiksXG4gICAgICAgIH07XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVNvcnRPcmRlcih2YWx1ZTogdW5rbm93bik6IFNvcnRGaWVsZFtdIHtcbiAgICByZXR1cm4gYXNBcnJheSh2YWx1ZSkubWFwKChyYXcpID0+IHtcbiAgICAgICAgY29uc3QgcmVjb3JkID0gYXNSZWNvcmQocmF3KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbHVtbjogYXNTdHJpbmcocmVjb3JkLmNvbHVtbiksXG4gICAgICAgICAgICB0cmFuc2Zvcm06IGFzT3B0aW9uYWxTdHJpbmcocmVjb3JkLnRyYW5zZm9ybSksXG4gICAgICAgICAgICBkaXJlY3Rpb246IGFzU3RyaW5nKHJlY29yZC5kaXJlY3Rpb24pLFxuICAgICAgICAgICAgbnVsbE9yZGVyOiBhc1N0cmluZyhyZWNvcmQubnVsbE9yZGVyKSxcbiAgICAgICAgfTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplSW5kZXhlcyh2YWx1ZTogdW5rbm93bik6IEluZGV4W10ge1xuICAgIHJldHVybiBhc0FycmF5KHZhbHVlKS5tYXAoKHJhdykgPT4ge1xuICAgICAgICBjb25zdCByZWNvcmQgPSBhc1JlY29yZChyYXcpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmFtZTogYXNTdHJpbmcocmVjb3JkLm5hbWUpLFxuICAgICAgICAgICAgbWV0aG9kOiBhc1N0cmluZyhyZWNvcmQubWV0aG9kKSxcbiAgICAgICAgICAgIHVuaXF1ZTogYXNPcHRpb25hbEJvb2xlYW4ocmVjb3JkLnVuaXF1ZSksXG4gICAgICAgICAgICBjb2x1bW5zOiBhc0FycmF5KHJlY29yZC5jb2x1bW5zKS5tYXAoKHJhd0NvbHVtbikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtblJlY29yZCA9IGFzUmVjb3JkKHJhd0NvbHVtbik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogYXNTdHJpbmcoY29sdW1uUmVjb3JkLm5hbWUpLFxuICAgICAgICAgICAgICAgICAgICBzb3J0OiBhc09wdGlvbmFsU3RyaW5nKGNvbHVtblJlY29yZC5zb3J0KSxcbiAgICAgICAgICAgICAgICAgICAgbnVsbHM6IGFzT3B0aW9uYWxTdHJpbmcoY29sdW1uUmVjb3JkLm51bGxzKSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBpbmNsdWRlOiBhc1N0cmluZ0FycmF5KHJlY29yZC5pbmNsdWRlKSxcbiAgICAgICAgICAgIHdoZXJlOiBhc09wdGlvbmFsU3RyaW5nKHJlY29yZC53aGVyZSksXG4gICAgICAgIH07XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVVuaXF1ZUNvbnN0cmFpbnRzKHZhbHVlOiB1bmtub3duKTogVW5pcXVlQ29uc3RyYWludFtdIHtcbiAgICByZXR1cm4gYXNBcnJheSh2YWx1ZSkubWFwKChyYXcpID0+IHtcbiAgICAgICAgY29uc3QgcmVjb3JkID0gYXNSZWNvcmQocmF3KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5hbWU6IGFzU3RyaW5nKHJlY29yZC5uYW1lKSxcbiAgICAgICAgICAgIGNvbHVtbnM6IGFzU3RyaW5nQXJyYXkocmVjb3JkLmNvbHVtbnMpLFxuICAgICAgICAgICAgbnVsbHNOb3REaXN0aW5jdDogYXNPcHRpb25hbEJvb2xlYW4ocmVjb3JkLm51bGxzTm90RGlzdGluY3QpLFxuICAgICAgICB9O1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVDaGVja0NvbnN0cmFpbnRzKHZhbHVlOiB1bmtub3duKTogQ2hlY2tDb25zdHJhaW50W10ge1xuICAgIHJldHVybiBhc0FycmF5KHZhbHVlKS5tYXAoKHJhdykgPT4ge1xuICAgICAgICBjb25zdCByZWNvcmQgPSBhc1JlY29yZChyYXcpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmFtZTogYXNTdHJpbmcocmVjb3JkLm5hbWUpLFxuICAgICAgICAgICAgZXhwcmVzc2lvbjogYXNTdHJpbmcocmVjb3JkLmV4cHJlc3Npb24pLFxuICAgICAgICAgICAgY29sdW1uczogYXNTdHJpbmdBcnJheShyZWNvcmQuY29sdW1ucyksXG4gICAgICAgIH07XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUV4Y2x1c2lvbkNvbnN0cmFpbnRzKHZhbHVlOiB1bmtub3duKTogRXhjbHVzaW9uQ29uc3RyYWludFtdIHtcbiAgICByZXR1cm4gYXNBcnJheSh2YWx1ZSkubWFwKChyYXcpID0+IHtcbiAgICAgICAgY29uc3QgcmVjb3JkID0gYXNSZWNvcmQocmF3KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5hbWU6IGFzU3RyaW5nKHJlY29yZC5uYW1lKSxcbiAgICAgICAgICAgIHVzaW5nOiBhc1N0cmluZyhyZWNvcmQudXNpbmcpLFxuICAgICAgICAgICAgZWxlbWVudHM6IGFzQXJyYXkocmVjb3JkLmVsZW1lbnRzKS5tYXAoKHJhd0VsZW1lbnQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50UmVjb3JkID0gYXNSZWNvcmQocmF3RWxlbWVudCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uOiBhc1N0cmluZyhlbGVtZW50UmVjb3JkLmNvbHVtbiksXG4gICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBhc1N0cmluZyhlbGVtZW50UmVjb3JkLm9wZXJhdG9yKSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSksXG4gICAgICAgIH07XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUJ1Y2tldGluZyh2YWx1ZTogdW5rbm93bik6IEJ1Y2tldGluZyB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgcmVjb3JkID0gYXNSZWNvcmQodmFsdWUpO1xuICAgIHJldHVybiB7XG4gICAgICAgIGNvbHVtbnM6IGFzU3RyaW5nQXJyYXkocmVjb3JkLmNvbHVtbnMpLFxuICAgICAgICBidWNrZXRDb3VudDogdHlwZW9mIHJlY29yZC5idWNrZXRDb3VudCA9PT0gJ251bWJlcicgPyByZWNvcmQuYnVja2V0Q291bnQgOiAwLFxuICAgICAgICBzb3J0ZWRCeTogYXNBcnJheShyZWNvcmQuc29ydGVkQnkpLm1hcCgocmF3KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzb3J0UmVjb3JkID0gYXNSZWNvcmQocmF3KTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgY29sdW1uOiBhc1N0cmluZyhzb3J0UmVjb3JkLmNvbHVtbiksXG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uOiBhc1N0cmluZyhzb3J0UmVjb3JkLmRpcmVjdGlvbiksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KSxcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVTa2V3ZWRCeSh2YWx1ZTogdW5rbm93bik6IFNrZXdlZEJ5IHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCByZWNvcmQgPSBhc1JlY29yZCh2YWx1ZSk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgY29sdW1uczogYXNTdHJpbmdBcnJheShyZWNvcmQuY29sdW1ucyksXG4gICAgICAgIG9uOiBhc0FycmF5KHJlY29yZC5vbikubWFwKCh0dXBsZSkgPT4gYXNTdHJpbmdBcnJheSh0dXBsZSkpLFxuICAgICAgICBzdG9yZWRBc0RpcmVjdG9yaWVzOiBhc09wdGlvbmFsQm9vbGVhbihyZWNvcmQuc3RvcmVkQXNEaXJlY3RvcmllcyksXG4gICAgfTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplSGl2ZVN0b3JhZ2UodmFsdWU6IHVua25vd24pOiBIaXZlU3RvcmFnZSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgcmVjb3JkID0gYXNSZWNvcmQodmFsdWUpO1xuICAgIHJldHVybiB7XG4gICAgICAgIHN0b3JlZEFzOiBhc09wdGlvbmFsU3RyaW5nKHJlY29yZC5zdG9yZWRBcyksXG4gICAgICAgIHNlcmRlUHJvcGVydGllczogbm9ybWFsaXplU3RyaW5nTWFwKHJlY29yZC5zZXJkZVByb3BlcnRpZXMpLFxuICAgIH07XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVN0cmluZ01hcCh2YWx1ZTogdW5rbm93bik6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICAgIGNvbnN0IHJlY29yZCA9IGFzUmVjb3JkKHZhbHVlKTtcbiAgICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtcbiAgICAgICAga2V5LFxuICAgICAgICByYXcsXG4gICAgXSBvZiBPYmplY3QuZW50cmllcyhyZWNvcmQpKSB7XG4gICAgICAgIGlmICh0eXBlb2YgcmF3ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmVzdWx0W2tleV0gPSByYXc7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplRm9yZWlnbktleXModmFsdWU6IHVua25vd24pOiBGb3JlaWduS2V5W10ge1xuICAgIHJldHVybiBhc0FycmF5KHZhbHVlKS5tYXAoKHJhdykgPT4ge1xuICAgICAgICBjb25zdCByZWNvcmQgPSBhc1JlY29yZChyYXcpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc291cmNlVGFibGU6IGFzU3RyaW5nKHJlY29yZC5zb3VyY2VUYWJsZSksXG4gICAgICAgICAgICBzb3VyY2VDb2x1bW46IGFzU3RyaW5nKHJlY29yZC5zb3VyY2VDb2x1bW4pLFxuICAgICAgICAgICAgbG9jYWxDb2x1bW46IGFzU3RyaW5nKHJlY29yZC5sb2NhbENvbHVtbiksXG4gICAgICAgICAgICBhbGxvd051bGxzOiBhc0Jvb2xlYW4ocmVjb3JkLmFsbG93TnVsbHMpLFxuICAgICAgICB9O1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVUYWJsZURlZmluaXRpb24ocmF3OiB1bmtub3duKTogVGFibGVEZWZpbml0aW9uIHtcbiAgICBjb25zdCByZWNvcmQgPSBhc1JlY29yZChyYXcpO1xuICAgIHJldHVybiB7XG4gICAgICAgIHNwZWNWZXJzaW9uOiBhc1N0cmluZyhyZWNvcmQuc3BlY1ZlcnNpb24pLFxuICAgICAgICBkZXNjcmlwdGlvbjogYXNTdHJpbmcocmVjb3JkLmRlc2NyaXB0aW9uKSxcbiAgICAgICAgdGFibGVUeXBlOiBhc1N0cmluZyhyZWNvcmQudGFibGVUeXBlKSxcbiAgICAgICAgaXNSYXdEYXRhOiBhc0Jvb2xlYW4ocmVjb3JkLmlzUmF3RGF0YSksXG4gICAgICAgIGZvcm1hdFZlcnNpb246IGFzT3B0aW9uYWxOdW1iZXIocmVjb3JkLmZvcm1hdFZlcnNpb24pLFxuICAgICAgICBjb2x1bW5zOiBub3JtYWxpemVDb2x1bW5zKHJlY29yZC5jb2x1bW5zKSxcbiAgICAgICAgcHJpbWFyeUtleTogYXNTdHJpbmdBcnJheShyZWNvcmQucHJpbWFyeUtleSksXG4gICAgICAgIHBhcnRpdGlvbnM6IG5vcm1hbGl6ZVBhcnRpdGlvbnMocmVjb3JkLnBhcnRpdGlvbnMpLFxuICAgICAgICBzb3J0T3JkZXI6IG5vcm1hbGl6ZVNvcnRPcmRlcihyZWNvcmQuc29ydE9yZGVyKSxcbiAgICAgICAgaWRlbnRpZmllckZpZWxkczogYXNTdHJpbmdBcnJheShyZWNvcmQuaWRlbnRpZmllckZpZWxkcyksXG4gICAgICAgIGluZGV4ZXM6IG5vcm1hbGl6ZUluZGV4ZXMocmVjb3JkLmluZGV4ZXMpLFxuICAgICAgICB1bmlxdWVDb25zdHJhaW50czogbm9ybWFsaXplVW5pcXVlQ29uc3RyYWludHMocmVjb3JkLnVuaXF1ZUNvbnN0cmFpbnRzKSxcbiAgICAgICAgY2hlY2tDb25zdHJhaW50czogbm9ybWFsaXplQ2hlY2tDb25zdHJhaW50cyhyZWNvcmQuY2hlY2tDb25zdHJhaW50cyksXG4gICAgICAgIGV4Y2x1c2lvbkNvbnN0cmFpbnRzOiBub3JtYWxpemVFeGNsdXNpb25Db25zdHJhaW50cyhyZWNvcmQuZXhjbHVzaW9uQ29uc3RyYWludHMpLFxuICAgICAgICBidWNrZXRpbmc6IG5vcm1hbGl6ZUJ1Y2tldGluZyhyZWNvcmQuYnVja2V0aW5nKSxcbiAgICAgICAgc2tld2VkQnk6IG5vcm1hbGl6ZVNrZXdlZEJ5KHJlY29yZC5za2V3ZWRCeSksXG4gICAgICAgIHN0b3JhZ2U6IG5vcm1hbGl6ZUhpdmVTdG9yYWdlKHJlY29yZC5zdG9yYWdlKSxcbiAgICAgICAgdGFibGVQcm9wZXJ0aWVzOiBub3JtYWxpemVTdHJpbmdNYXAocmVjb3JkLnRhYmxlUHJvcGVydGllcyksXG4gICAgICAgIGRlcGVuZHNPbjogYXNTdHJpbmdBcnJheShyZWNvcmQuZGVwZW5kc09uKSxcbiAgICAgICAgZm9yZWlnbktleXM6IG5vcm1hbGl6ZUZvcmVpZ25LZXlzKHJlY29yZC5mb3JlaWduS2V5cyksXG4gICAgfTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplU2NoZW1hRGVzY3JpcHRpb24ocmF3OiB1bmtub3duKTogU2NoZW1hRGVzY3JpcHRpb24ge1xuICAgIGNvbnN0IHJlY29yZCA9IGFzUmVjb3JkKHJhdyk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgc3BlY1ZlcnNpb246IGFzU3RyaW5nKHJlY29yZC5zcGVjVmVyc2lvbiksXG4gICAgICAgIGRlc2NyaXB0aW9uOiBhc1N0cmluZyhyZWNvcmQuZGVzY3JpcHRpb24pLFxuICAgIH07XG59XG5cbi8vLyBTY2hlbWEgYW5kIHRhYmxlIG5hbWVzIG11c3QgYmUgbG93ZXJjYXNlIHNuYWtlX2Nhc2Ugc28gdGhleSBjYW4gYmUgcmVmZXJlbmNlZFxuLy8vIGZyb20gYGRlcGVuZHNPbmAgYW5kIGZvcmVpZ24ga2V5cywgd2hvc2UgcGF0dGVybnMgcmVxdWlyZSB0aGUgc2FtZSBzaGFwZS5cbmNvbnN0IE5BTUVfUkUgPSAvXlthLXowLTlfXSskLztcblxuLyoqXG4gKiBMb2FkIGEgZGF0YXNldCByb290IGludG8gYSBgV29ybGRgLlxuICpcbiAqIEBwYXJhbSByb290RGlyIEFic29sdXRlIG9yIHJlbGF0aXZlIHBhdGggdG8gdGhlIGRhdGFzZXQgcm9vdC5cbiAqIEByZXR1cm5zIFRoZSBsb2FkZWQgd29ybGQgcGx1cyBsb2FkLXRpbWUgdmlvbGF0aW9ucy5cbiAqIEB0aHJvd3MgRXJyb3IgV2hlbiBgcm9vdERpcmAgaXMgbm90IGFuIGV4aXN0aW5nIGRpcmVjdG9yeS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRSb290KHJvb3REaXI6IHN0cmluZyk6IExvYWRPdXRjb21lIHtcbiAgICBjb25zdCBhYnNvbHV0ZVJvb3QgPSBwYXRoLnJlc29sdmUocm9vdERpcik7XG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKGFic29sdXRlUm9vdCkgfHwgIWZzLnN0YXRTeW5jKGFic29sdXRlUm9vdCkuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGRhdGFzZXQgcm9vdCBpcyBub3QgYSBkaXJlY3Rvcnk6ICR7YWJzb2x1dGVSb290fWApO1xuICAgIH1cblxuICAgIGNvbnN0IHZpb2xhdGlvbnM6IFZpb2xhdGlvbltdID0gW107XG4gICAgY29uc3Qgc2NoZW1hcyA9IG5ldyBNYXA8c3RyaW5nLCBMb2FkZWRTY2hlbWE+KCk7XG4gICAgY29uc3QgdGFibGVzID0gbmV3IE1hcDxzdHJpbmcsIFRhYmxlVHlwZUJhc2U+KCk7XG5cbiAgICBjb25zdCBzY2hlbWFEaXJzID0gZnMucmVhZGRpclN5bmMoYWJzb2x1dGVSb290LCB7XG4gICAgICAgIHdpdGhGaWxlVHlwZXM6IHRydWUsXG4gICAgfSkuZmlsdGVyKChlbnRyeSkgPT4gZW50cnkuaXNEaXJlY3RvcnkoKSAmJiAhZW50cnkubmFtZS5zdGFydHNXaXRoKCcuJykpXG4gICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpKTtcblxuICAgIGZvciAoY29uc3Qgc2NoZW1hRGlyIG9mIHNjaGVtYURpcnMpIHtcbiAgICAgICAgY29uc3Qgc2NoZW1hTmFtZSA9IHNjaGVtYURpci5uYW1lO1xuICAgICAgICBjb25zdCBkaXJQYXRoID0gcGF0aC5qb2luKGFic29sdXRlUm9vdCwgc2NoZW1hTmFtZSk7XG5cbiAgICAgICAgaWYgKCFOQU1FX1JFLnRlc3Qoc2NoZW1hTmFtZSkpIHtcbiAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgY29kZTogJ1NDSEVNQV9OQU1FX1ZBTElEJyxcbiAgICAgICAgICAgICAgICBzY2hlbWE6IHNjaGVtYU5hbWUsXG4gICAgICAgICAgICAgICAgcGF0aDogZGlyUGF0aCxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBgc2NoZW1hIG5hbWUgXCIke3NjaGVtYU5hbWV9XCIgbXVzdCBiZSBsb3dlcmNhc2Ugc25ha2VfY2FzZSAobWF0Y2hpbmcgJHtOQU1FX1JFfSlgLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkZXNjRmlsZU5hbWUgPSBgJHtzY2hlbWFOYW1lfS5qc29uYDtcbiAgICAgICAgY29uc3QganNvbkZpbGVzID0gZnMucmVhZGRpclN5bmMoZGlyUGF0aClcbiAgICAgICAgICAgIC5maWx0ZXIoKGZpbGUpID0+IGZpbGUuZW5kc1dpdGgoJy5qc29uJykpXG4gICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5sb2NhbGVDb21wYXJlKGIpKTtcblxuICAgICAgICBsZXQgZGVzY3JpcHRpb246IFNjaGVtYURlc2NyaXB0aW9uIHwgbnVsbCA9IG51bGw7XG4gICAgICAgIGNvbnN0IGxvYWRlZFRhYmxlczogVGFibGVUeXBlQmFzZVtdID0gW107XG5cbiAgICAgICAgZm9yIChjb25zdCBmaWxlIG9mIGpzb25GaWxlcykge1xuICAgICAgICAgICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4oZGlyUGF0aCwgZmlsZSk7XG4gICAgICAgICAgICBjb25zdCB0ZXh0ID0gZnMucmVhZEZpbGVTeW5jKGZpbGVQYXRoLCAndXRmLTgnKTtcblxuICAgICAgICAgICAgbGV0IHBhcnNlZDogdW5rbm93bjtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGFyc2VkID0gSlNPTi5wYXJzZSh0ZXh0KTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgdmlvbGF0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgIGNvZGU6ICdGSUxFX1BBUlNFX0VSUk9SJyxcbiAgICAgICAgICAgICAgICAgICAgc2NoZW1hOiBzY2hlbWFOYW1lLFxuICAgICAgICAgICAgICAgICAgICBwYXRoOiBmaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYGludmFsaWQgSlNPTjogJHsoZXJyb3IgYXMgRXJyb3IpLm1lc3NhZ2V9YCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGZpbGUgPT09IGRlc2NGaWxlTmFtZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdHVyYWwgPSB2YWxpZGF0ZVN0cnVjdHVyZSgnc2NoZW1hJywgcGFyc2VkKTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHN0cnVjdHVyYWxFcnJvciBvZiBzdHJ1Y3R1cmFsLmVycm9ycykge1xuICAgICAgICAgICAgICAgICAgICB2aW9sYXRpb25zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiAnU0NIRU1BX1ZBTElEQVRJT04nLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1hOiBzY2hlbWFOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IHN0cnVjdHVyYWxFcnJvci5maWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg6IGZpbGVQYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogc3RydWN0dXJhbEVycm9yLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9IG5vcm1hbGl6ZVNjaGVtYURlc2NyaXB0aW9uKHBhcnNlZCk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHRhYmxlTmFtZSA9IGZpbGUuc2xpY2UoMCwgLScuanNvbicubGVuZ3RoKTtcbiAgICAgICAgICAgIGNvbnN0IHF1YWxpZmllZE5hbWUgPSBgJHtzY2hlbWFOYW1lfS4ke3RhYmxlTmFtZX1gO1xuXG4gICAgICAgICAgICBpZiAoIU5BTUVfUkUudGVzdCh0YWJsZU5hbWUpKSB7XG4gICAgICAgICAgICAgICAgdmlvbGF0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgIGNvZGU6ICdUQUJMRV9OQU1FX1ZBTElEJyxcbiAgICAgICAgICAgICAgICAgICAgc2NoZW1hOiBzY2hlbWFOYW1lLFxuICAgICAgICAgICAgICAgICAgICB0YWJsZTogdGFibGVOYW1lLFxuICAgICAgICAgICAgICAgICAgICBwYXRoOiBmaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYHRhYmxlIG5hbWUgXCIke3RhYmxlTmFtZX1cIiBtdXN0IGJlIGxvd2VyY2FzZSBzbmFrZV9jYXNlIChtYXRjaGluZyAke05BTUVfUkV9KWAsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHN0cnVjdHVyYWwgPSB2YWxpZGF0ZVN0cnVjdHVyZSgndGFibGUnLCBwYXJzZWQpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBzdHJ1Y3R1cmFsRXJyb3Igb2Ygc3RydWN0dXJhbC5lcnJvcnMpIHtcbiAgICAgICAgICAgICAgICB2aW9sYXRpb25zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgY29kZTogJ1NDSEVNQV9WQUxJREFUSU9OJyxcbiAgICAgICAgICAgICAgICAgICAgc2NoZW1hOiBzY2hlbWFOYW1lLFxuICAgICAgICAgICAgICAgICAgICB0YWJsZTogdGFibGVOYW1lLFxuICAgICAgICAgICAgICAgICAgICBmaWVsZDogc3RydWN0dXJhbEVycm9yLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICBwYXRoOiBmaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogc3RydWN0dXJhbEVycm9yLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGxvYWRlZFRhYmxlID0gY3JlYXRlVGFibGVUeXBlKHtcbiAgICAgICAgICAgICAgICBzY2hlbWE6IHNjaGVtYU5hbWUsXG4gICAgICAgICAgICAgICAgbmFtZTogdGFibGVOYW1lLFxuICAgICAgICAgICAgICAgIHF1YWxpZmllZE5hbWUsXG4gICAgICAgICAgICAgICAgZmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgc3RydWN0dXJhbGx5VmFsaWQ6IHN0cnVjdHVyYWwudmFsaWQsXG4gICAgICAgICAgICAgICAgZGVmaW5pdGlvbjogbm9ybWFsaXplVGFibGVEZWZpbml0aW9uKHBhcnNlZCksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGxvYWRlZFRhYmxlcy5wdXNoKGxvYWRlZFRhYmxlKTtcbiAgICAgICAgICAgIHRhYmxlcy5zZXQocXVhbGlmaWVkTmFtZSwgbG9hZGVkVGFibGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRlc2NyaXB0aW9uID09PSBudWxsKSB7XG4gICAgICAgICAgICB2aW9sYXRpb25zLnB1c2goe1xuICAgICAgICAgICAgICAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgIGNvZGU6ICdTQ0hFTUFfREVTQ19QUkVTRU5UJyxcbiAgICAgICAgICAgICAgICBzY2hlbWE6IHNjaGVtYU5hbWUsXG4gICAgICAgICAgICAgICAgcGF0aDogcGF0aC5qb2luKGRpclBhdGgsIGRlc2NGaWxlTmFtZSksXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYHNjaGVtYSBcIiR7c2NoZW1hTmFtZX1cIiBpcyBtaXNzaW5nIGl0cyBkZXNjcmlwdGlvbiBmaWxlIFwiJHtkZXNjRmlsZU5hbWV9XCJgLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBzY2hlbWFzLnNldChzY2hlbWFOYW1lLCB7XG4gICAgICAgICAgICBuYW1lOiBzY2hlbWFOYW1lLFxuICAgICAgICAgICAgZGlyUGF0aCxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgdGFibGVzOiBsb2FkZWRUYWJsZXMsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIHdvcmxkOiB7XG4gICAgICAgICAgICByb290RGlyOiBhYnNvbHV0ZVJvb3QsXG4gICAgICAgICAgICBzY2hlbWFzLFxuICAgICAgICAgICAgdGFibGVzLFxuICAgICAgICB9LFxuICAgICAgICB2aW9sYXRpb25zLFxuICAgIH07XG59XG4iXX0=
@@ -10,7 +10,7 @@
10
10
  /** Table engine. Each value unlocks engine-specific semantic checks. */
11
11
  export declare enum TableType {
12
12
  HIVE_PARQUET = "hive_parquet",
13
- ICEBERG_PARQUET = "iceberg_parquet",
13
+ ICEBERG_PARQUET_V2 = "iceberg_parquet_v2",
14
14
  POSTGRES_18 = "postgres_18"
15
15
  }
16
16
  /** Every known `tableType` string, for membership checks. */
@@ -23,6 +23,14 @@ export interface Column {
23
23
  readonly type: string;
24
24
  /** Human description. */
25
25
  readonly description: string;
26
+ /**
27
+ * Iceberg field id used for schema evolution (Iceberg). Optional: when set,
28
+ * it pins the column to a stable id so renames keep the same id and dropped
29
+ * ids are retired forever, keeping old data files readable. Field ids are
30
+ * all-or-nothing per table; when present each must be a positive integer and
31
+ * unique within the table. Other engines ignore it.
32
+ */
33
+ readonly id?: number;
26
34
  /**
27
35
  * Whether the column may hold null. Optional: when omitted, nullability is
28
36
  * unspecified and the nullability cross-checks do not fire. `false` marks a
@@ -211,8 +219,9 @@ export interface TableDefinition {
211
219
  /** Whether this table is the top of the pipeline. */
212
220
  readonly isRawData: boolean;
213
221
  /**
214
- * Iceberg table format version (1, 2, or 3). Optional and engine-specific:
215
- * only the Iceberg engine validates it. Other engines ignore it.
222
+ * Iceberg table format version. Optional and engine-specific: only the
223
+ * Iceberg engine validates it, and on `iceberg_parquet_v2` it must be `2`
224
+ * when present. Other engines ignore it.
216
225
  */
217
226
  readonly formatVersion?: number;
218
227
  /** Data columns. */
package/dist/src/model.js CHANGED
@@ -14,13 +14,13 @@ exports.TABLE_TYPES = exports.TableType = void 0;
14
14
  var TableType;
15
15
  (function (TableType) {
16
16
  TableType["HIVE_PARQUET"] = "hive_parquet";
17
- TableType["ICEBERG_PARQUET"] = "iceberg_parquet";
17
+ TableType["ICEBERG_PARQUET_V2"] = "iceberg_parquet_v2";
18
18
  TableType["POSTGRES_18"] = "postgres_18";
19
19
  })(TableType || (exports.TableType = TableType = {}));
20
20
  /** Every known `tableType` string, for membership checks. */
21
21
  exports.TABLE_TYPES = [
22
22
  TableType.HIVE_PARQUET,
23
- TableType.ICEBERG_PARQUET,
23
+ TableType.ICEBERG_PARQUET_V2,
24
24
  TableType.POSTGRES_18,
25
25
  ];
26
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7OztHQVFHOzs7QUFFSCx3RUFBd0U7QUFDeEUsSUFBWSxTQUlYO0FBSkQsV0FBWSxTQUFTO0lBQ2pCLDBDQUE2QixDQUFBO0lBQzdCLGdEQUFtQyxDQUFBO0lBQ25DLHdDQUEyQixDQUFBO0FBQy9CLENBQUMsRUFKVyxTQUFTLHlCQUFULFNBQVMsUUFJcEI7QUFFRCw2REFBNkQ7QUFDaEQsUUFBQSxXQUFXLEdBQXNCO0lBQzFDLFNBQVMsQ0FBQyxZQUFZO0lBQ3RCLFNBQVMsQ0FBQyxlQUFlO0lBQ3pCLFNBQVMsQ0FBQyxXQUFXO0NBQ3hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcmUgZGF0YSBtb2RlbCBmb3IgdGhlIEZsZXhpYmxlIERhdGFzZXQgRGVmaW5pdGlvbiAoRkREKSBzdGFuZGFyZC5cbiAqXG4gKiBUaGVzZSBpbnRlcmZhY2VzIGRlc2NyaWJlIHRoZSAqcHVyZSBkYXRhKiBzaGFwZSBvZiBhIGRhdGFzZXQ6IGNvbHVtbnMsXG4gKiBwYXJ0aXRpb25zLCBmb3JlaWduIGtleXMsIHRhYmxlIGRlZmluaXRpb25zLCBhbmQgdGhlIHZpb2xhdGlvbnMgdGhlXG4gKiB2YWxpZGF0b3IgZW1pdHMuIFRoZSBsb2FkZWQgd29ybGQgKHNjaGVtYXMgKyB0YWJsZSBpbnN0YW5jZXMpIGFuZCB0aGVcbiAqIGFic3RyYWN0IHRhYmxlIGJhc2UgY2xhc3MgbGl2ZSBpbiBgLi93b3JsZGAgYW5kIGAuL3RhYmxlLXR5cGVgIHNvIHRoaXNcbiAqIG1vZHVsZSBzdGF5cyBhIGxlYWYgd2l0aCBubyBiZWhhdmlvci5cbiAqL1xuXG4vKiogVGFibGUgZW5naW5lLiBFYWNoIHZhbHVlIHVubG9ja3MgZW5naW5lLXNwZWNpZmljIHNlbWFudGljIGNoZWNrcy4gKi9cbmV4cG9ydCBlbnVtIFRhYmxlVHlwZSB7XG4gICAgSElWRV9QQVJRVUVUID0gJ2hpdmVfcGFycXVldCcsXG4gICAgSUNFQkVSR19QQVJRVUVUID0gJ2ljZWJlcmdfcGFycXVldCcsXG4gICAgUE9TVEdSRVNfMTggPSAncG9zdGdyZXNfMTgnLFxufVxuXG4vKiogRXZlcnkga25vd24gYHRhYmxlVHlwZWAgc3RyaW5nLCBmb3IgbWVtYmVyc2hpcCBjaGVja3MuICovXG5leHBvcnQgY29uc3QgVEFCTEVfVFlQRVM6IHJlYWRvbmx5IHN0cmluZ1tdID0gW1xuICAgIFRhYmxlVHlwZS5ISVZFX1BBUlFVRVQsXG4gICAgVGFibGVUeXBlLklDRUJFUkdfUEFSUVVFVCxcbiAgICBUYWJsZVR5cGUuUE9TVEdSRVNfMTgsXG5dO1xuXG4vKiogQSBzaW5nbGUgZGF0YSBjb2x1bW4uICovXG5leHBvcnQgaW50ZXJmYWNlIENvbHVtbiB7XG4gICAgLyoqIENvbHVtbiBuYW1lICh1bmlxdWUgd2l0aGluIGEgdGFibGUpLiAqL1xuICAgIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAgIC8qKiBFbmdpbmUtc3BlY2lmaWMgdHlwZSBzdHJpbmcgKGUuZy4gYGxvbmdgLCBgdmFyY2hhcigyNTUpYCkuICovXG4gICAgcmVhZG9ubHkgdHlwZTogc3RyaW5nO1xuXG4gICAgLyoqIEh1bWFuIGRlc2NyaXB0aW9uLiAqL1xuICAgIHJlYWRvbmx5IGRlc2NyaXB0aW9uOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSBjb2x1bW4gbWF5IGhvbGQgbnVsbC4gT3B0aW9uYWw6IHdoZW4gb21pdHRlZCwgbnVsbGFiaWxpdHkgaXNcbiAgICAgKiB1bnNwZWNpZmllZCBhbmQgdGhlIG51bGxhYmlsaXR5IGNyb3NzLWNoZWNrcyBkbyBub3QgZmlyZS4gYGZhbHNlYCBtYXJrcyBhXG4gICAgICogTk9UIE5VTEwgY29sdW1uIChJY2ViZXJnIGByZXF1aXJlZGApOyBgdHJ1ZWAgbWFya3MgYW4gZXhwbGljaXRseSBudWxsYWJsZVxuICAgICAqIGNvbHVtbi5cbiAgICAgKi9cbiAgICByZWFkb25seSBudWxsYWJsZT86IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBHZW5lcmF0ZWQtY29sdW1uIGtpbmQgKFBvc3RncmVzKTogYHN0b3JlZGAgb3IgYHZpcnR1YWxgLiBPcHRpb25hbDsgd2hlblxuICAgICAqIHNldCwgdGhlIGNvbHVtbiBpcyBjb21wdXRlZCBmcm9tIGBleHByZXNzaW9uQ29sdW1uc2AuXG4gICAgICovXG4gICAgcmVhZG9ubHkgZ2VuZXJhdGVkPzogc3RyaW5nO1xuXG4gICAgLyoqIE9wYXF1ZSBnZW5lcmF0aW9uIGV4cHJlc3Npb24gKFBvc3RncmVzIGdlbmVyYXRlZCBjb2x1bW4pLiAqL1xuICAgIHJlYWRvbmx5IGV4cHJlc3Npb24/OiBzdHJpbmc7XG5cbiAgICAvKiogQ29sdW1ucyB0aGUgZ2VuZXJhdGlvbiBgZXhwcmVzc2lvbmAgcmVmZXJlbmNlcyAoUG9zdGdyZXMpLiAqL1xuICAgIHJlYWRvbmx5IGV4cHJlc3Npb25Db2x1bW5zPzogc3RyaW5nW107XG5cbiAgICAvKipcbiAgICAgKiBJZGVudGl0eS1jb2x1bW4ga2luZCAoUG9zdGdyZXMpOiBgYWx3YXlzYCBvciBgYnlEZWZhdWx0YC4gT3B0aW9uYWw7IHdoZW5cbiAgICAgKiBzZXQsIHRoZSBjb2x1bW4gaXMgYEdFTkVSQVRFRCDigKYgQVMgSURFTlRJVFlgLlxuICAgICAqL1xuICAgIHJlYWRvbmx5IGlkZW50aXR5Pzogc3RyaW5nO1xuXG4gICAgLyoqIE9wYXF1ZSBjb2x1bW4gZGVmYXVsdCBleHByZXNzaW9uIChQb3N0Z3JlcykuICovXG4gICAgcmVhZG9ubHkgZGVmYXVsdD86IHN0cmluZztcblxuICAgIC8qKiBDb2x1bW4gY29sbGF0aW9uIG5hbWUgKFBvc3RncmVzKS4gT3BhcXVlOyBsZWdhbCBvbmx5IG9uIHRleHQgdHlwZXMuICovXG4gICAgcmVhZG9ubHkgY29sbGF0aW9uPzogc3RyaW5nO1xuXG4gICAgLyoqIFBlci1jb2x1bW4gVE9BU1QgY29tcHJlc3Npb24gKFBvc3RncmVzKTogYHBnbHpgIG9yIGBsejRgLiAqL1xuICAgIHJlYWRvbmx5IGNvbXByZXNzaW9uPzogc3RyaW5nO1xuXG4gICAgLyoqIFBlci1jb2x1bW4gc3RvcmFnZSBzdHJhdGVneSAoUG9zdGdyZXMpOiBgcGxhaW5gL2BleHRlcm5hbGAvYGV4dGVuZGVkYC9gbWFpbmAvYGRlZmF1bHRgLiAqL1xuICAgIHJlYWRvbmx5IHN0b3JhZ2U/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBwYXJ0aXRpb24gZW50cnkuIFRoZSBtZWFuaW5nIG9mIGBuYW1lYCBhbmQgYHR5cGVgIGlzIGVuZ2luZS1zcGVjaWZpYzogZm9yXG4gKiBIaXZlLCBgbmFtZWAgaXMgYSBuZXcgcGFydGl0aW9uIGNvbHVtbiBhbmQgYHR5cGVgIGlzIGEgbm9ybWFsIHR5cGU7IGZvclxuICogSWNlYmVyZywgYG5hbWVgIGlzIGEgc291cmNlIGRhdGEgY29sdW1uIGFuZCBgdHlwZWAgaXMgYSB0cmFuc2Zvcm07IGZvclxuICogUG9zdGdyZXMsIGBuYW1lYCBpcyBhbiBleGlzdGluZyBrZXkgY29sdW1uIGFuZCBgdHlwZWAgaXMgdGhlIHN0cmF0ZWd5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhcnRpdGlvbiB7XG4gICAgLyoqIEhpdmU6IG5ldyBwYXJ0aXRpb24gY29sdW1uIG5hbWUuIEljZWJlcmcgLyBQb3N0Z3JlczogZXhpc3RpbmcgZGF0YS9rZXkgY29sdW1uIG5hbWUuICovXG4gICAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gICAgLyoqIEhpdmU6IGEgbm9ybWFsIHR5cGUuIEljZWJlcmc6IGEgdHJhbnNmb3JtIChlLmcuIGBkYXlgLCBgYnVja2V0WzE2XWApLiBQb3N0Z3JlczogYSBzdHJhdGVneSAoYHJhbmdlYCAvIGBsaXN0YCAvIGBoYXNoYCkuICovXG4gICAgcmVhZG9ubHkgdHlwZTogc3RyaW5nO1xuXG4gICAgLyoqIEh1bWFuIGRlc2NyaXB0aW9uLiAqL1xuICAgIHJlYWRvbmx5IGRlc2NyaXB0aW9uOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBzaW5nbGUgc29ydCBmaWVsZCBpbiBhbiBJY2ViZXJnIHRhYmxlJ3Mgc29ydCBvcmRlci4gYGNvbHVtbmAgaXMgYSBkYXRhXG4gKiBjb2x1bW47IGB0cmFuc2Zvcm1gIGlzIGFuIG9wdGlvbmFsIEljZWJlcmcgdHJhbnNmb3JtIGFwcGxpZWQgYmVmb3JlIHNvcnRpbmdcbiAqIChkZWZhdWx0cyB0byBpZGVudGl0eSk7IGBkaXJlY3Rpb25gIGFuZCBgbnVsbE9yZGVyYCBzZXQgdGhlIG9yZGVyaW5nLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNvcnRGaWVsZCB7XG4gICAgLyoqIFNvdXJjZSBkYXRhIGNvbHVtbiB0byBzb3J0IGJ5LiAqL1xuICAgIHJlYWRvbmx5IGNvbHVtbjogc3RyaW5nO1xuXG4gICAgLyoqIE9wdGlvbmFsIEljZWJlcmcgdHJhbnNmb3JtIGFwcGxpZWQgYmVmb3JlIHNvcnRpbmcgKGUuZy4gYGRheWAsIGBidWNrZXRbMTZdYCkuICovXG4gICAgcmVhZG9ubHkgdHJhbnNmb3JtPzogc3RyaW5nO1xuXG4gICAgLyoqIFNvcnQgZGlyZWN0aW9uIChgYXNjYCBvciBgZGVzY2ApLiAqL1xuICAgIHJlYWRvbmx5IGRpcmVjdGlvbjogc3RyaW5nO1xuXG4gICAgLyoqIE51bGwgb3JkZXJpbmcgKGBudWxscy1maXJzdGAgb3IgYG51bGxzLWxhc3RgKS4gKi9cbiAgICByZWFkb25seSBudWxsT3JkZXI6IHN0cmluZztcbn1cblxuLyoqIEEgc2luZ2xlIGtleSBjb2x1bW4gd2l0aGluIGFuIGluZGV4LCB3aXRoIG9wdGlvbmFsIG9yZGVyaW5nIG1vZGlmaWVycy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5kZXhDb2x1bW4ge1xuICAgIC8qKiBJbmRleGVkIGNvbHVtbiBuYW1lLiAqL1xuICAgIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAgIC8qKiBPcHRpb25hbCBzb3J0IG9yZGVyIChgYXNjYCBvciBgZGVzY2ApLiAqL1xuICAgIHJlYWRvbmx5IHNvcnQ/OiBzdHJpbmc7XG5cbiAgICAvKiogT3B0aW9uYWwgbnVsbCBvcmRlcmluZyAoYGZpcnN0YCBvciBgbGFzdGApLiAqL1xuICAgIHJlYWRvbmx5IG51bGxzPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgc2Vjb25kYXJ5IGluZGV4IChlLmcuIFBvc3RncmVzKS4gYGNvbHVtbnNgIGFyZSB0aGUga2V5IGNvbHVtbnM7IGBpbmNsdWRlYFxuICogYXJlIG5vbi1rZXkgY292ZXJpbmcgY29sdW1uczsgYHdoZXJlYCBpcyBhbiBvcGFxdWUgcGFydGlhbC1pbmRleCBwcmVkaWNhdGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5kZXgge1xuICAgIC8qKiBJbmRleCBuYW1lICh1bmlxdWUgd2l0aGluIHRoZSB0YWJsZSkuICovXG4gICAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gICAgLyoqIEFjY2VzcyBtZXRob2QgKGUuZy4gYGJ0cmVlYCwgYGhhc2hgLCBgZ2luYCkuICovXG4gICAgcmVhZG9ubHkgbWV0aG9kOiBzdHJpbmc7XG5cbiAgICAvKiogV2hldGhlciB0aGUgaW5kZXggZW5mb3JjZXMgdW5pcXVlbmVzcy4gKi9cbiAgICByZWFkb25seSB1bmlxdWU/OiBib29sZWFuO1xuXG4gICAgLyoqIEtleSBjb2x1bW5zLiAqL1xuICAgIHJlYWRvbmx5IGNvbHVtbnM6IEluZGV4Q29sdW1uW107XG5cbiAgICAvKiogTm9uLWtleSBjb3ZlcmluZyBjb2x1bW5zLiAqL1xuICAgIHJlYWRvbmx5IGluY2x1ZGU6IHN0cmluZ1tdO1xuXG4gICAgLyoqIE9wdGlvbmFsIHBhcnRpYWwtaW5kZXggcHJlZGljYXRlIChvcGFxdWUpLiAqL1xuICAgIHJlYWRvbmx5IHdoZXJlPzogc3RyaW5nO1xufVxuXG4vKiogQSB0YWJsZS1sZXZlbCBVTklRVUUgY29uc3RyYWludCBvdmVyIG9uZSBvciBtb3JlIGNvbHVtbnMgKFBvc3RncmVzKS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVW5pcXVlQ29uc3RyYWludCB7XG4gICAgLyoqIENvbnN0cmFpbnQgbmFtZSAodW5pcXVlIHdpdGhpbiB0aGUgdGFibGUpLiAqL1xuICAgIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAgIC8qKiBDb2x1bW5zIHRoZSBjb25zdHJhaW50IHNwYW5zLiAqL1xuICAgIHJlYWRvbmx5IGNvbHVtbnM6IHN0cmluZ1tdO1xuXG4gICAgLyoqIFdoZXRoZXIgbnVsbHMgYXJlIHRyZWF0ZWQgYXMgbm90IGRpc3RpbmN0IChgTlVMTFMgTk9UIERJU1RJTkNUYCkuICovXG4gICAgcmVhZG9ubHkgbnVsbHNOb3REaXN0aW5jdD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQSBDSEVDSyBjb25zdHJhaW50IChQb3N0Z3JlcykuIGBleHByZXNzaW9uYCBpcyBhbiBvcGFxdWUgcHJlZGljYXRlOyBgY29sdW1uc2BcbiAqIGlzIHRoZSBleHBsaWNpdCBsaXN0IG9mIGNvbHVtbnMgaXQgcmVmZXJlbmNlcywgd2hpY2ggaXMgd2hhdCBnZXRzIHZhbGlkYXRlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDaGVja0NvbnN0cmFpbnQge1xuICAgIC8qKiBDb25zdHJhaW50IG5hbWUgKHVuaXF1ZSB3aXRoaW4gdGhlIHRhYmxlKS4gKi9cbiAgICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgICAvKiogT3BhcXVlIGJvb2xlYW4gcHJlZGljYXRlLiAqL1xuICAgIHJlYWRvbmx5IGV4cHJlc3Npb246IHN0cmluZztcblxuICAgIC8qKiBDb2x1bW5zIHRoZSBwcmVkaWNhdGUgcmVmZXJlbmNlcy4gKi9cbiAgICByZWFkb25seSBjb2x1bW5zOiBzdHJpbmdbXTtcbn1cblxuLyoqIEEgc29ydCBjb2x1bW4gd2l0aGluIGEgSGl2ZSBidWNrZXRpbmcgc3BlYy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U29ydCB7XG4gICAgLyoqIENvbHVtbiB0byBzb3J0IGVhY2ggYnVja2V0IGJ5LiAqL1xuICAgIHJlYWRvbmx5IGNvbHVtbjogc3RyaW5nO1xuXG4gICAgLyoqIFNvcnQgZGlyZWN0aW9uIChgYXNjYCBvciBgZGVzY2AsIGNhc2UtaW5zZW5zaXRpdmUpLiAqL1xuICAgIHJlYWRvbmx5IGRpcmVjdGlvbjogc3RyaW5nO1xufVxuXG4vKipcbiAqIEhpdmUgYnVja2V0aW5nIChgQ0xVU1RFUkVEIEJZIOKApiBJTlRPIE4gQlVDS0VUUyBbU09SVEVEIEJZIOKApl1gKS4gYGNvbHVtbnNgIGFyZVxuICogdGhlIGJ1Y2tldC1rZXkgY29sdW1ucywgYGJ1Y2tldENvdW50YCB0aGUgbnVtYmVyIG9mIGJ1Y2tldHMsIGFuZCBgc29ydGVkQnlgXG4gKiB0aGUgb3B0aW9uYWwgaW50cmEtYnVja2V0IHNvcnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0aW5nIHtcbiAgICAvKiogQnVja2V0LWtleSBjb2x1bW5zLiAqL1xuICAgIHJlYWRvbmx5IGNvbHVtbnM6IHN0cmluZ1tdO1xuXG4gICAgLyoqIE51bWJlciBvZiBidWNrZXRzLiAqL1xuICAgIHJlYWRvbmx5IGJ1Y2tldENvdW50OiBudW1iZXI7XG5cbiAgICAvKiogT3B0aW9uYWwgaW50cmEtYnVja2V0IHNvcnQgY29sdW1ucy4gKi9cbiAgICByZWFkb25seSBzb3J0ZWRCeTogQnVja2V0U29ydFtdO1xufVxuXG4vKiogT25lIGVsZW1lbnQgb2YgYW4gZXhjbHVzaW9uIGNvbnN0cmFpbnQ6IGEgY29sdW1uIGFuZCBpdHMgb3BlcmF0b3IuICovXG5leHBvcnQgaW50ZXJmYWNlIEV4Y2x1c2lvbkVsZW1lbnQge1xuICAgIC8qKiBDb2x1bW4gdGhlIGVsZW1lbnQgYXBwbGllcyB0by4gKi9cbiAgICByZWFkb25seSBjb2x1bW46IHN0cmluZztcblxuICAgIC8qKiBPcGFxdWUgb3BlcmF0b3IgKGUuZy4gYCYmYCwgYD1gKS4gKi9cbiAgICByZWFkb25seSBvcGVyYXRvcjogc3RyaW5nO1xufVxuXG4vKipcbiAqIEFuIGV4Y2x1c2lvbiBjb25zdHJhaW50IChQb3N0Z3Jlcyk6IG5vIHR3byByb3dzIG1heSBoYXZlIGFsbCBsaXN0ZWRcbiAqIGNvbHVtbi9vcGVyYXRvciBwYWlycyBldmFsdWF0ZSB0cnVlIHRvZ2V0aGVyIChnZW5lcmFsaXplZCB1bmlxdWVuZXNzKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeGNsdXNpb25Db25zdHJhaW50IHtcbiAgICAvKiogQ29uc3RyYWludCBuYW1lICh1bmlxdWUgd2l0aGluIHRoZSB0YWJsZSkuICovXG4gICAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gICAgLyoqIEluZGV4IGFjY2VzcyBtZXRob2QgKGBnaXN0YCBvciBgc3BnaXN0YCkuICovXG4gICAgcmVhZG9ubHkgdXNpbmc6IHN0cmluZztcblxuICAgIC8qKiBDb2x1bW4vb3BlcmF0b3IgZWxlbWVudHMuICovXG4gICAgcmVhZG9ubHkgZWxlbWVudHM6IEV4Y2x1c2lvbkVsZW1lbnRbXTtcbn1cblxuLyoqXG4gKiBIaXZlIHNrZXcgb3B0aW1pemF0aW9uIChgU0tFV0VEIEJZIChjb2xzKSBPTiAoKHZhbHVlcyksIOKApilgKS4gYGNvbHVtbnNgIGFyZVxuICogdGhlIHNrZXdlZCBjb2x1bW5zOyBgb25gIGlzIHRoZSBsaXN0IG9mIGhpZ2gtZnJlcXVlbmN5IHZhbHVlIHR1cGxlcywgZWFjaCBvZlxuICogd2hpY2ggbXVzdCBoYXZlIG9uZSB2YWx1ZSBwZXIgc2tld2VkIGNvbHVtbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTa2V3ZWRCeSB7XG4gICAgLyoqIFNrZXdlZCBjb2x1bW5zLiAqL1xuICAgIHJlYWRvbmx5IGNvbHVtbnM6IHN0cmluZ1tdO1xuXG4gICAgLyoqIEhpZ2gtZnJlcXVlbmN5IHZhbHVlIHR1cGxlcyAob25lIHZhbHVlIHBlciBza2V3ZWQgY29sdW1uKS4gKi9cbiAgICByZWFkb25seSBvbjogc3RyaW5nW11bXTtcblxuICAgIC8qKiBXaGV0aGVyIHNrZXdlZCB2YWx1ZXMgYXJlIHN0b3JlZCBhcyBzZXBhcmF0ZSBkaXJlY3RvcmllcyAobGlzdCBidWNrZXRpbmcpLiAqL1xuICAgIHJlYWRvbmx5IHN0b3JlZEFzRGlyZWN0b3JpZXM/OiBib29sZWFuO1xufVxuXG4vKiogSGl2ZSBzdG9yYWdlIGZvcm1hdCBhbmQgU2VyRGUgcHJvcGVydGllcy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSGl2ZVN0b3JhZ2Uge1xuICAgIC8qKiBTdG9yZWQtYXMgZmlsZSBmb3JtYXQgKGUuZy4gYHBhcnF1ZXRgKS4gKi9cbiAgICByZWFkb25seSBzdG9yZWRBcz86IHN0cmluZztcblxuICAgIC8qKiBGcmVlLWZvcm0gU2VyRGUgcHJvcGVydGllcy4gKi9cbiAgICByZWFkb25seSBzZXJkZVByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59XG5cbi8qKiBBIGZvcmVpZ24ta2V5IHJlZmVyZW5jZSB0byBhIGNvbHVtbiBpbiBhbm90aGVyIHRhYmxlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBGb3JlaWduS2V5IHtcbiAgICAvKiogUmVmZXJlbmNlZCB0YWJsZSBpbiBgc2NoZW1hLnRhYmxlYCBmb3JtYXQuICovXG4gICAgcmVhZG9ubHkgc291cmNlVGFibGU6IHN0cmluZztcblxuICAgIC8qKiBSZWZlcmVuY2VkIGNvbHVtbiBpbiB0aGUgc291cmNlIHRhYmxlLiAqL1xuICAgIHJlYWRvbmx5IHNvdXJjZUNvbHVtbjogc3RyaW5nO1xuXG4gICAgLyoqIExvY2FsIGNvbHVtbiB0aGF0IGhvbGRzIHRoZSByZWZlcmVuY2UuICovXG4gICAgcmVhZG9ubHkgbG9jYWxDb2x1bW46IHN0cmluZztcblxuICAgIC8qKiBXaGV0aGVyIHRoZSBsb2NhbCBjb2x1bW4gbWF5IGJlIG51bGwuICovXG4gICAgcmVhZG9ubHkgYWxsb3dOdWxsczogYm9vbGVhbjtcbn1cblxuLyoqIE5vcm1hbGl6ZWQgdGFibGUgZGVmaW5pdGlvbiAob3B0aW9uYWwgYXJyYXlzIGRlZmF1bHRlZCB0byBlbXB0eSkuICovXG5leHBvcnQgaW50ZXJmYWNlIFRhYmxlRGVmaW5pdGlvbiB7XG4gICAgLyoqIFNwZWMgdmVyc2lvbiBvZiB0aGUgZmlsZS4gKi9cbiAgICByZWFkb25seSBzcGVjVmVyc2lvbjogc3RyaW5nO1xuXG4gICAgLyoqIEh1bWFuIGRlc2NyaXB0aW9uLiAqL1xuICAgIHJlYWRvbmx5IGRlc2NyaXB0aW9uOiBzdHJpbmc7XG5cbiAgICAvKiogRW5naW5lLiBNYXkgYmUgYW4gdW5rbm93biBzdHJpbmcgaWYgdGhlIGZpbGUgZmFpbGVkIHN0cnVjdHVyYWwgY2hlY2tzLiAqL1xuICAgIHJlYWRvbmx5IHRhYmxlVHlwZTogc3RyaW5nO1xuXG4gICAgLyoqIFdoZXRoZXIgdGhpcyB0YWJsZSBpcyB0aGUgdG9wIG9mIHRoZSBwaXBlbGluZS4gKi9cbiAgICByZWFkb25seSBpc1Jhd0RhdGE6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBJY2ViZXJnIHRhYmxlIGZvcm1hdCB2ZXJzaW9uICgxLCAyLCBvciAzKS4gT3B0aW9uYWwgYW5kIGVuZ2luZS1zcGVjaWZpYzpcbiAgICAgKiBvbmx5IHRoZSBJY2ViZXJnIGVuZ2luZSB2YWxpZGF0ZXMgaXQuIE90aGVyIGVuZ2luZXMgaWdub3JlIGl0LlxuICAgICAqL1xuICAgIHJlYWRvbmx5IGZvcm1hdFZlcnNpb24/OiBudW1iZXI7XG5cbiAgICAvKiogRGF0YSBjb2x1bW5zLiAqL1xuICAgIHJlYWRvbmx5IGNvbHVtbnM6IENvbHVtbltdO1xuXG4gICAgLyoqIFByaW1hcnkta2V5IGNvbHVtbiBuYW1lcy4gKi9cbiAgICByZWFkb25seSBwcmltYXJ5S2V5OiBzdHJpbmdbXTtcblxuICAgIC8qKiBQYXJ0aXRpb24gZW50cmllcyAoZW5naW5lLXNwZWNpZmljIHNlbWFudGljcykuICovXG4gICAgcmVhZG9ubHkgcGFydGl0aW9uczogUGFydGl0aW9uW107XG5cbiAgICAvKiogSWNlYmVyZyBzb3J0IG9yZGVyIChvcmRlcmVkIHNvcnQgZmllbGRzKS4gT3B0aW9uYWw7IG90aGVyIGVuZ2luZXMgaWdub3JlIGl0LiAqL1xuICAgIHJlYWRvbmx5IHNvcnRPcmRlcjogU29ydEZpZWxkW107XG5cbiAgICAvKiogSWNlYmVyZyBpZGVudGlmaWVyIGZpZWxkcyAodGhlIHJvdy1pZGVudGl0eSAvIGVxdWFsaXR5LWRlbGV0ZSBrZXkpLiBPcHRpb25hbC4gKi9cbiAgICByZWFkb25seSBpZGVudGlmaWVyRmllbGRzOiBzdHJpbmdbXTtcblxuICAgIC8qKiBTZWNvbmRhcnkgaW5kZXhlcyAoUG9zdGdyZXMpLiBPcHRpb25hbDsgb3RoZXIgZW5naW5lcyBpZ25vcmUgdGhlbS4gKi9cbiAgICByZWFkb25seSBpbmRleGVzOiBJbmRleFtdO1xuXG4gICAgLyoqIFVOSVFVRSBjb25zdHJhaW50cyAoUG9zdGdyZXMpLiBPcHRpb25hbDsgb3RoZXIgZW5naW5lcyBpZ25vcmUgdGhlbS4gKi9cbiAgICByZWFkb25seSB1bmlxdWVDb25zdHJhaW50czogVW5pcXVlQ29uc3RyYWludFtdO1xuXG4gICAgLyoqIENIRUNLIGNvbnN0cmFpbnRzIChQb3N0Z3JlcykuIE9wdGlvbmFsOyBvdGhlciBlbmdpbmVzIGlnbm9yZSB0aGVtLiAqL1xuICAgIHJlYWRvbmx5IGNoZWNrQ29uc3RyYWludHM6IENoZWNrQ29uc3RyYWludFtdO1xuXG4gICAgLyoqIEV4Y2x1c2lvbiBjb25zdHJhaW50cyAoUG9zdGdyZXMpLiBPcHRpb25hbDsgb3RoZXIgZW5naW5lcyBpZ25vcmUgdGhlbS4gKi9cbiAgICByZWFkb25seSBleGNsdXNpb25Db25zdHJhaW50czogRXhjbHVzaW9uQ29uc3RyYWludFtdO1xuXG4gICAgLyoqIEhpdmUgYnVja2V0aW5nIHNwZWMuIE9wdGlvbmFsOyBvdGhlciBlbmdpbmVzIGlnbm9yZSBpdC4gKi9cbiAgICByZWFkb25seSBidWNrZXRpbmc/OiBCdWNrZXRpbmc7XG5cbiAgICAvKiogSGl2ZSBza2V3IHNwZWMuIE9wdGlvbmFsOyBvdGhlciBlbmdpbmVzIGlnbm9yZSBpdC4gKi9cbiAgICByZWFkb25seSBza2V3ZWRCeT86IFNrZXdlZEJ5O1xuXG4gICAgLyoqIEhpdmUgc3RvcmFnZSBmb3JtYXQgLyBTZXJEZSBzcGVjLiBPcHRpb25hbDsgb3RoZXIgZW5naW5lcyBpZ25vcmUgaXQuICovXG4gICAgcmVhZG9ubHkgc3RvcmFnZT86IEhpdmVTdG9yYWdlO1xuXG4gICAgLyoqXG4gICAgICogRW5naW5lIHRhYmxlIHByb3BlcnRpZXMgYXMgYSBzdHJpbmfihpJzdHJpbmcgbWFwIChlLmcuIEljZWJlcmdcbiAgICAgKiBgd3JpdGUudGFyZ2V0LWZpbGUtc2l6ZS1ieXRlc2AsIEhpdmUgYHBhcnF1ZXQuY29tcHJlc3Npb25gKS4gT3B0aW9uYWwuXG4gICAgICogT25seSBrZXlzIHdpdGggYSBrbm93biwgY2xvc2VkIGxlZ2FsIGRvbWFpbiBhcmUgdmFsaWRhdGVkIHBlciBlbmdpbmU7XG4gICAgICogdW5rbm93biBrZXlzIHBhc3MgdGhyb3VnaCB1bnZhbGlkYXRlZC5cbiAgICAgKi9cbiAgICByZWFkb25seSB0YWJsZVByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cbiAgICAvKiogVXBzdHJlYW0gdGFibGVzIGluIGBzY2hlbWEudGFibGVgIGZvcm1hdC4gKi9cbiAgICByZWFkb25seSBkZXBlbmRzT246IHN0cmluZ1tdO1xuXG4gICAgLyoqIEZvcmVpZ24ga2V5cy4gKi9cbiAgICByZWFkb25seSBmb3JlaWduS2V5czogRm9yZWlnbktleVtdO1xufVxuXG4vKiogQSBzY2hlbWEtZGVzY3JpcHRpb24gZmlsZSdzIG5vcm1hbGl6ZWQgY29udGVudC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2NoZW1hRGVzY3JpcHRpb24ge1xuICAgIC8qKiBTcGVjIHZlcnNpb24gb2YgdGhlIGZpbGUuICovXG4gICAgcmVhZG9ubHkgc3BlY1ZlcnNpb246IHN0cmluZztcblxuICAgIC8qKiBIdW1hbiBkZXNjcmlwdGlvbi4gKi9cbiAgICByZWFkb25seSBkZXNjcmlwdGlvbjogc3RyaW5nO1xufVxuXG4vKiogU2V2ZXJpdHkgb2YgYSB2aW9sYXRpb24uICovXG5leHBvcnQgdHlwZSBWaW9sYXRpb25MZXZlbCA9ICdlcnJvcicgfCAnd2FybmluZyc7XG5cbi8qKiBBIHNpbmdsZSB2YWxpZGF0aW9uIGZpbmRpbmcuICovXG5leHBvcnQgaW50ZXJmYWNlIFZpb2xhdGlvbiB7XG4gICAgLyoqIFNldmVyaXR5LiBgZXJyb3JgIGZhaWxzIHZhbGlkYXRpb247IGB3YXJuaW5nYCBkb2VzIG5vdC4gKi9cbiAgICByZWFkb25seSBsZXZlbDogVmlvbGF0aW9uTGV2ZWw7XG5cbiAgICAvKiogU3RhYmxlIG1hY2hpbmUtcmVhZGFibGUgcnVsZSBjb2RlIChlLmcuIGBQS19DT0xVTU5TX0VYSVNUYCkuICovXG4gICAgcmVhZG9ubHkgY29kZTogc3RyaW5nO1xuXG4gICAgLyoqIE93bmluZyBzY2hlbWEsIGlmIGFwcGxpY2FibGUuICovXG4gICAgcmVhZG9ubHkgc2NoZW1hPzogc3RyaW5nO1xuXG4gICAgLyoqIE93bmluZyB0YWJsZSwgaWYgYXBwbGljYWJsZS4gKi9cbiAgICByZWFkb25seSB0YWJsZT86IHN0cmluZztcblxuICAgIC8qKiBGaWVsZCBwYXRoIHdpdGhpbiB0aGUgZmlsZSwgaWYgYXBwbGljYWJsZS4gKi9cbiAgICByZWFkb25seSBmaWVsZD86IHN0cmluZztcblxuICAgIC8qKiBTb3VyY2UgZmlsZSBwYXRoLCBpZiBhcHBsaWNhYmxlLiAqL1xuICAgIHJlYWRvbmx5IHBhdGg/OiBzdHJpbmc7XG5cbiAgICAvKiogSHVtYW4tcmVhZGFibGUgbWVzc2FnZS4gKi9cbiAgICByZWFkb25seSBtZXNzYWdlOiBzdHJpbmc7XG59XG5cbi8qKiBUaGUgYWdncmVnYXRlIHJlc3VsdCBvZiB2YWxpZGF0aW5nIGEgcm9vdC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmFsaWRhdGlvblJlc3VsdCB7XG4gICAgLyoqIFRydWUgd2hlbiB0aGVyZSBhcmUgbm8gYGVycm9yYC1sZXZlbCB2aW9sYXRpb25zLiAqL1xuICAgIHJlYWRvbmx5IG9rOiBib29sZWFuO1xuXG4gICAgLyoqIEFsbCBmaW5kaW5ncywgZXJyb3JzIGFuZCB3YXJuaW5ncy4gKi9cbiAgICByZWFkb25seSB2aW9sYXRpb25zOiBWaW9sYXRpb25bXTtcbn1cbiJdfQ==
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7OztHQVFHOzs7QUFFSCx3RUFBd0U7QUFDeEUsSUFBWSxTQUlYO0FBSkQsV0FBWSxTQUFTO0lBQ2pCLDBDQUE2QixDQUFBO0lBQzdCLHNEQUF5QyxDQUFBO0lBQ3pDLHdDQUEyQixDQUFBO0FBQy9CLENBQUMsRUFKVyxTQUFTLHlCQUFULFNBQVMsUUFJcEI7QUFFRCw2REFBNkQ7QUFDaEQsUUFBQSxXQUFXLEdBQXNCO0lBQzFDLFNBQVMsQ0FBQyxZQUFZO0lBQ3RCLFNBQVMsQ0FBQyxrQkFBa0I7SUFDNUIsU0FBUyxDQUFDLFdBQVc7Q0FDeEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29yZSBkYXRhIG1vZGVsIGZvciB0aGUgRmxleGlibGUgRGF0YXNldCBEZWZpbml0aW9uIChGREQpIHN0YW5kYXJkLlxuICpcbiAqIFRoZXNlIGludGVyZmFjZXMgZGVzY3JpYmUgdGhlICpwdXJlIGRhdGEqIHNoYXBlIG9mIGEgZGF0YXNldDogY29sdW1ucyxcbiAqIHBhcnRpdGlvbnMsIGZvcmVpZ24ga2V5cywgdGFibGUgZGVmaW5pdGlvbnMsIGFuZCB0aGUgdmlvbGF0aW9ucyB0aGVcbiAqIHZhbGlkYXRvciBlbWl0cy4gVGhlIGxvYWRlZCB3b3JsZCAoc2NoZW1hcyArIHRhYmxlIGluc3RhbmNlcykgYW5kIHRoZVxuICogYWJzdHJhY3QgdGFibGUgYmFzZSBjbGFzcyBsaXZlIGluIGAuL3dvcmxkYCBhbmQgYC4vdGFibGUtdHlwZWAgc28gdGhpc1xuICogbW9kdWxlIHN0YXlzIGEgbGVhZiB3aXRoIG5vIGJlaGF2aW9yLlxuICovXG5cbi8qKiBUYWJsZSBlbmdpbmUuIEVhY2ggdmFsdWUgdW5sb2NrcyBlbmdpbmUtc3BlY2lmaWMgc2VtYW50aWMgY2hlY2tzLiAqL1xuZXhwb3J0IGVudW0gVGFibGVUeXBlIHtcbiAgICBISVZFX1BBUlFVRVQgPSAnaGl2ZV9wYXJxdWV0JyxcbiAgICBJQ0VCRVJHX1BBUlFVRVRfVjIgPSAnaWNlYmVyZ19wYXJxdWV0X3YyJyxcbiAgICBQT1NUR1JFU18xOCA9ICdwb3N0Z3Jlc18xOCcsXG59XG5cbi8qKiBFdmVyeSBrbm93biBgdGFibGVUeXBlYCBzdHJpbmcsIGZvciBtZW1iZXJzaGlwIGNoZWNrcy4gKi9cbmV4cG9ydCBjb25zdCBUQUJMRV9UWVBFUzogcmVhZG9ubHkgc3RyaW5nW10gPSBbXG4gICAgVGFibGVUeXBlLkhJVkVfUEFSUVVFVCxcbiAgICBUYWJsZVR5cGUuSUNFQkVSR19QQVJRVUVUX1YyLFxuICAgIFRhYmxlVHlwZS5QT1NUR1JFU18xOCxcbl07XG5cbi8qKiBBIHNpbmdsZSBkYXRhIGNvbHVtbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29sdW1uIHtcbiAgICAvKiogQ29sdW1uIG5hbWUgKHVuaXF1ZSB3aXRoaW4gYSB0YWJsZSkuICovXG4gICAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gICAgLyoqIEVuZ2luZS1zcGVjaWZpYyB0eXBlIHN0cmluZyAoZS5nLiBgbG9uZ2AsIGB2YXJjaGFyKDI1NSlgKS4gKi9cbiAgICByZWFkb25seSB0eXBlOiBzdHJpbmc7XG5cbiAgICAvKiogSHVtYW4gZGVzY3JpcHRpb24uICovXG4gICAgcmVhZG9ubHkgZGVzY3JpcHRpb246IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEljZWJlcmcgZmllbGQgaWQgdXNlZCBmb3Igc2NoZW1hIGV2b2x1dGlvbiAoSWNlYmVyZykuIE9wdGlvbmFsOiB3aGVuIHNldCxcbiAgICAgKiBpdCBwaW5zIHRoZSBjb2x1bW4gdG8gYSBzdGFibGUgaWQgc28gcmVuYW1lcyBrZWVwIHRoZSBzYW1lIGlkIGFuZCBkcm9wcGVkXG4gICAgICogaWRzIGFyZSByZXRpcmVkIGZvcmV2ZXIsIGtlZXBpbmcgb2xkIGRhdGEgZmlsZXMgcmVhZGFibGUuIEZpZWxkIGlkcyBhcmVcbiAgICAgKiBhbGwtb3Itbm90aGluZyBwZXIgdGFibGU7IHdoZW4gcHJlc2VudCBlYWNoIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIGFuZFxuICAgICAqIHVuaXF1ZSB3aXRoaW4gdGhlIHRhYmxlLiBPdGhlciBlbmdpbmVzIGlnbm9yZSBpdC5cbiAgICAgKi9cbiAgICByZWFkb25seSBpZD86IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIGNvbHVtbiBtYXkgaG9sZCBudWxsLiBPcHRpb25hbDogd2hlbiBvbWl0dGVkLCBudWxsYWJpbGl0eSBpc1xuICAgICAqIHVuc3BlY2lmaWVkIGFuZCB0aGUgbnVsbGFiaWxpdHkgY3Jvc3MtY2hlY2tzIGRvIG5vdCBmaXJlLiBgZmFsc2VgIG1hcmtzIGFcbiAgICAgKiBOT1QgTlVMTCBjb2x1bW4gKEljZWJlcmcgYHJlcXVpcmVkYCk7IGB0cnVlYCBtYXJrcyBhbiBleHBsaWNpdGx5IG51bGxhYmxlXG4gICAgICogY29sdW1uLlxuICAgICAqL1xuICAgIHJlYWRvbmx5IG51bGxhYmxlPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEdlbmVyYXRlZC1jb2x1bW4ga2luZCAoUG9zdGdyZXMpOiBgc3RvcmVkYCBvciBgdmlydHVhbGAuIE9wdGlvbmFsOyB3aGVuXG4gICAgICogc2V0LCB0aGUgY29sdW1uIGlzIGNvbXB1dGVkIGZyb20gYGV4cHJlc3Npb25Db2x1bW5zYC5cbiAgICAgKi9cbiAgICByZWFkb25seSBnZW5lcmF0ZWQ/OiBzdHJpbmc7XG5cbiAgICAvKiogT3BhcXVlIGdlbmVyYXRpb24gZXhwcmVzc2lvbiAoUG9zdGdyZXMgZ2VuZXJhdGVkIGNvbHVtbikuICovXG4gICAgcmVhZG9ubHkgZXhwcmVzc2lvbj86IHN0cmluZztcblxuICAgIC8qKiBDb2x1bW5zIHRoZSBnZW5lcmF0aW9uIGBleHByZXNzaW9uYCByZWZlcmVuY2VzIChQb3N0Z3JlcykuICovXG4gICAgcmVhZG9ubHkgZXhwcmVzc2lvbkNvbHVtbnM/OiBzdHJpbmdbXTtcblxuICAgIC8qKlxuICAgICAqIElkZW50aXR5LWNvbHVtbiBraW5kIChQb3N0Z3Jlcyk6IGBhbHdheXNgIG9yIGBieURlZmF1bHRgLiBPcHRpb25hbDsgd2hlblxuICAgICAqIHNldCwgdGhlIGNvbHVtbiBpcyBgR0VORVJBVEVEIOKApiBBUyBJREVOVElUWWAuXG4gICAgICovXG4gICAgcmVhZG9ubHkgaWRlbnRpdHk/OiBzdHJpbmc7XG5cbiAgICAvKiogT3BhcXVlIGNvbHVtbiBkZWZhdWx0IGV4cHJlc3Npb24gKFBvc3RncmVzKS4gKi9cbiAgICByZWFkb25seSBkZWZhdWx0Pzogc3RyaW5nO1xuXG4gICAgLyoqIENvbHVtbiBjb2xsYXRpb24gbmFtZSAoUG9zdGdyZXMpLiBPcGFxdWU7IGxlZ2FsIG9ubHkgb24gdGV4dCB0eXBlcy4gKi9cbiAgICByZWFkb25seSBjb2xsYXRpb24/OiBzdHJpbmc7XG5cbiAgICAvKiogUGVyLWNvbHVtbiBUT0FTVCBjb21wcmVzc2lvbiAoUG9zdGdyZXMpOiBgcGdsemAgb3IgYGx6NGAuICovXG4gICAgcmVhZG9ubHkgY29tcHJlc3Npb24/OiBzdHJpbmc7XG5cbiAgICAvKiogUGVyLWNvbHVtbiBzdG9yYWdlIHN0cmF0ZWd5IChQb3N0Z3Jlcyk6IGBwbGFpbmAvYGV4dGVybmFsYC9gZXh0ZW5kZWRgL2BtYWluYC9gZGVmYXVsdGAuICovXG4gICAgcmVhZG9ubHkgc3RvcmFnZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIHBhcnRpdGlvbiBlbnRyeS4gVGhlIG1lYW5pbmcgb2YgYG5hbWVgIGFuZCBgdHlwZWAgaXMgZW5naW5lLXNwZWNpZmljOiBmb3JcbiAqIEhpdmUsIGBuYW1lYCBpcyBhIG5ldyBwYXJ0aXRpb24gY29sdW1uIGFuZCBgdHlwZWAgaXMgYSBub3JtYWwgdHlwZTsgZm9yXG4gKiBJY2ViZXJnLCBgbmFtZWAgaXMgYSBzb3VyY2UgZGF0YSBjb2x1bW4gYW5kIGB0eXBlYCBpcyBhIHRyYW5zZm9ybTsgZm9yXG4gKiBQb3N0Z3JlcywgYG5hbWVgIGlzIGFuIGV4aXN0aW5nIGtleSBjb2x1bW4gYW5kIGB0eXBlYCBpcyB0aGUgc3RyYXRlZ3kuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFydGl0aW9uIHtcbiAgICAvKiogSGl2ZTogbmV3IHBhcnRpdGlvbiBjb2x1bW4gbmFtZS4gSWNlYmVyZyAvIFBvc3RncmVzOiBleGlzdGluZyBkYXRhL2tleSBjb2x1bW4gbmFtZS4gKi9cbiAgICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgICAvKiogSGl2ZTogYSBub3JtYWwgdHlwZS4gSWNlYmVyZzogYSB0cmFuc2Zvcm0gKGUuZy4gYGRheWAsIGBidWNrZXRbMTZdYCkuIFBvc3RncmVzOiBhIHN0cmF0ZWd5IChgcmFuZ2VgIC8gYGxpc3RgIC8gYGhhc2hgKS4gKi9cbiAgICByZWFkb25seSB0eXBlOiBzdHJpbmc7XG5cbiAgICAvKiogSHVtYW4gZGVzY3JpcHRpb24uICovXG4gICAgcmVhZG9ubHkgZGVzY3JpcHRpb246IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIHNpbmdsZSBzb3J0IGZpZWxkIGluIGFuIEljZWJlcmcgdGFibGUncyBzb3J0IG9yZGVyLiBgY29sdW1uYCBpcyBhIGRhdGFcbiAqIGNvbHVtbjsgYHRyYW5zZm9ybWAgaXMgYW4gb3B0aW9uYWwgSWNlYmVyZyB0cmFuc2Zvcm0gYXBwbGllZCBiZWZvcmUgc29ydGluZ1xuICogKGRlZmF1bHRzIHRvIGlkZW50aXR5KTsgYGRpcmVjdGlvbmAgYW5kIGBudWxsT3JkZXJgIHNldCB0aGUgb3JkZXJpbmcuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU29ydEZpZWxkIHtcbiAgICAvKiogU291cmNlIGRhdGEgY29sdW1uIHRvIHNvcnQgYnkuICovXG4gICAgcmVhZG9ubHkgY29sdW1uOiBzdHJpbmc7XG5cbiAgICAvKiogT3B0aW9uYWwgSWNlYmVyZyB0cmFuc2Zvcm0gYXBwbGllZCBiZWZvcmUgc29ydGluZyAoZS5nLiBgZGF5YCwgYGJ1Y2tldFsxNl1gKS4gKi9cbiAgICByZWFkb25seSB0cmFuc2Zvcm0/OiBzdHJpbmc7XG5cbiAgICAvKiogU29ydCBkaXJlY3Rpb24gKGBhc2NgIG9yIGBkZXNjYCkuICovXG4gICAgcmVhZG9ubHkgZGlyZWN0aW9uOiBzdHJpbmc7XG5cbiAgICAvKiogTnVsbCBvcmRlcmluZyAoYG51bGxzLWZpcnN0YCBvciBgbnVsbHMtbGFzdGApLiAqL1xuICAgIHJlYWRvbmx5IG51bGxPcmRlcjogc3RyaW5nO1xufVxuXG4vKiogQSBzaW5nbGUga2V5IGNvbHVtbiB3aXRoaW4gYW4gaW5kZXgsIHdpdGggb3B0aW9uYWwgb3JkZXJpbmcgbW9kaWZpZXJzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbmRleENvbHVtbiB7XG4gICAgLyoqIEluZGV4ZWQgY29sdW1uIG5hbWUuICovXG4gICAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gICAgLyoqIE9wdGlvbmFsIHNvcnQgb3JkZXIgKGBhc2NgIG9yIGBkZXNjYCkuICovXG4gICAgcmVhZG9ubHkgc29ydD86IHN0cmluZztcblxuICAgIC8qKiBPcHRpb25hbCBudWxsIG9yZGVyaW5nIChgZmlyc3RgIG9yIGBsYXN0YCkuICovXG4gICAgcmVhZG9ubHkgbnVsbHM/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBzZWNvbmRhcnkgaW5kZXggKGUuZy4gUG9zdGdyZXMpLiBgY29sdW1uc2AgYXJlIHRoZSBrZXkgY29sdW1uczsgYGluY2x1ZGVgXG4gKiBhcmUgbm9uLWtleSBjb3ZlcmluZyBjb2x1bW5zOyBgd2hlcmVgIGlzIGFuIG9wYXF1ZSBwYXJ0aWFsLWluZGV4IHByZWRpY2F0ZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbmRleCB7XG4gICAgLyoqIEluZGV4IG5hbWUgKHVuaXF1ZSB3aXRoaW4gdGhlIHRhYmxlKS4gKi9cbiAgICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgICAvKiogQWNjZXNzIG1ldGhvZCAoZS5nLiBgYnRyZWVgLCBgaGFzaGAsIGBnaW5gKS4gKi9cbiAgICByZWFkb25seSBtZXRob2Q6IHN0cmluZztcblxuICAgIC8qKiBXaGV0aGVyIHRoZSBpbmRleCBlbmZvcmNlcyB1bmlxdWVuZXNzLiAqL1xuICAgIHJlYWRvbmx5IHVuaXF1ZT86IGJvb2xlYW47XG5cbiAgICAvKiogS2V5IGNvbHVtbnMuICovXG4gICAgcmVhZG9ubHkgY29sdW1uczogSW5kZXhDb2x1bW5bXTtcblxuICAgIC8qKiBOb24ta2V5IGNvdmVyaW5nIGNvbHVtbnMuICovXG4gICAgcmVhZG9ubHkgaW5jbHVkZTogc3RyaW5nW107XG5cbiAgICAvKiogT3B0aW9uYWwgcGFydGlhbC1pbmRleCBwcmVkaWNhdGUgKG9wYXF1ZSkuICovXG4gICAgcmVhZG9ubHkgd2hlcmU/OiBzdHJpbmc7XG59XG5cbi8qKiBBIHRhYmxlLWxldmVsIFVOSVFVRSBjb25zdHJhaW50IG92ZXIgb25lIG9yIG1vcmUgY29sdW1ucyAoUG9zdGdyZXMpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBVbmlxdWVDb25zdHJhaW50IHtcbiAgICAvKiogQ29uc3RyYWludCBuYW1lICh1bmlxdWUgd2l0aGluIHRoZSB0YWJsZSkuICovXG4gICAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gICAgLyoqIENvbHVtbnMgdGhlIGNvbnN0cmFpbnQgc3BhbnMuICovXG4gICAgcmVhZG9ubHkgY29sdW1uczogc3RyaW5nW107XG5cbiAgICAvKiogV2hldGhlciBudWxscyBhcmUgdHJlYXRlZCBhcyBub3QgZGlzdGluY3QgKGBOVUxMUyBOT1QgRElTVElOQ1RgKS4gKi9cbiAgICByZWFkb25seSBudWxsc05vdERpc3RpbmN0PzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBBIENIRUNLIGNvbnN0cmFpbnQgKFBvc3RncmVzKS4gYGV4cHJlc3Npb25gIGlzIGFuIG9wYXF1ZSBwcmVkaWNhdGU7IGBjb2x1bW5zYFxuICogaXMgdGhlIGV4cGxpY2l0IGxpc3Qgb2YgY29sdW1ucyBpdCByZWZlcmVuY2VzLCB3aGljaCBpcyB3aGF0IGdldHMgdmFsaWRhdGVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENoZWNrQ29uc3RyYWludCB7XG4gICAgLyoqIENvbnN0cmFpbnQgbmFtZSAodW5pcXVlIHdpdGhpbiB0aGUgdGFibGUpLiAqL1xuICAgIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAgIC8qKiBPcGFxdWUgYm9vbGVhbiBwcmVkaWNhdGUuICovXG4gICAgcmVhZG9ubHkgZXhwcmVzc2lvbjogc3RyaW5nO1xuXG4gICAgLyoqIENvbHVtbnMgdGhlIHByZWRpY2F0ZSByZWZlcmVuY2VzLiAqL1xuICAgIHJlYWRvbmx5IGNvbHVtbnM6IHN0cmluZ1tdO1xufVxuXG4vKiogQSBzb3J0IGNvbHVtbiB3aXRoaW4gYSBIaXZlIGJ1Y2tldGluZyBzcGVjLiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTb3J0IHtcbiAgICAvKiogQ29sdW1uIHRvIHNvcnQgZWFjaCBidWNrZXQgYnkuICovXG4gICAgcmVhZG9ubHkgY29sdW1uOiBzdHJpbmc7XG5cbiAgICAvKiogU29ydCBkaXJlY3Rpb24gKGBhc2NgIG9yIGBkZXNjYCwgY2FzZS1pbnNlbnNpdGl2ZSkuICovXG4gICAgcmVhZG9ubHkgZGlyZWN0aW9uOiBzdHJpbmc7XG59XG5cbi8qKlxuICogSGl2ZSBidWNrZXRpbmcgKGBDTFVTVEVSRUQgQlkg4oCmIElOVE8gTiBCVUNLRVRTIFtTT1JURUQgQlkg4oCmXWApLiBgY29sdW1uc2AgYXJlXG4gKiB0aGUgYnVja2V0LWtleSBjb2x1bW5zLCBgYnVja2V0Q291bnRgIHRoZSBudW1iZXIgb2YgYnVja2V0cywgYW5kIGBzb3J0ZWRCeWBcbiAqIHRoZSBvcHRpb25hbCBpbnRyYS1idWNrZXQgc29ydC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRpbmcge1xuICAgIC8qKiBCdWNrZXQta2V5IGNvbHVtbnMuICovXG4gICAgcmVhZG9ubHkgY29sdW1uczogc3RyaW5nW107XG5cbiAgICAvKiogTnVtYmVyIG9mIGJ1Y2tldHMuICovXG4gICAgcmVhZG9ubHkgYnVja2V0Q291bnQ6IG51bWJlcjtcblxuICAgIC8qKiBPcHRpb25hbCBpbnRyYS1idWNrZXQgc29ydCBjb2x1bW5zLiAqL1xuICAgIHJlYWRvbmx5IHNvcnRlZEJ5OiBCdWNrZXRTb3J0W107XG59XG5cbi8qKiBPbmUgZWxlbWVudCBvZiBhbiBleGNsdXNpb24gY29uc3RyYWludDogYSBjb2x1bW4gYW5kIGl0cyBvcGVyYXRvci4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXhjbHVzaW9uRWxlbWVudCB7XG4gICAgLyoqIENvbHVtbiB0aGUgZWxlbWVudCBhcHBsaWVzIHRvLiAqL1xuICAgIHJlYWRvbmx5IGNvbHVtbjogc3RyaW5nO1xuXG4gICAgLyoqIE9wYXF1ZSBvcGVyYXRvciAoZS5nLiBgJiZgLCBgPWApLiAqL1xuICAgIHJlYWRvbmx5IG9wZXJhdG9yOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQW4gZXhjbHVzaW9uIGNvbnN0cmFpbnQgKFBvc3RncmVzKTogbm8gdHdvIHJvd3MgbWF5IGhhdmUgYWxsIGxpc3RlZFxuICogY29sdW1uL29wZXJhdG9yIHBhaXJzIGV2YWx1YXRlIHRydWUgdG9nZXRoZXIgKGdlbmVyYWxpemVkIHVuaXF1ZW5lc3MpLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV4Y2x1c2lvbkNvbnN0cmFpbnQge1xuICAgIC8qKiBDb25zdHJhaW50IG5hbWUgKHVuaXF1ZSB3aXRoaW4gdGhlIHRhYmxlKS4gKi9cbiAgICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgICAvKiogSW5kZXggYWNjZXNzIG1ldGhvZCAoYGdpc3RgIG9yIGBzcGdpc3RgKS4gKi9cbiAgICByZWFkb25seSB1c2luZzogc3RyaW5nO1xuXG4gICAgLyoqIENvbHVtbi9vcGVyYXRvciBlbGVtZW50cy4gKi9cbiAgICByZWFkb25seSBlbGVtZW50czogRXhjbHVzaW9uRWxlbWVudFtdO1xufVxuXG4vKipcbiAqIEhpdmUgc2tldyBvcHRpbWl6YXRpb24gKGBTS0VXRUQgQlkgKGNvbHMpIE9OICgodmFsdWVzKSwg4oCmKWApLiBgY29sdW1uc2AgYXJlXG4gKiB0aGUgc2tld2VkIGNvbHVtbnM7IGBvbmAgaXMgdGhlIGxpc3Qgb2YgaGlnaC1mcmVxdWVuY3kgdmFsdWUgdHVwbGVzLCBlYWNoIG9mXG4gKiB3aGljaCBtdXN0IGhhdmUgb25lIHZhbHVlIHBlciBza2V3ZWQgY29sdW1uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNrZXdlZEJ5IHtcbiAgICAvKiogU2tld2VkIGNvbHVtbnMuICovXG4gICAgcmVhZG9ubHkgY29sdW1uczogc3RyaW5nW107XG5cbiAgICAvKiogSGlnaC1mcmVxdWVuY3kgdmFsdWUgdHVwbGVzIChvbmUgdmFsdWUgcGVyIHNrZXdlZCBjb2x1bW4pLiAqL1xuICAgIHJlYWRvbmx5IG9uOiBzdHJpbmdbXVtdO1xuXG4gICAgLyoqIFdoZXRoZXIgc2tld2VkIHZhbHVlcyBhcmUgc3RvcmVkIGFzIHNlcGFyYXRlIGRpcmVjdG9yaWVzIChsaXN0IGJ1Y2tldGluZykuICovXG4gICAgcmVhZG9ubHkgc3RvcmVkQXNEaXJlY3Rvcmllcz86IGJvb2xlYW47XG59XG5cbi8qKiBIaXZlIHN0b3JhZ2UgZm9ybWF0IGFuZCBTZXJEZSBwcm9wZXJ0aWVzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBIaXZlU3RvcmFnZSB7XG4gICAgLyoqIFN0b3JlZC1hcyBmaWxlIGZvcm1hdCAoZS5nLiBgcGFycXVldGApLiAqL1xuICAgIHJlYWRvbmx5IHN0b3JlZEFzPzogc3RyaW5nO1xuXG4gICAgLyoqIEZyZWUtZm9ybSBTZXJEZSBwcm9wZXJ0aWVzLiAqL1xuICAgIHJlYWRvbmx5IHNlcmRlUHJvcGVydGllczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn1cblxuLyoqIEEgZm9yZWlnbi1rZXkgcmVmZXJlbmNlIHRvIGEgY29sdW1uIGluIGFub3RoZXIgdGFibGUuICovXG5leHBvcnQgaW50ZXJmYWNlIEZvcmVpZ25LZXkge1xuICAgIC8qKiBSZWZlcmVuY2VkIHRhYmxlIGluIGBzY2hlbWEudGFibGVgIGZvcm1hdC4gKi9cbiAgICByZWFkb25seSBzb3VyY2VUYWJsZTogc3RyaW5nO1xuXG4gICAgLyoqIFJlZmVyZW5jZWQgY29sdW1uIGluIHRoZSBzb3VyY2UgdGFibGUuICovXG4gICAgcmVhZG9ubHkgc291cmNlQ29sdW1uOiBzdHJpbmc7XG5cbiAgICAvKiogTG9jYWwgY29sdW1uIHRoYXQgaG9sZHMgdGhlIHJlZmVyZW5jZS4gKi9cbiAgICByZWFkb25seSBsb2NhbENvbHVtbjogc3RyaW5nO1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIGxvY2FsIGNvbHVtbiBtYXkgYmUgbnVsbC4gKi9cbiAgICByZWFkb25seSBhbGxvd051bGxzOiBib29sZWFuO1xufVxuXG4vKiogTm9ybWFsaXplZCB0YWJsZSBkZWZpbml0aW9uIChvcHRpb25hbCBhcnJheXMgZGVmYXVsdGVkIHRvIGVtcHR5KS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGFibGVEZWZpbml0aW9uIHtcbiAgICAvKiogU3BlYyB2ZXJzaW9uIG9mIHRoZSBmaWxlLiAqL1xuICAgIHJlYWRvbmx5IHNwZWNWZXJzaW9uOiBzdHJpbmc7XG5cbiAgICAvKiogSHVtYW4gZGVzY3JpcHRpb24uICovXG4gICAgcmVhZG9ubHkgZGVzY3JpcHRpb246IHN0cmluZztcblxuICAgIC8qKiBFbmdpbmUuIE1heSBiZSBhbiB1bmtub3duIHN0cmluZyBpZiB0aGUgZmlsZSBmYWlsZWQgc3RydWN0dXJhbCBjaGVja3MuICovXG4gICAgcmVhZG9ubHkgdGFibGVUeXBlOiBzdHJpbmc7XG5cbiAgICAvKiogV2hldGhlciB0aGlzIHRhYmxlIGlzIHRoZSB0b3Agb2YgdGhlIHBpcGVsaW5lLiAqL1xuICAgIHJlYWRvbmx5IGlzUmF3RGF0YTogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEljZWJlcmcgdGFibGUgZm9ybWF0IHZlcnNpb24uIE9wdGlvbmFsIGFuZCBlbmdpbmUtc3BlY2lmaWM6IG9ubHkgdGhlXG4gICAgICogSWNlYmVyZyBlbmdpbmUgdmFsaWRhdGVzIGl0LCBhbmQgb24gYGljZWJlcmdfcGFycXVldF92MmAgaXQgbXVzdCBiZSBgMmBcbiAgICAgKiB3aGVuIHByZXNlbnQuIE90aGVyIGVuZ2luZXMgaWdub3JlIGl0LlxuICAgICAqL1xuICAgIHJlYWRvbmx5IGZvcm1hdFZlcnNpb24/OiBudW1iZXI7XG5cbiAgICAvKiogRGF0YSBjb2x1bW5zLiAqL1xuICAgIHJlYWRvbmx5IGNvbHVtbnM6IENvbHVtbltdO1xuXG4gICAgLyoqIFByaW1hcnkta2V5IGNvbHVtbiBuYW1lcy4gKi9cbiAgICByZWFkb25seSBwcmltYXJ5S2V5OiBzdHJpbmdbXTtcblxuICAgIC8qKiBQYXJ0aXRpb24gZW50cmllcyAoZW5naW5lLXNwZWNpZmljIHNlbWFudGljcykuICovXG4gICAgcmVhZG9ubHkgcGFydGl0aW9uczogUGFydGl0aW9uW107XG5cbiAgICAvKiogSWNlYmVyZyBzb3J0IG9yZGVyIChvcmRlcmVkIHNvcnQgZmllbGRzKS4gT3B0aW9uYWw7IG90aGVyIGVuZ2luZXMgaWdub3JlIGl0LiAqL1xuICAgIHJlYWRvbmx5IHNvcnRPcmRlcjogU29ydEZpZWxkW107XG5cbiAgICAvKiogSWNlYmVyZyBpZGVudGlmaWVyIGZpZWxkcyAodGhlIHJvdy1pZGVudGl0eSAvIGVxdWFsaXR5LWRlbGV0ZSBrZXkpLiBPcHRpb25hbC4gKi9cbiAgICByZWFkb25seSBpZGVudGlmaWVyRmllbGRzOiBzdHJpbmdbXTtcblxuICAgIC8qKiBTZWNvbmRhcnkgaW5kZXhlcyAoUG9zdGdyZXMpLiBPcHRpb25hbDsgb3RoZXIgZW5naW5lcyBpZ25vcmUgdGhlbS4gKi9cbiAgICByZWFkb25seSBpbmRleGVzOiBJbmRleFtdO1xuXG4gICAgLyoqIFVOSVFVRSBjb25zdHJhaW50cyAoUG9zdGdyZXMpLiBPcHRpb25hbDsgb3RoZXIgZW5naW5lcyBpZ25vcmUgdGhlbS4gKi9cbiAgICByZWFkb25seSB1bmlxdWVDb25zdHJhaW50czogVW5pcXVlQ29uc3RyYWludFtdO1xuXG4gICAgLyoqIENIRUNLIGNvbnN0cmFpbnRzIChQb3N0Z3JlcykuIE9wdGlvbmFsOyBvdGhlciBlbmdpbmVzIGlnbm9yZSB0aGVtLiAqL1xuICAgIHJlYWRvbmx5IGNoZWNrQ29uc3RyYWludHM6IENoZWNrQ29uc3RyYWludFtdO1xuXG4gICAgLyoqIEV4Y2x1c2lvbiBjb25zdHJhaW50cyAoUG9zdGdyZXMpLiBPcHRpb25hbDsgb3RoZXIgZW5naW5lcyBpZ25vcmUgdGhlbS4gKi9cbiAgICByZWFkb25seSBleGNsdXNpb25Db25zdHJhaW50czogRXhjbHVzaW9uQ29uc3RyYWludFtdO1xuXG4gICAgLyoqIEhpdmUgYnVja2V0aW5nIHNwZWMuIE9wdGlvbmFsOyBvdGhlciBlbmdpbmVzIGlnbm9yZSBpdC4gKi9cbiAgICByZWFkb25seSBidWNrZXRpbmc/OiBCdWNrZXRpbmc7XG5cbiAgICAvKiogSGl2ZSBza2V3IHNwZWMuIE9wdGlvbmFsOyBvdGhlciBlbmdpbmVzIGlnbm9yZSBpdC4gKi9cbiAgICByZWFkb25seSBza2V3ZWRCeT86IFNrZXdlZEJ5O1xuXG4gICAgLyoqIEhpdmUgc3RvcmFnZSBmb3JtYXQgLyBTZXJEZSBzcGVjLiBPcHRpb25hbDsgb3RoZXIgZW5naW5lcyBpZ25vcmUgaXQuICovXG4gICAgcmVhZG9ubHkgc3RvcmFnZT86IEhpdmVTdG9yYWdlO1xuXG4gICAgLyoqXG4gICAgICogRW5naW5lIHRhYmxlIHByb3BlcnRpZXMgYXMgYSBzdHJpbmfihpJzdHJpbmcgbWFwIChlLmcuIEljZWJlcmdcbiAgICAgKiBgd3JpdGUudGFyZ2V0LWZpbGUtc2l6ZS1ieXRlc2AsIEhpdmUgYHBhcnF1ZXQuY29tcHJlc3Npb25gKS4gT3B0aW9uYWwuXG4gICAgICogT25seSBrZXlzIHdpdGggYSBrbm93biwgY2xvc2VkIGxlZ2FsIGRvbWFpbiBhcmUgdmFsaWRhdGVkIHBlciBlbmdpbmU7XG4gICAgICogdW5rbm93biBrZXlzIHBhc3MgdGhyb3VnaCB1bnZhbGlkYXRlZC5cbiAgICAgKi9cbiAgICByZWFkb25seSB0YWJsZVByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cbiAgICAvKiogVXBzdHJlYW0gdGFibGVzIGluIGBzY2hlbWEudGFibGVgIGZvcm1hdC4gKi9cbiAgICByZWFkb25seSBkZXBlbmRzT246IHN0cmluZ1tdO1xuXG4gICAgLyoqIEZvcmVpZ24ga2V5cy4gKi9cbiAgICByZWFkb25seSBmb3JlaWduS2V5czogRm9yZWlnbktleVtdO1xufVxuXG4vKiogQSBzY2hlbWEtZGVzY3JpcHRpb24gZmlsZSdzIG5vcm1hbGl6ZWQgY29udGVudC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2NoZW1hRGVzY3JpcHRpb24ge1xuICAgIC8qKiBTcGVjIHZlcnNpb24gb2YgdGhlIGZpbGUuICovXG4gICAgcmVhZG9ubHkgc3BlY1ZlcnNpb246IHN0cmluZztcblxuICAgIC8qKiBIdW1hbiBkZXNjcmlwdGlvbi4gKi9cbiAgICByZWFkb25seSBkZXNjcmlwdGlvbjogc3RyaW5nO1xufVxuXG4vKiogU2V2ZXJpdHkgb2YgYSB2aW9sYXRpb24uICovXG5leHBvcnQgdHlwZSBWaW9sYXRpb25MZXZlbCA9ICdlcnJvcicgfCAnd2FybmluZyc7XG5cbi8qKiBBIHNpbmdsZSB2YWxpZGF0aW9uIGZpbmRpbmcuICovXG5leHBvcnQgaW50ZXJmYWNlIFZpb2xhdGlvbiB7XG4gICAgLyoqIFNldmVyaXR5LiBgZXJyb3JgIGZhaWxzIHZhbGlkYXRpb247IGB3YXJuaW5nYCBkb2VzIG5vdC4gKi9cbiAgICByZWFkb25seSBsZXZlbDogVmlvbGF0aW9uTGV2ZWw7XG5cbiAgICAvKiogU3RhYmxlIG1hY2hpbmUtcmVhZGFibGUgcnVsZSBjb2RlIChlLmcuIGBQS19DT0xVTU5TX0VYSVNUYCkuICovXG4gICAgcmVhZG9ubHkgY29kZTogc3RyaW5nO1xuXG4gICAgLyoqIE93bmluZyBzY2hlbWEsIGlmIGFwcGxpY2FibGUuICovXG4gICAgcmVhZG9ubHkgc2NoZW1hPzogc3RyaW5nO1xuXG4gICAgLyoqIE93bmluZyB0YWJsZSwgaWYgYXBwbGljYWJsZS4gKi9cbiAgICByZWFkb25seSB0YWJsZT86IHN0cmluZztcblxuICAgIC8qKiBGaWVsZCBwYXRoIHdpdGhpbiB0aGUgZmlsZSwgaWYgYXBwbGljYWJsZS4gKi9cbiAgICByZWFkb25seSBmaWVsZD86IHN0cmluZztcblxuICAgIC8qKiBTb3VyY2UgZmlsZSBwYXRoLCBpZiBhcHBsaWNhYmxlLiAqL1xuICAgIHJlYWRvbmx5IHBhdGg/OiBzdHJpbmc7XG5cbiAgICAvKiogSHVtYW4tcmVhZGFibGUgbWVzc2FnZS4gKi9cbiAgICByZWFkb25seSBtZXNzYWdlOiBzdHJpbmc7XG59XG5cbi8qKiBUaGUgYWdncmVnYXRlIHJlc3VsdCBvZiB2YWxpZGF0aW5nIGEgcm9vdC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmFsaWRhdGlvblJlc3VsdCB7XG4gICAgLyoqIFRydWUgd2hlbiB0aGVyZSBhcmUgbm8gYGVycm9yYC1sZXZlbCB2aW9sYXRpb25zLiAqL1xuICAgIHJlYWRvbmx5IG9rOiBib29sZWFuO1xuXG4gICAgLyoqIEFsbCBmaW5kaW5ncywgZXJyb3JzIGFuZCB3YXJuaW5ncy4gKi9cbiAgICByZWFkb25seSB2aW9sYXRpb25zOiBWaW9sYXRpb25bXTtcbn1cbiJdfQ==
@@ -31,7 +31,7 @@
31
31
  "type": "string",
32
32
  "enum": [
33
33
  "hive_parquet",
34
- "iceberg_parquet",
34
+ "iceberg_parquet_v2",
35
35
  "postgres_18"
36
36
  ]
37
37
  },
@@ -150,6 +150,9 @@
150
150
  "type": "string",
151
151
  "minLength": 1
152
152
  },
153
+ "id": {
154
+ "type": "integer"
155
+ },
153
156
  "nullable": {
154
157
  "type": "boolean"
155
158
  },
@@ -1,14 +1,23 @@
1
1
  /**
2
- * Iceberg (parquet) table type.
2
+ * Iceberg (parquet) format-version-2 table type.
3
3
  *
4
4
  * Iceberg partitions are transforms applied to a data column, so duplicate
5
5
  * detection keys on the (source column, normalized transform) pair — `year(ts)`
6
6
  * and `month(ts)` are distinct, while `day` and `DAY` collapse.
7
+ *
8
+ * The format version is encoded in the `tableType` discriminator: this engine is
9
+ * inherently v2, so a present `formatVersion` must equal `EXPECTED_FORMAT_VERSION`.
10
+ * A future `iceberg_parquet_v3` sibling subclass overrides that one constant.
7
11
  */
8
12
  import { Violation } from '../model';
9
13
  import { TableTypeBase } from '../table-type';
10
- /** Iceberg (parquet) table. */
11
- export declare class IcebergParquetTable extends TableTypeBase {
14
+ /** Iceberg (parquet) format-version-2 table. */
15
+ export declare class IcebergParquetV2Table extends TableTypeBase {
16
+ /**
17
+ * The Iceberg format version this engine pins to. A present `formatVersion`
18
+ * must equal this. A future v3 sibling subclass overrides this single value.
19
+ */
20
+ protected static readonly EXPECTED_FORMAT_VERSION = 2;
12
21
  /**
13
22
  * Validate a column type against the Iceberg v0 type registry.
14
23
  *
@@ -28,7 +37,6 @@ export declare class IcebergParquetTable extends TableTypeBase {
28
37
  * @returns Every partition-related violation.
29
38
  */
30
39
  partitionViolations(): Violation[];
31
- private static readonly FORMAT_VERSIONS;
32
40
  private static readonly ENUM_PROPERTIES;
33
41
  private static readonly POSITIVE_INT_PROPERTIES;
34
42
  private static readonly NON_NEGATIVE_INT_PROPERTIES;
@@ -42,6 +50,19 @@ export declare class IcebergParquetTable extends TableTypeBase {
42
50
  * @returns Every engine-specific violation.
43
51
  */
44
52
  engineSpecificViolations(): Violation[];
53
+ /**
54
+ * Validate Iceberg column field ids — the ids Iceberg uses for schema
55
+ * evolution. Pinning them keeps old data files readable across renames and
56
+ * drops, so they are all-or-nothing per table: either every column declares
57
+ * an `id` or none do. When present, each id must be a positive integer and
58
+ * unique within the table.
59
+ *
60
+ * Emits `ICEBERG_FIELD_ID_ALL_OR_NONE`, `ICEBERG_FIELD_ID_POSITIVE`, and
61
+ * `ICEBERG_FIELD_ID_UNIQUE`.
62
+ *
63
+ * @returns Every field-id violation.
64
+ */
65
+ private fieldIdViolations;
45
66
  /**
46
67
  * Validate the Iceberg sort order.
47
68
  *
@@ -76,11 +97,12 @@ export declare class IcebergParquetTable extends TableTypeBase {
76
97
  private commitRetryOrderingViolations;
77
98
  /**
78
99
  * Validate Iceberg identifier fields (the row-identity / equality-delete
79
- * key). Equality deletes are a format-version 2+ feature, and identifier
80
- * fields must be required primitive columns that are not float/double.
100
+ * key). Equality deletes are a v2 feature, which this engine inherently is;
101
+ * identifier fields must be required primitive columns that are not
102
+ * float/double.
81
103
  *
82
- * Emits `ICEBERG_IDENTIFIER_NEEDS_FORMAT_V2`, `ICEBERG_IDENTIFIER_COLUMN_EXISTS`,
83
- * `ICEBERG_IDENTIFIER_REQUIRED`, and `ICEBERG_IDENTIFIER_TYPE_PRIMITIVE`.
104
+ * Emits `ICEBERG_IDENTIFIER_COLUMN_EXISTS`, `ICEBERG_IDENTIFIER_REQUIRED`,
105
+ * and `ICEBERG_IDENTIFIER_TYPE_PRIMITIVE`.
84
106
  *
85
107
  * @returns Every identifier-field violation.
86
108
  */