function noop() { } const defaultDispose = noop; const _WeakRef = typeof WeakRef !== "undefined" ? WeakRef : function (value) { return { deref: () => value }; }; const _WeakMap = typeof WeakMap !== "undefined" ? WeakMap : Map; const _FinalizationRegistry = typeof FinalizationRegistry !== "undefined" ? FinalizationRegistry : function () { return { register: noop, unregister: noop, }; }; const finalizationBatchSize = 10024; export class WeakCache { constructor(max = Infinity, dispose = defaultDispose) { this.max = max; this.dispose = dispose; this.map = new _WeakMap(); this.newest = null; this.oldest = null; this.unfinalizedNodes = new Set(); this.finalizationScheduled = false; this.size = 0; this.finalize = () => { const iterator = this.unfinalizedNodes.values(); for (let i = 0; i < finalizationBatchSize; i++) { const node = iterator.next().value; if (!node) break; this.unfinalizedNodes.delete(node); const key = node.key; delete node.key; node.keyRef = new _WeakRef(key); this.registry.register(key, node, node); } if (this.unfinalizedNodes.size > 0) { queueMicrotask(this.finalize); } else { this.finalizationScheduled = false; } }; this.registry = new _FinalizationRegistry(this.deleteNode.bind(this)); } has(key) { return this.map.has(key); } get(key) { const node = this.getNode(key); return node && node.value; } getNode(key) { const node = this.map.get(key); if (node && node !== this.newest) { const { older, newer } = node; if (newer) { newer.older = older; } if (older) { older.newer = newer; } node.older = this.newest; node.older.newer = node; node.newer = null; this.newest = node; if (node === this.oldest) { this.oldest = newer; } } return node; } set(key, value) { let node = this.getNode(key); if (node) { return (node.value = value); } node = { key, value, newer: null, older: this.newest, }; if (this.newest) { this.newest.newer = node; } this.newest = node; this.oldest = this.oldest || node; this.scheduleFinalization(node); this.map.set(key, node); this.size++; return node.value; } clean() { while (this.oldest && this.size > this.max) { this.deleteNode(this.oldest); } } deleteNode(node) { if (node === this.newest) { this.newest = node.older; } if (node === this.oldest) { this.oldest = node.newer; } if (node.newer) { node.newer.older = node.older; } if (node.older) { node.older.newer = node.newer; } this.size--; const key = node.key || (node.keyRef && node.keyRef.deref()); this.dispose(node.value, key); if (!node.keyRef) { this.unfinalizedNodes.delete(node); } else { this.registry.unregister(node); } if (key) this.map.delete(key); } delete(key) { const node = this.map.get(key); if (node) { this.deleteNode(node); return true; } return false; } scheduleFinalization(node) { this.unfinalizedNodes.add(node); if (!this.finalizationScheduled) { this.finalizationScheduled = true; queueMicrotask(this.finalize); } } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2Vhay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy93ZWFrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQW9CQSxTQUFTLElBQUksS0FBSSxDQUFDO0FBQ2xCLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQztBQUU1QixNQUFNLFFBQVEsR0FDWixPQUFPLE9BQU8sS0FBSyxXQUFXO0lBQzVCLENBQUMsQ0FBQyxPQUFPO0lBQ1QsQ0FBQyxDQUFFLFVBQWEsS0FBUTtRQUNwQixPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLEtBQUssRUFHMUIsQ0FBQztJQUNKLENBQTJCLENBQUM7QUFDbEMsTUFBTSxRQUFRLEdBQUcsT0FBTyxPQUFPLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUNoRSxNQUFNLHFCQUFxQixHQUN6QixPQUFPLG9CQUFvQixLQUFLLFdBQVc7SUFDekMsQ0FBQyxDQUFDLG9CQUFvQjtJQUN0QixDQUFDLENBQUU7UUFDQyxPQUFPO1lBQ0wsUUFBUSxFQUFFLElBQUk7WUFDZCxVQUFVLEVBQUUsSUFBSTtTQUNrRCxDQUFDO0lBQ3ZFLENBQXdDLENBQUM7QUFFL0MsTUFBTSxxQkFBcUIsR0FBRyxLQUFLLENBQUM7QUFFcEMsTUFBTSxPQUFPLFNBQVM7SUFXcEIsWUFDVSxNQUFNLFFBQVEsRUFDZixVQUF1QyxjQUFjO1FBRHBELFFBQUcsR0FBSCxHQUFHLENBQVc7UUFDZixZQUFPLEdBQVAsT0FBTyxDQUE4QztRQVZ0RCxRQUFHLEdBQUcsSUFBSSxRQUFRLEVBQWlCLENBQUM7UUFFcEMsV0FBTSxHQUFzQixJQUFJLENBQUM7UUFDakMsV0FBTSxHQUFzQixJQUFJLENBQUM7UUFDakMscUJBQWdCLEdBQStCLElBQUksR0FBRyxFQUFFLENBQUM7UUFDekQsMEJBQXFCLEdBQUcsS0FBSyxDQUFDO1FBQy9CLFNBQUksR0FBRyxDQUFDLENBQUM7UUFnSVIsYUFBUSxHQUFHLEdBQUcsRUFBRTtZQUN0QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDaEQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLHFCQUFxQixFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUM5QyxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDO2dCQUNuQyxJQUFJLENBQUMsSUFBSTtvQkFBRSxNQUFNO2dCQUNqQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNuQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO2dCQUNyQixPQUFRLElBQWtDLENBQUMsR0FBRyxDQUFDO2dCQUM5QyxJQUFrQyxDQUFDLE1BQU0sR0FBRyxJQUFJLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDL0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQzthQUN6QztZQUNELElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksR0FBRyxDQUFDLEVBQUU7Z0JBQ2xDLGNBQWMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDL0I7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLHFCQUFxQixHQUFHLEtBQUssQ0FBQzthQUNwQztRQUNILENBQUMsQ0FBQztRQTFJQSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUkscUJBQXFCLENBQ3ZDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUMzQixDQUFDO0lBQ0osQ0FBQztJQUVNLEdBQUcsQ0FBQyxHQUFNO1FBQ2YsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRU0sR0FBRyxDQUFDLEdBQU07UUFDZixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQy9CLE9BQU8sSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDNUIsQ0FBQztJQUVPLE9BQU8sQ0FBQyxHQUFNO1FBQ3BCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRS9CLElBQUksSUFBSSxJQUFJLElBQUksS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2hDLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDO1lBRTlCLElBQUksS0FBSyxFQUFFO2dCQUNULEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO2FBQ3JCO1lBRUQsSUFBSSxLQUFLLEVBQUU7Z0JBQ1QsS0FBSyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7YUFDckI7WUFFRCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDekIsSUFBSSxDQUFDLEtBQU0sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1lBRXpCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1lBRW5CLElBQUksSUFBSSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUU7Z0JBQ3hCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO2FBQ3JCO1NBQ0Y7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTSxHQUFHLENBQUMsR0FBTSxFQUFFLEtBQVE7UUFDekIsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM3QixJQUFJLElBQUksRUFBRTtZQUNSLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDO1NBQzdCO1FBRUQsSUFBSSxHQUFHO1lBQ0wsR0FBRztZQUNILEtBQUs7WUFDTCxLQUFLLEVBQUUsSUFBSTtZQUNYLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTTtTQUNuQixDQUFDO1FBRUYsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1NBQzFCO1FBRUQsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQztRQUVsQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUVaLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBRU0sS0FBSztRQUNWLE9BQU8sSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDMUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDOUI7SUFDSCxDQUFDO0lBRU8sVUFBVSxDQUFDLElBQWdCO1FBQ2pDLElBQUksSUFBSSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDeEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1NBQzFCO1FBRUQsSUFBSSxJQUFJLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUN4QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7U0FDMUI7UUFFRCxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDZCxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1NBQy9CO1FBRUQsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ2QsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztTQUMvQjtRQUVELElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNaLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUM3RCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDaEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNwQzthQUFNO1lBQ0wsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDaEM7UUFDRCxJQUFJLEdBQUc7WUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRU0sTUFBTSxDQUFDLEdBQU07UUFDbEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDL0IsSUFBSSxJQUFJLEVBQUU7WUFDUixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRXRCLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFTyxvQkFBb0IsQ0FBQyxJQUEyQjtRQUN0RCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUU7WUFDL0IsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQztZQUNsQyxjQUFjLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQy9CO0lBQ0gsQ0FBQztDQW1CRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ29tbW9uQ2FjaGUgfSBmcm9tIFwiLi9jb21tb25cIjtcblxuaW50ZXJmYWNlIFBhcnRpYWxOb2RlPEsgZXh0ZW5kcyBvYmplY3QsIFY+IHtcbiAgdmFsdWU6IFY7XG4gIG5ld2VyOiBOb2RlPEssIFY+IHwgbnVsbDtcbiAgb2xkZXI6IE5vZGU8SywgVj4gfCBudWxsO1xufVxuXG5pbnRlcmZhY2UgVW5maW5hbGl6ZWROb2RlPEsgZXh0ZW5kcyBvYmplY3QsIFY+IGV4dGVuZHMgUGFydGlhbE5vZGU8SywgVj4ge1xuICBrZXlSZWY/OiB1bmRlZmluZWQ7XG4gIGtleTogSztcbn1cblxuaW50ZXJmYWNlIEZ1bGxOb2RlPEsgZXh0ZW5kcyBvYmplY3QsIFY+IGV4dGVuZHMgUGFydGlhbE5vZGU8SywgVj4ge1xuICBrZXlSZWY6IFdlYWtSZWY8Sz47XG4gIGtleT86IHVuZGVmaW5lZDtcbn1cblxudHlwZSBOb2RlPEsgZXh0ZW5kcyBvYmplY3QsIFY+ID0gRnVsbE5vZGU8SywgVj4gfCBVbmZpbmFsaXplZE5vZGU8SywgVj47XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuY29uc3QgZGVmYXVsdERpc3Bvc2UgPSBub29wO1xuXG5jb25zdCBfV2Vha1JlZiA9XG4gIHR5cGVvZiBXZWFrUmVmICE9PSBcInVuZGVmaW5lZFwiXG4gICAgPyBXZWFrUmVmXG4gICAgOiAoZnVuY3Rpb24gPFQ+KHZhbHVlOiBUKSB7XG4gICAgICAgIHJldHVybiB7IGRlcmVmOiAoKSA9PiB2YWx1ZSB9IHNhdGlzZmllcyBPbWl0PFxuICAgICAgICAgIFdlYWtSZWY8YW55PixcbiAgICAgICAgICB0eXBlb2YgU3ltYm9sLnRvU3RyaW5nVGFnXG4gICAgICAgID47XG4gICAgICB9IGFzIGFueSBhcyB0eXBlb2YgV2Vha1JlZik7XG5jb25zdCBfV2Vha01hcCA9IHR5cGVvZiBXZWFrTWFwICE9PSBcInVuZGVmaW5lZFwiID8gV2Vha01hcCA6IE1hcDtcbmNvbnN0IF9GaW5hbGl6YXRpb25SZWdpc3RyeSA9XG4gIHR5cGVvZiBGaW5hbGl6YXRpb25SZWdpc3RyeSAhPT0gXCJ1bmRlZmluZWRcIlxuICAgID8gRmluYWxpemF0aW9uUmVnaXN0cnlcbiAgICA6IChmdW5jdGlvbiA8VD4oKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcmVnaXN0ZXI6IG5vb3AsXG4gICAgICAgICAgdW5yZWdpc3Rlcjogbm9vcCxcbiAgICAgICAgfSBzYXRpc2ZpZXMgT21pdDxGaW5hbGl6YXRpb25SZWdpc3RyeTxUPiwgdHlwZW9mIFN5bWJvbC50b1N0cmluZ1RhZz47XG4gICAgICB9IGFzIGFueSBhcyB0eXBlb2YgRmluYWxpemF0aW9uUmVnaXN0cnkpO1xuXG5jb25zdCBmaW5hbGl6YXRpb25CYXRjaFNpemUgPSAxMDAyNDtcblxuZXhwb3J0IGNsYXNzIFdlYWtDYWNoZTxLIGV4dGVuZHMgb2JqZWN0ID0gYW55LCBWID0gYW55PlxuICBpbXBsZW1lbnRzIENvbW1vbkNhY2hlPEssIFY+XG57XG4gIHByaXZhdGUgbWFwID0gbmV3IF9XZWFrTWFwPEssIE5vZGU8SywgVj4+KCk7XG4gIHByaXZhdGUgcmVnaXN0cnk6IEZpbmFsaXphdGlvblJlZ2lzdHJ5PE5vZGU8SywgVj4+O1xuICBwcml2YXRlIG5ld2VzdDogTm9kZTxLLCBWPiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIG9sZGVzdDogTm9kZTxLLCBWPiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHVuZmluYWxpemVkTm9kZXM6IFNldDxVbmZpbmFsaXplZE5vZGU8SywgVj4+ID0gbmV3IFNldCgpO1xuICBwcml2YXRlIGZpbmFsaXphdGlvblNjaGVkdWxlZCA9IGZhbHNlO1xuICBwdWJsaWMgc2l6ZSA9IDA7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBtYXggPSBJbmZpbml0eSxcbiAgICBwdWJsaWMgZGlzcG9zZTogKHZhbHVlOiBWLCBrZXk/OiBLKSA9PiB2b2lkID0gZGVmYXVsdERpc3Bvc2VcbiAgKSB7XG4gICAgdGhpcy5yZWdpc3RyeSA9IG5ldyBfRmluYWxpemF0aW9uUmVnaXN0cnk8Tm9kZTxLLCBWPj4oXG4gICAgICB0aGlzLmRlbGV0ZU5vZGUuYmluZCh0aGlzKVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgaGFzKGtleTogSyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm1hcC5oYXMoa2V5KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQoa2V5OiBLKTogViB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZShrZXkpO1xuICAgIHJldHVybiBub2RlICYmIG5vZGUudmFsdWU7XG4gIH1cblxuICBwcml2YXRlIGdldE5vZGUoa2V5OiBLKTogTm9kZTxLLCBWPiB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMubWFwLmdldChrZXkpO1xuXG4gICAgaWYgKG5vZGUgJiYgbm9kZSAhPT0gdGhpcy5uZXdlc3QpIHtcbiAgICAgIGNvbnN0IHsgb2xkZXIsIG5ld2VyIH0gPSBub2RlO1xuXG4gICAgICBpZiAobmV3ZXIpIHtcbiAgICAgICAgbmV3ZXIub2xkZXIgPSBvbGRlcjtcbiAgICAgIH1cblxuICAgICAgaWYgKG9sZGVyKSB7XG4gICAgICAgIG9sZGVyLm5ld2VyID0gbmV3ZXI7XG4gICAgICB9XG5cbiAgICAgIG5vZGUub2xkZXIgPSB0aGlzLm5ld2VzdDtcbiAgICAgIG5vZGUub2xkZXIhLm5ld2VyID0gbm9kZTtcblxuICAgICAgbm9kZS5uZXdlciA9IG51bGw7XG4gICAgICB0aGlzLm5ld2VzdCA9IG5vZGU7XG5cbiAgICAgIGlmIChub2RlID09PSB0aGlzLm9sZGVzdCkge1xuICAgICAgICB0aGlzLm9sZGVzdCA9IG5ld2VyO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBub2RlO1xuICB9XG5cbiAgcHVibGljIHNldChrZXk6IEssIHZhbHVlOiBWKTogViB7XG4gICAgbGV0IG5vZGUgPSB0aGlzLmdldE5vZGUoa2V5KTtcbiAgICBpZiAobm9kZSkge1xuICAgICAgcmV0dXJuIChub2RlLnZhbHVlID0gdmFsdWUpO1xuICAgIH1cblxuICAgIG5vZGUgPSB7XG4gICAgICBrZXksXG4gICAgICB2YWx1ZSxcbiAgICAgIG5ld2VyOiBudWxsLFxuICAgICAgb2xkZXI6IHRoaXMubmV3ZXN0LFxuICAgIH07XG5cbiAgICBpZiAodGhpcy5uZXdlc3QpIHtcbiAgICAgIHRoaXMubmV3ZXN0Lm5ld2VyID0gbm9kZTtcbiAgICB9XG5cbiAgICB0aGlzLm5ld2VzdCA9IG5vZGU7XG4gICAgdGhpcy5vbGRlc3QgPSB0aGlzLm9sZGVzdCB8fCBub2RlO1xuXG4gICAgdGhpcy5zY2hlZHVsZUZpbmFsaXphdGlvbihub2RlKTtcbiAgICB0aGlzLm1hcC5zZXQoa2V5LCBub2RlKTtcbiAgICB0aGlzLnNpemUrKztcblxuICAgIHJldHVybiBub2RlLnZhbHVlO1xuICB9XG5cbiAgcHVibGljIGNsZWFuKCkge1xuICAgIHdoaWxlICh0aGlzLm9sZGVzdCAmJiB0aGlzLnNpemUgPiB0aGlzLm1heCkge1xuICAgICAgdGhpcy5kZWxldGVOb2RlKHRoaXMub2xkZXN0KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRlbGV0ZU5vZGUobm9kZTogTm9kZTxLLCBWPikge1xuICAgIGlmIChub2RlID09PSB0aGlzLm5ld2VzdCkge1xuICAgICAgdGhpcy5uZXdlc3QgPSBub2RlLm9sZGVyO1xuICAgIH1cblxuICAgIGlmIChub2RlID09PSB0aGlzLm9sZGVzdCkge1xuICAgICAgdGhpcy5vbGRlc3QgPSBub2RlLm5ld2VyO1xuICAgIH1cblxuICAgIGlmIChub2RlLm5ld2VyKSB7XG4gICAgICBub2RlLm5ld2VyLm9sZGVyID0gbm9kZS5vbGRlcjtcbiAgICB9XG5cbiAgICBpZiAobm9kZS5vbGRlcikge1xuICAgICAgbm9kZS5vbGRlci5uZXdlciA9IG5vZGUubmV3ZXI7XG4gICAgfVxuXG4gICAgdGhpcy5zaXplLS07XG4gICAgY29uc3Qga2V5ID0gbm9kZS5rZXkgfHwgKG5vZGUua2V5UmVmICYmIG5vZGUua2V5UmVmLmRlcmVmKCkpO1xuICAgIHRoaXMuZGlzcG9zZShub2RlLnZhbHVlLCBrZXkpO1xuICAgIGlmICghbm9kZS5rZXlSZWYpIHtcbiAgICAgIHRoaXMudW5maW5hbGl6ZWROb2Rlcy5kZWxldGUobm9kZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVnaXN0cnkudW5yZWdpc3Rlcihub2RlKTtcbiAgICB9XG4gICAgaWYgKGtleSkgdGhpcy5tYXAuZGVsZXRlKGtleSk7XG4gIH1cblxuICBwdWJsaWMgZGVsZXRlKGtleTogSyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLm1hcC5nZXQoa2V5KTtcbiAgICBpZiAobm9kZSkge1xuICAgICAgdGhpcy5kZWxldGVOb2RlKG5vZGUpO1xuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIHNjaGVkdWxlRmluYWxpemF0aW9uKG5vZGU6IFVuZmluYWxpemVkTm9kZTxLLCBWPikge1xuICAgIHRoaXMudW5maW5hbGl6ZWROb2Rlcy5hZGQobm9kZSk7XG4gICAgaWYgKCF0aGlzLmZpbmFsaXphdGlvblNjaGVkdWxlZCkge1xuICAgICAgdGhpcy5maW5hbGl6YXRpb25TY2hlZHVsZWQgPSB0cnVlO1xuICAgICAgcXVldWVNaWNyb3Rhc2sodGhpcy5maW5hbGl6ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmaW5hbGl6ZSA9ICgpID0+IHtcbiAgICBjb25zdCBpdGVyYXRvciA9IHRoaXMudW5maW5hbGl6ZWROb2Rlcy52YWx1ZXMoKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpbmFsaXphdGlvbkJhdGNoU2l6ZTsgaSsrKSB7XG4gICAgICBjb25zdCBub2RlID0gaXRlcmF0b3IubmV4dCgpLnZhbHVlO1xuICAgICAgaWYgKCFub2RlKSBicmVhaztcbiAgICAgIHRoaXMudW5maW5hbGl6ZWROb2Rlcy5kZWxldGUobm9kZSk7XG4gICAgICBjb25zdCBrZXkgPSBub2RlLmtleTtcbiAgICAgIGRlbGV0ZSAobm9kZSBhcyB1bmtub3duIGFzIEZ1bGxOb2RlPEssIFY+KS5rZXk7XG4gICAgICAobm9kZSBhcyB1bmtub3duIGFzIEZ1bGxOb2RlPEssIFY+KS5rZXlSZWYgPSBuZXcgX1dlYWtSZWYoa2V5KTtcbiAgICAgIHRoaXMucmVnaXN0cnkucmVnaXN0ZXIoa2V5LCBub2RlLCBub2RlKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudW5maW5hbGl6ZWROb2Rlcy5zaXplID4gMCkge1xuICAgICAgcXVldWVNaWNyb3Rhc2sodGhpcy5maW5hbGl6ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmluYWxpemF0aW9uU2NoZWR1bGVkID0gZmFsc2U7XG4gICAgfVxuICB9O1xufVxuIl0sInhfZ29vZ2xlX2lnbm9yZUxpc3QiOlswXX0=