angular-odata 0.99.2 → 0.99.5
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/esm2020/lib/cache/cache.mjs +2 -2
- package/esm2020/lib/client.mjs +3 -3
- package/esm2020/lib/models/collection.mjs +33 -44
- package/esm2020/lib/models/model.mjs +33 -37
- package/esm2020/lib/models/options.mjs +11 -1
- package/esm2020/lib/module.mjs +4 -4
- package/esm2020/lib/resources/query/builder.mjs +2 -1
- package/esm2020/lib/resources/query/expressions/base.mjs +1 -1
- package/esm2020/lib/resources/query/expressions/compute.mjs +13 -6
- package/esm2020/lib/resources/query/expressions/expand.mjs +77 -13
- package/esm2020/lib/resources/query/expressions/filter.mjs +11 -5
- package/esm2020/lib/resources/query/expressions/orderby.mjs +11 -3
- package/esm2020/lib/resources/query/expressions/search.mjs +15 -3
- package/esm2020/lib/resources/query/expressions/select.mjs +10 -5
- package/esm2020/lib/resources/query/expressions/syntax.mjs +42 -9
- package/esm2020/lib/resources/query/handlers.mjs +13 -13
- package/esm2020/lib/resources/query/options.mjs +33 -36
- package/esm2020/lib/resources/types/entity.mjs +3 -3
- package/esm2020/lib/schema/enum-type.mjs +9 -1
- package/esm2020/lib/services/entity-set.mjs +6 -6
- package/esm2020/lib/services/factory.mjs +3 -3
- package/esm2020/lib/types.mjs +2 -1
- package/esm2020/lib/utils/objects.mjs +5 -1
- package/fesm2015/angular-odata.mjs +337 -199
- package/fesm2015/angular-odata.mjs.map +1 -1
- package/fesm2020/angular-odata.mjs +337 -203
- package/fesm2020/angular-odata.mjs.map +1 -1
- package/lib/models/collection.d.ts +4 -2
- package/lib/models/options.d.ts +9 -7
- package/lib/resources/query/builder.d.ts +1 -0
- package/lib/resources/query/expressions/base.d.ts +1 -0
- package/lib/resources/query/expressions/compute.d.ts +3 -2
- package/lib/resources/query/expressions/expand.d.ts +40 -12
- package/lib/resources/query/expressions/filter.d.ts +22 -21
- package/lib/resources/query/expressions/orderby.d.ts +4 -2
- package/lib/resources/query/expressions/search.d.ts +5 -2
- package/lib/resources/query/expressions/select.d.ts +3 -2
- package/lib/resources/query/expressions/syntax.d.ts +12 -2
- package/lib/resources/query/handlers.d.ts +12 -12
- package/lib/resources/query/options.d.ts +10 -8
- package/lib/schema/enum-type.d.ts +6 -0
- package/lib/types.d.ts +1 -0
- package/package.json +1 -1
|
@@ -480,6 +480,7 @@ function buildExpand(expands, { aliases, escape = false }) {
|
|
|
480
480
|
case 'levels':
|
|
481
481
|
case 'count':
|
|
482
482
|
case 'top':
|
|
483
|
+
case 'skip':
|
|
483
484
|
value = `${expands[key]}`;
|
|
484
485
|
break;
|
|
485
486
|
default:
|
|
@@ -587,4 +588,4 @@ function buildUrl(path, params) {
|
|
|
587
588
|
function parseNot(builtFilters) {
|
|
588
589
|
return `not(${builtFilters.join(' and ')})`;
|
|
589
590
|
}
|
|
590
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItb2RhdGEvc3JjL2xpYi9yZXNvdXJjZXMvcXVlcnkvYnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLG9CQUFvQixHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNsRSxNQUFNLGlCQUFpQixHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMvQyxNQUFNLG9CQUFvQixHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzVDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxZQUFZLEVBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ2pFLE1BQU0sMkJBQTJCLEdBQUc7SUFDbEMsUUFBUTtJQUNSLFFBQVE7SUFDUixRQUFRO0lBQ1IsS0FBSztJQUNMLE9BQU87SUFDUCxTQUFTO0lBQ1QsUUFBUTtDQUNULENBQUM7QUFFRixNQUFNLGNBQWMsR0FBRyxVQUFVLENBQUM7QUFDbEMsTUFBTSxhQUFhLEdBQUcsc0JBQXNCLENBQUM7QUFRN0MsTUFBTSxDQUFOLElBQVksd0JBTVg7QUFORCxXQUFZLHdCQUF3QjtJQUNsQyx1Q0FBVyxDQUFBO0lBQ1gsdUNBQVcsQ0FBQTtJQUNYLHVDQUFXLENBQUE7SUFDWCwrQ0FBbUIsQ0FBQTtJQUNuQiwyREFBK0IsQ0FBQTtBQUNqQyxDQUFDLEVBTlcsd0JBQXdCLEtBQXhCLHdCQUF3QixRQU1uQztBQTRDRCxNQUFNLENBQU4sSUFBWSxnQkFLWDtBQUxELFdBQVksZ0JBQWdCO0lBQzFCLHFEQUFHLENBQUE7SUFDSCx5REFBSyxDQUFBO0lBQ0wsK0RBQVEsQ0FBQTtJQUNSLDJEQUFNLENBQUE7QUFDUixDQUFDLEVBTFcsZ0JBQWdC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UUFBUSxDQUFDLFlBQXNCO0lBQ3RDLE9BQU8sT0FBTyxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUM7QUFDOUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IENPTVBBUklTT05fT1BFUkFUT1JTID0gWydlcScsICduZScsICdndCcsICdnZScsICdsdCcsICdsZSddO1xuY29uc3QgTE9HSUNBTF9PUEVSQVRPUlMgPSBbJ2FuZCcsICdvcicsICdub3QnXTtcbmNvbnN0IENPTExFQ1RJT05fT1BFUkFUT1JTID0gWydhbnknLCAnYWxsJ107XG5jb25zdCBCT09MRUFOX0ZVTkNUSU9OUyA9IFsnc3RhcnRzd2l0aCcsICdlbmRzd2l0aCcsICdjb250YWlucyddO1xuY29uc3QgU1VQUE9SVEVEX0VYUEFORF9QUk9QRVJUSUVTID0gW1xuICAnZXhwYW5kJyxcbiAgJ2xldmVscycsXG4gICdzZWxlY3QnLFxuICAndG9wJyxcbiAgJ2NvdW50JyxcbiAgJ29yZGVyYnknLFxuICAnZmlsdGVyJyxcbl07XG5cbmNvbnN0IEZVTkNUSU9OX1JFR0VYID0gL1xcKCguKilcXCkvO1xuY29uc3QgSU5ERVhPRl9SRUdFWCA9IC8oPyFpbmRleG9mKVxcKChcXHcrKVxcKS87XG5cbmV4cG9ydCB0eXBlIFVucGFja2VkPFQ+ID0gVCBleHRlbmRzIChpbmZlciBVKVtdID8gVSA6IFQ7XG5leHBvcnQgdHlwZSBTZWxlY3Q8VD4gPSBTZWxlY3RUeXBlPFQ+IHwgU2VsZWN0VHlwZTxUPltdO1xuZXhwb3J0IHR5cGUgU2VsZWN0VHlwZTxUPiA9IHN0cmluZyB8IGtleW9mIFQ7XG5leHBvcnQgdHlwZSBGaWx0ZXI8VD4gPSBGaWx0ZXJUeXBlIHwgRmlsdGVyVHlwZVtdO1xuZXhwb3J0IHR5cGUgRmlsdGVyVHlwZSA9IHN0cmluZyB8IHsgW25hbWU6IHN0cmluZ106IGFueSB9O1xuXG5leHBvcnQgZW51bSBTdGFuZGFyZEFnZ3JlZ2F0ZU1ldGhvZHMge1xuICBzdW0gPSAnc3VtJyxcbiAgbWluID0gJ21pbicsXG4gIG1heCA9ICdtYXgnLFxuICBhdmVyYWdlID0gJ2F2ZXJhZ2UnLFxuICBjb3VudGRpc3RpbmN0ID0gJ2NvdW50ZGlzdGluY3QnLFxufVxuZXhwb3J0IHR5cGUgQWdncmVnYXRlID1cbiAgfCBzdHJpbmdcbiAgfCB7IFtwcm9wZXJ0eU5hbWU6IHN0cmluZ106IHsgd2l0aDogU3RhbmRhcmRBZ2dyZWdhdGVNZXRob2RzOyBhczogc3RyaW5nIH0gfTtcblxuLy8gT3JkZXJCeVxuXG5leHBvcnQgdHlwZSBPcmRlckJ5PFQ+ID0gT3JkZXJCeVR5cGU8VD4gfCBPcmRlckJ5VHlwZTxUPltdO1xuZXhwb3J0IHR5cGUgT3JkZXJCeVR5cGU8VD4gPSBzdHJpbmcgfCBPcmRlckJ5T2JqZWN0PFQ+O1xuZXhwb3J0IHR5cGUgT3JkZXJCeU9iamVjdDxUPiA9IGtleW9mIFQgfCBba2V5b2YgVCB8IHN0cmluZywgJ2FzYycgfCAnZGVzYyddO1xuLy9UT0RPOiBzdXBwb3J0IGFuZ3VsYXIgMTIgcmVjdXJzaXZlIHR5cGU6XG4vKlxuZXhwb3J0IHR5cGUgT3JkZXJCeU9wdGlvbnM8VD4gPSBrZXlvZiBUIHwgWyBrZXlvZiBUIHwgc3RyaW5nLCAnYXNjJyB8ICdkZXNjJyBdO1xuZXhwb3J0IHR5cGUgTmVzdGVkT3JkZXJCeTxUPiA9IHsgW1AgaW4ga2V5b2YgVF0/OiBUW1BdIGV4dGVuZHMgQXJyYXk8aW5mZXIgRT4gPyBPcmRlckJ5PEU+IDogT3JkZXJCeTxUW1BdPiB9XG5leHBvcnQgdHlwZSBPcmRlckJ5PFQ+ID0gc3RyaW5nIHwgT3JkZXJCeU9wdGlvbnM8VD4gfCBBcnJheTxPcmRlckJ5T3B0aW9uczxUPj4gfCBOZXN0ZWRPcmRlckJ5PFQ+O1xuKi9cblxuLy8gRXhwYW5kXG5leHBvcnQgdHlwZSBFeHBhbmQ8VD4gPSBFeHBhbmRUeXBlPFQ+IHwgRXhwYW5kVHlwZTxUPltdO1xuZXhwb3J0IHR5cGUgRXhwYW5kVHlwZTxUPiA9IHN0cmluZyB8IEV4cGFuZE9iamVjdDxUPjtcbmV4cG9ydCB0eXBlIEV4cGFuZE9iamVjdDxUPiA9IGtleW9mIFQgfCBOZXN0ZWRFeHBhbmRPcHRpb25zPFQ+O1xuZXhwb3J0IHR5cGUgTmVzdGVkRXhwYW5kT3B0aW9uczxUPiA9IHtcbiAgW1AgaW4ga2V5b2YgVF0/OiBFeHBhbmRPcHRpb25zPFVucGFja2VkPFRbUF0+Pjtcbn07XG5leHBvcnQgdHlwZSBFeHBhbmRPcHRpb25zPFQ+ID0ge1xuICBzZWxlY3Q/OiBTZWxlY3Q8VD47XG4gIGZpbHRlcj86IEZpbHRlcjxUPjtcbiAgb3JkZXJCeT86IE9yZGVyQnk8VD47XG4gIHRvcD86IG51bWJlcjtcbiAgbGV2ZWxzPzogbnVtYmVyIHwgJ21heCc7XG4gIGNvdW50PzogYm9vbGVhbiB8IEZpbHRlcjxUPjtcbiAgZXhwYW5kPzogRXhwYW5kPFQ+O1xufTtcblxuZXhwb3J0IHR5cGUgVHJhbnNmb3JtPFQ+ID0ge1xuICBhZ2dyZWdhdGU/OiBBZ2dyZWdhdGUgfCBBcnJheTxBZ2dyZWdhdGU+O1xuICBmaWx0ZXI/OiBGaWx0ZXI8VD47XG4gIGdyb3VwQnk/OiBHcm91cEJ5PFQ+O1xufTtcbmV4cG9ydCB0eXBlIEdyb3VwQnk8VD4gPSB7XG4gIHByb3BlcnRpZXM6IEFycmF5PGtleW9mIFQ+O1xuICB0cmFuc2Zvcm0/OiBUcmFuc2Zvcm08VD47XG59O1xuXG5leHBvcnQgZW51bSBRdWVyeUN1c3RvbVR5cGVzIHtcbiAgUmF3LFxuICBBbGlhcyxcbiAgRHVyYXRpb24sXG4gIEJpbmFyeSxcbn1cblxuZXhwb3J0IHR5cGUgUXVlcnlDdXN0b21UeXBlID0ge1xuICB0eXBlOiBRdWVyeUN1c3RvbVR5cGVzO1xuICB2YWx1ZTogYW55O1xuICBuYW1lPzogc3RyaW5nO1xufTtcbmV4cG9ydCB0eXBlIFZhbHVlID0gc3RyaW5nIHwgRGF0ZSB8IG51bWJlciB8IGJvb2xlYW4gfCBRdWVyeUN1c3RvbVR5cGU7XG5cbi8vaHR0cHM6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL29kYXRhL29kYXRhL3Y0LjAxL29kYXRhLXY0LjAxLXBhcnQyLXVybC1jb252ZW50aW9ucy5odG1sI3NlY19RdWVyeU9wdGlvbnNcbmV4cG9ydCBjb25zdCByYXcgPSAodmFsdWU6IHN0cmluZyk6IFF1ZXJ5Q3VzdG9tVHlwZSA9PiAoe1xuICB0eXBlOiBRdWVyeUN1c3RvbVR5cGVzLlJhdyxcbiAgdmFsdWUsXG59KTtcbmV4cG9ydCBjb25zdCBhbGlhcyA9ICh2YWx1ZTogYW55LCBuYW1lPzogc3RyaW5nKTogUXVlcnlDdXN0b21UeXBlID0+ICh7XG4gIHR5cGU6IFF1ZXJ5Q3VzdG9tVHlwZXMuQWxpYXMsXG4gIHZhbHVlLFxuICBuYW1lLFxufSk7XG5leHBvcnQgY29uc3QgZHVyYXRpb24gPSAodmFsdWU6IHN0cmluZyk6IFF1ZXJ5Q3VzdG9tVHlwZSA9PiAoe1xuICB0eXBlOiBRdWVyeUN1c3RvbVR5cGVzLkR1cmF0aW9uLFxuICB2YWx1ZSxcbn0pO1xuZXhwb3J0IGNvbnN0IGJpbmFyeSA9ICh2YWx1ZTogc3RyaW5nKTogUXVlcnlDdXN0b21UeXBlID0+ICh7XG4gIHR5cGU6IFF1ZXJ5Q3VzdG9tVHlwZXMuQmluYXJ5LFxuICB2YWx1ZSxcbn0pO1xuZXhwb3J0IGNvbnN0IGlzUXVlcnlDdXN0b21UeXBlID0gKHZhbHVlOiBhbnkpID0+XG4gIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiZcbiAgJ3R5cGUnIGluIHZhbHVlICYmXG4gIHZhbHVlLnR5cGUgaW4gUXVlcnlDdXN0b21UeXBlcztcbmV4cG9ydCB0eXBlIFF1ZXJ5T3B0aW9uczxUPiA9IEV4cGFuZE9wdGlvbnM8VD4gJiB7XG4gIHNlYXJjaDogc3RyaW5nO1xuICB0cmFuc2Zvcm06IHsgW25hbWU6IHN0cmluZ106IGFueSB9IHwgeyBbbmFtZTogc3RyaW5nXTogYW55IH1bXTtcbiAgc2tpcDogbnVtYmVyO1xuICBza2lwdG9rZW46IHN0cmluZztcbiAga2V5OiBzdHJpbmcgfCBudW1iZXIgfCB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfTtcbiAgY291bnQ6IGJvb2xlYW4gfCBGaWx0ZXI8VD47XG4gIGFjdGlvbjogc3RyaW5nO1xuICBmdW5jOiBzdHJpbmcgfCB7IFtmdW5jdGlvbk5hbWU6IHN0cmluZ106IHsgW3BhcmFtZXRlck5hbWU6IHN0cmluZ106IGFueSB9IH07XG4gIGZvcm1hdDogc3RyaW5nO1xuICBhbGlhc2VzOiBRdWVyeUN1c3RvbVR5cGVbXTtcbiAgZXNjYXBlOiBib29sZWFuO1xufTtcblxuZXhwb3J0IGNvbnN0IElURU1fUk9PVCA9ICcnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiA8VD4oe1xuICBzZWxlY3QsXG4gIHNlYXJjaCxcbiAgc2tpcHRva2VuLFxuICBmb3JtYXQsXG4gIHRvcCxcbiAgc2tpcCxcbiAgZmlsdGVyLFxuICB0cmFuc2Zvcm0sXG4gIG9yZGVyQnksXG4gIGtleSxcbiAgY291bnQsXG4gIGV4cGFuZCxcbiAgYWN0aW9uLFxuICBmdW5jLFxuICBhbGlhc2VzLFxuICBlc2NhcGUsXG59OiBQYXJ0aWFsPFF1ZXJ5T3B0aW9uczxUPj4gPSB7fSkge1xuICBjb25zdCBbcGF0aCwgcGFyYW1zXSA9IGJ1aWxkUGF0aEFuZFF1ZXJ5KHtcbiAgICBzZWxlY3QsXG4gICAgc2VhcmNoLFxuICAgIHNraXB0b2tlbixcbiAgICBmb3JtYXQsXG4gICAgdG9wLFxuICAgIHNraXAsXG4gICAgZmlsdGVyLFxuICAgIHRyYW5zZm9ybSxcbiAgICBvcmRlckJ5LFxuICAgIGtleSxcbiAgICBjb3VudCxcbiAgICBleHBhbmQsXG4gICAgYWN0aW9uLFxuICAgIGZ1bmMsXG4gICAgYWxpYXNlcyxcbiAgICBlc2NhcGUsXG4gIH0pO1xuXG4gIHJldHVybiBidWlsZFVybChwYXRoLCBwYXJhbXMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRQYXRoQW5kUXVlcnk8VD4oe1xuICBzZWxlY3QsXG4gIHNlYXJjaCxcbiAgc2tpcHRva2VuLFxuICBmb3JtYXQsXG4gIHRvcCxcbiAgc2tpcCxcbiAgZmlsdGVyLFxuICB0cmFuc2Zvcm0sXG4gIG9yZGVyQnksXG4gIGtleSxcbiAgY291bnQsXG4gIGV4cGFuZCxcbiAgYWN0aW9uLFxuICBmdW5jLFxuICBhbGlhc2VzLFxuICBlc2NhcGUsXG59OiBQYXJ0aWFsPFF1ZXJ5T3B0aW9uczxUPj4gPSB7fSk6IFtzdHJpbmcsIHsgW25hbWU6IHN0cmluZ106IGFueSB9XSB7XG4gIGxldCBwYXRoOiBzdHJpbmcgPSAnJztcbiAgYWxpYXNlcyA9IGFsaWFzZXMgfHwgW107XG5cbiAgY29uc3QgcXVlcnk6IGFueSA9IHt9O1xuXG4gIC8vIGtleSBpcyBub3QgKG51bGwsIHVuZGVmaW5lZClcbiAgaWYgKGtleSAhPSB1bmRlZmluZWQpIHtcbiAgICBwYXRoICs9IGAoJHtub3JtYWxpemVWYWx1ZShrZXkgYXMgVmFsdWUsIHsgYWxpYXNlcywgZXNjYXBlIH0pfSlgO1xuICB9XG5cbiAgaWYgKHNlbGVjdCkge1xuICAgIHF1ZXJ5LiRzZWxlY3QgPSBBcnJheS5pc0FycmF5KHNlbGVjdCkgPyBzZWxlY3Quam9pbignLCcpIDogc2VsZWN0O1xuICB9XG5cbiAgaWYgKHNlYXJjaCkge1xuICAgIHF1ZXJ5LiRzZWFyY2ggPSBzZWFyY2g7XG4gIH1cblxuICBpZiAoc2tpcHRva2VuKSB7XG4gICAgcXVlcnkuJHNraXB0b2tlbiA9IHNraXB0b2tlbjtcbiAgfVxuXG4gIGlmIChmb3JtYXQpIHtcbiAgICBxdWVyeS4kZm9ybWF0ID0gZm9ybWF0O1xuICB9XG5cbiAgaWYgKGZpbHRlciB8fCB0eXBlb2YgY291bnQgPT09ICdvYmplY3QnKSB7XG4gICAgcXVlcnkuJGZpbHRlciA9IGJ1aWxkRmlsdGVyKHR5cGVvZiBjb3VudCA9PT0gJ29iamVjdCcgPyBjb3VudCA6IGZpbHRlciwge1xuICAgICAgYWxpYXNlcyxcbiAgICAgIGVzY2FwZSxcbiAgICB9KTtcbiAgfVxuXG4gIGlmICh0cmFuc2Zvcm0pIHtcbiAgICBxdWVyeS4kYXBwbHkgPSBidWlsZFRyYW5zZm9ybXModHJhbnNmb3JtLCB7IGFsaWFzZXMsIGVzY2FwZSB9KTtcbiAgfVxuXG4gIGlmIChleHBhbmQpIHtcbiAgICBxdWVyeS4kZXhwYW5kID0gYnVpbGRFeHBhbmQoZXhwYW5kLCB7IGFsaWFzZXMsIGVzY2FwZSB9KTtcbiAgfVxuXG4gIGlmIChvcmRlckJ5KSB7XG4gICAgcXVlcnkuJG9yZGVyYnkgPSBidWlsZE9yZGVyQnkob3JkZXJCeSk7XG4gIH1cblxuICBpZiAoY291bnQpIHtcbiAgICBpZiAodHlwZW9mIGNvdW50ID09PSAnYm9vbGVhbicpIHtcbiAgICAgIHF1ZXJ5LiRjb3VudCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhdGggKz0gJy8kY291bnQnO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlb2YgdG9wID09PSAnbnVtYmVyJykge1xuICAgIHF1ZXJ5LiR0b3AgPSB0b3A7XG4gIH1cblxuICBpZiAodHlwZW9mIHNraXAgPT09ICdudW1iZXInKSB7XG4gICAgcXVlcnkuJHNraXAgPSBza2lwO1xuICB9XG5cbiAgaWYgKGFjdGlvbikge1xuICAgIHBhdGggKz0gYC8ke2FjdGlvbn1gO1xuICB9XG5cbiAgaWYgKGZ1bmMpIHtcbiAgICBpZiAodHlwZW9mIGZ1bmMgPT09ICdzdHJpbmcnKSB7XG4gICAgICBwYXRoICs9IGAvJHtmdW5jfWA7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZnVuYyA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGNvbnN0IFtmdW5jTmFtZV0gPSBPYmplY3Qua2V5cyhmdW5jKTtcbiAgICAgIGNvbnN0IGZ1bmNBcmdzID0gbm9ybWFsaXplVmFsdWUoZnVuY1tmdW5jTmFtZV0gYXMgVmFsdWUsIHtcbiAgICAgICAgYWxpYXNlcyxcbiAgICAgICAgZXNjYXBlLFxuICAgICAgfSk7XG5cbiAgICAgIHBhdGggKz0gYC8ke2Z1bmNOYW1lfWA7XG4gICAgICBpZiAoZnVuY0FyZ3MgIT09ICcnKSB7XG4gICAgICAgIHBhdGggKz0gYCgke2Z1bmNBcmdzfSlgO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChhbGlhc2VzLmxlbmd0aCA+IDApIHtcbiAgICBPYmplY3QuYXNzaWduKFxuICAgICAgcXVlcnksXG4gICAgICBhbGlhc2VzLnJlZHVjZShcbiAgICAgICAgKGFjYywgYWxpYXMpID0+XG4gICAgICAgICAgT2JqZWN0LmFzc2lnbihhY2MsIHtcbiAgICAgICAgICAgIFtgQCR7YWxpYXMubmFtZX1gXTogbm9ybWFsaXplVmFsdWUoYWxpYXMudmFsdWUsIHtcbiAgICAgICAgICAgICAgZXNjYXBlLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgfSksXG4gICAgICAgIHt9XG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIC8vIEZpbHRlciBlbXB0eSB2YWx1ZXNcbiAgY29uc3QgcGFyYW1zID0gT2JqZWN0LmVudHJpZXMocXVlcnkpXG4gICAgLmZpbHRlcigoWywgdmFsdWVdKSA9PiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSAnJylcbiAgICAucmVkdWNlKChhY2MsIFtrZXksIHZhbHVlXSkgPT4gT2JqZWN0LmFzc2lnbihhY2MsIHsgW2tleV06IHZhbHVlIH0pLCB7fSk7XG5cbiAgcmV0dXJuIFtwYXRoLCBwYXJhbXNdO1xufVxuXG5mdW5jdGlvbiByZW5kZXJQcmltaXRpdmVWYWx1ZShcbiAga2V5OiBzdHJpbmcsXG4gIHZhbDogYW55LFxuICB7XG4gICAgYWxpYXNlcyxcbiAgICBlc2NhcGUsXG4gIH06IHtcbiAgICBhbGlhc2VzPzogUXVlcnlDdXN0b21UeXBlW107XG4gICAgZXNjYXBlPzogYm9vbGVhbjtcbiAgfVxuKSB7XG4gIHJldHVybiBgJHtrZXl9IGVxICR7bm9ybWFsaXplVmFsdWUodmFsLCB7IGFsaWFzZXMsIGVzY2FwZSB9KX1gO1xufVxuXG5mdW5jdGlvbiBidWlsZEZpbHRlcihcbiAgZmlsdGVyczogRmlsdGVyPGFueT4gPSB7fSxcbiAge1xuICAgIGFsaWFzZXMsXG4gICAgcHJvcFByZWZpeCxcbiAgICBlc2NhcGUsXG4gIH06IHsgYWxpYXNlcz86IFF1ZXJ5Q3VzdG9tVHlwZVtdOyBwcm9wUHJlZml4Pzogc3RyaW5nOyBlc2NhcGU/OiBib29sZWFuIH1cbik6IHN0cmluZyB7XG4gIHJldHVybiAoXG4gICAgKEFycmF5LmlzQXJyYXkoZmlsdGVycykgPyBmaWx0ZXJzIDogW2ZpbHRlcnNdKS5yZWR1Y2UoXG4gICAgICAoYWNjOiBzdHJpbmdbXSwgZmlsdGVyKSA9PiB7XG4gICAgICAgIGlmIChmaWx0ZXIpIHtcbiAgICAgICAgICBjb25zdCBidWlsdEZpbHRlciA9IGJ1aWxkRmlsdGVyQ29yZShmaWx0ZXIsIHtcbiAgICAgICAgICAgIGFsaWFzZXMsXG4gICAgICAgICAgICBwcm9wUHJlZml4LFxuICAgICAgICAgICAgZXNjYXBlLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChidWlsdEZpbHRlcikge1xuICAgICAgICAgICAgYWNjLnB1c2goYnVpbHRGaWx0ZXIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSxcbiAgICAgIFtdXG4gICAgKSBhcyBzdHJpbmdbXVxuICApLmpvaW4oJyBhbmQgJyk7XG5cbiAgZnVuY3Rpb24gYnVpbGRGaWx0ZXJDb3JlKFxuICAgIGZpbHRlcjogRmlsdGVyPGFueT4gPSB7fSxcbiAgICB7XG4gICAgICBhbGlhc2VzLFxuICAgICAgcHJvcFByZWZpeCxcbiAgICAgIGVzY2FwZSxcbiAgICB9OiB7IGFsaWFzZXM/OiBRdWVyeUN1c3RvbVR5cGVbXTsgcHJvcFByZWZpeD86IHN0cmluZzsgZXNjYXBlPzogYm9vbGVhbiB9XG4gICkge1xuICAgIGxldCBmaWx0ZXJFeHByID0gJyc7XG4gICAgaWYgKHR5cGVvZiBmaWx0ZXIgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBVc2UgcmF3IGZpbHRlciBzdHJpbmdcbiAgICAgIGZpbHRlckV4cHIgPSBmaWx0ZXI7XG4gICAgfSBlbHNlIGlmIChmaWx0ZXIgJiYgdHlwZW9mIGZpbHRlciA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGNvbnN0IGZpbHRlcnNBcnJheSA9IE9iamVjdC5rZXlzKGZpbHRlcikucmVkdWNlKFxuICAgICAgICAocmVzdWx0OiBhbnlbXSwgZmlsdGVyS2V5KSA9PiB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSAoZmlsdGVyIGFzIGFueSlbZmlsdGVyS2V5XTtcbiAgICAgICAgICBsZXQgcHJvcE5hbWUgPSAnJztcbiAgICAgICAgICBpZiAocHJvcFByZWZpeCkge1xuICAgICAgICAgICAgaWYgKGZpbHRlcktleSA9PT0gSVRFTV9ST09UKSB7XG4gICAgICAgICAgICAgIHByb3BOYW1lID0gcHJvcFByZWZpeDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoSU5ERVhPRl9SRUdFWC50ZXN0KGZpbHRlcktleSkpIHtcbiAgICAgICAgICAgICAgcHJvcE5hbWUgPSBmaWx0ZXJLZXkucmVwbGFjZShJTkRFWE9GX1JFR0VYLCAoXywgJDEpID0+XG4gICAgICAgICAgICAgICAgJDEudHJpbSgpID09PSBJVEVNX1JPT1RcbiAgICAgICAgICAgICAgICAgID8gYCgke3Byb3BQcmVmaXh9KWBcbiAgICAgICAgICAgICAgICAgIDogYCgke3Byb3BQcmVmaXh9LyR7JDEudHJpbSgpfSlgXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKEZVTkNUSU9OX1JFR0VYLnRlc3QoZmlsdGVyS2V5KSkge1xuICAgICAgICAgICAgICBwcm9wTmFtZSA9IGZpbHRlcktleS5yZXBsYWNlKEZVTkNUSU9OX1JFR0VYLCAoXywgJDEpID0+XG4gICAgICAgICAgICAgICAgJDEudHJpbSgpID09PSBJVEVNX1JPT1RcbiAgICAgICAgICAgICAgICAgID8gYCgke3Byb3BQcmVmaXh9KWBcbiAgICAgICAgICAgICAgICAgIDogYCgke3Byb3BQcmVmaXh9LyR7JDEudHJpbSgpfSlgXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwcm9wTmFtZSA9IGAke3Byb3BQcmVmaXh9LyR7ZmlsdGVyS2V5fWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHByb3BOYW1lID0gZmlsdGVyS2V5O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChmaWx0ZXJLZXkgPT09IElURU1fUk9PVCAmJiBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5jb25jYXQoXG4gICAgICAgICAgICAgIHZhbHVlLm1hcCgoYXJyYXlWYWx1ZTogYW55KSA9PlxuICAgICAgICAgICAgICAgIHJlbmRlclByaW1pdGl2ZVZhbHVlKHByb3BOYW1lLCBhcnJheVZhbHVlLCB7IGVzY2FwZSwgYWxpYXNlcyB9KVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIFsnbnVtYmVyJywgJ3N0cmluZycsICdib29sZWFuJ10uaW5kZXhPZih0eXBlb2YgdmFsdWUpICE9PSAtMSB8fFxuICAgICAgICAgICAgdmFsdWUgaW5zdGFuY2VvZiBEYXRlIHx8XG4gICAgICAgICAgICB2YWx1ZSA9PT0gbnVsbFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gU2ltcGxlIGtleS92YWx1ZSBoYW5kbGVkIGFzIGVxdWFscyBvcGVyYXRvclxuICAgICAgICAgICAgcmVzdWx0LnB1c2goXG4gICAgICAgICAgICAgIHJlbmRlclByaW1pdGl2ZVZhbHVlKHByb3BOYW1lLCB2YWx1ZSwgeyBhbGlhc2VzLCBlc2NhcGUgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgY29uc3Qgb3AgPSBmaWx0ZXJLZXk7XG4gICAgICAgICAgICBjb25zdCBidWlsdEZpbHRlcnMgPSB2YWx1ZVxuICAgICAgICAgICAgICAubWFwKCh2KSA9PiBidWlsZEZpbHRlcih2LCB7IGFsaWFzZXMsIHByb3BQcmVmaXgsIGVzY2FwZSB9KSlcbiAgICAgICAgICAgICAgLmZpbHRlcigoZikgPT4gZilcbiAgICAgICAgICAgICAgLm1hcCgoZikgPT5cbiAgICAgICAgICAgICAgICBMT0dJQ0FMX09QRVJBVE9SUy5pbmRleE9mKG9wKSAhPT0gLTEgPyBgKCR7Zn0pYCA6IGZcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChidWlsdEZpbHRlcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIGlmIChMT0dJQ0FMX09QRVJBVE9SUy5pbmRleE9mKG9wKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICBpZiAoYnVpbHRGaWx0ZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgaWYgKG9wID09PSAnbm90Jykge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChwYXJzZU5vdChidWlsdEZpbHRlcnMgYXMgc3RyaW5nW10pKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGAoJHtidWlsdEZpbHRlcnMuam9pbihgICR7b3B9IGApfSlgKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goYnVpbHRGaWx0ZXJzLmpvaW4oYCAke29wfSBgKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKExPR0lDQUxfT1BFUkFUT1JTLmluZGV4T2YocHJvcE5hbWUpICE9PSAtMSkge1xuICAgICAgICAgICAgY29uc3Qgb3AgPSBwcm9wTmFtZTtcbiAgICAgICAgICAgIGNvbnN0IGJ1aWx0RmlsdGVycyA9IE9iamVjdC5rZXlzKHZhbHVlKS5tYXAoKHZhbHVlS2V5KSA9PlxuICAgICAgICAgICAgICBidWlsZEZpbHRlckNvcmUoXG4gICAgICAgICAgICAgICAgeyBbdmFsdWVLZXldOiB2YWx1ZVt2YWx1ZUtleV0gfSxcbiAgICAgICAgICAgICAgICB7IGFsaWFzZXMsIGVzY2FwZSB9XG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoYnVpbHRGaWx0ZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgICBpZiAob3AgPT09ICdub3QnKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gocGFyc2VOb3QoYnVpbHRGaWx0ZXJzIGFzIHN0cmluZ1tdKSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goYCR7YnVpbHRGaWx0ZXJzLmpvaW4oYCAke29wfSBgKX1gKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgaWYgKCd0eXBlJyBpbiB2YWx1ZSkge1xuICAgICAgICAgICAgICByZXN1bHQucHVzaChcbiAgICAgICAgICAgICAgICByZW5kZXJQcmltaXRpdmVWYWx1ZShwcm9wTmFtZSwgdmFsdWUsIHsgYWxpYXNlcywgZXNjYXBlIH0pXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb25zdCBvcGVyYXRvcnMgPSBPYmplY3Qua2V5cyh2YWx1ZSk7XG4gICAgICAgICAgICAgIG9wZXJhdG9ycy5mb3JFYWNoKChvcCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChDT01QQVJJU09OX09QRVJBVE9SUy5pbmRleE9mKG9wKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKFxuICAgICAgICAgICAgICAgICAgICBgJHtwcm9wTmFtZX0gJHtvcH0gJHtub3JtYWxpemVWYWx1ZSh2YWx1ZVtvcF0sIHtcbiAgICAgICAgICAgICAgICAgICAgICBhbGlhc2VzLFxuICAgICAgICAgICAgICAgICAgICAgIGVzY2FwZSxcbiAgICAgICAgICAgICAgICAgICAgfSl9YFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKExPR0lDQUxfT1BFUkFUT1JTLmluZGV4T2Yob3ApICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWVbb3BdKSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVtvcF1cbiAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICh2OiBhbnkpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJygnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZEZpbHRlckNvcmUodiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpYXNlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BQcmVmaXg6IHByb3BOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXNjYXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKSdcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5qb2luKGAgJHtvcH0gYClcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKFxuICAgICAgICAgICAgICAgICAgICAgICcoJyArXG4gICAgICAgICAgICAgICAgICAgICAgICBidWlsZEZpbHRlckNvcmUodmFsdWVbb3BdLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWFzZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BQcmVmaXg6IHByb3BOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBlc2NhcGUsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSArXG4gICAgICAgICAgICAgICAgICAgICAgICAnKSdcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKENPTExFQ1RJT05fT1BFUkFUT1JTLmluZGV4T2Yob3ApICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgY29sbGVjdGlvbkNsYXVzZSA9IGJ1aWxkQ29sbGVjdGlvbkNsYXVzZShcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyS2V5LnRvTG93ZXJDYXNlKCksXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlW29wXSxcbiAgICAgICAgICAgICAgICAgICAgb3AsXG4gICAgICAgICAgICAgICAgICAgIHByb3BOYW1lXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgaWYgKGNvbGxlY3Rpb25DbGF1c2UpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goY29sbGVjdGlvbkNsYXVzZSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvcCA9PT0gJ2hhcycpIHtcbiAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKFxuICAgICAgICAgICAgICAgICAgICBgJHtwcm9wTmFtZX0gJHtvcH0gJHtub3JtYWxpemVWYWx1ZSh2YWx1ZVtvcF0sIHtcbiAgICAgICAgICAgICAgICAgICAgICBhbGlhc2VzLFxuICAgICAgICAgICAgICAgICAgICAgIGVzY2FwZSxcbiAgICAgICAgICAgICAgICAgICAgfSl9YFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9wID09PSAnaW4nKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHRpbmdWYWx1ZXMgPSBBcnJheS5pc0FycmF5KHZhbHVlW29wXSlcbiAgICAgICAgICAgICAgICAgICAgPyB2YWx1ZVtvcF1cbiAgICAgICAgICAgICAgICAgICAgOiB2YWx1ZVtvcF0udmFsdWUubWFwKCh0eXBlZFZhbHVlOiBhbnkpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB2YWx1ZVtvcF0udHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0eXBlZFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goXG4gICAgICAgICAgICAgICAgICAgIHByb3BOYW1lICtcbiAgICAgICAgICAgICAgICAgICAgICAnIGluICgnICtcbiAgICAgICAgICAgICAgICAgICAgICByZXN1bHRpbmdWYWx1ZXNcbiAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoKHY6IGFueSkgPT4gbm9ybWFsaXplVmFsdWUodiwgeyBhbGlhc2VzLCBlc2NhcGUgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAuam9pbignLCcpICtcbiAgICAgICAgICAgICAgICAgICAgICAnKSdcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChCT09MRUFOX0ZVTkNUSU9OUy5pbmRleE9mKG9wKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgIC8vIFNpbXBsZSBib29sZWFuIGZ1bmN0aW9ucyAoc3RhcnRzd2l0aCwgZW5kc3dpdGgsIGNvbnRhaW5zKVxuICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goXG4gICAgICAgICAgICAgICAgICAgIGAke29wfSgke3Byb3BOYW1lfSwke25vcm1hbGl6ZVZhbHVlKHZhbHVlW29wXSwge1xuICAgICAgICAgICAgICAgICAgICAgIGFsaWFzZXMsXG4gICAgICAgICAgICAgICAgICAgICAgZXNjYXBlLFxuICAgICAgICAgICAgICAgICAgICB9KX0pYFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgLy8gTmVzdGVkIHByb3BlcnR5XG4gICAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXIgPSBidWlsZEZpbHRlckNvcmUodmFsdWUsIHtcbiAgICAgICAgICAgICAgICAgICAgYWxpYXNlcyxcbiAgICAgICAgICAgICAgICAgICAgcHJvcFByZWZpeDogcHJvcE5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGVzY2FwZSxcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlcikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChmaWx0ZXIpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyBJZ25vcmUvb21pdCBmaWx0ZXIgaWYgdmFsdWUgaXMgYHVuZGVmaW5lZGBcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIHZhbHVlIHR5cGU6ICR7dmFsdWV9YCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSxcbiAgICAgICAgW11cbiAgICAgICk7XG5cbiAgICAgIGZpbHRlckV4cHIgPSBmaWx0ZXJzQXJyYXkuam9pbignIGFuZCAnKTtcbiAgICB9IC8qIGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgZmlsdGVycyB0eXBlOiAke2ZpbHRlcn1gKTtcbiAgICAgIH0gKi9cbiAgICByZXR1cm4gZmlsdGVyRXhwcjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGJ1aWxkQ29sbGVjdGlvbkNsYXVzZShcbiAgICBsYW1iZGFQYXJhbWV0ZXI6IHN0cmluZyxcbiAgICB2YWx1ZTogYW55LFxuICAgIG9wOiBzdHJpbmcsXG4gICAgcHJvcE5hbWU6IHN0cmluZ1xuICApIHtcbiAgICBsZXQgY2xhdXNlID0gJyc7XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyB8fCB2YWx1ZSBpbnN0YW5jZW9mIFN0cmluZykge1xuICAgICAgY2xhdXNlID0gZ2V0U3RyaW5nQ29sbGVjdGlvbkNsYXVzZShsYW1iZGFQYXJhbWV0ZXIsIHZhbHVlLCBvcCwgcHJvcE5hbWUpO1xuICAgIH0gZWxzZSBpZiAodmFsdWUpIHtcbiAgICAgIC8vIG5vcm1hbGl6ZSB7YW55Olt7cHJvcDE6IDF9LCB7cHJvcDI6IDF9XX0gLS0+IHthbnk6e3Byb3AxOiAxLCBwcm9wMjogMX19OyBzYW1lIGZvciAnYWxsJyxcbiAgICAgIC8vIHNpbXBsZSB2YWx1ZXMgY29sbGVjdGlvbjoge2FueTpbeycnOiAnc2ltcGxlVmFsMSd9LCB7Jyc6ICdzaW1wbGVWYWwyJ31dfSAtLT4ge2FueTp7Jyc6IFsnc2ltcGxlVmFsMScsICdzaW1wbGVWYWwyJ119fTsgc2FtZSBmb3IgJ2FsbCcsXG4gICAgICBjb25zdCBmaWx0ZXJWYWx1ZSA9IEFycmF5LmlzQXJyYXkodmFsdWUpXG4gICAgICAgID8gdmFsdWUucmVkdWNlKChhY2MsIGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGlmIChpdGVtLmhhc093blByb3BlcnR5KElURU1fUk9PVCkpIHtcbiAgICAgICAgICAgICAgaWYgKCFhY2MuaGFzT3duUHJvcGVydHkoSVRFTV9ST09UKSkge1xuICAgICAgICAgICAgICAgIGFjY1tJVEVNX1JPT1RdID0gW107XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYWNjW0lURU1fUk9PVF0ucHVzaChpdGVtW0lURU1fUk9PVF0pO1xuICAgICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHsgLi4uYWNjLCAuLi5pdGVtIH07XG4gICAgICAgICAgfSwge30pXG4gICAgICAgIDogdmFsdWU7XG5cbiAgICAgIGNvbnN0IGZpbHRlciA9IGJ1aWxkRmlsdGVyQ29yZShmaWx0ZXJWYWx1ZSwge1xuICAgICAgICBhbGlhc2VzLFxuICAgICAgICBwcm9wUHJlZml4OiBsYW1iZGFQYXJhbWV0ZXIsXG4gICAgICAgIGVzY2FwZSxcbiAgICAgIH0pO1xuICAgICAgY2xhdXNlID0gYCR7cHJvcE5hbWV9LyR7b3B9KCR7XG4gICAgICAgIGZpbHRlciA/IGAke2xhbWJkYVBhcmFtZXRlcn06JHtmaWx0ZXJ9YCA6ICcnXG4gICAgICB9KWA7XG4gICAgfVxuICAgIHJldHVybiBjbGF1c2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0U3RyaW5nQ29sbGVjdGlvbkNsYXVzZShcbiAgbGFtYmRhUGFyYW1ldGVyOiBzdHJpbmcsXG4gIHZhbHVlOiBhbnksXG4gIGNvbGxlY3Rpb25PcGVyYXRvcjogc3RyaW5nLFxuICBwcm9wTmFtZTogc3RyaW5nXG4pIHtcbiAgbGV0IGNsYXVzZSA9ICcnO1xuICBjb25zdCBjb25kaXRpb25PcGVyYXRvciA9IGNvbGxlY3Rpb25PcGVyYXRvciA9PSAnYWxsJyA/ICduZScgOiAnZXEnO1xuICBjbGF1c2UgPSBgJHtwcm9wTmFtZX0vJHtjb2xsZWN0aW9uT3BlcmF0b3J9KCR7bGFtYmRhUGFyYW1ldGVyfTogJHtsYW1iZGFQYXJhbWV0ZXJ9ICR7Y29uZGl0aW9uT3BlcmF0b3J9ICcke3ZhbHVlfScpYDtcblxuICByZXR1cm4gY2xhdXNlO1xufVxuXG5mdW5jdGlvbiBlc2NhcGVJbGxlZ2FsQ2hhcnMoc3RyaW5nOiBzdHJpbmcpIHtcbiAgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UoLyUvZywgJyUyNScpO1xuICBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZSgvXFwrL2csICclMkInKTtcbiAgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UoL1xcLy9nLCAnJTJGJyk7XG4gIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKC9cXD8vZywgJyUzRicpO1xuICBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZSgvIy9nLCAnJTIzJyk7XG4gIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKC8mL2csICclMjYnKTtcbiAgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UoLycvZywgXCInJ1wiKTtcbiAgcmV0dXJuIHN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZVZhbHVlKFxuICB2YWx1ZTogVmFsdWUsXG4gIHsgYWxpYXNlcywgZXNjYXBlID0gZmFsc2UgfTogeyBhbGlhc2VzPzogUXVlcnlDdXN0b21UeXBlW107IGVzY2FwZT86IGJvb2xlYW4gfVxuKTogYW55IHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZXNjYXBlID8gYCcke2VzY2FwZUlsbGVnYWxDaGFycyh2YWx1ZSl9J2AgOiBgJyR7dmFsdWV9J2A7XG4gIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgcmV0dXJuIHZhbHVlLnRvSVNPU3RyaW5nKCk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiBgWyR7dmFsdWVcbiAgICAgIC5tYXAoKGQpID0+IG5vcm1hbGl6ZVZhbHVlKGQsIHsgYWxpYXNlcywgZXNjYXBlIH0pKVxuICAgICAgLmpvaW4oJywnKX1dYDtcbiAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgc3dpdGNoICh2YWx1ZS50eXBlKSB7XG4gICAgICBjYXNlIFF1ZXJ5Q3VzdG9tVHlwZXMuUmF3OlxuICAgICAgICByZXR1cm4gdmFsdWUudmFsdWU7XG4gICAgICBjYXNlIFF1ZXJ5Q3VzdG9tVHlwZXMuRHVyYXRpb246XG4gICAgICAgIHJldHVybiBgZHVyYXRpb24nJHt2YWx1ZS52YWx1ZX0nYDtcbiAgICAgIGNhc2UgUXVlcnlDdXN0b21UeXBlcy5CaW5hcnk6XG4gICAgICAgIHJldHVybiBgYmluYXJ5JyR7dmFsdWUudmFsdWV9J2A7XG4gICAgICBjYXNlIFF1ZXJ5Q3VzdG9tVHlwZXMuQWxpYXM6XG4gICAgICAgIC8vIFN0b3JlXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGFsaWFzZXMpKSB7XG4gICAgICAgICAgaWYgKHZhbHVlLm5hbWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdmFsdWUubmFtZSA9IGBhJHthbGlhc2VzLmxlbmd0aCArIDF9YDtcbiAgICAgICAgICB9XG4gICAgICAgICAgYWxpYXNlcy5wdXNoKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYEAke3ZhbHVlLm5hbWV9YDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBPYmplY3QuZW50cmllcyh2YWx1ZSlcbiAgICAgICAgICAuZmlsdGVyKChbLCB2XSkgPT4gdiAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgIC5tYXAoXG4gICAgICAgICAgICAoW2ssIHZdKSA9PlxuICAgICAgICAgICAgICBgJHtrfT0ke25vcm1hbGl6ZVZhbHVlKHYgYXMgVmFsdWUsIHsgYWxpYXNlcywgZXNjYXBlIH0pfWBcbiAgICAgICAgICApXG4gICAgICAgICAgLmpvaW4oJywnKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5mdW5jdGlvbiBidWlsZEV4cGFuZDxUPihcbiAgZXhwYW5kczogRXhwYW5kPFQ+LFxuICB7IGFsaWFzZXMsIGVzY2FwZSA9IGZhbHNlIH06IHsgYWxpYXNlcz86IFF1ZXJ5Q3VzdG9tVHlwZVtdOyBlc2NhcGU/OiBib29sZWFuIH1cbik6IHN0cmluZyB7XG4gIGlmICh0eXBlb2YgZXhwYW5kcyA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gZXhwYW5kcyBhcyBhbnk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGV4cGFuZHMgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKGV4cGFuZHMuaW5kZXhPZignLycpID09PSAtMSkge1xuICAgICAgcmV0dXJuIGV4cGFuZHM7XG4gICAgfVxuXG4gICAgLy8gQ2hhbmdlIGBGb28vQmFyL0JhemAgdG8gYEZvbygkZXhwYW5kPUJhcigkZXhwYW5kPUJheikpYFxuICAgIHJldHVybiBleHBhbmRzXG4gICAgICAuc3BsaXQoJy8nKVxuICAgICAgLnJldmVyc2UoKVxuICAgICAgLnJlZHVjZSgocmVzdWx0cywgaXRlbSwgaW5kZXgsIGFycikgPT4ge1xuICAgICAgICBpZiAoaW5kZXggPT09IDApIHtcbiAgICAgICAgICAvLyBJbm5lci1tb3N0IGl0ZW1cbiAgICAgICAgICByZXR1cm4gYCRleHBhbmQ9JHtpdGVtfWA7XG4gICAgICAgIH0gZWxzZSBpZiAoaW5kZXggPT09IGFyci5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgLy8gT3V0ZXItbW9zdCBpdGVtLCBkb24ndCBhZGQgYCRleHBhbmQ9YCBwcmVmaXggKGFkZGVkIGFib3ZlKVxuICAgICAgICAgIHJldHVybiBgJHtpdGVtfSgke3Jlc3VsdHN9KWA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gT3RoZXIgaXRlbXNcbiAgICAgICAgICByZXR1cm4gYCRleHBhbmQ9JHtpdGVtfSgke3Jlc3VsdHN9KWA7XG4gICAgICAgIH1cbiAgICAgIH0sICcnKTtcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGV4cGFuZHMpKSB7XG4gICAgcmV0dXJuIGAkeyhleHBhbmRzIGFzIEFycmF5PE5lc3RlZEV4cGFuZE9wdGlvbnM8YW55Pj4pXG4gICAgICAubWFwKChlKSA9PiBidWlsZEV4cGFuZChlLCB7IGFsaWFzZXMsIGVzY2FwZSB9KSlcbiAgICAgIC5qb2luKCcsJyl9YDtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZXhwYW5kcyA9PT0gJ29iamVjdCcpIHtcbiAgICBjb25zdCBleHBhbmRLZXlzID0gT2JqZWN0LmtleXMoZXhwYW5kcyk7XG5cbiAgICBpZiAoXG4gICAgICBleHBhbmRLZXlzLnNvbWUoXG4gICAgICAgIChrZXkpID0+IFNVUFBPUlRFRF9FWFBBTkRfUFJPUEVSVElFUy5pbmRleE9mKGtleS50b0xvd2VyQ2FzZSgpKSAhPT0gLTFcbiAgICAgIClcbiAgICApIHtcbiAgICAgIHJldHVybiBleHBhbmRLZXlzXG4gICAgICAgIC5tYXAoKGtleSkgPT4ge1xuICAgICAgICAgIGxldCB2YWx1ZTtcbiAgICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgY2FzZSAnZmlsdGVyJzpcbiAgICAgICAgICAgICAgdmFsdWUgPSBidWlsZEZpbHRlcigoZXhwYW5kcyBhcyBOZXN0ZWRFeHBhbmRPcHRpb25zPGFueT4pW2tleV0sIHtcbiAgICAgICAgICAgICAgICBhbGlhc2VzLFxuICAgICAgICAgICAgICAgIGVzY2FwZSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnb3JkZXJCeSc6XG4gICAgICAgICAgICAgIHZhbHVlID0gYnVpbGRPcmRlckJ5KFxuICAgICAgICAgICAgICAgIChleHBhbmRzIGFzIE5lc3RlZEV4cGFuZE9wdGlvbnM8YW55Pilba2V5XSBhcyBPcmRlckJ5PFQ+XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbGV2ZWxzJzpcbiAgICAgICAgICAgIGNhc2UgJ2NvdW50JzpcbiAgICAgICAgICAgIGNhc2UgJ3RvcCc6XG4gICAgICAgICAgICAgIHZhbHVlID0gYCR7KGV4cGFuZHMgYXMgTmVzdGVkRXhwYW5kT3B0aW9uczxhbnk+KVtrZXldfWA7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgdmFsdWUgPSBidWlsZEV4cGFuZChcbiAgICAgICAgICAgICAgICAoZXhwYW5kcyBhcyBOZXN0ZWRFeHBhbmRPcHRpb25zPGFueT4pW2tleV0gYXMgRXhwYW5kPFQ+LFxuICAgICAgICAgICAgICAgIHsgYWxpYXNlcywgZXNjYXBlIH1cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGAkJHtrZXkudG9Mb3dlckNhc2UoKX09JHt2YWx1ZX1gO1xuICAgICAgICB9KVxuICAgICAgICAuam9pbignOycpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZXhwYW5kS2V5c1xuICAgICAgICAubWFwKChrZXkpID0+IHtcbiAgICAgICAgICBjb25zdCBidWlsdEV4cGFuZCA9IGJ1aWxkRXhwYW5kKFxuICAgICAgICAgICAgKGV4cGFuZHMgYXMgTmVzdGVkRXhwYW5kT3B0aW9uczxhbnk+KVtcbiAgICAgICAgICAgICAga2V5XG4gICAgICAgICAgICBdIGFzIE5lc3RlZEV4cGFuZE9wdGlvbnM8YW55PixcbiAgICAgICAgICAgIHsgYWxpYXNlcywgZXNjYXBlIH1cbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiBidWlsdEV4cGFuZCA/IGAke2tleX0oJHtidWlsdEV4cGFuZH0pYCA6IGtleTtcbiAgICAgICAgfSlcbiAgICAgICAgLmpvaW4oJywnKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuICcnO1xufVxuXG5mdW5jdGlvbiBidWlsZFRyYW5zZm9ybXM8VD4oXG4gIHRyYW5zZm9ybXM6IFRyYW5zZm9ybTxUPiB8IFRyYW5zZm9ybTxUPltdLFxuICB7IGFsaWFzZXMsIGVzY2FwZSA9IGZhbHNlIH06IHsgYWxpYXNlcz86IFF1ZXJ5Q3VzdG9tVHlwZVtdOyBlc2NhcGU/OiBib29sZWFuIH1cbikge1xuICAvLyBXcmFwIHNpbmdsZSBvYmplY3QgYW4gYXJyYXkgZm9yIHNpbXBsaWZpZWQgcHJvY2Vzc2luZ1xuICBjb25zdCB0cmFuc2Zvcm1zQXJyYXkgPSBBcnJheS5pc0FycmF5KHRyYW5zZm9ybXMpID8gdHJhbnNmb3JtcyA6IFt0cmFuc2Zvcm1zXTtcblxuICBjb25zdCB0cmFuc2Zvcm1zUmVzdWx0ID0gdHJhbnNmb3Jtc0FycmF5LnJlZHVjZShcbiAgICAocmVzdWx0OiBzdHJpbmdbXSwgdHJhbnNmb3JtKSA9PiB7XG4gICAgICBjb25zdCB7IGFnZ3JlZ2F0ZSwgZmlsdGVyLCBncm91cEJ5LCAuLi5yZXN0IH0gPSB0cmFuc2Zvcm07XG5cbiAgICAgIC8vIFRPRE86IHN1cHBvcnQgYXMgbWFueSBvZiB0aGUgZm9sbG93aW5nOlxuICAgICAgLy8gICB0b3Bjb3VudCwgdG9wc3VtLCB0b3BwZXJjZW50LFxuICAgICAgLy8gICBib3R0b21zdW0sIGJvdHRvbWNvdW50LCBib3R0b21wZXJjZW50LFxuICAgICAgLy8gICBpZGVudGl0eSwgY29uY2F0LCBleHBhbmQsIHNlYXJjaCwgY29tcHV0ZSwgaXNkZWZpbmVkXG4gICAgICBjb25zdCB1bnN1cHBvcnRlZEtleXMgPSBPYmplY3Qua2V5cyhyZXN0KTtcbiAgICAgIGlmICh1bnN1cHBvcnRlZEtleXMubGVuZ3RoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgdHJhbnNmb3JtKHMpOiAke3Vuc3VwcG9ydGVkS2V5c31gKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGFnZ3JlZ2F0ZSkge1xuICAgICAgICByZXN1bHQucHVzaChgYWdncmVnYXRlKCR7YnVpbGRBZ2dyZWdhdGUoYWdncmVnYXRlKX0pYCk7XG4gICAgICB9XG4gICAgICBpZiAoZmlsdGVyKSB7XG4gICAgICAgIGNvbnN0IGJ1aWx0RmlsdGVyID0gYnVpbGRGaWx0ZXIoZmlsdGVyLCB7IGFsaWFzZXMsIGVzY2FwZSB9KTtcbiAgICAgICAgaWYgKGJ1aWx0RmlsdGVyKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goXG4gICAgICAgICAgICBgZmlsdGVyKCR7YnVpbGRGaWx0ZXIoYnVpbHRGaWx0ZXIsIHsgYWxpYXNlcywgZXNjYXBlIH0pfSlgXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGdyb3VwQnkpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goYGdyb3VwYnkoJHtidWlsZEdyb3VwQnkoZ3JvdXBCeSwgeyBhbGlhc2VzLCBlc2NhcGUgfSl9KWApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG4gICAgW11cbiAgKTtcblxuICByZXR1cm4gdHJhbnNmb3Jtc1Jlc3VsdC5qb2luKCcvJykgfHwgdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBidWlsZEFnZ3JlZ2F0ZShhZ2dyZWdhdGU6IEFnZ3JlZ2F0ZSB8IEFnZ3JlZ2F0ZVtdKSB7XG4gIC8vIFdyYXAgc2luZ2xlIG9iamVjdCBpbiBhbiBhcnJheSBmb3Igc2ltcGxpZmllZCBwcm9jZXNzaW5nXG4gIGNvbnN0IGFnZ3JlZ2F0ZUFycmF5ID0gQXJyYXkuaXNBcnJheShhZ2dyZWdhdGUpID8gYWdncmVnYXRlIDogW2FnZ3JlZ2F0ZV07XG5cbiAgcmV0dXJuIGFnZ3JlZ2F0ZUFycmF5XG4gICAgLm1hcCgoYWdncmVnYXRlSXRlbSkgPT4ge1xuICAgICAgcmV0dXJuIHR5cGVvZiBhZ2dyZWdhdGVJdGVtID09PSAnc3RyaW5nJ1xuICAgICAgICA/IGFnZ3JlZ2F0ZUl0ZW1cbiAgICAgICAgOiBPYmplY3Qua2V5cyhhZ2dyZWdhdGVJdGVtKS5tYXAoKGFnZ3JlZ2F0ZUtleSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYWdncmVnYXRlVmFsdWUgPSBhZ2dyZWdhdGVJdGVtW2FnZ3JlZ2F0ZUtleV07XG5cbiAgICAgICAgICAgIC8vIFRPRE86IEFyZSB0aGVzZSBhbHdheXMgcmVxdWlyZWQ/ICBDYW4vc2hvdWxkIHdlIGRlZmF1bHQgdGhlbSBpZiBzbz9cbiAgICAgICAgICAgIGlmICghYWdncmVnYXRlVmFsdWUud2l0aCkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCd3aXRoJyBwcm9wZXJ0eSByZXF1aXJlZCBmb3IgJyR7YWdncmVnYXRlS2V5fSdgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghYWdncmVnYXRlVmFsdWUuYXMpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAnYXMnIHByb3BlcnR5IHJlcXVpcmVkIGZvciAnJHthZ2dyZWdhdGVLZXl9J2ApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gYCR7YWdncmVnYXRlS2V5fSB3aXRoICR7YWdncmVnYXRlVmFsdWUud2l0aH0gYXMgJHthZ2dyZWdhdGVWYWx1ZS5hc31gO1xuICAgICAgICAgIH0pO1xuICAgIH0pXG4gICAgLmpvaW4oJywnKTtcbn1cblxuZnVuY3Rpb24gYnVpbGRHcm91cEJ5PFQ+KFxuICBncm91cEJ5OiBHcm91cEJ5PFQ+LFxuICB7IGFsaWFzZXMsIGVzY2FwZSA9IGZhbHNlIH06IHsgYWxpYXNlcz86IFF1ZXJ5Q3VzdG9tVHlwZVtdOyBlc2NhcGU/OiBib29sZWFuIH1cbikge1xuICBpZiAoIWdyb3VwQnkucHJvcGVydGllcykge1xuICAgIHRocm93IG5ldyBFcnJvcihgJ3Byb3BlcnRpZXMnIHByb3BlcnR5IHJlcXVpcmVkIGZvciBncm91cEJ5YCk7XG4gIH1cblxuICBsZXQgcmVzdWx0ID0gYCgke2dyb3VwQnkucHJvcGVydGllcy5qb2luKCcsJyl9KWA7XG5cbiAgaWYgKGdyb3VwQnkudHJhbnNmb3JtKSB7XG4gICAgcmVzdWx0ICs9IGAsJHtidWlsZFRyYW5zZm9ybXMoZ3JvdXBCeS50cmFuc2Zvcm0sIHsgYWxpYXNlcywgZXNjYXBlIH0pfWA7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBidWlsZE9yZGVyQnk8VD4ob3JkZXJCeTogT3JkZXJCeTxUPiwgcHJlZml4OiBzdHJpbmcgPSAnJyk6IHN0cmluZyB7XG4gIGlmIChBcnJheS5pc0FycmF5KG9yZGVyQnkpKSB7XG4gICAgcmV0dXJuIChvcmRlckJ5IGFzIE9yZGVyQnlPYmplY3Q8VD5bXSlcbiAgICAgIC5tYXAoKHZhbHVlKSA9PlxuICAgICAgICBBcnJheS5pc0FycmF5KHZhbHVlKSAmJlxuICAgICAgICB2YWx1ZS5sZW5ndGggPT09IDIgJiZcbiAgICAgICAgWydhc2MnLCAnZGVzYyddLmluZGV4T2YodmFsdWVbMV0pICE9PSAtMVxuICAgICAgICAgID8gdmFsdWUuam9pbignICcpXG4gICAgICAgICAgOiB2YWx1ZVxuICAgICAgKVxuICAgICAgLm1hcCgodikgPT4gYCR7cHJlZml4fSR7dn1gKVxuICAgICAgLmpvaW4oJywnKTtcbiAgfSBlbHNlIGlmICh0eXBlb2Ygb3JkZXJCeSA9PT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMob3JkZXJCeSlcbiAgICAgIC5tYXAoKFtrLCB2XSkgPT4gYnVpbGRPcmRlckJ5KHYgYXMgT3JkZXJCeTxhbnk+LCBgJHtrfS9gKSlcbiAgICAgIC5tYXAoKHYpID0+IGAke3ByZWZpeH0ke3Z9YClcbiAgICAgIC5qb2luKCcsJyk7XG4gIH1cbiAgcmV0dXJuIGAke3ByZWZpeH0ke29yZGVyQnl9YDtcbn1cblxuZnVuY3Rpb24gYnVpbGRVcmwocGF0aDogc3RyaW5nLCBwYXJhbXM6IHsgW25hbWU6IHN0cmluZ106IGFueSB9KTogc3RyaW5nIHtcbiAgLy8gVGhpcyBjYW4gYmUgcmVmYWN0b3JlZCB1c2luZyBVUkwgQVBJLiBCdXQgSUUgZG9lcyBub3Qgc3VwcG9ydCBpdC5cbiAgY29uc3QgcXVlcmllczogc3RyaW5nW10gPSBPYmplY3QuZW50cmllcyhwYXJhbXMpLm1hcChcbiAgICAoW2tleSwgdmFsdWVdKSA9PiBgJHtrZXl9PSR7dmFsdWV9YFxuICApO1xuICByZXR1cm4gcXVlcmllcy5sZW5ndGggPyBgJHtwYXRofT8ke3F1ZXJpZXMuam9pbignJicpfWAgOiBwYXRoO1xufVxuXG5mdW5jdGlvbiBwYXJzZU5vdChidWlsdEZpbHRlcnM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBub3QoJHtidWlsdEZpbHRlcnMuam9pbignIGFuZCAnKX0pYDtcbn1cbiJdfQ==
|
|
591
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItb2RhdGEvc3JjL2xpYi9yZXNvdXJjZXMvcXVlcnkvYnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLG9CQUFvQixHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNsRSxNQUFNLGlCQUFpQixHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMvQyxNQUFNLG9CQUFvQixHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzVDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxZQUFZLEVBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ2pFLE1BQU0sMkJBQTJCLEdBQUc7SUFDbEMsUUFBUTtJQUNSLFFBQVE7SUFDUixRQUFRO0lBQ1IsS0FBSztJQUNMLE9BQU87SUFDUCxTQUFTO0lBQ1QsUUFBUTtDQUNULENBQUM7QUFFRixNQUFNLGNBQWMsR0FBRyxVQUFVLENBQUM7QUFDbEMsTUFBTSxhQUFhLEdBQUcsc0JBQXNCLENBQUM7QUFRN0MsTUFBTSxDQUFOLElBQVksd0JBTVg7QUFORCxXQUFZLHdCQUF3QjtJQUNsQyx1Q0FBVyxDQUFBO0lBQ1gsdUNBQVcsQ0FBQTtJQUNYLHVDQUFXLENBQUE7SUFDWCwrQ0FBbUIsQ0FBQTtJQUNuQiwyREFBK0IsQ0FBQTtBQUNqQyxDQUFDLEVBTlcsd0JBQXdCLEtBQXhCLHdCQUF3QixRQU1uQztBQTZDRCxNQUFNLENBQU4sSUFBWSxnQkFLWDtBQUxELFdBQVksZ0JBQWdCO0lBQzFCLHFEQUFHLENBQUE7SUFDSCx5REFBSyxDQUFBO0lBQ0wsK0RBQVEsQ0FBQTtJQUNSLDJEQUFNLENBQUE7QUFDUixDQUFDLEVBTFcsZ0JBQWdC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QUFDaEUsQ0FBQztBQUVELFNBQVMsUUFBUSxDQUFDLFlBQXNCO0lBQ3RDLE9BQU8sT0FBTyxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUM7QUFDOUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IENPTVBBUklTT05fT1BFUkFUT1JTID0gWydlcScsICduZScsICdndCcsICdnZScsICdsdCcsICdsZSddO1xuY29uc3QgTE9HSUNBTF9PUEVSQVRPUlMgPSBbJ2FuZCcsICdvcicsICdub3QnXTtcbmNvbnN0IENPTExFQ1RJT05fT1BFUkFUT1JTID0gWydhbnknLCAnYWxsJ107XG5jb25zdCBCT09MRUFOX0ZVTkNUSU9OUyA9IFsnc3RhcnRzd2l0aCcsICdlbmRzd2l0aCcsICdjb250YWlucyddO1xuY29uc3QgU1VQUE9SVEVEX0VYUEFORF9QUk9QRVJUSUVTID0gW1xuICAnZXhwYW5kJyxcbiAgJ2xldmVscycsXG4gICdzZWxlY3QnLFxuICAndG9wJyxcbiAgJ2NvdW50JyxcbiAgJ29yZGVyYnknLFxuICAnZmlsdGVyJyxcbl07XG5cbmNvbnN0IEZVTkNUSU9OX1JFR0VYID0gL1xcKCguKilcXCkvO1xuY29uc3QgSU5ERVhPRl9SRUdFWCA9IC8oPyFpbmRleG9mKVxcKChcXHcrKVxcKS87XG5cbmV4cG9ydCB0eXBlIFVucGFja2VkPFQ+ID0gVCBleHRlbmRzIChpbmZlciBVKVtdID8gVSA6IFQ7XG5leHBvcnQgdHlwZSBTZWxlY3Q8VD4gPSBTZWxlY3RUeXBlPFQ+IHwgU2VsZWN0VHlwZTxUPltdO1xuZXhwb3J0IHR5cGUgU2VsZWN0VHlwZTxUPiA9IHN0cmluZyB8IGtleW9mIFQ7XG5leHBvcnQgdHlwZSBGaWx0ZXI8VD4gPSBGaWx0ZXJUeXBlIHwgRmlsdGVyVHlwZVtdO1xuZXhwb3J0IHR5cGUgRmlsdGVyVHlwZSA9IHN0cmluZyB8IHsgW25hbWU6IHN0cmluZ106IGFueSB9O1xuXG5leHBvcnQgZW51bSBTdGFuZGFyZEFnZ3JlZ2F0ZU1ldGhvZHMge1xuICBzdW0gPSAnc3VtJyxcbiAgbWluID0gJ21pbicsXG4gIG1heCA9ICdtYXgnLFxuICBhdmVyYWdlID0gJ2F2ZXJhZ2UnLFxuICBjb3VudGRpc3RpbmN0ID0gJ2NvdW50ZGlzdGluY3QnLFxufVxuZXhwb3J0IHR5cGUgQWdncmVnYXRlID1cbiAgfCBzdHJpbmdcbiAgfCB7IFtwcm9wZXJ0eU5hbWU6IHN0cmluZ106IHsgd2l0aDogU3RhbmRhcmRBZ2dyZWdhdGVNZXRob2RzOyBhczogc3RyaW5nIH0gfTtcblxuLy8gT3JkZXJCeVxuXG5leHBvcnQgdHlwZSBPcmRlckJ5PFQ+ID0gT3JkZXJCeVR5cGU8VD4gfCBPcmRlckJ5VHlwZTxUPltdO1xuZXhwb3J0IHR5cGUgT3JkZXJCeVR5cGU8VD4gPSBzdHJpbmcgfCBPcmRlckJ5T2JqZWN0PFQ+O1xuZXhwb3J0IHR5cGUgT3JkZXJCeU9iamVjdDxUPiA9IGtleW9mIFQgfCBba2V5b2YgVCB8IHN0cmluZywgJ2FzYycgfCAnZGVzYyddO1xuLy9UT0RPOiBzdXBwb3J0IGFuZ3VsYXIgMTIgcmVjdXJzaXZlIHR5cGU6XG4vKlxuZXhwb3J0IHR5cGUgT3JkZXJCeU9wdGlvbnM8VD4gPSBrZXlvZiBUIHwgWyBrZXlvZiBUIHwgc3RyaW5nLCAnYXNjJyB8ICdkZXNjJyBdO1xuZXhwb3J0IHR5cGUgTmVzdGVkT3JkZXJCeTxUPiA9IHsgW1AgaW4ga2V5b2YgVF0/OiBUW1BdIGV4dGVuZHMgQXJyYXk8aW5mZXIgRT4gPyBPcmRlckJ5PEU+IDogT3JkZXJCeTxUW1BdPiB9XG5leHBvcnQgdHlwZSBPcmRlckJ5PFQ+ID0gc3RyaW5nIHwgT3JkZXJCeU9wdGlvbnM8VD4gfCBBcnJheTxPcmRlckJ5T3B0aW9uczxUPj4gfCBOZXN0ZWRPcmRlckJ5PFQ+O1xuKi9cblxuLy8gRXhwYW5kXG5leHBvcnQgdHlwZSBFeHBhbmQ8VD4gPSBFeHBhbmRUeXBlPFQ+IHwgRXhwYW5kVHlwZTxUPltdO1xuZXhwb3J0IHR5cGUgRXhwYW5kVHlwZTxUPiA9IHN0cmluZyB8IEV4cGFuZE9iamVjdDxUPjtcbmV4cG9ydCB0eXBlIEV4cGFuZE9iamVjdDxUPiA9IGtleW9mIFQgfCBOZXN0ZWRFeHBhbmRPcHRpb25zPFQ+O1xuZXhwb3J0IHR5cGUgTmVzdGVkRXhwYW5kT3B0aW9uczxUPiA9IHtcbiAgW1AgaW4ga2V5b2YgVF0/OiBFeHBhbmRPcHRpb25zPFVucGFja2VkPFRbUF0+Pjtcbn07XG5leHBvcnQgdHlwZSBFeHBhbmRPcHRpb25zPFQ+ID0ge1xuICBzZWxlY3Q/OiBTZWxlY3Q8VD47XG4gIGZpbHRlcj86IEZpbHRlcjxUPjtcbiAgb3JkZXJCeT86IE9yZGVyQnk8VD47XG4gIHRvcD86IG51bWJlcjtcbiAgc2tpcD86IG51bWJlcjtcbiAgbGV2ZWxzPzogbnVtYmVyIHwgJ21heCc7XG4gIGNvdW50PzogYm9vbGVhbiB8IEZpbHRlcjxUPjtcbiAgZXhwYW5kPzogRXhwYW5kPFQ+O1xufTtcblxuZXhwb3J0IHR5cGUgVHJhbnNmb3JtPFQ+ID0ge1xuICBhZ2dyZWdhdGU/OiBBZ2dyZWdhdGUgfCBBcnJheTxBZ2dyZWdhdGU+O1xuICBmaWx0ZXI/OiBGaWx0ZXI8VD47XG4gIGdyb3VwQnk/OiBHcm91cEJ5PFQ+O1xufTtcbmV4cG9ydCB0eXBlIEdyb3VwQnk8VD4gPSB7XG4gIHByb3BlcnRpZXM6IEFycmF5PGtleW9mIFQ+O1xuICB0cmFuc2Zvcm0/OiBUcmFuc2Zvcm08VD47XG59O1xuXG5leHBvcnQgZW51bSBRdWVyeUN1c3RvbVR5cGVzIHtcbiAgUmF3LFxuICBBbGlhcyxcbiAgRHVyYXRpb24sXG4gIEJpbmFyeSxcbn1cblxuZXhwb3J0IHR5cGUgUXVlcnlDdXN0b21UeXBlID0ge1xuICB0eXBlOiBRdWVyeUN1c3RvbVR5cGVzO1xuICB2YWx1ZTogYW55O1xuICBuYW1lPzogc3RyaW5nO1xufTtcbmV4cG9ydCB0eXBlIFZhbHVlID0gc3RyaW5nIHwgRGF0ZSB8IG51bWJlciB8IGJvb2xlYW4gfCBRdWVyeUN1c3RvbVR5cGU7XG5cbi8vaHR0cHM6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL29kYXRhL29kYXRhL3Y0LjAxL29kYXRhLXY0LjAxLXBhcnQyLXVybC1jb252ZW50aW9ucy5odG1sI3NlY19RdWVyeU9wdGlvbnNcbmV4cG9ydCBjb25zdCByYXcgPSAodmFsdWU6IHN0cmluZyk6IFF1ZXJ5Q3VzdG9tVHlwZSA9PiAoe1xuICB0eXBlOiBRdWVyeUN1c3RvbVR5cGVzLlJhdyxcbiAgdmFsdWUsXG59KTtcbmV4cG9ydCBjb25zdCBhbGlhcyA9ICh2YWx1ZTogYW55LCBuYW1lPzogc3RyaW5nKTogUXVlcnlDdXN0b21UeXBlID0+ICh7XG4gIHR5cGU6IFF1ZXJ5Q3VzdG9tVHlwZXMuQWxpYXMsXG4gIHZhbHVlLFxuICBuYW1lLFxufSk7XG5leHBvcnQgY29uc3QgZHVyYXRpb24gPSAodmFsdWU6IHN0cmluZyk6IFF1ZXJ5Q3VzdG9tVHlwZSA9PiAoe1xuICB0eXBlOiBRdWVyeUN1c3RvbVR5cGVzLkR1cmF0aW9uLFxuICB2YWx1ZSxcbn0pO1xuZXhwb3J0IGNvbnN0IGJpbmFyeSA9ICh2YWx1ZTogc3RyaW5nKTogUXVlcnlDdXN0b21UeXBlID0+ICh7XG4gIHR5cGU6IFF1ZXJ5Q3VzdG9tVHlwZXMuQmluYXJ5LFxuICB2YWx1ZSxcbn0pO1xuZXhwb3J0IGNvbnN0IGlzUXVlcnlDdXN0b21UeXBlID0gKHZhbHVlOiBhbnkpID0+XG4gIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiZcbiAgJ3R5cGUnIGluIHZhbHVlICYmXG4gIHZhbHVlLnR5cGUgaW4gUXVlcnlDdXN0b21UeXBlcztcbmV4cG9ydCB0eXBlIFF1ZXJ5T3B0aW9uczxUPiA9IEV4cGFuZE9wdGlvbnM8VD4gJiB7XG4gIHNlYXJjaDogc3RyaW5nO1xuICB0cmFuc2Zvcm06IHsgW25hbWU6IHN0cmluZ106IGFueSB9IHwgeyBbbmFtZTogc3RyaW5nXTogYW55IH1bXTtcbiAgc2tpcDogbnVtYmVyO1xuICBza2lwdG9rZW46IHN0cmluZztcbiAga2V5OiBzdHJpbmcgfCBudW1iZXIgfCB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfTtcbiAgY291bnQ6IGJvb2xlYW4gfCBGaWx0ZXI8VD47XG4gIGFjdGlvbjogc3RyaW5nO1xuICBmdW5jOiBzdHJpbmcgfCB7IFtmdW5jdGlvbk5hbWU6IHN0cmluZ106IHsgW3BhcmFtZXRlck5hbWU6IHN0cmluZ106IGFueSB9IH07XG4gIGZvcm1hdDogc3RyaW5nO1xuICBhbGlhc2VzOiBRdWVyeUN1c3RvbVR5cGVbXTtcbiAgZXNjYXBlOiBib29sZWFuO1xufTtcblxuZXhwb3J0IGNvbnN0IElURU1fUk9PVCA9ICcnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiA8VD4oe1xuICBzZWxlY3QsXG4gIHNlYXJjaCxcbiAgc2tpcHRva2VuLFxuICBmb3JtYXQsXG4gIHRvcCxcbiAgc2tpcCxcbiAgZmlsdGVyLFxuICB0cmFuc2Zvcm0sXG4gIG9yZGVyQnksXG4gIGtleSxcbiAgY291bnQsXG4gIGV4cGFuZCxcbiAgYWN0aW9uLFxuICBmdW5jLFxuICBhbGlhc2VzLFxuICBlc2NhcGUsXG59OiBQYXJ0aWFsPFF1ZXJ5T3B0aW9uczxUPj4gPSB7fSkge1xuICBjb25zdCBbcGF0aCwgcGFyYW1zXSA9IGJ1aWxkUGF0aEFuZFF1ZXJ5KHtcbiAgICBzZWxlY3QsXG4gICAgc2VhcmNoLFxuICAgIHNraXB0b2tlbixcbiAgICBmb3JtYXQsXG4gICAgdG9wLFxuICAgIHNraXAsXG4gICAgZmlsdGVyLFxuICAgIHRyYW5zZm9ybSxcbiAgICBvcmRlckJ5LFxuICAgIGtleSxcbiAgICBjb3VudCxcbiAgICBleHBhbmQsXG4gICAgYWN0aW9uLFxuICAgIGZ1bmMsXG4gICAgYWxpYXNlcyxcbiAgICBlc2NhcGUsXG4gIH0pO1xuXG4gIHJldHVybiBidWlsZFVybChwYXRoLCBwYXJhbXMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRQYXRoQW5kUXVlcnk8VD4oe1xuICBzZWxlY3QsXG4gIHNlYXJjaCxcbiAgc2tpcHRva2VuLFxuICBmb3JtYXQsXG4gIHRvcCxcbiAgc2tpcCxcbiAgZmlsdGVyLFxuICB0cmFuc2Zvcm0sXG4gIG9yZGVyQnksXG4gIGtleSxcbiAgY291bnQsXG4gIGV4cGFuZCxcbiAgYWN0aW9uLFxuICBmdW5jLFxuICBhbGlhc2VzLFxuICBlc2NhcGUsXG59OiBQYXJ0aWFsPFF1ZXJ5T3B0aW9uczxUPj4gPSB7fSk6IFtzdHJpbmcsIHsgW25hbWU6IHN0cmluZ106IGFueSB9XSB7XG4gIGxldCBwYXRoOiBzdHJpbmcgPSAnJztcbiAgYWxpYXNlcyA9IGFsaWFzZXMgfHwgW107XG5cbiAgY29uc3QgcXVlcnk6IGFueSA9IHt9O1xuXG4gIC8vIGtleSBpcyBub3QgKG51bGwsIHVuZGVmaW5lZClcbiAgaWYgKGtleSAhPSB1bmRlZmluZWQpIHtcbiAgICBwYXRoICs9IGAoJHtub3JtYWxpemVWYWx1ZShrZXkgYXMgVmFsdWUsIHsgYWxpYXNlcywgZXNjYXBlIH0pfSlgO1xuICB9XG5cbiAgaWYgKHNlbGVjdCkge1xuICAgIHF1ZXJ5LiRzZWxlY3QgPSBBcnJheS5pc0FycmF5KHNlbGVjdCkgPyBzZWxlY3Quam9pbignLCcpIDogc2VsZWN0O1xuICB9XG5cbiAgaWYgKHNlYXJjaCkge1xuICAgIHF1ZXJ5LiRzZWFyY2ggPSBzZWFyY2g7XG4gIH1cblxuICBpZiAoc2tpcHRva2VuKSB7XG4gICAgcXVlcnkuJHNraXB0b2tlbiA9IHNraXB0b2tlbjtcbiAgfVxuXG4gIGlmIChmb3JtYXQpIHtcbiAgICBxdWVyeS4kZm9ybWF0ID0gZm9ybWF0O1xuICB9XG5cbiAgaWYgKGZpbHRlciB8fCB0eXBlb2YgY291bnQgPT09ICdvYmplY3QnKSB7XG4gICAgcXVlcnkuJGZpbHRlciA9IGJ1aWxkRmlsdGVyKHR5cGVvZiBjb3VudCA9PT0gJ29iamVjdCcgPyBjb3VudCA6IGZpbHRlciwge1xuICAgICAgYWxpYXNlcyxcbiAgICAgIGVzY2FwZSxcbiAgICB9KTtcbiAgfVxuXG4gIGlmICh0cmFuc2Zvcm0pIHtcbiAgICBxdWVyeS4kYXBwbHkgPSBidWlsZFRyYW5zZm9ybXModHJhbnNmb3JtLCB7IGFsaWFzZXMsIGVzY2FwZSB9KTtcbiAgfVxuXG4gIGlmIChleHBhbmQpIHtcbiAgICBxdWVyeS4kZXhwYW5kID0gYnVpbGRFeHBhbmQoZXhwYW5kLCB7IGFsaWFzZXMsIGVzY2FwZSB9KTtcbiAgfVxuXG4gIGlmIChvcmRlckJ5KSB7XG4gICAgcXVlcnkuJG9yZGVyYnkgPSBidWlsZE9yZGVyQnkob3JkZXJCeSk7XG4gIH1cblxuICBpZiAoY291bnQpIHtcbiAgICBpZiAodHlwZW9mIGNvdW50ID09PSAnYm9vbGVhbicpIHtcbiAgICAgIHF1ZXJ5LiRjb3VudCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhdGggKz0gJy8kY291bnQnO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlb2YgdG9wID09PSAnbnVtYmVyJykge1xuICAgIHF1ZXJ5LiR0b3AgPSB0b3A7XG4gIH1cblxuICBpZiAodHlwZW9mIHNraXAgPT09ICdudW1iZXInKSB7XG4gICAgcXVlcnkuJHNraXAgPSBza2lwO1xuICB9XG5cbiAgaWYgKGFjdGlvbikge1xuICAgIHBhdGggKz0gYC8ke2FjdGlvbn1gO1xuICB9XG5cbiAgaWYgKGZ1bmMpIHtcbiAgICBpZiAodHlwZW9mIGZ1bmMgPT09ICdzdHJpbmcnKSB7XG4gICAgICBwYXRoICs9IGAvJHtmdW5jfWA7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZnVuYyA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGNvbnN0IFtmdW5jTmFtZV0gPSBPYmplY3Qua2V5cyhmdW5jKTtcbiAgICAgIGNvbnN0IGZ1bmNBcmdzID0gbm9ybWFsaXplVmFsdWUoZnVuY1tmdW5jTmFtZV0gYXMgVmFsdWUsIHtcbiAgICAgICAgYWxpYXNlcyxcbiAgICAgICAgZXNjYXBlLFxuICAgICAgfSk7XG5cbiAgICAgIHBhdGggKz0gYC8ke2Z1bmNOYW1lfWA7XG4gICAgICBpZiAoZnVuY0FyZ3MgIT09ICcnKSB7XG4gICAgICAgIHBhdGggKz0gYCgke2Z1bmNBcmdzfSlgO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChhbGlhc2VzLmxlbmd0aCA+IDApIHtcbiAgICBPYmplY3QuYXNzaWduKFxuICAgICAgcXVlcnksXG4gICAgICBhbGlhc2VzLnJlZHVjZShcbiAgICAgICAgKGFjYywgYWxpYXMpID0+XG4gICAgICAgICAgT2JqZWN0LmFzc2lnbihhY2MsIHtcbiAgICAgICAgICAgIFtgQCR7YWxpYXMubmFtZX1gXTogbm9ybWFsaXplVmFsdWUoYWxpYXMudmFsdWUsIHtcbiAgICAgICAgICAgICAgZXNjYXBlLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgfSksXG4gICAgICAgIHt9XG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIC8vIEZpbHRlciBlbXB0eSB2YWx1ZXNcbiAgY29uc3QgcGFyYW1zID0gT2JqZWN0LmVudHJpZXMocXVlcnkpXG4gICAgLmZpbHRlcigoWywgdmFsdWVdKSA9PiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSAnJylcbiAgICAucmVkdWNlKChhY2MsIFtrZXksIHZhbHVlXSkgPT4gT2JqZWN0LmFzc2lnbihhY2MsIHsgW2tleV06IHZhbHVlIH0pLCB7fSk7XG5cbiAgcmV0dXJuIFtwYXRoLCBwYXJhbXNdO1xufVxuXG5mdW5jdGlvbiByZW5kZXJQcmltaXRpdmVWYWx1ZShcbiAga2V5OiBzdHJpbmcsXG4gIHZhbDogYW55LFxuICB7XG4gICAgYWxpYXNlcyxcbiAgICBlc2NhcGUsXG4gIH06IHtcbiAgICBhbGlhc2VzPzogUXVlcnlDdXN0b21UeXBlW107XG4gICAgZXNjYXBlPzogYm9vbGVhbjtcbiAgfVxuKSB7XG4gIHJldHVybiBgJHtrZXl9IGVxICR7bm9ybWFsaXplVmFsdWUodmFsLCB7IGFsaWFzZXMsIGVzY2FwZSB9KX1gO1xufVxuXG5mdW5jdGlvbiBidWlsZEZpbHRlcihcbiAgZmlsdGVyczogRmlsdGVyPGFueT4gPSB7fSxcbiAge1xuICAgIGFsaWFzZXMsXG4gICAgcHJvcFByZWZpeCxcbiAgICBlc2NhcGUsXG4gIH06IHsgYWxpYXNlcz86IFF1ZXJ5Q3VzdG9tVHlwZVtdOyBwcm9wUHJlZml4Pzogc3RyaW5nOyBlc2NhcGU/OiBib29sZWFuIH1cbik6IHN0cmluZyB7XG4gIHJldHVybiAoXG4gICAgKEFycmF5LmlzQXJyYXkoZmlsdGVycykgPyBmaWx0ZXJzIDogW2ZpbHRlcnNdKS5yZWR1Y2UoXG4gICAgICAoYWNjOiBzdHJpbmdbXSwgZmlsdGVyKSA9PiB7XG4gICAgICAgIGlmIChmaWx0ZXIpIHtcbiAgICAgICAgICBjb25zdCBidWlsdEZpbHRlciA9IGJ1aWxkRmlsdGVyQ29yZShmaWx0ZXIsIHtcbiAgICAgICAgICAgIGFsaWFzZXMsXG4gICAgICAgICAgICBwcm9wUHJlZml4LFxuICAgICAgICAgICAgZXNjYXBlLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChidWlsdEZpbHRlcikge1xuICAgICAgICAgICAgYWNjLnB1c2goYnVpbHRGaWx0ZXIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSxcbiAgICAgIFtdXG4gICAgKSBhcyBzdHJpbmdbXVxuICApLmpvaW4oJyBhbmQgJyk7XG5cbiAgZnVuY3Rpb24gYnVpbGRGaWx0ZXJDb3JlKFxuICAgIGZpbHRlcjogRmlsdGVyPGFueT4gPSB7fSxcbiAgICB7XG4gICAgICBhbGlhc2VzLFxuICAgICAgcHJvcFByZWZpeCxcbiAgICAgIGVzY2FwZSxcbiAgICB9OiB7IGFsaWFzZXM/OiBRdWVyeUN1c3RvbVR5cGVbXTsgcHJvcFByZWZpeD86IHN0cmluZzsgZXNjYXBlPzogYm9vbGVhbiB9XG4gICkge1xuICAgIGxldCBmaWx0ZXJFeHByID0gJyc7XG4gICAgaWYgKHR5cGVvZiBmaWx0ZXIgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBVc2UgcmF3IGZpbHRlciBzdHJpbmdcbiAgICAgIGZpbHRlckV4cHIgPSBmaWx0ZXI7XG4gICAgfSBlbHNlIGlmIChmaWx0ZXIgJiYgdHlwZW9mIGZpbHRlciA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGNvbnN0IGZpbHRlcnNBcnJheSA9IE9iamVjdC5rZXlzKGZpbHRlcikucmVkdWNlKFxuICAgICAgICAocmVzdWx0OiBhbnlbXSwgZmlsdGVyS2V5KSA9PiB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSAoZmlsdGVyIGFzIGFueSlbZmlsdGVyS2V5XTtcbiAgICAgICAgICBsZXQgcHJvcE5hbWUgPSAnJztcbiAgICAgICAgICBpZiAocHJvcFByZWZpeCkge1xuICAgICAgICAgICAgaWYgKGZpbHRlcktleSA9PT0gSVRFTV9ST09UKSB7XG4gICAgICAgICAgICAgIHByb3BOYW1lID0gcHJvcFByZWZpeDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoSU5ERVhPRl9SRUdFWC50ZXN0KGZpbHRlcktleSkpIHtcbiAgICAgICAgICAgICAgcHJvcE5hbWUgPSBmaWx0ZXJLZXkucmVwbGFjZShJTkRFWE9GX1JFR0VYLCAoXywgJDEpID0+XG4gICAgICAgICAgICAgICAgJDEudHJpbSgpID09PSBJVEVNX1JPT1RcbiAgICAgICAgICAgICAgICAgID8gYCgke3Byb3BQcmVmaXh9KWBcbiAgICAgICAgICAgICAgICAgIDogYCgke3Byb3BQcmVmaXh9LyR7JDEudHJpbSgpfSlgXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKEZVTkNUSU9OX1JFR0VYLnRlc3QoZmlsdGVyS2V5KSkge1xuICAgICAgICAgICAgICBwcm9wTmFtZSA9IGZpbHRlcktleS5yZXBsYWNlKEZVTkNUSU9OX1JFR0VYLCAoXywgJDEpID0+XG4gICAgICAgICAgICAgICAgJDEudHJpbSgpID09PSBJVEVNX1JPT1RcbiAgICAgICAgICAgICAgICAgID8gYCgke3Byb3BQcmVmaXh9KWBcbiAgICAgICAgICAgICAgICAgIDogYCgke3Byb3BQcmVmaXh9LyR7JDEudHJpbSgpfSlgXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwcm9wTmFtZSA9IGAke3Byb3BQcmVmaXh9LyR7ZmlsdGVyS2V5fWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHByb3BOYW1lID0gZmlsdGVyS2V5O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChmaWx0ZXJLZXkgPT09IElURU1fUk9PVCAmJiBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5jb25jYXQoXG4gICAgICAgICAgICAgIHZhbHVlLm1hcCgoYXJyYXlWYWx1ZTogYW55KSA9PlxuICAgICAgICAgICAgICAgIHJlbmRlclByaW1pdGl2ZVZhbHVlKHByb3BOYW1lLCBhcnJheVZhbHVlLCB7IGVzY2FwZSwgYWxpYXNlcyB9KVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIFsnbnVtYmVyJywgJ3N0cmluZycsICdib29sZWFuJ10uaW5kZXhPZih0eXBlb2YgdmFsdWUpICE9PSAtMSB8fFxuICAgICAgICAgICAgdmFsdWUgaW5zdGFuY2VvZiBEYXRlIHx8XG4gICAgICAgICAgICB2YWx1ZSA9PT0gbnVsbFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gU2ltcGxlIGtleS92YWx1ZSBoYW5kbGVkIGFzIGVxdWFscyBvcGVyYXRvclxuICAgICAgICAgICAgcmVzdWx0LnB1c2goXG4gICAgICAgICAgICAgIHJlbmRlclByaW1pdGl2ZVZhbHVlKHByb3BOYW1lLCB2YWx1ZSwgeyBhbGlhc2VzLCBlc2NhcGUgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgY29uc3Qgb3AgPSBmaWx0ZXJLZXk7XG4gICAgICAgICAgICBjb25zdCBidWlsdEZpbHRlcnMgPSB2YWx1ZVxuICAgICAgICAgICAgICAubWFwKCh2KSA9PiBidWlsZEZpbHRlcih2LCB7IGFsaWFzZXMsIHByb3BQcmVmaXgsIGVzY2FwZSB9KSlcbiAgICAgICAgICAgICAgLmZpbHRlcigoZikgPT4gZilcbiAgICAgICAgICAgICAgLm1hcCgoZikgPT5cbiAgICAgICAgICAgICAgICBMT0dJQ0FMX09QRVJBVE9SUy5pbmRleE9mKG9wKSAhPT0gLTEgPyBgKCR7Zn0pYCA6IGZcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChidWlsdEZpbHRlcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIGlmIChMT0dJQ0FMX09QRVJBVE9SUy5pbmRleE9mKG9wKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICBpZiAoYnVpbHRGaWx0ZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgaWYgKG9wID09PSAnbm90Jykge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChwYXJzZU5vdChidWlsdEZpbHRlcnMgYXMgc3RyaW5nW10pKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGAoJHtidWlsdEZpbHRlcnMuam9pbihgICR7b3B9IGApfSlgKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goYnVpbHRGaWx0ZXJzLmpvaW4oYCAke29wfSBgKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKExPR0lDQUxfT1BFUkFUT1JTLmluZGV4T2YocHJvcE5hbWUpICE9PSAtMSkge1xuICAgICAgICAgICAgY29uc3Qgb3AgPSBwcm9wTmFtZTtcbiAgICAgICAgICAgIGNvbnN0IGJ1aWx0RmlsdGVycyA9IE9iamVjdC5rZXlzKHZhbHVlKS5tYXAoKHZhbHVlS2V5KSA9PlxuICAgICAgICAgICAgICBidWlsZEZpbHRlckNvcmUoXG4gICAgICAgICAgICAgICAgeyBbdmFsdWVLZXldOiB2YWx1ZVt2YWx1ZUtleV0gfSxcbiAgICAgICAgICAgICAgICB7IGFsaWFzZXMsIGVzY2FwZSB9XG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoYnVpbHRGaWx0ZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgICBpZiAob3AgPT09ICdub3QnKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gocGFyc2VOb3QoYnVpbHRGaWx0ZXJzIGFzIHN0cmluZ1tdKSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goYCR7YnVpbHRGaWx0ZXJzLmpvaW4oYCAke29wfSBgKX1gKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgaWYgKCd0eXBlJyBpbiB2YWx1ZSkge1xuICAgICAgICAgICAgICByZXN1bHQucHVzaChcbiAgICAgICAgICAgICAgICByZW5kZXJQcmltaXRpdmVWYWx1ZShwcm9wTmFtZSwgdmFsdWUsIHsgYWxpYXNlcywgZXNjYXBlIH0pXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb25zdCBvcGVyYXRvcnMgPSBPYmplY3Qua2V5cyh2YWx1ZSk7XG4gICAgICAgICAgICAgIG9wZXJhdG9ycy5mb3JFYWNoKChvcCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChDT01QQVJJU09OX09QRVJBVE9SUy5pbmRleE9mKG9wKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKFxuICAgICAgICAgICAgICAgICAgICBgJHtwcm9wTmFtZX0gJHtvcH0gJHtub3JtYWxpemVWYWx1ZSh2YWx1ZVtvcF0sIHtcbiAgICAgICAgICAgICAgICAgICAgICBhbGlhc2VzLFxuICAgICAgICAgICAgICAgICAgICAgIGVzY2FwZSxcbiAgICAgICAgICAgICAgICAgICAgfSl9YFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKExPR0lDQUxfT1BFUkFUT1JTLmluZGV4T2Yob3ApICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWVbb3BdKSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVtvcF1cbiAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICh2OiBhbnkpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJygnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZEZpbHRlckNvcmUodiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpYXNlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BQcmVmaXg6IHByb3BOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXNjYXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKSdcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5qb2luKGAgJHtvcH0gYClcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKFxuICAgICAgICAgICAgICAgICAgICAgICcoJyArXG4gICAgICAgICAgICAgICAgICAgICAgICBidWlsZEZpbHRlckNvcmUodmFsdWVbb3BdLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWFzZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BQcmVmaXg6IHByb3BOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBlc2NhcGUsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSArXG4gICAgICAgICAgICAgICAgICAgICAgICAnKSdcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKENPTExFQ1RJT05fT1BFUkFUT1JTLmluZGV4T2Yob3ApICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgY29sbGVjdGlvbkNsYXVzZSA9IGJ1aWxkQ29sbGVjdGlvbkNsYXVzZShcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyS2V5LnRvTG93ZXJDYXNlKCksXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlW29wXSxcbiAgICAgICAgICAgICAgICAgICAgb3AsXG4gICAgICAgICAgICAgICAgICAgIHByb3BOYW1lXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgaWYgKGNvbGxlY3Rpb25DbGF1c2UpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goY29sbGVjdGlvbkNsYXVzZSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvcCA9PT0gJ2hhcycpIHtcbiAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKFxuICAgICAgICAgICAgICAgICAgICBgJHtwcm9wTmFtZX0gJHtvcH0gJHtub3JtYWxpemVWYWx1ZSh2YWx1ZVtvcF0sIHtcbiAgICAgICAgICAgICAgICAgICAgICBhbGlhc2VzLFxuICAgICAgICAgICAgICAgICAgICAgIGVzY2FwZSxcbiAgICAgICAgICAgICAgICAgICAgfSl9YFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9wID09PSAnaW4nKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHRpbmdWYWx1ZXMgPSBBcnJheS5pc0FycmF5KHZhbHVlW29wXSlcbiAgICAgICAgICAgICAgICAgICAgPyB2YWx1ZVtvcF1cbiAgICAgICAgICAgICAgICAgICAgOiB2YWx1ZVtvcF0udmFsdWUubWFwKCh0eXBlZFZhbHVlOiBhbnkpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB2YWx1ZVtvcF0udHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0eXBlZFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goXG4gICAgICAgICAgICAgICAgICAgIHByb3BOYW1lICtcbiAgICAgICAgICAgICAgICAgICAgICAnIGluICgnICtcbiAgICAgICAgICAgICAgICAgICAgICByZXN1bHRpbmdWYWx1ZXNcbiAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoKHY6IGFueSkgPT4gbm9ybWFsaXplVmFsdWUodiwgeyBhbGlhc2VzLCBlc2NhcGUgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAuam9pbignLCcpICtcbiAgICAgICAgICAgICAgICAgICAgICAnKSdcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChCT09MRUFOX0ZVTkNUSU9OUy5pbmRleE9mKG9wKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgIC8vIFNpbXBsZSBib29sZWFuIGZ1bmN0aW9ucyAoc3RhcnRzd2l0aCwgZW5kc3dpdGgsIGNvbnRhaW5zKVxuICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goXG4gICAgICAgICAgICAgICAgICAgIGAke29wfSgke3Byb3BOYW1lfSwke25vcm1hbGl6ZVZhbHVlKHZhbHVlW29wXSwge1xuICAgICAgICAgICAgICAgICAgICAgIGFsaWFzZXMsXG4gICAgICAgICAgICAgICAgICAgICAgZXNjYXBlLFxuICAgICAgICAgICAgICAgICAgICB9KX0pYFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgLy8gTmVzdGVkIHByb3BlcnR5XG4gICAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXIgPSBidWlsZEZpbHRlckNvcmUodmFsdWUsIHtcbiAgICAgICAgICAgICAgICAgICAgYWxpYXNlcyxcbiAgICAgICAgICAgICAgICAgICAgcHJvcFByZWZpeDogcHJvcE5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGVzY2FwZSxcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlcikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChmaWx0ZXIpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyBJZ25vcmUvb21pdCBmaWx0ZXIgaWYgdmFsdWUgaXMgYHVuZGVmaW5lZGBcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIHZhbHVlIHR5cGU6ICR7dmFsdWV9YCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSxcbiAgICAgICAgW11cbiAgICAgICk7XG5cbiAgICAgIGZpbHRlckV4cHIgPSBmaWx0ZXJzQXJyYXkuam9pbignIGFuZCAnKTtcbiAgICB9IC8qIGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgZmlsdGVycyB0eXBlOiAke2ZpbHRlcn1gKTtcbiAgICAgIH0gKi9cbiAgICByZXR1cm4gZmlsdGVyRXhwcjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGJ1aWxkQ29sbGVjdGlvbkNsYXVzZShcbiAgICBsYW1iZGFQYXJhbWV0ZXI6IHN0cmluZyxcbiAgICB2YWx1ZTogYW55LFxuICAgIG9wOiBzdHJpbmcsXG4gICAgcHJvcE5hbWU6IHN0cmluZ1xuICApIHtcbiAgICBsZXQgY2xhdXNlID0gJyc7XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyB8fCB2YWx1ZSBpbnN0YW5jZW9mIFN0cmluZykge1xuICAgICAgY2xhdXNlID0gZ2V0U3RyaW5nQ29sbGVjdGlvbkNsYXVzZShsYW1iZGFQYXJhbWV0ZXIsIHZhbHVlLCBvcCwgcHJvcE5hbWUpO1xuICAgIH0gZWxzZSBpZiAodmFsdWUpIHtcbiAgICAgIC8vIG5vcm1hbGl6ZSB7YW55Olt7cHJvcDE6IDF9LCB7cHJvcDI6IDF9XX0gLS0+IHthbnk6e3Byb3AxOiAxLCBwcm9wMjogMX19OyBzYW1lIGZvciAnYWxsJyxcbiAgICAgIC8vIHNpbXBsZSB2YWx1ZXMgY29sbGVjdGlvbjoge2FueTpbeycnOiAnc2ltcGxlVmFsMSd9LCB7Jyc6ICdzaW1wbGVWYWwyJ31dfSAtLT4ge2FueTp7Jyc6IFsnc2ltcGxlVmFsMScsICdzaW1wbGVWYWwyJ119fTsgc2FtZSBmb3IgJ2FsbCcsXG4gICAgICBjb25zdCBmaWx0ZXJWYWx1ZSA9IEFycmF5LmlzQXJyYXkodmFsdWUpXG4gICAgICAgID8gdmFsdWUucmVkdWNlKChhY2MsIGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGlmIChpdGVtLmhhc093blByb3BlcnR5KElURU1fUk9PVCkpIHtcbiAgICAgICAgICAgICAgaWYgKCFhY2MuaGFzT3duUHJvcGVydHkoSVRFTV9ST09UKSkge1xuICAgICAgICAgICAgICAgIGFjY1tJVEVNX1JPT1RdID0gW107XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYWNjW0lURU1fUk9PVF0ucHVzaChpdGVtW0lURU1fUk9PVF0pO1xuICAgICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHsgLi4uYWNjLCAuLi5pdGVtIH07XG4gICAgICAgICAgfSwge30pXG4gICAgICAgIDogdmFsdWU7XG5cbiAgICAgIGNvbnN0IGZpbHRlciA9IGJ1aWxkRmlsdGVyQ29yZShmaWx0ZXJWYWx1ZSwge1xuICAgICAgICBhbGlhc2VzLFxuICAgICAgICBwcm9wUHJlZml4OiBsYW1iZGFQYXJhbWV0ZXIsXG4gICAgICAgIGVzY2FwZSxcbiAgICAgIH0pO1xuICAgICAgY2xhdXNlID0gYCR7cHJvcE5hbWV9LyR7b3B9KCR7XG4gICAgICAgIGZpbHRlciA/IGAke2xhbWJkYVBhcmFtZXRlcn06JHtmaWx0ZXJ9YCA6ICcnXG4gICAgICB9KWA7XG4gICAgfVxuICAgIHJldHVybiBjbGF1c2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0U3RyaW5nQ29sbGVjdGlvbkNsYXVzZShcbiAgbGFtYmRhUGFyYW1ldGVyOiBzdHJpbmcsXG4gIHZhbHVlOiBhbnksXG4gIGNvbGxlY3Rpb25PcGVyYXRvcjogc3RyaW5nLFxuICBwcm9wTmFtZTogc3RyaW5nXG4pIHtcbiAgbGV0IGNsYXVzZSA9ICcnO1xuICBjb25zdCBjb25kaXRpb25PcGVyYXRvciA9IGNvbGxlY3Rpb25PcGVyYXRvciA9PSAnYWxsJyA/ICduZScgOiAnZXEnO1xuICBjbGF1c2UgPSBgJHtwcm9wTmFtZX0vJHtjb2xsZWN0aW9uT3BlcmF0b3J9KCR7bGFtYmRhUGFyYW1ldGVyfTogJHtsYW1iZGFQYXJhbWV0ZXJ9ICR7Y29uZGl0aW9uT3BlcmF0b3J9ICcke3ZhbHVlfScpYDtcblxuICByZXR1cm4gY2xhdXNlO1xufVxuXG5mdW5jdGlvbiBlc2NhcGVJbGxlZ2FsQ2hhcnMoc3RyaW5nOiBzdHJpbmcpIHtcbiAgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UoLyUvZywgJyUyNScpO1xuICBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZSgvXFwrL2csICclMkInKTtcbiAgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UoL1xcLy9nLCAnJTJGJyk7XG4gIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKC9cXD8vZywgJyUzRicpO1xuICBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZSgvIy9nLCAnJTIzJyk7XG4gIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKC8mL2csICclMjYnKTtcbiAgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UoLycvZywgXCInJ1wiKTtcbiAgcmV0dXJuIHN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZVZhbHVlKFxuICB2YWx1ZTogVmFsdWUsXG4gIHsgYWxpYXNlcywgZXNjYXBlID0gZmFsc2UgfTogeyBhbGlhc2VzPzogUXVlcnlDdXN0b21UeXBlW107IGVzY2FwZT86IGJvb2xlYW4gfVxuKTogYW55IHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZXNjYXBlID8gYCcke2VzY2FwZUlsbGVnYWxDaGFycyh2YWx1ZSl9J2AgOiBgJyR7dmFsdWV9J2A7XG4gIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgcmV0dXJuIHZhbHVlLnRvSVNPU3RyaW5nKCk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiBgWyR7dmFsdWVcbiAgICAgIC5tYXAoKGQpID0+IG5vcm1hbGl6ZVZhbHVlKGQsIHsgYWxpYXNlcywgZXNjYXBlIH0pKVxuICAgICAgLmpvaW4oJywnKX1dYDtcbiAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgc3dpdGNoICh2YWx1ZS50eXBlKSB7XG4gICAgICBjYXNlIFF1ZXJ5Q3VzdG9tVHlwZXMuUmF3OlxuICAgICAgICByZXR1cm4gdmFsdWUudmFsdWU7XG4gICAgICBjYXNlIFF1ZXJ5Q3VzdG9tVHlwZXMuRHVyYXRpb246XG4gICAgICAgIHJldHVybiBgZHVyYXRpb24nJHt2YWx1ZS52YWx1ZX0nYDtcbiAgICAgIGNhc2UgUXVlcnlDdXN0b21UeXBlcy5CaW5hcnk6XG4gICAgICAgIHJldHVybiBgYmluYXJ5JyR7dmFsdWUudmFsdWV9J2A7XG4gICAgICBjYXNlIFF1ZXJ5Q3VzdG9tVHlwZXMuQWxpYXM6XG4gICAgICAgIC8vIFN0b3JlXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGFsaWFzZXMpKSB7XG4gICAgICAgICAgaWYgKHZhbHVlLm5hbWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdmFsdWUubmFtZSA9IGBhJHthbGlhc2VzLmxlbmd0aCArIDF9YDtcbiAgICAgICAgICB9XG4gICAgICAgICAgYWxpYXNlcy5wdXNoKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYEAke3ZhbHVlLm5hbWV9YDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBPYmplY3QuZW50cmllcyh2YWx1ZSlcbiAgICAgICAgICAuZmlsdGVyKChbLCB2XSkgPT4gdiAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgIC5tYXAoXG4gICAgICAgICAgICAoW2ssIHZdKSA9PlxuICAgICAgICAgICAgICBgJHtrfT0ke25vcm1hbGl6ZVZhbHVlKHYgYXMgVmFsdWUsIHsgYWxpYXNlcywgZXNjYXBlIH0pfWBcbiAgICAgICAgICApXG4gICAgICAgICAgLmpvaW4oJywnKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5mdW5jdGlvbiBidWlsZEV4cGFuZDxUPihcbiAgZXhwYW5kczogRXhwYW5kPFQ+LFxuICB7IGFsaWFzZXMsIGVzY2FwZSA9IGZhbHNlIH06IHsgYWxpYXNlcz86IFF1ZXJ5Q3VzdG9tVHlwZVtdOyBlc2NhcGU/OiBib29sZWFuIH1cbik6IHN0cmluZyB7XG4gIGlmICh0eXBlb2YgZXhwYW5kcyA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gZXhwYW5kcyBhcyBhbnk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGV4cGFuZHMgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKGV4cGFuZHMuaW5kZXhPZignLycpID09PSAtMSkge1xuICAgICAgcmV0dXJuIGV4cGFuZHM7XG4gICAgfVxuXG4gICAgLy8gQ2hhbmdlIGBGb28vQmFyL0JhemAgdG8gYEZvbygkZXhwYW5kPUJhcigkZXhwYW5kPUJheikpYFxuICAgIHJldHVybiBleHBhbmRzXG4gICAgICAuc3BsaXQoJy8nKVxuICAgICAgLnJldmVyc2UoKVxuICAgICAgLnJlZHVjZSgocmVzdWx0cywgaXRlbSwgaW5kZXgsIGFycikgPT4ge1xuICAgICAgICBpZiAoaW5kZXggPT09IDApIHtcbiAgICAgICAgICAvLyBJbm5lci1tb3N0IGl0ZW1cbiAgICAgICAgICByZXR1cm4gYCRleHBhbmQ9JHtpdGVtfWA7XG4gICAgICAgIH0gZWxzZSBpZiAoaW5kZXggPT09IGFyci5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgLy8gT3V0ZXItbW9zdCBpdGVtLCBkb24ndCBhZGQgYCRleHBhbmQ9YCBwcmVmaXggKGFkZGVkIGFib3ZlKVxuICAgICAgICAgIHJldHVybiBgJHtpdGVtfSgke3Jlc3VsdHN9KWA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gT3RoZXIgaXRlbXNcbiAgICAgICAgICByZXR1cm4gYCRleHBhbmQ9JHtpdGVtfSgke3Jlc3VsdHN9KWA7XG4gICAgICAgIH1cbiAgICAgIH0sICcnKTtcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGV4cGFuZHMpKSB7XG4gICAgcmV0dXJuIGAkeyhleHBhbmRzIGFzIEFycmF5PE5lc3RlZEV4cGFuZE9wdGlvbnM8YW55Pj4pXG4gICAgICAubWFwKChlKSA9PiBidWlsZEV4cGFuZChlLCB7IGFsaWFzZXMsIGVzY2FwZSB9KSlcbiAgICAgIC5qb2luKCcsJyl9YDtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZXhwYW5kcyA9PT0gJ29iamVjdCcpIHtcbiAgICBjb25zdCBleHBhbmRLZXlzID0gT2JqZWN0LmtleXMoZXhwYW5kcyk7XG5cbiAgICBpZiAoXG4gICAgICBleHBhbmRLZXlzLnNvbWUoXG4gICAgICAgIChrZXkpID0+IFNVUFBPUlRFRF9FWFBBTkRfUFJPUEVSVElFUy5pbmRleE9mKGtleS50b0xvd2VyQ2FzZSgpKSAhPT0gLTFcbiAgICAgIClcbiAgICApIHtcbiAgICAgIHJldHVybiBleHBhbmRLZXlzXG4gICAgICAgIC5tYXAoKGtleSkgPT4ge1xuICAgICAgICAgIGxldCB2YWx1ZTtcbiAgICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgY2FzZSAnZmlsdGVyJzpcbiAgICAgICAgICAgICAgdmFsdWUgPSBidWlsZEZpbHRlcigoZXhwYW5kcyBhcyBOZXN0ZWRFeHBhbmRPcHRpb25zPGFueT4pW2tleV0sIHtcbiAgICAgICAgICAgICAgICBhbGlhc2VzLFxuICAgICAgICAgICAgICAgIGVzY2FwZSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnb3JkZXJCeSc6XG4gICAgICAgICAgICAgIHZhbHVlID0gYnVpbGRPcmRlckJ5KFxuICAgICAgICAgICAgICAgIChleHBhbmRzIGFzIE5lc3RlZEV4cGFuZE9wdGlvbnM8YW55Pilba2V5XSBhcyBPcmRlckJ5PFQ+XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbGV2ZWxzJzpcbiAgICAgICAgICAgIGNhc2UgJ2NvdW50JzpcbiAgICAgICAgICAgIGNhc2UgJ3RvcCc6XG4gICAgICAgICAgICBjYXNlICdza2lwJzpcbiAgICAgICAgICAgICAgdmFsdWUgPSBgJHsoZXhwYW5kcyBhcyBOZXN0ZWRFeHBhbmRPcHRpb25zPGFueT4pW2tleV19YDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICB2YWx1ZSA9IGJ1aWxkRXhwYW5kKFxuICAgICAgICAgICAgICAgIChleHBhbmRzIGFzIE5lc3RlZEV4cGFuZE9wdGlvbnM8YW55Pilba2V5XSBhcyBFeHBhbmQ8VD4sXG4gICAgICAgICAgICAgICAgeyBhbGlhc2VzLCBlc2NhcGUgfVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYCQke2tleS50b0xvd2VyQ2FzZSgpfT0ke3ZhbHVlfWA7XG4gICAgICAgIH0pXG4gICAgICAgIC5qb2luKCc7Jyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBleHBhbmRLZXlzXG4gICAgICAgIC5tYXAoKGtleSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGJ1aWx0RXhwYW5kID0gYnVpbGRFeHBhbmQoXG4gICAgICAgICAgICAoZXhwYW5kcyBhcyBOZXN0ZWRFeHBhbmRPcHRpb25zPGFueT4pW1xuICAgICAgICAgICAgICBrZXlcbiAgICAgICAgICAgIF0gYXMgTmVzdGVkRXhwYW5kT3B0aW9uczxhbnk+LFxuICAgICAgICAgICAgeyBhbGlhc2VzLCBlc2NhcGUgfVxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuIGJ1aWx0RXhwYW5kID8gYCR7a2V5fSgke2J1aWx0RXhwYW5kfSlgIDoga2V5O1xuICAgICAgICB9KVxuICAgICAgICAuam9pbignLCcpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gJyc7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkVHJhbnNmb3JtczxUPihcbiAgdHJhbnNmb3JtczogVHJhbnNmb3JtPFQ+IHwgVHJhbnNmb3JtPFQ+W10sXG4gIHsgYWxpYXNlcywgZXNjYXBlID0gZmFsc2UgfTogeyBhbGlhc2VzPzogUXVlcnlDdXN0b21UeXBlW107IGVzY2FwZT86IGJvb2xlYW4gfVxuKSB7XG4gIC8vIFdyYXAgc2luZ2xlIG9iamVjdCBhbiBhcnJheSBmb3Igc2ltcGxpZmllZCBwcm9jZXNzaW5nXG4gIGNvbnN0IHRyYW5zZm9ybXNBcnJheSA9IEFycmF5LmlzQXJyYXkodHJhbnNmb3JtcykgPyB0cmFuc2Zvcm1zIDogW3RyYW5zZm9ybXNdO1xuXG4gIGNvbnN0IHRyYW5zZm9ybXNSZXN1bHQgPSB0cmFuc2Zvcm1zQXJyYXkucmVkdWNlKFxuICAgIChyZXN1bHQ6IHN0cmluZ1tdLCB0cmFuc2Zvcm0pID0+IHtcbiAgICAgIGNvbnN0IHsgYWdncmVnYXRlLCBmaWx0ZXIsIGdyb3VwQnksIC4uLnJlc3QgfSA9IHRyYW5zZm9ybTtcblxuICAgICAgLy8gVE9ETzogc3VwcG9ydCBhcyBtYW55IG9mIHRoZSBmb2xsb3dpbmc6XG4gICAgICAvLyAgIHRvcGNvdW50LCB0b3BzdW0sIHRvcHBlcmNlbnQsXG4gICAgICAvLyAgIGJvdHRvbXN1bSwgYm90dG9tY291bnQsIGJvdHRvbXBlcmNlbnQsXG4gICAgICAvLyAgIGlkZW50aXR5LCBjb25jYXQsIGV4cGFuZCwgc2VhcmNoLCBjb21wdXRlLCBpc2RlZmluZWRcbiAgICAgIGNvbnN0IHVuc3VwcG9ydGVkS2V5cyA9IE9iamVjdC5rZXlzKHJlc3QpO1xuICAgICAgaWYgKHVuc3VwcG9ydGVkS2V5cy5sZW5ndGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCB0cmFuc2Zvcm0ocyk6ICR7dW5zdXBwb3J0ZWRLZXlzfWApO1xuICAgICAgfVxuXG4gICAgICBpZiAoYWdncmVnYXRlKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGBhZ2dyZWdhdGUoJHtidWlsZEFnZ3JlZ2F0ZShhZ2dyZWdhdGUpfSlgKTtcbiAgICAgIH1cbiAgICAgIGlmIChmaWx0ZXIpIHtcbiAgICAgICAgY29uc3QgYnVpbHRGaWx0ZXIgPSBidWlsZEZpbHRlcihmaWx0ZXIsIHsgYWxpYXNlcywgZXNjYXBlIH0pO1xuICAgICAgICBpZiAoYnVpbHRGaWx0ZXIpIHtcbiAgICAgICAgICByZXN1bHQucHVzaChcbiAgICAgICAgICAgIGBmaWx0ZXIoJHtidWlsZEZpbHRlcihidWlsdEZpbHRlciwgeyBhbGlhc2VzLCBlc2NhcGUgfSl9KWBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZ3JvdXBCeSkge1xuICAgICAgICByZXN1bHQucHVzaChgZ3JvdXBieSgke2J1aWxkR3JvdXBCeShncm91cEJ5LCB7IGFsaWFzZXMsIGVzY2FwZSB9KX0pYCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcbiAgICBbXVxuICApO1xuXG4gIHJldHVybiB0cmFuc2Zvcm1zUmVzdWx0LmpvaW4oJy8nKSB8fCB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkQWdncmVnYXRlKGFnZ3JlZ2F0ZTogQWdncmVnYXRlIHwgQWdncmVnYXRlW10pIHtcbiAgLy8gV3JhcCBzaW5nbGUgb2JqZWN0IGluIGFuIGFycmF5IGZvciBzaW1wbGlmaWVkIHByb2Nlc3NpbmdcbiAgY29uc3QgYWdncmVnYXRlQXJyYXkgPSBBcnJheS5pc0FycmF5KGFnZ3JlZ2F0ZSkgPyBhZ2dyZWdhdGUgOiBbYWdncmVnYXRlXTtcblxuICByZXR1cm4gYWdncmVnYXRlQXJyYXlcbiAgICAubWFwKChhZ2dyZWdhdGVJdGVtKSA9PiB7XG4gICAgICByZXR1cm4gdHlwZW9mIGFnZ3JlZ2F0ZUl0ZW0gPT09ICdzdHJpbmcnXG4gICAgICAgID8gYWdncmVnYXRlSXRlbVxuICAgICAgICA6IE9iamVjdC5rZXlzKGFnZ3JlZ2F0ZUl0ZW0pLm1hcCgoYWdncmVnYXRlS2V5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhZ2dyZWdhdGVWYWx1ZSA9IGFnZ3JlZ2F0ZUl0ZW1bYWdncmVnYXRlS2V5XTtcblxuICAgICAgICAgICAgLy8gVE9ETzogQXJlIHRoZXNlIGFsd2F5cyByZXF1aXJlZD8gIENhbi9zaG91bGQgd2UgZGVmYXVsdCB0aGVtIGlmIHNvP1xuICAgICAgICAgICAgaWYgKCFhZ2dyZWdhdGVWYWx1ZS53aXRoKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJ3dpdGgnIHByb3BlcnR5IHJlcXVpcmVkIGZvciAnJHthZ2dyZWdhdGVLZXl9J2ApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFhZ2dyZWdhdGVWYWx1ZS5hcykge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCdhcycgcHJvcGVydHkgcmVxdWlyZWQgZm9yICcke2FnZ3JlZ2F0ZUtleX0nYCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBgJHthZ2dyZWdhdGVLZXl9IHdpdGggJHthZ2dyZWdhdGVWYWx1ZS53aXRofSBhcyAke2FnZ3JlZ2F0ZVZhbHVlLmFzfWA7XG4gICAgICAgICAgfSk7XG4gICAgfSlcbiAgICAuam9pbignLCcpO1xufVxuXG5mdW5jdGlvbiBidWlsZEdyb3VwQnk8VD4oXG4gIGdyb3VwQnk6IEdyb3VwQnk8VD4sXG4gIHsgYWxpYXNlcywgZXNjYXBlID0gZmFsc2UgfTogeyBhbGlhc2VzPzogUXVlcnlDdXN0b21UeXBlW107IGVzY2FwZT86IGJvb2xlYW4gfVxuKSB7XG4gIGlmICghZ3JvdXBCeS5wcm9wZXJ0aWVzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAncHJvcGVydGllcycgcHJvcGVydHkgcmVxdWlyZWQgZm9yIGdyb3VwQnlgKTtcbiAgfVxuXG4gIGxldCByZXN1bHQgPSBgKCR7Z3JvdXBCeS5wcm9wZXJ0aWVzLmpvaW4oJywnKX0pYDtcblxuICBpZiAoZ3JvdXBCeS50cmFuc2Zvcm0pIHtcbiAgICByZXN1bHQgKz0gYCwke2J1aWxkVHJhbnNmb3Jtcyhncm91cEJ5LnRyYW5zZm9ybSwgeyBhbGlhc2VzLCBlc2NhcGUgfSl9YDtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkT3JkZXJCeTxUPihvcmRlckJ5OiBPcmRlckJ5PFQ+LCBwcmVmaXg6IHN0cmluZyA9ICcnKTogc3RyaW5nIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkob3JkZXJCeSkpIHtcbiAgICByZXR1cm4gKG9yZGVyQnkgYXMgT3JkZXJCeU9iamVjdDxUPltdKVxuICAgICAgLm1hcCgodmFsdWUpID0+XG4gICAgICAgIEFycmF5LmlzQXJyYXkodmFsdWUpICYmXG4gICAgICAgIHZhbHVlLmxlbmd0aCA9PT0gMiAmJlxuICAgICAgICBbJ2FzYycsICdkZXNjJ10uaW5kZXhPZih2YWx1ZVsxXSkgIT09IC0xXG4gICAgICAgICAgPyB2YWx1ZS5qb2luKCcgJylcbiAgICAgICAgICA6IHZhbHVlXG4gICAgICApXG4gICAgICAubWFwKCh2KSA9PiBgJHtwcmVmaXh9JHt2fWApXG4gICAgICAuam9pbignLCcpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBvcmRlckJ5ID09PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyhvcmRlckJ5KVxuICAgICAgLm1hcCgoW2ssIHZdKSA9PiBidWlsZE9yZGVyQnkodiBhcyBPcmRlckJ5PGFueT4sIGAke2t9L2ApKVxuICAgICAgLm1hcCgodikgPT4gYCR7cHJlZml4fSR7dn1gKVxuICAgICAgLmpvaW4oJywnKTtcbiAgfVxuICByZXR1cm4gYCR7cHJlZml4fSR7b3JkZXJCeX1gO1xufVxuXG5mdW5jdGlvbiBidWlsZFVybChwYXRoOiBzdHJpbmcsIHBhcmFtczogeyBbbmFtZTogc3RyaW5nXTogYW55IH0pOiBzdHJpbmcge1xuICAvLyBUaGlzIGNhbiBiZSByZWZhY3RvcmVkIHVzaW5nIFVSTCBBUEkuIEJ1dCBJRSBkb2VzIG5vdCBzdXBwb3J0IGl0LlxuICBjb25zdCBxdWVyaWVzOiBzdHJpbmdbXSA9IE9iamVjdC5lbnRyaWVzKHBhcmFtcykubWFwKFxuICAgIChba2V5LCB2YWx1ZV0pID0+IGAke2tleX09JHt2YWx1ZX1gXG4gICk7XG4gIHJldHVybiBxdWVyaWVzLmxlbmd0aCA/IGAke3BhdGh9PyR7cXVlcmllcy5qb2luKCcmJyl9YCA6IHBhdGg7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTm90KGJ1aWx0RmlsdGVyczogc3RyaW5nW10pOiBzdHJpbmcge1xuICByZXR1cm4gYG5vdCgke2J1aWx0RmlsdGVycy5qb2luKCcgYW5kICcpfSlgO1xufVxuIl19
|
|
@@ -17,4 +17,4 @@ export class Expression {
|
|
|
17
17
|
};
|
|
18
18
|
}
|
|
19
19
|
}
|
|
20
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItb2RhdGEvc3JjL2xpYi9yZXNvdXJjZXMvcXVlcnkvZXhwcmVzc2lvbnMvYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxNQUFNLE9BQWdCLFVBQVU7SUFFOUIsWUFBWSxFQUNWLFFBQVEsTUFHTixFQUFFO1FBQ0osSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLElBQUksRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQztRQUN0QixPQUFPLFlBQVksQ0FBQztJQUN0QixDQUFDO0lBY0QsUUFBUTtRQUNOLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0lBRUQsTUFBTTtRQUNKLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUM7SUFDL0IsQ0FBQztJQUVELE1BQU07UUFDSixPQUFPO1lBQ0wsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7U0FDaEQsQ0FBQztJQUNKLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUXVlcnlDdXN0b21UeXBlIH0gZnJvbSAnLi4vYnVpbGRlcic7XG5pbXBvcnQgeyBSZW5kZXJhYmxlIH0gZnJvbSAnLi9zeW50YXgnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRXhwcmVzc2lvbjxUPiBpbXBsZW1lbnRzIFJlbmRlcmFibGUge1xuICBwcm90ZWN0ZWQgX2NoaWxkcmVuOiBSZW5kZXJhYmxlW107XG4gIGNvbnN0cnVjdG9yKHtcbiAgICBjaGlsZHJlbixcbiAgfToge1xuICAgIGNoaWxkcmVuPzogUmVuZGVyYWJsZVtdO1xuICB9ID0ge30pIHtcbiAgICB0aGlzLl9jaGlsZHJlbiA9IGNoaWxkcmVuIHx8IFtdO1xuICB9XG5cbiAgZ2V0IFtTeW1ib2wudG9TdHJpbmdUYWddKCkge1xuICAgIHJldHVybiAnRXhwcmVzc2lvbic7XG4gIH1cblxuICBhYnN0cmFjdCByZW5kZXIoe1xuICAgIGFsaWFzZXMsXG4gICAgZXNjYXBlLFxuICAgIHByZWZpeCxcbiAgfToge1xuICAgIGFsaWFzZXM/OiBRdWVyeUN1c3RvbVR5cGVbXSB8IHVuZGVmaW5lZDtcbiAgICBlc2NhcGU/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgIHByZWZpeD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgfSk6IHN0cmluZztcblxuICBhYnN0cmFjdCBjbG9uZSgpOiBFeHByZXNzaW9uPFQ+O1xuXG4gIGNoaWxkcmVuKCkge1xuICAgIHJldHVybiB0aGlzLl9jaGlsZHJlbjtcbiAgfVxuXG4gIGxlbmd0aCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY2hpbGRyZW4ubGVuZ3RoO1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjaGlsZHJlbjogdGhpcy5fY2hpbGRyZW4ubWFwKChjKSA9PiBjLnRvSlNPTigpKSxcbiAgICB9O1xuICB9XG59XG4iXX0=
|
|
@@ -11,16 +11,23 @@ export class ComputeExpression extends Expression {
|
|
|
11
11
|
static s() {
|
|
12
12
|
return Field.factory();
|
|
13
13
|
}
|
|
14
|
-
static compute(opts) {
|
|
14
|
+
static compute(opts, current) {
|
|
15
15
|
return opts({
|
|
16
16
|
s: ComputeExpression.s(),
|
|
17
17
|
e: ComputeExpression.e,
|
|
18
|
-
});
|
|
18
|
+
}, current);
|
|
19
19
|
}
|
|
20
20
|
render({ aliases, escape, prefix, } = {}) {
|
|
21
|
-
let children = this._children
|
|
22
|
-
|
|
23
|
-
|
|
21
|
+
let children = this._children.map((n) => n.render({ aliases, escape, prefix }));
|
|
22
|
+
return this.names
|
|
23
|
+
.map((name, index) => `${children[index]} as ${name}`)
|
|
24
|
+
.join(',');
|
|
25
|
+
}
|
|
26
|
+
clone() {
|
|
27
|
+
return new ComputeExpression({
|
|
28
|
+
children: this._children.map((c) => c.clone()),
|
|
29
|
+
names: [...this.names],
|
|
30
|
+
});
|
|
24
31
|
}
|
|
25
32
|
_add(name, node) {
|
|
26
33
|
this.names.push(name);
|
|
@@ -35,4 +42,4 @@ export class ComputeExpression extends Expression {
|
|
|
35
42
|
return this._add(name, node);
|
|
36
43
|
}
|
|
37
44
|
}
|
|
38
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcHV0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItb2RhdGEvc3JjL2xpYi9yZXNvdXJjZXMvcXVlcnkvZXhwcmVzc2lvbnMvY29tcHV0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ3BDLE9BQU8sRUFDTCxLQUFLLEVBQ0wsU0FBUyxFQUdULFNBQVMsR0FFVixNQUFNLFVBQVUsQ0FBQztBQUVsQixNQUFNLE9BQU8saUJBQXFCLFNBQVEsVUFBYTtJQUVyRCxZQUFZLEVBQ1YsUUFBUSxFQUNSLEtBQUssTUFJSCxFQUFFO1FBQ0osS0FBSyxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUNwQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssSUFBSSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELE1BQU0sQ0FBQyxDQUFDO1FBQ04sT0FBTyxJQUFJLGlCQUFpQixFQUFLLENBQUM7SUFDcEMsQ0FBQztJQUVELE1BQU0sQ0FBQyxDQUFDO1FBQ04sT0FBTyxLQUFLLENBQUMsT0FBTyxFQUFLLENBQUM7SUFDNUIsQ0FBQztJQUVELE1BQU0sQ0FBQyxPQUFPLENBQ1osSUFHeUIsRUFDekIsT0FBOEI7UUFFOUIsT0FBTyxJQUFJLENBQ1Q7WUFDRSxDQUFDLEVBQUUsaUJBQWlCLENBQUMsQ0FBQyxFQUFLO1lBQzNCLENBQUMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1NBQ3ZCLEVBQ0QsT0FBTyxDQUNnQixDQUFDO0lBQzVCLENBQUM7SUFFRCxNQUFNLENBQUMsRUFDTCxPQUFPLEVBQ1AsTUFBTSxFQUNOLE1BQU0sTUFLSixFQUFFO1FBQ0osSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUN0QyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUN0QyxDQUFDO1FBQ0YsT0FBTyxJQUFJLENBQUMsS0FBSzthQUNkLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDO2FBQ3JELElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNmLENBQUM7SUFFRCxLQUFLO1FBQ0gsT0FBTyxJQUFJLGlCQUFpQixDQUFDO1lBQzNCLFFBQVEsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzlDLEtBQUssRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztTQUN2QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sSUFBSSxDQUFDLElBQVksRUFBRSxJQUFnQjtRQUN6QyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxQixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxLQUFLLENBQ0gsSUFBWSxFQUNaLElBQXVFO1FBRXZFLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQztZQUNoQixDQUFDLEVBQUUsU0FBOEI7WUFDakMsQ0FBQyxFQUFFLFNBQThCO1NBQ2xDLENBQUMsQ0FBQztRQUNILE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDL0IsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBRdWVyeUN1c3RvbVR5cGUgfSBmcm9tICcuLi9idWlsZGVyJztcbmltcG9ydCB7IEV4cHJlc3Npb24gfSBmcm9tICcuL2Jhc2UnO1xuaW1wb3J0IHtcbiAgRmllbGQsXG4gIGZ1bmN0aW9ucyxcbiAgT0RhdGFGdW5jdGlvbnMsXG4gIE9EYXRhT3BlcmF0b3JzLFxuICBvcGVyYXRvcnMsXG4gIFJlbmRlcmFibGUsXG59IGZyb20gJy4vc3ludGF4JztcblxuZXhwb3J0IGNsYXNzIENvbXB1dGVFeHByZXNzaW9uPFQ+IGV4dGVuZHMgRXhwcmVzc2lvbjxUPiB7XG4gIG5hbWVzOiBzdHJpbmdbXTtcbiAgY29uc3RydWN0b3Ioe1xuICAgIGNoaWxkcmVuLFxuICAgIG5hbWVzLFxuICB9OiB7XG4gICAgY2hpbGRyZW4/OiBSZW5kZXJhYmxlW107XG4gICAgbmFtZXM/OiBzdHJpbmdbXTtcbiAgfSA9IHt9KSB7XG4gICAgc3VwZXIoeyBjaGlsZHJlbiB9KTtcbiAgICB0aGlzLm5hbWVzID0gbmFtZXMgfHwgW107XG4gIH1cblxuICBzdGF0aWMgZTxUPigpIHtcbiAgICByZXR1cm4gbmV3IENvbXB1dGVFeHByZXNzaW9uPFQ+KCk7XG4gIH1cblxuICBzdGF0aWMgczxUIGV4dGVuZHMgb2JqZWN0PigpOiBUIHtcbiAgICByZXR1cm4gRmllbGQuZmFjdG9yeTxUPigpO1xuICB9XG5cbiAgc3RhdGljIGNvbXB1dGU8VCBleHRlbmRzIG9iamVjdD4oXG4gICAgb3B0czogKFxuICAgICAgYnVpbGRlcjogeyBzOiBUOyBlOiAoKSA9PiBDb21wdXRlRXhwcmVzc2lvbjxUPiB9LFxuICAgICAgY3VycmVudD86IENvbXB1dGVFeHByZXNzaW9uPFQ+XG4gICAgKSA9PiBDb21wdXRlRXhwcmVzc2lvbjxUPixcbiAgICBjdXJyZW50PzogQ29tcHV0ZUV4cHJlc3Npb248VD5cbiAgKTogQ29tcHV0ZUV4cHJlc3Npb248VD4ge1xuICAgIHJldHVybiBvcHRzKFxuICAgICAge1xuICAgICAgICBzOiBDb21wdXRlRXhwcmVzc2lvbi5zPFQ+KCksXG4gICAgICAgIGU6IENvbXB1dGVFeHByZXNzaW9uLmUsXG4gICAgICB9LFxuICAgICAgY3VycmVudFxuICAgICkgYXMgQ29tcHV0ZUV4cHJlc3Npb248VD47XG4gIH1cblxuICByZW5kZXIoe1xuICAgIGFsaWFzZXMsXG4gICAgZXNjYXBlLFxuICAgIHByZWZpeCxcbiAgfToge1xuICAgIGFsaWFzZXM/OiBRdWVyeUN1c3RvbVR5cGVbXSB8IHVuZGVmaW5lZDtcbiAgICBlc2NhcGU/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgIHByZWZpeD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgfSA9IHt9KTogc3RyaW5nIHtcbiAgICBsZXQgY2hpbGRyZW4gPSB0aGlzLl9jaGlsZHJlbi5tYXAoKG4pID0+XG4gICAgICBuLnJlbmRlcih7IGFsaWFzZXMsIGVzY2FwZSwgcHJlZml4IH0pXG4gICAgKTtcbiAgICByZXR1cm4gdGhpcy5uYW1lc1xuICAgICAgLm1hcCgobmFtZSwgaW5kZXgpID0+IGAke2NoaWxkcmVuW2luZGV4XX0gYXMgJHtuYW1lfWApXG4gICAgICAuam9pbignLCcpO1xuICB9XG5cbiAgY2xvbmUoKSB7XG4gICAgcmV0dXJuIG5ldyBDb21wdXRlRXhwcmVzc2lvbih7XG4gICAgICBjaGlsZHJlbjogdGhpcy5fY2hpbGRyZW4ubWFwKChjKSA9PiBjLmNsb25lKCkpLFxuICAgICAgbmFtZXM6IFsuLi50aGlzLm5hbWVzXSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2FkZChuYW1lOiBzdHJpbmcsIG5vZGU6IFJlbmRlcmFibGUpOiBDb21wdXRlRXhwcmVzc2lvbjxUPiB7XG4gICAgdGhpcy5uYW1lcy5wdXNoKG5hbWUpO1xuICAgIHRoaXMuX2NoaWxkcmVuLnB1c2gobm9kZSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBmaWVsZDxUIGV4dGVuZHMgb2JqZWN0PihcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgb3B0czogKGU6IHsgbzogT0RhdGFPcGVyYXRvcnM8VD47IGY6IE9EYXRhRnVuY3Rpb25zPFQ+IH0pID0+IFJlbmRlcmFibGVcbiAgKTogQ29tcHV0ZUV4cHJlc3Npb248VD4ge1xuICAgIGNvbnN0IG5vZGUgPSBvcHRzKHtcbiAgICAgIG86IG9wZXJhdG9ycyBhcyBPRGF0YU9wZXJhdG9yczxUPixcbiAgICAgIGY6IGZ1bmN0aW9ucyBhcyBPRGF0YUZ1bmN0aW9uczxUPixcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5fYWRkKG5hbWUsIG5vZGUpO1xuICB9XG59XG4iXX0=
|
|
@@ -1,8 +1,15 @@
|
|
|
1
|
+
import { QueryOptionNames } from '../../../types';
|
|
2
|
+
import { Objects, Types } from '../../../utils';
|
|
1
3
|
import { Expression } from './base';
|
|
2
|
-
import {
|
|
4
|
+
import { FilterExpression } from './filter';
|
|
5
|
+
import { OrderByExpression } from './orderby';
|
|
6
|
+
import { SearchExpression } from './search';
|
|
7
|
+
import { SelectExpression } from './select';
|
|
8
|
+
import { Field, render, } from './syntax';
|
|
3
9
|
export class ExpandField {
|
|
4
|
-
constructor(field) {
|
|
10
|
+
constructor(field, values = {}) {
|
|
5
11
|
this.field = field;
|
|
12
|
+
this.values = values;
|
|
6
13
|
}
|
|
7
14
|
get [Symbol.toStringTag]() {
|
|
8
15
|
return 'ExpandField';
|
|
@@ -13,14 +20,66 @@ export class ExpandField {
|
|
|
13
20
|
};
|
|
14
21
|
}
|
|
15
22
|
render({ aliases, escape, prefix, }) {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
23
|
+
const params = [
|
|
24
|
+
QueryOptionNames.select,
|
|
25
|
+
QueryOptionNames.expand,
|
|
26
|
+
QueryOptionNames.filter,
|
|
27
|
+
QueryOptionNames.search,
|
|
28
|
+
QueryOptionNames.orderBy,
|
|
29
|
+
QueryOptionNames.skip,
|
|
30
|
+
QueryOptionNames.top,
|
|
31
|
+
QueryOptionNames.levels,
|
|
32
|
+
]
|
|
33
|
+
.filter((key) => !Types.isEmpty(this.values[key]))
|
|
34
|
+
.reduce((acc, key) => {
|
|
35
|
+
let value = this.values[key];
|
|
36
|
+
if (Types.rawType(value).endsWith('Expression')) {
|
|
37
|
+
value = value.render({ aliases, prefix, escape });
|
|
38
|
+
}
|
|
39
|
+
return Object.assign(acc, { [key]: value });
|
|
40
|
+
}, {});
|
|
41
|
+
let expand = `${render(this.field, { aliases, escape, prefix })}`;
|
|
42
|
+
if (!Types.isEmpty(params)) {
|
|
43
|
+
expand = `${expand}(${Object.keys(params)
|
|
44
|
+
.map((key) => `$${key}=${params[key]}`)
|
|
45
|
+
.join(';')})`;
|
|
46
|
+
}
|
|
47
|
+
return expand;
|
|
48
|
+
}
|
|
49
|
+
clone() {
|
|
50
|
+
const values = Object.keys(this.values).reduce((acc, key) => Object.assign(acc, { [key]: Objects.clone(this.values[key]) }), {});
|
|
51
|
+
return new ExpandField(this.field.clone(), values);
|
|
52
|
+
}
|
|
53
|
+
select(opts) {
|
|
54
|
+
return this.option(QueryOptionNames.select, SelectExpression.select(opts, this.values[QueryOptionNames.select]));
|
|
55
|
+
}
|
|
56
|
+
expand(opts) {
|
|
57
|
+
return this.option(QueryOptionNames.expand, ExpandExpression.expand(opts, this.values[QueryOptionNames.expand]));
|
|
58
|
+
}
|
|
59
|
+
filter(opts) {
|
|
60
|
+
return this.option(QueryOptionNames.filter, FilterExpression.filter(opts, this.values[QueryOptionNames.filter]));
|
|
61
|
+
}
|
|
62
|
+
search(opts) {
|
|
63
|
+
return this.option(QueryOptionNames.search, SearchExpression.search(opts, this.values[QueryOptionNames.search]));
|
|
64
|
+
}
|
|
65
|
+
orderBy(opts) {
|
|
66
|
+
return this.option(QueryOptionNames.orderBy, OrderByExpression.orderBy(opts, this.values[QueryOptionNames.orderBy]));
|
|
67
|
+
}
|
|
68
|
+
skip(n) {
|
|
69
|
+
return this.option(QueryOptionNames.skip, n);
|
|
70
|
+
}
|
|
71
|
+
top(n) {
|
|
72
|
+
return this.option(QueryOptionNames.top, n);
|
|
73
|
+
}
|
|
74
|
+
levels(n) {
|
|
75
|
+
return this.option(QueryOptionNames.levels, n);
|
|
76
|
+
}
|
|
77
|
+
// Option Handler
|
|
78
|
+
option(name, opts) {
|
|
79
|
+
if (opts !== undefined)
|
|
80
|
+
this.values[name] = opts;
|
|
81
|
+
return this.values[name];
|
|
82
|
+
}
|
|
24
83
|
}
|
|
25
84
|
export class ExpandExpression extends Expression {
|
|
26
85
|
constructor({ children, } = {}) {
|
|
@@ -32,17 +91,22 @@ export class ExpandExpression extends Expression {
|
|
|
32
91
|
static s() {
|
|
33
92
|
return Field.factory();
|
|
34
93
|
}
|
|
35
|
-
static expand(opts) {
|
|
94
|
+
static expand(opts, current) {
|
|
36
95
|
return opts({
|
|
37
96
|
s: ExpandExpression.s(),
|
|
38
97
|
e: ExpandExpression.e,
|
|
39
|
-
});
|
|
98
|
+
}, current);
|
|
40
99
|
}
|
|
41
100
|
render({ aliases, escape, prefix, } = {}) {
|
|
42
101
|
return this._children
|
|
43
102
|
.map((n) => n.render({ aliases, escape, prefix }))
|
|
44
103
|
.join(',');
|
|
45
104
|
}
|
|
105
|
+
clone() {
|
|
106
|
+
return new ExpandExpression({
|
|
107
|
+
children: this._children.map((c) => c.clone()),
|
|
108
|
+
});
|
|
109
|
+
}
|
|
46
110
|
_add(node) {
|
|
47
111
|
this._children.push(node);
|
|
48
112
|
return this;
|
|
@@ -54,4 +118,4 @@ export class ExpandExpression extends Expression {
|
|
|
54
118
|
return this._add(node);
|
|
55
119
|
}
|
|
56
120
|
}
|
|
57
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwYW5kLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1vZGF0YS9zcmMvbGliL3Jlc291cmNlcy9xdWVyeS9leHByZXNzaW9ucy9leHBhbmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUNwQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBYyxNQUFNLFVBQVUsQ0FBQztBQUVyRCxNQUFNLE9BQU8sV0FBVztJQUN0QixZQUFzQixLQUFpQjtRQUFqQixVQUFLLEdBQUwsS0FBSyxDQUFZO0lBQUcsQ0FBQztJQUUzQyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQztRQUN0QixPQUFPLGFBQWEsQ0FBQztJQUN2QixDQUFDO0lBRUQsTUFBTTtRQUNKLE9BQU87WUFDTCxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUU7U0FDM0IsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLENBQUMsRUFDTCxPQUFPLEVBQ1AsTUFBTSxFQUNOLE1BQU0sR0FLUDtRQUNDLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO0lBQzlELENBQUM7SUFFRCxNQUFNLEtBQUksQ0FBQztJQUNYLE1BQU0sS0FBSSxDQUFDO0lBQ1gsTUFBTSxLQUFJLENBQUM7SUFDWCxPQUFPLEtBQUksQ0FBQztJQUNaLEdBQUcsS0FBSSxDQUFDO0lBQ1IsSUFBSSxLQUFJLENBQUM7Q0FDVjtBQUVELE1BQU0sT0FBTyxnQkFBb0IsU0FBUSxVQUFhO0lBQ3BELFlBQVksRUFDVixRQUFRLE1BR04sRUFBRTtRQUNKLEtBQUssQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDdEIsQ0FBQztJQUVELE1BQU0sQ0FBQyxDQUFDO1FBQ04sT0FBTyxJQUFJLGdCQUFnQixFQUFLLENBQUM7SUFDbkMsQ0FBQztJQUVELE1BQU0sQ0FBQyxDQUFDO1FBQ04sT0FBTyxLQUFLLENBQUMsT0FBTyxFQUFLLENBQUM7SUFDNUIsQ0FBQztJQUVELE1BQU0sQ0FBQyxNQUFNLENBQ1gsSUFBd0U7UUFFeEUsT0FBTyxJQUFJLENBQUM7WUFDVixDQUFDLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxFQUFLO1lBQzFCLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1NBQ3RCLENBQXdCLENBQUM7SUFDNUIsQ0FBQztJQUVELE1BQU0sQ0FBQyxFQUNMLE9BQU8sRUFDUCxNQUFNLEVBQ04sTUFBTSxNQUtKLEVBQUU7UUFDSixPQUFPLElBQUksQ0FBQyxTQUFTO2FBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQzthQUNqRCxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDZixDQUFDO0lBRU8sSUFBSSxDQUFDLElBQWdCO1FBQzNCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELEtBQUssQ0FDSCxLQUFVLEVBQ1YsSUFBd0M7UUFFeEMsSUFBSSxJQUFJLEdBQUcsSUFBSSxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEMsSUFBSSxJQUFJLEtBQUssU0FBUztZQUFFLElBQUksQ0FBQyxJQUE0QixDQUFDLENBQUM7UUFDM0QsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUXVlcnlDdXN0b21UeXBlIH0gZnJvbSAnLi4vYnVpbGRlcic7XG5pbXBvcnQgeyBFeHByZXNzaW9uIH0gZnJvbSAnLi9iYXNlJztcbmltcG9ydCB7IEZpZWxkLCByZW5kZXIsIFJlbmRlcmFibGUgfSBmcm9tICcuL3N5bnRheCc7XG5cbmV4cG9ydCBjbGFzcyBFeHBhbmRGaWVsZDxUPiBpbXBsZW1lbnRzIFJlbmRlcmFibGUge1xuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgZmllbGQ6IFJlbmRlcmFibGUpIHt9XG5cbiAgZ2V0IFtTeW1ib2wudG9TdHJpbmdUYWddKCkge1xuICAgIHJldHVybiAnRXhwYW5kRmllbGQnO1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIHJldHVybiB7XG4gICAgICBmaWVsZDogdGhpcy5maWVsZC50b0pTT04oKSxcbiAgICB9O1xuICB9XG5cbiAgcmVuZGVyKHtcbiAgICBhbGlhc2VzLFxuICAgIGVzY2FwZSxcbiAgICBwcmVmaXgsXG4gIH06IHtcbiAgICBhbGlhc2VzPzogUXVlcnlDdXN0b21UeXBlW107XG4gICAgZXNjYXBlPzogYm9vbGVhbjtcbiAgICBwcmVmaXg/OiBzdHJpbmc7XG4gIH0pOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtyZW5kZXIodGhpcy5maWVsZCwgeyBhbGlhc2VzLCBlc2NhcGUsIHByZWZpeCB9KX1gO1xuICB9XG5cbiAgc2VsZWN0KCkge31cbiAgZmlsdGVyKCkge31cbiAgbGV2ZWxzKCkge31cbiAgb3JkZXJCeSgpIHt9XG4gIHRvcCgpIHt9XG4gIHNraXAoKSB7fVxufVxuXG5leHBvcnQgY2xhc3MgRXhwYW5kRXhwcmVzc2lvbjxUPiBleHRlbmRzIEV4cHJlc3Npb248VD4ge1xuICBjb25zdHJ1Y3Rvcih7XG4gICAgY2hpbGRyZW4sXG4gIH06IHtcbiAgICBjaGlsZHJlbj86IFJlbmRlcmFibGVbXTtcbiAgfSA9IHt9KSB7XG4gICAgc3VwZXIoeyBjaGlsZHJlbiB9KTtcbiAgfVxuXG4gIHN0YXRpYyBlPFQ+KCkge1xuICAgIHJldHVybiBuZXcgRXhwYW5kRXhwcmVzc2lvbjxUPigpO1xuICB9XG5cbiAgc3RhdGljIHM8VCBleHRlbmRzIG9iamVjdD4oKTogVCB7XG4gICAgcmV0dXJuIEZpZWxkLmZhY3Rvcnk8VD4oKTtcbiAgfVxuXG4gIHN0YXRpYyBleHBhbmQ8VCBleHRlbmRzIG9iamVjdD4oXG4gICAgb3B0czogKGU6IHsgczogVDsgZTogKCkgPT4gRXhwYW5kRXhwcmVzc2lvbjxUPiB9KSA9PiBFeHBhbmRFeHByZXNzaW9uPFQ+XG4gICk6IEV4cGFuZEV4cHJlc3Npb248VD4ge1xuICAgIHJldHVybiBvcHRzKHtcbiAgICAgIHM6IEV4cGFuZEV4cHJlc3Npb24uczxUPigpLFxuICAgICAgZTogRXhwYW5kRXhwcmVzc2lvbi5lLFxuICAgIH0pIGFzIEV4cGFuZEV4cHJlc3Npb248VD47XG4gIH1cblxuICByZW5kZXIoe1xuICAgIGFsaWFzZXMsXG4gICAgZXNjYXBlLFxuICAgIHByZWZpeCxcbiAgfToge1xuICAgIGFsaWFzZXM/OiBRdWVyeUN1c3RvbVR5cGVbXSB8IHVuZGVmaW5lZDtcbiAgICBlc2NhcGU/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgIHByZWZpeD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgfSA9IHt9KTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fY2hpbGRyZW5cbiAgICAgIC5tYXAoKG4pID0+IG4ucmVuZGVyKHsgYWxpYXNlcywgZXNjYXBlLCBwcmVmaXggfSkpXG4gICAgICAuam9pbignLCcpO1xuICB9XG5cbiAgcHJpdmF0ZSBfYWRkKG5vZGU6IFJlbmRlcmFibGUpOiBFeHBhbmRFeHByZXNzaW9uPFQ+IHtcbiAgICB0aGlzLl9jaGlsZHJlbi5wdXNoKG5vZGUpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZmllbGQ8VCBleHRlbmRzIG9iamVjdD4oXG4gICAgZmllbGQ6IGFueSxcbiAgICBvcHRzPzogKGU6IEV4cGFuZEZpZWxkPGtleW9mIFQ+KSA9PiB2b2lkXG4gICk6IEV4cGFuZEV4cHJlc3Npb248VD4ge1xuICAgIGxldCBub2RlID0gbmV3IEV4cGFuZEZpZWxkKGZpZWxkKTtcbiAgICBpZiAob3B0cyAhPT0gdW5kZWZpbmVkKSBvcHRzKG5vZGUgYXMgRXhwYW5kRmllbGQ8a2V5b2YgVD4pO1xuICAgIHJldHVybiB0aGlzLl9hZGQobm9kZSk7XG4gIH1cbn1cbiJdfQ==
|
|
121
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwYW5kLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1vZGF0YS9zcmMvbGliL3Jlc291cmNlcy9xdWVyeS9leHByZXNzaW9ucy9leHBhbmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVoRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ3BDLE9BQU8sRUFBbUIsZ0JBQWdCLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDN0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzlDLE9BQU8sRUFBbUIsZ0JBQWdCLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDN0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzVDLE9BQU8sRUFDTCxLQUFLLEVBR0wsTUFBTSxHQUVQLE1BQU0sVUFBVSxDQUFDO0FBRWxCLE1BQU0sT0FBTyxXQUFXO0lBQ3RCLFlBQ1ksS0FBVSxFQUNaLFNBQWtDLEVBQUU7UUFEbEMsVUFBSyxHQUFMLEtBQUssQ0FBSztRQUNaLFdBQU0sR0FBTixNQUFNLENBQThCO0lBQzNDLENBQUM7SUFFSixJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQztRQUN0QixPQUFPLGFBQWEsQ0FBQztJQUN2QixDQUFDO0lBRUQsTUFBTTtRQUNKLE9BQU87WUFDTCxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUU7U0FDM0IsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLENBQUMsRUFDTCxPQUFPLEVBQ1AsTUFBTSxFQUNOLE1BQU0sR0FLUDtRQUNDLE1BQU0sTUFBTSxHQUE4QjtZQUN4QyxnQkFBZ0IsQ0FBQyxNQUFN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QyxDQUFDO1FBQzFCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELEtBQUssQ0FBSSxLQUFRLEVBQUUsSUFBa0M7UUFDbkQsSUFBSSxJQUFJLEdBQUcsSUFBSSxXQUFXLENBQUksS0FBSyxDQUFDLENBQUM7UUFDckMsSUFBSSxJQUFJLEtBQUssU0FBUztZQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUXVlcnlPcHRpb25OYW1lcyB9IGZyb20gJy4uLy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IE9iamVjdHMsIFR5cGVzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHR5cGUgeyBRdWVyeUN1c3RvbVR5cGUgfSBmcm9tICcuLi9idWlsZGVyJztcbmltcG9ydCB7IEV4cHJlc3Npb24gfSBmcm9tICcuL2Jhc2UnO1xuaW1wb3J0IHsgRmlsdGVyQ29ubmVjdG9yLCBGaWx0ZXJFeHByZXNzaW9uIH0gZnJvbSAnLi9maWx0ZXInO1xuaW1wb3J0IHsgT3JkZXJCeUV4cHJlc3Npb24gfSBmcm9tICcuL29yZGVyYnknO1xuaW1wb3J0IHsgU2VhcmNoQ29ubmVjdG9yLCBTZWFyY2hFeHByZXNzaW9uIH0gZnJvbSAnLi9zZWFyY2gnO1xuaW1wb3J0IHsgU2VsZWN0RXhwcmVzc2lvbiB9IGZyb20gJy4vc2VsZWN0JztcbmltcG9ydCB7XG4gIEZpZWxkLFxuICBPRGF0YUZ1bmN0aW9ucyxcbiAgT0RhdGFPcGVyYXRvcnMsXG4gIHJlbmRlcixcbiAgUmVuZGVyYWJsZSxcbn0gZnJvbSAnLi9zeW50YXgnO1xuXG5leHBvcnQgY2xhc3MgRXhwYW5kRmllbGQ8VD4gaW1wbGVtZW50cyBSZW5kZXJhYmxlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGZpZWxkOiBhbnksXG4gICAgcHJpdmF0ZSB2YWx1ZXM6IHsgW25hbWU6IHN0cmluZ106IGFueSB9ID0ge31cbiAgKSB7fVxuXG4gIGdldCBbU3ltYm9sLnRvU3RyaW5nVGFnXSgpIHtcbiAgICByZXR1cm4gJ0V4cGFuZEZpZWxkJztcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZmllbGQ6IHRoaXMuZmllbGQudG9KU09OKCksXG4gICAgfTtcbiAgfVxuXG4gIHJlbmRlcih7XG4gICAgYWxpYXNlcyxcbiAgICBlc2NhcGUsXG4gICAgcHJlZml4LFxuICB9OiB7XG4gICAgYWxpYXNlcz86IFF1ZXJ5Q3VzdG9tVHlwZVtdO1xuICAgIGVzY2FwZT86IGJvb2xlYW47XG4gICAgcHJlZml4Pzogc3RyaW5nO1xuICB9KTogc3RyaW5nIHtcbiAgICBjb25zdCBwYXJhbXM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSBbXG4gICAgICBRdWVyeU9wdGlvbk5hbWVzLnNlbGVjdCxcbiAgICAgIFF1ZXJ5T3B0aW9uTmFtZXMuZXhwYW5kLFxuICAgICAgUXVlcnlPcHRpb25OYW1lcy5maWx0ZXIsXG4gICAgICBRdWVyeU9wdGlvbk5hbWVzLnNlYXJjaCxcbiAgICAgIFF1ZXJ5T3B0aW9uTmFtZXMub3JkZXJCeSxcbiAgICAgIFF1ZXJ5T3B0aW9uTmFtZXMuc2tpcCxcbiAgICAgIFF1ZXJ5T3B0aW9uTmFtZXMudG9wLFxuICAgICAgUXVlcnlPcHRpb25OYW1lcy5sZXZlbHMsXG4gICAgXVxuICAgICAgLmZpbHRlcigoa2V5KSA9PiAhVHlwZXMuaXNFbXB0eSh0aGlzLnZhbHVlc1trZXldKSlcbiAgICAgIC5yZWR1Y2UoKGFjYywga2V5KSA9PiB7XG4gICAgICAgIGxldCB2YWx1ZSA9IHRoaXMudmFsdWVzW2tleV07XG4gICAgICAgIGlmIChUeXBlcy5yYXdUeXBlKHZhbHVlKS5lbmRzV2l0aCgnRXhwcmVzc2lvbicpKSB7XG4gICAgICAgICAgdmFsdWUgPSAodmFsdWUgYXMgRXhwcmVzc2lvbjxUPikucmVuZGVyKHsgYWxpYXNlcywgcHJlZml4LCBlc2NhcGUgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oYWNjLCB7IFtrZXldOiB2YWx1ZSB9KTtcbiAgICAgIH0sIHt9KTtcbiAgICBsZXQgZXhwYW5kID0gYCR7cmVuZGVyKHRoaXMuZmllbGQsIHsgYWxpYXNlcywgZXNjYXBlLCBwcmVmaXggfSl9YDtcbiAgICBpZiAoIVR5cGVzLmlzRW1wdHkocGFyYW1zKSkge1xuICAgICAgZXhwYW5kID0gYCR7ZXhwYW5kfSgke09iamVjdC5rZXlzKHBhcmFtcylcbiAgICAgICAgLm1hcCgoa2V5KSA9PiBgJCR7a2V5fT0ke3BhcmFtc1trZXldfWApXG4gICAgICAgIC5qb2luKCc7Jyl9KWA7XG4gICAgfVxuICAgIHJldHVybiBleHBhbmQ7XG4gIH1cblxuICBjbG9uZSgpIHtcbiAgICBjb25zdCB2YWx1ZXMgPSBPYmplY3Qua2V5cyh0aGlzLnZhbHVlcykucmVkdWNlKFxuICAgICAgKGFjYywga2V5KSA9PlxuICAgICAgICBPYmplY3QuYXNzaWduKGFjYywgeyBba2V5XTogT2JqZWN0cy5jbG9uZSh0aGlzLnZhbHVlc1trZXldKSB9KSxcbiAgICAgIHt9XG4gICAgKTtcbiAgICByZXR1cm4gbmV3IEV4cGFuZEZpZWxkKHRoaXMuZmllbGQuY2xvbmUoKSwgdmFsdWVzKTtcbiAgfVxuXG4gIHNlbGVjdDxUIGV4dGVuZHMgb2JqZWN0PihcbiAgICBvcHRzOiAoXG4gICAgICBidWlsZGVyOiB7IHM6IFQ7IGU6ICgpID0+IFNlbGVjdEV4cHJlc3Npb248VD4gfSxcbiAgICAgIGN1cnJlbnQ/OiBTZWxlY3RFeHByZXNzaW9uPFQ+XG4gICAgKSA9PiBTZWxlY3RFeHByZXNzaW9uPFQ+XG4gICk6IFNlbGVjdEV4cHJlc3Npb248VD4ge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbihcbiAgICAgIFF1ZXJ5T3B0aW9uTmFtZXMuc2VsZWN0LFxuICAgICAgU2VsZWN0RXhwcmVzc2lvbi5zZWxlY3Q8VD4ob3B0cywgdGhpcy52YWx1ZXNbUXVlcnlPcHRpb25OYW1lcy5zZWxlY3RdKVxuICAgICk7XG4gIH1cblxuICBleHBhbmQ8VCBleHRlbmRzIG9iamVjdD4oXG4gICAgb3B0czogKFxuICAgICAgYnVpbGRlcjogeyBzOiBUOyBlOiAoKSA9PiBFeHBhbmRFeHByZXNzaW9uPFQ+IH0sXG4gICAgICBjdXJyZW50PzogRXhwYW5kRXhwcmVzc2lvbjxUPlxuICAgICkgPT4gRXhwYW5kRXhwcmVzc2lvbjxUPlxuICApIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb24oXG4gICAgICBRdWVyeU9wdGlvbk5hbWVzLmV4cGFuZCxcbiAgICAgIEV4cGFuZEV4cHJlc3Npb24uZXhwYW5kPFQ+KG9wdHMsIHRoaXMudmFsdWVzW1F1ZXJ5T3B0aW9uTmFtZXMuZXhwYW5kXSlcbiAgICApO1xuICB9XG5cbiAgZmlsdGVyPFQgZXh0ZW5kcyBvYmplY3Q+KFxuICAgIG9wdHM6IChcbiAgICAgIGJ1aWxkZXI6IHtcbiAgICAgICAgczogVDtcbiAgICAgICAgZTogKGNvbm5lY3Rvcj86IEZpbHRlckNvbm5lY3RvcikgPT4gRmlsdGVyRXhwcmVzc2lvbjxUPjtcbiAgICAgICAgbzogT0RhdGFPcGVyYXRvcnM8VD47XG4gICAgICAgIGY6IE9EYXRhRnVuY3Rpb25zPFQ+O1xuICAgICAgfSxcbiAgICAgIGN1cnJlbnQ/OiBGaWx0ZXJFeHByZXNzaW9uPFQ+XG4gICAgKSA9PiBGaWx0ZXJFeHByZXNzaW9uPFQ+XG4gICkge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbihcbiAgICAgIFF1ZXJ5T3B0aW9uTmFtZXMuZmlsdGVyLFxuICAgICAgRmlsdGVyRXhwcmVzc2lvbi5maWx0ZXI8VD4ob3B0cywgdGhpcy52YWx1ZXNbUXVlcnlPcHRpb25OYW1lcy5maWx0ZXJdKVxuICAgICk7XG4gIH1cblxuICBzZWFyY2g8VCBleHRlbmRzIG9iamVjdD4oXG4gICAgb3B0czogKGJ1aWxkZXI6IHtcbiAgICAgIGU6IChjb25uZWN0b3I/OiBTZWFyY2hDb25uZWN0b3IpID0+IFNlYXJjaEV4cHJlc3Npb248VD47XG4gICAgfSkgPT4gU2VhcmNoRXhwcmVzc2lvbjxUPlxuICApIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb24oXG4gICAgICBRdWVyeU9wdGlvbk5hbWVzLnNlYXJjaCxcbiAgICAgIFNlYXJjaEV4cHJlc3Npb24uc2VhcmNoPFQ+KG9wdHMsIHRoaXMudmFsdWVzW1F1ZXJ5T3B0aW9uTmFtZXMuc2VhcmNoXSlcbiAgICApO1xuICB9XG5cbiAgb3JkZXJCeTxUIGV4dGVuZHMgb2JqZWN0PihcbiAgICBvcHRzOiAoXG4gICAgICBidWlsZGVyOiB7IHM6IFQ7IGU6ICgpID0+IE9yZGVyQnlFeHByZXNzaW9uPFQ+IH0sXG4gICAgICBjdXJyZW50PzogT3JkZXJCeUV4cHJlc3Npb248VD5cbiAgICApID0+IE9yZGVyQnlFeHByZXNzaW9uPFQ+XG4gICkge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbihcbiAgICAgIFF1ZXJ5T3B0aW9uTmFtZXMub3JkZXJCeSxcbiAgICAgIE9yZGVyQnlFeHByZXNzaW9uLm9yZGVyQnk8VD4ob3B0cywgdGhpcy52YWx1ZXNbUXVlcnlPcHRpb25OYW1lcy5vcmRlckJ5XSlcbiAgICApO1xuICB9XG5cbiAgc2tpcChuOiBudW1iZXIpIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb248bnVtYmVyPihRdWVyeU9wdGlvbk5hbWVzLnNraXAsIG4pO1xuICB9XG5cbiAgdG9wKG46IG51bWJlcikge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbjxudW1iZXI+KFF1ZXJ5T3B0aW9uTmFtZXMudG9wLCBuKTtcbiAgfVxuXG4gIGxldmVscyhuOiBudW1iZXIgfCAnbWF4Jykge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbjxudW1iZXIgfCAnbWF4Jz4oUXVlcnlPcHRpb25OYW1lcy5sZXZlbHMsIG4pO1xuICB9XG5cbiAgLy8gT3B0aW9uIEhhbmRsZXJcbiAgcHJpdmF0ZSBvcHRpb248Tz4obmFtZTogUXVlcnlPcHRpb25OYW1lcywgb3B0cz86IE8pIHtcbiAgICBpZiAob3B0cyAhPT0gdW5kZWZpbmVkKSB0aGlzLnZhbHVlc1tuYW1lXSA9IG9wdHM7XG4gICAgcmV0dXJuIHRoaXMudmFsdWVzW25hbWVdO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFeHBhbmRFeHByZXNzaW9uPFQ+IGV4dGVuZHMgRXhwcmVzc2lvbjxUPiB7XG4gIGNvbnN0cnVjdG9yKHtcbiAgICBjaGlsZHJlbixcbiAgfToge1xuICAgIGNoaWxkcmVuPzogUmVuZGVyYWJsZVtdO1xuICB9ID0ge30pIHtcbiAgICBzdXBlcih7IGNoaWxkcmVuIH0pO1xuICB9XG5cbiAgc3RhdGljIGU8VD4oKSB7XG4gICAgcmV0dXJuIG5ldyBFeHBhbmRFeHByZXNzaW9uPFQ+KCk7XG4gIH1cblxuICBzdGF0aWMgczxUIGV4dGVuZHMgb2JqZWN0PigpOiBUIHtcbiAgICByZXR1cm4gRmllbGQuZmFjdG9yeTxUPigpO1xuICB9XG5cbiAgc3RhdGljIGV4cGFuZDxUIGV4dGVuZHMgb2JqZWN0PihcbiAgICBvcHRzOiAoXG4gICAgICBidWlsZGVyOiB7IHM6IFQ7IGU6ICgpID0+IEV4cGFuZEV4cHJlc3Npb248VD4gfSxcbiAgICAgIGN1cnJlbnQ/OiBFeHBhbmRFeHByZXNzaW9uPFQ+XG4gICAgKSA9PiBFeHBhbmRFeHByZXNzaW9uPFQ+LFxuICAgIGN1cnJlbnQ/OiBFeHBhbmRFeHByZXNzaW9uPFQ+XG4gICk6IEV4cGFuZEV4cHJlc3Npb248VD4ge1xuICAgIHJldHVybiBvcHRzKFxuICAgICAge1xuICAgICAgICBzOiBFeHBhbmRFeHByZXNzaW9uLnM8VD4oKSxcbiAgICAgICAgZTogRXhwYW5kRXhwcmVzc2lvbi5lLFxuICAgICAgfSxcbiAgICAgIGN1cnJlbnRcbiAgICApIGFzIEV4cGFuZEV4cHJlc3Npb248VD47XG4gIH1cblxuICByZW5kZXIoe1xuICAgIGFsaWFzZXMsXG4gICAgZXNjYXBlLFxuICAgIHByZWZpeCxcbiAgfToge1xuICAgIGFsaWFzZXM/OiBRdWVyeUN1c3RvbVR5cGVbXSB8IHVuZGVmaW5lZDtcbiAgICBlc2NhcGU/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgIHByZWZpeD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgfSA9IHt9KTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fY2hpbGRyZW5cbiAgICAgIC5tYXAoKG4pID0+IG4ucmVuZGVyKHsgYWxpYXNlcywgZXNjYXBlLCBwcmVmaXggfSkpXG4gICAgICAuam9pbignLCcpO1xuICB9XG5cbiAgY2xvbmUoKSB7XG4gICAgcmV0dXJuIG5ldyBFeHBhbmRFeHByZXNzaW9uKHtcbiAgICAgIGNoaWxkcmVuOiB0aGlzLl9jaGlsZHJlbi5tYXAoKGMpID0+IGMuY2xvbmUoKSksXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9hZGQobm9kZTogUmVuZGVyYWJsZSk6IEV4cGFuZEV4cHJlc3Npb248VD4ge1xuICAgIHRoaXMuX2NoaWxkcmVuLnB1c2gobm9kZSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBmaWVsZDxGPihmaWVsZDogRiwgb3B0cz86IChlOiBFeHBhbmRGaWVsZDxGPikgPT4gdm9pZCk6IEV4cGFuZEV4cHJlc3Npb248Rj4ge1xuICAgIGxldCBub2RlID0gbmV3IEV4cGFuZEZpZWxkPEY+KGZpZWxkKTtcbiAgICBpZiAob3B0cyAhPT0gdW5kZWZpbmVkKSBvcHRzKG5vZGUpO1xuICAgIHJldHVybiB0aGlzLl9hZGQobm9kZSk7XG4gIH1cbn1cbiJdfQ==
|