@rljson/io 0.0.40 → 0.0.41

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.
@@ -79,7 +79,6 @@ export const runIoConformanceTests = () => {
79
79
 
80
80
  describe('isOpen()', () => {
81
81
  it('should return false before init, true after and false after close', async () => {
82
- await io.init();
83
82
  expect(io.isOpen).toBe(true);
84
83
 
85
84
  await io.close();
package/dist/io.js CHANGED
@@ -605,4 +605,4 @@ export {
605
605
  exampleIo,
606
606
  exampleTestSetup
607
607
  };
608
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW8uanMiLCJzb3VyY2VzIjpbIi4uL3NyYy9pby10b29scy50cyIsIi4uL3NyYy9pby1tZW0udHMiLCIuLi9zcmMvaW8tdGVzdC1zZXR1cC50cyIsIi4uL3NyYy9pby50cyIsIi4uL3NyYy9yZXZlcnNlLXJlZi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAbGljZW5zZVxyXG4vLyBDb3B5cmlnaHQgKGMpIDIwMjUgUmxqc29uXHJcbi8vXHJcbi8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRlcm1zIHRoYXQgY2FuIGJlXHJcbi8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhpcyBwYWNrYWdlLlxyXG5cclxuaW1wb3J0IHsgaGlwIH0gZnJvbSAnQHJsanNvbi9oYXNoJztcclxuaW1wb3J0IHtcclxuICBpdGVyYXRlVGFibGVzLFxyXG4gIFJsanNvbixcclxuICBUYWJsZUNmZyxcclxuICBUYWJsZUtleSxcclxuICBUYWJsZVR5cGUsXHJcbiAgdGhyb3dPbkludmFsaWRUYWJsZUNmZyxcclxuICB2YWxpZGF0ZVJsanNvbkFnYWluc3RUYWJsZUNmZyxcclxufSBmcm9tICdAcmxqc29uL3JsanNvbic7XHJcblxyXG5pbXBvcnQgeyBJb01lbSB9IGZyb20gJy4vaW8tbWVtLnRzJztcclxuaW1wb3J0IHsgSW8gfSBmcm9tICcuL2lvLnRzJztcclxuXHJcbi8qKlxyXG4gKiBQcm92aWRlcyB1dGlsaXR5IGZ1bmN0aW9ucyBmb3IgdGhlIElvIGludGVyZmFjZS5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBJb1Rvb2xzIHtcclxuICAvKipcclxuICAgKiBDb25zdHJ1Y3RvclxyXG4gICAqIEBwYXJhbSBpbyBUaGUgSW8gaW50ZXJmYWNlIHRvIHVzZVxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBpbzogSW8pIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIHRhYmxlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHRhYmxlQ2ZncyB0YWJsZS5cclxuICAgKi9cclxuICBzdGF0aWMgZ2V0IHRhYmxlQ2Znc1RhYmxlQ2ZnKCkge1xyXG4gICAgY29uc3QgdGFibGVDZmcgPSBoaXA8VGFibGVDZmc+KHtcclxuICAgICAgX2hhc2g6ICcnLFxyXG4gICAgICBrZXk6ICd0YWJsZUNmZ3MnLFxyXG4gICAgICB0eXBlOiAnaW5ncmVkaWVudHMnLFxyXG4gICAgICBpc0hlYWQ6IGZhbHNlLFxyXG4gICAgICBpc1Jvb3Q6IGZhbHNlLFxyXG4gICAgICBpc1NoYXJlZDogdHJ1ZSxcclxuICAgICAgcHJldmlvdXM6ICcnLFxyXG5cclxuICAgICAgY29sdW1uczogW1xyXG4gICAgICAgIHsga2V5OiAnX2hhc2gnLCB0eXBlOiAnc3RyaW5nJyB9LFxyXG4gICAgICAgIHsga2V5OiAna2V5JywgdHlwZTogJ3N0cmluZycgfSxcclxuICAgICAgICB7IGtleTogJ3R5cGUnLCB0eXBlOiAnc3RyaW5nJyB9LFxyXG4gICAgICAgIHsga2V5OiAnaXNIZWFkJywgdHlwZTogJ2Jvb2xlYW4nIH0sXHJcbiAgICAgICAgeyBrZXk6ICdpc1Jvb3QnLCB0eXBlOiAnYm9vbGVhbicgfSxcclxuICAgICAgICB7IGtleTogJ2lzU2hhcmVkJywgdHlwZTogJ2Jvb2xlYW4nIH0sXHJcbiAgICAgICAgeyBrZXk6ICdwcmV2aW91cycsIHR5cGU6ICdzdHJpbmcnIH0sXHJcbiAgICAgICAgeyBrZXk6ICdjb2x1bW5zJywgdHlwZTogJ2pzb25BcnJheScgfSxcclxuICAgICAgXSxcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiB0YWJsZUNmZztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEluaXRpYWxpemVzIHRoZSByZXZpc2lvbnMgdGFibGUuXHJcbiAgICovXHJcbiAgaW5pdFJldmlzaW9uc1RhYmxlID0gYXN5bmMgKCkgPT4ge1xyXG4gICAgY29uc3QgdGFibGVDZmc6IFRhYmxlQ2ZnID0ge1xyXG4gICAgICBrZXk6ICdyZXZpc2lvbnMnLFxyXG4gICAgICB0eXBlOiAnaW5ncmVkaWVudHMnLFxyXG4gICAgICBpc0hlYWQ6IHRydWUsXHJcbiAgICAgIGlzUm9vdDogdHJ1ZSxcclxuICAgICAgaXNTaGFyZWQ6IGZhbHNlLFxyXG5cclxuICAgICAgY29sdW1uczogW1xyXG4gICAgICAgIHsga2V5OiAnX2hhc2gnLCB0eXBlOiAnc3RyaW5nJyB9LFxyXG4gICAgICAgIHsga2V5OiAndGFibGUnLCB0eXBlOiAnc3RyaW5nJyB9LFxyXG4gICAgICAgIHsga2V5OiAncHJlZGVjZXNzb3InLCB0eXBlOiAnc3RyaW5nJyB9LFxyXG4gICAgICAgIHsga2V5OiAnc3VjY2Vzc29yJywgdHlwZTogJ3N0cmluZycgfSxcclxuICAgICAgICB7IGtleTogJ3RpbWVzdGFtcCcsIHR5cGU6ICdudW1iZXInIH0sXHJcbiAgICAgICAgeyBrZXk6ICdpZCcsIHR5cGU6ICdzdHJpbmcnIH0sXHJcbiAgICAgIF0sXHJcbiAgICB9O1xyXG5cclxuICAgIGF3YWl0IHRoaXMuaW8uY3JlYXRlT3JFeHRlbmRUYWJsZSh7IHRhYmxlQ2ZnIH0pO1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIEV4YW1wbGUgb2JqZWN0IGZvciB0ZXN0IHB1cnBvc2VzXHJcbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgaW8gdG9vbHNcclxuICAgKi9cclxuICBzdGF0aWMgZXhhbXBsZSA9IGFzeW5jICgpID0+IHtcclxuICAgIGNvbnN0IGlvID0gYXdhaXQgSW9NZW0uZXhhbXBsZSgpO1xyXG4gICAgYXdhaXQgaW8uaW5pdCgpO1xyXG4gICAgYXdhaXQgaW8uaXNSZWFkeSgpO1xyXG4gICAgcmV0dXJuIG5ldyBJb1Rvb2xzKGlvKTtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBUaHJvd3MgaWYgdGhlIHRhYmxlIGRvZXMgbm90IGV4aXN0XHJcbiAgICovXHJcbiAgYXN5bmMgdGhyb3dXaGVuVGFibGVEb2VzTm90RXhpc3QodGFibGU6IFRhYmxlS2V5KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCBleGlzdHMgPSBhd2FpdCB0aGlzLmlvLnRhYmxlRXhpc3RzKHRhYmxlKTtcclxuICAgIGlmICghZXhpc3RzKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGFibGUgXCIke3RhYmxlfVwiIG5vdCBmb3VuZGApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVGhyb3dzIGlmIGFueSBvZiB0aGUgdGFibGVzIGluIHJsanNvbiBkbyBub3QgZXhpc3RcclxuICAgKiBAcGFyYW0gcmxqc29uIC0gVGhlIFJsanNvbiBvYmplY3QgdG8gY2hlY2tcclxuICAgKi9cclxuICBhc3luYyB0aHJvd1doZW5UYWJsZXNEb05vdEV4aXN0KHJsanNvbjogUmxqc29uKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0cnkge1xyXG4gICAgICBhd2FpdCBpdGVyYXRlVGFibGVzKHJsanNvbiwgYXN5bmMgKHRhYmxlS2V5KSA9PiB7XHJcbiAgICAgICAgY29uc3QgZXhpc3RzID0gYXdhaXQgdGhpcy5pby50YWJsZUV4aXN0cyh0YWJsZUtleSk7XHJcbiAgICAgICAgaWYgKCFleGlzdHMpIHtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVGFibGUgXCIke3RhYmxlS2V5fVwiIG5vdCBmb3VuZGApO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIGNvbnN0IG1pc3NpbmdUYWJsZXMgPSAoZSBhcyBBcnJheTxhbnk+KS5tYXAoKGUpID0+IGUudGFibGVLZXkpO1xyXG5cclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBUaGUgZm9sbG93aW5nIHRhYmxlcyBkbyBub3QgZXhpc3Q6ICR7bWlzc2luZ1RhYmxlcy5qb2luKCcsICcpfWAsXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHRhYmxlIGNmZ3Mgb2YgYWxsIHRhYmxlc1xyXG4gICAqIEByZXR1cm5zIFRoZSB0YWJsZSBjb25maWd1cmF0aW9uIG9mIGFsbCB0YWJsZXNcclxuICAgKi9cclxuICBhc3luYyB0YWJsZUNmZ3MoKTogUHJvbWlzZTxUYWJsZUNmZ1tdPiB7XHJcbiAgICBjb25zdCB0YWJsZXMgPSBhd2FpdCB0aGlzLmlvLnJhd1RhYmxlQ2ZncygpO1xyXG5cclxuICAgIC8vIFRha2UgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIGVhY2ggdHlwZSBrZXlcclxuICAgIGNvbnN0IG5ld2VzdFZlcnNpb246IFJlY29yZDxUYWJsZUtleSwgVGFibGVDZmc+ID0ge307XHJcbiAgICBmb3IgKGxldCBpID0gdGFibGVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgIGNvbnN0IHRhYmxlID0gdGFibGVzW2ldO1xyXG4gICAgICBjb25zdCBleGlzdGluZyA9IG5ld2VzdFZlcnNpb25bdGFibGUua2V5XTtcclxuICAgICAgLyogdjggaWdub3JlIHN0YXJ0ICovXHJcbiAgICAgIGlmICghZXhpc3RpbmcgfHwgZXhpc3RpbmcuY29sdW1ucy5sZW5ndGggPCB0YWJsZS5jb2x1bW5zLmxlbmd0aCkge1xyXG4gICAgICAgIG5ld2VzdFZlcnNpb25bdGFibGUua2V5XSA9IHRhYmxlO1xyXG4gICAgICB9XHJcbiAgICAgIC8qIHY4IGlnbm9yZSBlbmQgKi9cclxuICAgIH1cclxuXHJcbiAgICAvLyBTb3J0IHRoZSB0YWJsZXMgYnkga2V5XHJcbiAgICBjb25zdCByZXN1bHREYXRhID0gT2JqZWN0LnZhbHVlcyhuZXdlc3RWZXJzaW9uKS5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgIGlmIChhLmtleSA8IGIua2V5KSB7XHJcbiAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChhLmtleSA+IGIua2V5KSB7XHJcbiAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgLyogdjggaWdub3JlIHN0YXJ0ICovXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiAwO1xyXG4gICAgICAvKiB2OCBpZ25vcmUgZW5kICovXHJcbiAgICB9KTtcclxuICAgIHJldHVybiByZXN1bHREYXRhO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyBhIGxpc3Qgd2l0aCBhbGwgdGFibGUgbmFtZXNcclxuICAgKi9cclxuICBhc3luYyBhbGxUYWJsZUtleXMoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xyXG4gICAgY29uc3QgcmVzdWx0ID0gKGF3YWl0IHRoaXMudGFibGVDZmdzKCkpLm1hcCgoZSkgPT4gZS5rZXkpO1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIGNvbmZpZ3VyYXRpb24gb2YgYSBnaXZlbiB0YWJsZVxyXG4gICAqL1xyXG4gIGFzeW5jIHRhYmxlQ2ZnKHRhYmxlOiBUYWJsZUtleSk6IFByb21pc2U8VGFibGVDZmc+IHtcclxuICAgIGNvbnN0IHRhYmxlQ2ZnID0gYXdhaXQgdGhpcy50YWJsZUNmZ09yTnVsbCh0YWJsZSk7XHJcbiAgICBpZiAoIXRhYmxlQ2ZnKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGFibGUgXCIke3RhYmxlfVwiIG5vdCBmb3VuZGApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0YWJsZUNmZyE7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBjb25maWd1cmF0aW9uIG9mIGEgZ2l2ZW4gdGFibGUgb3IgbnVsbCBpZiBpdCBkb2VzIG5vdCBleGlzdC5cclxuXHJcbiAgICovXHJcbiAgYXN5bmMgdGFibGVDZmdPck51bGwodGFibGU6IFRhYmxlS2V5KTogUHJvbWlzZTxUYWJsZUNmZyB8IG51bGw+IHtcclxuICAgIGNvbnN0IHRhYmxlQ2ZncyA9IGF3YWl0IHRoaXMudGFibGVDZmdzKCk7XHJcbiAgICBjb25zdCB0YWJsZUNmZyA9IHRhYmxlQ2Zncy5maW5kKChlKSA9PiBlLmtleSA9PT0gdGFibGUpO1xyXG4gICAgcmV0dXJuIHRhYmxlQ2ZnID8/IG51bGw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBhbGwgY29sdW1uIG5hbWVzIG9mIGEgZ2l2ZW4gdGFibGVcclxuICAgKi9cclxuICBhc3luYyBhbGxDb2x1bW5LZXlzKHRhYmxlOiBUYWJsZUtleSk6IFByb21pc2U8c3RyaW5nW10+IHtcclxuICAgIGNvbnN0IHRhYmxlQ2ZnID0gYXdhaXQgdGhpcy50YWJsZUNmZyh0YWJsZSk7XHJcbiAgICBjb25zdCByZXN1bHQgPSB0YWJsZUNmZy5jb2x1bW5zLm1hcCgoY29sdW1uKSA9PiBjb2x1bW4ua2V5KTtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUaHJvd3Mgd2hlbiBhIGNvbHVtbiBkb2VzIG5vdCBleGlzdCBpbiBhIGdpdmVuIHRhYmxlXHJcbiAgICogQHBhcmFtIHRhYmxlIC0gVGhlIHRhYmxlIHRvIGNoZWNrXHJcbiAgICogQHBhcmFtIGNvbHVtbnMgLSBUaGUgY29sdW1uIHRvIGNoZWNrXHJcbiAgICovXHJcbiAgYXN5bmMgdGhyb3dXaGVuQ29sdW1uRG9lc05vdEV4aXN0KFxyXG4gICAgdGFibGU6IFRhYmxlS2V5LFxyXG4gICAgY29sdW1uczogc3RyaW5nW10sXHJcbiAgKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCB0YWJsZUNmZyA9IGF3YWl0IHRoaXMudGFibGVDZmcodGFibGUpO1xyXG4gICAgY29uc3QgY29sdW1uS2V5cyA9IHRhYmxlQ2ZnLmNvbHVtbnMubWFwKChjb2x1bW4pID0+IGNvbHVtbi5rZXkpO1xyXG4gICAgY29uc3QgbWlzc2luZ0NvbHVtbnMgPSBjb2x1bW5zLmZpbHRlcihcclxuICAgICAgKGNvbHVtbikgPT4gIWNvbHVtbktleXMuaW5jbHVkZXMoY29sdW1uKSxcclxuICAgICk7XHJcbiAgICBpZiAobWlzc2luZ0NvbHVtbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYFRoZSBmb2xsb3dpbmcgY29sdW1ucyBkbyBub3QgZXhpc3QgaW4gdGFibGUgXCIke3RhYmxlfVwiOiAke21pc3NpbmdDb2x1bW5zLmpvaW4oXHJcbiAgICAgICAgICAnLCAnLFxyXG4gICAgICAgICl9LmAsXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUaHJvd3Mgd2hlbiBhIHRhYmxlIHVwZGF0ZSBpcyBub3QgY29tcGF0aWJsZSB3aXRoIHRoZSBjdXJyZW50IHRhYmxlXHJcbiAgICogY29uZmlndXJhdGlvbi5cclxuICAgKi9cclxuICBhc3luYyB0aHJvd1doZW5UYWJsZUlzTm90Q29tcGF0aWJsZSh1cGRhdGU6IFRhYmxlQ2ZnKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCBwcmVmaXggPSBgSW52YWxpZCB1cGRhdGUgb2YgdGFibGUgYWJsZSBcIiR7dXBkYXRlLmtleX1cImA7XHJcblxyXG4gICAgdGhyb3dPbkludmFsaWRUYWJsZUNmZyh1cGRhdGUpO1xyXG5cclxuICAgIC8vIENoZWNrIGNvbXBhdGliaWxpdHkgd2l0aCBleGlzdGluZyB0YWJsZVxyXG4gICAgY29uc3QgZXhpc3RpbmcgPSBhd2FpdCB0aGlzLnRhYmxlQ2ZnT3JOdWxsKHVwZGF0ZS5rZXkpO1xyXG4gICAgaWYgKGV4aXN0aW5nKSB7XHJcbiAgICAgIC8vIEhhdmUgY29sdW1ucyBiZWVuIGRlbGV0ZWQ/XHJcbiAgICAgIGlmIChleGlzdGluZy5jb2x1bW5zLmxlbmd0aCA+IHVwZGF0ZS5jb2x1bW5zLmxlbmd0aCkge1xyXG4gICAgICAgIGNvbnN0IGRlbGV0ZWRDb2x1bW5LZXlzID0gZXhpc3RpbmcuY29sdW1uc1xyXG4gICAgICAgICAgLm1hcCgoY29sdW1uKSA9PiBjb2x1bW4ua2V5KVxyXG4gICAgICAgICAgLmZpbHRlcihcclxuICAgICAgICAgICAgKGtleSkgPT4gIXVwZGF0ZS5jb2x1bW5zLnNvbWUoKGNvbHVtbikgPT4gY29sdW1uLmtleSA9PT0ga2V5KSxcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgaWYgKGRlbGV0ZWRDb2x1bW5LZXlzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGNvbnN0IGRlbGV0ZWRDb2x1bW5zID0gZGVsZXRlZENvbHVtbktleXMuam9pbignLCAnKTtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgICAgYCR7cHJlZml4fTogQ29sdW1ucyBtdXN0IG5vdCBiZSBkZWxldGVkLiBgICtcclxuICAgICAgICAgICAgICBgRGVsZXRlZCBjb2x1bW5zOiAke2RlbGV0ZWRDb2x1bW5zfX1gLFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIEhhdmUgY29sdW1uIGtleXMgY2hhbmdlZD9cclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBleGlzdGluZy5jb2x1bW5zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgYmVmb3JlID0gZXhpc3RpbmcuY29sdW1uc1tpXS5rZXk7XHJcbiAgICAgICAgY29uc3QgYWZ0ZXIgPSB1cGRhdGUuY29sdW1uc1tpXS5rZXk7XHJcbiAgICAgICAgaWYgKGJlZm9yZSAhPT0gYWZ0ZXIpIHtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgICAgYCR7cHJlZml4fTogYCArXHJcbiAgICAgICAgICAgICAgYENvbHVtbiBrZXlzIG11c3Qgbm90IGNoYW5nZSEgYCArXHJcbiAgICAgICAgICAgICAgYENvbHVtbiBcIiR7YmVmb3JlfVwiIHdhcyByZW5hbWVkIGludG8gXCIke2FmdGVyfVwiLmAsXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gSGF2ZSBjb2x1bW4gdHlwZXMgY2hhbmdlZD9cclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBleGlzdGluZy5jb2x1bW5zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgY29sdW1uID0gZXhpc3RpbmcuY29sdW1uc1tpXS5rZXk7XHJcbiAgICAgICAgY29uc3QgYmVmb3JlID0gZXhpc3RpbmcuY29sdW1uc1tpXS50eXBlO1xyXG4gICAgICAgIGNvbnN0IGFmdGVyID0gdXBkYXRlLmNvbHVtbnNbaV0udHlwZTtcclxuICAgICAgICBpZiAoYmVmb3JlICE9PSBhZnRlcikge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgICBgJHtwcmVmaXh9OiBgICtcclxuICAgICAgICAgICAgICBgQ29sdW1uIHR5cGVzIG11c3Qgbm90IGNoYW5nZSEgYCArXHJcbiAgICAgICAgICAgICAgYFR5cGUgb2YgY29sdW1uIFwiJHtjb2x1bW59XCIgd2FzIGNoYW5nZWQgZnJvbSBcIiR7YmVmb3JlfVwiIHRvICR7YWZ0ZXJ9LmAsXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVGhyb3dzIGlmIHRoZSBkYXRhIGluIHRoZSB0YWJsZSBkbyBub3QgbWF0Y2ggdGhlIHRhYmxlIGNvbmZpZ3VyYXRpb25cclxuICAgKi9cclxuICBhc3luYyB0aHJvd1doZW5UYWJsZURhdGFEb2VzTm90TWF0Y2hDZmcoZGF0YTogUmxqc29uKSB7XHJcbiAgICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XHJcblxyXG4gICAgYXdhaXQgaXRlcmF0ZVRhYmxlcyhkYXRhLCBhc3luYyAodGFibGVLZXkpID0+IHtcclxuICAgICAgY29uc3QgdGFibGVDZmcgPSBhd2FpdCB0aGlzLnRhYmxlQ2ZnKHRhYmxlS2V5KTtcclxuICAgICAgY29uc3QgdGFibGUgPSBkYXRhW3RhYmxlS2V5XTtcclxuICAgICAgZXJyb3JzLnB1c2goLi4udmFsaWRhdGVSbGpzb25BZ2FpbnN0VGFibGVDZmcodGFibGUuX2RhdGEsIHRhYmxlQ2ZnKSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBUYWJsZSBkYXRhIGRvZXMgbm90IG1hdGNoIHRoZSBjb25maWd1cmF0aW9uLlxcblxcbkVycm9yczpcXG4ke2Vycm9yc1xyXG4gICAgICAgICAgLm1hcCgoZSkgPT4gYC0gJHtlfWApXHJcbiAgICAgICAgICAuam9pbignXFxuJyl9YCxcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNvcnRzIHRoZSBkYXRhIG9mIGEgdGFibGUgYnkgdGhlIGhhc2ggYW5kIHVwZGF0ZXMgdGhlIHRhYmxlIGhhc2ggaW4gcGxhY2VcclxuICAgKi9cclxuICBzb3J0VGFibGVEYXRhQW5kVXBkYXRlSGFzaCh0YWJsZTogVGFibGVUeXBlKTogdm9pZCB7XHJcbiAgICB0YWJsZS5fZGF0YS5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgIGNvbnN0IGhhc2hBID0gYS5faGFzaCBhcyBzdHJpbmc7XHJcbiAgICAgIGNvbnN0IGhhc2hCID0gYi5faGFzaCBhcyBzdHJpbmc7XHJcbiAgICAgIGlmIChoYXNoQSA8IGhhc2hCKSB7XHJcbiAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChoYXNoQSA+IGhhc2hCKSB7XHJcbiAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgLyogdjggaWdub3JlIHN0YXJ0ICovXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiAwO1xyXG4gICAgICAvKiB2OCBpZ25vcmUgZW5kICovXHJcbiAgICB9KTtcclxuXHJcbiAgICB0YWJsZS5faGFzaCA9ICcnO1xyXG4gICAgaGlwKHRhYmxlLCB7XHJcbiAgICAgIHVwZGF0ZUV4aXN0aW5nSGFzaGVzOiBmYWxzZSxcclxuICAgICAgdGhyb3dPbldyb25nSGFzaGVzOiBmYWxzZSxcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iLCIvLyBAbGljZW5zZVxyXG4vLyBDb3B5cmlnaHQgKGMpIDIwMjUgUmxqc29uXHJcbi8vXHJcbi8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRlcm1zIHRoYXQgY2FuIGJlXHJcbi8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhpcyBwYWNrYWdlLlxyXG5cclxuaW1wb3J0IHsgaGlwLCBoc2ggfSBmcm9tICdAcmxqc29uL2hhc2gnO1xyXG5pbXBvcnQgeyBJc1JlYWR5IH0gZnJvbSAnQHJsanNvbi9pcy1yZWFkeSc7XHJcbmltcG9ydCB7IGNvcHksIGVxdWFscywgSnNvblZhbHVlIH0gZnJvbSAnQHJsanNvbi9qc29uJztcclxuaW1wb3J0IHtcclxuICBpdGVyYXRlVGFibGVzU3luYyxcclxuICBSbGpzb24sXHJcbiAgVGFibGVDZmcsXHJcbiAgVGFibGVLZXksXHJcbiAgVGFibGVUeXBlLFxyXG59IGZyb20gJ0BybGpzb24vcmxqc29uJztcclxuXHJcbmltcG9ydCB7IElvVG9vbHMgfSBmcm9tICcuL2lvLXRvb2xzLnRzJztcclxuaW1wb3J0IHsgSW8gfSBmcm9tICcuL2lvLnRzJztcclxuXHJcbi8qKlxyXG4gKiBJbi1NZW1vcnkgaW1wbGVtZW50YXRpb24gb2YgdGhlIFJsanNvbiBJbyBpbnRlcmZhY2UuXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgSW9NZW0gaW1wbGVtZW50cyBJbyB7XHJcbiAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXHJcbiAgLy8gQ29uc3RydWN0b3IgJiBleGFtcGxlXHJcblxyXG4gIGluaXQoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLl9pc09wZW4gPSB0cnVlO1xyXG4gICAgcmV0dXJuIHRoaXMuX2luaXQoKTtcclxuICB9XHJcblxyXG4gIGNsb3NlKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5faXNPcGVuID0gZmFsc2U7XHJcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgaXNPcGVuKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lzT3BlbjtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBleGFtcGxlID0gYXN5bmMgKCkgPT4ge1xyXG4gICAgcmV0dXJuIG5ldyBJb01lbSgpO1xyXG4gIH07XHJcblxyXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxyXG4gIC8vIEdlbmVyYWxcclxuICBpc1JlYWR5KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lzUmVhZHkucHJvbWlzZTtcclxuICB9XHJcblxyXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxyXG4gIC8vIER1bXBcclxuXHJcbiAgZHVtcCgpOiBQcm9taXNlPFJsanNvbj4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2R1bXAoKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGR1bXBUYWJsZShyZXF1ZXN0OiB7IHRhYmxlOiBzdHJpbmcgfSk6IFByb21pc2U8Umxqc29uPiB7XHJcbiAgICByZXR1cm4gdGhpcy5fZHVtcFRhYmxlKHJlcXVlc3QpO1xyXG4gIH1cclxuXHJcbiAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXHJcbiAgLy8gUm93c1xyXG5cclxuICByZWFkUm93cyhyZXF1ZXN0OiB7XHJcbiAgICB0YWJsZTogc3RyaW5nO1xyXG4gICAgd2hlcmU6IHsgW2NvbHVtbjogc3RyaW5nXTogSnNvblZhbHVlIH07XHJcbiAgfSk6IFByb21pc2U8Umxqc29uPiB7XHJcbiAgICByZXR1cm4gdGhpcy5fcmVhZFJvd3MocmVxdWVzdCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyByb3dDb3VudCh0YWJsZTogc3RyaW5nKTogUHJvbWlzZTxudW1iZXI+IHtcclxuICAgIGNvbnN0IHRhYmxlRGF0YSA9IHRoaXMuX21lbVt0YWJsZV0gYXMgVGFibGVUeXBlO1xyXG4gICAgaWYgKCF0YWJsZURhdGEpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUYWJsZSBcIiR7dGFibGV9XCIgbm90IGZvdW5kYCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRhYmxlRGF0YS5fZGF0YS5sZW5ndGgpO1xyXG4gIH1cclxuXHJcbiAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXHJcbiAgLy8gV3JpdGVcclxuXHJcbiAgd3JpdGUocmVxdWVzdDogeyBkYXRhOiBSbGpzb24gfSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3dyaXRlKHJlcXVlc3QpO1xyXG4gIH1cclxuXHJcbiAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXHJcbiAgLy8gVGFibGUgbWFuYWdlbWVudFxyXG4gIGFzeW5jIHRhYmxlRXhpc3RzKHRhYmxlS2V5OiBUYWJsZUtleSk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgY29uc3QgdGFibGUgPSB0aGlzLl9tZW1bdGFibGVLZXldIGFzIFRhYmxlVHlwZTtcclxuICAgIHJldHVybiB0YWJsZSA/IHRydWUgOiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGNyZWF0ZU9yRXh0ZW5kVGFibGUocmVxdWVzdDogeyB0YWJsZUNmZzogVGFibGVDZmcgfSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZU9yRXh0ZW5kVGFibGUocmVxdWVzdCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyByYXdUYWJsZUNmZ3MoKTogUHJvbWlzZTxUYWJsZUNmZ1tdPiB7XHJcbiAgICBjb25zdCB0YWJsZXMgPSB0aGlzLl9tZW0udGFibGVDZmdzLl9kYXRhIGFzIFRhYmxlQ2ZnW107XHJcbiAgICByZXR1cm4gdGFibGVzO1xyXG4gIH1cclxuXHJcbiAgLy8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xyXG4gIC8vIFByaXZhdGVcclxuICAvLyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXHJcblxyXG4gIHByaXZhdGUgX2lvVG9vbHMhOiBJb1Rvb2xzO1xyXG5cclxuICBwcml2YXRlIF9pc1JlYWR5ID0gbmV3IElzUmVhZHkoKTtcclxuICBwcml2YXRlIF9pc09wZW4gPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBfbWVtOiBSbGpzb24gPSBoaXAoe30gYXMgUmxqc29uKTtcclxuXHJcbiAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXHJcbiAgcHJpdmF0ZSBhc3luYyBfaW5pdCgpIHtcclxuICAgIHRoaXMuX2lvVG9vbHMgPSBuZXcgSW9Ub29scyh0aGlzKTtcclxuICAgIHRoaXMuX2luaXRUYWJsZUNmZ3MoKTtcclxuICAgIHRoaXMuX3VwZGF0ZUdsb2JhbEhhc2goKTtcclxuICAgIGF3YWl0IHRoaXMuX2lvVG9vbHMuaW5pdFJldmlzaW9uc1RhYmxlKCk7XHJcbiAgICBoc2godGhpcy5fbWVtKTtcclxuXHJcbiAgICB0aGlzLl9pc1JlYWR5LnJlc29sdmUoKTtcclxuICB9XHJcblxyXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxyXG4gIHByaXZhdGUgX2luaXRUYWJsZUNmZ3MgPSAoKSA9PiB7XHJcbiAgICBjb25zdCB0YWJsZUNmZyA9IElvVG9vbHMudGFibGVDZmdzVGFibGVDZmc7XHJcblxyXG4gICAgdGhpcy5fbWVtLnRhYmxlQ2ZncyA9IGhpcCh7XHJcbiAgICAgIF9kYXRhOiBbdGFibGVDZmddLFxyXG4gICAgICBfdGFibGVDZmc6IHRhYmxlQ2ZnLl9oYXNoIGFzIHN0cmluZyxcclxuICAgIH0pO1xyXG4gIH07XHJcblxyXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxyXG4gIHByaXZhdGUgX3VwZGF0ZUdsb2JhbEhhc2goKSB7XHJcbiAgICAodGhpcy5fbWVtIGFzIGFueSkuX2hhc2ggPSAnJztcclxuICAgIGhpcCh0aGlzLl9tZW0sIHtcclxuICAgICAgdXBkYXRlRXhpc3RpbmdIYXNoZXM6IGZhbHNlLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cclxuICBwcml2YXRlIF91cGRhdGVUYWJsZUhhc2godGFibGVLZXk6IFRhYmxlS2V5KSB7XHJcbiAgICBjb25zdCB0YWJsZSA9IHRoaXMuX21lbVt0YWJsZUtleV0gYXMgVGFibGVUeXBlO1xyXG4gICAgdGFibGUuX2hhc2ggPSAnJztcclxuICAgIGhpcCh0YWJsZSwgeyB1cGRhdGVFeGlzdGluZ0hhc2hlczogZmFsc2UgfSk7XHJcbiAgfVxyXG5cclxuICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cclxuICBwcml2YXRlIGFzeW5jIF9jcmVhdGVPckV4dGVuZFRhYmxlKHJlcXVlc3Q6IHtcclxuICAgIHRhYmxlQ2ZnOiBUYWJsZUNmZztcclxuICB9KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgdGFibGUgY29uZmlnIGlzIGNvbXBhdGlibGVcclxuICAgIC8vIHdpdGggYW4gcG90ZW50aWFsIGV4aXN0aW5nIHRhYmxlXHJcbiAgICBjb25zdCB0YWJsZUNmZyA9IHJlcXVlc3QudGFibGVDZmc7XHJcbiAgICBhd2FpdCB0aGlzLl9pb1Rvb2xzLnRocm93V2hlblRhYmxlSXNOb3RDb21wYXRpYmxlKHRhYmxlQ2ZnKTtcclxuXHJcbiAgICBjb25zdCB7IGtleSB9ID0gdGFibGVDZmc7XHJcblxyXG4gICAgLy8gUmVjcmVhdGUgaGFzaGVzIGluIHRoZSBjYXNlIHRoZSBleGlzdGluZyBoYXNoZXMgYXJlIHdyb25nXHJcbiAgICBjb25zdCBuZXdDb25maWcgPSBoc2godGFibGVDZmcpO1xyXG5cclxuICAgIC8vIEZpbmQgYW4gZXhpc3RpbmcgdGFibGUgY29uZmlnIHdpdGggdGhlIHNhbWUgaGFzaFxyXG4gICAgY29uc3QgZXhpc3RpbmdDb25maWcgPSBhd2FpdCB0aGlzLl9pb1Rvb2xzLnRhYmxlQ2ZnT3JOdWxsKGtleSk7XHJcblxyXG4gICAgLy8gV3JpdGUgdGhlIG5ldyBjb25maWcgaW50byB0aGUgZGF0YWJhc2VcclxuICAgIGlmICghZXhpc3RpbmdDb25maWcpIHtcclxuICAgICAgdGhpcy5fY3JlYXRlVGFibGUobmV3Q29uZmlnLCBrZXkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fZXh0ZW5kVGFibGUoZXhpc3RpbmdDb25maWcsIG5ld0NvbmZpZyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cclxuICBwcml2YXRlIF9jcmVhdGVUYWJsZShuZXdDb25maWc6IFRhYmxlQ2ZnLCB0YWJsZUtleTogVGFibGVLZXkpIHtcclxuICAgIC8vIFdyaXRlIHRoZSB0YWJsZSBjb25maWcgaW50byB0aGUgZGF0YWJhc2VcclxuICAgIG5ld0NvbmZpZyA9IGhzaChuZXdDb25maWcpO1xyXG4gICAgdGhpcy5fbWVtLnRhYmxlQ2Zncy5fZGF0YS5wdXNoKG5ld0NvbmZpZyk7XHJcbiAgICB0aGlzLl9pb1Rvb2xzLnNvcnRUYWJsZURhdGFBbmRVcGRhdGVIYXNoKHRoaXMuX21lbS50YWJsZUNmZ3MpO1xyXG5cclxuICAgIC8vIENyZWF0ZSBhIHRhYmxlIGFuZCB3cml0ZSBpdCBpbnRvIHRoZSBkYXRhYmFzZVxyXG4gICAgY29uc3QgdGFibGU6IFRhYmxlVHlwZSA9IHtcclxuICAgICAgX2RhdGE6IFtdLFxyXG4gICAgICBfdGFibGVDZmc6IG5ld0NvbmZpZy5faGFzaCBhcyBzdHJpbmcsXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuX21lbVt0YWJsZUtleV0gPz89IGhpcCh0YWJsZSk7XHJcblxyXG4gICAgLy8gVXBkYXRlIGhhc2hlc1xyXG4gICAgdGhpcy5fdXBkYXRlVGFibGVIYXNoKHRhYmxlS2V5KTtcclxuICAgIHRoaXMuX3VwZGF0ZUdsb2JhbEhhc2goKTtcclxuICB9XHJcblxyXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxyXG4gIHByaXZhdGUgX2V4dGVuZFRhYmxlKGV4aXN0aW5nQ29uZmlnOiBUYWJsZUNmZywgbmV3Q29uZmlnOiBUYWJsZUNmZykge1xyXG4gICAgLy8gTm8gY29sdW1ucyBhZGRlZD8gUmV0dXJuLlxyXG4gICAgaWYgKGV4aXN0aW5nQ29uZmlnLmNvbHVtbnMubGVuZ3RoID09PSBuZXdDb25maWcuY29sdW1ucy5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFdyaXRlIHRoZSBuZXcgdGFibGUgY29uZmlnIGludG8gdGhlIGRhdGFiYXNlXHJcbiAgICBuZXdDb25maWcgPSBoc2gobmV3Q29uZmlnKTtcclxuICAgIHRoaXMuX21lbS50YWJsZUNmZ3MuX2RhdGEucHVzaChuZXdDb25maWcpO1xyXG4gICAgdGhpcy5faW9Ub29scy5zb3J0VGFibGVEYXRhQW5kVXBkYXRlSGFzaCh0aGlzLl9tZW0udGFibGVDZmdzKTtcclxuXHJcbiAgICAvLyBVcGRhdGUgdGhlIGNvbmZpZyBvZiB0aGUgZXhpc3RpbmcgdGFibGVcclxuICAgIGNvbnN0IHRhYmxlID0gdGhpcy5fbWVtW25ld0NvbmZpZy5rZXldIGFzIFRhYmxlVHlwZTtcclxuICAgIHRhYmxlLl90YWJsZUNmZyA9IG5ld0NvbmZpZy5faGFzaCBhcyBzdHJpbmc7XHJcblxyXG4gICAgLy8gVXBkYXRlIHRoZSBoYXNoZXNcclxuICAgIHRoaXMuX3VwZGF0ZVRhYmxlSGFzaChuZXdDb25maWcua2V5KTtcclxuICAgIHRoaXMuX3VwZGF0ZUdsb2JhbEhhc2goKTtcclxuICB9XHJcblxyXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9kdW1wKCk6IFByb21pc2U8Umxqc29uPiB7XHJcbiAgICByZXR1cm4gY29weSh0aGlzLl9tZW0pO1xyXG4gIH1cclxuXHJcbiAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXHJcbiAgcHJpdmF0ZSBhc3luYyBfZHVtcFRhYmxlKHJlcXVlc3Q6IHsgdGFibGU6IHN0cmluZyB9KTogUHJvbWlzZTxSbGpzb24+IHtcclxuICAgIGF3YWl0IHRoaXMuX2lvVG9vbHMudGhyb3dXaGVuVGFibGVEb2VzTm90RXhpc3QocmVxdWVzdC50YWJsZSk7XHJcblxyXG4gICAgY29uc3QgdGFibGUgPSB0aGlzLl9tZW1bcmVxdWVzdC50YWJsZV0gYXMgVGFibGVUeXBlO1xyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIFtyZXF1ZXN0LnRhYmxlXTogY29weSh0YWJsZSksXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXHJcbiAgcHJpdmF0ZSBhc3luYyBfd3JpdGUocmVxdWVzdDogeyBkYXRhOiBSbGpzb24gfSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3QgYWRkZWREYXRhID0gaHNoKHJlcXVlc3QuZGF0YSk7XHJcbiAgICB0aGlzLl9yZW1vdmVOdWxsVmFsdWVzKGFkZGVkRGF0YSk7XHJcbiAgICBjb25zdCB0YWJsZXMgPSBPYmplY3Qua2V5cyhhZGRlZERhdGEpO1xyXG4gICAgaHNoKGFkZGVkRGF0YSk7XHJcblxyXG4gICAgYXdhaXQgdGhpcy5faW9Ub29scy50aHJvd1doZW5UYWJsZXNEb05vdEV4aXN0KHJlcXVlc3QuZGF0YSk7XHJcbiAgICBhd2FpdCB0aGlzLl9pb1Rvb2xzLnRocm93V2hlblRhYmxlRGF0YURvZXNOb3RNYXRjaENmZyhyZXF1ZXN0LmRhdGEpO1xyXG5cclxuICAgIGZvciAoY29uc3QgdGFibGUgb2YgdGFibGVzKSB7XHJcbiAgICAgIGlmICh0YWJsZS5zdGFydHNXaXRoKCdfJykpIHtcclxuICAgICAgICBjb250aW51ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3Qgb2xkVGFibGUgPSB0aGlzLl9tZW1bdGFibGVdIGFzIFRhYmxlVHlwZTtcclxuICAgICAgY29uc3QgbmV3VGFibGUgPSBhZGRlZERhdGFbdGFibGVdIGFzIFRhYmxlVHlwZTtcclxuXHJcbiAgICAgIC8vIFRhYmxlIGV4aXN0cy4gTWVyZ2UgZGF0YVxyXG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgbmV3VGFibGUuX2RhdGEpIHtcclxuICAgICAgICBjb25zdCBoYXNoID0gaXRlbS5faGFzaDtcclxuICAgICAgICBjb25zdCBleGlzdHMgPSBvbGRUYWJsZS5fZGF0YS5maW5kKChpKSA9PiBpLl9oYXNoID09PSBoYXNoKTtcclxuICAgICAgICBpZiAoIWV4aXN0cykge1xyXG4gICAgICAgICAgb2xkVGFibGUuX2RhdGEucHVzaChpdGVtIGFzIGFueSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLl9pb1Rvb2xzLnNvcnRUYWJsZURhdGFBbmRVcGRhdGVIYXNoKG9sZFRhYmxlKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBSZWNhbGMgbWFpbiBoYXNoZXNcclxuICAgIHRoaXMuX3VwZGF0ZUdsb2JhbEhhc2goKTtcclxuICB9XHJcblxyXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxyXG4gIHByaXZhdGUgYXN5bmMgX3JlYWRSb3dzKHJlcXVlc3Q6IHtcclxuICAgIHRhYmxlOiBzdHJpbmc7XHJcbiAgICB3aGVyZTogeyBbY29sdW1uOiBzdHJpbmddOiBKc29uVmFsdWUgfTtcclxuICB9KTogUHJvbWlzZTxSbGpzb24+IHtcclxuICAgIGF3YWl0IHRoaXMuX2lvVG9vbHMudGhyb3dXaGVuVGFibGVEb2VzTm90RXhpc3QocmVxdWVzdC50YWJsZSk7XHJcbiAgICBhd2FpdCB0aGlzLl9pb1Rvb2xzLnRocm93V2hlbkNvbHVtbkRvZXNOb3RFeGlzdChcclxuICAgICAgcmVxdWVzdC50YWJsZSxcclxuICAgICAgT2JqZWN0LmtleXMocmVxdWVzdC53aGVyZSksXHJcbiAgICApO1xyXG5cclxuICAgIC8vIFJlYWQgdGFibGUgZnJvbSBkYXRhXHJcbiAgICBjb25zdCB0YWJsZSA9IHRoaXMuX21lbVtyZXF1ZXN0LnRhYmxlXSBhcyBUYWJsZVR5cGU7XHJcblxyXG4gICAgLy8gRmlsdGVyIHRhYmxlIGRhdGFcclxuICAgIGNvbnN0IHRhYmxlRGF0YUZpbHRlcmVkID0gdGFibGUuX2RhdGEuZmlsdGVyKChyb3cpID0+IHtcclxuICAgICAgZm9yIChjb25zdCBjb2x1bW4gaW4gcmVxdWVzdC53aGVyZSkge1xyXG4gICAgICAgIGNvbnN0IGEgPSByb3dbY29sdW1uXTtcclxuICAgICAgICBjb25zdCBiID0gcmVxdWVzdC53aGVyZVtjb2x1bW5dO1xyXG4gICAgICAgIGlmIChiID09PSBudWxsICYmIGEgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIWVxdWFscyhhLCBiKSkge1xyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIENyZWF0ZSBhbiB0YWJsZVxyXG4gICAgY29uc3QgdGFibGVGaWx0ZXJlZDogVGFibGVUeXBlID0ge1xyXG4gICAgICBfZGF0YTogdGFibGVEYXRhRmlsdGVyZWQsXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuX2lvVG9vbHMuc29ydFRhYmxlRGF0YUFuZFVwZGF0ZUhhc2godGFibGVGaWx0ZXJlZCk7XHJcblxyXG4gICAgY29uc3QgcmVzdWx0OiBSbGpzb24gPSB7XHJcbiAgICAgIFtyZXF1ZXN0LnRhYmxlXTogdGFibGVGaWx0ZXJlZCxcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIF9yZW1vdmVOdWxsVmFsdWVzKHJsanNvbjogUmxqc29uKSB7XHJcbiAgICBpdGVyYXRlVGFibGVzU3luYyhybGpzb24sICh0YWJsZSkgPT4ge1xyXG4gICAgICBjb25zdCBkYXRhID0gcmxqc29uW3RhYmxlXS5fZGF0YTtcclxuXHJcbiAgICAgIGZvciAoY29uc3Qgcm93IG9mIGRhdGEpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiByb3cpIHtcclxuICAgICAgICAgIGlmIChyb3dba2V5XSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICBkZWxldGUgcm93W2tleV07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuIiwiLy8gQGxpY2Vuc2VcclxuLy8gQ29weXJpZ2h0IChjKSAyMDI1IFJsanNvblxyXG4vL1xyXG4vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0ZXJtcyB0aGF0IGNhbiBiZVxyXG4vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoaXMgcGFja2FnZS5cclxuXHJcbmltcG9ydCB7IElvLCBJb01lbSB9IGZyb20gJy4vaW5kZXgudHMnO1xyXG5cclxuLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cclxuLyoqXHJcbiAqIElvIGltcGxlbWVudGF0aW9uIG5lZWQgdG8gaW1wbGVtZW50IHRoaXMgaW50ZXJmYWNlIHRvIGJlIHVzZWQgaW5cclxuICogY29uZm9ybWFuY2UgdGVzdHMuXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIElvVGVzdFNldHVwIHtcclxuICAvKiogc2V0dXAgYmVmb3JlIHRoZSBzaW5nbGUgc2V0dXBzICovXHJcbiAgYmVmb3JlQWxsOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xyXG5cclxuICAvKipcclxuICAgKiBJbml0aWFsaXplcyB0aGUgaW8gaW1wbGVtZW50YXRpb24uXHJcbiAgICogQHJldHVybnMgVGhlIGlvIGltcGxlbWVudGF0aW9uLlxyXG4gICAqL1xyXG4gIGJlZm9yZUVhY2g6ICgpID0+IFByb21pc2U8dm9pZD47XHJcblxyXG4gIC8qKlxyXG4gICAqIFRlYXJzIGRvd24gdGhlIGlvIGltcGxlbWVudGF0aW9uLlxyXG4gICAqIEByZXR1cm5zIFRoZSBpbyBpbXBsZW1lbnRhdGlvbi5cclxuICAgKi9cclxuICBhZnRlckVhY2g6ICgpID0+IFByb21pc2U8dm9pZD47XHJcblxyXG4gIC8qKiBjbGVhbnVwIGFmdGVyIGFsbCB0ZXN0cyAqL1xyXG4gIGFmdGVyQWxsOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgaW8gaW1wbGVtZW50YXRpb24gdG8gYmUgdXNlZCBpbiB0aGUgY29uZm9ybWFuY2UgdGVzdHMuXHJcbiAgICovXHJcbiAgaW86IElvO1xyXG59XHJcblxyXG4vLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxyXG4vLyBFeGFtcGxlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBJb1Rlc3RTZXR1cCBpbnRlcmZhY2VcclxuZXhwb3J0IGNvbnN0IGV4YW1wbGVUZXN0U2V0dXAgPSAoKTogSW9UZXN0U2V0dXAgPT4ge1xyXG4gIHJldHVybiB7XHJcbiAgICBpbzogbmV3IElvTWVtKCksXHJcbiAgICBiZWZvcmVBbGw6IGFzeW5jICgpID0+IHtcclxuICAgICAgLy8gVGhpcyBtZXRob2QgY2FuIGJlIHVzZWQgZm9yIGFueSBhZGRpdGlvbmFsIHNldHVwIHJlcXVpcmVkIGJlZm9yZSBpbml0LlxyXG4gICAgICAvLyBDdXJyZW50bHksIGl0IGRvZXMgbm90aGluZy5cclxuICAgIH0sXHJcblxyXG4gICAgYmVmb3JlRWFjaDogYXN5bmMgKCkgPT4ge1xyXG4gICAgICAvLyBJbml0aWFsaXplIHRoZSBpbyBpbXBsZW1lbnRhdGlvblxyXG4gICAgfSxcclxuICAgIGFmdGVyRWFjaDogYXN5bmMgKCkgPT4ge1xyXG4gICAgICAvLyBUZWFyIGRvd24gdGhlIGlvIGltcGxlbWVudGF0aW9uXHJcbiAgICB9LFxyXG5cclxuICAgIGFmdGVyQWxsOiBhc3luYyAoKSA9PiB7XHJcbiAgICAgIC8vIFRoaXMgbWV0aG9kIGNhbiBiZSB1c2VkIGZvciBhbnkgYWRkaXRpb25hbCBjbGVhbnVwIGFmdGVyIHRlYXJEb3duLlxyXG4gICAgfSxcclxuICB9O1xyXG59O1xyXG4iLCIvLyBAbGljZW5zZVxyXG4vLyBDb3B5cmlnaHQgKGMpIDIwMjUgUmxqc29uXHJcbi8vXHJcbi8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRlcm1zIHRoYXQgY2FuIGJlXHJcbi8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhpcyBwYWNrYWdlLlxyXG5cclxuaW1wb3J0IHsgSnNvblZhbHVlIH0gZnJvbSAnQHJsanNvbi9qc29uJztcclxuaW1wb3J0IHsgUmxqc29uLCBUYWJsZUNmZywgVGFibGVLZXkgfSBmcm9tICdAcmxqc29uL3JsanNvbic7XHJcblxyXG4vLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxyXG5leHBvcnQgaW50ZXJmYWNlIElvIHtcclxuICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cclxuICAvLyBHZW5lcmFsXHJcblxyXG4gIC8qKiBTdGFydHMgdGhlIGluaXRpYWxpemF0aW9uICovXHJcbiAgaW5pdCgpOiBQcm9taXNlPHZvaWQ+O1xyXG5cclxuICAvKiogQ2xvc2VzIHRoZSBpbyAqL1xyXG4gIGNsb3NlKCk6IFByb21pc2U8dm9pZD47XHJcblxyXG4gIC8qKiBSZXR1cm5zIHRydWUgaWYgaW8gaXMgb3BlbmVkICovXHJcbiAgaXNPcGVuOiBib29sZWFuO1xyXG5cclxuICAvKiogQSBwcm9taXNlIHJlc29sdmluZyBvbmNlIHRoZSBJbyBpbnRlcmZhY2UgaXMgcmVhZHlcclxuICAgKlxyXG4gICAqIPCfkqEgVXNlIEBybGpzb24vaXMtcmVhZHlcclxuICAgKi9cclxuICBpc1JlYWR5KCk6IFByb21pc2U8dm9pZD47XHJcblxyXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxyXG4gIC8vIER1bXBcclxuXHJcbiAgLyoqIFJldHVybnMgdGhlIGNvbXBsZXRlIGRiIGNvbnRlbnQgYXMgUmxqc29uICovXHJcbiAgZHVtcCgpOiBQcm9taXNlPFJsanNvbj47XHJcblxyXG4gIC8qKiBSZXR1cm5zIHRoZSBkdW1wIG9mIGEgY29tcGxldGUgdGFibGUgKi9cclxuICBkdW1wVGFibGUocmVxdWVzdDogeyB0YWJsZTogc3RyaW5nIH0pOiBQcm9taXNlPFJsanNvbj47XHJcblxyXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxyXG4gIC8vIFRhYmxlc1xyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHRhYmxlIGV4aXN0c1xyXG4gICAqL1xyXG4gIHRhYmxlRXhpc3RzKHRhYmxlS2V5OiBUYWJsZUtleSk6IFByb21pc2U8Ym9vbGVhbj47XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZXMgYSB0YWJsZSB3aXRoIGEgZ2l2ZW4gY29uZmlnLlxyXG4gICAqIElmIHRoZSB0YWJsZSBhbHJlYWR5IGV4aXN0cywgbmV3IGNvbHVtbnMgYXJlIGFkZGVkIHRvIHRoZSBleGlzdGluZyB0YWJsZS5cclxuICAgKiBJZiB0aGUgdGFibGUgZG9lcyBub3QgZXhpc3QsIGl0IGlzIGNyZWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gY29uZmlnLlxyXG4gICAqIElmIHRoZSB0YWJsZSBleGlzdHMgYW5kIGNvbHVtbnMgYXJlIHJlbW92ZWQsIGFuIGVycm9yIGlzIHRocm93bi5cclxuICAgKiBJZiB0aGUgdGFibGUgZXhpc3RzIGFuZCB0aGUgY29sdW1uIHR5cGUgaXMgY2hhbmdlZCwgYW4gZXJyb3IgaXMgdGhyb3duLlxyXG4gICAqL1xyXG4gIGNyZWF0ZU9yRXh0ZW5kVGFibGUocmVxdWVzdDogeyB0YWJsZUNmZzogVGFibGVDZmcgfSk6IFByb21pc2U8dm9pZD47XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgYSBqc29uIHN0cnVjdHVyZSByZXR1cm5pbmcgY3VycmVudCB0YWJsZSBjb25maWd1cmF0aW9uc1xyXG4gICAqL1xyXG4gIHJhd1RhYmxlQ2ZncygpOiBQcm9taXNlPFRhYmxlQ2ZnW10+O1xyXG5cclxuICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cclxuICAvLyBXcml0ZVxyXG5cclxuICAvKiogV3JpdGVzIFJsanNvbiBkYXRhIGludG8gdGhlIGRhdGFiYXNlICovXHJcbiAgd3JpdGUocmVxdWVzdDogeyBkYXRhOiBSbGpzb24gfSk6IFByb21pc2U8dm9pZD47XHJcblxyXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxyXG4gIC8vIFJlYWQgcm93c1xyXG5cclxuICAvKiogUXVlcmllcyBhIGxpc3Qgb2Ygcm93cyAqL1xyXG4gIHJlYWRSb3dzKHJlcXVlc3Q6IHtcclxuICAgIHRhYmxlOiBzdHJpbmc7XHJcbiAgICB3aGVyZTogeyBbY29sdW1uOiBzdHJpbmddOiBKc29uVmFsdWUgfCBudWxsIH07XHJcbiAgfSk6IFByb21pc2U8Umxqc29uPjtcclxuXHJcbiAgLyoqIFJldHVybnMgdGhlIG51bWJlciBvZiByb3dzIGluIHRoZSBnaXZlbiB0YWJsZSAqL1xyXG4gIHJvd0NvdW50KHRhYmxlOiBzdHJpbmcpOiBQcm9taXNlPG51bWJlcj47XHJcbn1cclxuXHJcbi8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXHJcbmV4cG9ydCBjb25zdCBleGFtcGxlSW8gPVxyXG4gICdDaGVja291dCBAcmxqc29uL2lvLW1lbSBmb3IgYW4gZXhhbXBsZSBpbXBsZW1lbnRhdGlvbic7XHJcbiIsIi8vIEBsaWNlbnNlXHJcbi8vIENvcHlyaWdodCAoYykgMjAyNSBSbGpzb25cclxuLy9cclxuLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGVybXMgdGhhdCBjYW4gYmVcclxuLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGlzIHBhY2thZ2UuXHJcblxyXG5pbXBvcnQgeyBKc29uIH0gZnJvbSAnQHJsanNvbi9qc29uJztcclxuaW1wb3J0IHtcclxuICBCdWZmZXQsXHJcbiAgQ2FrZSxcclxuICBpdGVyYXRlVGFibGVzU3luYyxcclxuICBMYXllcixcclxuICBSZWYsXHJcbiAgUmxqc29uLFxyXG4gIFRhYmxlS2V5LFxyXG59IGZyb20gJ0BybGpzb24vcmxqc29uJztcclxuXHJcbi8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXHJcbi8qKlxyXG4gKiBEZXNjcmliZXMgYSByb3cgdGhhdCByZWZlcmVuY2VzIGEgY2hpbGQgdGFibGUgcm93XHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIFBhcmVudFJlZiB7XHJcbiAgLyoqXHJcbiAgICogVGhlIHBhcmVudCB0YWJsZSB0aGF0IHJlZmVyZW5jZXMgdGhlIGNoaWxkIHRhYmxlXHJcbiAgICovXHJcbiAgW3BhcmVudFRhYmxlOiBUYWJsZUtleV06IHtcclxuICAgIC8qKlxyXG4gICAgICogVGhlIHBhcmVudCByb3cgdGhhdCByZWZlcmVuY2VzIHRoZSBjaGlsZCByb3dcclxuICAgICAqL1xyXG4gICAgW3BhcmVudFJvdzogUmVmXToge1xyXG4gICAgICAvKipcclxuICAgICAgICogRGV0YWlscyBhYm91dCB0aGUgcmVmZXJlbmNlLCBlLmcuIGFuIGFycmF5IGluZGV4IGV0Yy5cclxuICAgICAgICovXHJcbiAgICAgIGRldGFpbHM/OiBKc29uO1xyXG4gICAgfTtcclxuICB9O1xyXG59XHJcblxyXG4vLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxyXG4vKipcclxuICogRGVzY3JpYmVzIHRoZSBwYXJlbnQgdGFibGUgcm93cyByZWZlcmVuY2luZyBhIGNoaWxkIHRhYmxlIHJvd1xyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBSZXZlcnNlUmVmcyB7XHJcbiAgLyoqXHJcbiAgICogVGhlIGNoaWxkIHRhYmxlIHdlIG5lZWQgdGhlIHJlZmVyZW5jaW5nIHJvd3MgZm9yXHJcbiAgICovXHJcbiAgW2NoaWxkVGFibGU6IFRhYmxlS2V5XToge1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgcm93IGhhc2h3ZSBuZWVkIHRoZSByZWZlcmVuY2luZyByb3dzIGZvclxyXG4gICAgICovXHJcbiAgICBbY2hpbGRSb3c6IFJlZl06IFBhcmVudFJlZjtcclxuICB9O1xyXG59XHJcblxyXG4vKiB2OCBpZ25vcmUgc3RhcnQgKi9cclxuXHJcbi8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSByZXZlcnNlIHJlZmVyZW5jZXMgZm9yIGEgZ2l2ZW4gcmxqc29uIG9iamVjdFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGNhbGNSZXZlcnNlUmVmcyA9IChybGpzb246IFJsanNvbik6IFJldmVyc2VSZWZzID0+IHtcclxuICBjb25zdCByZXN1bHQ6IFJldmVyc2VSZWZzID0ge307XHJcblxyXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cclxuICAvLyBQcmVwYXJlIGRhdGEgc3RydWN0dXJlXHJcbiAgaXRlcmF0ZVRhYmxlc1N5bmMocmxqc29uLCAoY2hpbGRUYWJsZUtleSwgdGFibGUpID0+IHtcclxuICAgIGNvbnN0IGNoaWxkVGFibGU6IHsgW2NoaWxkUm93SGFzaDogc3RyaW5nXTogUGFyZW50UmVmIH0gPSB7fTtcclxuICAgIHJlc3VsdFtjaGlsZFRhYmxlS2V5XSA9IGNoaWxkVGFibGU7XHJcbiAgICBmb3IgKGNvbnN0IGNoaWxkUm93IG9mIHRhYmxlLl9kYXRhKSB7XHJcbiAgICAgIGNoaWxkVGFibGVbY2hpbGRSb3cuX2hhc2hdID0ge307XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cclxuICAvLyBHZW5lcmF0ZSByZXZlcnNlIHJlZmVyZW5jZXNcclxuICBpdGVyYXRlVGFibGVzU3luYyhybGpzb24sIChwYXJlbnRUYWJsZUtleSwgcGFyZW50VGFibGUpID0+IHtcclxuICAgIC8vIEl0ZXJhdGUgYWxsIHJvd3Mgb2YgZWFjaCB0YWJsZVxyXG4gICAgZm9yIChjb25zdCBwYXJlbnRUYWJsZVJvdyBvZiBwYXJlbnRUYWJsZS5fZGF0YSkge1xyXG4gICAgICAvLyBGaW5kIG91dCB3aGUgb3RoZXIgdGFibGVzICYgcm93cyBhcmUgcmVmZXJlbmNlZCBieSB0aGlzIHJvd1xyXG4gICAgICAvLyBXcml0ZSB0aGVzZSBpbmZvcm1hdGlvbiBpbnR0byByZXN1bHRcclxuICAgICAgc3dpdGNoIChwYXJlbnRUYWJsZS5fdHlwZSkge1xyXG4gICAgICAgIGNhc2UgJ2luZ3JlZGllbnRzJzpcclxuICAgICAgICAgIF93cml0ZUluZ3JlZGllbnRSZWZzKHBhcmVudFRhYmxlS2V5LCBwYXJlbnRUYWJsZVJvdywgcmVzdWx0KTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlICdsYXllcnMnOiB7XHJcbiAgICAgICAgICBfd3JpdGVMYXllclJlZnMocGFyZW50VGFibGVLZXksIHBhcmVudFRhYmxlUm93LCByZXN1bHQpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjYXNlICdzbGljZUlkcyc6IHtcclxuICAgICAgICAgIC8vIFNsaWNlIGlkcyBkbyBub3QgcmVmZXJlbmNlIG90aGVyIHRhYmxlc1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjYXNlICdjYWtlcyc6IHtcclxuICAgICAgICAgIF93cml0ZUNha2VSZWZzKHBhcmVudFRhYmxlS2V5LCBwYXJlbnRUYWJsZVJvdywgcmVzdWx0KTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY2FzZSAnYnVmZmV0cyc6IHtcclxuICAgICAgICAgIF93cml0ZUJ1ZmZldFJlZnMocGFyZW50VGFibGVLZXksIHBhcmVudFRhYmxlUm93LCByZXN1bHQpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIHJldHVybiByZXN1bHQ7XHJcbn07XHJcblxyXG4vKiB2OCBpZ25vcmUgZW5kICovXHJcblxyXG4vLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxyXG5jb25zdCBfd3JpdGVJbmdyZWRpZW50UmVmcyA9IChcclxuICBwYXJlbnRUYWJsZU5hbWU6IFRhYmxlS2V5LFxyXG4gIHBhcmVudFJvdzogSnNvbixcclxuICByZXN1bHQ6IFJldmVyc2VSZWZzLFxyXG4pID0+IHtcclxuICBjb25zdCBwYXJlbnRSb3dIYXNoID0gcGFyZW50Um93Ll9oYXNoIGFzIHN0cmluZztcclxuXHJcbiAgZm9yIChjb25zdCBwYXJlbnRDb2x1bW5OYW1lIGluIHBhcmVudFJvdykge1xyXG4gICAgaWYgKHBhcmVudENvbHVtbk5hbWUuc3RhcnRzV2l0aCgnXycpKSB7XHJcbiAgICAgIGNvbnRpbnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghcGFyZW50Q29sdW1uTmFtZS5lbmRzV2l0aCgnUmVmJykpIHtcclxuICAgICAgY29udGludWU7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY2hpbGRUYWJsZU5hbWUgPSBwYXJlbnRDb2x1bW5OYW1lLnNsaWNlKDAsIC0zKTtcclxuICAgIGNvbnN0IGNoaWxkUm93SGFzaCA9IHBhcmVudFJvd1twYXJlbnRDb2x1bW5OYW1lXSBhcyBzdHJpbmc7XHJcblxyXG4gICAgX3dyaXRlKFxyXG4gICAgICByZXN1bHQsXHJcbiAgICAgIGNoaWxkVGFibGVOYW1lLFxyXG4gICAgICBjaGlsZFJvd0hhc2gsXHJcbiAgICAgIHBhcmVudFRhYmxlTmFtZSxcclxuICAgICAgcGFyZW50Um93SGFzaCxcclxuICAgICk7XHJcbiAgfVxyXG59O1xyXG5cclxuLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cclxuY29uc3QgX3dyaXRlTGF5ZXJSZWZzID0gKFxyXG4gIHBhcmVudFRhYmxlTmFtZTogVGFibGVLZXksXHJcbiAgcGFyZW50Um93OiBMYXllcixcclxuICByZXN1bHQ6IFJldmVyc2VSZWZzLFxyXG4pID0+IHtcclxuICBjb25zdCBjaGlsZFRhYmxlTmFtZSA9IHBhcmVudFJvdy5pbmdyZWRpZW50c1RhYmxlO1xyXG4gIGNvbnN0IHBhcmVudFJvd0hhc2ggPSBwYXJlbnRSb3cuX2hhc2ggYXMgc3RyaW5nO1xyXG5cclxuICBmb3IgKGNvbnN0IHNsaWNlSWQgaW4gcGFyZW50Um93LmFzc2lnbikge1xyXG4gICAgaWYgKHNsaWNlSWQuc3RhcnRzV2l0aCgnXycpKSB7XHJcbiAgICAgIGNvbnRpbnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHNsaWNlSGFzaCA9IHBhcmVudFJvdy5hc3NpZ25bc2xpY2VJZF0gYXMgc3RyaW5nO1xyXG5cclxuICAgIF93cml0ZShyZXN1bHQsIGNoaWxkVGFibGVOYW1lLCBzbGljZUhhc2gsIHBhcmVudFRhYmxlTmFtZSwgcGFyZW50Um93SGFzaCk7XHJcbiAgfVxyXG59O1xyXG5cclxuLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cclxuY29uc3QgX3dyaXRlQ2FrZVJlZnMgPSAoXHJcbiAgcGFyZW50VGFibGVOYW1lOiBUYWJsZUtleSxcclxuICBwYXJlbnRSb3c6IENha2UsXHJcbiAgcmVzdWx0OiBSZXZlcnNlUmVmcyxcclxuKSA9PiB7XHJcbiAgY29uc3QgcGFyZW50Um93SGFzaCA9IHBhcmVudFJvdy5faGFzaCBhcyBzdHJpbmc7XHJcblxyXG4gIGZvciAoY29uc3QgbGF5ZXIgaW4gcGFyZW50Um93LmxheWVycykge1xyXG4gICAgY29uc3QgY2hpbGRUYWJsZU5hbWUgPSBwYXJlbnRSb3cubGF5ZXJzVGFibGU7XHJcbiAgICBjb25zdCBjaGlsZFJvd0hhc2ggPSBwYXJlbnRSb3cubGF5ZXJzW2xheWVyXSBhcyBzdHJpbmc7XHJcbiAgICBfd3JpdGUoXHJcbiAgICAgIHJlc3VsdCxcclxuICAgICAgY2hpbGRUYWJsZU5hbWUsXHJcbiAgICAgIGNoaWxkUm93SGFzaCxcclxuICAgICAgcGFyZW50VGFibGVOYW1lLFxyXG4gICAgICBwYXJlbnRSb3dIYXNoLFxyXG4gICAgKTtcclxuICB9XHJcbn07XHJcblxyXG4vLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxyXG5jb25zdCBfd3JpdGVCdWZmZXRSZWZzID0gKFxyXG4gIHBhcmVudFRhYmxlTmFtZTogVGFibGVLZXksXHJcbiAgcGFyZW50Um93OiBCdWZmZXQsXHJcbiAgcmVzdWx0OiBSZXZlcnNlUmVmcyxcclxuKSA9PiB7XHJcbiAgY29uc3QgcGFyZW50Um93SGFzaCA9IHBhcmVudFJvdy5faGFzaCBhcyBzdHJpbmc7XHJcblxyXG4gIGZvciAoY29uc3QgaXRlbSBvZiBwYXJlbnRSb3cuaXRlbXMpIHtcclxuICAgIGNvbnN0IGNoaWxkVGFibGVOYW1lID0gaXRlbS50YWJsZTtcclxuICAgIGNvbnN0IGNoaWxkUm93SGFzaCA9IGl0ZW0ucmVmO1xyXG4gICAgX3dyaXRlKFxyXG4gICAgICByZXN1bHQsXHJcbiAgICAgIGNoaWxkVGFibGVOYW1lLFxyXG4gICAgICBjaGlsZFJvd0hhc2gsXHJcbiAgICAgIHBhcmVudFRhYmxlTmFtZSxcclxuICAgICAgcGFyZW50Um93SGFzaCxcclxuICAgICk7XHJcbiAgfVxyXG59O1xyXG5cclxuLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cclxuY29uc3QgX3dyaXRlID0gKFxyXG4gIHJlc3VsdDogUmV2ZXJzZVJlZnMsXHJcbiAgY2hpbGRUYWJsZU5hbWU6IHN0cmluZyxcclxuICBjaGlsZFJvd0hhc2g6IHN0cmluZyxcclxuICBwYXJlbnRUYWJsZU5hbWU6IHN0cmluZyxcclxuICBwYXJlbnRSb3dIYXNoOiBzdHJpbmcsXHJcbikgPT4ge1xyXG4gIGNvbnN0IHJlZmVyZW5jZXNGb3JDaGlsZFRhYmxlID0gKHJlc3VsdFtjaGlsZFRhYmxlTmFtZV0gPz89IHt9KTtcclxuICBjb25zdCByZWZlcmVuY2VzRm9yQ2hpbGRUYWJsZVJvdyA9IChyZWZlcmVuY2VzRm9yQ2hpbGRUYWJsZVtjaGlsZFJvd0hhc2hdID8/PVxyXG4gICAge30pO1xyXG5cclxuICByZWZlcmVuY2VzRm9yQ2hpbGRUYWJsZVJvd1twYXJlbnRUYWJsZU5hbWVdID8/PSB7fTtcclxuICByZWZlcmVuY2VzRm9yQ2hpbGRUYWJsZVJvd1twYXJlbnRUYWJsZU5hbWVdW3BhcmVudFJvd0hhc2hdID8/PSB7fTtcclxufTtcclxuIl0sIm5hbWVzIjpbImUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTtBQXVCTyxNQUFNLFdBQU4sTUFBTSxTQUFRO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUtuQixZQUE0QixJQUFRO0FBaUNwQztBQUFBO0FBQUE7QUFBQSw4Q0FBcUIsWUFBWTtB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
608
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW8uanMiLCJzb3VyY2VzIjpbIi4uL3NyYy9pby10b29scy50cyIsIi4uL3NyYy9pby1tZW0udHMiLCIuLi9zcmMvaW8tdGVzdC1zZXR1cC50cyIsIi4uL3NyYy9pby50cyIsIi4uL3NyYy9yZXZlcnNlLXJlZi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAbGljZW5zZVxyXG4vLyBDb3B5cmlnaHQgKGMpIDIwMjUgUmxqc29uXHJcbi8vXHJcbi8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRlcm1zIHRoYXQgY2FuIGJlXHJcbi8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhpcyBwYWNrYWdlLlxyXG5cclxuaW1wb3J0IHsgaGlwIH0gZnJvbSAnQHJsanNvbi9oYXNoJztcclxuaW1wb3J0IHtcclxuICBpdGVyYXRlVGFibGVzLFxyXG4gIFJsanNvbixcclxuICBUYWJsZUNmZyxcclxuICBUYWJsZUtleSxcclxuICBUYWJsZVR5cGUsXHJcbiAgdGhyb3dPbkludmFsaWRUYWJsZUNmZyxcclxuICB2YWxpZGF0ZVJsanNvbkFnYWluc3RUYWJsZUNmZyxcclxufSBmcm9tICdAcmxqc29uL3JsanNvbic7XHJcblxyXG5pbXBvcnQgeyBJb01lbSB9IGZyb20gJy4vaW8tbWVtLnRzJztcclxuaW1wb3J0IHsgSW8gfSBmcm9tICcuL2lvLnRzJztcclxuXHJcbi8qKlxyXG4gKiBQcm92aWRlcyB1dGlsaXR5IGZ1bmN0aW9ucyBmb3IgdGhlIElvIGludGVyZmFjZS5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBJb1Rvb2xzIHtcclxuICAvKipcclxuICAgKiBDb25zdHJ1Y3RvclxyXG4gICAqIEBwYXJhbSBpbyBUaGUgSW8gaW50ZXJmYWNlIHRvIHVzZVxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBpbzogSW8pIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIHRhYmxlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHRhYmxlQ2ZncyB0YWJsZS5cclxuICAgKi9cclxuICBzdGF0aWMgZ2V0IHRhYmxlQ2Znc1RhYmxlQ2ZnKCkge1xyXG4gICAgY29uc3QgdGFibGVDZmcgPSBoaXA8VGFibGVDZmc+KHtcclxuICAgICAgX2hhc2g6ICcnLFxyXG4gICAgICBrZXk6ICd0YWJsZUNmZ3MnLFxyXG4gICAgICB0eXBlOiAnaW5ncmVkaWVudHMnLFxyXG4gICAgICBpc0hlYWQ6IGZhbHNlLFxyXG4gICAgICBpc1Jvb3Q6IGZhbHNlLFxyXG4gICAgICBpc1NoYXJlZDogdHJ1ZSxcclxuICAgICAgcHJldmlvdXM6ICcnLFxyXG5cclxuICAgICAgY29sdW1uczogW1xyXG4gICAgICAgIHsga2V5OiAnX2hhc2gnLCB0eXBlOiAnc3RyaW5nJyB9LFxyXG4gICAgICAgIHsga2V5OiAna2V5JywgdHlwZTogJ3N0cmluZycgfSxcclxuICAgICAgICB7IGtleTogJ3R5cGUnLCB0eXBlOiAnc3RyaW5nJyB9LFxyXG4gICAgICAgIHsga2V5OiAnaXNIZWFkJywgdHlwZTogJ2Jvb2xlYW4nIH0sXHJcbiAgICAgICAgeyBrZXk6ICdpc1Jvb3QnLCB0eXBlOiAnYm9vbGVhbicgfSxcclxuICAgICAgICB7IGtleTogJ2lzU2hhcmVkJywgdHlwZTogJ2Jvb2xlYW4nIH0sXHJcbiAgICAgICAgeyBrZXk6ICdwcmV2aW91cycsIHR5cGU6ICdzdHJpbmcnIH0sXHJcbiAgICAgICAgeyBrZXk6ICdjb2x1bW5zJywgdHlwZTogJ2pzb25BcnJheScgfSxcclxuICAgICAgXSxcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiB0YWJsZUNmZztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEluaXRpYWxpemVzIHRoZSByZXZpc2lvbnMgdGFibGUuXHJcbiAgICovXHJcbiAgaW5pdFJldmlzaW9uc1RhYmxlID0gYXN5bmMgKCkgPT4ge1xyXG4gICAgY29uc3QgdGFibGVDZmc6IFRhYmxlQ2ZnID0ge1xyXG4gICAgICBrZXk6ICdyZXZpc2lvbnMnLFxyXG4gICAgICB0eXBlOiAnaW5ncmVkaWVudHMnLFxyXG4gICAgICBpc0hlYWQ6IHRydWUsXHJcbiAgICAgIGlzUm9vdDogdHJ1ZSxcclxuICAgICAgaXNTaGFyZWQ6IGZhbHNlLFxyXG5cclxuICAgICAgY29sdW1uczogW1xyXG4gICAgICAgIHsga2V5OiAnX2hhc2gnLCB0eXBlOiAnc3RyaW5nJyB9LFxyXG4gICAgICAgIHsga2V5OiAndGFibGUnLCB0eXBlOiAnc3RyaW5nJyB9LFxyXG4gICAgICAgIHsga2V5OiAncHJlZGVjZXNzb3InLCB0eXBlOiAnc3RyaW5nJyB9LFxyXG4gICAgICAgIHsga2V5OiAnc3VjY2Vzc29yJywgdHlwZTogJ3N0cmluZycgfSxcclxuICAgICAgICB7IGtleTogJ3RpbWVzdGFtcCcsIHR5cGU6ICdudW1iZXInIH0sXHJcbiAgICAgICAgeyBrZXk6ICdpZCcsIHR5cGU6ICdzdHJpbmcnIH0sXHJcbiAgICAgIF0sXHJcbiAgICB9O1xyXG5cclxuICAgIGF3YWl0IHRoaXMuaW8uY3JlYXRlT3JFeHRlbmRUYWJsZSh7IHRhYmxlQ2ZnIH0pO1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIEV4YW1wbGUgb2JqZWN0IGZvciB0ZXN0IHB1cnBvc2VzXHJcbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgaW8gdG9vbHNcclxuICAgKi9cclxuICBzdGF0aWMgZXhhbXBsZSA9IGFzeW5jICgpID0+IHtcclxuICAgIGNvbnN0IGlvID0gYXdhaXQgSW9NZW0uZXhhbXBsZSgpO1xyXG4gICAgYXdhaXQgaW8uaW5pdCgpO1xyXG4gICAgYXdhaXQgaW8uaXNSZWFkeSgpO1xyXG4gICAgcmV0dXJuIG5ldyBJb1Rvb2xzKGlvKTtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBUaHJvd3MgaWYgdGhlIHRhYmxlIGRvZXMgbm90IGV4aXN0XHJcbiAgICovXHJcbiAgYXN5bmMgdGhyb3dXaGVuVGFibGVEb2VzTm90RXhpc3QodGFibGU6IFRhYmxlS2V5KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCBleGlzdHMgPSBhd2FpdCB0aGlzLmlvLnRhYmxlRXhpc3RzKHRhYmxlKTtcclxuICAgIGlmICghZXhpc3RzKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGFibGUgXCIke3RhYmxlfVwiIG5vdCBmb3VuZGApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVGhyb3dzIGlmIGFueSBvZiB0aGUgdGFibGVzIGluIHJsanNvbiBkbyBub3QgZXhpc3RcclxuICAgKiBAcGFyYW0gcmxqc29uIC0gVGhlIFJsanNvbiBvYmplY3QgdG8gY2hlY2tcclxuICAgKi9cclxuICBhc3luYyB0aHJvd1doZW5UYWJsZXNEb05vdEV4aXN0KHJsanNvbjogUmxqc29uKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0cnkge1xyXG4gICAgICBhd2FpdCBpdGVyYXRlVGFibGVzKHJsanNvbiwgYXN5bmMgKHRhYmxlS2V5KSA9PiB7XHJcbiAgICAgICAgY29uc3QgZXhpc3RzID0gYXdhaXQgdGhpcy5pby50YWJsZUV4aXN0cyh0YWJsZUtleSk7XHJcbiAgICAgICAgaWYgKCFleGlzdHMpIHtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVGFibGUgXCIke3RhYmxlS2V5fVwiIG5vdCBmb3VuZGApO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIGNvbnN0IG1pc3NpbmdUYWJsZXMgPSAoZSBhcyBBcnJheTxhbnk+KS5tYXAoKGUpID0+IGUudGFibGVLZXkpO1xyXG5cclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBUaGUgZm9sbG93aW5nIHRhYmxlcyBkbyBub3QgZXhpc3Q6ICR7bWlzc2luZ1RhYmxlcy5qb2luKCcsICcpfWAsXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHRhYmxlIGNmZ3Mgb2YgYWxsIHRhYmxlc1xyXG4gICAqIEByZXR1cm5zIFRoZSB0YWJsZSBjb25maWd1cmF0aW9uIG9mIGFsbCB0YWJsZXNcclxuICAgKi9cclxuICBhc3luYyB0YWJsZUNmZ3MoKTogUHJvbWlzZTxUYWJsZUNmZ1tdPiB7XHJcbiAgICBjb25zdCB0YWJsZXMgPSBhd2FpdCB0aGlzLmlvLnJhd1RhYmxlQ2ZncygpO1xyXG5cclxuICAgIC8vIFRha2UgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIGVhY2ggdHlwZSBrZXlcclxuICAgIGNvbnN0IG5ld2VzdFZlcnNpb246IFJlY29yZDxUYWJsZUtleSwgVGFibGVDZmc+ID0ge307XHJcbiAgICBmb3IgKGxldCBpID0gdGFibGVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgIGNvbnN0IHRhYmxlID0gdGFibGVzW2ldO1xyXG4gICAgICBjb25zdCBleGlzdGluZyA9IG5ld2VzdFZlcnNpb25bdGFibGUua2V5XTtcclxuICAgICAgLyogdjggaWdub3JlIHN0YXJ0ICovXHJcbiAgICAgIGlmICghZXhpc3RpbmcgfHwgZXhpc3RpbmcuY29sdW1ucy5sZW5ndGggPCB0YWJsZS5jb2x1bW5zLmxlbmd0aCkge1xyXG4gICAgICAgIG5ld2VzdFZlcnNpb25bdGFibGUua2V5XSA9IHRhYmxlO1xyXG4gICAgICB9XHJcbiAgICAgIC8qIHY4IGlnbm9yZSBlbmQgKi9cclxuICAgIH1cclxuXHJcbiAgICAvLyBTb3J0IHRoZSB0YWJsZXMgYnkga2V5XHJcbiAgICBjb25zdCByZXN1bHREYXRhID0gT2JqZWN0LnZhbHVlcyhuZXdlc3RWZXJzaW9uKS5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgIGlmIChhLmtleSA8IGIua2V5KSB7XHJcbiAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChhLmtleSA+IGIua2V5KSB7XHJcbiAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgLyogdjggaWdub3JlIHN0YXJ0ICovXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiAwO1xyXG4gICAgICAvKiB2OCBpZ25vcmUgZW5kICovXHJcbiAgICB9KTtcclxuICAgIHJldHVybiByZXN1bHREYXRhO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyBhIGxpc3Qgd2l0aCBhbGwgdGFibGUgbmFtZXNcclxuICAgKi9cclxuICBhc3luYyBhbGxUYWJsZUtleXMoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xyXG4gICAgY29uc3QgcmVzdWx0ID0gKGF3YWl0IHRoaXMudGFibGVDZmdzKCkpLm1hcCgoZSkgPT4gZS5rZXkpO1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIGNvbmZpZ3VyYXRpb24gb2YgYSBnaXZlbiB0YWJsZVxyXG4gICAqL1xyXG4gIGFzeW5jIHRhYmxlQ2ZnKHRhYmxlOiBUYWJsZUtleSk6IFByb21pc2U8VGFibGVDZmc+IHtcclxuICAgIGNvbnN0IHRhYmxlQ2ZnID0gYXdhaXQgdGhpcy50YWJsZUNmZ09yTnVsbCh0YWJsZSk7XHJcbiAgICBpZiAoIXRhYmxlQ2ZnKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGFibGUgXCIke3RhYmxlfVwiIG5vdCBmb3VuZGApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0YWJsZUNmZyE7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBjb25maWd1cmF0aW9uIG9mIGEgZ2l2ZW4gdGFibGUgb3IgbnVsbCBpZiBpdCBkb2VzIG5vdCBleGlzdC5cclxuXHJcbiAgICovXHJcbiAgYXN5bmMgdGFibGVDZmdPck51bGwodGFibGU6IFRhYmxlS2V5KTogUHJvbWlzZTxUYWJsZUNmZyB8IG51bGw+IHtcclxuICAgIGNvbnN0IHRhYmxlQ2ZncyA9IGF3YWl0IHRoaXMudGFibGVDZmdzKCk7XHJcbiAgICBjb25zdCB0YWJsZUNmZyA9IHRhYmxlQ2Zncy5maW5kKChlKSA9PiBlLmtleSA9PT0gdGFibGUpO1xyXG4gICAgcmV0dXJuIHRhYmxlQ2ZnID8/IG51bGw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBhbGwgY29sdW1uIG5hbWVzIG9mIGEgZ2l2ZW4gdGFibGVcclxuICAgKi9cclxuICBhc3luYyBhbGxDb2x1bW5LZXlzKHRhYmxlOiBUYWJsZUtleSk6IFByb21pc2U8c3RyaW5nW10+IHtcclxuICAgIGNvbnN0IHRhYmxlQ2ZnID0gYXdhaXQgdGhpcy50YWJsZUNmZyh0YWJsZSk7XHJcbiAgICBjb25zdCByZXN1bHQgPSB0YWJsZUNmZy5jb2x1bW5zLm1hcCgoY29sdW1uKSA9PiBjb2x1bW4ua2V5KTtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUaHJvd3Mgd2hlbiBhIGNvbHVtbiBkb2VzIG5vdCBleGlzdCBpbiBhIGdpdmVuIHRhYmxlXHJcbiAgICogQHBhcmFtIHRhYmxlIC0gVGhlIHRhYmxlIHRvIGNoZWNrXHJcbiAgICogQHBhcmFtIGNvbHVtbnMgLSBUaGUgY29sdW1uIHRvIGNoZWNrXHJcbiAgICovXHJcbiAgYXN5bmMgdGhyb3dXaGVuQ29sdW1uRG9lc05vdEV4aXN0KFxyXG4gICAgdGFibGU6IFRhYmxlS2V5LFxyXG4gICAgY29sdW1uczogc3RyaW5nW10sXHJcbiAgKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCB0YWJsZUNmZyA9IGF3YWl0IHRoaXMudGFibGVDZmcodGFibGUpO1xyXG4gICAgY29uc3QgY29sdW1uS2V5cyA9IHRhYmxlQ2ZnLmNvbHVtbnMubWFwKChjb2x1bW4pID0+IGNvbHVtbi5rZXkpO1xyXG4gICAgY29uc3QgbWlzc2luZ0NvbHVtbnMgPSBjb2x1bW5zLmZpbHRlcihcclxuICAgICAgKGNvbHVtbikgPT4gIWNvbHVtbktleXMuaW5jbHVkZXMoY29sdW1uKSxcclxuICAgICk7XHJcbiAgICBpZiAobWlzc2luZ0NvbHVtbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYFRoZSBmb2xsb3dpbmcgY29sdW1ucyBkbyBub3QgZXhpc3QgaW4gdGFibGUgXCIke3RhYmxlfVwiOiAke21pc3NpbmdDb2x1bW5zLmpvaW4oXHJcbiAgICAgICAgICAnLCAnLFxyXG4gICAgICAgICl9LmAsXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUaHJvd3Mgd2hlbiBhIHRhYmxlIHVwZGF0ZSBpcyBub3QgY29tcGF0aWJsZSB3aXRoIHRoZSBjdXJyZW50IHRhYmxlXHJcbiAgICogY29uZmlndXJhdGlvbi5cclxuICAgKi9cclxuICBhc3luYyB0aHJvd1doZW5UYWJsZUlzTm90Q29tcGF0aWJsZSh1cGRhdGU6IFRhYmxlQ2ZnKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCBwcmVmaXggPSBgSW52YWxpZCB1cGRhdGUgb2YgdGFibGUgYWJsZSBcIiR7dXBkYXRlLmtleX1cImA7XHJcblxyXG4gICAgdGhyb3dPbkludmFsaWRUYWJsZUNmZyh1cGRhdGUpO1xyXG5cclxuICAgIC8vIENoZWNrIGNvbXBhdGliaWxpdHkgd2l0aCBleGlzdGluZyB0YWJsZVxyXG4gICAgY29uc3QgZXhpc3RpbmcgPSBhd2FpdCB0aGlzLnRhYmxlQ2ZnT3JOdWxsKHVwZGF0ZS5rZXkpO1xyXG4gICAgaWYgKGV4aXN0aW5nKSB7XHJcbiAgICAgIC8vIEhhdmUgY29sdW1ucyBiZWVuIGRlbGV0ZWQ/XHJcbiAgICAgIGlmIChleGlzdGluZy5jb2x1bW5zLmxlbmd0aCA+IHVwZGF0ZS5jb2x1bW5zLmxlbmd0aCkge1xyXG4gICAgICAgIGNvbnN0IGRlbGV0ZWRDb2x1bW5LZXlzID0gZXhpc3RpbmcuY29sdW1uc1xyXG4gICAgICAgICAgLm1hcCgoY29sdW1uKSA9PiBjb2x1bW4ua2V5KVxyXG4gICAgICAgICAgLmZpbHRlcihcclxuICAgICAgICAgICAgKGtleSkgPT4gIXVwZGF0ZS5jb2x1bW5zLnNvbWUoKGNvbHVtbikgPT4gY29sdW1uLmtleSA9PT0ga2V5KSxcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgaWYgKGRlbGV0ZWRDb2x1bW5LZXlzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGNvbnN0IGRlbGV0ZWRDb2x1bW5zID0gZGVsZXRlZENvbHVtbktleXMuam9pbignLCAnKTtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgICAgYCR7cHJlZml4fTogQ29sdW1ucyBtdXN0IG5vdCBiZSBkZWxldGVkLiBgICtcclxuICAgICAgICAgICAgICBgRGVsZXRlZCBjb2x1bW5zOiAke2RlbGV0ZWRDb2x1bW5zfX1gLFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIEhhdmUgY29sdW1uIGtleXMgY2hhbmdlZD9cclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBleGlzdGluZy5jb2x1bW5zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgYmVmb3JlID0gZXhpc3RpbmcuY29sdW1uc1tpXS5rZXk7XHJcbiAgICAgICAgY29uc3QgYWZ0ZXIgPSB1cGRhdGUuY29sdW1uc1tpXS5rZXk7XHJcbiAgICAgICAgaWYgKGJlZm9yZSAhPT0gYWZ0ZXIpIHtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgICAgYCR7cHJlZml4fTogYCArXHJcbiAgICAgICAgICAgICAgYENvbHVtbiBrZXlzIG11c3Qgbm90IGNoYW5nZSEgYCArXHJcbiAgICAgICAgICAgICAgYENvbHVtbiBcIiR7YmVmb3JlfVwiIHdhcyByZW5hbWVkIGludG8gXCIke2FmdGVyfVwiLmAsXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gSGF2ZSBjb2x1bW4gdHlwZXMgY2hhbmdlZD9cclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBleGlzdGluZy5jb2x1bW5zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgY29sdW1uID0gZXhpc3RpbmcuY29sdW1uc1tpXS5rZXk7XHJcbiAgICAgICAgY29uc3QgYmVmb3JlID0gZXhpc3RpbmcuY29sdW1uc1tpXS50eXBlO1xyXG4gICAgICAgIGNvbnN0IGFmdGVyID0gdXBkYXRlLmNvbHVtbnNbaV0udHlwZTtcclxuICAgICAgICBpZiAoYmVmb3JlICE9PSBhZnRlcikge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgICBgJHtwcmVmaXh9OiBgICtcclxuICAgICAgICAgICAgICBgQ29sdW1uIHR5cGVzIG11c3Qgbm90IGNoYW5nZSEgYCArXHJcbiAgICAgICAgICAgICAgYFR5cGUgb2YgY29sdW1uIFwiJHtjb2x1bW59XCIgd2FzIGNoYW5nZWQgZnJvbSBcIiR7YmVmb3JlfVwiIHRvICR7YWZ0ZXJ9LmAsXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVGhyb3dzIGlmIHRoZSBkYXRhIGluIHRoZSB0YWJsZSBkbyBub3QgbWF0Y2ggdGhlIHRhYmxlIGNvbmZpZ3VyYXRpb25cclxuICAgKi9cclxuICBhc3luYyB0aHJvd1doZW5UYWJsZURhdGFEb2VzTm90TWF0Y2hDZmcoZGF0YTogUmxqc29uKSB7XHJcbiAgICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XHJcblxyXG4gICAgYXdhaXQgaXRlcmF0ZVRhYmxlcyhkYXRhLCBhc3luYyAodGFibGVLZXkpID0+IHtcclxuICAgICAgY29uc3QgdGFibGVDZmcgPSBhd2FpdCB0aGlzLnRhYmxlQ2ZnKHRhYmxlS2V5KTtcclxuICAgICAgY29uc3QgdGFibGUgPSBkYXRhW3RhYmxlS2V5XTtcclxuICAgICAgZXJyb3JzLnB1c2goLi4udmFsaWRhdGVSbGpzb25BZ2FpbnN0VGFibGVDZmcodGFibGUuX2RhdGEsIHRhYmxlQ2ZnKSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBUYWJsZSBkYXRhIGRvZXMgbm90IG1hdGNoIHRoZSBjb25maWd1cmF0aW9uLlxcblxcbkVycm9yczpcXG4ke2Vycm9yc1xyXG4gICAgICAgICAgLm1hcCgoZSkgPT4gYC0gJHtlfWApXHJcbiAgICAgICAgICAuam9pbignXFxuJyl9YCxcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNvcnRzIHRoZSBkYXRhIG9mIGEgdGFibGUgYnkgdGhlIGhhc2ggYW5kIHVwZGF0ZXMgdGhlIHRhYmxlIGhhc2ggaW4gcGxhY2VcclxuICAgKi9cclxuICBzb3J0VGFibGVEYXRhQW5kVXBkYXRlSGFzaCh0YWJsZTogVGFibGVUeXBlKTogdm9pZCB7XHJcbiAgICB0YWJsZS5fZGF0YS5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgIGNvbnN0IGhhc2hBID0gYS5faGFzaCBhcyBzdHJpbmc7XHJcbiAgICAgIGNvbnN0IGhhc2hCID0gYi5faGFzaCBhcyBzdHJpbmc7XHJcbiAgICAgIGlmIChoYXNoQSA8IGhhc2hCKSB7XHJcbiAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChoYXNoQSA+IGhhc2hCKSB7XHJcbiAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgLyogdjggaWdub3JlIHN0YXJ0ICovXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiAwO1xyXG4gICAgICAvKiB2OCBpZ25vcmUgZW5kICovXHJcbiAgICB9KTtcclxuXHJcbiAgICB0YWJsZS5faGFzaCA9ICcnO1xyXG4gICAgaGlwKHRhYmxlLCB7XHJcbiAgICAgIHVwZGF0ZUV4aXN0aW5nSGFzaGVzOiBmYWxzZSxcclxuICAgICAgdGhyb3dPbldyb25nSGFzaGVzOiBmYWxzZSxcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iLCIvLyBAbGljZW5zZVxyXG4vLyBDb3B5cmlnaHQgKGMpIDIwMjUgUmxqc29uXHJcbi8vXHJcbi8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRlcm1zIHRoYXQgY2FuIGJlXHJcbi8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhpcyBwYWNrYWdlLlxyXG5cclxuaW1wb3J0IHsgaGlwLCBoc2ggfSBmcm9tICdAcmxqc29uL2hhc2gnO1xyXG5pbXBvcnQgeyBJc1JlYWR5IH0gZnJvbSAnQHJsanNvbi9pcy1yZWFkeSc7XHJcbmltcG9ydCB7IGNvcHksIGVxdWFscywgSnNvblZhbHVlIH0gZnJvbSAnQHJsanNvbi9qc29uJztcclxuaW1wb3J0IHtcclxuICBpdGVyYXRlVGFibGVzU3luYyxcclxuICBSbGpzb24sXHJcbiAgVGFibGVDZmcsXHJcbiAgVGFibGVLZXksXHJcbiAgVGFibGVUeXBlLFxyXG59IGZyb20gJ0BybGpzb24vcmxqc29uJztcclxuXHJcbmltcG9ydCB7IElvVG9vbHMgfSBmcm9tICcuL2lvLXRvb2xzLnRzJztcclxuaW1wb3J0IHsgSW8gfSBmcm9tICcuL2lvLnRzJztcclxuXHJcbi8qKlxyXG4gKiBJbi1NZW1vcnkgaW1wbGVtZW50YXRpb24gb2YgdGhlIFJsanNvbiBJbyBpbnRlcmZhY2UuXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgSW9NZW0gaW1wbGVtZW50cyBJbyB7XHJcbiAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXHJcbiAgLy8gQ29uc3RydWN0b3IgJiBleGFtcGxlXHJcblxyXG4gIGluaXQoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLl9pc09wZW4gPSB0cnVlO1xyXG4gICAgcmV0dXJuIHRoaXMuX2luaXQoKTtcclxuICB9XHJcblxyXG4gIGNsb3NlKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5faXNPcGVuID0gZmFsc2U7XHJcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgaXNPcGVuKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lzT3BlbjtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBleGFtcGxlID0gYXN5bmMgKCkgPT4ge1xyXG4gICAgcmV0dXJuIG5ldyBJb01lbSgpO1xyXG4gIH07XHJcblxyXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxyXG4gIC8vIEdlbmVyYWxcclxuICBpc1JlYWR5KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lzUmVhZHkucHJvbWlzZTtcclxuICB9XHJcblxyXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxyXG4gIC8vIER1bXBcclxuXHJcbiAgZHVtcCgpOiBQcm9taXNlPFJsanNvbj4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2R1bXAoKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGR1bXBUYWJsZShyZXF1ZXN0OiB7IHRhYmxlOiBzdHJpbmcgfSk6IFByb21pc2U8Umxqc29uPiB7XHJcbiAgICByZXR1cm4gdGhpcy5fZHVtcFRhYmxlKHJlcXVlc3QpO1xyXG4gIH1cclxuXHJcbiAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXHJcbiAgLy8gUm93c1xyXG5cclxuICByZWFkUm93cyhyZXF1ZXN0OiB7XHJcbiAgICB0YWJsZTogc3RyaW5nO1xyXG4gICAgd2hlcmU6IHsgW2NvbHVtbjogc3RyaW5nXTogSnNvblZhbHVlIH07XHJcbiAgfSk6IFByb21pc2U8Umxqc29uPiB7XHJcbiAgICByZXR1cm4gdGhpcy5fcmVhZFJvd3MocmVxdWVzdCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyByb3dDb3VudCh0YWJsZTogc3RyaW5nKTogUHJvbWlzZTxudW1iZXI+IHtcclxuICAgIGNvbnN0IHRhYmxlRGF0YSA9IHRoaXMuX21lbVt0YWJsZV0gYXMgVGFibGVUeXBlO1xyXG4gICAgaWYgKCF0YWJsZURhdGEpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUYWJsZSBcIiR7dGFibGV9XCIgbm90IGZvdW5kYCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRhYmxlRGF0YS5fZGF0YS5sZW5ndGgpO1xyXG4gIH1cclxuXHJcbiAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXHJcbiAgLy8gV3JpdGVcclxuXHJcbiAgd3JpdGUocmVxdWVzdDogeyBkYXRhOiBSbGpzb24gfSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3dyaXRlKHJlcXVlc3QpO1xyXG4gIH1cclxuXHJcbiAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXHJcbiAgLy8gVGFibGUgbWFuYWdlbWVudFxyXG4gIGFzeW5jIHRhYmxlRXhpc3RzKHRhYmxlS2V5OiBUYWJsZUtleSk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgY29uc3QgdGFibGUgPSB0aGlzLl9tZW1bdGFibGVLZXldIGFzIFRhYmxlVHlwZTtcclxuICAgIHJldHVybiB0YWJsZSA/IHRydWUgOiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGNyZWF0ZU9yRXh0ZW5kVGFibGUocmVxdWVzdDogeyB0YWJsZUNmZzogVGFibGVDZmcgfSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZU9yRXh0ZW5kVGFibGUocmVxdWVzdCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyByYXdUYWJsZUNmZ3MoKTogUHJvbWlzZTxUYWJsZUNmZ1tdPiB7XHJcbiAgICBjb25zdCB0YWJsZXMgPSB0aGlzLl9tZW0udGFibGVDZmdzLl9kYXRhIGFzIFRhYmxlQ2ZnW107XHJcbiAgICByZXR1cm4gdGFibGVzO1xyXG4gIH1cclxuXHJcbiAgLy8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xyXG4gIC8vIFByaXZhdGVcclxuICAvLyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXHJcblxyXG4gIHByaXZhdGUgX2lvVG9vbHMhOiBJb1Rvb2xzO1xyXG5cclxuICBwcml2YXRlIF9pc1JlYWR5ID0gbmV3IElzUmVhZHkoKTtcclxuICBwcml2YXRlIF9pc09wZW4gPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBfbWVtOiBSbGpzb24gPSBoaXAoe30gYXMgUmxqc29uKTtcclxuXHJcbiAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXHJcbiAgcHJpdmF0ZSBhc3luYyBfaW5pdCgpIHtcclxuICAgIHRoaXMuX2lvVG9vbHMgPSBuZXcgSW9Ub29scyh0aGlzKTtcclxuICAgIHRoaXMuX2luaXRUYWJsZUNmZ3MoKTtcclxuICAgIHRoaXMuX3VwZGF0ZUdsb2JhbEhhc2goKTtcclxuICAgIGF3YWl0IHRoaXMuX2lvVG9vbHMuaW5pdFJldmlzaW9uc1RhYmxlKCk7XHJcbiAgICBoc2godGhpcy5fbWVtKTtcclxuXHJcbiAgICB0aGlzLl9pc1JlYWR5LnJlc29sdmUoKTtcclxuICB9XHJcblxyXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxyXG4gIHByaXZhdGUgX2luaXRUYWJsZUNmZ3MgPSAoKSA9PiB7XHJcbiAgICBjb25zdCB0YWJsZUNmZyA9IElvVG9vbHMudGFibGVDZmdzVGFibGVDZmc7XHJcblxyXG4gICAgdGhpcy5fbWVtLnRhYmxlQ2ZncyA9IGhpcCh7XHJcbiAgICAgIF9kYXRhOiBbdGFibGVDZmddLFxyXG4gICAgICBfdGFibGVDZmc6IHRhYmxlQ2ZnLl9oYXNoIGFzIHN0cmluZyxcclxuICAgIH0pO1xyXG4gIH07XHJcblxyXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxyXG4gIHByaXZhdGUgX3VwZGF0ZUdsb2JhbEhhc2goKSB7XHJcbiAgICAodGhpcy5fbWVtIGFzIGFueSkuX2hhc2ggPSAnJztcclxuICAgIGhpcCh0aGlzLl9tZW0sIHtcclxuICAgICAgdXBkYXRlRXhpc3RpbmdIYXNoZXM6IGZhbHNlLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cclxuICBwcml2YXRlIF91cGRhdGVUYWJsZUhhc2godGFibGVLZXk6IFRhYmxlS2V5KSB7XHJcbiAgICBjb25zdCB0YWJsZSA9IHRoaXMuX21lbVt0YWJsZUtleV0gYXMgVGFibGVUeXBlO1xyXG4gICAgdGFibGUuX2hhc2ggPSAnJztcclxuICAgIGhpcCh0YWJsZSwgeyB1cGRhdGVFeGlzdGluZ0hhc2hlczogZmFsc2UgfSk7XHJcbiAgfVxyXG5cclxuICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cclxuICBwcml2YXRlIGFzeW5jIF9jcmVhdGVPckV4dGVuZFRhYmxlKHJlcXVlc3Q6IHtcclxuICAgIHRhYmxlQ2ZnOiBUYWJsZUNmZztcclxuICB9KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgdGFibGUgY29uZmlnIGlzIGNvbXBhdGlibGVcclxuICAgIC8vIHdpdGggYW4gcG90ZW50aWFsIGV4aXN0aW5nIHRhYmxlXHJcbiAgICBjb25zdCB0YWJsZUNmZyA9IHJlcXVlc3QudGFibGVDZmc7XHJcbiAgICBhd2FpdCB0aGlzLl9pb1Rvb2xzLnRocm93V2hlblRhYmxlSXNOb3RDb21wYXRpYmxlKHRhYmxlQ2ZnKTtcclxuXHJcbiAgICBjb25zdCB7IGtleSB9ID0gdGFibGVDZmc7XHJcblxyXG4gICAgLy8gUmVjcmVhdGUgaGFzaGVzIGluIHRoZSBjYXNlIHRoZSBleGlzdGluZyBoYXNoZXMgYXJlIHdyb25nXHJcbiAgICBjb25zdCBuZXdDb25maWcgPSBoc2godGFibGVDZmcpO1xyXG5cclxuICAgIC8vIEZpbmQgYW4gZXhpc3RpbmcgdGFibGUgY29uZmlnIHdpdGggdGhlIHNhbWUgaGFzaFxyXG4gICAgY29uc3QgZXhpc3RpbmdDb25maWcgPSBhd2FpdCB0aGlzLl9pb1Rvb2xzLnRhYmxlQ2ZnT3JOdWxsKGtleSk7XHJcblxyXG4gICAgLy8gV3JpdGUgdGhlIG5ldyBjb25maWcgaW50byB0aGUgZGF0YWJhc2VcclxuICAgIGlmICghZXhpc3RpbmdDb25maWcpIHtcclxuICAgICAgdGhpcy5fY3JlYXRlVGFibGUobmV3Q29uZmlnLCBrZXkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fZXh0ZW5kVGFibGUoZXhpc3RpbmdDb25maWcsIG5ld0NvbmZpZyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cclxuICBwcml2YXRlIF9jcmVhdGVUYWJsZShuZXdDb25maWc6IFRhYmxlQ2ZnLCB0YWJsZUtleTogVGFibGVLZXkpIHtcclxuICAgIC8vIFdyaXRlIHRoZSB0YWJsZSBjb25maWcgaW50byB0aGUgZGF0YWJhc2VcclxuICAgIG5ld0NvbmZpZyA9IGhzaChuZXdDb25maWcpO1xyXG4gICAgdGhpcy5fbWVtLnRhYmxlQ2Zncy5fZGF0YS5wdXNoKG5ld0NvbmZpZyk7XHJcbiAgICB0aGlzLl9pb1Rvb2xzLnNvcnRUYWJsZURhdGFBbmRVcGRhdGVIYXNoKHRoaXMuX21lbS50YWJsZUNmZ3MpO1xyXG5cclxuICAgIC8vIENyZWF0ZSBhIHRhYmxlIGFuZCB3cml0ZSBpdCBpbnRvIHRoZSBkYXRhYmFzZVxyXG4gICAgY29uc3QgdGFibGU6IFRhYmxlVHlwZSA9IHtcclxuICAgICAgX2RhdGE6IFtdLFxyXG4gICAgICBfdGFibGVDZmc6IG5ld0NvbmZpZy5faGFzaCBhcyBzdHJpbmcsXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuX21lbVt0YWJsZUtleV0gPz89IGhpcCh0YWJsZSk7XHJcblxyXG4gICAgLy8gVXBkYXRlIGhhc2hlc1xyXG4gICAgdGhpcy5fdXBkYXRlVGFibGVIYXNoKHRhYmxlS2V5KTtcclxuICAgIHRoaXMuX3VwZGF0ZUdsb2JhbEhhc2goKTtcclxuICB9XHJcblxyXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxyXG4gIHByaXZhdGUgX2V4dGVuZFRhYmxlKGV4aXN0aW5nQ29uZmlnOiBUYWJsZUNmZywgbmV3Q29uZmlnOiBUYWJsZUNmZykge1xyXG4gICAgLy8gTm8gY29sdW1ucyBhZGRlZD8gUmV0dXJuLlxyXG4gICAgaWYgKGV4aXN0aW5nQ29uZmlnLmNvbHVtbnMubGVuZ3RoID09PSBuZXdDb25maWcuY29sdW1ucy5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFdyaXRlIHRoZSBuZXcgdGFibGUgY29uZmlnIGludG8gdGhlIGRhdGFiYXNlXHJcbiAgICBuZXdDb25maWcgPSBoc2gobmV3Q29uZmlnKTtcclxuICAgIHRoaXMuX21lbS50YWJsZUNmZ3MuX2RhdGEucHVzaChuZXdDb25maWcpO1xyXG4gICAgdGhpcy5faW9Ub29scy5zb3J0VGFibGVEYXRhQW5kVXBkYXRlSGFzaCh0aGlzLl9tZW0udGFibGVDZmdzKTtcclxuXHJcbiAgICAvLyBVcGRhdGUgdGhlIGNvbmZpZyBvZiB0aGUgZXhpc3RpbmcgdGFibGVcclxuICAgIGNvbnN0IHRhYmxlID0gdGhpcy5fbWVtW25ld0NvbmZpZy5rZXldIGFzIFRhYmxlVHlwZTtcclxuICAgIHRhYmxlLl90YWJsZUNmZyA9IG5ld0NvbmZpZy5faGFzaCBhcyBzdHJpbmc7XHJcblxyXG4gICAgLy8gVXBkYXRlIHRoZSBoYXNoZXNcclxuICAgIHRoaXMuX3VwZGF0ZVRhYmxlSGFzaChuZXdDb25maWcua2V5KTtcclxuICAgIHRoaXMuX3VwZGF0ZUdsb2JhbEhhc2goKTtcclxuICB9XHJcblxyXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9kdW1wKCk6IFByb21pc2U8Umxqc29uPiB7XHJcbiAgICByZXR1cm4gY29weSh0aGlzLl9tZW0pO1xyXG4gIH1cclxuXHJcbiAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXHJcbiAgcHJpdmF0ZSBhc3luYyBfZHVtcFRhYmxlKHJlcXVlc3Q6IHsgdGFibGU6IHN0cmluZyB9KTogUHJvbWlzZTxSbGpzb24+IHtcclxuICAgIGF3YWl0IHRoaXMuX2lvVG9vbHMudGhyb3dXaGVuVGFibGVEb2VzTm90RXhpc3QocmVxdWVzdC50YWJsZSk7XHJcblxyXG4gICAgY29uc3QgdGFibGUgPSB0aGlzLl9tZW1bcmVxdWVzdC50YWJsZV0gYXMgVGFibGVUeXBlO1xyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIFtyZXF1ZXN0LnRhYmxlXTogY29weSh0YWJsZSksXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXHJcbiAgcHJpdmF0ZSBhc3luYyBfd3JpdGUocmVxdWVzdDogeyBkYXRhOiBSbGpzb24gfSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3QgYWRkZWREYXRhID0gaHNoKHJlcXVlc3QuZGF0YSk7XHJcbiAgICB0aGlzLl9yZW1vdmVOdWxsVmFsdWVzKGFkZGVkRGF0YSk7XHJcbiAgICBjb25zdCB0YWJsZXMgPSBPYmplY3Qua2V5cyhhZGRlZERhdGEpO1xyXG4gICAgaHNoKGFkZGVkRGF0YSk7XHJcblxyXG4gICAgYXdhaXQgdGhpcy5faW9Ub29scy50aHJvd1doZW5UYWJsZXNEb05vdEV4aXN0KHJlcXVlc3QuZGF0YSk7XHJcbiAgICBhd2FpdCB0aGlzLl9pb1Rvb2xzLnRocm93V2hlblRhYmxlRGF0YURvZXNOb3RNYXRjaENmZyhyZXF1ZXN0LmRhdGEpO1xyXG5cclxuICAgIGZvciAoY29uc3QgdGFibGUgb2YgdGFibGVzKSB7XHJcbiAgICAgIGlmICh0YWJsZS5zdGFydHNXaXRoKCdfJykpIHtcclxuICAgICAgICBjb250aW51ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3Qgb2xkVGFibGUgPSB0aGlzLl9tZW1bdGFibGVdIGFzIFRhYmxlVHlwZTtcclxuICAgICAgY29uc3QgbmV3VGFibGUgPSBhZGRlZERhdGFbdGFibGVdIGFzIFRhYmxlVHlwZTtcclxuXHJcbiAgICAgIC8vIFRhYmxlIGV4aXN0cy4gTWVyZ2UgZGF0YVxyXG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgbmV3VGFibGUuX2RhdGEpIHtcclxuICAgICAgICBjb25zdCBoYXNoID0gaXRlbS5faGFzaDtcclxuICAgICAgICBjb25zdCBleGlzdHMgPSBvbGRUYWJsZS5fZGF0YS5maW5kKChpKSA9PiBpLl9oYXNoID09PSBoYXNoKTtcclxuICAgICAgICBpZiAoIWV4aXN0cykge1xyXG4gICAgICAgICAgb2xkVGFibGUuX2RhdGEucHVzaChpdGVtIGFzIGFueSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLl9pb1Rvb2xzLnNvcnRUYWJsZURhdGFBbmRVcGRhdGVIYXNoKG9sZFRhYmxlKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBSZWNhbGMgbWFpbiBoYXNoZXNcclxuICAgIHRoaXMuX3VwZGF0ZUdsb2JhbEhhc2goKTtcclxuICB9XHJcblxyXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxyXG4gIHByaXZhdGUgYXN5bmMgX3JlYWRSb3dzKHJlcXVlc3Q6IHtcclxuICAgIHRhYmxlOiBzdHJpbmc7XHJcbiAgICB3aGVyZTogeyBbY29sdW1uOiBzdHJpbmddOiBKc29uVmFsdWUgfTtcclxuICB9KTogUHJvbWlzZTxSbGpzb24+IHtcclxuICAgIGF3YWl0IHRoaXMuX2lvVG9vbHMudGhyb3dXaGVuVGFibGVEb2VzTm90RXhpc3QocmVxdWVzdC50YWJsZSk7XHJcbiAgICBhd2FpdCB0aGlzLl9pb1Rvb2xzLnRocm93V2hlbkNvbHVtbkRvZXNOb3RFeGlzdChcclxuICAgICAgcmVxdWVzdC50YWJsZSxcclxuICAgICAgT2JqZWN0LmtleXMocmVxdWVzdC53aGVyZSksXHJcbiAgICApO1xyXG5cclxuICAgIC8vIFJlYWQgdGFibGUgZnJvbSBkYXRhXHJcbiAgICBjb25zdCB0YWJsZSA9IHRoaXMuX21lbVtyZXF1ZXN0LnRhYmxlXSBhcyBUYWJsZVR5cGU7XHJcblxyXG4gICAgLy8gRmlsdGVyIHRhYmxlIGRhdGFcclxuICAgIGNvbnN0IHRhYmxlRGF0YUZpbHRlcmVkID0gdGFibGUuX2RhdGEuZmlsdGVyKChyb3cpID0+IHtcclxuICAgICAgZm9yIChjb25zdCBjb2x1bW4gaW4gcmVxdWVzdC53aGVyZSkge1xyXG4gICAgICAgIGNvbnN0IGEgPSByb3dbY29sdW1uXTtcclxuICAgICAgICBjb25zdCBiID0gcmVxdWVzdC53aGVyZVtjb2x1bW5dO1xyXG4gICAgICAgIGlmIChiID09PSBudWxsICYmIGEgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIWVxdWFscyhhLCBiKSkge1xyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIENyZWF0ZSBhbiB0YWJsZVxyXG4gICAgY29uc3QgdGFibGVGaWx0ZXJlZDogVGFibGVUeXBlID0ge1xyXG4gICAgICBfZGF0YTogdGFibGVEYXRhRmlsdGVyZWQsXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuX2lvVG9vbHMuc29ydFRhYmxlRGF0YUFuZFVwZGF0ZUhhc2godGFibGVGaWx0ZXJlZCk7XHJcblxyXG4gICAgY29uc3QgcmVzdWx0OiBSbGpzb24gPSB7XHJcbiAgICAgIFtyZXF1ZXN0LnRhYmxlXTogdGFibGVGaWx0ZXJlZCxcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIF9yZW1vdmVOdWxsVmFsdWVzKHJsanNvbjogUmxqc29uKSB7XHJcbiAgICBpdGVyYXRlVGFibGVzU3luYyhybGpzb24sICh0YWJsZSkgPT4ge1xyXG4gICAgICBjb25zdCBkYXRhID0gcmxqc29uW3RhYmxlXS5fZGF0YTtcclxuXHJcbiAgICAgIGZvciAoY29uc3Qgcm93IG9mIGRhdGEpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiByb3cpIHtcclxuICAgICAgICAgIGlmIChyb3dba2V5XSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICBkZWxldGUgcm93W2tleV07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuIiwiLy8gQGxpY2Vuc2VcclxuLy8gQ29weXJpZ2h0IChjKSAyMDI1IFJsanNvblxyXG4vL1xyXG4vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0ZXJtcyB0aGF0IGNhbiBiZVxyXG4vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoaXMgcGFja2FnZS5cclxuXHJcbmltcG9ydCB7IElvLCBJb01lbSB9IGZyb20gJy4vaW5kZXgudHMnO1xyXG5cclxuLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cclxuLyoqXHJcbiAqIElvIGltcGxlbWVudGF0aW9uIG5lZWQgdG8gaW1wbGVtZW50IHRoaXMgaW50ZXJmYWNlIHRvIGJlIHVzZWQgaW5cclxuICogY29uZm9ybWFuY2UgdGVzdHMuXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIElvVGVzdFNldHVwIHtcclxuICAvKiogc2V0dXAgYmVmb3JlIHRoZSBzaW5nbGUgc2V0dXBzICovXHJcbiAgYmVmb3JlQWxsOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xyXG5cclxuICAvKipcclxuICAgKiBJbml0aWFsaXplcyB0aGUgaW8gaW1wbGVtZW50YXRpb24uXHJcbiAgICogQHJldHVybnMgVGhlIGlvIGltcGxlbWVudGF0aW9uLlxyXG4gICAqL1xyXG4gIGJlZm9yZUVhY2g6ICgpID0+IFByb21pc2U8dm9pZD47XHJcblxyXG4gIC8qKlxyXG4gICAqIFRlYXJzIGRvd24gdGhlIGlvIGltcGxlbWVudGF0aW9uLlxyXG4gICAqIEByZXR1cm5zIFRoZSBpbyBpbXBsZW1lbnRhdGlvbi5cclxuICAgKi9cclxuICBhZnRlckVhY2g6ICgpID0+IFByb21pc2U8dm9pZD47XHJcblxyXG4gIC8qKiBjbGVhbnVwIGFmdGVyIGFsbCB0ZXN0cyAqL1xyXG4gIGFmdGVyQWxsOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgaW8gaW1wbGVtZW50YXRpb24gdG8gYmUgdXNlZCBpbiB0aGUgY29uZm9ybWFuY2UgdGVzdHMuXHJcbiAgICovXHJcbiAgaW86IElvO1xyXG59XHJcblxyXG4vLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxyXG4vLyBFeGFtcGxlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBJb1Rlc3RTZXR1cCBpbnRlcmZhY2VcclxuZXhwb3J0IGNvbnN0IGV4YW1wbGVUZXN0U2V0dXAgPSAoKTogSW9UZXN0U2V0dXAgPT4ge1xyXG4gIHJldHVybiB7XHJcbiAgICBpbzogbmV3IElvTWVtKCksXHJcbiAgICBiZWZvcmVBbGw6IGFzeW5jICgpID0+IHtcclxuICAgICAgLy8gVGhpcyBtZXRob2QgY2FuIGJlIHVzZWQgZm9yIGFueSBhZGRpdGlvbmFsIHNldHVwIHJlcXVpcmVkIGJlZm9yZSBpbml0LlxyXG4gICAgICAvLyBDdXJyZW50bHksIGl0IGRvZXMgbm90aGluZy5cclxuICAgIH0sXHJcblxyXG4gICAgYmVmb3JlRWFjaDogYXN5bmMgKCkgPT4ge1xyXG4gICAgICAvLyBJbml0aWFsaXplIHRoZSBpbyBpbXBsZW1lbnRhdGlvblxyXG4gICAgfSxcclxuICAgIGFmdGVyRWFjaDogYXN5bmMgKCkgPT4ge1xyXG4gICAgICAvLyBUZWFyIGRvd24gdGhlIGlvIGltcGxlbWVudGF0aW9uXHJcbiAgICB9LFxyXG5cclxuICAgIGFmdGVyQWxsOiBhc3luYyAoKSA9PiB7XHJcbiAgICAgIC8vIFRoaXMgbWV0aG9kIGNhbiBiZSB1c2VkIGZvciBhbnkgYWRkaXRpb25hbCBjbGVhbnVwIGFmdGVyIHRlYXJEb3duLlxyXG4gICAgfSxcclxuICB9O1xyXG59O1xyXG4iLCIvLyBAbGljZW5zZVxyXG4vLyBDb3B5cmlnaHQgKGMpIDIwMjUgUmxqc29uXHJcbi8vXHJcbi8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRlcm1zIHRoYXQgY2FuIGJlXHJcbi8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhpcyBwYWNrYWdlLlxyXG5cclxuaW1wb3J0IHsgSnNvblZhbHVlIH0gZnJvbSAnQHJsanNvbi9qc29uJztcclxuaW1wb3J0IHsgUmxqc29uLCBUYWJsZUNmZywgVGFibGVLZXkgfSBmcm9tICdAcmxqc29uL3JsanNvbic7XHJcblxyXG4vLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxyXG5leHBvcnQgaW50ZXJmYWNlIElvIHtcclxuICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cclxuICAvLyBHZW5lcmFsXHJcblxyXG4gIC8qKiBTdGFydHMgdGhlIGluaXRpYWxpemF0aW9uICovXHJcbiAgaW5pdCgpOiBQcm9taXNlPHZvaWQ+O1xyXG5cclxuICAvKiogQ2xvc2VzIHRoZSBpbyAqL1xyXG4gIGNsb3NlKCk6IFByb21pc2U8dm9pZD47XHJcblxyXG4gIC8qKiBSZXR1cm5zIHRydWUgaWYgaW8gaXMgb3BlbmVkICovXHJcbiAgaXNPcGVuOiBib29sZWFuO1xyXG5cclxuICAvKiogQSBwcm9taXNlIHJlc29sdmluZyBvbmNlIHRoZSBJbyBpbnRlcmZhY2UgaXMgcmVhZHlcclxuICAgKlxyXG4gICAqIPCfkqEgVXNlIEBybGpzb24vaXMtcmVhZHlcclxuICAgKi9cclxuICBpc1JlYWR5KCk6IFByb21pc2U8dm9pZD47XHJcblxyXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxyXG4gIC8vIER1bXBcclxuXHJcbiAgLyoqIFJldHVybnMgdGhlIGNvbXBsZXRlIGRiIGNvbnRlbnQgYXMgUmxqc29uICovXHJcbiAgZHVtcCgpOiBQcm9taXNlPFJsanNvbj47XHJcblxyXG4gIC8qKiBSZXR1cm5zIHRoZSBkdW1wIG9mIGEgY29tcGxldGUgdGFibGUgKi9cclxuICBkdW1wVGFibGUocmVxdWVzdDogeyB0YWJsZTogc3RyaW5nIH0pOiBQcm9taXNlPFJsanNvbj47XHJcblxyXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxyXG4gIC8vIFRhYmxlc1xyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHRhYmxlIGV4aXN0c1xyXG4gICAqL1xyXG4gIHRhYmxlRXhpc3RzKHRhYmxlS2V5OiBUYWJsZUtleSk6IFByb21pc2U8Ym9vbGVhbj47XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZXMgYSB0YWJsZSB3aXRoIGEgZ2l2ZW4gY29uZmlnLlxyXG4gICAqIElmIHRoZSB0YWJsZSBhbHJlYWR5IGV4aXN0cywgbmV3IGNvbHVtbnMgYXJlIGFkZGVkIHRvIHRoZSBleGlzdGluZyB0YWJsZS5cclxuICAgKiBJZiB0aGUgdGFibGUgZG9lcyBub3QgZXhpc3QsIGl0IGlzIGNyZWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gY29uZmlnLlxyXG4gICAqIElmIHRoZSB0YWJsZSBleGlzdHMgYW5kIGNvbHVtbnMgYXJlIHJlbW92ZWQsIGFuIGVycm9yIGlzIHRocm93bi5cclxuICAgKiBJZiB0aGUgdGFibGUgZXhpc3RzIGFuZCB0aGUgY29sdW1uIHR5cGUgaXMgY2hhbmdlZCwgYW4gZXJyb3IgaXMgdGhyb3duLlxyXG4gICAqL1xyXG4gIGNyZWF0ZU9yRXh0ZW5kVGFibGUocmVxdWVzdDogeyB0YWJsZUNmZzogVGFibGVDZmcgfSk6IFByb21pc2U8dm9pZD47XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgYSBqc29uIHN0cnVjdHVyZSByZXR1cm5pbmcgY3VycmVudCB0YWJsZSBjb25maWd1cmF0aW9uc1xyXG4gICAqL1xyXG4gIHJhd1RhYmxlQ2ZncygpOiBQcm9taXNlPFRhYmxlQ2ZnW10+O1xyXG5cclxuICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cclxuICAvLyBXcml0ZVxyXG5cclxuICAvKiogV3JpdGVzIFJsanNvbiBkYXRhIGludG8gdGhlIGRhdGFiYXNlICovXHJcbiAgd3JpdGUocmVxdWVzdDogeyBkYXRhOiBSbGpzb24gfSk6IFByb21pc2U8dm9pZD47XHJcblxyXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxyXG4gIC8vIFJlYWQgcm93c1xyXG5cclxuICAvKiogUXVlcmllcyBhIGxpc3Qgb2Ygcm93cyAqL1xyXG4gIHJlYWRSb3dzKHJlcXVlc3Q6IHtcclxuICAgIHRhYmxlOiBzdHJpbmc7XHJcbiAgICB3aGVyZTogeyBbY29sdW1uOiBzdHJpbmddOiBKc29uVmFsdWUgfCBudWxsIH07XHJcbiAgfSk6IFByb21pc2U8Umxqc29uPjtcclxuXHJcbiAgLyoqIFJldHVybnMgdGhlIG51bWJlciBvZiByb3dzIGluIHRoZSBnaXZlbiB0YWJsZSAqL1xyXG4gIHJvd0NvdW50KHRhYmxlOiBzdHJpbmcpOiBQcm9taXNlPG51bWJlcj47XHJcbn1cclxuXHJcbi8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXHJcbmV4cG9ydCBjb25zdCBleGFtcGxlSW8gPVxyXG4gICdDaGVja291dCBAcmxqc29uL2lvLW1lbSBmb3IgYW4gZXhhbXBsZSBpbXBsZW1lbnRhdGlvbic7XHJcbiIsIi8vIEBsaWNlbnNlXHJcbi8vIENvcHlyaWdodCAoYykgMjAyNSBSbGpzb25cclxuLy9cclxuLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGVybXMgdGhhdCBjYW4gYmVcclxuLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGlzIHBhY2thZ2UuXHJcblxyXG5pbXBvcnQgeyBKc29uIH0gZnJvbSAnQHJsanNvbi9qc29uJztcclxuaW1wb3J0IHtcclxuICBCdWZmZXQsXHJcbiAgQ2FrZSxcclxuICBpdGVyYXRlVGFibGVzU3luYyxcclxuICBMYXllcixcclxuICBSZWYsXHJcbiAgUmxqc29uLFxyXG4gIFRhYmxlS2V5LFxyXG59IGZyb20gJ0BybGpzb24vcmxqc29uJztcclxuXHJcbi8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXHJcbi8qKlxyXG4gKiBEZXNjcmliZXMgYSByb3cgdGhhdCByZWZlcmVuY2VzIGEgY2hpbGQgdGFibGUgcm93XHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIFBhcmVudFJlZiB7XHJcbiAgLyoqXHJcbiAgICogVGhlIHBhcmVudCB0YWJsZSB0aGF0IHJlZmVyZW5jZXMgdGhlIGNoaWxkIHRhYmxlXHJcbiAgICovXHJcbiAgW3BhcmVudFRhYmxlOiBUYWJsZUtleV06IHtcclxuICAgIC8qKlxyXG4gICAgICogVGhlIHBhcmVudCByb3cgdGhhdCByZWZlcmVuY2VzIHRoZSBjaGlsZCByb3dcclxuICAgICAqL1xyXG4gICAgW3BhcmVudFJvdzogUmVmXToge1xyXG4gICAgICAvKipcclxuICAgICAgICogRGV0YWlscyBhYm91dCB0aGUgcmVmZXJlbmNlLCBlLmcuIGFuIGFycmF5IGluZGV4IGV0Yy5cclxuICAgICAgICovXHJcbiAgICAgIGRldGFpbHM/OiBKc29uO1xyXG4gICAgfTtcclxuICB9O1xyXG59XHJcblxyXG4vLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxyXG4vKipcclxuICogRGVzY3JpYmVzIHRoZSBwYXJlbnQgdGFibGUgcm93cyByZWZlcmVuY2luZyBhIGNoaWxkIHRhYmxlIHJvd1xyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBSZXZlcnNlUmVmcyB7XHJcbiAgLyoqXHJcbiAgICogVGhlIGNoaWxkIHRhYmxlIHdlIG5lZWQgdGhlIHJlZmVyZW5jaW5nIHJvd3MgZm9yXHJcbiAgICovXHJcbiAgW2NoaWxkVGFibGU6IFRhYmxlS2V5XToge1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgcm93IGhhc2h3ZSBuZWVkIHRoZSByZWZlcmVuY2luZyByb3dzIGZvclxyXG4gICAgICovXHJcbiAgICBbY2hpbGRSb3c6IFJlZl06IFBhcmVudFJlZjtcclxuICB9O1xyXG59XHJcblxyXG4vKiB2OCBpZ25vcmUgc3RhcnQgKi9cclxuXHJcbi8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSByZXZlcnNlIHJlZmVyZW5jZXMgZm9yIGEgZ2l2ZW4gcmxqc29uIG9iamVjdFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGNhbGNSZXZlcnNlUmVmcyA9IChybGpzb246IFJsanNvbik6IFJldmVyc2VSZWZzID0+IHtcclxuICBjb25zdCByZXN1bHQ6IFJldmVyc2VSZWZzID0ge307XHJcblxyXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cclxuICAvLyBQcmVwYXJlIGRhdGEgc3RydWN0dXJlXHJcbiAgaXRlcmF0ZVRhYmxlc1N5bmMocmxqc29uLCAoY2hpbGRUYWJsZUtleSwgdGFibGUpID0+IHtcclxuICAgIGNvbnN0IGNoaWxkVGFibGU6IHsgW2NoaWxkUm93SGFzaDogc3RyaW5nXTogUGFyZW50UmVmIH0gPSB7fTtcclxuICAgIHJlc3VsdFtjaGlsZFRhYmxlS2V5XSA9IGNoaWxkVGFibGU7XHJcbiAgICBmb3IgKGNvbnN0IGNoaWxkUm93IG9mIHRhYmxlLl9kYXRhKSB7XHJcbiAgICAgIGNoaWxkVGFibGVbY2hpbGRSb3cuX2hhc2hdID0ge307XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cclxuICAvLyBHZW5lcmF0ZSByZXZlcnNlIHJlZmVyZW5jZXNcclxuICBpdGVyYXRlVGFibGVzU3luYyhybGpzb24sIChwYXJlbnRUYWJsZUtleSwgcGFyZW50VGFibGUpID0+IHtcclxuICAgIC8vIEl0ZXJhdGUgYWxsIHJvd3Mgb2YgZWFjaCB0YWJsZVxyXG4gICAgZm9yIChjb25zdCBwYXJlbnRUYWJsZVJvdyBvZiBwYXJlbnRUYWJsZS5fZGF0YSkge1xyXG4gICAgICAvLyBGaW5kIG91dCB3aGUgb3RoZXIgdGFibGVzICYgcm93cyBhcmUgcmVmZXJlbmNlZCBieSB0aGlzIHJvd1xyXG4gICAgICAvLyBXcml0ZSB0aGVzZSBpbmZvcm1hdGlvbiBpbnR0byByZXN1bHRcclxuICAgICAgc3dpdGNoIChwYXJlbnRUYWJsZS5fdHlwZSkge1xyXG4gICAgICAgIGNhc2UgJ2luZ3JlZGllbnRzJzpcclxuICAgICAgICAgIF93cml0ZUluZ3JlZGllbnRSZWZzKHBhcmVudFRhYmxlS2V5LCBwYXJlbnRUYWJsZVJvdywgcmVzdWx0KTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlICdsYXllcnMnOiB7XHJcbiAgICAgICAgICBfd3JpdGVMYXllclJlZnMocGFyZW50VGFibGVLZXksIHBhcmVudFRhYmxlUm93LCByZXN1bHQpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjYXNlICdzbGljZUlkcyc6IHtcclxuICAgICAgICAgIC8vIFNsaWNlIGlkcyBkbyBub3QgcmVmZXJlbmNlIG90aGVyIHRhYmxlc1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjYXNlICdjYWtlcyc6IHtcclxuICAgICAgICAgIF93cml0ZUNha2VSZWZzKHBhcmVudFRhYmxlS2V5LCBwYXJlbnRUYWJsZVJvdywgcmVzdWx0KTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY2FzZSAnYnVmZmV0cyc6IHtcclxuICAgICAgICAgIF93cml0ZUJ1ZmZldFJlZnMocGFyZW50VGFibGVLZXksIHBhcmVudFRhYmxlUm93LCByZXN1bHQpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIHJldHVybiByZXN1bHQ7XHJcbn07XHJcblxyXG4vKiB2OCBpZ25vcmUgZW5kICovXHJcblxyXG4vLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxyXG5jb25zdCBfd3JpdGVJbmdyZWRpZW50UmVmcyA9IChcclxuICBwYXJlbnRUYWJsZU5hbWU6IFRhYmxlS2V5LFxyXG4gIHBhcmVudFJvdzogSnNvbixcclxuICByZXN1bHQ6IFJldmVyc2VSZWZzLFxyXG4pID0+IHtcclxuICBjb25zdCBwYXJlbnRSb3dIYXNoID0gcGFyZW50Um93Ll9oYXNoIGFzIHN0cmluZztcclxuXHJcbiAgZm9yIChjb25zdCBwYXJlbnRDb2x1bW5OYW1lIGluIHBhcmVudFJvdykge1xyXG4gICAgaWYgKHBhcmVudENvbHVtbk5hbWUuc3RhcnRzV2l0aCgnXycpKSB7XHJcbiAgICAgIGNvbnRpbnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghcGFyZW50Q29sdW1uTmFtZS5lbmRzV2l0aCgnUmVmJykpIHtcclxuICAgICAgY29udGludWU7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY2hpbGRUYWJsZU5hbWUgPSBwYXJlbnRDb2x1bW5OYW1lLnNsaWNlKDAsIC0zKTtcclxuICAgIGNvbnN0IGNoaWxkUm93SGFzaCA9IHBhcmVudFJvd1twYXJlbnRDb2x1bW5OYW1lXSBhcyBzdHJpbmc7XHJcblxyXG4gICAgX3dyaXRlKFxyXG4gICAgICByZXN1bHQsXHJcbiAgICAgIGNoaWxkVGFibGVOYW1lLFxyXG4gICAgICBjaGlsZFJvd0hhc2gsXHJcbiAgICAgIHBhcmVudFRhYmxlTmFtZSxcclxuICAgICAgcGFyZW50Um93SGFzaCxcclxuICAgICk7XHJcbiAgfVxyXG59O1xyXG5cclxuLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cclxuY29uc3QgX3dyaXRlTGF5ZXJSZWZzID0gKFxyXG4gIHBhcmVudFRhYmxlTmFtZTogVGFibGVLZXksXHJcbiAgcGFyZW50Um93OiBMYXllcixcclxuICByZXN1bHQ6IFJldmVyc2VSZWZzLFxyXG4pID0+IHtcclxuICBjb25zdCBjaGlsZFRhYmxlTmFtZSA9IHBhcmVudFJvdy5pbmdyZWRpZW50c1RhYmxlO1xyXG4gIGNvbnN0IHBhcmVudFJvd0hhc2ggPSBwYXJlbnRSb3cuX2hhc2ggYXMgc3RyaW5nO1xyXG5cclxuICBmb3IgKGNvbnN0IHNsaWNlSWQgaW4gcGFyZW50Um93LmFzc2lnbikge1xyXG4gICAgaWYgKHNsaWNlSWQuc3RhcnRzV2l0aCgnXycpKSB7XHJcbiAgICAgIGNvbnRpbnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHNsaWNlSGFzaCA9IHBhcmVudFJvdy5hc3NpZ25bc2xpY2VJZF0gYXMgc3RyaW5nO1xyXG5cclxuICAgIF93cml0ZShyZXN1bHQsIGNoaWxkVGFibGVOYW1lLCBzbGljZUhhc2gsIHBhcmVudFRhYmxlTmFtZSwgcGFyZW50Um93SGFzaCk7XHJcbiAgfVxyXG59O1xyXG5cclxuLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cclxuY29uc3QgX3dyaXRlQ2FrZVJlZnMgPSAoXHJcbiAgcGFyZW50VGFibGVOYW1lOiBUYWJsZUtleSxcclxuICBwYXJlbnRSb3c6IENha2UsXHJcbiAgcmVzdWx0OiBSZXZlcnNlUmVmcyxcclxuKSA9PiB7XHJcbiAgY29uc3QgcGFyZW50Um93SGFzaCA9IHBhcmVudFJvdy5faGFzaCBhcyBzdHJpbmc7XHJcblxyXG4gIGZvciAoY29uc3QgbGF5ZXIgaW4gcGFyZW50Um93LmxheWVycykge1xyXG4gICAgY29uc3QgY2hpbGRUYWJsZU5hbWUgPSBwYXJlbnRSb3cubGF5ZXJzVGFibGU7XHJcbiAgICBjb25zdCBjaGlsZFJvd0hhc2ggPSBwYXJlbnRSb3cubGF5ZXJzW2xheWVyXSBhcyBzdHJpbmc7XHJcbiAgICBfd3JpdGUoXHJcbiAgICAgIHJlc3VsdCxcclxuICAgICAgY2hpbGRUYWJsZU5hbWUsXHJcbiAgICAgIGNoaWxkUm93SGFzaCxcclxuICAgICAgcGFyZW50VGFibGVOYW1lLFxyXG4gICAgICBwYXJlbnRSb3dIYXNoLFxyXG4gICAgKTtcclxuICB9XHJcbn07XHJcblxyXG4vLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxyXG5jb25zdCBfd3JpdGVCdWZmZXRSZWZzID0gKFxyXG4gIHBhcmVudFRhYmxlTmFtZTogVGFibGVLZXksXHJcbiAgcGFyZW50Um93OiBCdWZmZXQsXHJcbiAgcmVzdWx0OiBSZXZlcnNlUmVmcyxcclxuKSA9PiB7XHJcbiAgY29uc3QgcGFyZW50Um93SGFzaCA9IHBhcmVudFJvdy5faGFzaCBhcyBzdHJpbmc7XHJcblxyXG4gIGZvciAoY29uc3QgaXRlbSBvZiBwYXJlbnRSb3cuaXRlbXMpIHtcclxuICAgIGNvbnN0IGNoaWxkVGFibGVOYW1lID0gaXRlbS50YWJsZTtcclxuICAgIGNvbnN0IGNoaWxkUm93SGFzaCA9IGl0ZW0ucmVmO1xyXG4gICAgX3dyaXRlKFxyXG4gICAgICByZXN1bHQsXHJcbiAgICAgIGNoaWxkVGFibGVOYW1lLFxyXG4gICAgICBjaGlsZFJvd0hhc2gsXHJcbiAgICAgIHBhcmVudFRhYmxlTmFtZSxcclxuICAgICAgcGFyZW50Um93SGFzaCxcclxuICAgICk7XHJcbiAgfVxyXG59O1xyXG5cclxuLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cclxuY29uc3QgX3dyaXRlID0gKFxyXG4gIHJlc3VsdDogUmV2ZXJzZVJlZnMsXHJcbiAgY2hpbGRUYWJsZU5hbWU6IHN0cmluZyxcclxuICBjaGlsZFJvd0hhc2g6IHN0cmluZyxcclxuICBwYXJlbnRUYWJsZU5hbWU6IHN0cmluZyxcclxuICBwYXJlbnRSb3dIYXNoOiBzdHJpbmcsXHJcbikgPT4ge1xyXG4gIGNvbnN0IHJlZmVyZW5jZXNGb3JDaGlsZFRhYmxlID0gKHJlc3VsdFtjaGlsZFRhYmxlTmFtZV0gPz89IHt9KTtcclxuICBjb25zdCByZWZlcmVuY2VzRm9yQ2hpbGRUYWJsZVJvdyA9IChyZWZlcmVuY2VzRm9yQ2hpbGRUYWJsZVtjaGlsZFJvd0hhc2hdID8/PVxyXG4gICAge30pO1xyXG5cclxuICByZWZlcmVuY2VzRm9yQ2hpbGRUYWJsZVJvd1twYXJlbnRUYWJsZU5hbWVdID8/PSB7fTtcclxuICByZWZlcmVuY2VzRm9yQ2hpbGRUYWJsZVJvd1twYXJlbnRUYWJsZU5hbWVdW3BhcmVudFJvd0hhc2hdID8/PSB7fTtcclxufTtcclxuIl0sIm5hbWVzIjpbImUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTtBQXVCTyxNQUFNLFdBQU4sTUFBTSxTQUFRO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUtuQixZQUE0QixJQUFRO0FBaUNwQztBQUFBO0FBQUE7QUFBQSw4Q0FBcUIsWUFBWTtB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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rljson/io",
3
- "version": "0.0.40",
3
+ "version": "0.0.41",
4
4
  "packageManager": "pnpm@10.9.0",
5
5
  "description": "Low level interface for reading and writing RLJSON data",
6
6
  "homepage": "https://github.com/rljson/io",
@@ -30,23 +30,23 @@
30
30
  },
31
31
  "devDependencies": {
32
32
  "@types/node": "^24.0.3",
33
- "@typescript-eslint/eslint-plugin": "^8.34.1",
34
- "@typescript-eslint/parser": "^8.34.1",
35
- "@vitest/coverage-v8": "^3.2.3",
33
+ "@typescript-eslint/eslint-plugin": "^8.35.0",
34
+ "@typescript-eslint/parser": "^8.35.0",
35
+ "@vitest/coverage-v8": "^3.2.4",
36
36
  "cross-env": "^7.0.3",
37
37
  "eslint": "^9.29.0",
38
- "eslint-plugin-jsdoc": "^51.0.1",
38
+ "eslint-plugin-jsdoc": "^51.2.3",
39
39
  "eslint-plugin-tsdoc": "^0.4.0",
40
40
  "globals": "^16.2.0",
41
41
  "jsdoc": "^4.0.4",
42
42
  "read-pkg": "^9.0.1",
43
43
  "typescript": "~5.8.3",
44
- "typescript-eslint": "^8.34.1",
44
+ "typescript-eslint": "^8.35.0",
45
45
  "vite": "^6.3.5",
46
- "vite-node": "^3.2.3",
46
+ "vite-node": "^3.2.4",
47
47
  "vite-plugin-dts": "^4.5.4",
48
48
  "vite-tsconfig-paths": "^5.1.4",
49
- "vitest": "^3.2.3",
49
+ "vitest": "^3.2.4",
50
50
  "vitest-dom": "^0.1.1"
51
51
  },
52
52
  "pnpm": {