@dbx-tools/model 0.9.181 → 0.9.184

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/index.ts CHANGED
@@ -3,7 +3,7 @@
3
3
  // Hand edits are overwritten on the next watch; this file is read-only.
4
4
 
5
5
  export const PACKAGE_IDENTIFIER = "@dbx-tools/model";
6
- export const PACKAGE_VERSION = "0.9.181";
6
+ export const PACKAGE_VERSION = "0.9.184";
7
7
  export * as bindings from "./src/bindings.ts";
8
8
  export * from "./src/bindings.ts";
9
9
  export * as classes from "./src/classes.ts";
package/lib/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  export declare const PACKAGE_IDENTIFIER = "@dbx-tools/model";
2
- export declare const PACKAGE_VERSION = "0.9.181";
2
+ export declare const PACKAGE_VERSION = "0.9.184";
3
3
  export * as bindings from "./src/bindings.ts";
4
4
  export * from "./src/bindings.ts";
5
5
  export * as classes from "./src/classes.ts";
package/lib/index.js CHANGED
@@ -2,7 +2,7 @@
2
2
  // Regenerated from the exporting modules in ./src.
3
3
  // Hand edits are overwritten on the next watch; this file is read-only.
4
4
  export const PACKAGE_IDENTIFIER = "@dbx-tools/model";
5
- export const PACKAGE_VERSION = "0.9.181";
5
+ export const PACKAGE_VERSION = "0.9.184";
6
6
  export * as bindings from "./src/bindings.js";
7
7
  export * from "./src/bindings.js";
8
8
  export * as classes from "./src/classes.js";
@@ -33,4 +33,4 @@ export { ReasoningLevel, REASONING_LEVELS, parseReasoning, parseReasoningLevels,
33
33
  export { rankModelIdLive, searchModels, selectModel } from "./src/resolve.js";
34
34
  export { COMMITTED_RETIRED_MODELS, RETIRED_MODELS_GENERATED_AT, replaceRetiredModelNames, retiredModelNames, modelStatusFor } from "./src/retirement.js";
35
35
  export { lookupModels, rankModelId, resolveModel } from "./src/selection.js";
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxrQkFBa0IsQ0FBQztBQUNyRCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxRQUFRLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxPQUFPLEtBQUssT0FBTyxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sS0FBSyxRQUFRLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxLQUFLLFFBQVEsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxhQUFhLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxLQUFLLGdCQUFnQixNQUFNLDRCQUE0QixDQUFDO0FBQy9ELE9BQU8sS0FBSyxRQUFRLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxLQUFLLFlBQVksTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEtBQUssV0FBVyxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sS0FBSyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLG9CQUFvQixNQUFNLGdDQUFnQyxDQUFDO0FBQ3ZFLE9BQU8sS0FBSyxPQUFPLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxLQUFLLFVBQVUsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRCxPQUFPLEtBQUssU0FBUyxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDdkgsT0FBTyxFQUFFLHFCQUFxQixFQUFFLG9CQUFvQixFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3pKLE9BQU8sRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDdEYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLHNCQUFzQixFQUFFLGNBQWMsRUFBRSxtQkFBbUIsRUFBRSxxQkFBcUIsRUFBRSwrQkFBK0IsRUFBRSxtQkFBbUIsRUFBRSx1QkFBdUIsRUFBRSxtQkFBbUIsRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLDBCQUEwQixFQUFFLG9CQUFvQixFQUFFLGdCQUFnQixFQUFFLG9CQUFvQixFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXhaLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxvQkFBb0IsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRTVHLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxrQkFBa0IsRUFBRSwyQkFBMkIsRUFBRSxxQkFBcUIsRUFBRSxxQkFBcUIsRUFBRSx1QkFBdUIsRUFBRSxrQkFBa0IsRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRTNPLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxvQkFBb0IsRUFBRSx1QkFBdUIsRUFBRSx5QkFBeUIsRUFBRSx1QkFBdUIsRUFBRSw2QkFBNkIsRUFBRSxvQkFBb0IsRUFBRSwwQkFBMEIsRUFBRSxrQkFBa0IsRUFBRSx1QkFBdUIsRUFBRSxnQkFBZ0IsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3RVLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSx1QkFBdUIsRUFBRSxvQkFBb0IsRUFBRSw0QkFBNEIsRUFBRSwwQkFBMEIsRUFBRSxzQkFBc0IsRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUVyTixPQUFPLEVBQUUsaUNBQWlDLEVBQUUsaUJBQWlCLEVBQUUsWUFBWSxFQUFFLHFDQUFxQyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFckwsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLHVCQUF1QixFQUFFLHlCQUF5QixFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLHlCQUF5QixFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLHFCQUFxQixFQUFFLGtCQUFrQixFQUFFLHFCQUFxQixFQUFFLGVBQWUsRUFBRSx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hYLE9BQU8sRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLG9CQUFvQixFQUFFLHlCQUF5QixFQUFFLHNCQUFzQixFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUscUJBQXFCLEVBQUUsdUJBQXVCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUV2UyxPQUFPLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUU5RSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsMkJBQTJCLEVBQUUsd0JBQXdCLEVBQUUsaUJBQWlCLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDekosT0FBTyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBHRU5FUkFURUQgYnkgcHJvamVuIHdhdGNoIC0gRE8gTk9UIEVESVQuXG4vLyBSZWdlbmVyYXRlZCBmcm9tIHRoZSBleHBvcnRpbmcgbW9kdWxlcyBpbiAuL3NyYy5cbi8vIEhhbmQgZWRpdHMgYXJlIG92ZXJ3cml0dGVuIG9uIHRoZSBuZXh0IHdhdGNoOyB0aGlzIGZpbGUgaXMgcmVhZC1vbmx5LlxuXG5leHBvcnQgY29uc3QgUEFDS0FHRV9JREVOVElGSUVSID0gXCJAZGJ4LXRvb2xzL21vZGVsXCI7XG5leHBvcnQgY29uc3QgUEFDS0FHRV9WRVJTSU9OID0gXCIwLjkuMTgxXCI7XG5leHBvcnQgKiBhcyBiaW5kaW5ncyBmcm9tIFwiLi9zcmMvYmluZGluZ3MudHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3NyYy9iaW5kaW5ncy50c1wiO1xuZXhwb3J0ICogYXMgY2xhc3NlcyBmcm9tIFwiLi9zcmMvY2xhc3Nlcy50c1wiO1xuZXhwb3J0ICogYXMgY2xhc3NpZnkgZnJvbSBcIi4vc3JjL2NsYXNzaWZ5LnRzXCI7XG5leHBvcnQgKiBhcyBmYWxsYmFjayBmcm9tIFwiLi9zcmMvZmFsbGJhY2sudHNcIjtcbmV4cG9ydCAqIGFzIGludm9rZSBmcm9tIFwiLi9zcmMvaW52b2tlLnRzXCI7XG5leHBvcnQgKiBhcyBtZXRhZGF0YUNhY2hlIGZyb20gXCIuL3NyYy9tZXRhZGF0YS1jYWNoZS50c1wiO1xuZXhwb3J0ICogYXMgbWV0YWRhdGFDb250cmFjdCBmcm9tIFwiLi9zcmMvbWV0YWRhdGEtY29udHJhY3QudHNcIjtcbmV4cG9ydCAqIGFzIG1ldGFkYXRhIGZyb20gXCIuL3NyYy9tZXRhZGF0YS50c1wiO1xuZXhwb3J0ICogYXMgbW9kZWxDYXRhbG9nIGZyb20gXCIuL3NyYy9tb2RlbC1jYXRhbG9nLnRzXCI7XG5leHBvcnQgKiBhcyBtb2RlbENsaWVudCBmcm9tIFwiLi9zcmMvbW9kZWwtY2xpZW50LnRzXCI7XG5leHBvcnQgKiBhcyBwb2xpY3kgZnJvbSBcIi4vc3JjL3BvbGljeS50c1wiO1xuZXhwb3J0ICogYXMgcmVhc29uaW5nVHJhbnNsYXRpb24gZnJvbSBcIi4vc3JjL3JlYXNvbmluZy10cmFuc2xhdGlvbi50c1wiO1xuZXhwb3J0ICogYXMgcmVzb2x2ZSBmcm9tIFwiLi9zcmMvcmVzb2x2ZS50c1wiO1xuZXhwb3J0ICogYXMgcmV0aXJlbWVudCBmcm9tIFwiLi9zcmMvcmV0aXJlbWVudC50c1wiO1xuZXhwb3J0ICogYXMgc2VsZWN0aW9uIGZyb20gXCIuL3NyYy9zZWxlY3Rpb24udHNcIjtcbmV4cG9ydCB7IENIQVRfQ0xBU1NfT1JERVIsIE1PREVMX0NMQVNTX09SREVSLCBpc0NoYXRDbGFzcywgcGFyc2VNb2RlbENsYXNzLCBjbGFzc2VzQXRPckJlbG93IH0gZnJvbSBcIi4vc3JjL2NsYXNzZXMudHNcIjtcbmV4cG9ydCB7IHN1cHBvcnRzVG9vbHNCeUZhbWlseSwgZW5kcG9pbnRDYXBhYmlsaXRpZXMsIHZlcnNpb25UdXBsZSwgY29tcGFyZVZlcnNpb25UdXBsZXMsIGNsYXNzaWZ5QnlGYW1pbHksIGNsYXNzaWZ5RW5kcG9pbnRzIH0gZnJvbSBcIi4vc3JjL2NsYXNzaWZ5LnRzXCI7XG5leHBvcnQgeyBtb2RlbHNGb3JDbGFzcywgbW9kZWxGb3JDbGFzcywgRkFMTEJBQ0tfTU9ERUxfSURTIH0gZnJvbSBcIi4vc3JjL2ZhbGxiYWNrLnRzXCI7XG5leHBvcnQgeyBJTlZPQ0FUSU9OU19TVUZGSVgsIFNFUlZJTkdfRU5EUE9JTlRTX1BBVEgsIFJFU1BPTlNFU19QQVRILCBPUEVOX1JFU1BPTlNFU19QQVRILCBDSEFUX0NPTVBMRVRJT05TX1BBVEgsIEFJX0dBVEVXQVlfQ09ERVhfUkVTUE9OU0VTX1BBVEgsIEFOVEhST1BJQ19CQVNFX1BBVEgsIEFOVEhST1BJQ19NRVNTQUdFU19QQVRILCBzZXJ2aW5nRW5kcG9pbnRzVXJsLCBpbnZvY2F0aW9uc1VybCwgcmVzcG9uc2VzVXJsLCBvcGVuUmVzcG9uc2VzVXJsLCBjaGF0Q29tcGxldGlvbnNVcmwsIGFpR2F0ZXdheUNvZGV4UmVzcG9uc2VzVXJsLCBhbnRocm9waWNNZXNzYWdlc1VybCwgYW50aHJvcGljQmFzZVVybCwgcmVzcG9uc2VzVXBzdHJlYW1VcmwsIGF1dGhIZWFkZXJzIH0gZnJvbSBcIi4vc3JjL2ludm9rZS50c1wiO1xuZXhwb3J0IHR5cGUgeyBBdXRoZW50aWNhdGluZ0NsaWVudExpa2UgfSBmcm9tIFwiLi9zcmMvaW52b2tlLnRzXCI7XG5leHBvcnQgeyBjcmVhdGVNZXRhZGF0YUNhY2hlLCBtZXJnZVByZWZlckZyZXNoTGlzdCwgbWVyZ2VQcmVmZXJGcmVzaFJlY29yZCB9IGZyb20gXCIuL3NyYy9tZXRhZGF0YS1jYWNoZS50c1wiO1xuZXhwb3J0IHR5cGUgeyBNZXRhZGF0YUNhY2hlT3B0aW9ucywgTWV0YWRhdGFDYWNoZU1lcmdlSW5wdXQsIE1ldGFkYXRhQ2FjaGUgfSBmcm9tIFwiLi9zcmMvbWV0YWRhdGEtY2FjaGUudHNcIjtcbmV4cG9ydCB7IE1PREVMX01FVEFEQVRBX1RUTF9NUywgUkVUSVJFRF9NT0RFTFNfVVJMLCBPUEVOQUlfUkVTUE9OU0VTX01PREVMU19VUkwsIFdFQl9TRUFSQ0hfTU9ERUxTX1VSTCwgTU9ERUxfUkFURV9MSU1JVFNfVVJMLCBRVUVSWV9SRUFTT05fTU9ERUxTX1VSTCwgTU9ERUxTX0RFVl9BUElfVVJMLCBNT0RFTFBBUkFNU19ERVZfTU9ERUxTX1VSTCB9IGZyb20gXCIuL3NyYy9tZXRhZGF0YS1jb250cmFjdC50c1wiO1xuZXhwb3J0IHR5cGUgeyBSZXRpcmVkTW9kZWxzU25hcHNob3QsIE1vZGVsQ2FwYWJpbGl0eUNhdGFsb2d1ZSwgTW9kZWxDYXBhYmlsaXRpZXNTbmFwc2hvdCwgTW9kZWxSYXRlTGltaXRDYXRhbG9ndWUsIE1vZGVsUmF0ZUxpbWl0c1NuYXBzaG90LCBSZWFzb25pbmdNb2RlbHNTbmFwc2hvdCwgTW9kZWxzRGV2Q2FwYWJpbGl0eUNhdGFsb2d1ZSwgTW9kZWxzRGV2U25hcHNob3QsIE1vZGVsUGFyYW1zQ2F0YWxvZ3VlLCBNb2RlbFBhcmFtc1NuYXBzaG90IH0gZnJvbSBcIi4vc3JjL21ldGFkYXRhLWNvbnRyYWN0LnRzXCI7XG5leHBvcnQgeyByZWZyZXNoTW9kZWxNZXRhZGF0YSwgaHlkcmF0ZU1vZGVsTWV0YWRhdGEsIHJlYXNvbmluZ01vZGVsQ2F0YWxvZ3VlLCBsZWFybmVkUmVhc29uaW5nQ2F0YWxvZ3VlLCByZW1lbWJlclJlYXNvbmluZ0xldmVscywgbGVhcm5SZWFzb25pbmdMZXZlbHNGcm9tRXJyb3IsIG1vZGVsQ2FwYWJpbGl0aWVzRm9yLCBtb2RlbFRlbXBlcmF0dXJlU3VwcG9ydEZvciwgbW9kZWxSYXRlTGltaXRzRm9yLCBtb2RlbFJlYXNvbmluZ0xldmVsc0ZvciwgbW9kZWxNZXRhZGF0YUZvciwgbW9kZWxNZXRhZGF0YUdlbmVyYXRlZEF0IH0gZnJvbSBcIi4vc3JjL21ldGFkYXRhLnRzXCI7XG5leHBvcnQgeyBERUZBVUxUX01PREVMX0NBQ0hFX1RUTF9NUywgREVGQVVMVF9GVVpaWV9USFJFU0hPTEQsIGxpc3RTZXJ2aW5nRW5kcG9pbnRzLCBsaXN0U2VydmluZ0VuZHBvaW50c1VuY2FjaGVkLCBjbGVhclNlcnZpbmdFbmRwb2ludHNDYWNoZSwgc2VhcmNoU2VydmluZ0VuZHBvaW50cywgcmVzb2x2ZU1vZGVsSWQgfSBmcm9tIFwiLi9zcmMvbW9kZWwtY2F0YWxvZy50c1wiO1xuZXhwb3J0IHR5cGUgeyBXb3Jrc3BhY2VDbGllbnRMaWtlLCBMaXN0U2VydmluZ0VuZHBvaW50c09wdGlvbnMgfSBmcm9tIFwiLi9zcmMvbW9kZWwtY2F0YWxvZy50c1wiO1xuZXhwb3J0IHsgREVGQVVMVF9NT0RFTF9DTElFTlRfQ0FDSEVfVFRMX01TLCBjcmVhdGVNb2RlbENsaWVudCwgbGlzdFByb2ZpbGVzLCBjcmVhdGVNb2RlbENsaWVudFdpdGhEYXRhYnJpY2tzQ2xpZW50LCBjcmVhdGVNb2RlbENsaWVudFdpdGhEZXBlbmRlbmNpZXMgfSBmcm9tIFwiLi9zcmMvbW9kZWwtY2xpZW50LnRzXCI7XG5leHBvcnQgdHlwZSB7IE1vZGVsQXV0aE9wdGlvbnMsIE1vZGVsQ2xpZW50T3B0aW9ucywgTW9kZWxDbGllbnRTdGF0dXMsIE1vZGVsUHJvdG9jb2wsIE1vZGVsUm91dGVJbnB1dCwgTW9kZWxSb3V0ZSwgTW9kZWxDbGllbnQgfSBmcm9tIFwiLi9zcmMvbW9kZWwtY2xpZW50LnRzXCI7XG5leHBvcnQgeyBNb2RlbEZhbWlseSwgbW9kZWxGYW1pbHksIG1vZGVsRmFtaWx5UmFuaywgbW9kZWxTZWFyY2hRdWVyeSwgaW5oZXJpdHNOYXRpdmVXZWJTZWFyY2gsIGlzRm91bmRhdGlvbk1vZGVsSWRlbnRpdHksIG1vZGVsU2VydmljZU5hbWUsIHN5c3RlbU1vZGVsU2VydmljZSwgcHJlZmVyc1N5c3RlbU1vZGVsU2VydmljZSwgaXNPcGVuV2VpZ2h0c0dwdCwgaXNPcGVuV2VpZ2h0c01vZGVsLCBtb2RlbFJlYXNvbmluZ0VmZm9ydHMsIG1vZGVsU3VwcG9ydHNUb29scywgZW5kcG9pbnRTdXBwb3J0c1Rvb2xzLCBtb2RlbFNlcnZpbmdBcGksIGNoYXRUb29sUmVhc29uaW5nRWZmb3J0LCBtb2RlbFNlcnZpY2VOYW1lcyB9IGZyb20gXCIuL3NyYy9wb2xpY3kudHNcIjtcbmV4cG9ydCB7IFJlYXNvbmluZ0xldmVsLCBSRUFTT05JTkdfTEVWRUxTLCBwYXJzZVJlYXNvbmluZywgcGFyc2VSZWFzb25pbmdMZXZlbHMsIGRvY3VtZW50ZWRSZWFzb25pbmdMZXZlbHMsIGRlZmF1bHRSZWFzb25pbmdMZXZlbHMsIHJlYXNvbmluZ0xldmVsc0ZvciwgZm9ybWF0UmVhc29uaW5nLCByZW1hcFJlYXNvbmluZywgYWRhcHRSZXF1ZXN0UmVhc29uaW5nLCBub3JtYWxpemVSZWFzb25pbmdUb2tlbiwgdW5pcXVlUmVhc29uaW5nTGV2ZWxzIH0gZnJvbSBcIi4vc3JjL3JlYXNvbmluZy10cmFuc2xhdGlvbi50c1wiO1xuZXhwb3J0IHR5cGUgeyBBZGFwdGVkUmVxdWVzdFJlYXNvbmluZyB9IGZyb20gXCIuL3NyYy9yZWFzb25pbmctdHJhbnNsYXRpb24udHNcIjtcbmV4cG9ydCB7IHJhbmtNb2RlbElkTGl2ZSwgc2VhcmNoTW9kZWxzLCBzZWxlY3RNb2RlbCB9IGZyb20gXCIuL3NyYy9yZXNvbHZlLnRzXCI7XG5leHBvcnQgdHlwZSB7IFNlbGVjdE1vZGVsSW5wdXQsIFNlYXJjaE1vZGVsc0lucHV0IH0gZnJvbSBcIi4vc3JjL3Jlc29sdmUudHNcIjtcbmV4cG9ydCB7IENPTU1JVFRFRF9SRVRJUkVEX01PREVMUywgUkVUSVJFRF9NT0RFTFNfR0VORVJBVEVEX0FULCByZXBsYWNlUmV0aXJlZE1vZGVsTmFtZXMsIHJldGlyZWRNb2RlbE5hbWVzLCBtb2RlbFN0YXR1c0ZvciB9IGZyb20gXCIuL3NyYy9yZXRpcmVtZW50LnRzXCI7XG5leHBvcnQgeyBsb29rdXBNb2RlbHMsIHJhbmtNb2RlbElkLCByZXNvbHZlTW9kZWwgfSBmcm9tIFwiLi9zcmMvc2VsZWN0aW9uLnRzXCI7XG5leHBvcnQgdHlwZSB7IE1vZGVsU2VsZWN0aW9uUG9saWN5T3B0aW9ucyB9IGZyb20gXCIuL3NyYy9zZWxlY3Rpb24udHNcIjtcbiJdfQ==
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxrQkFBa0IsQ0FBQztBQUNyRCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxRQUFRLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxPQUFPLEtBQUssT0FBTyxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sS0FBSyxRQUFRLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxLQUFLLFFBQVEsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxhQUFhLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxLQUFLLGdCQUFnQixNQUFNLDRCQUE0QixDQUFDO0FBQy9ELE9BQU8sS0FBSyxRQUFRLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxLQUFLLFlBQVksTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEtBQUssV0FBVyxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sS0FBSyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLG9CQUFvQixNQUFNLGdDQUFnQyxDQUFDO0FBQ3ZFLE9BQU8sS0FBSyxPQUFPLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxLQUFLLFVBQVUsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRCxPQUFPLEtBQUssU0FBUyxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDdkgsT0FBTyxFQUFFLHFCQUFxQixFQUFFLG9CQUFvQixFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3pKLE9BQU8sRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDdEYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLHNCQUFzQixFQUFFLGNBQWMsRUFBRSxtQkFBbUIsRUFBRSxxQkFBcUIsRUFBRSwrQkFBK0IsRUFBRSxtQkFBbUIsRUFBRSx1QkFBdUIsRUFBRSxtQkFBbUIsRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLDBCQUEwQixFQUFFLG9CQUFvQixFQUFFLGdCQUFnQixFQUFFLG9CQUFvQixFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXhaLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxvQkFBb0IsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRTVHLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxrQkFBa0IsRUFBRSwyQkFBMkIsRUFBRSxxQkFBcUIsRUFBRSxxQkFBcUIsRUFBRSx1QkFBdUIsRUFBRSxrQkFBa0IsRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRTNPLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxvQkFBb0IsRUFBRSx1QkFBdUIsRUFBRSx5QkFBeUIsRUFBRSx1QkFBdUIsRUFBRSw2QkFBNkIsRUFBRSxvQkFBb0IsRUFBRSwwQkFBMEIsRUFBRSxrQkFBa0IsRUFBRSx1QkFBdUIsRUFBRSxnQkFBZ0IsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3RVLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSx1QkFBdUIsRUFBRSxvQkFBb0IsRUFBRSw0QkFBNEIsRUFBRSwwQkFBMEIsRUFBRSxzQkFBc0IsRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUVyTixPQUFPLEVBQUUsaUNBQWlDLEVBQUUsaUJBQWlCLEVBQUUsWUFBWSxFQUFFLHFDQUFxQyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFckwsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLHVCQUF1QixFQUFFLHlCQUF5QixFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLHlCQUF5QixFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLHFCQUFxQixFQUFFLGtCQUFrQixFQUFFLHFCQUFxQixFQUFFLGVBQWUsRUFBRSx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hYLE9BQU8sRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLG9CQUFvQixFQUFFLHlCQUF5QixFQUFFLHNCQUFzQixFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUscUJBQXFCLEVBQUUsdUJBQXVCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUV2UyxPQUFPLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUU5RSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsMkJBQTJCLEVBQUUsd0JBQXdCLEVBQUUsaUJBQWlCLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDekosT0FBTyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBHRU5FUkFURUQgYnkgcHJvamVuIHdhdGNoIC0gRE8gTk9UIEVESVQuXG4vLyBSZWdlbmVyYXRlZCBmcm9tIHRoZSBleHBvcnRpbmcgbW9kdWxlcyBpbiAuL3NyYy5cbi8vIEhhbmQgZWRpdHMgYXJlIG92ZXJ3cml0dGVuIG9uIHRoZSBuZXh0IHdhdGNoOyB0aGlzIGZpbGUgaXMgcmVhZC1vbmx5LlxuXG5leHBvcnQgY29uc3QgUEFDS0FHRV9JREVOVElGSUVSID0gXCJAZGJ4LXRvb2xzL21vZGVsXCI7XG5leHBvcnQgY29uc3QgUEFDS0FHRV9WRVJTSU9OID0gXCIwLjkuMTg0XCI7XG5leHBvcnQgKiBhcyBiaW5kaW5ncyBmcm9tIFwiLi9zcmMvYmluZGluZ3MudHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3NyYy9iaW5kaW5ncy50c1wiO1xuZXhwb3J0ICogYXMgY2xhc3NlcyBmcm9tIFwiLi9zcmMvY2xhc3Nlcy50c1wiO1xuZXhwb3J0ICogYXMgY2xhc3NpZnkgZnJvbSBcIi4vc3JjL2NsYXNzaWZ5LnRzXCI7XG5leHBvcnQgKiBhcyBmYWxsYmFjayBmcm9tIFwiLi9zcmMvZmFsbGJhY2sudHNcIjtcbmV4cG9ydCAqIGFzIGludm9rZSBmcm9tIFwiLi9zcmMvaW52b2tlLnRzXCI7XG5leHBvcnQgKiBhcyBtZXRhZGF0YUNhY2hlIGZyb20gXCIuL3NyYy9tZXRhZGF0YS1jYWNoZS50c1wiO1xuZXhwb3J0ICogYXMgbWV0YWRhdGFDb250cmFjdCBmcm9tIFwiLi9zcmMvbWV0YWRhdGEtY29udHJhY3QudHNcIjtcbmV4cG9ydCAqIGFzIG1ldGFkYXRhIGZyb20gXCIuL3NyYy9tZXRhZGF0YS50c1wiO1xuZXhwb3J0ICogYXMgbW9kZWxDYXRhbG9nIGZyb20gXCIuL3NyYy9tb2RlbC1jYXRhbG9nLnRzXCI7XG5leHBvcnQgKiBhcyBtb2RlbENsaWVudCBmcm9tIFwiLi9zcmMvbW9kZWwtY2xpZW50LnRzXCI7XG5leHBvcnQgKiBhcyBwb2xpY3kgZnJvbSBcIi4vc3JjL3BvbGljeS50c1wiO1xuZXhwb3J0ICogYXMgcmVhc29uaW5nVHJhbnNsYXRpb24gZnJvbSBcIi4vc3JjL3JlYXNvbmluZy10cmFuc2xhdGlvbi50c1wiO1xuZXhwb3J0ICogYXMgcmVzb2x2ZSBmcm9tIFwiLi9zcmMvcmVzb2x2ZS50c1wiO1xuZXhwb3J0ICogYXMgcmV0aXJlbWVudCBmcm9tIFwiLi9zcmMvcmV0aXJlbWVudC50c1wiO1xuZXhwb3J0ICogYXMgc2VsZWN0aW9uIGZyb20gXCIuL3NyYy9zZWxlY3Rpb24udHNcIjtcbmV4cG9ydCB7IENIQVRfQ0xBU1NfT1JERVIsIE1PREVMX0NMQVNTX09SREVSLCBpc0NoYXRDbGFzcywgcGFyc2VNb2RlbENsYXNzLCBjbGFzc2VzQXRPckJlbG93IH0gZnJvbSBcIi4vc3JjL2NsYXNzZXMudHNcIjtcbmV4cG9ydCB7IHN1cHBvcnRzVG9vbHNCeUZhbWlseSwgZW5kcG9pbnRDYXBhYmlsaXRpZXMsIHZlcnNpb25UdXBsZSwgY29tcGFyZVZlcnNpb25UdXBsZXMsIGNsYXNzaWZ5QnlGYW1pbHksIGNsYXNzaWZ5RW5kcG9pbnRzIH0gZnJvbSBcIi4vc3JjL2NsYXNzaWZ5LnRzXCI7XG5leHBvcnQgeyBtb2RlbHNGb3JDbGFzcywgbW9kZWxGb3JDbGFzcywgRkFMTEJBQ0tfTU9ERUxfSURTIH0gZnJvbSBcIi4vc3JjL2ZhbGxiYWNrLnRzXCI7XG5leHBvcnQgeyBJTlZPQ0FUSU9OU19TVUZGSVgsIFNFUlZJTkdfRU5EUE9JTlRTX1BBVEgsIFJFU1BPTlNFU19QQVRILCBPUEVOX1JFU1BPTlNFU19QQVRILCBDSEFUX0NPTVBMRVRJT05TX1BBVEgsIEFJX0dBVEVXQVlfQ09ERVhfUkVTUE9OU0VTX1BBVEgsIEFOVEhST1BJQ19CQVNFX1BBVEgsIEFOVEhST1BJQ19NRVNTQUdFU19QQVRILCBzZXJ2aW5nRW5kcG9pbnRzVXJsLCBpbnZvY2F0aW9uc1VybCwgcmVzcG9uc2VzVXJsLCBvcGVuUmVzcG9uc2VzVXJsLCBjaGF0Q29tcGxldGlvbnNVcmwsIGFpR2F0ZXdheUNvZGV4UmVzcG9uc2VzVXJsLCBhbnRocm9waWNNZXNzYWdlc1VybCwgYW50aHJvcGljQmFzZVVybCwgcmVzcG9uc2VzVXBzdHJlYW1VcmwsIGF1dGhIZWFkZXJzIH0gZnJvbSBcIi4vc3JjL2ludm9rZS50c1wiO1xuZXhwb3J0IHR5cGUgeyBBdXRoZW50aWNhdGluZ0NsaWVudExpa2UgfSBmcm9tIFwiLi9zcmMvaW52b2tlLnRzXCI7XG5leHBvcnQgeyBjcmVhdGVNZXRhZGF0YUNhY2hlLCBtZXJnZVByZWZlckZyZXNoTGlzdCwgbWVyZ2VQcmVmZXJGcmVzaFJlY29yZCB9IGZyb20gXCIuL3NyYy9tZXRhZGF0YS1jYWNoZS50c1wiO1xuZXhwb3J0IHR5cGUgeyBNZXRhZGF0YUNhY2hlT3B0aW9ucywgTWV0YWRhdGFDYWNoZU1lcmdlSW5wdXQsIE1ldGFkYXRhQ2FjaGUgfSBmcm9tIFwiLi9zcmMvbWV0YWRhdGEtY2FjaGUudHNcIjtcbmV4cG9ydCB7IE1PREVMX01FVEFEQVRBX1RUTF9NUywgUkVUSVJFRF9NT0RFTFNfVVJMLCBPUEVOQUlfUkVTUE9OU0VTX01PREVMU19VUkwsIFdFQl9TRUFSQ0hfTU9ERUxTX1VSTCwgTU9ERUxfUkFURV9MSU1JVFNfVVJMLCBRVUVSWV9SRUFTT05fTU9ERUxTX1VSTCwgTU9ERUxTX0RFVl9BUElfVVJMLCBNT0RFTFBBUkFNU19ERVZfTU9ERUxTX1VSTCB9IGZyb20gXCIuL3NyYy9tZXRhZGF0YS1jb250cmFjdC50c1wiO1xuZXhwb3J0IHR5cGUgeyBSZXRpcmVkTW9kZWxzU25hcHNob3QsIE1vZGVsQ2FwYWJpbGl0eUNhdGFsb2d1ZSwgTW9kZWxDYXBhYmlsaXRpZXNTbmFwc2hvdCwgTW9kZWxSYXRlTGltaXRDYXRhbG9ndWUsIE1vZGVsUmF0ZUxpbWl0c1NuYXBzaG90LCBSZWFzb25pbmdNb2RlbHNTbmFwc2hvdCwgTW9kZWxzRGV2Q2FwYWJpbGl0eUNhdGFsb2d1ZSwgTW9kZWxzRGV2U25hcHNob3QsIE1vZGVsUGFyYW1zQ2F0YWxvZ3VlLCBNb2RlbFBhcmFtc1NuYXBzaG90IH0gZnJvbSBcIi4vc3JjL21ldGFkYXRhLWNvbnRyYWN0LnRzXCI7XG5leHBvcnQgeyByZWZyZXNoTW9kZWxNZXRhZGF0YSwgaHlkcmF0ZU1vZGVsTWV0YWRhdGEsIHJlYXNvbmluZ01vZGVsQ2F0YWxvZ3VlLCBsZWFybmVkUmVhc29uaW5nQ2F0YWxvZ3VlLCByZW1lbWJlclJlYXNvbmluZ0xldmVscywgbGVhcm5SZWFzb25pbmdMZXZlbHNGcm9tRXJyb3IsIG1vZGVsQ2FwYWJpbGl0aWVzRm9yLCBtb2RlbFRlbXBlcmF0dXJlU3VwcG9ydEZvciwgbW9kZWxSYXRlTGltaXRzRm9yLCBtb2RlbFJlYXNvbmluZ0xldmVsc0ZvciwgbW9kZWxNZXRhZGF0YUZvciwgbW9kZWxNZXRhZGF0YUdlbmVyYXRlZEF0IH0gZnJvbSBcIi4vc3JjL21ldGFkYXRhLnRzXCI7XG5leHBvcnQgeyBERUZBVUxUX01PREVMX0NBQ0hFX1RUTF9NUywgREVGQVVMVF9GVVpaWV9USFJFU0hPTEQsIGxpc3RTZXJ2aW5nRW5kcG9pbnRzLCBsaXN0U2VydmluZ0VuZHBvaW50c1VuY2FjaGVkLCBjbGVhclNlcnZpbmdFbmRwb2ludHNDYWNoZSwgc2VhcmNoU2VydmluZ0VuZHBvaW50cywgcmVzb2x2ZU1vZGVsSWQgfSBmcm9tIFwiLi9zcmMvbW9kZWwtY2F0YWxvZy50c1wiO1xuZXhwb3J0IHR5cGUgeyBXb3Jrc3BhY2VDbGllbnRMaWtlLCBMaXN0U2VydmluZ0VuZHBvaW50c09wdGlvbnMgfSBmcm9tIFwiLi9zcmMvbW9kZWwtY2F0YWxvZy50c1wiO1xuZXhwb3J0IHsgREVGQVVMVF9NT0RFTF9DTElFTlRfQ0FDSEVfVFRMX01TLCBjcmVhdGVNb2RlbENsaWVudCwgbGlzdFByb2ZpbGVzLCBjcmVhdGVNb2RlbENsaWVudFdpdGhEYXRhYnJpY2tzQ2xpZW50LCBjcmVhdGVNb2RlbENsaWVudFdpdGhEZXBlbmRlbmNpZXMgfSBmcm9tIFwiLi9zcmMvbW9kZWwtY2xpZW50LnRzXCI7XG5leHBvcnQgdHlwZSB7IE1vZGVsQXV0aE9wdGlvbnMsIE1vZGVsQ2xpZW50T3B0aW9ucywgTW9kZWxDbGllbnRTdGF0dXMsIE1vZGVsUHJvdG9jb2wsIE1vZGVsUm91dGVJbnB1dCwgTW9kZWxSb3V0ZSwgTW9kZWxDbGllbnQgfSBmcm9tIFwiLi9zcmMvbW9kZWwtY2xpZW50LnRzXCI7XG5leHBvcnQgeyBNb2RlbEZhbWlseSwgbW9kZWxGYW1pbHksIG1vZGVsRmFtaWx5UmFuaywgbW9kZWxTZWFyY2hRdWVyeSwgaW5oZXJpdHNOYXRpdmVXZWJTZWFyY2gsIGlzRm91bmRhdGlvbk1vZGVsSWRlbnRpdHksIG1vZGVsU2VydmljZU5hbWUsIHN5c3RlbU1vZGVsU2VydmljZSwgcHJlZmVyc1N5c3RlbU1vZGVsU2VydmljZSwgaXNPcGVuV2VpZ2h0c0dwdCwgaXNPcGVuV2VpZ2h0c01vZGVsLCBtb2RlbFJlYXNvbmluZ0VmZm9ydHMsIG1vZGVsU3VwcG9ydHNUb29scywgZW5kcG9pbnRTdXBwb3J0c1Rvb2xzLCBtb2RlbFNlcnZpbmdBcGksIGNoYXRUb29sUmVhc29uaW5nRWZmb3J0LCBtb2RlbFNlcnZpY2VOYW1lcyB9IGZyb20gXCIuL3NyYy9wb2xpY3kudHNcIjtcbmV4cG9ydCB7IFJlYXNvbmluZ0xldmVsLCBSRUFTT05JTkdfTEVWRUxTLCBwYXJzZVJlYXNvbmluZywgcGFyc2VSZWFzb25pbmdMZXZlbHMsIGRvY3VtZW50ZWRSZWFzb25pbmdMZXZlbHMsIGRlZmF1bHRSZWFzb25pbmdMZXZlbHMsIHJlYXNvbmluZ0xldmVsc0ZvciwgZm9ybWF0UmVhc29uaW5nLCByZW1hcFJlYXNvbmluZywgYWRhcHRSZXF1ZXN0UmVhc29uaW5nLCBub3JtYWxpemVSZWFzb25pbmdUb2tlbiwgdW5pcXVlUmVhc29uaW5nTGV2ZWxzIH0gZnJvbSBcIi4vc3JjL3JlYXNvbmluZy10cmFuc2xhdGlvbi50c1wiO1xuZXhwb3J0IHR5cGUgeyBBZGFwdGVkUmVxdWVzdFJlYXNvbmluZyB9IGZyb20gXCIuL3NyYy9yZWFzb25pbmctdHJhbnNsYXRpb24udHNcIjtcbmV4cG9ydCB7IHJhbmtNb2RlbElkTGl2ZSwgc2VhcmNoTW9kZWxzLCBzZWxlY3RNb2RlbCB9IGZyb20gXCIuL3NyYy9yZXNvbHZlLnRzXCI7XG5leHBvcnQgdHlwZSB7IFNlbGVjdE1vZGVsSW5wdXQsIFNlYXJjaE1vZGVsc0lucHV0IH0gZnJvbSBcIi4vc3JjL3Jlc29sdmUudHNcIjtcbmV4cG9ydCB7IENPTU1JVFRFRF9SRVRJUkVEX01PREVMUywgUkVUSVJFRF9NT0RFTFNfR0VORVJBVEVEX0FULCByZXBsYWNlUmV0aXJlZE1vZGVsTmFtZXMsIHJldGlyZWRNb2RlbE5hbWVzLCBtb2RlbFN0YXR1c0ZvciB9IGZyb20gXCIuL3NyYy9yZXRpcmVtZW50LnRzXCI7XG5leHBvcnQgeyBsb29rdXBNb2RlbHMsIHJhbmtNb2RlbElkLCByZXNvbHZlTW9kZWwgfSBmcm9tIFwiLi9zcmMvc2VsZWN0aW9uLnRzXCI7XG5leHBvcnQgdHlwZSB7IE1vZGVsU2VsZWN0aW9uUG9saWN5T3B0aW9ucyB9IGZyb20gXCIuL3NyYy9zZWxlY3Rpb24udHNcIjtcbiJdfQ==
@@ -496,4 +496,4 @@ function number(value) {
496
496
  function sortRecord(record) {
497
497
  return Object.fromEntries(Object.entries(record).sort(([left], [right]) => left.localeCompare(right)));
498
498
  }
499
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiX21ldGFkYXRhLWdlbmVyYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fbWV0YWRhdGEtZ2VuZXJhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQW1CLE1BQU0sU0FBUyxDQUFDO0FBQ2hELE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFXeEIsT0FBTyxFQUFFLHVCQUF1QixFQUFFLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3hFLE9BQU8sRUFDTCxjQUFjLEVBQ2QsZ0JBQWdCLEVBRWhCLHFCQUFxQixHQUN0QixNQUFNLDRCQUE0QixDQUFDO0FBSXBDLE1BQU0sdUJBQXVCLEdBQzNCLDBGQUEwRixDQUFDO0FBQzdGLE1BQU0saUJBQWlCLEdBQ3JCLHdKQUF3SixDQUFDO0FBQzNKLE1BQU0sYUFBYSxHQUFHLHdEQUF3RCxDQUFDO0FBQy9FLE1BQU0sa0JBQWtCLEdBQUcscUNBQXFDLENBQUM7QUFDakUsc0ZBQXNGO0FBQ3RGLE1BQU0sMkJBQTJCLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDMUMsTUFBTTtJQUNOLFNBQVM7SUFDVCxLQUFLO0lBQ0wsUUFBUTtJQUNSLE1BQU07SUFDTixPQUFPO0lBQ1AsWUFBWTtJQUNaLFdBQVc7SUFDWCxPQUFPO0lBQ1AsWUFBWTtJQUNaLEtBQUs7SUFDTCxTQUFTO0lBQ1QsVUFBVTtDQUNYLENBQUMsQ0FBQztBQUNILE1BQU0sc0JBQXNCLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDckMsK0NBQStDO0lBQy9DLHNCQUFzQjtJQUN0QixrQkFBa0I7SUFDbEIsa0JBQWtCO0NBQ25CLENBQUMsQ0FBQztBQUNILE1BQU0sNkJBQTZCLEdBQUcsZ0RBQWdELENBQUM7QUFDdkYsTUFBTSwyQkFBMkIsR0FBRyx5QkFBeUIsQ0FBQztBQUU5RCxNQUFNLG9CQUFvQixHQUFHLENBQUM7S0FDM0IsTUFBTSxDQUFDO0lBQ04sRUFB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QUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN4RCxPQUFPLE1BQU0sQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDckUsQ0FBQztBQUVELFNBQVMsVUFBVSxDQUFJLE1BQW1DO0lBQ3hELE9BQU8sTUFBTSxDQUFDLFdBQVcsQ0FDdkIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FDNUUsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBsb2FkLCB0eXBlIENoZWVyaW9BUEkgfSBmcm9tIFwiY2hlZXJpb1wiO1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcblxuaW1wb3J0IHR5cGUge1xuICBNb2RlbFBhcmFtc1NuYXBzaG90LFxuICBNb2RlbENhcGFiaWxpdGllc1NuYXBzaG90LFxuICBNb2RlbFJhdGVMaW1pdENhdGFsb2d1ZSxcbiAgTW9kZWxSYXRlTGltaXRzU25hcHNob3QsXG4gIE1vZGVsc0RldlNuYXBzaG90LFxuICBSZWFzb25pbmdNb2RlbHNTbmFwc2hvdCxcbiAgUmV0aXJlZE1vZGVsc1NuYXBzaG90LFxufSBmcm9tIFwiLi9tZXRhZGF0YS1jb250cmFjdC50c1wiO1xuaW1wb3J0IHsgaW5oZXJpdHNOYXRpdmVXZWJTZWFyY2gsIG1vZGVsU2VhcmNoUXVlcnkgfSBmcm9tIFwiLi9wb2xpY3kudHNcIjtcbmltcG9ydCB7XG4gIHBhcnNlUmVhc29uaW5nLFxuICBSRUFTT05JTkdfTEVWRUxTLFxuICB0eXBlIFJlYXNvbmluZ0xldmVsLFxuICB1bmlxdWVSZWFzb25pbmdMZXZlbHMsXG59IGZyb20gXCIuL3JlYXNvbmluZy10cmFuc2xhdGlvbi50c1wiO1xuXG50eXBlIFNlbGVjdGlvbiA9IFJldHVyblR5cGU8Q2hlZXJpb0FQST47XG5cbmNvbnN0IEFDQ0VQVEVEX1ZBTFVFU19QQVRURVJOID1cbiAgLyg/OmFjY2VwdGVkIHZhbHVlcyg/OlxccythcmV8XFxzK3ZhcnkpP3xhY2NlcHRzKD86XFxzK3ZhbHVlcz8oPzpcXHMrb2YpPyk/KVxccyo6P1xccyooW14uXSspL2dpO1xuY29uc3QgRk9SX01PREVMX1BBVFRFUk4gPVxuICAvRm9yXFxzKyhbXixdKz8pLFxccysoPzp0aGlzIHBhcmFtZXRlciBhY2NlcHRzKD86XFxzK3ZhbHVlcz9cXHMrb2YpP3x0aGUgKD86YD9yZWFzb25pbmdfZWZmb3J0YD98ZWZmb3J0KSBwYXJhbWV0ZXIgYWNjZXB0cyg/Olxccyt2YWx1ZXM/XFxzK29mKT8pXFxzKihbXi5dKykvZ2k7XG5jb25zdCBUT0tFTl9QQVRURVJOID0gLycoW14nXSspJ3xcIihbXlwiXSspXCJ8YChbXmBdKylgfFxcYihbYS16XVthLXowLTlfLV0qKVxcYi9naTtcbmNvbnN0IE1PREVMX0NPREVfUEFUVEVSTiA9IC9cXGJkYXRhYnJpY2tzLVthLXowLTldW2EtejAtOS5fLV0qL2dpO1xuLyoqIFdpcmUgdG9rZW5zIGFkdmVydGlzZWQgaW4gRGF0YWJyaWNrcyBkb2NzOyBleGNsdWRlcyBwcm9zZSB3b3JkcyBsaWtlIGBkZWZhdWx0YC4gKi9cbmNvbnN0IERPQ1VNRU5UQVRJT05fRUZGT1JUX1RPS0VOUyA9IG5ldyBTZXQoW1xuICBcIm5vbmVcIixcbiAgXCJtaW5pbWFsXCIsXG4gIFwibG93XCIsXG4gIFwibWVkaXVtXCIsXG4gIFwiaGlnaFwiLFxuICBcInhoaWdoXCIsXG4gIFwiZXh0cmEtaGlnaFwiLFxuICBcImV4dHJhaGlnaFwiLFxuICBcInVsdHJhXCIsXG4gIFwidWx0cmEtaGlnaFwiLFxuICBcIm1heFwiLFxuICBcIm1heGltdW1cIixcbiAgXCJkaXNhYmxlZFwiLFxuXSk7XG5jb25zdCBFRkZPUlRfUEFSQU1FVEVSX1BBVEhTID0gbmV3IFNldChbXG4gIFwiZ2VuZXJhdGlvbkNvbmZpZy50aGlua2luZ0NvbmZpZy50aGlua2luZ0xldmVsXCIsXG4gIFwib3V0cHV0X2NvbmZpZy5lZmZvcnRcIixcbiAgXCJyZWFzb25pbmcuZWZmb3J0XCIsXG4gIFwicmVhc29uaW5nX2VmZm9ydFwiLFxuXSk7XG5jb25zdCBFWFRFUk5BTF9BTElBU19TVUZGSVhfUEFUVEVSTiA9IC8tKD86Y3VzdG9tdG9vbHN8bGF0ZXN0fHByZXZpZXd8c3Vic2NyaXB0aW9uKSQvaTtcbmNvbnN0IEVYVEVSTkFMX0RBVEVfVE9LRU5fUEFUVEVSTiA9IC8tKD86MTl8MjApXFxkezZ9KD89LXwkKS9nO1xuXG5jb25zdCBNb2RlbHNEZXZNb2RlbFNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgaWQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJQcm92aWRlci1zcGVjaWZpYyBtb2RlbCBpZGVudGlmaWVyLlwiKSxcbiAgICBjYW5vbmljYWxfbW9kZWxfaWQ6IHpcbiAgICAgIC5zdHJpbmcoKVxuICAgICAgLm9wdGlvbmFsKClcbiAgICAgIC5kZXNjcmliZShcIlByb3ZpZGVyLWluZGVwZW5kZW50IGNhbm9uaWNhbCBtb2RlbCBpZGVudGlmaWVyLlwiKSxcbiAgICByZWFzb25pbmc6IHouYm9vbGVhbigpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJXaGV0aGVyIHRoZSBtb2RlbCBzdXBwb3J0cyByZWFzb25pbmcuXCIpLFxuICAgIHRvb2xfY2FsbDogei5ib29sZWFuKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIldoZXRoZXIgdGhlIG1vZGVsIHN1cHBvcnRzIHRvb2wgY2FsbHMuXCIpLFxuICAgIHN0cnVjdHVyZWRfb3V0cHV0OiB6XG4gICAgICAuYm9vbGVhbigpXG4gICAgICAub3B0aW9uYWwoKVxuICAgICAgLmRlc2NyaWJlKFwiV2hldGhlciB0aGUgbW9kZWwgc3VwcG9ydHMgc3RydWN0dXJlZCBvdXRwdXQuXCIpLFxuICAgIHRlbXBlcmF0dXJlOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiV2hldGhlciB0aGUgbW9kZWwgYWNjZXB0cyB0ZW1wZXJhdHVyZS5cIiksXG4gICAgbW9kYWxpdGllczogelxuICAgICAgLm9iamVjdCh7XG4gICAgICAgIGlucHV0OiB6LmFycmF5KHouc3RyaW5nKCkpLmRlc2NyaWJlKFwiQWNjZXB0ZWQgaW5wdXQgbW9kYWxpdGllcy5cIiksXG4gICAgICB9KVxuICAgICAgLnBhc3N0aHJvdWdoKClcbiAgICAgIC5vcHRpb25hbCgpXG4gICAgICAuZGVzY3JpYmUoXCJNb2RlbCBpbnB1dCBhbmQgb3V0cHV0IG1vZGFsaXRpZXMuXCIpLFxuICB9KVxuICAucGFzc3Rocm91Z2goKVxuICAuZGVzY3JpYmUoXCJPbmUgcHJvdmlkZXIgbW9kZWwgZnJvbSBtb2RlbHMuZGV2LlwiKTtcblxuY29uc3QgTW9kZWxzRGV2QXBpU2NoZW1hID0gelxuICAucmVjb3JkKFxuICAgIHouc3RyaW5nKCksXG4gICAgelxuICAgICAgLm9iamVjdCh7XG4gICAgICAgIG1vZGVsczogelxuICAgICAgICAgIC5yZWNvcmQoei5zdHJpbmcoKSwgTW9kZWxzRGV2TW9kZWxTY2hlbWEpXG4gICAgICAgICAgLmRlc2NyaWJlKFwiTW9kZWxzIGF2YWlsYWJsZSB0aHJvdWdoIHRoaXMgcHJvdmlkZXIuXCIpLFxuICAgICAgfSlcbiAgICAgIC5wYXNzdGhyb3VnaCgpXG4gICAgICAuZGVzY3JpYmUoXCJPbmUgbW9kZWxzLmRldiBwcm92aWRlciBjYXRhbG9ndWUuXCIpLFxuICApXG4gIC5kZXNjcmliZShcIm1vZGVscy5kZXYgcHJvdmlkZXIgY2F0YWxvZ3VlIHJlc3BvbnNlLlwiKTtcblxuY29uc3QgTW9kZWxQYXJhbXNQYXJhbWV0ZXJTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIHBhdGg6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJSZXF1ZXN0LWJvZHkgcGF0aCBmb3IgdGhlIHBhcmFtZXRlci5cIiksXG4gICAgZ3JvdXA6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIkZ1bmN0aW9uYWwgcGFyYW1ldGVyIGdyb3VwLlwiKSxcbiAgICB0eXBlOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiUGFyYW1ldGVyIHZhbHVlIHR5cGUuXCIpLFxuICAgIHZhbHVlczogelxuICAgICAgLmFycmF5KHouc3RyaW5nKCkubnVsbGFibGUoKSlcbiAgICAgIC5vcHRpb25hbCgpXG4gICAgICAuZGVzY3JpYmUoXCJBbGxvd2VkIGVudW0gdmFsdWVzLCBpbmNsdWRpbmcgbnVsbCB3aGVuIG9taXNzaW9uIGlzIHN1cHBvcnRlZC5cIiksXG4gIH0pXG4gIC5wYXNzdGhyb3VnaCgpXG4gIC5kZXNjcmliZShcIk9uZSBtb2RlbHBhcmFtcy5kZXYgcmVxdWVzdCBwYXJhbWV0ZXIuXCIpO1xuXG5jb25zdCBNb2RlbFBhcmFtc01vZGVsU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICBwcm92aWRlcjogei5zdHJpbmcoKS5kZXNjcmliZShcIlByb3ZpZGVyIGlkZW50aWZpZXIuXCIpLFxuICAgIGFwaVN1cmZhY2U6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJQcm92aWRlciBBUEkgc3VyZmFjZS5cIiksXG4gICAgbW9kZWw6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJQcm92aWRlciBtb2RlbCBpZGVudGlmaWVyLlwiKSxcbiAgICBwYXJhbXM6IHouYXJyYXkoTW9kZWxQYXJhbXNQYXJhbWV0ZXJTY2hlbWEpLmRlc2NyaWJlKFwiQWNjZXB0ZWQgcmVxdWVzdCBwYXJhbWV0ZXJzLlwiKSxcbiAgfSlcbiAgLnBhc3N0aHJvdWdoKClcbiAgLmRlc2NyaWJlKFwiT25lIG1vZGVsIGFuZCBBUEkgc3VyZmFjZSBmcm9tIG1vZGVscGFyYW1zLmRldi5cIik7XG5cbmNvbnN0IE1vZGVsUGFyYW1zQXBpU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICBtb2RlbHM6IHouYXJyYXkoTW9kZWxQYXJhbXNNb2RlbFNjaGVtYSkuZGVzY3JpYmUoXCJOb3JtYWxpemVkIG1vZGVsIHBhcmFtZXRlciByZWNvcmRzLlwiKSxcbiAgfSlcbiAgLnBhc3N0aHJvdWdoKClcbiAgLmRlc2NyaWJlKFwibW9kZWxwYXJhbXMuZGV2IG1vZGVsIGNhdGFsb2d1ZSByZXNwb25zZS5cIik7XG5cbi8qKiBQYXJzZSByZXRpcmVkIG1vZGVsIG5hbWVzIGZyb20gRGF0YWJyaWNrcyByZXRpcmVtZW50LXBvbGljeSBIVE1MLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUmV0aXJlZE1vZGVscyhodG1sOiBzdHJpbmcsIGdlbmVyYXRlZEF0OiBudW1iZXIpOiBSZXRpcmVkTW9kZWxzU25hcHNob3Qge1xuICBjb25zdCAkID0gbG9hZChodG1sKTtcbiAgY29uc3QgbW9kZWxzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICQoXCJ0YWJsZVwiKS5lYWNoKChfLCB0YWJsZSkgPT4ge1xuICAgIGNvbnN0IHJvd3MgPSAkKHRhYmxlKS5maW5kKFwidHJcIik7XG4gICAgY29uc3QgaGVhZGVyID0gY29sbGFwc2VUZXh0KCQocm93cy5nZXQoMCkpLmZpbmQoXCJ0aCwgdGRcIikuZmlyc3QoKSkudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoaGVhZGVyICE9PSBcIm9wZW4gbW9kZWxcIiAmJiBoZWFkZXIgIT09IFwicGFydG5lciBtb2RlbFwiKSByZXR1cm47XG4gICAgcm93cy5zbGljZSgxKS5lYWNoKChfXywgcm93KSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IG5hbWUgb2YgY29sbGFwc2VUZXh0KCQocm93KS5maW5kKFwidGgsIHRkXCIpLmZpcnN0KCkpLnNwbGl0KFwiL1wiKSkge1xuICAgICAgICBjb25zdCB0cmltbWVkID0gbmFtZS50cmltKCk7XG4gICAgICAgIGlmICh0cmltbWVkKSBtb2RlbHMuYWRkKHRyaW1tZWQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbiAgaWYgKG1vZGVscy5zaXplID09PSAwKSB0aHJvdyBuZXcgRXJyb3IoXCJEYXRhYnJpY2tzIHJldGlyZW1lbnQgdGFibGVzIGNvbnRhaW5lZCBubyBtb2RlbCBuYW1lc1wiKTtcbiAgcmV0dXJuIHtcbiAgICBnZW5lcmF0ZWRBdCxcbiAgICBtb2RlbHM6IFsuLi5tb2RlbHNdLnNvcnQoKGxlZnQsIHJpZ2h0KSA9PlxuICAgICAgbGVmdC5sb2NhbGVDb21wYXJlKHJpZ2h0LCBcImVuXCIsIHsgc2Vuc2l0aXZpdHk6IFwiYmFzZVwiIH0pLFxuICAgICksXG4gIH07XG59XG5cbi8qKiBQYXJzZSBSZXNwb25zZXMgYW5kIHdlYi1zZWFyY2ggZG9jdW1lbnRhdGlvbiBpbnRvIG1vZGVsIGNhcGFiaWxpdHkgc2V0cy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU1vZGVsQ2FwYWJpbGl0aWVzKFxuICByZXNwb25zZXNIdG1sOiBzdHJpbmcsXG4gIHdlYlNlYXJjaEh0bWw6IHN0cmluZyxcbiAgZ2VuZXJhdGVkQXQ6IG51bWJlcixcbik6IE1vZGVsQ2FwYWJpbGl0aWVzU25hcHNob3Qge1xuICBjb25zdCByZXNwb25zZXNEb2N1bWVudCA9IGxvYWQocmVzcG9uc2VzSHRtbCk7XG4gIGNvbnN0IHJlc3BvbnNlcyA9IG1vZGVsc0FmdGVySGVhZGluZyhyZXNwb25zZXNEb2N1bWVudCwgXCJkYXRhYnJpY2tzLWhvc3RlZC1mb3VuZGF0aW9uLW1vZGVsc1wiKTtcbiAgaWYgKHJlc3BvbnNlcy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJEYXRhYnJpY2tzIGRvY3VtZW50YXRpb24gY29udGFpbmVkIG5vIE9wZW5BSSBSZXNwb25zZXMgbW9kZWxzXCIpO1xuICB9XG4gIGNvbnN0IGlucHV0VHlwZXMgPSBzZWN0aW9uRWxlbWVudHMocmVzcG9uc2VzRG9jdW1lbnQsIFwic3VwcG9ydGVkLWlucHV0LXR5cGVzXCIpXG4gICAgLm1hcCgoZWxlbWVudCkgPT4gY29sbGFwc2VUZXh0KGVsZW1lbnQpKVxuICAgIC5qb2luKFwiIFwiKVxuICAgIC50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBpbnB1dFR5cGVXb3JkcyA9IG5ldyBTZXQoaW5wdXRUeXBlcy5zcGxpdCgvW15hLXowLTldKy8pLmZpbHRlcihCb29sZWFuKSk7XG4gIGNvbnN0IGltYWdlSW5wdXQgPSBpbnB1dFR5cGVXb3Jkcy5oYXMoXCJ0ZXh0XCIpICYmIGlucHV0VHlwZVdvcmRzLmhhcyhcImltYWdlXCIpID8gcmVzcG9uc2VzIDogW107XG4gIGNvbnN0IGFwcGx5UGF0Y2ggPSBjb2RlVmFsdWVzQWZ0ZXJIZWFkaW5nKHJlc3BvbnNlc0RvY3VtZW50LCBcImxpbWl0YXRpb25zXCIpLmluY2x1ZGVzKFxuICAgIFwiYXBwbHlfcGF0Y2hcIixcbiAgKVxuICAgID8gcmVzcG9uc2VzXG4gICAgOiBbXTtcbiAgY29uc3Qgd2ViU2VhcmNoID0gbmF0aXZlV2ViU2VhcmNoTW9kZWxzKGxvYWQod2ViU2VhcmNoSHRtbCksIHJlc3BvbnNlcyk7XG4gIGlmICh3ZWJTZWFyY2gubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiRGF0YWJyaWNrcyBkb2N1bWVudGF0aW9uIGNvbnRhaW5lZCBubyBuYXRpdmUgd2ViLXNlYXJjaCBtb2RlbHNcIik7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBnZW5lcmF0ZWRBdCxcbiAgICBjYXBhYmlsaXRpZXM6IHsgcmVzcG9uc2VzLCBpbWFnZUlucHV0LCBhcHBseVBhdGNoLCB3ZWJTZWFyY2ggfSxcbiAgfTtcbn1cblxuLyoqIE5vcm1hbGl6ZSBwb3J0YWJsZSBtb2RlbCBjYXBhYmlsaXRpZXMgYW5kIGVmZm9ydCBsYWRkZXJzIGZyb20gbW9kZWxzLmRldiBKU09OLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTW9kZWxzRGV2KFxuICBpbnB1dDogdW5rbm93bixcbiAgZ2VuZXJhdGVkQXQ6IG51bWJlcixcbik6IE1vZGVsc0RldlNuYXBzaG90IHtcbiAgY29uc3QgcHJvdmlkZXJzID0gTW9kZWxzRGV2QXBpU2NoZW1hLnBhcnNlKGlucHV0KTtcbiAgY29uc3QgaW1hZ2VJbnB1dCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBjb25zdCByZWFzb25pbmcgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgY29uc3QgdG9vbHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgY29uc3Qgc3RydWN0dXJlZE91dHB1dCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBjb25zdCB0ZW1wZXJhdHVyZVN1cHBvcnRlZCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBjb25zdCB0ZW1wZXJhdHVyZVVuc3VwcG9ydGVkID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgZm9yIChjb25zdCBbcHJvdmlkZXJJZCwgcHJvdmlkZXJdIG9mIE9iamVjdC5lbnRyaWVzKHByb3ZpZGVycykpIHtcbiAgICBmb3IgKGNvbnN0IFtjYXRhbG9ndWVJZCwgbW9kZWxdIG9mIE9iamVjdC5lbnRyaWVzKHByb3ZpZGVyLm1vZGVscykpIHtcbiAgICAgIGNvbnN0IGtleXMgPSBleHRlcm5hbE1vZGVsS2V5cyhjYXRhbG9ndWVJZCwgbW9kZWwuaWQsIG1vZGVsLmNhbm9uaWNhbF9tb2RlbF9pZCk7XG4gICAgICBpZiAoa2V5cy5sZW5ndGggPT09IDApIGNvbnRpbnVlO1xuICAgICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgICBpZiAobW9kZWwubW9kYWxpdGllcz8uaW5wdXQuaW5jbHVkZXMoXCJpbWFnZVwiKSkgaW1hZ2VJbnB1dC5hZGQoa2V5KTtcbiAgICAgICAgaWYgKG1vZGVsLnJlYXNvbmluZyA9PT0gdHJ1ZSkgcmVhc29uaW5nLmFkZChrZXkpO1xuICAgICAgICBpZiAobW9kZWwudG9vbF9jYWxsID09PSB0cnVlKSB0b29scy5hZGQoa2V5KTtcbiAgICAgICAgaWYgKG1vZGVsLnN0cnVjdHVyZWRfb3V0cHV0ID09PSB0cnVlKSBzdHJ1Y3R1cmVkT3V0cHV0LmFkZChrZXkpO1xuICAgICAgICBpZiAocHJvdmlkZXJJZCA9PT0gXCJkYXRhYnJpY2tzXCIpIHtcbiAgICAgICAgICBpZiAobW9kZWwudGVtcGVyYXR1cmUgPT09IHRydWUpIHRlbXBlcmF0dXJlU3VwcG9ydGVkLmFkZChrZXkpO1xuICAgICAgICAgIGlmIChtb2RlbC50ZW1wZXJhdHVyZSA9PT0gZmFsc2UpIHRlbXBlcmF0dXJlVW5zdXBwb3J0ZWQuYWRkKGtleSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKHJlYXNvbmluZy5zaXplID09PSAwICYmIGltYWdlSW5wdXQuc2l6ZSA9PT0gMCAmJiB0b29scy5zaXplID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwibW9kZWxzLmRldiBjb250YWluZWQgbm8gcmVjb2duaXplZCBtb2RlbCBjYXBhYmlsaXRpZXNcIik7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBnZW5lcmF0ZWRBdCxcbiAgICBjYXBhYmlsaXRpZXM6IHtcbiAgICAgIGltYWdlSW5wdXQ6IFsuLi5pbWFnZUlucHV0XS5zb3J0KCksXG4gICAgICByZWFzb25pbmc6IFsuLi5yZWFzb25pbmddLnNvcnQoKSxcbiAgICAgIHRvb2xzOiBbLi4udG9vbHNdLnNvcnQoKSxcbiAgICAgIHN0cnVjdHVyZWRPdXRwdXQ6IFsuLi5zdHJ1Y3R1cmVkT3V0cHV0XS5zb3J0KCksXG4gICAgICB0ZW1wZXJhdHVyZVN1cHBvcnRlZDogWy4uLnRlbXBlcmF0dXJlU3VwcG9ydGVkXS5zb3J0KCksXG4gICAgICB0ZW1wZXJhdHVyZVVuc3VwcG9ydGVkOiBbLi4udGVtcGVyYXR1cmVVbnN1cHBvcnRlZF0uc29ydCgpLFxuICAgIH0sXG4gIH07XG59XG5cbi8qKiBOb3JtYWxpemUgcmVhc29uaW5nIHN1cHBvcnQgYW5kIGVmZm9ydCBsYWRkZXJzIGZyb20gbW9kZWxwYXJhbXMuZGV2IEpTT04uICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VNb2RlbFBhcmFtcyhcbiAgaW5wdXQ6IHVua25vd24sXG4gIGdlbmVyYXRlZEF0OiBudW1iZXIsXG4pOiBNb2RlbFBhcmFtc1NuYXBzaG90IHtcbiAgY29uc3QgcmVzcG9uc2UgPSBNb2RlbFBhcmFtc0FwaVNjaGVtYS5wYXJzZShpbnB1dCk7XG4gIGNvbnN0IHJlYXNvbmluZyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBjb25zdCBtb2RlbHM6IFJlY29yZDxzdHJpbmcsIFJlYXNvbmluZ0xldmVsW10+ID0ge307XG5cbiAgZm9yIChjb25zdCBtb2RlbCBvZiByZXNwb25zZS5tb2RlbHMpIHtcbiAgICBjb25zdCByZWFzb25pbmdQYXJhbWV0ZXJzID0gbW9kZWwucGFyYW1zLmZpbHRlcigocGFyYW1ldGVyKSA9PiBwYXJhbWV0ZXIuZ3JvdXAgPT09IFwicmVhc29uaW5nXCIpO1xuICAgIGlmIChyZWFzb25pbmdQYXJhbWV0ZXJzLmxlbmd0aCA9PT0gMCkgY29udGludWU7XG4gICAgY29uc3Qga2V5cyA9IGV4dGVybmFsTW9kZWxLZXlzKG1vZGVsLm1vZGVsKTtcbiAgICBjb25zdCBsZXZlbHMgPSBzb3J0UmVhc29uaW5nTGV2ZWxzKFxuICAgICAgcmVhc29uaW5nUGFyYW1ldGVyc1xuICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgIChwYXJhbWV0ZXIpID0+XG4gICAgICAgICAgICBwYXJhbWV0ZXIudHlwZSA9PT0gXCJlbnVtXCIgJiYgRUZGT1JUX1BBUkFNRVRFUl9QQVRIUy5oYXMocGFyYW1ldGVyLnBhdGgpLFxuICAgICAgICApXG4gICAgICAgIC5mbGF0TWFwKChwYXJhbWV0ZXIpID0+IHBhcmFtZXRlci52YWx1ZXMgPz8gW10pXG4gICAgICAgIC5mbGF0TWFwKCh2YWx1ZSkgPT4gcGFyc2VSZWFzb25pbmcodmFsdWUpID8/IFtdKSxcbiAgICApO1xuICAgIGlmIChsZXZlbHMubGVuZ3RoID09PSAwKSBjb250aW51ZTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgICByZWFzb25pbmcuYWRkKGtleSk7XG4gICAgICBtb2RlbHNba2V5XSA9IHNvcnRSZWFzb25pbmdMZXZlbHMoWy4uLihtb2RlbHNba2V5XSA/PyBbXSksIC4uLmxldmVsc10pO1xuICAgIH1cbiAgfVxuICBpZiAocmVhc29uaW5nLnNpemUgPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJtb2RlbHBhcmFtcy5kZXYgY29udGFpbmVkIG5vIHJlY29nbml6ZWQgcmVhc29uaW5nIG1vZGVsc1wiKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGdlbmVyYXRlZEF0LFxuICAgIGNhdGFsb2d1ZToge1xuICAgICAgcmVhc29uaW5nOiBbLi4ucmVhc29uaW5nXS5zb3J0KCksXG4gICAgICBtb2RlbHM6IHNvcnRSZWNvcmQobW9kZWxzKSxcbiAgICB9LFxuICB9O1xufVxuXG4vKiogUGFyc2UgcGF5LXBlci10b2tlbiBsaW1pdHMgZnJvbSBEYXRhYnJpY2tzIEZvdW5kYXRpb24gTW9kZWwgQVBJIEhUTUwuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VNb2RlbFJhdGVMaW1pdHMoaHRtbDogc3RyaW5nLCBnZW5lcmF0ZWRBdDogbnVtYmVyKTogTW9kZWxSYXRlTGltaXRzU25hcHNob3Qge1xuICBjb25zdCAkID0gbG9hZChodG1sKTtcbiAgY29uc3QgbW9kZWxzOiBSZWNvcmQ8c3RyaW5nLCBNb2RlbFJhdGVMaW1pdENhdGFsb2d1ZVtcIm1vZGVsc1wiXVtzdHJpbmddPiA9IHt9O1xuICAkKFwidGFibGVcIikuZWFjaCgoXywgdGFibGUpID0+IHtcbiAgICBjb25zdCByb3dzID0gJCh0YWJsZSkuZmluZChcInRyXCIpO1xuICAgIGNvbnN0IGhlYWRlcnMgPSAkKHJvd3MuZ2V0KDApKVxuICAgICAgLmZpbmQoXCJ0aCwgdGRcIilcbiAgICAgIC50b0FycmF5KClcbiAgICAgIC5tYXAoKGNlbGwpID0+IGNvbGxhcHNlVGV4dCgkKGNlbGwpKS50b0xvd2VyQ2FzZSgpKTtcbiAgICBjb25zdCBtb2RlbEluZGV4ID0gaGVhZGVycy5maW5kSW5kZXgoKHZhbHVlKSA9PiB2YWx1ZS5pbmNsdWRlcyhcIm1vZGVsXCIpKTtcbiAgICBjb25zdCBpbnB1dEluZGV4ID0gaGVhZGVycy5maW5kSW5kZXgoKHZhbHVlKSA9PiB2YWx1ZS5pbmNsdWRlcyhcIml0cG1cIikpO1xuICAgIGNvbnN0IG91dHB1dEluZGV4ID0gaGVhZGVycy5maW5kSW5kZXgoKHZhbHVlKSA9PiB2YWx1ZS5pbmNsdWRlcyhcIm90cG1cIikpO1xuICAgIGNvbnN0IHF1ZXJ5SW5kZXggPSBoZWFkZXJzLmZpbmRJbmRleCgodmFsdWUpID0+IHZhbHVlLmluY2x1ZGVzKFwicXBoXCIpKTtcbiAgICBpZiAobW9kZWxJbmRleCA8IDAgfHwgaW5wdXRJbmRleCA8IDAgfHwgb3V0cHV0SW5kZXggPCAwKSByZXR1cm47XG4gICAgcm93cy5zbGljZSgxKS5lYWNoKChfXywgcm93KSA9PiB7XG4gICAgICBjb25zdCBjZWxscyA9ICQocm93KVxuICAgICAgICAuZmluZChcInRoLCB0ZFwiKVxuICAgICAgICAudG9BcnJheSgpXG4gICAgICAgIC5tYXAoKGNlbGwpID0+IGNvbGxhcHNlVGV4dCgkKGNlbGwpKSk7XG4gICAgICBjb25zdCBrZXkgPSBtb2RlbEtleShjZWxsc1ttb2RlbEluZGV4XSk7XG4gICAgICBpZiAoIWtleSkgcmV0dXJuO1xuICAgICAgbW9kZWxzW2tleV0gPSB7XG4gICAgICAgIGlucHV0VG9rZW5zUGVyTWludXRlOiBudW1iZXIoY2VsbHNbaW5wdXRJbmRleF0pLFxuICAgICAgICBvdXRwdXRUb2tlbnNQZXJNaW51dGU6IG51bWJlcihjZWxsc1tvdXRwdXRJbmRleF0pLFxuICAgICAgICBxdWVyaWVzUGVySG91cjogcXVlcnlJbmRleCA8IDAgPyBudWxsIDogbnVtYmVyKGNlbGxzW3F1ZXJ5SW5kZXhdKSxcbiAgICAgIH07XG4gICAgfSk7XG4gIH0pO1xuICBpZiAoT2JqZWN0LmtleXMobW9kZWxzKS5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJEYXRhYnJpY2tzIG1vZGVsLWxpbWl0IGRvY3VtZW50YXRpb24gY29udGFpbmVkIG5vIG1vZGVsc1wiKTtcbiAgfVxuICByZXR1cm4geyBnZW5lcmF0ZWRBdCwgY2F0YWxvZ3VlOiB7IG1vZGVsczogc29ydFJlY29yZChtb2RlbHMpIH0gfTtcbn1cblxuLyoqIFBhcnNlIHJlYXNvbmluZy1lZmZvcnQgbGFkZGVycyBmcm9tIHRoZSBRdWVyeSByZWFzb25pbmcgbW9kZWxzIEhUTUwgdGFibGUuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VSZWFzb25pbmdNb2RlbHMoaHRtbDogc3RyaW5nLCBnZW5lcmF0ZWRBdDogbnVtYmVyKTogUmVhc29uaW5nTW9kZWxzU25hcHNob3Qge1xuICBjb25zdCAkID0gbG9hZChodG1sKTtcbiAgY29uc3QgbW9kZWxzOiBSZWNvcmQ8c3RyaW5nLCBSZWFzb25pbmdMZXZlbFtdPiA9IHt9O1xuICAkKFwidGFibGVcIikuZWFjaCgoXywgdGFibGUpID0+IHtcbiAgICBjb25zdCByb3dzID0gJCh0YWJsZSkuZmluZChcInRyXCIpO1xuICAgIGNvbnN0IGhlYWRlcnMgPSAkKHJvd3MuZ2V0KDApKVxuICAgICAgLmZpbmQoXCJ0aCwgdGRcIilcbiAgICAgIC50b0FycmF5KClcbiAgICAgIC5tYXAoKGNlbGwpID0+IGNvbGxhcHNlVGV4dCgkKGNlbGwpKS50b0xvd2VyQ2FzZSgpKTtcbiAgICBpZiAoIWhlYWRlcnMuc29tZSgoaGVhZGVyKSA9PiBoZWFkZXIuaW5jbHVkZXMoXCJtb2RlbFwiKSkpIHJldHVybjtcbiAgICBpZiAoIWhlYWRlcnMuc29tZSgoaGVhZGVyKSA9PiBoZWFkZXIuaW5jbHVkZXMoXCJwYXJhbWV0ZXJcIikpKSByZXR1cm47XG4gICAgcm93cy5zbGljZSgxKS5lYWNoKChfXywgcm93KSA9PiB7XG4gICAgICBjb25zdCBjZWxscyA9ICQocm93KVxuICAgICAgICAuZmluZChcInRoLCB0ZFwiKVxuICAgICAgICAudG9BcnJheSgpXG4gICAgICAgIC5tYXAoKGNlbGwpID0+ICQoY2VsbCkpO1xuICAgICAgaWYgKGNlbGxzLmxlbmd0aCA8IDIpIHJldHVybjtcbiAgICAgIGNvbnN0IG1vZGVsTmFtZXMgPSByZWFzb25pbmdNb2RlbE5hbWVzRnJvbUNlbGwoY2VsbHNbMF0hLCAkKTtcbiAgICAgIGlmIChtb2RlbE5hbWVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgICAgY29uc3QgcGFyYW1ldGVyc1RleHQgPSBjb2xsYXBzZVRleHQoY2VsbHNbY2VsbHMubGVuZ3RoIC0gMV0hKTtcbiAgICAgIGNvbnN0IHBlck1vZGVsID0gcmVhc29uaW5nTGV2ZWxzQnlNb2RlbFNlY3Rpb24ocGFyYW1ldGVyc1RleHQsIG1vZGVsTmFtZXMpO1xuICAgICAgaWYgKE9iamVjdC5rZXlzKHBlck1vZGVsKS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgbGV2ZWxzXSBvZiBPYmplY3QuZW50cmllcyhwZXJNb2RlbCkpIHtcbiAgICAgICAgICBpZiAobGV2ZWxzLmxlbmd0aCA+IDApIG1vZGVsc1trZXldID0gc29ydFJlYXNvbmluZ0xldmVscyhsZXZlbHMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNoYXJlZCA9IHNvcnRSZWFzb25pbmdMZXZlbHMoZXh0cmFjdEFjY2VwdGVkUmVhc29uaW5nTGV2ZWxzKHBhcmFtZXRlcnNUZXh0KSk7XG4gICAgICBpZiAoc2hhcmVkLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgICAgZm9yIChjb25zdCBuYW1lIG9mIG1vZGVsTmFtZXMpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gbW9kZWxLZXkobmFtZSk7XG4gICAgICAgIGlmIChrZXkpIG1vZGVsc1trZXldID0gc2hhcmVkO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbiAgaWYgKE9iamVjdC5rZXlzKG1vZGVscykubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiRGF0YWJyaWNrcyByZWFzb25pbmcgZG9jdW1lbnRhdGlvbiBjb250YWluZWQgbm8gbW9kZWwgZWZmb3J0IGxhZGRlcnNcIik7XG4gIH1cbiAgcmV0dXJuIHsgZ2VuZXJhdGVkQXQsIGNhdGFsb2d1ZTogeyBtb2RlbHM6IHNvcnRSZWNvcmQobW9kZWxzKSB9IH07XG59XG5cbmZ1bmN0aW9uIHJlYXNvbmluZ01vZGVsTmFtZXNGcm9tQ2VsbChjZWxsOiBTZWxlY3Rpb24sICQ6IENoZWVyaW9BUEkpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IG5hbWVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGNlbGwuZmluZChcImNvZGVcIikuZWFjaCgoXywgY29kZSkgPT4ge1xuICAgIGNvbnN0IHRleHQgPSBjb2xsYXBzZVRleHQoJChjb2RlKSk7XG4gICAgaWYgKHRleHQuc3RhcnRzV2l0aChcImRhdGFicmlja3MtXCIpKSBuYW1lcy5hZGQodGV4dCk7XG4gIH0pO1xuICBpZiAobmFtZXMuc2l6ZSA9PT0gMCkge1xuICAgIGZvciAoY29uc3QgbWF0Y2ggb2YgY29sbGFwc2VUZXh0KGNlbGwpLm1hdGNoQWxsKE1PREVMX0NPREVfUEFUVEVSTikpIHtcbiAgICAgIG5hbWVzLmFkZChtYXRjaFswXSEpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gWy4uLm5hbWVzXTtcbn1cblxuZnVuY3Rpb24gZXh0cmFjdEFjY2VwdGVkUmVhc29uaW5nTGV2ZWxzKHRleHQ6IHN0cmluZyk6IFJlYXNvbmluZ0xldmVsW10ge1xuICBjb25zdCBsZXZlbHM6IFJlYXNvbmluZ0xldmVsW10gPSBbXTtcbiAgZm9yIChjb25zdCBtYXRjaCBvZiB0ZXh0Lm1hdGNoQWxsKEFDQ0VQVEVEX1ZBTFVFU19QQVRURVJOKSkge1xuICAgIGNvbnN0IGZyYWdtZW50ID0gbWF0Y2hbMV07XG4gICAgaWYgKCFmcmFnbWVudCB8fCAvdmFyeSBieSBtb2RlbC9pLnRlc3QoZnJhZ21lbnQpKSBjb250aW51ZTtcbiAgICBsZXZlbHMucHVzaCguLi5kb2N1bWVudGF0aW9uRWZmb3J0TGV2ZWxzKGZyYWdtZW50KSk7XG4gIH1cbiAgcmV0dXJuIGxldmVscztcbn1cblxuZnVuY3Rpb24gcmVhc29uaW5nTGV2ZWxzQnlNb2RlbFNlY3Rpb24oXG4gIHBhcmFtZXRlcnNUZXh0OiBzdHJpbmcsXG4gIHJvd01vZGVsczogcmVhZG9ubHkgc3RyaW5nW10sXG4pOiBSZWNvcmQ8c3RyaW5nLCBSZWFzb25pbmdMZXZlbFtdPiB7XG4gIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgUmVhc29uaW5nTGV2ZWxbXT4gPSB7fTtcbiAgZm9yIChjb25zdCBtYXRjaCBvZiBwYXJhbWV0ZXJzVGV4dC5tYXRjaEFsbChGT1JfTU9ERUxfUEFUVEVSTikpIHtcbiAgICBjb25zdCBsYWJlbCA9IG1hdGNoWzFdPy50cmltKCk7XG4gICAgY29uc3QgZnJhZ21lbnQgPSBtYXRjaFsyXTtcbiAgICBpZiAoIWxhYmVsIHx8ICFmcmFnbWVudCkgY29udGludWU7XG4gICAgY29uc3QgbGV2ZWxzID0gdW5pcXVlUmVhc29uaW5nTGV2ZWxzKGRvY3VtZW50YXRpb25FZmZvcnRMZXZlbHMoZnJhZ21lbnQpKTtcbiAgICBpZiAobGV2ZWxzLmxlbmd0aCA9PT0gMCkgY29udGludWU7XG4gICAgY29uc3QgbWF0Y2hlZCA9IHJvd01vZGVscy5maWx0ZXIoKG1vZGVsKSA9PiByZWFzb25pbmdNb2RlbExhYmVsTWF0Y2hlcyhsYWJlbCwgbW9kZWwpKTtcbiAgICAvLyBPbmx5IGF0dGFjaCBleHBsaWNpdCBcIkZvciA8bW9kZWw+XCIgY2xhdXNlcyB0byBtb2RlbHMgbGlzdGVkIGluIHRoZSByb3cuXG4gICAgaWYgKG1hdGNoZWQubGVuZ3RoID09PSAwKSBjb250aW51ZTtcbiAgICBmb3IgKGNvbnN0IHRhcmdldCBvZiBtYXRjaGVkKSB7XG4gICAgICBjb25zdCBrZXkgPSBtb2RlbEtleSh0YXJnZXQpO1xuICAgICAgaWYgKGtleSkgcmVzdWx0W2tleV0gPSBzb3J0UmVhc29uaW5nTGV2ZWxzKGxldmVscyk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGRvY3VtZW50YXRpb25FZmZvcnRMZXZlbHMoZnJhZ21lbnQ6IHN0cmluZyk6IFJlYXNvbmluZ0xldmVsW10ge1xuICByZXR1cm4gcmVhc29uaW5nVG9rZW5zRnJvbUZyYWdtZW50KGZyYWdtZW50KS5mbGF0TWFwKCh0b2tlbikgPT4ge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSB0b2tlbi50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1tfXFxzXSsvZywgXCItXCIpO1xuICAgIGlmIChcbiAgICAgICFET0NVTUVOVEFUSU9OX0VGRk9SVF9UT0tFTlMuaGFzKG5vcm1hbGl6ZWQpICYmXG4gICAgICAhRE9DVU1FTlRBVElPTl9FRkZPUlRfVE9LRU5TLmhhcyh0b2tlbi50b0xvd2VyQ2FzZSgpKVxuICAgICkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBjb25zdCBsZXZlbCA9IHBhcnNlUmVhc29uaW5nKHRva2VuKTtcbiAgICByZXR1cm4gbGV2ZWwgPyBbbGV2ZWxdIDogW107XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBzb3J0UmVhc29uaW5nTGV2ZWxzKGxldmVsczogcmVhZG9ubHkgUmVhc29uaW5nTGV2ZWxbXSk6IFJlYXNvbmluZ0xldmVsW10ge1xuICByZXR1cm4gdW5pcXVlUmVhc29uaW5nTGV2ZWxzKGxldmVscykuc29ydChcbiAgICAobGVmdCwgcmlnaHQpID0+IFJFQVNPTklOR19MRVZFTFMuaW5kZXhPZihsZWZ0KSAtIFJFQVNPTklOR19MRVZFTFMuaW5kZXhPZihyaWdodCksXG4gICk7XG59XG5cbmZ1bmN0aW9uIHJlYXNvbmluZ01vZGVsTGFiZWxNYXRjaGVzKGxhYmVsOiBzdHJpbmcsIG1vZGVsOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgbGVmdCA9IGxhYmVsXG4gICAgLnRvTG93ZXJDYXNlKClcbiAgICAucmVwbGFjZSgvXmRhdGFicmlja3MtLywgXCJcIilcbiAgICAucmVwbGFjZSgvW15hLXowLTldKy9nLCBcIlwiKTtcbiAgY29uc3QgcmlnaHQgPSBtb2RlbFxuICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgLnJlcGxhY2UoL15kYXRhYnJpY2tzLS8sIFwiXCIpXG4gICAgLnJlcGxhY2UoL1teYS16MC05XSsvZywgXCJcIik7XG4gIHJldHVybiBsZWZ0ID09PSByaWdodCB8fCByaWdodC5pbmNsdWRlcyhsZWZ0KSB8fCBsZWZ0LmluY2x1ZGVzKHJpZ2h0KTtcbn1cblxuZnVuY3Rpb24gcmVhc29uaW5nVG9rZW5zRnJvbUZyYWdtZW50KGZyYWdtZW50OiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IHRva2Vuczogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChjb25zdCBwYXJ0IG9mIGZyYWdtZW50Lm1hdGNoQWxsKFRPS0VOX1BBVFRFUk4pKSB7XG4gICAgY29uc3QgdG9rZW4gPSBwYXJ0WzFdID8/IHBhcnRbMl0gPz8gcGFydFszXSA/PyBwYXJ0WzRdO1xuICAgIGlmICghdG9rZW4gfHwgdG9rZW4gPT09IFwiYW5kXCIgfHwgdG9rZW4gPT09IFwib3JcIiB8fCB0b2tlbiA9PT0gXCJvZlwiKSBjb250aW51ZTtcbiAgICB0b2tlbnMucHVzaCh0b2tlbi5yZXBsYWNlKC9eW1wiJ2BdK3xbXCInYF0rJC9nLCBcIlwiKSk7XG4gIH1cbiAgcmV0dXJuIHRva2Vucztcbn1cblxuZnVuY3Rpb24gbW9kZWxzQWZ0ZXJIZWFkaW5nKCQ6IENoZWVyaW9BUEksIGhlYWRpbmdJZDogc3RyaW5nKTogc3RyaW5nW10ge1xuICByZXR1cm4gW1xuICAgIC4uLm5ldyBTZXQoY29kZVZhbHVlc0FmdGVySGVhZGluZygkLCBoZWFkaW5nSWQpLmZsYXRNYXAoKHZhbHVlKSA9PiBtb2RlbEtleSh2YWx1ZSkgPz8gW10pKSxcbiAgXS5zb3J0KCk7XG59XG5cbmZ1bmN0aW9uIG5hdGl2ZVdlYlNlYXJjaE1vZGVscygkOiBDaGVlcmlvQVBJLCByZXNwb25zZXM6IHJlYWRvbmx5IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICBjb25zdCBtb2RlbHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgbGV0IG5hdGl2ZVNlY3Rpb24gPSBmYWxzZTtcbiAgZm9yIChjb25zdCBlbGVtZW50IG9mIHNlY3Rpb25FbGVtZW50cygkLCBcInN1cHBvcnRlZC1tb2RlbHNcIikpIHtcbiAgICBpZiAoaGVhZGluZ0xldmVsKG5vZGVUYWdOYW1lKGVsZW1lbnQuZ2V0KDApKSkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbmF0aXZlU2VjdGlvbiA9ICFjb2xsYXBzZVRleHQoZWxlbWVudCkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhcInZpYSBtY3BcIik7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKCFuYXRpdmVTZWN0aW9uKSBjb250aW51ZTtcbiAgICBjb25zdCB2YWx1ZXMgPSBub2RlVGFnTmFtZShlbGVtZW50LmdldCgwKSkgPT09IFwiY29kZVwiID8gW2NvbGxhcHNlVGV4dChlbGVtZW50KV0gOiBbXTtcbiAgICBlbGVtZW50LmZpbmQoXCJjb2RlXCIpLmVhY2goKF8sIGNvZGUpID0+IHtcbiAgICAgIHZhbHVlcy5wdXNoKGNvbGxhcHNlVGV4dCgkKGNvZGUpKSk7XG4gICAgfSk7XG4gICAgZm9yIChjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICAgIGNvbnN0IG1vZGVsID0gbW9kZWxLZXkodmFsdWUpO1xuICAgICAgaWYgKCFtb2RlbCkgY29udGludWU7XG4gICAgICBtb2RlbHMuYWRkKG1vZGVsKTtcbiAgICB9XG4gIH1cbiAgZm9yIChjb25zdCBtb2RlbCBvZiByZXNwb25zZXMpIHtcbiAgICBpZiAoaW5oZXJpdHNOYXRpdmVXZWJTZWFyY2gobW9kZWwsIG1vZGVscykpIG1vZGVscy5hZGQobW9kZWwpO1xuICB9XG4gIHJldHVybiBbLi4ubW9kZWxzXS5zb3J0KCk7XG59XG5cbmZ1bmN0aW9uIGNvZGVWYWx1ZXNBZnRlckhlYWRpbmcoJDogQ2hlZXJpb0FQSSwgaGVhZGluZ0lkOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IHZhbHVlczogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChjb25zdCBlbGVtZW50IG9mIHNlY3Rpb25FbGVtZW50cygkLCBoZWFkaW5nSWQpKSB7XG4gICAgaWYgKG5vZGVUYWdOYW1lKGVsZW1lbnQuZ2V0KDApKSA9PT0gXCJjb2RlXCIpIHZhbHVlcy5wdXNoKGNvbGxhcHNlVGV4dChlbGVtZW50KSk7XG4gICAgZWxlbWVudC5maW5kKFwiY29kZVwiKS5lYWNoKChfLCBjb2RlKSA9PiB7XG4gICAgICB2YWx1ZXMucHVzaChjb2xsYXBzZVRleHQoJChjb2RlKSkpO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiB2YWx1ZXM7XG59XG5cbmZ1bmN0aW9uIHNlY3Rpb25FbGVtZW50cygkOiBDaGVlcmlvQVBJLCBoZWFkaW5nSWQ6IHN0cmluZyk6IFNlbGVjdGlvbltdIHtcbiAgY29uc3QgaGVhZGluZyA9ICQoYCMke2hlYWRpbmdJZH1gKS5maXJzdCgpO1xuICBpZiAoaGVhZGluZy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYERhdGFicmlja3MgY2FwYWJpbGl0eSBwYWdlIGlzIG1pc3Npbmcgc2VjdGlvbiAke2hlYWRpbmdJZH1gKTtcbiAgfVxuICBjb25zdCBsZXZlbCA9IGhlYWRpbmdMZXZlbChub2RlVGFnTmFtZShoZWFkaW5nLmdldCgwKSkpO1xuICBpZiAobGV2ZWwgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRGF0YWJyaWNrcyBjYXBhYmlsaXR5IHNlY3Rpb24gJHtoZWFkaW5nSWR9IGlzIG5vdCBhIGhlYWRpbmdgKTtcbiAgfVxuICBjb25zdCBlbGVtZW50czogU2VsZWN0aW9uW10gPSBbXTtcbiAgbGV0IHNpYmxpbmcgPSBoZWFkaW5nLm5leHQoKTtcbiAgd2hpbGUgKHNpYmxpbmcubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IHNpYmxpbmdMZXZlbCA9IGhlYWRpbmdMZXZlbChub2RlVGFnTmFtZShzaWJsaW5nLmdldCgwKSkpO1xuICAgIGlmIChzaWJsaW5nTGV2ZWwgIT09IHVuZGVmaW5lZCAmJiBzaWJsaW5nTGV2ZWwgPD0gbGV2ZWwpIGJyZWFrO1xuICAgIGVsZW1lbnRzLnB1c2goc2libGluZyk7XG4gICAgc2libGluZyA9IHNpYmxpbmcubmV4dCgpO1xuICB9XG4gIHJldHVybiBlbGVtZW50cztcbn1cblxuZnVuY3Rpb24gaGVhZGluZ0xldmVsKG5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IG1hdGNoID0gL15oKFsxLTZdKSQvLmV4ZWMobmFtZSA/PyBcIlwiKTtcbiAgcmV0dXJuIG1hdGNoID8gTnVtYmVyKG1hdGNoWzFdKSA6IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gY29sbGFwc2VUZXh0KGVsZW1lbnQ6IFNlbGVjdGlvbik6IHN0cmluZyB7XG4gIHJldHVybiBlbGVtZW50LnRleHQoKS5zcGxpdCgvXFxzKy8pLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKTtcbn1cblxuZnVuY3Rpb24gbm9kZVRhZ05hbWUobm9kZTogdW5rbm93bik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICghbm9kZSB8fCB0eXBlb2Ygbm9kZSAhPT0gXCJvYmplY3RcIiB8fCAhKFwidGFnTmFtZVwiIGluIG5vZGUpKSByZXR1cm4gdW5kZWZpbmVkO1xuICByZXR1cm4gdHlwZW9mIG5vZGUudGFnTmFtZSA9PT0gXCJzdHJpbmdcIiA/IG5vZGUudGFnTmFtZSA6IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gbW9kZWxLZXkodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICghdmFsdWUpIHJldHVybiB1bmRlZmluZWQ7XG4gIGxldCBuYW1lID0gdmFsdWUudHJpbSgpLnJlcGxhY2UoL1xcKiskLywgXCJcIikudHJpbSgpO1xuICBmb3IgKGNvbnN0IHN1ZmZpeCBvZiBbXCIoUHVibGljIFByZXZpZXcpXCIsIFwiKEJldGEpXCIsIFwiKFByZXZpZXcpXCJdKSB7XG4gICAgaWYgKG5hbWUuZW5kc1dpdGgoc3VmZml4KSkgbmFtZSA9IG5hbWUuc2xpY2UoMCwgLXN1ZmZpeC5sZW5ndGgpLnRyaW0oKTtcbiAgfVxuICByZXR1cm4gbW9kZWxTZWFyY2hRdWVyeShuYW1lKT8ucmVwbGFjZUFsbChcIiBcIiwgXCItXCIpO1xufVxuXG5mdW5jdGlvbiBleHRlcm5hbE1vZGVsS2V5cyguLi52YWx1ZXM6IHJlYWRvbmx5IChzdHJpbmcgfCB1bmRlZmluZWQpW10pOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGFsaWFzZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgZm9yIChjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICBpZiAoIXZhbHVlKSBjb250aW51ZTtcbiAgICBjb25zdCBxdWV1ZSA9IFt2YWx1ZSwgdmFsdWUucmVwbGFjZShFWFRFUk5BTF9EQVRFX1RPS0VOX1BBVFRFUk4sIFwiXCIpXTtcbiAgICB3aGlsZSAocXVldWUubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgY2FuZGlkYXRlID0gcXVldWUuc2hpZnQoKSE7XG4gICAgICBpZiAoYWxpYXNlcy5oYXMoY2FuZGlkYXRlKSkgY29udGludWU7XG4gICAgICBhbGlhc2VzLmFkZChjYW5kaWRhdGUpO1xuICAgICAgY29uc3QgdHJpbW1lZCA9IGNhbmRpZGF0ZS5yZXBsYWNlKEVYVEVSTkFMX0FMSUFTX1NVRkZJWF9QQVRURVJOLCBcIlwiKTtcbiAgICAgIGlmICh0cmltbWVkICE9PSBjYW5kaWRhdGUpIHF1ZXVlLnB1c2godHJpbW1lZCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBbLi4ubmV3IFNldChbLi4uYWxpYXNlc10uZmxhdE1hcCgoYWxpYXMpID0+IG1vZGVsS2V5KGFsaWFzKSA/PyBbXSkpXS5zb3J0KCk7XG59XG5cbmZ1bmN0aW9uIG51bWJlcih2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogbnVtYmVyIHwgbnVsbCB7XG4gIGlmICghdmFsdWUpIHJldHVybiBudWxsO1xuICBjb25zdCBwYXJzZWQgPSBOdW1iZXIodmFsdWUucmVwbGFjZUFsbChcIixcIiwgXCJcIikudHJpbSgpKTtcbiAgcmV0dXJuIE51bWJlci5pc1NhZmVJbnRlZ2VyKHBhcnNlZCkgJiYgcGFyc2VkID49IDAgPyBwYXJzZWQgOiBudWxsO1xufVxuXG5mdW5jdGlvbiBzb3J0UmVjb3JkPFQ+KHJlY29yZDogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgVD4+KTogUmVjb3JkPHN0cmluZywgVD4ge1xuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgIE9iamVjdC5lbnRyaWVzKHJlY29yZCkuc29ydCgoW2xlZnRdLCBbcmlnaHRdKSA9PiBsZWZ0LmxvY2FsZUNvbXBhcmUocmlnaHQpKSxcbiAgKTtcbn1cbiJdfQ==
499
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiX21ldGFkYXRhLWdlbmVyYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fbWV0YWRhdGEtZ2VuZXJhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQW1CLE1BQU0sU0FBUyxDQUFDO0FBQ2hELE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFXeEIsT0FBTyxFQUFFLHVCQUF1QixFQUFFLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3hFLE9BQU8sRUFDTCxjQUFjLEVBQ2QsZ0JBQWdCLEVBRWhCLHFCQUFxQixHQUN0QixNQUFNLDRCQUE0QixDQUFDO0FBSXBDLE1BQU0sdUJBQXVCLEdBQzNCLDBGQUEwRixDQUFDO0FBQzdGLE1BQU0saUJBQWlCLEdBQ3JCLHdKQUF3SixDQUFDO0FBQzNKLE1BQU0sYUFBYSxHQUFHLHdEQUF3RCxDQUFDO0FBQy9FLE1BQU0sa0JBQWtCLEdBQUcscUNBQXFDLENBQUM7QUFDakUsc0ZBQXNGO0FBQ3RGLE1BQU0sMkJBQTJCLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDMUMsTUFBTTtJQUNOLFNBQVM7SUFDVCxLQUFLO0lBQ0wsUUFBUTtJQUNSLE1BQU07SUFDTixPQUFPO0lBQ1AsWUFBWTtJQUNaLFdBQVc7SUFDWCxPQUFPO0lBQ1AsWUFBWTtJQUNaLEtBQUs7SUFDTCxTQUFTO0lBQ1QsVUFBVTtDQUNYLENBQUMsQ0FBQztBQUNILE1BQU0sc0JBQXNCLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDckMsK0NBQStDO0lBQy9DLHNCQUFzQjtJQUN0QixrQkFBa0I7SUFDbEIsa0JBQWtCO0NBQ25CLENBQUMsQ0FBQztBQUNILE1BQU0sNkJBQTZCLEdBQUcsZ0RBQWdELENBQUM7QUFDdkYsTUFBTSwyQkFBMkIsR0FBRyx5QkFBeUIsQ0FBQztBQUU5RCxNQUFNLG9CQUFvQixHQUFHLENBQUM7S0FDM0IsTUFBTSxDQUFDO0lBQ04sRUFB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QyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDeEQsT0FBTyxNQUFNLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3JFLENBQUM7QUFFRCxTQUFTLFVBQVUsQ0FBSSxNQUFtQztJQUN4RCxPQUFPLE1BQU0sQ0FBQyxXQUFXLENBQ3ZCLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQzVFLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbG9hZCwgdHlwZSBDaGVlcmlvQVBJIH0gZnJvbSBcImNoZWVyaW9cIjtcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5cbmltcG9ydCB0eXBlIHtcbiAgTW9kZWxQYXJhbXNTbmFwc2hvdCxcbiAgTW9kZWxDYXBhYmlsaXRpZXNTbmFwc2hvdCxcbiAgTW9kZWxSYXRlTGltaXRDYXRhbG9ndWUsXG4gIE1vZGVsUmF0ZUxpbWl0c1NuYXBzaG90LFxuICBNb2RlbHNEZXZTbmFwc2hvdCxcbiAgUmVhc29uaW5nTW9kZWxzU25hcHNob3QsXG4gIFJldGlyZWRNb2RlbHNTbmFwc2hvdCxcbn0gZnJvbSBcIi4vbWV0YWRhdGEtY29udHJhY3QudHNcIjtcbmltcG9ydCB7IGluaGVyaXRzTmF0aXZlV2ViU2VhcmNoLCBtb2RlbFNlYXJjaFF1ZXJ5IH0gZnJvbSBcIi4vcG9saWN5LnRzXCI7XG5pbXBvcnQge1xuICBwYXJzZVJlYXNvbmluZyxcbiAgUkVBU09OSU5HX0xFVkVMUyxcbiAgdHlwZSBSZWFzb25pbmdMZXZlbCxcbiAgdW5pcXVlUmVhc29uaW5nTGV2ZWxzLFxufSBmcm9tIFwiLi9yZWFzb25pbmctdHJhbnNsYXRpb24udHNcIjtcblxudHlwZSBTZWxlY3Rpb24gPSBSZXR1cm5UeXBlPENoZWVyaW9BUEk+O1xuXG5jb25zdCBBQ0NFUFRFRF9WQUxVRVNfUEFUVEVSTiA9XG4gIC8oPzphY2NlcHRlZCB2YWx1ZXMoPzpcXHMrYXJlfFxccyt2YXJ5KT98YWNjZXB0cyg/Olxccyt2YWx1ZXM/KD86XFxzK29mKT8pPylcXHMqOj9cXHMqKFteLl0rKS9naTtcbmNvbnN0IEZPUl9NT0RFTF9QQVRURVJOID1cbiAgL0ZvclxccysoW14sXSs/KSxcXHMrKD86dGhpcyBwYXJhbWV0ZXIgYWNjZXB0cyg/Olxccyt2YWx1ZXM/XFxzK29mKT98dGhlICg/OmA/cmVhc29uaW5nX2VmZm9ydGA/fGVmZm9ydCkgcGFyYW1ldGVyIGFjY2VwdHMoPzpcXHMrdmFsdWVzP1xccytvZik/KVxccyooW14uXSspL2dpO1xuY29uc3QgVE9LRU5fUEFUVEVSTiA9IC8nKFteJ10rKSd8XCIoW15cIl0rKVwifGAoW15gXSspYHxcXGIoW2Etel1bYS16MC05Xy1dKilcXGIvZ2k7XG5jb25zdCBNT0RFTF9DT0RFX1BBVFRFUk4gPSAvXFxiZGF0YWJyaWNrcy1bYS16MC05XVthLXowLTkuXy1dKi9naTtcbi8qKiBXaXJlIHRva2VucyBhZHZlcnRpc2VkIGluIERhdGFicmlja3MgZG9jczsgZXhjbHVkZXMgcHJvc2Ugd29yZHMgbGlrZSBgZGVmYXVsdGAuICovXG5jb25zdCBET0NVTUVOVEFUSU9OX0VGRk9SVF9UT0tFTlMgPSBuZXcgU2V0KFtcbiAgXCJub25lXCIsXG4gIFwibWluaW1hbFwiLFxuICBcImxvd1wiLFxuICBcIm1lZGl1bVwiLFxuICBcImhpZ2hcIixcbiAgXCJ4aGlnaFwiLFxuICBcImV4dHJhLWhpZ2hcIixcbiAgXCJleHRyYWhpZ2hcIixcbiAgXCJ1bHRyYVwiLFxuICBcInVsdHJhLWhpZ2hcIixcbiAgXCJtYXhcIixcbiAgXCJtYXhpbXVtXCIsXG4gIFwiZGlzYWJsZWRcIixcbl0pO1xuY29uc3QgRUZGT1JUX1BBUkFNRVRFUl9QQVRIUyA9IG5ldyBTZXQoW1xuICBcImdlbmVyYXRpb25Db25maWcudGhpbmtpbmdDb25maWcudGhpbmtpbmdMZXZlbFwiLFxuICBcIm91dHB1dF9jb25maWcuZWZmb3J0XCIsXG4gIFwicmVhc29uaW5nLmVmZm9ydFwiLFxuICBcInJlYXNvbmluZ19lZmZvcnRcIixcbl0pO1xuY29uc3QgRVhURVJOQUxfQUxJQVNfU1VGRklYX1BBVFRFUk4gPSAvLSg/OmN1c3RvbXRvb2xzfGxhdGVzdHxwcmV2aWV3fHN1YnNjcmlwdGlvbikkL2k7XG5jb25zdCBFWFRFUk5BTF9EQVRFX1RPS0VOX1BBVFRFUk4gPSAvLSg/OjE5fDIwKVxcZHs2fSg/PS18JCkvZztcblxuY29uc3QgTW9kZWxzRGV2TW9kZWxTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIGlkOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiUHJvdmlkZXItc3BlY2lmaWMgbW9kZWwgaWRlbnRpZmllci5cIiksXG4gICAgY2Fub25pY2FsX21vZGVsX2lkOiB6XG4gICAgICAuc3RyaW5nKClcbiAgICAgIC5vcHRpb25hbCgpXG4gICAgICAuZGVzY3JpYmUoXCJQcm92aWRlci1pbmRlcGVuZGVudCBjYW5vbmljYWwgbW9kZWwgaWRlbnRpZmllci5cIiksXG4gICAgcmVhc29uaW5nOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiV2hldGhlciB0aGUgbW9kZWwgc3VwcG9ydHMgcmVhc29uaW5nLlwiKSxcbiAgICB0b29sX2NhbGw6IHouYm9vbGVhbigpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJXaGV0aGVyIHRoZSBtb2RlbCBzdXBwb3J0cyB0b29sIGNhbGxzLlwiKSxcbiAgICBzdHJ1Y3R1cmVkX291dHB1dDogelxuICAgICAgLmJvb2xlYW4oKVxuICAgICAgLm9wdGlvbmFsKClcbiAgICAgIC5kZXNjcmliZShcIldoZXRoZXIgdGhlIG1vZGVsIHN1cHBvcnRzIHN0cnVjdHVyZWQgb3V0cHV0LlwiKSxcbiAgICB0ZW1wZXJhdHVyZTogei5ib29sZWFuKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIldoZXRoZXIgdGhlIG1vZGVsIGFjY2VwdHMgdGVtcGVyYXR1cmUuXCIpLFxuICAgIG1vZGFsaXRpZXM6IHpcbiAgICAgIC5vYmplY3Qoe1xuICAgICAgICBpbnB1dDogei5hcnJheSh6LnN0cmluZygpKS5kZXNjcmliZShcIkFjY2VwdGVkIGlucHV0IG1vZGFsaXRpZXMuXCIpLFxuICAgICAgfSlcbiAgICAgIC5wYXNzdGhyb3VnaCgpXG4gICAgICAub3B0aW9uYWwoKVxuICAgICAgLmRlc2NyaWJlKFwiTW9kZWwgaW5wdXQgYW5kIG91dHB1dCBtb2RhbGl0aWVzLlwiKSxcbiAgfSlcbiAgLnBhc3N0aHJvdWdoKClcbiAgLmRlc2NyaWJlKFwiT25lIHByb3ZpZGVyIG1vZGVsIGZyb20gbW9kZWxzLmRldi5cIik7XG5cbmNvbnN0IE1vZGVsc0RldkFwaVNjaGVtYSA9IHpcbiAgLnJlY29yZChcbiAgICB6LnN0cmluZygpLFxuICAgIHpcbiAgICAgIC5vYmplY3Qoe1xuICAgICAgICBtb2RlbHM6IHpcbiAgICAgICAgICAucmVjb3JkKHouc3RyaW5nKCksIE1vZGVsc0Rldk1vZGVsU2NoZW1hKVxuICAgICAgICAgIC5kZXNjcmliZShcIk1vZGVscyBhdmFpbGFibGUgdGhyb3VnaCB0aGlzIHByb3ZpZGVyLlwiKSxcbiAgICAgIH0pXG4gICAgICAucGFzc3Rocm91Z2goKVxuICAgICAgLmRlc2NyaWJlKFwiT25lIG1vZGVscy5kZXYgcHJvdmlkZXIgY2F0YWxvZ3VlLlwiKSxcbiAgKVxuICAuZGVzY3JpYmUoXCJtb2RlbHMuZGV2IHByb3ZpZGVyIGNhdGFsb2d1ZSByZXNwb25zZS5cIik7XG5cbmNvbnN0IE1vZGVsUGFyYW1zUGFyYW1ldGVyU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICBwYXRoOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiUmVxdWVzdC1ib2R5IHBhdGggZm9yIHRoZSBwYXJhbWV0ZXIuXCIpLFxuICAgIGdyb3VwOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJGdW5jdGlvbmFsIHBhcmFtZXRlciBncm91cC5cIiksXG4gICAgdHlwZTogei5zdHJpbmcoKS5kZXNjcmliZShcIlBhcmFtZXRlciB2YWx1ZSB0eXBlLlwiKSxcbiAgICB2YWx1ZXM6IHpcbiAgICAgIC5hcnJheSh6LnN0cmluZygpLm51bGxhYmxlKCkpXG4gICAgICAub3B0aW9uYWwoKVxuICAgICAgLmRlc2NyaWJlKFwiQWxsb3dlZCBlbnVtIHZhbHVlcywgaW5jbHVkaW5nIG51bGwgd2hlbiBvbWlzc2lvbiBpcyBzdXBwb3J0ZWQuXCIpLFxuICB9KVxuICAucGFzc3Rocm91Z2goKVxuICAuZGVzY3JpYmUoXCJPbmUgbW9kZWxwYXJhbXMuZGV2IHJlcXVlc3QgcGFyYW1ldGVyLlwiKTtcblxuY29uc3QgTW9kZWxQYXJhbXNNb2RlbFNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgcHJvdmlkZXI6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJQcm92aWRlciBpZGVudGlmaWVyLlwiKSxcbiAgICBhcGlTdXJmYWNlOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiUHJvdmlkZXIgQVBJIHN1cmZhY2UuXCIpLFxuICAgIG1vZGVsOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiUHJvdmlkZXIgbW9kZWwgaWRlbnRpZmllci5cIiksXG4gICAgcGFyYW1zOiB6LmFycmF5KE1vZGVsUGFyYW1zUGFyYW1ldGVyU2NoZW1hKS5kZXNjcmliZShcIkFjY2VwdGVkIHJlcXVlc3QgcGFyYW1ldGVycy5cIiksXG4gIH0pXG4gIC5wYXNzdGhyb3VnaCgpXG4gIC5kZXNjcmliZShcIk9uZSBtb2RlbCBhbmQgQVBJIHN1cmZhY2UgZnJvbSBtb2RlbHBhcmFtcy5kZXYuXCIpO1xuXG5jb25zdCBNb2RlbFBhcmFtc0FwaVNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgbW9kZWxzOiB6LmFycmF5KE1vZGVsUGFyYW1zTW9kZWxTY2hlbWEpLmRlc2NyaWJlKFwiTm9ybWFsaXplZCBtb2RlbCBwYXJhbWV0ZXIgcmVjb3Jkcy5cIiksXG4gIH0pXG4gIC5wYXNzdGhyb3VnaCgpXG4gIC5kZXNjcmliZShcIm1vZGVscGFyYW1zLmRldiBtb2RlbCBjYXRhbG9ndWUgcmVzcG9uc2UuXCIpO1xuXG4vKiogUGFyc2UgcmV0aXJlZCBtb2RlbCBuYW1lcyBmcm9tIERhdGFicmlja3MgcmV0aXJlbWVudC1wb2xpY3kgSFRNTC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVJldGlyZWRNb2RlbHMoaHRtbDogc3RyaW5nLCBnZW5lcmF0ZWRBdDogbnVtYmVyKTogUmV0aXJlZE1vZGVsc1NuYXBzaG90IHtcbiAgY29uc3QgJCA9IGxvYWQoaHRtbCk7XG4gIGNvbnN0IG1vZGVscyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAkKFwidGFibGVcIikuZWFjaCgoXywgdGFibGUpID0+IHtcbiAgICBjb25zdCByb3dzID0gJCh0YWJsZSkuZmluZChcInRyXCIpO1xuICAgIGNvbnN0IGhlYWRlciA9IGNvbGxhcHNlVGV4dCgkKHJvd3MuZ2V0KDApKS5maW5kKFwidGgsIHRkXCIpLmZpcnN0KCkpLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKGhlYWRlciAhPT0gXCJvcGVuIG1vZGVsXCIgJiYgaGVhZGVyICE9PSBcInBhcnRuZXIgbW9kZWxcIikgcmV0dXJuO1xuICAgIHJvd3Muc2xpY2UoMSkuZWFjaCgoX18sIHJvdykgPT4ge1xuICAgICAgZm9yIChjb25zdCBuYW1lIG9mIGNvbGxhcHNlVGV4dCgkKHJvdykuZmluZChcInRoLCB0ZFwiKS5maXJzdCgpKS5zcGxpdChcIi9cIikpIHtcbiAgICAgICAgY29uc3QgdHJpbW1lZCA9IG5hbWUudHJpbSgpO1xuICAgICAgICBpZiAodHJpbW1lZCkgbW9kZWxzLmFkZCh0cmltbWVkKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG4gIGlmIChtb2RlbHMuc2l6ZSA9PT0gMCkgdGhyb3cgbmV3IEVycm9yKFwiRGF0YWJyaWNrcyByZXRpcmVtZW50IHRhYmxlcyBjb250YWluZWQgbm8gbW9kZWwgbmFtZXNcIik7XG4gIHJldHVybiB7XG4gICAgZ2VuZXJhdGVkQXQsXG4gICAgbW9kZWxzOiBbLi4ubW9kZWxzXS5zb3J0KChsZWZ0LCByaWdodCkgPT5cbiAgICAgIGxlZnQubG9jYWxlQ29tcGFyZShyaWdodCwgXCJlblwiLCB7IHNlbnNpdGl2aXR5OiBcImJhc2VcIiB9KSxcbiAgICApLFxuICB9O1xufVxuXG4vKiogUGFyc2UgUmVzcG9uc2VzIGFuZCB3ZWItc2VhcmNoIGRvY3VtZW50YXRpb24gaW50byBtb2RlbCBjYXBhYmlsaXR5IHNldHMuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VNb2RlbENhcGFiaWxpdGllcyhcbiAgcmVzcG9uc2VzSHRtbDogc3RyaW5nLFxuICB3ZWJTZWFyY2hIdG1sOiBzdHJpbmcsXG4gIGdlbmVyYXRlZEF0OiBudW1iZXIsXG4pOiBNb2RlbENhcGFiaWxpdGllc1NuYXBzaG90IHtcbiAgY29uc3QgcmVzcG9uc2VzRG9jdW1lbnQgPSBsb2FkKHJlc3BvbnNlc0h0bWwpO1xuICBjb25zdCByZXNwb25zZXMgPSBtb2RlbHNBZnRlckhlYWRpbmcocmVzcG9uc2VzRG9jdW1lbnQsIFwiZGF0YWJyaWNrcy1ob3N0ZWQtZm91bmRhdGlvbi1tb2RlbHNcIik7XG4gIGlmIChyZXNwb25zZXMubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiRGF0YWJyaWNrcyBkb2N1bWVudGF0aW9uIGNvbnRhaW5lZCBubyBPcGVuQUkgUmVzcG9uc2VzIG1vZGVsc1wiKTtcbiAgfVxuICBjb25zdCBpbnB1dFR5cGVzID0gc2VjdGlvbkVsZW1lbnRzKHJlc3BvbnNlc0RvY3VtZW50LCBcInN1cHBvcnRlZC1pbnB1dC10eXBlc1wiKVxuICAgIC5tYXAoKGVsZW1lbnQpID0+IGNvbGxhcHNlVGV4dChlbGVtZW50KSlcbiAgICAuam9pbihcIiBcIilcbiAgICAudG9Mb3dlckNhc2UoKTtcbiAgY29uc3QgaW5wdXRUeXBlV29yZHMgPSBuZXcgU2V0KGlucHV0VHlwZXMuc3BsaXQoL1teYS16MC05XSsvKS5maWx0ZXIoQm9vbGVhbikpO1xuICBjb25zdCBpbWFnZUlucHV0ID0gaW5wdXRUeXBlV29yZHMuaGFzKFwidGV4dFwiKSAmJiBpbnB1dFR5cGVXb3Jkcy5oYXMoXCJpbWFnZVwiKSA/IHJlc3BvbnNlcyA6IFtdO1xuICBjb25zdCBhcHBseVBhdGNoID0gY29kZVZhbHVlc0FmdGVySGVhZGluZyhyZXNwb25zZXNEb2N1bWVudCwgXCJsaW1pdGF0aW9uc1wiKS5pbmNsdWRlcyhcbiAgICBcImFwcGx5X3BhdGNoXCIsXG4gIClcbiAgICA/IHJlc3BvbnNlc1xuICAgIDogW107XG4gIGNvbnN0IHdlYlNlYXJjaCA9IG5hdGl2ZVdlYlNlYXJjaE1vZGVscyhsb2FkKHdlYlNlYXJjaEh0bWwpLCByZXNwb25zZXMpO1xuICBpZiAod2ViU2VhcmNoLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkRhdGFicmlja3MgZG9jdW1lbnRhdGlvbiBjb250YWluZWQgbm8gbmF0aXZlIHdlYi1zZWFyY2ggbW9kZWxzXCIpO1xuICB9XG4gIHJldHVybiB7XG4gICAgZ2VuZXJhdGVkQXQsXG4gICAgY2FwYWJpbGl0aWVzOiB7IHJlc3BvbnNlcywgaW1hZ2VJbnB1dCwgYXBwbHlQYXRjaCwgd2ViU2VhcmNoIH0sXG4gIH07XG59XG5cbi8qKiBOb3JtYWxpemUgcG9ydGFibGUgbW9kZWwgY2FwYWJpbGl0aWVzIGFuZCBlZmZvcnQgbGFkZGVycyBmcm9tIG1vZGVscy5kZXYgSlNPTi4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU1vZGVsc0RldihpbnB1dDogdW5rbm93biwgZ2VuZXJhdGVkQXQ6IG51bWJlcik6IE1vZGVsc0RldlNuYXBzaG90IHtcbiAgY29uc3QgcHJvdmlkZXJzID0gTW9kZWxzRGV2QXBpU2NoZW1hLnBhcnNlKGlucHV0KTtcbiAgY29uc3QgaW1hZ2VJbnB1dCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBjb25zdCByZWFzb25pbmcgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgY29uc3QgdG9vbHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgY29uc3Qgc3RydWN0dXJlZE91dHB1dCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBjb25zdCB0ZW1wZXJhdHVyZVN1cHBvcnRlZCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBjb25zdCB0ZW1wZXJhdHVyZVVuc3VwcG9ydGVkID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgZm9yIChjb25zdCBbcHJvdmlkZXJJZCwgcHJvdmlkZXJdIG9mIE9iamVjdC5lbnRyaWVzKHByb3ZpZGVycykpIHtcbiAgICBmb3IgKGNvbnN0IFtjYXRhbG9ndWVJZCwgbW9kZWxdIG9mIE9iamVjdC5lbnRyaWVzKHByb3ZpZGVyLm1vZGVscykpIHtcbiAgICAgIGNvbnN0IGtleXMgPSBleHRlcm5hbE1vZGVsS2V5cyhjYXRhbG9ndWVJZCwgbW9kZWwuaWQsIG1vZGVsLmNhbm9uaWNhbF9tb2RlbF9pZCk7XG4gICAgICBpZiAoa2V5cy5sZW5ndGggPT09IDApIGNvbnRpbnVlO1xuICAgICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgICBpZiAobW9kZWwubW9kYWxpdGllcz8uaW5wdXQuaW5jbHVkZXMoXCJpbWFnZVwiKSkgaW1hZ2VJbnB1dC5hZGQoa2V5KTtcbiAgICAgICAgaWYgKG1vZGVsLnJlYXNvbmluZyA9PT0gdHJ1ZSkgcmVhc29uaW5nLmFkZChrZXkpO1xuICAgICAgICBpZiAobW9kZWwudG9vbF9jYWxsID09PSB0cnVlKSB0b29scy5hZGQoa2V5KTtcbiAgICAgICAgaWYgKG1vZGVsLnN0cnVjdHVyZWRfb3V0cHV0ID09PSB0cnVlKSBzdHJ1Y3R1cmVkT3V0cHV0LmFkZChrZXkpO1xuICAgICAgICBpZiAocHJvdmlkZXJJZCA9PT0gXCJkYXRhYnJpY2tzXCIpIHtcbiAgICAgICAgICBpZiAobW9kZWwudGVtcGVyYXR1cmUgPT09IHRydWUpIHRlbXBlcmF0dXJlU3VwcG9ydGVkLmFkZChrZXkpO1xuICAgICAgICAgIGlmIChtb2RlbC50ZW1wZXJhdHVyZSA9PT0gZmFsc2UpIHRlbXBlcmF0dXJlVW5zdXBwb3J0ZWQuYWRkKGtleSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKHJlYXNvbmluZy5zaXplID09PSAwICYmIGltYWdlSW5wdXQuc2l6ZSA9PT0gMCAmJiB0b29scy5zaXplID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwibW9kZWxzLmRldiBjb250YWluZWQgbm8gcmVjb2duaXplZCBtb2RlbCBjYXBhYmlsaXRpZXNcIik7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBnZW5lcmF0ZWRBdCxcbiAgICBjYXBhYmlsaXRpZXM6IHtcbiAgICAgIGltYWdlSW5wdXQ6IFsuLi5pbWFnZUlucHV0XS5zb3J0KCksXG4gICAgICByZWFzb25pbmc6IFsuLi5yZWFzb25pbmddLnNvcnQoKSxcbiAgICAgIHRvb2xzOiBbLi4udG9vbHNdLnNvcnQoKSxcbiAgICAgIHN0cnVjdHVyZWRPdXRwdXQ6IFsuLi5zdHJ1Y3R1cmVkT3V0cHV0XS5zb3J0KCksXG4gICAgICB0ZW1wZXJhdHVyZVN1cHBvcnRlZDogWy4uLnRlbXBlcmF0dXJlU3VwcG9ydGVkXS5zb3J0KCksXG4gICAgICB0ZW1wZXJhdHVyZVVuc3VwcG9ydGVkOiBbLi4udGVtcGVyYXR1cmVVbnN1cHBvcnRlZF0uc29ydCgpLFxuICAgIH0sXG4gIH07XG59XG5cbi8qKiBOb3JtYWxpemUgcmVhc29uaW5nIHN1cHBvcnQgYW5kIGVmZm9ydCBsYWRkZXJzIGZyb20gbW9kZWxwYXJhbXMuZGV2IEpTT04uICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VNb2RlbFBhcmFtcyhpbnB1dDogdW5rbm93biwgZ2VuZXJhdGVkQXQ6IG51bWJlcik6IE1vZGVsUGFyYW1zU25hcHNob3Qge1xuICBjb25zdCByZXNwb25zZSA9IE1vZGVsUGFyYW1zQXBpU2NoZW1hLnBhcnNlKGlucHV0KTtcbiAgY29uc3QgcmVhc29uaW5nID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGNvbnN0IG1vZGVsczogUmVjb3JkPHN0cmluZywgUmVhc29uaW5nTGV2ZWxbXT4gPSB7fTtcblxuICBmb3IgKGNvbnN0IG1vZGVsIG9mIHJlc3BvbnNlLm1vZGVscykge1xuICAgIGNvbnN0IHJlYXNvbmluZ1BhcmFtZXRlcnMgPSBtb2RlbC5wYXJhbXMuZmlsdGVyKChwYXJhbWV0ZXIpID0+IHBhcmFtZXRlci5ncm91cCA9PT0gXCJyZWFzb25pbmdcIik7XG4gICAgaWYgKHJlYXNvbmluZ1BhcmFtZXRlcnMubGVuZ3RoID09PSAwKSBjb250aW51ZTtcbiAgICBjb25zdCBrZXlzID0gZXh0ZXJuYWxNb2RlbEtleXMobW9kZWwubW9kZWwpO1xuICAgIGNvbnN0IGxldmVscyA9IHNvcnRSZWFzb25pbmdMZXZlbHMoXG4gICAgICByZWFzb25pbmdQYXJhbWV0ZXJzXG4gICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgKHBhcmFtZXRlcikgPT4gcGFyYW1ldGVyLnR5cGUgPT09IFwiZW51bVwiICYmIEVGRk9SVF9QQVJBTUVURVJfUEFUSFMuaGFzKHBhcmFtZXRlci5wYXRoKSxcbiAgICAgICAgKVxuICAgICAgICAuZmxhdE1hcCgocGFyYW1ldGVyKSA9PiBwYXJhbWV0ZXIudmFsdWVzID8/IFtdKVxuICAgICAgICAuZmxhdE1hcCgodmFsdWUpID0+IHBhcnNlUmVhc29uaW5nKHZhbHVlKSA/PyBbXSksXG4gICAgKTtcbiAgICBpZiAobGV2ZWxzLmxlbmd0aCA9PT0gMCkgY29udGludWU7XG4gICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgcmVhc29uaW5nLmFkZChrZXkpO1xuICAgICAgbW9kZWxzW2tleV0gPSBzb3J0UmVhc29uaW5nTGV2ZWxzKFsuLi4obW9kZWxzW2tleV0gPz8gW10pLCAuLi5sZXZlbHNdKTtcbiAgICB9XG4gIH1cbiAgaWYgKHJlYXNvbmluZy5zaXplID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwibW9kZWxwYXJhbXMuZGV2IGNvbnRhaW5lZCBubyByZWNvZ25pemVkIHJlYXNvbmluZyBtb2RlbHNcIik7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBnZW5lcmF0ZWRBdCxcbiAgICBjYXRhbG9ndWU6IHtcbiAgICAgIHJlYXNvbmluZzogWy4uLnJlYXNvbmluZ10uc29ydCgpLFxuICAgICAgbW9kZWxzOiBzb3J0UmVjb3JkKG1vZGVscyksXG4gICAgfSxcbiAgfTtcbn1cblxuLyoqIFBhcnNlIHBheS1wZXItdG9rZW4gbGltaXRzIGZyb20gRGF0YWJyaWNrcyBGb3VuZGF0aW9uIE1vZGVsIEFQSSBIVE1MLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTW9kZWxSYXRlTGltaXRzKGh0bWw6IHN0cmluZywgZ2VuZXJhdGVkQXQ6IG51bWJlcik6IE1vZGVsUmF0ZUxpbWl0c1NuYXBzaG90IHtcbiAgY29uc3QgJCA9IGxvYWQoaHRtbCk7XG4gIGNvbnN0IG1vZGVsczogUmVjb3JkPHN0cmluZywgTW9kZWxSYXRlTGltaXRDYXRhbG9ndWVbXCJtb2RlbHNcIl1bc3RyaW5nXT4gPSB7fTtcbiAgJChcInRhYmxlXCIpLmVhY2goKF8sIHRhYmxlKSA9PiB7XG4gICAgY29uc3Qgcm93cyA9ICQodGFibGUpLmZpbmQoXCJ0clwiKTtcbiAgICBjb25zdCBoZWFkZXJzID0gJChyb3dzLmdldCgwKSlcbiAgICAgIC5maW5kKFwidGgsIHRkXCIpXG4gICAgICAudG9BcnJheSgpXG4gICAgICAubWFwKChjZWxsKSA9PiBjb2xsYXBzZVRleHQoJChjZWxsKSkudG9Mb3dlckNhc2UoKSk7XG4gICAgY29uc3QgbW9kZWxJbmRleCA9IGhlYWRlcnMuZmluZEluZGV4KCh2YWx1ZSkgPT4gdmFsdWUuaW5jbHVkZXMoXCJtb2RlbFwiKSk7XG4gICAgY29uc3QgaW5wdXRJbmRleCA9IGhlYWRlcnMuZmluZEluZGV4KCh2YWx1ZSkgPT4gdmFsdWUuaW5jbHVkZXMoXCJpdHBtXCIpKTtcbiAgICBjb25zdCBvdXRwdXRJbmRleCA9IGhlYWRlcnMuZmluZEluZGV4KCh2YWx1ZSkgPT4gdmFsdWUuaW5jbHVkZXMoXCJvdHBtXCIpKTtcbiAgICBjb25zdCBxdWVyeUluZGV4ID0gaGVhZGVycy5maW5kSW5kZXgoKHZhbHVlKSA9PiB2YWx1ZS5pbmNsdWRlcyhcInFwaFwiKSk7XG4gICAgaWYgKG1vZGVsSW5kZXggPCAwIHx8IGlucHV0SW5kZXggPCAwIHx8IG91dHB1dEluZGV4IDwgMCkgcmV0dXJuO1xuICAgIHJvd3Muc2xpY2UoMSkuZWFjaCgoX18sIHJvdykgPT4ge1xuICAgICAgY29uc3QgY2VsbHMgPSAkKHJvdylcbiAgICAgICAgLmZpbmQoXCJ0aCwgdGRcIilcbiAgICAgICAgLnRvQXJyYXkoKVxuICAgICAgICAubWFwKChjZWxsKSA9PiBjb2xsYXBzZVRleHQoJChjZWxsKSkpO1xuICAgICAgY29uc3Qga2V5ID0gbW9kZWxLZXkoY2VsbHNbbW9kZWxJbmRleF0pO1xuICAgICAgaWYgKCFrZXkpIHJldHVybjtcbiAgICAgIG1vZGVsc1trZXldID0ge1xuICAgICAgICBpbnB1dFRva2Vuc1Blck1pbnV0ZTogbnVtYmVyKGNlbGxzW2lucHV0SW5kZXhdKSxcbiAgICAgICAgb3V0cHV0VG9rZW5zUGVyTWludXRlOiBudW1iZXIoY2VsbHNbb3V0cHV0SW5kZXhdKSxcbiAgICAgICAgcXVlcmllc1BlckhvdXI6IHF1ZXJ5SW5kZXggPCAwID8gbnVsbCA6IG51bWJlcihjZWxsc1txdWVyeUluZGV4XSksXG4gICAgICB9O1xuICAgIH0pO1xuICB9KTtcbiAgaWYgKE9iamVjdC5rZXlzKG1vZGVscykubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiRGF0YWJyaWNrcyBtb2RlbC1saW1pdCBkb2N1bWVudGF0aW9uIGNvbnRhaW5lZCBubyBtb2RlbHNcIik7XG4gIH1cbiAgcmV0dXJuIHsgZ2VuZXJhdGVkQXQsIGNhdGFsb2d1ZTogeyBtb2RlbHM6IHNvcnRSZWNvcmQobW9kZWxzKSB9IH07XG59XG5cbi8qKiBQYXJzZSByZWFzb25pbmctZWZmb3J0IGxhZGRlcnMgZnJvbSB0aGUgUXVlcnkgcmVhc29uaW5nIG1vZGVscyBIVE1MIHRhYmxlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUmVhc29uaW5nTW9kZWxzKGh0bWw6IHN0cmluZywgZ2VuZXJhdGVkQXQ6IG51bWJlcik6IFJlYXNvbmluZ01vZGVsc1NuYXBzaG90IHtcbiAgY29uc3QgJCA9IGxvYWQoaHRtbCk7XG4gIGNvbnN0IG1vZGVsczogUmVjb3JkPHN0cmluZywgUmVhc29uaW5nTGV2ZWxbXT4gPSB7fTtcbiAgJChcInRhYmxlXCIpLmVhY2goKF8sIHRhYmxlKSA9PiB7XG4gICAgY29uc3Qgcm93cyA9ICQodGFibGUpLmZpbmQoXCJ0clwiKTtcbiAgICBjb25zdCBoZWFkZXJzID0gJChyb3dzLmdldCgwKSlcbiAgICAgIC5maW5kKFwidGgsIHRkXCIpXG4gICAgICAudG9BcnJheSgpXG4gICAgICAubWFwKChjZWxsKSA9PiBjb2xsYXBzZVRleHQoJChjZWxsKSkudG9Mb3dlckNhc2UoKSk7XG4gICAgaWYgKCFoZWFkZXJzLnNvbWUoKGhlYWRlcikgPT4gaGVhZGVyLmluY2x1ZGVzKFwibW9kZWxcIikpKSByZXR1cm47XG4gICAgaWYgKCFoZWFkZXJzLnNvbWUoKGhlYWRlcikgPT4gaGVhZGVyLmluY2x1ZGVzKFwicGFyYW1ldGVyXCIpKSkgcmV0dXJuO1xuICAgIHJvd3Muc2xpY2UoMSkuZWFjaCgoX18sIHJvdykgPT4ge1xuICAgICAgY29uc3QgY2VsbHMgPSAkKHJvdylcbiAgICAgICAgLmZpbmQoXCJ0aCwgdGRcIilcbiAgICAgICAgLnRvQXJyYXkoKVxuICAgICAgICAubWFwKChjZWxsKSA9PiAkKGNlbGwpKTtcbiAgICAgIGlmIChjZWxscy5sZW5ndGggPCAyKSByZXR1cm47XG4gICAgICBjb25zdCBtb2RlbE5hbWVzID0gcmVhc29uaW5nTW9kZWxOYW1lc0Zyb21DZWxsKGNlbGxzWzBdISwgJCk7XG4gICAgICBpZiAobW9kZWxOYW1lcy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICAgIGNvbnN0IHBhcmFtZXRlcnNUZXh0ID0gY29sbGFwc2VUZXh0KGNlbGxzW2NlbGxzLmxlbmd0aCAtIDFdISk7XG4gICAgICBjb25zdCBwZXJNb2RlbCA9IHJlYXNvbmluZ0xldmVsc0J5TW9kZWxTZWN0aW9uKHBhcmFtZXRlcnNUZXh0LCBtb2RlbE5hbWVzKTtcbiAgICAgIGlmIChPYmplY3Qua2V5cyhwZXJNb2RlbCkubGVuZ3RoID4gMCkge1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIGxldmVsc10gb2YgT2JqZWN0LmVudHJpZXMocGVyTW9kZWwpKSB7XG4gICAgICAgICAgaWYgKGxldmVscy5sZW5ndGggPiAwKSBtb2RlbHNba2V5XSA9IHNvcnRSZWFzb25pbmdMZXZlbHMobGV2ZWxzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBzaGFyZWQgPSBzb3J0UmVhc29uaW5nTGV2ZWxzKGV4dHJhY3RBY2NlcHRlZFJlYXNvbmluZ0xldmVscyhwYXJhbWV0ZXJzVGV4dCkpO1xuICAgICAgaWYgKHNoYXJlZC5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICAgIGZvciAoY29uc3QgbmFtZSBvZiBtb2RlbE5hbWVzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IG1vZGVsS2V5KG5hbWUpO1xuICAgICAgICBpZiAoa2V5KSBtb2RlbHNba2V5XSA9IHNoYXJlZDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG4gIGlmIChPYmplY3Qua2V5cyhtb2RlbHMpLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkRhdGFicmlja3MgcmVhc29uaW5nIGRvY3VtZW50YXRpb24gY29udGFpbmVkIG5vIG1vZGVsIGVmZm9ydCBsYWRkZXJzXCIpO1xuICB9XG4gIHJldHVybiB7IGdlbmVyYXRlZEF0LCBjYXRhbG9ndWU6IHsgbW9kZWxzOiBzb3J0UmVjb3JkKG1vZGVscykgfSB9O1xufVxuXG5mdW5jdGlvbiByZWFzb25pbmdNb2RlbE5hbWVzRnJvbUNlbGwoY2VsbDogU2VsZWN0aW9uLCAkOiBDaGVlcmlvQVBJKTogc3RyaW5nW10ge1xuICBjb25zdCBuYW1lcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBjZWxsLmZpbmQoXCJjb2RlXCIpLmVhY2goKF8sIGNvZGUpID0+IHtcbiAgICBjb25zdCB0ZXh0ID0gY29sbGFwc2VUZXh0KCQoY29kZSkpO1xuICAgIGlmICh0ZXh0LnN0YXJ0c1dpdGgoXCJkYXRhYnJpY2tzLVwiKSkgbmFtZXMuYWRkKHRleHQpO1xuICB9KTtcbiAgaWYgKG5hbWVzLnNpemUgPT09IDApIHtcbiAgICBmb3IgKGNvbnN0IG1hdGNoIG9mIGNvbGxhcHNlVGV4dChjZWxsKS5tYXRjaEFsbChNT0RFTF9DT0RFX1BBVFRFUk4pKSB7XG4gICAgICBuYW1lcy5hZGQobWF0Y2hbMF0hKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIFsuLi5uYW1lc107XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RBY2NlcHRlZFJlYXNvbmluZ0xldmVscyh0ZXh0OiBzdHJpbmcpOiBSZWFzb25pbmdMZXZlbFtdIHtcbiAgY29uc3QgbGV2ZWxzOiBSZWFzb25pbmdMZXZlbFtdID0gW107XG4gIGZvciAoY29uc3QgbWF0Y2ggb2YgdGV4dC5tYXRjaEFsbChBQ0NFUFRFRF9WQUxVRVNfUEFUVEVSTikpIHtcbiAgICBjb25zdCBmcmFnbWVudCA9IG1hdGNoWzFdO1xuICAgIGlmICghZnJhZ21lbnQgfHwgL3ZhcnkgYnkgbW9kZWwvaS50ZXN0KGZyYWdtZW50KSkgY29udGludWU7XG4gICAgbGV2ZWxzLnB1c2goLi4uZG9jdW1lbnRhdGlvbkVmZm9ydExldmVscyhmcmFnbWVudCkpO1xuICB9XG4gIHJldHVybiBsZXZlbHM7XG59XG5cbmZ1bmN0aW9uIHJlYXNvbmluZ0xldmVsc0J5TW9kZWxTZWN0aW9uKFxuICBwYXJhbWV0ZXJzVGV4dDogc3RyaW5nLFxuICByb3dNb2RlbHM6IHJlYWRvbmx5IHN0cmluZ1tdLFxuKTogUmVjb3JkPHN0cmluZywgUmVhc29uaW5nTGV2ZWxbXT4ge1xuICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIFJlYXNvbmluZ0xldmVsW10+ID0ge307XG4gIGZvciAoY29uc3QgbWF0Y2ggb2YgcGFyYW1ldGVyc1RleHQubWF0Y2hBbGwoRk9SX01PREVMX1BBVFRFUk4pKSB7XG4gICAgY29uc3QgbGFiZWwgPSBtYXRjaFsxXT8udHJpbSgpO1xuICAgIGNvbnN0IGZyYWdtZW50ID0gbWF0Y2hbMl07XG4gICAgaWYgKCFsYWJlbCB8fCAhZnJhZ21lbnQpIGNvbnRpbnVlO1xuICAgIGNvbnN0IGxldmVscyA9IHVuaXF1ZVJlYXNvbmluZ0xldmVscyhkb2N1bWVudGF0aW9uRWZmb3J0TGV2ZWxzKGZyYWdtZW50KSk7XG4gICAgaWYgKGxldmVscy5sZW5ndGggPT09IDApIGNvbnRpbnVlO1xuICAgIGNvbnN0IG1hdGNoZWQgPSByb3dNb2RlbHMuZmlsdGVyKChtb2RlbCkgPT4gcmVhc29uaW5nTW9kZWxMYWJlbE1hdGNoZXMobGFiZWwsIG1vZGVsKSk7XG4gICAgLy8gT25seSBhdHRhY2ggZXhwbGljaXQgXCJGb3IgPG1vZGVsPlwiIGNsYXVzZXMgdG8gbW9kZWxzIGxpc3RlZCBpbiB0aGUgcm93LlxuICAgIGlmIChtYXRjaGVkLmxlbmd0aCA9PT0gMCkgY29udGludWU7XG4gICAgZm9yIChjb25zdCB0YXJnZXQgb2YgbWF0Y2hlZCkge1xuICAgICAgY29uc3Qga2V5ID0gbW9kZWxLZXkodGFyZ2V0KTtcbiAgICAgIGlmIChrZXkpIHJlc3VsdFtrZXldID0gc29ydFJlYXNvbmluZ0xldmVscyhsZXZlbHMpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBkb2N1bWVudGF0aW9uRWZmb3J0TGV2ZWxzKGZyYWdtZW50OiBzdHJpbmcpOiBSZWFzb25pbmdMZXZlbFtdIHtcbiAgcmV0dXJuIHJlYXNvbmluZ1Rva2Vuc0Zyb21GcmFnbWVudChmcmFnbWVudCkuZmxhdE1hcCgodG9rZW4pID0+IHtcbiAgICBjb25zdCBub3JtYWxpemVkID0gdG9rZW4udG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bX1xcc10rL2csIFwiLVwiKTtcbiAgICBpZiAoXG4gICAgICAhRE9DVU1FTlRBVElPTl9FRkZPUlRfVE9LRU5TLmhhcyhub3JtYWxpemVkKSAmJlxuICAgICAgIURPQ1VNRU5UQVRJT05fRUZGT1JUX1RPS0VOUy5oYXModG9rZW4udG9Mb3dlckNhc2UoKSlcbiAgICApIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgY29uc3QgbGV2ZWwgPSBwYXJzZVJlYXNvbmluZyh0b2tlbik7XG4gICAgcmV0dXJuIGxldmVsID8gW2xldmVsXSA6IFtdO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gc29ydFJlYXNvbmluZ0xldmVscyhsZXZlbHM6IHJlYWRvbmx5IFJlYXNvbmluZ0xldmVsW10pOiBSZWFzb25pbmdMZXZlbFtdIHtcbiAgcmV0dXJuIHVuaXF1ZVJlYXNvbmluZ0xldmVscyhsZXZlbHMpLnNvcnQoXG4gICAgKGxlZnQsIHJpZ2h0KSA9PiBSRUFTT05JTkdfTEVWRUxTLmluZGV4T2YobGVmdCkgLSBSRUFTT05JTkdfTEVWRUxTLmluZGV4T2YocmlnaHQpLFxuICApO1xufVxuXG5mdW5jdGlvbiByZWFzb25pbmdNb2RlbExhYmVsTWF0Y2hlcyhsYWJlbDogc3RyaW5nLCBtb2RlbDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IGxlZnQgPSBsYWJlbFxuICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgLnJlcGxhY2UoL15kYXRhYnJpY2tzLS8sIFwiXCIpXG4gICAgLnJlcGxhY2UoL1teYS16MC05XSsvZywgXCJcIik7XG4gIGNvbnN0IHJpZ2h0ID0gbW9kZWxcbiAgICAudG9Mb3dlckNhc2UoKVxuICAgIC5yZXBsYWNlKC9eZGF0YWJyaWNrcy0vLCBcIlwiKVxuICAgIC5yZXBsYWNlKC9bXmEtejAtOV0rL2csIFwiXCIpO1xuICByZXR1cm4gbGVmdCA9PT0gcmlnaHQgfHwgcmlnaHQuaW5jbHVkZXMobGVmdCkgfHwgbGVmdC5pbmNsdWRlcyhyaWdodCk7XG59XG5cbmZ1bmN0aW9uIHJlYXNvbmluZ1Rva2Vuc0Zyb21GcmFnbWVudChmcmFnbWVudDogc3RyaW5nKTogc3RyaW5nW10ge1xuICBjb25zdCB0b2tlbnM6IHN0cmluZ1tdID0gW107XG4gIGZvciAoY29uc3QgcGFydCBvZiBmcmFnbWVudC5tYXRjaEFsbChUT0tFTl9QQVRURVJOKSkge1xuICAgIGNvbnN0IHRva2VuID0gcGFydFsxXSA/PyBwYXJ0WzJdID8/IHBhcnRbM10gPz8gcGFydFs0XTtcbiAgICBpZiAoIXRva2VuIHx8IHRva2VuID09PSBcImFuZFwiIHx8IHRva2VuID09PSBcIm9yXCIgfHwgdG9rZW4gPT09IFwib2ZcIikgY29udGludWU7XG4gICAgdG9rZW5zLnB1c2godG9rZW4ucmVwbGFjZSgvXltcIidgXSt8W1wiJ2BdKyQvZywgXCJcIikpO1xuICB9XG4gIHJldHVybiB0b2tlbnM7XG59XG5cbmZ1bmN0aW9uIG1vZGVsc0FmdGVySGVhZGluZygkOiBDaGVlcmlvQVBJLCBoZWFkaW5nSWQ6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIFtcbiAgICAuLi5uZXcgU2V0KGNvZGVWYWx1ZXNBZnRlckhlYWRpbmcoJCwgaGVhZGluZ0lkKS5mbGF0TWFwKCh2YWx1ZSkgPT4gbW9kZWxLZXkodmFsdWUpID8/IFtdKSksXG4gIF0uc29ydCgpO1xufVxuXG5mdW5jdGlvbiBuYXRpdmVXZWJTZWFyY2hNb2RlbHMoJDogQ2hlZXJpb0FQSSwgcmVzcG9uc2VzOiByZWFkb25seSBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgY29uc3QgbW9kZWxzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGxldCBuYXRpdmVTZWN0aW9uID0gZmFsc2U7XG4gIGZvciAoY29uc3QgZWxlbWVudCBvZiBzZWN0aW9uRWxlbWVudHMoJCwgXCJzdXBwb3J0ZWQtbW9kZWxzXCIpKSB7XG4gICAgaWYgKGhlYWRpbmdMZXZlbChub2RlVGFnTmFtZShlbGVtZW50LmdldCgwKSkpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG5hdGl2ZVNlY3Rpb24gPSAhY29sbGFwc2VUZXh0KGVsZW1lbnQpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoXCJ2aWEgbWNwXCIpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmICghbmF0aXZlU2VjdGlvbikgY29udGludWU7XG4gICAgY29uc3QgdmFsdWVzID0gbm9kZVRhZ05hbWUoZWxlbWVudC5nZXQoMCkpID09PSBcImNvZGVcIiA/IFtjb2xsYXBzZVRleHQoZWxlbWVudCldIDogW107XG4gICAgZWxlbWVudC5maW5kKFwiY29kZVwiKS5lYWNoKChfLCBjb2RlKSA9PiB7XG4gICAgICB2YWx1ZXMucHVzaChjb2xsYXBzZVRleHQoJChjb2RlKSkpO1xuICAgIH0pO1xuICAgIGZvciAoY29uc3QgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICBjb25zdCBtb2RlbCA9IG1vZGVsS2V5KHZhbHVlKTtcbiAgICAgIGlmICghbW9kZWwpIGNvbnRpbnVlO1xuICAgICAgbW9kZWxzLmFkZChtb2RlbCk7XG4gICAgfVxuICB9XG4gIGZvciAoY29uc3QgbW9kZWwgb2YgcmVzcG9uc2VzKSB7XG4gICAgaWYgKGluaGVyaXRzTmF0aXZlV2ViU2VhcmNoKG1vZGVsLCBtb2RlbHMpKSBtb2RlbHMuYWRkKG1vZGVsKTtcbiAgfVxuICByZXR1cm4gWy4uLm1vZGVsc10uc29ydCgpO1xufVxuXG5mdW5jdGlvbiBjb2RlVmFsdWVzQWZ0ZXJIZWFkaW5nKCQ6IENoZWVyaW9BUEksIGhlYWRpbmdJZDogc3RyaW5nKTogc3RyaW5nW10ge1xuICBjb25zdCB2YWx1ZXM6IHN0cmluZ1tdID0gW107XG4gIGZvciAoY29uc3QgZWxlbWVudCBvZiBzZWN0aW9uRWxlbWVudHMoJCwgaGVhZGluZ0lkKSkge1xuICAgIGlmIChub2RlVGFnTmFtZShlbGVtZW50LmdldCgwKSkgPT09IFwiY29kZVwiKSB2YWx1ZXMucHVzaChjb2xsYXBzZVRleHQoZWxlbWVudCkpO1xuICAgIGVsZW1lbnQuZmluZChcImNvZGVcIikuZWFjaCgoXywgY29kZSkgPT4ge1xuICAgICAgdmFsdWVzLnB1c2goY29sbGFwc2VUZXh0KCQoY29kZSkpKTtcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gdmFsdWVzO1xufVxuXG5mdW5jdGlvbiBzZWN0aW9uRWxlbWVudHMoJDogQ2hlZXJpb0FQSSwgaGVhZGluZ0lkOiBzdHJpbmcpOiBTZWxlY3Rpb25bXSB7XG4gIGNvbnN0IGhlYWRpbmcgPSAkKGAjJHtoZWFkaW5nSWR9YCkuZmlyc3QoKTtcbiAgaWYgKGhlYWRpbmcubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBEYXRhYnJpY2tzIGNhcGFiaWxpdHkgcGFnZSBpcyBtaXNzaW5nIHNlY3Rpb24gJHtoZWFkaW5nSWR9YCk7XG4gIH1cbiAgY29uc3QgbGV2ZWwgPSBoZWFkaW5nTGV2ZWwobm9kZVRhZ05hbWUoaGVhZGluZy5nZXQoMCkpKTtcbiAgaWYgKGxldmVsID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYERhdGFicmlja3MgY2FwYWJpbGl0eSBzZWN0aW9uICR7aGVhZGluZ0lkfSBpcyBub3QgYSBoZWFkaW5nYCk7XG4gIH1cbiAgY29uc3QgZWxlbWVudHM6IFNlbGVjdGlvbltdID0gW107XG4gIGxldCBzaWJsaW5nID0gaGVhZGluZy5uZXh0KCk7XG4gIHdoaWxlIChzaWJsaW5nLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBzaWJsaW5nTGV2ZWwgPSBoZWFkaW5nTGV2ZWwobm9kZVRhZ05hbWUoc2libGluZy5nZXQoMCkpKTtcbiAgICBpZiAoc2libGluZ0xldmVsICE9PSB1bmRlZmluZWQgJiYgc2libGluZ0xldmVsIDw9IGxldmVsKSBicmVhaztcbiAgICBlbGVtZW50cy5wdXNoKHNpYmxpbmcpO1xuICAgIHNpYmxpbmcgPSBzaWJsaW5nLm5leHQoKTtcbiAgfVxuICByZXR1cm4gZWxlbWVudHM7XG59XG5cbmZ1bmN0aW9uIGhlYWRpbmdMZXZlbChuYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICBjb25zdCBtYXRjaCA9IC9eaChbMS02XSkkLy5leGVjKG5hbWUgPz8gXCJcIik7XG4gIHJldHVybiBtYXRjaCA/IE51bWJlcihtYXRjaFsxXSkgOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGNvbGxhcHNlVGV4dChlbGVtZW50OiBTZWxlY3Rpb24pOiBzdHJpbmcge1xuICByZXR1cm4gZWxlbWVudC50ZXh0KCkuc3BsaXQoL1xccysvKS5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIik7XG59XG5cbmZ1bmN0aW9uIG5vZGVUYWdOYW1lKG5vZGU6IHVua25vd24pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoIW5vZGUgfHwgdHlwZW9mIG5vZGUgIT09IFwib2JqZWN0XCIgfHwgIShcInRhZ05hbWVcIiBpbiBub2RlKSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgcmV0dXJuIHR5cGVvZiBub2RlLnRhZ05hbWUgPT09IFwic3RyaW5nXCIgPyBub2RlLnRhZ05hbWUgOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIG1vZGVsS2V5KHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoIXZhbHVlKSByZXR1cm4gdW5kZWZpbmVkO1xuICBsZXQgbmFtZSA9IHZhbHVlLnRyaW0oKS5yZXBsYWNlKC9cXCorJC8sIFwiXCIpLnRyaW0oKTtcbiAgZm9yIChjb25zdCBzdWZmaXggb2YgW1wiKFB1YmxpYyBQcmV2aWV3KVwiLCBcIihCZXRhKVwiLCBcIihQcmV2aWV3KVwiXSkge1xuICAgIGlmIChuYW1lLmVuZHNXaXRoKHN1ZmZpeCkpIG5hbWUgPSBuYW1lLnNsaWNlKDAsIC1zdWZmaXgubGVuZ3RoKS50cmltKCk7XG4gIH1cbiAgcmV0dXJuIG1vZGVsU2VhcmNoUXVlcnkobmFtZSk/LnJlcGxhY2VBbGwoXCIgXCIsIFwiLVwiKTtcbn1cblxuZnVuY3Rpb24gZXh0ZXJuYWxNb2RlbEtleXMoLi4udmFsdWVzOiByZWFkb25seSAoc3RyaW5nIHwgdW5kZWZpbmVkKVtdKTogc3RyaW5nW10ge1xuICBjb25zdCBhbGlhc2VzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGZvciAoY29uc3QgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgaWYgKCF2YWx1ZSkgY29udGludWU7XG4gICAgY29uc3QgcXVldWUgPSBbdmFsdWUsIHZhbHVlLnJlcGxhY2UoRVhURVJOQUxfREFURV9UT0tFTl9QQVRURVJOLCBcIlwiKV07XG4gICAgd2hpbGUgKHF1ZXVlLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IHF1ZXVlLnNoaWZ0KCkhO1xuICAgICAgaWYgKGFsaWFzZXMuaGFzKGNhbmRpZGF0ZSkpIGNvbnRpbnVlO1xuICAgICAgYWxpYXNlcy5hZGQoY2FuZGlkYXRlKTtcbiAgICAgIGNvbnN0IHRyaW1tZWQgPSBjYW5kaWRhdGUucmVwbGFjZShFWFRFUk5BTF9BTElBU19TVUZGSVhfUEFUVEVSTiwgXCJcIik7XG4gICAgICBpZiAodHJpbW1lZCAhPT0gY2FuZGlkYXRlKSBxdWV1ZS5wdXNoKHRyaW1tZWQpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gWy4uLm5ldyBTZXQoWy4uLmFsaWFzZXNdLmZsYXRNYXAoKGFsaWFzKSA9PiBtb2RlbEtleShhbGlhcykgPz8gW10pKV0uc29ydCgpO1xufVxuXG5mdW5jdGlvbiBudW1iZXIodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IG51bWJlciB8IG51bGwge1xuICBpZiAoIXZhbHVlKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgcGFyc2VkID0gTnVtYmVyKHZhbHVlLnJlcGxhY2VBbGwoXCIsXCIsIFwiXCIpLnRyaW0oKSk7XG4gIHJldHVybiBOdW1iZXIuaXNTYWZlSW50ZWdlcihwYXJzZWQpICYmIHBhcnNlZCA+PSAwID8gcGFyc2VkIDogbnVsbDtcbn1cblxuZnVuY3Rpb24gc29ydFJlY29yZDxUPihyZWNvcmQ6IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIFQ+Pik6IFJlY29yZDxzdHJpbmcsIFQ+IHtcbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBPYmplY3QuZW50cmllcyhyZWNvcmQpLnNvcnQoKFtsZWZ0XSwgW3JpZ2h0XSkgPT4gbGVmdC5sb2NhbGVDb21wYXJlKHJpZ2h0KSksXG4gICk7XG59XG4iXX0=
@@ -14,10 +14,10 @@
14
14
  import { memoize } from "@dbx-tools/shared-core";
15
15
  import { parseModelParams, parseModelCapabilities, parseModelRateLimits, parseModelsDev, parseReasoningModels, parseRetiredModels, } from "./_metadata-generator.js";
16
16
  import capabilitiesSnapshotJson from "./generated/model-capabilities.json" with { type: "json" };
17
- import modelParamsSnapshotJson from "./generated/modelparams-reasoning.json" with { type: "json" };
18
- import modelsDevSnapshotJson from "./generated/models-dev-capabilities.json" with { type: "json" };
19
17
  import rateLimitsSnapshotJson from "./generated/model-rate-limits.json" with { type: "json" };
20
18
  import reasoningSnapshotJson from "./generated/model-reasoning.json" with { type: "json" };
19
+ import modelParamsSnapshotJson from "./generated/modelparams-reasoning.json" with { type: "json" };
20
+ import modelsDevSnapshotJson from "./generated/models-dev-capabilities.json" with { type: "json" };
21
21
  import { createMetadataCache, mergePreferFreshList, mergePreferFreshRecord, } from "./metadata-cache.js";
22
22
  import { MODELPARAMS_DEV_MODELS_URL, MODELS_DEV_API_URL, MODEL_RATE_LIMITS_URL, OPENAI_RESPONSES_MODELS_URL, QUERY_REASON_MODELS_URL, RETIRED_MODELS_URL, WEB_SEARCH_MODELS_URL, } from "./metadata-contract.js";
23
23
  import { inheritsNativeWebSearch, isFoundationModelIdentity, modelReasoningEfforts, modelSearchQuery, modelSupportsTools, } from "./policy.js";
@@ -134,16 +134,10 @@ function buildIndex(input) {
134
134
  return {
135
135
  capabilities: {
136
136
  responses: new Set(input.capabilities.responses),
137
- imageInput: new Set([
138
- ...input.capabilities.imageInput,
139
- ...input.modelsDev.imageInput,
140
- ]),
137
+ imageInput: new Set([...input.capabilities.imageInput, ...input.modelsDev.imageInput]),
141
138
  applyPatch: new Set(input.capabilities.applyPatch),
142
139
  webSearch: new Set(input.capabilities.webSearch),
143
- reasoning: new Set([
144
- ...input.modelsDev.reasoning,
145
- ...input.modelParams.reasoning,
146
- ]),
140
+ reasoning: new Set([...input.modelsDev.reasoning, ...input.modelParams.reasoning]),
147
141
  tools: new Set(input.modelsDev.tools),
148
142
  structuredOutput: new Set(input.modelsDev.structuredOutput),
149
143
  temperature: new Set(input.modelsDev.temperatureSupported),
@@ -428,4 +422,4 @@ function mergeModelsDevData(input) {
428
422
  function nowSeconds() {
429
423
  return Math.floor(Date.now() / 1000);
430
424
  }
431
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0YWRhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbWV0YWRhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBUWpELE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsc0JBQXNCLEVBQ3RCLG9CQUFvQixFQUNwQixjQUFjLEVBQ2Qsb0JBQW9CLEVBQ3BCLGtCQUFrQixHQUNuQixNQUFNLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sd0JBQXdCLE1BQU0scUNBQXFDLENBQUMsT0FBTyxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFDakcsT0FBTyx1QkFBdUIsTUFBTSx3Q0FBd0MsQ0FBQyxPQUFPLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQztBQUNuRyxPQUFPLHFCQUFxQixNQUFNLDBDQUEwQyxDQUFDLE9BQU8sSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO0FBQ25HLE9BQU8sc0JBQXNCLE1BQU0sb0NBQW9DLENBQUMsT0FBTyxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFDOUYsT0FBTyxxQkFBcUIsTUFBTSxrQ0FBa0MsQ0FBQyxPQUFPLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQztBQUMzRixPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLG9CQUFvQixFQUNwQixzQkFBc0IsR0FFdkIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQ0wsMEJBQTBCLEVBQzFCLGtCQUFrQixFQUNsQixxQkFBcUIsRUFDckIsMkJBQTJCLEVBQzNCLHVCQUF1QixFQUN2QixrQkFBa0IsRUFDbEIscUJBQXFCLEdBU3RCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUNMLHVCQUF1QixFQUN2Qix5QkFBeUIsRUFDekIscUJBQXFCLEVBQ3JCLGdCQUFnQixFQUNoQixrQkFBa0IsR0FDbkIsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUNMLHNCQUFzQixFQUN0Qix5QkFBeUIsRUFDekIsY0FBYyxFQUNkLG9CQUFvQixFQUdwQixxQkFBcUIsR0FDdEIsTUFBTSw0QkFBNEIsQ0FBQztBQUNwQyxPQUFPLEVBQ0wsd0JBQXdCLEVBQ3hCLGNBQWMsRUFDZCx3QkFBd0IsRUFDeEIsMkJBQTJCLEdBQzVCLE1BQU0saUJBQWlCLENBQUM7QUFFekIsTUFBTSxvQkFBb0IsR0FBRyx3QkFBcUQsQ0FBQztBQUNuRixNQUFNLG1CQUFtQixHQUFHLHVCQUE4QyxDQUFDO0FBQzNFLE1BQU0saUJBQWlCLEdBQUcscUJBQTBDLENBQUM7QUFDckUsTUFBTSxrQkFBa0IsR0FBRyxzQkFBaUQsQ0FBQztBQUM3RSxNQUFNLGlCQUFpQixHQUFHLHFCQUFnRCxDQUFDO0FBaUIzRSxNQUFNLFVBQVUsR0FBRyw0QkFBNEIsQ0FBQztBQUVoRCxNQUFNLFlBQVksR0FBRyxtQkFBbUIsQ0FBb0I7SUFDMUQsR0FBRyxFQUFFLGdCQUFnQjtJQUNyQixRQUFRLEVBQUUsd0JBQXdCO0lBQ2xDLElBQUksRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sUUFBUSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQyxNQUFNO0lBQzdGLEtBQUssRUFBRSxvQkFBb0I7Q0FDNUIsQ0FBQyxDQUFDO0FBRUgsTUFBTSxpQkFBaUIsR0FBRyxtQkFBbUIsQ0FBaUI7SUFDNUQsR0FBRyxFQUFFLG9CQUFvQjtJQUN6QixRQUFRLEVBQUUsb0JBQW9CLENBQUMsWUFBWTtJQUMzQyxJQUFJLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDZixNQUFNLENBQUMsYUFBYSxFQUFFLGFBQWEsQ0FBQyxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQztZQUN2RCxRQUFRLENBQUMsMkJBQTJCLENBQUM7WUFDckMsUUFBUSxDQUFDLHFCQUFxQixDQUFDO1NBQ2hDLENBQUMsQ0FBQztRQUNILE9BQU8sc0JBQXNCLENBQUMsYUFBYSxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDLFlBQVksQ0FBQztJQUN6RixDQUFDO0lBQ0QsS0FBSyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2pCLFNBQVMsRUFBRSxvQkFBb0IsQ0FBQztZQUM5QixLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxTQUFTO1lBQzdCLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUSxFQUFFLFNBQVM7WUFDbkMsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsU0FBUztTQUNuQyxDQUFDO1FBQ0YsVUFBVSxFQUFFLG9CQUFvQixDQUFDO1lBQy9CLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLFVBQVU7WUFDOUIsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUUsVUFBVTtZQUNwQyxRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxVQUFVO1NBQ3BDLENBQUM7UUFDRixVQUFVLEVBQUUsb0JBQW9CLENBQUM7WUFDL0IsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsVUFBVTtZQUM5QixRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVEsRUFBRSxVQUFVO1lBQ3BDLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLFVBQVU7U0FDcEMsQ0FBQztRQUNGLFNBQVMsRUFBRSxvQkFBb0IsQ0FBQztZQUM5QixLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxTQUFTO1lBQzdCLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUSxFQUFFLFNBQVM7WUFDbkMsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsU0FBUztTQUNuQyxDQUFDO0tBQ0gsQ0FBQztDQUNILENBQUMsQ0FBQztBQUVILE1BQU0sZUFBZSxHQUFHLG1CQUFtQixDQUE0QztJQUNyRixHQUFHLEVBQUUsbUJBQW1CO0lBQ3hCLFFBQVEsRUFBRSxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsTUFBTTtJQUM3QyxJQUFJLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FDZixvQkFBb0IsQ0FBQyxNQUFNLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU07SUFDNUYsS0FBSyxFQUFFLHNCQUFzQjtDQUM5QixDQUFDLENBQUM7QUFFSCxNQUFNLGtCQUFrQixHQUFHLG1CQUFtQixDQUE4QztJQUMxRixHQUFHLEVBQUUsaUJBQWlCO0lBQ3RCLFFBQVEsRUFBRSxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsTUFBTTtJQUM1QyxJQUFJLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FDZixvQkFBb0IsQ0FBQyxNQUFNLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU07SUFDOUYsS0FBSyxFQUFFLHNCQUFzQjtDQUM5QixDQUFDLENBQUM7QUFFSCxNQUFNLGNBQWMsR0FBRyxtQkFBbUIsQ0FBZ0I7SUFDeEQsR0FBRyxFQUFFLHlCQUF5QjtJQUM5QixRQUFRLEVBQUUsaUJBQWlCLENBQUMsWUFBWTtJQUN4QyxJQUFJLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDZixNQUFNLFFBQVEsR0FBRyxjQUFjLENBQUMsTUFBTSxRQUFRLENBQUMsa0JBQWtCLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQ2xGLE9BQU8sUUFBUSxDQUFDLFlBQVksQ0FBQztJQUMvQixDQUFDO0lBQ0QsS0FBSyxFQUFFLGtCQUFrQjtDQUMxQixDQUFDLENBQUM7QUFFSCxNQUFNLGdCQUFnQixHQUFHLG1CQUFtQixDQUF1QjtJQUNqRSxHQUFHLEVBQUUsdUJBQXVCO0lBQzVCLFFBQVEsRUFBRSxtQkFBbUIsQ0FBQyxTQUFTO0lBQ3ZDLElBQUksRUFBRSxLQUFLLElBQUksRUFBRSxDQUNmLGdCQUFnQixDQUFDLE1BQU0sUUFBUSxDQUFDLDBCQUEwQixDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQyxTQUFTO0lBQ3RGLEtBQUssRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNqQixTQUFTLEVBQUUsb0JBQW9CLENBQUM7WUFDOUIsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsU0FBUztZQUM3QixRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVEsRUFBRSxTQUFTO1lBQ25DLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLFNBQVM7U0FDbkMsQ0FBQztRQUNGLE1BQU0sRUFBRSxzQkFBc0IsQ0FBQztZQUM3QixLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxNQUFNO1lBQzFCLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUSxFQUFFLE1BQU07WUFDaEMsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTTtTQUNoQyxDQUFDO0tBQ0gsQ0FBQztDQUNILENBQUMsQ0FBQztBQUVILE1BQU0scUJBQXFCLEdBQUcsbUJBQW1CLENBRS9DO0lBQ0EsR0FBRyxFQUFFLG1CQUFtQjtJQUN4QixRQUFRLEVBQUUsRUFBRTtJQUNaLEtBQUssRUFBRSxzQkFBc0I7Q0FDOUIsQ0FBQyxDQUFDO0FBRUgsSUFBSSxTQUFvQyxDQUFDO0FBRXpDLE1BQU0sc0JBQXNCLEdBQUcsT0FBTyxDQUFnQix1QkFBdUIsQ0FBQyxDQUFDO0FBRS9FLFNBQVMsYUFBYTtJQUNwQixPQUFPLFNBQVMsSUFBSSxzQkFBc0IsRUFBRSxDQUFDO0FBQy9DLENBQUM7QUFFRCxTQUFTLHVCQUF1QjtJQUM5QixPQUFPLFVBQVUsQ0FBQztRQUNoQixZQUFZLEVBQUUsd0JBQXdCO1FBQ3RDLFlBQVksRUFBRSxvQkFBb0IsQ0FBQyxZQUFZO1FBQy9DLFNBQVMsRUFBRSxpQkFBaUIsQ0FBQyxZQUFZO1FBQ3pDLFdBQVcsRUFBRSxtQkFBbUIsQ0FBQyxTQUFTO1FBQzFDLFVBQVUsRUFBRSxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsTUFBTTtRQUMvQyxTQUFTLEVBQUUsaUJBQWlCLENBQUMsU0FBUyxDQUFDLE1BQU07UUFDN0MsZ0JBQWdCLEVBQUUsRUFBRTtLQUNyQixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsU0FBUyxVQUFVLENBQUMsS0FRbkI7SUFDQyx3QkFBd0IsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDN0MsTUFBTSxhQUFhLEdBQUcsd0JBQXdCLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2hFLE1BQU0sb0JBQW9CLEdBQUcsd0JBQXdCLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNoRixPQUFPO1FBQ0wsWUFBWSxFQUFFO1lBQ1osU0FBUyxFQUFFLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDO1lBQ2hELFVBQVUsRUFBRSxJQUFJLEdBQUcsQ0FBQztnQkFDbEIsR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDLFVBQVU7Z0JBQ2hDLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxVQUFVO2FBQzlCLENBQUM7WUFDRixVQUFVLEVBQUUsSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUM7WUFDbEQsU0FBUyxFQUFFLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDO1lBQ2hELFNBQVMsRUFBRSxJQUFJLEdBQUcsQ0FBQztnQkFDakIsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLFNBQVM7Z0JBQzVCLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQyxTQUFTO2FBQy9CLENBQUM7WUFDRixLQUFLLEVBQUUsSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUM7WUFDckMsZ0JBQWdCLEVBQUUsSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQztZQUMzRCxXQUFXLEVBQUUsSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsQ0FBQztTQUMzRDtRQUNELFVBQVUsRUFBRSxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNyRCxTQUFTLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQztZQUN2QixHQUFHLG9CQUFvQjtZQUN2QixHQUFHLGFBQWE7U0FDakIsQ0FBQztRQUNGLGFBQWE7UUFDYixvQkFBb0I7UUFDcEIsZ0JBQWdCLEVBQUUsc0JBQXNCLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDO1FBQ2hFLHNCQUFzQixFQUFFLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsc0JBQXNCLENBQUM7S0FDeEUsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLHdCQUF3QixDQUMvQixNQUFtRDtJQUVuRCxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQ2xCLE1BQU0sQ0FBQyxXQUFXLENBQ2hCLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQzVDLEdBQUc7UUFDSCxNQUFNLENBQUMsTUFBTSxDQUNYLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUM5RTtLQUNGLENBQUMsQ0FDSCxDQUNGLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxzQkFBc0IsQ0FDN0IsTUFBMkQ7SUFFM0QsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUNsQixNQUFNLENBQUMsV0FBVyxDQUNoQixNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUM1QyxHQUFHO1FBQ0gsTUFBTSxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUM3QyxDQUFDLENBQ0gsQ0FDRixDQUFDO0FBQ0osQ0FBQztBQUVELElBQUksZUFBbUQsQ0FBQztBQUV4RDs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxvQkFBb0I7SUFDeEMsSUFBSSxlQUFlO1FBQUUsT0FBTyxlQUFlLENBQUM7SUFDNUMsZUFBZSxHQUFHLENBQUMsS0FBSyxJQUFJLEVBQUU7UUFDNUIsTUFBTSxDQUNKLFlBQVksRUFDWixZQUFZLEVBQ1osU0FBUyxFQUNULFdBQVcsRUFDWCxVQUFVLEVBQ1YsU0FBUyxFQUNULGdCQUFnQixFQUNqQixHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQztZQUNwQixZQUFZLENBQUMsR0FBRyxFQUFFO1lBQ2xCLGlCQUFpQixDQUFDLEdBQUcsRUFBRTtZQUN2QixjQUFjLENBQUMsR0FBRyxFQUFFO1lBQ3BCLGdCQUFnQixDQUFDLEdBQUcsRUFBRTtZQUN0QixlQUFlLENBQUMsR0FBRyxFQUFFO1lBQ3JCLGtCQUFrQixDQUFDLEdBQUcsRUFBRTtZQUN4QixxQkFBcUIsQ0FBQyxHQUFHLEVBQUU7U0FDNUIsQ0FBQyxDQUFDO1FBQ0gsU0FBUyxHQUFHLFVBQVUsQ0FBQztZQUNyQixZQUFZO1lBQ1osWUFBWTtZQUNaLFNBQVM7WUFDVCxXQUFXO1lBQ1gsVUFBVTtZQUNWLFNBQVM7WUFDVCxnQkFBZ0I7U0FDakIsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFO1FBQ2hCLGVBQWUsR0FBRyxTQUFTLENBQUM7SUFDOUIsQ0FBQyxDQUFDLENBQUM7SUFDSCxPQUFPLGVBQWUsQ0FBQztBQUN6QixDQUFDO0FBRUQsbUVBQW1FO0FBQ25FLE1BQU0sQ0FBQyxLQUFLLFVBQVUsb0JBQW9CO0lBQ3hDLE1BQU0sQ0FDSixZQUFZLEVBQ1osWUFBWSxFQUNaLFNBQVMsRUFDVCxXQUFXLEVBQ1gsVUFBVSxFQUNWLFNBQVMsRUFDVCxnQkFBZ0IsRUFDakIsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUM7UUFDcEIsY0FBYyxDQUFDLFlBQVksRUFBRSx3QkFBd0IsQ0FBQztRQUN0RCxjQUFjLENBQUMsaUJBQWlCLEVBQUUsb0JBQW9CLENBQUMsWUFBWSxDQUFDO1FBQ3BFLGNBQWMsQ0FBQyxjQUFjLEVBQUUsaUJBQWlCLENBQUMsWUFBWSxDQUFDO1FBQzlELGNBQWMsQ0FBQyxnQkFBZ0IsRUFBRSxtQkFBbUIsQ0FBQyxTQUFTLENBQUM7UUFDL0QsY0FBYyxDQUFDLGVBQWUsRUFBRSxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDO1FBQ3BFLGNBQWMsQ0FBQyxrQkFBa0IsRUFBRSxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDO1FBQ3RFLGNBQWMsQ0FBQyxxQkFBcUIsRUFBRSxFQUFFLENBQUM7S0FDMUMsQ0FBQyxDQUFDO0lBQ0gsU0FBUyxHQUFHLFVBQVUsQ0FBQztRQUNyQixZQUFZO1FBQ1osWUFBWTtRQUNaLFNBQVM7UUFDVCxXQUFXO1FBQ1gsVUFBVTtRQUNWLFNBQVM7UUFDVCxnQkFBZ0I7S0FDakIsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQztBQUVELEtBQUssVUFBVSxjQUFjLENBQUksS0FBdUIsRUFBRSxRQUFXO0lBQ25FLE1BQU0sTUFBTSxHQUFHLE1BQU0sS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2xDLElBQUksTUFBTSxLQUFLLFNBQVM7UUFBRSxPQUFPLE1BQU0sQ0FBQztJQUN4QyxPQUFPLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDM0MsQ0FBQztBQUVELDJFQUEyRTtBQUMzRSxNQUFNLFVBQVUsdUJBQXVCO0lBQ3JDLE9BQU8sYUFBYSxFQUFFLENBQUMsU0FBUyxDQUFDO0FBQ25DLENBQUM7QUFFRCwwRUFBMEU7QUFDMUUsTUFBTSxVQUFVLHlCQUF5QjtJQUN2QyxPQUFPLGFBQWEsRUFBRSxDQUFDLGdCQUFnQixDQUFDO0FBQzFDLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsdUJBQXVCLENBQzNDLEtBQWEsRUFDYixNQUFpQztJQUVqQyxNQUFNLE1BQU0sR0FBRyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM3QyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQztRQUFFLE9BQU8sdUJBQXVCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0QsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVCLElBQUksQ0FBQyxHQUFHO1FBQUUsT0FBTyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoRCxNQUFNLFNBQVMsR0FBRyxNQUFNLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNqRSxHQUFHLE9BQU87UUFDVixDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU07S0FDZCxDQUFDLENBQUMsQ0FBQztJQUNKLE1BQU0sT0FBTyxHQUFHLGFBQWEsRUFBRSxDQUFDO0lBQ2hDLFNBQVMsR0FBRztRQUNWLEdBQUcsT0FBTztRQUNWLGdCQUFnQixFQUFFLHNCQUFzQixDQUFDLFNBQVMsQ0FBQztLQUNwRCxDQUFDO0lBQ0YsT0FBTyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUM7QUFDckIsQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSw2QkFBNkIsQ0FDakQsS0FBYSxFQUNiLElBQWE7SUFFYixNQUFNLFNBQVMsR0FBRywyQkFBMkIsQ0FBQyxLQUFLLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQztJQUN0RSxJQUFJLFNBQVM7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUNoQyxPQUFPLHVCQUF1QixDQUFDLEtBQUssRUFBRSxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3BFLENBQUM7QUFFRCw0RUFBNEU7QUFDNUUsTUFBTSxVQUFVLG9CQUFvQixDQUFDLEtBQXNDO0lBQ3pFLE1BQU0sWUFBWSxHQUFHLGFBQWEsRUFBRSxDQUFDLFlBQVksQ0FBQztJQUNsRCxNQUFNLFVBQVUsR0FBRyxlQUFlLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2pELE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN4RSxPQUFPO1FBQ0wsU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzlELFVBQVUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNoRSxVQUFVLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDaEUsb0VBQW9FO1FBQ3BFLFNBQVMsRUFDUCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNuRCxVQUFVLENBQUMsSUFBSSxDQUNiLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FDWCx5QkFBeUIsQ0FBQyxRQUFRLENBQUM7Z0JBQ25DLHVCQUF1QixDQUFDLFFBQVEsRUFBRSxZQUFZLENBQUMsU0FBUyxDQUFDLENBQzVEO1FBQ0gsU0FBUyxFQUNQLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ25ELFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDM0UsS0FBSyxFQUNILElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztRQUN4RixnQkFBZ0IsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzVFLFdBQVcsRUFBRSwwQkFBMEIsQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJO0tBQ3hELENBQUM7QUFDSixDQUFDO0FBRUQsc0ZBQXNGO0FBQ3RGLE1BQU0sVUFBVSwwQkFBMEIsQ0FDeEMsS0FBc0M7SUFFdEMsTUFBTSxLQUFLLEdBQUcsYUFBYSxFQUFFLENBQUM7SUFDOUIsTUFBTSxJQUFJLEdBQUcsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3BGLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLHNCQUFzQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQzVFLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDN0UsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQztBQUVELDBFQUEwRTtBQUMxRSxNQUFNLFVBQVUsa0JBQWtCLENBQ2hDLEtBQXNDO0lBRXRDLE1BQU0sTUFBTSxHQUFHLGFBQWEsRUFBRSxDQUFDLFVBQVUsQ0FBQztJQUMxQyxLQUFLLE1BQU0sUUFBUSxJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzlDLE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsR0FBRztZQUFFLFNBQVM7UUFDbkIsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM5QixJQUFJLEtBQUs7WUFBRSxPQUFPLEtBQUssQ0FBQztJQUMxQixDQUFDO0lBQ0QsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSx1QkFBdUIsQ0FBQyxLQUFzQztJQUM1RSxNQUFNLEtBQUssR0FBRyxhQUFhLEVBQUUsQ0FBQztJQUM5QixNQUFNLFNBQVMsR0FBRywyQkFBMkIsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDNUQsSUFBSSxTQUFTO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFDaEMsS0FBSyxNQUFNLFFBQVEsSUFBSSxlQUFlLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUM5QyxNQUFNLE9BQU8sR0FBRyx5QkFBeUIsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDNUUsSUFBSSxPQUFPLEVBQUUsTUFBTTtZQUFFLE9BQU8sT0FBTyxDQUFDO0lBQ3RDLENBQUM7SUFDRCxNQUFNLE9BQU8sR0FBRyxPQUFPLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNGLE9BQU8sc0JBQXNCLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDekMsQ0FBQztBQUVELFNBQVMsMkJBQTJCLENBQ2xDLEtBQXNDLEVBQ3RDLEtBQW9CO0lBRXBCLE1BQU0sVUFBVSxHQUFHLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQyxLQUFLLE1BQU0sUUFBUSxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQ2xDLE1BQU0sVUFBVSxHQUFHLHlCQUF5QixDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDNUUsSUFBSSxVQUFVLEVBQUUsTUFBTTtZQUFFLE9BQU8sVUFBVSxDQUFDO0lBQzVDLENBQUM7SUFDRCxLQUFLLE1BQU0sUUFBUSxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQ2xDLE1BQU0sV0FBVyxHQUFHLHlCQUF5QixDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUNwRixJQUFJLFdBQVcsRUFBRSxNQUFNO1lBQUUsT0FBTyxXQUFXLENBQUM7SUFDOUMsQ0FBQztJQUNELE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUM7QUFFRCx3RUFBd0U7QUFDeEUsTUFBTSxVQUFVLGdCQUFnQixDQUFDLEtBQXNDO0lBQ3JFLE1BQU0sVUFBVSxHQUFHLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdDLE9BQU87UUFDTCxNQUFNLEVBQUUsY0FBYyxDQUFDLEtBQUssQ0FBQztRQUM3QixZQUFZLEVBQUUsb0JBQW9CLENBQUMsS0FBSyxDQUFDO1FBQ3pDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztLQUN0QyxDQUFDO0FBQ0osQ0FBQztBQUVELHlFQUF5RTtBQUN6RSxNQUFNLFVBQVUsd0JBQXdCO0lBUXRDLE9BQU87UUFDTCxhQUFhLEVBQUUsMkJBQTJCO1FBQzFDLFlBQVksRUFBRSxvQkFBb0IsQ0FBQyxXQUFXO1FBQzlDLFNBQVMsRUFBRSxpQkFBaUIsQ0FBQyxXQUFXO1FBQ3hDLFdBQVcsRUFBRSxtQkFBbUIsQ0FBQyxXQUFXO1FBQzVDLFVBQVUsRUFBRSxrQkFBa0IsQ0FBQyxXQUFXO1FBQzFDLFNBQVMsRUFBRSxpQkFBaUIsQ0FBQyxXQUFXO0tBQ3pDLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxlQUFlLENBQ3RCLEtBQXNDLEVBQ3RDLGtCQUFrQixHQUFHLElBQUk7SUFFekIsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRO1FBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlDLE9BQU87UUFDTCxLQUFLLENBQUMsSUFBSTtRQUNWLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNsRCxLQUFLLENBQUMsZ0JBQWdCO1FBQ3RCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQztLQUMzQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBbUIsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3ZELENBQUM7QUFFRCxTQUFTLFFBQVEsQ0FBQyxLQUFhO0lBQzdCLE9BQU8sZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN2RCxDQUFDO0FBRUQsS0FBSyxVQUFVLFFBQVEsQ0FBQyxHQUFXO0lBQ2pDLE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsRUFBRTtRQUNoQyxPQUFPLEVBQUUsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFO1FBQ3JDLE1BQU0sRUFBRSxXQUFXLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztLQUNwQyxDQUFDLENBQUM7SUFDSCxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMsMENBQTBDLFFBQVEsQ0FBQyxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsQ0FBQztJQUN2RixDQUFDO0lBQ0QsT0FBTyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDekIsQ0FBQztBQUVELEtBQUssVUFBVSxRQUFRLENBQUMsR0FBVztJQUNqQyxNQUFNLFFBQVEsR0FBRyxNQUFNLEtBQUssQ0FBQyxHQUFHLEVBQUU7UUFDaEMsT0FBTyxFQUFFLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRTtRQUNyQyxNQUFNLEVBQUUsV0FBVyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7S0FDcEMsQ0FBQyxDQUFDO0lBQ0gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNqQixNQUFNLElBQUksS0FBSyxDQUFDLHVDQUF1QyxRQUFRLENBQUMsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDcEYsQ0FBQztJQUNELE9BQU8sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3pCLENBQUM7QUFFRCxTQUFTLGtCQUFrQixDQUFDLEtBSTNCO0lBQ0MsTUFBTSxVQUFVLEdBQUcsQ0FBQyxHQUF1QyxFQUFFLEVBQUUsQ0FDN0Qsb0JBQW9CLENBQUM7UUFDbkIsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUM7UUFDekIsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUM7UUFDL0IsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDO0tBQzlCLENBQUMsQ0FBQztJQUNMLE9BQU87UUFDTCxVQUFVLEVBQUUsVUFBVSxDQUFDLFlBQVksQ0FBQztRQUNwQyxTQUFTLEVBQUUsVUFBVSxDQUFDLFdBQVcsQ0FBQztRQUNsQyxLQUFLLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQztRQUMxQixnQkFBZ0IsRUFBRSxVQUFVLENBQUMsa0JBQWtCLENBQUM7UUFDaEQsb0JBQW9CLEVBQUUsVUFBVSxDQUFDLHNCQUFzQixDQUFDO1FBQ3hELHNCQUFzQixFQUFFLFVBQVUsQ0FBQyx3QkFBd0IsQ0FBQztLQUM3RCxDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsVUFBVTtJQUNqQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQ3ZDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEJ1aWxkLWdlbmVyYXRlZCBEYXRhYnJpY2tzIGFuZCBwdWJsaWMgbW9kZWwgY2FwYWJpbGl0eSBtZXRhZGF0YSwgcGx1cyBhXG4gKiBkYWlseSB3cml0ZS10aHJvdWdoIGNhY2hlIGZvciByZWZyZXNoZWQgc291cmNlcyBhbmQgZXJyb3ItbGVhcm5lZCByZWFzb25pbmdcbiAqIGxhZGRlcnMuXG4gKlxuICogQ29tbWl0dGVkIHNuYXBzaG90cyBzZWVkIGV2ZXJ5IHByb2Nlc3MuIHtAbGluayByZWZyZXNoTW9kZWxNZXRhZGF0YX0gcHVsbHNcbiAqIERhdGFicmlja3MgZG9jdW1lbnRhdGlvbiwgbW9kZWxzLmRldiwgYW5kIG1vZGVscGFyYW1zLmRldiB0aHJvdWdoIHRoZSBzaGFyZWRcbiAqIG1lbW9yeS1maXJzdCB7QGxpbmsgY3JlYXRlTWV0YWRhdGFDYWNoZX0gYW5kIHJlYnVpbGRzIHRoZSBpbi1tZW1vcnkgaW5kZXguXG4gKiBFcnJvci1sZWFybmVkIGVmZm9ydHMgdXNlIHRoZSBzYW1lIHN0b3JlIHZpYSB7QGxpbmsgcmVtZW1iZXJSZWFzb25pbmdMZXZlbHN9LlxuICogS25vd24tZ29vZCB2YWx1ZXMgYXJlIHdyaXR0ZW4gYmVoaW5kIHRvIHRoZSBzaGFyZWQgbW9kZWwgcHJvamVjdCBjYWNoZS5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cbmltcG9ydCB7IG1lbW9pemUgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHR5cGUge1xuICBNb2RlbENhcGFiaWxpdGllcyxcbiAgTW9kZWxNZXRhZGF0YSxcbiAgTW9kZWxSYXRlTGltaXRzLFxuICBTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5LFxufSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtbW9kZWxcIjtcblxuaW1wb3J0IHtcbiAgcGFyc2VNb2RlbFBhcmFtcyxcbiAgcGFyc2VNb2RlbENhcGFiaWxpdGllcyxcbiAgcGFyc2VNb2RlbFJhdGVMaW1pdHMsXG4gIHBhcnNlTW9kZWxzRGV2LFxuICBwYXJzZVJlYXNvbmluZ01vZGVscyxcbiAgcGFyc2VSZXRpcmVkTW9kZWxzLFxufSBmcm9tIFwiLi9fbWV0YWRhdGEtZ2VuZXJhdG9yLnRzXCI7XG5pbXBvcnQgY2FwYWJpbGl0aWVzU25hcHNob3RKc29uIGZyb20gXCIuL2dlbmVyYXRlZC9tb2RlbC1jYXBhYmlsaXRpZXMuanNvblwiIHdpdGggeyB0eXBlOiBcImpzb25cIiB9O1xuaW1wb3J0IG1vZGVsUGFyYW1zU25hcHNob3RKc29uIGZyb20gXCIuL2dlbmVyYXRlZC9tb2RlbHBhcmFtcy1yZWFzb25pbmcuanNvblwiIHdpdGggeyB0eXBlOiBcImpzb25cIiB9O1xuaW1wb3J0IG1vZGVsc0RldlNuYXBzaG90SnNvbiBmcm9tIFwiLi9nZW5lcmF0ZWQvbW9kZWxzLWRldi1jYXBhYmlsaXRpZXMuanNvblwiIHdpdGggeyB0eXBlOiBcImpzb25cIiB9O1xuaW1wb3J0IHJhdGVMaW1pdHNTbmFwc2hvdEpzb24gZnJvbSBcIi4vZ2VuZXJhdGVkL21vZGVsLXJhdGUtbGltaXRzLmpzb25cIiB3aXRoIHsgdHlwZTogXCJqc29uXCIgfTtcbmltcG9ydCByZWFzb25pbmdTbmFwc2hvdEpzb24gZnJvbSBcIi4vZ2VuZXJhdGVkL21vZGVsLXJlYXNvbmluZy5qc29uXCIgd2l0aCB7IHR5cGU6IFwianNvblwiIH07XG5pbXBvcnQge1xuICBjcmVhdGVNZXRhZGF0YUNhY2hlLFxuICBtZXJnZVByZWZlckZyZXNoTGlzdCxcbiAgbWVyZ2VQcmVmZXJGcmVzaFJlY29yZCxcbiAgdHlwZSBNZXRhZGF0YUNhY2hlLFxufSBmcm9tIFwiLi9tZXRhZGF0YS1jYWNoZS50c1wiO1xuaW1wb3J0IHtcbiAgTU9ERUxQQVJBTVNfREVWX01PREVMU19VUkwsXG4gIE1PREVMU19ERVZfQVBJX1VSTCxcbiAgTU9ERUxfUkFURV9MSU1JVFNfVVJMLFxuICBPUEVOQUlfUkVTUE9OU0VTX01PREVMU19VUkwsXG4gIFFVRVJZX1JFQVNPTl9NT0RFTFNfVVJMLFxuICBSRVRJUkVEX01PREVMU19VUkwsXG4gIFdFQl9TRUFSQ0hfTU9ERUxTX1VSTCxcbiAgdHlwZSBNb2RlbFBhcmFtc0NhdGFsb2d1ZSxcbiAgdHlwZSBNb2RlbFBhcmFtc1NuYXBzaG90LFxuICB0eXBlIE1vZGVsQ2FwYWJpbGl0aWVzU25hcHNob3QsXG4gIHR5cGUgTW9kZWxDYXBhYmlsaXR5Q2F0YWxvZ3VlLFxuICB0eXBlIE1vZGVsUmF0ZUxpbWl0c1NuYXBzaG90LFxuICB0eXBlIE1vZGVsc0RldkNhcGFiaWxpdHlDYXRhbG9ndWUsXG4gIHR5cGUgTW9kZWxzRGV2U25hcHNob3QsXG4gIHR5cGUgUmVhc29uaW5nTW9kZWxzU25hcHNob3QsXG59IGZyb20gXCIuL21ldGFkYXRhLWNvbnRyYWN0LnRzXCI7XG5pbXBvcnQge1xuICBpbmhlcml0c05hdGl2ZVdlYlNlYXJjaCxcbiAgaXNGb3VuZGF0aW9uTW9kZWxJZGVudGl0eSxcbiAgbW9kZWxSZWFzb25pbmdFZmZvcnRzLFxuICBtb2RlbFNlYXJjaFF1ZXJ5LFxuICBtb2RlbFN1cHBvcnRzVG9vbHMsXG59IGZyb20gXCIuL3BvbGljeS50c1wiO1xuaW1wb3J0IHtcbiAgZGVmYXVsdFJlYXNvbmluZ0xldmVscyxcbiAgZG9jdW1lbnRlZFJlYXNvbmluZ0xldmVscyxcbiAgcGFyc2VSZWFzb25pbmcsXG4gIHBhcnNlUmVhc29uaW5nTGV2ZWxzLFxuICB0eXBlIFJlYXNvbmluZ0xldmVsLFxuICB0eXBlIFJlYXNvbmluZ01vZGVsQ2F0YWxvZ3VlLFxuICB1bmlxdWVSZWFzb25pbmdMZXZlbHMsXG59IGZyb20gXCIuL3JlYXNvbmluZy10cmFuc2xhdGlvbi50c1wiO1xuaW1wb3J0IHtcbiAgQ09NTUlUVEVEX1JFVElSRURfTU9ERUxTLFxuICBtb2RlbFN0YXR1c0ZvcixcbiAgcmVwbGFjZVJldGlyZWRNb2RlbE5hbWVzLFxuICBSRVRJUkVEX01PREVMU19HRU5FUkFURURfQVQsXG59IGZyb20gXCIuL3JldGlyZW1lbnQudHNcIjtcblxuY29uc3QgY2FwYWJpbGl0aWVzU25hcHNob3QgPSBjYXBhYmlsaXRpZXNTbmFwc2hvdEpzb24gYXMgTW9kZWxDYXBhYmlsaXRpZXNTbmFwc2hvdDtcbmNvbnN0IG1vZGVsUGFyYW1zU25hcHNob3QgPSBtb2RlbFBhcmFtc1NuYXBzaG90SnNvbiBhcyBNb2RlbFBhcmFtc1NuYXBzaG90O1xuY29uc3QgbW9kZWxzRGV2U25hcHNob3QgPSBtb2RlbHNEZXZTbmFwc2hvdEpzb24gYXMgTW9kZWxzRGV2U25hcHNob3Q7XG5jb25zdCByYXRlTGltaXRzU25hcHNob3QgPSByYXRlTGltaXRzU25hcHNob3RKc29uIGFzIE1vZGVsUmF0ZUxpbWl0c1NuYXBzaG90O1xuY29uc3QgcmVhc29uaW5nU25hcHNob3QgPSByZWFzb25pbmdTbmFwc2hvdEpzb24gYXMgUmVhc29uaW5nTW9kZWxzU25hcHNob3Q7XG5cbmludGVyZmFjZSBNZXRhZGF0YUluZGV4IHtcbiAgcmVhZG9ubHkgY2FwYWJpbGl0aWVzOiB7XG4gICAgcmVhZG9ubHkgW0tleSBpbiBrZXlvZiBNb2RlbENhcGFiaWxpdGllc106IFJlYWRvbmx5U2V0PHN0cmluZz47XG4gIH07XG4gIHJlYWRvbmx5IHJhdGVMaW1pdHM6IFJlYWRvbmx5TWFwPHN0cmluZywgTW9kZWxSYXRlTGltaXRzPjtcbiAgcmVhZG9ubHkgcmVhc29uaW5nOiBSZWFzb25pbmdNb2RlbENhdGFsb2d1ZTtcbiAgcmVhZG9ubHkgcmVhc29uaW5nRG9jczogUmVhc29uaW5nTW9kZWxDYXRhbG9ndWU7XG4gIHJlYWRvbmx5IG1vZGVsUGFyYW1zUmVhc29uaW5nOiBSZWFzb25pbmdNb2RlbENhdGFsb2d1ZTtcbiAgcmVhZG9ubHkgbGVhcm5lZFJlYXNvbmluZzogUmVhc29uaW5nTW9kZWxDYXRhbG9ndWU7XG4gIHJlYWRvbmx5IHRlbXBlcmF0dXJlVW5zdXBwb3J0ZWQ6IFJlYWRvbmx5U2V0PHN0cmluZz47XG59XG5cbnR5cGUgQ2FwYWJpbGl0eVNldHMgPSBNb2RlbENhcGFiaWxpdHlDYXRhbG9ndWU7XG50eXBlIE1vZGVsc0RldkRhdGEgPSBNb2RlbHNEZXZDYXBhYmlsaXR5Q2F0YWxvZ3VlO1xuXG5jb25zdCBVU0VSX0FHRU5UID0gXCJkYngtdG9vbHMtbW9kZWwtbWV0YWRhdGEvMVwiO1xuXG5jb25zdCByZXRpcmVkQ2FjaGUgPSBjcmVhdGVNZXRhZGF0YUNhY2hlPHJlYWRvbmx5IHN0cmluZ1tdPih7XG4gIGtleTogXCJyZXRpcmVkLW1vZGVsc1wiLFxuICBmYWxsYmFjazogQ09NTUlUVEVEX1JFVElSRURfTU9ERUxTLFxuICBsb2FkOiBhc3luYyAoKSA9PiBwYXJzZVJldGlyZWRNb2RlbHMoYXdhaXQgbG9hZFBhZ2UoUkVUSVJFRF9NT0RFTFNfVVJMKSwgbm93U2Vjb25kcygpKS5tb2RlbHMsXG4gIG1lcmdlOiBtZXJnZVByZWZlckZyZXNoTGlzdCxcbn0pO1xuXG5jb25zdCBjYXBhYmlsaXRpZXNDYWNoZSA9IGNyZWF0ZU1ldGFkYXRhQ2FjaGU8Q2FwYWJpbGl0eVNldHM+KHtcbiAga2V5OiBcIm1vZGVsLWNhcGFiaWxpdGllc1wiLFxuICBmYWxsYmFjazogY2FwYWJpbGl0aWVzU25hcHNob3QuY2FwYWJpbGl0aWVzLFxuICBsb2FkOiBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgW3Jlc3BvbnNlc0h0bWwsIHdlYlNlYXJjaEh0bWxdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgbG9hZFBhZ2UoT1BFTkFJX1JFU1BPTlNFU19NT0RFTFNfVVJMKSxcbiAgICAgIGxvYWRQYWdlKFdFQl9TRUFSQ0hfTU9ERUxTX1VSTCksXG4gICAgXSk7XG4gICAgcmV0dXJuIHBhcnNlTW9kZWxDYXBhYmlsaXRpZXMocmVzcG9uc2VzSHRtbCwgd2ViU2VhcmNoSHRtbCwgbm93U2Vjb25kcygpKS5jYXBhYmlsaXRpZXM7XG4gIH0sXG4gIG1lcmdlOiAoaW5wdXQpID0+ICh7XG4gICAgcmVzcG9uc2VzOiBtZXJnZVByZWZlckZyZXNoTGlzdCh7XG4gICAgICBmcmVzaDogaW5wdXQuZnJlc2g/LnJlc3BvbnNlcyxcbiAgICAgIHByZXZpb3VzOiBpbnB1dC5wcmV2aW91cz8ucmVzcG9uc2VzLFxuICAgICAgZmFsbGJhY2s6IGlucHV0LmZhbGxiYWNrLnJlc3BvbnNlcyxcbiAgICB9KSxcbiAgICBpbWFnZUlucHV0OiBtZXJnZVByZWZlckZyZXNoTGlzdCh7XG4gICAgICBmcmVzaDogaW5wdXQuZnJlc2g/LmltYWdlSW5wdXQsXG4gICAgICBwcmV2aW91czogaW5wdXQucHJldmlvdXM/LmltYWdlSW5wdXQsXG4gICAgICBmYWxsYmFjazogaW5wdXQuZmFsbGJhY2suaW1hZ2VJbnB1dCxcbiAgICB9KSxcbiAgICBhcHBseVBhdGNoOiBtZXJnZVByZWZlckZyZXNoTGlzdCh7XG4gICAgICBmcmVzaDogaW5wdXQuZnJlc2g/LmFwcGx5UGF0Y2gsXG4gICAgICBwcmV2aW91czogaW5wdXQucHJldmlvdXM/LmFwcGx5UGF0Y2gsXG4gICAgICBmYWxsYmFjazogaW5wdXQuZmFsbGJhY2suYXBwbHlQYXRjaCxcbiAgICB9KSxcbiAgICB3ZWJTZWFyY2g6IG1lcmdlUHJlZmVyRnJlc2hMaXN0KHtcbiAgICAgIGZyZXNoOiBpbnB1dC5mcmVzaD8ud2ViU2VhcmNoLFxuICAgICAgcHJldmlvdXM6IGlucHV0LnByZXZpb3VzPy53ZWJTZWFyY2gsXG4gICAgICBmYWxsYmFjazogaW5wdXQuZmFsbGJhY2sud2ViU2VhcmNoLFxuICAgIH0pLFxuICB9KSxcbn0pO1xuXG5jb25zdCByYXRlTGltaXRzQ2FjaGUgPSBjcmVhdGVNZXRhZGF0YUNhY2hlPFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIE1vZGVsUmF0ZUxpbWl0cz4+Pih7XG4gIGtleTogXCJtb2RlbC1yYXRlLWxpbWl0c1wiLFxuICBmYWxsYmFjazogcmF0ZUxpbWl0c1NuYXBzaG90LmNhdGFsb2d1ZS5tb2RlbHMsXG4gIGxvYWQ6IGFzeW5jICgpID0+XG4gICAgcGFyc2VNb2RlbFJhdGVMaW1pdHMoYXdhaXQgbG9hZFBhZ2UoTU9ERUxfUkFURV9MSU1JVFNfVVJMKSwgbm93U2Vjb25kcygpKS5jYXRhbG9ndWUubW9kZWxzLFxuICBtZXJnZTogbWVyZ2VQcmVmZXJGcmVzaFJlY29yZCxcbn0pO1xuXG5jb25zdCByZWFzb25pbmdEb2NzQ2FjaGUgPSBjcmVhdGVNZXRhZGF0YUNhY2hlPFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHJlYWRvbmx5IHN0cmluZ1tdPj4+KHtcbiAga2V5OiBcIm1vZGVsLXJlYXNvbmluZ1wiLFxuICBmYWxsYmFjazogcmVhc29uaW5nU25hcHNob3QuY2F0YWxvZ3VlLm1vZGVscyxcbiAgbG9hZDogYXN5bmMgKCkgPT5cbiAgICBwYXJzZVJlYXNvbmluZ01vZGVscyhhd2FpdCBsb2FkUGFnZShRVUVSWV9SRUFTT05fTU9ERUxTX1VSTCksIG5vd1NlY29uZHMoKSkuY2F0YWxvZ3VlLm1vZGVscyxcbiAgbWVyZ2U6IG1lcmdlUHJlZmVyRnJlc2hSZWNvcmQsXG59KTtcblxuY29uc3QgbW9kZWxzRGV2Q2FjaGUgPSBjcmVhdGVNZXRhZGF0YUNhY2hlPE1vZGVsc0RldkRhdGE+KHtcbiAga2V5OiBcIm1vZGVscy1kZXYtY2FwYWJpbGl0aWVzXCIsXG4gIGZhbGxiYWNrOiBtb2RlbHNEZXZTbmFwc2hvdC5jYXBhYmlsaXRpZXMsXG4gIGxvYWQ6IGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzbmFwc2hvdCA9IHBhcnNlTW9kZWxzRGV2KGF3YWl0IGxvYWRKc29uKE1PREVMU19ERVZfQVBJX1VSTCksIG5vd1NlY29uZHMoKSk7XG4gICAgcmV0dXJuIHNuYXBzaG90LmNhcGFiaWxpdGllcztcbiAgfSxcbiAgbWVyZ2U6IG1lcmdlTW9kZWxzRGV2RGF0YSxcbn0pO1xuXG5jb25zdCBtb2RlbFBhcmFtc0NhY2hlID0gY3JlYXRlTWV0YWRhdGFDYWNoZTxNb2RlbFBhcmFtc0NhdGFsb2d1ZT4oe1xuICBrZXk6IFwibW9kZWxwYXJhbXMtcmVhc29uaW5nXCIsXG4gIGZhbGxiYWNrOiBtb2RlbFBhcmFtc1NuYXBzaG90LmNhdGFsb2d1ZSxcbiAgbG9hZDogYXN5bmMgKCkgPT5cbiAgICBwYXJzZU1vZGVsUGFyYW1zKGF3YWl0IGxvYWRKc29uKE1PREVMUEFSQU1TX0RFVl9NT0RFTFNfVVJMKSwgbm93U2Vjb25kcygpKS5jYXRhbG9ndWUsXG4gIG1lcmdlOiAoaW5wdXQpID0+ICh7XG4gICAgcmVhc29uaW5nOiBtZXJnZVByZWZlckZyZXNoTGlzdCh7XG4gICAgICBmcmVzaDogaW5wdXQuZnJlc2g/LnJlYXNvbmluZyxcbiAgICAgIHByZXZpb3VzOiBpbnB1dC5wcmV2aW91cz8ucmVhc29uaW5nLFxuICAgICAgZmFsbGJhY2s6IGlucHV0LmZhbGxiYWNrLnJlYXNvbmluZyxcbiAgICB9KSxcbiAgICBtb2RlbHM6IG1lcmdlUHJlZmVyRnJlc2hSZWNvcmQoe1xuICAgICAgZnJlc2g6IGlucHV0LmZyZXNoPy5tb2RlbHMsXG4gICAgICBwcmV2aW91czogaW5wdXQucHJldmlvdXM/Lm1vZGVscyxcbiAgICAgIGZhbGxiYWNrOiBpbnB1dC5mYWxsYmFjay5tb2RlbHMsXG4gICAgfSksXG4gIH0pLFxufSk7XG5cbmNvbnN0IGxlYXJuZWRSZWFzb25pbmdDYWNoZSA9IGNyZWF0ZU1ldGFkYXRhQ2FjaGU8XG4gIFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHJlYWRvbmx5IFJlYXNvbmluZ0xldmVsW10+PlxuPih7XG4gIGtleTogXCJsZWFybmVkLXJlYXNvbmluZ1wiLFxuICBmYWxsYmFjazoge30sXG4gIG1lcmdlOiBtZXJnZVByZWZlckZyZXNoUmVjb3JkLFxufSk7XG5cbmxldCBsaXZlSW5kZXg6IE1ldGFkYXRhSW5kZXggfCB1bmRlZmluZWQ7XG5cbmNvbnN0IGNvbW1pdHRlZE1ldGFkYXRhSW5kZXggPSBtZW1vaXplPE1ldGFkYXRhSW5kZXg+KGJ1aWxkSW5kZXhGcm9tQ29tbWl0dGVkKTtcblxuZnVuY3Rpb24gbWV0YWRhdGFJbmRleCgpOiBNZXRhZGF0YUluZGV4IHtcbiAgcmV0dXJuIGxpdmVJbmRleCA/PyBjb21taXR0ZWRNZXRhZGF0YUluZGV4KCk7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkSW5kZXhGcm9tQ29tbWl0dGVkKCk6IE1ldGFkYXRhSW5kZXgge1xuICByZXR1cm4gYnVpbGRJbmRleCh7XG4gICAgcmV0aXJlZE5hbWVzOiBDT01NSVRURURfUkVUSVJFRF9NT0RFTFMsXG4gICAgY2FwYWJpbGl0aWVzOiBjYXBhYmlsaXRpZXNTbmFwc2hvdC5jYXBhYmlsaXRpZXMsXG4gICAgbW9kZWxzRGV2OiBtb2RlbHNEZXZTbmFwc2hvdC5jYXBhYmlsaXRpZXMsXG4gICAgbW9kZWxQYXJhbXM6IG1vZGVsUGFyYW1zU25hcHNob3QuY2F0YWxvZ3VlLFxuICAgIHJhdGVMaW1pdHM6IHJhdGVMaW1pdHNTbmFwc2hvdC5jYXRhbG9ndWUubW9kZWxzLFxuICAgIHJlYXNvbmluZzogcmVhc29uaW5nU25hcHNob3QuY2F0YWxvZ3VlLm1vZGVscyxcbiAgICBsZWFybmVkUmVhc29uaW5nOiB7fSxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkSW5kZXgoaW5wdXQ6IHtcbiAgcmVhZG9ubHkgcmV0aXJlZE5hbWVzOiByZWFkb25seSBzdHJpbmdbXTtcbiAgcmVhZG9ubHkgY2FwYWJpbGl0aWVzOiBDYXBhYmlsaXR5U2V0cztcbiAgcmVhZG9ubHkgbW9kZWxzRGV2OiBNb2RlbHNEZXZEYXRhO1xuICByZWFkb25seSBtb2RlbFBhcmFtczogTW9kZWxQYXJhbXNDYXRhbG9ndWU7XG4gIHJlYWRvbmx5IHJhdGVMaW1pdHM6IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIE1vZGVsUmF0ZUxpbWl0cz4+O1xuICByZWFkb25seSByZWFzb25pbmc6IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHJlYWRvbmx5IHN0cmluZ1tdPj47XG4gIHJlYWRvbmx5IGxlYXJuZWRSZWFzb25pbmc6IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHJlYWRvbmx5IFJlYXNvbmluZ0xldmVsW10+Pjtcbn0pOiBNZXRhZGF0YUluZGV4IHtcbiAgcmVwbGFjZVJldGlyZWRNb2RlbE5hbWVzKGlucHV0LnJldGlyZWROYW1lcyk7XG4gIGNvbnN0IHJlYXNvbmluZ0RvY3MgPSBmcmVlemVSZWFzb25pbmdDYXRhbG9ndWUoaW5wdXQucmVhc29uaW5nKTtcbiAgY29uc3QgbW9kZWxQYXJhbXNSZWFzb25pbmcgPSBmcmVlemVSZWFzb25pbmdDYXRhbG9ndWUoaW5wdXQubW9kZWxQYXJhbXMubW9kZWxzKTtcbiAgcmV0dXJuIHtcbiAgICBjYXBhYmlsaXRpZXM6IHtcbiAgICAgIHJlc3BvbnNlczogbmV3IFNldChpbnB1dC5jYXBhYmlsaXRpZXMucmVzcG9uc2VzKSxcbiAgICAgIGltYWdlSW5wdXQ6IG5ldyBTZXQoW1xuICAgICAgICAuLi5pbnB1dC5jYXBhYmlsaXRpZXMuaW1hZ2VJbnB1dCxcbiAgICAgICAgLi4uaW5wdXQubW9kZWxzRGV2LmltYWdlSW5wdXQsXG4gICAgICBdKSxcbiAgICAgIGFwcGx5UGF0Y2g6IG5ldyBTZXQoaW5wdXQuY2FwYWJpbGl0aWVzLmFwcGx5UGF0Y2gpLFxuICAgICAgd2ViU2VhcmNoOiBuZXcgU2V0KGlucHV0LmNhcGFiaWxpdGllcy53ZWJTZWFyY2gpLFxuICAgICAgcmVhc29uaW5nOiBuZXcgU2V0KFtcbiAgICAgICAgLi4uaW5wdXQubW9kZWxzRGV2LnJlYXNvbmluZyxcbiAgICAgICAgLi4uaW5wdXQubW9kZWxQYXJhbXMucmVhc29uaW5nLFxuICAgICAgXSksXG4gICAgICB0b29sczogbmV3IFNldChpbnB1dC5tb2RlbHNEZXYudG9vbHMpLFxuICAgICAgc3RydWN0dXJlZE91dHB1dDogbmV3IFNldChpbnB1dC5tb2RlbHNEZXYuc3RydWN0dXJlZE91dHB1dCksXG4gICAgICB0ZW1wZXJhdHVyZTogbmV3IFNldChpbnB1dC5tb2RlbHNEZXYudGVtcGVyYXR1cmVTdXBwb3J0ZWQpLFxuICAgIH0sXG4gICAgcmF0ZUxpbWl0czogbmV3IE1hcChPYmplY3QuZW50cmllcyhpbnB1dC5yYXRlTGltaXRzKSksXG4gICAgcmVhc29uaW5nOiBPYmplY3QuZnJlZXplKHtcbiAgICAgIC4uLm1vZGVsUGFyYW1zUmVhc29uaW5nLFxuICAgICAgLi4ucmVhc29uaW5nRG9jcyxcbiAgICB9KSxcbiAgICByZWFzb25pbmdEb2NzLFxuICAgIG1vZGVsUGFyYW1zUmVhc29uaW5nLFxuICAgIGxlYXJuZWRSZWFzb25pbmc6IGZyZWV6ZUxlYXJuZWRDYXRhbG9ndWUoaW5wdXQubGVhcm5lZFJlYXNvbmluZyksXG4gICAgdGVtcGVyYXR1cmVVbnN1cHBvcnRlZDogbmV3IFNldChpbnB1dC5tb2RlbHNEZXYudGVtcGVyYXR1cmVVbnN1cHBvcnRlZCksXG4gIH07XG59XG5cbmZ1bmN0aW9uIGZyZWV6ZVJlYXNvbmluZ0NhdGFsb2d1ZShcbiAgbW9kZWxzOiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCByZWFkb25seSBzdHJpbmdbXT4+LFxuKTogUmVhc29uaW5nTW9kZWxDYXRhbG9ndWUge1xuICByZXR1cm4gT2JqZWN0LmZyZWV6ZShcbiAgICBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICBPYmplY3QuZW50cmllcyhtb2RlbHMpLm1hcCgoW2tleSwgbGV2ZWxzXSkgPT4gW1xuICAgICAgICBrZXksXG4gICAgICAgIE9iamVjdC5mcmVlemUoXG4gICAgICAgICAgdW5pcXVlUmVhc29uaW5nTGV2ZWxzKGxldmVscy5mbGF0TWFwKChsZXZlbCkgPT4gcGFyc2VSZWFzb25pbmcobGV2ZWwpID8/IFtdKSksXG4gICAgICAgICksXG4gICAgICBdKSxcbiAgICApLFxuICApO1xufVxuXG5mdW5jdGlvbiBmcmVlemVMZWFybmVkQ2F0YWxvZ3VlKFxuICBtb2RlbHM6IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHJlYWRvbmx5IFJlYXNvbmluZ0xldmVsW10+Pixcbik6IFJlYXNvbmluZ01vZGVsQ2F0YWxvZ3VlIHtcbiAgcmV0dXJuIE9iamVjdC5mcmVlemUoXG4gICAgT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgT2JqZWN0LmVudHJpZXMobW9kZWxzKS5tYXAoKFtrZXksIGxldmVsc10pID0+IFtcbiAgICAgICAga2V5LFxuICAgICAgICBPYmplY3QuZnJlZXplKHVuaXF1ZVJlYXNvbmluZ0xldmVscyhsZXZlbHMpKSxcbiAgICAgIF0pLFxuICAgICksXG4gICk7XG59XG5cbmxldCByZWZyZXNoSW5mbGlnaHQ6IFByb21pc2U8TWV0YWRhdGFJbmRleD4gfCB1bmRlZmluZWQ7XG5cbi8qKlxuICogSHlkcmF0ZSBvciByZWZyZXNoIGRvY3VtZW50YXRpb24gKyBsZWFybmVkIGNhY2hlcyBpbnRvIHRoZSBwcm9jZXNzIGluZGV4LlxuICpcbiAqIFNhZmUgdG8gY2FsbCBvbiBnYXRld2F5IHN0YXJ0dXAuIENvbmN1cnJlbnQgY2FsbGVycyBzaGFyZSBvbmUgcmVmcmVzaC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlZnJlc2hNb2RlbE1ldGFkYXRhKCk6IFByb21pc2U8TWV0YWRhdGFJbmRleD4ge1xuICBpZiAocmVmcmVzaEluZmxpZ2h0KSByZXR1cm4gcmVmcmVzaEluZmxpZ2h0O1xuICByZWZyZXNoSW5mbGlnaHQgPSAoYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IFtcbiAgICAgIHJldGlyZWROYW1lcyxcbiAgICAgIGNhcGFiaWxpdGllcyxcbiAgICAgIG1vZGVsc0RldixcbiAgICAgIG1vZGVsUGFyYW1zLFxuICAgICAgcmF0ZUxpbWl0cyxcbiAgICAgIHJlYXNvbmluZyxcbiAgICAgIGxlYXJuZWRSZWFzb25pbmcsXG4gICAgXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIHJldGlyZWRDYWNoZS5nZXQoKSxcbiAgICAgIGNhcGFiaWxpdGllc0NhY2hlLmdldCgpLFxuICAgICAgbW9kZWxzRGV2Q2FjaGUuZ2V0KCksXG4gICAgICBtb2RlbFBhcmFtc0NhY2hlLmdldCgpLFxuICAgICAgcmF0ZUxpbWl0c0NhY2hlLmdldCgpLFxuICAgICAgcmVhc29uaW5nRG9jc0NhY2hlLmdldCgpLFxuICAgICAgbGVhcm5lZFJlYXNvbmluZ0NhY2hlLmdldCgpLFxuICAgIF0pO1xuICAgIGxpdmVJbmRleCA9IGJ1aWxkSW5kZXgoe1xuICAgICAgcmV0aXJlZE5hbWVzLFxuICAgICAgY2FwYWJpbGl0aWVzLFxuICAgICAgbW9kZWxzRGV2LFxuICAgICAgbW9kZWxQYXJhbXMsXG4gICAgICByYXRlTGltaXRzLFxuICAgICAgcmVhc29uaW5nLFxuICAgICAgbGVhcm5lZFJlYXNvbmluZyxcbiAgICB9KTtcbiAgICByZXR1cm4gbGl2ZUluZGV4O1xuICB9KSgpLmZpbmFsbHkoKCkgPT4ge1xuICAgIHJlZnJlc2hJbmZsaWdodCA9IHVuZGVmaW5lZDtcbiAgfSk7XG4gIHJldHVybiByZWZyZXNoSW5mbGlnaHQ7XG59XG5cbi8qKiBMb2FkIHNoYXJlZCBjYWNoZSBlbnRyaWVzIHdpdGhvdXQgZm9yY2luZyBhIG5ldHdvcmsgcmVmcmVzaC4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBoeWRyYXRlTW9kZWxNZXRhZGF0YSgpOiBQcm9taXNlPE1ldGFkYXRhSW5kZXg+IHtcbiAgY29uc3QgW1xuICAgIHJldGlyZWROYW1lcyxcbiAgICBjYXBhYmlsaXRpZXMsXG4gICAgbW9kZWxzRGV2LFxuICAgIG1vZGVsUGFyYW1zLFxuICAgIHJhdGVMaW1pdHMsXG4gICAgcmVhc29uaW5nLFxuICAgIGxlYXJuZWRSZWFzb25pbmcsXG4gIF0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgcGVla09yRmFsbGJhY2socmV0aXJlZENhY2hlLCBDT01NSVRURURfUkVUSVJFRF9NT0RFTFMpLFxuICAgIHBlZWtPckZhbGxiYWNrKGNhcGFiaWxpdGllc0NhY2hlLCBjYXBhYmlsaXRpZXNTbmFwc2hvdC5jYXBhYmlsaXRpZXMpLFxuICAgIHBlZWtPckZhbGxiYWNrKG1vZGVsc0RldkNhY2hlLCBtb2RlbHNEZXZTbmFwc2hvdC5jYXBhYmlsaXRpZXMpLFxuICAgIHBlZWtPckZhbGxiYWNrKG1vZGVsUGFyYW1zQ2FjaGUsIG1vZGVsUGFyYW1zU25hcHNob3QuY2F0YWxvZ3VlKSxcbiAgICBwZWVrT3JGYWxsYmFjayhyYXRlTGltaXRzQ2FjaGUsIHJhdGVMaW1pdHNTbmFwc2hvdC5jYXRhbG9ndWUubW9kZWxzKSxcbiAgICBwZWVrT3JGYWxsYmFjayhyZWFzb25pbmdEb2NzQ2FjaGUsIHJlYXNvbmluZ1NuYXBzaG90LmNhdGFsb2d1ZS5tb2RlbHMpLFxuICAgIHBlZWtPckZhbGxiYWNrKGxlYXJuZWRSZWFzb25pbmdDYWNoZSwge30pLFxuICBdKTtcbiAgbGl2ZUluZGV4ID0gYnVpbGRJbmRleCh7XG4gICAgcmV0aXJlZE5hbWVzLFxuICAgIGNhcGFiaWxpdGllcyxcbiAgICBtb2RlbHNEZXYsXG4gICAgbW9kZWxQYXJhbXMsXG4gICAgcmF0ZUxpbWl0cyxcbiAgICByZWFzb25pbmcsXG4gICAgbGVhcm5lZFJlYXNvbmluZyxcbiAgfSk7XG4gIHJldHVybiBsaXZlSW5kZXg7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHBlZWtPckZhbGxiYWNrPFQ+KGNhY2hlOiBNZXRhZGF0YUNhY2hlPFQ+LCBmYWxsYmFjazogVCk6IFByb21pc2U8VD4ge1xuICBjb25zdCBwZWVrZWQgPSBhd2FpdCBjYWNoZS5wZWVrKCk7XG4gIGlmIChwZWVrZWQgIT09IHVuZGVmaW5lZCkgcmV0dXJuIHBlZWtlZDtcbiAgcmV0dXJuIGNhY2hlLmdldCgpLmNhdGNoKCgpID0+IGZhbGxiYWNrKTtcbn1cblxuLyoqIFJldHVybiB0aGUgY29tbWl0dGVkIHJlYXNvbmluZy1lZmZvcnQgY2F0YWxvZ3VlLiBDYWNoZWQgcGVyIHByb2Nlc3MuICovXG5leHBvcnQgZnVuY3Rpb24gcmVhc29uaW5nTW9kZWxDYXRhbG9ndWUoKTogUmVhc29uaW5nTW9kZWxDYXRhbG9ndWUge1xuICByZXR1cm4gbWV0YWRhdGFJbmRleCgpLnJlYXNvbmluZztcbn1cblxuLyoqIFJldHVybiBlcnJvci1sZWFybmVkIHJlYXNvbmluZyBsYWRkZXJzIGZyb20gdGhlIHNoYXJlZCBtb2RlbCBjYWNoZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsZWFybmVkUmVhc29uaW5nQ2F0YWxvZ3VlKCk6IFJlYXNvbmluZ01vZGVsQ2F0YWxvZ3VlIHtcbiAgcmV0dXJuIG1ldGFkYXRhSW5kZXgoKS5sZWFybmVkUmVhc29uaW5nO1xufVxuXG4vKipcbiAqIFN0b3JlIGxldmVscyBsZWFybmVkIGZyb20gYW4gdXBzdHJlYW0gZXJyb3IgYW5kIHBlcnNpc3QgdGhlbSB3cml0ZS10aHJvdWdoLlxuICpcbiAqIEVtcHR5IGxpc3RzIGFyZSBpZ25vcmVkIHNvIGEgZmFpbGVkIHBhcnNlIGNhbm5vdCB3aXBlIGRlZmF1bHRzLiBFcnJvciBib2RpZXNcbiAqIHRoZW1zZWx2ZXMgYXJlIG5ldmVyIHN0b3JlZCAtIG9ubHkgdGhlIHBhcnNlZCBsYWRkZXIuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZW1lbWJlclJlYXNvbmluZ0xldmVscyhcbiAgbW9kZWw6IHN0cmluZyxcbiAgbGV2ZWxzOiByZWFkb25seSBSZWFzb25pbmdMZXZlbFtdLFxuKTogUHJvbWlzZTxSZWFzb25pbmdMZXZlbFtdPiB7XG4gIGNvbnN0IHVuaXF1ZSA9IHVuaXF1ZVJlYXNvbmluZ0xldmVscyhsZXZlbHMpO1xuICBpZiAodW5pcXVlLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG1vZGVsUmVhc29uaW5nTGV2ZWxzRm9yKG1vZGVsKTtcbiAgY29uc3Qga2V5ID0gbW9kZWxLZXkobW9kZWwpO1xuICBpZiAoIWtleSkgcmV0dXJuIG1vZGVsUmVhc29uaW5nTGV2ZWxzRm9yKG1vZGVsKTtcbiAgY29uc3QgY2F0YWxvZ3VlID0gYXdhaXQgbGVhcm5lZFJlYXNvbmluZ0NhY2hlLnVwZGF0ZSgoY3VycmVudCkgPT4gKHtcbiAgICAuLi5jdXJyZW50LFxuICAgIFtrZXldOiB1bmlxdWUsXG4gIH0pKTtcbiAgY29uc3QgY3VycmVudCA9IG1ldGFkYXRhSW5kZXgoKTtcbiAgbGl2ZUluZGV4ID0ge1xuICAgIC4uLmN1cnJlbnQsXG4gICAgbGVhcm5lZFJlYXNvbmluZzogZnJlZXplTGVhcm5lZENhdGFsb2d1ZShjYXRhbG9ndWUpLFxuICB9O1xuICByZXR1cm4gWy4uLnVuaXF1ZV07XG59XG5cbi8qKlxuICogUGFyc2UgYW4gdXBzdHJlYW0gZXJyb3IgYm9keSBhbmQgcGVyc2lzdCB0aGUgc3VwcG9ydGVkIGxhZGRlciBmb3IgYG1vZGVsYC5cbiAqXG4gKiBBY2NlcHRzIHRoZSBzYW1lIG5lc3RlZCBEYXRhYnJpY2tzIGVudmVsb3BlcyBhcyB7QGxpbmsgcGFyc2VSZWFzb25pbmdMZXZlbHN9LlxuICogUmV0dXJucyBhIHB1Ymxpc2hlZCBsYWRkZXIgd2l0aG91dCBwYXJzaW5nIG9yIHN0b3JpbmcgZXJyb3ItZGVyaXZlZCBsZXZlbHNcbiAqIHdoZW4gb25lIGV4aXN0cy4gT3RoZXJ3aXNlIHJldHVybnMgdGhlIGxldmVscyB0aGF0IHdlcmUgc3RvcmVkLCBvciB0aGVcbiAqIGN1cnJlbnQgZmFsbGJhY2sgd2hlbiBwYXJzaW5nIHlpZWxkcyBub3RoaW5nLiBUaGUgcmF3IGVycm9yIGJvZHkgaXMgbmV2ZXJcbiAqIGNhY2hlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxlYXJuUmVhc29uaW5nTGV2ZWxzRnJvbUVycm9yKFxuICBtb2RlbDogc3RyaW5nLFxuICBib2R5OiB1bmtub3duLFxuKTogUHJvbWlzZTxSZWFzb25pbmdMZXZlbFtdPiB7XG4gIGNvbnN0IHB1Ymxpc2hlZCA9IHB1Ymxpc2hlZFJlYXNvbmluZ0xldmVsc0Zvcihtb2RlbCwgbWV0YWRhdGFJbmRleCgpKTtcbiAgaWYgKHB1Ymxpc2hlZCkgcmV0dXJuIHB1Ymxpc2hlZDtcbiAgcmV0dXJuIHJlbWVtYmVyUmVhc29uaW5nTGV2ZWxzKG1vZGVsLCBwYXJzZVJlYXNvbmluZ0xldmVscyhib2R5KSk7XG59XG5cbi8qKiBSZXNvbHZlIHB1Ymxpc2hlZCBtb2RlbCBjYXBhYmlsaXRpZXMgZnJvbSBhIG5hbWUgb3IgZW5kcG9pbnQgc3VtbWFyeS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtb2RlbENhcGFiaWxpdGllc0Zvcihtb2RlbDogc3RyaW5nIHwgU2VydmluZ0VuZHBvaW50U3VtbWFyeSk6IE1vZGVsQ2FwYWJpbGl0aWVzIHtcbiAgY29uc3QgY2FwYWJpbGl0aWVzID0gbWV0YWRhdGFJbmRleCgpLmNhcGFiaWxpdGllcztcbiAgY29uc3QgaWRlbnRpdGllcyA9IG1vZGVsSWRlbnRpdGllcyhtb2RlbCwgZmFsc2UpO1xuICBjb25zdCBrZXlzID0gaWRlbnRpdGllcy5mbGF0TWFwKChpZGVudGl0eSkgPT4gbW9kZWxLZXkoaWRlbnRpdHkpID8/IFtdKTtcbiAgcmV0dXJuIHtcbiAgICByZXNwb25zZXM6IGtleXMuc29tZSgoa2V5KSA9PiBjYXBhYmlsaXRpZXMucmVzcG9uc2VzLmhhcyhrZXkpKSxcbiAgICBpbWFnZUlucHV0OiBrZXlzLnNvbWUoKGtleSkgPT4gY2FwYWJpbGl0aWVzLmltYWdlSW5wdXQuaGFzKGtleSkpLFxuICAgIGFwcGx5UGF0Y2g6IGtleXMuc29tZSgoa2V5KSA9PiBjYXBhYmlsaXRpZXMuYXBwbHlQYXRjaC5oYXMoa2V5KSksXG4gICAgLy8gVmVyc2lvbiBpbmhlcml0YW5jZSBvbmx5IGFwcGxpZXMgdG8gaG9zdGVkIGZvdW5kYXRpb24gaWRlbnRpdGllcy5cbiAgICB3ZWJTZWFyY2g6XG4gICAgICBrZXlzLnNvbWUoKGtleSkgPT4gY2FwYWJpbGl0aWVzLndlYlNlYXJjaC5oYXMoa2V5KSkgfHxcbiAgICAgIGlkZW50aXRpZXMuc29tZShcbiAgICAgICAgKGlkZW50aXR5KSA9PlxuICAgICAgICAgIGlzRm91bmRhdGlvbk1vZGVsSWRlbnRpdHkoaWRlbnRpdHkpICYmXG4gICAgICAgICAgaW5oZXJpdHNOYXRpdmVXZWJTZWFyY2goaWRlbnRpdHksIGNhcGFiaWxpdGllcy53ZWJTZWFyY2gpLFxuICAgICAgKSxcbiAgICByZWFzb25pbmc6XG4gICAgICBrZXlzLnNvbWUoKGtleSkgPT4gY2FwYWJpbGl0aWVzLnJlYXNvbmluZy5oYXMoa2V5KSkgfHxcbiAgICAgIGlkZW50aXRpZXMuc29tZSgoaWRlbnRpdHkpID0+IG1vZGVsUmVhc29uaW5nRWZmb3J0cyhpZGVudGl0eSkubGVuZ3RoID4gMCksXG4gICAgdG9vbHM6XG4gICAgICBrZXlzLnNvbWUoKGtleSkgPT4gY2FwYWJpbGl0aWVzLnRvb2xzLmhhcyhrZXkpKSB8fCBpZGVudGl0aWVzLnNvbWUobW9kZWxTdXBwb3J0c1Rvb2xzKSxcbiAgICBzdHJ1Y3R1cmVkT3V0cHV0OiBrZXlzLnNvbWUoKGtleSkgPT4gY2FwYWJpbGl0aWVzLnN0cnVjdHVyZWRPdXRwdXQuaGFzKGtleSkpLFxuICAgIHRlbXBlcmF0dXJlOiBtb2RlbFRlbXBlcmF0dXJlU3VwcG9ydEZvcihtb2RlbCkgPT09IHRydWUsXG4gIH07XG59XG5cbi8qKiBSZXNvbHZlIGV4cGxpY2l0IERhdGFicmlja3MgdGVtcGVyYXR1cmUgc3VwcG9ydCwgb3IgdW5kZWZpbmVkIHdoZW4gdW5wdWJsaXNoZWQuICovXG5leHBvcnQgZnVuY3Rpb24gbW9kZWxUZW1wZXJhdHVyZVN1cHBvcnRGb3IoXG4gIG1vZGVsOiBzdHJpbmcgfCBTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5LFxuKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGluZGV4ID0gbWV0YWRhdGFJbmRleCgpO1xuICBjb25zdCBrZXlzID0gbW9kZWxJZGVudGl0aWVzKG1vZGVsKS5mbGF0TWFwKChpZGVudGl0eSkgPT4gbW9kZWxLZXkoaWRlbnRpdHkpID8/IFtdKTtcbiAgaWYgKGtleXMuc29tZSgoa2V5KSA9PiBpbmRleC50ZW1wZXJhdHVyZVVuc3VwcG9ydGVkLmhhcyhrZXkpKSkgcmV0dXJuIGZhbHNlO1xuICBpZiAoa2V5cy5zb21lKChrZXkpID0+IGluZGV4LmNhcGFiaWxpdGllcy50ZW1wZXJhdHVyZS5oYXMoa2V5KSkpIHJldHVybiB0cnVlO1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKiogUmVzb2x2ZSBwdWJsaXNoZWQgSVRQTSwgT1RQTSwgYW5kIFFQSCBsaW1pdHMgZnJvbSBhIG1vZGVsIGlkZW50aXR5LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vZGVsUmF0ZUxpbWl0c0ZvcihcbiAgbW9kZWw6IHN0cmluZyB8IFNlcnZpbmdFbmRwb2ludFN1bW1hcnksXG4pOiBNb2RlbFJhdGVMaW1pdHMgfCB1bmRlZmluZWQge1xuICBjb25zdCBsaW1pdHMgPSBtZXRhZGF0YUluZGV4KCkucmF0ZUxpbWl0cztcbiAgZm9yIChjb25zdCBpZGVudGl0eSBvZiBtb2RlbElkZW50aXRpZXMobW9kZWwpKSB7XG4gICAgY29uc3Qga2V5ID0gbW9kZWxLZXkoaWRlbnRpdHkpO1xuICAgIGlmICgha2V5KSBjb250aW51ZTtcbiAgICBjb25zdCBmb3VuZCA9IGxpbWl0cy5nZXQoa2V5KTtcbiAgICBpZiAoZm91bmQpIHJldHVybiBmb3VuZDtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFJlc29sdmUgcmVhc29uaW5nIGxldmVsczogRGF0YWJyaWNrcyBkb2N1bWVudGF0aW9uLCBtb2RlbHBhcmFtcy5kZXYsXG4gKiBsZWFybmVkIGVycm9ycywgdGhlbiBmYW1pbHkgZGVmYXVsdHMuXG4gKlxuICogRG9lcyBub3QgcGFyc2UgZXJyb3IgYm9kaWVzOyBjYWxsZXJzIGhhbmRsaW5nIGFuIHVwc3RyZWFtIGVycm9yIHNob3VsZCB1c2VcbiAqIHtAbGluayBsZWFyblJlYXNvbmluZ0xldmVsc0Zyb21FcnJvcn0gc28gcHVibGlzaGVkIGxldmVscyBrZWVwIHByZWNlZGVuY2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtb2RlbFJlYXNvbmluZ0xldmVsc0Zvcihtb2RlbDogc3RyaW5nIHwgU2VydmluZ0VuZHBvaW50U3VtbWFyeSk6IFJlYXNvbmluZ0xldmVsW10ge1xuICBjb25zdCBpbmRleCA9IG1ldGFkYXRhSW5kZXgoKTtcbiAgY29uc3QgcHVibGlzaGVkID0gcHVibGlzaGVkUmVhc29uaW5nTGV2ZWxzRm9yKG1vZGVsLCBpbmRleCk7XG4gIGlmIChwdWJsaXNoZWQpIHJldHVybiBwdWJsaXNoZWQ7XG4gIGZvciAoY29uc3QgaWRlbnRpdHkgb2YgbW9kZWxJZGVudGl0aWVzKG1vZGVsKSkge1xuICAgIGNvbnN0IGxlYXJuZWQgPSBkb2N1bWVudGVkUmVhc29uaW5nTGV2ZWxzKGlkZW50aXR5LCBpbmRleC5sZWFybmVkUmVhc29uaW5nKTtcbiAgICBpZiAobGVhcm5lZD8ubGVuZ3RoKSByZXR1cm4gbGVhcm5lZDtcbiAgfVxuICBjb25zdCBwcmltYXJ5ID0gdHlwZW9mIG1vZGVsID09PSBcInN0cmluZ1wiID8gbW9kZWwgOiAobW9kZWwubW9kZWxTZXJ2aWNlTmFtZSA/PyBtb2RlbC5uYW1lKTtcbiAgcmV0dXJuIGRlZmF1bHRSZWFzb25pbmdMZXZlbHMocHJpbWFyeSk7XG59XG5cbmZ1bmN0aW9uIHB1Ymxpc2hlZFJlYXNvbmluZ0xldmVsc0ZvcihcbiAgbW9kZWw6IHN0cmluZyB8IFNlcnZpbmdFbmRwb2ludFN1bW1hcnksXG4gIGluZGV4OiBNZXRhZGF0YUluZGV4LFxuKTogUmVhc29uaW5nTGV2ZWxbXSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGlkZW50aXRpZXMgPSBtb2RlbElkZW50aXRpZXMobW9kZWwpO1xuICBmb3IgKGNvbnN0IGlkZW50aXR5IG9mIGlkZW50aXRpZXMpIHtcbiAgICBjb25zdCBkb2N1bWVudGVkID0gZG9jdW1lbnRlZFJlYXNvbmluZ0xldmVscyhpZGVudGl0eSwgaW5kZXgucmVhc29uaW5nRG9jcyk7XG4gICAgaWYgKGRvY3VtZW50ZWQ/Lmxlbmd0aCkgcmV0dXJuIGRvY3VtZW50ZWQ7XG4gIH1cbiAgZm9yIChjb25zdCBpZGVudGl0eSBvZiBpZGVudGl0aWVzKSB7XG4gICAgY29uc3QgbW9kZWxQYXJhbXMgPSBkb2N1bWVudGVkUmVhc29uaW5nTGV2ZWxzKGlkZW50aXR5LCBpbmRleC5tb2RlbFBhcmFtc1JlYXNvbmluZyk7XG4gICAgaWYgKG1vZGVsUGFyYW1zPy5sZW5ndGgpIHJldHVybiBtb2RlbFBhcmFtcztcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKiogUmVzb2x2ZSByZXRpcmVtZW50LCBjYXBhYmlsaXR5LCBhbmQgcmF0ZS1saW1pdCBtZXRhZGF0YSB0b2dldGhlci4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtb2RlbE1ldGFkYXRhRm9yKG1vZGVsOiBzdHJpbmcgfCBTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5KTogTW9kZWxNZXRhZGF0YSB7XG4gIGNvbnN0IHJhdGVMaW1pdHMgPSBtb2RlbFJhdGVMaW1pdHNGb3IobW9kZWwpO1xuICByZXR1cm4ge1xuICAgIHN0YXR1czogbW9kZWxTdGF0dXNGb3IobW9kZWwpLFxuICAgIGNhcGFiaWxpdGllczogbW9kZWxDYXBhYmlsaXRpZXNGb3IobW9kZWwpLFxuICAgIC4uLihyYXRlTGltaXRzID8geyByYXRlTGltaXRzIH0gOiB7fSksXG4gIH07XG59XG5cbi8qKiBSZXR1cm4gZ2VuZXJhdGlvbiB0aW1lc3RhbXBzIGZvciB0aGUgY29tbWl0dGVkIG1ldGFkYXRhIHNuYXBzaG90cy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtb2RlbE1ldGFkYXRhR2VuZXJhdGVkQXQoKTogUmVhZG9ubHk8e1xuICByZXRpcmVkTW9kZWxzOiBudW1iZXI7XG4gIGNhcGFiaWxpdGllczogbnVtYmVyO1xuICBtb2RlbHNEZXY6IG51bWJlcjtcbiAgbW9kZWxQYXJhbXM6IG51bWJlcjtcbiAgcmF0ZUxpbWl0czogbnVtYmVyO1xuICByZWFzb25pbmc6IG51bWJlcjtcbn0+IHtcbiAgcmV0dXJuIHtcbiAgICByZXRpcmVkTW9kZWxzOiBSRVRJUkVEX01PREVMU19HRU5FUkFURURfQVQsXG4gICAgY2FwYWJpbGl0aWVzOiBjYXBhYmlsaXRpZXNTbmFwc2hvdC5nZW5lcmF0ZWRBdCxcbiAgICBtb2RlbHNEZXY6IG1vZGVsc0RldlNuYXBzaG90LmdlbmVyYXRlZEF0LFxuICAgIG1vZGVsUGFyYW1zOiBtb2RlbFBhcmFtc1NuYXBzaG90LmdlbmVyYXRlZEF0LFxuICAgIHJhdGVMaW1pdHM6IHJhdGVMaW1pdHNTbmFwc2hvdC5nZW5lcmF0ZWRBdCxcbiAgICByZWFzb25pbmc6IHJlYXNvbmluZ1NuYXBzaG90LmdlbmVyYXRlZEF0LFxuICB9O1xufVxuXG5mdW5jdGlvbiBtb2RlbElkZW50aXRpZXMoXG4gIG1vZGVsOiBzdHJpbmcgfCBTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5LFxuICBpbmNsdWRlRGlzcGxheU5hbWUgPSB0cnVlLFxuKTogc3RyaW5nW10ge1xuICBpZiAodHlwZW9mIG1vZGVsID09PSBcInN0cmluZ1wiKSByZXR1cm4gW21vZGVsXTtcbiAgcmV0dXJuIFtcbiAgICBtb2RlbC5uYW1lLFxuICAgIC4uLihpbmNsdWRlRGlzcGxheU5hbWUgPyBbbW9kZWwuZGlzcGxheU5hbWVdIDogW10pLFxuICAgIG1vZGVsLm1vZGVsU2VydmljZU5hbWUsXG4gICAgLi4uT2JqZWN0LnZhbHVlcyhtb2RlbC5zZXJ2aWNlTmFtZXMgPz8ge30pLFxuICBdLmZpbHRlcigodmFsdWUpOiB2YWx1ZSBpcyBzdHJpbmcgPT4gQm9vbGVhbih2YWx1ZSkpO1xufVxuXG5mdW5jdGlvbiBtb2RlbEtleSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIG1vZGVsU2VhcmNoUXVlcnkodmFsdWUpPy5yZXBsYWNlQWxsKFwiIFwiLCBcIi1cIik7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGxvYWRQYWdlKHVybDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIHtcbiAgICBoZWFkZXJzOiB7IFwidXNlci1hZ2VudFwiOiBVU0VSX0FHRU5UIH0sXG4gICAgc2lnbmFsOiBBYm9ydFNpZ25hbC50aW1lb3V0KDE1XzAwMCksXG4gIH0pO1xuICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBEYXRhYnJpY2tzIGRvY3VtZW50YXRpb24gcmV0dXJuZWQgSFRUUCAke3Jlc3BvbnNlLnN0YXR1c306ICR7dXJsfWApO1xuICB9XG4gIHJldHVybiByZXNwb25zZS50ZXh0KCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGxvYWRKc29uKHVybDogc3RyaW5nKTogUHJvbWlzZTx1bmtub3duPiB7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCB7XG4gICAgaGVhZGVyczogeyBcInVzZXItYWdlbnRcIjogVVNFUl9BR0VOVCB9LFxuICAgIHNpZ25hbDogQWJvcnRTaWduYWwudGltZW91dCgxNV8wMDApLFxuICB9KTtcbiAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgIHRocm93IG5ldyBFcnJvcihgTW9kZWwgbWV0YWRhdGEgc291cmNlIHJldHVybmVkIEhUVFAgJHtyZXNwb25zZS5zdGF0dXN9OiAke3VybH1gKTtcbiAgfVxuICByZXR1cm4gcmVzcG9uc2UuanNvbigpO1xufVxuXG5mdW5jdGlvbiBtZXJnZU1vZGVsc0RldkRhdGEoaW5wdXQ6IHtcbiAgcmVhZG9ubHkgZnJlc2g6IE1vZGVsc0RldkRhdGEgfCB1bmRlZmluZWQ7XG4gIHJlYWRvbmx5IHByZXZpb3VzOiBNb2RlbHNEZXZEYXRhIHwgdW5kZWZpbmVkO1xuICByZWFkb25seSBmYWxsYmFjazogTW9kZWxzRGV2RGF0YTtcbn0pOiBNb2RlbHNEZXZEYXRhIHtcbiAgY29uc3QgY2FwYWJpbGl0eSA9IChrZXk6IGtleW9mIE1vZGVsc0RldkNhcGFiaWxpdHlDYXRhbG9ndWUpID0+XG4gICAgbWVyZ2VQcmVmZXJGcmVzaExpc3Qoe1xuICAgICAgZnJlc2g6IGlucHV0LmZyZXNoPy5ba2V5XSxcbiAgICAgIHByZXZpb3VzOiBpbnB1dC5wcmV2aW91cz8uW2tleV0sXG4gICAgICBmYWxsYmFjazogaW5wdXQuZmFsbGJhY2tba2V5XSxcbiAgICB9KTtcbiAgcmV0dXJuIHtcbiAgICBpbWFnZUlucHV0OiBjYXBhYmlsaXR5KFwiaW1hZ2VJbnB1dFwiKSxcbiAgICByZWFzb25pbmc6IGNhcGFiaWxpdHkoXCJyZWFzb25pbmdcIiksXG4gICAgdG9vbHM6IGNhcGFiaWxpdHkoXCJ0b29sc1wiKSxcbiAgICBzdHJ1Y3R1cmVkT3V0cHV0OiBjYXBhYmlsaXR5KFwic3RydWN0dXJlZE91dHB1dFwiKSxcbiAgICB0ZW1wZXJhdHVyZVN1cHBvcnRlZDogY2FwYWJpbGl0eShcInRlbXBlcmF0dXJlU3VwcG9ydGVkXCIpLFxuICAgIHRlbXBlcmF0dXJlVW5zdXBwb3J0ZWQ6IGNhcGFiaWxpdHkoXCJ0ZW1wZXJhdHVyZVVuc3VwcG9ydGVkXCIpLFxuICB9O1xufVxuXG5mdW5jdGlvbiBub3dTZWNvbmRzKCk6IG51bWJlciB7XG4gIHJldHVybiBNYXRoLmZsb29yKERhdGUubm93KCkgLyAxMDAwKTtcbn1cbiJdfQ==
425
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0YWRhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbWV0YWRhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBUWpELE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsc0JBQXNCLEVBQ3RCLG9CQUFvQixFQUNwQixjQUFjLEVBQ2Qsb0JBQW9CLEVBQ3BCLGtCQUFrQixHQUNuQixNQUFNLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sd0JBQXdCLE1BQU0scUNBQXFDLENBQUMsT0FBTyxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFDakcsT0FBTyxzQkFBc0IsTUFBTSxvQ0FBb0MsQ0FBQyxPQUFPLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQztBQUM5RixPQUFPLHFCQUFxQixNQUFNLGtDQUFrQyxDQUFDLE9BQU8sSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO0FBQzNGLE9BQU8sdUJBQXVCLE1BQU0sd0NBQXdDLENBQUMsT0FBTyxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFDbkcsT0FBTyxxQkFBcUIsTUFBTSwwQ0FBMEMsQ0FBQyxPQUFPLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQztBQUNuRyxPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLG9CQUFvQixFQUNwQixzQkFBc0IsR0FFdkIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQ0wsMEJBQTBCLEVBQzFCLGtCQUFrQixFQUNsQixxQkFBcUIsRUFDckIsMkJBQTJCLEVBQzNCLHVCQUF1QixFQUN2QixrQkFBa0IsRUFDbEIscUJBQXFCLEdBU3RCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUNMLHVCQUF1QixFQUN2Qix5QkFBeUIsRUFDekIscUJBQXFCLEVBQ3JCLGdCQUFnQixFQUNoQixrQkFBa0IsR0FDbkIsTUFBTSxhQUFhLENBQUM7QUFD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QUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBCdWlsZC1nZW5lcmF0ZWQgRGF0YWJyaWNrcyBhbmQgcHVibGljIG1vZGVsIGNhcGFiaWxpdHkgbWV0YWRhdGEsIHBsdXMgYVxuICogZGFpbHkgd3JpdGUtdGhyb3VnaCBjYWNoZSBmb3IgcmVmcmVzaGVkIHNvdXJjZXMgYW5kIGVycm9yLWxlYXJuZWQgcmVhc29uaW5nXG4gKiBsYWRkZXJzLlxuICpcbiAqIENvbW1pdHRlZCBzbmFwc2hvdHMgc2VlZCBldmVyeSBwcm9jZXNzLiB7QGxpbmsgcmVmcmVzaE1vZGVsTWV0YWRhdGF9IHB1bGxzXG4gKiBEYXRhYnJpY2tzIGRvY3VtZW50YXRpb24sIG1vZGVscy5kZXYsIGFuZCBtb2RlbHBhcmFtcy5kZXYgdGhyb3VnaCB0aGUgc2hhcmVkXG4gKiBtZW1vcnktZmlyc3Qge0BsaW5rIGNyZWF0ZU1ldGFkYXRhQ2FjaGV9IGFuZCByZWJ1aWxkcyB0aGUgaW4tbWVtb3J5IGluZGV4LlxuICogRXJyb3ItbGVhcm5lZCBlZmZvcnRzIHVzZSB0aGUgc2FtZSBzdG9yZSB2aWEge0BsaW5rIHJlbWVtYmVyUmVhc29uaW5nTGV2ZWxzfS5cbiAqIEtub3duLWdvb2QgdmFsdWVzIGFyZSB3cml0dGVuIGJlaGluZCB0byB0aGUgc2hhcmVkIG1vZGVsIHByb2plY3QgY2FjaGUuXG4gKlxuICogQG1vZHVsZVxuICovXG5pbXBvcnQgeyBtZW1vaXplIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB0eXBlIHtcbiAgTW9kZWxDYXBhYmlsaXRpZXMsXG4gIE1vZGVsTWV0YWRhdGEsXG4gIE1vZGVsUmF0ZUxpbWl0cyxcbiAgU2VydmluZ0VuZHBvaW50U3VtbWFyeSxcbn0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLW1vZGVsXCI7XG5cbmltcG9ydCB7XG4gIHBhcnNlTW9kZWxQYXJhbXMsXG4gIHBhcnNlTW9kZWxDYXBhYmlsaXRpZXMsXG4gIHBhcnNlTW9kZWxSYXRlTGltaXRzLFxuICBwYXJzZU1vZGVsc0RldixcbiAgcGFyc2VSZWFzb25pbmdNb2RlbHMsXG4gIHBhcnNlUmV0aXJlZE1vZGVscyxcbn0gZnJvbSBcIi4vX21ldGFkYXRhLWdlbmVyYXRvci50c1wiO1xuaW1wb3J0IGNhcGFiaWxpdGllc1NuYXBzaG90SnNvbiBmcm9tIFwiLi9nZW5lcmF0ZWQvbW9kZWwtY2FwYWJpbGl0aWVzLmpzb25cIiB3aXRoIHsgdHlwZTogXCJqc29uXCIgfTtcbmltcG9ydCByYXRlTGltaXRzU25hcHNob3RKc29uIGZyb20gXCIuL2dlbmVyYXRlZC9tb2RlbC1yYXRlLWxpbWl0cy5qc29uXCIgd2l0aCB7IHR5cGU6IFwianNvblwiIH07XG5pbXBvcnQgcmVhc29uaW5nU25hcHNob3RKc29uIGZyb20gXCIuL2dlbmVyYXRlZC9tb2RlbC1yZWFzb25pbmcuanNvblwiIHdpdGggeyB0eXBlOiBcImpzb25cIiB9O1xuaW1wb3J0IG1vZGVsUGFyYW1zU25hcHNob3RKc29uIGZyb20gXCIuL2dlbmVyYXRlZC9tb2RlbHBhcmFtcy1yZWFzb25pbmcuanNvblwiIHdpdGggeyB0eXBlOiBcImpzb25cIiB9O1xuaW1wb3J0IG1vZGVsc0RldlNuYXBzaG90SnNvbiBmcm9tIFwiLi9nZW5lcmF0ZWQvbW9kZWxzLWRldi1jYXBhYmlsaXRpZXMuanNvblwiIHdpdGggeyB0eXBlOiBcImpzb25cIiB9O1xuaW1wb3J0IHtcbiAgY3JlYXRlTWV0YWRhdGFDYWNoZSxcbiAgbWVyZ2VQcmVmZXJGcmVzaExpc3QsXG4gIG1lcmdlUHJlZmVyRnJlc2hSZWNvcmQsXG4gIHR5cGUgTWV0YWRhdGFDYWNoZSxcbn0gZnJvbSBcIi4vbWV0YWRhdGEtY2FjaGUudHNcIjtcbmltcG9ydCB7XG4gIE1PREVMUEFSQU1TX0RFVl9NT0RFTFNfVVJMLFxuICBNT0RFTFNfREVWX0FQSV9VUkwsXG4gIE1PREVMX1JBVEVfTElNSVRTX1VSTCxcbiAgT1BFTkFJX1JFU1BPTlNFU19NT0RFTFNfVVJMLFxuICBRVUVSWV9SRUFTT05fTU9ERUxTX1VSTCxcbiAgUkVUSVJFRF9NT0RFTFNfVVJMLFxuICBXRUJfU0VBUkNIX01PREVMU19VUkwsXG4gIHR5cGUgTW9kZWxQYXJhbXNDYXRhbG9ndWUsXG4gIHR5cGUgTW9kZWxQYXJhbXNTbmFwc2hvdCxcbiAgdHlwZSBNb2RlbENhcGFiaWxpdGllc1NuYXBzaG90LFxuICB0eXBlIE1vZGVsQ2FwYWJpbGl0eUNhdGFsb2d1ZSxcbiAgdHlwZSBNb2RlbFJhdGVMaW1pdHNTbmFwc2hvdCxcbiAgdHlwZSBNb2RlbHNEZXZDYXBhYmlsaXR5Q2F0YWxvZ3VlLFxuICB0eXBlIE1vZGVsc0RldlNuYXBzaG90LFxuICB0eXBlIFJlYXNvbmluZ01vZGVsc1NuYXBzaG90LFxufSBmcm9tIFwiLi9tZXRhZGF0YS1jb250cmFjdC50c1wiO1xuaW1wb3J0IHtcbiAgaW5oZXJpdHNOYXRpdmVXZWJTZWFyY2gsXG4gIGlzRm91bmRhdGlvbk1vZGVsSWRlbnRpdHksXG4gIG1vZGVsUmVhc29uaW5nRWZmb3J0cyxcbiAgbW9kZWxTZWFyY2hRdWVyeSxcbiAgbW9kZWxTdXBwb3J0c1Rvb2xzLFxufSBmcm9tIFwiLi9wb2xpY3kudHNcIjtcbmltcG9ydCB7XG4gIGRlZmF1bHRSZWFzb25pbmdMZXZlbHMsXG4gIGRvY3VtZW50ZWRSZWFzb25pbmdMZXZlbHMsXG4gIHBhcnNlUmVhc29uaW5nLFxuICBwYXJzZVJlYXNvbmluZ0xldmVscyxcbiAgdHlwZSBSZWFzb25pbmdMZXZlbCxcbiAgdHlwZSBSZWFzb25pbmdNb2RlbENhdGFsb2d1ZSxcbiAgdW5pcXVlUmVhc29uaW5nTGV2ZWxzLFxufSBmcm9tIFwiLi9yZWFzb25pbmctdHJhbnNsYXRpb24udHNcIjtcbmltcG9ydCB7XG4gIENPTU1JVFRFRF9SRVRJUkVEX01PREVMUyxcbiAgbW9kZWxTdGF0dXNGb3IsXG4gIHJlcGxhY2VSZXRpcmVkTW9kZWxOYW1lcyxcbiAgUkVUSVJFRF9NT0RFTFNfR0VORVJBVEVEX0FULFxufSBmcm9tIFwiLi9yZXRpcmVtZW50LnRzXCI7XG5cbmNvbnN0IGNhcGFiaWxpdGllc1NuYXBzaG90ID0gY2FwYWJpbGl0aWVzU25hcHNob3RKc29uIGFzIE1vZGVsQ2FwYWJpbGl0aWVzU25hcHNob3Q7XG5jb25zdCBtb2RlbFBhcmFtc1NuYXBzaG90ID0gbW9kZWxQYXJhbXNTbmFwc2hvdEpzb24gYXMgTW9kZWxQYXJhbXNTbmFwc2hvdDtcbmNvbnN0IG1vZGVsc0RldlNuYXBzaG90ID0gbW9kZWxzRGV2U25hcHNob3RKc29uIGFzIE1vZGVsc0RldlNuYXBzaG90O1xuY29uc3QgcmF0ZUxpbWl0c1NuYXBzaG90ID0gcmF0ZUxpbWl0c1NuYXBzaG90SnNvbiBhcyBNb2RlbFJhdGVMaW1pdHNTbmFwc2hvdDtcbmNvbnN0IHJlYXNvbmluZ1NuYXBzaG90ID0gcmVhc29uaW5nU25hcHNob3RKc29uIGFzIFJlYXNvbmluZ01vZGVsc1NuYXBzaG90O1xuXG5pbnRlcmZhY2UgTWV0YWRhdGFJbmRleCB7XG4gIHJlYWRvbmx5IGNhcGFiaWxpdGllczoge1xuICAgIHJlYWRvbmx5IFtLZXkgaW4ga2V5b2YgTW9kZWxDYXBhYmlsaXRpZXNdOiBSZWFkb25seVNldDxzdHJpbmc+O1xuICB9O1xuICByZWFkb25seSByYXRlTGltaXRzOiBSZWFkb25seU1hcDxzdHJpbmcsIE1vZGVsUmF0ZUxpbWl0cz47XG4gIHJlYWRvbmx5IHJlYXNvbmluZzogUmVhc29uaW5nTW9kZWxDYXRhbG9ndWU7XG4gIHJlYWRvbmx5IHJlYXNvbmluZ0RvY3M6IFJlYXNvbmluZ01vZGVsQ2F0YWxvZ3VlO1xuICByZWFkb25seSBtb2RlbFBhcmFtc1JlYXNvbmluZzogUmVhc29uaW5nTW9kZWxDYXRhbG9ndWU7XG4gIHJlYWRvbmx5IGxlYXJuZWRSZWFzb25pbmc6IFJlYXNvbmluZ01vZGVsQ2F0YWxvZ3VlO1xuICByZWFkb25seSB0ZW1wZXJhdHVyZVVuc3VwcG9ydGVkOiBSZWFkb25seVNldDxzdHJpbmc+O1xufVxuXG50eXBlIENhcGFiaWxpdHlTZXRzID0gTW9kZWxDYXBhYmlsaXR5Q2F0YWxvZ3VlO1xudHlwZSBNb2RlbHNEZXZEYXRhID0gTW9kZWxzRGV2Q2FwYWJpbGl0eUNhdGFsb2d1ZTtcblxuY29uc3QgVVNFUl9BR0VOVCA9IFwiZGJ4LXRvb2xzLW1vZGVsLW1ldGFkYXRhLzFcIjtcblxuY29uc3QgcmV0aXJlZENhY2hlID0gY3JlYXRlTWV0YWRhdGFDYWNoZTxyZWFkb25seSBzdHJpbmdbXT4oe1xuICBrZXk6IFwicmV0aXJlZC1tb2RlbHNcIixcbiAgZmFsbGJhY2s6IENPTU1JVFRFRF9SRVRJUkVEX01PREVMUyxcbiAgbG9hZDogYXN5bmMgKCkgPT4gcGFyc2VSZXRpcmVkTW9kZWxzKGF3YWl0IGxvYWRQYWdlKFJFVElSRURfTU9ERUxTX1VSTCksIG5vd1NlY29uZHMoKSkubW9kZWxzLFxuICBtZXJnZTogbWVyZ2VQcmVmZXJGcmVzaExpc3QsXG59KTtcblxuY29uc3QgY2FwYWJpbGl0aWVzQ2FjaGUgPSBjcmVhdGVNZXRhZGF0YUNhY2hlPENhcGFiaWxpdHlTZXRzPih7XG4gIGtleTogXCJtb2RlbC1jYXBhYmlsaXRpZXNcIixcbiAgZmFsbGJhY2s6IGNhcGFiaWxpdGllc1NuYXBzaG90LmNhcGFiaWxpdGllcyxcbiAgbG9hZDogYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IFtyZXNwb25zZXNIdG1sLCB3ZWJTZWFyY2hIdG1sXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIGxvYWRQYWdlKE9QRU5BSV9SRVNQT05TRVNfTU9ERUxTX1VSTCksXG4gICAgICBsb2FkUGFnZShXRUJfU0VBUkNIX01PREVMU19VUkwpLFxuICAgIF0pO1xuICAgIHJldHVybiBwYXJzZU1vZGVsQ2FwYWJpbGl0aWVzKHJlc3BvbnNlc0h0bWwsIHdlYlNlYXJjaEh0bWwsIG5vd1NlY29uZHMoKSkuY2FwYWJpbGl0aWVzO1xuICB9LFxuICBtZXJnZTogKGlucHV0KSA9PiAoe1xuICAgIHJlc3BvbnNlczogbWVyZ2VQcmVmZXJGcmVzaExpc3Qoe1xuICAgICAgZnJlc2g6IGlucHV0LmZyZXNoPy5yZXNwb25zZXMsXG4gICAgICBwcmV2aW91czogaW5wdXQucHJldmlvdXM/LnJlc3BvbnNlcyxcbiAgICAgIGZhbGxiYWNrOiBpbnB1dC5mYWxsYmFjay5yZXNwb25zZXMsXG4gICAgfSksXG4gICAgaW1hZ2VJbnB1dDogbWVyZ2VQcmVmZXJGcmVzaExpc3Qoe1xuICAgICAgZnJlc2g6IGlucHV0LmZyZXNoPy5pbWFnZUlucHV0LFxuICAgICAgcHJldmlvdXM6IGlucHV0LnByZXZpb3VzPy5pbWFnZUlucHV0LFxuICAgICAgZmFsbGJhY2s6IGlucHV0LmZhbGxiYWNrLmltYWdlSW5wdXQsXG4gICAgfSksXG4gICAgYXBwbHlQYXRjaDogbWVyZ2VQcmVmZXJGcmVzaExpc3Qoe1xuICAgICAgZnJlc2g6IGlucHV0LmZyZXNoPy5hcHBseVBhdGNoLFxuICAgICAgcHJldmlvdXM6IGlucHV0LnByZXZpb3VzPy5hcHBseVBhdGNoLFxuICAgICAgZmFsbGJhY2s6IGlucHV0LmZhbGxiYWNrLmFwcGx5UGF0Y2gsXG4gICAgfSksXG4gICAgd2ViU2VhcmNoOiBtZXJnZVByZWZlckZyZXNoTGlzdCh7XG4gICAgICBmcmVzaDogaW5wdXQuZnJlc2g/LndlYlNlYXJjaCxcbiAgICAgIHByZXZpb3VzOiBpbnB1dC5wcmV2aW91cz8ud2ViU2VhcmNoLFxuICAgICAgZmFsbGJhY2s6IGlucHV0LmZhbGxiYWNrLndlYlNlYXJjaCxcbiAgICB9KSxcbiAgfSksXG59KTtcblxuY29uc3QgcmF0ZUxpbWl0c0NhY2hlID0gY3JlYXRlTWV0YWRhdGFDYWNoZTxSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBNb2RlbFJhdGVMaW1pdHM+Pj4oe1xuICBrZXk6IFwibW9kZWwtcmF0ZS1saW1pdHNcIixcbiAgZmFsbGJhY2s6IHJhdGVMaW1pdHNTbmFwc2hvdC5jYXRhbG9ndWUubW9kZWxzLFxuICBsb2FkOiBhc3luYyAoKSA9PlxuICAgIHBhcnNlTW9kZWxSYXRlTGltaXRzKGF3YWl0IGxvYWRQYWdlKE1PREVMX1JBVEVfTElNSVRTX1VSTCksIG5vd1NlY29uZHMoKSkuY2F0YWxvZ3VlLm1vZGVscyxcbiAgbWVyZ2U6IG1lcmdlUHJlZmVyRnJlc2hSZWNvcmQsXG59KTtcblxuY29uc3QgcmVhc29uaW5nRG9jc0NhY2hlID0gY3JlYXRlTWV0YWRhdGFDYWNoZTxSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCByZWFkb25seSBzdHJpbmdbXT4+Pih7XG4gIGtleTogXCJtb2RlbC1yZWFzb25pbmdcIixcbiAgZmFsbGJhY2s6IHJlYXNvbmluZ1NuYXBzaG90LmNhdGFsb2d1ZS5tb2RlbHMsXG4gIGxvYWQ6IGFzeW5jICgpID0+XG4gICAgcGFyc2VSZWFzb25pbmdNb2RlbHMoYXdhaXQgbG9hZFBhZ2UoUVVFUllfUkVBU09OX01PREVMU19VUkwpLCBub3dTZWNvbmRzKCkpLmNhdGFsb2d1ZS5tb2RlbHMsXG4gIG1lcmdlOiBtZXJnZVByZWZlckZyZXNoUmVjb3JkLFxufSk7XG5cbmNvbnN0IG1vZGVsc0RldkNhY2hlID0gY3JlYXRlTWV0YWRhdGFDYWNoZTxNb2RlbHNEZXZEYXRhPih7XG4gIGtleTogXCJtb2RlbHMtZGV2LWNhcGFiaWxpdGllc1wiLFxuICBmYWxsYmFjazogbW9kZWxzRGV2U25hcHNob3QuY2FwYWJpbGl0aWVzLFxuICBsb2FkOiBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc25hcHNob3QgPSBwYXJzZU1vZGVsc0Rldihhd2FpdCBsb2FkSnNvbihNT0RFTFNfREVWX0FQSV9VUkwpLCBub3dTZWNvbmRzKCkpO1xuICAgIHJldHVybiBzbmFwc2hvdC5jYXBhYmlsaXRpZXM7XG4gIH0sXG4gIG1lcmdlOiBtZXJnZU1vZGVsc0RldkRhdGEsXG59KTtcblxuY29uc3QgbW9kZWxQYXJhbXNDYWNoZSA9IGNyZWF0ZU1ldGFkYXRhQ2FjaGU8TW9kZWxQYXJhbXNDYXRhbG9ndWU+KHtcbiAga2V5OiBcIm1vZGVscGFyYW1zLXJlYXNvbmluZ1wiLFxuICBmYWxsYmFjazogbW9kZWxQYXJhbXNTbmFwc2hvdC5jYXRhbG9ndWUsXG4gIGxvYWQ6IGFzeW5jICgpID0+XG4gICAgcGFyc2VNb2RlbFBhcmFtcyhhd2FpdCBsb2FkSnNvbihNT0RFTFBBUkFNU19ERVZfTU9ERUxTX1VSTCksIG5vd1NlY29uZHMoKSkuY2F0YWxvZ3VlLFxuICBtZXJnZTogKGlucHV0KSA9PiAoe1xuICAgIHJlYXNvbmluZzogbWVyZ2VQcmVmZXJGcmVzaExpc3Qoe1xuICAgICAgZnJlc2g6IGlucHV0LmZyZXNoPy5yZWFzb25pbmcsXG4gICAgICBwcmV2aW91czogaW5wdXQucHJldmlvdXM/LnJlYXNvbmluZyxcbiAgICAgIGZhbGxiYWNrOiBpbnB1dC5mYWxsYmFjay5yZWFzb25pbmcsXG4gICAgfSksXG4gICAgbW9kZWxzOiBtZXJnZVByZWZlckZyZXNoUmVjb3JkKHtcbiAgICAgIGZyZXNoOiBpbnB1dC5mcmVzaD8ubW9kZWxzLFxuICAgICAgcHJldmlvdXM6IGlucHV0LnByZXZpb3VzPy5tb2RlbHMsXG4gICAgICBmYWxsYmFjazogaW5wdXQuZmFsbGJhY2subW9kZWxzLFxuICAgIH0pLFxuICB9KSxcbn0pO1xuXG5jb25zdCBsZWFybmVkUmVhc29uaW5nQ2FjaGUgPSBjcmVhdGVNZXRhZGF0YUNhY2hlPFxuICBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCByZWFkb25seSBSZWFzb25pbmdMZXZlbFtdPj5cbj4oe1xuICBrZXk6IFwibGVhcm5lZC1yZWFzb25pbmdcIixcbiAgZmFsbGJhY2s6IHt9LFxuICBtZXJnZTogbWVyZ2VQcmVmZXJGcmVzaFJlY29yZCxcbn0pO1xuXG5sZXQgbGl2ZUluZGV4OiBNZXRhZGF0YUluZGV4IHwgdW5kZWZpbmVkO1xuXG5jb25zdCBjb21taXR0ZWRNZXRhZGF0YUluZGV4ID0gbWVtb2l6ZTxNZXRhZGF0YUluZGV4PihidWlsZEluZGV4RnJvbUNvbW1pdHRlZCk7XG5cbmZ1bmN0aW9uIG1ldGFkYXRhSW5kZXgoKTogTWV0YWRhdGFJbmRleCB7XG4gIHJldHVybiBsaXZlSW5kZXggPz8gY29tbWl0dGVkTWV0YWRhdGFJbmRleCgpO1xufVxuXG5mdW5jdGlvbiBidWlsZEluZGV4RnJvbUNvbW1pdHRlZCgpOiBNZXRhZGF0YUluZGV4IHtcbiAgcmV0dXJuIGJ1aWxkSW5kZXgoe1xuICAgIHJldGlyZWROYW1lczogQ09NTUlUVEVEX1JFVElSRURfTU9ERUxTLFxuICAgIGNhcGFiaWxpdGllczogY2FwYWJpbGl0aWVzU25hcHNob3QuY2FwYWJpbGl0aWVzLFxuICAgIG1vZGVsc0RldjogbW9kZWxzRGV2U25hcHNob3QuY2FwYWJpbGl0aWVzLFxuICAgIG1vZGVsUGFyYW1zOiBtb2RlbFBhcmFtc1NuYXBzaG90LmNhdGFsb2d1ZSxcbiAgICByYXRlTGltaXRzOiByYXRlTGltaXRzU25hcHNob3QuY2F0YWxvZ3VlLm1vZGVscyxcbiAgICByZWFzb25pbmc6IHJlYXNvbmluZ1NuYXBzaG90LmNhdGFsb2d1ZS5tb2RlbHMsXG4gICAgbGVhcm5lZFJlYXNvbmluZzoge30sXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBidWlsZEluZGV4KGlucHV0OiB7XG4gIHJlYWRvbmx5IHJldGlyZWROYW1lczogcmVhZG9ubHkgc3RyaW5nW107XG4gIHJlYWRvbmx5IGNhcGFiaWxpdGllczogQ2FwYWJpbGl0eVNldHM7XG4gIHJlYWRvbmx5IG1vZGVsc0RldjogTW9kZWxzRGV2RGF0YTtcbiAgcmVhZG9ubHkgbW9kZWxQYXJhbXM6IE1vZGVsUGFyYW1zQ2F0YWxvZ3VlO1xuICByZWFkb25seSByYXRlTGltaXRzOiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBNb2RlbFJhdGVMaW1pdHM+PjtcbiAgcmVhZG9ubHkgcmVhc29uaW5nOiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCByZWFkb25seSBzdHJpbmdbXT4+O1xuICByZWFkb25seSBsZWFybmVkUmVhc29uaW5nOiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCByZWFkb25seSBSZWFzb25pbmdMZXZlbFtdPj47XG59KTogTWV0YWRhdGFJbmRleCB7XG4gIHJlcGxhY2VSZXRpcmVkTW9kZWxOYW1lcyhpbnB1dC5yZXRpcmVkTmFtZXMpO1xuICBjb25zdCByZWFzb25pbmdEb2NzID0gZnJlZXplUmVhc29uaW5nQ2F0YWxvZ3VlKGlucHV0LnJlYXNvbmluZyk7XG4gIGNvbnN0IG1vZGVsUGFyYW1zUmVhc29uaW5nID0gZnJlZXplUmVhc29uaW5nQ2F0YWxvZ3VlKGlucHV0Lm1vZGVsUGFyYW1zLm1vZGVscyk7XG4gIHJldHVybiB7XG4gICAgY2FwYWJpbGl0aWVzOiB7XG4gICAgICByZXNwb25zZXM6IG5ldyBTZXQoaW5wdXQuY2FwYWJpbGl0aWVzLnJlc3BvbnNlcyksXG4gICAgICBpbWFnZUlucHV0OiBuZXcgU2V0KFsuLi5pbnB1dC5jYXBhYmlsaXRpZXMuaW1hZ2VJbnB1dCwgLi4uaW5wdXQubW9kZWxzRGV2LmltYWdlSW5wdXRdKSxcbiAgICAgIGFwcGx5UGF0Y2g6IG5ldyBTZXQoaW5wdXQuY2FwYWJpbGl0aWVzLmFwcGx5UGF0Y2gpLFxuICAgICAgd2ViU2VhcmNoOiBuZXcgU2V0KGlucHV0LmNhcGFiaWxpdGllcy53ZWJTZWFyY2gpLFxuICAgICAgcmVhc29uaW5nOiBuZXcgU2V0KFsuLi5pbnB1dC5tb2RlbHNEZXYucmVhc29uaW5nLCAuLi5pbnB1dC5tb2RlbFBhcmFtcy5yZWFzb25pbmddKSxcbiAgICAgIHRvb2xzOiBuZXcgU2V0KGlucHV0Lm1vZGVsc0Rldi50b29scyksXG4gICAgICBzdHJ1Y3R1cmVkT3V0cHV0OiBuZXcgU2V0KGlucHV0Lm1vZGVsc0Rldi5zdHJ1Y3R1cmVkT3V0cHV0KSxcbiAgICAgIHRlbXBlcmF0dXJlOiBuZXcgU2V0KGlucHV0Lm1vZGVsc0Rldi50ZW1wZXJhdHVyZVN1cHBvcnRlZCksXG4gICAgfSxcbiAgICByYXRlTGltaXRzOiBuZXcgTWFwKE9iamVjdC5lbnRyaWVzKGlucHV0LnJhdGVMaW1pdHMpKSxcbiAgICByZWFzb25pbmc6IE9iamVjdC5mcmVlemUoe1xuICAgICAgLi4ubW9kZWxQYXJhbXNSZWFzb25pbmcsXG4gICAgICAuLi5yZWFzb25pbmdEb2NzLFxuICAgIH0pLFxuICAgIHJlYXNvbmluZ0RvY3MsXG4gICAgbW9kZWxQYXJhbXNSZWFzb25pbmcsXG4gICAgbGVhcm5lZFJlYXNvbmluZzogZnJlZXplTGVhcm5lZENhdGFsb2d1ZShpbnB1dC5sZWFybmVkUmVhc29uaW5nKSxcbiAgICB0ZW1wZXJhdHVyZVVuc3VwcG9ydGVkOiBuZXcgU2V0KGlucHV0Lm1vZGVsc0Rldi50ZW1wZXJhdHVyZVVuc3VwcG9ydGVkKSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZnJlZXplUmVhc29uaW5nQ2F0YWxvZ3VlKFxuICBtb2RlbHM6IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHJlYWRvbmx5IHN0cmluZ1tdPj4sXG4pOiBSZWFzb25pbmdNb2RlbENhdGFsb2d1ZSB7XG4gIHJldHVybiBPYmplY3QuZnJlZXplKFxuICAgIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgIE9iamVjdC5lbnRyaWVzKG1vZGVscykubWFwKChba2V5LCBsZXZlbHNdKSA9PiBbXG4gICAgICAgIGtleSxcbiAgICAgICAgT2JqZWN0LmZyZWV6ZShcbiAgICAgICAgICB1bmlxdWVSZWFzb25pbmdMZXZlbHMobGV2ZWxzLmZsYXRNYXAoKGxldmVsKSA9PiBwYXJzZVJlYXNvbmluZyhsZXZlbCkgPz8gW10pKSxcbiAgICAgICAgKSxcbiAgICAgIF0pLFxuICAgICksXG4gICk7XG59XG5cbmZ1bmN0aW9uIGZyZWV6ZUxlYXJuZWRDYXRhbG9ndWUoXG4gIG1vZGVsczogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgcmVhZG9ubHkgUmVhc29uaW5nTGV2ZWxbXT4+LFxuKTogUmVhc29uaW5nTW9kZWxDYXRhbG9ndWUge1xuICByZXR1cm4gT2JqZWN0LmZyZWV6ZShcbiAgICBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICBPYmplY3QuZW50cmllcyhtb2RlbHMpLm1hcCgoW2tleSwgbGV2ZWxzXSkgPT4gW1xuICAgICAgICBrZXksXG4gICAgICAgIE9iamVjdC5mcmVlemUodW5pcXVlUmVhc29uaW5nTGV2ZWxzKGxldmVscykpLFxuICAgICAgXSksXG4gICAgKSxcbiAgKTtcbn1cblxubGV0IHJlZnJlc2hJbmZsaWdodDogUHJvbWlzZTxNZXRhZGF0YUluZGV4PiB8IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBIeWRyYXRlIG9yIHJlZnJlc2ggZG9jdW1lbnRhdGlvbiArIGxlYXJuZWQgY2FjaGVzIGludG8gdGhlIHByb2Nlc3MgaW5kZXguXG4gKlxuICogU2FmZSB0byBjYWxsIG9uIGdhdGV3YXkgc3RhcnR1cC4gQ29uY3VycmVudCBjYWxsZXJzIHNoYXJlIG9uZSByZWZyZXNoLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVmcmVzaE1vZGVsTWV0YWRhdGEoKTogUHJvbWlzZTxNZXRhZGF0YUluZGV4PiB7XG4gIGlmIChyZWZyZXNoSW5mbGlnaHQpIHJldHVybiByZWZyZXNoSW5mbGlnaHQ7XG4gIHJlZnJlc2hJbmZsaWdodCA9IChhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgW1xuICAgICAgcmV0aXJlZE5hbWVzLFxuICAgICAgY2FwYWJpbGl0aWVzLFxuICAgICAgbW9kZWxzRGV2LFxuICAgICAgbW9kZWxQYXJhbXMsXG4gICAgICByYXRlTGltaXRzLFxuICAgICAgcmVhc29uaW5nLFxuICAgICAgbGVhcm5lZFJlYXNvbmluZyxcbiAgICBdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgcmV0aXJlZENhY2hlLmdldCgpLFxuICAgICAgY2FwYWJpbGl0aWVzQ2FjaGUuZ2V0KCksXG4gICAgICBtb2RlbHNEZXZDYWNoZS5nZXQoKSxcbiAgICAgIG1vZGVsUGFyYW1zQ2FjaGUuZ2V0KCksXG4gICAgICByYXRlTGltaXRzQ2FjaGUuZ2V0KCksXG4gICAgICByZWFzb25pbmdEb2NzQ2FjaGUuZ2V0KCksXG4gICAgICBsZWFybmVkUmVhc29uaW5nQ2FjaGUuZ2V0KCksXG4gICAgXSk7XG4gICAgbGl2ZUluZGV4ID0gYnVpbGRJbmRleCh7XG4gICAgICByZXRpcmVkTmFtZXMsXG4gICAgICBjYXBhYmlsaXRpZXMsXG4gICAgICBtb2RlbHNEZXYsXG4gICAgICBtb2RlbFBhcmFtcyxcbiAgICAgIHJhdGVMaW1pdHMsXG4gICAgICByZWFzb25pbmcsXG4gICAgICBsZWFybmVkUmVhc29uaW5nLFxuICAgIH0pO1xuICAgIHJldHVybiBsaXZlSW5kZXg7XG4gIH0pKCkuZmluYWxseSgoKSA9PiB7XG4gICAgcmVmcmVzaEluZmxpZ2h0ID0gdW5kZWZpbmVkO1xuICB9KTtcbiAgcmV0dXJuIHJlZnJlc2hJbmZsaWdodDtcbn1cblxuLyoqIExvYWQgc2hhcmVkIGNhY2hlIGVudHJpZXMgd2l0aG91dCBmb3JjaW5nIGEgbmV0d29yayByZWZyZXNoLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGh5ZHJhdGVNb2RlbE1ldGFkYXRhKCk6IFByb21pc2U8TWV0YWRhdGFJbmRleD4ge1xuICBjb25zdCBbXG4gICAgcmV0aXJlZE5hbWVzLFxuICAgIGNhcGFiaWxpdGllcyxcbiAgICBtb2RlbHNEZXYsXG4gICAgbW9kZWxQYXJhbXMsXG4gICAgcmF0ZUxpbWl0cyxcbiAgICByZWFzb25pbmcsXG4gICAgbGVhcm5lZFJlYXNvbmluZyxcbiAgXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICBwZWVrT3JGYWxsYmFjayhyZXRpcmVkQ2FjaGUsIENPTU1JVFRFRF9SRVRJUkVEX01PREVMUyksXG4gICAgcGVla09yRmFsbGJhY2soY2FwYWJpbGl0aWVzQ2FjaGUsIGNhcGFiaWxpdGllc1NuYXBzaG90LmNhcGFiaWxpdGllcyksXG4gICAgcGVla09yRmFsbGJhY2sobW9kZWxzRGV2Q2FjaGUsIG1vZGVsc0RldlNuYXBzaG90LmNhcGFiaWxpdGllcyksXG4gICAgcGVla09yRmFsbGJhY2sobW9kZWxQYXJhbXNDYWNoZSwgbW9kZWxQYXJhbXNTbmFwc2hvdC5jYXRhbG9ndWUpLFxuICAgIHBlZWtPckZhbGxiYWNrKHJhdGVMaW1pdHNDYWNoZSwgcmF0ZUxpbWl0c1NuYXBzaG90LmNhdGFsb2d1ZS5tb2RlbHMpLFxuICAgIHBlZWtPckZhbGxiYWNrKHJlYXNvbmluZ0RvY3NDYWNoZSwgcmVhc29uaW5nU25hcHNob3QuY2F0YWxvZ3VlLm1vZGVscyksXG4gICAgcGVla09yRmFsbGJhY2sobGVhcm5lZFJlYXNvbmluZ0NhY2hlLCB7fSksXG4gIF0pO1xuICBsaXZlSW5kZXggPSBidWlsZEluZGV4KHtcbiAgICByZXRpcmVkTmFtZXMsXG4gICAgY2FwYWJpbGl0aWVzLFxuICAgIG1vZGVsc0RldixcbiAgICBtb2RlbFBhcmFtcyxcbiAgICByYXRlTGltaXRzLFxuICAgIHJlYXNvbmluZyxcbiAgICBsZWFybmVkUmVhc29uaW5nLFxuICB9KTtcbiAgcmV0dXJuIGxpdmVJbmRleDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcGVla09yRmFsbGJhY2s8VD4oY2FjaGU6IE1ldGFkYXRhQ2FjaGU8VD4sIGZhbGxiYWNrOiBUKTogUHJvbWlzZTxUPiB7XG4gIGNvbnN0IHBlZWtlZCA9IGF3YWl0IGNhY2hlLnBlZWsoKTtcbiAgaWYgKHBlZWtlZCAhPT0gdW5kZWZpbmVkKSByZXR1cm4gcGVla2VkO1xuICByZXR1cm4gY2FjaGUuZ2V0KCkuY2F0Y2goKCkgPT4gZmFsbGJhY2spO1xufVxuXG4vKiogUmV0dXJuIHRoZSBjb21taXR0ZWQgcmVhc29uaW5nLWVmZm9ydCBjYXRhbG9ndWUuIENhY2hlZCBwZXIgcHJvY2Vzcy4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWFzb25pbmdNb2RlbENhdGFsb2d1ZSgpOiBSZWFzb25pbmdNb2RlbENhdGFsb2d1ZSB7XG4gIHJldHVybiBtZXRhZGF0YUluZGV4KCkucmVhc29uaW5nO1xufVxuXG4vKiogUmV0dXJuIGVycm9yLWxlYXJuZWQgcmVhc29uaW5nIGxhZGRlcnMgZnJvbSB0aGUgc2hhcmVkIG1vZGVsIGNhY2hlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxlYXJuZWRSZWFzb25pbmdDYXRhbG9ndWUoKTogUmVhc29uaW5nTW9kZWxDYXRhbG9ndWUge1xuICByZXR1cm4gbWV0YWRhdGFJbmRleCgpLmxlYXJuZWRSZWFzb25pbmc7XG59XG5cbi8qKlxuICogU3RvcmUgbGV2ZWxzIGxlYXJuZWQgZnJvbSBhbiB1cHN0cmVhbSBlcnJvciBhbmQgcGVyc2lzdCB0aGVtIHdyaXRlLXRocm91Z2guXG4gKlxuICogRW1wdHkgbGlzdHMgYXJlIGlnbm9yZWQgc28gYSBmYWlsZWQgcGFyc2UgY2Fubm90IHdpcGUgZGVmYXVsdHMuIEVycm9yIGJvZGllc1xuICogdGhlbXNlbHZlcyBhcmUgbmV2ZXIgc3RvcmVkIC0gb25seSB0aGUgcGFyc2VkIGxhZGRlci5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbWVtYmVyUmVhc29uaW5nTGV2ZWxzKFxuICBtb2RlbDogc3RyaW5nLFxuICBsZXZlbHM6IHJlYWRvbmx5IFJlYXNvbmluZ0xldmVsW10sXG4pOiBQcm9taXNlPFJlYXNvbmluZ0xldmVsW10+IHtcbiAgY29uc3QgdW5pcXVlID0gdW5pcXVlUmVhc29uaW5nTGV2ZWxzKGxldmVscyk7XG4gIGlmICh1bmlxdWUubGVuZ3RoID09PSAwKSByZXR1cm4gbW9kZWxSZWFzb25pbmdMZXZlbHNGb3IobW9kZWwpO1xuICBjb25zdCBrZXkgPSBtb2RlbEtleShtb2RlbCk7XG4gIGlmICgha2V5KSByZXR1cm4gbW9kZWxSZWFzb25pbmdMZXZlbHNGb3IobW9kZWwpO1xuICBjb25zdCBjYXRhbG9ndWUgPSBhd2FpdCBsZWFybmVkUmVhc29uaW5nQ2FjaGUudXBkYXRlKChjdXJyZW50KSA9PiAoe1xuICAgIC4uLmN1cnJlbnQsXG4gICAgW2tleV06IHVuaXF1ZSxcbiAgfSkpO1xuICBjb25zdCBjdXJyZW50ID0gbWV0YWRhdGFJbmRleCgpO1xuICBsaXZlSW5kZXggPSB7XG4gICAgLi4uY3VycmVudCxcbiAgICBsZWFybmVkUmVhc29uaW5nOiBmcmVlemVMZWFybmVkQ2F0YWxvZ3VlKGNhdGFsb2d1ZSksXG4gIH07XG4gIHJldHVybiBbLi4udW5pcXVlXTtcbn1cblxuLyoqXG4gKiBQYXJzZSBhbiB1cHN0cmVhbSBlcnJvciBib2R5IGFuZCBwZXJzaXN0IHRoZSBzdXBwb3J0ZWQgbGFkZGVyIGZvciBgbW9kZWxgLlxuICpcbiAqIEFjY2VwdHMgdGhlIHNhbWUgbmVzdGVkIERhdGFicmlja3MgZW52ZWxvcGVzIGFzIHtAbGluayBwYXJzZVJlYXNvbmluZ0xldmVsc30uXG4gKiBSZXR1cm5zIGEgcHVibGlzaGVkIGxhZGRlciB3aXRob3V0IHBhcnNpbmcgb3Igc3RvcmluZyBlcnJvci1kZXJpdmVkIGxldmVsc1xuICogd2hlbiBvbmUgZXhpc3RzLiBPdGhlcndpc2UgcmV0dXJucyB0aGUgbGV2ZWxzIHRoYXQgd2VyZSBzdG9yZWQsIG9yIHRoZVxuICogY3VycmVudCBmYWxsYmFjayB3aGVuIHBhcnNpbmcgeWllbGRzIG5vdGhpbmcuIFRoZSByYXcgZXJyb3IgYm9keSBpcyBuZXZlclxuICogY2FjaGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGVhcm5SZWFzb25pbmdMZXZlbHNGcm9tRXJyb3IoXG4gIG1vZGVsOiBzdHJpbmcsXG4gIGJvZHk6IHVua25vd24sXG4pOiBQcm9taXNlPFJlYXNvbmluZ0xldmVsW10+IHtcbiAgY29uc3QgcHVibGlzaGVkID0gcHVibGlzaGVkUmVhc29uaW5nTGV2ZWxzRm9yKG1vZGVsLCBtZXRhZGF0YUluZGV4KCkpO1xuICBpZiAocHVibGlzaGVkKSByZXR1cm4gcHVibGlzaGVkO1xuICByZXR1cm4gcmVtZW1iZXJSZWFzb25pbmdMZXZlbHMobW9kZWwsIHBhcnNlUmVhc29uaW5nTGV2ZWxzKGJvZHkpKTtcbn1cblxuLyoqIFJlc29sdmUgcHVibGlzaGVkIG1vZGVsIGNhcGFiaWxpdGllcyBmcm9tIGEgbmFtZSBvciBlbmRwb2ludCBzdW1tYXJ5LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vZGVsQ2FwYWJpbGl0aWVzRm9yKG1vZGVsOiBzdHJpbmcgfCBTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5KTogTW9kZWxDYXBhYmlsaXRpZXMge1xuICBjb25zdCBjYXBhYmlsaXRpZXMgPSBtZXRhZGF0YUluZGV4KCkuY2FwYWJpbGl0aWVzO1xuICBjb25zdCBpZGVudGl0aWVzID0gbW9kZWxJZGVudGl0aWVzKG1vZGVsLCBmYWxzZSk7XG4gIGNvbnN0IGtleXMgPSBpZGVudGl0aWVzLmZsYXRNYXAoKGlkZW50aXR5KSA9PiBtb2RlbEtleShpZGVudGl0eSkgPz8gW10pO1xuICByZXR1cm4ge1xuICAgIHJlc3BvbnNlczoga2V5cy5zb21lKChrZXkpID0+IGNhcGFiaWxpdGllcy5yZXNwb25zZXMuaGFzKGtleSkpLFxuICAgIGltYWdlSW5wdXQ6IGtleXMuc29tZSgoa2V5KSA9PiBjYXBhYmlsaXRpZXMuaW1hZ2VJbnB1dC5oYXMoa2V5KSksXG4gICAgYXBwbHlQYXRjaDoga2V5cy5zb21lKChrZXkpID0+IGNhcGFiaWxpdGllcy5hcHBseVBhdGNoLmhhcyhrZXkpKSxcbiAgICAvLyBWZXJzaW9uIGluaGVyaXRhbmNlIG9ubHkgYXBwbGllcyB0byBob3N0ZWQgZm91bmRhdGlvbiBpZGVudGl0aWVzLlxuICAgIHdlYlNlYXJjaDpcbiAgICAgIGtleXMuc29tZSgoa2V5KSA9PiBjYXBhYmlsaXRpZXMud2ViU2VhcmNoLmhhcyhrZXkpKSB8fFxuICAgICAgaWRlbnRpdGllcy5zb21lKFxuICAgICAgICAoaWRlbnRpdHkpID0+XG4gICAgICAgICAgaXNGb3VuZGF0aW9uTW9kZWxJZGVudGl0eShpZGVudGl0eSkgJiZcbiAgICAgICAgICBpbmhlcml0c05hdGl2ZVdlYlNlYXJjaChpZGVudGl0eSwgY2FwYWJpbGl0aWVzLndlYlNlYXJjaCksXG4gICAgICApLFxuICAgIHJlYXNvbmluZzpcbiAgICAgIGtleXMuc29tZSgoa2V5KSA9PiBjYXBhYmlsaXRpZXMucmVhc29uaW5nLmhhcyhrZXkpKSB8fFxuICAgICAgaWRlbnRpdGllcy5zb21lKChpZGVudGl0eSkgPT4gbW9kZWxSZWFzb25pbmdFZmZvcnRzKGlkZW50aXR5KS5sZW5ndGggPiAwKSxcbiAgICB0b29sczoga2V5cy5zb21lKChrZXkpID0+IGNhcGFiaWxpdGllcy50b29scy5oYXMoa2V5KSkgfHwgaWRlbnRpdGllcy5zb21lKG1vZGVsU3VwcG9ydHNUb29scyksXG4gICAgc3RydWN0dXJlZE91dHB1dDoga2V5cy5zb21lKChrZXkpID0+IGNhcGFiaWxpdGllcy5zdHJ1Y3R1cmVkT3V0cHV0LmhhcyhrZXkpKSxcbiAgICB0ZW1wZXJhdHVyZTogbW9kZWxUZW1wZXJhdHVyZVN1cHBvcnRGb3IobW9kZWwpID09PSB0cnVlLFxuICB9O1xufVxuXG4vKiogUmVzb2x2ZSBleHBsaWNpdCBEYXRhYnJpY2tzIHRlbXBlcmF0dXJlIHN1cHBvcnQsIG9yIHVuZGVmaW5lZCB3aGVuIHVucHVibGlzaGVkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vZGVsVGVtcGVyYXR1cmVTdXBwb3J0Rm9yKFxuICBtb2RlbDogc3RyaW5nIHwgU2VydmluZ0VuZHBvaW50U3VtbWFyeSxcbik6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICBjb25zdCBpbmRleCA9IG1ldGFkYXRhSW5kZXgoKTtcbiAgY29uc3Qga2V5cyA9IG1vZGVsSWRlbnRpdGllcyhtb2RlbCkuZmxhdE1hcCgoaWRlbnRpdHkpID0+IG1vZGVsS2V5KGlkZW50aXR5KSA/PyBbXSk7XG4gIGlmIChrZXlzLnNvbWUoKGtleSkgPT4gaW5kZXgudGVtcGVyYXR1cmVVbnN1cHBvcnRlZC5oYXMoa2V5KSkpIHJldHVybiBmYWxzZTtcbiAgaWYgKGtleXMuc29tZSgoa2V5KSA9PiBpbmRleC5jYXBhYmlsaXRpZXMudGVtcGVyYXR1cmUuaGFzKGtleSkpKSByZXR1cm4gdHJ1ZTtcbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqIFJlc29sdmUgcHVibGlzaGVkIElUUE0sIE9UUE0sIGFuZCBRUEggbGltaXRzIGZyb20gYSBtb2RlbCBpZGVudGl0eS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtb2RlbFJhdGVMaW1pdHNGb3IoXG4gIG1vZGVsOiBzdHJpbmcgfCBTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5LFxuKTogTW9kZWxSYXRlTGltaXRzIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgbGltaXRzID0gbWV0YWRhdGFJbmRleCgpLnJhdGVMaW1pdHM7XG4gIGZvciAoY29uc3QgaWRlbnRpdHkgb2YgbW9kZWxJZGVudGl0aWVzKG1vZGVsKSkge1xuICAgIGNvbnN0IGtleSA9IG1vZGVsS2V5KGlkZW50aXR5KTtcbiAgICBpZiAoIWtleSkgY29udGludWU7XG4gICAgY29uc3QgZm91bmQgPSBsaW1pdHMuZ2V0KGtleSk7XG4gICAgaWYgKGZvdW5kKSByZXR1cm4gZm91bmQ7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIHJlYXNvbmluZyBsZXZlbHM6IERhdGFicmlja3MgZG9jdW1lbnRhdGlvbiwgbW9kZWxwYXJhbXMuZGV2LFxuICogbGVhcm5lZCBlcnJvcnMsIHRoZW4gZmFtaWx5IGRlZmF1bHRzLlxuICpcbiAqIERvZXMgbm90IHBhcnNlIGVycm9yIGJvZGllczsgY2FsbGVycyBoYW5kbGluZyBhbiB1cHN0cmVhbSBlcnJvciBzaG91bGQgdXNlXG4gKiB7QGxpbmsgbGVhcm5SZWFzb25pbmdMZXZlbHNGcm9tRXJyb3J9IHNvIHB1Ymxpc2hlZCBsZXZlbHMga2VlcCBwcmVjZWRlbmNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbW9kZWxSZWFzb25pbmdMZXZlbHNGb3IobW9kZWw6IHN0cmluZyB8IFNlcnZpbmdFbmRwb2ludFN1bW1hcnkpOiBSZWFzb25pbmdMZXZlbFtdIHtcbiAgY29uc3QgaW5kZXggPSBtZXRhZGF0YUluZGV4KCk7XG4gIGNvbnN0IHB1Ymxpc2hlZCA9IHB1Ymxpc2hlZFJlYXNvbmluZ0xldmVsc0Zvcihtb2RlbCwgaW5kZXgpO1xuICBpZiAocHVibGlzaGVkKSByZXR1cm4gcHVibGlzaGVkO1xuICBmb3IgKGNvbnN0IGlkZW50aXR5IG9mIG1vZGVsSWRlbnRpdGllcyhtb2RlbCkpIHtcbiAgICBjb25zdCBsZWFybmVkID0gZG9jdW1lbnRlZFJlYXNvbmluZ0xldmVscyhpZGVudGl0eSwgaW5kZXgubGVhcm5lZFJlYXNvbmluZyk7XG4gICAgaWYgKGxlYXJuZWQ/Lmxlbmd0aCkgcmV0dXJuIGxlYXJuZWQ7XG4gIH1cbiAgY29uc3QgcHJpbWFyeSA9IHR5cGVvZiBtb2RlbCA9PT0gXCJzdHJpbmdcIiA/IG1vZGVsIDogKG1vZGVsLm1vZGVsU2VydmljZU5hbWUgPz8gbW9kZWwubmFtZSk7XG4gIHJldHVybiBkZWZhdWx0UmVhc29uaW5nTGV2ZWxzKHByaW1hcnkpO1xufVxuXG5mdW5jdGlvbiBwdWJsaXNoZWRSZWFzb25pbmdMZXZlbHNGb3IoXG4gIG1vZGVsOiBzdHJpbmcgfCBTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5LFxuICBpbmRleDogTWV0YWRhdGFJbmRleCxcbik6IFJlYXNvbmluZ0xldmVsW10gfCB1bmRlZmluZWQge1xuICBjb25zdCBpZGVudGl0aWVzID0gbW9kZWxJZGVudGl0aWVzKG1vZGVsKTtcbiAgZm9yIChjb25zdCBpZGVudGl0eSBvZiBpZGVudGl0aWVzKSB7XG4gICAgY29uc3QgZG9jdW1lbnRlZCA9IGRvY3VtZW50ZWRSZWFzb25pbmdMZXZlbHMoaWRlbnRpdHksIGluZGV4LnJlYXNvbmluZ0RvY3MpO1xuICAgIGlmIChkb2N1bWVudGVkPy5sZW5ndGgpIHJldHVybiBkb2N1bWVudGVkO1xuICB9XG4gIGZvciAoY29uc3QgaWRlbnRpdHkgb2YgaWRlbnRpdGllcykge1xuICAgIGNvbnN0IG1vZGVsUGFyYW1zID0gZG9jdW1lbnRlZFJlYXNvbmluZ0xldmVscyhpZGVudGl0eSwgaW5kZXgubW9kZWxQYXJhbXNSZWFzb25pbmcpO1xuICAgIGlmIChtb2RlbFBhcmFtcz8ubGVuZ3RoKSByZXR1cm4gbW9kZWxQYXJhbXM7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqIFJlc29sdmUgcmV0aXJlbWVudCwgY2FwYWJpbGl0eSwgYW5kIHJhdGUtbGltaXQgbWV0YWRhdGEgdG9nZXRoZXIuICovXG5leHBvcnQgZnVuY3Rpb24gbW9kZWxNZXRhZGF0YUZvcihtb2RlbDogc3RyaW5nIHwgU2VydmluZ0VuZHBvaW50U3VtbWFyeSk6IE1vZGVsTWV0YWRhdGEge1xuICBjb25zdCByYXRlTGltaXRzID0gbW9kZWxSYXRlTGltaXRzRm9yKG1vZGVsKTtcbiAgcmV0dXJuIHtcbiAgICBzdGF0dXM6IG1vZGVsU3RhdHVzRm9yKG1vZGVsKSxcbiAgICBjYXBhYmlsaXRpZXM6IG1vZGVsQ2FwYWJpbGl0aWVzRm9yKG1vZGVsKSxcbiAgICAuLi4ocmF0ZUxpbWl0cyA/IHsgcmF0ZUxpbWl0cyB9IDoge30pLFxuICB9O1xufVxuXG4vKiogUmV0dXJuIGdlbmVyYXRpb24gdGltZXN0YW1wcyBmb3IgdGhlIGNvbW1pdHRlZCBtZXRhZGF0YSBzbmFwc2hvdHMuICovXG5leHBvcnQgZnVuY3Rpb24gbW9kZWxNZXRhZGF0YUdlbmVyYXRlZEF0KCk6IFJlYWRvbmx5PHtcbiAgcmV0aXJlZE1vZGVsczogbnVtYmVyO1xuICBjYXBhYmlsaXRpZXM6IG51bWJlcjtcbiAgbW9kZWxzRGV2OiBudW1iZXI7XG4gIG1vZGVsUGFyYW1zOiBudW1iZXI7XG4gIHJhdGVMaW1pdHM6IG51bWJlcjtcbiAgcmVhc29uaW5nOiBudW1iZXI7XG59PiB7XG4gIHJldHVybiB7XG4gICAgcmV0aXJlZE1vZGVsczogUkVUSVJFRF9NT0RFTFNfR0VORVJBVEVEX0FULFxuICAgIGNhcGFiaWxpdGllczogY2FwYWJpbGl0aWVzU25hcHNob3QuZ2VuZXJhdGVkQXQsXG4gICAgbW9kZWxzRGV2OiBtb2RlbHNEZXZTbmFwc2hvdC5nZW5lcmF0ZWRBdCxcbiAgICBtb2RlbFBhcmFtczogbW9kZWxQYXJhbXNTbmFwc2hvdC5nZW5lcmF0ZWRBdCxcbiAgICByYXRlTGltaXRzOiByYXRlTGltaXRzU25hcHNob3QuZ2VuZXJhdGVkQXQsXG4gICAgcmVhc29uaW5nOiByZWFzb25pbmdTbmFwc2hvdC5nZW5lcmF0ZWRBdCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gbW9kZWxJZGVudGl0aWVzKFxuICBtb2RlbDogc3RyaW5nIHwgU2VydmluZ0VuZHBvaW50U3VtbWFyeSxcbiAgaW5jbHVkZURpc3BsYXlOYW1lID0gdHJ1ZSxcbik6IHN0cmluZ1tdIHtcbiAgaWYgKHR5cGVvZiBtb2RlbCA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIFttb2RlbF07XG4gIHJldHVybiBbXG4gICAgbW9kZWwubmFtZSxcbiAgICAuLi4oaW5jbHVkZURpc3BsYXlOYW1lID8gW21vZGVsLmRpc3BsYXlOYW1lXSA6IFtdKSxcbiAgICBtb2RlbC5tb2RlbFNlcnZpY2VOYW1lLFxuICAgIC4uLk9iamVjdC52YWx1ZXMobW9kZWwuc2VydmljZU5hbWVzID8/IHt9KSxcbiAgXS5maWx0ZXIoKHZhbHVlKTogdmFsdWUgaXMgc3RyaW5nID0+IEJvb2xlYW4odmFsdWUpKTtcbn1cblxuZnVuY3Rpb24gbW9kZWxLZXkodmFsdWU6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBtb2RlbFNlYXJjaFF1ZXJ5KHZhbHVlKT8ucmVwbGFjZUFsbChcIiBcIiwgXCItXCIpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBsb2FkUGFnZSh1cmw6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCB7XG4gICAgaGVhZGVyczogeyBcInVzZXItYWdlbnRcIjogVVNFUl9BR0VOVCB9LFxuICAgIHNpZ25hbDogQWJvcnRTaWduYWwudGltZW91dCgxNV8wMDApLFxuICB9KTtcbiAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgIHRocm93IG5ldyBFcnJvcihgRGF0YWJyaWNrcyBkb2N1bWVudGF0aW9uIHJldHVybmVkIEhUVFAgJHtyZXNwb25zZS5zdGF0dXN9OiAke3VybH1gKTtcbiAgfVxuICByZXR1cm4gcmVzcG9uc2UudGV4dCgpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBsb2FkSnNvbih1cmw6IHN0cmluZyk6IFByb21pc2U8dW5rbm93bj4ge1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybCwge1xuICAgIGhlYWRlcnM6IHsgXCJ1c2VyLWFnZW50XCI6IFVTRVJfQUdFTlQgfSxcbiAgICBzaWduYWw6IEFib3J0U2lnbmFsLnRpbWVvdXQoMTVfMDAwKSxcbiAgfSk7XG4gIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE1vZGVsIG1ldGFkYXRhIHNvdXJjZSByZXR1cm5lZCBIVFRQICR7cmVzcG9uc2Uuc3RhdHVzfTogJHt1cmx9YCk7XG4gIH1cbiAgcmV0dXJuIHJlc3BvbnNlLmpzb24oKTtcbn1cblxuZnVuY3Rpb24gbWVyZ2VNb2RlbHNEZXZEYXRhKGlucHV0OiB7XG4gIHJlYWRvbmx5IGZyZXNoOiBNb2RlbHNEZXZEYXRhIHwgdW5kZWZpbmVkO1xuICByZWFkb25seSBwcmV2aW91czogTW9kZWxzRGV2RGF0YSB8IHVuZGVmaW5lZDtcbiAgcmVhZG9ubHkgZmFsbGJhY2s6IE1vZGVsc0RldkRhdGE7XG59KTogTW9kZWxzRGV2RGF0YSB7XG4gIGNvbnN0IGNhcGFiaWxpdHkgPSAoa2V5OiBrZXlvZiBNb2RlbHNEZXZDYXBhYmlsaXR5Q2F0YWxvZ3VlKSA9PlxuICAgIG1lcmdlUHJlZmVyRnJlc2hMaXN0KHtcbiAgICAgIGZyZXNoOiBpbnB1dC5mcmVzaD8uW2tleV0sXG4gICAgICBwcmV2aW91czogaW5wdXQucHJldmlvdXM/LltrZXldLFxuICAgICAgZmFsbGJhY2s6IGlucHV0LmZhbGxiYWNrW2tleV0sXG4gICAgfSk7XG4gIHJldHVybiB7XG4gICAgaW1hZ2VJbnB1dDogY2FwYWJpbGl0eShcImltYWdlSW5wdXRcIiksXG4gICAgcmVhc29uaW5nOiBjYXBhYmlsaXR5KFwicmVhc29uaW5nXCIpLFxuICAgIHRvb2xzOiBjYXBhYmlsaXR5KFwidG9vbHNcIiksXG4gICAgc3RydWN0dXJlZE91dHB1dDogY2FwYWJpbGl0eShcInN0cnVjdHVyZWRPdXRwdXRcIiksXG4gICAgdGVtcGVyYXR1cmVTdXBwb3J0ZWQ6IGNhcGFiaWxpdHkoXCJ0ZW1wZXJhdHVyZVN1cHBvcnRlZFwiKSxcbiAgICB0ZW1wZXJhdHVyZVVuc3VwcG9ydGVkOiBjYXBhYmlsaXR5KFwidGVtcGVyYXR1cmVVbnN1cHBvcnRlZFwiKSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gbm93U2Vjb25kcygpOiBudW1iZXIge1xuICByZXR1cm4gTWF0aC5mbG9vcihEYXRlLm5vdygpIC8gMTAwMCk7XG59XG4iXX0=
@@ -1,6 +1,8 @@
1
1
  /** Lightweight model retirement state shared by discovery and metadata caches. */
2
2
  import type { ModelStatus, ServingEndpointSummary } from "@dbx-tools/shared-model";
3
+ /** Retired model names from the committed metadata snapshot. */
3
4
  export declare const COMMITTED_RETIRED_MODELS: readonly string[];
5
+ /** Generation timestamp recorded in the committed retired-model snapshot. */
4
6
  export declare const RETIRED_MODELS_GENERATED_AT: number;
5
7
  /** Replace retirement state after metadata cache hydration or refresh. */
6
8
  export declare function replaceRetiredModelNames(models: readonly string[]): void;
@@ -12,7 +12,9 @@ const RETIRED_MODEL_PREFIXES = new Set([
12
12
  ]);
13
13
  let names = Object.freeze([...snapshot.models]);
14
14
  let keys = retiredKeys(names);
15
+ /** Retired model names from the committed metadata snapshot. */
15
16
  export const COMMITTED_RETIRED_MODELS = snapshot.models;
17
+ /** Generation timestamp recorded in the committed retired-model snapshot. */
16
18
  export const RETIRED_MODELS_GENERATED_AT = snapshot.generatedAt;
17
19
  /** Replace retirement state after metadata cache hydration or refresh. */
18
20
  export function replaceRetiredModelNames(models) {
@@ -56,4 +58,4 @@ function retiredModelKey(value) {
56
58
  tokens.shift();
57
59
  return tokens.join("-");
58
60
  }
59
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV0aXJlbWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yZXRpcmVtZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8seUJBQXlCLE1BQU0saUNBQWlDLENBQUMsT0FBTyxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFHOUYsTUFBTSxRQUFRLEdBQUcseUJBQWtELENBQUM7QUFDcEUsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNyQyxJQUFJO0lBQ0osV0FBVztJQUNYLFlBQVk7SUFDWixLQUFLO0lBQ0wsUUFBUTtJQUNSLE1BQU07SUFDTixRQUFRO0lBQ1IsUUFBUTtDQUNULENBQUMsQ0FBQztBQUVILElBQUksS0FBSyxHQUFzQixNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUNuRSxJQUFJLElBQUksR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7QUFFOUIsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQztBQUN4RCxNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDO0FBRWhFLDBFQUEwRTtBQUMxRSxNQUFNLFVBQVUsd0JBQXdCLENBQUMsTUFBeUI7SUFDaEUsS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDbkMsSUFBSSxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM1QixDQUFDO0FBRUQsNkNBQTZDO0FBQzdDLE1BQU0sVUFBVSxpQkFBaUI7SUFDL0IsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQsa0VBQWtFO0FBQ2xFLE1BQU0sVUFBVSxjQUFjLENBQzVCLEdBQUcsTUFBb0Q7SUFFdkQsTUFBTSxVQUFVLEdBQUcsTUFBTTtTQUN0QixPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUMxQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtRQUNqQixNQUFNLFNBQVMsR0FBRyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUMsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUN2QixJQUFJLFNBQVMsS0FBSyxHQUFHLElBQUksU0FBUyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO2dCQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ3hFLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUMsQ0FBQyxDQUFDO0lBQ0wsT0FBTyxFQUFFLFVBQVUsRUFBRSxDQUFDO0FBQ3hCLENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxNQUF5QjtJQUM1QyxPQUFPLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDOUQsQ0FBQztBQUVELFNBQVMsZUFBZSxDQUFDLEtBQXNDO0lBQzdELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUTtRQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QyxPQUFPO1FBQ0wsS0FBSyxDQUFDLElBQUk7UUFDVixLQUFLLENBQUMsV0FBVztRQUNqQixLQUFLLENBQUMsZ0JBQWdCO1FBQ3RCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQztLQUMzQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBbUIsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3ZELENBQUM7QUFFRCxTQUFTLGVBQWUsQ0FBQyxLQUFhO0lBQ3BDLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzdELE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLHNCQUFzQixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFBRSxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDMUUsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiogTGlnaHR3ZWlnaHQgbW9kZWwgcmV0aXJlbWVudCBzdGF0ZSBzaGFyZWQgYnkgZGlzY292ZXJ5IGFuZCBtZXRhZGF0YSBjYWNoZXMuICovXG5pbXBvcnQgdHlwZSB7IE1vZGVsU3RhdHVzLCBTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5IH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLW1vZGVsXCI7XG5cbmltcG9ydCByZXRpcmVkTW9kZWxzU25hcHNob3RKc29uIGZyb20gXCIuL2dlbmVyYXRlZC9yZXRpcmVkLW1vZGVscy5qc29uXCIgd2l0aCB7IHR5cGU6IFwianNvblwiIH07XG5pbXBvcnQgdHlwZSB7IFJldGlyZWRNb2RlbHNTbmFwc2hvdCB9IGZyb20gXCIuL21ldGFkYXRhLWNvbnRyYWN0LnRzXCI7XG5cbmNvbnN0IHNuYXBzaG90ID0gcmV0aXJlZE1vZGVsc1NuYXBzaG90SnNvbiBhcyBSZXRpcmVkTW9kZWxzU25hcHNob3Q7XG5jb25zdCBSRVRJUkVEX01PREVMX1BSRUZJWEVTID0gbmV3IFNldChbXG4gIFwiYWlcIixcbiAgXCJhbnRocm9waWNcIixcbiAgXCJkYXRhYnJpY2tzXCIsXG4gIFwiZGJ4XCIsXG4gIFwiZ29vZ2xlXCIsXG4gIFwibWV0YVwiLFxuICBcIm9wZW5haVwiLFxuICBcInN5c3RlbVwiLFxuXSk7XG5cbmxldCBuYW1lczogcmVhZG9ubHkgc3RyaW5nW10gPSBPYmplY3QuZnJlZXplKFsuLi5zbmFwc2hvdC5tb2RlbHNdKTtcbmxldCBrZXlzID0gcmV0aXJlZEtleXMobmFtZXMpO1xuXG5leHBvcnQgY29uc3QgQ09NTUlUVEVEX1JFVElSRURfTU9ERUxTID0gc25hcHNob3QubW9kZWxzO1xuZXhwb3J0IGNvbnN0IFJFVElSRURfTU9ERUxTX0dFTkVSQVRFRF9BVCA9IHNuYXBzaG90LmdlbmVyYXRlZEF0O1xuXG4vKiogUmVwbGFjZSByZXRpcmVtZW50IHN0YXRlIGFmdGVyIG1ldGFkYXRhIGNhY2hlIGh5ZHJhdGlvbiBvciByZWZyZXNoLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VSZXRpcmVkTW9kZWxOYW1lcyhtb2RlbHM6IHJlYWRvbmx5IHN0cmluZ1tdKTogdm9pZCB7XG4gIG5hbWVzID0gT2JqZWN0LmZyZWV6ZShbLi4ubW9kZWxzXSk7XG4gIGtleXMgPSByZXRpcmVkS2V5cyhuYW1lcyk7XG59XG5cbi8qKiBSZXR1cm4gdGhlIGFjdGl2ZSByZXRpcmVkLW1vZGVsIG5hbWVzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJldGlyZWRNb2RlbE5hbWVzKCk6IHJlYWRvbmx5IHN0cmluZ1tdIHtcbiAgcmV0dXJuIG5hbWVzO1xufVxuXG4vKiogUmVzb2x2ZSB3aGV0aGVyIGFueSBzdXBwbGllZCBpZGVudGl0eSBpcyBsaXN0ZWQgYXMgcmV0aXJlZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtb2RlbFN0YXR1c0ZvcihcbiAgLi4ubW9kZWxzOiByZWFkb25seSAoc3RyaW5nIHwgU2VydmluZ0VuZHBvaW50U3VtbWFyeSlbXVxuKTogTW9kZWxTdGF0dXMge1xuICBjb25zdCBkZXByZWNhdGVkID0gbW9kZWxzXG4gICAgLmZsYXRNYXAoKG1vZGVsKSA9PiBtb2RlbElkZW50aXRpZXMobW9kZWwpKVxuICAgIC5zb21lKChpZGVudGl0eSkgPT4ge1xuICAgICAgY29uc3QgY2FuZGlkYXRlID0gcmV0aXJlZE1vZGVsS2V5KGlkZW50aXR5KTtcbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgICAgaWYgKGNhbmRpZGF0ZSA9PT0ga2V5IHx8IGNhbmRpZGF0ZS5zdGFydHNXaXRoKGAke2tleX0tYCkpIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0pO1xuICByZXR1cm4geyBkZXByZWNhdGVkIH07XG59XG5cbmZ1bmN0aW9uIHJldGlyZWRLZXlzKG1vZGVsczogcmVhZG9ubHkgc3RyaW5nW10pOiBSZWFkb25seVNldDxzdHJpbmc+IHtcbiAgcmV0dXJuIG5ldyBTZXQobW9kZWxzLm1hcChyZXRpcmVkTW9kZWxLZXkpLmZpbHRlcihCb29sZWFuKSk7XG59XG5cbmZ1bmN0aW9uIG1vZGVsSWRlbnRpdGllcyhtb2RlbDogc3RyaW5nIHwgU2VydmluZ0VuZHBvaW50U3VtbWFyeSk6IHN0cmluZ1tdIHtcbiAgaWYgKHR5cGVvZiBtb2RlbCA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIFttb2RlbF07XG4gIHJldHVybiBbXG4gICAgbW9kZWwubmFtZSxcbiAgICBtb2RlbC5kaXNwbGF5TmFtZSxcbiAgICBtb2RlbC5tb2RlbFNlcnZpY2VOYW1lLFxuICAgIC4uLk9iamVjdC52YWx1ZXMobW9kZWwuc2VydmljZU5hbWVzID8/IHt9KSxcbiAgXS5maWx0ZXIoKHZhbHVlKTogdmFsdWUgaXMgc3RyaW5nID0+IEJvb2xlYW4odmFsdWUpKTtcbn1cblxuZnVuY3Rpb24gcmV0aXJlZE1vZGVsS2V5KHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCB0b2tlbnMgPSB2YWx1ZS50b0xvd2VyQ2FzZSgpLm1hdGNoKC9bYS16MC05XSsvZykgPz8gW107XG4gIHdoaWxlICh0b2tlbnNbMF0gJiYgUkVUSVJFRF9NT0RFTF9QUkVGSVhFUy5oYXModG9rZW5zWzBdKSkgdG9rZW5zLnNoaWZ0KCk7XG4gIHJldHVybiB0b2tlbnMuam9pbihcIi1cIik7XG59XG4iXX0=
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV0aXJlbWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yZXRpcmVtZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8seUJBQXlCLE1BQU0saUNBQWlDLENBQUMsT0FBTyxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFHOUYsTUFBTSxRQUFRLEdBQUcseUJBQWtELENBQUM7QUFDcEUsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNyQyxJQUFJO0lBQ0osV0FBVztJQUNYLFlBQVk7SUFDWixLQUFLO0lBQ0wsUUFBUTtJQUNSLE1BQU07SUFDTixRQUFRO0lBQ1IsUUFBUTtDQUNULENBQUMsQ0FBQztBQUVILElBQUksS0FBSyxHQUFzQixNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUNuRSxJQUFJLElBQUksR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7QUFFOUIsZ0VBQWdFO0FBQ2hFLE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUM7QUFFeEQsNkVBQTZFO0FBQzdFLE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUM7QUFFaEUsMEVBQTBFO0FBQzFFLE1BQU0sVUFBVSx3QkFBd0IsQ0FBQyxNQUF5QjtJQUNoRSxLQUFLLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNuQyxJQUFJLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzVCLENBQUM7QUFFRCw2Q0FBNkM7QUFDN0MsTUFBTSxVQUFVLGlCQUFpQjtJQUMvQixPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRCxrRUFBa0U7QUFDbEUsTUFBTSxVQUFVLGNBQWMsQ0FDNUIsR0FBRyxNQUFvRDtJQUV2RCxNQUFNLFVBQVUsR0FBRyxNQUFNO1NBQ3RCLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzFDLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO1FBQ2pCLE1BQU0sU0FBUyxHQUFHLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM1QyxLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3ZCLElBQUksU0FBUyxLQUFLLEdBQUcsSUFBSSxTQUFTLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7Z0JBQUUsT0FBTyxJQUFJLENBQUM7UUFDeEUsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQyxDQUFDLENBQUM7SUFDTCxPQUFPLEVBQUUsVUFBVSxFQUFFLENBQUM7QUFDeEIsQ0FBQztBQUVELFNBQVMsV0FBVyxDQUFDLE1BQXlCO0lBQzVDLE9BQU8sSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUM5RCxDQUFDO0FBRUQsU0FBUyxlQUFlLENBQUMsS0FBc0M7SUFDN0QsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRO1FBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlDLE9BQU87UUFDTCxLQUFLLENBQUMsSUFBSTtRQUNWLEtBQUssQ0FBQyxXQUFXO1FBQ2pCLEtBQUssQ0FBQyxnQkFBZ0I7UUFDdEIsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxZQUFZLElBQUksRUFBRSxDQUFDO0tBQzNDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFtQixFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDdkQsQ0FBQztBQUVELFNBQVMsZUFBZSxDQUFDLEtBQWE7SUFDcEMsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDN0QsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksc0JBQXNCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUMxRSxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDMUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBMaWdodHdlaWdodCBtb2RlbCByZXRpcmVtZW50IHN0YXRlIHNoYXJlZCBieSBkaXNjb3ZlcnkgYW5kIG1ldGFkYXRhIGNhY2hlcy4gKi9cbmltcG9ydCB0eXBlIHsgTW9kZWxTdGF0dXMsIFNlcnZpbmdFbmRwb2ludFN1bW1hcnkgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtbW9kZWxcIjtcblxuaW1wb3J0IHJldGlyZWRNb2RlbHNTbmFwc2hvdEpzb24gZnJvbSBcIi4vZ2VuZXJhdGVkL3JldGlyZWQtbW9kZWxzLmpzb25cIiB3aXRoIHsgdHlwZTogXCJqc29uXCIgfTtcbmltcG9ydCB0eXBlIHsgUmV0aXJlZE1vZGVsc1NuYXBzaG90IH0gZnJvbSBcIi4vbWV0YWRhdGEtY29udHJhY3QudHNcIjtcblxuY29uc3Qgc25hcHNob3QgPSByZXRpcmVkTW9kZWxzU25hcHNob3RKc29uIGFzIFJldGlyZWRNb2RlbHNTbmFwc2hvdDtcbmNvbnN0IFJFVElSRURfTU9ERUxfUFJFRklYRVMgPSBuZXcgU2V0KFtcbiAgXCJhaVwiLFxuICBcImFudGhyb3BpY1wiLFxuICBcImRhdGFicmlja3NcIixcbiAgXCJkYnhcIixcbiAgXCJnb29nbGVcIixcbiAgXCJtZXRhXCIsXG4gIFwib3BlbmFpXCIsXG4gIFwic3lzdGVtXCIsXG5dKTtcblxubGV0IG5hbWVzOiByZWFkb25seSBzdHJpbmdbXSA9IE9iamVjdC5mcmVlemUoWy4uLnNuYXBzaG90Lm1vZGVsc10pO1xubGV0IGtleXMgPSByZXRpcmVkS2V5cyhuYW1lcyk7XG5cbi8qKiBSZXRpcmVkIG1vZGVsIG5hbWVzIGZyb20gdGhlIGNvbW1pdHRlZCBtZXRhZGF0YSBzbmFwc2hvdC4gKi9cbmV4cG9ydCBjb25zdCBDT01NSVRURURfUkVUSVJFRF9NT0RFTFMgPSBzbmFwc2hvdC5tb2RlbHM7XG5cbi8qKiBHZW5lcmF0aW9uIHRpbWVzdGFtcCByZWNvcmRlZCBpbiB0aGUgY29tbWl0dGVkIHJldGlyZWQtbW9kZWwgc25hcHNob3QuICovXG5leHBvcnQgY29uc3QgUkVUSVJFRF9NT0RFTFNfR0VORVJBVEVEX0FUID0gc25hcHNob3QuZ2VuZXJhdGVkQXQ7XG5cbi8qKiBSZXBsYWNlIHJldGlyZW1lbnQgc3RhdGUgYWZ0ZXIgbWV0YWRhdGEgY2FjaGUgaHlkcmF0aW9uIG9yIHJlZnJlc2guICovXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZVJldGlyZWRNb2RlbE5hbWVzKG1vZGVsczogcmVhZG9ubHkgc3RyaW5nW10pOiB2b2lkIHtcbiAgbmFtZXMgPSBPYmplY3QuZnJlZXplKFsuLi5tb2RlbHNdKTtcbiAga2V5cyA9IHJldGlyZWRLZXlzKG5hbWVzKTtcbn1cblxuLyoqIFJldHVybiB0aGUgYWN0aXZlIHJldGlyZWQtbW9kZWwgbmFtZXMuICovXG5leHBvcnQgZnVuY3Rpb24gcmV0aXJlZE1vZGVsTmFtZXMoKTogcmVhZG9ubHkgc3RyaW5nW10ge1xuICByZXR1cm4gbmFtZXM7XG59XG5cbi8qKiBSZXNvbHZlIHdoZXRoZXIgYW55IHN1cHBsaWVkIGlkZW50aXR5IGlzIGxpc3RlZCBhcyByZXRpcmVkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vZGVsU3RhdHVzRm9yKFxuICAuLi5tb2RlbHM6IHJlYWRvbmx5IChzdHJpbmcgfCBTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5KVtdXG4pOiBNb2RlbFN0YXR1cyB7XG4gIGNvbnN0IGRlcHJlY2F0ZWQgPSBtb2RlbHNcbiAgICAuZmxhdE1hcCgobW9kZWwpID0+IG1vZGVsSWRlbnRpdGllcyhtb2RlbCkpXG4gICAgLnNvbWUoKGlkZW50aXR5KSA9PiB7XG4gICAgICBjb25zdCBjYW5kaWRhdGUgPSByZXRpcmVkTW9kZWxLZXkoaWRlbnRpdHkpO1xuICAgICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgICBpZiAoY2FuZGlkYXRlID09PSBrZXkgfHwgY2FuZGlkYXRlLnN0YXJ0c1dpdGgoYCR7a2V5fS1gKSkgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSk7XG4gIHJldHVybiB7IGRlcHJlY2F0ZWQgfTtcbn1cblxuZnVuY3Rpb24gcmV0aXJlZEtleXMobW9kZWxzOiByZWFkb25seSBzdHJpbmdbXSk6IFJlYWRvbmx5U2V0PHN0cmluZz4ge1xuICByZXR1cm4gbmV3IFNldChtb2RlbHMubWFwKHJldGlyZWRNb2RlbEtleSkuZmlsdGVyKEJvb2xlYW4pKTtcbn1cblxuZnVuY3Rpb24gbW9kZWxJZGVudGl0aWVzKG1vZGVsOiBzdHJpbmcgfCBTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5KTogc3RyaW5nW10ge1xuICBpZiAodHlwZW9mIG1vZGVsID09PSBcInN0cmluZ1wiKSByZXR1cm4gW21vZGVsXTtcbiAgcmV0dXJuIFtcbiAgICBtb2RlbC5uYW1lLFxuICAgIG1vZGVsLmRpc3BsYXlOYW1lLFxuICAgIG1vZGVsLm1vZGVsU2VydmljZU5hbWUsXG4gICAgLi4uT2JqZWN0LnZhbHVlcyhtb2RlbC5zZXJ2aWNlTmFtZXMgPz8ge30pLFxuICBdLmZpbHRlcigodmFsdWUpOiB2YWx1ZSBpcyBzdHJpbmcgPT4gQm9vbGVhbih2YWx1ZSkpO1xufVxuXG5mdW5jdGlvbiByZXRpcmVkTW9kZWxLZXkodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHRva2VucyA9IHZhbHVlLnRvTG93ZXJDYXNlKCkubWF0Y2goL1thLXowLTldKy9nKSA/PyBbXTtcbiAgd2hpbGUgKHRva2Vuc1swXSAmJiBSRVRJUkVEX01PREVMX1BSRUZJWEVTLmhhcyh0b2tlbnNbMF0pKSB0b2tlbnMuc2hpZnQoKTtcbiAgcmV0dXJuIHRva2Vucy5qb2luKFwiLVwiKTtcbn1cbiJdfQ==
package/package.json CHANGED
@@ -25,12 +25,12 @@
25
25
  },
26
26
  "dependencies": {
27
27
  "@databricks/appkit": "0.81.0",
28
- "@dbx-tools/appkit": "^0.9.181",
29
- "@dbx-tools/auth": "^0.9.181",
30
- "@dbx-tools/cache": "^0.9.181",
31
- "@dbx-tools/shared-auth": "^0.9.181",
32
- "@dbx-tools/shared-core": "^0.9.181",
33
- "@dbx-tools/shared-model": "^0.9.181",
28
+ "@dbx-tools/appkit": "^0.9.184",
29
+ "@dbx-tools/auth": "^0.9.184",
30
+ "@dbx-tools/cache": "^0.9.184",
31
+ "@dbx-tools/shared-auth": "^0.9.184",
32
+ "@dbx-tools/shared-core": "^0.9.184",
33
+ "@dbx-tools/shared-model": "^0.9.184",
34
34
  "cheerio": "^1.2.0",
35
35
  "fuse.js": "^7.4.2",
36
36
  "zod": "4.3.6"
@@ -49,7 +49,7 @@
49
49
  "./package.json": "./package.json"
50
50
  }
51
51
  },
52
- "version": "0.9.181",
52
+ "version": "0.9.184",
53
53
  "types": "./lib/index.d.ts",
54
54
  "dbxToolsConfig": {
55
55
  "tags": [
@@ -177,10 +177,7 @@ export function parseModelCapabilities(
177
177
  }
178
178
 
179
179
  /** Normalize portable model capabilities and effort ladders from models.dev JSON. */
180
- export function parseModelsDev(
181
- input: unknown,
182
- generatedAt: number,
183
- ): ModelsDevSnapshot {
180
+ export function parseModelsDev(input: unknown, generatedAt: number): ModelsDevSnapshot {
184
181
  const providers = ModelsDevApiSchema.parse(input);
185
182
  const imageInput = new Set<string>();
186
183
  const reasoning = new Set<string>();
@@ -222,10 +219,7 @@ export function parseModelsDev(
222
219
  }
223
220
 
224
221
  /** Normalize reasoning support and effort ladders from modelparams.dev JSON. */
225
- export function parseModelParams(
226
- input: unknown,
227
- generatedAt: number,
228
- ): ModelParamsSnapshot {
222
+ export function parseModelParams(input: unknown, generatedAt: number): ModelParamsSnapshot {
229
223
  const response = ModelParamsApiSchema.parse(input);
230
224
  const reasoning = new Set<string>();
231
225
  const models: Record<string, ReasoningLevel[]> = {};
@@ -237,8 +231,7 @@ export function parseModelParams(
237
231
  const levels = sortReasoningLevels(
238
232
  reasoningParameters
239
233
  .filter(
240
- (parameter) =>
241
- parameter.type === "enum" && EFFORT_PARAMETER_PATHS.has(parameter.path),
234
+ (parameter) => parameter.type === "enum" && EFFORT_PARAMETER_PATHS.has(parameter.path),
242
235
  )
243
236
  .flatMap((parameter) => parameter.values ?? [])
244
237
  .flatMap((value) => parseReasoning(value) ?? []),
package/src/metadata.ts CHANGED
@@ -28,10 +28,10 @@ import {
28
28
  parseRetiredModels,
29
29
  } from "./_metadata-generator.ts";
30
30
  import capabilitiesSnapshotJson from "./generated/model-capabilities.json" with { type: "json" };
31
- import modelParamsSnapshotJson from "./generated/modelparams-reasoning.json" with { type: "json" };
32
- import modelsDevSnapshotJson from "./generated/models-dev-capabilities.json" with { type: "json" };
33
31
  import rateLimitsSnapshotJson from "./generated/model-rate-limits.json" with { type: "json" };
34
32
  import reasoningSnapshotJson from "./generated/model-reasoning.json" with { type: "json" };
33
+ import modelParamsSnapshotJson from "./generated/modelparams-reasoning.json" with { type: "json" };
34
+ import modelsDevSnapshotJson from "./generated/models-dev-capabilities.json" with { type: "json" };
35
35
  import {
36
36
  createMetadataCache,
37
37
  mergePreferFreshList,
@@ -230,16 +230,10 @@ function buildIndex(input: {
230
230
  return {
231
231
  capabilities: {
232
232
  responses: new Set(input.capabilities.responses),
233
- imageInput: new Set([
234
- ...input.capabilities.imageInput,
235
- ...input.modelsDev.imageInput,
236
- ]),
233
+ imageInput: new Set([...input.capabilities.imageInput, ...input.modelsDev.imageInput]),
237
234
  applyPatch: new Set(input.capabilities.applyPatch),
238
235
  webSearch: new Set(input.capabilities.webSearch),
239
- reasoning: new Set([
240
- ...input.modelsDev.reasoning,
241
- ...input.modelParams.reasoning,
242
- ]),
236
+ reasoning: new Set([...input.modelsDev.reasoning, ...input.modelParams.reasoning]),
243
237
  tools: new Set(input.modelsDev.tools),
244
238
  structuredOutput: new Set(input.modelsDev.structuredOutput),
245
239
  temperature: new Set(input.modelsDev.temperatureSupported),
@@ -438,8 +432,7 @@ export function modelCapabilitiesFor(model: string | ServingEndpointSummary): Mo
438
432
  reasoning:
439
433
  keys.some((key) => capabilities.reasoning.has(key)) ||
440
434
  identities.some((identity) => modelReasoningEfforts(identity).length > 0),
441
- tools:
442
- keys.some((key) => capabilities.tools.has(key)) || identities.some(modelSupportsTools),
435
+ tools: keys.some((key) => capabilities.tools.has(key)) || identities.some(modelSupportsTools),
443
436
  structuredOutput: keys.some((key) => capabilities.structuredOutput.has(key)),
444
437
  temperature: modelTemperatureSupportFor(model) === true,
445
438
  };
package/src/retirement.ts CHANGED
@@ -19,7 +19,10 @@ const RETIRED_MODEL_PREFIXES = new Set([
19
19
  let names: readonly string[] = Object.freeze([...snapshot.models]);
20
20
  let keys = retiredKeys(names);
21
21
 
22
+ /** Retired model names from the committed metadata snapshot. */
22
23
  export const COMMITTED_RETIRED_MODELS = snapshot.models;
24
+
25
+ /** Generation timestamp recorded in the committed retired-model snapshot. */
23
26
  export const RETIRED_MODELS_GENERATED_AT = snapshot.generatedAt;
24
27
 
25
28
  /** Replace retirement state after metadata cache hydration or refresh. */