flexdataset 0.5.0 → 0.6.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.
@@ -49,6 +49,9 @@ function asString(value) {
49
49
  function asBoolean(value) {
50
50
  return typeof value === 'boolean' ? value : false;
51
51
  }
52
+ function asOptionalBoolean(value) {
53
+ return typeof value === 'boolean' ? value : undefined;
54
+ }
52
55
  function asStringArray(value) {
53
56
  return asArray(value).filter((item) => typeof item === 'string');
54
57
  }
@@ -59,6 +62,7 @@ function normalizeColumns(value) {
59
62
  name: asString(record.name),
60
63
  type: asString(record.type),
61
64
  description: asString(record.description),
65
+ nullable: asOptionalBoolean(record.nullable),
62
66
  };
63
67
  });
64
68
  }
@@ -236,4 +240,4 @@ function loadRoot(rootDir) {
236
240
  violations,
237
241
  };
238
242
  }
239
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xvYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7O0dBUUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE0SEgsNEJBd0lDO0FBbFFELHVDQUF5QjtBQUN6QiwyQ0FBNkI7QUFVN0IsNkNBRXNCO0FBSXRCLHFEQUVnQztBQWVoQyxTQUFTLFFBQVEsQ0FBQyxLQUFjO0lBQzVCLE9BQU8sS0FBSyxLQUFLLElBQUksSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQWdDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMvRixDQUFDO0FBRUQsU0FBUyxPQUFPLENBQUMsS0FBYztJQUMzQixPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzdDLENBQUM7QUFFRCxTQUFTLFFBQVEsQ0FBQyxLQUFjO0lBQzVCLE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUNsRCxDQUFDO0FBRUQsU0FBUyxTQUFTLENBQUMsS0FBYztJQUM3QixPQUFPLE9BQU8sS0FBSyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDdEQsQ0FBQztBQUVELFNBQVMsYUFBYSxDQUFDLEtBQWM7SUFDakMsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFrQixFQUFFLENBQUMsT0FBTyxJQUFJLEtBQUssUUFBUSxDQUFDLENBQUM7QUFDckYsQ0FBQztBQUVELFNBQVMsZ0JBQWdCLENBQUMsS0FBYztJQUNwQyxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENB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T0FBTztZQUNQLFdBQVc7WUFDWCxNQUFNLEVBQUUsWUFBWTtTQUN2QixDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsT0FBTztRQUNILEtBQUssRUFBRTtZQUNILE9BQU8sRUFBRSxZQUFZO1lBQ3JCLE9BQU87WUFDUCxNQUFNO1NBQ1Q7UUFDRCxVQUFVO0tBQ2IsQ0FBQztBQUNOLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEZpbGVzeXN0ZW0gbG9hZGVyLiBXYWxrcyBhIGRhdGFzZXQgcm9vdCwgcGFyc2VzIGVhY2ggSlNPTiBmaWxlLCBydW5zIExheWVyIDFcbiAqIHN0cnVjdHVyYWwgdmFsaWRhdGlvbiwgYW5kIG5vcm1hbGl6ZXMgZXZlcnl0aGluZyBpbnRvIGEgYFdvcmxkYCBvZlxuICogY29uY3JldGUgYFRhYmxlVHlwZUJhc2VgIGluc3RhbmNlcyB0aGF0IHRoZSBzZW1hbnRpYyBydWxlcyBvcGVyYXRlIG9uLlxuICpcbiAqIFBhcnNlIGVycm9ycywgc3RydWN0dXJhbCBlcnJvcnMsIGFuZCBhIG1pc3Npbmcgc2NoZW1hLWRlc2NyaXB0aW9uIGZpbGUgYXJlXG4gKiByZXBvcnRlZCBoZXJlOyBhbGwgY3Jvc3MtZmllbGQgLyBjcm9zcy1maWxlIGxvZ2ljIGxpdmVzIGluIHRoZSB0YWJsZS10eXBlXG4gKiBjbGFzc2VzIChgLi90YWJsZS10eXBlLnRzYCwgYC4vdGFibGUtdHlwZXMvKmApLlxuICovXG5cbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5cbmltcG9ydCB7XG4gICAgQ29sdW1uLFxuICAgIEZvcmVpZ25LZXksXG4gICAgUGFydGl0aW9uLFxuICAgIFNjaGVtYURlc2NyaXB0aW9uLFxuICAgIFRhYmxlRGVmaW5pdGlvbixcbiAgICBWaW9sYXRpb24sXG59IGZyb20gJy4vbW9kZWwnO1xuaW1wb3J0IHtcbiAgICB2YWxpZGF0ZVN0cnVjdHVyZSxcbn0gZnJvbSAnLi9zdHJ1Y3R1cmFsJztcbmltcG9ydCB7XG4gICAgVGFibGVUeXBlQmFzZSxcbn0gZnJvbSAnLi90YWJsZS10eXBlJztcbmltcG9ydCB7XG4gICAgY3JlYXRlVGFibGVUeXBlLFxufSBmcm9tICcuL3RhYmxlLXR5cGVzL3JlZ2lzdHJ5JztcbmltcG9ydCB7XG4gICAgTG9hZGVkU2NoZW1hLFxuICAgIFdvcmxkLFxufSBmcm9tICcuL3dvcmxkJztcblxuLyoqIFJlc3VsdCBvZiBsb2FkaW5nIGEgcm9vdDogdGhlIG1vZGVsIHBsdXMgYW55IGxvYWQtdGltZSB2aW9sYXRpb25zLiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2FkT3V0Y29tZSB7XG4gICAgLyoqIFRoZSBsb2FkZWQgbW9kZWwuICovXG4gICAgcmVhZG9ubHkgd29ybGQ6IFdvcmxkO1xuXG4gICAgLyoqIFBhcnNlLCBzdHJ1Y3R1cmFsLCBhbmQgbWlzc2luZy1kZXNjcmlwdGlvbiB2aW9sYXRpb25zLiAqL1xuICAgIHJlYWRvbmx5IHZpb2xhdGlvbnM6IFZpb2xhdGlvbltdO1xufVxuXG5mdW5jdGlvbiBhc1JlY29yZCh2YWx1ZTogdW5rbm93bik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICByZXR1cm4gdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyA/IHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IDoge307XG59XG5cbmZ1bmN0aW9uIGFzQXJyYXkodmFsdWU6IHVua25vd24pOiB1bmtub3duW10ge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW107XG59XG5cbmZ1bmN0aW9uIGFzU3RyaW5nKHZhbHVlOiB1bmtub3duKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHZhbHVlIDogJyc7XG59XG5cbmZ1bmN0aW9uIGFzQm9vbGVhbih2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJyA/IHZhbHVlIDogZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGFzU3RyaW5nQXJyYXkodmFsdWU6IHVua25vd24pOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodmFsdWUpLmZpbHRlcigoaXRlbSk6IGl0ZW0gaXMgc3RyaW5nID0+IHR5cGVvZiBpdGVtID09PSAnc3RyaW5nJyk7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUNvbHVtbnModmFsdWU6IHVua25vd24pOiBDb2x1bW5bXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodmFsdWUpLm1hcCgocmF3KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlY29yZCA9IGFzUmVjb3JkKHJhdyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuYW1lOiBhc1N0cmluZyhyZWNvcmQubmFtZSksXG4gICAgICAgICAgICB0eXBlOiBhc1N0cmluZyhyZWNvcmQudHlwZSksXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogYXNTdHJpbmcocmVjb3JkLmRlc2NyaXB0aW9uKSxcbiAgICAgICAgfTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplUGFydGl0aW9ucyh2YWx1ZTogdW5rbm93bik6IFBhcnRpdGlvbltdIHtcbiAgICByZXR1cm4gYXNBcnJheSh2YWx1ZSkubWFwKChyYXcpID0+IHtcbiAgICAgICAgY29uc3QgcmVjb3JkID0gYXNSZWNvcmQocmF3KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5hbWU6IGFzU3RyaW5nKHJlY29yZC5uYW1lKSxcbiAgICAgICAgICAgIHR5cGU6IGFzU3RyaW5nKHJlY29yZC50eXBlKSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBhc1N0cmluZyhyZWNvcmQuZGVzY3JpcHRpb24pLFxuICAgICAgICB9O1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVGb3JlaWduS2V5cyh2YWx1ZTogdW5rbm93bik6IEZvcmVpZ25LZXlbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodmFsdWUpLm1hcCgocmF3KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlY29yZCA9IGFzUmVjb3JkKHJhdyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzb3VyY2VUYWJsZTogYXNTdHJpbmcocmVjb3JkLnNvdXJjZVRhYmxlKSxcbiAgICAgICAgICAgIHNvdXJjZUNvbHVtbjogYXNTdHJpbmcocmVjb3JkLnNvdXJjZUNvbHVtbiksXG4gICAgICAgICAgICBsb2NhbENvbHVtbjogYXNTdHJpbmcocmVjb3JkLmxvY2FsQ29sdW1uKSxcbiAgICAgICAgICAgIGFsbG93TnVsbHM6IGFzQm9vbGVhbihyZWNvcmQuYWxsb3dOdWxscyksXG4gICAgICAgIH07XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVRhYmxlRGVmaW5pdGlvbihyYXc6IHVua25vd24pOiBUYWJsZURlZmluaXRpb24ge1xuICAgIGNvbnN0IHJlY29yZCA9IGFzUmVjb3JkKHJhdyk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgc3BlY1ZlcnNpb246IGFzU3RyaW5nKHJlY29yZC5zcGVjVmVyc2lvbiksXG4gICAgICAgIGRlc2NyaXB0aW9uOiBhc1N0cmluZyhyZWNvcmQuZGVzY3JpcHRpb24pLFxuICAgICAgICB0YWJsZVR5cGU6IGFzU3RyaW5nKHJlY29yZC50YWJsZVR5cGUpLFxuICAgICAgICBpc1Jhd0RhdGE6IGFzQm9vbGVhbihyZWNvcmQuaXNSYXdEYXRhKSxcbiAgICAgICAgY29sdW1uczogbm9ybWFsaXplQ29sdW1ucyhyZWNvcmQuY29sdW1ucyksXG4gICAgICAgIHByaW1hcnlLZXk6IGFzU3RyaW5nQXJyYXkocmVjb3JkLnByaW1hcnlLZXkpLFxuICAgICAgICBwYXJ0aXRpb25zOiBub3JtYWxpemVQYXJ0aXRpb25zKHJlY29yZC5wYXJ0aXRpb25zKSxcbiAgICAgICAgZGVwZW5kc09uOiBhc1N0cmluZ0FycmF5KHJlY29yZC5kZXBlbmRzT24pLFxuICAgICAgICBmb3JlaWduS2V5czogbm9ybWFsaXplRm9yZWlnbktleXMocmVjb3JkLmZvcmVpZ25LZXlzKSxcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVTY2hlbWFEZXNjcmlwdGlvbihyYXc6IHVua25vd24pOiBTY2hlbWFEZXNjcmlwdGlvbiB7XG4gICAgY29uc3QgcmVjb3JkID0gYXNSZWNvcmQocmF3KTtcbiAgICByZXR1cm4ge1xuICAgICAgICBzcGVjVmVyc2lvbjogYXNTdHJpbmcocmVjb3JkLnNwZWNWZXJzaW9uKSxcbiAgICAgICAgZGVzY3JpcHRpb246IGFzU3RyaW5nKHJlY29yZC5kZXNjcmlwdGlvbiksXG4gICAgfTtcbn1cblxuLy8vIFNjaGVtYSBhbmQgdGFibGUgbmFtZXMgbXVzdCBiZSBsb3dlcmNhc2Ugc25ha2VfY2FzZSBzbyB0aGV5IGNhbiBiZSByZWZlcmVuY2VkXG4vLy8gZnJvbSBgZGVwZW5kc09uYCBhbmQgZm9yZWlnbiBrZXlzLCB3aG9zZSBwYXR0ZXJucyByZXF1aXJlIHRoZSBzYW1lIHNoYXBlLlxuY29uc3QgTkFNRV9SRSA9IC9eW2EtejAtOV9dKyQvO1xuXG4vKipcbiAqIExvYWQgYSBkYXRhc2V0IHJvb3QgaW50byBhIGBXb3JsZGAuXG4gKlxuICogQHBhcmFtIHJvb3REaXIgQWJzb2x1dGUgb3IgcmVsYXRpdmUgcGF0aCB0byB0aGUgZGF0YXNldCByb290LlxuICogQHJldHVybnMgVGhlIGxvYWRlZCB3b3JsZCBwbHVzIGxvYWQtdGltZSB2aW9sYXRpb25zLlxuICogQHRocm93cyBFcnJvciBXaGVuIGByb290RGlyYCBpcyBub3QgYW4gZXhpc3RpbmcgZGlyZWN0b3J5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZFJvb3Qocm9vdERpcjogc3RyaW5nKTogTG9hZE91dGNvbWUge1xuICAgIGNvbnN0IGFic29sdXRlUm9vdCA9IHBhdGgucmVzb2x2ZShyb290RGlyKTtcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMoYWJzb2x1dGVSb290KSB8fCAhZnMuc3RhdFN5bmMoYWJzb2x1dGVSb290KS5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgZGF0YXNldCByb290IGlzIG5vdCBhIGRpcmVjdG9yeTogJHthYnNvbHV0ZVJvb3R9YCk7XG4gICAgfVxuXG4gICAgY29uc3QgdmlvbGF0aW9uczogVmlvbGF0aW9uW10gPSBbXTtcbiAgICBjb25zdCBzY2hlbWFzID0gbmV3IE1hcDxzdHJpbmcsIExvYWRlZFNjaGVtYT4oKTtcbiAgICBjb25zdCB0YWJsZXMgPSBuZXcgTWFwPHN0cmluZywgVGFibGVUeXBlQmFzZT4oKTtcblxuICAgIGNvbnN0IHNjaGVtYURpcnMgPSBmcy5yZWFkZGlyU3luYyhhYnNvbHV0ZVJvb3QsIHtcbiAgICAgICAgd2l0aEZpbGVUeXBlczogdHJ1ZSxcbiAgICB9KS5maWx0ZXIoKGVudHJ5KSA9PiBlbnRyeS5pc0RpcmVjdG9yeSgpICYmICFlbnRyeS5uYW1lLnN0YXJ0c1dpdGgoJy4nKSlcbiAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSkpO1xuXG4gICAgZm9yIChjb25zdCBzY2hlbWFEaXIgb2Ygc2NoZW1hRGlycykge1xuICAgICAgICBjb25zdCBzY2hlbWFOYW1lID0gc2NoZW1hRGlyLm5hbWU7XG4gICAgICAgIGNvbnN0IGRpclBhdGggPSBwYXRoLmpvaW4oYWJzb2x1dGVSb290LCBzY2hlbWFOYW1lKTtcblxuICAgICAgICBpZiAoIU5BTUVfUkUudGVzdChzY2hlbWFOYW1lKSkge1xuICAgICAgICAgICAgdmlvbGF0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICBjb2RlOiAnU0NIRU1BX05BTUVfVkFMSUQnLFxuICAgICAgICAgICAgICAgIHNjaGVtYTogc2NoZW1hTmFtZSxcbiAgICAgICAgICAgICAgICBwYXRoOiBkaXJQYXRoLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBzY2hlbWEgbmFtZSBcIiR7c2NoZW1hTmFtZX1cIiBtdXN0IGJlIGxvd2VyY2FzZSBzbmFrZV9jYXNlIChtYXRjaGluZyAke05BTUVfUkV9KWAsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRlc2NGaWxlTmFtZSA9IGAke3NjaGVtYU5hbWV9Lmpzb25gO1xuICAgICAgICBjb25zdCBqc29uRmlsZXMgPSBmcy5yZWFkZGlyU3luYyhkaXJQYXRoKVxuICAgICAgICAgICAgLmZpbHRlcigoZmlsZSkgPT4gZmlsZS5lbmRzV2l0aCgnLmpzb24nKSlcbiAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLmxvY2FsZUNvbXBhcmUoYikpO1xuXG4gICAgICAgIGxldCBkZXNjcmlwdGlvbjogU2NoZW1hRGVzY3JpcHRpb24gfCBudWxsID0gbnVsbDtcbiAgICAgICAgY29uc3QgbG9hZGVkVGFibGVzOiBUYWJsZVR5cGVCYXNlW10gPSBbXTtcblxuICAgICAgICBmb3IgKGNvbnN0IGZpbGUgb2YganNvbkZpbGVzKSB7XG4gICAgICAgICAgICBjb25zdCBmaWxlUGF0aCA9IHBhdGguam9pbihkaXJQYXRoLCBmaWxlKTtcbiAgICAgICAgICAgIGNvbnN0IHRleHQgPSBmcy5yZWFkRmlsZVN5bmMoZmlsZVBhdGgsICd1dGYtOCcpO1xuXG4gICAgICAgICAgICBsZXQgcGFyc2VkOiB1bmtub3duO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBwYXJzZWQgPSBKU09OLnBhcnNlKHRleHQpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICB2aW9sYXRpb25zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgY29kZTogJ0ZJTEVfUEFSU0VfRVJST1InLFxuICAgICAgICAgICAgICAgICAgICBzY2hlbWE6IHNjaGVtYU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IGZpbGVQYXRoLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgaW52YWxpZCBKU09OOiAkeyhlcnJvciBhcyBFcnJvcikubWVzc2FnZX1gLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZmlsZSA9PT0gZGVzY0ZpbGVOYW1lKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0dXJhbCA9IHZhbGlkYXRlU3RydWN0dXJlKCdzY2hlbWEnLCBwYXJzZWQpO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgc3RydWN0dXJhbEVycm9yIG9mIHN0cnVjdHVyYWwuZXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6ICdTQ0hFTUFfVkFMSURBVElPTicsXG4gICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWE6IHNjaGVtYU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogc3RydWN0dXJhbEVycm9yLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGF0aDogZmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBzdHJ1Y3R1cmFsRXJyb3IubWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gbm9ybWFsaXplU2NoZW1hRGVzY3JpcHRpb24ocGFyc2VkKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgdGFibGVOYW1lID0gZmlsZS5zbGljZSgwLCAtJy5qc29uJy5sZW5ndGgpO1xuICAgICAgICAgICAgY29uc3QgcXVhbGlmaWVkTmFtZSA9IGAke3NjaGVtYU5hbWV9LiR7dGFibGVOYW1lfWA7XG5cbiAgICAgICAgICAgIGlmICghTkFNRV9SRS50ZXN0KHRhYmxlTmFtZSkpIHtcbiAgICAgICAgICAgICAgICB2aW9sYXRpb25zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgY29kZTogJ1RBQkxFX05BTUVfVkFMSUQnLFxuICAgICAgICAgICAgICAgICAgICBzY2hlbWE6IHNjaGVtYU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHRhYmxlOiB0YWJsZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IGZpbGVQYXRoLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgdGFibGUgbmFtZSBcIiR7dGFibGVOYW1lfVwiIG11c3QgYmUgbG93ZXJjYXNlIHNuYWtlX2Nhc2UgKG1hdGNoaW5nICR7TkFNRV9SRX0pYCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qgc3RydWN0dXJhbCA9IHZhbGlkYXRlU3RydWN0dXJlKCd0YWJsZScsIHBhcnNlZCk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHN0cnVjdHVyYWxFcnJvciBvZiBzdHJ1Y3R1cmFsLmVycm9ycykge1xuICAgICAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICBjb2RlOiAnU0NIRU1BX1ZBTElEQVRJT04nLFxuICAgICAgICAgICAgICAgICAgICBzY2hlbWE6IHNjaGVtYU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHRhYmxlOiB0YWJsZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkOiBzdHJ1Y3R1cmFsRXJyb3IuZmllbGQsXG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IGZpbGVQYXRoLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBzdHJ1Y3R1cmFsRXJyb3IubWVzc2FnZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbG9hZGVkVGFibGUgPSBjcmVhdGVUYWJsZVR5cGUoe1xuICAgICAgICAgICAgICAgIHNjaGVtYTogc2NoZW1hTmFtZSxcbiAgICAgICAgICAgICAgICBuYW1lOiB0YWJsZU5hbWUsXG4gICAgICAgICAgICAgICAgcXVhbGlmaWVkTmFtZSxcbiAgICAgICAgICAgICAgICBmaWxlUGF0aCxcbiAgICAgICAgICAgICAgICBzdHJ1Y3R1cmFsbHlWYWxpZDogc3RydWN0dXJhbC52YWxpZCxcbiAgICAgICAgICAgICAgICBkZWZpbml0aW9uOiBub3JtYWxpemVUYWJsZURlZmluaXRpb24ocGFyc2VkKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbG9hZGVkVGFibGVzLnB1c2gobG9hZGVkVGFibGUpO1xuICAgICAgICAgICAgdGFibGVzLnNldChxdWFsaWZpZWROYW1lLCBsb2FkZWRUYWJsZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGVzY3JpcHRpb24gPT09IG51bGwpIHtcbiAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgY29kZTogJ1NDSEVNQV9ERVNDX1BSRVNFTlQnLFxuICAgICAgICAgICAgICAgIHNjaGVtYTogc2NoZW1hTmFtZSxcbiAgICAgICAgICAgICAgICBwYXRoOiBwYXRoLmpvaW4oZGlyUGF0aCwgZGVzY0ZpbGVOYW1lKSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBgc2NoZW1hIFwiJHtzY2hlbWFOYW1lfVwiIGlzIG1pc3NpbmcgaXRzIGRlc2NyaXB0aW9uIGZpbGUgXCIke2Rlc2NGaWxlTmFtZX1cImAsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNjaGVtYXMuc2V0KHNjaGVtYU5hbWUsIHtcbiAgICAgICAgICAgIG5hbWU6IHNjaGVtYU5hbWUsXG4gICAgICAgICAgICBkaXJQYXRoLFxuICAgICAgICAgICAgZGVzY3JpcHRpb24sXG4gICAgICAgICAgICB0YWJsZXM6IGxvYWRlZFRhYmxlcyxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgd29ybGQ6IHtcbiAgICAgICAgICAgIHJvb3REaXI6IGFic29sdXRlUm9vdCxcbiAgICAgICAgICAgIHNjaGVtYXMsXG4gICAgICAgICAgICB0YWJsZXMsXG4gICAgICAgIH0sXG4gICAgICAgIHZpb2xhdGlvbnMsXG4gICAgfTtcbn1cbiJdfQ==
243
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xvYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7O0dBUUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFpSUgsNEJBd0lDO0FBdlFELHVDQUF5QjtBQUN6QiwyQ0FBNkI7QUFVN0IsNkNBRXNCO0FBSXRCLHFEQUVnQztBQWVoQyxTQUFTLFFBQVEsQ0FBQyxLQUFjO0lBQzVCLE9BQU8sS0FBSyxLQUFLLElBQUksSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQWdDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMvRixDQUFDO0FBRUQsU0FBUyxPQUFPLENBQUMsS0FBYztJQUMzQixPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzdDLENBQUM7QUFFRCxTQUFTLFFBQVEsQ0FBQyxLQUFjO0lBQzVCLE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUNsRCxDQUFDO0FBRUQsU0FBUyxTQUFTLENBQUMsS0FBYztJQUM3QixPQUFPLE9BQU8sS0FBSyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDdEQsQ0FBQztBQUVELFNBQVMsaUJBQWlCLENBQUMsS0FBYztJQUNyQyxPQUFPLE9BQU8sS0FBSyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDMUQsQ0FBQztBQUVELFNBQVMsYUFBYSxDQUFDLEtBQWM7SUFDakMsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFrQixFQUFFLENBQUMsT0FBTyxJQUFJLEtBQUssUUFBUSxDQUFDLENBQUM7QUFDckYsQ0FBQztBQUVELFNBQVMsZ0JBQWdCLENBQUMsS0FBYztJQUNwQyxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtRQUM5QixNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDN0IsT0FBTztZQUNILElBQUksRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztZQUMzQixJQUFJLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7WUFDM0IsV0FBVyxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDO1lBQ3pDLFFBQVEsRUFBRSxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO1NBQy9DLENBQUM7SUFDTixDQUFDLENBQUMsQ0FBQztBQUNQLENBQUM7QUFFRCxTQUFTLG1CQUFtQixDQUFDLEtBQWM7SUFDdkMsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7UUFDOUIsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzdCLE9BQU87WUFDSCxJQUFJLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7WUFDM0IsSUFBSSxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQzNCLFdBQVcsRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQztTQUM1QyxDQUFDO0lBQ04sQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDO0FBRUQsU0FBUyxvQkFBb0IsQ0FBQyxLQUFjO0lBQ3hDLE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1FBQzlCLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM3QixPQUFPO1lBQ0gsV0FBVyxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDO1lBQ3pDLFlBQVksRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQztZQUMzQyxXQUFXLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUM7WUFDekMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDO1NBQzNDLENBQUM7SUFDTixDQUFDLENBQUMsQ0FBQztBQUNQLENBQUM7QUFFRCxTQUFTLHdCQUF3QixDQUFDLEdBQVk7SUFDMUMsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzdCLE9BQU87UUFDSCxXQUFXLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUM7UUFDekMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDO1FBQ3pDLFNBQVMsRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQztRQUNyQyxTQUFTLEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7UUFDdEMsT0FBTyxFQUFFLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUM7UUFDekMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDO1FBQzVDLFVBQVUsRUFBRSxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDO1FBQ2xELFNBQVMsRUFBRSxhQUFhLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQztRQUMxQyxXQUFXLEVBQUUsb0JBQW9CLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQztLQUN4RCxDQUFDO0FBQ04sQ0FBQztBQUVELFNBQVMsMEJBQTBCLENBQUMsR0FBWTtJQUM1QyxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDN0IsT0FBTztRQUNILFdBQVcsRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQztRQUN6QyxXQUFXLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUM7S0FDNUMsQ0FBQztBQUNOLENBQUM7QUFFRCxpRkFBaUY7QUFDakYsNkVBQTZFO0FBQzdFLE1BQU0sT0FBTyxHQUFHLGNBQWMsQ0FBQztBQUUvQjs7Ozs7O0dBTUc7QUFDSCxTQUFnQixRQUFRLENBQUMsT0FBZTtJQUNwQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzNDLElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO1FBQzNFLE1BQU0sSUFBSSxLQUFLLENBQUMsb0NBQW9DLFlBQVksRUFBRSxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVELE1BQU0sVUFBVSxHQUFnQixFQUFFLENBQUM7SUFDbkMsTUFBTSxPQUFPLEdBQUcsSUFBSSxHQUFHLEVBQXdCLENBQUM7SUFDaEQsTUFBTSxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQXlCLENBQUM7SUFFaEQsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUU7UUFDNUMsYUFBYSxFQUFFLElBQUk7S0FDdEIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDbkUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFFbEQsS0FBSyxNQUFNLFNBQVMsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUNqQyxNQUFNLFVBQVUsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDO1FBQ2xDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBRXBELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDNUIsVUFBVSxDQUFDLElBQUksQ0FBQztnQkFDWixLQUFLLEVBQUUsT0FBTztnQkFDZCxJQUFJLEVBQUUsbUJBQW1CO2dCQUN6QixNQUFNLEVBQUUsVUFBVTtnQkFDbEIsSUFBSSxFQUFFLE9BQU87Z0JBQ2IsT0FBTyxFQUFFLGdCQUFnQixVQUFVLDRDQUE0QyxPQUFPLEdBQUc7YUFDNUYsQ0FBQyxDQUFDO1FBQ1AsQ0FBQztRQUVELE1BQU0sWUFBWSxHQUFHLEdBQUcsVUFBVSxPQUFPLENBQUM7UUFDMUMsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUM7YUFDcEMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQ3hDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV4QyxJQUFJLFdBQVcsR0FBNkIsSUFBSSxDQUFDO1FBQ2pELE1BQU0sWUFBWSxHQUFvQixFQUFFLENBQUM7UUFFekMsS0FBSyxNQUFNLElBQUksSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUMzQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztZQUMxQyxNQUFNLElBQUksR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUVoRCxJQUFJLE1BQWUsQ0FBQztZQUNwQixJQUFJLENBQUM7Z0JBQ0QsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDOUIsQ0FBQztZQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7Z0JBQ2IsVUFBVSxDQUFDLElBQUksQ0FBQztvQkFDWixLQUFLLEVBQUUsT0FBTztvQkFDZCxJQUFJLEVBQUUsa0JBQWtCO29CQUN4QixNQUFNLEVBQUUsVUFBVTtvQkFDbEIsSUFBSSxFQUFFLFFBQVE7b0JBQ2QsT0FBTyxFQUFFLGlCQUFrQixLQUFlLENBQUMsT0FBTyxFQUFFO2lCQUN2RCxDQUFDLENBQUM7Z0JBQ0gsU0FBUztZQUNiLENBQUM7WUFFRCxJQUFJLElBQUksS0FBSyxZQUFZLEVBQUUsQ0FBQztnQkFDeEIsTUFBTSxVQUFVLEdBQUcsSUFBQSw4QkFBaUIsRUFBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQ3ZELEtBQUssTUFBTSxlQUFlLElBQUksVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUM5QyxVQUFVLENBQUMsSUFBSSxDQUFDO3dCQUNaLEtBQUssRUFBRSxPQUFPO3dCQUNkLElBQUksRUFBRSxtQkFBbUI7d0JBQ3pCLE1BQU0sRUFBRSxVQUFVO3dCQUNsQixLQUFLLEVBQUUsZUFBZSxDQUFDLEtBQUs7d0JBQzVCLElBQUksRUFBRSxRQUFRO3dCQUNkLE9BQU8sRUFBRSxlQUFlLENBQUMsT0FBTztxQkFDbkMsQ0FBQyxDQUFDO2dCQUNQLENBQUM7Z0JBQ0QsV0FBVyxHQUFHLDBCQUEwQixDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUNqRCxTQUFTO1lBQ2IsQ0FBQztZQUVELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2pELE1BQU0sYUFBYSxHQUFHLEdBQUcsVUFBVSxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBRW5ELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7Z0JBQzNCLFVBQVUsQ0FBQyxJQUFJLENBQUM7b0JBQ1osS0FBSyxFQUFFLE9BQU87b0JBQ2QsSUFBSSxFQUFFLGtCQUFrQjtvQkFDeEIsTUFBTSxFQUFFLFVBQVU7b0JBQ2xCLEtBQUssRUFBRSxTQUFTO29CQUNoQixJQUFJLEVBQUUsUUFBUTtvQkFDZCxPQUFPLEVBQUUsZUFBZSxTQUFTLDRDQUE0QyxPQUFPLEdBQUc7aUJBQzFGLENBQUMsQ0FBQztZQUNQLENBQUM7WUFFRCxNQUFNLFVBQVUsR0FBRyxJQUFBLDhCQUFpQixFQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztZQUN0RCxLQUFLLE1BQU0sZUFBZSxJQUFJLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDOUMsVUFBVSxDQUFDLElBQUksQ0FBQztvQkFDWixLQUFLLEVBQUUsT0FBTztvQkFDZCxJQUFJLEVBQUUsbUJBQW1CO29CQUN6QixNQUFNLEVBQUUsVUFBVTtvQkFDbEIsS0FBSyxFQUFFLFNBQVM7b0JBQ2hCLEtBQUssRUFBRSxlQUFlLENBQUMsS0FBSztvQkFDNUIsSUFBSSxFQUFFLFFBQVE7b0JBQ2QsT0FBTyxFQUFFLGVBQWUsQ0FBQyxPQUFPO2lCQUNuQyxDQUFDLENBQUM7WUFDUCxDQUFDO1lBRUQsTUFBTSxXQUFXLEdBQUcsSUFBQSwwQkFBZSxFQUFDO2dCQUNoQyxNQUFNLEVBQUUsVUFBVTtnQkFDbEIsSUFBSSxFQUFFLFNBQVM7Z0JBQ2YsYUFBYTtnQkFDYixRQUFRO2dCQUNSLGlCQUFpQixFQUFFLFVBQVUsQ0FBQyxLQUFLO2dCQUNuQyxVQUFVLEVBQUUsd0JBQXdCLENBQUMsTUFBTSxDQUFDO2FBQy9DLENBQUMsQ0FBQztZQUNILFlBQVksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDL0IsTUFBTSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDM0MsQ0FBQztRQUVELElBQUksV0FBVyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ3ZCLFVBQVUsQ0FBQyxJQUFJLENBQUM7Z0JBQ1osS0FBSyxFQUFFLE9BQU87Z0JBQ2QsSUFBSSxFQUFFLHFCQUFxQjtnQkFDM0IsTUFBTSxFQUFFLFVBQVU7Z0JBQ2xCLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUM7Z0JBQ3RDLE9BQU8sRUFBRSxXQUFXLFVBQVUsc0NBQXNDLFlBQVksR0FBRzthQUN0RixDQUFDLENBQUM7UUFDUCxDQUFDO1FBRUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUU7WUFDcEIsSUFBSSxFQUFFLFVBQVU7WUFDaEIsT0FBTztZQUNQLFdBQVc7WUFDWCxNQUFNLEVBQUUsWUFBWTtTQUN2QixDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsT0FBTztRQUNILEtBQUssRUFBRTtZQUNILE9BQU8sRUFBRSxZQUFZO1lBQ3JCLE9BQU87WUFDUCxNQUFNO1NBQ1Q7UUFDRCxVQUFVO0tBQ2IsQ0FBQztBQUNOLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEZpbGVzeXN0ZW0gbG9hZGVyLiBXYWxrcyBhIGRhdGFzZXQgcm9vdCwgcGFyc2VzIGVhY2ggSlNPTiBmaWxlLCBydW5zIExheWVyIDFcbiAqIHN0cnVjdHVyYWwgdmFsaWRhdGlvbiwgYW5kIG5vcm1hbGl6ZXMgZXZlcnl0aGluZyBpbnRvIGEgYFdvcmxkYCBvZlxuICogY29uY3JldGUgYFRhYmxlVHlwZUJhc2VgIGluc3RhbmNlcyB0aGF0IHRoZSBzZW1hbnRpYyBydWxlcyBvcGVyYXRlIG9uLlxuICpcbiAqIFBhcnNlIGVycm9ycywgc3RydWN0dXJhbCBlcnJvcnMsIGFuZCBhIG1pc3Npbmcgc2NoZW1hLWRlc2NyaXB0aW9uIGZpbGUgYXJlXG4gKiByZXBvcnRlZCBoZXJlOyBhbGwgY3Jvc3MtZmllbGQgLyBjcm9zcy1maWxlIGxvZ2ljIGxpdmVzIGluIHRoZSB0YWJsZS10eXBlXG4gKiBjbGFzc2VzIChgLi90YWJsZS10eXBlLnRzYCwgYC4vdGFibGUtdHlwZXMvKmApLlxuICovXG5cbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5cbmltcG9ydCB7XG4gICAgQ29sdW1uLFxuICAgIEZvcmVpZ25LZXksXG4gICAgUGFydGl0aW9uLFxuICAgIFNjaGVtYURlc2NyaXB0aW9uLFxuICAgIFRhYmxlRGVmaW5pdGlvbixcbiAgICBWaW9sYXRpb24sXG59IGZyb20gJy4vbW9kZWwnO1xuaW1wb3J0IHtcbiAgICB2YWxpZGF0ZVN0cnVjdHVyZSxcbn0gZnJvbSAnLi9zdHJ1Y3R1cmFsJztcbmltcG9ydCB7XG4gICAgVGFibGVUeXBlQmFzZSxcbn0gZnJvbSAnLi90YWJsZS10eXBlJztcbmltcG9ydCB7XG4gICAgY3JlYXRlVGFibGVUeXBlLFxufSBmcm9tICcuL3RhYmxlLXR5cGVzL3JlZ2lzdHJ5JztcbmltcG9ydCB7XG4gICAgTG9hZGVkU2NoZW1hLFxuICAgIFdvcmxkLFxufSBmcm9tICcuL3dvcmxkJztcblxuLyoqIFJlc3VsdCBvZiBsb2FkaW5nIGEgcm9vdDogdGhlIG1vZGVsIHBsdXMgYW55IGxvYWQtdGltZSB2aW9sYXRpb25zLiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2FkT3V0Y29tZSB7XG4gICAgLyoqIFRoZSBsb2FkZWQgbW9kZWwuICovXG4gICAgcmVhZG9ubHkgd29ybGQ6IFdvcmxkO1xuXG4gICAgLyoqIFBhcnNlLCBzdHJ1Y3R1cmFsLCBhbmQgbWlzc2luZy1kZXNjcmlwdGlvbiB2aW9sYXRpb25zLiAqL1xuICAgIHJlYWRvbmx5IHZpb2xhdGlvbnM6IFZpb2xhdGlvbltdO1xufVxuXG5mdW5jdGlvbiBhc1JlY29yZCh2YWx1ZTogdW5rbm93bik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICByZXR1cm4gdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyA/IHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IDoge307XG59XG5cbmZ1bmN0aW9uIGFzQXJyYXkodmFsdWU6IHVua25vd24pOiB1bmtub3duW10ge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW107XG59XG5cbmZ1bmN0aW9uIGFzU3RyaW5nKHZhbHVlOiB1bmtub3duKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHZhbHVlIDogJyc7XG59XG5cbmZ1bmN0aW9uIGFzQm9vbGVhbih2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJyA/IHZhbHVlIDogZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGFzT3B0aW9uYWxCb29sZWFuKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nID8gdmFsdWUgOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGFzU3RyaW5nQXJyYXkodmFsdWU6IHVua25vd24pOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodmFsdWUpLmZpbHRlcigoaXRlbSk6IGl0ZW0gaXMgc3RyaW5nID0+IHR5cGVvZiBpdGVtID09PSAnc3RyaW5nJyk7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUNvbHVtbnModmFsdWU6IHVua25vd24pOiBDb2x1bW5bXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodmFsdWUpLm1hcCgocmF3KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlY29yZCA9IGFzUmVjb3JkKHJhdyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuYW1lOiBhc1N0cmluZyhyZWNvcmQubmFtZSksXG4gICAgICAgICAgICB0eXBlOiBhc1N0cmluZyhyZWNvcmQudHlwZSksXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogYXNTdHJpbmcocmVjb3JkLmRlc2NyaXB0aW9uKSxcbiAgICAgICAgICAgIG51bGxhYmxlOiBhc09wdGlvbmFsQm9vbGVhbihyZWNvcmQubnVsbGFibGUpLFxuICAgICAgICB9O1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVQYXJ0aXRpb25zKHZhbHVlOiB1bmtub3duKTogUGFydGl0aW9uW10ge1xuICAgIHJldHVybiBhc0FycmF5KHZhbHVlKS5tYXAoKHJhdykgPT4ge1xuICAgICAgICBjb25zdCByZWNvcmQgPSBhc1JlY29yZChyYXcpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmFtZTogYXNTdHJpbmcocmVjb3JkLm5hbWUpLFxuICAgICAgICAgICAgdHlwZTogYXNTdHJpbmcocmVjb3JkLnR5cGUpLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IGFzU3RyaW5nKHJlY29yZC5kZXNjcmlwdGlvbiksXG4gICAgICAgIH07XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUZvcmVpZ25LZXlzKHZhbHVlOiB1bmtub3duKTogRm9yZWlnbktleVtdIHtcbiAgICByZXR1cm4gYXNBcnJheSh2YWx1ZSkubWFwKChyYXcpID0+IHtcbiAgICAgICAgY29uc3QgcmVjb3JkID0gYXNSZWNvcmQocmF3KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNvdXJjZVRhYmxlOiBhc1N0cmluZyhyZWNvcmQuc291cmNlVGFibGUpLFxuICAgICAgICAgICAgc291cmNlQ29sdW1uOiBhc1N0cmluZyhyZWNvcmQuc291cmNlQ29sdW1uKSxcbiAgICAgICAgICAgIGxvY2FsQ29sdW1uOiBhc1N0cmluZyhyZWNvcmQubG9jYWxDb2x1bW4pLFxuICAgICAgICAgICAgYWxsb3dOdWxsczogYXNCb29sZWFuKHJlY29yZC5hbGxvd051bGxzKSxcbiAgICAgICAgfTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplVGFibGVEZWZpbml0aW9uKHJhdzogdW5rbm93bik6IFRhYmxlRGVmaW5pdGlvbiB7XG4gICAgY29uc3QgcmVjb3JkID0gYXNSZWNvcmQocmF3KTtcbiAgICByZXR1cm4ge1xuICAgICAgICBzcGVjVmVyc2lvbjogYXNTdHJpbmcocmVjb3JkLnNwZWNWZXJzaW9uKSxcbiAgICAgICAgZGVzY3JpcHRpb246IGFzU3RyaW5nKHJlY29yZC5kZXNjcmlwdGlvbiksXG4gICAgICAgIHRhYmxlVHlwZTogYXNTdHJpbmcocmVjb3JkLnRhYmxlVHlwZSksXG4gICAgICAgIGlzUmF3RGF0YTogYXNCb29sZWFuKHJlY29yZC5pc1Jhd0RhdGEpLFxuICAgICAgICBjb2x1bW5zOiBub3JtYWxpemVDb2x1bW5zKHJlY29yZC5jb2x1bW5zKSxcbiAgICAgICAgcHJpbWFyeUtleTogYXNTdHJpbmdBcnJheShyZWNvcmQucHJpbWFyeUtleSksXG4gICAgICAgIHBhcnRpdGlvbnM6IG5vcm1hbGl6ZVBhcnRpdGlvbnMocmVjb3JkLnBhcnRpdGlvbnMpLFxuICAgICAgICBkZXBlbmRzT246IGFzU3RyaW5nQXJyYXkocmVjb3JkLmRlcGVuZHNPbiksXG4gICAgICAgIGZvcmVpZ25LZXlzOiBub3JtYWxpemVGb3JlaWduS2V5cyhyZWNvcmQuZm9yZWlnbktleXMpLFxuICAgIH07XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVNjaGVtYURlc2NyaXB0aW9uKHJhdzogdW5rbm93bik6IFNjaGVtYURlc2NyaXB0aW9uIHtcbiAgICBjb25zdCByZWNvcmQgPSBhc1JlY29yZChyYXcpO1xuICAgIHJldHVybiB7XG4gICAgICAgIHNwZWNWZXJzaW9uOiBhc1N0cmluZyhyZWNvcmQuc3BlY1ZlcnNpb24pLFxuICAgICAgICBkZXNjcmlwdGlvbjogYXNTdHJpbmcocmVjb3JkLmRlc2NyaXB0aW9uKSxcbiAgICB9O1xufVxuXG4vLy8gU2NoZW1hIGFuZCB0YWJsZSBuYW1lcyBtdXN0IGJlIGxvd2VyY2FzZSBzbmFrZV9jYXNlIHNvIHRoZXkgY2FuIGJlIHJlZmVyZW5jZWRcbi8vLyBmcm9tIGBkZXBlbmRzT25gIGFuZCBmb3JlaWduIGtleXMsIHdob3NlIHBhdHRlcm5zIHJlcXVpcmUgdGhlIHNhbWUgc2hhcGUuXG5jb25zdCBOQU1FX1JFID0gL15bYS16MC05X10rJC87XG5cbi8qKlxuICogTG9hZCBhIGRhdGFzZXQgcm9vdCBpbnRvIGEgYFdvcmxkYC5cbiAqXG4gKiBAcGFyYW0gcm9vdERpciBBYnNvbHV0ZSBvciByZWxhdGl2ZSBwYXRoIHRvIHRoZSBkYXRhc2V0IHJvb3QuXG4gKiBAcmV0dXJucyBUaGUgbG9hZGVkIHdvcmxkIHBsdXMgbG9hZC10aW1lIHZpb2xhdGlvbnMuXG4gKiBAdGhyb3dzIEVycm9yIFdoZW4gYHJvb3REaXJgIGlzIG5vdCBhbiBleGlzdGluZyBkaXJlY3RvcnkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkUm9vdChyb290RGlyOiBzdHJpbmcpOiBMb2FkT3V0Y29tZSB7XG4gICAgY29uc3QgYWJzb2x1dGVSb290ID0gcGF0aC5yZXNvbHZlKHJvb3REaXIpO1xuICAgIGlmICghZnMuZXhpc3RzU3luYyhhYnNvbHV0ZVJvb3QpIHx8ICFmcy5zdGF0U3luYyhhYnNvbHV0ZVJvb3QpLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBkYXRhc2V0IHJvb3QgaXMgbm90IGEgZGlyZWN0b3J5OiAke2Fic29sdXRlUm9vdH1gKTtcbiAgICB9XG5cbiAgICBjb25zdCB2aW9sYXRpb25zOiBWaW9sYXRpb25bXSA9IFtdO1xuICAgIGNvbnN0IHNjaGVtYXMgPSBuZXcgTWFwPHN0cmluZywgTG9hZGVkU2NoZW1hPigpO1xuICAgIGNvbnN0IHRhYmxlcyA9IG5ldyBNYXA8c3RyaW5nLCBUYWJsZVR5cGVCYXNlPigpO1xuXG4gICAgY29uc3Qgc2NoZW1hRGlycyA9IGZzLnJlYWRkaXJTeW5jKGFic29sdXRlUm9vdCwge1xuICAgICAgICB3aXRoRmlsZVR5cGVzOiB0cnVlLFxuICAgIH0pLmZpbHRlcigoZW50cnkpID0+IGVudHJ5LmlzRGlyZWN0b3J5KCkgJiYgIWVudHJ5Lm5hbWUuc3RhcnRzV2l0aCgnLicpKVxuICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKSk7XG5cbiAgICBmb3IgKGNvbnN0IHNjaGVtYURpciBvZiBzY2hlbWFEaXJzKSB7XG4gICAgICAgIGNvbnN0IHNjaGVtYU5hbWUgPSBzY2hlbWFEaXIubmFtZTtcbiAgICAgICAgY29uc3QgZGlyUGF0aCA9IHBhdGguam9pbihhYnNvbHV0ZVJvb3QsIHNjaGVtYU5hbWUpO1xuXG4gICAgICAgIGlmICghTkFNRV9SRS50ZXN0KHNjaGVtYU5hbWUpKSB7XG4gICAgICAgICAgICB2aW9sYXRpb25zLnB1c2goe1xuICAgICAgICAgICAgICAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgIGNvZGU6ICdTQ0hFTUFfTkFNRV9WQUxJRCcsXG4gICAgICAgICAgICAgICAgc2NoZW1hOiBzY2hlbWFOYW1lLFxuICAgICAgICAgICAgICAgIHBhdGg6IGRpclBhdGgsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYHNjaGVtYSBuYW1lIFwiJHtzY2hlbWFOYW1lfVwiIG11c3QgYmUgbG93ZXJjYXNlIHNuYWtlX2Nhc2UgKG1hdGNoaW5nICR7TkFNRV9SRX0pYCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGVzY0ZpbGVOYW1lID0gYCR7c2NoZW1hTmFtZX0uanNvbmA7XG4gICAgICAgIGNvbnN0IGpzb25GaWxlcyA9IGZzLnJlYWRkaXJTeW5jKGRpclBhdGgpXG4gICAgICAgICAgICAuZmlsdGVyKChmaWxlKSA9PiBmaWxlLmVuZHNXaXRoKCcuanNvbicpKVxuICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEubG9jYWxlQ29tcGFyZShiKSk7XG5cbiAgICAgICAgbGV0IGRlc2NyaXB0aW9uOiBTY2hlbWFEZXNjcmlwdGlvbiB8IG51bGwgPSBudWxsO1xuICAgICAgICBjb25zdCBsb2FkZWRUYWJsZXM6IFRhYmxlVHlwZUJhc2VbXSA9IFtdO1xuXG4gICAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBqc29uRmlsZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVQYXRoID0gcGF0aC5qb2luKGRpclBhdGgsIGZpbGUpO1xuICAgICAgICAgICAgY29uc3QgdGV4dCA9IGZzLnJlYWRGaWxlU3luYyhmaWxlUGF0aCwgJ3V0Zi04Jyk7XG5cbiAgICAgICAgICAgIGxldCBwYXJzZWQ6IHVua25vd247XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHBhcnNlZCA9IEpTT04ucGFyc2UodGV4dCk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICBjb2RlOiAnRklMRV9QQVJTRV9FUlJPUicsXG4gICAgICAgICAgICAgICAgICAgIHNjaGVtYTogc2NoZW1hTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgcGF0aDogZmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBpbnZhbGlkIEpTT046ICR7KGVycm9yIGFzIEVycm9yKS5tZXNzYWdlfWAsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChmaWxlID09PSBkZXNjRmlsZU5hbWUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3R1cmFsID0gdmFsaWRhdGVTdHJ1Y3R1cmUoJ3NjaGVtYScsIHBhcnNlZCk7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBzdHJ1Y3R1cmFsRXJyb3Igb2Ygc3RydWN0dXJhbC5lcnJvcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgdmlvbGF0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogJ1NDSEVNQV9WQUxJREFUSU9OJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYTogc2NoZW1hTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiBzdHJ1Y3R1cmFsRXJyb3IuZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRoOiBmaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IHN0cnVjdHVyYWxFcnJvci5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gPSBub3JtYWxpemVTY2hlbWFEZXNjcmlwdGlvbihwYXJzZWQpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB0YWJsZU5hbWUgPSBmaWxlLnNsaWNlKDAsIC0nLmpzb24nLmxlbmd0aCk7XG4gICAgICAgICAgICBjb25zdCBxdWFsaWZpZWROYW1lID0gYCR7c2NoZW1hTmFtZX0uJHt0YWJsZU5hbWV9YDtcblxuICAgICAgICAgICAgaWYgKCFOQU1FX1JFLnRlc3QodGFibGVOYW1lKSkge1xuICAgICAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICBjb2RlOiAnVEFCTEVfTkFNRV9WQUxJRCcsXG4gICAgICAgICAgICAgICAgICAgIHNjaGVtYTogc2NoZW1hTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgdGFibGU6IHRhYmxlTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgcGF0aDogZmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGB0YWJsZSBuYW1lIFwiJHt0YWJsZU5hbWV9XCIgbXVzdCBiZSBsb3dlcmNhc2Ugc25ha2VfY2FzZSAobWF0Y2hpbmcgJHtOQU1FX1JFfSlgLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBzdHJ1Y3R1cmFsID0gdmFsaWRhdGVTdHJ1Y3R1cmUoJ3RhYmxlJywgcGFyc2VkKTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qgc3RydWN0dXJhbEVycm9yIG9mIHN0cnVjdHVyYWwuZXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgdmlvbGF0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgIGNvZGU6ICdTQ0hFTUFfVkFMSURBVElPTicsXG4gICAgICAgICAgICAgICAgICAgIHNjaGVtYTogc2NoZW1hTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgdGFibGU6IHRhYmxlTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgZmllbGQ6IHN0cnVjdHVyYWxFcnJvci5maWVsZCxcbiAgICAgICAgICAgICAgICAgICAgcGF0aDogZmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IHN0cnVjdHVyYWxFcnJvci5tZXNzYWdlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBsb2FkZWRUYWJsZSA9IGNyZWF0ZVRhYmxlVHlwZSh7XG4gICAgICAgICAgICAgICAgc2NoZW1hOiBzY2hlbWFOYW1lLFxuICAgICAgICAgICAgICAgIG5hbWU6IHRhYmxlTmFtZSxcbiAgICAgICAgICAgICAgICBxdWFsaWZpZWROYW1lLFxuICAgICAgICAgICAgICAgIGZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIHN0cnVjdHVyYWxseVZhbGlkOiBzdHJ1Y3R1cmFsLnZhbGlkLFxuICAgICAgICAgICAgICAgIGRlZmluaXRpb246IG5vcm1hbGl6ZVRhYmxlRGVmaW5pdGlvbihwYXJzZWQpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBsb2FkZWRUYWJsZXMucHVzaChsb2FkZWRUYWJsZSk7XG4gICAgICAgICAgICB0YWJsZXMuc2V0KHF1YWxpZmllZE5hbWUsIGxvYWRlZFRhYmxlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkZXNjcmlwdGlvbiA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdmlvbGF0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICBjb2RlOiAnU0NIRU1BX0RFU0NfUFJFU0VOVCcsXG4gICAgICAgICAgICAgICAgc2NoZW1hOiBzY2hlbWFOYW1lLFxuICAgICAgICAgICAgICAgIHBhdGg6IHBhdGguam9pbihkaXJQYXRoLCBkZXNjRmlsZU5hbWUpLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBzY2hlbWEgXCIke3NjaGVtYU5hbWV9XCIgaXMgbWlzc2luZyBpdHMgZGVzY3JpcHRpb24gZmlsZSBcIiR7ZGVzY0ZpbGVOYW1lfVwiYCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgc2NoZW1hcy5zZXQoc2NoZW1hTmFtZSwge1xuICAgICAgICAgICAgbmFtZTogc2NoZW1hTmFtZSxcbiAgICAgICAgICAgIGRpclBhdGgsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbixcbiAgICAgICAgICAgIHRhYmxlczogbG9hZGVkVGFibGVzLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICB3b3JsZDoge1xuICAgICAgICAgICAgcm9vdERpcjogYWJzb2x1dGVSb290LFxuICAgICAgICAgICAgc2NoZW1hcyxcbiAgICAgICAgICAgIHRhYmxlcyxcbiAgICAgICAgfSxcbiAgICAgICAgdmlvbGF0aW9ucyxcbiAgICB9O1xufVxuIl19
@@ -23,6 +23,13 @@ export interface Column {
23
23
  readonly type: string;
24
24
  /** Human description. */
25
25
  readonly description: string;
26
+ /**
27
+ * Whether the column may hold null. Optional: when omitted, nullability is
28
+ * unspecified and the nullability cross-checks do not fire. `false` marks a
29
+ * NOT NULL column (Iceberg `required`); `true` marks an explicitly nullable
30
+ * column.
31
+ */
32
+ readonly nullable?: boolean;
26
33
  }
27
34
  /**
28
35
  * A partition entry. The meaning of `name` and `type` is engine-specific: for
package/dist/src/model.js CHANGED
@@ -23,4 +23,4 @@ exports.TABLE_TYPES = [
23
23
  TableType.ICEBERG_PARQUET,
24
24
  TableType.POSTGRES_18,
25
25
  ];
26
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7OztHQVFHOzs7QUFFSCx3RUFBd0U7QUFDeEUsSUFBWSxTQUlYO0FBSkQsV0FBWSxTQUFTO0lBQ2pCLDBDQUE2QixDQUFBO0lBQzdCLGdEQUFtQyxDQUFBO0lBQ25DLHdDQUEyQixDQUFBO0FBQy9CLENBQUMsRUFKVyxTQUFTLHlCQUFULFNBQVMsUUFJcEI7QUFFRCw2REFBNkQ7QUFDaEQsUUFBQSxXQUFXLEdBQXNCO0lBQzFDLFNBQVMsQ0FBQyxZQUFZO0lBQ3RCLFNBQVMsQ0FBQyxlQUFlO0lBQ3pCLFNBQVMsQ0FBQyxXQUFXO0NBQ3hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcmUgZGF0YSBtb2RlbCBmb3IgdGhlIEZsZXhpYmxlIERhdGFzZXQgRGVmaW5pdGlvbiAoRkREKSBzdGFuZGFyZC5cbiAqXG4gKiBUaGVzZSBpbnRlcmZhY2VzIGRlc2NyaWJlIHRoZSAqcHVyZSBkYXRhKiBzaGFwZSBvZiBhIGRhdGFzZXQ6IGNvbHVtbnMsXG4gKiBwYXJ0aXRpb25zLCBmb3JlaWduIGtleXMsIHRhYmxlIGRlZmluaXRpb25zLCBhbmQgdGhlIHZpb2xhdGlvbnMgdGhlXG4gKiB2YWxpZGF0b3IgZW1pdHMuIFRoZSBsb2FkZWQgd29ybGQgKHNjaGVtYXMgKyB0YWJsZSBpbnN0YW5jZXMpIGFuZCB0aGVcbiAqIGFic3RyYWN0IHRhYmxlIGJhc2UgY2xhc3MgbGl2ZSBpbiBgLi93b3JsZGAgYW5kIGAuL3RhYmxlLXR5cGVgIHNvIHRoaXNcbiAqIG1vZHVsZSBzdGF5cyBhIGxlYWYgd2l0aCBubyBiZWhhdmlvci5cbiAqL1xuXG4vKiogVGFibGUgZW5naW5lLiBFYWNoIHZhbHVlIHVubG9ja3MgZW5naW5lLXNwZWNpZmljIHNlbWFudGljIGNoZWNrcy4gKi9cbmV4cG9ydCBlbnVtIFRhYmxlVHlwZSB7XG4gICAgSElWRV9QQVJRVUVUID0gJ2hpdmVfcGFycXVldCcsXG4gICAgSUNFQkVSR19QQVJRVUVUID0gJ2ljZWJlcmdfcGFycXVldCcsXG4gICAgUE9TVEdSRVNfMTggPSAncG9zdGdyZXNfMTgnLFxufVxuXG4vKiogRXZlcnkga25vd24gYHRhYmxlVHlwZWAgc3RyaW5nLCBmb3IgbWVtYmVyc2hpcCBjaGVja3MuICovXG5leHBvcnQgY29uc3QgVEFCTEVfVFlQRVM6IHJlYWRvbmx5IHN0cmluZ1tdID0gW1xuICAgIFRhYmxlVHlwZS5ISVZFX1BBUlFVRVQsXG4gICAgVGFibGVUeXBlLklDRUJFUkdfUEFSUVVFVCxcbiAgICBUYWJsZVR5cGUuUE9TVEdSRVNfMTgsXG5dO1xuXG4vKiogQSBzaW5nbGUgZGF0YSBjb2x1bW4uICovXG5leHBvcnQgaW50ZXJmYWNlIENvbHVtbiB7XG4gICAgLyoqIENvbHVtbiBuYW1lICh1bmlxdWUgd2l0aGluIGEgdGFibGUpLiAqL1xuICAgIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAgIC8qKiBFbmdpbmUtc3BlY2lmaWMgdHlwZSBzdHJpbmcgKGUuZy4gYGxvbmdgLCBgdmFyY2hhcigyNTUpYCkuICovXG4gICAgcmVhZG9ubHkgdHlwZTogc3RyaW5nO1xuXG4gICAgLyoqIEh1bWFuIGRlc2NyaXB0aW9uLiAqL1xuICAgIHJlYWRvbmx5IGRlc2NyaXB0aW9uOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBwYXJ0aXRpb24gZW50cnkuIFRoZSBtZWFuaW5nIG9mIGBuYW1lYCBhbmQgYHR5cGVgIGlzIGVuZ2luZS1zcGVjaWZpYzogZm9yXG4gKiBIaXZlLCBgbmFtZWAgaXMgYSBuZXcgcGFydGl0aW9uIGNvbHVtbiBhbmQgYHR5cGVgIGlzIGEgbm9ybWFsIHR5cGU7IGZvclxuICogSWNlYmVyZywgYG5hbWVgIGlzIGEgc291cmNlIGRhdGEgY29sdW1uIGFuZCBgdHlwZWAgaXMgYSB0cmFuc2Zvcm07IGZvclxuICogUG9zdGdyZXMsIGBuYW1lYCBpcyBhbiBleGlzdGluZyBrZXkgY29sdW1uIGFuZCBgdHlwZWAgaXMgdGhlIHN0cmF0ZWd5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhcnRpdGlvbiB7XG4gICAgLyoqIEhpdmU6IG5ldyBwYXJ0aXRpb24gY29sdW1uIG5hbWUuIEljZWJlcmcgLyBQb3N0Z3JlczogZXhpc3RpbmcgZGF0YS9rZXkgY29sdW1uIG5hbWUuICovXG4gICAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gICAgLyoqIEhpdmU6IGEgbm9ybWFsIHR5cGUuIEljZWJlcmc6IGEgdHJhbnNmb3JtIChlLmcuIGBkYXlgLCBgYnVja2V0WzE2XWApLiBQb3N0Z3JlczogYSBzdHJhdGVneSAoYHJhbmdlYCAvIGBsaXN0YCAvIGBoYXNoYCkuICovXG4gICAgcmVhZG9ubHkgdHlwZTogc3RyaW5nO1xuXG4gICAgLyoqIEh1bWFuIGRlc2NyaXB0aW9uLiAqL1xuICAgIHJlYWRvbmx5IGRlc2NyaXB0aW9uOiBzdHJpbmc7XG59XG5cbi8qKiBBIGZvcmVpZ24ta2V5IHJlZmVyZW5jZSB0byBhIGNvbHVtbiBpbiBhbm90aGVyIHRhYmxlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBGb3JlaWduS2V5IHtcbiAgICAvKiogUmVmZXJlbmNlZCB0YWJsZSBpbiBgc2NoZW1hLnRhYmxlYCBmb3JtYXQuICovXG4gICAgcmVhZG9ubHkgc291cmNlVGFibGU6IHN0cmluZztcblxuICAgIC8qKiBSZWZlcmVuY2VkIGNvbHVtbiBpbiB0aGUgc291cmNlIHRhYmxlLiAqL1xuICAgIHJlYWRvbmx5IHNvdXJjZUNvbHVtbjogc3RyaW5nO1xuXG4gICAgLyoqIExvY2FsIGNvbHVtbiB0aGF0IGhvbGRzIHRoZSByZWZlcmVuY2UuICovXG4gICAgcmVhZG9ubHkgbG9jYWxDb2x1bW46IHN0cmluZztcblxuICAgIC8qKiBXaGV0aGVyIHRoZSBsb2NhbCBjb2x1bW4gbWF5IGJlIG51bGwuICovXG4gICAgcmVhZG9ubHkgYWxsb3dOdWxsczogYm9vbGVhbjtcbn1cblxuLyoqIE5vcm1hbGl6ZWQgdGFibGUgZGVmaW5pdGlvbiAob3B0aW9uYWwgYXJyYXlzIGRlZmF1bHRlZCB0byBlbXB0eSkuICovXG5leHBvcnQgaW50ZXJmYWNlIFRhYmxlRGVmaW5pdGlvbiB7XG4gICAgLyoqIFNwZWMgdmVyc2lvbiBvZiB0aGUgZmlsZS4gKi9cbiAgICByZWFkb25seSBzcGVjVmVyc2lvbjogc3RyaW5nO1xuXG4gICAgLyoqIEh1bWFuIGRlc2NyaXB0aW9uLiAqL1xuICAgIHJlYWRvbmx5IGRlc2NyaXB0aW9uOiBzdHJpbmc7XG5cbiAgICAvKiogRW5naW5lLiBNYXkgYmUgYW4gdW5rbm93biBzdHJpbmcgaWYgdGhlIGZpbGUgZmFpbGVkIHN0cnVjdHVyYWwgY2hlY2tzLiAqL1xuICAgIHJlYWRvbmx5IHRhYmxlVHlwZTogc3RyaW5nO1xuXG4gICAgLyoqIFdoZXRoZXIgdGhpcyB0YWJsZSBpcyB0aGUgdG9wIG9mIHRoZSBwaXBlbGluZS4gKi9cbiAgICByZWFkb25seSBpc1Jhd0RhdGE6IGJvb2xlYW47XG5cbiAgICAvKiogRGF0YSBjb2x1bW5zLiAqL1xuICAgIHJlYWRvbmx5IGNvbHVtbnM6IENvbHVtbltdO1xuXG4gICAgLyoqIFByaW1hcnkta2V5IGNvbHVtbiBuYW1lcy4gKi9cbiAgICByZWFkb25seSBwcmltYXJ5S2V5OiBzdHJpbmdbXTtcblxuICAgIC8qKiBQYXJ0aXRpb24gZW50cmllcyAoZW5naW5lLXNwZWNpZmljIHNlbWFudGljcykuICovXG4gICAgcmVhZG9ubHkgcGFydGl0aW9uczogUGFydGl0aW9uW107XG5cbiAgICAvKiogVXBzdHJlYW0gdGFibGVzIGluIGBzY2hlbWEudGFibGVgIGZvcm1hdC4gKi9cbiAgICByZWFkb25seSBkZXBlbmRzT246IHN0cmluZ1tdO1xuXG4gICAgLyoqIEZvcmVpZ24ga2V5cy4gKi9cbiAgICByZWFkb25seSBmb3JlaWduS2V5czogRm9yZWlnbktleVtdO1xufVxuXG4vKiogQSBzY2hlbWEtZGVzY3JpcHRpb24gZmlsZSdzIG5vcm1hbGl6ZWQgY29udGVudC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2NoZW1hRGVzY3JpcHRpb24ge1xuICAgIC8qKiBTcGVjIHZlcnNpb24gb2YgdGhlIGZpbGUuICovXG4gICAgcmVhZG9ubHkgc3BlY1ZlcnNpb246IHN0cmluZztcblxuICAgIC8qKiBIdW1hbiBkZXNjcmlwdGlvbi4gKi9cbiAgICByZWFkb25seSBkZXNjcmlwdGlvbjogc3RyaW5nO1xufVxuXG4vKiogU2V2ZXJpdHkgb2YgYSB2aW9sYXRpb24uICovXG5leHBvcnQgdHlwZSBWaW9sYXRpb25MZXZlbCA9ICdlcnJvcicgfCAnd2FybmluZyc7XG5cbi8qKiBBIHNpbmdsZSB2YWxpZGF0aW9uIGZpbmRpbmcuICovXG5leHBvcnQgaW50ZXJmYWNlIFZpb2xhdGlvbiB7XG4gICAgLyoqIFNldmVyaXR5LiBgZXJyb3JgIGZhaWxzIHZhbGlkYXRpb247IGB3YXJuaW5nYCBkb2VzIG5vdC4gKi9cbiAgICByZWFkb25seSBsZXZlbDogVmlvbGF0aW9uTGV2ZWw7XG5cbiAgICAvKiogU3RhYmxlIG1hY2hpbmUtcmVhZGFibGUgcnVsZSBjb2RlIChlLmcuIGBQS19DT0xVTU5TX0VYSVNUYCkuICovXG4gICAgcmVhZG9ubHkgY29kZTogc3RyaW5nO1xuXG4gICAgLyoqIE93bmluZyBzY2hlbWEsIGlmIGFwcGxpY2FibGUuICovXG4gICAgcmVhZG9ubHkgc2NoZW1hPzogc3RyaW5nO1xuXG4gICAgLyoqIE93bmluZyB0YWJsZSwgaWYgYXBwbGljYWJsZS4gKi9cbiAgICByZWFkb25seSB0YWJsZT86IHN0cmluZztcblxuICAgIC8qKiBGaWVsZCBwYXRoIHdpdGhpbiB0aGUgZmlsZSwgaWYgYXBwbGljYWJsZS4gKi9cbiAgICByZWFkb25seSBmaWVsZD86IHN0cmluZztcblxuICAgIC8qKiBTb3VyY2UgZmlsZSBwYXRoLCBpZiBhcHBsaWNhYmxlLiAqL1xuICAgIHJlYWRvbmx5IHBhdGg/OiBzdHJpbmc7XG5cbiAgICAvKiogSHVtYW4tcmVhZGFibGUgbWVzc2FnZS4gKi9cbiAgICByZWFkb25seSBtZXNzYWdlOiBzdHJpbmc7XG59XG5cbi8qKiBUaGUgYWdncmVnYXRlIHJlc3VsdCBvZiB2YWxpZGF0aW5nIGEgcm9vdC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmFsaWRhdGlvblJlc3VsdCB7XG4gICAgLyoqIFRydWUgd2hlbiB0aGVyZSBhcmUgbm8gYGVycm9yYC1sZXZlbCB2aW9sYXRpb25zLiAqL1xuICAgIHJlYWRvbmx5IG9rOiBib29sZWFuO1xuXG4gICAgLyoqIEFsbCBmaW5kaW5ncywgZXJyb3JzIGFuZCB3YXJuaW5ncy4gKi9cbiAgICByZWFkb25seSB2aW9sYXRpb25zOiBWaW9sYXRpb25bXTtcbn1cbiJdfQ==
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7OztHQVFHOzs7QUFFSCx3RUFBd0U7QUFDeEUsSUFBWSxTQUlYO0FBSkQsV0FBWSxTQUFTO0lBQ2pCLDBDQUE2QixDQUFBO0lBQzdCLGdEQUFtQyxDQUFBO0lBQ25DLHdDQUEyQixDQUFBO0FBQy9CLENBQUMsRUFKVyxTQUFTLHlCQUFULFNBQVMsUUFJcEI7QUFFRCw2REFBNkQ7QUFDaEQsUUFBQSxXQUFXLEdBQXNCO0lBQzFDLFNBQVMsQ0FBQyxZQUFZO0lBQ3RCLFNBQVMsQ0FBQyxlQUFlO0lBQ3pCLFNBQVMsQ0FBQyxXQUFXO0NBQ3hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcmUgZGF0YSBtb2RlbCBmb3IgdGhlIEZsZXhpYmxlIERhdGFzZXQgRGVmaW5pdGlvbiAoRkREKSBzdGFuZGFyZC5cbiAqXG4gKiBUaGVzZSBpbnRlcmZhY2VzIGRlc2NyaWJlIHRoZSAqcHVyZSBkYXRhKiBzaGFwZSBvZiBhIGRhdGFzZXQ6IGNvbHVtbnMsXG4gKiBwYXJ0aXRpb25zLCBmb3JlaWduIGtleXMsIHRhYmxlIGRlZmluaXRpb25zLCBhbmQgdGhlIHZpb2xhdGlvbnMgdGhlXG4gKiB2YWxpZGF0b3IgZW1pdHMuIFRoZSBsb2FkZWQgd29ybGQgKHNjaGVtYXMgKyB0YWJsZSBpbnN0YW5jZXMpIGFuZCB0aGVcbiAqIGFic3RyYWN0IHRhYmxlIGJhc2UgY2xhc3MgbGl2ZSBpbiBgLi93b3JsZGAgYW5kIGAuL3RhYmxlLXR5cGVgIHNvIHRoaXNcbiAqIG1vZHVsZSBzdGF5cyBhIGxlYWYgd2l0aCBubyBiZWhhdmlvci5cbiAqL1xuXG4vKiogVGFibGUgZW5naW5lLiBFYWNoIHZhbHVlIHVubG9ja3MgZW5naW5lLXNwZWNpZmljIHNlbWFudGljIGNoZWNrcy4gKi9cbmV4cG9ydCBlbnVtIFRhYmxlVHlwZSB7XG4gICAgSElWRV9QQVJRVUVUID0gJ2hpdmVfcGFycXVldCcsXG4gICAgSUNFQkVSR19QQVJRVUVUID0gJ2ljZWJlcmdfcGFycXVldCcsXG4gICAgUE9TVEdSRVNfMTggPSAncG9zdGdyZXNfMTgnLFxufVxuXG4vKiogRXZlcnkga25vd24gYHRhYmxlVHlwZWAgc3RyaW5nLCBmb3IgbWVtYmVyc2hpcCBjaGVja3MuICovXG5leHBvcnQgY29uc3QgVEFCTEVfVFlQRVM6IHJlYWRvbmx5IHN0cmluZ1tdID0gW1xuICAgIFRhYmxlVHlwZS5ISVZFX1BBUlFVRVQsXG4gICAgVGFibGVUeXBlLklDRUJFUkdfUEFSUVVFVCxcbiAgICBUYWJsZVR5cGUuUE9TVEdSRVNfMTgsXG5dO1xuXG4vKiogQSBzaW5nbGUgZGF0YSBjb2x1bW4uICovXG5leHBvcnQgaW50ZXJmYWNlIENvbHVtbiB7XG4gICAgLyoqIENvbHVtbiBuYW1lICh1bmlxdWUgd2l0aGluIGEgdGFibGUpLiAqL1xuICAgIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAgIC8qKiBFbmdpbmUtc3BlY2lmaWMgdHlwZSBzdHJpbmcgKGUuZy4gYGxvbmdgLCBgdmFyY2hhcigyNTUpYCkuICovXG4gICAgcmVhZG9ubHkgdHlwZTogc3RyaW5nO1xuXG4gICAgLyoqIEh1bWFuIGRlc2NyaXB0aW9uLiAqL1xuICAgIHJlYWRvbmx5IGRlc2NyaXB0aW9uOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSBjb2x1bW4gbWF5IGhvbGQgbnVsbC4gT3B0aW9uYWw6IHdoZW4gb21pdHRlZCwgbnVsbGFiaWxpdHkgaXNcbiAgICAgKiB1bnNwZWNpZmllZCBhbmQgdGhlIG51bGxhYmlsaXR5IGNyb3NzLWNoZWNrcyBkbyBub3QgZmlyZS4gYGZhbHNlYCBtYXJrcyBhXG4gICAgICogTk9UIE5VTEwgY29sdW1uIChJY2ViZXJnIGByZXF1aXJlZGApOyBgdHJ1ZWAgbWFya3MgYW4gZXhwbGljaXRseSBudWxsYWJsZVxuICAgICAqIGNvbHVtbi5cbiAgICAgKi9cbiAgICByZWFkb25seSBudWxsYWJsZT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQSBwYXJ0aXRpb24gZW50cnkuIFRoZSBtZWFuaW5nIG9mIGBuYW1lYCBhbmQgYHR5cGVgIGlzIGVuZ2luZS1zcGVjaWZpYzogZm9yXG4gKiBIaXZlLCBgbmFtZWAgaXMgYSBuZXcgcGFydGl0aW9uIGNvbHVtbiBhbmQgYHR5cGVgIGlzIGEgbm9ybWFsIHR5cGU7IGZvclxuICogSWNlYmVyZywgYG5hbWVgIGlzIGEgc291cmNlIGRhdGEgY29sdW1uIGFuZCBgdHlwZWAgaXMgYSB0cmFuc2Zvcm07IGZvclxuICogUG9zdGdyZXMsIGBuYW1lYCBpcyBhbiBleGlzdGluZyBrZXkgY29sdW1uIGFuZCBgdHlwZWAgaXMgdGhlIHN0cmF0ZWd5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhcnRpdGlvbiB7XG4gICAgLyoqIEhpdmU6IG5ldyBwYXJ0aXRpb24gY29sdW1uIG5hbWUuIEljZWJlcmcgLyBQb3N0Z3JlczogZXhpc3RpbmcgZGF0YS9rZXkgY29sdW1uIG5hbWUuICovXG4gICAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gICAgLyoqIEhpdmU6IGEgbm9ybWFsIHR5cGUuIEljZWJlcmc6IGEgdHJhbnNmb3JtIChlLmcuIGBkYXlgLCBgYnVja2V0WzE2XWApLiBQb3N0Z3JlczogYSBzdHJhdGVneSAoYHJhbmdlYCAvIGBsaXN0YCAvIGBoYXNoYCkuICovXG4gICAgcmVhZG9ubHkgdHlwZTogc3RyaW5nO1xuXG4gICAgLyoqIEh1bWFuIGRlc2NyaXB0aW9uLiAqL1xuICAgIHJlYWRvbmx5IGRlc2NyaXB0aW9uOiBzdHJpbmc7XG59XG5cbi8qKiBBIGZvcmVpZ24ta2V5IHJlZmVyZW5jZSB0byBhIGNvbHVtbiBpbiBhbm90aGVyIHRhYmxlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBGb3JlaWduS2V5IHtcbiAgICAvKiogUmVmZXJlbmNlZCB0YWJsZSBpbiBgc2NoZW1hLnRhYmxlYCBmb3JtYXQuICovXG4gICAgcmVhZG9ubHkgc291cmNlVGFibGU6IHN0cmluZztcblxuICAgIC8qKiBSZWZlcmVuY2VkIGNvbHVtbiBpbiB0aGUgc291cmNlIHRhYmxlLiAqL1xuICAgIHJlYWRvbmx5IHNvdXJjZUNvbHVtbjogc3RyaW5nO1xuXG4gICAgLyoqIExvY2FsIGNvbHVtbiB0aGF0IGhvbGRzIHRoZSByZWZlcmVuY2UuICovXG4gICAgcmVhZG9ubHkgbG9jYWxDb2x1bW46IHN0cmluZztcblxuICAgIC8qKiBXaGV0aGVyIHRoZSBsb2NhbCBjb2x1bW4gbWF5IGJlIG51bGwuICovXG4gICAgcmVhZG9ubHkgYWxsb3dOdWxsczogYm9vbGVhbjtcbn1cblxuLyoqIE5vcm1hbGl6ZWQgdGFibGUgZGVmaW5pdGlvbiAob3B0aW9uYWwgYXJyYXlzIGRlZmF1bHRlZCB0byBlbXB0eSkuICovXG5leHBvcnQgaW50ZXJmYWNlIFRhYmxlRGVmaW5pdGlvbiB7XG4gICAgLyoqIFNwZWMgdmVyc2lvbiBvZiB0aGUgZmlsZS4gKi9cbiAgICByZWFkb25seSBzcGVjVmVyc2lvbjogc3RyaW5nO1xuXG4gICAgLyoqIEh1bWFuIGRlc2NyaXB0aW9uLiAqL1xuICAgIHJlYWRvbmx5IGRlc2NyaXB0aW9uOiBzdHJpbmc7XG5cbiAgICAvKiogRW5naW5lLiBNYXkgYmUgYW4gdW5rbm93biBzdHJpbmcgaWYgdGhlIGZpbGUgZmFpbGVkIHN0cnVjdHVyYWwgY2hlY2tzLiAqL1xuICAgIHJlYWRvbmx5IHRhYmxlVHlwZTogc3RyaW5nO1xuXG4gICAgLyoqIFdoZXRoZXIgdGhpcyB0YWJsZSBpcyB0aGUgdG9wIG9mIHRoZSBwaXBlbGluZS4gKi9cbiAgICByZWFkb25seSBpc1Jhd0RhdGE6IGJvb2xlYW47XG5cbiAgICAvKiogRGF0YSBjb2x1bW5zLiAqL1xuICAgIHJlYWRvbmx5IGNvbHVtbnM6IENvbHVtbltdO1xuXG4gICAgLyoqIFByaW1hcnkta2V5IGNvbHVtbiBuYW1lcy4gKi9cbiAgICByZWFkb25seSBwcmltYXJ5S2V5OiBzdHJpbmdbXTtcblxuICAgIC8qKiBQYXJ0aXRpb24gZW50cmllcyAoZW5naW5lLXNwZWNpZmljIHNlbWFudGljcykuICovXG4gICAgcmVhZG9ubHkgcGFydGl0aW9uczogUGFydGl0aW9uW107XG5cbiAgICAvKiogVXBzdHJlYW0gdGFibGVzIGluIGBzY2hlbWEudGFibGVgIGZvcm1hdC4gKi9cbiAgICByZWFkb25seSBkZXBlbmRzT246IHN0cmluZ1tdO1xuXG4gICAgLyoqIEZvcmVpZ24ga2V5cy4gKi9cbiAgICByZWFkb25seSBmb3JlaWduS2V5czogRm9yZWlnbktleVtdO1xufVxuXG4vKiogQSBzY2hlbWEtZGVzY3JpcHRpb24gZmlsZSdzIG5vcm1hbGl6ZWQgY29udGVudC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2NoZW1hRGVzY3JpcHRpb24ge1xuICAgIC8qKiBTcGVjIHZlcnNpb24gb2YgdGhlIGZpbGUuICovXG4gICAgcmVhZG9ubHkgc3BlY1ZlcnNpb246IHN0cmluZztcblxuICAgIC8qKiBIdW1hbiBkZXNjcmlwdGlvbi4gKi9cbiAgICByZWFkb25seSBkZXNjcmlwdGlvbjogc3RyaW5nO1xufVxuXG4vKiogU2V2ZXJpdHkgb2YgYSB2aW9sYXRpb24uICovXG5leHBvcnQgdHlwZSBWaW9sYXRpb25MZXZlbCA9ICdlcnJvcicgfCAnd2FybmluZyc7XG5cbi8qKiBBIHNpbmdsZSB2YWxpZGF0aW9uIGZpbmRpbmcuICovXG5leHBvcnQgaW50ZXJmYWNlIFZpb2xhdGlvbiB7XG4gICAgLyoqIFNldmVyaXR5LiBgZXJyb3JgIGZhaWxzIHZhbGlkYXRpb247IGB3YXJuaW5nYCBkb2VzIG5vdC4gKi9cbiAgICByZWFkb25seSBsZXZlbDogVmlvbGF0aW9uTGV2ZWw7XG5cbiAgICAvKiogU3RhYmxlIG1hY2hpbmUtcmVhZGFibGUgcnVsZSBjb2RlIChlLmcuIGBQS19DT0xVTU5TX0VYSVNUYCkuICovXG4gICAgcmVhZG9ubHkgY29kZTogc3RyaW5nO1xuXG4gICAgLyoqIE93bmluZyBzY2hlbWEsIGlmIGFwcGxpY2FibGUuICovXG4gICAgcmVhZG9ubHkgc2NoZW1hPzogc3RyaW5nO1xuXG4gICAgLyoqIE93bmluZyB0YWJsZSwgaWYgYXBwbGljYWJsZS4gKi9cbiAgICByZWFkb25seSB0YWJsZT86IHN0cmluZztcblxuICAgIC8qKiBGaWVsZCBwYXRoIHdpdGhpbiB0aGUgZmlsZSwgaWYgYXBwbGljYWJsZS4gKi9cbiAgICByZWFkb25seSBmaWVsZD86IHN0cmluZztcblxuICAgIC8qKiBTb3VyY2UgZmlsZSBwYXRoLCBpZiBhcHBsaWNhYmxlLiAqL1xuICAgIHJlYWRvbmx5IHBhdGg/OiBzdHJpbmc7XG5cbiAgICAvKiogSHVtYW4tcmVhZGFibGUgbWVzc2FnZS4gKi9cbiAgICByZWFkb25seSBtZXNzYWdlOiBzdHJpbmc7XG59XG5cbi8qKiBUaGUgYWdncmVnYXRlIHJlc3VsdCBvZiB2YWxpZGF0aW5nIGEgcm9vdC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmFsaWRhdGlvblJlc3VsdCB7XG4gICAgLyoqIFRydWUgd2hlbiB0aGVyZSBhcmUgbm8gYGVycm9yYC1sZXZlbCB2aW9sYXRpb25zLiAqL1xuICAgIHJlYWRvbmx5IG9rOiBib29sZWFuO1xuXG4gICAgLyoqIEFsbCBmaW5kaW5ncywgZXJyb3JzIGFuZCB3YXJuaW5ncy4gKi9cbiAgICByZWFkb25seSB2aW9sYXRpb25zOiBWaW9sYXRpb25bXTtcbn1cbiJdfQ==
@@ -94,6 +94,9 @@
94
94
  "description": {
95
95
  "type": "string",
96
96
  "minLength": 1
97
+ },
98
+ "nullable": {
99
+ "type": "boolean"
97
100
  }
98
101
  }
99
102
  },
@@ -94,6 +94,7 @@ export declare abstract class TableTypeBase {
94
94
  private duplicateColumnViolations;
95
95
  private columnTypeViolations;
96
96
  private rawConsistencyViolations;
97
+ private nullabilityViolations;
97
98
  /**
98
99
  * All intra-table violations for this table (engine-agnostic rules plus
99
100
  * the engine-specific partition rules).
@@ -160,6 +160,38 @@ class TableTypeBase {
160
160
  }
161
161
  return violations;
162
162
  }
163
+ /// PK_COLUMN_NOT_NULLABLE / FK_NULLABILITY_CONSISTENT — per-column
164
+ /// nullability contradictions against the primary key and foreign keys.
165
+ nullabilityViolations() {
166
+ const violations = [];
167
+ /// A primary-key column is implicitly NOT NULL, so declaring it nullable
168
+ /// is a contradiction.
169
+ for (const pkColumn of this.definition.primaryKey) {
170
+ const column = this.definition.columns.find((candidate) => candidate.name === pkColumn);
171
+ if (column !== undefined && column.nullable === true) {
172
+ violations.push(this.violation({
173
+ level: 'error',
174
+ code: 'PK_COLUMN_NOT_NULLABLE',
175
+ field: 'primaryKey',
176
+ message: `primary-key column "${pkColumn}" cannot be nullable (declared nullable: true)`,
177
+ }));
178
+ }
179
+ }
180
+ /// A NOT NULL local column can never be null, so a foreign key that
181
+ /// permits nulls on it is inconsistent.
182
+ this.definition.foreignKeys.forEach((fk, index) => {
183
+ const column = this.definition.columns.find((candidate) => candidate.name === fk.localColumn);
184
+ if (column !== undefined && column.nullable === false && fk.allowNulls) {
185
+ violations.push(this.violation({
186
+ level: 'warning',
187
+ code: 'FK_NULLABILITY_CONSISTENT',
188
+ field: `foreignKeys[${index}].allowNulls`,
189
+ message: `foreign key allows nulls but local column "${fk.localColumn}" is declared non-nullable`,
190
+ }));
191
+ }
192
+ });
193
+ return violations;
194
+ }
163
195
  /**
164
196
  * All intra-table violations for this table (engine-agnostic rules plus
165
197
  * the engine-specific partition rules).
@@ -173,6 +205,7 @@ class TableTypeBase {
173
205
  ...this.columnTypeViolations(),
174
206
  ...this.partitionViolations(),
175
207
  ...this.rawConsistencyViolations(),
208
+ ...this.nullabilityViolations(),
176
209
  ];
177
210
  }
178
211
  /// ////////////////////////////////////////////////////////////////////////
@@ -272,4 +305,4 @@ class TableTypeBase {
272
305
  }
273
306
  }
274
307
  exports.TableTypeBase = TableTypeBase;
275
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtdHlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90YWJsZS10eXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7OztHQVVHOzs7QUFtQ0g7Ozs7Ozs7R0FPRztBQUNILE1BQXNCLGFBQWE7SUFDL0IsMEJBQTBCO0lBQ1YsTUFBTSxDQUFTO0lBRS9CLGtCQUFrQjtJQUNGLElBQUksQ0FBUztJQUU3QixpQ0FBaUM7SUFDakIsYUFBYSxDQUFTO0lBRXRDLHdDQUF3QztJQUN4QixRQUFRLENBQVM7SUFFakMsNkRBQTZEO0lBQzdDLGlCQUFpQixDQUFVO0lBRTNDLDZCQUE2QjtJQUNiLFVBQVUsQ0FBa0I7SUFFNUM7Ozs7O09BS0c7SUFDSCxZQUFZLE1BQXVCO1FBQy9CLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUM1QixJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDeEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDO1FBQzFDLElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQztRQUNoQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDO1FBQ2xELElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQztJQUN4QyxDQUFDO0lBRUQsNEVBQTRFO0lBQzVFLHNEQUFzRDtJQUV0RDs7Ozs7T0FLRztJQUNPLFNBQVMsQ0FBQyxPQUFxRDtRQUNyRSxNQUFNLFFBQVEsR0FBbUI7WUFDN0IsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNoQixJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVE7U0FDdEIsQ0FBQztRQUNGLE9BQU87WUFDSCxHQUFHLE9BQU87WUFDVixHQUFHLFFBQVE7U0FDZCxDQUFDO0lBQ04sQ0FBQztJQUVEOzs7OztPQUtHO0lBQ08sU0FBUyxDQUFDLElBQVk7UUFDNUIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNPLGNBQWMsQ0FBQyxLQUFlO1FBQ3BDLE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7UUFDL0IsTUFBTSxVQUFVLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztRQUNyQyxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ3ZCLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUNqQixVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3pCLENBQUM7WUFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25CLENBQUM7UUFDRCxPQUFPO1lBQ0gsR0FBRyxVQUFVO1NBQ2hCLENBQUM7SUFDTixDQUFDO0lBcUJELDRFQUE0RTtJQUM1RSw4QkFBOEI7SUFFOUIsb0VBQW9FO0lBQzVELG9CQUFvQjtRQUN4QixNQUFNLFVBQVUsR0FBZ0IsRUFBRSxDQUFDO1FBQ25DLEtBQUssTUFBTSxRQUFRLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNoRCxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO2dCQUM1QixVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7b0JBQzNCLEtBQUssRUFBRSxPQUFPO29CQUNkLElBQUksRUFBRSxrQkFBa0I7b0JBQ3hCLEtBQUssRUFBRSxZQUFZO29CQUNuQixPQUFPLEVBQUUsdUJBQXVCLFFBQVEsNkJBQTZCO2lCQUN4RSxDQUFDLENBQUMsQ0FBQztZQUNSLENBQUM7UUFDTCxDQUFDO1FBQ0QsT0FBTyxVQUFVLENBQUM7SUFDdEIsQ0FBQztJQUVELGtFQUFrRTtJQUMxRCx5QkFBeUI7UUFDN0IsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkUsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUNoRSxLQUFLLEVBQUUsT0FBTztZQUNkLElBQUksRUFBRSxzQkFBc0I7WUFDNUIsS0FBSyxFQUFFLFNBQVM7WUFDaEIsT0FBTyxFQUFFLDBCQUEwQixTQUFTLEdBQUc7U0FDbEQsQ0FBQyxDQUFDLENBQUM7SUFDUixDQUFDO0lBRUQsMEVBQTBFO0lBQ2xFLG9CQUFvQjtRQUN4QixNQUFNLFVBQVUsR0FBZ0IsRUFBRSxDQUFDO1FBQ25DLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUM5QyxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUN2QyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7b0JBQzNCLEtBQUssRUFBRSxPQUFPO29CQUNkLElBQUksRUFBRSxtQkFBbUI7b0JBQ3pCLEtBQUssRUFBRSxXQUFXLEtBQUssUUFBUTtvQkFDL0IsT0FBTyxFQUFFLElBQUksTUFBTSxDQUFDLElBQUksb0JBQW9CLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxRQUFROzBCQUN2RSxlQUFlLE1BQU0sQ0FBQyxJQUFJLEdBQUc7aUJBQ3RDLENBQUMsQ0FBQyxDQUFDO1lBQ1IsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxVQUFVLENBQUM7SUFDdEIsQ0FBQztJQUVELG1EQUFtRDtJQUMzQyx3QkFBd0I7UUFDNUIsTUFBTSxVQUFVLEdBQWdCLEVBQUUsQ0FBQztRQUNuQyxNQUFNLEVBQ0YsU0FBUyxFQUNULFNBQVMsR0FDWixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDcEIsSUFBSSxTQUFTLElBQUksU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNwQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7Z0JBQzNCLEtBQUssRUFBRSxPQUFPO2dCQUNkLElBQUksRUFBRSxtQkFBbUI7Z0JBQ3pCLEtBQUssRUFBRSxXQUFXO2dCQUNsQixPQUFPLEVBQUUsd0RBQXdEO2FBQ3BFLENBQUMsQ0FBQyxDQUFDO1FBQ1IsQ0FBQztRQUNELElBQUksQ0FBQyxTQUFTLElBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN2QyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7Z0JBQzNCLEtBQUssRUFBRSxPQUFPO2dCQUNkLElBQUksRUFBRSw0QkFBNEI7Z0JBQ2xDLEtBQUssRUFBRSxXQUFXO2dCQUNsQixPQUFPLEVBQUUsc0VBQXNFO2FBQ2xGLENBQUMsQ0FBQyxDQUFDO1FBQ1IsQ0FBQztRQUNELE9BQU8sVUFBVSxDQUFDO0lBQ3RCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLG9CQUFvQjtRQUN2QixPQUFPO1lBQ0gsR0FBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUU7WUFDOUIsR0FBRyxJQUFJLENBQUMseUJBQXlCLEVBQUU7WUFDbkMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUU7WUFDOUIsR0FBRyxJQUFJLENBQUMsbUJBQW1CLEVBQUU7WUFDN0IsR0FBRyxJQUFJLENBQUMsd0JBQXdCLEVBQUU7U0FDckMsQ0FBQztJQUNOLENBQUM7SUFFRCw0RUFBNEU7SUFDNUUsb0JBQW9CO0lBRXBCLHlFQUF5RTtJQUNqRSxtQkFBbUIsQ0FBQyxLQUFZO1FBQ3BDLE1BQU0sVUFBVSxHQUFnQixFQUFFLENBQUM7UUFDbkMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ3BELElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO2dCQUNoQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7b0JBQzNCLEtBQUssRUFBRSxPQUFPO29CQUNkLElBQUksRUFBRSxxQkFBcUI7b0JBQzNCLEtBQUssRUFBRSxhQUFhLEtBQUssR0FBRztvQkFDNUIsT0FBTyxFQUFFLGNBQWMsVUFBVSxxQ0FBcUM7aUJBQ3pFLENBQUMsQ0FBQyxDQUFDO1lBQ1IsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxVQUFVLENBQUM7SUFDdEIsQ0FBQztJQUVELDZDQUE2QztJQUNyQyxvQkFBb0IsQ0FBQyxLQUFZLEVBQUUsRUFBYyxFQUFFLEtBQWE7UUFDcEUsTUFBTSxVQUFVLEdBQWdCLEVBQUUsQ0FBQztRQUNuQyxNQUFNLEtBQUssR0FBRyxlQUFlLEtBQUssR0FBRyxDQUFDO1FBRXRDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1lBQ2xDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztnQkFDM0IsS0FBSyxFQUFFLE9BQU87Z0JBQ2QsSUFBSSxFQUFFLHdCQUF3QjtnQkFDOUIsS0FBSyxFQUFFLEdBQUcsS0FBSyxjQUFjO2dCQUM3QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQyxXQUFXLDZCQUE2QjthQUN4RSxDQUFDLENBQUMsQ0FBQztRQUNSLENBQUM7UUFFRCwyRUFBMkU7UUFDM0UsNEVBQTRFO1FBQzVFLDhFQUE4RTtRQUM5RSxnQ0FBZ0M7UUFDaEMsTUFBTSxlQUFlLEdBQUcsRUFBRSxDQUFDLFdBQVcsS0FBSyxJQUFJLENBQUMsYUFBYSxDQUFDO1FBQzlELElBQUksQ0FBQyxlQUFlLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDMUUsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO2dCQUMzQixLQUFLLEVBQUUsT0FBTztnQkFDZCxJQUFJLEVBQUUsdUJBQXVCO2dCQUM3QixLQUFLLEVBQUUsR0FBRyxLQUFLLGNBQWM7Z0JBQzdCLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxDQUFDLFdBQVcscUNBQXFDO2FBQ3ZGLENBQUMsQ0FBQyxDQUFDO1FBQ1IsQ0FBQztRQUVELE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNoRCxJQUFJLE1BQU0sS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN2QixVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7Z0JBQzNCLEtBQUssRUFBRSxPQUFPO2dCQUNkLElBQUksRUFBRSwwQkFBMEI7Z0JBQ2hDLEtBQUssRUFBRSxHQUFHLEtBQUssY0FBYztnQkFDN0IsT0FBTyxFQUFFLDZCQUE2QixFQUFFLENBQUMsV0FBVyxxQ0FBcUM7YUFDNUYsQ0FBQyxDQUFDLENBQUM7WUFDSixPQUFPLFVBQVUsQ0FBQztRQUN0QixDQUFDO1FBRUQsNEVBQTRFO1FBQzVFLHVFQUF1RTtRQUN2RSxzQ0FBc0M7UUFDdEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQzVCLE9BQU8sVUFBVSxDQUFDO1FBQ3RCLENBQUM7UUFFRCxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssRUFBRSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3BHLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUNuQixVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7Z0JBQzNCLEtBQUssRUFBRSxPQUFPO2dCQUNkLElBQUksRUFBRSx5QkFBeUI7Z0JBQy9CLEtBQUssRUFBRSxHQUFHLEtBQUssZUFBZTtnQkFDOUIsT0FBTyxFQUFFLDhCQUE4QixFQUFFLENBQUMsWUFBWSx3QkFBd0IsRUFBRSxDQUFDLFdBQVcsR0FBRzthQUNsRyxDQUFDLENBQUMsQ0FBQztZQUNKLE9BQU8sVUFBVSxDQUFDO1FBQ3RCLENBQUM7UUFFRCxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1lBQzFELFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztnQkFDM0IsS0FBSyxFQUFFLFNBQVM7Z0JBQ2hCLElBQUksRUFBRSxrQkFBa0I7Z0JBQ3hCLEtBQUssRUFBRSxHQUFHLEtBQUssZUFBZTtnQkFDOUIsT0FBTyxFQUFFLDhCQUE4QixFQUFFLENBQUMsWUFBWSxtQ0FBbUM7c0JBQ25GLE9BQU8sRUFBRSxDQUFDLFdBQVcsR0FBRzthQUNqQyxDQUFDLENBQUMsQ0FBQztRQUNSLENBQUM7UUFFRCxPQUFPLFVBQVUsQ0FBQztJQUN0QixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksbUJBQW1CLENBQUMsS0FBWTtRQUNuQyxNQUFNLFVBQVUsR0FBZ0I7WUFDNUIsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDO1NBQ3JDLENBQUM7UUFDRixJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDOUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDcEUsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLFVBQVUsQ0FBQztJQUN0QixDQUFDO0NBQ0o7QUEzU0Qsc0NBMlNDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBBYnN0cmFjdCBiYXNlIGNsYXNzIGZvciBhIGxvYWRlZCB0YWJsZS4gT25lIHN1YmNsYXNzIHBlciBlbmdpbmUuXG4gKlxuICogSG9sZHMgdGhlIG5vcm1hbGl6ZWQgdGFibGUgaWRlbnRpdHkgYW5kIGRlZmluaXRpb24sIHBsdXMgdGhlXG4gKiBlbmdpbmUtYWdub3N0aWMgTGF5ZXIgMiBydWxlcyBhcyBjb25jcmV0ZSBtZXRob2RzLiBFbmdpbmUtc3BlY2lmaWMgcnVsZXNcbiAqIChjb2x1bW4tdHlwZSB2YWxpZGl0eSwgcGFydGl0aW9uIHNlbWFudGljcykgYXJlIGFic3RyYWN0IOKAlCBlYWNoIHN1YmNsYXNzXG4gKiBpbXBsZW1lbnRzIHRoZW0sIHdoaWNoIGlzIHRoZSBsZXZlciB0aGF0IGxldHMgbmV3IGVuZ2luZXMgcGx1ZyBpbiB3aXRob3V0XG4gKiBlZGl0aW5nIHNjYXR0ZXJlZCBzd2l0Y2hlcy4gVGhlIGNyb3NzLWZpbGUgcnVsZXMgYXJlIGNvbmNyZXRlIGhlcmUgdG9vO1xuICogdGhleSB0YWtlIHRoZSB3b3JsZCBieSBhbiBpbnRlcmZhY2Ugc28gdGhlIGN5Y2xlIGJldHdlZW4gdGhpcyBtb2R1bGUgYW5kXG4gKiBgLi93b3JsZGAgaXMga2VwdCBhdCB0eXBlLWxldmVsIG9ubHkuXG4gKi9cblxuaW1wb3J0IHtcbiAgICBGb3JlaWduS2V5LFxuICAgIFRhYmxlRGVmaW5pdGlvbixcbiAgICBWaW9sYXRpb24sXG59IGZyb20gJy4vbW9kZWwnO1xuaW1wb3J0IHR5cGUge1xuICAgIFdvcmxkLFxufSBmcm9tICcuL3dvcmxkJztcblxuLyoqIEZpZWxkcyByZXF1aXJlZCB0byBjb25zdHJ1Y3QgYW55IGNvbmNyZXRlIHRhYmxlIHN1YmNsYXNzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBUYWJsZVR5cGVGaWVsZHMge1xuICAgIC8qKiBPd25pbmcgc2NoZW1hIG5hbWUgKHRoZSBmb2xkZXIgbmFtZSkuICovXG4gICAgcmVhZG9ubHkgc2NoZW1hOiBzdHJpbmc7XG5cbiAgICAvKiogVGFibGUgbmFtZSAodGhlIGZpbGUgbmFtZSB3aXRob3V0IGAuanNvbmApLiAqL1xuICAgIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAgIC8qKiBgc2NoZW1hLnRhYmxlYCBpZGVudGlmaWVyLiAqL1xuICAgIHJlYWRvbmx5IHF1YWxpZmllZE5hbWU6IHN0cmluZztcblxuICAgIC8qKiBBYnNvbHV0ZSBwYXRoIHRvIHRoZSBzb3VyY2UgZmlsZS4gKi9cbiAgICByZWFkb25seSBmaWxlUGF0aDogc3RyaW5nO1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIGZpbGUgcGFzc2VkIExheWVyIDEgc3RydWN0dXJhbCB2YWxpZGF0aW9uLiAqL1xuICAgIHJlYWRvbmx5IHN0cnVjdHVyYWxseVZhbGlkOiBib29sZWFuO1xuXG4gICAgLyoqIE5vcm1hbGl6ZWQgZGVmaW5pdGlvbi4gKi9cbiAgICByZWFkb25seSBkZWZpbml0aW9uOiBUYWJsZURlZmluaXRpb247XG59XG5cbi8qKiBQcmUtZmlsbGVkIGxvY2F0aW9uIGZpZWxkcyBhdHRhY2hlZCB0byBldmVyeSB2aW9sYXRpb24gYSB0YWJsZSBlbWl0cy4gKi9cbnR5cGUgTG9jYXRpb25GaWVsZHMgPSBQaWNrPFZpb2xhdGlvbiwgJ3NjaGVtYScgfCAndGFibGUnIHwgJ3BhdGgnPjtcblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBhbGwgZW5naW5lLXNwZWNpZmljIHRhYmxlIHR5cGVzLlxuICpcbiAqIFN1YmNsYXNzZXMgaW1wbGVtZW50IGBpc1ZhbGlkQ29sdW1uVHlwZWAgKHRoZSBlbmdpbmUncyB0eXBlIHJlZ2lzdHJ5KSBhbmRcbiAqIGBwYXJ0aXRpb25WaW9sYXRpb25zYCAodGhlIGVuZ2luZSdzIHBhcnRpdGlvbiBzZW1hbnRpY3MpLiBFdmVyeXRoaW5nIGVsc2VcbiAqIOKAlCBwcmltYXJ5LWtleSBjaGVja3MsIGR1cGVzLCByYXcgY29uc2lzdGVuY3ksIGRlcGVuZHMtb24gcmVzb2x1dGlvbixcbiAqIGZvcmVpZ24ta2V5IGNoZWNrcyDigJQgaXMgaWRlbnRpY2FsIGFjcm9zcyBlbmdpbmVzIGFuZCBsaXZlcyBoZXJlLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgVGFibGVUeXBlQmFzZSB7XG4gICAgLyoqIE93bmluZyBzY2hlbWEgbmFtZS4gKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgc2NoZW1hOiBzdHJpbmc7XG5cbiAgICAvKiogVGFibGUgbmFtZS4gKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gICAgLyoqIGBzY2hlbWEudGFibGVgIGlkZW50aWZpZXIuICovXG4gICAgcHVibGljIHJlYWRvbmx5IHF1YWxpZmllZE5hbWU6IHN0cmluZztcblxuICAgIC8qKiBBYnNvbHV0ZSBwYXRoIHRvIHRoZSBzb3VyY2UgZmlsZS4gKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgZmlsZVBhdGg6IHN0cmluZztcblxuICAgIC8qKiBXaGV0aGVyIHRoZSBmaWxlIHBhc3NlZCBMYXllciAxIHN0cnVjdHVyYWwgdmFsaWRhdGlvbi4gKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgc3RydWN0dXJhbGx5VmFsaWQ6IGJvb2xlYW47XG5cbiAgICAvKiogTm9ybWFsaXplZCBkZWZpbml0aW9uLiAqL1xuICAgIHB1YmxpYyByZWFkb25seSBkZWZpbml0aW9uOiBUYWJsZURlZmluaXRpb247XG5cbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3QgYSB0YWJsZSBpbnN0YW5jZSBmcm9tIHRoZSBub3JtYWxpemVkIGZpZWxkcyBwcm9kdWNlZCBieSB0aGVcbiAgICAgKiBsb2FkZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZmllbGRzIFRoZSB0YWJsZSBpZGVudGl0eSBwbHVzIGl0cyBwYXJzZWQsIG5vcm1hbGl6ZWQgZGVmaW5pdGlvbi5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihmaWVsZHM6IFRhYmxlVHlwZUZpZWxkcykge1xuICAgICAgICB0aGlzLnNjaGVtYSA9IGZpZWxkcy5zY2hlbWE7XG4gICAgICAgIHRoaXMubmFtZSA9IGZpZWxkcy5uYW1lO1xuICAgICAgICB0aGlzLnF1YWxpZmllZE5hbWUgPSBmaWVsZHMucXVhbGlmaWVkTmFtZTtcbiAgICAgICAgdGhpcy5maWxlUGF0aCA9IGZpZWxkcy5maWxlUGF0aDtcbiAgICAgICAgdGhpcy5zdHJ1Y3R1cmFsbHlWYWxpZCA9IGZpZWxkcy5zdHJ1Y3R1cmFsbHlWYWxpZDtcbiAgICAgICAgdGhpcy5kZWZpbml0aW9uID0gZmllbGRzLmRlZmluaXRpb247XG4gICAgfVxuXG4gICAgLy8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEhlbHBlcnMgc2hhcmVkIGJ5IGludHJhLXRhYmxlIGFuZCBjcm9zcy1maWxlIHJ1bGVzLlxuXG4gICAgLyoqXG4gICAgICogQnVpbGQgYSB2aW9sYXRpb24gcHJlLWZpbGxlZCB3aXRoIHRoaXMgdGFibGUncyBsb2NhdGlvbiBmaWVsZHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcGFydGlhbCBUaGUgZmllbGRzIHNwZWNpZmljIHRvIHRoZSBydWxlIGZpcmluZyAoY29kZSwgbGV2ZWwsIG1lc3NhZ2UsIGZpZWxkKS5cbiAgICAgKiBAcmV0dXJucyBBIGZ1bGwgYFZpb2xhdGlvbmAgd2l0aCBgc2NoZW1hYCwgYHRhYmxlYCwgYW5kIGBwYXRoYCBzZXQuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHZpb2xhdGlvbihwYXJ0aWFsOiBPbWl0PFZpb2xhdGlvbiwgJ3NjaGVtYScgfCAndGFibGUnIHwgJ3BhdGgnPik6IFZpb2xhdGlvbiB7XG4gICAgICAgIGNvbnN0IGxvY2F0aW9uOiBMb2NhdGlvbkZpZWxkcyA9IHtcbiAgICAgICAgICAgIHNjaGVtYTogdGhpcy5zY2hlbWEsXG4gICAgICAgICAgICB0YWJsZTogdGhpcy5uYW1lLFxuICAgICAgICAgICAgcGF0aDogdGhpcy5maWxlUGF0aCxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnBhcnRpYWwsXG4gICAgICAgICAgICAuLi5sb2NhdGlvbixcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoaXMgdGFibGUgZGVjbGFyZXMgYSBkYXRhIGNvbHVtbiB3aXRoIHRoZSBnaXZlbiBuYW1lLlxuICAgICAqXG4gICAgICogQHBhcmFtIG5hbWUgQ29sdW1uIG5hbWUgdG8gbG9vayB1cC5cbiAgICAgKiBAcmV0dXJucyBUcnVlIHdoZW4gYG5hbWVgIG1hdGNoZXMgYW55IGNvbHVtbiBpbiBgZGVmaW5pdGlvbi5jb2x1bW5zYC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgaGFzQ29sdW1uKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZpbml0aW9uLmNvbHVtbnMuc29tZSgoY29sdW1uKSA9PiBjb2x1bW4ubmFtZSA9PT0gbmFtZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmluZCBuYW1lcyB0aGF0IGFwcGVhciBtb3JlIHRoYW4gb25jZSBpbiBhIGxpc3QsIHByZXNlcnZpbmcgdGhlIG9yZGVyXG4gICAgICogb2YgZmlyc3QgZHVwbGljYXRpb24uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbmFtZXMgTmFtZXMgdG8gc2Nhbi5cbiAgICAgKiBAcmV0dXJucyBEdXBsaWNhdGVkIG5hbWVzLCBlYWNoIGxpc3RlZCBvbmNlLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBmaW5kRHVwbGljYXRlcyhuYW1lczogc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gICAgICAgIGNvbnN0IHNlZW4gPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgICAgY29uc3QgZHVwbGljYXRlcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgICAgICBmb3IgKGNvbnN0IG5hbWUgb2YgbmFtZXMpIHtcbiAgICAgICAgICAgIGlmIChzZWVuLmhhcyhuYW1lKSkge1xuICAgICAgICAgICAgICAgIGR1cGxpY2F0ZXMuYWRkKG5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2Vlbi5hZGQobmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIC4uLmR1cGxpY2F0ZXMsXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgLy8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEVuZ2luZS1zcGVjaWZpYyBjb250cmFjdC5cblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgYHR5cGVgIGlzIGEgdmFsaWQgY29sdW1uLXR5cGUgc3RyaW5nIGZvciB0aGlzIGVuZ2luZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0eXBlIENvbHVtbiB0eXBlIHN0cmluZyB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyBUcnVlIHdoZW4gdGhlIGVuZ2luZSBhY2NlcHRzIHRoZSB0eXBlLlxuICAgICAqL1xuICAgIHB1YmxpYyBhYnN0cmFjdCBpc1ZhbGlkQ29sdW1uVHlwZSh0eXBlOiBzdHJpbmcpOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogRW5naW5lLXNwZWNpZmljIHBhcnRpdGlvbiBydWxlczogZHVwbGljYXRlIGRldGVjdGlvbiBwbHVzIHRoZSBlbmdpbmUnc1xuICAgICAqIGtleS9jb2x1bW4gcmVzb2x1dGlvbiBhbmQgdHlwZSAvIHRyYW5zZm9ybSAvIHN0cmF0ZWd5IGxlZ2FsaXR5LlxuICAgICAqXG4gICAgICogQHJldHVybnMgRXZlcnkgcGFydGl0aW9uLXJlbGF0ZWQgdmlvbGF0aW9uIHRoaXMgdGFibGUgcHJvZHVjZXMuXG4gICAgICovXG4gICAgcHVibGljIGFic3RyYWN0IHBhcnRpdGlvblZpb2xhdGlvbnMoKTogVmlvbGF0aW9uW107XG5cbiAgICAvLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gQWdub3N0aWMgaW50cmEtdGFibGUgcnVsZXMuXG5cbiAgICAvLy8gUEtfQ09MVU1OU19FWElTVCDigJQgZXZlcnkgcHJpbWFyeS1rZXkgY29sdW1uIGV4aXN0cyBpbiBgY29sdW1uc2AuXG4gICAgcHJpdmF0ZSBwcmltYXJ5S2V5VmlvbGF0aW9ucygpOiBWaW9sYXRpb25bXSB7XG4gICAgICAgIGNvbnN0IHZpb2xhdGlvbnM6IFZpb2xhdGlvbltdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgcGtDb2x1bW4gb2YgdGhpcy5kZWZpbml0aW9uLnByaW1hcnlLZXkpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5oYXNDb2x1bW4ocGtDb2x1bW4pKSB7XG4gICAgICAgICAgICAgICAgdmlvbGF0aW9ucy5wdXNoKHRoaXMudmlvbGF0aW9uKHtcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgIGNvZGU6ICdQS19DT0xVTU5TX0VYSVNUJyxcbiAgICAgICAgICAgICAgICAgICAgZmllbGQ6ICdwcmltYXJ5S2V5JyxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYHByaW1hcnkta2V5IGNvbHVtbiBcIiR7cGtDb2x1bW59XCIgaXMgbm90IGRlZmluZWQgaW4gY29sdW1uc2AsXG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2aW9sYXRpb25zO1xuICAgIH1cblxuICAgIC8vLyBOT19EVVBMSUNBVEVfQ09MVU1OUyDigJQgY29sdW1uIG5hbWVzIGFyZSB1bmlxdWUgd2l0aGluIGEgdGFibGUuXG4gICAgcHJpdmF0ZSBkdXBsaWNhdGVDb2x1bW5WaW9sYXRpb25zKCk6IFZpb2xhdGlvbltdIHtcbiAgICAgICAgY29uc3QgbmFtZXMgPSB0aGlzLmRlZmluaXRpb24uY29sdW1ucy5tYXAoKGNvbHVtbikgPT4gY29sdW1uLm5hbWUpO1xuICAgICAgICByZXR1cm4gdGhpcy5maW5kRHVwbGljYXRlcyhuYW1lcykubWFwKChkdXBsaWNhdGUpID0+IHRoaXMudmlvbGF0aW9uKHtcbiAgICAgICAgICAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgICAgICAgY29kZTogJ05PX0RVUExJQ0FURV9DT0xVTU5TJyxcbiAgICAgICAgICAgIGZpZWxkOiAnY29sdW1ucycsXG4gICAgICAgICAgICBtZXNzYWdlOiBgZHVwbGljYXRlIGNvbHVtbiBuYW1lIFwiJHtkdXBsaWNhdGV9XCJgLFxuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgLy8vIENPTFVNTl9UWVBFX1ZBTElEIOKAlCBldmVyeSBjb2x1bW4gdHlwZSBpcyB2YWxpZCBmb3IgdGhlIHRhYmxlJ3MgZW5naW5lLlxuICAgIHByaXZhdGUgY29sdW1uVHlwZVZpb2xhdGlvbnMoKTogVmlvbGF0aW9uW10ge1xuICAgICAgICBjb25zdCB2aW9sYXRpb25zOiBWaW9sYXRpb25bXSA9IFtdO1xuICAgICAgICB0aGlzLmRlZmluaXRpb24uY29sdW1ucy5mb3JFYWNoKChjb2x1bW4sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZENvbHVtblR5cGUoY29sdW1uLnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgdmlvbGF0aW9ucy5wdXNoKHRoaXMudmlvbGF0aW9uKHtcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgIGNvZGU6ICdDT0xVTU5fVFlQRV9WQUxJRCcsXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkOiBgY29sdW1uc1ske2luZGV4fV0udHlwZWAsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBcIiR7Y29sdW1uLnR5cGV9XCIgaXMgbm90IGEgdmFsaWQgJHt0aGlzLmRlZmluaXRpb24udGFibGVUeXBlfSB0eXBlIGBcbiAgICAgICAgICAgICAgICAgICAgICAgICsgYGZvciBjb2x1bW4gXCIke2NvbHVtbi5uYW1lfVwiYCxcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdmlvbGF0aW9ucztcbiAgICB9XG5cbiAgICAvLy8gUkFXX05PX0RFUEVORFNfT04gLyBOT05SQVdfUkVRVUlSRVNfREVQRU5EU19PTi5cbiAgICBwcml2YXRlIHJhd0NvbnNpc3RlbmN5VmlvbGF0aW9ucygpOiBWaW9sYXRpb25bXSB7XG4gICAgICAgIGNvbnN0IHZpb2xhdGlvbnM6IFZpb2xhdGlvbltdID0gW107XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIGlzUmF3RGF0YSxcbiAgICAgICAgICAgIGRlcGVuZHNPbixcbiAgICAgICAgfSA9IHRoaXMuZGVmaW5pdGlvbjtcbiAgICAgICAgaWYgKGlzUmF3RGF0YSAmJiBkZXBlbmRzT24ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdmlvbGF0aW9ucy5wdXNoKHRoaXMudmlvbGF0aW9uKHtcbiAgICAgICAgICAgICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICBjb2RlOiAnUkFXX05PX0RFUEVORFNfT04nLFxuICAgICAgICAgICAgICAgIGZpZWxkOiAnZGVwZW5kc09uJyxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAncmF3IHRhYmxlcyAoaXNSYXdEYXRhPXRydWUpIG11c3Qgbm90IGRlY2xhcmUgZGVwZW5kc09uJyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzUmF3RGF0YSAmJiBkZXBlbmRzT24ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB2aW9sYXRpb25zLnB1c2godGhpcy52aW9sYXRpb24oe1xuICAgICAgICAgICAgICAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgIGNvZGU6ICdOT05SQVdfUkVRVUlSRVNfREVQRU5EU19PTicsXG4gICAgICAgICAgICAgICAgZmllbGQ6ICdkZXBlbmRzT24nLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdub24tcmF3IHRhYmxlcyAoaXNSYXdEYXRhPWZhbHNlKSBtdXN0IGRlY2xhcmUgYXQgbGVhc3Qgb25lIGRlcGVuZHNPbicsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZpb2xhdGlvbnM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWxsIGludHJhLXRhYmxlIHZpb2xhdGlvbnMgZm9yIHRoaXMgdGFibGUgKGVuZ2luZS1hZ25vc3RpYyBydWxlcyBwbHVzXG4gICAgICogdGhlIGVuZ2luZS1zcGVjaWZpYyBwYXJ0aXRpb24gcnVsZXMpLlxuICAgICAqXG4gICAgICogQHJldHVybnMgRXZlcnkgaW50cmEtdGFibGUgdmlvbGF0aW9uIHRoaXMgdGFibGUgcHJvZHVjZXMuXG4gICAgICovXG4gICAgcHVibGljIGludHJhVGFibGVWaW9sYXRpb25zKCk6IFZpb2xhdGlvbltdIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIC4uLnRoaXMucHJpbWFyeUtleVZpb2xhdGlvbnMoKSxcbiAgICAgICAgICAgIC4uLnRoaXMuZHVwbGljYXRlQ29sdW1uVmlvbGF0aW9ucygpLFxuICAgICAgICAgICAgLi4udGhpcy5jb2x1bW5UeXBlVmlvbGF0aW9ucygpLFxuICAgICAgICAgICAgLi4udGhpcy5wYXJ0aXRpb25WaW9sYXRpb25zKCksXG4gICAgICAgICAgICAuLi50aGlzLnJhd0NvbnNpc3RlbmN5VmlvbGF0aW9ucygpLFxuICAgICAgICBdO1xuICAgIH1cblxuICAgIC8vLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBDcm9zcy1maWxlIHJ1bGVzLlxuXG4gICAgLy8vIERFUEVORFNfT05fUkVTT0xWRVMg4oCUIGV2ZXJ5IGRlcGVuZHNPbiBlbnRyeSByZXNvbHZlcyB0byBhIHJlYWwgdGFibGUuXG4gICAgcHJpdmF0ZSBkZXBlbmRzT25WaW9sYXRpb25zKHdvcmxkOiBXb3JsZCk6IFZpb2xhdGlvbltdIHtcbiAgICAgICAgY29uc3QgdmlvbGF0aW9uczogVmlvbGF0aW9uW10gPSBbXTtcbiAgICAgICAgdGhpcy5kZWZpbml0aW9uLmRlcGVuZHNPbi5mb3JFYWNoKChkZXBlbmRlbmN5LCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgaWYgKCF3b3JsZC50YWJsZXMuaGFzKGRlcGVuZGVuY3kpKSB7XG4gICAgICAgICAgICAgICAgdmlvbGF0aW9ucy5wdXNoKHRoaXMudmlvbGF0aW9uKHtcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgIGNvZGU6ICdERVBFTkRTX09OX1JFU09MVkVTJyxcbiAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGBkZXBlbmRzT25bJHtpbmRleH1dYCxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYGRlcGVuZHNPbiBcIiR7ZGVwZW5kZW5jeX1cIiBkb2VzIG5vdCByZXNvbHZlIHRvIGEga25vd24gdGFibGVgLFxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB2aW9sYXRpb25zO1xuICAgIH1cblxuICAgIC8vLyBGb3JlaWduLWtleSBjaGVja3MgZm9yIGEgc2luZ2xlIEZLIGVudHJ5LlxuICAgIHByaXZhdGUgZm9yZWlnbktleVZpb2xhdGlvbnMod29ybGQ6IFdvcmxkLCBmazogRm9yZWlnbktleSwgaW5kZXg6IG51bWJlcik6IFZpb2xhdGlvbltdIHtcbiAgICAgICAgY29uc3QgdmlvbGF0aW9uczogVmlvbGF0aW9uW10gPSBbXTtcbiAgICAgICAgY29uc3QgZmllbGQgPSBgZm9yZWlnbktleXNbJHtpbmRleH1dYDtcblxuICAgICAgICBpZiAoIXRoaXMuaGFzQ29sdW1uKGZrLmxvY2FsQ29sdW1uKSkge1xuICAgICAgICAgICAgdmlvbGF0aW9ucy5wdXNoKHRoaXMudmlvbGF0aW9uKHtcbiAgICAgICAgICAgICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICBjb2RlOiAnRktfTE9DQUxfQ09MVU1OX0VYSVNUUycsXG4gICAgICAgICAgICAgICAgZmllbGQ6IGAke2ZpZWxkfS5sb2NhbENvbHVtbmAsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYGxvY2FsIGNvbHVtbiBcIiR7ZmsubG9jYWxDb2x1bW59XCIgaXMgbm90IGRlZmluZWQgaW4gY29sdW1uc2AsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLy8gQSBzZWxmLXJlZmVyZW50aWFsIGZvcmVpZ24ga2V5IChlLmcuIGEgYHBhcmVudF9pZGAgcG9pbnRpbmcgYXQgdGhlIHNhbWVcbiAgICAgICAgLy8vIHRhYmxlJ3Mga2V5KSBkb2VzIG5vdCBjcmVhdGUgYSBwaXBlbGluZSBkZXBlbmRlbmN5LCBzbyBpdCBpcyBleGVtcHQgZnJvbVxuICAgICAgICAvLy8gRktfSU1QTElFU19ERVBFTkRFTkNZIOKAlCByZXF1aXJpbmcgYSBzZWxmLWBkZXBlbmRzT25gIHdvdWxkIG90aGVyd2lzZSBmb3JjZVxuICAgICAgICAvLy8gYSBzcHVyaW91cyBkZXBlbmRlbmN5IGN5Y2xlLlxuICAgICAgICBjb25zdCBpc1NlbGZSZWZlcmVuY2UgPSBmay5zb3VyY2VUYWJsZSA9PT0gdGhpcy5xdWFsaWZpZWROYW1lO1xuICAgICAgICBpZiAoIWlzU2VsZlJlZmVyZW5jZSAmJiAhdGhpcy5kZWZpbml0aW9uLmRlcGVuZHNPbi5pbmNsdWRlcyhmay5zb3VyY2VUYWJsZSkpIHtcbiAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh0aGlzLnZpb2xhdGlvbih7XG4gICAgICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgY29kZTogJ0ZLX0lNUExJRVNfREVQRU5ERU5DWScsXG4gICAgICAgICAgICAgICAgZmllbGQ6IGAke2ZpZWxkfS5zb3VyY2VUYWJsZWAsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYGZvcmVpZ24ga2V5IHRhcmdldHMgXCIke2ZrLnNvdXJjZVRhYmxlfVwiIGJ1dCBpdCBpcyBub3QgbGlzdGVkIGluIGRlcGVuZHNPbmAsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0YXJnZXQgPSB3b3JsZC50YWJsZXMuZ2V0KGZrLnNvdXJjZVRhYmxlKTtcbiAgICAgICAgaWYgKHRhcmdldCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB2aW9sYXRpb25zLnB1c2godGhpcy52aW9sYXRpb24oe1xuICAgICAgICAgICAgICAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgIGNvZGU6ICdGS19TT1VSQ0VfVEFCTEVfUkVTT0xWRVMnLFxuICAgICAgICAgICAgICAgIGZpZWxkOiBgJHtmaWVsZH0uc291cmNlVGFibGVgLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBmb3JlaWduIGtleSBzb3VyY2UgdGFibGUgXCIke2ZrLnNvdXJjZVRhYmxlfVwiIGRvZXMgbm90IHJlc29sdmUgdG8gYSBrbm93biB0YWJsZWAsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICByZXR1cm4gdmlvbGF0aW9ucztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vLyBUaGUgdGFyZ2V0J3Mgb3duIHN0cnVjdHVyYWwgZXJyb3JzIChyZXBvcnRlZCBieSBMYXllciAxKSBhbHJlYWR5IGV4cGxhaW5cbiAgICAgICAgLy8vIHdoeSBpdHMgY29sdW1ucyBjYW4ndCBiZSB0cnVzdGVkOyBza2lwIGNvbHVtbi1sZXZlbCBjaGVja3MgdG8gYXZvaWRcbiAgICAgICAgLy8vIHBpbGluZyBtaXNsZWFkaW5nIGZpbmRpbmdzIG9uIHRvcC5cbiAgICAgICAgaWYgKCF0YXJnZXQuc3RydWN0dXJhbGx5VmFsaWQpIHtcbiAgICAgICAgICAgIHJldHVybiB2aW9sYXRpb25zO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGFyZ2V0SGFzQ29sdW1uID0gdGFyZ2V0LmRlZmluaXRpb24uY29sdW1ucy5zb21lKChjb2x1bW4pID0+IGNvbHVtbi5uYW1lID09PSBmay5zb3VyY2VDb2x1bW4pO1xuICAgICAgICBpZiAoIXRhcmdldEhhc0NvbHVtbikge1xuICAgICAgICAgICAgdmlvbGF0aW9ucy5wdXNoKHRoaXMudmlvbGF0aW9uKHtcbiAgICAgICAgICAgICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICBjb2RlOiAnRktfU09VUkNFX0NPTFVNTl9FWElTVFMnLFxuICAgICAgICAgICAgICAgIGZpZWxkOiBgJHtmaWVsZH0uc291cmNlQ29sdW1uYCxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBgZm9yZWlnbiBrZXkgc291cmNlIGNvbHVtbiBcIiR7Zmsuc291cmNlQ29sdW1ufVwiIGlzIG5vdCBkZWZpbmVkIGluIFwiJHtmay5zb3VyY2VUYWJsZX1cImAsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICByZXR1cm4gdmlvbGF0aW9ucztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGFyZ2V0LmRlZmluaXRpb24ucHJpbWFyeUtleS5pbmNsdWRlcyhmay5zb3VyY2VDb2x1bW4pKSB7XG4gICAgICAgICAgICB2aW9sYXRpb25zLnB1c2godGhpcy52aW9sYXRpb24oe1xuICAgICAgICAgICAgICAgIGxldmVsOiAnd2FybmluZycsXG4gICAgICAgICAgICAgICAgY29kZTogJ0ZLX1NPVVJDRV9JU19LRVknLFxuICAgICAgICAgICAgICAgIGZpZWxkOiBgJHtmaWVsZH0uc291cmNlQ29sdW1uYCxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBgZm9yZWlnbiBrZXkgc291cmNlIGNvbHVtbiBcIiR7Zmsuc291cmNlQ29sdW1ufVwiIGlzIG5vdCBwYXJ0IG9mIHRoZSBwcmltYXJ5IGtleSBgXG4gICAgICAgICAgICAgICAgICAgICsgYG9mIFwiJHtmay5zb3VyY2VUYWJsZX1cImAsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdmlvbGF0aW9ucztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBbGwgY3Jvc3MtZmlsZSB2aW9sYXRpb25zIGZvciB0aGlzIHRhYmxlIChgZGVwZW5kc09uYCByZXNvbHV0aW9uIHBsdXNcbiAgICAgKiB0aGUgZnVsbCBmb3JlaWduLWtleSBzdWl0ZSkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gd29ybGQgVGhlIGxvYWRlZCBkYXRhc2V0IHJvb3QuXG4gICAgICogQHJldHVybnMgRXZlcnkgY3Jvc3MtZmlsZSB2aW9sYXRpb24gdGhpcyB0YWJsZSBwcm9kdWNlcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgY3Jvc3NGaWxlVmlvbGF0aW9ucyh3b3JsZDogV29ybGQpOiBWaW9sYXRpb25bXSB7XG4gICAgICAgIGNvbnN0IHZpb2xhdGlvbnM6IFZpb2xhdGlvbltdID0gW1xuICAgICAgICAgICAgLi4udGhpcy5kZXBlbmRzT25WaW9sYXRpb25zKHdvcmxkKSxcbiAgICAgICAgXTtcbiAgICAgICAgdGhpcy5kZWZpbml0aW9uLmZvcmVpZ25LZXlzLmZvckVhY2goKGZrLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgdmlvbGF0aW9ucy5wdXNoKC4uLnRoaXMuZm9yZWlnbktleVZpb2xhdGlvbnMod29ybGQsIGZrLCBpbmRleCkpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHZpb2xhdGlvbnM7XG4gICAgfVxufVxuIl19
308
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtdHlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90YWJsZS10eXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7OztHQVVHOzs7QUFtQ0g7Ozs7Ozs7R0FPRztBQUNILE1BQXNCLGFBQWE7SUFDL0IsMEJBQTBCO0lBQ1YsTUFBTSxDQUFTO0lBRS9CLGtCQUFrQjtJQUNGLElBQUksQ0FBUztJQUU3QixpQ0FBaUM7SUFDakIsYUFBYSxDQUFTO0lBRXRDLHdDQUF3QztJQUN4QixRQUFRLENBQVM7SUFFakMsNkRBQTZEO0lBQzdDLGlCQUFpQixDQUFVO0lBRTNDLDZCQUE2QjtJQUNiLFVBQVUsQ0FBa0I7SUFFNUM7Ozs7O09BS0c7SUFDSCxZQUFZLE1BQXVCO1FBQy9CLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUM1QixJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDeEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDO1FBQzFDLElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQztRQUNoQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDO1FBQ2xELElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQztJQUN4QyxDQUFDO0lBRUQsNEVBQTRFO0lBQzVFLHNEQUFzRDtJQUV0RDs7Ozs7T0FLRztJQUNPLFNBQVMsQ0FBQyxPQUFxRDtRQUNyRSxNQUFNLFFBQVEsR0FBbUI7WUFDN0IsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNoQixJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVE7U0FDdEIsQ0FBQztRQUNGLE9BQU87WUFDSCxHQUFHLE9BQU87WUFDVixHQUFHLFFBQVE7U0FDZCxDQUFD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QUFDLEtBQVk7UUFDbkMsTUFBTSxVQUFVLEdBQWdCO1lBQzVCLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQztTQUNyQyxDQUFDO1FBQ0YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQzlDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3BFLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxVQUFVLENBQUM7SUFDdEIsQ0FBQztDQUNKO0FBaFZELHNDQWdWQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQWJzdHJhY3QgYmFzZSBjbGFzcyBmb3IgYSBsb2FkZWQgdGFibGUuIE9uZSBzdWJjbGFzcyBwZXIgZW5naW5lLlxuICpcbiAqIEhvbGRzIHRoZSBub3JtYWxpemVkIHRhYmxlIGlkZW50aXR5IGFuZCBkZWZpbml0aW9uLCBwbHVzIHRoZVxuICogZW5naW5lLWFnbm9zdGljIExheWVyIDIgcnVsZXMgYXMgY29uY3JldGUgbWV0aG9kcy4gRW5naW5lLXNwZWNpZmljIHJ1bGVzXG4gKiAoY29sdW1uLXR5cGUgdmFsaWRpdHksIHBhcnRpdGlvbiBzZW1hbnRpY3MpIGFyZSBhYnN0cmFjdCDigJQgZWFjaCBzdWJjbGFzc1xuICogaW1wbGVtZW50cyB0aGVtLCB3aGljaCBpcyB0aGUgbGV2ZXIgdGhhdCBsZXRzIG5ldyBlbmdpbmVzIHBsdWcgaW4gd2l0aG91dFxuICogZWRpdGluZyBzY2F0dGVyZWQgc3dpdGNoZXMuIFRoZSBjcm9zcy1maWxlIHJ1bGVzIGFyZSBjb25jcmV0ZSBoZXJlIHRvbztcbiAqIHRoZXkgdGFrZSB0aGUgd29ybGQgYnkgYW4gaW50ZXJmYWNlIHNvIHRoZSBjeWNsZSBiZXR3ZWVuIHRoaXMgbW9kdWxlIGFuZFxuICogYC4vd29ybGRgIGlzIGtlcHQgYXQgdHlwZS1sZXZlbCBvbmx5LlxuICovXG5cbmltcG9ydCB7XG4gICAgRm9yZWlnbktleSxcbiAgICBUYWJsZURlZmluaXRpb24sXG4gICAgVmlvbGF0aW9uLFxufSBmcm9tICcuL21vZGVsJztcbmltcG9ydCB0eXBlIHtcbiAgICBXb3JsZCxcbn0gZnJvbSAnLi93b3JsZCc7XG5cbi8qKiBGaWVsZHMgcmVxdWlyZWQgdG8gY29uc3RydWN0IGFueSBjb25jcmV0ZSB0YWJsZSBzdWJjbGFzcy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGFibGVUeXBlRmllbGRzIHtcbiAgICAvKiogT3duaW5nIHNjaGVtYSBuYW1lICh0aGUgZm9sZGVyIG5hbWUpLiAqL1xuICAgIHJlYWRvbmx5IHNjaGVtYTogc3RyaW5nO1xuXG4gICAgLyoqIFRhYmxlIG5hbWUgKHRoZSBmaWxlIG5hbWUgd2l0aG91dCBgLmpzb25gKS4gKi9cbiAgICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgICAvKiogYHNjaGVtYS50YWJsZWAgaWRlbnRpZmllci4gKi9cbiAgICByZWFkb25seSBxdWFsaWZpZWROYW1lOiBzdHJpbmc7XG5cbiAgICAvKiogQWJzb2x1dGUgcGF0aCB0byB0aGUgc291cmNlIGZpbGUuICovXG4gICAgcmVhZG9ubHkgZmlsZVBhdGg6IHN0cmluZztcblxuICAgIC8qKiBXaGV0aGVyIHRoZSBmaWxlIHBhc3NlZCBMYXllciAxIHN0cnVjdHVyYWwgdmFsaWRhdGlvbi4gKi9cbiAgICByZWFkb25seSBzdHJ1Y3R1cmFsbHlWYWxpZDogYm9vbGVhbjtcblxuICAgIC8qKiBOb3JtYWxpemVkIGRlZmluaXRpb24uICovXG4gICAgcmVhZG9ubHkgZGVmaW5pdGlvbjogVGFibGVEZWZpbml0aW9uO1xufVxuXG4vKiogUHJlLWZpbGxlZCBsb2NhdGlvbiBmaWVsZHMgYXR0YWNoZWQgdG8gZXZlcnkgdmlvbGF0aW9uIGEgdGFibGUgZW1pdHMuICovXG50eXBlIExvY2F0aW9uRmllbGRzID0gUGljazxWaW9sYXRpb24sICdzY2hlbWEnIHwgJ3RhYmxlJyB8ICdwYXRoJz47XG5cbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgYWxsIGVuZ2luZS1zcGVjaWZpYyB0YWJsZSB0eXBlcy5cbiAqXG4gKiBTdWJjbGFzc2VzIGltcGxlbWVudCBgaXNWYWxpZENvbHVtblR5cGVgICh0aGUgZW5naW5lJ3MgdHlwZSByZWdpc3RyeSkgYW5kXG4gKiBgcGFydGl0aW9uVmlvbGF0aW9uc2AgKHRoZSBlbmdpbmUncyBwYXJ0aXRpb24gc2VtYW50aWNzKS4gRXZlcnl0aGluZyBlbHNlXG4gKiDigJQgcHJpbWFyeS1rZXkgY2hlY2tzLCBkdXBlcywgcmF3IGNvbnNpc3RlbmN5LCBkZXBlbmRzLW9uIHJlc29sdXRpb24sXG4gKiBmb3JlaWduLWtleSBjaGVja3Mg4oCUIGlzIGlkZW50aWNhbCBhY3Jvc3MgZW5naW5lcyBhbmQgbGl2ZXMgaGVyZS5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFRhYmxlVHlwZUJhc2Uge1xuICAgIC8qKiBPd25pbmcgc2NoZW1hIG5hbWUuICovXG4gICAgcHVibGljIHJlYWRvbmx5IHNjaGVtYTogc3RyaW5nO1xuXG4gICAgLyoqIFRhYmxlIG5hbWUuICovXG4gICAgcHVibGljIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAgIC8qKiBgc2NoZW1hLnRhYmxlYCBpZGVudGlmaWVyLiAqL1xuICAgIHB1YmxpYyByZWFkb25seSBxdWFsaWZpZWROYW1lOiBzdHJpbmc7XG5cbiAgICAvKiogQWJzb2x1dGUgcGF0aCB0byB0aGUgc291cmNlIGZpbGUuICovXG4gICAgcHVibGljIHJlYWRvbmx5IGZpbGVQYXRoOiBzdHJpbmc7XG5cbiAgICAvKiogV2hldGhlciB0aGUgZmlsZSBwYXNzZWQgTGF5ZXIgMSBzdHJ1Y3R1cmFsIHZhbGlkYXRpb24uICovXG4gICAgcHVibGljIHJlYWRvbmx5IHN0cnVjdHVyYWxseVZhbGlkOiBib29sZWFuO1xuXG4gICAgLyoqIE5vcm1hbGl6ZWQgZGVmaW5pdGlvbi4gKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgZGVmaW5pdGlvbjogVGFibGVEZWZpbml0aW9uO1xuXG4gICAgLyoqXG4gICAgICogQ29uc3RydWN0IGEgdGFibGUgaW5zdGFuY2UgZnJvbSB0aGUgbm9ybWFsaXplZCBmaWVsZHMgcHJvZHVjZWQgYnkgdGhlXG4gICAgICogbG9hZGVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIGZpZWxkcyBUaGUgdGFibGUgaWRlbnRpdHkgcGx1cyBpdHMgcGFyc2VkLCBub3JtYWxpemVkIGRlZmluaXRpb24uXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoZmllbGRzOiBUYWJsZVR5cGVGaWVsZHMpIHtcbiAgICAgICAgdGhpcy5zY2hlbWEgPSBmaWVsZHMuc2NoZW1hO1xuICAgICAgICB0aGlzLm5hbWUgPSBmaWVsZHMubmFtZTtcbiAgICAgICAgdGhpcy5xdWFsaWZpZWROYW1lID0gZmllbGRzLnF1YWxpZmllZE5hbWU7XG4gICAgICAgIHRoaXMuZmlsZVBhdGggPSBmaWVsZHMuZmlsZVBhdGg7XG4gICAgICAgIHRoaXMuc3RydWN0dXJhbGx5VmFsaWQgPSBmaWVsZHMuc3RydWN0dXJhbGx5VmFsaWQ7XG4gICAgICAgIHRoaXMuZGVmaW5pdGlvbiA9IGZpZWxkcy5kZWZpbml0aW9uO1xuICAgIH1cblxuICAgIC8vLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBIZWxwZXJzIHNoYXJlZCBieSBpbnRyYS10YWJsZSBhbmQgY3Jvc3MtZmlsZSBydWxlcy5cblxuICAgIC8qKlxuICAgICAqIEJ1aWxkIGEgdmlvbGF0aW9uIHByZS1maWxsZWQgd2l0aCB0aGlzIHRhYmxlJ3MgbG9jYXRpb24gZmllbGRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHBhcnRpYWwgVGhlIGZpZWxkcyBzcGVjaWZpYyB0byB0aGUgcnVsZSBmaXJpbmcgKGNvZGUsIGxldmVsLCBtZXNzYWdlLCBmaWVsZCkuXG4gICAgICogQHJldHVybnMgQSBmdWxsIGBWaW9sYXRpb25gIHdpdGggYHNjaGVtYWAsIGB0YWJsZWAsIGFuZCBgcGF0aGAgc2V0LlxuICAgICAqL1xuICAgIHByb3RlY3RlZCB2aW9sYXRpb24ocGFydGlhbDogT21pdDxWaW9sYXRpb24sICdzY2hlbWEnIHwgJ3RhYmxlJyB8ICdwYXRoJz4pOiBWaW9sYXRpb24ge1xuICAgICAgICBjb25zdCBsb2NhdGlvbjogTG9jYXRpb25GaWVsZHMgPSB7XG4gICAgICAgICAgICBzY2hlbWE6IHRoaXMuc2NoZW1hLFxuICAgICAgICAgICAgdGFibGU6IHRoaXMubmFtZSxcbiAgICAgICAgICAgIHBhdGg6IHRoaXMuZmlsZVBhdGgsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5wYXJ0aWFsLFxuICAgICAgICAgICAgLi4ubG9jYXRpb24sXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGlzIHRhYmxlIGRlY2xhcmVzIGEgZGF0YSBjb2x1bW4gd2l0aCB0aGUgZ2l2ZW4gbmFtZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBuYW1lIENvbHVtbiBuYW1lIHRvIGxvb2sgdXAuXG4gICAgICogQHJldHVybnMgVHJ1ZSB3aGVuIGBuYW1lYCBtYXRjaGVzIGFueSBjb2x1bW4gaW4gYGRlZmluaXRpb24uY29sdW1uc2AuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGhhc0NvbHVtbihuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmaW5pdGlvbi5jb2x1bW5zLnNvbWUoKGNvbHVtbikgPT4gY29sdW1uLm5hbWUgPT09IG5hbWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpbmQgbmFtZXMgdGhhdCBhcHBlYXIgbW9yZSB0aGFuIG9uY2UgaW4gYSBsaXN0LCBwcmVzZXJ2aW5nIHRoZSBvcmRlclxuICAgICAqIG9mIGZpcnN0IGR1cGxpY2F0aW9uLlxuICAgICAqXG4gICAgICogQHBhcmFtIG5hbWVzIE5hbWVzIHRvIHNjYW4uXG4gICAgICogQHJldHVybnMgRHVwbGljYXRlZCBuYW1lcywgZWFjaCBsaXN0ZWQgb25jZS5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgZmluZER1cGxpY2F0ZXMobmFtZXM6IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICAgICAgICBjb25zdCBzZWVuID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgICAgIGNvbnN0IGR1cGxpY2F0ZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgICAgZm9yIChjb25zdCBuYW1lIG9mIG5hbWVzKSB7XG4gICAgICAgICAgICBpZiAoc2Vlbi5oYXMobmFtZSkpIHtcbiAgICAgICAgICAgICAgICBkdXBsaWNhdGVzLmFkZChuYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlZW4uYWRkKG5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAuLi5kdXBsaWNhdGVzLFxuICAgICAgICBdO1xuICAgIH1cblxuICAgIC8vLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBFbmdpbmUtc3BlY2lmaWMgY29udHJhY3QuXG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIGB0eXBlYCBpcyBhIHZhbGlkIGNvbHVtbi10eXBlIHN0cmluZyBmb3IgdGhpcyBlbmdpbmUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdHlwZSBDb2x1bW4gdHlwZSBzdHJpbmcgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMgVHJ1ZSB3aGVuIHRoZSBlbmdpbmUgYWNjZXB0cyB0aGUgdHlwZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWJzdHJhY3QgaXNWYWxpZENvbHVtblR5cGUodHlwZTogc3RyaW5nKTogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEVuZ2luZS1zcGVjaWZpYyBwYXJ0aXRpb24gcnVsZXM6IGR1cGxpY2F0ZSBkZXRlY3Rpb24gcGx1cyB0aGUgZW5naW5lJ3NcbiAgICAgKiBrZXkvY29sdW1uIHJlc29sdXRpb24gYW5kIHR5cGUgLyB0cmFuc2Zvcm0gLyBzdHJhdGVneSBsZWdhbGl0eS5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIEV2ZXJ5IHBhcnRpdGlvbi1yZWxhdGVkIHZpb2xhdGlvbiB0aGlzIHRhYmxlIHByb2R1Y2VzLlxuICAgICAqL1xuICAgIHB1YmxpYyBhYnN0cmFjdCBwYXJ0aXRpb25WaW9sYXRpb25zKCk6IFZpb2xhdGlvbltdO1xuXG4gICAgLy8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEFnbm9zdGljIGludHJhLXRhYmxlIHJ1bGVzLlxuXG4gICAgLy8vIFBLX0NPTFVNTlNfRVhJU1Qg4oCUIGV2ZXJ5IHByaW1hcnkta2V5IGNvbHVtbiBleGlzdHMgaW4gYGNvbHVtbnNgLlxuICAgIHByaXZhdGUgcHJpbWFyeUtleVZpb2xhdGlvbnMoKTogVmlvbGF0aW9uW10ge1xuICAgICAgICBjb25zdCB2aW9sYXRpb25zOiBWaW9sYXRpb25bXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHBrQ29sdW1uIG9mIHRoaXMuZGVmaW5pdGlvbi5wcmltYXJ5S2V5KSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaGFzQ29sdW1uKHBrQ29sdW1uKSkge1xuICAgICAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh0aGlzLnZpb2xhdGlvbih7XG4gICAgICAgICAgICAgICAgICAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICBjb2RlOiAnUEtfQ09MVU1OU19FWElTVCcsXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkOiAncHJpbWFyeUtleScsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBwcmltYXJ5LWtleSBjb2x1bW4gXCIke3BrQ29sdW1ufVwiIGlzIG5vdCBkZWZpbmVkIGluIGNvbHVtbnNgLFxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmlvbGF0aW9ucztcbiAgICB9XG5cbiAgICAvLy8gTk9fRFVQTElDQVRFX0NPTFVNTlMg4oCUIGNvbHVtbiBuYW1lcyBhcmUgdW5pcXVlIHdpdGhpbiBhIHRhYmxlLlxuICAgIHByaXZhdGUgZHVwbGljYXRlQ29sdW1uVmlvbGF0aW9ucygpOiBWaW9sYXRpb25bXSB7XG4gICAgICAgIGNvbnN0IG5hbWVzID0gdGhpcy5kZWZpbml0aW9uLmNvbHVtbnMubWFwKChjb2x1bW4pID0+IGNvbHVtbi5uYW1lKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmluZER1cGxpY2F0ZXMobmFtZXMpLm1hcCgoZHVwbGljYXRlKSA9PiB0aGlzLnZpb2xhdGlvbih7XG4gICAgICAgICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgICAgICAgIGNvZGU6ICdOT19EVVBMSUNBVEVfQ09MVU1OUycsXG4gICAgICAgICAgICBmaWVsZDogJ2NvbHVtbnMnLFxuICAgICAgICAgICAgbWVzc2FnZTogYGR1cGxpY2F0ZSBjb2x1bW4gbmFtZSBcIiR7ZHVwbGljYXRlfVwiYCxcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIC8vLyBDT0xVTU5fVFlQRV9WQUxJRCDigJQgZXZlcnkgY29sdW1uIHR5cGUgaXMgdmFsaWQgZm9yIHRoZSB0YWJsZSdzIGVuZ2luZS5cbiAgICBwcml2YXRlIGNvbHVtblR5cGVWaW9sYXRpb25zKCk6IFZpb2xhdGlvbltdIHtcbiAgICAgICAgY29uc3QgdmlvbGF0aW9uczogVmlvbGF0aW9uW10gPSBbXTtcbiAgICAgICAgdGhpcy5kZWZpbml0aW9uLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWRDb2x1bW5UeXBlKGNvbHVtbi50eXBlKSkge1xuICAgICAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh0aGlzLnZpb2xhdGlvbih7XG4gICAgICAgICAgICAgICAgICAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICBjb2RlOiAnQ09MVU1OX1RZUEVfVkFMSUQnLFxuICAgICAgICAgICAgICAgICAgICBmaWVsZDogYGNvbHVtbnNbJHtpbmRleH1dLnR5cGVgLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgXCIke2NvbHVtbi50eXBlfVwiIGlzIG5vdCBhIHZhbGlkICR7dGhpcy5kZWZpbml0aW9uLnRhYmxlVHlwZX0gdHlwZSBgXG4gICAgICAgICAgICAgICAgICAgICAgICArIGBmb3IgY29sdW1uIFwiJHtjb2x1bW4ubmFtZX1cImAsXG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHZpb2xhdGlvbnM7XG4gICAgfVxuXG4gICAgLy8vIFJBV19OT19ERVBFTkRTX09OIC8gTk9OUkFXX1JFUVVJUkVTX0RFUEVORFNfT04uXG4gICAgcHJpdmF0ZSByYXdDb25zaXN0ZW5jeVZpb2xhdGlvbnMoKTogVmlvbGF0aW9uW10ge1xuICAgICAgICBjb25zdCB2aW9sYXRpb25zOiBWaW9sYXRpb25bXSA9IFtdO1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBpc1Jhd0RhdGEsXG4gICAgICAgICAgICBkZXBlbmRzT24sXG4gICAgICAgIH0gPSB0aGlzLmRlZmluaXRpb247XG4gICAgICAgIGlmIChpc1Jhd0RhdGEgJiYgZGVwZW5kc09uLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh0aGlzLnZpb2xhdGlvbih7XG4gICAgICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgY29kZTogJ1JBV19OT19ERVBFTkRTX09OJyxcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2RlcGVuZHNPbicsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ3JhdyB0YWJsZXMgKGlzUmF3RGF0YT10cnVlKSBtdXN0IG5vdCBkZWNsYXJlIGRlcGVuZHNPbicsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1Jhd0RhdGEgJiYgZGVwZW5kc09uLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdmlvbGF0aW9ucy5wdXNoKHRoaXMudmlvbGF0aW9uKHtcbiAgICAgICAgICAgICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICBjb2RlOiAnTk9OUkFXX1JFUVVJUkVTX0RFUEVORFNfT04nLFxuICAgICAgICAgICAgICAgIGZpZWxkOiAnZGVwZW5kc09uJyxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnbm9uLXJhdyB0YWJsZXMgKGlzUmF3RGF0YT1mYWxzZSkgbXVzdCBkZWNsYXJlIGF0IGxlYXN0IG9uZSBkZXBlbmRzT24nLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2aW9sYXRpb25zO1xuICAgIH1cblxuICAgIC8vLyBQS19DT0xVTU5fTk9UX05VTExBQkxFIC8gRktfTlVMTEFCSUxJVFlfQ09OU0lTVEVOVCDigJQgcGVyLWNvbHVtblxuICAgIC8vLyBudWxsYWJpbGl0eSBjb250cmFkaWN0aW9ucyBhZ2FpbnN0IHRoZSBwcmltYXJ5IGtleSBhbmQgZm9yZWlnbiBrZXlzLlxuICAgIHByaXZhdGUgbnVsbGFiaWxpdHlWaW9sYXRpb25zKCk6IFZpb2xhdGlvbltdIHtcbiAgICAgICAgY29uc3QgdmlvbGF0aW9uczogVmlvbGF0aW9uW10gPSBbXTtcblxuICAgICAgICAvLy8gQSBwcmltYXJ5LWtleSBjb2x1bW4gaXMgaW1wbGljaXRseSBOT1QgTlVMTCwgc28gZGVjbGFyaW5nIGl0IG51bGxhYmxlXG4gICAgICAgIC8vLyBpcyBhIGNvbnRyYWRpY3Rpb24uXG4gICAgICAgIGZvciAoY29uc3QgcGtDb2x1bW4gb2YgdGhpcy5kZWZpbml0aW9uLnByaW1hcnlLZXkpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuZGVmaW5pdGlvbi5jb2x1bW5zLmZpbmQoKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlLm5hbWUgPT09IHBrQ29sdW1uKTtcbiAgICAgICAgICAgIGlmIChjb2x1bW4gIT09IHVuZGVmaW5lZCAmJiBjb2x1bW4ubnVsbGFibGUgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICB2aW9sYXRpb25zLnB1c2godGhpcy52aW9sYXRpb24oe1xuICAgICAgICAgICAgICAgICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgY29kZTogJ1BLX0NPTFVNTl9OT1RfTlVMTEFCTEUnLFxuICAgICAgICAgICAgICAgICAgICBmaWVsZDogJ3ByaW1hcnlLZXknLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgcHJpbWFyeS1rZXkgY29sdW1uIFwiJHtwa0NvbHVtbn1cIiBjYW5ub3QgYmUgbnVsbGFibGUgKGRlY2xhcmVkIG51bGxhYmxlOiB0cnVlKWAsXG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8vIEEgTk9UIE5VTEwgbG9jYWwgY29sdW1uIGNhbiBuZXZlciBiZSBudWxsLCBzbyBhIGZvcmVpZ24ga2V5IHRoYXRcbiAgICAgICAgLy8vIHBlcm1pdHMgbnVsbHMgb24gaXQgaXMgaW5jb25zaXN0ZW50LlxuICAgICAgICB0aGlzLmRlZmluaXRpb24uZm9yZWlnbktleXMuZm9yRWFjaCgoZmssIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmRlZmluaXRpb24uY29sdW1ucy5maW5kKChjYW5kaWRhdGUpID0+IGNhbmRpZGF0ZS5uYW1lID09PSBmay5sb2NhbENvbHVtbik7XG4gICAgICAgICAgICBpZiAoY29sdW1uICE9PSB1bmRlZmluZWQgJiYgY29sdW1uLm51bGxhYmxlID09PSBmYWxzZSAmJiBmay5hbGxvd051bGxzKSB7XG4gICAgICAgICAgICAgICAgdmlvbGF0aW9ucy5wdXNoKHRoaXMudmlvbGF0aW9uKHtcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6ICd3YXJuaW5nJyxcbiAgICAgICAgICAgICAgICAgICAgY29kZTogJ0ZLX05VTExBQklMSVRZX0NPTlNJU1RFTlQnLFxuICAgICAgICAgICAgICAgICAgICBmaWVsZDogYGZvcmVpZ25LZXlzWyR7aW5kZXh9XS5hbGxvd051bGxzYCxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYGZvcmVpZ24ga2V5IGFsbG93cyBudWxscyBidXQgbG9jYWwgY29sdW1uIFwiJHtmay5sb2NhbENvbHVtbn1cIiBpcyBkZWNsYXJlZCBub24tbnVsbGFibGVgLFxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHZpb2xhdGlvbnM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWxsIGludHJhLXRhYmxlIHZpb2xhdGlvbnMgZm9yIHRoaXMgdGFibGUgKGVuZ2luZS1hZ25vc3RpYyBydWxlcyBwbHVzXG4gICAgICogdGhlIGVuZ2luZS1zcGVjaWZpYyBwYXJ0aXRpb24gcnVsZXMpLlxuICAgICAqXG4gICAgICogQHJldHVybnMgRXZlcnkgaW50cmEtdGFibGUgdmlvbGF0aW9uIHRoaXMgdGFibGUgcHJvZHVjZXMuXG4gICAgICovXG4gICAgcHVibGljIGludHJhVGFibGVWaW9sYXRpb25zKCk6IFZpb2xhdGlvbltdIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIC4uLnRoaXMucHJpbWFyeUtleVZpb2xhdGlvbnMoKSxcbiAgICAgICAgICAgIC4uLnRoaXMuZHVwbGljYXRlQ29sdW1uVmlvbGF0aW9ucygpLFxuICAgICAgICAgICAgLi4udGhpcy5jb2x1bW5UeXBlVmlvbGF0aW9ucygpLFxuICAgICAgICAgICAgLi4udGhpcy5wYXJ0aXRpb25WaW9sYXRpb25zKCksXG4gICAgICAgICAgICAuLi50aGlzLnJhd0NvbnNpc3RlbmN5VmlvbGF0aW9ucygpLFxuICAgICAgICAgICAgLi4udGhpcy5udWxsYWJpbGl0eVZpb2xhdGlvbnMoKSxcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICAvLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gQ3Jvc3MtZmlsZSBydWxlcy5cblxuICAgIC8vLyBERVBFTkRTX09OX1JFU09MVkVTIOKAlCBldmVyeSBkZXBlbmRzT24gZW50cnkgcmVzb2x2ZXMgdG8gYSByZWFsIHRhYmxlLlxuICAgIHByaXZhdGUgZGVwZW5kc09uVmlvbGF0aW9ucyh3b3JsZDogV29ybGQpOiBWaW9sYXRpb25bXSB7XG4gICAgICAgIGNvbnN0IHZpb2xhdGlvbnM6IFZpb2xhdGlvbltdID0gW107XG4gICAgICAgIHRoaXMuZGVmaW5pdGlvbi5kZXBlbmRzT24uZm9yRWFjaCgoZGVwZW5kZW5jeSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGlmICghd29ybGQudGFibGVzLmhhcyhkZXBlbmRlbmN5KSkge1xuICAgICAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh0aGlzLnZpb2xhdGlvbih7XG4gICAgICAgICAgICAgICAgICAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICBjb2RlOiAnREVQRU5EU19PTl9SRVNPTFZFUycsXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkOiBgZGVwZW5kc09uWyR7aW5kZXh9XWAsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBkZXBlbmRzT24gXCIke2RlcGVuZGVuY3l9XCIgZG9lcyBub3QgcmVzb2x2ZSB0byBhIGtub3duIHRhYmxlYCxcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdmlvbGF0aW9ucztcbiAgICB9XG5cbiAgICAvLy8gRm9yZWlnbi1rZXkgY2hlY2tzIGZvciBhIHNpbmdsZSBGSyBlbnRyeS5cbiAgICBwcml2YXRlIGZvcmVpZ25LZXlWaW9sYXRpb25zKHdvcmxkOiBXb3JsZCwgZms6IEZvcmVpZ25LZXksIGluZGV4OiBudW1iZXIpOiBWaW9sYXRpb25bXSB7XG4gICAgICAgIGNvbnN0IHZpb2xhdGlvbnM6IFZpb2xhdGlvbltdID0gW107XG4gICAgICAgIGNvbnN0IGZpZWxkID0gYGZvcmVpZ25LZXlzWyR7aW5kZXh9XWA7XG5cbiAgICAgICAgaWYgKCF0aGlzLmhhc0NvbHVtbihmay5sb2NhbENvbHVtbikpIHtcbiAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh0aGlzLnZpb2xhdGlvbih7XG4gICAgICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgY29kZTogJ0ZLX0xPQ0FMX0NPTFVNTl9FWElTVFMnLFxuICAgICAgICAgICAgICAgIGZpZWxkOiBgJHtmaWVsZH0ubG9jYWxDb2x1bW5gLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBsb2NhbCBjb2x1bW4gXCIke2ZrLmxvY2FsQ29sdW1ufVwiIGlzIG5vdCBkZWZpbmVkIGluIGNvbHVtbnNgLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8vIEEgc2VsZi1yZWZlcmVudGlhbCBmb3JlaWduIGtleSAoZS5nLiBhIGBwYXJlbnRfaWRgIHBvaW50aW5nIGF0IHRoZSBzYW1lXG4gICAgICAgIC8vLyB0YWJsZSdzIGtleSkgZG9lcyBub3QgY3JlYXRlIGEgcGlwZWxpbmUgZGVwZW5kZW5jeSwgc28gaXQgaXMgZXhlbXB0IGZyb21cbiAgICAgICAgLy8vIEZLX0lNUExJRVNfREVQRU5ERU5DWSDigJQgcmVxdWlyaW5nIGEgc2VsZi1gZGVwZW5kc09uYCB3b3VsZCBvdGhlcndpc2UgZm9yY2VcbiAgICAgICAgLy8vIGEgc3B1cmlvdXMgZGVwZW5kZW5jeSBjeWNsZS5cbiAgICAgICAgY29uc3QgaXNTZWxmUmVmZXJlbmNlID0gZmsuc291cmNlVGFibGUgPT09IHRoaXMucXVhbGlmaWVkTmFtZTtcbiAgICAgICAgaWYgKCFpc1NlbGZSZWZlcmVuY2UgJiYgIXRoaXMuZGVmaW5pdGlvbi5kZXBlbmRzT24uaW5jbHVkZXMoZmsuc291cmNlVGFibGUpKSB7XG4gICAgICAgICAgICB2aW9sYXRpb25zLnB1c2godGhpcy52aW9sYXRpb24oe1xuICAgICAgICAgICAgICAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgIGNvZGU6ICdGS19JTVBMSUVTX0RFUEVOREVOQ1knLFxuICAgICAgICAgICAgICAgIGZpZWxkOiBgJHtmaWVsZH0uc291cmNlVGFibGVgLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBmb3JlaWduIGtleSB0YXJnZXRzIFwiJHtmay5zb3VyY2VUYWJsZX1cIiBidXQgaXQgaXMgbm90IGxpc3RlZCBpbiBkZXBlbmRzT25gLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gd29ybGQudGFibGVzLmdldChmay5zb3VyY2VUYWJsZSk7XG4gICAgICAgIGlmICh0YXJnZXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdmlvbGF0aW9ucy5wdXNoKHRoaXMudmlvbGF0aW9uKHtcbiAgICAgICAgICAgICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICBjb2RlOiAnRktfU09VUkNFX1RBQkxFX1JFU09MVkVTJyxcbiAgICAgICAgICAgICAgICBmaWVsZDogYCR7ZmllbGR9LnNvdXJjZVRhYmxlYCxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBgZm9yZWlnbiBrZXkgc291cmNlIHRhYmxlIFwiJHtmay5zb3VyY2VUYWJsZX1cIiBkb2VzIG5vdCByZXNvbHZlIHRvIGEga25vd24gdGFibGVgLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgcmV0dXJuIHZpb2xhdGlvbnM7XG4gICAgICAgIH1cblxuICAgICAgICAvLy8gVGhlIHRhcmdldCdzIG93biBzdHJ1Y3R1cmFsIGVycm9ycyAocmVwb3J0ZWQgYnkgTGF5ZXIgMSkgYWxyZWFkeSBleHBsYWluXG4gICAgICAgIC8vLyB3aHkgaXRzIGNvbHVtbnMgY2FuJ3QgYmUgdHJ1c3RlZDsgc2tpcCBjb2x1bW4tbGV2ZWwgY2hlY2tzIHRvIGF2b2lkXG4gICAgICAgIC8vLyBwaWxpbmcgbWlzbGVhZGluZyBmaW5kaW5ncyBvbiB0b3AuXG4gICAgICAgIGlmICghdGFyZ2V0LnN0cnVjdHVyYWxseVZhbGlkKSB7XG4gICAgICAgICAgICByZXR1cm4gdmlvbGF0aW9ucztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRhcmdldEhhc0NvbHVtbiA9IHRhcmdldC5kZWZpbml0aW9uLmNvbHVtbnMuc29tZSgoY29sdW1uKSA9PiBjb2x1bW4ubmFtZSA9PT0gZmsuc291cmNlQ29sdW1uKTtcbiAgICAgICAgaWYgKCF0YXJnZXRIYXNDb2x1bW4pIHtcbiAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh0aGlzLnZpb2xhdGlvbih7XG4gICAgICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgY29kZTogJ0ZLX1NPVVJDRV9DT0xVTU5fRVhJU1RTJyxcbiAgICAgICAgICAgICAgICBmaWVsZDogYCR7ZmllbGR9LnNvdXJjZUNvbHVtbmAsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYGZvcmVpZ24ga2V5IHNvdXJjZSBjb2x1bW4gXCIke2ZrLnNvdXJjZUNvbHVtbn1cIiBpcyBub3QgZGVmaW5lZCBpbiBcIiR7Zmsuc291cmNlVGFibGV9XCJgLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgcmV0dXJuIHZpb2xhdGlvbnM7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRhcmdldC5kZWZpbml0aW9uLnByaW1hcnlLZXkuaW5jbHVkZXMoZmsuc291cmNlQ29sdW1uKSkge1xuICAgICAgICAgICAgdmlvbGF0aW9ucy5wdXNoKHRoaXMudmlvbGF0aW9uKHtcbiAgICAgICAgICAgICAgICBsZXZlbDogJ3dhcm5pbmcnLFxuICAgICAgICAgICAgICAgIGNvZGU6ICdGS19TT1VSQ0VfSVNfS0VZJyxcbiAgICAgICAgICAgICAgICBmaWVsZDogYCR7ZmllbGR9LnNvdXJjZUNvbHVtbmAsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYGZvcmVpZ24ga2V5IHNvdXJjZSBjb2x1bW4gXCIke2ZrLnNvdXJjZUNvbHVtbn1cIiBpcyBub3QgcGFydCBvZiB0aGUgcHJpbWFyeSBrZXkgYFxuICAgICAgICAgICAgICAgICAgICArIGBvZiBcIiR7Zmsuc291cmNlVGFibGV9XCJgLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHZpb2xhdGlvbnM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWxsIGNyb3NzLWZpbGUgdmlvbGF0aW9ucyBmb3IgdGhpcyB0YWJsZSAoYGRlcGVuZHNPbmAgcmVzb2x1dGlvbiBwbHVzXG4gICAgICogdGhlIGZ1bGwgZm9yZWlnbi1rZXkgc3VpdGUpLlxuICAgICAqXG4gICAgICogQHBhcmFtIHdvcmxkIFRoZSBsb2FkZWQgZGF0YXNldCByb290LlxuICAgICAqIEByZXR1cm5zIEV2ZXJ5IGNyb3NzLWZpbGUgdmlvbGF0aW9uIHRoaXMgdGFibGUgcHJvZHVjZXMuXG4gICAgICovXG4gICAgcHVibGljIGNyb3NzRmlsZVZpb2xhdGlvbnMod29ybGQ6IFdvcmxkKTogVmlvbGF0aW9uW10ge1xuICAgICAgICBjb25zdCB2aW9sYXRpb25zOiBWaW9sYXRpb25bXSA9IFtcbiAgICAgICAgICAgIC4uLnRoaXMuZGVwZW5kc09uVmlvbGF0aW9ucyh3b3JsZCksXG4gICAgICAgIF07XG4gICAgICAgIHRoaXMuZGVmaW5pdGlvbi5mb3JlaWduS2V5cy5mb3JFYWNoKChmaywgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCguLi50aGlzLmZvcmVpZ25LZXlWaW9sYXRpb25zKHdvcmxkLCBmaywgaW5kZXgpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB2aW9sYXRpb25zO1xuICAgIH1cbn1cbiJdfQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "flexdataset",
3
- "version": "0.5.0",
3
+ "version": "0.6.0",
4
4
  "license": "Apache-2.0",
5
5
  "description": "Flexible Dataset Definition (FDD) — validator and tooling for the FDD dataset standard.",
6
6
  "author": "Rodrigo Carvajal",