sliftutils 1.7.18 → 1.7.20

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.
@@ -1,4 +1,4 @@
1
- "use strict";
1
+ "use strict"; var console = (function shimConsole() { let baseConsole = globalThis.console; if (typeof window !== "undefined") return baseConsole; let name = __filename.replaceAll("\\", "/").split("/").pop(); let dirName = __dirname.replaceAll("\\", "/").split("/").pop(); let context = { __FILE__: __filename, __DIR__: __dirname, __NAME__: name, __DIRNAME__: dirName }; let newConsole = { ...baseConsole }; for (let shim of ["log", "info", "warn", "error"]) { newConsole[shim] = (...args) => { args.push(context); baseConsole[shim](...args); }; } newConsole.__context = context; return newConsole; })(); "use strict";
2
2
  // File format (all integers little-endian):
3
3
  // u32 headerLength, then headerLength bytes of JSON: { rowCount, columns: [{ name, offset, length }] }, where offset is relative to the end of the header.
4
4
  // Each column blob is: u32 offsets[rowCount + 1] (byte offsets into the column's data section), u8 types[rowCount], then the data section (each value's bytes, concatenated).
@@ -510,4 +510,4 @@ async function loadBulkDatabase(config) {
510
510
  }
511
511
  exports.loadBulkDatabase = loadBulkDatabase;
512
512
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQnVsa0RhdGFiYXNlRm9ybWF0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiQnVsa0RhdGFiYXNlRm9ybWF0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSw0Q0FBNEM7QUFDNUMsNkpBQTZKO0FBQzdKLGdMQUFnTDtBQUNoTCxnSUFBZ0k7OztBQUVuSCxRQUFBLFVBQVUsR0FBRyxLQUFLLENBQUM7QUFFaEMsNEtBQTRLO0FBQzVLLE1BQU0sY0FBYyxHQUFHLENBQUMsQ0FBQztBQUN6QixNQUFNLFdBQVcsR0FBRyxDQUFDLENBQUM7QUFDdEIsTUFBTSxXQUFXLEdBQUcsQ0FBQyxDQUFDO0FBQ3RCLE1BQU0sWUFBWSxHQUFHLENBQUMsQ0FBQztBQUN2QixNQUFNLFdBQVcsR0FBRyxDQUFDLENBQUM7QUFDdEIsTUFBTSxlQUFlLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO0FBQzNCLE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxDQUFDO0FBQ25DLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO0FBQzNCLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxDQUFDO0FBQzVCLE1BQU0sZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO0FBQzVCLE1BQU0saUJBQWlCLEdBQUcsRUFBRSxDQUFDO0FBQzdCLE1BQU0sa0JBQWtCLEdBQUcsRUFBRSxDQUFDO0FBQzlCLE1BQU0sa0JBQWtCLEdBQUcsRUFBRSxDQUFDO0FBQzlCLHFHQUFxRztBQUNyRyxzR0FBc0c7QUFDdEcsK0RBQStEO0FBQy9ELE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQztBQUV2QixNQUFNLGlCQUFpQixHQUFxSDtJQUN4SSxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRTtJQUMxQyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO0lBQzVDLEVBQUUsSUFBSSxFQUFFLHdCQUF3QixFQUFFLElB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LENBQUMsT0FBTyxFQUFFLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQztZQUM1RCxNQUFNLFNBQVMsR0FBRyxPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQztZQUMxRCxJQUFJLEtBQUssR0FBRyxvQkFBWSxDQUFDO1lBQ3pCLElBQUksR0FBRyxHQUFHLEtBQUssRUFBRSxDQUFDO2dCQUNkLEtBQUssR0FBRyxNQUFNLE1BQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxHQUFHLEtBQUssRUFBRSxTQUFTLEdBQUcsR0FBRyxDQUFDLENBQUM7WUFDdEUsQ0FBQztZQUNELE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDN0MsSUFBSSxLQUFLLEtBQUssY0FBTTtnQkFBRSxPQUFPLGNBQU0sQ0FBQztZQUNwQyxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN2QyxDQUFDO0tBQ0osQ0FBQztBQUNOLENBQUM7QUE5SEQsNENBOEhDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gRmlsZSBmb3JtYXQgKGFsbCBpbnRlZ2VycyBsaXR0bGUtZW5kaWFuKTpcbi8vICAgdTMyIGhlYWRlckxlbmd0aCwgdGhlbiBoZWFkZXJMZW5ndGggYnl0ZXMgb2YgSlNPTjogeyByb3dDb3VudCwgY29sdW1uczogW3sgbmFtZSwgb2Zmc2V0LCBsZW5ndGggfV0gfSwgd2hlcmUgb2Zmc2V0IGlzIHJlbGF0aXZlIHRvIHRoZSBlbmQgb2YgdGhlIGhlYWRlci5cbi8vICAgRWFjaCBjb2x1bW4gYmxvYiBpczogdTMyIG9mZnNldHNbcm93Q291bnQgKyAxXSAoYnl0ZSBvZmZzZXRzIGludG8gdGhlIGNvbHVtbidzIGRhdGEgc2VjdGlvbiksIHU4IHR5cGVzW3Jvd0NvdW50XSwgdGhlbiB0aGUgZGF0YSBzZWN0aW9uIChlYWNoIHZhbHVlJ3MgYnl0ZXMsIGNvbmNhdGVuYXRlZCkuXG4vLyBWYWx1ZXMgYXJlIGVuY29kZWQgd2l0aCBhbiBleHBsaWNpdCB0eXBlIHRhZyBwZXIgdmFsdWUgKHNlZSB0aGUgVFlQRV8gY29uc3RhbnRzKS4gUmVhZHMgb25seSBmZXRjaCB0aGUgYnl0ZSByYW5nZXMgdGhleSBuZWVkLlxuXG5leHBvcnQgY29uc3QgS0VZX0NPTFVNTiA9IFwia2V5XCI7XG5cbi8vIEV2ZXJ5IHRhZyBpcyBhbiBleHBsaWNpdCBjb25zdGFudCBiYWtlZCBpbnRvIGZpbGVzIG9uIGRpc2suIE5FVkVSIHJlbnVtYmVyIGFuIGV4aXN0aW5nIHRhZyDigJQgb25seSBhZGQgbmV3IG9uZXMg4oCUIG9yIGV2ZXJ5IHByZXZpb3VzbHkgd3JpdHRlbiBmaWxlIHNpbGVudGx5IGRlY29kZXMgd3JvbmcuXG5jb25zdCBUWVBFX1VOREVGSU5FRCA9IDA7XG5jb25zdCBUWVBFX1NUUklORyA9IDE7XG5jb25zdCBUWVBFX05VTUJFUiA9IDI7XG5jb25zdCBUWVBFX0JPT0xFQU4gPSAzO1xuY29uc3QgVFlQRV9PQkpFQ1QgPSA0O1xuY29uc3QgVFlQRV9JTlQ4X0FSUkFZID0gNTtcbmNvbnN0IFRZUEVfVUlOVDhfQVJSQVkgPSA2O1xuY29uc3QgVFlQRV9VSU5UOF9DTEFNUEVEX0FSUkFZID0gNztcbmNvbnN0IFRZUEVfSU5UMTZfQVJSQVkgPSA4O1xuY29uc3QgVFlQRV9VSU5UMTZfQVJSQVkgPSA5O1xuY29uc3QgVFlQRV9JTlQzMl9BUlJBWSA9IDEwO1xuY29uc3QgVFlQRV9VSU5UMzJfQVJSQVkgPSAxMTtcbmNvbnN0IFRZUEVfRkxPQVQzMl9BUlJBWSA9IDEyO1xuY29uc3QgVFlQRV9GTE9BVDY0X0FSUkFZID0gMTM7XG4vLyBBIGNlbGwgd2hvc2Ugcm93IG5ldmVyIHNldCB0aGlzIGNvbHVtbiBhdCBhbGwg4oCUIGFzIG9wcG9zZWQgdG8gVFlQRV9VTkRFRklORUQsIGFuIGV4cGxpY2l0bHkgc3RvcmVkXG4vLyB1bmRlZmluZWQuIE9uIHJlYWQsIEFCU0VOVCBmYWxscyB0aHJvdWdoIHRvIG9sZGVyIHJlYWRlcnMgZm9yIHRoYXQgY29sdW1uOyBhIHN0b3JlZCB1bmRlZmluZWQgc3RvcHNcbi8vIHRoZSBmYWxsLXRocm91Z2ggKGl0J3MgYSByZWFsIHZhbHVlIHRoYXQgY2xlYXJzIHRoZSBjb2x1bW4pLlxuY29uc3QgVFlQRV9BQlNFTlQgPSAxNDtcblxuY29uc3QgVFlQRURfQVJSQVlfVFlQRVM6IHsgdHlwZTogbnVtYmVyOyBjdG9yOiB7IG5ldyhidWZmZXI6IEFycmF5QnVmZmVyKTogQXJyYXlCdWZmZXJWaWV3OyBCWVRFU19QRVJfRUxFTUVOVDogbnVtYmVyOyBuYW1lOiBzdHJpbmcgfSB9W10gPSBbXG4gICAgeyB0eXBlOiBUWVBFX0lOVDhfQVJSQVksIGN0b3I6IEludDhBcnJheSB9LFxuICAgIHsgdHlwZTogVFlQRV9VSU5UOF9BUlJBWSwgY3RvcjogVWludDhBcnJheSB9LFxuICAgIHsgdHlwZTogVFlQRV9VSU5UOF9DTEFNUEVEX0FSUkFZLCBjdG9yOiBVaW50OENsYW1wZWRBcnJheSB9LFxuICAgIHsgdHlwZTogVFlQRV9JTlQxNl9BUlJBWSwgY3RvcjogSW50MTZBcnJheSB9LFxuICAgIHsgdHlwZTogVFlQRV9VSU5UMTZfQVJSQVksIGN0b3I6IFVpbnQxNkFycmF5IH0sXG4gICAgeyB0eXBlOiBUWVBFX0lOVDMyX0FSUkFZLCBjdG9yOiBJbnQzMkFycmF5IH0sXG4gICAgeyB0eXBlOiBUWVBFX1VJTlQzMl9BUlJBWSwgY3RvcjogVWludDMyQXJyYXkgfSxcbiAgICB7IHR5cGU6IFRZUEVfRkxPQVQzMl9BUlJBWSwgY3RvcjogRmxvYXQzMkFycmF5IH0sXG4gICAgeyB0eXBlOiBUWVBFX0ZMT0FUNjRfQVJSQVksIGN0b3I6IEZsb2F0NjRBcnJheSB9LFxuXTtcblxuZXhwb3J0IGNvbnN0IEVNUFRZX0JVRkZFUiA9IEJ1ZmZlci5hbGxvYygwKSBhcyBCdWZmZXI7XG5cbi8vIFNlbnRpbmVsIGEgcmVhZGVyIHJldHVybnMgZm9yIGEgY2VsbCB3aG9zZSByb3cgbmV2ZXIgc2V0IHRoaXMgY29sdW1uLCBzbyB0aGUgam9pbiBjYW4gZmFsbCB0aHJvdWdoXG4vLyB0byBhbiBvbGRlciByZWFkZXIgZm9yIHRoYXQgY29sdW1uLiBEaXN0aW5jdCBmcm9tIGEgc3RvcmVkIHVuZGVmaW5lZCwgd2hpY2ggaXMgYSByZWFsIGNsZWFyaW5nIHZhbHVlLlxuZXhwb3J0IGNvbnN0IEFCU0VOVCA9IFN5bWJvbChcImFic2VudFwiKTtcblxuLy8gT25lIHZhbHVlIGV4YWN0bHkgYXMgaXQgc2l0cyBvbiBkaXNrOiBpdHMgdHlwZSB0YWcgKyByYXcgYnl0ZXMuIEEgY2VsbCdzIGVuY29kaW5nIGlzIHBvc2l0aW9uLVxuLy8gaW5kZXBlbmRlbnQgKG5vdGhpbmcgYWJvdXQgaXQgZGVwZW5kcyBvbiB3aGljaCByb3cvZmlsZSBpdCBsaXZlcyBpbiksIHNvIGEgbWVyZ2UgY29waWVzIHRoZSB3aW5uaW5nXG4vLyBSYXdDZWxsIHN0cmFpZ2h0IGZyb20gYW4gaW5wdXQgY29sdW1uIGludG8gdGhlIG91dHB1dCDigJQgbmV2ZXIgZGVjb2RpbmcgaXQgdG8gYSBKUyB2YWx1ZSBhbmRcbi8vIHJlLWVuY29kaW5nLiBUaGF0J3MgZmFyIGxlc3MgbWVtb3J5IChubyBvYmplY3QgbWF0ZXJpYWxpemF0aW9uKSBhbmQgbXVjaCBmYXN0ZXIgKGEgYnl0ZSBjb3B5LCBub3QgYVxuLy8gSlBFRy90eXBlZC1hcnJheSBkZWNvZGUgKyByZS1lbmNvZGUpLlxuZXhwb3J0IHR5cGUgUmF3Q2VsbCA9IHsgdHlwZTogbnVtYmVyOyBieXRlczogQnVmZmVyIH07XG5cbi8vIFRoZSB0eXBlIHRhZyBhIGNlbGwgY2FycmllcyB3aGVuIGl0cyByb3cgbmV2ZXIgc2V0IHRoaXMgY29sdW1uIOKAlCByZWFkIGl0IGZyb20gdGhlIGNvbHVtbidzIGB0eXBlc2Bcbi8vIGFycmF5IHRvIGRldGVjdCBBQlNFTlQgd2l0aG91dCBkZWNvZGluZy4gUmUtZXhwb3J0ZWQgc28gdGhlIG1lcmdlIHBsYW5uZXIgKHdoaWNoIHdvcmtzIGF0IHRoZVxuLy8gY29sdW1uLWluZGV4IGxldmVsLCBubyB2YWx1ZSBtYXRlcmlhbGl6YXRpb24pIGNhbiBjaGVjayBpdC5cbmV4cG9ydCBjb25zdCBUWVBFX0FCU0VOVF9UQUcgPSBUWVBFX0FCU0VOVDtcblxuLy8gQSBjb2x1bW4ncyBpbmRleCBhbG9uZSAob2Zmc2V0cyArIHR5cGVzIOKAlCBzbWFsbCwgfjUgYnl0ZXMvcm93KSBwbHVzIGEgcHJpbWl0aXZlIHRvIHJlYWQgYSBDT05USUdVT1VTXG4vLyByb3cgcmFuZ2UncyByYXcgdmFsdWUgYnl0ZXMuIFVzZWQgYnkgdGhlIHBsYW5uZWQgbWVyZ2U6IGl0IGxvYWRzIHRoZSBpbmRleCBhY3Jvc3MgZXZlcnkgKHNvdXJjZSxcbi8vIGNvbHVtbikgb25jZSAoY2hlYXApLCB1c2VzIHR5cGVzIHRvIGRldGVjdCBBQlNFTlQgYW5kIG9mZnNldHMgdG8gc2l6ZSBlYWNoIGNlbGwsIHBsYW5zIHRoZSBieXRlXG4vLyBsYXlvdXQgb2YgZXZlcnkgb3V0cHV0IGZpbGUgZnJvbSB0aG9zZSDigJQgdGhlbiBpbiB0aGUgZXhlY3V0ZSBwaGFzZSByZWFkcyBvbmx5IHRoZSBydW5zIG9mIGJ5dGVzIGl0XG4vLyBhY3R1YWxseSBuZWVkcywgY29weWluZyB0aGVtIHN0cmFpZ2h0IGludG8gcHJlLWxhaWQtb3V0IG91dHB1dCBidWZmZXJzLiBObyBjZWxsIHZhbHVlIGlzIGV2ZXJcbi8vIG1hdGVyaWFsaXplZCBhcyBhIEpTIG9iamVjdC5cbmV4cG9ydCB0eXBlIENvbHVtbkluZGV4ID0ge1xuICAgIC8vIG9mZnNldHNbaV0uLm9mZnNldHNbaSsxXSBpcyByb3cgaSdzIHZhbHVlIGJ5dGUgcmFuZ2Ugd2l0aGluIHRoZSBjb2x1bW4ncyBkYXRhIHNlY3Rpb24uXG4gICAgb2Zmc2V0czogVWludDMyQXJyYXk7XG4gICAgLy8gUGVyLXJvdyB0eXBlIHRhZzsgVFlQRV9BQlNFTlRfVEFHIG1hcmtzIFwidGhpcyByb3cgbmV2ZXIgc2V0IHRoaXMgY29sdW1uXCIgKGZhbGwtdGhyb3VnaCkuXG4gICAgdHlwZXM6IFVpbnQ4QXJyYXk7XG4gICAgLy8gUmVhZCB0aGUgY29udGlndW91cyBieXRlcyBvZiB2YWx1ZShzKSBmb3Igcm93cyBbc3RhcnRSb3csIGVuZFJvdykuIExlbmd0aCBpcyBleGFjdGx5XG4gICAgLy8gb2Zmc2V0c1tlbmRSb3ddIC0gb2Zmc2V0c1tzdGFydFJvd10g4oCUIHRoZSBjZWxscyBpbiB0aGF0IHJhbmdlIGNvbmNhdGVuYXRlZC4gVGhlIGNhbGxlciBjb21wb3Nlc1xuICAgIC8vIGxhcmdlciByZWFkcyBmcm9tIGNvbnNlY3V0aXZlIHJvd3MgKG9uZSBzb3VyY2Utc2lkZSBnZXRSYW5nZSBwZXIgcnVuKS5cbiAgICByZWFkVmFsdWVCeXRlczogKHN0YXJ0Um93OiBudW1iZXIsIGVuZFJvdzogbnVtYmVyKSA9PiBQcm9taXNlPEJ1ZmZlcj47XG59O1xuXG4vLyBIaWRkZW4gcGVyLXJvdyBjb2x1bW4gaG9sZGluZyBlYWNoIHJvdydzIHdyaXRlLXRpbWUgKHNvIHJlYWRzIGNhbiByZXNvbHZlIGEga2V5IHRvIGl0cyBsYXRlc3QgdmFsdWVcbi8vIGJ5IGFjdHVhbCB0aW1lKS4gTlVMLXByZWZpeGVkIHNvIGl0IGNhbid0IGNvbGxpZGUgd2l0aCBhIHVzZXIgY29sdW1uOyBleGNsdWRlZCBmcm9tIGBjb2x1bW5zYC5cbmNvbnN0IFRJTUVfQ09MVU1OID0gU3RyaW5nLmZyb21DaGFyQ29kZSgwKSArIFwidFwiO1xuXG50eXBlIEZpbGVIZWFkZXIgPSB7XG4gICAgcm93Q291bnQ6IG51bWJlcjtcbiAgICBjb2x1bW5zOiB7IG5hbWU6IHN0cmluZzsgb2Zmc2V0OiBudW1iZXI7IGxlbmd0aDogbnVtYmVyIH1bXTtcbiAgICAvLyBPbGRlc3QvbmV3ZXN0IHdyaXRlLXRpbWUgb2YgdGhlIGRhdGEgaW4gdGhpcyBmaWxlIChmcm9tIHRoZSBzdHJlYW0gZW50cmllcyBpdCB3YXMgZm9sZGVkIGZyb20sXG4gICAgLy8gY2FycmllZCB0aHJvdWdoIG1lcmdlcykuIExldHMgdGhlIG1lcmdlIHBsYW5uZXIgcGljayBmaWxlcyBvdmVybGFwcGluZyBhIHRpbWUgcmFuZ2UuIEFic2VudCAoMClcbiAgICAvLyBpbiBmaWxlcyB3cml0dGVuIGJlZm9yZSB0aGlzIGV4aXN0ZWQuXG4gICAgbWluVGltZT86IG51bWJlcjtcbiAgICBtYXhUaW1lPzogbnVtYmVyO1xuICAgIC8vIExleGljb2dyYXBoaWNhbGx5IHNtYWxsZXN0L2xhcmdlc3Qga2V5IGluIHRoaXMgZmlsZSAocm93cyBhcmUgc3RvcmVkIGtleS1zb3J0ZWQpLiBMZXRzIHRoZSBtZXJnZVxuICAgIC8vIHBsYW5uZXIgZ3JvdXAvZGVkdXAgYnkga2V5IHJhbmdlIGFuZCBsZXRzIGEgc2luZ2xlLWtleSByZWFkIHNraXAgZmlsZXMgd2hvc2UgcmFuZ2UgZXhjbHVkZXMgdGhlXG4gICAgLy8ga2V5LiBBYnNlbnQgKHVuZGVmaW5lZCkgaW4gZmlsZXMgd3JpdHRlbiBiZWZvcmUgdGhpcyBleGlzdGVkIOKAlCB0cmVhdGVkIGFzIFwic3BhbnMgYWxsIGtleXNcIi5cbiAgICBtaW5LZXk/OiBzdHJpbmc7XG4gICAgbWF4S2V5Pzogc3RyaW5nO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZVZhbHVlKHZhbHVlOiB1bmtub3duKTogeyB0eXBlOiBudW1iZXI7IGJ5dGVzOiBCdWZmZXIgfSB7XG4gICAgaWYgKHZhbHVlID09PSBBQlNFTlQpIHtcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogVFlQRV9BQlNFTlQsIGJ5dGVzOiBFTVBUWV9CVUZGRVIgfTtcbiAgICB9XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogVFlQRV9VTkRFRklORUQsIGJ5dGVzOiBFTVBUWV9CVUZGRVIgfTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICByZXR1cm4geyB0eXBlOiBUWVBFX1NUUklORywgYnl0ZXM6IEJ1ZmZlci5mcm9tKHZhbHVlLCBcInV0ZjhcIikgfTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICBjb25zdCBieXRlcyA9IEJ1ZmZlci5hbGxvYyg4KTtcbiAgICAgICAgYnl0ZXMud3JpdGVEb3VibGVMRSh2YWx1ZSwgMCk7XG4gICAgICAgIHJldHVybiB7IHR5cGU6IFRZUEVfTlVNQkVSLCBieXRlcyB9O1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICByZXR1cm4geyB0eXBlOiBUWVBFX0JPT0xFQU4sIGJ5dGVzOiBCdWZmZXIuZnJvbShbdmFsdWUgJiYgMSB8fCAwXSkgfTtcbiAgICB9XG4gICAgaWYgKEFycmF5QnVmZmVyLmlzVmlldyh2YWx1ZSkpIHtcbiAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0YVZpZXcpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRGF0YVZpZXcgdmFsdWVzIGFyZSBub3Qgc3VwcG9ydGVkLCBzdG9yZSBhIHR5cGVkIGFycmF5IGluc3RlYWRgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlbnRyeSA9IFRZUEVEX0FSUkFZX1RZUEVTLmZpbmQodCA9PiB2YWx1ZSBpbnN0YW5jZW9mIHQuY3Rvcik7XG4gICAgICAgIGlmICghZW50cnkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgdHlwZWQgYXJyYXkgdHlwZSAke3ZhbHVlLmNvbnN0cnVjdG9yLm5hbWV9YCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGVudHJ5LnR5cGUsXG4gICAgICAgICAgICBieXRlczogQnVmZmVyLmZyb20odmFsdWUuYnVmZmVyLCB2YWx1ZS5ieXRlT2Zmc2V0LCB2YWx1ZS5ieXRlTGVuZ3RoKSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIHZhbHVlIHR5cGUgJHt0eXBlb2YgdmFsdWV9YCk7XG4gICAgfVxuICAgIHJldHVybiB7IHR5cGU6IFRZUEVfT0JKRUNULCBieXRlczogQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkodmFsdWUpLCBcInV0ZjhcIikgfTtcbn1cblxuZnVuY3Rpb24gZGVjb2RlVmFsdWUodHlwZTogbnVtYmVyLCBieXRlczogQnVmZmVyKTogdW5rbm93biB7XG4gICAgaWYgKHR5cGUgPT09IFRZUEVfVU5ERUZJTkVEKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGlmICh0eXBlID09PSBUWVBFX1NUUklORykgcmV0dXJuIGJ5dGVzLnRvU3RyaW5nKFwidXRmOFwiKTtcbiAgICBpZiAodHlwZSA9PT0gVFlQRV9OVU1CRVIpIHtcbiAgICAgICAgaWYgKGJ5dGVzLmxlbmd0aCAhPT0gOCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCA4IGJ5dGVzIGZvciBhIG51bWJlciwgd2FzICR7Ynl0ZXMubGVuZ3RofWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBieXRlcy5yZWFkRG91YmxlTEUoMCk7XG4gICAgfVxuICAgIGlmICh0eXBlID09PSBUWVBFX0JPT0xFQU4pIHtcbiAgICAgICAgaWYgKGJ5dGVzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAxIGJ5dGUgZm9yIGEgYm9vbGVhbiwgd2FzICR7Ynl0ZXMubGVuZ3RofWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBieXRlc1swXSA9PT0gMTtcbiAgICB9XG4gICAgaWYgKHR5cGUgPT09IFRZUEVfT0JKRUNUKSByZXR1cm4gSlNPTi5wYXJzZShieXRlcy50b1N0cmluZyhcInV0ZjhcIikpO1xuICAgIGlmICh0eXBlID09PSBUWVBFX0FCU0VOVCkgcmV0dXJuIEFCU0VOVDtcbiAgICBjb25zdCBlbnRyeSA9IFRZUEVEX0FSUkFZX1RZUEVTLmZpbmQodCA9PiB0LnR5cGUgPT09IHR5cGUpO1xuICAgIGlmICghZW50cnkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBhIHZhbGlkIHR5cGUgdGFnLCB3YXMgJHt0eXBlfWApO1xuICAgIH1cbiAgICBjb25zdCBjdG9yID0gZW50cnkuY3RvcjtcbiAgICBpZiAodHlwZSA9PT0gVFlQRV9VSU5UOF9BUlJBWSkgcmV0dXJuIEJ1ZmZlci5mcm9tKGJ5dGVzKTtcbiAgICBpZiAoYnl0ZXMubGVuZ3RoICUgY3Rvci5CWVRFU19QRVJfRUxFTUVOVCAhPT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGJ5dGUgbGVuZ3RoIGRpdmlzaWJsZSBieSAke2N0b3IuQllURVNfUEVSX0VMRU1FTlR9IGZvciAke2N0b3IubmFtZX0sIHdhcyAke2J5dGVzLmxlbmd0aH1gKTtcbiAgICB9XG4gICAgLy8gQ29weSB0byBhIGZyZXNoIEFycmF5QnVmZmVyIHNvIHRoZSB0eXBlZCBhcnJheSB2aWV3IGlzIGFsaWduZWQgcmVnYXJkbGVzcyBvZiB3aGVyZSB0aGUgYnl0ZXMgbGFuZGVkIGluIHRoZSBzb3VyY2UgYnVmZmVyLlxuICAgIGNvbnN0IGFsaWduZWQgPSBuZXcgQXJyYXlCdWZmZXIoYnl0ZXMubGVuZ3RoKTtcbiAgICBuZXcgVWludDhBcnJheShhbGlnbmVkKS5zZXQoYnl0ZXMpO1xuICAgIHJldHVybiBuZXcgY3RvcihhbGlnbmVkKTtcbn1cblxuZnVuY3Rpb24gZW5jb2RlQnVsa0RhdGEoZGF0YTogdW5rbm93bltdKTogQnVmZmVyIHtcbiAgICBjb25zdCBuID0gZGF0YS5sZW5ndGg7XG4gICAgY29uc3Qgb2Zmc2V0cyA9IEJ1ZmZlci5hbGxvYyg0ICogKG4gKyAxKSk7XG4gICAgY29uc3QgdHlwZXMgPSBCdWZmZXIuYWxsb2Mobik7XG4gICAgY29uc3QgcGFydHM6IEJ1ZmZlcltdID0gW107XG4gICAgbGV0IHBvcyA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgY29uc3QgeyB0eXBlLCBieXRlcyB9ID0gZW5jb2RlVmFsdWUoZGF0YVtpXSk7XG4gICAgICAgIG9mZnNldHMud3JpdGVVSW50MzJMRShwb3MsIDQgKiBpKTtcbiAgICAgICAgdHlwZXNbaV0gPSB0eXBlO1xuICAgICAgICBwYXJ0cy5wdXNoKGJ5dGVzKTtcbiAgICAgICAgcG9zICs9IGJ5dGVzLmxlbmd0aDtcbiAgICB9XG4gICAgb2Zmc2V0cy53cml0ZVVJbnQzMkxFKHBvcywgNCAqIG4pO1xuICAgIHJldHVybiBCdWZmZXIuY29uY2F0KFtvZmZzZXRzLCB0eXBlcywgLi4ucGFydHNdKTtcbn1cblxuLy8gTGlrZSBlbmNvZGVCdWxrRGF0YSBidXQgdGhlIHZhbHVlcyBhcmUgYWxyZWFkeSBlbmNvZGVkIChhIG1lcmdlIHN1cHBsaWVzIHRoZSB3aW5uaW5nIGNlbGxzJyByYXcgYnl0ZXNcbi8vIHN0cmFpZ2h0IGZyb20gdGhlIGlucHV0IGZpbGVzKS4gTGF5cyBvdXQgdGhlIHNhbWUgb2Zmc2V0cyAvIHR5cGVzIC8gZGF0YSBzZWN0aW9uIHdpdGhvdXQgdG91Y2hpbmcgdGhlXG4vLyB2YWx1ZXMgdGhlbXNlbHZlcy5cbmZ1bmN0aW9uIGVuY29kZUJ1bGtEYXRhUmF3KGNlbGxzOiBSYXdDZWxsW10pOiBCdWZmZXIge1xuICAgIGNvbnN0IG4gPSBjZWxscy5sZW5ndGg7XG4gICAgY29uc3Qgb2Zmc2V0cyA9IEJ1ZmZlci5hbGxvYyg0ICogKG4gKyAxKSk7XG4gICAgY29uc3QgdHlwZXMgPSBCdWZmZXIuYWxsb2Mobik7XG4gICAgY29uc3QgcGFydHM6IEJ1ZmZlcltdID0gW107XG4gICAgbGV0IHBvcyA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgY29uc3QgeyB0eXBlLCBieXRlcyB9ID0gY2VsbHNbaV07XG4gICAgICAgIG9mZnNldHMud3JpdGVVSW50MzJMRShwb3MsIDQgKiBpKTtcbiAgICAgICAgdHlwZXNbaV0gPSB0eXBlO1xuICAgICAgICBwYXJ0cy5wdXNoKGJ5dGVzKTtcbiAgICAgICAgcG9zICs9IGJ5dGVzLmxlbmd0aDtcbiAgICB9XG4gICAgb2Zmc2V0cy53cml0ZVVJbnQzMkxFKHBvcywgNCAqIG4pO1xuICAgIHJldHVybiBCdWZmZXIuY29uY2F0KFtvZmZzZXRzLCB0eXBlcywgLi4ucGFydHNdKTtcbn1cblxuZnVuY3Rpb24gZGVjb2RlQnVsa0RhdGEoYmxvYjogQnVmZmVyLCByb3dDb3VudDogbnVtYmVyKTogdW5rbm93bltdIHtcbiAgICBjb25zdCBpbmRleFNpemUgPSA0ICogKHJvd0NvdW50ICsgMSkgKyByb3dDb3VudDtcbiAgICBjb25zdCB2YWx1ZXM6IHVua25vd25bXSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93Q291bnQ7IGkrKykge1xuICAgICAgICBjb25zdCBzdGFydCA9IGJsb2IucmVhZFVJbnQzMkxFKDQgKiBpKTtcbiAgICAgICAgY29uc3QgZW5kID0gYmxvYi5yZWFkVUludDMyTEUoNCAqIChpICsgMSkpO1xuICAgICAgICBjb25zdCB0eXBlID0gYmxvYls0ICogKHJvd0NvdW50ICsgMSkgKyBpXTtcbiAgICAgICAgdmFsdWVzLnB1c2goZGVjb2RlVmFsdWUodHlwZSwgYmxvYi5zdWJhcnJheShpbmRleFNpemUgKyBzdGFydCwgaW5kZXhTaXplICsgZW5kKSkpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWVzO1xufVxuXG4vLyBUYXJnZXQgbG9naWNhbCAodW5jb21wcmVzc2VkKSBzaXplIG9mIG9uZSBidWxrIGZpbGUuIEEgcm93cyBhcnJheSBiaWdnZXIgdGhhbiB0aGlzIGlzIHNwbGl0IGFjcm9zc1xuLy8gbXVsdGlwbGUga2V5LWNvbnRpZ3VvdXMgZmlsZXMsIHNvIGZpbGVzIHN0YXkgYXJvdW5kIHRoaXMgc2l6ZSAodGhlIG1lcmdlIHBvbGljeSdzIHRhcmdldCkgYW5kIG5vXG4vLyBzaW5nbGUgY29sdW1uIGJsb2IgLyBCdWZmZXIuY29uY2F0IGV2ZXIgYXBwcm9hY2hlcyB0aGUgfjJHQiBCdWZmZXIgbGVuZ3RoIGxpbWl0LiBUaGUgZXN0aW1hdGUgaXNcbi8vIHJvdWdoIG9uIHB1cnBvc2Ug4oCUIGl0IG9ubHkgbmVlZHMgdG8ga2VlcCBlYWNoIGNodW5rIG5lYXIgdGhlIHRhcmdldCwgbm90IGJlIGV4YWN0LiBBIHNpbmdsZSByb3dcbi8vIGJpZ2dlciB0aGFuIHRoZSB0YXJnZXQgc3RpbGwgYmVjb21lcyBpdHMgb3duIChvdmVyc2l6ZWQpIGZpbGUsIHNpbmNlIHdlIG5ldmVyIHNwbGl0IHdpdGhpbiBhIGtleS5cbmV4cG9ydCBjb25zdCBUQVJHRVRfRklMRV9CWVRFUyA9IDI1NiAqIDEwMjQgKiAxMDI0O1xuXG4vLyBQZXItdmFsdWUgb24tZGlzayBvdmVyaGVhZDogYSA0LWJ5dGUgb2Zmc2V0IGVudHJ5IHBsdXMgYSAxLWJ5dGUgdHlwZSB0YWcuXG5jb25zdCBQRVJfVkFMVUVfT1ZFUkhFQUQgPSA1O1xuXG5mdW5jdGlvbiBlc3RpbWF0ZVZhbHVlQnl0ZXModmFsdWU6IHVua25vd24pOiBudW1iZXIge1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsKSByZXR1cm4gMDtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSByZXR1cm4gdmFsdWUubGVuZ3RoICogMjtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiKSByZXR1cm4gODtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcImJvb2xlYW5cIikgcmV0dXJuIDE7XG4gICAgaWYgKEFycmF5QnVmZmVyLmlzVmlldyh2YWx1ZSkpIHJldHVybiB2YWx1ZS5ieXRlTGVuZ3RoO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIpIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSkubGVuZ3RoO1xuICAgIHJldHVybiAwO1xufVxuXG5mdW5jdGlvbiBlc3RpbWF0ZVJvd0J5dGVzKHJvdzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBudW1iZXIge1xuICAgIGxldCB0b3RhbCA9IDA7XG4gICAgZm9yIChjb25zdCB2YWx1ZSBvZiBPYmplY3QudmFsdWVzKHJvdykpIHtcbiAgICAgICAgdG90YWwgKz0gZXN0aW1hdGVWYWx1ZUJ5dGVzKHZhbHVlKSArIFBFUl9WQUxVRV9PVkVSSEVBRDtcbiAgICB9XG4gICAgcmV0dXJuIHRvdGFsO1xufVxuXG4vLyBDb25jYXRlbmF0ZXMgYWxyZWFkeS1lbmNvZGVkIGNvbHVtbiBibG9icyBpbnRvIGEgY29tcGxldGUgZmlsZSAoNC1ieXRlIGhlYWRlciBsZW5ndGggKyBoZWFkZXIgSlNPTiArXG4vLyBibG9icyksIGNvbXB1dGluZyB0aGUgaGVhZGVyJ3MgdGltZSArIGtleSBib3VuZHMgZnJvbSB0aGUgcGVyLXJvdyB0aW1lcyBhbmQga2V5cy4gU2hhcmVkIGJ5IHRoZVxuLy8gb2JqZWN0LWJhc2VkIGJ1aWxkZXIgKGJ1aWxkT25lRmlsZSkgYW5kIHRoZSByYXctc3BsaWNlIGJ1aWxkZXIgKGJ1aWxkT25lRmlsZVJhdykuXG5mdW5jdGlvbiBhc3NlbWJsZUZpbGUoY29sdW1uTmFtZXM6IHN0cmluZ1tdLCBibG9iczogQnVmZmVyW10sIHJvd0NvdW50OiBudW1iZXIsIHRpbWVzOiBudW1iZXJbXSwga2V5czogc3RyaW5nW10pOiBCdWZmZXIge1xuICAgIGxldCBvZmZzZXQgPSAwO1xuICAgIGNvbnN0IGNvbHVtbnMgPSBjb2x1bW5OYW1lcy5tYXAoKG5hbWUsIGkpID0+IHtcbiAgICAgICAgY29uc3QgZW50cnkgPSB7IG5hbWUsIG9mZnNldCwgbGVuZ3RoOiBibG9ic1tpXS5sZW5ndGggfTtcbiAgICAgICAgb2Zmc2V0ICs9IGJsb2JzW2ldLmxlbmd0aDtcbiAgICAgICAgcmV0dXJuIGVudHJ5O1xuICAgIH0pO1xuICAgIGxldCBtaW5UaW1lID0gdGltZXMubGVuZ3RoID8gdGltZXNbMF0gOiAwO1xuICAgIGxldCBtYXhUaW1lID0gbWluVGltZTtcbiAgICBmb3IgKGNvbnN0IHQgb2YgdGltZXMpIHsgaWYgKHQgPCBtaW5UaW1lKSBtaW5UaW1lID0gdDsgaWYgKHQgPiBtYXhUaW1lKSBtYXhUaW1lID0gdDsgfVxuICAgIGxldCBtaW5LZXk6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBsZXQgbWF4S2V5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgICBpZiAobWluS2V5ID09PSB1bmRlZmluZWQgfHwga2V5IDwgbWluS2V5KSBtaW5LZXkgPSBrZXk7XG4gICAgICAgIGlmIChtYXhLZXkgPT09IHVuZGVmaW5lZCB8fCBrZXkgPiBtYXhLZXkpIG1heEtleSA9IGtleTtcbiAgICB9XG4gICAgY29uc3QgaGVhZGVyOiBGaWxlSGVhZGVyID0geyByb3dDb3VudCwgY29sdW1ucywgbWluVGltZSwgbWF4VGltZSwgbWluS2V5LCBtYXhLZXkgfTtcbiAgICBjb25zdCBoZWFkZXJCdWYgPSBCdWZmZXIuZnJvbShKU09OLnN0cmluZ2lmeShoZWFkZXIpLCBcInV0ZjhcIik7XG4gICAgY29uc3QgbGVuZ3RoUHJlZml4ID0gQnVmZmVyLmFsbG9jKDQpO1xuICAgIGxlbmd0aFByZWZpeC53cml0ZVVJbnQzMkxFKGhlYWRlckJ1Zi5sZW5ndGgsIDApO1xuICAgIHJldHVybiBCdWZmZXIuY29uY2F0KFtsZW5ndGhQcmVmaXgsIGhlYWRlckJ1ZiwgLi4uYmxvYnNdKTtcbn1cblxuZnVuY3Rpb24gYnVpbGRPbmVGaWxlKHJvd3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W10sIHRpbWVzOiBudW1iZXJbXSk6IEJ1ZmZlciB7XG4gICAgY29uc3QgY29sdW1uTmFtZXM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgY29sdW1uU2V0ID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgZm9yIChjb25zdCByb3cgb2Ygcm93cykge1xuICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIE9iamVjdC5rZXlzKHJvdykpIHtcbiAgICAgICAgICAgIGlmIChjb2x1bW5TZXQuaGFzKGZpZWxkKSkgY29udGludWU7XG4gICAgICAgICAgICBjb2x1bW5TZXQuYWRkKGZpZWxkKTtcbiAgICAgICAgICAgIGNvbHVtbk5hbWVzLnB1c2goZmllbGQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIEEgcm93IHRoYXQgZG9lc24ndCBpbmNsdWRlIGEgY29sdW1uIHN0b3JlcyBBQlNFTlQgKGZhbGwtdGhyb3VnaCksIG5vdCB1bmRlZmluZWQgKGEgcmVhbCB2YWx1ZSkuXG4gICAgY29uc3QgYmxvYnMgPSBjb2x1bW5OYW1lcy5tYXAoY29sID0+IGVuY29kZUJ1bGtEYXRhKHJvd3MubWFwKHJvdyA9PiBjb2wgaW4gcm93ID8gcm93W2NvbF0gOiBBQlNFTlQpKSk7XG4gICAgLy8gVGhlIGhpZGRlbiBwZXItcm93IHRpbWUgY29sdW1uLlxuICAgIGNvbHVtbk5hbWVzLnB1c2goVElNRV9DT0xVTU4pO1xuICAgIGJsb2JzLnB1c2goZW5jb2RlQnVsa0RhdGEodGltZXMpKTtcbiAgICByZXR1cm4gYXNzZW1ibGVGaWxlKGNvbHVtbk5hbWVzLCBibG9icywgcm93cy5sZW5ndGgsIHRpbWVzLCByb3dzLm1hcChyID0+IHJbS0VZX0NPTFVNTl0gYXMgc3RyaW5nKSk7XG59XG5cbi8vIEEgcmVzb2x2ZWQgb3V0cHV0IHJvdyBmb3IgdGhlIHJhdy1zcGxpY2UgbWVyZ2U6IGl0cyBrZXksIHdyaXRlLXRpbWUsIGFuZCB0aGUgd2lubmluZyByYXcgY2VsbCBmb3IgZWFjaFxuLy8gY29sdW1uIGl0IGhhcyAoYSBjb2x1bW4gaXQgbGFja3MgaXMgd3JpdHRlbiBBQlNFTlQg4oCUIGZhbGwtdGhyb3VnaCkuIFRoZSBjZWxsIGJ5dGVzIGFyZSBjb3BpZWQgc3RyYWlnaHRcbi8vIGZyb20gdGhlIGlucHV0IGZpbGVzOyBubyB2YWx1ZSBpcyBldmVyIGRlY29kZWQuXG5leHBvcnQgdHlwZSBSYXdSb3cgPSB7IGtleTogc3RyaW5nOyB0aW1lOiBudW1iZXI7IGNlbGxzOiBNYXA8c3RyaW5nLCBSYXdDZWxsPiB9O1xuXG4vLyBTaXplIG9mIGEgY29sdW1uIGJsb2IncyBJTkRFWCBzZWN0aW9uIChvZmZzZXRzIGFycmF5ICsgdHlwZXMgYXJyYXkpIGZvciBhIGNvbHVtbiBvZiBOIHJvd3MuIFRoZSBkYXRhXG4vLyBzZWN0aW9uIGZvbGxvd3MgaW1tZWRpYXRlbHkgYWZ0ZXIuIFRoZSBwbGFubmVkIG1lcmdlIHVzZXMgdGhpcyB0byBzaXplIG91dHB1dCBidWZmZXJzIGV4YWN0bHkuXG5leHBvcnQgZnVuY3Rpb24gY29sdW1uSW5kZXhCeXRlTGVuZ3RoKHJvd0NvdW50OiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiA0ICogKHJvd0NvdW50ICsgMSkgKyByb3dDb3VudDtcbn1cblxuLy8gQXNzZW1ibGVzIGEgY29tcGxldGUgYnVsayBmaWxlIGZyb20gYSBzZXQgb2YgcHJlLWJ1aWx0IHZhbHVlIGNvbHVtbiBibG9icyBwbHVzIHRoZSBrZXlzICsgdGltZXMuIEF1dG8tXG4vLyBhZGRzIHRoZSBLRVlfQ09MVU1OIChrZXlzKSBhbmQgaGlkZGVuIFRJTUVfQ09MVU1OICh0aW1lcykg4oCUIHRoZXkncmUgc21hbGwgZW5vdWdoIHRvIGVuY29kZSBpbiBvbmUgc2hvdFxuLy8gaGVyZS4gVXNlZCBieSB0aGUgcGxhbm5lZCBtZXJnZTogaXQgYnVpbGRzIGVhY2ggdmFsdWUgY29sdW1uJ3MgYmxvYiBieS1oYW5kIChvZmZzZXRzL3R5cGVzICsgcmF3IGJ5dGVzXG4vLyBjb3BpZWQgZGlyZWN0bHkgZnJvbSBpbnB1dHMsIG5vIHZhbHVlIG1hdGVyaWFsaXphdGlvbikgYW5kIGhhbmRzIHRoZSByZXN1bHQgaGVyZSBmb3IgaGVhZGVyICsgYm91bmRzLlxuZXhwb3J0IGZ1bmN0aW9uIGFzc2VtYmxlUGxhbm5lZEZpbGUoY29uZmlnOiB7XG4gICAgdmFsdWVDb2x1bW5zOiB7IG5hbWU6IHN0cmluZzsgYmxvYjogQnVmZmVyIH1bXTtcbiAgICBrZXlzOiBzdHJpbmdbXTtcbiAgICB0aW1lczogbnVtYmVyW107XG59KTogQnVmZmVyIHtcbiAgICBjb25zdCBjb2x1bW5OYW1lcyA9IFtLRVlfQ09MVU1OLCAuLi5jb25maWcudmFsdWVDb2x1bW5zLm1hcChjID0+IGMubmFtZSksIFRJTUVfQ09MVU1OXTtcbiAgICBjb25zdCBibG9icyA9IFtcbiAgICAgICAgZW5jb2RlQnVsa0RhdGEoY29uZmlnLmtleXMpLFxuICAgICAgICAuLi5jb25maWcudmFsdWVDb2x1bW5zLm1hcChjID0+IGMuYmxvYiksXG4gICAgICAgIGVuY29kZUJ1bGtEYXRhKGNvbmZpZy50aW1lcyksXG4gICAgXTtcbiAgICByZXR1cm4gYXNzZW1ibGVGaWxlKGNvbHVtbk5hbWVzLCBibG9icywgY29uZmlnLmtleXMubGVuZ3RoLCBjb25maWcudGltZXMsIGNvbmZpZy5rZXlzKTtcbn1cblxuY29uc3QgQUJTRU5UX0NFTEw6IFJhd0NlbGwgPSB7IHR5cGU6IFRZUEVfQUJTRU5ULCBieXRlczogRU1QVFlfQlVGRkVSIH07XG5cbmZ1bmN0aW9uIGJ1aWxkT25lRmlsZVJhdyhyb3dzOiBSYXdSb3dbXSk6IEJ1ZmZlciB7XG4gICAgLy8gQ29sdW1ucyBwcmVzZW50IGluIHRoaXMgY2h1bmssIGluIGZpcnN0LXNlZW4gb3JkZXIgKG1hdGNoZXMgYnVpbGRPbmVGaWxlLCB3aGljaCBvbmx5IGVtaXRzIGNvbHVtbnNcbiAgICAvLyBzb21lIHJvdyBhY3R1YWxseSBoYXMpLlxuICAgIGNvbnN0IHZhbHVlQ29sdW1uczogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCBzZWVuID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgZm9yIChjb25zdCByb3cgb2Ygcm93cykgZm9yIChjb25zdCBjb2wgb2Ygcm93LmNlbGxzLmtleXMoKSkge1xuICAgICAgICBpZiAoc2Vlbi5oYXMoY29sKSkgY29udGludWU7XG4gICAgICAgIHNlZW4uYWRkKGNvbCk7XG4gICAgICAgIHZhbHVlQ29sdW1ucy5wdXNoKGNvbCk7XG4gICAgfVxuICAgIGNvbnN0IGNvbHVtbk5hbWVzID0gW0tFWV9DT0xVTU4sIC4uLnZhbHVlQ29sdW1ucywgVElNRV9DT0xVTU5dO1xuICAgIGNvbnN0IHRpbWVzID0gcm93cy5tYXAociA9PiByLnRpbWUpO1xuICAgIGNvbnN0IGJsb2JzID0gW1xuICAgICAgICBlbmNvZGVCdWxrRGF0YShyb3dzLm1hcChyID0+IHIua2V5KSksXG4gICAgICAgIC4uLnZhbHVlQ29sdW1ucy5tYXAoY29sID0+IGVuY29kZUJ1bGtEYXRhUmF3KHJvd3MubWFwKHIgPT4gci5jZWxscy5nZXQoY29sKSA/PyBBQlNFTlRfQ0VMTCkpKSxcbiAgICAgICAgZW5jb2RlQnVsa0RhdGEodGltZXMpLFxuICAgIF07XG4gICAgcmV0dXJuIGFzc2VtYmxlRmlsZShjb2x1bW5OYW1lcywgYmxvYnMsIHJvd3MubGVuZ3RoLCB0aW1lcywgcm93cy5tYXAociA9PiByLmtleSkpO1xufVxuXG5mdW5jdGlvbiBlc3RpbWF0ZVJhd1Jvd0J5dGVzKHJvdzogUmF3Um93KTogbnVtYmVyIHtcbiAgICBsZXQgdG90YWwgPSByb3cua2V5Lmxlbmd0aCAqIDIgKyBQRVJfVkFMVUVfT1ZFUkhFQUQ7XG4gICAgZm9yIChjb25zdCBjZWxsIG9mIHJvdy5jZWxscy52YWx1ZXMoKSkgdG90YWwgKz0gY2VsbC5ieXRlcy5sZW5ndGggKyBQRVJfVkFMVUVfT1ZFUkhFQUQ7XG4gICAgcmV0dXJuIHRvdGFsO1xufVxuXG4vLyBPbmUgY29tcGxldGUsIGluZGVwZW5kZW50IGZpbGU6IHRoZSBlbmNvZGVkIGJ1ZmZlciBwbHVzIGl0cyBrZXkgcmFuZ2UgKyByb3cgY291bnQgKHRoZSBjYWxsZXIgbG9ncyB0aGVcbi8vIHJhbmdlIHdoZW4gYSBtZXJnZSBzcGxpdHMgYWNyb3NzIHNldmVyYWwgZmlsZXMpLlxuZXhwb3J0IGludGVyZmFjZSBCdWlsdEZpbGUgeyBidWZmZXI6IEJ1ZmZlcjsgbWluS2V5OiBzdHJpbmc7IG1heEtleTogc3RyaW5nOyByb3dDb3VudDogbnVtYmVyOyB9XG5cbi8vIFJldHVybnMgb25lIGNvbXBsZXRlLCBpbmRlcGVuZGVudCBmaWxlIHBlciBjaHVuayBvZiByb3dzLiBSb3dzIGFyZSBmaXJzdCBzb3J0ZWQgYnkga2V5LCB0aGVuXG4vLyBwYXJ0aXRpb25lZCBpbnRvIGtleS1jb250aWd1b3VzIGNodW5rcyBvZiB+dGFyZ2V0Qnl0ZXMgZWFjaCDigJQgc28gZXZlcnkgcmV0dXJuZWQgZmlsZSBpcyBrZXktc29ydGVkXG4vLyAodGlnaHQgbWluS2V5L21heEtleSBmb3IgdGhlIHJlYWQtc2tpcCArIG1lcmdlIHBsYW5uZXIpIGFuZCBzdGF5cyBuZWFyIHRoZSB0YXJnZXQgc2l6ZSwgYW5kIG5vXG4vLyBzaW5nbGUgY29sdW1uIGJsb2IgLyBCdWZmZXIuY29uY2F0IGFwcHJvYWNoZXMgdGhlIH4yR0IgbGltaXQuIFRoZSBjaHVua3MgaGF2ZSBkaXNqb2ludCBrZXkgcmFuZ2VzLFxuLy8gc28gdGhlIGNhbGxlciBqdXN0IHdyaXRlcyBlYWNoIGFzIGl0cyBvd24gZmlsZS4gQSBub3JtYWwtc2l6ZWQgd3JpdGUgcmV0dXJucyBhIHNpbmdsZSBmaWxlLlxuLy8gYHRpbWVzW2ldYCBpcyByb3cgaSdzIHdyaXRlLXRpbWUsIHN0b3JlZCBwZXIgcm93IHNvIHJlYWRzIHJlc29sdmUgYSBrZXkgdG8gaXRzIGxhdGVzdCB2YWx1ZSBieSB0aW1lLlxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkRmlsZUJ1ZmZlcihyb3dzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdLCB0aW1lczogbnVtYmVyW10sIHRhcmdldEJ5dGVzID0gVEFSR0VUX0ZJTEVfQllURVMpOiBCdWlsdEZpbGVbXSB7XG4gICAgLy8gQSBjaHVuayBpcyBhbHJlYWR5IGtleS1zb3J0ZWQsIHNvIGl0cyBmaXJzdC9sYXN0IHJvdyBhcmUgaXRzIG1pbi9tYXgga2V5LlxuICAgIGNvbnN0IG1ha2UgPSAocnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W10sIHRzOiBudW1iZXJbXSk6IEJ1aWx0RmlsZSA9PiAoe1xuICAgICAgICBidWZmZXI6IGJ1aWxkT25lRmlsZShycywgdHMpLFxuICAgICAgICBtaW5LZXk6IHJzLmxlbmd0aCA/IChyc1swXVtLRVlfQ09MVU1OXSBhcyBzdHJpbmcpIDogXCJcIixcbiAgICAgICAgbWF4S2V5OiBycy5sZW5ndGggPyAocnNbcnMubGVuZ3RoIC0gMV1bS0VZX0NPTFVNTl0gYXMgc3RyaW5nKSA6IFwiXCIsXG4gICAgICAgIHJvd0NvdW50OiBycy5sZW5ndGgsXG4gICAgfSk7XG4gICAgaWYgKHJvd3MubGVuZ3RoID09PSAwKSByZXR1cm4gW21ha2UoW10sIFtdKV07XG4gICAgLy8gU29ydCByb3dzICsgdGhlaXIgdGltZXMgdG9nZXRoZXIgYnkga2V5IHNvIGVhY2ggb3V0cHV0IGZpbGUgaXMga2V5LWNvbnRpZ3VvdXMuXG4gICAgY29uc3Qgb3JkZXIgPSByb3dzLm1hcCgoXywgaSkgPT4gaSkuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICBjb25zdCBrYSA9IHJvd3NbYV1bS0VZX0NPTFVNTl0gYXMgc3RyaW5nO1xuICAgICAgICBjb25zdCBrYiA9IHJvd3NbYl1bS0VZX0NPTFVNTl0gYXMgc3RyaW5nO1xuICAgICAgICByZXR1cm4ga2EgPCBrYiA/IC0xIDoga2EgPiBrYiA/IDEgOiAwO1xuICAgIH0pO1xuICAgIGNvbnN0IHNvcnRlZFJvd3MgPSBvcmRlci5tYXAoaSA9PiByb3dzW2ldKTtcbiAgICBjb25zdCBzb3J0ZWRUaW1lcyA9IG9yZGVyLm1hcChpID0+IHRpbWVzW2ldKTtcbiAgICBjb25zdCByZXN1bHQ6IEJ1aWx0RmlsZVtdID0gW107XG4gICAgbGV0IGNodW5rU3RhcnQgPSAwO1xuICAgIGxldCBjaHVua0J5dGVzID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNvcnRlZFJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3Qgcm93Qnl0ZXMgPSBlc3RpbWF0ZVJvd0J5dGVzKHNvcnRlZFJvd3NbaV0pO1xuICAgICAgICBpZiAoaSA+IGNodW5rU3RhcnQgJiYgY2h1bmtCeXRlcyArIHJvd0J5dGVzID4gdGFyZ2V0Qnl0ZXMpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKG1ha2Uoc29ydGVkUm93cy5zbGljZShjaHVua1N0YXJ0LCBpKSwgc29ydGVkVGltZXMuc2xpY2UoY2h1bmtTdGFydCwgaSkpKTtcbiAgICAgICAgICAgIGNodW5rU3RhcnQgPSBpO1xuICAgICAgICAgICAgY2h1bmtCeXRlcyA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgY2h1bmtCeXRlcyArPSByb3dCeXRlcztcbiAgICB9XG4gICAgcmVzdWx0LnB1c2gobWFrZShzb3J0ZWRSb3dzLnNsaWNlKGNodW5rU3RhcnQpLCBzb3J0ZWRUaW1lcy5zbGljZShjaHVua1N0YXJ0KSkpO1xuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbi8vIFRoZSByYXctc3BsaWNlIGNvdW50ZXJwYXJ0IG9mIGJ1aWxkRmlsZUJ1ZmZlciwgdXNlZCBieSBtZXJnZXM6IHRoZSByb3dzIGFscmVhZHkgY2FycnkgdGhlaXIgd2lubmluZ1xuLy8gY2VsbHMgYXMgcmF3IG9uLWRpc2sgYnl0ZXMgKG5vIEpTIHZhbHVlcyksIHNvIHRoaXMganVzdCBzb3J0cyBieSBrZXksIGNodW5rcyB0byB+dGFyZ2V0Qnl0ZXMsIGFuZFxuLy8gY29uY2F0ZW5hdGVzIHRoZSBieXRlcy4gU2FtZSBvdXRwdXQgZ3VhcmFudGVlczoga2V5LWNvbnRpZ3VvdXMsIGRpc2pvaW50LCBhc2NlbmRpbmcgZmlsZXMuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRGaWxlQnVmZmVyUmF3KHJvd3M6IFJhd1Jvd1tdLCB0YXJnZXRCeXRlcyA9IFRBUkdFVF9GSUxFX0JZVEVTKTogQnVpbHRGaWxlW10ge1xuICAgIGNvbnN0IG1ha2UgPSAocnM6IFJhd1Jvd1tdKTogQnVpbHRGaWxlID0+ICh7XG4gICAgICAgIGJ1ZmZlcjogYnVpbGRPbmVGaWxlUmF3KHJzKSxcbiAgICAgICAgbWluS2V5OiBycy5sZW5ndGggPyByc1swXS5rZXkgOiBcIlwiLFxuICAgICAgICBtYXhLZXk6IHJzLmxlbmd0aCA/IHJzW3JzLmxlbmd0aCAtIDFdLmtleSA6IFwiXCIsXG4gICAgICAgIHJvd0NvdW50OiBycy5sZW5ndGgsXG4gICAgfSk7XG4gICAgaWYgKHJvd3MubGVuZ3RoID09PSAwKSByZXR1cm4gW21ha2UoW10pXTtcbiAgICBjb25zdCBzb3J0ZWQgPSByb3dzLnNsaWNlKCkuc29ydCgoYSwgYikgPT4gYS5rZXkgPCBiLmtleSA/IC0xIDogYS5rZXkgPiBiLmtleSA/IDEgOiAwKTtcbiAgICBjb25zdCByZXN1bHQ6IEJ1aWx0RmlsZVtdID0gW107XG4gICAgbGV0IGNodW5rU3RhcnQgPSAwO1xuICAgIGxldCBjaHVua0J5dGVzID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNvcnRlZC5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCByb3dCeXRlcyA9IGVzdGltYXRlUmF3Um93Qnl0ZXMoc29ydGVkW2ldKTtcbiAgICAgICAgaWYgKGkgPiBjaHVua1N0YXJ0ICYmIGNodW5rQnl0ZXMgKyByb3dCeXRlcyA+IHRhcmdldEJ5dGVzKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaChtYWtlKHNvcnRlZC5zbGljZShjaHVua1N0YXJ0LCBpKSkpO1xuICAgICAgICAgICAgY2h1bmtTdGFydCA9IGk7XG4gICAgICAgICAgICBjaHVua0J5dGVzID0gMDtcbiAgICAgICAgfVxuICAgICAgICBjaHVua0J5dGVzICs9IHJvd0J5dGVzO1xuICAgIH1cbiAgICByZXN1bHQucHVzaChtYWtlKHNvcnRlZC5zbGljZShjaHVua1N0YXJ0KSkpO1xuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCB0eXBlIEJhc2VCdWxrRGF0YWJhc2VSZWFkZXIgPSB7XG4gICAgLy8gSWRlbnRpZmllcyB0aGUgc291cmNlIHRoaXMgcmVhZGVyIGNhbWUgZnJvbSAodGhlIGJ1bGsgZmlsZSBuYW1lLCBvciBcIihzdHJlYW1zKVwiKSBzbyB0aGUgam9pbiBjYW5cbiAgICAvLyBuYW1lIHRoZSBvZmZlbmRpbmcgZmlsZSB3aGVuIG9uZSBvZiBpdHMgcmVhZHMgZmFpbHMuIFVuZGVmaW5lZCBmb3IgcmVhZGVycyBidWlsdCB3aXRob3V0IG9uZS5cbiAgICBuYW1lPzogc3RyaW5nO1xuICAgIHJvd0NvdW50OiBudW1iZXI7XG4gICAgdG90YWxCeXRlczogbnVtYmVyO1xuICAgIC8vIFdyaXRlLXRpbWUgYm91bmRzIG9mIHRoaXMgcmVhZGVyJ3MgZGF0YSAoMCBpZiB1bmtub3duIOKAlCBvbGQgYnVsayBmaWxlcykuXG4gICAgbWluVGltZTogbnVtYmVyO1xuICAgIG1heFRpbWU6IG51bWJlcjtcbiAgICAvLyBLZXktcmFuZ2UgYm91bmRzICh1bmRlZmluZWQgZm9yIG9sZCBmaWxlcyAvIHRoZSBzdHJlYW0gcmVhZGVyIOKAlCB0cmVhdCBhcyBcInNwYW5zIGFsbCBrZXlzXCIpLlxuICAgIG1pbktleT86IHN0cmluZztcbiAgICBtYXhLZXk/OiBzdHJpbmc7XG4gICAgLy8gS2V5cyBpcyBzcGVjaWFsLCBpdCdzIGFsd2F5cyBhdXRvbWF0aWNhbGx5IGRlY29kZWQsIGV2ZW4gdGhvdWdoIGl0IGlzIHN0b3JlZCBhcyBhIG5vcm1hbCBjb2x1bW5cbiAgICBrZXlzOiBzdHJpbmdbXTtcbiAgICBjb2x1bW5zOiB7IGNvbHVtbjogc3RyaW5nOyBieXRlU2l6ZTogbnVtYmVyIH1bXTtcbiAgICAvLyBFYWNoIGtleSdzIHJvdyB3cml0ZS10aW1lICh0aGUgdGltZSBvZiBpdHMgbmV3ZXN0IHdyaXRlIGluIHRoaXMgcmVhZGVyKS4gVGhlIGpvaW4gY29tcGFyZXMgdGhlc2VcbiAgICAvLyBhY3Jvc3MgcmVhZGVycyB0byByZXNvbHZlIGEga2V5IHRvIGl0cyBsYXRlc3QgdmFsdWUuXG4gICAga2V5VGltZXM6IE1hcDxzdHJpbmcsIG51bWJlcj47XG4gICAgLy8gUGVyLWtleSB0b21ic3RvbmUgdGltZTogdGhlIGtleSB3YXMgZGVsZXRlZCBhdCB0aGlzIHRpbWUuIFRoZSBqb2luIHRyZWF0cyBhIGRlbGV0ZSBsaWtlIGFueSBvdGhlclxuICAgIC8vIGV2ZW50IOKAlCBhIGRlbGV0ZSBvbmx5IHdpbnMgaWYgaXQncyBuZXdlciB0aGFuIGV2ZXJ5IHNldCBmb3IgdGhlIGtleS4gT25seSB0aGUgc3RyZWFtIHJlYWRlciBzZXRzIGl0LlxuICAgIGRlbGV0ZVRpbWVzPzogTWFwPHN0cmluZywgbnVtYmVyPjtcbiAgICAvLyBFYWNoIGtleSdzIHZhbHVlIGZvciB0aGUgY29sdW1uIHBsdXMgdGhlIHJvdydzIHdyaXRlLXRpbWUuIHZhbHVlIG1heSBiZSBBQlNFTlQgKHRoZSByb3cgbmV2ZXIgc2V0XG4gICAgLy8gdGhpcyBjb2x1bW4g4oCUIHRoZSBqb2luIHRoZW4gZmFsbHMgdGhyb3VnaCB0byBhbiBvbGRlciByZWFkZXIgZm9yIHRoYXQga2V5L2NvbHVtbikuXG4gICAgZ2V0Q29sdW1uOiAoY29sdW1uOiBzdHJpbmcpID0+IFByb21pc2U8eyBrZXk6IHN0cmluZzsgdmFsdWU6IHVua25vd247IHRpbWU6IG51bWJlciB9W10+O1xuICAgIC8vIExpa2UgZ2V0Q29sdW1uIGJ1dCByZXR1cm5zIGVhY2ggY2VsbCdzIHJhdyBvbi1kaXNrIGVuY29kaW5nICh0eXBlIHRhZyArIGJ5dGVzKSBrZXllZCBieSBrZXksIFdJVEhPVVRcbiAgICAvLyBkZWNvZGluZyB0aGUgdmFsdWUg4oCUIGZvciBtZXJnZXMsIHdoaWNoIHNwbGljZSB0aGUgd2lubmluZyBieXRlcyBzdHJhaWdodCBpbnRvIHRoZSBvdXRwdXQuIEFCU0VOVFxuICAgIC8vIGNlbGxzIGFyZSBvbWl0dGVkIChhIG1pc3Npbmcga2V5IG1lYW5zIHRoaXMgcmVhZGVyIGRpZG4ndCBzZXQgdGhpcyBjb2x1bW4sIHNvIHRoZSBtZXJnZSBmYWxsc1xuICAgIC8vIHRocm91Z2ggdG8gYW4gb2xkZXIgcmVhZGVyKS4gRWFjaCBjZWxsJ3Mgd3JpdGUtdGltZSBpcyB0aGUgcmVhZGVyJ3Mga2V5VGltZXMgdmFsdWUgZm9yIHRoYXQga2V5LlxuICAgIGdldFJhd0NvbHVtbjogKGNvbHVtbjogc3RyaW5nKSA9PiBQcm9taXNlPE1hcDxzdHJpbmcsIFJhd0NlbGw+PjtcbiAgICAvLyBSZXR1cm5zIHRoZSBjb2x1bW4ncyBJTkRFWCAob2Zmc2V0cyArIHR5cGVzKSBwbHVzIGEgY29udGlndW91cyByb3ctcmFuZ2UgYnl0ZSByZWFkZXIuIFRoZSBwbGFubmVkXG4gICAgLy8gbWVyZ2UgbG9hZHMgdGhpcyBmb3IgZXZlcnkgKHNvdXJjZSwgY29sdW1uKSBvbmNlIOKAlCBzbWFsbCAofjVCL3JvdyksIG5vIHZhbHVlIGJ5dGVzIHB1bGxlZCDigJQgYW5kXG4gICAgLy8gdXNlcyB0eXBlcy9vZmZzZXRzIHRvIHBsYW4gdGhlIG91dHB1dCdzIGJ5dGUgbGF5b3V0LiBFeGVjdXRlIHRoZW4gcmVhZHMgb25seSB0aGUgbmVlZGVkIHJ1bnMuXG4gICAgZ2V0Q29sdW1uSW5kZXg6IChjb2x1bW46IHN0cmluZykgPT4gUHJvbWlzZTxDb2x1bW5JbmRleD47XG4gICAgLy8gTWFwcyBhIGtleSB0byBpdHMgcm93IGluZGV4IGluIHRoaXMgcmVhZGVyIChhbmQgdW5kZWZpbmVkIGlmIGFic2VudCkuIFRoZSBwbGFubmVkIG1lcmdlIHVzZXMgdGhpc1xuICAgIC8vIHRvIGxvb2sgdXAgYSB3aW5uaW5nIGNlbGwncyBzb3VyY2Ugcm93IHdpdGhvdXQgZ29pbmcgdGhyb3VnaCBhIGNvbHVtbiByZWFkLlxuICAgIHJvd09mS2V5OiAoa2V5OiBzdHJpbmcpID0+IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgICAvLyBUaGUgdmFsdWUgKyB3cml0ZS10aW1lIGZvciAoa2V5LCBjb2x1bW4pLCBvciBBQlNFTlQgaWYgdGhpcyByZWFkZXIgaGFzIG5vIHN1Y2ggY2VsbC5cbiAgICBnZXRTaW5nbGVGaWVsZDogKGtleTogc3RyaW5nLCBjb2x1bW46IHN0cmluZykgPT4gUHJvbWlzZTx7IHZhbHVlOiB1bmtub3duOyB0aW1lOiBudW1iZXIgfSB8IHR5cGVvZiBBQlNFTlQ+O1xufTtcblxuLy8gUmVhZHMganVzdCB0aGUgZmlsZSBoZWFkZXIgKHRoZSA0LWJ5dGUgbGVuZ3RoICsgaGVhZGVyIEpTT04pIOKAlCBubyBjb2x1bW4gZGF0YS4gVXNlZCBieSB0aGUgbWVyZ2Vcbi8vIHBsYW5uZXIgdG8gZ2V0IGVhY2ggZmlsZSdzIHJvdyBjb3VudCwgdGltZSByYW5nZSwgYW5kIGtleSByYW5nZSBjaGVhcGx5IGFjcm9zcyBtYW55IGZpbGVzLlxuZXhwb3J0IHR5cGUgQnVsa0hlYWRlckluZm8gPSB7IHJvd0NvdW50OiBudW1iZXI7IG1pblRpbWU6IG51bWJlcjsgbWF4VGltZTogbnVtYmVyOyBtaW5LZXk/OiBzdHJpbmc7IG1heEtleT86IHN0cmluZzsgY29sdW1uczogeyBjb2x1bW46IHN0cmluZzsgYnl0ZVNpemU6IG51bWJlciB9W10gfTtcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkQnVsa0hlYWRlcihnZXRSYW5nZTogKHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyKSA9PiBQcm9taXNlPEJ1ZmZlcj4sIHRvdGFsQnl0ZXM6IG51bWJlcik6IFByb21pc2U8QnVsa0hlYWRlckluZm8+IHtcbiAgICBjb25zdCBoZWFkZXJMZW5ndGggPSAoYXdhaXQgZ2V0UmFuZ2UoMCwgNCkpLnJlYWRVSW50MzJMRSgwKTtcbiAgICBpZiAoaGVhZGVyTGVuZ3RoIDw9IDAgfHwgaGVhZGVyTGVuZ3RoID4gdG90YWxCeXRlcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGhlYWRlciBsZW5ndGggaW4gKDAsICR7dG90YWxCeXRlc31dLCB3YXMgJHtoZWFkZXJMZW5ndGh9YCk7XG4gICAgfVxuICAgIGNvbnN0IGhlYWRlciA9IEpTT04ucGFyc2UoKGF3YWl0IGdldFJhbmdlKDQsIDQgKyBoZWFkZXJMZW5ndGgpKS50b1N0cmluZyhcInV0ZjhcIikpIGFzIEZpbGVIZWFkZXI7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgcm93Q291bnQ6IGhlYWRlci5yb3dDb3VudCxcbiAgICAgICAgbWluVGltZTogaGVhZGVyLm1pblRpbWUgfHwgMCxcbiAgICAgICAgbWF4VGltZTogaGVhZGVyLm1heFRpbWUgfHwgMCxcbiAgICAgICAgbWluS2V5OiBoZWFkZXIubWluS2V5LFxuICAgICAgICBtYXhLZXk6IGhlYWRlci5tYXhLZXksXG4gICAgICAgIGNvbHVtbnM6IGhlYWRlci5jb2x1bW5zLmZpbHRlcihjID0+IGMubmFtZSAhPT0gVElNRV9DT0xVTU4pLm1hcChjID0+ICh7IGNvbHVtbjogYy5uYW1lLCBieXRlU2l6ZTogYy5sZW5ndGggfSkpLFxuICAgIH07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkQnVsa0RhdGFiYXNlKGNvbmZpZzoge1xuICAgIHRvdGFsQnl0ZXM6IG51bWJlcjtcbiAgICBnZXRSYW5nZTogKHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyKSA9PiBQcm9taXNlPEJ1ZmZlcj47XG4gICAgbmFtZT86IHN0cmluZztcbn0pOiBQcm9taXNlPEJhc2VCdWxrRGF0YWJhc2VSZWFkZXI+IHtcbiAgICBjb25zdCBoZWFkZXJMZW5ndGggPSAoYXdhaXQgY29uZmlnLmdldFJhbmdlKDAsIDQpKS5yZWFkVUludDMyTEUoMCk7XG4gICAgaWYgKGhlYWRlckxlbmd0aCA8PSAwIHx8IGhlYWRlckxlbmd0aCA+IGNvbmZpZy50b3RhbEJ5dGVzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgaGVhZGVyIGxlbmd0aCBpbiAoMCwgJHtjb25maWcudG90YWxCeXRlc31dLCB3YXMgJHtoZWFkZXJMZW5ndGh9YCk7XG4gICAgfVxuICAgIGNvbnN0IGhlYWRlciA9IEpTT04ucGFyc2UoKGF3YWl0IGNvbmZpZy5nZXRSYW5nZSg0LCA0ICsgaGVhZGVyTGVuZ3RoKSkudG9TdHJpbmcoXCJ1dGY4XCIpKSBhcyBGaWxlSGVhZGVyO1xuICAgIGNvbnN0IGRhdGFCYXNlID0gNCArIGhlYWRlckxlbmd0aDtcbiAgICBjb25zdCByb3dDb3VudCA9IGhlYWRlci5yb3dDb3VudDtcbiAgICBjb25zdCBjb2xCeU5hbWUgPSBuZXcgTWFwKGhlYWRlci5jb2x1bW5zLm1hcChjID0+IFtjLm5hbWUsIGNdKSk7XG5cbiAgICBhc3luYyBmdW5jdGlvbiByZWFkV2hvbGVDb2x1bW4oY29sdW1uOiBzdHJpbmcpOiBQcm9taXNlPHVua25vd25bXT4ge1xuICAgICAgICBjb25zdCBjb2wgPSBjb2xCeU5hbWUuZ2V0KGNvbHVtbik7XG4gICAgICAgIGlmICghY29sKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGNvbHVtbiAke2NvbHVtbn0sIGZpbGUgb25seSBoYXM6ICR7aGVhZGVyLmNvbHVtbnMubWFwKGMgPT4gYy5uYW1lKS5qb2luKFwiLCBcIil9YCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYmxvYiA9IGF3YWl0IGNvbmZpZy5nZXRSYW5nZShkYXRhQmFzZSArIGNvbC5vZmZzZXQsIGRhdGFCYXNlICsgY29sLm9mZnNldCArIGNvbC5sZW5ndGgpO1xuICAgICAgICByZXR1cm4gZGVjb2RlQnVsa0RhdGEoYmxvYiwgcm93Q291bnQpO1xuICAgIH1cblxuICAgIGNvbnN0IGtleXMgPSAoYXdhaXQgcmVhZFdob2xlQ29sdW1uKEtFWV9DT0xVTU4pKS5tYXAodiA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgdiAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBzdHJpbmcga2V5LCB3YXMgJHt0eXBlb2Ygdn06ICR7SlNPTi5zdHJpbmdpZnkodik/LnNsaWNlKDAsIDUwMCl9YCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHY7XG4gICAgfSk7XG4gICAgY29uc3Qga2V5SW5kZXggPSBuZXcgTWFwKGtleXMubWFwKChrZXksIGkpID0+IFtrZXksIGldKSk7XG5cbiAgICAvLyBQZXItcm93IHdyaXRlLXRpbWVzLiBPbGQgZmlsZXMgKHdyaXR0ZW4gYmVmb3JlIHRoaXMgY29sdW1uIGV4aXN0ZWQpIGZhbGwgYmFjayB0byB0aGUgZmlsZSdzIGhlYWRlclxuICAgIC8vIHRpbWUgKG9yIDApIGZvciBldmVyeSByb3cg4oCUIGZpbmUsIHNpbmNlIHN1Y2ggZmlsZXMgcHJlZGF0ZSBjb25jdXJyZW50LXRpbWUgcmVzb2x1dGlvbi5cbiAgICBjb25zdCB0aW1lczogbnVtYmVyW10gPSBjb2xCeU5hbWUuaGFzKFRJTUVfQ09MVU1OKVxuICAgICAgICA/IChhd2FpdCByZWFkV2hvbGVDb2x1bW4oVElNRV9DT0xVTU4pKS5tYXAodiA9PiB0eXBlb2YgdiA9PT0gXCJudW1iZXJcIiA/IHYgOiAwKVxuICAgICAgICA6IGtleXMubWFwKCgpID0+IGhlYWRlci5tYXhUaW1lIHx8IDApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogY29uZmlnLm5hbWUsXG4gICAgICAgIHJvd0NvdW50LFxuICAgICAgICB0b3RhbEJ5dGVzOiBjb25maWcudG90YWxCeXRlcyxcbiAgICAgICAgbWluVGltZTogaGVhZGVyLm1pblRpbWUgfHwgMCxcbiAgICAgICAgbWF4VGltZTogaGVhZGVyLm1heFRpbWUgfHwgMCxcbiAgICAgICAgbWluS2V5OiBoZWFkZXIubWluS2V5LFxuICAgICAgICBtYXhLZXk6IGhlYWRlci5tYXhLZXksXG4gICAgICAgIGtleXMsXG4gICAgICAgIGtleVRpbWVzOiBuZXcgTWFwKGtleXMubWFwKChrZXksIGkpID0+IFtrZXksIHRpbWVzW2ldXSkpLFxuICAgICAgICBjb2x1bW5zOiBoZWFkZXIuY29sdW1ucy5maWx0ZXIoYyA9PiBjLm5hbWUgIT09IFRJTUVfQ09MVU1OKS5tYXAoYyA9PiAoeyBjb2x1bW46IGMubmFtZSwgYnl0ZVNpemU6IGMubGVuZ3RoIH0pKSxcbiAgICAgICAgYXN5bmMgZ2V0Q29sdW1uKGNvbHVtbikge1xuICAgICAgICAgICAgY29uc3QgdmFsdWVzID0gYXdhaXQgcmVhZFdob2xlQ29sdW1uKGNvbHVtbik7XG4gICAgICAgICAgICByZXR1cm4ga2V5cy5tYXAoKGtleSwgaSkgPT4gKHsga2V5LCB2YWx1ZTogdmFsdWVzW2ldLCB0aW1lOiB0aW1lc1tpXSB9KSk7XG4gICAgICAgIH0sXG4gICAgICAgIGFzeW5jIGdldFJhd0NvbHVtbihjb2x1bW4pIHtcbiAgICAgICAgICAgIGNvbnN0IG1hcCA9IG5ldyBNYXA8c3RyaW5nLCBSYXdDZWxsPigpO1xuICAgICAgICAgICAgY29uc3QgY29sID0gY29sQnlOYW1lLmdldChjb2x1bW4pO1xuICAgICAgICAgICAgaWYgKCFjb2wpIHJldHVybiBtYXA7IC8vIGZpbGUgbGFja3MgdGhpcyBjb2x1bW4g4oaSIGV2ZXJ5IGNlbGwgQUJTRU5UIChmYWxsIHRocm91Z2gpXG4gICAgICAgICAgICBjb25zdCBibG9iID0gYXdhaXQgY29uZmlnLmdldFJhbmdlKGRhdGFCYXNlICsgY29sLm9mZnNldCwgZGF0YUJhc2UgKyBjb2wub2Zmc2V0ICsgY29sLmxlbmd0aCk7XG4gICAgICAgICAgICBjb25zdCBpbmRleFNpemUgPSA0ICogKHJvd0NvdW50ICsgMSkgKyByb3dDb3VudDtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93Q291bnQ7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHR5cGUgPSBibG9iWzQgKiAocm93Q291bnQgKyAxKSArIGldO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSBUWVBFX0FCU0VOVCkgY29udGludWU7IC8vIG9taXQgQUJTRU5UIHNvIHRoZSBqb2luIGZhbGxzIHRocm91Z2hcbiAgICAgICAgICAgICAgICBjb25zdCBzdGFydCA9IGJsb2IucmVhZFVJbnQzMkxFKDQgKiBpKTtcbiAgICAgICAgICAgICAgICBjb25zdCBlbmQgPSBibG9iLnJlYWRVSW50MzJMRSg0ICogKGkgKyAxKSk7XG4gICAgICAgICAgICAgICAgbWFwLnNldChrZXlzW2ldLCB7IHR5cGUsIGJ5dGVzOiBibG9iLnN1YmFycmF5KGluZGV4U2l6ZSArIHN0YXJ0LCBpbmRleFNpemUgKyBlbmQpIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG1hcDtcbiAgICAgICAgfSxcbiAgICAgICAgYXN5bmMgZ2V0Q29sdW1uSW5kZXgoY29sdW1uKSB7XG4gICAgICAgICAgICBjb25zdCBjb2wgPSBjb2xCeU5hbWUuZ2V0KGNvbHVtbik7XG4gICAgICAgICAgICBpZiAoIWNvbCkge1xuICAgICAgICAgICAgICAgIC8vIEZpbGUgbGFja3MgdGhpcyBjb2x1bW4g4oCUIHByZXNlbnQgYW4gYWxsLUFCU0VOVCBpbmRleCBzbyB0aGUgcGxhbm5lciBjYW4gdHJlYXQgaXRcbiAgICAgICAgICAgICAgICAvLyB1bmlmb3JtbHkgd2l0aCBmaWxlcyB0aGF0IGhhdmUgdGhlIGNvbHVtbi5cbiAgICAgICAgICAgICAgICBjb25zdCBvZmZzZXRzID0gbmV3IFVpbnQzMkFycmF5KHJvd0NvdW50ICsgMSk7XG4gICAgICAgICAgICAgICAgY29uc3QgdHlwZXMgPSBuZXcgVWludDhBcnJheShyb3dDb3VudCkuZmlsbChUWVBFX0FCU0VOVCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0cyxcbiAgICAgICAgICAgICAgICAgICAgdHlwZXMsXG4gICAgICAgICAgICAgICAgICAgIGFzeW5jIHJlYWRWYWx1ZUJ5dGVzKCkgeyByZXR1cm4gRU1QVFlfQlVGRkVSOyB9LFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBjb2xCYXNlID0gZGF0YUJhc2UgKyBjb2wub2Zmc2V0O1xuICAgICAgICAgICAgY29uc3QgaW5kZXhTaXplID0gNCAqIChyb3dDb3VudCArIDEpICsgcm93Q291bnQ7XG4gICAgICAgICAgICAvLyBPbmUgcmVhZCBwdWxscyBvZmZzZXRzICsgdHlwZXMgKHNtYWxsIOKAlCB+NSBCL3JvdykuIEJsb2NrIGNhY2hlIG1ha2VzIHN1YnNlcXVlbnQgdmFsdWUgcmVhZHNcbiAgICAgICAgICAgIC8vIG9mIG5lYXJieSByb3dzIGNoZWFwLiBEZWNvZGVkIGludG8gYWxpZ25lZCB0eXBlZCBhcnJheXMgc28gdGhlIGV4ZWN1dG9yIGNhbiBkbyBPKDEpIGxvb2t1cHMuXG4gICAgICAgICAgICBjb25zdCBpbmRleEJ1ZiA9IGF3YWl0IGNvbmZpZy5nZXRSYW5nZShjb2xCYXNlLCBjb2xCYXNlICsgaW5kZXhTaXplKTtcbiAgICAgICAgICAgIGNvbnN0IG9mZnNldHMgPSBuZXcgVWludDMyQXJyYXkocm93Q291bnQgKyAxKTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDw9IHJvd0NvdW50OyBpKyspIG9mZnNldHNbaV0gPSBpbmRleEJ1Zi5yZWFkVUludDMyTEUoNCAqIGkpO1xuICAgICAgICAgICAgY29uc3QgdHlwZXMgPSBuZXcgVWludDhBcnJheShyb3dDb3VudCk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd0NvdW50OyBpKyspIHR5cGVzW2ldID0gaW5kZXhCdWZbNCAqIChyb3dDb3VudCArIDEpICsgaV07XG4gICAgICAgICAgICBjb25zdCBkYXRhU3RhcnQgPSBjb2xCYXNlICsgaW5kZXhTaXplO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBvZmZzZXRzLFxuICAgICAgICAgICAgICAgIHR5cGVzLFxuICAgICAgICAgICAgICAgIGFzeW5jIHJlYWRWYWx1ZUJ5dGVzKHN0YXJ0Um93LCBlbmRSb3cpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVuZFJvdyA8PSBzdGFydFJvdykgcmV0dXJuIEVNUFRZX0JVRkZFUjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSBvZmZzZXRzW3N0YXJ0Um93XTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kID0gb2Zmc2V0c1tlbmRSb3ddO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZW5kIDw9IHN0YXJ0KSByZXR1cm4gRU1QVFlfQlVGRkVSO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29uZmlnLmdldFJhbmdlKGRhdGFTdGFydCArIHN0YXJ0LCBkYXRhU3RhcnQgKyBlbmQpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgICAgICByb3dPZktleShrZXkpIHtcbiAgICAgICAgICAgIHJldHVybiBrZXlJbmRleC5nZXQoa2V5KTtcbiAgICAgICAgfSxcbiAgICAgICAgYXN5bmMgZ2V0U2luZ2xlRmllbGQoa2V5LCBjb2x1bW4pIHtcbiAgICAgICAgICAgIGNvbnN0IHJvdyA9IGtleUluZGV4LmdldChrZXkpO1xuICAgICAgICAgICAgaWYgKHJvdyA9PT0gdW5kZWZpbmVkKSByZXR1cm4gQUJTRU5UO1xuICAgICAgICAgICAgY29uc3QgY29sID0gY29sQnlOYW1lLmdldChjb2x1bW4pO1xuICAgICAgICAgICAgaWYgKCFjb2wpIHJldHVybiBBQlNFTlQ7XG4gICAgICAgICAgICBjb25zdCBjb2xCYXNlID0gZGF0YUJhc2UgKyBjb2wub2Zmc2V0O1xuICAgICAgICAgICAgY29uc3Qgb2Zmc2V0c0J1ZiA9IGF3YWl0IGNvbmZpZy5nZXRSYW5nZShjb2xCYXNlICsgNCAqIHJvdywgY29sQmFzZSArIDQgKiByb3cgKyA4KTtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gb2Zmc2V0c0J1Zi5yZWFkVUludDMyTEUoMCk7XG4gICAgICAgICAgICBjb25zdCBlbmQgPSBvZmZzZXRzQnVmLnJlYWRVSW50MzJMRSg0KTtcbiAgICAgICAgICAgIGNvbnN0IHR5cGVQb3MgPSBjb2xCYXNlICsgNCAqIChyb3dDb3VudCArIDEpICsgcm93O1xuICAgICAgICAgICAgY29uc3QgdHlwZUJ1ZiA9IGF3YWl0IGNvbmZpZy5nZXRSYW5nZSh0eXBlUG9zLCB0eXBlUG9zICsgMSk7XG4gICAgICAgICAgICBjb25zdCBkYXRhU3RhcnQgPSBjb2xCYXNlICsgNCAqIChyb3dDb3VudCArIDEpICsgcm93Q291bnQ7XG4gICAgICAgICAgICBsZXQgYnl0ZXMgPSBFTVBUWV9CVUZGRVI7XG4gICAgICAgICAgICBpZiAoZW5kID4gc3RhcnQpIHtcbiAgICAgICAgICAgICAgICBieXRlcyA9IGF3YWl0IGNvbmZpZy5nZXRSYW5nZShkYXRhU3RhcnQgKyBzdGFydCwgZGF0YVN0YXJ0ICsgZW5kKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZGVjb2RlVmFsdWUodHlwZUJ1ZlswXSwgYnl0ZXMpO1xuICAgICAgICAgICAgaWYgKHZhbHVlID09PSBBQlNFTlQpIHJldHVybiBBQlNFTlQ7XG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZSwgdGltZTogdGltZXNbcm93XSB9O1xuICAgICAgICB9LFxuICAgIH07XG59XG4iXX0=
513
- /* _JS_SOURCE_HASH = "9a6ef16155eeef797edef47467ace2aa8a3c9b5493e6be9fbb76a7c57b83b8b5"; */
513
+ /* _JS_SOURCE_HASH = "eb82a25b173617ed8a4a1814aa99444502e4d56e363c8bb8b80d2ea1f6aa5e1f"; */
@@ -1,4 +1,4 @@
1
- "use strict";
1
+ "use strict"; var console = (function shimConsole() { let baseConsole = globalThis.console; if (typeof window !== "undefined") return baseConsole; let name = __filename.replaceAll("\\", "/").split("/").pop(); let dirName = __dirname.replaceAll("\\", "/").split("/").pop(); let context = { __FILE__: __filename, __DIR__: __dirname, __NAME__: name, __DIRNAME__: dirName }; let newConsole = { ...baseConsole }; for (let shim of ["log", "info", "warn", "error"]) { newConsole[shim] = (...args) => { args.push(context); baseConsole[shim](...args); }; } newConsole.__context = context; return newConsole; })(); "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true , configurable: true});
3
3
  //exports.runPlannedMerge = void 0;
4
4
  const format_1 = require("socket-function/src/formatting/format");
@@ -349,4 +349,4 @@ async function executeBatch(plans, indexesPerSource, sources, sourceNames, write
349
349
  return outputs;
350
350
  }
351
351
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQnVsa0RhdGFiYXNlTWVyZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJCdWxrRGF0YWJhc2VNZXJnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxrRUFBcUU7QUFDckUsd0VBQXlFO0FBQ3pFLDZEQVE4QjtBQUU5QiwwR0FBMEc7QUFDMUcsMEdBQTBHO0FBQzFHLHFHQUFxRztBQUNyRyxNQUFNLDBCQUEwQixHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztBQUUxRCxzR0FBc0c7QUFDdEcseUZBQXlGO0FBQ3pGLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxDQUFDO0FBRTdCLFNBQVMsUUFBUSxDQUFDLENBQVM7SUFDdkIsSUFBSSxDQUFDLEdBQUcsSUFBSTtRQUFFLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUM3QixJQUFJLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSTtRQUFFLE9BQU8sQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztJQUN6RCxJQUFJLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUk7UUFBRSxPQUFPLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3ZFLE9BQU8sQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3RELENBQUM7QUErQ0QsZ0dBQWdHO0FBQ2hHLDJCQUEyQjtBQUMzQiw2RkFBNkY7QUFDN0Ysd0dBQXdHO0FBQ3hHLHlHQUF5RztBQUN6RyxxR0FBcUc7QUFDckcsbUdBQW1HO0FBQ25HLHdHQUF3RztBQUN4RyxnR0FBZ0c7QUFDaEcsbUdBQW1HO0FBQ25HLHNHQUFzRztBQUMvRixL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Q2hELE1BQU0sWUFBWSxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO1FBQy9DLEtBQUssTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsWUFBWTtZQUFFLFlBQVksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzlFLEdBQUcsQ0FBQyxHQUFHLElBQUEsbUJBQU8sRUFBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssSUFBQSxxQkFBWSxFQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLGNBQWMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6SixPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUM7SUFDOUgsQ0FBQztJQUNELE9BQU8sT0FBTyxDQUFDO0FBQ25CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmb3JtYXROdW1iZXIgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9mb3JtYXR0aW5nL2Zvcm1hdFwiO1xuaW1wb3J0IHsgYmx1ZSwgbWFnZW50YSB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vc3JjL2Zvcm1hdHRpbmcvbG9nQ29sb3JzXCI7XG5pbXBvcnQge1xuICAgIEJhc2VCdWxrRGF0YWJhc2VSZWFkZXIsXG4gICAgQ29sdW1uSW5kZXgsXG4gICAgYXNzZW1ibGVQbGFubmVkRmlsZSxcbiAgICBjb2x1bW5JbmRleEJ5dGVMZW5ndGgsXG4gICAgS0VZX0NPTFVNTixcbiAgICBUQVJHRVRfRklMRV9CWVRFUyxcbiAgICBUWVBFX0FCU0VOVF9UQUcsXG59IGZyb20gXCIuL0J1bGtEYXRhYmFzZUZvcm1hdFwiO1xuXG4vLyBEZWZhdWx0IHRvdGFsIGluLWZsaWdodCBidWZmZXIgYnVkZ2V0IGZvciB0aGUgZXhlY3V0b3I6IGhvdyBtdWNoIG91dHB1dCB2YWx1ZS1kYXRhIHdlIGhvbGQgaW4gbWVtb3J5IGF0XG4vLyBvbmNlLiBNdWx0aXBsZSBvdXRwdXQgZmlsZXMgKOKJpCBUQVJHRVRfRklMRV9CWVRFUyBlYWNoKSBhcmUgYnVpbHQgdG9nZXRoZXIgaW5zaWRlIHRoaXMgYnVkZ2V0IHNvIHJlYWRpbmdcbi8vIGlucHV0cyBvbmNlIGFtb3J0aXplcyB0aGVpciBJL08gYWNyb3NzIHNldmVyYWwgb3V0cHV0cy4gVGlnaHRlciBidWRnZXQg4oaSIG1vcmUgcGFzc2VzLCBsZXNzIG1lbW9yeS5cbmNvbnN0IERFRkFVTFRfT1VUUFVUX0JBVENIX0JZVEVTID0gMiAqIDEwMjQgKiAxMDI0ICogMTAyNDtcblxuLy8gUGVyLXZhbHVlIG9uLWRpc2sgb3ZlcmhlYWQgKDQtYnl0ZSBvZmZzZXQgZW50cnkgKyAxLWJ5dGUgdHlwZSB0YWcpLiBVc2VkIGZvciB0aGUgcGFydGl0aW9uLWN1dCBzaXplXG4vLyBlc3RpbWF0ZTsgdGhlIGV4ZWN1dG9yIGRvZXNuJ3QgdXNlIGl0IChvZmZzZXRzL3R5cGVzIGFyZSBzaXplZCBleGFjdGx5IGZyb20gdGhlIHBsYW4pLlxuY29uc3QgUEVSX1ZBTFVFX09WRVJIRUFEID0gNTtcblxuZnVuY3Rpb24gZm10Qnl0ZXMobjogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBpZiAobiA8IDEwMjQpIHJldHVybiBuICsgXCJCXCI7XG4gICAgaWYgKG4gPCAxMDI0ICogMTAyNCkgcmV0dXJuIChuIC8gMTAyNCkudG9GaXhlZCgxKSArIFwiS0JcIjtcbiAgICBpZiAobiA8IDEwMjQgKiAxMDI0ICogMTAyNCkgcmV0dXJuIChuIC8gMTAyNCAvIDEwMjQpLnRvRml4ZWQoMSkgKyBcIk1CXCI7XG4gICAgcmV0dXJuIChuIC8gMTAyNCAvIDEwMjQgLyAxMDI0KS50b0ZpeGVkKDIpICsgXCJHQlwiO1xufVxuXG4vLyBBIGNvbnRpZ3VvdXMgY29weSBvcGVyYXRpb246IHRha2UgYHNvdXJjZUVuZFJvdyAtIHNvdXJjZVN0YXJ0Um93YCBjb25zZWN1dGl2ZSByb3dzIG9mIG9uZSBzb3VyY2Vcbi8vIGNvbHVtbiwgc3BsaWNlIHRoZSByZXN1bHRpbmcgYnl0ZXMgaW50byB0aGUgb3V0cHV0IGNvbHVtbidzIGRhdGEgc2VjdGlvbiBhdCBvdXRwdXRCeXRlU3RhcnQuIEFkamFjZW50XG4vLyBwZXItcm93IGRlY2lzaW9ucyBnZXQgUkxFJ2QgaW50byBvbmUgY29weSBvcCDigJQgb25lIHNvdXJjZS1zaWRlIHJlYWQgKyBtZW1jcHkgaW5zdGVhZCBvZiBvbmUgcGVyIHJvdy5cbnR5cGUgQ29weVJ1biA9IHtcbiAgICBzb3VyY2VJZHg6IG51bWJlcjtcbiAgICBzb3VyY2VTdGFydFJvdzogbnVtYmVyO1xuICAgIHNvdXJjZUVuZFJvdzogbnVtYmVyO1xuICAgIG91dHB1dEJ5dGVTdGFydDogbnVtYmVyO1xuICAgIGJ5dGVMZW5ndGg6IG51bWJlcjtcbn07XG5cbnR5cGUgUGxhbm5lZE91dHB1dENvbHVtbiA9IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgLy8gb2Zmc2V0c1tpXS4ub2Zmc2V0c1tpKzFdID0gcm93IGkncyB2YWx1ZSBieXRlIHJhbmdlIGluIHRoZSBjb2x1bW4ncyBkYXRhIHNlY3Rpb24uIFBvcHVsYXRlZCBieSB0aGVcbiAgICAvLyBwbGFubmVyOyB0aGUgZXhlY3V0b3Igd3JpdGVzIGl0IHZlcmJhdGltIGludG8gdGhlIG91dHB1dCBjb2x1bW4gYmxvYi5cbiAgICBvZmZzZXRzOiBVaW50MzJBcnJheTtcbiAgICAvLyBQZXItcm93IHR5cGUgdGFnIChUWVBFX0FCU0VOVCBmb3IgZmFsbC10aHJvdWdoKS4gUG9wdWxhdGVkIGJ5IHRoZSBwbGFubmVyLlxuICAgIHR5cGVzOiBVaW50OEFycmF5O1xuICAgIC8vIFRvdGFsIGJ5dGVzIHRoZSBkYXRhIHNlY3Rpb24gd2lsbCBvY2N1cHkgPSBvZmZzZXRzW3Jvd0NvdW50XS5cbiAgICBkYXRhTGVuZ3RoOiBudW1iZXI7XG4gICAgLy8gUnVuLWxlbmd0aCBlbmNvZGVkIHBlci1yb3cgY29weSBkZWNpc2lvbnMsIGluIG91dHB1dCByb3cgb3JkZXIuIEFCU0VOVCByb3dzIGNvbnRyaWJ1dGUgbm8gcnVuLlxuICAgIHJ1bnM6IENvcHlSdW5bXTtcbn07XG5cbmV4cG9ydCB0eXBlIFBsYW5uZWRPdXRwdXRGaWxlID0ge1xuICAgIGtleXM6IHN0cmluZ1tdO1xuICAgIHRpbWVzOiBudW1iZXJbXTtcbiAgICBtaW5LZXk6IHN0cmluZztcbiAgICBtYXhLZXk6IHN0cmluZztcbiAgICBjb2x1bW5zOiBQbGFubmVkT3V0cHV0Q29sdW1uW107XG4gICAgLy8gU3VtIG9mIGFsbCBjb2x1bW4gZGF0YSBzaXplcyArIGluZGV4IG92ZXJoZWFkICsgaGVhZGVyIGd1ZXNzOyB1c2VkIHRvIGdyb3VwIG91dHB1dHMgaW50byBiYXRjaGVzLlxuICAgIGVzdGltYXRlZEZpbGVCeXRlczogbnVtYmVyO1xuICAgIC8vIHNvdXJjZUlkeCDihpIgbm9uLUFCU0VOVCBjZWxsIGNvdW50IGNvbnRyaWJ1dGVkIHRvIHRoaXMgb3V0cHV0IGZpbGUgKGZvciBsb2dnaW5nIFwid2hlcmUgaXQgY2FtZSBmcm9tXCIpLlxuICAgIHNvdXJjZUNvdW50czogTWFwPG51bWJlciwgbnVtYmVyPjtcbn07XG5cbmV4cG9ydCB0eXBlIFBsYW5uZWRNZXJnZU91dHB1dCA9IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgbWluS2V5OiBzdHJpbmc7XG4gICAgbWF4S2V5OiBzdHJpbmc7XG4gICAgcm93Q291bnQ6IG51bWJlcjtcbiAgICBzaXplOiBudW1iZXI7XG4gICAgc291cmNlczogTWFwPHN0cmluZywgbnVtYmVyPjtcbn07XG5cbi8vIFBsYW4gYSBtZXJnZSBvdmVyIGBzb3VyY2VzYCBhbmQgZXhlY3V0ZSBpdCwgd3JpdGluZyBvbmUgb3IgbW9yZSBvdXRwdXQgZmlsZXMgdmlhIHRoZSBjYWxsZXInc1xuLy8gYHdyaXRlRmlsZWAuIFR3byBwaGFzZXM6XG4vLyAgIOKAoiBQbGFubmluZzogbG9hZCBvbmx5IHBlci1jb2x1bW4gSU5ERVhFUyAob2Zmc2V0cyArIHR5cGVzIOKAlCB+NSBCL3Jvdywgc21hbGwgZXZlbiBvbiAyMEdCXG4vLyAgICAgY29sbGVjdGlvbnMpLCBkZXRlcm1pbmUgdGhlIHdpbm5pbmcgY2VsbCBwZXIgKGxpdmUga2V5LCBjb2x1bW4pIGJ5IG5ld2VzdCB3cml0ZS10aW1lICsgbm9uLUFCU0VOVFxuLy8gICAgIGZhbGwtdGhyb3VnaCwgc29ydCBrZXlzLCBwYXJ0aXRpb24gaW50byB+dGFyZ2V0RmlsZUJ5dGVzIG91dHB1dCBmaWxlcywgYW5kIHByZS1jb21wdXRlIGVhY2ggb3V0cHV0XG4vLyAgICAgY29sdW1uJ3Mgb2Zmc2V0cy90eXBlcyBhcnJheXMgcGx1cyBhIHJ1bi1sZW5ndGgtZW5jb2RlZCBjb3B5IHBsYW4gKG5vIHZhbHVlIGRhdGEgdG91Y2hlZCB5ZXQpLlxuLy8gICDigKIgRXhlY3V0ZTogZ3JvdXAgb3V0cHV0cyBpbnRvIH50YXJnZXRCYXRjaEJ5dGVzIGJhdGNoZXM7IHBlciBiYXRjaCwgYWxsb2NhdGUgY29sdW1uIGJsb2JzIHdpdGhcbi8vICAgICBvZmZzZXRzL3R5cGVzIGFscmVhZHkgZmlsbGVkIGluLCB0aGVuIGl0ZXJhdGUgaW5wdXQgc291cmNlcyBjb3B5aW5nIGNvbnRpZ3VvdXMgYnl0ZSBydW5zIHN0cmFpZ2h0XG4vLyAgICAgaW50byB0aGUgb3V0cHV0IGJ1ZmZlcnMuIEEgc291cmNlIHdpdGggbm8gY29udHJpYnV0aW9uIHRvIHRoaXMgYmF0Y2ggaXMgc2tpcHBlZCBlbnRpcmVseS5cbi8vIFJldHVybnMgdGhlIG5ldyBvdXRwdXQgZmlsZSBkZXNjcmlwdG9ycyBwbHVzIGFueSB0b21ic3RvbmVzIHdob3NlIG5ld2VzdCBldmVudCBpcyBzdGlsbCBhIGRlbGV0ZVxuLy8gKGNhcnJpZWQgZm9yd2FyZCB3aGVuIG9sZGVyIGZpbGVzIG91dHNpZGUgdGhlIG1lcmdlIGNvdWxkIHN0aWxsIGhvbGQgYSBub3ctc3RhbGUgc2V0IGZvciB0aGF0IGtleSkuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuUGxhbm5lZE1lcmdlKGNvbmZpZzoge1xuICAgIHNvdXJjZXM6IEJhc2VCdWxrRGF0YWJhc2VSZWFkZXJbXTtcbiAgICBzb3VyY2VOYW1lczogc3RyaW5nW107XG4gICAgY29sbGVjdGlvbk5hbWU6IHN0cmluZztcbiAgICB0YXJnZXRGaWxlQnl0ZXM/OiBudW1iZXI7XG4gICAgdGFyZ2V0QmF0Y2hCeXRlcz86IG51bWJlcjtcbiAgICAvLyBTaW5rIGZvciBzdGVwIGxpbmVzLiBXaGVuIG9taXR0ZWQsIGZhbGxzIGJhY2sgdG8gYSBibHVlLXByZWZpeGVkXG4gICAgLy8gY29uc29sZS5sb2cgc28gc3RhbmRhbG9uZSBjYWxsZXJzIHN0aWxsIGdldCBpZGVudGlmaWFibGUgb3V0cHV0LlxuICAgIGxvZz86IChsaW5lOiBzdHJpbmcpID0+IHZvaWQ7XG4gICAgd3JpdGVGaWxlOiAoZGF0YTogQnVmZmVyKSA9PiBQcm9taXNlPHsgbmFtZTogc3RyaW5nOyBzaXplOiBudW1iZXIgfT47XG59KTogUHJvbWlzZTx7IG91dHB1dHM6IFBsYW5uZWRNZXJnZU91dHB1dFtdOyBjYXJyaWVkRGVsZXRlczogTWFwPHN0cmluZywgbnVtYmVyPjsgdXNlZFNvdXJjZU5hbWVzOiBTZXQ8c3RyaW5nPiB9PiB7XG4gICAgY29uc3QgdGFyZ2V0RmlsZUJ5dGVzID0gY29uZmlnLnRhcmdldEZpbGVCeXRlcyA/PyBUQVJHRVRfRklMRV9CWVRFUztcbiAgICBjb25zdCB0YXJnZXRCYXRjaEJ5dGVzID0gY29uZmlnLnRhcmdldEJhdGNoQnl0ZXMgPz8gREVGQVVMVF9PVVRQVVRfQkFUQ0hfQllURVM7XG4gICAgY29uc3QgbG9nID0gY29uZmlnLmxvZyA/PyAobGluZSA9PiBjb25zb2xlLmxvZyhgJHtibHVlKGNvbmZpZy5jb2xsZWN0aW9uTmFtZSl9ICR7bGluZX1gKSk7XG5cbiAgICAvLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgUGhhc2UgMTogcGxhbiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgICAvLyBMb2FkIHBlci1zb3VyY2UgY29sdW1uIGluZGV4ZXMgRklSU1Qgc28gYSBmaWxlIHRoYXQncyBnb25lIChkZWxldGVkIGJldHdlZW4gY2FsbGVyJ3MgbGlzdEZpbGVzIGFuZFxuICAgIC8vIG5vdykgZ2V0cyBjYXVnaHQgaGVyZSBhbmQgZXhjbHVkZWQgZnJvbSB0aGUgbWVyZ2UgZW50aXJlbHkuIEVhY2ggc291cmNlJ3MgbG9hZCBpcyB3cmFwcGVkIGluIGFcbiAgICAvLyB0cnkvY2F0Y2g7IG9uIGZhaWx1cmUgd2UgbWFyayB0aGUgc291cmNlIGJhZCwgbG9nIGEgXCJza2lwcGVkXCIgbGluZSwgYW5kIHRoZSByZXN0IG9mIHBsYW5uaW5nICtcbiAgICAvLyBleGVjdXRlIHByZXRlbmRzIHRoZSBzb3VyY2UgZG9lc24ndCBleGlzdC4gVGhlIGNhbGxlciBvbmx5IGRlbGV0ZXMgaW5wdXRzIHRoYXQgd2VyZSBhY3R1YWxseSB1c2VkLlxuICAgIGNvbnN0IHNvdXJjZU9rID0gbmV3IEFycmF5PGJvb2xlYW4+KGNvbmZpZy5zb3VyY2VzLmxlbmd0aCkuZmlsbCh0cnVlKTtcbiAgICBjb25zdCBpbmRleGVzUGVyU291cmNlOiBNYXA8c3RyaW5nLCBDb2x1bW5JbmRleD5bXSA9IGF3YWl0IFByb21pc2UuYWxsKGNvbmZpZy5zb3VyY2VzLm1hcChhc3luYyAoc3JjLCBzaSkgPT4ge1xuICAgICAgICBjb25zdCBtYXAgPSBuZXcgTWFwPHN0cmluZywgQ29sdW1uSW5kZXg+KCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChzcmMuY29sdW1uc1xuICAgICAgICAgICAgICAgIC5maWx0ZXIoYyA9PiBjLmNvbHVtbiAhPT0gS0VZX0NPTFVNTilcbiAgICAgICAgICAgICAgICAubWFwKGFzeW5jIGMgPT4geyBtYXAuc2V0KGMuY29sdW1uLCBhd2FpdCBzcmMuZ2V0Q29sdW1uSW5kZXgoYy5jb2x1bW4pKTsgfSkpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBzb3VyY2VPa1tzaV0gPSBmYWxzZTtcbiAgICAgICAgICAgIGxvZyhgJHttYWdlbnRhKFwic2tpcHBlZFwiKX0gJHtjb25maWcuc291cmNlTmFtZXNbc2ldfTogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gKTtcbiAgICAgICAgICAgIC8vIFN0YWNrIGdvZXMgc3RyYWlnaHQgdG8gY29uc29sZSAobm90IHRoZSBidWZmZXJlZCBzdGVwIGxvZykgc28gdGhlIG1lcmdlIHN1bW1hcnkgc3RheXNcbiAgICAgICAgICAgIC8vIHJlYWRhYmxlIGJ1dCB3ZSBjYW4gc3RpbGwgdHJhY2Ugd2hlcmUgdGhlIGZhaWx1cmUgY2FtZSBmcm9tLlxuICAgICAgICAgICAgY29uc29sZS5sb2coYCR7Y29uZmlnLmNvbGxlY3Rpb25OYW1lfSBza2lwcGVkICR7Y29uZmlnLnNvdXJjZU5hbWVzW3NpXX06YCwgKGUgYXMgRXJyb3IpLnN0YWNrIHx8IGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYXA7XG4gICAgfSkpO1xuICAgIGNvbnN0IHVzZWRTb3VyY2VOYW1lcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGZvciAobGV0IHNpID0gMDsgc2kgPCBjb25maWcuc291cmNlcy5sZW5ndGg7IHNpKyspIHtcbiAgICAgICAgaWYgKHNvdXJjZU9rW3NpXSkgdXNlZFNvdXJjZU5hbWVzLmFkZChjb25maWcuc291cmNlTmFtZXNbc2ldKTtcbiAgICB9XG5cbiAgICAvLyBBZ2dyZWdhdGUga2V5VGltZXMgKyBkZWxldGVUaW1lcyBhY3Jvc3MgR09PRCBzb3VyY2VzIG9ubHkgKG1heCBwZXIga2V5KS4gQSBiYWQgc291cmNlJ3MgY2FjaGVkXG4gICAgLy8gbWV0YWRhdGEgbWlnaHQgY2xhaW0gYSBrZXkgYXMgbmV3ZXN0LCBidXQgd2UgY2FuJ3QgYWN0dWFsbHkgcmVhZCBpdHMgY2VsbHMg4oCUIGxldHRpbmcgaXQgd2luIHRoZVxuICAgIC8vIHRpbWUgcmVzb2x1dGlvbiB3b3VsZCBqdXN0IGRyb3AgdGhhdCBrZXkgb3V0IG9mIHRoZSBvdXRwdXQuXG4gICAgY29uc3QgZGVsZXRlVGltZSA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XG4gICAgY29uc3Qga2V5VGltZSA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XG4gICAgZm9yIChsZXQgc2kgPSAwOyBzaSA8IGNvbmZpZy5zb3VyY2VzLmxlbmd0aDsgc2krKykge1xuICAgICAgICBpZiAoIXNvdXJjZU9rW3NpXSkgY29udGludWU7XG4gICAgICAgIGNvbnN0IHNyYyA9IGNvbmZpZy5zb3VyY2VzW3NpXTtcbiAgICAgICAgZm9yIChjb25zdCBbaywgdF0gb2Ygc3JjLmtleVRpbWVzKSB7XG4gICAgICAgICAgICBjb25zdCBwcmV2ID0ga2V5VGltZS5nZXQoayk7XG4gICAgICAgICAgICBpZiAocHJldiA9PT0gdW5kZWZpbmVkIHx8IHQgPiBwcmV2KSBrZXlUaW1lLnNldChrLCB0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3JjLmRlbGV0ZVRpbWVzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtrLCB0XSBvZiBzcmMuZGVsZXRlVGltZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2ID0gZGVsZXRlVGltZS5nZXQoayk7XG4gICAgICAgICAgICAgICAgaWYgKHByZXYgPT09IHVuZGVmaW5lZCB8fCB0ID4gcHJldikgZGVsZXRlVGltZS5zZXQoaywgdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBMaXZlIGtleXMgKG5ld2VzdCBzZXQgc3RyaWN0bHkgbmV3ZXIgdGhhbiBuZXdlc3QgZGVsZXRlKSArIHRvbWJzdG9uZXMgdG8gY2FycnkgZm9yd2FyZCAobmV3ZXN0XG4gICAgLy8gZXZlbnQgaXMgYSBkZWxldGUgYW5kIHRoZSBtZXJnZSBkb2Vzbid0IGluY2x1ZGUgdGhlIG9sZGVzdCBkYXRhIOKAlCB0aGF0J3MgdGhlIGNhbGxlcidzIGNhbGwpLlxuICAgIGNvbnN0IGxpdmVLZXlzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgW2ssIHRdIG9mIGtleVRpbWUpIHtcbiAgICAgICAgY29uc3QgZFQgPSBkZWxldGVUaW1lLmdldChrKSA/PyAtSW5maW5pdHk7XG4gICAgICAgIGlmICh0ID4gZFQpIGxpdmVLZXlzLnB1c2goayk7XG4gICAgfVxuICAgIGNvbnN0IGNhcnJpZWREZWxldGVzID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcbiAgICBmb3IgKGNvbnN0IFtrLCBkVF0gb2YgZGVsZXRlVGltZSkge1xuICAgICAgICBjb25zdCBzVCA9IGtleVRpbWUuZ2V0KGspID8/IC1JbmZpbml0eTtcbiAgICAgICAgaWYgKGRUID49IHNUKSBjYXJyaWVkRGVsZXRlcy5zZXQoaywgZFQpO1xuICAgIH1cblxuICAgIC8vIEFsbCBkaXN0aW5jdCB2YWx1ZSBjb2x1bW5zIGZyb20gR09PRCBzb3VyY2VzIChLRVlfQ09MVU1OIGV4Y2x1ZGVkIOKAlCBpdCdzIGFkZGVkIGF0IGZpbGUtYXNzZW1ibHlcbiAgICAvLyB0aW1lKS4gT3JkZXI6IGZpcnN0LXNlZW4sIG1hdGNoaW5nIHRoZSBleGlzdGluZyBidWlsZGVycy5cbiAgICBjb25zdCBhbGxDb2x1bW5zOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IHNlZW5Db2xzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgZm9yIChsZXQgc2kgPSAwOyBzaSA8IGNvbmZpZy5zb3VyY2VzLmxlbmd0aDsgc2krKykge1xuICAgICAgICBpZiAoIXNvdXJjZU9rW3NpXSkgY29udGludWU7XG4gICAgICAgIGZvciAoY29uc3QgYyBvZiBjb25maWcuc291cmNlc1tzaV0uY29sdW1ucykge1xuICAgICAgICAgICAgaWYgKGMuY29sdW1uID09PSBLRVlfQ09MVU1OIHx8IHNlZW5Db2xzLmhhcyhjLmNvbHVtbikpIGNvbnRpbnVlO1xuICAgICAgICAgICAgc2VlbkNvbHMuYWRkKGMuY29sdW1uKTtcbiAgICAgICAgICAgIGFsbENvbHVtbnMucHVzaChjLmNvbHVtbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBGb3IgZWFjaCBsaXZlIGtleSwgZm9yIGVhY2ggY29sdW1uLCBmaW5kIHRoZSB3aW5uaW5nIHNvdXJjZTogYW1vbmcgc291cmNlcyB0aGF0IGhhdmUgdGhpcyBrZXksIHRoZVxuICAgIC8vIG9uZSB3aG9zZSBrZXlUaW1lIGlzIGxhcmdlc3QgQU5EIHdob3NlIGNvbHVtbi1pbmRleCByZXBvcnRzIG5vbi1BQlNFTlQuIFJlY29yZCBzb3VyY2UgKyBzb3VyY2VSb3cgK1xuICAgIC8vIGJ5dGVMZW4gKyB0eXBlIHNvIHRoZSBwbGFubmVyIGNhbiBzaXplIG9mZnNldHMgYW5kIHRoZSBleGVjdXRvciBjYW4gY29weSB0aGUgYnl0ZXMuXG4gICAgdHlwZSBDZWxsQ2hvaWNlID0geyBzb3VyY2VJZHg6IG51bWJlcjsgc291cmNlUm93OiBudW1iZXI7IGJ5dGVMZW46IG51bWJlcjsgdHlwZTogbnVtYmVyIH07XG4gICAgY29uc3QgY2VsbHNQZXJLZXkgPSBuZXcgTWFwPHN0cmluZywgKENlbGxDaG9pY2UgfCB1bmRlZmluZWQpW10+KCk7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgbGl2ZUtleXMpIHtcbiAgICAgICAgY29uc3QgY2VsbHM6IChDZWxsQ2hvaWNlIHwgdW5kZWZpbmVkKVtdID0gbmV3IEFycmF5KGFsbENvbHVtbnMubGVuZ3RoKTtcbiAgICAgICAgZm9yIChsZXQgY2kgPSAwOyBjaSA8IGFsbENvbHVtbnMubGVuZ3RoOyBjaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjb2wgPSBhbGxDb2x1bW5zW2NpXTtcbiAgICAgICAgICAgIGxldCBiZXN0VGltZSA9IC1JbmZpbml0eTtcbiAgICAgICAgICAgIGxldCBiZXN0OiBDZWxsQ2hvaWNlIHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgZm9yIChsZXQgc2kgPSAwOyBzaSA8IGNvbmZpZy5zb3VyY2VzLmxlbmd0aDsgc2krKykge1xuICAgICAgICAgICAgICAgIGlmICghc291cmNlT2tbc2ldKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjb25zdCBzcmMgPSBjb25maWcuc291cmNlc1tzaV07XG4gICAgICAgICAgICAgICAgY29uc3QgdCA9IHNyYy5rZXlUaW1lcy5nZXQoa2V5KTtcbiAgICAgICAgICAgICAgICBpZiAodCA9PT0gdW5kZWZpbmVkKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjb25zdCByb3dJZHggPSBzcmMucm93T2ZLZXkoa2V5KTtcbiAgICAgICAgICAgICAgICBpZiAocm93SWR4ID09PSB1bmRlZmluZWQpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlkeCA9IGluZGV4ZXNQZXJTb3VyY2Vbc2ldLmdldChjb2wpO1xuICAgICAgICAgICAgICAgIGlmICghaWR4KSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjb25zdCB0eXBlID0gaWR4LnR5cGVzW3Jvd0lkeF07XG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09IFRZUEVfQUJTRU5UX1RBRykgY29udGludWU7XG4gICAgICAgICAgICAgICAgaWYgKHQgPiBiZXN0VGltZSkge1xuICAgICAgICAgICAgICAgICAgICBiZXN0VGltZSA9IHQ7XG4gICAgICAgICAgICAgICAgICAgIGJlc3QgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VJZHg6IHNpLFxuICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlUm93OiByb3dJZHgsXG4gICAgICAgICAgICAgICAgICAgICAgICBieXRlTGVuOiBpZHgub2Zmc2V0c1tyb3dJZHggKyAxXSAtIGlkeC5vZmZzZXRzW3Jvd0lkeF0sXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNlbGxzW2NpXSA9IGJlc3Q7XG4gICAgICAgIH1cbiAgICAgICAgY2VsbHNQZXJLZXkuc2V0KGtleSwgY2VsbHMpO1xuICAgIH1cblxuICAgIC8vIFNvcnQgbGl2ZSBrZXlzIGxleGljb2dyYXBoaWNhbGx5IHNvIGVhY2ggb3V0cHV0IGZpbGUgaXMga2V5LWNvbnRpZ3VvdXMgKHRpZ2h0IG1pbktleS9tYXhLZXkgKyBmYXN0XG4gICAgLy8gc2luZ2xlLWtleSByZWFkcyB2aWEgaGVhZGVyIHNraXApLlxuICAgIGxpdmVLZXlzLnNvcnQoKGEsIGIpID0+IGEgPCBiID8gLTEgOiBhID4gYiA/IDEgOiAwKTtcblxuICAgIC8vIFBlci1rZXkgZXN0aW1hdGVkIGJ5dGVzIGZvciBwYXJ0aXRpb24gY3V0dGluZzogS0VZX0NPTFVNTiBjZWxsICsgcGVyIHZhbHVlLWNvbHVtbiBjZWxsIChieXRlcyArIDVCXG4gICAgLy8gb3ZlcmhlYWQpICsgVElNRV9DT0xVTU4gY2VsbC4gUm91Z2gg4oCUIG9ubHkgbmVlZHMgdG8ga2VlcCBlYWNoIG91dHB1dCBuZWFyIHRoZSB0YXJnZXQuXG4gICAgZnVuY3Rpb24ga2V5VG90YWxCeXRlcyhrZXk6IHN0cmluZyk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IGNlbGxzID0gY2VsbHNQZXJLZXkuZ2V0KGtleSkhO1xuICAgICAgICBsZXQgdG90YWwgPSBrZXkubGVuZ3RoICogMiArIFBFUl9WQUxVRV9PVkVSSEVBRDtcbiAgICAgICAgZm9yIChjb25zdCBjZWxsIG9mIGNlbGxzKSB0b3RhbCArPSAoY2VsbCA/IGNlbGwuYnl0ZUxlbiA6IDApICsgUEVSX1ZBTFVFX09WRVJIRUFEO1xuICAgICAgICB0b3RhbCArPSA4ICsgUEVSX1ZBTFVFX09WRVJIRUFEO1xuICAgICAgICByZXR1cm4gdG90YWw7XG4gICAgfVxuXG4gICAgLy8gV2FsayBzb3J0ZWQga2V5cywgY3V0IGVhY2ggZmlsZSB3aGVuIGFjY3VtdWxhdGVkIGJ5dGVzIHdvdWxkIGV4Y2VlZCB0YXJnZXRGaWxlQnl0ZXMuIEEgc2luZ2xlIGtleVxuICAgIC8vIGxhcmdlciB0aGFuIHRoZSB0YXJnZXQgc3RpbGwgYmVjb21lcyBpdHMgb3duIChvdmVyc2l6ZWQpIGZpbGUg4oCUIHdlIG5ldmVyIHNwbGl0IHdpdGhpbiBhIGtleS5cbiAgICBjb25zdCBmaWxlS2V5UmFuZ2VzOiB7IHN0YXJ0OiBudW1iZXI7IGVuZDogbnVtYmVyIH1bXSA9IFtdO1xuICAgIHtcbiAgICAgICAgbGV0IGNodW5rU3RhcnQgPSAwO1xuICAgICAgICBsZXQgY2h1bmtCeXRlcyA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGl2ZUtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGtiID0ga2V5VG90YWxCeXRlcyhsaXZlS2V5c1tpXSk7XG4gICAgICAgICAgICBpZiAoaSA+IGNodW5rU3RhcnQgJiYgY2h1bmtCeXRlcyArIGtiID4gdGFyZ2V0RmlsZUJ5dGVzKSB7XG4gICAgICAgICAgICAgICAgZmlsZUtleVJhbmdlcy5wdXNoKHsgc3RhcnQ6IGNodW5rU3RhcnQsIGVuZDogaSB9KTtcbiAgICAgICAgICAgICAgICBjaHVua1N0YXJ0ID0gaTtcbiAgICAgICAgICAgICAgICBjaHVua0J5dGVzID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNodW5rQnl0ZXMgKz0ga2I7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxpdmVLZXlzLmxlbmd0aCA+IGNodW5rU3RhcnQpIGZpbGVLZXlSYW5nZXMucHVzaCh7IHN0YXJ0OiBjaHVua1N0YXJ0LCBlbmQ6IGxpdmVLZXlzLmxlbmd0aCB9KTtcbiAgICB9XG5cbiAgICAvLyBCdWlsZCBwZXItZmlsZSBwbGFuczogb2Zmc2V0cy90eXBlcy9jb3B5LXJ1bnMgcGVyIGNvbHVtbi5cbiAgICBjb25zdCBwbGFucyA9IGZpbGVLZXlSYW5nZXMubWFwKHJhbmdlID0+IGJ1aWxkT3V0cHV0UGxhbihyYW5nZSwgbGl2ZUtleXMsIGNlbGxzUGVyS2V5LCBhbGxDb2x1bW5zLCBrZXlUaW1lKSk7XG5cbiAgICBsb2coYCR7bWFnZW50YShcInBsYW5cIil9OiAke2Zvcm1hdE51bWJlcihsaXZlS2V5cy5sZW5ndGgpfSBsaXZlIGtleXMsICR7cGxhbnMubGVuZ3RofSBvdXRwdXQgZmlsZShzKSwgJHtmb3JtYXROdW1iZXIoY2FycmllZERlbGV0ZXMuc2l6ZSl9IHRvbWJzdG9uZXMgY2FycmllZGApO1xuXG4gICAgLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIFBoYXNlIDI6IGV4ZWN1dGUg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gICAgLy8gR3JvdXAgb3V0cHV0IGZpbGVzIGludG8gYmF0Y2hlcyB0aGF0IGZpdCB3aXRoaW4gdGFyZ2V0QmF0Y2hCeXRlcyBzbyB3ZSByZWFkIGlucHV0cyBvbmNlIHBlciBiYXRjaFxuICAgIC8vIChhbmQgc2tpcCBpbnB1dHMgdGhhdCBjb250cmlidXRlIG5vdGhpbmcgdG8gdGhpcyBiYXRjaCkuXG4gICAgY29uc3QgYmF0Y2hlczogUGxhbm5lZE91dHB1dEZpbGVbXVtdID0gW107XG4gICAge1xuICAgICAgICBsZXQgc3RhcnQgPSAwO1xuICAgICAgICB3aGlsZSAoc3RhcnQgPCBwbGFucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGxldCBlbmQgPSBzdGFydCArIDE7XG4gICAgICAgICAgICBsZXQgdG90YWwgPSBwbGFuc1tzdGFydF0uZXN0aW1hdGVkRmlsZUJ5dGVzO1xuICAgICAgICAgICAgd2hpbGUgKGVuZCA8IHBsYW5zLmxlbmd0aCAmJiB0b3RhbCArIHBsYW5zW2VuZF0uZXN0aW1hdGVkRmlsZUJ5dGVzIDw9IHRhcmdldEJhdGNoQnl0ZXMpIHtcbiAgICAgICAgICAgICAgICB0b3RhbCArPSBwbGFuc1tlbmRdLmVzdGltYXRlZEZpbGVCeXRlcztcbiAgICAgICAgICAgICAgICBlbmQrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJhdGNoZXMucHVzaChwbGFucy5zbGljZShzdGFydCwgZW5kKSk7XG4gICAgICAgICAgICBzdGFydCA9IGVuZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG91dHB1dHM6IFBsYW5uZWRNZXJnZU91dHB1dFtdID0gW107XG4gICAgZm9yIChsZXQgYmkgPSAwOyBiaSA8IGJhdGNoZXMubGVuZ3RoOyBiaSsrKSB7XG4gICAgICAgIGNvbnN0IGJhdGNoID0gYmF0Y2hlc1tiaV07XG4gICAgICAgIGNvbnN0IGJhdGNoQnl0ZXMgPSBiYXRjaC5yZWR1Y2UoKGEsIHApID0+IGEgKyBwLmVzdGltYXRlZEZpbGVCeXRlcywgMCk7XG4gICAgICAgIGxvZyhgJHttYWdlbnRhKFwiYmF0Y2hcIil9ICR7YmkgKyAxfS8ke2JhdGNoZXMubGVuZ3RofTogJHtiYXRjaC5sZW5ndGh9IG91dHB1dCBmaWxlKHMpLCB+JHtmbXRCeXRlcyhiYXRjaEJ5dGVzKX0gYnVkZ2V0YCk7XG4gICAgICAgIGNvbnN0IGJhdGNoT3V0cHV0cyA9IGF3YWl0IGV4ZWN1dGVCYXRjaChiYXRjaCwgaW5kZXhlc1BlclNvdXJjZSwgY29uZmlnLnNvdXJjZXMsIGNvbmZpZy5zb3VyY2VOYW1lcywgY29uZmlnLndyaXRlRmlsZSwgbG9nKTtcbiAgICAgICAgb3V0cHV0cy5wdXNoKC4uLmJhdGNoT3V0cHV0cyk7XG4gICAgfVxuICAgIGNvbnN0IHdyaXR0ZW5CeXRlcyA9IG91dHB1dHMucmVkdWNlKChhLCBvKSA9PiBhICsgby5zaXplLCAwKTtcbiAgICBsb2coYCR7bWFnZW50YShcImV4ZWN1dGVcIil9OiAke291dHB1dHMubGVuZ3RofSBmaWxlKHMpLCAke2ZtdEJ5dGVzKHdyaXR0ZW5CeXRlcyl9IHdyaXR0ZW5gKTtcblxuICAgIHJldHVybiB7IG91dHB1dHMsIGNhcnJpZWREZWxldGVzLCB1c2VkU291cmNlTmFtZXMgfTtcbn1cblxuZnVuY3Rpb24gYnVpbGRPdXRwdXRQbGFuKFxuICAgIHJhbmdlOiB7IHN0YXJ0OiBudW1iZXI7IGVuZDogbnVtYmVyIH0sXG4gICAgbGl2ZUtleXM6IHN0cmluZ1tdLFxuICAgIGNlbGxzUGVyS2V5OiBNYXA8c3RyaW5nLCAoeyBzb3VyY2VJZHg6IG51bWJlcjsgc291cmNlUm93OiBudW1iZXI7IGJ5dGVMZW46IG51bWJlcjsgdHlwZTogbnVtYmVyIH0gfCB1bmRlZmluZWQpW10+LFxuICAgIGFsbENvbHVtbnM6IHN0cmluZ1tdLFxuICAgIGtleVRpbWU6IE1hcDxzdHJpbmcsIG51bWJlcj4sXG4pOiBQbGFubmVkT3V0cHV0RmlsZSB7XG4gICAgY29uc3Qga2V5cyA9IGxpdmVLZXlzLnNsaWNlKHJhbmdlLnN0YXJ0LCByYW5nZS5lbmQpO1xuICAgIGNvbnN0IHJvd0NvdW50ID0ga2V5cy5sZW5ndGg7XG4gICAgY29uc3QgdGltZXMgPSBrZXlzLm1hcChrID0+IGtleVRpbWUuZ2V0KGspID8/IDApO1xuICAgIGNvbnN0IHNvdXJjZUNvdW50cyA9IG5ldyBNYXA8bnVtYmVyLCBudW1iZXI+KCk7XG5cbiAgICBjb25zdCBjb2x1bW5zOiBQbGFubmVkT3V0cHV0Q29sdW1uW10gPSBhbGxDb2x1bW5zLm1hcCgoY29sTmFtZSwgY2kpID0+IHtcbiAgICAgICAgY29uc3Qgb2Zmc2V0cyA9IG5ldyBVaW50MzJBcnJheShyb3dDb3VudCArIDEpO1xuICAgICAgICBjb25zdCB0eXBlcyA9IG5ldyBVaW50OEFycmF5KHJvd0NvdW50KTtcbiAgICAgICAgY29uc3QgcnVuczogQ29weVJ1bltdID0gW107XG4gICAgICAgIGxldCBvdXRwdXRCeXRlID0gMDtcbiAgICAgICAgbGV0IGN1cnJlbnRSdW46IENvcHlSdW4gfCB1bmRlZmluZWQ7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dDb3VudDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjZWxsID0gY2VsbHNQZXJLZXkuZ2V0KGtleXNbaV0pIVtjaV07XG4gICAgICAgICAgICBvZmZzZXRzW2ldID0gb3V0cHV0Qnl0ZTtcbiAgICAgICAgICAgIGlmICghY2VsbCkge1xuICAgICAgICAgICAgICAgIHR5cGVzW2ldID0gVFlQRV9BQlNFTlRfVEFHO1xuICAgICAgICAgICAgICAgIC8vIEFCU0VOVCBjb250cmlidXRlcyBub3RoaW5nIHRvIHRoZSBkYXRhIHNlY3Rpb24gYW5kIGJyZWFrcyBhbnkgZXh0ZW5kaW5nIHJ1bi5cbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudFJ1bikgeyBydW5zLnB1c2goY3VycmVudFJ1bik7IGN1cnJlbnRSdW4gPSB1bmRlZmluZWQ7IH1cbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHR5cGVzW2ldID0gY2VsbC50eXBlO1xuICAgICAgICAgICAgc291cmNlQ291bnRzLnNldChjZWxsLnNvdXJjZUlkeCwgKHNvdXJjZUNvdW50cy5nZXQoY2VsbC5zb3VyY2VJZHgpID8/IDApICsgMSk7XG4gICAgICAgICAgICAvLyBSTEU6IGV4dGVuZCB0aGUgY3VycmVudCBydW4gaWZmIHRoZSBuZXh0IGNlbGwgaXMgdGhlIG5leHQgcm93IG9mIHRoZSBzYW1lIHNvdXJjZSAoaXRzXG4gICAgICAgICAgICAvLyBzb3VyY2Utc2lkZSBieXRlcyBzaXQgaW1tZWRpYXRlbHkgYWZ0ZXIsIHNvIG9uZSByZWFkIHN1ZmZpY2VzKSBBTkQgbm9uLUFCU0VOVCAod2UgbmV2ZXJcbiAgICAgICAgICAgIC8vIGxhbmRlZCBpbiB0aGUgYnJlYWstcGF0aCBhYm92ZSkuXG4gICAgICAgICAgICBpZiAoY3VycmVudFJ1biAmJiBjdXJyZW50UnVuLnNvdXJjZUlkeCA9PT0gY2VsbC5zb3VyY2VJZHggJiYgY3VycmVudFJ1bi5zb3VyY2VFbmRSb3cgPT09IGNlbGwuc291cmNlUm93KSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFJ1bi5zb3VyY2VFbmRSb3cgPSBjZWxsLnNvdXJjZVJvdyArIDE7XG4gICAgICAgICAgICAgICAgY3VycmVudFJ1bi5ieXRlTGVuZ3RoICs9IGNlbGwuYnl0ZUxlbjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRSdW4pIHJ1bnMucHVzaChjdXJyZW50UnVuKTtcbiAgICAgICAgICAgICAgICBjdXJyZW50UnVuID0ge1xuICAgICAgICAgICAgICAgICAgICBzb3VyY2VJZHg6IGNlbGwuc291cmNlSWR4LFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2VTdGFydFJvdzogY2VsbC5zb3VyY2VSb3csXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZUVuZFJvdzogY2VsbC5zb3VyY2VSb3cgKyAxLFxuICAgICAgICAgICAgICAgICAgICBvdXRwdXRCeXRlU3RhcnQ6IG91dHB1dEJ5dGUsXG4gICAgICAgICAgICAgICAgICAgIGJ5dGVMZW5ndGg6IGNlbGwuYnl0ZUxlbixcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3V0cHV0Qnl0ZSArPSBjZWxsLmJ5dGVMZW47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGN1cnJlbnRSdW4pIHJ1bnMucHVzaChjdXJyZW50UnVuKTtcbiAgICAgICAgb2Zmc2V0c1tyb3dDb3VudF0gPSBvdXRwdXRCeXRlO1xuXG4gICAgICAgIHJldHVybiB7IG5hbWU6IGNvbE5hbWUsIG9mZnNldHMsIHR5cGVzLCBkYXRhTGVuZ3RoOiBvdXRwdXRCeXRlLCBydW5zIH07XG4gICAgfSk7XG5cbiAgICAvLyBGaWxlIHNpemUgZXN0aW1hdGU6IEtFWV9DT0xVTU4gYmxvYiArIHZhbHVlIGNvbHVtbiBibG9icyArIFRJTUVfQ09MVU1OIGJsb2IgKyBoZWFkZXIgZ3Vlc3MuIFVzZWQgdG9cbiAgICAvLyBiYXRjaCBvdXRwdXQgZmlsZXM7IG9ubHkgbmVlZHMgdG8gYmUgY2xvc2UsIG5vdCBleGFjdC5cbiAgICBsZXQgZXN0aW1hdGVkRmlsZUJ5dGVzID0gNCArIDIwNDg7XG4gICAgbGV0IGtleUJ5dGVzID0gMDtcbiAgICBmb3IgKGNvbnN0IGsgb2Yga2V5cykga2V5Qnl0ZXMgKz0gay5sZW5ndGggKiAyO1xuICAgIGVzdGltYXRlZEZpbGVCeXRlcyArPSBjb2x1bW5JbmRleEJ5dGVMZW5ndGgocm93Q291bnQpICsga2V5Qnl0ZXM7XG4gICAgZm9yIChjb25zdCBjb2wgb2YgY29sdW1ucykgZXN0aW1hdGVkRmlsZUJ5dGVzICs9IGNvbHVtbkluZGV4Qnl0ZUxlbmd0aChyb3dDb3VudCkgKyBjb2wuZGF0YUxlbmd0aDtcbiAgICBlc3RpbWF0ZWRGaWxlQnl0ZXMgKz0gY29sdW1uSW5kZXhCeXRlTGVuZ3RoKHJvd0NvdW50KSArIHJvd0NvdW50ICogODtcblxuICAgIHJldHVybiB7XG4gICAgICAgIGtleXMsXG4gICAgICAgIHRpbWVzLFxuICAgICAgICBtaW5LZXk6IGtleXNbMF0gPz8gXCJcIixcbiAgICAgICAgbWF4S2V5OiBrZXlzW3Jvd0NvdW50IC0gMV0gPz8gXCJcIixcbiAgICAgICAgY29sdW1ucyxcbiAgICAgICAgZXN0aW1hdGVkRmlsZUJ5dGVzLFxuICAgICAgICBzb3VyY2VDb3VudHMsXG4gICAgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZUJhdGNoKFxuICAgIHBsYW5zOiBQbGFubmVkT3V0cHV0RmlsZVtdLFxuICAgIGluZGV4ZXNQZXJTb3VyY2U6IE1hcDxzdHJpbmcsIENvbHVtbkluZGV4PltdLFxuICAgIHNvdXJjZXM6IEJhc2VCdWxrRGF0YWJhc2VSZWFkZXJbXSxcbiAgICBzb3VyY2VOYW1lczogc3RyaW5nW10sXG4gICAgd3JpdGVGaWxlOiAoZGF0YTogQnVmZmVyKSA9PiBQcm9taXNlPHsgbmFtZTogc3RyaW5nOyBzaXplOiBudW1iZXIgfT4sXG4gICAgbG9nOiAobGluZTogc3RyaW5nKSA9PiB2b2lkLFxuKTogUHJvbWlzZTxQbGFubmVkTWVyZ2VPdXRwdXRbXT4ge1xuICAgIC8vIEFsbG9jYXRlIG9uZSBiaWcgYnVmZmVyIHBlciAob3V0cHV0IGZpbGUsIGNvbHVtbikg4oCUIG9mZnNldHMgKyB0eXBlcyBhcmUgd3JpdHRlbiBpbW1lZGlhdGVseSBmcm9tXG4gICAgLy8gdGhlIHBsYW4sIHRoZSBkYXRhIHNlY3Rpb24gaXMgZmlsbGVkIGJlbG93IGJ5IHRoZSBwZXItc291cmNlIGNvcHkgbG9vcC5cbiAgICB0eXBlIENvbHVtbkJ1ZmZlciA9IHsgbmFtZTogc3RyaW5nOyBibG9iOiBCdWZmZXI7IGRhdGFTdGFydDogbnVtYmVyIH07XG4gICAgY29uc3QgYmxvYnNQZXJGaWxlOiBDb2x1bW5CdWZmZXJbXVtdID0gcGxhbnMubWFwKHBsYW4gPT4gcGxhbi5jb2x1bW5zLm1hcChjb2wgPT4ge1xuICAgICAgICBjb25zdCBpbmRleFNpemUgPSBjb2x1bW5JbmRleEJ5dGVMZW5ndGgoY29sLm9mZnNldHMubGVuZ3RoIC0gMSk7XG4gICAgICAgIGNvbnN0IGJsb2IgPSBCdWZmZXIuYWxsb2MoaW5kZXhTaXplICsgY29sLmRhdGFMZW5ndGgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbC5vZmZzZXRzLmxlbmd0aDsgaSsrKSBibG9iLndyaXRlVUludDMyTEUoY29sLm9mZnNldHNbaV0sIGkgKiA0KTtcbiAgICAgICAgYmxvYi5zZXQoY29sLnR5cGVzLCA0ICogY29sLm9mZnNldHMubGVuZ3RoKTtcbiAgICAgICAgcmV0dXJuIHsgbmFtZTogY29sLm5hbWUsIGJsb2IsIGRhdGFTdGFydDogaW5kZXhTaXplIH07XG4gICAgfSkpO1xuXG4gICAgLy8gRm9yIGVhY2ggc291cmNlLCBjb3B5IGl0cyBieXRlIHJ1bnMgaW50byBldmVyeSBvdXRwdXQgY29sdW1uIHdob3NlIHBsYW4gcmVmZXJlbmNlcyBpdC4gQSBzb3VyY2VcbiAgICAvLyB0aGF0J3Mgbm90IHJlZmVyZW5jZWQgYnkgYW55IGNvbHVtbiBpbiB0aGlzIGJhdGNoIGlzIHNraXBwZWQgZW50aXJlbHkg4oCUIHRoYXQncyB0aGUgcG9pbnQgb2YgdGhlXG4gICAgLy8gYmF0Y2ggc2hhcGU6IHJlYWQgMjBHQiBvZiBpbnB1dHMgb25seSBvbmNlIGZvciB0aGUgd2hvbGUgcGFzcywgbm90IG9uY2UgcGVyIG91dHB1dC5cbiAgICBmb3IgKGxldCBzaSA9IDA7IHNpIDwgc291cmNlcy5sZW5ndGg7IHNpKyspIHtcbiAgICAgICAgbGV0IGNvbnRyaWJ1dGVzID0gZmFsc2U7XG4gICAgICAgIGZvciAobGV0IGZpID0gMDsgZmkgPCBwbGFucy5sZW5ndGggJiYgIWNvbnRyaWJ1dGVzOyBmaSsrKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNvbCBvZiBwbGFuc1tmaV0uY29sdW1ucykge1xuICAgICAgICAgICAgICAgIGlmIChjb2wucnVucy5zb21lKHIgPT4gci5zb3VyY2VJZHggPT09IHNpKSkgeyBjb250cmlidXRlcyA9IHRydWU7IGJyZWFrOyB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFjb250cmlidXRlcykgY29udGludWU7XG5cbiAgICAgICAgbGV0IGJ5dGVzUmVhZCA9IDA7XG4gICAgICAgIGZvciAobGV0IGZpID0gMDsgZmkgPCBwbGFucy5sZW5ndGg7IGZpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHBsYW4gPSBwbGFuc1tmaV07XG4gICAgICAgICAgICBmb3IgKGxldCBjaSA9IDA7IGNpIDwgcGxhbi5jb2x1bW5zLmxlbmd0aDsgY2krKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbCA9IHBsYW4uY29sdW1uc1tjaV07XG4gICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gYmxvYnNQZXJGaWxlW2ZpXVtjaV07XG4gICAgICAgICAgICAgICAgY29uc3QgY29sSW5kZXggPSBpbmRleGVzUGVyU291cmNlW3NpXS5nZXQoY29sLm5hbWUpO1xuICAgICAgICAgICAgICAgIGlmICghY29sSW5kZXgpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcnVuIG9mIGNvbC5ydW5zKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChydW4uc291cmNlSWR4ICE9PSBzaSkgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGVzID0gYXdhaXQgY29sSW5kZXgucmVhZFZhbHVlQnl0ZXMocnVuLnNvdXJjZVN0YXJ0Um93LCBydW4uc291cmNlRW5kUm93KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJ5dGVzLmxlbmd0aCAhPT0gcnVuLmJ5dGVMZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgJHtydW4uYnl0ZUxlbmd0aH0gYnl0ZXMgZnJvbSBzb3VyY2UgIyR7c2l9ICgke3NvdXJjZU5hbWVzW3NpXX0pIGNvbHVtbiAke2NvbC5uYW1lfSByb3dzIFske3J1bi5zb3VyY2VTdGFydFJvd30sICR7cnVuLnNvdXJjZUVuZFJvd30pLCBnb3QgJHtieXRlcy5sZW5ndGh9YCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnl0ZXMuY29weSh0YXJnZXQuYmxvYiwgdGFyZ2V0LmRhdGFTdGFydCArIHJ1bi5vdXRwdXRCeXRlU3RhcnQpO1xuICAgICAgICAgICAgICAgICAgICBieXRlc1JlYWQgKz0gYnl0ZXMubGVuZ3RoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsb2coYCR7bWFnZW50YShcImlucHV0XCIpfSAke3NpICsgMX0vJHtzb3VyY2VzLmxlbmd0aH0gJHtzb3VyY2VOYW1lc1tzaV19OiAke2ZtdEJ5dGVzKGJ5dGVzUmVhZCl9IHJlYWRgKTtcbiAgICB9XG5cbiAgICAvLyBBc3NlbWJsZSArIHdyaXRlIGVhY2ggb3V0cHV0IGZpbGUgaW4gdGhpcyBiYXRjaC5cbiAgICBjb25zdCBvdXRwdXRzOiBQbGFubmVkTWVyZ2VPdXRwdXRbXSA9IFtdO1xuICAgIGZvciAobGV0IGZpID0gMDsgZmkgPCBwbGFucy5sZW5ndGg7IGZpKyspIHtcbiAgICAgICAgY29uc3QgcGxhbiA9IHBsYW5zW2ZpXTtcbiAgICAgICAgY29uc3QgdmFsdWVDb2x1bW5zID0gYmxvYnNQZXJGaWxlW2ZpXS5tYXAoYiA9PiAoeyBuYW1lOiBiLm5hbWUsIGJsb2I6IGIuYmxvYiB9KSk7XG4gICAgICAgIGNvbnN0IGZpbGVCdWYgPSBhc3NlbWJsZVBsYW5uZWRGaWxlKHsgdmFsdWVDb2x1bW5zLCBrZXlzOiBwbGFuLmtleXMsIHRpbWVzOiBwbGFuLnRpbWVzIH0pO1xuICAgICAgICBjb25zdCB7IG5hbWUsIHNpemUgfSA9IGF3YWl0IHdyaXRlRmlsZShmaWxlQnVmKTtcbiAgICAgICAgY29uc3Qgc291cmNlc05hbWVkID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcbiAgICAgICAgZm9yIChjb25zdCBbc2ksIG5dIG9mIHBsYW4uc291cmNlQ291bnRzKSBzb3VyY2VzTmFtZWQuc2V0KHNvdXJjZU5hbWVzW3NpXSwgbik7XG4gICAgICAgIGxvZyhgJHttYWdlbnRhKFwib3V0cHV0XCIpfSAke2ZpICsgMX0vJHtwbGFucy5sZW5ndGh9OiAke2Zvcm1hdE51bWJlcihwbGFuLmtleXMubGVuZ3RoKX0gcm93cyBmcm9tICR7cGxhbi5zb3VyY2VDb3VudHMuc2l6ZX0gaW5wdXQocyksICR7Zm10Qnl0ZXMoc2l6ZSl9YCk7XG4gICAgICAgIG91dHB1dHMucHVzaCh7IG5hbWUsIG1pbktleTogcGxhbi5taW5LZXksIG1heEtleTogcGxhbi5tYXhLZXksIHJvd0NvdW50OiBwbGFuLmtleXMubGVuZ3RoLCBzaXplLCBzb3VyY2VzOiBzb3VyY2VzTmFtZWQgfSk7XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXRzO1xufVxuIl19
352
- /* _JS_SOURCE_HASH = "a47b64af2f351fc3f733f7f11152d7e852e7e7ca892b4960d928f6960e7a4740"; */
352
+ /* _JS_SOURCE_HASH = "53c9f5218b97a93fb3a90d6b40f2b4fb02fe616a68805234bfafbdcdf1851b8f"; */
@@ -1,4 +1,4 @@
1
- "use strict";
1
+ "use strict"; var console = (function shimConsole() { let baseConsole = globalThis.console; if (typeof window !== "undefined") return baseConsole; let name = __filename.replaceAll("\\", "/").split("/").pop(); let dirName = __dirname.replaceAll("\\", "/").split("/").pop(); let context = { __FILE__: __filename, __DIR__: __dirname, __NAME__: name, __DIRNAME__: dirName }; let newConsole = { ...baseConsole }; for (let shim of ["log", "info", "warn", "error"]) { newConsole[shim] = (...args) => { args.push(context); baseConsole[shim](...args); }; } newConsole.__context = context; return newConsole; })(); "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true , configurable: true});
3
3
  //exports.nullJoin = exports.READER_SIGNALS = exports.BulkDatabaseReader = void 0;
4
4
  const WriteOverlay_1 = require("./WriteOverlay");
@@ -303,4 +303,4 @@ class BulkDatabaseReader {
303
303
  exports.BulkDatabaseReader = BulkDatabaseReader;
304
304
  exports.READER_SIGNALS = { LOAD: LOAD_SIGNAL, OVERLAY: OVERLAY_SIGNAL };
305
305
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQnVsa0RhdGFiYXNlUmVhZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiQnVsa0RhdGFiYXNlUmVhZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLGlEQUF1RDtBQUV2RCxrRUFBaUY7QUFDakYsd0VBQXFFO0FBRXJFLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEMsTUFBTSxXQUFXLEdBQUcsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNsQyxNQUFNLGNBQWMsR0FBRyxJQUFJLEdBQUcsU0FBUyxDQUFDO0FBQ3hDLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxHQUFHLFlBQVksQ0FBQztBQUM5QyxNQUFNLDhCQUE4QixHQUFHLEVBQUUsQ0FBQztBQUUxQyxTQUFTLFFBQVEsQ0FBQyxDQUFTLEVBQUUsQ0FBUztJQUNsQyxPQUFPLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLENBQUM7QUFtUlEsNEJBQVE7QUExUWpCLHFHQUFxRztBQUNyRyxxR0FBcUc7QUFDckcscUdBQXFHO0FBQ3JHLGtDQUFrQztBQUNsQyxNQUFhLGtCQUFrQjtJQUMzQixZQUE2QixHQUFpQjtRQUFqQixRQUFHLEdBQUgsR0FBRyxDQUFjO1FBRzlCLFlBQU8sR0FBRyxJQUFJLDJCQUFZLEVBQUUsQ0FBQztRQUVyQyxZQUFPLEdBQUcsQ0FBQyxDQUFDO1FBQ1osZ0JBQVcsR0FBRyxJQUFJLEdBQUcsRUFBMkQsQ0FBQztRQUVqRixtQkFBYyxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7UUFFbkMsd0JBQW1CLEdBQUcsQ0FBQyxDQUFDO1FBQ3hCLG9CQUFlLEdBQUcsQ0FBQyxDQUFDO1FBb0Q1QiwrRkFBK0Y7UUFDL0Ysc0ZBQXNGO1FBQzlFLG9CQUFlLEdBQUcsQ0FBQyxDQUFDO0lBakVzQixDQUFDO0lBYW5ELElBQUksSUFBSSxLQUFhLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENB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LGtEQUFJLENBQUM7SUFDNUQsQ0FBQztJQUVPLFlBQVk7UUFDaEIsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksS0FBSyxDQUFDO1lBQUUsT0FBTztRQUMzQyxNQUFNLE9BQU8sR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLEtBQUssTUFBTSxDQUFDLElBQUksT0FBTztZQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pGLENBQUM7Q0FDSjtBQW5RRCxnREFtUUM7QUFFWSxRQUFBLGNBQWMsR0FBRyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTG9hZGVkSW5kZXggfSBmcm9tIFwiLi9Mb2FkZWRJbmRleFwiO1xuaW1wb3J0IHsgREVMRVRFRCwgV3JpdGVPdmVybGF5IH0gZnJvbSBcIi4vV3JpdGVPdmVybGF5XCI7XG5pbXBvcnQgdHlwZSB7IFJlYWN0aXZlRGVwcyB9IGZyb20gXCIuL0J1bGtEYXRhYmFzZUJhc2VcIjtcbmltcG9ydCB7IGZvcm1hdE51bWJlciwgZm9ybWF0VGltZSB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vc3JjL2Zvcm1hdHRpbmcvZm9ybWF0XCI7XG5pbXBvcnQgeyBibHVlLCByZWQgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9mb3JtYXR0aW5nL2xvZ0NvbG9yc1wiO1xuXG5jb25zdCBOVUxMID0gU3RyaW5nLmZyb21DaGFyQ29kZSgwKTtcbmNvbnN0IExPQURfU0lHTkFMID0gTlVMTCArIFwibG9hZFwiO1xuY29uc3QgT1ZFUkxBWV9TSUdOQUwgPSBOVUxMICsgXCJvdmVybGF5XCI7XG5jb25zdCBDT01QQUNUSU5HX1NJR05BTCA9IE5VTEwgKyBcImNvbXBhY3RpbmdcIjtcbmNvbnN0IFRSSUdHRVJfVEhST1RUTEVfRklSU1RfU1RFUF9NUyA9IDE2O1xuXG5mdW5jdGlvbiBudWxsSm9pbihhOiBzdHJpbmcsIGI6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGEgKyBOVUxMICsgYjtcbn1cblxuZXhwb3J0IHR5cGUgUmVhZGVyQ29uZmlnID0ge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBkZXBzOiBSZWFjdGl2ZURlcHM7XG4gICAgLy8gU2VlIEJ1bGtEYXRhYmFzZTJDb25maWcubWF4VHJpZ2dlclRocm90dGxlTXMuXG4gICAgbWF4VHJpZ2dlclRocm90dGxlTXM/OiBudW1iZXI7XG59O1xuXG4vLyBPd25zIHRoZSBjdXJyZW50IExvYWRlZEluZGV4IGFuZCBXcml0ZU92ZXJsYXkgYW5kIHNlcnZlcyBldmVyeSByZWFkIChhc3luYyArIHN5bmMgcmVhY3RpdmUpLiBBcHBseVxuLy8gd3JpdGVzL2RlbGV0ZXMgdGhyb3VnaCBhcHBseVdyaXRlL2FwcGx5RGVsZXRlIHNvIHRoZSByaWdodCBzaWduYWxzIGZpcmUuIFRoZSBob3N0IHN3YXBzIGluIGEgZnJlc2hcbi8vIExvYWRlZEluZGV4IGF0b21pY2FsbHkgdmlhIHNldEluZGV4IG9uY2UgdGhlIG5ldyBvbmUgaGFzIGZ1bGx5IGJ1aWx0IOKAlCBubyBsYXp5IHJlYnVpbGQgb24gdGhlIG5leHRcbi8vIHJlYWQsIG5vIHN5bmNocm9ub3VzIGxhZyBzcGlrZS5cbmV4cG9ydCBjbGFzcyBCdWxrRGF0YWJhc2VSZWFkZXI8VCBleHRlbmRzIHsga2V5OiBzdHJpbmcgfT4ge1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgY2ZnOiBSZWFkZXJDb25maWcpIHsgfVxuXG4gICAgcHVibGljIGluZGV4OiBMb2FkZWRJbmRleDxUPiB8IHVuZGVmaW5lZDtcbiAgICBwdWJsaWMgcmVhZG9ubHkgb3ZlcmxheSA9IG5ldyBXcml0ZU92ZXJsYXkoKTtcblxuICAgIHByaXZhdGUgZGF0YUdlbiA9IDA7XG4gICAgcHJpdmF0ZSBjb2x1bW5DYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCB7IGtleTogc3RyaW5nOyB2YWx1ZTogdW5rbm93bjsgdGltZTogbnVtYmVyIH1bXT4oKTtcblxuICAgIHByaXZhdGUgcGVuZGluZ1NpZ25hbHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBwcml2YXRlIHRyaWdnZXJUaW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCB1bmRlZmluZWQ7XG4gICAgcHJpdmF0ZSBjdXJyZW50VHJpZ2dlckRlbGF5ID0gMDtcbiAgICBwcml2YXRlIGxhc3RUcmlnZ2VyVGltZSA9IDA7XG5cbiAgICBnZXQgbmFtZSgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5jZmcubmFtZTsgfVxuICAgIGdldCBkZXBzKCk6IFJlYWN0aXZlRGVwcyB7IHJldHVybiB0aGlzLmNmZy5kZXBzOyB9XG4gICAgZ2V0IGRhdGFHZW5lcmF0aW9uKCk6IG51bWJlciB7IHJldHVybiB0aGlzLmRhdGFHZW47IH1cblxuICAgIHNldEluZGV4KG5ld0luZGV4OiBMb2FkZWRJbmRleDxUPiwgb3B0aW9uczogeyBkcm9wU3RhbGVGYWxsYmFjaz86IGJvb2xlYW4gfSA9IHt9KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHByZXYgPSB0aGlzLmluZGV4O1xuICAgICAgICBpZiAocHJldiAmJiAhb3B0aW9ucy5kcm9wU3RhbGVGYWxsYmFjaykgbmV3SW5kZXguaW5oZXJpdFN0YWxlRnJvbShwcmV2KTtcbiAgICAgICAgdGhpcy5jZmcuZGVwcy5iYXRjaCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmluZGV4ID0gbmV3SW5kZXg7XG4gICAgICAgICAgICB0aGlzLm92ZXJsYXkuc3dlZXBDb3ZlcmVkKGtleSA9PiBNYXRoLm1heChcbiAgICAgICAgICAgICAgICBuZXdJbmRleC5yZWFkZXIua2V5VGltZXMuZ2V0KGtleSkgPz8gLUluZmluaXR5LFxuICAgICAgICAgICAgICAgIG5ld0luZGV4LnJlYWRlci5kZWxldGVUaW1lcy5nZXQoa2V5KSA/PyAtSW5maW5pdHksXG4gICAgICAgICAgICApKTtcbiAgICAgICAgICAgIHRoaXMuZGF0YUdlbisrO1xuICAgICAgICAgICAgdGhpcy5jb2x1bW5DYWNoZS5jbGVhcigpO1xuICAgICAgICAgICAgdGhpcy5pbnZhbGlkYXRlU2lnbmFsKExPQURfU0lHTkFMKTtcbiAgICAgICAgICAgIHRoaXMuaW52YWxpZGF0ZVNpZ25hbChPVkVSTEFZX1NJR05BTCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFwcGx5V3JpdGUoa2V5OiBzdHJpbmcsIHJvdzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIHRpbWU6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCB3YXNMaXZlID0gdGhpcy5pc0xpdmVOb3coa2V5KTtcbiAgICAgICAgY29uc3QgeyBpbnZhbGlkYXRlZENvbHVtbnMgfSA9IHRoaXMub3ZlcmxheS53cml0ZVJvdyhrZXksIHJvdywgdGltZSwgd2FzTGl2ZSk7XG4gICAgICAgIHRoaXMubm90aWZ5T3ZlcmxheU11dGF0aW9uKGtleSwgaW52YWxpZGF0ZWRDb2x1bW5zKTtcbiAgICB9XG5cbiAgICBhcHBseURlbGV0ZShrZXk6IHN0cmluZywgdGltZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHdhc0xpdmUgPSB0aGlzLmlzTGl2ZU5vdyhrZXkpO1xuICAgICAgICBjb25zdCB7IGludmFsaWRhdGVkQ29sdW1ucyB9ID0gdGhpcy5vdmVybGF5LmRlbGV0ZUtleShrZXksIHRpbWUsIHdhc0xpdmUpO1xuICAgICAgICB0aGlzLm5vdGlmeU92ZXJsYXlNdXRhdGlvbihrZXksIGludmFsaWRhdGVkQ29sdW1ucyk7XG4gICAgfVxuXG4gICAgaXNLZXlXYXRjaGVkKGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNmZy5kZXBzLmlzT2JzZXJ2ZWQ/LihrZXkpID8/IHRydWU7XG4gICAgfVxuXG4gICAgaXNMaXZlTm93KGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGUgPSB0aGlzLm92ZXJsYXkuZ2V0KGtleSk7XG4gICAgICAgIGlmIChlKSByZXR1cm4gZS52YWx1ZSAhPT0gREVMRVRFRDtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5kZXg/LmlzTGl2ZShrZXkpID8/IGZhbHNlO1xuICAgIH1cblxuICAgIGxvY2FsVGltZShrZXk6IHN0cmluZyk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IGUgPSB0aGlzLm92ZXJsYXkuZ2V0KGtleSk7XG4gICAgICAgIGlmIChlKSByZXR1cm4gZS50aW1lO1xuICAgICAgICBjb25zdCBzdCA9IHRoaXMuaW5kZXg/LnN0cmVhbVRpbWVzLmdldChrZXkpO1xuICAgICAgICBpZiAoc3QgIT09IHVuZGVmaW5lZCkgcmV0dXJuIHN0O1xuICAgICAgICByZXR1cm4gLUluZmluaXR5O1xuICAgIH1cblxuICAgIC8vIENvdW50ZXIgKHNvIGNvbmN1cnJlbnQgLyBuZXN0ZWQgbWVyZ2VzIGluIHRoZSBzYW1lIGluc3RhbmNlIGNvbXBvc2UgY29ycmVjdGx5KS4gU2lnbmFsIGZpcmVzXG4gICAgLy8gaW1tZWRpYXRlbHksIG5vdCB0aHJvdWdoIHRoZSB0cmlnZ2VyIHRocm90dGxlIOKAlCBVSSBzcGlubmVycyBzaG91bGQgc2hvdyByaWdodCBhd2F5LlxuICAgIHByaXZhdGUgY29tcGFjdGluZ0NvdW50ID0gMDtcbiAgICBiZWdpbkNvbXBhY3Rpb24oKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY29tcGFjdGluZ0NvdW50Kys7XG4gICAgICAgIGlmICh0aGlzLmNvbXBhY3RpbmdDb3VudCA9PT0gMSkgdGhpcy5jZmcuZGVwcy5pbnZhbGlkYXRlKENPTVBBQ1RJTkdfU0lHTkFMKTtcbiAgICB9XG4gICAgZW5kQ29tcGFjdGlvbigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jb21wYWN0aW5nQ291bnQtLTtcbiAgICAgICAgaWYgKHRoaXMuY29tcGFjdGluZ0NvdW50ID09PSAwKSB0aGlzLmNmZy5kZXBzLmludmFsaWRhdGUoQ09NUEFDVElOR19TSUdOQUwpO1xuICAgIH1cbiAgICBpc0NvbXBhY3RpbmdTeW5jKCk6IGJvb2xlYW4ge1xuICAgICAgICB0aGlzLmNmZy5kZXBzLm9ic2VydmUoQ09NUEFDVElOR19TSUdOQUwpO1xuICAgICAgICByZXR1cm4gdGhpcy5jb21wYWN0aW5nQ291bnQgPiAwO1xuICAgIH1cblxuICAgIHByaXZhdGUgbm90aWZ5T3ZlcmxheU11dGF0aW9uKGtleTogc3RyaW5nLCBjb2x1bW5zOiBJdGVyYWJsZTxzdHJpbmc+IHwgXCJhbGxcIik6IHZvaWQge1xuICAgICAgICB0aGlzLmRhdGFHZW4rKztcbiAgICAgICAgaWYgKGNvbHVtbnMgPT09IFwiYWxsXCIpIHRoaXMuY29sdW1uQ2FjaGUuY2xlYXIoKTtcbiAgICAgICAgZWxzZSBmb3IgKGNvbnN0IGMgb2YgY29sdW1ucykgdGhpcy5jb2x1bW5DYWNoZS5kZWxldGUoYyk7XG4gICAgICAgIGlmICh0aGlzLmNmZy5kZXBzLmlzT2JzZXJ2ZWQ/LihrZXkpID8/IHRydWUpIHRoaXMuaW52YWxpZGF0ZVNpZ25hbChrZXkpO1xuICAgICAgICB0aGlzLmludmFsaWRhdGVTaWduYWwoT1ZFUkxBWV9TSUdOQUwpO1xuICAgIH1cblxuICAgIC8vIOKUgOKUgCBhc3luYyByZWFkcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgICBhc3luYyBnZXRLZXlzKCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICAgICAgY29uc3QgaW5kZXggPSBhd2FpdCB0aGlzLnJlcXVpcmVJbmRleCgpO1xuICAgICAgICBpZiAodGhpcy5vdmVybGF5LnNpemUgPT09IDApIHJldHVybiBbLi4uaW5kZXgua2V5c107XG4gICAgICAgIGNvbnN0IHNldCA9IG5ldyBTZXQoaW5kZXgua2V5cyk7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgZW50cnldIG9mIHRoaXMub3ZlcmxheSkge1xuICAgICAgICAgICAgaWYgKGVudHJ5LnZhbHVlID09PSBERUxFVEVEKSBzZXQuZGVsZXRlKGtleSk7XG4gICAgICAgICAgICBlbHNlIHNldC5hZGQoa2V5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gWy4uLnNldF07XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0Q29sdW1uPEMgZXh0ZW5kcyBrZXlvZiBUPihjb2x1bW46IEMpOiBQcm9taXNlPHsga2V5OiBzdHJpbmc7IHZhbHVlOiBUW0NdOyB0aW1lOiBudW1iZXIgfVtdPiB7XG4gICAgICAgIGNvbnN0IGNvbCA9IFN0cmluZyhjb2x1bW4pO1xuICAgICAgICBjb25zdCBjYWNoZWQgPSB0aGlzLmNvbHVtbkNhY2hlLmdldChjb2wpO1xuICAgICAgICBpZiAoY2FjaGVkKSByZXR1cm4gY2FjaGVkIGFzIHsga2V5OiBzdHJpbmc7IHZhbHVlOiBUW0NdOyB0aW1lOiBudW1iZXIgfVtdO1xuICAgICAgICBjb25zdCBnZW4gPSB0aGlzLmRhdGFHZW47XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgY29uc3QgaW5kZXggPSBhd2FpdCB0aGlzLnJlcXVpcmVJbmRleCgpO1xuICAgICAgICBsZXQgYmFzZSA9IGF3YWl0IGluZGV4LmdldENvbHVtbihjb2wpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gdGhpcy5vdmVybGF5LnBhdGNoQ29sdW1uKGJhc2UsIGNvbCkgYXMgeyBrZXk6IHN0cmluZzsgdmFsdWU6IFRbQ107IHRpbWU6IG51bWJlciB9W107XG4gICAgICAgIGNvbnN0IGVsYXBzZWQgPSBEYXRlLm5vdygpIC0gc3RhcnQ7XG4gICAgICAgIGlmIChlbGFwc2VkID4gNTApIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGAke2JsdWUoYCR7dGhpcy5jZmcubmFtZX0uZ2V0Q29sdW1uKCR7SlNPTi5zdHJpbmdpZnkoY29sdW1uKX0pYCl9IHRvb2sgJHtyZWQoZm9ybWF0VGltZShlbGFwc2VkKSl9ICR7dGhpcy5mb3JtYXRJbmZvKGluZGV4KX1gKTtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuZnJlZXplKHJlc3VsdCk7XG4gICAgICAgIGlmICh0aGlzLmRhdGFHZW4gPT09IGdlbikgdGhpcy5jb2x1bW5DYWNoZS5zZXQoY29sLCByZXN1bHQpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGFzeW5jIGdldFNpbmdsZUZpZWxkPEMgZXh0ZW5kcyBrZXlvZiBUPihrZXk6IHN0cmluZywgY29sdW1uOiBDKTogUHJvbWlzZTxUW0NdIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIHJldHVybiAoYXdhaXQgdGhpcy5nZXRTaW5nbGVGaWVsZE9iaihrZXksIGNvbHVtbikpPy52YWx1ZTtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRTaW5nbGVGaWVsZE9iajxDIGV4dGVuZHMga2V5b2YgVD4oa2V5OiBzdHJpbmcsIGNvbHVtbjogQyk6IFByb21pc2U8eyBrZXk6IHN0cmluZzsgdmFsdWU6IFRbQ107IHRpbWU6IG51bWJlciB9IHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGNvbnN0IGNvbCA9IFN0cmluZyhjb2x1bW4pO1xuICAgICAgICBjb25zdCBlbnRyeSA9IHRoaXMub3ZlcmxheS5nZXQoa2V5KTtcbiAgICAgICAgaWYgKGVudHJ5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGlmIChlbnRyeS52YWx1ZSA9PT0gREVMRVRFRCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmIChjb2wgaW4gZW50cnkudmFsdWUpIHJldHVybiB7IGtleSwgdmFsdWU6IGVudHJ5LnZhbHVlW2NvbF0gYXMgVFtDXSwgdGltZTogZW50cnkudGltZSB9O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgY29uc3QgaW5kZXggPSBhd2FpdCB0aGlzLnJlcXVpcmVJbmRleCgpO1xuICAgICAgICBjb25zdCByID0gYXdhaXQgaW5kZXguZ2V0U2luZ2xlRmllbGQoa2V5LCBjb2wpO1xuICAgICAgICBjb25zdCBlbGFwc2VkID0gRGF0ZS5ub3coKSAtIHN0YXJ0O1xuICAgICAgICBpZiAoZWxhcHNlZCA+IDUwKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgJHtibHVlKGAke3RoaXMuY2ZnLm5hbWV9LmdldFNpbmdsZUZpZWxkT2JqKCR7SlNPTi5zdHJpbmdpZnkoa2V5KX0sICR7SlNPTi5zdHJpbmdpZnkoY29sdW1uKX0pYCl9IHRvb2sgJHtyZWQoZm9ybWF0VGltZShlbGFwc2VkKSl9ICR7dGhpcy5mb3JtYXRJbmZvKGluZGV4KX1gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAociA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAoZW50cnkgIT09IHVuZGVmaW5lZCAmJiBlbnRyeS52YWx1ZSAhPT0gREVMRVRFRCkgcmV0dXJuIHsga2V5LCB2YWx1ZTogdW5kZWZpbmVkIGFzIFRbQ10sIHRpbWU6IGVudHJ5LnRpbWUgfTtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsga2V5LCB2YWx1ZTogci52YWx1ZSBhcyBUW0NdLCB0aW1lOiByLnRpbWUgfTtcbiAgICB9XG5cbiAgICAvLyDilIDilIAgc3luYyAocmVhY3RpdmUpIHJlYWRzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAgIGdldFNpbmdsZUZpZWxkU3luYzxDIGV4dGVuZHMga2V5b2YgVD4oa2V5OiBzdHJpbmcsIGNvbHVtbjogQyk6IFRbQ10gfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRTaW5nbGVGaWVsZE9ialN5bmMoa2V5LCBjb2x1bW4pPy52YWx1ZTtcbiAgICB9XG5cbiAgICBnZXRTaW5nbGVGaWVsZE9ialN5bmM8QyBleHRlbmRzIGtleW9mIFQ+KGtleTogc3RyaW5nLCBjb2x1bW46IEMpOiB7IGtleTogc3RyaW5nOyB2YWx1ZTogVFtDXTsgdGltZTogbnVtYmVyIH0gfCB1bmRlZmluZWQge1xuICAgICAgICB0aGlzLmNmZy5kZXBzLm9ic2VydmUoTE9BRF9TSUdOQUwpO1xuICAgICAgICB0aGlzLmNmZy5kZXBzLm9ic2VydmUoa2V5KTtcbiAgICAgICAgY29uc3QgY29sID0gU3RyaW5nKGNvbHVtbik7XG4gICAgICAgIGNvbnN0IGVudHJ5ID0gdGhpcy5vdmVybGF5LmdldChrZXkpO1xuICAgICAgICBpZiAoZW50cnkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKGVudHJ5LnZhbHVlID09PSBERUxFVEVEKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKGNvbCBpbiBlbnRyeS52YWx1ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5kZXg/LmVuc3VyZUJhc2VGaWVsZChrZXksIGNvbCwgKCkgPT4gdGhpcy5pbnZhbGlkYXRlU2lnbmFsKExPQURfU0lHTkFMKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsga2V5LCB2YWx1ZTogZW50cnkudmFsdWVbY29sXSBhcyBUW0NdLCB0aW1lOiBlbnRyeS50aW1lIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmluZGV4O1xuICAgICAgICBpZiAoIWluZGV4KSB7XG4gICAgICAgICAgICBpZiAoZW50cnkgIT09IHVuZGVmaW5lZCAmJiBlbnRyeS52YWx1ZSAhPT0gREVMRVRFRCkgcmV0dXJuIHsga2V5LCB2YWx1ZTogdW5kZWZpbmVkIGFzIFRbQ10sIHRpbWU6IGVudHJ5LnRpbWUgfTtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYmFzZSA9IGluZGV4LmdldEJhc2VGaWVsZChrZXksIGNvbCk7XG4gICAgICAgIC8vIFRyaWdnZXIgbG9hZCBpZiBub3QgbG9hZGVkIE9SIGxvYWRlZCBvbmx5IGZyb20gc3RhbGUgZmFsbGJhY2sgKHJlZnJlc2ggbmVlZGVkKS5cbiAgICAgICAgaWYgKCFiYXNlLmxvYWRlZCB8fCAhYmFzZS5mcmVzaCkgaW5kZXguZW5zdXJlQmFzZUZpZWxkKGtleSwgY29sLCAoKSA9PiB0aGlzLmludmFsaWRhdGVTaWduYWwoTE9BRF9TSUdOQUwpKTtcbiAgICAgICAgaWYgKCFiYXNlLmxvYWRlZCB8fCBiYXNlLnZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGlmIChlbnRyeSAhPT0gdW5kZWZpbmVkICYmIGVudHJ5LnZhbHVlICE9PSBERUxFVEVEKSByZXR1cm4geyBrZXksIHZhbHVlOiB1bmRlZmluZWQgYXMgVFtDXSwgdGltZTogZW50cnkudGltZSB9O1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBrZXksIHZhbHVlOiBiYXNlLnZhbHVlLnZhbHVlIGFzIFRbQ10sIHRpbWU6IGJhc2UudmFsdWUudGltZSB9O1xuICAgIH1cblxuICAgIGdldENvbHVtblN5bmM8QyBleHRlbmRzIGtleW9mIFQ+KGNvbHVtbjogQyk6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiBUW0NdOyB0aW1lOiBudW1iZXIgfVtdIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgdGhpcy5jZmcuZGVwcy5vYnNlcnZlKExPQURfU0lHTkFMKTtcbiAgICAgICAgdGhpcy5jZmcuZGVwcy5vYnNlcnZlKE9WRVJMQVlfU0lHTkFMKTtcbiAgICAgICAgY29uc3QgY29sID0gU3RyaW5nKGNvbHVtbik7XG4gICAgICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMuY29sdW1uQ2FjaGUuZ2V0KGNvbCk7XG4gICAgICAgIGlmIChjYWNoZWQpIHJldHVybiBjYWNoZWQgYXMgeyBrZXk6IHN0cmluZzsgdmFsdWU6IFRbQ107IHRpbWU6IG51bWJlciB9W107XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5pbmRleDtcbiAgICAgICAgaWYgKCFpbmRleCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgYmFzZSA9IGluZGV4LmdldEJhc2VDb2x1bW4oY29sKTtcbiAgICAgICAgLy8gVHJpZ2dlciBsb2FkIGlmIG5vdCBmcmVzaCAoZ2VudWluZSBmaXJzdCBsb2FkIE9SIGEgc3RhbGUgZmFsbGJhY2sgYXdhaXRpbmcgcmVmcmVzaCkuXG4gICAgICAgIGlmICghYmFzZSB8fCAhYmFzZS5mcmVzaCkgaW5kZXguZW5zdXJlQmFzZUNvbHVtbihjb2wsICgpID0+IHRoaXMuaW52YWxpZGF0ZVNpZ25hbChMT0FEX1NJR05BTCkpO1xuICAgICAgICBpZiAoIWJhc2UpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMub3ZlcmxheS5wYXRjaENvbHVtbihiYXNlLmVudHJpZXMsIGNvbCkgYXMgeyBrZXk6IHN0cmluZzsgdmFsdWU6IFRbQ107IHRpbWU6IG51bWJlciB9W107XG4gICAgICAgIGlmIChiYXNlLmZyZXNoKSB7XG4gICAgICAgICAgICBPYmplY3QuZnJlZXplKHJlc3VsdCk7XG4gICAgICAgICAgICB0aGlzLmNvbHVtbkNhY2hlLnNldChjb2wsIHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBpc0ZpZWxkTG9hZGVkU3luYzxDIGV4dGVuZHMga2V5b2YgVD4oa2V5OiBzdHJpbmcsIGNvbHVtbjogQyk6IGJvb2xlYW4ge1xuICAgICAgICB0aGlzLmNmZy5kZXBzLm9ic2VydmUoTE9BRF9TSUdOQUwpO1xuICAgICAgICB0aGlzLmNmZy5kZXBzLm9ic2VydmUoa2V5KTtcbiAgICAgICAgY29uc3QgZW50cnkgPSB0aGlzLm92ZXJsYXkuZ2V0KGtleSk7XG4gICAgICAgIGlmIChlbnRyeSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAoZW50cnkudmFsdWUgPT09IERFTEVURUQpIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgaWYgKFN0cmluZyhjb2x1bW4pIGluIGVudHJ5LnZhbHVlKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuaW5kZXg7XG4gICAgICAgIGlmICghaW5kZXgpIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKGluZGV4LmlzQmFzZUZpZWxkTG9hZGVkKGtleSwgU3RyaW5nKGNvbHVtbikpKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaW5kZXguZW5zdXJlQmFzZUZpZWxkKGtleSwgU3RyaW5nKGNvbHVtbiksICgpID0+IHRoaXMuaW52YWxpZGF0ZVNpZ25hbChMT0FEX1NJR05BTCkpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaXNDb2x1bW5Mb2FkZWRTeW5jPEMgZXh0ZW5kcyBrZXlvZiBUPihjb2x1bW46IEMpOiBib29sZWFuIHtcbiAgICAgICAgdGhpcy5jZmcuZGVwcy5vYnNlcnZlKExPQURfU0lHTkFMKTtcbiAgICAgICAgdGhpcy5jZmcuZGVwcy5vYnNlcnZlKE9WRVJMQVlfU0lHTkFMKTtcbiAgICAgICAgY29uc3QgY29sID0gU3RyaW5nKGNvbHVtbik7XG4gICAgICAgIGlmICh0aGlzLmNvbHVtbkNhY2hlLmhhcyhjb2wpKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmluZGV4O1xuICAgICAgICBpZiAoIWluZGV4KSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmIChpbmRleC5pc0Jhc2VDb2x1bW5Mb2FkZWQoY29sKSkgcmV0dXJuIHRydWU7XG4gICAgICAgIGluZGV4LmVuc3VyZUJhc2VDb2x1bW4oY29sLCAoKSA9PiB0aGlzLmludmFsaWRhdGVTaWduYWwoTE9BRF9TSUdOQUwpKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIOKUgOKUgCBoZWxwZXJzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAgIC8vIEJvdGggYXN5bmMgcmVhZHMgYXdhaXQgdGhpcy4gVGhlIGhvc3Qgd2lyZXMgYW4gYGVuc3VyZUluZGV4YCB0aGF0IHRyaWdnZXJzIHRoZSBpbml0aWFsIGJ1aWxkIGlmXG4gICAgLy8gbm8gaW5kZXggaXMgbG9hZGVkIHlldCDigJQgcmVhZHMgdGhhdCByYWNlIHRoZSBmaXJzdCBsb2FkIGFsbCB3YWl0IG9uIHRoZSBzYW1lIHByb21pc2UuXG4gICAgc2V0RW5zdXJlSW5kZXgoZm46ICgpID0+IFByb21pc2U8TG9hZGVkSW5kZXg8VD4+KTogdm9pZCB7IHRoaXMuZW5zdXJlSW5kZXhGbiA9IGZuOyB9XG4gICAgcHJpdmF0ZSBlbnN1cmVJbmRleEZuOiAoKCkgPT4gUHJvbWlzZTxMb2FkZWRJbmRleDxUPj4pIHwgdW5kZWZpbmVkO1xuICAgIHByaXZhdGUgYXN5bmMgcmVxdWlyZUluZGV4KCk6IFByb21pc2U8TG9hZGVkSW5kZXg8VD4+IHtcbiAgICAgICAgaWYgKHRoaXMuaW5kZXgpIHJldHVybiB0aGlzLmluZGV4O1xuICAgICAgICBpZiAoIXRoaXMuZW5zdXJlSW5kZXhGbikgdGhyb3cgbmV3IEVycm9yKGAke3RoaXMuY2ZnLm5hbWV9OiBpbmRleCBub3Qgc2V0IOKAlCBjYWxsIHNldEluZGV4KC4uLikgYmVmb3JlIHJlYWRpbmdgKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5zdXJlSW5kZXhGbigpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZm9ybWF0SW5mbyhpbmRleDogTG9hZGVkSW5kZXg8VD4pOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYChjb2xsZWN0aW9uIGhhcyAke2JsdWUoZm9ybWF0TnVtYmVyKGluZGV4LnJlYWRlci5yb3dDb3VudCkpfSByb3dzLCAke2JsdWUoZm9ybWF0TnVtYmVyKGluZGV4LnJlYWRlci50b3RhbEJ5dGVzKSl9QilgO1xuICAgIH1cblxuICAgIC8vIE5vdGlmaWNhdGlvbnMgYXJlIHJhbXBpbmdseSBkZWxheWVkIHVuZGVyIHN1c3RhaW5lZCBjaGFuZ2VzIChzbyBhIGhpZ2gtcmF0ZSB3cml0ZXIgY2FuJ3QgcmUtcnVuXG4gICAgLy8gd2F0Y2hlcnMgcGVyIGNoYW5nZSkuIFVuZGVybHlpbmcgZGF0YSBpcyBhbHdheXMgY3VycmVudCDigJQgb25seSB0aGUgb2JzZXJ2YWJsZSBub3RpZmljYXRpb24gaXNcbiAgICAvLyBiYXRjaGVkL2RlbGF5ZWQuXG4gICAgcHJpdmF0ZSBpbnZhbGlkYXRlU2lnbmFsKHNpZ25hbDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG1heE1zID0gdGhpcy5jZmcubWF4VHJpZ2dlclRocm90dGxlTXMgPz8gMDtcbiAgICAgICAgaWYgKG1heE1zIDw9IDApIHsgdGhpcy5jZmcuZGVwcy5pbnZhbGlkYXRlKHNpZ25hbCk7IHJldHVybjsgfVxuICAgICAgICB0aGlzLnBlbmRpbmdTaWduYWxzLmFkZChzaWduYWwpO1xuICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgICAgICBjb25zdCBsdWxsID0gbm93IC0gdGhpcy5sYXN0VHJpZ2dlclRpbWUgPiBtYXhNcztcbiAgICAgICAgdGhpcy5sYXN0VHJpZ2dlclRpbWUgPSBub3c7XG4gICAgICAgIGlmICh0aGlzLnRyaWdnZXJUaW1lciAhPT0gdW5kZWZpbmVkKSByZXR1cm47XG4gICAgICAgIHRoaXMuY3VycmVudFRyaWdnZXJEZWxheSA9IGx1bGwgPyAwIDogTWF0aC5taW4obWF4TXMsIE1hdGgubWF4KFRSSUdHRVJfVEhST1RUTEVfRklSU1RfU1RFUF9NUywgdGhpcy5jdXJyZW50VHJpZ2dlckRlbGF5ICogMikpO1xuICAgICAgICB0aGlzLnRyaWdnZXJUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4geyB0aGlzLnRyaWdnZXJUaW1lciA9IHVuZGVmaW5lZDsgdGhpcy5mbHVzaFNpZ25hbHMoKTsgfSwgdGhpcy5jdXJyZW50VHJpZ2dlckRlbGF5KTtcbiAgICAgICAgKHRoaXMudHJpZ2dlclRpbWVyIGFzIHsgdW5yZWY/OiAoKSA9PiB2b2lkIH0pLnVucmVmPy4oKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZsdXNoU2lnbmFscygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMucGVuZGluZ1NpZ25hbHMuc2l6ZSA9PT0gMCkgcmV0dXJuO1xuICAgICAgICBjb25zdCBzaWduYWxzID0gWy4uLnRoaXMucGVuZGluZ1NpZ25hbHNdO1xuICAgICAgICB0aGlzLnBlbmRpbmdTaWduYWxzLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuY2ZnLmRlcHMuYmF0Y2goKCkgPT4geyBmb3IgKGNvbnN0IHMgb2Ygc2lnbmFscykgdGhpcy5jZmcuZGVwcy5pbnZhbGlkYXRlKHMpOyB9KTtcbiAgICB9XG59XG5cbmV4cG9ydCBjb25zdCBSRUFERVJfU0lHTkFMUyA9IHsgTE9BRDogTE9BRF9TSUdOQUwsIE9WRVJMQVk6IE9WRVJMQVlfU0lHTkFMIH07XG5leHBvcnQgeyBudWxsSm9pbiB9O1xuIl19
306
- /* _JS_SOURCE_HASH = "ca015ad4f2006823b4a0fde28d02fb87b03558ca59a6a2d8696ab7fd52da14e5"; */
306
+ /* _JS_SOURCE_HASH = "0cdfd5f6e820afcba6ce69c13c93f8bafdd22445a5b426fc26faeaf00fcdc2c7"; */
@@ -1,4 +1,4 @@
1
- "use strict";
1
+ "use strict"; var console = (function shimConsole() { let baseConsole = globalThis.console; if (typeof window !== "undefined") return baseConsole; let name = __filename.replaceAll("\\", "/").split("/").pop(); let dirName = __dirname.replaceAll("\\", "/").split("/").pop(); let context = { __FILE__: __filename, __DIR__: __dirname, __NAME__: name, __DIRNAME__: dirName }; let newConsole = { ...baseConsole }; for (let shim of ["log", "info", "warn", "error"]) { newConsole[shim] = (...args) => { args.push(context); baseConsole[shim](...args); }; } newConsole.__context = context; return newConsole; })(); "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true , configurable: true});
3
3
  //exports.orderStreamEntries = exports.loadStreamEntries = exports.loadFileReader = exports.makeRawGetRange = exports.LoadedIndex = exports.MissingFileError = void 0;
4
4
  const BulkDatabaseFormat_1 = require("./BulkDatabaseFormat");
@@ -432,4 +432,4 @@ function joinBulkDatabases(databases) {
432
432
  };
433
433
  }
434
434
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTG9hZGVkSW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJMb2FkZWRJbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSw2REFBa0g7QUFDbEgsNkNBQW9EO0FBQ3BELDJDQUFrRztBQUNsRyxrRUFBaUY7QUFDakYsd0VBQXFFO0FBRXJFLG9JQUFvSTtBQUNwSSxNQUFNLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDO0FBTTFDLE1BQWEsZ0JBQWlCLFNBQVEsS0FBSztDQUFJO0FBQS9DLDRDQUErQztBQUMvQyxNQUFNLGlCQUFrQixTQUFRLEtBQUs7Q0FBSTtBQW9CekMsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLENBQUM7QUFFNUIsU0FBUyxRQUFRLENBQUMsQ0FBUyxFQUFFLENBQVM7SUFDbEMsT0FBTyxDQUFDLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDMUMsQ0FBQztBQUVELHVHQUF1RztBQUN2RyxvR0FBb0c7QUFDcEcsbUdBQW1HO0FBQ25HLDREQUE0RDtBQUM1RCxNQUFhLFdBQVc7SUFDcEIsWUFDb0IsSUFBWSxFQUNaLE9BQW9CLEVBQ3BCLFNBQXlCLEVBQ3pCLFdBQTZCLEVBQzdCLE1BQXNCLEVBQ3RCLFdBQWdDLEVBQ2hDLFdBQWdDLEVBQ2hDLGdCQUF3QixFQUN4QixpQkFBeUIsRUFDekIsU0FBMEI7UUFUMUIsU0FBSSxHQUFKLElBQUksQ0FBUTtRQUNaLFlBQU8sR0FBUCxPQUFPLENBQWE7UUFDcEIsY0FBUyxHQUFULFNBQVMsQ0FBZ0I7UUFDekIsZ0JBQVcsR0FBWCxXQUFXLENBQWtCO1FBQzdCLFdBQU0sR0FBTixNQUFNLENBQWdCO1FBQ3RCLGdCQUFXLEdBQVgsV0FBVyxDQUFxQjtRQUNoQyxnQkFBVyxHQUFYLFdBQVcsQ0FBcUI7UUFDaEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFRO1FBQ3hCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBUTtRQUN6QixjQUFT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SSxDQUFDLENBQUM7Z0JBQ04sSUFBSSxDQUFDO29CQUNELENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUM3QyxDQUFDO2dCQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7b0JBQ1QsZUFBZSxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQy9CLFNBQVM7Z0JBQ2IsQ0FBQztnQkFDRCxJQUFJLENBQUMsS0FBSywyQkFBTTtvQkFBRSxTQUFTO2dCQUMzQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsUUFBUSxFQUFFLENBQUM7b0JBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7b0JBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7b0JBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztnQkFBQyxDQUFDO1lBQ2xGLENBQUM7WUFDRCxNQUFNLElBQUksR0FBRyxLQUFLLElBQUksUUFBUSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM1QyxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUM3RSxDQUFDO0tBQ0osQ0FBQztBQUNOLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEZpbGVTdG9yYWdlIH0gZnJvbSBcIi4uL0ZpbGVGb2xkZXJBUElcIjtcbmltcG9ydCB7IEFCU0VOVCwgQmFzZUJ1bGtEYXRhYmFzZVJlYWRlciwgRU1QVFlfQlVGRkVSLCBLRVlfQ09MVU1OLCBsb2FkQnVsa0RhdGFiYXNlIH0gZnJvbSBcIi4vQnVsa0RhdGFiYXNlRm9ybWF0XCI7XG5pbXBvcnQgeyBibG9ja0NhY2hlLCBHZXRSYW5nZSB9IGZyb20gXCIuL2Jsb2NrQ2FjaGVcIjtcbmltcG9ydCB7IFNUUkVBTV9FWFRFTlNJT04sIFN0cmVhbUVudHJ5LCBwYXJzZVN0cmVhbSwgc3RyZWFtUmVhZGVyRnJvbUVudHJpZXMgfSBmcm9tIFwiLi9zdHJlYW1Mb2dcIjtcbmltcG9ydCB7IGZvcm1hdE51bWJlciwgZm9ybWF0VGltZSB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vc3JjL2Zvcm1hdHRpbmcvZm9ybWF0XCI7XG5pbXBvcnQgeyBibHVlLCByZWQgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9mb3JtYXR0aW5nL2xvZ0NvbG9yc1wiO1xuXG4vLyBEdXBsaWNhdGVkIGZyb20gQnVsa0RhdGFiYXNlQmFzZSB0byBhdm9pZCBhIGNpcmN1bGFyIGltcG9ydCDigJQgdXNlZCBvbmx5IHRvIGJ1aWxkIGEgZnVsbGVyIHN0b3JhZ2UtcmVsYXRpdmUgcGF0aCBmb3IgbG9nIG1lc3NhZ2VzLlxuY29uc3QgQlVMS19ST09UX0ZPTERFUiA9IFwiYnVsa0RhdGFiYXNlczJcIjtcblxuZXhwb3J0IHR5cGUgQnVsa0ZpbGVJbmZvID0geyBmaWxlTmFtZTogc3RyaW5nOyBsZXZlbDogbnVtYmVyOyB0aW1lc3RhbXA6IG51bWJlciB9O1xuZXhwb3J0IHR5cGUgU3RyZWFtRmlsZUluZm8gPSB7IGZpbGVOYW1lOiBzdHJpbmc7IHRpbWVzdGFtcDogbnVtYmVyIH07XG5leHBvcnQgdHlwZSBTdHJlYW1SZWFkZXJDYWNoZUVudHJ5ID0geyByZWFkU2l6ZTogbnVtYmVyOyBwYXJzZWRQb3M6IG51bWJlcjsgZW50cmllczogU3RyZWFtRW50cnlbXSB9O1xuXG5leHBvcnQgY2xhc3MgTWlzc2luZ0ZpbGVFcnJvciBleHRlbmRzIEVycm9yIHsgfVxuY2xhc3MgRmlsZXNDaGFuZ2VkRXJyb3IgZXh0ZW5kcyBFcnJvciB7IH1cblxuZXhwb3J0IHR5cGUgUmVzb2x2ZWRSZWFkZXIgPSB7XG4gICAgcm93Q291bnQ6IG51bWJlcjtcbiAgICB0b3RhbEJ5dGVzOiBudW1iZXI7XG4gICAga2V5czogc3RyaW5nW107XG4gICAgcmF3S2V5Q291bnQ6IG51bWJlcjtcbiAgICByZWFkZXJDb3VudDogbnVtYmVyO1xuICAgIGNvbHVtbnM6IHsgY29sdW1uOiBzdHJpbmc7IGJ5dGVTaXplOiBudW1iZXIgfVtdO1xuICAgIGtleVRpbWVzOiBNYXA8c3RyaW5nLCBudW1iZXI+O1xuICAgIGRlbGV0ZVRpbWVzOiBNYXA8c3RyaW5nLCBudW1iZXI+O1xuICAgIGdldENvbHVtbjogKGNvbHVtbjogc3RyaW5nKSA9PiBQcm9taXNlPHsga2V5OiBzdHJpbmc7IHZhbHVlOiB1bmtub3duOyB0aW1lOiBudW1iZXIgfVtdPjtcbiAgICBnZXRTaW5nbGVGaWVsZDogKGtleTogc3RyaW5nLCBjb2x1bW46IHN0cmluZykgPT4gUHJvbWlzZTx7IHZhbHVlOiB1bmtub3duOyB0aW1lOiBudW1iZXIgfSB8IHVuZGVmaW5lZD47XG59O1xuXG5leHBvcnQgdHlwZSBTdWJSZWFkZXJDYWNoZXMgPSB7XG4gICAgYnVsazogTWFwPHN0cmluZywgQmFzZUJ1bGtEYXRhYmFzZVJlYWRlcj47XG4gICAgc3RyZWFtOiBNYXA8c3RyaW5nLCBTdHJlYW1SZWFkZXJDYWNoZUVudHJ5Pjtcbn07XG5cbmNvbnN0IE1BWF9SRUFEX0FUVEVNUFRTID0gODtcblxuZnVuY3Rpb24gbnVsbEpvaW4oYTogc3RyaW5nLCBiOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBhICsgU3RyaW5nLmZyb21DaGFyQ29kZSgwKSArIGI7XG59XG5cbi8vIEEgbG9hZGVkIHNuYXBzaG90IG9mIG9uZSBjb2xsZWN0aW9uJ3Mgb24tZGlzayBzdGF0ZTogdGhlIHJlc29sdmVkIHJlYWRlciArIHRoZSBwZXItZmlsZSBkZWNvZGVkIHN1Yi1cbi8vIHJlYWRlcnMgaXQgc3RpdGNoZWQsIHRoZSBzdHJlYW0gZmlsZSBzaXplcy90aW1lcyBpdCBvYnNlcnZlZCwgYW5kIHRoZSBzeW5jIChyZWFjdGl2ZSkgY2FjaGVzIHRoYXRcbi8vIHN1cmZhY2UgY29sdW1uL2ZpZWxkIHJlYWRzLiBCdWlsdCBvbmNlIHZpYSBMb2FkZWRJbmRleC5idWlsZCDigJQgZWFnZXJseSwgc28gdGhlIHN3YXAgaW50byBhIGZyZXNoXG4vLyBMb2FkZWRJbmRleCBuZXZlciBibG9ja3MgYSByZWFkIG9uIGEgc3luY2hyb25vdXMgcmVidWlsZC5cbmV4cG9ydCBjbGFzcyBMb2FkZWRJbmRleDxUIGV4dGVuZHMgeyBrZXk6IHN0cmluZyB9PiB7XG4gICAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIHJlYWRvbmx5IG5hbWU6IHN0cmluZyxcbiAgICAgICAgcHVibGljIHJlYWRvbmx5IHN0b3JhZ2U6IEZpbGVTdG9yYWdlLFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgYnVsa0ZpbGVzOiBCdWxrRmlsZUluZm9bXSxcbiAgICAgICAgcHVibGljIHJlYWRvbmx5IHN0cmVhbUZpbGVzOiBTdHJlYW1GaWxlSW5mb1tdLFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgcmVhZGVyOiBSZXNvbHZlZFJlYWRlcixcbiAgICAgICAgcHVibGljIHJlYWRvbmx5IHN0cmVhbVRpbWVzOiBNYXA8c3RyaW5nLCBudW1iZXI+LFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgc3RyZWFtU2l6ZXM6IE1hcDxzdHJpbmcsIG51bWJlcj4sXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBzdHJlYW1Sb3dzT25EaXNrOiBudW1iZXIsXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBzdHJlYW1CeXRlc09uRGlzazogbnVtYmVyLFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgc3ViQ2FjaGVzOiBTdWJSZWFkZXJDYWNoZXMsXG4gICAgKSB7XG4gICAgICAgIHRoaXMua2V5cyA9IG5ldyBTZXQocmVhZGVyLmtleXMpO1xuICAgICAgICB0aGlzLmZpbGVTZXQgPSBuZXcgU2V0KFsuLi5idWxrRmlsZXMubWFwKGYgPT4gZi5maWxlTmFtZSksIC4uLnN0cmVhbUZpbGVzLm1hcChmID0+IGYuZmlsZU5hbWUpXSk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlYWRvbmx5IGtleXM6IFNldDxzdHJpbmc+O1xuICAgIHB1YmxpYyByZWFkb25seSBmaWxlU2V0OiBTZXQ8c3RyaW5nPjtcblxuICAgIHByaXZhdGUgYmFzZUNvbHVtbnMgPSBuZXcgTWFwPHN0cmluZywgeyBrZXk6IHN0cmluZzsgdmFsdWU6IHVua25vd247IHRpbWU6IG51bWJlciB9W10+KCk7XG4gICAgcHJpdmF0ZSBiYXNlQ29sdW1uc0xvYWRpbmcgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBwcml2YXRlIGJhc2VGaWVsZHMgPSBuZXcgTWFwPHN0cmluZywgeyB2YWx1ZTogdW5rbm93bjsgdGltZTogbnVtYmVyIH0gfCB1bmRlZmluZWQ+KCk7XG4gICAgcHJpdmF0ZSBiYXNlRmllbGRzTG9hZGluZyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIC8vIExhc3Qta25vd24gdmFsdWVzIGZyb20gdGhlIHByZXZpb3VzIGluZGV4LCBzZXJ2ZWQgdW50aWwgdGhpcyBpbmRleCBsb2FkcyBpdHMgb3duIGZyZXNoIHZhbHVlLCBzb1xuICAgIC8vIGEgc3dhcCBkb2Vzbid0IGZsYXNoIGVtcHR5IGluIHN5bmMgcmVhZHMuIENsZWFyZWQgcGVyLWVudHJ5IHdoZW4gdGhlIGZyZXNoIHZhbHVlIGxhbmRzLlxuICAgIHByaXZhdGUgc3RhbGVCYXNlQ29sdW1ucyA9IG5ldyBNYXA8c3RyaW5nLCB7IGtleTogc3RyaW5nOyB2YWx1ZTogdW5rbm93bjsgdGltZTogbnVtYmVyIH1bXT4oKTtcbiAgICBwcml2YXRlIHN0YWxlQmFzZUZpZWxkcyA9IG5ldyBNYXA8c3RyaW5nLCB7IHZhbHVlOiB1bmtub3duOyB0aW1lOiBudW1iZXIgfSB8IHVuZGVmaW5lZD4oKTtcblxuICAgIGdldCB0b3RhbEJ5dGVzKCk6IG51bWJlciB7IHJldHVybiB0aGlzLnJlYWRlci50b3RhbEJ5dGVzOyB9XG4gICAgZ2V0IHJvd0NvdW50KCk6IG51bWJlciB7IHJldHVybiB0aGlzLnJlYWRlci5yb3dDb3VudDsgfVxuXG4gICAgaXNMaXZlKGtleTogc3RyaW5nKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLmtleXMuaGFzKGtleSk7IH1cblxuICAgIHN0YXRpYyBhc3luYyBidWlsZDxUIGV4dGVuZHMgeyBrZXk6IHN0cmluZyB9Pihjb25maWc6IHtcbiAgICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgICBzdG9yYWdlOiBGaWxlU3RvcmFnZTtcbiAgICAgICAgYnVsa0ZpbGVzOiBCdWxrRmlsZUluZm9bXTtcbiAgICAgICAgc3RyZWFtRmlsZXM6IFN0cmVhbUZpbGVJbmZvW107XG4gICAgICAgIHN1YkNhY2hlczogU3ViUmVhZGVyQ2FjaGVzO1xuICAgICAgICBvblVucmVhZGFibGVGaWxlPzogKGZpbGU6IEJ1bGtGaWxlSW5mbywgbWVzc2FnZTogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+O1xuICAgIH0pOiBQcm9taXNlPExvYWRlZEluZGV4PFQ+PiB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgbGV0IHsgYnVsa0ZpbGVzLCBzdHJlYW1GaWxlcyB9ID0gY29uZmlnO1xuICAgICAgICBsZXQgYXR0ZW1wdCA9IDA7XG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICBjb25zdCB0b2xlcmF0ZU1pc3NpbmcgPSBhdHRlbXB0ID49IE1BWF9SRUFEX0FUVEVNUFRTO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBsZXQgZmlsZXNDaGFuZ2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgY29uc3QgW2J1bGtSZWFkZXJzUmF3LCBzdHJlYW1EYXRhXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgICAgICAgICAgICAgUHJvbWlzZS5hbGwoYnVsa0ZpbGVzLm1hcChhc3luYyBmID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IGxvYWRGaWxlUmVhZGVyKGNvbmZpZy5uYW1lLCBjb25maWcuc3RvcmFnZSwgZiwgY29uZmlnLnN1YkNhY2hlcy5idWxrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIE1pc3NpbmdGaWxlRXJyb3IpIHsgZmlsZXNDaGFuZ2VkID0gdHJ1ZTsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25maWcub25VbnJlYWRhYmxlRmlsZSkgYXdhaXQgY29uZmlnLm9uVW5yZWFkYWJsZUZpbGUoZiwgKGUgYXMgRXJyb3IpLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgICAgICAgICAgbG9hZFN0cmVhbUVudHJpZXMoY29uZmlnLm5hbWUsIGNvbmZpZy5zdG9yYWdlLCBzdHJlYW1GaWxlcywgY29uZmlnLnN1YkNhY2hlcy5zdHJlYW0pLFxuICAgICAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgICAgIGlmIChzdHJlYW1EYXRhLm1pc3NpbmcpIGZpbGVzQ2hhbmdlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgaWYgKGZpbGVzQ2hhbmdlZCAmJiAhdG9sZXJhdGVNaXNzaW5nKSB0aHJvdyBuZXcgRmlsZXNDaGFuZ2VkRXJyb3IoKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGJ1bGtSZWFkZXJzID0gYnVsa1JlYWRlcnNSYXcuZmlsdGVyKChyKTogciBpcyBCYXNlQnVsa0RhdGFiYXNlUmVhZGVyID0+ICEhcik7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVhZGVyczogQmFzZUJ1bGtEYXRhYmFzZVJlYWRlcltdID0gW107XG4gICAgICAgICAgICAgICAgbGV0IHN0cmVhbVRpbWVzID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcbiAgICAgICAgICAgICAgICBjb25zdCBvcmRlcmVkID0gb3JkZXJTdHJlYW1FbnRyaWVzKHN0cmVhbURhdGEuZW50cmllcyk7XG4gICAgICAgICAgICAgICAgaWYgKG9yZGVyZWQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cmVhbSA9IHN0cmVhbVJlYWRlckZyb21FbnRyaWVzKG9yZGVyZWQsIHN0cmVhbURhdGEudG90YWxCeXRlcyk7XG4gICAgICAgICAgICAgICAgICAgIHJlYWRlcnMucHVzaChzdHJlYW0ucmVhZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgc3RyZWFtVGltZXMgPSBzdHJlYW0udGltZXM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlYWRlcnMucHVzaCguLi5idWxrUmVhZGVycyk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVhZGVyID0gam9pbkJ1bGtEYXRhYmFzZXMocmVhZGVycyk7XG5cbiAgICAgICAgICAgICAgICBwcnVuZVN1YkNhY2hlcyhidWxrRmlsZXMsIHN0cmVhbUZpbGVzLCBjb25maWcuc3ViQ2FjaGVzKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGVsYXBzZWQgPSBEYXRlLm5vdygpIC0gc3RhcnQ7XG4gICAgICAgICAgICAgICAgaWYgKGVsYXBzZWQgPiA1MCkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgYnl0ZXNSZWFkID0gc3RyZWFtRGF0YS50b3RhbEJ5dGVzO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHIgb2YgYnVsa1JlYWRlcnMpIGJ5dGVzUmVhZCArPSByLmNvbHVtbnMuZmluZChjID0+IGMuY29sdW1uID09PSBLRVlfQ09MVU1OKT8uYnl0ZVNpemUgPz8gMDtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYCR7Ymx1ZShjb25maWcubmFtZSl9IGxvYWRlZCBpbiAke3JlZChmb3JtYXRUaW1lKGVsYXBzZWQpKX0gKCR7Ymx1ZShmb3JtYXROdW1iZXIocmVhZGVyLnJvd0NvdW50KSl9IHJvd3MsICR7YnVsa0ZpbGVzLmxlbmd0aH0gYnVsayArICR7c3RyZWFtRmlsZXMubGVuZ3RofSBzdHJlYW0gZmlsZXMsIHJlYWQgJHtibHVlKGZvcm1hdE51bWJlcihieXRlc1JlYWQpKX1CKWApO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTG9hZGVkSW5kZXg8VD4oXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5uYW1lLFxuICAgICAgICAgICAgICAgICAgICBjb25maWcuc3RvcmFnZSxcbiAgICAgICAgICAgICAgICAgICAgYnVsa0ZpbGVzLFxuICAgICAgICAgICAgICAgICAgICBzdHJlYW1GaWxlcyxcbiAgICAgICAgICAgICAgICAgICAgcmVhZGVyLFxuICAgICAgICAgICAgICAgICAgICBzdHJlYW1UaW1lcyxcbiAgICAgICAgICAgICAgICAgICAgc3RyZWFtRGF0YS5zaXplcyxcbiAgICAgICAgICAgICAgICAgICAgc3RyZWFtRGF0YS5lbnRyaWVzLmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgc3RyZWFtRGF0YS50b3RhbEJ5dGVzLFxuICAgICAgICAgICAgICAgICAgICBjb25maWcuc3ViQ2FjaGVzLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBGaWxlc0NoYW5nZWRFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBhdHRlbXB0Kys7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gQWRvcHRzIHRoZSBwcmV2aW91cyBpbmRleCdzIGxvYWRlZCBiYXNlIHZhbHVlcyBhcyBTVEFMRSBvbiB0aGlzIG9uZSwgc28gYSBzeW5jIHJlYWQgbWlkLXN3YXAgY2FuXG4gICAgLy8gc2VydmUgdGhlIG9sZCB2YWx1ZSAocGF0Y2hlZCB3aXRoIHRoZSBjdXJyZW50IG92ZXJsYXkpIGluc3RlYWQgb2YgZmxhc2hpbmcgZW1wdHkgd2hpbGUgdGhlIGZyZXNoXG4gICAgLy8gbG9hZCBydW5zLiBQZXItZW50cnk6IGRyb3BwZWQgd2hlbiB0aGUgZnJlc2ggdmFsdWUgbGFuZHMgaGVyZS5cbiAgICBpbmhlcml0U3RhbGVGcm9tKHByZXY6IExvYWRlZEluZGV4PFQ+KTogdm9pZCB7XG4gICAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIHByZXYuYmFzZUNvbHVtbnMpIHRoaXMuc3RhbGVCYXNlQ29sdW1ucy5zZXQoaywgdik7XG4gICAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIHByZXYuc3RhbGVCYXNlQ29sdW1ucykgaWYgKCF0aGlzLnN0YWxlQmFzZUNvbHVtbnMuaGFzKGspKSB0aGlzLnN0YWxlQmFzZUNvbHVtbnMuc2V0KGssIHYpO1xuICAgICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBwcmV2LmJhc2VGaWVsZHMpIHRoaXMuc3RhbGVCYXNlRmllbGRzLnNldChrLCB2KTtcbiAgICAgICAgZm9yIChjb25zdCBbaywgdl0gb2YgcHJldi5zdGFsZUJhc2VGaWVsZHMpIGlmICghdGhpcy5zdGFsZUJhc2VGaWVsZHMuaGFzKGspKSB0aGlzLnN0YWxlQmFzZUZpZWxkcy5zZXQoaywgdik7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0Q29sdW1uKGNvbHVtbjogc3RyaW5nKTogUHJvbWlzZTx7IGtleTogc3RyaW5nOyB2YWx1ZTogdW5rbm93bjsgdGltZTogbnVtYmVyIH1bXT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWFkZXIuZ2V0Q29sdW1uKGNvbHVtbik7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0U2luZ2xlRmllbGQoa2V5OiBzdHJpbmcsIGNvbHVtbjogc3RyaW5nKTogUHJvbWlzZTx7IHZhbHVlOiB1bmtub3duOyB0aW1lOiBudW1iZXIgfSB8IHVuZGVmaW5lZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWFkZXIuZ2V0U2luZ2xlRmllbGQoa2V5LCBjb2x1bW4pO1xuICAgIH1cblxuICAgIGVuc3VyZUJhc2VDb2x1bW4oY29sdW1uOiBzdHJpbmcsIG9uTG9hZGVkOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmJhc2VDb2x1bW5zLmhhcyhjb2x1bW4pIHx8IHRoaXMuYmFzZUNvbHVtbnNMb2FkaW5nLmhhcyhjb2x1bW4pKSByZXR1cm47XG4gICAgICAgIHRoaXMuYmFzZUNvbHVtbnNMb2FkaW5nLmFkZChjb2x1bW4pO1xuICAgICAgICB2b2lkIChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gYXdhaXQgdGhpcy5yZWFkZXIuZ2V0Q29sdW1uKGNvbHVtbik7XG4gICAgICAgICAgICAgICAgdGhpcy5iYXNlQ29sdW1ucy5zZXQoY29sdW1uLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGFsZUJhc2VDb2x1bW5zLmRlbGV0ZShjb2x1bW4pO1xuICAgICAgICAgICAgICAgIHRoaXMuYmFzZUNvbHVtbnNMb2FkaW5nLmRlbGV0ZShjb2x1bW4pO1xuICAgICAgICAgICAgICAgIG9uTG9hZGVkKCk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5iYXNlQ29sdW1uc0xvYWRpbmcuZGVsZXRlKGNvbHVtbik7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGAke3RoaXMubmFtZX0uZ2V0Q29sdW1uU3luYygke0pTT04uc3RyaW5naWZ5KGNvbHVtbil9KSBsb2FkIGZhaWxlZCwgd2lsbCByZXRyeTogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkoKTtcbiAgICB9XG5cbiAgICBlbnN1cmVCYXNlRmllbGQoa2V5OiBzdHJpbmcsIGNvbHVtbjogc3RyaW5nLCBvbkxvYWRlZDogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICBjb25zdCBjayA9IG51bGxKb2luKGNvbHVtbiwga2V5KTtcbiAgICAgICAgaWYgKHRoaXMuYmFzZUZpZWxkcy5oYXMoY2spIHx8IHRoaXMuYmFzZUZpZWxkc0xvYWRpbmcuaGFzKGNrKSkgcmV0dXJuO1xuICAgICAgICB0aGlzLmJhc2VGaWVsZHNMb2FkaW5nLmFkZChjayk7XG4gICAgICAgIHZvaWQgKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBhd2FpdCB0aGlzLnJlYWRlci5nZXRTaW5nbGVGaWVsZChrZXksIGNvbHVtbik7XG4gICAgICAgICAgICAgICAgdGhpcy5iYXNlRmllbGRzLnNldChjaywgdmFsdWUpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhbGVCYXNlRmllbGRzLmRlbGV0ZShjayk7XG4gICAgICAgICAgICAgICAgdGhpcy5iYXNlRmllbGRzTG9hZGluZy5kZWxldGUoY2spO1xuICAgICAgICAgICAgICAgIG9uTG9hZGVkKCk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5iYXNlRmllbGRzTG9hZGluZy5kZWxldGUoY2spO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihgJHt0aGlzLm5hbWV9LmdldFNpbmdsZUZpZWxkU3luYygke0pTT04uc3RyaW5naWZ5KGtleSl9LCAke0pTT04uc3RyaW5naWZ5KGNvbHVtbil9KSBsb2FkIGZhaWxlZCwgd2lsbCByZXRyeTogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkoKTtcbiAgICB9XG5cbiAgICAvLyBSZXR1cm5zIHRoZSBsb2FkZWQgdmFsdWUgKGZyZXNoIGlmIGF2YWlsYWJsZSwgZWxzZSBsYXN0LWtub3duIHN0YWxlKSBmb3IgdGhlIGNvbHVtbiwgb3IgdW5kZWZpbmVkXG4gICAgLy8gaWYgbmVpdGhlciBpcyBwcmVzZW50IHlldC4gVGhlIGJvb2xlYW4gaW5kaWNhdGVzIHdoZXRoZXIgdGhlIHJldHVybmVkIHZhbHVlIGlzIGZyZXNoOyBjYWxsZXJzIG1heVxuICAgIC8vIHNraXAgY2FjaGluZyBhIHN0YWxlIHZhbHVlLlxuICAgIGdldEJhc2VDb2x1bW4oY29sdW1uOiBzdHJpbmcpOiB7IGVudHJpZXM6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiB1bmtub3duOyB0aW1lOiBudW1iZXIgfVtdOyBmcmVzaDogYm9vbGVhbiB9IHwgdW5kZWZpbmVkIHtcbiAgICAgICAgY29uc3QgZnJlc2ggPSB0aGlzLmJhc2VDb2x1bW5zLmdldChjb2x1bW4pO1xuICAgICAgICBpZiAoZnJlc2gpIHJldHVybiB7IGVudHJpZXM6IGZyZXNoLCBmcmVzaDogdHJ1ZSB9O1xuICAgICAgICBjb25zdCBzdGFsZSA9IHRoaXMuc3RhbGVCYXNlQ29sdW1ucy5nZXQoY29sdW1uKTtcbiAgICAgICAgaWYgKHN0YWxlKSByZXR1cm4geyBlbnRyaWVzOiBzdGFsZSwgZnJlc2g6IGZhbHNlIH07XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgZ2V0QmFzZUZpZWxkKGtleTogc3RyaW5nLCBjb2x1bW46IHN0cmluZyk6IHsgdmFsdWU6IHsgdmFsdWU6IHVua25vd247IHRpbWU6IG51bWJlciB9IHwgdW5kZWZpbmVkOyBmcmVzaDogYm9vbGVhbjsgbG9hZGVkOiBib29sZWFuIH0ge1xuICAgICAgICBjb25zdCBjayA9IG51bGxKb2luKGNvbHVtbiwga2V5KTtcbiAgICAgICAgaWYgKHRoaXMuYmFzZUZpZWxkcy5oYXMoY2spKSByZXR1cm4geyB2YWx1ZTogdGhpcy5iYXNlRmllbGRzLmdldChjayksIGZyZXNoOiB0cnVlLCBsb2FkZWQ6IHRydWUgfTtcbiAgICAgICAgaWYgKHRoaXMuc3RhbGVCYXNlRmllbGRzLmhhcyhjaykpIHJldHVybiB7IHZhbHVlOiB0aGlzLnN0YWxlQmFzZUZpZWxkcy5nZXQoY2spLCBmcmVzaDogZmFsc2UsIGxvYWRlZDogdHJ1ZSB9O1xuICAgICAgICByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBmcmVzaDogZmFsc2UsIGxvYWRlZDogZmFsc2UgfTtcbiAgICB9XG5cbiAgICBpc0Jhc2VDb2x1bW5Mb2FkZWQoY29sdW1uOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZUNvbHVtbnMuaGFzKGNvbHVtbikgfHwgdGhpcy5zdGFsZUJhc2VDb2x1bW5zLmhhcyhjb2x1bW4pO1xuICAgIH1cblxuICAgIGlzQmFzZUZpZWxkTG9hZGVkKGtleTogc3RyaW5nLCBjb2x1bW46IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBjayA9IG51bGxKb2luKGNvbHVtbiwga2V5KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZUZpZWxkcy5oYXMoY2spIHx8IHRoaXMuc3RhbGVCYXNlRmllbGRzLmhhcyhjayk7XG4gICAgfVxuXG4gICAgLy8gRHJvcHMgaW4tbWVtb3J5IGxvYWRlZCB2YWx1ZXMgZm9yIHRoaXMgaW5kZXgsIHNvIGEgc3Vic2VxdWVudCByZWFkIHJlbG9hZHMgZnJlc2ggZnJvbSBkaXNrLiBVc2VkXG4gICAgLy8gYnkgcmVsb2FkRnJvbURpc2soKSDigJQgYSBoYXJkIHJlc2V0LCBubyBzdGFsZSBmYWxsYmFjayBzdXJ2aXZlcy5cbiAgICBkcm9wTG9hZGVkVmFsdWVzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmJhc2VDb2x1bW5zLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuYmFzZUNvbHVtbnNMb2FkaW5nLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuYmFzZUZpZWxkcy5jbGVhcigpO1xuICAgICAgICB0aGlzLmJhc2VGaWVsZHNMb2FkaW5nLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuc3RhbGVCYXNlQ29sdW1ucy5jbGVhcigpO1xuICAgICAgICB0aGlzLnN0YWxlQmFzZUZpZWxkcy5jbGVhcigpO1xuICAgIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1ha2VSYXdHZXRSYW5nZShzdG9yYWdlOiBGaWxlU3RvcmFnZSwgZmlsZU5hbWU6IHN0cmluZyk6IFByb21pc2U8eyByYXdHZXRSYW5nZTogR2V0UmFuZ2U7IHNpemU6IG51bWJlciB9PiB7XG4gICAgY29uc3QgaW5mbyA9IGF3YWl0IHN0b3JhZ2UuZ2V0SW5mbyhmaWxlTmFtZSk7XG4gICAgaWYgKCFpbmZvKSB0aHJvdyBuZXcgTWlzc2luZ0ZpbGVFcnJvcihgYnVsayBmaWxlICR7ZmlsZU5hbWV9IGlzIG1pc3NpbmdgKTtcbiAgICBjb25zdCByYXdHZXRSYW5nZTogR2V0UmFuZ2UgPSBhc3luYyAoc3RhcnQsIGVuZCkgPT4ge1xuICAgICAgICBpZiAoZW5kIDw9IHN0YXJ0KSByZXR1cm4gRU1QVFlfQlVGRkVSO1xuICAgICAgICBjb25zdCBidWYgPSBhd2FpdCBzdG9yYWdlLmdldFJhbmdlKGZpbGVOYW1lLCB7IHN0YXJ0LCBlbmQgfSk7XG4gICAgICAgIGlmICghYnVmKSB0aHJvdyBuZXcgTWlzc2luZ0ZpbGVFcnJvcihgcmFuZ2UgWyR7c3RhcnR9LCAke2VuZH0pIG9mICR7ZmlsZU5hbWV9IGlzIG1pc3NpbmdgKTtcbiAgICAgICAgcmV0dXJuIGJ1ZjtcbiAgICB9O1xuICAgIHJldHVybiB7IHJhd0dldFJhbmdlLCBzaXplOiBpbmZvLnNpemUgfTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRGaWxlUmVhZGVyKG5hbWU6IHN0cmluZywgc3RvcmFnZTogRmlsZVN0b3JhZ2UsIGY6IEJ1bGtGaWxlSW5mbywgY2FjaGU6IE1hcDxzdHJpbmcsIEJhc2VCdWxrRGF0YWJhc2VSZWFkZXI+KTogUHJvbWlzZTxCYXNlQnVsa0RhdGFiYXNlUmVhZGVyPiB7XG4gICAgY29uc3QgY2FjaGVkID0gY2FjaGUuZ2V0KGYuZmlsZU5hbWUpO1xuICAgIGlmIChjYWNoZWQpIHJldHVybiBjYWNoZWQ7XG4gICAgY29uc3QgcmF3ID0gYXdhaXQgbWFrZVJhd0dldFJhbmdlKHN0b3JhZ2UsIGYuZmlsZU5hbWUpO1xuICAgIGNvbnN0IGZpbGVJZCA9IG51bGxKb2luKG5hbWUsIGYuZmlsZU5hbWUpO1xuICAgIGNvbnN0IG9wZW5lZCA9IGF3YWl0IGJsb2NrQ2FjaGUub3BlbihmaWxlSWQsIHJhdy5zaXplLCByYXcucmF3R2V0UmFuZ2UpO1xuICAgIGNvbnN0IHJlYWRlciA9IGF3YWl0IGxvYWRCdWxrRGF0YWJhc2UoeyB0b3RhbEJ5dGVzOiBvcGVuZWQudW5jb21wcmVzc2VkU2l6ZSwgZ2V0UmFuZ2U6IG9wZW5lZC5nZXRSYW5nZSwgbmFtZTogYCR7QlVMS19ST09UX0ZPTERFUn0vJHtuYW1lfS8ke2YuZmlsZU5hbWV9YCB9KTtcbiAgICBjYWNoZS5zZXQoZi5maWxlTmFtZSwgcmVhZGVyKTtcbiAgICByZXR1cm4gcmVhZGVyO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZFN0cmVhbUVudHJpZXMoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHN0b3JhZ2U6IEZpbGVTdG9yYWdlLFxuICAgIHN0cmVhbUZpbGVzOiBTdHJlYW1GaWxlSW5mb1tdLFxuICAgIGNhY2hlOiBNYXA8c3RyaW5nLCBTdHJlYW1SZWFkZXJDYWNoZUVudHJ5Pixcbik6IFByb21pc2U8eyBlbnRyaWVzOiB7IHRpbWU6IG51bWJlcjsgZmlsZU5hbWU6IHN0cmluZzsgZW50cnk6IFN0cmVhbUVudHJ5IH1bXTsgdG90YWxCeXRlczogbnVtYmVyOyBtaXNzaW5nOiBib29sZWFuOyBzaXplczogTWFwPHN0cmluZywgbnVtYmVyPiB9PiB7XG4gICAgY29uc3Qgc2l6ZXMgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuICAgIGlmICghc3RyZWFtRmlsZXMubGVuZ3RoKSByZXR1cm4geyBlbnRyaWVzOiBbXSwgdG90YWxCeXRlczogMCwgbWlzc2luZzogZmFsc2UsIHNpemVzIH07XG4gICAgbGV0IG1pc3NpbmcgPSBmYWxzZTtcbiAgICBjb25zdCBwZXJGaWxlID0gYXdhaXQgUHJvbWlzZS5hbGwoc3RyZWFtRmlsZXMubWFwKGFzeW5jIChmKTogUHJvbWlzZTx7IGZpbGVOYW1lOiBzdHJpbmc7IHNpemU6IG51bWJlcjsgZW50cmllczogU3RyZWFtRW50cnlbXSB9IHwgdW5kZWZpbmVkPiA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBpbmZvID0gYXdhaXQgc3RvcmFnZS5nZXRJbmZvKGYuZmlsZU5hbWUpO1xuICAgICAgICAgICAgaWYgKCFpbmZvKSB7IG1pc3NpbmcgPSB0cnVlOyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gICAgICAgICAgICBjb25zdCBzaXplID0gaW5mby5zaXplO1xuICAgICAgICAgICAgc2l6ZXMuc2V0KGYuZmlsZU5hbWUsIHNpemUpO1xuICAgICAgICAgICAgY29uc3QgY2FjaGVkID0gY2FjaGUuZ2V0KGYuZmlsZU5hbWUpO1xuICAgICAgICAgICAgaWYgKGNhY2hlZCAmJiBjYWNoZWQucmVhZFNpemUgPT09IHNpemUpIHJldHVybiB7IGZpbGVOYW1lOiBmLmZpbGVOYW1lLCBzaXplLCBlbnRyaWVzOiBjYWNoZWQuZW50cmllcyB9O1xuICAgICAgICAgICAgaWYgKHNpemUgPT09IDApIHsgY2FjaGUuc2V0KGYuZmlsZU5hbWUsIHsgcmVhZFNpemU6IDAsIHBhcnNlZFBvczogMCwgZW50cmllczogW10gfSk7IHJldHVybiB7IGZpbGVOYW1lOiBmLmZpbGVOYW1lLCBzaXplOiAwLCBlbnRyaWVzOiBbXSB9OyB9XG4gICAgICAgICAgICAvLyBBcHBlbmQtb25seTogYSBsYXJnZXIgc2l6ZSBtZWFucyBuZXcgYnl0ZXMgYXQgdGhlIHRhaWwsIHBhcnNlIG9ubHkgdGhvc2UuXG4gICAgICAgICAgICBpZiAoY2FjaGVkICYmIHNpemUgPiBjYWNoZWQucmVhZFNpemUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdWZmaXggPSBhd2FpdCBzdG9yYWdlLmdldFJhbmdlKGYuZmlsZU5hbWUsIHsgc3RhcnQ6IGNhY2hlZC5wYXJzZWRQb3MsIGVuZDogc2l6ZSB9KTtcbiAgICAgICAgICAgICAgICBpZiAoIXN1ZmZpeCkgeyBtaXNzaW5nID0gdHJ1ZTsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlU3RyZWFtKHN1ZmZpeCk7XG4gICAgICAgICAgICAgICAgaWYgKHBhcnNlZC5iYWRCeXRlcyA+IDApIGNvbnNvbGUud2FybihgJHtuYW1lfSBzdHJlYW0gZmlsZSAke2YuZmlsZU5hbWV9IGhhZCAke3BhcnNlZC5iYWRCeXRlc30gdHJhaWxpbmcgYmFkL2luY29tcGxldGUgYnl0ZXMgKHN0b3BwZWQgcmVhZGluZyB0aGVyZSlgKTtcbiAgICAgICAgICAgICAgICBjb25zdCBlbnRyaWVzID0gcGFyc2VkLmVudHJpZXMubGVuZ3RoID8gY2FjaGVkLmVudHJpZXMuY29uY2F0KHBhcnNlZC5lbnRyaWVzKSA6IGNhY2hlZC5lbnRyaWVzO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlZFBvcyA9IGNhY2hlZC5wYXJzZWRQb3MgKyAoc3VmZml4Lmxlbmd0aCAtIHBhcnNlZC5iYWRCeXRlcyk7XG4gICAgICAgICAgICAgICAgY2FjaGUuc2V0KGYuZmlsZU5hbWUsIHsgcmVhZFNpemU6IHNpemUsIHBhcnNlZFBvcywgZW50cmllcyB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBmaWxlTmFtZTogZi5maWxlTmFtZSwgc2l6ZSwgZW50cmllcyB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYnVmZmVyID0gYXdhaXQgc3RvcmFnZS5nZXRSYW5nZShmLmZpbGVOYW1lLCB7IHN0YXJ0OiAwLCBlbmQ6IHNpemUgfSk7XG4gICAgICAgICAgICBpZiAoIWJ1ZmZlcikgeyBtaXNzaW5nID0gdHJ1ZTsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VTdHJlYW0oYnVmZmVyKTtcbiAgICAgICAgICAgIGlmIChwYXJzZWQuYmFkQnl0ZXMgPiAwKSBjb25zb2xlLndhcm4oYCR7bmFtZX0gc3RyZWFtIGZpbGUgJHtmLmZpbGVOYW1lfSBoYWQgJHtwYXJzZWQuYmFkQnl0ZXN9IHRyYWlsaW5nIGJhZC9pbmNvbXBsZXRlIGJ5dGVzIChzdG9wcGVkIHJlYWRpbmcgdGhlcmUpYCk7XG4gICAgICAgICAgICBjYWNoZS5zZXQoZi5maWxlTmFtZSwgeyByZWFkU2l6ZTogc2l6ZSwgcGFyc2VkUG9zOiBzaXplIC0gcGFyc2VkLmJhZEJ5dGVzLCBlbnRyaWVzOiBwYXJzZWQuZW50cmllcyB9KTtcbiAgICAgICAgICAgIHJldHVybiB7IGZpbGVOYW1lOiBmLmZpbGVOYW1lLCBzaXplLCBlbnRyaWVzOiBwYXJzZWQuZW50cmllcyB9O1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIG1pc3NpbmcgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH0pKTtcbiAgICBjb25zdCBlbnRyaWVzOiB7IHRpbWU6IG51bWJlcjsgZmlsZU5hbWU6IHN0cmluZzsgZW50cnk6IFN0cmVhbUVudHJ5IH1bXSA9IFtdO1xuICAgIGxldCB0b3RhbEJ5dGVzID0gMDtcbiAgICBmb3IgKGNvbnN0IHBmIG9mIHBlckZpbGUpIHtcbiAgICAgICAgaWYgKCFwZikgY29udGludWU7XG4gICAgICAgIHRvdGFsQnl0ZXMgKz0gcGYuc2l6ZTtcbiAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBwZi5lbnRyaWVzKSBlbnRyaWVzLnB1c2goeyB0aW1lOiBlbnRyeS50aW1lLCBmaWxlTmFtZTogcGYuZmlsZU5hbWUsIGVudHJ5IH0pO1xuICAgIH1cbiAgICByZXR1cm4geyBlbnRyaWVzLCB0b3RhbEJ5dGVzLCBtaXNzaW5nLCBzaXplcyB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb3JkZXJTdHJlYW1FbnRyaWVzKGVudHJpZXM6IHsgdGltZTogbnVtYmVyOyBmaWxlTmFtZTogc3RyaW5nOyBlbnRyeTogU3RyZWFtRW50cnkgfVtdKTogU3RyZWFtRW50cnlbXSB7XG4gICAgZW50cmllcy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgIGlmIChhLnRpbWUgIT09IGIudGltZSkgcmV0dXJuIGEudGltZSAtIGIudGltZTtcbiAgICAgICAgcmV0dXJuIGEuZmlsZU5hbWUgPCBiLmZpbGVOYW1lICYmIC0xIHx8IGEuZmlsZU5hbWUgPiBiLmZpbGVOYW1lICYmIDEgfHwgMDtcbiAgICB9KTtcbiAgICByZXR1cm4gZW50cmllcy5tYXAoZSA9PiBlLmVudHJ5KTtcbn1cblxuZnVuY3Rpb24gcHJ1bmVTdWJDYWNoZXMoYnVsa0ZpbGVzOiBCdWxrRmlsZUluZm9bXSwgc3RyZWFtRmlsZXM6IFN0cmVhbUZpbGVJbmZvW10sIHN1YkNhY2hlczogU3ViUmVhZGVyQ2FjaGVzKSB7XG4gICAgY29uc3QgbGl2ZUJ1bGsgPSBuZXcgU2V0KGJ1bGtGaWxlcy5tYXAoZiA9PiBmLmZpbGVOYW1lKSk7XG4gICAgY29uc3QgbGl2ZVN0cmVhbSA9IG5ldyBTZXQoc3RyZWFtRmlsZXMubWFwKGYgPT4gZi5maWxlTmFtZSkpO1xuICAgIGZvciAoY29uc3QgbiBvZiBzdWJDYWNoZXMuYnVsay5rZXlzKCkpIGlmICghbGl2ZUJ1bGsuaGFzKG4pKSBzdWJDYWNoZXMuYnVsay5kZWxldGUobik7XG4gICAgZm9yIChjb25zdCBuIG9mIHN1YkNhY2hlcy5zdHJlYW0ua2V5cygpKSBpZiAoIWxpdmVTdHJlYW0uaGFzKG4pKSBzdWJDYWNoZXMuc3RyZWFtLmRlbGV0ZShuKTtcbn1cblxuLy8gQSBjb3JydXB0L3VucmVhZGFibGUgY29sdW1uIGluIE9ORSB1bmRlcmx5aW5nIGZpbGUgbXVzdCBub3QgYnJlYWsgdGhlIHdob2xlIGpvaW5lZCByZWFkLiBXaGVuIGFcbi8vIHNvdXJjZSdzIGNvbHVtbiByZWFkIHRocm93cywgd2UgZHJvcCB0aGF0IHNvdXJjZSBmb3IgdGhhdCBjb2x1bW4gKGZhbGxpbmcgdGhyb3VnaCB0byBvbGRlciByZWFkZXJzLFxuLy8gZXhhY3RseSBhcyBpZiB0aGUgZmlsZSBuZXZlciBzZXQgdGhlIGNvbHVtbikgYW5kIHdhcm4gb25jZSBwZXIgKGZpbGUsIGNvbHVtbikgc28gdGhlIGNvcnJ1cHRpb24gaXNcbi8vIHZpc2libGUgd2l0aG91dCBmbG9vZGluZyB0aGUgbG9nIG9uIGV2ZXJ5IHJlYnVpbGQuXG5jb25zdCB3YXJuZWRDb3JydXB0UmVhZHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbmZ1bmN0aW9uIHdhcm5Db3JydXB0UmVhZChkYjogQmFzZUJ1bGtEYXRhYmFzZVJlYWRlciwgY29sdW1uOiBzdHJpbmcsIGU6IHVua25vd24pOiB2b2lkIHtcbiAgICBjb25zdCBwYXRoID0gZGIubmFtZSB8fCBcIih1bmtub3duIHNvdXJjZSlcIjtcbiAgICBjb25zdCBkZWR1cGVLZXkgPSBudWxsSm9pbihwYXRoLCBjb2x1bW4pO1xuICAgIGlmICh3YXJuZWRDb3JydXB0UmVhZHMuaGFzKGRlZHVwZUtleSkpIHJldHVybjtcbiAgICB3YXJuZWRDb3JydXB0UmVhZHMuYWRkKGRlZHVwZUtleSk7XG4gICAgY29uc29sZS53YXJuKGAke3JlZChcImNvcnJ1cHQgcmVhZFwiKX06IGZpbGUgJHtwYXRofSBjb2x1bW4gJHtKU09OLnN0cmluZ2lmeShjb2x1bW4pfSBjb3VsZCBub3QgYmUgcmVhZCAtIHNraXBwaW5nIGl0IChpdHMgZGF0YSBpcyBkcm9wcGVkIGZyb20gcmVzdWx0cyk6ICR7KGUgYXMgRXJyb3IpLm1lc3NhZ2V9YCk7XG59XG5cbmZ1bmN0aW9uIGpvaW5CdWxrRGF0YWJhc2VzKGRhdGFiYXNlczogQmFzZUJ1bGtEYXRhYmFzZVJlYWRlcltdKTogUmVzb2x2ZWRSZWFkZXIge1xuICAgIGNvbnN0IGRlbGV0ZVRpbWUgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuICAgIGZvciAoY29uc3QgZGIgb2YgZGF0YWJhc2VzKSB7XG4gICAgICAgIGlmICghZGIuZGVsZXRlVGltZXMpIGNvbnRpbnVlO1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHRdIG9mIGRiLmRlbGV0ZVRpbWVzKSBkZWxldGVUaW1lLnNldChrZXksIE1hdGgubWF4KGRlbGV0ZVRpbWUuZ2V0KGtleSkgPz8gLUluZmluaXR5LCB0KSk7XG4gICAgfVxuICAgIGNvbnN0IGtleVRpbWUgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuICAgIGZvciAoY29uc3QgZGIgb2YgZGF0YWJhc2VzKSB7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdF0gb2YgZGIua2V5VGltZXMpIGtleVRpbWUuc2V0KGtleSwgTWF0aC5tYXgoa2V5VGltZS5nZXQoa2V5KSA/PyAtSW5maW5pdHksIHQpKTtcbiAgICB9XG4gICAgY29uc3QgZGVsT2YgPSAoa2V5OiBzdHJpbmcpID0+IGRlbGV0ZVRpbWUuZ2V0KGtleSkgPz8gLUluZmluaXR5O1xuICAgIGNvbnN0IGtleXM6IHN0cmluZ1tdID0gW107XG4gICAgZm9yIChjb25zdCBba2V5LCB0XSBvZiBrZXlUaW1lKSBpZiAodCA+IGRlbE9mKGtleSkpIGtleXMucHVzaChrZXkpO1xuXG4gICAgY29uc3QgY29sdW1uczogeyBjb2x1bW46IHN0cmluZzsgYnl0ZVNpemU6IG51bWJlciB9W10gPSBbXTtcbiAgICBjb25zdCBjb2x1bW5CeU5hbWUgPSBuZXcgTWFwPHN0cmluZywgeyBjb2x1bW46IHN0cmluZzsgYnl0ZVNpemU6IG51bWJlciB9PigpO1xuICAgIGZvciAoY29uc3QgZGIgb2YgZGF0YWJhc2VzKSB7XG4gICAgICAgIGZvciAoY29uc3QgY29sIG9mIGRiLmNvbHVtbnMpIHtcbiAgICAgICAgICAgIGxldCBleGlzdGluZyA9IGNvbHVtbkJ5TmFtZS5nZXQoY29sLmNvbHVtbik7XG4gICAgICAgICAgICBpZiAoIWV4aXN0aW5nKSB7XG4gICAgICAgICAgICAgICAgZXhpc3RpbmcgPSB7IGNvbHVtbjogY29sLmNvbHVtbiwgYnl0ZVNpemU6IDAgfTtcbiAgICAgICAgICAgICAgICBjb2x1bW5CeU5hbWUuc2V0KGNvbC5jb2x1bW4sIGV4aXN0aW5nKTtcbiAgICAgICAgICAgICAgICBjb2x1bW5zLnB1c2goZXhpc3RpbmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZXhpc3RpbmcuYnl0ZVNpemUgKz0gY29sLmJ5dGVTaXplO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgdG90YWxCeXRlczogZGF0YWJhc2VzLnJlZHVjZSgoYWNjLCBkYikgPT4gYWNjICsgZGIudG90YWxCeXRlcywgMCksXG4gICAgICAgIHJvd0NvdW50OiBrZXlzLmxlbmd0aCxcbiAgICAgICAga2V5cyxcbiAgICAgICAgcmF3S2V5Q291bnQ6IGRhdGFiYXNlcy5yZWR1Y2UoKGFjYywgZGIpID0+IGFjYyArIGRiLmtleVRpbWVzLnNpemUgKyAoZGIuZGVsZXRlVGltZXM/LnNpemUgPz8gMCksIDApLFxuICAgICAgICByZWFkZXJDb3VudDogZGF0YWJhc2VzLmxlbmd0aCxcbiAgICAgICAgY29sdW1ucyxcbiAgICAgICAga2V5VGltZXM6IGtleVRpbWUsXG4gICAgICAgIGRlbGV0ZVRpbWVzOiBkZWxldGVUaW1lLFxuICAgICAgICBhc3luYyBnZXRDb2x1bW4oY29sdW1uKSB7XG4gICAgICAgICAgICBjb25zdCBwZXJSZWFkZXIgPSBhd2FpdCBQcm9taXNlLmFsbChkYXRhYmFzZXMubWFwKGFzeW5jIGRiID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWRiLmNvbHVtbnMuc29tZShjID0+IGMuY29sdW1uID09PSBjb2x1bW4pKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVudHJpZXMgPSBhd2FpdCBkYi5nZXRDb2x1bW4oY29sdW1uKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBNYXAoZW50cmllcy5tYXAoZSA9PiBbZS5rZXksIHsgdmFsdWU6IGUudmFsdWUsIHRpbWU6IGUudGltZSB9XSkpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgd2FybkNvcnJ1cHRSZWFkKGRiLCBjb2x1bW4sIGUpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIHJldHVybiBrZXlzLm1hcChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBiZXN0VGltZSA9IC1JbmZpbml0eTtcbiAgICAgICAgICAgICAgICBsZXQgYmVzdFZhbDogdW5rbm93bjtcbiAgICAgICAgICAgICAgICBsZXQgZm91bmQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG0gb2YgcGVyUmVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNlbGwgPSBtICYmIG0uZ2V0KGtleSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghY2VsbCB8fCBjZWxsLnZhbHVlID09PSBBQlNFTlQpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2VsbC50aW1lID4gYmVzdFRpbWUpIHsgYmVzdFRpbWUgPSBjZWxsLnRpbWU7IGJlc3RWYWwgPSBjZWxsLnZhbHVlOyBmb3VuZCA9IHRydWU7IH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgbGl2ZSA9IGZvdW5kICYmIGJlc3RUaW1lID4gZGVsT2Yoa2V5KTtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBrZXksIHZhbHVlOiBsaXZlID8gYmVzdFZhbCA6IHVuZGVmaW5lZCwgdGltZTogbGl2ZSA/IGJlc3RUaW1lIDogKGtleVRpbWUuZ2V0KGtleSkgPz8gMCkgfTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBhc3luYyBnZXRTaW5nbGVGaWVsZChrZXksIGNvbHVtbikge1xuICAgICAgICAgICAgY29uc3Qga3QgPSBrZXlUaW1lLmdldChrZXkpO1xuICAgICAgICAgICAgaWYgKGt0ID09PSB1bmRlZmluZWQgfHwga3QgPD0gZGVsT2Yoa2V5KSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGxldCBiZXN0VGltZSA9IC1JbmZpbml0eTtcbiAgICAgICAgICAgIGxldCBiZXN0VmFsOiB1bmtub3duO1xuICAgICAgICAgICAgbGV0IGZvdW5kID0gZmFsc2U7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGRiIG9mIGRhdGFiYXNlcykge1xuICAgICAgICAgICAgICAgIGlmICghZGIuY29sdW1ucy5zb21lKGMgPT4gYy5jb2x1bW4gPT09IGNvbHVtbikpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGxldCByO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHIgPSBhd2FpdCBkYi5nZXRTaW5nbGVGaWVsZChrZXksIGNvbHVtbik7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICB3YXJuQ29ycnVwdFJlYWQoZGIsIGNvbHVtbiwgZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAociA9PT0gQUJTRU5UKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBpZiAoci50aW1lID4gYmVzdFRpbWUpIHsgYmVzdFRpbWUgPSByLnRpbWU7IGJlc3RWYWwgPSByLnZhbHVlOyBmb3VuZCA9IHRydWU7IH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGxpdmUgPSBmb3VuZCAmJiBiZXN0VGltZSA+IGRlbE9mKGtleSk7XG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbGl2ZSA/IGJlc3RWYWwgOiB1bmRlZmluZWQsIHRpbWU6IGxpdmUgPyBiZXN0VGltZSA6IGt0IH07XG4gICAgICAgIH0sXG4gICAgfTtcbn1cbiJdfQ==
435
- /* _JS_SOURCE_HASH = "08d023e467f7929194485c2e9e317afa50d1a1153cc906e80e96e8dce7814579"; */
435
+ /* _JS_SOURCE_HASH = "c52d1b6b1e43defcb89f73dc39fd15811b36582e587100e4afac945c4b3f8d6a"; */
@@ -1,4 +1,4 @@
1
- "use strict";
1
+ "use strict"; var console = (function shimConsole() { let baseConsole = globalThis.console; if (typeof window !== "undefined") return baseConsole; let name = __filename.replaceAll("\\", "/").split("/").pop(); let dirName = __dirname.replaceAll("\\", "/").split("/").pop(); let context = { __FILE__: __filename, __DIR__: __dirname, __NAME__: name, __DIRNAME__: dirName }; let newConsole = { ...baseConsole }; for (let shim of ["log", "info", "warn", "error"]) { newConsole[shim] = (...args) => { args.push(context); baseConsole[shim](...args); }; } newConsole.__context = context; return newConsole; })(); "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true , configurable: true});
3
3
  //exports.WriteOverlay = exports.DELETED = void 0;
4
4
  exports.DELETED = Symbol("deleted");
@@ -55,4 +55,4 @@ class WriteOverlay {
55
55
  }
56
56
  exports.WriteOverlay = WriteOverlay;
57
57
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiV3JpdGVPdmVybGF5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiV3JpdGVPdmVybGF5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFhLFFBQUEsT0FBTyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUl6QyxxR0FBcUc7QUFDckcsaUdBQWlHO0FBQ2pHLHFHQUFxRztBQUNyRyx1RUFBdUU7QUFDdkUsTUFBYSxZQUFZO0lBQXpCO1FBQ1ksWUFBTyxHQUFHLElBQUksR0FBRyxFQUF3QixDQUFDO0lBMEN0RCxDQUFDO0lBeENHLElBQUksSUFBSSxLQUFhLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2hELEdBQUcsQ0FBQyxHQUFXLElBQThCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVFLEdBQUcsQ0FBQyxHQUFXLElBQWEsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0QsSUFBSSxLQUErQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2hFLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFL0QsUUFBUSxDQUFDLEdBQVcsRUFBRSxHQUE0QixFQUFFLElBQVksRUFBRSxPQUFnQjtRQUM5RSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN2QyxNQUFNLEtBQUssR0FBRyxRQUFRLElBQUksUUFBUSxDQUFDLEtBQUssS0FBSyxlQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxRQUFRLENBQUMsS0FBSyxF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Q0Qsb0NBMkNDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IERFTEVURUQgPSBTeW1ib2woXCJkZWxldGVkXCIpO1xuXG5leHBvcnQgdHlwZSBPdmVybGF5RW50cnkgPSB7IHRpbWU6IG51bWJlcjsgdmFsdWU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdHlwZW9mIERFTEVURUQgfTtcblxuLy8gSW4tbWVtb3J5IHBlbmRpbmcgbXV0YXRpb25zIGxheWVyZWQgb24gdG9wIG9mIGEgTG9hZGVkSW5kZXguIEVhY2ggZW50cnkgY2FycmllcyB0aGUgd3JpdGUncyB1bmlxdWVcbi8vIHRpbWVzdGFtcCBzbyBjcm9zcy10YWIgd3JpdGVzIGNhbiBiZSBvcmRlcmVkICsgdGhlIHN3YXAgY2FuIGRyb3AgZW50cmllcyB0aGUgbmV3IGluZGV4IGFscmVhZHlcbi8vIGNvdmVycy4gTWV0aG9kcyB0aGF0IG11dGF0ZSByZXBvcnQgd2hpY2ggY29sdW1ucyBpbnZhbGlkYXRlIChcImFsbFwiIGlmIHRoZSBrZXkncyBsaXZlbmVzcyBmbGlwcGVkKSxcbi8vIHNvIHRoZSBob3N0IGNhbiBkcm9wIHRoZSByaWdodCBjYWNoZXMgd2l0aG91dCBzY2FubmluZyBldmVyeSBjb2x1bW4uXG5leHBvcnQgY2xhc3MgV3JpdGVPdmVybGF5IHtcbiAgICBwcml2YXRlIGVudHJpZXMgPSBuZXcgTWFwPHN0cmluZywgT3ZlcmxheUVudHJ5PigpO1xuXG4gICAgZ2V0IHNpemUoKTogbnVtYmVyIHsgcmV0dXJuIHRoaXMuZW50cmllcy5zaXplOyB9XG4gICAgZ2V0KGtleTogc3RyaW5nKTogT3ZlcmxheUVudHJ5IHwgdW5kZWZpbmVkIHsgcmV0dXJuIHRoaXMuZW50cmllcy5nZXQoa2V5KTsgfVxuICAgIGhhcyhrZXk6IHN0cmluZyk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5lbnRyaWVzLmhhcyhrZXkpOyB9XG4gICAga2V5cygpOiBJdGVyYWJsZUl0ZXJhdG9yPHN0cmluZz4geyByZXR1cm4gdGhpcy5lbnRyaWVzLmtleXMoKTsgfVxuICAgIFtTeW1ib2wuaXRlcmF0b3JdKCkgeyByZXR1cm4gdGhpcy5lbnRyaWVzW1N5bWJvbC5pdGVyYXRvcl0oKTsgfVxuXG4gICAgd3JpdGVSb3coa2V5OiBzdHJpbmcsIHJvdzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIHRpbWU6IG51bWJlciwgd2FzTGl2ZTogYm9vbGVhbik6IHsgaW52YWxpZGF0ZWRDb2x1bW5zOiBJdGVyYWJsZTxzdHJpbmc+IHwgXCJhbGxcIiB9IHtcbiAgICAgICAgY29uc3QgZXhpc3RpbmcgPSB0aGlzLmVudHJpZXMuZ2V0KGtleSk7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gZXhpc3RpbmcgJiYgZXhpc3RpbmcudmFsdWUgIT09IERFTEVURUQgPyB7IC4uLmV4aXN0aW5nLnZhbHVlLCAuLi5yb3cgfSA6IHsgLi4ucm93IH07XG4gICAgICAgIHRoaXMuZW50cmllcy5zZXQoa2V5LCB7IHRpbWUsIHZhbHVlIH0pO1xuICAgICAgICByZXR1cm4geyBpbnZhbGlkYXRlZENvbHVtbnM6IHdhc0xpdmUgPyBPYmplY3Qua2V5cyhyb3cpIDogXCJhbGxcIiB9O1xuICAgIH1cblxuICAgIGRlbGV0ZUtleShrZXk6IHN0cmluZywgdGltZTogbnVtYmVyLCB3YXNMaXZlOiBib29sZWFuKTogeyBpbnZhbGlkYXRlZENvbHVtbnM6IEl0ZXJhYmxlPHN0cmluZz4gfCBcImFsbFwiIH0ge1xuICAgICAgICB0aGlzLmVudHJpZXMuc2V0KGtleSwgeyB0aW1lLCB2YWx1ZTogREVMRVRFRCB9KTtcbiAgICAgICAgcmV0dXJuIHsgaW52YWxpZGF0ZWRDb2x1bW5zOiB3YXNMaXZlID8gXCJhbGxcIiA6IFtdIH07XG4gICAgfVxuXG4gICAgY2xlYXIoKTogdm9pZCB7IHRoaXMuZW50cmllcy5jbGVhcigpOyB9XG5cbiAgICAvLyBEcm9wIGVudHJpZXMgdGhlIG5ldyBpbmRleCBhbHJlYWR5IHJlZmxlY3RzIChpdHMga2V5VGltZSBvciBkZWxldGVUaW1lIOKJpSB0aGUgZW50cnkncyB0aW1lKS4gVGhlXG4gICAgLy8gcmVtYWluaW5nIGVudHJpZXMgYXJlIHdyaXRlcyB0aGUgaW5kZXggZG9lc24ndCB5ZXQgc2VlIOKAlCB0aGV5IGhhdmUgdG8ga2VlcCBzZXJ2aW5nIHJlYWRzLlxuICAgIHN3ZWVwQ292ZXJlZChhdXRob3JpdHk6IChrZXk6IHN0cmluZykgPT4gbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgZW50cnldIG9mIHRoaXMuZW50cmllcykge1xuICAgICAgICAgICAgaWYgKGVudHJ5LnRpbWUgPD0gYXV0aG9yaXR5KGtleSkpIHRoaXMuZW50cmllcy5kZWxldGUoa2V5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFwcGx5IHRoaXMgb3ZlcmxheSBvbnRvIHRoZSBiYXNlIGNvbHVtbiBlbnRyaWVzLiBBIGNvbHVtbi11bnNldCBvdmVybGF5IGVudHJ5IGxlYXZlcyB0aGUgYmFzZVxuICAgIC8vIHZhbHVlK3RpbWUgaW4gcGxhY2UgKGEgcGFydGlhbCB3cml0ZSBvbmx5IG92ZXJyaWRlcyB0aGUgY29sdW1ucyBpdCBzZXQpLlxuICAgIHBhdGNoQ29sdW1uKGJhc2U6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiB1bmtub3duOyB0aW1lOiBudW1iZXIgfVtdLCBjb2x1bW46IHN0cmluZyk6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiB1bmtub3duOyB0aW1lOiBudW1iZXIgfVtdIHtcbiAgICAgICAgaWYgKHRoaXMuZW50cmllcy5zaXplID09PSAwKSByZXR1cm4gYmFzZTtcbiAgICAgICAgY29uc3QgbWFwID0gbmV3IE1hcChiYXNlLm1hcChlID0+IFtlLmtleSwgeyB2YWx1ZTogZS52YWx1ZSwgdGltZTogZS50aW1lIH1dKSk7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgZW50cnldIG9mIHRoaXMuZW50cmllcykge1xuICAgICAgICAgICAgaWYgKGVudHJ5LnZhbHVlID09PSBERUxFVEVEKSB7IG1hcC5kZWxldGUoa2V5KTsgY29udGludWU7IH1cbiAgICAgICAgICAgIGlmIChjb2x1bW4gaW4gZW50cnkudmFsdWUpIG1hcC5zZXQoa2V5LCB7IHZhbHVlOiBlbnRyeS52YWx1ZVtjb2x1bW5dLCB0aW1lOiBlbnRyeS50aW1lIH0pO1xuICAgICAgICAgICAgZWxzZSBpZiAoIW1hcC5oYXMoa2V5KSkgbWFwLnNldChrZXksIHsgdmFsdWU6IHVuZGVmaW5lZCwgdGltZTogZW50cnkudGltZSB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gWy4uLm1hcF0ubWFwKChba2V5LCB2XSkgPT4gKHsga2V5LCB2YWx1ZTogdi52YWx1ZSwgdGltZTogdi50aW1lIH0pKTtcbiAgICB9XG59XG4iXX0=
58
- /* _JS_SOURCE_HASH = "209264a8708c7ad5dd2423a93289a7c044b6b8efb117a9e1ba74ae94fdf81902"; */
58
+ /* _JS_SOURCE_HASH = "27e31ba68502db8875862ba0da9673e9dcec9689a254680e9f1ef1cde01a1b2e"; */