mnemonica 1.0.6 → 1.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,3 +1,3 @@
1
1
  'use strict';
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50IG5vLXVudXNlZC12YXJzOiBcIm9mZlwiICovXG5cbi8vIFByb3BzIHR5cGUgZm9yIGdldFByb3BzL3NldFByb3BzXG5leHBvcnQgdHlwZSBQcm9wc1R5cGUgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuLy8gQ29yZSB0eXBlIGRlZmluaXRpb25zIGZvciBtbmVtb25pY2FcblxuLy8gQmFzZSBjb25zdHJ1Y3RvciBmdW5jdGlvbiB0eXBlIC0gY2FuIGJlIGEgY2xhc3MgY29uc3RydWN0b3Igb3IgYSBmdW5jdGlvbi5cbi8vIEFyZ3MgZGVmYXVsdHMgdG8gdW5rbm93bltdIHNvIElERUY8VD4gaXMgYmFja3dhcmRzIGNvbXBhdGlibGU7XG4vLyBzdXBwbHkgQXJncyB0byBnZXQgdHlwZWQgY29uc3RydWN0b3IgcGFyYW1zOiBJREVGPE15VHlwZSwgW3N0cmluZywgbnVtYmVyXT5cbmV4cG9ydCB0eXBlIElERUY8VCwgQXJncyBleHRlbmRzIHVua25vd25bXSA9IHVua25vd25bXT4gPSB7IG5ldygpOiBUIH0gfCB7ICh0aGlzOiBULCAuLi5hcmdzOiBBcmdzKTogdm9pZCB9O1xuXG4vLyBFcnJvciBtZXNzYWdlIHR5cGVzIC0gYWxsIGVycm9yIG1lc3NhZ2VzIGFyZSBzdHJpbmdzXG5leHBvcnQgdHlwZSBFcnJvck1lc3NhZ2VLZXkgPVxuXHR8ICdCQVNFX0VSUk9SX01FU1NBR0UnXG5cdHwgJ0hBTkRMRVJfTVVTVF9CRV9BX0ZVTkNUSU9OJ1xuXHR8ICdXUk9OR19UWVBFX0RFRklOSVRJT04nXG5cdHwgJ1dST05HX0lOU1RBTkNFX0lOVk9DQVRJT04nXG5cdHwgJ1dST05HX01PRElGSUNBVElPTl9QQVRURVJOJ1xuXHR8ICdBTFJFQURZX0RFQ0xBUkVEJ1xuXHR8ICdXUk9OR19BUkdVTUVOVFNfVVNFRCdcblx0fCAnV1JPTkdfSE9PS19UWVBFJ1xuXHR8ICdNSVNTSU5HX0hPT0tfQ0FMTEJBQ0snXG5cdHwgJ01JU1NJTkdfQ0FMTEJBQ0tfQVJHVU1FTlQnXG5cdHwgJ09QVElPTlNfRVJST1InXG5cdHwgJ1dST05HX1NUQUNLX0NMRUFORVInO1xuXHQvLyB8ICdUWVBFTkFNRV9NVVNUX0JFX0FfU1RSSU5HJ1xuXHQvLyB8ICdGTE9XX0NIRUNLRVJfUkVERUZJTklUSU9OJ1xuXG4vLyBFcnJvciBtZXNzYWdlcyBvYmplY3QgdHlwZVxuZXhwb3J0IHR5cGUgRXJyb3JNZXNzYWdlcyA9IFJlY29yZDxFcnJvck1lc3NhZ2VLZXksIHN0cmluZz47XG5cbi8vIEhvb2sgY2FsbGJhY2sg4oCUIHBhc3NlZCB0byByZWdpc3Rlckhvb2sgYW5kIGludm9rZWQgYnkgaW52b2tlSG9va1xuZXhwb3J0IGludGVyZmFjZSBob29rIGV4dGVuZHMgQ2FsbGFibGVGdW5jdGlvbiB7XG5cdChvcHRzOiBob29rc09wdHMpOiB1bmtub3duO1xufVxuXG4vLyBFcnJvciBjb25zdHJ1Y3RvciBmcm9tIGNvbnN0cnVjdEVycm9yIC0gY29uc3RydWN0YWJsZSBmdW5jdGlvbiB3aXRoIHByb3RvdHlwZVxuZXhwb3J0IGludGVyZmFjZSBNbmVtb25pY2FFcnJvckNvbnN0cnVjdG9yIHtcblx0bmV3KGFkZGl0aW9uPzogc3RyaW5nLCBzdGFjaz86IHN0cmluZyB8IHN0cmluZ1tdKTogRXJyb3I7XG5cdChuYW1lOiBzdHJpbmcpOiBFcnJvcjtcblx0cHJvdG90eXBlOiB7XG5cdFx0Y29uc3RydWN0b3I6IE1uZW1vbmljYUVycm9yQ29uc3RydWN0b3I7XG5cdH07XG59XG5cbi8vIEVycm9ycyB0eXBlcyBtYXAgLSBpbmRleGFibGUgcmVjb3JkIG9mIGVycm9yIGNvbnN0cnVjdG9yc1xuZXhwb3J0IHR5cGUgRXJyb3JzVHlwZXNNYXAgPSBSZWNvcmQ8c3RyaW5nLCBNbmVtb25pY2FFcnJvckNvbnN0cnVjdG9yPjtcblxuLy8gTW5lbW9uaWNhIGVycm9yIGludGVyZmFjZSBmb3IgZXh0ZW5kZWQgRXJyb3Igb2JqZWN0c1xuZXhwb3J0IGludGVyZmFjZSBNbmVtb25pY2FFcnJvciBleHRlbmRzIEVycm9yIHtcblx0ZXhjZXB0aW9uUmVhc29uPzogRXJyb3I7XG5cdHJlYXNvbnM/OiBFcnJvcltdO1xuXHRzdXJwbHVzPzogRXJyb3JbXTtcbn1cblxuLyoqXG4gKiBJbnRlcm5hbCBUeXBlIENvbnN0cnVjdG9yLlxuICogXCJUeXBlXCIgaGVyZSBpcyB1c2VkIGluIHRoZSBDb21wdXRlciBTY2llbmNlIHNlbnNlIOKAlCBhbiBpbnRlcmZhY2UvY29udHJhY3RcbiAqIGRlc2NyaWJpbmcgd2hhdCBhIGNvbnN0cnVjdG9yIG11c3Qgc2F0aXNmeSAoYm90aCBgbmV3YC1hYmxlIGFuZCBjYWxsYWJsZSkuXG4gKiBUQyA9IFR5cGUgQ29uc3RydWN0b3I7IFwiSW50ZXJuYWxcIiBtZWFucyB0aGlzIGlzIHRoZSBsaWJyYXJ5J3Mgb3duIGNvbnN0cnVjdG9yXG4gKiBzaGFwZSwgZGlzdGluY3QgZnJvbSB1c2VyLWZhY2luZyBUeXBlQ29uc3RydWN0b3IgYmVsb3cuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgX0ludGVybmFsX1RDXzxDb25zdHJ1Y3Rvckluc3RhbmNlIGV4dGVuZHMgb2JqZWN0PiB7XG5cdG5ldyguLi5hcmdzOiB1bmtub3duW10pOiBDb25zdHJ1Y3Rvckluc3RhbmNlO1xuXHQodGhpczogQ29uc3RydWN0b3JJbnN0YW5jZSwgLi4uYXJnczogdW5rbm93bltdKTogQ29uc3RydWN0b3JJbnN0YW5jZTtcblx0cmVhZG9ubHkgcHJvdG90eXBlOiBDb25zdHJ1Y3Rvckluc3RhbmNlICYge1xuXHRcdHJlYWRvbmx5IGNvbnN0cnVjdG9yOiBfSW50ZXJuYWxfVENfPENvbnN0cnVjdG9ySW5zdGFuY2U+XG5cdH07XG59XG5cbi8qKlxuICogUHVibGljIGFsaWFzIGZvciBfSW50ZXJuYWxfVENfIOKAlCB0aGUgc2hhcGUgb2YgY29uc3RydWN0b3IgZnVuY3Rpb25zIHJldHVybmVkIGJ5IGBkZWZpbmUoKWAuXG4gKiBBdWdtZW50ZWQgYnkgdGFjdGljYS1nZW5lcmF0ZWQgVHlwZVJlZ2lzdHJ5IHRvIGJlY29tZSB1c2VyLXNwZWNpZmljIHR5cGVzLlxuICogS2VwdCBhcyBhIG5hbWVkIGFsaWFzIChyYXRoZXIgdGhhbiBpbmxpbmluZyBfSW50ZXJuYWxfVENfKSBzbyB0YWN0aWNhIGNhbiByZWZlcmVuY2UgaXRcbiAqIGNsZWFubHkgaW4gZ2VuZXJhdGVkIGRlY2xhcmF0aW9uIGZpbGVzLlxuICovXG5leHBvcnQgdHlwZSBUeXBlQ29uc3RydWN0b3I8Q29uc3RydWN0b3JJbnN0YW5jZSBleHRlbmRzIG9iamVjdD4gPSBfSW50ZXJuYWxfVENfPENvbnN0cnVjdG9ySW5zdGFuY2U+O1xuXG4vLyBIb29rIHR5cGVzXG5leHBvcnQgdHlwZSBob29rc1R5cGVzID0gJ3ByZUNyZWF0aW9uJyB8ICdwb3N0Q3JlYXRpb24nIHwgJ2NyZWF0aW9uRXJyb3InO1xuXG4vLyBIb29rIG9wdGlvbnMgcGFzc2VkIHRvIGhvb2sgY2FsbGJhY2tzXG4vLyBQID0gcGFyZW50IC8gZXhpc3RlbnQgaW5zdGFuY2UgKHByb3RvKVxuLy8gVCA9IGNoaWxkIC8gaW5oZXJpdGVkIGluc3RhbmNlICh0eXBlIGJlaW5nIGNyZWF0ZWQpXG5leHBvcnQgdHlwZSBob29rc09wdHM8UCA9IG9iamVjdCwgVCA9IFA+ID0ge1xuXHRUeXBlTmFtZTogc3RyaW5nO1xuXHR0eXBlOiBUeXBlRGVmO1xuXHRhcmdzOiB1bmtub3duW107XG5cdGV4aXN0ZW50SW5zdGFuY2U6IFA7XG5cdGluaGVyaXRlZEluc3RhbmNlPzogVDtcblx0Y3JlYXRvcj86IHsgdGhyb3dNb2RpZmljYXRpb25FcnJvcihlcnJvcjogRXJyb3IpOiB2b2lkIH07XG59O1xuXG4vLyBDYWxsYmFjayBwYXNzZWQgaW50byBNb2RpZmljYXRpb25Db25zdHJ1Y3RvciB0byBhdHRhY2ggaW50ZXJuYWwgcHJvcHMgdG8gdGhlIHByb3RvdHlwZVxuZXhwb3J0IGludGVyZmFjZSBBZGRQcm9wc0NhbGxiYWNrIGV4dGVuZHMgQ2FsbGFibGVGdW5jdGlvbiB7XG5cdChwcm90bzogb2JqZWN0KTogdm9pZDtcbn1cblxuLy8gTW9kaWZpY2F0aW9uQ29uc3RydWN0b3I6IHdpcmVzIHByb3RvdHlwZSBjaGFpbiBkdXJpbmcgaW5zdGFuY2UgY3JlYXRpb25cbmV4cG9ydCBpbnRlcmZhY2UgTW9kaWZpY2F0aW9uQ29uc3RydWN0b3IgZXh0ZW5kcyBDYWxsYWJsZUZ1bmN0aW9uIHtcblx0KFxuXHRcdHRoaXM6IG9iamVjdCxcblx0XHRNb2RpZmljYXRvclR5cGU6IE1uZW1vbmljYUNvbnN0cnVjdG9yLFxuXHRcdE1vZGlmaWNhdG9yVHlwZVByb3RvdHlwZTogb2JqZWN0LFxuXHRcdF9hZGRQcm9wczogQWRkUHJvcHNDYWxsYmFja1xuXHQpOiBNbmVtb25pY2FDb25zdHJ1Y3Rvcjtcbn1cblxuLy8gRmFjdG9yeSB0aGF0IHJldHVybnMgYSBNb2RpZmljYXRpb25Db25zdHJ1Y3RvciAodXNlZCBpbiBjb25zdHJ1Y3Rvck9wdGlvbnMpXG5leHBvcnQgaW50ZXJmYWNlIE1vZGlmaWNhdGlvbkNvbnN0cnVjdG9yRmFjdG9yeSBleHRlbmRzIENhbGxhYmxlRnVuY3Rpb24ge1xuXHQoKTogTW9kaWZpY2F0aW9uQ29uc3RydWN0b3I7XG59XG5cbi8vIEZhY3RvcnkgdGhhdCByZXR1cm5zIGEgTW5lbW9uaWNhQ29uc3RydWN0b3IgKHN0b3JlZCBpbiBUeXBlRGVmLmNvbnN0cnVjdEhhbmRsZXIpXG5leHBvcnQgaW50ZXJmYWNlIE1uZW1vbmljYUNvbnN0cnVjdG9yRmFjdG9yeSBleHRlbmRzIENhbGxhYmxlRnVuY3Rpb24ge1xuXHQoKTogTW5lbW9uaWNhQ29uc3RydWN0b3I7XG59XG5cbi8vIE1hcmtzIHRoZSB0b3Agb2YgYSBjYXB0dXJlZCBzdGFjayB0cmFjZSAocGFzc2VkIHRvIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlIGFzIGNvbnN0cnVjdG9yT3B0KVxuZXhwb3J0IGludGVyZmFjZSBTdGFja0JvdW5kYXJ5IGV4dGVuZHMgQ2FsbGFibGVGdW5jdGlvbiB7fVxuXG4vLyBBIHdyYXBwYWJsZSB1dGlsaXR5IG1ldGhvZCDigJQgYW55IGNhbGxhYmxlIHRoYXQgd3JhcFRoaXMoKSBjYW4gcHJveHlcbmV4cG9ydCBpbnRlcmZhY2UgV3JhcHBhYmxlTWV0aG9kIGV4dGVuZHMgQ2FsbGFibGVGdW5jdGlvbiB7fVxuXG4vLyBDb25zdHJ1Y3RvciBvcHRpb25zIGZvciBkZWZpbmVcbmV4cG9ydCB0eXBlIGNvbnN0cnVjdG9yT3B0aW9ucyA9IHtcblx0Ly8gZXhwbGljaXQgZGVjbGFyYXRpb24gd2Ugd2lzaCB1c2Vcblx0Ly8gYW4gb2xkIHN0eWxlIGJhc2VkIGNvbnN0cnVjdG9yc1xuXHRNb2RpZmljYXRpb25Db25zdHJ1Y3Rvcj86IE1vZGlmaWNhdGlvbkNvbnN0cnVjdG9yRmFjdG9yeSxcblx0Ly8gc2hhbGwgb3Igbm90IHdlIHVzZSBzdHJpY3QgY2hlY2tpbmdcblx0Ly8gZm9yIGNyZWF0aW9uIHN1Yi1pbnN0YW5jZXMgT25seSBmcm9tIGN1cnJlbnQgdHlwZVxuXHQvLyBvciB3ZSBtaWdodCB1c2UgdXAtbmVzdGVkIHN1Yi1pbnN0YW5jZXMgZnJvbSBjaGFpblxuXHRzdHJpY3RDaGFpbj86IGJvb2xlYW4sXG5cdC8vIHNob3VsZCB3ZSB1c2UgZm9yY2VkIGVycm9ycyBjaGVja2luZ1xuXHQvLyB0byBtYWtlIGFsbCBpbmhlcml0ZWQgdHlwZXMgZXJyb3JlZFxuXHQvLyBpZiB0aGVyZSBpcyBhbiBlcnJvciBzb21ld2hlcmUgaW4gY2hhaW5cblx0YmxvY2tFcnJvcnM/OiBib29sZWFuLFxuXHQvLyBpZiBpdCBpcyBuZWNlc3NhcnkgdG8gY29sbGVjdCBzdGFja1xuXHQvLyBhcyBhIF9fc3RhY2tfXyBwcm90b3R5cGUgcHJvcGVydHlcblx0Ly8gZHVyaW5nIHRoZSBwcm9jZXNzIG9mIGluc3RhbmNlIGNyZWF0aW9uXG5cdHN1Ym1pdFN0YWNrPzogYm9vbGVhbixcblx0Ly8gYXdhaXQgbmV3IENvbnN0cnVjdG9yKClcblx0Ly8gbXVzdCByZXR1cm4gdmFsdWVcblx0YXdhaXRSZXR1cm4/OiBib29sZWFuLFxuXHQvLyBGb3JjZSBjbGFzcyBtb2RlIChhdXRvLWRldGVjdGVkIGJ5IGRlZmF1bHQpXG5cdGFzQ2xhc3M/OiBib29sZWFuLFxufTtcblxuLy8gU3VidHlwZXMgbWFwIC0gcmVwcmVzZW50cyB0aGUgc3VidHlwZXMgcHJvcGVydHlcbmV4cG9ydCB0eXBlIFN1YnR5cGVzTWFwID0gTWFwPHN0cmluZywgVHlwZUNsYXNzPjtcblxuLy8gVHlwZSBkZWZpbml0aW9uIG9iamVjdCAoaW50ZXJuYWwgcHJvcGVydGllcylcbmV4cG9ydCB0eXBlIFR5cGVEZWYgPSB7XG5cdFR5cGVOYW1lOiBzdHJpbmc7XG5cdHByb3RvOiBvYmplY3Q7XG5cdGlzU3ViVHlwZTogYm9vbGVhbjtcblx0c3VidHlwZXM6IFN1YnR5cGVzTWFwO1xuXHRjb2xsZWN0aW9uOiBDb2xsZWN0aW9uRGVmO1xuXHRjb25maWc6IGNvbnN0cnVjdG9yT3B0aW9ucztcblx0cGFyZW50VHlwZT86IFR5cGVEZWY7XG5cdGNvbnN0cnVjdEhhbmRsZXI6IE1uZW1vbmljYUNvbnN0cnVjdG9yRmFjdG9yeTtcblx0dGl0bGU6IHN0cmluZztcblx0aG9va3M6IFJlY29yZDxzdHJpbmcsIFNldDxob29rPj47XG5cdGludm9rZUhvb2s6IChob29rVHlwZTogaG9va3NUeXBlcywgb3B0czogaG9va3NPcHRzKSA9PiBTZXQ8dW5rbm93bj47XG5cdHByb3RvdHlwZTogdW5rbm93bjtcblx0c3RhY2s/OiBzdHJpbmc7XG5cdFtTeW1ib2wuaGFzSW5zdGFuY2VdOiAoaW5zdGFuY2U6IG9iamVjdCkgPT4gYm9vbGVhbjtcbn07XG5cbi8vIENvbGxlY3Rpb24gZGVmaW5pdGlvblxuZXhwb3J0IHR5cGUgQ29sbGVjdGlvbkRlZiA9IEhvb2thYmxlICYge1xuXHRkZWZpbmU6IFR5cGVBYnNvcmJlcjtcblx0bG9va3VwOiBUeXBlTG9va3VwO1xuXHRzdWJ0eXBlczogU3VidHlwZXNNYXA7XG5cdFtrZXk6IHN0cmluZ106IHVua25vd247XG59O1xuXG4vLyBUeXBlIGxvb2t1cCBmdW5jdGlvbiB0eXBlOiBtYXkgaGF2ZSBhdWdtZW50YXRpb24gYnkgVGFjdGljYSByZS1kZWZpbml0aW9uXG5leHBvcnQgaW50ZXJmYWNlIFR5cGVMb29rdXAgZXh0ZW5kcyBDYWxsYWJsZUZ1bmN0aW9uIHtcblx0KHRoaXM6IE1hcDxzdHJpbmcsIHVua25vd24+LCBUeXBlTmVzdGVkUGF0aDogc3RyaW5nKTogVHlwZUNsYXNzIHwgdW5kZWZpbmVkO1xufVxuXG4vLyBTcGVjaWZpY2F0aW9uIGZvciBjaGFpbmVkIHN1YnR5cGUgY3JlYXRpb24gd2l0aCAudGhlbigpXG5leHBvcnQgaW50ZXJmYWNlIFRoZW5TcGVjIHtcblx0c3VidHlwZTogb2JqZWN0O1xuXHRhcmdzOiB1bmtub3duW107XG5cdG5hbWU/OiBzdHJpbmc7XG59XG5cbi8vIENvbnRleHQgb2JqZWN0IHBhc3NlZCB0aHJvdWdoIHRoZSBJbnN0YW5jZUNyZWF0b3IgcGlwZWxpbmVcbmV4cG9ydCBpbnRlcmZhY2UgSW5zdGFuY2VDcmVhdG9yQ29udGV4dCB7XG5cdHR5cGU6IFR5cGVEZWY7XG5cdFR5cGVOYW1lOiBzdHJpbmc7XG5cdGV4aXN0ZW50SW5zdGFuY2U6IG9iamVjdDtcblx0YXJnczogdW5rbm93bltdO1xuXHRNb2RpZmljYXRpb25Db25zdHJ1Y3RvcjogTW9kaWZpY2F0aW9uQ29uc3RydWN0b3I7XG5cdE1vZGlmaWNhdG9yVHlwZTogTW5lbW9uaWNhQ29uc3RydWN0b3I7XG5cdEluc3RhbmNlTW9kaWZpY2F0b3I6IE1uZW1vbmljYUNvbnN0cnVjdG9yO1xuXHRpbmhlcml0ZWRJbnN0YW5jZTogb2JqZWN0IHwgUHJvbWlzZTxvYmplY3Q+O1xuXHRjb25maWc6IGNvbnN0cnVjdG9yT3B0aW9ucztcblx0cHJvdG86IG9iamVjdDtcblx0X19wcm90b19wcm90b19fPzogb2JqZWN0O1xuXHRzdGFjaz86IHN0cmluZ1tdO1xuXG5cdGdldEV4aXN0ZW50QXN5bmNTdGFjayhleGlzdGVudEluc3RhbmNlOiBvYmplY3QpOiB1bmtub3duO1xuXHRwb3N0UHJvY2Vzc2luZyhjb250aW51YXRpb25PZj86IFR5cGVEZWYpOiB2b2lkO1xuXHRtYWtlQXdhaXRlcih0eXBlOiBUeXBlRGVmLCB0aGVuPzogVGhlblNwZWMpOiBQcm9taXNlPG9iamVjdD47XG5cdGFkZFRoZW4odGhlbjogVGhlblNwZWMpOiB2b2lkO1xuXHRpbnZva2VQcmVIb29rcygpOiB2b2lkO1xuXHRpbnZva2VQb3N0SG9va3MoKTogeyB0eXBlOiBTZXQ8dW5rbm93bj47IGNvbGxlY3Rpb246IFNldDx1bmtub3duPiB9O1xuXHR0aHJvd01vZGlmaWNhdGlvbkVycm9yKGVycm9yOiBNbmVtb25pY2FFcnJvcik6IHZvaWQ7XG59XG5cbi8qKlxuICogUHJvdG8gbWVyZ2UgdHlwZSAtIGNvbWJpbmVzIHBhcmVudCBhbmQgY2hpbGQgdHlwZXMgd2l0aG91dCBwcm9wZXJ0eSBjb25mbGljdHMuXG4gKlxuICogV2hlbiBhIHN1YnR5cGUgaXMgZGVmaW5lZCBmcm9tIGEgcGFyZW50IGluc3RhbmNlLCB3ZSB3YW50IHRoZSBjaGlsZCBwcm9wZXJ0aWVzXG4gKiB0byB0YWtlIHByZWNlZGVuY2UuIGBFeGNsdWRlPGtleW9mIFAsIGtleW9mIFQ+YCByZW1vdmVzIG92ZXJsYXBwaW5nIGtleXMgZnJvbSBQLFxuICogc28gYFBpY2s8UCwgLi4uPmAgb25seSBicmluZ3MgaW4gcGFyZW50IHByb3BlcnRpZXMgdGhhdCBkb24ndCBjbGFzaCB3aXRoIGNoaWxkLlxuICpcbiAqIFJlc3VsdDogY2hpbGQgVCBnZXRzIGFsbCBpdHMgb3duIHByb3BzLCBwbHVzIHBhcmVudCdzIG5vbi1vdmVybGFwcGluZyBwcm9wcy5cbiAqL1xuZXhwb3J0IHR5cGUgUHJvdG88UCBleHRlbmRzIG9iamVjdCwgVCBleHRlbmRzIG9iamVjdD4gPSBUICYgUGljazxQLCBFeGNsdWRlPGtleW9mIFAsIGtleW9mIFQ+PjtcblxuXG4vLyBleHBvcnQgdHlwZSBQcm90b0ZsYXQ8XG4vLyBcdFAgZXh0ZW5kcyBvYmplY3QsXG4vLyBcdFQgZXh0ZW5kcyBvYmplY3QsXG4vLyBcdEYgZXh0ZW5kcyBQcm90bzxQLCBUPiA9IFByb3RvPFAsIFQ+XG4vLyA+ID0geyBba2V5IGluIGtleW9mIEZdOiBGW2tleV19IDtcblxuZXhwb3J0IHR5cGUgUHJvdG9GbGF0PFxuXHRQIGV4dGVuZHMgb2JqZWN0LFxuXHRUIGV4dGVuZHMgb2JqZWN0LFxuXHRMIGV4dGVuZHMgRXhjbHVkZTxrZXlvZiBQLCBrZXlvZiBUPiA9IEV4Y2x1ZGU8a2V5b2YgUCwga2V5b2YgVD4sXG4+ID0ge1xuICAgIFtrZXkgaW4ga2V5b2YgVF06IFRba2V5XTtcbn0gJiB7XG5cdFtrZXkgaW4gTF06IFBba2V5XTtcbn07XG5cbi8vIE1uZW1vbmljYSBpbnN0YW5jZSBtZXRob2Qga2V5cy4gVGhlc2UgYXJlIGZpbHRlcmVkIG91dCBvZiBleHRyYWN0ZWQvbWVyZ2VkXG4vLyBmaWVsZC1vbmx5IHZpZXdzIGJlY2F1c2UgdGhleSBiZWxvbmcgdG8gdGhlIHByb3RvdHlwZSwgbm90IHRvIHRoZSB1c2VyJ3Ncbi8vIGVudW1lcmFibGUgZGF0YSBwcm9wZXJ0aWVzLlxuZXhwb3J0IHR5cGUgTW5lbW9uaWNhSW5zdGFuY2VNZXRob2RLZXlzID1cblx0J2V4dHJhY3QnIHwgJ3BpY2snIHwgJ3BhcmVudCcgfCAnY2xvbmUnIHwgJ2ZvcmsnIHwgJ2V4Y2VwdGlvbicgfCAnc2libGluZyc7XG5cbmV4cG9ydCB0eXBlIEZsYXR0ZW48Rj4gPSB7IFtrZXkgaW4ga2V5b2YgRl06IEZba2V5XSB9XG5cbi8vIEV4dHJhY3RlZDxUPjogdGhlIHNoYXBlIHJldHVybmVkIGJ5IHV0aWxzLmV4dHJhY3QoaW5zdGFuY2UpLlxuLy8gSXQgY29udGFpbnMgdGhlIGVudW1lcmFibGUgc3RyaW5nLWtleWVkIHVzZXIgcHJvcGVydGllcyBvZiB0aGUgaW5zdGFuY2UsXG4vLyBvbWl0dGluZyBNbmVtb25pY2FJbnN0YW5jZSBtZXRob2RzIChleHRyYWN0LCBwaWNrLCBwYXJlbnQsIGNsb25lLCBmb3JrLFxuLy8gZXhjZXB0aW9uLCBzaWJsaW5nKS4gT3B0aW9uYWxpdHkgaXMgcHJlc2VydmVkIGZyb20gdGhlIHNvdXJjZSB0eXBlLlxuLy8gVGhlIGAmIHt9YCB0cmljayBmb3JjZXMgVHlwZVNjcmlwdCB0byBleHBhbmQgdGhlIGFsaWFzIGluIGhvdmVyIHRvb2x0aXBzXG4vLyBzbyBpdCByZW5kZXJzIGFzIGEgcGxhaW4gb2JqZWN0IGxpdGVyYWwgaW5zdGVhZCBvZiBcIkV4dHJhY3RlZDx7Li4ufT5cIi5cbmV4cG9ydCB0eXBlIEV4dHJhY3RlZDxUIGV4dGVuZHMgb2JqZWN0PiA9IHtcblx0W0sgaW4ga2V5b2YgVCBhcyBLIGV4dGVuZHMgc3RyaW5nID8gKEsgZXh0ZW5kcyBNbmVtb25pY2FJbnN0YW5jZU1ldGhvZEtleXMgPyBuZXZlciA6IEspIDogbmV2ZXJdOiBUW0tdO1xufSAmIHt9O1xuXG4vLyBQYXJzZWQ8VD46IHRoZSBzaGFwZSByZXR1cm5lZCBieSB1dGlscy5wYXJzZShpbnN0YW5jZSkuXG4vLyBJdCBpcyBhIG9uZS1sZXZlbCBzbmFwc2hvdCBvZiB0aGUgaW5zdGFuY2UncyBwcm90b3R5cGUgY2hhaW4uXG4vLyBgcHJvcHNgIGNvbnRhaW5zIHRoZSBpbnN0YW5jZSdzIGVudW1lcmFibGUgdXNlciBwcm9wZXJ0aWVzO1xuLy8gYGpvaW50YCBjb250YWlucyBlbnVtZXJhYmxlIHByb3BlcnRpZXMgY29waWVkIGZyb20gdGhlIGltbWVkaWF0ZSBwcm90b3R5cGU7XG4vLyBgcGFyZW50YCBpcyB0aGUgbmV4dCBsaW5rIHVwIHRoZSBjaGFpbiAoY3VycmVudGx5IG5vdCByZWN1cnNpdmVseSBwYXJzZWQpLlxuZXhwb3J0IHR5cGUgUGFyc2VkPFQgZXh0ZW5kcyBvYmplY3Q+ID0ge1xuXHRuYW1lOiBzdHJpbmc7XG5cdHByb3BzOiBFeHRyYWN0ZWQ8VD47XG5cdHNlbGY6IFQ7XG5cdHByb3RvOiBvYmplY3Q7XG5cdGpvaW50OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblx0cGFyZW50OiBvYmplY3QgfCB1bmRlZmluZWQ7XG59O1xuXG4vLyBTaWJsaW5nIHR5cGUgYWNjZXNzb3JcbmV4cG9ydCBpbnRlcmZhY2UgU2libGluZ0FjY2Vzc29yIHtcblx0KFNpYmxpbmdUeXBlTmFtZTogc3RyaW5nKTogVHlwZUNsYXNzIHwgdW5kZWZpbmVkO1xuXHRba2V5OiBzdHJpbmddOiBUeXBlQ2xhc3MgfCB1bmRlZmluZWQ7XG59XG5cbi8vIE1uZW1vbmljYSBpbnN0YW5jZSBtZXRob2RzIGludGVyZmFjZSAob3B0LWluKS5cbi8vIFRoZXNlIG1ldGhvZHMgdXNlZCB0byBiZSBhdXRvLWluamVjdGVkIG9udG8gZXZlcnkgaW5zdGFuY2UuIFRoZXkgYXJlIG5vd1xuLy8gYXZhaWxhYmxlIG9ubHkgd2hlbiBhIHR5cGUgZXhwbGljaXRseSBhZGRzIHRoZW0gdG8gaXRzIHByb3RvdHlwZS5cbi8vIFVzZXJzIGNhbiBzdGlsbCB1c2UgdGhpcyBpbnRlcmZhY2UgdG8gdHlwZSB0aGVpciBvd24gcm9vdC1sZXZlbCBoZWxwZXJzLlxuZXhwb3J0IGludGVyZmFjZSBNbmVtb25pY2FJbnN0YW5jZTxUIGV4dGVuZHMgb2JqZWN0ID0gb2JqZWN0PiB7XG5cdGV4dHJhY3QoKTogRXh0cmFjdGVkPFQ+O1xuXHRwaWNrPEsgZXh0ZW5kcyBrZXlvZiBUPiguLi5rZXlzOiAoSyB8IEtbXSlbXSk6IHsgW1AgaW4gS106IFRbUF0gfSAmIHt9O1xuXHRwaWNrKC4uLmtleXM6IHN0cmluZ1tdKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cdHBhcmVudCgpOiBvYmplY3QgfCB1bmRlZmluZWQ7XG5cdHBhcmVudChjb25zdHJ1Y3Rvckxvb2t1cFBhdGg6IHN0cmluZyk6IG9iamVjdCB8IHVuZGVmaW5lZDtcblx0cmVhZG9ubHkgY2xvbmU6IHRoaXM7XG5cdGZvcmsoLi4uZm9ya0FyZ3M6IHVua25vd25bXSk6IHRoaXM7XG5cdGV4Y2VwdGlvbihlcnJvcjogRXJyb3IsIC4uLmFyZ3M6IHVua25vd25bXSk6IEVycm9yO1xuXHRyZWFkb25seSBzaWJsaW5nOiBTaWJsaW5nQWNjZXNzb3I7XG59XG5cbi8vIEluc3RhbmNlIHByb3BlcnRpZXMgZm9yIF9fc2VsZl9fIHJlZmVyZW5jZVxuLy8gVGhpcyBtZXJnZXMgaW50ZXJuYWwgcHJvcHMgd2l0aCB0aGUgaW5zdGFuY2UgbWV0aG9kc1xuLy8gSW50ZXJuYWwgaW5zdGFuY2UgcHJvcGVydGllcyAobm9uLWVudW1lcmFibGUpXG4vLyBUaGVzZSBhcmUgYWx3YXlzIHByZXNlbnQgb24gaW5zdGFuY2VzIGJ1dCBhY2Nlc3NlZCB2aWEgZ2V0UHJvcHMvc2V0UHJvcHNcbmV4cG9ydCB0eXBlIEluc3RhbmNlSW50ZXJuYWxQcm9wcyA9IHtcblx0X19wcm90b19wcm90b19fOiBvYmplY3Q7XG5cdF9fYXJnc19fOiB1bmtub3duW107XG5cdF9fY29sbGVjdGlvbl9fOiBDb2xsZWN0aW9uRGVmO1xuXHRfX3N1YnR5cGVzX186IE1hcDxzdHJpbmcsIG9iamVjdD47XG5cdF9fdHlwZV9fOiBUeXBlRGVmO1xuXHRfX3BhcmVudF9fOiBvYmplY3Q7XG5cdF9fc3RhY2tfXz86IHN0cmluZztcblx0X19jcmVhdG9yX186IEluc3RhbmNlQ3JlYXRvckNvbnRleHQ7XG5cdF9fdGltZXN0YW1wX186IG51bWJlcjtcbn07XG5cbi8vIENvbWJpbmVkIFByb3BzIHR5cGUgZm9yIGludGVybmFsIHVzZSBpbnNpZGUgLi9zcmNcbmV4cG9ydCB0eXBlIFByb3BzID0gSW5zdGFuY2VJbnRlcm5hbFByb3BzICYge1xuXHRfX3NlbGZfXzogSW5zdGFuY2VJbnRlcm5hbFByb3BzO1xuXHRba2V5OiBzdHJpbmddOiB1bmtub3duO1xufTtcblxuLy8gQ29tYmluZWQgaW5zdGFuY2UgdHlwZTogcGxhaW4gb2JqZWN0IHdpdGggdGhlIHVzZXIncyBmaWVsZHMgb25seS5cbi8vIEluc3RhbmNlIG1ldGhvZHMgKGV4dHJhY3QsIHBpY2ssIGZvcmssIGV0Yy4pIGFyZSBubyBsb25nZXIgYXV0by1pbmplY3RlZC5cbi8vIFRoZSBpbmxpbmUgbWFwcGVkIHR5cGUgaXMgdXNlZCBpbnN0ZWFkIG9mIHRoZSBGbGF0dGVuIGFsaWFzIHNvIHRoYXQgaG92ZXJcbi8vIHRvb2x0aXBzIHNob3cgdGhlIGFjdHVhbCBmaWVsZCBvYmplY3QgbGl0ZXJhbCBmaXJzdCwgbm90IFwiRmxhdHRlbjx7Li4ufT5cIi5cbmV4cG9ydCB0eXBlIEluc3RhbmNlUmVzdWx0PFxuICBOIGV4dGVuZHMgb2JqZWN0LFxuPiA9IHsgW0sgaW4ga2V5b2YgTl06IE5bS10gfTtcblxuLy8gRGVmaW5pdG9yIGluc3RhbmNlIC0gdGhlIGNvbnN0cnVjdG9yIGZ1bmN0aW9uIHJldHVybmVkIGJ5IGRlZmluZVxuLy8gTiA9IGluc3RhbmNlIHR5cGUgKHByb3BlcnRpZXMgYXZhaWxhYmxlIG9uIGluc3RhbmNlcylcbi8vIFMgPSBzdWJ0eXBlcyBtYXBcbmV4cG9ydCBpbnRlcmZhY2UgSURlZmluaXRvckluc3RhbmNlPFxuXHROIGV4dGVuZHMgb2JqZWN0LFxuXHRSIGV4dGVuZHMgSW5zdGFuY2VSZXN1bHQ8Tj4gPSBJbnN0YW5jZVJlc3VsdDxOPlxuPiB7XG5cblx0VHlwZU5hbWU6IHN0cmluZztcblx0cHJvdG90eXBlOiBOO1xuXG5cdFxuXHQvLyB0aGUgbGluZSBiZWxvdyBkZWNsYXJlcyBhIGBuZXcgLi4uYCBpbnZvY2F0aW9uLFxuXHQvLyBzbyBtYWtlcyBpbnRlcmZhY2UgY29uc3RydWN0aWJsZVxuXHQvLyBuZXcoLi4uYXJnczogdW5rbm93bltdKTogeyBba2V5IGluIGtleW9mIFJdOiBSW2tleV0gfTtcblx0bmV3KC4uLmFyZ3M6IHVua25vd25bXSk6IFI7XG5cblx0XG5cdC8vIFRPRE86IG5lZWQgY2hlY2sgaWYgbGluZSBiZWxvdyB3b3Jrc1xuXHQvLyBhbHNvIFRTIGhpbnRpbmcgY2hlY2sgYXMgd2VsbFxuXHQvLyB0aGUgbGluZSBiZWxvdyBzaG91bGQgbWFrZSBpcyBhIEBkZWNvcmF0ZSBkZWNvcmF0b3Igd29ya2luZ1xuXHQoLi4uYXJnczogdW5rbm93bltdKTogSURlZmluaXRvckluc3RhbmNlPFI+O1xuXG5cblx0Ly8gRGVmaW5lIG1ldGhvZCB0aGF0IGNvbWJpbmVzIHBhcmVudCBOIHdpdGggbmV3IHR5cGUgVCB1c2luZyBQcm90b1xuXHRkZWZpbmU8XG5cdFx0VCBleHRlbmRzIG9iamVjdCxcblxuXHRcdC8vIHRoaXMgd2lsbCBiZSBpbnN0YW5jZSB0eXBlIGZvciBzdWItdHlwZSAhISFcblx0XHQvLyBGIGV4dGVuZHMgRmxhdHRlbjxQcm90bzxOLCBUPj5cblx0XHRGIGV4dGVuZHMgUHJvdG88TiwgVD5cblx0Pihcblx0XHRUeXBlT3JUeXBlTmFtZTogc3RyaW5nIHwgQ2FsbGFibGVGdW5jdGlvbixcblx0XHRjb25zdHJ1Y3RIYW5kbGVyT3JDb25maWc/OiBJREVGPFQ+IHwgb2JqZWN0IHwgYm9vbGVhbiB8IENhbGxhYmxlRnVuY3Rpb24sXG5cdFx0Y29uZmlnT3JVbmRlZmluZWQ/OiBjb25zdHJ1Y3Rvck9wdGlvbnMgfCBDYWxsYWJsZUZ1bmN0aW9uIHwgYm9vbGVhblxuXHQpOiBJRGVmaW5pdG9ySW5zdGFuY2U8Rj47XG5cdFxuXHRsb29rdXA6IFR5cGVMb29rdXA7XG5cdFxuXHRyZWdpc3Rlckhvb2soaG9va1R5cGU6IGhvb2tzVHlwZXMsIGNiOiBob29rKTogdm9pZDtcblx0XG5cdFxuXHRzdWJ0eXBlczogU3VidHlwZXNNYXA7XG5cdFxuXHQvLyBJbnRlcm5hbCBwcm9wZXJ0aWVzIGFjY2Vzc2VkIGJ5IHRlc3RzXG5cdF9fdHlwZV9fPzogVHlwZURlZjtcblx0Y29sbGVjdGlvbj86IENvbGxlY3Rpb25EZWY7XG5cblx0Lypcblx0Ly8gQWxsb3cgZHluYW1pYyBwcm9wZXJ0eSBhY2Nlc3MgZm9yIHN1YnR5cGVzXG5cdFtrZXk6IHN0cmluZ106IHVua25vd247XG5cdCovXG59XG5cbi8vIFR5cGUgYWJzb3JiZXIgZnVuY3Rpb24gdHlwZSAtIHVzZWQgZm9yIGRlZmluaW5nIHN1YnR5cGVzXG4vLyBTdXBwb3J0cyBtdWx0aXBsZSBjYWxsaW5nIGNvbnZlbnRpb25zOlxuLy8gMS4gTW9kZXJuOiBkZWZpbmUoVHlwZU5hbWUsIGNvbnN0cnVjdEhhbmRsZXIsIGNvbmZpZz8pXG4vLyAyLiBMZWdhY3k6IGRlZmluZShjb25zdHJ1Y3RIYW5kbGVyLCBjb25maWc/KSAtIFR5cGVOYW1lIGZyb20gY29uc3RydWN0b3IgbmFtZVxuLy8gMy4gTmVzdGVkOiBwYXJlbnRUeXBlLmRlZmluZShUeXBlTmFtZSwgY29uc3RydWN0SGFuZGxlciwgY29uZmlnPylcbmV4cG9ydCBpbnRlcmZhY2UgVHlwZUFic29yYmVyIGV4dGVuZHMgQ2FsbGFibGVGdW5jdGlvbiB7XG5cdDxUIGV4dGVuZHMgb2JqZWN0Pihcblx0XHR0aGlzOiB1bmtub3duLFxuXHRcdFR5cGVPclR5cGVOYW1lOiBzdHJpbmcgfCBDYWxsYWJsZUZ1bmN0aW9uLFxuXHRcdGNvbnN0cnVjdEhhbmRsZXJPckNvbmZpZz86IElERUY8VD4gfCBvYmplY3QgfCBib29sZWFuIHwgQ2FsbGFibGVGdW5jdGlvbixcblx0XHRjb25maWdPclVuZGVmaW5lZD86IGNvbnN0cnVjdG9yT3B0aW9ucyB8IENhbGxhYmxlRnVuY3Rpb24gfCBib29sZWFuXG5cdCk6IElEZWZpbml0b3JJbnN0YW5jZTxUPjtcbn1cblxuLy8gVHlwZXNDb2xsZWN0aW9uIGludGVyZmFjZSBmb3IgY3JlYXRlVHlwZXNDb2xsZWN0aW9uXG4vLyBUaGlzIHJlcHJlc2VudHMgdGhlIGFjdHVhbCByZXR1cm4gdHlwZSBvZiBjcmVhdGVUeXBlc0NvbGxlY3Rpb25cbmV4cG9ydCBpbnRlcmZhY2UgVHlwZXNDb2xsZWN0aW9uIGV4dGVuZHMgSG9va2FibGUge1xuXHRkZWZpbmU6IFR5cGVBYnNvcmJlcjtcblx0bG9va3VwOiBUeXBlTG9va3VwO1xuXHRzdWJ0eXBlczogU3VidHlwZXNNYXA7XG5cdFtrZXk6IHN0cmluZ106IHVua25vd247XG59XG5cbi8vIFNoYXJlZCBpbnRlcmZhY2UgZm9yIG9iamVjdHMgdGhhdCBzdXBwb3J0IGhvb2tzIChUeXBlRGVmIGFuZCBDb2xsZWN0aW9uRGVmKVxuZXhwb3J0IGludGVyZmFjZSBIb29rYWJsZSB7XG5cdGhvb2tzOiBSZWNvcmQ8c3RyaW5nLCBTZXQ8aG9vaz4+O1xuXHRpbnZva2VIb29rKGhvb2tUeXBlOiBob29rc1R5cGVzLCBvcHRzOiBob29rc09wdHMpOiBTZXQ8dW5rbm93bj47XG5cdHJlZ2lzdGVySG9vayhob29rVHlwZTogaG9va3NUeXBlcywgY2I6IGhvb2spOiB2b2lkO1xuXHRyZWdpc3RlckZsb3dDaGVja2VyKGNiOiAob3B0czogb2JqZWN0KSA9PiB1bmtub3duKTogdm9pZDtcbn1cblxuLy8gY3JlYXRlVHlwZXNDb2xsZWN0aW9uIGZ1bmN0aW9uIHR5cGVcbmV4cG9ydCB0eXBlIENyZWF0ZVR5cGVzQ29sbGVjdGlvbkZ1bmN0aW9uID0gKGNvbmZpZz86IGNvbnN0cnVjdG9yT3B0aW9ucykgPT4gVHlwZXNDb2xsZWN0aW9uO1xuXG4vLyBUeXBlIGNsYXNzIC0gYmFzZSB0eXBlIGNvbnN0cnVjdG9yXG5leHBvcnQgdHlwZSBUeXBlQ2xhc3MgPSBJRGVmaW5pdG9ySW5zdGFuY2U8b2JqZWN0PjtcblxuLy8gTW5lbW9uaWNhIGNvbnN0cnVjdG9yIOKAlCB0aGUgY29uc3RydWN0b3IgZnVuY3Rpb24gcmV0dXJuZWQgYnkgY29uc3RydWN0SGFuZGxlcigpXG4vLyBIYXMgU3ltYm9sQ29uc3RydWN0b3JOYW1lIGF0dGFjaGVkIGFuZCBpcyBib3RoIG5ld2FibGUgYW5kIGNhbGxhYmxlXG5leHBvcnQgaW50ZXJmYWNlIE1uZW1vbmljYUNvbnN0cnVjdG9yIGV4dGVuZHMgTmV3YWJsZUZ1bmN0aW9uIHtcblx0bmV3ICguLi5hcmdzOiB1bmtub3duW10pOiBvYmplY3Q7XG5cdCh0aGlzOiBvYmplY3QsIC4uLmFyZ3M6IHVua25vd25bXSk6IHVua25vd247XG5cdFtrZXk6IHN5bWJvbF06IHVua25vd247XG59XG5cbi8vIFR5cGUgZGVzY3JpcHRvciBpbnN0YW5jZSDigJQgaW50ZXJuYWwgc2hhcGUgb2YgVHlwZURlc2NyaXB0b3Igb2JqZWN0c1xuZXhwb3J0IGludGVyZmFjZSBUeXBlRGVzY3JpcHRvckRlZmluZSBleHRlbmRzIENhbGxhYmxlRnVuY3Rpb24ge1xuXHQoXG5cdFx0VHlwZU9yVHlwZU5hbWU6IHN0cmluZyB8IENhbGxhYmxlRnVuY3Rpb24sXG5cdFx0Y29uc3RydWN0SGFuZGxlck9yQ29uZmlnPzogQ2FsbGFibGVGdW5jdGlvbiB8IG9iamVjdCxcblx0XHRjb25maWc/OiBvYmplY3Rcblx0KTogVHlwZUNsYXNzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFR5cGVEZXNjcmlwdG9yTG9va3VwIGV4dGVuZHMgQ2FsbGFibGVGdW5jdGlvbiB7XG5cdChUeXBlTmVzdGVkUGF0aDogc3RyaW5nKTogVHlwZUNsYXNzIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgdHlwZSBUeXBlRGVzY3JpcHRvckluc3RhbmNlID0ge1xuXHRkZWZpbmU6IFR5cGVEZXNjcmlwdG9yRGVmaW5lO1xuXHRsb29rdXA6IFR5cGVEZXNjcmlwdG9yTG9va3VwO1xuXHRzdWJ0eXBlczogTWFwPHN0cmluZywgb2JqZWN0Pjtcblx0VHlwZU5hbWU6IHN0cmluZztcbn07XG5cbi8vIENvbnN0cnVjdG9yIHR5cGUgZm9yIGRlY29yYXRlIGZ1bmN0aW9uXG5leHBvcnQgdHlwZSBDb25zdHJ1Y3RvcjxUID0gb2JqZWN0PiA9IG5ldyAoLi4uYXJnczogdW5rbm93bltdKSA9PiBUO1xuXG4vLyBEZWNvcmF0ZWQgY2xhc3MgdHlwZSAtIGluY2x1ZGVzIGNhbGwgc2lnbmF0dXJlIGZvciBkZWNvcmF0b3IgcGF0dGVyblxuZXhwb3J0IHR5cGUgRGVjb3JhdGVkQ2xhc3M8VCBleHRlbmRzIENvbnN0cnVjdG9yPG9iamVjdD4+ID1cblx0VCAmXG5cdCg8VSBleHRlbmRzIENvbnN0cnVjdG9yPG9iamVjdD4+KHRhcmdldDogVSkgPT4gRGVjb3JhdGVkQ2xhc3M8VT4pICYge1xuXHRcdGRlZmluZTogVHlwZUFic29yYmVyO1xuXHRcdHJlZ2lzdGVySG9vayhob29rVHlwZTogaG9va3NUeXBlcywgY2I6IGhvb2spOiB2b2lkO1xuXHRcdGxvb2t1cDogVHlwZUxvb2t1cDtcblx0XHRUeXBlTmFtZTogc3RyaW5nO1xuXHR9O1xuXG4vLyBIZWxwZXI6IG1lcmdlIHBhcmVudCBlbnRpdHkgKEUpIGFuZCBjaGlsZCBjb25zdHJ1Y3RvciBpbnN0YW5jZSAoVCkgaW50byBhXG4vLyBzaW5nbGUgZmxhdCBvYmplY3QgdHlwZSwgZmlsdGVyaW5nIG91dCBNbmVtb25pY2FJbnN0YW5jZSBtZXRob2QgbmFtZXMuXG4vLyBVc2VkIGJ5IGFwcGx5L2NhbGwvYmluZC5cbmV4cG9ydCB0eXBlIE1lcmdlPEUgZXh0ZW5kcyBvYmplY3QsIFQgZXh0ZW5kcyBvYmplY3Q+ID0ge1xuXHRbSyBpbiBrZXlvZiBUIHwga2V5b2YgRSBhcyBLIGV4dGVuZHMgTW5lbW9uaWNhSW5zdGFuY2VNZXRob2RLZXlzID8gbmV2ZXIgOiBLXTpcblx0XHRLIGV4dGVuZHMga2V5b2YgVCA/IFRbS10gOiBFW0sgJiBrZXlvZiBFXTtcbn07XG5cbi8vIEFwcGx5L0NhbGwvQmluZCBmdW5jdGlvbiB0eXBlc1xuLy8gVGhlIHJldHVybiB0eXBlIG1lcmdlcyB0aGUgcGFyZW50IGVudGl0eSBmaWVsZHMgd2l0aCB0aGUgY2hpbGQgY29uc3RydWN0b3Jcbi8vIGZpZWxkcyAoZmlsdGVyaW5nIG91dCBNbmVtb25pY2FJbnN0YW5jZSBtZXRob2QgbmFtZXMpLCBwcm9kdWNpbmcgdGhlIHNhbWVcbi8vIGB7IGZpZWxkcyB9YCBob3ZlciBzdHlsZSBhcyBgbmV3IFR5cGUoKWAuXG5leHBvcnQgaW50ZXJmYWNlIEFwcGx5RnVuY3Rpb24gZXh0ZW5kcyBDYWxsYWJsZUZ1bmN0aW9uIHtcblx0PEUgZXh0ZW5kcyBvYmplY3QsIFQgZXh0ZW5kcyBvYmplY3Q+KFxuXHRcdGVudGl0eTogRSxcblx0XHRDb25zdHJ1Y3RvcjogSURFRjxUPixcblx0XHRhcmdzPzogdW5rbm93bltdXG5cdCk6IEluc3RhbmNlUmVzdWx0PE1lcmdlPEUsIFQ+Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDYWxsRnVuY3Rpb24gZXh0ZW5kcyBDYWxsYWJsZUZ1bmN0aW9uIHtcblx0PEUgZXh0ZW5kcyBvYmplY3QsIFQgZXh0ZW5kcyBvYmplY3Q+KFxuXHRcdGVudGl0eTogRSxcblx0XHRDb25zdHJ1Y3RvcjogSURFRjxUPixcblx0XHQuLi5hcmdzOiB1bmtub3duW11cblx0KTogSW5zdGFuY2VSZXN1bHQ8TWVyZ2U8RSwgVD4+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJpbmRGdW5jdGlvbiBleHRlbmRzIENhbGxhYmxlRnVuY3Rpb24ge1xuXHQ8RSBleHRlbmRzIG9iamVjdCwgVCBleHRlbmRzIG9iamVjdD4oXG5cdFx0ZW50aXR5OiBFLFxuXHRcdENvbnN0cnVjdG9yOiBJREVGPFQ+XG5cdCk6ICguLi5hcmdzOiB1bmtub3duW10pID0+IEluc3RhbmNlUmVzdWx0PE1lcmdlPEUsIFQ+Pjtcbn1cblxuLy8gVXRpbHMgb2JqZWN0IHR5cGVcbmV4cG9ydCBpbnRlcmZhY2UgVXRpbHNDb2xsZWN0aW9uIHtcblx0ZXh0cmFjdDxUIGV4dGVuZHMgb2JqZWN0PihpbnN0YW5jZTogVCk6IEV4dHJhY3RlZDxUPjtcblx0cGljazxUIGV4dGVuZHMgb2JqZWN0LCBLIGV4dGVuZHMga2V5b2YgVD4oaW5zdGFuY2U6IFQsIC4uLmFyZ3M6IChLIHwgS1tdKVtdKTogeyBbUCBpbiBLXTogVFtQXSB9ICYge307XG5cdHBpY2s8VCBleHRlbmRzIG9iamVjdD4oaW5zdGFuY2U6IFQsIC4uLmFyZ3M6IChzdHJpbmcgfCBzdHJpbmdbXSlbXSk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXHRjbG9uZTxUIGV4dGVuZHMgb2JqZWN0PihpbnN0YW5jZTogVCk6IFQ7XG5cdGZvcms8VCBleHRlbmRzIG9iamVjdD4oaW5zdGFuY2U6IFQpOiAodGhpczogb2JqZWN0LCAuLi5mb3JrQXJnczogdW5rbm93bltdKSA9PiBUO1xuXHRzaWJsaW5nKGluc3RhbmNlOiBvYmplY3QpOiBTaWJsaW5nQWNjZXNzb3I7XG5cdGNvbGxlY3RDb25zdHJ1Y3RvcnM6IChpbnN0YW5jZTogb2JqZWN0LCBmbGF0PzogYm9vbGVhbikgPT4gKENhbGxhYmxlRnVuY3Rpb24gfCBzdHJpbmcpW107XG5cdG1lcmdlPEEgZXh0ZW5kcyBvYmplY3QsIEIgZXh0ZW5kcyBvYmplY3Q+KFxuXHRcdGE6IEEsXG5cdFx0YjogQixcblx0XHQuLi5hcmdzOiB1bmtub3duW11cblx0KTogSW5zdGFuY2VSZXN1bHQ8TWVyZ2U8QiwgQT4+O1xuXHRwYXJzZTxUIGV4dGVuZHMgb2JqZWN0PihzZWxmOiBUKTogUGFyc2VkPFQ+O1xuXHRwYXJlbnQ8VCBleHRlbmRzIG9iamVjdD4oaW5zdGFuY2U6IFQsIHBhdGg/OiBzdHJpbmcpOiBvYmplY3QgfCB1bmRlZmluZWQ7XG5cdHRvSlNPTjxUIGV4dGVuZHMgb2JqZWN0PihpbnN0YW5jZTogVCk6IHN0cmluZztcblx0W2tleTogc3RyaW5nXTogQ2FsbGFibGVGdW5jdGlvbjtcbn1cblxuLy8gTWFpbiBtbmVtb25pY2EgbW9kdWxlIGludGVyZmFjZSAtIHJlcHJlc2VudHMgdGhlIGV4cG9ydGVkIG1vZHVsZSBvYmplY3RcbmV4cG9ydCBpbnRlcmZhY2UgTW5lbW9uaWNhTW9kdWxlIHtcblx0Ly8gQ29yZSBmdW5jdGlvbnNcblx0ZGVmaW5lOiBUeXBlQWJzb3JiZXI7XG5cdGxvb2t1cDogKFR5cGVOZXN0ZWRQYXRoOiBzdHJpbmcpID0+IFR5cGVDbGFzcyB8IHVuZGVmaW5lZDtcblx0YXBwbHk6IEFwcGx5RnVuY3Rpb247XG5cdGNhbGw6IENhbGxGdW5jdGlvbjtcblx0YmluZDogQmluZEZ1bmN0aW9uO1xuXHRkZWNvcmF0ZTogPFQgZXh0ZW5kcyBDb25zdHJ1Y3RvcjxvYmplY3Q+IHwgY29uc3RydWN0b3JPcHRpb25zIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkPihcblx0XHR0YXJnZXQ/OiBULFxuXHRcdGNvbmZpZz86IGNvbnN0cnVjdG9yT3B0aW9uc1xuXHQpID0+IDxVIGV4dGVuZHMgQ29uc3RydWN0b3I8b2JqZWN0Pj4oY3N0cjogVSkgPT4gRGVjb3JhdGVkQ2xhc3M8VT47XG5cdHJlZ2lzdGVySG9vazogPFQgZXh0ZW5kcyBvYmplY3Q+KENvbnN0cnVjdG9yOiBJREVGPFQ+LCBob29rVHlwZTogaG9va3NUeXBlcywgY2I6IGhvb2spID0+IHZvaWQ7XG5cblx0Ly8gRGVzY3JpcHRvcnNcblx0ZGVmYXVsdFR5cGVzOiBUeXBlc0NvbGxlY3Rpb247XG5cblx0Ly8gRXJyb3JzXG5cdEJBU0VfTU5FTU9OSUNBX0VSUk9SOiBNbmVtb25pY2FFcnJvckNvbnN0cnVjdG9yO1xuXHRXUk9OR19UWVBFX0RFRklOSVRJT046IE1uZW1vbmljYUVycm9yQ29uc3RydWN0b3I7XG5cdFdST05HX0lOU1RBTkNFX0lOVk9DQVRJT046IE1uZW1vbmljYUVycm9yQ29uc3RydWN0b3I7XG5cdFdST05HX01PRElGSUNBVElPTl9QQVRURVJOOiBNbmVtb25pY2FFcnJvckNvbnN0cnVjdG9yO1xuXHRBTFJFQURZX0RFQ0xBUkVEOiBNbmVtb25pY2FFcnJvckNvbnN0cnVjdG9yO1xuXHRXUk9OR19BUkdVTUVOVFNfVVNFRDogTW5lbW9uaWNhRXJyb3JDb25zdHJ1Y3Rvcjtcblx0V1JPTkdfSE9PS19UWVBFOiBNbmVtb25pY2FFcnJvckNvbnN0cnVjdG9yO1xuXHRNSVNTSU5HX0NBTExCQUNLX0FSR1VNRU5UOiBNbmVtb25pY2FFcnJvckNvbnN0cnVjdG9yO1xuXHQvLyBGTE9XX0NIRUNLRVJfUkVERUZJTklUSU9OOiBNbmVtb25pY2FFcnJvckNvbnN0cnVjdG9yO1xuXHRNSVNTSU5HX0hPT0tfQ0FMTEJBQ0s6IE1uZW1vbmljYUVycm9yQ29uc3RydWN0b3I7XG5cdFRZUEVOQU1FX01VU1RfQkVfQV9TVFJJTkc6IE1uZW1vbmljYUVycm9yQ29uc3RydWN0b3I7XG5cdEhBTkRMRVJfTVVTVF9CRV9BX0ZVTkNUSU9OOiBNbmVtb25pY2FFcnJvckNvbnN0cnVjdG9yO1xuXHRPUFRJT05TX0VSUk9SOiBNbmVtb25pY2FFcnJvckNvbnN0cnVjdG9yO1xuXHRXUk9OR19TVEFDS19DTEVBTkVSOiBNbmVtb25pY2FFcnJvckNvbnN0cnVjdG9yO1xuXG5cdC8vIENvbnN0YW50c1xuXHRNTkVNT05JQ0E6IHN0cmluZztcblx0TU5FTU9TWU5FOiBzdHJpbmc7XG5cdFN5bWJvbFBhcmVudFR5cGU6IHN5bWJvbDtcblx0U3ltYm9sQ29uc3RydWN0b3JOYW1lOiBzeW1ib2w7XG5cdFN5bWJvbERlZmF1bHRUeXBlc0NvbGxlY3Rpb246IHN5bWJvbDtcblx0U3ltYm9sQ29uZmlnOiBzeW1ib2w7XG5cdFRZUEVfVElUTEVfUFJFRklYOiBzdHJpbmc7XG5cdEVycm9yTWVzc2FnZXM6IEVycm9yTWVzc2FnZXM7XG5cblx0Ly8gVXRpbHNcblx0dXRpbHM6IFV0aWxzQ29sbGVjdGlvbjtcblx0Z2V0UHJvcHM6IChpbnN0YW5jZTogb2JqZWN0KSA9PiBQcm9wc1R5cGUgfCB1bmRlZmluZWQ7XG5cdHNldFByb3BzOiAoaW5zdGFuY2U6IG9iamVjdCwgdmFsdWVzOiBvYmplY3QpID0+IHN0cmluZ1tdIHwgZmFsc2U7XG5cdGZpbmRTdWJUeXBlRnJvbVBhcmVudDogKGluc3RhbmNlOiBvYmplY3QgfCB1bmRlZmluZWQsIHN1YlR5cGU6IHN0cmluZykgPT4gb2JqZWN0IHwgbnVsbDtcblx0aXNDbGFzczogKGZuOiBDYWxsYWJsZUZ1bmN0aW9uKSA9PiBib29sZWFuO1xuXG5cdC8vIGNyZWF0ZVR5cGVzQ29sbGVjdGlvblxuXHRjcmVhdGVUeXBlc0NvbGxlY3Rpb246IENyZWF0ZVR5cGVzQ29sbGVjdGlvbkZ1bmN0aW9uO1xuXG5cdC8vIEFsbG93IGFkZGl0aW9uYWwgcHJvcGVydGllc1xuXHRba2V5OiBzdHJpbmddOiB1bmtub3duO1xufVxuIl19
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50IG5vLXVudXNlZC12YXJzOiBcIm9mZlwiICovXG5cbmltcG9ydCB0eXBlIHsgVHlwZVJlZ2lzdHJ5IH0gZnJvbSAnLi4vaW5kZXgnO1xuXG4vLyBQcm9wcyB0eXBlIGZvciBnZXRQcm9wcy9zZXRQcm9wc1xuZXhwb3J0IHR5cGUgUHJvcHNUeXBlID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbi8vIENvcmUgdHlwZSBkZWZpbml0aW9ucyBmb3IgbW5lbW9uaWNhXG5cbi8vIEJhc2UgY29uc3RydWN0b3IgZnVuY3Rpb24gdHlwZSAtIGNhbiBiZSBhIGNsYXNzIGNvbnN0cnVjdG9yIG9yIGEgZnVuY3Rpb24uXG4vLyBBcmdzIGRlZmF1bHRzIHRvIHVua25vd25bXSBzbyBJREVGPFQ+IGlzIGJhY2t3YXJkcyBjb21wYXRpYmxlO1xuLy8gc3VwcGx5IEFyZ3MgdG8gZ2V0IHR5cGVkIGNvbnN0cnVjdG9yIHBhcmFtczogSURFRjxNeVR5cGUsIFtzdHJpbmcsIG51bWJlcl0+XG5leHBvcnQgdHlwZSBJREVGPFQsIEFyZ3MgZXh0ZW5kcyB1bmtub3duW10gPSB1bmtub3duW10+ID0geyBuZXcoKTogVCB9IHwgeyAodGhpczogVCwgLi4uYXJnczogQXJncyk6IHZvaWQgfTtcblxuLy8gRXJyb3IgbWVzc2FnZSB0eXBlcyAtIGFsbCBlcnJvciBtZXNzYWdlcyBhcmUgc3RyaW5nc1xuZXhwb3J0IHR5cGUgRXJyb3JNZXNzYWdlS2V5ID1cblx0fCAnQkFTRV9FUlJPUl9NRVNTQUdFJ1xuXHR8ICdIQU5ETEVSX01VU1RfQkVfQV9GVU5DVElPTidcblx0fCAnV1JPTkdfVFlQRV9ERUZJTklUSU9OJ1xuXHR8ICdXUk9OR19JTlNUQU5DRV9JTlZPQ0FUSU9OJ1xuXHR8ICdXUk9OR19NT0RJRklDQVRJT05fUEFUVEVSTidcblx0fCAnQUxSRUFEWV9ERUNMQVJFRCdcblx0fCAnV1JPTkdfQVJHVU1FTlRTX1VTRUQnXG5cdHwgJ1dST05HX0hPT0tfVFlQRSdcblx0fCAnTUlTU0lOR19IT09LX0NBTExCQUNLJ1xuXHR8ICdNSVNTSU5HX0NBTExCQUNLX0FSR1VNRU5UJ1xuXHR8ICdPUFRJT05TX0VSUk9SJ1xuXHR8ICdXUk9OR19TVEFDS19DTEVBTkVSJztcblx0Ly8gfCAnVFlQRU5BTUVfTVVTVF9CRV9BX1NUUklORydcblx0Ly8gfCAnRkxPV19DSEVDS0VSX1JFREVGSU5JVElPTidcblxuLy8gRXJyb3IgbWVzc2FnZXMgb2JqZWN0IHR5cGVcbmV4cG9ydCB0eXBlIEVycm9yTWVzc2FnZXMgPSBSZWNvcmQ8RXJyb3JNZXNzYWdlS2V5LCBzdHJpbmc+O1xuXG4vLyBIb29rIGNhbGxiYWNrIOKAlCBwYXNzZWQgdG8gcmVnaXN0ZXJIb29rIGFuZCBpbnZva2VkIGJ5IGludm9rZUhvb2tcbmV4cG9ydCBpbnRlcmZhY2UgaG9vayBleHRlbmRzIENhbGxhYmxlRnVuY3Rpb24ge1xuXHQob3B0czogaG9va3NPcHRzKTogdW5rbm93bjtcbn1cblxuLy8gRXJyb3IgY29uc3RydWN0b3IgZnJvbSBjb25zdHJ1Y3RFcnJvciAtIGNvbnN0cnVjdGFibGUgZnVuY3Rpb24gd2l0aCBwcm90b3R5cGVcbmV4cG9ydCBpbnRlcmZhY2UgTW5lbW9uaWNhRXJyb3JDb25zdHJ1Y3RvciB7XG5cdG5ldyhhZGRpdGlvbj86IHN0cmluZywgc3RhY2s/OiBzdHJpbmcgfCBzdHJpbmdbXSk6IEVycm9yO1xuXHQobmFtZTogc3RyaW5nKTogRXJyb3I7XG5cdHByb3RvdHlwZToge1xuXHRcdGNvbnN0cnVjdG9yOiBNbmVtb25pY2FFcnJvckNvbnN0cnVjdG9yO1xuXHR9O1xufVxuXG4vLyBFcnJvcnMgdHlwZXMgbWFwIC0gaW5kZXhhYmxlIHJlY29yZCBvZiBlcnJvciBjb25zdHJ1Y3RvcnNcbmV4cG9ydCB0eXBlIEVycm9yc1R5cGVzTWFwID0gUmVjb3JkPHN0cmluZywgTW5lbW9uaWNhRXJyb3JDb25zdHJ1Y3Rvcj47XG5cbi8vIE1uZW1vbmljYSBlcnJvciBpbnRlcmZhY2UgZm9yIGV4dGVuZGVkIEVycm9yIG9iamVjdHNcbmV4cG9ydCBpbnRlcmZhY2UgTW5lbW9uaWNhRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG5cdGV4Y2VwdGlvblJlYXNvbj86IEVycm9yO1xuXHRyZWFzb25zPzogRXJyb3JbXTtcblx0c3VycGx1cz86IEVycm9yW107XG59XG5cbi8qKlxuICogSW50ZXJuYWwgVHlwZSBDb25zdHJ1Y3Rvci5cbiAqIFwiVHlwZVwiIGhlcmUgaXMgdXNlZCBpbiB0aGUgQ29tcHV0ZXIgU2NpZW5jZSBzZW5zZSDigJQgYW4gaW50ZXJmYWNlL2NvbnRyYWN0XG4gKiBkZXNjcmliaW5nIHdoYXQgYSBjb25zdHJ1Y3RvciBtdXN0IHNhdGlzZnkgKGJvdGggYG5ld2AtYWJsZSBhbmQgY2FsbGFibGUpLlxuICogVEMgPSBUeXBlIENvbnN0cnVjdG9yOyBcIkludGVybmFsXCIgbWVhbnMgdGhpcyBpcyB0aGUgbGlicmFyeSdzIG93biBjb25zdHJ1Y3RvclxuICogc2hhcGUsIGRpc3RpbmN0IGZyb20gdXNlci1mYWNpbmcgVHlwZUNvbnN0cnVjdG9yIGJlbG93LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIF9JbnRlcm5hbF9UQ188Q29uc3RydWN0b3JJbnN0YW5jZSBleHRlbmRzIG9iamVjdD4ge1xuXHRuZXcoLi4uYXJnczogdW5rbm93bltdKTogQ29uc3RydWN0b3JJbnN0YW5jZTtcblx0KHRoaXM6IENvbnN0cnVjdG9ySW5zdGFuY2UsIC4uLmFyZ3M6IHVua25vd25bXSk6IENvbnN0cnVjdG9ySW5zdGFuY2U7XG5cdHJlYWRvbmx5IHByb3RvdHlwZTogQ29uc3RydWN0b3JJbnN0YW5jZSAmIHtcblx0XHRyZWFkb25seSBjb25zdHJ1Y3RvcjogX0ludGVybmFsX1RDXzxDb25zdHJ1Y3Rvckluc3RhbmNlPlxuXHR9O1xufVxuXG4vKipcbiAqIFB1YmxpYyBhbGlhcyBmb3IgX0ludGVybmFsX1RDXyDigJQgdGhlIHNoYXBlIG9mIGNvbnN0cnVjdG9yIGZ1bmN0aW9ucyByZXR1cm5lZCBieSBgZGVmaW5lKClgLlxuICogQXVnbWVudGVkIGJ5IHRhY3RpY2EtZ2VuZXJhdGVkIFR5cGVSZWdpc3RyeSB0byBiZWNvbWUgdXNlci1zcGVjaWZpYyB0eXBlcy5cbiAqIEtlcHQgYXMgYSBuYW1lZCBhbGlhcyAocmF0aGVyIHRoYW4gaW5saW5pbmcgX0ludGVybmFsX1RDXykgc28gdGFjdGljYSBjYW4gcmVmZXJlbmNlIGl0XG4gKiBjbGVhbmx5IGluIGdlbmVyYXRlZCBkZWNsYXJhdGlvbiBmaWxlcy5cbiAqL1xuZXhwb3J0IHR5cGUgVHlwZUNvbnN0cnVjdG9yPENvbnN0cnVjdG9ySW5zdGFuY2UgZXh0ZW5kcyBvYmplY3Q+ID0gX0ludGVybmFsX1RDXzxDb25zdHJ1Y3Rvckluc3RhbmNlPjtcblxuLyoqXG4gKiBNaW5pbWFsIGNvbnN0cnVjdG9yIHNoYXBlIHVzZWQgZm9yIHRoZSBUeXBlUmVnaXN0cnkgaW5kZXggc2lnbmF0dXJlLlxuICogSXQgYWNjZXB0cyBhbnkgbW5lbW9uaWNhLWNvbXBhdGlibGUgY29uc3RydWN0b3IsIGJ1dCBkZWxpYmVyYXRlbHkgcmV0dXJuc1xuICogYG9iamVjdGAgc28gdW5hdWdtZW50ZWQgcmVnaXN0cnkgbG9va3VwcyBhcmUgbm90IHVzZWZ1bCB3aXRob3V0IGFuIGV4cGxpY2l0XG4gKiBwZXIta2V5IGNvbnN0cnVjdG9yIHR5cGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHlwZUNvbnN0cnVjdG9yQmFzZSB7XG5cdG5ldyAoLi4uYXJnczogdW5rbm93bltdKTogb2JqZWN0O1xufVxuXG4vKipcbiAqIEluc3RhbmNlIHR5cGUgcHJvZHVjZWQgYnkgYSBUeXBlUmVnaXN0cnkgY29uc3RydWN0b3IuXG4gKi9cbmV4cG9ydCB0eXBlIEluc3RhbmNlT2ZUeXBlUmVnaXN0cnk8SyBleHRlbmRzIGtleW9mIFR5cGVSZWdpc3RyeT4gPVxuXHRUeXBlUmVnaXN0cnlbS10gZXh0ZW5kcyBuZXcgKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gaW5mZXIgUiA/IFIgOiBuZXZlcjtcblxuXG4vKipcbiAqIEV4dHJhY3Qgb25seSB0aGUgbGl0ZXJhbCBzdHJpbmcga2V5cyBvZiBhIHR5cGUsIGZpbHRlcmluZyBvdXQgZ2VuZXJpY1xuICogaW5kZXggc2lnbmF0dXJlcy4gVGhpcyBsZXRzIHVzIGl0ZXJhdGUgb3ZlciBhdWdtZW50ZWQgVHlwZVJlZ2lzdHJ5IGtleXNcbiAqIHdpdGhvdXQgcGlja2luZyB1cCB0aGUgYFtrZXk6IHN0cmluZ11gIHNpZ25hdHVyZS5cbiAqL1xuZXhwb3J0IHR5cGUgTGl0ZXJhbEtleXNPZjxUPiA9IGtleW9mIFQgZXh0ZW5kcyBpbmZlciBLXG5cdD8gSyBleHRlbmRzIHN0cmluZ1xuXHRcdD8gc3RyaW5nIGV4dGVuZHMgSyA/IG5ldmVyIDogS1xuXHRcdDogbmV2ZXJcblx0OiBuZXZlcjtcblxuLyoqXG4gKiBHaXZlbiBhIGRvdHRlZCBUeXBlUmVnaXN0cnkga2V5LCBleHRyYWN0IHRoZSBwYXJlbnQgcGF0aC5cbiAqIGBQYXJlbnRQYXRoPCdBLkIuQyc+YCDihpIgYCdBLkInYC5cbiAqL1xuZXhwb3J0IHR5cGUgUGFyZW50UGF0aDxLIGV4dGVuZHMgc3RyaW5nPiA9XG5cdEsgZXh0ZW5kcyBgJHtpbmZlciBQfS4ke3N0cmluZ31gID8gUCA6IG5ldmVyO1xuXG4vKipcbiAqIEdpdmVuIGEgZG90dGVkIFR5cGVSZWdpc3RyeSBrZXksIHJldHVybiB0aGUgdW5pb24gb2YgYWxsIGFuY2VzdG9yIHByZWZpeGVzLlxuICogYEFsbFBhcmVudFByZWZpeGVzPCdBLkIuQyc+YCDihpIgYCdBJyB8ICdBLkInYC5cbiAqL1xuZXhwb3J0IHR5cGUgQWxsUGFyZW50UHJlZml4ZXM8SyBleHRlbmRzIHN0cmluZz4gPVxuXHRLIGV4dGVuZHMgYCR7aW5mZXIgUH0uJHtzdHJpbmd9YCA/IFAgfCBBbGxQYXJlbnRQcmVmaXhlczxQPiA6IG5ldmVyO1xuXG4vKipcbiAqIEdpdmVuIGEgcGFyZW50IHBhdGgsIHJldHVybiB0aGUgdW5pb24gb2YgVHlwZVJlZ2lzdHJ5IGtleXMgdGhhdCBhcmUgZGlyZWN0XG4gKiBvciBpbmRpcmVjdCBjaGlsZHJlbiBvZiB0aGF0IHBhdGguXG4gKi9cbmV4cG9ydCB0eXBlIENoaWxkS2V5c09mPFAgZXh0ZW5kcyBzdHJpbmc+ID0ge1xuXHRbSyBpbiBrZXlvZiBUeXBlUmVnaXN0cnldOiBLIGV4dGVuZHMgYCR7UH0uJHtzdHJpbmd9YCA/IEsgOiBuZXZlclxufVtrZXlvZiBUeXBlUmVnaXN0cnldO1xuXG4vKipcbiAqIEdpdmVuIGFuIGluc3RhbmNlIHR5cGUsIGZpbmQgdGhlIFR5cGVSZWdpc3RyeSBrZXkocykgd2hvc2UgY29uc3RydWN0b3JcbiAqIHJldHVybnMgdGhhdCBpbnN0YW5jZSB0eXBlLiBUaGlzIGludmVydHMgdGhlIHJlZ2lzdHJ5IGF0IHRoZSB0eXBlIGxldmVsXG4gKiBzbyB1dGlsaXRpZXMgbGlrZSBgcGFyZW50KClgIGNhbiBkZXJpdmUgYW4gaW5zdGFuY2UncyBwYXRoIGZyb20gaXRzXG4gKiB0eXBlIGFsb25lLlxuICovXG5leHBvcnQgdHlwZSBQYXRoT2ZJbnN0YW5jZTxUIGV4dGVuZHMgb2JqZWN0PiA9IHtcblx0W0sgaW4gTGl0ZXJhbEtleXNPZjxUeXBlUmVnaXN0cnk+XTogVHlwZVJlZ2lzdHJ5W0tdIGV4dGVuZHMgbmV3ICguLi5hcmdzOiB1bmtub3duW10pID0+IGluZmVyIFJcblx0XHQ/IFQgZXh0ZW5kcyBSID8gSyA6IG5ldmVyXG5cdFx0OiBuZXZlclxufVtMaXRlcmFsS2V5c09mPFR5cGVSZWdpc3RyeT5dO1xuXG4vKipcbiAqIEdpdmVuIGFuIGluc3RhbmNlIHR5cGUsIHJldHVybiB0aGUgdW5pb24gb2YgVHlwZVJlZ2lzdHJ5IHBhdGhzIHRoYXQgYXJlXG4gKiB2YWxpZCBwYXJlbnQgbG9va3VwcyBmb3IgdGhhdCBpbnN0YW5jZS4gUm9vdCB0eXBlcyBwcm9kdWNlIGBuZXZlcmAgYmVjYXVzZVxuICogdGhleSBoYXZlIG5vIHBhcmVudCBwYXRoLlxuICovXG5leHBvcnQgdHlwZSBQYXJlbnRQYXRoT2ZJbnN0YW5jZTxUIGV4dGVuZHMgb2JqZWN0PiA9IHtcblx0W0sgaW4gTGl0ZXJhbEtleXNPZjxUeXBlUmVnaXN0cnk+XTogVHlwZVJlZ2lzdHJ5W0tdIGV4dGVuZHMgbmV3ICguLi5hcmdzOiB1bmtub3duW10pID0+IGluZmVyIFJcblx0XHQ/IFQgZXh0ZW5kcyBSID8gQWxsUGFyZW50UHJlZml4ZXM8Sz4gOiBuZXZlclxuXHRcdDogbmV2ZXJcbn1bTGl0ZXJhbEtleXNPZjxUeXBlUmVnaXN0cnk+XTtcblxuLy8gSG9vayB0eXBlc1xuZXhwb3J0IHR5cGUgaG9va3NUeXBlcyA9ICdwcmVDcmVhdGlvbicgfCAncG9zdENyZWF0aW9uJyB8ICdjcmVhdGlvbkVycm9yJztcblxuLy8gSG9vayBvcHRpb25zIHBhc3NlZCB0byBob29rIGNhbGxiYWNrc1xuLy8gUCA9IHBhcmVudCAvIGV4aXN0ZW50IGluc3RhbmNlIChwcm90bylcbi8vIFQgPSBjaGlsZCAvIGluaGVyaXRlZCBpbnN0YW5jZSAodHlwZSBiZWluZyBjcmVhdGVkKVxuZXhwb3J0IHR5cGUgaG9va3NPcHRzPFAgPSBvYmplY3QsIFQgPSBQPiA9IHtcblx0VHlwZU5hbWU6IHN0cmluZztcblx0dHlwZTogVHlwZURlZjtcblx0YXJnczogdW5rbm93bltdO1xuXHRleGlzdGVudEluc3RhbmNlOiBQO1xuXHRpbmhlcml0ZWRJbnN0YW5jZT86IFQ7XG5cdGNyZWF0b3I/OiB7IHRocm93TW9kaWZpY2F0aW9uRXJyb3IoZXJyb3I6IEVycm9yKTogdm9pZCB9O1xufTtcblxuLy8gQ2FsbGJhY2sgcGFzc2VkIGludG8gTW9kaWZpY2F0aW9uQ29uc3RydWN0b3IgdG8gYXR0YWNoIGludGVybmFsIHByb3BzIHRvIHRoZSBwcm90b3R5cGVcbmV4cG9ydCBpbnRlcmZhY2UgQWRkUHJvcHNDYWxsYmFjayBleHRlbmRzIENhbGxhYmxlRnVuY3Rpb24ge1xuXHQocHJvdG86IG9iamVjdCk6IHZvaWQ7XG59XG5cbi8vIE1vZGlmaWNhdGlvbkNvbnN0cnVjdG9yOiB3aXJlcyBwcm90b3R5cGUgY2hhaW4gZHVyaW5nIGluc3RhbmNlIGNyZWF0aW9uXG5leHBvcnQgaW50ZXJmYWNlIE1vZGlmaWNhdGlvbkNvbnN0cnVjdG9yIGV4dGVuZHMgQ2FsbGFibGVGdW5jdGlvbiB7XG5cdChcblx0XHR0aGlzOiBvYmplY3QsXG5cdFx0TW9kaWZpY2F0b3JUeXBlOiBNbmVtb25pY2FDb25zdHJ1Y3Rvcixcblx0XHRNb2RpZmljYXRvclR5cGVQcm90b3R5cGU6IG9iamVjdCxcblx0XHRfYWRkUHJvcHM6IEFkZFByb3BzQ2FsbGJhY2tcblx0KTogTW5lbW9uaWNhQ29uc3RydWN0b3I7XG59XG5cbi8vIEZhY3RvcnkgdGhhdCByZXR1cm5zIGEgTW9kaWZpY2F0aW9uQ29uc3RydWN0b3IgKHVzZWQgaW4gY29uc3RydWN0b3JPcHRpb25zKVxuZXhwb3J0IGludGVyZmFjZSBNb2RpZmljYXRpb25Db25zdHJ1Y3RvckZhY3RvcnkgZXh0ZW5kcyBDYWxsYWJsZUZ1bmN0aW9uIHtcblx0KCk6IE1vZGlmaWNhdGlvbkNvbnN0cnVjdG9yO1xufVxuXG4vLyBGYWN0b3J5IHRoYXQgcmV0dXJucyBhIE1uZW1vbmljYUNvbnN0cnVjdG9yIChzdG9yZWQgaW4gVHlwZURlZi5jb25zdHJ1Y3RIYW5kbGVyKVxuZXhwb3J0IGludGVyZmFjZSBNbmVtb25pY2FDb25zdHJ1Y3RvckZhY3RvcnkgZXh0ZW5kcyBDYWxsYWJsZUZ1bmN0aW9uIHtcblx0KCk6IE1uZW1vbmljYUNvbnN0cnVjdG9yO1xufVxuXG4vLyBNYXJrcyB0aGUgdG9wIG9mIGEgY2FwdHVyZWQgc3RhY2sgdHJhY2UgKHBhc3NlZCB0byBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSBhcyBjb25zdHJ1Y3Rvck9wdClcbmV4cG9ydCBpbnRlcmZhY2UgU3RhY2tCb3VuZGFyeSBleHRlbmRzIENhbGxhYmxlRnVuY3Rpb24ge31cblxuLy8gQSB3cmFwcGFibGUgdXRpbGl0eSBtZXRob2Qg4oCUIGFueSBjYWxsYWJsZSB0aGF0IHdyYXBUaGlzKCkgY2FuIHByb3h5XG5leHBvcnQgaW50ZXJmYWNlIFdyYXBwYWJsZU1ldGhvZCBleHRlbmRzIENhbGxhYmxlRnVuY3Rpb24ge31cblxuLy8gQ29uc3RydWN0b3Igb3B0aW9ucyBmb3IgZGVmaW5lXG5leHBvcnQgdHlwZSBjb25zdHJ1Y3Rvck9wdGlvbnMgPSB7XG5cdC8vIGV4cGxpY2l0IGRlY2xhcmF0aW9uIHdlIHdpc2ggdXNlXG5cdC8vIGFuIG9sZCBzdHlsZSBiYXNlZCBjb25zdHJ1Y3RvcnNcblx0TW9kaWZpY2F0aW9uQ29uc3RydWN0b3I/OiBNb2RpZmljYXRpb25Db25zdHJ1Y3RvckZhY3RvcnksXG5cdC8vIHNoYWxsIG9yIG5vdCB3ZSB1c2Ugc3RyaWN0IGNoZWNraW5nXG5cdC8vIGZvciBjcmVhdGlvbiBzdWItaW5zdGFuY2VzIE9ubHkgZnJvbSBjdXJyZW50IHR5cGVcblx0Ly8gb3Igd2UgbWlnaHQgdXNlIHVwLW5lc3RlZCBzdWItaW5zdGFuY2VzIGZyb20gY2hhaW5cblx0c3RyaWN0Q2hhaW4/OiBib29sZWFuLFxuXHQvLyBzaG91bGQgd2UgdXNlIGZvcmNlZCBlcnJvcnMgY2hlY2tpbmdcblx0Ly8gdG8gbWFrZSBhbGwgaW5oZXJpdGVkIHR5cGVzIGVycm9yZWRcblx0Ly8gaWYgdGhlcmUgaXMgYW4gZXJyb3Igc29tZXdoZXJlIGluIGNoYWluXG5cdGJsb2NrRXJyb3JzPzogYm9vbGVhbixcblx0Ly8gaWYgaXQgaXMgbmVjZXNzYXJ5IHRvIGNvbGxlY3Qgc3RhY2tcblx0Ly8gYXMgYSBfX3N0YWNrX18gcHJvdG90eXBlIHByb3BlcnR5XG5cdC8vIGR1cmluZyB0aGUgcHJvY2VzcyBvZiBpbnN0YW5jZSBjcmVhdGlvblxuXHRzdWJtaXRTdGFjaz86IGJvb2xlYW4sXG5cdC8vIGF3YWl0IG5ldyBDb25zdHJ1Y3RvcigpXG5cdC8vIG11c3QgcmV0dXJuIHZhbHVlXG5cdGF3YWl0UmV0dXJuPzogYm9vbGVhbixcblx0Ly8gRm9yY2UgY2xhc3MgbW9kZSAoYXV0by1kZXRlY3RlZCBieSBkZWZhdWx0KVxuXHRhc0NsYXNzPzogYm9vbGVhbixcbn07XG5cbi8vIFN1YnR5cGVzIG1hcCAtIHJlcHJlc2VudHMgdGhlIHN1YnR5cGVzIHByb3BlcnR5XG5leHBvcnQgdHlwZSBTdWJ0eXBlc01hcCA9IE1hcDxzdHJpbmcsIFR5cGVDbGFzcz47XG5cbi8vIFR5cGUgZGVmaW5pdGlvbiBvYmplY3QgKGludGVybmFsIHByb3BlcnRpZXMpXG5leHBvcnQgdHlwZSBUeXBlRGVmID0ge1xuXHRUeXBlTmFtZTogc3RyaW5nO1xuXHRwcm90bzogb2JqZWN0O1xuXHRpc1N1YlR5cGU6IGJvb2xlYW47XG5cdHN1YnR5cGVzOiBTdWJ0eXBlc01hcDtcblx0Y29sbGVjdGlvbjogQ29sbGVjdGlvbkRlZjtcblx0Y29uZmlnOiBjb25zdHJ1Y3Rvck9wdGlvbnM7XG5cdHBhcmVudFR5cGU/OiBUeXBlRGVmO1xuXHRjb25zdHJ1Y3RIYW5kbGVyOiBNbmVtb25pY2FDb25zdHJ1Y3RvckZhY3Rvcnk7XG5cdHRpdGxlOiBzdHJpbmc7XG5cdGhvb2tzOiBSZWNvcmQ8c3RyaW5nLCBTZXQ8aG9vaz4+O1xuXHRpbnZva2VIb29rOiAoaG9va1R5cGU6IGhvb2tzVHlwZXMsIG9wdHM6IGhvb2tzT3B0cykgPT4gU2V0PHVua25vd24+O1xuXHRwcm90b3R5cGU6IHVua25vd247XG5cdHN0YWNrPzogc3RyaW5nO1xuXHRbU3ltYm9sLmhhc0luc3RhbmNlXTogKGluc3RhbmNlOiBvYmplY3QpID0+IGJvb2xlYW47XG59O1xuXG4vLyBDb2xsZWN0aW9uIGRlZmluaXRpb25cbmV4cG9ydCB0eXBlIENvbGxlY3Rpb25EZWYgPSBIb29rYWJsZSAmIHtcblx0ZGVmaW5lOiBUeXBlQWJzb3JiZXI7XG5cdGxvb2t1cDogVHlwZUxvb2t1cDtcblx0c3VidHlwZXM6IFN1YnR5cGVzTWFwO1xuXHRba2V5OiBzdHJpbmddOiB1bmtub3duO1xufTtcblxuLy8gVHlwZSBsb29rdXAgZnVuY3Rpb24gdHlwZTogbWF5IGhhdmUgYXVnbWVudGF0aW9uIGJ5IFRhY3RpY2EgcmUtZGVmaW5pdGlvblxuZXhwb3J0IGludGVyZmFjZSBUeXBlTG9va3VwIGV4dGVuZHMgQ2FsbGFibGVGdW5jdGlvbiB7XG5cdCh0aGlzOiBNYXA8c3RyaW5nLCB1bmtub3duPiwgVHlwZU5lc3RlZFBhdGg6IHN0cmluZyk6IFR5cGVDbGFzcyB8IHVuZGVmaW5lZDtcbn1cblxuLy8gU3BlY2lmaWNhdGlvbiBmb3IgY2hhaW5lZCBzdWJ0eXBlIGNyZWF0aW9uIHdpdGggLnRoZW4oKVxuZXhwb3J0IGludGVyZmFjZSBUaGVuU3BlYyB7XG5cdHN1YnR5cGU6IG9iamVjdDtcblx0YXJnczogdW5rbm93bltdO1xuXHRuYW1lPzogc3RyaW5nO1xufVxuXG4vLyBDb250ZXh0IG9iamVjdCBwYXNzZWQgdGhyb3VnaCB0aGUgSW5zdGFuY2VDcmVhdG9yIHBpcGVsaW5lXG5leHBvcnQgaW50ZXJmYWNlIEluc3RhbmNlQ3JlYXRvckNvbnRleHQge1xuXHR0eXBlOiBUeXBlRGVmO1xuXHRUeXBlTmFtZTogc3RyaW5nO1xuXHRleGlzdGVudEluc3RhbmNlOiBvYmplY3Q7XG5cdGFyZ3M6IHVua25vd25bXTtcblx0TW9kaWZpY2F0aW9uQ29uc3RydWN0b3I6IE1vZGlmaWNhdGlvbkNvbnN0cnVjdG9yO1xuXHRNb2RpZmljYXRvclR5cGU6IE1uZW1vbmljYUNvbnN0cnVjdG9yO1xuXHRJbnN0YW5jZU1vZGlmaWNhdG9yOiBNbmVtb25pY2FDb25zdHJ1Y3Rvcjtcblx0aW5oZXJpdGVkSW5zdGFuY2U6IG9iamVjdCB8IFByb21pc2U8b2JqZWN0Pjtcblx0Y29uZmlnOiBjb25zdHJ1Y3Rvck9wdGlvbnM7XG5cdHByb3RvOiBvYmplY3Q7XG5cdF9fcHJvdG9fcHJvdG9fXz86IG9iamVjdDtcblx0c3RhY2s/OiBzdHJpbmdbXTtcblxuXHRnZXRFeGlzdGVudEFzeW5jU3RhY2soZXhpc3RlbnRJbnN0YW5jZTogb2JqZWN0KTogdW5rbm93bjtcblx0cG9zdFByb2Nlc3NpbmcoY29udGludWF0aW9uT2Y/OiBUeXBlRGVmKTogdm9pZDtcblx0bWFrZUF3YWl0ZXIodHlwZTogVHlwZURlZiwgdGhlbj86IFRoZW5TcGVjKTogUHJvbWlzZTxvYmplY3Q+O1xuXHRhZGRUaGVuKHRoZW46IFRoZW5TcGVjKTogdm9pZDtcblx0aW52b2tlUHJlSG9va3MoKTogdm9pZDtcblx0aW52b2tlUG9zdEhvb2tzKCk6IHsgdHlwZTogU2V0PHVua25vd24+OyBjb2xsZWN0aW9uOiBTZXQ8dW5rbm93bj4gfTtcblx0dGhyb3dNb2RpZmljYXRpb25FcnJvcihlcnJvcjogTW5lbW9uaWNhRXJyb3IpOiB2b2lkO1xufVxuXG4vKipcbiAqIFByb3RvIG1lcmdlIHR5cGUgLSBjb21iaW5lcyBwYXJlbnQgYW5kIGNoaWxkIHR5cGVzIHdpdGhvdXQgcHJvcGVydHkgY29uZmxpY3RzLlxuICpcbiAqIFdoZW4gYSBzdWJ0eXBlIGlzIGRlZmluZWQgZnJvbSBhIHBhcmVudCBpbnN0YW5jZSwgd2Ugd2FudCB0aGUgY2hpbGQgcHJvcGVydGllc1xuICogdG8gdGFrZSBwcmVjZWRlbmNlLiBgRXhjbHVkZTxrZXlvZiBQLCBrZXlvZiBUPmAgcmVtb3ZlcyBvdmVybGFwcGluZyBrZXlzIGZyb20gUCxcbiAqIHNvIGBQaWNrPFAsIC4uLj5gIG9ubHkgYnJpbmdzIGluIHBhcmVudCBwcm9wZXJ0aWVzIHRoYXQgZG9uJ3QgY2xhc2ggd2l0aCBjaGlsZC5cbiAqXG4gKiBSZXN1bHQ6IGNoaWxkIFQgZ2V0cyBhbGwgaXRzIG93biBwcm9wcywgcGx1cyBwYXJlbnQncyBub24tb3ZlcmxhcHBpbmcgcHJvcHMuXG4gKi9cbmV4cG9ydCB0eXBlIFByb3RvPFAgZXh0ZW5kcyBvYmplY3QsIFQgZXh0ZW5kcyBvYmplY3Q+ID0gVCAmIFBpY2s8UCwgRXhjbHVkZTxrZXlvZiBQLCBrZXlvZiBUPj47XG5cblxuLy8gZXhwb3J0IHR5cGUgUHJvdG9GbGF0PFxuLy8gXHRQIGV4dGVuZHMgb2JqZWN0LFxuLy8gXHRUIGV4dGVuZHMgb2JqZWN0LFxuLy8gXHRGIGV4dGVuZHMgUHJvdG88UCwgVD4gPSBQcm90bzxQLCBUPlxuLy8gPiA9IHsgW2tleSBpbiBrZXlvZiBGXTogRltrZXldfSA7XG5cbmV4cG9ydCB0eXBlIFByb3RvRmxhdDxcblx0UCBleHRlbmRzIG9iamVjdCxcblx0VCBleHRlbmRzIG9iamVjdCxcblx0TCBleHRlbmRzIEV4Y2x1ZGU8a2V5b2YgUCwga2V5b2YgVD4gPSBFeGNsdWRlPGtleW9mIFAsIGtleW9mIFQ+LFxuPiA9IHtcbiAgICBba2V5IGluIGtleW9mIFRdOiBUW2tleV07XG59ICYge1xuXHRba2V5IGluIExdOiBQW2tleV07XG59O1xuXG4vLyBNbmVtb25pY2EgaW5zdGFuY2UgbWV0aG9kIGtleXMuIFRoZXNlIGFyZSBmaWx0ZXJlZCBvdXQgb2YgZXh0cmFjdGVkL21lcmdlZFxuLy8gZmllbGQtb25seSB2aWV3cyBiZWNhdXNlIHRoZXkgYmVsb25nIHRvIHRoZSBwcm90b3R5cGUsIG5vdCB0byB0aGUgdXNlcidzXG4vLyBlbnVtZXJhYmxlIGRhdGEgcHJvcGVydGllcy5cbmV4cG9ydCB0eXBlIE1uZW1vbmljYUluc3RhbmNlTWV0aG9kS2V5cyA9XG5cdCdleHRyYWN0JyB8ICdwaWNrJyB8ICdwYXJlbnQnIHwgJ2Nsb25lJyB8ICdmb3JrJyB8ICdleGNlcHRpb24nIHwgJ3NpYmxpbmcnO1xuXG5leHBvcnQgdHlwZSBGbGF0dGVuPEY+ID0geyBba2V5IGluIGtleW9mIEZdOiBGW2tleV0gfVxuXG4vLyBFeHRyYWN0ZWQ8VD46IHRoZSBzaGFwZSByZXR1cm5lZCBieSB1dGlscy5leHRyYWN0KGluc3RhbmNlKS5cbi8vIEl0IGNvbnRhaW5zIHRoZSBlbnVtZXJhYmxlIHN0cmluZy1rZXllZCB1c2VyIHByb3BlcnRpZXMgb2YgdGhlIGluc3RhbmNlLFxuLy8gb21pdHRpbmcgTW5lbW9uaWNhSW5zdGFuY2UgbWV0aG9kcyAoZXh0cmFjdCwgcGljaywgcGFyZW50LCBjbG9uZSwgZm9yayxcbi8vIGV4Y2VwdGlvbiwgc2libGluZykuIE9wdGlvbmFsaXR5IGlzIHByZXNlcnZlZCBmcm9tIHRoZSBzb3VyY2UgdHlwZS5cbi8vIFRoZSBgJiB7fWAgdHJpY2sgZm9yY2VzIFR5cGVTY3JpcHQgdG8gZXhwYW5kIHRoZSBhbGlhcyBpbiBob3ZlciB0b29sdGlwc1xuLy8gc28gaXQgcmVuZGVycyBhcyBhIHBsYWluIG9iamVjdCBsaXRlcmFsIGluc3RlYWQgb2YgXCJFeHRyYWN0ZWQ8ey4uLn0+XCIuXG5leHBvcnQgdHlwZSBFeHRyYWN0ZWQ8VCBleHRlbmRzIG9iamVjdD4gPSB7XG5cdFtLIGluIGtleW9mIFQgYXMgSyBleHRlbmRzIHN0cmluZyA/IChLIGV4dGVuZHMgTW5lbW9uaWNhSW5zdGFuY2VNZXRob2RLZXlzID8gbmV2ZXIgOiBLKSA6IG5ldmVyXTogVFtLXTtcbn0gJiB7fTtcblxuLy8gUGFyc2VkPFQ+OiB0aGUgc2hhcGUgcmV0dXJuZWQgYnkgdXRpbHMucGFyc2UoaW5zdGFuY2UpLlxuLy8gSXQgaXMgYSBvbmUtbGV2ZWwgc25hcHNob3Qgb2YgdGhlIGluc3RhbmNlJ3MgcHJvdG90eXBlIGNoYWluLlxuLy8gYHByb3BzYCBjb250YWlucyB0aGUgaW5zdGFuY2UncyBlbnVtZXJhYmxlIHVzZXIgcHJvcGVydGllcztcbi8vIGBqb2ludGAgY29udGFpbnMgZW51bWVyYWJsZSBwcm9wZXJ0aWVzIGNvcGllZCBmcm9tIHRoZSBpbW1lZGlhdGUgcHJvdG90eXBlO1xuLy8gYHBhcmVudGAgaXMgdGhlIG5leHQgbGluayB1cCB0aGUgY2hhaW4gKGN1cnJlbnRseSBub3QgcmVjdXJzaXZlbHkgcGFyc2VkKS5cbmV4cG9ydCB0eXBlIFBhcnNlZDxUIGV4dGVuZHMgb2JqZWN0PiA9IHtcblx0bmFtZTogc3RyaW5nO1xuXHRwcm9wczogRXh0cmFjdGVkPFQ+O1xuXHRzZWxmOiBUO1xuXHRwcm90bzogb2JqZWN0O1xuXHRqb2ludDogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cdHBhcmVudDogb2JqZWN0IHwgdW5kZWZpbmVkO1xufTtcblxuLy8gU2libGluZyB0eXBlIGFjY2Vzc29yXG5leHBvcnQgaW50ZXJmYWNlIFNpYmxpbmdBY2Nlc3NvciB7XG5cdChTaWJsaW5nVHlwZU5hbWU6IHN0cmluZyk6IFR5cGVDbGFzcyB8IHVuZGVmaW5lZDtcblx0W2tleTogc3RyaW5nXTogVHlwZUNsYXNzIHwgdW5kZWZpbmVkO1xufVxuXG4vLyBNbmVtb25pY2EgaW5zdGFuY2UgbWV0aG9kcyBpbnRlcmZhY2UgKG9wdC1pbikuXG4vLyBUaGVzZSBtZXRob2RzIHVzZWQgdG8gYmUgYXV0by1pbmplY3RlZCBvbnRvIGV2ZXJ5IGluc3RhbmNlLiBUaGV5IGFyZSBub3dcbi8vIGF2YWlsYWJsZSBvbmx5IHdoZW4gYSB0eXBlIGV4cGxpY2l0bHkgYWRkcyB0aGVtIHRvIGl0cyBwcm90b3R5cGUuXG4vLyBVc2VycyBjYW4gc3RpbGwgdXNlIHRoaXMgaW50ZXJmYWNlIHRvIHR5cGUgdGhlaXIgb3duIHJvb3QtbGV2ZWwgaGVscGVycy5cbmV4cG9ydCBpbnRlcmZhY2UgTW5lbW9uaWNhSW5zdGFuY2U8VCBleHRlbmRzIG9iamVjdCA9IG9iamVjdD4ge1xuXHRleHRyYWN0KCk6IEV4dHJhY3RlZDxUPjtcblx0cGljazxLIGV4dGVuZHMga2V5b2YgVD4oLi4ua2V5czogKEsgfCBLW10pW10pOiB7IFtQIGluIEtdOiBUW1BdIH0gJiB7fTtcblx0cGljayguLi5rZXlzOiBzdHJpbmdbXSk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXHRwYXJlbnQoKTogb2JqZWN0IHwgdW5kZWZpbmVkO1xuXHRwYXJlbnQ8SyBleHRlbmRzIFBhcmVudFBhdGhPZkluc3RhbmNlPHRoaXM+ICYgc3RyaW5nPihcblx0XHRjb25zdHJ1Y3Rvckxvb2t1cFBhdGg6IEtcblx0KTogSW5zdGFuY2VPZlR5cGVSZWdpc3RyeTxLPiB8IHVuZGVmaW5lZDtcblx0cGFyZW50KGNvbnN0cnVjdG9yTG9va3VwUGF0aDogc3RyaW5nKTogb2JqZWN0IHwgdW5kZWZpbmVkO1xuXHRyZWFkb25seSBjbG9uZTogdGhpcztcblx0Zm9yayguLi5mb3JrQXJnczogdW5rbm93bltdKTogdGhpcztcblx0ZXhjZXB0aW9uKGVycm9yOiBFcnJvciwgLi4uYXJnczogdW5rbm93bltdKTogRXJyb3I7XG5cdHJlYWRvbmx5IHNpYmxpbmc6IFNpYmxpbmdBY2Nlc3Nvcjtcbn1cblxuLy8gSW5zdGFuY2UgcHJvcGVydGllcyBmb3IgX19zZWxmX18gcmVmZXJlbmNlXG4vLyBUaGlzIG1lcmdlcyBpbnRlcm5hbCBwcm9wcyB3aXRoIHRoZSBpbnN0YW5jZSBtZXRob2RzXG4vLyBJbnRlcm5hbCBpbnN0YW5jZSBwcm9wZXJ0aWVzIChub24tZW51bWVyYWJsZSlcbi8vIFRoZXNlIGFyZSBhbHdheXMgcHJlc2VudCBvbiBpbnN0YW5jZXMgYnV0IGFjY2Vzc2VkIHZpYSBnZXRQcm9wcy9zZXRQcm9wc1xuZXhwb3J0IHR5cGUgSW5zdGFuY2VJbnRlcm5hbFByb3BzID0ge1xuXHRfX3Byb3RvX3Byb3RvX186IG9iamVjdDtcblx0X19hcmdzX186IHVua25vd25bXTtcblx0X19jb2xsZWN0aW9uX186IENvbGxlY3Rpb25EZWY7XG5cdF9fc3VidHlwZXNfXzogTWFwPHN0cmluZywgb2JqZWN0Pjtcblx0X190eXBlX186IFR5cGVEZWY7XG5cdF9fcGFyZW50X186IG9iamVjdDtcblx0X19zdGFja19fPzogc3RyaW5nO1xuXHRfX2NyZWF0b3JfXzogSW5zdGFuY2VDcmVhdG9yQ29udGV4dDtcblx0X190aW1lc3RhbXBfXzogbnVtYmVyO1xufTtcblxuLy8gQ29tYmluZWQgUHJvcHMgdHlwZSBmb3IgaW50ZXJuYWwgdXNlIGluc2lkZSAuL3NyY1xuZXhwb3J0IHR5cGUgUHJvcHMgPSBJbnN0YW5jZUludGVybmFsUHJvcHMgJiB7XG5cdF9fc2VsZl9fOiBJbnN0YW5jZUludGVybmFsUHJvcHM7XG5cdFtrZXk6IHN0cmluZ106IHVua25vd247XG59O1xuXG4vLyBDb21iaW5lZCBpbnN0YW5jZSB0eXBlOiBwbGFpbiBvYmplY3Qgd2l0aCB0aGUgdXNlcidzIGZpZWxkcyBvbmx5LlxuLy8gSW5zdGFuY2UgbWV0aG9kcyAoZXh0cmFjdCwgcGljaywgZm9yaywgZXRjLikgYXJlIG5vIGxvbmdlciBhdXRvLWluamVjdGVkLlxuLy8gVGhlIGlubGluZSBtYXBwZWQgdHlwZSBpcyB1c2VkIGluc3RlYWQgb2YgdGhlIEZsYXR0ZW4gYWxpYXMgc28gdGhhdCBob3ZlclxuLy8gdG9vbHRpcHMgc2hvdyB0aGUgYWN0dWFsIGZpZWxkIG9iamVjdCBsaXRlcmFsIGZpcnN0LCBub3QgXCJGbGF0dGVuPHsuLi59PlwiLlxuZXhwb3J0IHR5cGUgSW5zdGFuY2VSZXN1bHQ8XG4gIE4gZXh0ZW5kcyBvYmplY3QsXG4+ID0geyBbSyBpbiBrZXlvZiBOXTogTltLXSB9O1xuXG4vLyBEZWZpbml0b3IgaW5zdGFuY2UgLSB0aGUgY29uc3RydWN0b3IgZnVuY3Rpb24gcmV0dXJuZWQgYnkgZGVmaW5lXG4vLyBOID0gaW5zdGFuY2UgdHlwZSAocHJvcGVydGllcyBhdmFpbGFibGUgb24gaW5zdGFuY2VzKVxuLy8gUyA9IHN1YnR5cGVzIG1hcFxuZXhwb3J0IGludGVyZmFjZSBJRGVmaW5pdG9ySW5zdGFuY2U8XG5cdE4gZXh0ZW5kcyBvYmplY3QsXG5cdFIgZXh0ZW5kcyBJbnN0YW5jZVJlc3VsdDxOPiA9IEluc3RhbmNlUmVzdWx0PE4+XG4+IHtcblxuXHRUeXBlTmFtZTogc3RyaW5nO1xuXHRwcm90b3R5cGU6IE47XG5cblx0XG5cdC8vIHRoZSBsaW5lIGJlbG93IGRlY2xhcmVzIGEgYG5ldyAuLi5gIGludm9jYXRpb24sXG5cdC8vIHNvIG1ha2VzIGludGVyZmFjZSBjb25zdHJ1Y3RpYmxlXG5cdC8vIG5ldyguLi5hcmdzOiB1bmtub3duW10pOiB7IFtrZXkgaW4ga2V5b2YgUl06IFJba2V5XSB9O1xuXHRuZXcoLi4uYXJnczogdW5rbm93bltdKTogUjtcblxuXHRcblx0Ly8gVE9ETzogbmVlZCBjaGVjayBpZiBsaW5lIGJlbG93IHdvcmtzXG5cdC8vIGFsc28gVFMgaGludGluZyBjaGVjayBhcyB3ZWxsXG5cdC8vIHRoZSBsaW5lIGJlbG93IHNob3VsZCBtYWtlIGlzIGEgQGRlY29yYXRlIGRlY29yYXRvciB3b3JraW5nXG5cdCguLi5hcmdzOiB1bmtub3duW10pOiBJRGVmaW5pdG9ySW5zdGFuY2U8Uj47XG5cblxuXHQvLyBEZWZpbmUgbWV0aG9kIHRoYXQgY29tYmluZXMgcGFyZW50IE4gd2l0aCBuZXcgdHlwZSBUIHVzaW5nIFByb3RvXG5cdGRlZmluZTxcblx0XHRUIGV4dGVuZHMgb2JqZWN0LFxuXG5cdFx0Ly8gdGhpcyB3aWxsIGJlIGluc3RhbmNlIHR5cGUgZm9yIHN1Yi10eXBlICEhIVxuXHRcdC8vIEYgZXh0ZW5kcyBGbGF0dGVuPFByb3RvPE4sIFQ+PlxuXHRcdEYgZXh0ZW5kcyBQcm90bzxOLCBUPlxuXHQ+KFxuXHRcdFR5cGVPclR5cGVOYW1lOiBzdHJpbmcgfCBDYWxsYWJsZUZ1bmN0aW9uLFxuXHRcdGNvbnN0cnVjdEhhbmRsZXJPckNvbmZpZz86IElERUY8VD4gfCBvYmplY3QgfCBib29sZWFuIHwgQ2FsbGFibGVGdW5jdGlvbixcblx0XHRjb25maWdPclVuZGVmaW5lZD86IGNvbnN0cnVjdG9yT3B0aW9ucyB8IENhbGxhYmxlRnVuY3Rpb24gfCBib29sZWFuXG5cdCk6IElEZWZpbml0b3JJbnN0YW5jZTxGPjtcblx0XG5cdGxvb2t1cDogVHlwZUxvb2t1cDtcblx0XG5cdHJlZ2lzdGVySG9vayhob29rVHlwZTogaG9va3NUeXBlcywgY2I6IGhvb2spOiB2b2lkO1xuXHRcblx0XG5cdHN1YnR5cGVzOiBTdWJ0eXBlc01hcDtcblx0XG5cdC8vIEludGVybmFsIHByb3BlcnRpZXMgYWNjZXNzZWQgYnkgdGVzdHNcblx0X190eXBlX18/OiBUeXBlRGVmO1xuXHRjb2xsZWN0aW9uPzogQ29sbGVjdGlvbkRlZjtcblxuXHQvKlxuXHQvLyBBbGxvdyBkeW5hbWljIHByb3BlcnR5IGFjY2VzcyBmb3Igc3VidHlwZXNcblx0W2tleTogc3RyaW5nXTogdW5rbm93bjtcblx0Ki9cbn1cblxuLy8gVHlwZSBhYnNvcmJlciBmdW5jdGlvbiB0eXBlIC0gdXNlZCBmb3IgZGVmaW5pbmcgc3VidHlwZXNcbi8vIFN1cHBvcnRzIG11bHRpcGxlIGNhbGxpbmcgY29udmVudGlvbnM6XG4vLyAxLiBNb2Rlcm46IGRlZmluZShUeXBlTmFtZSwgY29uc3RydWN0SGFuZGxlciwgY29uZmlnPylcbi8vIDIuIExlZ2FjeTogZGVmaW5lKGNvbnN0cnVjdEhhbmRsZXIsIGNvbmZpZz8pIC0gVHlwZU5hbWUgZnJvbSBjb25zdHJ1Y3RvciBuYW1lXG4vLyAzLiBOZXN0ZWQ6IHBhcmVudFR5cGUuZGVmaW5lKFR5cGVOYW1lLCBjb25zdHJ1Y3RIYW5kbGVyLCBjb25maWc/KVxuZXhwb3J0IGludGVyZmFjZSBUeXBlQWJzb3JiZXIgZXh0ZW5kcyBDYWxsYWJsZUZ1bmN0aW9uIHtcblx0PFQgZXh0ZW5kcyBvYmplY3Q+KFxuXHRcdHRoaXM6IHVua25vd24sXG5cdFx0VHlwZU9yVHlwZU5hbWU6IHN0cmluZyB8IENhbGxhYmxlRnVuY3Rpb24sXG5cdFx0Y29uc3RydWN0SGFuZGxlck9yQ29uZmlnPzogSURFRjxUPiB8IG9iamVjdCB8IGJvb2xlYW4gfCBDYWxsYWJsZUZ1bmN0aW9uLFxuXHRcdGNvbmZpZ09yVW5kZWZpbmVkPzogY29uc3RydWN0b3JPcHRpb25zIHwgQ2FsbGFibGVGdW5jdGlvbiB8IGJvb2xlYW5cblx0KTogSURlZmluaXRvckluc3RhbmNlPFQ+O1xufVxuXG4vLyBUeXBlc0NvbGxlY3Rpb24gaW50ZXJmYWNlIGZvciBjcmVhdGVUeXBlc0NvbGxlY3Rpb25cbi8vIFRoaXMgcmVwcmVzZW50cyB0aGUgYWN0dWFsIHJldHVybiB0eXBlIG9mIGNyZWF0ZVR5cGVzQ29sbGVjdGlvblxuZXhwb3J0IGludGVyZmFjZSBUeXBlc0NvbGxlY3Rpb24gZXh0ZW5kcyBIb29rYWJsZSB7XG5cdGRlZmluZTogVHlwZUFic29yYmVyO1xuXHRsb29rdXA6IFR5cGVMb29rdXA7XG5cdHN1YnR5cGVzOiBTdWJ0eXBlc01hcDtcblx0W2tleTogc3RyaW5nXTogdW5rbm93bjtcbn1cblxuLy8gU2hhcmVkIGludGVyZmFjZSBmb3Igb2JqZWN0cyB0aGF0IHN1cHBvcnQgaG9va3MgKFR5cGVEZWYgYW5kIENvbGxlY3Rpb25EZWYpXG5leHBvcnQgaW50ZXJmYWNlIEhvb2thYmxlIHtcblx0aG9va3M6IFJlY29yZDxzdHJpbmcsIFNldDxob29rPj47XG5cdGludm9rZUhvb2soaG9va1R5cGU6IGhvb2tzVHlwZXMsIG9wdHM6IGhvb2tzT3B0cyk6IFNldDx1bmtub3duPjtcblx0cmVnaXN0ZXJIb29rKGhvb2tUeXBlOiBob29rc1R5cGVzLCBjYjogaG9vayk6IHZvaWQ7XG5cdHJlZ2lzdGVyRmxvd0NoZWNrZXIoY2I6IChvcHRzOiBvYmplY3QpID0+IHVua25vd24pOiB2b2lkO1xufVxuXG4vLyBjcmVhdGVUeXBlc0NvbGxlY3Rpb24gZnVuY3Rpb24gdHlwZVxuZXhwb3J0IHR5cGUgQ3JlYXRlVHlwZXNDb2xsZWN0aW9uRnVuY3Rpb24gPSAoY29uZmlnPzogY29uc3RydWN0b3JPcHRpb25zKSA9PiBUeXBlc0NvbGxlY3Rpb247XG5cbi8vIFR5cGUgY2xhc3MgLSBiYXNlIHR5cGUgY29uc3RydWN0b3JcbmV4cG9ydCB0eXBlIFR5cGVDbGFzcyA9IElEZWZpbml0b3JJbnN0YW5jZTxvYmplY3Q+O1xuXG4vLyBNbmVtb25pY2EgY29uc3RydWN0b3Ig4oCUIHRoZSBjb25zdHJ1Y3RvciBmdW5jdGlvbiByZXR1cm5lZCBieSBjb25zdHJ1Y3RIYW5kbGVyKClcbi8vIEhhcyBTeW1ib2xDb25zdHJ1Y3Rvck5hbWUgYXR0YWNoZWQgYW5kIGlzIGJvdGggbmV3YWJsZSBhbmQgY2FsbGFibGVcbmV4cG9ydCBpbnRlcmZhY2UgTW5lbW9uaWNhQ29uc3RydWN0b3IgZXh0ZW5kcyBOZXdhYmxlRnVuY3Rpb24ge1xuXHRuZXcgKC4uLmFyZ3M6IHVua25vd25bXSk6IG9iamVjdDtcblx0KHRoaXM6IG9iamVjdCwgLi4uYXJnczogdW5rbm93bltdKTogdW5rbm93bjtcblx0W2tleTogc3ltYm9sXTogdW5rbm93bjtcbn1cblxuLy8gVHlwZSBkZXNjcmlwdG9yIGluc3RhbmNlIOKAlCBpbnRlcm5hbCBzaGFwZSBvZiBUeXBlRGVzY3JpcHRvciBvYmplY3RzXG5leHBvcnQgaW50ZXJmYWNlIFR5cGVEZXNjcmlwdG9yRGVmaW5lIGV4dGVuZHMgQ2FsbGFibGVGdW5jdGlvbiB7XG5cdChcblx0XHRUeXBlT3JUeXBlTmFtZTogc3RyaW5nIHwgQ2FsbGFibGVGdW5jdGlvbixcblx0XHRjb25zdHJ1Y3RIYW5kbGVyT3JDb25maWc/OiBDYWxsYWJsZUZ1bmN0aW9uIHwgb2JqZWN0LFxuXHRcdGNvbmZpZz86IG9iamVjdFxuXHQpOiBUeXBlQ2xhc3M7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHlwZURlc2NyaXB0b3JMb29rdXAgZXh0ZW5kcyBDYWxsYWJsZUZ1bmN0aW9uIHtcblx0KFR5cGVOZXN0ZWRQYXRoOiBzdHJpbmcpOiBUeXBlQ2xhc3MgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCB0eXBlIFR5cGVEZXNjcmlwdG9ySW5zdGFuY2UgPSB7XG5cdGRlZmluZTogVHlwZURlc2NyaXB0b3JEZWZpbmU7XG5cdGxvb2t1cDogVHlwZURlc2NyaXB0b3JMb29rdXA7XG5cdHN1YnR5cGVzOiBNYXA8c3RyaW5nLCBvYmplY3Q+O1xuXHRUeXBlTmFtZTogc3RyaW5nO1xufTtcblxuLy8gQ29uc3RydWN0b3IgdHlwZSBmb3IgZGVjb3JhdGUgZnVuY3Rpb25cbmV4cG9ydCB0eXBlIENvbnN0cnVjdG9yPFQgPSBvYmplY3Q+ID0gbmV3ICguLi5hcmdzOiB1bmtub3duW10pID0+IFQ7XG5cbi8vIERlY29yYXRlZCBjbGFzcyB0eXBlIC0gaW5jbHVkZXMgY2FsbCBzaWduYXR1cmUgZm9yIGRlY29yYXRvciBwYXR0ZXJuXG5leHBvcnQgdHlwZSBEZWNvcmF0ZWRDbGFzczxUIGV4dGVuZHMgQ29uc3RydWN0b3I8b2JqZWN0Pj4gPVxuXHRUICZcblx0KDxVIGV4dGVuZHMgQ29uc3RydWN0b3I8b2JqZWN0Pj4odGFyZ2V0OiBVKSA9PiBEZWNvcmF0ZWRDbGFzczxVPikgJiB7XG5cdFx0ZGVmaW5lOiBUeXBlQWJzb3JiZXI7XG5cdFx0cmVnaXN0ZXJIb29rKGhvb2tUeXBlOiBob29rc1R5cGVzLCBjYjogaG9vayk6IHZvaWQ7XG5cdFx0bG9va3VwOiBUeXBlTG9va3VwO1xuXHRcdFR5cGVOYW1lOiBzdHJpbmc7XG5cdH07XG5cbi8vIEhlbHBlcjogbWVyZ2UgcGFyZW50IGVudGl0eSAoRSkgYW5kIGNoaWxkIGNvbnN0cnVjdG9yIGluc3RhbmNlIChUKSBpbnRvIGFcbi8vIHNpbmdsZSBmbGF0IG9iamVjdCB0eXBlLCBmaWx0ZXJpbmcgb3V0IE1uZW1vbmljYUluc3RhbmNlIG1ldGhvZCBuYW1lcy5cbi8vIFVzZWQgYnkgYXBwbHkvY2FsbC9iaW5kLlxuZXhwb3J0IHR5cGUgTWVyZ2U8RSBleHRlbmRzIG9iamVjdCwgVCBleHRlbmRzIG9iamVjdD4gPSB7XG5cdFtLIGluIGtleW9mIFQgfCBrZXlvZiBFIGFzIEsgZXh0ZW5kcyBNbmVtb25pY2FJbnN0YW5jZU1ldGhvZEtleXMgPyBuZXZlciA6IEtdOlxuXHRcdEsgZXh0ZW5kcyBrZXlvZiBUID8gVFtLXSA6IEVbSyAmIGtleW9mIEVdO1xufTtcblxuLy8gQXBwbHkvQ2FsbC9CaW5kIGZ1bmN0aW9uIHR5cGVzXG4vLyBUaGUgcmV0dXJuIHR5cGUgbWVyZ2VzIHRoZSBwYXJlbnQgZW50aXR5IGZpZWxkcyB3aXRoIHRoZSBjaGlsZCBjb25zdHJ1Y3RvclxuLy8gZmllbGRzIChmaWx0ZXJpbmcgb3V0IE1uZW1vbmljYUluc3RhbmNlIG1ldGhvZCBuYW1lcyksIHByb2R1Y2luZyB0aGUgc2FtZVxuLy8gYHsgZmllbGRzIH1gIGhvdmVyIHN0eWxlIGFzIGBuZXcgVHlwZSgpYC5cbmV4cG9ydCBpbnRlcmZhY2UgQXBwbHlGdW5jdGlvbiBleHRlbmRzIENhbGxhYmxlRnVuY3Rpb24ge1xuXHQ8RSBleHRlbmRzIG9iamVjdCwgVCBleHRlbmRzIG9iamVjdD4oXG5cdFx0ZW50aXR5OiBFLFxuXHRcdENvbnN0cnVjdG9yOiBJREVGPFQ+LFxuXHRcdGFyZ3M/OiB1bmtub3duW11cblx0KTogSW5zdGFuY2VSZXN1bHQ8TWVyZ2U8RSwgVD4+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENhbGxGdW5jdGlvbiBleHRlbmRzIENhbGxhYmxlRnVuY3Rpb24ge1xuXHQ8RSBleHRlbmRzIG9iamVjdCwgVCBleHRlbmRzIG9iamVjdD4oXG5cdFx0ZW50aXR5OiBFLFxuXHRcdENvbnN0cnVjdG9yOiBJREVGPFQ+LFxuXHRcdC4uLmFyZ3M6IHVua25vd25bXVxuXHQpOiBJbnN0YW5jZVJlc3VsdDxNZXJnZTxFLCBUPj47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmluZEZ1bmN0aW9uIGV4dGVuZHMgQ2FsbGFibGVGdW5jdGlvbiB7XG5cdDxFIGV4dGVuZHMgb2JqZWN0LCBUIGV4dGVuZHMgb2JqZWN0Pihcblx0XHRlbnRpdHk6IEUsXG5cdFx0Q29uc3RydWN0b3I6IElERUY8VD5cblx0KTogKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gSW5zdGFuY2VSZXN1bHQ8TWVyZ2U8RSwgVD4+O1xufVxuXG4vLyBVdGlscyBvYmplY3QgdHlwZVxuZXhwb3J0IGludGVyZmFjZSBVdGlsc0NvbGxlY3Rpb24ge1xuXHRleHRyYWN0PFQgZXh0ZW5kcyBvYmplY3Q+KGluc3RhbmNlOiBUKTogRXh0cmFjdGVkPFQ+O1xuXHRwaWNrPFQgZXh0ZW5kcyBvYmplY3QsIEsgZXh0ZW5kcyBrZXlvZiBUPihpbnN0YW5jZTogVCwgLi4uYXJnczogKEsgfCBLW10pW10pOiB7IFtQIGluIEtdOiBUW1BdIH0gJiB7fTtcblx0cGljazxUIGV4dGVuZHMgb2JqZWN0PihpbnN0YW5jZTogVCwgLi4uYXJnczogKHN0cmluZyB8IHN0cmluZ1tdKVtdKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cdGNsb25lPFQgZXh0ZW5kcyBvYmplY3Q+KGluc3RhbmNlOiBUKTogVDtcblx0Zm9yazxUIGV4dGVuZHMgb2JqZWN0PihpbnN0YW5jZTogVCk6ICh0aGlzOiBvYmplY3QsIC4uLmZvcmtBcmdzOiB1bmtub3duW10pID0+IFQ7XG5cdHNpYmxpbmcoaW5zdGFuY2U6IG9iamVjdCk6IFNpYmxpbmdBY2Nlc3Nvcjtcblx0Y29sbGVjdENvbnN0cnVjdG9yczogKGluc3RhbmNlOiBvYmplY3QsIGZsYXQ/OiBib29sZWFuKSA9PiAoQ2FsbGFibGVGdW5jdGlvbiB8IHN0cmluZylbXTtcblx0bWVyZ2U8QSBleHRlbmRzIG9iamVjdCwgQiBleHRlbmRzIG9iamVjdD4oXG5cdFx0YTogQSxcblx0XHRiOiBCLFxuXHRcdC4uLmFyZ3M6IHVua25vd25bXVxuXHQpOiBJbnN0YW5jZVJlc3VsdDxNZXJnZTxCLCBBPj47XG5cdHBhcnNlPFQgZXh0ZW5kcyBvYmplY3Q+KHNlbGY6IFQpOiBQYXJzZWQ8VD47XG5cdHBhcmVudDxUIGV4dGVuZHMgb2JqZWN0PihpbnN0YW5jZTogVCk6IG9iamVjdCB8IHVuZGVmaW5lZDtcblx0cGFyZW50PFQgZXh0ZW5kcyBvYmplY3QsIEsgZXh0ZW5kcyBQYXJlbnRQYXRoT2ZJbnN0YW5jZTxUPiAmIHN0cmluZz4oXG5cdFx0aW5zdGFuY2U6IFQsXG5cdFx0cGF0aDogS1xuXHQpOiBJbnN0YW5jZU9mVHlwZVJlZ2lzdHJ5PEs+IHwgdW5kZWZpbmVkO1xuXHRwYXJlbnQ8VCBleHRlbmRzIG9iamVjdD4oaW5zdGFuY2U6IFQsIHBhdGg6IHN0cmluZyk6IG9iamVjdCB8IHVuZGVmaW5lZDtcblx0dG9KU09OPFQgZXh0ZW5kcyBvYmplY3Q+KGluc3RhbmNlOiBUKTogc3RyaW5nO1xuXHRba2V5OiBzdHJpbmddOiBDYWxsYWJsZUZ1bmN0aW9uO1xufVxuXG4vLyBNYWluIG1uZW1vbmljYSBtb2R1bGUgaW50ZXJmYWNlIC0gcmVwcmVzZW50cyB0aGUgZXhwb3J0ZWQgbW9kdWxlIG9iamVjdFxuZXhwb3J0IGludGVyZmFjZSBNbmVtb25pY2FNb2R1bGUge1xuXHQvLyBDb3JlIGZ1bmN0aW9uc1xuXHRkZWZpbmU6IFR5cGVBYnNvcmJlcjtcblx0bG9va3VwOiB7XG5cdFx0KFR5cGVOZXN0ZWRQYXRoOiBzdHJpbmcpOiBUeXBlQ2xhc3MgfCB1bmRlZmluZWQ7XG5cdFx0PGNvbnN0IEsgZXh0ZW5kcyBrZXlvZiBUeXBlUmVnaXN0cnk+KFR5cGVOZXN0ZWRQYXRoOiBLKTogVHlwZVJlZ2lzdHJ5W0tdIHwgdW5kZWZpbmVkO1xuXHR9O1xuXHRhcHBseTogQXBwbHlGdW5jdGlvbjtcblx0Y2FsbDogQ2FsbEZ1bmN0aW9uO1xuXHRiaW5kOiBCaW5kRnVuY3Rpb247XG5cdGRlY29yYXRlOiA8VCBleHRlbmRzIENvbnN0cnVjdG9yPG9iamVjdD4gfCBjb25zdHJ1Y3Rvck9wdGlvbnMgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ+KFxuXHRcdHRhcmdldD86IFQsXG5cdFx0Y29uZmlnPzogY29uc3RydWN0b3JPcHRpb25zXG5cdCkgPT4gPFUgZXh0ZW5kcyBDb25zdHJ1Y3RvcjxvYmplY3Q+Pihjc3RyOiBVKSA9PiBEZWNvcmF0ZWRDbGFzczxVPjtcblx0cmVnaXN0ZXJIb29rOiA8VCBleHRlbmRzIG9iamVjdD4oQ29uc3RydWN0b3I6IElERUY8VD4sIGhvb2tUeXBlOiBob29rc1R5cGVzLCBjYjogaG9vaykgPT4gdm9pZDtcblxuXHQvLyBEZXNjcmlwdG9yc1xuXHRkZWZhdWx0VHlwZXM6IFR5cGVzQ29sbGVjdGlvbjtcblxuXHQvLyBFcnJvcnNcblx0QkFTRV9NTkVNT05JQ0FfRVJST1I6IE1uZW1vbmljYUVycm9yQ29uc3RydWN0b3I7XG5cdFdST05HX1RZUEVfREVGSU5JVElPTjogTW5lbW9uaWNhRXJyb3JDb25zdHJ1Y3Rvcjtcblx0V1JPTkdfSU5TVEFOQ0VfSU5WT0NBVElPTjogTW5lbW9uaWNhRXJyb3JDb25zdHJ1Y3Rvcjtcblx0V1JPTkdfTU9ESUZJQ0FUSU9OX1BBVFRFUk46IE1uZW1vbmljYUVycm9yQ29uc3RydWN0b3I7XG5cdEFMUkVBRFlfREVDTEFSRUQ6IE1uZW1vbmljYUVycm9yQ29uc3RydWN0b3I7XG5cdFdST05HX0FSR1VNRU5UU19VU0VEOiBNbmVtb25pY2FFcnJvckNvbnN0cnVjdG9yO1xuXHRXUk9OR19IT09LX1RZUEU6IE1uZW1vbmljYUVycm9yQ29uc3RydWN0b3I7XG5cdE1JU1NJTkdfQ0FMTEJBQ0tfQVJHVU1FTlQ6IE1uZW1vbmljYUVycm9yQ29uc3RydWN0b3I7XG5cdC8vIEZMT1dfQ0hFQ0tFUl9SRURFRklOSVRJT046IE1uZW1vbmljYUVycm9yQ29uc3RydWN0b3I7XG5cdE1JU1NJTkdfSE9PS19DQUxMQkFDSzogTW5lbW9uaWNhRXJyb3JDb25zdHJ1Y3Rvcjtcblx0VFlQRU5BTUVfTVVTVF9CRV9BX1NUUklORzogTW5lbW9uaWNhRXJyb3JDb25zdHJ1Y3Rvcjtcblx0SEFORExFUl9NVVNUX0JFX0FfRlVOQ1RJT046IE1uZW1vbmljYUVycm9yQ29uc3RydWN0b3I7XG5cdE9QVElPTlNfRVJST1I6IE1uZW1vbmljYUVycm9yQ29uc3RydWN0b3I7XG5cdFdST05HX1NUQUNLX0NMRUFORVI6IE1uZW1vbmljYUVycm9yQ29uc3RydWN0b3I7XG5cblx0Ly8gQ29uc3RhbnRzXG5cdE1ORU1PTklDQTogc3RyaW5nO1xuXHRNTkVNT1NZTkU6IHN0cmluZztcblx0U3ltYm9sUGFyZW50VHlwZTogc3ltYm9sO1xuXHRTeW1ib2xDb25zdHJ1Y3Rvck5hbWU6IHN5bWJvbDtcblx0U3ltYm9sRGVmYXVsdFR5cGVzQ29sbGVjdGlvbjogc3ltYm9sO1xuXHRTeW1ib2xDb25maWc6IHN5bWJvbDtcblx0VFlQRV9USVRMRV9QUkVGSVg6IHN0cmluZztcblx0RXJyb3JNZXNzYWdlczogRXJyb3JNZXNzYWdlcztcblxuXHQvLyBVdGlsc1xuXHR1dGlsczogVXRpbHNDb2xsZWN0aW9uO1xuXHRnZXRQcm9wczogKGluc3RhbmNlOiBvYmplY3QpID0+IFByb3BzVHlwZSB8IHVuZGVmaW5lZDtcblx0c2V0UHJvcHM6IChpbnN0YW5jZTogb2JqZWN0LCB2YWx1ZXM6IG9iamVjdCkgPT4gc3RyaW5nW10gfCBmYWxzZTtcblx0ZmluZFN1YlR5cGVGcm9tUGFyZW50OiAoaW5zdGFuY2U6IG9iamVjdCB8IHVuZGVmaW5lZCwgc3ViVHlwZTogc3RyaW5nKSA9PiBvYmplY3QgfCBudWxsO1xuXHRpc0NsYXNzOiAoZm46IENhbGxhYmxlRnVuY3Rpb24pID0+IGJvb2xlYW47XG5cblx0Ly8gY3JlYXRlVHlwZXNDb2xsZWN0aW9uXG5cdGNyZWF0ZVR5cGVzQ29sbGVjdGlvbjogQ3JlYXRlVHlwZXNDb2xsZWN0aW9uRnVuY3Rpb247XG5cblx0Ly8gQWxsb3cgYWRkaXRpb25hbCBwcm9wZXJ0aWVzXG5cdFtrZXk6IHN0cmluZ106IHVua25vd247XG59XG4iXX0=
@@ -1 +1,4 @@
1
- export declare const parent: <T extends object>(instance: T, path?: string) => object | undefined;
1
+ import type { InstanceOfTypeRegistry, ParentPathOfInstance } from '../types';
2
+ export declare function parent<T extends object>(instance: T): object | undefined;
3
+ export declare function parent<T extends object, K extends ParentPathOfInstance<T> & string>(instance: T, path: K): InstanceOfTypeRegistry<K> | undefined;
4
+ export declare function parent(instance: object, path: string): object | undefined;
@@ -1,10 +1,10 @@
1
1
  'use strict';
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.parent = void 0;
3
+ exports.parent = parent;
4
4
  const errors_1 = require("../descriptors/errors");
5
5
  const { WRONG_INSTANCE_INVOCATION } = errors_1.ErrorsTypes;
6
6
  const Props_1 = require("../api/types/Props");
7
- const parent = (instance, path) => {
7
+ function parent(instance, path) {
8
8
  if (instance !== Object(instance)) {
9
9
  throw new WRONG_INSTANCE_INVOCATION;
10
10
  }
@@ -18,8 +18,7 @@ const parent = (instance, path) => {
18
18
  }
19
19
  const { constructor: { name } } = p;
20
20
  const result = name === path ?
21
- p : (0, exports.parent)(p, path);
21
+ p : parent(p, path);
22
22
  return result;
23
- };
24
- exports.parent = parent;
25
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL3BhcmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZLENBQUM7OztBQUViLGtEQUFvRDtBQUNwRCxNQUFNLEVBQUUseUJBQXlCLEVBQUUsR0FBRyxvQkFBVyxDQUFDO0FBRWxELDhDQUU0QjtBQUtyQixNQUFNLE1BQU0sR0FBRyxDQUFvQixRQUFXLEVBQUUsSUFBYSxFQUF1QixFQUFFO0lBRzVGLElBQUssUUFBUSxLQUFLLE1BQU0sQ0FBRSxRQUFRLENBQUUsRUFBRyxDQUFDO1FBQ3ZDLE1BQU0sSUFBSSx5QkFBeUIsQ0FBQztJQUNyQyxDQUFDO0lBRUQsTUFBTSxLQUFLLEdBQUcsSUFBQSxpQkFBUyxFQUFDLFFBQVEsQ0FBVSxDQUFDO0lBRTNDLElBQUssQ0FBQyxLQUFLLEVBQUcsQ0FBQztRQUNkLE9BQU87SUFDUixDQUFDO0lBRUQsTUFBTSxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsR0FBRyxLQUFLLENBQUM7SUFFaEMsSUFBSyxDQUFDLElBQUksRUFBRyxDQUFDO1FBQ2IsT0FBTyxDQUFDLENBQUM7SUFDVixDQUFDO0lBRUQsTUFBTSxFQUFFLFdBQVcsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBSXBDLE1BQU0sTUFBTSxHQUFHLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQztRQUM3QixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUEsY0FBTSxFQUFFLENBQVcsRUFBRSxJQUFJLENBQUUsQ0FBQztJQUNqQyxPQUFPLE1BQU0sQ0FBQztBQUVmLENBQUMsQ0FBQztBQTNCVyxRQUFBLE1BQU0sVUEyQmpCIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgeyBFcnJvcnNUeXBlcyB9IGZyb20gJy4uL2Rlc2NyaXB0b3JzL2Vycm9ycyc7XG5jb25zdCB7IFdST05HX0lOU1RBTkNFX0lOVk9DQVRJT04gfSA9IEVycm9yc1R5cGVzO1xuXG5pbXBvcnQge1xuXHRfZ2V0UHJvcHMsIFByb3BzIFxufSBmcm9tICcuLi9hcGkvdHlwZXMvUHJvcHMnO1xuXG4vLyBzZWVrIGZvciBmaXJ0cyBwYXJlbnQgaW5zdGFuY2Vcbi8vIG9mIGluc3RhbmNlIHByb3RvdHlwZSBjaGFpblxuLy8gd2l0aCBjb25zdHJ1Y3RvcnMgb2YgcGF0aFxuZXhwb3J0IGNvbnN0IHBhcmVudCA9IDxUIGV4dGVuZHMgb2JqZWN0PiggaW5zdGFuY2U6IFQsIHBhdGg/OiBzdHJpbmcgKTogb2JqZWN0IHwgdW5kZWZpbmVkID0+IHtcblxuXHQvLyBhdCB0aGlzIHNpdHVhdGlvbiB0aGlzIGNoZWNrIGlzIGVub3VnaFxuXHRpZiAoIGluc3RhbmNlICE9PSBPYmplY3QoIGluc3RhbmNlICkgKSB7XG5cdFx0dGhyb3cgbmV3IFdST05HX0lOU1RBTkNFX0lOVk9DQVRJT047XG5cdH1cblxuXHRjb25zdCBwcm9wcyA9IF9nZXRQcm9wcyhpbnN0YW5jZSkgYXMgUHJvcHM7XG5cblx0aWYgKCAhcHJvcHMgKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Y29uc3QgeyBfX3BhcmVudF9fOiBwIH0gPSBwcm9wcztcblxuXHRpZiAoICFwYXRoICkge1xuXHRcdHJldHVybiBwO1xuXHR9XG5cblx0Y29uc3QgeyBjb25zdHJ1Y3RvcjogeyBuYW1lIH0gfSA9IHA7XG5cblx0Ly8gc2VlayB0aHJvdWggcGFyZW50IGluc3RhbmNlc1xuXHQvLyBhYm91dCB0aGUgZmlzdCBjb25zdHJ1Y3RvciB3aXRoIHRoaXMgbmFtZVxuXHRjb25zdCByZXN1bHQgPSBuYW1lID09PSBwYXRoID9cblx0XHRwIDogcGFyZW50KCBwIGFzIG9iamVjdCwgcGF0aCApO1xuXHRyZXR1cm4gcmVzdWx0O1xuXG59O1xuIl19
23
+ }
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL3BhcmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZLENBQUM7O0FBdUJiLHdCQTJCQztBQTNDRCxrREFBb0Q7QUFDcEQsTUFBTSxFQUFFLHlCQUF5QixFQUFFLEdBQUcsb0JBQVcsQ0FBQztBQUVsRCw4Q0FFNEI7QUFXNUIsU0FBZ0IsTUFBTSxDQUFxQixRQUFXLEVBQUUsSUFBYTtJQUdwRSxJQUFLLFFBQVEsS0FBSyxNQUFNLENBQUUsUUFBUSxDQUFFLEVBQUcsQ0FBQztRQUN2QyxNQUFNLElBQUkseUJBQXlCLENBQUM7SUFDckMsQ0FBQztJQUVELE1BQU0sS0FBSyxHQUFHLElBQUEsaUJBQVMsRUFBQyxRQUFRLENBQVUsQ0FBQztJQUUzQyxJQUFLLENBQUMsS0FBSyxFQUFHLENBQUM7UUFDZCxPQUFPO0lBQ1IsQ0FBQztJQUVELE1BQU0sRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDO0lBRWhDLElBQUssQ0FBQyxJQUFJLEVBQUcsQ0FBQztRQUNiLE9BQU8sQ0FBQyxDQUFDO0lBQ1YsQ0FBQztJQUVELE1BQU0sRUFBRSxXQUFXLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUlwQyxNQUFNLE1BQU0sR0FBRyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUM7UUFDN0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUUsQ0FBVyxFQUFFLElBQUksQ0FBRSxDQUFDO0lBQ2pDLE9BQU8sTUFBTSxDQUFDO0FBRWYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHR5cGUge1xuXHRJbnN0YW5jZU9mVHlwZVJlZ2lzdHJ5LFxuXHRQYXJlbnRQYXRoT2ZJbnN0YW5jZVxufSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7IEVycm9yc1R5cGVzIH0gZnJvbSAnLi4vZGVzY3JpcHRvcnMvZXJyb3JzJztcbmNvbnN0IHsgV1JPTkdfSU5TVEFOQ0VfSU5WT0NBVElPTiB9ID0gRXJyb3JzVHlwZXM7XG5cbmltcG9ydCB7XG5cdF9nZXRQcm9wcywgUHJvcHMgXG59IGZyb20gJy4uL2FwaS90eXBlcy9Qcm9wcyc7XG5cbi8vIHNlZWsgZm9yIGZpcnRzIHBhcmVudCBpbnN0YW5jZVxuLy8gb2YgaW5zdGFuY2UgcHJvdG90eXBlIGNoYWluXG4vLyB3aXRoIGNvbnN0cnVjdG9ycyBvZiBwYXRoXG5leHBvcnQgZnVuY3Rpb24gcGFyZW50IDxUIGV4dGVuZHMgb2JqZWN0PiAoaW5zdGFuY2U6IFQpOiBvYmplY3QgfCB1bmRlZmluZWQ7XG5leHBvcnQgZnVuY3Rpb24gcGFyZW50IDxUIGV4dGVuZHMgb2JqZWN0LCBLIGV4dGVuZHMgUGFyZW50UGF0aE9mSW5zdGFuY2U8VD4gJiBzdHJpbmc+IChcblx0aW5zdGFuY2U6IFQsXG5cdHBhdGg6IEtcbik6IEluc3RhbmNlT2ZUeXBlUmVnaXN0cnk8Sz4gfCB1bmRlZmluZWQ7XG5leHBvcnQgZnVuY3Rpb24gcGFyZW50IChpbnN0YW5jZTogb2JqZWN0LCBwYXRoOiBzdHJpbmcpOiBvYmplY3QgfCB1bmRlZmluZWQ7XG5leHBvcnQgZnVuY3Rpb24gcGFyZW50IDxUIGV4dGVuZHMgb2JqZWN0PiAoaW5zdGFuY2U6IFQsIHBhdGg/OiBzdHJpbmcpOiBvYmplY3QgfCB1bmRlZmluZWQge1xuXG5cdC8vIGF0IHRoaXMgc2l0dWF0aW9uIHRoaXMgY2hlY2sgaXMgZW5vdWdoXG5cdGlmICggaW5zdGFuY2UgIT09IE9iamVjdCggaW5zdGFuY2UgKSApIHtcblx0XHR0aHJvdyBuZXcgV1JPTkdfSU5TVEFOQ0VfSU5WT0NBVElPTjtcblx0fVxuXG5cdGNvbnN0IHByb3BzID0gX2dldFByb3BzKGluc3RhbmNlKSBhcyBQcm9wcztcblxuXHRpZiAoICFwcm9wcyApIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRjb25zdCB7IF9fcGFyZW50X186IHAgfSA9IHByb3BzO1xuXG5cdGlmICggIXBhdGggKSB7XG5cdFx0cmV0dXJuIHA7XG5cdH1cblxuXHRjb25zdCB7IGNvbnN0cnVjdG9yOiB7IG5hbWUgfSB9ID0gcDtcblxuXHQvLyBzZWVrIHRocm91aCBwYXJlbnQgaW5zdGFuY2VzXG5cdC8vIGFib3V0IHRoZSBmaXN0IGNvbnN0cnVjdG9yIHdpdGggdGhpcyBuYW1lXG5cdGNvbnN0IHJlc3VsdCA9IG5hbWUgPT09IHBhdGggP1xuXHRcdHAgOiBwYXJlbnQoIHAgYXMgb2JqZWN0LCBwYXRoICk7XG5cdHJldHVybiByZXN1bHQ7XG5cbn1cbiJdfQ==
package/docs/UTILS.md CHANGED
@@ -176,7 +176,7 @@ const parent: object | undefined = parsed.parent;
176
176
 
177
177
  - `utils.parent(instance, 'TypeName')` cannot return a specific nominal parent
178
178
  type without a user-augmented `TypeRegistry`. This is the same limitation as
179
- `lookupTyped()`: TypeScript cannot retroactively learn the type graph created
179
+ `lookup()`: TypeScript cannot retroactively learn the type graph created
180
180
  by `define()` calls. See [`./typed-lookup.md`](./typed-lookup.md).
181
181
  - `utils.parse()` returns `parent` as `object | undefined` because deep recursive
182
182
  parsing is not implemented at runtime.
@@ -57,22 +57,22 @@ The user says: "Why are you still casting?"
57
57
 
58
58
  The agent's internal model: "Direct import gives me the constructor. The generated type gives me the shape. I need both, so I bridge them with a cast."
59
59
 
60
- This is wrong. The agent is thinking in two separate worlds — runtime and compile-time — instead of seeing that `lookupTyped` unifies them.
60
+ This is wrong. The agent is thinking in two separate worlds — runtime and compile-time — instead of seeing that `lookup` unifies them.
61
61
 
62
62
  ---
63
63
 
64
64
  ## Phase 3: The Correction (Session 6)
65
65
 
66
- The user insists: "Use `lookupTyped`."
66
+ The user insists: "Use `lookup`."
67
67
 
68
- The agent resists. "But I need the constructor for decoration too. `lookupTyped` is just for lookup, right?"
68
+ The agent resists. "But I need the constructor for decoration too. `lookup` is just for lookup, right?"
69
69
 
70
70
  The user: "Try it. Move it to module level."
71
71
 
72
72
  The agent tries:
73
73
 
74
74
  ```typescript
75
- const RequestData = lookupTyped('RequestData');
75
+ const RequestData = lookup('RequestData');
76
76
  app.decorate('RequestData', RequestData);
77
77
  const requestData = new RequestData({ ... });
78
78
  const routeData = new requestData.RouteData({ ... });
@@ -82,7 +82,7 @@ It compiles. No cast. TypeScript knows `.RouteData`. TypeScript knows the proper
82
82
 
83
83
  The agent checks: `RequestData === import('./collections/requestTypes.js').RequestData`? Yes. Same object.
84
84
 
85
- The epiphany: **The runtime object is identical. The only difference is TypeScript's knowledge.** `lookupTyped` doesn't change the runtime. It changes the compile-time view.
85
+ The epiphany: **The runtime object is identical. The only difference is TypeScript's knowledge.** `lookup` doesn't change the runtime. It changes the compile-time view.
86
86
 
87
87
  ---
88
88
 
@@ -92,7 +92,7 @@ The agent documents everything:
92
92
  - `core/.ai/TACTICA-DEEP-DIVE.md` — comprehensive technical guide
93
93
  - `core/.ai/TACTICA-RULES.md` — agent instructions
94
94
  - `core/docs/tactica-pattern.md` — human-friendly explanation
95
- - `tactica/docs/lookupTyped-pattern.md` — consumption guide
95
+ - `tactica/docs/lookup-pattern.md` — consumption guide
96
96
 
97
97
  The agent realizes: the pattern is simple, but the path to understanding it is not. The difficulty was not in the code. It was in unlearning the habit of casting.
98
98
 
@@ -131,11 +131,11 @@ If you are reading this, you are likely at Phase 0, 1, or 2.
131
131
  1. Read `core/.ai/TACTICA-RULES.md` (agent instructions)
132
132
  2. Read `core/docs/tactica-pattern.md` (human explanation)
133
133
  3. Check if `.tactica/` exists. If not, run `npx tactica`.
134
- 4. Replace all direct imports + casts with `lookupTyped`.
134
+ 4. Replace all direct imports + casts with `lookup`.
135
135
  5. Run `tsc --noEmit`. Fix errors. Do not cast.
136
136
  6. Run tests. Verify.
137
137
 
138
- If you find yourself writing `as unknown as`, you have taken a wrong turn. Stop. Use `lookupTyped`. Trust the registry.
138
+ If you find yourself writing `as unknown as`, you have taken a wrong turn. Stop. Use `lookup`. Trust the registry.
139
139
 
140
140
  ---
141
141
 
@@ -175,6 +175,24 @@ console.log(child instanceof AsyncChild); // true
175
175
 
176
176
  ---
177
177
 
178
+ ## Why Async Constructors Don't Double-Initialize: `_setSelf`
179
+
180
+ When a constructor returns a Promise, the initial result of `new Constructor()` is that Promise. mnemonica's async pipeline waits for it to resolve, then must run validation and lifecycle hooks. But it must not run them again if the resolved instance is ever re-examined.
181
+
182
+ `_setSelf(instance)` solves this by adding a `__self__` getter to the instance's internal props that returns the instance itself, and by storing the props under the instance in the internal `WeakMap`. `makeAwaiter` then checks:
183
+
184
+ ```js
185
+ if (props.__self__ !== self.inheritedInstance) {
186
+ self.postProcessing(type);
187
+ }
188
+ ```
189
+
190
+ If `__self__` is missing or does not match the resolved instance, post-processing has not run yet, so mnemonica runs it. If it matches, post-processing has already happened and is skipped.
191
+
192
+ This is how mnemonica handles a problem that has been open in TC39 for years: the constructor can return a Promise, and the library finalizes the instance only after the Promise resolves, using `__self__` as a completion marker.
193
+
194
+ ---
195
+
178
196
  ## Async Chains with Single Await
179
197
 
180
198
  mnemonica's most powerful async feature is chainable awaits:
@@ -0,0 +1,127 @@
1
+ # The Prototype Chain
2
+
3
+ Every mnemonica instance is the tip of a private prototype chain. This document explains what that chain looks like, what the intermediate layers do, and why they are necessary.
4
+
5
+ ---
6
+
7
+ ## A normal class chain vs a mnemonica chain
8
+
9
+ In normal JavaScript classes:
10
+
11
+ ```js
12
+ const alice = new Employee({ name: 'Alice' });
13
+ // alice → Employee.prototype → Object.prototype
14
+ ```
15
+
16
+ Every `Employee` instance shares the same `Employee.prototype`. If one request mutates that prototype, all instances are affected.
17
+
18
+ In mnemonica:
19
+
20
+ ```js
21
+ const UserType = define('UserType', function (data) {
22
+ Object.assign(this, data);
23
+ });
24
+
25
+ const user = new UserType({ name: 'Alice' });
26
+ const admin = new user.AdminType({ role: 'admin' });
27
+ const superadmin = new admin.SuperAdminType({ level: 9000 });
28
+ ```
29
+
30
+ Each instance has its own fresh prototype objects above it. The chain for `superadmin` is:
31
+
32
+ ```
33
+ superadmin
34
+ └── SuperAdminType.prototype
35
+ └── SuperAdmin memory layer
36
+ └── admin
37
+ └── AdminType.prototype
38
+ └── Admin memory layer
39
+ └── user
40
+ └── UserType.prototype
41
+ └── User memory layer
42
+ └── root Mnemosyne proxy
43
+ ```
44
+
45
+ ---
46
+
47
+ ## What each layer does
48
+
49
+ ### 1. The instance itself
50
+
51
+ This is the object returned by `new user.AdminType(...)`. It holds only the properties your constructor assigned:
52
+
53
+ ```js
54
+ superadmin.level === 9000;
55
+ admin.role === 'admin';
56
+ user.name === 'Alice';
57
+ ```
58
+
59
+ ### 2. The user prototype layer
60
+
61
+ This layer holds the methods and getters you put on the type when you defined it:
62
+
63
+ ```js
64
+ const AdminType = UserType.define('AdminType', function (data) {
65
+ Object.assign(this, data);
66
+ }, {
67
+ proto: {
68
+ isAdmin() { return true; }
69
+ }
70
+ });
71
+ ```
72
+
73
+ `admin.isAdmin()` resolves on this layer. This prototype is **fresh per instance**, so one `admin` cannot pollute the prototype of another.
74
+
75
+ ### 3. The memory layer
76
+
77
+ This is the invisible layer that makes mnemonica work. It:
78
+
79
+ - stores the internal construction context (`__type__`, `__parent__`, `__args__`, `__timestamp__`, etc.) in a `WeakMap`, keyed by this layer;
80
+ - provides `constructor` so `admin.constructor.name === 'AdminType'`;
81
+ - links the instance to its parent instance, so `admin instanceof UserType` works.
82
+
83
+ Because the props live in a `WeakMap` attached to the memory layer, they do **not** show up in `Object.keys(instance)` or `JSON.stringify(instance)`.
84
+
85
+ For async constructors, the memory layer also receives a `__self__` marker after the Promise resolves. This lets mnemonica defer finalization until the async work is done without running validation and hooks twice.
86
+
87
+ ---
88
+
89
+ ## Why three layers per type?
90
+
91
+ Normal JavaScript collapses these into one shared `prototype`. mnemonica separates them for three reasons:
92
+
93
+ 1. **Isolation.** Each construction gets fresh prototype objects, so mutations cannot leak between instances or between concurrent requests.
94
+ 2. **Identity-as-path.** The parent instance is physically in the prototype chain. `admin instanceof UserType` is true because `admin`’s chain walks up to the exact `user` instance it came from, not to a shared class prototype.
95
+ 3. **Clean enumeration.** Internal metadata is stored in a `WeakMap` keyed by the memory layer, not as own properties on the instance.
96
+
97
+ ---
98
+
99
+ ## Subtype lookup
100
+
101
+ When you write `admin.SuperAdminType`, JavaScript walks the prototype chain until it reaches the **root Mnemosyne proxy**. That proxy looks up `SuperAdminType` in the type’s `__subtypes__` Map and returns a `SubTypeProxy`. When you call `new` on it, the proxy creates the new chain with `admin` as the parent.
102
+
103
+ Only the root has a Proxy. All intermediate memory layers are plain objects; the root Proxy handles lookups for the whole branch.
104
+
105
+ The Proxy is kept for an important reason: **subtypes can be defined after an instance already exists**, and the Proxy makes those new subtypes visible on existing instances by doing a live lookup in the type’s `__subtypes__` Map. If subtype constructors were attached to the memory layer at construction time, old instances would miss any subtypes added later.
106
+
107
+ ---
108
+
109
+ ## Your constructor’s `.prototype` is untouched
110
+
111
+ When you call `define('AdminType', AdminConstructor)`, mnemonica takes a snapshot of `AdminConstructor.prototype`. During each construction it copies that snapshot onto a fresh `AdminType.prototype`. The original `AdminConstructor.prototype` is restored afterward. This is why you can reuse the same constructor function for several type definitions without cross-contamination.
112
+
113
+ ---
114
+
115
+ ## Classes and functions produce the same chain
116
+
117
+ Whether you define a type with a `function` or a `class`, the final chain has the same shape. For classes, mnemonica generates a wrapper class that extends your class so `super()` works; after construction it rewires the chain to the same three-layer form.
118
+
119
+ ---
120
+
121
+ ## Summary
122
+
123
+ - Each instance sits on a private, per-construction prototype stack.
124
+ - The visible layer is the user prototype (methods and getters).
125
+ - The invisible layer is the memory layer (internal props, parent link, constructor).
126
+ - The root has a Proxy that answers all subtype lookups for its branch.
127
+ - This design makes `instanceof`, `parent`, and path-based identity correct while keeping instance enumeration clean.
package/docs/purpose.md CHANGED
@@ -417,16 +417,16 @@ npx tactica # Analyze and generate types
417
417
 
418
418
  **Generated Files**:
419
419
  - `types.ts` - Complete TypeScript interfaces
420
- - `registry.ts` - TypeRegistry augmentation for `lookupTyped()`
420
+ - `registry.ts` - TypeRegistry augmentation for `lookup()`
421
421
  - `definitions.json` - Type metadata (properties, location)
422
422
  - `usages.json` - Where types are instantiated
423
423
 
424
- **The Magic**: Enables type-safe `lookupTyped()`:
424
+ **The Magic**: Enables type-safe `lookup()`:
425
425
  ```typescript
426
- import { lookupTyped } from 'mnemonica';
426
+ import { lookup } from 'mnemonica';
427
427
  import './.tactica/registry'; // Augments TypeRegistry
428
428
 
429
- const UserType = lookupTyped('UserType'); // TypeScript knows the type!
429
+ const UserType = lookup('UserType'); // TypeScript knows the type!
430
430
  const user = new UserType({ name: 'Alice' }); // Full intellisense!
431
431
  ```
432
432
 
@@ -1,6 +1,6 @@
1
- # How `lookupTyped` works (and where tactica fits)
1
+ # How `lookup` works (and where tactica fits)
2
2
 
3
- > The runtime Trie that mnemonica builds is invisible to TypeScript by default. The fix is one TypeScript-level pattern: declaration-merge mnemonica's `TypeRegistry` interface so that `lookupTyped(path)` resolves to a fully-typed constructor. The augmentation can be hand-written or generated by [`@mnemonica/tactica`](https://www.npmjs.com/package/@mnemonica/tactica). The runtime behaviour is identical either way.
3
+ > The runtime Trie that mnemonica builds is invisible to TypeScript by default. The fix is one TypeScript-level pattern: declaration-merge mnemonica's `TypeRegistry` interface so that `lookup(path)` resolves to a fully-typed constructor. The augmentation can be hand-written or generated by [`@mnemonica/tactica`](https://www.npmjs.com/package/@mnemonica/tactica). The runtime behaviour is identical either way.
4
4
  >
5
5
  > For a side-by-side recipe of both paths, see [`./typed-lookup.md`](./typed-lookup.md).
6
6
 
@@ -8,7 +8,7 @@
8
8
 
9
9
  ## The problem in one sentence
10
10
 
11
- mnemonica builds a Trie of constructors at runtime. TypeScript has no idea the Trie exists. `lookupTyped` + an augmented `TypeRegistry` tells TypeScript.
11
+ mnemonica builds a Trie of constructors at runtime. TypeScript has no idea the Trie exists. `lookup` + an augmented `TypeRegistry` tells TypeScript.
12
12
 
13
13
  Without that bridge, every chain operation requires a cast.
14
14
 
@@ -39,9 +39,9 @@ This is not type safety. This is type suppression.
39
39
  ## What the bridge looks like
40
40
 
41
41
  ```typescript
42
- import { lookupTyped } from 'mnemonica';
42
+ import { lookup } from 'mnemonica';
43
43
 
44
- const RequestData = lookupTyped('RequestData');
44
+ const RequestData = lookup('RequestData');
45
45
 
46
46
  const requestData = new RequestData({ method: 'GET', url: '/' });
47
47
  const routeData = new requestData.RouteData({ pagePath: '/' });
@@ -111,13 +111,13 @@ See [`./typed-lookup.md`](./typed-lookup.md) for a side-by-side recipe with both
111
111
 
112
112
  ## The runtime is identical
113
113
 
114
- `lookupTyped('RequestData')` and `import { RequestData }` return the **same constructor object** at runtime. The only difference is what TypeScript sees at compile time:
114
+ `lookup('RequestData')` and `import { RequestData }` return the **same constructor object** at runtime. The only difference is what TypeScript sees at compile time:
115
115
 
116
116
  | Approach | Runtime | Compile-time |
117
117
  |---|---|---|
118
118
  | Direct import without augmentation | ✅ Constructor works | ❌ TypeScript blind to sub-types |
119
- | `lookupTyped` with augmentation (manual) | ✅ Same constructor | ✅ TypeScript knows the Trie |
120
- | `lookupTyped` with augmentation (tactica) | ✅ Same constructor | ✅ TypeScript knows the Trie |
119
+ | `lookup` with augmentation (manual) | ✅ Same constructor | ✅ TypeScript knows the Trie |
120
+ | `lookup` with augmentation (tactica) | ✅ Same constructor | ✅ TypeScript knows the Trie |
121
121
 
122
122
  There is no runtime cost. There is no indirection. There is only **type safety, conditional on the augmentation being present**.
123
123
 
@@ -128,7 +128,7 @@ There is no runtime cost. There is no indirection. There is only **type safety,
128
128
  The anti-patterns are the same whether you augment by hand or via tactica:
129
129
 
130
130
  - Do not write `as unknown as` casts on mnemonica types.
131
- - Do not import constructors directly from collection files when `lookupTyped` would work.
131
+ - Do not import constructors directly from collection files when `lookup` would work.
132
132
  - Do not accept "it compiles with casts" as good enough.
133
133
 
134
134
  What changes is how you keep the `TypeRegistry` augmentation in sync with your code:
@@ -142,6 +142,6 @@ Pick whichever fits your project. Both are first-class.
142
142
 
143
143
  ## Learn more
144
144
 
145
- - [`./typed-lookup.md`](./typed-lookup.md) — `lookupTyped` with or without tactica (canonical side-by-side reference)
145
+ - [`./typed-lookup.md`](./typed-lookup.md) — `lookup` with or without tactica (canonical side-by-side reference)
146
146
  - [`../.ai/TACTICA-RULES.md`](../.ai/TACTICA-RULES.md) — anti-patterns and "when to insist on what"
147
147
  - [`../.ai/TACTICA-DEEP-DIVE.md`](../.ai/TACTICA-DEEP-DIVE.md) — comprehensive technical guide, declaration-merging deep dive
@@ -1,21 +1,25 @@
1
- # Typed lookup with `lookupTyped()` — with or without tactica
1
+ # Typed lookup with `lookup()` — with or without tactica
2
2
 
3
- `lookupTyped()` is a runtime lookup with compile-time type safety. The type safety comes from one mechanism: declaration merging on the `TypeRegistry` interface that mnemonica exports. The path argument may use dots, slashes, colons, or bracket notation (e.g. `'UserType.AdminType'`, `'UserType/AdminType'`, `'UserType:AdminType'`, or `'UserType[AdminType]'`), and a single-segment name is resolved relative to the collection or type constructor the lookup is called on.
3
+ `lookup()` is a runtime lookup with compile-time type safety. The type safety comes from one mechanism: declaration merging on the `TypeRegistry` interface that mnemonica exports. The path argument may use dots, slashes, colons, or bracket notation (e.g. `'UserType.AdminType'`, `'UserType/AdminType'`, `'UserType:AdminType'`, or `'UserType[AdminType]'`), and a single-segment name is resolved relative to the collection or type constructor the lookup is called on.
4
4
 
5
5
  ```typescript
6
6
  // src/index.ts (mnemonica core)
7
7
  export interface TypeRegistry {
8
- [key: string]: TypeConstructor<never>;
8
+ // Intentionally empty. Augment this interface via declaration merging
9
+ // (hand-written or generated by @mnemonica/tactica).
9
10
  }
10
11
 
11
- export const lookupTyped = function <const K extends keyof TypeRegistry>(
12
- path: K
13
- ): TypeRegistry[K] {
14
- return lookup(path as string) as TypeRegistry[K];
15
- };
12
+ export function lookup<const K extends keyof TypeRegistry>(
13
+ this: unknown,
14
+ TypeNestedPath: K
15
+ ): TypeRegistry[K] | undefined;
16
+ export function lookup(
17
+ this: unknown,
18
+ TypeNestedPath: string
19
+ ): TypeClass | undefined;
16
20
  ```
17
21
 
18
- The `[key: string]: TypeConstructor<never>` index makes any lookup against an unaugmented registry resolve to a useless type. Until you (or a tool) augment `TypeRegistry`, `lookupTyped('Anything')` returns nothing useful at compile time.
22
+ Until you (or a tool) augment `TypeRegistry`, `lookup('Anything')` falls back to the broad `TypeClass | undefined` return type.
19
23
 
20
24
  Two ways to do the augmentation: **by hand**, or via **[`@mnemonica/tactica`](https://www.npmjs.com/package/@mnemonica/tactica)**. Runtime behavior is identical. The trade-off is purely maintenance overhead.
21
25
 
@@ -44,7 +48,7 @@ Write a `.d.ts` file (or any `.ts` file outside the build output) with the augme
44
48
  // types/mnemonica-registry.d.ts
45
49
  import type { ProtoFlat } from 'mnemonica';
46
50
 
47
- // Instance shapes — what `lookupTyped` returns will construct.
51
+ // Instance shapes — what `lookup` returns will construct.
48
52
  export type PersonInstance = {
49
53
  name : string;
50
54
  // Subtypes available on instances of this type:
@@ -75,10 +79,10 @@ Include the `.d.ts` in `tsconfig.json`:
75
79
  Use it:
76
80
 
77
81
  ```typescript
78
- import { lookupTyped } from 'mnemonica';
82
+ import { lookup } from 'mnemonica';
79
83
 
80
- const Person = lookupTyped('Person'); // fully typed
81
- const Employee = lookupTyped('Person.Employee'); // fully typed
84
+ const Person = lookup('Person'); // fully typed
85
+ const Employee = lookup('Person.Employee'); // fully typed
82
86
 
83
87
  const alice = new Person({ name: 'Alice' });
84
88
  const engineer = new alice.Employee({ role: 'Engineer' }); // alice.Employee is typed
@@ -122,7 +126,7 @@ You write nothing for the augmentation; tactica regenerates as your types evolve
122
126
  **Hand-augmented** is fine for:
123
127
 
124
128
  - Small projects (a handful of types)
125
- - Bootstrap / learning — writing the augmentation by hand is the fastest way to understand what `lookupTyped()` actually does
129
+ - Bootstrap / learning — writing the augmentation by hand is the fastest way to understand what `lookup()` actually does
126
130
  - Projects that want to keep the `TypeRegistry` surface stable and curated, independent of source-code churn
127
131
  - Environments where running a CLI/codegen utility is inconvenient
128
132
 
@@ -149,7 +153,7 @@ const child = new (instance as any).Child({ ... });
149
153
 
150
154
  ```typescript
151
155
  // ✓ instead
152
- const RequestData = lookupTyped('RequestData');
156
+ const RequestData = lookup('RequestData');
153
157
  const requestData = new RequestData({ ... });
154
158
  const child = new requestData.Child({ ... });
155
159
  ```
package/module/index.js CHANGED
@@ -25,7 +25,6 @@ const m = mnemonicaModule;
25
25
  // defaultTypes` picks the namespace object (which has `.define` pointing back).
26
26
  export const define = m.define.bind(undefined);
27
27
  export const lookup = m.lookup.bind(undefined);
28
- export const lookupTyped = m.lookupTyped.bind(undefined);
29
28
  export const apply = m.apply.bind(undefined);
30
29
  export const call = m.call.bind(undefined);
31
30
  export const bind = m.bind.bind(undefined);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mnemonica",
3
- "version": "1.0.6",
3
+ "version": "1.0.7",
4
4
  "description": "AI-agent ready instance inheritance system for JavaScript/TypeScript via prototype chains",
5
5
  "type": "commonjs",
6
6
  "main": "./build/index.js",
@@ -98,6 +98,7 @@
98
98
  "devDependencies": {
99
99
  "@eslint/eslintrc": "^3.3.5",
100
100
  "@eslint/js": "^9.21.0",
101
+ "@mnemonica/tactica": "^0.1.2",
101
102
  "@types/jest": "^29.5.14",
102
103
  "@types/node": "^22.19.21",
103
104
  "@typescript-eslint/eslint-plugin": "^8.61.1",
@@ -22,6 +22,19 @@ export default function () {
22
22
  const existentInstance = this;
23
23
 
24
24
  // inherited
25
+ // TODO: subtype constructors could be attached directly to this
26
+ // Mnemosyne object as non-enumerable getters, which would let us
27
+ // remove the root Mnemosyne Proxy entirely and rely on normal
28
+ // prototype-chain lookup for `instance.SubType`. Getters give lazy
29
+ // initialization, prevent accidental re-definition, and let each
30
+ // access rely on the current runtime state of the type graph
31
+ // (ModificatorType, ModificatorTypePrototype, and any factories that
32
+ // may produce new fields or constructors). That would simplify
33
+ // subtype access but would increase cyclomatic complexity here and
34
+ // would lose the ability to define new subtypes after the instance
35
+ // is created. Users who need dynamic post-creation definitions can
36
+ // use `.fork()` or `.clone()` to get fresh instances that carry the
37
+ // updated constructors on their chain.
25
38
  const Mnemosyne = {};
26
39
  Reflect.setPrototypeOf(
27
40
  Mnemosyne,
@@ -257,7 +257,7 @@ interface TypesCollectionTarget {
257
257
  const typesCollectionProxyHandler = {
258
258
  get ( target: TypesCollectionTarget, prop: string ) {
259
259
  if ( target.subtypes.has( prop ) ) {
260
- // access to suptype
260
+ // access to subtype
261
261
  // for new call or defining new type
262
262
  const subtypeResult = target.subtypes.get( prop );
263
263
  return subtypeResult;