@jsii/kernel 1.56.0 → 1.59.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/api.d.ts +1 -0
- package/lib/api.js +1 -1
- package/lib/index.d.ts +1 -0
- package/lib/index.js +1 -1
- package/lib/kernel.d.ts +1 -0
- package/lib/kernel.js +1 -1
- package/lib/objects.d.ts +1 -0
- package/lib/objects.js +1 -1
- package/lib/on-exit.d.ts +1 -0
- package/lib/on-exit.js +1 -1
- package/{test → lib}/recording.d.ts +2 -1
- package/lib/recording.js +73 -0
- package/lib/serialization.d.ts +1 -0
- package/lib/serialization.js +1 -1
- package/package.json +8 -8
- package/test/kernel.test.d.ts +0 -1
- package/test/kernel.test.js +0 -1805
- package/test/objects.test.d.ts +0 -1
- package/test/objects.test.js +0 -20
- package/test/recording.js +0 -73
- package/test/serialization.test.d.ts +0 -1
- package/test/serialization.test.js +0 -93
package/lib/objects.js
CHANGED
|
@@ -235,4 +235,4 @@ class InterfaceCollection {
|
|
|
235
235
|
return this.interfaces[Symbol.iterator]();
|
|
236
236
|
}
|
|
237
237
|
}
|
|
238
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIm9iamVjdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbUNBQW1DO0FBRW5DLDZCQUE2QjtBQUM3QixtREFBbUQ7QUFFbkQ7O0dBRUc7QUFDSCxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLENBQUM7QUFFckQ7O0dBRUc7QUFDSCxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLHdCQUF3QixDQUFDLENBQUM7QUFFM0Q7O0dBRUc7QUFDSCxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBRTNDOzs7Ozs7R0FNRztBQUNILFNBQWdCLFdBQVcsQ0FBQyxHQUFROztJQUNsQyxhQUFPLEdBQUcsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLDBDQUFFLEdBQUcsQ0FBQztBQUMzQyxDQUFDO0FBRkQsa0NBRUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0IsZUFBZSxDQUFDLEdBQVk7SUFDMUMscUNBQXFDO0lBQ3JDLElBQUssR0FBVyxDQUFDLFlBQVksQ0FBQyxFQUFFO1FBQzlCLE9BQU87WUFDTCxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRyxHQUFxQixDQUFDLFlBQVksQ0FBQztZQUNyRCxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFHLEdBQXFCLENBQUMsYUFBYSxDQUFDO1NBQzlELENBQUM7S0FDSDtJQUVELE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUM7QUFWRCwwQ0FVQztBQU9ELFNBQVMsU0FBUyxDQUFDLEdBQVksRUFBRSxLQUFhLEVBQUUsVUFBcUI7SUFDbkUsTUFBTSxZQUFZLEdBQXNEO1FBQ3RFLDRFQUE0RTtRQUM1RSwwRUFBMEU7UUFDMUUsd0VBQXdFO1FBQ3hFLGdDQUFnQztRQUNoQyxVQUFVLEVBQUUsS0FBSztRQUNqQix5RUFBeUU7UUFDekUsMEVB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LENBQUM7YUFDOUI7U0FDRjtJQUNILENBQUM7SUFFTSxnQkFBZ0IsQ0FBQyxHQUFXO1FBQ2pDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDakMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUU7WUFDN0IsTUFBTSxJQUFJLEtBQUssQ0FDYix1Q0FBdUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQ3hFLENBQUM7U0FDSDtRQUNELElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFFO1lBQ2xCLE9BQU87U0FDUjtRQUNELEtBQUssTUFBTSxLQUFLLElBQUksRUFBRSxDQUFDLFVBQVUsRUFBRTtZQUNqQyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUM5QixTQUFTO2FBQ1Y7WUFDRCxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMzQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDOUI7SUFDSCxDQUFDO0lBRU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztJQUM1QyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBzcGVjIGZyb20gJ0Bqc2lpL3NwZWMnO1xuXG5pbXBvcnQgKiBhcyBhcGkgZnJvbSAnLi9hcGknO1xuaW1wb3J0IHsgRU1QVFlfT0JKRUNUX0ZRTiB9IGZyb20gJy4vc2VyaWFsaXphdGlvbic7XG5cbi8qKlxuICogU3ltYm9sIHVuZGVyIHdoaWNoIHdlIHN0b3JlIHRoZSB7IHR5cGUgLT4gb2JqaWQgfSBtYXAgb24gb2JqZWN0IGluc3RhbmNlc1xuICovXG5jb25zdCBPQkpJRF9TWU1CT0wgPSBTeW1ib2wuZm9yKCckX19qc2lpX19vYmppZF9fJCcpO1xuXG4vKipcbiAqIFN5bWJvbCB1bmRlciB3aGljaCB3ZSBzdG9yZSB0aGUgaW50ZXJmYWNlcyBpbXBsZW1lbnRlZCBieSBpbnN0YW5jZXNcbiAqL1xuY29uc3QgSUZBQ0VTX1NZTUJPTCA9IFN5bWJvbC5mb3IoJyRfX2pzaWlfX2ludGVyZmFjZXNfXyQnKTtcblxuLyoqXG4gKiBTeW1ib2wgd2UgdXNlIHRvIHRhZyB0aGUgY29uc3RydWN0b3Igb2YgYSBKU0lJIGNsYXNzXG4gKi9cbmNvbnN0IEpTSUlfU1lNQk9MID0gU3ltYm9sLmZvcignX19qc2lpX18nKTtcblxuLyoqXG4gKiBHZXQgdGhlIEpTSUkgZnFuIGZvciBhbiBvYmplY3QgKGlmIGF2YWlsYWJsZSlcbiAqXG4gKiBUaGlzIHdpbGwgcmV0dXJuIHNvbWV0aGluZyBpZiB0aGUgb2JqZWN0IHdhcyBjb25zdHJ1Y3RlZCBmcm9tIGEgSlNJSS1lbmFibGVkXG4gKiBjbGFzcy9jb25zdHJ1Y3Rvciwgb3IgaWYgYSBsaXRlcmFsIG9iamVjdCB3YXMgYW5ub3RhdGVkIHdpdGggdHlwZVxuICogaW5mb3JtYXRpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBqc2lpVHlwZUZxbihvYmo6IGFueSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBvYmouY29uc3RydWN0b3JbSlNJSV9TWU1CT0xdPy5mcW47XG59XG5cbi8qKlxuICogSWYgdGhpcyBvYmplY3Qgd2FzIHByZXZpb3VzbHkgc2VyaWFsaXplZCB1bmRlciBhIGdpdmVuIHJlZmVyZW5jZSwgcmV0dXJuIHRoZSBzYW1lIHJlZmVyZW5jZVxuICpcbiAqIFRoaXMgaXMgdG8gcmV0YWluIG9iamVjdCBpZGVudGl0eSBhY3Jvc3MgaW52b2NhdGlvbnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvYmplY3RSZWZlcmVuY2Uob2JqOiB1bmtub3duKTogYXBpLk9ialJlZiB8IHVuZGVmaW5lZCB7XG4gIC8vIElmIHRoaXMgb2JqZWN0IGFzIGFscmVhZHkgcmV0dXJuZWRcbiAgaWYgKChvYmogYXMgYW55KVtPQkpJRF9TWU1CT0xdKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFthcGkuVE9LRU5fUkVGXTogKG9iaiBhcyBNYW5hZ2VkT2JqZWN0KVtPQkpJRF9TWU1CT0xdLFxuICAgICAgW2FwaS5UT0tFTl9JTlRFUkZBQ0VTXTogKG9iaiBhcyBNYW5hZ2VkT2JqZWN0KVtJRkFDRVNfU1lNQk9MXSxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxudHlwZSBNYW5hZ2VkT2JqZWN0ID0ge1xuICBbT0JKSURfU1lNQk9MXTogc3RyaW5nO1xuICBbSUZBQ0VTX1NZTUJPTF0/OiBzdHJpbmdbXTtcbn07XG5cbmZ1bmN0aW9uIHRhZ09iamVjdChvYmo6IHVua25vd24sIG9iamlkOiBzdHJpbmcsIGludGVyZmFjZXM/OiBzdHJpbmdbXSkge1xuICBjb25zdCBwcml2YXRlRmllbGQ6IE9taXQ8UHJvcGVydHlEZXNjcmlwdG9yLCAndmFsdWUnIHwgJ2dldCcgfCAnc2V0Jz4gPSB7XG4gICAgLy8gTWFrZSBzdXJlIHRoZSBmaWVsZCBkb2VzIG5vdCBzaG93IGluIGBKU09OLnN0cmluZ2lmeWAgb3V0cHV0cywgYW5kIGlzIG5vdFxuICAgIC8vIGNvcGllZCBieSBzcGxhdCBleHByZXNzaW9ucyAoYHsuLi5vYmp9YCksIGFzIHRoaXMgd291bGQgYmUgcHJvYmxlbWF0aWMuXG4gICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9pc3N1ZXMvMTc4NzYgZm9yIGFuIGV4YW1wbGUgb2YgdGhlXG4gICAgLy8gY29uc2VxdWVuY2VzIHRoaXMgY291bGQgaGF2ZS5cbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAvLyBQcm9iYWJseSBub3QgbmVjZXNzYXJ5LCBidXQgYWxsb3cgdGhlIHByb3BlcnR5IHRvIGJlIHJlLWNvbmZpZ3VyZWQgKGl0XG4gICAgLy8gd291bGQgYmUgZ29vZCB0byBtYWtlIHRoaXMgYGZhbHNlYCBpbiB0aGUgZnV0dXJlLCBidXQgbWlnaHQgY2F1c2Ugd2VpcmRcbiAgICAvLyBidWdzLCBzbyBub3QgZG9pbmcgaXQgbm93Li4uKVxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICB3cml0YWJsZTogdHJ1ZSxcbiAgfTtcblxuICAvLyBMb2cgYSB3YXJuaW5nIGluIGNhc2Ugd2UgYXJlIHJlLXRhZ2dpbmcgdGhpcyB2YWx1ZSwgc28gd2UgY2FuIGhvcGVmdWxseVxuICAvLyBkaXNjb3ZlciBhYm91dCB0aGUgYnVncyB3ZSdkIGhhdmUgaWYgd2UgZGlkIG5vdCBtYWtlIGl0IGNvbmZpZ3VyYWJsZSBub3JcbiAgLy8gd3JpdGFibGUuXG4gIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBPQkpJRF9TWU1CT0wpKSB7XG4gICAgY29uc29sZS5lcnJvcihcbiAgICAgIGBbanNpaS9rZXJuZWxdIFdBUk5JTkc6IG9iamVjdCAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICBvYmogYXMgYW55LFxuICAgICAgKX0gd2FzIGFscmVhZHkgdGFnZ2VkIGFzICR7KG9iaiBhcyBhbnkpW09CSklEX1NZTUJPTF19IWAsXG4gICAgKTtcbiAgfVxuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIE9CSklEX1NZTUJPTCwgeyAuLi5wcml2YXRlRmllbGQsIHZhbHVlOiBvYmppZCB9KTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgSUZBQ0VTX1NZTUJPTCwge1xuICAgIC4uLnByaXZhdGVGaWVsZCxcbiAgICB2YWx1ZTogaW50ZXJmYWNlcyxcbiAgfSk7XG59XG5cbi8qKlxuICogU2V0IHRoZSBKU0lJIEZRTiBmb3IgY2xhc3NlcyBwcm9kdWNlZCBieSBhIGdpdmVuIGNvbnN0cnVjdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0YWdKc2lpQ29uc3RydWN0b3IoY29uc3RydWN0b3I6IGFueSwgZnFuOiBzdHJpbmcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbnN0cnVjdG9yLCBKU0lJX1NZTUJPTCwge1xuICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgd3JpdGFibGU6IGZhbHNlLFxuICAgIHZhbHVlOiB7IGZxbiB9LFxuICB9KTtcbn1cblxuLyoqXG4gKiBUYWJsZSBvZiBKU0lJIG9iamVjdHNcbiAqXG4gKiBUaGVyZSBjYW4gYmUgbXVsdGlwbGUgcmVmZXJlbmNlcyB0byB0aGUgc2FtZSBvYmplY3QsIGVhY2ggdW5kZXIgYSBkaWZmZXJlbnQgcmVxdWVzdGVkXG4gKiB0eXBlLlxuICovXG5leHBvcnQgY2xhc3MgT2JqZWN0VGFibGUge1xuICBwcml2YXRlIG9iamVjdHM6IHsgW29iamlkOiBzdHJpbmddOiBSZWdpc3RlcmVkT2JqZWN0IH0gPSB7fTtcbiAgcHJpdmF0ZSBuZXh0aWQgPSAxMDAwMDtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSByZXNvbHZlVHlwZTogKGZxbjogc3RyaW5nKSA9PiBzcGVjLlR5cGUsXG4gICkge31cblxuICAvKipcbiAgICogUmVnaXN0ZXIgdGhlIGdpdmVuIG9iamVjdCB3aXRoIHRoZSBnaXZlbiB0eXBlXG4gICAqXG4gICAqIFJldHVybiB0aGUgZXhpc3RpbmcgcmVnaXN0cmF0aW9uIGlmIGF2YWlsYWJsZS5cbiAgICovXG4gIHB1YmxpYyByZWdpc3Rlck9iamVjdChcbiAgICBvYmo6IHVua25vd24sXG4gICAgZnFuOiBzdHJpbmcsXG4gICAgaW50ZXJmYWNlcz86IHN0cmluZ1tdLFxuICApOiBhcGkuT2JqUmVmIHtcbiAgICBpZiAoZnFuID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRlFOIGNhbm5vdCBiZSB1bmRlZmluZWQnKTtcbiAgICB9XG5cbiAgICBjb25zdCBleGlzdGluZ1JlZiA9IG9iamVjdFJlZmVyZW5jZShvYmopO1xuICAgIGlmIChleGlzdGluZ1JlZikge1xuICAgICAgaWYgKGludGVyZmFjZXMpIHtcbiAgICAgICAgY29uc3QgYWxsSWZhY2VzID0gbmV3IFNldChpbnRlcmZhY2VzKTtcbiAgICAgICAgZm9yIChjb25zdCBpZmFjZSBvZiBleGlzdGluZ1JlZlthcGkuVE9LRU5fSU5URVJGQUNFU10gPz8gW10pIHtcbiAgICAgICAgICBhbGxJZmFjZXMuYWRkKGlmYWNlKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBOb3RlIC0gb2JqW0lOVEVSRkFDRVNfU1lNQk9MXSBzaG91bGQgYWxyZWFkeSBoYXZlIGJlZW4gZGVjbGFyZWQgYXMgYVxuICAgICAgICAvLyBwcml2YXRlIHByb3BlcnR5IGJ5IGEgcHJldmlvdXMgY2FsbCB0byB0YWdPYmplY3QgIGF0IHRoaXMgc3RhZ2UuXG4gICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgSUZBQ0VTX1NZTUJPTCkpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgYFtqc2lpL2tlcm5lbF0gV0FSTklORzogcmVmZXJlbmNlZCBvYmplY3QgJHtcbiAgICAgICAgICAgICAgZXhpc3RpbmdSZWZbYXBpLlRPS0VOX1JFRl1cbiAgICAgICAgICAgIH0gZG9lcyBub3QgaGF2ZSB0aGUgJHtTdHJpbmcoSUZBQ0VTX1NZTUJPTCl9IHByb3BlcnR5IWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub2JqZWN0c1tleGlzdGluZ1JlZlthcGkuVE9LRU5fUkVGXV0uaW50ZXJmYWNlcyA9XG4gICAgICAgICAgKG9iaiBhcyBhbnkpW0lGQUNFU19TWU1CT0xdID1cbiAgICAgICAgICBleGlzdGluZ1JlZlthcGkuVE9LRU5fSU5URVJGQUNFU10gPVxuICAgICAgICAgIGludGVyZmFjZXMgPVxuICAgICAgICAgICAgdGhpcy5yZW1vdmVSZWR1bmRhbnQoQXJyYXkuZnJvbShhbGxJZmFjZXMpLCBmcW4pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGV4aXN0aW5nUmVmO1xuICAgIH1cblxuICAgIGludGVyZmFjZXMgPSB0aGlzLnJlbW92ZVJlZHVuZGFudChpbnRlcmZhY2VzLCBmcW4pO1xuXG4gICAgY29uc3Qgb2JqaWQgPSB0aGlzLm1ha2VJZChmcW4pO1xuICAgIHRoaXMub2JqZWN0c1tvYmppZF0gPSB7IGluc3RhbmNlOiBvYmosIGZxbiwgaW50ZXJmYWNlcyB9O1xuICAgIHRhZ09iamVjdChvYmosIG9iamlkLCBpbnRlcmZhY2VzKTtcblxuICAgIHJldHVybiB7IFthcGkuVE9LRU5fUkVGXTogb2JqaWQsIFthcGkuVE9LRU5fSU5URVJGQUNFU106IGludGVyZmFjZXMgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kIHRoZSBvYmplY3QgYW5kIHJlZ2lzdGVyZWQgdHlwZSBmb3IgdGhlIGdpdmVuIE9ialJlZlxuICAgKi9cbiAgcHVibGljIGZpbmRPYmplY3Qob2JqcmVmOiBhcGkuT2JqUmVmKTogUmVnaXN0ZXJlZE9iamVjdCB7XG4gICAgaWYgKHR5cGVvZiBvYmpyZWYgIT09ICdvYmplY3QnIHx8ICEoYXBpLlRPS0VOX1JFRiBpbiBvYmpyZWYpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE1hbGZvcm1lZCBvYmplY3QgcmVmZXJlbmNlOiAke0pTT04uc3RyaW5naWZ5KG9ianJlZil9YCk7XG4gICAgfVxuXG4gICAgY29uc3Qgb2JqaWQgPSBvYmpyZWZbYXBpLlRPS0VOX1JFRl07XG4gICAgY29uc3Qgb2JqID0gdGhpcy5vYmplY3RzW29iamlkXTtcbiAgICBpZiAoIW9iaikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBPYmplY3QgJHtvYmppZH0gbm90IGZvdW5kYCk7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlcmUgYXJlIFwiYWRkaXRpb25hbFwiIGludGVyZmFjZXMgZGVjbGFyZWQgb24gdGhlIG9ianJlZiwgbWVyZ2UgdGhlbVxuICAgIC8vIGludG8gdGhlIHJldHVybmVkIG9iamVjdC4gVGhpcyBpcyB1c2VkIHRvIHN1cHBvcnQgY2xpZW50LXNpZGUgZm9yY2VkXG4gICAgLy8gZG93bi1jYXN0aW5nIChhLmsuYTogdW5zYWZlIGNhc3RpbmcpLiBXZSBkbyBOT1QgcmVnaXN0ZXIgdGhlIGV4dHJhXG4gICAgLy8gaW50ZXJmYWNlcyBoZXJlIHNvIHRoYXQgaWYgdGhlIGNsaWVudCBwcm92aWRlZCBhbiBpbnRlcmZhY2UgdGhhdCBpc1xuICAgIC8vIGFjdHVhbGx5IG5vdCBpbXBsZW1lbnRlZCwgd2UgYXJlbid0IFwicG9pc29uaW5nXCIgb3VyIHN0YXRlIHdpdGggdGhhdFxuICAgIC8vIGluY29ycmVjdCBpbmZvcm1hdGlvbi5cbiAgICBjb25zdCBhZGRpdGlvbmFsSW50ZXJmYWNlcyA9IG9ianJlZlthcGkuVE9LRU5fSU5URVJGQUNFU107XG4gICAgaWYgKGFkZGl0aW9uYWxJbnRlcmZhY2VzICE9IG51bGwgJiYgYWRkaXRpb25hbEludGVyZmFjZXMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ub2JqLFxuICAgICAgICBpbnRlcmZhY2VzOiBbXG4gICAgICAgICAgLi4uKG9iai5pbnRlcmZhY2VzID8/IFtdKSxcbiAgICAgICAgICAvLyBXZSBhcHBlbmQgYXQgdGhlIGVuZCBzbyBcInJlZ2lzdGVyZWRcIiBpbnRlcmZhY2UgaW5mb3JtYXRpb24gaGFzXG4gICAgICAgICAgLy8gcHJlY2VkZW5jZSBvdmVyIGNsaWVudC1kZWNsYXJlZCBvbmVzLlxuICAgICAgICAgIC4uLmFkZGl0aW9uYWxJbnRlcmZhY2VzLFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZSB0aGUgcmVnaXN0cmF0aW9uIHdpdGggdGhlIGdpdmVuIG9ianJlZlxuICAgKi9cbiAgcHVibGljIGRlbGV0ZU9iamVjdChvYmpyZWY6IGFwaS5PYmpSZWYpIHtcbiAgICB0aGlzLmZpbmRPYmplY3Qob2JqcmVmKTsgLy8gbWFrZSBzdXJlIG9iamVjdCBleGlzdHNcbiAgICBkZWxldGUgdGhpcy5vYmplY3RzW29ianJlZlthcGkuVE9LRU5fUkVGXV07XG4gIH1cblxuICBwdWJsaWMgZ2V0IGNvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMub2JqZWN0cykubGVuZ3RoO1xuICB9XG5cbiAgcHJpdmF0ZSBtYWtlSWQoZnFuOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYCR7ZnFufUAke3RoaXMubmV4dGlkKyt9YDtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlUmVkdW5kYW50KFxuICAgIGludGVyZmFjZXM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkLFxuICAgIGZxbjogc3RyaW5nLFxuICApOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCFpbnRlcmZhY2VzIHx8IGludGVyZmFjZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBTZXQoaW50ZXJmYWNlcyk7XG4gICAgY29uc3QgYnVpbHRJbiA9IG5ldyBJbnRlcmZhY2VDb2xsZWN0aW9uKHRoaXMucmVzb2x2ZVR5cGUpO1xuXG4gICAgaWYgKGZxbiAhPT0gRU1QVFlfT0JKRUNUX0ZRTikge1xuICAgICAgYnVpbHRJbi5hZGRGcm9tQ2xhc3MoZnFuKTtcbiAgICB9XG4gICAgaW50ZXJmYWNlcy5mb3JFYWNoKGJ1aWx0SW4uYWRkRnJvbUludGVyZmFjZS5iaW5kKGJ1aWx0SW4pKTtcblxuICAgIGZvciAoY29uc3QgaWZhY2Ugb2YgYnVpbHRJbikge1xuICAgICAgcmVzdWx0LmRlbGV0ZShpZmFjZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdC5zaXplID4gMCA/IEFycmF5LmZyb20ocmVzdWx0KS5zb3J0KCkgOiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZWdpc3RlcmVkT2JqZWN0IHtcbiAgaW5zdGFuY2U6IGFueTtcbiAgZnFuOiBzdHJpbmc7XG4gIGludGVyZmFjZXM/OiBzdHJpbmdbXTtcbn1cblxuY2xhc3MgSW50ZXJmYWNlQ29sbGVjdGlvbiBpbXBsZW1lbnRzIEl0ZXJhYmxlPHN0cmluZz4ge1xuICBwcml2YXRlIHJlYWRvbmx5IGludGVyZmFjZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSByZXNvbHZlVHlwZTogKGZxbjogc3RyaW5nKSA9PiBzcGVjLlR5cGUsXG4gICkge31cblxuICBwdWJsaWMgYWRkRnJvbUNsYXNzKGZxbjogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgdGkgPSB0aGlzLnJlc29sdmVUeXBlKGZxbik7XG4gICAgaWYgKCFzcGVjLmlzQ2xhc3NUeXBlKHRpKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgRXhwZWN0ZWQgYSBjbGFzcywgYnV0IHJlY2VpdmVkICR7c3BlYy5kZXNjcmliZVR5cGVSZWZlcmVuY2UodGkpfWAsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAodGkuYmFzZSkge1xuICAgICAgdGhpcy5hZGRGcm9tQ2xhc3ModGkuYmFzZSk7XG4gICAgfVxuICAgIGlmICh0aS5pbnRlcmZhY2VzKSB7XG4gICAgICBmb3IgKGNvbnN0IGlmYWNlIG9mIHRpLmludGVyZmFjZXMpIHtcbiAgICAgICAgaWYgKHRoaXMuaW50ZXJmYWNlcy5oYXMoaWZhY2UpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbnRlcmZhY2VzLmFkZChpZmFjZSk7XG4gICAgICAgIHRoaXMuYWRkRnJvbUludGVyZmFjZShpZmFjZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFkZEZyb21JbnRlcmZhY2UoZnFuOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCB0aSA9IHRoaXMucmVzb2x2ZVR5cGUoZnFuKTtcbiAgICBpZiAoIXNwZWMuaXNJbnRlcmZhY2VUeXBlKHRpKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgRXhwZWN0ZWQgYW4gaW50ZXJmYWNlLCBidXQgcmVjZWl2ZWQgJHtzcGVjLmRlc2NyaWJlVHlwZVJlZmVyZW5jZSh0aSl9YCxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICghdGkuaW50ZXJmYWNlcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGlmYWNlIG9mIHRpLmludGVyZmFjZXMpIHtcbiAgICAgIGlmICh0aGlzLmludGVyZmFjZXMuaGFzKGlmYWNlKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHRoaXMuaW50ZXJmYWNlcy5hZGQoaWZhY2UpO1xuICAgICAgdGhpcy5hZGRGcm9tSW50ZXJmYWNlKGlmYWNlKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgW1N5bWJvbC5pdGVyYXRvcl0oKSB7XG4gICAgcmV0dXJuIHRoaXMuaW50ZXJmYWNlc1tTeW1ib2wuaXRlcmF0b3JdKCk7XG4gIH1cbn1cbiJdfQ==
|
|
238
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9vYmplY3RzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1DQUFtQztBQUVuQyw2QkFBNkI7QUFDN0IsbURBQW1EO0FBRW5EOztHQUVHO0FBQ0gsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0FBRXJEOztHQUVHO0FBQ0gsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0FBRTNEOztHQUVHO0FBQ0gsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUUzQzs7Ozs7O0dBTUc7QUFDSCxTQUFnQixXQUFXLENBQUMsR0FBUTs7SUFDbEMsYUFBTyxHQUFHLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQywwQ0FBRSxHQUFHLENBQUM7QUFDM0MsQ0FBQztBQUZELGtDQUVDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLGVBQWUsQ0FBQyxHQUFZO0lBQzFDLHFDQUFxQztJQUNyQyxJQUFLLEdBQVcsQ0FBQyxZQUFZLENBQUMsRUFBRTtRQUM5QixPQUFPO1lBQ0wsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUcsR0FBcUIsQ0FBQyxZQUFZLENBQUM7WUFDckQsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsRUFBRyxHQUFxQixDQUFDLGFBQWEsQ0FBQztTQUM5RCxDQUFDO0tBQ0g7SUFFRCxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDO0FBVkQsMENBVUM7QUFPRCxTQUFTLFNBQVMsQ0FBQyxHQUFZLEVBQUUsS0FBYSxFQUFFLFVBQXFCO0lBQ25FLE1BQU0sWUFBWSxHQUFzRDtRQUN0RSw0RUFBNEU7UUFDNUUsMEVBQTBFO1FBQzFFLHdFQUF3RTtRQUN4RSxnQ0FBZ0M7UUFDaEMsVUFBVSxFQUFFLEtBQUs7UUFDakIseUVBQXlFO1FB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QUssQ0FBQyxDQUFDO2FBQzlCO1NBQ0Y7SUFDSCxDQUFDO0lBRU0sZ0JBQWdCLENBQUMsR0FBVztRQUNqQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFFO1lBQzdCLE1BQU0sSUFBSSxLQUFLLENBQ2IsdUNBQXVDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUN4RSxDQUFDO1NBQ0g7UUFDRCxJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBRTtZQUNsQixPQUFPO1NBQ1I7UUFDRCxLQUFLLE1BQU0sS0FBSyxJQUFJLEVBQUUsQ0FBQyxVQUFVLEVBQUU7WUFDakMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDOUIsU0FBUzthQUNWO1lBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDM0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzlCO0lBQ0gsQ0FBQztJQUVNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztRQUN0QixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7SUFDNUMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgc3BlYyBmcm9tICdAanNpaS9zcGVjJztcblxuaW1wb3J0ICogYXMgYXBpIGZyb20gJy4vYXBpJztcbmltcG9ydCB7IEVNUFRZX09CSkVDVF9GUU4gfSBmcm9tICcuL3NlcmlhbGl6YXRpb24nO1xuXG4vKipcbiAqIFN5bWJvbCB1bmRlciB3aGljaCB3ZSBzdG9yZSB0aGUgeyB0eXBlIC0+IG9iamlkIH0gbWFwIG9uIG9iamVjdCBpbnN0YW5jZXNcbiAqL1xuY29uc3QgT0JKSURfU1lNQk9MID0gU3ltYm9sLmZvcignJF9fanNpaV9fb2JqaWRfXyQnKTtcblxuLyoqXG4gKiBTeW1ib2wgdW5kZXIgd2hpY2ggd2Ugc3RvcmUgdGhlIGludGVyZmFjZXMgaW1wbGVtZW50ZWQgYnkgaW5zdGFuY2VzXG4gKi9cbmNvbnN0IElGQUNFU19TWU1CT0wgPSBTeW1ib2wuZm9yKCckX19qc2lpX19pbnRlcmZhY2VzX18kJyk7XG5cbi8qKlxuICogU3ltYm9sIHdlIHVzZSB0byB0YWcgdGhlIGNvbnN0cnVjdG9yIG9mIGEgSlNJSSBjbGFzc1xuICovXG5jb25zdCBKU0lJX1NZTUJPTCA9IFN5bWJvbC5mb3IoJ19fanNpaV9fJyk7XG5cbi8qKlxuICogR2V0IHRoZSBKU0lJIGZxbiBmb3IgYW4gb2JqZWN0IChpZiBhdmFpbGFibGUpXG4gKlxuICogVGhpcyB3aWxsIHJldHVybiBzb21ldGhpbmcgaWYgdGhlIG9iamVjdCB3YXMgY29uc3RydWN0ZWQgZnJvbSBhIEpTSUktZW5hYmxlZFxuICogY2xhc3MvY29uc3RydWN0b3IsIG9yIGlmIGEgbGl0ZXJhbCBvYmplY3Qgd2FzIGFubm90YXRlZCB3aXRoIHR5cGVcbiAqIGluZm9ybWF0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24ganNpaVR5cGVGcW4ob2JqOiBhbnkpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gb2JqLmNvbnN0cnVjdG9yW0pTSUlfU1lNQk9MXT8uZnFuO1xufVxuXG4vKipcbiAqIElmIHRoaXMgb2JqZWN0IHdhcyBwcmV2aW91c2x5IHNlcmlhbGl6ZWQgdW5kZXIgYSBnaXZlbiByZWZlcmVuY2UsIHJldHVybiB0aGUgc2FtZSByZWZlcmVuY2VcbiAqXG4gKiBUaGlzIGlzIHRvIHJldGFpbiBvYmplY3QgaWRlbnRpdHkgYWNyb3NzIGludm9jYXRpb25zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gb2JqZWN0UmVmZXJlbmNlKG9iajogdW5rbm93bik6IGFwaS5PYmpSZWYgfCB1bmRlZmluZWQge1xuICAvLyBJZiB0aGlzIG9iamVjdCBhcyBhbHJlYWR5IHJldHVybmVkXG4gIGlmICgob2JqIGFzIGFueSlbT0JKSURfU1lNQk9MXSkge1xuICAgIHJldHVybiB7XG4gICAgICBbYXBpLlRPS0VOX1JFRl06IChvYmogYXMgTWFuYWdlZE9iamVjdClbT0JKSURfU1lNQk9MXSxcbiAgICAgIFthcGkuVE9LRU5fSU5URVJGQUNFU106IChvYmogYXMgTWFuYWdlZE9iamVjdClbSUZBQ0VTX1NZTUJPTF0sXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbnR5cGUgTWFuYWdlZE9iamVjdCA9IHtcbiAgW09CSklEX1NZTUJPTF06IHN0cmluZztcbiAgW0lGQUNFU19TWU1CT0xdPzogc3RyaW5nW107XG59O1xuXG5mdW5jdGlvbiB0YWdPYmplY3Qob2JqOiB1bmtub3duLCBvYmppZDogc3RyaW5nLCBpbnRlcmZhY2VzPzogc3RyaW5nW10pIHtcbiAgY29uc3QgcHJpdmF0ZUZpZWxkOiBPbWl0PFByb3BlcnR5RGVzY3JpcHRvciwgJ3ZhbHVlJyB8ICdnZXQnIHwgJ3NldCc+ID0ge1xuICAgIC8vIE1ha2Ugc3VyZSB0aGUgZmllbGQgZG9lcyBub3Qgc2hvdyBpbiBgSlNPTi5zdHJpbmdpZnlgIG91dHB1dHMsIGFuZCBpcyBub3RcbiAgICAvLyBjb3BpZWQgYnkgc3BsYXQgZXhwcmVzc2lvbnMgKGB7Li4ub2JqfWApLCBhcyB0aGlzIHdvdWxkIGJlIHByb2JsZW1hdGljLlxuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvaXNzdWVzLzE3ODc2IGZvciBhbiBleGFtcGxlIG9mIHRoZVxuICAgIC8vIGNvbnNlcXVlbmNlcyB0aGlzIGNvdWxkIGhhdmUuXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgLy8gUHJvYmFibHkgbm90IG5lY2Vzc2FyeSwgYnV0IGFsbG93IHRoZSBwcm9wZXJ0eSB0byBiZSByZS1jb25maWd1cmVkIChpdFxuICAgIC8vIHdvdWxkIGJlIGdvb2QgdG8gbWFrZSB0aGlzIGBmYWxzZWAgaW4gdGhlIGZ1dHVyZSwgYnV0IG1pZ2h0IGNhdXNlIHdlaXJkXG4gICAgLy8gYnVncywgc28gbm90IGRvaW5nIGl0IG5vdy4uLilcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgd3JpdGFibGU6IHRydWUsXG4gIH07XG5cbiAgLy8gTG9nIGEgd2FybmluZyBpbiBjYXNlIHdlIGFyZSByZS10YWdnaW5nIHRoaXMgdmFsdWUsIHNvIHdlIGNhbiBob3BlZnVsbHlcbiAgLy8gZGlzY292ZXIgYWJvdXQgdGhlIGJ1Z3Mgd2UnZCBoYXZlIGlmIHdlIGRpZCBub3QgbWFrZSBpdCBjb25maWd1cmFibGUgbm9yXG4gIC8vIHdyaXRhYmxlLlxuICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgT0JKSURfU1lNQk9MKSkge1xuICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICBgW2pzaWkva2VybmVsXSBXQVJOSU5HOiBvYmplY3QgJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgb2JqIGFzIGFueSxcbiAgICAgICl9IHdhcyBhbHJlYWR5IHRhZ2dlZCBhcyAkeyhvYmogYXMgYW55KVtPQkpJRF9TWU1CT0xdfSFgLFxuICAgICk7XG4gIH1cblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBPQkpJRF9TWU1CT0wsIHsgLi4ucHJpdmF0ZUZpZWxkLCB2YWx1ZTogb2JqaWQgfSk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIElGQUNFU19TWU1CT0wsIHtcbiAgICAuLi5wcml2YXRlRmllbGQsXG4gICAgdmFsdWU6IGludGVyZmFjZXMsXG4gIH0pO1xufVxuXG4vKipcbiAqIFNldCB0aGUgSlNJSSBGUU4gZm9yIGNsYXNzZXMgcHJvZHVjZWQgYnkgYSBnaXZlbiBjb25zdHJ1Y3RvclxuICovXG5leHBvcnQgZnVuY3Rpb24gdGFnSnNpaUNvbnN0cnVjdG9yKGNvbnN0cnVjdG9yOiBhbnksIGZxbjogc3RyaW5nKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb25zdHJ1Y3RvciwgSlNJSV9TWU1CT0wsIHtcbiAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICB2YWx1ZTogeyBmcW4gfSxcbiAgfSk7XG59XG5cbi8qKlxuICogVGFibGUgb2YgSlNJSSBvYmplY3RzXG4gKlxuICogVGhlcmUgY2FuIGJlIG11bHRpcGxlIHJlZmVyZW5jZXMgdG8gdGhlIHNhbWUgb2JqZWN0LCBlYWNoIHVuZGVyIGEgZGlmZmVyZW50IHJlcXVlc3RlZFxuICogdHlwZS5cbiAqL1xuZXhwb3J0IGNsYXNzIE9iamVjdFRhYmxlIHtcbiAgcHJpdmF0ZSBvYmplY3RzOiB7IFtvYmppZDogc3RyaW5nXTogUmVnaXN0ZXJlZE9iamVjdCB9ID0ge307XG4gIHByaXZhdGUgbmV4dGlkID0gMTAwMDA7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVzb2x2ZVR5cGU6IChmcW46IHN0cmluZykgPT4gc3BlYy5UeXBlLFxuICApIHt9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIHRoZSBnaXZlbiBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gdHlwZVxuICAgKlxuICAgKiBSZXR1cm4gdGhlIGV4aXN0aW5nIHJlZ2lzdHJhdGlvbiBpZiBhdmFpbGFibGUuXG4gICAqL1xuICBwdWJsaWMgcmVnaXN0ZXJPYmplY3QoXG4gICAgb2JqOiB1bmtub3duLFxuICAgIGZxbjogc3RyaW5nLFxuICAgIGludGVyZmFjZXM/OiBzdHJpbmdbXSxcbiAgKTogYXBpLk9ialJlZiB7XG4gICAgaWYgKGZxbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZRTiBjYW5ub3QgYmUgdW5kZWZpbmVkJyk7XG4gICAgfVxuXG4gICAgY29uc3QgZXhpc3RpbmdSZWYgPSBvYmplY3RSZWZlcmVuY2Uob2JqKTtcbiAgICBpZiAoZXhpc3RpbmdSZWYpIHtcbiAgICAgIGlmIChpbnRlcmZhY2VzKSB7XG4gICAgICAgIGNvbnN0IGFsbElmYWNlcyA9IG5ldyBTZXQoaW50ZXJmYWNlcyk7XG4gICAgICAgIGZvciAoY29uc3QgaWZhY2Ugb2YgZXhpc3RpbmdSZWZbYXBpLlRPS0VOX0lOVEVSRkFDRVNdID8/IFtdKSB7XG4gICAgICAgICAgYWxsSWZhY2VzLmFkZChpZmFjZSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gTm90ZSAtIG9ialtJTlRFUkZBQ0VTX1NZTUJPTF0gc2hvdWxkIGFscmVhZHkgaGF2ZSBiZWVuIGRlY2xhcmVkIGFzIGFcbiAgICAgICAgLy8gcHJpdmF0ZSBwcm9wZXJ0eSBieSBhIHByZXZpb3VzIGNhbGwgdG8gdGFnT2JqZWN0ICBhdCB0aGlzIHN0YWdlLlxuICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIElGQUNFU19TWU1CT0wpKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIGBbanNpaS9rZXJuZWxdIFdBUk5JTkc6IHJlZmVyZW5jZWQgb2JqZWN0ICR7XG4gICAgICAgICAgICAgIGV4aXN0aW5nUmVmW2FwaS5UT0tFTl9SRUZdXG4gICAgICAgICAgICB9IGRvZXMgbm90IGhhdmUgdGhlICR7U3RyaW5nKElGQUNFU19TWU1CT0wpfSBwcm9wZXJ0eSFgLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm9iamVjdHNbZXhpc3RpbmdSZWZbYXBpLlRPS0VOX1JFRl1dLmludGVyZmFjZXMgPVxuICAgICAgICAgIChvYmogYXMgYW55KVtJRkFDRVNfU1lNQk9MXSA9XG4gICAgICAgICAgZXhpc3RpbmdSZWZbYXBpLlRPS0VOX0lOVEVSRkFDRVNdID1cbiAgICAgICAgICBpbnRlcmZhY2VzID1cbiAgICAgICAgICAgIHRoaXMucmVtb3ZlUmVkdW5kYW50KEFycmF5LmZyb20oYWxsSWZhY2VzKSwgZnFuKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBleGlzdGluZ1JlZjtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2VzID0gdGhpcy5yZW1vdmVSZWR1bmRhbnQoaW50ZXJmYWNlcywgZnFuKTtcblxuICAgIGNvbnN0IG9iamlkID0gdGhpcy5tYWtlSWQoZnFuKTtcbiAgICB0aGlzLm9iamVjdHNbb2JqaWRdID0geyBpbnN0YW5jZTogb2JqLCBmcW4sIGludGVyZmFjZXMgfTtcbiAgICB0YWdPYmplY3Qob2JqLCBvYmppZCwgaW50ZXJmYWNlcyk7XG5cbiAgICByZXR1cm4geyBbYXBpLlRPS0VOX1JFRl06IG9iamlkLCBbYXBpLlRPS0VOX0lOVEVSRkFDRVNdOiBpbnRlcmZhY2VzIH07XG4gIH1cblxuICAvKipcbiAgICogRmluZCB0aGUgb2JqZWN0IGFuZCByZWdpc3RlcmVkIHR5cGUgZm9yIHRoZSBnaXZlbiBPYmpSZWZcbiAgICovXG4gIHB1YmxpYyBmaW5kT2JqZWN0KG9ianJlZjogYXBpLk9ialJlZik6IFJlZ2lzdGVyZWRPYmplY3Qge1xuICAgIGlmICh0eXBlb2Ygb2JqcmVmICE9PSAnb2JqZWN0JyB8fCAhKGFwaS5UT0tFTl9SRUYgaW4gb2JqcmVmKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBNYWxmb3JtZWQgb2JqZWN0IHJlZmVyZW5jZTogJHtKU09OLnN0cmluZ2lmeShvYmpyZWYpfWApO1xuICAgIH1cblxuICAgIGNvbnN0IG9iamlkID0gb2JqcmVmW2FwaS5UT0tFTl9SRUZdO1xuICAgIGNvbnN0IG9iaiA9IHRoaXMub2JqZWN0c1tvYmppZF07XG4gICAgaWYgKCFvYmopIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgT2JqZWN0ICR7b2JqaWR9IG5vdCBmb3VuZGApO1xuICAgIH1cblxuICAgIC8vIElmIHRoZXJlIGFyZSBcImFkZGl0aW9uYWxcIiBpbnRlcmZhY2VzIGRlY2xhcmVkIG9uIHRoZSBvYmpyZWYsIG1lcmdlIHRoZW1cbiAgICAvLyBpbnRvIHRoZSByZXR1cm5lZCBvYmplY3QuIFRoaXMgaXMgdXNlZCB0byBzdXBwb3J0IGNsaWVudC1zaWRlIGZvcmNlZFxuICAgIC8vIGRvd24tY2FzdGluZyAoYS5rLmE6IHVuc2FmZSBjYXN0aW5nKS4gV2UgZG8gTk9UIHJlZ2lzdGVyIHRoZSBleHRyYVxuICAgIC8vIGludGVyZmFjZXMgaGVyZSBzbyB0aGF0IGlmIHRoZSBjbGllbnQgcHJvdmlkZWQgYW4gaW50ZXJmYWNlIHRoYXQgaXNcbiAgICAvLyBhY3R1YWxseSBub3QgaW1wbGVtZW50ZWQsIHdlIGFyZW4ndCBcInBvaXNvbmluZ1wiIG91ciBzdGF0ZSB3aXRoIHRoYXRcbiAgICAvLyBpbmNvcnJlY3QgaW5mb3JtYXRpb24uXG4gICAgY29uc3QgYWRkaXRpb25hbEludGVyZmFjZXMgPSBvYmpyZWZbYXBpLlRPS0VOX0lOVEVSRkFDRVNdO1xuICAgIGlmIChhZGRpdGlvbmFsSW50ZXJmYWNlcyAhPSBudWxsICYmIGFkZGl0aW9uYWxJbnRlcmZhY2VzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLm9iaixcbiAgICAgICAgaW50ZXJmYWNlczogW1xuICAgICAgICAgIC4uLihvYmouaW50ZXJmYWNlcyA/PyBbXSksXG4gICAgICAgICAgLy8gV2UgYXBwZW5kIGF0IHRoZSBlbmQgc28gXCJyZWdpc3RlcmVkXCIgaW50ZXJmYWNlIGluZm9ybWF0aW9uIGhhc1xuICAgICAgICAgIC8vIHByZWNlZGVuY2Ugb3ZlciBjbGllbnQtZGVjbGFyZWQgb25lcy5cbiAgICAgICAgICAuLi5hZGRpdGlvbmFsSW50ZXJmYWNlcyxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGUgdGhlIHJlZ2lzdHJhdGlvbiB3aXRoIHRoZSBnaXZlbiBvYmpyZWZcbiAgICovXG4gIHB1YmxpYyBkZWxldGVPYmplY3Qob2JqcmVmOiBhcGkuT2JqUmVmKSB7XG4gICAgdGhpcy5maW5kT2JqZWN0KG9ianJlZik7IC8vIG1ha2Ugc3VyZSBvYmplY3QgZXhpc3RzXG4gICAgZGVsZXRlIHRoaXMub2JqZWN0c1tvYmpyZWZbYXBpLlRPS0VOX1JFRl1dO1xuICB9XG5cbiAgcHVibGljIGdldCBjb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLm9iamVjdHMpLmxlbmd0aDtcbiAgfVxuXG4gIHByaXZhdGUgbWFrZUlkKGZxbjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGAke2Zxbn1AJHt0aGlzLm5leHRpZCsrfWA7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZVJlZHVuZGFudChcbiAgICBpbnRlcmZhY2VzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCxcbiAgICBmcW46IHN0cmluZyxcbiAgKTogc3RyaW5nW10gfCB1bmRlZmluZWQge1xuICAgIGlmICghaW50ZXJmYWNlcyB8fCBpbnRlcmZhY2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBuZXcgU2V0KGludGVyZmFjZXMpO1xuICAgIGNvbnN0IGJ1aWx0SW4gPSBuZXcgSW50ZXJmYWNlQ29sbGVjdGlvbih0aGlzLnJlc29sdmVUeXBlKTtcblxuICAgIGlmIChmcW4gIT09IEVNUFRZX09CSkVDVF9GUU4pIHtcbiAgICAgIGJ1aWx0SW4uYWRkRnJvbUNsYXNzKGZxbik7XG4gICAgfVxuICAgIGludGVyZmFjZXMuZm9yRWFjaChidWlsdEluLmFkZEZyb21JbnRlcmZhY2UuYmluZChidWlsdEluKSk7XG5cbiAgICBmb3IgKGNvbnN0IGlmYWNlIG9mIGJ1aWx0SW4pIHtcbiAgICAgIHJlc3VsdC5kZWxldGUoaWZhY2UpO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQuc2l6ZSA+IDAgPyBBcnJheS5mcm9tKHJlc3VsdCkuc29ydCgpIDogdW5kZWZpbmVkO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVnaXN0ZXJlZE9iamVjdCB7XG4gIGluc3RhbmNlOiBhbnk7XG4gIGZxbjogc3RyaW5nO1xuICBpbnRlcmZhY2VzPzogc3RyaW5nW107XG59XG5cbmNsYXNzIEludGVyZmFjZUNvbGxlY3Rpb24gaW1wbGVtZW50cyBJdGVyYWJsZTxzdHJpbmc+IHtcbiAgcHJpdmF0ZSByZWFkb25seSBpbnRlcmZhY2VzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVzb2x2ZVR5cGU6IChmcW46IHN0cmluZykgPT4gc3BlYy5UeXBlLFxuICApIHt9XG5cbiAgcHVibGljIGFkZEZyb21DbGFzcyhmcW46IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHRpID0gdGhpcy5yZXNvbHZlVHlwZShmcW4pO1xuICAgIGlmICghc3BlYy5pc0NsYXNzVHlwZSh0aSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEV4cGVjdGVkIGEgY2xhc3MsIGJ1dCByZWNlaXZlZCAke3NwZWMuZGVzY3JpYmVUeXBlUmVmZXJlbmNlKHRpKX1gLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHRpLmJhc2UpIHtcbiAgICAgIHRoaXMuYWRkRnJvbUNsYXNzKHRpLmJhc2UpO1xuICAgIH1cbiAgICBpZiAodGkuaW50ZXJmYWNlcykge1xuICAgICAgZm9yIChjb25zdCBpZmFjZSBvZiB0aS5pbnRlcmZhY2VzKSB7XG4gICAgICAgIGlmICh0aGlzLmludGVyZmFjZXMuaGFzKGlmYWNlKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW50ZXJmYWNlcy5hZGQoaWZhY2UpO1xuICAgICAgICB0aGlzLmFkZEZyb21JbnRlcmZhY2UoaWZhY2UpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhZGRGcm9tSW50ZXJmYWNlKGZxbjogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgdGkgPSB0aGlzLnJlc29sdmVUeXBlKGZxbik7XG4gICAgaWYgKCFzcGVjLmlzSW50ZXJmYWNlVHlwZSh0aSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEV4cGVjdGVkIGFuIGludGVyZmFjZSwgYnV0IHJlY2VpdmVkICR7c3BlYy5kZXNjcmliZVR5cGVSZWZlcmVuY2UodGkpfWAsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoIXRpLmludGVyZmFjZXMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZm9yIChjb25zdCBpZmFjZSBvZiB0aS5pbnRlcmZhY2VzKSB7XG4gICAgICBpZiAodGhpcy5pbnRlcmZhY2VzLmhhcyhpZmFjZSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB0aGlzLmludGVyZmFjZXMuYWRkKGlmYWNlKTtcbiAgICAgIHRoaXMuYWRkRnJvbUludGVyZmFjZShpZmFjZSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIFtTeW1ib2wuaXRlcmF0b3JdKCkge1xuICAgIHJldHVybiB0aGlzLmludGVyZmFjZXNbU3ltYm9sLml0ZXJhdG9yXSgpO1xuICB9XG59XG4iXX0=
|
package/lib/on-exit.d.ts
CHANGED
package/lib/on-exit.js
CHANGED
|
@@ -29,4 +29,4 @@ function registerIfNeeded() {
|
|
|
29
29
|
}
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib24tZXhpdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9vbi1leGl0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtCQUErQjtBQUMvQixtQ0FBbUM7QUFFbkMsTUFBTSxlQUFlLEdBQUcsSUFBSSxLQUFLLEVBQVUsQ0FBQztBQUU1QyxTQUFnQixVQUFVLENBQUMsSUFBWTtJQUNyQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQ25CLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDN0IsQ0FBQztBQUhELGdDQUdDO0FBRUQsSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDO0FBRXZCOzs7O0dBSUc7QUFDSCxTQUFTLGdCQUFnQjtJQUN2QixJQUFJLFVBQVUsRUFBRTtRQUNkLE9BQU87S0FDUjtJQUNELE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQ3BDLFVBQVUsR0FBRyxJQUFJLENBQUM7SUFFbEIsU0FBUyxhQUFhO1FBQ3BCLElBQUksZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDOUIsS0FBSyxNQUFNLElBQUksSUFBSSxlQUFlLEVBQUU7Z0JBQ2xDLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDckI7U0FDRjtJQUNILENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0ICogYXMgcHJvY2VzcyBmcm9tICdwcm9jZXNzJztcblxuY29uc3QgcmVtb3ZlU3luY1BhdGhzID0gbmV3IEFycmF5PHN0cmluZz4oKTtcblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZVN5bmMocGF0aDogc3RyaW5nKTogdm9pZCB7XG4gIHJlZ2lzdGVySWZOZWVkZWQoKTtcbiAgcmVtb3ZlU3luY1BhdGhzLnB1c2gocGF0aCk7XG59XG5cbmxldCByZWdpc3RlcmVkID0gZmFsc2U7XG5cbi8qKlxuICogUmVnaXN0ZXJzIHRoZSBleGlzdCBoYW5kbGVyIGlmIGl0IGhhcyBub3QgYmVlbiByZWdpc3RlcmVkIGFscmVhZHkuIFRoaXMgaXMgZG9uZSBleGFjdGx5IG9jbmUgcGVyXG4gKiBwcm9jZXNzLCBzbyB0aGF0IHByb2Nlc3NlcyB3aXRoIG11bHRpcGxlIGtlcm5lbHMgZG9uJ3QgZW5kIHVwIGNyZWF0aW5nIHRvbyBtYW55IGV4aXQgaGFuZGxlcnMsIGFzXG4gKiB0aGlzIHJlZHVjZXMgdGhlIGNoYW5jZXMgdGhleSB3aWxsIGNvcnJlY3RseSBydW4uXG4gKi9cbmZ1bmN0aW9uIHJlZ2lzdGVySWZOZWVkZWQoKSB7XG4gIGlmIChyZWdpc3RlcmVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHByb2Nlc3Mub25jZSgnZXhpdCcsIG9uRXhpdEhhbmRsZXIpO1xuICByZWdpc3RlcmVkID0gdHJ1ZTtcblxuICBmdW5jdGlvbiBvbkV4aXRIYW5kbGVyKCkge1xuICAgIGlmIChyZW1vdmVTeW5jUGF0aHMubGVuZ3RoID4gMCkge1xuICAgICAgZm9yIChjb25zdCBwYXRoIG9mIHJlbW92ZVN5bmNQYXRocykge1xuICAgICAgICBmcy5yZW1vdmVTeW5jKHBhdGgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Kernel } from '
|
|
1
|
+
import { Kernel } from './kernel';
|
|
2
2
|
export declare function closeRecording(kernel: Kernel): Promise<void>;
|
|
3
3
|
/**
|
|
4
4
|
* Start recording all interaction with the kernel object.
|
|
@@ -11,3 +11,4 @@ export declare function closeRecording(kernel: Kernel): Promise<void>;
|
|
|
11
11
|
* @param outputLog Output log stream.
|
|
12
12
|
*/
|
|
13
13
|
export declare function recordInteraction(kernel: Kernel, inputOutputLogPath: string): void;
|
|
14
|
+
//# sourceMappingURL=recording.d.ts.map
|
package/lib/recording.js
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.recordInteraction = exports.closeRecording = void 0;
|
|
4
|
+
const fs = require("fs-extra");
|
|
5
|
+
const kernel_1 = require("./kernel");
|
|
6
|
+
async function closeRecording(kernel) {
|
|
7
|
+
const logfile = kernel.logfile;
|
|
8
|
+
if (!logfile) {
|
|
9
|
+
return Promise.resolve();
|
|
10
|
+
}
|
|
11
|
+
logfile.end();
|
|
12
|
+
return new Promise((ok) => {
|
|
13
|
+
logfile.once('finish', () => {
|
|
14
|
+
ok();
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
exports.closeRecording = closeRecording;
|
|
19
|
+
/**
|
|
20
|
+
* Start recording all interaction with the kernel object.
|
|
21
|
+
*
|
|
22
|
+
* This method installs a proxy function for each public API in the kernel (methods that do not
|
|
23
|
+
* start with '_') and records input requests and output requests into JSON stream files.
|
|
24
|
+
*
|
|
25
|
+
* @param kernel The kernel object to record.
|
|
26
|
+
* @param inputLog Input log stream
|
|
27
|
+
* @param outputLog Output log stream.
|
|
28
|
+
*/
|
|
29
|
+
function recordInteraction(kernel, inputOutputLogPath) {
|
|
30
|
+
const logfile = fs.createWriteStream(inputOutputLogPath);
|
|
31
|
+
kernel.logfile = logfile;
|
|
32
|
+
Object.entries(Object.getOwnPropertyDescriptors(kernel_1.Kernel.prototype))
|
|
33
|
+
.filter(([p, v]) => !p.startsWith('_') && typeof v.value === 'function')
|
|
34
|
+
.forEach(([api, old]) => {
|
|
35
|
+
Object.defineProperty(kernel, api, {
|
|
36
|
+
...old,
|
|
37
|
+
value(...args) {
|
|
38
|
+
logInput({ api, ...args[0] });
|
|
39
|
+
try {
|
|
40
|
+
const ret = old.value.apply(this, args);
|
|
41
|
+
// if this is an async function, wait for the promised value.
|
|
42
|
+
if (typeof (ret === null || ret === void 0 ? void 0 : ret.then) === 'function') {
|
|
43
|
+
return new Promise((ok, fail) => {
|
|
44
|
+
return ret
|
|
45
|
+
.then((value) => {
|
|
46
|
+
logOutput({ ok: value });
|
|
47
|
+
ok(value);
|
|
48
|
+
})
|
|
49
|
+
.catch((err) => {
|
|
50
|
+
logOutput({ error: err.message });
|
|
51
|
+
fail(err);
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
logOutput({ ok: ret });
|
|
56
|
+
return ret;
|
|
57
|
+
}
|
|
58
|
+
catch (e) {
|
|
59
|
+
logOutput({ error: e.message });
|
|
60
|
+
throw e;
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
function logInput(obj) {
|
|
66
|
+
logfile.write(`> ${JSON.stringify(obj)}\n`);
|
|
67
|
+
}
|
|
68
|
+
function logOutput(obj) {
|
|
69
|
+
logfile.write(`< ${JSON.stringify(obj)}\n`);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
exports.recordInteraction = recordInteraction;
|
|
73
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3JkaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3JlY29yZGluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrQkFBK0I7QUFFL0IscUNBQWtDO0FBRTNCLEtBQUssVUFBVSxjQUFjLENBQUMsTUFBYztJQUNqRCxNQUFNLE9BQU8sR0FBb0IsTUFBYyxDQUFDLE9BQU8sQ0FBQztJQUN4RCxJQUFJLENBQUMsT0FBTyxFQUFFO1FBQ1osT0FBTyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7S0FDMUI7SUFFRCxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7SUFFZCxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUU7UUFDeEIsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFO1lBQzFCLEVBQUUsRUFBRSxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFiRCx3Q0FhQztBQUVEOzs7Ozs7Ozs7R0FTRztBQUNILFNBQWdCLGlCQUFpQixDQUFDLE1BQWMsRUFBRSxrQkFBMEI7SUFDMUUsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDLGlCQUFpQixDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDeEQsTUFBYyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7SUFFbEMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMseUJBQXlCLENBQUMsZUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQy9ELE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksT0FBTyxDQUFDLENBQUMsS0FBSyxLQUFLLFVBQVUsQ0FBQztTQUN2RSxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFO1FBQ3RCLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRTtZQUNqQyxHQUFHLEdBQUc7WUFDTixLQUFLLENBQUMsR0FBRyxJQUFXO2dCQUNsQixRQUFRLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUM5QixJQUFJO29CQUNGLE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFFeEMsNkRBQTZEO29CQUM3RCxJQUFJLFFBQU8sR0FBRyxhQUFILEdBQUcsdUJBQUgsR0FBRyxDQUFFLElBQUksQ0FBQSxLQUFLLFVBQVUsRUFBRTt3QkFDbkMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRTs0QkFDOUIsT0FBTyxHQUFHO2lDQUNQLElBQUksQ0FBQyxDQUFDLEtBQVUsRUFBRSxFQUFFO2dDQUNuQixTQUFTLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztnQ0FDekIsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDOzRCQUNaLENBQUMsQ0FBQztpQ0FDRCxLQUFLLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQ0FDbEIsU0FBUyxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO2dDQUNsQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7NEJBQ1osQ0FBQyxDQUFDLENBQUM7d0JBQ1AsQ0FBQyxDQUFDLENBQUM7cUJBQ0o7b0JBRUQsU0FBUyxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7b0JBQ3ZCLE9BQU8sR0FBRyxDQUFDO2lCQUNaO2dCQUFDLE9BQU8sQ0FBQyxFQUFFO29CQUNWLFNBQVMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztvQkFDaEMsTUFBTSxDQUFDLENBQUM7aUJBQ1Q7WUFDSCxDQUFDO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFTCxTQUFTLFFBQVEsQ0FBQyxHQUFRO1FBQ3hCLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQsU0FBUyxTQUFTLENBQUMsR0FBUTtRQUN6QixPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDOUMsQ0FBQztBQUNILENBQUM7QUE5Q0QsOENBOENDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMtZXh0cmEnO1xuXG5pbXBvcnQgeyBLZXJuZWwgfSBmcm9tICcuL2tlcm5lbCc7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjbG9zZVJlY29yZGluZyhrZXJuZWw6IEtlcm5lbCk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBsb2dmaWxlOiBmcy5Xcml0ZVN0cmVhbSA9IChrZXJuZWwgYXMgYW55KS5sb2dmaWxlO1xuICBpZiAoIWxvZ2ZpbGUpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cblxuICBsb2dmaWxlLmVuZCgpO1xuXG4gIHJldHVybiBuZXcgUHJvbWlzZSgob2spID0+IHtcbiAgICBsb2dmaWxlLm9uY2UoJ2ZpbmlzaCcsICgpID0+IHtcbiAgICAgIG9rKCk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFN0YXJ0IHJlY29yZGluZyBhbGwgaW50ZXJhY3Rpb24gd2l0aCB0aGUga2VybmVsIG9iamVjdC5cbiAqXG4gKiBUaGlzIG1ldGhvZCBpbnN0YWxscyBhIHByb3h5IGZ1bmN0aW9uIGZvciBlYWNoIHB1YmxpYyBBUEkgaW4gdGhlIGtlcm5lbCAobWV0aG9kcyB0aGF0IGRvIG5vdFxuICogc3RhcnQgd2l0aCAnXycpIGFuZCByZWNvcmRzIGlucHV0IHJlcXVlc3RzIGFuZCBvdXRwdXQgcmVxdWVzdHMgaW50byBKU09OIHN0cmVhbSBmaWxlcy5cbiAqXG4gKiBAcGFyYW0ga2VybmVsIFRoZSBrZXJuZWwgb2JqZWN0IHRvIHJlY29yZC5cbiAqIEBwYXJhbSBpbnB1dExvZyBJbnB1dCBsb2cgc3RyZWFtXG4gKiBAcGFyYW0gb3V0cHV0TG9nIE91dHB1dCBsb2cgc3RyZWFtLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVjb3JkSW50ZXJhY3Rpb24oa2VybmVsOiBLZXJuZWwsIGlucHV0T3V0cHV0TG9nUGF0aDogc3RyaW5nKSB7XG4gIGNvbnN0IGxvZ2ZpbGUgPSBmcy5jcmVhdGVXcml0ZVN0cmVhbShpbnB1dE91dHB1dExvZ1BhdGgpO1xuICAoa2VybmVsIGFzIGFueSkubG9nZmlsZSA9IGxvZ2ZpbGU7XG5cbiAgT2JqZWN0LmVudHJpZXMoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoS2VybmVsLnByb3RvdHlwZSkpXG4gICAgLmZpbHRlcigoW3AsIHZdKSA9PiAhcC5zdGFydHNXaXRoKCdfJykgJiYgdHlwZW9mIHYudmFsdWUgPT09ICdmdW5jdGlvbicpXG4gICAgLmZvckVhY2goKFthcGksIG9sZF0pID0+IHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShrZXJuZWwsIGFwaSwge1xuICAgICAgICAuLi5vbGQsXG4gICAgICAgIHZhbHVlKC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgICAgICAgbG9nSW5wdXQoeyBhcGksIC4uLmFyZ3NbMF0gfSk7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJldCA9IG9sZC52YWx1ZS5hcHBseSh0aGlzLCBhcmdzKTtcblxuICAgICAgICAgICAgLy8gaWYgdGhpcyBpcyBhbiBhc3luYyBmdW5jdGlvbiwgd2FpdCBmb3IgdGhlIHByb21pc2VkIHZhbHVlLlxuICAgICAgICAgICAgaWYgKHR5cGVvZiByZXQ/LnRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChvaywgZmFpbCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXRcbiAgICAgICAgICAgICAgICAgIC50aGVuKCh2YWx1ZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxvZ091dHB1dCh7IG9rOiB2YWx1ZSB9KTtcbiAgICAgICAgICAgICAgICAgICAgb2sodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgIC5jYXRjaCgoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbG9nT3V0cHV0KHsgZXJyb3I6IGVyci5tZXNzYWdlIH0pO1xuICAgICAgICAgICAgICAgICAgICBmYWlsKGVycik7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxvZ091dHB1dCh7IG9rOiByZXQgfSk7XG4gICAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGxvZ091dHB1dCh7IGVycm9yOiBlLm1lc3NhZ2UgfSk7XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gIGZ1bmN0aW9uIGxvZ0lucHV0KG9iajogYW55KSB7XG4gICAgbG9nZmlsZS53cml0ZShgPiAke0pTT04uc3RyaW5naWZ5KG9iail9XFxuYCk7XG4gIH1cblxuICBmdW5jdGlvbiBsb2dPdXRwdXQob2JqOiBhbnkpIHtcbiAgICBsb2dmaWxlLndyaXRlKGA8ICR7SlNPTi5zdHJpbmdpZnkob2JqKX1cXG5gKTtcbiAgfVxufVxuIl19
|
package/lib/serialization.d.ts
CHANGED
package/lib/serialization.js
CHANGED
|
@@ -709,4 +709,4 @@ function isByReferenceOnly(obj) {
|
|
|
709
709
|
} while (Object.getPrototypeOf((curr = Object.getPrototypeOf(curr))) != null);
|
|
710
710
|
return false;
|
|
711
711
|
}
|
|
712
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VyaWFsaXphdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInNlcmlhbGl6YXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBCRzs7O0FBRUgsbUNBQW1DO0FBRW5DLCtCQWFlO0FBQ2YsdUNBQXNFO0FBRXRFLHdCQUF3QjtBQW9CeEI7O0dBRUc7QUFDVSxRQUFBLGdCQUFnQixHQUFHLFFBQVEsQ0FBQztBQUU1QixRQUFBLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQTBDakQsUUFBQSxXQUFXLEdBQWdDO0lBQ3RELHlFQUF5RTtJQUN6RSxtQkFBeUIsRUFBRTtRQUN6QixTQUFTLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJO1lBQzFCLElBQUksS0FBSyxJQUFJLElBQUksRUFBRTtnQkFDakIsSUFBSSxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsRUFBRSxLQUFLLENBQUMsQ0FBQzthQUN6QztZQUNELE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7UUFFRCxXQUFXLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJO1lBQzVCLElBQUksS0FBSyxJQUFJLElBQUksRUFBRTtnQkFDakIsSUFBSSxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsRUFBRSxLQUFLLENBQUMsQ0FBQzthQUN6QztZQUNELE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7S0FDRjtJQUVELHlFQUF5RTtJQUN6RSxtQkFBeUIsRUFBRTtRQUN6QixTQUFTLENBQUMsS0FBSyxFQUFFLGFBQWE7WUFDNUIsSUFBSSxTQUFTLENBQUMsS0FBSyxFQUFFLGFBQWEsQ0FBQyxFQUFFO2dCQUNuQyxPQUFPLFNBQVMsQ0FBQzthQUNsQjtZQUNELElBQUksYUFBYSxLQUFLLE1BQU0sRUFBRTtnQkFDNUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO2FBQ3ZE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TUFBTSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ25ELE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDMUQsSUFDRSxDQUFBLEtBQUssYUFBTCxLQUFLLHVCQUFMLEtBQUssQ0FBRSxHQUFHLEtBQUksSUFBSTtnQkFDbEIsQ0FBQSxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsR0FBRyxLQUFJLElBQUk7Z0JBQ2xCLFFBQU8sS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLEtBQUssQ0FBQSxLQUFLLFVBQVUsRUFDbEM7Z0JBQ0Esd0ZBQXdGO2dCQUN4RixPQUFPLElBQUksQ0FBQzthQUNiO1NBQ0Y7UUFDRCwyRUFBMkU7S0FDNUUsUUFBUSxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRTtJQUU5RSxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEhhbmRsaW5nIG9mIHR5cGVzIGluIEpTSUlcbiAqXG4gKiBUeXBlcyB3aWxsIGJlIHNlcmlhbGl6ZWQgYWNjb3JkaW5nIHRvIHRoZSBmb2xsb3dpbmcgdGFibGU6XG4gKlxuICogICAgICAgICAgICAgICAgICAgICAgICAg4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICDilIIgSkFWQVNDUklQVCBUWVBFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKUglxuICogICAgICAgICAgICAgICAgICAgICAgICAg4pS84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICDilIIgdW5kZWZpbmVkL251bGwg4pSCICAgZGF0ZSAgICDilIIgc2NhbGFyICgqKSDilIIgICAgIGFycmF5ICAgICDilIIgSlNJSS1jbGFzcyBvYmplY3Qg4pSCIGxpdGVyYWwgb2JqZWN0ICDilIJcbiAqIOKUnOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUpFxuICog4pSCIERFQ0xBUkVEIOKUgiB2b2lkICAgICAgIOKUgiB1bmRlZmluZWQgICAgICDilIIgdW5kZWZpbmVkIOKUgiB1bmRlZmluZWQgIOKUgiB1bmRlZmluZWQgICAgIOKUgiB1bmRlZmluZWQgICAgICAgICDilIIgdW5kZWZpbmVkICAgICAgIOKUglxuICog4pSCIFRZUEUgICAgIOKUgiBkYXRlICAgICAgIOKUgiB1bmRlZmluZWQo4oCgKSAgIOKUgiB7IGRhdGUgfSAg4pSCIC0gICAgICAgICAg4pSCIC0gICAgICAgICAgICAg4pSCIC0gICAgICAgICAgICAgICAgIOKUgiAtICAgICAgICAgICAgICAg4pSCXG4gKiDilIIgICAgICAgICAg4pSCIHNjYWxhciAoKikg4pSCIHVuZGVmaW5lZCjigKApICAg4pSCIC0gICAgICAgICDilIIgdmFsdWUgICAgICDilIIgLSAgICAgICAgICAgICDilIIgLSAgICAgICAgICAgICAgICAg4pSCIC0gICAgICAgICAgICAgICDilIJcbiAqIOKUgiAgICAgICAgICDilIIganNvbiAgICAgICDilIIgdW5kZWZpbmVkICAgICAg4pSCIHN0cmluZyAgICDilIIgdmFsdWUgICAgICDilIIgYXJyYXkvUihqc29uKSDilIIgLSAgICAgICAgICAgICAgICAg4pSCIGJ5dmFsdWUvUihqc29uKSDilIJcbiAqIOKUgiAgICAgICAgICDilIIgZW51bSAgICAgICDilIIgdW5kZWZpbmVkKOKAoCkgICDilIIgLSAgICAgICAgIOKUgiB7IGVudW0gfSAgIOKUgiAtICAgICAgICAgICAgIOKUgiAtICAgICAgICAgICAgICAgICDilIIgLSAgICAgICAgICAgICAgIOKUglxuICog4pSCICAgICAgICAgIOKUgiBhcnJheSBvZiBUIOKUgiB1bmRlZmluZWQo4oCgKSAgIOKUgiAtICAgICAgICAg4pSCIC0gICAgICAgICAg4pSCIGFycmF5L1IoVCkgICAg4pSCIC0gICAgICAgICAgICAgICAgIOKUgiAtICAgICAgICAgICAgICAg4pSCXG4gKiDilIIgICAgICAgICAg4pSCIG1hcCBvZiBUICAg4pSCIHVuZGVmaW5lZCjigKApICAg4pSCIC0gICAgICAgICDilIIgLSAgICAgICAgICDilIIgLSAgICAgICAgICAgICDilIIgLSAgICAgICAgICAgICAgICAg4pSCIGJ5dmFsdWUvUihUKSAgICDilIJcbiAqIOKUgiAgICAgICAgICDilIIgaW50ZXJmYWNlICDilIIgdW5kZWZpbmVkKOKAoCkgICDilIIgLSAgICAgICAgIOKUgiAtICAgICAgICAgIOKUgiAtICAgICAgICAgICAgIOKUgiB7IHJlZiB9ICAgICAgICAgICDilIIgeyByZWY6IHByb3h5IH0gIOKUglxuICog4pSCICAgICAgICAgIOKUgiBzdHJ1Y3QgICAgIOKUgiB1bmRlZmluZWQo4oCgKSAgIOKUgiAtICAgICAgICAg4pSCIC0gICAgICAgICAg4pSCIC0gICAgICAgICAgICAg4pSCIC0gICAgICAgICAgICAgICAgIOKUgiBieXZhbHVlL1IoVFtrXSkg4pSCXG4gKiDilIIgICAgICAgICAg4pSCIGNsYXNzICAgICAg4pSCIHVuZGVmaW5lZCjigKApICAg4pSCIC0gICAgICAgICDilIIgLSAgICAgICAgICDilIIgLSAgICAgICAgICAgICDilIIgeyByZWYgfSAgICAgICAgICAg4pSCIHsgcmVmOiBwcm94eSB9ICDilIJcbiAqIOKUgiAgICAgICAgICDilIIgYW55ICAgICAgICDilIIgdW5kZWZpbmVkICAgICAg4pSCIHsgZGF0ZSB9ICDilIIgdmFsdWUgICAgICDilIIgYXJyYXkvUihhbnkpICDilIIgeyByZWYgfSAgICAgICAgICAg4pSCIGJ5dmFsdWUvUihhbnkpICDilIJcbiAqIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICpcbiAqICAtICgqKSBzY2FsYXIgbWVhbnMgJ3N0cmluZyB8IG51bWJlciB8IGJvb2xlYW4nXG4gKiAgLSAo4oCgKSB0aHJvdyBpZiBub3QgbnVsbGFibGVcbiAqICAtIC9SKHQpIHJlY3Vyc2Ugd2l0aCBkZWNsYXJlZCB0eXBlIHRcbiAqL1xuXG5pbXBvcnQgKiBhcyBzcGVjIGZyb20gJ0Bqc2lpL3NwZWMnO1xuXG5pbXBvcnQge1xuICBpc09ialJlZixcbiAgaXNXaXJlRGF0ZSxcbiAgaXNXaXJlRW51bSxcbiAgaXNXaXJlTWFwLFxuICBPYmpSZWYsXG4gIFRPS0VOX0RBVEUsXG4gIFRPS0VOX0VOVU0sXG4gIFRPS0VOX01BUCxcbiAgV2lyZURhdGUsXG4gIFdpcmVFbnVtLFxuICBpc1dpcmVTdHJ1Y3QsXG4gIFRPS0VOX1NUUlVDVCxcbn0gZnJvbSAnLi9hcGknO1xuaW1wb3J0IHsganNpaVR5cGVGcW4sIG9iamVjdFJlZmVyZW5jZSwgT2JqZWN0VGFibGUgfSBmcm9tICcuL29iamVjdHMnO1xuXG5pbXBvcnQgeyBhcGkgfSBmcm9tICcuJztcblxuLyoqXG4gKiBBIHNwZWNpZmljIHNpbmdsZXRvbiB0eXBlIHRvIGJlIGV4cGxpY2l0IGFib3V0IGEgVm9pZCB0eXBlXG4gKlxuICogSW4gdGhlIHNwZWMsICd2b2lkJyBpcyByZXByZXNlbnRlZCBhcyAndW5kZWZpbmVkJygqKSwgYnV0IGFsbG93aW5nIHRoZVxuICogdmFsdWUgJ3VuZGVmaW5lZCcgaW4gZnVuY3Rpb24gY2FsbHMgaGFzIGxlYWQgdG8gY29uc3VtZXJzIGZhaWxpbmcgdG8gcGFzc1xuICogdHlwZSBpbmZvcm1hdGlvbiB0aGF0IHRoZXkgaGFkLCBqdXN0IGJlY2F1c2UgdGhleSBkaWRuJ3QgXCJoYXZlIHRvXCIgKHRoZVxuICogcGFyYW1ldGVyIHdhcyBvcHRpb25hbCkuXG4gKlxuICogKCopIEFzIGluLCBkZWNsYXJhdGlvbiBvZiBhIG1ldGhvZCBsb29rcyBsaWtlIHsgcmV0dXJucz86IFR5cGVSZWZlcmVuY2UgfVxuICogYW5kIHRoZSBhYnNlbmNlIG9mIGEgdHlwZSBtZWFucyBpdCByZXR1cm5zICd2b2lkJy5cbiAqL1xuZXhwb3J0IHR5cGUgVm9pZCA9ICd2b2lkJztcblxuLyoqXG4gKiBBIHR5cGUgaW5zdGFuY2UsIG9yIFZvaWRcbiAqL1xuZXhwb3J0IHR5cGUgT3B0aW9uYWxWYWx1ZU9yVm9pZCA9IHNwZWMuT3B0aW9uYWxWYWx1ZSB8IFZvaWQ7XG5cbi8qKlxuICogQSBzcGVjaWFsIEZRTiB0aGF0IGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSBlbXB0eSBqYXZhc2NyaXB0IG9iamVjdHMuXG4gKi9cbmV4cG9ydCBjb25zdCBFTVBUWV9PQkpFQ1RfRlFOID0gJ09iamVjdCc7XG5cbmV4cG9ydCBjb25zdCBTWU1CT0xfV0lSRV9UWVBFID0gU3ltYm9sLmZvcignJGpzaWkkd2lyZVR5cGUkJyk7XG5cbi8qKlxuICogVGhlIHR5cGUga2luZCwgdGhhdCBjb250cm9scyBob3cgaXQgd2lsbCBiZSBzZXJpYWxpemVkIGFjY29yZGluZyB0byB0aGUgYWJvdmUgdGFibGVcbiAqL1xuZXhwb3J0IGNvbnN0IGVudW0gU2VyaWFsaXphdGlvbkNsYXNzIHtcbiAgVm9pZCA9ICdWb2lkJyxcbiAgRGF0ZSA9ICdEYXRlJyxcbiAgU2NhbGFyID0gJ1NjYWxhcicsXG4gIEpzb24gPSAnSnNvbicsXG4gIEVudW0gPSAnRW51bScsXG4gIEFycmF5ID0gJ0FycmF5JyxcbiAgTWFwID0gJ01hcCcsXG4gIFN0cnVjdCA9ICdTdHJ1Y3QnLFxuICBSZWZlcmVuY2VUeXBlID0gJ1JlZlR5cGUnLFxuICBBbnkgPSAnQW55Jyxcbn1cblxudHlwZSBUeXBlTG9va3VwID0gKGZxbjogc3BlYy5GUU4pID0+IHNwZWMuVHlwZTtcbnR5cGUgU3ltYm9sTG9va3VwID0gKGZxbjogc3BlYy5GUU4pID0+IGFueTtcblxuZXhwb3J0IGludGVyZmFjZSBTZXJpYWxpemVySG9zdCB7XG4gIHJlYWRvbmx5IG9iamVjdHM6IE9iamVjdFRhYmxlO1xuICBkZWJ1ZyguLi5hcmdzOiBhbnlbXSk6IHZvaWQ7XG4gIGxvb2t1cFR5cGUoZnFuOiBzdHJpbmcpOiBzcGVjLlR5cGU7XG4gIHJlY3Vyc2UoeDogYW55LCB0eXBlOiBPcHRpb25hbFZhbHVlT3JWb2lkKTogYW55O1xuICBmaW5kU3ltYm9sKGZxbjogc3BlYy5GUU4pOiBhbnk7XG59XG5cbmludGVyZmFjZSBTZXJpYWxpemVyIHtcbiAgc2VyaWFsaXplKFxuICAgIHZhbHVlOiB1bmtub3duLFxuICAgIHR5cGU6IE9wdGlvbmFsVmFsdWVPclZvaWQsXG4gICAgaG9zdDogU2VyaWFsaXplckhvc3QsXG4gICk6IGFueTtcbiAgZGVzZXJpYWxpemUoXG4gICAgdmFsdWU6IHVua25vd24sXG4gICAgdHlwZTogT3B0aW9uYWxWYWx1ZU9yVm9pZCxcbiAgICBob3N0OiBTZXJpYWxpemVySG9zdCxcbiAgKTogYW55O1xufVxuXG5leHBvcnQgY29uc3QgU0VSSUFMSVpFUlM6IHsgW2s6IHN0cmluZ106IFNlcmlhbGl6ZXIgfSA9IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICBbU2VyaWFsaXphdGlvbkNsYXNzLlZvaWRdOiB7XG4gICAgc2VyaWFsaXplKHZhbHVlLCBfdHlwZSwgaG9zdCkge1xuICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgaG9zdC5kZWJ1ZygnRXhwZWN0ZWQgdm9pZCwgZ290JywgdmFsdWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9LFxuXG4gICAgZGVzZXJpYWxpemUodmFsdWUsIF90eXBlLCBob3N0KSB7XG4gICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgICBob3N0LmRlYnVnKCdFeHBlY3RlZCB2b2lkLCBnb3QnLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0sXG4gIH0sXG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICBbU2VyaWFsaXphdGlvbkNsYXNzLkRhdGVdOiB7XG4gICAgc2VyaWFsaXplKHZhbHVlLCBvcHRpb25hbFZhbHVlKTogV2lyZURhdGUgfCB1bmRlZmluZWQge1xuICAgICAgaWYgKG51bGxBbmRPayh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25hbFZhbHVlID09PSAndm9pZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFbmNvdW50ZXJlZCB1bmV4cGVjdGVkIGB2b2lkYCB0eXBlJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNEYXRlKHZhbHVlKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIERhdGUsIGdvdCAke0pTT04uc3RyaW5naWZ5KHZhbHVlKX1gKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzZXJpYWxpemVEYXRlKHZhbHVlKTtcbiAgICB9LFxuXG4gICAgZGVzZXJpYWxpemUodmFsdWUsIG9wdGlvbmFsVmFsdWUpIHtcbiAgICAgIGlmIChudWxsQW5kT2sodmFsdWUsIG9wdGlvbmFsVmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNXaXJlRGF0ZSh2YWx1ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBEYXRlLCBnb3QgJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9YCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGVzZXJpYWxpemVEYXRlKHZhbHVlKTtcbiAgICB9LFxuICB9LFxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgW1NlcmlhbGl6YXRpb25DbGFzcy5TY2FsYXJdOiB7XG4gICAgc2VyaWFsaXplKHZhbHVlLCBvcHRpb25hbFZhbHVlKSB7XG4gICAgICBpZiAobnVsbEFuZE9rKHZhbHVlLCBvcHRpb25hbFZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbmFsVmFsdWUgPT09ICd2b2lkJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VuY291bnRlcmVkIHVuZXhwZWN0ZWQgYHZvaWRgIHR5cGUnKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcHJpbWl0aXZlVHlwZSA9IG9wdGlvbmFsVmFsdWUudHlwZSBhcyBzcGVjLlByaW1pdGl2ZVR5cGVSZWZlcmVuY2U7XG5cbiAgICAgIGlmICghaXNTY2FsYXIodmFsdWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgRXhwZWN0ZWQgJHtzcGVjLmRlc2NyaWJlVHlwZVJlZmVyZW5jZShcbiAgICAgICAgICAgIG9wdGlvbmFsVmFsdWUudHlwZSxcbiAgICAgICAgICApfSwgZ290ICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBwcmltaXRpdmVUeXBlLnByaW1pdGl2ZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEV4cGVjdGVkIGEgJHtzcGVjLmRlc2NyaWJlVHlwZVJlZmVyZW5jZShcbiAgICAgICAgICAgIG9wdGlvbmFsVmFsdWUudHlwZSxcbiAgICAgICAgICApfSwgZ290ICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfSAoJHt0eXBlb2YgdmFsdWV9KWAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfSxcblxuICAgIGRlc2VyaWFsaXplKHZhbHVlLCBvcHRpb25hbFZhbHVlKSB7XG4gICAgICBpZiAobnVsbEFuZE9rKHZhbHVlLCBvcHRpb25hbFZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbmFsVmFsdWUgPT09ICd2b2lkJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VuY291bnRlcmVkIHVuZXhwZWN0ZWQgYHZvaWRgIHR5cGUnKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcHJpbWl0aXZlVHlwZSA9IG9wdGlvbmFsVmFsdWUudHlwZSBhcyBzcGVjLlByaW1pdGl2ZVR5cGVSZWZlcmVuY2U7XG5cbiAgICAgIGlmICghaXNTY2FsYXIodmFsdWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgRXhwZWN0ZWQgYSAke3NwZWMuZGVzY3JpYmVUeXBlUmVmZXJlbmNlKFxuICAgICAgICAgICAgb3B0aW9uYWxWYWx1ZS50eXBlLFxuICAgICAgICAgICl9LCBnb3QgJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9YCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IHByaW1pdGl2ZVR5cGUucHJpbWl0aXZlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgRXhwZWN0ZWQgYSAke3NwZWMuZGVzY3JpYmVUeXBlUmVmZXJlbmNlKFxuICAgICAgICAgICAgb3B0aW9uYWxWYWx1ZS50eXBlLFxuICAgICAgICAgICl9LCBnb3QgJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9ICgke3R5cGVvZiB2YWx1ZX0pYCxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0sXG4gIH0sXG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICBbU2VyaWFsaXphdGlvbkNsYXNzLkpzb25dOiB7XG4gICAgc2VyaWFsaXplKHZhbHVlKSB7XG4gICAgICAvLyBKdXN0IHdoYXRldmVyLiBEYXRlcyB3aWxsIGF1dG9tYXRpY2FsbHkgc2VyaWFsaXplIHRoZW1zZWx2ZXMgdG8gc3RyaW5ncy5cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9LFxuICAgIGRlc2VyaWFsaXplKHZhbHVlLCBvcHRpb25hbFZhbHVlLCBob3N0KSB7XG4gICAgICAvLyAvIVxcIFRvcC1sZXZlbCBcIm51bGxcIiB3aWxsIHR1cm4gdG8gdW5kZWZpbmVkLCBidXQgYW55IG51bGwgbmVzdGVkIGluIHRoZSB2YWx1ZSBpcyB2YWxpZCBKU09OLCBzbyBpdCdsbCBzdGF5IVxuICAgICAgaWYgKG51bGxBbmRPayh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgLy8gQSBtYXBwaW5nIG9iamVjdCBjYW4gYXJyaXZlIHRob3VnaCBoZXJlLiBUaGlzIHdvdWxkIGJlIHRoZSBjYXNlIGlmIGFueXRoaW5nIHRoYXQgaXMgdmFsaWQgaW50byBhIE1hcDxzdHJpbmcsID8+XG4gICAgICAvLyBpcyBwYXNzZWQgaW50byBhIEpTT04gdHJhbnNmZXIgcG9pbnQuIEluZGVlZCwgdGhvc2UgYXJlIGFsc28gdmFsaWQgSlNPTiEgRm9yIGV4YW1wbGUsIFB5dGhvbiBcImRpY3RzXCIgd2lsbCBiZVxuICAgICAgLy8gc2VyaWFsaXplZCAoYnkgdGhlIFB5dGhvbiBydW50aW1lKSBhcyBhICRqc2lpLm1hcCAodGhlIG1hcHBpbmcgb2JqZWN0KS4gV2UgbmVlZCB0byBkZS1zZXJpYWxpemUgdGhhdCBhcyBhXG4gICAgICAvLyBNYXA8c3RyaW5nLCBKU09OPiBpbiBvcmRlciB0byBvYnRhaW4gdGhlIGNvcnJlY3Qgb3V0cHV0IGJlaGF2aW9yIGhlcmUhXG4gICAgICBpZiAoaXNXaXJlTWFwKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gU0VSSUFMSVpFUlNbU2VyaWFsaXphdGlvbkNsYXNzLk1hcF0uZGVzZXJpYWxpemUoXG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgICAge1xuICAgICAgICAgICAgb3B0aW9uYWw6IGZhbHNlLFxuICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICBjb2xsZWN0aW9uOiB7XG4gICAgICAgICAgICAgICAga2luZDogc3BlYy5Db2xsZWN0aW9uS2luZC5NYXAsXG4gICAgICAgICAgICAgICAgZWxlbWVudHR5cGU6IHsgcHJpbWl0aXZlOiBzcGVjLlByaW1pdGl2ZVR5cGUuSnNvbiB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGhvc3QsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS5tYXAobWFwSnNvblZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG1hcFZhbHVlcyh2YWx1ZSwgbWFwSnNvblZhbHVlKTtcblxuICAgICAgZnVuY3Rpb24gbWFwSnNvblZhbHVlKHRvTWFwOiBhbnkpIHtcbiAgICAgICAgaWYgKHRvTWFwID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gdG9NYXA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGhvc3QucmVjdXJzZSh0b01hcCwge1xuICAgICAgICAgIHR5cGU6IHsgcHJpbWl0aXZlOiBzcGVjLlByaW1pdGl2ZVR5cGUuSnNvbiB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICB9LFxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgW1NlcmlhbGl6YXRpb25DbGFzcy5FbnVtXToge1xuICAgIHNlcmlhbGl6ZSh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSwgaG9zdCk6IFdpcmVFbnVtIHwgdW5kZWZpbmVkIHtcbiAgICAgIGlmIChudWxsQW5kT2sodmFsdWUsIG9wdGlvbmFsVmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBpZiAob3B0aW9uYWxWYWx1ZSA9PT0gJ3ZvaWQnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRW5jb3VudGVyZWQgdW5leHBlY3RlZCBgdm9pZGAgdHlwZScpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJyAmJiB0eXBlb2YgdmFsdWUgIT09ICdudW1iZXInKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgZW51bSB2YWx1ZSwgZ290ICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWApO1xuICAgICAgfVxuXG4gICAgICBob3N0LmRlYnVnKCdTZXJpYWxpemluZyBlbnVtJyk7XG5cbiAgICAgIGNvbnN0IGVudW1UeXBlID0gb3B0aW9uYWxWYWx1ZS50eXBlIGFzIHNwZWMuTmFtZWRUeXBlUmVmZXJlbmNlO1xuICAgICAgY29uc3QgZW51bU1hcCA9IGhvc3QuZmluZFN5bWJvbChlbnVtVHlwZS5mcW4pO1xuICAgICAgY29uc3QgZW51bUVudHJ5ID0gT2JqZWN0LmVudHJpZXMoZW51bU1hcCkuZmluZCgoWywgdl0pID0+IHYgPT09IHZhbHVlKTtcbiAgICAgIGlmICghZW51bUVudHJ5KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gZW50cnkgaW4gJHtlbnVtVHlwZS5mcW59IGhhcyB2YWx1ZSAke3ZhbHVlfWApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHsgW1RPS0VOX0VOVU1dOiBgJHtlbnVtVHlwZS5mcW59LyR7ZW51bUVudHJ5WzBdfWAgfTtcbiAgICB9LFxuICAgIGRlc2VyaWFsaXplKHZhbHVlLCBvcHRpb25hbFZhbHVlLCBob3N0KSB7XG4gICAgICBpZiAobnVsbEFuZE9rKHZhbHVlLCBvcHRpb25hbFZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWlzV2lyZUVudW0odmFsdWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgZW51bSB2YWx1ZSwgZ290ICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGVzZXJpYWxpemVFbnVtKHZhbHVlLCBob3N0LmZpbmRTeW1ib2wpO1xuICAgIH0sXG4gIH0sXG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICBbU2VyaWFsaXphdGlvbkNsYXNzLkFycmF5XToge1xuICAgIHNlcmlhbGl6ZSh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSwgaG9zdCkge1xuICAgICAgaWYgKG51bGxBbmRPayh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25hbFZhbHVlID09PSAndm9pZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFbmNvdW50ZXJlZCB1bmV4cGVjdGVkIGB2b2lkYCB0eXBlJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBhcnJheSB0eXBlLCBnb3QgJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9YCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFycmF5VHlwZSA9IG9wdGlvbmFsVmFsdWUudHlwZSBhcyBzcGVjLkNvbGxlY3Rpb25UeXBlUmVmZXJlbmNlO1xuXG4gICAgICByZXR1cm4gdmFsdWUubWFwKCh4KSA9PlxuICAgICAgICBob3N0LnJlY3Vyc2UoeCwgeyB0eXBlOiBhcnJheVR5cGUuY29sbGVjdGlvbi5lbGVtZW50dHlwZSB9KSxcbiAgICAgICk7XG4gICAgfSxcbiAgICBkZXNlcmlhbGl6ZSh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSwgaG9zdCkge1xuICAgICAgaWYgKG51bGxBbmRPayh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25hbFZhbHVlID09PSAndm9pZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFbmNvdW50ZXJlZCB1bmV4cGVjdGVkIGB2b2lkYCB0eXBlJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBhcnJheSB0eXBlLCBnb3QgJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9YCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFycmF5VHlwZSA9IG9wdGlvbmFsVmFsdWUudHlwZSBhcyBzcGVjLkNvbGxlY3Rpb25UeXBlUmVmZXJlbmNlO1xuXG4gICAgICByZXR1cm4gdmFsdWUubWFwKCh4KSA9PlxuICAgICAgICBob3N0LnJlY3Vyc2UoeCwgeyB0eXBlOiBhcnJheVR5cGUuY29sbGVjdGlvbi5lbGVtZW50dHlwZSB9KSxcbiAgICAgICk7XG4gICAgfSxcbiAgfSxcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIFtTZXJpYWxpemF0aW9uQ2xhc3MuTWFwXToge1xuICAgIHNlcmlhbGl6ZSh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSwgaG9zdCkge1xuICAgICAgaWYgKG51bGxBbmRPayh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25hbFZhbHVlID09PSAndm9pZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFbmNvdW50ZXJlZCB1bmV4cGVjdGVkIGB2b2lkYCB0eXBlJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1hcFR5cGUgPSBvcHRpb25hbFZhbHVlLnR5cGUgYXMgc3BlYy5Db2xsZWN0aW9uVHlwZVJlZmVyZW5jZTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIFtUT0tFTl9NQVBdOiBtYXBWYWx1ZXModmFsdWUsICh2KSA9PlxuICAgICAgICAgIGhvc3QucmVjdXJzZSh2LCB7IHR5cGU6IG1hcFR5cGUuY29sbGVjdGlvbi5lbGVtZW50dHlwZSB9KSxcbiAgICAgICAgKSxcbiAgICAgIH07XG4gICAgfSxcbiAgICBkZXNlcmlhbGl6ZSh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSwgaG9zdCkge1xuICAgICAgaWYgKG51bGxBbmRPayh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25hbFZhbHVlID09PSAndm9pZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFbmNvdW50ZXJlZCB1bmV4cGVjdGVkIGB2b2lkYCB0eXBlJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1hcFR5cGUgPSBvcHRpb25hbFZhbHVlLnR5cGUgYXMgc3BlYy5Db2xsZWN0aW9uVHlwZVJlZmVyZW5jZTtcbiAgICAgIGlmICghaXNXaXJlTWFwKHZhbHVlKSkge1xuICAgICAgICAvLyBDb21wYXRpYmlsaXR5IG1vZGUgd2l0aCBvbGRlciB2ZXJzaW9ucyB0aGF0IGRpZG4ndCB3cmFwIGluIFtUT0tFTl9NQVBdXG4gICAgICAgIHJldHVybiBtYXBWYWx1ZXModmFsdWUsICh2KSA9PlxuICAgICAgICAgIGhvc3QucmVjdXJzZSh2LCB7IHR5cGU6IG1hcFR5cGUuY29sbGVjdGlvbi5lbGVtZW50dHlwZSB9KSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlc3VsdCA9IG1hcFZhbHVlcyh2YWx1ZVtUT0tFTl9NQVBdLCAodikgPT5cbiAgICAgICAgaG9zdC5yZWN1cnNlKHYsIHsgdHlwZTogbWFwVHlwZS5jb2xsZWN0aW9uLmVsZW1lbnR0eXBlIH0pLFxuICAgICAgKTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZXN1bHQsIFNZTUJPTF9XSVJFX1RZUEUsIHtcbiAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIHZhbHVlOiBUT0tFTl9NQVAsXG4gICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuICB9LFxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgW1NlcmlhbGl6YXRpb25DbGFzcy5TdHJ1Y3RdOiB7XG4gICAgc2VyaWFsaXplKHZhbHVlLCBvcHRpb25hbFZhbHVlLCBob3N0KSB7XG4gICAgICBpZiAobnVsbEFuZE9rKHZhbHVlLCBvcHRpb25hbFZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbmFsVmFsdWUgPT09ICd2b2lkJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VuY291bnRlcmVkIHVuZXhwZWN0ZWQgYHZvaWRgIHR5cGUnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcgfHwgdmFsdWUgPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIG9iamVjdCwgZ290ICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWApO1xuICAgICAgfVxuXG4gICAgICAvKlxuICAgICAgICBUaGlzIGlzIHdoYXQgd2UnZCBsaWtlIHRvIGRvLCBidXQgd2UgY2FuJ3QgYmVjYXVzZSBhdCBsZWFzdCB0aGUgSmF2YSBjbGllbnRcbiAgICAgICAgZG9lcyBub3QgdW5kZXJzdGFuZCBieS12YWx1ZSBzZXJpYWxpemVkIGludGVyZmFjZSB0eXBlcywgc28gd2UnbGwgaGF2ZSB0b1xuICAgICAgICBzZXJpYWxpemUgYnktcmVmZXJlbmNlLiBBZGRpdGlvbmFsbHksIHNlcmlhbGl6aW5nIGtub3duIHByb3BlcnRpZXMgd291bGRcbiAgICAgICAgY2F1c2UgcHJvYmxlbXMgd2hlbiB0aGUgcmV0dXJuIHR5cGUgb2YgYSBtZXRob2QgaXMgYSBVTklPTiBvZiBzdHJ1Y3RzLlxuICAgICAgICBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvanNpaS9pc3N1ZXMvNDAwXG5cbiAgICAgIGNvbnN0IHByb3BzID0gcHJvcGVydGllc09mKG5hbWVkVHlwZSk7XG5cbiAgICAgIHJldHVybiBtYXBWYWx1ZXModmFsdWUsICh2LCBrZXkpID0+IHtcbiAgICAgICAgaWYgKCFwcm9wc1trZXldKSB7IHJldHVybiB1bmRlZmluZWQ7IH0gLy8gRG9uJ3QgbWFwIGlmIHVua25vd24gcHJvcGVydHlcbiAgICAgICAgcmV0dXJuIGhvc3QucmVjdXJzZSh2LCBwcm9wc1trZXldLnR5cGUpO1xuICAgICAgfSk7XG4gICAgICAqL1xuXG4gICAgICBob3N0LmRlYnVnKCdSZXR1cm5pbmcgdmFsdWUgdHlwZSBieSByZWZlcmVuY2UnKTtcbiAgICAgIHJldHVybiBob3N0Lm9iamVjdHMucmVnaXN0ZXJPYmplY3QodmFsdWUsIEVNUFRZX09CSkVDVF9GUU4sIFtcbiAgICAgICAgKG9wdGlvbmFsVmFsdWUudHlwZSBhcyBzcGVjLk5hbWVkVHlwZVJlZmVyZW5jZSkuZnFuLFxuICAgICAgXSk7XG4gICAgfSxcbiAgICBkZXNlcmlhbGl6ZSh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSwgaG9zdCkge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgT2JqZWN0LmtleXModmFsdWUgPz8ge30pLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAvLyBUcmVhdCBlbXB0eSBzdHJ1Y3RzIGFzIGB1bmRlZmluZWRgIChzZWUgaHR0cHM6Ly9naXRodWIuY29tL2F3cy9qc2lpL2lzc3Vlcy80MTEpXG4gICAgICAgIHZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKG51bGxBbmRPayh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25hbFZhbHVlID09PSAndm9pZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFbmNvdW50ZXJlZCB1bmV4cGVjdGVkIGB2b2lkYCB0eXBlJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBFeHBlY3RlZCBvYmplY3QgcmVmZXJlbmNlLCBnb3QgJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9YCxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbmFtZWRUeXBlID0gaG9zdC5sb29rdXBUeXBlKFxuICAgICAgICAob3B0aW9uYWxWYWx1ZS50eXBlIGFzIHNwZWMuTmFtZWRUeXBlUmVmZXJlbmNlKS5mcW4sXG4gICAgICApO1xuICAgICAgY29uc3QgcHJvcHMgPSBwcm9wZXJ0aWVzT2YobmFtZWRUeXBlLCBob3N0Lmxvb2t1cFR5cGUpO1xuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBHb3QgYW4gYXJyYXkgd2hlcmUgYSAke25hbWVkVHlwZS5mcW59IHdhcyBleHBlY3RlZC4gRGlkIHlvdSBtZWFuIHRvIHBhc3MgYSB2YXJpYWJsZSBudW1iZXIgb2YgYXJndW1lbnRzP2AsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNpbWlsYXJseSB0byBzZXJpYWxpemF0aW9uLCB3ZSBtaWdodCBiZSBnZXR0aW5nIGEgcmVmZXJlbmNlIHR5cGUgd2hlcmUgd2UncmVcbiAgICAgIC8vIGV4cGVjdGluZyBhIHZhbHVlIHR5cGUuIEFjY2VwdCB0aGlzIGZvciBub3cgKGJ1dCBhbHNvIHZhbGlkYXRlIHRoYXQgb2JqZWN0XG4gICAgICAvLyBmb3IgcHJlc2VuY2Ugb2YgdGhlIHJpZ2h0IHByb3BlcnRpZXMpLlxuICAgICAgaWYgKGlzT2JqUmVmKHZhbHVlKSkge1xuICAgICAgICBob3N0LmRlYnVnKFxuICAgICAgICAgICdFeHBlY3RlZCB2YWx1ZSB0eXBlIGJ1dCBnb3QgcmVmZXJlbmNlIHR5cGUsIGFjY2VwdGluZyBmb3Igbm93IChhd3NsYWJzL2pzaWkjNDAwKScsXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gUmV0dXJuIHNhbWUgSU5TVEFOQ0UgKHNob3VsZG4ndCBtYXR0ZXIgYnV0IHdlIGRvbid0IGtub3cgZm9yIHN1cmUgdGhhdCBpdCBkb2Vzbid0KVxuICAgICAgICByZXR1cm4gdmFsaWRhdGVSZXF1aXJlZFByb3BzKFxuICAgICAgICAgIGhvc3Qub2JqZWN0cy5maW5kT2JqZWN0KHZhbHVlKS5pbnN0YW5jZSxcbiAgICAgICAgICBuYW1lZFR5cGUuZnFuLFxuICAgICAgICAgIHByb3BzLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAoYXBpLmlzV2lyZVN0cnVjdCh2YWx1ZSkpIHtcbiAgICAgICAgY29uc3QgeyBmcW4sIGRhdGEgfSA9IHZhbHVlW2FwaS5UT0tFTl9TVFJVQ1RdO1xuICAgICAgICBpZiAoIWlzQXNzaWduYWJsZShmcW4sIG5hbWVkVHlwZSwgaG9zdC5sb29rdXBUeXBlKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBXaXJlIHN0cnVjdCB0eXBlICcke2Zxbn0nIGRvZXMgbm90IG1hdGNoIGV4cGVjdGVkICcke25hbWVkVHlwZS5mcW59J2AsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB2YWx1ZSA9IGRhdGE7XG4gICAgICB9XG5cbiAgICAgIC8vIFB5dGhvbiwgZm9yIGV4YW1wbGUsIGFsbG93cyB1c2luZyBwbGFpbiBtYXBwaW5nIG9iamVjdHMgaW5zdGVhZCBvZiBTdHJ1Y3RzIChkeWFubWljIHR5cGluZywgWU9MTyEpXG4gICAgICBpZiAoYXBpLmlzV2lyZU1hcCh2YWx1ZSkpIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZVthcGkuVE9LRU5fTUFQXTtcbiAgICAgIH1cblxuICAgICAgdmFsdWUgPSB2YWxpZGF0ZVJlcXVpcmVkUHJvcHModmFsdWUgYXMgYW55LCBuYW1lZFR5cGUuZnFuLCBwcm9wcyk7XG5cbiAgICAgIC8vIFJldHVybiBhIGRpY3QgQ09QWSwgd2UgaGF2ZSBieS12YWx1ZSBzZW1hbnRpY3MgYW55d2F5LlxuICAgICAgcmV0dXJuIG1hcFZhbHVlcyh2YWx1ZSwgKHYsIGtleSkgPT4ge1xuICAgICAgICBpZiAoIXByb3BzW2tleV0pIHtcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9IC8vIERvbid0IG1hcCBpZiB1bmtub3duIHByb3BlcnR5XG4gICAgICAgIHJldHVybiBob3N0LnJlY3Vyc2UodiwgcHJvcHNba2V5XSk7XG4gICAgICB9KTtcbiAgICB9LFxuICB9LFxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgW1NlcmlhbGl6YXRpb25DbGFzcy5SZWZlcmVuY2VUeXBlXToge1xuICAgIHNlcmlhbGl6ZSh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSwgaG9zdCk6IE9ialJlZiB8IHVuZGVmaW5lZCB7XG4gICAgICBpZiAobnVsbEFuZE9rKHZhbHVlLCBvcHRpb25hbFZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbmFsVmFsdWUgPT09ICd2b2lkJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VuY291bnRlcmVkIHVuZXhwZWN0ZWQgYHZvaWRgIHR5cGUnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcgfHwgdmFsdWUgPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEV4cGVjdGVkIG9iamVjdCByZWZlcmVuY2UsIGdvdCAke0pTT04uc3RyaW5naWZ5KHZhbHVlKX1gLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBleHBlY3RlZFR5cGUgPSBob3N0Lmxvb2t1cFR5cGUoXG4gICAgICAgIChvcHRpb25hbFZhbHVlLnR5cGUgYXMgc3BlYy5OYW1lZFR5cGVSZWZlcmVuY2UpLmZxbixcbiAgICAgICk7XG4gICAgICBjb25zdCBpbnRlcmZhY2VzID0gc3BlYy5pc0ludGVyZmFjZVR5cGUoZXhwZWN0ZWRUeXBlKVxuICAgICAgICA/IFtleHBlY3RlZFR5cGUuZnFuXVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGpzaWlUeXBlID1cbiAgICAgICAganNpaVR5cGVGcW4odmFsdWUpID8/XG4gICAgICAgIChzcGVjLmlzQ2xhc3NUeXBlKGV4cGVjdGVkVHlwZSkgPyBleHBlY3RlZFR5cGUuZnFuIDogRU1QVFlfT0JKRUNUX0ZRTik7XG5cbiAgICAgIHJldHVybiBob3N0Lm9iamVjdHMucmVnaXN0ZXJPYmplY3QodmFsdWUsIGpzaWlUeXBlLCBpbnRlcmZhY2VzKTtcbiAgICB9LFxuICAgIGRlc2VyaWFsaXplKHZhbHVlLCBvcHRpb25hbFZhbHVlLCBob3N0KSB7XG4gICAgICBpZiAobnVsbEFuZE9rKHZhbHVlLCBvcHRpb25hbFZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbmFsVmFsdWUgPT09ICd2b2lkJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VuY291bnRlcmVkIHVuZXhwZWN0ZWQgYHZvaWRgIHR5cGUnKTtcbiAgICAgIH1cblxuICAgICAgLy8gVGhlIG9ubHkgd2F5IHRvIHBhc3MgYSBieS1yZWYgb2JqZWN0IGlzIHRvIGhhdmUgY3JlYXRlZCBpdFxuICAgICAgLy8gcHJldmlvdXNseSBpbnNpZGUgSlNJSSBrZXJuZWwsIHNvIGl0IG11c3QgaGF2ZSBhbiBvYmpyZWYgYWxyZWFkeS5cblxuICAgICAgaWYgKCFpc09ialJlZih2YWx1ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBFeHBlY3RlZCBvYmplY3QgcmVmZXJlbmNlLCBnb3QgJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9YCxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBpbnN0YW5jZSwgZnFuIH0gPSBob3N0Lm9iamVjdHMuZmluZE9iamVjdCh2YWx1ZSk7XG5cbiAgICAgIGNvbnN0IG5hbWVkVHlwZVJlZiA9IG9wdGlvbmFsVmFsdWUudHlwZSBhcyBzcGVjLk5hbWVkVHlwZVJlZmVyZW5jZTtcbiAgICAgIGlmIChuYW1lZFR5cGVSZWYuZnFuICE9PSBFTVBUWV9PQkpFQ1RfRlFOKSB7XG4gICAgICAgIGNvbnN0IG5hbWVkVHlwZSA9IGhvc3QubG9va3VwVHlwZShuYW1lZFR5cGVSZWYuZnFuKTtcblxuICAgICAgICAvLyBDaGVjayB0aGF0IHRoZSBvYmplY3Qgd2UgZ290IGlzIG9mIHRoZSByaWdodCB0eXBlXG4gICAgICAgIC8vIFdlIG9ubHkgZG8gdGhpcyBmb3IgY2xhc3Nlcywgbm90IGludGVyZmFjZXMsIHNpbmNlIEphdmEgbWlnaHQgcGFzcyB1cyBvYmplY3RzIHRoYXRcbiAgICAgICAgLy8gcHJpdmF0ZWx5IGltcGxlbWVudCBzb21lIGludGVyZmFjZSBhbmQgd2UgY2FuJ3QgcHJvdmUgdGhleSBkb24ndC5cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9qc2lpL2lzc3Vlcy8zOTlcbiAgICAgICAgY29uc3QgZGVjbGFyZWRUeXBlID0gb3B0aW9uYWxWYWx1ZS50eXBlIGFzIHNwZWMuTmFtZWRUeXBlUmVmZXJlbmNlO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgc3BlYy5pc0NsYXNzVHlwZShuYW1lZFR5cGUpICYmXG4gICAgICAgICAgIWlzQXNzaWduYWJsZShmcW4sIGRlY2xhcmVkVHlwZSwgaG9zdC5sb29rdXBUeXBlKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgT2JqZWN0IG9mIHR5cGUgJHtmcW59IGlzIG5vdCBjb252ZXJ0aWJsZSB0byAke2RlY2xhcmVkVHlwZS5mcW59YCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICB9LFxuICB9LFxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgW1NlcmlhbGl6YXRpb25DbGFzcy5BbnldOiB7XG4gICAgc2VyaWFsaXplKHZhbHVlLCBfdHlwZSwgaG9zdCkge1xuICAgICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzRGF0ZSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZURhdGUodmFsdWUpO1xuICAgICAgfVxuICAgICAgaWYgKGlzU2NhbGFyKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlLm1hcCgoZSkgPT4gaG9zdC5yZWN1cnNlKGUsIHsgdHlwZTogc3BlYy5DQU5PTklDQUxfQU5ZIH0pKTtcbiAgICAgIH1cblxuICAgICAgLy8gTm90ZTogbm8gY2FzZSBmb3IgXCJFTlVNXCIgaGVyZSwgd2l0aG91dCB0eXBlIGRlY2xhcmF0aW9uIHdlIGNhbid0IHRlbGwgdGhlIGRpZmZlcmVuY2VcbiAgICAgIC8vIGJldHdlZW4gYW4gZW51bSBtZW1iZXIgYW5kIGEgc2NhbGFyLlxuXG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnSlNJSSBLZXJuZWwgaXMgdW5hYmxlIHRvIHNlcmlhbGl6ZSBgZnVuY3Rpb25gLiBBbiBpbnN0YW5jZSB3aXRoIG1ldGhvZHMgbWlnaHQgaGF2ZSBiZWVuIHJldHVybmVkIGJ5IGFuIGBhbnlgIG1ldGhvZD8nLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyB8fCB2YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgSlNJSSBrZXJuZWwgYXNzdW1wdGlvbiB2aW9sYXRlZCwgJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICl9IGlzIG5vdCBhbiBvYmplY3RgLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIFNZTUJPTF9XSVJFX1RZUEUgaW4gdmFsdWUgJiZcbiAgICAgICAgKHZhbHVlIGFzIGFueSlbU1lNQk9MX1dJUkVfVFlQRV0gPT09IFRPS0VOX01BUFxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBTRVJJQUxJWkVSU1tTZXJpYWxpemF0aW9uQ2xhc3MuTWFwXS5zZXJpYWxpemUoXG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICBjb2xsZWN0aW9uOiB7XG4gICAgICAgICAgICAgICAga2luZDogc3BlYy5Db2xsZWN0aW9uS2luZC5NYXAsXG4gICAgICAgICAgICAgICAgZWxlbWVudHR5cGU6IHNwZWMuQ0FOT05JQ0FMX0FOWSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBob3N0LFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICAvLyBUbyBtYWtlIHN1cmUgcGVvcGxlIGFyZW4ndCBnb2luZyB0byB0cnkgYW5kIHJldHVybiBNYXA8PiBvciBTZXQ8PiBvdXQsIHRlc3QgZm9yXG4gICAgICAvLyB0aG9zZSBhbmQgdGhyb3cgYSBkZXNjcmlwdGl2ZSBlcnJvciBtZXNzYWdlLiBXZSBjYW4ndCBkZXRlY3QgdGhlc2UgY2FzZXMgYW55IG90aGVyXG4gICAgICAvLyB3YXksIGFuZCB0aGUgYnktdmFsdWUgc2VyaWFsaXplZCBvYmplY3Qgd2lsbCBiZSBxdWl0ZSB1c2VsZXNzLlxuICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgU2V0IHx8IHZhbHVlIGluc3RhbmNlb2YgTWFwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbid0IHJldHVybiBvYmplY3RzIG9mIHR5cGUgU2V0IG9yIE1hcFwiKTtcbiAgICAgIH1cblxuICAgICAgLy8gVXNlIGEgcHJldmlvdXMgcmVmZXJlbmNlIHRvIG1haW50YWluIG9iamVjdCBpZGVudGl0eS4gTk9URTogdGhpcyBtYXkgY2F1c2UgdXMgdG8gcmV0dXJuXG4gICAgICAvLyBhIGRpZmZlcmVudCB0eXBlIHRoYW4gcmVxdWVzdGVkISBUaGlzIGlzIGp1c3QgaG93IGl0IGlzIHJpZ2h0IG5vdy5cbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvanNpaS9pc3N1ZXMvMzk5XG4gICAgICBjb25zdCBwcmV2UmVmID0gb2JqZWN0UmVmZXJlbmNlKHZhbHVlKTtcbiAgICAgIGlmIChwcmV2UmVmKSB7XG4gICAgICAgIHJldHVybiBwcmV2UmVmO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiB0aGlzIGlzIG9yIHNob3VsZCBiZSBhIHJlZmVyZW5jZSB0eXBlLCBwYXNzIG9yIG1ha2UgdGhlIHJlZmVyZW5jZVxuICAgICAgLy8gKExpa2UgcmVndWxhciByZWZ0eXBlIHNlcmlhbGl6YXRpb24sIGJ1dCB3aXRob3V0IHRoZSB0eXBlIGRlcml2YXRpb24gdG8gYW4gaW50ZXJmYWNlKVxuICAgICAgY29uc3QganNpaVR5cGUgPVxuICAgICAgICBqc2lpVHlwZUZxbih2YWx1ZSkgPz9cbiAgICAgICAgKGlzQnlSZWZlcmVuY2VPbmx5KHZhbHVlKSA/IEVNUFRZX09CSkVDVF9GUU4gOiB1bmRlZmluZWQpO1xuICAgICAgaWYgKGpzaWlUeXBlKSB7XG4gICAgICAgIHJldHVybiBob3N0Lm9iamVjdHMucmVnaXN0ZXJPYmplY3QodmFsdWUsIGpzaWlUeXBlKTtcbiAgICAgIH1cblxuICAgICAgLy8gQXQgdGhpcyBwb2ludCB3ZSBoYXZlIGFuIG9iamVjdCB0aGF0IGlzIG5vdCBvZiBhbiBleHBvcnRlZCB0eXBlLiBFaXRoZXIgYW4gb2JqZWN0XG4gICAgICAvLyBsaXRlcmFsLCBvciBhbiBpbnN0YW5jZSBvZiBhIGZ1bGx5IHByaXZhdGUgY2xhc3MgKGNhbm5vdCBkaXN0aW5ndWlzaCB0aG9zZSBjYXNlcykuXG5cbiAgICAgIC8vIFdlIHdpbGwgc2VyaWFsaXplIGJ5LXZhbHVlLCBidXQgcmVjdXJzZSBmb3Igc2VyaWFsaXphdGlvbiBzbyB0aGF0IGlmXG4gICAgICAvLyB0aGUgb2JqZWN0IGNvbnRhaW5zIHJlZmVyZW5jZSBvYmplY3RzLCB0aGV5IHdpbGwgYmUgc2VyaWFsaXplZCBhcHByb3ByaWF0ZWx5LlxuICAgICAgLy8gKEJhc2ljYWxseSwgc2VyaWFsaXplIGFueXRoaW5nIGVsc2UgYXMgYSBtYXAgb2YgJ2FueScpLlxuICAgICAgcmV0dXJuIG1hcFZhbHVlcyh2YWx1ZSwgKHYpID0+XG4gICAgICAgIGhvc3QucmVjdXJzZSh2LCB7IHR5cGU6IHNwZWMuQ0FOT05JQ0FMX0FOWSB9KSxcbiAgICAgICk7XG4gICAgfSxcblxuICAgIGRlc2VyaWFsaXplKHZhbHVlLCBfdHlwZSwgaG9zdCkge1xuICAgICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzV2lyZURhdGUodmFsdWUpKSB7XG4gICAgICAgIGhvc3QuZGVidWcoJ0FOWSBpcyBhIERhdGUnKTtcbiAgICAgICAgcmV0dXJuIGRlc2VyaWFsaXplRGF0ZSh2YWx1ZSk7XG4gICAgICB9XG4gICAgICBpZiAoaXNTY2FsYXIodmFsdWUpKSB7XG4gICAgICAgIGhvc3QuZGVidWcoJ0FOWSBpcyBhIFNjYWxhcicpO1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgaG9zdC5kZWJ1ZygnQU5ZIGlzIGFuIEFycmF5Jyk7XG4gICAgICAgIHJldHVybiB2YWx1ZS5tYXAoKGUpID0+IGhvc3QucmVjdXJzZShlLCB7IHR5cGU6IHNwZWMuQ0FOT05JQ0FMX0FOWSB9KSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc1dpcmVFbnVtKHZhbHVlKSkge1xuICAgICAgICBob3N0LmRlYnVnKCdBTlkgaXMgYW4gRW51bScpO1xuICAgICAgICByZXR1cm4gZGVzZXJpYWxpemVFbnVtKHZhbHVlLCBob3N0LmZpbmRTeW1ib2wpO1xuICAgICAgfVxuICAgICAgaWYgKGlzV2lyZU1hcCh2YWx1ZSkpIHtcbiAgICAgICAgaG9zdC5kZWJ1ZygnQU5ZIGlzIGEgTWFwJyk7XG4gICAgICAgIGNvbnN0IG1hcE9mQW55OiBzcGVjLkNvbGxlY3Rpb25UeXBlUmVmZXJlbmNlID0ge1xuICAgICAgICAgIGNvbGxlY3Rpb246IHtcbiAgICAgICAgICAgIGtpbmQ6IHNwZWMuQ29sbGVjdGlvbktpbmQuTWFwLFxuICAgICAgICAgICAgZWxlbWVudHR5cGU6IHNwZWMuQ0FOT05JQ0FMX0FOWSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gU0VSSUFMSVpFUlNbU2VyaWFsaXphdGlvbkNsYXNzLk1hcF0uZGVzZXJpYWxpemUoXG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgeyB0eXBlOiBtYXBPZkFueSB9LFxuICAgICAgICAgIGhvc3QsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoaXNPYmpSZWYodmFsdWUpKSB7XG4gICAgICAgIGhvc3QuZGVidWcoJ0FOWSBpcyBhIFJlZicpO1xuICAgICAgICByZXR1cm4gaG9zdC5vYmplY3RzLmZpbmRPYmplY3QodmFsdWUpLmluc3RhbmNlO1xuICAgICAgfVxuXG4gICAgICAvLyBpZiB0aGUgdmFsdWUgaGFzIGEgc3RydWN0IHRva2VuLCBpdCB3YXMgc2VyaWFsaXplZCBieSBhIHR5cGVkIGpzaWlcbiAgICAgIC8vIHN0cnVjdCwgYnV0IHNpbmNlIHRoZSBkZXNlcmlhbGl6YXRpb24gdGFyZ2V0IGlzIEFOWSwgYWxsIHdlIGNhbiBkbyBpc1xuICAgICAgLy8gc3RyaXAgdGhlIGRhdGEgZnJvbSAkanNpaS5zdHJ1Y3QgYW5kIGNvbnRpbnVlIHRvIGRlc2VyaWFsaXplIGFzIEFOWS5cbiAgICAgIGlmIChpc1dpcmVTdHJ1Y3QodmFsdWUpKSB7XG4gICAgICAgIGNvbnN0IHsgZnFuLCBkYXRhIH0gPSB2YWx1ZVtUT0tFTl9TVFJVQ1RdO1xuICAgICAgICBob3N0LmRlYnVnKGBBTlkgaXMgYSBzdHJ1Y3Qgb2YgdHlwZSAke2Zxbn1gKTtcbiAgICAgICAgcmV0dXJuIFNFUklBTElaRVJTW1NlcmlhbGl6YXRpb25DbGFzcy5TdHJ1Y3RdLmRlc2VyaWFsaXplKFxuICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgeyB0eXBlOiB7IGZxbiB9IH0sXG4gICAgICAgICAgaG9zdCxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gQXQgdGhpcyBwb2ludCBhZ2FpbiwgZGVzZXJpYWxpemUgYnktdmFsdWUuXG4gICAgICBob3N0LmRlYnVnKCdBTlkgaXMgYSBNYXAnKTtcbiAgICAgIHJldHVybiBtYXBWYWx1ZXModmFsdWUsICh2KSA9PlxuICAgICAgICBob3N0LnJlY3Vyc2UodiwgeyB0eXBlOiBzcGVjLkNBTk9OSUNBTF9BTlkgfSksXG4gICAgICApO1xuICAgIH0sXG4gIH0sXG59O1xuXG5mdW5jdGlvbiBzZXJpYWxpemVEYXRlKHZhbHVlOiBEYXRlKTogV2lyZURhdGUge1xuICByZXR1cm4geyBbVE9LRU5fREFURV06IHZhbHVlLnRvSVNPU3RyaW5nKCkgfTtcbn1cblxuZnVuY3Rpb24gZGVzZXJpYWxpemVEYXRlKHZhbHVlOiBXaXJlRGF0ZSk6IERhdGUge1xuICByZXR1cm4gbmV3IERhdGUodmFsdWVbVE9LRU5fREFURV0pO1xufVxuXG5mdW5jdGlvbiBkZXNlcmlhbGl6ZUVudW0odmFsdWU6IFdpcmVFbnVtLCBsb29rdXA6IFN5bWJvbExvb2t1cCkge1xuICBjb25zdCBlbnVtTG9jYXRvciA9IHZhbHVlW1RPS0VOX0VOVU1dO1xuICBjb25zdCBzZXAgPSBlbnVtTG9jYXRvci5sYXN0SW5kZXhPZignLycpO1xuICBpZiAoc2VwID09PSAtMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTWFsZm9ybWVkIGVudW0gdmFsdWU6ICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWApO1xuICB9XG5cbiAgY29uc3QgdHlwZU5hbWUgPSBlbnVtTG9jYXRvci5zbGljZSgwLCBzZXApO1xuICBjb25zdCB2YWx1ZU5hbWUgPSBlbnVtTG9jYXRvci5zbGljZShzZXAgKyAxKTtcblxuICBjb25zdCBlbnVtVmFsdWUgPSBsb29rdXAodHlwZU5hbWUpW3ZhbHVlTmFtZV07XG4gIGlmIChlbnVtVmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTm8gZW51bSBtZW1iZXIgbmFtZWQgJHt2YWx1ZU5hbWV9IGluICR7dHlwZU5hbWV9YCk7XG4gIH1cbiAgcmV0dXJuIGVudW1WYWx1ZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUeXBlU2VyaWFsaXphdGlvbiB7XG4gIHNlcmlhbGl6YXRpb25DbGFzczogU2VyaWFsaXphdGlvbkNsYXNzO1xuICB0eXBlUmVmOiBPcHRpb25hbFZhbHVlT3JWb2lkO1xufVxuXG4vKipcbiAqIEZyb20gYSB0eXBlIHJlZmVyZW5jZSwgcmV0dXJuIHRoZSBwb3NzaWJsZSBzZXJpYWxpemF0aW9uIHR5cGVzXG4gKlxuICogVGhlcmUgY2FuIGJlIG11bHRpcGxlLCBiZWNhdXNlIHRoZSB0eXBlIGNhbiBiZSBhIHR5cGUgdW5pb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemF0aW9uVHlwZShcbiAgdHlwZVJlZjogT3B0aW9uYWxWYWx1ZU9yVm9pZCxcbiAgbG9va3VwOiBUeXBlTG9va3VwLFxuKTogVHlwZVNlcmlhbGl6YXRpb25bXSB7XG4gIGlmICh0eXBlUmVmID09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJLZXJuZWwgZXJyb3I6IGV4cGVjdGVkIHR5cGUgaW5mb3JtYXRpb24sIGdvdCAndW5kZWZpbmVkJ1wiKTtcbiAgfVxuICBpZiAodHlwZVJlZiA9PT0gJ3ZvaWQnKSB7XG4gICAgcmV0dXJuIFt7IHNlcmlhbGl6YXRpb25DbGFzczogU2VyaWFsaXphdGlvbkNsYXNzLlZvaWQsIHR5cGVSZWYgfV07XG4gIH1cbiAgaWYgKHNwZWMuaXNQcmltaXRpdmVUeXBlUmVmZXJlbmNlKHR5cGVSZWYudHlwZSkpIHtcbiAgICBzd2l0Y2ggKHR5cGVSZWYudHlwZS5wcmltaXRpdmUpIHtcbiAgICAgIGNhc2Ugc3BlYy5QcmltaXRpdmVUeXBlLkFueTpcbiAgICAgICAgcmV0dXJuIFt7IHNlcmlhbGl6YXRpb25DbGFzczogU2VyaWFsaXphdGlvbkNsYXNzLkFueSwgdHlwZVJlZiB9XTtcbiAgICAgIGNhc2Ugc3BlYy5QcmltaXRpdmVUeXBlLkRhdGU6XG4gICAgICAgIHJldHVybiBbeyBzZXJpYWxpemF0aW9uQ2xhc3M6IFNlcmlhbGl6YXRpb25DbGFzcy5EYXRlLCB0eXBlUmVmIH1dO1xuICAgICAgY2FzZSBzcGVjLlByaW1pdGl2ZVR5cGUuSnNvbjpcbiAgICAgICAgcmV0dXJuIFt7IHNlcmlhbGl6YXRpb25DbGFzczogU2VyaWFsaXphdGlvbkNsYXNzLkpzb24sIHR5cGVSZWYgfV07XG4gICAgICBjYXNlIHNwZWMuUHJpbWl0aXZlVHlwZS5Cb29sZWFuOlxuICAgICAgY2FzZSBzcGVjLlByaW1pdGl2ZVR5cGUuTnVtYmVyOlxuICAgICAgY2FzZSBzcGVjLlByaW1pdGl2ZVR5cGUuU3RyaW5nOlxuICAgICAgICByZXR1cm4gW3sgc2VyaWFsaXphdGlvbkNsYXNzOiBTZXJpYWxpemF0aW9uQ2xhc3MuU2NhbGFyLCB0eXBlUmVmIH1dO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBwcmltaXRpdmUgdHlwZScpO1xuICB9XG4gIGlmIChzcGVjLmlzQ29sbGVjdGlvblR5cGVSZWZlcmVuY2UodHlwZVJlZi50eXBlKSkge1xuICAgIHJldHVybiBbXG4gICAgICB7XG4gICAgICAgIHNlcmlhbGl6YXRpb25DbGFzczpcbiAgICAgICAgICB0eXBlUmVmLnR5cGUuY29sbGVjdGlvbi5raW5kID09PSBzcGVjLkNvbGxlY3Rpb25LaW5kLkFycmF5XG4gICAgICAgICAgICA/IFNlcmlhbGl6YXRpb25DbGFzcy5BcnJheVxuICAgICAgICAgICAgOiBTZXJpYWxpemF0aW9uQ2xhc3MuTWFwLFxuICAgICAgICB0eXBlUmVmLFxuICAgICAgfSxcbiAgICBdO1xuICB9XG4gIGlmIChzcGVjLmlzVW5pb25UeXBlUmVmZXJlbmNlKHR5cGVSZWYudHlwZSkpIHtcbiAgICBjb25zdCBjb21wb3VuZFR5cGVzID0gZmxhdE1hcCh0eXBlUmVmLnR5cGUudW5pb24udHlwZXMsICh0KSA9PlxuICAgICAgc2VyaWFsaXphdGlvblR5cGUoeyB0eXBlOiB0IH0sIGxvb2t1cCksXG4gICAgKTtcbiAgICAvLyBQcm9wYWdhdGUgdGhlIHRvcC1sZXZlbCAnb3B0aW9uYWwnIGZpZWxkIHRvIGVhY2ggaW5kaXZpZHVhbCBzdWJ0eXBlXG4gICAgZm9yIChjb25zdCB0IG9mIGNvbXBvdW5kVHlwZXMpIHtcbiAgICAgIGlmICh0LnR5cGVSZWYgIT09ICd2b2lkJykge1xuICAgICAgICB0LnR5cGVSZWYub3B0aW9uYWwgPSB0eXBlUmVmLm9wdGlvbmFsO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY29tcG91bmRUeXBlcy5zb3J0KChsLCByKSA9PlxuICAgICAgY29tcGFyZVNlcmlhbGl6YXRpb25DbGFzc2VzKGwuc2VyaWFsaXphdGlvbkNsYXNzLCByLnNlcmlhbGl6YXRpb25DbGFzcyksXG4gICAgKTtcbiAgfVxuXG4gIC8vIFRoZSBuZXh0IHBhcnQgb2YgdGhlIGNvbnZlcnNpb24gaXMgbG9va3VwLWRlcGVuZGVudFxuICBjb25zdCB0eXBlID0gbG9va3VwKHR5cGVSZWYudHlwZS5mcW4pO1xuXG4gIGlmIChzcGVjLmlzRW51bVR5cGUodHlwZSkpIHtcbiAgICByZXR1cm4gW3sgc2VyaWFsaXphdGlvbkNsYXNzOiBTZXJpYWxpemF0aW9uQ2xhc3MuRW51bSwgdHlwZVJlZiB9XTtcbiAgfVxuXG4gIGlmIChzcGVjLmlzSW50ZXJmYWNlVHlwZSh0eXBlKSAmJiB0eXBlLmRhdGF0eXBlKSB7XG4gICAgcmV0dXJuIFt7IHNlcmlhbGl6YXRpb25DbGFzczogU2VyaWFsaXphdGlvbkNsYXNzLlN0cnVjdCwgdHlwZVJlZiB9XTtcbiAgfVxuXG4gIHJldHVybiBbeyBzZXJpYWxpemF0aW9uQ2xhc3M6IFNlcmlhbGl6YXRpb25DbGFzcy5SZWZlcmVuY2VUeXBlLCB0eXBlUmVmIH1dO1xufVxuXG5mdW5jdGlvbiBudWxsQW5kT2soeDogdW5rbm93biwgdHlwZTogT3B0aW9uYWxWYWx1ZU9yVm9pZCk6IGJvb2xlYW4ge1xuICBpZiAoeCAhPSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHR5cGUgIT09ICd2b2lkJyAmJiAhdHlwZS5vcHRpb25hbCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBHb3QgJ3VuZGVmaW5lZCcgZm9yIG5vbi1vcHRpb25hbCBpbnN0YW5jZSBvZiAke0pTT04uc3RyaW5naWZ5KHR5cGUpfWAsXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBpc0RhdGUoeDogdW5rbm93bik6IHggaXMgRGF0ZSB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIHggPT09ICdvYmplY3QnICYmXG4gICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHgpID09PSAnW29iamVjdCBEYXRlXSdcbiAgKTtcbn1cblxuZnVuY3Rpb24gaXNTY2FsYXIoeDogdW5rbm93bik6IHggaXMgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIHggPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB4ID09PSAnbnVtYmVyJyB8fCB0eXBlb2YgeCA9PT0gJ2Jvb2xlYW4nXG4gICk7XG59XG5cbmZ1bmN0aW9uIGZsYXRNYXA8VCwgVT4oeHM6IFRbXSwgZm46ICh4OiBUKSA9PiBVW10pOiBVW10ge1xuICBjb25zdCByZXQgPSBuZXcgQXJyYXk8VT4oKTtcbiAgZm9yIChjb25zdCB4IG9mIHhzKSB7XG4gICAgcmV0LnB1c2goLi4uZm4oeCkpO1xuICB9XG4gIHJldHVybiByZXQ7XG59XG5cbi8qKlxuICogTWFwIGFuIG9iamVjdCdzIHZhbHVlcywgc2tpcHBpbmcgJ3VuZGVmaW5lZCcgdmFsdWVzJ1xuICovXG5mdW5jdGlvbiBtYXBWYWx1ZXMoXG4gIHZhbHVlOiB1bmtub3duLFxuICBmbjogKHZhbHVlOiBhbnksIGZpZWxkOiBzdHJpbmcpID0+IGFueSxcbik6IHsgW2tleTogc3RyaW5nXTogYW55IH0ge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyB8fCB2YWx1ZSA9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBvYmplY3QgdHlwZSwgZ290ICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWApO1xuICB9XG5cbiAgY29uc3Qgb3V0OiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XG4gIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKHZhbHVlKSkge1xuICAgIGNvbnN0IHdpcmVWYWx1ZSA9IGZuKHYsIGspO1xuICAgIGlmICh3aXJlVmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIG91dFtrXSA9IHdpcmVWYWx1ZTtcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuXG5mdW5jdGlvbiBwcm9wZXJ0aWVzT2YoXG4gIHQ6IHNwZWMuVHlwZSxcbiAgbG9va3VwOiBUeXBlTG9va3VwLFxuKTogeyBbbmFtZTogc3RyaW5nXTogc3BlYy5Qcm9wZXJ0eSB9IHtcbiAgaWYgKCFzcGVjLmlzQ2xhc3NPckludGVyZmFjZVR5cGUodCkpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBsZXQgcmV0OiB7IFtuYW1lOiBzdHJpbmddOiBzcGVjLlByb3BlcnR5IH0gPSB7fTtcblxuICBpZiAodC5pbnRlcmZhY2VzKSB7XG4gICAgZm9yIChjb25zdCBpZmFjZSBvZiB0LmludGVyZmFjZXMpIHtcbiAgICAgIHJldCA9IHsgLi4ucmV0LCAuLi5wcm9wZXJ0aWVzT2YobG9va3VwKGlmYWNlKSwgbG9va3VwKSB9O1xuICAgIH1cbiAgfVxuICBpZiAoc3BlYy5pc0NsYXNzVHlwZSh0KSAmJiB0LmJhc2UpIHtcbiAgICByZXQgPSB7IC4uLnJldCwgLi4ucHJvcGVydGllc09mKGxvb2t1cCh0LmJhc2UpLCBsb29rdXApIH07XG4gIH1cblxuICBmb3IgKGNvbnN0IHByb3Agb2YgdC5wcm9wZXJ0aWVzID8/IFtdKSB7XG4gICAgcmV0W3Byb3AubmFtZV0gPSBwcm9wO1xuICB9XG5cbiAgcmV0dXJuIHJldDtcbn1cblxuLyoqXG4gKiBUZXN0cyB3aGV0aGVyIGEgZ2l2ZW4gdHlwZSAoYnkgaXQncyBGUU4pIGNhbiBiZSBhc3NpZ25lZCB0byBhIG5hbWVkIHR5cGUgcmVmZXJlbmNlLlxuICpcbiAqIEBwYXJhbSBhY3R1YWxUeXBlRnFuIHRoZSBGUU4gb2YgdGhlIHR5cGUgdGhhdCBpcyBiZWluZyB0ZXN0ZWQuXG4gKiBAcGFyYW0gcmVxdWlyZWRUeXBlICB0aGUgcmVxdWlyZWQgcmVmZXJlbmNlIHR5cGUuXG4gKlxuICogQHJldHVybnMgdHJ1ZSBpZiBgYHJlcXVpcmVkVHlwZWBgIGlzIGEgc3VwZXItdHlwZSAoYmFzZSBjbGFzcyBvciBpbXBsZW1lbnRlZCBpbnRlcmZhY2UpIG9mIHRoZSB0eXBlIGRlc2lnbmF0ZWQgYnlcbiAqICAgICAgICAgIGBgYWN0dWFsVHlwZUZxbmBgLlxuICovXG5mdW5jdGlvbiBpc0Fzc2lnbmFibGUoXG4gIGFjdHVhbFR5cGVGcW46IHN0cmluZyxcbiAgcmVxdWlyZWRUeXBlOiBzcGVjLk5hbWVkVHlwZVJlZmVyZW5jZSxcbiAgbG9va3VwOiBUeXBlTG9va3VwLFxuKTogYm9vbGVhbiB7XG4gIC8vIFRoZSBlbXB0eSBvYmplY3QgaXMgYXNzaWduYWJsZSB0byBldmVyeXRoaW5nXG4gIGlmIChhY3R1YWxUeXBlRnFuID09PSBFTVBUWV9PQkpFQ1RfRlFOKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAocmVxdWlyZWRUeXBlLmZxbiA9PT0gYWN0dWFsVHlwZUZxbikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGNvbnN0IGFjdHVhbFR5cGUgPSBsb29rdXAoYWN0dWFsVHlwZUZxbik7XG4gIGlmIChzcGVjLmlzQ2xhc3NUeXBlKGFjdHVhbFR5cGUpKSB7XG4gICAgaWYgKFxuICAgICAgYWN0dWFsVHlwZS5iYXNlICYmXG4gICAgICBpc0Fzc2lnbmFibGUoYWN0dWFsVHlwZS5iYXNlLCByZXF1aXJlZFR5cGUsIGxvb2t1cClcbiAgICApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICBpZiAoc3BlYy5pc0NsYXNzT3JJbnRlcmZhY2VUeXBlKGFjdHVhbFR5cGUpICYmIGFjdHVhbFR5cGUuaW50ZXJmYWNlcykge1xuICAgIHJldHVybiAoXG4gICAgICBhY3R1YWxUeXBlLmludGVyZmFjZXMuZmluZCgoaWZhY2UpID0+XG4gICAgICAgIGlzQXNzaWduYWJsZShpZmFjZSwgcmVxdWlyZWRUeXBlLCBsb29rdXApLFxuICAgICAgKSAhPSBudWxsXG4gICAgKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlUmVxdWlyZWRQcm9wcyhcbiAgYWN0dWFsUHJvcHM6IHsgW2tleTogc3RyaW5nXTogYW55IH0sXG4gIHR5cGVOYW1lOiBzdHJpbmcsXG4gIHNwZWNQcm9wczogeyBba2V5OiBzdHJpbmddOiBzcGVjLlByb3BlcnR5IH0sXG4pIHtcbiAgLy8gQ2hlY2sgZm9yIHJlcXVpcmVkIHByb3BlcnRpZXNcbiAgY29uc3QgbWlzc2luZ1JlcXVpcmVkUHJvcHMgPSBPYmplY3Qua2V5cyhzcGVjUHJvcHMpXG4gICAgLmZpbHRlcigobmFtZSkgPT4gIXNwZWNQcm9wc1tuYW1lXS5vcHRpb25hbClcbiAgICAuZmlsdGVyKChuYW1lKSA9PiAhKG5hbWUgaW4gYWN0dWFsUHJvcHMpKTtcblxuICBpZiAobWlzc2luZ1JlcXVpcmVkUHJvcHMubGVuZ3RoID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBNaXNzaW5nIHJlcXVpcmVkIHByb3BlcnRpZXMgZm9yICR7dHlwZU5hbWV9OiAke21pc3NpbmdSZXF1aXJlZFByb3BzLmpvaW4oXG4gICAgICAgICcsICcsXG4gICAgICApfWAsXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBhY3R1YWxQcm9wcztcbn1cblxuZnVuY3Rpb24gY29tcGFyZVNlcmlhbGl6YXRpb25DbGFzc2VzKFxuICBsOiBTZXJpYWxpemF0aW9uQ2xhc3MsXG4gIHI6IFNlcmlhbGl6YXRpb25DbGFzcyxcbik6IG51bWJlciB7XG4gIGNvbnN0IG9yZGVyID0gW1xuICAgIFNlcmlhbGl6YXRpb25DbGFzcy5Wb2lkLFxuICAgIFNlcmlhbGl6YXRpb25DbGFzcy5EYXRlLFxuICAgIFNlcmlhbGl6YXRpb25DbGFzcy5TY2FsYXIsXG4gICAgU2VyaWFsaXphdGlvbkNsYXNzLkpzb24sXG4gICAgU2VyaWFsaXphdGlvbkNsYXNzLkVudW0sXG4gICAgU2VyaWFsaXphdGlvbkNsYXNzLkFycmF5LFxuICAgIFNlcmlhbGl6YXRpb25DbGFzcy5NYXAsXG4gICAgU2VyaWFsaXphdGlvbkNsYXNzLlN0cnVjdCxcbiAgICBTZXJpYWxpemF0aW9uQ2xhc3MuUmVmZXJlbmNlVHlwZSxcbiAgICBTZXJpYWxpemF0aW9uQ2xhc3MuQW55LFxuICBdO1xuICByZXR1cm4gb3JkZXIuaW5kZXhPZihsKSAtIG9yZGVyLmluZGV4T2Yocik7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIGBvYmpgIG11c3QgYmUgcGFzc2VkIGJ5LXJlZmVyZW5jZSBvciBpZiBieS12YWx1ZSBpcyBhY2NlcHRhYmxlLiBGb3IgZXhhbXBsZSxcbiAqIG9iamVjdHMgd2l0aCBtZXRob2RzLCBvciBkeW5hbWljIGdldHRlcnMgKG9yIHNldHRlcnMpIHNob3VsZCBiZSBwYXNzZWQgYnktcmVmZXJlbmNlIGFzIGEgbWF0dGVyXG4gKiBvZiBzZWN1cml0eS4gVGhlIGJlaGF2aW9yIGluIG5vbi1KUyBydW50aW1lcyBjb3VsZCBvdGhlcndpc2UgZGlmZmVyIGZyb20gdGhhdCBpbiBwdXJlIEpTIChpZlxuICogZ2V0dGVycyBhcmUgbm90IHN0YWJsZSwgZXRjLi4uKS5cbiAqXG4gKiBAcGFyYW0gb2JqIHRoZSBvYmplY3QgdG8gYmUgdGVzdGVkLlxuICpcbiAqIEByZXR1cm5zIHRydWUgaWYgYG9iamAgbXVzdCBiZSBwYXNzZWQgYnktcmVmZXJlbmNlLlxuICovXG5mdW5jdGlvbiBpc0J5UmVmZXJlbmNlT25seShvYmo6IGFueSk6IGJvb2xlYW4ge1xuICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgbGV0IGN1cnIgPSBvYmo7XG4gIC8vIENyYXdsIHVwIHRoZSBwcm90b3R5cGUgY2hhaW4gdG8gbG9vayBmb3IgZHluYW1pYyBwcm9wZXJ0aWVzIG9yIG1ldGhvZHMuXG4gIGRvIHtcbiAgICBmb3IgKGNvbnN0IHByb3Agb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoY3VycikpIHtcbiAgICAgIGNvbnN0IGRlc2NyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjdXJyLCBwcm9wKTtcbiAgICAgIGlmIChcbiAgICAgICAgZGVzY3I/LmdldCAhPSBudWxsIHx8XG4gICAgICAgIGRlc2NyPy5zZXQgIT0gbnVsbCB8fFxuICAgICAgICB0eXBlb2YgZGVzY3I/LnZhbHVlID09PSAnZnVuY3Rpb24nXG4gICAgICApIHtcbiAgICAgICAgLy8gUHJvcGVydHkgaGFzIGEgZHluYW1pYyBnZXR0ZXIsIHNldHRlciBvciBpcyBhIGNvbnN0cnVjdG9yL21ldGhvZCwgc28gYnktcmVmIHJlcXVpcmVkIVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gRW5kIHdoZW4gdGhlIHBhcmVudCBwcm90byBpcyBgT2JqZWN0YCwgd2hpY2ggaGFzIG5vIHBhcmVudCBwcm90byBpdHNlbGYuXG4gIH0gd2hpbGUgKE9iamVjdC5nZXRQcm90b3R5cGVPZigoY3VyciA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihjdXJyKSkpICE9IG51bGwpO1xuXG4gIHJldHVybiBmYWxzZTtcbn1cbiJdfQ==
|
|
712
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VyaWFsaXphdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9zZXJpYWxpemF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwQkc7OztBQUVILG1DQUFtQztBQUVuQywrQkFhZTtBQUNmLHVDQUFzRTtBQUV0RSx3QkFBd0I7QUFvQnhCOztHQUVHO0FBQ1UsUUFBQSxnQkFBZ0IsR0FBRyxRQUFRLENBQUM7QUFFNUIsUUFBQSxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUEwQ2pELFFBQUEsV0FBVyxHQUFnQztJQUN0RCx5RUFBeUU7SUFDekUsbUJBQXlCLEVBQUU7UUFDekIsU0FBUyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSTtZQUMxQixJQUFJLEtBQUssSUFBSSxJQUFJLEVBQUU7Z0JBQ2pCLElBQUksQ0FBQyxLQUFLLENBQUMsb0JBQW9CLEVBQUUsS0FBSyxDQUFDLENBQUM7YUFDekM7WUFDRCxPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO1FBRUQsV0FBVyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSTtZQUM1QixJQUFJLEtBQUssSUFBSSxJQUFJLEVBQUU7Z0JBQ2pCLElBQUksQ0FBQyxLQUFLLENBQUMsb0JBQW9CLEVBQUUsS0FBSyxDQUFDLENBQUM7YUFDekM7WUFDRCxPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO0tBQ0Y7SUFFRCx5RUFBeUU7SUFDekUsbUJBQXlCLEVBQUU7UUFDekIsU0FBUyxDQUFDLEtBQUssRUFBRSxhQUFhO1lBQzVCLElBQUksU0FBUyxDQUFDLEtBQUssRUFBRSxhQUFhLENBQUMsRUFBRTtnQkFDbkMsT0FBTyxTQUFTLENBQUM7YUFDbEI7WUFDRCxJQUFJLGFBQWEsS0FBSyxNQUFNLEVBQUU7Z0JBQzVCLE1BQU0sSUFBSSxLQUFLLENBQUMsb0NBQW9DLENBQUMsQ0FB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SSxJQUFJLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNuRCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsd0JBQXdCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzFELElBQ0UsQ0FBQSxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsR0FBRyxLQUFJLElBQUk7Z0JBQ2xCLENBQUEsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLEdBQUcsS0FBSSxJQUFJO2dCQUNsQixRQUFPLEtBQUssYUFBTCxLQUFLLHVCQUFMLEtBQUssQ0FBRSxLQUFLLENBQUEsS0FBSyxVQUFVLEVBQ2xDO2dCQUNBLHdGQUF3RjtnQkFDeEYsT0FBTyxJQUFJLENBQUM7YUFDYjtTQUNGO1FBQ0QsMkVBQTJFO0tBQzVFLFFBQVEsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUU7SUFFOUUsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBIYW5kbGluZyBvZiB0eXBlcyBpbiBKU0lJXG4gKlxuICogVHlwZXMgd2lsbCBiZSBzZXJpYWxpemVkIGFjY29yZGluZyB0byB0aGUgZm9sbG93aW5nIHRhYmxlOlxuICpcbiAqICAgICAgICAgICAgICAgICAgICAgICAgIOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICogICAgICAgICAgICAgICAgICAgICAgICAg4pSCIEpBVkFTQ1JJUFQgVFlQRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilIJcbiAqICAgICAgICAgICAgICAgICAgICAgICAgIOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUpFxuICogICAgICAgICAgICAgICAgICAgICAgICAg4pSCIHVuZGVmaW5lZC9udWxsIOKUgiAgIGRhdGUgICAg4pSCIHNjYWxhciAoKikg4pSCICAgICBhcnJheSAgICAg4pSCIEpTSUktY2xhc3Mgb2JqZWN0IOKUgiBsaXRlcmFsIG9iamVjdCAg4pSCXG4gKiDilJzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilKRcbiAqIOKUgiBERUNMQVJFRCDilIIgdm9pZCAgICAgICDilIIgdW5kZWZpbmVkICAgICAg4pSCIHVuZGVmaW5lZCDilIIgdW5kZWZpbmVkICDilIIgdW5kZWZpbmVkICAgICDilIIgdW5kZWZpbmVkICAgICAgICAg4pSCIHVuZGVmaW5lZCAgICAgICDilIJcbiAqIOKUgiBUWVBFICAgICDilIIgZGF0ZSAgICAgICDilIIgdW5kZWZpbmVkKOKAoCkgICDilIIgeyBkYXRlIH0gIOKUgiAtICAgICAgICAgIOKUgiAtICAgICAgICAgICAgIOKUgiAtICAgICAgICAgICAgICAgICDilIIgLSAgICAgICAgICAgICAgIOKUglxuICog4pSCICAgICAgICAgIOKUgiBzY2FsYXIgKCopIOKUgiB1bmRlZmluZWQo4oCgKSAgIOKUgiAtICAgICAgICAg4pSCIHZhbHVlICAgICAg4pSCIC0gICAgICAgICAgICAg4pSCIC0gICAgICAgICAgICAgICAgIOKUgiAtICAgICAgICAgICAgICAg4pSCXG4gKiDilIIgICAgICAgICAg4pSCIGpzb24gICAgICAg4pSCIHVuZGVmaW5lZCAgICAgIOKUgiBzdHJpbmcgICAg4pSCIHZhbHVlICAgICAg4pSCIGFycmF5L1IoanNvbikg4pSCIC0gICAgICAgICAgICAgICAgIOKUgiBieXZhbHVlL1IoanNvbikg4pSCXG4gKiDilIIgICAgICAgICAg4pSCIGVudW0gICAgICAg4pSCIHVuZGVmaW5lZCjigKApICAg4pSCIC0gICAgICAgICDilIIgeyBlbnVtIH0gICDilIIgLSAgICAgICAgICAgICDilIIgLSAgICAgICAgICAgICAgICAg4pSCIC0gICAgICAgICAgICAgICDilIJcbiAqIOKUgiAgICAgICAgICDilIIgYXJyYXkgb2YgVCDilIIgdW5kZWZpbmVkKOKAoCkgICDilIIgLSAgICAgICAgIOKUgiAtICAgICAgICAgIOKUgiBhcnJheS9SKFQpICAgIOKUgiAtICAgICAgICAgICAgICAgICDilIIgLSAgICAgICAgICAgICAgIOKUglxuICog4pSCICAgICAgICAgIOKUgiBtYXAgb2YgVCAgIOKUgiB1bmRlZmluZWQo4oCgKSAgIOKUgiAtICAgICAgICAg4pSCIC0gICAgICAgICAg4pSCIC0gICAgICAgICAgICAg4pSCIC0gICAgICAgICAgICAgICAgIOKUgiBieXZhbHVlL1IoVCkgICAg4pSCXG4gKiDilIIgICAgICAgICAg4pSCIGludGVyZmFjZSAg4pSCIHVuZGVmaW5lZCjigKApICAg4pSCIC0gICAgICAgICDilIIgLSAgICAgICAgICDilIIgLSAgICAgICAgICAgICDilIIgeyByZWYgfSAgICAgICAgICAg4pSCIHsgcmVmOiBwcm94eSB9ICDilIJcbiAqIOKUgiAgICAgICAgICDilIIgc3RydWN0ICAgICDilIIgdW5kZWZpbmVkKOKAoCkgICDilIIgLSAgICAgICAgIOKUgiAtICAgICAgICAgIOKUgiAtICAgICAgICAgICAgIOKUgiAtICAgICAgICAgICAgICAgICDilIIgYnl2YWx1ZS9SKFRba10pIOKUglxuICog4pSCICAgICAgICAgIOKUgiBjbGFzcyAgICAgIOKUgiB1bmRlZmluZWQo4oCgKSAgIOKUgiAtICAgICAgICAg4pSCIC0gICAgICAgICAg4pSCIC0gICAgICAgICAgICAg4pSCIHsgcmVmIH0gICAgICAgICAgIOKUgiB7IHJlZjogcHJveHkgfSAg4pSCXG4gKiDilIIgICAgICAgICAg4pSCIGFueSAgICAgICAg4pSCIHVuZGVmaW5lZCAgICAgIOKUgiB7IGRhdGUgfSAg4pSCIHZhbHVlICAgICAg4pSCIGFycmF5L1IoYW55KSAg4pSCIHsgcmVmIH0gICAgICAgICAgIOKUgiBieXZhbHVlL1IoYW55KSAg4pSCXG4gKiDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAqXG4gKiAgLSAoKikgc2NhbGFyIG1lYW5zICdzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuJ1xuICogIC0gKOKAoCkgdGhyb3cgaWYgbm90IG51bGxhYmxlXG4gKiAgLSAvUih0KSByZWN1cnNlIHdpdGggZGVjbGFyZWQgdHlwZSB0XG4gKi9cblxuaW1wb3J0ICogYXMgc3BlYyBmcm9tICdAanNpaS9zcGVjJztcblxuaW1wb3J0IHtcbiAgaXNPYmpSZWYsXG4gIGlzV2lyZURhdGUsXG4gIGlzV2lyZUVudW0sXG4gIGlzV2lyZU1hcCxcbiAgT2JqUmVmLFxuICBUT0tFTl9EQVRFLFxuICBUT0tFTl9FTlVNLFxuICBUT0tFTl9NQVAsXG4gIFdpcmVEYXRlLFxuICBXaXJlRW51bSxcbiAgaXNXaXJlU3RydWN0LFxuICBUT0tFTl9TVFJVQ1QsXG59IGZyb20gJy4vYXBpJztcbmltcG9ydCB7IGpzaWlUeXBlRnFuLCBvYmplY3RSZWZlcmVuY2UsIE9iamVjdFRhYmxlIH0gZnJvbSAnLi9vYmplY3RzJztcblxuaW1wb3J0IHsgYXBpIH0gZnJvbSAnLic7XG5cbi8qKlxuICogQSBzcGVjaWZpYyBzaW5nbGV0b24gdHlwZSB0byBiZSBleHBsaWNpdCBhYm91dCBhIFZvaWQgdHlwZVxuICpcbiAqIEluIHRoZSBzcGVjLCAndm9pZCcgaXMgcmVwcmVzZW50ZWQgYXMgJ3VuZGVmaW5lZCcoKiksIGJ1dCBhbGxvd2luZyB0aGVcbiAqIHZhbHVlICd1bmRlZmluZWQnIGluIGZ1bmN0aW9uIGNhbGxzIGhhcyBsZWFkIHRvIGNvbnN1bWVycyBmYWlsaW5nIHRvIHBhc3NcbiAqIHR5cGUgaW5mb3JtYXRpb24gdGhhdCB0aGV5IGhhZCwganVzdCBiZWNhdXNlIHRoZXkgZGlkbid0IFwiaGF2ZSB0b1wiICh0aGVcbiAqIHBhcmFtZXRlciB3YXMgb3B0aW9uYWwpLlxuICpcbiAqICgqKSBBcyBpbiwgZGVjbGFyYXRpb24gb2YgYSBtZXRob2QgbG9va3MgbGlrZSB7IHJldHVybnM/OiBUeXBlUmVmZXJlbmNlIH1cbiAqIGFuZCB0aGUgYWJzZW5jZSBvZiBhIHR5cGUgbWVhbnMgaXQgcmV0dXJucyAndm9pZCcuXG4gKi9cbmV4cG9ydCB0eXBlIFZvaWQgPSAndm9pZCc7XG5cbi8qKlxuICogQSB0eXBlIGluc3RhbmNlLCBvciBWb2lkXG4gKi9cbmV4cG9ydCB0eXBlIE9wdGlvbmFsVmFsdWVPclZvaWQgPSBzcGVjLk9wdGlvbmFsVmFsdWUgfCBWb2lkO1xuXG4vKipcbiAqIEEgc3BlY2lhbCBGUU4gdGhhdCBjYW4gYmUgdXNlZCB0byBjcmVhdGUgZW1wdHkgamF2YXNjcmlwdCBvYmplY3RzLlxuICovXG5leHBvcnQgY29uc3QgRU1QVFlfT0JKRUNUX0ZRTiA9ICdPYmplY3QnO1xuXG5leHBvcnQgY29uc3QgU1lNQk9MX1dJUkVfVFlQRSA9IFN5bWJvbC5mb3IoJyRqc2lpJHdpcmVUeXBlJCcpO1xuXG4vKipcbiAqIFRoZSB0eXBlIGtpbmQsIHRoYXQgY29udHJvbHMgaG93IGl0IHdpbGwgYmUgc2VyaWFsaXplZCBhY2NvcmRpbmcgdG8gdGhlIGFib3ZlIHRhYmxlXG4gKi9cbmV4cG9ydCBjb25zdCBlbnVtIFNlcmlhbGl6YXRpb25DbGFzcyB7XG4gIFZvaWQgPSAnVm9pZCcsXG4gIERhdGUgPSAnRGF0ZScsXG4gIFNjYWxhciA9ICdTY2FsYXInLFxuICBKc29uID0gJ0pzb24nLFxuICBFbnVtID0gJ0VudW0nLFxuICBBcnJheSA9ICdBcnJheScsXG4gIE1hcCA9ICdNYXAnLFxuICBTdHJ1Y3QgPSAnU3RydWN0JyxcbiAgUmVmZXJlbmNlVHlwZSA9ICdSZWZUeXBlJyxcbiAgQW55ID0gJ0FueScsXG59XG5cbnR5cGUgVHlwZUxvb2t1cCA9IChmcW46IHNwZWMuRlFOKSA9PiBzcGVjLlR5cGU7XG50eXBlIFN5bWJvbExvb2t1cCA9IChmcW46IHNwZWMuRlFOKSA9PiBhbnk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VyaWFsaXplckhvc3Qge1xuICByZWFkb25seSBvYmplY3RzOiBPYmplY3RUYWJsZTtcbiAgZGVidWcoLi4uYXJnczogYW55W10pOiB2b2lkO1xuICBsb29rdXBUeXBlKGZxbjogc3RyaW5nKTogc3BlYy5UeXBlO1xuICByZWN1cnNlKHg6IGFueSwgdHlwZTogT3B0aW9uYWxWYWx1ZU9yVm9pZCk6IGFueTtcbiAgZmluZFN5bWJvbChmcW46IHNwZWMuRlFOKTogYW55O1xufVxuXG5pbnRlcmZhY2UgU2VyaWFsaXplciB7XG4gIHNlcmlhbGl6ZShcbiAgICB2YWx1ZTogdW5rbm93bixcbiAgICB0eXBlOiBPcHRpb25hbFZhbHVlT3JWb2lkLFxuICAgIGhvc3Q6IFNlcmlhbGl6ZXJIb3N0LFxuICApOiBhbnk7XG4gIGRlc2VyaWFsaXplKFxuICAgIHZhbHVlOiB1bmtub3duLFxuICAgIHR5cGU6IE9wdGlvbmFsVmFsdWVPclZvaWQsXG4gICAgaG9zdDogU2VyaWFsaXplckhvc3QsXG4gICk6IGFueTtcbn1cblxuZXhwb3J0IGNvbnN0IFNFUklBTElaRVJTOiB7IFtrOiBzdHJpbmddOiBTZXJpYWxpemVyIH0gPSB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgW1NlcmlhbGl6YXRpb25DbGFzcy5Wb2lkXToge1xuICAgIHNlcmlhbGl6ZSh2YWx1ZSwgX3R5cGUsIGhvc3QpIHtcbiAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgICAgIGhvc3QuZGVidWcoJ0V4cGVjdGVkIHZvaWQsIGdvdCcsIHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSxcblxuICAgIGRlc2VyaWFsaXplKHZhbHVlLCBfdHlwZSwgaG9zdCkge1xuICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgaG9zdC5kZWJ1ZygnRXhwZWN0ZWQgdm9pZCwgZ290JywgdmFsdWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9LFxuICB9LFxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgW1NlcmlhbGl6YXRpb25DbGFzcy5EYXRlXToge1xuICAgIHNlcmlhbGl6ZSh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSk6IFdpcmVEYXRlIHwgdW5kZWZpbmVkIHtcbiAgICAgIGlmIChudWxsQW5kT2sodmFsdWUsIG9wdGlvbmFsVmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBpZiAob3B0aW9uYWxWYWx1ZSA9PT0gJ3ZvaWQnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRW5jb3VudGVyZWQgdW5leHBlY3RlZCBgdm9pZGAgdHlwZScpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWlzRGF0ZSh2YWx1ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBEYXRlLCBnb3QgJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9YCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2VyaWFsaXplRGF0ZSh2YWx1ZSk7XG4gICAgfSxcblxuICAgIGRlc2VyaWFsaXplKHZhbHVlLCBvcHRpb25hbFZhbHVlKSB7XG4gICAgICBpZiAobnVsbEFuZE9rKHZhbHVlLCBvcHRpb25hbFZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWlzV2lyZURhdGUodmFsdWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgRGF0ZSwgZ290ICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRlc2VyaWFsaXplRGF0ZSh2YWx1ZSk7XG4gICAgfSxcbiAgfSxcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIFtTZXJpYWxpemF0aW9uQ2xhc3MuU2NhbGFyXToge1xuICAgIHNlcmlhbGl6ZSh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSkge1xuICAgICAgaWYgKG51bGxBbmRPayh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25hbFZhbHVlID09PSAndm9pZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFbmNvdW50ZXJlZCB1bmV4cGVjdGVkIGB2b2lkYCB0eXBlJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHByaW1pdGl2ZVR5cGUgPSBvcHRpb25hbFZhbHVlLnR5cGUgYXMgc3BlYy5QcmltaXRpdmVUeXBlUmVmZXJlbmNlO1xuXG4gICAgICBpZiAoIWlzU2NhbGFyKHZhbHVlKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEV4cGVjdGVkICR7c3BlYy5kZXNjcmliZVR5cGVSZWZlcmVuY2UoXG4gICAgICAgICAgICBvcHRpb25hbFZhbHVlLnR5cGUsXG4gICAgICAgICAgKX0sIGdvdCAke0pTT04uc3RyaW5naWZ5KHZhbHVlKX1gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gcHJpbWl0aXZlVHlwZS5wcmltaXRpdmUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBFeHBlY3RlZCBhICR7c3BlYy5kZXNjcmliZVR5cGVSZWZlcmVuY2UoXG4gICAgICAgICAgICBvcHRpb25hbFZhbHVlLnR5cGUsXG4gICAgICAgICAgKX0sIGdvdCAke0pTT04uc3RyaW5naWZ5KHZhbHVlKX0gKCR7dHlwZW9mIHZhbHVlfSlgLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0sXG5cbiAgICBkZXNlcmlhbGl6ZSh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSkge1xuICAgICAgaWYgKG51bGxBbmRPayh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25hbFZhbHVlID09PSAndm9pZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFbmNvdW50ZXJlZCB1bmV4cGVjdGVkIGB2b2lkYCB0eXBlJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHByaW1pdGl2ZVR5cGUgPSBvcHRpb25hbFZhbHVlLnR5cGUgYXMgc3BlYy5QcmltaXRpdmVUeXBlUmVmZXJlbmNlO1xuXG4gICAgICBpZiAoIWlzU2NhbGFyKHZhbHVlKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEV4cGVjdGVkIGEgJHtzcGVjLmRlc2NyaWJlVHlwZVJlZmVyZW5jZShcbiAgICAgICAgICAgIG9wdGlvbmFsVmFsdWUudHlwZSxcbiAgICAgICAgICApfSwgZ290ICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBwcmltaXRpdmVUeXBlLnByaW1pdGl2ZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEV4cGVjdGVkIGEgJHtzcGVjLmRlc2NyaWJlVHlwZVJlZmVyZW5jZShcbiAgICAgICAgICAgIG9wdGlvbmFsVmFsdWUudHlwZSxcbiAgICAgICAgICApfSwgZ290ICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfSAoJHt0eXBlb2YgdmFsdWV9KWAsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9LFxuICB9LFxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgW1NlcmlhbGl6YXRpb25DbGFzcy5Kc29uXToge1xuICAgIHNlcmlhbGl6ZSh2YWx1ZSkge1xuICAgICAgLy8gSnVzdCB3aGF0ZXZlci4gRGF0ZXMgd2lsbCBhdXRvbWF0aWNhbGx5IHNlcmlhbGl6ZSB0aGVtc2VsdmVzIHRvIHN0cmluZ3MuXG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfSxcbiAgICBkZXNlcmlhbGl6ZSh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSwgaG9zdCkge1xuICAgICAgLy8gLyFcXCBUb3AtbGV2ZWwgXCJudWxsXCIgd2lsbCB0dXJuIHRvIHVuZGVmaW5lZCwgYnV0IGFueSBudWxsIG5lc3RlZCBpbiB0aGUgdmFsdWUgaXMgdmFsaWQgSlNPTiwgc28gaXQnbGwgc3RheSFcbiAgICAgIGlmIChudWxsQW5kT2sodmFsdWUsIG9wdGlvbmFsVmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIC8vIEEgbWFwcGluZyBvYmplY3QgY2FuIGFycml2ZSB0aG91Z2ggaGVyZS4gVGhpcyB3b3VsZCBiZSB0aGUgY2FzZSBpZiBhbnl0aGluZyB0aGF0IGlzIHZhbGlkIGludG8gYSBNYXA8c3RyaW5nLCA/PlxuICAgICAgLy8gaXMgcGFzc2VkIGludG8gYSBKU09OIHRyYW5zZmVyIHBvaW50LiBJbmRlZWQsIHRob3NlIGFyZSBhbHNvIHZhbGlkIEpTT04hIEZvciBleGFtcGxlLCBQeXRob24gXCJkaWN0c1wiIHdpbGwgYmVcbiAgICAgIC8vIHNlcmlhbGl6ZWQgKGJ5IHRoZSBQeXRob24gcnVudGltZSkgYXMgYSAkanNpaS5tYXAgKHRoZSBtYXBwaW5nIG9iamVjdCkuIFdlIG5lZWQgdG8gZGUtc2VyaWFsaXplIHRoYXQgYXMgYVxuICAgICAgLy8gTWFwPHN0cmluZywgSlNPTj4gaW4gb3JkZXIgdG8gb2J0YWluIHRoZSBjb3JyZWN0IG91dHB1dCBiZWhhdmlvciBoZXJlIVxuICAgICAgaWYgKGlzV2lyZU1hcCh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIFNFUklBTElaRVJTW1NlcmlhbGl6YXRpb25DbGFzcy5NYXBdLmRlc2VyaWFsaXplKFxuICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG9wdGlvbmFsOiBmYWxzZSxcbiAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgY29sbGVjdGlvbjoge1xuICAgICAgICAgICAgICAgIGtpbmQ6IHNwZWMuQ29sbGVjdGlvbktpbmQuTWFwLFxuICAgICAgICAgICAgICAgIGVsZW1lbnR0eXBlOiB7IHByaW1pdGl2ZTogc3BlYy5QcmltaXRpdmVUeXBlLkpzb24gfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBob3N0LFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdmFsdWUubWFwKG1hcEpzb25WYWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBtYXBWYWx1ZXModmFsdWUsIG1hcEpzb25WYWx1ZSk7XG5cbiAgICAgIGZ1bmN0aW9uIG1hcEpzb25WYWx1ZSh0b01hcDogYW55KSB7XG4gICAgICAgIGlmICh0b01hcCA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIHRvTWFwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBob3N0LnJlY3Vyc2UodG9NYXAsIHtcbiAgICAgICAgICB0eXBlOiB7IHByaW1pdGl2ZTogc3BlYy5QcmltaXRpdmVUeXBlLkpzb24gfSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgfSxcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIFtTZXJpYWxpemF0aW9uQ2xhc3MuRW51bV06IHtcbiAgICBzZXJpYWxpemUodmFsdWUsIG9wdGlvbmFsVmFsdWUsIGhvc3QpOiBXaXJlRW51bSB8IHVuZGVmaW5lZCB7XG4gICAgICBpZiAobnVsbEFuZE9rKHZhbHVlLCBvcHRpb25hbFZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbmFsVmFsdWUgPT09ICd2b2lkJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VuY291bnRlcmVkIHVuZXhwZWN0ZWQgYHZvaWRgIHR5cGUnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycgJiYgdHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGVudW0gdmFsdWUsIGdvdCAke0pTT04uc3RyaW5naWZ5KHZhbHVlKX1gKTtcbiAgICAgIH1cblxuICAgICAgaG9zdC5kZWJ1ZygnU2VyaWFsaXppbmcgZW51bScpO1xuXG4gICAgICBjb25zdCBlbnVtVHlwZSA9IG9wdGlvbmFsVmFsdWUudHlwZSBhcyBzcGVjLk5hbWVkVHlwZVJlZmVyZW5jZTtcbiAgICAgIGNvbnN0IGVudW1NYXAgPSBob3N0LmZpbmRTeW1ib2woZW51bVR5cGUuZnFuKTtcbiAgICAgIGNvbnN0IGVudW1FbnRyeSA9IE9iamVjdC5lbnRyaWVzKGVudW1NYXApLmZpbmQoKFssIHZdKSA9PiB2ID09PSB2YWx1ZSk7XG4gICAgICBpZiAoIWVudW1FbnRyeSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIGVudHJ5IGluICR7ZW51bVR5cGUuZnFufSBoYXMgdmFsdWUgJHt2YWx1ZX1gKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7IFtUT0tFTl9FTlVNXTogYCR7ZW51bVR5cGUuZnFufS8ke2VudW1FbnRyeVswXX1gIH07XG4gICAgfSxcbiAgICBkZXNlcmlhbGl6ZSh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSwgaG9zdCkge1xuICAgICAgaWYgKG51bGxBbmRPayh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc1dpcmVFbnVtKHZhbHVlKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGVudW0gdmFsdWUsIGdvdCAke0pTT04uc3RyaW5naWZ5KHZhbHVlKX1gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRlc2VyaWFsaXplRW51bSh2YWx1ZSwgaG9zdC5maW5kU3ltYm9sKTtcbiAgICB9LFxuICB9LFxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgW1NlcmlhbGl6YXRpb25DbGFzcy5BcnJheV06IHtcbiAgICBzZXJpYWxpemUodmFsdWUsIG9wdGlvbmFsVmFsdWUsIGhvc3QpIHtcbiAgICAgIGlmIChudWxsQW5kT2sodmFsdWUsIG9wdGlvbmFsVmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBpZiAob3B0aW9uYWxWYWx1ZSA9PT0gJ3ZvaWQnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRW5jb3VudGVyZWQgdW5leHBlY3RlZCBgdm9pZGAgdHlwZScpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgYXJyYXkgdHlwZSwgZ290ICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBhcnJheVR5cGUgPSBvcHRpb25hbFZhbHVlLnR5cGUgYXMgc3BlYy5Db2xsZWN0aW9uVHlwZVJlZmVyZW5jZTtcblxuICAgICAgcmV0dXJuIHZhbHVlLm1hcCgoeCkgPT5cbiAgICAgICAgaG9zdC5yZWN1cnNlKHgsIHsgdHlwZTogYXJyYXlUeXBlLmNvbGxlY3Rpb24uZWxlbWVudHR5cGUgfSksXG4gICAgICApO1xuICAgIH0sXG4gICAgZGVzZXJpYWxpemUodmFsdWUsIG9wdGlvbmFsVmFsdWUsIGhvc3QpIHtcbiAgICAgIGlmIChudWxsQW5kT2sodmFsdWUsIG9wdGlvbmFsVmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBpZiAob3B0aW9uYWxWYWx1ZSA9PT0gJ3ZvaWQnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRW5jb3VudGVyZWQgdW5leHBlY3RlZCBgdm9pZGAgdHlwZScpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgYXJyYXkgdHlwZSwgZ290ICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBhcnJheVR5cGUgPSBvcHRpb25hbFZhbHVlLnR5cGUgYXMgc3BlYy5Db2xsZWN0aW9uVHlwZVJlZmVyZW5jZTtcblxuICAgICAgcmV0dXJuIHZhbHVlLm1hcCgoeCkgPT5cbiAgICAgICAgaG9zdC5yZWN1cnNlKHgsIHsgdHlwZTogYXJyYXlUeXBlLmNvbGxlY3Rpb24uZWxlbWVudHR5cGUgfSksXG4gICAgICApO1xuICAgIH0sXG4gIH0sXG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICBbU2VyaWFsaXphdGlvbkNsYXNzLk1hcF06IHtcbiAgICBzZXJpYWxpemUodmFsdWUsIG9wdGlvbmFsVmFsdWUsIGhvc3QpIHtcbiAgICAgIGlmIChudWxsQW5kT2sodmFsdWUsIG9wdGlvbmFsVmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBpZiAob3B0aW9uYWxWYWx1ZSA9PT0gJ3ZvaWQnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRW5jb3VudGVyZWQgdW5leHBlY3RlZCBgdm9pZGAgdHlwZScpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtYXBUeXBlID0gb3B0aW9uYWxWYWx1ZS50eXBlIGFzIHNwZWMuQ29sbGVjdGlvblR5cGVSZWZlcmVuY2U7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBbVE9LRU5fTUFQXTogbWFwVmFsdWVzKHZhbHVlLCAodikgPT5cbiAgICAgICAgICBob3N0LnJlY3Vyc2UodiwgeyB0eXBlOiBtYXBUeXBlLmNvbGxlY3Rpb24uZWxlbWVudHR5cGUgfSksXG4gICAgICAgICksXG4gICAgICB9O1xuICAgIH0sXG4gICAgZGVzZXJpYWxpemUodmFsdWUsIG9wdGlvbmFsVmFsdWUsIGhvc3QpIHtcbiAgICAgIGlmIChudWxsQW5kT2sodmFsdWUsIG9wdGlvbmFsVmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBpZiAob3B0aW9uYWxWYWx1ZSA9PT0gJ3ZvaWQnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRW5jb3VudGVyZWQgdW5leHBlY3RlZCBgdm9pZGAgdHlwZScpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtYXBUeXBlID0gb3B0aW9uYWxWYWx1ZS50eXBlIGFzIHNwZWMuQ29sbGVjdGlvblR5cGVSZWZlcmVuY2U7XG4gICAgICBpZiAoIWlzV2lyZU1hcCh2YWx1ZSkpIHtcbiAgICAgICAgLy8gQ29tcGF0aWJpbGl0eSBtb2RlIHdpdGggb2xkZXIgdmVyc2lvbnMgdGhhdCBkaWRuJ3Qgd3JhcCBpbiBbVE9LRU5fTUFQXVxuICAgICAgICByZXR1cm4gbWFwVmFsdWVzKHZhbHVlLCAodikgPT5cbiAgICAgICAgICBob3N0LnJlY3Vyc2UodiwgeyB0eXBlOiBtYXBUeXBlLmNvbGxlY3Rpb24uZWxlbWVudHR5cGUgfSksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBjb25zdCByZXN1bHQgPSBtYXBWYWx1ZXModmFsdWVbVE9LRU5fTUFQXSwgKHYpID0+XG4gICAgICAgIGhvc3QucmVjdXJzZSh2LCB7IHR5cGU6IG1hcFR5cGUuY29sbGVjdGlvbi5lbGVtZW50dHlwZSB9KSxcbiAgICAgICk7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocmVzdWx0LCBTWU1CT0xfV0lSRV9UWVBFLCB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICB2YWx1ZTogVE9LRU5fTUFQLFxuICAgICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcbiAgfSxcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIFtTZXJpYWxpemF0aW9uQ2xhc3MuU3RydWN0XToge1xuICAgIHNlcmlhbGl6ZSh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSwgaG9zdCkge1xuICAgICAgaWYgKG51bGxBbmRPayh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25hbFZhbHVlID09PSAndm9pZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFbmNvdW50ZXJlZCB1bmV4cGVjdGVkIGB2b2lkYCB0eXBlJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBvYmplY3QsIGdvdCAke0pTT04uc3RyaW5naWZ5KHZhbHVlKX1gKTtcbiAgICAgIH1cblxuICAgICAgLypcbiAgICAgICAgVGhpcyBpcyB3aGF0IHdlJ2QgbGlrZSB0byBkbywgYnV0IHdlIGNhbid0IGJlY2F1c2UgYXQgbGVhc3QgdGhlIEphdmEgY2xpZW50XG4gICAgICAgIGRvZXMgbm90IHVuZGVyc3RhbmQgYnktdmFsdWUgc2VyaWFsaXplZCBpbnRlcmZhY2UgdHlwZXMsIHNvIHdlJ2xsIGhhdmUgdG9cbiAgICAgICAgc2VyaWFsaXplIGJ5LXJlZmVyZW5jZS4gQWRkaXRpb25hbGx5LCBzZXJpYWxpemluZyBrbm93biBwcm9wZXJ0aWVzIHdvdWxkXG4gICAgICAgIGNhdXNlIHByb2JsZW1zIHdoZW4gdGhlIHJldHVybiB0eXBlIG9mIGEgbWV0aG9kIGlzIGEgVU5JT04gb2Ygc3RydWN0cy5cbiAgICAgICAgU2VlOiBodHRwczovL2dpdGh1Yi5jb20vYXdzL2pzaWkvaXNzdWVzLzQwMFxuXG4gICAgICBjb25zdCBwcm9wcyA9IHByb3BlcnRpZXNPZihuYW1lZFR5cGUpO1xuXG4gICAgICByZXR1cm4gbWFwVmFsdWVzKHZhbHVlLCAodiwga2V5KSA9PiB7XG4gICAgICAgIGlmICghcHJvcHNba2V5XSkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IC8vIERvbid0IG1hcCBpZiB1bmtub3duIHByb3BlcnR5XG4gICAgICAgIHJldHVybiBob3N0LnJlY3Vyc2UodiwgcHJvcHNba2V5XS50eXBlKTtcbiAgICAgIH0pO1xuICAgICAgKi9cblxuICAgICAgaG9zdC5kZWJ1ZygnUmV0dXJuaW5nIHZhbHVlIHR5cGUgYnkgcmVmZXJlbmNlJyk7XG4gICAgICByZXR1cm4gaG9zdC5vYmplY3RzLnJlZ2lzdGVyT2JqZWN0KHZhbHVlLCBFTVBUWV9PQkpFQ1RfRlFOLCBbXG4gICAgICAgIChvcHRpb25hbFZhbHVlLnR5cGUgYXMgc3BlYy5OYW1lZFR5cGVSZWZlcmVuY2UpLmZxbixcbiAgICAgIF0pO1xuICAgIH0sXG4gICAgZGVzZXJpYWxpemUodmFsdWUsIG9wdGlvbmFsVmFsdWUsIGhvc3QpIHtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIE9iamVjdC5rZXlzKHZhbHVlID8/IHt9KS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgLy8gVHJlYXQgZW1wdHkgc3RydWN0cyBhcyBgdW5kZWZpbmVkYCAoc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvanNpaS9pc3N1ZXMvNDExKVxuICAgICAgICB2YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmIChudWxsQW5kT2sodmFsdWUsIG9wdGlvbmFsVmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBpZiAob3B0aW9uYWxWYWx1ZSA9PT0gJ3ZvaWQnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRW5jb3VudGVyZWQgdW5leHBlY3RlZCBgdm9pZGAgdHlwZScpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyB8fCB2YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgRXhwZWN0ZWQgb2JqZWN0IHJlZmVyZW5jZSwgZ290ICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWAsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5hbWVkVHlwZSA9IGhvc3QubG9va3VwVHlwZShcbiAgICAgICAgKG9wdGlvbmFsVmFsdWUudHlwZSBhcyBzcGVjLk5hbWVkVHlwZVJlZmVyZW5jZSkuZnFuLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHByb3BzID0gcHJvcGVydGllc09mKG5hbWVkVHlwZSwgaG9zdC5sb29rdXBUeXBlKTtcblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgR290IGFuIGFycmF5IHdoZXJlIGEgJHtuYW1lZFR5cGUuZnFufSB3YXMgZXhwZWN0ZWQuIERpZCB5b3UgbWVhbiB0byBwYXNzIGEgdmFyaWFibGUgbnVtYmVyIG9mIGFyZ3VtZW50cz9gLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICAvLyBTaW1pbGFybHkgdG8gc2VyaWFsaXphdGlvbiwgd2UgbWlnaHQgYmUgZ2V0dGluZyBhIHJlZmVyZW5jZSB0eXBlIHdoZXJlIHdlJ3JlXG4gICAgICAvLyBleHBlY3RpbmcgYSB2YWx1ZSB0eXBlLiBBY2NlcHQgdGhpcyBmb3Igbm93IChidXQgYWxzbyB2YWxpZGF0ZSB0aGF0IG9iamVjdFxuICAgICAgLy8gZm9yIHByZXNlbmNlIG9mIHRoZSByaWdodCBwcm9wZXJ0aWVzKS5cbiAgICAgIGlmIChpc09ialJlZih2YWx1ZSkpIHtcbiAgICAgICAgaG9zdC5kZWJ1ZyhcbiAgICAgICAgICAnRXhwZWN0ZWQgdmFsdWUgdHlwZSBidXQgZ290IHJlZmVyZW5jZSB0eXBlLCBhY2NlcHRpbmcgZm9yIG5vdyAoYXdzbGFicy9qc2lpIzQwMCknLFxuICAgICAgICApO1xuXG4gICAgICAgIC8vIFJldHVybiBzYW1lIElOU1RBTkNFIChzaG91bGRuJ3QgbWF0dGVyIGJ1dCB3ZSBkb24ndCBrbm93IGZvciBzdXJlIHRoYXQgaXQgZG9lc24ndClcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlUmVxdWlyZWRQcm9wcyhcbiAgICAgICAgICBob3N0Lm9iamVjdHMuZmluZE9iamVjdCh2YWx1ZSkuaW5zdGFuY2UsXG4gICAgICAgICAgbmFtZWRUeXBlLmZxbixcbiAgICAgICAgICBwcm9wcyxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGFwaS5pc1dpcmVTdHJ1Y3QodmFsdWUpKSB7XG4gICAgICAgIGNvbnN0IHsgZnFuLCBkYXRhIH0gPSB2YWx1ZVthcGkuVE9LRU5fU1RSVUNUXTtcbiAgICAgICAgaWYgKCFpc0Fzc2lnbmFibGUoZnFuLCBuYW1lZFR5cGUsIGhvc3QubG9va3VwVHlwZSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgV2lyZSBzdHJ1Y3QgdHlwZSAnJHtmcW59JyBkb2VzIG5vdCBtYXRjaCBleHBlY3RlZCAnJHtuYW1lZFR5cGUuZnFufSdgLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdmFsdWUgPSBkYXRhO1xuICAgICAgfVxuXG4gICAgICAvLyBQeXRob24sIGZvciBleGFtcGxlLCBhbGxvd3MgdXNpbmcgcGxhaW4gbWFwcGluZyBvYmplY3RzIGluc3RlYWQgb2YgU3RydWN0cyAoZHlhbm1pYyB0eXBpbmcsIFlPTE8hKVxuICAgICAgaWYgKGFwaS5pc1dpcmVNYXAodmFsdWUpKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWVbYXBpLlRPS0VOX01BUF07XG4gICAgICB9XG5cbiAgICAgIHZhbHVlID0gdmFsaWRhdGVSZXF1aXJlZFByb3BzKHZhbHVlIGFzIGFueSwgbmFtZWRUeXBlLmZxbiwgcHJvcHMpO1xuXG4gICAgICAvLyBSZXR1cm4gYSBkaWN0IENPUFksIHdlIGhhdmUgYnktdmFsdWUgc2VtYW50aWNzIGFueXdheS5cbiAgICAgIHJldHVybiBtYXBWYWx1ZXModmFsdWUsICh2LCBrZXkpID0+IHtcbiAgICAgICAgaWYgKCFwcm9wc1trZXldKSB7XG4gICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfSAvLyBEb24ndCBtYXAgaWYgdW5rbm93biBwcm9wZXJ0eVxuICAgICAgICByZXR1cm4gaG9zdC5yZWN1cnNlKHYsIHByb3BzW2tleV0pO1xuICAgICAgfSk7XG4gICAgfSxcbiAgfSxcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIFtTZXJpYWxpemF0aW9uQ2xhc3MuUmVmZXJlbmNlVHlwZV06IHtcbiAgICBzZXJpYWxpemUodmFsdWUsIG9wdGlvbmFsVmFsdWUsIGhvc3QpOiBPYmpSZWYgfCB1bmRlZmluZWQge1xuICAgICAgaWYgKG51bGxBbmRPayh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25hbFZhbHVlID09PSAndm9pZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFbmNvdW50ZXJlZCB1bmV4cGVjdGVkIGB2b2lkYCB0eXBlJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBFeHBlY3RlZCBvYmplY3QgcmVmZXJlbmNlLCBnb3QgJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9YCxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZXhwZWN0ZWRUeXBlID0gaG9zdC5sb29rdXBUeXBlKFxuICAgICAgICAob3B0aW9uYWxWYWx1ZS50eXBlIGFzIHNwZWMuTmFtZWRUeXBlUmVmZXJlbmNlKS5mcW4sXG4gICAgICApO1xuICAgICAgY29uc3QgaW50ZXJmYWNlcyA9IHNwZWMuaXNJbnRlcmZhY2VUeXBlKGV4cGVjdGVkVHlwZSlcbiAgICAgICAgPyBbZXhwZWN0ZWRUeXBlLmZxbl1cbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBqc2lpVHlwZSA9XG4gICAgICAgIGpzaWlUeXBlRnFuKHZhbHVlKSA/P1xuICAgICAgICAoc3BlYy5pc0NsYXNzVHlwZShleHBlY3RlZFR5cGUpID8gZXhwZWN0ZWRUeXBlLmZxbiA6IEVNUFRZX09CSkVDVF9GUU4pO1xuXG4gICAgICByZXR1cm4gaG9zdC5vYmplY3RzLnJlZ2lzdGVyT2JqZWN0KHZhbHVlLCBqc2lpVHlwZSwgaW50ZXJmYWNlcyk7XG4gICAgfSxcbiAgICBkZXNlcmlhbGl6ZSh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSwgaG9zdCkge1xuICAgICAgaWYgKG51bGxBbmRPayh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25hbFZhbHVlID09PSAndm9pZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFbmNvdW50ZXJlZCB1bmV4cGVjdGVkIGB2b2lkYCB0eXBlJyk7XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSBvbmx5IHdheSB0byBwYXNzIGEgYnktcmVmIG9iamVjdCBpcyB0byBoYXZlIGNyZWF0ZWQgaXRcbiAgICAgIC8vIHByZXZpb3VzbHkgaW5zaWRlIEpTSUkga2VybmVsLCBzbyBpdCBtdXN0IGhhdmUgYW4gb2JqcmVmIGFscmVhZHkuXG5cbiAgICAgIGlmICghaXNPYmpSZWYodmFsdWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgRXhwZWN0ZWQgb2JqZWN0IHJlZmVyZW5jZSwgZ290ICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWAsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgaW5zdGFuY2UsIGZxbiB9ID0gaG9zdC5vYmplY3RzLmZpbmRPYmplY3QodmFsdWUpO1xuXG4gICAgICBjb25zdCBuYW1lZFR5cGVSZWYgPSBvcHRpb25hbFZhbHVlLnR5cGUgYXMgc3BlYy5OYW1lZFR5cGVSZWZlcmVuY2U7XG4gICAgICBpZiAobmFtZWRUeXBlUmVmLmZxbiAhPT0gRU1QVFlfT0JKRUNUX0ZRTikge1xuICAgICAgICBjb25zdCBuYW1lZFR5cGUgPSBob3N0Lmxvb2t1cFR5cGUobmFtZWRUeXBlUmVmLmZxbik7XG5cbiAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgb2JqZWN0IHdlIGdvdCBpcyBvZiB0aGUgcmlnaHQgdHlwZVxuICAgICAgICAvLyBXZSBvbmx5IGRvIHRoaXMgZm9yIGNsYXNzZXMsIG5vdCBpbnRlcmZhY2VzLCBzaW5jZSBKYXZhIG1pZ2h0IHBhc3MgdXMgb2JqZWN0cyB0aGF0XG4gICAgICAgIC8vIHByaXZhdGVseSBpbXBsZW1lbnQgc29tZSBpbnRlcmZhY2UgYW5kIHdlIGNhbid0IHByb3ZlIHRoZXkgZG9uJ3QuXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvanNpaS9pc3N1ZXMvMzk5XG4gICAgICAgIGNvbnN0IGRlY2xhcmVkVHlwZSA9IG9wdGlvbmFsVmFsdWUudHlwZSBhcyBzcGVjLk5hbWVkVHlwZVJlZmVyZW5jZTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHNwZWMuaXNDbGFzc1R5cGUobmFtZWRUeXBlKSAmJlxuICAgICAgICAgICFpc0Fzc2lnbmFibGUoZnFuLCBkZWNsYXJlZFR5cGUsIGhvc3QubG9va3VwVHlwZSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYE9iamVjdCBvZiB0eXBlICR7ZnFufSBpcyBub3QgY29udmVydGlibGUgdG8gJHtkZWNsYXJlZFR5cGUuZnFufWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfSxcbiAgfSxcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIFtTZXJpYWxpemF0aW9uQ2xhc3MuQW55XToge1xuICAgIHNlcmlhbGl6ZSh2YWx1ZSwgX3R5cGUsIGhvc3QpIHtcbiAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc0RhdGUodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBzZXJpYWxpemVEYXRlKHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGlmIChpc1NjYWxhcih2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS5tYXAoKGUpID0+IGhvc3QucmVjdXJzZShlLCB7IHR5cGU6IHNwZWMuQ0FOT05JQ0FMX0FOWSB9KSk7XG4gICAgICB9XG5cbiAgICAgIC8vIE5vdGU6IG5vIGNhc2UgZm9yIFwiRU5VTVwiIGhlcmUsIHdpdGhvdXQgdHlwZSBkZWNsYXJhdGlvbiB3ZSBjYW4ndCB0ZWxsIHRoZSBkaWZmZXJlbmNlXG4gICAgICAvLyBiZXR3ZWVuIGFuIGVudW0gbWVtYmVyIGFuZCBhIHNjYWxhci5cblxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ0pTSUkgS2VybmVsIGlzIHVuYWJsZSB0byBzZXJpYWxpemUgYGZ1bmN0aW9uYC4gQW4gaW5zdGFuY2Ugd2l0aCBtZXRob2RzIG1pZ2h0IGhhdmUgYmVlbiByZXR1cm5lZCBieSBhbiBgYW55YCBtZXRob2Q/JyxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcgfHwgdmFsdWUgPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEpTSUkga2VybmVsIGFzc3VtcHRpb24gdmlvbGF0ZWQsICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICApfSBpcyBub3QgYW4gb2JqZWN0YCxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICBTWU1CT0xfV0lSRV9UWVBFIGluIHZhbHVlICYmXG4gICAgICAgICh2YWx1ZSBhcyBhbnkpW1NZTUJPTF9XSVJFX1RZUEVdID09PSBUT0tFTl9NQVBcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gU0VSSUFMSVpFUlNbU2VyaWFsaXphdGlvbkNsYXNzLk1hcF0uc2VyaWFsaXplKFxuICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgY29sbGVjdGlvbjoge1xuICAgICAgICAgICAgICAgIGtpbmQ6IHNwZWMuQ29sbGVjdGlvbktpbmQuTWFwLFxuICAgICAgICAgICAgICAgIGVsZW1lbnR0eXBlOiBzcGVjLkNBTk9OSUNBTF9BTlksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgaG9zdCxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gVG8gbWFrZSBzdXJlIHBlb3BsZSBhcmVuJ3QgZ29pbmcgdG8gdHJ5IGFuZCByZXR1cm4gTWFwPD4gb3IgU2V0PD4gb3V0LCB0ZXN0IGZvclxuICAgICAgLy8gdGhvc2UgYW5kIHRocm93IGEgZGVzY3JpcHRpdmUgZXJyb3IgbWVzc2FnZS4gV2UgY2FuJ3QgZGV0ZWN0IHRoZXNlIGNhc2VzIGFueSBvdGhlclxuICAgICAgLy8gd2F5LCBhbmQgdGhlIGJ5LXZhbHVlIHNlcmlhbGl6ZWQgb2JqZWN0IHdpbGwgYmUgcXVpdGUgdXNlbGVzcy5cbiAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFNldCB8fCB2YWx1ZSBpbnN0YW5jZW9mIE1hcCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW4ndCByZXR1cm4gb2JqZWN0cyBvZiB0eXBlIFNldCBvciBNYXBcIik7XG4gICAgICB9XG5cbiAgICAgIC8vIFVzZSBhIHByZXZpb3VzIHJlZmVyZW5jZSB0byBtYWludGFpbiBvYmplY3QgaWRlbnRpdHkuIE5PVEU6IHRoaXMgbWF5IGNhdXNlIHVzIHRvIHJldHVyblxuICAgICAgLy8gYSBkaWZmZXJlbnQgdHlwZSB0aGFuIHJlcXVlc3RlZCEgVGhpcyBpcyBqdXN0IGhvdyBpdCBpcyByaWdodCBub3cuXG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYXdzL2pzaWkvaXNzdWVzLzM5OVxuICAgICAgY29uc3QgcHJldlJlZiA9IG9iamVjdFJlZmVyZW5jZSh2YWx1ZSk7XG4gICAgICBpZiAocHJldlJlZikge1xuICAgICAgICByZXR1cm4gcHJldlJlZjtcbiAgICAgIH1cblxuICAgICAgLy8gSWYgdGhpcyBpcyBvciBzaG91bGQgYmUgYSByZWZlcmVuY2UgdHlwZSwgcGFzcyBvciBtYWtlIHRoZSByZWZlcmVuY2VcbiAgICAgIC8vIChMaWtlIHJlZ3VsYXIgcmVmdHlwZSBzZXJpYWxpemF0aW9uLCBidXQgd2l0aG91dCB0aGUgdHlwZSBkZXJpdmF0aW9uIHRvIGFuIGludGVyZmFjZSlcbiAgICAgIGNvbnN0IGpzaWlUeXBlID1cbiAgICAgICAganNpaVR5cGVGcW4odmFsdWUpID8/XG4gICAgICAgIChpc0J5UmVmZXJlbmNlT25seSh2YWx1ZSkgPyBFTVBUWV9PQkpFQ1RfRlFOIDogdW5kZWZpbmVkKTtcbiAgICAgIGlmIChqc2lpVHlwZSkge1xuICAgICAgICByZXR1cm4gaG9zdC5vYmplY3RzLnJlZ2lzdGVyT2JqZWN0KHZhbHVlLCBqc2lpVHlwZSk7XG4gICAgICB9XG5cbiAgICAgIC8vIEF0IHRoaXMgcG9pbnQgd2UgaGF2ZSBhbiBvYmplY3QgdGhhdCBpcyBub3Qgb2YgYW4gZXhwb3J0ZWQgdHlwZS4gRWl0aGVyIGFuIG9iamVjdFxuICAgICAgLy8gbGl0ZXJhbCwgb3IgYW4gaW5zdGFuY2Ugb2YgYSBmdWxseSBwcml2YXRlIGNsYXNzIChjYW5ub3QgZGlzdGluZ3Vpc2ggdGhvc2UgY2FzZXMpLlxuXG4gICAgICAvLyBXZSB3aWxsIHNlcmlhbGl6ZSBieS12YWx1ZSwgYnV0IHJlY3Vyc2UgZm9yIHNlcmlhbGl6YXRpb24gc28gdGhhdCBpZlxuICAgICAgLy8gdGhlIG9iamVjdCBjb250YWlucyByZWZlcmVuY2Ugb2JqZWN0cywgdGhleSB3aWxsIGJlIHNlcmlhbGl6ZWQgYXBwcm9wcmlhdGVseS5cbiAgICAgIC8vIChCYXNpY2FsbHksIHNlcmlhbGl6ZSBhbnl0aGluZyBlbHNlIGFzIGEgbWFwIG9mICdhbnknKS5cbiAgICAgIHJldHVybiBtYXBWYWx1ZXModmFsdWUsICh2KSA9PlxuICAgICAgICBob3N0LnJlY3Vyc2UodiwgeyB0eXBlOiBzcGVjLkNBTk9OSUNBTF9BTlkgfSksXG4gICAgICApO1xuICAgIH0sXG5cbiAgICBkZXNlcmlhbGl6ZSh2YWx1ZSwgX3R5cGUsIGhvc3QpIHtcbiAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc1dpcmVEYXRlKHZhbHVlKSkge1xuICAgICAgICBob3N0LmRlYnVnKCdBTlkgaXMgYSBEYXRlJyk7XG4gICAgICAgIHJldHVybiBkZXNlcmlhbGl6ZURhdGUodmFsdWUpO1xuICAgICAgfVxuICAgICAgaWYgKGlzU2NhbGFyKHZhbHVlKSkge1xuICAgICAgICBob3N0LmRlYnVnKCdBTlkgaXMgYSBTY2FsYXInKTtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIGhvc3QuZGVidWcoJ0FOWSBpcyBhbiBBcnJheScpO1xuICAgICAgICByZXR1cm4gdmFsdWUubWFwKChlKSA9PiBob3N0LnJlY3Vyc2UoZSwgeyB0eXBlOiBzcGVjLkNBTk9OSUNBTF9BTlkgfSkpO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNXaXJlRW51bSh2YWx1ZSkpIHtcbiAgICAgICAgaG9zdC5kZWJ1ZygnQU5ZIGlzIGFuIEVudW0nKTtcbiAgICAgICAgcmV0dXJuIGRlc2VyaWFsaXplRW51bSh2YWx1ZSwgaG9zdC5maW5kU3ltYm9sKTtcbiAgICAgIH1cbiAgICAgIGlmIChpc1dpcmVNYXAodmFsdWUpKSB7XG4gICAgICAgIGhvc3QuZGVidWcoJ0FOWSBpcyBhIE1hcCcpO1xuICAgICAgICBjb25zdCBtYXBPZkFueTogc3BlYy5Db2xsZWN0aW9uVHlwZVJlZmVyZW5jZSA9IHtcbiAgICAgICAgICBjb2xsZWN0aW9uOiB7XG4gICAgICAgICAgICBraW5kOiBzcGVjLkNvbGxlY3Rpb25LaW5kLk1hcCxcbiAgICAgICAgICAgIGVsZW1lbnR0eXBlOiBzcGVjLkNBTk9OSUNBTF9BTlksXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIFNFUklBTElaRVJTW1NlcmlhbGl6YXRpb25DbGFzcy5NYXBdLmRlc2VyaWFsaXplKFxuICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgIHsgdHlwZTogbWFwT2ZBbnkgfSxcbiAgICAgICAgICBob3N0LFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKGlzT2JqUmVmKHZhbHVlKSkge1xuICAgICAgICBob3N0LmRlYnVnKCdBTlkgaXMgYSBSZWYnKTtcbiAgICAgICAgcmV0dXJuIGhvc3Qub2JqZWN0cy5maW5kT2JqZWN0KHZhbHVlKS5pbnN0YW5jZTtcbiAgICAgIH1cblxuICAgICAgLy8gaWYgdGhlIHZhbHVlIGhhcyBhIHN0cnVjdCB0b2tlbiwgaXQgd2FzIHNlcmlhbGl6ZWQgYnkgYSB0eXBlZCBqc2lpXG4gICAgICAvLyBzdHJ1Y3QsIGJ1dCBzaW5jZSB0aGUgZGVzZXJpYWxpemF0aW9uIHRhcmdldCBpcyBBTlksIGFsbCB3ZSBjYW4gZG8gaXNcbiAgICAgIC8vIHN0cmlwIHRoZSBkYXRhIGZyb20gJGpzaWkuc3RydWN0IGFuZCBjb250aW51ZSB0byBkZXNlcmlhbGl6ZSBhcyBBTlkuXG4gICAgICBpZiAoaXNXaXJlU3RydWN0KHZhbHVlKSkge1xuICAgICAgICBjb25zdCB7IGZxbiwgZGF0YSB9ID0gdmFsdWVbVE9LRU5fU1RSVUNUXTtcbiAgICAgICAgaG9zdC5kZWJ1ZyhgQU5ZIGlzIGEgc3RydWN0IG9mIHR5cGUgJHtmcW59YCk7XG4gICAgICAgIHJldHVybiBTRVJJQUxJWkVSU1tTZXJpYWxpemF0aW9uQ2xhc3MuU3RydWN0XS5kZXNlcmlhbGl6ZShcbiAgICAgICAgICBkYXRhLFxuICAgICAgICAgIHsgdHlwZTogeyBmcW4gfSB9LFxuICAgICAgICAgIGhvc3QsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIEF0IHRoaXMgcG9pbnQgYWdhaW4sIGRlc2VyaWFsaXplIGJ5LXZhbHVlLlxuICAgICAgaG9zdC5kZWJ1ZygnQU5ZIGlzIGEgTWFwJyk7XG4gICAgICByZXR1cm4gbWFwVmFsdWVzKHZhbHVlLCAodikgPT5cbiAgICAgICAgaG9zdC5yZWN1cnNlKHYsIHsgdHlwZTogc3BlYy5DQU5PTklDQUxfQU5ZIH0pLFxuICAgICAgKTtcbiAgICB9LFxuICB9LFxufTtcblxuZnVuY3Rpb24gc2VyaWFsaXplRGF0ZSh2YWx1ZTogRGF0ZSk6IFdpcmVEYXRlIHtcbiAgcmV0dXJuIHsgW1RPS0VOX0RBVEVdOiB2YWx1ZS50b0lTT1N0cmluZygpIH07XG59XG5cbmZ1bmN0aW9uIGRlc2VyaWFsaXplRGF0ZSh2YWx1ZTogV2lyZURhdGUpOiBEYXRlIHtcbiAgcmV0dXJuIG5ldyBEYXRlKHZhbHVlW1RPS0VOX0RBVEVdKTtcbn1cblxuZnVuY3Rpb24gZGVzZXJpYWxpemVFbnVtKHZhbHVlOiBXaXJlRW51bSwgbG9va3VwOiBTeW1ib2xMb29rdXApIHtcbiAgY29uc3QgZW51bUxvY2F0b3IgPSB2YWx1ZVtUT0tFTl9FTlVNXTtcbiAgY29uc3Qgc2VwID0gZW51bUxvY2F0b3IubGFzdEluZGV4T2YoJy8nKTtcbiAgaWYgKHNlcCA9PT0gLTEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE1hbGZvcm1lZCBlbnVtIHZhbHVlOiAke0pTT04uc3RyaW5naWZ5KHZhbHVlKX1gKTtcbiAgfVxuXG4gIGNvbnN0IHR5cGVOYW1lID0gZW51bUxvY2F0b3Iuc2xpY2UoMCwgc2VwKTtcbiAgY29uc3QgdmFsdWVOYW1lID0gZW51bUxvY2F0b3Iuc2xpY2Uoc2VwICsgMSk7XG5cbiAgY29uc3QgZW51bVZhbHVlID0gbG9va3VwKHR5cGVOYW1lKVt2YWx1ZU5hbWVdO1xuICBpZiAoZW51bVZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIGVudW0gbWVtYmVyIG5hbWVkICR7dmFsdWVOYW1lfSBpbiAke3R5cGVOYW1lfWApO1xuICB9XG4gIHJldHVybiBlbnVtVmFsdWU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHlwZVNlcmlhbGl6YXRpb24ge1xuICBzZXJpYWxpemF0aW9uQ2xhc3M6IFNlcmlhbGl6YXRpb25DbGFzcztcbiAgdHlwZVJlZjogT3B0aW9uYWxWYWx1ZU9yVm9pZDtcbn1cblxuLyoqXG4gKiBGcm9tIGEgdHlwZSByZWZlcmVuY2UsIHJldHVybiB0aGUgcG9zc2libGUgc2VyaWFsaXphdGlvbiB0eXBlc1xuICpcbiAqIFRoZXJlIGNhbiBiZSBtdWx0aXBsZSwgYmVjYXVzZSB0aGUgdHlwZSBjYW4gYmUgYSB0eXBlIHVuaW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXphdGlvblR5cGUoXG4gIHR5cGVSZWY6IE9wdGlvbmFsVmFsdWVPclZvaWQsXG4gIGxvb2t1cDogVHlwZUxvb2t1cCxcbik6IFR5cGVTZXJpYWxpemF0aW9uW10ge1xuICBpZiAodHlwZVJlZiA9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiS2VybmVsIGVycm9yOiBleHBlY3RlZCB0eXBlIGluZm9ybWF0aW9uLCBnb3QgJ3VuZGVmaW5lZCdcIik7XG4gIH1cbiAgaWYgKHR5cGVSZWYgPT09ICd2b2lkJykge1xuICAgIHJldHVybiBbeyBzZXJpYWxpemF0aW9uQ2xhc3M6IFNlcmlhbGl6YXRpb25DbGFzcy5Wb2lkLCB0eXBlUmVmIH1dO1xuICB9XG4gIGlmIChzcGVjLmlzUHJpbWl0aXZlVHlwZVJlZmVyZW5jZSh0eXBlUmVmLnR5cGUpKSB7XG4gICAgc3dpdGNoICh0eXBlUmVmLnR5cGUucHJpbWl0aXZlKSB7XG4gICAgICBjYXNlIHNwZWMuUHJpbWl0aXZlVHlwZS5Bbnk6XG4gICAgICAgIHJldHVybiBbeyBzZXJpYWxpemF0aW9uQ2xhc3M6IFNlcmlhbGl6YXRpb25DbGFzcy5BbnksIHR5cGVSZWYgfV07XG4gICAgICBjYXNlIHNwZWMuUHJpbWl0aXZlVHlwZS5EYXRlOlxuICAgICAgICByZXR1cm4gW3sgc2VyaWFsaXphdGlvbkNsYXNzOiBTZXJpYWxpemF0aW9uQ2xhc3MuRGF0ZSwgdHlwZVJlZiB9XTtcbiAgICAgIGNhc2Ugc3BlYy5QcmltaXRpdmVUeXBlLkpzb246XG4gICAgICAgIHJldHVybiBbeyBzZXJpYWxpemF0aW9uQ2xhc3M6IFNlcmlhbGl6YXRpb25DbGFzcy5Kc29uLCB0eXBlUmVmIH1dO1xuICAgICAgY2FzZSBzcGVjLlByaW1pdGl2ZVR5cGUuQm9vbGVhbjpcbiAgICAgIGNhc2Ugc3BlYy5QcmltaXRpdmVUeXBlLk51bWJlcjpcbiAgICAgIGNhc2Ugc3BlYy5QcmltaXRpdmVUeXBlLlN0cmluZzpcbiAgICAgICAgcmV0dXJuIFt7IHNlcmlhbGl6YXRpb25DbGFzczogU2VyaWFsaXphdGlvbkNsYXNzLlNjYWxhciwgdHlwZVJlZiB9XTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gcHJpbWl0aXZlIHR5cGUnKTtcbiAgfVxuICBpZiAoc3BlYy5pc0NvbGxlY3Rpb25UeXBlUmVmZXJlbmNlKHR5cGVSZWYudHlwZSkpIHtcbiAgICByZXR1cm4gW1xuICAgICAge1xuICAgICAgICBzZXJpYWxpemF0aW9uQ2xhc3M6XG4gICAgICAgICAgdHlwZVJlZi50eXBlLmNvbGxlY3Rpb24ua2luZCA9PT0gc3BlYy5Db2xsZWN0aW9uS2luZC5BcnJheVxuICAgICAgICAgICAgPyBTZXJpYWxpemF0aW9uQ2xhc3MuQXJyYXlcbiAgICAgICAgICAgIDogU2VyaWFsaXphdGlvbkNsYXNzLk1hcCxcbiAgICAgICAgdHlwZVJlZixcbiAgICAgIH0sXG4gICAgXTtcbiAgfVxuICBpZiAoc3BlYy5pc1VuaW9uVHlwZVJlZmVyZW5jZSh0eXBlUmVmLnR5cGUpKSB7XG4gICAgY29uc3QgY29tcG91bmRUeXBlcyA9IGZsYXRNYXAodHlwZVJlZi50eXBlLnVuaW9uLnR5cGVzLCAodCkgPT5cbiAgICAgIHNlcmlhbGl6YXRpb25UeXBlKHsgdHlwZTogdCB9LCBsb29rdXApLFxuICAgICk7XG4gICAgLy8gUHJvcGFnYXRlIHRoZSB0b3AtbGV2ZWwgJ29wdGlvbmFsJyBmaWVsZCB0byBlYWNoIGluZGl2aWR1YWwgc3VidHlwZVxuICAgIGZvciAoY29uc3QgdCBvZiBjb21wb3VuZFR5cGVzKSB7XG4gICAgICBpZiAodC50eXBlUmVmICE9PSAndm9pZCcpIHtcbiAgICAgICAgdC50eXBlUmVmLm9wdGlvbmFsID0gdHlwZVJlZi5vcHRpb25hbDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvbXBvdW5kVHlwZXMuc29ydCgobCwgcikgPT5cbiAgICAgIGNvbXBhcmVTZXJpYWxpemF0aW9uQ2xhc3NlcyhsLnNlcmlhbGl6YXRpb25DbGFzcywgci5zZXJpYWxpemF0aW9uQ2xhc3MpLFxuICAgICk7XG4gIH1cblxuICAvLyBUaGUgbmV4dCBwYXJ0IG9mIHRoZSBjb252ZXJzaW9uIGlzIGxvb2t1cC1kZXBlbmRlbnRcbiAgY29uc3QgdHlwZSA9IGxvb2t1cCh0eXBlUmVmLnR5cGUuZnFuKTtcblxuICBpZiAoc3BlYy5pc0VudW1UeXBlKHR5cGUpKSB7XG4gICAgcmV0dXJuIFt7IHNlcmlhbGl6YXRpb25DbGFzczogU2VyaWFsaXphdGlvbkNsYXNzLkVudW0sIHR5cGVSZWYgfV07XG4gIH1cblxuICBpZiAoc3BlYy5pc0ludGVyZmFjZVR5cGUodHlwZSkgJiYgdHlwZS5kYXRhdHlwZSkge1xuICAgIHJldHVybiBbeyBzZXJpYWxpemF0aW9uQ2xhc3M6IFNlcmlhbGl6YXRpb25DbGFzcy5TdHJ1Y3QsIHR5cGVSZWYgfV07XG4gIH1cblxuICByZXR1cm4gW3sgc2VyaWFsaXphdGlvbkNsYXNzOiBTZXJpYWxpemF0aW9uQ2xhc3MuUmVmZXJlbmNlVHlwZSwgdHlwZVJlZiB9XTtcbn1cblxuZnVuY3Rpb24gbnVsbEFuZE9rKHg6IHVua25vd24sIHR5cGU6IE9wdGlvbmFsVmFsdWVPclZvaWQpOiBib29sZWFuIHtcbiAgaWYgKHggIT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICh0eXBlICE9PSAndm9pZCcgJiYgIXR5cGUub3B0aW9uYWwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgR290ICd1bmRlZmluZWQnIGZvciBub24tb3B0aW9uYWwgaW5zdGFuY2Ugb2YgJHtKU09OLnN0cmluZ2lmeSh0eXBlKX1gLFxuICAgICk7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaXNEYXRlKHg6IHVua25vd24pOiB4IGlzIERhdGUge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiB4ID09PSAnb2JqZWN0JyAmJlxuICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4KSA9PT0gJ1tvYmplY3QgRGF0ZV0nXG4gICk7XG59XG5cbmZ1bmN0aW9uIGlzU2NhbGFyKHg6IHVua25vd24pOiB4IGlzIHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiB4ID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgeCA9PT0gJ251bWJlcicgfHwgdHlwZW9mIHggPT09ICdib29sZWFuJ1xuICApO1xufVxuXG5mdW5jdGlvbiBmbGF0TWFwPFQsIFU+KHhzOiBUW10sIGZuOiAoeDogVCkgPT4gVVtdKTogVVtdIHtcbiAgY29uc3QgcmV0ID0gbmV3IEFycmF5PFU+KCk7XG4gIGZvciAoY29uc3QgeCBvZiB4cykge1xuICAgIHJldC5wdXNoKC4uLmZuKHgpKTtcbiAgfVxuICByZXR1cm4gcmV0O1xufVxuXG4vKipcbiAqIE1hcCBhbiBvYmplY3QncyB2YWx1ZXMsIHNraXBwaW5nICd1bmRlZmluZWQnIHZhbHVlcydcbiAqL1xuZnVuY3Rpb24gbWFwVmFsdWVzKFxuICB2YWx1ZTogdW5rbm93bixcbiAgZm46ICh2YWx1ZTogYW55LCBmaWVsZDogc3RyaW5nKSA9PiBhbnksXG4pOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcgfHwgdmFsdWUgPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgb2JqZWN0IHR5cGUsIGdvdCAke0pTT04uc3RyaW5naWZ5KHZhbHVlKX1gKTtcbiAgfVxuXG4gIGNvbnN0IG91dDogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyh2YWx1ZSkpIHtcbiAgICBjb25zdCB3aXJlVmFsdWUgPSBmbih2LCBrKTtcbiAgICBpZiAod2lyZVZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBvdXRba10gPSB3aXJlVmFsdWU7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cblxuZnVuY3Rpb24gcHJvcGVydGllc09mKFxuICB0OiBzcGVjLlR5cGUsXG4gIGxvb2t1cDogVHlwZUxvb2t1cCxcbik6IHsgW25hbWU6IHN0cmluZ106IHNwZWMuUHJvcGVydHkgfSB7XG4gIGlmICghc3BlYy5pc0NsYXNzT3JJbnRlcmZhY2VUeXBlKHQpKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgbGV0IHJldDogeyBbbmFtZTogc3RyaW5nXTogc3BlYy5Qcm9wZXJ0eSB9ID0ge307XG5cbiAgaWYgKHQuaW50ZXJmYWNlcykge1xuICAgIGZvciAoY29uc3QgaWZhY2Ugb2YgdC5pbnRlcmZhY2VzKSB7XG4gICAgICByZXQgPSB7IC4uLnJldCwgLi4ucHJvcGVydGllc09mKGxvb2t1cChpZmFjZSksIGxvb2t1cCkgfTtcbiAgICB9XG4gIH1cbiAgaWYgKHNwZWMuaXNDbGFzc1R5cGUodCkgJiYgdC5iYXNlKSB7XG4gICAgcmV0ID0geyAuLi5yZXQsIC4uLnByb3BlcnRpZXNPZihsb29rdXAodC5iYXNlKSwgbG9va3VwKSB9O1xuICB9XG5cbiAgZm9yIChjb25zdCBwcm9wIG9mIHQucHJvcGVydGllcyA/PyBbXSkge1xuICAgIHJldFtwcm9wLm5hbWVdID0gcHJvcDtcbiAgfVxuXG4gIHJldHVybiByZXQ7XG59XG5cbi8qKlxuICogVGVzdHMgd2hldGhlciBhIGdpdmVuIHR5cGUgKGJ5IGl0J3MgRlFOKSBjYW4gYmUgYXNzaWduZWQgdG8gYSBuYW1lZCB0eXBlIHJlZmVyZW5jZS5cbiAqXG4gKiBAcGFyYW0gYWN0dWFsVHlwZUZxbiB0aGUgRlFOIG9mIHRoZSB0eXBlIHRoYXQgaXMgYmVpbmcgdGVzdGVkLlxuICogQHBhcmFtIHJlcXVpcmVkVHlwZSAgdGhlIHJlcXVpcmVkIHJlZmVyZW5jZSB0eXBlLlxuICpcbiAqIEByZXR1cm5zIHRydWUgaWYgYGByZXF1aXJlZFR5cGVgYCBpcyBhIHN1cGVyLXR5cGUgKGJhc2UgY2xhc3Mgb3IgaW1wbGVtZW50ZWQgaW50ZXJmYWNlKSBvZiB0aGUgdHlwZSBkZXNpZ25hdGVkIGJ5XG4gKiAgICAgICAgICBgYGFjdHVhbFR5cGVGcW5gYC5cbiAqL1xuZnVuY3Rpb24gaXNBc3NpZ25hYmxlKFxuICBhY3R1YWxUeXBlRnFuOiBzdHJpbmcsXG4gIHJlcXVpcmVkVHlwZTogc3BlYy5OYW1lZFR5cGVSZWZlcmVuY2UsXG4gIGxvb2t1cDogVHlwZUxvb2t1cCxcbik6IGJvb2xlYW4ge1xuICAvLyBUaGUgZW1wdHkgb2JqZWN0IGlzIGFzc2lnbmFibGUgdG8gZXZlcnl0aGluZ1xuICBpZiAoYWN0dWFsVHlwZUZxbiA9PT0gRU1QVFlfT0JKRUNUX0ZRTikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHJlcXVpcmVkVHlwZS5mcW4gPT09IGFjdHVhbFR5cGVGcW4pIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBjb25zdCBhY3R1YWxUeXBlID0gbG9va3VwKGFjdHVhbFR5cGVGcW4pO1xuICBpZiAoc3BlYy5pc0NsYXNzVHlwZShhY3R1YWxUeXBlKSkge1xuICAgIGlmIChcbiAgICAgIGFjdHVhbFR5cGUuYmFzZSAmJlxuICAgICAgaXNBc3NpZ25hYmxlKGFjdHVhbFR5cGUuYmFzZSwgcmVxdWlyZWRUeXBlLCBsb29rdXApXG4gICAgKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgaWYgKHNwZWMuaXNDbGFzc09ySW50ZXJmYWNlVHlwZShhY3R1YWxUeXBlKSAmJiBhY3R1YWxUeXBlLmludGVyZmFjZXMpIHtcbiAgICByZXR1cm4gKFxuICAgICAgYWN0dWFsVHlwZS5pbnRlcmZhY2VzLmZpbmQoKGlmYWNlKSA9PlxuICAgICAgICBpc0Fzc2lnbmFibGUoaWZhY2UsIHJlcXVpcmVkVHlwZSwgbG9va3VwKSxcbiAgICAgICkgIT0gbnVsbFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVJlcXVpcmVkUHJvcHMoXG4gIGFjdHVhbFByb3BzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9LFxuICB0eXBlTmFtZTogc3RyaW5nLFxuICBzcGVjUHJvcHM6IHsgW2tleTogc3RyaW5nXTogc3BlYy5Qcm9wZXJ0eSB9LFxuKSB7XG4gIC8vIENoZWNrIGZvciByZXF1aXJlZCBwcm9wZXJ0aWVzXG4gIGNvbnN0IG1pc3NpbmdSZXF1aXJlZFByb3BzID0gT2JqZWN0LmtleXMoc3BlY1Byb3BzKVxuICAgIC5maWx0ZXIoKG5hbWUpID0+ICFzcGVjUHJvcHNbbmFtZV0ub3B0aW9uYWwpXG4gICAgLmZpbHRlcigobmFtZSkgPT4gIShuYW1lIGluIGFjdHVhbFByb3BzKSk7XG5cbiAgaWYgKG1pc3NpbmdSZXF1aXJlZFByb3BzLmxlbmd0aCA+IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgTWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0aWVzIGZvciAke3R5cGVOYW1lfTogJHttaXNzaW5nUmVxdWlyZWRQcm9wcy5qb2luKFxuICAgICAgICAnLCAnLFxuICAgICAgKX1gLFxuICAgICk7XG4gIH1cblxuICByZXR1cm4gYWN0dWFsUHJvcHM7XG59XG5cbmZ1bmN0aW9uIGNvbXBhcmVTZXJpYWxpemF0aW9uQ2xhc3NlcyhcbiAgbDogU2VyaWFsaXphdGlvbkNsYXNzLFxuICByOiBTZXJpYWxpemF0aW9uQ2xhc3MsXG4pOiBudW1iZXIge1xuICBjb25zdCBvcmRlciA9IFtcbiAgICBTZXJpYWxpemF0aW9uQ2xhc3MuVm9pZCxcbiAgICBTZXJpYWxpemF0aW9uQ2xhc3MuRGF0ZSxcbiAgICBTZXJpYWxpemF0aW9uQ2xhc3MuU2NhbGFyLFxuICAgIFNlcmlhbGl6YXRpb25DbGFzcy5Kc29uLFxuICAgIFNlcmlhbGl6YXRpb25DbGFzcy5FbnVtLFxuICAgIFNlcmlhbGl6YXRpb25DbGFzcy5BcnJheSxcbiAgICBTZXJpYWxpemF0aW9uQ2xhc3MuTWFwLFxuICAgIFNlcmlhbGl6YXRpb25DbGFzcy5TdHJ1Y3QsXG4gICAgU2VyaWFsaXphdGlvbkNsYXNzLlJlZmVyZW5jZVR5cGUsXG4gICAgU2VyaWFsaXphdGlvbkNsYXNzLkFueSxcbiAgXTtcbiAgcmV0dXJuIG9yZGVyLmluZGV4T2YobCkgLSBvcmRlci5pbmRleE9mKHIpO1xufVxuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciBgb2JqYCBtdXN0IGJlIHBhc3NlZCBieS1yZWZlcmVuY2Ugb3IgaWYgYnktdmFsdWUgaXMgYWNjZXB0YWJsZS4gRm9yIGV4YW1wbGUsXG4gKiBvYmplY3RzIHdpdGggbWV0aG9kcywgb3IgZHluYW1pYyBnZXR0ZXJzIChvciBzZXR0ZXJzKSBzaG91bGQgYmUgcGFzc2VkIGJ5LXJlZmVyZW5jZSBhcyBhIG1hdHRlclxuICogb2Ygc2VjdXJpdHkuIFRoZSBiZWhhdmlvciBpbiBub24tSlMgcnVudGltZXMgY291bGQgb3RoZXJ3aXNlIGRpZmZlciBmcm9tIHRoYXQgaW4gcHVyZSBKUyAoaWZcbiAqIGdldHRlcnMgYXJlIG5vdCBzdGFibGUsIGV0Yy4uLikuXG4gKlxuICogQHBhcmFtIG9iaiB0aGUgb2JqZWN0IHRvIGJlIHRlc3RlZC5cbiAqXG4gKiBAcmV0dXJucyB0cnVlIGlmIGBvYmpgIG11c3QgYmUgcGFzc2VkIGJ5LXJlZmVyZW5jZS5cbiAqL1xuZnVuY3Rpb24gaXNCeVJlZmVyZW5jZU9ubHkob2JqOiBhbnkpOiBib29sZWFuIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGxldCBjdXJyID0gb2JqO1xuICAvLyBDcmF3bCB1cCB0aGUgcHJvdG90eXBlIGNoYWluIHRvIGxvb2sgZm9yIGR5bmFtaWMgcHJvcGVydGllcyBvciBtZXRob2RzLlxuICBkbyB7XG4gICAgZm9yIChjb25zdCBwcm9wIG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGN1cnIpKSB7XG4gICAgICBjb25zdCBkZXNjciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoY3VyciwgcHJvcCk7XG4gICAgICBpZiAoXG4gICAgICAgIGRlc2NyPy5nZXQgIT0gbnVsbCB8fFxuICAgICAgICBkZXNjcj8uc2V0ICE9IG51bGwgfHxcbiAgICAgICAgdHlwZW9mIGRlc2NyPy52YWx1ZSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgKSB7XG4gICAgICAgIC8vIFByb3BlcnR5IGhhcyBhIGR5bmFtaWMgZ2V0dGVyLCBzZXR0ZXIgb3IgaXMgYSBjb25zdHJ1Y3Rvci9tZXRob2QsIHNvIGJ5LXJlZiByZXF1aXJlZCFcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIEVuZCB3aGVuIHRoZSBwYXJlbnQgcHJvdG8gaXMgYE9iamVjdGAsIHdoaWNoIGhhcyBubyBwYXJlbnQgcHJvdG8gaXRzZWxmLlxuICB9IHdoaWxlIChPYmplY3QuZ2V0UHJvdG90eXBlT2YoKGN1cnIgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoY3VycikpKSAhPSBudWxsKTtcblxuICByZXR1cm4gZmFsc2U7XG59XG4iXX0=
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jsii/kernel",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.59.0",
|
|
4
4
|
"description": "kernel for jsii execution environment",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"author": {
|
|
@@ -31,21 +31,21 @@
|
|
|
31
31
|
"package": "package-js"
|
|
32
32
|
},
|
|
33
33
|
"dependencies": {
|
|
34
|
-
"@jsii/spec": "^1.
|
|
34
|
+
"@jsii/spec": "^1.59.0",
|
|
35
35
|
"fs-extra": "^9.1.0",
|
|
36
36
|
"tar": "^6.1.11"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
|
-
"@scope/jsii-calc-base": "^1.
|
|
40
|
-
"@scope/jsii-calc-lib": "^1.
|
|
39
|
+
"@scope/jsii-calc-base": "^1.59.0",
|
|
40
|
+
"@scope/jsii-calc-lib": "^1.59.0",
|
|
41
41
|
"@types/fs-extra": "^9.0.13",
|
|
42
|
-
"@types/jest": "^27.
|
|
43
|
-
"@types/node": "^12.20.
|
|
42
|
+
"@types/jest": "^27.5.0",
|
|
43
|
+
"@types/node": "^12.20.50",
|
|
44
44
|
"@types/tar": "^6.1.1",
|
|
45
|
-
"eslint": "^8.
|
|
45
|
+
"eslint": "^8.15.0",
|
|
46
46
|
"jest": "^27.5.1",
|
|
47
47
|
"jest-expect-message": "^1.0.2",
|
|
48
|
-
"jsii-build-tools": "^1.
|
|
48
|
+
"jsii-build-tools": "^1.59.0",
|
|
49
49
|
"jsii-calc": "^3.20.120",
|
|
50
50
|
"prettier": "^2.6.2",
|
|
51
51
|
"ts-jest": "^27.1.4",
|
package/test/kernel.test.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function deepEqualWithRegex(lvalue: any, rvalue: any): boolean;
|