@brainfish-ai/devdoc 0.1.47 → 0.1.48

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.
@@ -46,7 +46,7 @@ const constants_1 = require("../../constants");
46
46
  const MAX_ASSET_SIZE = 25 * 1024 * 1024;
47
47
  // Binary asset extensions to upload separately
48
48
  const BINARY_EXTENSIONS = [
49
- '.png', '.jpg', '.jpeg', '.gif', '.webp', '.ico',
49
+ '.png', '.jpg', '.jpeg', '.gif', '.webp', '.ico', '.svg',
50
50
  '.mp4', '.webm', '.mov',
51
51
  '.mp3', '.wav', '.ogg',
52
52
  '.woff', '.woff2', '.ttf', '.otf', '.eot',
@@ -610,7 +610,8 @@ async function scanDirectory(dir, projectRoot, files) {
610
610
  async function scanPublicAssets(dir, projectRoot, files) {
611
611
  const items = fs_extra_1.default.readdirSync(dir);
612
612
  // Text-based file extensions to include in content bundle
613
- const TEXT_EXTENSIONS = ['.svg', '.json', '.css'];
613
+ // Note: SVG is now uploaded as binary asset for better blob storage serving
614
+ const TEXT_EXTENSIONS = ['.json', '.css'];
614
615
  for (const item of items) {
615
616
  const fullPath = path_1.default.join(dir, item);
616
617
  const stat = fs_extra_1.default.statSync(fullPath);
@@ -798,4 +799,4 @@ function createProgressBar(progress, width = 30) {
798
799
  const percentage = Math.round(progress * 100);
799
800
  return `[${bar}] ${percentage}%`;
800
801
  }
801
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NsaS9jb21tYW5kcy9kZXBsb3kudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFvUUEsd0JBMlNDO0FBL2lCRCxnREFBdUI7QUFDdkIsd0RBQXlCO0FBQ3pCLHlDQUF5RDtBQUN6RCwrQ0FBMkM7QUFDM0MsK0NBQWlEO0FBRWpELHVCQUF1QjtBQUN2QixNQUFNLGNBQWMsR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQTtBQUV2QywrQ0FBK0M7QUFDL0MsTUFBTSxpQkFBaUIsR0FBRztJQUN4QixNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU07SUFDaEQsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNO0lBQ3ZCLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTTtJQUN0QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTTtJQUN6QyxNQUFNO0NBQ1AsQ0FBQTtBQUVELG9DQUFvQztBQUNwQyxNQUFNLFVBQVUsR0FBMkI7SUFDekMsU0FBUztJQUNULE1BQU0sRUFBRSxXQUFXO0lBQ25CLE1BQU0sRUFBRSxZQUFZO0lBQ3BCLE9BQU8sRUFBRSxZQUFZO0lBQ3JCLE1BQU0sRUFBRSxXQUFXO0lBQ25CLE9BQU8sRUFBRSxZQUFZO0lBQ3JCLE1BQU0sRUFBRSxjQUFjO0lBQ3RCLE1BQU0sRUFBRSxlQUFlO0lBQ3ZCLFNBQVM7SUFDVCxNQUFNLEVBQUUsV0FBVztJQUNuQixPQUFPLEVBQUUsWUFBWTtJQUNyQixNQUFNLEVBQUUsaUJBQWlCO0lBQ3pCLFFBQVE7SUFDUixNQUFNLEVBQUUsWUFBWTtJQUNwQixNQUFNLEVBQUUsV0FBVztJQUNuQixNQUFNLEVBQUUsV0FBVztJQUNuQixRQUFRO0lBQ1IsT0FBTyxFQUFFLFdB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QUFDLFFBQWdCLEVBQUUsUUFBZ0IsRUFBRTtJQUM3RCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsQ0FBQTtJQUMzQyxNQUFNLEtBQUssR0FBRyxLQUFLLEdBQUcsTUFBTSxDQUFBO0lBQzVCLE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUNsRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUMsQ0FBQTtJQUM3QyxPQUFPLElBQUksR0FBRyxLQUFLLFVBQVUsR0FBRyxDQUFBO0FBQ2xDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xuaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJ1xuaW1wb3J0IHsgbG9hZENvbmZpZywgdmFsaWRhdGVDb25maWcgfSBmcm9tICcuLi8uLi9jb25maWcnXG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi8uLi91dGlscy9sb2dnZXInXG5pbXBvcnQgeyBERUZBVUxUX0FQSV9VUkwgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnXG5cbi8vIE1heCBhc3NldCBzaXplOiAyNU1CXG5jb25zdCBNQVhfQVNTRVRfU0laRSA9IDI1ICogMTAyNCAqIDEwMjRcblxuLy8gQmluYXJ5IGFzc2V0IGV4dGVuc2lvbnMgdG8gdXBsb2FkIHNlcGFyYXRlbHlcbmNvbnN0IEJJTkFSWV9FWFRFTlNJT05TID0gW1xuICAnLnBuZycsICcuanBnJywgJy5qcGVnJywgJy5naWYnLCAnLndlYnAnLCAnLmljbycsXG4gICcubXA0JywgJy53ZWJtJywgJy5tb3YnLFxuICAnLm1wMycsICcud2F2JywgJy5vZ2cnLFxuICAnLndvZmYnLCAnLndvZmYyJywgJy50dGYnLCAnLm90ZicsICcuZW90JyxcbiAgJy5wZGYnLFxuXVxuXG4vLyBNYXAgZmlsZSBleHRlbnNpb25zIHRvIE1JTUUgdHlwZXNcbmNvbnN0IE1JTUVfVFlQRVM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gIC8vIEltYWdlc1xuICAnLnBuZyc6ICdpbWFnZS9wbmcnLFxuICAnLmpwZyc6ICdpbWFnZS9qcGVnJyxcbiAgJy5qcGVnJzogJ2ltYWdlL2pwZWcnLFxuICAnLmdpZic6ICdpbWFnZS9naWYnLFxuICAnLndlYnAnOiAnaW1hZ2Uvd2VicCcsXG4gICcuaWNvJzogJ2ltYWdlL3gtaWNvbicsXG4gICcuc3ZnJzogJ2ltYWdlL3N2Zyt4bWwnLFxuICAvLyBWaWRlb3NcbiAgJy5tcDQnOiAndmlkZW8vbXA0JyxcbiAgJy53ZWJtJzogJ3ZpZGVvL3dlYm0nLFxuICAnLm1vdic6ICd2aWRlby9xdWlja3RpbWUnLFxuICAvLyBBdWRpb1xuICAnLm1wMyc6ICdhdWRpby9tcGVnJyxcbiAgJy53YXYnOiAnYXVkaW8vd2F2JyxcbiAgJy5vZ2cnOiAnYXVkaW8vb2dnJyxcbiAgLy8gRm9udHNcbiAgJy53b2ZmJzogJ2ZvbnQvd29mZicsXG4gICcud29mZjInOiAnZm9udC93b2ZmMicsXG4gICcudHRmJzogJ2ZvbnQvdHRmJyxcbiAgJy5vdGYnOiAnZm9udC9vdGYnLFxuICAnLmVvdCc6ICdhcHBsaWNhdGlvbi92bmQubXMtZm9udG9iamVjdCcsXG4gIC8vIERvY3VtZW50c1xuICAnLnBkZic6ICdhcHBsaWNhdGlvbi9wZGYnLFxufVxuXG4vKipcbiAqIEdldCBNSU1FIHR5cGUgZnJvbSBmaWxlIGV4dGVuc2lvblxuICovXG5mdW5jdGlvbiBnZXRNaW1lVHlwZShmaWxlUGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgZXh0ID0gcGF0aC5leHRuYW1lKGZpbGVQYXRoKS50b0xvd2VyQ2FzZSgpXG4gIHJldHVybiBNSU1FX1RZUEVTW2V4dF0gfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSdcbn1cblxuaW50ZXJmYWNlIERlcGxveU9wdGlvbnMge1xuICB1cmw/OiBzdHJpbmdcbiAgYXBpS2V5Pzogc3RyaW5nXG59XG5cbmludGVyZmFjZSBQcm9qZWN0RmlsZSB7XG4gIHBhdGg6IHN0cmluZ1xuICBjb250ZW50OiBzdHJpbmdcbn1cblxuaW50ZXJmYWNlIE9wZW5BcGlTcGVjIHtcbiAgW2tleTogc3RyaW5nXTogdW5rbm93blxufVxuXG5pbnRlcmZhY2UgQXNzZXRGaWxlIHtcbiAgcGF0aDogc3RyaW5nXG4gIGZ1bGxQYXRoOiBzdHJpbmdcbiAgc2l6ZTogbnVtYmVyXG59XG5cbmludGVyZmFjZSBEZXZEb2NDb25maWcge1xuICBwcm9qZWN0SWQ/OiBzdHJpbmdcbiAgbmFtZT86IHN0cmluZ1xuICBzbHVnPzogc3RyaW5nXG4gIHN1YmRvbWFpbj86IHN0cmluZ1xuICBhcGlLZXk/OiBzdHJpbmdcbiAgdXJsPzogc3RyaW5nXG4gIGxhc3REZXBsb3llZD86IHN0cmluZ1xuICBjcmVhdGVkQXQ/OiBzdHJpbmdcbn1cblxuaW50ZXJmYWNlIFJlZ2lzdGVyUmVzcG9uc2Uge1xuICBzdWNjZXNzOiBib29sZWFuXG4gIHByb2plY3RJZDogc3RyaW5nXG4gIHNsdWc6IHN0cmluZ1xuICBzdWJkb21haW46IHN0cmluZ1xuICBhcGlLZXk6IHN0cmluZ1xuICB1cmw6IHN0cmluZ1xuICBlcnJvcj86IHN0cmluZ1xufVxuXG5pbnRlcmZhY2UgQ2hlY2tTdWJkb21haW5SZXNwb25zZSB7XG4gIGF2YWlsYWJsZTogYm9vbGVhblxuICBlcnJvcj86IHN0cmluZ1xuICBzdWdnZXN0aW9uPzogc3RyaW5nXG59XG5cbi8vIFNpbXBsZSBwcm9tcHQgaGVscGVyIHVzaW5nIHJlYWRsaW5lXG5hc3luYyBmdW5jdGlvbiBwcm9tcHQocXVlc3Rpb246IHN0cmluZywgZGVmYXVsdFZhbHVlPzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgcmVhZGxpbmUgPSBhd2FpdCBpbXBvcnQoJ3JlYWRsaW5lJylcbiAgY29uc3QgcmwgPSByZWFkbGluZS5jcmVhdGVJbnRlcmZhY2Uoe1xuICAgIGlucHV0OiBwcm9jZXNzLnN0ZGluLFxuICAgIG91dHB1dDogcHJvY2Vzcy5zdGRvdXQsXG4gIH0pXG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgY29uc3QgZGVmYXVsdEhpbnQgPSBkZWZhdWx0VmFsdWUgPyBgICgke2RlZmF1bHRWYWx1ZX0pYCA6ICcnXG4gICAgcmwucXVlc3Rpb24oYCR7cXVlc3Rpb259JHtkZWZhdWx0SGludH06IGAsIChhbnN3ZXIpID0+IHtcbiAgICAgIHJsLmNsb3NlKClcbiAgICAgIHJlc29sdmUoYW5zd2VyLnRyaW0oKSB8fCBkZWZhdWx0VmFsdWUgfHwgJycpXG4gICAgfSlcbiAgfSlcbn1cblxuLyoqXG4gKiBDaGVjayBzdWJkb21haW4gYXZhaWxhYmlsaXR5IHZpYSBBUElcbiAqL1xuYXN5bmMgZnVuY3Rpb24gY2hlY2tTdWJkb21haW5BdmFpbGFiaWxpdHkoXG4gIHN1YmRvbWFpbjogc3RyaW5nLFxuICBhcGlVcmw6IHN0cmluZ1xuKTogUHJvbWlzZTxDaGVja1N1YmRvbWFpblJlc3BvbnNlPiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHthcGlVcmx9L2FwaS9zdWJkb21haW5zL2NoZWNrYCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICB9LFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBzdWJkb21haW4gfSksXG4gICAgfSlcbiAgICBcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgQ2hlY2tTdWJkb21haW5SZXNwb25zZVxuICAgIHJldHVybiByZXN1bHRcbiAgfSBjYXRjaCB7XG4gICAgLy8gSWYgQVBJIGlzIHVuYXZhaWxhYmxlLCBhc3N1bWUgYXZhaWxhYmxlICh3aWxsIGZhaWwgYXQgcmVnaXN0cmF0aW9uIGlmIG5vdClcbiAgICByZXR1cm4geyBhdmFpbGFibGU6IHRydWUgfVxuICB9XG59XG5cbi8qKlxuICogQmFzaWMgc3ViZG9tYWluIGZvcm1hdCB2YWxpZGF0aW9uXG4gKi9cbmZ1bmN0aW9uIGlzVmFsaWRTdWJkb21haW5Gb3JtYXQoc3ViZG9tYWluOiBzdHJpbmcpOiB7IHZhbGlkOiBib29sZWFuOyBlcnJvcj86IHN0cmluZyB9IHtcbiAgaWYgKCFzdWJkb21haW4pIHtcbiAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIGVycm9yOiAnU3ViZG9tYWluIGlzIHJlcXVpcmVkJyB9XG4gIH1cbiAgXG4gIGlmIChzdWJkb21haW4ubGVuZ3RoIDwgMykge1xuICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgZXJyb3I6ICdTdWJkb21haW4gbXVzdCBiZSBhdCBsZWFzdCAzIGNoYXJhY3RlcnMnIH1cbiAgfVxuICBcbiAgaWYgKHN1YmRvbWFpbi5sZW5ndGggPiA2Mykge1xuICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgZXJyb3I6ICdTdWJkb21haW4gbXVzdCBiZSA2MyBjaGFyYWN0ZXJzIG9yIGxlc3MnIH1cbiAgfVxuICBcbiAgaWYgKCEvXlthLXowLTldKFthLXowLTktXSpbYS16MC05XSk/JC8udGVzdChzdWJkb21haW4pKSB7XG4gICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCBlcnJvcjogJ1N1YmRvbWFpbiBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aCBhbHBoYW51bWVyaWMsIGNhbiBjb250YWluIGh5cGhlbnMnIH1cbiAgfVxuICBcbiAgaWYgKC8tLS8udGVzdChzdWJkb21haW4pKSB7XG4gICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCBlcnJvcjogJ1N1YmRvbWFpbiBjYW5ub3QgY29udGFpbiBjb25zZWN1dGl2ZSBoeXBoZW5zJyB9XG4gIH1cbiAgXG4gIHJldHVybiB7IHZhbGlkOiB0cnVlIH1cbn1cblxuaW50ZXJmYWNlIERvbWFpbkNvbmZpZyB7XG4gIGN1c3RvbURvbWFpbjogc3RyaW5nXG4gIHNlbz86IHtcbiAgICBjYW5vbmljYWw/OiBzdHJpbmdcbiAgfVxufVxuXG5pbnRlcmZhY2UgRG9tYWluU3RhdHVzUmVzcG9uc2Uge1xuICBoYXNDdXN0b21Eb21haW46IGJvb2xlYW5cbiAgZG9tYWluPzogc3RyaW5nXG4gIHN0YXR1cz86IHN0cmluZ1xuICBjdXN0b21Vcmw/OiBzdHJpbmdcbiAgbWVzc2FnZT86IHN0cmluZ1xuICBuZXh0U3RlcD86IHN0cmluZ1xufVxuXG4vKipcbiAqIENoZWNrIGZvciBkb21haW4uanNvbiBhbmQgZGlzcGxheSBjdXN0b20gZG9tYWluIHN0YXR1c1xuICovXG5hc3luYyBmdW5jdGlvbiBjaGVja0N1c3RvbURvbWFpblN0YXR1cyhcbiAgcHJvamVjdFJvb3Q6IHN0cmluZyxcbiAgYXBpVXJsOiBzdHJpbmcsXG4gIGFwaUtleTogc3RyaW5nXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgLy8gQ2hlY2sgaWYgZG9tYWluLmpzb24gZXhpc3RzXG4gIGNvbnN0IGRvbWFpbkNvbmZpZ1BhdGggPSBwYXRoLmpvaW4ocHJvamVjdFJvb3QsICdkb21haW4uanNvbicpXG4gIFxuICBpZiAoIWZzLmV4aXN0c1N5bmMoZG9tYWluQ29uZmlnUGF0aCkpIHtcbiAgICByZXR1cm4gLy8gTm8gZG9tYWluLmpzb24sIG5vdGhpbmcgdG8gZG9cbiAgfVxuICBcbiAgbGV0IGRvbWFpbkNvbmZpZzogRG9tYWluQ29uZmlnXG4gIHRyeSB7XG4gICAgZG9tYWluQ29uZmlnID0gZnMucmVhZEpzb25TeW5jKGRvbWFpbkNvbmZpZ1BhdGgpIGFzIERvbWFpbkNvbmZpZ1xuICB9IGNhdGNoIHtcbiAgICBsb2dnZXIud2FybignRm91bmQgZG9tYWluLmpzb24gYnV0IGZhaWxlZCB0byBwYXJzZSBpdCcpXG4gICAgcmV0dXJuXG4gIH1cbiAgXG4gIGlmICghZG9tYWluQ29uZmlnLmN1c3RvbURvbWFpbikge1xuICAgIHJldHVyblxuICB9XG4gIFxuICBjb25zb2xlLmxvZygnJylcbiAgbG9nZ2VyLmluZm8oYEN1c3RvbSBkb21haW4gY29uZmlndXJlZDogJHtkb21haW5Db25maWcuY3VzdG9tRG9tYWlufWApXG4gIFxuICAvLyBDaGVjayBkb21haW4gc3RhdHVzIHZpYSBBUElcbiAgaWYgKCFhcGlLZXkpIHtcbiAgICBsb2dnZXIuaW5mbygnUnVuIFwiZGV2ZG9jIGRvbWFpbiBzdGF0dXNcIiB0byBjaGVjayBETlMgY29uZmlndXJhdGlvbicpXG4gICAgcmV0dXJuXG4gIH1cbiAgXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHthcGlVcmx9L2FwaS9kb21haW5zL3N0YXR1c2AsIHtcbiAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdBdXRob3JpemF0aW9uJzogYEJlYXJlciAke2FwaUtleX1gLFxuICAgICAgfSxcbiAgICB9KVxuICAgIFxuICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBcbiAgICBjb25zdCBzdGF0dXMgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgRG9tYWluU3RhdHVzUmVzcG9uc2VcbiAgICBcbiAgICBpZiAoIXN0YXR1cy5oYXNDdXN0b21Eb21haW4pIHtcbiAgICAgIC8vIERvbWFpbiBpbiBjb25maWcgYnV0IG5vdCByZWdpc3RlcmVkIHlldFxuICAgICAgY29uc29sZS5sb2coJycpXG4gICAgICBsb2dnZXIuaW5mbygnQ3VzdG9tIGRvbWFpbiBub3QgeWV0IHJlZ2lzdGVyZWQuJylcbiAgICAgIGxvZ2dlci5pbmZvKCdSdW4gXCJkZXZkb2MgZG9tYWluIGFkZCAnICsgZG9tYWluQ29uZmlnLmN1c3RvbURvbWFpbiArICdcIiB0byBzZXQgaXQgdXAnKVxuICAgIH0gZWxzZSBpZiAoc3RhdHVzLnN0YXR1cyA9PT0gJ2FjdGl2ZScpIHtcbiAgICAgIGNvbnNvbGUubG9nKCcnKVxuICAgICAgY29uc29sZS5sb2coYCAgQWxzbyBsaXZlIGF0OiAke2xvZ2dlci5jeWFuKHN0YXR1cy5jdXN0b21VcmwgfHwgYGh0dHBzOi8vJHtzdGF0dXMuZG9tYWlufWApfWApXG4gICAgfSBlbHNlIGlmIChzdGF0dXMuc3RhdHVzID09PSAncGVuZGluZycpIHtcbiAgICAgIGNvbnNvbGUubG9nKCcnKVxuICAgICAgbG9nZ2VyLndhcm4oJ0N1c3RvbSBkb21haW4gcGVuZGluZyBETlMgY29uZmlndXJhdGlvbicpXG4gICAgICBsb2dnZXIuaW5mbygnUnVuIFwiZGV2ZG9jIGRvbWFpbiBzdGF0dXNcIiBmb3IgRE5TIHNldHVwIGluc3RydWN0aW9ucycpXG4gICAgfSBlbHNlIGlmIChzdGF0dXMuc3RhdHVzID09PSAnZG5zX3ZlcmlmaWVkJyB8fCBzdGF0dXMuc3RhdHVzID09PSAnc3NsX3Byb3Zpc2lvbmluZycpIHtcbiAgICAgIGNvbnNvbGUubG9nKCcnKVxuICAgICAgbG9nZ2VyLmluZm8oJ0N1c3RvbSBkb21haW4gRE5TIHZlcmlmaWVkLCBTU0wgY2VydGlmaWNhdGUgcHJvdmlzaW9uaW5nLi4uJylcbiAgICB9XG4gICAgXG4gIH0gY2F0Y2gge1xuICAgIC8vIElnbm9yZSBlcnJvcnMsIGRvbWFpbiBzdGF0dXMgaXMgaW5mb3JtYXRpb25hbFxuICB9XG59XG5cbi8qKlxuICogRGVwbG95IGRvY3VtZW50YXRpb24gdG8gRGV2RG9jIHBsYXRmb3JtXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZXBsb3kob3B0aW9uczogRGVwbG95T3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBwcm9qZWN0Um9vdCA9IHByb2Nlc3MuY3dkKClcbiAgY29uc3QgYXBpVXJsID0gb3B0aW9ucy51cmwgfHwgcHJvY2Vzcy5lbnYuREVWRE9DX0FQSV9VUkwgfHwgREVGQVVMVF9BUElfVVJMXG4gIFxuICBsb2dnZXIuaW5mbygnRGVwbG95aW5nIHRvIERldkRvYy4uLlxcbicpXG4gIFxuICAvLyBDaGVjayBmb3IgZG9jcy5qc29uXG4gIGNvbnN0IGNvbmZpZ1BhdGggPSBwYXRoLmpvaW4ocHJvamVjdFJvb3QsICdkb2NzLmpzb24nKVxuICBpZiAoIWZzLmV4aXN0c1N5bmMoY29uZmlnUGF0aCkpIHtcbiAgICBsb2dnZXIuZXJyb3IoJ2RvY3MuanNvbiBub3QgZm91bmQgaW4gY3VycmVudCBkaXJlY3RvcnknKVxuICAgIGxvZ2dlci5pbmZvKCdNYWtlIHN1cmUgeW91IGFyZSBpbiBhIERldkRvYyBkb2N1bWVudGF0aW9uIHByb2plY3QgZGlyZWN0b3J5JylcbiAgICBwcm9jZXNzLmV4aXQoMSlcbiAgfVxuICBcbiAgLy8gTG9hZCBhbmQgdmFsaWRhdGUgY29uZmlndXJhdGlvblxuICBsZXQgY29uZmlnOiBSZXR1cm5UeXBlPHR5cGVvZiBsb2FkQ29uZmlnPiBleHRlbmRzIFByb21pc2U8aW5mZXIgVD4gPyBUIDogbmV2ZXJcbiAgdHJ5IHtcbiAgICBjb25maWcgPSBhd2FpdCBsb2FkQ29uZmlnKHByb2plY3RSb290KVxuICAgIGNvbnN0IHZhbGlkYXRpb24gPSB2YWxpZGF0ZUNvbmZpZyhjb25maWcpXG4gICAgXG4gICAgaWYgKCF2YWxpZGF0aW9uLnZhbGlkKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0ludmFsaWQgZG9jcy5qc29uIGNvbmZpZ3VyYXRpb246JylcbiAgICAgIHZhbGlkYXRpb24uZXJyb3JzLmZvckVhY2goZXJyID0+IGxvZ2dlci5lcnJvcihgICAtICR7ZXJyfWApKVxuICAgICAgcHJvY2Vzcy5leGl0KDEpXG4gICAgfVxuICAgIFxuICAgIGxvZ2dlci5zdWNjZXNzKGDinJMgQ29uZmlndXJhdGlvbiB2YWxpZDogJHtjb25maWcubmFtZSB8fCAnVW50aXRsZWQnfWApXG4gIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKVxuICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGxvYWQgY29uZmlndXJhdGlvbjogJHttZXNzYWdlfWApXG4gICAgcHJvY2Vzcy5leGl0KDEpXG4gIH1cbiAgXG4gIC8vIENoZWNrIGZvciBleGlzdGluZyBwcm9qZWN0IGNvbmZpZ1xuICBjb25zdCBkZXZkb2NDb25maWdQYXRoID0gcGF0aC5qb2luKHByb2plY3RSb290LCAnLmRldmRvYy5qc29uJylcbiAgbGV0IGRldmRvY0NvbmZpZzogRGV2RG9jQ29uZmlnIHwgbnVsbCA9IG51bGxcbiAgbGV0IGV4aXN0aW5nU2x1Zzogc3RyaW5nIHwgbnVsbCA9IG51bGxcbiAgbGV0IGV4aXN0aW5nQXBpS2V5OiBzdHJpbmcgfCBudWxsID0gbnVsbFxuICBsZXQgZXhpc3RpbmdTdWJkb21haW46IHN0cmluZyB8IG51bGwgPSBudWxsXG4gIFxuICBpZiAoZnMuZXhpc3RzU3luYyhkZXZkb2NDb25maWdQYXRoKSkge1xuICAgIHRyeSB7XG4gICAgICBkZXZkb2NDb25maWcgPSBmcy5yZWFkSnNvblN5bmMoZGV2ZG9jQ29uZmlnUGF0aCkgYXMgRGV2RG9jQ29uZmlnXG4gICAgICBleGlzdGluZ1NsdWcgPSBkZXZkb2NDb25maWcuc2x1ZyB8fCBudWxsXG4gICAgICBleGlzdGluZ0FwaUtleSA9IGRldmRvY0NvbmZpZy5hcGlLZXkgfHwgbnVsbFxuICAgICAgZXhpc3RpbmdTdWJkb21haW4gPSBkZXZkb2NDb25maWcuc3ViZG9tYWluIHx8IG51bGxcbiAgICAgIGlmIChleGlzdGluZ1NsdWcgJiYgZXhpc3RpbmdBcGlLZXkpIHtcbiAgICAgICAgbG9nZ2VyLmluZm8oYERlcGxveWluZyBwcm9qZWN0OiAke2V4aXN0aW5nU2x1Z31gKVxuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gSWdub3JlIGVycm9ycyByZWFkaW5nIC5kZXZkb2MuanNvblxuICAgIH1cbiAgfVxuICBcbiAgLy8gR2V0IEFQSSBrZXkgZnJvbSBvcHRpb25zLCBlbnYgdmFyLCBvciAuZGV2ZG9jLmpzb25cbiAgbGV0IGFwaUtleSA9IG9wdGlvbnMuYXBpS2V5IHx8IHByb2Nlc3MuZW52LkRFVkRPQ19BUElfS0VZIHx8IGV4aXN0aW5nQXBpS2V5XG4gIFxuICAvLyBJZiBubyBBUEkga2V5LCB0aGlzIGlzIGEgZmlyc3QgZGVwbG95IC0gbmVlZCB0byByZWdpc3RlciB0aGUgc3ViZG9tYWluIGZpcnN0XG4gIGlmICghYXBpS2V5KSB7XG4gICAgLy8gQ2hlY2sgaWYgd2UgaGF2ZSBzdWJkb21haW4gZnJvbSBpbml0XG4gICAgaWYgKCFleGlzdGluZ1N1YmRvbWFpbikge1xuICAgICAgbG9nZ2VyLmVycm9yKCdObyBwcm9qZWN0IGNvbmZpZ3VyYXRpb24gZm91bmQuJylcbiAgICAgIGNvbnNvbGUubG9nKCcnKVxuICAgICAgbG9nZ2VyLmluZm8oJ1J1biBcImRldmRvYyBpbml0XCIgZmlyc3QgdG8gY29uZmlndXJlIHlvdXIgcHJvamVjdCcpXG4gICAgICBsb2dnZXIuaW5mbygnT3IgcHJvdmlkZSBhbiBBUEkga2V5IHZpYSAtLWFwaS1rZXkgZmxhZyBvciBERVZET0NfQVBJX0tFWSBlbnYgdmFyJylcbiAgICAgIHByb2Nlc3MuZXhpdCgxKVxuICAgIH1cbiAgICBcbiAgICBsZXQgc3ViZG9tYWluVG9SZWdpc3RlciA9IGV4aXN0aW5nU3ViZG9tYWluXG4gICAgbGV0IHJlZ2lzdGVyZWQgPSBmYWxzZVxuICAgIFxuICAgIC8vIExvb3AgdW50aWwgd2Ugc3VjY2Vzc2Z1bGx5IHJlZ2lzdGVyIGEgc3ViZG9tYWluXG4gICAgd2hpbGUgKCFyZWdpc3RlcmVkKSB7XG4gICAgICBsb2dnZXIuaW5mbyhgUmVnaXN0ZXJpbmcgc3ViZG9tYWluICR7c3ViZG9tYWluVG9SZWdpc3Rlcn0uZGV2ZG9jLnNoLi4uYClcbiAgICAgIFxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVnaXN0ZXJSZXNwb25zZSA9IGF3YWl0IGZldGNoKGAke2FwaVVybH0vYXBpL3Byb2plY3RzL3JlZ2lzdGVyYCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBuYW1lOiBkZXZkb2NDb25maWc/Lm5hbWUgfHwgY29uZmlnLm5hbWUgfHwgJ015IERvY3VtZW50YXRpb24nLFxuICAgICAgICAgICAgc2x1Zzogc3ViZG9tYWluVG9SZWdpc3RlcixcbiAgICAgICAgICAgIHN1YmRvbWFpbjogc3ViZG9tYWluVG9SZWdpc3RlcixcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSlcbiAgICAgICAgXG4gICAgICAgIGlmICghcmVnaXN0ZXJSZXNwb25zZS5vaykge1xuICAgICAgICAgIGNvbnN0IGVycm9yRGF0YSA9IGF3YWl0IHJlZ2lzdGVyUmVzcG9uc2UuanNvbigpLmNhdGNoKCgpID0+ICh7IGVycm9yOiAnVW5rbm93biBlcnJvcicgfSkpIGFzIHsgZXJyb3I/OiBzdHJpbmc7IGRldGFpbHM/OiBzdHJpbmcgfVxuICAgICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVycm9yRGF0YS5lcnJvciB8fCBgSFRUUCAke3JlZ2lzdGVyUmVzcG9uc2Uuc3RhdHVzfWBcbiAgICAgICAgICBcbiAgICAgICAgICAvLyBJZiBzdWJkb21haW4gaXMgdGFrZW4sIGFzayBmb3IgYSBuZXcgb25lXG4gICAgICAgICAgaWYgKGVycm9yTWVzc2FnZS5pbmNsdWRlcygnYWxyZWFkeSBleGlzdHMnKSB8fCBlcnJvck1lc3NhZ2UuaW5jbHVkZXMoJ2FscmVhZHkgdGFrZW4nKSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJycpXG4gICAgICAgICAgICBsb2dnZXIud2FybihgU3ViZG9tYWluIFwiJHtzdWJkb21haW5Ub1JlZ2lzdGVyfVwiIGlzIG5vIGxvbmdlciBhdmFpbGFibGUuYClcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gR2V0IHN1Z2dlc3Rpb24gZnJvbSBBUElcbiAgICAgICAgICAgIGNvbnN0IGF2YWlsYWJpbGl0eSA9IGF3YWl0IGNoZWNrU3ViZG9tYWluQXZhaWxhYmlsaXR5KHN1YmRvbWFpblRvUmVnaXN0ZXIsIGFwaVVybClcbiAgICAgICAgICAgIGNvbnN0IHN1Z2dlc3Rpb24gPSBhdmFpbGFiaWxpdHkuc3VnZ2VzdGlvbiB8fCBgJHtzdWJkb21haW5Ub1JlZ2lzdGVyfS1kb2NzYFxuICAgICAgICAgICAgXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnJylcbiAgICAgICAgICAgIGxvZ2dlci5pbmZvKGBTdWdnZXN0aW9uOiAke3N1Z2dlc3Rpb259LmRldmRvYy5zaGApXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnJylcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gUHJvbXB0IGZvciBuZXcgc3ViZG9tYWluXG4gICAgICAgICAgICBsZXQgbmV3U3ViZG9tYWluID0gYXdhaXQgcHJvbXB0KCdFbnRlciBhIG5ldyBzdWJkb21haW4nLCBzdWdnZXN0aW9uKVxuICAgICAgICAgICAgbmV3U3ViZG9tYWluID0gbmV3U3ViZG9tYWluLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvW15hLXowLTktXS9nLCAnLScpLnJlcGxhY2UoL14tfC0kL2csICcnKVxuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBWYWxpZGF0ZSBmb3JtYXRcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdENoZWNrID0gaXNWYWxpZFN1YmRvbWFpbkZvcm1hdChuZXdTdWJkb21haW4pXG4gICAgICAgICAgICBpZiAoIWZvcm1hdENoZWNrLnZhbGlkKSB7XG4gICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihmb3JtYXRDaGVjay5lcnJvciEpXG4gICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHN1YmRvbWFpblRvUmVnaXN0ZXIgPSBuZXdTdWJkb21haW5cbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCcnKVxuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZSlcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgY29uc3QgcmVnaXN0ZXJSZXN1bHQgPSBhd2FpdCByZWdpc3RlclJlc3BvbnNlLmpzb24oKSBhcyBSZWdpc3RlclJlc3BvbnNlXG4gICAgICAgIFxuICAgICAgICAvLyBVcGRhdGUgbG9jYWwgY29uZmlnIHdpdGggQVBJIGtleVxuICAgICAgICBhcGlLZXkgPSByZWdpc3RlclJlc3VsdC5hcGlLZXlcbiAgICAgICAgZXhpc3RpbmdTbHVnID0gcmVnaXN0ZXJSZXN1bHQuc2x1Z1xuICAgICAgICBleGlzdGluZ1N1YmRvbWFpbiA9IHJlZ2lzdGVyUmVzdWx0LnN1YmRvbWFpblxuICAgICAgICBcbiAgICAgICAgLy8gU2F2ZSB0aGUgdXBkYXRlZCBjb25maWdcbiAgICAgICAgY29uc3QgdXBkYXRlZENvbmZpZzogRGV2RG9jQ29uZmlnID0ge1xuICAgICAgICAgIC4uLmRldmRvY0NvbmZpZyxcbiAgICAgICAgICBwcm9qZWN0SWQ6IHJlZ2lzdGVyUmVzdWx0LnByb2plY3RJZCxcbiAgICAgICAgICBzbHVnOiByZWdpc3RlclJlc3VsdC5zbHVnLFxuICAgICAgICAgIHN1YmRvbWFpbjogcmVnaXN0ZXJSZXN1bHQuc3ViZG9tYWluLFxuICAgICAgICAgIGFwaUtleTogcmVnaXN0ZXJSZXN1bHQuYXBpS2V5LFxuICAgICAgICAgIHVybDogcmVnaXN0ZXJSZXN1bHQudXJsLFxuICAgICAgICB9XG4gICAgICAgIGZzLndyaXRlSnNvblN5bmMoZGV2ZG9jQ29uZmlnUGF0aCwgdXBkYXRlZENvbmZpZywgeyBzcGFjZXM6IDIgfSlcbiAgICAgICAgXG4gICAgICAgIGxvZ2dlci5zdWNjZXNzKGDinJMgU3ViZG9tYWluICR7cmVnaXN0ZXJSZXN1bHQuc3ViZG9tYWlufS5kZXZkb2Muc2ggcmVnaXN0ZXJlZCFgKVxuICAgICAgICBjb25zb2xlLmxvZygnJylcbiAgICAgICAgcmVnaXN0ZXJlZCA9IHRydWVcbiAgICAgICAgXG4gICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpXG4gICAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIHJlZ2lzdGVyIHN1YmRvbWFpbjogJHttZXNzYWdlfWApXG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBcbiAgLy8gQ29sbGVjdCBhbGwgY29udGVudCBmaWxlc1xuICBsb2dnZXIuaW5mbygnQnVuZGxpbmcgY29udGVudC4uLicpXG4gIGNvbnN0IGZpbGVzID0gYXdhaXQgY29sbGVjdEZpbGVzKHByb2plY3RSb290KVxuICBsb2dnZXIuc3VjY2Vzcyhg4pyTIEZvdW5kICR7ZmlsZXMubGVuZ3RofSBjb250ZW50IGZpbGVzYClcbiAgXG4gIC8vIENvbGxlY3QgdGhlbWUuanNvblxuICBjb25zdCB0aGVtZUpzb24gPSBjb2xsZWN0VGhlbWVKc29uKHByb2plY3RSb290KVxuICBpZiAodGhlbWVKc29uKSB7XG4gICAgbG9nZ2VyLnN1Y2Nlc3MoJ+KckyBGb3VuZCB0aGVtZS5qc29uJylcbiAgfVxuICBcbiAgLy8gQ29sbGVjdCBPcGVuQVBJIHNwZWNzIGJhc2VkIG9uIGRvY3MuanNvbiBuYXZpZ2F0aW9uXG4gIGNvbnN0IG9wZW5BcGlTcGVjcyA9IGF3YWl0IGNvbGxlY3RPcGVuQXBpU3BlY3MocHJvamVjdFJvb3QsIGNvbmZpZyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilcbiAgY29uc3Qgc3BlY0NvdW50ID0gT2JqZWN0LmtleXMob3BlbkFwaVNwZWNzKS5sZW5ndGhcbiAgaWYgKHNwZWNDb3VudCA+IDApIHtcbiAgICBsb2dnZXIuc3VjY2Vzcyhg4pyTIEZvdW5kICR7c3BlY0NvdW50fSBPcGVuQVBJIHNwZWMocylgKVxuICB9XG4gIFxuICAvLyBDb2xsZWN0IGJpbmFyeSBhc3NldHNcbiAgY29uc3QgYXNzZXRzID0gYXdhaXQgY29sbGVjdEFzc2V0cyhwcm9qZWN0Um9vdClcbiAgaWYgKGFzc2V0cy5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgdG90YWxBc3NldFNpemUgPSBhc3NldHMucmVkdWNlKChzdW0sIGEpID0+IHN1bSArIGEuc2l6ZSwgMClcbiAgICBsb2dnZXIuc3VjY2Vzcyhg4pyTIEZvdW5kICR7YXNzZXRzLmxlbmd0aH0gYXNzZXRzICgke2Zvcm1hdFNpemUodG90YWxBc3NldFNpemUpfSlgKVxuICB9XG4gIFxuICAvLyBDYWxjdWxhdGUgYnVuZGxlIHNpemVcbiAgY29uc3QgdG90YWxTaXplID0gZmlsZXMucmVkdWNlKChzdW0sIGYpID0+IHN1bSArIGYuY29udGVudC5sZW5ndGgsIDApXG4gIGNvbnN0IHNpemVLQiA9ICh0b3RhbFNpemUgLyAxMDI0KS50b0ZpeGVkKDEpXG4gIGxvZ2dlci5pbmZvKGBDb250ZW50IGJ1bmRsZTogJHtzaXplS0J9IEtCYClcbiAgXG4gIC8vIFVwbG9hZCBiaW5hcnkgYXNzZXRzIGZpcnN0ICh3aXRoIHByb2dyZXNzKVxuICBpZiAoYXNzZXRzLmxlbmd0aCA+IDAgJiYgZXhpc3RpbmdTbHVnICYmIGFwaUtleSkge1xuICAgIGNvbnNvbGUubG9nKCcnKVxuICAgIGxvZ2dlci5pbmZvKCdVcGxvYWRpbmcgYXNzZXRzLi4uJylcbiAgICBcbiAgICBjb25zdCBhc3NldFJlc3VsdHMgPSBhd2FpdCB1cGxvYWRBc3NldHMoYXNzZXRzLCBhcGlVcmwsIGV4aXN0aW5nU2x1ZywgYXBpS2V5KVxuICAgIGNvbnN0IHN1Y2Nlc3NDb3VudCA9IGFzc2V0UmVzdWx0cy5maWx0ZXIociA9PiByLnN1Y2Nlc3MpLmxlbmd0aFxuICAgIGNvbnN0IGZhaWxDb3VudCA9IGFzc2V0UmVzdWx0cy5maWx0ZXIociA9PiAhci5zdWNjZXNzKS5sZW5ndGhcbiAgICBcbiAgICBpZiAoZmFpbENvdW50ID4gMCkge1xuICAgICAgbG9nZ2VyLndhcm4oYCR7c3VjY2Vzc0NvdW50fSBhc3NldHMgdXBsb2FkZWQsICR7ZmFpbENvdW50fSBmYWlsZWRgKVxuICAgIH0gZWxzZSBpZiAoc3VjY2Vzc0NvdW50ID4gMCkge1xuICAgICAgbG9nZ2VyLnN1Y2Nlc3MoYOKckyAke3N1Y2Nlc3NDb3VudH0gYXNzZXRzIHVwbG9hZGVkYClcbiAgICB9XG4gIH0gZWxzZSBpZiAoYXNzZXRzLmxlbmd0aCA+IDAgJiYgIWV4aXN0aW5nU2x1Zykge1xuICAgIGxvZ2dlci5pbmZvKCdBc3NldHMgd2lsbCBiZSB1cGxvYWRlZCBvbiBuZXh0IGRlcGxveSAoYWZ0ZXIgcHJvamVjdCByZWdpc3RyYXRpb24pJylcbiAgfVxuICBcbiAgLy8gRGVwbG95IGNvbnRlbnQgdG8gQVBJXG4gIGNvbnNvbGUubG9nKCcnKVxuICBsb2dnZXIuaW5mbygnVXBsb2FkaW5nIGNvbnRlbnQuLi4nKVxuICBcbiAgdHJ5IHtcbiAgICBpbnRlcmZhY2UgRGVwbG95UmVzcG9uc2Uge1xuICAgICAgc3VjY2VzczogYm9vbGVhblxuICAgICAgc2x1Zzogc3RyaW5nXG4gICAgICB1cmw6IHN0cmluZ1xuICAgICAgYmxvYlVybDogc3RyaW5nXG4gICAgICBpc1VwZGF0ZTogYm9vbGVhblxuICAgICAgZmlsZXNDb3VudDogbnVtYmVyXG4gICAgICBhcGlLZXk/OiBzdHJpbmdcbiAgICAgIGVycm9yPzogc3RyaW5nXG4gICAgfVxuICAgIFxuICAgIGNvbnN0IGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgIH1cbiAgICBcbiAgICAvLyBBZGQgQVBJIGtleSBoZWFkZXIgZm9yIHVwZGF0ZXNcbiAgICBpZiAoYXBpS2V5KSB7XG4gICAgICBoZWFkZXJzWydBdXRob3JpemF0aW9uJ10gPSBgQmVhcmVyICR7YXBpS2V5fWBcbiAgICB9XG4gICAgXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHthcGlVcmx9L2FwaS9kZXBsb3lgLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGhlYWRlcnMsXG4gICAgICByZWRpcmVjdDogJ2ZvbGxvdycsIC8vIEZvbGxvdyByZWRpcmVjdHNcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgbmFtZTogY29uZmlnLm5hbWUgfHwgJ015IERvY3VtZW50YXRpb24nLFxuICAgICAgICBzbHVnOiBleGlzdGluZ1NsdWcsXG4gICAgICAgIGRvY3NKc29uOiBjb25maWcsXG4gICAgICAgIHRoZW1lSnNvbixcbiAgICAgICAgb3BlbkFwaVNwZWNzLFxuICAgICAgICBmaWxlcyxcbiAgICAgICAgYXBpS2V5LCAvLyBBbHNvIHNlbmQgaW4gYm9keSBhcyBmYWxsYmFja1xuICAgICAgfSksXG4gICAgfSlcbiAgICBcbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICBjb25zdCBlcnJvckRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCkuY2F0Y2goKCkgPT4gKHsgZXJyb3I6ICdVbmtub3duIGVycm9yJyB9KSkgYXMgeyBlcnJvcj86IHN0cmluZzsgZGV0YWlscz86IHN0cmluZyB9XG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnJvckRhdGEuZXJyb3IgfHwgYEhUVFAgJHtyZXNwb25zZS5zdGF0dXN9YFxuICAgICAgY29uc3QgZGV0YWlscyA9IGVycm9yRGF0YS5kZXRhaWxzID8gYFxcbiAgIERldGFpbHM6ICR7ZXJyb3JEYXRhLmRldGFpbHN9YCA6ICcnXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7ZXJyb3JNZXNzYWdlfSR7ZGV0YWlsc31gKVxuICAgIH1cbiAgICBcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgRGVwbG95UmVzcG9uc2VcbiAgICBcbiAgICAvLyBTYXZlIHByb2plY3QgY29uZmlnIGZvciBmdXR1cmUgdXBkYXRlc1xuICAgIGNvbnN0IG5ld0RldkRvY0NvbmZpZzogRGV2RG9jQ29uZmlnID0ge1xuICAgICAgc2x1ZzogcmVzdWx0LnNsdWcsXG4gICAgICB1cmw6IHJlc3VsdC51cmwsXG4gICAgICBsYXN0RGVwbG95ZWQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICB9XG4gICAgXG4gICAgLy8gU2F2ZSBBUEkga2V5IChmcm9tIHJlc3BvbnNlIGZvciBuZXcgcHJvamVjdHMsIG9yIGV4aXN0aW5nIGZvciB1cGRhdGVzKVxuICAgIGlmIChyZXN1bHQuYXBpS2V5KSB7XG4gICAgICBuZXdEZXZEb2NDb25maWcuYXBpS2V5ID0gcmVzdWx0LmFwaUtleVxuICAgIH0gZWxzZSBpZiAoYXBpS2V5KSB7XG4gICAgICBuZXdEZXZEb2NDb25maWcuYXBpS2V5ID0gYXBpS2V5XG4gICAgfVxuICAgIFxuICAgIGZzLndyaXRlSnNvblN5bmMoZGV2ZG9jQ29uZmlnUGF0aCwgbmV3RGV2RG9jQ29uZmlnLCB7IHNwYWNlczogMiB9KVxuICAgIFxuICAgIC8vIFN1Y2Nlc3MgbWVzc2FnZVxuICAgIGNvbnNvbGUubG9nKCcnKVxuICAgIGxvZ2dlci5zdWNjZXNzKCdEZXBsb3ltZW50IHN1Y2Nlc3NmdWwhJylcbiAgICBjb25zb2xlLmxvZygnJylcbiAgICBjb25zb2xlLmxvZyhgICBZb3VyIGRvY3MgYXJlIGxpdmUgYXQ6YClcbiAgICBjb25zb2xlLmxvZyhgICAke2xvZ2dlci5jeWFuKHJlc3VsdC51cmwpfWApXG4gICAgY29uc29sZS5sb2coJycpXG4gICAgXG4gICAgaWYgKHJlc3VsdC5pc1VwZGF0ZSkge1xuICAgICAgbG9nZ2VyLmluZm8oJ1Byb2plY3QgdXBkYXRlZCB3aXRoIG5ldyBjb250ZW50JylcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nZ2VyLmluZm8oYFByb2plY3Qgc2x1ZzogJHtyZXN1bHQuc2x1Z31gKVxuICAgICAgbG9nZ2VyLmluZm8oJ1J1biBcImRldmRvYyBkZXBsb3lcIiBhZ2FpbiB0byB1cGRhdGUnKVxuICAgICAgXG4gICAgICAvLyBTaG93IEFQSSBrZXkgd2FybmluZyBmb3IgbmV3IHByb2plY3RzXG4gICAgICBpZiAocmVzdWx0LmFwaUtleSkge1xuICAgICAgICBjb25zb2xlLmxvZygnJylcbiAgICAgICAgbG9nZ2VyLndhcm4oJ+KaoO+4jyAgU2F2ZSB5b3VyIEFQSSBrZXkgZm9yIENJL0NEIGRlcGxveW1lbnRzOicpXG4gICAgICAgIGNvbnNvbGUubG9nKGAgICAgJHtyZXN1bHQuYXBpS2V5fWApXG4gICAgICAgIGNvbnNvbGUubG9nKCcnKVxuICAgICAgICBsb2dnZXIuaW5mbygnQVBJIGtleSBzYXZlZCB0byAuZGV2ZG9jLmpzb24gKGFkZCB0byAuZ2l0aWdub3JlISknKVxuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICAvLyBDaGVjayBmb3IgZG9tYWluLmpzb24gYW5kIHNob3cgY3VzdG9tIGRvbWFpbiBzdGF0dXNcbiAgICBhd2FpdCBjaGVja0N1c3RvbURvbWFpblN0YXR1cyhwcm9qZWN0Um9vdCwgYXBpVXJsLCBhcGlLZXkgfHwgcmVzdWx0LmFwaUtleSB8fCAnJylcbiAgICBcbiAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICBjb25zdCBtZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpXG4gICAgbG9nZ2VyLmVycm9yKGBEZXBsb3ltZW50IGZhaWxlZDogJHttZXNzYWdlfWApXG4gICAgcHJvY2Vzcy5leGl0KDEpXG4gIH1cbn1cblxuLyoqXG4gKiBDb2xsZWN0IE9wZW5BUEkgc3BlY3MgYmFzZWQgb24gZG9jcy5qc29uIG5hdmlnYXRpb24gdGFic1xuICovXG5hc3luYyBmdW5jdGlvbiBjb2xsZWN0T3BlbkFwaVNwZWNzKFxuICBwcm9qZWN0Um9vdDogc3RyaW5nLFxuICBkb2NzSnNvbjogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbik6IFByb21pc2U8UmVjb3JkPHN0cmluZywgT3BlbkFwaVNwZWM+PiB7XG4gIGNvbnN0IHNwZWNzOiBSZWNvcmQ8c3RyaW5nLCBPcGVuQXBpU3BlYz4gPSB7fVxuICBcbiAgLy8gR2V0IG5hdmlnYXRpb24gZnJvbSBkb2NzLmpzb24gLSBjb3VsZCBiZSBvYmplY3Qgd2l0aCB0YWJzIG9yIGFycmF5XG4gIGNvbnN0IG5hdmlnYXRpb24gPSBkb2NzSnNvbi5uYXZpZ2F0aW9uIGFzIHsgdGFicz86IEFycmF5PFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB9IHwgQXJyYXk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHwgdW5kZWZpbmVkXG4gIGlmICghbmF2aWdhdGlvbikgcmV0dXJuIHNwZWNzXG4gIFxuICAvLyBIYW5kbGUgYm90aCB7IHRhYnM6IFsuLi5dIH0gYW5kIGRpcmVjdCBhcnJheSBmb3JtYXRzXG4gIGNvbnN0IHRhYnMgPSBBcnJheS5pc0FycmF5KG5hdmlnYXRpb24pID8gbmF2aWdhdGlvbiA6IChuYXZpZ2F0aW9uLnRhYnMgfHwgW10pXG4gIFxuICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGFicykge1xuICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgYW4gT3BlbkFQSSB0YWJcbiAgICBpZiAoaXRlbS50eXBlID09PSAnb3BlbmFwaScpIHtcbiAgICAgIC8vIFNwZWMgY2FuIGJlIGRpcmVjdGx5IG9uIHRhYiBvciBuZXN0ZWQgaW4gdmVyc2lvbnMgYXJyYXlcbiAgICAgIGNvbnN0IHZlcnNpb25zID0gaXRlbS52ZXJzaW9ucyBhcyBBcnJheTx7IHNwZWM6IHN0cmluZzsgdmVyc2lvbjogc3RyaW5nIH0+IHwgdW5kZWZpbmVkXG4gICAgICBcbiAgICAgIGlmICh2ZXJzaW9ucyAmJiBBcnJheS5pc0FycmF5KHZlcnNpb25zKSkge1xuICAgICAgICAvLyBIYW5kbGUgdmVyc2lvbmVkIHNwZWNzXG4gICAgICAgIGZvciAoY29uc3QgdmVyc2lvbiBvZiB2ZXJzaW9ucykge1xuICAgICAgICAgIGlmICh2ZXJzaW9uLnNwZWMpIHtcbiAgICAgICAgICAgIGF3YWl0IGxvYWRTcGVjKHByb2plY3RSb290LCB2ZXJzaW9uLnNwZWMsIHNwZWNzKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpdGVtLnNwZWMpIHtcbiAgICAgICAgLy8gSGFuZGxlIGRpcmVjdCBzcGVjIHJlZmVyZW5jZVxuICAgICAgICBhd2FpdCBsb2FkU3BlYyhwcm9qZWN0Um9vdCwgaXRlbS5zcGVjIGFzIHN0cmluZywgc3BlY3MpXG4gICAgICB9XG4gICAgfVxuICB9XG4gIFxuICByZXR1cm4gc3BlY3Ncbn1cblxuLyoqXG4gKiBMb2FkIGEgc2luZ2xlIE9wZW5BUEkgc3BlYyBpbnRvIHRoZSBzcGVjcyBtYXBcbiAqL1xuYXN5bmMgZnVuY3Rpb24gbG9hZFNwZWMoXG4gIHByb2plY3RSb290OiBzdHJpbmcsXG4gIHNwZWNQYXRoOiBzdHJpbmcsXG4gIHNwZWNzOiBSZWNvcmQ8c3RyaW5nLCBPcGVuQXBpU3BlYz5cbik6IFByb21pc2U8dm9pZD4ge1xuICAvLyBSZXNvbHZlIHRoZSBzcGVjIHBhdGggcmVsYXRpdmUgdG8gcHJvamVjdCByb290XG4gIGxldCBmdWxsU3BlY1BhdGggPSBwYXRoLmpvaW4ocHJvamVjdFJvb3QsIHNwZWNQYXRoKVxuICBcbiAgLy8gSGFuZGxlIHJlbGF0aXZlIHBhdGhzIGxpa2UgLi9mYWNlYm9vay9vcGVuYXBpLmpzb25cbiAgaWYgKHNwZWNQYXRoLnN0YXJ0c1dpdGgoJy4vJykpIHtcbiAgICBmdWxsU3BlY1BhdGggPSBwYXRoLmpvaW4ocHJvamVjdFJvb3QsIHNwZWNQYXRoLnNsaWNlKDIpKVxuICB9XG4gIFxuICBpZiAoZnMuZXhpc3RzU3luYyhmdWxsU3BlY1BhdGgpKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHNwZWNDb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKGZ1bGxTcGVjUGF0aCwgJ3V0Zi04JylcbiAgICAgIGNvbnN0IHNwZWNEYXRhID0gSlNPTi5wYXJzZShzcGVjQ29udGVudCkgYXMgT3BlbkFwaVNwZWNcbiAgICAgIHNwZWNzW3NwZWNQYXRoXSA9IHNwZWNEYXRhXG4gICAgICBsb2dnZXIuaW5mbyhgICDihpIgJHtzcGVjUGF0aH1gKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpXG4gICAgICBsb2dnZXIud2FybihgRmFpbGVkIHRvIHBhcnNlIE9wZW5BUEkgc3BlYyAke3NwZWNQYXRofTogJHttZXNzYWdlfWApXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGxvZ2dlci53YXJuKGBPcGVuQVBJIHNwZWMgZmlsZSBub3QgZm91bmQ6ICR7c3BlY1BhdGh9YClcbiAgfVxufVxuXG4vKipcbiAqIENvbGxlY3QgdGhlbWUuanNvbiBpZiBpdCBleGlzdHNcbiAqL1xuZnVuY3Rpb24gY29sbGVjdFRoZW1lSnNvbihwcm9qZWN0Um9vdDogc3RyaW5nKTogb2JqZWN0IHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgdGhlbWVQYXRoID0gcGF0aC5qb2luKHByb2plY3RSb290LCAndGhlbWUuanNvbicpXG4gIFxuICBpZiAoZnMuZXhpc3RzU3luYyh0aGVtZVBhdGgpKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHRoZW1lQ29udGVudCA9IGZzLnJlYWRGaWxlU3luYyh0aGVtZVBhdGgsICd1dGYtOCcpXG4gICAgICByZXR1cm4gSlNPTi5wYXJzZSh0aGVtZUNvbnRlbnQpIGFzIG9iamVjdFxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpXG4gICAgICBsb2dnZXIud2FybihgRmFpbGVkIHRvIHBhcnNlIHRoZW1lLmpzb246ICR7bWVzc2FnZX1gKVxuICAgIH1cbiAgfVxuICBcbiAgcmV0dXJuIHVuZGVmaW5lZFxufVxuXG4vKipcbiAqIENvbGxlY3QgYWxsIE1EWCBhbmQgY29udGVudCBmaWxlcyBmcm9tIHRoZSBwcm9qZWN0XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNvbGxlY3RGaWxlcyhwcm9qZWN0Um9vdDogc3RyaW5nKTogUHJvbWlzZTxQcm9qZWN0RmlsZVtdPiB7XG4gIGNvbnN0IGZpbGVzOiBQcm9qZWN0RmlsZVtdID0gW11cbiAgXG4gIC8vIFNjYW4gYWxsIGRpcmVjdG9yaWVzIGluIHByb2plY3Qgcm9vdCAobm90IGp1c3QgaGFyZGNvZGVkIGxpc3QpXG4gIGNvbnN0IGl0ZW1zID0gZnMucmVhZGRpclN5bmMocHJvamVjdFJvb3QpXG4gIFxuICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICAvLyBTa2lwIGNvbW1vbiBkaXJlY3RvcmllcyB0aGF0IHNob3VsZG4ndCBiZSBzY2FubmVkXG4gICAgaWYgKFtcbiAgICAgICdub2RlX21vZHVsZXMnLCBcbiAgICAgICdkaXN0JywgXG4gICAgICAnLm5leHQnLCBcbiAgICAgICcuZ2l0JywgXG4gICAgICAncHVibGljJyxcbiAgICAgICcuZGV2ZG9jJyxcbiAgICAgICcuY2xhdWRlJyxcbiAgICAgICcuY3Vyc29yJyxcbiAgICBdLmluY2x1ZGVzKGl0ZW0pKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBcbiAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGguam9pbihwcm9qZWN0Um9vdCwgaXRlbSlcbiAgICBjb25zdCBzdGF0ID0gZnMuc3RhdFN5bmMoZnVsbFBhdGgpXG4gICAgXG4gICAgaWYgKHN0YXQuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgLy8gU2tpcCBhc3NldHMgZm9sZGVyIGZvciBNRFggc2Nhbm5pbmcgKGhhbmRsZWQgc2VwYXJhdGVseSlcbiAgICAgIGlmIChpdGVtID09PSAnYXNzZXRzJykgY29udGludWVcbiAgICAgIGF3YWl0IHNjYW5EaXJlY3RvcnkoZnVsbFBhdGgsIHByb2plY3RSb290LCBmaWxlcylcbiAgICB9IGVsc2UgaWYgKGl0ZW0uZW5kc1dpdGgoJy5tZHgnKSB8fCBpdGVtLmVuZHNXaXRoKCcubWQnKSkge1xuICAgICAgLy8gSW5jbHVkZSByb290LWxldmVsIE1EWCBmaWxlc1xuICAgICAgY29uc3QgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhmdWxsUGF0aCwgJ3V0Zi04JylcbiAgICAgIGZpbGVzLnB1c2goeyBwYXRoOiBpdGVtLCBjb250ZW50IH0pXG4gICAgfSBlbHNlIGlmIChpdGVtID09PSAnZG9jcy5qc29uJyB8fCBpdGVtID09PSAndGhlbWUuanNvbicgfHwgaXRlbSA9PT0gJ2RvbWFpbi5qc29uJyB8fCBpdGVtID09PSAnY3VzdG9tLmNzcycpIHtcbiAgICAgIC8vIEluY2x1ZGUgY29uZmlnIGZpbGVzXG4gICAgICBjb25zdCBjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKGZ1bGxQYXRoLCAndXRmLTgnKVxuICAgICAgZmlsZXMucHVzaCh7IHBhdGg6IGl0ZW0sIGNvbnRlbnQgfSlcbiAgICB9XG4gIH1cbiAgXG4gIC8vIEluY2x1ZGUgdGV4dC1iYXNlZCBhc3NldHMgZnJvbSBhc3NldHMgZm9sZGVyIChTVkcsIEpTT04pXG4gIGNvbnN0IGFzc2V0c0RpciA9IHBhdGguam9pbihwcm9qZWN0Um9vdCwgJ2Fzc2V0cycpXG4gIGlmIChmcy5leGlzdHNTeW5jKGFzc2V0c0RpcikpIHtcbiAgICBhd2FpdCBzY2FuUHVibGljQXNzZXRzKGFzc2V0c0RpciwgcHJvamVjdFJvb3QsIGZpbGVzKVxuICB9XG4gIFxuICByZXR1cm4gZmlsZXNcbn1cblxuLyoqXG4gKiBSZWN1cnNpdmVseSBzY2FuIGEgZGlyZWN0b3J5IGZvciBNRFggZmlsZXNcbiAqL1xuYXN5bmMgZnVuY3Rpb24gc2NhbkRpcmVjdG9yeShcbiAgZGlyOiBzdHJpbmcsXG4gIHByb2plY3RSb290OiBzdHJpbmcsXG4gIGZpbGVzOiBQcm9qZWN0RmlsZVtdXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgaXRlbXMgPSBmcy5yZWFkZGlyU3luYyhkaXIpXG4gIFxuICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICAvLyBTa2lwIGNvbW1vbiBkaXJlY3Rvcmllc1xuICAgIGlmIChbJ25vZGVfbW9kdWxlcycsICdkaXN0JywgJy5uZXh0JywgJy5naXQnLCAncHVibGljJ10uaW5jbHVkZXMoaXRlbSkpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIFxuICAgIGNvbnN0IGZ1bGxQYXRoID0gcGF0aC5qb2luKGRpciwgaXRlbSlcbiAgICBjb25zdCBzdGF0ID0gZnMuc3RhdFN5bmMoZnVsbFBhdGgpXG4gICAgXG4gICAgaWYgKHN0YXQuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgYXdhaXQgc2NhbkRpcmVjdG9yeShmdWxsUGF0aCwgcHJvamVjdFJvb3QsIGZpbGVzKVxuICAgIH0gZWxzZSBpZiAoaXRlbS5lbmRzV2l0aCgnLm1keCcpIHx8IGl0ZW0uZW5kc1dpdGgoJy5tZCcpKSB7XG4gICAgICBjb25zdCByZWxhdGl2ZVBhdGggPSBwYXRoLnJlbGF0aXZlKHByb2plY3RSb290LCBmdWxsUGF0aClcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMoZnVsbFBhdGgsICd1dGYtOCcpXG4gICAgICBcbiAgICAgIGZpbGVzLnB1c2goe1xuICAgICAgICBwYXRoOiByZWxhdGl2ZVBhdGgsXG4gICAgICAgIGNvbnRlbnQsXG4gICAgICB9KVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFNjYW4gcHVibGljIGFzc2V0cyAoU1ZHLCBKU09OLCBDU1MpIC0gdGV4dC1iYXNlZCBvbmx5IGZvciBjb250ZW50IGJ1bmRsZVxuICovXG5hc3luYyBmdW5jdGlvbiBzY2FuUHVibGljQXNzZXRzKFxuICBkaXI6IHN0cmluZyxcbiAgcHJvamVjdFJvb3Q6IHN0cmluZyxcbiAgZmlsZXM6IFByb2plY3RGaWxlW11cbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBpdGVtcyA9IGZzLnJlYWRkaXJTeW5jKGRpcilcbiAgXG4gIC8vIFRleHQtYmFzZWQgZmlsZSBleHRlbnNpb25zIHRvIGluY2x1ZGUgaW4gY29udGVudCBidW5kbGVcbiAgY29uc3QgVEVYVF9FWFRFTlNJT05TID0gWycuc3ZnJywgJy5qc29uJywgJy5jc3MnXVxuICBcbiAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgY29uc3QgZnVsbFBhdGggPSBwYXRoLmpvaW4oZGlyLCBpdGVtKVxuICAgIGNvbnN0IHN0YXQgPSBmcy5zdGF0U3luYyhmdWxsUGF0aClcbiAgICBcbiAgICBpZiAoc3RhdC5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICBhd2FpdCBzY2FuUHVibGljQXNzZXRzKGZ1bGxQYXRoLCBwcm9qZWN0Um9vdCwgZmlsZXMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGV4dCA9IHBhdGguZXh0bmFtZShpdGVtKS50b0xvd2VyQ2FzZSgpXG4gICAgICBpZiAoVEVYVF9FWFRFTlNJT05TLmluY2x1ZGVzKGV4dCkpIHtcbiAgICAgICAgLy8gT25seSBpbmNsdWRlIHRleHQtYmFzZWQgYXNzZXRzIGluIGNvbnRlbnQgYnVuZGxlXG4gICAgICAgIGNvbnN0IHJlbGF0aXZlUGF0aCA9IHBhdGgucmVsYXRpdmUocHJvamVjdFJvb3QsIGZ1bGxQYXRoKVxuICAgICAgICBjb25zdCBjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKGZ1bGxQYXRoLCAndXRmLTgnKVxuICAgICAgICBcbiAgICAgICAgZmlsZXMucHVzaCh7XG4gICAgICAgICAgcGF0aDogcmVsYXRpdmVQYXRoLFxuICAgICAgICAgIGNvbnRlbnQsXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQ29sbGVjdCBiaW5hcnkgYXNzZXRzIGZyb20gYXNzZXRzIGZvbGRlclxuICovXG5hc3luYyBmdW5jdGlvbiBjb2xsZWN0QXNzZXRzKHByb2plY3RSb290OiBzdHJpbmcpOiBQcm9taXNlPEFzc2V0RmlsZVtdPiB7XG4gIGNvbnN0IGFzc2V0czogQXNzZXRGaWxlW10gPSBbXVxuICBcbiAgLy8gQ2hlY2sgYXNzZXRzIGZvbGRlclxuICBjb25zdCBhc3NldHNEaXIgPSBwYXRoLmpvaW4ocHJvamVjdFJvb3QsICdhc3NldHMnKVxuICBpZiAoZnMuZXhpc3RzU3luYyhhc3NldHNEaXIpKSB7XG4gICAgYXdhaXQgc2NhbkJpbmFyeUFzc2V0cyhhc3NldHNEaXIsIHByb2plY3RSb290LCBhc3NldHMpXG4gIH1cbiAgXG4gIHJldHVybiBhc3NldHNcbn1cblxuLyoqXG4gKiBSZWN1cnNpdmVseSBzY2FuIGZvciBiaW5hcnkgYXNzZXRzXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHNjYW5CaW5hcnlBc3NldHMoXG4gIGRpcjogc3RyaW5nLFxuICBwcm9qZWN0Um9vdDogc3RyaW5nLFxuICBhc3NldHM6IEFzc2V0RmlsZVtdXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgaXRlbXMgPSBmcy5yZWFkZGlyU3luYyhkaXIpXG4gIFxuICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGguam9pbihkaXIsIGl0ZW0pXG4gICAgY29uc3Qgc3RhdCA9IGZzLnN0YXRTeW5jKGZ1bGxQYXRoKVxuICAgIFxuICAgIGlmIChzdGF0LmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgIGF3YWl0IHNjYW5CaW5hcnlBc3NldHMoZnVsbFBhdGgsIHByb2plY3RSb290LCBhc3NldHMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGV4dCA9IHBhdGguZXh0bmFtZShpdGVtKS50b0xvd2VyQ2FzZSgpXG4gICAgICBpZiAoQklOQVJZX0VYVEVOU0lPTlMuaW5jbHVkZXMoZXh0KSkge1xuICAgICAgICAvLyBDaGVjayBzaXplIGxpbWl0XG4gICAgICAgIGlmIChzdGF0LnNpemUgPiBNQVhfQVNTRVRfU0laRSkge1xuICAgICAgICAgIGxvZ2dlci53YXJuKGBTa2lwcGluZyAke2l0ZW19OiBleGNlZWRzIDI1TUIgbGltaXQgKCR7Zm9ybWF0U2l6ZShzdGF0LnNpemUpfSlgKVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGNvbnN0IHJlbGF0aXZlUGF0aCA9IHBhdGgucmVsYXRpdmUocHJvamVjdFJvb3QsIGZ1bGxQYXRoKVxuICAgICAgICBhc3NldHMucHVzaCh7XG4gICAgICAgICAgcGF0aDogcmVsYXRpdmVQYXRoLFxuICAgICAgICAgIGZ1bGxQYXRoLFxuICAgICAgICAgIHNpemU6IHN0YXQuc2l6ZSxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBVcGxvYWQgYXNzZXRzIHdpdGggcHJvZ3Jlc3MgdHJhY2tpbmdcbiAqL1xuYXN5bmMgZnVuY3Rpb24gdXBsb2FkQXNzZXRzKFxuICBhc3NldHM6IEFzc2V0RmlsZVtdLFxuICBhcGlVcmw6IHN0cmluZyxcbiAgc2x1Zzogc3RyaW5nLFxuICBhcGlLZXk6IHN0cmluZ1xuKTogUHJvbWlzZTxBcnJheTx7IGZpbGU6IHN0cmluZzsgc3VjY2VzczogYm9vbGVhbjsgdXJsPzogc3RyaW5nOyBlcnJvcj86IHN0cmluZyB9Pj4ge1xuICBjb25zdCByZXN1bHRzOiBBcnJheTx7IGZpbGU6IHN0cmluZzsgc3VjY2VzczogYm9vbGVhbjsgdXJsPzogc3RyaW5nOyBlcnJvcj86IHN0cmluZyB9PiA9IFtdXG4gIFxuICBmb3IgKGNvbnN0IGFzc2V0IG9mIGFzc2V0cykge1xuICAgIGNvbnN0IGZpbGVOYW1lID0gcGF0aC5iYXNlbmFtZShhc3NldC5wYXRoKVxuICAgIFxuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGAgICR7ZmlsZU5hbWV9OiBgKVxuICAgIFxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB1cGxvYWRBc3NldFdpdGhQcm9ncmVzcyhcbiAgICAgICAgYXNzZXQsXG4gICAgICAgIGFwaVVybCxcbiAgICAgICAgc2x1ZyxcbiAgICAgICAgYXBpS2V5LFxuICAgICAgICAocHJvZ3Jlc3MsIGxvYWRlZCwgdG90YWwpID0+IHtcbiAgICAgICAgICBpZiAocHJvY2Vzcy5zdGRvdXQuaXNUVFkpIHtcbiAgICAgICAgICAgIHByb2Nlc3Muc3Rkb3V0LmNsZWFyTGluZSgwKVxuICAgICAgICAgICAgcHJvY2Vzcy5zdGRvdXQuY3Vyc29yVG8oMClcbiAgICAgICAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGAgICR7ZmlsZU5hbWV9OiAke2NyZWF0ZVByb2dyZXNzQmFyKHByb2dyZXNzKX0gJHtmb3JtYXRTaXplKGxvYWRlZCl9LyR7Zm9ybWF0U2l6ZSh0b3RhbCl9YClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIClcbiAgICAgIFxuICAgICAgaWYgKHByb2Nlc3Muc3Rkb3V0LmlzVFRZKSB7XG4gICAgICAgIHByb2Nlc3Muc3Rkb3V0LmNsZWFyTGluZSgwKVxuICAgICAgICBwcm9jZXNzLnN0ZG91dC5jdXJzb3JUbygwKVxuICAgICAgfVxuICAgICAgY29uc29sZS5sb2coYCAgJHtsb2dnZXIuZ3JlZW4oJ+KckycpfSAke2ZpbGVOYW1lfSAoJHtmb3JtYXRTaXplKGFzc2V0LnNpemUpfSlgKVxuICAgICAgXG4gICAgICByZXN1bHRzLnB1c2goeyBmaWxlOiBmaWxlTmFtZSwgc3VjY2VzczogdHJ1ZSwgdXJsOiByZXN1bHQudXJsIH0pXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcilcbiAgICAgIFxuICAgICAgaWYgKHByb2Nlc3Muc3Rkb3V0LmlzVFRZKSB7XG4gICAgICAgIHByb2Nlc3Muc3Rkb3V0LmNsZWFyTGluZSgwKVxuICAgICAgICBwcm9jZXNzLnN0ZG91dC5jdXJzb3JUbygwKVxuICAgICAgfVxuICAgICAgY29uc29sZS5sb2coYCAgJHtsb2dnZXIucmVkKCfinJcnKX0gJHtmaWxlTmFtZX06ICR7bWVzc2FnZX1gKVxuICAgICAgXG4gICAgICByZXN1bHRzLnB1c2goeyBmaWxlOiBmaWxlTmFtZSwgc3VjY2VzczogZmFsc2UsIGVycm9yOiBtZXNzYWdlIH0pXG4gICAgfVxuICB9XG4gIFxuICByZXR1cm4gcmVzdWx0c1xufVxuXG4vKipcbiAqIFVwbG9hZCBhIHNpbmdsZSBhc3NldCB3aXRoIHByb2dyZXNzXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHVwbG9hZEFzc2V0V2l0aFByb2dyZXNzKFxuICBhc3NldDogQXNzZXRGaWxlLFxuICBhcGlVcmw6IHN0cmluZyxcbiAgc2x1Zzogc3RyaW5nLFxuICBhcGlLZXk6IHN0cmluZyxcbiAgb25Qcm9ncmVzczogKHByb2dyZXNzOiBudW1iZXIsIGxvYWRlZDogbnVtYmVyLCB0b3RhbDogbnVtYmVyKSA9PiB2b2lkXG4pOiBQcm9taXNlPHsgdXJsOiBzdHJpbmcgfT4ge1xuICBjb25zdCBmaWxlQnVmZmVyID0gZnMucmVhZEZpbGVTeW5jKGFzc2V0LmZ1bGxQYXRoKVxuICBjb25zdCBmaWxlTmFtZSA9IHBhdGguYmFzZW5hbWUoYXNzZXQucGF0aClcbiAgY29uc3QgbWltZVR5cGUgPSBnZXRNaW1lVHlwZShhc3NldC5mdWxsUGF0aClcbiAgXG4gIC8vIEJ1aWxkIG11bHRpcGFydCBmb3JtIGRhdGFcbiAgY29uc3QgYm91bmRhcnkgPSBgLS0tLURldkRvY0RlcGxveSR7RGF0ZS5ub3coKX1gXG4gIGNvbnN0IENSTEYgPSAnXFxyXFxuJ1xuICBcbiAgY29uc3QgaGVhZGVyID0gW1xuICAgIGAtLSR7Ym91bmRhcnl9YCxcbiAgICBgQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPVwiZmlsZVwiOyBmaWxlbmFtZT1cIiR7ZmlsZU5hbWV9XCJgLFxuICAgIGBDb250ZW50LVR5cGU6ICR7bWltZVR5cGV9YCxcbiAgICAnJyxcbiAgICAnJ1xuICBdLmpvaW4oQ1JMRilcbiAgXG4gIGNvbnN0IHNsdWdQYXJ0ID0gW1xuICAgICcnLFxuICAgIGAtLSR7Ym91bmRhcnl9YCxcbiAgICBgQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPVwic2x1Z1wiYCxcbiAgICAnJyxcbiAgICBzbHVnLFxuICAgICcnXG4gIF0uam9pbihDUkxGKVxuICBcbiAgY29uc3QgcGF0aFBhcnQgPSBbXG4gICAgYC0tJHtib3VuZGFyeX1gLFxuICAgIGBDb250ZW50LURpc3Bvc2l0aW9uOiBmb3JtLWRhdGE7IG5hbWU9XCJwYXRoXCJgLFxuICAgICcnLFxuICAgIGFzc2V0LnBhdGgucmVwbGFjZSgvXmFzc2V0c1xcLy8sICcnKSwgLy8gUmVtb3ZlIGFzc2V0cy8gcHJlZml4XG4gICAgJydcbiAgXS5qb2luKENSTEYpXG4gIFxuICBjb25zdCBmb290ZXIgPSBgJHtDUkxGfS0tJHtib3VuZGFyeX0tLSR7Q1JMRn1gXG4gIFxuICBjb25zdCBoZWFkZXJCdWZmZXIgPSBCdWZmZXIuZnJvbShoZWFkZXIpXG4gIGNvbnN0IHNsdWdCdWZmZXIgPSBCdWZmZXIuZnJvbShzbHVnUGFydClcbiAgY29uc3QgcGF0aEJ1ZmZlciA9IEJ1ZmZlci5mcm9tKHBhdGhQYXJ0KVxuICBjb25zdCBmb290ZXJCdWZmZXIgPSBCdWZmZXIuZnJvbShmb290ZXIpXG4gIFxuICBjb25zdCB0b3RhbFNpemUgPSBoZWFkZXJCdWZmZXIubGVuZ3RoICsgZmlsZUJ1ZmZlci5sZW5ndGggKyBzbHVnQnVmZmVyLmxlbmd0aCArIHBhdGhCdWZmZXIubGVuZ3RoICsgZm9vdGVyQnVmZmVyLmxlbmd0aFxuICBjb25zdCBib2R5ID0gQnVmZmVyLmNvbmNhdChbaGVhZGVyQnVmZmVyLCBmaWxlQnVmZmVyLCBzbHVnQnVmZmVyLCBwYXRoQnVmZmVyLCBmb290ZXJCdWZmZXJdKVxuICBcbiAgLy8gU2ltdWxhdGUgcHJvZ3Jlc3NcbiAgbGV0IHVwbG9hZGVkID0gMFxuICBjb25zdCBjaHVua1NpemUgPSBNYXRoLmNlaWwodG90YWxTaXplIC8gMjApXG4gIFxuICBjb25zdCBwcm9ncmVzc0ludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgIGlmICh1cGxvYWRlZCA8IHRvdGFsU2l6ZSAqIDAuOSkge1xuICAgICAgdXBsb2FkZWQgPSBNYXRoLm1pbih1cGxvYWRlZCArIGNodW5rU2l6ZSwgdG90YWxTaXplICogMC45KVxuICAgICAgb25Qcm9ncmVzcyh1cGxvYWRlZCAvIHRvdGFsU2l6ZSwgdXBsb2FkZWQsIHRvdGFsU2l6ZSlcbiAgICB9XG4gIH0sIDUwKVxuICBcbiAgdHJ5IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGAke2FwaVVybH0vYXBpL2Fzc2V0cy91cGxvYWRgLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6IGBtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0ke2JvdW5kYXJ5fWAsXG4gICAgICAgICdBdXRob3JpemF0aW9uJzogYEJlYXJlciAke2FwaUtleX1gLFxuICAgICAgfSxcbiAgICAgIGJvZHksXG4gICAgfSlcbiAgICBcbiAgICBjbGVhckludGVydmFsKHByb2dyZXNzSW50ZXJ2YWwpXG4gICAgb25Qcm9ncmVzcygxLCB0b3RhbFNpemUsIHRvdGFsU2l6ZSlcbiAgICBcbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICBjb25zdCBlcnJvciA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKS5jYXRjaCgoKSA9PiAoeyBlcnJvcjogJ1VwbG9hZCBmYWlsZWQnIH0pKSBhcyB7IGVycm9yPzogc3RyaW5nIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvci5lcnJvciB8fCBgSFRUUCAke3Jlc3BvbnNlLnN0YXR1c31gKVxuICAgIH1cbiAgICBcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgeyB1cmw6IHN0cmluZyB9XG4gICAgcmV0dXJuIHJlc3VsdFxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNsZWFySW50ZXJ2YWwocHJvZ3Jlc3NJbnRlcnZhbClcbiAgICB0aHJvdyBlcnJvclxuICB9XG59XG5cbi8qKlxuICogRm9ybWF0IGZpbGUgc2l6ZSBmb3IgZGlzcGxheVxuICovXG5mdW5jdGlvbiBmb3JtYXRTaXplKGJ5dGVzOiBudW1iZXIpOiBzdHJpbmcge1xuICBpZiAoYnl0ZXMgPCAxMDI0KSByZXR1cm4gYCR7Ynl0ZXN9IEJgXG4gIGlmIChieXRlcyA8IDEwMjQgKiAxMDI0KSByZXR1cm4gYCR7KGJ5dGVzIC8gMTAyNCkudG9GaXhlZCgxKX0gS0JgXG4gIHJldHVybiBgJHsoYnl0ZXMgLyAoMTAyNCAqIDEwMjQpKS50b0ZpeGVkKDIpfSBNQmBcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBwcm9ncmVzcyBiYXIgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVByb2dyZXNzQmFyKHByb2dyZXNzOiBudW1iZXIsIHdpZHRoOiBudW1iZXIgPSAzMCk6IHN0cmluZyB7XG4gIGNvbnN0IGZpbGxlZCA9IE1hdGgucm91bmQod2lkdGggKiBwcm9ncmVzcylcbiAgY29uc3QgZW1wdHkgPSB3aWR0aCAtIGZpbGxlZFxuICBjb25zdCBiYXIgPSAn4paIJy5yZXBlYXQoZmlsbGVkKSArICfilpEnLnJlcGVhdChlbXB0eSlcbiAgY29uc3QgcGVyY2VudGFnZSA9IE1hdGgucm91bmQocHJvZ3Jlc3MgKiAxMDApXG4gIHJldHVybiBgWyR7YmFyfV0gJHtwZXJjZW50YWdlfSVgXG59XG4iXX0=
802
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NsaS9jb21tYW5kcy9kZXBsb3kudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFvUUEsd0JBMlNDO0FBL2lCRCxnREFBdUI7QUFDdkIsd0RBQXlCO0FBQ3pCLHlDQUF5RDtBQUN6RCwrQ0FBMkM7QUFDM0MsK0NBQWlEO0FBRWpELHVCQUF1QjtBQUN2QixNQUFNLGNBQWMsR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQTtBQUV2QywrQ0FBK0M7QUFDL0MsTUFBTSxpQkFBaUIsR0FBRztJQUN4QixNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNO0lBQ3hELE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTTtJQUN2QixNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU07SUFDdEIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU07SUFDekMsTUFBTTtDQUNQLENBQUE7QUFFRCxvQ0FBb0M7QUFDcEMsTUFBTSxVQUFVLEdBQTJCO0lBQ3pDLFNBQVM7SUFDVCxNQUFNLEVBQUUsV0FBVztJQUNuQixNQUFNLEVBQUUsWUFBWTtJQUNwQixPQUFPLEVBQUUsWUFBWTtJQUNyQixNQUFNLEVBQUUsV0FBVztJQUNuQixPQUFPLEVBQUUsWUFBWTtJQUNyQixNQUFNLEVBQUUsY0FBYztJQUN0QixNQUFNLEVBQUUsZUFBZTtJQUN2QixTQUFTO0lBQ1QsTUFBTSxFQUFFLFdBQVc7SUFDbkIsT0FBTyxFQUFFLFlBQVk7SUFDckIsTUFBTSxFQUFFLGlCQUFpQjtJQUN6QixRQUFRO0lBQ1IsTUFBTSxFQUFFLFlBQVk7SUFDcEIsTUFBTSxFQUFFLFdBQVc7SUFDbkIsTUFBTSxFQUFFLFdBQVc7SUFDbkIsUUFBUTtJQUNSLE9B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U0FBUyxpQkFBaUIsQ0FBQyxRQUFnQixFQUFFLFFBQWdCLEVBQUU7SUFDN0QsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLENBQUE7SUFDM0MsTUFBTSxLQUFLLEdBQUcsS0FBSyxHQUFHLE1BQU0sQ0FBQTtJQUM1QixNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDbEQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDLENBQUE7SUFDN0MsT0FBTyxJQUFJLEdBQUcsS0FBSyxVQUFVLEdBQUcsQ0FBQTtBQUNsQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSdcbmltcG9ydCB7IGxvYWRDb25maWcsIHZhbGlkYXRlQ29uZmlnIH0gZnJvbSAnLi4vLi4vY29uZmlnJ1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vLi4vdXRpbHMvbG9nZ2VyJ1xuaW1wb3J0IHsgREVGQVVMVF9BUElfVVJMIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJ1xuXG4vLyBNYXggYXNzZXQgc2l6ZTogMjVNQlxuY29uc3QgTUFYX0FTU0VUX1NJWkUgPSAyNSAqIDEwMjQgKiAxMDI0XG5cbi8vIEJpbmFyeSBhc3NldCBleHRlbnNpb25zIHRvIHVwbG9hZCBzZXBhcmF0ZWx5XG5jb25zdCBCSU5BUllfRVhURU5TSU9OUyA9IFtcbiAgJy5wbmcnLCAnLmpwZycsICcuanBlZycsICcuZ2lmJywgJy53ZWJwJywgJy5pY28nLCAnLnN2ZycsXG4gICcubXA0JywgJy53ZWJtJywgJy5tb3YnLFxuICAnLm1wMycsICcud2F2JywgJy5vZ2cnLFxuICAnLndvZmYnLCAnLndvZmYyJywgJy50dGYnLCAnLm90ZicsICcuZW90JyxcbiAgJy5wZGYnLFxuXVxuXG4vLyBNYXAgZmlsZSBleHRlbnNpb25zIHRvIE1JTUUgdHlwZXNcbmNvbnN0IE1JTUVfVFlQRVM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gIC8vIEltYWdlc1xuICAnLnBuZyc6ICdpbWFnZS9wbmcnLFxuICAnLmpwZyc6ICdpbWFnZS9qcGVnJyxcbiAgJy5qcGVnJzogJ2ltYWdlL2pwZWcnLFxuICAnLmdpZic6ICdpbWFnZS9naWYnLFxuICAnLndlYnAnOiAnaW1hZ2Uvd2VicCcsXG4gICcuaWNvJzogJ2ltYWdlL3gtaWNvbicsXG4gICcuc3ZnJzogJ2ltYWdlL3N2Zyt4bWwnLFxuICAvLyBWaWRlb3NcbiAgJy5tcDQnOiAndmlkZW8vbXA0JyxcbiAgJy53ZWJtJzogJ3ZpZGVvL3dlYm0nLFxuICAnLm1vdic6ICd2aWRlby9xdWlja3RpbWUnLFxuICAvLyBBdWRpb1xuICAnLm1wMyc6ICdhdWRpby9tcGVnJyxcbiAgJy53YXYnOiAnYXVkaW8vd2F2JyxcbiAgJy5vZ2cnOiAnYXVkaW8vb2dnJyxcbiAgLy8gRm9udHNcbiAgJy53b2ZmJzogJ2ZvbnQvd29mZicsXG4gICcud29mZjInOiAnZm9udC93b2ZmMicsXG4gICcudHRmJzogJ2ZvbnQvdHRmJyxcbiAgJy5vdGYnOiAnZm9udC9vdGYnLFxuICAnLmVvdCc6ICdhcHBsaWNhdGlvbi92bmQubXMtZm9udG9iamVjdCcsXG4gIC8vIERvY3VtZW50c1xuICAnLnBkZic6ICdhcHBsaWNhdGlvbi9wZGYnLFxufVxuXG4vKipcbiAqIEdldCBNSU1FIHR5cGUgZnJvbSBmaWxlIGV4dGVuc2lvblxuICovXG5mdW5jdGlvbiBnZXRNaW1lVHlwZShmaWxlUGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgZXh0ID0gcGF0aC5leHRuYW1lKGZpbGVQYXRoKS50b0xvd2VyQ2FzZSgpXG4gIHJldHVybiBNSU1FX1RZUEVTW2V4dF0gfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSdcbn1cblxuaW50ZXJmYWNlIERlcGxveU9wdGlvbnMge1xuICB1cmw/OiBzdHJpbmdcbiAgYXBpS2V5Pzogc3RyaW5nXG59XG5cbmludGVyZmFjZSBQcm9qZWN0RmlsZSB7XG4gIHBhdGg6IHN0cmluZ1xuICBjb250ZW50OiBzdHJpbmdcbn1cblxuaW50ZXJmYWNlIE9wZW5BcGlTcGVjIHtcbiAgW2tleTogc3RyaW5nXTogdW5rbm93blxufVxuXG5pbnRlcmZhY2UgQXNzZXRGaWxlIHtcbiAgcGF0aDogc3RyaW5nXG4gIGZ1bGxQYXRoOiBzdHJpbmdcbiAgc2l6ZTogbnVtYmVyXG59XG5cbmludGVyZmFjZSBEZXZEb2NDb25maWcge1xuICBwcm9qZWN0SWQ/OiBzdHJpbmdcbiAgbmFtZT86IHN0cmluZ1xuICBzbHVnPzogc3RyaW5nXG4gIHN1YmRvbWFpbj86IHN0cmluZ1xuICBhcGlLZXk/OiBzdHJpbmdcbiAgdXJsPzogc3RyaW5nXG4gIGxhc3REZXBsb3llZD86IHN0cmluZ1xuICBjcmVhdGVkQXQ/OiBzdHJpbmdcbn1cblxuaW50ZXJmYWNlIFJlZ2lzdGVyUmVzcG9uc2Uge1xuICBzdWNjZXNzOiBib29sZWFuXG4gIHByb2plY3RJZDogc3RyaW5nXG4gIHNsdWc6IHN0cmluZ1xuICBzdWJkb21haW46IHN0cmluZ1xuICBhcGlLZXk6IHN0cmluZ1xuICB1cmw6IHN0cmluZ1xuICBlcnJvcj86IHN0cmluZ1xufVxuXG5pbnRlcmZhY2UgQ2hlY2tTdWJkb21haW5SZXNwb25zZSB7XG4gIGF2YWlsYWJsZTogYm9vbGVhblxuICBlcnJvcj86IHN0cmluZ1xuICBzdWdnZXN0aW9uPzogc3RyaW5nXG59XG5cbi8vIFNpbXBsZSBwcm9tcHQgaGVscGVyIHVzaW5nIHJlYWRsaW5lXG5hc3luYyBmdW5jdGlvbiBwcm9tcHQocXVlc3Rpb246IHN0cmluZywgZGVmYXVsdFZhbHVlPzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgcmVhZGxpbmUgPSBhd2FpdCBpbXBvcnQoJ3JlYWRsaW5lJylcbiAgY29uc3QgcmwgPSByZWFkbGluZS5jcmVhdGVJbnRlcmZhY2Uoe1xuICAgIGlucHV0OiBwcm9jZXNzLnN0ZGluLFxuICAgIG91dHB1dDogcHJvY2Vzcy5zdGRvdXQsXG4gIH0pXG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgY29uc3QgZGVmYXVsdEhpbnQgPSBkZWZhdWx0VmFsdWUgPyBgICgke2RlZmF1bHRWYWx1ZX0pYCA6ICcnXG4gICAgcmwucXVlc3Rpb24oYCR7cXVlc3Rpb259JHtkZWZhdWx0SGludH06IGAsIChhbnN3ZXIpID0+IHtcbiAgICAgIHJsLmNsb3NlKClcbiAgICAgIHJlc29sdmUoYW5zd2VyLnRyaW0oKSB8fCBkZWZhdWx0VmFsdWUgfHwgJycpXG4gICAgfSlcbiAgfSlcbn1cblxuLyoqXG4gKiBDaGVjayBzdWJkb21haW4gYXZhaWxhYmlsaXR5IHZpYSBBUElcbiAqL1xuYXN5bmMgZnVuY3Rpb24gY2hlY2tTdWJkb21haW5BdmFpbGFiaWxpdHkoXG4gIHN1YmRvbWFpbjogc3RyaW5nLFxuICBhcGlVcmw6IHN0cmluZ1xuKTogUHJvbWlzZTxDaGVja1N1YmRvbWFpblJlc3BvbnNlPiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHthcGlVcmx9L2FwaS9zdWJkb21haW5zL2NoZWNrYCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICB9LFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBzdWJkb21haW4gfSksXG4gICAgfSlcbiAgICBcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgQ2hlY2tTdWJkb21haW5SZXNwb25zZVxuICAgIHJldHVybiByZXN1bHRcbiAgfSBjYXRjaCB7XG4gICAgLy8gSWYgQVBJIGlzIHVuYXZhaWxhYmxlLCBhc3N1bWUgYXZhaWxhYmxlICh3aWxsIGZhaWwgYXQgcmVnaXN0cmF0aW9uIGlmIG5vdClcbiAgICByZXR1cm4geyBhdmFpbGFibGU6IHRydWUgfVxuICB9XG59XG5cbi8qKlxuICogQmFzaWMgc3ViZG9tYWluIGZvcm1hdCB2YWxpZGF0aW9uXG4gKi9cbmZ1bmN0aW9uIGlzVmFsaWRTdWJkb21haW5Gb3JtYXQoc3ViZG9tYWluOiBzdHJpbmcpOiB7IHZhbGlkOiBib29sZWFuOyBlcnJvcj86IHN0cmluZyB9IHtcbiAgaWYgKCFzdWJkb21haW4pIHtcbiAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIGVycm9yOiAnU3ViZG9tYWluIGlzIHJlcXVpcmVkJyB9XG4gIH1cbiAgXG4gIGlmIChzdWJkb21haW4ubGVuZ3RoIDwgMykge1xuICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgZXJyb3I6ICdTdWJkb21haW4gbXVzdCBiZSBhdCBsZWFzdCAzIGNoYXJhY3RlcnMnIH1cbiAgfVxuICBcbiAgaWYgKHN1YmRvbWFpbi5sZW5ndGggPiA2Mykge1xuICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgZXJyb3I6ICdTdWJkb21haW4gbXVzdCBiZSA2MyBjaGFyYWN0ZXJzIG9yIGxlc3MnIH1cbiAgfVxuICBcbiAgaWYgKCEvXlthLXowLTldKFthLXowLTktXSpbYS16MC05XSk/JC8udGVzdChzdWJkb21haW4pKSB7XG4gICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCBlcnJvcjogJ1N1YmRvbWFpbiBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aCBhbHBoYW51bWVyaWMsIGNhbiBjb250YWluIGh5cGhlbnMnIH1cbiAgfVxuICBcbiAgaWYgKC8tLS8udGVzdChzdWJkb21haW4pKSB7XG4gICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCBlcnJvcjogJ1N1YmRvbWFpbiBjYW5ub3QgY29udGFpbiBjb25zZWN1dGl2ZSBoeXBoZW5zJyB9XG4gIH1cbiAgXG4gIHJldHVybiB7IHZhbGlkOiB0cnVlIH1cbn1cblxuaW50ZXJmYWNlIERvbWFpbkNvbmZpZyB7XG4gIGN1c3RvbURvbWFpbjogc3RyaW5nXG4gIHNlbz86IHtcbiAgICBjYW5vbmljYWw/OiBzdHJpbmdcbiAgfVxufVxuXG5pbnRlcmZhY2UgRG9tYWluU3RhdHVzUmVzcG9uc2Uge1xuICBoYXNDdXN0b21Eb21haW46IGJvb2xlYW5cbiAgZG9tYWluPzogc3RyaW5nXG4gIHN0YXR1cz86IHN0cmluZ1xuICBjdXN0b21Vcmw/OiBzdHJpbmdcbiAgbWVzc2FnZT86IHN0cmluZ1xuICBuZXh0U3RlcD86IHN0cmluZ1xufVxuXG4vKipcbiAqIENoZWNrIGZvciBkb21haW4uanNvbiBhbmQgZGlzcGxheSBjdXN0b20gZG9tYWluIHN0YXR1c1xuICovXG5hc3luYyBmdW5jdGlvbiBjaGVja0N1c3RvbURvbWFpblN0YXR1cyhcbiAgcHJvamVjdFJvb3Q6IHN0cmluZyxcbiAgYXBpVXJsOiBzdHJpbmcsXG4gIGFwaUtleTogc3RyaW5nXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgLy8gQ2hlY2sgaWYgZG9tYWluLmpzb24gZXhpc3RzXG4gIGNvbnN0IGRvbWFpbkNvbmZpZ1BhdGggPSBwYXRoLmpvaW4ocHJvamVjdFJvb3QsICdkb21haW4uanNvbicpXG4gIFxuICBpZiAoIWZzLmV4aXN0c1N5bmMoZG9tYWluQ29uZmlnUGF0aCkpIHtcbiAgICByZXR1cm4gLy8gTm8gZG9tYWluLmpzb24sIG5vdGhpbmcgdG8gZG9cbiAgfVxuICBcbiAgbGV0IGRvbWFpbkNvbmZpZzogRG9tYWluQ29uZmlnXG4gIHRyeSB7XG4gICAgZG9tYWluQ29uZmlnID0gZnMucmVhZEpzb25TeW5jKGRvbWFpbkNvbmZpZ1BhdGgpIGFzIERvbWFpbkNvbmZpZ1xuICB9IGNhdGNoIHtcbiAgICBsb2dnZXIud2FybignRm91bmQgZG9tYWluLmpzb24gYnV0IGZhaWxlZCB0byBwYXJzZSBpdCcpXG4gICAgcmV0dXJuXG4gIH1cbiAgXG4gIGlmICghZG9tYWluQ29uZmlnLmN1c3RvbURvbWFpbikge1xuICAgIHJldHVyblxuICB9XG4gIFxuICBjb25zb2xlLmxvZygnJylcbiAgbG9nZ2VyLmluZm8oYEN1c3RvbSBkb21haW4gY29uZmlndXJlZDogJHtkb21haW5Db25maWcuY3VzdG9tRG9tYWlufWApXG4gIFxuICAvLyBDaGVjayBkb21haW4gc3RhdHVzIHZpYSBBUElcbiAgaWYgKCFhcGlLZXkpIHtcbiAgICBsb2dnZXIuaW5mbygnUnVuIFwiZGV2ZG9jIGRvbWFpbiBzdGF0dXNcIiB0byBjaGVjayBETlMgY29uZmlndXJhdGlvbicpXG4gICAgcmV0dXJuXG4gIH1cbiAgXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHthcGlVcmx9L2FwaS9kb21haW5zL3N0YXR1c2AsIHtcbiAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdBdXRob3JpemF0aW9uJzogYEJlYXJlciAke2FwaUtleX1gLFxuICAgICAgfSxcbiAgICB9KVxuICAgIFxuICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBcbiAgICBjb25zdCBzdGF0dXMgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgRG9tYWluU3RhdHVzUmVzcG9uc2VcbiAgICBcbiAgICBpZiAoIXN0YXR1cy5oYXNDdXN0b21Eb21haW4pIHtcbiAgICAgIC8vIERvbWFpbiBpbiBjb25maWcgYnV0IG5vdCByZWdpc3RlcmVkIHlldFxuICAgICAgY29uc29sZS5sb2coJycpXG4gICAgICBsb2dnZXIuaW5mbygnQ3VzdG9tIGRvbWFpbiBub3QgeWV0IHJlZ2lzdGVyZWQuJylcbiAgICAgIGxvZ2dlci5pbmZvKCdSdW4gXCJkZXZkb2MgZG9tYWluIGFkZCAnICsgZG9tYWluQ29uZmlnLmN1c3RvbURvbWFpbiArICdcIiB0byBzZXQgaXQgdXAnKVxuICAgIH0gZWxzZSBpZiAoc3RhdHVzLnN0YXR1cyA9PT0gJ2FjdGl2ZScpIHtcbiAgICAgIGNvbnNvbGUubG9nKCcnKVxuICAgICAgY29uc29sZS5sb2coYCAgQWxzbyBsaXZlIGF0OiAke2xvZ2dlci5jeWFuKHN0YXR1cy5jdXN0b21VcmwgfHwgYGh0dHBzOi8vJHtzdGF0dXMuZG9tYWlufWApfWApXG4gICAgfSBlbHNlIGlmIChzdGF0dXMuc3RhdHVzID09PSAncGVuZGluZycpIHtcbiAgICAgIGNvbnNvbGUubG9nKCcnKVxuICAgICAgbG9nZ2VyLndhcm4oJ0N1c3RvbSBkb21haW4gcGVuZGluZyBETlMgY29uZmlndXJhdGlvbicpXG4gICAgICBsb2dnZXIuaW5mbygnUnVuIFwiZGV2ZG9jIGRvbWFpbiBzdGF0dXNcIiBmb3IgRE5TIHNldHVwIGluc3RydWN0aW9ucycpXG4gICAgfSBlbHNlIGlmIChzdGF0dXMuc3RhdHVzID09PSAnZG5zX3ZlcmlmaWVkJyB8fCBzdGF0dXMuc3RhdHVzID09PSAnc3NsX3Byb3Zpc2lvbmluZycpIHtcbiAgICAgIGNvbnNvbGUubG9nKCcnKVxuICAgICAgbG9nZ2VyLmluZm8oJ0N1c3RvbSBkb21haW4gRE5TIHZlcmlmaWVkLCBTU0wgY2VydGlmaWNhdGUgcHJvdmlzaW9uaW5nLi4uJylcbiAgICB9XG4gICAgXG4gIH0gY2F0Y2gge1xuICAgIC8vIElnbm9yZSBlcnJvcnMsIGRvbWFpbiBzdGF0dXMgaXMgaW5mb3JtYXRpb25hbFxuICB9XG59XG5cbi8qKlxuICogRGVwbG95IGRvY3VtZW50YXRpb24gdG8gRGV2RG9jIHBsYXRmb3JtXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZXBsb3kob3B0aW9uczogRGVwbG95T3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBwcm9qZWN0Um9vdCA9IHByb2Nlc3MuY3dkKClcbiAgY29uc3QgYXBpVXJsID0gb3B0aW9ucy51cmwgfHwgcHJvY2Vzcy5lbnYuREVWRE9DX0FQSV9VUkwgfHwgREVGQVVMVF9BUElfVVJMXG4gIFxuICBsb2dnZXIuaW5mbygnRGVwbG95aW5nIHRvIERldkRvYy4uLlxcbicpXG4gIFxuICAvLyBDaGVjayBmb3IgZG9jcy5qc29uXG4gIGNvbnN0IGNvbmZpZ1BhdGggPSBwYXRoLmpvaW4ocHJvamVjdFJvb3QsICdkb2NzLmpzb24nKVxuICBpZiAoIWZzLmV4aXN0c1N5bmMoY29uZmlnUGF0aCkpIHtcbiAgICBsb2dnZXIuZXJyb3IoJ2RvY3MuanNvbiBub3QgZm91bmQgaW4gY3VycmVudCBkaXJlY3RvcnknKVxuICAgIGxvZ2dlci5pbmZvKCdNYWtlIHN1cmUgeW91IGFyZSBpbiBhIERldkRvYyBkb2N1bWVudGF0aW9uIHByb2plY3QgZGlyZWN0b3J5JylcbiAgICBwcm9jZXNzLmV4aXQoMSlcbiAgfVxuICBcbiAgLy8gTG9hZCBhbmQgdmFsaWRhdGUgY29uZmlndXJhdGlvblxuICBsZXQgY29uZmlnOiBSZXR1cm5UeXBlPHR5cGVvZiBsb2FkQ29uZmlnPiBleHRlbmRzIFByb21pc2U8aW5mZXIgVD4gPyBUIDogbmV2ZXJcbiAgdHJ5IHtcbiAgICBjb25maWcgPSBhd2FpdCBsb2FkQ29uZmlnKHByb2plY3RSb290KVxuICAgIGNvbnN0IHZhbGlkYXRpb24gPSB2YWxpZGF0ZUNvbmZpZyhjb25maWcpXG4gICAgXG4gICAgaWYgKCF2YWxpZGF0aW9uLnZhbGlkKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0ludmFsaWQgZG9jcy5qc29uIGNvbmZpZ3VyYXRpb246JylcbiAgICAgIHZhbGlkYXRpb24uZXJyb3JzLmZvckVhY2goZXJyID0+IGxvZ2dlci5lcnJvcihgICAtICR7ZXJyfWApKVxuICAgICAgcHJvY2Vzcy5leGl0KDEpXG4gICAgfVxuICAgIFxuICAgIGxvZ2dlci5zdWNjZXNzKGDinJMgQ29uZmlndXJhdGlvbiB2YWxpZDogJHtjb25maWcubmFtZSB8fCAnVW50aXRsZWQnfWApXG4gIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKVxuICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGxvYWQgY29uZmlndXJhdGlvbjogJHttZXNzYWdlfWApXG4gICAgcHJvY2Vzcy5leGl0KDEpXG4gIH1cbiAgXG4gIC8vIENoZWNrIGZvciBleGlzdGluZyBwcm9qZWN0IGNvbmZpZ1xuICBjb25zdCBkZXZkb2NDb25maWdQYXRoID0gcGF0aC5qb2luKHByb2plY3RSb290LCAnLmRldmRvYy5qc29uJylcbiAgbGV0IGRldmRvY0NvbmZpZzogRGV2RG9jQ29uZmlnIHwgbnVsbCA9IG51bGxcbiAgbGV0IGV4aXN0aW5nU2x1Zzogc3RyaW5nIHwgbnVsbCA9IG51bGxcbiAgbGV0IGV4aXN0aW5nQXBpS2V5OiBzdHJpbmcgfCBudWxsID0gbnVsbFxuICBsZXQgZXhpc3RpbmdTdWJkb21haW46IHN0cmluZyB8IG51bGwgPSBudWxsXG4gIFxuICBpZiAoZnMuZXhpc3RzU3luYyhkZXZkb2NDb25maWdQYXRoKSkge1xuICAgIHRyeSB7XG4gICAgICBkZXZkb2NDb25maWcgPSBmcy5yZWFkSnNvblN5bmMoZGV2ZG9jQ29uZmlnUGF0aCkgYXMgRGV2RG9jQ29uZmlnXG4gICAgICBleGlzdGluZ1NsdWcgPSBkZXZkb2NDb25maWcuc2x1ZyB8fCBudWxsXG4gICAgICBleGlzdGluZ0FwaUtleSA9IGRldmRvY0NvbmZpZy5hcGlLZXkgfHwgbnVsbFxuICAgICAgZXhpc3RpbmdTdWJkb21haW4gPSBkZXZkb2NDb25maWcuc3ViZG9tYWluIHx8IG51bGxcbiAgICAgIGlmIChleGlzdGluZ1NsdWcgJiYgZXhpc3RpbmdBcGlLZXkpIHtcbiAgICAgICAgbG9nZ2VyLmluZm8oYERlcGxveWluZyBwcm9qZWN0OiAke2V4aXN0aW5nU2x1Z31gKVxuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gSWdub3JlIGVycm9ycyByZWFkaW5nIC5kZXZkb2MuanNvblxuICAgIH1cbiAgfVxuICBcbiAgLy8gR2V0IEFQSSBrZXkgZnJvbSBvcHRpb25zLCBlbnYgdmFyLCBvciAuZGV2ZG9jLmpzb25cbiAgbGV0IGFwaUtleSA9IG9wdGlvbnMuYXBpS2V5IHx8IHByb2Nlc3MuZW52LkRFVkRPQ19BUElfS0VZIHx8IGV4aXN0aW5nQXBpS2V5XG4gIFxuICAvLyBJZiBubyBBUEkga2V5LCB0aGlzIGlzIGEgZmlyc3QgZGVwbG95IC0gbmVlZCB0byByZWdpc3RlciB0aGUgc3ViZG9tYWluIGZpcnN0XG4gIGlmICghYXBpS2V5KSB7XG4gICAgLy8gQ2hlY2sgaWYgd2UgaGF2ZSBzdWJkb21haW4gZnJvbSBpbml0XG4gICAgaWYgKCFleGlzdGluZ1N1YmRvbWFpbikge1xuICAgICAgbG9nZ2VyLmVycm9yKCdObyBwcm9qZWN0IGNvbmZpZ3VyYXRpb24gZm91bmQuJylcbiAgICAgIGNvbnNvbGUubG9nKCcnKVxuICAgICAgbG9nZ2VyLmluZm8oJ1J1biBcImRldmRvYyBpbml0XCIgZmlyc3QgdG8gY29uZmlndXJlIHlvdXIgcHJvamVjdCcpXG4gICAgICBsb2dnZXIuaW5mbygnT3IgcHJvdmlkZSBhbiBBUEkga2V5IHZpYSAtLWFwaS1rZXkgZmxhZyBvciBERVZET0NfQVBJX0tFWSBlbnYgdmFyJylcbiAgICAgIHByb2Nlc3MuZXhpdCgxKVxuICAgIH1cbiAgICBcbiAgICBsZXQgc3ViZG9tYWluVG9SZWdpc3RlciA9IGV4aXN0aW5nU3ViZG9tYWluXG4gICAgbGV0IHJlZ2lzdGVyZWQgPSBmYWxzZVxuICAgIFxuICAgIC8vIExvb3AgdW50aWwgd2Ugc3VjY2Vzc2Z1bGx5IHJlZ2lzdGVyIGEgc3ViZG9tYWluXG4gICAgd2hpbGUgKCFyZWdpc3RlcmVkKSB7XG4gICAgICBsb2dnZXIuaW5mbyhgUmVnaXN0ZXJpbmcgc3ViZG9tYWluICR7c3ViZG9tYWluVG9SZWdpc3Rlcn0uZGV2ZG9jLnNoLi4uYClcbiAgICAgIFxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVnaXN0ZXJSZXNwb25zZSA9IGF3YWl0IGZldGNoKGAke2FwaVVybH0vYXBpL3Byb2plY3RzL3JlZ2lzdGVyYCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBuYW1lOiBkZXZkb2NDb25maWc/Lm5hbWUgfHwgY29uZmlnLm5hbWUgfHwgJ015IERvY3VtZW50YXRpb24nLFxuICAgICAgICAgICAgc2x1Zzogc3ViZG9tYWluVG9SZWdpc3RlcixcbiAgICAgICAgICAgIHN1YmRvbWFpbjogc3ViZG9tYWluVG9SZWdpc3RlcixcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSlcbiAgICAgICAgXG4gICAgICAgIGlmICghcmVnaXN0ZXJSZXNwb25zZS5vaykge1xuICAgICAgICAgIGNvbnN0IGVycm9yRGF0YSA9IGF3YWl0IHJlZ2lzdGVyUmVzcG9uc2UuanNvbigpLmNhdGNoKCgpID0+ICh7IGVycm9yOiAnVW5rbm93biBlcnJvcicgfSkpIGFzIHsgZXJyb3I/OiBzdHJpbmc7IGRldGFpbHM/OiBzdHJpbmcgfVxuICAgICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVycm9yRGF0YS5lcnJvciB8fCBgSFRUUCAke3JlZ2lzdGVyUmVzcG9uc2Uuc3RhdHVzfWBcbiAgICAgICAgICBcbiAgICAgICAgICAvLyBJZiBzdWJkb21haW4gaXMgdGFrZW4sIGFzayBmb3IgYSBuZXcgb25lXG4gICAgICAgICAgaWYgKGVycm9yTWVzc2FnZS5pbmNsdWRlcygnYWxyZWFkeSBleGlzdHMnKSB8fCBlcnJvck1lc3NhZ2UuaW5jbHVkZXMoJ2FscmVhZHkgdGFrZW4nKSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJycpXG4gICAgICAgICAgICBsb2dnZXIud2FybihgU3ViZG9tYWluIFwiJHtzdWJkb21haW5Ub1JlZ2lzdGVyfVwiIGlzIG5vIGxvbmdlciBhdmFpbGFibGUuYClcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gR2V0IHN1Z2dlc3Rpb24gZnJvbSBBUElcbiAgICAgICAgICAgIGNvbnN0IGF2YWlsYWJpbGl0eSA9IGF3YWl0IGNoZWNrU3ViZG9tYWluQXZhaWxhYmlsaXR5KHN1YmRvbWFpblRvUmVnaXN0ZXIsIGFwaVVybClcbiAgICAgICAgICAgIGNvbnN0IHN1Z2dlc3Rpb24gPSBhdmFpbGFiaWxpdHkuc3VnZ2VzdGlvbiB8fCBgJHtzdWJkb21haW5Ub1JlZ2lzdGVyfS1kb2NzYFxuICAgICAgICAgICAgXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnJylcbiAgICAgICAgICAgIGxvZ2dlci5pbmZvKGBTdWdnZXN0aW9uOiAke3N1Z2dlc3Rpb259LmRldmRvYy5zaGApXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnJylcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gUHJvbXB0IGZvciBuZXcgc3ViZG9tYWluXG4gICAgICAgICAgICBsZXQgbmV3U3ViZG9tYWluID0gYXdhaXQgcHJvbXB0KCdFbnRlciBhIG5ldyBzdWJkb21haW4nLCBzdWdnZXN0aW9uKVxuICAgICAgICAgICAgbmV3U3ViZG9tYWluID0gbmV3U3ViZG9tYWluLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvW15hLXowLTktXS9nLCAnLScpLnJlcGxhY2UoL14tfC0kL2csICcnKVxuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBWYWxpZGF0ZSBmb3JtYXRcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdENoZWNrID0gaXNWYWxpZFN1YmRvbWFpbkZvcm1hdChuZXdTdWJkb21haW4pXG4gICAgICAgICAgICBpZiAoIWZvcm1hdENoZWNrLnZhbGlkKSB7XG4gICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihmb3JtYXRDaGVjay5lcnJvciEpXG4gICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHN1YmRvbWFpblRvUmVnaXN0ZXIgPSBuZXdTdWJkb21haW5cbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCcnKVxuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZSlcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgY29uc3QgcmVnaXN0ZXJSZXN1bHQgPSBhd2FpdCByZWdpc3RlclJlc3BvbnNlLmpzb24oKSBhcyBSZWdpc3RlclJlc3BvbnNlXG4gICAgICAgIFxuICAgICAgICAvLyBVcGRhdGUgbG9jYWwgY29uZmlnIHdpdGggQVBJIGtleVxuICAgICAgICBhcGlLZXkgPSByZWdpc3RlclJlc3VsdC5hcGlLZXlcbiAgICAgICAgZXhpc3RpbmdTbHVnID0gcmVnaXN0ZXJSZXN1bHQuc2x1Z1xuICAgICAgICBleGlzdGluZ1N1YmRvbWFpbiA9IHJlZ2lzdGVyUmVzdWx0LnN1YmRvbWFpblxuICAgICAgICBcbiAgICAgICAgLy8gU2F2ZSB0aGUgdXBkYXRlZCBjb25maWdcbiAgICAgICAgY29uc3QgdXBkYXRlZENvbmZpZzogRGV2RG9jQ29uZmlnID0ge1xuICAgICAgICAgIC4uLmRldmRvY0NvbmZpZyxcbiAgICAgICAgICBwcm9qZWN0SWQ6IHJlZ2lzdGVyUmVzdWx0LnByb2plY3RJZCxcbiAgICAgICAgICBzbHVnOiByZWdpc3RlclJlc3VsdC5zbHVnLFxuICAgICAgICAgIHN1YmRvbWFpbjogcmVnaXN0ZXJSZXN1bHQuc3ViZG9tYWluLFxuICAgICAgICAgIGFwaUtleTogcmVnaXN0ZXJSZXN1bHQuYXBpS2V5LFxuICAgICAgICAgIHVybDogcmVnaXN0ZXJSZXN1bHQudXJsLFxuICAgICAgICB9XG4gICAgICAgIGZzLndyaXRlSnNvblN5bmMoZGV2ZG9jQ29uZmlnUGF0aCwgdXBkYXRlZENvbmZpZywgeyBzcGFjZXM6IDIgfSlcbiAgICAgICAgXG4gICAgICAgIGxvZ2dlci5zdWNjZXNzKGDinJMgU3ViZG9tYWluICR7cmVnaXN0ZXJSZXN1bHQuc3ViZG9tYWlufS5kZXZkb2Muc2ggcmVnaXN0ZXJlZCFgKVxuICAgICAgICBjb25zb2xlLmxvZygnJylcbiAgICAgICAgcmVnaXN0ZXJlZCA9IHRydWVcbiAgICAgICAgXG4gICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpXG4gICAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIHJlZ2lzdGVyIHN1YmRvbWFpbjogJHttZXNzYWdlfWApXG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBcbiAgLy8gQ29sbGVjdCBhbGwgY29udGVudCBmaWxlc1xuICBsb2dnZXIuaW5mbygnQnVuZGxpbmcgY29udGVudC4uLicpXG4gIGNvbnN0IGZpbGVzID0gYXdhaXQgY29sbGVjdEZpbGVzKHByb2plY3RSb290KVxuICBsb2dnZXIuc3VjY2Vzcyhg4pyTIEZvdW5kICR7ZmlsZXMubGVuZ3RofSBjb250ZW50IGZpbGVzYClcbiAgXG4gIC8vIENvbGxlY3QgdGhlbWUuanNvblxuICBjb25zdCB0aGVtZUpzb24gPSBjb2xsZWN0VGhlbWVKc29uKHByb2plY3RSb290KVxuICBpZiAodGhlbWVKc29uKSB7XG4gICAgbG9nZ2VyLnN1Y2Nlc3MoJ+KckyBGb3VuZCB0aGVtZS5qc29uJylcbiAgfVxuICBcbiAgLy8gQ29sbGVjdCBPcGVuQVBJIHNwZWNzIGJhc2VkIG9uIGRvY3MuanNvbiBuYXZpZ2F0aW9uXG4gIGNvbnN0IG9wZW5BcGlTcGVjcyA9IGF3YWl0IGNvbGxlY3RPcGVuQXBpU3BlY3MocHJvamVjdFJvb3QsIGNvbmZpZyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilcbiAgY29uc3Qgc3BlY0NvdW50ID0gT2JqZWN0LmtleXMob3BlbkFwaVNwZWNzKS5sZW5ndGhcbiAgaWYgKHNwZWNDb3VudCA+IDApIHtcbiAgICBsb2dnZXIuc3VjY2Vzcyhg4pyTIEZvdW5kICR7c3BlY0NvdW50fSBPcGVuQVBJIHNwZWMocylgKVxuICB9XG4gIFxuICAvLyBDb2xsZWN0IGJpbmFyeSBhc3NldHNcbiAgY29uc3QgYXNzZXRzID0gYXdhaXQgY29sbGVjdEFzc2V0cyhwcm9qZWN0Um9vdClcbiAgaWYgKGFzc2V0cy5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgdG90YWxBc3NldFNpemUgPSBhc3NldHMucmVkdWNlKChzdW0sIGEpID0+IHN1bSArIGEuc2l6ZSwgMClcbiAgICBsb2dnZXIuc3VjY2Vzcyhg4pyTIEZvdW5kICR7YXNzZXRzLmxlbmd0aH0gYXNzZXRzICgke2Zvcm1hdFNpemUodG90YWxBc3NldFNpemUpfSlgKVxuICB9XG4gIFxuICAvLyBDYWxjdWxhdGUgYnVuZGxlIHNpemVcbiAgY29uc3QgdG90YWxTaXplID0gZmlsZXMucmVkdWNlKChzdW0sIGYpID0+IHN1bSArIGYuY29udGVudC5sZW5ndGgsIDApXG4gIGNvbnN0IHNpemVLQiA9ICh0b3RhbFNpemUgLyAxMDI0KS50b0ZpeGVkKDEpXG4gIGxvZ2dlci5pbmZvKGBDb250ZW50IGJ1bmRsZTogJHtzaXplS0J9IEtCYClcbiAgXG4gIC8vIFVwbG9hZCBiaW5hcnkgYXNzZXRzIGZpcnN0ICh3aXRoIHByb2dyZXNzKVxuICBpZiAoYXNzZXRzLmxlbmd0aCA+IDAgJiYgZXhpc3RpbmdTbHVnICYmIGFwaUtleSkge1xuICAgIGNvbnNvbGUubG9nKCcnKVxuICAgIGxvZ2dlci5pbmZvKCdVcGxvYWRpbmcgYXNzZXRzLi4uJylcbiAgICBcbiAgICBjb25zdCBhc3NldFJlc3VsdHMgPSBhd2FpdCB1cGxvYWRBc3NldHMoYXNzZXRzLCBhcGlVcmwsIGV4aXN0aW5nU2x1ZywgYXBpS2V5KVxuICAgIGNvbnN0IHN1Y2Nlc3NDb3VudCA9IGFzc2V0UmVzdWx0cy5maWx0ZXIociA9PiByLnN1Y2Nlc3MpLmxlbmd0aFxuICAgIGNvbnN0IGZhaWxDb3VudCA9IGFzc2V0UmVzdWx0cy5maWx0ZXIociA9PiAhci5zdWNjZXNzKS5sZW5ndGhcbiAgICBcbiAgICBpZiAoZmFpbENvdW50ID4gMCkge1xuICAgICAgbG9nZ2VyLndhcm4oYCR7c3VjY2Vzc0NvdW50fSBhc3NldHMgdXBsb2FkZWQsICR7ZmFpbENvdW50fSBmYWlsZWRgKVxuICAgIH0gZWxzZSBpZiAoc3VjY2Vzc0NvdW50ID4gMCkge1xuICAgICAgbG9nZ2VyLnN1Y2Nlc3MoYOKckyAke3N1Y2Nlc3NDb3VudH0gYXNzZXRzIHVwbG9hZGVkYClcbiAgICB9XG4gIH0gZWxzZSBpZiAoYXNzZXRzLmxlbmd0aCA+IDAgJiYgIWV4aXN0aW5nU2x1Zykge1xuICAgIGxvZ2dlci5pbmZvKCdBc3NldHMgd2lsbCBiZSB1cGxvYWRlZCBvbiBuZXh0IGRlcGxveSAoYWZ0ZXIgcHJvamVjdCByZWdpc3RyYXRpb24pJylcbiAgfVxuICBcbiAgLy8gRGVwbG95IGNvbnRlbnQgdG8gQVBJXG4gIGNvbnNvbGUubG9nKCcnKVxuICBsb2dnZXIuaW5mbygnVXBsb2FkaW5nIGNvbnRlbnQuLi4nKVxuICBcbiAgdHJ5IHtcbiAgICBpbnRlcmZhY2UgRGVwbG95UmVzcG9uc2Uge1xuICAgICAgc3VjY2VzczogYm9vbGVhblxuICAgICAgc2x1Zzogc3RyaW5nXG4gICAgICB1cmw6IHN0cmluZ1xuICAgICAgYmxvYlVybDogc3RyaW5nXG4gICAgICBpc1VwZGF0ZTogYm9vbGVhblxuICAgICAgZmlsZXNDb3VudDogbnVtYmVyXG4gICAgICBhcGlLZXk/OiBzdHJpbmdcbiAgICAgIGVycm9yPzogc3RyaW5nXG4gICAgfVxuICAgIFxuICAgIGNvbnN0IGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgIH1cbiAgICBcbiAgICAvLyBBZGQgQVBJIGtleSBoZWFkZXIgZm9yIHVwZGF0ZXNcbiAgICBpZiAoYXBpS2V5KSB7XG4gICAgICBoZWFkZXJzWydBdXRob3JpemF0aW9uJ10gPSBgQmVhcmVyICR7YXBpS2V5fWBcbiAgICB9XG4gICAgXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHthcGlVcmx9L2FwaS9kZXBsb3lgLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGhlYWRlcnMsXG4gICAgICByZWRpcmVjdDogJ2ZvbGxvdycsIC8vIEZvbGxvdyByZWRpcmVjdHNcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgbmFtZTogY29uZmlnLm5hbWUgfHwgJ015IERvY3VtZW50YXRpb24nLFxuICAgICAgICBzbHVnOiBleGlzdGluZ1NsdWcsXG4gICAgICAgIGRvY3NKc29uOiBjb25maWcsXG4gICAgICAgIHRoZW1lSnNvbixcbiAgICAgICAgb3BlbkFwaVNwZWNzLFxuICAgICAgICBmaWxlcyxcbiAgICAgICAgYXBpS2V5LCAvLyBBbHNvIHNlbmQgaW4gYm9keSBhcyBmYWxsYmFja1xuICAgICAgfSksXG4gICAgfSlcbiAgICBcbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICBjb25zdCBlcnJvckRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCkuY2F0Y2goKCkgPT4gKHsgZXJyb3I6ICdVbmtub3duIGVycm9yJyB9KSkgYXMgeyBlcnJvcj86IHN0cmluZzsgZGV0YWlscz86IHN0cmluZyB9XG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnJvckRhdGEuZXJyb3IgfHwgYEhUVFAgJHtyZXNwb25zZS5zdGF0dXN9YFxuICAgICAgY29uc3QgZGV0YWlscyA9IGVycm9yRGF0YS5kZXRhaWxzID8gYFxcbiAgIERldGFpbHM6ICR7ZXJyb3JEYXRhLmRldGFpbHN9YCA6ICcnXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7ZXJyb3JNZXNzYWdlfSR7ZGV0YWlsc31gKVxuICAgIH1cbiAgICBcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgRGVwbG95UmVzcG9uc2VcbiAgICBcbiAgICAvLyBTYXZlIHByb2plY3QgY29uZmlnIGZvciBmdXR1cmUgdXBkYXRlc1xuICAgIGNvbnN0IG5ld0RldkRvY0NvbmZpZzogRGV2RG9jQ29uZmlnID0ge1xuICAgICAgc2x1ZzogcmVzdWx0LnNsdWcsXG4gICAgICB1cmw6IHJlc3VsdC51cmwsXG4gICAgICBsYXN0RGVwbG95ZWQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICB9XG4gICAgXG4gICAgLy8gU2F2ZSBBUEkga2V5IChmcm9tIHJlc3BvbnNlIGZvciBuZXcgcHJvamVjdHMsIG9yIGV4aXN0aW5nIGZvciB1cGRhdGVzKVxuICAgIGlmIChyZXN1bHQuYXBpS2V5KSB7XG4gICAgICBuZXdEZXZEb2NDb25maWcuYXBpS2V5ID0gcmVzdWx0LmFwaUtleVxuICAgIH0gZWxzZSBpZiAoYXBpS2V5KSB7XG4gICAgICBuZXdEZXZEb2NDb25maWcuYXBpS2V5ID0gYXBpS2V5XG4gICAgfVxuICAgIFxuICAgIGZzLndyaXRlSnNvblN5bmMoZGV2ZG9jQ29uZmlnUGF0aCwgbmV3RGV2RG9jQ29uZmlnLCB7IHNwYWNlczogMiB9KVxuICAgIFxuICAgIC8vIFN1Y2Nlc3MgbWVzc2FnZVxuICAgIGNvbnNvbGUubG9nKCcnKVxuICAgIGxvZ2dlci5zdWNjZXNzKCdEZXBsb3ltZW50IHN1Y2Nlc3NmdWwhJylcbiAgICBjb25zb2xlLmxvZygnJylcbiAgICBjb25zb2xlLmxvZyhgICBZb3VyIGRvY3MgYXJlIGxpdmUgYXQ6YClcbiAgICBjb25zb2xlLmxvZyhgICAke2xvZ2dlci5jeWFuKHJlc3VsdC51cmwpfWApXG4gICAgY29uc29sZS5sb2coJycpXG4gICAgXG4gICAgaWYgKHJlc3VsdC5pc1VwZGF0ZSkge1xuICAgICAgbG9nZ2VyLmluZm8oJ1Byb2plY3QgdXBkYXRlZCB3aXRoIG5ldyBjb250ZW50JylcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nZ2VyLmluZm8oYFByb2plY3Qgc2x1ZzogJHtyZXN1bHQuc2x1Z31gKVxuICAgICAgbG9nZ2VyLmluZm8oJ1J1biBcImRldmRvYyBkZXBsb3lcIiBhZ2FpbiB0byB1cGRhdGUnKVxuICAgICAgXG4gICAgICAvLyBTaG93IEFQSSBrZXkgd2FybmluZyBmb3IgbmV3IHByb2plY3RzXG4gICAgICBpZiAocmVzdWx0LmFwaUtleSkge1xuICAgICAgICBjb25zb2xlLmxvZygnJylcbiAgICAgICAgbG9nZ2VyLndhcm4oJ+KaoO+4jyAgU2F2ZSB5b3VyIEFQSSBrZXkgZm9yIENJL0NEIGRlcGxveW1lbnRzOicpXG4gICAgICAgIGNvbnNvbGUubG9nKGAgICAgJHtyZXN1bHQuYXBpS2V5fWApXG4gICAgICAgIGNvbnNvbGUubG9nKCcnKVxuICAgICAgICBsb2dnZXIuaW5mbygnQVBJIGtleSBzYXZlZCB0byAuZGV2ZG9jLmpzb24gKGFkZCB0byAuZ2l0aWdub3JlISknKVxuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICAvLyBDaGVjayBmb3IgZG9tYWluLmpzb24gYW5kIHNob3cgY3VzdG9tIGRvbWFpbiBzdGF0dXNcbiAgICBhd2FpdCBjaGVja0N1c3RvbURvbWFpblN0YXR1cyhwcm9qZWN0Um9vdCwgYXBpVXJsLCBhcGlLZXkgfHwgcmVzdWx0LmFwaUtleSB8fCAnJylcbiAgICBcbiAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICBjb25zdCBtZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpXG4gICAgbG9nZ2VyLmVycm9yKGBEZXBsb3ltZW50IGZhaWxlZDogJHttZXNzYWdlfWApXG4gICAgcHJvY2Vzcy5leGl0KDEpXG4gIH1cbn1cblxuLyoqXG4gKiBDb2xsZWN0IE9wZW5BUEkgc3BlY3MgYmFzZWQgb24gZG9jcy5qc29uIG5hdmlnYXRpb24gdGFic1xuICovXG5hc3luYyBmdW5jdGlvbiBjb2xsZWN0T3BlbkFwaVNwZWNzKFxuICBwcm9qZWN0Um9vdDogc3RyaW5nLFxuICBkb2NzSnNvbjogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbik6IFByb21pc2U8UmVjb3JkPHN0cmluZywgT3BlbkFwaVNwZWM+PiB7XG4gIGNvbnN0IHNwZWNzOiBSZWNvcmQ8c3RyaW5nLCBPcGVuQXBpU3BlYz4gPSB7fVxuICBcbiAgLy8gR2V0IG5hdmlnYXRpb24gZnJvbSBkb2NzLmpzb24gLSBjb3VsZCBiZSBvYmplY3Qgd2l0aCB0YWJzIG9yIGFycmF5XG4gIGNvbnN0IG5hdmlnYXRpb24gPSBkb2NzSnNvbi5uYXZpZ2F0aW9uIGFzIHsgdGFicz86IEFycmF5PFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB9IHwgQXJyYXk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHwgdW5kZWZpbmVkXG4gIGlmICghbmF2aWdhdGlvbikgcmV0dXJuIHNwZWNzXG4gIFxuICAvLyBIYW5kbGUgYm90aCB7IHRhYnM6IFsuLi5dIH0gYW5kIGRpcmVjdCBhcnJheSBmb3JtYXRzXG4gIGNvbnN0IHRhYnMgPSBBcnJheS5pc0FycmF5KG5hdmlnYXRpb24pID8gbmF2aWdhdGlvbiA6IChuYXZpZ2F0aW9uLnRhYnMgfHwgW10pXG4gIFxuICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGFicykge1xuICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgYW4gT3BlbkFQSSB0YWJcbiAgICBpZiAoaXRlbS50eXBlID09PSAnb3BlbmFwaScpIHtcbiAgICAgIC8vIFNwZWMgY2FuIGJlIGRpcmVjdGx5IG9uIHRhYiBvciBuZXN0ZWQgaW4gdmVyc2lvbnMgYXJyYXlcbiAgICAgIGNvbnN0IHZlcnNpb25zID0gaXRlbS52ZXJzaW9ucyBhcyBBcnJheTx7IHNwZWM6IHN0cmluZzsgdmVyc2lvbjogc3RyaW5nIH0+IHwgdW5kZWZpbmVkXG4gICAgICBcbiAgICAgIGlmICh2ZXJzaW9ucyAmJiBBcnJheS5pc0FycmF5KHZlcnNpb25zKSkge1xuICAgICAgICAvLyBIYW5kbGUgdmVyc2lvbmVkIHNwZWNzXG4gICAgICAgIGZvciAoY29uc3QgdmVyc2lvbiBvZiB2ZXJzaW9ucykge1xuICAgICAgICAgIGlmICh2ZXJzaW9uLnNwZWMpIHtcbiAgICAgICAgICAgIGF3YWl0IGxvYWRTcGVjKHByb2plY3RSb290LCB2ZXJzaW9uLnNwZWMsIHNwZWNzKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpdGVtLnNwZWMpIHtcbiAgICAgICAgLy8gSGFuZGxlIGRpcmVjdCBzcGVjIHJlZmVyZW5jZVxuICAgICAgICBhd2FpdCBsb2FkU3BlYyhwcm9qZWN0Um9vdCwgaXRlbS5zcGVjIGFzIHN0cmluZywgc3BlY3MpXG4gICAgICB9XG4gICAgfVxuICB9XG4gIFxuICByZXR1cm4gc3BlY3Ncbn1cblxuLyoqXG4gKiBMb2FkIGEgc2luZ2xlIE9wZW5BUEkgc3BlYyBpbnRvIHRoZSBzcGVjcyBtYXBcbiAqL1xuYXN5bmMgZnVuY3Rpb24gbG9hZFNwZWMoXG4gIHByb2plY3RSb290OiBzdHJpbmcsXG4gIHNwZWNQYXRoOiBzdHJpbmcsXG4gIHNwZWNzOiBSZWNvcmQ8c3RyaW5nLCBPcGVuQXBpU3BlYz5cbik6IFByb21pc2U8dm9pZD4ge1xuICAvLyBSZXNvbHZlIHRoZSBzcGVjIHBhdGggcmVsYXRpdmUgdG8gcHJvamVjdCByb290XG4gIGxldCBmdWxsU3BlY1BhdGggPSBwYXRoLmpvaW4ocHJvamVjdFJvb3QsIHNwZWNQYXRoKVxuICBcbiAgLy8gSGFuZGxlIHJlbGF0aXZlIHBhdGhzIGxpa2UgLi9mYWNlYm9vay9vcGVuYXBpLmpzb25cbiAgaWYgKHNwZWNQYXRoLnN0YXJ0c1dpdGgoJy4vJykpIHtcbiAgICBmdWxsU3BlY1BhdGggPSBwYXRoLmpvaW4ocHJvamVjdFJvb3QsIHNwZWNQYXRoLnNsaWNlKDIpKVxuICB9XG4gIFxuICBpZiAoZnMuZXhpc3RzU3luYyhmdWxsU3BlY1BhdGgpKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHNwZWNDb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKGZ1bGxTcGVjUGF0aCwgJ3V0Zi04JylcbiAgICAgIGNvbnN0IHNwZWNEYXRhID0gSlNPTi5wYXJzZShzcGVjQ29udGVudCkgYXMgT3BlbkFwaVNwZWNcbiAgICAgIHNwZWNzW3NwZWNQYXRoXSA9IHNwZWNEYXRhXG4gICAgICBsb2dnZXIuaW5mbyhgICDihpIgJHtzcGVjUGF0aH1gKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpXG4gICAgICBsb2dnZXIud2FybihgRmFpbGVkIHRvIHBhcnNlIE9wZW5BUEkgc3BlYyAke3NwZWNQYXRofTogJHttZXNzYWdlfWApXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGxvZ2dlci53YXJuKGBPcGVuQVBJIHNwZWMgZmlsZSBub3QgZm91bmQ6ICR7c3BlY1BhdGh9YClcbiAgfVxufVxuXG4vKipcbiAqIENvbGxlY3QgdGhlbWUuanNvbiBpZiBpdCBleGlzdHNcbiAqL1xuZnVuY3Rpb24gY29sbGVjdFRoZW1lSnNvbihwcm9qZWN0Um9vdDogc3RyaW5nKTogb2JqZWN0IHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgdGhlbWVQYXRoID0gcGF0aC5qb2luKHByb2plY3RSb290LCAndGhlbWUuanNvbicpXG4gIFxuICBpZiAoZnMuZXhpc3RzU3luYyh0aGVtZVBhdGgpKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHRoZW1lQ29udGVudCA9IGZzLnJlYWRGaWxlU3luYyh0aGVtZVBhdGgsICd1dGYtOCcpXG4gICAgICByZXR1cm4gSlNPTi5wYXJzZSh0aGVtZUNvbnRlbnQpIGFzIG9iamVjdFxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpXG4gICAgICBsb2dnZXIud2FybihgRmFpbGVkIHRvIHBhcnNlIHRoZW1lLmpzb246ICR7bWVzc2FnZX1gKVxuICAgIH1cbiAgfVxuICBcbiAgcmV0dXJuIHVuZGVmaW5lZFxufVxuXG4vKipcbiAqIENvbGxlY3QgYWxsIE1EWCBhbmQgY29udGVudCBmaWxlcyBmcm9tIHRoZSBwcm9qZWN0XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNvbGxlY3RGaWxlcyhwcm9qZWN0Um9vdDogc3RyaW5nKTogUHJvbWlzZTxQcm9qZWN0RmlsZVtdPiB7XG4gIGNvbnN0IGZpbGVzOiBQcm9qZWN0RmlsZVtdID0gW11cbiAgXG4gIC8vIFNjYW4gYWxsIGRpcmVjdG9yaWVzIGluIHByb2plY3Qgcm9vdCAobm90IGp1c3QgaGFyZGNvZGVkIGxpc3QpXG4gIGNvbnN0IGl0ZW1zID0gZnMucmVhZGRpclN5bmMocHJvamVjdFJvb3QpXG4gIFxuICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICAvLyBTa2lwIGNvbW1vbiBkaXJlY3RvcmllcyB0aGF0IHNob3VsZG4ndCBiZSBzY2FubmVkXG4gICAgaWYgKFtcbiAgICAgICdub2RlX21vZHVsZXMnLCBcbiAgICAgICdkaXN0JywgXG4gICAgICAnLm5leHQnLCBcbiAgICAgICcuZ2l0JywgXG4gICAgICAncHVibGljJyxcbiAgICAgICcuZGV2ZG9jJyxcbiAgICAgICcuY2xhdWRlJyxcbiAgICAgICcuY3Vyc29yJyxcbiAgICBdLmluY2x1ZGVzKGl0ZW0pKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBcbiAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGguam9pbihwcm9qZWN0Um9vdCwgaXRlbSlcbiAgICBjb25zdCBzdGF0ID0gZnMuc3RhdFN5bmMoZnVsbFBhdGgpXG4gICAgXG4gICAgaWYgKHN0YXQuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgLy8gU2tpcCBhc3NldHMgZm9sZGVyIGZvciBNRFggc2Nhbm5pbmcgKGhhbmRsZWQgc2VwYXJhdGVseSlcbiAgICAgIGlmIChpdGVtID09PSAnYXNzZXRzJykgY29udGludWVcbiAgICAgIGF3YWl0IHNjYW5EaXJlY3RvcnkoZnVsbFBhdGgsIHByb2plY3RSb290LCBmaWxlcylcbiAgICB9IGVsc2UgaWYgKGl0ZW0uZW5kc1dpdGgoJy5tZHgnKSB8fCBpdGVtLmVuZHNXaXRoKCcubWQnKSkge1xuICAgICAgLy8gSW5jbHVkZSByb290LWxldmVsIE1EWCBmaWxlc1xuICAgICAgY29uc3QgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhmdWxsUGF0aCwgJ3V0Zi04JylcbiAgICAgIGZpbGVzLnB1c2goeyBwYXRoOiBpdGVtLCBjb250ZW50IH0pXG4gICAgfSBlbHNlIGlmIChpdGVtID09PSAnZG9jcy5qc29uJyB8fCBpdGVtID09PSAndGhlbWUuanNvbicgfHwgaXRlbSA9PT0gJ2RvbWFpbi5qc29uJyB8fCBpdGVtID09PSAnY3VzdG9tLmNzcycpIHtcbiAgICAgIC8vIEluY2x1ZGUgY29uZmlnIGZpbGVzXG4gICAgICBjb25zdCBjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKGZ1bGxQYXRoLCAndXRmLTgnKVxuICAgICAgZmlsZXMucHVzaCh7IHBhdGg6IGl0ZW0sIGNvbnRlbnQgfSlcbiAgICB9XG4gIH1cbiAgXG4gIC8vIEluY2x1ZGUgdGV4dC1iYXNlZCBhc3NldHMgZnJvbSBhc3NldHMgZm9sZGVyIChTVkcsIEpTT04pXG4gIGNvbnN0IGFzc2V0c0RpciA9IHBhdGguam9pbihwcm9qZWN0Um9vdCwgJ2Fzc2V0cycpXG4gIGlmIChmcy5leGlzdHNTeW5jKGFzc2V0c0RpcikpIHtcbiAgICBhd2FpdCBzY2FuUHVibGljQXNzZXRzKGFzc2V0c0RpciwgcHJvamVjdFJvb3QsIGZpbGVzKVxuICB9XG4gIFxuICByZXR1cm4gZmlsZXNcbn1cblxuLyoqXG4gKiBSZWN1cnNpdmVseSBzY2FuIGEgZGlyZWN0b3J5IGZvciBNRFggZmlsZXNcbiAqL1xuYXN5bmMgZnVuY3Rpb24gc2NhbkRpcmVjdG9yeShcbiAgZGlyOiBzdHJpbmcsXG4gIHByb2plY3RSb290OiBzdHJpbmcsXG4gIGZpbGVzOiBQcm9qZWN0RmlsZVtdXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgaXRlbXMgPSBmcy5yZWFkZGlyU3luYyhkaXIpXG4gIFxuICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICAvLyBTa2lwIGNvbW1vbiBkaXJlY3Rvcmllc1xuICAgIGlmIChbJ25vZGVfbW9kdWxlcycsICdkaXN0JywgJy5uZXh0JywgJy5naXQnLCAncHVibGljJ10uaW5jbHVkZXMoaXRlbSkpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIFxuICAgIGNvbnN0IGZ1bGxQYXRoID0gcGF0aC5qb2luKGRpciwgaXRlbSlcbiAgICBjb25zdCBzdGF0ID0gZnMuc3RhdFN5bmMoZnVsbFBhdGgpXG4gICAgXG4gICAgaWYgKHN0YXQuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgYXdhaXQgc2NhbkRpcmVjdG9yeShmdWxsUGF0aCwgcHJvamVjdFJvb3QsIGZpbGVzKVxuICAgIH0gZWxzZSBpZiAoaXRlbS5lbmRzV2l0aCgnLm1keCcpIHx8IGl0ZW0uZW5kc1dpdGgoJy5tZCcpKSB7XG4gICAgICBjb25zdCByZWxhdGl2ZVBhdGggPSBwYXRoLnJlbGF0aXZlKHByb2plY3RSb290LCBmdWxsUGF0aClcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMoZnVsbFBhdGgsICd1dGYtOCcpXG4gICAgICBcbiAgICAgIGZpbGVzLnB1c2goe1xuICAgICAgICBwYXRoOiByZWxhdGl2ZVBhdGgsXG4gICAgICAgIGNvbnRlbnQsXG4gICAgICB9KVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFNjYW4gcHVibGljIGFzc2V0cyAoU1ZHLCBKU09OLCBDU1MpIC0gdGV4dC1iYXNlZCBvbmx5IGZvciBjb250ZW50IGJ1bmRsZVxuICovXG5hc3luYyBmdW5jdGlvbiBzY2FuUHVibGljQXNzZXRzKFxuICBkaXI6IHN0cmluZyxcbiAgcHJvamVjdFJvb3Q6IHN0cmluZyxcbiAgZmlsZXM6IFByb2plY3RGaWxlW11cbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBpdGVtcyA9IGZzLnJlYWRkaXJTeW5jKGRpcilcbiAgXG4gIC8vIFRleHQtYmFzZWQgZmlsZSBleHRlbnNpb25zIHRvIGluY2x1ZGUgaW4gY29udGVudCBidW5kbGVcbiAgLy8gTm90ZTogU1ZHIGlzIG5vdyB1cGxvYWRlZCBhcyBiaW5hcnkgYXNzZXQgZm9yIGJldHRlciBibG9iIHN0b3JhZ2Ugc2VydmluZ1xuICBjb25zdCBURVhUX0VYVEVOU0lPTlMgPSBbJy5qc29uJywgJy5jc3MnXVxuICBcbiAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgY29uc3QgZnVsbFBhdGggPSBwYXRoLmpvaW4oZGlyLCBpdGVtKVxuICAgIGNvbnN0IHN0YXQgPSBmcy5zdGF0U3luYyhmdWxsUGF0aClcbiAgICBcbiAgICBpZiAoc3RhdC5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICBhd2FpdCBzY2FuUHVibGljQXNzZXRzKGZ1bGxQYXRoLCBwcm9qZWN0Um9vdCwgZmlsZXMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGV4dCA9IHBhdGguZXh0bmFtZShpdGVtKS50b0xvd2VyQ2FzZSgpXG4gICAgICBpZiAoVEVYVF9FWFRFTlNJT05TLmluY2x1ZGVzKGV4dCkpIHtcbiAgICAgICAgLy8gT25seSBpbmNsdWRlIHRleHQtYmFzZWQgYXNzZXRzIGluIGNvbnRlbnQgYnVuZGxlXG4gICAgICAgIGNvbnN0IHJlbGF0aXZlUGF0aCA9IHBhdGgucmVsYXRpdmUocHJvamVjdFJvb3QsIGZ1bGxQYXRoKVxuICAgICAgICBjb25zdCBjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKGZ1bGxQYXRoLCAndXRmLTgnKVxuICAgICAgICBcbiAgICAgICAgZmlsZXMucHVzaCh7XG4gICAgICAgICAgcGF0aDogcmVsYXRpdmVQYXRoLFxuICAgICAgICAgIGNvbnRlbnQsXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQ29sbGVjdCBiaW5hcnkgYXNzZXRzIGZyb20gYXNzZXRzIGZvbGRlclxuICovXG5hc3luYyBmdW5jdGlvbiBjb2xsZWN0QXNzZXRzKHByb2plY3RSb290OiBzdHJpbmcpOiBQcm9taXNlPEFzc2V0RmlsZVtdPiB7XG4gIGNvbnN0IGFzc2V0czogQXNzZXRGaWxlW10gPSBbXVxuICBcbiAgLy8gQ2hlY2sgYXNzZXRzIGZvbGRlclxuICBjb25zdCBhc3NldHNEaXIgPSBwYXRoLmpvaW4ocHJvamVjdFJvb3QsICdhc3NldHMnKVxuICBpZiAoZnMuZXhpc3RzU3luYyhhc3NldHNEaXIpKSB7XG4gICAgYXdhaXQgc2NhbkJpbmFyeUFzc2V0cyhhc3NldHNEaXIsIHByb2plY3RSb290LCBhc3NldHMpXG4gIH1cbiAgXG4gIHJldHVybiBhc3NldHNcbn1cblxuLyoqXG4gKiBSZWN1cnNpdmVseSBzY2FuIGZvciBiaW5hcnkgYXNzZXRzXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHNjYW5CaW5hcnlBc3NldHMoXG4gIGRpcjogc3RyaW5nLFxuICBwcm9qZWN0Um9vdDogc3RyaW5nLFxuICBhc3NldHM6IEFzc2V0RmlsZVtdXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgaXRlbXMgPSBmcy5yZWFkZGlyU3luYyhkaXIpXG4gIFxuICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGguam9pbihkaXIsIGl0ZW0pXG4gICAgY29uc3Qgc3RhdCA9IGZzLnN0YXRTeW5jKGZ1bGxQYXRoKVxuICAgIFxuICAgIGlmIChzdGF0LmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgIGF3YWl0IHNjYW5CaW5hcnlBc3NldHMoZnVsbFBhdGgsIHByb2plY3RSb290LCBhc3NldHMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGV4dCA9IHBhdGguZXh0bmFtZShpdGVtKS50b0xvd2VyQ2FzZSgpXG4gICAgICBpZiAoQklOQVJZX0VYVEVOU0lPTlMuaW5jbHVkZXMoZXh0KSkge1xuICAgICAgICAvLyBDaGVjayBzaXplIGxpbWl0XG4gICAgICAgIGlmIChzdGF0LnNpemUgPiBNQVhfQVNTRVRfU0laRSkge1xuICAgICAgICAgIGxvZ2dlci53YXJuKGBTa2lwcGluZyAke2l0ZW19OiBleGNlZWRzIDI1TUIgbGltaXQgKCR7Zm9ybWF0U2l6ZShzdGF0LnNpemUpfSlgKVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGNvbnN0IHJlbGF0aXZlUGF0aCA9IHBhdGgucmVsYXRpdmUocHJvamVjdFJvb3QsIGZ1bGxQYXRoKVxuICAgICAgICBhc3NldHMucHVzaCh7XG4gICAgICAgICAgcGF0aDogcmVsYXRpdmVQYXRoLFxuICAgICAgICAgIGZ1bGxQYXRoLFxuICAgICAgICAgIHNpemU6IHN0YXQuc2l6ZSxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBVcGxvYWQgYXNzZXRzIHdpdGggcHJvZ3Jlc3MgdHJhY2tpbmdcbiAqL1xuYXN5bmMgZnVuY3Rpb24gdXBsb2FkQXNzZXRzKFxuICBhc3NldHM6IEFzc2V0RmlsZVtdLFxuICBhcGlVcmw6IHN0cmluZyxcbiAgc2x1Zzogc3RyaW5nLFxuICBhcGlLZXk6IHN0cmluZ1xuKTogUHJvbWlzZTxBcnJheTx7IGZpbGU6IHN0cmluZzsgc3VjY2VzczogYm9vbGVhbjsgdXJsPzogc3RyaW5nOyBlcnJvcj86IHN0cmluZyB9Pj4ge1xuICBjb25zdCByZXN1bHRzOiBBcnJheTx7IGZpbGU6IHN0cmluZzsgc3VjY2VzczogYm9vbGVhbjsgdXJsPzogc3RyaW5nOyBlcnJvcj86IHN0cmluZyB9PiA9IFtdXG4gIFxuICBmb3IgKGNvbnN0IGFzc2V0IG9mIGFzc2V0cykge1xuICAgIGNvbnN0IGZpbGVOYW1lID0gcGF0aC5iYXNlbmFtZShhc3NldC5wYXRoKVxuICAgIFxuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGAgICR7ZmlsZU5hbWV9OiBgKVxuICAgIFxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB1cGxvYWRBc3NldFdpdGhQcm9ncmVzcyhcbiAgICAgICAgYXNzZXQsXG4gICAgICAgIGFwaVVybCxcbiAgICAgICAgc2x1ZyxcbiAgICAgICAgYXBpS2V5LFxuICAgICAgICAocHJvZ3Jlc3MsIGxvYWRlZCwgdG90YWwpID0+IHtcbiAgICAgICAgICBpZiAocHJvY2Vzcy5zdGRvdXQuaXNUVFkpIHtcbiAgICAgICAgICAgIHByb2Nlc3Muc3Rkb3V0LmNsZWFyTGluZSgwKVxuICAgICAgICAgICAgcHJvY2Vzcy5zdGRvdXQuY3Vyc29yVG8oMClcbiAgICAgICAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGAgICR7ZmlsZU5hbWV9OiAke2NyZWF0ZVByb2dyZXNzQmFyKHByb2dyZXNzKX0gJHtmb3JtYXRTaXplKGxvYWRlZCl9LyR7Zm9ybWF0U2l6ZSh0b3RhbCl9YClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIClcbiAgICAgIFxuICAgICAgaWYgKHByb2Nlc3Muc3Rkb3V0LmlzVFRZKSB7XG4gICAgICAgIHByb2Nlc3Muc3Rkb3V0LmNsZWFyTGluZSgwKVxuICAgICAgICBwcm9jZXNzLnN0ZG91dC5jdXJzb3JUbygwKVxuICAgICAgfVxuICAgICAgY29uc29sZS5sb2coYCAgJHtsb2dnZXIuZ3JlZW4oJ+KckycpfSAke2ZpbGVOYW1lfSAoJHtmb3JtYXRTaXplKGFzc2V0LnNpemUpfSlgKVxuICAgICAgXG4gICAgICByZXN1bHRzLnB1c2goeyBmaWxlOiBmaWxlTmFtZSwgc3VjY2VzczogdHJ1ZSwgdXJsOiByZXN1bHQudXJsIH0pXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcilcbiAgICAgIFxuICAgICAgaWYgKHByb2Nlc3Muc3Rkb3V0LmlzVFRZKSB7XG4gICAgICAgIHByb2Nlc3Muc3Rkb3V0LmNsZWFyTGluZSgwKVxuICAgICAgICBwcm9jZXNzLnN0ZG91dC5jdXJzb3JUbygwKVxuICAgICAgfVxuICAgICAgY29uc29sZS5sb2coYCAgJHtsb2dnZXIucmVkKCfinJcnKX0gJHtmaWxlTmFtZX06ICR7bWVzc2FnZX1gKVxuICAgICAgXG4gICAgICByZXN1bHRzLnB1c2goeyBmaWxlOiBmaWxlTmFtZSwgc3VjY2VzczogZmFsc2UsIGVycm9yOiBtZXNzYWdlIH0pXG4gICAgfVxuICB9XG4gIFxuICByZXR1cm4gcmVzdWx0c1xufVxuXG4vKipcbiAqIFVwbG9hZCBhIHNpbmdsZSBhc3NldCB3aXRoIHByb2dyZXNzXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHVwbG9hZEFzc2V0V2l0aFByb2dyZXNzKFxuICBhc3NldDogQXNzZXRGaWxlLFxuICBhcGlVcmw6IHN0cmluZyxcbiAgc2x1Zzogc3RyaW5nLFxuICBhcGlLZXk6IHN0cmluZyxcbiAgb25Qcm9ncmVzczogKHByb2dyZXNzOiBudW1iZXIsIGxvYWRlZDogbnVtYmVyLCB0b3RhbDogbnVtYmVyKSA9PiB2b2lkXG4pOiBQcm9taXNlPHsgdXJsOiBzdHJpbmcgfT4ge1xuICBjb25zdCBmaWxlQnVmZmVyID0gZnMucmVhZEZpbGVTeW5jKGFzc2V0LmZ1bGxQYXRoKVxuICBjb25zdCBmaWxlTmFtZSA9IHBhdGguYmFzZW5hbWUoYXNzZXQucGF0aClcbiAgY29uc3QgbWltZVR5cGUgPSBnZXRNaW1lVHlwZShhc3NldC5mdWxsUGF0aClcbiAgXG4gIC8vIEJ1aWxkIG11bHRpcGFydCBmb3JtIGRhdGFcbiAgY29uc3QgYm91bmRhcnkgPSBgLS0tLURldkRvY0RlcGxveSR7RGF0ZS5ub3coKX1gXG4gIGNvbnN0IENSTEYgPSAnXFxyXFxuJ1xuICBcbiAgY29uc3QgaGVhZGVyID0gW1xuICAgIGAtLSR7Ym91bmRhcnl9YCxcbiAgICBgQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPVwiZmlsZVwiOyBmaWxlbmFtZT1cIiR7ZmlsZU5hbWV9XCJgLFxuICAgIGBDb250ZW50LVR5cGU6ICR7bWltZVR5cGV9YCxcbiAgICAnJyxcbiAgICAnJ1xuICBdLmpvaW4oQ1JMRilcbiAgXG4gIGNvbnN0IHNsdWdQYXJ0ID0gW1xuICAgICcnLFxuICAgIGAtLSR7Ym91bmRhcnl9YCxcbiAgICBgQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPVwic2x1Z1wiYCxcbiAgICAnJyxcbiAgICBzbHVnLFxuICAgICcnXG4gIF0uam9pbihDUkxGKVxuICBcbiAgY29uc3QgcGF0aFBhcnQgPSBbXG4gICAgYC0tJHtib3VuZGFyeX1gLFxuICAgIGBDb250ZW50LURpc3Bvc2l0aW9uOiBmb3JtLWRhdGE7IG5hbWU9XCJwYXRoXCJgLFxuICAgICcnLFxuICAgIGFzc2V0LnBhdGgucmVwbGFjZSgvXmFzc2V0c1xcLy8sICcnKSwgLy8gUmVtb3ZlIGFzc2V0cy8gcHJlZml4XG4gICAgJydcbiAgXS5qb2luKENSTEYpXG4gIFxuICBjb25zdCBmb290ZXIgPSBgJHtDUkxGfS0tJHtib3VuZGFyeX0tLSR7Q1JMRn1gXG4gIFxuICBjb25zdCBoZWFkZXJCdWZmZXIgPSBCdWZmZXIuZnJvbShoZWFkZXIpXG4gIGNvbnN0IHNsdWdCdWZmZXIgPSBCdWZmZXIuZnJvbShzbHVnUGFydClcbiAgY29uc3QgcGF0aEJ1ZmZlciA9IEJ1ZmZlci5mcm9tKHBhdGhQYXJ0KVxuICBjb25zdCBmb290ZXJCdWZmZXIgPSBCdWZmZXIuZnJvbShmb290ZXIpXG4gIFxuICBjb25zdCB0b3RhbFNpemUgPSBoZWFkZXJCdWZmZXIubGVuZ3RoICsgZmlsZUJ1ZmZlci5sZW5ndGggKyBzbHVnQnVmZmVyLmxlbmd0aCArIHBhdGhCdWZmZXIubGVuZ3RoICsgZm9vdGVyQnVmZmVyLmxlbmd0aFxuICBjb25zdCBib2R5ID0gQnVmZmVyLmNvbmNhdChbaGVhZGVyQnVmZmVyLCBmaWxlQnVmZmVyLCBzbHVnQnVmZmVyLCBwYXRoQnVmZmVyLCBmb290ZXJCdWZmZXJdKVxuICBcbiAgLy8gU2ltdWxhdGUgcHJvZ3Jlc3NcbiAgbGV0IHVwbG9hZGVkID0gMFxuICBjb25zdCBjaHVua1NpemUgPSBNYXRoLmNlaWwodG90YWxTaXplIC8gMjApXG4gIFxuICBjb25zdCBwcm9ncmVzc0ludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgIGlmICh1cGxvYWRlZCA8IHRvdGFsU2l6ZSAqIDAuOSkge1xuICAgICAgdXBsb2FkZWQgPSBNYXRoLm1pbih1cGxvYWRlZCArIGNodW5rU2l6ZSwgdG90YWxTaXplICogMC45KVxuICAgICAgb25Qcm9ncmVzcyh1cGxvYWRlZCAvIHRvdGFsU2l6ZSwgdXBsb2FkZWQsIHRvdGFsU2l6ZSlcbiAgICB9XG4gIH0sIDUwKVxuICBcbiAgdHJ5IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGAke2FwaVVybH0vYXBpL2Fzc2V0cy91cGxvYWRgLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6IGBtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0ke2JvdW5kYXJ5fWAsXG4gICAgICAgICdBdXRob3JpemF0aW9uJzogYEJlYXJlciAke2FwaUtleX1gLFxuICAgICAgfSxcbiAgICAgIGJvZHksXG4gICAgfSlcbiAgICBcbiAgICBjbGVhckludGVydmFsKHByb2dyZXNzSW50ZXJ2YWwpXG4gICAgb25Qcm9ncmVzcygxLCB0b3RhbFNpemUsIHRvdGFsU2l6ZSlcbiAgICBcbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICBjb25zdCBlcnJvciA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKS5jYXRjaCgoKSA9PiAoeyBlcnJvcjogJ1VwbG9hZCBmYWlsZWQnIH0pKSBhcyB7IGVycm9yPzogc3RyaW5nIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvci5lcnJvciB8fCBgSFRUUCAke3Jlc3BvbnNlLnN0YXR1c31gKVxuICAgIH1cbiAgICBcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgeyB1cmw6IHN0cmluZyB9XG4gICAgcmV0dXJuIHJlc3VsdFxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNsZWFySW50ZXJ2YWwocHJvZ3Jlc3NJbnRlcnZhbClcbiAgICB0aHJvdyBlcnJvclxuICB9XG59XG5cbi8qKlxuICogRm9ybWF0IGZpbGUgc2l6ZSBmb3IgZGlzcGxheVxuICovXG5mdW5jdGlvbiBmb3JtYXRTaXplKGJ5dGVzOiBudW1iZXIpOiBzdHJpbmcge1xuICBpZiAoYnl0ZXMgPCAxMDI0KSByZXR1cm4gYCR7Ynl0ZXN9IEJgXG4gIGlmIChieXRlcyA8IDEwMjQgKiAxMDI0KSByZXR1cm4gYCR7KGJ5dGVzIC8gMTAyNCkudG9GaXhlZCgxKX0gS0JgXG4gIHJldHVybiBgJHsoYnl0ZXMgLyAoMTAyNCAqIDEwMjQpKS50b0ZpeGVkKDIpfSBNQmBcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBwcm9ncmVzcyBiYXIgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVByb2dyZXNzQmFyKHByb2dyZXNzOiBudW1iZXIsIHdpZHRoOiBudW1iZXIgPSAzMCk6IHN0cmluZyB7XG4gIGNvbnN0IGZpbGxlZCA9IE1hdGgucm91bmQod2lkdGggKiBwcm9ncmVzcylcbiAgY29uc3QgZW1wdHkgPSB3aWR0aCAtIGZpbGxlZFxuICBjb25zdCBiYXIgPSAn4paIJy5yZXBlYXQoZmlsbGVkKSArICfilpEnLnJlcGVhdChlbXB0eSlcbiAgY29uc3QgcGVyY2VudGFnZSA9IE1hdGgucm91bmQocHJvZ3Jlc3MgKiAxMDApXG4gIHJldHVybiBgWyR7YmFyfV0gJHtwZXJjZW50YWdlfSVgXG59XG4iXX0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@brainfish-ai/devdoc",
3
- "version": "0.1.47",
3
+ "version": "0.1.48",
4
4
  "description": "Documentation framework for developers. Write docs in MDX, preview locally, deploy to Brainfish.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -1,5 +1,5 @@
1
1
  import { NextResponse } from 'next/server';
2
- import { head } from '@vercel/blob';
2
+ import { list } from '@vercel/blob';
3
3
  import path from 'path';
4
4
  import fs from 'fs';
5
5
  // Check if we're in local development mode
@@ -57,9 +57,13 @@ const LOCAL_STORAGE_DIR = path.join(process.cwd(), '.devdoc-storage');
57
57
  }
58
58
  });
59
59
  }
60
- // Production - fetch from Vercel Blob
61
- const blobInfo = await head(blobPath).catch(()=>null);
62
- if (!blobInfo) {
60
+ // Production - fetch from Vercel Blob using list()
61
+ // We use list with prefix to find the blob since head() requires the full URL
62
+ const { blobs } = await list({
63
+ prefix: blobPath,
64
+ limit: 1
65
+ });
66
+ if (!blobs || blobs.length === 0) {
63
67
  return NextResponse.json({
64
68
  error: 'Asset not found'
65
69
  }, {
@@ -67,7 +71,7 @@ const LOCAL_STORAGE_DIR = path.join(process.cwd(), '.devdoc-storage');
67
71
  });
68
72
  }
69
73
  // Redirect to the blob URL (more efficient than proxying)
70
- return NextResponse.redirect(blobInfo.url, {
74
+ return NextResponse.redirect(blobs[0].url, {
71
75
  status: 302,
72
76
  headers: {
73
77
  'Cache-Control': 'public, max-age=31536000, immutable'
@@ -13,6 +13,7 @@ import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip
13
13
  import { useModeContext, useNotes, useWorkspace } from '@/lib/api-docs/code-editor';
14
14
  import { useCurrentRequestPayload, useSendTrigger } from '@/lib/api-docs/playground/context';
15
15
  import { useSuggestions } from '@/lib/api-docs/agent/use-suggestions';
16
+ import { useMobile } from '@/lib/api-docs/mobile-context';
16
17
  /**
17
18
  * Custom transport that intercepts streaming events for write_file tool
18
19
  * Wraps DefaultChatTransport and intercepts the stream to extract write_file content
@@ -161,6 +162,8 @@ export function AgentChat({ collection, currentEndpoint, onNavigate, onPrefill,
161
162
  const { currentRequestPayload } = useCurrentRequestPayload();
162
163
  // Send trigger - to invoke playground's send button
163
164
  const { requestSend } = useSendTrigger();
165
+ // Initial prompt from suggestion click
166
+ const { initialPrompt, clearInitialPrompt } = useMobile();
164
167
  // Handler to open a file from chat (when user clicks on file name in tool display)
165
168
  const handleOpenFile = useCallback((path)=>{
166
169
  switchToNotes(path); // Pass path directly to avoid URL reset
@@ -1510,6 +1513,17 @@ export function AgentChat({ collection, currentEndpoint, onNavigate, onPrefill,
1510
1513
  }, [
1511
1514
  sendMessage
1512
1515
  ]);
1516
+ // Handle initial prompt from popup suggestion click
1517
+ useEffect(()=>{
1518
+ if (initialPrompt) {
1519
+ handleSuggestionClick(initialPrompt);
1520
+ clearInitialPrompt();
1521
+ }
1522
+ }, [
1523
+ initialPrompt,
1524
+ handleSuggestionClick,
1525
+ clearInitialPrompt
1526
+ ]);
1513
1527
  // Handle delete single message
1514
1528
  const handleDeleteMessage = useCallback((messageId)=>{
1515
1529
  setMessages((prevMessages)=>{
@@ -1442,7 +1442,8 @@ function DocsWithMode({ collection, selectedRequest, selectedDocSection, selecte
1442
1442
  onClose: ()=>setShowAuthModal(false)
1443
1443
  }),
1444
1444
  !isRightSidebarOpen && /*#__PURE__*/ _jsx(AgentPopupButton, {
1445
- onClick: openRightSidebar,
1445
+ onClick: ()=>openRightSidebar(),
1446
+ onQuestionClick: (prompt)=>openRightSidebar(prompt),
1446
1447
  currentEndpoint: selectedRequest ? {
1447
1448
  id: selectedRequest.id,
1448
1449
  name: selectedRequest.name
@@ -15,6 +15,7 @@ export function MobileProvider({ children }) {
15
15
  const [isRightSidebarOpen, setIsRightSidebarOpen] = useState(false);
16
16
  const [isMobile, setIsMobile] = useState(false);
17
17
  const [isHydrated, setIsHydrated] = useState(false);
18
+ const [initialPrompt, setInitialPrompt] = useState(null);
18
19
  // Initialize from localStorage after hydration (only on desktop)
19
20
  useEffect(()=>{
20
21
  const isMobileView = window.innerWidth < 1024;
@@ -68,7 +69,10 @@ export function MobileProvider({ children }) {
68
69
  const closeLeftSidebar = useCallback(()=>{
69
70
  setIsLeftSidebarOpen(false);
70
71
  }, []);
71
- const openRightSidebar = useCallback(()=>{
72
+ const openRightSidebar = useCallback((prompt)=>{
73
+ if (prompt) {
74
+ setInitialPrompt(prompt);
75
+ }
72
76
  setIsRightSidebarOpen(true);
73
77
  setIsLeftSidebarOpen(false);
74
78
  // Persist to localStorage (only on desktop)
@@ -76,6 +80,9 @@ export function MobileProvider({ children }) {
76
80
  localStorage.setItem(AGENT_ASSIST_STORAGE_KEY, 'true');
77
81
  }
78
82
  }, []);
83
+ const clearInitialPrompt = useCallback(()=>{
84
+ setInitialPrompt(null);
85
+ }, []);
79
86
  const closeRightSidebar = useCallback(()=>{
80
87
  setIsRightSidebarOpen(false);
81
88
  // Persist to localStorage (only on desktop)
@@ -101,6 +108,8 @@ export function MobileProvider({ children }) {
101
108
  closeLeftSidebar,
102
109
  openRightSidebar,
103
110
  closeRightSidebar,
111
+ initialPrompt,
112
+ clearInitialPrompt,
104
113
  closeAllSidebars,
105
114
  isMobile
106
115
  },